Index: trunk/web/logout.jsp
===================================================================
--- trunk/web/logout.jsp	(revision 0)
+++ trunk/web/logout.jsp	(revision 9)
@@ -0,0 +1,5 @@
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%
+    session.invalidate();
+    response.sendRedirect("login.jsp");
+%>
\ No newline at end of file
Index: trunk/web/info.jsp
===================================================================
--- trunk/web/info.jsp	(revision 0)
+++ trunk/web/info.jsp	(revision 9)
@@ -0,0 +1,17 @@
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<h2>LIDAR</h2>
+<p>Lidar je naprava podobna radarju. Namesto radijskih valov uporablja svetlobo. Uporabimo ga lahko za zaznavanje delcev v zraku, pretežno različnih onesnaževalcev ali za merjenje vremenskih pojavov. Lidar skupaj s podpornimi elementi tvori lidarski sistem, ki se bo pretežno uporabljal v Luki Koper, d.d. Obstaja namreč želja, da se tam kvantitativno ovrednoti stopnjo onesnaževanja.</p>
+<br/>
+<strong>Cilji:</strong>
+<ul>
+    <li>Zasnovati, programirati in izdelati vgradni modul za premikanje lidarja v dano prostorsko orientacijo. Poleg neposredne interakcije modula z uporabnikom prek vgrajene tipkovnice, naj obvezno obstajala moznost krmiljenja iz osebnega racunalnika.</li>
+    <li>Razviti programsko opremo za interaktivni nadzor lidarskega sistema, za zajemanje, prikaz in shranjevanje podatkov (ter nadaljno analizo). Programska oprema naj vkljucuje podporo web-kameri, ki smo jo pritrdili na lidar ter algoritme za računalniški vid, ki bi pripomogli k avtomatizaciji postopka merjenja.</li>
+</ul>
+<br/>
+<strong>Metode:</strong><br/>
+<p>Uporaba standardnega zrcalnega teleskopa in polprevodniške fotodiode, ki skupaj sestavljata detektor. Prilagoditev komercialnega večnamenskega Nd:YAG sunkovnega laserja, da postane očem varen in uporaben kot izvor svetlobnih sunkov. Uporaba Microchip Inc. PIC mikrokrmilnika, programiranega v C. Izdelava modula za gibanje lidarja s pomočjo dveh, v podstavek teleskopa vgrajenih koračnih motorjev. Vgradnja Hitachi kompatibilnega prikazovalnika in enostavne tipkovnice v modul za gibanje lidarja. Za komunikacijske namene uporabljamo RS-232 protokol. Kalibracijske algoritme in algoritme za računalniški vid uporabljamo za natančno pozicioniranje.</p>
+<p>Uporabljajo se algoritmi: Harrisov detektor, opisniki lokalnih značilnih točk, iskanje korespondenc med slikami, Gaussovo filtriranje, izračun gradientov slik, indeksna tabela in algoritem RANSAC.</p>
+<p>Razvoj temelji na modernemu razvojnemu okolju C#, ki ga uporabimo za razvoj uporabniku prijaznega in interaktivnega gračnega vmesnika. Za shranjevanje podatkov uporabimo bazo podatkov in za njihov prikaz nekaj na novo izdelanih gračnih kontrol.</p>
+<br/>
+<strong>Rezultati:</strong><br/>
+<p>Delujoč mobilni lidarski sistem z interaktivno računalniško podporo.</p>
\ No newline at end of file
Index: trunk/web/WEB-INF/web.xml
===================================================================
--- trunk/web/WEB-INF/web.xml	(revision 0)
+++ trunk/web/WEB-INF/web.xml	(revision 9)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+    <listener>
+        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
+    </listener>
+    <servlet>
+        <servlet-name>Video</servlet-name>
+        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet>
+        <servlet-name>LogServlet</servlet-name>
+        <servlet-class>org.lidar.LogServlet</servlet-class>
+    </servlet>
+    <servlet>
+        <servlet-name>Sensor</servlet-name>
+        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet>
+        <servlet-name>Motion</servlet-name>
+        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet>
+        <servlet-name>Laser</servlet-name>
+        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet>
+        <servlet-name>Management</servlet-name>
+        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Video</servlet-name>
+        <url-pattern>/Video</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>LogServlet</servlet-name>
+        <url-pattern>/log.json</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Sensor</servlet-name>
+        <url-pattern>/Sensor</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Motion</servlet-name>
+        <url-pattern>/Motion</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Laser</servlet-name>
+        <url-pattern>/Laser</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>Management</servlet-name>
+        <url-pattern>/Management</url-pattern>
+    </servlet-mapping>
+    <session-config>
+        <session-timeout>
+            30
+        </session-timeout>
+    </session-config>
+    <welcome-file-list>
+        <welcome-file>index.jsp</welcome-file>
+    </welcome-file-list>
+</web-app>
Index: trunk/web/WEB-INF/sun-jaxws.xml
===================================================================
--- trunk/web/WEB-INF/sun-jaxws.xml	(revision 0)
+++ trunk/web/WEB-INF/sun-jaxws.xml	(revision 9)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
+  <endpoint implementation="org.lidar.api.Video" name="Video" url-pattern="/Video"/>
+  <endpoint implementation="org.lidar.api.Sensor" name="Sensor" url-pattern="/Sensor"/>
+  <endpoint implementation="org.lidar.api.Motion" name="Motion" url-pattern="/Motion"/>
+  <endpoint implementation="org.lidar.api.Laser" name="Laser" url-pattern="/Laser"/>
+  <endpoint implementation="org.lidar.api.Management" name="Management" url-pattern="/Management"/>
+</endpoints>
Index: trunk/web/WEB-INF/wsit-org.lidar.api.Motion.xml
===================================================================
--- trunk/web/WEB-INF/wsit-org.lidar.api.Motion.xml	(revision 0)
+++ trunk/web/WEB-INF/wsit-org.lidar.api.Motion.xml	(revision 9)
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+ <definitions 
+ xmlns="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="MotionService" targetNamespace="http://api.lidar.org/" xmlns:tns="http://api.lidar.org/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsrm="http://docs.oasis-open.org/ws-rx/wsrmp/200702"
+ >
+    <message name="setMove0"/>
+    <message name="setMove0Response"/>
+    <message name="setMove1"/>
+    <message name="setMove1Response"/>
+    <message name="run"/>
+    <message name="runResponse"/>
+    <message name="setInitialAngularVel0"/>
+    <message name="setInitialAngularVel0Response"/>
+    <message name="setInitialAngularVel1"/>
+    <message name="setInitialAngularVel1Response"/>
+    <message name="setAngularAcceleration0"/>
+    <message name="setAngularAcceleration0Response"/>
+    <message name="setAngularAcceleration1"/>
+    <message name="setAngularAcceleration1Response"/>
+    <message name="setLackCorrection0"/>
+    <message name="setLackCorrection0Response"/>
+    <message name="setLackCorrection1"/>
+    <message name="setLackCorrection1Response"/>
+    <message name="setAngularDeceleration0"/>
+    <message name="setAngularDeceleration0Response"/>
+    <message name="setAngularDeceleration1"/>
+    <message name="setAngularDeceleration1Response"/>
+    <message name="setPosition0"/>
+    <message name="setPosition0Response"/>
+    <message name="setPosition1"/>
+    <message name="setPosition1Response"/>
+    <message name="stopMotor0"/>
+    <message name="stopMotor0Response"/>
+    <message name="stopMotor1"/>
+    <message name="stopMotor1Response"/>
+    <message name="setMotorOff0"/>
+    <message name="setMotorOff0Response"/>
+    <message name="setMotorOff1"/>
+    <message name="setMotorOff1Response"/>
+    <message name="getPosition"/>
+    <message name="getPositionResponse"/>
+    <message name="setContinuousKeyMovement"/>
+    <message name="setContinuousKeyMovementResponse"/>
+    <message name="setSingleStepKeyMovement"/>
+    <message name="setSingleStepKeyMovementResponse"/>
+    <message name="simulateLeftKeyPress"/>
+    <message name="simulateLeftKeyPressResponse"/>
+    <message name="simulateLeftKeyRelease"/>
+    <message name="simulateLeftKeyReleaseResponse"/>
+    <message name="simulateRightKeyPress"/>
+    <message name="simulateRightKeyPressResponse"/>
+    <message name="simulateRightKeyRelease"/>
+    <message name="simulateRightKeyReleaseResponse"/>
+    <message name="simulateUpKeyPress"/>
+    <message name="simulateUpKeyPressResponse"/>
+    <message name="simulateUpKeyRelease"/>
+    <message name="simulateUpKeyReleaseResponse"/>
+    <message name="simulateDownKeyPress"/>
+    <message name="simulateDownKeyPressResponse"/>
+    <message name="simulateDownKeyRelease"/>
+    <message name="simulateDownKeyReleaseResponse"/>
+    <message name="setAutomaticPositionReporting"/>
+    <message name="setAutomaticPositionReportingResponse"/>
+    <portType name="Motion">
+        <operation name="setMove0">
+            <input message="tns:setMove0"/>
+            <output message="tns:setMove0Response"/>
+        </operation>
+        <operation name="setMove1">
+            <input message="tns:setMove1"/>
+            <output message="tns:setMove1Response"/>
+        </operation>
+        <operation name="run">
+            <input message="tns:run"/>
+            <output message="tns:runResponse"/>
+        </operation>
+        <operation name="setInitialAngularVel0">
+            <input message="tns:setInitialAngularVel0"/>
+            <output message="tns:setInitialAngularVel0Response"/>
+        </operation>
+        <operation name="setInitialAngularVel1">
+            <input message="tns:setInitialAngularVel1"/>
+            <output message="tns:setInitialAngularVel1Response"/>
+        </operation>
+        <operation name="setAngularAcceleration0">
+            <input message="tns:setAngularAcceleration0"/>
+            <output message="tns:setAngularAcceleration0Response"/>
+        </operation>
+        <operation name="setAngularAcceleration1">
+            <input message="tns:setAngularAcceleration1"/>
+            <output message="tns:setAngularAcceleration1Response"/>
+        </operation>
+        <operation name="setLackCorrection0">
+            <input message="tns:setLackCorrection0"/>
+            <output message="tns:setLackCorrection0Response"/>
+        </operation>
+        <operation name="setLackCorrection1">
+            <input message="tns:setLackCorrection1"/>
+            <output message="tns:setLackCorrection1Response"/>
+        </operation>
+        <operation name="setAngularDeceleration0">
+            <input message="tns:setAngularDeceleration0"/>
+            <output message="tns:setAngularDeceleration0Response"/>
+        </operation>
+        <operation name="setAngularDeceleration1">
+            <input message="tns:setAngularDeceleration1"/>
+            <output message="tns:setAngularDeceleration1Response"/>
+        </operation>
+        <operation name="setPosition0">
+            <input message="tns:setPosition0"/>
+            <output message="tns:setPosition0Response"/>
+        </operation>
+        <operation name="setPosition1">
+            <input message="tns:setPosition1"/>
+            <output message="tns:setPosition1Response"/>
+        </operation>
+        <operation name="stopMotor0">
+            <input message="tns:stopMotor0"/>
+            <output message="tns:stopMotor0Response"/>
+        </operation>
+        <operation name="stopMotor1">
+            <input message="tns:stopMotor1"/>
+            <output message="tns:stopMotor1Response"/>
+        </operation>
+        <operation name="setMotorOff0">
+            <input message="tns:setMotorOff0"/>
+            <output message="tns:setMotorOff0Response"/>
+        </operation>
+        <operation name="setMotorOff1">
+            <input message="tns:setMotorOff1"/>
+            <output message="tns:setMotorOff1Response"/>
+        </operation>
+        <operation name="getPosition">
+            <input message="tns:getPosition"/>
+            <output message="tns:getPositionResponse"/>
+        </operation>
+        <operation name="setContinuousKeyMovement">
+            <input message="tns:setContinuousKeyMovement"/>
+            <output message="tns:setContinuousKeyMovementResponse"/>
+        </operation>
+        <operation name="setSingleStepKeyMovement">
+            <input message="tns:setSingleStepKeyMovement"/>
+            <output message="tns:setSingleStepKeyMovementResponse"/>
+        </operation>
+        <operation name="simulateLeftKeyPress">
+            <input message="tns:simulateLeftKeyPress"/>
+            <output message="tns:simulateLeftKeyPressResponse"/>
+        </operation>
+        <operation name="simulateLeftKeyRelease">
+            <input message="tns:simulateLeftKeyRelease"/>
+            <output message="tns:simulateLeftKeyReleaseResponse"/>
+        </operation>
+        <operation name="simulateRightKeyPress">
+            <input message="tns:simulateRightKeyPress"/>
+            <output message="tns:simulateRightKeyPressResponse"/>
+        </operation>
+        <operation name="simulateRightKeyRelease">
+            <input message="tns:simulateRightKeyRelease"/>
+            <output message="tns:simulateRightKeyReleaseResponse"/>
+        </operation>
+        <operation name="simulateUpKeyPress">
+            <input message="tns:simulateUpKeyPress"/>
+            <output message="tns:simulateUpKeyPressResponse"/>
+        </operation>
+        <operation name="simulateUpKeyRelease">
+            <input message="tns:simulateUpKeyRelease"/>
+            <output message="tns:simulateUpKeyReleaseResponse"/>
+        </operation>
+        <operation name="simulateDownKeyPress">
+            <input message="tns:simulateDownKeyPress"/>
+            <output message="tns:simulateDownKeyPressResponse"/>
+        </operation>
+        <operation name="simulateDownKeyRelease">
+            <input message="tns:simulateDownKeyRelease"/>
+            <output message="tns:simulateDownKeyReleaseResponse"/>
+        </operation>
+        <operation name="setAutomaticPositionReporting">
+            <input message="tns:setAutomaticPositionReporting"/>
+            <output message="tns:setAutomaticPositionReportingResponse"/>
+        </operation>
+    </portType>
+    <binding name="MotionPortBinding" type="tns:Motion">
+        <wsp:PolicyReference URI="#MotionPortBindingPolicy"/>
+        <operation name="setMove0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setMove1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="run">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setInitialAngularVel0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setInitialAngularVel1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setAngularAcceleration0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setAngularAcceleration1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setLackCorrection0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setLackCorrection1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setAngularDeceleration0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setAngularDeceleration1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setPosition0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setPosition1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="stopMotor0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="stopMotor1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setMotorOff0">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setMotorOff1">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="getPosition">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setContinuousKeyMovement">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setSingleStepKeyMovement">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateLeftKeyPress">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateLeftKeyRelease">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateRightKeyPress">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateRightKeyRelease">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateUpKeyPress">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateUpKeyRelease">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateDownKeyPress">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="simulateDownKeyRelease">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setAutomaticPositionReporting">
+            <input/>
+            <output/>
+        </operation>
+    </binding>
+    <service name="MotionService">
+        <port name="MotionPort" binding="tns:MotionPortBinding"/>
+    </service>
+    <wsp:Policy wsu:Id="MotionPortBindingPolicy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <wsam:Addressing wsp:Optional="false"/>
+                <wsrm:RMAssertion/>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+</definitions>
Index: trunk/web/WEB-INF/wsit-org.lidar.api.Laser.xml
===================================================================
--- trunk/web/WEB-INF/wsit-org.lidar.api.Laser.xml	(revision 0)
+++ trunk/web/WEB-INF/wsit-org.lidar.api.Laser.xml	(revision 9)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+ <definitions 
+ xmlns="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="LaserService" targetNamespace="http://api.lidar.org/" xmlns:tns="http://api.lidar.org/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsrm="http://docs.oasis-open.org/ws-rx/wsrmp/200702"
+ >
+    <message name="fire"/>
+    <message name="fireResponse"/>
+    <message name="stop"/>
+    <message name="stopResponse"/>
+    <message name="saveConfig"/>
+    <message name="saveConfigResponse"/>
+    <message name="setMode"/>
+    <message name="setModeResponse"/>
+    <message name="setQSwitch"/>
+    <message name="setQSwitchResponse"/>
+    <message name="setKeypad"/>
+    <message name="setKeypadResponse"/>
+    <message name="setBurstPulseCount"/>
+    <message name="setBurstPulseCountResponse"/>
+    <message name="setQSwitchFrequency"/>
+    <message name="setQSwitchFrequencyResponse"/>
+    <message name="setQSwitchDelay"/>
+    <message name="setQSwitchDelayResponse"/>
+    <message name="setEnergyLevel"/>
+    <message name="setEnergyLevelResponse"/>
+    <message name="setRepetitionRate"/>
+    <message name="setRepetitionRateResponse"/>
+    <portType name="Laser">
+        <operation name="fire">
+            <input message="tns:fire"/>
+            <output message="tns:fireResponse"/>
+        </operation>
+        <operation name="stop">
+            <input message="tns:stop"/>
+            <output message="tns:stopResponse"/>
+        </operation>
+        <operation name="saveConfig">
+            <input message="tns:saveConfig"/>
+            <output message="tns:saveConfigResponse"/>
+        </operation>
+        <operation name="setMode">
+            <input message="tns:setMode"/>
+            <output message="tns:setModeResponse"/>
+        </operation>
+        <operation name="setQSwitch">
+            <input message="tns:setQSwitch"/>
+            <output message="tns:setQSwitchResponse"/>
+        </operation>
+        <operation name="setKeypad">
+            <input message="tns:setKeypad"/>
+            <output message="tns:setKeypadResponse"/>
+        </operation>
+        <operation name="setBurstPulseCount">
+            <input message="tns:setBurstPulseCount"/>
+            <output message="tns:setBurstPulseCountResponse"/>
+        </operation>
+        <operation name="setQSwitchFrequency">
+            <input message="tns:setQSwitchFrequency"/>
+            <output message="tns:setQSwitchFrequencyResponse"/>
+        </operation>
+        <operation name="setQSwitchDelay">
+            <input message="tns:setQSwitchDelay"/>
+            <output message="tns:setQSwitchDelayResponse"/>
+        </operation>
+        <operation name="setEnergyLevel">
+            <input message="tns:setEnergyLevel"/>
+            <output message="tns:setEnergyLevelResponse"/>
+        </operation>
+        <operation name="setRepetitionRate">
+            <input message="tns:setRepetitionRate"/>
+            <output message="tns:setRepetitionRateResponse"/>
+        </operation>
+    </portType>
+    <binding name="LaserPortBinding" type="tns:Laser">
+        <wsp:PolicyReference URI="#LaserPortBindingPolicy"/>
+        <operation name="fire">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="stop">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="saveConfig">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setMode">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setQSwitch">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setKeypad">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setBurstPulseCount">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setQSwitchFrequency">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setQSwitchDelay">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setEnergyLevel">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setRepetitionRate">
+            <input/>
+            <output/>
+        </operation>
+    </binding>
+    <service name="LaserService">
+        <port name="LaserPort" binding="tns:LaserPortBinding"/>
+    </service>
+    <wsp:Policy wsu:Id="LaserPortBindingPolicy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <wsam:Addressing wsp:Optional="false"/>
+                <wsrm:RMAssertion/>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+</definitions>
Index: trunk/web/WEB-INF/wsit-org.lidar.api.Video.xml
===================================================================
--- trunk/web/WEB-INF/wsit-org.lidar.api.Video.xml	(revision 0)
+++ trunk/web/WEB-INF/wsit-org.lidar.api.Video.xml	(revision 9)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+ <definitions 
+ xmlns="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="VideoService" targetNamespace="http://api.lidar.org/" xmlns:tns="http://api.lidar.org/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsrm="http://docs.oasis-open.org/ws-rx/wsrmp/200702" xmlns:wsoma="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization"
+ >
+    <message name="getImage"/>
+    <message name="getImageResponse"/>
+    <portType name="Video">
+        <operation name="getImage">
+            <input message="tns:getImage"/>
+            <output message="tns:getImageResponse"/>
+        </operation>
+    </portType>
+    <binding name="VideoPortBinding" type="tns:Video">
+        <wsp:PolicyReference URI="#VideoPortBindingPolicy"/>
+        <operation name="getImage">
+            <input/>
+            <output/>
+        </operation>
+    </binding>
+    <service name="VideoService">
+        <port name="VideoPort" binding="tns:VideoPortBinding"/>
+    </service>
+    <wsp:Policy wsu:Id="VideoPortBindingPolicy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <wsam:Addressing wsp:Optional="false"/>
+                <wsrm:RMAssertion/>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+</definitions>
Index: trunk/web/WEB-INF/wsit-org.lidar.api.Sensor.xml
===================================================================
--- trunk/web/WEB-INF/wsit-org.lidar.api.Sensor.xml	(revision 0)
+++ trunk/web/WEB-INF/wsit-org.lidar.api.Sensor.xml	(revision 9)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+ <definitions 
+ xmlns="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="SensorService" targetNamespace="http://api.lidar.org/" xmlns:tns="http://api.lidar.org/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsrm="http://docs.oasis-open.org/ws-rx/wsrmp/200702"
+ >
+    <message name="readQuery"/>
+    <message name="readQueryResponse"/>
+    <message name="runAcqusition"/>
+    <message name="runAcqusitionResponse"/>
+    <message name="stopAcqusition"/>
+    <message name="stopAcqusitionResponse"/>
+    <message name="forceTrigger"/>
+    <message name="forceTriggerResponse"/>
+    <message name="setDataType"/>
+    <message name="setDataTypeResponse"/>
+    <message name="getStatus"/>
+    <message name="getStatusResponse"/>
+    <message name="sendGain"/>
+    <message name="sendGainResponse"/>
+    <portType name="Sensor">
+        <operation name="readQuery">
+            <input message="tns:readQuery"/>
+            <output message="tns:readQueryResponse"/>
+        </operation>
+        <operation name="runAcqusition">
+            <input message="tns:runAcqusition"/>
+            <output message="tns:runAcqusitionResponse"/>
+        </operation>
+        <operation name="stopAcqusition">
+            <input message="tns:stopAcqusition"/>
+            <output message="tns:stopAcqusitionResponse"/>
+        </operation>
+        <operation name="forceTrigger">
+            <input message="tns:forceTrigger"/>
+            <output message="tns:forceTriggerResponse"/>
+        </operation>
+        <operation name="setDataType">
+            <input message="tns:setDataType"/>
+            <output message="tns:setDataTypeResponse"/>
+        </operation>
+        <operation name="getStatus">
+            <input message="tns:getStatus"/>
+            <output message="tns:getStatusResponse"/>
+        </operation>
+        <operation name="sendGain">
+            <input message="tns:sendGain"/>
+            <output message="tns:sendGainResponse"/>
+        </operation>
+    </portType>
+    <binding name="SensorPortBinding" type="tns:Sensor">
+        <wsp:PolicyReference URI="#SensorPortBindingPolicy"/>
+        <operation name="readQuery">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="runAcqusition">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="stopAcqusition">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="forceTrigger">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="setDataType">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="getStatus">
+            <input/>
+            <output/>
+        </operation>
+        <operation name="sendGain">
+            <input/>
+            <output/>
+        </operation>
+    </binding>
+    <service name="SensorService">
+        <port name="SensorPort" binding="tns:SensorPortBinding"/>
+    </service>
+    <wsp:Policy wsu:Id="SensorPortBindingPolicy">
+        <wsp:ExactlyOne>
+            <wsp:All>
+                <wsam:Addressing wsp:Optional="false"/>
+                <wsrm:RMAssertion/>
+            </wsp:All>
+        </wsp:ExactlyOne>
+    </wsp:Policy>
+</definitions>
Index: trunk/web/css/style.css
===================================================================
--- trunk/web/css/style.css	(revision 0)
+++ trunk/web/css/style.css	(revision 9)
@@ -0,0 +1,83 @@
+html, body { 
+    background: #0A80A7;
+}
+
+div {
+    outline: none;
+}
+
+strong {
+    font-weight: bold;
+}
+
+h1, h2, h3 {
+    font-weight: bold;
+    color: #0A80A7;
+}
+
+h1 {
+    font-size: 24px;
+    text-align: center;
+}
+
+h2 {
+    font-size: 18px;
+}
+
+h3 {
+    font-size: 16px;
+}
+
+hr {
+    border: 0;
+    height: 1px;
+    color: #80C342;
+    background: #80C342;
+    margin: 8px 0;
+}
+
+a {
+    color: #4183C4;
+    text-decoration: none;
+}
+
+a:hover {
+    color: #80C342;
+}
+
+.x-panel-body p {
+    text-align: justify;
+}
+
+.x-panel-body ul {
+    list-style-type: disc;
+    list-style-position: outside;
+    margin-left: 28px;
+    margin-top: 6px;
+}
+
+.x-panel-body ul li {
+    list-style-type: disc;
+    text-align: justify;
+}
+
+#wrap {
+    background: #fff;
+    border: 6px solid #80C342;
+    border-radius: 6px;
+    -moz-border-radius: 6px;
+    margin: 20px auto;
+    padding: 20px;
+    width: 640px;
+    text-align: left;
+}
+
+#footer {
+    color: #FAD42E;
+    font-size: 12px;
+    margin-bottom: 20px;
+}
+
+.m5 {
+    margin: 10px;
+}
Index: trunk/web/css/login.css
===================================================================
--- trunk/web/css/login.css	(revision 0)
+++ trunk/web/css/login.css	(revision 9)
@@ -0,0 +1,88 @@
+html, body {
+    background: #0A80A7;
+    color: #666;
+}
+
+strong {
+    font-weight: bold;
+}
+
+h1 {
+    color: #0A80A7;
+    font-weight: bold;
+    font-size: 18px;
+    text-align: center;
+    margin: 0 0 10px 0;
+}
+
+.wrap {
+    background: #fff;
+    border: 6px solid #80C342;
+    border-radius: 6px;
+    -moz-border-radius: 6px;
+    margin: 20px auto;
+    width: 300px;
+    text-align: left;
+}
+
+.form {
+    margin: 20px;
+    padding: 0;
+}
+
+.error {
+    color: #d00;
+    margin-top: 10px;
+}
+
+label {
+    display: block;
+}
+
+#username, #password {
+    display: block;
+    border: 1px solid #ccc;
+    background: #efefef;
+    padding: 4px 0;
+    width: 100%;
+    margin: 2px 0 6px 0;
+}
+
+#submit {
+    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fefefe), to(#dddddd));
+    background: -moz-linear-gradient(0% 100% 90deg,#dddddd, #fefefe);
+    border: 1px solid #ccc;
+    border-radius: 4px;
+    -moz-border-radius: 4px;
+    cursor: pointer;
+    font-size: 14px;
+    float: right;
+    padding: 6px 8px;
+}
+
+#submit:hover {
+    color: #4183C4;
+}
+
+/** AUTO CLEARFIX **/
+.form:after,
+.inner-split:after,
+.inner-split .main-content:after,
+.client-details-list li:after,
+.grid .icon:after,
+.invoice-addresses:after,
+.address:after,
+.terms:after,
+.invoice-summary:after,
+form div:after,
+form:after,
+.clearfix:after {
+    clear: both;
+    content: ' ';
+    display: block;
+    font-size: 0;
+    line-height: 0;
+    visibility: hidden;
+    width: 0;
+    height: 0;
+}
Index: trunk/web/dojo/dojo/number.js
===================================================================
--- trunk/web/dojo/dojo/number.js	(revision 0)
+++ trunk/web/dojo/dojo/number.js	(revision 9)
@@ -0,0 +1,311 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.number"]){
+dojo._hasResource["dojo.number"]=true;
+dojo.provide("dojo.number");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","number",null,"ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh");
+dojo.require("dojo.string");
+dojo.require("dojo.regexp");
+dojo.number.format=function(_1,_2){
+_2=dojo.mixin({},_2||{});
+var _3=dojo.i18n.normalizeLocale(_2.locale),_4=dojo.i18n.getLocalization("dojo.cldr","number",_3);
+_2.customs=_4;
+var _5=_2.pattern||_4[(_2.type||"decimal")+"Format"];
+if(isNaN(_1)||Math.abs(_1)==Infinity){
+return null;
+}
+return dojo.number._applyPattern(_1,_5,_2);
+};
+dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;
+dojo.number._applyPattern=function(_6,_7,_8){
+_8=_8||{};
+var _9=_8.customs.group,_a=_8.customs.decimal,_b=_7.split(";"),_c=_b[0];
+_7=_b[(_6<0)?1:0]||("-"+_c);
+if(_7.indexOf("%")!=-1){
+_6*=100;
+}else{
+if(_7.indexOf("‰")!=-1){
+_6*=1000;
+}else{
+if(_7.indexOf("¤")!=-1){
+_9=_8.customs.currencyGroup||_9;
+_a=_8.customs.currencyDecimal||_a;
+_7=_7.replace(/\u00a4{1,3}/,function(_d){
+var _e=["symbol","currency","displayName"][_d.length-1];
+return _8[_e]||_8.currency||"";
+});
+}else{
+if(_7.indexOf("E")!=-1){
+throw new Error("exponential notation not supported");
+}
+}
+}
+}
+var _f=dojo.number._numberPatternRE;
+var _10=_c.match(_f);
+if(!_10){
+throw new Error("unable to find a number expression in pattern: "+_7);
+}
+if(_8.fractional===false){
+_8.places=0;
+}
+return _7.replace(_f,dojo.number._formatAbsolute(_6,_10[0],{decimal:_a,group:_9,places:_8.places,round:_8.round}));
+};
+dojo.number.round=function(_11,_12,_13){
+var _14=10/(_13||10);
+return (_14*+_11).toFixed(_12)/_14;
+};
+if((0.9).toFixed()==0){
+(function(){
+var _15=dojo.number.round;
+dojo.number.round=function(v,p,m){
+var d=Math.pow(10,-p||0),a=Math.abs(v);
+if(!v||a>=d||a*Math.pow(10,p+1)<5){
+d=0;
+}
+return _15(v,p,m)+(v>0?d:-d);
+};
+})();
+}
+dojo.number._formatAbsolute=function(_16,_17,_18){
+_18=_18||{};
+if(_18.places===true){
+_18.places=0;
+}
+if(_18.places===Infinity){
+_18.places=6;
+}
+var _19=_17.split("."),_1a=typeof _18.places=="string"&&_18.places.indexOf(","),_1b=_18.places;
+if(_1a){
+_1b=_18.places.substring(_1a+1);
+}else{
+if(!(_1b>=0)){
+_1b=(_19[1]||[]).length;
+}
+}
+if(!(_18.round<0)){
+_16=dojo.number.round(_16,_1b,_18.round);
+}
+var _1c=String(Math.abs(_16)).split("."),_1d=_1c[1]||"";
+if(_19[1]||_18.places){
+if(_1a){
+_18.places=_18.places.substring(0,_1a);
+}
+var pad=_18.places!==undefined?_18.places:(_19[1]&&_19[1].lastIndexOf("0")+1);
+if(pad>_1d.length){
+_1c[1]=dojo.string.pad(_1d,pad,"0",true);
+}
+if(_1b<_1d.length){
+_1c[1]=_1d.substr(0,_1b);
+}
+}else{
+if(_1c[1]){
+_1c.pop();
+}
+}
+var _1e=_19[0].replace(",","");
+pad=_1e.indexOf("0");
+if(pad!=-1){
+pad=_1e.length-pad;
+if(pad>_1c[0].length){
+_1c[0]=dojo.string.pad(_1c[0],pad);
+}
+if(_1e.indexOf("#")==-1){
+_1c[0]=_1c[0].substr(_1c[0].length-pad);
+}
+}
+var _1f=_19[0].lastIndexOf(","),_20,_21;
+if(_1f!=-1){
+_20=_19[0].length-_1f-1;
+var _22=_19[0].substr(0,_1f);
+_1f=_22.lastIndexOf(",");
+if(_1f!=-1){
+_21=_22.length-_1f-1;
+}
+}
+var _23=[];
+for(var _24=_1c[0];_24;){
+var off=_24.length-_20;
+_23.push((off>0)?_24.substr(off):_24);
+_24=(off>0)?_24.slice(0,off):"";
+if(_21){
+_20=_21;
+delete _21;
+}
+}
+_1c[0]=_23.reverse().join(_18.group||",");
+return _1c.join(_18.decimal||".");
+};
+dojo.number.regexp=function(_25){
+return dojo.number._parseInfo(_25).regexp;
+};
+dojo.number._parseInfo=function(_26){
+_26=_26||{};
+var _27=dojo.i18n.normalizeLocale(_26.locale),_28=dojo.i18n.getLocalization("dojo.cldr","number",_27),_29=_26.pattern||_28[(_26.type||"decimal")+"Format"],_2a=_28.group,_2b=_28.decimal,_2c=1;
+if(_29.indexOf("%")!=-1){
+_2c/=100;
+}else{
+if(_29.indexOf("‰")!=-1){
+_2c/=1000;
+}else{
+var _2d=_29.indexOf("¤")!=-1;
+if(_2d){
+_2a=_28.currencyGroup||_2a;
+_2b=_28.currencyDecimal||_2b;
+}
+}
+}
+var _2e=_29.split(";");
+if(_2e.length==1){
+_2e.push("-"+_2e[0]);
+}
+var re=dojo.regexp.buildGroupRE(_2e,function(_2f){
+_2f="(?:"+dojo.regexp.escapeString(_2f,".")+")";
+return _2f.replace(dojo.number._numberPatternRE,function(_30){
+var _31={signed:false,separator:_26.strict?_2a:[_2a,""],fractional:_26.fractional,decimal:_2b,exponent:false},_32=_30.split("."),_33=_26.places;
+if(_32.length==1&&_2c!=1){
+_32[1]="###";
+}
+if(_32.length==1||_33===0){
+_31.fractional=false;
+}else{
+if(_33===undefined){
+_33=_26.pattern?_32[1].lastIndexOf("0")+1:Infinity;
+}
+if(_33&&_26.fractional==undefined){
+_31.fractional=true;
+}
+if(!_26.places&&(_33<_32[1].length)){
+_33+=","+_32[1].length;
+}
+_31.places=_33;
+}
+var _34=_32[0].split(",");
+if(_34.length>1){
+_31.groupSize=_34.pop().length;
+if(_34.length>1){
+_31.groupSize2=_34.pop().length;
+}
+}
+return "("+dojo.number._realNumberRegexp(_31)+")";
+});
+},true);
+if(_2d){
+re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_35,_36,_37,_38){
+var _39=["symbol","currency","displayName"][_37.length-1],_3a=dojo.regexp.escapeString(_26[_39]||_26.currency||"");
+_36=_36?"[\\s\\xa0]":"";
+_38=_38?"[\\s\\xa0]":"";
+if(!_26.strict){
+if(_36){
+_36+="*";
+}
+if(_38){
+_38+="*";
+}
+return "(?:"+_36+_3a+_38+")?";
+}
+return _36+_3a+_38;
+});
+}
+return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_2a,decimal:_2b,factor:_2c};
+};
+dojo.number.parse=function(_3b,_3c){
+var _3d=dojo.number._parseInfo(_3c),_3e=(new RegExp("^"+_3d.regexp+"$")).exec(_3b);
+if(!_3e){
+return NaN;
+}
+var _3f=_3e[1];
+if(!_3e[1]){
+if(!_3e[2]){
+return NaN;
+}
+_3f=_3e[2];
+_3d.factor*=-1;
+}
+_3f=_3f.replace(new RegExp("["+_3d.group+"\\s\\xa0"+"]","g"),"").replace(_3d.decimal,".");
+return _3f*_3d.factor;
+};
+dojo.number._realNumberRegexp=function(_40){
+_40=_40||{};
+if(!("places" in _40)){
+_40.places=Infinity;
+}
+if(typeof _40.decimal!="string"){
+_40.decimal=".";
+}
+if(!("fractional" in _40)||/^0/.test(_40.places)){
+_40.fractional=[true,false];
+}
+if(!("exponent" in _40)){
+_40.exponent=[true,false];
+}
+if(!("eSigned" in _40)){
+_40.eSigned=[true,false];
+}
+var _41=dojo.number._integerRegexp(_40),_42=dojo.regexp.buildGroupRE(_40.fractional,function(q){
+var re="";
+if(q&&(_40.places!==0)){
+re="\\"+_40.decimal;
+if(_40.places==Infinity){
+re="(?:"+re+"\\d+)?";
+}else{
+re+="\\d{"+_40.places+"}";
+}
+}
+return re;
+},true);
+var _43=dojo.regexp.buildGroupRE(_40.exponent,function(q){
+if(q){
+return "([eE]"+dojo.number._integerRegexp({signed:_40.eSigned})+")";
+}
+return "";
+});
+var _44=_41+_42;
+if(_42){
+_44="(?:(?:"+_44+")|(?:"+_42+"))";
+}
+return _44+_43;
+};
+dojo.number._integerRegexp=function(_45){
+_45=_45||{};
+if(!("signed" in _45)){
+_45.signed=[true,false];
+}
+if(!("separator" in _45)){
+_45.separator="";
+}else{
+if(!("groupSize" in _45)){
+_45.groupSize=3;
+}
+}
+var _46=dojo.regexp.buildGroupRE(_45.signed,function(q){
+return q?"[-+]":"";
+},true);
+var _47=dojo.regexp.buildGroupRE(_45.separator,function(sep){
+if(!sep){
+return "(?:\\d+)";
+}
+sep=dojo.regexp.escapeString(sep);
+if(sep==" "){
+sep="\\s";
+}else{
+if(sep==" "){
+sep="\\s\\xa0";
+}
+}
+var grp=_45.groupSize,_48=_45.groupSize2;
+if(_48){
+var _49="(?:0|[1-9]\\d{0,"+(_48-1)+"}(?:["+sep+"]\\d{"+_48+"})*["+sep+"]\\d{"+grp+"})";
+return ((grp-_48)>0)?"(?:"+_49+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_49;
+}
+return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";
+},true);
+return _46+_47;
+};
+}
Index: trunk/web/dojo/dojo/currency.js
===================================================================
--- trunk/web/dojo/dojo/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/currency.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.currency"]){
+dojo._hasResource["dojo.currency"]=true;
+dojo.provide("dojo.currency");
+dojo.require("dojo.number");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","currency",null,"ROOT,ar,ca,cs,da,de,el,en,en-au,en-ca,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.require("dojo.cldr.monetary");
+dojo.currency._mixInDefaults=function(_1){
+_1=_1||{};
+_1.type="currency";
+var _2=dojo.i18n.getLocalization("dojo.cldr","currency",_1.locale)||{};
+var _3=_1.currency;
+var _4=dojo.cldr.monetary.getData(_3);
+dojo.forEach(["displayName","symbol","group","decimal"],function(_5){
+_4[_5]=_2[_3+"_"+_5];
+});
+_4.fractional=[true,false];
+return dojo.mixin(_4,_1);
+};
+dojo.currency.format=function(_6,_7){
+return dojo.number.format(_6,dojo.currency._mixInDefaults(_7));
+};
+dojo.currency.regexp=function(_8){
+return dojo.number.regexp(dojo.currency._mixInDefaults(_8));
+};
+dojo.currency.parse=function(_9,_a){
+return dojo.number.parse(_9,dojo.currency._mixInDefaults(_a));
+};
+}
Index: trunk/web/dojo/dojo/dnd/TimedMoveable.js
===================================================================
--- trunk/web/dojo/dojo/dnd/TimedMoveable.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/TimedMoveable.js	(revision 9)
@@ -0,0 +1,40 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){
+dojo._hasResource["dojo.dnd.TimedMoveable"]=true;
+dojo.provide("dojo.dnd.TimedMoveable");
+dojo.require("dojo.dnd.Moveable");
+(function(){
+var _1=dojo.dnd.Moveable.prototype.onMove;
+dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(_2,_3){
+if(!_3){
+_3={};
+}
+if(_3.timeout&&typeof _3.timeout=="number"&&_3.timeout>=0){
+this.timeout=_3.timeout;
+}
+},markupFactory:function(_4,_5){
+return new dojo.dnd.TimedMoveable(_5,_4);
+},onMoveStop:function(_6){
+if(_6._timer){
+clearTimeout(_6._timer);
+_1.call(this,_6,_6._leftTop);
+}
+dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);
+},onMove:function(_7,_8){
+_7._leftTop=_8;
+if(!_7._timer){
+var _9=this;
+_7._timer=setTimeout(function(){
+_7._timer=null;
+_1.call(_9,_7,_7._leftTop);
+},this.timeout);
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojo/dnd/Avatar.js
===================================================================
--- trunk/web/dojo/dojo/dnd/Avatar.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/Avatar.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.Avatar"]){
+dojo._hasResource["dojo.dnd.Avatar"]=true;
+dojo.provide("dojo.dnd.Avatar");
+dojo.require("dojo.dnd.common");
+dojo.declare("dojo.dnd.Avatar",null,{constructor:function(_1){
+this.manager=_1;
+this.construct();
+},construct:function(){
+this.isA11y=dojo.hasClass(dojo.body(),"dijit_a11y");
+var a=dojo.create("table",{"class":"dojoDndAvatar",style:{position:"absolute",zIndex:"1999",margin:"0px"}}),_2=this.manager.source,_3,b=dojo.create("tbody",null,a),tr=dojo.create("tr",null,b),td=dojo.create("td",null,tr),_4=this.isA11y?dojo.create("span",{id:"a11yIcon",innerHTML:this.manager.copy?"+":"<"},td):null,_5=dojo.create("span",{innerHTML:_2.generateText?this._generateText():""},td),k=Math.min(5,this.manager.nodes.length),i=0;
+dojo.attr(tr,{"class":"dojoDndAvatarHeader",style:{opacity:0.9}});
+for(;i<k;++i){
+if(_2.creator){
+_3=_2._normalizedCreator(_2.getItem(this.manager.nodes[i].id).data,"avatar").node;
+}else{
+_3=this.manager.nodes[i].cloneNode(true);
+if(_3.tagName.toLowerCase()=="tr"){
+var _6=dojo.create("table"),_7=dojo.create("tbody",null,_6);
+_7.appendChild(_3);
+_3=_6;
+}
+}
+_3.id="";
+tr=dojo.create("tr",null,b);
+td=dojo.create("td",null,tr);
+td.appendChild(_3);
+dojo.attr(tr,{"class":"dojoDndAvatarItem",style:{opacity:(9-i)/10}});
+}
+this.node=a;
+},destroy:function(){
+dojo.destroy(this.node);
+this.node=false;
+},update:function(){
+dojo[(this.manager.canDropFlag?"add":"remove")+"Class"](this.node,"dojoDndAvatarCanDrop");
+if(this.isA11y){
+var _8=dojo.byId("a11yIcon");
+var _9="+";
+if(this.manager.canDropFlag&&!this.manager.copy){
+_9="< ";
+}else{
+if(!this.manager.canDropFlag&&!this.manager.copy){
+_9="o";
+}else{
+if(!this.manager.canDropFlag){
+_9="x";
+}
+}
+}
+_8.innerHTML=_9;
+}
+dojo.query(("tr.dojoDndAvatarHeader td span"+(this.isA11y?" span":"")),this.node).forEach(function(_a){
+_a.innerHTML=this._generateText();
+},this);
+},_generateText:function(){
+return this.manager.nodes.length.toString();
+}});
+}
Index: trunk/web/dojo/dojo/dnd/Selector.js
===================================================================
--- trunk/web/dojo/dojo/dnd/Selector.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/Selector.js	(revision 9)
@@ -0,0 +1,239 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.Selector"]){
+dojo._hasResource["dojo.dnd.Selector"]=true;
+dojo.provide("dojo.dnd.Selector");
+dojo.require("dojo.dnd.common");
+dojo.require("dojo.dnd.Container");
+dojo.declare("dojo.dnd.Selector",dojo.dnd.Container,{constructor:function(_1,_2){
+if(!_2){
+_2={};
+}
+this.singular=_2.singular;
+this.autoSync=_2.autoSync;
+this.selection={};
+this.anchor=null;
+this.simpleSelection=false;
+this.events.push(dojo.connect(this.node,"onmousedown",this,"onMouseDown"),dojo.connect(this.node,"onmouseup",this,"onMouseUp"));
+},singular:false,getSelectedNodes:function(){
+var t=new dojo.NodeList();
+var e=dojo.dnd._empty;
+for(var i in this.selection){
+if(i in e){
+continue;
+}
+t.push(dojo.byId(i));
+}
+return t;
+},selectNone:function(){
+return this._removeSelection()._removeAnchor();
+},selectAll:function(){
+this.forInItems(function(_3,id){
+this._addItemClass(dojo.byId(id),"Selected");
+this.selection[id]=1;
+},this);
+return this._removeAnchor();
+},deleteSelectedNodes:function(){
+var e=dojo.dnd._empty;
+for(var i in this.selection){
+if(i in e){
+continue;
+}
+var n=dojo.byId(i);
+this.delItem(i);
+dojo.destroy(n);
+}
+this.anchor=null;
+this.selection={};
+return this;
+},forInSelectedItems:function(f,o){
+o=o||dojo.global;
+var s=this.selection,e=dojo.dnd._empty;
+for(var i in s){
+if(i in e){
+continue;
+}
+f.call(o,this.getItem(i),i,this);
+}
+},sync:function(){
+dojo.dnd.Selector.superclass.sync.call(this);
+if(this.anchor){
+if(!this.getItem(this.anchor.id)){
+this.anchor=null;
+}
+}
+var t=[],e=dojo.dnd._empty;
+for(var i in this.selection){
+if(i in e){
+continue;
+}
+if(!this.getItem(i)){
+t.push(i);
+}
+}
+dojo.forEach(t,function(i){
+delete this.selection[i];
+},this);
+return this;
+},insertNodes:function(_4,_5,_6,_7){
+var _8=this._normalizedCreator;
+this._normalizedCreator=function(_9,_a){
+var t=_8.call(this,_9,_a);
+if(_4){
+if(!this.anchor){
+this.anchor=t.node;
+this._removeItemClass(t.node,"Selected");
+this._addItemClass(this.anchor,"Anchor");
+}else{
+if(this.anchor!=t.node){
+this._removeItemClass(t.node,"Anchor");
+this._addItemClass(t.node,"Selected");
+}
+}
+this.selection[t.node.id]=1;
+}else{
+this._removeItemClass(t.node,"Selected");
+this._removeItemClass(t.node,"Anchor");
+}
+return t;
+};
+dojo.dnd.Selector.superclass.insertNodes.call(this,_5,_6,_7);
+this._normalizedCreator=_8;
+return this;
+},destroy:function(){
+dojo.dnd.Selector.superclass.destroy.call(this);
+this.selection=this.anchor=null;
+},markupFactory:function(_b,_c){
+_b._skipStartup=true;
+return new dojo.dnd.Selector(_c,_b);
+},onMouseDown:function(e){
+if(this.autoSync){
+this.sync();
+}
+if(!this.current){
+return;
+}
+if(!this.singular&&!dojo.isCopyKey(e)&&!e.shiftKey&&(this.current.id in this.selection)){
+this.simpleSelection=true;
+if(e.button===dojo.mouseButtons.LEFT){
+dojo.stopEvent(e);
+}
+return;
+}
+if(!this.singular&&e.shiftKey){
+if(!dojo.isCopyKey(e)){
+this._removeSelection();
+}
+var c=this.getAllNodes();
+if(c.length){
+if(!this.anchor){
+this.anchor=c[0];
+this._addItemClass(this.anchor,"Anchor");
+}
+this.selection[this.anchor.id]=1;
+if(this.anchor!=this.current){
+var i=0;
+for(;i<c.length;++i){
+var _d=c[i];
+if(_d==this.anchor||_d==this.current){
+break;
+}
+}
+for(++i;i<c.length;++i){
+var _d=c[i];
+if(_d==this.anchor||_d==this.current){
+break;
+}
+this._addItemClass(_d,"Selected");
+this.selection[_d.id]=1;
+}
+this._addItemClass(this.current,"Selected");
+this.selection[this.current.id]=1;
+}
+}
+}else{
+if(this.singular){
+if(this.anchor==this.current){
+if(dojo.isCopyKey(e)){
+this.selectNone();
+}
+}else{
+this.selectNone();
+this.anchor=this.current;
+this._addItemClass(this.anchor,"Anchor");
+this.selection[this.current.id]=1;
+}
+}else{
+if(dojo.isCopyKey(e)){
+if(this.anchor==this.current){
+delete this.selection[this.anchor.id];
+this._removeAnchor();
+}else{
+if(this.current.id in this.selection){
+this._removeItemClass(this.current,"Selected");
+delete this.selection[this.current.id];
+}else{
+if(this.anchor){
+this._removeItemClass(this.anchor,"Anchor");
+this._addItemClass(this.anchor,"Selected");
+}
+this.anchor=this.current;
+this._addItemClass(this.current,"Anchor");
+this.selection[this.current.id]=1;
+}
+}
+}else{
+if(!(this.current.id in this.selection)){
+this.selectNone();
+this.anchor=this.current;
+this._addItemClass(this.current,"Anchor");
+this.selection[this.current.id]=1;
+}
+}
+}
+}
+dojo.stopEvent(e);
+},onMouseUp:function(e){
+if(!this.simpleSelection){
+return;
+}
+this.simpleSelection=false;
+this.selectNone();
+if(this.current){
+this.anchor=this.current;
+this._addItemClass(this.anchor,"Anchor");
+this.selection[this.current.id]=1;
+}
+},onMouseMove:function(e){
+this.simpleSelection=false;
+},onOverEvent:function(){
+this.onmousemoveEvent=dojo.connect(this.node,"onmousemove",this,"onMouseMove");
+},onOutEvent:function(){
+dojo.disconnect(this.onmousemoveEvent);
+delete this.onmousemoveEvent;
+},_removeSelection:function(){
+var e=dojo.dnd._empty;
+for(var i in this.selection){
+if(i in e){
+continue;
+}
+var _e=dojo.byId(i);
+if(_e){
+this._removeItemClass(_e,"Selected");
+}
+}
+this.selection={};
+return this;
+},_removeAnchor:function(){
+if(this.anchor){
+this._removeItemClass(this.anchor,"Anchor");
+this.anchor=null;
+}
+return this;
+}});
+}
Index: trunk/web/dojo/dojo/dnd/Source.js
===================================================================
--- trunk/web/dojo/dojo/dnd/Source.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/Source.js	(revision 9)
@@ -0,0 +1,298 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.Source"]){
+dojo._hasResource["dojo.dnd.Source"]=true;
+dojo.provide("dojo.dnd.Source");
+dojo.require("dojo.dnd.Selector");
+dojo.require("dojo.dnd.Manager");
+dojo.declare("dojo.dnd.Source",dojo.dnd.Selector,{isSource:true,horizontal:false,copyOnly:false,selfCopy:false,selfAccept:true,skipForm:false,withHandles:false,autoSync:false,delay:0,accept:["text"],generateText:true,constructor:function(_1,_2){
+dojo.mixin(this,dojo.mixin({},_2));
+var _3=this.accept;
+if(_3.length){
+this.accept={};
+for(var i=0;i<_3.length;++i){
+this.accept[_3[i]]=1;
+}
+}
+this.isDragging=false;
+this.mouseDown=false;
+this.targetAnchor=null;
+this.targetBox=null;
+this.before=true;
+this._lastX=0;
+this._lastY=0;
+this.sourceState="";
+if(this.isSource){
+dojo.addClass(this.node,"dojoDndSource");
+}
+this.targetState="";
+if(this.accept){
+dojo.addClass(this.node,"dojoDndTarget");
+}
+if(this.horizontal){
+dojo.addClass(this.node,"dojoDndHorizontal");
+}
+this.topics=[dojo.subscribe("/dnd/source/over",this,"onDndSourceOver"),dojo.subscribe("/dnd/start",this,"onDndStart"),dojo.subscribe("/dnd/drop",this,"onDndDrop"),dojo.subscribe("/dnd/cancel",this,"onDndCancel")];
+},checkAcceptance:function(_4,_5){
+if(this==_4){
+return !this.copyOnly||this.selfAccept;
+}
+for(var i=0;i<_5.length;++i){
+var _6=_4.getItem(_5[i].id).type;
+var _7=false;
+for(var j=0;j<_6.length;++j){
+if(_6[j] in this.accept){
+_7=true;
+break;
+}
+}
+if(!_7){
+return false;
+}
+}
+return true;
+},copyState:function(_8,_9){
+if(_8){
+return true;
+}
+if(arguments.length<2){
+_9=this==dojo.dnd.manager().target;
+}
+if(_9){
+if(this.copyOnly){
+return this.selfCopy;
+}
+}else{
+return this.copyOnly;
+}
+return false;
+},destroy:function(){
+dojo.dnd.Source.superclass.destroy.call(this);
+dojo.forEach(this.topics,dojo.unsubscribe);
+this.targetAnchor=null;
+},markupFactory:function(_a,_b){
+_a._skipStartup=true;
+return new dojo.dnd.Source(_b,_a);
+},onMouseMove:function(e){
+if(this.isDragging&&this.targetState=="Disabled"){
+return;
+}
+dojo.dnd.Source.superclass.onMouseMove.call(this,e);
+var m=dojo.dnd.manager();
+if(!this.isDragging){
+if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay)){
+var _c=this.getSelectedNodes();
+if(_c.length){
+m.startDrag(this,_c,this.copyState(dojo.isCopyKey(e),true));
+}
+}
+}
+if(this.isDragging){
+var _d=false;
+if(this.current){
+if(!this.targetBox||this.targetAnchor!=this.current){
+this.targetBox=dojo.position(this.current,true);
+}
+if(this.horizontal){
+_d=(e.pageX-this.targetBox.x)<(this.targetBox.w/2);
+}else{
+_d=(e.pageY-this.targetBox.y)<(this.targetBox.h/2);
+}
+}
+if(this.current!=this.targetAnchor||_d!=this.before){
+this._markTargetAnchor(_d);
+m.canDrop(!this.current||m.source!=this||!(this.current.id in this.selection));
+}
+}
+},onMouseDown:function(e){
+if(!this.mouseDown&&this._legalMouseDown(e)&&(!this.skipForm||!dojo.dnd.isFormElement(e))){
+this.mouseDown=true;
+this._lastX=e.pageX;
+this._lastY=e.pageY;
+dojo.dnd.Source.superclass.onMouseDown.call(this,e);
+}
+},onMouseUp:function(e){
+if(this.mouseDown){
+this.mouseDown=false;
+dojo.dnd.Source.superclass.onMouseUp.call(this,e);
+}
+},onDndSourceOver:function(_e){
+if(this!=_e){
+this.mouseDown=false;
+if(this.targetAnchor){
+this._unmarkTargetAnchor();
+}
+}else{
+if(this.isDragging){
+var m=dojo.dnd.manager();
+m.canDrop(this.targetState!="Disabled"&&(!this.current||m.source!=this||!(this.current.id in this.selection)));
+}
+}
+},onDndStart:function(_f,_10,_11){
+if(this.autoSync){
+this.sync();
+}
+if(this.isSource){
+this._changeState("Source",this==_f?(_11?"Copied":"Moved"):"");
+}
+var _12=this.accept&&this.checkAcceptance(_f,_10);
+this._changeState("Target",_12?"":"Disabled");
+if(this==_f){
+dojo.dnd.manager().overSource(this);
+}
+this.isDragging=true;
+},onDndDrop:function(_13,_14,_15,_16){
+if(this==_16){
+this.onDrop(_13,_14,_15);
+}
+this.onDndCancel();
+},onDndCancel:function(){
+if(this.targetAnchor){
+this._unmarkTargetAnchor();
+this.targetAnchor=null;
+}
+this.before=true;
+this.isDragging=false;
+this.mouseDown=false;
+this._changeState("Source","");
+this._changeState("Target","");
+},onDrop:function(_17,_18,_19){
+if(this!=_17){
+this.onDropExternal(_17,_18,_19);
+}else{
+this.onDropInternal(_18,_19);
+}
+},onDropExternal:function(_1a,_1b,_1c){
+var _1d=this._normalizedCreator;
+if(this.creator){
+this._normalizedCreator=function(_1e,_1f){
+return _1d.call(this,_1a.getItem(_1e.id).data,_1f);
+};
+}else{
+if(_1c){
+this._normalizedCreator=function(_20,_21){
+var t=_1a.getItem(_20.id);
+var n=_20.cloneNode(true);
+n.id=dojo.dnd.getUniqueId();
+return {node:n,data:t.data,type:t.type};
+};
+}else{
+this._normalizedCreator=function(_22,_23){
+var t=_1a.getItem(_22.id);
+_1a.delItem(_22.id);
+return {node:_22,data:t.data,type:t.type};
+};
+}
+}
+this.selectNone();
+if(!_1c&&!this.creator){
+_1a.selectNone();
+}
+this.insertNodes(true,_1b,this.before,this.current);
+if(!_1c&&this.creator){
+_1a.deleteSelectedNodes();
+}
+this._normalizedCreator=_1d;
+},onDropInternal:function(_24,_25){
+var _26=this._normalizedCreator;
+if(this.current&&this.current.id in this.selection){
+return;
+}
+if(_25){
+if(this.creator){
+this._normalizedCreator=function(_27,_28){
+return _26.call(this,this.getItem(_27.id).data,_28);
+};
+}else{
+this._normalizedCreator=function(_29,_2a){
+var t=this.getItem(_29.id);
+var n=_29.cloneNode(true);
+n.id=dojo.dnd.getUniqueId();
+return {node:n,data:t.data,type:t.type};
+};
+}
+}else{
+if(!this.current){
+return;
+}
+this._normalizedCreator=function(_2b,_2c){
+var t=this.getItem(_2b.id);
+return {node:_2b,data:t.data,type:t.type};
+};
+}
+this._removeSelection();
+this.insertNodes(true,_24,this.before,this.current);
+this._normalizedCreator=_26;
+},onDraggingOver:function(){
+},onDraggingOut:function(){
+},onOverEvent:function(){
+dojo.dnd.Source.superclass.onOverEvent.call(this);
+dojo.dnd.manager().overSource(this);
+if(this.isDragging&&this.targetState!="Disabled"){
+this.onDraggingOver();
+}
+},onOutEvent:function(){
+dojo.dnd.Source.superclass.onOutEvent.call(this);
+dojo.dnd.manager().outSource(this);
+if(this.isDragging&&this.targetState!="Disabled"){
+this.onDraggingOut();
+}
+},_markTargetAnchor:function(_2d){
+if(this.current==this.targetAnchor&&this.before==_2d){
+return;
+}
+if(this.targetAnchor){
+this._removeItemClass(this.targetAnchor,this.before?"Before":"After");
+}
+this.targetAnchor=this.current;
+this.targetBox=null;
+this.before=_2d;
+if(this.targetAnchor){
+this._addItemClass(this.targetAnchor,this.before?"Before":"After");
+}
+},_unmarkTargetAnchor:function(){
+if(!this.targetAnchor){
+return;
+}
+this._removeItemClass(this.targetAnchor,this.before?"Before":"After");
+this.targetAnchor=null;
+this.targetBox=null;
+this.before=true;
+},_markDndStatus:function(_2e){
+this._changeState("Source",_2e?"Copied":"Moved");
+},_legalMouseDown:function(e){
+if(!dojo.mouseButtons.isLeft(e)){
+return false;
+}
+if(!this.withHandles){
+return true;
+}
+for(var _2f=e.target;_2f&&_2f!==this.node;_2f=_2f.parentNode){
+if(dojo.hasClass(_2f,"dojoDndHandle")){
+return true;
+}
+if(dojo.hasClass(_2f,"dojoDndItem")||dojo.hasClass(_2f,"dojoDndIgnore")){
+break;
+}
+}
+return false;
+}});
+dojo.declare("dojo.dnd.Target",dojo.dnd.Source,{constructor:function(_30,_31){
+this.isSource=false;
+dojo.removeClass(this.node,"dojoDndSource");
+},markupFactory:function(_32,_33){
+_32._skipStartup=true;
+return new dojo.dnd.Target(_33,_32);
+}});
+dojo.declare("dojo.dnd.AutoSource",dojo.dnd.Source,{constructor:function(_34,_35){
+this.autoSync=true;
+},markupFactory:function(_36,_37){
+_36._skipStartup=true;
+return new dojo.dnd.AutoSource(_37,_36);
+}});
+}
Index: trunk/web/dojo/dojo/dnd/Container.js
===================================================================
--- trunk/web/dojo/dojo/dnd/Container.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/Container.js	(revision 9)
@@ -0,0 +1,235 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.Container"]){
+dojo._hasResource["dojo.dnd.Container"]=true;
+dojo.provide("dojo.dnd.Container");
+dojo.require("dojo.dnd.common");
+dojo.require("dojo.parser");
+dojo.declare("dojo.dnd.Container",null,{skipForm:false,constructor:function(_1,_2){
+this.node=dojo.byId(_1);
+if(!_2){
+_2={};
+}
+this.creator=_2.creator||null;
+this.skipForm=_2.skipForm;
+this.parent=_2.dropParent&&dojo.byId(_2.dropParent);
+this.map={};
+this.current=null;
+this.containerState="";
+dojo.addClass(this.node,"dojoDndContainer");
+if(!(_2&&_2._skipStartup)){
+this.startup();
+}
+this.events=[dojo.connect(this.node,"onmouseover",this,"onMouseOver"),dojo.connect(this.node,"onmouseout",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",this,"onSelectStart"),dojo.connect(this.node,"onselectstart",this,"onSelectStart")];
+},creator:function(){
+},getItem:function(_3){
+return this.map[_3];
+},setItem:function(_4,_5){
+this.map[_4]=_5;
+},delItem:function(_6){
+delete this.map[_6];
+},forInItems:function(f,o){
+o=o||dojo.global;
+var m=this.map,e=dojo.dnd._empty;
+for(var i in m){
+if(i in e){
+continue;
+}
+f.call(o,m[i],i,this);
+}
+return o;
+},clearItems:function(){
+this.map={};
+},getAllNodes:function(){
+return dojo.query("> .dojoDndItem",this.parent);
+},sync:function(){
+var _7={};
+this.getAllNodes().forEach(function(_8){
+if(_8.id){
+var _9=this.getItem(_8.id);
+if(_9){
+_7[_8.id]=_9;
+return;
+}
+}else{
+_8.id=dojo.dnd.getUniqueId();
+}
+var _a=_8.getAttribute("dndType"),_b=_8.getAttribute("dndData");
+_7[_8.id]={data:_b||_8.innerHTML,type:_a?_a.split(/\s*,\s*/):["text"]};
+},this);
+this.map=_7;
+return this;
+},insertNodes:function(_c,_d,_e){
+if(!this.parent.firstChild){
+_e=null;
+}else{
+if(_d){
+if(!_e){
+_e=this.parent.firstChild;
+}
+}else{
+if(_e){
+_e=_e.nextSibling;
+}
+}
+}
+if(_e){
+for(var i=0;i<_c.length;++i){
+var t=this._normalizedCreator(_c[i]);
+this.setItem(t.node.id,{data:t.data,type:t.type});
+this.parent.insertBefore(t.node,_e);
+}
+}else{
+for(var i=0;i<_c.length;++i){
+var t=this._normalizedCreator(_c[i]);
+this.setItem(t.node.id,{data:t.data,type:t.type});
+this.parent.appendChild(t.node);
+}
+}
+return this;
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+this.clearItems();
+this.node=this.parent=this.current=null;
+},markupFactory:function(_f,_10){
+_f._skipStartup=true;
+return new dojo.dnd.Container(_10,_f);
+},startup:function(){
+if(!this.parent){
+this.parent=this.node;
+if(this.parent.tagName.toLowerCase()=="table"){
+var c=this.parent.getElementsByTagName("tbody");
+if(c&&c.length){
+this.parent=c[0];
+}
+}
+}
+this.defaultCreator=dojo.dnd._defaultCreator(this.parent);
+this.sync();
+},onMouseOver:function(e){
+var n=e.relatedTarget;
+while(n){
+if(n==this.node){
+break;
+}
+try{
+n=n.parentNode;
+}
+catch(x){
+n=null;
+}
+}
+if(!n){
+this._changeState("Container","Over");
+this.onOverEvent();
+}
+n=this._getChildByEvent(e);
+if(this.current==n){
+return;
+}
+if(this.current){
+this._removeItemClass(this.current,"Over");
+}
+if(n){
+this._addItemClass(n,"Over");
+}
+this.current=n;
+},onMouseOut:function(e){
+for(var n=e.relatedTarget;n;){
+if(n==this.node){
+return;
+}
+try{
+n=n.parentNode;
+}
+catch(x){
+n=null;
+}
+}
+if(this.current){
+this._removeItemClass(this.current,"Over");
+this.current=null;
+}
+this._changeState("Container","");
+this.onOutEvent();
+},onSelectStart:function(e){
+if(!this.skipForm||!dojo.dnd.isFormElement(e)){
+dojo.stopEvent(e);
+}
+},onOverEvent:function(){
+},onOutEvent:function(){
+},_changeState:function(_11,_12){
+var _13="dojoDnd"+_11;
+var _14=_11.toLowerCase()+"State";
+dojo.removeClass(this.node,_13+this[_14]);
+dojo.addClass(this.node,_13+_12);
+this[_14]=_12;
+},_addItemClass:function(_15,_16){
+dojo.addClass(_15,"dojoDndItem"+_16);
+},_removeItemClass:function(_17,_18){
+dojo.removeClass(_17,"dojoDndItem"+_18);
+},_getChildByEvent:function(e){
+var _19=e.target;
+if(_19){
+for(var _1a=_19.parentNode;_1a;_19=_1a,_1a=_19.parentNode){
+if(_1a==this.parent&&dojo.hasClass(_19,"dojoDndItem")){
+return _19;
+}
+}
+}
+return null;
+},_normalizedCreator:function(_1b,_1c){
+var t=(this.creator||this.defaultCreator).call(this,_1b,_1c);
+if(!dojo.isArray(t.type)){
+t.type=["text"];
+}
+if(!t.node.id){
+t.node.id=dojo.dnd.getUniqueId();
+}
+dojo.addClass(t.node,"dojoDndItem");
+return t;
+}});
+dojo.dnd._createNode=function(tag){
+if(!tag){
+return dojo.dnd._createSpan;
+}
+return function(_1d){
+return dojo.create(tag,{innerHTML:_1d});
+};
+};
+dojo.dnd._createTrTd=function(_1e){
+var tr=dojo.create("tr");
+dojo.create("td",{innerHTML:_1e},tr);
+return tr;
+};
+dojo.dnd._createSpan=function(_1f){
+return dojo.create("span",{innerHTML:_1f});
+};
+dojo.dnd._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};
+dojo.dnd._defaultCreator=function(_20){
+var tag=_20.tagName.toLowerCase();
+var c=tag=="tbody"||tag=="thead"?dojo.dnd._createTrTd:dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);
+return function(_21,_22){
+var _23=_21&&dojo.isObject(_21),_24,_25,n;
+if(_23&&_21.tagName&&_21.nodeType&&_21.getAttribute){
+_24=_21.getAttribute("dndData")||_21.innerHTML;
+_25=_21.getAttribute("dndType");
+_25=_25?_25.split(/\s*,\s*/):["text"];
+n=_21;
+}else{
+_24=(_23&&_21.data)?_21.data:_21;
+_25=(_23&&_21.type)?_21.type:["text"];
+n=(_22=="avatar"?dojo.dnd._createSpan:c)(String(_24));
+}
+if(!n.id){
+n.id=dojo.dnd.getUniqueId();
+}
+return {node:n,data:_24,type:_25};
+};
+};
+}
Index: trunk/web/dojo/dojo/dnd/move.js
===================================================================
--- trunk/web/dojo/dojo/dnd/move.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/move.js	(revision 9)
@@ -0,0 +1,125 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.move"]){
+dojo._hasResource["dojo.dnd.move"]=true;
+dojo.provide("dojo.dnd.move");
+dojo.require("dojo.dnd.Mover");
+dojo.require("dojo.dnd.Moveable");
+dojo.declare("dojo.dnd.move.constrainedMoveable",dojo.dnd.Moveable,{constraints:function(){
+},within:false,markupFactory:function(_1,_2){
+return new dojo.dnd.move.constrainedMoveable(_2,_1);
+},constructor:function(_3,_4){
+if(!_4){
+_4={};
+}
+this.constraints=_4.constraints;
+this.within=_4.within;
+},onFirstMove:function(_5){
+var c=this.constraintBox=this.constraints.call(this,_5);
+c.r=c.l+c.w;
+c.b=c.t+c.h;
+if(this.within){
+var mb=dojo.marginBox(_5.node);
+c.r-=mb.w;
+c.b-=mb.h;
+}
+},onMove:function(_6,_7){
+var c=this.constraintBox,s=_6.node.style;
+s.left=(_7.l<c.l?c.l:c.r<_7.l?c.r:_7.l)+"px";
+s.top=(_7.t<c.t?c.t:c.b<_7.t?c.b:_7.t)+"px";
+}});
+dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_8,_9){
+return new dojo.dnd.move.boxConstrainedMoveable(_9,_8);
+},constructor:function(_a,_b){
+var _c=_b&&_b.box;
+this.constraints=function(){
+return _c;
+};
+}});
+dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_d,_e){
+return new dojo.dnd.move.parentConstrainedMoveable(_e,_d);
+},constructor:function(_f,_10){
+var _11=_10&&_10.area;
+this.constraints=function(){
+var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);
+if(_11=="margin"){
+return mb;
+}
+var t=dojo._getMarginExtents(n,s);
+mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;
+if(_11=="border"){
+return mb;
+}
+t=dojo._getBorderExtents(n,s);
+mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;
+if(_11=="padding"){
+return mb;
+}
+t=dojo._getPadExtents(n,s);
+mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;
+return mb;
+};
+}});
+dojo.dnd.move.constrainedMover=function(fun,_12){
+dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");
+var _13=function(_14,e,_15){
+dojo.dnd.Mover.call(this,_14,e,_15);
+};
+dojo.extend(_13,dojo.dnd.Mover.prototype);
+dojo.extend(_13,{onMouseMove:function(e){
+dojo.dnd.autoScroll(e);
+var m=this.marginBox,c=this.constraintBox,l=m.l+e.pageX,t=m.t+e.pageY;
+l=l<c.l?c.l:c.r<l?c.r:l;
+t=t<c.t?c.t:c.b<t?c.b:t;
+this.host.onMove(this,{l:l,t:t});
+},onFirstMove:function(){
+dojo.dnd.Mover.prototype.onFirstMove.call(this);
+var c=this.constraintBox=fun.call(this);
+c.r=c.l+c.w;
+c.b=c.t+c.h;
+if(_12){
+var mb=dojo.marginBox(this.node);
+c.r-=mb.w;
+c.b-=mb.h;
+}
+}});
+return _13;
+};
+dojo.dnd.move.boxConstrainedMover=function(box,_16){
+dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");
+return dojo.dnd.move.constrainedMover(function(){
+return box;
+},_16);
+};
+dojo.dnd.move.parentConstrainedMover=function(_17,_18){
+dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");
+var fun=function(){
+var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);
+if(_17=="margin"){
+return mb;
+}
+var t=dojo._getMarginExtents(n,s);
+mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;
+if(_17=="border"){
+return mb;
+}
+t=dojo._getBorderExtents(n,s);
+mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;
+if(_17=="padding"){
+return mb;
+}
+t=dojo._getPadExtents(n,s);
+mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;
+return mb;
+};
+return dojo.dnd.move.constrainedMover(fun,_18);
+};
+dojo.dnd.constrainedMover=dojo.dnd.move.constrainedMover;
+dojo.dnd.boxConstrainedMover=dojo.dnd.move.boxConstrainedMover;
+dojo.dnd.parentConstrainedMover=dojo.dnd.move.parentConstrainedMover;
+}
Index: trunk/web/dojo/dojo/dnd/autoscroll.js
===================================================================
--- trunk/web/dojo/dojo/dnd/autoscroll.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/autoscroll.js	(revision 9)
@@ -0,0 +1,99 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.autoscroll"]){
+dojo._hasResource["dojo.dnd.autoscroll"]=true;
+dojo.provide("dojo.dnd.autoscroll");
+dojo.dnd.getViewport=function(){
+var d=dojo.doc,dd=d.documentElement,w=window,b=dojo.body();
+if(dojo.isMozilla){
+return {w:dd.clientWidth,h:w.innerHeight};
+}else{
+if(!dojo.isOpera&&w.innerWidth){
+return {w:w.innerWidth,h:w.innerHeight};
+}else{
+if(!dojo.isOpera&&dd&&dd.clientWidth){
+return {w:dd.clientWidth,h:dd.clientHeight};
+}else{
+if(b.clientWidth){
+return {w:b.clientWidth,h:b.clientHeight};
+}
+}
+}
+}
+return null;
+};
+dojo.dnd.V_TRIGGER_AUTOSCROLL=32;
+dojo.dnd.H_TRIGGER_AUTOSCROLL=32;
+dojo.dnd.V_AUTOSCROLL_VALUE=16;
+dojo.dnd.H_AUTOSCROLL_VALUE=16;
+dojo.dnd.autoScroll=function(e){
+var v=dojo.dnd.getViewport(),dx=0,dy=0;
+if(e.clientX<dojo.dnd.H_TRIGGER_AUTOSCROLL){
+dx=-dojo.dnd.H_AUTOSCROLL_VALUE;
+}else{
+if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){
+dx=dojo.dnd.H_AUTOSCROLL_VALUE;
+}
+}
+if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){
+dy=-dojo.dnd.V_AUTOSCROLL_VALUE;
+}else{
+if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){
+dy=dojo.dnd.V_AUTOSCROLL_VALUE;
+}
+}
+window.scrollBy(dx,dy);
+};
+dojo.dnd._validNodes={"div":1,"p":1,"td":1};
+dojo.dnd._validOverflow={"auto":1,"scroll":1};
+dojo.dnd.autoScrollNodes=function(e){
+for(var n=e.target;n;){
+if(n.nodeType==1&&(n.tagName.toLowerCase() in dojo.dnd._validNodes)){
+var s=dojo.getComputedStyle(n);
+if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
+var b=dojo._getContentBox(n,s),t=dojo.position(n,true);
+var w=Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL,b.w/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx=e.pageX-t.x,ry=e.pageY-t.y,dx=0,dy=0;
+if(dojo.isWebKit||dojo.isOpera){
+rx+=dojo.body().scrollLeft,ry+=dojo.body().scrollTop;
+}
+if(rx>0&&rx<b.w){
+if(rx<w){
+dx=-w;
+}else{
+if(rx>b.w-w){
+dx=w;
+}
+}
+}
+if(ry>0&&ry<b.h){
+if(ry<h){
+dy=-h;
+}else{
+if(ry>b.h-h){
+dy=h;
+}
+}
+}
+var _1=n.scrollLeft,_2=n.scrollTop;
+n.scrollLeft=n.scrollLeft+dx;
+n.scrollTop=n.scrollTop+dy;
+if(_1!=n.scrollLeft||_2!=n.scrollTop){
+return;
+}
+}
+}
+try{
+n=n.parentNode;
+}
+catch(x){
+n=null;
+}
+}
+dojo.dnd.autoScroll(e);
+};
+}
Index: trunk/web/dojo/dojo/dnd/Mover.js
===================================================================
--- trunk/web/dojo/dojo/dnd/Mover.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/Mover.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.Mover"]){
+dojo._hasResource["dojo.dnd.Mover"]=true;
+dojo.provide("dojo.dnd.Mover");
+dojo.require("dojo.dnd.common");
+dojo.require("dojo.dnd.autoscroll");
+dojo.declare("dojo.dnd.Mover",null,{constructor:function(_1,e,_2){
+this.node=dojo.byId(_1);
+this.marginBox={l:e.pageX,t:e.pageY};
+this.mouseButton=e.button;
+var h=this.host=_2,d=_1.ownerDocument,_3=dojo.connect(d,"onmousemove",this,"onFirstMove");
+this.events=[dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"onMouseUp"),dojo.connect(d,"ondragstart",dojo.stopEvent),dojo.connect(d.body,"onselectstart",dojo.stopEvent),_3];
+if(h&&h.onMoveStart){
+h.onMoveStart(this);
+}
+},onMouseMove:function(e){
+dojo.dnd.autoScroll(e);
+var m=this.marginBox;
+this.host.onMove(this,{l:m.l+e.pageX,t:m.t+e.pageY},e);
+dojo.stopEvent(e);
+},onMouseUp:function(e){
+if(dojo.isWebKit&&dojo.isMac&&this.mouseButton==2?e.button==0:this.mouseButton==e.button){
+this.destroy();
+}
+dojo.stopEvent(e);
+},onFirstMove:function(e){
+var s=this.node.style,l,t,h=this.host;
+switch(s.position){
+case "relative":
+case "absolute":
+l=Math.round(parseFloat(s.left))||0;
+t=Math.round(parseFloat(s.top))||0;
+break;
+default:
+s.position="absolute";
+var m=dojo.marginBox(this.node);
+var b=dojo.doc.body;
+var bs=dojo.getComputedStyle(b);
+var bm=dojo._getMarginBox(b,bs);
+var bc=dojo._getContentBox(b,bs);
+l=m.l-(bc.l-bm.l);
+t=m.t-(bc.t-bm.t);
+break;
+}
+this.marginBox.l=l-this.marginBox.l;
+this.marginBox.t=t-this.marginBox.t;
+if(h&&h.onFirstMove){
+h.onFirstMove(this,e);
+}
+dojo.disconnect(this.events.pop());
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+var h=this.host;
+if(h&&h.onMoveStop){
+h.onMoveStop(this);
+}
+this.events=this.node=this.host=null;
+}});
+}
Index: trunk/web/dojo/dojo/dnd/common.js
===================================================================
--- trunk/web/dojo/dojo/dnd/common.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/common.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.common"]){
+dojo._hasResource["dojo.dnd.common"]=true;
+dojo.provide("dojo.dnd.common");
+dojo.dnd.getCopyKeyState=dojo.isCopyKey;
+dojo.dnd._uniqueId=0;
+dojo.dnd.getUniqueId=function(){
+var id;
+do{
+id=dojo._scopeName+"Unique"+(++dojo.dnd._uniqueId);
+}while(dojo.byId(id));
+return id;
+};
+dojo.dnd._empty={};
+dojo.dnd.isFormElement=function(e){
+var t=e.target;
+if(t.nodeType==3){
+t=t.parentNode;
+}
+return " button textarea input select option ".indexOf(" "+t.tagName.toLowerCase()+" ")>=0;
+};
+}
Index: trunk/web/dojo/dojo/dnd/Manager.js
===================================================================
--- trunk/web/dojo/dojo/dnd/Manager.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/Manager.js	(revision 9)
@@ -0,0 +1,128 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.Manager"]){
+dojo._hasResource["dojo.dnd.Manager"]=true;
+dojo.provide("dojo.dnd.Manager");
+dojo.require("dojo.dnd.common");
+dojo.require("dojo.dnd.autoscroll");
+dojo.require("dojo.dnd.Avatar");
+dojo.declare("dojo.dnd.Manager",null,{constructor:function(){
+this.avatar=null;
+this.source=null;
+this.nodes=[];
+this.copy=true;
+this.target=null;
+this.canDropFlag=false;
+this.events=[];
+},OFFSET_X:16,OFFSET_Y:16,overSource:function(_1){
+if(this.avatar){
+this.target=(_1&&_1.targetState!="Disabled")?_1:null;
+this.canDropFlag=Boolean(this.target);
+this.avatar.update();
+}
+dojo.publish("/dnd/source/over",[_1]);
+},outSource:function(_2){
+if(this.avatar){
+if(this.target==_2){
+this.target=null;
+this.canDropFlag=false;
+this.avatar.update();
+dojo.publish("/dnd/source/over",[null]);
+}
+}else{
+dojo.publish("/dnd/source/over",[null]);
+}
+},startDrag:function(_3,_4,_5){
+this.source=_3;
+this.nodes=_4;
+this.copy=Boolean(_5);
+this.avatar=this.makeAvatar();
+dojo.body().appendChild(this.avatar.node);
+dojo.publish("/dnd/start",[_3,_4,this.copy]);
+this.events=[dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove"),dojo.connect(dojo.doc,"onmouseup",this,"onMouseUp"),dojo.connect(dojo.doc,"onkeydown",this,"onKeyDown"),dojo.connect(dojo.doc,"onkeyup",this,"onKeyUp"),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent)];
+var c="dojoDnd"+(_5?"Copy":"Move");
+dojo.addClass(dojo.body(),c);
+},canDrop:function(_6){
+var _7=Boolean(this.target&&_6);
+if(this.canDropFlag!=_7){
+this.canDropFlag=_7;
+this.avatar.update();
+}
+},stopDrag:function(){
+dojo.removeClass(dojo.body(),"dojoDndCopy");
+dojo.removeClass(dojo.body(),"dojoDndMove");
+dojo.forEach(this.events,dojo.disconnect);
+this.events=[];
+this.avatar.destroy();
+this.avatar=null;
+this.source=this.target=null;
+this.nodes=[];
+},makeAvatar:function(){
+return new dojo.dnd.Avatar(this);
+},updateAvatar:function(){
+this.avatar.update();
+},onMouseMove:function(e){
+var a=this.avatar;
+if(a){
+dojo.dnd.autoScrollNodes(e);
+var s=a.node.style;
+s.left=(e.pageX+this.OFFSET_X)+"px";
+s.top=(e.pageY+this.OFFSET_Y)+"px";
+var _8=Boolean(this.source.copyState(dojo.isCopyKey(e)));
+if(this.copy!=_8){
+this._setCopyStatus(_8);
+}
+}
+},onMouseUp:function(e){
+if(this.avatar){
+if(this.target&&this.canDropFlag){
+var _9=Boolean(this.source.copyState(dojo.isCopyKey(e))),_a=[this.source,this.nodes,_9,this.target,e];
+dojo.publish("/dnd/drop/before",_a);
+dojo.publish("/dnd/drop",_a);
+}else{
+dojo.publish("/dnd/cancel");
+}
+this.stopDrag();
+}
+},onKeyDown:function(e){
+if(this.avatar){
+switch(e.keyCode){
+case dojo.keys.CTRL:
+var _b=Boolean(this.source.copyState(true));
+if(this.copy!=_b){
+this._setCopyStatus(_b);
+}
+break;
+case dojo.keys.ESCAPE:
+dojo.publish("/dnd/cancel");
+this.stopDrag();
+break;
+}
+}
+},onKeyUp:function(e){
+if(this.avatar&&e.keyCode==dojo.keys.CTRL){
+var _c=Boolean(this.source.copyState(false));
+if(this.copy!=_c){
+this._setCopyStatus(_c);
+}
+}
+},_setCopyStatus:function(_d){
+this.copy=_d;
+this.source._markDndStatus(this.copy);
+this.updateAvatar();
+dojo.removeClass(dojo.body(),"dojoDnd"+(this.copy?"Move":"Copy"));
+dojo.addClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move"));
+}});
+dojo.dnd._manager=null;
+dojo.dnd.manager=function(){
+if(!dojo.dnd._manager){
+dojo.dnd._manager=new dojo.dnd.Manager();
+}
+return dojo.dnd._manager;
+};
+}
Index: trunk/web/dojo/dojo/dnd/Moveable.js
===================================================================
--- trunk/web/dojo/dojo/dnd/Moveable.js	(revision 0)
+++ trunk/web/dojo/dojo/dnd/Moveable.js	(revision 9)
@@ -0,0 +1,77 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.dnd.Moveable"]){
+dojo._hasResource["dojo.dnd.Moveable"]=true;
+dojo.provide("dojo.dnd.Moveable");
+dojo.require("dojo.dnd.Mover");
+dojo.declare("dojo.dnd.Moveable",null,{handle:"",delay:0,skip:false,constructor:function(_1,_2){
+this.node=dojo.byId(_1);
+if(!_2){
+_2={};
+}
+this.handle=_2.handle?dojo.byId(_2.handle):null;
+if(!this.handle){
+this.handle=this.node;
+}
+this.delay=_2.delay>0?_2.delay:0;
+this.skip=_2.skip;
+this.mover=_2.mover?_2.mover:dojo.dnd.Mover;
+this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown"),dojo.connect(this.handle,"ondragstart",this,"onSelectStart"),dojo.connect(this.handle,"onselectstart",this,"onSelectStart")];
+},markupFactory:function(_3,_4){
+return new dojo.dnd.Moveable(_4,_3);
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+this.events=this.node=this.handle=null;
+},onMouseDown:function(e){
+if(this.skip&&dojo.dnd.isFormElement(e)){
+return;
+}
+if(this.delay){
+this.events.push(dojo.connect(this.handle,"onmousemove",this,"onMouseMove"),dojo.connect(this.handle,"onmouseup",this,"onMouseUp"));
+this._lastX=e.pageX;
+this._lastY=e.pageY;
+}else{
+this.onDragDetected(e);
+}
+dojo.stopEvent(e);
+},onMouseMove:function(e){
+if(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay){
+this.onMouseUp(e);
+this.onDragDetected(e);
+}
+dojo.stopEvent(e);
+},onMouseUp:function(e){
+for(var i=0;i<2;++i){
+dojo.disconnect(this.events.pop());
+}
+dojo.stopEvent(e);
+},onSelectStart:function(e){
+if(!this.skip||!dojo.dnd.isFormElement(e)){
+dojo.stopEvent(e);
+}
+},onDragDetected:function(e){
+new this.mover(this.node,e,this);
+},onMoveStart:function(_5){
+dojo.publish("/dnd/move/start",[_5]);
+dojo.addClass(dojo.body(),"dojoMove");
+dojo.addClass(this.node,"dojoMoveItem");
+},onMoveStop:function(_6){
+dojo.publish("/dnd/move/stop",[_6]);
+dojo.removeClass(dojo.body(),"dojoMove");
+dojo.removeClass(this.node,"dojoMoveItem");
+},onFirstMove:function(_7,e){
+},onMove:function(_8,_9,e){
+this.onMoving(_8,_9);
+var s=_8.node.style;
+s.left=_9.l+"px";
+s.top=_9.t+"px";
+this.onMoved(_8,_9);
+},onMoving:function(_a,_b){
+},onMoved:function(_c,_d){
+}});
+}
Index: trunk/web/dojo/dojo/dojo.js
===================================================================
--- trunk/web/dojo/dojo/dojo.js	(revision 0)
+++ trunk/web/dojo/dojo/dojo.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+(function(){var _1=null;if((_1||(typeof djConfig!="undefined"&&djConfig.scopeMap))&&(typeof window!="undefined")){var _2="",_3="",_4="",_5={},_6={};_1=_1||djConfig.scopeMap;for(var i=0;i<_1.length;i++){var _7=_1[i];_2+="var "+_7[0]+" = {}; "+_7[1]+" = "+_7[0]+";"+_7[1]+"._scopeName = '"+_7[1]+"';";_3+=(i==0?"":",")+_7[0];_4+=(i==0?"":",")+_7[1];_5[_7[0]]=_7[1];_6[_7[1]]=_7[0];}eval(_2+"dojo._scopeArgs = ["+_4+"];");dojo._scopePrefixArgs=_3;dojo._scopePrefix="(function("+_3+"){";dojo._scopeSuffix="})("+_4+")";dojo._scopeMap=_5;dojo._scopeMapRev=_6;}(function(){if(typeof this["loadFirebugConsole"]=="function"){this["loadFirebugConsole"]();}else{this.console=this.console||{};var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var i=0,tn;while((tn=cn[i++])){if(!console[tn]){(function(){var _8=tn+"";console[_8]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(_8+":");console["log"](a.join(" "));}:function(){};console[_8]._fake=true;})();}}}if(typeof dojo=="undefined"){dojo={_scopeName:"dojo",_scopePrefix:"",_scopePrefixArgs:"",_scopeSuffix:"",_scopeMap:{},_scopeMapRev:{}};}var d=dojo;if(typeof dijit=="undefined"){dijit={_scopeName:"dijit"};}if(typeof dojox=="undefined"){dojox={_scopeName:"dojox"};}if(!d._scopeArgs){d._scopeArgs=[dojo,dijit,dojox];}d.global=this;d.config={isDebug:false,debugAtAllCosts:false};if(typeof djConfig!="undefined"){for(var _9 in djConfig){d.config[_9]=djConfig[_9];}}dojo.locale=d.config.locale;var _a="$Rev: 22487 $".match(/\d+/);dojo.version={major:1,minor:5,patch:0,flag:"",revision:_a?+_a[0]:NaN,toString:function(){with(d.version){return major+"."+minor+"."+patch+flag+" ("+revision+")";}}};if(typeof OpenAjax!="undefined"){OpenAjax.hub.registerLibrary(dojo._scopeName,"http://dojotoolkit.org",d.version.toString());}var _b,_c,_d={};for(var i in {toString:1}){_b=[];break;}dojo._extraNames=_b=_b||["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"];_c=_b.length;dojo._mixin=function(_e,_f){var _10,s,i;for(_10 in _f){s=_f[_10];if(!(_10 in _e)||(_e[_10]!==s&&(!(_10 in _d)||_d[_10]!==s))){_e[_10]=s;}}if(_c&&_f){for(i=0;i<_c;++i){_10=_b[i];s=_f[_10];if(!(_10 in _e)||(_e[_10]!==s&&(!(_10 in _d)||_d[_10]!==s))){_e[_10]=s;}}}return _e;};dojo.mixin=function(obj,_11){if(!obj){obj={};}for(var i=1,l=arguments.length;i<l;i++){d._mixin(obj,arguments[i]);}return obj;};dojo._getProp=function(_12,_13,_14){var obj=_14||d.global;for(var i=0,p;obj&&(p=_12[i]);i++){if(i==0&&d._scopeMap[p]){p=d._scopeMap[p];}obj=(p in obj?obj[p]:(_13?obj[p]={}:undefined));}return obj;};dojo.setObject=function(_15,_16,_17){var _18=_15.split("."),p=_18.pop(),obj=d._getProp(_18,true,_17);return obj&&p?(obj[p]=_16):undefined;};dojo.getObject=function(_19,_1a,_1b){return d._getProp(_19.split("."),_1a,_1b);};dojo.exists=function(_1c,obj){return !!d.getObject(_1c,false,obj);};dojo["eval"]=function(_1d){return d.global.eval?d.global.eval(_1d):eval(_1d);};d.deprecated=d.experimental=function(){};})();(function(){var d=dojo;d.mixin(d,{_loadedModules:{},_inFlightCount:0,_hasResource:{},_modulePrefixes:{dojo:{name:"dojo",value:"."},doh:{name:"doh",value:"../util/doh"},tests:{name:"tests",value:"tests"}},_moduleHasPrefix:function(_1e){var mp=d._modulePrefixes;return !!(mp[_1e]&&mp[_1e].value);},_getModulePrefix:function(_1f){var mp=d._modulePrefixes;if(d._moduleHasPrefix(_1f)){return mp[_1f].value;}return _1f;},_loadedUrls:[],_postLoad:false,_loaders:[],_unloaders:[],_loadNotifying:false});dojo._loadPath=function(_20,_21,cb){var uri=((_20.charAt(0)=="/"||_20.match(/^\w+:/))?"":d.baseUrl)+_20;try{return !_21?d._loadUri(uri,cb):d._loadUriAndCheck(uri,_21,cb);}catch(e){console.error(e);return false;}};dojo._loadUri=function(uri,cb){if(d._loadedUrls[uri]){return true;}d._inFlightCount++;var _22=d._getText(uri,true);if(_22){d._loadedUrls[uri]=true;d._loadedUrls.push(uri);if(cb){_22="("+_22+")";}else{_22=d._scopePrefix+_22+d._scopeSuffix;}if(!d.isIE){_22+="\r\n//@ sourceURL="+uri;}var _23=d["eval"](_22);if(cb){cb(_23);}}if(--d._inFlightCount==0&&d._postLoad&&d._loaders.length){setTimeout(function(){if(d._inFlightCount==0){d._callLoaded();}},0);}return !!_22;};dojo._loadUriAndCheck=function(uri,_24,cb){var ok=false;try{ok=d._loadUri(uri,cb);}catch(e){console.error("failed loading "+uri+" with error: "+e);}return !!(ok&&d._loadedModules[_24]);};dojo.loaded=function(){d._loadNotifying=true;d._postLoad=true;var mll=d._loaders;d._loaders=[];for(var x=0;x<mll.length;x++){mll[x]();}d._loadNotifying=false;if(d._postLoad&&d._inFlightCount==0&&mll.length){d._callLoaded();}};dojo.unloaded=function(){var mll=d._unloaders;while(mll.length){(mll.pop())();}};d._onto=function(arr,obj,fn){if(!fn){arr.push(obj);}else{if(fn){var _25=(typeof fn=="string")?obj[fn]:fn;arr.push(function(){_25.call(obj);});}}};dojo.ready=dojo.addOnLoad=function(obj,_26){d._onto(d._loaders,obj,_26);if(d._postLoad&&d._inFlightCount==0&&!d._loadNotifying){d._callLoaded();}};var dca=d.config.addOnLoad;if(dca){d.addOnLoad[(dca instanceof Array?"apply":"call")](d,dca);}dojo._modulesLoaded=function(){if(d._postLoad){return;}if(d._inFlightCount>0){console.warn("files still in flight!");return;}d._callLoaded();};dojo._callLoaded=function(){if(typeof setTimeout=="object"||(d.config.useXDomain&&d.isOpera)){setTimeout(d.isAIR?function(){d.loaded();}:d._scopeName+".loaded();",0);}else{d.loaded();}};dojo._getModuleSymbols=function(_27){var _28=_27.split(".");for(var i=_28.length;i>0;i--){var _29=_28.slice(0,i).join(".");if(i==1&&!d._moduleHasPrefix(_29)){_28[0]="../"+_28[0];}else{var _2a=d._getModulePrefix(_29);if(_2a!=_29){_28.splice(0,i,_2a);break;}}}return _28;};dojo._global_omit_module_check=false;dojo.loadInit=function(_2b){_2b();};dojo._loadModule=dojo.require=function(_2c,_2d){_2d=d._global_omit_module_check||_2d;var _2e=d._loadedModules[_2c];if(_2e){return _2e;}var _2f=d._getModuleSymbols(_2c).join("/")+".js";var _30=!_2d?_2c:null;var ok=d._loadPath(_2f,_30);if(!ok&&!_2d){throw new Error("Could not load '"+_2c+"'; last tried '"+_2f+"'");}if(!_2d&&!d._isXDomain){_2e=d._loadedModules[_2c];if(!_2e){throw new Error("symbol '"+_2c+"' is not defined after loading '"+_2f+"'");}}return _2e;};dojo.provide=function(_31){_31=_31+"";return (d._loadedModules[_31]=d.getObject(_31,true));};dojo.platformRequire=function(_32){var _33=_32.common||[];var _34=_33.concat(_32[d._name]||_32["default"]||[]);for(var x=0;x<_34.length;x++){var _35=_34[x];if(_35.constructor==Array){d._loadModule.apply(d,_35);}else{d._loadModule(_35);}}};dojo.requireIf=function(_36,_37){if(_36===true){var _38=[];for(var i=1;i<arguments.length;i++){_38.push(arguments[i]);}d.require.apply(d,_38);}};dojo.requireAfterIf=d.requireIf;dojo.registerModulePath=function(_39,_3a){d._modulePrefixes[_39]={name:_39,value:_3a};};dojo.requireLocalization=function(_3b,_3c,_3d,_3e){d.require("dojo.i18n");d.i18n._requireLocalization.apply(d.hostenv,arguments);};var ore=new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),ire=new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");dojo._Url=function(){var n=null,_3f=arguments,uri=[_3f[0]];for(var i=1;i<_3f.length;i++){if(!_3f[i]){continue;}var _40=new d._Url(_3f[i]+""),_41=new d._Url(uri[0]+"");if(_40.path==""&&!_40.scheme&&!_40.authority&&!_40.query){if(_40.fragment!=n){_41.fragment=_40.fragment;}_40=_41;}else{if(!_40.scheme){_40.scheme=_41.scheme;if(!_40.authority){_40.authority=_41.authority;if(_40.path.charAt(0)!="/"){var _42=_41.path.substring(0,_41.path.lastIndexOf("/")+1)+_40.path;var _43=_42.split("/");for(var j=0;j<_43.length;j++){if(_43[j]=="."){if(j==_43.length-1){_43[j]="";}else{_43.splice(j,1);j--;}}else{if(j>0&&!(j==1&&_43[0]=="")&&_43[j]==".."&&_43[j-1]!=".."){if(j==(_43.length-1)){_43.splice(j,1);_43[j-1]="";}else{_43.splice(j-1,2);j-=2;}}}}_40.path=_43.join("/");}}}}uri=[];if(_40.scheme){uri.push(_40.scheme,":");}if(_40.authority){uri.push("//",_40.authority);}uri.push(_40.path);if(_40.query){uri.push("?",_40.query);}if(_40.fragment){uri.push("#",_40.fragment);}}this.uri=uri.join("");var r=this.uri.match(ore);this.scheme=r[2]||(r[1]?"":n);this.authority=r[4]||(r[3]?"":n);this.path=r[5];this.query=r[7]||(r[6]?"":n);this.fragment=r[9]||(r[8]?"":n);if(this.authority!=n){r=this.authority.match(ire);this.user=r[3]||n;this.password=r[4]||n;this.host=r[6]||r[7];this.port=r[9]||n;}};dojo._Url.prototype.toString=function(){return this.uri;};dojo.moduleUrl=function(_44,url){var loc=d._getModuleSymbols(_44).join("/");if(!loc){return null;}if(loc.lastIndexOf("/")!=loc.length-1){loc+="/";}var _45=loc.indexOf(":");if(loc.charAt(0)!="/"&&(_45==-1||_45>loc.indexOf("/"))){loc=d.baseUrl+loc;}return new d._Url(loc,url);};})();if(typeof window!="undefined"){dojo.isBrowser=true;dojo._name="browser";(function(){var d=dojo;if(document&&document.getElementsByTagName){var _46=document.getElementsByTagName("script");var _47=/dojo(\.xd)?\.js(\W|$)/i;for(var i=0;i<_46.length;i++){var src=_46[i].getAttribute("src");if(!src){continue;}var m=src.match(_47);if(m){if(!d.config.baseUrl){d.config.baseUrl=src.substring(0,m.index);}var cfg=_46[i].getAttribute("djConfig");if(cfg){var _48=eval("({ "+cfg+" })");for(var x in _48){dojo.config[x]=_48[x];}}break;}}}d.baseUrl=d.config.baseUrl;var n=navigator;var dua=n.userAgent,dav=n.appVersion,tv=parseFloat(dav);if(dua.indexOf("Opera")>=0){d.isOpera=tv;}if(dua.indexOf("AdobeAIR")>=0){d.isAIR=1;}d.isKhtml=(dav.indexOf("Konqueror")>=0)?tv:0;d.isWebKit=parseFloat(dua.split("WebKit/")[1])||undefined;d.isChrome=parseFloat(dua.split("Chrome/")[1])||undefined;d.isMac=dav.indexOf("Macintosh")>=0;var _49=Math.max(dav.indexOf("WebKit"),dav.indexOf("Safari"),0);if(_49&&!dojo.isChrome){d.isSafari=parseFloat(dav.split("Version/")[1]);if(!d.isSafari||parseFloat(dav.substr(_49+7))<=419.3){d.isSafari=2;}}if(dua.indexOf("Gecko")>=0&&!d.isKhtml&&!d.isWebKit){d.isMozilla=d.isMoz=tv;}if(d.isMoz){d.isFF=parseFloat(dua.split("Firefox/")[1]||dua.split("Minefield/")[1])||undefined;}if(document.all&&!d.isOpera){d.isIE=parseFloat(dav.split("MSIE ")[1])||undefined;var _4a=document.documentMode;if(_4a&&_4a!=5&&Math.floor(d.isIE)!=_4a){d.isIE=_4a;}}if(dojo.isIE&&window.location.protocol==="file:"){dojo.config.ieForceActiveXXhr=true;}d.isQuirks=document.compatMode=="BackCompat";d.locale=dojo.config.locale||(d.isIE?n.userLanguage:n.language).toLowerCase();d._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];d._xhrObj=function(){var _4b,_4c;if(!dojo.isIE||!dojo.config.ieForceActiveXXhr){try{_4b=new XMLHttpRequest();}catch(e){}}if(!_4b){for(var i=0;i<3;++i){var _4d=d._XMLHTTP_PROGIDS[i];try{_4b=new ActiveXObject(_4d);}catch(e){_4c=e;}if(_4b){d._XMLHTTP_PROGIDS=[_4d];break;}}}if(!_4b){throw new Error("XMLHTTP not available: "+_4c);}return _4b;};d._isDocumentOk=function(_4e){var _4f=_4e.status||0,lp=location.protocol;return (_4f>=200&&_4f<300)||_4f==304||_4f==1223||(!_4f&&(lp=="file:"||lp=="chrome:"||lp=="chrome-extension:"||lp=="app:"));};var _50=window.location+"";var _51=document.getElementsByTagName("base");var _52=(_51&&_51.length>0);d._getText=function(uri,_53){var _54=d._xhrObj();if(!_52&&dojo._Url){uri=(new dojo._Url(_50,uri)).toString();}if(d.config.cacheBust){uri+="";uri+=(uri.indexOf("?")==-1?"?":"&")+String(d.config.cacheBust).replace(/\W+/g,"");}_54.open("GET",uri,false);try{_54.send(null);if(!d._isDocumentOk(_54)){var err=Error("Unable to load "+uri+" status:"+_54.status);err.status=_54.status;err.responseText=_54.responseText;throw err;}}catch(e){if(_53){return null;}throw e;}return _54.responseText;};var _55=window;var _56=function(_57,fp){var _58=_55.attachEvent||_55.addEventListener;_57=_55.attachEvent?_57:_57.substring(2);_58(_57,function(){fp.apply(_55,arguments);},false);};d._windowUnloaders=[];d.windowUnloaded=function(){var mll=d._windowUnloaders;while(mll.length){(mll.pop())();}d=null;};var _59=0;d.addOnWindowUnload=function(obj,_5a){d._onto(d._windowUnloaders,obj,_5a);if(!_59){_59=1;_56("onunload",d.windowUnloaded);}};var _5b=0;d.addOnUnload=function(obj,_5c){d._onto(d._unloaders,obj,_5c);if(!_5b){_5b=1;_56("onbeforeunload",dojo.unloaded);}};})();dojo._initFired=false;dojo._loadInit=function(e){if(dojo._scrollIntervalId){clearInterval(dojo._scrollIntervalId);dojo._scrollIntervalId=0;}if(!dojo._initFired){dojo._initFired=true;if(!dojo.config.afterOnLoad&&window.detachEvent){window.detachEvent("onload",dojo._loadInit);}if(dojo._inFlightCount==0){dojo._modulesLoaded();}}};if(!dojo.config.afterOnLoad){if(document.addEventListener){document.addEventListener("DOMContentLoaded",dojo._loadInit,false);window.addEventListener("load",dojo._loadInit,false);}else{if(window.attachEvent){window.attachEvent("onload",dojo._loadInit);if(!dojo.config.skipIeDomLoaded&&self===self.top){dojo._scrollIntervalId=setInterval(function(){try{if(document.body){document.documentElement.doScroll("left");dojo._loadInit();}}catch(e){}},30);}}}}if(dojo.isIE){try{(function(){document.namespaces.add("v","urn:schemas-microsoft-com:vml");var _5d=["*","group","roundrect","oval","shape","rect","imagedata","path","textpath","text"],i=0,l=1,s=document.createStyleSheet();if(dojo.isIE>=8){i=1;l=_5d.length;}for(;i<l;++i){s.addRule("v\\:"+_5d[i],"behavior:url(#default#VML); display:inline-block");}})();}catch(e){}}}(function(){var mp=dojo.config["modulePaths"];if(mp){for(var _5e in mp){dojo.registerModulePath(_5e,mp[_5e]);}}})();if(dojo.config.isDebug){dojo.require("dojo._firebug.firebug");}if(dojo.config.debugAtAllCosts){dojo.config.useXDomain=true;dojo.require("dojo._base._loader.loader_xd");dojo.require("dojo._base._loader.loader_debug");dojo.require("dojo.i18n");}if(!dojo._hasResource["dojo._base.lang"]){dojo._hasResource["dojo._base.lang"]=true;dojo.provide("dojo._base.lang");(function(){var d=dojo,_5f=Object.prototype.toString;dojo.isString=function(it){return (typeof it=="string"||it instanceof String);};dojo.isArray=function(it){return it&&(it instanceof Array||typeof it=="array");};dojo.isFunction=function(it){return _5f.call(it)==="[object Function]";};dojo.isObject=function(it){return it!==undefined&&(it===null||typeof it=="object"||d.isArray(it)||d.isFunction(it));};dojo.isArrayLike=function(it){return it&&it!==undefined&&!d.isString(it)&&!d.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(d.isArray(it)||isFinite(it.length));};dojo.isAlien=function(it){return it&&!d.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));};dojo.extend=function(_60,_61){for(var i=1,l=arguments.length;i<l;i++){d._mixin(_60.prototype,arguments[i]);}return _60;};dojo._hitchArgs=function(_62,_63){var pre=d._toArray(arguments,2);var _64=d.isString(_63);return function(){var _65=d._toArray(arguments);var f=_64?(_62||d.global)[_63]:_63;return f&&f.apply(_62||this,pre.concat(_65));};};dojo.hitch=function(_66,_67){if(arguments.length>2){return d._hitchArgs.apply(d,arguments);}if(!_67){_67=_66;_66=null;}if(d.isString(_67)){_66=_66||d.global;if(!_66[_67]){throw (["dojo.hitch: scope[\"",_67,"\"] is null (scope=\"",_66,"\")"].join(""));}return function(){return _66[_67].apply(_66,arguments||[]);};}return !_66?_67:function(){return _67.apply(_66,arguments||[]);};};dojo.delegate=dojo._delegate=(function(){function TMP(){};return function(obj,_68){TMP.prototype=obj;var tmp=new TMP();TMP.prototype=null;if(_68){d._mixin(tmp,_68);}return tmp;};})();var _69=function(obj,_6a,_6b){return (_6b||[]).concat(Array.prototype.slice.call(obj,_6a||0));};var _6c=function(obj,_6d,_6e){var arr=_6e||[];for(var x=_6d||0;x<obj.length;x++){arr.push(obj[x]);}return arr;};dojo._toArray=d.isIE?function(obj){return ((obj.item)?_6c:_69).apply(this,arguments);}:_69;dojo.partial=function(_6f){var arr=[null];return d.hitch.apply(d,arr.concat(d._toArray(arguments)));};var _70=d._extraNames,_71=_70.length,_72={};dojo.clone=function(o){if(!o||typeof o!="object"||d.isFunction(o)){return o;}if(o.nodeType&&"cloneNode" in o){return o.cloneNode(true);}if(o instanceof Date){return new Date(o.getTime());}var r,i,l,s,_73;if(d.isArray(o)){r=[];for(i=0,l=o.length;i<l;++i){if(i in o){r.push(d.clone(o[i]));}}}else{r=o.constructor?new o.constructor():{};}for(_73 in o){s=o[_73];if(!(_73 in r)||(r[_73]!==s&&(!(_73 in _72)||_72[_73]!==s))){r[_73]=d.clone(s);}}if(_71){for(i=0;i<_71;++i){_73=_70[i];s=o[_73];if(!(_73 in r)||(r[_73]!==s&&(!(_73 in _72)||_72[_73]!==s))){r[_73]=s;}}}return r;};dojo.trim=String.prototype.trim?function(str){return str.trim();}:function(str){return str.replace(/^\s\s*/,"").replace(/\s\s*$/,"");};var _74=/\{([^\}]+)\}/g;dojo.replace=function(_75,map,_76){return _75.replace(_76||_74,d.isFunction(map)?map:function(_77,k){return d.getObject(k,false,map);});};})();}if(!dojo._hasResource["dojo._base.array"]){dojo._hasResource["dojo._base.array"]=true;dojo.provide("dojo._base.array");(function(){var _78=function(arr,obj,cb){return [(typeof arr=="string")?arr.split(""):arr,obj||dojo.global,(typeof cb=="string")?new Function("item","index","array",cb):cb];};var _79=function(_7a,arr,_7b,_7c){var _7d=_78(arr,_7c,_7b);arr=_7d[0];for(var i=0,l=arr.length;i<l;++i){var _7e=!!_7d[2].call(_7d[1],arr[i],i,arr);if(_7a^_7e){return _7e;}}return _7a;};dojo.mixin(dojo,{indexOf:function(_7f,_80,_81,_82){var _83=1,end=_7f.length||0,i=0;if(_82){i=end-1;_83=end=-1;}if(_81!=undefined){i=_81;}if((_82&&i>end)||i<end){for(;i!=end;i+=_83){if(_7f[i]==_80){return i;}}}return -1;},lastIndexOf:function(_84,_85,_86){return dojo.indexOf(_84,_85,_86,true);},forEach:function(arr,_87,_88){if(!arr||!arr.length){return;}var _89=_78(arr,_88,_87);arr=_89[0];for(var i=0,l=arr.length;i<l;++i){_89[2].call(_89[1],arr[i],i,arr);}},every:function(arr,_8a,_8b){return _79(true,arr,_8a,_8b);},some:function(arr,_8c,_8d){return _79(false,arr,_8c,_8d);},map:function(arr,_8e,_8f){var _90=_78(arr,_8f,_8e);arr=_90[0];var _91=(arguments[3]?(new arguments[3]()):[]);for(var i=0,l=arr.length;i<l;++i){_91.push(_90[2].call(_90[1],arr[i],i,arr));}return _91;},filter:function(arr,_92,_93){var _94=_78(arr,_93,_92);arr=_94[0];var _95=[];for(var i=0,l=arr.length;i<l;++i){if(_94[2].call(_94[1],arr[i],i,arr)){_95.push(arr[i]);}}return _95;}});})();}if(!dojo._hasResource["dojo._base.declare"]){dojo._hasResource["dojo._base.declare"]=true;dojo.provide("dojo._base.declare");(function(){var d=dojo,mix=d._mixin,op=Object.prototype,_96=op.toString,_97=new Function,_98=0,_99="constructor";function err(msg){throw new Error("declare: "+msg);};function _9a(_9b){var _9c=[],_9d=[{cls:0,refs:[]}],_9e={},_9f=1,l=_9b.length,i=0,j,lin,_a0,top,_a1,rec,_a2,_a3;for(;i<l;++i){_a0=_9b[i];if(!_a0){err("mixin #"+i+" is unknown. Did you use dojo.require to pull it in?");}else{if(_96.call(_a0)!="[object Function]"){err("mixin #"+i+" is not a callable constructor.");}}lin=_a0._meta?_a0._meta.bases:[_a0];top=0;for(j=lin.length-1;j>=0;--j){_a1=lin[j].prototype;if(!_a1.hasOwnProperty("declaredClass")){_a1.declaredClass="uniqName_"+(_98++);}_a2=_a1.declaredClass;if(!_9e.hasOwnProperty(_a2)){_9e[_a2]={count:0,refs:[],cls:lin[j]};++_9f;}rec=_9e[_a2];if(top&&top!==rec){rec.refs.push(top);++top.count;}top=rec;}++top.count;_9d[0].refs.push(top);}while(_9d.length){top=_9d.pop();_9c.push(top.cls);--_9f;while(_a3=top.refs,_a3.length==1){top=_a3[0];if(!top||--top.count){top=0;break;}_9c.push(top.cls);--_9f;}if(top){for(i=0,l=_a3.length;i<l;++i){top=_a3[i];if(!--top.count){_9d.push(top);}}}}if(_9f){err("can't build consistent linearization");}_a0=_9b[0];_9c[0]=_a0?_a0._meta&&_a0===_9c[_9c.length-_a0._meta.bases.length]?_a0._meta.bases.length:1:0;return _9c;};function _a4(_a5,a,f){var _a6,_a7,_a8,_a9,_aa,_ab,_ac,opf,pos,_ad=this._inherited=this._inherited||{};if(typeof _a5=="string"){_a6=_a5;_a5=a;a=f;}f=0;_a9=_a5.callee;_a6=_a6||_a9.nom;if(!_a6){err("can't deduce a name to call inherited()");}_aa=this.constructor._meta;_a8=_aa.bases;pos=_ad.p;if(_a6!=_99){if(_ad.c!==_a9){pos=0;_ab=_a8[0];_aa=_ab._meta;if(_aa.hidden[_a6]!==_a9){_a7=_aa.chains;if(_a7&&typeof _a7[_a6]=="string"){err("calling chained method with inherited: "+_a6);}do{_aa=_ab._meta;_ac=_ab.prototype;if(_aa&&(_ac[_a6]===_a9&&_ac.hasOwnProperty(_a6)||_aa.hidden[_a6]===_a9)){break;}}while(_ab=_a8[++pos]);pos=_ab?pos:-1;}}_ab=_a8[++pos];if(_ab){_ac=_ab.prototype;if(_ab._meta&&_ac.hasOwnProperty(_a6)){f=_ac[_a6];}else{opf=op[_a6];do{_ac=_ab.prototype;f=_ac[_a6];if(f&&(_ab._meta?_ac.hasOwnProperty(_a6):f!==opf)){break;}}while(_ab=_a8[++pos]);}}f=_ab&&f||op[_a6];}else{if(_ad.c!==_a9){pos=0;_aa=_a8[0]._meta;if(_aa&&_aa.ctor!==_a9){_a7=_aa.chains;if(!_a7||_a7.constructor!=="manual"){err("calling chained constructor with inherited");}while(_ab=_a8[++pos]){_aa=_ab._meta;if(_aa&&_aa.ctor===_a9){break;}}pos=_ab?pos:-1;}}while(_ab=_a8[++pos]){_aa=_ab._meta;f=_aa?_aa.ctor:_ab;if(f){break;}}f=_ab&&f;}_ad.c=f;_ad.p=pos;if(f){return a===true?f:f.apply(this,a||_a5);}};function _ae(_af,_b0){if(typeof _af=="string"){return this.inherited(_af,_b0,true);}return this.inherited(_af,true);};function _b1(cls){var _b2=this.constructor._meta.bases;for(var i=0,l=_b2.length;i<l;++i){if(_b2[i]===cls){return true;}}return this instanceof cls;};function _b3(_b4,_b5){var _b6,i=0,l=d._extraNames.length;for(_b6 in _b5){if(_b6!=_99&&_b5.hasOwnProperty(_b6)){_b4[_b6]=_b5[_b6];}}for(;i<l;++i){_b6=d._extraNames[i];if(_b6!=_99&&_b5.hasOwnProperty(_b6)){_b4[_b6]=_b5[_b6];}}};function _b7(_b8,_b9){var _ba,t,i=0,l=d._extraNames.length;for(_ba in _b9){t=_b9[_ba];if((t!==op[_ba]||!(_ba in op))&&_ba!=_99){if(_96.call(t)=="[object Function]"){t.nom=_ba;}_b8[_ba]=t;}}for(;i<l;++i){_ba=d._extraNames[i];t=_b9[_ba];if((t!==op[_ba]||!(_ba in op))&&_ba!=_99){if(_96.call(t)=="[object Function]"){t.nom=_ba;}_b8[_ba]=t;}}return _b8;};function _bb(_bc){_b7(this.prototype,_bc);return this;};function _bd(_be,_bf){return function(){var a=arguments,_c0=a,a0=a[0],f,i,m,l=_be.length,_c1;if(!(this instanceof a.callee)){return _c2(a);}if(_bf&&(a0&&a0.preamble||this.preamble)){_c1=new Array(_be.length);_c1[0]=a;for(i=0;;){a0=a[0];if(a0){f=a0.preamble;if(f){a=f.apply(this,a)||a;}}f=_be[i].prototype;f=f.hasOwnProperty("preamble")&&f.preamble;if(f){a=f.apply(this,a)||a;}if(++i==l){break;}_c1[i]=a;}}for(i=l-1;i>=0;--i){f=_be[i];m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,_c1?_c1[i]:a);}}f=this.postscript;if(f){f.apply(this,_c0);}};};function _c3(_c4,_c5){return function(){var a=arguments,t=a,a0=a[0],f;if(!(this instanceof a.callee)){return _c2(a);}if(_c5){if(a0){f=a0.preamble;if(f){t=f.apply(this,t)||t;}}f=this.preamble;if(f){f.apply(this,t);}}if(_c4){_c4.apply(this,a);}f=this.postscript;if(f){f.apply(this,a);}};};function _c6(_c7){return function(){var a=arguments,i=0,f,m;if(!(this instanceof a.callee)){return _c2(a);}for(;f=_c7[i];++i){m=f._meta;f=m?m.ctor:f;if(f){f.apply(this,a);break;}}f=this.postscript;if(f){f.apply(this,a);}};};function _c8(_c9,_ca,_cb){return function(){var b,m,f,i=0,_cc=1;if(_cb){i=_ca.length-1;_cc=-1;}for(;b=_ca[i];i+=_cc){m=b._meta;f=(m?m.hidden:b.prototype)[_c9];if(f){f.apply(this,arguments);}}};};function _cd(_ce){_97.prototype=_ce.prototype;var t=new _97;_97.prototype=null;return t;};function _c2(_cf){var _d0=_cf.callee,t=_cd(_d0);_d0.apply(t,_cf);return t;};d.declare=function(_d1,_d2,_d3){if(typeof _d1!="string"){_d3=_d2;_d2=_d1;_d1="";}_d3=_d3||{};var _d4,i,t,_d5,_d6,_d7,_d8,_d9=1,_da=_d2;if(_96.call(_d2)=="[object Array]"){_d7=_9a(_d2);t=_d7[0];_d9=_d7.length-t;_d2=_d7[_d9];}else{_d7=[0];if(_d2){if(_96.call(_d2)=="[object Function]"){t=_d2._meta;_d7=_d7.concat(t?t.bases:_d2);}else{err("base class is not a callable constructor.");}}else{if(_d2!==null){err("unknown base class. Did you use dojo.require to pull it in?");}}}if(_d2){for(i=_d9-1;;--i){_d4=_cd(_d2);if(!i){break;}t=_d7[i];(t._meta?_b3:mix)(_d4,t.prototype);_d5=new Function;_d5.superclass=_d2;_d5.prototype=_d4;_d2=_d4.constructor=_d5;}}else{_d4={};}_b7(_d4,_d3);t=_d3.constructor;if(t!==op.constructor){t.nom=_99;_d4.constructor=t;}for(i=_d9-1;i;--i){t=_d7[i]._meta;if(t&&t.chains){_d8=mix(_d8||{},t.chains);}}if(_d4["-chains-"]){_d8=mix(_d8||{},_d4["-chains-"]);}t=!_d8||!_d8.hasOwnProperty(_99);_d7[0]=_d5=(_d8&&_d8.constructor==="manual")?_c6(_d7):(_d7.length==1?_c3(_d3.constructor,t):_bd(_d7,t));_d5._meta={bases:_d7,hidden:_d3,chains:_d8,parents:_da,ctor:_d3.constructor};_d5.superclass=_d2&&_d2.prototype;_d5.extend=_bb;_d5.prototype=_d4;_d4.constructor=_d5;_d4.getInherited=_ae;_d4.inherited=_a4;_d4.isInstanceOf=_b1;if(_d1){_d4.declaredClass=_d1;d.setObject(_d1,_d5);}if(_d8){for(_d6 in _d8){if(_d4[_d6]&&typeof _d8[_d6]=="string"&&_d6!=_99){t=_d4[_d6]=_c8(_d6,_d7,_d8[_d6]==="after");t.nom=_d6;}}}return _d5;};d.safeMixin=_b7;})();}if(!dojo._hasResource["dojo._base.connect"]){dojo._hasResource["dojo._base.connect"]=true;dojo.provide("dojo._base.connect");dojo._listener={getDispatcher:function(){return function(){var ap=Array.prototype,c=arguments.callee,ls=c._listeners,t=c.target;var r=t&&t.apply(this,arguments);var i,lls;lls=[].concat(ls);for(i in lls){if(!(i in ap)){lls[i].apply(this,arguments);}}return r;};},add:function(_db,_dc,_dd){_db=_db||dojo.global;var f=_db[_dc];if(!f||!f._listeners){var d=dojo._listener.getDispatcher();d.target=f;d._listeners=[];f=_db[_dc]=d;}return f._listeners.push(_dd);},remove:function(_de,_df,_e0){var f=(_de||dojo.global)[_df];if(f&&f._listeners&&_e0--){delete f._listeners[_e0];}}};dojo.connect=function(obj,_e1,_e2,_e3,_e4){var a=arguments,_e5=[],i=0;_e5.push(dojo.isString(a[0])?null:a[i++],a[i++]);var a1=a[i+1];_e5.push(dojo.isString(a1)||dojo.isFunction(a1)?a[i++]:null,a[i++]);for(var l=a.length;i<l;i++){_e5.push(a[i]);}return dojo._connect.apply(this,_e5);};dojo._connect=function(obj,_e6,_e7,_e8){var l=dojo._listener,h=l.add(obj,_e6,dojo.hitch(_e7,_e8));return [obj,_e6,h,l];};dojo.disconnect=function(_e9){if(_e9&&_e9[0]!==undefined){dojo._disconnect.apply(this,_e9);delete _e9[0];}};dojo._disconnect=function(obj,_ea,_eb,_ec){_ec.remove(obj,_ea,_eb);};dojo._topics={};dojo.subscribe=function(_ed,_ee,_ef){return [_ed,dojo._listener.add(dojo._topics,_ed,dojo.hitch(_ee,_ef))];};dojo.unsubscribe=function(_f0){if(_f0){dojo._listener.remove(dojo._topics,_f0[0],_f0[1]);}};dojo.publish=function(_f1,_f2){var f=dojo._topics[_f1];if(f){f.apply(this,_f2||[]);}};dojo.connectPublisher=function(_f3,obj,_f4){var pf=function(){dojo.publish(_f3,arguments);};return _f4?dojo.connect(obj,_f4,pf):dojo.connect(obj,pf);};}if(!dojo._hasResource["dojo._base.Deferred"]){dojo._hasResource["dojo._base.Deferred"]=true;dojo.provide("dojo._base.Deferred");(function(){var _f5=function(){};var _f6=Object.freeze||function(){};dojo.Deferred=function(_f7){var _f8,_f9,_fa,_fb,_fc;var _fd=this.promise={};function _fe(_ff){if(_f9){throw new Error("This deferred has already been resolved");}_f8=_ff;_f9=true;_100();};function _100(){var _101;while(!_101&&_fc){var _102=_fc;_fc=_fc.next;if(_101=(_102.progress==_f5)){_f9=false;}var func=(_fa?_102.error:_102.resolved);if(func){try{var _103=func(_f8);if(_103&&typeof _103.then==="function"){_103.then(dojo.hitch(_102.deferred,"resolve"),dojo.hitch(_102.deferred,"reject"));continue;}var _104=_101&&_103===undefined;_102.deferred[_104&&_fa?"reject":"resolve"](_104?_f8:_103);}catch(e){_102.deferred.reject(e);}}else{if(_fa){_102.deferred.reject(_f8);}else{_102.deferred.resolve(_f8);}}}};this.resolve=this.callback=function(_105){this.fired=0;this.results=[_105,null];_fe(_105);};this.reject=this.errback=function(_106){_fa=true;this.fired=1;_fe(_106);this.results=[null,_106];if(!_106||_106.log!==false){(dojo.config.deferredOnError||function(x){console.error(x);})(_106);}};this.progress=function(_107){var _108=_fc;while(_108){var _109=_108.progress;_109&&_109(_107);_108=_108.next;}};this.addCallbacks=function(_10a,_10b){this.then(_10a,_10b,_f5);return this;};this.then=_fd.then=function(_10c,_10d,_10e){var _10f=_10e==_f5?this:new dojo.Deferred(_fd.cancel);var _110={resolved:_10c,error:_10d,progress:_10e,deferred:_10f};if(_fc){_fb=_fb.next=_110;}else{_fc=_fb=_110;}if(_f9){_100();}return _10f.promise;};var _111=this;this.cancel=_fd.cancel=function(){if(!_f9){var _112=_f7&&_f7(_111);if(!_f9){if(!(_112 instanceof Error)){_112=new Error(_112);}_112.log=false;_111.reject(_112);}}};_f6(_fd);};dojo.extend(dojo.Deferred,{addCallback:function(_113){return this.addCallbacks(dojo.hitch.apply(dojo,arguments));},addErrback:function(_114){return this.addCallbacks(null,dojo.hitch.apply(dojo,arguments));},addBoth:function(_115){var _116=dojo.hitch.apply(dojo,arguments);return this.addCallbacks(_116,_116);},fired:-1});})();dojo.when=function(_117,_118,_119,_11a){if(_117&&typeof _117.then==="function"){return _117.then(_118,_119,_11a);}return _118(_117);};}if(!dojo._hasResource["dojo._base.json"]){dojo._hasResource["dojo._base.json"]=true;dojo.provide("dojo._base.json");dojo.fromJson=function(json){return eval("("+json+")");};dojo._escapeString=function(str){return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");};dojo.toJsonIndentStr="\t";dojo.toJson=function(it,_11b,_11c){if(it===undefined){return "undefined";}var _11d=typeof it;if(_11d=="number"||_11d=="boolean"){return it+"";}if(it===null){return "null";}if(dojo.isString(it)){return dojo._escapeString(it);}var _11e=arguments.callee;var _11f;_11c=_11c||"";var _120=_11b?_11c+dojo.toJsonIndentStr:"";var tf=it.__json__||it.json;if(dojo.isFunction(tf)){_11f=tf.call(it);if(it!==_11f){return _11e(_11f,_11b,_120);}}if(it.nodeType&&it.cloneNode){throw new Error("Can't serialize DOM nodes");}var sep=_11b?" ":"";var _121=_11b?"\n":"";if(dojo.isArray(it)){var res=dojo.map(it,function(obj){var val=_11e(obj,_11b,_120);if(typeof val!="string"){val="undefined";}return _121+_120+val;});return "["+res.join(","+sep)+_121+_11c+"]";}if(_11d=="function"){return null;}var _122=[],key;for(key in it){var _123,val;if(typeof key=="number"){_123="\""+key+"\"";}else{if(typeof key=="string"){_123=dojo._escapeString(key);}else{continue;}}val=_11e(it[key],_11b,_120);if(typeof val!="string"){continue;}_122.push(_121+_120+_123+":"+sep+val);}return "{"+_122.join(","+sep)+_121+_11c+"}";};}if(!dojo._hasResource["dojo._base.Color"]){dojo._hasResource["dojo._base.Color"]=true;dojo.provide("dojo._base.Color");(function(){var d=dojo;dojo.Color=function(_124){if(_124){this.setColor(_124);}};dojo.Color.named={black:[0,0,0],silver:[192,192,192],gray:[128,128,128],white:[255,255,255],maroon:[128,0,0],red:[255,0,0],purple:[128,0,128],fuchsia:[255,0,255],green:[0,128,0],lime:[0,255,0],olive:[128,128,0],yellow:[255,255,0],navy:[0,0,128],blue:[0,0,255],teal:[0,128,128],aqua:[0,255,255],transparent:d.config.transparentColor||[255,255,255]};dojo.extend(dojo.Color,{r:255,g:255,b:255,a:1,_set:function(r,g,b,a){var t=this;t.r=r;t.g=g;t.b=b;t.a=a;},setColor:function(_125){if(d.isString(_125)){d.colorFromString(_125,this);}else{if(d.isArray(_125)){d.colorFromArray(_125,this);}else{this._set(_125.r,_125.g,_125.b,_125.a);if(!(_125 instanceof d.Color)){this.sanitize();}}}return this;},sanitize:function(){return this;},toRgb:function(){var t=this;return [t.r,t.g,t.b];},toRgba:function(){var t=this;return [t.r,t.g,t.b,t.a];},toHex:function(){var arr=d.map(["r","g","b"],function(x){var s=this[x].toString(16);return s.length<2?"0"+s:s;},this);return "#"+arr.join("");},toCss:function(_126){var t=this,rgb=t.r+", "+t.g+", "+t.b;return (_126?"rgba("+rgb+", "+t.a:"rgb("+rgb)+")";},toString:function(){return this.toCss(true);}});dojo.blendColors=function(_127,end,_128,obj){var t=obj||new d.Color();d.forEach(["r","g","b","a"],function(x){t[x]=_127[x]+(end[x]-_127[x])*_128;if(x!="a"){t[x]=Math.round(t[x]);}});return t.sanitize();};dojo.colorFromRgb=function(_129,obj){var m=_129.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);return m&&dojo.colorFromArray(m[1].split(/\s*,\s*/),obj);};dojo.colorFromHex=function(_12a,obj){var t=obj||new d.Color(),bits=(_12a.length==4)?4:8,mask=(1<<bits)-1;_12a=Number("0x"+_12a.substr(1));if(isNaN(_12a)){return null;}d.forEach(["b","g","r"],function(x){var c=_12a&mask;_12a>>=bits;t[x]=bits==4?17*c:c;});t.a=1;return t;};dojo.colorFromArray=function(a,obj){var t=obj||new d.Color();t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));if(isNaN(t.a)){t.a=1;}return t.sanitize();};dojo.colorFromString=function(str,obj){var a=d.Color.named[str];return a&&d.colorFromArray(a,obj)||d.colorFromRgb(str,obj)||d.colorFromHex(str,obj);};})();}if(!dojo._hasResource["dojo._base"]){dojo._hasResource["dojo._base"]=true;dojo.provide("dojo._base");}if(!dojo._hasResource["dojo._base.window"]){dojo._hasResource["dojo._base.window"]=true;dojo.provide("dojo._base.window");dojo.doc=window["document"]||null;dojo.body=function(){return dojo.doc.body||dojo.doc.getElementsByTagName("body")[0];};dojo.setContext=function(_12b,_12c){dojo.global=_12b;dojo.doc=_12c;};dojo.withGlobal=function(_12d,_12e,_12f,_130){var _131=dojo.global;try{dojo.global=_12d;return dojo.withDoc.call(null,_12d.document,_12e,_12f,_130);}finally{dojo.global=_131;}};dojo.withDoc=function(_132,_133,_134,_135){var _136=dojo.doc,_137=dojo._bodyLtr,oldQ=dojo.isQuirks;try{dojo.doc=_132;delete dojo._bodyLtr;dojo.isQuirks=dojo.doc.compatMode=="BackCompat";if(_134&&typeof _133=="string"){_133=_134[_133];}return _133.apply(_134,_135||[]);}finally{dojo.doc=_136;delete dojo._bodyLtr;if(_137!==undefined){dojo._bodyLtr=_137;}dojo.isQuirks=oldQ;}};}if(!dojo._hasResource["dojo._base.event"]){dojo._hasResource["dojo._base.event"]=true;dojo.provide("dojo._base.event");(function(){var del=(dojo._event_listener={add:function(node,name,fp){if(!node){return;}name=del._normalizeEventName(name);fp=del._fixCallback(name,fp);var _138=name;if(!dojo.isIE&&(name=="mouseenter"||name=="mouseleave")){var ofp=fp;name=(name=="mouseenter")?"mouseover":"mouseout";fp=function(e){if(!dojo.isDescendant(e.relatedTarget,node)){return ofp.call(this,e);}};}node.addEventListener(name,fp,false);return fp;},remove:function(node,_139,_13a){if(node){_139=del._normalizeEventName(_139);if(!dojo.isIE&&(_139=="mouseenter"||_139=="mouseleave")){_139=(_139=="mouseenter")?"mouseover":"mouseout";}node.removeEventListener(_139,_13a,false);}},_normalizeEventName:function(name){return name.slice(0,2)=="on"?name.slice(2):name;},_fixCallback:function(name,fp){return name!="keypress"?fp:function(e){return fp.call(this,del._fixEvent(e,this));};},_fixEvent:function(evt,_13b){switch(evt.type){case "keypress":del._setKeyChar(evt);break;}return evt;},_setKeyChar:function(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):"";evt.charOrCode=evt.keyChar||evt.keyCode;},_punctMap:{106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39}});dojo.fixEvent=function(evt,_13c){return del._fixEvent(evt,_13c);};dojo.stopEvent=function(evt){evt.preventDefault();evt.stopPropagation();};var _13d=dojo._listener;dojo._connect=function(obj,_13e,_13f,_140,_141){var _142=obj&&(obj.nodeType||obj.attachEvent||obj.addEventListener);var lid=_142?(_141?2:1):0,l=[dojo._listener,del,_13d][lid];var h=l.add(obj,_13e,dojo.hitch(_13f,_140));return [obj,_13e,h,lid];};dojo._disconnect=function(obj,_143,_144,_145){([dojo._listener,del,_13d][_145]).remove(obj,_143,_144);};dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:dojo.isSafari?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,copyKey:dojo.isMac&&!dojo.isAIR?(dojo.isSafari?91:224):17};var _146=dojo.isMac?"metaKey":"ctrlKey";dojo.isCopyKey=function(e){return e[_146];};if(dojo.isIE){dojo.mouseButtons={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,_147){return e.button&_147;},isLeft:function(e){return e.button&1;},isMiddle:function(e){return e.button&4;},isRight:function(e){return e.button&2;}};}else{dojo.mouseButtons={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,_148){return e.button==_148;},isLeft:function(e){return e.button==0;},isMiddle:function(e){return e.button==1;},isRight:function(e){return e.button==2;}};}if(dojo.isIE){var _149=function(e,code){try{return (e.keyCode=code);}catch(e){return 0;}};var iel=dojo._listener;var _14a=(dojo._ieListenersName="_"+dojo._scopeName+"_listeners");if(!dojo.config._allow_leaks){_13d=iel=dojo._ie_listener={handlers:[],add:function(_14b,_14c,_14d){_14b=_14b||dojo.global;var f=_14b[_14c];if(!f||!f[_14a]){var d=dojo._getIeDispatcher();d.target=f&&(ieh.push(f)-1);d[_14a]=[];f=_14b[_14c]=d;}return f[_14a].push(ieh.push(_14d)-1);},remove:function(_14e,_14f,_150){var f=(_14e||dojo.global)[_14f],l=f&&f[_14a];if(f&&l&&_150--){delete ieh[l[_150]];delete l[_150];}}};var ieh=iel.handlers;}dojo.mixin(del,{add:function(node,_151,fp){if(!node){return;}_151=del._normalizeEventName(_151);if(_151=="onkeypress"){var kd=node.onkeydown;if(!kd||!kd[_14a]||!kd._stealthKeydownHandle){var h=del.add(node,"onkeydown",del._stealthKeyDown);kd=node.onkeydown;kd._stealthKeydownHandle=h;kd._stealthKeydownRefs=1;}else{kd._stealthKeydownRefs++;}}return iel.add(node,_151,del._fixCallback(fp));},remove:function(node,_152,_153){_152=del._normalizeEventName(_152);iel.remove(node,_152,_153);if(_152=="onkeypress"){var kd=node.onkeydown;if(--kd._stealthKeydownRefs<=0){iel.remove(node,"onkeydown",kd._stealthKeydownHandle);delete kd._stealthKeydownHandle;}}},_normalizeEventName:function(_154){return _154.slice(0,2)!="on"?"on"+_154:_154;},_nop:function(){},_fixEvent:function(evt,_155){if(!evt){var w=_155&&(_155.ownerDocument||_155.document||_155).parentWindow||window;evt=w.event;}if(!evt){return (evt);}evt.target=evt.srcElement;evt.currentTarget=(_155||evt.srcElement);evt.layerX=evt.offsetX;evt.layerY=evt.offsetY;var se=evt.srcElement,doc=(se&&se.ownerDocument)||document;var _156=((dojo.isIE<6)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;var _157=dojo._getIeDocumentElementOffset();evt.pageX=evt.clientX+dojo._fixIeBiDiScrollLeft(_156.scrollLeft||0)-_157.x;evt.pageY=evt.clientY+(_156.scrollTop||0)-_157.y;if(evt.type=="mouseover"){evt.relatedTarget=evt.fromElement;}if(evt.type=="mouseout"){evt.relatedTarget=evt.toElement;}evt.stopPropagation=del._stopPropagation;evt.preventDefault=del._preventDefault;return del._fixKeys(evt);},_fixKeys:function(evt){switch(evt.type){case "keypress":var c=("charCode" in evt?evt.charCode:evt.keyCode);if(c==10){c=0;evt.keyCode=13;}else{if(c==13||c==27){c=0;}else{if(c==3){c=99;}}}evt.charCode=c;del._setKeyChar(evt);break;}return evt;},_stealthKeyDown:function(evt){var kp=evt.currentTarget.onkeypress;if(!kp||!kp[_14a]){return;}var k=evt.keyCode;var _158=k!=13&&k!=32&&k!=27&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_158||evt.ctrlKey){var c=_158?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});kp.call(evt.currentTarget,faux);evt.cancelBubble=faux.cancelBubble;evt.returnValue=faux.returnValue;_149(evt,faux.keyCode);}},_stopPropagation:function(){this.cancelBubble=true;},_preventDefault:function(){this.bubbledKeyCode=this.keyCode;if(this.ctrlKey){_149(this,0);}this.returnValue=false;}});dojo.stopEvent=function(evt){evt=evt||window.event;del._stopPropagation.call(evt);del._preventDefault.call(evt);};}del._synthesizeEvent=function(evt,_159){var faux=dojo.mixin({},evt,_159);del._setKeyChar(faux);faux.preventDefault=function(){evt.preventDefault();};faux.stopPropagation=function(){evt.stopPropagation();};return faux;};if(dojo.isOpera){dojo.mixin(del,{_fixEvent:function(evt,_15a){switch(evt.type){case "keypress":var c=evt.which;if(c==3){c=99;}c=c<41&&!evt.shiftKey?0:c;if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){c+=32;}return del._synthesizeEvent(evt,{charCode:c});}return evt;}});}if(dojo.isWebKit){del._add=del.add;del._remove=del.remove;dojo.mixin(del,{add:function(node,_15b,fp){if(!node){return;}var _15c=del._add(node,_15b,fp);if(del._normalizeEventName(_15b)=="keypress"){_15c._stealthKeyDownHandle=del._add(node,"keydown",function(evt){var k=evt.keyCode;var _15d=k!=13&&k!=32&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);if(_15d||evt.ctrlKey){var c=_15d?0:k;if(evt.ctrlKey){if(k==3||k==13){return;}else{if(c>95&&c<106){c-=48;}else{if(!evt.shiftKey&&c>=65&&c<=90){c+=32;}else{c=del._punctMap[c]||c;}}}}var faux=del._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});fp.call(evt.currentTarget,faux);}});}return _15c;},remove:function(node,_15e,_15f){if(node){if(_15f._stealthKeyDownHandle){del._remove(node,"keydown",_15f._stealthKeyDownHandle);}del._remove(node,_15e,_15f);}},_fixEvent:function(evt,_160){switch(evt.type){case "keypress":if(evt.faux){return evt;}var c=evt.charCode;c=c>=32?c:0;return del._synthesizeEvent(evt,{charCode:c,faux:true});}return evt;}});}})();if(dojo.isIE){dojo._ieDispatcher=function(args,_161){var ap=Array.prototype,h=dojo._ie_listener.handlers,c=args.callee,ls=c[dojo._ieListenersName],t=h[c.target];var r=t&&t.apply(_161,args);var lls=[].concat(ls);for(var i in lls){var f=h[lls[i]];if(!(i in ap)&&f){f.apply(_161,args);}}return r;};dojo._getIeDispatcher=function(){return new Function(dojo._scopeName+"._ieDispatcher(arguments, this)");};dojo._event_listener._fixCallback=function(fp){var f=dojo._event_listener._fixEvent;return function(e){return fp.call(this,f(e,this));};};}}if(!dojo._hasResource["dojo._base.html"]){dojo._hasResource["dojo._base.html"]=true;dojo.provide("dojo._base.html");try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}if(dojo.isIE||dojo.isOpera){dojo.byId=function(id,doc){if(typeof id!="string"){return id;}var _162=doc||dojo.doc,te=_162.getElementById(id);if(te&&(te.attributes.id.value==id||te.id==id)){return te;}else{var eles=_162.all[id];if(!eles||eles.nodeName){eles=[eles];}var i=0;while((te=eles[i++])){if((te.attributes&&te.attributes.id&&te.attributes.id.value==id)||te.id==id){return te;}}}};}else{dojo.byId=function(id,doc){return (typeof id=="string")?(doc||dojo.doc).getElementById(id):id;};}(function(){var d=dojo;var byId=d.byId;var _163=null,_164;d.addOnWindowUnload(function(){_163=null;});dojo._destroyElement=dojo.destroy=function(node){node=byId(node);try{var doc=node.ownerDocument;if(!_163||_164!=doc){_163=doc.createElement("div");_164=doc;}_163.appendChild(node.parentNode?node.parentNode.removeChild(node):node);_163.innerHTML="";}catch(e){}};dojo.isDescendant=function(node,_165){try{node=byId(node);_165=byId(_165);while(node){if(node==_165){return true;}node=node.parentNode;}}catch(e){}return false;};dojo.setSelectable=function(node,_166){node=byId(node);if(d.isMozilla){node.style.MozUserSelect=_166?"":"none";}else{if(d.isKhtml||d.isWebKit){node.style.KhtmlUserSelect=_166?"auto":"none";}else{if(d.isIE){var v=(node.unselectable=_166?"":"on");d.query("*",node).forEach("item.unselectable = '"+v+"'");}}}};var _167=function(node,ref){var _168=ref.parentNode;if(_168){_168.insertBefore(node,ref);}};var _169=function(node,ref){var _16a=ref.parentNode;if(_16a){if(_16a.lastChild==ref){_16a.appendChild(node);}else{_16a.insertBefore(node,ref.nextSibling);}}};dojo.place=function(node,_16b,_16c){_16b=byId(_16b);if(typeof node=="string"){node=node.charAt(0)=="<"?d._toDom(node,_16b.ownerDocument):byId(node);}if(typeof _16c=="number"){var cn=_16b.childNodes;if(!cn.length||cn.length<=_16c){_16b.appendChild(node);}else{_167(node,cn[_16c<0?0:_16c]);}}else{switch(_16c){case "before":_167(node,_16b);break;case "after":_169(node,_16b);break;case "replace":_16b.parentNode.replaceChild(node,_16b);break;case "only":d.empty(_16b);_16b.appendChild(node);break;case "first":if(_16b.firstChild){_167(node,_16b.firstChild);break;}default:_16b.appendChild(node);}}return node;};dojo.boxModel="content-box";if(d.isIE){d.boxModel=document.compatMode=="BackCompat"?"border-box":"content-box";}var gcs;if(d.isWebKit){gcs=function(node){var s;if(node.nodeType==1){var dv=node.ownerDocument.defaultView;s=dv.getComputedStyle(node,null);if(!s&&node.style){node.style.display="";s=dv.getComputedStyle(node,null);}}return s||{};};}else{if(d.isIE){gcs=function(node){return node.nodeType==1?node.currentStyle:{};};}else{gcs=function(node){return node.nodeType==1?node.ownerDocument.defaultView.getComputedStyle(node,null):{};};}}dojo.getComputedStyle=gcs;if(!d.isIE){d._toPixelValue=function(_16d,_16e){return parseFloat(_16e)||0;};}else{d._toPixelValue=function(_16f,_170){if(!_170){return 0;}if(_170=="medium"){return 4;}if(_170.slice&&_170.slice(-2)=="px"){return parseFloat(_170);}with(_16f){var _171=style.left;var _172=runtimeStyle.left;runtimeStyle.left=currentStyle.left;try{style.left=_170;_170=style.pixelLeft;}catch(e){_170=0;}style.left=_171;runtimeStyle.left=_172;}return _170;};}var px=d._toPixelValue;var astr="DXImageTransform.Microsoft.Alpha";var af=function(n,f){try{return n.filters.item(astr);}catch(e){return f?{}:null;}};dojo._getOpacity=d.isIE?function(node){try{return af(node).Opacity/100;}catch(e){return 1;}}:function(node){return gcs(node).opacity;};dojo._setOpacity=d.isIE?function(node,_173){var ov=_173*100,_174=_173==1;node.style.zoom=_174?"":1;if(!af(node)){if(_174){return _173;}node.style.filter+=" progid:"+astr+"(Opacity="+ov+")";}else{af(node,1).Opacity=ov;}af(node,1).Enabled=!_174;if(node.nodeName.toLowerCase()=="tr"){d.query("> td",node).forEach(function(i){d._setOpacity(i,_173);});}return _173;}:function(node,_175){return node.style.opacity=_175;};var _176={left:true,top:true};var _177=/margin|padding|width|height|max|min|offset/;var _178=function(node,type,_179){type=type.toLowerCase();if(d.isIE){if(_179=="auto"){if(type=="height"){return node.offsetHeight;}if(type=="width"){return node.offsetWidth;}}if(type=="fontweight"){switch(_179){case 700:return "bold";case 400:default:return "normal";}}}if(!(type in _176)){_176[type]=_177.test(type);}return _176[type]?px(node,_179):_179;};var _17a=d.isIE?"styleFloat":"cssFloat",_17b={"cssFloat":_17a,"styleFloat":_17a,"float":_17a};dojo.style=function(node,_17c,_17d){var n=byId(node),args=arguments.length,op=(_17c=="opacity");_17c=_17b[_17c]||_17c;if(args==3){return op?d._setOpacity(n,_17d):n.style[_17c]=_17d;}if(args==2&&op){return d._getOpacity(n);}var s=gcs(n);if(args==2&&typeof _17c!="string"){for(var x in _17c){d.style(node,x,_17c[x]);}return s;}return (args==1)?s:_178(n,_17c,s[_17c]||n.style[_17c]);};dojo._getPadExtents=function(n,_17e){var s=_17e||gcs(n),l=px(n,s.paddingLeft),t=px(n,s.paddingTop);return {l:l,t:t,w:l+px(n,s.paddingRight),h:t+px(n,s.paddingBottom)};};dojo._getBorderExtents=function(n,_17f){var ne="none",s=_17f||gcs(n),bl=(s.borderLeftStyle!=ne?px(n,s.borderLeftWidth):0),bt=(s.borderTopStyle!=ne?px(n,s.borderTopWidth):0);return {l:bl,t:bt,w:bl+(s.borderRightStyle!=ne?px(n,s.borderRightWidth):0),h:bt+(s.borderBottomStyle!=ne?px(n,s.borderBottomWidth):0)};};dojo._getPadBorderExtents=function(n,_180){var s=_180||gcs(n),p=d._getPadExtents(n,s),b=d._getBorderExtents(n,s);return {l:p.l+b.l,t:p.t+b.t,w:p.w+b.w,h:p.h+b.h};};dojo._getMarginExtents=function(n,_181){var s=_181||gcs(n),l=px(n,s.marginLeft),t=px(n,s.marginTop),r=px(n,s.marginRight),b=px(n,s.marginBottom);if(d.isWebKit&&(s.position!="absolute")){r=l;}return {l:l,t:t,w:l+r,h:t+b};};dojo._getMarginBox=function(node,_182){var s=_182||gcs(node),me=d._getMarginExtents(node,s);var l=node.offsetLeft-me.l,t=node.offsetTop-me.t,p=node.parentNode;if(d.isMoz){var sl=parseFloat(s.left),st=parseFloat(s.top);if(!isNaN(sl)&&!isNaN(st)){l=sl,t=st;}else{if(p&&p.style){var pcs=gcs(p);if(pcs.overflow!="visible"){var be=d._getBorderExtents(p,pcs);l+=be.l,t+=be.t;}}}}else{if(d.isOpera||(d.isIE>7&&!d.isQuirks)){if(p){be=d._getBorderExtents(p);l-=be.l;t-=be.t;}}}return {l:l,t:t,w:node.offsetWidth+me.w,h:node.offsetHeight+me.h};};dojo._getContentBox=function(node,_183){var s=_183||gcs(node),pe=d._getPadExtents(node,s),be=d._getBorderExtents(node,s),w=node.clientWidth,h;if(!w){w=node.offsetWidth,h=node.offsetHeight;}else{h=node.clientHeight,be.w=be.h=0;}if(d.isOpera){pe.l+=be.l;pe.t+=be.t;}return {l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h};};dojo._getBorderBox=function(node,_184){var s=_184||gcs(node),pe=d._getPadExtents(node,s),cb=d._getContentBox(node,s);return {l:cb.l-pe.l,t:cb.t-pe.t,w:cb.w+pe.w,h:cb.h+pe.h};};dojo._setBox=function(node,l,t,w,h,u){u=u||"px";var s=node.style;if(!isNaN(l)){s.left=l+u;}if(!isNaN(t)){s.top=t+u;}if(w>=0){s.width=w+u;}if(h>=0){s.height=h+u;}};dojo._isButtonTag=function(node){return node.tagName=="BUTTON"||node.tagName=="INPUT"&&(node.getAttribute("type")||"").toUpperCase()=="BUTTON";};dojo._usesBorderBox=function(node){var n=node.tagName;return d.boxModel=="border-box"||n=="TABLE"||d._isButtonTag(node);};dojo._setContentSize=function(node,_185,_186,_187){if(d._usesBorderBox(node)){var pb=d._getPadBorderExtents(node,_187);if(_185>=0){_185+=pb.w;}if(_186>=0){_186+=pb.h;}}d._setBox(node,NaN,NaN,_185,_186);};dojo._setMarginBox=function(node,_188,_189,_18a,_18b,_18c){var s=_18c||gcs(node),bb=d._usesBorderBox(node),pb=bb?_18d:d._getPadBorderExtents(node,s);if(d.isWebKit){if(d._isButtonTag(node)){var ns=node.style;if(_18a>=0&&!ns.width){ns.width="4px";}if(_18b>=0&&!ns.height){ns.height="4px";}}}var mb=d._getMarginExtents(node,s);if(_18a>=0){_18a=Math.max(_18a-pb.w-mb.w,0);}if(_18b>=0){_18b=Math.max(_18b-pb.h-mb.h,0);}d._setBox(node,_188,_189,_18a,_18b);};var _18d={l:0,t:0,w:0,h:0};dojo.marginBox=function(node,box){var n=byId(node),s=gcs(n),b=box;return !b?d._getMarginBox(n,s):d._setMarginBox(n,b.l,b.t,b.w,b.h,s);};dojo.contentBox=function(node,box){var n=byId(node),s=gcs(n),b=box;return !b?d._getContentBox(n,s):d._setContentSize(n,b.w,b.h,s);};var _18e=function(node,prop){if(!(node=(node||0).parentNode)){return 0;}var val,_18f=0,_190=d.body();while(node&&node.style){if(gcs(node).position=="fixed"){return 0;}val=node[prop];if(val){_18f+=val-0;if(node==_190){break;}}node=node.parentNode;}return _18f;};dojo._docScroll=function(){var n=d.global;return "pageXOffset" in n?{x:n.pageXOffset,y:n.pageYOffset}:(n=d.doc.documentElement,n.clientHeight?{x:d._fixIeBiDiScrollLeft(n.scrollLeft),y:n.scrollTop}:(n=d.body(),{x:n.scrollLeft||0,y:n.scrollTop||0}));};dojo._isBodyLtr=function(){return "_bodyLtr" in d?d._bodyLtr:d._bodyLtr=(d.body().dir||d.doc.documentElement.dir||"ltr").toLowerCase()=="ltr";};dojo._getIeDocumentElementOffset=function(){var de=d.doc.documentElement;if(d.isIE<8){var r=de.getBoundingClientRect();var l=r.left,t=r.top;if(d.isIE<7){l+=de.clientLeft;t+=de.clientTop;}return {x:l<0?0:l,y:t<0?0:t};}else{return {x:0,y:0};}};dojo._fixIeBiDiScrollLeft=function(_191){var dd=d.doc;if(d.isIE<8&&!d._isBodyLtr()){var de=d.isQuirks?dd.body:dd.documentElement;return _191+de.clientWidth-de.scrollWidth;}return _191;};dojo._abs=dojo.position=function(node,_192){var db=d.body(),dh=db.parentNode,ret;node=byId(node);if(node["getBoundingClientRect"]){ret=node.getBoundingClientRect();ret={x:ret.left,y:ret.top,w:ret.right-ret.left,h:ret.bottom-ret.top};if(d.isIE){var _193=d._getIeDocumentElementOffset();ret.x-=_193.x+(d.isQuirks?db.clientLeft+db.offsetLeft:0);ret.y-=_193.y+(d.isQuirks?db.clientTop+db.offsetTop:0);}else{if(d.isFF==3){var cs=gcs(dh);ret.x-=px(dh,cs.marginLeft)+px(dh,cs.borderLeftWidth);ret.y-=px(dh,cs.marginTop)+px(dh,cs.borderTopWidth);}}}else{ret={x:0,y:0,w:node.offsetWidth,h:node.offsetHeight};if(node["offsetParent"]){ret.x-=_18e(node,"scrollLeft");ret.y-=_18e(node,"scrollTop");var _194=node;do{var n=_194.offsetLeft,t=_194.offsetTop;ret.x+=isNaN(n)?0:n;ret.y+=isNaN(t)?0:t;cs=gcs(_194);if(_194!=node){if(d.isMoz){ret.x+=2*px(_194,cs.borderLeftWidth);ret.y+=2*px(_194,cs.borderTopWidth);}else{ret.x+=px(_194,cs.borderLeftWidth);ret.y+=px(_194,cs.borderTopWidth);}}if(d.isMoz&&cs.position=="static"){var _195=_194.parentNode;while(_195!=_194.offsetParent){var pcs=gcs(_195);if(pcs.position=="static"){ret.x+=px(_194,pcs.borderLeftWidth);ret.y+=px(_194,pcs.borderTopWidth);}_195=_195.parentNode;}}_194=_194.offsetParent;}while((_194!=dh)&&_194);}else{if(node.x&&node.y){ret.x+=isNaN(node.x)?0:node.x;ret.y+=isNaN(node.y)?0:node.y;}}}if(_192){var _196=d._docScroll();ret.x+=_196.x;ret.y+=_196.y;}return ret;};dojo.coords=function(node,_197){var n=byId(node),s=gcs(n),mb=d._getMarginBox(n,s);var abs=d.position(n,_197);mb.x=abs.x;mb.y=abs.y;return mb;};var _198={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"},_199={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"},_19a={innerHTML:1,className:1,htmlFor:d.isIE,value:1};var _19b=function(name){return _199[name.toLowerCase()]||name;};var _19c=function(node,name){var attr=node.getAttributeNode&&node.getAttributeNode(name);return attr&&attr.specified;};dojo.hasAttr=function(node,name){var lc=name.toLowerCase();return _19a[_198[lc]||name]||_19c(byId(node),_199[lc]||name);};var _19d={},_19e=0,_19f=dojo._scopeName+"attrid",_1a0={col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1};dojo.attr=function(node,name,_1a1){node=byId(node);var args=arguments.length,prop;if(args==2&&typeof name!="string"){for(var x in name){d.attr(node,x,name[x]);}return node;}var lc=name.toLowerCase(),_1a2=_198[lc]||name,_1a3=_19a[_1a2],_1a4=_199[lc]||name;if(args==3){do{if(_1a2=="style"&&typeof _1a1!="string"){d.style(node,_1a1);break;}if(_1a2=="innerHTML"){if(d.isIE&&node.tagName.toLowerCase() in _1a0){d.empty(node);node.appendChild(d._toDom(_1a1,node.ownerDocument));}else{node[_1a2]=_1a1;}break;}if(d.isFunction(_1a1)){var _1a5=d.attr(node,_19f);if(!_1a5){_1a5=_19e++;d.attr(node,_19f,_1a5);}if(!_19d[_1a5]){_19d[_1a5]={};}var h=_19d[_1a5][_1a2];if(h){d.disconnect(h);}else{try{delete node[_1a2];}catch(e){}}_19d[_1a5][_1a2]=d.connect(node,_1a2,_1a1);break;}if(_1a3||typeof _1a1=="boolean"){node[_1a2]=_1a1;break;}node.setAttribute(_1a4,_1a1);}while(false);return node;}_1a1=node[_1a2];if(_1a3&&typeof _1a1!="undefined"){return _1a1;}if(_1a2!="href"&&(typeof _1a1=="boolean"||d.isFunction(_1a1))){return _1a1;}return _19c(node,_1a4)?node.getAttribute(_1a4):null;};dojo.removeAttr=function(node,name){byId(node).removeAttribute(_19b(name));};dojo.getNodeProp=function(node,name){node=byId(node);var lc=name.toLowerCase(),_1a6=_198[lc]||name;if((_1a6 in node)&&_1a6!="href"){return node[_1a6];}var _1a7=_199[lc]||name;return _19c(node,_1a7)?node.getAttribute(_1a7):null;};dojo.create=function(tag,_1a8,_1a9,pos){var doc=d.doc;if(_1a9){_1a9=byId(_1a9);doc=_1a9.ownerDocument;}if(typeof tag=="string"){tag=doc.createElement(tag);}if(_1a8){d.attr(tag,_1a8);}if(_1a9){d.place(tag,_1a9,pos);}return tag;};d.empty=d.isIE?function(node){node=byId(node);for(var c;c=node.lastChild;){d.destroy(c);}}:function(node){byId(node).innerHTML="";};var _1aa={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},_1ab=/<\s*([\w\:]+)/,_1ac={},_1ad=0,_1ae="__"+d._scopeName+"ToDomId";for(var _1af in _1aa){var tw=_1aa[_1af];tw.pre=_1af=="option"?"<select multiple=\"multiple\">":"<"+tw.join("><")+">";tw.post="</"+tw.reverse().join("></")+">";}d._toDom=function(frag,doc){doc=doc||d.doc;var _1b0=doc[_1ae];if(!_1b0){doc[_1ae]=_1b0=++_1ad+"";_1ac[_1b0]=doc.createElement("div");}frag+="";var _1b1=frag.match(_1ab),tag=_1b1?_1b1[1].toLowerCase():"",_1b2=_1ac[_1b0],wrap,i,fc,df;if(_1b1&&_1aa[tag]){wrap=_1aa[tag];_1b2.innerHTML=wrap.pre+frag+wrap.post;for(i=wrap.length;i;--i){_1b2=_1b2.firstChild;}}else{_1b2.innerHTML=frag;}if(_1b2.childNodes.length==1){return _1b2.removeChild(_1b2.firstChild);}df=doc.createDocumentFragment();while(fc=_1b2.firstChild){df.appendChild(fc);}return df;};var _1b3="className";dojo.hasClass=function(node,_1b4){return ((" "+byId(node)[_1b3]+" ").indexOf(" "+_1b4+" ")>=0);};var _1b5=/\s+/,a1=[""],_1b6=function(s){if(typeof s=="string"||s instanceof String){if(s.indexOf(" ")<0){a1[0]=s;return a1;}else{return s.split(_1b5);}}return s||"";};dojo.addClass=function(node,_1b7){node=byId(node);_1b7=_1b6(_1b7);var cls=node[_1b3],_1b8;cls=cls?" "+cls+" ":" ";_1b8=cls.length;for(var i=0,len=_1b7.length,c;i<len;++i){c=_1b7[i];if(c&&cls.indexOf(" "+c+" ")<0){cls+=c+" ";}}if(_1b8<cls.length){node[_1b3]=cls.substr(1,cls.length-2);}};dojo.removeClass=function(node,_1b9){node=byId(node);var cls;if(_1b9!==undefined){_1b9=_1b6(_1b9);cls=" "+node[_1b3]+" ";for(var i=0,len=_1b9.length;i<len;++i){cls=cls.replace(" "+_1b9[i]+" "," ");}cls=d.trim(cls);}else{cls="";}if(node[_1b3]!=cls){node[_1b3]=cls;}};dojo.toggleClass=function(node,_1ba,_1bb){if(_1bb===undefined){_1bb=!d.hasClass(node,_1ba);}d[_1bb?"addClass":"removeClass"](node,_1ba);};})();}if(!dojo._hasResource["dojo._base.NodeList"]){dojo._hasResource["dojo._base.NodeList"]=true;dojo.provide("dojo._base.NodeList");(function(){var d=dojo;var ap=Array.prototype,aps=ap.slice,apc=ap.concat;var tnl=function(a,_1bc,_1bd){if(!a.sort){a=aps.call(a,0);}var ctor=_1bd||this._NodeListCtor||d._NodeListCtor;a.constructor=ctor;dojo._mixin(a,ctor.prototype);a._NodeListCtor=ctor;return _1bc?a._stash(_1bc):a;};var _1be=function(f,a,o){a=[0].concat(aps.call(a,0));o=o||d.global;return function(node){a[0]=node;return f.apply(o,a);};};var _1bf=function(f,o){return function(){this.forEach(_1be(f,arguments,o));return this;};};var _1c0=function(f,o){return function(){return this.map(_1be(f,arguments,o));};};var _1c1=function(f,o){return function(){return this.filter(_1be(f,arguments,o));};};var _1c2=function(f,g,o){return function(){var a=arguments,body=_1be(f,a,o);if(g.call(o||d.global,a)){return this.map(body);}this.forEach(body);return this;};};var _1c3=function(a){return a.length==1&&(typeof a[0]=="string");};var _1c4=function(node){var p=node.parentNode;if(p){p.removeChild(node);}};dojo.NodeList=function(){return tnl(Array.apply(null,arguments));};d._NodeListCtor=d.NodeList;var nl=d.NodeList,nlp=nl.prototype;nl._wrap=nlp._wrap=tnl;nl._adaptAsMap=_1c0;nl._adaptAsForEach=_1bf;nl._adaptAsFilter=_1c1;nl._adaptWithCondition=_1c2;d.forEach(["slice","splice"],function(name){var f=ap[name];nlp[name]=function(){return this._wrap(f.apply(this,arguments),name=="slice"?this:null);};});d.forEach(["indexOf","lastIndexOf","every","some"],function(name){var f=d[name];nlp[name]=function(){return f.apply(d,[this].concat(aps.call(arguments,0)));};});d.forEach(["attr","style"],function(name){nlp[name]=_1c2(d[name],_1c3);});d.forEach(["connect","addClass","removeClass","toggleClass","empty","removeAttr"],function(name){nlp[name]=_1bf(d[name]);});dojo.extend(dojo.NodeList,{_normalize:function(_1c5,_1c6){var _1c7=_1c5.parse===true?true:false;if(typeof _1c5.template=="string"){var _1c8=_1c5.templateFunc||(dojo.string&&dojo.string.substitute);_1c5=_1c8?_1c8(_1c5.template,_1c5):_1c5;}var type=(typeof _1c5);if(type=="string"||type=="number"){_1c5=dojo._toDom(_1c5,(_1c6&&_1c6.ownerDocument));if(_1c5.nodeType==11){_1c5=dojo._toArray(_1c5.childNodes);}else{_1c5=[_1c5];}}else{if(!dojo.isArrayLike(_1c5)){_1c5=[_1c5];}else{if(!dojo.isArray(_1c5)){_1c5=dojo._toArray(_1c5);}}}if(_1c7){_1c5._runParse=true;}return _1c5;},_cloneNode:function(node){return node.cloneNode(true);},_place:function(ary,_1c9,_1ca,_1cb){if(_1c9.nodeType!=1&&_1ca=="only"){return;}var _1cc=_1c9,_1cd;var _1ce=ary.length;for(var i=_1ce-1;i>=0;i--){var node=(_1cb?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&dojo.parser&&dojo.parser.parse){if(!_1cd){_1cd=_1cc.ownerDocument.createElement("div");}_1cd.appendChild(node);dojo.parser.parse(_1cd);node=_1cd.firstChild;while(_1cd.firstChild){_1cd.removeChild(_1cd.firstChild);}}if(i==_1ce-1){dojo.place(node,_1cc,_1ca);}else{_1cc.parentNode.insertBefore(node,_1cc);}_1cc=node;}},_stash:function(_1cf){this._parent=_1cf;return this;},end:function(){if(this._parent){return this._parent;}else{return new this._NodeListCtor();}},concat:function(item){var t=d.isArray(this)?this:aps.call(this,0),m=d.map(arguments,function(a){return a&&!d.isArray(a)&&(typeof NodeList!="undefined"&&a.constructor===NodeList||a.constructor===this._NodeListCtor)?aps.call(a,0):a;});return this._wrap(apc.apply(t,m),this);},map:function(func,obj){return this._wrap(d.map(this,func,obj),this);},forEach:function(_1d0,_1d1){d.forEach(this,_1d0,_1d1);return this;},coords:_1c0(d.coords),position:_1c0(d.position),place:function(_1d2,_1d3){var item=d.query(_1d2)[0];return this.forEach(function(node){d.place(node,item,_1d3);});},orphan:function(_1d4){return (_1d4?d._filterQueryResult(this,_1d4):this).forEach(_1c4);},adopt:function(_1d5,_1d6){return d.query(_1d5).place(this[0],_1d6)._stash(this);},query:function(_1d7){if(!_1d7){return this;}var ret=this.map(function(node){return d.query(_1d7,node).filter(function(_1d8){return _1d8!==undefined;});});return this._wrap(apc.apply([],ret),this);},filter:function(_1d9){var a=arguments,_1da=this,_1db=0;if(typeof _1d9=="string"){_1da=d._filterQueryResult(this,a[0]);if(a.length==1){return _1da._stash(this);}_1db=1;}return this._wrap(d.filter(_1da,a[_1db],a[_1db+1]),this);},addContent:function(_1dc,_1dd){_1dc=this._normalize(_1dc,this[0]);for(var i=0,node;node=this[i];i++){this._place(_1dc,node,_1dd,i>0);}return this;},instantiate:function(_1de,_1df){var c=d.isFunction(_1de)?_1de:d.getObject(_1de);_1df=_1df||{};return this.forEach(function(node){new c(_1df,node);});},at:function(){var t=new this._NodeListCtor();d.forEach(arguments,function(i){if(i<0){i=this.length+i;}if(this[i]){t.push(this[i]);}},this);return t._stash(this);}});nl.events=["blur","focus","change","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit"];d.forEach(nl.events,function(evt){var _1e0="on"+evt;nlp[_1e0]=function(a,b){return this.connect(_1e0,a,b);};});})();}if(!dojo._hasResource["dojo._base.query"]){dojo._hasResource["dojo._base.query"]=true;if(typeof dojo!="undefined"){dojo.provide("dojo._base.query");}(function(d){var trim=d.trim;var each=d.forEach;var qlc=d._NodeListCtor=d.NodeList;var _1e1=function(){return d.doc;};var _1e2=((d.isWebKit||d.isMozilla)&&((_1e1().compatMode)=="BackCompat"));var _1e3=!!_1e1().firstChild["children"]?"children":"childNodes";var _1e4=">~+";var _1e5=false;var _1e6=function(){return true;};var _1e7=function(_1e8){if(_1e4.indexOf(_1e8.slice(-1))>=0){_1e8+=" * ";}else{_1e8+=" ";}var ts=function(s,e){return trim(_1e8.slice(s,e));};var _1e9=[];var _1ea=-1,_1eb=-1,_1ec=-1,_1ed=-1,_1ee=-1,inId=-1,_1ef=-1,lc="",cc="",_1f0;var x=0,ql=_1e8.length,_1f1=null,_1f2=null;var _1f3=function(){if(_1ef>=0){var tv=(_1ef==x)?null:ts(_1ef,x);_1f1[(_1e4.indexOf(tv)<0)?"tag":"oper"]=tv;_1ef=-1;}};var _1f4=function(){if(inId>=0){_1f1.id=ts(inId,x).replace(/\\/g,"");inId=-1;}};var _1f5=function(){if(_1ee>=0){_1f1.classes.push(ts(_1ee+1,x).replace(/\\/g,""));_1ee=-1;}};var _1f6=function(){_1f4();_1f3();_1f5();};var _1f7=function(){_1f6();if(_1ed>=0){_1f1.pseudos.push({name:ts(_1ed+1,x)});}_1f1.loops=(_1f1.pseudos.length||_1f1.attrs.length||_1f1.classes.length);_1f1.oquery=_1f1.query=ts(_1f0,x);_1f1.otag=_1f1.tag=(_1f1["oper"])?null:(_1f1.tag||"*");if(_1f1.tag){_1f1.tag=_1f1.tag.toUpperCase();}if(_1e9.length&&(_1e9[_1e9.length-1].oper)){_1f1.infixOper=_1e9.pop();_1f1.query=_1f1.infixOper.query+" "+_1f1.query;}_1e9.push(_1f1);_1f1=null;};for(;lc=cc,cc=_1e8.charAt(x),x<ql;x++){if(lc=="\\"){continue;}if(!_1f1){_1f0=x;_1f1={query:null,pseudos:[],attrs:[],classes:[],tag:null,oper:null,id:null,getTag:function(){return (_1e5)?this.otag:this.tag;}};_1ef=x;}if(_1ea>=0){if(cc=="]"){if(!_1f2.attr){_1f2.attr=ts(_1ea+1,x);}else{_1f2.matchFor=ts((_1ec||_1ea+1),x);}var cmf=_1f2.matchFor;if(cmf){if((cmf.charAt(0)=="\"")||(cmf.charAt(0)=="'")){_1f2.matchFor=cmf.slice(1,-1);}}_1f1.attrs.push(_1f2);_1f2=null;_1ea=_1ec=-1;}else{if(cc=="="){var _1f8=("|~^$*".indexOf(lc)>=0)?lc:"";_1f2.type=_1f8+cc;_1f2.attr=ts(_1ea+1,x-_1f8.length);_1ec=x+1;}}}else{if(_1eb>=0){if(cc==")"){if(_1ed>=0){_1f2.value=ts(_1eb+1,x);}_1ed=_1eb=-1;}}else{if(cc=="#"){_1f6();inId=x+1;}else{if(cc=="."){_1f6();_1ee=x;}else{if(cc==":"){_1f6();_1ed=x;}else{if(cc=="["){_1f6();_1ea=x;_1f2={};}else{if(cc=="("){if(_1ed>=0){_1f2={name:ts(_1ed+1,x),value:null};_1f1.pseudos.push(_1f2);}_1eb=x;}else{if((cc==" ")&&(lc!=cc)){_1f7();}}}}}}}}}return _1e9;};var _1f9=function(_1fa,_1fb){if(!_1fa){return _1fb;}if(!_1fb){return _1fa;}return function(){return _1fa.apply(window,arguments)&&_1fb.apply(window,arguments);};};var _1fc=function(i,arr){var r=arr||[];if(i){r.push(i);}return r;};var _1fd=function(n){return (1==n.nodeType);};var _1fe="";var _1ff=function(elem,attr){if(!elem){return _1fe;}if(attr=="class"){return elem.className||_1fe;}if(attr=="for"){return elem.htmlFor||_1fe;}if(attr=="style"){return elem.style.cssText||_1fe;}return (_1e5?elem.getAttribute(attr):elem.getAttribute(attr,2))||_1fe;};var _200={"*=":function(attr,_201){return function(elem){return (_1ff(elem,attr).indexOf(_201)>=0);};},"^=":function(attr,_202){return function(elem){return (_1ff(elem,attr).indexOf(_202)==0);};},"$=":function(attr,_203){var tval=" "+_203;return function(elem){var ea=" "+_1ff(elem,attr);return (ea.lastIndexOf(_203)==(ea.length-_203.length));};},"~=":function(attr,_204){var tval=" "+_204+" ";return function(elem){var ea=" "+_1ff(elem,attr)+" ";return (ea.indexOf(tval)>=0);};},"|=":function(attr,_205){var _206=" "+_205+"-";return function(elem){var ea=" "+_1ff(elem,attr);return ((ea==_205)||(ea.indexOf(_206)==0));};},"=":function(attr,_207){return function(elem){return (_1ff(elem,attr)==_207);};}};var _208=(typeof _1e1().firstChild.nextElementSibling=="undefined");var _209=!_208?"nextElementSibling":"nextSibling";var _20a=!_208?"previousElementSibling":"previousSibling";var _20b=(_208?_1fd:_1e6);var _20c=function(node){while(node=node[_20a]){if(_20b(node)){return false;}}return true;};var _20d=function(node){while(node=node[_209]){if(_20b(node)){return false;}}return true;};var _20e=function(node){var root=node.parentNode;var i=0,tret=root[_1e3],ci=(node["_i"]||-1),cl=(root["_l"]||-1);if(!tret){return -1;}var l=tret.length;if(cl==l&&ci>=0&&cl>=0){return ci;}root["_l"]=l;ci=-1;for(var te=root["firstElementChild"]||root["firstChild"];te;te=te[_209]){if(_20b(te)){te["_i"]=++i;if(node===te){ci=i;}}}return ci;};var _20f=function(elem){return !((_20e(elem))%2);};var _210=function(elem){return ((_20e(elem))%2);};var _211={"checked":function(name,_212){return function(elem){return !!("checked" in elem?elem.checked:elem.selected);};},"first-child":function(){return _20c;},"last-child":function(){return _20d;},"only-child":function(name,_213){return function(node){if(!_20c(node)){return false;}if(!_20d(node)){return false;}return true;};},"empty":function(name,_214){return function(elem){var cn=elem.childNodes;var cnl=elem.childNodes.length;for(var x=cnl-1;x>=0;x--){var nt=cn[x].nodeType;if((nt===1)||(nt==3)){return false;}}return true;};},"contains":function(name,_215){var cz=_215.charAt(0);if(cz=="\""||cz=="'"){_215=_215.slice(1,-1);}return function(elem){return (elem.innerHTML.indexOf(_215)>=0);};},"not":function(name,_216){var p=_1e7(_216)[0];var _217={el:1};if(p.tag!="*"){_217.tag=1;}if(!p.classes.length){_217.classes=1;}var ntf=_218(p,_217);return function(elem){return (!ntf(elem));};},"nth-child":function(name,_219){var pi=parseInt;if(_219=="odd"){return _210;}else{if(_219=="even"){return _20f;}}if(_219.indexOf("n")!=-1){var _21a=_219.split("n",2);var pred=_21a[0]?((_21a[0]=="-")?-1:pi(_21a[0])):1;var idx=_21a[1]?pi(_21a[1]):0;var lb=0,ub=-1;if(pred>0){if(idx<0){idx=(idx%pred)&&(pred+(idx%pred));}else{if(idx>0){if(idx>=pred){lb=idx-idx%pred;}idx=idx%pred;}}}else{if(pred<0){pred*=-1;if(idx>0){ub=idx;idx=idx%pred;}}}if(pred>0){return function(elem){var i=_20e(elem);return (i>=lb)&&(ub<0||i<=ub)&&((i%pred)==idx);};}else{_219=idx;}}var _21b=pi(_219);return function(elem){return (_20e(elem)==_21b);};}};var _21c=(d.isIE)?function(cond){var clc=cond.toLowerCase();if(clc=="class"){cond="className";}return function(elem){return (_1e5?elem.getAttribute(cond):elem[cond]||elem[clc]);};}:function(cond){return function(elem){return (elem&&elem.getAttribute&&elem.hasAttribute(cond));};};var _218=function(_21d,_21e){if(!_21d){return _1e6;}_21e=_21e||{};var ff=null;if(!("el" in _21e)){ff=_1f9(ff,_1fd);}if(!("tag" in _21e)){if(_21d.tag!="*"){ff=_1f9(ff,function(elem){return (elem&&(elem.tagName==_21d.getTag()));});}}if(!("classes" in _21e)){each(_21d.classes,function(_21f,idx,arr){var re=new RegExp("(?:^|\\s)"+_21f+"(?:\\s|$)");ff=_1f9(ff,function(elem){return re.test(elem.className);});ff.count=idx;});}if(!("pseudos" in _21e)){each(_21d.pseudos,function(_220){var pn=_220.name;if(_211[pn]){ff=_1f9(ff,_211[pn](pn,_220.value));}});}if(!("attrs" in _21e)){each(_21d.attrs,function(attr){var _221;var a=attr.attr;if(attr.type&&_200[attr.type]){_221=_200[attr.type](a,attr.matchFor);}else{if(a.length){_221=_21c(a);}}if(_221){ff=_1f9(ff,_221);}});}if(!("id" in _21e)){if(_21d.id){ff=_1f9(ff,function(elem){return (!!elem&&(elem.id==_21d.id));});}}if(!ff){if(!("default" in _21e)){ff=_1e6;}}return ff;};var _222=function(_223){return function(node,ret,bag){while(node=node[_209]){if(_208&&(!_1fd(node))){continue;}if((!bag||_224(node,bag))&&_223(node)){ret.push(node);}break;}return ret;};};var _225=function(_226){return function(root,ret,bag){var te=root[_209];while(te){if(_20b(te)){if(bag&&!_224(te,bag)){break;}if(_226(te)){ret.push(te);}}te=te[_209];}return ret;};};var _227=function(_228){_228=_228||_1e6;return function(root,ret,bag){var te,x=0,tret=root[_1e3];while(te=tret[x++]){if(_20b(te)&&(!bag||_224(te,bag))&&(_228(te,x))){ret.push(te);}}return ret;};};var _229=function(node,root){var pn=node.parentNode;while(pn){if(pn==root){break;}pn=pn.parentNode;}return !!pn;};var _22a={};var _22b=function(_22c){var _22d=_22a[_22c.query];if(_22d){return _22d;}var io=_22c.infixOper;var oper=(io?io.oper:"");var _22e=_218(_22c,{el:1});var qt=_22c.tag;var _22f=("*"==qt);var ecs=_1e1()["getElementsByClassName"];if(!oper){if(_22c.id){_22e=(!_22c.loops&&_22f)?_1e6:_218(_22c,{el:1,id:1});_22d=function(root,arr){var te=d.byId(_22c.id,(root.ownerDocument||root));if(!te||!_22e(te)){return;}if(9==root.nodeType){return _1fc(te,arr);}else{if(_229(te,root)){return _1fc(te,arr);}}};}else{if(ecs&&/\{\s*\[native code\]\s*\}/.test(String(ecs))&&_22c.classes.length&&!_1e2){_22e=_218(_22c,{el:1,classes:1,id:1});var _230=_22c.classes.join(" ");_22d=function(root,arr,bag){var ret=_1fc(0,arr),te,x=0;var tret=root.getElementsByClassName(_230);while((te=tret[x++])){if(_22e(te,root)&&_224(te,bag)){ret.push(te);}}return ret;};}else{if(!_22f&&!_22c.loops){_22d=function(root,arr,bag){var ret=_1fc(0,arr),te,x=0;var tret=root.getElementsByTagName(_22c.getTag());while((te=tret[x++])){if(_224(te,bag)){ret.push(te);}}return ret;};}else{_22e=_218(_22c,{el:1,tag:1,id:1});_22d=function(root,arr,bag){var ret=_1fc(0,arr),te,x=0;var tret=root.getElementsByTagName(_22c.getTag());while((te=tret[x++])){if(_22e(te,root)&&_224(te,bag)){ret.push(te);}}return ret;};}}}}else{var _231={el:1};if(_22f){_231.tag=1;}_22e=_218(_22c,_231);if("+"==oper){_22d=_222(_22e);}else{if("~"==oper){_22d=_225(_22e);}else{if(">"==oper){_22d=_227(_22e);}}}}return _22a[_22c.query]=_22d;};var _232=function(root,_233){var _234=_1fc(root),qp,x,te,qpl=_233.length,bag,ret;for(var i=0;i<qpl;i++){ret=[];qp=_233[i];x=_234.length-1;if(x>0){bag={};ret.nozip=true;}var gef=_22b(qp);for(var j=0;(te=_234[j]);j++){gef(te,ret,bag);}if(!ret.length){break;}_234=ret;}return ret;};var _235={},_236={};var _237=function(_238){var _239=_1e7(trim(_238));if(_239.length==1){var tef=_22b(_239[0]);return function(root){var r=tef(root,new qlc());if(r){r.nozip=true;}return r;};}return function(root){return _232(root,_239);};};var nua=navigator.userAgent;var wk="WebKit/";var _23a=(d.isWebKit&&(nua.indexOf(wk)>0)&&(parseFloat(nua.split(wk)[1])>528));var _23b=d.isIE?"commentStrip":"nozip";var qsa="querySelectorAll";var _23c=(!!_1e1()[qsa]&&(!d.isSafari||(d.isSafari>3.1)||_23a));var _23d=/n\+\d|([^ ])?([>~+])([^ =])?/g;var _23e=function(_23f,pre,ch,post){return ch?(pre?pre+" ":"")+ch+(post?" "+post:""):_23f;};var _240=function(_241,_242){_241=_241.replace(_23d,_23e);if(_23c){var _243=_236[_241];if(_243&&!_242){return _243;}}var _244=_235[_241];if(_244){return _244;}var qcz=_241.charAt(0);var _245=(-1==_241.indexOf(" "));if((_241.indexOf("#")>=0)&&(_245)){_242=true;}var _246=(_23c&&(!_242)&&(_1e4.indexOf(qcz)==-1)&&(!d.isIE||(_241.indexOf(":")==-1))&&(!(_1e2&&(_241.indexOf(".")>=0)))&&(_241.indexOf(":contains")==-1)&&(_241.indexOf(":checked")==-1)&&(_241.indexOf("|=")==-1));if(_246){var tq=(_1e4.indexOf(_241.charAt(_241.length-1))>=0)?(_241+" *"):_241;return _236[_241]=function(root){try{if(!((9==root.nodeType)||_245)){throw "";}var r=root[qsa](tq);r[_23b]=true;return r;}catch(e){return _240(_241,true)(root);}};}else{var _247=_241.split(/\s*,\s*/);return _235[_241]=((_247.length<2)?_237(_241):function(root){var _248=0,ret=[],tp;while((tp=_247[_248++])){ret=ret.concat(_237(tp)(root));}return ret;});}};var _249=0;var _24a=d.isIE?function(node){if(_1e5){return (node.getAttribute("_uid")||node.setAttribute("_uid",++_249)||_249);}else{return node.uniqueID;}}:function(node){return (node._uid||(node._uid=++_249));};var _224=function(node,bag){if(!bag){return 1;}var id=_24a(node);if(!bag[id]){return bag[id]=1;}return 0;};var _24b="_zipIdx";var _24c=function(arr){if(arr&&arr.nozip){return (qlc._wrap)?qlc._wrap(arr):arr;}var ret=new qlc();if(!arr||!arr.length){return ret;}if(arr[0]){ret.push(arr[0]);}if(arr.length<2){return ret;}_249++;if(d.isIE&&_1e5){var _24d=_249+"";arr[0].setAttribute(_24b,_24d);for(var x=1,te;te=arr[x];x++){if(arr[x].getAttribute(_24b)!=_24d){ret.push(te);}te.setAttribute(_24b,_24d);}}else{if(d.isIE&&arr.commentStrip){try{for(var x=1,te;te=arr[x];x++){if(_1fd(te)){ret.push(te);}}}catch(e){}}else{if(arr[0]){arr[0][_24b]=_249;}for(var x=1,te;te=arr[x];x++){if(arr[x][_24b]!=_249){ret.push(te);}te[_24b]=_249;}}}return ret;};d.query=function(_24e,root){qlc=d._NodeListCtor;if(!_24e){return new qlc();}if(_24e.constructor==qlc){return _24e;}if(typeof _24e!="string"){return new qlc(_24e);}if(typeof root=="string"){root=d.byId(root);if(!root){return new qlc();}}root=root||_1e1();var od=root.ownerDocument||root.documentElement;_1e5=(root.contentType&&root.contentType=="application/xml")||(d.isOpera&&(root.doctype||od.toString()=="[object XMLDocument]"))||(!!od)&&(d.isIE?od.xml:(root.xmlVersion||od.xmlVersion));var r=_240(_24e)(root);if(r&&r.nozip&&!qlc._wrap){return r;}return _24c(r);};d.query.pseudos=_211;d._filterQueryResult=function(_24f,_250){var _251=new d._NodeListCtor();var _252=_218(_1e7(_250)[0]);for(var x=0,te;te=_24f[x];x++){if(_252(te)){_251.push(te);}}return _251;};})(this["queryPortability"]||this["acme"]||dojo);}if(!dojo._hasResource["dojo._base.xhr"]){dojo._hasResource["dojo._base.xhr"]=true;dojo.provide("dojo._base.xhr");(function(){var _253=dojo,cfg=_253.config;function _254(obj,name,_255){if(_255===null){return;}var val=obj[name];if(typeof val=="string"){obj[name]=[val,_255];}else{if(_253.isArray(val)){val.push(_255);}else{obj[name]=_255;}}};dojo.fieldToObject=function(_256){var ret=null;var item=_253.byId(_256);if(item){var _257=item.name;var type=(item.type||"").toLowerCase();if(_257&&type&&!item.disabled){if(type=="radio"||type=="checkbox"){if(item.checked){ret=item.value;}}else{if(item.multiple){ret=[];_253.query("option",item).forEach(function(opt){if(opt.selected){ret.push(opt.value);}});}else{ret=item.value;}}}}return ret;};dojo.formToObject=function(_258){var ret={};var _259="file|submit|image|reset|button|";_253.forEach(dojo.byId(_258).elements,function(item){var _25a=item.name;var type=(item.type||"").toLowerCase();if(_25a&&type&&_259.indexOf(type)==-1&&!item.disabled){_254(ret,_25a,_253.fieldToObject(item));if(type=="image"){ret[_25a+".x"]=ret[_25a+".y"]=ret[_25a].x=ret[_25a].y=0;}}});return ret;};dojo.objectToQuery=function(map){var enc=encodeURIComponent;var _25b=[];var _25c={};for(var name in map){var _25d=map[name];if(_25d!=_25c[name]){var _25e=enc(name)+"=";if(_253.isArray(_25d)){for(var i=0;i<_25d.length;i++){_25b.push(_25e+enc(_25d[i]));}}else{_25b.push(_25e+enc(_25d));}}}return _25b.join("&");};dojo.formToQuery=function(_25f){return _253.objectToQuery(_253.formToObject(_25f));};dojo.formToJson=function(_260,_261){return _253.toJson(_253.formToObject(_260),_261);};dojo.queryToObject=function(str){var ret={};var qp=str.split("&");var dec=decodeURIComponent;_253.forEach(qp,function(item){if(item.length){var _262=item.split("=");var name=dec(_262.shift());var val=dec(_262.join("="));if(typeof ret[name]=="string"){ret[name]=[ret[name]];}if(_253.isArray(ret[name])){ret[name].push(val);}else{ret[name]=val;}}});return ret;};dojo._blockAsync=false;var _263=_253._contentHandlers=dojo.contentHandlers={text:function(xhr){return xhr.responseText;},json:function(xhr){return _253.fromJson(xhr.responseText||null);},"json-comment-filtered":function(xhr){if(!dojo.config.useCommentedJson){console.warn("Consider using the standard mimetype:application/json."+" json-commenting can introduce security issues. To"+" decrease the chances of hijacking, use the standard the 'json' handler and"+" prefix your json with: {}&&\n"+"Use djConfig.useCommentedJson=true to turn off this message.");}var _264=xhr.responseText;var _265=_264.indexOf("/*");var _266=_264.lastIndexOf("*/");if(_265==-1||_266==-1){throw new Error("JSON was not comment filtered");}return _253.fromJson(_264.substring(_265+2,_266));},javascript:function(xhr){return _253.eval(xhr.responseText);},xml:function(xhr){var _267=xhr.responseXML;if(_253.isIE&&(!_267||!_267.documentElement)){var ms=function(n){return "MSXML"+n+".DOMDocument";};var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];_253.some(dp,function(p){try{var dom=new ActiveXObject(p);dom.async=false;dom.loadXML(xhr.responseText);_267=dom;}catch(e){return false;}return true;});}return _267;},"json-comment-optional":function(xhr){if(xhr.responseText&&/^[^{\[]*\/\*/.test(xhr.responseText)){return _263["json-comment-filtered"](xhr);}else{return _263["json"](xhr);}}};dojo._ioSetArgs=function(args,_268,_269,_26a){var _26b={args:args,url:args.url};var _26c=null;if(args.form){var form=_253.byId(args.form);var _26d=form.getAttributeNode("action");_26b.url=_26b.url||(_26d?_26d.value:null);_26c=_253.formToObject(form);}var _26e=[{}];if(_26c){_26e.push(_26c);}if(args.content){_26e.push(args.content);}if(args.preventCache){_26e.push({"dojo.preventCache":new Date().valueOf()});}_26b.query=_253.objectToQuery(_253.mixin.apply(null,_26e));_26b.handleAs=args.handleAs||"text";var d=new _253.Deferred(_268);d.addCallbacks(_269,function(_26f){return _26a(_26f,d);});var ld=args.load;if(ld&&_253.isFunction(ld)){d.addCallback(function(_270){return ld.call(args,_270,_26b);});}var err=args.error;if(err&&_253.isFunction(err)){d.addErrback(function(_271){return err.call(args,_271,_26b);});}var _272=args.handle;if(_272&&_253.isFunction(_272)){d.addBoth(function(_273){return _272.call(args,_273,_26b);});}if(cfg.ioPublish&&_253.publish&&_26b.args.ioPublish!==false){d.addCallbacks(function(res){_253.publish("/dojo/io/load",[d,res]);return res;},function(res){_253.publish("/dojo/io/error",[d,res]);return res;});d.addBoth(function(res){_253.publish("/dojo/io/done",[d,res]);return res;});}d.ioArgs=_26b;return d;};var _274=function(dfd){dfd.canceled=true;var xhr=dfd.ioArgs.xhr;var _275=typeof xhr.abort;if(_275=="function"||_275=="object"||_275=="unknown"){xhr.abort();}var err=dfd.ioArgs.error;if(!err){err=new Error("xhr cancelled");err.dojoType="cancel";}return err;};var _276=function(dfd){var ret=_263[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);return ret===undefined?null:ret;};var _277=function(_278,dfd){if(!dfd.ioArgs.args.failOk){console.error(_278);}return _278;};var _279=null;var _27a=[];var _27b=0;var _27c=function(dfd){if(_27b<=0){_27b=0;if(cfg.ioPublish&&_253.publish&&(!dfd||dfd&&dfd.ioArgs.args.ioPublish!==false)){_253.publish("/dojo/io/stop");}}};var _27d=function(){var now=(new Date()).getTime();if(!_253._blockAsync){for(var i=0,tif;i<_27a.length&&(tif=_27a[i]);i++){var dfd=tif.dfd;var func=function(){if(!dfd||dfd.canceled||!tif.validCheck(dfd)){_27a.splice(i--,1);_27b-=1;}else{if(tif.ioCheck(dfd)){_27a.splice(i--,1);tif.resHandle(dfd);_27b-=1;}else{if(dfd.startTime){if(dfd.startTime+(dfd.ioArgs.args.timeout||0)<now){_27a.splice(i--,1);var err=new Error("timeout exceeded");err.dojoType="timeout";dfd.errback(err);dfd.cancel();_27b-=1;}}}}};if(dojo.config.debugAtAllCosts){func.call(this);}else{try{func.call(this);}catch(e){dfd.errback(e);}}}}_27c(dfd);if(!_27a.length){clearInterval(_279);_279=null;return;}};dojo._ioCancelAll=function(){try{_253.forEach(_27a,function(i){try{i.dfd.cancel();}catch(e){}});}catch(e){}};if(_253.isIE){_253.addOnWindowUnload(_253._ioCancelAll);}_253._ioNotifyStart=function(dfd){if(cfg.ioPublish&&_253.publish&&dfd.ioArgs.args.ioPublish!==false){if(!_27b){_253.publish("/dojo/io/start");}_27b+=1;_253.publish("/dojo/io/send",[dfd]);}};_253._ioWatch=function(dfd,_27e,_27f,_280){var args=dfd.ioArgs.args;if(args.timeout){dfd.startTime=(new Date()).getTime();}_27a.push({dfd:dfd,validCheck:_27e,ioCheck:_27f,resHandle:_280});if(!_279){_279=setInterval(_27d,50);}if(args.sync){_27d();}};var _281="application/x-www-form-urlencoded";var _282=function(dfd){return dfd.ioArgs.xhr.readyState;};var _283=function(dfd){return 4==dfd.ioArgs.xhr.readyState;};var _284=function(dfd){var xhr=dfd.ioArgs.xhr;if(_253._isDocumentOk(xhr)){dfd.callback(dfd);}else{var err=new Error("Unable to load "+dfd.ioArgs.url+" status:"+xhr.status);err.status=xhr.status;err.responseText=xhr.responseText;dfd.errback(err);}};dojo._ioAddQueryToUrl=function(_285){if(_285.query.length){_285.url+=(_285.url.indexOf("?")==-1?"?":"&")+_285.query;_285.query=null;}};dojo.xhr=function(_286,args,_287){var dfd=_253._ioSetArgs(args,_274,_276,_277);var _288=dfd.ioArgs;var xhr=_288.xhr=_253._xhrObj(_288.args);if(!xhr){dfd.cancel();return dfd;}if("postData" in args){_288.query=args.postData;}else{if("putData" in args){_288.query=args.putData;}else{if("rawBody" in args){_288.query=args.rawBody;}else{if((arguments.length>2&&!_287)||"POST|PUT".indexOf(_286.toUpperCase())==-1){_253._ioAddQueryToUrl(_288);}}}}xhr.open(_286,_288.url,args.sync!==true,args.user||undefined,args.password||undefined);if(args.headers){for(var hdr in args.headers){if(hdr.toLowerCase()==="content-type"&&!args.contentType){args.contentType=args.headers[hdr];}else{if(args.headers[hdr]){xhr.setRequestHeader(hdr,args.headers[hdr]);}}}}xhr.setRequestHeader("Content-Type",args.contentType||_281);if(!args.headers||!("X-Requested-With" in args.headers)){xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");}_253._ioNotifyStart(dfd);if(dojo.config.debugAtAllCosts){xhr.send(_288.query);}else{try{xhr.send(_288.query);}catch(e){_288.error=e;dfd.cancel();}}_253._ioWatch(dfd,_282,_283,_284);xhr=null;return dfd;};dojo.xhrGet=function(args){return _253.xhr("GET",args);};dojo.rawXhrPost=dojo.xhrPost=function(args){return _253.xhr("POST",args,true);};dojo.rawXhrPut=dojo.xhrPut=function(args){return _253.xhr("PUT",args,true);};dojo.xhrDelete=function(args){return _253.xhr("DELETE",args);};})();}if(!dojo._hasResource["dojo._base.fx"]){dojo._hasResource["dojo._base.fx"]=true;dojo.provide("dojo._base.fx");(function(){var d=dojo;var _289=d._mixin;dojo._Line=function(_28a,end){this.start=_28a;this.end=end;};dojo._Line.prototype.getValue=function(n){return ((this.end-this.start)*n)+this.start;};dojo.Animation=function(args){_289(this,args);if(d.isArray(this.curve)){this.curve=new d._Line(this.curve[0],this.curve[1]);}};d._Animation=d.Animation;d.extend(dojo.Animation,{duration:350,repeat:0,rate:20,_percent:0,_startRepeatCount:0,_getStep:function(){var _28b=this._percent,_28c=this.easing;return _28c?_28c(_28b):_28b;},_fire:function(evt,args){var a=args||[];if(this[evt]){if(d.config.debugAtAllCosts){this[evt].apply(this,a);}else{try{this[evt].apply(this,a);}catch(e){console.error("exception in animation handler for:",evt);console.error(e);}}}return this;},play:function(_28d,_28e){var _28f=this;if(_28f._delayTimer){_28f._clearTimer();}if(_28e){_28f._stopTimer();_28f._active=_28f._paused=false;_28f._percent=0;}else{if(_28f._active&&!_28f._paused){return _28f;}}_28f._fire("beforeBegin",[_28f.node]);var de=_28d||_28f.delay,_290=dojo.hitch(_28f,"_play",_28e);if(de>0){_28f._delayTimer=setTimeout(_290,de);return _28f;}_290();return _28f;},_play:function(_291){var _292=this;if(_292._delayTimer){_292._clearTimer();}_292._startTime=new Date().valueOf();if(_292._paused){_292._startTime-=_292.duration*_292._percent;}_292._active=true;_292._paused=false;var _293=_292.curve.getValue(_292._getStep());if(!_292._percent){if(!_292._startRepeatCount){_292._startRepeatCount=_292.repeat;}_292._fire("onBegin",[_293]);}_292._fire("onPlay",[_293]);_292._cycle();return _292;},pause:function(){var _294=this;if(_294._delayTimer){_294._clearTimer();}_294._stopTimer();if(!_294._active){return _294;}_294._paused=true;_294._fire("onPause",[_294.curve.getValue(_294._getStep())]);return _294;},gotoPercent:function(_295,_296){var _297=this;_297._stopTimer();_297._active=_297._paused=true;_297._percent=_295;if(_296){_297.play();}return _297;},stop:function(_298){var _299=this;if(_299._delayTimer){_299._clearTimer();}if(!_299._timer){return _299;}_299._stopTimer();if(_298){_299._percent=1;}_299._fire("onStop",[_299.curve.getValue(_299._getStep())]);_299._active=_299._paused=false;return _299;},status:function(){if(this._active){return this._paused?"paused":"playing";}return "stopped";},_cycle:function(){var _29a=this;if(_29a._active){var curr=new Date().valueOf();var step=(curr-_29a._startTime)/(_29a.duration);if(step>=1){step=1;}_29a._percent=step;if(_29a.easing){step=_29a.easing(step);}_29a._fire("onAnimate",[_29a.curve.getValue(step)]);if(_29a._percent<1){_29a._startTimer();}else{_29a._active=false;if(_29a.repeat>0){_29a.repeat--;_29a.play(null,true);}else{if(_29a.repeat==-1){_29a.play(null,true);}else{if(_29a._startRepeatCount){_29a.repeat=_29a._startRepeatCount;_29a._startRepeatCount=0;}}}_29a._percent=0;_29a._fire("onEnd",[_29a.node]);!_29a.repeat&&_29a._stopTimer();}}return _29a;},_clearTimer:function(){clearTimeout(this._delayTimer);delete this._delayTimer;}});var ctr=0,_29b=null,_29c={run:function(){}};d.extend(d.Animation,{_startTimer:function(){if(!this._timer){this._timer=d.connect(_29c,"run",this,"_cycle");ctr++;}if(!_29b){_29b=setInterval(d.hitch(_29c,"run"),this.rate);}},_stopTimer:function(){if(this._timer){d.disconnect(this._timer);this._timer=null;ctr--;}if(ctr<=0){clearInterval(_29b);_29b=null;ctr=0;}}});var _29d=d.isIE?function(node){var ns=node.style;if(!ns.width.length&&d.style(node,"width")=="auto"){ns.width="auto";}}:function(){};dojo._fade=function(args){args.node=d.byId(args.node);var _29e=_289({properties:{}},args),_29f=(_29e.properties.opacity={});_29f.start=!("start" in _29e)?function(){return +d.style(_29e.node,"opacity")||0;}:_29e.start;_29f.end=_29e.end;var anim=d.animateProperty(_29e);d.connect(anim,"beforeBegin",d.partial(_29d,_29e.node));return anim;};dojo.fadeIn=function(args){return d._fade(_289({end:1},args));};dojo.fadeOut=function(args){return d._fade(_289({end:0},args));};dojo._defaultEasing=function(n){return 0.5+((Math.sin((n+1.5)*Math.PI))/2);};var _2a0=function(_2a1){this._properties=_2a1;for(var p in _2a1){var prop=_2a1[p];if(prop.start instanceof d.Color){prop.tempColor=new d.Color();}}};_2a0.prototype.getValue=function(r){var ret={};for(var p in this._properties){var prop=this._properties[p],_2a2=prop.start;if(_2a2 instanceof d.Color){ret[p]=d.blendColors(_2a2,prop.end,r,prop.tempColor).toCss();}else{if(!d.isArray(_2a2)){ret[p]=((prop.end-_2a2)*r)+_2a2+(p!="opacity"?prop.units||"px":0);}}}return ret;};dojo.animateProperty=function(args){var n=args.node=d.byId(args.node);if(!args.easing){args.easing=d._defaultEasing;}var anim=new d.Animation(args);d.connect(anim,"beforeBegin",anim,function(){var pm={};for(var p in this.properties){if(p=="width"||p=="height"){this.node.display="block";}var prop=this.properties[p];if(d.isFunction(prop)){prop=prop(n);}prop=pm[p]=_289({},(d.isObject(prop)?prop:{end:prop}));if(d.isFunction(prop.start)){prop.start=prop.start(n);}if(d.isFunction(prop.end)){prop.end=prop.end(n);}var _2a3=(p.toLowerCase().indexOf("color")>=0);function _2a4(node,p){var v={height:node.offsetHeight,width:node.offsetWidth}[p];if(v!==undefined){return v;}v=d.style(node,p);return (p=="opacity")?+v:(_2a3?v:parseFloat(v));};if(!("end" in prop)){prop.end=_2a4(n,p);}else{if(!("start" in prop)){prop.start=_2a4(n,p);}}if(_2a3){prop.start=new d.Color(prop.start);prop.end=new d.Color(prop.end);}else{prop.start=(p=="opacity")?+prop.start:parseFloat(prop.start);}}this.curve=new _2a0(pm);});d.connect(anim,"onAnimate",d.hitch(d,"style",anim.node));return anim;};dojo.anim=function(node,_2a5,_2a6,_2a7,_2a8,_2a9){return d.animateProperty({node:node,duration:_2a6||d.Animation.prototype.duration,properties:_2a5,easing:_2a7,onEnd:_2a8}).play(_2a9||0);};})();}if(!dojo._hasResource["dojo._base.browser"]){dojo._hasResource["dojo._base.browser"]=true;dojo.provide("dojo._base.browser");dojo.forEach(dojo.config.require,function(i){dojo["require"](i);});}if(dojo.isBrowser&&(document.readyState==="complete"||dojo.config.afterOnLoad)){window.setTimeout(dojo._loadInit,100);}})();
Index: trunk/web/dojo/dojo/io/iframe.js
===================================================================
--- trunk/web/dojo/dojo/io/iframe.js	(revision 0)
+++ trunk/web/dojo/dojo/io/iframe.js	(revision 9)
@@ -0,0 +1,265 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.io.iframe"]){
+dojo._hasResource["dojo.io.iframe"]=true;
+dojo.provide("dojo.io.iframe");
+dojo.io.iframe={create:function(_1,_2,_3){
+if(window[_1]){
+return window[_1];
+}
+if(window.frames[_1]){
+return window.frames[_1];
+}
+var _4=null;
+var _5=_3;
+if(!_5){
+if(dojo.config["useXDomain"]&&!dojo.config["dojoBlankHtmlUrl"]){
+console.warn("dojo.io.iframe.create: When using cross-domain Dojo builds,"+" please save dojo/resources/blank.html to your domain and set djConfig.dojoBlankHtmlUrl"+" to the path on your domain to blank.html");
+}
+_5=(dojo.config["dojoBlankHtmlUrl"]||dojo.moduleUrl("dojo","resources/blank.html"));
+}
+var _6=dojo.isIE?"<iframe name=\""+_1+"\" src=\""+_5+"\" onload=\""+_2+"\">":"iframe";
+_4=dojo.doc.createElement(_6);
+with(_4){
+name=_1;
+setAttribute("name",_1);
+id=_1;
+}
+dojo.body().appendChild(_4);
+window[_1]=_4;
+with(_4.style){
+if(!(dojo.isSafari<3)){
+position="absolute";
+}
+left=top="1px";
+height=width="1px";
+visibility="hidden";
+}
+if(!dojo.isIE){
+this.setSrc(_4,_5,true);
+_4.onload=new Function(_2);
+}
+return _4;
+},setSrc:function(_7,_8,_9){
+try{
+if(!_9){
+if(dojo.isWebKit){
+_7.location=_8;
+}else{
+frames[_7.name].location=_8;
+}
+}else{
+var _a;
+if(dojo.isIE||dojo.isWebKit>521){
+_a=_7.contentWindow.document;
+}else{
+if(dojo.isSafari){
+_a=_7.document;
+}else{
+_a=_7.contentWindow;
+}
+}
+if(!_a){
+_7.location=_8;
+return;
+}else{
+_a.location.replace(_8);
+}
+}
+}
+catch(e){
+}
+},doc:function(_b){
+var _c=_b.contentDocument||(((_b.name)&&(_b.document)&&(dojo.doc.getElementsByTagName("iframe")[_b.name].contentWindow)&&(dojo.doc.getElementsByTagName("iframe")[_b.name].contentWindow.document)))||((_b.name)&&(dojo.doc.frames[_b.name])&&(dojo.doc.frames[_b.name].document))||null;
+return _c;
+},send:function(_d){
+if(!this["_frame"]){
+this._frame=this.create(this._iframeName,dojo._scopeName+".io.iframe._iframeOnload();");
+}
+var _e=dojo._ioSetArgs(_d,function(_f){
+_f.canceled=true;
+_f.ioArgs._callNext();
+},function(dfd){
+var _10=null;
+try{
+var _11=dfd.ioArgs;
+var dii=dojo.io.iframe;
+var ifd=dii.doc(dii._frame);
+var _12=_11.handleAs;
+_10=ifd;
+if(_12!="html"){
+if(_12=="xml"){
+if(dojo.isIE){
+dojo.query("a",dii._frame.contentWindow.document.documentElement).orphan();
+var _13=(dii._frame.contentWindow.document).documentElement.innerText;
+_13=_13.replace(/>\s+</g,"><");
+_13=dojo.trim(_13);
+var _14={responseText:_13};
+_10=dojo._contentHandlers["xml"](_14);
+}
+}else{
+_10=ifd.getElementsByTagName("textarea")[0].value;
+if(_12=="json"){
+_10=dojo.fromJson(_10);
+}else{
+if(_12=="javascript"){
+_10=dojo.eval(_10);
+}
+}
+}
+}
+}
+catch(e){
+_10=e;
+}
+finally{
+_11._callNext();
+}
+return _10;
+},function(_15,dfd){
+dfd.ioArgs._hasError=true;
+dfd.ioArgs._callNext();
+return _15;
+});
+_e.ioArgs._callNext=function(){
+if(!this["_calledNext"]){
+this._calledNext=true;
+dojo.io.iframe._currentDfd=null;
+dojo.io.iframe._fireNextRequest();
+}
+};
+this._dfdQueue.push(_e);
+this._fireNextRequest();
+dojo._ioWatch(_e,function(dfd){
+return !dfd.ioArgs["_hasError"];
+},function(dfd){
+return (!!dfd.ioArgs["_finished"]);
+},function(dfd){
+if(dfd.ioArgs._finished){
+dfd.callback(dfd);
+}else{
+dfd.errback(new Error("Invalid dojo.io.iframe request state"));
+}
+});
+return _e;
+},_currentDfd:null,_dfdQueue:[],_iframeName:dojo._scopeName+"IoIframe",_fireNextRequest:function(){
+try{
+if((this._currentDfd)||(this._dfdQueue.length==0)){
+return;
+}
+do{
+var dfd=this._currentDfd=this._dfdQueue.shift();
+}while(dfd&&dfd.canceled&&this._dfdQueue.length);
+if(!dfd||dfd.canceled){
+this._currentDfd=null;
+return;
+}
+var _16=dfd.ioArgs;
+var _17=_16.args;
+_16._contentToClean=[];
+var fn=dojo.byId(_17["form"]);
+var _18=_17["content"]||{};
+if(fn){
+if(_18){
+var _19=function(_1a,_1b){
+var tn;
+if(dojo.isIE){
+tn=dojo.doc.createElement("<input type='hidden' name='"+_1a+"'>");
+}else{
+tn=dojo.doc.createElement("input");
+tn.type="hidden";
+tn.name=_1a;
+}
+tn.value=_1b;
+fn.appendChild(tn);
+_16._contentToClean.push(_1a);
+};
+for(var x in _18){
+var val=_18[x];
+if(dojo.isArray(val)&&val.length>1){
+var i;
+for(i=0;i<val.length;i++){
+_19(x,val[i]);
+}
+}else{
+if(!fn[x]){
+_19(x,val);
+}else{
+fn[x].value=val;
+}
+}
+}
+}
+var _1c=fn.getAttributeNode("action");
+var _1d=fn.getAttributeNode("method");
+var _1e=fn.getAttributeNode("target");
+if(_17["url"]){
+_16._originalAction=_1c?_1c.value:null;
+if(_1c){
+_1c.value=_17.url;
+}else{
+fn.setAttribute("action",_17.url);
+}
+}
+if(!_1d||!_1d.value){
+if(_1d){
+_1d.value=(_17["method"])?_17["method"]:"post";
+}else{
+fn.setAttribute("method",(_17["method"])?_17["method"]:"post");
+}
+}
+_16._originalTarget=_1e?_1e.value:null;
+if(_1e){
+_1e.value=this._iframeName;
+}else{
+fn.setAttribute("target",this._iframeName);
+}
+fn.target=this._iframeName;
+dojo._ioNotifyStart(dfd);
+fn.submit();
+}else{
+var _1f=_17.url+(_17.url.indexOf("?")>-1?"&":"?")+_16.query;
+dojo._ioNotifyStart(dfd);
+this.setSrc(this._frame,_1f,true);
+}
+}
+catch(e){
+dfd.errback(e);
+}
+},_iframeOnload:function(){
+var dfd=this._currentDfd;
+if(!dfd){
+this._fireNextRequest();
+return;
+}
+var _20=dfd.ioArgs;
+var _21=_20.args;
+var _22=dojo.byId(_21.form);
+if(_22){
+var _23=_20._contentToClean;
+for(var i=0;i<_23.length;i++){
+var key=_23[i];
+for(var j=0;j<_22.childNodes.length;j++){
+var _24=_22.childNodes[j];
+if(_24.name==key){
+dojo.destroy(_24);
+break;
+}
+}
+}
+if(_20["_originalAction"]){
+_22.setAttribute("action",_20._originalAction);
+}
+if(_20["_originalTarget"]){
+_22.setAttribute("target",_20._originalTarget);
+_22.target=_20._originalTarget;
+}
+}
+_20._finished=true;
+}};
+}
Index: trunk/web/dojo/dojo/io/script.js
===================================================================
--- trunk/web/dojo/dojo/io/script.js	(revision 0)
+++ trunk/web/dojo/dojo/io/script.js	(revision 9)
@@ -0,0 +1,118 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.io.script"]){
+dojo._hasResource["dojo.io.script"]=true;
+dojo.provide("dojo.io.script");
+(function(){
+var _1=dojo.isIE?"onreadystatechange":"load",_2=/complete|loaded/;
+dojo.io.script={get:function(_3){
+var _4=this._makeScriptDeferred(_3);
+var _5=_4.ioArgs;
+dojo._ioAddQueryToUrl(_5);
+dojo._ioNotifyStart(_4);
+if(this._canAttach(_5)){
+var _6=this.attach(_5.id,_5.url,_3.frameDoc);
+if(!_5.jsonp&&!_5.args.checkString){
+var _7=dojo.connect(_6,_1,function(_8){
+if(_8.type=="load"||_2.test(_6.readyState)){
+dojo.disconnect(_7);
+_5.scriptLoaded=_8;
+}
+});
+}
+}
+dojo._ioWatch(_4,this._validCheck,this._ioCheck,this._resHandle);
+return _4;
+},attach:function(id,_9,_a){
+var _b=(_a||dojo.doc);
+var _c=_b.createElement("script");
+_c.type="text/javascript";
+_c.src=_9;
+_c.id=id;
+_c.charset="utf-8";
+return _b.getElementsByTagName("head")[0].appendChild(_c);
+},remove:function(id,_d){
+dojo.destroy(dojo.byId(id,_d));
+if(this["jsonp_"+id]){
+delete this["jsonp_"+id];
+}
+},_makeScriptDeferred:function(_e){
+var _f=dojo._ioSetArgs(_e,this._deferredCancel,this._deferredOk,this._deferredError);
+var _10=_f.ioArgs;
+_10.id=dojo._scopeName+"IoScript"+(this._counter++);
+_10.canDelete=false;
+_10.jsonp=_e.callbackParamName||_e.jsonp;
+if(_10.jsonp){
+_10.query=_10.query||"";
+if(_10.query.length>0){
+_10.query+="&";
+}
+_10.query+=_10.jsonp+"="+(_e.frameDoc?"parent.":"")+dojo._scopeName+".io.script.jsonp_"+_10.id+"._jsonpCallback";
+_10.frameDoc=_e.frameDoc;
+_10.canDelete=true;
+_f._jsonpCallback=this._jsonpCallback;
+this["jsonp_"+_10.id]=_f;
+}
+return _f;
+},_deferredCancel:function(dfd){
+dfd.canceled=true;
+if(dfd.ioArgs.canDelete){
+dojo.io.script._addDeadScript(dfd.ioArgs);
+}
+},_deferredOk:function(dfd){
+var _11=dfd.ioArgs;
+if(_11.canDelete){
+dojo.io.script._addDeadScript(_11);
+}
+return _11.json||_11.scriptLoaded||_11;
+},_deferredError:function(_12,dfd){
+if(dfd.ioArgs.canDelete){
+if(_12.dojoType=="timeout"){
+dojo.io.script.remove(dfd.ioArgs.id,dfd.ioArgs.frameDoc);
+}else{
+dojo.io.script._addDeadScript(dfd.ioArgs);
+}
+}
+return _12;
+},_deadScripts:[],_counter:1,_addDeadScript:function(_13){
+dojo.io.script._deadScripts.push({id:_13.id,frameDoc:_13.frameDoc});
+_13.frameDoc=null;
+},_validCheck:function(dfd){
+var _14=dojo.io.script;
+var _15=_14._deadScripts;
+if(_15&&_15.length>0){
+for(var i=0;i<_15.length;i++){
+_14.remove(_15[i].id,_15[i].frameDoc);
+_15[i].frameDoc=null;
+}
+dojo.io.script._deadScripts=[];
+}
+return true;
+},_ioCheck:function(dfd){
+var _16=dfd.ioArgs;
+if(_16.json||(_16.scriptLoaded&&!_16.args.checkString)){
+return true;
+}
+var _17=_16.args.checkString;
+if(_17&&eval("typeof("+_17+") != 'undefined'")){
+return true;
+}
+return false;
+},_resHandle:function(dfd){
+if(dojo.io.script._ioCheck(dfd)){
+dfd.callback(dfd);
+}else{
+dfd.errback(new Error("inconceivable dojo.io.script._resHandle error"));
+}
+},_canAttach:function(_18){
+return true;
+},_jsonpCallback:function(_19){
+this.ioArgs.json=_19;
+}};
+})();
+}
Index: trunk/web/dojo/dojo/NodeList-fx.js
===================================================================
--- trunk/web/dojo/dojo/NodeList-fx.js	(revision 0)
+++ trunk/web/dojo/dojo/NodeList-fx.js	(revision 9)
@@ -0,0 +1,41 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.NodeList-fx"]){
+dojo._hasResource["dojo.NodeList-fx"]=true;
+dojo.provide("dojo.NodeList-fx");
+dojo.require("dojo.fx");
+dojo.extend(dojo.NodeList,{_anim:function(_1,_2,_3){
+_3=_3||{};
+var a=dojo.fx.combine(this.map(function(_4){
+var _5={node:_4};
+dojo.mixin(_5,_3);
+return _1[_2](_5);
+}));
+return _3.auto?a.play()&&this:a;
+},wipeIn:function(_6){
+return this._anim(dojo.fx,"wipeIn",_6);
+},wipeOut:function(_7){
+return this._anim(dojo.fx,"wipeOut",_7);
+},slideTo:function(_8){
+return this._anim(dojo.fx,"slideTo",_8);
+},fadeIn:function(_9){
+return this._anim(dojo,"fadeIn",_9);
+},fadeOut:function(_a){
+return this._anim(dojo,"fadeOut",_a);
+},animateProperty:function(_b){
+return this._anim(dojo,"animateProperty",_b);
+},anim:function(_c,_d,_e,_f,_10){
+var _11=dojo.fx.combine(this.map(function(_12){
+return dojo.animateProperty({node:_12,properties:_c,duration:_d||350,easing:_e});
+}));
+if(_f){
+dojo.connect(_11,"onEnd",_f);
+}
+return _11.play(_10||0);
+}});
+}
Index: trunk/web/dojo/dojo/resources/blank.html
===================================================================
--- trunk/web/dojo/dojo/resources/blank.html	(revision 0)
+++ trunk/web/dojo/dojo/resources/blank.html	(revision 9)
@@ -0,0 +1 @@
+<html><head><script>isLoaded = true;</script></head><body></body></html>
Index: trunk/web/dojo/dojo/resources/blank.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/resources/blank.gif
===================================================================
--- trunk/web/dojo/dojo/resources/blank.gif	(revision 0)
+++ trunk/web/dojo/dojo/resources/blank.gif	(revision 9)

Property changes on: trunk/web/dojo/dojo/resources/blank.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/resources/dnd.css
===================================================================
--- trunk/web/dojo/dojo/resources/dnd.css	(revision 0)
+++ trunk/web/dojo/dojo/resources/dnd.css	(revision 9)
@@ -0,0 +1,14 @@
+
+.dojoDndAvatar			{font-size: 75%; color: black;}
+.dojoDndAvatarHeader td	{padding-left: 20px; padding-right: 4px;}
+.dojoDndAvatarHeader	{background: #ccc;}
+.dojoDndAvatarItem		{background: #eee;}
+.dojoDndMove .dojoDndAvatarHeader	{background-image: url(images/dndNoMove.png); background-repeat: no-repeat;}
+.dojoDndCopy .dojoDndAvatarHeader	{background-image: url(images/dndNoCopy.png); background-repeat: no-repeat;}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-image: url(images/dndMove.png); background-repeat: no-repeat;}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-image: url(images/dndCopy.png); background-repeat: no-repeat;}
+.dojoDndHandle {cursor: move;}
+.dojoDndIgnore {cursor: default;}
+.dijit_a11y .dojoDndAvatar { font-size: 1em; font-weight:bold;}
+.dijit_a11y .dojoDndAvatarHeader td {padding-left:2px !important;}
+.dijit_a11y .dojoDndAvatarHeader td span {padding-right: 5px;}
Index: trunk/web/dojo/dojo/resources/LICENSE
===================================================================
--- trunk/web/dojo/dojo/resources/LICENSE	(revision 0)
+++ trunk/web/dojo/dojo/resources/LICENSE	(revision 9)
@@ -0,0 +1,30 @@
+License Disclaimer:
+
+All contents of this directory are Copyright (c) the Dojo Foundation, with the
+following exceptions:
+-------------------------------------------------------------------------------
+
+dojo.css:
+	* parts Copyright (c) 2007, Yahoo! Inc. All rights reserved.
+	  Distributed under the terms of the BSD License
+
+The Program includes all or portions of the following software which was obtained under the terms and conditions of the BSD License.
+
+http://developer.yahoo.com/yui/license.html
+
+Copyright (c) 2007, Yahoo! Inc.
+ All rights reserved.
+ Redistribution and use of this software 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 Yahoo! Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without 
+specific prior written permission of Yahoo! Inc. 
+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. 
Index: trunk/web/dojo/dojo/resources/_modules.js
===================================================================
--- trunk/web/dojo/dojo/resources/_modules.js	(revision 0)
+++ trunk/web/dojo/dojo/resources/_modules.js	(revision 9)
@@ -0,0 +1,7 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
Index: trunk/web/dojo/dojo/resources/dojo.css
===================================================================
--- trunk/web/dojo/dojo/resources/dojo.css	(revision 0)
+++ trunk/web/dojo/dojo/resources/dojo.css	(revision 9)
@@ -0,0 +1,98 @@
+
+body, div, dl, dt, dd, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td {
+	margin: 0;
+	padding: 0;
+}
+fieldset, img {
+	border: 0 none;
+}
+address, caption, cite, code, dfn, th, var {
+	font-style: normal; 
+	font-weight: normal;
+}
+caption, th {
+	text-align: left;
+}
+q:before, q:after {
+	content:"";
+}
+abbr, acronym {
+	border:0;
+}
+body { 
+	font: 12px Myriad,Helvetica,Tahoma,Arial,clean,sans-serif; 
+	*font-size: 75%;
+}
+h1 {
+	font-size: 1.5em; 
+	font-weight: normal;
+	line-height: 1em; 
+	margin-top: 1em;
+	margin-bottom:0;
+}
+h2 { 
+	font-size: 1.1667em; 
+	font-weight: bold; 
+	line-height: 1.286em; 
+	margin-top: 1.929em; 
+	margin-bottom:0.643em;
+}
+h3, h4, h5, h6 {
+	font-size: 1em; 
+	font-weight: bold; 
+	line-height: 1.5em; 
+	margin-top: 1.5em; 
+	margin-bottom: 0;
+}
+p { 
+	font-size: 1em; 
+	margin-top: 1.5em; 
+	margin-bottom: 1.5em; 
+	line-height: 1.5em;
+}
+blockquote { 
+	font-size: 0.916em; 
+	margin-top: 3.272em; 
+	margin-bottom: 3.272em; 
+	line-height: 1.636em; 
+	padding: 1.636em; 
+	border-top: 1px solid #ccc; 
+	border-bottom: 1px solid #ccc;
+}
+ol li, ul li { 
+	font-size: 1em; 
+	line-height: 1.5em; 
+	margin: 0;
+}
+pre, code { 
+	font-size:115%;
+	*font-size:100%;
+	font-family: Courier, "Courier New"; 
+	background-color: #efefef; 
+	border: 1px solid #ccc;
+}
+pre { 
+	border-width: 1px 0; 
+	padding: 1.5em;
+}
+table {  font-size:100%; }
+.dojoTabular { 
+	border-collapse: collapse; 
+	border-spacing: 0; 
+	border: 1px solid #ccc; 
+	margin: 0 1.5em;
+}
+.dojoTabular th { 
+	text-align: center; 
+	font-weight: bold;
+}
+.dojoTabular thead,
+.dojoTabular tfoot { 
+	background-color: #efefef; 
+	border: 1px solid #ccc; 
+	border-width: 1px 0; 
+}
+.dojoTabular th,
+.dojoTabular td { 
+	padding: 0.25em 0.5em;
+}
Index: trunk/web/dojo/dojo/resources/images/dndCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/resources/images/dndCopy.png
===================================================================
--- trunk/web/dojo/dojo/resources/images/dndCopy.png	(revision 0)
+++ trunk/web/dojo/dojo/resources/images/dndCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/resources/images/dndCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/resources/images/dndNoMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/resources/images/dndNoMove.png
===================================================================
--- trunk/web/dojo/dojo/resources/images/dndNoMove.png	(revision 0)
+++ trunk/web/dojo/dojo/resources/images/dndNoMove.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/resources/images/dndNoMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/resources/images/dndMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/resources/images/dndMove.png
===================================================================
--- trunk/web/dojo/dojo/resources/images/dndMove.png	(revision 0)
+++ trunk/web/dojo/dojo/resources/images/dndMove.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/resources/images/dndMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/resources/images/dndNoCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/resources/images/dndNoCopy.png
===================================================================
--- trunk/web/dojo/dojo/resources/images/dndNoCopy.png	(revision 0)
+++ trunk/web/dojo/dojo/resources/images/dndNoCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/resources/images/dndNoCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/resources/iframe_history.html
===================================================================
--- trunk/web/dojo/dojo/resources/iframe_history.html	(revision 0)
+++ trunk/web/dojo/dojo/resources/iframe_history.html	(revision 9)
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<script type="text/javascript">
+	// <!--
+	var noInit = false;
+		
+	function init(){
+		if(noInit){ return; }
+		var hasParentDojo = false;
+		try{
+			hasParentDojo = window.parent != window && window.parent["dojo"];
+		}catch(e){
+			alert("Initializing iframe_history.html failed. If you are using a cross-domain Dojo build,"
+				+ " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"
+				+ " to the path on your domain to iframe_history.html");
+			throw e;
+		}
+
+		if(hasParentDojo){
+			//Set the page title so IE history shows up with a somewhat correct name.
+			document.title = window.parent.document.title;
+			
+			//Notify parent that we are loaded.
+			var pdj = window.parent.dojo;
+			if(pdj["back"]){
+				pdj.back._iframeLoaded(null, window.location);
+			}
+		}
+
+	}
+	// -->
+	</script>
+</head>
+<body onload="try{ init(); }catch(e){ alert(e); }">
+	<h4>The Dojo Toolkit -- iframe_history.html</h4>
+
+	<p>This file is used in Dojo's back/fwd button management.</p>
+</body>
+</html>
Index: trunk/web/dojo/dojo/behavior.js
===================================================================
--- trunk/web/dojo/dojo/behavior.js	(revision 0)
+++ trunk/web/dojo/dojo/behavior.js	(revision 9)
@@ -0,0 +1,94 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.behavior"]){
+dojo._hasResource["dojo.behavior"]=true;
+dojo.provide("dojo.behavior");
+dojo.behavior=new function(){
+function _1(_2,_3){
+if(!_2[_3]){
+_2[_3]=[];
+}
+return _2[_3];
+};
+var _4=0;
+function _5(_6,_7,_8){
+var _9={};
+for(var x in _6){
+if(typeof _9[x]=="undefined"){
+if(!_8){
+_7(_6[x],x);
+}else{
+_8.call(_7,_6[x],x);
+}
+}
+}
+};
+this._behaviors={};
+this.add=function(_a){
+var _b={};
+_5(_a,this,function(_c,_d){
+var _e=_1(this._behaviors,_d);
+if(typeof _e["id"]!="number"){
+_e.id=_4++;
+}
+var _f=[];
+_e.push(_f);
+if((dojo.isString(_c))||(dojo.isFunction(_c))){
+_c={found:_c};
+}
+_5(_c,function(_10,_11){
+_1(_f,_11).push(_10);
+});
+});
+};
+var _12=function(_13,_14,_15){
+if(dojo.isString(_14)){
+if(_15=="found"){
+dojo.publish(_14,[_13]);
+}else{
+dojo.connect(_13,_15,function(){
+dojo.publish(_14,arguments);
+});
+}
+}else{
+if(dojo.isFunction(_14)){
+if(_15=="found"){
+_14(_13);
+}else{
+dojo.connect(_13,_15,_14);
+}
+}
+}
+};
+this.apply=function(){
+_5(this._behaviors,function(_16,id){
+dojo.query(id).forEach(function(_17){
+var _18=0;
+var bid="_dj_behavior_"+_16.id;
+if(typeof _17[bid]=="number"){
+_18=_17[bid];
+if(_18==(_16.length)){
+return;
+}
+}
+for(var x=_18,_19;_19=_16[x];x++){
+_5(_19,function(_1a,_1b){
+if(dojo.isArray(_1a)){
+dojo.forEach(_1a,function(_1c){
+_12(_17,_1c,_1b);
+});
+}
+});
+}
+_17[bid]=_16.length;
+});
+});
+};
+};
+dojo.addOnLoad(dojo.behavior,"apply");
+}
Index: trunk/web/dojo/dojo/colors.js
===================================================================
--- trunk/web/dojo/dojo/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/colors.js	(revision 9)
@@ -0,0 +1,76 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.colors"]){
+dojo._hasResource["dojo.colors"]=true;
+dojo.provide("dojo.colors");
+(function(){
+var _1=function(m1,m2,h){
+if(h<0){
+++h;
+}
+if(h>1){
+--h;
+}
+var h6=6*h;
+if(h6<1){
+return m1+(m2-m1)*h6;
+}
+if(2*h<1){
+return m2;
+}
+if(3*h<2){
+return m1+(m2-m1)*(2/3-h)*6;
+}
+return m1;
+};
+dojo.colorFromRgb=function(_2,_3){
+var m=_2.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);
+if(m){
+var c=m[2].split(/\s*,\s*/),l=c.length,t=m[1],a;
+if((t=="rgb"&&l==3)||(t=="rgba"&&l==4)){
+var r=c[0];
+if(r.charAt(r.length-1)=="%"){
+a=dojo.map(c,function(x){
+return parseFloat(x)*2.56;
+});
+if(l==4){
+a[3]=c[3];
+}
+return dojo.colorFromArray(a,_3);
+}
+return dojo.colorFromArray(c,_3);
+}
+if((t=="hsl"&&l==3)||(t=="hsla"&&l==4)){
+var H=((parseFloat(c[0])%360)+360)%360/360,S=parseFloat(c[1])/100,L=parseFloat(c[2])/100,m2=L<=0.5?L*(S+1):L+S-L*S,m1=2*L-m2;
+a=[_1(m1,m2,H+1/3)*256,_1(m1,m2,H)*256,_1(m1,m2,H-1/3)*256,1];
+if(l==4){
+a[3]=c[3];
+}
+return dojo.colorFromArray(a,_3);
+}
+}
+return null;
+};
+var _4=function(c,_5,_6){
+c=Number(c);
+return isNaN(c)?_6:c<_5?_5:c>_6?_6:c;
+};
+dojo.Color.prototype.sanitize=function(){
+var t=this;
+t.r=Math.round(_4(t.r,0,255));
+t.g=Math.round(_4(t.g,0,255));
+t.b=Math.round(_4(t.b,0,255));
+t.a=_4(t.a,0,1);
+return this;
+};
+})();
+dojo.colors.makeGrey=function(g,a){
+return dojo.colorFromArray([g,g,g,a]);
+};
+dojo.mixin(dojo.Color.named,{aliceblue:[240,248,255],antiquewhite:[250,235,215],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],blanchedalmond:[255,235,205],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],oldlace:[253,245,230],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],thistle:[216,191,216],tomato:[255,99,71],transparent:[0,0,0,0],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],whitesmoke:[245,245,245],yellowgreen:[154,205,50]});
+}
Index: trunk/web/dojo/dojo/gears.js
===================================================================
--- trunk/web/dojo/dojo/gears.js	(revision 0)
+++ trunk/web/dojo/dojo/gears.js	(revision 9)
@@ -0,0 +1,45 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.gears"]){
+dojo._hasResource["dojo.gears"]=true;
+dojo.provide("dojo.gears");
+dojo.gears._gearsObject=function(){
+var _1;
+var _2;
+var _3=dojo.getObject("google.gears");
+if(_3){
+return _3;
+}
+if(typeof GearsFactory!="undefined"){
+_1=new GearsFactory();
+}else{
+if(dojo.isIE){
+try{
+_1=new ActiveXObject("Gears.Factory");
+}
+catch(e){
+}
+}else{
+if(navigator.mimeTypes["application/x-googlegears"]){
+_1=document.createElement("object");
+_1.setAttribute("type","application/x-googlegears");
+_1.setAttribute("width",0);
+_1.setAttribute("height",0);
+_1.style.display="none";
+document.documentElement.appendChild(_1);
+}
+}
+}
+if(!_1){
+return null;
+}
+dojo.setObject("google.gears.factory",_1);
+return dojo.getObject("google.gears");
+};
+dojo.gears.available=(!!dojo.gears._gearsObject())||0;
+}
Index: trunk/web/dojo/dojo/build.txt
===================================================================
--- trunk/web/dojo/dojo/build.txt	(revision 0)
+++ trunk/web/dojo/dojo/build.txt	(revision 9)
@@ -0,0 +1,328 @@
+Files baked into this build:
+
+dojo.js:
+./jslib/dojoGuardStart.jsfrag
+./../../dojo/_base/_loader/bootstrap.js
+./../../dojo/_base/_loader/loader.js
+./../../dojo/_base/_loader/hostenv_browser.js
+./../../release/dojo-release-1.5.0/dojo/_base/lang.js
+./../../release/dojo-release-1.5.0/dojo/_base/array.js
+./../../release/dojo-release-1.5.0/dojo/_base/declare.js
+./../../release/dojo-release-1.5.0/dojo/_base/connect.js
+./../../release/dojo-release-1.5.0/dojo/_base/Deferred.js
+./../../release/dojo-release-1.5.0/dojo/_base/json.js
+./../../release/dojo-release-1.5.0/dojo/_base/Color.js
+./../../release/dojo-release-1.5.0/dojo/_base.js
+./../../release/dojo-release-1.5.0/dojo/_base/window.js
+./../../release/dojo-release-1.5.0/dojo/_base/event.js
+./../../release/dojo-release-1.5.0/dojo/_base/html.js
+./../../release/dojo-release-1.5.0/dojo/_base/NodeList.js
+./../../release/dojo-release-1.5.0/dojo/_base/query.js
+./../../release/dojo-release-1.5.0/dojo/_base/xhr.js
+./../../release/dojo-release-1.5.0/dojo/_base/fx.js
+./../../release/dojo-release-1.5.0/dojo/_base/browser.js
+./jslib/dojoGuardEnd.jsfrag
+
+../dijit/dijit.js:
+./../../release/dojo-release-1.5.0/dojo/window.js
+./../../release/dojo-release-1.5.0/dijit/_base/manager.js
+./../../release/dojo-release-1.5.0/dijit/_base/focus.js
+./../../release/dojo-release-1.5.0/dojo/AdapterRegistry.js
+./../../release/dojo-release-1.5.0/dijit/_base/place.js
+./../../release/dojo-release-1.5.0/dijit/_base/window.js
+./../../release/dojo-release-1.5.0/dijit/_base/popup.js
+./../../release/dojo-release-1.5.0/dijit/_base/scroll.js
+./../../release/dojo-release-1.5.0/dojo/uacss.js
+./../../release/dojo-release-1.5.0/dijit/_base/sniff.js
+./../../release/dojo-release-1.5.0/dijit/_base/typematic.js
+./../../release/dojo-release-1.5.0/dijit/_base/wai.js
+./../../release/dojo-release-1.5.0/dijit/_base.js
+./../../release/dojo-release-1.5.0/dojo/date/stamp.js
+./../../release/dojo-release-1.5.0/dojo/parser.js
+./../../release/dojo-release-1.5.0/dijit/_Widget.js
+./../../release/dojo-release-1.5.0/dojo/string.js
+./../../release/dojo-release-1.5.0/dojo/cache.js
+./../../release/dojo-release-1.5.0/dijit/_Templated.js
+./../../release/dojo-release-1.5.0/dijit/_Container.js
+./../../release/dojo-release-1.5.0/dijit/_Contained.js
+./../../release/dojo-release-1.5.0/dijit/layout/_LayoutWidget.js
+./../../release/dojo-release-1.5.0/dijit/_CssStateMixin.js
+./../../release/dojo-release-1.5.0/dijit/form/_FormWidget.js
+./../../release/dojo-release-1.5.0/dijit/dijit.js
+
+../dijit/dijit-all.js:
+./../../release/dojo-release-1.5.0/dojo/colors.js
+./../../release/dojo-release-1.5.0/dojo/i18n.js
+./../../release/dojo-release-1.5.0/dijit/_PaletteMixin.js
+./../../release/dojo-release-1.5.0/dijit/ColorPalette.js
+./../../release/dojo-release-1.5.0/dijit/Declaration.js
+./../../release/dojo-release-1.5.0/dojo/dnd/common.js
+./../../release/dojo-release-1.5.0/dojo/dnd/autoscroll.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Mover.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Moveable.js
+./../../release/dojo-release-1.5.0/dojo/dnd/move.js
+./../../release/dojo-release-1.5.0/dojo/dnd/TimedMoveable.js
+./../../release/dojo-release-1.5.0/dojo/fx/Toggler.js
+./../../release/dojo-release-1.5.0/dojo/fx.js
+./../../release/dojo-release-1.5.0/dijit/form/_FormMixin.js
+./../../release/dojo-release-1.5.0/dijit/_DialogMixin.js
+./../../release/dojo-release-1.5.0/dijit/DialogUnderlay.js
+./../../release/dojo-release-1.5.0/dojo/html.js
+./../../release/dojo-release-1.5.0/dijit/layout/ContentPane.js
+./../../release/dojo-release-1.5.0/dijit/TooltipDialog.js
+./../../release/dojo-release-1.5.0/dijit/Dialog.js
+./../../release/dojo-release-1.5.0/dijit/_editor/selection.js
+./../../release/dojo-release-1.5.0/dijit/_editor/range.js
+./../../release/dojo-release-1.5.0/dijit/_editor/html.js
+./../../release/dojo-release-1.5.0/dijit/_editor/RichText.js
+./../../release/dojo-release-1.5.0/dijit/_KeyNavContainer.js
+./../../release/dojo-release-1.5.0/dijit/ToolbarSeparator.js
+./../../release/dojo-release-1.5.0/dijit/Toolbar.js
+./../../release/dojo-release-1.5.0/dijit/_HasDropDown.js
+./../../release/dojo-release-1.5.0/dijit/form/Button.js
+./../../release/dojo-release-1.5.0/dijit/_editor/_Plugin.js
+./../../release/dojo-release-1.5.0/dijit/_editor/plugins/EnterKeyHandling.js
+./../../release/dojo-release-1.5.0/dijit/Editor.js
+./../../release/dojo-release-1.5.0/dojo/regexp.js
+./../../release/dojo-release-1.5.0/dojo/data/util/sorter.js
+./../../release/dojo-release-1.5.0/dojo/data/util/simpleFetch.js
+./../../release/dojo-release-1.5.0/dojo/data/util/filter.js
+./../../release/dojo-release-1.5.0/dijit/form/TextBox.js
+./../../release/dojo-release-1.5.0/dijit/Tooltip.js
+./../../release/dojo-release-1.5.0/dijit/form/ValidationTextBox.js
+./../../release/dojo-release-1.5.0/dijit/form/ComboBox.js
+./../../release/dojo-release-1.5.0/dijit/form/FilteringSelect.js
+./../../release/dojo-release-1.5.0/dojo/data/ItemFileReadStore.js
+./../../release/dojo-release-1.5.0/dijit/_editor/plugins/FontChoice.js
+./../../release/dojo-release-1.5.0/dijit/form/_FormSelectWidget.js
+./../../release/dojo-release-1.5.0/dijit/MenuItem.js
+./../../release/dojo-release-1.5.0/dijit/PopupMenuItem.js
+./../../release/dojo-release-1.5.0/dijit/CheckedMenuItem.js
+./../../release/dojo-release-1.5.0/dijit/MenuSeparator.js
+./../../release/dojo-release-1.5.0/dijit/Menu.js
+./../../release/dojo-release-1.5.0/dijit/form/Select.js
+./../../release/dojo-release-1.5.0/dijit/_editor/plugins/LinkDialog.js
+./../../release/dojo-release-1.5.0/dijit/MenuBar.js
+./../../release/dojo-release-1.5.0/dijit/MenuBarItem.js
+./../../release/dojo-release-1.5.0/dijit/PopupMenuBarItem.js
+./../../release/dojo-release-1.5.0/dojo/number.js
+./../../release/dojo-release-1.5.0/dijit/ProgressBar.js
+./../../release/dojo-release-1.5.0/dijit/TitlePane.js
+./../../release/dojo-release-1.5.0/dojo/DeferredList.js
+./../../release/dojo-release-1.5.0/dojo/cookie.js
+./../../release/dojo-release-1.5.0/dijit/tree/TreeStoreModel.js
+./../../release/dojo-release-1.5.0/dijit/tree/ForestStoreModel.js
+./../../release/dojo-release-1.5.0/dijit/Tree.js
+./../../release/dojo-release-1.5.0/dijit/InlineEditBox.js
+./../../release/dojo-release-1.5.0/dijit/form/Form.js
+./../../release/dojo-release-1.5.0/dijit/form/DropDownButton.js
+./../../release/dojo-release-1.5.0/dijit/form/ComboButton.js
+./../../release/dojo-release-1.5.0/dijit/form/ToggleButton.js
+./../../release/dojo-release-1.5.0/dijit/form/CheckBox.js
+./../../release/dojo-release-1.5.0/dijit/form/RadioButton.js
+./../../release/dojo-release-1.5.0/dojo/cldr/monetary.js
+./../../release/dojo-release-1.5.0/dojo/currency.js
+./../../release/dojo-release-1.5.0/dijit/form/NumberTextBox.js
+./../../release/dojo-release-1.5.0/dijit/form/CurrencyTextBox.js
+./../../release/dojo-release-1.5.0/dojo/cldr/supplemental.js
+./../../release/dojo-release-1.5.0/dojo/date.js
+./../../release/dojo-release-1.5.0/dojo/date/locale.js
+./../../release/dojo-release-1.5.0/dijit/Calendar.js
+./../../release/dojo-release-1.5.0/dijit/form/_DateTimeTextBox.js
+./../../release/dojo-release-1.5.0/dijit/form/DateTextBox.js
+./../../release/dojo-release-1.5.0/dijit/form/_Spinner.js
+./../../release/dojo-release-1.5.0/dijit/form/NumberSpinner.js
+./../../release/dojo-release-1.5.0/dijit/form/MultiSelect.js
+./../../release/dojo-release-1.5.0/dijit/form/HorizontalSlider.js
+./../../release/dojo-release-1.5.0/dijit/form/VerticalSlider.js
+./../../release/dojo-release-1.5.0/dijit/form/HorizontalRule.js
+./../../release/dojo-release-1.5.0/dijit/form/VerticalRule.js
+./../../release/dojo-release-1.5.0/dijit/form/HorizontalRuleLabels.js
+./../../release/dojo-release-1.5.0/dijit/form/VerticalRuleLabels.js
+./../../release/dojo-release-1.5.0/dijit/form/SimpleTextarea.js
+./../../release/dojo-release-1.5.0/dijit/form/Textarea.js
+./../../release/dojo-release-1.5.0/dijit/layout/StackController.js
+./../../release/dojo-release-1.5.0/dijit/layout/StackContainer.js
+./../../release/dojo-release-1.5.0/dijit/layout/AccordionPane.js
+./../../release/dojo-release-1.5.0/dijit/layout/AccordionContainer.js
+./../../release/dojo-release-1.5.0/dijit/layout/BorderContainer.js
+./../../release/dojo-release-1.5.0/dijit/layout/LayoutContainer.js
+./../../release/dojo-release-1.5.0/dijit/layout/LinkPane.js
+./../../release/dojo-release-1.5.0/dijit/layout/SplitContainer.js
+./../../release/dojo-release-1.5.0/dijit/layout/_TabContainerBase.js
+./../../release/dojo-release-1.5.0/dijit/layout/TabController.js
+./../../release/dojo-release-1.5.0/dijit/layout/ScrollingTabController.js
+./../../release/dojo-release-1.5.0/dijit/layout/TabContainer.js
+./../../release/dojo-release-1.5.0/dijit/dijit-all.js
+
+../dojox/grid/DataGrid.js:
+./../../release/dojo-release-1.5.0/dojo/window.js
+./../../release/dojo-release-1.5.0/dijit/_base/manager.js
+./../../release/dojo-release-1.5.0/dijit/_base/focus.js
+./../../release/dojo-release-1.5.0/dojo/AdapterRegistry.js
+./../../release/dojo-release-1.5.0/dijit/_base/place.js
+./../../release/dojo-release-1.5.0/dijit/_base/window.js
+./../../release/dojo-release-1.5.0/dijit/_base/popup.js
+./../../release/dojo-release-1.5.0/dijit/_base/scroll.js
+./../../release/dojo-release-1.5.0/dojo/uacss.js
+./../../release/dojo-release-1.5.0/dijit/_base/sniff.js
+./../../release/dojo-release-1.5.0/dijit/_base/typematic.js
+./../../release/dojo-release-1.5.0/dijit/_base/wai.js
+./../../release/dojo-release-1.5.0/dijit/_base.js
+./../../release/dojo-release-1.5.0/dojo/date/stamp.js
+./../../release/dojo-release-1.5.0/dojo/parser.js
+./../../release/dojo-release-1.5.0/dijit/_Widget.js
+./../../release/dojo-release-1.5.0/dojo/string.js
+./../../release/dojo-release-1.5.0/dojo/cache.js
+./../../release/dojo-release-1.5.0/dijit/_Templated.js
+./../../release/dojo-release-1.5.0/dijit/_Container.js
+./../../release/dojo-release-1.5.0/dijit/_Contained.js
+./../../release/dojo-release-1.5.0/dijit/layout/_LayoutWidget.js
+./../../release/dojo-release-1.5.0/dijit/_CssStateMixin.js
+./../../release/dojo-release-1.5.0/dijit/form/_FormWidget.js
+./../../release/dojo-release-1.5.0/dijit/dijit.js
+./../../release/dojo-release-1.5.0/dijit/_KeyNavContainer.js
+./../../release/dojo-release-1.5.0/dijit/MenuItem.js
+./../../release/dojo-release-1.5.0/dijit/PopupMenuItem.js
+./../../release/dojo-release-1.5.0/dijit/CheckedMenuItem.js
+./../../release/dojo-release-1.5.0/dijit/MenuSeparator.js
+./../../release/dojo-release-1.5.0/dijit/Menu.js
+./../../release/dojo-release-1.5.0/dojox/html/metrics.js
+./../../release/dojo-release-1.5.0/dojox/grid/util.js
+./../../release/dojo-release-1.5.0/dojox/grid/_Scroller.js
+./../../release/dojo-release-1.5.0/dojox/grid/cells/_base.js
+./../../release/dojo-release-1.5.0/dojox/grid/cells.js
+./../../release/dojo-release-1.5.0/dojo/dnd/common.js
+./../../release/dojo-release-1.5.0/dojo/dnd/autoscroll.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Mover.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Moveable.js
+./../../release/dojo-release-1.5.0/dojox/grid/_Builder.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Container.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Selector.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Avatar.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Manager.js
+./../../release/dojo-release-1.5.0/dojo/dnd/Source.js
+./../../release/dojo-release-1.5.0/dojox/grid/_View.js
+./../../release/dojo-release-1.5.0/dojox/grid/_RowSelector.js
+./../../release/dojo-release-1.5.0/dojox/grid/_Layout.js
+./../../release/dojo-release-1.5.0/dojox/grid/_ViewManager.js
+./../../release/dojo-release-1.5.0/dojox/grid/_RowManager.js
+./../../release/dojo-release-1.5.0/dojox/grid/_FocusManager.js
+./../../release/dojo-release-1.5.0/dojox/grid/_EditManager.js
+./../../release/dojo-release-1.5.0/dojox/grid/Selection.js
+./../../release/dojo-release-1.5.0/dojox/grid/_Events.js
+./../../release/dojo-release-1.5.0/dojo/i18n.js
+./../../release/dojo-release-1.5.0/dojox/grid/_Grid.js
+./../../release/dojo-release-1.5.0/dojox/grid/DataSelection.js
+./../../release/dojo-release-1.5.0/dojox/grid/DataGrid.js
+
+../dojox/gfx.js:
+./../../release/dojo-release-1.5.0/dojox/gfx/matrix.js
+./../../release/dojo-release-1.5.0/dojox/gfx/_base.js
+./../../release/dojo-release-1.5.0/dojox/gfx.js
+
+../dojox/charting/widget/Chart2D.js:
+./../../release/dojo-release-1.5.0/dojo/window.js
+./../../release/dojo-release-1.5.0/dijit/_base/manager.js
+./../../release/dojo-release-1.5.0/dijit/_base/focus.js
+./../../release/dojo-release-1.5.0/dojo/AdapterRegistry.js
+./../../release/dojo-release-1.5.0/dijit/_base/place.js
+./../../release/dojo-release-1.5.0/dijit/_base/window.js
+./../../release/dojo-release-1.5.0/dijit/_base/popup.js
+./../../release/dojo-release-1.5.0/dijit/_base/scroll.js
+./../../release/dojo-release-1.5.0/dojo/uacss.js
+./../../release/dojo-release-1.5.0/dijit/_base/sniff.js
+./../../release/dojo-release-1.5.0/dijit/_base/typematic.js
+./../../release/dojo-release-1.5.0/dijit/_base/wai.js
+./../../release/dojo-release-1.5.0/dijit/_base.js
+./../../release/dojo-release-1.5.0/dijit/_Widget.js
+./../../release/dojo-release-1.5.0/dojox/gfx/matrix.js
+./../../release/dojo-release-1.5.0/dojox/gfx/_base.js
+./../../release/dojo-release-1.5.0/dojox/gfx.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional/lambda.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional/array.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional/object.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional/fold.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional/reversed.js
+./../../release/dojo-release-1.5.0/dojo/colors.js
+./../../release/dojo-release-1.5.0/dojox/color/_base.js
+./../../release/dojo-release-1.5.0/dojox/color.js
+./../../release/dojo-release-1.5.0/dojox/color/Palette.js
+./../../release/dojo-release-1.5.0/dojox/lang/utils.js
+./../../release/dojo-release-1.5.0/dojox/gfx/gradutils.js
+./../../release/dojo-release-1.5.0/dojox/charting/Theme.js
+./../../release/dojo-release-1.5.0/dojox/charting/Element.js
+./../../release/dojo-release-1.5.0/dojox/charting/Series.js
+./../../release/dojo-release-1.5.0/dojox/charting/scaler/common.js
+./../../release/dojo-release-1.5.0/dojox/charting/scaler/linear.js
+./../../release/dojo-release-1.5.0/dojox/charting/axis2d/common.js
+./../../release/dojo-release-1.5.0/dojox/charting/axis2d/Base.js
+./../../release/dojo-release-1.5.0/dojo/string.js
+./../../release/dojo-release-1.5.0/dojox/charting/axis2d/Invisible.js
+./../../release/dojo-release-1.5.0/dojox/charting/axis2d/Default.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/common.js
+./../../release/dojo-release-1.5.0/dojox/charting/scaler/primitive.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/_PlotEvents.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Base.js
+./../../release/dojo-release-1.5.0/dojox/gfx/fx.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Default.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Lines.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Areas.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Markers.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/MarkersOnly.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Scatter.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional/sequence.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Stacked.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/StackedLines.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/StackedAreas.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Columns.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/StackedColumns.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/ClusteredColumns.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Bars.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/StackedBars.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/ClusteredBars.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Grid.js
+./../../release/dojo-release-1.5.0/dojo/i18n.js
+./../../release/dojo-release-1.5.0/dojo/regexp.js
+./../../release/dojo-release-1.5.0/dojo/number.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Pie.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Bubble.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/Candlesticks.js
+./../../release/dojo-release-1.5.0/dojox/charting/plot2d/OHLC.js
+./../../release/dojo-release-1.5.0/dojox/charting/Chart2D.js
+./../../release/dojo-release-1.5.0/dojo/fx/easing.js
+./../../release/dojo-release-1.5.0/dojox/charting/action2d/Base.js
+./../../release/dojo-release-1.5.0/dojox/charting/action2d/Highlight.js
+./../../release/dojo-release-1.5.0/dojo/fx/Toggler.js
+./../../release/dojo-release-1.5.0/dojo/fx.js
+./../../release/dojo-release-1.5.0/dojox/charting/action2d/Magnify.js
+./../../release/dojo-release-1.5.0/dojox/lang/functional/scan.js
+./../../release/dojo-release-1.5.0/dojox/charting/action2d/MoveSlice.js
+./../../release/dojo-release-1.5.0/dojox/charting/action2d/Shake.js
+./../../release/dojo-release-1.5.0/dojo/date/stamp.js
+./../../release/dojo-release-1.5.0/dojo/parser.js
+./../../release/dojo-release-1.5.0/dojo/cache.js
+./../../release/dojo-release-1.5.0/dijit/_Templated.js
+./../../release/dojo-release-1.5.0/dijit/Tooltip.js
+./../../release/dojo-release-1.5.0/dojox/charting/action2d/Tooltip.js
+./../../release/dojo-release-1.5.0/dojox/charting/widget/Chart2D.js
+./../../release/dojo-release-1.5.0/dojox/charting/themes/ET/greys.js
+./../../release/dojo-release-1.5.0/dojox/charting/widget/Sparkline.js
+./../../release/dojo-release-1.5.0/dojox/charting/widget/Legend.js
+
+../dojox/dtl.js:
+./../../release/dojo-release-1.5.0/dojox/string/Builder.js
+./../../release/dojo-release-1.5.0/dojox/string/tokenize.js
+./../../release/dojo-release-1.5.0/dojox/dtl/_base.js
+./../../release/dojo-release-1.5.0/dojox/dtl.js
+./../../release/dojo-release-1.5.0/dojox/dtl/Context.js
+./../../release/dojo-release-1.5.0/dojox/dtl/tag/logic.js
+./../../release/dojo-release-1.5.0/dojox/dtl/tag/loop.js
+./../../release/dojo-release-1.5.0/dojo/date.js
+./../../release/dojo-release-1.5.0/dojox/date/php.js
+./../../release/dojo-release-1.5.0/dojox/dtl/utils/date.js
+./../../release/dojo-release-1.5.0/dojox/dtl/tag/date.js
+./../../release/dojo-release-1.5.0/dojox/dtl/tag/loader.js
+./../../release/dojo-release-1.5.0/dojox/dtl/tag/misc.js
+./../../release/dojo-release-1.5.0/dojox/dtl/ext-dojo/NodeList.js
Index: trunk/web/dojo/dojo/html.js
===================================================================
--- trunk/web/dojo/dojo/html.js	(revision 0)
+++ trunk/web/dojo/dojo/html.js	(revision 9)
@@ -0,0 +1,145 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.html"]){
+dojo._hasResource["dojo.html"]=true;
+dojo.provide("dojo.html");
+dojo.require("dojo.parser");
+(function(){
+var _1=0,d=dojo;
+dojo.html._secureForInnerHtml=function(_2){
+return _2.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");
+};
+dojo.html._emptyNode=dojo.empty;
+dojo.html._setNodeContent=function(_3,_4){
+d.empty(_3);
+if(_4){
+if(typeof _4=="string"){
+_4=d._toDom(_4,_3.ownerDocument);
+}
+if(!_4.nodeType&&d.isArrayLike(_4)){
+for(var _5=_4.length,i=0;i<_4.length;i=_5==_4.length?i+1:0){
+d.place(_4[i],_3,"last");
+}
+}else{
+d.place(_4,_3,"last");
+}
+}
+return _3;
+};
+dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,constructor:function(_6,_7){
+dojo.mixin(this,_6||{});
+_7=this.node=dojo.byId(this.node||_7);
+if(!this.id){
+this.id=["Setter",(_7)?_7.id||_7.tagName:"",_1++].join("_");
+}
+},set:function(_8,_9){
+if(undefined!==_8){
+this.content=_8;
+}
+if(_9){
+this._mixin(_9);
+}
+this.onBegin();
+this.setContent();
+this.onEnd();
+return this.node;
+},setContent:function(){
+var _a=this.node;
+if(!_a){
+throw new Error(this.declaredClass+": setContent given no node");
+}
+try{
+_a=dojo.html._setNodeContent(_a,this.content);
+}
+catch(e){
+var _b=this.onContentError(e);
+try{
+_a.innerHTML=_b;
+}
+catch(e){
+console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);
+}
+}
+this.node=_a;
+},empty:function(){
+if(this.parseResults&&this.parseResults.length){
+dojo.forEach(this.parseResults,function(w){
+if(w.destroy){
+w.destroy();
+}
+});
+delete this.parseResults;
+}
+dojo.html._emptyNode(this.node);
+},onBegin:function(){
+var _c=this.content;
+if(dojo.isString(_c)){
+if(this.cleanContent){
+_c=dojo.html._secureForInnerHtml(_c);
+}
+if(this.extractContent){
+var _d=_c.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_d){
+_c=_d[1];
+}
+}
+}
+this.empty();
+this.content=_c;
+return this.node;
+},onEnd:function(){
+if(this.parseContent){
+this._parse();
+}
+return this.node;
+},tearDown:function(){
+delete this.parseResults;
+delete this.node;
+delete this.content;
+},onContentError:function(_e){
+return "Error occured setting content: "+_e;
+},_mixin:function(_f){
+var _10={},key;
+for(key in _f){
+if(key in _10){
+continue;
+}
+this[key]=_f[key];
+}
+},_parse:function(){
+var _11=this.node;
+try{
+this.parseResults=dojo.parser.parse({rootNode:_11,dir:this.dir,lang:this.lang});
+}
+catch(e){
+this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);
+}
+},_onError:function(_12,err,_13){
+var _14=this["on"+_12+"Error"].call(this,err);
+if(_13){
+console.error(_13,err);
+}else{
+if(_14){
+dojo.html._setNodeContent(this.node,_14,true);
+}
+}
+}});
+dojo.html.set=function(_15,_16,_17){
+if(undefined==_16){
+console.warn("dojo.html.set: no cont argument provided, using empty string");
+_16="";
+}
+if(!_17){
+return dojo.html._setNodeContent(_15,_16,true);
+}else{
+var op=new dojo.html._ContentSetter(dojo.mixin(_17,{content:_16,node:_15}));
+return op.set();
+}
+};
+})();
+}
Index: trunk/web/dojo/dojo/_firebug/tab_rgt_norm.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/_firebug/tab_rgt_norm.png
===================================================================
--- trunk/web/dojo/dojo/_firebug/tab_rgt_norm.png	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/tab_rgt_norm.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/_firebug/tab_rgt_norm.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/_firebug/tab_rgt_over.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/_firebug/tab_rgt_over.png
===================================================================
--- trunk/web/dojo/dojo/_firebug/tab_rgt_over.png	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/tab_rgt_over.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/_firebug/tab_rgt_over.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/_firebug/warningIcon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/_firebug/warningIcon.png
===================================================================
--- trunk/web/dojo/dojo/_firebug/warningIcon.png	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/warningIcon.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/_firebug/warningIcon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/_firebug/LICENSE
===================================================================
--- trunk/web/dojo/dojo/_firebug/LICENSE	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/LICENSE	(revision 9)
@@ -0,0 +1,37 @@
+License Disclaimer:
+
+All contents of this directory are Copyright (c) the Dojo Foundation, with the
+following exceptions:
+-------------------------------------------------------------------------------
+
+firebug.html, firebug.js, errIcon.png, infoIcon.png, warningIcon.png:
+	* Copyright (c) 2006-2007, Joe Hewitt, All rights reserved.
+	  Distributed under the terms of the BSD License (see below)
+
+-------------------------------------------------------------------------------
+
+Copyright (c) 2006-2007, Joe Hewitt
+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 Dojo Foundation 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.
Index: trunk/web/dojo/dojo/_firebug/errorIcon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/_firebug/errorIcon.png
===================================================================
--- trunk/web/dojo/dojo/_firebug/errorIcon.png	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/errorIcon.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/_firebug/errorIcon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/_firebug/infoIcon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/_firebug/infoIcon.png
===================================================================
--- trunk/web/dojo/dojo/_firebug/infoIcon.png	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/infoIcon.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/_firebug/infoIcon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/_firebug/tab_lft_norm.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/_firebug/tab_lft_norm.png
===================================================================
--- trunk/web/dojo/dojo/_firebug/tab_lft_norm.png	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/tab_lft_norm.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/_firebug/tab_lft_norm.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/_firebug/tab_lft_over.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojo/_firebug/tab_lft_over.png
===================================================================
--- trunk/web/dojo/dojo/_firebug/tab_lft_over.png	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/tab_lft_over.png	(revision 9)

Property changes on: trunk/web/dojo/dojo/_firebug/tab_lft_over.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojo/_firebug/firebug.css
===================================================================
--- trunk/web/dojo/dojo/_firebug/firebug.css	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/firebug.css	(revision 9)
@@ -0,0 +1,208 @@
+.firebug {
+	margin: 0;
+	background:#fff;
+	font-family: Lucida Grande, Tahoma, sans-serif;
+	font-size: 11px;
+	overflow: hidden;
+	border: 1px solid black;
+	position: relative;
+}
+.firebug a {
+	text-decoration: none;
+}
+.firebug a:hover {
+	text-decoration: underline;
+}
+.firebug a:visited{
+	color:#0000FF;
+}
+.firebug #firebugToolbar {
+	height: 18px;
+	line-height:18px;
+	border-top: 1px solid ThreeDHighlight;
+	border-bottom: 1px solid ThreeDShadow;
+	padding: 2px 6px;
+	
+	background:#f0f0f0;
+}
+.firebug #firebugLog, .firebug #objectLog {
+	overflow: auto;
+	position: absolute;
+	left: 0;
+	width: 100%;
+}
+#objectLog{
+	overflow:scroll;
+	height:258px;
+}
+.firebug #firebugCommandLine {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 18px;
+	border: none;
+	border-top: 1px solid ThreeDShadow;
+}
+.firebug .logRow {
+	position: relative;
+	border-bottom: 1px solid #D7D7D7;
+	padding: 2px 4px 1px 6px;
+	background-color: #FFFFFF;
+}
+.firebug .logRow-command {
+	font-family: Monaco, monospace;
+	color: blue;
+}
+.firebug .objectBox-null {
+	padding: 0 2px;
+	border: 1px solid #666666;
+	background-color: #888888;
+	color: #FFFFFF;
+}
+.firebug .objectBox-string {
+	font-family: Monaco, monospace;
+	color: red;
+	white-space: pre;
+}
+.firebug .objectBox-number {
+	color: #000088;
+}
+.firebug .objectBox-function {
+	font-family: Monaco, monospace;
+	color: DarkGreen;
+}
+.firebug .objectBox-object {
+	color: DarkGreen;
+	font-weight: bold;
+}
+.firebug .logRow-info,
+.firebug .logRow-error,
+.firebug .logRow-warning
+ {
+	background: #00FFFF no-repeat 2px 2px;
+	padding-left: 20px;
+	padding-bottom: 3px;
+}
+.firebug .logRow-info {
+	background: #FFF url(infoIcon.png) no-repeat 2px 2px;
+	padding-left: 20px;
+	padding-bottom: 3px;
+}
+.firebug .logRow-warning {
+	
+	background: #00FFFF url(warningIcon.png) no-repeat 2px 2px;
+	padding-left: 20px;
+	padding-bottom: 3px;
+}
+.firebug .logRow-error {
+	background: LightYellow url(errorIcon.png) no-repeat 2px 2px;
+	padding-left: 20px;
+	padding-bottom: 3px;
+}
+.firebug .errorMessage {
+	vertical-align: top;
+	color: #FF0000;
+}
+.firebug .objectBox-sourceLink {
+	position: absolute;
+	right: 4px;
+	top: 2px;
+	padding-left: 8px;
+	font-family: Lucida Grande, sans-serif;
+	font-weight: bold;
+	color: #0000FF;
+}
+.firebug .logRow-group {
+	background: #EEEEEE;
+	border-bottom: none;
+}
+.firebug .logGroup {
+	background: #EEEEEE;
+}
+.firebug .logGroupBox {
+	margin-left: 24px;
+	border-top: 1px solid #D7D7D7;
+	border-left: 1px solid #D7D7D7;
+}
+.firebug .selectorTag,
+.firebug .selectorId,
+.firebug .selectorClass {
+	font-family: Monaco, monospace;
+	font-weight: normal;
+}
+.firebug .selectorTag {
+	color: #0000FF;
+}
+.firebug .selectorId {
+	color: DarkBlue;
+}
+.firebug .selectorClass {
+	color: red;
+}
+.firebug .objectBox-element {
+	font-family: Monaco, monospace;
+	color: #000088;
+}
+.firebug .nodeChildren {
+	margin-left: 16px;
+}
+.firebug .nodeTag {
+	color: blue;
+}
+.firebug .nodeValue {
+	color: #FF0000;
+	font-weight: normal;
+}
+.firebug .nodeText,
+.firebug .nodeComment {
+	margin: 0 2px;
+	vertical-align: top;
+}
+.firebug .nodeText {
+	color: #333333;
+}
+.firebug .nodeComment {
+	color: DarkGreen;
+}
+.firebug .propertyNameCell {
+	vertical-align: top;
+}
+.firebug .propertyName {
+	font-weight: bold;
+}
+#firebugToolbar ul.tabs{
+	margin:0 !important;
+	padding:0;
+}
+#firebugToolbar ul.tabs li{
+	list-style:none;
+	background:transparent url(tab_lft_norm.png) no-repeat left;
+	line-height:18px;
+	float:left;
+	margin-left:5px;
+}
+#firebugToolbar ul.tabs li.right{
+	float:right;
+	margin-right:5px;
+	margin-left:0;
+}
+#firebugToolbar ul.tabs li.gap{
+	margin-left:20px;
+}
+#firebugToolbar .tabs a{
+	text-decoration:none;
+	background:transparent url(tab_rgt_norm.png) no-repeat right;
+	line-height:18px;
+	padding:3px 9px 4px 0px;
+	margin-left:9px;
+	color:#333333;
+}
+#firebugToolbar .tabs li:hover{
+	background:transparent url(tab_lft_over.png) no-repeat left;
+}
+#firebugToolbar .tabs a:hover{
+	text-decoration:none;
+	background:transparent url(tab_rgt_over.png) no-repeat right;
+	color:#FFFFFF;
+}
Index: trunk/web/dojo/dojo/_firebug/firebug.js
===================================================================
--- trunk/web/dojo/dojo/_firebug/firebug.js	(revision 0)
+++ trunk/web/dojo/dojo/_firebug/firebug.js	(revision 9)
@@ -0,0 +1,914 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._firebug.firebug"]){
+dojo._hasResource["dojo._firebug.firebug"]=true;
+dojo.provide("dojo._firebug.firebug");
+dojo.deprecated=function(_1,_2,_3){
+var _4="DEPRECATED: "+_1;
+if(_2){
+_4+=" "+_2;
+}
+if(_3){
+_4+=" -- will be removed in version: "+_3;
+}
+console.warn(_4);
+};
+dojo.experimental=function(_5,_6){
+var _7="EXPERIMENTAL: "+_5+" -- APIs subject to change without notice.";
+if(_6){
+_7+=" "+_6;
+}
+console.warn(_7);
+};
+(function(){
+var _8=(/Trident/.test(window.navigator.userAgent));
+if(_8){
+var _9=["log","info","debug","warn","error"];
+for(var i=0;i<_9.length;i++){
+var m=_9[i];
+var n="_"+_9[i];
+console[n]=console[m];
+console[m]=(function(){
+var _a=n;
+return function(){
+console[_a](Array.prototype.slice.call(arguments).join(" "));
+};
+})();
+}
+try{
+console.clear();
+}
+catch(e){
+}
+}
+if(!dojo.isFF&&(!dojo.isChrome||dojo.isChrome<3)&&(!dojo.isSafari||dojo.isSafari<4)&&!_8&&!window.firebug&&(typeof console!="undefined"&&!console.firebug)&&!dojo.config.useCustomLogger&&!dojo.isAIR){
+try{
+if(window!=window.parent){
+if(window.parent["console"]){
+window.console=window.parent.console;
+}
+return;
+}
+}
+catch(e){
+}
+var _b=document;
+var _c=window;
+var _d=0;
+var _e=null;
+var _f=null;
+var _10=null;
+var _11=null;
+var _12=null;
+var _13=null;
+var _14=false;
+var _15=[];
+var _16=[];
+var _17={};
+var _18={};
+var _19=null;
+var _1a;
+var _1b;
+var _1c=false;
+var _1d=null;
+var _1e=document.createElement("div");
+var _1f;
+var _20;
+window.console={_connects:[],log:function(){
+_21(arguments,"");
+},debug:function(){
+_21(arguments,"debug");
+},info:function(){
+_21(arguments,"info");
+},warn:function(){
+_21(arguments,"warning");
+},error:function(){
+_21(arguments,"error");
+},assert:function(_22,_23){
+if(!_22){
+var _24=[];
+for(var i=1;i<arguments.length;++i){
+_24.push(arguments[i]);
+}
+_21(_24.length?_24:["Assertion Failure"],"error");
+throw _23?_23:"Assertion Failure";
+}
+},dir:function(obj){
+var str=_25(obj);
+str=str.replace(/\n/g,"<br />");
+str=str.replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;");
+_26([str],"dir");
+},dirxml:function(_27){
+var _28=[];
+_29(_27,_28);
+_26(_28,"dirxml");
+},group:function(){
+_26(arguments,"group",_2a);
+},groupEnd:function(){
+_26(arguments,"",_2b);
+},time:function(_2c){
+_17[_2c]=new Date().getTime();
+},timeEnd:function(_2d){
+if(_2d in _17){
+var _2e=(new Date()).getTime()-_17[_2d];
+_21([_2d+":",_2e+"ms"]);
+delete _17[_2d];
+}
+},count:function(_2f){
+if(!_18[_2f]){
+_18[_2f]=0;
+}
+_18[_2f]++;
+_21([_2f+": "+_18[_2f]]);
+},trace:function(_30){
+var _31=_30||3;
+var f=console.trace.caller;
+for(var i=0;i<_31;i++){
+var _32=f.toString();
+var _33=[];
+for(var a=0;a<f.arguments.length;a++){
+_33.push(f.arguments[a]);
+}
+if(f.arguments.length){
+}else{
+}
+f=f.caller;
+}
+},profile:function(){
+this.warn(["profile() not supported."]);
+},profileEnd:function(){
+},clear:function(){
+if(_f){
+while(_f.childNodes.length){
+dojo.destroy(_f.firstChild);
+}
+}
+dojo.forEach(this._connects,dojo.disconnect);
+},open:function(){
+_34(true);
+},close:function(){
+if(_14){
+_34();
+}
+},_restoreBorder:function(){
+if(_1f){
+_1f.style.border=_20;
+}
+},openDomInspector:function(){
+_1c=true;
+_f.style.display="none";
+_19.style.display="block";
+_10.style.display="none";
+document.body.style.cursor="pointer";
+_1a=dojo.connect(document,"mousemove",function(evt){
+if(!_1c){
+return;
+}
+if(!_1d){
+_1d=setTimeout(function(){
+_1d=null;
+},50);
+}else{
+return;
+}
+var _35=evt.target;
+if(_35&&(_1f!==_35)){
+var _36=true;
+console._restoreBorder();
+var _37=[];
+_29(_35,_37);
+_19.innerHTML=_37.join("");
+_1f=_35;
+_20=_1f.style.border;
+_1f.style.border="#0000FF 1px solid";
+}
+});
+setTimeout(function(){
+_1b=dojo.connect(document,"click",function(evt){
+document.body.style.cursor="";
+_1c=!_1c;
+dojo.disconnect(_1b);
+});
+},30);
+},_closeDomInspector:function(){
+document.body.style.cursor="";
+dojo.disconnect(_1a);
+dojo.disconnect(_1b);
+_1c=false;
+console._restoreBorder();
+},openConsole:function(){
+_f.style.display="block";
+_19.style.display="none";
+_10.style.display="none";
+console._closeDomInspector();
+},openObjectInspector:function(){
+_f.style.display="none";
+_19.style.display="none";
+_10.style.display="block";
+console._closeDomInspector();
+},recss:function(){
+var i,a,s;
+a=document.getElementsByTagName("link");
+for(i=0;i<a.length;i++){
+s=a[i];
+if(s.rel.toLowerCase().indexOf("stylesheet")>=0&&s.href){
+var h=s.href.replace(/(&|%5C?)forceReload=\d+/,"");
+s.href=h+(h.indexOf("?")>=0?"&":"?")+"forceReload="+new Date().valueOf();
+}
+}
+}};
+function _34(_38){
+_14=_38||!_14;
+if(_e){
+_e.style.display=_14?"block":"none";
+}
+};
+function _39(){
+_34(true);
+if(_12){
+_12.focus();
+}
+};
+function _3a(x,y,w,h){
+var win=window.open("","_firebug","status=0,menubar=0,resizable=1,top="+y+",left="+x+",width="+w+",height="+h+",scrollbars=1,addressbar=0");
+if(!win){
+var msg="Firebug Lite could not open a pop-up window, most likely because of a blocker.\n"+"Either enable pop-ups for this domain, or change the djConfig to popup=false.";
+alert(msg);
+}
+_3b(win);
+var _3c=win.document;
+var _3d="<html style=\"height:100%;\"><head><title>Firebug Lite</title></head>\n"+"<body bgColor=\"#ccc\" style=\"height:97%;\" onresize=\"opener.onFirebugResize()\">\n"+"<div id=\"fb\"></div>"+"</body></html>";
+_3c.write(_3d);
+_3c.close();
+return win;
+};
+function _3b(wn){
+var d=new Date();
+d.setTime(d.getTime()+(60*24*60*60*1000));
+d=d.toUTCString();
+var dc=wn.document,_3e;
+if(wn.innerWidth){
+_3e=function(){
+return {w:wn.innerWidth,h:wn.innerHeight};
+};
+}else{
+if(dc.documentElement&&dc.documentElement.clientWidth){
+_3e=function(){
+return {w:dc.documentElement.clientWidth,h:dc.documentElement.clientHeight};
+};
+}else{
+if(dc.body){
+_3e=function(){
+return {w:dc.body.clientWidth,h:dc.body.clientHeight};
+};
+}
+}
+}
+window.onFirebugResize=function(){
+_4c(_3e().h);
+clearInterval(wn._firebugWin_resize);
+wn._firebugWin_resize=setTimeout(function(){
+var x=wn.screenLeft,y=wn.screenTop,w=wn.outerWidth||wn.document.body.offsetWidth,h=wn.outerHeight||wn.document.body.offsetHeight;
+document.cookie="_firebugPosition="+[x,y,w,h].join(",")+"; expires="+d+"; path=/";
+},5000);
+};
+};
+function _3f(){
+if(_e){
+return;
+}
+if(dojo.config.popup){
+var _40="100%";
+var _41=document.cookie.match(/(?:^|; )_firebugPosition=([^;]*)/);
+var p=_41?_41[1].split(","):[2,2,320,480];
+_c=_3a(p[0],p[1],p[2],p[3]);
+_b=_c.document;
+dojo.config.debugContainerId="fb";
+_c.console=window.console;
+_c.dojo=window.dojo;
+}else{
+_b=document;
+_40=(dojo.config.debugHeight||300)+"px";
+}
+var _42=_b.createElement("link");
+_42.href=dojo.moduleUrl("dojo._firebug","firebug.css");
+_42.rel="stylesheet";
+_42.type="text/css";
+var _43=_b.getElementsByTagName("head");
+if(_43){
+_43=_43[0];
+}
+if(!_43){
+_43=_b.getElementsByTagName("html")[0];
+}
+if(dojo.isIE){
+window.setTimeout(function(){
+_43.appendChild(_42);
+},0);
+}else{
+_43.appendChild(_42);
+}
+if(dojo.config.debugContainerId){
+_e=_b.getElementById(dojo.config.debugContainerId);
+}
+if(!_e){
+_e=_b.createElement("div");
+_b.body.appendChild(_e);
+}
+_e.className+=" firebug";
+_e.style.height=_40;
+_e.style.display=(_14?"block":"none");
+var _44=function(_45,_46,_47,_48){
+return "<li class=\""+_48+"\"><a href=\"javascript:void(0);\" onclick=\"console."+_47+"(); return false;\" title=\""+_46+"\">"+_45+"</a></li>";
+};
+_e.innerHTML="<div id=\"firebugToolbar\">"+"  <ul id=\"fireBugTabs\" class=\"tabs\">"+_44("Clear","Remove All Console Logs","clear","")+_44("ReCSS","Refresh CSS without reloading page","recss","")+_44("Console","Show Console Logs","openConsole","gap")+_44("DOM","Show DOM Inspector","openDomInspector","")+_44("Object","Show Object Inspector","openObjectInspector","")+((dojo.config.popup)?"":_44("Close","Close the console","close","gap"))+"\t</ul>"+"</div>"+"<input type=\"text\" id=\"firebugCommandLine\" />"+"<div id=\"firebugLog\"></div>"+"<div id=\"objectLog\" style=\"display:none;\">Click on an object in the Log display</div>"+"<div id=\"domInspect\" style=\"display:none;\">Hover over HTML elements in the main page. Click to hold selection.</div>";
+_13=_b.getElementById("firebugToolbar");
+_12=_b.getElementById("firebugCommandLine");
+_49(_12,"keydown",_4a);
+_49(_b,dojo.isIE||dojo.isSafari?"keydown":"keypress",_4b);
+_f=_b.getElementById("firebugLog");
+_10=_b.getElementById("objectLog");
+_19=_b.getElementById("domInspect");
+_11=_b.getElementById("fireBugTabs");
+_4c();
+_4d();
+};
+dojo.addOnLoad(_3f);
+function _4e(){
+_b=null;
+if(_c.console){
+_c.console.clear();
+}
+_c=null;
+_e=null;
+_f=null;
+_10=null;
+_19=null;
+_12=null;
+_15=[];
+_16=[];
+_17={};
+};
+function _4f(){
+var _50=_12.value;
+_12.value="";
+_26([">  ",_50],"command");
+var _51;
+try{
+_51=eval(_50);
+}
+catch(e){
+}
+};
+function _4c(h){
+var _52=25;
+var _53=h?h-(_52+_12.offsetHeight+25+(h*0.01))+"px":(_e.offsetHeight-_52-_12.offsetHeight)+"px";
+_f.style.top=_52+"px";
+_f.style.height=_53;
+_10.style.height=_53;
+_10.style.top=_52+"px";
+_19.style.height=_53;
+_19.style.top=_52+"px";
+_12.style.bottom=0;
+dojo.addOnWindowUnload(_4e);
+};
+function _26(_54,_55,_56){
+if(_f){
+_57(_54,_55,_56);
+}else{
+_15.push([_54,_55,_56]);
+}
+};
+function _4d(){
+var _58=_15;
+_15=[];
+for(var i=0;i<_58.length;++i){
+_57(_58[i][0],_58[i][1],_58[i][2]);
+}
+};
+function _57(_59,_5a,_5b){
+var _5c=_f.scrollTop+_f.offsetHeight>=_f.scrollHeight;
+_5b=_5b||_5d;
+_5b(_59,_5a);
+if(_5c){
+_f.scrollTop=_f.scrollHeight-_f.offsetHeight;
+}
+};
+function _5e(row){
+var _5f=_16.length?_16[_16.length-1]:_f;
+_5f.appendChild(row);
+};
+function _5d(_60,_61){
+var row=_f.ownerDocument.createElement("div");
+row.className="logRow"+(_61?" logRow-"+_61:"");
+row.innerHTML=_60.join("");
+_5e(row);
+};
+function _2a(_62,_63){
+_21(_62,_63);
+var _64=_f.ownerDocument.createElement("div");
+_64.className="logGroupBox";
+_5e(_64);
+_16.push(_64);
+};
+function _2b(){
+_16.pop();
+};
+function _21(_65,_66){
+var _67=[];
+var _68=_65[0];
+var _69=0;
+if(typeof (_68)!="string"){
+_68="";
+_69=-1;
+}
+var _6a=_6b(_68);
+for(var i=0;i<_6a.length;++i){
+var _6c=_6a[i];
+if(_6c&&typeof _6c=="object"){
+_6c.appender(_65[++_69],_67);
+}else{
+_6d(_6c,_67);
+}
+}
+var ids=[];
+var obs=[];
+for(i=_69+1;i<_65.length;++i){
+_6d(" ",_67);
+var _6e=_65[i];
+if(_6e===undefined||_6e===null){
+_6f(_6e,_67);
+}else{
+if(typeof (_6e)=="string"){
+_6d(_6e,_67);
+}else{
+if(_6e instanceof Date){
+_6d(_6e.toString(),_67);
+}else{
+if(_6e.nodeType==9){
+_6d("[ XmlDoc ]",_67);
+}else{
+var id="_a"+_d++;
+ids.push(id);
+obs.push(_6e);
+var str="<a id=\""+id+"\" href=\"javascript:void(0);\">"+_70(_6e)+"</a>";
+_71(str,_67);
+}
+}
+}
+}
+}
+_26(_67,_66);
+for(i=0;i<ids.length;i++){
+var btn=_b.getElementById(ids[i]);
+if(!btn){
+continue;
+}
+btn.obj=obs[i];
+_c.console._connects.push(dojo.connect(btn,"onclick",function(){
+console.openObjectInspector();
+try{
+_25(this.obj);
+}
+catch(e){
+this.obj=e;
+}
+_10.innerHTML="<pre>"+_25(this.obj)+"</pre>";
+}));
+}
+};
+function _6b(_72){
+var _73=[];
+var reg=/((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/;
+var _74={s:_6d,d:_75,i:_75,f:_76};
+for(var m=reg.exec(_72);m;m=reg.exec(_72)){
+var _77=m[8]?m[8]:m[5];
+var _78=_77 in _74?_74[_77]:_79;
+var _7a=m[3]?parseInt(m[3]):(m[4]=="."?-1:0);
+_73.push(_72.substr(0,m[0][0]=="%"?m.index:m.index+1));
+_73.push({appender:_78,precision:_7a});
+_72=_72.substr(m.index+m[0].length);
+}
+_73.push(_72);
+return _73;
+};
+function _7b(_7c){
+function _7d(ch){
+switch(ch){
+case "<":
+return "&lt;";
+case ">":
+return "&gt;";
+case "&":
+return "&amp;";
+case "'":
+return "&#39;";
+case "\"":
+return "&quot;";
+}
+return "?";
+};
+return String(_7c).replace(/[<>&"']/g,_7d);
+};
+function _7e(_7f){
+try{
+return _7f+"";
+}
+catch(e){
+return null;
+}
+};
+function _71(_80,_81){
+_81.push(_7e(_80));
+};
+function _6d(_82,_83){
+_83.push(_7b(_7e(_82)));
+};
+function _6f(_84,_85){
+_85.push("<span class=\"objectBox-null\">",_7b(_7e(_84)),"</span>");
+};
+function _86(_87,_88){
+_88.push("<span class=\"objectBox-string\">&quot;",_7b(_7e(_87)),"&quot;</span>");
+};
+function _75(_89,_8a){
+_8a.push("<span class=\"objectBox-number\">",_7b(_7e(_89)),"</span>");
+};
+function _76(_8b,_8c){
+_8c.push("<span class=\"objectBox-number\">",_7b(_7e(_8b)),"</span>");
+};
+function _8d(_8e,_8f){
+_8f.push("<span class=\"objectBox-function\">",_70(_8e),"</span>");
+};
+function _79(_90,_91){
+try{
+if(_90===undefined){
+_6f("undefined",_91);
+}else{
+if(_90===null){
+_6f("null",_91);
+}else{
+if(typeof _90=="string"){
+_86(_90,_91);
+}else{
+if(typeof _90=="number"){
+_75(_90,_91);
+}else{
+if(typeof _90=="function"){
+_8d(_90,_91);
+}else{
+if(_90.nodeType==1){
+_92(_90,_91);
+}else{
+if(typeof _90=="object"){
+_93(_90,_91);
+}else{
+_6d(_90,_91);
+}
+}
+}
+}
+}
+}
+}
+}
+catch(e){
+}
+};
+function _93(_94,_95){
+var _96=_7e(_94);
+var _97=/\[object (.*?)\]/;
+var m=_97.exec(_96);
+_95.push("<span class=\"objectBox-object\">",m?m[1]:_96,"</span>");
+};
+function _92(_98,_99){
+_99.push("<span class=\"objectBox-selector\">");
+_99.push("<span class=\"selectorTag\">",_7b(_98.nodeName.toLowerCase()),"</span>");
+if(_98.id){
+_99.push("<span class=\"selectorId\">#",_7b(_98.id),"</span>");
+}
+if(_98.className){
+_99.push("<span class=\"selectorClass\">.",_7b(_98.className),"</span>");
+}
+_99.push("</span>");
+};
+function _29(_9a,_9b){
+if(_9a.nodeType==1){
+_9b.push("<div class=\"objectBox-element\">","&lt;<span class=\"nodeTag\">",_9a.nodeName.toLowerCase(),"</span>");
+for(var i=0;i<_9a.attributes.length;++i){
+var _9c=_9a.attributes[i];
+if(!_9c.specified){
+continue;
+}
+_9b.push("&nbsp;<span class=\"nodeName\">",_9c.nodeName.toLowerCase(),"</span>=&quot;<span class=\"nodeValue\">",_7b(_9c.nodeValue),"</span>&quot;");
+}
+if(_9a.firstChild){
+_9b.push("&gt;</div><div class=\"nodeChildren\">");
+for(var _9d=_9a.firstChild;_9d;_9d=_9d.nextSibling){
+_29(_9d,_9b);
+}
+_9b.push("</div><div class=\"objectBox-element\">&lt;/<span class=\"nodeTag\">",_9a.nodeName.toLowerCase(),"&gt;</span></div>");
+}else{
+_9b.push("/&gt;</div>");
+}
+}else{
+if(_9a.nodeType==3){
+_9b.push("<div class=\"nodeText\">",_7b(_9a.nodeValue),"</div>");
+}
+}
+};
+function _49(_9e,_9f,_a0){
+if(document.all){
+_9e.attachEvent("on"+_9f,_a0);
+}else{
+_9e.addEventListener(_9f,_a0,false);
+}
+};
+function _a1(_a2,_a3,_a4){
+if(document.all){
+_a2.detachEvent("on"+_a3,_a4);
+}else{
+_a2.removeEventListener(_a3,_a4,false);
+}
+};
+function _a5(_a6){
+if(document.all){
+_a6.cancelBubble=true;
+}else{
+_a6.stopPropagation();
+}
+};
+function _a7(msg,_a8,_a9){
+var _aa=_a8.lastIndexOf("/");
+var _ab=_aa==-1?_a8:_a8.substr(_aa+1);
+var _ac=["<span class=\"errorMessage\">",msg,"</span>","<div class=\"objectBox-sourceLink\">",_ab," (line ",_a9,")</div>"];
+_26(_ac,"error");
+};
+var _ad=new Date().getTime();
+function _4b(_ae){
+var _af=(new Date()).getTime();
+if(_af>_ad+200){
+_ae=dojo.fixEvent(_ae);
+var _b0=dojo.keys;
+var ekc=_ae.keyCode;
+_ad=_af;
+if(ekc==_b0.F12){
+_34();
+}else{
+if((ekc==_b0.NUMPAD_ENTER||ekc==76)&&_ae.shiftKey&&(_ae.metaKey||_ae.ctrlKey)){
+_39();
+}else{
+return;
+}
+}
+_a5(_ae);
+}
+};
+function _4a(e){
+var dk=dojo.keys;
+if(e.keyCode==13&&_12.value){
+_b1(_12.value);
+_4f();
+}else{
+if(e.keyCode==27){
+_12.value="";
+}else{
+if(e.keyCode==dk.UP_ARROW||e.charCode==dk.UP_ARROW){
+_b2("older");
+}else{
+if(e.keyCode==dk.DOWN_ARROW||e.charCode==dk.DOWN_ARROW){
+_b2("newer");
+}else{
+if(e.keyCode==dk.HOME||e.charCode==dk.HOME){
+_b3=1;
+_b2("older");
+}else{
+if(e.keyCode==dk.END||e.charCode==dk.END){
+_b3=999999;
+_b2("newer");
+}
+}
+}
+}
+}
+}
+};
+var _b3=-1;
+var _b4=null;
+function _b1(_b5){
+var _b6=_b7("firebug_history");
+_b6=(_b6)?dojo.fromJson(_b6):[];
+var pos=dojo.indexOf(_b6,_b5);
+if(pos!=-1){
+_b6.splice(pos,1);
+}
+_b6.push(_b5);
+_b7("firebug_history",dojo.toJson(_b6),30);
+while(_b6.length&&!_b7("firebug_history")){
+_b6.shift();
+_b7("firebug_history",dojo.toJson(_b6),30);
+}
+_b4=null;
+_b3=-1;
+};
+function _b2(_b8){
+var _b9=_b7("firebug_history");
+_b9=(_b9)?dojo.fromJson(_b9):[];
+if(!_b9.length){
+return;
+}
+if(_b4===null){
+_b4=_12.value;
+}
+if(_b3==-1){
+_b3=_b9.length;
+}
+if(_b8=="older"){
+--_b3;
+if(_b3<0){
+_b3=0;
+}
+}else{
+if(_b8=="newer"){
+++_b3;
+if(_b3>_b9.length){
+_b3=_b9.length;
+}
+}
+}
+if(_b3==_b9.length){
+_12.value=_b4;
+_b4=null;
+}else{
+_12.value=_b9[_b3];
+}
+};
+function _b7(_ba,_bb){
+var c=document.cookie;
+if(arguments.length==1){
+var _bc=c.match(new RegExp("(?:^|; )"+_ba+"=([^;]*)"));
+return _bc?decodeURIComponent(_bc[1]):undefined;
+}else{
+var d=new Date();
+d.setMonth(d.getMonth()+1);
+document.cookie=_ba+"="+encodeURIComponent(_bb)+((d.toUtcString)?"; expires="+d.toUTCString():"");
+}
+};
+function _bd(it){
+return it&&it instanceof Array||typeof it=="array";
+};
+function _be(o){
+var cnt=0;
+for(var nm in o){
+cnt++;
+}
+return cnt;
+};
+function _25(o,i,txt,_bf){
+var ind=" \t";
+txt=txt||"";
+i=i||ind;
+_bf=_bf||[];
+var _c0;
+if(o&&o.nodeType==1){
+var _c1=[];
+_29(o,_c1);
+return _c1.join("");
+}
+var br=",\n",cnt=0,_c2=_be(o);
+if(o instanceof Date){
+return i+o.toString()+br;
+}
+looking:
+for(var nm in o){
+cnt++;
+if(cnt==_c2){
+br="\n";
+}
+if(o[nm]===window||o[nm]===document){
+continue;
+}else{
+if(o[nm]===null){
+txt+=i+nm+" : NULL"+br;
+}else{
+if(o[nm]&&o[nm].nodeType){
+if(o[nm].nodeType==1){
+}else{
+if(o[nm].nodeType==3){
+txt+=i+nm+" : [ TextNode "+o[nm].data+" ]"+br;
+}
+}
+}else{
+if(typeof o[nm]=="object"&&(o[nm] instanceof String||o[nm] instanceof Number||o[nm] instanceof Boolean)){
+txt+=i+nm+" : "+o[nm]+","+br;
+}else{
+if(o[nm] instanceof Date){
+txt+=i+nm+" : "+o[nm].toString()+br;
+}else{
+if(typeof (o[nm])=="object"&&o[nm]){
+for(var j=0,_c3;_c3=_bf[j];j++){
+if(o[nm]===_c3){
+txt+=i+nm+" : RECURSION"+br;
+continue looking;
+}
+}
+_bf.push(o[nm]);
+_c0=(_bd(o[nm]))?["[","]"]:["{","}"];
+txt+=i+nm+" : "+_c0[0]+"\n";
+txt+=_25(o[nm],i+ind,"",_bf);
+txt+=i+_c0[1]+br;
+}else{
+if(typeof o[nm]=="undefined"){
+txt+=i+nm+" : undefined"+br;
+}else{
+if(nm=="toString"&&typeof o[nm]=="function"){
+var _c4=o[nm]();
+if(typeof _c4=="string"&&_c4.match(/function ?(.*?)\(/)){
+_c4=_7b(_70(o[nm]));
+}
+txt+=i+nm+" : "+_c4+br;
+}else{
+txt+=i+nm+" : "+_7b(_70(o[nm]))+br;
+}
+}
+}
+}
+}
+}
+}
+}
+}
+return txt;
+};
+function _70(obj){
+var _c5=(obj instanceof Error);
+if(obj.nodeType==1){
+return _7b("< "+obj.tagName.toLowerCase()+" id=\""+obj.id+"\" />");
+}
+if(obj.nodeType==3){
+return _7b("[TextNode: \""+obj.nodeValue+"\"]");
+}
+var nm=(obj&&(obj.id||obj.name||obj.ObjectID||obj.widgetId));
+if(!_c5&&nm){
+return "{"+nm+"}";
+}
+var _c6=2;
+var _c7=4;
+var cnt=0;
+if(_c5){
+nm="[ Error: "+(obj.message||obj.description||obj)+" ]";
+}else{
+if(_bd(obj)){
+nm="["+obj.slice(0,_c7).join(",");
+if(obj.length>_c7){
+nm+=" ... ("+obj.length+" items)";
+}
+nm+="]";
+}else{
+if(typeof obj=="function"){
+nm=obj+"";
+var reg=/function\s*([^\(]*)(\([^\)]*\))[^\{]*\{/;
+var m=reg.exec(nm);
+if(m){
+if(!m[1]){
+m[1]="function";
+}
+nm=m[1]+m[2];
+}else{
+nm="function()";
+}
+}else{
+if(typeof obj!="object"||typeof obj=="string"){
+nm=obj+"";
+}else{
+nm="{";
+for(var i in obj){
+cnt++;
+if(cnt>_c6){
+break;
+}
+nm+=i+":"+_7b(obj[i])+"  ";
+}
+nm+="}";
+}
+}
+}
+}
+return nm;
+};
+_49(document,dojo.isIE||dojo.isSafari?"keydown":"keypress",_4b);
+if((document.documentElement.getAttribute("debug")=="true")||(dojo.config.isDebug)){
+_34(true);
+}
+dojo.addOnWindowUnload(function(){
+_a1(document,dojo.isIE||dojo.isSafari?"keydown":"keypress",_4b);
+window.onFirebugResize=null;
+window.console=null;
+});
+}
+})();
+}
Index: trunk/web/dojo/dojo/rpc/JsonService.js
===================================================================
--- trunk/web/dojo/dojo/rpc/JsonService.js	(revision 0)
+++ trunk/web/dojo/dojo/rpc/JsonService.js	(revision 9)
@@ -0,0 +1,37 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.rpc.JsonService"]){
+dojo._hasResource["dojo.rpc.JsonService"]=true;
+dojo.provide("dojo.rpc.JsonService");
+dojo.require("dojo.rpc.RpcService");
+dojo.declare("dojo.rpc.JsonService",dojo.rpc.RpcService,{bustCache:false,contentType:"application/json-rpc",lastSubmissionId:0,callRemote:function(_1,_2){
+var _3=new dojo.Deferred();
+this.bind(_1,_2,_3);
+return _3;
+},bind:function(_4,_5,_6,_7){
+var _8=dojo.rawXhrPost({url:_7||this.serviceUrl,postData:this.createRequest(_4,_5),contentType:this.contentType,timeout:this.timeout,handleAs:"json-comment-optional"});
+_8.addCallbacks(this.resultCallback(_6),this.errorCallback(_6));
+},createRequest:function(_9,_a){
+var _b={"params":_a,"method":_9,"id":++this.lastSubmissionId};
+var _c=dojo.toJson(_b);
+return _c;
+},parseResults:function(_d){
+if(dojo.isObject(_d)){
+if("result" in _d){
+return _d.result;
+}
+if("Result" in _d){
+return _d.Result;
+}
+if("ResultSet" in _d){
+return _d.ResultSet;
+}
+}
+return _d;
+}});
+}
Index: trunk/web/dojo/dojo/rpc/JsonpService.js
===================================================================
--- trunk/web/dojo/dojo/rpc/JsonpService.js	(revision 0)
+++ trunk/web/dojo/dojo/rpc/JsonpService.js	(revision 9)
@@ -0,0 +1,32 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.rpc.JsonpService"]){
+dojo._hasResource["dojo.rpc.JsonpService"]=true;
+dojo.provide("dojo.rpc.JsonpService");
+dojo.require("dojo.rpc.RpcService");
+dojo.require("dojo.io.script");
+dojo.declare("dojo.rpc.JsonpService",dojo.rpc.RpcService,{constructor:function(_1,_2){
+if(this.required){
+if(_2){
+dojo.mixin(this.required,_2);
+}
+dojo.forEach(this.required,function(_3){
+if(_3==""||_3==undefined){
+throw new Error("Required Service Argument not found: "+_3);
+}
+});
+}
+},strictArgChecks:false,bind:function(_4,_5,_6,_7){
+var _8=dojo.io.script.get({url:_7||this.serviceUrl,callbackParamName:this.callbackParamName||"callback",content:this.createRequest(_5),timeout:this.timeout,handleAs:"json",preventCache:true});
+_8.addCallbacks(this.resultCallback(_6),this.errorCallback(_6));
+},createRequest:function(_9){
+var _a=(dojo.isArrayLike(_9)&&_9.length==1)?_9[0]:{};
+dojo.mixin(_a,this.required);
+return _a;
+}});
+}
Index: trunk/web/dojo/dojo/rpc/RpcService.js
===================================================================
--- trunk/web/dojo/dojo/rpc/RpcService.js	(revision 0)
+++ trunk/web/dojo/dojo/rpc/RpcService.js	(revision 9)
@@ -0,0 +1,89 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.rpc.RpcService"]){
+dojo._hasResource["dojo.rpc.RpcService"]=true;
+dojo.provide("dojo.rpc.RpcService");
+dojo.declare("dojo.rpc.RpcService",null,{constructor:function(_1){
+if(_1){
+if((dojo.isString(_1))||(_1 instanceof dojo._Url)){
+if(_1 instanceof dojo._Url){
+var _2=_1+"";
+}else{
+_2=_1;
+}
+var _3=dojo.xhrGet({url:_2,handleAs:"json-comment-optional",sync:true});
+_3.addCallback(this,"processSmd");
+_3.addErrback(function(){
+throw new Error("Unable to load SMD from "+_1);
+});
+}else{
+if(_1.smdStr){
+this.processSmd(dojo.eval("("+_1.smdStr+")"));
+}else{
+if(_1.serviceUrl){
+this.serviceUrl=_1.serviceUrl;
+}
+this.timeout=_1.timeout||3000;
+if("strictArgChecks" in _1){
+this.strictArgChecks=_1.strictArgChecks;
+}
+this.processSmd(_1);
+}
+}
+}
+},strictArgChecks:true,serviceUrl:"",parseResults:function(_4){
+return _4;
+},errorCallback:function(_5){
+return function(_6){
+_5.errback(_6.message);
+};
+},resultCallback:function(_7){
+var tf=dojo.hitch(this,function(_8){
+if(_8.error!=null){
+var _9;
+if(typeof _8.error=="object"){
+_9=new Error(_8.error.message);
+_9.code=_8.error.code;
+_9.error=_8.error.error;
+}else{
+_9=new Error(_8.error);
+}
+_9.id=_8.id;
+_9.errorObject=_8;
+_7.errback(_9);
+}else{
+_7.callback(this.parseResults(_8));
+}
+});
+return tf;
+},generateMethod:function(_a,_b,_c){
+return dojo.hitch(this,function(){
+var _d=new dojo.Deferred();
+if((this.strictArgChecks)&&(_b!=null)&&(arguments.length!=_b.length)){
+throw new Error("Invalid number of parameters for remote method.");
+}else{
+this.bind(_a,dojo._toArray(arguments),_d,_c);
+}
+return _d;
+});
+},processSmd:function(_e){
+if(_e.methods){
+dojo.forEach(_e.methods,function(m){
+if(m&&m.name){
+this[m.name]=this.generateMethod(m.name,m.parameters,m.url||m.serviceUrl||m.serviceURL);
+if(!dojo.isFunction(this[m.name])){
+throw new Error("RpcService: Failed to create"+m.name+"()");
+}
+}
+},this);
+}
+this.serviceUrl=_e.serviceUrl||_e.serviceURL;
+this.required=_e.required;
+this.smd=_e;
+}});
+}
Index: trunk/web/dojo/dojo/AdapterRegistry.js
===================================================================
--- trunk/web/dojo/dojo/AdapterRegistry.js	(revision 0)
+++ trunk/web/dojo/dojo/AdapterRegistry.js	(revision 9)
@@ -0,0 +1,39 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.AdapterRegistry"]){
+dojo._hasResource["dojo.AdapterRegistry"]=true;
+dojo.provide("dojo.AdapterRegistry");
+dojo.AdapterRegistry=function(_1){
+this.pairs=[];
+this.returnWrappers=_1||false;
+};
+dojo.extend(dojo.AdapterRegistry,{register:function(_2,_3,_4,_5,_6){
+this.pairs[((_6)?"unshift":"push")]([_2,_3,_4,_5]);
+},match:function(){
+for(var i=0;i<this.pairs.length;i++){
+var _7=this.pairs[i];
+if(_7[1].apply(this,arguments)){
+if((_7[3])||(this.returnWrappers)){
+return _7[2];
+}else{
+return _7[2].apply(this,arguments);
+}
+}
+}
+throw new Error("No match found");
+},unregister:function(_8){
+for(var i=0;i<this.pairs.length;i++){
+var _9=this.pairs[i];
+if(_9[0]==_8){
+this.pairs.splice(i,1);
+return true;
+}
+}
+return false;
+}});
+}
Index: trunk/web/dojo/dojo/cldr/LICENSE
===================================================================
--- trunk/web/dojo/dojo/cldr/LICENSE	(revision 0)
+++ trunk/web/dojo/dojo/cldr/LICENSE	(revision 9)
@@ -0,0 +1,29 @@
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+Unicode Data Files include all data files under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, 
+and http://www.unicode.org/cldr/data/ . Unicode Software includes any source code published in the Unicode Standard or under
+the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/.
+NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR 
+OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU
+UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS
+AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+Copyright � 1991-2007 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated
+documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data 
+Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell 
+copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided
+that (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software, (b) both the
+above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File 
+or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified.
+THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
+INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, 
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF 
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other 
+dealings in these Data Files or Software without prior written authorization of the copyright holder.
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/supplemental.js
===================================================================
--- trunk/web/dojo/dojo/cldr/supplemental.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/supplemental.js	(revision 9)
@@ -0,0 +1,45 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.cldr.supplemental"]){
+dojo._hasResource["dojo.cldr.supplemental"]=true;
+dojo.provide("dojo.cldr.supplemental");
+dojo.require("dojo.i18n");
+dojo.cldr.supplemental.getFirstDayOfWeek=function(_1){
+var _2={mv:5,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,ar:0,as:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,"in":0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mn:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,sy:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,zw:0};
+var _3=dojo.cldr.supplemental._region(_1);
+var _4=_2[_3];
+return (_4===undefined)?1:_4;
+};
+dojo.cldr.supplemental._region=function(_5){
+_5=dojo.i18n.normalizeLocale(_5);
+var _6=_5.split("-");
+var _7=_6[1];
+if(!_7){
+_7={de:"de",en:"us",es:"es",fi:"fi",fr:"fr",he:"il",hu:"hu",it:"it",ja:"jp",ko:"kr",nl:"nl",pt:"br",sv:"se",zh:"cn"}[_6[0]];
+}else{
+if(_7.length==4){
+_7=_6[2];
+}
+}
+return _7;
+};
+dojo.cldr.supplemental.getWeekend=function(_8){
+var _9={"in":0,af:4,dz:4,ir:4,om:4,sa:4,ye:4,ae:5,bh:5,eg:5,il:5,iq:5,jo:5,kw:5,ly:5,ma:5,qa:5,sd:5,sy:5,tn:5};
+var _a={af:5,dz:5,ir:5,om:5,sa:5,ye:5,ae:6,bh:5,eg:6,il:6,iq:6,jo:6,kw:6,ly:6,ma:6,qa:6,sd:6,sy:6,tn:6};
+var _b=dojo.cldr.supplemental._region(_8);
+var _c=_9[_b];
+var _d=_a[_b];
+if(_c===undefined){
+_c=6;
+}
+if(_d===undefined){
+_d=0;
+}
+return {start:_c,end:_d};
+};
+}
Index: trunk/web/dojo/dojo/cldr/monetary.js
===================================================================
--- trunk/web/dojo/dojo/cldr/monetary.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/monetary.js	(revision 9)
@@ -0,0 +1,23 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.cldr.monetary"]){
+dojo._hasResource["dojo.cldr.monetary"]=true;
+dojo.provide("dojo.cldr.monetary");
+dojo.cldr.monetary.getData=function(_1){
+var _2={ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0};
+var _3={CHF:5};
+var _4=_2[_1],_5=_3[_1];
+if(typeof _4=="undefined"){
+_4=2;
+}
+if(typeof _5=="undefined"){
+_5=0;
+}
+return {places:_4,round:_5};
+};
+}
Index: trunk/web/dojo/dojo/cldr/nls/he/hebrew.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/he/hebrew.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/he/hebrew.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormat-medium":"dd/MM/yyyy","dateFormatItem-MMMEd":"E, d בMMM","dateFormatItem-yMEd":"EEE, d.M.yyyy","eraNarrow":["לבה״ע"],"dateFormatItem-Md":"d/M","months-standAlone-wide":["תשרי","חשון","כסלו","טבת","שבט","אדר א׳","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"months-format-wide-leap":"אדר ב׳","dateFormatItem-EEEd":"EEE ה-d","eraNames":["לבה״ע"],"days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMMMEd":"E, d בMMMM","dayPeriods-format-wide-pm":"אחה״צ","months-standAlone-abbr":["תשרי","חשון","כסלו","טבת","שבט","אדר א׳","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"dayPeriods-format-wide-am":"לפנה״צ","dateFormat-long":"d בMMMM y","dateFormat-short":"dd/MM/yy","dateFormatItem-yMMMEd":"EEE, d בMMM y","months-format-wide":["תשרי","חשון","כסלו","טבת","שבט","אדר א׳","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"dateFormatItem-yM":"M.yyyy","months-format-abbr":["תשרי","חשון","כסלו","טבת","שבט","אדר א׳","אדר","ניסן","אייר","סיון","תמוז","אב","אלול"],"eraAbbr":["לבה״ע"],"days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-MMMd":"d בMMM","days-format-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"months-format-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","months-standAlone-narrow-leap":"Adar II","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr-leap":"Adar II","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"months-standAlone-wide-leap":"Adar II","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"months-format-narrow-leap":"Adar II","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","months-standAlone-abbr-leap":"Adar II","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/he/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/he/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/he/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"field-weekday":"יום בשבוע","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d.M.yyyy","dateFormatItem-MMMEd":"E, d בMMM","eraNarrow":["לפנה״ס","לסה״נ"],"dateFormat-long":"d בMMMM y","months-format-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateFormatItem-EEEd":"EEE ה-d","dayPeriods-format-wide-pm":"אחה״צ","dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-Md":"d/M","field-era":"תקופה","dateFormatItem-yM":"M.yyyy","months-standAlone-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"timeFormat-short":"HH:mm","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"timeFormat-long":"HH:mm:ss z","field-year":"שנה","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"שעה","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"היום","field-day-relative+1":"מחר","field-day-relative+2":"מחרתיים","dateFormatItem-H":"HH","field-day-relative+3":"בעוד שלושה ימים","months-standAlone-abbr":["ינו׳","פבר׳","מרס","אפר׳","מאי","יונ׳","יול׳","אוג׳","ספט׳","אוק׳","נוב׳","דצמ׳"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yyyy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"לפה״צ/אחה״צ","days-standAlone-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"אתמול","field-day-relative+-2":"שלשום","field-day-relative+-3":"לפני שלושה ימים","dateFormatItem-MMMd":"d בMMM","dateFormatItem-MEd":"E, M-d","dateFormatItem-yMMMM":"MMMM y","field-day":"יום","days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"field-zone":"אזור","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"לפנה״צ","dateFormatItem-MMMMEd":"E, d בMMMM","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, d בMMM y","dateFormatItem-Ed":"E ה-d","field-week":"שבוע","dateFormat-medium":"d בMMM yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/he/islamic.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/he/islamic.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/he/islamic.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormat-medium":"d בMMM yyyy","dateFormatItem-MMMEd":"E, d בMMM","dateFormatItem-yMEd":"EEE, d.M.yyyy","eraNarrow":["שנת היג׳רה"],"dateFormatItem-Md":"d/M","months-standAlone-wide":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"dateFormatItem-EEEd":"EEE ה-d","eraNames":["שנת היג׳רה"],"days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dayPeriods-format-wide-pm":"אחה״צ","months-standAlone-abbr":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"dayPeriods-format-wide-am":"לפנה״צ","dateFormat-long":"d בMMMM y","dateFormat-short":"dd/MM/yy","dateFormatItem-yMMMEd":"EEE, d בMMM y","months-format-wide":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"dateFormatItem-yM":"M.yyyy","months-format-abbr":["מוחרם","ספר","רביע אל-אוואל","רביע אל-תני","ג׳ומדה אל-אוואל","ג׳ומדה אל-תני","רג׳אב","שעבאן","ראמדן","שוואל","זו אל-QI'DAH","זו אל-חיג׳ה"],"eraAbbr":["שנת היג׳רה"],"days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-MMMd":"d בMMM","days-format-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","timeFormat-short":"HH:mm","timeFormat-long":"HH:mm:ss z","dateTimeFormats-appendItem-Era":"{0} {1}","timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/he/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/he/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/he/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/he/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/he/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/he/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"דולר הונג קונגי","CHF_displayName":"פרנק שוויצרי","CAD_displayName":"דולר קנדי","CNY_displayName":"יואן רנמינבי סיני","AUD_displayName":"דולר אוסטרלי","JPY_displayName":"ין יפני","USD_displayName":"דולר אמריקאי","GBP_displayName":"לירה שטרלינג","EUR_displayName":"אירו","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/islamic.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/islamic.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/islamic.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["AH"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","months-standAlone-wide":["Muharram","Safar","Rabiʻ I","Rabiʻ II","Jumada I","Jumada II","Rajab","Shaʻban","Ramadan","Shawwal","Dhuʻl-Qiʻdah","Dhuʻl-Hijjah"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["Muh.","Saf.","Rab. I","Rab. II","Jum. I","Jum. II","Raj.","Sha.","Ram.","Shaw.","Dhuʻl-Q.","Dhuʻl-H."],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["AH"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","days-format-wide":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["AH"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormat-medium":"y MMM d","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/fi/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/fi/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/fi/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hongkongin dollari","CHF_displayName":"Sveitsin frangi","CHF_symbol":"CHF","JPY_symbol":"¥","HKD_symbol":"HKD","CAD_displayName":"Kanadan dollari","CNY_displayName":"Kiinan yuan","USD_symbol":"$","AUD_displayName":"Australian dollari","JPY_displayName":"Japanin jeni","CAD_symbol":"CAD","USD_displayName":"Yhdysvaltain dollari","CNY_symbol":"CNY","GBP_displayName":"Englannin punta","AUD_symbol":"AUD","EUR_displayName":"euro","GBP_symbol":"£","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/fi/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/fi/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/fi/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"field-weekday":"viikonpäivä","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["eKr.","jKr."],"dateFormat-long":"d. MMMM y","months-format-wide":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-EEEd":"EEE d.","dayPeriods-format-wide-pm":"ip.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dayPeriods-standAlone-wide-pm":"ip.","dayPeriods-format-abbr-am":"ap.","field-era":"aikakausi","dateFormatItem-yM":"L.yyyy","months-standAlone-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"timeFormat-short":"H.mm","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"timeFormat-long":"H.mm.ss z","field-year":"vuosi","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q/yyyy","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"tunti","months-format-abbr":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-yyQ":"Q/yy","timeFormat-full":"H.mm.ss zzzz","dateFormatItem-yyyyMEEEd":"EEE d.M.yyyy","field-day-relative+0":"tänään","field-day-relative+1":"huomenna","field-day-relative+2":"ylihuomenna","dateFormatItem-H":"H","months-standAlone-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"quarters-standAlone-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"dateFormatItem-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-yyMMM":"LLLL yy","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"eraAbbr":["eKr.","jKr."],"field-minute":"minuutti","field-dayperiod":"ap./ip.","days-standAlone-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"eilen","field-day-relative+-2":"toissapäivänä","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","field-day":"päivä","dateFormatItem-yMMMMccccd":"cccc, d. MMMM y","days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"field-zone":"aikavyöhyke","dateFormatItem-y":"y","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"dateFormatItem-yyMM":"M/yy","dateFormatItem-hm":"h.mm a","dayPeriods-format-abbr-pm":"ip.","days-format-abbr":["su","ma","ti","ke","to","pe","la"],"eraNames":["ennen Kristuksen syntymää","jälkeen Kristuksen syntymän"],"days-format-narrow":["S","M","T","K","T","P","L"],"field-month":"kuukausi","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"ap.","dayPeriods-standAlone-wide-am":"ap.","dateFormat-short":"d.M.yyyy","field-second":"sekunti","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"viikko","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"H.mm.ss","dateFormatItem-hms":"h.mm.ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/fi/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/fi/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/fi/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/nb/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/nb/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/nb/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ukedag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMMM y","months-format-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"tidsalder","dateFormatItem-yM":"M y","months-standAlone-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH:mm:ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"time","dateFormatItem-MMdd":"dd.MM","months-format-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH:mm:ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","field-day-relative+3":"i overovermorgen","months-standAlone-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"L","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minutt","field-dayperiod":"AM/PM","days-standAlone-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"sone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd.MM.yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"uke","dateFormat-medium":"d. MMM y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/nb/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/nb/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/nb/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/nb/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/nb/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/nb/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hongkong-dollar","CHF_displayName":"sveitsiske franc","CHF_symbol":"CHF","JPY_symbol":"JPY","CAD_displayName":"kanadiske dollar","CNY_displayName":"kinesiske yuan renminbi","USD_symbol":"USD","AUD_displayName":"australske dollar","JPY_displayName":"japanske yen","CAD_symbol":"CAD","USD_displayName":"amerikanske dollar","EUR_symbol":"EUR","CNY_symbol":"CNY","GBP_displayName":"britiske pund sterling","GBP_symbol":"GBP","AUD_symbol":"AUD","EUR_displayName":"euro","HKD_symbol":"HK$"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/fr/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/fr/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/fr/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/fr/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/fr/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/fr/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/fr/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/fr/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/fr/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"dollar de Hong Kong","CHF_displayName":"franc suisse","CHF_symbol":"CHF","JPY_symbol":"¥JP","HKD_symbol":"$HK","CAD_displayName":"dollar canadien","CNY_displayName":"yuan renminbi chinois","USD_symbol":"$US","AUD_displayName":"dollar australien","JPY_displayName":"yen japonais","CAD_symbol":"$CA","USD_displayName":"dollar des États-Unis","CNY_symbol":"Ұ","GBP_displayName":"livre sterling","GBP_symbol":"£UK","AUD_symbol":"$AU","EUR_displayName":"euro","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/nl/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/nl/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/nl/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/nl/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/nl/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/nl/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hongkongse dollar","CHF_displayName":"Zwitserse franc","CAD_displayName":"Canadese dollar","CNY_displayName":"Chinese yuan renminbi","AUD_displayName":"Australische dollar","JPY_displayName":"Japanse yen","USD_displayName":"Amerikaanse dollar","GBP_displayName":"Brits pond sterling","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/nl/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/nl/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/nl/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M-y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"PM","field-minute":"Minuut","eraNames":["Voor Christus","na Christus"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"gisteren","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"eergisteren","dateFormatItem-MMdd":"dd-MM","field-day-relative+-3":"eereergisteren","days-standAlone-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"Tijdperk","field-hour":"Uur","dayPeriods-format-wide-am":"AM","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"vandaag","field-day-relative+1":"morgen","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"field-day-relative+2":"overmorgen","field-day-relative+3":"overovermorgen","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d-MM","dateFormat-medium":"d MMM y","dateFormatItem-yyMM":"MM-yy","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-ms":"mm:ss","field-year":"Jaar","field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-MMMd":"d-MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH:mm","field-month":"Maand","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormatItem-M":"L","days-format-narrow":["Z","M","D","W","D","V","Z"],"field-second":"Seconde","field-day":"Dag","dateFormatItem-MEd":"E d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"days-standAlone-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormat-short":"dd-MM-yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d-M","dateFormatItem-yMEd":"EEE d-M-y","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"eraNarrow":["v. Chr.","n. Chr."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pl/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pl/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pl/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pl/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pl/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pl/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"dolar hongkoński","CHF_displayName":"frank szwajcarski","CAD_displayName":"dolar kanadyjski","CNY_displayName":"juan renminbi","AUD_displayName":"dolar australijski","JPY_displayName":"jen japoński","USD_displayName":"dolar amerykański ","GBP_displayName":"funt szterling","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pl/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pl/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pl/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"field-weekday":"Dzień tygodnia","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d-M-y","dateFormatItem-MMMEd":"d MMM E","eraNarrow":["p.n.e.","n.e."],"dayPeriods-format-wide-earlyMorning":"nad ranem","dayPeriods-format-wide-morning":"rano","dateFormat-long":"d MMMM y","months-format-wide":["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia"],"dayPeriods-format-wide-evening":"wieczorem","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d-M","dayPeriods-format-wide-noon":"w południe","field-era":"Era","dateFormatItem-yM":"M-y","months-standAlone-wide":["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],"timeFormat-short":"HH:mm","quarters-format-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"timeFormat-long":"HH:mm:ss z","field-year":"Rok","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"Godzina","dateFormatItem-MMdd":"dd-MM","months-format-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"Dzisiaj","field-day-relative+1":"Jutro","field-day-relative+2":"Pojutrze","field-day-relative+3":"Za trzy dni","months-standAlone-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"dateFormatItem-M":"L","days-standAlone-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1 kw.","2 kw.","3 kw.","4 kw."],"eraAbbr":["p.n.e.","n.e."],"field-minute":"Minuta","field-dayperiod":"Dayperiod","days-standAlone-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"dayPeriods-format-wide-night":"w nocy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Wczoraj","dateFormatItem-h":"hh a","field-day-relative+-2":"Przedwczoraj","field-day-relative+-3":"Trzy dni temu","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d-M","dayPeriods-format-wide-lateMorning":"przed południem","dateFormatItem-yMMMM":"LLLL y","field-day":"Dzień","days-format-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"field-zone":"Strefa","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"eraNames":["p.n.e.","n.e."],"days-format-narrow":["N","P","W","Ś","C","P","S"],"field-month":"Miesiąc","days-standAlone-narrow":["N","P","W","Ś","C","P","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd-MM-yyyy","dayPeriods-format-wide-afternoon":"po południu","field-second":"Sekunda","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"Tydzień","dateFormat-medium":"dd-MM-yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/th/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/th/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/th/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"field-weekday":"วันในสัปดาห์","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["ก่อน ค.ศ.","ค.ศ."],"dateFormat-long":"d MMMM y","months-format-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"dateTimeFormat-medium":"{1}, {0}","dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"หลังเที่ยง","dateFormat-full":"EEEEที่ d MMMM G y","dateFormatItem-Md":"d/M","field-era":"สมัย","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"timeFormat-short":"H:mm","quarters-format-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"timeFormat-long":"H นาฬิกา m นาที ss วินาที z","field-year":"ปี","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ชั่วโมง","months-format-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"H นาฬิกา m นาที ss วินาที zzzz","field-day-relative+0":"วันนี้","field-day-relative+1":"พรุ่งนี้","field-day-relative+2":"มะรืนนี้","dateFormatItem-H":"H","field-day-relative+3":"สามวันต่อจากนี้","months-standAlone-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"dateFormatItem-M":"L","days-standAlone-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"dateFormatItem-MMMMd":"d MMMM","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["ปีก่อน ค.ศ.","ค.ศ."],"field-minute":"นาที","field-dayperiod":"ช่วงวัน","days-standAlone-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"เมื่อวาน","dateTimeFormat-long":"{1}, {0}","field-day-relative+-2":"เมื่อวานซืน","field-day-relative+-3":"สามวันก่อน","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateTimeFormat-full":"{1}, {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"วัน","days-format-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"field-zone":"เขต","dateFormatItem-y":"y","months-standAlone-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"days-format-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"eraNames":["ปีก่อนคริสต์ศักราช","คริสต์ศักราช"],"days-format-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"field-month":"เดือน","days-standAlone-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"ก่อนเที่ยง","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"d/M/yyyy","field-second":"วินาที","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"สัปดาห์","dateFormat-medium":"d MMM y","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1}, {0}","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/th/buddhist.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/th/buddhist.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/th/buddhist.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M/yyyy","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"หลังเที่ยง","eraNames":["พุทธศักราช"],"dateFormatItem-MMMEd":"E d MMM","dateTimeFormat-full":"{1}, {0}","dateFormatItem-yQQQ":"QQQ y","months-standAlone-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateTimeFormat-short":"{1}, {0}","dayPeriods-format-wide-am":"ก่อนเที่ยง","dateTimeFormat-medium":"{1}, {0}","timeFormat-full":"H นาฬิกา m นาที ss วินาที zzzz","dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"eraAbbr":["พ.ศ."],"dateFormat-long":"d MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE d","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"H:mm:ss","dateTimeFormat-long":"{1}, {0}","dateFormatItem-MMMd":"d MMM","timeFormat-long":"H นาฬิกา m นาที ss วินาที z","months-format-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","days-format-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"dateFormatItem-MEd":"E, d/M","dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEEที่ d MMMM G y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE d/M/yyyy","months-format-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"quarters-format-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"days-format-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"eraNarrow":["พ.ศ."],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/th/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/th/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/th/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;¤-#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/th/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/th/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/th/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"ดอลลาร์ฮ่องกง","CHF_displayName":"ฟรังก์สวิส","JPY_symbol":"¥","CAD_displayName":"ดอลลาร์แคนาดา","CNY_displayName":"หยวนเหรินหมินปี้ (สาธารณรัฐประชาชนจีน)","AUD_displayName":"ดอลลาร์ออสเตรเลีย","JPY_displayName":"เยนญี่ปุ่น","USD_displayName":"ดอลลาร์สหรัฐ","GBP_displayName":"ปอนด์สเตอร์ลิง (สหราชอาณาจักร)","EUR_displayName":"ยูโร","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/hu/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/hu/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/hu/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"E","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/hu/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/hu/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/hu/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hongkongi dollár","CHF_displayName":"Svájci frank","JPY_symbol":"¥","CAD_displayName":"Kanadai dollár","CNY_displayName":"Kínai jüan renminbi","USD_symbol":"$","AUD_displayName":"Ausztrál dollár","JPY_displayName":"Japán jen","USD_displayName":"USA dollár","GBP_displayName":"Brit font sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/hu/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/hu/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/hu/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"field-dayperiod":"napszak","dayPeriods-format-wide-pm":"du.","field-minute":"perc","eraNames":["időszámításunk előtt","időszámításunk szerint"],"field-day-relative+-1":"tegnap","field-weekday":"hét napja","field-day-relative+-2":"tegnapelőtt","dateFormatItem-MMdd":"MM.dd.","field-day-relative+-3":"három nappal ezelőtt","days-standAlone-wide":["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","Á","M","J","J","A","Sz","O","N","D"],"field-era":"éra","field-hour":"óra","dayPeriods-format-wide-am":"de.","quarters-standAlone-abbr":["N1","N2","N3","N4"],"timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan.","febr.","márc.","ápr.","máj.","jún.","júl.","aug.","szept.","okt.","nov.","dec."],"field-day-relative+0":"ma","field-day-relative+1":"holnap","days-standAlone-narrow":["V","H","K","Sz","Cs","P","Sz"],"eraAbbr":["i. e.","i. sz."],"field-day-relative+2":"holnapután","field-day-relative+3":"három nap múlva","dateFormatItem-yyyyMM":"yyyy.MM","dateFormatItem-yyyyMMMM":"y. MMMM","dateFormat-long":"y. MMMM d.","timeFormat-medium":"H:mm:ss","field-zone":"zóna","dateFormatItem-Hm":"H:mm","dateFormat-medium":"yyyy.MM.dd.","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"field-year":"év","field-week":"hét","months-standAlone-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"dateFormatItem-MMMd":"MMM d.","dateFormatItem-yyQ":"yy/Q","timeFormat-long":"H:mm:ss z","months-format-abbr":["jan.","febr.","márc.","ápr.","máj.","jún.","júl.","aug.","szept.","okt.","nov.","dec."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"hónap","dateFormatItem-MMMMd":"MMMM d.","quarters-format-abbr":["N1","N2","N3","N4"],"days-format-abbr":["V","H","K","Sze","Cs","P","Szo"],"dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["V","H","K","Sz","Cs","P","Sz"],"field-second":"másodperc","field-day":"nap","dateFormatItem-MEd":"M. d., E","months-format-narrow":["J","F","M","Á","M","J","J","A","Sz","O","N","D"],"days-standAlone-abbr":["V","H","K","Sze","Cs","P","Szo"],"dateFormat-short":"yyyy.MM.dd.","dateFormat-full":"y. MMMM d., EEEE","dateFormatItem-Md":"M. d.","months-format-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"days-format-wide":["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],"eraNarrow":["i. e.","i. sz."],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/buddhist.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/buddhist.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/buddhist.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"MMMM d, y G","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, MMMM d, y G","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","days-format-wide":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"M/d/yyyy","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormat-medium":"MMM d, y G","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/zh/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/zh/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/zh/number.js	(revision 9)
@@ -0,0 +1 @@
+({"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/zh/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/zh/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/zh/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"港元","CHF_displayName":"瑞士法郎","CAD_displayName":"加拿大元","CNY_displayName":"人民币","AUD_displayName":"澳大利亚元","JPY_displayName":"日元","USD_displayName":"美元","CNY_symbol":"￥","GBP_displayName":"英镑","EUR_displayName":"欧元","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/zh/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/zh/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/zh/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-weekday":"周天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"y年M月d日，E","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M-d","field-era":"时期","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季度","第2季度","第3季度","第4季度"],"timeFormat-long":"zah时mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年MMM","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","field-hour":"小时","dateFormatItem-MMdd":"MM-dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah时mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"后天","dateFormatItem-H":"H时","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季度","第2季度","第3季度","第4季度"],"dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1季","2季","3季","4季"],"eraAbbr":["公元前","公元"],"field-minute":"分钟","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateFormatItem-MEd":"M-dE","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"区域","dateFormatItem-y":"y年","months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["公元前","公元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dateFormat-short":"yy-M-d","dayPeriods-format-wide-afternoon":"下午","field-second":"秒钟","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-Ed":"d日E","field-week":"周","dateFormat-medium":"yyyy-M-d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en-ca/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en-ca/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en-ca/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"CAD_symbol":"$","USD_symbol":"US$","HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en-ca/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en-ca/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en-ca/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yMMMEd":"EEE, d MMM, y","dateFormatItem-yyMMM":"MMM-yy","dateFormatItem-Md":"M-d","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MEd":"E, M-d","dateFormatItem-MMMMEd":"E, d MMMM","dateFormat-medium":"yyyy-MM-dd","dateFormatItem-MMMd":"d MMM","dateFormatItem-MMdd":"MM-dd","dateFormat-full":"EEEE, d MMMM, y","dateFormat-short":"yy-MM-dd","dateFormatItem-MMMMd":"d MMMM","dateFormat-long":"d MMMM, y","dateFormatItem-MMMEd":"E, d MMM","dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"timeFormat-long":"h:mm:ss a z","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","timeFormat-short":"h:mm a","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pt/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pt/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pt/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","field-era":"Era","dateFormatItem-yM":"MM/yyyy","months-standAlone-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"timeFormat-short":"HH:mm","quarters-format-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","dateFormatItem-yQ":"yyyy Q","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH'h'mm'min'ss's' zzzz","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","months-standAlone-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"dateFormatItem-HHmmss":"HH'h'mm'min'ss's'","dateFormatItem-M":"L","days-standAlone-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","days-standAlone-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"field-zone":"Fuso","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"eraNames":["Antes de Cristo","Ano do Senhor"],"days-format-narrow":["D","S","T","Q","Q","S","S"],"field-month":"Mês","days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH'h'mm","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pt/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pt/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pt/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pt/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pt/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pt/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Dólar de Hong Kong","CHF_displayName":"Franco suíço","CAD_displayName":"Dólar canadense","CNY_displayName":"Yuan Renminbi chinês","AUD_displayName":"Dólar australiano","JPY_displayName":"Iene japonês","USD_displayName":"Dólar norte-americano","GBP_displayName":"Libra esterlina britânica","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ca/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ca/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ca/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ca/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ca/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ca/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"dòlar de Hong Kong","CHF_displayName":"franc suís","CAD_displayName":"dòlar canadenc","CNY_displayName":"iuan renmimbi xinès","AUD_displayName":"dòlar australià","JPY_displayName":"ien japonès","USD_displayName":"dòlar dels Estats Units","GBP_displayName":"lliura esterlina britànica","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ca/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ca/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ca/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"field-weekday":"dia de la setmana","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"E d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"d MMMM 'de' y","months-format-wide":["de gener","de febrer","de març","d’abril","de maig","de juny","de juliol","d’agost","de setembre","d’octubre","de novembre","de desembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"timeFormat-short":"H:mm","quarters-format-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"timeFormat-long":"H:mm:ss z","field-year":"any","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q yyyy","field-hour":"hora","months-format-abbr":["de gen.","de febr.","de març","d’abr.","de maig","de juny","de jul.","d’ag.","de set.","d’oct.","de nov.","de des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"H:mm:ss zzzz","field-day-relative+0":"avui","field-day-relative+1":"demà","field-day-relative+2":"demà passat","dateFormatItem-H":"H","field-day-relative+3":"d'aquí a tres dies","months-standAlone-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"quarters-format-abbr":["1T","2T","3T","4T"],"quarters-standAlone-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"dateFormatItem-MMMMd":"d MMMM","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1T","2T","3T","4T"],"eraAbbr":["aC","dC"],"field-minute":"minut","field-dayperiod":"a.m./p.m.","days-standAlone-abbr":["dg","dl","dt","dc","dj","dv","ds"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ahir","field-day-relative+-2":"abans d'ahir","field-day-relative+-3":"fa tres dies","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","dateFormatItem-yMMMM":"LLLL 'del' y","field-day":"dia","days-format-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"dateFormatItem-hm":"h:mm a","days-format-abbr":["dg.","dl.","dt.","dc.","dj.","dv.","ds."],"eraNames":["aC","dC"],"days-format-narrow":["g","l","t","c","j","v","s"],"field-month":"mes","days-standAlone-narrow":["g","l","t","c","j","v","s"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"dd/MM/yy","field-second":"segon","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"setmana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/tr/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/tr/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/tr/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"% #,##0","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/tr/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/tr/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/tr/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hong Kong Doları","CHF_displayName":"İsviçre Frangı","JPY_symbol":"¥","CAD_displayName":"Kanada Doları","CNY_displayName":"Çin Yuanı Renminbi","USD_symbol":"$","AUD_displayName":"Avustralya Doları","JPY_displayName":"Japon Yeni","USD_displayName":"ABD Doları","GBP_displayName":"İngiliz Sterlini","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/tr/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/tr/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/tr/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"field-weekday":"Haftanın Günü","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"dd.MM.yyyy EEE","dateFormatItem-MMMEd":"dd MMM E","eraNarrow":["MÖ","MS"],"dateFormat-long":"dd MMMM y","months-format-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"dd MMMM y EEEE","dateFormatItem-Md":"dd/MM","field-era":"Miladi Dönem","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"timeFormat-long":"HH:mm:ss z","field-year":"Yıl","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"Saat","months-format-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"Bugün","field-day-relative+1":"Yarın","field-day-relative+2":"Yarından sonraki gün","dateFormatItem-H":"HH","field-day-relative+3":"Üç gün sonra","months-standAlone-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"quarters-format-abbr":["Ç1","Ç2","Ç3","Ç4"],"quarters-standAlone-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"dateFormatItem-M":"L","days-standAlone-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"dateFormatItem-MMMMd":"dd MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Ç1","Ç2","Ç3","Ç4"],"eraAbbr":["MÖ","MS"],"field-minute":"Dakika","field-dayperiod":"AM/PM","days-standAlone-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Dün","field-day-relative+-2":"Evvelsi gün","field-day-relative+-3":"Üç gün önce","dateFormatItem-MMMd":"dd MMM","dateFormatItem-MEd":"dd/MM E","dateFormatItem-yMMMM":"MMMM y","field-day":"Gün","days-format-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"field-zone":"Saat Dilimi","dateFormatItem-y":"y","months-standAlone-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"eraNames":["Milattan Önce","Milattan Sonra"],"days-format-narrow":["P","P","S","Ç","P","C","C"],"field-month":"Ay","days-standAlone-narrow":["P","P","S","Ç","P","C","C"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"dd MMMM E","dateFormat-short":"dd.MM.yyyy","field-second":"Saniye","dateFormatItem-yMMMEd":"dd MMM y EEE","dateFormatItem-Ed":"d E","field-week":"Hafta","dateFormat-medium":"dd MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ru/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ru/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ru/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ru/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ru/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ru/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Гонконгский доллар","CHF_displayName":"Швейцарский франк","CAD_displayName":"Канадский доллар","CNY_displayName":"Юань Ренминби","USD_symbol":"$","AUD_displayName":"Австралийский доллар","JPY_displayName":"Японская иена","USD_displayName":"Доллар США","GBP_displayName":"Английский фунт стерлингов","EUR_displayName":"Евро","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ru/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ru/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ru/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M.y","field-dayperiod":"AM/PM","field-minute":"Минута","eraNames":["до н.э.","н.э."],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"Вчера","field-weekday":"День недели","dateFormatItem-yQQQ":"y QQQ","field-day-relative+-2":"Позавчера","dateFormatItem-MMdd":"dd.MM","days-standAlone-wide":["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"field-era":"Эра","field-hour":"Час","quarters-standAlone-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"dateFormatItem-yyMMMEEEd":"EEE, d MMM yy","dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["янв.","февр.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],"dateFormatItem-Ed":"E d","dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Сегодня","dateFormatItem-yyyyLLLL":"LLLL y","field-day-relative+1":"Завтра","days-standAlone-narrow":["В","П","В","С","Ч","П","С"],"eraAbbr":["до н.э.","н.э."],"field-day-relative+2":"Послезавтра","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d MMMM y 'г'.","timeFormat-medium":"H:mm:ss","field-zone":"Часовой пояс","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-yyMM":"MM.yy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyMMM":"LLL yy","quarters-standAlone-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"dateFormatItem-ms":"mm:ss","dateFormatItem-yyyyQQQQ":"QQQQ y 'г'.","field-year":"Год","months-standAlone-wide":["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],"field-week":"Неделя","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["янв.","февр.","марта","апр.","мая","июня","июля","авг.","сент.","окт.","нояб.","дек."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"Месяц","quarters-format-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"days-format-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormatItem-M":"L","days-format-narrow":["В","П","В","С","Ч","П","С"],"field-second":"Секунда","field-day":"День","dateFormatItem-MEd":"E, d.M","months-format-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"days-standAlone-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormat-short":"dd.MM.yy","dateFormatItem-yMMMEd":"E, d MMM y","dateFormat-full":"EEEE, d MMMM y 'г'.","dateFormatItem-Md":"d.M","dateFormatItem-yMEd":"EEE, d.M.y","months-format-wide":["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],"dateFormatItem-d":"d","quarters-format-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"days-format-wide":["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],"eraNarrow":["до н.э.","н.э."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en-gb/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en-gb/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en-gb/number.js	(revision 9)
@@ -0,0 +1 @@
+({"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en-gb/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en-gb/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en-gb/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yyMMM":"MMM yy","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-yyyyMMMM":"MMMM y","timeFormat-full":"HH:mm:ss zzzz","timeFormat-medium":"HH:mm:ss","dateFormatItem-MEd":"E, d/M","dateFormat-medium":"d MMM y","dateFormatItem-MMdd":"dd/MM","dateFormatItem-yyyyMM":"MM/yyyy","dateFormat-full":"EEEE, d MMMM y","timeFormat-long":"HH:mm:ss z","timeFormat-short":"HH:mm","dateFormat-short":"dd/MM/yyyy","dateFormatItem-MMMMd":"d MMMM","dateFormat-long":"d MMMM y","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-yMMMEd":"EEE, MMM d, y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/el/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/el/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/el/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","currencyFormat":"#,##0.00 ¤","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/el/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/el/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/el/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Δολάριο Χονγκ Κονγκ","CHF_displayName":"Φράγκο Ελβετίας","CAD_displayName":"Δολάριο Καναδά","CNY_displayName":"Γιουάν Ρενμίμπι Κίνας","AUD_displayName":"Δολάριο Αυστραλίας","JPY_displayName":"Γιεν Ιαπωνίας","USD_displayName":"Δολάριο ΗΠΑ","GBP_displayName":"Λίρα Στερλίνα Βρετανίας","EUR_displayName":"Ευρώ","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/el/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/el/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/el/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"field-weekday":"Ημέρα εβδομάδας","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["π.Χ.","μ.Χ."],"dateFormat-long":"d MMMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"μ.μ.","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d/M","field-era":"Περίοδος","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],"timeFormat-short":"h:mm a","quarters-format-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"timeFormat-long":"h:mm:ss a z","field-year":"Έτος","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"y Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Ώρα","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"h:mm:ss a zzzz","field-day-relative+0":"Σήμερα","field-day-relative+1":"Αύριο","field-day-relative+2":"Μεθαύριο","dateFormatItem-H":"HH","field-day-relative+3":"Σε τρεις ημέρες από τώρα","months-standAlone-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"quarters-format-abbr":["Τ1","Τ2","Τ3","Τ4"],"quarters-standAlone-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Τ1","Τ2","Τ3","Τ4"],"eraAbbr":["π.Χ.","μ.Χ."],"field-minute":"Λεπτό","field-dayperiod":"π.μ./μ.μ.","days-standAlone-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Χθες","field-day-relative+-2":"Προχθές","field-day-relative+-3":"Πριν από τρεις ημέρες","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"LLLL y","field-day":"Ημέρα","days-format-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"field-zone":"Ζώνη","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"eraNames":["π.Χ.","μ.Χ."],"days-format-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"field-month":"Μήνας","days-standAlone-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","dayPeriods-format-wide-am":"π.μ.","dateFormatItem-MMMMEd":"E, d MMMM","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"d/M/yy","field-second":"Δευτερόλεπτο","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E d","field-week":"Εβδομάδα","dateFormat-medium":"d MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ar/islamic.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ar/islamic.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ar/islamic.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormat-medium":"dd‏/MM‏/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","eraNarrow":["هـ"],"months-format-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Md":"d/‏M","months-standAlone-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"months-standAlone-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"eraNames":["هـ"],"days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"dayPeriods-format-wide-pm":"م","months-standAlone-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dayPeriods-format-wide-am":"ص","quarters-standAlone-narrow":["١","٢","٣","٤"],"timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM، y","dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","months-format-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-yM":"M‏/yyyy","timeFormat-short":"h:mm a","months-format-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"eraAbbr":["هـ"],"timeFormat-long":"z h:mm:ss a","days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-MMMd":"d MMM","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-yQQQ":"y QQQ","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ar/islamic-civil.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ar/islamic-civil.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ar/islamic-civil.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M‏/yyyy","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","eraNames":["ه"],"dateFormatItem-MMMEd":"E d MMM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"patternChars":"GanjkHmsSEDFwWxhKzAeugXZvcL","months-standAlone-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"dayPeriods-format-wide-am":"ص","dayPeriods-am-format-wide":"ص","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"timeFormat-full":"zzzz h:mm:ss a","dayPeriods-pm-format-wide":"م","dayPeriods-format-wide":["ص","م"],"months-standAlone-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ه"],"dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","dateFormat-medium":"dd‏/MM‏/yyyy","dayPeriods-format-narrow":["ص","م"],"quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","quarters-standAlone-narrow":["١","٢","٣","٤"],"months-standAlone-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"timeFormat-long":"z h:mm:ss a","months-format-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"timeFormat-short":"h:mm a","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"months-format-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"days-standAlone-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/‏M","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","months-format-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dayPeriods-format-abbr":["ص","م"],"quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"eraNarrow":["ه"]})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ar/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ar/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ar/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":"٫","nan":"ليس رقم","nativeZeroDigit":"٠","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ar/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ar/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ar/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"دولار هونج كونج","CHF_displayName":"فرنك سويسري","CAD_displayName":"دولار كندي","CNY_displayName":"يوان صيني","AUD_displayName":"دولار أسترالي","JPY_displayName":"ين ياباني","USD_displayName":"دولار أمريكي","CNY_symbol":"ي.ص","GBP_displayName":"جنيه إسترليني","EUR_displayName":"يورو","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ar/hebrew.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ar/hebrew.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ar/hebrew.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormat-medium":"dd‏/MM‏/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Md":"d/‏M","months-standAlone-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"months-format-wide-leap":"آذار الثاني","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"dayPeriods-format-wide-pm":"م","months-standAlone-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"dayPeriods-format-wide-am":"ص","quarters-standAlone-narrow":["١","٢","٣","٤"],"timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM، y","dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","months-format-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"dateFormatItem-yM":"M‏/yyyy","timeFormat-short":"h:mm a","months-format-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"timeFormat-long":"z h:mm:ss a","days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-MMMd":"d MMM","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"months-format-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateFormatItem-yQQQ":"y QQQ","months-standAlone-narrow-leap":"Adar II","eraNarrow":["AM"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr-leap":"Adar II","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"months-standAlone-wide-leap":"Adar II","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"months-format-narrow-leap":"Adar II","eraAbbr":["AM"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","months-standAlone-abbr-leap":"Adar II","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","eraNames":["AM"],"days-format-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ar/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ar/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ar/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M‏/yyyy","field-dayperiod":"ص/م","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"أمس","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd‏/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","dayPeriods-format-wide-am":"ص","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"اليوم","field-day-relative+1":"غدًا","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"field-day-relative+2":"بعد الغد","dateFormatItem-yyyyMM":"MM‏/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd‏/MM‏/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١","٢","٣","٤"],"field-week":"الأسبوع","months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"dateFormatItem-yyQ":"Q yy","timeFormat-long":"z h:mm:ss a","months-format-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"timeFormat-short":"h:mm a","field-month":"الشهر","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"days-standAlone-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/‏M","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"eraNarrow":["ق.م","م"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateFormatItem-MMMEd":"E, MMM d","dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormat-long":"MMMM d, y","timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"MMM d, y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","timeFormat-short":"h:mm a","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","dateFormatItem-MEd":"E, M/d","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormat-short":"M/d/yy","dateFormatItem-yMMMEd":"EEE, MMM d, y","dateFormat-full":"EEEE, MMMM d, y","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"EEE, M/d/y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/number.js	(revision 9)
@@ -0,0 +1 @@
+({"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pt-pt/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pt-pt/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pt-pt/number.js	(revision 9)
@@ -0,0 +1 @@
+({"currencyFormat":"#,##0.00 ¤","group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/pt-pt/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/pt-pt/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/pt-pt/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"quarters-standAlone-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"quarters-format-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-am":"a.m.","dateFormat-medium":"d 'de' MMM 'de' yyyy","quarters-standAlone-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-abbr-pm":"p.m.","dateFormatItem-hm":"h:mm","months-standAlone-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"dayPeriods-standAlone-abbr-am":"a.m.","dayPeriods-format-wide-pm":"Depois do meio-dia","months-standAlone-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormatItem-yQQQ":"QQQ 'de' y","dayPeriods-format-wide-am":"Antes do meio-dia","dayPeriods-format-abbr-pm":"p.m.","dateFormatItem-yyQ":"QQQ 'de' yy","dayPeriods-format-abbr-am":"a.m.","months-format-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"days-standAlone-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"days-standAlone-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"days-format-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"dateFormatItem-yQ":"QQQ 'de' yyyy","dateFormatItem-hms":"h:mm:ss","quarters-format-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-pm":"p.m.","days-format-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","field-era":"Era","dateFormatItem-yM":"MM/yyyy","timeFormat-short":"HH:mm","timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","timeFormat-full":"HH'h'mm'min'ss's' zzzz","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","dateFormatItem-HHmmss":"HH'h'mm'min'ss's'","dateFormatItem-M":"L","dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","field-zone":"Fuso","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","eraNames":["Antes de Cristo","Ano do Senhor"],"days-format-narrow":["D","S","T","Q","Q","S","S"],"field-month":"Mês","days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH'h'mm","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/cs/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/cs/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/cs/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dayPeriods-format-wide-pm":"odp.","eraNames":["př.Kr.","po Kr."],"field-day-relative+-1":"Včera","field-day-relative+-2":"Předevčírem","days-standAlone-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"months-standAlone-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"dayPeriods-format-wide-am":"dop.","quarters-standAlone-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],"field-day-relative+0":"Dnes","field-day-relative+1":"Zítra","days-standAlone-narrow":["N","P","Ú","S","Č","P","S"],"eraAbbr":["př.Kr.","po Kr."],"field-day-relative+2":"Pozítří","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"months-standAlone-wide":["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"timeFormat-long":"H:mm:ss z","months-format-abbr":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"timeFormat-short":"H:mm","dateFormatItem-H":"H","quarters-format-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-abbr":["ne","po","út","st","čt","pá","so"],"days-format-narrow":["N","P","Ú","S","Č","P","S"],"months-format-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"days-standAlone-abbr":["ne","po","út","st","čt","pá","so"],"dateFormat-short":"d.M.yy","dateFormat-full":"EEEE, d. MMMM y","months-format-wide":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"quarters-format-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"eraNarrow":["př.Kr.","po Kr."],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Day of the Week","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","field-minute":"Minute","field-dayperiod":"Dayperiod","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","field-day":"Day","field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/cs/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/cs/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/cs/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/cs/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/cs/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/cs/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Dolar hongkongský","CHF_displayName":"Frank švýcarský","CAD_displayName":"Dolar kanadský","CNY_displayName":"Juan renminbi","AUD_displayName":"Dolar australský","JPY_displayName":"Jen","USD_displayName":"Dolar americký","GBP_displayName":"Libra šterlinků","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en-au/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en-au/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en-au/number.js	(revision 9)
@@ -0,0 +1 @@
+({"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en-au/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en-au/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en-au/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"AUD_symbol":"$","USD_symbol":"US$","HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/en-au/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/en-au/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/en-au/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-yyyyMMMM":"MMMM y","dateFormatItem-MEd":"E, d/M","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-MMdd":"dd/MM","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-MMMMd":"d MMMM","dateFormat-short":"d/MM/yy","dateFormat-long":"d MMMM y","dateFormatItem-MMMEd":"E, d MMM","dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","timeFormat-short":"h:mm a","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-yMMMEd":"EEE, MMM d, y","dateFormatItem-Md":"M/d","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/es/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/es/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/es/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/es/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/es/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/es/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"dólar de Hong Kong","CHF_displayName":"franco suizo","CAD_displayName":"dólar canadiense","CNY_displayName":"yuan renminbi chino","AUD_displayName":"dólar australiano","JPY_displayName":"yen japonés","USD_displayName":"dólar estadounidense","GBP_displayName":"libra esterlina británica","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/es/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/es/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/es/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"día de la semana","dateFormatItem-yyQQQQ":"QQQQ 'de' yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["a.C.","d.C."],"dateFormatItem-MMMdd":"dd-MMM","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"año","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","field-hour":"hora","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"hoy","field-day-relative+1":"mañana","field-day-relative+2":"pasado mañana","field-day-relative+3":"Dentro de tres días","months-standAlone-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormatItem-MMMMd":"d 'de' MMMM","dateFormatItem-yyMMM":"MMM-yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"minuto","field-dayperiod":"periodo del día","days-standAlone-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ayer","dateFormatItem-h":"hh a","field-day-relative+-2":"antes de ayer","field-day-relative+-3":"Hace tres días","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"MMMM 'de' y","field-day":"día","days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"eraNames":["antes de Cristo","anno Dómini"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mes","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","field-second":"segundo","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"semana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ko/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ko/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ko/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ko/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ko/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ko/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"홍콩 달러","CHF_displayName":"스위스 프랑","CAD_displayName":"캐나다 달러","CNY_displayName":"중국 위안 인민폐","AUD_displayName":"호주 달러","JPY_displayName":"일본 엔화","USD_displayName":"미국 달러","GBP_displayName":"영국령 파운드 스털링","EUR_displayName":"유로화","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ko/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ko/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ko/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"field-weekday":"요일","dateFormatItem-yQQQ":"y년 QQQ","dateFormatItem-yMEd":"yyyy. M. d. EEE","dateFormatItem-MMMEd":"MMM d일 (E)","eraNarrow":["기원전","서기"],"dateFormat-long":"y년 M월 d일","months-format-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d일 EEE","dayPeriods-format-wide-pm":"오후","dateFormat-full":"y년 M월 d일 EEEE","dateFormatItem-Md":"M. d.","field-era":"연호","dateFormatItem-yM":"yyyy. M.","months-standAlone-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"timeFormat-short":"a h:mm","quarters-format-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"timeFormat-long":"a h시 m분 s초 z","field-year":"년","dateFormatItem-yMMM":"y년 MMM","dateFormatItem-yQ":"y년 Q분기","field-hour":"시","dateFormatItem-MMdd":"MM. dd","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyQ":"yy년 Q분기","timeFormat-full":"a h시 m분 s초 zzzz","field-day-relative+0":"오늘","field-day-relative+1":"내일","field-day-relative+2":"모레","field-day-relative+3":"3일후","months-standAlone-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"quarters-format-abbr":["1분기","2분기","3분기","4분기"],"quarters-standAlone-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"dateFormatItem-yyMMM":"yy년 MMM","timeFormat-medium":"a h:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1분기","2분기","3분기","4분기"],"eraAbbr":["기원전","서기"],"field-minute":"분","field-dayperiod":"오전/오후","days-standAlone-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"어제","dateFormatItem-h":"a h","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"그저께","field-day-relative+-3":"그끄제","dateFormatItem-MMMd":"MMM d일","dateFormatItem-MEd":"M. d. (E)","dateTimeFormat-full":"{1} {0}","field-day":"일","days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-zone":"시간대","dateFormatItem-yyyyMM":"yyyy. MM","dateFormatItem-y":"y","months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyMM":"YY. M.","dateFormatItem-hm":"a h:mm","days-format-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-yMMMd":"y년 MMM d일","eraNames":["서력기원전","서력기원"],"days-format-narrow":["일","월","화","수","목","금","토"],"field-month":"월","days-standAlone-narrow":["일","월","화","수","목","금","토"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"오전","dateFormat-short":"yy. M. d.","field-second":"초","dateFormatItem-yMMMEd":"y년 MMM d일 EEE","dateFormatItem-Ed":"d일 (E)","field-week":"주","dateFormat-medium":"yyyy. M. d.","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H시 m분 s초","dateFormatItem-hms":"a h:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/zh-tw/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/zh-tw/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/zh-tw/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"BRE_displayName":"巴西克魯賽羅 (1990-1993)","DEM_displayName":"德國馬克","KGS_symbol":"som","CUP_displayName":"古巴披索","HUF_symbol":"Ft","BDT_symbol":"Tk","LSL_symbol":"M","VEF_symbol":"BsF","MDL_displayName":"摩杜雲列伊","DOP_displayName":"多明尼加披索","MTL_symbol":"Lm","NGN_displayName":"奈及利亞奈拉","KZT_displayName":"卡扎克斯坦坦吉","BGL_symbol":"lev","LTT_displayName":"立陶宛特羅","LAK_displayName":"寮國基普","LKR_displayName":"斯里蘭卡盧布","AOR_displayName":"安哥拉新寬扎 Reajustado (1995-1999)","XEU_displayName":"歐洲貨幣單位 XEU","SYP_symbol":"LS","USS_displayName":"美元 (同一天)","MNT_displayName":"蒙古圖格里克","AMD_symbol":"dram","MOP_displayName":"澳門元","TJR_displayName":"塔吉克斯坦盧布","LUC_displayName":"盧森堡可兌換法郎","LUL_displayName":"盧森堡金融法郎","MRO_symbol":"UM","AON_displayName":"安哥拉新寬扎 (1990-2000)","BEF_displayName":"比利時法郎","IEP_displayName":"愛爾蘭鎊","SBD_displayName":"索羅門群島元","GRD_displayName":"希臘德拉克馬","AZM_displayName":"阿塞拜彊馬特納","MTP_displayName":"馬爾他鎊","UGX_symbol":"U Sh","ARS_symbol":"Arg$","LVR_displayName":"拉脫維亞盧布","GNF_displayName":"幾內亞法郎","GIP_displayName":"直布羅陀鎊","SRG_displayName":"蘇里南盾","BAD_displayName":"波士尼亞-黑塞哥維那第納爾","FJD_displayName":"斐濟元","BAM_displayName":"波士尼亞-黑塞哥維那可轉換馬克","XBB_displayName":"歐洲貨幣單位 XBB","CDF_displayName":"剛果法郎","HRD_displayName":"克羅地亞第納爾","EQE_displayName":"埃奎維勒","BZD_displayName":"伯利茲元","MLF_displayName":"馬里法郎","VEB_symbol":"Be","EGP_displayName":"埃及鎊","MVR_displayName":"馬爾地夫海島盧非亞","KWD_symbol":"KD","TRL_symbol":"TL","ALL_symbol":"lek","SDP_displayName":"蘇丹鎊","NPR_displayName":"尼泊爾盧布","PHP_displayName":"菲律賓披索","DJF_symbol":"DF","WST_displayName":"西薩摩亞塔拉","JPY_displayName":"日圓","TMM_displayName":"土庫曼馬納特","STD_symbol":"Db","BGN_displayName":"保加利亞新列弗","KYD_displayName":"開曼群島美元","VUV_displayName":"萬那杜萬杜","IRR_displayName":"伊朗里亞爾","DJF_displayName":"吉布地法郎","BTN_symbol":"Nu","XDR_displayName":"特殊提款權","ECS_displayName":"厄瓜多蘇克雷","LSM_displayName":"馬洛蒂","MNT_symbol":"Tug","NLG_displayName":"荷蘭盾","MWK_displayName":"馬拉維克瓦查","IRR_symbol":"RI","OMR_symbol":"RO","JMD_symbol":"J$","PES_displayName":"秘魯太陽幣","SRG_symbol":"Sf","LYD_displayName":"利比亞第納爾","BRR_displayName":"巴西克魯賽羅","ETB_symbol":"Br","KMF_symbol":"CF","DKK_symbol":"DKr","XXX_displayName":"XXX","IDR_displayName":"印尼 - 盧布","DZD_symbol":"DA","TZS_symbol":"T Sh","SGD_symbol":"SGD","KGS_displayName":"吉爾吉斯索馬","BRN_displayName":"巴西克如爾達農瓦","AFN_symbol":"Af","ISK_displayName":"冰島克朗","LUF_displayName":"盧森堡法郎","MXN_symbol":"MEX$","GYD_symbol":"G$","TOP_symbol":"T$","SVC_displayName":"薩爾瓦多科郎","ZMK_displayName":"尚比亞克瓦查","TOP_displayName":"東加潘加","ITL_displayName":"義大利里拉","USN_displayName":"美元 (第二天)","KWD_displayName":"科威特第納爾","GEL_symbol":"lari","KMF_displayName":"科摩羅法郎","COP_symbol":"Col$","MYR_displayName":"馬來西亞 - 林吉特","XFU_displayName":"法國 UIC 法郎","GMD_displayName":"甘比亞達拉西","LVL_displayName":"拉脫維亞拉特銀幣","AUD_displayName":"澳幣","XPF_displayName":"CFP 法郎","LBP_displayName":"黎巴嫩鎊","SKK_symbol":"Sk","BYB_displayName":"白俄羅斯新盧布 (1994-1999)","MKD_displayName":"馬其頓第納爾","GWP_displayName":"幾內亞披索披索","CNY_displayName":"人民幣","HNL_symbol":"L","BOB_symbol":"Bs","JOD_displayName":"約旦第納爾","OMR_displayName":"阿曼里奧","BOV_displayName":"玻利維亞幕多","XPT_displayName":"白金","AUD_symbol":"AU$","NOK_displayName":"挪威克羅納","SCR_displayName":"塞舌爾群島盧布","XBA_displayName":"歐洲綜合單位","CSK_displayName":"捷克斯洛伐克硬克朗","PLZ_displayName":"波蘭茲羅提 (1950-1995)","UAK_displayName":"烏克蘭卡本瓦那茲","MGF_displayName":"馬達加斯加法郎","GNS_displayName":"幾內亞西里","YUN_displayName":"南斯拉夫 可轉換第納爾","UYU_symbol":"Ur$","GYD_displayName":"圭亞那元","QAR_displayName":"卡達爾里亞爾","BZD_symbol":"BZ$","JOD_symbol":"JD","ALL_displayName":"阿爾巴尼亞列克","BBD_displayName":"巴貝多元","RON_displayName":"羅馬尼亞列伊","XCD_symbol":"EC$","AMD_displayName":"亞美尼亞德拉姆","CYP_displayName":"賽浦路斯鎊","GBP_symbol":"£","SEK_displayName":"瑞典克羅納","MZN_symbol":"MTn","MMK_displayName":"緬甸元","ZAR_displayName":"南非蘭特","ECV_displayName":"厄瓜多爾由里達瓦康斯坦 (UVC)","LYD_symbol":"LD","VUV_symbol":"VT","AWG_displayName":"阿魯巴盾","CVE_symbol":"CVEsc","STD_displayName":"聖多美島和普林西比島多布拉","CAD_displayName":"加幣","ADP_displayName":"安道爾陪士特","MRO_displayName":"茅利塔尼亞烏吉亞","LSL_displayName":"賴索托羅蒂","TND_displayName":"突尼西亞第納爾","USD_symbol":"$","BMD_symbol":"Ber$","BAM_symbol":"KM","BRC_displayName":"巴西克魯賽羅 (1986-1989)","BMD_displayName":"百慕達幣","BRL_displayName":"巴西里拉","JMD_displayName":"牙買加元","SOS_displayName":"索馬利亞先令","SAR_displayName":"沙烏地里雅","PEI_displayName":"祕魯因蒂","ESP_displayName":"西班牙陪士特","HKD_displayName":"港幣","ESP_symbol":"₧","BWP_displayName":"波札那 - 普拉","TTD_displayName":"千里達及托巴哥元","BSD_displayName":"巴哈馬元","BIF_displayName":"蒲隆地法郎","FRF_displayName":"法國法郎","DKK_displayName":"丹麥克羅納","AED_displayName":"阿拉伯聯合大公國迪爾汗","GHS_symbol":"GH¢","AOK_displayName":"安哥拉寬扎(1977-1990)","ATS_displayName":"奧地利先令","PEN_displayName":"秘魯新太陽幣","CRC_displayName":"哥斯大黎加科郎","PAB_displayName":"巴拿馬巴波亞","CHE_displayName":"WIR 歐元","GQE_displayName":"赤道幾內亞埃奎勒","DZD_displayName":"阿爾及利亞第納爾","EEK_displayName":"愛沙尼亞克朗","YDD_displayName":"葉門第納爾","GHC_displayName":"迦納仙蔕","YER_symbol":"YRl","PLN_symbol":"Zl","NPR_symbol":"Nrs","MXP_displayName":"墨西哥銀披索 (1861-1992)","XAG_displayName":"XAG","XFO_displayName":"法國金法郎","GWE_displayName":"葡屬幾內亞埃斯庫多","BOB_displayName":"玻利維亞貨幣單位","CAD_symbol":"CA$","ZWD_displayName":"辛巴威元","SRD_displayName":"蘇利南元","ZRN_displayName":"薩伊新扎伊爾","XAU_displayName":"黃金","GTQ_symbol":"Q","KRW_symbol":"KRW","BOP_displayName":"玻利維亞披索","LBP_symbol":"LL","XBD_displayName":"歐洲會計單位(XBD)","TZS_displayName":"坦尚尼亞先令","XPF_symbol":"CFPF","TTD_symbol":"TT$","LRD_displayName":"賴比瑞亞元","KRW_displayName":"韓國圜","SHP_displayName":"聖赫勒拿鎊","NAD_symbol":"N$","MZE_displayName":"莫桑比克埃斯庫多","SDD_displayName":"蘇丹第納爾","HRK_displayName":"克羅地亞庫納","FKP_displayName":"福克蘭群島鎊","COP_displayName":"哥倫比亞披索","YUD_displayName":"南斯拉夫第納爾硬幣","YUM_displayName":"南斯拉夫挪威亞第納爾","BYR_symbol":"Rbl","THB_displayName":"泰銖","MGA_displayName":"馬達加斯加艾瑞爾","TWD_displayName":"新臺幣","UGS_displayName":"烏干達先令 (1966-1987)","SBD_symbol":"SI$","ZAL_displayName":"南非 - 蘭特 (金融)","GEL_displayName":"喬治拉里","ILP_displayName":"以色列鎊","MKD_symbol":"MDen","KES_displayName":"肯尼亞先令","CZK_displayName":"捷克克朗","UGX_displayName":"烏干達先令","KZT_symbol":"T","BGL_displayName":"保加利亞硬列弗","ARP_displayName":"阿根廷披索(1983-1985)","BBD_symbol":"BDS$","MYR_symbol":"RM","RUR_displayName":"俄羅斯盧布 (1991-1998)","ERN_displayName":"厄立特里亞納克法","BEF_symbol":"BF","CLF_displayName":"卡林油達佛曼跎","BRB_displayName":"巴西克魯薩多農瓦（1967-1986）","IDR_symbol":"Rp","IEP_symbol":"IR£","BHD_displayName":"巴林第納爾","SYP_displayName":"敘利亞鎊","BIF_symbol":"Fbu","SZL_displayName":"史瓦濟蘭里朗吉尼","INR_displayName":"印度盧布","PTE_displayName":"葡萄牙埃斯庫多","KPW_displayName":"北朝鮮幣","XOF_displayName":"西非法郎 BCEAO","DOP_symbol":"RD$","MXN_displayName":"墨西哥 - 披索","RWF_displayName":"盧安達法郎","ETB_displayName":"衣索比亞比爾","LTL_displayName":"立陶宛里塔","SZL_symbol":"E","QAR_symbol":"QR","SOS_symbol":"Sh.","BND_displayName":"汶萊元","SUR_displayName":"蘇聯盧布","AOA_displayName":"安哥拉寬扎","FJD_symbol":"F$","CVE_displayName":"維德角埃斯庫多","XTS_displayName":"XTS","CLP_displayName":"智利披索","HUF_displayName":"匈牙利 - 福林","LKR_symbol":"SL Re","SCR_symbol":"SR","TJS_displayName":"塔吉克索莫尼","MWK_symbol":"MK","GBP_displayName":"英鎊","TPE_displayName":"帝汶埃斯庫多","GNF_symbol":"GF","SGD_displayName":"新加坡幣","SLL_displayName":"獅子山利昂","MZM_symbol":"Mt","PHP_symbol":"Php","CYP_symbol":"£C","XAF_displayName":"西非法郎 BEAC","MTL_displayName":"馬爾他里拉","KHR_displayName":"柬埔寨瑞爾","ZRZ_displayName":"扎伊爾扎伊爾","KES_symbol":"K Sh","PKR_symbol":"Pra","IQD_symbol":"ID","BEC_displayName":"比利時法郎 （可轉換）","BEL_displayName":"比利時法郎 （金融）","AZN_displayName":"亞塞拜然蒙納特","FIM_displayName":"芬蘭馬克","PKR_displayName":"巴基斯坦盧布","UYP_displayName":"烏拉圭披索 (1975-1993)","ANG_symbol":"NA f.","CHW_displayName":"WIR 法郎","PLN_displayName":"波蘭茲羅提","RON_symbol":"0≤lei|1≤leu|1","BTN_displayName":"不丹那特倫","UAH_displayName":"烏克蘭格里夫那","YER_displayName":"也門里亞爾","UYU_displayName":"烏拉圭披索","CRC_symbol":"C","PGK_displayName":"巴布亞紐幾內亞基那","XBC_displayName":"歐洲會計單位(XBC)","EUR_displayName":"歐元","MUR_displayName":"模里西斯盧布","BYR_displayName":"白俄羅斯盧布","SEK_symbol":"SKr","BHD_symbol":"BD","IQD_displayName":"伊拉克第納爾","VEB_displayName":"委內瑞拉博利瓦","CLP_symbol":"Ch$","MZM_displayName":"莫三比克梅蒂卡爾","NZD_symbol":"$NZ","CHF_symbol":"Fr.","SIT_displayName":"斯洛維尼亞托勒","NOK_symbol":"NKr","XCD_displayName":"格瑞那達元","RUB_displayName":"俄羅斯盧布","BUK_displayName":"緬甸元 BUK","ILS_displayName":"以色列新謝克爾","KHR_symbol":"CR","NAD_displayName":"納米比亞元","HNL_displayName":"洪都拉斯倫皮拉","GTQ_displayName":"瓜地馬拉格查爾","EUR_symbol":"€","NZD_displayName":"紐西蘭幣","ARA_displayName":"阿根廷奧斯特納爾","ARS_displayName":"阿根廷披索","ANG_displayName":"荷屬安地列斯盾","MOP_symbol":"MOP","ZWD_symbol":"Z$","ITL_symbol":"₤","ZAR_symbol":"R","CHF_displayName":"瑞士法郎","USD_displayName":"美元","CNY_symbol":"￥","HKD_symbol":"HK$","JPY_symbol":"JP¥"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/zh-tw/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/zh-tw/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/zh-tw/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"dateFormatItem-yM":"yyyy/M","field-minute":"分鐘","eraNames":["西元前","西元"],"field-weekday":"週天","dateFormatItem-MMdd":"MM/dd","field-day-relative+-3":"大前天","field-relative-day":"大後天","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"年代","field-hour":"小時","quarters-standAlone-abbr":["第1季","第2季","第3季","第4季"],"timeFormat-full":"zzzzah時mm分ss秒","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-Ed":"d日(E)","dateFormatItem-yMMM":"y年M月","eraAbbr":["西元前","西元"],"field-day-relative+2":"後天","field-day-relative+3":"大後天","timeFormat-medium":"ah:mm:ss","field-zone":"區域","dateFormatItem-yyMM":"yy-MM","dateFormat-medium":"yyyy/M/d","quarters-standAlone-wide":["第1季","第2季","第3季","第4季"],"dateFormatItem-yMMMM":"y年M月","dateFormatItem-HHmmss":"H:mm:ss","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-week":"週","dateFormatItem-HHmm":"H:mm","timeFormat-long":"zah時mm分ss秒","dateFormatItem-H":"H時","quarters-format-abbr":["第1季","第2季","第3季","第4季"],"days-format-abbr":["週日","週一","週二","週三","週四","週五","週六"],"field-second":"秒","dateFormatItem-MEd":"M/d（E）","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"days-standAlone-abbr":["週日","週一","週二","週三","週四","週五","週六"],"dateFormat-short":"yy/M/d","dateFormatItem-yMMMEd":"y年M月d日EEE","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"yyyy/M/d（EEE）","dateTimeAvailableFormats":["d日（E）","H:mm","H:mm:ss","M-d（E）","MM/dd","M/d","yyyy/M","yyyy/M/d（EEE）","yyyy年M月","yyyy年M月","yyyy/MM","MMMMdd日","MMMd日","MM-dd","M-d","d日","mm:ss","mm:ss","yyyy年","yyyy-M","yyyy年M月d日，E","yyyy年MMM","yyyy年MMMd日EEE","yyyy年MMMM","yyyy年QQQ","y年QQQ","yy-MM","yy年MMM","yy年第Q季度","yyyy年","yyyy年M月","yyyy年MMMM"],"quarters-format-wide":["第1季","第2季","第3季","第4季"],"eraNarrow":["西元前","西元"],"dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMMEd":"MMMd日E","dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","timeFormat-short":"ah:mm","field-year":"年","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","field-day-relative+0":"今天","field-day-relative+1":"明天","dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","dateFormatItem-Hm":"H:mm","field-dayperiod":"上午/下午","dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-y":"y年","dateFormatItem-hm":"ah:mm","dateFormatItem-yMMMd":"y年MMMd日","days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dayPeriods-format-wide-afternoon":"下午","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/it/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/it/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/it/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Dollaro di Hong Kong","CHF_displayName":"Franco Svizzero","CAD_displayName":"Dollaro Canadese","CNY_displayName":"Renmimbi Cinese","AUD_displayName":"Dollaro Australiano","JPY_displayName":"Yen Giapponese","USD_displayName":"Dollaro Statunitense","GBP_displayName":"Sterlina Inglese","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/it/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/it/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/it/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"field-weekday":"giorno della settimana","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-MMMEd":"EEE d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"dd MMMM y","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"dayPeriods-format-wide-pm":"p.","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"anno","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q-yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"oggi","field-day-relative+1":"domani","field-day-relative+2":"dopodomani","field-day-relative+3":"tra tre giorni","months-standAlone-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["aC","dC"],"field-minute":"minuto","field-dayperiod":"periodo del giorno","days-standAlone-abbr":["dom","lun","mar","mer","gio","ven","sab"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ieri","dateFormatItem-h":"hh a","field-day-relative+-2":"l'altro ieri","field-day-relative+-3":"tre giorni fa","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"giorno","days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"field-zone":"zona","dateFormatItem-y":"y","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"eraNames":["a.C.","d.C"],"days-format-narrow":["D","L","M","M","G","V","S"],"field-month":"mese","days-standAlone-narrow":["D","L","M","M","G","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"m.","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yy","field-second":"secondo","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"settimana","dateFormat-medium":"dd/MMM/y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/it/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/it/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/it/number.js	(revision 9)
@@ -0,0 +1 @@
+({"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sk/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sk/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sk/number.js	(revision 9)
@@ -0,0 +1 @@
+({"currencyFormat":"#,##0.00 ¤","group":" ","decimal":",","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","percentFormat":"#,##0%","decimalFormat":"#,##0.###","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sk/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sk/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sk/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hong Kongský dolár","CHF_displayName":"Švajčiarský frank","CAD_displayName":"Kanadský dolár","CNY_displayName":"Čínsky Yuan Renminbi","AUD_displayName":"Austrálsky dolár","JPY_displayName":"Japonský yen","USD_displayName":"US dolár","GBP_displayName":"Britská libra","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sk/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sk/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sk/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"field-dayperiod":"Časť dňa","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"popoludní","field-minute":"Minúta","eraNames":["pred n.l.","n.l."],"dateFormatItem-MMMEd":"E, d. MMM","field-day-relative+-1":"Včera","field-weekday":"Deň v týždni","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"Predvčerom","field-day-relative+-3":"Pred tromi dňami","days-standAlone-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Éra","field-hour":"Hodina","dayPeriods-format-wide-am":"dopoludnia","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Dnes","field-day-relative+1":"Zajtra","days-standAlone-narrow":["N","P","U","S","Š","P","S"],"eraAbbr":["pred n.l.","n.l."],"field-day-relative+2":"Pozajtra","field-day-relative+3":"O tri dni","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE, d.","field-zone":"Pásmo","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"dateFormatItem-yMMMM":"LLLL y","dateFormatItem-ms":"mm:ss","field-year":"Rok","months-standAlone-wide":["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],"field-week":"Týždeň","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"Mesiac","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ne","po","ut","st","št","pi","so"],"dateFormatItem-mmss":"mm:ss","days-format-narrow":["N","P","U","S","Š","P","S"],"field-second":"Sekunda","field-day":"Deň","dateFormatItem-MEd":"E, d.M.","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"days-standAlone-abbr":["ne","po","ut","st","št","pi","so"],"dateFormat-short":"d.M.yyyy","dateFormatItem-yyyyM":"M.yyyy","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE, d.M.yyyy","months-format-wide":["januára","februára","marca","apríla","mája","júna","júla","augusta","septembra","októbra","novembra","decembra"],"dateFormatItem-d":"d.","quarters-format-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"days-format-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"eraNarrow":["pred n.l.","n.l."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sl/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sl/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sl/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"field-dayperiod":"Čas dneva","dayPeriods-format-wide-pm":"pop.","field-minute":"Minuta","eraNames":["pred našim štetjem","naše štetje"],"field-day-relative+-1":"Včeraj","field-weekday":"Dan v tednu","field-day-relative+-2":"Predvčerajšnjim","field-day-relative+-3":"Pred tremi dnevi","days-standAlone-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Doba","field-hour":"Ura","dayPeriods-format-wide-am":"dop.","dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"field-day-relative+0":"Danes","field-day-relative+1":"Jutri","days-standAlone-narrow":["n","p","t","s","č","p","s"],"eraAbbr":["pr. n. št.","po Kr."],"field-day-relative+2":"Pojutrišnjem","field-day-relative+3":"Čez tri dni","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"dd. MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Območje","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d. MMM. yyyy","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"dateFormatItem-ms":"mm:ss","field-year":"Leto","months-standAlone-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"field-week":"Teden","dateFormatItem-yyQ":"Q/yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"timeFormat-short":"HH:mm","field-month":"Mesec","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormatItem-MMMMdd":"dd. MMMM","dateFormatItem-mmss":"mm:ss","days-format-narrow":["n","p","t","s","č","p","s"],"field-second":"Sekunda","field-day":"Dan","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"days-standAlone-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormat-short":"d. MM. yy","dateFormatItem-yyyyM":"M/yyyy","dateFormat-full":"EEEE, dd. MMMM y","dateFormatItem-Md":"d. M.","months-format-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"quarters-format-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"days-format-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"eraNarrow":["pr. n. št.","po Kr."],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sl/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sl/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sl/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sl/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sl/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sl/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"hongkonški dolar","CHF_displayName":"švicarski frank","JPY_symbol":"¥","CAD_displayName":"kanadski dolar","CNY_displayName":"kitajski juan renminbi","USD_symbol":"$","AUD_displayName":"avstralski dolar","JPY_displayName":"japonski jen","USD_displayName":"ameriški dolar","GBP_displayName":"britanski funt","EUR_displayName":"evro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/da/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/da/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/da/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hongkong dollar","CHF_displayName":"Schweizisk franc","CAD_displayName":"Canadisk dollar","CNY_displayName":"Kinesisk yuan renminbi","USD_symbol":"$","AUD_displayName":"Australsk dollar","JPY_displayName":"Japansk yen","USD_displayName":"Amerikansk dollar","GBP_displayName":"Britisk pund","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/da/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/da/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/da/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ugedag","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE. d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMM y","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dayPeriods-format-wide-pm":"e.m.","dateFormat-full":"EEEE 'den' d. MMMM y","dateFormatItem-Md":"d/M","field-era":"æra","dateFormatItem-yM":"M/y","months-standAlone-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"timeFormat-short":"HH.mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH.mm.ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"time","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan.","feb.","mar.","apr.","maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yyQ":"Q. 'kvartal' yy","timeFormat-full":"HH.mm.ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","dateFormatItem-H":"HH","field-day-relative+3":"i overovermorgen","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"M","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"HH.mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"dagtid","days-standAlone-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E. d/M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"zone","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h.mm a","days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"MMM","dayPeriods-format-wide-am":"f.m.","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormat-short":"dd/MM/yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE. d. MMM y","field-week":"uge","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH.mm.ss","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/da/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/da/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/da/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/hebrew.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/hebrew.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/hebrew.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","months-standAlone-narrow-leap":"Adar II","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["AM"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","months-standAlone-wide":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr-leap":"Adar II","months-format-abbr":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"months-standAlone-wide-leap":"Adar II","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"months-format-narrow-leap":"Adar II","eraAbbr":["AM"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","days-format-wide":["1","2","3","4","5","6","7"],"months-standAlone-abbr-leap":"Adar II","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["Tishri","Heshvan","Kislev","Tevet","Shevat","Adar I","Adar","Nisan","Iyar","Sivan","Tamuz","Av","Elul"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["AM"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormat-medium":"y MMM d","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","months-format-wide-leap":"Adar II"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sv/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sv/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sv/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hongkong-dollar","CHF_displayName":"schweizisk franc","CHF_symbol":"CHF","CAD_displayName":"kanadensisk dollar","CNY_displayName":"kinesisk yuan renminbi","AUD_displayName":"australisk dollar","JPY_displayName":"japansk yen","CAD_symbol":"CAD","USD_displayName":"US-dollar","CNY_symbol":"CNY","GBP_displayName":"brittiskt pund sterling","EUR_displayName":"euro","USD_symbol":"US$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sv/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sv/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sv/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"veckodag","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, yyyy-MM-dd","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d MMMM y","months-format-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"em","dateFormat-full":"EEEE'en' 'den' d:'e' MMMM y","dateFormatItem-Md":"d/M","dateFormatItem-MMMMEEEd":"EEE d MMMM","field-era":"era","dateFormatItem-yM":"yyyy-MM","months-standAlone-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"timeFormat-short":"HH:mm","quarters-format-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"timeFormat-long":"HH:mm:ss z","field-year":"år","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"yyyy Q","field-hour":"timme","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH:mm:ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgon","field-day-relative+2":"i övermorgon","field-day-relative+3":"i överövermorgon","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"dateFormatItem-M":"L","days-standAlone-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-MMMMd":"d:'e' MMMM","dateFormatItem-yyMMM":"MMM -yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"fm/em","days-standAlone-abbr":["sön","mån","tis","ons","tors","fre","lör"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"i går","field-day-relative+-2":"i förrgår","field-day-relative+-3":"i förrförrgår","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","field-day":"dag","days-format-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"field-zone":"tidszon","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"h:mm a","days-format-abbr":["sön","mån","tis","ons","tors","fre","lör"],"eraNames":["före Kristus","efter Kristus"],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"månad","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"fm","dateFormatItem-MMMMEd":"E d:'e' MMMM","dateFormat-short":"yyyy-MM-dd","dateFormatItem-MMd":"d/M","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"vecka","dateFormat-medium":"d MMM y","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/sv/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/sv/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/sv/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":" ","percentSign":"%","exponential":"×10^","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"−","decimal":",","nan":"¤¤¤","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Day of the Week","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["BCE","CE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BCE","CE"],"field-minute":"Minute","field-dayperiod":"Dayperiod","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"field-day-relative+-1":"Yesterday","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","field-day":"Day","days-format-wide":["1","2","3","4","5","6","7"],"field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["BCE","CE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dateFormat-medium":"y MMM d","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/de/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/de/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/de/number.js	(revision 9)
@@ -0,0 +1 @@
+({"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/de/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/de/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/de/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"Hongkong-Dollar","CHF_displayName":"Schweizer Franken","JPY_symbol":"¥","CAD_displayName":"Kanadischer Dollar","CNY_displayName":"Renminbi Yuan","USD_symbol":"$","AUD_displayName":"Australischer Dollar","JPY_displayName":"Yen","USD_displayName":"US-Dollar","GBP_displayName":"Pfund Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/de/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/de/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/de/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Wochentag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d.M.y","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["v. Chr.","n. Chr."],"dayPeriods-format-wide-earlyMorning":"morgens","dayPeriods-format-wide-morning":"vormittags","dateFormat-long":"d. MMMM y","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dayPeriods-format-wide-evening":"abends","dateFormatItem-EEEd":"d. EEE","dayPeriods-format-wide-pm":"nachm.","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yyMMdd":"dd.MM.yy","dayPeriods-format-wide-noon":"Mittag","field-era":"Epoche","dateFormatItem-yM":"M.y","months-standAlone-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jahr","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Stunde","dateFormatItem-MMdd":"dd.MM.","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"heute","field-day-relative+1":"morgen","field-day-relative+2":"übermorgen","dateFormatItem-H":"HH","field-day-relative+3":"überübermorgen","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"dateFormatItem-M":"L","days-standAlone-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minute","field-dayperiod":"Tageshälfte","days-standAlone-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayPeriods-format-wide-night":"nachts","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gestern","field-day-relative+-2":"vorgestern","field-day-relative+-3":"vorvorgestern","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E, d.M.","field-day":"Tag","days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"field-zone":"Zone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","days-format-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"eraNames":["v. Chr.","n. Chr."],"days-format-narrow":["S","M","D","M","D","F","S"],"field-month":"Monat","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"vorm.","dateFormatItem-MMMMdd":"dd. MMMM","dateFormat-short":"dd.MM.yy","dateFormatItem-MMd":"d.MM.","dayPeriods-format-wide-afternoon":"nachmittags","field-second":"Sekunde","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormatItem-Ed":"E d.","field-week":"Woche","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ja/number.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ja/number.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ja/number.js	(revision 9)
@@ -0,0 +1 @@
+({"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ja/currency.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ja/currency.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ja/currency.js	(revision 9)
@@ -0,0 +1 @@
+({"HKD_displayName":"香港ドル","CHF_displayName":"スイス フラン","JPY_symbol":"￥","CAD_displayName":"カナダ ドル","CNY_displayName":"中国人民元","USD_symbol":"$","AUD_displayName":"オーストラリア ドル","JPY_displayName":"日本円","USD_displayName":"米ドル","CNY_symbol":"元","GBP_displayName":"英国ポンド","EUR_displayName":"ユーロ","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","EUR_symbol":"€"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/nls/ja/gregorian.js
===================================================================
--- trunk/web/dojo/dojo/cldr/nls/ja/gregorian.js	(revision 0)
+++ trunk/web/dojo/dojo/cldr/nls/ja/gregorian.js	(revision 9)
@@ -0,0 +1 @@
+({"field-weekday":"曜日","dateFormatItem-yQQQ":"yQQQ","dateFormatItem-yMEd":"y/M/d(EEE)","dateFormatItem-MMMEd":"M月d日(E)","eraNarrow":["BC","AD"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"午後","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMd":"y/M/d","field-era":"時代","dateFormatItem-yM":"y/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"H:mm","quarters-format-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"timeFormat-long":"H:mm:ss z","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y/Q","field-hour":"時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy/Q","timeFormat-full":"H時mm分ss秒 zzzz","field-day-relative+0":"今日","field-day-relative+1":"明日","field-day-relative+2":"明後日","dateFormatItem-H":"H時","field-day-relative+3":"3日後","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"dateFormatItem-M":"L","days-standAlone-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"dateFormatItem-yyMMM":"y年M月","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["BC","AD"],"field-minute":"分","field-dayperiod":"午前/午後","days-standAlone-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨日","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"一昨日","field-day-relative+-3":"3日前","dateFormatItem-MMMd":"M月d日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-zone":"タイムゾーン","dateFormatItem-yyyyMM":"yyyy/MM","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"ah:mm","dateFormatItem-GGGGyMd":"GGGGy年M月d日","days-format-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-yMMMd":"y年M月d日","eraNames":["紀元前","西暦"],"days-format-narrow":["日","月","火","水","木","金","土"],"field-month":"月","days-standAlone-narrow":["日","月","火","水","木","金","土"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"午前","dateFormat-short":"yy/MM/dd","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日(EEE)","dateFormatItem-Ed":"d日(EEE)","field-week":"週","dateFormat-medium":"yyyy/MM/dd","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/cldr/README
===================================================================
--- trunk/web/dojo/dojo/cldr/README	(revision 0)
+++ trunk/web/dojo/dojo/cldr/README	(revision 9)
@@ -0,0 +1,18 @@
+All files within this directory were derived from the Common Locale
+Data Repository (see http://unicode.org/cldr)  The CLDR project is
+responsible for the accuracy and maintenance of this data.  A copy
+of this data is checked into the Dojo util project as a zip file.
+The XML data is transformed to the JSON-style Javascript you see
+under the nls/ directory.  These Javascript files include data
+necessary to do things like format and parse dates, numbers, and
+currencies in different locales to consider cultural differences.
+They are used by other modules in core Dojo such as dojo.date,
+dojo.number and dojo.currency.  It usually is not necessary to use
+dojo.cldr directly.
+
+An arbitrary subset of locales have been checked in to dojo/cldr
+under svn.  To support other locales, the full set may be generated
+by using xslt scripts in the util/buildscripts/cldr/ ant script.
+Hundreds of locales are supported by the CLDR project.
+
+See terms of use: http://www.unicode.org/copyright.html#Exhibit1
Index: trunk/web/dojo/dojo/uacss.js
===================================================================
--- trunk/web/dojo/dojo/uacss.js	(revision 0)
+++ trunk/web/dojo/dojo/uacss.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.uacss"]){
+dojo._hasResource["dojo.uacss"]=true;
+dojo.provide("dojo.uacss");
+(function(){
+var d=dojo,_1=d.doc.documentElement,ie=d.isIE,_2=d.isOpera,_3=Math.floor,ff=d.isFF,_4=d.boxModel.replace(/-/,""),_5={dj_ie:ie,dj_ie6:_3(ie)==6,dj_ie7:_3(ie)==7,dj_ie8:_3(ie)==8,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_2,dj_khtml:d.isKhtml,dj_webkit:d.isWebKit,dj_safari:d.isSafari,dj_chrome:d.isChrome,dj_gecko:d.isMozilla,dj_ff3:_3(ff)==3};
+_5["dj_"+_4]=true;
+var _6="";
+for(var _7 in _5){
+if(_5[_7]){
+_6+=_7+" ";
+}
+}
+_1.className=d.trim(_1.className+" "+_6);
+dojo._loaders.unshift(function(){
+if(!dojo._isBodyLtr()){
+var _8="dj_rtl dijitRtl "+_6.replace(/ /g,"-rtl ");
+_1.className=d.trim(_1.className+" "+_8);
+}
+});
+})();
+}
Index: trunk/web/dojo/dojo/nls/pt-pt/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/pt-pt/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/pt-pt/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento escuro","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento escuro","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/cs/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/cs/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/cs/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"světlá ocelová modrá","orangered":"oranžovočervená","midnightblue":"temně modrá","cadetblue":"šedomodrá","seashell":"lasturová","slategrey":"břidlicová šedá","coral":"korálová červená","darkturquoise":"tmavě tyrkysová","antiquewhite":"krémově bílá","mediumspringgreen":"střední jarní zelená","salmon":"lososová","darkgrey":"tmavě šedá","ivory":"slonovinová","greenyellow":"zelenožlutá","mistyrose":"růžovobílá","lightsalmon":"světle lososová","silver":"stříbrná","dimgrey":"kouřově šedá","orange":"oranžová","white":"bílá","navajowhite":"světle krémová","royalblue":"královská modrá","deeppink":"sytě růžová","lime":"limetková","oldlace":"světle béžová","chartreuse":"chartreuska","darkcyan":"tmavě azurová","yellow":"žlutá","linen":"bledě šedobéžová","olive":"olivová","gold":"zlatá","lawngreen":"jasně zelená","lightyellow":"bledě žlutá","tan":"šedobéžová","darkviolet":"tmavě fialová","lightslategrey":"světlá břidlicová šedá","grey":"šedá","darkkhaki":"pískově hnědá","green":"zelená","deepskyblue":"sytá nebeská modrá","aqua":"azurová","sienna":"siena","mintcream":"mentolová","rosybrown":"růžovohnědá","mediumslateblue":"střední břidlicová modrá","magenta":"purpurová","lightseagreen":"světlá mořská zelená","cyan":"azurová","olivedrab":"khaki","darkgoldenrod":"tmavě béžová","slateblue":"břidlicová modrá","mediumaquamarine":"střední akvamarínová","lavender":"levandulová","mediumseagreen":"střední mořská zelená","maroon":"kaštanová","darkslategray":"tmavá břidlicová šedá","mediumturquoise":"středně tyrkysová","ghostwhite":"modravě bílá","darkblue":"tmavě modrá","mediumvioletred":"středně fialovočervená","brown":"červenohnědá","lightgray":"světle šedá","sandybrown":"oranžovohnědá","pink":"růžová","firebrick":"cihlová","indigo":"indigově modrá","snow":"sněhobílá","darkorchid":"tmavě orchidejová","turquoise":"tyrkysová","chocolate":"hnědobéžová","springgreen":"jarní zelená","moccasin":"bledě krémová","navy":"námořnická modrá","lemonchiffon":"světle citrónová","teal":"šedozelená","floralwhite":"květinově bílá","cornflowerblue":"chrpově modrá","paleturquoise":"bledě tyrkysová","purple":"nachová","gainsboro":"bledě šedá","plum":"švestková","red":"červená","blue":"modrá","forestgreen":"lesní zelená","darkgreen":"tmavě zelená","honeydew":"nazelenalá","darkseagreen":"tmavá mořská zelená","lightcoral":"světle korálová","palevioletred":"bledě fialovočervená","mediumpurple":"středně nachová","saddlebrown":"hnědá","darkmagenta":"tmavě purpurová","thistle":"bodláková","whitesmoke":"kouřově bílá","wheat":"zlatohnědá","violet":"fialová","lightskyblue":"světlá nebeská modrá","goldenrod":"béžová","mediumblue":"středně modrá","skyblue":"nebeská modrá","crimson":"karmínová","darksalmon":"tmavě lososová","darkred":"tmavě červená","darkslategrey":"tmavá břidlicová šedá","peru":"karamelová","lightgrey":"světle šedá","lightgoldenrodyellow":"světle žlutá","blanchedalmond":"mandlová","aliceblue":"modravá","bisque":"bledě oranžová","slategray":"břidlicová šedá","palegoldenrod":"bledě písková","darkorange":"tmavě oranžová","aquamarine":"akvamarínová","lightgreen":"světle zelená","burlywood":"krémová","dodgerblue":"jasně modrá","darkgray":"tmavě šedá","lightcyan":"světle azurová","powderblue":"bledě modrá","blueviolet":"modrofialová","orchid":"orchidejová","dimgray":"kouřově šedá","beige":"bledě béžová","fuchsia":"fuchsiová","lavenderblush":"levandulová růžová","hotpink":"jasně růžová","steelblue":"ocelová modrá","tomato":"tomatová","lightpink":"světle růžová","limegreen":"limetkově zelená","indianred":"indiánská červená","papayawhip":"papájová","lightslategray":"světlá břidlicová šedá","gray":"šedá","mediumorchid":"středně orchidejová","cornsilk":"režná","black":"černá","seagreen":"mořská zelená","darkslateblue":"tmavá břidlicová modrá","khaki":"písková","lightblue":"světle modrá","palegreen":"bledě zelená","azure":"bledě azurová","peachpuff":"broskvová","darkolivegreen":"tmavě olivová","yellowgreen":"žlutozelená"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/fr/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/fr/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/fr/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/es/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/es/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/es/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/ko/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/ko/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/ko/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"라이트 스틸 블루(light steel blue)","orangered":"오렌지 레드(orange red)","midnightblue":"미드나잇 블루(midnight blue)","cadetblue":"카뎃 블루(cadet blue)","seashell":"씨쉘(seashell)","slategrey":"슬레이트 그레이(slate gray)","coral":"코랄(coral)","darkturquoise":"다크 터콰즈(dark turquoise)","antiquewhite":"앤틱 화이트(antique white)","mediumspringgreen":"미디엄 스프링 그린(medium spring green)","salmon":"샐몬(salmon)","darkgrey":"다크 그레이(dark gray)","ivory":"아이보리(ivory)","greenyellow":"그린 옐로우(green-yellow)","mistyrose":"미스티 로즈(misty rose)","lightsalmon":"라이트 샐몬(light salmon)","silver":"실버(silver)","dimgrey":"딤 그레이(dim gray)","orange":"오렌지(orange)","white":"화이트(white)","navajowhite":"나바호 화이트(navajo white)","royalblue":"로얄 블루(royal blue)","deeppink":"딥 핑크(deep pink)","lime":"라임(lime)","oldlace":"올드 레이스(old lace)","chartreuse":"샤르트뢰즈(chartreuse)","darkcyan":"다크 시안(dark cyan)","yellow":"옐로우(yellow)","linen":"리넨(linen)","olive":"올리브(olive)","gold":"골드(gold)","lawngreen":"론 그린(lawn green)","lightyellow":"라이트 옐로우(light yellow)","tan":"탠(tan)","darkviolet":"다크 바이올렛(dark violet)","lightslategrey":"라이트 슬레이트 그레이(light slate gray)","grey":"그레이(gray)","darkkhaki":"다크 카키(dark khaki)","green":"그린(green)","deepskyblue":"딥 스카이 블루(deep sky blue)","aqua":"아쿠아(aqua)","sienna":"시에나(sienna)","mintcream":"민트 크림(mint cream)","rosybrown":"로지 브라운(rosy brown)","mediumslateblue":"미디엄 슬레이트 블루(medium slate blue)","magenta":"마젠타(magenta)","lightseagreen":"라이트 씨 그린(light sea green)","cyan":"시안(cyan)","olivedrab":"올리브 드랩(olive drab)","darkgoldenrod":"다크 골든로드(dark goldenrod)","slateblue":"슬레이트 블루(slate blue)","mediumaquamarine":"미디엄 아쿠아마린(medium aquamarine)","lavender":"라벤더(lavender)","mediumseagreen":"미디엄 씨 그린(medium sea green)","maroon":"마룬(maroon)","darkslategray":"다크 슬레이트 그레이(dark slate gray)","mediumturquoise":"미디엄 터콰즈(medium turquoise)","ghostwhite":"고스트 화이트(ghost white)","darkblue":"다크 블루(dark blue)","mediumvioletred":"미디엄 바이올렛 레드(medium violet-red)","brown":"브라운(brown)","lightgray":"라이트 그레이(light gray)","sandybrown":"샌디 브라운(sandy brown)","pink":"핑크(pink)","firebrick":"파이어 브릭(fire brick)","indigo":"인디고(indigo)","snow":"스노우(snow)","darkorchid":"다크 오키드(dark orchid)","turquoise":"터콰즈(turquoise)","chocolate":"초콜렛(chocolate)","springgreen":"스프링 그린(spring green)","moccasin":"모카신(moccasin)","navy":"네이비(navy)","lemonchiffon":"레몬 쉬폰(lemon chiffon)","teal":"틸(teal)","floralwhite":"플로랄 화이트(floral white)","cornflowerblue":"콘플라워 블루(cornflower blue)","paleturquoise":"페일 터콰즈(pale turquoise)","purple":"퍼플(purple)","gainsboro":"게인스브로(gainsboro)","plum":"플럼(plum)","red":"레드(red)","blue":"블루(blue)","forestgreen":"포레스트 그린(forest green)","darkgreen":"다크 그린(dark green)","honeydew":"허니듀(honeydew)","darkseagreen":"다크 씨 그린(dark sea green)","lightcoral":"라이트 코랄(light coral)","palevioletred":"페일 바이올렛 레드(pale violet-red)","mediumpurple":"미디엄 퍼플(medium purple)","saddlebrown":"새들 브라운(saddle brown)","darkmagenta":"다크 마젠타(dark magenta)","thistle":"시슬(thistle)","whitesmoke":"화이트 스모크(white smoke)","wheat":"휘트(wheat)","violet":"바이올렛(violet)","lightskyblue":"라이트 스카이 블루(light sky blue)","goldenrod":"골든로드(goldenrod)","mediumblue":"미디엄 블루(medium blue)","skyblue":"스카이 블루(sky blue)","crimson":"크림슨(crimson)","darksalmon":"다크 샐몬(dark salmon)","darkred":"다크 레드(dark red)","darkslategrey":"다크 슬레이트 그레이(dark slate gray)","peru":"페루(peru)","lightgrey":"라이트 그레이(light gray)","lightgoldenrodyellow":"라이트 골든로드 옐로우(light goldenrod yellow)","blanchedalmond":"블랜치 아몬드(blanched almond)","aliceblue":"앨리스 블루(alice blue)","bisque":"비스크(bisque)","slategray":"슬레이트 그레이(slate gray)","palegoldenrod":"페일 골든로드(pale goldenrod)","darkorange":"다크 오렌지(dark orange)","aquamarine":"아쿠아마린(aquamarine)","lightgreen":"라이트 그린(light green)","burlywood":"벌리우드(burlywood)","dodgerblue":"다저 블루(dodger blue)","darkgray":"다크 그레이(dark gray)","lightcyan":"라이트 시안(light cyan)","powderblue":"파우더 블루(powder blue)","blueviolet":"블루 바이올렛(blue-violet)","orchid":"오키드(orchid)","dimgray":"딤 그레이(dim gray)","beige":"베이지(beige)","fuchsia":"후크샤(fuchsia)","lavenderblush":"라벤더 블러쉬(lavender blush)","hotpink":"핫 핑크(hot pink)","steelblue":"스틸 블루(steel blue)","tomato":"토마토(tomato)","lightpink":"라이트 핑크(light pink)","limegreen":"라임 그린(lime green)","indianred":"인디안 레드(indian red)","papayawhip":"파파야 휩(papaya whip)","lightslategray":"라이트 슬레이트 그레이(light slate gray)","gray":"그레이(gray)","mediumorchid":"미디엄 오키드(medium orchid)","cornsilk":"콘실크(cornsilk)","black":"블랙(black)","seagreen":"씨 그린(sea green)","darkslateblue":"다크 슬레이트 블루(dark slate blue)","khaki":"카키(khaki)","lightblue":"라이트 블루(light blue)","palegreen":"페일 그린(pale green)","azure":"애쥬어(azure)","peachpuff":"피치 퍼프(peach puff)","darkolivegreen":"다크 올리브 그린(dark olive green)","yellowgreen":"옐로우 그린(yellow green)"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/nl/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/nl/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/nl/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/zh-tw/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/zh-tw/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/zh-tw/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"淡鐵藍色","orangered":"橙紅色","midnightblue":"午夜藍","cadetblue":"軍服藍","seashell":"海貝色","slategrey":"岩灰色","coral":"珊瑚紅","darkturquoise":"暗松石綠","antiquewhite":"米白色","mediumspringgreen":"中春綠色","salmon":"鮭紅色","darkgrey":"暗灰色","ivory":"象牙色","greenyellow":"綠黃色","mistyrose":"霧玫瑰色","lightsalmon":"淡鮭紅","silver":"銀色","dimgrey":"昏灰色","orange":"橙色","white":"白色","navajowhite":"印地安黃色","royalblue":"品藍色","deeppink":"深粉紅色","lime":"檸檬色","oldlace":"舊蕾絲色","chartreuse":"淡黃綠色","darkcyan":"暗青色","yellow":"黃色","linen":"亞麻色","olive":"橄欖色","gold":"金色","lawngreen":"草綠色","lightyellow":"淡黃色","tan":"皮革色","darkviolet":"暗紫羅蘭色","lightslategrey":"淡岩灰色","grey":"灰色","darkkhaki":"暗卡其色","green":"綠色","deepskyblue":"深天藍色","aqua":"水色","sienna":"黃土赭色","mintcream":"薄荷乳白色","rosybrown":"玫瑰褐","mediumslateblue":"中岩藍色","magenta":"紫紅色","lightseagreen":"淡海綠色","cyan":"青色","olivedrab":"橄欖綠","darkgoldenrod":"暗金菊色","slateblue":"岩藍色","mediumaquamarine":"中碧綠色","lavender":"薰衣草紫","mediumseagreen":"中海綠色","maroon":"栗色","darkslategray":"暗岩灰色","mediumturquoise":"中松石綠","ghostwhite":"幽靈色","darkblue":"暗藍色","mediumvioletred":"中紫羅蘭紅","brown":"褐色","lightgray":"淡灰色","sandybrown":"沙褐色","pink":"粉紅色","firebrick":"紅磚色","indigo":"靛藍色","snow":"雪白色","darkorchid":"暗蘭花色","turquoise":"松石綠","chocolate":"巧克力色","springgreen":"春綠色","moccasin":"鹿皮黃色","navy":"海軍藍","lemonchiffon":"奶油黃","teal":"深藍綠色","floralwhite":"花卉白","cornflowerblue":"矢車菊藍","paleturquoise":"灰松石綠","purple":"紫色","gainsboro":"石板灰","plum":"李紫色","red":"紅色","blue":"藍色","forestgreen":"森綠色","darkgreen":"暗綠色","honeydew":"密瓜色","darkseagreen":"暗海綠色","lightcoral":"淡珊瑚紅","palevioletred":"灰紫羅蘭紅","mediumpurple":"中紫色","saddlebrown":"鞍褐色","darkmagenta":"暗紫紅色","thistle":"薊色","whitesmoke":"白煙色","wheat":"小麥色","violet":"紫羅蘭色","lightskyblue":"淡天藍色","goldenrod":"金菊色","mediumblue":"中藍色","skyblue":"天藍色","crimson":"暗深紅色","darksalmon":"暗鮭紅","darkred":"暗紅色","darkslategrey":"暗岩灰色","peru":"祕魯色","lightgrey":"淡灰色","lightgoldenrodyellow":"淡金菊黃","blanchedalmond":"杏仁白","aliceblue":"愛麗絲藍","bisque":"橘黃色","slategray":"岩灰色","palegoldenrod":"灰金菊色","darkorange":"暗橙色","aquamarine":"碧綠色","lightgreen":"淡綠色","burlywood":"實木色","dodgerblue":"道奇藍","darkgray":"暗灰色","lightcyan":"淡青色","powderblue":"粉藍色","blueviolet":"藍紫色","orchid":"蘭花色","dimgray":"昏灰色","beige":"灰棕色","fuchsia":"海棠紅","lavenderblush":"薰衣草紫紅","hotpink":"暖粉紅色","steelblue":"鐵藍色","tomato":"蕃茄紅","lightpink":"淡粉紅色","limegreen":"檸檬綠","indianred":"印度紅","papayawhip":"番木瓜色","lightslategray":"淡岩灰色","gray":"灰色","mediumorchid":"中蘭紫色","cornsilk":"玉米黃","black":"黑色","seagreen":"海綠色","darkslateblue":"暗岩藍色","khaki":"卡其色","lightblue":"淡藍色","palegreen":"灰綠色","azure":"天藍色","peachpuff":"粉撲桃色","darkolivegreen":"暗橄欖綠","yellowgreen":"黃綠色"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/pl/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/pl/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/pl/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"jasny stalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"ciemnogranatowy","cadetblue":"niebieskoszary","seashell":"muszla","slategrey":"łupkowy szary","coral":"koralowy","darkturquoise":"ciemnoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"bladoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przytłumiony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"błękit królewski","deeppink":"głęboki różowy","lime":"limetkowy","oldlace":"bladopomarańczowy","chartreuse":"jaskrawozielony","darkcyan":"ciemny cyjan","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"kawowy","darkviolet":"ciemnofioletowy","lightslategrey":"jasny łupkowy szary","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"wodny","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni łupkowy niebieski","magenta":"magenta","lightseagreen":"jasna morska zieleń","cyan":"cyjan","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemnogliniany","slateblue":"łupkowy niebieski","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia morska zieleń","maroon":"bordowy","darkslategray":"ciemny łupkowy szary","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fioletowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowy brąz","pink":"różowy","firebrick":"ceglasty","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"cytrynowy","teal":"cyrankowy","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"purpurowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"melon","darkseagreen":"ciemna morska zieleń","lightcoral":"jasnokoralowy","palevioletred":"blady fioletowoczerwony","mediumpurple":"średnia purpura","saddlebrown":"skórzany brązowy","darkmagenta":"ciemna magenta","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fioletowy","lightskyblue":"jasny błękit nieba","goldenrod":"gliniany","mediumblue":"średni niebieski","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny łupkowy szary","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnogliniana żółć","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"łupkowy szary","palegoldenrod":"bladogliniany","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasny cyjan","powderblue":"pudrowy niebieski","blueviolet":"niebieskofioletowy","orchid":"orchidea","dimgray":"przytłumiony szary","beige":"beżowy","fuchsia":"fuksja","lavenderblush":"lawendoworóżowy","hotpink":"intensywny różowy","steelblue":"stalowy niebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"limetkowozielony","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny łupkowy szary","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"morska zieleń","darkslateblue":"ciemny łupkowy niebieski","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazur","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/th/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/th/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/th/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"light steel blue","orangered":"ส้มแกมแดง","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"เทาเข้ม","ivory":"งาช้าง","greenyellow":"เขียวแกมเหลือง","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"เงิน","dimgrey":"dim gray","orange":"ส้ม","white":"ขาว","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"ชมพูเข้ม","lime":"เหลืองมะนาว","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"เขียวแกมน้ำเงินเข้ม","yellow":"เหลือง","linen":"linen","olive":"โอลีฟ","gold":"ทอง","lawngreen":"lawn green","lightyellow":"เหลืองอ่อน","tan":"tan","darkviolet":"ม่วงเข้ม","lightslategrey":"light slate gray","grey":"เทา","darkkhaki":"dark khaki","green":"เขียว","deepskyblue":"deep sky blue","aqua":"ฟ้าน้ำทะเล","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"แดงแกมม่วง","lightseagreen":"light sea green","cyan":"เขียวแกมน้ำเงิน","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"ม่วงลาเวนเดอร์","mediumseagreen":"medium sea green","maroon":"น้ำตาลแดง","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"น้ำเงินเข้ม","mediumvioletred":"medium violet-red","brown":"น้ำตาล","lightgray":"เทาอ่อน","sandybrown":"sandy brown","pink":"ชมพู","firebrick":"สีอิฐ","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"ช็อกโกแลต","springgreen":"spring green","moccasin":"ม็อคค่า","navy":"น้ำเงินเข้ม","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"ม่วง","gainsboro":"gainsboro","plum":"plum","red":"แดง","blue":"น้ำเงิน","forestgreen":"forest green","darkgreen":"เขียวเข้ม","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"แดงแกมม่วงเข้ม","thistle":"thistle","whitesmoke":"ขาวควัน","wheat":"wheat","violet":"ม่วง","lightskyblue":"ฟ้าอ่อน","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"แดงเลือดหมู","darksalmon":"dark salmon","darkred":"แดงเข้ม","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"เทาอ่อน","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"ส้มเข้ม","aquamarine":"aquamarine","lightgreen":"เขียวอ่อน","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"เทาเข้ม","lightcyan":"เขียวแกมน้ำเงินอ่อน","powderblue":"powder blue","blueviolet":"น้ำเงินม่วง","orchid":"orchid","dimgray":"dim gray","beige":"น้ำตาลเบจ","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"ชมพูอ่อน","limegreen":"เขียวมะนาว","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"เทา","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"ดำ","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"น้ำเงินอ่อน","palegreen":"pale green","azure":"น้ำเงินฟ้า","peachpuff":"peach puff","darkolivegreen":"เขียวโอลีฟเข้ม","yellowgreen":"เหลืองแกมเขียว"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/it/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/it/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/it/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/hu/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/hu/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/hu/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"világos acélkék","orangered":"narancsvörös","midnightblue":"éjkék","cadetblue":"kadétkék","seashell":"kagyló","slategrey":"palaszürke","coral":"korall","darkturquoise":"sötét türkizkék","antiquewhite":"antik fehér","mediumspringgreen":"közepes tavaszzöld","salmon":"lazacszín","darkgrey":"sötétszürke","ivory":"elefántcsont","greenyellow":"zöldessárga","mistyrose":"halvány rózsaszín","lightsalmon":"világos lazacszín","silver":"ezüst","dimgrey":"halványszürke","orange":"narancssárga","white":"fehér","navajowhite":"navajo fehér","royalblue":"királykék","deeppink":"sötétrózsaszín","lime":"lime","oldlace":"régi csipke","chartreuse":"chartreuse","darkcyan":"sötét ciánkék","yellow":"sárga","linen":"vászonfehér","olive":"olajzöld","gold":"arany","lawngreen":"fűzöld","lightyellow":"világossárga","tan":"rozsdabarna","darkviolet":"sötét ibolyaszín","lightslategrey":"világos palaszürke","grey":"szürke","darkkhaki":"sötét khakiszín","green":"zöld","deepskyblue":"sötét égszínkék","aqua":"vízszín","sienna":"vörösesbarna","mintcream":"mentaszósz","rosybrown":"barnásrózsaszín","mediumslateblue":"közepes palakék","magenta":"bíbor","lightseagreen":"világos tengerzöld","cyan":"ciánkék","olivedrab":"olajzöld drapp","darkgoldenrod":"sötét aranyvessző","slateblue":"palakék","mediumaquamarine":"közepes akvamarin","lavender":"levendula","mediumseagreen":"közepes tengerzöld","maroon":"gesztenyebarna","darkslategray":"sötét palaszürke","mediumturquoise":"közepes türkizkék","ghostwhite":"szellemfehér","darkblue":"sötétkék","mediumvioletred":"közepes ibolyavörös","brown":"barna","lightgray":"világosszürke","sandybrown":"homokbarna","pink":"rózsaszín","firebrick":"téglavörös","indigo":"indigó","snow":"hó","darkorchid":"sötét orchidea","turquoise":"türkizkék","chocolate":"csokoládé","springgreen":"tavaszzöld","moccasin":"mokkaszín","navy":"tengerészkék","lemonchiffon":"sárga műselyem","teal":"pávakék","floralwhite":"virágfehér","cornflowerblue":"búzavirágkék","paleturquoise":"halvány türkizkék","purple":"lila","gainsboro":"gainsboro","plum":"szilvakék","red":"vörös","blue":"kék","forestgreen":"erdőzöld","darkgreen":"sötétzöld","honeydew":"mézharmat","darkseagreen":"sötét tengerzöld","lightcoral":"világos korall","palevioletred":"halvány ibolyavörös","mediumpurple":"közepes lila","saddlebrown":"nyeregbarna","darkmagenta":"sötétbíbor","thistle":"bogáncs","whitesmoke":"fehér füst","wheat":"búza","violet":"ibolyaszín","lightskyblue":"világos égszínkék","goldenrod":"aranyvessző","mediumblue":"közepes kék","skyblue":"égszínkék","crimson":"karmazsinvörös","darksalmon":"sötét lazacszín","darkred":"sötétvörös","darkslategrey":"sötét palaszürke","peru":"peru","lightgrey":"világosszürke","lightgoldenrodyellow":"világos aranyvessző sárga","blanchedalmond":"hámozott mandula","aliceblue":"Alice kék","bisque":"porcelán","slategray":"palaszürke","palegoldenrod":"halvány aranyvessző","darkorange":"sötét narancssárga","aquamarine":"akvamarin","lightgreen":"világoszöld","burlywood":"nyersfa","dodgerblue":"dodger kék","darkgray":"sötétszürke","lightcyan":"világos ciánkék","powderblue":"púderkék","blueviolet":"ibolyakék","orchid":"orchidea","dimgray":"halványszürke","beige":"bézs","fuchsia":"fukszia","lavenderblush":"pirosas levendula","hotpink":"meleg rózsaszín","steelblue":"acélkék","tomato":"paradicsom","lightpink":"világos rózsaszín","limegreen":"limezöld","indianred":"indiánvörös","papayawhip":"papayahab","lightslategray":"világos palaszürke","gray":"szürke","mediumorchid":"közepes orchidea","cornsilk":"kukoricahaj","black":"fekete","seagreen":"tengerzöld","darkslateblue":"sötét palakék","khaki":"khakiszín","lightblue":"világoskék","palegreen":"halványzöld","azure":"azúrkék","peachpuff":"barackszín","darkolivegreen":"sötét olajzöld","yellowgreen":"sárgászöld"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/sk/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/sk/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/sk/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"oceľovo modrá svetlá","orangered":"oranžovo červená","midnightblue":"nočná modrá","cadetblue":"sivomodrá","seashell":"lastúrová","slategrey":"bridlicová sivá","coral":"koralová","darkturquoise":"tyrkysová tmavá","antiquewhite":"antická biela","mediumspringgreen":"jarná zelená stredná","salmon":"lososovo ružová","darkgrey":"tmavosivá","ivory":"slonovinová","greenyellow":"žltozelená","mistyrose":"zahmlená ruža","lightsalmon":"lososovo ružová svetlá","silver":"strieborná","dimgrey":"sivá matná","orange":"oranžová","white":"biela","navajowhite":"navajská biela","royalblue":"kráľovská modrá","deeppink":"hlboká ružová","lime":"lipová","oldlace":"stará čipka","chartreuse":"kartúza","darkcyan":"tmavozelenomodrá","yellow":"žltá","linen":"ľan","olive":"olivovo zelená","gold":"zlatá","lawngreen":"zelená tráva","lightyellow":"svetložltá","tan":"žltohnedá","darkviolet":"tmavofialová","lightslategrey":"bridlicová sivá svetlá","grey":"sivá","darkkhaki":"žltohnedá tmavá","green":"zelená","deepskyblue":"hlboká blankytná modrá","aqua":"svetlá zelenomodrá","sienna":"sienská","mintcream":"mätová krémová","rosybrown":"ružovo hnedá","mediumslateblue":"bridlicová modrá stredná","magenta":"purpurová","lightseagreen":"morská zelená svetlá","cyan":"zelenomodrá","olivedrab":"olivovo zelená fádna","darkgoldenrod":"zlatobyľová tmavá","slateblue":"bridlicová modrá","mediumaquamarine":"akvamarínová stredná","lavender":"levanduľová","mediumseagreen":"morská zelená stredná","maroon":"gaštanovo hnedá","darkslategray":"bridlicová sivá tmavá","mediumturquoise":"tyrkysová stredná","ghostwhite":"biely tieň","darkblue":"tmavomodrá","mediumvioletred":"fialovočervená stredná","brown":"hnedá","lightgray":"svetlosivá","sandybrown":"pieskovo hnedá","pink":"ružová","firebrick":"pálená tehla","indigo":"fialovo modrá","snow":"snehobiela","darkorchid":"orchideovo ružová tmavá","turquoise":"tyrkysová","chocolate":"čokoládovo hnedá","springgreen":"jarná zelená","moccasin":"črievičníková","navy":"vojenská zelená","lemonchiffon":"citrónový šifón","teal":"tyrkysová","floralwhite":"kvetinová biela","cornflowerblue":"nevädzovo modrá","paleturquoise":"bledo tyrkysová","purple":"purpurová","gainsboro":"sivomodrá svetlá","plum":"slivková","red":"červená","blue":"modrá","forestgreen":"lesná zelená","darkgreen":"tmavozelená","honeydew":"ambrózia","darkseagreen":"morská zelená tmavá","lightcoral":"koralová svetlá","palevioletred":"bledá fialovo červená","mediumpurple":"purpurová stredná","saddlebrown":"sedlová hnedá","darkmagenta":"tmavopurpurová","thistle":"bodliaková fialová","whitesmoke":"biely dym","wheat":"pšeničná","violet":"fialová","lightskyblue":"blankytná modrá svetlá","goldenrod":"zlatobyľ","mediumblue":"stredne modrá","skyblue":"blankytná modrá","crimson":"karmínová","darksalmon":"lososovo ružová tmavá","darkred":"tmavočervená","darkslategrey":"bridlicová sivá tmavá","peru":"peru","lightgrey":"svetlosivá","lightgoldenrodyellow":"zlatobyľová svetlá","blanchedalmond":"lúpané mandle","aliceblue":"modrá alice","bisque":"biskvitová","slategray":"bridlicová sivá","palegoldenrod":"bledá zlatobyľová","darkorange":"tmavooranžová","aquamarine":"akvamarínová","lightgreen":"svetlozelená","burlywood":"pieskovo hnedá","dodgerblue":"modrá dodger","darkgray":"tmavosivá","lightcyan":"zelenomodrá svetlá","powderblue":"prášková modrá","blueviolet":"modrofialová","orchid":"orchideovo ružová","dimgray":"sivá matná","beige":"béžová","fuchsia":"purpurová","lavenderblush":"levanduľový rumenec","hotpink":"teplá ružová","steelblue":"oceľovo modrá","tomato":"paradajková červená","lightpink":"svetloružová","limegreen":"lipová zelená","indianred":"indická červená","papayawhip":"papájový krém","lightslategray":"bridlicová sivá svetlá","gray":"sivá","mediumorchid":"orchideovo ružová stredná","cornsilk":"hodvábna žltá","black":"čierna","seagreen":"morská zelená","darkslateblue":"bridlicová modrá tmavá","khaki":"khaki","lightblue":"svetlomodrá","palegreen":"bledozelená","azure":"azúrová","peachpuff":"broskyňová pena","darkolivegreen":"olivovozelená tmavá","yellowgreen":"žltozelená"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/sl/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/sl/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/sl/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"svetlo jeklena modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"zelenkasto modra","seashell":"morska školjka","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"umazano siva","orange":"oranžna","white":"bela","navajowhite":"navajsko bela","royalblue":"kraljevsko modra","deeppink":"temno roza","lime":"rumeno zelena","oldlace":"stara čipka","chartreuse":"svetlo rumena zelena","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travnato zelena","lightyellow":"svetlo rumena","tan":"kožno rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno rumenkasto rjava","green":"zelena","deepskyblue":"temno nebesno modra","aqua":"akva","sienna":"siena","mintcream":"mentolno smetanasta","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"olivno sivo rjava","darkgoldenrod":"temno zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednje akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"prosojno bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično-rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"roza","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejna","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarsko modra","lemonchiffon":"limonina","teal":"zeleno modra","floralwhite":"cvetno bela","cornflowerblue":"plavično modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"pepelnato siva","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temno magenta","thistle":"osatna","whitesmoke":"umazano bela","wheat":"žitna","violet":"vijolična","lightskyblue":"svetlo nebesno modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebesno modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"mandljeva","aliceblue":"alice modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"grčav les","dodgerblue":"koruzno modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"smodniško modra","blueviolet":"modro vijolična","orchid":"orhidejna","dimgray":"umazano siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"bleščeča sivka","hotpink":"živo roza","steelblue":"jekleno modra","tomato":"paradižnikova","lightpink":"svetlo roza","limegreen":"citronsko zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejna","cornsilk":"koruzni laski","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"rumenkasto rjava","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurna","peachpuff":"breskova","darkolivegreen":"temno olivno zelena","yellowgreen":"rumeno zelena"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/ro/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/ro/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/ro/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"light steel blue","orangered":"roşu portocaliu","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"cochilie","slategrey":"gri ardezie","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"somon","darkgrey":"gri închis","ivory":"ivoriu","greenyellow":"verde-galben","mistyrose":"trandafiriu obscur","lightsalmon":"somon deschis","silver":"argintiu","dimgrey":"dim gray","orange":"portocaliu","white":"alb","navajowhite":"navajo white","royalblue":"albastru regal","deeppink":"roz închis","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"cyan închis","yellow":"galben","linen":"linen","olive":"oliv","gold":"auriu","lawngreen":"lawn green","lightyellow":"galben deschis","tan":"tan","darkviolet":"violet închis","lightslategrey":"light slate gray","grey":"gri","darkkhaki":"kaki închis","green":"verde","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"maro trandafiriu","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"verde marin deschis","cyan":"cyan","olivedrab":"maron-gălbui oliv","darkgoldenrod":"goldenrod închis","slateblue":"albastru ardezie","mediumaquamarine":"medium aquamarine","lavender":"levănţică","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"albastru închis","mediumvioletred":"medium violet-red","brown":"maro","lightgray":"gri deschis","sandybrown":"maro nisipiu","pink":"roz","firebrick":"fire brick","indigo":"indigo","snow":"zăpadă","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"ciocolată","springgreen":"verde de primăvară","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"lişiţă","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"turquoise pal","purple":"purpură","gainsboro":"gainsboro","plum":"prună","red":"roşu","blue":"albastru","forestgreen":"verde pădure","darkgreen":"verde închis","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"coral deschis","palevioletred":"roşu violet pal","mediumpurple":"medium purple","saddlebrown":"maro de şa","darkmagenta":"magenta închis","thistle":"ciulin","whitesmoke":"fum alb","wheat":"grâu","violet":"violet","lightskyblue":"albastru cer deschis","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"albastru de cer","crimson":"crimson","darksalmon":"dark salmon","darkred":"roşu închis","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"gri deschis","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"gri ardezie","palegoldenrod":"solidago pal","darkorange":"portocaliu închis","aquamarine":"aquamarine","lightgreen":"verde deschis","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"cenuşiu închis","lightcyan":"cyan deschis","powderblue":"albastru pudră","blueviolet":"albastru-violet","orchid":"orhidee","dimgray":"dim gray","beige":"bej","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"roz aprins","steelblue":"albastru metalic","tomato":"roşie","lightpink":"roz deschis","limegreen":"verde lime","indianred":"roşu indian","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"cenuşiu","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"negru","seagreen":"verde marin","darkslateblue":"dark slate blue","khaki":"kaki","lightblue":"albastru deschis","palegreen":"verde pal","azure":"azuriu","peachpuff":"puf de piersică","darkolivegreen":"verde oliv închis","yellowgreen":"verde galben"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/zh/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/zh/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/zh/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"浅钢蓝色","orangered":"橙红色","midnightblue":"深蓝色","cadetblue":"灰蓝色","seashell":"海贝色","slategrey":"灰石色","coral":"珊瑚色","darkturquoise":"深粉蓝","antiquewhite":"古董白","mediumspringgreen":"间春绿色","salmon":"橙红","darkgrey":"深灰色","ivory":"象牙色","greenyellow":"绿黄色","mistyrose":"浅玫瑰色","lightsalmon":"淡橙色","silver":"银白色","dimgrey":"暗灰色","orange":"橙色","white":"白色","navajowhite":"纳瓦白","royalblue":"品蓝","deeppink":"深粉红色","lime":"淡黄绿色","oldlace":"老白色","chartreuse":"黄绿色","darkcyan":"深青绿","yellow":"黄色","linen":"亚麻色","olive":"橄榄绿","gold":"金黄色","lawngreen":"草绿色","lightyellow":"浅黄色","tan":"棕褐色","darkviolet":"深紫色","lightslategrey":"浅青灰","grey":"灰色","darkkhaki":"深卡其色","green":"绿色","deepskyblue":"深天蓝色","aqua":"浅绿色","sienna":"赭色","mintcream":"薄荷色","rosybrown":"褐玫瑰红","mediumslateblue":"间暗蓝色","magenta":"洋红色","lightseagreen":"浅海藻绿","cyan":"青蓝色","olivedrab":"草绿色","darkgoldenrod":"深金黄","slateblue":"石蓝色","mediumaquamarine":"间绿色","lavender":"淡紫色","mediumseagreen":"间海蓝色","maroon":"栗色","darkslategray":"深青灰","mediumturquoise":"间绿宝石色","ghostwhite":"苍白","darkblue":"深蓝","mediumvioletred":"间紫罗兰色","brown":"棕色","lightgray":"浅灰色","sandybrown":"沙褐色","pink":"粉红色","firebrick":"砖红","indigo":"靛青","snow":"雪白色","darkorchid":"深紫色","turquoise":"绿宝石色","chocolate":"巧克力色","springgreen":"春绿色","moccasin":"鹿皮色","navy":"藏青色","lemonchiffon":"柠檬绸色","teal":"水鸭色","floralwhite":"花白色","cornflowerblue":"浅蓝色","paleturquoise":"苍绿色","purple":"紫色","gainsboro":"淡灰色","plum":"杨李色","red":"红色","blue":"蓝色","forestgreen":"森林绿","darkgreen":"深绿色","honeydew":"蜜汁色","darkseagreen":"深海藻绿","lightcoral":"浅珊瑚色","palevioletred":"苍紫罗兰色","mediumpurple":"间紫色","saddlebrown":"重褐色","darkmagenta":"深洋红色","thistle":"蓟色","whitesmoke":"烟白色","wheat":"浅黄色","violet":"紫色","lightskyblue":"浅天蓝色","goldenrod":"金麒麟色","mediumblue":"间蓝色","skyblue":"天蓝色","crimson":"绯红色","darksalmon":"深橙红","darkred":"深红色","darkslategrey":"深青灰","peru":"秘鲁色","lightgrey":"浅灰色","lightgoldenrodyellow":"浅金黄色","blanchedalmond":"白杏色","aliceblue":"爱丽丝蓝","bisque":"桔黄色","slategray":"灰石色","palegoldenrod":"淡金黄色","darkorange":"深橙色","aquamarine":"碧绿色","lightgreen":"浅绿色","burlywood":"实木色","dodgerblue":"闪蓝色","darkgray":"深灰色","lightcyan":"浅青色","powderblue":"铁蓝","blueviolet":"蓝紫色","orchid":"紫色","dimgray":"暗灰色","beige":"米色","fuchsia":"紫红色","lavenderblush":"淡紫红","hotpink":"深粉红","steelblue":"钢蓝色","tomato":"西红柿色","lightpink":"浅粉红色","limegreen":"橙绿色","indianred":"印度红","papayawhip":"木瓜色","lightslategray":"浅青灰","gray":"灰色","mediumorchid":"间紫色","cornsilk":"米绸色","black":"黑色","seagreen":"海绿色","darkslateblue":"深青蓝","khaki":"卡其色","lightblue":"淡蓝色","palegreen":"淡绿色","azure":"天蓝色","peachpuff":"桃色","darkolivegreen":"深橄榄绿","yellowgreen":"黄绿色"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/pt/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/pt/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/pt/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/ca/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/ca/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/ca/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"blau acer clar","orangered":"taronja vermellós","midnightblue":"blau mitjanit","cadetblue":"blau marí","seashell":"petxina marina","slategrey":"gris pissarra","coral":"corall","darkturquoise":"turquesa fosc","antiquewhite":"blanc antic","mediumspringgreen":"verd primavera mitjà","salmon":"salmó","darkgrey":"gris fosc","ivory":"marbre","greenyellow":"verd grogós","mistyrose":"rosa dens","lightsalmon":"salmó clar","silver":"argent","dimgrey":"gris fosc","orange":"taronja","white":"blanc","navajowhite":"blanc Navajo","royalblue":"blau marí intens","deeppink":"rosa profund","lime":"verd llimona","oldlace":"rosa cremós","chartreuse":"Llimona pàl·lid","darkcyan":"cian fosc","yellow":"groc","linen":"lli","olive":"oliva","gold":"daurat","lawngreen":"verd gespa","lightyellow":"groc clar","tan":"tan","darkviolet":"violeta fosc","lightslategrey":"gris pissarra clar","grey":"gris","darkkhaki":"caqui fosc","green":"verd","deepskyblue":"blau cel profund","aqua":"aigua","sienna":"siena","mintcream":"menta pàl·lid","rosybrown":"marró rosat","mediumslateblue":"blau pissarra mitjà","magenta":"magenta","lightseagreen":"verd marí clar","cyan":"cian","olivedrab":"gris oliva","darkgoldenrod":"ocre fosc","slateblue":"blau pissarra","mediumaquamarine":"aiguamarina mitjana","lavender":"lavanda","mediumseagreen":"verd marí mitjà","maroon":"marró vermellós","darkslategray":"gris pissarra fosc","mediumturquoise":"turquesa mitjana","ghostwhite":"blanc fantasma","darkblue":"blau fosc","mediumvioletred":"vermell violeta mitjà","brown":"marró","lightgray":"gris clar","sandybrown":"marró arenós","pink":"rosa","firebrick":"maó refractari","indigo":"índigo","snow":"neu","darkorchid":"orquídia fosc","turquoise":"turquesa","chocolate":"xocolata","springgreen":"verd de primavera","moccasin":"mocassí","navy":"blau marí","lemonchiffon":"groc brisa","teal":"verd blavós","floralwhite":"blanc floral","cornflowerblue":"blau blauet","paleturquoise":"turquesa pàl·lid","purple":"porpra","gainsboro":"gainsboro","plum":"pruna","red":"vermell","blue":"blau","forestgreen":"verd bosc","darkgreen":"verd fosc","honeydew":"rosada de mel","darkseagreen":"verd marí fosc","lightcoral":"corall clar","palevioletred":"vermell porpra pàl·lid","mediumpurple":"porpra mitjana","saddlebrown":"marró mitjà","darkmagenta":"magenta fosc","thistle":"card","whitesmoke":"blanc fumat","wheat":"blat","violet":"violeta","lightskyblue":"blau cel clar","goldenrod":"ocre","mediumblue":"blau mitjà","skyblue":"blau cel","crimson":"carmesí","darksalmon":"salmó fosc","darkred":"vermell fosc","darkslategrey":"gris pissarra fosc","peru":"Perú","lightgrey":"gris clar","lightgoldenrodyellow":"groc ocre clar","blanchedalmond":"ametlla pàl·lid","aliceblue":"blau cian clar","bisque":"crema","slategray":"gris pissarra","palegoldenrod":"ocre pàl·lid","darkorange":"taronja fosc","aquamarine":"aiguamarina","lightgreen":"verd clar","burlywood":"marró arenós","dodgerblue":"blau Dodger","darkgray":"gris fosc","lightcyan":"cian clar","powderblue":"blau grisós","blueviolet":"blau violeta","orchid":"orquídia","dimgray":"gris fosc","beige":"beix","fuchsia":"fúcsia","lavenderblush":"lavanda vermellosa","hotpink":"rosa fúcsia","steelblue":"blau acer","tomato":"tomàquet","lightpink":"rosa clar","limegreen":"verd llimona verda","indianred":"vermell indi","papayawhip":"préssec pastel","lightslategray":"gris pissarra clar","gray":"gris","mediumorchid":"orquídia mitjana","cornsilk":"cru","black":"negre","seagreen":"verd marí","darkslateblue":"blau pissarra fosc","khaki":"caqui","lightblue":"blau clar","palegreen":"verd pàl·lid","azure":"atzur","peachpuff":"préssec","darkolivegreen":"verd oliva fosc","yellowgreen":"verd grogós"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/da/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/da/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/da/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"lys stålblå","orangered":"orangerød","midnightblue":"midnatsblå","cadetblue":"kadetblå","seashell":"muslingeskal","slategrey":"skifergrå","coral":"koralrød","darkturquoise":"mørk turkis","antiquewhite":"antikhvid","mediumspringgreen":"mellemforårsgrøn","salmon":"laksefarvet","darkgrey":"mørkegrå","ivory":"elfenben","greenyellow":"grøngul","mistyrose":"blegrosa","lightsalmon":"lys laksefarvet","silver":"sølv","dimgrey":"svag grå","orange":"orange","white":"hvid","navajowhite":"navajo-hvid","royalblue":"kongeblå","deeppink":"dyb pink","lime":"lime","oldlace":"kniplingshvid","chartreuse":"chartreuse","darkcyan":"mørk cyan","yellow":"gul","linen":"lærred","olive":"olivengrøn","gold":"guld","lawngreen":"græsgrøn","lightyellow":"lysegul","tan":"tan","darkviolet":"mørkelilla","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grøn","deepskyblue":"dyb himmelblå","aqua":"akvablå","sienna":"sienna","mintcream":"pebermyntecreme","rosybrown":"rosabrun","mediumslateblue":"mellemskiferblå","magenta":"magenta","lightseagreen":"lys havgrøn","cyan":"cyan","olivedrab":"brungrøn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"mellem akvamarin","lavender":"lysviolet","mediumseagreen":"mellemhavgrøn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"mellemturkis","ghostwhite":"spøgelseshvid","darkblue":"mørkeblå","mediumvioletred":"mellemviolet","brown":"brun","lightgray":"lysegrå","sandybrown":"sandbrun","pink":"pink","firebrick":"chamottesten","indigo":"indigo","snow":"sne","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"rust","springgreen":"forårsgrøn","moccasin":"fruesko","navy":"marineblå","lemonchiffon":"citronfromage","teal":"blågrøn","floralwhite":"blomsterhvid","cornflowerblue":"kornblomstblå","paleturquoise":"bleg turkis","purple":"lilla","gainsboro":"gainsboro","plum":"blomme","red":"rød","blue":"blå","forestgreen":"skovgrøn","darkgreen":"mørkegrøn","honeydew":"honningdug","darkseagreen":"mørk havgrøn","lightcoral":"lys koralrød","palevioletred":"blegviolet","mediumpurple":"mellemlilla","saddlebrown":"saddelbrun","darkmagenta":"mørk magenta","thistle":"tidsel","whitesmoke":"hvid røg","wheat":"korngul","violet":"lilla","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellemblå","skyblue":"himmelblå","crimson":"blodrød","darksalmon":"mørk laksefarvet","darkred":"mørkerød","darkslategrey":"mørk skifergrå","peru":"peru","lightgrey":"lysegrå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"blanceret mandel","aliceblue":"babyblå","bisque":"gulgrå","slategray":"skifergrå","palegoldenrod":"bleg gyldenris","darkorange":"mørk orange","aquamarine":"akvamarin","lightgreen":"lysegrøn","burlywood":"tobak","dodgerblue":"dodgerblå","darkgray":"mørkegrå","lightcyan":"lys cyan","powderblue":"pudderblå","blueviolet":"blåviolet","orchid":"orkide","dimgray":"svag grå","beige":"beige","fuchsia":"lyslilla","lavenderblush":"lavendelrød","hotpink":"mørk rosa","steelblue":"metalblå","tomato":"tomat","lightpink":"lys pink","limegreen":"limegrøn","indianred":"lys rødbrun","papayawhip":"papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"mellem orkide","cornsilk":"majs","black":"sort","seagreen":"havgrøn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lyseblå","palegreen":"bleggrøn","azure":"azurblå","peachpuff":"fersken","darkolivegreen":"mørk olivengrøn","yellowgreen":"gulgrøn"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/tr/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/tr/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/tr/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"açık metalik mavi","orangered":"turuncu kırmızı","midnightblue":"gece mavisi","cadetblue":"denizci mavisi","seashell":"deniz kabuğu","slategrey":"arduvaz grisi","coral":"mercan","darkturquoise":"koyu turkuaz","antiquewhite":"antik beyaz","mediumspringgreen":"orta bahar yeşili","salmon":"somon","darkgrey":"koyu gri","ivory":"fildişi","greenyellow":"yeşil-sarı","mistyrose":"gülkurusu","lightsalmon":"açık somon","silver":"gümüş","dimgrey":"soluk gri","orange":"turuncu","white":"beyaz","navajowhite":"navajo beyazı","royalblue":"parlak koyu mavi","deeppink":"koyu pembe","lime":"limon yeşili","oldlace":"eski dantel","chartreuse":"chartreuse","darkcyan":"koyu camgöbeği","yellow":"sarı","linen":"keten","olive":"zeytin","gold":"altın","lawngreen":"çimen yeşili","lightyellow":"açık sarı","tan":"güneş yanığı","darkviolet":"koyu eflatun","lightslategrey":"açık arduvaz grisi","grey":"gri","darkkhaki":"koyu haki","green":"yeşil","deepskyblue":"koyu gök mavisi","aqua":"deniz mavisi","sienna":"koyu kahve","mintcream":"naneli krem","rosybrown":"pembemsi kahverengi","mediumslateblue":"orta arduvaz mavisi","magenta":"macenta","lightseagreen":"açık deniz yeşili","cyan":"camgöbeği","olivedrab":"asker yeşili","darkgoldenrod":"koyu sarı","slateblue":"arduvaz mavisi","mediumaquamarine":"orta akuamarin","lavender":"lavanta","mediumseagreen":"orta deniz yeşili","maroon":"kestane","darkslategray":"koyu arduvaz grisi","mediumturquoise":"orta turkuaz","ghostwhite":"silik beyaz","darkblue":"koyu mavi","mediumvioletred":"orta menekşe kırmızısı","brown":"kahverengi","lightgray":"açık gri","sandybrown":"kum rengi","pink":"pembe","firebrick":"canlı kiremit","indigo":"çivit mavisi","snow":"kar","darkorchid":"koyu orkide","turquoise":"turkuaz","chocolate":"çikolata","springgreen":"bahar yeşili","moccasin":"mokosen","navy":"lacivert","lemonchiffon":"limoni","teal":"Teal mavi","floralwhite":"çiçek beyazı","cornflowerblue":"peygamber çiçeği mavisi","paleturquoise":"soluk turkuaz","purple":"mor","gainsboro":"gainsboro","plum":"erik","red":"kırmızı","blue":"mavi","forestgreen":"koyu deniz yeşili","darkgreen":"koyu yeşil","honeydew":"çam sakızı","darkseagreen":"koyu deniz yeşili","lightcoral":"açık mercan","palevioletred":"soluk menekşe kırmızısı","mediumpurple":"orta mor","saddlebrown":"açık kahve","darkmagenta":"koyu mor","thistle":"devedikeni","whitesmoke":"beyaz duman","wheat":"buğday","violet":"eflatun","lightskyblue":"açık gök mavisi","goldenrod":"sarısabır","mediumblue":"orta mavi","skyblue":"gök mavisi","crimson":"crimson","darksalmon":"koyu somon","darkred":"koyu kırmızı","darkslategrey":"koyu arduvaz grisi","peru":"peru","lightgrey":"açık gri","lightgoldenrodyellow":"açık sarısabır","blanchedalmond":"soluk badem","aliceblue":"alice mavisi","bisque":"bisküvi","slategray":"arduvaz grisi","palegoldenrod":"soluk sarısabır","darkorange":"koyu turuncu","aquamarine":"akuamarin","lightgreen":"açık yeşil","burlywood":"sarımsı kahverengi","dodgerblue":"toz mavisi","darkgray":"koyu gri","lightcyan":"açık camgöbeği","powderblue":"pudra mavisi","blueviolet":"mavi-mor","orchid":"orkide","dimgray":"soluk gri","beige":"bej","fuchsia":"fuşya","lavenderblush":"lavanta pembesi","hotpink":"sıcak pembe","steelblue":"metalik mavi","tomato":"domates","lightpink":"açık pembe","limegreen":"küf yeşili","indianred":"kızılderili kırmızısı","papayawhip":"papaya sapı","lightslategray":"açık arduvaz grisi","gray":"gri","mediumorchid":"orta orkide","cornsilk":"mısır rengi","black":"siyah","seagreen":"deniz yeşili","darkslateblue":"koyu arduvaz mavisi","khaki":"haki","lightblue":"açık mavi","palegreen":"soluk yeşil","azure":"azur mavisi","peachpuff":"açık şeftali","darkolivegreen":"koyu zeytin yeşili","yellowgreen":"sarı yeşil"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/ru/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/ru/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/ru/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"светлый стальной","orangered":"оранжево-красный","midnightblue":"полуночно-синий","cadetblue":"серо-синий","seashell":"морская раковина","slategrey":"грифельно-серый","coral":"коралловый","darkturquoise":"темный бирюзовый","antiquewhite":"белый антик","mediumspringgreen":"нейтральный весенне-зеленый","salmon":"лососевый","darkgrey":"темно-серый","ivory":"слоновой кости","greenyellow":"зелено-желтый","mistyrose":"блекло-розовый","lightsalmon":"светло-лососевый","silver":"серебристый","dimgrey":"тускло-серый","orange":"оранжевый","white":"белый","navajowhite":"белый навахо","royalblue":"королевский голубой","deeppink":"темно-розовый","lime":"лайм","oldlace":"матово-белый","chartreuse":"желто-салатный","darkcyan":"темный циан","yellow":"желтый","linen":"хлопковый","olive":"оливковый","gold":"золотой","lawngreen":"зеленая лужайка","lightyellow":"светло-желтый","tan":"рыжевато-коричневый","darkviolet":"темно-фиолетовый","lightslategrey":"светлый грифельно-серый","grey":"серый","darkkhaki":"темный хаки","green":"зеленый","deepskyblue":"темный небесно-голубой","aqua":"зеленовато-голубой","sienna":"охра","mintcream":"мятно-кремовый","rosybrown":"розово-коричневый","mediumslateblue":"нейтральный грифельно-синий","magenta":"пурпурный","lightseagreen":"светлый морской волны","cyan":"циан","olivedrab":"желтовато-серый","darkgoldenrod":"темно-золотистый","slateblue":"грифельно-синий","mediumaquamarine":"нейтральный аквамарин","lavender":"бледно-лиловый","mediumseagreen":"нейтральный морской волны","maroon":"темно-бордовый","darkslategray":"темный грифельно-серый","mediumturquoise":"нейтральный бирюзовый","ghostwhite":"призрачно-белый","darkblue":"темно-синий","mediumvioletred":"нейтральный фиолетово-красный","brown":"коричневый","lightgray":"светло-серый","sandybrown":"коричнево-песчаный","pink":"розовый","firebrick":"кирпичный","indigo":"индиго","snow":"белоснежный","darkorchid":"темный орсель","turquoise":"бирюзовый","chocolate":"шоколадный","springgreen":"весенний зеленый","moccasin":"мокасин","navy":"темно-синий","lemonchiffon":"бледно-лимонный","teal":"чирок","floralwhite":"цветочно-белый","cornflowerblue":"фиолетово-синий","paleturquoise":"бледно-бирюзовый","purple":"фиолетовый","gainsboro":"бледно-серый","plum":"сливовый","red":"красный","blue":"синий","forestgreen":"зеленый лесной","darkgreen":"темно-зеленый","honeydew":"медовый","darkseagreen":"темный морской волны","lightcoral":"светло-коралловый","palevioletred":"бледный фиолетово-красный","mediumpurple":"нейтральный фиолетовый","saddlebrown":"кожано-коричневый","darkmagenta":"темно-пурпурный","thistle":"чертополох","whitesmoke":"дымчато-белый","wheat":"пшеница","violet":"фиолетовый","lightskyblue":"светлый небесно-голубой","goldenrod":"золотистый","mediumblue":"нейтральный синий","skyblue":"небесно-голубой","crimson":"малиновый","darksalmon":"темно-лососевый","darkred":"темно-красный","darkslategrey":"темный грифельно-серый","peru":"перу","lightgrey":"светло-серый","lightgoldenrodyellow":"светло-золотистый","blanchedalmond":"светло-миндальный","aliceblue":"серо-голубой","bisque":"бисквитный","slategray":"грифельно-серый","palegoldenrod":"бледно-золотистый","darkorange":"темно-оранжевый","aquamarine":"аквамарин","lightgreen":"светло-зеленый","burlywood":"светло-коричневый","dodgerblue":"бледно-синий","darkgray":"темно-серый","lightcyan":"светлый циан","powderblue":"пороховой","blueviolet":"сине-фиолетовый","orchid":"орсель","dimgray":"тускло-серый","beige":"бежевый","fuchsia":"фуксин","lavenderblush":"розовато-лиловый","hotpink":"красно-розовый","steelblue":"стальной","tomato":"помидор","lightpink":"светло-розовый","limegreen":"зеленый лайм","indianred":"индийский красный","papayawhip":"черенок папайи","lightslategray":"светлый грифельно-серый","gray":"серый","mediumorchid":"нейтральный орсель","cornsilk":"шелковый оттенок","black":"черный","seagreen":"морской волны","darkslateblue":"темный грифельно-синий","khaki":"хаки","lightblue":"светло-синий","palegreen":"бледно-зеленый","azure":"лазурный","peachpuff":"персиковый","darkolivegreen":"темно-оливковый","yellowgreen":"желто-зеленый"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/sv/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/sv/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/sv/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"ljust stålblått","orangered":"orangerött","midnightblue":"midnattsblått","cadetblue":"kadettblått","seashell":"snäckskal","slategrey":"skiffergrått","coral":"korall","darkturquoise":"mörkturkost","antiquewhite":"antikvitt","mediumspringgreen":"mellanvårgrönt","salmon":"laxfärgat","darkgrey":"mörkgrått","ivory":"elfenbensvitt","greenyellow":"gröngult","mistyrose":"dunkelrosa","lightsalmon":"ljust laxfärgat","silver":"silver","dimgrey":"smutsgrått","orange":"orange","white":"vitt","navajowhite":"navajovitt","royalblue":"kungligt blått","deeppink":"djuprosa","lime":"lime","oldlace":"spetsvitt","chartreuse":"chartreuse","darkcyan":"mörkt cyan","yellow":"gult","linen":"linne","olive":"olivfärgat","gold":"guld","lawngreen":"gräsmattegrönt","lightyellow":"ljusgult","tan":"mellanbrunt","darkviolet":"mörkviolett","lightslategrey":"ljust skiffergrått","grey":"grått","darkkhaki":"mörkt kaki","green":"grönt","deepskyblue":"mörkt himmelsblått","aqua":"akvamarin","sienna":"sienna","mintcream":"mintgrädde","rosybrown":"rosenbrunt","mediumslateblue":"mellanskifferblått","magenta":"magenta","lightseagreen":"ljust havsgrönt","cyan":"cyan","olivedrab":"olivsmutsgult","darkgoldenrod":"mörkt gullris","slateblue":"skifferblått","mediumaquamarine":"mellanakvamarin","lavender":"lavendel","mediumseagreen":"mellanhavsgrönt","maroon":"rödbrunt","darkslategray":"mörkt skiffergrått","mediumturquoise":"mellanturkost","ghostwhite":"spökvitt","darkblue":"mörkblått","mediumvioletred":"mellanviolettrött","brown":"brunt","lightgray":"ljusgrått","sandybrown":"sandbrunt","pink":"rosa","firebrick":"tegelstensrött","indigo":"indigo","snow":"snö","darkorchid":"mörkt orkidé","turquoise":"turkost","chocolate":"choklad","springgreen":"vårgrönt","moccasin":"mockasin","navy":"marinblått","lemonchiffon":"citronchiffong","teal":"blågrönt","floralwhite":"blomvitt","cornflowerblue":"kornblått","paleturquoise":"blekturkost","purple":"lila","gainsboro":"gainsboro","plum":"plommon","red":"rött","blue":"blått","forestgreen":"skogsgrönt","darkgreen":"mörkgrönt","honeydew":"honungsdagg","darkseagreen":"mörkt havsgrönt","lightcoral":"ljuskorall","palevioletred":"blekviolettrött","mediumpurple":"mellanlila","saddlebrown":"sadelbrunt","darkmagenta":"mörk magenta","thistle":"tistel","whitesmoke":"vit rök","wheat":"vete","violet":"violett","lightskyblue":"ljust himmelsblått","goldenrod":"gullris","mediumblue":"mellanblått","skyblue":"himmelsblått","crimson":"karmosinrött","darksalmon":"mörkt laxfärgat","darkred":"mörkrött","darkslategrey":"mörkt skiffergrått","peru":"peru","lightgrey":"ljusgrått","lightgoldenrodyellow":"ljust gullrisgult","blanchedalmond":"skållad mandel","aliceblue":"aliceblå","bisque":"biskvi","slategray":"skiffergrått","palegoldenrod":"blekt gullris","darkorange":"mörkorange","aquamarine":"akvamarin","lightgreen":"ljusgrönt","burlywood":"träfärgat","dodgerblue":"dodgerblått","darkgray":"mörkgrått","lightcyan":"ljust cyan","powderblue":"pulverblått","blueviolet":"blåviolett","orchid":"orkidé","dimgray":"smutsgrått","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelskimrande","hotpink":"varmrosa","steelblue":"stålblått","tomato":"tomatrött","lightpink":"ljusrosa","limegreen":"limegrönt","indianred":"indianrött","papayawhip":"papayaröra","lightslategray":"ljust skiffergrått","gray":"grått","mediumorchid":"mellanorkidé","cornsilk":"gulvitt","black":"svart","seagreen":"havsgrönt","darkslateblue":"mörkt skifferblått","khaki":"kaki","lightblue":"ljusblått","palegreen":"blekgrönt","azure":"azurblått","peachpuff":"persika","darkolivegreen":"mörkt olivgrönt","yellowgreen":"gulgrönt"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/de/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/de/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/de/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/ja/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/ja/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/ja/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"ライト・スチール・ブルー","orangered":"オレンジ・レッド","midnightblue":"ミッドナイト・ブルー","cadetblue":"くすんだ青","seashell":"シーシェル","slategrey":"スレート・グレイ","coral":"珊瑚","darkturquoise":"ダーク・ターコイズ","antiquewhite":"アンティーク・ホワイト","mediumspringgreen":"ミディアム・スプリング・グリーン","salmon":"サーモン","darkgrey":"ダーク・グレイ","ivory":"アイボリー","greenyellow":"緑黄色","mistyrose":"ミスティ・ローズ","lightsalmon":"ライト・サーモン","silver":"銀","dimgrey":"くすんだグレイ","orange":"オレンジ","white":"白","navajowhite":"ナバホ・ホワイト","royalblue":"藤色","deeppink":"濃いピンク","lime":"ライム","oldlace":"オールド・レイス","chartreuse":"淡黄緑","darkcyan":"ダーク・シアン・ブルー","yellow":"黄","linen":"亜麻色","olive":"オリーブ","gold":"金","lawngreen":"ローン・グリーン","lightyellow":"ライト・イエロー","tan":"茶褐色","darkviolet":"ダーク・バイオレット","lightslategrey":"ライト・スレート・グレイ","grey":"グレイ","darkkhaki":"ダーク・カーキー","green":"緑","deepskyblue":"濃い空色","aqua":"アクア","sienna":"黄褐色","mintcream":"ミント・クリーム","rosybrown":"ロージー・ブラウン","mediumslateblue":"ミディアム・スレート・ブルー","magenta":"赤紫","lightseagreen":"ライト・シー・グリーン","cyan":"シアン・ブルー","olivedrab":"濃黄緑","darkgoldenrod":"ダーク・ゴールデン・ロッド","slateblue":"スレート・ブルー","mediumaquamarine":"ミディアム・アクアマリーン","lavender":"ラベンダー","mediumseagreen":"ミディアム・シー・グリーン","maroon":"えび茶","darkslategray":"ダーク・スレート・グレイ","mediumturquoise":"ミディアム・ターコイズ","ghostwhite":"ゴースト・ホワイト","darkblue":"ダーク・ブルー","mediumvioletred":"ミディアム・バイオレット・レッド","brown":"茶","lightgray":"ライト・グレイ","sandybrown":"砂褐色","pink":"ピンク","firebrick":"赤煉瓦色","indigo":"藍色","snow":"雪色","darkorchid":"ダーク・オーキッド","turquoise":"ターコイズ","chocolate":"チョコレート","springgreen":"スプリング・グリーン","moccasin":"モカシン","navy":"濃紺","lemonchiffon":"レモン・シフォン","teal":"ティール","floralwhite":"フローラル・ホワイト","cornflowerblue":"コーンフラワー・ブルー","paleturquoise":"ペイル・ターコイズ","purple":"紫","gainsboro":"ゲインズボーロ","plum":"深紫","red":"赤","blue":"青","forestgreen":"フォレスト・グリーン","darkgreen":"ダーク・グリーン","honeydew":"ハニーデュー","darkseagreen":"ダーク・シー・グリーン","lightcoral":"ライト・コーラル","palevioletred":"ペイル・バイオレット・レッド","mediumpurple":"ミディアム・パープル","saddlebrown":"サドル・ブラウン","darkmagenta":"ダーク・マジェンタ","thistle":"シスル","whitesmoke":"ホワイト・スモーク","wheat":"小麦色","violet":"すみれ色","lightskyblue":"ライト・スカイ・ブルー","goldenrod":"ゴールデン・ロッド","mediumblue":"ミディアム・ブルー","skyblue":"スカイ・ブルー","crimson":"深紅","darksalmon":"ダーク・サーモン","darkred":"ダーク・レッド","darkslategrey":"ダーク・スレート・グレイ","peru":"ペルー","lightgrey":"ライト・グレイ","lightgoldenrodyellow":"ライト・ゴールデン・ロッド・イエロー","blanchedalmond":"皮なしアーモンド","aliceblue":"アリス・ブルー","bisque":"ビスク","slategray":"スレート・グレイ","palegoldenrod":"ペイル・ゴールデン・ロッド","darkorange":"ダーク・オレンジ","aquamarine":"碧緑","lightgreen":"ライト・グリーン","burlywood":"バーリーウッド","dodgerblue":"ドッジャー・ブルー","darkgray":"ダーク・グレイ","lightcyan":"ライト・シアン","powderblue":"淡青","blueviolet":"青紫","orchid":"薄紫","dimgray":"くすんだグレイ","beige":"ベージュ","fuchsia":"紫紅色","lavenderblush":"ラベンダー・ブラッシ","hotpink":"ホット・ピンク","steelblue":"鋼色","tomato":"トマト色","lightpink":"ライト・ピンク","limegreen":"ライム・グリーン","indianred":"インディアン・レッド","papayawhip":"パパイア・ホイップ","lightslategray":"ライト・スレート・グレイ","gray":"グレイ","mediumorchid":"ミディアム・オーキッド","cornsilk":"コーンシルク","black":"黒","seagreen":"シー・グリーン","darkslateblue":"ダーク・スレート・ブルー","khaki":"カーキー","lightblue":"ライト・ブルー","palegreen":"ペイル・グリーン","azure":"薄い空色","peachpuff":"ピーチ・パフ","darkolivegreen":"ダーク・オリーブ・グリーン","yellowgreen":"黄緑"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/he/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/he/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/he/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"כחול פלדה בהיר","orangered":"כתום אדום","midnightblue":"כחול כהה","cadetblue":"כחול ים","seashell":"צדף","slategrey":"אפור צפחה","coral":"אלמוג","darkturquoise":"טורקיז כהה","antiquewhite":"לבן עתיק","mediumspringgreen":"ירוק אביב בינוני","salmon":"סלמון","darkgrey":"אפור כהה","ivory":"שנהב","greenyellow":"ירוק-צהוב","mistyrose":"ורוד מעורפל","lightsalmon":"סלמון בהיר","silver":"כסף","dimgrey":"אפור עמום","orange":"כתום","white":"לבן","navajowhite":"לבן נוואחו","royalblue":"כחול מלכותי","deeppink":"ורוד עמוק","lime":"לימון","oldlace":"תחרה עתיקה","chartreuse":"ירוק-צהוב","darkcyan":"טורקיז כהה","yellow":"צהוב","linen":"פשתן","olive":"זית","gold":"זהב","lawngreen":"ירוק דשא","lightyellow":"צהוב בהיר","tan":"חום אדמדם","darkviolet":"סגול כהה","lightslategrey":"אפור צפחה בהיר","grey":"אפור","darkkhaki":"חאקי כהה","green":"ירוק","deepskyblue":"כחול שמיים עמוק","aqua":"אקווה","sienna":"סיינה","mintcream":"קרם מנטה","rosybrown":"חום ורדרד","mediumslateblue":"כחול צפחה בינוני","magenta":"בורדו","lightseagreen":"ירוק ים בהיר","cyan":"טורקיז","olivedrab":"זית עמום","darkgoldenrod":"זהוב כהה","slateblue":"כחול צפחה","mediumaquamarine":"כחול בינוני","lavender":"לבנדר","mediumseagreen":"ירוק ים בינוני","maroon":"חום אדמדם","darkslategray":"אפור צפחה כהה","mediumturquoise":"טורקיז בינוני","ghostwhite":"לבן רפאים","darkblue":"כחול כהה","mediumvioletred":"סגול-אדום בינוני","brown":"חום","lightgray":"אפור בהיר","sandybrown":"חום חולי","pink":"ורוד","firebrick":"לבנה שרופה","indigo":"אינדיגו","snow":"שלג","darkorchid":"סחלב כהה","turquoise":"טורקיז","chocolate":"שוקולד","springgreen":"ירוק אביב","moccasin":"מוקסין","navy":"כחול כהה","lemonchiffon":"ירוק לימון","teal":"כחול-ירוק כהה","floralwhite":"לבן פרחוני","cornflowerblue":"כחול דרדר","paleturquoise":"טורקיז בהיר","purple":"סגול","gainsboro":"גיינסבורו","plum":"שזיף","red":"אדום","blue":"כחול","forestgreen":"ירוק יער","darkgreen":"ירוק כהה","honeydew":"ירקרק","darkseagreen":"ירוק ים כהה","lightcoral":"אלמוג בהיר","palevioletred":"סגול-אדום בהיר","mediumpurple":"סגול בינוני","saddlebrown":"חום דהוי","darkmagenta":"בורדו כהה","thistle":"דרדר","whitesmoke":"עשן לבן","wheat":"חיוט","violet":"סגול","lightskyblue":"כחול שמיים בהיר","goldenrod":"זהוב","mediumblue":"תכלת בינוני","skyblue":"כחול שמיים","crimson":"ארגמן","darksalmon":"סלמון כהה","darkred":"אדום כהה","darkslategrey":"אפור צפחה כהה","peru":"פרו","lightgrey":"אפור בהיר","lightgoldenrodyellow":"צהוב בהיר","blanchedalmond":"שקד","aliceblue":"כחול פלדה","bisque":"לבן שקד","slategray":"אפור צפחה","palegoldenrod":"זהוב בהיר","darkorange":"כתום כהה","aquamarine":"אקוומארין","lightgreen":"ירוק בהיר","burlywood":"חום דהוי","dodgerblue":"כחול","darkgray":"אפור כהה","lightcyan":"טורקיז בהיר","powderblue":"כחול חיוור","blueviolet":"כחול-סגול","orchid":"סחלב","dimgray":"אפור עמום","beige":"בז'","fuchsia":"ורוד בהיר","lavenderblush":"סומק לבנדר","hotpink":"ורוד לוהט","steelblue":"כחול פלדה","tomato":"עגבניה","lightpink":"ורוד בהיר","limegreen":"ירוק לימוני","indianred":"אדום דהוי","papayawhip":"פפאיה","lightslategray":"אפור צפחה בהיר","gray":"אפור","mediumorchid":"סחלב בינוני","cornsilk":"צהבהב","black":"שחור","seagreen":"ירוק ים","darkslateblue":"כחול צפחה כהה","khaki":"חאקי","lightblue":"תכלת","palegreen":"ירוק בהיר","azure":"תכלת עז","peachpuff":"קציפת אפרסק","darkolivegreen":"ירוק זית כהה","yellowgreen":"ירוק צהוב"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/fi/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/fi/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/fi/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/nb/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/nb/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/nb/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"lys stålblå","orangered":"rødoransje","midnightblue":"midnattsblå","cadetblue":"mørk grønnblå","seashell":"skjellhvit","slategrey":"skifergrå","coral":"korall","darkturquoise":"mørk turkis","antiquewhite":"antikk hvit","mediumspringgreen":"middels vårgrønn","salmon":"lakserosa","darkgrey":"mørk grå","ivory":"elfenbenshvit","greenyellow":"gulgrønn","mistyrose":"lys rosenrød","lightsalmon":"lys lakserosa","silver":"sølvfarget","dimgrey":"mørk mørkegrå","orange":"oransje","white":"hvit","navajowhite":"gulbrun","royalblue":"kongeblå","deeppink":"dyp rosa","lime":"lime","oldlace":"kniplingshvit","chartreuse":"løvgrønn","darkcyan":"mørk cyan","yellow":"gul","linen":"lin","olive":"oliven","gold":"gull","lawngreen":"plengrønn","lightyellow":"lys gul","tan":"matt mellombrun","darkviolet":"mørk fiolett","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grønn","deepskyblue":"dyp himmelblå","aqua":"akva","sienna":"nøttebrun","mintcream":"mintkrem","rosybrown":"brunlilla","mediumslateblue":"middels skiferblå","magenta":"magenta","lightseagreen":"lys sjøgrønn","cyan":"cyan","olivedrab":"middels olivengrønn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"middels akvamarin","lavender":"lavendel","mediumseagreen":"middels sjøgrønn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"middels turkis","ghostwhite":"egghvit","darkblue":"mørk blå","mediumvioletred":"middels fiolettrød","brown":"brun","lightgray":"lys grå","sandybrown":"sandbrun","pink":"rosa","firebrick":"mursteinsrød","indigo":"indigo","snow":"snøhvit","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"sjokolade","springgreen":"vårgrønn","moccasin":"lys gulbrun","navy":"marineblå","lemonchiffon":"ferskenfarget","teal":"mørk grønnblå","floralwhite":"blomsterhvit","cornflowerblue":"kornblå","paleturquoise":"svak turkis","purple":"purpur","gainsboro":"lys lys grå","plum":"plommefarget","red":"rød","blue":"blå","forestgreen":"skoggrønn","darkgreen":"mørk grønn","honeydew":"grønnhvit","darkseagreen":"mørk sjøgrønn","lightcoral":"lys korall","palevioletred":"svak fiolettrød","mediumpurple":"middels purpur","saddlebrown":"mørk nøttebrun","darkmagenta":"mørk magenta","thistle":"lys grålilla","whitesmoke":"røykhvit","wheat":"varm sienna","violet":"fiolett","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellomblå","skyblue":"himmelblå","crimson":"karmosinrødt","darksalmon":"mørk lakserosa","darkred":"mørk rød","darkslategrey":"mørk skifergrå","peru":"lys nøttebrun","lightgrey":"lys grå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"lys mandel","aliceblue":"blåhvit","bisque":"gulrosa","slategray":"skifergrå","palegoldenrod":"svak gyldenris","darkorange":"mørk oransje","aquamarine":"akvamarin","lightgreen":"lys grønn","burlywood":"matt mellombrun","dodgerblue":"lys havblå","darkgray":"mørk grå","lightcyan":"lys cyan","powderblue":"lys grønnblå","blueviolet":"blåfiolett","orchid":"orkide","dimgray":"mørk mørkegrå","beige":"beige","fuchsia":"fuksia","lavenderblush":"lillahvit","hotpink":"halvmørk rosa","steelblue":"stålblå","tomato":"tomatrød","lightpink":"lys rosa","limegreen":"limegrønn","indianred":"rustrød","papayawhip":"lys papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"middels orkide","cornsilk":"cornsilk","black":"svart","seagreen":"sjøgrønn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lys blå","palegreen":"svak grønn","azure":"asur","peachpuff":"brunrosa","darkolivegreen":"mørk olivengrønn","yellowgreen":"gulgrønn"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/el/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/el/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/el/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"ανοιχτό μπλε ατσαλιού","orangered":"πορτοκαλοκόκκινο","midnightblue":"πολύ σκούρο μπλε","cadetblue":"μπλε του στρατού","seashell":"κοχύλι","slategrey":"μεταλλικό γκρι","coral":"κοραλί","darkturquoise":"σκούρο τυρκουάζ","antiquewhite":"ξεθωριασμένο λευκό","mediumspringgreen":"μεσαίο πράσινο της άνοιξης","salmon":"σομόν","darkgrey":"σκούρο γκρι","ivory":"ιβουάρ","greenyellow":"πρασινοκίτρινο","mistyrose":"τριανταφυλλί","lightsalmon":"ανοιχτό σομόν","silver":"ασημί","dimgrey":"αχνό γκρι","orange":"πορτοκαλί","white":"λευκό","navajowhite":"άσπρο Ναβάχο","royalblue":"έντονο μπλε","deeppink":"βαθύ ροζ","lime":"λαχανί","oldlace":"εκρού","chartreuse":"φωτεινό κιτρινοπράσινο","darkcyan":"σκούρο κυανό","yellow":"κίτρινο","linen":"σπαγγί","olive":"πράσινο λαδί","gold":"χρυσαφί","lawngreen":"σκούρο πράσινο","lightyellow":"ανοιχτό κίτρινο","tan":"ώχρα","darkviolet":"σκούρο βιολετί","lightslategrey":"ανοιχτό μεταλλικό γκρι","grey":"γκρι","darkkhaki":"σκούρο χακί","green":"πράσινο","deepskyblue":"βαθύ μπλε το ουρανού","aqua":"γαλάζιο","sienna":"καφεκίτρινο","mintcream":"βεραμάν","rosybrown":"καστανό","mediumslateblue":"μεσαίο μεταλλικό μπλε","magenta":"ματζέντα","lightseagreen":"ανοιχτό πράσινο της θάλασσας","cyan":"κυανό","olivedrab":"λαδί","darkgoldenrod":"σκούρο χρυσοκίτρινο","slateblue":"μεταλλικό μπλε","mediumaquamarine":"μεσαίο γαλαζοπράσινο","lavender":"λίλα","mediumseagreen":"μεσαίο πράσινο της θάλασσας","maroon":"βυσσινί","darkslategray":"σκούρο μεταλλικό γκρι","mediumturquoise":"μεσαίο τυρκουάζ","ghostwhite":"άσπρο","darkblue":"σκούρο μπλε","mediumvioletred":"μεσαίο κόκκινο βιολετί","brown":"καφέ","lightgray":"ανοιχτό γκρι","sandybrown":"μπεζ της άμμου","pink":"ροζ","firebrick":"κεραμιδί","indigo":"λουλακί","snow":"χιονί","darkorchid":"σκούρα ορχιδέα","turquoise":"τυρκουάζ","chocolate":"σοκολατί","springgreen":"πράσινο της άνοιξης","moccasin":"μόκα","navy":"μπλε του ναυτικού","lemonchiffon":"λεμονί","teal":"πετρόλ","floralwhite":"λευκό των ανθών","cornflowerblue":"μεσαίο μπλε","paleturquoise":"αχνό τυρκουάζ","purple":"μωβ","gainsboro":"γκρι σιέλ","plum":"δαμασκηνί","red":"κόκκινο","blue":"μπλε","forestgreen":"πράσινο του δάσους","darkgreen":"σκούρο πράσινο","honeydew":"μελί","darkseagreen":"σκούρο πράσινο της θάλασσας","lightcoral":"ανοιχτό κοραλί","palevioletred":"αχνό κόκκινο βιολετί","mediumpurple":"μεσαίο μωβ","saddlebrown":"βαθύ καφέ","darkmagenta":"σκούρο ματζέντα","thistle":"μωβ βιολετί","whitesmoke":"λευκός καπνός","wheat":"σταρένιο","violet":"βιολετί","lightskyblue":"ανοιχτό μπλε το ουρανού","goldenrod":"χρυσοκίτρινο","mediumblue":"μεσαίο μπλε","skyblue":"μπλε του ουρανού","crimson":"βαθύ κόκκινο","darksalmon":"σκούρο σομόν","darkred":"σκούρο κόκκινο","darkslategrey":"σκούρο μεταλλικό γκρι","peru":"περού","lightgrey":"ανοιχτό γκρι","lightgoldenrodyellow":"ανοιχτό χρυσοκίτρινο","blanchedalmond":"ζαχαρί","aliceblue":"σιέλ","bisque":"σκούρο κρεμ","slategray":"μεταλλικό γκρι","palegoldenrod":"αχνό χρυσοκίτρινο","darkorange":"σκούρο πορτοκαλί","aquamarine":"γαλαζοπράσινο","lightgreen":"ανοιχτό πράσινο","burlywood":"καφέ του ξύλου","dodgerblue":"σκούρο ελεκτρίκ","darkgray":"σκούρο γκρι","lightcyan":"ανοιχτό κυανό","powderblue":"αχνό μπλε","blueviolet":"βιολετί","orchid":"ορχιδέα","dimgray":"αχνό γκρι","beige":"μπεζ","fuchsia":"φούξια","lavenderblush":"μωβ λεβάντας","hotpink":"έντονο ροζ","steelblue":"μπλε ατσαλιού","tomato":"κόκκινο της ντομάτας","lightpink":"ανοιχτό ροζ","limegreen":"πράσινο λαχανί","indianred":"ινδικό κόκκινο","papayawhip":"αχνό ροζ","lightslategray":"ανοιχτό μεταλλικό γκρι","gray":"γκρι","mediumorchid":"μεσαία ορχιδέα","cornsilk":"ασημί του καλαμποκιού","black":"μαύρο","seagreen":"πράσινο της θάλασσας","darkslateblue":"σκούρο μεταλλικό μπλε","khaki":"χακί","lightblue":"ανοιχτό μπλε","palegreen":"αχνό πράσινο","azure":"μπλε του ουρανού","peachpuff":"ροδακινί","darkolivegreen":"σκούρο πράσινο λαδί","yellowgreen":"κιτρινοπράσινο"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/nls/ar/colors.js
===================================================================
--- trunk/web/dojo/dojo/nls/ar/colors.js	(revision 0)
+++ trunk/web/dojo/dojo/nls/ar/colors.js	(revision 9)
@@ -0,0 +1 @@
+({"lightsteelblue":"أزرق معدني فاتح","orangered":"أحمر مائل للبرتقالي","midnightblue":"أزرق بحري","cadetblue":"أزرق ملون بالرمادي","seashell":"أبيض مائل للأصفر فاتح","slategrey":"رمادي اردوازي","coral":"مرجاني","darkturquoise":"تركواز داكن","antiquewhite":"أبيض عتيق","mediumspringgreen":"أخضر ربيعي متوسط","salmon":"برتقالي وردي شاحب","darkgrey":"رمادي داكن","ivory":"عاجي","greenyellow":"أخضر مائل للأصفر","mistyrose":"وردي","lightsalmon":"فضي فاتح","silver":"فضي","dimgrey":"رمادي شاحب","orange":"برتقالي","white":"أبيض","navajowhite":"أبيض ملاحي","royalblue":"أزرق ملكي","deeppink":"أحمر وردي غامق","lime":"ليموني","oldlace":"برتقالي مائل للأصفر شاحب","chartreuse":"أخضر مائل للصفرة","darkcyan":"أزرق سماوي داكن","yellow":"أصفر","linen":"كتاني","olive":"أخضر زيتوني داكن","gold":"ذهبي","lawngreen":"أخضر بلون العشب","lightyellow":"أصفر فاتح","tan":"خمري","darkviolet":"بنفسجي داكن","lightslategrey":"رمادي اردوازي فاتح","grey":"رمادي","darkkhaki":"كاكي داكن","green":"أخضر","deepskyblue":"أزرق سماوي غامق","aqua":"أزرق مائي","sienna":"بني محروق","mintcream":"أصفر شاحب مائل للأخضر الزرعي","rosybrown":"بني وردي","mediumslateblue":"أزرق اردوازي متوسط","magenta":"أحمر قرمزي","lightseagreen":"أخضر مائل للأزرق فاتح","cyan":"أزرق سماوي","olivedrab":"أسود فاتح","darkgoldenrod":"أصفر ذهبي داكن","slateblue":"أزرق اردوازي","mediumaquamarine":"أزرق مائل للأخضر (زبرجد) متوسط","lavender":"أرجواني شاحب","mediumseagreen":"أخضر مائل للأزرق متوسط","maroon":"أحمر داكن","darkslategray":"رمادي اردوازي داكن","mediumturquoise":"تركواز متوسط","ghostwhite":"أبيض شفاف","darkblue":"أزرق داكن","mediumvioletred":"أحمر-بنفسجي متوسط","brown":"بني","lightgray":"رمادي فاتح","sandybrown":"بني مائل للصفرة","pink":"وردي","firebrick":"أصفر زاهي","indigo":"نيلي","snow":"أبيض ثلجي","darkorchid":"أرجواني داكن","turquoise":"تركواز","chocolate":"بني غامق","springgreen":"أخضر ربيعي","moccasin":"نحاسي أحمر","navy":"أزرق داكن","lemonchiffon":"أصفر شفاف","teal":"بترولي","floralwhite":"أبيض زهري","cornflowerblue":"أزرق عنبري","paleturquoise":"تركواز شاحب","purple":"ارجواني","gainsboro":"رمادي مائل للأزرق فاتح","plum":"أرجواني داكن","red":"أحمر","blue":"أزرق","forestgreen":"أخضر بلون أشجار الغابات","darkgreen":"أخضر داكن","honeydew":"أبيض مائل للأخضر","darkseagreen":"أخضر مائل للأزرق داكن","lightcoral":"مرجاني فاتح","palevioletred":"أحمر-بنفسجي شاحب","mediumpurple":"قرمزي متوسط","saddlebrown":"بني فاتح","darkmagenta":"قرمزي داكن","thistle":"ارجواني شاحب","whitesmoke":"دخان أبيض","wheat":"أخضر قمحي","violet":"بنفسجي","lightskyblue":"أزرق سماوي فاتح","goldenrod":"أصفر ذهبي","mediumblue":"أزرق متوسط","skyblue":"أزرق سماوي","crimson":"قرمزي","darksalmon":"فضي داكن","darkred":"أحمر داكن","darkslategrey":"رمادي اردوازي داكن","peru":"بني جملي","lightgrey":"رمادي فاتح","lightgoldenrodyellow":"أصفر ذهبي فاتح","blanchedalmond":"أخضر مائل للبياض","aliceblue":"أزرق فاتح","bisque":"أصفر برتقالي الى رمادي مصفر","slategray":"رمادي اردوازي","palegoldenrod":"أصفر ذهبي شاحب","darkorange":"برتقالي داكن","aquamarine":"أزرق مائل للأخضر (زبرجد)","lightgreen":"أخضر فاتح","burlywood":"خشبي","dodgerblue":"أزرق عنبري","darkgray":"رمادي داكن","lightcyan":"سماوي فاتح","powderblue":"أزرق مائل للأصفر","blueviolet":"أزرق-بنفسجي","orchid":"أرجواني فاتح","dimgray":"رمادي شاحب","beige":"بيج","fuchsia":"فوشيا","lavenderblush":"أحمر أرجواني","hotpink":"أحمر وردي زاهي","steelblue":"أزرق معدني","tomato":"أحمر مائل للأصفر","lightpink":"وردي فاتح","limegreen":"أخضر ليموني","indianred":"أحمر هندي","papayawhip":"خوخي فاتح","lightslategray":"رمادي اردوازي فاتح","gray":"رمادي","mediumorchid":"أرجواني متوسط","cornsilk":"حريري","black":"أسود","seagreen":"أخضر مائل للأزرق","darkslateblue":"أزرق اردوازي داكن","khaki":"كاكي","lightblue":"أزرق فاتح","palegreen":"أخضر شاحب","azure":"أزرق سماوي","peachpuff":"خوخي مائل للأصفر","darkolivegreen":"أخضر زيتوني داكن","yellowgreen":"أخضر مائل للأصفر"})
\ No newline at end of file
Index: trunk/web/dojo/dojo/hash.js
===================================================================
--- trunk/web/dojo/dojo/hash.js	(revision 0)
+++ trunk/web/dojo/dojo/hash.js	(revision 9)
@@ -0,0 +1,137 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.hash"]){
+dojo._hasResource["dojo.hash"]=true;
+dojo.provide("dojo.hash");
+(function(){
+dojo.hash=function(_1,_2){
+if(!arguments.length){
+return _3();
+}
+if(_1.charAt(0)=="#"){
+_1=_1.substring(1);
+}
+if(_2){
+_4(_1);
+}else{
+location.href="#"+_1;
+}
+return _1;
+};
+var _5=null,_6=null,_7=dojo.config.hashPollFrequency||100;
+function _8(_9,_a){
+var i=_9.indexOf(_a);
+return (i>=0)?_9.substring(i+1):"";
+};
+function _3(){
+return _8(location.href,"#");
+};
+function _b(){
+dojo.publish("/dojo/hashchange",[_3()]);
+};
+function _c(){
+if(_3()===_5){
+return;
+}
+_5=_3();
+_b();
+};
+function _4(_d){
+if(_6){
+if(_6.isTransitioning()){
+setTimeout(dojo.hitch(null,_4,_d),_7);
+return;
+}
+var _e=_6.iframe.location.href;
+var _f=_e.indexOf("?");
+_6.iframe.location.replace(_e.substring(0,_f)+"?"+_d);
+return;
+}
+location.replace("#"+_d);
+_c();
+};
+function _10(){
+var ifr=document.createElement("iframe"),_11="dojo-hash-iframe",_12=dojo.config.dojoBlankHtmlUrl||dojo.moduleUrl("dojo","resources/blank.html");
+ifr.id=_11;
+ifr.src=_12+"?"+_3();
+ifr.style.display="none";
+document.body.appendChild(ifr);
+this.iframe=dojo.global[_11];
+var _13,_14,_15,_16,_17,_18=this.iframe.location;
+function _19(){
+_5=_3();
+_13=_17?_5:_8(_18.href,"?");
+_14=false;
+_15=null;
+};
+this.isTransitioning=function(){
+return _14;
+};
+this.pollLocation=function(){
+if(!_17){
+try{
+var _1a=_8(_18.href,"?");
+if(document.title!=_16){
+_16=this.iframe.document.title=document.title;
+}
+}
+catch(e){
+_17=true;
+console.error("dojo.hash: Error adding history entry. Server unreachable.");
+}
+}
+var _1b=_3();
+if(_14&&_5===_1b){
+if(_17||_1a===_15){
+_19();
+_b();
+}else{
+setTimeout(dojo.hitch(this,this.pollLocation),0);
+return;
+}
+}else{
+if(_5===_1b&&(_17||_13===_1a)){
+}else{
+if(_5!==_1b){
+_5=_1b;
+_14=true;
+_15=_1b;
+ifr.src=_12+"?"+_15;
+_17=false;
+setTimeout(dojo.hitch(this,this.pollLocation),0);
+return;
+}else{
+if(!_17){
+location.href="#"+_18.search.substring(1);
+_19();
+_b();
+}
+}
+}
+}
+setTimeout(dojo.hitch(this,this.pollLocation),_7);
+};
+_19();
+setTimeout(dojo.hitch(this,this.pollLocation),_7);
+};
+dojo.addOnLoad(function(){
+if("onhashchange" in dojo.global&&(!dojo.isIE||(dojo.isIE>=8&&document.compatMode!="BackCompat"))){
+dojo.connect(dojo.global,"onhashchange",_b);
+}else{
+if(document.addEventListener){
+_5=_3();
+setInterval(_c,_7);
+}else{
+if(document.attachEvent){
+_6=new _10();
+}
+}
+}
+});
+})();
+}
Index: trunk/web/dojo/dojo/NodeList-html.js
===================================================================
--- trunk/web/dojo/dojo/NodeList-html.js	(revision 0)
+++ trunk/web/dojo/dojo/NodeList-html.js	(revision 9)
@@ -0,0 +1,21 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.NodeList-html"]){
+dojo._hasResource["dojo.NodeList-html"]=true;
+dojo.provide("dojo.NodeList-html");
+dojo.require("dojo.html");
+dojo.extend(dojo.NodeList,{html:function(_1,_2){
+var _3=new dojo.html._ContentSetter(_2||{});
+this.forEach(function(_4){
+_3.node=_4;
+_3.set(_1);
+_3.tearDown();
+});
+return this;
+}});
+}
Index: trunk/web/dojo/dojo/Stateful.js
===================================================================
--- trunk/web/dojo/dojo/Stateful.js	(revision 0)
+++ trunk/web/dojo/dojo/Stateful.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.Stateful"]){
+dojo._hasResource["dojo.Stateful"]=true;
+dojo.provide("dojo.Stateful");
+dojo.declare("dojo.Stateful",null,{postscript:function(_1){
+if(_1){
+dojo.mixin(this,_1);
+}
+},get:function(_2){
+return this[_2];
+},set:function(_3,_4){
+if(typeof _3==="object"){
+for(var x in _3){
+this.set(x,_3[x]);
+}
+return this;
+}
+var _5=this[_3];
+this[_3]=_4;
+if(this._watchCallbacks){
+this._watchCallbacks(_3,_5,_4);
+}
+return this;
+},watch:function(_6,_7){
+var _8=this._watchCallbacks;
+if(!_8){
+var _9=this;
+_8=this._watchCallbacks=function(_a,_b,_c,_d){
+var _e=function(_f){
+for(var i=0,l=_f&&_f.length;i<l;i++){
+try{
+_f[i].call(_9,_a,_b,_c);
+}
+catch(e){
+console.error(e);
+}
+}
+};
+_e(_8[_a]);
+if(!_d){
+_e(_8["*"]);
+}
+};
+}
+if(!_7&&typeof _6==="function"){
+_7=_6;
+_6="*";
+}
+var _10=_8[_6];
+if(typeof _10!=="object"){
+_10=_8[_6]=[];
+}
+_10.push(_7);
+return {unwatch:function(){
+_10.splice(dojo.indexOf(_10,_7),1);
+}};
+}});
+}
Index: trunk/web/dojo/dojo/regexp.js
===================================================================
--- trunk/web/dojo/dojo/regexp.js	(revision 0)
+++ trunk/web/dojo/dojo/regexp.js	(revision 9)
@@ -0,0 +1,32 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.regexp"]){
+dojo._hasResource["dojo.regexp"]=true;
+dojo.provide("dojo.regexp");
+dojo.regexp.escapeString=function(_1,_2){
+return _1.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){
+if(_2&&_2.indexOf(ch)!=-1){
+return ch;
+}
+return "\\"+ch;
+});
+};
+dojo.regexp.buildGroupRE=function(_3,re,_4){
+if(!(_3 instanceof Array)){
+return re(_3);
+}
+var b=[];
+for(var i=0;i<_3.length;i++){
+b.push(re(_3[i]));
+}
+return dojo.regexp.group(b.join("|"),_4);
+};
+dojo.regexp.group=function(_5,_6){
+return "("+(_6?"?:":"")+_5+")";
+};
+}
Index: trunk/web/dojo/dojo/parser.js
===================================================================
--- trunk/web/dojo/dojo/parser.js	(revision 0)
+++ trunk/web/dojo/dojo/parser.js	(revision 9)
@@ -0,0 +1,272 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.parser"]){
+dojo._hasResource["dojo.parser"]=true;
+dojo.provide("dojo.parser");
+dojo.require("dojo.date.stamp");
+new Date("X");
+dojo.parser=new function(){
+var d=dojo;
+this._attrName=d._scopeName+"Type";
+this._query="["+this._attrName+"]";
+function _1(_2){
+if(d.isString(_2)){
+return "string";
+}
+if(typeof _2=="number"){
+return "number";
+}
+if(typeof _2=="boolean"){
+return "boolean";
+}
+if(d.isFunction(_2)){
+return "function";
+}
+if(d.isArray(_2)){
+return "array";
+}
+if(_2 instanceof Date){
+return "date";
+}
+if(_2 instanceof d._Url){
+return "url";
+}
+return "object";
+};
+function _3(_4,_5){
+switch(_5){
+case "string":
+return _4;
+case "number":
+return _4.length?Number(_4):NaN;
+case "boolean":
+return typeof _4=="boolean"?_4:!(_4.toLowerCase()=="false");
+case "function":
+if(d.isFunction(_4)){
+_4=_4.toString();
+_4=d.trim(_4.substring(_4.indexOf("{")+1,_4.length-1));
+}
+try{
+if(_4===""||_4.search(/[^\w\.]+/i)!=-1){
+return new Function(_4);
+}else{
+return d.getObject(_4,false)||new Function(_4);
+}
+}
+catch(e){
+return new Function();
+}
+case "array":
+return _4?_4.split(/\s*,\s*/):[];
+case "date":
+switch(_4){
+case "":
+return new Date("");
+case "now":
+return new Date();
+default:
+return d.date.stamp.fromISOString(_4);
+}
+case "url":
+return d.baseUrl+_4;
+default:
+return d.fromJson(_4);
+}
+};
+var _6={};
+dojo.connect(dojo,"extend",function(){
+_6={};
+});
+function _7(_8){
+if(!_6[_8]){
+var _9=d.getObject(_8);
+if(!_9){
+return null;
+}
+var _a=_9.prototype;
+var _b={},_c={};
+for(var _d in _a){
+if(_d.charAt(0)=="_"){
+continue;
+}
+if(_d in _c){
+continue;
+}
+var _e=_a[_d];
+_b[_d]=_1(_e);
+}
+_6[_8]={cls:_9,params:_b};
+}
+return _6[_8];
+};
+this._functionFromScript=function(_f){
+var _10="";
+var _11="";
+var _12=_f.getAttribute("args");
+if(_12){
+d.forEach(_12.split(/\s*,\s*/),function(_13,idx){
+_10+="var "+_13+" = arguments["+idx+"]; ";
+});
+}
+var _14=_f.getAttribute("with");
+if(_14&&_14.length){
+d.forEach(_14.split(/\s*,\s*/),function(_15){
+_10+="with("+_15+"){";
+_11+="}";
+});
+}
+return new Function(_10+_f.innerHTML+_11);
+};
+this.instantiate=function(_16,_17,_18){
+var _19=[],dp=dojo.parser;
+_17=_17||{};
+_18=_18||{};
+d.forEach(_16,function(obj){
+if(!obj){
+return;
+}
+var _1a,_1b,_1c,_1d,_1e;
+if(obj.node){
+_1a=obj.node;
+_1b=obj.type;
+_1c=obj.clsInfo||(_1b&&_7(_1b));
+_1d=_1c&&_1c.cls;
+_1e=obj.scripts;
+}else{
+_1a=obj;
+_1b=dp._attrName in _17?_17[dp._attrName]:_1a.getAttribute(dp._attrName);
+_1c=_1b&&_7(_1b);
+_1d=_1c&&_1c.cls;
+_1e=(_1d&&(_1d._noScript||_1d.prototype._noScript)?[]:d.query("> script[type^='dojo/']",_1a));
+}
+if(!_1c){
+throw new Error("Could not load class '"+_1b);
+}
+var _1f={},_20=_1a.attributes;
+if(_18.defaults){
+dojo.mixin(_1f,_18.defaults);
+}
+if(obj.inherited){
+dojo.mixin(_1f,obj.inherited);
+}
+for(var _21 in _1c.params){
+var _22=_21 in _17?{value:_17[_21],specified:true}:_20.getNamedItem(_21);
+if(!_22||(!_22.specified&&(!dojo.isIE||_21.toLowerCase()!="value"))){
+continue;
+}
+var _23=_22.value;
+switch(_21){
+case "class":
+_23="className" in _17?_17.className:_1a.className;
+break;
+case "style":
+_23="style" in _17?_17.style:(_1a.style&&_1a.style.cssText);
+}
+var _24=_1c.params[_21];
+if(typeof _23=="string"){
+_1f[_21]=_3(_23,_24);
+}else{
+_1f[_21]=_23;
+}
+}
+var _25=[],_26=[];
+d.forEach(_1e,function(_27){
+_1a.removeChild(_27);
+var _28=_27.getAttribute("event"),_1b=_27.getAttribute("type"),nf=d.parser._functionFromScript(_27);
+if(_28){
+if(_1b=="dojo/connect"){
+_25.push({event:_28,func:nf});
+}else{
+_1f[_28]=nf;
+}
+}else{
+_26.push(nf);
+}
+});
+var _29=_1d.markupFactory||_1d.prototype&&_1d.prototype.markupFactory;
+var _2a=_29?_29(_1f,_1a,_1d):new _1d(_1f,_1a);
+_19.push(_2a);
+var _2b=_1a.getAttribute("jsId");
+if(_2b){
+d.setObject(_2b,_2a);
+}
+d.forEach(_25,function(_2c){
+d.connect(_2a,_2c.event,null,_2c.func);
+});
+d.forEach(_26,function(_2d){
+_2d.call(_2a);
+});
+});
+if(!_17._started){
+d.forEach(_19,function(_2e){
+if(!_18.noStart&&_2e&&_2e.startup&&!_2e._started&&(!_2e.getParent||!_2e.getParent())){
+_2e.startup();
+}
+});
+}
+return _19;
+};
+this.parse=function(_2f,_30){
+var _31;
+if(!_30&&_2f&&_2f.rootNode){
+_30=_2f;
+_31=_30.rootNode;
+}else{
+_31=_2f;
+}
+var _32=this._attrName;
+function _33(_34,_35){
+var _36=dojo.clone(_34.inherited);
+dojo.forEach(["dir","lang"],function(_37){
+var val=_34.node.getAttribute(_37);
+if(val){
+_36[_37]=val;
+}
+});
+var _38=_34.scripts;
+var _39=!_34.clsInfo||!_34.clsInfo.cls.prototype.stopParser;
+for(var _3a=_34.node.firstChild;_3a;_3a=_3a.nextSibling){
+if(_3a.nodeType==1){
+var _3b=_39&&_3a.getAttribute(_32);
+if(_3b){
+var _3c={"type":_3b,clsInfo:_7(_3b),node:_3a,scripts:[],inherited:_36};
+_35.push(_3c);
+_33(_3c,_35);
+}else{
+if(_38&&_3a.nodeName.toLowerCase()=="script"){
+_3b=_3a.getAttribute("type");
+if(_3b&&/^dojo\//i.test(_3b)){
+_38.push(_3a);
+}
+}else{
+if(_39){
+_33({node:_3a,inherited:_36},_35);
+}
+}
+}
+}
+}
+};
+var _3d=[];
+_33({node:_31?dojo.byId(_31):dojo.body(),inherited:(_30&&_30.inherited)||{dir:dojo._isBodyLtr()?"ltr":"rtl"}},_3d);
+return this.instantiate(_3d,null,_30);
+};
+}();
+(function(){
+var _3e=function(){
+if(dojo.config.parseOnLoad){
+dojo.parser.parse();
+}
+};
+if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){
+dojo._loaders.splice(1,0,_3e);
+}else{
+dojo._loaders.unshift(_3e);
+}
+})();
+}
Index: trunk/web/dojo/dojo/data/api/Notification.js
===================================================================
--- trunk/web/dojo/dojo/data/api/Notification.js	(revision 0)
+++ trunk/web/dojo/dojo/data/api/Notification.js	(revision 9)
@@ -0,0 +1,21 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.api.Notification"]){
+dojo._hasResource["dojo.data.api.Notification"]=true;
+dojo.provide("dojo.data.api.Notification");
+dojo.require("dojo.data.api.Read");
+dojo.declare("dojo.data.api.Notification",dojo.data.api.Read,{getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Notification":true};
+},onSet:function(_1,_2,_3,_4){
+throw new Error("Unimplemented API: dojo.data.api.Notification.onSet");
+},onNew:function(_5,_6){
+throw new Error("Unimplemented API: dojo.data.api.Notification.onNew");
+},onDelete:function(_7){
+throw new Error("Unimplemented API: dojo.data.api.Notification.onDelete");
+}});
+}
Index: trunk/web/dojo/dojo/data/api/Request.js
===================================================================
--- trunk/web/dojo/dojo/data/api/Request.js	(revision 0)
+++ trunk/web/dojo/dojo/data/api/Request.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.api.Request"]){
+dojo._hasResource["dojo.data.api.Request"]=true;
+dojo.provide("dojo.data.api.Request");
+dojo.declare("dojo.data.api.Request",null,{abort:function(){
+throw new Error("Unimplemented API: dojo.data.api.Request.abort");
+}});
+}
Index: trunk/web/dojo/dojo/data/api/Identity.js
===================================================================
--- trunk/web/dojo/dojo/data/api/Identity.js	(revision 0)
+++ trunk/web/dojo/dojo/data/api/Identity.js	(revision 9)
@@ -0,0 +1,26 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.api.Identity"]){
+dojo._hasResource["dojo.data.api.Identity"]=true;
+dojo.provide("dojo.data.api.Identity");
+dojo.require("dojo.data.api.Read");
+dojo.declare("dojo.data.api.Identity",dojo.data.api.Read,{getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},getIdentity:function(_1){
+throw new Error("Unimplemented API: dojo.data.api.Identity.getIdentity");
+var _2=null;
+return _2;
+},getIdentityAttributes:function(_3){
+throw new Error("Unimplemented API: dojo.data.api.Identity.getIdentityAttributes");
+return null;
+},fetchItemByIdentity:function(_4){
+if(!this.isItemLoaded(_4.item)){
+throw new Error("Unimplemented API: dojo.data.api.Identity.fetchItemByIdentity");
+}
+}});
+}
Index: trunk/web/dojo/dojo/data/api/Write.js
===================================================================
--- trunk/web/dojo/dojo/data/api/Write.js	(revision 0)
+++ trunk/web/dojo/dojo/data/api/Write.js	(revision 9)
@@ -0,0 +1,39 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.api.Write"]){
+dojo._hasResource["dojo.data.api.Write"]=true;
+dojo.provide("dojo.data.api.Write");
+dojo.require("dojo.data.api.Read");
+dojo.declare("dojo.data.api.Write",dojo.data.api.Read,{getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Write":true};
+},newItem:function(_1,_2){
+var _3;
+throw new Error("Unimplemented API: dojo.data.api.Write.newItem");
+return _3;
+},deleteItem:function(_4){
+throw new Error("Unimplemented API: dojo.data.api.Write.deleteItem");
+return false;
+},setValue:function(_5,_6,_7){
+throw new Error("Unimplemented API: dojo.data.api.Write.setValue");
+return false;
+},setValues:function(_8,_9,_a){
+throw new Error("Unimplemented API: dojo.data.api.Write.setValues");
+return false;
+},unsetAttribute:function(_b,_c){
+throw new Error("Unimplemented API: dojo.data.api.Write.clear");
+return false;
+},save:function(_d){
+throw new Error("Unimplemented API: dojo.data.api.Write.save");
+},revert:function(){
+throw new Error("Unimplemented API: dojo.data.api.Write.revert");
+return false;
+},isDirty:function(_e){
+throw new Error("Unimplemented API: dojo.data.api.Write.isDirty");
+return false;
+}});
+}
Index: trunk/web/dojo/dojo/data/api/Read.js
===================================================================
--- trunk/web/dojo/dojo/data/api/Read.js	(revision 0)
+++ trunk/web/dojo/dojo/data/api/Read.js	(revision 9)
@@ -0,0 +1,55 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.api.Read"]){
+dojo._hasResource["dojo.data.api.Read"]=true;
+dojo.provide("dojo.data.api.Read");
+dojo.require("dojo.data.api.Request");
+dojo.declare("dojo.data.api.Read",null,{getValue:function(_1,_2,_3){
+var _4=null;
+throw new Error("Unimplemented API: dojo.data.api.Read.getValue");
+return _4;
+},getValues:function(_5,_6){
+var _7=[];
+throw new Error("Unimplemented API: dojo.data.api.Read.getValues");
+return _7;
+},getAttributes:function(_8){
+var _9=[];
+throw new Error("Unimplemented API: dojo.data.api.Read.getAttributes");
+return _9;
+},hasAttribute:function(_a,_b){
+throw new Error("Unimplemented API: dojo.data.api.Read.hasAttribute");
+return false;
+},containsValue:function(_c,_d,_e){
+throw new Error("Unimplemented API: dojo.data.api.Read.containsValue");
+return false;
+},isItem:function(_f){
+throw new Error("Unimplemented API: dojo.data.api.Read.isItem");
+return false;
+},isItemLoaded:function(_10){
+throw new Error("Unimplemented API: dojo.data.api.Read.isItemLoaded");
+return false;
+},loadItem:function(_11){
+if(!this.isItemLoaded(_11.item)){
+throw new Error("Unimplemented API: dojo.data.api.Read.loadItem");
+}
+},fetch:function(_12){
+var _13=null;
+throw new Error("Unimplemented API: dojo.data.api.Read.fetch");
+return _13;
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},close:function(_14){
+throw new Error("Unimplemented API: dojo.data.api.Read.close");
+},getLabel:function(_15){
+throw new Error("Unimplemented API: dojo.data.api.Read.getLabel");
+return undefined;
+},getLabelAttributes:function(_16){
+throw new Error("Unimplemented API: dojo.data.api.Read.getLabelAttributes");
+return null;
+}});
+}
Index: trunk/web/dojo/dojo/data/util/sorter.js
===================================================================
--- trunk/web/dojo/dojo/data/util/sorter.js	(revision 0)
+++ trunk/web/dojo/dojo/data/util/sorter.js	(revision 9)
@@ -0,0 +1,66 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.util.sorter"]){
+dojo._hasResource["dojo.data.util.sorter"]=true;
+dojo.provide("dojo.data.util.sorter");
+dojo.data.util.sorter.basicComparator=function(a,b){
+var r=-1;
+if(a===null){
+a=undefined;
+}
+if(b===null){
+b=undefined;
+}
+if(a==b){
+r=0;
+}else{
+if(a>b||a==null){
+r=1;
+}
+}
+return r;
+};
+dojo.data.util.sorter.createSortFunction=function(_1,_2){
+var _3=[];
+function _4(_5,_6,_7,s){
+return function(_8,_9){
+var a=s.getValue(_8,_5);
+var b=s.getValue(_9,_5);
+return _6*_7(a,b);
+};
+};
+var _a;
+var _b=_2.comparatorMap;
+var bc=dojo.data.util.sorter.basicComparator;
+for(var i=0;i<_1.length;i++){
+_a=_1[i];
+var _c=_a.attribute;
+if(_c){
+var _d=(_a.descending)?-1:1;
+var _e=bc;
+if(_b){
+if(typeof _c!=="string"&&("toString" in _c)){
+_c=_c.toString();
+}
+_e=_b[_c]||bc;
+}
+_3.push(_4(_c,_d,_e,_2));
+}
+}
+return function(_f,_10){
+var i=0;
+while(i<_3.length){
+var ret=_3[i++](_f,_10);
+if(ret!==0){
+return ret;
+}
+}
+return 0;
+};
+};
+}
Index: trunk/web/dojo/dojo/data/util/simpleFetch.js
===================================================================
--- trunk/web/dojo/dojo/data/util/simpleFetch.js	(revision 0)
+++ trunk/web/dojo/dojo/data/util/simpleFetch.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.util.simpleFetch"]){
+dojo._hasResource["dojo.data.util.simpleFetch"]=true;
+dojo.provide("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.sorter");
+dojo.data.util.simpleFetch.fetch=function(_1){
+_1=_1||{};
+if(!_1.store){
+_1.store=this;
+}
+var _2=this;
+var _3=function(_4,_5){
+if(_5.onError){
+var _6=_5.scope||dojo.global;
+_5.onError.call(_6,_4,_5);
+}
+};
+var _7=function(_8,_9){
+var _a=_9.abort||null;
+var _b=false;
+var _c=_9.start?_9.start:0;
+var _d=(_9.count&&(_9.count!==Infinity))?(_c+_9.count):_8.length;
+_9.abort=function(){
+_b=true;
+if(_a){
+_a.call(_9);
+}
+};
+var _e=_9.scope||dojo.global;
+if(!_9.store){
+_9.store=_2;
+}
+if(_9.onBegin){
+_9.onBegin.call(_e,_8.length,_9);
+}
+if(_9.sort){
+_8.sort(dojo.data.util.sorter.createSortFunction(_9.sort,_2));
+}
+if(_9.onItem){
+for(var i=_c;(i<_8.length)&&(i<_d);++i){
+var _f=_8[i];
+if(!_b){
+_9.onItem.call(_e,_f,_9);
+}
+}
+}
+if(_9.onComplete&&!_b){
+var _10=null;
+if(!_9.onItem){
+_10=_8.slice(_c,_d);
+}
+_9.onComplete.call(_e,_10,_9);
+}
+};
+this._fetchItems(_1,_7,_3);
+return _1;
+};
+}
Index: trunk/web/dojo/dojo/data/util/filter.js
===================================================================
--- trunk/web/dojo/dojo/data/util/filter.js	(revision 0)
+++ trunk/web/dojo/dojo/data/util/filter.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.util.filter"]){
+dojo._hasResource["dojo.data.util.filter"]=true;
+dojo.provide("dojo.data.util.filter");
+dojo.data.util.filter.patternToRegExp=function(_1,_2){
+var _3="^";
+var c=null;
+for(var i=0;i<_1.length;i++){
+c=_1.charAt(i);
+switch(c){
+case "\\":
+_3+=c;
+i++;
+_3+=_1.charAt(i);
+break;
+case "*":
+_3+=".*";
+break;
+case "?":
+_3+=".";
+break;
+case "$":
+case "^":
+case "/":
+case "+":
+case ".":
+case "|":
+case "(":
+case ")":
+case "{":
+case "}":
+case "[":
+case "]":
+_3+="\\";
+default:
+_3+=c;
+}
+}
+_3+="$";
+if(_2){
+return new RegExp(_3,"mi");
+}else{
+return new RegExp(_3,"m");
+}
+};
+}
Index: trunk/web/dojo/dojo/data/ItemFileWriteStore.js
===================================================================
--- trunk/web/dojo/dojo/data/ItemFileWriteStore.js	(revision 0)
+++ trunk/web/dojo/dojo/data/ItemFileWriteStore.js	(revision 9)
@@ -0,0 +1,511 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.ItemFileWriteStore"]){
+dojo._hasResource["dojo.data.ItemFileWriteStore"]=true;
+dojo.provide("dojo.data.ItemFileWriteStore");
+dojo.require("dojo.data.ItemFileReadStore");
+dojo.declare("dojo.data.ItemFileWriteStore",dojo.data.ItemFileReadStore,{constructor:function(_1){
+this._features["dojo.data.api.Write"]=true;
+this._features["dojo.data.api.Notification"]=true;
+this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+if(!this._datatypeMap["Date"].serialize){
+this._datatypeMap["Date"].serialize=function(_2){
+return dojo.date.stamp.toISOString(_2,{zulu:true});
+};
+}
+if(_1&&(_1.referenceIntegrity===false)){
+this.referenceIntegrity=false;
+}
+this._saveInProgress=false;
+},referenceIntegrity:true,_assert:function(_3){
+if(!_3){
+throw new Error("assertion failed in ItemFileWriteStore");
+}
+},_getIdentifierAttribute:function(){
+var _4=this.getFeatures()["dojo.data.api.Identity"];
+return _4;
+},newItem:function(_5,_6){
+this._assert(!this._saveInProgress);
+if(!this._loadFinished){
+this._forceLoad();
+}
+if(typeof _5!="object"&&typeof _5!="undefined"){
+throw new Error("newItem() was passed something other than an object");
+}
+var _7=null;
+var _8=this._getIdentifierAttribute();
+if(_8===Number){
+_7=this._arrayOfAllItems.length;
+}else{
+_7=_5[_8];
+if(typeof _7==="undefined"){
+throw new Error("newItem() was not passed an identity for the new item");
+}
+if(dojo.isArray(_7)){
+throw new Error("newItem() was not passed an single-valued identity");
+}
+}
+if(this._itemsByIdentity){
+this._assert(typeof this._itemsByIdentity[_7]==="undefined");
+}
+this._assert(typeof this._pending._newItems[_7]==="undefined");
+this._assert(typeof this._pending._deletedItems[_7]==="undefined");
+var _9={};
+_9[this._storeRefPropName]=this;
+_9[this._itemNumPropName]=this._arrayOfAllItems.length;
+if(this._itemsByIdentity){
+this._itemsByIdentity[_7]=_9;
+_9[_8]=[_7];
+}
+this._arrayOfAllItems.push(_9);
+var _a=null;
+if(_6&&_6.parent&&_6.attribute){
+_a={item:_6.parent,attribute:_6.attribute,oldValue:undefined};
+var _b=this.getValues(_6.parent,_6.attribute);
+if(_b&&_b.length>0){
+var _c=_b.slice(0,_b.length);
+if(_b.length===1){
+_a.oldValue=_b[0];
+}else{
+_a.oldValue=_b.slice(0,_b.length);
+}
+_c.push(_9);
+this._setValueOrValues(_6.parent,_6.attribute,_c,false);
+_a.newValue=this.getValues(_6.parent,_6.attribute);
+}else{
+this._setValueOrValues(_6.parent,_6.attribute,_9,false);
+_a.newValue=_9;
+}
+}else{
+_9[this._rootItemPropName]=true;
+this._arrayOfTopLevelItems.push(_9);
+}
+this._pending._newItems[_7]=_9;
+for(var _d in _5){
+if(_d===this._storeRefPropName||_d===this._itemNumPropName){
+throw new Error("encountered bug in ItemFileWriteStore.newItem");
+}
+var _e=_5[_d];
+if(!dojo.isArray(_e)){
+_e=[_e];
+}
+_9[_d]=_e;
+if(this.referenceIntegrity){
+for(var i=0;i<_e.length;i++){
+var _f=_e[i];
+if(this.isItem(_f)){
+this._addReferenceToMap(_f,_9,_d);
+}
+}
+}
+}
+this.onNew(_9,_a);
+return _9;
+},_removeArrayElement:function(_10,_11){
+var _12=dojo.indexOf(_10,_11);
+if(_12!=-1){
+_10.splice(_12,1);
+return true;
+}
+return false;
+},deleteItem:function(_13){
+this._assert(!this._saveInProgress);
+this._assertIsItem(_13);
+var _14=_13[this._itemNumPropName];
+var _15=this.getIdentity(_13);
+if(this.referenceIntegrity){
+var _16=this.getAttributes(_13);
+if(_13[this._reverseRefMap]){
+_13["backup_"+this._reverseRefMap]=dojo.clone(_13[this._reverseRefMap]);
+}
+dojo.forEach(_16,function(_17){
+dojo.forEach(this.getValues(_13,_17),function(_18){
+if(this.isItem(_18)){
+if(!_13["backupRefs_"+this._reverseRefMap]){
+_13["backupRefs_"+this._reverseRefMap]=[];
+}
+_13["backupRefs_"+this._reverseRefMap].push({id:this.getIdentity(_18),attr:_17});
+this._removeReferenceFromMap(_18,_13,_17);
+}
+},this);
+},this);
+var _19=_13[this._reverseRefMap];
+if(_19){
+for(var _1a in _19){
+var _1b=null;
+if(this._itemsByIdentity){
+_1b=this._itemsByIdentity[_1a];
+}else{
+_1b=this._arrayOfAllItems[_1a];
+}
+if(_1b){
+for(var _1c in _19[_1a]){
+var _1d=this.getValues(_1b,_1c)||[];
+var _1e=dojo.filter(_1d,function(_1f){
+return !(this.isItem(_1f)&&this.getIdentity(_1f)==_15);
+},this);
+this._removeReferenceFromMap(_13,_1b,_1c);
+if(_1e.length<_1d.length){
+this._setValueOrValues(_1b,_1c,_1e,true);
+}
+}
+}
+}
+}
+}
+this._arrayOfAllItems[_14]=null;
+_13[this._storeRefPropName]=null;
+if(this._itemsByIdentity){
+delete this._itemsByIdentity[_15];
+}
+this._pending._deletedItems[_15]=_13;
+if(_13[this._rootItemPropName]){
+this._removeArrayElement(this._arrayOfTopLevelItems,_13);
+}
+this.onDelete(_13);
+return true;
+},setValue:function(_20,_21,_22){
+return this._setValueOrValues(_20,_21,_22,true);
+},setValues:function(_23,_24,_25){
+return this._setValueOrValues(_23,_24,_25,true);
+},unsetAttribute:function(_26,_27){
+return this._setValueOrValues(_26,_27,[],true);
+},_setValueOrValues:function(_28,_29,_2a,_2b){
+this._assert(!this._saveInProgress);
+this._assertIsItem(_28);
+this._assert(dojo.isString(_29));
+this._assert(typeof _2a!=="undefined");
+var _2c=this._getIdentifierAttribute();
+if(_29==_2c){
+throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier.");
+}
+var _2d=this._getValueOrValues(_28,_29);
+var _2e=this.getIdentity(_28);
+if(!this._pending._modifiedItems[_2e]){
+var _2f={};
+for(var key in _28){
+if((key===this._storeRefPropName)||(key===this._itemNumPropName)||(key===this._rootItemPropName)){
+_2f[key]=_28[key];
+}else{
+if(key===this._reverseRefMap){
+_2f[key]=dojo.clone(_28[key]);
+}else{
+_2f[key]=_28[key].slice(0,_28[key].length);
+}
+}
+}
+this._pending._modifiedItems[_2e]=_2f;
+}
+var _30=false;
+if(dojo.isArray(_2a)&&_2a.length===0){
+_30=delete _28[_29];
+_2a=undefined;
+if(this.referenceIntegrity&&_2d){
+var _31=_2d;
+if(!dojo.isArray(_31)){
+_31=[_31];
+}
+for(var i=0;i<_31.length;i++){
+var _32=_31[i];
+if(this.isItem(_32)){
+this._removeReferenceFromMap(_32,_28,_29);
+}
+}
+}
+}else{
+var _33;
+if(dojo.isArray(_2a)){
+var _34=_2a;
+_33=_2a.slice(0,_2a.length);
+}else{
+_33=[_2a];
+}
+if(this.referenceIntegrity){
+if(_2d){
+var _31=_2d;
+if(!dojo.isArray(_31)){
+_31=[_31];
+}
+var map={};
+dojo.forEach(_31,function(_35){
+if(this.isItem(_35)){
+var id=this.getIdentity(_35);
+map[id.toString()]=true;
+}
+},this);
+dojo.forEach(_33,function(_36){
+if(this.isItem(_36)){
+var id=this.getIdentity(_36);
+if(map[id.toString()]){
+delete map[id.toString()];
+}else{
+this._addReferenceToMap(_36,_28,_29);
+}
+}
+},this);
+for(var rId in map){
+var _37;
+if(this._itemsByIdentity){
+_37=this._itemsByIdentity[rId];
+}else{
+_37=this._arrayOfAllItems[rId];
+}
+this._removeReferenceFromMap(_37,_28,_29);
+}
+}else{
+for(var i=0;i<_33.length;i++){
+var _32=_33[i];
+if(this.isItem(_32)){
+this._addReferenceToMap(_32,_28,_29);
+}
+}
+}
+}
+_28[_29]=_33;
+_30=true;
+}
+if(_2b){
+this.onSet(_28,_29,_2d,_2a);
+}
+return _30;
+},_addReferenceToMap:function(_38,_39,_3a){
+var _3b=this.getIdentity(_39);
+var _3c=_38[this._reverseRefMap];
+if(!_3c){
+_3c=_38[this._reverseRefMap]={};
+}
+var _3d=_3c[_3b];
+if(!_3d){
+_3d=_3c[_3b]={};
+}
+_3d[_3a]=true;
+},_removeReferenceFromMap:function(_3e,_3f,_40){
+var _41=this.getIdentity(_3f);
+var _42=_3e[this._reverseRefMap];
+var _43;
+if(_42){
+for(_43 in _42){
+if(_43==_41){
+delete _42[_43][_40];
+if(this._isEmpty(_42[_43])){
+delete _42[_43];
+}
+}
+}
+if(this._isEmpty(_42)){
+delete _3e[this._reverseRefMap];
+}
+}
+},_dumpReferenceMap:function(){
+var i;
+for(i=0;i<this._arrayOfAllItems.length;i++){
+var _44=this._arrayOfAllItems[i];
+if(_44&&_44[this._reverseRefMap]){
+}
+}
+},_getValueOrValues:function(_45,_46){
+var _47=undefined;
+if(this.hasAttribute(_45,_46)){
+var _48=this.getValues(_45,_46);
+if(_48.length==1){
+_47=_48[0];
+}else{
+_47=_48;
+}
+}
+return _47;
+},_flatten:function(_49){
+if(this.isItem(_49)){
+var _4a=_49;
+var _4b=this.getIdentity(_4a);
+var _4c={_reference:_4b};
+return _4c;
+}else{
+if(typeof _49==="object"){
+for(var _4d in this._datatypeMap){
+var _4e=this._datatypeMap[_4d];
+if(dojo.isObject(_4e)&&!dojo.isFunction(_4e)){
+if(_49 instanceof _4e.type){
+if(!_4e.serialize){
+throw new Error("ItemFileWriteStore:  No serializer defined for type mapping: ["+_4d+"]");
+}
+return {_type:_4d,_value:_4e.serialize(_49)};
+}
+}else{
+if(_49 instanceof _4e){
+return {_type:_4d,_value:_49.toString()};
+}
+}
+}
+}
+return _49;
+}
+},_getNewFileContentString:function(){
+var _4f={};
+var _50=this._getIdentifierAttribute();
+if(_50!==Number){
+_4f.identifier=_50;
+}
+if(this._labelAttr){
+_4f.label=this._labelAttr;
+}
+_4f.items=[];
+for(var i=0;i<this._arrayOfAllItems.length;++i){
+var _51=this._arrayOfAllItems[i];
+if(_51!==null){
+var _52={};
+for(var key in _51){
+if(key!==this._storeRefPropName&&key!==this._itemNumPropName&&key!==this._reverseRefMap&&key!==this._rootItemPropName){
+var _53=key;
+var _54=this.getValues(_51,_53);
+if(_54.length==1){
+_52[_53]=this._flatten(_54[0]);
+}else{
+var _55=[];
+for(var j=0;j<_54.length;++j){
+_55.push(this._flatten(_54[j]));
+_52[_53]=_55;
+}
+}
+}
+}
+_4f.items.push(_52);
+}
+}
+var _56=true;
+return dojo.toJson(_4f,_56);
+},_isEmpty:function(_57){
+var _58=true;
+if(dojo.isObject(_57)){
+var i;
+for(i in _57){
+_58=false;
+break;
+}
+}else{
+if(dojo.isArray(_57)){
+if(_57.length>0){
+_58=false;
+}
+}
+}
+return _58;
+},save:function(_59){
+this._assert(!this._saveInProgress);
+this._saveInProgress=true;
+var _5a=this;
+var _5b=function(){
+_5a._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+_5a._saveInProgress=false;
+if(_59&&_59.onComplete){
+var _5c=_59.scope||dojo.global;
+_59.onComplete.call(_5c);
+}
+};
+var _5d=function(err){
+_5a._saveInProgress=false;
+if(_59&&_59.onError){
+var _5e=_59.scope||dojo.global;
+_59.onError.call(_5e,err);
+}
+};
+if(this._saveEverything){
+var _5f=this._getNewFileContentString();
+this._saveEverything(_5b,_5d,_5f);
+}
+if(this._saveCustom){
+this._saveCustom(_5b,_5d);
+}
+if(!this._saveEverything&&!this._saveCustom){
+_5b();
+}
+},revert:function(){
+this._assert(!this._saveInProgress);
+var _60;
+for(_60 in this._pending._modifiedItems){
+var _61=this._pending._modifiedItems[_60];
+var _62=null;
+if(this._itemsByIdentity){
+_62=this._itemsByIdentity[_60];
+}else{
+_62=this._arrayOfAllItems[_60];
+}
+_61[this._storeRefPropName]=this;
+for(key in _62){
+delete _62[key];
+}
+dojo.mixin(_62,_61);
+}
+var _63;
+for(_60 in this._pending._deletedItems){
+_63=this._pending._deletedItems[_60];
+_63[this._storeRefPropName]=this;
+var _64=_63[this._itemNumPropName];
+if(_63["backup_"+this._reverseRefMap]){
+_63[this._reverseRefMap]=_63["backup_"+this._reverseRefMap];
+delete _63["backup_"+this._reverseRefMap];
+}
+this._arrayOfAllItems[_64]=_63;
+if(this._itemsByIdentity){
+this._itemsByIdentity[_60]=_63;
+}
+if(_63[this._rootItemPropName]){
+this._arrayOfTopLevelItems.push(_63);
+}
+}
+for(_60 in this._pending._deletedItems){
+_63=this._pending._deletedItems[_60];
+if(_63["backupRefs_"+this._reverseRefMap]){
+dojo.forEach(_63["backupRefs_"+this._reverseRefMap],function(_65){
+var _66;
+if(this._itemsByIdentity){
+_66=this._itemsByIdentity[_65.id];
+}else{
+_66=this._arrayOfAllItems[_65.id];
+}
+this._addReferenceToMap(_66,_63,_65.attr);
+},this);
+delete _63["backupRefs_"+this._reverseRefMap];
+}
+}
+for(_60 in this._pending._newItems){
+var _67=this._pending._newItems[_60];
+_67[this._storeRefPropName]=null;
+this._arrayOfAllItems[_67[this._itemNumPropName]]=null;
+if(_67[this._rootItemPropName]){
+this._removeArrayElement(this._arrayOfTopLevelItems,_67);
+}
+if(this._itemsByIdentity){
+delete this._itemsByIdentity[_60];
+}
+}
+this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+return true;
+},isDirty:function(_68){
+if(_68){
+var _69=this.getIdentity(_68);
+return new Boolean(this._pending._newItems[_69]||this._pending._modifiedItems[_69]||this._pending._deletedItems[_69]).valueOf();
+}else{
+if(!this._isEmpty(this._pending._newItems)||!this._isEmpty(this._pending._modifiedItems)||!this._isEmpty(this._pending._deletedItems)){
+return true;
+}
+return false;
+}
+},onSet:function(_6a,_6b,_6c,_6d){
+},onNew:function(_6e,_6f){
+},onDelete:function(_70){
+},close:function(_71){
+if(this.clearOnClose){
+if(!this.isDirty()){
+this.inherited(arguments);
+}else{
+throw new Error("dojo.data.ItemFileWriteStore: There are unsaved changes present in the store.  Please save or revert the changes before invoking close.");
+}
+}
+}});
+}
Index: trunk/web/dojo/dojo/data/ItemFileReadStore.js
===================================================================
--- trunk/web/dojo/dojo/data/ItemFileReadStore.js	(revision 0)
+++ trunk/web/dojo/dojo/data/ItemFileReadStore.js	(revision 9)
@@ -0,0 +1,562 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){
+dojo._hasResource["dojo.data.ItemFileReadStore"]=true;
+dojo.provide("dojo.data.ItemFileReadStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.date.stamp");
+dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_1){
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=[];
+this._loadFinished=false;
+this._jsonFileUrl=_1.url;
+this._ccUrl=_1.url;
+this.url=_1.url;
+this._jsonData=_1.data;
+this.data=null;
+this._datatypeMap=_1.typeMap||{};
+if(!this._datatypeMap["Date"]){
+this._datatypeMap["Date"]={type:Date,deserialize:function(_2){
+return dojo.date.stamp.fromISOString(_2);
+}};
+}
+this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+this._itemsByIdentity=null;
+this._storeRefPropName="_S";
+this._itemNumPropName="_0";
+this._rootItemPropName="_RI";
+this._reverseRefMap="_RRM";
+this._loadInProgress=false;
+this._queuedFetches=[];
+if(_1.urlPreventCache!==undefined){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+if(_1.hierarchical!==undefined){
+this.hierarchical=_1.hierarchical?true:false;
+}
+if(_1.clearOnClose){
+this.clearOnClose=true;
+}
+if("failOk" in _1){
+this.failOk=_1.failOk?true:false;
+}
+},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(_3){
+if(!this.isItem(_3)){
+throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");
+}
+},_assertIsAttribute:function(_4){
+if(typeof _4!=="string"){
+throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");
+}
+},getValue:function(_5,_6,_7){
+var _8=this.getValues(_5,_6);
+return (_8.length>0)?_8[0]:_7;
+},getValues:function(_9,_a){
+this._assertIsItem(_9);
+this._assertIsAttribute(_a);
+return (_9[_a]||[]).slice(0);
+},getAttributes:function(_b){
+this._assertIsItem(_b);
+var _c=[];
+for(var _d in _b){
+if((_d!==this._storeRefPropName)&&(_d!==this._itemNumPropName)&&(_d!==this._rootItemPropName)&&(_d!==this._reverseRefMap)){
+_c.push(_d);
+}
+}
+return _c;
+},hasAttribute:function(_e,_f){
+this._assertIsItem(_e);
+this._assertIsAttribute(_f);
+return (_f in _e);
+},containsValue:function(_10,_11,_12){
+var _13=undefined;
+if(typeof _12==="string"){
+_13=dojo.data.util.filter.patternToRegExp(_12,false);
+}
+return this._containsValue(_10,_11,_12,_13);
+},_containsValue:function(_14,_15,_16,_17){
+return dojo.some(this.getValues(_14,_15),function(_18){
+if(_18!==null&&!dojo.isObject(_18)&&_17){
+if(_18.toString().match(_17)){
+return true;
+}
+}else{
+if(_16===_18){
+return true;
+}
+}
+});
+},isItem:function(_19){
+if(_19&&_19[this._storeRefPropName]===this){
+if(this._arrayOfAllItems[_19[this._itemNumPropName]]===_19){
+return true;
+}
+}
+return false;
+},isItemLoaded:function(_1a){
+return this.isItem(_1a);
+},loadItem:function(_1b){
+this._assertIsItem(_1b.item);
+},getFeatures:function(){
+return this._features;
+},getLabel:function(_1c){
+if(this._labelAttr&&this.isItem(_1c)){
+return this.getValue(_1c,this._labelAttr);
+}
+return undefined;
+},getLabelAttributes:function(_1d){
+if(this._labelAttr){
+return [this._labelAttr];
+}
+return null;
+},_fetchItems:function(_1e,_1f,_20){
+var _21=this,_22=function(_23,_24){
+var _25=[],i,key;
+if(_23.query){
+var _26,_27=_23.queryOptions?_23.queryOptions.ignoreCase:false;
+var _28={};
+for(key in _23.query){
+_26=_23.query[key];
+if(typeof _26==="string"){
+_28[key]=dojo.data.util.filter.patternToRegExp(_26,_27);
+}else{
+if(_26 instanceof RegExp){
+_28[key]=_26;
+}
+}
+}
+for(i=0;i<_24.length;++i){
+var _29=true;
+var _2a=_24[i];
+if(_2a===null){
+_29=false;
+}else{
+for(key in _23.query){
+_26=_23.query[key];
+if(!_21._containsValue(_2a,key,_26,_28[key])){
+_29=false;
+}
+}
+}
+if(_29){
+_25.push(_2a);
+}
+}
+_1f(_25,_23);
+}else{
+for(i=0;i<_24.length;++i){
+var _2b=_24[i];
+if(_2b!==null){
+_25.push(_2b);
+}
+}
+_1f(_25,_23);
+}
+};
+if(this._loadFinished){
+_22(_1e,this._getItemsArray(_1e.queryOptions));
+}else{
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_1e,filter:_22});
+}else{
+this._loadInProgress=true;
+var _2c={url:_21._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};
+var _2d=dojo.xhrGet(_2c);
+_2d.addCallback(function(_2e){
+try{
+_21._getItemsFromLoadedData(_2e);
+_21._loadFinished=true;
+_21._loadInProgress=false;
+_22(_1e,_21._getItemsArray(_1e.queryOptions));
+_21._handleQueuedFetches();
+}
+catch(e){
+_21._loadFinished=true;
+_21._loadInProgress=false;
+_20(e,_1e);
+}
+});
+_2d.addErrback(function(_2f){
+_21._loadInProgress=false;
+_20(_2f,_1e);
+});
+var _30=null;
+if(_1e.abort){
+_30=_1e.abort;
+}
+_1e.abort=function(){
+var df=_2d;
+if(df&&df.fired===-1){
+df.cancel();
+df=null;
+}
+if(_30){
+_30.call(_1e);
+}
+};
+}
+}else{
+if(this._jsonData){
+try{
+this._loadFinished=true;
+this._getItemsFromLoadedData(this._jsonData);
+this._jsonData=null;
+_22(_1e,this._getItemsArray(_1e.queryOptions));
+}
+catch(e){
+_20(e,_1e);
+}
+}else{
+_20(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1e);
+}
+}
+}
+},_handleQueuedFetches:function(){
+if(this._queuedFetches.length>0){
+for(var i=0;i<this._queuedFetches.length;i++){
+var _31=this._queuedFetches[i],_32=_31.args,_33=_31.filter;
+if(_33){
+_33(_32,this._getItemsArray(_32.queryOptions));
+}else{
+this.fetchItemByIdentity(_32);
+}
+}
+this._queuedFetches=[];
+}
+},_getItemsArray:function(_34){
+if(_34&&_34.deep){
+return this._arrayOfAllItems;
+}
+return this._arrayOfTopLevelItems;
+},close:function(_35){
+if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){
+if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){
+}
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=[];
+this._loadFinished=false;
+this._itemsByIdentity=null;
+this._loadInProgress=false;
+this._queuedFetches=[];
+}
+},_getItemsFromLoadedData:function(_36){
+var _37=false,_38=this;
+function _39(_3a){
+var _3b=((_3a!==null)&&(typeof _3a==="object")&&(!dojo.isArray(_3a)||_37)&&(!dojo.isFunction(_3a))&&(_3a.constructor==Object||dojo.isArray(_3a))&&(typeof _3a._reference==="undefined")&&(typeof _3a._type==="undefined")&&(typeof _3a._value==="undefined")&&_38.hierarchical);
+return _3b;
+};
+function _3c(_3d){
+_38._arrayOfAllItems.push(_3d);
+for(var _3e in _3d){
+var _3f=_3d[_3e];
+if(_3f){
+if(dojo.isArray(_3f)){
+var _40=_3f;
+for(var k=0;k<_40.length;++k){
+var _41=_40[k];
+if(_39(_41)){
+_3c(_41);
+}
+}
+}else{
+if(_39(_3f)){
+_3c(_3f);
+}
+}
+}
+}
+};
+this._labelAttr=_36.label;
+var i,_42;
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=_36.items;
+for(i=0;i<this._arrayOfTopLevelItems.length;++i){
+_42=this._arrayOfTopLevelItems[i];
+if(dojo.isArray(_42)){
+_37=true;
+}
+_3c(_42);
+_42[this._rootItemPropName]=true;
+}
+var _43={},key;
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_42=this._arrayOfAllItems[i];
+for(key in _42){
+if(key!==this._rootItemPropName){
+var _44=_42[key];
+if(_44!==null){
+if(!dojo.isArray(_44)){
+_42[key]=[_44];
+}
+}else{
+_42[key]=[null];
+}
+}
+_43[key]=key;
+}
+}
+while(_43[this._storeRefPropName]){
+this._storeRefPropName+="_";
+}
+while(_43[this._itemNumPropName]){
+this._itemNumPropName+="_";
+}
+while(_43[this._reverseRefMap]){
+this._reverseRefMap+="_";
+}
+var _45;
+var _46=_36.identifier;
+if(_46){
+this._itemsByIdentity={};
+this._features["dojo.data.api.Identity"]=_46;
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_42=this._arrayOfAllItems[i];
+_45=_42[_46];
+var _47=_45[0];
+if(!this._itemsByIdentity[_47]){
+this._itemsByIdentity[_47]=_42;
+}else{
+if(this._jsonFileUrl){
+throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: ["+this._jsonFileUrl+"] is malformed.  Items within the list have identifier: ["+_46+"].  Value collided: ["+_47+"]");
+}else{
+if(this._jsonData){
+throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: ["+_46+"].  Value collided: ["+_47+"]");
+}
+}
+}
+}
+}else{
+this._features["dojo.data.api.Identity"]=Number;
+}
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_42=this._arrayOfAllItems[i];
+_42[this._storeRefPropName]=this;
+_42[this._itemNumPropName]=i;
+}
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_42=this._arrayOfAllItems[i];
+for(key in _42){
+_45=_42[key];
+for(var j=0;j<_45.length;++j){
+_44=_45[j];
+if(_44!==null&&typeof _44=="object"){
+if(("_type" in _44)&&("_value" in _44)){
+var _48=_44._type;
+var _49=this._datatypeMap[_48];
+if(!_49){
+throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_48+"'");
+}else{
+if(dojo.isFunction(_49)){
+_45[j]=new _49(_44._value);
+}else{
+if(dojo.isFunction(_49.deserialize)){
+_45[j]=_49.deserialize(_44._value);
+}else{
+throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");
+}
+}
+}
+}
+if(_44._reference){
+var _4a=_44._reference;
+if(!dojo.isObject(_4a)){
+_45[j]=this._getItemByIdentity(_4a);
+}else{
+for(var k=0;k<this._arrayOfAllItems.length;++k){
+var _4b=this._arrayOfAllItems[k],_4c=true;
+for(var _4d in _4a){
+if(_4b[_4d]!=_4a[_4d]){
+_4c=false;
+}
+}
+if(_4c){
+_45[j]=_4b;
+}
+}
+}
+if(this.referenceIntegrity){
+var _4e=_45[j];
+if(this.isItem(_4e)){
+this._addReferenceToMap(_4e,_42,key);
+}
+}
+}else{
+if(this.isItem(_44)){
+if(this.referenceIntegrity){
+this._addReferenceToMap(_44,_42,key);
+}
+}
+}
+}
+}
+}
+}
+},_addReferenceToMap:function(_4f,_50,_51){
+},getIdentity:function(_52){
+var _53=this._features["dojo.data.api.Identity"];
+if(_53===Number){
+return _52[this._itemNumPropName];
+}else{
+var _54=_52[_53];
+if(_54){
+return _54[0];
+}
+}
+return null;
+},fetchItemByIdentity:function(_55){
+var _56,_57;
+if(!this._loadFinished){
+var _58=this;
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_55});
+}else{
+this._loadInProgress=true;
+var _59={url:_58._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};
+var _5a=dojo.xhrGet(_59);
+_5a.addCallback(function(_5b){
+var _5c=_55.scope?_55.scope:dojo.global;
+try{
+_58._getItemsFromLoadedData(_5b);
+_58._loadFinished=true;
+_58._loadInProgress=false;
+_56=_58._getItemByIdentity(_55.identity);
+if(_55.onItem){
+_55.onItem.call(_5c,_56);
+}
+_58._handleQueuedFetches();
+}
+catch(error){
+_58._loadInProgress=false;
+if(_55.onError){
+_55.onError.call(_5c,error);
+}
+}
+});
+_5a.addErrback(function(_5d){
+_58._loadInProgress=false;
+if(_55.onError){
+var _5e=_55.scope?_55.scope:dojo.global;
+_55.onError.call(_5e,_5d);
+}
+});
+}
+}else{
+if(this._jsonData){
+_58._getItemsFromLoadedData(_58._jsonData);
+_58._jsonData=null;
+_58._loadFinished=true;
+_56=_58._getItemByIdentity(_55.identity);
+if(_55.onItem){
+_57=_55.scope?_55.scope:dojo.global;
+_55.onItem.call(_57,_56);
+}
+}
+}
+}else{
+_56=this._getItemByIdentity(_55.identity);
+if(_55.onItem){
+_57=_55.scope?_55.scope:dojo.global;
+_55.onItem.call(_57,_56);
+}
+}
+},_getItemByIdentity:function(_5f){
+var _60=null;
+if(this._itemsByIdentity){
+_60=this._itemsByIdentity[_5f];
+}else{
+_60=this._arrayOfAllItems[_5f];
+}
+if(_60===undefined){
+_60=null;
+}
+return _60;
+},getIdentityAttributes:function(_61){
+var _62=this._features["dojo.data.api.Identity"];
+if(_62===Number){
+return null;
+}else{
+return [_62];
+}
+},_forceLoad:function(){
+var _63=this;
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+var _64={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};
+var _65=dojo.xhrGet(_64);
+_65.addCallback(function(_66){
+try{
+if(_63._loadInProgress!==true&&!_63._loadFinished){
+_63._getItemsFromLoadedData(_66);
+_63._loadFinished=true;
+}else{
+if(_63._loadInProgress){
+throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");
+}
+}
+}
+catch(e){
+throw e;
+}
+});
+_65.addErrback(function(_67){
+throw _67;
+});
+}else{
+if(this._jsonData){
+_63._getItemsFromLoadedData(_63._jsonData);
+_63._jsonData=null;
+_63._loadFinished=true;
+}
+}
+}});
+dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojo/_base/Color.js
===================================================================
--- trunk/web/dojo/dojo/_base/Color.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/Color.js	(revision 9)
@@ -0,0 +1,102 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.Color"]){
+dojo._hasResource["dojo._base.Color"]=true;
+dojo.provide("dojo._base.Color");
+dojo.require("dojo._base.array");
+dojo.require("dojo._base.lang");
+(function(){
+var d=dojo;
+dojo.Color=function(_1){
+if(_1){
+this.setColor(_1);
+}
+};
+dojo.Color.named={black:[0,0,0],silver:[192,192,192],gray:[128,128,128],white:[255,255,255],maroon:[128,0,0],red:[255,0,0],purple:[128,0,128],fuchsia:[255,0,255],green:[0,128,0],lime:[0,255,0],olive:[128,128,0],yellow:[255,255,0],navy:[0,0,128],blue:[0,0,255],teal:[0,128,128],aqua:[0,255,255],transparent:d.config.transparentColor||[255,255,255]};
+dojo.extend(dojo.Color,{r:255,g:255,b:255,a:1,_set:function(r,g,b,a){
+var t=this;
+t.r=r;
+t.g=g;
+t.b=b;
+t.a=a;
+},setColor:function(_2){
+if(d.isString(_2)){
+d.colorFromString(_2,this);
+}else{
+if(d.isArray(_2)){
+d.colorFromArray(_2,this);
+}else{
+this._set(_2.r,_2.g,_2.b,_2.a);
+if(!(_2 instanceof d.Color)){
+this.sanitize();
+}
+}
+}
+return this;
+},sanitize:function(){
+return this;
+},toRgb:function(){
+var t=this;
+return [t.r,t.g,t.b];
+},toRgba:function(){
+var t=this;
+return [t.r,t.g,t.b,t.a];
+},toHex:function(){
+var _3=d.map(["r","g","b"],function(x){
+var s=this[x].toString(16);
+return s.length<2?"0"+s:s;
+},this);
+return "#"+_3.join("");
+},toCss:function(_4){
+var t=this,_5=t.r+", "+t.g+", "+t.b;
+return (_4?"rgba("+_5+", "+t.a:"rgb("+_5)+")";
+},toString:function(){
+return this.toCss(true);
+}});
+dojo.blendColors=function(_6,_7,_8,_9){
+var t=_9||new d.Color();
+d.forEach(["r","g","b","a"],function(x){
+t[x]=_6[x]+(_7[x]-_6[x])*_8;
+if(x!="a"){
+t[x]=Math.round(t[x]);
+}
+});
+return t.sanitize();
+};
+dojo.colorFromRgb=function(_a,_b){
+var m=_a.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
+return m&&dojo.colorFromArray(m[1].split(/\s*,\s*/),_b);
+};
+dojo.colorFromHex=function(_c,_d){
+var t=_d||new d.Color(),_e=(_c.length==4)?4:8,_f=(1<<_e)-1;
+_c=Number("0x"+_c.substr(1));
+if(isNaN(_c)){
+return null;
+}
+d.forEach(["b","g","r"],function(x){
+var c=_c&_f;
+_c>>=_e;
+t[x]=_e==4?17*c:c;
+});
+t.a=1;
+return t;
+};
+dojo.colorFromArray=function(a,obj){
+var t=obj||new d.Color();
+t._set(Number(a[0]),Number(a[1]),Number(a[2]),Number(a[3]));
+if(isNaN(t.a)){
+t.a=1;
+}
+return t.sanitize();
+};
+dojo.colorFromString=function(str,obj){
+var a=d.Color.named[str];
+return a&&d.colorFromArray(a,obj)||d.colorFromRgb(str,obj)||d.colorFromHex(str,obj);
+};
+})();
+}
Index: trunk/web/dojo/dojo/_base/array.js
===================================================================
--- trunk/web/dojo/dojo/_base/array.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/array.js	(revision 9)
@@ -0,0 +1,79 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.array"]){
+dojo._hasResource["dojo._base.array"]=true;
+dojo.require("dojo._base.lang");
+dojo.provide("dojo._base.array");
+(function(){
+var _1=function(_2,_3,cb){
+return [(typeof _2=="string")?_2.split(""):_2,_3||dojo.global,(typeof cb=="string")?new Function("item","index","array",cb):cb];
+};
+var _4=function(_5,_6,_7,_8){
+var _9=_1(_6,_8,_7);
+_6=_9[0];
+for(var i=0,l=_6.length;i<l;++i){
+var _a=!!_9[2].call(_9[1],_6[i],i,_6);
+if(_5^_a){
+return _a;
+}
+}
+return _5;
+};
+dojo.mixin(dojo,{indexOf:function(_b,_c,_d,_e){
+var _f=1,end=_b.length||0,i=0;
+if(_e){
+i=end-1;
+_f=end=-1;
+}
+if(_d!=undefined){
+i=_d;
+}
+if((_e&&i>end)||i<end){
+for(;i!=end;i+=_f){
+if(_b[i]==_c){
+return i;
+}
+}
+}
+return -1;
+},lastIndexOf:function(_10,_11,_12){
+return dojo.indexOf(_10,_11,_12,true);
+},forEach:function(arr,_13,_14){
+if(!arr||!arr.length){
+return;
+}
+var _15=_1(arr,_14,_13);
+arr=_15[0];
+for(var i=0,l=arr.length;i<l;++i){
+_15[2].call(_15[1],arr[i],i,arr);
+}
+},every:function(arr,_16,_17){
+return _4(true,arr,_16,_17);
+},some:function(arr,_18,_19){
+return _4(false,arr,_18,_19);
+},map:function(arr,_1a,_1b){
+var _1c=_1(arr,_1b,_1a);
+arr=_1c[0];
+var _1d=(arguments[3]?(new arguments[3]()):[]);
+for(var i=0,l=arr.length;i<l;++i){
+_1d.push(_1c[2].call(_1c[1],arr[i],i,arr));
+}
+return _1d;
+},filter:function(arr,_1e,_1f){
+var _20=_1(arr,_1f,_1e);
+arr=_20[0];
+var _21=[];
+for(var i=0,l=arr.length;i<l;++i){
+if(_20[2].call(_20[1],arr[i],i,arr)){
+_21.push(arr[i]);
+}
+}
+return _21;
+}});
+})();
+}
Index: trunk/web/dojo/dojo/_base/Deferred.js
===================================================================
--- trunk/web/dojo/dojo/_base/Deferred.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/Deferred.js	(revision 9)
@@ -0,0 +1,130 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.Deferred"]){
+dojo._hasResource["dojo._base.Deferred"]=true;
+dojo.provide("dojo._base.Deferred");
+dojo.require("dojo._base.lang");
+(function(){
+var _1=function(){
+};
+var _2=Object.freeze||function(){
+};
+dojo.Deferred=function(_3){
+var _4,_5,_6,_7,_8;
+var _9=this.promise={};
+function _a(_b){
+if(_5){
+throw new Error("This deferred has already been resolved");
+}
+_4=_b;
+_5=true;
+_c();
+};
+function _c(){
+var _d;
+while(!_d&&_8){
+var _e=_8;
+_8=_8.next;
+if(_d=(_e.progress==_1)){
+_5=false;
+}
+var _f=(_6?_e.error:_e.resolved);
+if(_f){
+try{
+var _10=_f(_4);
+if(_10&&typeof _10.then==="function"){
+_10.then(dojo.hitch(_e.deferred,"resolve"),dojo.hitch(_e.deferred,"reject"));
+continue;
+}
+var _11=_d&&_10===undefined;
+_e.deferred[_11&&_6?"reject":"resolve"](_11?_4:_10);
+}
+catch(e){
+_e.deferred.reject(e);
+}
+}else{
+if(_6){
+_e.deferred.reject(_4);
+}else{
+_e.deferred.resolve(_4);
+}
+}
+}
+};
+this.resolve=this.callback=function(_12){
+this.fired=0;
+this.results=[_12,null];
+_a(_12);
+};
+this.reject=this.errback=function(_13){
+_6=true;
+this.fired=1;
+_a(_13);
+this.results=[null,_13];
+if(!_13||_13.log!==false){
+(dojo.config.deferredOnError||function(x){
+console.error(x);
+})(_13);
+}
+};
+this.progress=function(_14){
+var _15=_8;
+while(_15){
+var _16=_15.progress;
+_16&&_16(_14);
+_15=_15.next;
+}
+};
+this.addCallbacks=function(_17,_18){
+this.then(_17,_18,_1);
+return this;
+};
+this.then=_9.then=function(_19,_1a,_1b){
+var _1c=_1b==_1?this:new dojo.Deferred(_9.cancel);
+var _1d={resolved:_19,error:_1a,progress:_1b,deferred:_1c};
+if(_8){
+_7=_7.next=_1d;
+}else{
+_8=_7=_1d;
+}
+if(_5){
+_c();
+}
+return _1c.promise;
+};
+var _1e=this;
+this.cancel=_9.cancel=function(){
+if(!_5){
+var _1f=_3&&_3(_1e);
+if(!_5){
+if(!(_1f instanceof Error)){
+_1f=new Error(_1f);
+}
+_1f.log=false;
+_1e.reject(_1f);
+}
+}
+};
+_2(_9);
+};
+dojo.extend(dojo.Deferred,{addCallback:function(_20){
+return this.addCallbacks(dojo.hitch.apply(dojo,arguments));
+},addErrback:function(_21){
+return this.addCallbacks(null,dojo.hitch.apply(dojo,arguments));
+},addBoth:function(_22){
+var _23=dojo.hitch.apply(dojo,arguments);
+return this.addCallbacks(_23,_23);
+},fired:-1});
+})();
+dojo.when=function(_24,_25,_26,_27){
+if(_24&&typeof _24.then==="function"){
+return _24.then(_25,_26,_27);
+}
+return _25(_24);
+};
+}
Index: trunk/web/dojo/dojo/_base/NodeList.js
===================================================================
--- trunk/web/dojo/dojo/_base/NodeList.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/NodeList.js	(revision 9)
@@ -0,0 +1,232 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.NodeList"]){
+dojo._hasResource["dojo._base.NodeList"]=true;
+dojo.provide("dojo._base.NodeList");
+dojo.require("dojo._base.lang");
+dojo.require("dojo._base.array");
+(function(){
+var d=dojo;
+var ap=Array.prototype,_1=ap.slice,_2=ap.concat;
+var _3=function(a,_4,_5){
+if(!a.sort){
+a=_1.call(a,0);
+}
+var _6=_5||this._NodeListCtor||d._NodeListCtor;
+a.constructor=_6;
+dojo._mixin(a,_6.prototype);
+a._NodeListCtor=_6;
+return _4?a._stash(_4):a;
+};
+var _7=function(f,a,o){
+a=[0].concat(_1.call(a,0));
+o=o||d.global;
+return function(_8){
+a[0]=_8;
+return f.apply(o,a);
+};
+};
+var _9=function(f,o){
+return function(){
+this.forEach(_7(f,arguments,o));
+return this;
+};
+};
+var _a=function(f,o){
+return function(){
+return this.map(_7(f,arguments,o));
+};
+};
+var _b=function(f,o){
+return function(){
+return this.filter(_7(f,arguments,o));
+};
+};
+var _c=function(f,g,o){
+return function(){
+var a=arguments,_d=_7(f,a,o);
+if(g.call(o||d.global,a)){
+return this.map(_d);
+}
+this.forEach(_d);
+return this;
+};
+};
+var _e=function(a){
+return a.length==1&&(typeof a[0]=="string");
+};
+var _f=function(_10){
+var p=_10.parentNode;
+if(p){
+p.removeChild(_10);
+}
+};
+dojo.NodeList=function(){
+return _3(Array.apply(null,arguments));
+};
+d._NodeListCtor=d.NodeList;
+var nl=d.NodeList,nlp=nl.prototype;
+nl._wrap=nlp._wrap=_3;
+nl._adaptAsMap=_a;
+nl._adaptAsForEach=_9;
+nl._adaptAsFilter=_b;
+nl._adaptWithCondition=_c;
+d.forEach(["slice","splice"],function(_11){
+var f=ap[_11];
+nlp[_11]=function(){
+return this._wrap(f.apply(this,arguments),_11=="slice"?this:null);
+};
+});
+d.forEach(["indexOf","lastIndexOf","every","some"],function(_12){
+var f=d[_12];
+nlp[_12]=function(){
+return f.apply(d,[this].concat(_1.call(arguments,0)));
+};
+});
+d.forEach(["attr","style"],function(_13){
+nlp[_13]=_c(d[_13],_e);
+});
+d.forEach(["connect","addClass","removeClass","toggleClass","empty","removeAttr"],function(_14){
+nlp[_14]=_9(d[_14]);
+});
+dojo.extend(dojo.NodeList,{_normalize:function(_15,_16){
+var _17=_15.parse===true?true:false;
+if(typeof _15.template=="string"){
+var _18=_15.templateFunc||(dojo.string&&dojo.string.substitute);
+_15=_18?_18(_15.template,_15):_15;
+}
+var _19=(typeof _15);
+if(_19=="string"||_19=="number"){
+_15=dojo._toDom(_15,(_16&&_16.ownerDocument));
+if(_15.nodeType==11){
+_15=dojo._toArray(_15.childNodes);
+}else{
+_15=[_15];
+}
+}else{
+if(!dojo.isArrayLike(_15)){
+_15=[_15];
+}else{
+if(!dojo.isArray(_15)){
+_15=dojo._toArray(_15);
+}
+}
+}
+if(_17){
+_15._runParse=true;
+}
+return _15;
+},_cloneNode:function(_1a){
+return _1a.cloneNode(true);
+},_place:function(ary,_1b,_1c,_1d){
+if(_1b.nodeType!=1&&_1c=="only"){
+return;
+}
+var _1e=_1b,_1f;
+var _20=ary.length;
+for(var i=_20-1;i>=0;i--){
+var _21=(_1d?this._cloneNode(ary[i]):ary[i]);
+if(ary._runParse&&dojo.parser&&dojo.parser.parse){
+if(!_1f){
+_1f=_1e.ownerDocument.createElement("div");
+}
+_1f.appendChild(_21);
+dojo.parser.parse(_1f);
+_21=_1f.firstChild;
+while(_1f.firstChild){
+_1f.removeChild(_1f.firstChild);
+}
+}
+if(i==_20-1){
+dojo.place(_21,_1e,_1c);
+}else{
+_1e.parentNode.insertBefore(_21,_1e);
+}
+_1e=_21;
+}
+},_stash:function(_22){
+this._parent=_22;
+return this;
+},end:function(){
+if(this._parent){
+return this._parent;
+}else{
+return new this._NodeListCtor();
+}
+},concat:function(_23){
+var t=d.isArray(this)?this:_1.call(this,0),m=d.map(arguments,function(a){
+return a&&!d.isArray(a)&&(typeof NodeList!="undefined"&&a.constructor===NodeList||a.constructor===this._NodeListCtor)?_1.call(a,0):a;
+});
+return this._wrap(_2.apply(t,m),this);
+},map:function(_24,obj){
+return this._wrap(d.map(this,_24,obj),this);
+},forEach:function(_25,_26){
+d.forEach(this,_25,_26);
+return this;
+},coords:_a(d.coords),position:_a(d.position),place:function(_27,_28){
+var _29=d.query(_27)[0];
+return this.forEach(function(_2a){
+d.place(_2a,_29,_28);
+});
+},orphan:function(_2b){
+return (_2b?d._filterQueryResult(this,_2b):this).forEach(_f);
+},adopt:function(_2c,_2d){
+return d.query(_2c).place(this[0],_2d)._stash(this);
+},query:function(_2e){
+if(!_2e){
+return this;
+}
+var ret=this.map(function(_2f){
+return d.query(_2e,_2f).filter(function(_30){
+return _30!==undefined;
+});
+});
+return this._wrap(_2.apply([],ret),this);
+},filter:function(_31){
+var a=arguments,_32=this,_33=0;
+if(typeof _31=="string"){
+_32=d._filterQueryResult(this,a[0]);
+if(a.length==1){
+return _32._stash(this);
+}
+_33=1;
+}
+return this._wrap(d.filter(_32,a[_33],a[_33+1]),this);
+},addContent:function(_34,_35){
+_34=this._normalize(_34,this[0]);
+for(var i=0,_36;_36=this[i];i++){
+this._place(_34,_36,_35,i>0);
+}
+return this;
+},instantiate:function(_37,_38){
+var c=d.isFunction(_37)?_37:d.getObject(_37);
+_38=_38||{};
+return this.forEach(function(_39){
+new c(_38,_39);
+});
+},at:function(){
+var t=new this._NodeListCtor();
+d.forEach(arguments,function(i){
+if(i<0){
+i=this.length+i;
+}
+if(this[i]){
+t.push(this[i]);
+}
+},this);
+return t._stash(this);
+}});
+nl.events=["blur","focus","change","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit"];
+d.forEach(nl.events,function(evt){
+var _3a="on"+evt;
+nlp[_3a]=function(a,b){
+return this.connect(_3a,a,b);
+};
+});
+})();
+}
Index: trunk/web/dojo/dojo/_base/event.js
===================================================================
--- trunk/web/dojo/dojo/_base/event.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/event.js	(revision 9)
@@ -0,0 +1,359 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.event"]){
+dojo._hasResource["dojo._base.event"]=true;
+dojo.provide("dojo._base.event");
+dojo.require("dojo._base.connect");
+(function(){
+var _1=(dojo._event_listener={add:function(_2,_3,fp){
+if(!_2){
+return;
+}
+_3=_1._normalizeEventName(_3);
+fp=_1._fixCallback(_3,fp);
+var _4=_3;
+if(!dojo.isIE&&(_3=="mouseenter"||_3=="mouseleave")){
+var _5=fp;
+_3=(_3=="mouseenter")?"mouseover":"mouseout";
+fp=function(e){
+if(!dojo.isDescendant(e.relatedTarget,_2)){
+return _5.call(this,e);
+}
+};
+}
+_2.addEventListener(_3,fp,false);
+return fp;
+},remove:function(_6,_7,_8){
+if(_6){
+_7=_1._normalizeEventName(_7);
+if(!dojo.isIE&&(_7=="mouseenter"||_7=="mouseleave")){
+_7=(_7=="mouseenter")?"mouseover":"mouseout";
+}
+_6.removeEventListener(_7,_8,false);
+}
+},_normalizeEventName:function(_9){
+return _9.slice(0,2)=="on"?_9.slice(2):_9;
+},_fixCallback:function(_a,fp){
+return _a!="keypress"?fp:function(e){
+return fp.call(this,_1._fixEvent(e,this));
+};
+},_fixEvent:function(_b,_c){
+switch(_b.type){
+case "keypress":
+_1._setKeyChar(_b);
+break;
+}
+return _b;
+},_setKeyChar:function(_d){
+_d.keyChar=_d.charCode?String.fromCharCode(_d.charCode):"";
+_d.charOrCode=_d.keyChar||_d.keyCode;
+},_punctMap:{106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39}});
+dojo.fixEvent=function(_e,_f){
+return _1._fixEvent(_e,_f);
+};
+dojo.stopEvent=function(evt){
+evt.preventDefault();
+evt.stopPropagation();
+};
+var _10=dojo._listener;
+dojo._connect=function(obj,_11,_12,_13,_14){
+var _15=obj&&(obj.nodeType||obj.attachEvent||obj.addEventListener);
+var lid=_15?(_14?2:1):0,l=[dojo._listener,_1,_10][lid];
+var h=l.add(obj,_11,dojo.hitch(_12,_13));
+return [obj,_11,h,lid];
+};
+dojo._disconnect=function(obj,_16,_17,_18){
+([dojo._listener,_1,_10][_18]).remove(obj,_16,_17);
+};
+dojo.keys={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:dojo.isSafari?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145,copyKey:dojo.isMac&&!dojo.isAIR?(dojo.isSafari?91:224):17};
+var _19=dojo.isMac?"metaKey":"ctrlKey";
+dojo.isCopyKey=function(e){
+return e[_19];
+};
+if(dojo.isIE){
+dojo.mouseButtons={LEFT:1,MIDDLE:4,RIGHT:2,isButton:function(e,_1a){
+return e.button&_1a;
+},isLeft:function(e){
+return e.button&1;
+},isMiddle:function(e){
+return e.button&4;
+},isRight:function(e){
+return e.button&2;
+}};
+}else{
+dojo.mouseButtons={LEFT:0,MIDDLE:1,RIGHT:2,isButton:function(e,_1b){
+return e.button==_1b;
+},isLeft:function(e){
+return e.button==0;
+},isMiddle:function(e){
+return e.button==1;
+},isRight:function(e){
+return e.button==2;
+}};
+}
+if(dojo.isIE){
+var _1c=function(e,_1d){
+try{
+return (e.keyCode=_1d);
+}
+catch(e){
+return 0;
+}
+};
+var iel=dojo._listener;
+var _1e=(dojo._ieListenersName="_"+dojo._scopeName+"_listeners");
+if(!dojo.config._allow_leaks){
+_10=iel=dojo._ie_listener={handlers:[],add:function(_1f,_20,_21){
+_1f=_1f||dojo.global;
+var f=_1f[_20];
+if(!f||!f[_1e]){
+var d=dojo._getIeDispatcher();
+d.target=f&&(ieh.push(f)-1);
+d[_1e]=[];
+f=_1f[_20]=d;
+}
+return f[_1e].push(ieh.push(_21)-1);
+},remove:function(_22,_23,_24){
+var f=(_22||dojo.global)[_23],l=f&&f[_1e];
+if(f&&l&&_24--){
+delete ieh[l[_24]];
+delete l[_24];
+}
+}};
+var ieh=iel.handlers;
+}
+dojo.mixin(_1,{add:function(_25,_26,fp){
+if(!_25){
+return;
+}
+_26=_1._normalizeEventName(_26);
+if(_26=="onkeypress"){
+var kd=_25.onkeydown;
+if(!kd||!kd[_1e]||!kd._stealthKeydownHandle){
+var h=_1.add(_25,"onkeydown",_1._stealthKeyDown);
+kd=_25.onkeydown;
+kd._stealthKeydownHandle=h;
+kd._stealthKeydownRefs=1;
+}else{
+kd._stealthKeydownRefs++;
+}
+}
+return iel.add(_25,_26,_1._fixCallback(fp));
+},remove:function(_27,_28,_29){
+_28=_1._normalizeEventName(_28);
+iel.remove(_27,_28,_29);
+if(_28=="onkeypress"){
+var kd=_27.onkeydown;
+if(--kd._stealthKeydownRefs<=0){
+iel.remove(_27,"onkeydown",kd._stealthKeydownHandle);
+delete kd._stealthKeydownHandle;
+}
+}
+},_normalizeEventName:function(_2a){
+return _2a.slice(0,2)!="on"?"on"+_2a:_2a;
+},_nop:function(){
+},_fixEvent:function(evt,_2b){
+if(!evt){
+var w=_2b&&(_2b.ownerDocument||_2b.document||_2b).parentWindow||window;
+evt=w.event;
+}
+if(!evt){
+return (evt);
+}
+evt.target=evt.srcElement;
+evt.currentTarget=(_2b||evt.srcElement);
+evt.layerX=evt.offsetX;
+evt.layerY=evt.offsetY;
+var se=evt.srcElement,doc=(se&&se.ownerDocument)||document;
+var _2c=((dojo.isIE<6)||(doc["compatMode"]=="BackCompat"))?doc.body:doc.documentElement;
+var _2d=dojo._getIeDocumentElementOffset();
+evt.pageX=evt.clientX+dojo._fixIeBiDiScrollLeft(_2c.scrollLeft||0)-_2d.x;
+evt.pageY=evt.clientY+(_2c.scrollTop||0)-_2d.y;
+if(evt.type=="mouseover"){
+evt.relatedTarget=evt.fromElement;
+}
+if(evt.type=="mouseout"){
+evt.relatedTarget=evt.toElement;
+}
+evt.stopPropagation=_1._stopPropagation;
+evt.preventDefault=_1._preventDefault;
+return _1._fixKeys(evt);
+},_fixKeys:function(evt){
+switch(evt.type){
+case "keypress":
+var c=("charCode" in evt?evt.charCode:evt.keyCode);
+if(c==10){
+c=0;
+evt.keyCode=13;
+}else{
+if(c==13||c==27){
+c=0;
+}else{
+if(c==3){
+c=99;
+}
+}
+}
+evt.charCode=c;
+_1._setKeyChar(evt);
+break;
+}
+return evt;
+},_stealthKeyDown:function(evt){
+var kp=evt.currentTarget.onkeypress;
+if(!kp||!kp[_1e]){
+return;
+}
+var k=evt.keyCode;
+var _2e=k!=13&&k!=32&&k!=27&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);
+if(_2e||evt.ctrlKey){
+var c=_2e?0:k;
+if(evt.ctrlKey){
+if(k==3||k==13){
+return;
+}else{
+if(c>95&&c<106){
+c-=48;
+}else{
+if((!evt.shiftKey)&&(c>=65&&c<=90)){
+c+=32;
+}else{
+c=_1._punctMap[c]||c;
+}
+}
+}
+}
+var _2f=_1._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});
+kp.call(evt.currentTarget,_2f);
+evt.cancelBubble=_2f.cancelBubble;
+evt.returnValue=_2f.returnValue;
+_1c(evt,_2f.keyCode);
+}
+},_stopPropagation:function(){
+this.cancelBubble=true;
+},_preventDefault:function(){
+this.bubbledKeyCode=this.keyCode;
+if(this.ctrlKey){
+_1c(this,0);
+}
+this.returnValue=false;
+}});
+dojo.stopEvent=function(evt){
+evt=evt||window.event;
+_1._stopPropagation.call(evt);
+_1._preventDefault.call(evt);
+};
+}
+_1._synthesizeEvent=function(evt,_30){
+var _31=dojo.mixin({},evt,_30);
+_1._setKeyChar(_31);
+_31.preventDefault=function(){
+evt.preventDefault();
+};
+_31.stopPropagation=function(){
+evt.stopPropagation();
+};
+return _31;
+};
+if(dojo.isOpera){
+dojo.mixin(_1,{_fixEvent:function(evt,_32){
+switch(evt.type){
+case "keypress":
+var c=evt.which;
+if(c==3){
+c=99;
+}
+c=c<41&&!evt.shiftKey?0:c;
+if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){
+c+=32;
+}
+return _1._synthesizeEvent(evt,{charCode:c});
+}
+return evt;
+}});
+}
+if(dojo.isWebKit){
+_1._add=_1.add;
+_1._remove=_1.remove;
+dojo.mixin(_1,{add:function(_33,_34,fp){
+if(!_33){
+return;
+}
+var _35=_1._add(_33,_34,fp);
+if(_1._normalizeEventName(_34)=="keypress"){
+_35._stealthKeyDownHandle=_1._add(_33,"keydown",function(evt){
+var k=evt.keyCode;
+var _36=k!=13&&k!=32&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222);
+if(_36||evt.ctrlKey){
+var c=_36?0:k;
+if(evt.ctrlKey){
+if(k==3||k==13){
+return;
+}else{
+if(c>95&&c<106){
+c-=48;
+}else{
+if(!evt.shiftKey&&c>=65&&c<=90){
+c+=32;
+}else{
+c=_1._punctMap[c]||c;
+}
+}
+}
+}
+var _37=_1._synthesizeEvent(evt,{type:"keypress",faux:true,charCode:c});
+fp.call(evt.currentTarget,_37);
+}
+});
+}
+return _35;
+},remove:function(_38,_39,_3a){
+if(_38){
+if(_3a._stealthKeyDownHandle){
+_1._remove(_38,"keydown",_3a._stealthKeyDownHandle);
+}
+_1._remove(_38,_39,_3a);
+}
+},_fixEvent:function(evt,_3b){
+switch(evt.type){
+case "keypress":
+if(evt.faux){
+return evt;
+}
+var c=evt.charCode;
+c=c>=32?c:0;
+return _1._synthesizeEvent(evt,{charCode:c,faux:true});
+}
+return evt;
+}});
+}
+})();
+if(dojo.isIE){
+dojo._ieDispatcher=function(_3c,_3d){
+var ap=Array.prototype,h=dojo._ie_listener.handlers,c=_3c.callee,ls=c[dojo._ieListenersName],t=h[c.target];
+var r=t&&t.apply(_3d,_3c);
+var lls=[].concat(ls);
+for(var i in lls){
+var f=h[lls[i]];
+if(!(i in ap)&&f){
+f.apply(_3d,_3c);
+}
+}
+return r;
+};
+dojo._getIeDispatcher=function(){
+return new Function(dojo._scopeName+"._ieDispatcher(arguments, this)");
+};
+dojo._event_listener._fixCallback=function(fp){
+var f=dojo._event_listener._fixEvent;
+return function(e){
+return fp.call(this,f(e,this));
+};
+};
+}
+}
Index: trunk/web/dojo/dojo/_base/lang.js
===================================================================
--- trunk/web/dojo/dojo/_base/lang.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/lang.js	(revision 9)
@@ -0,0 +1,148 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.lang"]){
+dojo._hasResource["dojo._base.lang"]=true;
+dojo.provide("dojo._base.lang");
+(function(){
+var d=dojo,_1=Object.prototype.toString;
+dojo.isString=function(it){
+return (typeof it=="string"||it instanceof String);
+};
+dojo.isArray=function(it){
+return it&&(it instanceof Array||typeof it=="array");
+};
+dojo.isFunction=function(it){
+return _1.call(it)==="[object Function]";
+};
+dojo.isObject=function(it){
+return it!==undefined&&(it===null||typeof it=="object"||d.isArray(it)||d.isFunction(it));
+};
+dojo.isArrayLike=function(it){
+return it&&it!==undefined&&!d.isString(it)&&!d.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(d.isArray(it)||isFinite(it.length));
+};
+dojo.isAlien=function(it){
+return it&&!d.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));
+};
+dojo.extend=function(_2,_3){
+for(var i=1,l=arguments.length;i<l;i++){
+d._mixin(_2.prototype,arguments[i]);
+}
+return _2;
+};
+dojo._hitchArgs=function(_4,_5){
+var _6=d._toArray(arguments,2);
+var _7=d.isString(_5);
+return function(){
+var _8=d._toArray(arguments);
+var f=_7?(_4||d.global)[_5]:_5;
+return f&&f.apply(_4||this,_6.concat(_8));
+};
+};
+dojo.hitch=function(_9,_a){
+if(arguments.length>2){
+return d._hitchArgs.apply(d,arguments);
+}
+if(!_a){
+_a=_9;
+_9=null;
+}
+if(d.isString(_a)){
+_9=_9||d.global;
+if(!_9[_a]){
+throw (["dojo.hitch: scope[\"",_a,"\"] is null (scope=\"",_9,"\")"].join(""));
+}
+return function(){
+return _9[_a].apply(_9,arguments||[]);
+};
+}
+return !_9?_a:function(){
+return _a.apply(_9,arguments||[]);
+};
+};
+dojo.delegate=dojo._delegate=(function(){
+function _b(){
+};
+return function(_c,_d){
+_b.prototype=_c;
+var _e=new _b();
+_b.prototype=null;
+if(_d){
+d._mixin(_e,_d);
+}
+return _e;
+};
+})();
+var _f=function(obj,_10,_11){
+return (_11||[]).concat(Array.prototype.slice.call(obj,_10||0));
+};
+var _12=function(obj,_13,_14){
+var arr=_14||[];
+for(var x=_13||0;x<obj.length;x++){
+arr.push(obj[x]);
+}
+return arr;
+};
+dojo._toArray=d.isIE?function(obj){
+return ((obj.item)?_12:_f).apply(this,arguments);
+}:_f;
+dojo.partial=function(_15){
+var arr=[null];
+return d.hitch.apply(d,arr.concat(d._toArray(arguments)));
+};
+var _16=d._extraNames,_17=_16.length,_18={};
+dojo.clone=function(o){
+if(!o||typeof o!="object"||d.isFunction(o)){
+return o;
+}
+if(o.nodeType&&"cloneNode" in o){
+return o.cloneNode(true);
+}
+if(o instanceof Date){
+return new Date(o.getTime());
+}
+var r,i,l,s,_19;
+if(d.isArray(o)){
+r=[];
+for(i=0,l=o.length;i<l;++i){
+if(i in o){
+r.push(d.clone(o[i]));
+}
+}
+}else{
+r=o.constructor?new o.constructor():{};
+}
+for(_19 in o){
+s=o[_19];
+if(!(_19 in r)||(r[_19]!==s&&(!(_19 in _18)||_18[_19]!==s))){
+r[_19]=d.clone(s);
+}
+}
+if(_17){
+for(i=0;i<_17;++i){
+_19=_16[i];
+s=o[_19];
+if(!(_19 in r)||(r[_19]!==s&&(!(_19 in _18)||_18[_19]!==s))){
+r[_19]=s;
+}
+}
+}
+return r;
+};
+dojo.trim=String.prototype.trim?function(str){
+return str.trim();
+}:function(str){
+return str.replace(/^\s\s*/,"").replace(/\s\s*$/,"");
+};
+var _1a=/\{([^\}]+)\}/g;
+dojo.replace=function(_1b,map,_1c){
+return _1b.replace(_1c||_1a,d.isFunction(map)?map:function(_1d,k){
+return d.getObject(k,false,map);
+});
+};
+})();
+}
Index: trunk/web/dojo/dojo/_base/browser.js
===================================================================
--- trunk/web/dojo/dojo/_base/browser.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/browser.js	(revision 9)
@@ -0,0 +1,22 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.browser"]){
+dojo._hasResource["dojo._base.browser"]=true;
+dojo.provide("dojo._base.browser");
+dojo.require("dojo._base.window");
+dojo.require("dojo._base.connect");
+dojo.require("dojo._base.event");
+dojo.require("dojo._base.html");
+dojo.require("dojo._base.NodeList");
+dojo.require("dojo._base.query");
+dojo.require("dojo._base.xhr");
+dojo.require("dojo._base.fx");
+dojo.forEach(dojo.config.require,function(i){
+dojo["require"](i);
+});
+}
Index: trunk/web/dojo/dojo/_base/query-sizzle.js
===================================================================
--- trunk/web/dojo/dojo/_base/query-sizzle.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/query-sizzle.js	(revision 9)
@@ -0,0 +1,628 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.query"]){
+dojo._hasResource["dojo._base.query"]=true;
+if(typeof dojo!="undefined"){
+dojo.provide("dojo._base.query");
+dojo.require("dojo._base.NodeList");
+dojo.query=function(_1,_2,_3){
+_3=_3||dojo.NodeList;
+if(!_1){
+return new _3();
+}
+if(_1.constructor==_3){
+return _1;
+}
+if(!dojo.isString(_1)){
+return new _3(_1);
+}
+if(dojo.isString(_2)){
+_2=dojo.byId(_2);
+if(!_2){
+return new _3();
+}
+}
+return dojo.Sizzle(_1,_2,new _3());
+};
+dojo._filterQueryResult=function(_4,_5){
+return dojo.Sizzle.filter(_5,_4);
+};
+}
+(function(ns){
+var _6=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,_7=0,_8=Object.prototype.toString;
+var _9=function(_a,_b,_c,_d){
+_c=_c||[];
+_b=_b||document;
+if(_b.nodeType!==1&&_b.nodeType!==9){
+return [];
+}
+if(!_a||typeof _a!=="string"){
+return _c;
+}
+var _e=[],m,_f,_10,_11,_12,_13,_14=true;
+_6.lastIndex=0;
+while((m=_6.exec(_a))!==null){
+_e.push(m[1]);
+if(m[2]){
+_13=RegExp.rightContext;
+break;
+}
+}
+if(_e.length>1&&_15.match.POS.exec(_a)){
+if(_e.length===2&&_15.relative[_e[0]]){
+var _16="",_17;
+while((_17=_15.match.POS.exec(_a))){
+_16+=_17[0];
+_a=_a.replace(_15.match.POS,"");
+}
+_f=_9.filter(_16,_9(_a,_b));
+}else{
+_f=_15.relative[_e[0]]?[_b]:_9(_e.shift(),_b);
+while(_e.length){
+var _18=[];
+_a=_e.shift();
+if(_15.relative[_a]){
+_a+=_e.shift();
+}
+for(var i=0,l=_f.length;i<l;i++){
+_9(_a,_f[i],_18);
+}
+_f=_18;
+}
+}
+}else{
+var ret=_d?{expr:_e.pop(),set:_19(_d)}:_9.find(_e.pop(),_e.length===1&&_b.parentNode?_b.parentNode:_b);
+_f=_9.filter(ret.expr,ret.set);
+if(_e.length>0){
+_10=_19(_f);
+}else{
+_14=false;
+}
+while(_e.length){
+var cur=_e.pop(),pop=cur;
+if(!_15.relative[cur]){
+cur="";
+}else{
+pop=_e.pop();
+}
+if(pop==null){
+pop=_b;
+}
+_15.relative[cur](_10,pop);
+}
+}
+if(!_10){
+_10=_f;
+}
+if(!_10){
+throw "Syntax error, unrecognized expression: "+(cur||_a);
+}
+if(_8.call(_10)==="[object Array]"){
+if(!_14){
+_c.push.apply(_c,_10);
+}else{
+if(_b.nodeType===1){
+for(var i=0;_10[i]!=null;i++){
+if(_10[i]&&(_10[i]===true||_10[i].nodeType===1&&_1a(_b,_10[i]))){
+_c.push(_f[i]);
+}
+}
+}else{
+for(var i=0;_10[i]!=null;i++){
+if(_10[i]&&_10[i].nodeType===1){
+_c.push(_f[i]);
+}
+}
+}
+}
+}else{
+_19(_10,_c);
+}
+if(_13){
+_9(_13,_b,_c,_d);
+}
+return _c;
+};
+_9.matches=function(_1b,set){
+return _9(_1b,null,null,set);
+};
+_9.find=function(_1c,_1d){
+var set,_1e;
+if(!_1c){
+return [];
+}
+for(var i=0,l=_15.order.length;i<l;i++){
+var _1f=_15.order[i],_1e;
+if((_1e=_15.match[_1f].exec(_1c))){
+var _20=RegExp.leftContext;
+if(_20.substr(_20.length-1)!=="\\"){
+_1e[1]=(_1e[1]||"").replace(/\\/g,"");
+set=_15.find[_1f](_1e,_1d);
+if(set!=null){
+_1c=_1c.replace(_15.match[_1f],"");
+break;
+}
+}
+}
+}
+if(!set){
+set=_1d.getElementsByTagName("*");
+}
+return {set:set,expr:_1c};
+};
+_9.filter=function(_21,set,_22,not){
+var old=_21,_23=[],_24=set,_25,_26;
+while(_21&&set.length){
+for(var _27 in _15.filter){
+if((_25=_15.match[_27].exec(_21))!=null){
+var _28=_15.filter[_27],_29=null,_2a=0,_2b,_2c;
+_26=false;
+if(_24==_23){
+_23=[];
+}
+if(_15.preFilter[_27]){
+_25=_15.preFilter[_27](_25,_24,_22,_23,not);
+if(!_25){
+_26=_2b=true;
+}else{
+if(_25[0]===true){
+_29=[];
+var _2d=null,_2e;
+for(var i=0;(_2e=_24[i])!==undefined;i++){
+if(_2e&&_2d!==_2e){
+_29.push(_2e);
+_2d=_2e;
+}
+}
+}
+}
+}
+if(_25){
+for(var i=0;(_2c=_24[i])!==undefined;i++){
+if(_2c){
+if(_29&&_2c!=_29[_2a]){
+_2a++;
+}
+_2b=_28(_2c,_25,_2a,_29);
+var _2f=not^!!_2b;
+if(_22&&_2b!=null){
+if(_2f){
+_26=true;
+}else{
+_24[i]=false;
+}
+}else{
+if(_2f){
+_23.push(_2c);
+_26=true;
+}
+}
+}
+}
+}
+if(_2b!==undefined){
+if(!_22){
+_24=_23;
+}
+_21=_21.replace(_15.match[_27],"");
+if(!_26){
+return [];
+}
+break;
+}
+}
+}
+_21=_21.replace(/\s*,\s*/,"");
+if(_21==old){
+if(_26==null){
+throw "Syntax error, unrecognized expression: "+_21;
+}else{
+break;
+}
+}
+old=_21;
+}
+return _24;
+};
+var _15=_9.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u0128-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u0128-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u0128-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[((?:[\w\u0128-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\]/,TAG:/^((?:[\w\u0128-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child\(?(even|odd|[\dn+-]*)\)?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)\(?(\d*)\)?(?:[^-]|$)/,PSEUDO:/:((?:[\w\u0128-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},relative:{"+":function(_30,_31){
+for(var i=0,l=_30.length;i<l;i++){
+var _32=_30[i];
+if(_32){
+var cur=_32.previousSibling;
+while(cur&&cur.nodeType!==1){
+cur=cur.previousSibling;
+}
+_30[i]=typeof _31==="string"?cur||false:cur===_31;
+}
+}
+if(typeof _31==="string"){
+_9.filter(_31,_30,true);
+}
+},">":function(_33,_34){
+if(typeof _34==="string"&&!/\W/.test(_34)){
+_34=_34.toUpperCase();
+for(var i=0,l=_33.length;i<l;i++){
+var _35=_33[i];
+if(_35){
+var _36=_35.parentNode;
+_33[i]=_36.nodeName===_34?_36:false;
+}
+}
+}else{
+for(var i=0,l=_33.length;i<l;i++){
+var _35=_33[i];
+if(_35){
+_33[i]=typeof _34==="string"?_35.parentNode:_35.parentNode===_34;
+}
+}
+if(typeof _34==="string"){
+_9.filter(_34,_33,true);
+}
+}
+},"":function(_37,_38){
+var _39="done"+(_7++),_3a=_3b;
+if(!_38.match(/\W/)){
+var _3c=_38=_38.toUpperCase();
+_3a=_3d;
+}
+_3a("parentNode",_38,_39,_37,_3c);
+},"~":function(_3e,_3f){
+var _40="done"+(_7++),_41=_3b;
+if(typeof _3f==="string"&&!_3f.match(/\W/)){
+var _42=_3f=_3f.toUpperCase();
+_41=_3d;
+}
+_41("previousSibling",_3f,_40,_3e,_42);
+}},find:{ID:function(_43,_44){
+if(_44.getElementById){
+var m=_44.getElementById(_43[1]);
+return m?[m]:[];
+}
+},NAME:function(_45,_46){
+return _46.getElementsByName?_46.getElementsByName(_45[1]):null;
+},TAG:function(_47,_48){
+return _48.getElementsByTagName(_47[1]);
+}},preFilter:{CLASS:function(_49,_4a,_4b,_4c,not){
+_49=" "+_49[1].replace(/\\/g,"")+" ";
+for(var i=0;_4a[i];i++){
+if(not^(" "+_4a[i].className+" ").indexOf(_49)>=0){
+if(!_4b){
+_4c.push(_4a[i]);
+}
+}else{
+if(_4b){
+_4a[i]=false;
+}
+}
+}
+return false;
+},ID:function(_4d){
+return _4d[1];
+},TAG:function(_4e){
+return _4e[1].toUpperCase();
+},CHILD:function(_4f){
+if(_4f[1]=="nth"){
+var _50=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(_4f[2]=="even"&&"2n"||_4f[2]=="odd"&&"2n+1"||!/\D/.test(_4f[2])&&"0n+"+_4f[2]||_4f[2]);
+_4f[2]=(_50[1]+(_50[2]||1))-0;
+_4f[3]=_50[3]-0;
+}
+_4f[0]="done"+(_7++);
+return _4f;
+},ATTR:function(_51){
+var _52=_51[1];
+if(_15.attrMap[_52]){
+_51[1]=_15.attrMap[_52];
+}
+if(_51[2]==="~="){
+_51[4]=" "+_51[4]+" ";
+}
+return _51;
+},PSEUDO:function(_53,_54,_55,_56,not){
+if(_53[1]==="not"){
+if(_53[3].match(_6).length>1){
+_53[3]=_9(_53[3],null,null,_54);
+}else{
+var ret=_9.filter(_53[3],_54,_55,true^not);
+if(!_55){
+_56.push.apply(_56,ret);
+}
+return false;
+}
+}
+return _53;
+},POS:function(_57){
+_57.unshift(true);
+return _57;
+}},filters:{enabled:function(_58){
+return _58.disabled===false&&_58.type!=="hidden";
+},disabled:function(_59){
+return _59.disabled===true;
+},checked:function(_5a){
+return _5a.checked===true;
+},selected:function(_5b){
+_5b.parentNode.selectedIndex;
+return _5b.selected===true;
+},parent:function(_5c){
+return !!_5c.firstChild;
+},empty:function(_5d){
+return !_5d.firstChild;
+},has:function(_5e,i,_5f){
+return !!_9(_5f[3],_5e).length;
+},header:function(_60){
+return /h\d/i.test(_60.nodeName);
+},text:function(_61){
+return "text"===_61.type;
+},radio:function(_62){
+return "radio"===_62.type;
+},checkbox:function(_63){
+return "checkbox"===_63.type;
+},file:function(_64){
+return "file"===_64.type;
+},password:function(_65){
+return "password"===_65.type;
+},submit:function(_66){
+return "submit"===_66.type;
+},image:function(_67){
+return "image"===_67.type;
+},reset:function(_68){
+return "reset"===_68.type;
+},button:function(_69){
+return "button"===_69.type||_69.nodeName.toUpperCase()==="BUTTON";
+},input:function(_6a){
+return /input|select|textarea|button/i.test(_6a.nodeName);
+}},setFilters:{first:function(_6b,i){
+return i===0;
+},last:function(_6c,i,_6d,_6e){
+return i===_6e.length-1;
+},even:function(_6f,i){
+return i%2===0;
+},odd:function(_70,i){
+return i%2===1;
+},lt:function(_71,i,_72){
+return i<_72[3]-0;
+},gt:function(_73,i,_74){
+return i>_74[3]-0;
+},nth:function(_75,i,_76){
+return _76[3]-0==i;
+},eq:function(_77,i,_78){
+return _78[3]-0==i;
+}},filter:{CHILD:function(_79,_7a){
+var _7b=_7a[1],_7c=_79.parentNode;
+var _7d=_7a[0];
+if(_7c&&!_7c[_7d]){
+var _7e=1;
+for(var _7f=_7c.firstChild;_7f;_7f=_7f.nextSibling){
+if(_7f.nodeType==1){
+_7f.nodeIndex=_7e++;
+}
+}
+_7c[_7d]=_7e-1;
+}
+if(_7b=="first"){
+return _79.nodeIndex==1;
+}else{
+if(_7b=="last"){
+return _79.nodeIndex==_7c[_7d];
+}else{
+if(_7b=="only"){
+return _7c[_7d]==1;
+}else{
+if(_7b=="nth"){
+var add=false,_80=_7a[2],_81=_7a[3];
+if(_80==1&&_81==0){
+return true;
+}
+if(_80==0){
+if(_79.nodeIndex==_81){
+add=true;
+}
+}else{
+if((_79.nodeIndex-_81)%_80==0&&(_79.nodeIndex-_81)/_80>=0){
+add=true;
+}
+}
+return add;
+}
+}
+}
+}
+},PSEUDO:function(_82,_83,i,_84){
+var _85=_83[1],_86=_15.filters[_85];
+if(_86){
+return _86(_82,i,_83,_84);
+}else{
+if(_85==="contains"){
+return (_82.textContent||_82.innerText||"").indexOf(_83[3])>=0;
+}else{
+if(_85==="not"){
+var not=_83[3];
+for(var i=0,l=not.length;i<l;i++){
+if(not[i]===_82){
+return false;
+}
+}
+return true;
+}
+}
+}
+},ID:function(_87,_88){
+return _87.nodeType===1&&_87.getAttribute("id")===_88;
+},TAG:function(_89,_8a){
+return (_8a==="*"&&_89.nodeType===1)||_89.nodeName===_8a;
+},CLASS:function(_8b,_8c){
+return _8c.test(_8b.className);
+},ATTR:function(_8d,_8e){
+var _8f=_8d[_8e[1]]||_8d.getAttribute(_8e[1]),_90=_8f+"",_91=_8e[2],_92=_8e[4];
+return _8f==null?false:_91==="="?_90===_92:_91==="*="?_90.indexOf(_92)>=0:_91==="~="?(" "+_90+" ").indexOf(_92)>=0:!_8e[4]?_8f:_91==="!="?_90!=_92:_91==="^="?_90.indexOf(_92)===0:_91==="$="?_90.substr(_90.length-_92.length)===_92:_91==="|="?_90===_92||_90.substr(0,_92.length+1)===_92+"-":false;
+},POS:function(_93,_94,i,_95){
+var _96=_94[2],_97=_15.setFilters[_96];
+if(_97){
+return _97(_93,i,_94,_95);
+}
+}}};
+for(var _98 in _15.match){
+_15.match[_98]=RegExp(_15.match[_98].source+/(?![^\[]*\])(?![^\(]*\))/.source);
+}
+var _19=function(_99,_9a){
+_99=Array.prototype.slice.call(_99);
+if(_9a){
+_9a.push.apply(_9a,_99);
+return _9a;
+}
+return _99;
+};
+try{
+Array.prototype.slice.call(document.documentElement.childNodes);
+}
+catch(e){
+_19=function(_9b,_9c){
+var ret=_9c||[];
+if(_8.call(_9b)==="[object Array]"){
+Array.prototype.push.apply(ret,_9b);
+}else{
+if(typeof _9b.length==="number"){
+for(var i=0,l=_9b.length;i<l;i++){
+ret.push(_9b[i]);
+}
+}else{
+for(var i=0;_9b[i];i++){
+ret.push(_9b[i]);
+}
+}
+}
+return ret;
+};
+}
+(function(){
+var _9d=document.createElement("form"),id="script"+(new Date).getTime();
+_9d.innerHTML="<input name='"+id+"'/>";
+var _9e=document.documentElement;
+_9e.insertBefore(_9d,_9e.firstChild);
+if(!!document.getElementById(id)){
+_15.find.ID=function(_9f,_a0){
+if(_a0.getElementById){
+var m=_a0.getElementById(_9f[1]);
+return m?m.id===_9f[1]||m.getAttributeNode&&m.getAttributeNode("id").nodeValue===_9f[1]?[m]:undefined:[];
+}
+};
+_15.filter.ID=function(_a1,_a2){
+var _a3=_a1.getAttributeNode&&_a1.getAttributeNode("id");
+return _a1.nodeType===1&&_a3&&_a3.nodeValue===_a2;
+};
+}
+_9e.removeChild(_9d);
+})();
+(function(){
+var div=document.createElement("div");
+div.appendChild(document.createComment(""));
+if(div.getElementsByTagName("*").length>0){
+_15.find.TAG=function(_a4,_a5){
+var _a6=_a5.getElementsByTagName(_a4[1]);
+if(_a4[1]==="*"){
+var tmp=[];
+for(var i=0;_a6[i];i++){
+if(_a6[i].nodeType===1){
+tmp.push(_a6[i]);
+}
+}
+_a6=tmp;
+}
+return _a6;
+};
+}
+})();
+if(document.querySelectorAll){
+(function(){
+var _a7=_9;
+_9=function(_a8,_a9,_aa,_ab){
+_a9=_a9||document;
+if(!_ab&&_a9.nodeType===9){
+try{
+return _19(_a9.querySelectorAll(_a8),_aa);
+}
+catch(e){
+}
+}
+return _a7(_a8,_a9,_aa,_ab);
+};
+_9.find=_a7.find;
+_9.filter=_a7.filter;
+_9.selectors=_a7.selectors;
+_9.matches=_a7.matches;
+})();
+}
+if(document.documentElement.getElementsByClassName){
+_15.order.splice(1,0,"CLASS");
+_15.find.CLASS=function(_ac,_ad){
+return _ad.getElementsByClassName(_ac[1]);
+};
+}
+function _3d(dir,cur,_ae,_af,_b0){
+for(var i=0,l=_af.length;i<l;i++){
+var _b1=_af[i];
+if(_b1){
+_b1=_b1[dir];
+var _b2=false;
+while(_b1&&_b1.nodeType){
+var _b3=_b1[_ae];
+if(_b3){
+_b2=_af[_b3];
+break;
+}
+if(_b1.nodeType===1){
+_b1[_ae]=i;
+}
+if(_b1.nodeName===cur){
+_b2=_b1;
+break;
+}
+_b1=_b1[dir];
+}
+_af[i]=_b2;
+}
+}
+};
+function _3b(dir,cur,_b4,_b5,_b6){
+for(var i=0,l=_b5.length;i<l;i++){
+var _b7=_b5[i];
+if(_b7){
+_b7=_b7[dir];
+var _b8=false;
+while(_b7&&_b7.nodeType){
+if(_b7[_b4]){
+_b8=_b5[_b7[_b4]];
+break;
+}
+if(_b7.nodeType===1){
+_b7[_b4]=i;
+if(typeof cur!=="string"){
+if(_b7===cur){
+_b8=true;
+break;
+}
+}else{
+if(_9.filter(cur,[_b7]).length>0){
+_b8=_b7;
+break;
+}
+}
+}
+_b7=_b7[dir];
+}
+_b5[i]=_b8;
+}
+}
+};
+var _1a=document.compareDocumentPosition?function(a,b){
+return a.compareDocumentPosition(b)&16;
+}:function(a,b){
+return a!==b&&(a.contains?a.contains(b):true);
+};
+(ns||window).Sizzle=_9;
+})(typeof dojo=="undefined"?null:dojo);
+}
Index: trunk/web/dojo/dojo/_base/connect.js
===================================================================
--- trunk/web/dojo/dojo/_base/connect.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/connect.js	(revision 9)
@@ -0,0 +1,85 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.connect"]){
+dojo._hasResource["dojo._base.connect"]=true;
+dojo.provide("dojo._base.connect");
+dojo.require("dojo._base.lang");
+dojo._listener={getDispatcher:function(){
+return function(){
+var ap=Array.prototype,c=arguments.callee,ls=c._listeners,t=c.target;
+var r=t&&t.apply(this,arguments);
+var i,_1;
+_1=[].concat(ls);
+for(i in _1){
+if(!(i in ap)){
+_1[i].apply(this,arguments);
+}
+}
+return r;
+};
+},add:function(_2,_3,_4){
+_2=_2||dojo.global;
+var f=_2[_3];
+if(!f||!f._listeners){
+var d=dojo._listener.getDispatcher();
+d.target=f;
+d._listeners=[];
+f=_2[_3]=d;
+}
+return f._listeners.push(_4);
+},remove:function(_5,_6,_7){
+var f=(_5||dojo.global)[_6];
+if(f&&f._listeners&&_7--){
+delete f._listeners[_7];
+}
+}};
+dojo.connect=function(_8,_9,_a,_b,_c){
+var a=arguments,_d=[],i=0;
+_d.push(dojo.isString(a[0])?null:a[i++],a[i++]);
+var a1=a[i+1];
+_d.push(dojo.isString(a1)||dojo.isFunction(a1)?a[i++]:null,a[i++]);
+for(var l=a.length;i<l;i++){
+_d.push(a[i]);
+}
+return dojo._connect.apply(this,_d);
+};
+dojo._connect=function(_e,_f,_10,_11){
+var l=dojo._listener,h=l.add(_e,_f,dojo.hitch(_10,_11));
+return [_e,_f,h,l];
+};
+dojo.disconnect=function(_12){
+if(_12&&_12[0]!==undefined){
+dojo._disconnect.apply(this,_12);
+delete _12[0];
+}
+};
+dojo._disconnect=function(obj,_13,_14,_15){
+_15.remove(obj,_13,_14);
+};
+dojo._topics={};
+dojo.subscribe=function(_16,_17,_18){
+return [_16,dojo._listener.add(dojo._topics,_16,dojo.hitch(_17,_18))];
+};
+dojo.unsubscribe=function(_19){
+if(_19){
+dojo._listener.remove(dojo._topics,_19[0],_19[1]);
+}
+};
+dojo.publish=function(_1a,_1b){
+var f=dojo._topics[_1a];
+if(f){
+f.apply(this,_1b||[]);
+}
+};
+dojo.connectPublisher=function(_1c,obj,_1d){
+var pf=function(){
+dojo.publish(_1c,arguments);
+};
+return _1d?dojo.connect(obj,_1d,pf):dojo.connect(obj,pf);
+};
+}
Index: trunk/web/dojo/dojo/_base/_loader/hostenv_rhino.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/hostenv_rhino.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/hostenv_rhino.js	(revision 9)
@@ -0,0 +1,153 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(dojo.config["baseUrl"]){
+dojo.baseUrl=dojo.config["baseUrl"];
+}else{
+dojo.baseUrl="./";
+}
+dojo.locale=dojo.locale||String(java.util.Locale.getDefault().toString().replace("_","-").toLowerCase());
+dojo._name="rhino";
+dojo.isRhino=true;
+if(typeof print=="function"){
+console.debug=print;
+}
+if(!("byId" in dojo)){
+dojo.byId=function(id,_1){
+if(id&&(typeof id=="string"||id instanceof String)){
+if(!_1){
+_1=document;
+}
+return _1.getElementById(id);
+}
+return id;
+};
+}
+dojo._isLocalUrl=function(_2){
+var _3=(new java.io.File(_2)).exists();
+if(!_3){
+var _4;
+try{
+_4=(new java.net.URL(_2)).openStream();
+_4.close();
+}
+finally{
+if(_4&&_4.close){
+_4.close();
+}
+}
+}
+return _3;
+};
+dojo._loadUri=function(_5,cb){
+try{
+var _6;
+try{
+_6=dojo._isLocalUrl(_5);
+}
+catch(e){
+return false;
+}
+if(cb){
+var _7=(_6?readText:readUri)(_5,"UTF-8");
+if(!eval("'‏'").length){
+_7=String(_7).replace(/[\u200E\u200F\u202A-\u202E]/g,function(_8){
+return "\\u"+_8.charCodeAt(0).toString(16);
+});
+}
+cb(eval("("+_7+")"));
+}else{
+load(_5);
+}
+return true;
+}
+catch(e){
+return false;
+}
+};
+dojo.exit=function(_9){
+quit(_9);
+};
+function readText(_a,_b){
+_b=_b||"utf-8";
+var jf=new java.io.File(_a);
+var is=new java.io.FileInputStream(jf);
+return dj_readInputStream(is,_b);
+};
+function readUri(_c,_d){
+var _e=(new java.net.URL(_c)).openConnection();
+_d=_d||_e.getContentEncoding()||"utf-8";
+var is=_e.getInputStream();
+return dj_readInputStream(is,_d);
+};
+function dj_readInputStream(is,_f){
+var _10=new java.io.BufferedReader(new java.io.InputStreamReader(is,_f));
+try{
+var sb=new java.lang.StringBuffer();
+var _11="";
+while((_11=_10.readLine())!==null){
+sb.append(_11);
+sb.append(java.lang.System.getProperty("line.separator"));
+}
+return sb.toString();
+}
+finally{
+_10.close();
+}
+};
+dojo._getText=function(uri,_12){
+try{
+var _13=dojo._isLocalUrl(uri);
+var _14=(_13?readText:readUri)(uri,"UTF-8");
+if(_14!==null){
+_14+="";
+}
+return _14;
+}
+catch(e){
+if(_12){
+return null;
+}else{
+throw e;
+}
+}
+};
+dojo.doc=typeof document!="undefined"?document:null;
+dojo.body=function(){
+return document.body;
+};
+if(typeof setTimeout=="undefined"||typeof clearTimeout=="undefined"){
+dojo._timeouts=[];
+clearTimeout=function(idx){
+if(!dojo._timeouts[idx]){
+return;
+}
+dojo._timeouts[idx].stop();
+};
+setTimeout=function(_15,_16){
+var def={sleepTime:_16,hasSlept:false,run:function(){
+if(!this.hasSlept){
+this.hasSlept=true;
+java.lang.Thread.currentThread().sleep(this.sleepTime);
+}
+try{
+_15();
+}
+catch(e){
+}
+}};
+var _17=new java.lang.Runnable(def);
+var _18=new java.lang.Thread(_17);
+_18.start();
+return dojo._timeouts.push(_18)-1;
+};
+}
+if(dojo.config["modulePaths"]){
+for(var param in dojo.config["modulePaths"]){
+dojo.registerModulePath(param,dojo.config["modulePaths"][param]);
+}
+}
Index: trunk/web/dojo/dojo/_base/_loader/loader.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/loader.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/loader.js	(revision 9)
@@ -0,0 +1,300 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.foo"]){
+dojo._hasResource["dojo.foo"]=true;
+(function(){
+var d=dojo;
+d.mixin(d,{_loadedModules:{},_inFlightCount:0,_hasResource:{},_modulePrefixes:{dojo:{name:"dojo",value:"."},doh:{name:"doh",value:"../util/doh"},tests:{name:"tests",value:"tests"}},_moduleHasPrefix:function(_1){
+var mp=d._modulePrefixes;
+return !!(mp[_1]&&mp[_1].value);
+},_getModulePrefix:function(_2){
+var mp=d._modulePrefixes;
+if(d._moduleHasPrefix(_2)){
+return mp[_2].value;
+}
+return _2;
+},_loadedUrls:[],_postLoad:false,_loaders:[],_unloaders:[],_loadNotifying:false});
+dojo._loadPath=function(_3,_4,cb){
+var _5=((_3.charAt(0)=="/"||_3.match(/^\w+:/))?"":d.baseUrl)+_3;
+try{
+return !_4?d._loadUri(_5,cb):d._loadUriAndCheck(_5,_4,cb);
+}
+catch(e){
+console.error(e);
+return false;
+}
+};
+dojo._loadUri=function(_6,cb){
+if(d._loadedUrls[_6]){
+return true;
+}
+d._inFlightCount++;
+var _7=d._getText(_6,true);
+if(_7){
+d._loadedUrls[_6]=true;
+d._loadedUrls.push(_6);
+if(cb){
+_7="("+_7+")";
+}else{
+_7=d._scopePrefix+_7+d._scopeSuffix;
+}
+if(!d.isIE){
+_7+="\r\n//@ sourceURL="+_6;
+}
+var _8=d["eval"](_7);
+if(cb){
+cb(_8);
+}
+}
+if(--d._inFlightCount==0&&d._postLoad&&d._loaders.length){
+setTimeout(function(){
+if(d._inFlightCount==0){
+d._callLoaded();
+}
+},0);
+}
+return !!_7;
+};
+dojo._loadUriAndCheck=function(_9,_a,cb){
+var ok=false;
+try{
+ok=d._loadUri(_9,cb);
+}
+catch(e){
+console.error("failed loading "+_9+" with error: "+e);
+}
+return !!(ok&&d._loadedModules[_a]);
+};
+dojo.loaded=function(){
+d._loadNotifying=true;
+d._postLoad=true;
+var _b=d._loaders;
+d._loaders=[];
+for(var x=0;x<_b.length;x++){
+_b[x]();
+}
+d._loadNotifying=false;
+if(d._postLoad&&d._inFlightCount==0&&_b.length){
+d._callLoaded();
+}
+};
+dojo.unloaded=function(){
+var _c=d._unloaders;
+while(_c.length){
+(_c.pop())();
+}
+};
+d._onto=function(_d,_e,fn){
+if(!fn){
+_d.push(_e);
+}else{
+if(fn){
+var _f=(typeof fn=="string")?_e[fn]:fn;
+_d.push(function(){
+_f.call(_e);
+});
+}
+}
+};
+dojo.ready=dojo.addOnLoad=function(obj,_10){
+d._onto(d._loaders,obj,_10);
+if(d._postLoad&&d._inFlightCount==0&&!d._loadNotifying){
+d._callLoaded();
+}
+};
+var dca=d.config.addOnLoad;
+if(dca){
+d.addOnLoad[(dca instanceof Array?"apply":"call")](d,dca);
+}
+dojo._modulesLoaded=function(){
+if(d._postLoad){
+return;
+}
+if(d._inFlightCount>0){
+console.warn("files still in flight!");
+return;
+}
+d._callLoaded();
+};
+dojo._callLoaded=function(){
+if(typeof setTimeout=="object"||(d.config.useXDomain&&d.isOpera)){
+setTimeout(d.isAIR?function(){
+d.loaded();
+}:d._scopeName+".loaded();",0);
+}else{
+d.loaded();
+}
+};
+dojo._getModuleSymbols=function(_11){
+var _12=_11.split(".");
+for(var i=_12.length;i>0;i--){
+var _13=_12.slice(0,i).join(".");
+if(i==1&&!d._moduleHasPrefix(_13)){
+_12[0]="../"+_12[0];
+}else{
+var _14=d._getModulePrefix(_13);
+if(_14!=_13){
+_12.splice(0,i,_14);
+break;
+}
+}
+}
+return _12;
+};
+dojo._global_omit_module_check=false;
+dojo.loadInit=function(_15){
+_15();
+};
+dojo._loadModule=dojo.require=function(_16,_17){
+_17=d._global_omit_module_check||_17;
+var _18=d._loadedModules[_16];
+if(_18){
+return _18;
+}
+var _19=d._getModuleSymbols(_16).join("/")+".js";
+var _1a=!_17?_16:null;
+var ok=d._loadPath(_19,_1a);
+if(!ok&&!_17){
+throw new Error("Could not load '"+_16+"'; last tried '"+_19+"'");
+}
+if(!_17&&!d._isXDomain){
+_18=d._loadedModules[_16];
+if(!_18){
+throw new Error("symbol '"+_16+"' is not defined after loading '"+_19+"'");
+}
+}
+return _18;
+};
+dojo.provide=function(_1b){
+_1b=_1b+"";
+return (d._loadedModules[_1b]=d.getObject(_1b,true));
+};
+dojo.platformRequire=function(_1c){
+var _1d=_1c.common||[];
+var _1e=_1d.concat(_1c[d._name]||_1c["default"]||[]);
+for(var x=0;x<_1e.length;x++){
+var _1f=_1e[x];
+if(_1f.constructor==Array){
+d._loadModule.apply(d,_1f);
+}else{
+d._loadModule(_1f);
+}
+}
+};
+dojo.requireIf=function(_20,_21){
+if(_20===true){
+var _22=[];
+for(var i=1;i<arguments.length;i++){
+_22.push(arguments[i]);
+}
+d.require.apply(d,_22);
+}
+};
+dojo.requireAfterIf=d.requireIf;
+dojo.registerModulePath=function(_23,_24){
+d._modulePrefixes[_23]={name:_23,value:_24};
+};
+dojo.requireLocalization=function(_25,_26,_27,_28){
+d.require("dojo.i18n");
+d.i18n._requireLocalization.apply(d.hostenv,arguments);
+};
+var ore=new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),ire=new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");
+dojo._Url=function(){
+var n=null,_29=arguments,uri=[_29[0]];
+for(var i=1;i<_29.length;i++){
+if(!_29[i]){
+continue;
+}
+var _2a=new d._Url(_29[i]+""),_2b=new d._Url(uri[0]+"");
+if(_2a.path==""&&!_2a.scheme&&!_2a.authority&&!_2a.query){
+if(_2a.fragment!=n){
+_2b.fragment=_2a.fragment;
+}
+_2a=_2b;
+}else{
+if(!_2a.scheme){
+_2a.scheme=_2b.scheme;
+if(!_2a.authority){
+_2a.authority=_2b.authority;
+if(_2a.path.charAt(0)!="/"){
+var _2c=_2b.path.substring(0,_2b.path.lastIndexOf("/")+1)+_2a.path;
+var _2d=_2c.split("/");
+for(var j=0;j<_2d.length;j++){
+if(_2d[j]=="."){
+if(j==_2d.length-1){
+_2d[j]="";
+}else{
+_2d.splice(j,1);
+j--;
+}
+}else{
+if(j>0&&!(j==1&&_2d[0]=="")&&_2d[j]==".."&&_2d[j-1]!=".."){
+if(j==(_2d.length-1)){
+_2d.splice(j,1);
+_2d[j-1]="";
+}else{
+_2d.splice(j-1,2);
+j-=2;
+}
+}
+}
+}
+_2a.path=_2d.join("/");
+}
+}
+}
+}
+uri=[];
+if(_2a.scheme){
+uri.push(_2a.scheme,":");
+}
+if(_2a.authority){
+uri.push("//",_2a.authority);
+}
+uri.push(_2a.path);
+if(_2a.query){
+uri.push("?",_2a.query);
+}
+if(_2a.fragment){
+uri.push("#",_2a.fragment);
+}
+}
+this.uri=uri.join("");
+var r=this.uri.match(ore);
+this.scheme=r[2]||(r[1]?"":n);
+this.authority=r[4]||(r[3]?"":n);
+this.path=r[5];
+this.query=r[7]||(r[6]?"":n);
+this.fragment=r[9]||(r[8]?"":n);
+if(this.authority!=n){
+r=this.authority.match(ire);
+this.user=r[3]||n;
+this.password=r[4]||n;
+this.host=r[6]||r[7];
+this.port=r[9]||n;
+}
+};
+dojo._Url.prototype.toString=function(){
+return this.uri;
+};
+dojo.moduleUrl=function(_2e,url){
+var loc=d._getModuleSymbols(_2e).join("/");
+if(!loc){
+return null;
+}
+if(loc.lastIndexOf("/")!=loc.length-1){
+loc+="/";
+}
+var _2f=loc.indexOf(":");
+if(loc.charAt(0)!="/"&&(_2f==-1||_2f>loc.indexOf("/"))){
+loc=d.baseUrl+loc;
+}
+return new d._Url(loc,url);
+};
+})();
+}
Index: trunk/web/dojo/dojo/_base/_loader/hostenv_browser.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/hostenv_browser.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/hostenv_browser.js	(revision 9)
@@ -0,0 +1,244 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(typeof window!="undefined"){
+dojo.isBrowser=true;
+dojo._name="browser";
+(function(){
+var d=dojo;
+if(document&&document.getElementsByTagName){
+var _1=document.getElementsByTagName("script");
+var _2=/dojo(\.xd)?\.js(\W|$)/i;
+for(var i=0;i<_1.length;i++){
+var _3=_1[i].getAttribute("src");
+if(!_3){
+continue;
+}
+var m=_3.match(_2);
+if(m){
+if(!d.config.baseUrl){
+d.config.baseUrl=_3.substring(0,m.index);
+}
+var _4=_1[i].getAttribute("djConfig");
+if(_4){
+var _5=eval("({ "+_4+" })");
+for(var x in _5){
+dojo.config[x]=_5[x];
+}
+}
+break;
+}
+}
+}
+d.baseUrl=d.config.baseUrl;
+var n=navigator;
+var _6=n.userAgent,_7=n.appVersion,tv=parseFloat(_7);
+if(_6.indexOf("Opera")>=0){
+d.isOpera=tv;
+}
+if(_6.indexOf("AdobeAIR")>=0){
+d.isAIR=1;
+}
+d.isKhtml=(_7.indexOf("Konqueror")>=0)?tv:0;
+d.isWebKit=parseFloat(_6.split("WebKit/")[1])||undefined;
+d.isChrome=parseFloat(_6.split("Chrome/")[1])||undefined;
+d.isMac=_7.indexOf("Macintosh")>=0;
+var _8=Math.max(_7.indexOf("WebKit"),_7.indexOf("Safari"),0);
+if(_8&&!dojo.isChrome){
+d.isSafari=parseFloat(_7.split("Version/")[1]);
+if(!d.isSafari||parseFloat(_7.substr(_8+7))<=419.3){
+d.isSafari=2;
+}
+}
+if(_6.indexOf("Gecko")>=0&&!d.isKhtml&&!d.isWebKit){
+d.isMozilla=d.isMoz=tv;
+}
+if(d.isMoz){
+d.isFF=parseFloat(_6.split("Firefox/")[1]||_6.split("Minefield/")[1])||undefined;
+}
+if(document.all&&!d.isOpera){
+d.isIE=parseFloat(_7.split("MSIE ")[1])||undefined;
+var _9=document.documentMode;
+if(_9&&_9!=5&&Math.floor(d.isIE)!=_9){
+d.isIE=_9;
+}
+}
+if(dojo.isIE&&window.location.protocol==="file:"){
+dojo.config.ieForceActiveXXhr=true;
+}
+d.isQuirks=document.compatMode=="BackCompat";
+d.locale=dojo.config.locale||(d.isIE?n.userLanguage:n.language).toLowerCase();
+d._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
+d._xhrObj=function(){
+var _a,_b;
+if(!dojo.isIE||!dojo.config.ieForceActiveXXhr){
+try{
+_a=new XMLHttpRequest();
+}
+catch(e){
+}
+}
+if(!_a){
+for(var i=0;i<3;++i){
+var _c=d._XMLHTTP_PROGIDS[i];
+try{
+_a=new ActiveXObject(_c);
+}
+catch(e){
+_b=e;
+}
+if(_a){
+d._XMLHTTP_PROGIDS=[_c];
+break;
+}
+}
+}
+if(!_a){
+throw new Error("XMLHTTP not available: "+_b);
+}
+return _a;
+};
+d._isDocumentOk=function(_d){
+var _e=_d.status||0,lp=location.protocol;
+return (_e>=200&&_e<300)||_e==304||_e==1223||(!_e&&(lp=="file:"||lp=="chrome:"||lp=="chrome-extension:"||lp=="app:"));
+};
+var _f=window.location+"";
+var _10=document.getElementsByTagName("base");
+var _11=(_10&&_10.length>0);
+d._getText=function(uri,_12){
+var _13=d._xhrObj();
+if(!_11&&dojo._Url){
+uri=(new dojo._Url(_f,uri)).toString();
+}
+if(d.config.cacheBust){
+uri+="";
+uri+=(uri.indexOf("?")==-1?"?":"&")+String(d.config.cacheBust).replace(/\W+/g,"");
+}
+_13.open("GET",uri,false);
+try{
+_13.send(null);
+if(!d._isDocumentOk(_13)){
+var err=Error("Unable to load "+uri+" status:"+_13.status);
+err.status=_13.status;
+err.responseText=_13.responseText;
+throw err;
+}
+}
+catch(e){
+if(_12){
+return null;
+}
+throw e;
+}
+return _13.responseText;
+};
+var _14=window;
+var _15=function(_16,fp){
+var _17=_14.attachEvent||_14.addEventListener;
+_16=_14.attachEvent?_16:_16.substring(2);
+_17(_16,function(){
+fp.apply(_14,arguments);
+},false);
+};
+d._windowUnloaders=[];
+d.windowUnloaded=function(){
+var mll=d._windowUnloaders;
+while(mll.length){
+(mll.pop())();
+}
+d=null;
+};
+var _18=0;
+d.addOnWindowUnload=function(obj,_19){
+d._onto(d._windowUnloaders,obj,_19);
+if(!_18){
+_18=1;
+_15("onunload",d.windowUnloaded);
+}
+};
+var _1a=0;
+d.addOnUnload=function(obj,_1b){
+d._onto(d._unloaders,obj,_1b);
+if(!_1a){
+_1a=1;
+_15("onbeforeunload",dojo.unloaded);
+}
+};
+})();
+dojo._initFired=false;
+dojo._loadInit=function(e){
+if(dojo._scrollIntervalId){
+clearInterval(dojo._scrollIntervalId);
+dojo._scrollIntervalId=0;
+}
+if(!dojo._initFired){
+dojo._initFired=true;
+if(!dojo.config.afterOnLoad&&window.detachEvent){
+window.detachEvent("onload",dojo._loadInit);
+}
+if(dojo._inFlightCount==0){
+dojo._modulesLoaded();
+}
+}
+};
+if(!dojo.config.afterOnLoad){
+if(document.addEventListener){
+document.addEventListener("DOMContentLoaded",dojo._loadInit,false);
+window.addEventListener("load",dojo._loadInit,false);
+}else{
+if(window.attachEvent){
+window.attachEvent("onload",dojo._loadInit);
+if(!dojo.config.skipIeDomLoaded&&self===self.top){
+dojo._scrollIntervalId=setInterval(function(){
+try{
+if(document.body){
+document.documentElement.doScroll("left");
+dojo._loadInit();
+}
+}
+catch(e){
+}
+},30);
+}
+}
+}
+}
+if(dojo.isIE){
+try{
+(function(){
+document.namespaces.add("v","urn:schemas-microsoft-com:vml");
+var _1c=["*","group","roundrect","oval","shape","rect","imagedata","path","textpath","text"],i=0,l=1,s=document.createStyleSheet();
+if(dojo.isIE>=8){
+i=1;
+l=_1c.length;
+}
+for(;i<l;++i){
+s.addRule("v\\:"+_1c[i],"behavior:url(#default#VML); display:inline-block");
+}
+})();
+}
+catch(e){
+}
+}
+}
+(function(){
+var mp=dojo.config["modulePaths"];
+if(mp){
+for(var _1d in mp){
+dojo.registerModulePath(_1d,mp[_1d]);
+}
+}
+})();
+if(dojo.config.isDebug){
+dojo.require("dojo._firebug.firebug");
+}
+if(dojo.config.debugAtAllCosts){
+dojo.config.useXDomain=true;
+dojo.require("dojo._base._loader.loader_xd");
+dojo.require("dojo._base._loader.loader_debug");
+dojo.require("dojo.i18n");
+}
Index: trunk/web/dojo/dojo/_base/_loader/loader_debug.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/loader_debug.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/loader_debug.js	(revision 9)
@@ -0,0 +1,59 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base._loader.loader_debug"]){
+dojo._hasResource["dojo._base._loader.loader_debug"]=true;
+dojo.provide("dojo._base._loader.loader_debug");
+dojo.nonDebugProvide=dojo.provide;
+dojo.provide=function(_1){
+var _2=dojo["_xdDebugQueue"];
+if(_2&&_2.length>0&&_1==_2["currentResourceName"]){
+if(dojo.isAIR){
+window.setTimeout(function(){
+dojo._xdDebugFileLoaded(_1);
+},1);
+}else{
+window.setTimeout(dojo._scopeName+"._xdDebugFileLoaded('"+_1+"')",1);
+}
+}
+return dojo.nonDebugProvide.apply(dojo,arguments);
+};
+dojo._xdDebugFileLoaded=function(_3){
+if(!dojo._xdDebugScopeChecked){
+if(dojo._scopeName!="dojo"){
+window.dojo=window[dojo.config.scopeMap[0][1]];
+window.dijit=window[dojo.config.scopeMap[1][1]];
+window.dojox=window[dojo.config.scopeMap[2][1]];
+}
+dojo._xdDebugScopeChecked=true;
+}
+var _4=dojo._xdDebugQueue;
+if(_3&&_3==_4.currentResourceName){
+_4.shift();
+}
+if(_4.length==0){
+dojo._xdWatchInFlight();
+}
+if(_4.length==0){
+_4.currentResourceName=null;
+for(var _5 in dojo._xdInFlight){
+if(dojo._xdInFlight[_5]===true){
+return;
+}
+}
+dojo._xdNotifyLoaded();
+}else{
+if(_3==_4.currentResourceName){
+_4.currentResourceName=_4[0].resourceName;
+var _6=document.createElement("script");
+_6.type="text/javascript";
+_6.src=_4[0].resourcePath;
+document.getElementsByTagName("head")[0].appendChild(_6);
+}
+}
+};
+}
Index: trunk/web/dojo/dojo/_base/_loader/bootstrap.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/bootstrap.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/bootstrap.js	(revision 9)
@@ -0,0 +1,120 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+(function(){
+if(typeof this["loadFirebugConsole"]=="function"){
+this["loadFirebugConsole"]();
+}else{
+this.console=this.console||{};
+var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];
+var i=0,tn;
+while((tn=cn[i++])){
+if(!console[tn]){
+(function(){
+var _1=tn+"";
+console[_1]=("log" in console)?function(){
+var a=Array.apply({},arguments);
+a.unshift(_1+":");
+console["log"](a.join(" "));
+}:function(){
+};
+console[_1]._fake=true;
+})();
+}
+}
+}
+if(typeof dojo=="undefined"){
+dojo={_scopeName:"dojo",_scopePrefix:"",_scopePrefixArgs:"",_scopeSuffix:"",_scopeMap:{},_scopeMapRev:{}};
+}
+var d=dojo;
+if(typeof dijit=="undefined"){
+dijit={_scopeName:"dijit"};
+}
+if(typeof dojox=="undefined"){
+dojox={_scopeName:"dojox"};
+}
+if(!d._scopeArgs){
+d._scopeArgs=[dojo,dijit,dojox];
+}
+d.global=this;
+d.config={isDebug:false,debugAtAllCosts:false};
+if(typeof djConfig!="undefined"){
+for(var _2 in djConfig){
+d.config[_2]=djConfig[_2];
+}
+}
+dojo.locale=d.config.locale;
+var _3="$Rev: 22487 $".match(/\d+/);
+dojo.version={major:1,minor:5,patch:0,flag:"",revision:_3?+_3[0]:NaN,toString:function(){
+with(d.version){
+return major+"."+minor+"."+patch+flag+" ("+revision+")";
+}
+}};
+if(typeof OpenAjax!="undefined"){
+OpenAjax.hub.registerLibrary(dojo._scopeName,"http://dojotoolkit.org",d.version.toString());
+}
+var _4,_5,_6={};
+for(var i in {toString:1}){
+_4=[];
+break;
+}
+dojo._extraNames=_4=_4||["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"];
+_5=_4.length;
+dojo._mixin=function(_7,_8){
+var _9,s,i;
+for(_9 in _8){
+s=_8[_9];
+if(!(_9 in _7)||(_7[_9]!==s&&(!(_9 in _6)||_6[_9]!==s))){
+_7[_9]=s;
+}
+}
+if(_5&&_8){
+for(i=0;i<_5;++i){
+_9=_4[i];
+s=_8[_9];
+if(!(_9 in _7)||(_7[_9]!==s&&(!(_9 in _6)||_6[_9]!==s))){
+_7[_9]=s;
+}
+}
+}
+return _7;
+};
+dojo.mixin=function(_a,_b){
+if(!_a){
+_a={};
+}
+for(var i=1,l=arguments.length;i<l;i++){
+d._mixin(_a,arguments[i]);
+}
+return _a;
+};
+dojo._getProp=function(_c,_d,_e){
+var _f=_e||d.global;
+for(var i=0,p;_f&&(p=_c[i]);i++){
+if(i==0&&d._scopeMap[p]){
+p=d._scopeMap[p];
+}
+_f=(p in _f?_f[p]:(_d?_f[p]={}:undefined));
+}
+return _f;
+};
+dojo.setObject=function(_10,_11,_12){
+var _13=_10.split("."),p=_13.pop(),obj=d._getProp(_13,true,_12);
+return obj&&p?(obj[p]=_11):undefined;
+};
+dojo.getObject=function(_14,_15,_16){
+return d._getProp(_14.split("."),_15,_16);
+};
+dojo.exists=function(_17,obj){
+return !!d.getObject(_17,false,obj);
+};
+dojo["eval"]=function(_18){
+return d.global.eval?d.global.eval(_18):eval(_18);
+};
+d.deprecated=d.experimental=function(){
+};
+})();
Index: trunk/web/dojo/dojo/_base/_loader/hostenv_spidermonkey.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/hostenv_spidermonkey.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/hostenv_spidermonkey.js	(revision 9)
@@ -0,0 +1,50 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(dojo.config["baseUrl"]){
+dojo.baseUrl=dojo.config["baseUrl"];
+}else{
+dojo.baseUrl="./";
+}
+dojo._name="spidermonkey";
+dojo.isSpidermonkey=true;
+dojo.exit=function(_1){
+quit(_1);
+};
+if(typeof print=="function"){
+console.debug=print;
+}
+if(typeof line2pc=="undefined"){
+throw new Error("attempt to use SpiderMonkey host environment when no 'line2pc' global");
+}
+dojo._spidermonkeyCurrentFile=function(_2){
+var s="";
+try{
+throw Error("whatever");
+}
+catch(e){
+s=e.stack;
+}
+var _3=s.match(/[^@]*\.js/gi);
+if(!_3){
+throw Error("could not parse stack string: '"+s+"'");
+}
+var _4=(typeof _2!="undefined"&&_2)?_3[_2+1]:_3[_3.length-1];
+if(!_4){
+throw Error("could not find file name in stack string '"+s+"'");
+}
+return _4;
+};
+dojo._loadUri=function(_5){
+var ok=load(_5);
+return 1;
+};
+if(dojo.config["modulePaths"]){
+for(var param in dojo.config["modulePaths"]){
+dojo.registerModulePath(param,dojo.config["modulePaths"][param]);
+}
+}
Index: trunk/web/dojo/dojo/_base/_loader/hostenv_ff_ext.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/hostenv_ff_ext.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/hostenv_ff_ext.js	(revision 9)
@@ -0,0 +1,175 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(typeof window!="undefined"){
+dojo.isBrowser=true;
+dojo._name="browser";
+(function(){
+var d=dojo;
+d.baseUrl=d.config.baseUrl;
+var n=navigator;
+var _1=n.userAgent;
+var _2=n.appVersion;
+var tv=parseFloat(_2);
+d.isMozilla=d.isMoz=tv;
+if(d.isMoz){
+d.isFF=parseFloat(_1.split("Firefox/")[1])||undefined;
+}
+d.isQuirks=document.compatMode=="BackCompat";
+d.locale=dojo.config.locale||n.language.toLowerCase();
+d._xhrObj=function(){
+return new XMLHttpRequest();
+};
+var _3=d._loadUri;
+d._loadUri=function(_4,cb){
+var _5=["file:","chrome:","resource:"].some(function(_6){
+return String(_4).indexOf(_6)==0;
+});
+if(_5){
+var l=Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);
+var _7=l.loadSubScript(_4,d.global);
+if(cb){
+cb(_7);
+}
+return true;
+}else{
+return _3.apply(d,arguments);
+}
+};
+d._isDocumentOk=function(_8){
+var _9=_8.status||0;
+return (_9>=200&&_9<300)||_9==304||_9==1223||(!_9&&(location.protocol=="file:"||location.protocol=="chrome:"));
+};
+var _a=false;
+d._getText=function(_b,_c){
+var _d=d._xhrObj();
+if(!_a&&dojo._Url){
+_b=(new dojo._Url(_b)).toString();
+}
+if(d.config.cacheBust){
+_b+="";
+_b+=(_b.indexOf("?")==-1?"?":"&")+String(d.config.cacheBust).replace(/\W+/g,"");
+}
+var _e=["file:","chrome:","resource:"].some(function(_f){
+return String(_b).indexOf(_f)==0;
+});
+if(_e){
+var _10=Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
+var _11=Components.classes["@mozilla.org/scriptableinputstream;1"].getService(Components.interfaces.nsIScriptableInputStream);
+var _12=_10.newChannel(_b,null,null);
+var _13=_12.open();
+_11.init(_13);
+var str=_11.read(_13.available());
+_11.close();
+_13.close();
+return str;
+}else{
+_d.open("GET",_b,false);
+try{
+_d.send(null);
+if(!d._isDocumentOk(_d)){
+var err=Error("Unable to load "+_b+" status:"+_d.status);
+err.status=_d.status;
+err.responseText=_d.responseText;
+throw err;
+}
+}
+catch(e){
+if(_c){
+return null;
+}
+throw e;
+}
+return _d.responseText;
+}
+};
+d._windowUnloaders=[];
+d.windowUnloaded=function(){
+var mll=d._windowUnloaders;
+while(mll.length){
+(mll.pop())();
+}
+};
+d.addOnWindowUnload=function(obj,_14){
+d._onto(d._windowUnloaders,obj,_14);
+};
+var _15=[];
+var _16=null;
+dojo._defaultContext=[window,document];
+dojo.pushContext=function(g,d){
+var old=[dojo.global,dojo.doc];
+_15.push(old);
+var n;
+if(!g&&!d){
+n=dojo._defaultContext;
+}else{
+n=[g,d];
+if(!d&&dojo.isString(g)){
+var t=document.getElementById(g);
+if(t.contentDocument){
+n=[t.contentWindow,t.contentDocument];
+}
+}
+}
+_16=n;
+dojo.setContext.apply(dojo,n);
+return old;
+};
+dojo.popContext=function(){
+var oc=_16;
+if(!_15.length){
+return oc;
+}
+dojo.setContext.apply(dojo,_15.pop());
+return oc;
+};
+dojo._inContext=function(g,d,f){
+var a=dojo._toArray(arguments);
+f=a.pop();
+if(a.length==1){
+d=null;
+}
+dojo.pushContext(g,d);
+var r=f();
+dojo.popContext();
+return r;
+};
+})();
+dojo._initFired=false;
+dojo._loadInit=function(e){
+dojo._initFired=true;
+var _17=(e&&e.type)?e.type.toLowerCase():"load";
+if(arguments.callee.initialized||(_17!="domcontentloaded"&&_17!="load")){
+return;
+}
+arguments.callee.initialized=true;
+if(dojo._inFlightCount==0){
+dojo._modulesLoaded();
+}
+};
+if(!dojo.config.afterOnLoad){
+window.addEventListener("DOMContentLoaded",function(e){
+dojo._loadInit(e);
+},false);
+}
+}
+(function(){
+var mp=dojo.config["modulePaths"];
+if(mp){
+for(var _18 in mp){
+dojo.registerModulePath(_18,mp[_18]);
+}
+}
+})();
+if(dojo.config.isDebug){
+console.log=function(m){
+var s=Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
+s.logStringMessage(m);
+};
+console.debug=function(){
+};
+}
Index: trunk/web/dojo/dojo/_base/_loader/loader_xd.js
===================================================================
--- trunk/web/dojo/dojo/_base/_loader/loader_xd.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/_loader/loader_xd.js	(revision 9)
@@ -0,0 +1,465 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base._loader.loader_xd"]){
+dojo._hasResource["dojo._base._loader.loader_xd"]=true;
+dojo.provide("dojo._base._loader.loader_xd");
+dojo._xdReset=function(){
+dojo._isXDomain=dojo.config.useXDomain||false;
+dojo._xdClearInterval();
+dojo._xdInFlight={};
+dojo._xdOrderedReqs=[];
+dojo._xdDepMap={};
+dojo._xdContents=[];
+dojo._xdDefList=[];
+};
+dojo._xdClearInterval=function(){
+if(dojo._xdTimer){
+clearInterval(dojo._xdTimer);
+dojo._xdTimer=0;
+}
+};
+dojo._xdReset();
+dojo._xdCreateResource=function(_1,_2,_3){
+var _4=_1.replace(/(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg,"");
+var _5=[];
+var _6=/dojo.(require|requireIf|provide|requireAfterIf|platformRequire|requireLocalization)\s*\(([\w\W]*?)\)/mg;
+var _7;
+while((_7=_6.exec(_4))!=null){
+if(_7[1]=="requireLocalization"){
+eval(_7[0]);
+}else{
+_5.push("\""+_7[1]+"\", "+_7[2]);
+}
+}
+var _8=[];
+_8.push(dojo._scopeName+"._xdResourceLoaded(function("+dojo._scopePrefixArgs+"){\n");
+var _9=dojo._xdExtractLoadInits(_1);
+if(_9){
+_1=_9[0];
+for(var i=1;i<_9.length;i++){
+_8.push(_9[i]+";\n");
+}
+}
+_8.push("return {");
+if(_5.length>0){
+_8.push("depends: [");
+for(i=0;i<_5.length;i++){
+if(i>0){
+_8.push(",\n");
+}
+_8.push("["+_5[i]+"]");
+}
+_8.push("],");
+}
+_8.push("\ndefineResource: function("+dojo._scopePrefixArgs+"){");
+if(!dojo.config["debugAtAllCosts"]||_2=="dojo._base._loader.loader_debug"){
+_8.push(_1);
+}
+_8.push("\n}, resourceName: '"+_2+"', resourcePath: '"+_3+"'};});");
+return _8.join("");
+};
+dojo._xdExtractLoadInits=function(_a){
+var _b=/dojo.loadInit\s*\(/g;
+_b.lastIndex=0;
+var _c=/[\(\)]/g;
+_c.lastIndex=0;
+var _d=[];
+var _e;
+while((_e=_b.exec(_a))){
+_c.lastIndex=_b.lastIndex;
+var _f=1;
+var _10;
+while((_10=_c.exec(_a))){
+if(_10[0]==")"){
+_f-=1;
+}else{
+_f+=1;
+}
+if(_f==0){
+break;
+}
+}
+if(_f!=0){
+throw "unmatched paren around character "+_c.lastIndex+" in: "+_a;
+}
+var _11=_b.lastIndex-_e[0].length;
+_d.push(_a.substring(_11,_c.lastIndex));
+var _12=_c.lastIndex-_11;
+_a=_a.substring(0,_11)+_a.substring(_c.lastIndex,_a.length);
+_b.lastIndex=_c.lastIndex-_12;
+_b.lastIndex=_c.lastIndex;
+}
+if(_d.length>0){
+_d.unshift(_a);
+}
+return (_d.length?_d:null);
+};
+dojo._xdIsXDomainPath=function(_13){
+var _14=_13.indexOf(":");
+var _15=_13.indexOf("/");
+if(_14>0&&_14<_15){
+return true;
+}else{
+var url=dojo.baseUrl;
+_14=url.indexOf(":");
+_15=url.indexOf("/");
+if(_14>0&&_14<_15&&(!location.host||url.indexOf("http://"+location.host)!=0)){
+return true;
+}
+}
+return false;
+};
+dojo._loadPath=function(_16,_17,cb){
+var _18=dojo._xdIsXDomainPath(_16);
+dojo._isXDomain|=_18;
+var uri=((_16.charAt(0)=="/"||_16.match(/^\w+:/))?"":dojo.baseUrl)+_16;
+try{
+return ((!_17||dojo._isXDomain)?dojo._loadUri(uri,cb,_18,_17):dojo._loadUriAndCheck(uri,_17,cb));
+}
+catch(e){
+console.error(e);
+return false;
+}
+};
+dojo._xdCharSet="utf-8";
+dojo._loadUri=function(uri,cb,_19,_1a){
+if(dojo._loadedUrls[uri]){
+return 1;
+}
+if(dojo._isXDomain&&_1a&&_1a!="dojo.i18n"){
+dojo._xdOrderedReqs.push(_1a);
+if(_19||uri.indexOf("/nls/")==-1){
+dojo._xdInFlight[_1a]=true;
+dojo._inFlightCount++;
+}
+if(!dojo._xdTimer){
+if(dojo.isAIR){
+dojo._xdTimer=setInterval(function(){
+dojo._xdWatchInFlight();
+},100);
+}else{
+dojo._xdTimer=setInterval(dojo._scopeName+"._xdWatchInFlight();",100);
+}
+}
+dojo._xdStartTime=(new Date()).getTime();
+}
+if(_19){
+var _1b=uri.lastIndexOf(".");
+if(_1b<=0){
+_1b=uri.length-1;
+}
+var _1c=uri.substring(0,_1b)+".xd";
+if(_1b!=uri.length-1){
+_1c+=uri.substring(_1b,uri.length);
+}
+if(dojo.isAIR){
+_1c=_1c.replace("app:/","/");
+}
+var _1d=document.createElement("script");
+_1d.type="text/javascript";
+if(dojo._xdCharSet){
+_1d.charset=dojo._xdCharSet;
+}
+_1d.src=_1c;
+if(!dojo.headElement){
+dojo._headElement=document.getElementsByTagName("head")[0];
+if(!dojo._headElement){
+dojo._headElement=document.getElementsByTagName("html")[0];
+}
+}
+dojo._headElement.appendChild(_1d);
+}else{
+var _1e=dojo._getText(uri,null,true);
+if(_1e==null){
+return 0;
+}
+if(dojo._isXDomain&&uri.indexOf("/nls/")==-1&&_1a!="dojo.i18n"){
+var res=dojo._xdCreateResource(_1e,_1a,uri);
+dojo.eval(res);
+}else{
+if(cb){
+_1e="("+_1e+")";
+}else{
+_1e=dojo._scopePrefix+_1e+dojo._scopeSuffix;
+}
+var _1f=dojo["eval"](_1e+"\r\n//@ sourceURL="+uri);
+if(cb){
+cb(_1f);
+}
+}
+}
+dojo._loadedUrls[uri]=true;
+dojo._loadedUrls.push(uri);
+return true;
+};
+dojo._xdResourceLoaded=function(res){
+res=res.apply(dojo.global,dojo._scopeArgs);
+var _20=res.depends;
+var _21=null;
+var _22=null;
+var _23=[];
+if(_20&&_20.length>0){
+var dep=null;
+var _24=0;
+var _25=false;
+for(var i=0;i<_20.length;i++){
+dep=_20[i];
+if(dep[0]=="provide"){
+_23.push(dep[1]);
+}else{
+if(!_21){
+_21=[];
+}
+if(!_22){
+_22=[];
+}
+var _26=dojo._xdUnpackDependency(dep);
+if(_26.requires){
+_21=_21.concat(_26.requires);
+}
+if(_26.requiresAfter){
+_22=_22.concat(_26.requiresAfter);
+}
+}
+var _27=dep[0];
+var _28=_27.split(".");
+if(_28.length==2){
+dojo[_28[0]][_28[1]].apply(dojo[_28[0]],dep.slice(1));
+}else{
+dojo[_27].apply(dojo,dep.slice(1));
+}
+}
+if(_23.length==1&&_23[0]=="dojo._base._loader.loader_debug"){
+res.defineResource(dojo);
+}else{
+var _29=dojo._xdContents.push({content:res.defineResource,resourceName:res["resourceName"],resourcePath:res["resourcePath"],isDefined:false})-1;
+for(i=0;i<_23.length;i++){
+dojo._xdDepMap[_23[i]]={requires:_21,requiresAfter:_22,contentIndex:_29};
+}
+}
+for(i=0;i<_23.length;i++){
+dojo._xdInFlight[_23[i]]=false;
+}
+}
+};
+dojo._xdLoadFlattenedBundle=function(_2a,_2b,_2c,_2d){
+_2c=_2c||"root";
+var _2e=dojo.i18n.normalizeLocale(_2c).replace("-","_");
+var _2f=[_2a,"nls",_2b].join(".");
+var _30=dojo["provide"](_2f);
+_30[_2e]=_2d;
+var _31=[_2a,_2e,_2b].join(".");
+var _32=dojo._xdBundleMap[_31];
+if(_32){
+for(var _33 in _32){
+_30[_33]=_2d;
+}
+}
+};
+dojo._xdInitExtraLocales=function(){
+var _34=dojo.config.extraLocale;
+if(_34){
+if(!_34 instanceof Array){
+_34=[_34];
+}
+dojo._xdReqLoc=dojo.xdRequireLocalization;
+dojo.xdRequireLocalization=function(m,b,_35,_36){
+dojo._xdReqLoc(m,b,_35,_36);
+if(_35){
+return;
+}
+for(var i=0;i<_34.length;i++){
+dojo._xdReqLoc(m,b,_34[i],_36);
+}
+};
+}
+};
+dojo._xdBundleMap={};
+dojo.xdRequireLocalization=function(_37,_38,_39,_3a){
+if(dojo._xdInitExtraLocales){
+dojo._xdInitExtraLocales();
+dojo._xdInitExtraLocales=null;
+dojo.xdRequireLocalization.apply(dojo,arguments);
+return;
+}
+var _3b=_3a.split(",");
+var _3c=dojo.i18n.normalizeLocale(_39);
+var _3d="";
+for(var i=0;i<_3b.length;i++){
+if(_3c.indexOf(_3b[i])==0){
+if(_3b[i].length>_3d.length){
+_3d=_3b[i];
+}
+}
+}
+var _3e=_3d.replace("-","_");
+var _3f=dojo.getObject([_37,"nls",_38].join("."));
+if(!_3f||!_3f[_3e]){
+var _40=[_37,(_3e||"root"),_38].join(".");
+var _41=dojo._xdBundleMap[_40];
+if(!_41){
+_41=dojo._xdBundleMap[_40]={};
+}
+_41[_3c.replace("-","_")]=true;
+dojo.require(_37+".nls"+(_3d?"."+_3d:"")+"."+_38);
+}
+};
+dojo._xdRealRequireLocalization=dojo.requireLocalization;
+dojo.requireLocalization=function(_42,_43,_44,_45){
+var _46=dojo.moduleUrl(_42).toString();
+if(dojo._xdIsXDomainPath(_46)){
+return dojo.xdRequireLocalization.apply(dojo,arguments);
+}else{
+return dojo._xdRealRequireLocalization.apply(dojo,arguments);
+}
+};
+dojo._xdUnpackDependency=function(dep){
+var _47=null;
+var _48=null;
+switch(dep[0]){
+case "requireIf":
+case "requireAfterIf":
+if(dep[1]===true){
+_47=[{name:dep[2],content:null}];
+}
+break;
+case "platformRequire":
+var _49=dep[1];
+var _4a=_49["common"]||[];
+_47=(_49[dojo.hostenv.name_])?_4a.concat(_49[dojo.hostenv.name_]||[]):_4a.concat(_49["default"]||[]);
+if(_47){
+for(var i=0;i<_47.length;i++){
+if(_47[i] instanceof Array){
+_47[i]={name:_47[i][0],content:null};
+}else{
+_47[i]={name:_47[i],content:null};
+}
+}
+}
+break;
+case "require":
+_47=[{name:dep[1],content:null}];
+break;
+case "i18n._preloadLocalizations":
+dojo.i18n._preloadLocalizations.apply(dojo.i18n._preloadLocalizations,dep.slice(1));
+break;
+}
+if(dep[0]=="requireAfterIf"||dep[0]=="requireIf"){
+_48=_47;
+_47=null;
+}
+return {requires:_47,requiresAfter:_48};
+};
+dojo._xdWalkReqs=function(){
+var _4b=null;
+var req;
+for(var i=0;i<dojo._xdOrderedReqs.length;i++){
+req=dojo._xdOrderedReqs[i];
+if(dojo._xdDepMap[req]){
+_4b=[req];
+_4b[req]=true;
+dojo._xdEvalReqs(_4b);
+}
+}
+};
+dojo._xdEvalReqs=function(_4c){
+while(_4c.length>0){
+var req=_4c[_4c.length-1];
+var res=dojo._xdDepMap[req];
+var i,_4d,_4e;
+if(res){
+_4d=res.requires;
+if(_4d&&_4d.length>0){
+for(i=0;i<_4d.length;i++){
+_4e=_4d[i].name;
+if(_4e&&!_4c[_4e]){
+_4c.push(_4e);
+_4c[_4e]=true;
+dojo._xdEvalReqs(_4c);
+}
+}
+}
+var _4f=dojo._xdContents[res.contentIndex];
+if(!_4f.isDefined){
+var _50=_4f.content;
+_50["resourceName"]=_4f["resourceName"];
+_50["resourcePath"]=_4f["resourcePath"];
+dojo._xdDefList.push(_50);
+_4f.isDefined=true;
+}
+dojo._xdDepMap[req]=null;
+_4d=res.requiresAfter;
+if(_4d&&_4d.length>0){
+for(i=0;i<_4d.length;i++){
+_4e=_4d[i].name;
+if(_4e&&!_4c[_4e]){
+_4c.push(_4e);
+_4c[_4e]=true;
+dojo._xdEvalReqs(_4c);
+}
+}
+}
+}
+_4c.pop();
+}
+};
+dojo._xdWatchInFlight=function(){
+var _51="";
+var _52=(dojo.config.xdWaitSeconds||15)*1000;
+var _53=(dojo._xdStartTime+_52)<(new Date()).getTime();
+for(var _54 in dojo._xdInFlight){
+if(dojo._xdInFlight[_54]===true){
+if(_53){
+_51+=_54+" ";
+}else{
+return;
+}
+}
+}
+dojo._xdClearInterval();
+if(_53){
+throw "Could not load cross-domain resources: "+_51;
+}
+dojo._xdWalkReqs();
+var _55=dojo._xdDefList.length;
+for(var i=0;i<_55;i++){
+var _56=dojo._xdDefList[i];
+if(dojo.config["debugAtAllCosts"]&&_56["resourceName"]){
+if(!dojo["_xdDebugQueue"]){
+dojo._xdDebugQueue=[];
+}
+dojo._xdDebugQueue.push({resourceName:_56.resourceName,resourcePath:_56.resourcePath});
+}else{
+_56.apply(dojo.global,dojo._scopeArgs);
+}
+}
+for(i=0;i<dojo._xdContents.length;i++){
+var _57=dojo._xdContents[i];
+if(_57.content&&!_57.isDefined){
+_57.content.apply(dojo.global,dojo._scopeArgs);
+}
+}
+dojo._xdReset();
+if(dojo["_xdDebugQueue"]&&dojo._xdDebugQueue.length>0){
+dojo._xdDebugFileLoaded();
+}else{
+dojo._xdNotifyLoaded();
+}
+};
+dojo._xdNotifyLoaded=function(){
+for(var _58 in dojo._xdInFlight){
+if(typeof dojo._xdInFlight[_58]=="boolean"){
+return;
+}
+}
+dojo._inFlightCount=0;
+if(dojo._initFired&&!dojo._loadNotifying){
+dojo._callLoaded();
+}
+};
+}
Index: trunk/web/dojo/dojo/_base/declare.js
===================================================================
--- trunk/web/dojo/dojo/_base/declare.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/declare.js	(revision 9)
@@ -0,0 +1,423 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.declare"]){
+dojo._hasResource["dojo._base.declare"]=true;
+dojo.provide("dojo._base.declare");
+dojo.require("dojo._base.lang");
+dojo.require("dojo._base.array");
+(function(){
+var d=dojo,_1=d._mixin,op=Object.prototype,_2=op.toString,_3=new Function,_4=0,_5="constructor";
+function _6(_7){
+throw new Error("declare: "+_7);
+};
+function _8(_9){
+var _a=[],_b=[{cls:0,refs:[]}],_c={},_d=1,l=_9.length,i=0,j,_e,_f,top,_10,rec,_11,_12;
+for(;i<l;++i){
+_f=_9[i];
+if(!_f){
+_6("mixin #"+i+" is unknown. Did you use dojo.require to pull it in?");
+}else{
+if(_2.call(_f)!="[object Function]"){
+_6("mixin #"+i+" is not a callable constructor.");
+}
+}
+_e=_f._meta?_f._meta.bases:[_f];
+top=0;
+for(j=_e.length-1;j>=0;--j){
+_10=_e[j].prototype;
+if(!_10.hasOwnProperty("declaredClass")){
+_10.declaredClass="uniqName_"+(_4++);
+}
+_11=_10.declaredClass;
+if(!_c.hasOwnProperty(_11)){
+_c[_11]={count:0,refs:[],cls:_e[j]};
+++_d;
+}
+rec=_c[_11];
+if(top&&top!==rec){
+rec.refs.push(top);
+++top.count;
+}
+top=rec;
+}
+++top.count;
+_b[0].refs.push(top);
+}
+while(_b.length){
+top=_b.pop();
+_a.push(top.cls);
+--_d;
+while(_12=top.refs,_12.length==1){
+top=_12[0];
+if(!top||--top.count){
+top=0;
+break;
+}
+_a.push(top.cls);
+--_d;
+}
+if(top){
+for(i=0,l=_12.length;i<l;++i){
+top=_12[i];
+if(!--top.count){
+_b.push(top);
+}
+}
+}
+}
+if(_d){
+_6("can't build consistent linearization");
+}
+_f=_9[0];
+_a[0]=_f?_f._meta&&_f===_a[_a.length-_f._meta.bases.length]?_f._meta.bases.length:1:0;
+return _a;
+};
+function _13(_14,a,f){
+var _15,_16,_17,_18,_19,_1a,_1b,opf,pos,_1c=this._inherited=this._inherited||{};
+if(typeof _14=="string"){
+_15=_14;
+_14=a;
+a=f;
+}
+f=0;
+_18=_14.callee;
+_15=_15||_18.nom;
+if(!_15){
+_6("can't deduce a name to call inherited()");
+}
+_19=this.constructor._meta;
+_17=_19.bases;
+pos=_1c.p;
+if(_15!=_5){
+if(_1c.c!==_18){
+pos=0;
+_1a=_17[0];
+_19=_1a._meta;
+if(_19.hidden[_15]!==_18){
+_16=_19.chains;
+if(_16&&typeof _16[_15]=="string"){
+_6("calling chained method with inherited: "+_15);
+}
+do{
+_19=_1a._meta;
+_1b=_1a.prototype;
+if(_19&&(_1b[_15]===_18&&_1b.hasOwnProperty(_15)||_19.hidden[_15]===_18)){
+break;
+}
+}while(_1a=_17[++pos]);
+pos=_1a?pos:-1;
+}
+}
+_1a=_17[++pos];
+if(_1a){
+_1b=_1a.prototype;
+if(_1a._meta&&_1b.hasOwnProperty(_15)){
+f=_1b[_15];
+}else{
+opf=op[_15];
+do{
+_1b=_1a.prototype;
+f=_1b[_15];
+if(f&&(_1a._meta?_1b.hasOwnProperty(_15):f!==opf)){
+break;
+}
+}while(_1a=_17[++pos]);
+}
+}
+f=_1a&&f||op[_15];
+}else{
+if(_1c.c!==_18){
+pos=0;
+_19=_17[0]._meta;
+if(_19&&_19.ctor!==_18){
+_16=_19.chains;
+if(!_16||_16.constructor!=="manual"){
+_6("calling chained constructor with inherited");
+}
+while(_1a=_17[++pos]){
+_19=_1a._meta;
+if(_19&&_19.ctor===_18){
+break;
+}
+}
+pos=_1a?pos:-1;
+}
+}
+while(_1a=_17[++pos]){
+_19=_1a._meta;
+f=_19?_19.ctor:_1a;
+if(f){
+break;
+}
+}
+f=_1a&&f;
+}
+_1c.c=f;
+_1c.p=pos;
+if(f){
+return a===true?f:f.apply(this,a||_14);
+}
+};
+function _1d(_1e,_1f){
+if(typeof _1e=="string"){
+return this.inherited(_1e,_1f,true);
+}
+return this.inherited(_1e,true);
+};
+function _20(cls){
+var _21=this.constructor._meta.bases;
+for(var i=0,l=_21.length;i<l;++i){
+if(_21[i]===cls){
+return true;
+}
+}
+return this instanceof cls;
+};
+function _22(_23,_24){
+var _25,i=0,l=d._extraNames.length;
+for(_25 in _24){
+if(_25!=_5&&_24.hasOwnProperty(_25)){
+_23[_25]=_24[_25];
+}
+}
+for(;i<l;++i){
+_25=d._extraNames[i];
+if(_25!=_5&&_24.hasOwnProperty(_25)){
+_23[_25]=_24[_25];
+}
+}
+};
+function _26(_27,_28){
+var _29,t,i=0,l=d._extraNames.length;
+for(_29 in _28){
+t=_28[_29];
+if((t!==op[_29]||!(_29 in op))&&_29!=_5){
+if(_2.call(t)=="[object Function]"){
+t.nom=_29;
+}
+_27[_29]=t;
+}
+}
+for(;i<l;++i){
+_29=d._extraNames[i];
+t=_28[_29];
+if((t!==op[_29]||!(_29 in op))&&_29!=_5){
+if(_2.call(t)=="[object Function]"){
+t.nom=_29;
+}
+_27[_29]=t;
+}
+}
+return _27;
+};
+function _2a(_2b){
+_26(this.prototype,_2b);
+return this;
+};
+function _2c(_2d,_2e){
+return function(){
+var a=arguments,_2f=a,a0=a[0],f,i,m,l=_2d.length,_30;
+if(!(this instanceof a.callee)){
+return _31(a);
+}
+if(_2e&&(a0&&a0.preamble||this.preamble)){
+_30=new Array(_2d.length);
+_30[0]=a;
+for(i=0;;){
+a0=a[0];
+if(a0){
+f=a0.preamble;
+if(f){
+a=f.apply(this,a)||a;
+}
+}
+f=_2d[i].prototype;
+f=f.hasOwnProperty("preamble")&&f.preamble;
+if(f){
+a=f.apply(this,a)||a;
+}
+if(++i==l){
+break;
+}
+_30[i]=a;
+}
+}
+for(i=l-1;i>=0;--i){
+f=_2d[i];
+m=f._meta;
+f=m?m.ctor:f;
+if(f){
+f.apply(this,_30?_30[i]:a);
+}
+}
+f=this.postscript;
+if(f){
+f.apply(this,_2f);
+}
+};
+};
+function _32(_33,_34){
+return function(){
+var a=arguments,t=a,a0=a[0],f;
+if(!(this instanceof a.callee)){
+return _31(a);
+}
+if(_34){
+if(a0){
+f=a0.preamble;
+if(f){
+t=f.apply(this,t)||t;
+}
+}
+f=this.preamble;
+if(f){
+f.apply(this,t);
+}
+}
+if(_33){
+_33.apply(this,a);
+}
+f=this.postscript;
+if(f){
+f.apply(this,a);
+}
+};
+};
+function _35(_36){
+return function(){
+var a=arguments,i=0,f,m;
+if(!(this instanceof a.callee)){
+return _31(a);
+}
+for(;f=_36[i];++i){
+m=f._meta;
+f=m?m.ctor:f;
+if(f){
+f.apply(this,a);
+break;
+}
+}
+f=this.postscript;
+if(f){
+f.apply(this,a);
+}
+};
+};
+function _37(_38,_39,_3a){
+return function(){
+var b,m,f,i=0,_3b=1;
+if(_3a){
+i=_39.length-1;
+_3b=-1;
+}
+for(;b=_39[i];i+=_3b){
+m=b._meta;
+f=(m?m.hidden:b.prototype)[_38];
+if(f){
+f.apply(this,arguments);
+}
+}
+};
+};
+function _3c(_3d){
+_3.prototype=_3d.prototype;
+var t=new _3;
+_3.prototype=null;
+return t;
+};
+function _31(_3e){
+var _3f=_3e.callee,t=_3c(_3f);
+_3f.apply(t,_3e);
+return t;
+};
+d.declare=function(_40,_41,_42){
+if(typeof _40!="string"){
+_42=_41;
+_41=_40;
+_40="";
+}
+_42=_42||{};
+var _43,i,t,_44,_45,_46,_47,_48=1,_49=_41;
+if(_2.call(_41)=="[object Array]"){
+_46=_8(_41);
+t=_46[0];
+_48=_46.length-t;
+_41=_46[_48];
+}else{
+_46=[0];
+if(_41){
+if(_2.call(_41)=="[object Function]"){
+t=_41._meta;
+_46=_46.concat(t?t.bases:_41);
+}else{
+_6("base class is not a callable constructor.");
+}
+}else{
+if(_41!==null){
+_6("unknown base class. Did you use dojo.require to pull it in?");
+}
+}
+}
+if(_41){
+for(i=_48-1;;--i){
+_43=_3c(_41);
+if(!i){
+break;
+}
+t=_46[i];
+(t._meta?_22:_1)(_43,t.prototype);
+_44=new Function;
+_44.superclass=_41;
+_44.prototype=_43;
+_41=_43.constructor=_44;
+}
+}else{
+_43={};
+}
+_26(_43,_42);
+t=_42.constructor;
+if(t!==op.constructor){
+t.nom=_5;
+_43.constructor=t;
+}
+for(i=_48-1;i;--i){
+t=_46[i]._meta;
+if(t&&t.chains){
+_47=_1(_47||{},t.chains);
+}
+}
+if(_43["-chains-"]){
+_47=_1(_47||{},_43["-chains-"]);
+}
+t=!_47||!_47.hasOwnProperty(_5);
+_46[0]=_44=(_47&&_47.constructor==="manual")?_35(_46):(_46.length==1?_32(_42.constructor,t):_2c(_46,t));
+_44._meta={bases:_46,hidden:_42,chains:_47,parents:_49,ctor:_42.constructor};
+_44.superclass=_41&&_41.prototype;
+_44.extend=_2a;
+_44.prototype=_43;
+_43.constructor=_44;
+_43.getInherited=_1d;
+_43.inherited=_13;
+_43.isInstanceOf=_20;
+if(_40){
+_43.declaredClass=_40;
+d.setObject(_40,_44);
+}
+if(_47){
+for(_45 in _47){
+if(_43[_45]&&typeof _47[_45]=="string"&&_45!=_5){
+t=_43[_45]=_37(_45,_46,_47[_45]==="after");
+t.nom=_45;
+}
+}
+}
+return _44;
+};
+d.safeMixin=_26;
+})();
+}
Index: trunk/web/dojo/dojo/_base/xhr.js
===================================================================
--- trunk/web/dojo/dojo/_base/xhr.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/xhr.js	(revision 9)
@@ -0,0 +1,437 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.xhr"]){
+dojo._hasResource["dojo._base.xhr"]=true;
+dojo.provide("dojo._base.xhr");
+dojo.require("dojo._base.Deferred");
+dojo.require("dojo._base.json");
+dojo.require("dojo._base.lang");
+dojo.require("dojo._base.query");
+(function(){
+var _1=dojo,_2=_1.config;
+function _3(_4,_5,_6){
+if(_6===null){
+return;
+}
+var _7=_4[_5];
+if(typeof _7=="string"){
+_4[_5]=[_7,_6];
+}else{
+if(_1.isArray(_7)){
+_7.push(_6);
+}else{
+_4[_5]=_6;
+}
+}
+};
+dojo.fieldToObject=function(_8){
+var _9=null;
+var _a=_1.byId(_8);
+if(_a){
+var _b=_a.name;
+var _c=(_a.type||"").toLowerCase();
+if(_b&&_c&&!_a.disabled){
+if(_c=="radio"||_c=="checkbox"){
+if(_a.checked){
+_9=_a.value;
+}
+}else{
+if(_a.multiple){
+_9=[];
+_1.query("option",_a).forEach(function(_d){
+if(_d.selected){
+_9.push(_d.value);
+}
+});
+}else{
+_9=_a.value;
+}
+}
+}
+}
+return _9;
+};
+dojo.formToObject=function(_e){
+var _f={};
+var _10="file|submit|image|reset|button|";
+_1.forEach(dojo.byId(_e).elements,function(_11){
+var _12=_11.name;
+var _13=(_11.type||"").toLowerCase();
+if(_12&&_13&&_10.indexOf(_13)==-1&&!_11.disabled){
+_3(_f,_12,_1.fieldToObject(_11));
+if(_13=="image"){
+_f[_12+".x"]=_f[_12+".y"]=_f[_12].x=_f[_12].y=0;
+}
+}
+});
+return _f;
+};
+dojo.objectToQuery=function(map){
+var enc=encodeURIComponent;
+var _14=[];
+var _15={};
+for(var _16 in map){
+var _17=map[_16];
+if(_17!=_15[_16]){
+var _18=enc(_16)+"=";
+if(_1.isArray(_17)){
+for(var i=0;i<_17.length;i++){
+_14.push(_18+enc(_17[i]));
+}
+}else{
+_14.push(_18+enc(_17));
+}
+}
+}
+return _14.join("&");
+};
+dojo.formToQuery=function(_19){
+return _1.objectToQuery(_1.formToObject(_19));
+};
+dojo.formToJson=function(_1a,_1b){
+return _1.toJson(_1.formToObject(_1a),_1b);
+};
+dojo.queryToObject=function(str){
+var ret={};
+var qp=str.split("&");
+var dec=decodeURIComponent;
+_1.forEach(qp,function(_1c){
+if(_1c.length){
+var _1d=_1c.split("=");
+var _1e=dec(_1d.shift());
+var val=dec(_1d.join("="));
+if(typeof ret[_1e]=="string"){
+ret[_1e]=[ret[_1e]];
+}
+if(_1.isArray(ret[_1e])){
+ret[_1e].push(val);
+}else{
+ret[_1e]=val;
+}
+}
+});
+return ret;
+};
+dojo._blockAsync=false;
+var _1f=_1._contentHandlers=dojo.contentHandlers={text:function(xhr){
+return xhr.responseText;
+},json:function(xhr){
+return _1.fromJson(xhr.responseText||null);
+},"json-comment-filtered":function(xhr){
+if(!dojo.config.useCommentedJson){
+console.warn("Consider using the standard mimetype:application/json."+" json-commenting can introduce security issues. To"+" decrease the chances of hijacking, use the standard the 'json' handler and"+" prefix your json with: {}&&\n"+"Use djConfig.useCommentedJson=true to turn off this message.");
+}
+var _20=xhr.responseText;
+var _21=_20.indexOf("/*");
+var _22=_20.lastIndexOf("*/");
+if(_21==-1||_22==-1){
+throw new Error("JSON was not comment filtered");
+}
+return _1.fromJson(_20.substring(_21+2,_22));
+},javascript:function(xhr){
+return _1.eval(xhr.responseText);
+},xml:function(xhr){
+var _23=xhr.responseXML;
+if(_1.isIE&&(!_23||!_23.documentElement)){
+var ms=function(n){
+return "MSXML"+n+".DOMDocument";
+};
+var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];
+_1.some(dp,function(p){
+try{
+var dom=new ActiveXObject(p);
+dom.async=false;
+dom.loadXML(xhr.responseText);
+_23=dom;
+}
+catch(e){
+return false;
+}
+return true;
+});
+}
+return _23;
+},"json-comment-optional":function(xhr){
+if(xhr.responseText&&/^[^{\[]*\/\*/.test(xhr.responseText)){
+return _1f["json-comment-filtered"](xhr);
+}else{
+return _1f["json"](xhr);
+}
+}};
+dojo._ioSetArgs=function(_24,_25,_26,_27){
+var _28={args:_24,url:_24.url};
+var _29=null;
+if(_24.form){
+var _2a=_1.byId(_24.form);
+var _2b=_2a.getAttributeNode("action");
+_28.url=_28.url||(_2b?_2b.value:null);
+_29=_1.formToObject(_2a);
+}
+var _2c=[{}];
+if(_29){
+_2c.push(_29);
+}
+if(_24.content){
+_2c.push(_24.content);
+}
+if(_24.preventCache){
+_2c.push({"dojo.preventCache":new Date().valueOf()});
+}
+_28.query=_1.objectToQuery(_1.mixin.apply(null,_2c));
+_28.handleAs=_24.handleAs||"text";
+var d=new _1.Deferred(_25);
+d.addCallbacks(_26,function(_2d){
+return _27(_2d,d);
+});
+var ld=_24.load;
+if(ld&&_1.isFunction(ld)){
+d.addCallback(function(_2e){
+return ld.call(_24,_2e,_28);
+});
+}
+var err=_24.error;
+if(err&&_1.isFunction(err)){
+d.addErrback(function(_2f){
+return err.call(_24,_2f,_28);
+});
+}
+var _30=_24.handle;
+if(_30&&_1.isFunction(_30)){
+d.addBoth(function(_31){
+return _30.call(_24,_31,_28);
+});
+}
+if(_2.ioPublish&&_1.publish&&_28.args.ioPublish!==false){
+d.addCallbacks(function(res){
+_1.publish("/dojo/io/load",[d,res]);
+return res;
+},function(res){
+_1.publish("/dojo/io/error",[d,res]);
+return res;
+});
+d.addBoth(function(res){
+_1.publish("/dojo/io/done",[d,res]);
+return res;
+});
+}
+d.ioArgs=_28;
+return d;
+};
+var _32=function(dfd){
+dfd.canceled=true;
+var xhr=dfd.ioArgs.xhr;
+var _33=typeof xhr.abort;
+if(_33=="function"||_33=="object"||_33=="unknown"){
+xhr.abort();
+}
+var err=dfd.ioArgs.error;
+if(!err){
+err=new Error("xhr cancelled");
+err.dojoType="cancel";
+}
+return err;
+};
+var _34=function(dfd){
+var ret=_1f[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
+return ret===undefined?null:ret;
+};
+var _35=function(_36,dfd){
+if(!dfd.ioArgs.args.failOk){
+console.error(_36);
+}
+return _36;
+};
+var _37=null;
+var _38=[];
+var _39=0;
+var _3a=function(dfd){
+if(_39<=0){
+_39=0;
+if(_2.ioPublish&&_1.publish&&(!dfd||dfd&&dfd.ioArgs.args.ioPublish!==false)){
+_1.publish("/dojo/io/stop");
+}
+}
+};
+var _3b=function(){
+var now=(new Date()).getTime();
+if(!_1._blockAsync){
+for(var i=0,tif;i<_38.length&&(tif=_38[i]);i++){
+var dfd=tif.dfd;
+var _3c=function(){
+if(!dfd||dfd.canceled||!tif.validCheck(dfd)){
+_38.splice(i--,1);
+_39-=1;
+}else{
+if(tif.ioCheck(dfd)){
+_38.splice(i--,1);
+tif.resHandle(dfd);
+_39-=1;
+}else{
+if(dfd.startTime){
+if(dfd.startTime+(dfd.ioArgs.args.timeout||0)<now){
+_38.splice(i--,1);
+var err=new Error("timeout exceeded");
+err.dojoType="timeout";
+dfd.errback(err);
+dfd.cancel();
+_39-=1;
+}
+}
+}
+}
+};
+if(dojo.config.debugAtAllCosts){
+_3c.call(this);
+}else{
+try{
+_3c.call(this);
+}
+catch(e){
+dfd.errback(e);
+}
+}
+}
+}
+_3a(dfd);
+if(!_38.length){
+clearInterval(_37);
+_37=null;
+return;
+}
+};
+dojo._ioCancelAll=function(){
+try{
+_1.forEach(_38,function(i){
+try{
+i.dfd.cancel();
+}
+catch(e){
+}
+});
+}
+catch(e){
+}
+};
+if(_1.isIE){
+_1.addOnWindowUnload(_1._ioCancelAll);
+}
+_1._ioNotifyStart=function(dfd){
+if(_2.ioPublish&&_1.publish&&dfd.ioArgs.args.ioPublish!==false){
+if(!_39){
+_1.publish("/dojo/io/start");
+}
+_39+=1;
+_1.publish("/dojo/io/send",[dfd]);
+}
+};
+_1._ioWatch=function(dfd,_3d,_3e,_3f){
+var _40=dfd.ioArgs.args;
+if(_40.timeout){
+dfd.startTime=(new Date()).getTime();
+}
+_38.push({dfd:dfd,validCheck:_3d,ioCheck:_3e,resHandle:_3f});
+if(!_37){
+_37=setInterval(_3b,50);
+}
+if(_40.sync){
+_3b();
+}
+};
+var _41="application/x-www-form-urlencoded";
+var _42=function(dfd){
+return dfd.ioArgs.xhr.readyState;
+};
+var _43=function(dfd){
+return 4==dfd.ioArgs.xhr.readyState;
+};
+var _44=function(dfd){
+var xhr=dfd.ioArgs.xhr;
+if(_1._isDocumentOk(xhr)){
+dfd.callback(dfd);
+}else{
+var err=new Error("Unable to load "+dfd.ioArgs.url+" status:"+xhr.status);
+err.status=xhr.status;
+err.responseText=xhr.responseText;
+dfd.errback(err);
+}
+};
+dojo._ioAddQueryToUrl=function(_45){
+if(_45.query.length){
+_45.url+=(_45.url.indexOf("?")==-1?"?":"&")+_45.query;
+_45.query=null;
+}
+};
+dojo.xhr=function(_46,_47,_48){
+var dfd=_1._ioSetArgs(_47,_32,_34,_35);
+var _49=dfd.ioArgs;
+var xhr=_49.xhr=_1._xhrObj(_49.args);
+if(!xhr){
+dfd.cancel();
+return dfd;
+}
+if("postData" in _47){
+_49.query=_47.postData;
+}else{
+if("putData" in _47){
+_49.query=_47.putData;
+}else{
+if("rawBody" in _47){
+_49.query=_47.rawBody;
+}else{
+if((arguments.length>2&&!_48)||"POST|PUT".indexOf(_46.toUpperCase())==-1){
+_1._ioAddQueryToUrl(_49);
+}
+}
+}
+}
+xhr.open(_46,_49.url,_47.sync!==true,_47.user||undefined,_47.password||undefined);
+if(_47.headers){
+for(var hdr in _47.headers){
+if(hdr.toLowerCase()==="content-type"&&!_47.contentType){
+_47.contentType=_47.headers[hdr];
+}else{
+if(_47.headers[hdr]){
+xhr.setRequestHeader(hdr,_47.headers[hdr]);
+}
+}
+}
+}
+xhr.setRequestHeader("Content-Type",_47.contentType||_41);
+if(!_47.headers||!("X-Requested-With" in _47.headers)){
+xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");
+}
+_1._ioNotifyStart(dfd);
+if(dojo.config.debugAtAllCosts){
+xhr.send(_49.query);
+}else{
+try{
+xhr.send(_49.query);
+}
+catch(e){
+_49.error=e;
+dfd.cancel();
+}
+}
+_1._ioWatch(dfd,_42,_43,_44);
+xhr=null;
+return dfd;
+};
+dojo.xhrGet=function(_4a){
+return _1.xhr("GET",_4a);
+};
+dojo.rawXhrPost=dojo.xhrPost=function(_4b){
+return _1.xhr("POST",_4b,true);
+};
+dojo.rawXhrPut=dojo.xhrPut=function(_4c){
+return _1.xhr("PUT",_4c,true);
+};
+dojo.xhrDelete=function(_4d){
+return _1.xhr("DELETE",_4d);
+};
+})();
+}
Index: trunk/web/dojo/dojo/_base/html.js
===================================================================
--- trunk/web/dojo/dojo/_base/html.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/html.js	(revision 9)
@@ -0,0 +1,749 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.html"]){
+dojo._hasResource["dojo._base.html"]=true;
+dojo.require("dojo._base.lang");
+dojo.provide("dojo._base.html");
+try{
+document.execCommand("BackgroundImageCache",false,true);
+}
+catch(e){
+}
+if(dojo.isIE||dojo.isOpera){
+dojo.byId=function(id,_1){
+if(typeof id!="string"){
+return id;
+}
+var _2=_1||dojo.doc,te=_2.getElementById(id);
+if(te&&(te.attributes.id.value==id||te.id==id)){
+return te;
+}else{
+var _3=_2.all[id];
+if(!_3||_3.nodeName){
+_3=[_3];
+}
+var i=0;
+while((te=_3[i++])){
+if((te.attributes&&te.attributes.id&&te.attributes.id.value==id)||te.id==id){
+return te;
+}
+}
+}
+};
+}else{
+dojo.byId=function(id,_4){
+return (typeof id=="string")?(_4||dojo.doc).getElementById(id):id;
+};
+}
+(function(){
+var d=dojo;
+var _5=d.byId;
+var _6=null,_7;
+d.addOnWindowUnload(function(){
+_6=null;
+});
+dojo._destroyElement=dojo.destroy=function(_8){
+_8=_5(_8);
+try{
+var _9=_8.ownerDocument;
+if(!_6||_7!=_9){
+_6=_9.createElement("div");
+_7=_9;
+}
+_6.appendChild(_8.parentNode?_8.parentNode.removeChild(_8):_8);
+_6.innerHTML="";
+}
+catch(e){
+}
+};
+dojo.isDescendant=function(_a,_b){
+try{
+_a=_5(_a);
+_b=_5(_b);
+while(_a){
+if(_a==_b){
+return true;
+}
+_a=_a.parentNode;
+}
+}
+catch(e){
+}
+return false;
+};
+dojo.setSelectable=function(_c,_d){
+_c=_5(_c);
+if(d.isMozilla){
+_c.style.MozUserSelect=_d?"":"none";
+}else{
+if(d.isKhtml||d.isWebKit){
+_c.style.KhtmlUserSelect=_d?"auto":"none";
+}else{
+if(d.isIE){
+var v=(_c.unselectable=_d?"":"on");
+d.query("*",_c).forEach("item.unselectable = '"+v+"'");
+}
+}
+}
+};
+var _e=function(_f,ref){
+var _10=ref.parentNode;
+if(_10){
+_10.insertBefore(_f,ref);
+}
+};
+var _11=function(_12,ref){
+var _13=ref.parentNode;
+if(_13){
+if(_13.lastChild==ref){
+_13.appendChild(_12);
+}else{
+_13.insertBefore(_12,ref.nextSibling);
+}
+}
+};
+dojo.place=function(_14,_15,_16){
+_15=_5(_15);
+if(typeof _14=="string"){
+_14=_14.charAt(0)=="<"?d._toDom(_14,_15.ownerDocument):_5(_14);
+}
+if(typeof _16=="number"){
+var cn=_15.childNodes;
+if(!cn.length||cn.length<=_16){
+_15.appendChild(_14);
+}else{
+_e(_14,cn[_16<0?0:_16]);
+}
+}else{
+switch(_16){
+case "before":
+_e(_14,_15);
+break;
+case "after":
+_11(_14,_15);
+break;
+case "replace":
+_15.parentNode.replaceChild(_14,_15);
+break;
+case "only":
+d.empty(_15);
+_15.appendChild(_14);
+break;
+case "first":
+if(_15.firstChild){
+_e(_14,_15.firstChild);
+break;
+}
+default:
+_15.appendChild(_14);
+}
+}
+return _14;
+};
+dojo.boxModel="content-box";
+if(d.isIE){
+d.boxModel=document.compatMode=="BackCompat"?"border-box":"content-box";
+}
+var gcs;
+if(d.isWebKit){
+gcs=function(_17){
+var s;
+if(_17.nodeType==1){
+var dv=_17.ownerDocument.defaultView;
+s=dv.getComputedStyle(_17,null);
+if(!s&&_17.style){
+_17.style.display="";
+s=dv.getComputedStyle(_17,null);
+}
+}
+return s||{};
+};
+}else{
+if(d.isIE){
+gcs=function(_18){
+return _18.nodeType==1?_18.currentStyle:{};
+};
+}else{
+gcs=function(_19){
+return _19.nodeType==1?_19.ownerDocument.defaultView.getComputedStyle(_19,null):{};
+};
+}
+}
+dojo.getComputedStyle=gcs;
+if(!d.isIE){
+d._toPixelValue=function(_1a,_1b){
+return parseFloat(_1b)||0;
+};
+}else{
+d._toPixelValue=function(_1c,_1d){
+if(!_1d){
+return 0;
+}
+if(_1d=="medium"){
+return 4;
+}
+if(_1d.slice&&_1d.slice(-2)=="px"){
+return parseFloat(_1d);
+}
+with(_1c){
+var _1e=style.left;
+var _1f=runtimeStyle.left;
+runtimeStyle.left=currentStyle.left;
+try{
+style.left=_1d;
+_1d=style.pixelLeft;
+}
+catch(e){
+_1d=0;
+}
+style.left=_1e;
+runtimeStyle.left=_1f;
+}
+return _1d;
+};
+}
+var px=d._toPixelValue;
+var _20="DXImageTransform.Microsoft.Alpha";
+var af=function(n,f){
+try{
+return n.filters.item(_20);
+}
+catch(e){
+return f?{}:null;
+}
+};
+dojo._getOpacity=d.isIE?function(_21){
+try{
+return af(_21).Opacity/100;
+}
+catch(e){
+return 1;
+}
+}:function(_22){
+return gcs(_22).opacity;
+};
+dojo._setOpacity=d.isIE?function(_23,_24){
+var ov=_24*100,_25=_24==1;
+_23.style.zoom=_25?"":1;
+if(!af(_23)){
+if(_25){
+return _24;
+}
+_23.style.filter+=" progid:"+_20+"(Opacity="+ov+")";
+}else{
+af(_23,1).Opacity=ov;
+}
+af(_23,1).Enabled=!_25;
+if(_23.nodeName.toLowerCase()=="tr"){
+d.query("> td",_23).forEach(function(i){
+d._setOpacity(i,_24);
+});
+}
+return _24;
+}:function(_26,_27){
+return _26.style.opacity=_27;
+};
+var _28={left:true,top:true};
+var _29=/margin|padding|width|height|max|min|offset/;
+var _2a=function(_2b,_2c,_2d){
+_2c=_2c.toLowerCase();
+if(d.isIE){
+if(_2d=="auto"){
+if(_2c=="height"){
+return _2b.offsetHeight;
+}
+if(_2c=="width"){
+return _2b.offsetWidth;
+}
+}
+if(_2c=="fontweight"){
+switch(_2d){
+case 700:
+return "bold";
+case 400:
+default:
+return "normal";
+}
+}
+}
+if(!(_2c in _28)){
+_28[_2c]=_29.test(_2c);
+}
+return _28[_2c]?px(_2b,_2d):_2d;
+};
+var _2e=d.isIE?"styleFloat":"cssFloat",_2f={"cssFloat":_2e,"styleFloat":_2e,"float":_2e};
+dojo.style=function(_30,_31,_32){
+var n=_5(_30),_33=arguments.length,op=(_31=="opacity");
+_31=_2f[_31]||_31;
+if(_33==3){
+return op?d._setOpacity(n,_32):n.style[_31]=_32;
+}
+if(_33==2&&op){
+return d._getOpacity(n);
+}
+var s=gcs(n);
+if(_33==2&&typeof _31!="string"){
+for(var x in _31){
+d.style(_30,x,_31[x]);
+}
+return s;
+}
+return (_33==1)?s:_2a(n,_31,s[_31]||n.style[_31]);
+};
+dojo._getPadExtents=function(n,_34){
+var s=_34||gcs(n),l=px(n,s.paddingLeft),t=px(n,s.paddingTop);
+return {l:l,t:t,w:l+px(n,s.paddingRight),h:t+px(n,s.paddingBottom)};
+};
+dojo._getBorderExtents=function(n,_35){
+var ne="none",s=_35||gcs(n),bl=(s.borderLeftStyle!=ne?px(n,s.borderLeftWidth):0),bt=(s.borderTopStyle!=ne?px(n,s.borderTopWidth):0);
+return {l:bl,t:bt,w:bl+(s.borderRightStyle!=ne?px(n,s.borderRightWidth):0),h:bt+(s.borderBottomStyle!=ne?px(n,s.borderBottomWidth):0)};
+};
+dojo._getPadBorderExtents=function(n,_36){
+var s=_36||gcs(n),p=d._getPadExtents(n,s),b=d._getBorderExtents(n,s);
+return {l:p.l+b.l,t:p.t+b.t,w:p.w+b.w,h:p.h+b.h};
+};
+dojo._getMarginExtents=function(n,_37){
+var s=_37||gcs(n),l=px(n,s.marginLeft),t=px(n,s.marginTop),r=px(n,s.marginRight),b=px(n,s.marginBottom);
+if(d.isWebKit&&(s.position!="absolute")){
+r=l;
+}
+return {l:l,t:t,w:l+r,h:t+b};
+};
+dojo._getMarginBox=function(_38,_39){
+var s=_39||gcs(_38),me=d._getMarginExtents(_38,s);
+var l=_38.offsetLeft-me.l,t=_38.offsetTop-me.t,p=_38.parentNode;
+if(d.isMoz){
+var sl=parseFloat(s.left),st=parseFloat(s.top);
+if(!isNaN(sl)&&!isNaN(st)){
+l=sl,t=st;
+}else{
+if(p&&p.style){
+var pcs=gcs(p);
+if(pcs.overflow!="visible"){
+var be=d._getBorderExtents(p,pcs);
+l+=be.l,t+=be.t;
+}
+}
+}
+}else{
+if(d.isOpera||(d.isIE>7&&!d.isQuirks)){
+if(p){
+be=d._getBorderExtents(p);
+l-=be.l;
+t-=be.t;
+}
+}
+}
+return {l:l,t:t,w:_38.offsetWidth+me.w,h:_38.offsetHeight+me.h};
+};
+dojo._getContentBox=function(_3a,_3b){
+var s=_3b||gcs(_3a),pe=d._getPadExtents(_3a,s),be=d._getBorderExtents(_3a,s),w=_3a.clientWidth,h;
+if(!w){
+w=_3a.offsetWidth,h=_3a.offsetHeight;
+}else{
+h=_3a.clientHeight,be.w=be.h=0;
+}
+if(d.isOpera){
+pe.l+=be.l;
+pe.t+=be.t;
+}
+return {l:pe.l,t:pe.t,w:w-pe.w-be.w,h:h-pe.h-be.h};
+};
+dojo._getBorderBox=function(_3c,_3d){
+var s=_3d||gcs(_3c),pe=d._getPadExtents(_3c,s),cb=d._getContentBox(_3c,s);
+return {l:cb.l-pe.l,t:cb.t-pe.t,w:cb.w+pe.w,h:cb.h+pe.h};
+};
+dojo._setBox=function(_3e,l,t,w,h,u){
+u=u||"px";
+var s=_3e.style;
+if(!isNaN(l)){
+s.left=l+u;
+}
+if(!isNaN(t)){
+s.top=t+u;
+}
+if(w>=0){
+s.width=w+u;
+}
+if(h>=0){
+s.height=h+u;
+}
+};
+dojo._isButtonTag=function(_3f){
+return _3f.tagName=="BUTTON"||_3f.tagName=="INPUT"&&(_3f.getAttribute("type")||"").toUpperCase()=="BUTTON";
+};
+dojo._usesBorderBox=function(_40){
+var n=_40.tagName;
+return d.boxModel=="border-box"||n=="TABLE"||d._isButtonTag(_40);
+};
+dojo._setContentSize=function(_41,_42,_43,_44){
+if(d._usesBorderBox(_41)){
+var pb=d._getPadBorderExtents(_41,_44);
+if(_42>=0){
+_42+=pb.w;
+}
+if(_43>=0){
+_43+=pb.h;
+}
+}
+d._setBox(_41,NaN,NaN,_42,_43);
+};
+dojo._setMarginBox=function(_45,_46,_47,_48,_49,_4a){
+var s=_4a||gcs(_45),bb=d._usesBorderBox(_45),pb=bb?_4b:d._getPadBorderExtents(_45,s);
+if(d.isWebKit){
+if(d._isButtonTag(_45)){
+var ns=_45.style;
+if(_48>=0&&!ns.width){
+ns.width="4px";
+}
+if(_49>=0&&!ns.height){
+ns.height="4px";
+}
+}
+}
+var mb=d._getMarginExtents(_45,s);
+if(_48>=0){
+_48=Math.max(_48-pb.w-mb.w,0);
+}
+if(_49>=0){
+_49=Math.max(_49-pb.h-mb.h,0);
+}
+d._setBox(_45,_46,_47,_48,_49);
+};
+var _4b={l:0,t:0,w:0,h:0};
+dojo.marginBox=function(_4c,box){
+var n=_5(_4c),s=gcs(n),b=box;
+return !b?d._getMarginBox(n,s):d._setMarginBox(n,b.l,b.t,b.w,b.h,s);
+};
+dojo.contentBox=function(_4d,box){
+var n=_5(_4d),s=gcs(n),b=box;
+return !b?d._getContentBox(n,s):d._setContentSize(n,b.w,b.h,s);
+};
+var _4e=function(_4f,_50){
+if(!(_4f=(_4f||0).parentNode)){
+return 0;
+}
+var val,_51=0,_52=d.body();
+while(_4f&&_4f.style){
+if(gcs(_4f).position=="fixed"){
+return 0;
+}
+val=_4f[_50];
+if(val){
+_51+=val-0;
+if(_4f==_52){
+break;
+}
+}
+_4f=_4f.parentNode;
+}
+return _51;
+};
+dojo._docScroll=function(){
+var n=d.global;
+return "pageXOffset" in n?{x:n.pageXOffset,y:n.pageYOffset}:(n=d.doc.documentElement,n.clientHeight?{x:d._fixIeBiDiScrollLeft(n.scrollLeft),y:n.scrollTop}:(n=d.body(),{x:n.scrollLeft||0,y:n.scrollTop||0}));
+};
+dojo._isBodyLtr=function(){
+return "_bodyLtr" in d?d._bodyLtr:d._bodyLtr=(d.body().dir||d.doc.documentElement.dir||"ltr").toLowerCase()=="ltr";
+};
+dojo._getIeDocumentElementOffset=function(){
+var de=d.doc.documentElement;
+if(d.isIE<8){
+var r=de.getBoundingClientRect();
+var l=r.left,t=r.top;
+if(d.isIE<7){
+l+=de.clientLeft;
+t+=de.clientTop;
+}
+return {x:l<0?0:l,y:t<0?0:t};
+}else{
+return {x:0,y:0};
+}
+};
+dojo._fixIeBiDiScrollLeft=function(_53){
+var dd=d.doc;
+if(d.isIE<8&&!d._isBodyLtr()){
+var de=d.isQuirks?dd.body:dd.documentElement;
+return _53+de.clientWidth-de.scrollWidth;
+}
+return _53;
+};
+dojo._abs=dojo.position=function(_54,_55){
+var db=d.body(),dh=db.parentNode,ret;
+_54=_5(_54);
+if(_54["getBoundingClientRect"]){
+ret=_54.getBoundingClientRect();
+ret={x:ret.left,y:ret.top,w:ret.right-ret.left,h:ret.bottom-ret.top};
+if(d.isIE){
+var _56=d._getIeDocumentElementOffset();
+ret.x-=_56.x+(d.isQuirks?db.clientLeft+db.offsetLeft:0);
+ret.y-=_56.y+(d.isQuirks?db.clientTop+db.offsetTop:0);
+}else{
+if(d.isFF==3){
+var cs=gcs(dh);
+ret.x-=px(dh,cs.marginLeft)+px(dh,cs.borderLeftWidth);
+ret.y-=px(dh,cs.marginTop)+px(dh,cs.borderTopWidth);
+}
+}
+}else{
+ret={x:0,y:0,w:_54.offsetWidth,h:_54.offsetHeight};
+if(_54["offsetParent"]){
+ret.x-=_4e(_54,"scrollLeft");
+ret.y-=_4e(_54,"scrollTop");
+var _57=_54;
+do{
+var n=_57.offsetLeft,t=_57.offsetTop;
+ret.x+=isNaN(n)?0:n;
+ret.y+=isNaN(t)?0:t;
+cs=gcs(_57);
+if(_57!=_54){
+if(d.isMoz){
+ret.x+=2*px(_57,cs.borderLeftWidth);
+ret.y+=2*px(_57,cs.borderTopWidth);
+}else{
+ret.x+=px(_57,cs.borderLeftWidth);
+ret.y+=px(_57,cs.borderTopWidth);
+}
+}
+if(d.isMoz&&cs.position=="static"){
+var _58=_57.parentNode;
+while(_58!=_57.offsetParent){
+var pcs=gcs(_58);
+if(pcs.position=="static"){
+ret.x+=px(_57,pcs.borderLeftWidth);
+ret.y+=px(_57,pcs.borderTopWidth);
+}
+_58=_58.parentNode;
+}
+}
+_57=_57.offsetParent;
+}while((_57!=dh)&&_57);
+}else{
+if(_54.x&&_54.y){
+ret.x+=isNaN(_54.x)?0:_54.x;
+ret.y+=isNaN(_54.y)?0:_54.y;
+}
+}
+}
+if(_55){
+var _59=d._docScroll();
+ret.x+=_59.x;
+ret.y+=_59.y;
+}
+return ret;
+};
+dojo.coords=function(_5a,_5b){
+var n=_5(_5a),s=gcs(n),mb=d._getMarginBox(n,s);
+var abs=d.position(n,_5b);
+mb.x=abs.x;
+mb.y=abs.y;
+return mb;
+};
+var _5c={"class":"className","for":"htmlFor",tabindex:"tabIndex",readonly:"readOnly",colspan:"colSpan",frameborder:"frameBorder",rowspan:"rowSpan",valuetype:"valueType"},_5d={classname:"class",htmlfor:"for",tabindex:"tabIndex",readonly:"readOnly"},_5e={innerHTML:1,className:1,htmlFor:d.isIE,value:1};
+var _5f=function(_60){
+return _5d[_60.toLowerCase()]||_60;
+};
+var _61=function(_62,_63){
+var _64=_62.getAttributeNode&&_62.getAttributeNode(_63);
+return _64&&_64.specified;
+};
+dojo.hasAttr=function(_65,_66){
+var lc=_66.toLowerCase();
+return _5e[_5c[lc]||_66]||_61(_5(_65),_5d[lc]||_66);
+};
+var _67={},_68=0,_69=dojo._scopeName+"attrid",_6a={col:1,colgroup:1,table:1,tbody:1,tfoot:1,thead:1,tr:1,title:1};
+dojo.attr=function(_6b,_6c,_6d){
+_6b=_5(_6b);
+var _6e=arguments.length,_6f;
+if(_6e==2&&typeof _6c!="string"){
+for(var x in _6c){
+d.attr(_6b,x,_6c[x]);
+}
+return _6b;
+}
+var lc=_6c.toLowerCase(),_70=_5c[lc]||_6c,_71=_5e[_70],_72=_5d[lc]||_6c;
+if(_6e==3){
+do{
+if(_70=="style"&&typeof _6d!="string"){
+d.style(_6b,_6d);
+break;
+}
+if(_70=="innerHTML"){
+if(d.isIE&&_6b.tagName.toLowerCase() in _6a){
+d.empty(_6b);
+_6b.appendChild(d._toDom(_6d,_6b.ownerDocument));
+}else{
+_6b[_70]=_6d;
+}
+break;
+}
+if(d.isFunction(_6d)){
+var _73=d.attr(_6b,_69);
+if(!_73){
+_73=_68++;
+d.attr(_6b,_69,_73);
+}
+if(!_67[_73]){
+_67[_73]={};
+}
+var h=_67[_73][_70];
+if(h){
+d.disconnect(h);
+}else{
+try{
+delete _6b[_70];
+}
+catch(e){
+}
+}
+_67[_73][_70]=d.connect(_6b,_70,_6d);
+break;
+}
+if(_71||typeof _6d=="boolean"){
+_6b[_70]=_6d;
+break;
+}
+_6b.setAttribute(_72,_6d);
+}while(false);
+return _6b;
+}
+_6d=_6b[_70];
+if(_71&&typeof _6d!="undefined"){
+return _6d;
+}
+if(_70!="href"&&(typeof _6d=="boolean"||d.isFunction(_6d))){
+return _6d;
+}
+return _61(_6b,_72)?_6b.getAttribute(_72):null;
+};
+dojo.removeAttr=function(_74,_75){
+_5(_74).removeAttribute(_5f(_75));
+};
+dojo.getNodeProp=function(_76,_77){
+_76=_5(_76);
+var lc=_77.toLowerCase(),_78=_5c[lc]||_77;
+if((_78 in _76)&&_78!="href"){
+return _76[_78];
+}
+var _79=_5d[lc]||_77;
+return _61(_76,_79)?_76.getAttribute(_79):null;
+};
+dojo.create=function(tag,_7a,_7b,pos){
+var doc=d.doc;
+if(_7b){
+_7b=_5(_7b);
+doc=_7b.ownerDocument;
+}
+if(typeof tag=="string"){
+tag=doc.createElement(tag);
+}
+if(_7a){
+d.attr(tag,_7a);
+}
+if(_7b){
+d.place(tag,_7b,pos);
+}
+return tag;
+};
+d.empty=d.isIE?function(_7c){
+_7c=_5(_7c);
+for(var c;c=_7c.lastChild;){
+d.destroy(c);
+}
+}:function(_7d){
+_5(_7d).innerHTML="";
+};
+var _7e={option:["select"],tbody:["table"],thead:["table"],tfoot:["table"],tr:["table","tbody"],td:["table","tbody","tr"],th:["table","thead","tr"],legend:["fieldset"],caption:["table"],colgroup:["table"],col:["table","colgroup"],li:["ul"]},_7f=/<\s*([\w\:]+)/,_80={},_81=0,_82="__"+d._scopeName+"ToDomId";
+for(var _83 in _7e){
+var tw=_7e[_83];
+tw.pre=_83=="option"?"<select multiple=\"multiple\">":"<"+tw.join("><")+">";
+tw.post="</"+tw.reverse().join("></")+">";
+}
+d._toDom=function(_84,doc){
+doc=doc||d.doc;
+var _85=doc[_82];
+if(!_85){
+doc[_82]=_85=++_81+"";
+_80[_85]=doc.createElement("div");
+}
+_84+="";
+var _86=_84.match(_7f),tag=_86?_86[1].toLowerCase():"",_87=_80[_85],_88,i,fc,df;
+if(_86&&_7e[tag]){
+_88=_7e[tag];
+_87.innerHTML=_88.pre+_84+_88.post;
+for(i=_88.length;i;--i){
+_87=_87.firstChild;
+}
+}else{
+_87.innerHTML=_84;
+}
+if(_87.childNodes.length==1){
+return _87.removeChild(_87.firstChild);
+}
+df=doc.createDocumentFragment();
+while(fc=_87.firstChild){
+df.appendChild(fc);
+}
+return df;
+};
+var _89="className";
+dojo.hasClass=function(_8a,_8b){
+return ((" "+_5(_8a)[_89]+" ").indexOf(" "+_8b+" ")>=0);
+};
+var _8c=/\s+/,a1=[""],_8d=function(s){
+if(typeof s=="string"||s instanceof String){
+if(s.indexOf(" ")<0){
+a1[0]=s;
+return a1;
+}else{
+return s.split(_8c);
+}
+}
+return s||"";
+};
+dojo.addClass=function(_8e,_8f){
+_8e=_5(_8e);
+_8f=_8d(_8f);
+var cls=_8e[_89],_90;
+cls=cls?" "+cls+" ":" ";
+_90=cls.length;
+for(var i=0,len=_8f.length,c;i<len;++i){
+c=_8f[i];
+if(c&&cls.indexOf(" "+c+" ")<0){
+cls+=c+" ";
+}
+}
+if(_90<cls.length){
+_8e[_89]=cls.substr(1,cls.length-2);
+}
+};
+dojo.removeClass=function(_91,_92){
+_91=_5(_91);
+var cls;
+if(_92!==undefined){
+_92=_8d(_92);
+cls=" "+_91[_89]+" ";
+for(var i=0,len=_92.length;i<len;++i){
+cls=cls.replace(" "+_92[i]+" "," ");
+}
+cls=d.trim(cls);
+}else{
+cls="";
+}
+if(_91[_89]!=cls){
+_91[_89]=cls;
+}
+};
+dojo.toggleClass=function(_93,_94,_95){
+if(_95===undefined){
+_95=!d.hasClass(_93,_94);
+}
+d[_95?"addClass":"removeClass"](_93,_94);
+};
+})();
+}
Index: trunk/web/dojo/dojo/_base/query.js
===================================================================
--- trunk/web/dojo/dojo/_base/query.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/query.js	(revision 9)
@@ -0,0 +1,797 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.query"]){
+dojo._hasResource["dojo._base.query"]=true;
+if(typeof dojo!="undefined"){
+dojo.provide("dojo._base.query");
+dojo.require("dojo._base.NodeList");
+dojo.require("dojo._base.lang");
+}
+(function(d){
+var _1=d.trim;
+var _2=d.forEach;
+var _3=d._NodeListCtor=d.NodeList;
+var _4=function(){
+return d.doc;
+};
+var _5=((d.isWebKit||d.isMozilla)&&((_4().compatMode)=="BackCompat"));
+var _6=!!_4().firstChild["children"]?"children":"childNodes";
+var _7=">~+";
+var _8=false;
+var _9=function(){
+return true;
+};
+var _a=function(_b){
+if(_7.indexOf(_b.slice(-1))>=0){
+_b+=" * ";
+}else{
+_b+=" ";
+}
+var ts=function(s,e){
+return _1(_b.slice(s,e));
+};
+var _c=[];
+var _d=-1,_e=-1,_f=-1,_10=-1,_11=-1,_12=-1,_13=-1,lc="",cc="",_14;
+var x=0,ql=_b.length,_15=null,_16=null;
+var _17=function(){
+if(_13>=0){
+var tv=(_13==x)?null:ts(_13,x);
+_15[(_7.indexOf(tv)<0)?"tag":"oper"]=tv;
+_13=-1;
+}
+};
+var _18=function(){
+if(_12>=0){
+_15.id=ts(_12,x).replace(/\\/g,"");
+_12=-1;
+}
+};
+var _19=function(){
+if(_11>=0){
+_15.classes.push(ts(_11+1,x).replace(/\\/g,""));
+_11=-1;
+}
+};
+var _1a=function(){
+_18();
+_17();
+_19();
+};
+var _1b=function(){
+_1a();
+if(_10>=0){
+_15.pseudos.push({name:ts(_10+1,x)});
+}
+_15.loops=(_15.pseudos.length||_15.attrs.length||_15.classes.length);
+_15.oquery=_15.query=ts(_14,x);
+_15.otag=_15.tag=(_15["oper"])?null:(_15.tag||"*");
+if(_15.tag){
+_15.tag=_15.tag.toUpperCase();
+}
+if(_c.length&&(_c[_c.length-1].oper)){
+_15.infixOper=_c.pop();
+_15.query=_15.infixOper.query+" "+_15.query;
+}
+_c.push(_15);
+_15=null;
+};
+for(;lc=cc,cc=_b.charAt(x),x<ql;x++){
+if(lc=="\\"){
+continue;
+}
+if(!_15){
+_14=x;
+_15={query:null,pseudos:[],attrs:[],classes:[],tag:null,oper:null,id:null,getTag:function(){
+return (_8)?this.otag:this.tag;
+}};
+_13=x;
+}
+if(_d>=0){
+if(cc=="]"){
+if(!_16.attr){
+_16.attr=ts(_d+1,x);
+}else{
+_16.matchFor=ts((_f||_d+1),x);
+}
+var cmf=_16.matchFor;
+if(cmf){
+if((cmf.charAt(0)=="\"")||(cmf.charAt(0)=="'")){
+_16.matchFor=cmf.slice(1,-1);
+}
+}
+_15.attrs.push(_16);
+_16=null;
+_d=_f=-1;
+}else{
+if(cc=="="){
+var _1c=("|~^$*".indexOf(lc)>=0)?lc:"";
+_16.type=_1c+cc;
+_16.attr=ts(_d+1,x-_1c.length);
+_f=x+1;
+}
+}
+}else{
+if(_e>=0){
+if(cc==")"){
+if(_10>=0){
+_16.value=ts(_e+1,x);
+}
+_10=_e=-1;
+}
+}else{
+if(cc=="#"){
+_1a();
+_12=x+1;
+}else{
+if(cc=="."){
+_1a();
+_11=x;
+}else{
+if(cc==":"){
+_1a();
+_10=x;
+}else{
+if(cc=="["){
+_1a();
+_d=x;
+_16={};
+}else{
+if(cc=="("){
+if(_10>=0){
+_16={name:ts(_10+1,x),value:null};
+_15.pseudos.push(_16);
+}
+_e=x;
+}else{
+if((cc==" ")&&(lc!=cc)){
+_1b();
+}
+}
+}
+}
+}
+}
+}
+}
+}
+return _c;
+};
+var _1d=function(_1e,_1f){
+if(!_1e){
+return _1f;
+}
+if(!_1f){
+return _1e;
+}
+return function(){
+return _1e.apply(window,arguments)&&_1f.apply(window,arguments);
+};
+};
+var _20=function(i,arr){
+var r=arr||[];
+if(i){
+r.push(i);
+}
+return r;
+};
+var _21=function(n){
+return (1==n.nodeType);
+};
+var _22="";
+var _23=function(_24,_25){
+if(!_24){
+return _22;
+}
+if(_25=="class"){
+return _24.className||_22;
+}
+if(_25=="for"){
+return _24.htmlFor||_22;
+}
+if(_25=="style"){
+return _24.style.cssText||_22;
+}
+return (_8?_24.getAttribute(_25):_24.getAttribute(_25,2))||_22;
+};
+var _26={"*=":function(_27,_28){
+return function(_29){
+return (_23(_29,_27).indexOf(_28)>=0);
+};
+},"^=":function(_2a,_2b){
+return function(_2c){
+return (_23(_2c,_2a).indexOf(_2b)==0);
+};
+},"$=":function(_2d,_2e){
+var _2f=" "+_2e;
+return function(_30){
+var ea=" "+_23(_30,_2d);
+return (ea.lastIndexOf(_2e)==(ea.length-_2e.length));
+};
+},"~=":function(_31,_32){
+var _33=" "+_32+" ";
+return function(_34){
+var ea=" "+_23(_34,_31)+" ";
+return (ea.indexOf(_33)>=0);
+};
+},"|=":function(_35,_36){
+var _37=" "+_36+"-";
+return function(_38){
+var ea=" "+_23(_38,_35);
+return ((ea==_36)||(ea.indexOf(_37)==0));
+};
+},"=":function(_39,_3a){
+return function(_3b){
+return (_23(_3b,_39)==_3a);
+};
+}};
+var _3c=(typeof _4().firstChild.nextElementSibling=="undefined");
+var _3d=!_3c?"nextElementSibling":"nextSibling";
+var _3e=!_3c?"previousElementSibling":"previousSibling";
+var _3f=(_3c?_21:_9);
+var _40=function(_41){
+while(_41=_41[_3e]){
+if(_3f(_41)){
+return false;
+}
+}
+return true;
+};
+var _42=function(_43){
+while(_43=_43[_3d]){
+if(_3f(_43)){
+return false;
+}
+}
+return true;
+};
+var _44=function(_45){
+var _46=_45.parentNode;
+var i=0,_47=_46[_6],ci=(_45["_i"]||-1),cl=(_46["_l"]||-1);
+if(!_47){
+return -1;
+}
+var l=_47.length;
+if(cl==l&&ci>=0&&cl>=0){
+return ci;
+}
+_46["_l"]=l;
+ci=-1;
+for(var te=_46["firstElementChild"]||_46["firstChild"];te;te=te[_3d]){
+if(_3f(te)){
+te["_i"]=++i;
+if(_45===te){
+ci=i;
+}
+}
+}
+return ci;
+};
+var _48=function(_49){
+return !((_44(_49))%2);
+};
+var _4a=function(_4b){
+return ((_44(_4b))%2);
+};
+var _4c={"checked":function(_4d,_4e){
+return function(_4f){
+return !!("checked" in _4f?_4f.checked:_4f.selected);
+};
+},"first-child":function(){
+return _40;
+},"last-child":function(){
+return _42;
+},"only-child":function(_50,_51){
+return function(_52){
+if(!_40(_52)){
+return false;
+}
+if(!_42(_52)){
+return false;
+}
+return true;
+};
+},"empty":function(_53,_54){
+return function(_55){
+var cn=_55.childNodes;
+var cnl=_55.childNodes.length;
+for(var x=cnl-1;x>=0;x--){
+var nt=cn[x].nodeType;
+if((nt===1)||(nt==3)){
+return false;
+}
+}
+return true;
+};
+},"contains":function(_56,_57){
+var cz=_57.charAt(0);
+if(cz=="\""||cz=="'"){
+_57=_57.slice(1,-1);
+}
+return function(_58){
+return (_58.innerHTML.indexOf(_57)>=0);
+};
+},"not":function(_59,_5a){
+var p=_a(_5a)[0];
+var _5b={el:1};
+if(p.tag!="*"){
+_5b.tag=1;
+}
+if(!p.classes.length){
+_5b.classes=1;
+}
+var ntf=_5c(p,_5b);
+return function(_5d){
+return (!ntf(_5d));
+};
+},"nth-child":function(_5e,_5f){
+var pi=parseInt;
+if(_5f=="odd"){
+return _4a;
+}else{
+if(_5f=="even"){
+return _48;
+}
+}
+if(_5f.indexOf("n")!=-1){
+var _60=_5f.split("n",2);
+var _61=_60[0]?((_60[0]=="-")?-1:pi(_60[0])):1;
+var idx=_60[1]?pi(_60[1]):0;
+var lb=0,ub=-1;
+if(_61>0){
+if(idx<0){
+idx=(idx%_61)&&(_61+(idx%_61));
+}else{
+if(idx>0){
+if(idx>=_61){
+lb=idx-idx%_61;
+}
+idx=idx%_61;
+}
+}
+}else{
+if(_61<0){
+_61*=-1;
+if(idx>0){
+ub=idx;
+idx=idx%_61;
+}
+}
+}
+if(_61>0){
+return function(_62){
+var i=_44(_62);
+return (i>=lb)&&(ub<0||i<=ub)&&((i%_61)==idx);
+};
+}else{
+_5f=idx;
+}
+}
+var _63=pi(_5f);
+return function(_64){
+return (_44(_64)==_63);
+};
+}};
+var _65=(d.isIE)?function(_66){
+var clc=_66.toLowerCase();
+if(clc=="class"){
+_66="className";
+}
+return function(_67){
+return (_8?_67.getAttribute(_66):_67[_66]||_67[clc]);
+};
+}:function(_68){
+return function(_69){
+return (_69&&_69.getAttribute&&_69.hasAttribute(_68));
+};
+};
+var _5c=function(_6a,_6b){
+if(!_6a){
+return _9;
+}
+_6b=_6b||{};
+var ff=null;
+if(!("el" in _6b)){
+ff=_1d(ff,_21);
+}
+if(!("tag" in _6b)){
+if(_6a.tag!="*"){
+ff=_1d(ff,function(_6c){
+return (_6c&&(_6c.tagName==_6a.getTag()));
+});
+}
+}
+if(!("classes" in _6b)){
+_2(_6a.classes,function(_6d,idx,arr){
+var re=new RegExp("(?:^|\\s)"+_6d+"(?:\\s|$)");
+ff=_1d(ff,function(_6e){
+return re.test(_6e.className);
+});
+ff.count=idx;
+});
+}
+if(!("pseudos" in _6b)){
+_2(_6a.pseudos,function(_6f){
+var pn=_6f.name;
+if(_4c[pn]){
+ff=_1d(ff,_4c[pn](pn,_6f.value));
+}
+});
+}
+if(!("attrs" in _6b)){
+_2(_6a.attrs,function(_70){
+var _71;
+var a=_70.attr;
+if(_70.type&&_26[_70.type]){
+_71=_26[_70.type](a,_70.matchFor);
+}else{
+if(a.length){
+_71=_65(a);
+}
+}
+if(_71){
+ff=_1d(ff,_71);
+}
+});
+}
+if(!("id" in _6b)){
+if(_6a.id){
+ff=_1d(ff,function(_72){
+return (!!_72&&(_72.id==_6a.id));
+});
+}
+}
+if(!ff){
+if(!("default" in _6b)){
+ff=_9;
+}
+}
+return ff;
+};
+var _73=function(_74){
+return function(_75,ret,bag){
+while(_75=_75[_3d]){
+if(_3c&&(!_21(_75))){
+continue;
+}
+if((!bag||_76(_75,bag))&&_74(_75)){
+ret.push(_75);
+}
+break;
+}
+return ret;
+};
+};
+var _77=function(_78){
+return function(_79,ret,bag){
+var te=_79[_3d];
+while(te){
+if(_3f(te)){
+if(bag&&!_76(te,bag)){
+break;
+}
+if(_78(te)){
+ret.push(te);
+}
+}
+te=te[_3d];
+}
+return ret;
+};
+};
+var _7a=function(_7b){
+_7b=_7b||_9;
+return function(_7c,ret,bag){
+var te,x=0,_7d=_7c[_6];
+while(te=_7d[x++]){
+if(_3f(te)&&(!bag||_76(te,bag))&&(_7b(te,x))){
+ret.push(te);
+}
+}
+return ret;
+};
+};
+var _7e=function(_7f,_80){
+var pn=_7f.parentNode;
+while(pn){
+if(pn==_80){
+break;
+}
+pn=pn.parentNode;
+}
+return !!pn;
+};
+var _81={};
+var _82=function(_83){
+var _84=_81[_83.query];
+if(_84){
+return _84;
+}
+var io=_83.infixOper;
+var _85=(io?io.oper:"");
+var _86=_5c(_83,{el:1});
+var qt=_83.tag;
+var _87=("*"==qt);
+var ecs=_4()["getElementsByClassName"];
+if(!_85){
+if(_83.id){
+_86=(!_83.loops&&_87)?_9:_5c(_83,{el:1,id:1});
+_84=function(_88,arr){
+var te=d.byId(_83.id,(_88.ownerDocument||_88));
+if(!te||!_86(te)){
+return;
+}
+if(9==_88.nodeType){
+return _20(te,arr);
+}else{
+if(_7e(te,_88)){
+return _20(te,arr);
+}
+}
+};
+}else{
+if(ecs&&/\{\s*\[native code\]\s*\}/.test(String(ecs))&&_83.classes.length&&!_5){
+_86=_5c(_83,{el:1,classes:1,id:1});
+var _89=_83.classes.join(" ");
+_84=function(_8a,arr,bag){
+var ret=_20(0,arr),te,x=0;
+var _8b=_8a.getElementsByClassName(_89);
+while((te=_8b[x++])){
+if(_86(te,_8a)&&_76(te,bag)){
+ret.push(te);
+}
+}
+return ret;
+};
+}else{
+if(!_87&&!_83.loops){
+_84=function(_8c,arr,bag){
+var ret=_20(0,arr),te,x=0;
+var _8d=_8c.getElementsByTagName(_83.getTag());
+while((te=_8d[x++])){
+if(_76(te,bag)){
+ret.push(te);
+}
+}
+return ret;
+};
+}else{
+_86=_5c(_83,{el:1,tag:1,id:1});
+_84=function(_8e,arr,bag){
+var ret=_20(0,arr),te,x=0;
+var _8f=_8e.getElementsByTagName(_83.getTag());
+while((te=_8f[x++])){
+if(_86(te,_8e)&&_76(te,bag)){
+ret.push(te);
+}
+}
+return ret;
+};
+}
+}
+}
+}else{
+var _90={el:1};
+if(_87){
+_90.tag=1;
+}
+_86=_5c(_83,_90);
+if("+"==_85){
+_84=_73(_86);
+}else{
+if("~"==_85){
+_84=_77(_86);
+}else{
+if(">"==_85){
+_84=_7a(_86);
+}
+}
+}
+}
+return _81[_83.query]=_84;
+};
+var _91=function(_92,_93){
+var _94=_20(_92),qp,x,te,qpl=_93.length,bag,ret;
+for(var i=0;i<qpl;i++){
+ret=[];
+qp=_93[i];
+x=_94.length-1;
+if(x>0){
+bag={};
+ret.nozip=true;
+}
+var gef=_82(qp);
+for(var j=0;(te=_94[j]);j++){
+gef(te,ret,bag);
+}
+if(!ret.length){
+break;
+}
+_94=ret;
+}
+return ret;
+};
+var _95={},_96={};
+var _97=function(_98){
+var _99=_a(_1(_98));
+if(_99.length==1){
+var tef=_82(_99[0]);
+return function(_9a){
+var r=tef(_9a,new _3());
+if(r){
+r.nozip=true;
+}
+return r;
+};
+}
+return function(_9b){
+return _91(_9b,_99);
+};
+};
+var nua=navigator.userAgent;
+var wk="WebKit/";
+var _9c=(d.isWebKit&&(nua.indexOf(wk)>0)&&(parseFloat(nua.split(wk)[1])>528));
+var _9d=d.isIE?"commentStrip":"nozip";
+var qsa="querySelectorAll";
+var _9e=(!!_4()[qsa]&&(!d.isSafari||(d.isSafari>3.1)||_9c));
+var _9f=/n\+\d|([^ ])?([>~+])([^ =])?/g;
+var _a0=function(_a1,pre,ch,_a2){
+return ch?(pre?pre+" ":"")+ch+(_a2?" "+_a2:""):_a1;
+};
+var _a3=function(_a4,_a5){
+_a4=_a4.replace(_9f,_a0);
+if(_9e){
+var _a6=_96[_a4];
+if(_a6&&!_a5){
+return _a6;
+}
+}
+var _a7=_95[_a4];
+if(_a7){
+return _a7;
+}
+var qcz=_a4.charAt(0);
+var _a8=(-1==_a4.indexOf(" "));
+if((_a4.indexOf("#")>=0)&&(_a8)){
+_a5=true;
+}
+var _a9=(_9e&&(!_a5)&&(_7.indexOf(qcz)==-1)&&(!d.isIE||(_a4.indexOf(":")==-1))&&(!(_5&&(_a4.indexOf(".")>=0)))&&(_a4.indexOf(":contains")==-1)&&(_a4.indexOf(":checked")==-1)&&(_a4.indexOf("|=")==-1));
+if(_a9){
+var tq=(_7.indexOf(_a4.charAt(_a4.length-1))>=0)?(_a4+" *"):_a4;
+return _96[_a4]=function(_aa){
+try{
+if(!((9==_aa.nodeType)||_a8)){
+throw "";
+}
+var r=_aa[qsa](tq);
+r[_9d]=true;
+return r;
+}
+catch(e){
+return _a3(_a4,true)(_aa);
+}
+};
+}else{
+var _ab=_a4.split(/\s*,\s*/);
+return _95[_a4]=((_ab.length<2)?_97(_a4):function(_ac){
+var _ad=0,ret=[],tp;
+while((tp=_ab[_ad++])){
+ret=ret.concat(_97(tp)(_ac));
+}
+return ret;
+});
+}
+};
+var _ae=0;
+var _af=d.isIE?function(_b0){
+if(_8){
+return (_b0.getAttribute("_uid")||_b0.setAttribute("_uid",++_ae)||_ae);
+}else{
+return _b0.uniqueID;
+}
+}:function(_b1){
+return (_b1._uid||(_b1._uid=++_ae));
+};
+var _76=function(_b2,bag){
+if(!bag){
+return 1;
+}
+var id=_af(_b2);
+if(!bag[id]){
+return bag[id]=1;
+}
+return 0;
+};
+var _b3="_zipIdx";
+var _b4=function(arr){
+if(arr&&arr.nozip){
+return (_3._wrap)?_3._wrap(arr):arr;
+}
+var ret=new _3();
+if(!arr||!arr.length){
+return ret;
+}
+if(arr[0]){
+ret.push(arr[0]);
+}
+if(arr.length<2){
+return ret;
+}
+_ae++;
+if(d.isIE&&_8){
+var _b5=_ae+"";
+arr[0].setAttribute(_b3,_b5);
+for(var x=1,te;te=arr[x];x++){
+if(arr[x].getAttribute(_b3)!=_b5){
+ret.push(te);
+}
+te.setAttribute(_b3,_b5);
+}
+}else{
+if(d.isIE&&arr.commentStrip){
+try{
+for(var x=1,te;te=arr[x];x++){
+if(_21(te)){
+ret.push(te);
+}
+}
+}
+catch(e){
+}
+}else{
+if(arr[0]){
+arr[0][_b3]=_ae;
+}
+for(var x=1,te;te=arr[x];x++){
+if(arr[x][_b3]!=_ae){
+ret.push(te);
+}
+te[_b3]=_ae;
+}
+}
+}
+return ret;
+};
+d.query=function(_b6,_b7){
+_3=d._NodeListCtor;
+if(!_b6){
+return new _3();
+}
+if(_b6.constructor==_3){
+return _b6;
+}
+if(typeof _b6!="string"){
+return new _3(_b6);
+}
+if(typeof _b7=="string"){
+_b7=d.byId(_b7);
+if(!_b7){
+return new _3();
+}
+}
+_b7=_b7||_4();
+var od=_b7.ownerDocument||_b7.documentElement;
+_8=(_b7.contentType&&_b7.contentType=="application/xml")||(d.isOpera&&(_b7.doctype||od.toString()=="[object XMLDocument]"))||(!!od)&&(d.isIE?od.xml:(_b7.xmlVersion||od.xmlVersion));
+var r=_a3(_b6)(_b7);
+if(r&&r.nozip&&!_3._wrap){
+return r;
+}
+return _b4(r);
+};
+d.query.pseudos=_4c;
+d._filterQueryResult=function(_b8,_b9){
+var _ba=new d._NodeListCtor();
+var _bb=_5c(_a(_b9)[0]);
+for(var x=0,te;te=_b8[x];x++){
+if(_bb(te)){
+_ba.push(te);
+}
+}
+return _ba;
+};
+})(this["queryPortability"]||this["acme"]||dojo);
+}
Index: trunk/web/dojo/dojo/_base/window.js
===================================================================
--- trunk/web/dojo/dojo/_base/window.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/window.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.window"]){
+dojo._hasResource["dojo._base.window"]=true;
+dojo.provide("dojo._base.window");
+dojo.doc=window["document"]||null;
+dojo.body=function(){
+return dojo.doc.body||dojo.doc.getElementsByTagName("body")[0];
+};
+dojo.setContext=function(_1,_2){
+dojo.global=_1;
+dojo.doc=_2;
+};
+dojo.withGlobal=function(_3,_4,_5,_6){
+var _7=dojo.global;
+try{
+dojo.global=_3;
+return dojo.withDoc.call(null,_3.document,_4,_5,_6);
+}
+finally{
+dojo.global=_7;
+}
+};
+dojo.withDoc=function(_8,_9,_a,_b){
+var _c=dojo.doc,_d=dojo._bodyLtr,_e=dojo.isQuirks;
+try{
+dojo.doc=_8;
+delete dojo._bodyLtr;
+dojo.isQuirks=dojo.doc.compatMode=="BackCompat";
+if(_a&&typeof _9=="string"){
+_9=_a[_9];
+}
+return _9.apply(_a,_b||[]);
+}
+finally{
+dojo.doc=_c;
+delete dojo._bodyLtr;
+if(_d!==undefined){
+dojo._bodyLtr=_d;
+}
+dojo.isQuirks=_e;
+}
+};
+}
Index: trunk/web/dojo/dojo/_base/json.js
===================================================================
--- trunk/web/dojo/dojo/_base/json.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/json.js	(revision 9)
@@ -0,0 +1,81 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.json"]){
+dojo._hasResource["dojo._base.json"]=true;
+dojo.provide("dojo._base.json");
+dojo.fromJson=function(_1){
+return eval("("+_1+")");
+};
+dojo._escapeString=function(_2){
+return ("\""+_2.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
+};
+dojo.toJsonIndentStr="\t";
+dojo.toJson=function(it,_3,_4){
+if(it===undefined){
+return "undefined";
+}
+var _5=typeof it;
+if(_5=="number"||_5=="boolean"){
+return it+"";
+}
+if(it===null){
+return "null";
+}
+if(dojo.isString(it)){
+return dojo._escapeString(it);
+}
+var _6=arguments.callee;
+var _7;
+_4=_4||"";
+var _8=_3?_4+dojo.toJsonIndentStr:"";
+var tf=it.__json__||it.json;
+if(dojo.isFunction(tf)){
+_7=tf.call(it);
+if(it!==_7){
+return _6(_7,_3,_8);
+}
+}
+if(it.nodeType&&it.cloneNode){
+throw new Error("Can't serialize DOM nodes");
+}
+var _9=_3?" ":"";
+var _a=_3?"\n":"";
+if(dojo.isArray(it)){
+var _b=dojo.map(it,function(_c){
+var _d=_6(_c,_3,_8);
+if(typeof _d!="string"){
+_d="undefined";
+}
+return _a+_8+_d;
+});
+return "["+_b.join(","+_9)+_a+_4+"]";
+}
+if(_5=="function"){
+return null;
+}
+var _e=[],_f;
+for(_f in it){
+var _10,val;
+if(typeof _f=="number"){
+_10="\""+_f+"\"";
+}else{
+if(typeof _f=="string"){
+_10=dojo._escapeString(_f);
+}else{
+continue;
+}
+}
+val=_6(it[_f],_3,_8);
+if(typeof val!="string"){
+continue;
+}
+_e.push(_a+_8+_10+":"+_9+val);
+}
+return "{"+_e.join(","+_9)+_a+_4+"}";
+};
+}
Index: trunk/web/dojo/dojo/_base/fx.js
===================================================================
--- trunk/web/dojo/dojo/_base/fx.js	(revision 0)
+++ trunk/web/dojo/dojo/_base/fx.js	(revision 9)
@@ -0,0 +1,302 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base.fx"]){
+dojo._hasResource["dojo._base.fx"]=true;
+dojo.provide("dojo._base.fx");
+dojo.require("dojo._base.Color");
+dojo.require("dojo._base.connect");
+dojo.require("dojo._base.lang");
+dojo.require("dojo._base.html");
+(function(){
+var d=dojo;
+var _1=d._mixin;
+dojo._Line=function(_2,_3){
+this.start=_2;
+this.end=_3;
+};
+dojo._Line.prototype.getValue=function(n){
+return ((this.end-this.start)*n)+this.start;
+};
+dojo.Animation=function(_4){
+_1(this,_4);
+if(d.isArray(this.curve)){
+this.curve=new d._Line(this.curve[0],this.curve[1]);
+}
+};
+d._Animation=d.Animation;
+d.extend(dojo.Animation,{duration:350,repeat:0,rate:20,_percent:0,_startRepeatCount:0,_getStep:function(){
+var _5=this._percent,_6=this.easing;
+return _6?_6(_5):_5;
+},_fire:function(_7,_8){
+var a=_8||[];
+if(this[_7]){
+if(d.config.debugAtAllCosts){
+this[_7].apply(this,a);
+}else{
+try{
+this[_7].apply(this,a);
+}
+catch(e){
+console.error("exception in animation handler for:",_7);
+console.error(e);
+}
+}
+}
+return this;
+},play:function(_9,_a){
+var _b=this;
+if(_b._delayTimer){
+_b._clearTimer();
+}
+if(_a){
+_b._stopTimer();
+_b._active=_b._paused=false;
+_b._percent=0;
+}else{
+if(_b._active&&!_b._paused){
+return _b;
+}
+}
+_b._fire("beforeBegin",[_b.node]);
+var de=_9||_b.delay,_c=dojo.hitch(_b,"_play",_a);
+if(de>0){
+_b._delayTimer=setTimeout(_c,de);
+return _b;
+}
+_c();
+return _b;
+},_play:function(_d){
+var _e=this;
+if(_e._delayTimer){
+_e._clearTimer();
+}
+_e._startTime=new Date().valueOf();
+if(_e._paused){
+_e._startTime-=_e.duration*_e._percent;
+}
+_e._active=true;
+_e._paused=false;
+var _f=_e.curve.getValue(_e._getStep());
+if(!_e._percent){
+if(!_e._startRepeatCount){
+_e._startRepeatCount=_e.repeat;
+}
+_e._fire("onBegin",[_f]);
+}
+_e._fire("onPlay",[_f]);
+_e._cycle();
+return _e;
+},pause:function(){
+var _10=this;
+if(_10._delayTimer){
+_10._clearTimer();
+}
+_10._stopTimer();
+if(!_10._active){
+return _10;
+}
+_10._paused=true;
+_10._fire("onPause",[_10.curve.getValue(_10._getStep())]);
+return _10;
+},gotoPercent:function(_11,_12){
+var _13=this;
+_13._stopTimer();
+_13._active=_13._paused=true;
+_13._percent=_11;
+if(_12){
+_13.play();
+}
+return _13;
+},stop:function(_14){
+var _15=this;
+if(_15._delayTimer){
+_15._clearTimer();
+}
+if(!_15._timer){
+return _15;
+}
+_15._stopTimer();
+if(_14){
+_15._percent=1;
+}
+_15._fire("onStop",[_15.curve.getValue(_15._getStep())]);
+_15._active=_15._paused=false;
+return _15;
+},status:function(){
+if(this._active){
+return this._paused?"paused":"playing";
+}
+return "stopped";
+},_cycle:function(){
+var _16=this;
+if(_16._active){
+var _17=new Date().valueOf();
+var _18=(_17-_16._startTime)/(_16.duration);
+if(_18>=1){
+_18=1;
+}
+_16._percent=_18;
+if(_16.easing){
+_18=_16.easing(_18);
+}
+_16._fire("onAnimate",[_16.curve.getValue(_18)]);
+if(_16._percent<1){
+_16._startTimer();
+}else{
+_16._active=false;
+if(_16.repeat>0){
+_16.repeat--;
+_16.play(null,true);
+}else{
+if(_16.repeat==-1){
+_16.play(null,true);
+}else{
+if(_16._startRepeatCount){
+_16.repeat=_16._startRepeatCount;
+_16._startRepeatCount=0;
+}
+}
+}
+_16._percent=0;
+_16._fire("onEnd",[_16.node]);
+!_16.repeat&&_16._stopTimer();
+}
+}
+return _16;
+},_clearTimer:function(){
+clearTimeout(this._delayTimer);
+delete this._delayTimer;
+}});
+var ctr=0,_19=null,_1a={run:function(){
+}};
+d.extend(d.Animation,{_startTimer:function(){
+if(!this._timer){
+this._timer=d.connect(_1a,"run",this,"_cycle");
+ctr++;
+}
+if(!_19){
+_19=setInterval(d.hitch(_1a,"run"),this.rate);
+}
+},_stopTimer:function(){
+if(this._timer){
+d.disconnect(this._timer);
+this._timer=null;
+ctr--;
+}
+if(ctr<=0){
+clearInterval(_19);
+_19=null;
+ctr=0;
+}
+}});
+var _1b=d.isIE?function(_1c){
+var ns=_1c.style;
+if(!ns.width.length&&d.style(_1c,"width")=="auto"){
+ns.width="auto";
+}
+}:function(){
+};
+dojo._fade=function(_1d){
+_1d.node=d.byId(_1d.node);
+var _1e=_1({properties:{}},_1d),_1f=(_1e.properties.opacity={});
+_1f.start=!("start" in _1e)?function(){
+return +d.style(_1e.node,"opacity")||0;
+}:_1e.start;
+_1f.end=_1e.end;
+var _20=d.animateProperty(_1e);
+d.connect(_20,"beforeBegin",d.partial(_1b,_1e.node));
+return _20;
+};
+dojo.fadeIn=function(_21){
+return d._fade(_1({end:1},_21));
+};
+dojo.fadeOut=function(_22){
+return d._fade(_1({end:0},_22));
+};
+dojo._defaultEasing=function(n){
+return 0.5+((Math.sin((n+1.5)*Math.PI))/2);
+};
+var _23=function(_24){
+this._properties=_24;
+for(var p in _24){
+var _25=_24[p];
+if(_25.start instanceof d.Color){
+_25.tempColor=new d.Color();
+}
+}
+};
+_23.prototype.getValue=function(r){
+var ret={};
+for(var p in this._properties){
+var _26=this._properties[p],_27=_26.start;
+if(_27 instanceof d.Color){
+ret[p]=d.blendColors(_27,_26.end,r,_26.tempColor).toCss();
+}else{
+if(!d.isArray(_27)){
+ret[p]=((_26.end-_27)*r)+_27+(p!="opacity"?_26.units||"px":0);
+}
+}
+}
+return ret;
+};
+dojo.animateProperty=function(_28){
+var n=_28.node=d.byId(_28.node);
+if(!_28.easing){
+_28.easing=d._defaultEasing;
+}
+var _29=new d.Animation(_28);
+d.connect(_29,"beforeBegin",_29,function(){
+var pm={};
+for(var p in this.properties){
+if(p=="width"||p=="height"){
+this.node.display="block";
+}
+var _2a=this.properties[p];
+if(d.isFunction(_2a)){
+_2a=_2a(n);
+}
+_2a=pm[p]=_1({},(d.isObject(_2a)?_2a:{end:_2a}));
+if(d.isFunction(_2a.start)){
+_2a.start=_2a.start(n);
+}
+if(d.isFunction(_2a.end)){
+_2a.end=_2a.end(n);
+}
+var _2b=(p.toLowerCase().indexOf("color")>=0);
+function _2c(_2d,p){
+var v={height:_2d.offsetHeight,width:_2d.offsetWidth}[p];
+if(v!==undefined){
+return v;
+}
+v=d.style(_2d,p);
+return (p=="opacity")?+v:(_2b?v:parseFloat(v));
+};
+if(!("end" in _2a)){
+_2a.end=_2c(n,p);
+}else{
+if(!("start" in _2a)){
+_2a.start=_2c(n,p);
+}
+}
+if(_2b){
+_2a.start=new d.Color(_2a.start);
+_2a.end=new d.Color(_2a.end);
+}else{
+_2a.start=(p=="opacity")?+_2a.start:parseFloat(_2a.start);
+}
+}
+this.curve=new _23(pm);
+});
+d.connect(_29,"onAnimate",d.hitch(d,"style",_29.node));
+return _29;
+};
+dojo.anim=function(_2e,_2f,_30,_31,_32,_33){
+return d.animateProperty({node:_2e,duration:_30||d.Animation.prototype.duration,properties:_2f,easing:_31,onEnd:_32}).play(_33||0);
+};
+})();
+}
Index: trunk/web/dojo/dojo/back.js
===================================================================
--- trunk/web/dojo/dojo/back.js	(revision 0)
+++ trunk/web/dojo/dojo/back.js	(revision 9)
@@ -0,0 +1,258 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.back"]){
+dojo._hasResource["dojo.back"]=true;
+dojo.provide("dojo.back");
+(function(){
+var _1=dojo.back;
+function _2(){
+var h=window.location.hash;
+if(h.charAt(0)=="#"){
+h=h.substring(1);
+}
+return dojo.isMozilla?h:decodeURIComponent(h);
+};
+function _3(h){
+if(!h){
+h="";
+}
+window.location.hash=encodeURIComponent(h);
+_4=history.length;
+};
+if(dojo.exists("tests.back-hash")){
+_1.getHash=_2;
+_1.setHash=_3;
+}
+var _5=(typeof (window)!=="undefined")?window.location.href:"";
+var _6=(typeof (window)!=="undefined")?_2():"";
+var _7=null;
+var _8=null;
+var _9=null;
+var _a=null;
+var _b=[];
+var _c=[];
+var _d=false;
+var _e=false;
+var _4;
+function _f(){
+var _10=_c.pop();
+if(!_10){
+return;
+}
+var _11=_c[_c.length-1];
+if(!_11&&_c.length==0){
+_11=_7;
+}
+if(_11){
+if(_11.kwArgs["back"]){
+_11.kwArgs["back"]();
+}else{
+if(_11.kwArgs["backButton"]){
+_11.kwArgs["backButton"]();
+}else{
+if(_11.kwArgs["handle"]){
+_11.kwArgs.handle("back");
+}
+}
+}
+}
+_b.push(_10);
+};
+_1.goBack=_f;
+function _12(){
+var _13=_b.pop();
+if(!_13){
+return;
+}
+if(_13.kwArgs["forward"]){
+_13.kwArgs.forward();
+}else{
+if(_13.kwArgs["forwardButton"]){
+_13.kwArgs.forwardButton();
+}else{
+if(_13.kwArgs["handle"]){
+_13.kwArgs.handle("forward");
+}
+}
+}
+_c.push(_13);
+};
+_1.goForward=_12;
+function _14(url,_15,_16){
+return {"url":url,"kwArgs":_15,"urlHash":_16};
+};
+function _17(url){
+var _18=url.split("?");
+if(_18.length<2){
+return null;
+}else{
+return _18[1];
+}
+};
+function _19(){
+var url=(dojo.config["dojoIframeHistoryUrl"]||dojo.moduleUrl("dojo","resources/iframe_history.html"))+"?"+(new Date()).getTime();
+_d=true;
+if(_a){
+dojo.isWebKit?_a.location=url:window.frames[_a.name].location=url;
+}else{
+}
+return url;
+};
+function _1a(){
+if(!_e){
+var hsl=_c.length;
+var _1b=_2();
+if((_1b===_6||window.location.href==_5)&&(hsl==1)){
+_f();
+return;
+}
+if(_b.length>0){
+if(_b[_b.length-1].urlHash===_1b){
+_12();
+return;
+}
+}
+if((hsl>=2)&&(_c[hsl-2])){
+if(_c[hsl-2].urlHash===_1b){
+_f();
+return;
+}
+}
+if(dojo.isSafari&&dojo.isSafari<3){
+var _1c=history.length;
+if(_1c>_4){
+_12();
+}else{
+if(_1c<_4){
+_f();
+}
+}
+_4=_1c;
+}
+}
+};
+_1.init=function(){
+if(dojo.byId("dj_history")){
+return;
+}
+var src=dojo.config["dojoIframeHistoryUrl"]||dojo.moduleUrl("dojo","resources/iframe_history.html");
+if(dojo._postLoad){
+console.error("dojo.back.init() must be called before the DOM has loaded. "+"If using xdomain loading or djConfig.debugAtAllCosts, include dojo.back "+"in a build layer.");
+}else{
+document.write("<iframe style=\"border:0;width:1px;height:1px;position:absolute;visibility:hidden;bottom:0;right:0;\" name=\"dj_history\" id=\"dj_history\" src=\""+src+"\"></iframe>");
+}
+};
+_1.setInitialState=function(_1d){
+_7=_14(_5,_1d,_6);
+};
+_1.addToHistory=function(_1e){
+_b=[];
+var _1f=null;
+var url=null;
+if(!_a){
+if(dojo.config["useXDomain"]&&!dojo.config["dojoIframeHistoryUrl"]){
+console.warn("dojo.back: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");
+}
+_a=window.frames["dj_history"];
+}
+if(!_9){
+_9=dojo.create("a",{style:{display:"none"}},dojo.body());
+}
+if(_1e["changeUrl"]){
+_1f=""+((_1e["changeUrl"]!==true)?_1e["changeUrl"]:(new Date()).getTime());
+if(_c.length==0&&_7.urlHash==_1f){
+_7=_14(url,_1e,_1f);
+return;
+}else{
+if(_c.length>0&&_c[_c.length-1].urlHash==_1f){
+_c[_c.length-1]=_14(url,_1e,_1f);
+return;
+}
+}
+_e=true;
+setTimeout(function(){
+_3(_1f);
+_e=false;
+},1);
+_9.href=_1f;
+if(dojo.isIE){
+url=_19();
+var _20=_1e["back"]||_1e["backButton"]||_1e["handle"];
+var tcb=function(_21){
+if(_2()!=""){
+setTimeout(function(){
+_3(_1f);
+},1);
+}
+_20.apply(this,[_21]);
+};
+if(_1e["back"]){
+_1e.back=tcb;
+}else{
+if(_1e["backButton"]){
+_1e.backButton=tcb;
+}else{
+if(_1e["handle"]){
+_1e.handle=tcb;
+}
+}
+}
+var _22=_1e["forward"]||_1e["forwardButton"]||_1e["handle"];
+var tfw=function(_23){
+if(_2()!=""){
+_3(_1f);
+}
+if(_22){
+_22.apply(this,[_23]);
+}
+};
+if(_1e["forward"]){
+_1e.forward=tfw;
+}else{
+if(_1e["forwardButton"]){
+_1e.forwardButton=tfw;
+}else{
+if(_1e["handle"]){
+_1e.handle=tfw;
+}
+}
+}
+}else{
+if(!dojo.isIE){
+if(!_8){
+_8=setInterval(_1a,200);
+}
+}
+}
+}else{
+url=_19();
+}
+_c.push(_14(url,_1e,_1f));
+};
+_1._iframeLoaded=function(evt,_24){
+var _25=_17(_24.href);
+if(_25==null){
+if(_c.length==1){
+_f();
+}
+return;
+}
+if(_d){
+_d=false;
+return;
+}
+if(_c.length>=2&&_25==_17(_c[_c.length-2].url)){
+_f();
+}else{
+if(_b.length>0&&_25==_17(_b[_b.length-1].url)){
+_12();
+}
+}
+};
+})();
+}
Index: trunk/web/dojo/dojo/fx/Toggler.js
===================================================================
--- trunk/web/dojo/dojo/fx/Toggler.js	(revision 0)
+++ trunk/web/dojo/dojo/fx/Toggler.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.fx.Toggler"]){
+dojo._hasResource["dojo.fx.Toggler"]=true;
+dojo.provide("dojo.fx.Toggler");
+dojo.declare("dojo.fx.Toggler",null,{node:null,showFunc:dojo.fadeIn,hideFunc:dojo.fadeOut,showDuration:200,hideDuration:200,constructor:function(_1){
+var _2=this;
+dojo.mixin(_2,_1);
+_2.node=_1.node;
+_2._showArgs=dojo.mixin({},_1);
+_2._showArgs.node=_2.node;
+_2._showArgs.duration=_2.showDuration;
+_2.showAnim=_2.showFunc(_2._showArgs);
+_2._hideArgs=dojo.mixin({},_1);
+_2._hideArgs.node=_2.node;
+_2._hideArgs.duration=_2.hideDuration;
+_2.hideAnim=_2.hideFunc(_2._hideArgs);
+dojo.connect(_2.showAnim,"beforeBegin",dojo.hitch(_2.hideAnim,"stop",true));
+dojo.connect(_2.hideAnim,"beforeBegin",dojo.hitch(_2.showAnim,"stop",true));
+},show:function(_3){
+return this.showAnim.play(_3||0);
+},hide:function(_4){
+return this.hideAnim.play(_4||0);
+}});
+}
Index: trunk/web/dojo/dojo/fx/easing.js
===================================================================
--- trunk/web/dojo/dojo/fx/easing.js	(revision 0)
+++ trunk/web/dojo/dojo/fx/easing.js	(revision 9)
@@ -0,0 +1,166 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.fx.easing"]){
+dojo._hasResource["dojo.fx.easing"]=true;
+dojo.provide("dojo.fx.easing");
+dojo.fx.easing={linear:function(n){
+return n;
+},quadIn:function(n){
+return Math.pow(n,2);
+},quadOut:function(n){
+return n*(n-2)*-1;
+},quadInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,2)/2;
+}
+return -1*((--n)*(n-2)-1)/2;
+},cubicIn:function(n){
+return Math.pow(n,3);
+},cubicOut:function(n){
+return Math.pow(n-1,3)+1;
+},cubicInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,3)/2;
+}
+n-=2;
+return (Math.pow(n,3)+2)/2;
+},quartIn:function(n){
+return Math.pow(n,4);
+},quartOut:function(n){
+return -1*(Math.pow(n-1,4)-1);
+},quartInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,4)/2;
+}
+n-=2;
+return -1/2*(Math.pow(n,4)-2);
+},quintIn:function(n){
+return Math.pow(n,5);
+},quintOut:function(n){
+return Math.pow(n-1,5)+1;
+},quintInOut:function(n){
+n=n*2;
+if(n<1){
+return Math.pow(n,5)/2;
+}
+n-=2;
+return (Math.pow(n,5)+2)/2;
+},sineIn:function(n){
+return -1*Math.cos(n*(Math.PI/2))+1;
+},sineOut:function(n){
+return Math.sin(n*(Math.PI/2));
+},sineInOut:function(n){
+return -1*(Math.cos(Math.PI*n)-1)/2;
+},expoIn:function(n){
+return (n==0)?0:Math.pow(2,10*(n-1));
+},expoOut:function(n){
+return (n==1)?1:(-1*Math.pow(2,-10*n)+1);
+},expoInOut:function(n){
+if(n==0){
+return 0;
+}
+if(n==1){
+return 1;
+}
+n=n*2;
+if(n<1){
+return Math.pow(2,10*(n-1))/2;
+}
+--n;
+return (-1*Math.pow(2,-10*n)+2)/2;
+},circIn:function(n){
+return -1*(Math.sqrt(1-Math.pow(n,2))-1);
+},circOut:function(n){
+n=n-1;
+return Math.sqrt(1-Math.pow(n,2));
+},circInOut:function(n){
+n=n*2;
+if(n<1){
+return -1/2*(Math.sqrt(1-Math.pow(n,2))-1);
+}
+n-=2;
+return 1/2*(Math.sqrt(1-Math.pow(n,2))+1);
+},backIn:function(n){
+var s=1.70158;
+return Math.pow(n,2)*((s+1)*n-s);
+},backOut:function(n){
+n=n-1;
+var s=1.70158;
+return Math.pow(n,2)*((s+1)*n+s)+1;
+},backInOut:function(n){
+var s=1.70158*1.525;
+n=n*2;
+if(n<1){
+return (Math.pow(n,2)*((s+1)*n-s))/2;
+}
+n-=2;
+return (Math.pow(n,2)*((s+1)*n+s)+2)/2;
+},elasticIn:function(n){
+if(n==0||n==1){
+return n;
+}
+var p=0.3;
+var s=p/4;
+n=n-1;
+return -1*Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p);
+},elasticOut:function(n){
+if(n==0||n==1){
+return n;
+}
+var p=0.3;
+var s=p/4;
+return Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p)+1;
+},elasticInOut:function(n){
+if(n==0){
+return 0;
+}
+n=n*2;
+if(n==2){
+return 1;
+}
+var p=0.3*1.5;
+var s=p/4;
+if(n<1){
+n-=1;
+return -0.5*(Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p));
+}
+n-=1;
+return 0.5*(Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p))+1;
+},bounceIn:function(n){
+return (1-dojo.fx.easing.bounceOut(1-n));
+},bounceOut:function(n){
+var s=7.5625;
+var p=2.75;
+var l;
+if(n<(1/p)){
+l=s*Math.pow(n,2);
+}else{
+if(n<(2/p)){
+n-=(1.5/p);
+l=s*Math.pow(n,2)+0.75;
+}else{
+if(n<(2.5/p)){
+n-=(2.25/p);
+l=s*Math.pow(n,2)+0.9375;
+}else{
+n-=(2.625/p);
+l=s*Math.pow(n,2)+0.984375;
+}
+}
+}
+return l;
+},bounceInOut:function(n){
+if(n<0.5){
+return dojo.fx.easing.bounceIn(n*2)/2;
+}
+return (dojo.fx.easing.bounceOut(n*2-1)/2)+0.5;
+}};
+}
Index: trunk/web/dojo/dojo/date/locale.js
===================================================================
--- trunk/web/dojo/dojo/date/locale.js	(revision 0)
+++ trunk/web/dojo/dojo/date/locale.js	(revision 9)
@@ -0,0 +1,464 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.date.locale"]){
+dojo._hasResource["dojo.date.locale"]=true;
+dojo.provide("dojo.date.locale");
+dojo.require("dojo.date");
+dojo.require("dojo.cldr.supplemental");
+dojo.require("dojo.regexp");
+dojo.require("dojo.string");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","gregorian",null,"ROOT,ar,ca,cs,da,de,el,en,en-au,en-ca,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh,zh-tw");
+(function(){
+function _1(_2,_3,_4,_5){
+return _5.replace(/([a-z])\1*/ig,function(_6){
+var s,_7,c=_6.charAt(0),l=_6.length,_8=["abbr","wide","narrow"];
+switch(c){
+case "G":
+s=_3[(l<4)?"eraAbbr":"eraNames"][_2.getFullYear()<0?0:1];
+break;
+case "y":
+s=_2.getFullYear();
+switch(l){
+case 1:
+break;
+case 2:
+if(!_4.fullYear){
+s=String(s);
+s=s.substr(s.length-2);
+break;
+}
+default:
+_7=true;
+}
+break;
+case "Q":
+case "q":
+s=Math.ceil((_2.getMonth()+1)/3);
+_7=true;
+break;
+case "M":
+var m=_2.getMonth();
+if(l<3){
+s=m+1;
+_7=true;
+}else{
+var _9=["months","format",_8[l-3]].join("-");
+s=_3[_9][m];
+}
+break;
+case "w":
+var _a=0;
+s=dojo.date.locale._getWeekOfYear(_2,_a);
+_7=true;
+break;
+case "d":
+s=_2.getDate();
+_7=true;
+break;
+case "D":
+s=dojo.date.locale._getDayOfYear(_2);
+_7=true;
+break;
+case "E":
+var d=_2.getDay();
+if(l<3){
+s=d+1;
+_7=true;
+}else{
+var _b=["days","format",_8[l-3]].join("-");
+s=_3[_b][d];
+}
+break;
+case "a":
+var _c=(_2.getHours()<12)?"am":"pm";
+s=_3["dayPeriods-format-wide-"+_c];
+break;
+case "h":
+case "H":
+case "K":
+case "k":
+var h=_2.getHours();
+switch(c){
+case "h":
+s=(h%12)||12;
+break;
+case "H":
+s=h;
+break;
+case "K":
+s=(h%12);
+break;
+case "k":
+s=h||24;
+break;
+}
+_7=true;
+break;
+case "m":
+s=_2.getMinutes();
+_7=true;
+break;
+case "s":
+s=_2.getSeconds();
+_7=true;
+break;
+case "S":
+s=Math.round(_2.getMilliseconds()*Math.pow(10,l-3));
+_7=true;
+break;
+case "v":
+case "z":
+s=dojo.date.locale._getZone(_2,true,_4);
+if(s){
+break;
+}
+l=4;
+case "Z":
+var _d=dojo.date.locale._getZone(_2,false,_4);
+var tz=[(_d<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_d)/60),2),dojo.string.pad(Math.abs(_d)%60,2)];
+if(l==4){
+tz.splice(0,0,"GMT");
+tz.splice(3,0,":");
+}
+s=tz.join("");
+break;
+default:
+throw new Error("dojo.date.locale.format: invalid pattern char: "+_5);
+}
+if(_7){
+s=dojo.string.pad(s,l);
+}
+return s;
+});
+};
+dojo.date.locale._getZone=function(_e,_f,_10){
+if(_f){
+return dojo.date.getTimezoneName(_e);
+}else{
+return _e.getTimezoneOffset();
+}
+};
+dojo.date.locale.format=function(_11,_12){
+_12=_12||{};
+var _13=dojo.i18n.normalizeLocale(_12.locale),_14=_12.formatLength||"short",_15=dojo.date.locale._getGregorianBundle(_13),str=[],_16=dojo.hitch(this,_1,_11,_15,_12);
+if(_12.selector=="year"){
+return _17(_15["dateFormatItem-yyyy"]||"yyyy",_16);
+}
+var _18;
+if(_12.selector!="date"){
+_18=_12.timePattern||_15["timeFormat-"+_14];
+if(_18){
+str.push(_17(_18,_16));
+}
+}
+if(_12.selector!="time"){
+_18=_12.datePattern||_15["dateFormat-"+_14];
+if(_18){
+str.push(_17(_18,_16));
+}
+}
+return str.length==1?str[0]:_15["dateTimeFormat-"+_14].replace(/\{(\d+)\}/g,function(_19,key){
+return str[key];
+});
+};
+dojo.date.locale.regexp=function(_1a){
+return dojo.date.locale._parseInfo(_1a).regexp;
+};
+dojo.date.locale._parseInfo=function(_1b){
+_1b=_1b||{};
+var _1c=dojo.i18n.normalizeLocale(_1b.locale),_1d=dojo.date.locale._getGregorianBundle(_1c),_1e=_1b.formatLength||"short",_1f=_1b.datePattern||_1d["dateFormat-"+_1e],_20=_1b.timePattern||_1d["timeFormat-"+_1e],_21;
+if(_1b.selector=="date"){
+_21=_1f;
+}else{
+if(_1b.selector=="time"){
+_21=_20;
+}else{
+_21=_1d["dateTimeFormat-"+_1e].replace(/\{(\d+)\}/g,function(_22,key){
+return [_20,_1f][key];
+});
+}
+}
+var _23=[],re=_17(_21,dojo.hitch(this,_24,_23,_1d,_1b));
+return {regexp:re,tokens:_23,bundle:_1d};
+};
+dojo.date.locale.parse=function(_25,_26){
+var _27=dojo.date.locale._parseInfo(_26),_28=_27.tokens,_29=_27.bundle,re=new RegExp("^"+_27.regexp+"$",_27.strict?"":"i"),_2a=re.exec(_25);
+if(!_2a){
+return null;
+}
+var _2b=["abbr","wide","narrow"],_2c=[1970,0,1,0,0,0,0],_2d="",_2e=dojo.every(_2a,function(v,i){
+if(!i){
+return true;
+}
+var _2f=_28[i-1];
+var l=_2f.length;
+switch(_2f.charAt(0)){
+case "y":
+if(l!=2&&_26.strict){
+_2c[0]=v;
+}else{
+if(v<100){
+v=Number(v);
+var _30=""+new Date().getFullYear(),_31=_30.substring(0,2)*100,_32=Math.min(Number(_30.substring(2,4))+20,99),num=(v<_32)?_31+v:_31-100+v;
+_2c[0]=num;
+}else{
+if(_26.strict){
+return false;
+}
+_2c[0]=v;
+}
+}
+break;
+case "M":
+if(l>2){
+var _33=_29["months-format-"+_2b[l-3]].concat();
+if(!_26.strict){
+v=v.replace(".","").toLowerCase();
+_33=dojo.map(_33,function(s){
+return s.replace(".","").toLowerCase();
+});
+}
+v=dojo.indexOf(_33,v);
+if(v==-1){
+return false;
+}
+}else{
+v--;
+}
+_2c[1]=v;
+break;
+case "E":
+case "e":
+var _34=_29["days-format-"+_2b[l-3]].concat();
+if(!_26.strict){
+v=v.toLowerCase();
+_34=dojo.map(_34,function(d){
+return d.toLowerCase();
+});
+}
+v=dojo.indexOf(_34,v);
+if(v==-1){
+return false;
+}
+break;
+case "D":
+_2c[1]=0;
+case "d":
+_2c[2]=v;
+break;
+case "a":
+var am=_26.am||_29["dayPeriods-format-wide-am"],pm=_26.pm||_29["dayPeriods-format-wide-pm"];
+if(!_26.strict){
+var _35=/\./g;
+v=v.replace(_35,"").toLowerCase();
+am=am.replace(_35,"").toLowerCase();
+pm=pm.replace(_35,"").toLowerCase();
+}
+if(_26.strict&&v!=am&&v!=pm){
+return false;
+}
+_2d=(v==pm)?"p":(v==am)?"a":"";
+break;
+case "K":
+if(v==24){
+v=0;
+}
+case "h":
+case "H":
+case "k":
+if(v>23){
+return false;
+}
+_2c[3]=v;
+break;
+case "m":
+_2c[4]=v;
+break;
+case "s":
+_2c[5]=v;
+break;
+case "S":
+_2c[6]=v;
+}
+return true;
+});
+var _36=+_2c[3];
+if(_2d==="p"&&_36<12){
+_2c[3]=_36+12;
+}else{
+if(_2d==="a"&&_36==12){
+_2c[3]=0;
+}
+}
+var _37=new Date(_2c[0],_2c[1],_2c[2],_2c[3],_2c[4],_2c[5],_2c[6]);
+if(_26.strict){
+_37.setFullYear(_2c[0]);
+}
+var _38=_28.join(""),_39=_38.indexOf("d")!=-1,_3a=_38.indexOf("M")!=-1;
+if(!_2e||(_3a&&_37.getMonth()>_2c[1])||(_39&&_37.getDate()>_2c[2])){
+return null;
+}
+if((_3a&&_37.getMonth()<_2c[1])||(_39&&_37.getDate()<_2c[2])){
+_37=dojo.date.add(_37,"hour",1);
+}
+return _37;
+};
+function _17(_3b,_3c,_3d,_3e){
+var _3f=function(x){
+return x;
+};
+_3c=_3c||_3f;
+_3d=_3d||_3f;
+_3e=_3e||_3f;
+var _40=_3b.match(/(''|[^'])+/g),_41=_3b.charAt(0)=="'";
+dojo.forEach(_40,function(_42,i){
+if(!_42){
+_40[i]="";
+}else{
+_40[i]=(_41?_3d:_3c)(_42.replace(/''/g,"'"));
+_41=!_41;
+}
+});
+return _3e(_40.join(""));
+};
+function _24(_43,_44,_45,_46){
+_46=dojo.regexp.escapeString(_46);
+if(!_45.strict){
+_46=_46.replace(" a"," ?a");
+}
+return _46.replace(/([a-z])\1*/ig,function(_47){
+var s,c=_47.charAt(0),l=_47.length,p2="",p3="";
+if(_45.strict){
+if(l>1){
+p2="0"+"{"+(l-1)+"}";
+}
+if(l>2){
+p3="0"+"{"+(l-2)+"}";
+}
+}else{
+p2="0?";
+p3="0{0,2}";
+}
+switch(c){
+case "y":
+s="\\d{2,4}";
+break;
+case "M":
+s=(l>2)?"\\S+?":p2+"[1-9]|1[0-2]";
+break;
+case "D":
+s=p2+"[1-9]|"+p3+"[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]";
+break;
+case "d":
+s="3[01]|[12]\\d|"+p2+"[1-9]";
+break;
+case "w":
+s=p2+"[1-9]|[1-4][0-9]|5[0-3]";
+break;
+case "E":
+s="\\S+";
+break;
+case "h":
+s=p2+"[1-9]|1[0-2]";
+break;
+case "k":
+s=p2+"\\d|1[01]";
+break;
+case "H":
+s=p2+"\\d|1\\d|2[0-3]";
+break;
+case "K":
+s=p2+"[1-9]|1\\d|2[0-4]";
+break;
+case "m":
+case "s":
+s="[0-5]\\d";
+break;
+case "S":
+s="\\d{"+l+"}";
+break;
+case "a":
+var am=_45.am||_44["dayPeriods-format-wide-am"],pm=_45.pm||_44["dayPeriods-format-wide-pm"];
+if(_45.strict){
+s=am+"|"+pm;
+}else{
+s=am+"|"+pm;
+if(am!=am.toLowerCase()){
+s+="|"+am.toLowerCase();
+}
+if(pm!=pm.toLowerCase()){
+s+="|"+pm.toLowerCase();
+}
+if(s.indexOf(".")!=-1){
+s+="|"+s.replace(/\./g,"");
+}
+}
+s=s.replace(/\./g,"\\.");
+break;
+default:
+s=".*";
+}
+if(_43){
+_43.push(_47);
+}
+return "("+s+")";
+}).replace(/[\xa0 ]/g,"[\\s\\xa0]");
+};
+})();
+(function(){
+var _48=[];
+dojo.date.locale.addCustomFormats=function(_49,_4a){
+_48.push({pkg:_49,name:_4a});
+};
+dojo.date.locale._getGregorianBundle=function(_4b){
+var _4c={};
+dojo.forEach(_48,function(_4d){
+var _4e=dojo.i18n.getLocalization(_4d.pkg,_4d.name,_4b);
+_4c=dojo.mixin(_4c,_4e);
+},this);
+return _4c;
+};
+})();
+dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");
+dojo.date.locale.getNames=function(_4f,_50,_51,_52){
+var _53,_54=dojo.date.locale._getGregorianBundle(_52),_55=[_4f,_51,_50];
+if(_51=="standAlone"){
+var key=_55.join("-");
+_53=_54[key];
+if(_53[0]==1){
+_53=undefined;
+}
+}
+_55[1]="format";
+return (_53||_54[_55.join("-")]).concat();
+};
+dojo.date.locale.isWeekend=function(_56,_57){
+var _58=dojo.cldr.supplemental.getWeekend(_57),day=(_56||new Date()).getDay();
+if(_58.end<_58.start){
+_58.end+=7;
+if(day<_58.start){
+day+=7;
+}
+}
+return day>=_58.start&&day<=_58.end;
+};
+dojo.date.locale._getDayOfYear=function(_59){
+return dojo.date.difference(new Date(_59.getFullYear(),0,1,_59.getHours()),_59)+1;
+};
+dojo.date.locale._getWeekOfYear=function(_5a,_5b){
+if(arguments.length==1){
+_5b=0;
+}
+var _5c=new Date(_5a.getFullYear(),0,1).getDay(),adj=(_5c-_5b+7)%7,_5d=Math.floor((dojo.date.locale._getDayOfYear(_5a)+adj-1)/7);
+if(_5c==_5b){
+_5d++;
+}
+return _5d;
+};
+}
Index: trunk/web/dojo/dojo/date/stamp.js
===================================================================
--- trunk/web/dojo/dojo/date/stamp.js	(revision 0)
+++ trunk/web/dojo/dojo/date/stamp.js	(revision 9)
@@ -0,0 +1,82 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.date.stamp"]){
+dojo._hasResource["dojo.date.stamp"]=true;
+dojo.provide("dojo.date.stamp");
+dojo.date.stamp.fromISOString=function(_1,_2){
+if(!dojo.date.stamp._isoRegExp){
+dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
+}
+var _3=dojo.date.stamp._isoRegExp.exec(_1),_4=null;
+if(_3){
+_3.shift();
+if(_3[1]){
+_3[1]--;
+}
+if(_3[6]){
+_3[6]*=1000;
+}
+if(_2){
+_2=new Date(_2);
+dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_5){
+return _2["get"+_5]();
+}),function(_6,_7){
+_3[_7]=_3[_7]||_6;
+});
+}
+_4=new Date(_3[0]||1970,_3[1]||0,_3[2]||1,_3[3]||0,_3[4]||0,_3[5]||0,_3[6]||0);
+if(_3[0]<100){
+_4.setFullYear(_3[0]||1970);
+}
+var _8=0,_9=_3[7]&&_3[7].charAt(0);
+if(_9!="Z"){
+_8=((_3[8]||0)*60)+(Number(_3[9])||0);
+if(_9!="-"){
+_8*=-1;
+}
+}
+if(_9){
+_8-=_4.getTimezoneOffset();
+}
+if(_8){
+_4.setTime(_4.getTime()+_8*60000);
+}
+}
+return _4;
+};
+dojo.date.stamp.toISOString=function(_a,_b){
+var _c=function(n){
+return (n<10)?"0"+n:n;
+};
+_b=_b||{};
+var _d=[],_e=_b.zulu?"getUTC":"get",_f="";
+if(_b.selector!="time"){
+var _10=_a[_e+"FullYear"]();
+_f=["0000".substr((_10+"").length)+_10,_c(_a[_e+"Month"]()+1),_c(_a[_e+"Date"]())].join("-");
+}
+_d.push(_f);
+if(_b.selector!="date"){
+var _11=[_c(_a[_e+"Hours"]()),_c(_a[_e+"Minutes"]()),_c(_a[_e+"Seconds"]())].join(":");
+var _12=_a[_e+"Milliseconds"]();
+if(_b.milliseconds){
+_11+="."+(_12<100?"0":"")+_c(_12);
+}
+if(_b.zulu){
+_11+="Z";
+}else{
+if(_b.selector!="time"){
+var _13=_a.getTimezoneOffset();
+var _14=Math.abs(_13);
+_11+=(_13>0?"-":"+")+_c(Math.floor(_14/60))+":"+_c(_14%60);
+}
+}
+_d.push(_11);
+}
+return _d.join("T");
+};
+}
Index: trunk/web/dojo/dojo/cache.js
===================================================================
--- trunk/web/dojo/dojo/cache.js	(revision 0)
+++ trunk/web/dojo/dojo/cache.js	(revision 9)
@@ -0,0 +1,54 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.cache"]){
+dojo._hasResource["dojo.cache"]=true;
+dojo.provide("dojo.cache");
+(function(){
+var _1={};
+dojo.cache=function(_2,_3,_4){
+if(typeof _2=="string"){
+var _5=dojo.moduleUrl(_2,_3);
+}else{
+_5=_2;
+_4=_3;
+}
+var _6=_5.toString();
+var _7=_4;
+if(_4!=undefined&&!dojo.isString(_4)){
+_7=("value" in _4?_4.value:undefined);
+}
+var _8=_4&&_4.sanitize?true:false;
+if(typeof _7=="string"){
+_7=_1[_6]=_8?dojo.cache._sanitize(_7):_7;
+}else{
+if(_7===null){
+delete _1[_6];
+}else{
+if(!(_6 in _1)){
+_7=dojo._getText(_6);
+_1[_6]=_8?dojo.cache._sanitize(_7):_7;
+}
+_7=_1[_6];
+}
+}
+return _7;
+};
+dojo.cache._sanitize=function(_9){
+if(_9){
+_9=_9.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");
+var _a=_9.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+if(_a){
+_9=_a[1];
+}
+}else{
+_9="";
+}
+return _9;
+};
+})();
+}
Index: trunk/web/dojo/dojo/OpenAjax.js
===================================================================
--- trunk/web/dojo/dojo/OpenAjax.js	(revision 0)
+++ trunk/web/dojo/dojo/OpenAjax.js	(revision 9)
@@ -0,0 +1,155 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!window["OpenAjax"]){
+OpenAjax=new function(){
+var t=true;
+var f=false;
+var g=window;
+var _1;
+var _2="org.openajax.hub.";
+var h={};
+this.hub=h;
+h.implementer="http://openajax.org";
+h.implVersion="0.6";
+h.specVersion="0.6";
+h.implExtraData={};
+var _1={};
+h.libraries=_1;
+h.registerLibrary=function(_3,_4,_5,_6){
+_1[_3]={prefix:_3,namespaceURI:_4,version:_5,extraData:_6};
+this.publish(_2+"registerLibrary",_1[_3]);
+};
+h.unregisterLibrary=function(_7){
+this.publish(_2+"unregisterLibrary",_1[_7]);
+delete _1[_7];
+};
+h._subscriptions={c:{},s:[]};
+h._cleanup=[];
+h._subIndex=0;
+h._pubDepth=0;
+h.subscribe=function(_8,_9,_a,_b,_c){
+if(!_a){
+_a=window;
+}
+var _d=_8+"."+this._subIndex;
+var _e={scope:_a,cb:_9,fcb:_c,data:_b,sid:this._subIndex++,hdl:_d};
+var _f=_8.split(".");
+this._subscribe(this._subscriptions,_f,0,_e);
+return _d;
+};
+h.publish=function(_10,_11){
+var _12=_10.split(".");
+this._pubDepth++;
+this._publish(this._subscriptions,_12,0,_10,_11);
+this._pubDepth--;
+if((this._cleanup.length>0)&&(this._pubDepth==0)){
+for(var i=0;i<this._cleanup.length;i++){
+this.unsubscribe(this._cleanup[i].hdl);
+}
+delete (this._cleanup);
+this._cleanup=[];
+}
+};
+h.unsubscribe=function(sub){
+var _13=sub.split(".");
+var sid=_13.pop();
+this._unsubscribe(this._subscriptions,_13,0,sid);
+};
+h._subscribe=function(_14,_15,_16,sub){
+var _17=_15[_16];
+if(_16==_15.length){
+_14.s.push(sub);
+}else{
+if(typeof _14.c=="undefined"){
+_14.c={};
+}
+if(typeof _14.c[_17]=="undefined"){
+_14.c[_17]={c:{},s:[]};
+this._subscribe(_14.c[_17],_15,_16+1,sub);
+}else{
+this._subscribe(_14.c[_17],_15,_16+1,sub);
+}
+}
+};
+h._publish=function(_18,_19,_1a,_1b,msg){
+if(typeof _18!="undefined"){
+var _1c;
+if(_1a==_19.length){
+_1c=_18;
+}else{
+this._publish(_18.c[_19[_1a]],_19,_1a+1,_1b,msg);
+this._publish(_18.c["*"],_19,_1a+1,_1b,msg);
+_1c=_18.c["**"];
+}
+if(typeof _1c!="undefined"){
+var _1d=_1c.s;
+var max=_1d.length;
+for(var i=0;i<max;i++){
+if(_1d[i].cb){
+var sc=_1d[i].scope;
+var cb=_1d[i].cb;
+var fcb=_1d[i].fcb;
+var d=_1d[i].data;
+if(typeof cb=="string"){
+cb=sc[cb];
+}
+if(typeof fcb=="string"){
+fcb=sc[fcb];
+}
+if((!fcb)||(fcb.call(sc,_1b,msg,d))){
+cb.call(sc,_1b,msg,d);
+}
+}
+}
+}
+}
+};
+h._unsubscribe=function(_1e,_1f,_20,sid){
+if(typeof _1e!="undefined"){
+if(_20<_1f.length){
+var _21=_1e.c[_1f[_20]];
+this._unsubscribe(_21,_1f,_20+1,sid);
+if(_21.s.length==0){
+for(var x in _21.c){
+return;
+}
+delete _1e.c[_1f[_20]];
+}
+return;
+}else{
+var _22=_1e.s;
+var max=_22.length;
+for(var i=0;i<max;i++){
+if(sid==_22[i].sid){
+if(this._pubDepth>0){
+_22[i].cb=null;
+this._cleanup.push(_22[i]);
+}else{
+_22.splice(i,1);
+}
+return;
+}
+}
+}
+}
+};
+h.reinit=function(){
+for(var lib in OpenAjax.hub.libraries){
+delete OpenAjax.hub.libraries[lib];
+}
+OpenAjax.hub.registerLibrary("OpenAjax","http://openajax.org/hub","0.6",{});
+delete OpenAjax._subscriptions;
+OpenAjax._subscriptions={c:{},s:[]};
+delete OpenAjax._cleanup;
+OpenAjax._cleanup=[];
+OpenAjax._subIndex=0;
+OpenAjax._pubDepth=0;
+};
+};
+OpenAjax.hub.registerLibrary("OpenAjax","http://openajax.org/hub","0.6",{});
+}
Index: trunk/web/dojo/dojo/string.js
===================================================================
--- trunk/web/dojo/dojo/string.js	(revision 0)
+++ trunk/web/dojo/dojo/string.js	(revision 9)
@@ -0,0 +1,57 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.string"]){
+dojo._hasResource["dojo.string"]=true;
+dojo.provide("dojo.string");
+dojo.string.rep=function(_1,_2){
+if(_2<=0||!_1){
+return "";
+}
+var _3=[];
+for(;;){
+if(_2&1){
+_3.push(_1);
+}
+if(!(_2>>=1)){
+break;
+}
+_1+=_1;
+}
+return _3.join("");
+};
+dojo.string.pad=function(_4,_5,ch,_6){
+if(!ch){
+ch="0";
+}
+var _7=String(_4),_8=dojo.string.rep(ch,Math.ceil((_5-_7.length)/ch.length));
+return _6?_7+_8:_8+_7;
+};
+dojo.string.substitute=function(_9,_a,_b,_c){
+_c=_c||dojo.global;
+_b=_b?dojo.hitch(_c,_b):function(v){
+return v;
+};
+return _9.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_d,_e,_f){
+var _10=dojo.getObject(_e,false,_a);
+if(_f){
+_10=dojo.getObject(_f,false,_c).call(_c,_10,_e);
+}
+return _b(_10,_e).toString();
+});
+};
+dojo.string.trim=String.prototype.trim?dojo.trim:function(str){
+str=str.replace(/^\s+/,"");
+for(var i=str.length-1;i>=0;i--){
+if(/\S/.test(str.charAt(i))){
+str=str.substring(0,i+1);
+break;
+}
+}
+return str;
+};
+}
Index: trunk/web/dojo/dojo/LICENSE
===================================================================
--- trunk/web/dojo/dojo/LICENSE	(revision 0)
+++ trunk/web/dojo/dojo/LICENSE	(revision 9)
@@ -0,0 +1,195 @@
+Dojo is available under *either* the terms of the modified BSD license *or* the
+Academic Free License version 2.1. As a recipient of Dojo, you may choose which
+license to receive this code under (except as noted in per-module LICENSE
+files). Some modules may not be the copyright of the Dojo Foundation. These
+modules contain explicit declarations of copyright in both the LICENSE files in
+the directories in which they reside and in the code itself. No external
+contributions are allowed under licenses which are fundamentally incompatible
+with the AFL or BSD licenses that Dojo is distributed under.
+
+The text of the AFL and BSD licenses is reproduced below. 
+
+-------------------------------------------------------------------------------
+The "New" BSD License:
+**********************
+
+Copyright (c) 2005-2010, The Dojo Foundation
+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 Dojo Foundation 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.
+
+-------------------------------------------------------------------------------
+The Academic Free License, v. 2.1:
+**********************************
+
+This Academic Free License (the "License") applies to any original work of
+authorship (the "Original Work") whose owner (the "Licensor") has placed the
+following notice immediately following the copyright notice for the Original
+Work:
+
+Licensed under the Academic Free License version 2.1
+
+1) Grant of Copyright License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license to do the
+following:
+
+a) to reproduce the Original Work in copies;
+
+b) to prepare derivative works ("Derivative Works") based upon the Original
+Work;
+
+c) to distribute copies of the Original Work and Derivative Works to the
+public;
+
+d) to perform the Original Work publicly; and
+
+e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
+claims owned or controlled by the Licensor that are embodied in the Original
+Work as furnished by the Licensor, to make, use, sell and offer for sale the
+Original Work and Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred
+form of the Original Work for making modifications to it and all available
+documentation describing how to modify the Original Work. Licensor hereby
+agrees to provide a machine-readable copy of the Source Code of the Original
+Work along with each copy of the Original Work that Licensor distributes.
+Licensor reserves the right to satisfy this obligation by placing a
+machine-readable copy of the Source Code in an information repository
+reasonably calculated to permit inexpensive and convenient access by You for as
+long as Licensor continues to distribute the Original Work, and by publishing
+the address of that information repository in a notice immediately following
+the copyright notice that applies to the Original Work.
+
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names
+of any contributors to the Original Work, nor any of their trademarks or
+service marks, may be used to endorse or promote products derived from this
+Original Work without express prior written permission of the Licensor. Nothing
+in this License shall be deemed to grant any rights to trademarks, copyrights,
+patents, trade secrets or any other intellectual property of Licensor except as
+expressly stated herein. No patent license is granted to make, use, sell or
+offer to sell embodiments of any patent claims other than the licensed claims
+defined in Section 2. No right is granted to the trademarks of Licensor even if
+such marks are included in the Original Work. Nothing in this License shall be
+interpreted to prohibit Licensor from licensing under different terms from this
+License any Original Work that Licensor otherwise would have a right to
+license.
+
+5) This section intentionally omitted.
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative
+Works that You create, all copyright, patent or trademark notices from the
+Source Code of the Original Work, as well as any notices of licensing and any
+descriptive text identified therein as an "Attribution Notice." You must cause
+the Source Code for any Derivative Works that You create to carry a prominent
+Attribution Notice reasonably calculated to inform recipients that You have
+modified the Original Work.
+
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
+the copyright in and to the Original Work and the patent rights granted herein
+by Licensor are owned by the Licensor or are sublicensed to You under the terms
+of this License with the permission of the contributor(s) of those copyrights
+and patent rights. Except as expressly stated in the immediately proceeding
+sentence, the Original Work is provided under this License on an "AS IS" BASIS
+and WITHOUT WARRANTY, either express or implied, including, without limitation,
+the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
+This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
+license to Original Work is granted hereunder except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory,
+whether in tort (including negligence), contract, or otherwise, shall the
+Licensor be liable to any person for any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License
+or the use of the Original Work including, without limitation, damages for loss
+of goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses. This limitation of liability shall not
+apply to liability for death or personal injury resulting from Licensor's
+negligence to the extent applicable law prohibits such limitation. Some
+jurisdictions do not allow the exclusion or limitation of incidental or
+consequential damages, so this exclusion and limitation may not apply to You.
+
+9) Acceptance and Termination. If You distribute copies of the Original Work or
+a Derivative Work, You must make a reasonable effort under the circumstances to
+obtain the express assent of recipients to the terms of this License. Nothing
+else but this License (or another written agreement between Licensor and You)
+grants You permission to create Derivative Works based upon the Original Work
+or to exercise any of the rights granted in Section 1 herein, and any attempt
+to do so except under the terms of this License (or another written agreement
+between Licensor and You) is expressly prohibited by U.S. copyright law, the
+equivalent laws of other countries, and by international treaty. Therefore, by
+exercising any of the rights granted to You in Section 1 herein, You indicate
+Your acceptance of this License and all of its terms and conditions.
+
+10) Termination for Patent Action. This License shall terminate automatically
+and You may no longer exercise any of the rights granted to You by this License
+as of the date You commence an action, including a cross-claim or counterclaim,
+against Licensor or any licensee alleging that the Original Work infringes a
+patent. This termination provision shall not apply for an action alleging
+patent infringement by combinations of the Original Work with other software or
+hardware.
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
+License may be brought only in the courts of a jurisdiction wherein the
+Licensor resides or in which Licensor conducts its primary business, and under
+the laws of that jurisdiction excluding its conflict-of-law provisions. The
+application of the United Nations Convention on Contracts for the International
+Sale of Goods is expressly excluded. Any use of the Original Work outside the
+scope of this License or after its termination shall be subject to the
+requirements and penalties of the U.S. Copyright Act, 17 U.S.C. Â§ 101 et
+seq., the equivalent laws of other countries, and international treaty. This
+section shall survive the termination of this License.
+
+12) Attorneys Fees. In any action to enforce the terms of this License or
+seeking damages relating thereto, the prevailing party shall be entitled to
+recover its costs and expenses, including, without limitation, reasonable
+attorneys' fees and costs incurred in connection with such action, including
+any appeal of such action. This section shall survive the termination of this
+License.
+
+13) Miscellaneous. This License represents the complete agreement concerning
+the subject matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent necessary to
+make it enforceable.
+
+14) Definition of "You" in This License. "You" throughout this License, whether
+in upper or lower case, means an individual or a legal entity exercising rights
+under, and complying with all of the terms of, this License. For legal
+entities, "You" includes any entity that controls, is controlled by, or is
+under common control with you. For purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty percent
+(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
+entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise
+restricted or conditioned by this License or by law, and Licensor promises not
+to interfere with or be responsible for such uses by You.
+
+This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
+Permission is hereby granted to copy and distribute this license without
+modification. This license may not be modified without the express written
+permission of its copyright owner.
Index: trunk/web/dojo/dojo/window.js
===================================================================
--- trunk/web/dojo/dojo/window.js	(revision 0)
+++ trunk/web/dojo/dojo/window.js	(revision 9)
@@ -0,0 +1,113 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.window"]){
+dojo._hasResource["dojo.window"]=true;
+dojo.provide("dojo.window");
+dojo.window.getBox=function(){
+var _1=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;
+var _2=dojo._docScroll();
+return {w:_1.clientWidth,h:_1.clientHeight,l:_2.x,t:_2.y};
+};
+dojo.window.get=function(_3){
+if(dojo.isIE&&window!==document.parentWindow){
+_3.parentWindow.execScript("document._parentWindow = window;","Javascript");
+var _4=_3._parentWindow;
+_3._parentWindow=null;
+return _4;
+}
+return _3.parentWindow||_3.defaultView;
+};
+dojo.window.scrollIntoView=function(_5,_6){
+try{
+_5=dojo.byId(_5);
+var _7=_5.ownerDocument||dojo.doc,_8=_7.body||dojo.body(),_9=_7.documentElement||_8.parentNode,_a=dojo.isIE,_b=dojo.isWebKit;
+if((!(dojo.isMoz||_a||_b||dojo.isOpera)||_5==_8||_5==_9)&&(typeof _5.scrollIntoView!="undefined")){
+_5.scrollIntoView(false);
+return;
+}
+var _c=_7.compatMode=="BackCompat",_d=_c?_8:_9,_e=_b?_8:_d,_f=_d.clientWidth,_10=_d.clientHeight,rtl=!dojo._isBodyLtr(),_11=_6||dojo.position(_5),el=_5.parentNode,_12=function(el){
+return ((_a<=6||(_a&&_c))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));
+};
+if(_12(_5)){
+return;
+}
+while(el){
+if(el==_8){
+el=_e;
+}
+var _13=dojo.position(el),_14=_12(el);
+if(el==_e){
+_13.w=_f;
+_13.h=_10;
+if(_e==_9&&_a&&rtl){
+_13.x+=_e.offsetWidth-_13.w;
+}
+if(_13.x<0||!_a){
+_13.x=0;
+}
+if(_13.y<0||!_a){
+_13.y=0;
+}
+}else{
+var pb=dojo._getPadBorderExtents(el);
+_13.w-=pb.w;
+_13.h-=pb.h;
+_13.x+=pb.l;
+_13.y+=pb.t;
+}
+if(el!=_e){
+var _15=el.clientWidth,_16=_13.w-_15;
+if(_15>0&&_16>0){
+_13.w=_15;
+if(_a&&rtl){
+_13.x+=_16;
+}
+}
+_15=el.clientHeight;
+_16=_13.h-_15;
+if(_15>0&&_16>0){
+_13.h=_15;
+}
+}
+if(_14){
+if(_13.y<0){
+_13.h+=_13.y;
+_13.y=0;
+}
+if(_13.x<0){
+_13.w+=_13.x;
+_13.x=0;
+}
+if(_13.y+_13.h>_10){
+_13.h=_10-_13.y;
+}
+if(_13.x+_13.w>_f){
+_13.w=_f-_13.x;
+}
+}
+var l=_11.x-_13.x,t=_11.y-Math.max(_13.y,0),r=l+_11.w-_13.w,bot=t+_11.h-_13.h;
+if(r*l>0){
+var s=Math[l<0?"max":"min"](l,r);
+_11.x+=el.scrollLeft;
+el.scrollLeft+=(_a>=8&&!_c&&rtl)?-s:s;
+_11.x-=el.scrollLeft;
+}
+if(bot*t>0){
+_11.y+=el.scrollTop;
+el.scrollTop+=Math[t<0?"max":"min"](t,bot);
+_11.y-=el.scrollTop;
+}
+el=(el!=_e)&&!_14&&el.parentNode;
+}
+}
+catch(error){
+console.error("scrollIntoView: "+error);
+_5.scrollIntoView(false);
+}
+};
+}
Index: trunk/web/dojo/dojo/cookie.js
===================================================================
--- trunk/web/dojo/dojo/cookie.js	(revision 0)
+++ trunk/web/dojo/dojo/cookie.js	(revision 9)
@@ -0,0 +1,50 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.cookie"]){
+dojo._hasResource["dojo.cookie"]=true;
+dojo.provide("dojo.cookie");
+dojo.require("dojo.regexp");
+dojo.cookie=function(_1,_2,_3){
+var c=document.cookie;
+if(arguments.length==1){
+var _4=c.match(new RegExp("(?:^|; )"+dojo.regexp.escapeString(_1)+"=([^;]*)"));
+return _4?decodeURIComponent(_4[1]):undefined;
+}else{
+_3=_3||{};
+var _5=_3.expires;
+if(typeof _5=="number"){
+var d=new Date();
+d.setTime(d.getTime()+_5*24*60*60*1000);
+_5=_3.expires=d;
+}
+if(_5&&_5.toUTCString){
+_3.expires=_5.toUTCString();
+}
+_2=encodeURIComponent(_2);
+var _6=_1+"="+_2,_7;
+for(_7 in _3){
+_6+="; "+_7;
+var _8=_3[_7];
+if(_8!==true){
+_6+="="+_8;
+}
+}
+document.cookie=_6;
+}
+};
+dojo.cookie.isSupported=function(){
+if(!("cookieEnabled" in navigator)){
+this("__djCookieTest__","CookiesAllowed");
+navigator.cookieEnabled=this("__djCookieTest__")=="CookiesAllowed";
+if(navigator.cookieEnabled){
+this("__djCookieTest__","",{expires:-1});
+}
+}
+return navigator.cookieEnabled;
+};
+}
Index: trunk/web/dojo/dojo/_base.js
===================================================================
--- trunk/web/dojo/dojo/_base.js	(revision 0)
+++ trunk/web/dojo/dojo/_base.js	(revision 9)
@@ -0,0 +1,19 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo._base"]){
+dojo._hasResource["dojo._base"]=true;
+dojo.provide("dojo._base");
+dojo.require("dojo._base.lang");
+dojo.require("dojo._base.array");
+dojo.require("dojo._base.declare");
+dojo.require("dojo._base.connect");
+dojo.require("dojo._base.Deferred");
+dojo.require("dojo._base.json");
+dojo.require("dojo._base.Color");
+dojo.requireIf(dojo.isBrowser,"dojo._base.browser");
+}
Index: trunk/web/dojo/dojo/jaxer.js
===================================================================
--- trunk/web/dojo/dojo/jaxer.js	(revision 0)
+++ trunk/web/dojo/dojo/jaxer.js	(revision 9)
@@ -0,0 +1,19 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.jaxer"]){
+dojo._hasResource["dojo.jaxer"]=true;
+dojo.provide("dojo.jaxer");
+if(typeof print=="function"){
+console.debug=Jaxer.Log.debug;
+console.warn=Jaxer.Log.warn;
+console.error=Jaxer.Log.error;
+console.info=Jaxer.Log.info;
+console.log=Jaxer.Log.warn;
+}
+onserverload=dojo._loadInit;
+}
Index: trunk/web/dojo/dojo/NodeList-traverse.js
===================================================================
--- trunk/web/dojo/dojo/NodeList-traverse.js	(revision 0)
+++ trunk/web/dojo/dojo/NodeList-traverse.js	(revision 9)
@@ -0,0 +1,131 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.NodeList-traverse"]){
+dojo._hasResource["dojo.NodeList-traverse"]=true;
+dojo.provide("dojo.NodeList-traverse");
+dojo.extend(dojo.NodeList,{_buildArrayFromCallback:function(_1){
+var _2=[];
+for(var i=0;i<this.length;i++){
+var _3=_1.call(this[i],this[i],_2);
+if(_3){
+_2=_2.concat(_3);
+}
+}
+return _2;
+},_filterQueryResult:function(_4,_5){
+var _6=dojo.filter(_4,function(_7){
+return dojo.query(_5,_7.parentNode).indexOf(_7)!=-1;
+});
+var _8=this._wrap(_6);
+return _8;
+},_getUniqueAsNodeList:function(_9){
+var _a=[];
+for(var i=0,_b;_b=_9[i];i++){
+if(_b.nodeType==1&&dojo.indexOf(_a,_b)==-1){
+_a.push(_b);
+}
+}
+return this._wrap(_a,null,this._NodeListCtor);
+},_getUniqueNodeListWithParent:function(_c,_d){
+var _e=this._getUniqueAsNodeList(_c);
+_e=(_d?this._filterQueryResult(_e,_d):_e);
+return _e._stash(this);
+},_getRelatedUniqueNodes:function(_f,_10){
+return this._getUniqueNodeListWithParent(this._buildArrayFromCallback(_10),_f);
+},children:function(_11){
+return this._getRelatedUniqueNodes(_11,function(_12,ary){
+return dojo._toArray(_12.childNodes);
+});
+},closest:function(_13){
+var _14=this;
+return this._getRelatedUniqueNodes(_13,function(_15,ary){
+do{
+if(_14._filterQueryResult([_15],_13).length){
+return _15;
+}
+}while((_15=_15.parentNode)&&_15.nodeType==1);
+return null;
+});
+},parent:function(_16){
+return this._getRelatedUniqueNodes(_16,function(_17,ary){
+return _17.parentNode;
+});
+},parents:function(_18){
+return this._getRelatedUniqueNodes(_18,function(_19,ary){
+var _1a=[];
+while(_19.parentNode){
+_19=_19.parentNode;
+_1a.push(_19);
+}
+return _1a;
+});
+},siblings:function(_1b){
+return this._getRelatedUniqueNodes(_1b,function(_1c,ary){
+var _1d=[];
+var _1e=(_1c.parentNode&&_1c.parentNode.childNodes);
+for(var i=0;i<_1e.length;i++){
+if(_1e[i]!=_1c){
+_1d.push(_1e[i]);
+}
+}
+return _1d;
+});
+},next:function(_1f){
+return this._getRelatedUniqueNodes(_1f,function(_20,ary){
+var _21=_20.nextSibling;
+while(_21&&_21.nodeType!=1){
+_21=_21.nextSibling;
+}
+return _21;
+});
+},nextAll:function(_22){
+return this._getRelatedUniqueNodes(_22,function(_23,ary){
+var _24=[];
+var _25=_23;
+while((_25=_25.nextSibling)){
+if(_25.nodeType==1){
+_24.push(_25);
+}
+}
+return _24;
+});
+},prev:function(_26){
+return this._getRelatedUniqueNodes(_26,function(_27,ary){
+var _28=_27.previousSibling;
+while(_28&&_28.nodeType!=1){
+_28=_28.previousSibling;
+}
+return _28;
+});
+},prevAll:function(_29){
+return this._getRelatedUniqueNodes(_29,function(_2a,ary){
+var _2b=[];
+var _2c=_2a;
+while((_2c=_2c.previousSibling)){
+if(_2c.nodeType==1){
+_2b.push(_2c);
+}
+}
+return _2b;
+});
+},andSelf:function(){
+return this.concat(this._parent);
+},first:function(){
+return this._wrap(((this[0]&&[this[0]])||[]),this);
+},last:function(){
+return this._wrap((this.length?[this[this.length-1]]:[]),this);
+},even:function(){
+return this.filter(function(_2d,i){
+return i%2!=0;
+});
+},odd:function(){
+return this.filter(function(_2e,i){
+return i%2==0;
+});
+}});
+}
Index: trunk/web/dojo/dojo/dojo.js.uncompressed.js
===================================================================
--- trunk/web/dojo/dojo/dojo.js.uncompressed.js	(revision 0)
+++ trunk/web/dojo/dojo/dojo.js.uncompressed.js	(revision 9)
@@ -0,0 +1,11251 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+;(function(){
+
+	/*
+	dojo, dijit, and dojox must always be the first three, and in that order.
+	djConfig.scopeMap = [
+		["dojo", "fojo"],
+		["dijit", "fijit"],
+		["dojox", "fojox"]
+	
+	]
+	*/
+
+	/**Build will replace this comment with a scoped djConfig **/
+
+	//The null below can be relaced by a build-time value used instead of djConfig.scopeMap.
+	var sMap = null;
+
+	//See if new scopes need to be defined.
+	if((sMap || (typeof djConfig != "undefined" && djConfig.scopeMap)) && (typeof window != "undefined")){
+		var scopeDef = "", scopePrefix = "", scopeSuffix = "", scopeMap = {}, scopeMapRev = {};
+		sMap = sMap || djConfig.scopeMap;
+		for(var i = 0; i < sMap.length; i++){
+			//Make local variables, then global variables that use the locals.
+			var newScope = sMap[i];
+			scopeDef += "var " + newScope[0] + " = {}; " + newScope[1] + " = " + newScope[0] + ";" + newScope[1] + "._scopeName = '" + newScope[1] + "';";
+			scopePrefix += (i == 0 ? "" : ",") + newScope[0];
+			scopeSuffix += (i == 0 ? "" : ",") + newScope[1];
+			scopeMap[newScope[0]] = newScope[1];
+			scopeMapRev[newScope[1]] = newScope[0];
+		}
+
+		eval(scopeDef + "dojo._scopeArgs = [" + scopeSuffix + "];");
+
+		dojo._scopePrefixArgs = scopePrefix;
+		dojo._scopePrefix = "(function(" + scopePrefix + "){";
+		dojo._scopeSuffix = "})(" + scopeSuffix + ")";
+		dojo._scopeMap = scopeMap;
+		dojo._scopeMapRev = scopeMapRev;
+	}
+
+/*=====
+// note:
+//		'djConfig' does not exist under 'dojo.*' so that it can be set before the
+//		'dojo' variable exists.
+// note:
+//		Setting any of these variables *after* the library has loaded does
+//		nothing at all.
+
+djConfig = {
+	// summary:
+	//		Application code can set the global 'djConfig' prior to loading
+	//		the library to override certain global settings for how dojo works.
+	//
+	// isDebug: Boolean
+	//		Defaults to `false`. If set to `true`, ensures that Dojo provides
+	//		extended debugging feedback via Firebug. If Firebug is not available
+	//		on your platform, setting `isDebug` to `true` will force Dojo to
+	//		pull in (and display) the version of Firebug Lite which is
+	//		integrated into the Dojo distribution, thereby always providing a
+	//		debugging/logging console when `isDebug` is enabled. Note that
+	//		Firebug's `console.*` methods are ALWAYS defined by Dojo. If
+	//		`isDebug` is false and you are on a platform without Firebug, these
+	//		methods will be defined as no-ops.
+	isDebug: false,
+	// debugAtAllCosts: Boolean
+	//		Defaults to `false`. If set to `true`, this triggers an alternate
+	//		mode of the package system in which dependencies are detected and
+	//		only then are resources evaluated in dependency order via
+	//		`<script>` tag inclusion. This may double-request resources and
+	//		cause problems with scripts which expect `dojo.require()` to
+	//		preform synchronously. `debugAtAllCosts` can be an invaluable
+	//		debugging aid, but when using it, ensure that all code which
+	//		depends on Dojo modules is wrapped in `dojo.addOnLoad()` handlers.
+	//		Due to the somewhat unpredictable side-effects of using
+	//		`debugAtAllCosts`, it is strongly recommended that you enable this
+	//		flag as a last resort. `debugAtAllCosts` has no effect when loading
+	//		resources across domains. For usage information, see the
+	//		[Dojo Book](http://dojotoolkit.org/book/book-dojo/part-4-meta-dojo-making-your-dojo-code-run-faster-and-better/debugging-facilities/deb)
+	debugAtAllCosts: false,
+	// locale: String
+	//		The locale to assume for loading localized resources in this page,
+	//		specified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
+	//		Must be specified entirely in lowercase, e.g. `en-us` and `zh-cn`.
+	//		See the documentation for `dojo.i18n` and `dojo.requireLocalization`
+	//		for details on loading localized resources. If no locale is specified,
+	//		Dojo assumes the locale of the user agent, according to `navigator.userLanguage`
+	//		or `navigator.language` properties.
+	locale: undefined,
+	// extraLocale: Array
+	//		No default value. Specifies additional locales whose
+	//		resources should also be loaded alongside the default locale when
+	//		calls to `dojo.requireLocalization()` are processed.
+	extraLocale: undefined,
+	// baseUrl: String
+	//		The directory in which `dojo.js` is located. Under normal
+	//		conditions, Dojo auto-detects the correct location from which it
+	//		was loaded. You may need to manually configure `baseUrl` in cases
+	//		where you have renamed `dojo.js` or in which `<base>` tags confuse
+	//		some browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned
+	//		either the value of `djConfig.baseUrl` if one is provided or the
+	//		auto-detected root if not. Other modules are located relative to
+	//		this path. The path should end in a slash.
+	baseUrl: undefined,
+	// modulePaths: Object
+	//		A map of module names to paths relative to `dojo.baseUrl`. The
+	//		key/value pairs correspond directly to the arguments which
+	//		`dojo.registerModulePath` accepts. Specifiying
+	//		`djConfig.modulePaths = { "foo": "../../bar" }` is the equivalent
+	//		of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple
+	//		modules may be configured via `djConfig.modulePaths`.
+	modulePaths: {},
+	// afterOnLoad: Boolean 
+	//		Indicates Dojo was added to the page after the page load. In this case
+	//		Dojo will not wait for the page DOMContentLoad/load events and fire
+	//		its dojo.addOnLoad callbacks after making sure all outstanding
+	//		dojo.required modules have loaded. Only works with a built dojo.js,
+	//		it does not work the dojo.js directly from source control.
+	afterOnLoad: false,
+	// addOnLoad: Function or Array
+	//		Adds a callback via dojo.addOnLoad. Useful when Dojo is added after
+	//		the page loads and djConfig.afterOnLoad is true. Supports the same
+	//		arguments as dojo.addOnLoad. When using a function reference, use
+	//		`djConfig.addOnLoad = function(){};`. For object with function name use
+	//		`djConfig.addOnLoad = [myObject, "functionName"];` and for object with
+	//		function reference use
+	//		`djConfig.addOnLoad = [myObject, function(){}];`
+	addOnLoad: null,
+	// require: Array
+	//		An array of module names to be loaded immediately after dojo.js has been included
+	//		in a page.
+	require: [],
+	// defaultDuration: Array
+	//		Default duration, in milliseconds, for wipe and fade animations within dijits.
+	//		Assigned to dijit.defaultDuration.
+	defaultDuration: 200,
+	// dojoBlankHtmlUrl: String
+	//		Used by some modules to configure an empty iframe. Used by dojo.io.iframe and
+	//		dojo.back, and dijit popup support in IE where an iframe is needed to make sure native
+	//		controls do not bleed through the popups. Normally this configuration variable 
+	//		does not need to be set, except when using cross-domain/CDN Dojo builds.
+	//		Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`
+	//		to the path on your domain your copy of blank.html.
+	dojoBlankHtmlUrl: undefined,
+	//	ioPublish: Boolean?
+	//		Set this to true to enable publishing of topics for the different phases of
+	// 		IO operations. Publishing is done via dojo.publish. See dojo.__IoPublish for a list
+	// 		of topics that are published.
+	ioPublish: false,
+	//  useCustomLogger: Anything?
+	//		If set to a value that evaluates to true such as a string or array and
+	//		isDebug is true and Firebug is not available or running, then it bypasses
+	//		the creation of Firebug Lite allowing you to define your own console object.
+	useCustomLogger: undefined,
+	// transparentColor: Array
+	//		Array containing the r, g, b components used as transparent color in dojo.Color;
+	//		if undefined, [255,255,255] (white) will be used.
+	transparentColor: undefined,
+	// skipIeDomLoaded: Boolean
+	//		For IE only, skip the DOMContentLoaded hack used. Sometimes it can cause an Operation
+	//		Aborted error if the rest of the page triggers script defers before the DOM is ready.
+	//		If this is config value is set to true, then dojo.addOnLoad callbacks will not be
+	//		triggered until the page load event, which is after images and iframes load. If you
+	//		want to trigger the callbacks sooner, you can put a script block in the bottom of
+	//		your HTML that calls dojo._loadInit();. If you are using multiversion support, change
+	//		"dojo." to the appropriate scope name for dojo.
+	skipIeDomLoaded: false
+}
+=====*/
+
+(function(){
+	// firebug stubs
+
+	if(typeof this["loadFirebugConsole"] == "function"){
+		// for Firebug 1.2
+		this["loadFirebugConsole"]();
+	}else{
+		this.console = this.console || {};
+
+		//	Be careful to leave 'log' always at the end
+		var cn = [
+			"assert", "count", "debug", "dir", "dirxml", "error", "group",
+			"groupEnd", "info", "profile", "profileEnd", "time", "timeEnd",
+			"trace", "warn", "log"
+		];
+		var i=0, tn;
+		while((tn=cn[i++])){
+			if(!console[tn]){
+				(function(){
+					var tcn = tn+"";
+					console[tcn] = ('log' in console) ? function(){
+						var a = Array.apply({}, arguments);
+						a.unshift(tcn+":");
+						console["log"](a.join(" "));
+					} : function(){}
+					console[tcn]._fake = true;
+				})();
+			}
+		}
+	}
+
+	//TODOC:  HOW TO DOC THIS?
+	// dojo is the root variable of (almost all) our public symbols -- make sure it is defined.
+	if(typeof dojo == "undefined"){
+		dojo = {
+			_scopeName: "dojo",
+			_scopePrefix: "",
+			_scopePrefixArgs: "",
+			_scopeSuffix: "",
+			_scopeMap: {},
+			_scopeMapRev: {}
+		};
+	}
+
+	var d = dojo;
+
+	//Need placeholders for dijit and dojox for scoping code.
+	if(typeof dijit == "undefined"){
+		dijit = {_scopeName: "dijit"};
+	}
+	if(typeof dojox == "undefined"){
+		dojox = {_scopeName: "dojox"};
+	}
+
+	if(!d._scopeArgs){
+		d._scopeArgs = [dojo, dijit, dojox];
+	}
+
+/*=====
+dojo.global = {
+	//	summary:
+	//		Alias for the global scope
+	//		(e.g. the window object in a browser).
+	//	description:
+	//		Refer to 'dojo.global' rather than referring to window to ensure your
+	//		code runs correctly in contexts other than web browsers (e.g. Rhino on a server).
+}
+=====*/
+	d.global = this;
+
+	d.config =/*===== djConfig = =====*/{
+		isDebug: false,
+		debugAtAllCosts: false
+	};
+
+	if(typeof djConfig != "undefined"){
+		for(var opt in djConfig){
+			d.config[opt] = djConfig[opt];
+		}
+	}
+
+/*=====
+	// Override locale setting, if specified
+	dojo.locale = {
+		// summary: the locale as defined by Dojo (read-only)
+	};
+=====*/
+	dojo.locale = d.config.locale;
+
+	var rev = "$Rev: 22487 $".match(/\d+/);
+
+/*=====
+	dojo.version = function(){
+		// summary:
+		//		Version number of the Dojo Toolkit
+		// major: Integer
+		//		Major version. If total version is "1.2.0beta1", will be 1
+		// minor: Integer
+		//		Minor version. If total version is "1.2.0beta1", will be 2
+		// patch: Integer
+		//		Patch version. If total version is "1.2.0beta1", will be 0
+		// flag: String
+		//		Descriptor flag. If total version is "1.2.0beta1", will be "beta1"
+		// revision: Number
+		//		The SVN rev from which dojo was pulled
+		this.major = 0;
+		this.minor = 0;
+		this.patch = 0;
+		this.flag = "";
+		this.revision = 0;
+	}
+=====*/
+	dojo.version = {
+		major: 1, minor: 5, patch: 0, flag: "",
+		revision: rev ? +rev[0] : NaN,
+		toString: function(){
+			with(d.version){
+				return major + "." + minor + "." + patch + flag + " (" + revision + ")";	// String
+			}
+		}
+	}
+
+		// Register with the OpenAjax hub
+	if(typeof OpenAjax != "undefined"){
+		OpenAjax.hub.registerLibrary(dojo._scopeName, "http://dojotoolkit.org", d.version.toString());
+	}
+	
+	var extraNames, extraLen, empty = {};
+	for(var i in {toString: 1}){ extraNames = []; break; }
+	dojo._extraNames = extraNames = extraNames || ["hasOwnProperty", "valueOf", "isPrototypeOf",
+		"propertyIsEnumerable", "toLocaleString", "toString", "constructor"];
+	extraLen = extraNames.length;
+
+	dojo._mixin = function(/*Object*/ target, /*Object*/ source){
+		// summary:
+		//		Adds all properties and methods of source to target. This addition
+		//		is "prototype extension safe", so that instances of objects
+		//		will not pass along prototype defaults.
+		var name, s, i;
+		for(name in source){
+			// the "tobj" condition avoid copying properties in "source"
+			// inherited from Object.prototype.  For example, if target has a custom
+			// toString() method, don't overwrite it with the toString() method
+			// that source inherited from Object.prototype
+			s = source[name];
+			if(!(name in target) || (target[name] !== s && (!(name in empty) || empty[name] !== s))){
+				target[name] = s;
+			}
+		}
+				// IE doesn't recognize some custom functions in for..in
+		if(extraLen && source){
+			for(i = 0; i < extraLen; ++i){
+				name = extraNames[i];
+				s = source[name];
+				if(!(name in target) || (target[name] !== s && (!(name in empty) || empty[name] !== s))){
+					target[name] = s;
+				}
+			}
+		}
+				return target; // Object
+	}
+
+	dojo.mixin = function(/*Object*/obj, /*Object...*/props){
+		// summary:
+		//		Adds all properties and methods of props to obj and returns the
+		//		(now modified) obj.
+		//	description:
+		//		`dojo.mixin` can mix multiple source objects into a
+		//		destination object which is then returned. Unlike regular
+		//		`for...in` iteration, `dojo.mixin` is also smart about avoiding
+		//		extensions which other toolkits may unwisely add to the root
+		//		object prototype
+		//	obj:
+		//		The object to mix properties into. Also the return value.
+		//	props:
+		//		One or more objects whose values are successively copied into
+		//		obj. If more than one of these objects contain the same value,
+		//		the one specified last in the function call will "win".
+		//	example:
+		//		make a shallow copy of an object
+		//	|	var copy = dojo.mixin({}, source);
+		//	example:
+		//		many class constructors often take an object which specifies
+		//		values to be configured on the object. In this case, it is
+		//		often simplest to call `dojo.mixin` on the `this` object:
+		//	|	dojo.declare("acme.Base", null, {
+		//	|		constructor: function(properties){
+		//	|			// property configuration:
+		//	|			dojo.mixin(this, properties);
+		//	|	
+		//	|			console.log(this.quip);
+		//	|			//  ...
+		//	|		},
+		//	|		quip: "I wasn't born yesterday, you know - I've seen movies.",
+		//	|		// ...
+		//	|	});
+		//	|
+		//	|	// create an instance of the class and configure it
+		//	|	var b = new acme.Base({quip: "That's what it does!" });
+		//	example:
+		//		copy in properties from multiple objects
+		//	|	var flattened = dojo.mixin(
+		//	|		{
+		//	|			name: "Frylock",
+		//	|			braces: true
+		//	|		},
+		//	|		{
+		//	|			name: "Carl Brutanananadilewski"
+		//	|		}
+		//	|	);
+		//	|	
+		//	|	// will print "Carl Brutanananadilewski"
+		//	|	console.log(flattened.name);
+		//	|	// will print "true"
+		//	|	console.log(flattened.braces);
+		if(!obj){ obj = {}; }
+		for(var i=1, l=arguments.length; i<l; i++){
+			d._mixin(obj, arguments[i]);
+		}
+		return obj; // Object
+	}
+
+	dojo._getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){
+		var obj=context || d.global;
+		for(var i=0, p; obj && (p=parts[i]); i++){
+			if(i == 0 && d._scopeMap[p]){
+				p = d._scopeMap[p];
+			}
+			obj = (p in obj ? obj[p] : (create ? obj[p]={} : undefined));
+		}
+		return obj; // mixed
+	}
+
+	dojo.setObject = function(/*String*/name, /*Object*/value, /*Object?*/context){
+		// summary:
+		//		Set a property from a dot-separated string, such as "A.B.C"
+		//	description:
+		//		Useful for longer api chains where you have to test each object in
+		//		the chain, or when you have an object reference in string format.
+		//		Objects are created as needed along `path`. Returns the passed
+		//		value if setting is successful or `undefined` if not.
+		//	name:
+		//		Path to a property, in the form "A.B.C".
+		//	context:
+		//		Optional. Object to use as root of path. Defaults to
+		//		`dojo.global`.
+		//	example:
+		//		set the value of `foo.bar.baz`, regardless of whether
+		//		intermediate objects already exist:
+		//	|	dojo.setObject("foo.bar.baz", value);
+		//	example:
+		//		without `dojo.setObject`, we often see code like this:
+		//	|	// ensure that intermediate objects are available
+		//	|	if(!obj["parent"]){ obj.parent = {}; }
+		//	|	if(!obj.parent["child"]){ obj.parent.child= {}; }
+		//	|	// now we can safely set the property
+		//	|	obj.parent.child.prop = "some value";
+		//		wheras with `dojo.setObject`, we can shorten that to:
+		//	|	dojo.setObject("parent.child.prop", "some value", obj);
+		var parts=name.split("."), p=parts.pop(), obj=d._getProp(parts, true, context);
+		return obj && p ? (obj[p]=value) : undefined; // Object
+	}
+
+	dojo.getObject = function(/*String*/name, /*Boolean?*/create, /*Object?*/context){
+		// summary:
+		//		Get a property from a dot-separated string, such as "A.B.C"
+		//	description:
+		//		Useful for longer api chains where you have to test each object in
+		//		the chain, or when you have an object reference in string format.
+		//	name:
+		//		Path to an property, in the form "A.B.C".
+		//	create:
+		//		Optional. Defaults to `false`. If `true`, Objects will be
+		//		created at any point along the 'path' that is undefined.
+		//	context:
+		//		Optional. Object to use as root of path. Defaults to
+		//		'dojo.global'. Null may be passed.
+		return d._getProp(name.split("."), create, context); // Object
+	}
+
+	dojo.exists = function(/*String*/name, /*Object?*/obj){
+		//	summary:
+		//		determine if an object supports a given method
+		//	description:
+		//		useful for longer api chains where you have to test each object in
+		//		the chain. Useful only for object and method detection.
+		//		Not useful for testing generic properties on an object.
+		//		In particular, dojo.exists("foo.bar") when foo.bar = ""
+		//		will return false. Use ("bar" in foo) to test for those cases.
+		//	name:
+		//		Path to an object, in the form "A.B.C".
+		//	obj:
+		//		Object to use as root of path. Defaults to
+		//		'dojo.global'. Null may be passed.
+		//	example:
+		//	|	// define an object
+		//	|	var foo = {
+		//	|		bar: { }
+		//	|	};
+		//	|
+		//	|	// search the global scope
+		//	|	dojo.exists("foo.bar"); // true
+		//	|	dojo.exists("foo.bar.baz"); // false
+		//	|
+		//	|	// search from a particular scope
+		//	|	dojo.exists("bar", foo); // true
+		//	|	dojo.exists("bar.baz", foo); // false
+		return !!d.getObject(name, false, obj); // Boolean
+	}
+
+	dojo["eval"] = function(/*String*/ scriptFragment){
+		//	summary:
+		//		A legacy method created for use exclusively by internal Dojo methods. Do not use
+		//		this method directly, the behavior of this eval will differ from the normal
+		//		browser eval.
+		//	description:
+		//		Placed in a separate function to minimize size of trapped
+		//		exceptions. Calling eval() directly from some other scope may
+		//		complicate tracebacks on some platforms.
+		//	returns:
+		//		The result of the evaluation. Often `undefined`
+		return d.global.eval ? d.global.eval(scriptFragment) : eval(scriptFragment); 	// Object
+	}
+
+	/*=====
+		dojo.deprecated = function(behaviour, extra, removal){
+			//	summary:
+			//		Log a debug message to indicate that a behavior has been
+			//		deprecated.
+			//	behaviour: String
+			//		The API or behavior being deprecated. Usually in the form
+			//		of "myApp.someFunction()".
+			//	extra: String?
+			//		Text to append to the message. Often provides advice on a
+			//		new function or facility to achieve the same goal during
+			//		the deprecation period.
+			//	removal: String?
+			//		Text to indicate when in the future the behavior will be
+			//		removed. Usually a version number.
+			//	example:
+			//	|	dojo.deprecated("myApp.getTemp()", "use myApp.getLocaleTemp() instead", "1.0");
+		}
+
+		dojo.experimental = function(moduleName, extra){
+			//	summary: Marks code as experimental.
+			//	description:
+			//	 	This can be used to mark a function, file, or module as
+			//	 	experimental.  Experimental code is not ready to be used, and the
+			//	 	APIs are subject to change without notice.  Experimental code may be
+			//	 	completed deleted without going through the normal deprecation
+			//	 	process.
+			//	moduleName: String
+			//	 	The name of a module, or the name of a module file or a specific
+			//	 	function
+			//	extra: String?
+			//	 	some additional message for the user
+			//	example:
+			//	|	dojo.experimental("dojo.data.Result");
+			//	example:
+			//	|	dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA");
+		}
+	=====*/
+
+	//Real functions declared in dojo._firebug.firebug.
+	d.deprecated = d.experimental = function(){};
+
+})();
+// vim:ai:ts=4:noet
+
+/*
+ * loader.js - A bootstrap module.  Runs before the hostenv_*.js file. Contains
+ * all of the package loading methods.
+ */
+
+(function(){
+	var d = dojo;
+
+	d.mixin(d, {
+		_loadedModules: {},
+		_inFlightCount: 0,
+		_hasResource: {},
+
+		_modulePrefixes: {
+			dojo: 	{	name: "dojo", value: "." },
+			// dojox: 	{	name: "dojox", value: "../dojox" },
+			// dijit: 	{	name: "dijit", value: "../dijit" },
+			doh: 	{	name: "doh", value: "../util/doh" },
+			tests: 	{	name: "tests", value: "tests" }
+		},
+
+		_moduleHasPrefix: function(/*String*/module){
+			// summary: checks to see if module has been established
+			var mp = d._modulePrefixes;
+			return !!(mp[module] && mp[module].value); // Boolean
+		},
+
+		_getModulePrefix: function(/*String*/module){
+			// summary: gets the prefix associated with module
+			var mp = d._modulePrefixes;
+			if(d._moduleHasPrefix(module)){
+				return mp[module].value; // String
+			}
+			return module; // String
+		},
+
+		_loadedUrls: [],
+
+		//WARNING: 
+		//		This variable is referenced by packages outside of bootstrap:
+		//		FloatingPane.js and undo/browser.js
+		_postLoad: false,
+		
+		//Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
+		_loaders: [],
+		_unloaders: [],
+		_loadNotifying: false
+	});
+
+
+		dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){
+		// 	summary:
+		//		Load a Javascript module given a relative path
+		//
+		//	description:
+		//		Loads and interprets the script located at relpath, which is
+		//		relative to the script root directory.  If the script is found but
+		//		its interpretation causes a runtime exception, that exception is
+		//		not caught by us, so the caller will see it.  We return a true
+		//		value if and only if the script is found.
+		//
+		// relpath: 
+		//		A relative path to a script (no leading '/', and typically ending
+		//		in '.js').
+		// module: 
+		//		A module whose existance to check for after loading a path.  Can be
+		//		used to determine success or failure of the load.
+		// cb: 
+		//		a callback function to pass the result of evaluating the script
+
+		var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath;
+		try{
+			return !module ? d._loadUri(uri, cb) : d._loadUriAndCheck(uri, module, cb); // Boolean
+		}catch(e){
+			console.error(e);
+			return false; // Boolean
+		}
+	}
+
+	dojo._loadUri = function(/*String*/uri, /*Function?*/cb){
+		//	summary:
+		//		Loads JavaScript from a URI
+		//	description:
+		//		Reads the contents of the URI, and evaluates the contents.  This is
+		//		used to load modules as well as resource bundles. Returns true if
+		//		it succeeded. Returns false if the URI reading failed.  Throws if
+		//		the evaluation throws.
+		//	uri: a uri which points at the script to be loaded
+		//	cb: 
+		//		a callback function to process the result of evaluating the script
+		//		as an expression, typically used by the resource bundle loader to
+		//		load JSON-style resources
+
+		if(d._loadedUrls[uri]){
+			return true; // Boolean
+		}
+		d._inFlightCount++; // block addOnLoad calls that arrive while we're busy downloading
+		var contents = d._getText(uri, true);
+		if(contents){ // not 404, et al
+			d._loadedUrls[uri] = true;
+			d._loadedUrls.push(uri);
+			if(cb){
+				contents = '('+contents+')';
+			}else{
+				//Only do the scoping if no callback. If a callback is specified,
+				//it is most likely the i18n bundle stuff.
+				contents = d._scopePrefix + contents + d._scopeSuffix;
+			}
+			if(!d.isIE){ contents += "\r\n//@ sourceURL=" + uri; } // debugging assist for Firebug
+			var value = d["eval"](contents);
+			if(cb){ cb(value); }
+		}
+		// Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading
+		if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){
+			// We shouldn't be allowed to get here but Firefox allows an event 
+			// (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. 
+			// If the current script block contains multiple require() statements, then after each
+			// require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until
+			// all require()s are done since the out-of-sequence addOnLoad() presumably needs them all.
+			// setTimeout allows the next require() to start (if needed), and then we check this again.
+			setTimeout(function(){ 
+				// If inFlightCount > 0, then multiple require()s are running sequentially and 
+				// the next require() started after setTimeout() was executed but before we got here.
+				if(d._inFlightCount == 0){ 
+					d._callLoaded();
+				}
+			}, 0);
+		}
+		return !!contents; // Boolean: contents? true : false
+	}
+	
+	// FIXME: probably need to add logging to this method
+	dojo._loadUriAndCheck = function(/*String*/uri, /*String*/moduleName, /*Function?*/cb){
+		// summary: calls loadUri then findModule and returns true if both succeed
+		var ok = false;
+		try{
+			ok = d._loadUri(uri, cb);
+		}catch(e){
+			console.error("failed loading " + uri + " with error: " + e);
+		}
+		return !!(ok && d._loadedModules[moduleName]); // Boolean
+	}
+
+	dojo.loaded = function(){
+		// summary:
+		//		signal fired when initial environment and package loading is
+		//		complete. You should use dojo.addOnLoad() instead of doing a 
+		//		direct dojo.connect() to this method in order to handle
+		//		initialization tasks that require the environment to be
+		//		initialized. In a browser host,	declarative widgets will 
+		//		be constructed when this function finishes runing.
+		d._loadNotifying = true;
+		d._postLoad = true;
+		var mll = d._loaders;
+
+		//Clear listeners so new ones can be added
+		//For other xdomain package loads after the initial load.
+		d._loaders = [];
+
+		for(var x = 0; x < mll.length; x++){
+			mll[x]();
+		}
+
+		d._loadNotifying = false;
+		
+		//Make sure nothing else got added to the onload queue
+		//after this first run. If something did, and we are not waiting for any
+		//more inflight resources, run again.
+		if(d._postLoad && d._inFlightCount == 0 && mll.length){
+			d._callLoaded();
+		}
+	}
+
+	dojo.unloaded = function(){
+		// summary:
+		//		signal fired by impending environment destruction. You should use
+		//		dojo.addOnUnload() instead of doing a direct dojo.connect() to this 
+		//		method to perform page/application cleanup methods. See 
+		//		dojo.addOnUnload for more info.
+		var mll = d._unloaders;
+		while(mll.length){
+			(mll.pop())();
+		}
+	}
+
+	d._onto = function(arr, obj, fn){
+		if(!fn){
+			arr.push(obj);
+		}else if(fn){
+			var func = (typeof fn == "string") ? obj[fn] : fn;
+			arr.push(function(){ func.call(obj); });
+		}
+	}
+
+	dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){
+		// summary:
+		//		Registers a function to be triggered after the DOM and dojo.require() calls 
+		//		have finished loading.
+		//
+		// description:
+		//		Registers a function to be triggered after the DOM has finished
+		//		loading and `dojo.require` modules have loaded. Widgets declared in markup 
+		//		have been instantiated if `djConfig.parseOnLoad` is true when this fires. 
+		//
+		//		Images and CSS files may or may not have finished downloading when
+		//		the specified function is called.  (Note that widgets' CSS and HTML
+		//		code is guaranteed to be downloaded before said widgets are
+		//		instantiated, though including css resouces BEFORE any script elements
+		//		is highly recommended).
+		//
+		// example:
+		//	Register an anonymous function to run when everything is ready
+		//	|	dojo.addOnLoad(function(){ doStuff(); });
+		//
+		// example:
+		//	Register a function to run when everything is ready by pointer:
+		//	|	var init = function(){ doStuff(); }
+		//	|	dojo.addOnLoad(init);
+		//
+		// example:
+		//	Register a function to run scoped to `object`, either by name or anonymously:
+		//	|	dojo.addOnLoad(object, "functionName");
+		//	|	dojo.addOnLoad(object, function(){ doStuff(); });
+
+		d._onto(d._loaders, obj, functionName);
+
+		//Added for xdomain loading. dojo.addOnLoad is used to
+		//indicate callbacks after doing some dojo.require() statements.
+		//In the xdomain case, if all the requires are loaded (after initial
+		//page load), then immediately call any listeners.
+		if(d._postLoad && d._inFlightCount == 0 && !d._loadNotifying){
+			d._callLoaded();
+		}
+	}
+
+	//Support calling dojo.addOnLoad via djConfig.addOnLoad. Support all the
+	//call permutations of dojo.addOnLoad. Mainly useful when dojo is added
+	//to the page after the page has loaded.
+	var dca = d.config.addOnLoad;
+	if(dca){
+		d.addOnLoad[(dca instanceof Array ? "apply" : "call")](d, dca);
+	}
+
+	dojo._modulesLoaded = function(){
+		if(d._postLoad){ return; }
+		if(d._inFlightCount > 0){ 
+			console.warn("files still in flight!");
+			return;
+		}
+		d._callLoaded();
+	}
+
+	dojo._callLoaded = function(){
+
+		// The "object" check is for IE, and the other opera check fixes an
+		// issue in Opera where it could not find the body element in some
+		// widget test cases.  For 0.9, maybe route all browsers through the
+		// setTimeout (need protection still for non-browser environments
+		// though). This might also help the issue with FF 2.0 and freezing
+		// issues where we try to do sync xhr while background css images are
+		// being loaded (trac #2572)? Consider for 0.9.
+		if(typeof setTimeout == "object" || (d.config.useXDomain && d.isOpera)){
+			setTimeout(
+				d.isAIR ? function(){ d.loaded(); } : d._scopeName + ".loaded();",
+				0);
+		}else{
+			d.loaded();
+		}
+	}
+
+	dojo._getModuleSymbols = function(/*String*/modulename){
+		// summary:
+		//		Converts a module name in dotted JS notation to an array
+		//		representing the path in the source tree
+		var syms = modulename.split(".");
+		for(var i = syms.length; i>0; i--){
+			var parentModule = syms.slice(0, i).join(".");
+			if(i == 1 && !d._moduleHasPrefix(parentModule)){		
+				// Support default module directory (sibling of dojo) for top-level modules 
+				syms[0] = "../" + syms[0];
+			}else{
+				var parentModulePath = d._getModulePrefix(parentModule);
+				if(parentModulePath != parentModule){
+					syms.splice(0, i, parentModulePath);
+					break;
+				}
+			}
+		}
+		return syms; // Array
+	}
+
+	dojo._global_omit_module_check = false;
+
+	dojo.loadInit = function(/*Function*/init){
+		//	summary:
+		//		Executes a function that needs to be executed for the loader's dojo.requireIf
+		//		resolutions to work. This is needed mostly for the xdomain loader case where
+		//		a function needs to be executed to set up the possible values for a dojo.requireIf
+		//		call.
+		//	init:
+		//		a function reference. Executed immediately.
+		//	description: This function is mainly a marker for the xdomain loader to know parts of
+		//		code that needs be executed outside the function wrappper that is placed around modules.
+		//		The init function could be executed more than once, and it should make no assumptions
+		//		on what is loaded, or what modules are available. Only the functionality in Dojo Base
+		//		is allowed to be used. Avoid using this method. For a valid use case,
+		//		see the source for dojox.gfx.
+		init();
+	}
+
+	dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/omitModuleCheck){
+		//	summary:
+		//		loads a Javascript module from the appropriate URI
+		//	moduleName:
+		//		module name to load, using periods for separators,
+		//		 e.g. "dojo.date.locale".  Module paths are de-referenced by dojo's
+		//		internal mapping of locations to names and are disambiguated by
+		//		longest prefix. See `dojo.registerModulePath()` for details on
+		//		registering new modules.
+		//	omitModuleCheck:
+		//		if `true`, omitModuleCheck skips the step of ensuring that the
+		//		loaded file actually defines the symbol it is referenced by.
+		//		For example if it called as `dojo.require("a.b.c")` and the
+		//		file located at `a/b/c.js` does not define an object `a.b.c`,
+		//		and exception will be throws whereas no exception is raised
+		//		when called as `dojo.require("a.b.c", true)`
+		//	description:
+		// 		Modules are loaded via dojo.require by using one of two loaders: the normal loader
+		// 		and the xdomain loader. The xdomain loader is used when dojo was built with a
+		// 		custom build that specified loader=xdomain and the module lives on a modulePath
+		// 		that is a whole URL, with protocol and a domain. The versions of Dojo that are on
+		// 		the Google and AOL CDNs use the xdomain loader.
+		// 
+		// 		If the module is loaded via the xdomain loader, it is an asynchronous load, since
+		// 		the module is added via a dynamically created script tag. This
+		// 		means that dojo.require() can return before the module has loaded. However, this 
+		// 		should only happen in the case where you do dojo.require calls in the top-level
+		// 		HTML page, or if you purposely avoid the loader checking for dojo.require
+		// 		dependencies in your module by using a syntax like dojo["require"] to load the module.
+		// 
+		// 		Sometimes it is useful to not have the loader detect the dojo.require calls in the
+		// 		module so that you can dynamically load the modules as a result of an action on the
+		// 		page, instead of right at module load time.
+		// 
+		// 		Also, for script blocks in an HTML page, the loader does not pre-process them, so
+		// 		it does not know to download the modules before the dojo.require calls occur.
+		// 
+		// 		So, in those two cases, when you want on-the-fly module loading or for script blocks
+		// 		in the HTML page, special care must be taken if the dojo.required code is loaded
+		// 		asynchronously. To make sure you can execute code that depends on the dojo.required
+		// 		modules, be sure to add the code that depends on the modules in a dojo.addOnLoad()
+		// 		callback. dojo.addOnLoad waits for all outstanding modules to finish loading before
+		// 		executing. Example:
+		// 
+		//	   	|	<script type="text/javascript">
+		//		|	dojo.require("foo");
+		//		|	dojo.require("bar");
+		//	   	|	dojo.addOnLoad(function(){
+		//	   	|		//you can now safely do something with foo and bar
+		//	   	|	});
+		//	   	|	</script>
+		// 
+		// 		This type of syntax works with both xdomain and normal loaders, so it is good
+		// 		practice to always use this idiom for on-the-fly code loading and in HTML script
+		// 		blocks. If at some point you change loaders and where the code is loaded from,
+		// 		it will all still work.
+		// 
+		// 		More on how dojo.require
+		//		`dojo.require("A.B")` first checks to see if symbol A.B is
+		//		defined. If it is, it is simply returned (nothing to do).
+		//	
+		//		If it is not defined, it will look for `A/B.js` in the script root
+		//		directory.
+		//	
+		//		`dojo.require` throws an excpetion if it cannot find a file
+		//		to load, or if the symbol `A.B` is not defined after loading.
+		//	
+		//		It returns the object `A.B`, but note the caveats above about on-the-fly loading and
+		// 		HTML script blocks when the xdomain loader is loading a module.
+		//	
+		//		`dojo.require()` does nothing about importing symbols into
+		//		the current namespace.  It is presumed that the caller will
+		//		take care of that. For example, to import all symbols into a
+		//		local block, you might write:
+		//	
+		//		|	with (dojo.require("A.B")) {
+		//		|		...
+		//		|	}
+		//	
+		//		And to import just the leaf symbol to a local variable:
+		//	
+		//		|	var B = dojo.require("A.B");
+		//	   	|	...
+		//	returns: the required namespace object
+		omitModuleCheck = d._global_omit_module_check || omitModuleCheck;
+
+		//Check if it is already loaded.
+		var module = d._loadedModules[moduleName];
+		if(module){
+			return module;
+		}
+
+		// convert periods to slashes
+		var relpath = d._getModuleSymbols(moduleName).join("/") + '.js';
+
+		var modArg = !omitModuleCheck ? moduleName : null;
+		var ok = d._loadPath(relpath, modArg);
+
+		if(!ok && !omitModuleCheck){
+			throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'");
+		}
+
+		// check that the symbol was defined
+		// Don't bother if we're doing xdomain (asynchronous) loading.
+		if(!omitModuleCheck && !d._isXDomain){
+			// pass in false so we can give better error
+			module = d._loadedModules[moduleName];
+			if(!module){
+				throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); 
+			}
+		}
+
+		return module;
+	}
+
+	dojo.provide = function(/*String*/ resourceName){
+		//	summary:
+		//		Register a resource with the package system. Works in conjunction with `dojo.require`
+		//
+		//	description:
+		//		Each javascript source file is called a resource.  When a
+		//		resource is loaded by the browser, `dojo.provide()` registers
+		//		that it has been loaded.
+		//
+		//		Each javascript source file must have at least one
+		//		`dojo.provide()` call at the top of the file, corresponding to
+		//		the file name.  For example, `js/dojo/foo.js` must have
+		//		`dojo.provide("dojo.foo");` before any calls to
+		//		`dojo.require()` are made.
+		//	
+		//		For backwards compatibility reasons, in addition to registering
+		//		the resource, `dojo.provide()` also ensures that the javascript
+		//		object for the module exists.  For example,
+		//		`dojo.provide("dojox.data.FlickrStore")`, in addition to
+		//		registering that `FlickrStore.js` is a resource for the
+		//		`dojox.data` module, will ensure that the `dojox.data`
+		//		javascript object exists, so that calls like 
+		//		`dojo.data.foo = function(){ ... }` don't fail.
+		//
+		//		In the case of a build where multiple javascript source files
+		//		are combined into one bigger file (similar to a .lib or .jar
+		//		file), that file may contain multiple dojo.provide() calls, to
+		//		note that it includes multiple resources.
+		//
+		// resourceName: String
+		//		A dot-sperated string identifying a resource. 
+		//
+		// example:
+		//	Safely create a `my` object, and make dojo.require("my.CustomModule") work
+		//	|	dojo.provide("my.CustomModule"); 
+
+		//Make sure we have a string.
+		resourceName = resourceName + "";
+		return (d._loadedModules[resourceName] = d.getObject(resourceName, true)); // Object
+	}
+
+	//Start of old bootstrap2:
+
+	dojo.platformRequire = function(/*Object*/modMap){
+		//	summary:
+		//		require one or more modules based on which host environment
+		//		Dojo is currently operating in
+		//	description:
+		//		This method takes a "map" of arrays which one can use to
+		//		optionally load dojo modules. The map is indexed by the
+		//		possible dojo.name_ values, with two additional values:
+		//		"default" and "common". The items in the "default" array will
+		//		be loaded if none of the other items have been choosen based on
+		//		dojo.name_, set by your host environment. The items in the
+		//		"common" array will *always* be loaded, regardless of which
+		//		list is chosen.
+		//	example:
+		//		|	dojo.platformRequire({
+		//		|		browser: [
+		//		|			"foo.sample", // simple module
+		//		|			"foo.test",
+		//		|			["foo.bar.baz", true] // skip object check in _loadModule (dojo.require)
+		//		|		],
+		//		|		default: [ "foo.sample._base" ],
+		//		|		common: [ "important.module.common" ]
+		//		|	});
+
+		var common = modMap.common || [];
+		var result = common.concat(modMap[d._name] || modMap["default"] || []);
+
+		for(var x=0; x<result.length; x++){
+			var curr = result[x];
+			if(curr.constructor == Array){
+				d._loadModule.apply(d, curr);
+			}else{
+				d._loadModule(curr);
+			}
+		}
+	}
+
+	dojo.requireIf = function(/*Boolean*/ condition, /*String*/ resourceName){
+		// summary:
+		//		If the condition is true then call `dojo.require()` for the specified
+		//		resource
+		//
+		// example:
+		//	|	dojo.requireIf(dojo.isBrowser, "my.special.Module");
+		
+		if(condition === true){
+			// FIXME: why do we support chained require()'s here? does the build system?
+			var args = [];
+			for(var i = 1; i < arguments.length; i++){ 
+				args.push(arguments[i]);
+			}
+			d.require.apply(d, args);
+		}
+	}
+
+	dojo.requireAfterIf = d.requireIf;
+
+	dojo.registerModulePath = function(/*String*/module, /*String*/prefix){
+		//	summary: 
+		//		Maps a module name to a path
+		//	description: 
+		//		An unregistered module is given the default path of ../[module],
+		//		relative to Dojo root. For example, module acme is mapped to
+		//		../acme.  If you want to use a different module name, use
+		//		dojo.registerModulePath. 
+		//	example:
+		//		If your dojo.js is located at this location in the web root:
+		//	|	/myapp/js/dojo/dojo/dojo.js
+		//		and your modules are located at:
+		//	|	/myapp/js/foo/bar.js
+		//	|	/myapp/js/foo/baz.js
+		//	|	/myapp/js/foo/thud/xyzzy.js
+		//		Your application can tell Dojo to locate the "foo" namespace by calling:
+		//	|	dojo.registerModulePath("foo", "../../foo");
+		//		At which point you can then use dojo.require() to load the
+		//		modules (assuming they provide() the same things which are
+		//		required). The full code might be:
+		//	|	<script type="text/javascript" 
+		//	|		src="/myapp/js/dojo/dojo/dojo.js"></script>
+		//	|	<script type="text/javascript">
+		//	|		dojo.registerModulePath("foo", "../../foo");
+		//	|		dojo.require("foo.bar");
+		//	|		dojo.require("foo.baz");
+		//	|		dojo.require("foo.thud.xyzzy");
+		//	|	</script>
+		d._modulePrefixes[module] = { name: module, value: prefix };
+	}
+
+	dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
+		// summary:
+		//		Declares translated resources and loads them if necessary, in the
+		//		same style as dojo.require.  Contents of the resource bundle are
+		//		typically strings, but may be any name/value pair, represented in
+		//		JSON format.  See also `dojo.i18n.getLocalization`.
+		//
+		// description:
+		//		Load translated resource bundles provided underneath the "nls"
+		//		directory within a package.  Translated resources may be located in
+		//		different packages throughout the source tree.  
+		//
+		//		Each directory is named for a locale as specified by RFC 3066,
+		//		(http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase.
+		//		Note that the two bundles in the example do not define all the
+		//		same variants.  For a given locale, bundles will be loaded for
+		//		that locale and all more general locales above it, including a
+		//		fallback at the root directory.  For example, a declaration for
+		//		the "de-at" locale will first load `nls/de-at/bundleone.js`,
+		//		then `nls/de/bundleone.js` and finally `nls/bundleone.js`.  The
+		//		data will be flattened into a single Object so that lookups
+		//		will follow this cascading pattern.  An optional build step can
+		//		preload the bundles to avoid data redundancy and the multiple
+		//		network hits normally required to load these resources.
+		//
+		// moduleName: 
+		//		name of the package containing the "nls" directory in which the
+		//		bundle is found
+		//
+		// bundleName: 
+		//		bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a
+		//		a bundle name is not supported, since "nls" is the name of the folder
+		//		that holds bundles. Using "nls" as the bundle name will cause problems
+		//		with the custom build.
+		//
+		// locale: 
+		//		the locale to load (optional)  By default, the browser's user
+		//		locale as defined by dojo.locale
+		//
+		// availableFlatLocales: 
+		//		A comma-separated list of the available, flattened locales for this
+		//		bundle. This argument should only be set by the build process.
+		//
+		//	example:
+		//		A particular widget may define one or more resource bundles,
+		//		structured in a program as follows, where moduleName is
+		//		mycode.mywidget and bundleNames available include bundleone and
+		//		bundletwo:
+		//	|		...
+		//	|	mycode/
+		//	|		mywidget/
+		//	|			nls/
+		//	|				bundleone.js (the fallback translation, English in this example)
+		//	|				bundletwo.js (also a fallback translation)
+		//	|				de/
+		//	|					bundleone.js
+		//	|					bundletwo.js
+		//	|				de-at/
+		//	|					bundleone.js
+		//	|				en/
+		//	|					(empty; use the fallback translation)
+		//	|				en-us/
+		//	|					bundleone.js
+		//	|				en-gb/
+		//	|					bundleone.js
+		//	|				es/
+		//	|					bundleone.js
+		//	|					bundletwo.js
+		//	|				  ...etc
+		//	|				...
+		//
+
+		d.require("dojo.i18n");
+		d.i18n._requireLocalization.apply(d.hostenv, arguments);
+	};
+
+
+	var ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),
+		ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$");
+
+	dojo._Url = function(/*dojo._Url|String...*/){
+		// summary: 
+		//		Constructor to create an object representing a URL.
+		//		It is marked as private, since we might consider removing
+		//		or simplifying it.
+		// description: 
+		//		Each argument is evaluated in order relative to the next until
+		//		a canonical uri is produced. To get an absolute Uri relative to
+		//		the current document use:
+		//      	new dojo._Url(document.baseURI, url)
+
+		var n = null,
+			_a = arguments,
+			uri = [_a[0]];
+		// resolve uri components relative to each other
+		for(var i = 1; i<_a.length; i++){
+			if(!_a[i]){ continue; }
+
+			// Safari doesn't support this.constructor so we have to be explicit
+			// FIXME: Tracked (and fixed) in Webkit bug 3537.
+			//		http://bugs.webkit.org/show_bug.cgi?id=3537
+			var relobj = new d._Url(_a[i]+""),
+				uriobj = new d._Url(uri[0]+"");
+
+			if(
+				relobj.path == "" &&
+				!relobj.scheme &&
+				!relobj.authority &&
+				!relobj.query
+			){
+				if(relobj.fragment != n){
+					uriobj.fragment = relobj.fragment;
+				}
+				relobj = uriobj;
+			}else if(!relobj.scheme){
+				relobj.scheme = uriobj.scheme;
+
+				if(!relobj.authority){
+					relobj.authority = uriobj.authority;
+
+					if(relobj.path.charAt(0) != "/"){
+						var path = uriobj.path.substring(0,
+							uriobj.path.lastIndexOf("/") + 1) + relobj.path;
+
+						var segs = path.split("/");
+						for(var j = 0; j < segs.length; j++){
+							if(segs[j] == "."){
+								// flatten "./" references
+								if(j == segs.length - 1){
+									segs[j] = "";
+								}else{
+									segs.splice(j, 1);
+									j--;
+								}
+							}else if(j > 0 && !(j == 1 && segs[0] == "") &&
+								segs[j] == ".." && segs[j-1] != ".."){
+								// flatten "../" references
+								if(j == (segs.length - 1)){
+									segs.splice(j, 1);
+									segs[j - 1] = "";
+								}else{
+									segs.splice(j - 1, 2);
+									j -= 2;
+								}
+							}
+						}
+						relobj.path = segs.join("/");
+					}
+				}
+			}
+
+			uri = [];
+			if(relobj.scheme){ 
+				uri.push(relobj.scheme, ":");
+			}
+			if(relobj.authority){
+				uri.push("//", relobj.authority);
+			}
+			uri.push(relobj.path);
+			if(relobj.query){
+				uri.push("?", relobj.query);
+			}
+			if(relobj.fragment){
+				uri.push("#", relobj.fragment);
+			}
+		}
+
+		this.uri = uri.join("");
+
+		// break the uri into its main components
+		var r = this.uri.match(ore);
+
+		this.scheme = r[2] || (r[1] ? "" : n);
+		this.authority = r[4] || (r[3] ? "" : n);
+		this.path = r[5]; // can never be undefined
+		this.query = r[7] || (r[6] ? "" : n);
+		this.fragment  = r[9] || (r[8] ? "" : n);
+
+		if(this.authority != n){
+			// server based naming authority
+			r = this.authority.match(ire);
+
+			this.user = r[3] || n;
+			this.password = r[4] || n;
+			this.host = r[6] || r[7]; // ipv6 || ipv4
+			this.port = r[9] || n;
+		}
+	}
+
+	dojo._Url.prototype.toString = function(){ return this.uri; };
+
+	dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){
+		//	summary: 
+		//		Returns a `dojo._Url` object relative to a module.
+		//	example:
+		//	|	var pngPath = dojo.moduleUrl("acme","images/small.png");
+		//	|	console.dir(pngPath); // list the object properties
+		//	|	// create an image and set it's source to pngPath's value:
+		//	|	var img = document.createElement("img");
+		// 	|	// NOTE: we assign the string representation of the url object
+		//	|	img.src = pngPath.toString(); 
+		//	|	// add our image to the document
+		//	|	dojo.body().appendChild(img);
+		//	example: 
+		//		you may de-reference as far as you like down the package
+		//		hierarchy.  This is sometimes handy to avoid lenghty relative
+		//		urls or for building portable sub-packages. In this example,
+		//		the `acme.widget` and `acme.util` directories may be located
+		//		under different roots (see `dojo.registerModulePath`) but the
+		//		the modules which reference them can be unaware of their
+		//		relative locations on the filesystem:
+		//	|	// somewhere in a configuration block
+		//	|	dojo.registerModulePath("acme.widget", "../../acme/widget");
+		//	|	dojo.registerModulePath("acme.util", "../../util");
+		//	|	
+		//	|	// ...
+		//	|	
+		//	|	// code in a module using acme resources
+		//	|	var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html");
+		//	|	var dataPath = dojo.moduleUrl("acme.util","resources/data.json");
+
+		var loc = d._getModuleSymbols(module).join('/');
+		if(!loc){ return null; }
+		if(loc.lastIndexOf("/") != loc.length-1){
+			loc += "/";
+		}
+		
+		//If the path is an absolute path (starts with a / or is on another
+		//domain/xdomain) then don't add the baseUrl.
+		var colonIndex = loc.indexOf(":");
+		if(loc.charAt(0) != "/" && (colonIndex == -1 || colonIndex > loc.indexOf("/"))){
+			loc = d.baseUrl + loc;
+		}
+
+		return new d._Url(loc, url); // dojo._Url
+	}
+})();
+
+/*=====
+dojo.isBrowser = {
+	//	example:
+	//	|	if(dojo.isBrowser){ ... }
+};
+
+dojo.isFF = {
+	//	example:
+	//	|	if(dojo.isFF > 1){ ... }
+};
+
+dojo.isIE = {
+	// example:
+	//	|	if(dojo.isIE > 6){
+	//	|		// we are IE7
+	// 	|	}
+};
+
+dojo.isSafari = {
+	//	example:
+	//	|	if(dojo.isSafari){ ... }
+	//	example: 
+	//		Detect iPhone:
+	//	|	if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ 
+	//	|		// we are iPhone. Note, iPod touch reports "iPod" above and fails this test.
+	//	|	}
+};
+
+dojo = {
+	// isBrowser: Boolean
+	//		True if the client is a web-browser
+	isBrowser: true,
+	//	isFF: Number | undefined
+	//		Version as a Number if client is FireFox. undefined otherwise. Corresponds to
+	//		major detected FireFox version (1.5, 2, 3, etc.)
+	isFF: 2,
+	//	isIE: Number | undefined
+	//		Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to
+	//		major detected IE version (6, 7, 8, etc.)
+	isIE: 6,
+	//	isKhtml: Number | undefined
+	//		Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major
+	//		detected version.
+	isKhtml: 0,
+	//	isWebKit: Number | undefined
+	//		Version as a Number if client is a WebKit-derived browser (Konqueror,
+	//		Safari, Chrome, etc.). undefined otherwise.
+	isWebKit: 0,
+	//	isMozilla: Number | undefined
+	//		Version as a Number if client is a Mozilla-based browser (Firefox,
+	//		SeaMonkey). undefined otherwise. Corresponds to major detected version.
+	isMozilla: 0,
+	//	isOpera: Number | undefined
+	//		Version as a Number if client is Opera. undefined otherwise. Corresponds to
+	//		major detected version.
+	isOpera: 0,
+	//	isSafari: Number | undefined
+	//		Version as a Number if client is Safari or iPhone. undefined otherwise.
+	isSafari: 0,
+	//	isChrome: Number | undefined
+	//		Version as a Number if client is Chrome browser. undefined otherwise.
+	isChrome: 0
+	//	isMac: Boolean
+	//		True if the client runs on Mac
+}
+=====*/
+
+if(typeof window != 'undefined'){
+	dojo.isBrowser = true;
+	dojo._name = "browser";
+
+
+	// attempt to figure out the path to dojo if it isn't set in the config
+	(function(){
+		var d = dojo;
+
+		// this is a scope protection closure. We set browser versions and grab
+		// the URL we were loaded from here.
+
+		// grab the node we were loaded from
+		if(document && document.getElementsByTagName){
+			var scripts = document.getElementsByTagName("script");
+			var rePkg = /dojo(\.xd)?\.js(\W|$)/i;
+			for(var i = 0; i < scripts.length; i++){
+				var src = scripts[i].getAttribute("src");
+				if(!src){ continue; }
+				var m = src.match(rePkg);
+				if(m){
+					// find out where we came from
+					if(!d.config.baseUrl){
+						d.config.baseUrl = src.substring(0, m.index);
+					}
+					// and find out if we need to modify our behavior
+					var cfg = scripts[i].getAttribute("djConfig");
+					if(cfg){
+						var cfgo = eval("({ "+cfg+" })");
+						for(var x in cfgo){
+							dojo.config[x] = cfgo[x];
+						}
+					}
+					break; // "first Dojo wins"
+				}
+			}
+		}
+		d.baseUrl = d.config.baseUrl;
+
+		// fill in the rendering support information in dojo.render.*
+		var n = navigator;
+		var dua = n.userAgent,
+			dav = n.appVersion,
+			tv = parseFloat(dav);
+
+		if(dua.indexOf("Opera") >= 0){ d.isOpera = tv; }
+		if(dua.indexOf("AdobeAIR") >= 0){ d.isAIR = 1; }
+		d.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0;
+		d.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined;
+		d.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined;
+		d.isMac = dav.indexOf("Macintosh") >= 0;
+
+		// safari detection derived from:
+		//		http://developer.apple.com/internet/safari/faq.html#anchor2
+		//		http://developer.apple.com/internet/safari/uamatrix.html
+		var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
+		if(index && !dojo.isChrome){
+			// try to grab the explicit Safari version first. If we don't get
+			// one, look for less than 419.3 as the indication that we're on something
+			// "Safari 2-ish".
+			d.isSafari = parseFloat(dav.split("Version/")[1]);
+			if(!d.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){
+				d.isSafari = 2;
+			}
+		}
+
+				if(dua.indexOf("Gecko") >= 0 && !d.isKhtml && !d.isWebKit){ d.isMozilla = d.isMoz = tv; }
+		if(d.isMoz){
+			//We really need to get away from this. Consider a sane isGecko approach for the future.
+			d.isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined;
+		}
+		if(document.all && !d.isOpera){
+			d.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;
+			//In cases where the page has an HTTP header or META tag with
+			//X-UA-Compatible, then it is in emulation mode.
+			//Make sure isIE reflects the desired version.
+			//document.documentMode of 5 means quirks mode.
+			//Only switch the value if documentMode's major version
+			//is different from isIE's major version.
+			var mode = document.documentMode;
+			if(mode && mode != 5 && Math.floor(d.isIE) != mode){
+				d.isIE = mode;
+			}
+		}
+
+		//Workaround to get local file loads of dojo to work on IE 7
+		//by forcing to not use native xhr.
+		if(dojo.isIE && window.location.protocol === "file:"){
+			dojo.config.ieForceActiveXXhr=true;
+		}
+		
+		d.isQuirks = document.compatMode == "BackCompat";
+
+		// TODO: is the HTML LANG attribute relevant?
+		d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase();
+
+		// These are in order of decreasing likelihood; this will change in time.
+				d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
+		
+		d._xhrObj = function(){
+			// summary: 
+			//		does the work of portably generating a new XMLHTTPRequest object.
+			var http, last_e;
+						if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){
+							try{ http = new XMLHttpRequest(); }catch(e){}
+						}
+			if(!http){
+				for(var i=0; i<3; ++i){
+					var progid = d._XMLHTTP_PROGIDS[i];
+					try{
+						http = new ActiveXObject(progid);
+					}catch(e){
+						last_e = e;
+					}
+
+					if(http){
+						d._XMLHTTP_PROGIDS = [progid];  // so faster next time
+						break;
+					}
+				}
+			}
+			
+			if(!http){
+				throw new Error("XMLHTTP not available: "+last_e);
+			}
+
+			return http; // XMLHTTPRequest instance
+		}
+
+		d._isDocumentOk = function(http){
+			var stat = http.status || 0,
+				lp = location.protocol;
+			return (stat >= 200 && stat < 300) || 	// Boolean
+				stat == 304 || 						// allow any 2XX response code
+				stat == 1223 || 						// get it out of the cache
+				// Internet Explorer mangled the status code OR we're Titanium/browser chrome/chrome extension requesting a local file
+				(!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:") );
+		}
+
+		//See if base tag is in use.
+		//This is to fix http://trac.dojotoolkit.org/ticket/3973,
+		//but really, we need to find out how to get rid of the dojo._Url reference
+		//below and still have DOH work with the dojo.i18n test following some other
+		//test that uses the test frame to load a document (trac #2757).
+		//Opera still has problems, but perhaps a larger issue of base tag support
+		//with XHR requests (hasBase is true, but the request is still made to document
+		//path, not base path).
+		var owloc = window.location+"";
+		var base = document.getElementsByTagName("base");
+		var hasBase = (base && base.length > 0);
+
+		d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
+			// summary: Read the contents of the specified uri and return those contents.
+			// uri:
+			//		A relative or absolute uri. If absolute, it still must be in
+			//		the same "domain" as we are.
+			// fail_ok:
+			//		Default false. If fail_ok and loading fails, return null
+			//		instead of throwing.
+			// returns: The response text. null is returned when there is a
+			//		failure and failure is okay (an exception otherwise)
+
+			// NOTE: must be declared before scope switches ie. this._xhrObj()
+			var http = d._xhrObj();
+
+			if(!hasBase && dojo._Url){
+				uri = (new dojo._Url(owloc, uri)).toString();
+			}
+
+			if(d.config.cacheBust){
+				//Make sure we have a string before string methods are used on uri
+				uri += "";
+				uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,"");
+			}
+
+			http.open('GET', uri, false);
+			try{
+				http.send(null);
+				if(!d._isDocumentOk(http)){
+					var err = Error("Unable to load "+uri+" status:"+ http.status);
+					err.status = http.status;
+					err.responseText = http.responseText;
+					throw err;
+				}
+			}catch(e){
+				if(fail_ok){ return null; } // null
+				// rethrow the exception
+				throw e;
+			}
+			return http.responseText; // String
+		}
+		
+
+		var _w = window;
+		var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){
+			// summary:
+			//		non-destructively adds the specified function to the node's
+			//		evtName handler.
+			// evtName: should be in the form "onclick" for "onclick" handlers.
+			// Make sure you pass in the "on" part.
+			var _a = _w.attachEvent || _w.addEventListener;
+			evtName = _w.attachEvent ? evtName : evtName.substring(2);
+			_a(evtName, function(){
+				fp.apply(_w, arguments);
+			}, false);
+		};
+
+
+		d._windowUnloaders = [];
+		
+		d.windowUnloaded = function(){
+			// summary:
+			//		signal fired by impending window destruction. You may use
+			//		dojo.addOnWindowUnload() to register a listener for this
+			//		event. NOTE: if you wish to dojo.connect() to this method
+			//		to perform page/application cleanup, be aware that this
+			//		event WILL NOT fire if no handler has been registered with
+			//		dojo.addOnWindowUnload. This behavior started in Dojo 1.3.
+			//		Previous versions always triggered dojo.windowUnloaded. See
+			//		dojo.addOnWindowUnload for more info.
+			var mll = d._windowUnloaders;
+			while(mll.length){
+				(mll.pop())();
+			}
+			d = null;
+		};
+
+		var _onWindowUnloadAttached = 0;
+		d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){
+			// summary:
+			//		registers a function to be triggered when window.onunload
+			//		fires. 
+			//	description:
+			//		The first time that addOnWindowUnload is called Dojo
+			//		will register a page listener to trigger your unload
+			//		handler with. Note that registering these handlers may
+			//		destory "fastback" page caching in browsers that support
+			//		it. Be careful trying to modify the DOM or access
+			//		JavaScript properties during this phase of page unloading:
+			//		they may not always be available. Consider
+			//		dojo.addOnUnload() if you need to modify the DOM or do
+			//		heavy JavaScript work since it fires at the eqivalent of
+			//		the page's "onbeforeunload" event.
+			// example:
+			//	|	dojo.addOnWindowUnload(functionPointer)
+			//	|	dojo.addOnWindowUnload(object, "functionName");
+			//	|	dojo.addOnWindowUnload(object, function(){ /* ... */});
+
+			d._onto(d._windowUnloaders, obj, functionName);
+			if(!_onWindowUnloadAttached){
+				_onWindowUnloadAttached = 1;
+				_handleNodeEvent("onunload", d.windowUnloaded);
+			}
+		};
+
+		var _onUnloadAttached = 0;
+		d.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){
+			// summary:
+			//		registers a function to be triggered when the page unloads.
+			//	description:
+			//		The first time that addOnUnload is called Dojo will
+			//		register a page listener to trigger your unload handler
+			//		with. 
+			//
+			//		In a browser enviroment, the functions will be triggered
+			//		during the window.onbeforeunload event. Be careful of doing
+			//		too much work in an unload handler. onbeforeunload can be
+			//		triggered if a link to download a file is clicked, or if
+			//		the link is a javascript: link. In these cases, the
+			//		onbeforeunload event fires, but the document is not
+			//		actually destroyed. So be careful about doing destructive
+			//		operations in a dojo.addOnUnload callback.
+			//
+			//		Further note that calling dojo.addOnUnload will prevent
+			//		browsers from using a "fast back" cache to make page
+			//		loading via back button instantaneous. 
+			// example:
+			//	|	dojo.addOnUnload(functionPointer)
+			//	|	dojo.addOnUnload(object, "functionName")
+			//	|	dojo.addOnUnload(object, function(){ /* ... */});
+
+			d._onto(d._unloaders, obj, functionName);
+			if(!_onUnloadAttached){
+				_onUnloadAttached = 1;
+				_handleNodeEvent("onbeforeunload", dojo.unloaded);
+			}
+		};
+
+	})();
+
+	//START DOMContentLoaded
+	dojo._initFired = false;
+	dojo._loadInit = function(e){
+		if(dojo._scrollIntervalId){
+			clearInterval(dojo._scrollIntervalId);
+			dojo._scrollIntervalId = 0;
+		}
+
+		if(!dojo._initFired){
+			dojo._initFired = true;
+
+			//Help out IE to avoid memory leak.
+			if(!dojo.config.afterOnLoad && window.detachEvent){
+				window.detachEvent("onload", dojo._loadInit);
+			}
+
+			if(dojo._inFlightCount == 0){
+				dojo._modulesLoaded();
+			}
+		}
+	}
+
+	if(!dojo.config.afterOnLoad){		
+		if(document.addEventListener){
+			//Standards. Hooray! Assumption here that if standards based,
+			//it knows about DOMContentLoaded. It is OK if it does not, the fall through
+			//to window onload should be good enough.
+			document.addEventListener("DOMContentLoaded", dojo._loadInit, false);
+			window.addEventListener("load", dojo._loadInit, false);
+		}else if(window.attachEvent){
+			window.attachEvent("onload", dojo._loadInit);
+
+			//DOMContentLoaded approximation. Diego Perini found this MSDN article
+			//that indicates doScroll is available after DOM ready, so do a setTimeout
+			//to check when it is available.
+			//http://msdn.microsoft.com/en-us/library/ms531426.aspx
+			if(!dojo.config.skipIeDomLoaded && self === self.top){
+				dojo._scrollIntervalId = setInterval(function (){
+					try{
+						//When dojo is loaded into an iframe in an IE HTML Application 
+						//(HTA), such as in a selenium test, javascript in the iframe
+						//can't see anything outside of it, so self===self.top is true,
+						//but the iframe is not the top window and doScroll will be 
+						//available before document.body is set. Test document.body
+						//before trying the doScroll trick
+						if(document.body){
+							document.documentElement.doScroll("left");
+							dojo._loadInit();
+						}
+					}catch (e){}
+				}, 30);
+			}
+		}
+	}
+
+		if(dojo.isIE){
+		try{
+			(function(){
+				document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
+				var vmlElems = ["*", "group", "roundrect", "oval", "shape", "rect", "imagedata", "path", "textpath", "text"],
+					i = 0, l = 1, s = document.createStyleSheet();
+				if(dojo.isIE >= 8){
+					i = 1;
+					l = vmlElems.length;
+				}
+				for(; i < l; ++i){
+					s.addRule("v\\:" + vmlElems[i], "behavior:url(#default#VML); display:inline-block");
+				}
+			})();
+		}catch(e){}
+	}
+		//END DOMContentLoaded
+
+
+	/*
+	OpenAjax.subscribe("OpenAjax", "onload", function(){
+		if(dojo._inFlightCount == 0){
+			dojo._modulesLoaded();
+		}
+	});
+
+	OpenAjax.subscribe("OpenAjax", "onunload", function(){
+		dojo.unloaded();
+	});
+	*/
+} //if (typeof window != 'undefined')
+
+//Register any module paths set up in djConfig. Need to do this
+//in the hostenvs since hostenv_browser can read djConfig from a
+//script tag's attribute.
+(function(){
+	var mp = dojo.config["modulePaths"];
+	if(mp){
+		for(var param in mp){
+			dojo.registerModulePath(param, mp[param]);
+		}
+	}
+})();
+
+//Load debug code if necessary.
+if(dojo.config.isDebug){
+	dojo.require("dojo._firebug.firebug");
+}
+
+if(dojo.config.debugAtAllCosts){
+	dojo.config.useXDomain = true;
+	dojo.require("dojo._base._loader.loader_xd");
+	dojo.require("dojo._base._loader.loader_debug");
+	dojo.require("dojo.i18n");
+}
+
+if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.lang"] = true;
+dojo.provide("dojo._base.lang");
+
+(function(){
+	var d = dojo, opts = Object.prototype.toString;
+
+	// Crockford (ish) functions
+
+	dojo.isString = function(/*anything*/ it){
+		//	summary:
+		//		Return true if it is a String
+		return (typeof it == "string" || it instanceof String); // Boolean
+	}
+
+	dojo.isArray = function(/*anything*/ it){
+		//	summary:
+		//		Return true if it is an Array.
+		//		Does not work on Arrays created in other windows.
+		return it && (it instanceof Array || typeof it == "array"); // Boolean
+	}
+
+	dojo.isFunction = function(/*anything*/ it){
+		// summary:
+		//		Return true if it is a Function
+		return opts.call(it) === "[object Function]";
+	};
+
+	dojo.isObject = function(/*anything*/ it){
+		// summary:
+		//		Returns true if it is a JavaScript object (or an Array, a Function
+		//		or null)
+		return it !== undefined &&
+			(it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean
+	}
+
+	dojo.isArrayLike = function(/*anything*/ it){
+		//	summary:
+		//		similar to dojo.isArray() but more permissive
+		//	description:
+		//		Doesn't strongly test for "arrayness".  Instead, settles for "isn't
+		//		a string or number and has a length property". Arguments objects
+		//		and DOM collections will return true when passed to
+		//		dojo.isArrayLike(), but will return false when passed to
+		//		dojo.isArray().
+		//	returns:
+		//		If it walks like a duck and quacks like a duck, return `true`
+		return it && it !== undefined && // Boolean
+			// keep out built-in constructors (Number, String, ...) which have length
+			// properties
+			!d.isString(it) && !d.isFunction(it) &&
+			!(it.tagName && it.tagName.toLowerCase() == 'form') &&
+			(d.isArray(it) || isFinite(it.length));
+	}
+
+	dojo.isAlien = function(/*anything*/ it){
+		// summary:
+		//		Returns true if it is a built-in function or some other kind of
+		//		oddball that *should* report as a function but doesn't
+		return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
+	}
+
+	dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){
+		// summary:
+		//		Adds all properties and methods of props to constructor's
+		//		prototype, making them available to all instances created with
+		//		constructor.
+		for(var i=1, l=arguments.length; i<l; i++){
+			d._mixin(constructor.prototype, arguments[i]);
+		}
+		return constructor; // Object
+	}
+
+	dojo._hitchArgs = function(scope, method /*,...*/){
+		var pre = d._toArray(arguments, 2);
+		var named = d.isString(method);
+		return function(){
+			// arrayify arguments
+			var args = d._toArray(arguments);
+			// locate our method
+			var f = named ? (scope||d.global)[method] : method;
+			// invoke with collected args
+			return f && f.apply(scope || this, pre.concat(args)); // mixed
+		} // Function
+	}
+
+	dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){
+		//	summary:
+		//		Returns a function that will only ever execute in the a given scope.
+		//		This allows for easy use of object member functions
+		//		in callbacks and other places in which the "this" keyword may
+		//		otherwise not reference the expected scope.
+		//		Any number of default positional arguments may be passed as parameters 
+		//		beyond "method".
+		//		Each of these values will be used to "placehold" (similar to curry)
+		//		for the hitched function.
+		//	scope:
+		//		The scope to use when method executes. If method is a string,
+		//		scope is also the object containing method.
+		//	method:
+		//		A function to be hitched to scope, or the name of the method in
+		//		scope to be hitched.
+		//	example:
+		//	|	dojo.hitch(foo, "bar")();
+		//		runs foo.bar() in the scope of foo
+		//	example:
+		//	|	dojo.hitch(foo, myFunction);
+		//		returns a function that runs myFunction in the scope of foo
+		//	example:
+		//		Expansion on the default positional arguments passed along from
+		//		hitch. Passed args are mixed first, additional args after.
+		//	|	var foo = { bar: function(a, b, c){ console.log(a, b, c); } };
+		//	|	var fn = dojo.hitch(foo, "bar", 1, 2);
+		//	|	fn(3); // logs "1, 2, 3"
+		//	example:
+		//	|	var foo = { bar: 2 };
+		//	|	dojo.hitch(foo, function(){ this.bar = 10; })();
+		//		execute an anonymous function in scope of foo
+		
+		if(arguments.length > 2){
+			return d._hitchArgs.apply(d, arguments); // Function
+		}
+		if(!method){
+			method = scope;
+			scope = null;
+		}
+		if(d.isString(method)){
+			scope = scope || d.global;
+			if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); }
+			return function(){ return scope[method].apply(scope, arguments || []); }; // Function
+		}
+		return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function
+	}
+
+	/*=====
+	dojo.delegate = function(obj, props){
+		//	summary:
+		//		Returns a new object which "looks" to obj for properties which it
+		//		does not have a value for. Optionally takes a bag of properties to
+		//		seed the returned object with initially.
+		//	description:
+		//		This is a small implementaton of the Boodman/Crockford delegation
+		//		pattern in JavaScript. An intermediate object constructor mediates
+		//		the prototype chain for the returned object, using it to delegate
+		//		down to obj for property lookup when object-local lookup fails.
+		//		This can be thought of similarly to ES4's "wrap", save that it does
+		//		not act on types but rather on pure objects.
+		//	obj:
+		//		The object to delegate to for properties not found directly on the
+		//		return object or in props.
+		//	props:
+		//		an object containing properties to assign to the returned object
+		//	returns:
+		//		an Object of anonymous type
+		//	example:
+		//	|	var foo = { bar: "baz" };
+		//	|	var thinger = dojo.delegate(foo, { thud: "xyzzy"});
+		//	|	thinger.bar == "baz"; // delegated to foo
+		//	|	foo.thud == undefined; // by definition
+		//	|	thinger.thud == "xyzzy"; // mixed in from props
+		//	|	foo.bar = "thonk";
+		//	|	thinger.bar == "thonk"; // still delegated to foo's bar
+	}
+	=====*/
+
+	dojo.delegate = dojo._delegate = (function(){
+		// boodman/crockford delegation w/ cornford optimization
+		function TMP(){}
+		return function(obj, props){
+			TMP.prototype = obj;
+			var tmp = new TMP();
+			TMP.prototype = null;
+			if(props){
+				d._mixin(tmp, props);
+			}
+			return tmp; // Object
+		}
+	})();
+
+	/*=====
+	dojo._toArray = function(obj, offset, startWith){
+		//	summary:
+		//		Converts an array-like object (i.e. arguments, DOMCollection) to an
+		//		array. Returns a new Array with the elements of obj.
+		//	obj: Object
+		//		the object to "arrayify". We expect the object to have, at a
+		//		minimum, a length property which corresponds to integer-indexed
+		//		properties.
+		//	offset: Number?
+		//		the location in obj to start iterating from. Defaults to 0.
+		//		Optional.
+		//	startWith: Array?
+		//		An array to pack with the properties of obj. If provided,
+		//		properties in obj are appended at the end of startWith and
+		//		startWith is the returned array.
+	}
+	=====*/
+
+	var efficient = function(obj, offset, startWith){
+		return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0));
+	};
+
+		var slow = function(obj, offset, startWith){
+		var arr = startWith||[];
+		for(var x = offset || 0; x < obj.length; x++){
+			arr.push(obj[x]);
+		}
+		return arr;
+	};
+	
+	dojo._toArray =
+				d.isIE ?  function(obj){
+			return ((obj.item) ? slow : efficient).apply(this, arguments);
+		} :
+				efficient;
+
+	dojo.partial = function(/*Function|String*/method /*, ...*/){
+		//	summary:
+		//		similar to hitch() except that the scope object is left to be
+		//		whatever the execution context eventually becomes.
+		//	description:
+		//		Calling dojo.partial is the functional equivalent of calling:
+		//		|	dojo.hitch(null, funcName, ...);
+		var arr = [ null ];
+		return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function
+	}
+
+	var extraNames = d._extraNames, extraLen = extraNames.length, empty = {};
+
+	dojo.clone = function(/*anything*/ o){
+		// summary:
+		//		Clones objects (including DOM nodes) and all children.
+		//		Warning: do not clone cyclic structures.
+		if(!o || typeof o != "object" || d.isFunction(o)){
+			// null, undefined, any non-object, or function
+			return o;	// anything
+		}
+		if(o.nodeType && "cloneNode" in o){
+			// DOM Node
+			return o.cloneNode(true); // Node
+		}
+		if(o instanceof Date){
+			// Date
+			return new Date(o.getTime());	// Date
+		}
+		var r, i, l, s, name;
+		if(d.isArray(o)){
+			// array
+			r = [];
+			for(i = 0, l = o.length; i < l; ++i){
+				if(i in o){
+					r.push(d.clone(o[i]));
+				}
+			}
+// we don't clone functions for performance reasons
+//		}else if(d.isFunction(o)){
+//			// function
+//			r = function(){ return o.apply(this, arguments); };
+		}else{
+			// generic objects
+			r = o.constructor ? new o.constructor() : {};
+		}
+		for(name in o){
+			// the "tobj" condition avoid copying properties in "source"
+			// inherited from Object.prototype.  For example, if target has a custom
+			// toString() method, don't overwrite it with the toString() method
+			// that source inherited from Object.prototype
+			s = o[name];
+			if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){
+				r[name] = d.clone(s);
+			}
+		}
+				// IE doesn't recognize some custom functions in for..in
+		if(extraLen){
+			for(i = 0; i < extraLen; ++i){
+				name = extraNames[i];
+				s = o[name];
+				if(!(name in r) || (r[name] !== s && (!(name in empty) || empty[name] !== s))){
+					r[name] = s; // functions only, we don't clone them
+				}
+			}
+		}
+				return r; // Object
+	}
+
+	/*=====
+	dojo.trim = function(str){
+		//	summary:
+		//		Trims whitespace from both sides of the string
+		//	str: String
+		//		String to be trimmed
+		//	returns: String
+		//		Returns the trimmed string
+		//	description:
+		//		This version of trim() was selected for inclusion into the base due
+		//		to its compact size and relatively good performance
+		//		(see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript)
+		//		Uses String.prototype.trim instead, if available.
+		//		The fastest but longest version of this function is located at
+		//		dojo.string.trim()
+		return "";	// String
+	}
+	=====*/
+
+	dojo.trim = String.prototype.trim ?
+		function(str){ return str.trim(); } :
+		function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); };
+
+	/*=====
+	dojo.replace = function(tmpl, map, pattern){
+		//	summary:
+		//		Performs parameterized substitutions on a string. Throws an
+		//		exception if any parameter is unmatched. 
+		//	tmpl: String
+		//		String to be used as a template.
+		//	map: Object|Function
+		//		If an object, it is used as a dictionary to look up substitutions.
+		//		If a function, it is called for every substitution with following
+		//		parameters: a whole match, a name, an offset, and the whole template
+		//		string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace
+		//		for more details).
+		//	pattern: RegEx?
+		//		Optional regular expression objects that overrides the default pattern.
+		//		Must be global and match one item. The default is: /\{([^\}]+)\}/g,
+		//		which matches patterns like that: "{xxx}", where "xxx" is any sequence
+		//		of characters, which doesn't include "}".
+		//	returns: String
+		//		Returns the substituted string.
+		//	example:
+		//	|	// uses a dictionary for substitutions:
+		//	|	dojo.replace("Hello, {name.first} {name.last} AKA {nick}!",
+		//	|	  {
+		//	|	    nick: "Bob",
+		//	|	    name: {
+		//	|	      first:  "Robert",
+		//	|	      middle: "X",
+		//	|	      last:   "Cringely"
+		//	|	    }
+		//	|	  });
+		//	|	// returns: Hello, Robert Cringely AKA Bob!
+		//	example:
+		//	|	// uses an array for substitutions:
+		//	|	dojo.replace("Hello, {0} {2}!",
+		//	|	  ["Robert", "X", "Cringely"]);
+		//	|	// returns: Hello, Robert Cringely!
+		//	example:
+		//	|	// uses a function for substitutions:
+		//	|	function sum(a){
+		//	|	  var t = 0;
+		//	|	  dojo.forEach(a, function(x){ t += x; });
+		//	|	  return t;
+		//	|	}
+		//	|	dojo.replace(
+		//	|	  "{count} payments averaging {avg} USD per payment.",
+		//	|	  dojo.hitch(
+		//	|	    { payments: [11, 16, 12] },
+		//	|	    function(_, key){
+		//	|	      switch(key){
+		//	|	        case "count": return this.payments.length;
+		//	|	        case "min":   return Math.min.apply(Math, this.payments);
+		//	|	        case "max":   return Math.max.apply(Math, this.payments);
+		//	|	        case "sum":   return sum(this.payments);
+		//	|	        case "avg":   return sum(this.payments) / this.payments.length;
+		//	|	      }
+		//	|	    }
+		//	|	  )
+		//	|	);
+		//	|	// prints: 3 payments averaging 13 USD per payment.
+		//	example:
+		//	|	// uses an alternative PHP-like pattern for substitutions:
+		//	|	dojo.replace("Hello, ${0} ${2}!",
+		//	|	  ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g);
+		//	|	// returns: Hello, Robert Cringely!
+		return "";	// String
+	}
+	=====*/
+
+	var _pattern = /\{([^\}]+)\}/g;
+	dojo.replace = function(tmpl, map, pattern){
+		return tmpl.replace(pattern || _pattern, d.isFunction(map) ?
+			map : function(_, k){ return d.getObject(k, false, map); });
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.array"] = true;
+
+dojo.provide("dojo._base.array");
+
+(function(){
+	var _getParts = function(arr, obj, cb){
+		return [ 
+			(typeof arr == "string") ? arr.split("") : arr, 
+			obj || dojo.global,
+			// FIXME: cache the anonymous functions we create here?
+			(typeof cb == "string") ? new Function("item", "index", "array", cb) : cb
+		];
+	};
+
+	var everyOrSome = function(/*Boolean*/every, /*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+		var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+		for(var i=0,l=arr.length; i<l; ++i){
+			var result = !!_p[2].call(_p[1], arr[i], i, arr);
+			if(every ^ result){
+				return result; // Boolean
+			}
+		}
+		return every; // Boolean
+	};
+
+	dojo.mixin(dojo, {
+		indexOf: function(	/*Array*/		array, 
+							/*Object*/		value,
+							/*Integer?*/	fromIndex,
+							/*Boolean?*/	findLast){
+			// summary:
+			//		locates the first index of the provided value in the
+			//		passed array. If the value is not found, -1 is returned.
+			// description:
+			//		This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when
+			//		run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
+			//		1.6's indexOf skips the holes in the sparse array.
+			//		For details on this method, see:
+			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf
+
+			var step = 1, end = array.length || 0, i = 0;
+			if(findLast){
+				i = end - 1;
+				step = end = -1;
+			}
+			if(fromIndex != undefined){ i = fromIndex; }
+			if((findLast && i > end) || i < end){
+				for(; i != end; i += step){
+					if(array[i] == value){ return i; }
+				}
+			}
+			return -1;	// Number
+		},
+
+		lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){
+			// summary:
+			//		locates the last index of the provided value in the passed
+			//		array. If the value is not found, -1 is returned.
+			// description:
+			//		This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when
+			//		run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript 
+			//		1.6's lastIndexOf skips the holes in the sparse array.
+			//		For details on this method, see:
+			// 			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf
+			return dojo.indexOf(array, value, fromIndex, true); // Number
+		},
+
+		forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+			//	summary:
+			//		for every item in arr, callback is invoked. Return values are ignored.
+			//		If you want to break out of the loop, consider using dojo.every() or dojo.some().
+			//		forEach does not allow breaking out of the loop over the items in arr.
+			//	arr:
+			//		the array to iterate over. If a string, operates on individual characters.
+			//	callback:
+			//		a function is invoked with three arguments: item, index, and array
+			//	thisObject:
+			//		may be used to scope the call to callback
+			//	description:
+			//		This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when 
+			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
+			//		the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.
+			//		For more details, see:
+			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach
+			//	example:
+			//	|	// log out all members of the array:
+			//	|	dojo.forEach(
+			//	|		[ "thinger", "blah", "howdy", 10 ],
+			//	|		function(item){
+			//	|			console.log(item);
+			//	|		}
+			//	|	);
+			//	example:
+			//	|	// log out the members and their indexes
+			//	|	dojo.forEach(
+			//	|		[ "thinger", "blah", "howdy", 10 ],
+			//	|		function(item, idx, arr){
+			//	|			console.log(item, "at index:", idx);
+			//	|		}
+			//	|	);
+			//	example:
+			//	|	// use a scoped object member as the callback
+			//	|	
+			//	|	var obj = {
+			//	|		prefix: "logged via obj.callback:", 
+			//	|		callback: function(item){
+			//	|			console.log(this.prefix, item);
+			//	|		}
+			//	|	};
+			//	|	
+			//	|	// specifying the scope function executes the callback in that scope
+			//	|	dojo.forEach(
+			//	|		[ "thinger", "blah", "howdy", 10 ],
+			//	|		obj.callback,
+			//	|		obj
+			//	|	);
+			//	|	
+			//	|	// alternately, we can accomplish the same thing with dojo.hitch()
+			//	|	dojo.forEach(
+			//	|		[ "thinger", "blah", "howdy", 10 ],
+			//	|		dojo.hitch(obj, "callback")
+			//	|	);
+
+			// match the behavior of the built-in forEach WRT empty arrs
+			if(!arr || !arr.length){ return; }
+
+			// FIXME: there are several ways of handilng thisObject. Is
+			// dojo.global always the default context?
+			var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+			for(var i=0,l=arr.length; i<l; ++i){ 
+				_p[2].call(_p[1], arr[i], i, arr);
+			}
+		},
+
+		every: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+			// summary:
+			//		Determines whether or not every item in arr satisfies the
+			//		condition implemented by callback.
+			// arr:
+			//		the array to iterate on. If a string, operates on individual characters.
+			// callback:
+			//		a function is invoked with three arguments: item, index,
+			//		and array and returns true if the condition is met.
+			// thisObject:
+			//		may be used to scope the call to callback
+			// description:
+			//		This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when 
+			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
+			//		the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.
+			//		For more details, see:
+			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every
+			// example:
+			//	|	// returns false
+			//	|	dojo.every([1, 2, 3, 4], function(item){ return item>1; });
+			// example:
+			//	|	// returns true 
+			//	|	dojo.every([1, 2, 3, 4], function(item){ return item>0; });
+			return everyOrSome(true, arr, callback, thisObject); // Boolean
+		},
+
+		some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+			// summary:
+			//		Determines whether or not any item in arr satisfies the
+			//		condition implemented by callback.
+			// arr:
+			//		the array to iterate over. If a string, operates on individual characters.
+			// callback:
+			//		a function is invoked with three arguments: item, index,
+			//		and array and returns true if the condition is met.
+			// thisObject:
+			//		may be used to scope the call to callback
+			// description:
+			//		This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when 
+			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
+			//		the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.
+			//		For more details, see:
+			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some
+			// example:
+			//	|	// is true
+			//	|	dojo.some([1, 2, 3, 4], function(item){ return item>1; });
+			// example:
+			//	|	// is false
+			//	|	dojo.some([1, 2, 3, 4], function(item){ return item<1; });
+			return everyOrSome(false, arr, callback, thisObject); // Boolean
+		},
+
+		map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){
+			// summary:
+			//		applies callback to each element of arr and returns
+			//		an Array with the results
+			// arr:
+			//		the array to iterate on. If a string, operates on
+			//		individual characters.
+			// callback:
+			//		a function is invoked with three arguments, (item, index,
+			//		array),  and returns a value
+			// thisObject:
+			//		may be used to scope the call to callback
+			// description:
+			//		This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when 
+			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
+			//		the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.
+			//		For more details, see:
+			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+			// example:
+			//	|	// returns [2, 3, 4, 5]
+			//	|	dojo.map([1, 2, 3, 4], function(item){ return item+1 });
+
+			var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+			var outArr = (arguments[3] ? (new arguments[3]()) : []);
+			for(var i=0,l=arr.length; i<l; ++i){
+				outArr.push(_p[2].call(_p[1], arr[i], i, arr));
+			}
+			return outArr; // Array
+		},
+
+		filter: function(/*Array*/arr, /*Function|String*/callback, /*Object?*/thisObject){
+			// summary:
+			//		Returns a new Array with those items from arr that match the
+			//		condition implemented by callback.
+			// arr:
+			//		the array to iterate over.
+			// callback:
+			//		a function that is invoked with three arguments (item,
+			//		index, array). The return of this function is expected to
+			//		be a boolean which determines whether the passed-in item
+			//		will be included in the returned array.
+			// thisObject:
+			//		may be used to scope the call to callback
+			// description:
+			//		This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when 
+			//		run over sparse arrays, this implemenation passes the "holes" in the sparse array to
+			//		the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. 
+			//		For more details, see:
+			//			https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+			// example:
+			//	|	// returns [2, 3, 4]
+			//	|	dojo.filter([1, 2, 3, 4], function(item){ return item>1; });
+
+			var _p = _getParts(arr, thisObject, callback); arr = _p[0];
+			var outArr = [];
+			for(var i=0,l=arr.length; i<l; ++i){
+				if(_p[2].call(_p[1], arr[i], i, arr)){
+					outArr.push(arr[i]);
+				}
+			}
+			return outArr; // Array
+		}
+	});
+})();
+/*
+*/
+
+}
+
+if(!dojo._hasResource["dojo._base.declare"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.declare"] = true;
+dojo.provide("dojo._base.declare");
+
+
+
+
+(function(){
+	var d = dojo, mix = d._mixin, op = Object.prototype, opts = op.toString,
+		xtor = new Function, counter = 0, cname = "constructor";
+
+	function err(msg){ throw new Error("declare: " + msg); }
+
+	// C3 Method Resolution Order (see http://www.python.org/download/releases/2.3/mro/)
+	function c3mro(bases){
+		var result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1,
+			l = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs;
+
+		// build a list of bases naming them if needed
+		for(; i < l; ++i){
+			base = bases[i];
+			if(!base){
+				err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?");
+			}else if(opts.call(base) != "[object Function]"){
+				err("mixin #" + i + " is not a callable constructor.");
+			}
+			lin = base._meta ? base._meta.bases : [base];
+			top = 0;
+			// add bases to the name map
+			for(j = lin.length - 1; j >= 0; --j){
+				proto = lin[j].prototype;
+				if(!proto.hasOwnProperty("declaredClass")){
+					proto.declaredClass = "uniqName_" + (counter++);
+				}
+				name = proto.declaredClass;
+				if(!nameMap.hasOwnProperty(name)){
+					nameMap[name] = {count: 0, refs: [], cls: lin[j]};
+					++clsCount;
+				}
+				rec = nameMap[name];
+				if(top && top !== rec){
+					rec.refs.push(top);
+					++top.count;
+				}
+				top = rec;
+			}
+			++top.count;
+			roots[0].refs.push(top);
+		}
+
+		// remove classes without external references recursively
+		while(roots.length){
+			top = roots.pop();
+			result.push(top.cls);
+			--clsCount;
+			// optimization: follow a single-linked chain
+			while(refs = top.refs, refs.length == 1){
+				top = refs[0];
+				if(!top || --top.count){
+					// branch or end of chain => do not end to roots
+					top = 0;
+					break;
+				}
+				result.push(top.cls);
+				--clsCount;
+			}
+			if(top){
+				// branch
+				for(i = 0, l = refs.length; i < l; ++i){
+					top = refs[i];
+					if(!--top.count){
+						roots.push(top);
+					}
+				}
+			}
+		}
+		if(clsCount){
+			err("can't build consistent linearization");
+		}
+
+		// calculate the superclass offset
+		base = bases[0];
+		result[0] = base ?
+			base._meta && base === result[result.length - base._meta.bases.length] ?
+				base._meta.bases.length : 1 : 0;
+
+		return result;
+	}
+
+	function inherited(args, a, f){
+		var name, chains, bases, caller, meta, base, proto, opf, pos,
+			cache = this._inherited = this._inherited || {};
+
+		// crack arguments
+		if(typeof args == "string"){
+			name = args;
+			args = a;
+			a = f;
+		}
+		f = 0;
+
+		caller = args.callee;
+		name = name || caller.nom;
+		if(!name){
+			err("can't deduce a name to call inherited()");
+		}
+
+		meta = this.constructor._meta;
+		bases = meta.bases;
+
+		pos = cache.p;
+		if(name != cname){
+			// method
+			if(cache.c !== caller){
+				// cache bust
+				pos = 0;
+				base = bases[0];
+				meta = base._meta;
+				if(meta.hidden[name] !== caller){
+					// error detection
+					chains = meta.chains;
+					if(chains && typeof chains[name] == "string"){
+						err("calling chained method with inherited: " + name);
+					}
+					// find caller
+					do{
+						meta = base._meta;
+						proto = base.prototype;
+						if(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){
+							break;
+						}
+					}while(base = bases[++pos]); // intentional assignment
+					pos = base ? pos : -1;
+				}
+			}
+			// find next
+			base = bases[++pos];
+			if(base){
+				proto = base.prototype;
+				if(base._meta && proto.hasOwnProperty(name)){
+					f = proto[name];
+				}else{
+					opf = op[name];
+					do{
+						proto = base.prototype;
+						f = proto[name];
+						if(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){
+							break;
+						}
+					}while(base = bases[++pos]); // intentional assignment
+				}
+			}
+			f = base && f || op[name];
+		}else{
+			// constructor
+			if(cache.c !== caller){
+				// cache bust
+				pos = 0;
+				meta = bases[0]._meta;
+				if(meta && meta.ctor !== caller){
+					// error detection
+					chains = meta.chains;
+					if(!chains || chains.constructor !== "manual"){
+						err("calling chained constructor with inherited");
+					}
+					// find caller
+					while(base = bases[++pos]){ // intentional assignment
+						meta = base._meta;
+						if(meta && meta.ctor === caller){
+							break;
+						}
+					}
+					pos = base ? pos : -1;
+				}
+			}
+			// find next
+			while(base = bases[++pos]){	// intentional assignment
+				meta = base._meta;
+				f = meta ? meta.ctor : base;
+				if(f){
+					break;
+				}
+			}
+			f = base && f;
+		}
+
+		// cache the found super method
+		cache.c = f;
+		cache.p = pos;
+
+		// now we have the result
+		if(f){
+			return a === true ? f : f.apply(this, a || args);
+		}
+		// intentionally if a super method was not found
+	}
+
+	function getInherited(name, args){
+		if(typeof name == "string"){
+			return this.inherited(name, args, true);
+		}
+		return this.inherited(name, true);
+	}
+
+	// emulation of "instanceof"
+	function isInstanceOf(cls){
+		var bases = this.constructor._meta.bases;
+		for(var i = 0, l = bases.length; i < l; ++i){
+			if(bases[i] === cls){
+				return true;
+			}
+		}
+		return this instanceof cls;
+	}
+
+	function mixOwn(target, source){
+		var name, i = 0, l = d._extraNames.length;
+		// add props adding metadata for incoming functions skipping a constructor
+		for(name in source){
+			if(name != cname && source.hasOwnProperty(name)){
+				target[name] = source[name];
+			}
+		}
+		// process unenumerable methods on IE
+		for(; i < l; ++i){
+			name = d._extraNames[i];
+			if(name != cname && source.hasOwnProperty(name)){
+				target[name] = source[name];
+			}
+		}
+	}
+
+	// implementation of safe mixin function
+	function safeMixin(target, source){
+		var name, t, i = 0, l = d._extraNames.length;
+		// add props adding metadata for incoming functions skipping a constructor
+		for(name in source){
+			t = source[name];
+			if((t !== op[name] || !(name in op)) && name != cname){
+				if(opts.call(t) == "[object Function]"){
+					// non-trivial function method => attach its name
+					t.nom = name;
+				}
+				target[name] = t;
+			}
+		}
+		// process unenumerable methods on IE
+		for(; i < l; ++i){
+			name = d._extraNames[i];
+			t = source[name];
+			if((t !== op[name] || !(name in op)) && name != cname){
+				if(opts.call(t) == "[object Function]"){
+					// non-trivial function method => attach its name
+					t.nom = name;
+				}
+				target[name] = t;
+			}
+		}
+		return target;
+	}
+
+	function extend(source){
+		safeMixin(this.prototype, source);
+		return this;
+	}
+
+	// chained constructor compatible with the legacy dojo.declare()
+	function chainedConstructor(bases, ctorSpecial){
+		return function(){
+			var a = arguments, args = a, a0 = a[0], f, i, m,
+				l = bases.length, preArgs;
+
+			if(!(this instanceof a.callee)){
+				// not called via new, so force it
+				return applyNew(a);
+			}
+
+			//this._inherited = {};
+			// perform the shaman's rituals of the original dojo.declare()
+			// 1) call two types of the preamble
+			if(ctorSpecial && (a0 && a0.preamble || this.preamble)){
+				// full blown ritual
+				preArgs = new Array(bases.length);
+				// prepare parameters
+				preArgs[0] = a;
+				for(i = 0;;){
+					// process the preamble of the 1st argument
+					a0 = a[0];
+					if(a0){
+						f = a0.preamble;
+						if(f){
+							a = f.apply(this, a) || a;
+						}
+					}
+					// process the preamble of this class
+					f = bases[i].prototype;
+					f = f.hasOwnProperty("preamble") && f.preamble;
+					if(f){
+						a = f.apply(this, a) || a;
+					}
+					// one peculiarity of the preamble:
+					// it is called if it is not needed,
+					// e.g., there is no constructor to call
+					// let's watch for the last constructor
+					// (see ticket #9795)
+					if(++i == l){
+						break;
+					}
+					preArgs[i] = a;
+				}
+			}
+			// 2) call all non-trivial constructors using prepared arguments
+			for(i = l - 1; i >= 0; --i){
+				f = bases[i];
+				m = f._meta;
+				f = m ? m.ctor : f;
+				if(f){
+					f.apply(this, preArgs ? preArgs[i] : a);
+				}
+			}
+			// 3) continue the original ritual: call the postscript
+			f = this.postscript;
+			if(f){
+				f.apply(this, args);
+			}
+		};
+	}
+
+
+	// chained constructor compatible with the legacy dojo.declare()
+	function singleConstructor(ctor, ctorSpecial){
+		return function(){
+			var a = arguments, t = a, a0 = a[0], f;
+
+			if(!(this instanceof a.callee)){
+				// not called via new, so force it
+				return applyNew(a);
+			}
+
+			//this._inherited = {};
+			// perform the shaman's rituals of the original dojo.declare()
+			// 1) call two types of the preamble
+			if(ctorSpecial){
+				// full blown ritual
+				if(a0){
+					// process the preamble of the 1st argument
+					f = a0.preamble;
+					if(f){
+						t = f.apply(this, t) || t;
+					}
+				}
+				f = this.preamble;
+				if(f){
+					// process the preamble of this class
+					f.apply(this, t);
+					// one peculiarity of the preamble:
+					// it is called even if it is not needed,
+					// e.g., there is no constructor to call
+					// let's watch for the last constructor
+					// (see ticket #9795)
+				}
+			}
+			// 2) call a constructor
+			if(ctor){
+				ctor.apply(this, a);
+			}
+			// 3) continue the original ritual: call the postscript
+			f = this.postscript;
+			if(f){
+				f.apply(this, a);
+			}
+		};
+	}
+
+	// plain vanilla constructor (can use inherited() to call its base constructor)
+	function simpleConstructor(bases){
+		return function(){
+			var a = arguments, i = 0, f, m;
+
+			if(!(this instanceof a.callee)){
+				// not called via new, so force it
+				return applyNew(a);
+			}
+
+			//this._inherited = {};
+			// perform the shaman's rituals of the original dojo.declare()
+			// 1) do not call the preamble
+			// 2) call the top constructor (it can use this.inherited())
+			for(; f = bases[i]; ++i){ // intentional assignment
+				m = f._meta;
+				f = m ? m.ctor : f;
+				if(f){
+					f.apply(this, a);
+					break;
+				}
+			}
+			// 3) call the postscript
+			f = this.postscript;
+			if(f){
+				f.apply(this, a);
+			}
+		};
+	}
+
+	function chain(name, bases, reversed){
+		return function(){
+			var b, m, f, i = 0, step = 1;
+			if(reversed){
+				i = bases.length - 1;
+				step = -1;
+			}
+			for(; b = bases[i]; i += step){ // intentional assignment
+				m = b._meta;
+				f = (m ? m.hidden : b.prototype)[name];
+				if(f){
+					f.apply(this, arguments);
+				}
+			}
+		};
+	}
+
+	// forceNew(ctor)
+	// return a new object that inherits from ctor.prototype but
+	// without actually running ctor on the object.
+	function forceNew(ctor){
+		// create object with correct prototype using a do-nothing
+		// constructor
+		xtor.prototype = ctor.prototype;
+		var t = new xtor;
+		xtor.prototype = null;	// clean up
+		return t;
+	}
+
+	// applyNew(args)
+	// just like 'new ctor()' except that the constructor and its arguments come
+	// from args, which must be an array or an arguments object
+	function applyNew(args){
+		// create an object with ctor's prototype but without
+		// calling ctor on it.
+		var ctor = args.callee, t = forceNew(ctor);
+		// execute the real constructor on the new object
+		ctor.apply(t, args);
+		return t;
+	}
+
+	d.declare = function(className, superclass, props){
+		// crack parameters
+		if(typeof className != "string"){
+			props = superclass;
+			superclass = className;
+			className = "";
+		}
+		props = props || {};
+
+		var proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass;
+
+		// build a prototype
+		if(opts.call(superclass) == "[object Array]"){
+			// C3 MRO
+			bases = c3mro(superclass);
+			t = bases[0];
+			mixins = bases.length - t;
+			superclass = bases[mixins];
+		}else{
+			bases = [0];
+			if(superclass){
+				if(opts.call(superclass) == "[object Function]"){
+					t = superclass._meta;
+					bases = bases.concat(t ? t.bases : superclass);
+				}else{
+					err("base class is not a callable constructor.");
+				}
+			}else if(superclass !== null){
+				err("unknown base class. Did you use dojo.require to pull it in?")
+			}
+		}
+		if(superclass){
+			for(i = mixins - 1;; --i){
+				proto = forceNew(superclass);
+				if(!i){
+					// stop if nothing to add (the last base)
+					break;
+				}
+				// mix in properties
+				t = bases[i];
+				(t._meta ? mixOwn : mix)(proto, t.prototype);
+				// chain in new constructor
+				ctor = new Function;
+				ctor.superclass = superclass;
+				ctor.prototype = proto;
+				superclass = proto.constructor = ctor;
+			}
+		}else{
+			proto = {};
+		}
+		// add all properties
+		safeMixin(proto, props);
+		// add constructor
+		t = props.constructor;
+		if(t !== op.constructor){
+			t.nom = cname;
+			proto.constructor = t;
+		}
+
+		// collect chains and flags
+		for(i = mixins - 1; i; --i){ // intentional assignment
+			t = bases[i]._meta;
+			if(t && t.chains){
+				chains = mix(chains || {}, t.chains);
+			}
+		}
+		if(proto["-chains-"]){
+			chains = mix(chains || {}, proto["-chains-"]);
+		}
+
+		// build ctor
+		t = !chains || !chains.hasOwnProperty(cname);
+		bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) :
+			(bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t));
+
+		// add meta information to the constructor
+		ctor._meta  = {bases: bases, hidden: props, chains: chains,
+			parents: parents, ctor: props.constructor};
+		ctor.superclass = superclass && superclass.prototype;
+		ctor.extend = extend;
+		ctor.prototype = proto;
+		proto.constructor = ctor;
+
+		// add "standard" methods to the prototype
+		proto.getInherited = getInherited;
+		proto.inherited = inherited;
+		proto.isInstanceOf = isInstanceOf;
+
+		// add name if specified
+		if(className){
+			proto.declaredClass = className;
+			d.setObject(className, ctor);
+		}
+
+		// build chains and add them to the prototype
+		if(chains){
+			for(name in chains){
+				if(proto[name] && typeof chains[name] == "string" && name != cname){
+					t = proto[name] = chain(name, bases, chains[name] === "after");
+					t.nom = name;
+				}
+			}
+		}
+		// chained methods do not return values
+		// no need to chain "invisible" functions
+
+		return ctor;	// Function
+	};
+
+	d.safeMixin = safeMixin;
+
+	/*=====
+	dojo.declare = function(className, superclass, props){
+		//	summary:
+		//		Create a feature-rich constructor from compact notation.
+		//	className: String?:
+		//		The optional name of the constructor (loosely, a "class")
+		//		stored in the "declaredClass" property in the created prototype.
+		//		It will be used as a global name for a created constructor.
+		//	superclass: Function|Function[]:
+		//		May be null, a Function, or an Array of Functions. This argument
+		//		specifies a list of bases (the left-most one is the most deepest
+		//		base).
+		//	props: Object:
+		//		An object whose properties are copied to the created prototype.
+		//		Add an instance-initialization function by making it a property
+		//		named "constructor".
+		//	returns:
+		//		New constructor function.
+		//	description:
+		//		Create a constructor using a compact notation for inheritance and
+		//		prototype extension.
+		//
+		//		Mixin ancestors provide a type of multiple inheritance.
+		//		Prototypes of mixin ancestors are copied to the new class:
+		//		changes to mixin prototypes will not affect classes to which
+		//		they have been mixed in.
+		//
+		//		Ancestors can be compound classes created by this version of
+		//		dojo.declare. In complex cases all base classes are going to be
+		//		linearized according to C3 MRO algorithm
+		//		(see http://www.python.org/download/releases/2.3/mro/ for more
+		//		details).
+		//
+		//		"className" is cached in "declaredClass" property of the new class,
+		//		if it was supplied. The immediate super class will be cached in
+		//		"superclass" property of the new class.
+		//
+		//		Methods in "props" will be copied and modified: "nom" property
+		//		(the declared name of the method) will be added to all copied
+		//		functions to help identify them for the internal machinery. Be
+		//		very careful, while reusing methods: if you use the same
+		//		function under different names, it can produce errors in some
+		//		cases.
+		//
+		//		It is possible to use constructors created "manually" (without
+		//		dojo.declare) as bases. They will be called as usual during the
+		//		creation of an instance, their methods will be chained, and even
+		//		called by "this.inherited()".
+		//
+		//		Special property "-chains-" governs how to chain methods. It is
+		//		a dictionary, which uses method names as keys, and hint strings
+		//		as values. If a hint string is "after", this method will be
+		//		called after methods of its base classes. If a hint string is
+		//		"before", this method will be called before methods of its base
+		//		classes.
+		//
+		//		If "constructor" is not mentioned in "-chains-" property, it will
+		//		be chained using the legacy mode: using "after" chaining,
+		//		calling preamble() method before each constructor, if available,
+		//		and calling postscript() after all constructors were executed.
+		//		If the hint is "after", it is chained as a regular method, but
+		//		postscript() will be called after the chain of constructors.
+		//		"constructor" cannot be chained "before", but it allows
+		//		a special hint string: "manual", which means that constructors
+		//		are not going to be chained in any way, and programmer will call
+		//		them manually using this.inherited(). In the latter case
+		//		postscript() will be called after the construction.
+		//
+		//		All chaining hints are "inherited" from base classes and
+		//		potentially can be overridden. Be very careful when overriding
+		//		hints! Make sure that all chained methods can work in a proposed
+		//		manner of chaining.
+		//
+		//		Once a method was chained, it is impossible to unchain it. The
+		//		only exception is "constructor". You don't need to define a
+		//		method in order to supply a chaining hint.
+		//
+		//		If a method is chained, it cannot use this.inherited() because
+		//		all other methods in the hierarchy will be called automatically.
+		//
+		//		Usually constructors and initializers of any kind are chained
+		//		using "after" and destructors of any kind are chained as
+		//		"before". Note that chaining assumes that chained methods do not
+		//		return any value: any returned value will be discarded.
+		//
+		//	example:
+		//	|	dojo.declare("my.classes.bar", my.classes.foo, {
+		//	|		// properties to be added to the class prototype
+		//	|		someValue: 2,
+		//	|		// initialization function
+		//	|		constructor: function(){
+		//	|			this.myComplicatedObject = new ReallyComplicatedObject();
+		//	|		},
+		//	|		// other functions
+		//	|		someMethod: function(){
+		//	|			doStuff();
+		//	|		}
+		//	|	});
+		//
+		//	example:
+		//	|	var MyBase = dojo.declare(null, {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//	|	var MyClass1 = dojo.declare(MyBase, {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//	|	var MyClass2 = dojo.declare(MyBase, {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//	|	var MyDiamond = dojo.declare([MyClass1, MyClass2], {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//
+		//	example:
+		//	|	var F = function(){ console.log("raw constructor"); };
+		//	|	F.prototype.method = function(){
+		//	|		console.log("raw method");
+		//	|	};
+		//	|	var A = dojo.declare(F, {
+		//	|		constructor: function(){
+		//	|			console.log("A.constructor");
+		//	|		},
+		//	|		method: function(){
+		//	|			console.log("before calling F.method...");
+		//	|			this.inherited(arguments);
+		//	|			console.log("...back in A");
+		//	|		}
+		//	|	});
+		//	|	new A().method();
+		//	|	// will print:
+		//	|	// raw constructor
+		//	|	// A.constructor
+		//	|	// before calling F.method...
+		//	|	// raw method
+		//	|	// ...back in A
+		//
+		//	example:
+		//	|	var A = dojo.declare(null, {
+		//	|		"-chains-": {
+		//	|			destroy: "before"
+		//	|		}
+		//	|	});
+		//	|	var B = dojo.declare(A, {
+		//	|		constructor: function(){
+		//	|			console.log("B.constructor");
+		//	|		},
+		//	|		destroy: function(){
+		//	|			console.log("B.destroy");
+		//	|		}
+		//	|	});
+		//	|	var C = dojo.declare(B, {
+		//	|		constructor: function(){
+		//	|			console.log("C.constructor");
+		//	|		},
+		//	|		destroy: function(){
+		//	|			console.log("C.destroy");
+		//	|		}
+		//	|	});
+		//	|	new C().destroy();
+		//	|	// prints:
+		//	|	// B.constructor
+		//	|	// C.constructor
+		//	|	// C.destroy
+		//	|	// B.destroy
+		//
+		//	example:
+		//	|	var A = dojo.declare(null, {
+		//	|		"-chains-": {
+		//	|			constructor: "manual"
+		//	|		}
+		//	|	});
+		//	|	var B = dojo.declare(A, {
+		//	|		constructor: function(){
+		//	|			// ...
+		//	|			// call the base constructor with new parameters
+		//	|			this.inherited(arguments, [1, 2, 3]);
+		//	|			// ...
+		//	|		}
+		//	|	});
+		//
+		//	example:
+		//	|	var A = dojo.declare(null, {
+		//	|		"-chains-": {
+		//	|			m1: "before"
+		//	|		},
+		//	|		m1: function(){
+		//	|			console.log("A.m1");
+		//	|		},
+		//	|		m2: function(){
+		//	|			console.log("A.m2");
+		//	|		}
+		//	|	});
+		//	|	var B = dojo.declare(A, {
+		//	|		"-chains-": {
+		//	|			m2: "after"
+		//	|		},
+		//	|		m1: function(){
+		//	|			console.log("B.m1");
+		//	|		},
+		//	|		m2: function(){
+		//	|			console.log("B.m2");
+		//	|		}
+		//	|	});
+		//	|	var x = new B();
+		//	|	x.m1();
+		//	|	// prints:
+		//	|	// B.m1
+		//	|	// A.m1
+		//	|	x.m2();
+		//	|	// prints:
+		//	|	// A.m2
+		//	|	// B.m2
+		return new Function(); // Function
+	};
+	=====*/
+
+	/*=====
+	dojo.safeMixin = function(target, source){
+		//	summary:
+		//		Mix in properties skipping a constructor and decorating functions
+		//		like it is done by dojo.declare.
+		//	target: Object
+		//		Target object to accept new properties.
+		//	source: Object
+		//		Source object for new properties.
+		//	description:
+		//		This function is used to mix in properties like dojo._mixin does,
+		//		but it skips a constructor property and decorates functions like
+		//		dojo.declare does.
+		//
+		//		It is meant to be used with classes and objects produced with
+		//		dojo.declare. Functions mixed in with dojo.safeMixin can use
+		//		this.inherited() like normal methods.
+		//
+		//		This function is used to implement extend() method of a constructor
+		//		produced with dojo.declare().
+		//
+		//	example:
+		//	|	var A = dojo.declare(null, {
+		//	|		m1: function(){
+		//	|			console.log("A.m1");
+		//	|		},
+		//	|		m2: function(){
+		//	|			console.log("A.m2");
+		//	|		}
+		//	|	});
+		//	|	var B = dojo.declare(A, {
+		//	|		m1: function(){
+		//	|			this.inherited(arguments);
+		//	|			console.log("B.m1");
+		//	|		}
+		//	|	});
+		//	|	B.extend({
+		//	|		m2: function(){
+		//	|			this.inherited(arguments);
+		//	|			console.log("B.m2");
+		//	|		}
+		//	|	});
+		//	|	var x = new B();
+		//	|	dojo.safeMixin(x, {
+		//	|		m1: function(){
+		//	|			this.inherited(arguments);
+		//	|			console.log("X.m1");
+		//	|		},
+		//	|		m2: function(){
+		//	|			this.inherited(arguments);
+		//	|			console.log("X.m2");
+		//	|		}
+		//	|	});
+		//	|	x.m2();
+		//	|	// prints:
+		//	|	// A.m1
+		//	|	// B.m1
+		//	|	// X.m1
+	};
+	=====*/
+
+	/*=====
+	Object.inherited = function(name, args, newArgs){
+		//	summary:
+		//		Calls a super method.
+		//	name: String?
+		//		The optional method name. Should be the same as the caller's
+		//		name. Usually "name" is specified in complex dynamic cases, when
+		//		the calling method was dynamically added, undecorated by
+		//		dojo.declare, and it cannot be determined.
+		//	args: Arguments
+		//		The caller supply this argument, which should be the original
+		//		"arguments".
+		//	newArgs: Object?
+		//		If "true", the found function will be returned without
+		//		executing it.
+		//		If Array, it will be used to call a super method. Otherwise
+		//		"args" will be used.
+		//	returns:
+		//		Whatever is returned by a super method, or a super method itself,
+		//		if "true" was specified as newArgs.
+		//	description:
+		//		This method is used inside method of classes produced with
+		//		dojo.declare to call a super method (next in the chain). It is
+		//		used for manually controlled chaining. Consider using the regular
+		//		chaining, because it is faster. Use "this.inherited()" only in
+		//		complex cases.
+		//
+		//		This method cannot me called from automatically chained
+		//		constructors including the case of a special (legacy)
+		//		constructor chaining. It cannot be called from chained methods.
+		//
+		//		If "this.inherited()" cannot find the next-in-chain method, it
+		//		does nothing and returns "undefined". The last method in chain
+		//		can be a default method implemented in Object, which will be
+		//		called last.
+		//
+		//		If "name" is specified, it is assumed that the method that
+		//		received "args" is the parent method for this call. It is looked
+		//		up in the chain list and if it is found the next-in-chain method
+		//		is called. If it is not found, the first-in-chain method is
+		//		called.
+		//
+		//		If "name" is not specified, it will be derived from the calling
+		//		method (using a methoid property "nom").
+		//
+		//	example:
+		//	|	var B = dojo.declare(A, {
+		//	|		method1: function(a, b, c){
+		//	|			this.inherited(arguments);
+		//	|		},
+		//	|		method2: function(a, b){
+		//	|			return this.inherited(arguments, [a + b]);
+		//	|		}
+		//	|	});
+		//	|	// next method is not in the chain list because it is added
+		//	|	// manually after the class was created.
+		//	|	B.prototype.method3 = function(){
+		//	|		console.log("This is a dynamically-added method.");
+		//	|		this.inherited("method3", arguments);
+		//	|	};
+		//	example:
+		//	|	var B = dojo.declare(A, {
+		//	|		method: function(a, b){
+		//	|			var super = this.inherited(arguments, true);
+		//	|			// ...
+		//	|			if(!super){
+		//	|				console.log("there is no super method");
+		//	|				return 0;
+		//	|			}
+		//	|			return super.apply(this, arguments);
+		//	|		}
+		//	|	});
+		return	{};	// Object
+	}
+	=====*/
+
+	/*=====
+	Object.getInherited = function(name, args){
+		//	summary:
+		//		Returns a super method.
+		//	name: String?
+		//		The optional method name. Should be the same as the caller's
+		//		name. Usually "name" is specified in complex dynamic cases, when
+		//		the calling method was dynamically added, undecorated by
+		//		dojo.declare, and it cannot be determined.
+		//	args: Arguments
+		//		The caller supply this argument, which should be the original
+		//		"arguments".
+		//	returns:
+		//		Returns a super method (Function) or "undefined".
+		//	description:
+		//		This method is a convenience method for "this.inherited()".
+		//		It uses the same algorithm but instead of executing a super
+		//		method, it returns it, or "undefined" if not found.
+		//
+		//	example:
+		//	|	var B = dojo.declare(A, {
+		//	|		method: function(a, b){
+		//	|			var super = this.getInherited(arguments);
+		//	|			// ...
+		//	|			if(!super){
+		//	|				console.log("there is no super method");
+		//	|				return 0;
+		//	|			}
+		//	|			return super.apply(this, arguments);
+		//	|		}
+		//	|	});
+		return	{};	// Object
+	}
+	=====*/
+
+	/*=====
+	Object.isInstanceOf = function(cls){
+		//	summary:
+		//		Checks the inheritance chain to see if it is inherited from this
+		//		class.
+		//	cls: Function
+		//		Class constructor.
+		//	returns:
+		//		"true", if this object is inherited from this class, "false"
+		//		otherwise.
+		//	description:
+		//		This method is used with instances of classes produced with
+		//		dojo.declare to determine of they support a certain interface or
+		//		not. It models "instanceof" operator.
+		//
+		//	example:
+		//	|	var A = dojo.declare(null, {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//	|	var B = dojo.declare(null, {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//	|	var C = dojo.declare([A, B], {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//	|	var D = dojo.declare(A, {
+		//	|		// constructor, properties, and methods go here
+		//	|		// ...
+		//	|	});
+		//	|
+		//	|	var a = new A(), b = new B(), c = new C(), d = new D();
+		//	|
+		//	|	console.log(a.isInstanceOf(A)); // true
+		//	|	console.log(b.isInstanceOf(A)); // false
+		//	|	console.log(c.isInstanceOf(A)); // true
+		//	|	console.log(d.isInstanceOf(A)); // true
+		//	|
+		//	|	console.log(a.isInstanceOf(B)); // false
+		//	|	console.log(b.isInstanceOf(B)); // true
+		//	|	console.log(c.isInstanceOf(B)); // true
+		//	|	console.log(d.isInstanceOf(B)); // false
+		//	|
+		//	|	console.log(a.isInstanceOf(C)); // false
+		//	|	console.log(b.isInstanceOf(C)); // false
+		//	|	console.log(c.isInstanceOf(C)); // true
+		//	|	console.log(d.isInstanceOf(C)); // false
+		//	|
+		//	|	console.log(a.isInstanceOf(D)); // false
+		//	|	console.log(b.isInstanceOf(D)); // false
+		//	|	console.log(c.isInstanceOf(D)); // false
+		//	|	console.log(d.isInstanceOf(D)); // true
+		return	{};	// Object
+	}
+	=====*/
+
+	/*=====
+	Object.extend = function(source){
+		//	summary:
+		//		Adds all properties and methods of source to constructor's
+		//		prototype, making them available to all instances created with
+		//		constructor. This method is specific to constructors created with
+		//		dojo.declare.
+		//	source: Object
+		//		Source object which properties are going to be copied to the
+		//		constructor's prototype.
+		//	description:
+		//		Adds source properties to the constructor's prototype. It can
+		//		override existing properties.
+		//
+		//		This method is similar to dojo.extend function, but it is specific
+		//		to constructors produced by dojo.declare. It is implemented
+		//		using dojo.safeMixin, and it skips a constructor property,
+		//		and properly decorates copied functions.
+		//
+		//	example:
+		//	|	var A = dojo.declare(null, {
+		//	|		m1: function(){},
+		//	|		s1: "Popokatepetl"
+		//	|	});
+		//	|	A.extend({
+		//	|		m1: function(){},
+		//	|		m2: function(){},
+		//	|		f1: true,
+		//	|		d1: 42
+		//	|	});
+	};
+	=====*/
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.connect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.connect"] = true;
+dojo.provide("dojo._base.connect");
+
+
+// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
+
+// low-level delegation machinery
+dojo._listener = {
+	// create a dispatcher function
+	getDispatcher: function(){
+		// following comments pulled out-of-line to prevent cloning them 
+		// in the returned function.
+		// - indices (i) that are really in the array of listeners (ls) will 
+		//   not be in Array.prototype. This is the 'sparse array' trick
+		//   that keeps us safe from libs that take liberties with built-in 
+		//   objects
+		// - listener is invoked with current scope (this)
+		return function(){
+			var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target;
+			// return value comes from original target function
+			var r = t && t.apply(this, arguments);
+			// make local copy of listener array so it is immutable during processing
+			var i, lls;
+											lls = [].concat(ls);
+							
+			// invoke listeners after target function
+			for(i in lls){
+				if(!(i in ap)){
+					lls[i].apply(this, arguments);
+				}
+			}
+			// return value comes from original target function
+			return r;
+		};
+	},
+	// add a listener to an object
+	add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
+		// Whenever 'method' is invoked, 'listener' will have the same scope.
+		// Trying to supporting a context object for the listener led to 
+		// complexity. 
+		// Non trivial to provide 'once' functionality here
+		// because listener could be the result of a dojo.hitch call,
+		// in which case two references to the same hitch target would not
+		// be equivalent. 
+		source = source || dojo.global;
+		// The source method is either null, a dispatcher, or some other function
+		var f = source[method];
+		// Ensure a dispatcher
+		if(!f || !f._listeners){
+			var d = dojo._listener.getDispatcher();
+			// original target function is special
+			d.target = f;
+			// dispatcher holds a list of listeners
+			d._listeners = []; 
+			// redirect source to dispatcher
+			f = source[method] = d;
+		}
+		// The contract is that a handle is returned that can 
+		// identify this listener for disconnect. 
+		//
+		// The type of the handle is private. Here is it implemented as Integer. 
+		// DOM event code has this same contract but handle is Function 
+		// in non-IE browsers.
+		//
+		// We could have separate lists of before and after listeners.
+		return f._listeners.push(listener); /*Handle*/
+	},
+	// remove a listener from an object
+	remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){
+		var f = (source || dojo.global)[method];
+		// remember that handle is the index+1 (0 is not a valid handle)
+		if(f && f._listeners && handle--){
+			delete f._listeners[handle];
+		}
+	}
+};
+
+// Multiple delegation for arbitrary methods.
+
+// This unit knows nothing about DOM, but we include DOM aware documentation
+// and dontFix argument here to help the autodocs. Actual DOM aware code is in
+// event.js.
+
+dojo.connect = function(/*Object|null*/ obj, 
+						/*String*/ event, 
+						/*Object|null*/ context, 
+						/*String|Function*/ method,
+						/*Boolean?*/ dontFix){
+	// summary:
+	//		`dojo.connect` is the core event handling and delegation method in
+	//		Dojo. It allows one function to "listen in" on the execution of
+	//		any other, triggering the second whenever the first is called. Many
+	//		listeners may be attached to a function, and source functions may
+	//		be either regular function calls or DOM events.
+	//
+	// description:
+	//		Connects listeners to actions, so that after event fires, a
+	//		listener is called with the same arguments passed to the original
+	//		function.
+	//
+	//		Since `dojo.connect` allows the source of events to be either a
+	//		"regular" JavaScript function or a DOM event, it provides a uniform
+	//		interface for listening to all the types of events that an
+	//		application is likely to deal with though a single, unified
+	//		interface. DOM programmers may want to think of it as
+	//		"addEventListener for everything and anything".
+	//
+	//		When setting up a connection, the `event` parameter must be a
+	//		string that is the name of the method/event to be listened for. If
+	//		`obj` is null, `dojo.global` is assumed, meaning that connections
+	//		to global methods are supported but also that you may inadvertently
+	//		connect to a global by passing an incorrect object name or invalid
+	//		reference.
+	//
+	//		`dojo.connect` generally is forgiving. If you pass the name of a
+	//		function or method that does not yet exist on `obj`, connect will
+	//		not fail, but will instead set up a stub method. Similarly, null
+	//		arguments may simply be omitted such that fewer than 4 arguments
+	//		may be required to set up a connection See the examples for details.
+	//
+	//		The return value is a handle that is needed to 
+	//		remove this connection with `dojo.disconnect`.
+	//
+	// obj: 
+	//		The source object for the event function. 
+	//		Defaults to `dojo.global` if null.
+	//		If obj is a DOM node, the connection is delegated 
+	//		to the DOM event manager (unless dontFix is true).
+	//
+	// event:
+	//		String name of the event function in obj. 
+	//		I.e. identifies a property `obj[event]`.
+	//
+	// context: 
+	//		The object that method will receive as "this".
+	//
+	//		If context is null and method is a function, then method
+	//		inherits the context of event.
+	//	
+	//		If method is a string then context must be the source 
+	//		object object for method (context[method]). If context is null,
+	//		dojo.global is used.
+	//
+	// method:
+	//		A function reference, or name of a function in context. 
+	//		The function identified by method fires after event does. 
+	//		method receives the same arguments as the event.
+	//		See context argument comments for information on method's scope.
+	//
+	// dontFix:
+	//		If obj is a DOM node, set dontFix to true to prevent delegation 
+	//		of this connection to the DOM event manager.
+	//
+	// example:
+	//		When obj.onchange(), do ui.update():
+	//	|	dojo.connect(obj, "onchange", ui, "update");
+	//	|	dojo.connect(obj, "onchange", ui, ui.update); // same
+	//
+	// example:
+	//		Using return value for disconnect:
+	//	|	var link = dojo.connect(obj, "onchange", ui, "update");
+	//	|	...
+	//	|	dojo.disconnect(link);
+	//
+	// example:
+	//		When onglobalevent executes, watcher.handler is invoked:
+	//	|	dojo.connect(null, "onglobalevent", watcher, "handler");
+	//
+	// example:
+	//		When ob.onCustomEvent executes, customEventHandler is invoked:
+	//	|	dojo.connect(ob, "onCustomEvent", null, "customEventHandler");
+	//	|	dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same
+	//
+	// example:
+	//		When ob.onCustomEvent executes, customEventHandler is invoked
+	//		with the same scope (this):
+	//	|	dojo.connect(ob, "onCustomEvent", null, customEventHandler);
+	//	|	dojo.connect(ob, "onCustomEvent", customEventHandler); // same
+	//
+	// example:
+	//		When globalEvent executes, globalHandler is invoked
+	//		with the same scope (this):
+	//	|	dojo.connect(null, "globalEvent", null, globalHandler);
+	//	|	dojo.connect("globalEvent", globalHandler); // same
+
+	// normalize arguments
+	var a=arguments, args=[], i=0;
+	// if a[0] is a String, obj was omitted
+	args.push(dojo.isString(a[0]) ? null : a[i++], a[i++]);
+	// if the arg-after-next is a String or Function, context was NOT omitted
+	var a1 = a[i+1];
+	args.push(dojo.isString(a1)||dojo.isFunction(a1) ? a[i++] : null, a[i++]);
+	// absorb any additional arguments
+	for(var l=a.length; i<l; i++){	args.push(a[i]); }
+	// do the actual work
+	return dojo._connect.apply(this, args); /*Handle*/
+}
+
+// used by non-browser hostenvs. always overriden by event.js
+dojo._connect = function(obj, event, context, method){
+	var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); 
+	return [obj, event, h, l]; // Handle
+}
+
+dojo.disconnect = function(/*Handle*/ handle){
+	// summary:
+	//		Remove a link created by dojo.connect.
+	// description:
+	//		Removes the connection between event and the method referenced by handle.
+	// handle:
+	//		the return value of the dojo.connect call that created the connection.
+	if(handle && handle[0] !== undefined){
+		dojo._disconnect.apply(this, handle);
+		// let's not keep this reference
+		delete handle[0];
+	}
+}
+
+dojo._disconnect = function(obj, event, handle, listener){
+	listener.remove(obj, event, handle);
+}
+
+// topic publish/subscribe
+
+dojo._topics = {};
+
+dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Function*/ method){
+	//	summary:
+	//		Attach a listener to a named topic. The listener function is invoked whenever the
+	//		named topic is published (see: dojo.publish).
+	//		Returns a handle which is needed to unsubscribe this listener.
+	//	context:
+	//		Scope in which method will be invoked, or null for default scope.
+	//	method:
+	//		The name of a function in context, or a function reference. This is the function that
+	//		is invoked when topic is published.
+	//	example:
+	//	|	dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); });
+	//	|	dojo.publish("alerts", [ "read this", "hello world" ]);																	
+
+	// support for 2 argument invocation (omitting context) depends on hitch
+	return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/
+}
+
+dojo.unsubscribe = function(/*Handle*/ handle){
+	//	summary:
+	//	 	Remove a topic listener. 
+	//	handle:
+	//	 	The handle returned from a call to subscribe.
+	//	example:
+	//	|	var alerter = dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
+	//	|	...
+	//	|	dojo.unsubscribe(alerter);
+	if(handle){
+		dojo._listener.remove(dojo._topics, handle[0], handle[1]);
+	}
+}
+
+dojo.publish = function(/*String*/ topic, /*Array*/ args){
+	//	summary:
+	//	 	Invoke all listener method subscribed to topic.
+	//	topic:
+	//	 	The name of the topic to publish.
+	//	args:
+	//	 	An array of arguments. The arguments will be applied 
+	//	 	to each topic subscriber (as first class parameters, via apply).
+	//	example:
+	//	|	dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
+	//	|	dojo.publish("alerts", [ "read this", "hello world" ]);	
+
+	// Note that args is an array, which is more efficient vs variable length
+	// argument list.  Ideally, var args would be implemented via Array
+	// throughout the APIs.
+	var f = dojo._topics[topic];
+	if(f){
+		f.apply(this, args||[]);
+	}
+}
+
+dojo.connectPublisher = function(	/*String*/ topic, 
+									/*Object|null*/ obj, 
+									/*String*/ event){
+	//	summary:
+	//	 	Ensure that every time obj.event() is called, a message is published
+	//	 	on the topic. Returns a handle which can be passed to
+	//	 	dojo.disconnect() to disable subsequent automatic publication on
+	//	 	the topic.
+	//	topic:
+	//	 	The name of the topic to publish.
+	//	obj: 
+	//	 	The source object for the event function. Defaults to dojo.global
+	//	 	if null.
+	//	event:
+	//	 	The name of the event function in obj. 
+	//	 	I.e. identifies a property obj[event].
+	//	example:
+	//	|	dojo.connectPublisher("/ajax/start", dojo, "xhrGet");
+	var pf = function(){ dojo.publish(topic, arguments); }
+	return event ? dojo.connect(obj, event, pf) : dojo.connect(obj, pf); //Handle
+};
+
+}
+
+if(!dojo._hasResource["dojo._base.Deferred"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.Deferred"] = true;
+dojo.provide("dojo._base.Deferred");
+
+
+(function(){
+	var mutator = function(){};		
+	var freeze = Object.freeze || function(){};
+	// A deferred provides an API for creating and resolving a promise.
+	dojo.Deferred = function(/*Function?*/canceller){
+	// summary:
+	//		Deferreds provide a generic means for encapsulating an asynchronous
+	// 		operation and notifying users of the completion and result of the operation. 
+	// description:
+	//		The dojo.Deferred API is based on the concept of promises that provide a
+	//		generic interface into the eventual completion of an asynchronous action.
+	//		The motivation for promises fundamentally is about creating a 
+	//		separation of concerns that allows one to achieve the same type of 
+	//		call patterns and logical data flow in asynchronous code as can be 
+	//		achieved in synchronous code. Promises allows one 
+	//		to be able to call a function purely with arguments needed for 
+	//		execution, without conflating the call with concerns of whether it is 
+	//		sync or async. One shouldn't need to alter a call's arguments if the 
+	//		implementation switches from sync to async (or vice versa). By having 
+	//		async functions return promises, the concerns of making the call are 
+	//		separated from the concerns of asynchronous interaction (which are 
+	//		handled by the promise).
+	// 
+	//  	The dojo.Deferred is a type of promise that provides methods for fulfilling the 
+	// 		promise with a successful result or an error. The most important method for 
+	// 		working with Dojo's promises is the then() method, which follows the 
+	// 		CommonJS proposed promise API. An example of using a Dojo promise:
+	//		
+	//		| 	var resultingPromise = someAsyncOperation.then(function(result){
+	//		|		... handle result ...
+	//		|	},
+	//		|	function(error){
+	//		|		... handle error ...
+	//		|	});
+	//	
+	//		The .then() call returns a new promise that represents the result of the 
+	// 		execution of the callback. The callbacks will never affect the original promises value.
+	//
+	//		The dojo.Deferred instances also provide the following functions for backwards compatibility:
+	//
+	//			* addCallback(handler)
+	//			* addErrback(handler)
+	//			* callback(result)
+	//			* errback(result)
+	//
+	//		Callbacks are allowed to return promisesthemselves, so
+	//		you can build complicated sequences of events with ease.
+	//
+	//		The creator of the Deferred may specify a canceller.  The canceller
+	//		is a function that will be called if Deferred.cancel is called
+	//		before the Deferred fires. You can use this to implement clean
+	//		aborting of an XMLHttpRequest, etc. Note that cancel will fire the
+	//		deferred with a CancelledError (unless your canceller returns
+	//		another kind of error), so the errbacks should be prepared to
+	//		handle that error for cancellable Deferreds.
+	// example:
+	//	|	var deferred = new dojo.Deferred();
+	//	|	setTimeout(function(){ deferred.callback({success: true}); }, 1000);
+	//	|	return deferred;
+	// example:
+	//		Deferred objects are often used when making code asynchronous. It
+	//		may be easiest to write functions in a synchronous manner and then
+	//		split code using a deferred to trigger a response to a long-lived
+	//		operation. For example, instead of register a callback function to
+	//		denote when a rendering operation completes, the function can
+	//		simply return a deferred:
+	//
+	//		|	// callback style:
+	//		|	function renderLotsOfData(data, callback){
+	//		|		var success = false
+	//		|		try{
+	//		|			for(var x in data){
+	//		|				renderDataitem(data[x]);
+	//		|			}
+	//		|			success = true;
+	//		|		}catch(e){ }
+	//		|		if(callback){
+	//		|			callback(success);
+	//		|		}
+	//		|	}
+	//
+	//		|	// using callback style
+	//		|	renderLotsOfData(someDataObj, function(success){
+	//		|		// handles success or failure
+	//		|		if(!success){
+	//		|			promptUserToRecover();
+	//		|		}
+	//		|	});
+	//		|	// NOTE: no way to add another callback here!!
+	// example:
+	//		Using a Deferred doesn't simplify the sending code any, but it
+	//		provides a standard interface for callers and senders alike,
+	//		providing both with a simple way to service multiple callbacks for
+	//		an operation and freeing both sides from worrying about details
+	//		such as "did this get called already?". With Deferreds, new
+	//		callbacks can be added at any time.
+	//
+	//		|	// Deferred style:
+	//		|	function renderLotsOfData(data){
+	//		|		var d = new dojo.Deferred();
+	//		|		try{
+	//		|			for(var x in data){
+	//		|				renderDataitem(data[x]);
+	//		|			}
+	//		|			d.callback(true);
+	//		|		}catch(e){ 
+	//		|			d.errback(new Error("rendering failed"));
+	//		|		}
+	//		|		return d;
+	//		|	}
+	//
+	//		|	// using Deferred style
+	//		|	renderLotsOfData(someDataObj).then(null, function(){
+	//		|		promptUserToRecover();
+	//		|	});
+	//		|	// NOTE: addErrback and addCallback both return the Deferred
+	//		|	// again, so we could chain adding callbacks or save the
+	//		|	// deferred for later should we need to be notified again.
+	// example:
+	//		In this example, renderLotsOfData is syncrhonous and so both
+	//		versions are pretty artificial. Putting the data display on a
+	//		timeout helps show why Deferreds rock:
+	//
+	//		|	// Deferred style and async func
+	//		|	function renderLotsOfData(data){
+	//		|		var d = new dojo.Deferred();
+	//		|		setTimeout(function(){
+	//		|			try{
+	//		|				for(var x in data){
+	//		|					renderDataitem(data[x]);
+	//		|				}
+	//		|				d.callback(true);
+	//		|			}catch(e){ 
+	//		|				d.errback(new Error("rendering failed"));
+	//		|			}
+	//		|		}, 100);
+	//		|		return d;
+	//		|	}
+	//
+	//		|	// using Deferred style
+	//		|	renderLotsOfData(someDataObj).then(null, function(){
+	//		|		promptUserToRecover();
+	//		|	});
+	//
+	//		Note that the caller doesn't have to change his code at all to
+	//		handle the asynchronous case.
+		var result, finished, isError, head, nextListener;
+		var promise = this.promise = {};
+		
+		function complete(value){
+			if(finished){
+				throw new Error("This deferred has already been resolved");				
+			}
+			result = value;
+			finished = true;
+			notify();
+		}
+		function notify(){
+			var mutated;
+			while(!mutated && nextListener){
+				var listener = nextListener;
+				nextListener = nextListener.next;
+				if(mutated = (listener.progress == mutator)){ // assignment and check
+					finished = false;
+				}
+				var func = (isError ? listener.error : listener.resolved);
+				if (func) {
+					try {
+						var newResult = func(result);
+						if (newResult && typeof newResult.then === "function") {
+							newResult.then(dojo.hitch(listener.deferred, "resolve"), dojo.hitch(listener.deferred, "reject"));
+							continue;
+						}
+						var unchanged = mutated && newResult === undefined;
+						listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult);
+					}
+					catch (e) {
+						listener.deferred.reject(e);
+					}
+				}else {
+					if(isError){
+						listener.deferred.reject(result);
+					}else{
+						listener.deferred.resolve(result);
+					}
+				}
+			}	
+		}
+		// calling resolve will resolve the promise
+		this.resolve = this.callback = function(value){
+			// summary:
+			//		Fulfills the Deferred instance successfully with the provide value
+			this.fired = 0;
+			this.results = [value, null];
+			complete(value);
+		};
+		
+		
+		// calling error will indicate that the promise failed
+		this.reject = this.errback = function(error){
+			// summary:
+			//		Fulfills the Deferred instance as an error with the provided error 
+			isError = true;
+			this.fired = 1;
+			complete(error);
+			this.results = [null, error];
+			if(!error || error.log !== false){
+				(dojo.config.deferredOnError || function(x){ console.error(x); })(error);
+			}
+		};
+		// call progress to provide updates on the progress on the completion of the promise
+		this.progress = function(update){
+			// summary
+			//		Send progress events to all listeners
+			var listener = nextListener;
+			while(listener){
+				var progress = listener.progress;
+				progress && progress(update);
+				listener = listener.next;	
+			}
+		};
+		this.addCallbacks = function(/*Function?*/callback, /*Function?*/errback){
+			this.then(callback, errback, mutator);
+			return this;
+		};
+		// provide the implementation of the promise
+		this.then = promise.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){
+			// summary
+			// 		Adds a fulfilledHandler, errorHandler, and progressHandler to be called for 
+			// 		completion of a promise. The fulfilledHandler is called when the promise 
+			// 		is fulfilled. The errorHandler is called when a promise fails. The 
+			// 		progressHandler is called for progress events. All arguments are optional 
+			// 		and non-function values are ignored. The progressHandler is not only an 
+			// 		optional argument, but progress events are purely optional. Promise 
+			// 		providers are not required to ever create progress events.
+			// 
+			// 		This function will return a new promise that is fulfilled when the given 
+			// 		fulfilledHandler or errorHandler callback is finished. This allows promise 
+			// 		operations to be chained together. The value returned from the callback 
+			// 		handler is the fulfillment value for the returned promise. If the callback 
+			// 		throws an error, the returned promise will be moved to failed state.
+			//	
+			// example:
+			// 		An example of using a CommonJS compliant promise:
+  			//		|	asyncComputeTheAnswerToEverything().
+			//		|		then(addTwo).
+			//		|		then(printResult, onError);
+  			//		|	>44 
+			// 		
+			var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel);
+			var listener = {
+				resolved: resolvedCallback, 
+				error: errorCallback, 
+				progress: progressCallback, 
+				deferred: returnDeferred
+			}; 
+			if(nextListener){
+				head = head.next = listener;
+			}
+			else{
+				nextListener = head = listener;
+			}
+			if(finished){
+				notify();
+			}
+			return returnDeferred.promise;
+		};
+		var deferred = this;
+		this.cancel = promise.cancel = function () {
+			// summary:
+			//		Cancels the asynchronous operation
+			if(!finished){
+				var error = canceller && canceller(deferred);
+				if(!finished){
+					if (!(error instanceof Error)) {
+						error = new Error(error);
+					}
+					error.log = false;
+					deferred.reject(error);
+				}
+			}
+		}
+		freeze(promise);
+	};
+	dojo.extend(dojo.Deferred, {
+		addCallback: function (/*Function*/callback) {
+			return this.addCallbacks(dojo.hitch.apply(dojo, arguments));
+		},
+	
+		addErrback: function (/*Function*/errback) {
+			return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments));
+		},
+	
+		addBoth: function (/*Function*/callback) {
+			var enclosed = dojo.hitch.apply(dojo, arguments);
+			return this.addCallbacks(enclosed, enclosed);
+		},
+		fired: -1
+	});
+})();
+dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){
+	// summary:
+	//		This provides normalization between normal synchronous values and 
+	//		asynchronous promises, so you can interact with them in a common way
+	//	example:
+	//		|	function printFirstAndList(items){
+	//		|		dojo.when(findFirst(items), console.log);
+	//		|		dojo.when(findLast(items), console.log);
+	//		|	}
+	//		|	function findFirst(items){
+	//		|		return dojo.when(items, function(items){
+	//		|			return items[0];
+	//		|		});
+	//		|	}
+	//		|	function findLast(items){
+	//		|		return dojo.when(items, function(items){
+	//		|			return items[items.length];
+	//		|		});
+	//		|	}
+	//		And now all three of his functions can be used sync or async.
+	//		|	printFirstAndLast([1,2,3,4]) will work just as well as
+	//		|	printFirstAndLast(dojo.xhrGet(...));
+	
+	if(promiseOrValue && typeof promiseOrValue.then === "function"){
+		return promiseOrValue.then(callback, errback, progressHandler);
+	}
+	return callback(promiseOrValue);
+};
+
+}
+
+if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.json"] = true;
+dojo.provide("dojo._base.json");
+
+dojo.fromJson = function(/*String*/ json){
+	// summary:
+	// 		Parses a [JSON](http://json.org) string to return a JavaScript object.
+	// description:
+	// 		Throws for invalid JSON strings, but it does not use a strict JSON parser. It
+	// 		delegates to eval().  The content passed to this method must therefore come
+	//		from a trusted source.
+	// json: 
+	//		a string literal of a JSON item, for instance:
+	//			`'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'`
+
+	return eval("(" + json + ")"); // Object
+}
+
+dojo._escapeString = function(/*String*/str){
+	//summary:
+	//		Adds escape sequences for non-visual characters, double quote and
+	//		backslash and surrounds with double quotes to form a valid string
+	//		literal.
+	return ('"' + str.replace(/(["\\])/g, '\\$1') + '"').
+		replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n").
+		replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string
+}
+
+dojo.toJsonIndentStr = "\t";
+dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){
+	//	summary:
+	//		Returns a [JSON](http://json.org) serialization of an object.
+	//	description:
+	//		Returns a [JSON](http://json.org) serialization of an object.
+	//		Note that this doesn't check for infinite recursion, so don't do that!
+	//	it:
+	//		an object to be serialized. Objects may define their own
+	//		serialization via a special "__json__" or "json" function
+	//		property. If a specialized serializer has been defined, it will
+	//		be used as a fallback.
+	//	prettyPrint:
+	//		if true, we indent objects and arrays to make the output prettier.
+	//		The variable `dojo.toJsonIndentStr` is used as the indent string --
+	//		to use something other than the default (tab), change that variable
+	//		before calling dojo.toJson().
+	//	_indentStr:
+	//		private variable for recursive calls when pretty printing, do not use.
+	//	example:
+	//		simple serialization of a trivial object
+	//		|	var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true });
+	//		|	doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr);
+	//	example:
+	//		a custom serializer for an objects of a particular class:
+	//		|	dojo.declare("Furby", null, {
+	//		|		furbies: "are strange",
+	//		|		furbyCount: 10,
+	//		|		__json__: function(){
+	//		|		},
+	//		|	});
+
+	if(it === undefined){
+		return "undefined";
+	}
+	var objtype = typeof it;
+	if(objtype == "number" || objtype == "boolean"){
+		return it + "";
+	}
+	if(it === null){
+		return "null";
+	}
+	if(dojo.isString(it)){ 
+		return dojo._escapeString(it); 
+	}
+	// recurse
+	var recurse = arguments.callee;
+	// short-circuit for objects that support "json" serialization
+	// if they return "self" then just pass-through...
+	var newObj;
+	_indentStr = _indentStr || "";
+	var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : "";
+	var tf = it.__json__||it.json;
+	if(dojo.isFunction(tf)){
+		newObj = tf.call(it);
+		if(it !== newObj){
+			return recurse(newObj, prettyPrint, nextIndent);
+		}
+	}
+	if(it.nodeType && it.cloneNode){ // isNode
+		// we can't seriailize DOM nodes as regular objects because they have cycles
+		// DOM nodes could be serialized with something like outerHTML, but
+		// that can be provided by users in the form of .json or .__json__ function.
+		throw new Error("Can't serialize DOM nodes");
+	}
+
+	var sep = prettyPrint ? " " : "";
+	var newLine = prettyPrint ? "\n" : "";
+
+	// array
+	if(dojo.isArray(it)){
+		var res = dojo.map(it, function(obj){
+			var val = recurse(obj, prettyPrint, nextIndent);
+			if(typeof val != "string"){
+				val = "undefined";
+			}
+			return newLine + nextIndent + val;
+		});
+		return "[" + res.join("," + sep) + newLine + _indentStr + "]";
+	}
+	/*
+	// look in the registry
+	try {
+		window.o = it;
+		newObj = dojo.json.jsonRegistry.match(it);
+		return recurse(newObj, prettyPrint, nextIndent);
+	}catch(e){
+		// console.log(e);
+	}
+	// it's a function with no adapter, skip it
+	*/
+	if(objtype == "function"){
+		return null; // null
+	}
+	// generic object code path
+	var output = [], key;
+	for(key in it){
+		var keyStr, val;
+		if(typeof key == "number"){
+			keyStr = '"' + key + '"';
+		}else if(typeof key == "string"){
+			keyStr = dojo._escapeString(key);
+		}else{
+			// skip non-string or number keys
+			continue;
+		}
+		val = recurse(it[key], prettyPrint, nextIndent);
+		if(typeof val != "string"){
+			// skip non-serializable values
+			continue;
+		}
+		// FIXME: use += on Moz!!
+		//	 MOW NOTE: using += is a pain because you have to account for the dangling comma...
+		output.push(newLine + nextIndent + keyStr + ":" + sep + val);
+	}
+	return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String
+}
+
+}
+
+if(!dojo._hasResource["dojo._base.Color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.Color"] = true;
+dojo.provide("dojo._base.Color");
+
+
+
+(function(){
+
+	var d = dojo;
+
+	dojo.Color = function(/*Array|String|Object*/ color){
+		// summary:
+		//	 	Takes a named string, hex string, array of rgb or rgba values,
+		//	 	an object with r, g, b, and a properties, or another `dojo.Color` object
+		//	 	and creates a new Color instance to work from.
+		//
+		// example:
+		//		Work with a Color instance:
+		//	 | var c = new dojo.Color();
+		//	 | c.setColor([0,0,0]); // black
+		//	 | var hex = c.toHex(); // #000000
+		//
+		// example:
+		//		Work with a node's color:
+		//	 | var color = dojo.style("someNode", "backgroundColor");
+		//	 | var n = new dojo.Color(color);
+		//	 | // adjust the color some
+		//	 | n.r *= .5;
+		//	 | console.log(n.toString()); // rgb(128, 255, 255);
+		if(color){ this.setColor(color); }
+	};
+
+	// FIXME:
+	// 	there's got to be a more space-efficient way to encode or discover
+	// 	these!!  Use hex?
+	dojo.Color.named = {
+		black:      [0,0,0],
+		silver:     [192,192,192],
+		gray:       [128,128,128],
+		white:      [255,255,255],
+		maroon:		[128,0,0],
+		red:        [255,0,0],
+		purple:		[128,0,128],
+		fuchsia:	[255,0,255],
+		green:	    [0,128,0],
+		lime:	    [0,255,0],
+		olive:		[128,128,0],
+		yellow:		[255,255,0],
+		navy:       [0,0,128],
+		blue:       [0,0,255],
+		teal:		[0,128,128],
+		aqua:		[0,255,255],
+		transparent: d.config.transparentColor || [255,255,255]
+	};
+
+	dojo.extend(dojo.Color, {
+		r: 255, g: 255, b: 255, a: 1,
+		_set: function(r, g, b, a){
+			var t = this; t.r = r; t.g = g; t.b = b; t.a = a;
+		},
+		setColor: function(/*Array|String|Object*/ color){
+			// summary:
+			//		Takes a named string, hex string, array of rgb or rgba values,
+			//		an object with r, g, b, and a properties, or another `dojo.Color` object
+			//		and sets this color instance to that value.
+			//
+			// example:
+			//	|	var c = new dojo.Color(); // no color
+			//	|	c.setColor("#ededed"); // greyish
+			if(d.isString(color)){
+				d.colorFromString(color, this);
+			}else if(d.isArray(color)){
+				d.colorFromArray(color, this);
+			}else{
+				this._set(color.r, color.g, color.b, color.a);
+				if(!(color instanceof d.Color)){ this.sanitize(); }
+			}
+			return this;	// dojo.Color
+		},
+		sanitize: function(){
+			// summary:
+			//		Ensures the object has correct attributes
+			// description:
+			//		the default implementation does nothing, include dojo.colors to
+			//		augment it with real checks
+			return this;	// dojo.Color
+		},
+		toRgb: function(){
+			// summary:
+			//		Returns 3 component array of rgb values
+			// example:
+			//	|	var c = new dojo.Color("#000000");
+			//	| 	console.log(c.toRgb()); // [0,0,0]
+			var t = this;
+			return [t.r, t.g, t.b];	// Array
+		},
+		toRgba: function(){
+			// summary:
+			//		Returns a 4 component array of rgba values from the color
+			//		represented by this object.
+			var t = this;
+			return [t.r, t.g, t.b, t.a];	// Array
+		},
+		toHex: function(){
+			// summary:
+			//		Returns a CSS color string in hexadecimal representation
+			// example:
+			//	| 	console.log(new dojo.Color([0,0,0]).toHex()); // #000000
+			var arr = d.map(["r", "g", "b"], function(x){
+				var s = this[x].toString(16);
+				return s.length < 2 ? "0" + s : s;
+			}, this);
+			return "#" + arr.join("");	// String
+		},
+		toCss: function(/*Boolean?*/ includeAlpha){
+			// summary:
+			//		Returns a css color string in rgb(a) representation
+			// example:
+			//	|	var c = new dojo.Color("#FFF").toCss();
+			//	|	console.log(c); // rgb('255','255','255')
+			var t = this, rgb = t.r + ", " + t.g + ", " + t.b;
+			return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")";	// String
+		},
+		toString: function(){
+			// summary:
+			//		Returns a visual representation of the color
+			return this.toCss(true); // String
+		}
+	});
+
+	dojo.blendColors = function(
+		/*dojo.Color*/ start,
+		/*dojo.Color*/ end,
+		/*Number*/ weight,
+		/*dojo.Color?*/ obj
+	){
+		// summary:
+		//		Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend,
+		//		can reuse a previously allocated dojo.Color object for the result
+		var t = obj || new d.Color();
+		d.forEach(["r", "g", "b", "a"], function(x){
+			t[x] = start[x] + (end[x] - start[x]) * weight;
+			if(x != "a"){ t[x] = Math.round(t[x]); }
+		});
+		return t.sanitize();	// dojo.Color
+	};
+
+	dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
+		// summary:
+		//		Returns a `dojo.Color` instance from a string of the form
+		//		"rgb(...)" or "rgba(...)". Optionally accepts a `dojo.Color`
+		//		object to update with the parsed value and return instead of
+		//		creating a new object.
+		// returns:
+		//		A dojo.Color object. If obj is passed, it will be the return value.
+		var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
+		return m && dojo.colorFromArray(m[1].split(/\s*,\s*/), obj);	// dojo.Color
+	};
+
+	dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){
+		// summary:
+		//		Converts a hex string with a '#' prefix to a color object.
+		//		Supports 12-bit #rgb shorthand. Optionally accepts a
+		//		`dojo.Color` object to update with the parsed value.
+		//
+		// returns:
+		//		A dojo.Color object. If obj is passed, it will be the return value.
+		//
+		// example:
+		//	 | var thing = dojo.colorFromHex("#ededed"); // grey, longhand
+		//
+		// example:
+		//	| var thing = dojo.colorFromHex("#000"); // black, shorthand
+		var t = obj || new d.Color(),
+			bits = (color.length == 4) ? 4 : 8,
+			mask = (1 << bits) - 1;
+		color = Number("0x" + color.substr(1));
+		if(isNaN(color)){
+			return null; // dojo.Color
+		}
+		d.forEach(["b", "g", "r"], function(x){
+			var c = color & mask;
+			color >>= bits;
+			t[x] = bits == 4 ? 17 * c : c;
+		});
+		t.a = 1;
+		return t;	// dojo.Color
+	};
+
+	dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){
+		// summary:
+		//		Builds a `dojo.Color` from a 3 or 4 element array, mapping each
+		//		element in sequence to the rgb(a) values of the color.
+		// example:
+		//		| var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha 
+		// returns:
+		//		A dojo.Color object. If obj is passed, it will be the return value.
+		var t = obj || new d.Color();
+		t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));
+		if(isNaN(t.a)){ t.a = 1; }
+		return t.sanitize();	// dojo.Color
+	};
+
+	dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){
+		// summary:
+		//		Parses `str` for a color value. Accepts hex, rgb, and rgba
+		//		style color values.
+		// description:
+		//		Acceptable input values for str may include arrays of any form
+		//		accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or
+		//		rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10,
+		//		10, 50)"
+		// returns:
+		//		A dojo.Color object. If obj is passed, it will be the return value.
+		var a = d.Color.named[str];
+		return a && d.colorFromArray(a, obj) || d.colorFromRgb(str, obj) || d.colorFromHex(str, obj);
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base"] = true;
+dojo.provide("dojo._base");
+
+
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.window"] = true;
+dojo.provide("dojo._base.window");
+
+/*=====
+dojo.doc = {
+	// summary:
+	//		Alias for the current document. 'dojo.doc' can be modified
+	//		for temporary context shifting. Also see dojo.withDoc().
+	// description:
+	//    Refer to dojo.doc rather
+	//    than referring to 'window.document' to ensure your code runs
+	//    correctly in managed contexts.
+	// example:
+	// 	|	n.appendChild(dojo.doc.createElement('div'));
+}
+=====*/
+dojo.doc = window["document"] || null;
+
+dojo.body = function(){
+	// summary:
+	//		Return the body element of the document
+	//		return the body object associated with dojo.doc
+	// example:
+	// 	|	dojo.body().appendChild(dojo.doc.createElement('div'));
+
+	// Note: document.body is not defined for a strict xhtml document
+	// Would like to memoize this, but dojo.doc can change vi dojo.withDoc().
+	return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node
+}
+
+dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){
+	// summary:
+	//		changes the behavior of many core Dojo functions that deal with
+	//		namespace and DOM lookup, changing them to work in a new global
+	//		context (e.g., an iframe). The varibles dojo.global and dojo.doc
+	//		are modified as a result of calling this function and the result of
+	//		`dojo.body()` likewise differs.
+	dojo.global = globalObject;
+	dojo.doc = globalDocument;
+};
+
+dojo.withGlobal = function(	/*Object*/globalObject, 
+							/*Function*/callback, 
+							/*Object?*/thisObject, 
+							/*Array?*/cbArguments){
+	// summary:
+	//		Invoke callback with globalObject as dojo.global and
+	//		globalObject.document as dojo.doc.
+	// description:
+	//		Invoke callback with globalObject as dojo.global and
+	//		globalObject.document as dojo.doc. If provided, globalObject
+	//		will be executed in the context of object thisObject
+	//		When callback() returns or throws an error, the dojo.global
+	//		and dojo.doc will be restored to its previous state.
+
+	var oldGlob = dojo.global;
+	try{
+		dojo.global = globalObject;
+		return dojo.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments);
+	}finally{
+		dojo.global = oldGlob;
+	}
+}
+
+dojo.withDoc = function(	/*DocumentElement*/documentObject, 
+							/*Function*/callback, 
+							/*Object?*/thisObject, 
+							/*Array?*/cbArguments){
+	// summary:
+	//		Invoke callback with documentObject as dojo.doc.
+	// description:
+	//		Invoke callback with documentObject as dojo.doc. If provided,
+	//		callback will be executed in the context of object thisObject
+	//		When callback() returns or throws an error, the dojo.doc will
+	//		be restored to its previous state.
+
+	var oldDoc = dojo.doc,
+		oldLtr = dojo._bodyLtr,
+		oldQ = dojo.isQuirks;
+
+	try{
+		dojo.doc = documentObject;
+		delete dojo._bodyLtr; // uncache
+		dojo.isQuirks = dojo.doc.compatMode == "BackCompat"; // no need to check for QuirksMode which was Opera 7 only
+
+		if(thisObject && typeof callback == "string"){
+			callback = thisObject[callback];
+		}
+
+		return callback.apply(thisObject, cbArguments || []);
+	}finally{
+		dojo.doc = oldDoc;
+		delete dojo._bodyLtr; // in case it was undefined originally, and set to true/false by the alternate document
+		if(oldLtr !== undefined){ dojo._bodyLtr = oldLtr; }
+		dojo.isQuirks = oldQ;
+	}
+};
+	
+
+}
+
+if(!dojo._hasResource["dojo._base.event"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.event"] = true;
+dojo.provide("dojo._base.event");
+
+
+// this file courtesy of the TurboAjax Group, licensed under a Dojo CLA
+
+(function(){
+	// DOM event listener machinery
+	var del = (dojo._event_listener = {
+		add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){
+			if(!node){return;} 
+			name = del._normalizeEventName(name);
+			fp = del._fixCallback(name, fp);
+			var oname = name;
+			if(
+								!dojo.isIE && 
+								(name == "mouseenter" || name == "mouseleave")
+			){
+				var ofp = fp;
+				//oname = name;
+				name = (name == "mouseenter") ? "mouseover" : "mouseout";
+				fp = function(e){
+					if(!dojo.isDescendant(e.relatedTarget, node)){
+						// e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable.
+						return ofp.call(this, e); 
+					}
+				}
+			}
+			node.addEventListener(name, fp, false);
+			return fp; /*Handle*/
+		},
+		remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
+			// summary:
+			//		clobbers the listener from the node
+			// node:
+			//		DOM node to attach the event to
+			// event:
+			//		the name of the handler to remove the function from
+			// handle:
+			//		the handle returned from add
+			if(node){
+				event = del._normalizeEventName(event);
+				if(!dojo.isIE && (event == "mouseenter" || event == "mouseleave")){
+					event = (event == "mouseenter") ? "mouseover" : "mouseout";
+				}
+
+				node.removeEventListener(event, handle, false);
+			}
+		},
+		_normalizeEventName: function(/*String*/ name){
+			// Generally, name should be lower case, unless it is special
+			// somehow (e.g. a Mozilla DOM event).
+			// Remove 'on'.
+			return name.slice(0,2) =="on" ? name.slice(2) : name;
+		},
+		_fixCallback: function(/*String*/ name, fp){
+			// By default, we only invoke _fixEvent for 'keypress'
+			// If code is added to _fixEvent for other events, we have
+			// to revisit this optimization.
+			// This also applies to _fixEvent overrides for Safari and Opera
+			// below.
+			return name != "keypress" ? fp : function(e){ return fp.call(this, del._fixEvent(e, this)); };
+		},
+		_fixEvent: function(evt, sender){
+			// _fixCallback only attaches us to keypress.
+			// Switch on evt.type anyway because we might 
+			// be called directly from dojo.fixEvent.
+			switch(evt.type){
+				case "keypress":
+					del._setKeyChar(evt);
+					break;
+			}
+			return evt;
+		},
+		_setKeyChar: function(evt){
+			evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';
+			evt.charOrCode = evt.keyChar || evt.keyCode;
+		},
+		// For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE
+		// we map those virtual key codes to ascii here
+		// not valid for all (non-US) keyboards, so maybe we shouldn't bother
+		_punctMap: { 
+			106:42, 
+			111:47, 
+			186:59, 
+			187:43, 
+			188:44, 
+			189:45, 
+			190:46, 
+			191:47, 
+			192:96, 
+			219:91, 
+			220:92, 
+			221:93, 
+			222:39 
+		}
+	});
+
+	// DOM events
+	
+	dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){
+		// summary:
+		//		normalizes properties on the event object including event
+		//		bubbling methods, keystroke normalization, and x/y positions
+		// evt: Event
+		//		native event object
+		// sender: DOMNode
+		//		node to treat as "currentTarget"
+		return del._fixEvent(evt, sender);
+	}
+
+	dojo.stopEvent = function(/*Event*/ evt){
+		// summary:
+		//		prevents propagation and clobbers the default action of the
+		//		passed event
+		// evt: Event
+		//		The event object. If omitted, window.event is used on IE.
+		evt.preventDefault();
+		evt.stopPropagation();
+		// NOTE: below, this method is overridden for IE
+	}
+
+	// the default listener to use on dontFix nodes, overriden for IE
+	var node_listener = dojo._listener;
+	
+	// Unify connect and event listeners
+	dojo._connect = function(obj, event, context, method, dontFix){
+		// FIXME: need a more strict test
+		var isNode = obj && (obj.nodeType||obj.attachEvent||obj.addEventListener);
+		// choose one of three listener options: raw (connect.js), DOM event on a Node, custom event on a Node
+		// we need the third option to provide leak prevention on broken browsers (IE)
+		var lid = isNode ? (dontFix ? 2 : 1) : 0, l = [dojo._listener, del, node_listener][lid];
+		// create a listener
+		var h = l.add(obj, event, dojo.hitch(context, method));
+		// formerly, the disconnect package contained "l" directly, but if client code
+		// leaks the disconnect package (by connecting it to a node), referencing "l" 
+		// compounds the problem.
+		// instead we return a listener id, which requires custom _disconnect below.
+		// return disconnect package
+		return [ obj, event, h, lid ];
+	}
+
+	dojo._disconnect = function(obj, event, handle, listener){
+		([dojo._listener, del, node_listener][listener]).remove(obj, event, handle);
+	}
+
+	// Constants
+
+	// Public: client code should test
+	// keyCode against these named constants, as the
+	// actual codes can vary by browser.
+	dojo.keys = {
+		// summary:
+		//		Definitions for common key values
+		BACKSPACE: 8,
+		TAB: 9,
+		CLEAR: 12,
+		ENTER: 13,
+		SHIFT: 16,
+		CTRL: 17,
+		ALT: 18,
+		META: dojo.isSafari ? 91 : 224,		// the apple key on macs
+		PAUSE: 19,
+		CAPS_LOCK: 20,
+		ESCAPE: 27,
+		SPACE: 32,
+		PAGE_UP: 33,
+		PAGE_DOWN: 34,
+		END: 35,
+		HOME: 36,
+		LEFT_ARROW: 37,
+		UP_ARROW: 38,
+		RIGHT_ARROW: 39,
+		DOWN_ARROW: 40,
+		INSERT: 45,
+		DELETE: 46,
+		HELP: 47,
+		LEFT_WINDOW: 91,
+		RIGHT_WINDOW: 92,
+		SELECT: 93,
+		NUMPAD_0: 96,
+		NUMPAD_1: 97,
+		NUMPAD_2: 98,
+		NUMPAD_3: 99,
+		NUMPAD_4: 100,
+		NUMPAD_5: 101,
+		NUMPAD_6: 102,
+		NUMPAD_7: 103,
+		NUMPAD_8: 104,
+		NUMPAD_9: 105,
+		NUMPAD_MULTIPLY: 106,
+		NUMPAD_PLUS: 107,
+		NUMPAD_ENTER: 108,
+		NUMPAD_MINUS: 109,
+		NUMPAD_PERIOD: 110,
+		NUMPAD_DIVIDE: 111,
+		F1: 112,
+		F2: 113,
+		F3: 114,
+		F4: 115,
+		F5: 116,
+		F6: 117,
+		F7: 118,
+		F8: 119,
+		F9: 120,
+		F10: 121,
+		F11: 122,
+		F12: 123,
+		F13: 124,
+		F14: 125,
+		F15: 126,
+		NUM_LOCK: 144,
+		SCROLL_LOCK: 145,
+		// virtual key mapping
+		copyKey: dojo.isMac && !dojo.isAIR ? (dojo.isSafari ? 91 : 224 ) : 17
+	};
+	
+	var evtCopyKey = dojo.isMac ? "metaKey" : "ctrlKey";
+	
+	dojo.isCopyKey = function(e){
+		// summary:
+		//		Checks an event for the copy key (meta on Mac, and ctrl anywhere else)
+		// e: Event
+		//		Event object to examine
+		return e[evtCopyKey];	// Boolean
+	};
+
+	// Public: decoding mouse buttons from events
+
+/*=====
+	dojo.mouseButtons = {
+		// LEFT: Number
+		//		Numeric value of the left mouse button for the platform.
+		LEFT:   0,
+		// MIDDLE: Number
+		//		Numeric value of the middle mouse button for the platform.
+		MIDDLE: 1,
+		// RIGHT: Number
+		//		Numeric value of the right mouse button for the platform.
+		RIGHT:  2,
+	
+		isButton: function(e, button){
+			// summary:
+			//		Checks an event object for a pressed button
+			// e: Event
+			//		Event object to examine
+			// button: Number
+			//		The button value (example: dojo.mouseButton.LEFT)
+			return e.button == button; // Boolean
+		},
+		isLeft: function(e){
+			// summary:
+			//		Checks an event object for the pressed left button
+			// e: Event
+			//		Event object to examine
+			return e.button == 0; // Boolean
+		},
+		isMiddle: function(e){
+			// summary:
+			//		Checks an event object for the pressed middle button
+			// e: Event
+			//		Event object to examine
+			return e.button == 1; // Boolean
+		},
+		isRight: function(e){
+			// summary:
+			//		Checks an event object for the pressed right button
+			// e: Event
+			//		Event object to examine
+			return e.button == 2; // Boolean
+		}
+	};
+=====*/
+
+		if(dojo.isIE){
+		dojo.mouseButtons = {
+			LEFT:   1,
+			MIDDLE: 4,
+			RIGHT:  2,
+			// helper functions
+			isButton: function(e, button){ return e.button & button; },
+			isLeft:   function(e){ return e.button & 1; },
+			isMiddle: function(e){ return e.button & 4; },
+			isRight:  function(e){ return e.button & 2; }
+		};
+	}else{
+			dojo.mouseButtons = {
+			LEFT:   0,
+			MIDDLE: 1,
+			RIGHT:  2,
+			// helper functions
+			isButton: function(e, button){ return e.button == button; },
+			isLeft:   function(e){ return e.button == 0; },
+			isMiddle: function(e){ return e.button == 1; },
+			isRight:  function(e){ return e.button == 2; }
+		};
+		}
+	
+		// IE event normalization
+	if(dojo.isIE){ 
+		var _trySetKeyCode = function(e, code){
+			try{
+				// squelch errors when keyCode is read-only
+				// (e.g. if keyCode is ctrl or shift)
+				return (e.keyCode = code);
+			}catch(e){
+				return 0;
+			}
+		}
+
+		// by default, use the standard listener
+		var iel = dojo._listener;
+		var listenersName = (dojo._ieListenersName = "_" + dojo._scopeName + "_listeners");
+		// dispatcher tracking property
+		if(!dojo.config._allow_leaks){
+			// custom listener that handles leak protection for DOM events
+			node_listener = iel = dojo._ie_listener = {
+				// support handler indirection: event handler functions are 
+				// referenced here. Event dispatchers hold only indices.
+				handlers: [],
+				// add a listener to an object
+				add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){
+					source = source || dojo.global;
+					var f = source[method];
+					if(!f||!f[listenersName]){
+						var d = dojo._getIeDispatcher();
+						// original target function is special
+						d.target = f && (ieh.push(f) - 1);
+						// dispatcher holds a list of indices into handlers table
+						d[listenersName] = [];
+						// redirect source to dispatcher
+						f = source[method] = d;
+					}
+					return f[listenersName].push(ieh.push(listener) - 1) ; /*Handle*/
+				},
+				// remove a listener from an object
+				remove: function(/*Object*/ source, /*String*/ method, /*Handle*/ handle){
+					var f = (source||dojo.global)[method], l = f && f[listenersName];
+					if(f && l && handle--){
+						delete ieh[l[handle]];
+						delete l[handle];
+					}
+				}
+			};
+			// alias used above
+			var ieh = iel.handlers;
+		}
+
+		dojo.mixin(del, {
+			add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){
+				if(!node){return;} // undefined
+				event = del._normalizeEventName(event);
+				if(event=="onkeypress"){
+					// we need to listen to onkeydown to synthesize
+					// keypress events that otherwise won't fire
+					// on IE
+					var kd = node.onkeydown;
+					if(!kd || !kd[listenersName] || !kd._stealthKeydownHandle){
+						var h = del.add(node, "onkeydown", del._stealthKeyDown);
+						kd = node.onkeydown;
+						kd._stealthKeydownHandle = h;
+						kd._stealthKeydownRefs = 1;
+					}else{
+						kd._stealthKeydownRefs++;
+					}
+				}
+				return iel.add(node, event, del._fixCallback(fp));
+			},
+			remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
+				event = del._normalizeEventName(event);
+				iel.remove(node, event, handle); 
+				if(event=="onkeypress"){
+					var kd = node.onkeydown;
+					if(--kd._stealthKeydownRefs <= 0){
+						iel.remove(node, "onkeydown", kd._stealthKeydownHandle);
+						delete kd._stealthKeydownHandle;
+					}
+				}
+			},
+			_normalizeEventName: function(/*String*/ eventName){
+				// Generally, eventName should be lower case, unless it is
+				// special somehow (e.g. a Mozilla event)
+				// ensure 'on'
+				return eventName.slice(0,2) != "on" ? "on" + eventName : eventName;
+			},
+			_nop: function(){},
+			_fixEvent: function(/*Event*/ evt, /*DOMNode*/ sender){
+				// summary:
+				//		normalizes properties on the event object including event
+				//		bubbling methods, keystroke normalization, and x/y positions
+				// evt:
+				//		native event object
+				// sender:
+				//		node to treat as "currentTarget"
+				if(!evt){
+					var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window;
+					evt = w.event; 
+				}
+				if(!evt){return(evt);}
+				evt.target = evt.srcElement; 
+				evt.currentTarget = (sender || evt.srcElement); 
+				evt.layerX = evt.offsetX;
+				evt.layerY = evt.offsetY;
+				// FIXME: scroll position query is duped from dojo.html to
+				// avoid dependency on that entire module. Now that HTML is in
+				// Base, we should convert back to something similar there.
+				var se = evt.srcElement, doc = (se && se.ownerDocument) || document;
+				// DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used
+				// here rather than document.body
+				var docBody = ((dojo.isIE < 6) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
+				var offset = dojo._getIeDocumentElementOffset();
+				evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x;
+				evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y;
+				if(evt.type == "mouseover"){ 
+					evt.relatedTarget = evt.fromElement;
+				}
+				if(evt.type == "mouseout"){ 
+					evt.relatedTarget = evt.toElement;
+				}
+				evt.stopPropagation = del._stopPropagation;
+				evt.preventDefault = del._preventDefault;
+				return del._fixKeys(evt);
+			},
+			_fixKeys: function(evt){
+				switch(evt.type){
+					case "keypress":
+						var c = ("charCode" in evt ? evt.charCode : evt.keyCode);
+						if (c==10){
+							// CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla
+							c=0;
+							evt.keyCode = 13;
+						}else if(c==13||c==27){
+							c=0; // Mozilla considers ENTER and ESC non-printable
+						}else if(c==3){
+							c=99; // Mozilla maps CTRL-BREAK to CTRL-c
+						}
+						// Mozilla sets keyCode to 0 when there is a charCode
+						// but that stops the event on IE.
+						evt.charCode = c;
+						del._setKeyChar(evt);
+						break;
+				}
+				return evt;
+			},
+			_stealthKeyDown: function(evt){
+				// IE doesn't fire keypress for most non-printable characters.
+				// other browsers do, we simulate it here.
+				var kp = evt.currentTarget.onkeypress;
+				// only works if kp exists and is a dispatcher
+				if(!kp || !kp[listenersName]){ return; }
+				// munge key/charCode
+				var k=evt.keyCode;
+				// These are Windows Virtual Key Codes
+				// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
+				var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222);
+				// synthesize keypress for most unprintables and CTRL-keys
+				if(unprintable||evt.ctrlKey){
+					var c = unprintable ? 0 : k;
+					if(evt.ctrlKey){
+						if(k==3 || k==13){
+							return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
+						}else if(c>95 && c<106){ 
+							c -= 48; // map CTRL-[numpad 0-9] to ASCII
+						}else if((!evt.shiftKey)&&(c>=65&&c<=90)){ 
+							c += 32; // map CTRL-[A-Z] to lowercase
+						}else{ 
+							c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
+						}
+					}
+					// simulate a keypress event
+					var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
+					kp.call(evt.currentTarget, faux);
+					evt.cancelBubble = faux.cancelBubble;
+					evt.returnValue = faux.returnValue;
+					_trySetKeyCode(evt, faux.keyCode);
+				}
+			},
+			// Called in Event scope
+			_stopPropagation: function(){
+				this.cancelBubble = true; 
+			},
+			_preventDefault: function(){
+				// Setting keyCode to 0 is the only way to prevent certain keypresses (namely
+				// ctrl-combinations that correspond to menu accelerator keys).
+				// Otoh, it prevents upstream listeners from getting this information
+				// Try to split the difference here by clobbering keyCode only for ctrl 
+				// combinations. If you still need to access the key upstream, bubbledKeyCode is
+				// provided as a workaround.
+				this.bubbledKeyCode = this.keyCode;
+				if(this.ctrlKey){_trySetKeyCode(this, 0);}
+				this.returnValue = false;
+			}
+		});
+				
+		// override stopEvent for IE
+		dojo.stopEvent = function(evt){
+			evt = evt || window.event;
+			del._stopPropagation.call(evt);
+			del._preventDefault.call(evt);
+		}
+	}
+	
+	del._synthesizeEvent = function(evt, props){
+			var faux = dojo.mixin({}, evt, props);
+			del._setKeyChar(faux);
+			// FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); 
+			// but it throws an error when preventDefault is invoked on Safari
+			// does Event.preventDefault not support "apply" on Safari?
+			faux.preventDefault = function(){ evt.preventDefault(); }; 
+			faux.stopPropagation = function(){ evt.stopPropagation(); }; 
+			return faux;
+	}
+	
+		// Opera event normalization
+	if(dojo.isOpera){
+		dojo.mixin(del, {
+			_fixEvent: function(evt, sender){
+				switch(evt.type){
+					case "keypress":
+						var c = evt.which;
+						if(c==3){
+							c=99; // Mozilla maps CTRL-BREAK to CTRL-c
+						}
+						// can't trap some keys at all, like INSERT and DELETE
+						// there is no differentiating info between DELETE and ".", or INSERT and "-"
+						c = c<41 && !evt.shiftKey ? 0 : c;
+						if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){
+							// lowercase CTRL-[A-Z] keys
+							c += 32;
+						}
+						return del._synthesizeEvent(evt, { charCode: c });
+				}
+				return evt;
+			}
+		});
+	}
+	
+		// Webkit event normalization
+	if(dojo.isWebKit){
+				del._add = del.add;
+		del._remove = del.remove;
+
+		dojo.mixin(del, {
+			add: function(/*DOMNode*/ node, /*String*/ event, /*Function*/ fp){
+				if(!node){return;} // undefined
+				var handle = del._add(node, event, fp);
+				if(del._normalizeEventName(event) == "keypress"){
+					// we need to listen to onkeydown to synthesize
+					// keypress events that otherwise won't fire
+					// in Safari 3.1+: https://lists.webkit.org/pipermail/webkit-dev/2007-December/002992.html
+					handle._stealthKeyDownHandle = del._add(node, "keydown", function(evt){
+						//A variation on the IE _stealthKeydown function
+						//Synthesize an onkeypress event, but only for unprintable characters.
+						var k=evt.keyCode;
+						// These are Windows Virtual Key Codes
+						// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
+						var unprintable = k!=13 && k!=32 && (k<48 || k>90) && (k<96 || k>111) && (k<186 || k>192) && (k<219 || k>222);
+						// synthesize keypress for most unprintables and CTRL-keys
+						if(unprintable || evt.ctrlKey){
+							var c = unprintable ? 0 : k;
+							if(evt.ctrlKey){
+								if(k==3 || k==13){
+									return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively 
+								}else if(c>95 && c<106){ 
+									c -= 48; // map CTRL-[numpad 0-9] to ASCII
+								}else if(!evt.shiftKey && c>=65 && c<=90){ 
+									c += 32; // map CTRL-[A-Z] to lowercase
+								}else{ 
+									c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII
+								}
+							}
+							// simulate a keypress event
+							var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
+							fp.call(evt.currentTarget, faux);
+						}
+					});
+				}
+				return handle; /*Handle*/
+			},
+
+			remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){
+				if(node){
+					if(handle._stealthKeyDownHandle){
+						del._remove(node, "keydown", handle._stealthKeyDownHandle);
+					}
+					del._remove(node, event, handle);
+				}
+			},
+			_fixEvent: function(evt, sender){
+				switch(evt.type){
+					case "keypress":
+						if(evt.faux){ return evt; }
+						var c = evt.charCode;
+						c = c>=32 ? c : 0;
+						return del._synthesizeEvent(evt, {charCode: c, faux: true});
+				}
+				return evt;
+			}
+		});
+		}
+	})();
+
+if(dojo.isIE){
+	// keep this out of the closure
+	// closing over 'iel' or 'ieh' b0rks leak prevention
+	// ls[i] is an index into the master handler array
+	dojo._ieDispatcher = function(args, sender){
+		var ap = Array.prototype,
+			h = dojo._ie_listener.handlers,
+			c = args.callee,
+			ls = c[dojo._ieListenersName],
+			t = h[c.target];
+		// return value comes from original target function
+		var r = t && t.apply(sender, args);
+		// make local copy of listener array so it's immutable during processing
+		var lls = [].concat(ls);
+		// invoke listeners after target function
+		for(var i in lls){
+			var f = h[lls[i]];
+			if(!(i in ap) && f){
+				f.apply(sender, args);
+			}
+		}
+		return r;
+	}
+	dojo._getIeDispatcher = function(){
+		// ensure the returned function closes over nothing ("new Function" apparently doesn't close)
+		return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function
+	}
+	// keep this out of the closure to reduce RAM allocation
+	dojo._event_listener._fixCallback = function(fp){
+		var f = dojo._event_listener._fixEvent;
+		return function(e){ return fp.call(this, f(e, this)); };
+	}
+}
+
+}
+
+if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.html"] = true;
+
+dojo.provide("dojo._base.html");
+
+// FIXME: need to add unit tests for all the semi-public methods
+
+try{
+	document.execCommand("BackgroundImageCache", false, true);
+}catch(e){
+	// sane browsers don't have cache "issues"
+}
+
+// =============================
+// DOM Functions
+// =============================
+
+/*=====
+dojo.byId = function(id, doc){
+	//	summary:
+	//		Returns DOM node with matching `id` attribute or `null`
+	//		if not found. If `id` is a DomNode, this function is a no-op.
+	//
+	//	id: String|DOMNode
+	//	 	A string to match an HTML id attribute or a reference to a DOM Node
+	//
+	//	doc: Document?
+	//		Document to work in. Defaults to the current value of
+	//		dojo.doc.  Can be used to retrieve
+	//		node references from other documents.
+	//
+	//	example:
+	//	Look up a node by ID:
+	//	|	var n = dojo.byId("foo");
+	//
+	//	example:
+	//	Check if a node exists, and use it.
+	//	|	var n = dojo.byId("bar");
+	//	|	if(n){ doStuff() ... }
+	//
+	//	example:
+	//	Allow string or DomNode references to be passed to a custom function:
+	//	|	var foo = function(nodeOrId){
+	//	|		nodeOrId = dojo.byId(nodeOrId);
+	//	|		// ... more stuff
+	//	|	}
+=====*/
+
+if(dojo.isIE || dojo.isOpera){
+	dojo.byId = function(id, doc){
+		if(typeof id != "string"){
+			return id;
+		}
+		var _d = doc || dojo.doc, te = _d.getElementById(id);
+		// attributes.id.value is better than just id in case the 
+		// user has a name=id inside a form
+		if(te && (te.attributes.id.value == id || te.id == id)){
+			return te;
+		}else{
+			var eles = _d.all[id];
+			if(!eles || eles.nodeName){
+				eles = [eles];
+			}
+			// if more than 1, choose first with the correct id
+			var i=0;
+			while((te=eles[i++])){
+				if((te.attributes && te.attributes.id && te.attributes.id.value == id)
+					|| te.id == id){
+					return te;
+				}
+			}
+		}
+	};
+}else{
+	dojo.byId = function(id, doc){
+		// inline'd type check
+		return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode
+	};
+}
+/*=====
+};
+=====*/
+
+(function(){
+	var d = dojo;
+	var byId = d.byId;
+
+	var _destroyContainer = null,
+		_destroyDoc;
+		d.addOnWindowUnload(function(){
+		_destroyContainer = null; //prevent IE leak
+	});
+	
+/*=====
+	dojo._destroyElement = function(node){
+		// summary:
+		// 		Existing alias for `dojo.destroy`. Deprecated, will be removed
+		// 		in 2.0
+	}
+=====*/
+	dojo._destroyElement = dojo.destroy = function(/*String|DomNode*/node){
+		//	summary:
+		//		Removes a node from its parent, clobbering it and all of its
+		//		children.
+		//
+		//	description:
+		//		Removes a node from its parent, clobbering it and all of its
+		//		children. Function only works with DomNodes, and returns nothing.
+		//
+		//	node:
+		//		A String ID or DomNode reference of the element to be destroyed
+		//
+		//	example:
+		//	Destroy a node byId:
+		//	|	dojo.destroy("someId");
+		//
+		//	example:
+		//	Destroy all nodes in a list by reference:
+		//	|	dojo.query(".someNode").forEach(dojo.destroy);
+
+		node = byId(node);
+		try{
+			var doc = node.ownerDocument;
+			// cannot use _destroyContainer.ownerDocument since this can throw an exception on IE
+			if(!_destroyContainer || _destroyDoc != doc){
+				_destroyContainer = doc.createElement("div");
+				_destroyDoc = doc;
+			}
+			_destroyContainer.appendChild(node.parentNode ? node.parentNode.removeChild(node) : node);
+			// NOTE: see http://trac.dojotoolkit.org/ticket/2931. This may be a bug and not a feature
+			_destroyContainer.innerHTML = "";
+		}catch(e){
+			/* squelch */
+		}
+	};
+
+	dojo.isDescendant = function(/*DomNode|String*/node, /*DomNode|String*/ancestor){
+		//	summary:
+		//		Returns true if node is a descendant of ancestor
+		//	node: string id or node reference to test
+		//	ancestor: string id or node reference of potential parent to test against
+		//
+		// example:
+		//	Test is node id="bar" is a descendant of node id="foo"
+		//	|	if(dojo.isDescendant("bar", "foo")){ ... }
+		try{
+			node = byId(node);
+			ancestor = byId(ancestor);
+			while(node){
+				if(node == ancestor){
+					return true; // Boolean
+				}
+				node = node.parentNode;
+			}
+		}catch(e){ /* squelch, return false */ }
+		return false; // Boolean
+	};
+
+	dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){
+		//	summary: 
+		//		Enable or disable selection on a node
+		//	node:
+		//		id or reference to node
+		//	selectable:
+		//		state to put the node in. false indicates unselectable, true 
+		//		allows selection.
+		//	example:
+		//	Make the node id="bar" unselectable
+		//	|	dojo.setSelectable("bar"); 
+		//	example:
+		//	Make the node id="bar" selectable
+		//	|	dojo.setSelectable("bar", true);
+		node = byId(node);
+				if(d.isMozilla){
+			node.style.MozUserSelect = selectable ? "" : "none";
+		}else if(d.isKhtml || d.isWebKit){
+					node.style.KhtmlUserSelect = selectable ? "auto" : "none";
+				}else if(d.isIE){
+			var v = (node.unselectable = selectable ? "" : "on");
+			d.query("*", node).forEach("item.unselectable = '"+v+"'");
+		}
+				//FIXME: else?  Opera?
+	};
+
+	var _insertBefore = function(/*DomNode*/node, /*DomNode*/ref){
+		var parent = ref.parentNode;
+		if(parent){
+			parent.insertBefore(node, ref);
+		}
+	};
+
+	var _insertAfter = function(/*DomNode*/node, /*DomNode*/ref){
+		//	summary:
+		//		Try to insert node after ref
+		var parent = ref.parentNode;
+		if(parent){
+			if(parent.lastChild == ref){
+				parent.appendChild(node);
+			}else{
+				parent.insertBefore(node, ref.nextSibling);
+			}
+		}
+	};
+
+	dojo.place = function(node, refNode, position){
+		//	summary:
+		//		Attempt to insert node into the DOM, choosing from various positioning options.
+		//		Returns the first argument resolved to a DOM node.
+		//
+		//	node: String|DomNode
+		//		id or node reference, or HTML fragment starting with "<" to place relative to refNode
+		//
+		//	refNode: String|DomNode
+		//		id or node reference to use as basis for placement
+		//
+		//	position: String|Number?
+		//		string noting the position of node relative to refNode or a
+		//		number indicating the location in the childNodes collection of refNode.
+		//		Accepted string values are:
+		//	|	* before
+		//	|	* after
+		//	|	* replace
+		//	|	* only
+		//	|	* first
+		//	|	* last
+		//		"first" and "last" indicate positions as children of refNode, "replace" replaces refNode,
+		//		"only" replaces all children.  position defaults to "last" if not specified
+		//
+		//	returns: DomNode
+		//		Returned values is the first argument resolved to a DOM node.
+		//
+		//		.place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups.
+		//
+		// example:
+		//		Place a node by string id as the last child of another node by string id:
+		//	|	dojo.place("someNode", "anotherNode");
+		//
+		// example:
+		//		Place a node by string id before another node by string id
+		//	|	dojo.place("someNode", "anotherNode", "before");
+		//
+		// example:
+		//		Create a Node, and place it in the body element (last child):
+		//	|	dojo.place("<div></div>", dojo.body());
+		//
+		// example:
+		//		Put a new LI as the first child of a list by id:
+		//	|	dojo.place("<li></li>", "someUl", "first");
+
+		refNode = byId(refNode);
+		if(typeof node == "string"){ // inline'd type check
+			node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node);
+		}
+		if(typeof position == "number"){ // inline'd type check
+			var cn = refNode.childNodes;
+			if(!cn.length || cn.length <= position){
+				refNode.appendChild(node);
+			}else{
+				_insertBefore(node, cn[position < 0 ? 0 : position]);
+			}
+		}else{
+			switch(position){
+				case "before":
+					_insertBefore(node, refNode);
+					break;
+				case "after":
+					_insertAfter(node, refNode);
+					break;
+				case "replace":
+					refNode.parentNode.replaceChild(node, refNode);
+					break;
+				case "only":
+					d.empty(refNode);
+					refNode.appendChild(node);
+					break;
+				case "first":
+					if(refNode.firstChild){
+						_insertBefore(node, refNode.firstChild);
+						break;
+					}
+					// else fallthrough...
+				default: // aka: last
+					refNode.appendChild(node);
+			}
+		}
+		return node; // DomNode
+	}
+
+	// Box functions will assume this model.
+	// On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode.
+	// Can be set to change behavior of box setters.
+
+	// can be either:
+	//	"border-box"
+	//	"content-box" (default)
+	dojo.boxModel = "content-box";
+
+	// We punt per-node box mode testing completely.
+	// If anybody cares, we can provide an additional (optional) unit 
+	// that overrides existing code to include per-node box sensitivity.
+
+	// Opera documentation claims that Opera 9 uses border-box in BackCompat mode.
+	// but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box.
+	// IIRC, earlier versions of Opera did in fact use border-box.
+	// Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault.
+
+		if(d.isIE /*|| dojo.isOpera*/){
+		// client code may have to adjust if compatMode varies across iframes
+		d.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box";
+	}
+	
+	// =============================
+	// Style Functions
+	// =============================
+
+	// getComputedStyle drives most of the style code.
+	// Wherever possible, reuse the returned object.
+	//
+	// API functions below that need to access computed styles accept an 
+	// optional computedStyle parameter.
+	// If this parameter is omitted, the functions will call getComputedStyle themselves.
+	// This way, calling code can access computedStyle once, and then pass the reference to 
+	// multiple API functions.
+
+/*=====
+	dojo.getComputedStyle = function(node){
+		//	summary:
+		//		Returns a "computed style" object.
+		//
+		//	description:
+		//		Gets a "computed style" object which can be used to gather
+		//		information about the current state of the rendered node.
+		//
+		//		Note that this may behave differently on different browsers.
+		//		Values may have different formats and value encodings across
+		//		browsers.
+		//
+		//		Note also that this method is expensive.  Wherever possible,
+		//		reuse the returned object.
+		//
+		//		Use the dojo.style() method for more consistent (pixelized)
+		//		return values.
+		//
+		//	node: DOMNode
+		//		A reference to a DOM node. Does NOT support taking an
+		//		ID string for speed reasons.
+		//	example:
+		//	|	dojo.getComputedStyle(dojo.byId('foo')).borderWidth;
+		//
+		//	example:
+		//	Reusing the returned object, avoiding multiple lookups:
+		//	|	var cs = dojo.getComputedStyle(dojo.byId("someNode"));
+		//	|	var w = cs.width, h = cs.height;
+		return; // CSS2Properties
+	}
+=====*/
+
+	// Although we normally eschew argument validation at this
+	// level, here we test argument 'node' for (duck)type,
+	// by testing nodeType, ecause 'document' is the 'parentNode' of 'body'
+	// it is frequently sent to this function even 
+	// though it is not Element.
+	var gcs;
+		if(d.isWebKit){
+			gcs = function(/*DomNode*/node){
+			var s;
+			if(node.nodeType == 1){
+				var dv = node.ownerDocument.defaultView;
+				s = dv.getComputedStyle(node, null);
+				if(!s && node.style){
+					node.style.display = "";
+					s = dv.getComputedStyle(node, null);
+				}
+			}
+			return s || {};
+		};
+		}else if(d.isIE){
+		gcs = function(node){
+			// IE (as of 7) doesn't expose Element like sane browsers
+			return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {};
+		};
+	}else{
+		gcs = function(node){
+			return node.nodeType == 1 ?
+				node.ownerDocument.defaultView.getComputedStyle(node, null) : {};
+		};
+	}
+		dojo.getComputedStyle = gcs;
+
+		if(!d.isIE){
+			d._toPixelValue = function(element, value){
+			// style values can be floats, client code may want
+			// to round for integer pixels.
+			return parseFloat(value) || 0;
+		};
+		}else{
+		d._toPixelValue = function(element, avalue){
+			if(!avalue){ return 0; }
+			// on IE7, medium is usually 4 pixels
+			if(avalue == "medium"){ return 4; }
+			// style values can be floats, client code may
+			// want to round this value for integer pixels.
+			if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); }
+			with(element){
+				var sLeft = style.left;
+				var rsLeft = runtimeStyle.left;
+				runtimeStyle.left = currentStyle.left;
+				try{
+					// 'avalue' may be incompatible with style.left, which can cause IE to throw
+					// this has been observed for border widths using "thin", "medium", "thick" constants
+					// those particular constants could be trapped by a lookup
+					// but perhaps there are more
+					style.left = avalue;
+					avalue = style.pixelLeft;
+				}catch(e){
+					avalue = 0;
+				}
+				style.left = sLeft;
+				runtimeStyle.left = rsLeft;
+			}
+			return avalue;
+		}
+	}
+		var px = d._toPixelValue;
+
+	// FIXME: there opacity quirks on FF that we haven't ported over. Hrm.
+	/*=====
+	dojo._getOpacity = function(node){
+			//	summary:
+			//		Returns the current opacity of the passed node as a
+			//		floating-point value between 0 and 1.
+			//	node: DomNode
+			//		a reference to a DOM node. Does NOT support taking an
+			//		ID string for speed reasons.
+			//	returns: Number between 0 and 1
+			return; // Number
+	}
+	=====*/
+
+		var astr = "DXImageTransform.Microsoft.Alpha";
+	var af = function(n, f){
+		try{
+			return n.filters.item(astr);
+		}catch(e){
+			return f ? {} : null;
+		}
+	};
+
+		dojo._getOpacity =
+			d.isIE ? function(node){
+			try{
+				return af(node).Opacity / 100; // Number
+			}catch(e){
+				return 1; // Number
+			}
+		} :
+			function(node){
+			return gcs(node).opacity;
+		};
+
+	/*=====
+	dojo._setOpacity = function(node, opacity){
+			//	summary:
+			//		set the opacity of the passed node portably. Returns the
+			//		new opacity of the node.
+			//	node: DOMNode
+			//		a reference to a DOM node. Does NOT support taking an
+			//		ID string for performance reasons.
+			//	opacity: Number
+			//		A Number between 0 and 1. 0 specifies transparent.
+			//	returns: Number between 0 and 1
+			return; // Number
+	}
+	=====*/
+
+	dojo._setOpacity =
+				d.isIE ? function(/*DomNode*/node, /*Number*/opacity){
+			var ov = opacity * 100, opaque = opacity == 1;
+			node.style.zoom = opaque ? "" : 1;
+
+			if(!af(node)){
+				if(opaque){
+					return opacity;
+				}
+				node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")";
+			}else{
+				af(node, 1).Opacity = ov;
+			}
+
+			// on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661),
+			//but still update the opacity value so we can get a correct reading if it is read later.
+			af(node, 1).Enabled = !opaque;
+
+			if(node.nodeName.toLowerCase() == "tr"){
+				d.query("> td", node).forEach(function(i){
+					d._setOpacity(i, opacity);
+				});
+			}
+			return opacity;
+		} :
+				function(node, opacity){
+			return node.style.opacity = opacity;
+		};
+
+	var _pixelNamesCache = {
+		left: true, top: true
+	};
+	var _pixelRegExp = /margin|padding|width|height|max|min|offset/;  // |border
+	var _toStyleValue = function(node, type, value){
+		type = type.toLowerCase(); // FIXME: should we really be doing string case conversion here? Should we cache it? Need to profile!
+				if(d.isIE){
+			if(value == "auto"){
+				if(type == "height"){ return node.offsetHeight; }
+				if(type == "width"){ return node.offsetWidth; }
+			}
+			if(type == "fontweight"){
+				switch(value){
+					case 700: return "bold";
+					case 400:
+					default: return "normal";
+				}
+			}
+		}
+				if(!(type in _pixelNamesCache)){
+			_pixelNamesCache[type] = _pixelRegExp.test(type);
+		}
+		return _pixelNamesCache[type] ? px(node, value) : value;
+	};
+
+	var _floatStyle = d.isIE ? "styleFloat" : "cssFloat",
+		_floatAliases = { "cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle }
+	;
+
+	// public API
+
+	dojo.style = function(	/*DomNode|String*/ node,
+							/*String?|Object?*/ style,
+							/*String?*/ value){
+		//	summary:
+		//		Accesses styles on a node. If 2 arguments are
+		//		passed, acts as a getter. If 3 arguments are passed, acts
+		//		as a setter.
+		//	description:
+		//		Getting the style value uses the computed style for the node, so the value
+		//		will be a calculated value, not just the immediate node.style value.
+		//		Also when getting values, use specific style names,
+		//		like "borderBottomWidth" instead of "border" since compound values like
+		//		"border" are not necessarily reflected as expected.
+		//		If you want to get node dimensions, use `dojo.marginBox()`, 
+		//		`dojo.contentBox()` or `dojo.position()`.
+		//	node:
+		//		id or reference to node to get/set style for
+		//	style:
+		//		the style property to set in DOM-accessor format
+		//		("borderWidth", not "border-width") or an object with key/value
+		//		pairs suitable for setting each property.
+		//	value:
+		//		If passed, sets value on the node for style, handling
+		//		cross-browser concerns.  When setting a pixel value,
+		//		be sure to include "px" in the value. For instance, top: "200px".
+		//		Otherwise, in some cases, some browsers will not apply the style.
+		//	example:
+		//		Passing only an ID or node returns the computed style object of
+		//		the node:
+		//	|	dojo.style("thinger");
+		//	example:
+		//		Passing a node and a style property returns the current
+		//		normalized, computed value for that property:
+		//	|	dojo.style("thinger", "opacity"); // 1 by default
+		//
+		//	example:
+		//		Passing a node, a style property, and a value changes the
+		//		current display of the node and returns the new computed value
+		//	|	dojo.style("thinger", "opacity", 0.5); // == 0.5
+		//
+		//	example:
+		//		Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node:
+		//	|	dojo.style("thinger", {
+		//	|		"opacity": 0.5,
+		//	|		"border": "3px solid black",
+		//	|		"height": "300px"
+		//	|	});
+		//
+		// 	example:
+		//		When the CSS style property is hyphenated, the JavaScript property is camelCased.
+		//		font-size becomes fontSize, and so on.
+		//	|	dojo.style("thinger",{
+		//	|		fontSize:"14pt",
+		//	|		letterSpacing:"1.2em"
+		//	|	});
+		//
+		//	example:
+		//		dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling
+		//		dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()`
+		//	|	dojo.query(".someClassName").style("visibility","hidden");
+		//	|	// or
+		//	|	dojo.query("#baz > div").style({
+		//	|		opacity:0.75,
+		//	|		fontSize:"13pt"
+		//	|	});
+
+		var n = byId(node), args = arguments.length, op = (style == "opacity");
+		style = _floatAliases[style] || style;
+		if(args == 3){
+			return op ? d._setOpacity(n, value) : n.style[style] = value; /*Number*/
+		}
+		if(args == 2 && op){
+			return d._getOpacity(n);
+		}
+		var s = gcs(n);
+		if(args == 2 && typeof style != "string"){ // inline'd type check
+			for(var x in style){
+				d.style(node, x, style[x]);
+			}
+			return s;
+		}
+		return (args == 1) ? s : _toStyleValue(n, style, s[style] || n.style[style]); /* CSS2Properties||String||Number */
+	}
+
+	// =============================
+	// Box Functions
+	// =============================
+
+	dojo._getPadExtents = function(/*DomNode*/n, /*Object*/computedStyle){
+		//	summary:
+		// 		Returns object with special values specifically useful for node
+		// 		fitting.
+		//	description:
+		//		Returns an object with `w`, `h`, `l`, `t` properties:
+		//	|		l/t = left/top padding (respectively)
+		//	|		w = the total of the left and right padding 
+		//	|		h = the total of the top and bottom padding
+		//		If 'node' has position, l/t forms the origin for child nodes.
+		//		The w/h are used for calculating boxes.
+		//		Normally application code will not need to invoke this
+		//		directly, and will use the ...box... functions instead.
+		var 
+			s = computedStyle||gcs(n),
+			l = px(n, s.paddingLeft),
+			t = px(n, s.paddingTop);
+		return {
+			l: l,
+			t: t,
+			w: l+px(n, s.paddingRight),
+			h: t+px(n, s.paddingBottom)
+		};
+	}
+
+	dojo._getBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
+		//	summary:
+		//		returns an object with properties useful for noting the border
+		//		dimensions.
+		//	description:
+		// 		* l/t = the sum of left/top border (respectively)
+		//		* w = the sum of the left and right border
+		//		* h = the sum of the top and bottom border
+		//
+		//		The w/h are used for calculating boxes.
+		//		Normally application code will not need to invoke this
+		//		directly, and will use the ...box... functions instead.
+		var 
+			ne = "none",
+			s = computedStyle||gcs(n),
+			bl = (s.borderLeftStyle != ne ? px(n, s.borderLeftWidth) : 0),
+			bt = (s.borderTopStyle != ne ? px(n, s.borderTopWidth) : 0);
+		return {
+			l: bl,
+			t: bt,
+			w: bl + (s.borderRightStyle!=ne ? px(n, s.borderRightWidth) : 0),
+			h: bt + (s.borderBottomStyle!=ne ? px(n, s.borderBottomWidth) : 0)
+		};
+	}
+
+	dojo._getPadBorderExtents = function(/*DomNode*/n, /*Object*/computedStyle){
+		//	summary:
+		//		Returns object with properties useful for box fitting with
+		//		regards to padding.
+		// description:
+		//		* l/t = the sum of left/top padding and left/top border (respectively)
+		//		* w = the sum of the left and right padding and border
+		//		* h = the sum of the top and bottom padding and border
+		//
+		//		The w/h are used for calculating boxes.
+		//		Normally application code will not need to invoke this
+		//		directly, and will use the ...box... functions instead.
+		var 
+			s = computedStyle||gcs(n),
+			p = d._getPadExtents(n, s),
+			b = d._getBorderExtents(n, s);
+		return {
+			l: p.l + b.l,
+			t: p.t + b.t,
+			w: p.w + b.w,
+			h: p.h + b.h
+		};
+	}
+
+	dojo._getMarginExtents = function(n, computedStyle){
+		//	summary:
+		//		returns object with properties useful for box fitting with
+		//		regards to box margins (i.e., the outer-box).
+		//
+		//		* l/t = marginLeft, marginTop, respectively
+		//		* w = total width, margin inclusive
+		//		* h = total height, margin inclusive
+		//
+		//		The w/h are used for calculating boxes.
+		//		Normally application code will not need to invoke this
+		//		directly, and will use the ...box... functions instead.
+		var 
+			s = computedStyle||gcs(n),
+			l = px(n, s.marginLeft),
+			t = px(n, s.marginTop),
+			r = px(n, s.marginRight),
+			b = px(n, s.marginBottom);
+		if(d.isWebKit && (s.position != "absolute")){
+			// FIXME: Safari's version of the computed right margin
+			// is the space between our right edge and the right edge 
+			// of our offsetParent.
+			// What we are looking for is the actual margin value as 
+			// determined by CSS.
+			// Hack solution is to assume left/right margins are the same.
+			r = l;
+		}
+		return {
+			l: l,
+			t: t,
+			w: l+r,
+			h: t+b
+		};
+	}
+
+	// Box getters work in any box context because offsetWidth/clientWidth
+	// are invariant wrt box context
+	//
+	// They do *not* work for display: inline objects that have padding styles
+	// because the user agent ignores padding (it's bogus styling in any case)
+	//
+	// Be careful with IMGs because they are inline or block depending on 
+	// browser and browser mode.
+
+	// Although it would be easier to read, there are not separate versions of 
+	// _getMarginBox for each browser because:
+	// 1. the branching is not expensive
+	// 2. factoring the shared code wastes cycles (function call overhead)
+	// 3. duplicating the shared code wastes bytes
+
+	dojo._getMarginBox = function(/*DomNode*/node, /*Object*/computedStyle){
+		// summary:
+		//		returns an object that encodes the width, height, left and top
+		//		positions of the node's margin box.
+		var s = computedStyle || gcs(node), me = d._getMarginExtents(node, s);
+		var l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode;
+				if(d.isMoz){
+			// Mozilla:
+			// If offsetParent has a computed overflow != visible, the offsetLeft is decreased
+			// by the parent's border.
+			// We don't want to compute the parent's style, so instead we examine node's
+			// computed left/top which is more stable.
+			var sl = parseFloat(s.left), st = parseFloat(s.top);
+			if(!isNaN(sl) && !isNaN(st)){
+				l = sl, t = st;
+			}else{
+				// If child's computed left/top are not parseable as a number (e.g. "auto"), we
+				// have no choice but to examine the parent's computed style.
+				if(p && p.style){
+					var pcs = gcs(p);
+					if(pcs.overflow != "visible"){
+						var be = d._getBorderExtents(p, pcs);
+						l += be.l, t += be.t;
+					}
+				}
+			}
+		}else if(d.isOpera || (d.isIE > 7 && !d.isQuirks)){
+			// On Opera and IE 8, offsetLeft/Top includes the parent's border
+			if(p){
+				be = d._getBorderExtents(p);
+				l -= be.l;
+				t -= be.t;
+			}
+		}
+				return {
+			l: l,
+			t: t,
+			w: node.offsetWidth + me.w,
+			h: node.offsetHeight + me.h 
+		};
+	}
+
+	dojo._getContentBox = function(node, computedStyle){
+		// summary:
+		//		Returns an object that encodes the width, height, left and top
+		//		positions of the node's content box, irrespective of the
+		//		current box model.
+
+		// clientWidth/Height are important since the automatically account for scrollbars
+		// fallback to offsetWidth/Height for special cases (see #3378)
+		var s = computedStyle || gcs(node),
+			pe = d._getPadExtents(node, s),
+			be = d._getBorderExtents(node, s),
+			w = node.clientWidth,
+			h
+		;
+		if(!w){
+			w = node.offsetWidth, h = node.offsetHeight;
+		}else{
+			h = node.clientHeight, be.w = be.h = 0;
+		}
+		// On Opera, offsetLeft includes the parent's border
+				if(d.isOpera){ pe.l += be.l; pe.t += be.t; };
+				return {
+			l: pe.l,
+			t: pe.t,
+			w: w - pe.w - be.w,
+			h: h - pe.h - be.h
+		};
+	}
+
+	dojo._getBorderBox = function(node, computedStyle){
+		var s = computedStyle || gcs(node),
+			pe = d._getPadExtents(node, s),
+			cb = d._getContentBox(node, s)
+		;
+		return {
+			l: cb.l - pe.l,
+			t: cb.t - pe.t,
+			w: cb.w + pe.w,
+			h: cb.h + pe.h
+		};
+	}
+
+	// Box setters depend on box context because interpretation of width/height styles
+	// vary wrt box context.
+	//
+	// The value of dojo.boxModel is used to determine box context.
+	// dojo.boxModel can be set directly to change behavior.
+	//
+	// Beware of display: inline objects that have padding styles
+	// because the user agent ignores padding (it's a bogus setup anyway)
+	//
+	// Be careful with IMGs because they are inline or block depending on 
+	// browser and browser mode.
+	//
+	// Elements other than DIV may have special quirks, like built-in
+	// margins or padding, or values not detectable via computedStyle.
+	// In particular, margins on TABLE do not seems to appear 
+	// at all in computedStyle on Mozilla.
+
+	dojo._setBox = function(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){
+		//	summary:
+		//		sets width/height/left/top in the current (native) box-model
+		//		dimentions. Uses the unit passed in u.
+		//	node:
+		//		DOM Node reference. Id string not supported for performance
+		//		reasons.
+		//	l:
+		//		left offset from parent.
+		//	t:
+		//		top offset from parent.
+		//	w:
+		//		width in current box model.
+		//	h:
+		//		width in current box model.
+		//	u:
+		//		unit measure to use for other measures. Defaults to "px".
+		u = u || "px";
+		var s = node.style;
+		if(!isNaN(l)){ s.left = l + u; }
+		if(!isNaN(t)){ s.top = t + u; }
+		if(w >= 0){ s.width = w + u; }
+		if(h >= 0){ s.height = h + u; }
+	}
+
+	dojo._isButtonTag = function(/*DomNode*/node) {
+		// summary:
+		//		True if the node is BUTTON or INPUT.type="button".
+		return node.tagName == "BUTTON"
+			|| node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean
+	}
+
+	dojo._usesBorderBox = function(/*DomNode*/node){
+		//	summary:
+		//		True if the node uses border-box layout.
+
+		// We could test the computed style of node to see if a particular box
+		// has been specified, but there are details and we choose not to bother.
+
+		// TABLE and BUTTON (and INPUT type=button) are always border-box by default.
+		// If you have assigned a different box to either one via CSS then
+		// box functions will break.
+
+		var n = node.tagName;
+		return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean
+	}
+
+	dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){
+		//	summary:
+		//		Sets the size of the node's contents, irrespective of margins,
+		//		padding, or borders.
+		if(d._usesBorderBox(node)){
+			var pb = d._getPadBorderExtents(node, computedStyle);
+			if(widthPx >= 0){ widthPx += pb.w; }
+			if(heightPx >= 0){ heightPx += pb.h; }
+		}
+		d._setBox(node, NaN, NaN, widthPx, heightPx);
+	}
+
+	dojo._setMarginBox = function(/*DomNode*/node, 	/*Number?*/leftPx, /*Number?*/topPx,
+													/*Number?*/widthPx, /*Number?*/heightPx,
+													/*Object*/computedStyle){
+		//	summary:
+		//		sets the size of the node's margin box and placement
+		//		(left/top), irrespective of box model. Think of it as a
+		//		passthrough to dojo._setBox that handles box-model vagaries for
+		//		you.
+
+		var s = computedStyle || gcs(node),
+		// Some elements have special padding, margin, and box-model settings.
+		// To use box functions you may need to set padding, margin explicitly.
+		// Controlling box-model is harder, in a pinch you might set dojo.boxModel.
+			bb = d._usesBorderBox(node),
+			pb = bb ? _nilExtents : d._getPadBorderExtents(node, s)
+		;
+		if(d.isWebKit){
+			// on Safari (3.1.2), button nodes with no explicit size have a default margin
+			// setting an explicit size eliminates the margin.
+			// We have to swizzle the width to get correct margin reading.
+			if(d._isButtonTag(node)){
+				var ns = node.style;
+				if(widthPx >= 0 && !ns.width) { ns.width = "4px"; }
+				if(heightPx >= 0 && !ns.height) { ns.height = "4px"; }
+			}
+		}
+		var mb = d._getMarginExtents(node, s);
+		if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); }
+		if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); }
+		d._setBox(node, leftPx, topPx, widthPx, heightPx);
+	}
+
+	var _nilExtents = { l:0, t:0, w:0, h:0 };
+
+	// public API
+
+	dojo.marginBox = function(/*DomNode|String*/node, /*Object?*/box){
+		//	summary:
+		//		Getter/setter for the margin-box of node.
+		//	description:
+		//		Getter/setter for the margin-box of node.
+		//		Returns an object in the expected format of box (regardless
+		//		if box is passed). The object might look like:
+		//			`{ l: 50, t: 200, w: 300: h: 150 }`
+		//		for a node offset from its parent 50px to the left, 200px from
+		//		the top with a margin width of 300px and a margin-height of
+		//		150px.
+		//	node:
+		//		id or reference to DOM Node to get/set box for
+		//	box:
+		//		If passed, denotes that dojo.marginBox() should
+		//		update/set the margin box for node. Box is an object in the
+		//		above format. All properties are optional if passed.
+		//	example:
+		//	Retrieve the marginbox of a passed node
+		//	|	var box = dojo.marginBox("someNodeId");
+		//	|	console.dir(box);
+		//
+		//	example:
+		//	Set a node's marginbox to the size of another node
+		//	|	var box = dojo.marginBox("someNodeId");
+		//	|	dojo.marginBox("someOtherNode", box);
+		
+		var n = byId(node), s = gcs(n), b = box;
+		return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object
+	}
+
+	dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){
+		//	summary:
+		//		Getter/setter for the content-box of node.
+		//	description:
+		//		Returns an object in the expected format of box (regardless if box is passed).
+		//		The object might look like:
+		//			`{ l: 50, t: 200, w: 300: h: 150 }`
+		//		for a node offset from its parent 50px to the left, 200px from
+		//		the top with a content width of 300px and a content-height of
+		//		150px. Note that the content box may have a much larger border
+		//		or margin box, depending on the box model currently in use and
+		//		CSS values set/inherited for node.
+		//		While the getter will return top and left values, the
+		//		setter only accepts setting the width and height.
+		//	node:
+		//		id or reference to DOM Node to get/set box for
+		//	box:
+		//		If passed, denotes that dojo.contentBox() should
+		//		update/set the content box for node. Box is an object in the
+		//		above format, but only w (width) and h (height) are supported.
+		//		All properties are optional if passed.
+		var n = byId(node), s = gcs(n), b = box;
+		return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object
+	}
+
+	// =============================
+	// Positioning 
+	// =============================
+
+	var _sumAncestorProperties = function(node, prop){
+		if(!(node = (node||0).parentNode)){return 0}
+		var val, retVal = 0, _b = d.body();
+		while(node && node.style){
+			if(gcs(node).position == "fixed"){
+				return 0;
+			}
+			val = node[prop];
+			if(val){
+				retVal += val - 0;
+				// opera and khtml #body & #html has the same values, we only
+				// need one value
+				if(node == _b){ break; }
+			}
+			node = node.parentNode;
+		}
+		return retVal;	//	integer
+	}
+
+	dojo._docScroll = function(){
+		var n = d.global;
+		return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } :
+			(n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } :
+			(n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 }));
+	};
+
+	dojo._isBodyLtr = function(){
+		return "_bodyLtr" in d? d._bodyLtr :
+			d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean 
+	}
+
+		dojo._getIeDocumentElementOffset = function(){
+		//	summary:
+		//		returns the offset in x and y from the document body to the
+		//		visual edge of the page
+		//	description:
+		// The following values in IE contain an offset:
+		//	|		event.clientX
+		//	|		event.clientY
+		//	|		node.getBoundingClientRect().left
+		//	|		node.getBoundingClientRect().top
+		//	 	But other position related values do not contain this offset,
+		//	 	such as node.offsetLeft, node.offsetTop, node.style.left and
+		//	 	node.style.top. The offset is always (2, 2) in LTR direction.
+		//	 	When the body is in RTL direction, the offset counts the width
+		//	 	of left scroll bar's width.  This function computes the actual
+		//	 	offset.
+
+		//NOTE: assumes we're being called in an IE browser
+
+		var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks 
+
+		if(d.isIE < 8){
+			var r = de.getBoundingClientRect(); // works well for IE6+
+			//console.debug('rect left,top = ' + r.left+','+r.top + ', html client left/top = ' + de.clientLeft+','+de.clientTop + ', rtl = ' + (!d._isBodyLtr()) + ', quirks = ' + d.isQuirks);
+			var l = r.left,
+			    t = r.top;
+			if(d.isIE < 7){
+				l += de.clientLeft;	// scrollbar size in strict/RTL, or,
+				t += de.clientTop;	// HTML border size in strict
+			}
+			return {
+				x: l < 0? 0 : l, // FRAME element border size can lead to inaccurate negative values
+				y: t < 0? 0 : t
+			};
+		}else{
+			return {
+				x: 0,
+				y: 0
+			};
+		}
+
+	};
+	
+	dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){
+		// In RTL direction, scrollLeft should be a negative value, but IE < 8
+		// returns a positive one. All codes using documentElement.scrollLeft
+		// must call this function to fix this error, otherwise the position
+		// will offset to right when there is a horizontal scrollbar.
+
+				var dd = d.doc;
+		if(d.isIE < 8 && !d._isBodyLtr()){
+			var de = d.isQuirks ? dd.body : dd.documentElement;
+			return scrollLeft + de.clientWidth - de.scrollWidth; // Integer
+		}
+				return scrollLeft; // Integer
+	}
+
+	// FIXME: need a setter for coords or a moveTo!!
+	dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){
+		//	summary:
+		//		Gets the position and size of the passed element relative to
+		//		the viewport (if includeScroll==false), or relative to the
+		//		document root (if includeScroll==true).
+		//
+		//	description:
+		//		Returns an object of the form:
+		//			{ x: 100, y: 300, w: 20, h: 15 }
+		//		If includeScroll==true, the x and y values will include any
+		//		document offsets that may affect the position relative to the
+		//		viewport.
+		//		Uses the border-box model (inclusive of border and padding but
+		//		not margin).  Does not act as a setter.
+
+		var db = d.body(), dh = db.parentNode, ret;
+		node = byId(node);
+		if(node["getBoundingClientRect"]){
+			// IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch
+			ret = node.getBoundingClientRect();
+			ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top };
+					if(d.isIE){
+				// On IE there's a 2px offset that we need to adjust for, see _getIeDocumentElementOffset()
+				var offset = d._getIeDocumentElementOffset();
+
+				// fixes the position in IE, quirks mode
+				ret.x -= offset.x + (d.isQuirks ? db.clientLeft+db.offsetLeft : 0);
+				ret.y -= offset.y + (d.isQuirks ? db.clientTop+db.offsetTop : 0);
+			}else if(d.isFF == 3){
+				// In FF3 you have to subtract the document element margins.
+				// Fixed in FF3.5 though.
+				var cs = gcs(dh);
+				ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth);
+				ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth);
+			}
+				}else{
+			// FF2 and older WebKit
+			ret = {
+				x: 0,
+				y: 0,
+				w: node.offsetWidth,
+				h: node.offsetHeight
+			};
+			if(node["offsetParent"]){
+				ret.x -= _sumAncestorProperties(node, "scrollLeft");
+				ret.y -= _sumAncestorProperties(node, "scrollTop");
+
+				var curnode = node;
+				do{
+					var n = curnode.offsetLeft,
+						t = curnode.offsetTop;
+					ret.x += isNaN(n) ? 0 : n;
+					ret.y += isNaN(t) ? 0 : t;
+
+					cs = gcs(curnode);
+					if(curnode != node){
+								if(d.isMoz){
+							// tried left+right with differently sized left/right borders
+							// it really is 2xleft border in FF, not left+right, even in RTL!
+							ret.x += 2 * px(curnode,cs.borderLeftWidth);
+							ret.y += 2 * px(curnode,cs.borderTopWidth);
+						}else{
+									ret.x += px(curnode, cs.borderLeftWidth);
+							ret.y += px(curnode, cs.borderTopWidth);
+								}
+							}
+					// static children in a static div in FF2 are affected by the div's border as well
+					// but offsetParent will skip this div!
+							if(d.isMoz && cs.position=="static"){
+						var parent=curnode.parentNode;
+						while(parent!=curnode.offsetParent){
+							var pcs=gcs(parent);
+							if(pcs.position=="static"){
+								ret.x += px(curnode,pcs.borderLeftWidth);
+								ret.y += px(curnode,pcs.borderTopWidth);
+							}
+							parent=parent.parentNode;
+						}
+					}
+							curnode = curnode.offsetParent;
+				}while((curnode != dh) && curnode);
+			}else if(node.x && node.y){
+				ret.x += isNaN(node.x) ? 0 : node.x;
+				ret.y += isNaN(node.y) ? 0 : node.y;
+			}
+		}
+		// account for document scrolling
+		// if offsetParent is used, ret value already includes scroll position
+		// so we may have to actually remove that value if !includeScroll
+		if(includeScroll){
+			var scroll = d._docScroll();
+			ret.x += scroll.x;
+			ret.y += scroll.y;
+		}
+
+		return ret; // Object
+	}
+
+	dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){
+		//	summary:
+		//		Deprecated: Use position() for border-box x/y/w/h
+		//		or marginBox() for margin-box w/h/l/t.
+		//		Returns an object representing a node's size and position.
+		//
+		//	description:
+		//		Returns an object that measures margin-box (w)idth/(h)eight
+		//		and absolute position x/y of the border-box. Also returned
+		//		is computed (l)eft and (t)op values in pixels from the
+		//		node's offsetParent as returned from marginBox().
+		//		Return value will be in the form:
+		//|			{ l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 }
+		//		Does not act as a setter. If includeScroll is passed, the x and
+		//		y params are affected as one would expect in dojo.position().
+		var n = byId(node), s = gcs(n), mb = d._getMarginBox(n, s);
+		var abs = d.position(n, includeScroll);
+		mb.x = abs.x;
+		mb.y = abs.y;
+		return mb;
+	}
+
+	// =============================
+	// Element attribute Functions
+	// =============================
+
+	// dojo.attr() should conform to http://www.w3.org/TR/DOM-Level-2-Core/
+
+	var _propNames = {
+			// properties renamed to avoid clashes with reserved words
+			"class":   "className",
+			"for":     "htmlFor",
+			// properties written as camelCase
+			tabindex:  "tabIndex",
+			readonly:  "readOnly",
+			colspan:   "colSpan",
+			frameborder: "frameBorder",
+			rowspan:   "rowSpan",
+			valuetype: "valueType"
+		},
+		_attrNames = {
+			// original attribute names
+			classname: "class",
+			htmlfor:   "for",
+			// for IE
+			tabindex:  "tabIndex",
+			readonly:  "readOnly"
+		},
+		_forcePropNames = {
+			innerHTML: 1,
+			className: 1,
+			htmlFor:   d.isIE,
+			value:     1
+		};
+
+	var _fixAttrName = function(/*String*/ name){
+		return _attrNames[name.toLowerCase()] || name;
+	};
+
+	var _hasAttr = function(node, name){
+		var attr = node.getAttributeNode && node.getAttributeNode(name);
+		return attr && attr.specified; // Boolean
+	};
+
+	// There is a difference in the presence of certain properties and their default values
+	// between browsers. For example, on IE "disabled" is present on all elements,
+	// but it is value is "false"; "tabIndex" of <div> returns 0 by default on IE, yet other browsers
+	// can return -1.
+
+	dojo.hasAttr = function(/*DomNode|String*/node, /*String*/name){
+		//	summary:
+		//		Returns true if the requested attribute is specified on the
+		//		given element, and false otherwise.
+		//	node:
+		//		id or reference to the element to check
+		//	name:
+		//		the name of the attribute
+		//	returns:
+		//		true if the requested attribute is specified on the
+		//		given element, and false otherwise
+		var lc = name.toLowerCase();
+		return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name);	// Boolean
+	}
+
+	var _evtHdlrMap = {}, _ctr = 0,
+		_attrId = dojo._scopeName + "attrid",
+		// the next dictionary lists elements with read-only innerHTML on IE
+		_roInnerHtml = {col: 1, colgroup: 1,
+			// frameset: 1, head: 1, html: 1, style: 1,
+			table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1};
+
+	dojo.attr = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){
+		//	summary:
+		//		Gets or sets an attribute on an HTML element.
+		//	description:
+		//		Handles normalized getting and setting of attributes on DOM
+		//		Nodes. If 2 arguments are passed, and a the second argumnt is a
+		//		string, acts as a getter.
+		//
+		//		If a third argument is passed, or if the second argument is a
+		//		map of attributes, acts as a setter.
+		//
+		//		When passing functions as values, note that they will not be
+		//		directly assigned to slots on the node, but rather the default
+		//		behavior will be removed and the new behavior will be added
+		//		using `dojo.connect()`, meaning that event handler properties
+		//		will be normalized and that some caveats with regards to
+		//		non-standard behaviors for onsubmit apply. Namely that you
+		//		should cancel form submission using `dojo.stopEvent()` on the
+		//		passed event object instead of returning a boolean value from
+		//		the handler itself.
+		//	node:
+		//		id or reference to the element to get or set the attribute on
+		//	name:
+		//		the name of the attribute to get or set.
+		//	value:
+		//		The value to set for the attribute
+		//	returns:
+		//		when used as a getter, the value of the requested attribute
+		//		or null if that attribute does not have a specified or
+		//		default value;
+		//
+		//		when used as a setter, the DOM node
+		//
+		//	example:
+		//	|	// get the current value of the "foo" attribute on a node
+		//	|	dojo.attr(dojo.byId("nodeId"), "foo");
+		//	|	// or we can just pass the id:
+		//	|	dojo.attr("nodeId", "foo");
+		//
+		//	example:
+		//	|	// use attr() to set the tab index
+		//	|	dojo.attr("nodeId", "tabIndex", 3);
+		//	|
+		//
+		//	example:
+		//	Set multiple values at once, including event handlers:
+		//	|	dojo.attr("formId", {
+		//	|		"foo": "bar",
+		//	|		"tabIndex": -1,
+		//	|		"method": "POST",
+		//	|		"onsubmit": function(e){
+		//	|			// stop submitting the form. Note that the IE behavior
+		//	|			// of returning true or false will have no effect here
+		//	|			// since our handler is connect()ed to the built-in
+		//	|			// onsubmit behavior and so we need to use
+		//	|			// dojo.stopEvent() to ensure that the submission
+		//	|			// doesn't proceed.
+		//	|			dojo.stopEvent(e);
+		//	|
+		//	|			// submit the form with Ajax
+		//	|			dojo.xhrPost({ form: "formId" });
+		//	|		}
+		//	|	});
+		//
+		//	example:
+		//	Style is s special case: Only set with an object hash of styles
+		//	|	dojo.attr("someNode",{
+		//	|		id:"bar",
+		//	|		style:{
+		//	|			width:"200px", height:"100px", color:"#000"
+		//	|		}
+		//	|	});
+		//
+		//	example:
+		//	Again, only set style as an object hash of styles:
+		//	|	var obj = { color:"#fff", backgroundColor:"#000" };
+		//	|	dojo.attr("someNode", "style", obj);
+		//	|
+		//	|	// though shorter to use `dojo.style()` in this case:
+		//	|	dojo.style("someNode", obj);
+
+		node = byId(node);
+		var args = arguments.length, prop;
+		if(args == 2 && typeof name != "string"){ // inline'd type check
+			// the object form of setter: the 2nd argument is a dictionary
+			for(var x in name){
+				d.attr(node, x, name[x]);
+			}
+			return node; // DomNode
+		}
+		var lc = name.toLowerCase(),
+			propName = _propNames[lc] || name,
+			forceProp = _forcePropNames[propName],
+			attrName = _attrNames[lc] || name;
+		if(args == 3){
+			// setter
+			do{
+				if(propName == "style" && typeof value != "string"){ // inline'd type check
+					// special case: setting a style
+					d.style(node, value);
+					break;
+				}
+				if(propName == "innerHTML"){
+					// special case: assigning HTML
+										if(d.isIE && node.tagName.toLowerCase() in _roInnerHtml){
+						d.empty(node);
+						node.appendChild(d._toDom(value, node.ownerDocument));
+					}else{
+											node[propName] = value;
+										}
+										break;
+				}
+				if(d.isFunction(value)){
+					// special case: assigning an event handler
+					// clobber if we can
+					var attrId = d.attr(node, _attrId);
+					if(!attrId){
+						attrId = _ctr++;
+						d.attr(node, _attrId, attrId);
+					}
+					if(!_evtHdlrMap[attrId]){
+						_evtHdlrMap[attrId] = {};
+					}
+					var h = _evtHdlrMap[attrId][propName];
+					if(h){
+						d.disconnect(h);
+					}else{
+						try{
+							delete node[propName];
+						}catch(e){}
+					}
+					// ensure that event objects are normalized, etc.
+					_evtHdlrMap[attrId][propName] = d.connect(node, propName, value);
+					break;
+				}
+				if(forceProp || typeof value == "boolean"){
+					// special case: forcing assignment to the property
+					// special case: setting boolean to a property instead of attribute
+					node[propName] = value;
+					break;
+				}
+				// node's attribute
+				node.setAttribute(attrName, value);
+			}while(false);
+			return node; // DomNode
+		}
+		// getter
+		// should we access this attribute via a property or
+		// via getAttribute()?
+		value = node[propName];
+		if(forceProp && typeof value != "undefined"){
+			// node's property
+			return value;	// Anything
+		}
+		if(propName != "href" && (typeof value == "boolean" || d.isFunction(value))){
+			// node's property
+			return value;	// Anything
+		}
+		// node's attribute
+		// we need _hasAttr() here to guard against IE returning a default value
+		return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
+	}
+
+	dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){
+		//	summary:
+		//		Removes an attribute from an HTML element.
+		//	node:
+		//		id or reference to the element to remove the attribute from
+		//	name:
+		//		the name of the attribute to remove
+		byId(node).removeAttribute(_fixAttrName(name));
+	}
+
+	dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){
+		//	summary:
+		//		Returns an effective value of a property or an attribute.
+		//	node:
+		//		id or reference to the element to remove the attribute from
+		//	name:
+		//		the name of the attribute
+		node = byId(node);
+		var lc = name.toLowerCase(),
+			propName = _propNames[lc] || name;
+		if((propName in node) && propName != "href"){
+			// node's property
+			return node[propName];	// Anything
+		}
+		// node's attribute
+		var attrName = _attrNames[lc] || name;
+		return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything
+	}
+
+	dojo.create = function(tag, attrs, refNode, pos){
+		//	summary:
+		//		Create an element, allowing for optional attribute decoration
+		//		and placement.
+		//
+		// description:
+		//		A DOM Element creation function. A shorthand method for creating a node or
+		//		a fragment, and allowing for a convenient optional attribute setting step,
+		//		as well as an optional DOM placement reference.
+		//|
+		//		Attributes are set by passing the optional object through `dojo.attr`.
+		//		See `dojo.attr` for noted caveats and nuances, and API if applicable.
+		//|
+		//		Placement is done via `dojo.place`, assuming the new node to be the action 
+		//		node, passing along the optional reference node and position.
+		//
+		// tag: String|DomNode
+		//		A string of the element to create (eg: "div", "a", "p", "li", "script", "br"),
+		//		or an existing DOM node to process.
+		//
+		// attrs: Object
+		//		An object-hash of attributes to set on the newly created node.
+		//		Can be null, if you don't want to set any attributes/styles.
+		//		See: `dojo.attr` for a description of available attributes.
+		//
+		// refNode: String?|DomNode?
+		//		Optional reference node. Used by `dojo.place` to place the newly created
+		//		node somewhere in the dom relative to refNode. Can be a DomNode reference
+		//		or String ID of a node.
+		//
+		// pos: String?
+		//		Optional positional reference. Defaults to "last" by way of `dojo.place`,
+		//		though can be set to "first","after","before","last", "replace" or "only"
+		//		to further control the placement of the new node relative to the refNode.
+		//		'refNode' is required if a 'pos' is specified.
+		//
+		// returns: DomNode
+		//
+		// example:
+		//	Create a DIV:
+		//	|	var n = dojo.create("div");
+		//
+		// example:
+		//	Create a DIV with content:
+		//	|	var n = dojo.create("div", { innerHTML:"<p>hi</p>" });
+		//
+		// example:
+		//	Place a new DIV in the BODY, with no attributes set
+		//	|	var n = dojo.create("div", null, dojo.body());
+		//
+		// example:
+		//	Create an UL, and populate it with LI's. Place the list as the first-child of a 
+		//	node with id="someId":
+		//	|	var ul = dojo.create("ul", null, "someId", "first");
+		//	|	var items = ["one", "two", "three", "four"];
+		//	|	dojo.forEach(items, function(data){
+		//	|		dojo.create("li", { innerHTML: data }, ul);
+		//	|	});
+		//
+		// example:
+		//	Create an anchor, with an href. Place in BODY:
+		//	|	dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body());
+		//
+		// example:
+		//	Create a `dojo.NodeList()` from a new element (for syntatic sugar):
+		//	|	dojo.query(dojo.create('div'))
+		//	|		.addClass("newDiv")
+		//	|		.onclick(function(e){ console.log('clicked', e.target) })
+		//	|		.place("#someNode"); // redundant, but cleaner.
+
+		var doc = d.doc;
+		if(refNode){
+			refNode = byId(refNode);
+			doc = refNode.ownerDocument;
+		}
+		if(typeof tag == "string"){ // inline'd type check
+			tag = doc.createElement(tag);
+		}
+		if(attrs){ d.attr(tag, attrs); }
+		if(refNode){ d.place(tag, refNode, pos); }
+		return tag; // DomNode
+	}
+
+	/*=====
+	dojo.empty = function(node){
+			//	summary:
+			//		safely removes all children of the node.
+			//	node: DOMNode|String
+			//		a reference to a DOM node or an id.
+			//	example:
+			//	Destroy node's children byId:
+			//	|	dojo.empty("someId");
+			//
+			//	example:
+			//	Destroy all nodes' children in a list by reference:
+			//	|	dojo.query(".someNode").forEach(dojo.empty);
+	}
+	=====*/
+
+	d.empty =
+				d.isIE ?  function(node){
+			node = byId(node);
+			for(var c; c = node.lastChild;){ // intentional assignment
+				d.destroy(c);
+			}
+		} :
+				function(node){
+			byId(node).innerHTML = "";
+		};
+
+	/*=====
+	dojo._toDom = function(frag, doc){
+			//	summary:
+			//		instantiates an HTML fragment returning the corresponding DOM.
+			//	frag: String
+			//		the HTML fragment
+			//	doc: DocumentNode?
+			//		optional document to use when creating DOM nodes, defaults to
+			//		dojo.doc if not specified.
+			//	returns: DocumentFragment
+			//
+			//	example:
+			//	Create a table row:
+			//	|	var tr = dojo._toDom("<tr><td>First!</td></tr>");
+	}
+	=====*/
+
+	// support stuff for dojo._toDom
+	var tagWrap = {
+			option: ["select"],
+			tbody: ["table"],
+			thead: ["table"],
+			tfoot: ["table"],
+			tr: ["table", "tbody"],
+			td: ["table", "tbody", "tr"],
+			th: ["table", "thead", "tr"],
+			legend: ["fieldset"],
+			caption: ["table"],
+			colgroup: ["table"],
+			col: ["table", "colgroup"],
+			li: ["ul"]
+		},
+		reTag = /<\s*([\w\:]+)/,
+		masterNode = {}, masterNum = 0,
+		masterName = "__" + d._scopeName + "ToDomId";
+
+	// generate start/end tag strings to use
+	// for the injection for each special tag wrap case.
+	for(var param in tagWrap){
+		var tw = tagWrap[param];
+		tw.pre  = param == "option" ? '<select multiple="multiple">' : "<" + tw.join("><") + ">";
+		tw.post = "</" + tw.reverse().join("></") + ">";
+		// the last line is destructive: it reverses the array,
+		// but we don't care at this point
+	}
+
+	d._toDom = function(frag, doc){
+		//	summary:
+		// 		converts HTML string into DOM nodes.
+
+		doc = doc || d.doc;
+		var masterId = doc[masterName];
+		if(!masterId){
+			doc[masterName] = masterId = ++masterNum + "";
+			masterNode[masterId] = doc.createElement("div");
+		}
+
+		// make sure the frag is a string.
+		frag += "";
+
+		// find the starting tag, and get node wrapper
+		var match = frag.match(reTag),
+			tag = match ? match[1].toLowerCase() : "",
+			master = masterNode[masterId],
+			wrap, i, fc, df;
+		if(match && tagWrap[tag]){
+			wrap = tagWrap[tag];
+			master.innerHTML = wrap.pre + frag + wrap.post;
+			for(i = wrap.length; i; --i){
+				master = master.firstChild;
+			}
+		}else{
+			master.innerHTML = frag;
+		}
+
+		// one node shortcut => return the node itself
+		if(master.childNodes.length == 1){
+			return master.removeChild(master.firstChild); // DOMNode
+		}
+
+		// return multiple nodes as a document fragment
+		df = doc.createDocumentFragment();
+		while(fc = master.firstChild){ // intentional assignment
+			df.appendChild(fc);
+		}
+		return df; // DOMNode
+	}
+
+	// =============================
+	// (CSS) Class Functions
+	// =============================
+	var _className = "className";
+
+	dojo.hasClass = function(/*DomNode|String*/node, /*String*/classStr){
+		//	summary:
+		//		Returns whether or not the specified classes are a portion of the
+		//		class list currently applied to the node.
+		//
+		//	node:
+		//		String ID or DomNode reference to check the class for.
+		//
+		//	classStr:
+		//		A string class name to look for.
+		//
+		//	example:
+		//	Do something if a node with id="someNode" has class="aSillyClassName" present
+		//	|	if(dojo.hasClass("someNode","aSillyClassName")){ ... }
+
+		return ((" "+ byId(node)[_className] +" ").indexOf(" " + classStr + " ") >= 0);  // Boolean
+	};
+
+	var spaces = /\s+/, a1 = [""],
+		str2array = function(s){
+			if(typeof s == "string" || s instanceof String){
+				if(s.indexOf(" ") < 0){
+					a1[0] = s;
+					return a1;
+				}else{
+					return s.split(spaces);
+				}
+			}
+			// assumed to be an array
+			return s || "";
+		};
+
+	dojo.addClass = function(/*DomNode|String*/node, /*String|Array*/classStr){
+		//	summary:
+		//		Adds the specified classes to the end of the class list on the
+		//		passed node. Will not re-apply duplicate classes.
+		//
+		//	node:
+		//		String ID or DomNode reference to add a class string too
+		//
+		//	classStr:
+		//		A String class name to add, or several space-separated class names,
+		//		or an array of class names.
+		//
+		// example:
+		//	Add a class to some node:
+		//	|	dojo.addClass("someNode", "anewClass");
+		//
+		// example:
+		//	Add two classes at once:
+		//	|	dojo.addClass("someNode", "firstClass secondClass");
+		//
+		// example:
+		//	Add two classes at once (using array):
+		//	|	dojo.addClass("someNode", ["firstClass", "secondClass"]);
+		//
+		// example:
+		//	Available in `dojo.NodeList` for multiple additions
+		//	|	dojo.query("ul > li").addClass("firstLevel");
+
+		node = byId(node);
+		classStr = str2array(classStr);
+		var cls = node[_className], oldLen;
+		cls = cls ? " " + cls + " " : " ";
+		oldLen = cls.length;
+		for(var i = 0, len = classStr.length, c; i < len; ++i){
+			c = classStr[i];
+			if(c && cls.indexOf(" " + c + " ") < 0){
+				cls += c + " ";
+			}
+		}
+		if(oldLen < cls.length){
+			node[_className] = cls.substr(1, cls.length - 2);
+		}
+	};
+
+	dojo.removeClass = function(/*DomNode|String*/node, /*String|Array?*/classStr){
+		// summary:
+		//		Removes the specified classes from node. No `dojo.hasClass`
+		//		check is required.
+		//
+		// node:
+		// 		String ID or DomNode reference to remove the class from.
+		//
+		// classStr:
+		//		An optional String class name to remove, or several space-separated
+		//		class names, or an array of class names. If omitted, all class names
+		//		will be deleted.
+		//
+		// example:
+		//	Remove a class from some node:
+		//	|	dojo.removeClass("someNode", "firstClass");
+		//
+		// example:
+		//	Remove two classes from some node:
+		//	|	dojo.removeClass("someNode", "firstClass secondClass");
+		//
+		// example:
+		//	Remove two classes from some node (using array):
+		//	|	dojo.removeClass("someNode", ["firstClass", "secondClass"]);
+		//
+		// example:
+		//	Remove all classes from some node:
+		//	|	dojo.removeClass("someNode");
+		//
+		// example:
+		//	Available in `dojo.NodeList()` for multiple removal
+		//	|	dojo.query(".foo").removeClass("foo");
+
+		node = byId(node);
+		var cls;
+		if(classStr !== undefined){
+			classStr = str2array(classStr);
+			cls = " " + node[_className] + " ";
+			for(var i = 0, len = classStr.length; i < len; ++i){
+				cls = cls.replace(" " + classStr[i] + " ", " ");
+			}
+			cls = d.trim(cls);
+		}else{
+			cls = "";
+		}
+		if(node[_className] != cls){ node[_className] = cls; }
+	};
+
+	dojo.toggleClass = function(/*DomNode|String*/node, /*String|Array*/classStr, /*Boolean?*/condition){
+		//	summary:
+		//		Adds a class to node if not present, or removes if present.
+		//		Pass a boolean condition if you want to explicitly add or remove.
+		//	condition:
+		//		If passed, true means to add the class, false means to remove.
+		//
+		// example:
+		//	|	dojo.toggleClass("someNode", "hovered");
+		//
+		// example:
+		//	Forcefully add a class
+		//	|	dojo.toggleClass("someNode", "hovered", true);
+		//
+		// example:
+		//	Available in `dojo.NodeList()` for multiple toggles
+		//	|	dojo.query(".toggleMe").toggleClass("toggleMe");
+
+		if(condition === undefined){
+			condition = !d.hasClass(node, classStr);
+		}
+		d[condition ? "addClass" : "removeClass"](node, classStr);
+	};
+
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.NodeList"] = true;
+dojo.provide("dojo._base.NodeList");
+
+
+
+(function(){
+
+	var d = dojo;
+
+	var ap = Array.prototype, aps = ap.slice, apc = ap.concat;
+
+	var tnl = function(/*Array*/ a, /*dojo.NodeList?*/ parent, /*Function?*/ NodeListCtor){
+		// summary:
+		// 		decorate an array to make it look like a `dojo.NodeList`.
+		// a:
+		// 		Array of nodes to decorate.
+		// parent:
+		// 		An optional parent NodeList that generated the current
+		// 		list of nodes. Used to call _stash() so the parent NodeList
+		// 		can be accessed via end() later.
+		// NodeListCtor:
+		// 		An optional constructor function to use for any
+		// 		new NodeList calls. This allows a certain chain of
+		// 		NodeList calls to use a different object than dojo.NodeList.
+		if(!a.sort){
+			// make sure it's a real array before we pass it on to be wrapped
+			a = aps.call(a, 0);
+		}
+		var ctor = NodeListCtor || this._NodeListCtor || d._NodeListCtor;
+		a.constructor = ctor;
+		dojo._mixin(a, ctor.prototype);
+		a._NodeListCtor = ctor;
+		return parent ? a._stash(parent) : a;
+	};
+
+	var loopBody = function(f, a, o){
+		a = [0].concat(aps.call(a, 0));
+		o = o || d.global;
+		return function(node){
+			a[0] = node;
+			return f.apply(o, a);
+		};
+	};
+
+	// adapters
+
+	var adaptAsForEach = function(f, o){
+		//	summary:
+		//		adapts a single node function to be used in the forEach-type
+		//		actions. The initial object is returned from the specialized
+		//		function.
+		//	f: Function
+		//		a function to adapt
+		//	o: Object?
+		//		an optional context for f
+		return function(){
+			this.forEach(loopBody(f, arguments, o));
+			return this;	// Object
+		};
+	};
+
+	var adaptAsMap = function(f, o){
+		//	summary:
+		//		adapts a single node function to be used in the map-type
+		//		actions. The return is a new array of values, as via `dojo.map`
+		//	f: Function
+		//		a function to adapt
+		//	o: Object?
+		//		an optional context for f
+		return function(){
+			return this.map(loopBody(f, arguments, o));
+		};
+	};
+
+	var adaptAsFilter = function(f, o){
+		//	summary:
+		//		adapts a single node function to be used in the filter-type actions
+		//	f: Function
+		//		a function to adapt
+		//	o: Object?
+		//		an optional context for f
+		return function(){
+			return this.filter(loopBody(f, arguments, o));
+		};
+	};
+
+	var adaptWithCondition = function(f, g, o){
+		//	summary:
+		//		adapts a single node function to be used in the map-type
+		//		actions, behaves like forEach() or map() depending on arguments
+		//	f: Function
+		//		a function to adapt
+		//	g: Function
+		//		a condition function, if true runs as map(), otherwise runs as forEach()
+		//	o: Object?
+		//		an optional context for f and g
+		return function(){
+			var a = arguments, body = loopBody(f, a, o);
+			if(g.call(o || d.global, a)){
+				return this.map(body);	// self
+			}
+			this.forEach(body);
+			return this;	// self
+		};
+	};
+
+	var magicGuard = function(a){
+		//	summary:
+		//		the guard function for dojo.attr() and dojo.style()
+		return a.length == 1 && (typeof a[0] == "string"); // inline'd type check
+	};
+
+	var orphan = function(node){
+		//	summary:
+		//		function to orphan nodes
+		var p = node.parentNode;
+		if(p){
+			p.removeChild(node);
+		}
+	};
+	// FIXME: should we move orphan() to dojo.html?
+
+	dojo.NodeList = function(){
+		//	summary:
+		//		dojo.NodeList is an of Array subclass which adds syntactic
+		//		sugar for chaining, common iteration operations, animation, and
+		//		node manipulation. NodeLists are most often returned as the
+		//		result of dojo.query() calls.
+		//	description:
+		//		dojo.NodeList instances provide many utilities that reflect
+		//		core Dojo APIs for Array iteration and manipulation, DOM
+		//		manipulation, and event handling. Instead of needing to dig up
+		//		functions in the dojo.* namespace, NodeLists generally make the
+		//		full power of Dojo available for DOM manipulation tasks in a
+		//		simple, chainable way.
+		//	example:
+		//		create a node list from a node
+		//		|	new dojo.NodeList(dojo.byId("foo"));
+		//	example:
+		//		get a NodeList from a CSS query and iterate on it
+		//		|	var l = dojo.query(".thinger");
+		//		|	l.forEach(function(node, index, nodeList){
+		//		|		console.log(index, node.innerHTML);
+		//		|	});
+		//	example:
+		//		use native and Dojo-provided array methods to manipulate a
+		//		NodeList without needing to use dojo.* functions explicitly:
+		//		|	var l = dojo.query(".thinger");
+		//		|	// since NodeLists are real arrays, they have a length
+		//		|	// property that is both readable and writable and
+		//		|	// push/pop/shift/unshift methods
+		//		|	console.log(l.length);
+		//		|	l.push(dojo.create("span"));
+		//		|
+		//		|	// dojo's normalized array methods work too:
+		//		|	console.log( l.indexOf(dojo.byId("foo")) );
+		//		|	// ...including the special "function as string" shorthand
+		//		|	console.log( l.every("item.nodeType == 1") );
+		//		|
+		//		|	// NodeLists can be [..] indexed, or you can use the at()
+		//		|	// function to get specific items wrapped in a new NodeList:
+		//		|	var node = l[3]; // the 4th element
+		//		|	var newList = l.at(1, 3); // the 2nd and 4th elements
+		//	example:
+		//		the style functions you expect are all there too:
+		//		|	// style() as a getter...
+		//		|	var borders = dojo.query(".thinger").style("border");
+		//		|	// ...and as a setter:
+		//		|	dojo.query(".thinger").style("border", "1px solid black");
+		//		|	// class manipulation
+		//		|	dojo.query("li:nth-child(even)").addClass("even");
+		//		|	// even getting the coordinates of all the items
+		//		|	var coords = dojo.query(".thinger").coords();
+		//	example:
+		//		DOM manipulation functions from the dojo.* namespace area also
+		//		available:
+		//		|	// remove all of the elements in the list from their
+		//		|	// parents (akin to "deleting" them from the document)
+		//		|	dojo.query(".thinger").orphan();
+		//		|	// place all elements in the list at the front of #foo
+		//		|	dojo.query(".thinger").place("foo", "first");
+		//	example:
+		//		Event handling couldn't be easier. `dojo.connect` is mapped in,
+		//		and shortcut handlers are provided for most DOM events:
+		//		|	// like dojo.connect(), but with implicit scope
+		//		|	dojo.query("li").connect("onclick", console, "log");
+		//		|
+		//		|	// many common event handlers are already available directly:
+		//		|	dojo.query("li").onclick(console, "log");
+		//		|	var toggleHovered = dojo.hitch(dojo, "toggleClass", "hovered");
+		//		|	dojo.query("p")
+		//		|		.onmouseenter(toggleHovered)
+		//		|		.onmouseleave(toggleHovered);
+		//	example:
+		//		chainability is a key advantage of NodeLists:
+		//		|	dojo.query(".thinger")
+		//		|		.onclick(function(e){ /* ... */ })
+		//		|		.at(1, 3, 8) // get a subset
+		//		|			.style("padding", "5px")
+		//		|			.forEach(console.log);
+
+		return tnl(Array.apply(null, arguments));
+	};
+
+	//Allow things that new up a NodeList to use a delegated or alternate NodeList implementation.
+	d._NodeListCtor = d.NodeList;
+
+	var nl = d.NodeList, nlp = nl.prototype;
+
+	// expose adapters and the wrapper as private functions
+
+	nl._wrap = nlp._wrap = tnl;
+	nl._adaptAsMap = adaptAsMap;
+	nl._adaptAsForEach = adaptAsForEach;
+	nl._adaptAsFilter  = adaptAsFilter;
+	nl._adaptWithCondition = adaptWithCondition;
+
+	// mass assignment
+
+	// add array redirectors
+	d.forEach(["slice", "splice"], function(name){
+		var f = ap[name];
+		//Use a copy of the this array via this.slice() to allow .end() to work right in the splice case.
+		// CANNOT apply ._stash()/end() to splice since it currently modifies
+		// the existing this array -- it would break backward compatibility if we copy the array before
+		// the splice so that we can use .end(). So only doing the stash option to this._wrap for slice.
+		nlp[name] = function(){ return this._wrap(f.apply(this, arguments), name == "slice" ? this : null); };
+	});
+	// concat should be here but some browsers with native NodeList have problems with it
+
+	// add array.js redirectors
+	d.forEach(["indexOf", "lastIndexOf", "every", "some"], function(name){
+		var f = d[name];
+		nlp[name] = function(){ return f.apply(d, [this].concat(aps.call(arguments, 0))); };
+	});
+
+	// add conditional methods
+	d.forEach(["attr", "style"], function(name){
+		nlp[name] = adaptWithCondition(d[name], magicGuard);
+	});
+
+	// add forEach actions
+	d.forEach(["connect", "addClass", "removeClass", "toggleClass", "empty", "removeAttr"], function(name){
+		nlp[name] = adaptAsForEach(d[name]);
+	});
+
+	dojo.extend(dojo.NodeList, {
+		_normalize: function(/*String||Element||Object||NodeList*/content, /*DOMNode?*/refNode){
+			// summary:
+			// 		normalizes data to an array of items to insert.
+			// description:
+			// 		If content is an object, it can have special properties "template" and
+			// 		"parse". If "template" is defined, then the template value is run through
+			// 		dojo.string.substitute (if dojo.string.substitute has been dojo.required elsewhere),
+			// 		or if templateFunc is a function on the content, that function will be used to
+			// 		transform the template into a final string to be used for for passing to dojo._toDom.
+			// 		If content.parse is true, then it is remembered for later, for when the content
+			// 		nodes are inserted into the DOM. At that point, the nodes will be parsed for widgets
+			// 		(if dojo.parser has been dojo.required elsewhere).
+
+			//Wanted to just use a DocumentFragment, but for the array/NodeList
+			//case that meant  using cloneNode, but we may not want that.
+			//Cloning should only happen if the node operations span
+			//multiple refNodes. Also, need a real array, not a NodeList from the
+			//DOM since the node movements could change those NodeLists.
+
+			var parse = content.parse === true ? true : false;
+
+			//Do we have an object that needs to be run through a template?
+			if(typeof content.template == "string"){
+				var templateFunc = content.templateFunc || (dojo.string && dojo.string.substitute);
+				content = templateFunc ? templateFunc(content.template, content) : content;
+			}
+
+			var type = (typeof content);
+			if(type == "string" || type == "number"){
+				content = dojo._toDom(content, (refNode && refNode.ownerDocument));
+				if(content.nodeType == 11){
+					//DocumentFragment. It cannot handle cloneNode calls, so pull out the children.
+					content = dojo._toArray(content.childNodes);
+				}else{
+					content = [content];
+				}
+			}else if(!dojo.isArrayLike(content)){
+				content = [content];
+			}else if(!dojo.isArray(content)){
+				//To get to this point, content is array-like, but
+				//not an array, which likely means a DOM NodeList. Convert it now.
+				content = dojo._toArray(content);
+			}
+
+			//Pass around the parse info
+			if(parse){
+				content._runParse = true;
+			}
+			return content; //Array
+		},
+
+		_cloneNode: function(/*DOMNode*/ node){
+			// summary:
+			// 		private utiltity to clone a node. Not very interesting in the vanilla
+			// 		dojo.NodeList case, but delegates could do interesting things like
+			// 		clone event handlers if that is derivable from the node.
+			return node.cloneNode(true);
+		},
+
+		_place: function(/*Array*/ary, /*DOMNode*/refNode, /*String*/position, /*Boolean*/useClone){
+			// summary:
+			// 		private utility to handle placing an array of nodes relative to another node.
+			// description:
+			// 		Allows for cloning the nodes in the array, and for
+			// 		optionally parsing widgets, if ary._runParse is true.
+
+			//Avoid a disallowed operation if trying to do an innerHTML on a non-element node.
+			if(refNode.nodeType != 1 && position == "only"){
+				return;
+			}
+			var rNode = refNode, tempNode;
+
+			//Always cycle backwards in case the array is really a
+			//DOM NodeList and the DOM operations take it out of the live collection.
+			var length = ary.length;
+			for(var i = length - 1; i >= 0; i--){
+				var node = (useClone ? this._cloneNode(ary[i]) : ary[i]);
+
+				//If need widget parsing, use a temp node, instead of waiting after inserting into
+				//real DOM because we need to start widget parsing at one node up from current node,
+				//which could cause some already parsed widgets to be parsed again.
+				if(ary._runParse && dojo.parser && dojo.parser.parse){
+					if(!tempNode){
+						tempNode = rNode.ownerDocument.createElement("div");
+					}
+					tempNode.appendChild(node);
+					dojo.parser.parse(tempNode);
+					node = tempNode.firstChild;
+					while(tempNode.firstChild){
+						tempNode.removeChild(tempNode.firstChild);
+					}
+				}
+
+				if(i == length - 1){
+					dojo.place(node, rNode, position);
+				}else{
+					rNode.parentNode.insertBefore(node, rNode);
+				}
+				rNode = node;
+			}
+		},
+
+		_stash: function(parent){
+			// summary:
+			// 		private function to hold to a parent NodeList. end() to return the parent NodeList.
+			//
+			// example:
+			// How to make a `dojo.NodeList` method that only returns the third node in
+			// the dojo.NodeList but allows access to the original NodeList by using this._stash:
+			//	|	dojo.extend(dojo.NodeList, {
+			//	|		third: function(){
+			//  |			var newNodeList = dojo.NodeList(this[2]);
+			//	|			return newNodeList._stash(this);
+			//	|		}
+			//	|	});
+			//	|	// then see how _stash applies a sub-list, to be .end()'ed out of
+			//	|	dojo.query(".foo")
+			//	|		.third()
+			//	|			.addClass("thirdFoo")
+			//	|		.end()
+			//	|		// access to the orig .foo list
+			//	|		.removeClass("foo")
+			//	|
+			//
+			this._parent = parent;
+			return this; //dojo.NodeList
+		},
+
+		end: function(){
+			// summary:
+			// 		Ends use of the current `dojo.NodeList` by returning the previous dojo.NodeList
+			// 		that generated the current dojo.NodeList.
+			// description:
+			// 		Returns the `dojo.NodeList` that generated the current `dojo.NodeList`. If there
+			// 		is no parent dojo.NodeList, an empty dojo.NodeList is returned.
+			// example:
+			//	|	dojo.query("a")
+			//	|		.filter(".disabled")
+			//	|			// operate on the anchors that only have a disabled class
+			//	|			.style("color", "grey")
+			//	|		.end()
+			//	|		// jump back to the list of anchors
+			//	|		.style(...)
+			//
+			if(this._parent){
+				return this._parent;
+			}else{
+				//Just return empy list.
+				return new this._NodeListCtor();
+			}
+		},
+
+		// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods
+
+		// FIXME: handle return values for #3244
+		//		http://trac.dojotoolkit.org/ticket/3244
+
+		// FIXME:
+		//		need to wrap or implement:
+		//			join (perhaps w/ innerHTML/outerHTML overload for toString() of items?)
+		//			reduce
+		//			reduceRight
+
+		/*=====
+		slice: function(begin, end){
+			// summary:
+			//		Returns a new NodeList, maintaining this one in place
+			// description:
+			//		This method behaves exactly like the Array.slice method
+			//		with the caveat that it returns a dojo.NodeList and not a
+			//		raw Array. For more details, see Mozilla's (slice
+			//		documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:slice]
+			// begin: Integer
+			//		Can be a positive or negative integer, with positive
+			//		integers noting the offset to begin at, and negative
+			//		integers denoting an offset from the end (i.e., to the left
+			//		of the end)
+			// end: Integer?
+			//		Optional parameter to describe what position relative to
+			//		the NodeList's zero index to end the slice at. Like begin,
+			//		can be positive or negative.
+			return this._wrap(a.slice.apply(this, arguments));
+		},
+
+		splice: function(index, howmany, item){
+			// summary:
+			//		Returns a new NodeList, manipulating this NodeList based on
+			//		the arguments passed, potentially splicing in new elements
+			//		at an offset, optionally deleting elements
+			// description:
+			//		This method behaves exactly like the Array.splice method
+			//		with the caveat that it returns a dojo.NodeList and not a
+			//		raw Array. For more details, see Mozilla's (splice
+			//		documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:splice]
+			// 		For backwards compatibility, calling .end() on the spliced NodeList
+			// 		does not return the original NodeList -- splice alters the NodeList in place.
+			// index: Integer
+			//		begin can be a positive or negative integer, with positive
+			//		integers noting the offset to begin at, and negative
+			//		integers denoting an offset from the end (i.e., to the left
+			//		of the end)
+			// howmany: Integer?
+			//		Optional parameter to describe what position relative to
+			//		the NodeList's zero index to end the slice at. Like begin,
+			//		can be positive or negative.
+			// item: Object...?
+			//		Any number of optional parameters may be passed in to be
+			//		spliced into the NodeList
+			// returns:
+			//		dojo.NodeList
+			return this._wrap(a.splice.apply(this, arguments));
+		},
+
+		indexOf: function(value, fromIndex){
+			//	summary:
+			//		see dojo.indexOf(). The primary difference is that the acted-on 
+			//		array is implicitly this NodeList
+			// value: Object:
+			//		The value to search for.
+			// fromIndex: Integer?:
+			//		The loction to start searching from. Optional. Defaults to 0.
+			//	description:
+			//		For more details on the behavior of indexOf, see Mozilla's
+			//		(indexOf
+			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf]
+			//	returns:
+			//		Positive Integer or 0 for a match, -1 of not found.
+			return d.indexOf(this, value, fromIndex); // Integer
+		},
+
+		lastIndexOf: function(value, fromIndex){
+			// summary:
+			//		see dojo.lastIndexOf(). The primary difference is that the
+			//		acted-on array is implicitly this NodeList
+			//	description:
+			//		For more details on the behavior of lastIndexOf, see
+			//		Mozilla's (lastIndexOf
+			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf]
+			// value: Object
+			//		The value to search for.
+			// fromIndex: Integer?
+			//		The loction to start searching from. Optional. Defaults to 0.
+			// returns:
+			//		Positive Integer or 0 for a match, -1 of not found.
+			return d.lastIndexOf(this, value, fromIndex); // Integer
+		},
+
+		every: function(callback, thisObject){
+			//	summary:
+			//		see `dojo.every()` and the (Array.every
+			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every].
+			//		Takes the same structure of arguments and returns as
+			//		dojo.every() with the caveat that the passed array is
+			//		implicitly this NodeList
+			// callback: Function: the callback
+			// thisObject: Object?: the context
+			return d.every(this, callback, thisObject); // Boolean
+		},
+
+		some: function(callback, thisObject){
+			//	summary:
+			//		Takes the same structure of arguments and returns as
+			//		`dojo.some()` with the caveat that the passed array is
+			//		implicitly this NodeList.  See `dojo.some()` and Mozilla's
+			//		(Array.some
+			//		documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some].
+			// callback: Function: the callback
+			// thisObject: Object?: the context
+			return d.some(this, callback, thisObject); // Boolean
+		},
+		=====*/
+
+		concat: function(item){
+			// summary:
+			//		Returns a new NodeList comprised of items in this NodeList
+			//		as well as items passed in as parameters
+			// description:
+			//		This method behaves exactly like the Array.concat method
+			//		with the caveat that it returns a `dojo.NodeList` and not a
+			//		raw Array. For more details, see the (Array.concat
+			//		docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:concat]
+			// item: Object?
+			//		Any number of optional parameters may be passed in to be
+			//		spliced into the NodeList
+			// returns:
+			//		dojo.NodeList
+
+			//return this._wrap(apc.apply(this, arguments));
+			// the line above won't work for the native NodeList :-(
+
+			// implementation notes:
+			// 1) Native NodeList is not an array, and cannot be used directly
+			// in concat() --- the latter doesn't recognize it as an array, and
+			// does not inline it, but append as a single entity.
+			// 2) On some browsers (e.g., Safari) the "constructor" property is
+			// read-only and cannot be changed. So we have to test for both
+			// native NodeList and dojo.NodeList in this property to recognize
+			// the node list.
+
+			var t = d.isArray(this) ? this : aps.call(this, 0),
+				m = d.map(arguments, function(a){
+					return a && !d.isArray(a) &&
+						(typeof NodeList != "undefined" && a.constructor === NodeList || a.constructor === this._NodeListCtor) ?
+							aps.call(a, 0) : a;
+				});
+			return this._wrap(apc.apply(t, m), this);	// dojo.NodeList
+		},
+
+		map: function(/*Function*/ func, /*Function?*/ obj){
+			//	summary:
+			//		see dojo.map(). The primary difference is that the acted-on
+			//		array is implicitly this NodeList and the return is a
+			//		dojo.NodeList (a subclass of Array)
+			///return d.map(this, func, obj, d.NodeList); // dojo.NodeList
+			return this._wrap(d.map(this, func, obj), this); // dojo.NodeList
+		},
+
+		forEach: function(callback, thisObj){
+			//	summary:
+			//		see `dojo.forEach()`. The primary difference is that the acted-on 
+			//		array is implicitly this NodeList. If you want the option to break out
+			//		of the forEach loop, use every() or some() instead.
+			d.forEach(this, callback, thisObj);
+			// non-standard return to allow easier chaining
+			return this; // dojo.NodeList 
+		},
+
+		/*=====
+		coords: function(){
+			//	summary:
+			//		Returns the box objects of all elements in a node list as
+			//		an Array (*not* a NodeList). Acts like `dojo.coords`, though assumes
+			//		the node passed is each node in this list.
+
+			return d.map(this, d.coords); // Array
+		},
+
+		position: function(){
+			//	summary:
+			//		Returns border-box objects (x/y/w/h) of all elements in a node list
+			//		as an Array (*not* a NodeList). Acts like `dojo.position`, though
+			//		assumes the node passed is each node in this list. 
+
+			return d.map(this, d.position); // Array
+		},
+
+		attr: function(property, value){
+			//	summary:
+			//		gets or sets the DOM attribute for every element in the
+			//		NodeList. See also `dojo.attr`
+			//	property: String
+			//		the attribute to get/set
+			//	value: String?
+			//		optional. The value to set the property to
+			//	returns:
+			//		if no value is passed, the result is an array of attribute values
+			//		If a value is passed, the return is this NodeList
+			//	example:
+			//		Make all nodes with a particular class focusable:
+			//	|	dojo.query(".focusable").attr("tabIndex", -1);
+			//	example:
+			//		Disable a group of buttons:
+			//	|	dojo.query("button.group").attr("disabled", true);
+			//	example:
+			//		innerHTML can be assigned or retreived as well:
+			//	|	// get the innerHTML (as an array) for each list item
+			//	|	var ih = dojo.query("li.replaceable").attr("innerHTML");
+			return; // dojo.NodeList
+			return; // Array
+		},
+
+		style: function(property, value){
+			//	summary:
+			//		gets or sets the CSS property for every element in the NodeList
+			//	property: String
+			//		the CSS property to get/set, in JavaScript notation
+			//		("lineHieght" instead of "line-height")
+			//	value: String?
+			//		optional. The value to set the property to
+			//	returns:
+			//		if no value is passed, the result is an array of strings.
+			//		If a value is passed, the return is this NodeList
+			return; // dojo.NodeList
+			return; // Array
+		},
+
+		addClass: function(className){
+			//	summary:
+			//		adds the specified class to every node in the list
+			//	className: String|Array
+			//		A String class name to add, or several space-separated class names,
+			//		or an array of class names.
+			return; // dojo.NodeList
+		},
+
+		removeClass: function(className){
+			//	summary:
+			//		removes the specified class from every node in the list
+			//	className: String|Array?
+			//		An optional String class name to remove, or several space-separated
+			//		class names, or an array of class names. If omitted, all class names
+			//		will be deleted.
+			//	returns:
+			//		dojo.NodeList, this list
+			return; // dojo.NodeList
+		},
+
+		toggleClass: function(className, condition){
+			//	summary:
+			//		Adds a class to node if not present, or removes if present.
+			//		Pass a boolean condition if you want to explicitly add or remove.
+			//	condition: Boolean?
+			//		If passed, true means to add the class, false means to remove.
+			//	className: String
+			//		the CSS class to add
+			return; // dojo.NodeList
+		},
+
+		connect: function(methodName, objOrFunc, funcName){
+			//	summary:
+			//		attach event handlers to every item of the NodeList. Uses dojo.connect()
+			//		so event properties are normalized
+			//	methodName: String
+			//		the name of the method to attach to. For DOM events, this should be
+			//		the lower-case name of the event
+			//	objOrFunc: Object|Function|String
+			//		if 2 arguments are passed (methodName, objOrFunc), objOrFunc should
+			//		reference a function or be the name of the function in the global
+			//		namespace to attach. If 3 arguments are provided
+			//		(methodName, objOrFunc, funcName), objOrFunc must be the scope to 
+			//		locate the bound function in
+			//	funcName: String?
+			//		optional. A string naming the function in objOrFunc to bind to the
+			//		event. May also be a function reference.
+			//	example:
+			//		add an onclick handler to every button on the page
+			//		|	dojo.query("div:nth-child(odd)").connect("onclick", function(e){
+			//		|		console.log("clicked!");
+			//		|	});
+			// example:
+			//		attach foo.bar() to every odd div's onmouseover
+			//		|	dojo.query("div:nth-child(odd)").connect("onmouseover", foo, "bar");
+		},
+
+		empty: function(){
+			//	summary:
+			//		clears all content from each node in the list. Effectively
+			//		equivalent to removing all child nodes from every item in
+			//		the list.
+			return this.forEach("item.innerHTML='';"); // dojo.NodeList
+			// FIXME: should we be checking for and/or disposing of widgets below these nodes?
+		},
+		=====*/
+
+		// useful html methods
+		coords:	adaptAsMap(d.coords),
+		position: adaptAsMap(d.position),
+
+		// FIXME: connectPublisher()? connectRunOnce()?
+
+		/*
+		destroy: function(){
+			//	summary:
+			//		destroys every item in 	the list.
+			this.forEach(d.destroy);
+			// FIXME: should we be checking for and/or disposing of widgets below these nodes?
+		},
+		*/
+
+		place: function(/*String||Node*/ queryOrNode, /*String*/ position){
+			//	summary:
+			//		places elements of this node list relative to the first element matched
+			//		by queryOrNode. Returns the original NodeList. See: `dojo.place`
+			//	queryOrNode:
+			//		may be a string representing any valid CSS3 selector or a DOM node.
+			//		In the selector case, only the first matching element will be used 
+			//		for relative positioning.
+			//	position:
+			//		can be one of:
+			//		|	"last" (default)
+			//		|	"first"
+			//		|	"before"
+			//		|	"after"
+			//		|	"only"
+			//		|	"replace"
+			// 		or an offset in the childNodes property
+			var item = d.query(queryOrNode)[0];
+			return this.forEach(function(node){ d.place(node, item, position); }); // dojo.NodeList
+		},
+
+		orphan: function(/*String?*/ simpleFilter){
+			//	summary:
+			//		removes elements in this list that match the simple filter
+			//		from their parents and returns them as a new NodeList.
+			//	simpleFilter:
+			//		single-expression CSS rule. For example, ".thinger" or
+			//		"#someId[attrName='value']" but not "div > span". In short,
+			//		anything which does not invoke a descent to evaluate but
+			//		can instead be used to test a single node is acceptable.
+			//	returns:
+			//		`dojo.NodeList` containing the orpahned elements 
+			return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList
+		},
+
+		adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){
+			//	summary:
+			//		places any/all elements in queryOrListOrNode at a
+			//		position relative to the first element in this list.
+			//		Returns a dojo.NodeList of the adopted elements.
+			//	queryOrListOrNode:
+			//		a DOM node or a query string or a query result.
+			//		Represents the nodes to be adopted relative to the
+			//		first element of this NodeList.
+			//	position:
+			//		can be one of:
+			//		|	"last" (default)
+			//		|	"first"
+			//		|	"before"
+			//		|	"after"
+			//		|	"only"
+			//		|	"replace"
+			// 		or an offset in the childNodes property
+			return d.query(queryOrListOrNode).place(this[0], position)._stash(this);	// dojo.NodeList
+		},
+
+		// FIXME: do we need this?
+		query: function(/*String*/ queryStr){
+			//	summary:
+			//		Returns a new list whose memebers match the passed query,
+			//		assuming elements of the current NodeList as the root for
+			//		each search.
+			//	example:
+			//		assume a DOM created by this markup:
+			//	|	<div id="foo">
+			//	|		<p>
+			//	|			bacon is tasty, <span>dontcha think?</span>
+			//	|		</p>
+			//	|	</div>
+			//	|	<div id="bar">
+			//	|		<p>great commedians may not be funny <span>in person</span></p>
+			//	|	</div>
+			//		If we are presented with the following defintion for a NodeList:
+			//	|	var l = new dojo.NodeList(dojo.byId("foo"), dojo.byId("bar"));
+			//		it's possible to find all span elements under paragraphs
+			//		contained by these elements with this sub-query:
+			//	| 	var spans = l.query("p span");
+
+			// FIXME: probably slow
+			if(!queryStr){ return this; }
+			var ret = this.map(function(node){
+				// FIXME: why would we ever get undefined here?
+				return d.query(queryStr, node).filter(function(subNode){ return subNode !== undefined; });
+			});
+			return this._wrap(apc.apply([], ret), this);	// dojo.NodeList
+		},
+
+		filter: function(/*String|Function*/ simpleFilter){
+			//	summary:
+			// 		"masks" the built-in javascript filter() method (supported
+			// 		in Dojo via `dojo.filter`) to support passing a simple
+			// 		string filter in addition to supporting filtering function
+			// 		objects.
+			//	simpleFilter:
+			//		If a string, a single-expression CSS rule. For example,
+			//		".thinger" or "#someId[attrName='value']" but not "div >
+			//		span". In short, anything which does not invoke a descent
+			//		to evaluate but can instead be used to test a single node
+			//		is acceptable.
+			//	example:
+			//		"regular" JS filter syntax as exposed in dojo.filter:
+			//		|	dojo.query("*").filter(function(item){
+			//		|		// highlight every paragraph
+			//		|		return (item.nodeName == "p");
+			//		|	}).style("backgroundColor", "yellow");
+			// example:
+			//		the same filtering using a CSS selector
+			//		|	dojo.query("*").filter("p").styles("backgroundColor", "yellow");
+
+			var a = arguments, items = this, start = 0;
+			if(typeof simpleFilter == "string"){ // inline'd type check
+				items = d._filterQueryResult(this, a[0]);
+				if(a.length == 1){
+					// if we only got a string query, pass back the filtered results
+					return items._stash(this); // dojo.NodeList
+				}
+				// if we got a callback, run it over the filtered items
+				start = 1;
+			}
+			return this._wrap(d.filter(items, a[start], a[start + 1]), this);	// dojo.NodeList
+		},
+
+		/*
+		// FIXME: should this be "copyTo" and include parenting info?
+		clone: function(){
+			// summary:
+			//		creates node clones of each element of this list
+			//		and returns a new list containing the clones
+		},
+		*/
+
+		addContent: function(/*String||DomNode||Object||dojo.NodeList*/ content, /*String||Integer?*/ position){
+			//	summary:
+			//		add a node, NodeList or some HTML as a string to every item in the
+			//		list.  Returns the original list.
+			//	description:
+			//		a copy of the HTML content is added to each item in the
+			//		list, with an optional position argument. If no position
+			//		argument is provided, the content is appended to the end of
+			//		each item.
+			//	content:
+			//		DOM node, HTML in string format, a NodeList or an Object. If a DOM node or
+			// 		NodeList, the content will be cloned if the current NodeList has more than one
+			// 		element. Only the DOM nodes are cloned, no event handlers. If it is an Object,
+			// 		it should be an object with at "template" String property that has the HTML string
+			// 		to insert. If dojo.string has already been dojo.required, then dojo.string.substitute
+			// 		will be used on the "template" to generate the final HTML string. Other allowed
+			// 		properties on the object are: "parse" if the HTML
+			// 		string should be parsed for widgets (dojo.require("dojo.parser") to get that
+			// 		option to work), and "templateFunc" if a template function besides dojo.string.substitute
+			// 		should be used to transform the "template".
+			//	position:
+			//		can be one of:
+			//		|	"last"||"end" (default)
+			//		|	"first||"start"
+			//		|	"before"
+			//		|	"after"
+			//		|	"replace" (replaces nodes in this NodeList with new content)
+			//		|	"only" (removes other children of the nodes so new content is hte only child)
+			// 		or an offset in the childNodes property
+			//	example:
+			//		appends content to the end if the position is ommitted
+			//	|	dojo.query("h3 > p").addContent("hey there!");
+			//	example:
+			//		add something to the front of each element that has a
+			//		"thinger" property:
+			//	|	dojo.query("[thinger]").addContent("...", "first");
+			//	example:
+			//		adds a header before each element of the list
+			//	|	dojo.query(".note").addContent("<h4>NOTE:</h4>", "before");
+			//	example:
+			//		add a clone of a DOM node to the end of every element in
+			//		the list, removing it from its existing parent.
+			//	|	dojo.query(".note").addContent(dojo.byId("foo"));
+			//  example:
+			//  	Append nodes from a templatized string.
+			// 		dojo.require("dojo.string");
+			// 		dojo.query(".note").addContent({
+			//  		template: '<b>${id}: </b><span>${name}</span>',
+			// 			id: "user332",
+			//  		name: "Mr. Anderson"
+			//  	});
+			//  example:
+			//  	Append nodes from a templatized string that also has widgets parsed.
+			//  	dojo.require("dojo.string");
+			//  	dojo.require("dojo.parser");
+			//  	var notes = dojo.query(".note").addContent({
+			//  		template: '<button dojoType="dijit.form.Button">${text}</button>',
+			//  		parse: true,
+			//  		text: "Send"
+			//  	});
+			content = this._normalize(content, this[0]);
+			for(var i = 0, node; node = this[i]; i++){
+				this._place(content, node, position, i > 0);
+			}
+			return this; //dojo.NodeList
+		},
+
+		instantiate: function(/*String|Object*/ declaredClass, /*Object?*/ properties){
+			//	summary:
+			//		Create a new instance of a specified class, using the
+			//		specified properties and each node in the nodeList as a
+			//		srcNodeRef.
+			//	example:
+			//		Grabs all buttons in the page and converts them to diji.form.Buttons.
+			//	|	var buttons = dojo.query("button").instantiate("dijit.form.Button", {showLabel: true});
+			var c = d.isFunction(declaredClass) ? declaredClass : d.getObject(declaredClass);
+			properties = properties || {};
+			return this.forEach(function(node){
+				new c(properties, node);
+			});	// dojo.NodeList
+		},
+
+		at: function(/*===== index =====*/){
+			//	summary:
+			//		Returns a new NodeList comprised of items in this NodeList
+			//		at the given index or indices.
+			//
+			//	index: Integer...
+			//		One or more 0-based indices of items in the current
+			//		NodeList. A negative index will start at the end of the
+			//		list and go backwards. 
+			//
+			//	example:
+			//	Shorten the list to the first, second, and third elements
+			//	|	dojo.query("a").at(0, 1, 2).forEach(fn); 
+			//
+			//	example:
+			//	Retrieve the first and last elements of a unordered list:
+			//	|	dojo.query("ul > li").at(0, -1).forEach(cb);
+			//
+			//	example:
+			//	Do something for the first element only, but end() out back to
+			//	the original list and continue chaining:
+			//	|	dojo.query("a").at(0).onclick(fn).end().forEach(function(n){
+			//	|		console.log(n); // all anchors on the page. 
+			//	|	})	
+			//
+			//	returns:
+			//		dojo.NodeList
+			var t = new this._NodeListCtor();
+			d.forEach(arguments, function(i){ 
+				if(i < 0){ i = this.length + i }
+				if(this[i]){ t.push(this[i]); }
+			}, this);
+			return t._stash(this); // dojo.NodeList
+		}
+
+	});
+
+	nl.events = [
+		// summary: list of all DOM events used in NodeList
+		"blur", "focus", "change", "click", "error", "keydown", "keypress",
+		"keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove",
+		"mouseout", "mouseover", "mouseup", "submit"
+	];
+	
+	// FIXME: pseudo-doc the above automatically generated on-event functions
+
+	// syntactic sugar for DOM events
+	d.forEach(nl.events, function(evt){
+			var _oe = "on" + evt;
+			nlp[_oe] = function(a, b){
+				return this.connect(_oe, a, b);
+			}
+				// FIXME: should these events trigger publishes?
+				/*
+				return (a ? this.connect(_oe, a, b) :
+							this.forEach(function(n){
+								// FIXME:
+								//		listeners get buried by
+								//		addEventListener and can't be dug back
+								//		out to be triggered externally.
+								// see:
+								//		http://developer.mozilla.org/en/docs/DOM:element
+
+								console.log(n, evt, _oe);
+
+								// FIXME: need synthetic event support!
+								var _e = { target: n, faux: true, type: evt };
+								// dojo._event_listener._synthesizeEvent({}, { target: n, faux: true, type: evt });
+								try{ n[evt](_e); }catch(e){ console.log(e); }
+								try{ n[_oe](_e); }catch(e){ console.log(e); }
+							})
+				);
+				*/
+		}
+	);
+
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.query"] = true;
+if(typeof dojo != "undefined"){
+	dojo.provide("dojo._base.query");
+	
+	
+
+}
+
+/*
+	dojo.query() architectural overview:
+
+		dojo.query is a relatively full-featured CSS3 query library. It is
+		designed to take any valid CSS3 selector and return the nodes matching
+		the selector. To do this quickly, it processes queries in several
+		steps, applying caching where profitable.
+		
+		The steps (roughly in reverse order of the way they appear in the code):
+			1.) check to see if we already have a "query dispatcher"
+				- if so, use that with the given parameterization. Skip to step 4.
+			2.) attempt to determine which branch to dispatch the query to:
+				- JS (optimized DOM iteration)
+				- native (FF3.1+, Safari 3.1+, IE 8+)
+			3.) tokenize and convert to executable "query dispatcher"
+				- this is where the lion's share of the complexity in the
+				  system lies. In the DOM version, the query dispatcher is
+				  assembled as a chain of "yes/no" test functions pertaining to
+				  a section of a simple query statement (".blah:nth-child(odd)"
+				  but not "div div", which is 2 simple statements). Individual
+				  statement dispatchers are cached (to prevent re-definition)
+				  as are entire dispatch chains (to make re-execution of the
+				  same query fast)
+			4.) the resulting query dispatcher is called in the passed scope
+			    (by default the top-level document)
+				- for DOM queries, this results in a recursive, top-down
+				  evaluation of nodes based on each simple query section
+				- for native implementations, this may mean working around spec
+				  bugs. So be it.
+			5.) matched nodes are pruned to ensure they are unique (if necessary)
+*/
+
+;(function(d){
+	// define everything in a closure for compressability reasons. "d" is an
+	// alias to "dojo" (or the toolkit alias object, e.g., "acme").
+
+	////////////////////////////////////////////////////////////////////////
+	// Toolkit aliases
+	////////////////////////////////////////////////////////////////////////
+
+	// if you are extracing dojo.query for use in your own system, you will
+	// need to provide these methods and properties. No other porting should be
+	// necessary, save for configuring the system to use a class other than
+	// dojo.NodeList as the return instance instantiator
+	var trim = 			d.trim;
+	var each = 			d.forEach;
+	// 					d.isIE; // float
+	// 					d.isSafari; // float
+	// 					d.isOpera; // float
+	// 					d.isWebKit; // float
+	// 					d.doc ; // document element
+	var qlc = d._NodeListCtor = 		d.NodeList;
+
+	var getDoc = function(){ return d.doc; };
+	// NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo
+	var cssCaseBug = ((d.isWebKit||d.isMozilla) && ((getDoc().compatMode) == "BackCompat"));
+
+	////////////////////////////////////////////////////////////////////////
+	// Global utilities
+	////////////////////////////////////////////////////////////////////////
+
+
+	// on browsers that support the "children" collection we can avoid a lot of
+	// iteration on chaff (non-element) nodes.
+	// why.
+	var childNodesName = !!getDoc().firstChild["children"] ? "children" : "childNodes";
+
+	var specials = ">~+";
+
+	// global thunk to determine whether we should treat the current query as
+	// case sensitive or not. This switch is flipped by the query evaluator
+	// based on the document passed as the context to search.
+	var caseSensitive = false;
+
+	// how high?
+	var yesman = function(){ return true; };
+
+	////////////////////////////////////////////////////////////////////////
+	// Tokenizer
+	////////////////////////////////////////////////////////////////////////
+
+	var getQueryParts = function(query){
+		//	summary: 
+		//		state machine for query tokenization
+		//	description:
+		//		instead of using a brittle and slow regex-based CSS parser,
+		//		dojo.query implements an AST-style query representation. This
+		//		representation is only generated once per query. For example,
+		//		the same query run multiple times or under different root nodes
+		//		does not re-parse the selector expression but instead uses the
+		//		cached data structure. The state machine implemented here
+		//		terminates on the last " " (space) charachter and returns an
+		//		ordered array of query component structures (or "parts"). Each
+		//		part represents an operator or a simple CSS filtering
+		//		expression. The structure for parts is documented in the code
+		//		below.
+
+
+		// NOTE: 
+		//		this code is designed to run fast and compress well. Sacrifices
+		//		to readibility and maintainability have been made.  Your best
+		//		bet when hacking the tokenizer is to put The Donnas on *really*
+		//		loud (may we recommend their "Spend The Night" release?) and
+		//		just assume you're gonna make mistakes. Keep the unit tests
+		//		open and run them frequently. Knowing is half the battle ;-)
+		if(specials.indexOf(query.slice(-1)) >= 0){
+			// if we end with a ">", "+", or "~", that means we're implicitly
+			// searching all children, so make it explicit
+			query += " * "
+		}else{
+			// if you have not provided a terminator, one will be provided for
+			// you...
+			query += " ";
+		}
+
+		var ts = function(/*Integer*/ s, /*Integer*/ e){
+			// trim and slice. 
+
+			// take an index to start a string slice from and an end position
+			// and return a trimmed copy of that sub-string
+			return trim(query.slice(s, e));
+		}
+
+		// the overall data graph of the full query, as represented by queryPart objects
+		var queryParts = []; 
+
+
+		// state keeping vars
+		var inBrackets = -1, inParens = -1, inMatchFor = -1, 
+			inPseudo = -1, inClass = -1, inId = -1, inTag = -1, 
+			lc = "", cc = "", pStart;
+
+		// iteration vars
+		var x = 0, // index in the query
+			ql = query.length,
+			currentPart = null, // data structure representing the entire clause
+			_cp = null; // the current pseudo or attr matcher
+
+		// several temporary variables are assigned to this structure durring a
+		// potential sub-expression match:
+		//		attr:
+		//			a string representing the current full attribute match in a
+		//			bracket expression
+		//		type:
+		//			if there's an operator in a bracket expression, this is
+		//			used to keep track of it
+		//		value:
+		//			the internals of parenthetical expression for a pseudo. for
+		//			:nth-child(2n+1), value might be "2n+1"
+
+		var endTag = function(){
+			// called when the tokenizer hits the end of a particular tag name.
+			// Re-sets state variables for tag matching and sets up the matcher
+			// to handle the next type of token (tag or operator).
+			if(inTag >= 0){
+				var tv = (inTag == x) ? null : ts(inTag, x); // .toLowerCase();
+				currentPart[ (specials.indexOf(tv) < 0) ? "tag" : "oper" ] = tv;
+				inTag = -1;
+			}
+		}
+
+		var endId = function(){
+			// called when the tokenizer might be at the end of an ID portion of a match
+			if(inId >= 0){
+				currentPart.id = ts(inId, x).replace(/\\/g, "");
+				inId = -1;
+			}
+		}
+
+		var endClass = function(){
+			// called when the tokenizer might be at the end of a class name
+			// match. CSS allows for multiple classes, so we augment the
+			// current item with another class in its list
+			if(inClass >= 0){
+				currentPart.classes.push(ts(inClass+1, x).replace(/\\/g, ""));
+				inClass = -1;
+			}
+		}
+
+		var endAll = function(){
+			// at the end of a simple fragment, so wall off the matches
+			endId(); endTag(); endClass();
+		}
+
+		var endPart = function(){
+			endAll();
+			if(inPseudo >= 0){
+				currentPart.pseudos.push({ name: ts(inPseudo+1, x) });
+			}
+			// hint to the selector engine to tell it whether or not it
+			// needs to do any iteration. Many simple selectors don't, and
+			// we can avoid significant construction-time work by advising
+			// the system to skip them
+			currentPart.loops = (	
+					currentPart.pseudos.length || 
+					currentPart.attrs.length || 
+					currentPart.classes.length	);
+
+			currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string
+
+
+			// otag/tag are hints to suggest to the system whether or not
+			// it's an operator or a tag. We save a copy of otag since the
+			// tag name is cast to upper-case in regular HTML matches. The
+			// system has a global switch to figure out if the current
+			// expression needs to be case sensitive or not and it will use
+			// otag or tag accordingly
+			currentPart.otag = currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*");
+
+			if(currentPart.tag){
+				// if we're in a case-insensitive HTML doc, we likely want
+				// the toUpperCase when matching on element.tagName. If we
+				// do it here, we can skip the string op per node
+				// comparison
+				currentPart.tag = currentPart.tag.toUpperCase();
+			}
+
+			// add the part to the list
+			if(queryParts.length && (queryParts[queryParts.length-1].oper)){
+				// operators are always infix, so we remove them from the
+				// list and attach them to the next match. The evaluator is
+				// responsible for sorting out how to handle them.
+				currentPart.infixOper = queryParts.pop();
+				currentPart.query = currentPart.infixOper.query + " " + currentPart.query;
+				/*
+				console.debug(	"swapping out the infix", 
+								currentPart.infixOper, 
+								"and attaching it to", 
+								currentPart);
+				*/
+			}
+			queryParts.push(currentPart);
+
+			currentPart = null;
+		}
+
+		// iterate over the query, charachter by charachter, building up a 
+		// list of query part objects
+		for(; lc=cc, cc=query.charAt(x), x < ql; x++){
+			//		cc: the current character in the match
+			//		lc: the last charachter (if any)
+
+			// someone is trying to escape something, so don't try to match any
+			// fragments. We assume we're inside a literal.
+			if(lc == "\\"){ continue; } 
+			if(!currentPart){ // a part was just ended or none has yet been created
+				// NOTE: I hate all this alloc, but it's shorter than writing tons of if's
+				pStart = x;
+				//	rules describe full CSS sub-expressions, like:
+				//		#someId
+				//		.className:first-child
+				//	but not:
+				//		thinger > div.howdy[type=thinger]
+				//	the indidual components of the previous query would be
+				//	split into 3 parts that would be represented a structure
+				//	like:
+				//		[
+				//			{
+				//				query: "thinger",
+				//				tag: "thinger",
+				//			},
+				//			{
+				//				query: "div.howdy[type=thinger]",
+				//				classes: ["howdy"],
+				//				infixOper: {
+				//					query: ">",
+				//					oper: ">",
+				//				}
+				//			},
+				//		]
+				currentPart = {
+					query: null, // the full text of the part's rule
+					pseudos: [], // CSS supports multiple pseud-class matches in a single rule
+					attrs: [], 	// CSS supports multi-attribute match, so we need an array
+					classes: [], // class matches may be additive, e.g.: .thinger.blah.howdy
+					tag: null, 	// only one tag...
+					oper: null, // ...or operator per component. Note that these wind up being exclusive.
+					id: null, 	// the id component of a rule
+					getTag: function(){
+						return (caseSensitive) ? this.otag : this.tag;
+					}
+				};
+
+				// if we don't have a part, we assume we're going to start at
+				// the beginning of a match, which should be a tag name. This
+				// might fault a little later on, but we detect that and this
+				// iteration will still be fine.
+				inTag = x; 
+			}
+
+			if(inBrackets >= 0){
+				// look for a the close first
+				if(cc == "]"){ // if we're in a [...] clause and we end, do assignment
+					if(!_cp.attr){
+						// no attribute match was previously begun, so we
+						// assume this is an attribute existance match in the
+						// form of [someAttributeName]
+						_cp.attr = ts(inBrackets+1, x);
+					}else{
+						// we had an attribute already, so we know that we're
+						// matching some sort of value, as in [attrName=howdy]
+						_cp.matchFor = ts((inMatchFor||inBrackets+1), x);
+					}
+					var cmf = _cp.matchFor;
+					if(cmf){
+						// try to strip quotes from the matchFor value. We want
+						// [attrName=howdy] to match the same 
+						//	as [attrName = 'howdy' ]
+						if(	(cmf.charAt(0) == '"') || (cmf.charAt(0)  == "'") ){
+							_cp.matchFor = cmf.slice(1, -1);
+						}
+					}
+					// end the attribute by adding it to the list of attributes. 
+					currentPart.attrs.push(_cp);
+					_cp = null; // necessary?
+					inBrackets = inMatchFor = -1;
+				}else if(cc == "="){
+					// if the last char was an operator prefix, make sure we
+					// record it along with the "=" operator. 
+					var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : "";
+					_cp.type = addToCc+cc;
+					_cp.attr = ts(inBrackets+1, x-addToCc.length);
+					inMatchFor = x+1;
+				}
+				// now look for other clause parts
+			}else if(inParens >= 0){
+				// if we're in a parenthetical expression, we need to figure
+				// out if it's attached to a pseduo-selector rule like
+				// :nth-child(1)
+				if(cc == ")"){
+					if(inPseudo >= 0){
+						_cp.value = ts(inParens+1, x);
+					}
+					inPseudo = inParens = -1;
+				}
+			}else if(cc == "#"){
+				// start of an ID match
+				endAll();
+				inId = x+1;
+			}else if(cc == "."){
+				// start of a class match
+				endAll();
+				inClass = x;
+			}else if(cc == ":"){
+				// start of a pseudo-selector match
+				endAll();
+				inPseudo = x;
+			}else if(cc == "["){
+				// start of an attribute match. 
+				endAll();
+				inBrackets = x;
+				// provide a new structure for the attribute match to fill-in
+				_cp = {
+					/*=====
+					attr: null, type: null, matchFor: null
+					=====*/
+				};
+			}else if(cc == "("){
+				// we really only care if we've entered a parenthetical
+				// expression if we're already inside a pseudo-selector match
+				if(inPseudo >= 0){
+					// provide a new structure for the pseudo match to fill-in
+					_cp = { 
+						name: ts(inPseudo+1, x), 
+						value: null
+					}
+					currentPart.pseudos.push(_cp);
+				}
+				inParens = x;
+			}else if(
+				(cc == " ") && 
+				// if it's a space char and the last char is too, consume the
+				// current one without doing more work
+				(lc != cc)
+			){
+				endPart();
+			}
+		}
+		return queryParts;
+	};
+	
+
+	////////////////////////////////////////////////////////////////////////
+	// DOM query infrastructure
+	////////////////////////////////////////////////////////////////////////
+
+	var agree = function(first, second){
+		// the basic building block of the yes/no chaining system. agree(f1,
+		// f2) generates a new function which returns the boolean results of
+		// both of the passed functions to a single logical-anded result. If
+		// either are not possed, the other is used exclusively.
+		if(!first){ return second; }
+		if(!second){ return first; }
+
+		return function(){
+			return first.apply(window, arguments) && second.apply(window, arguments);
+		}
+	};
+
+	var getArr = function(i, arr){
+		// helps us avoid array alloc when we don't need it
+		var r = arr||[]; // FIXME: should this be 'new d._NodeListCtor()' ?
+		if(i){ r.push(i); }
+		return r;
+	};
+
+	var _isElement = function(n){ return (1 == n.nodeType); };
+
+	// FIXME: need to coalesce _getAttr with defaultGetter
+	var blank = "";
+	var _getAttr = function(elem, attr){
+		if(!elem){ return blank; }
+		if(attr == "class"){
+			return elem.className || blank;
+		}
+		if(attr == "for"){
+			return elem.htmlFor || blank;
+		}
+		if(attr == "style"){
+			return elem.style.cssText || blank;
+		}
+		return (caseSensitive ? elem.getAttribute(attr) : elem.getAttribute(attr, 2)) || blank;
+	};
+
+	var attrs = {
+		"*=": function(attr, value){
+			return function(elem){
+				// E[foo*="bar"]
+				//		an E element whose "foo" attribute value contains
+				//		the substring "bar"
+				return (_getAttr(elem, attr).indexOf(value)>=0);
+			}
+		},
+		"^=": function(attr, value){
+			// E[foo^="bar"]
+			//		an E element whose "foo" attribute value begins exactly
+			//		with the string "bar"
+			return function(elem){
+				return (_getAttr(elem, attr).indexOf(value)==0);
+			}
+		},
+		"$=": function(attr, value){
+			// E[foo$="bar"]	
+			//		an E element whose "foo" attribute value ends exactly
+			//		with the string "bar"
+			var tval = " "+value;
+			return function(elem){
+				var ea = " "+_getAttr(elem, attr);
+				return (ea.lastIndexOf(value)==(ea.length-value.length));
+			}
+		},
+		"~=": function(attr, value){
+			// E[foo~="bar"]	
+			//		an E element whose "foo" attribute value is a list of
+			//		space-separated values, one of which is exactly equal
+			//		to "bar"
+
+			// return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]";
+			var tval = " "+value+" ";
+			return function(elem){
+				var ea = " "+_getAttr(elem, attr)+" ";
+				return (ea.indexOf(tval)>=0);
+			}
+		},
+		"|=": function(attr, value){
+			// E[hreflang|="en"]
+			//		an E element whose "hreflang" attribute has a
+			//		hyphen-separated list of values beginning (from the
+			//		left) with "en"
+			var valueDash = " "+value+"-";
+			return function(elem){
+				var ea = " "+_getAttr(elem, attr);
+				return (
+					(ea == value) ||
+					(ea.indexOf(valueDash)==0)
+				);
+			}
+		},
+		"=": function(attr, value){
+			return function(elem){
+				return (_getAttr(elem, attr) == value);
+			}
+		}
+	};
+
+	// avoid testing for node type if we can. Defining this in the negative
+	// here to avoid negation in the fast path.
+	var _noNES = (typeof getDoc().firstChild.nextElementSibling == "undefined");
+	var _ns = !_noNES ? "nextElementSibling" : "nextSibling";
+	var _ps = !_noNES ? "previousElementSibling" : "previousSibling";
+	var _simpleNodeTest = (_noNES ? _isElement : yesman);
+
+	var _lookLeft = function(node){
+		// look left
+		while(node = node[_ps]){
+			if(_simpleNodeTest(node)){ return false; }
+		}
+		return true;
+	};
+
+	var _lookRight = function(node){
+		// look right
+		while(node = node[_ns]){
+			if(_simpleNodeTest(node)){ return false; }
+		}
+		return true;
+	};
+
+	var getNodeIndex = function(node){
+		var root = node.parentNode;
+		var i = 0,
+			tret = root[childNodesName],
+			ci = (node["_i"]||-1),
+			cl = (root["_l"]||-1);
+
+		if(!tret){ return -1; }
+		var l = tret.length;
+
+		// we calcuate the parent length as a cheap way to invalidate the
+		// cache. It's not 100% accurate, but it's much more honest than what
+		// other libraries do
+		if( cl == l && ci >= 0 && cl >= 0 ){
+			// if it's legit, tag and release
+			return ci;
+		}
+
+		// else re-key things
+		root["_l"] = l;
+		ci = -1;
+		for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){
+			if(_simpleNodeTest(te)){ 
+				te["_i"] = ++i;
+				if(node === te){ 
+					// NOTE:
+					// 	shortcuting the return at this step in indexing works
+					// 	very well for benchmarking but we avoid it here since
+					// 	it leads to potential O(n^2) behavior in sequential
+					// 	getNodexIndex operations on a previously un-indexed
+					// 	parent. We may revisit this at a later time, but for
+					// 	now we just want to get the right answer more often
+					// 	than not.
+					ci = i;
+				}
+			}
+		}
+		return ci;
+	};
+
+	var isEven = function(elem){
+		return !((getNodeIndex(elem)) % 2);
+	};
+
+	var isOdd = function(elem){
+		return ((getNodeIndex(elem)) % 2);
+	};
+
+	var pseudos = {
+		"checked": function(name, condition){
+			return function(elem){
+				return !!("checked" in elem ? elem.checked : elem.selected);
+			}
+		},
+		"first-child": function(){ return _lookLeft; },
+		"last-child": function(){ return _lookRight; },
+		"only-child": function(name, condition){
+			return function(node){ 
+				if(!_lookLeft(node)){ return false; }
+				if(!_lookRight(node)){ return false; }
+				return true;
+			};
+		},
+		"empty": function(name, condition){
+			return function(elem){
+				// DomQuery and jQuery get this wrong, oddly enough.
+				// The CSS 3 selectors spec is pretty explicit about it, too.
+				var cn = elem.childNodes;
+				var cnl = elem.childNodes.length;
+				// if(!cnl){ return true; }
+				for(var x=cnl-1; x >= 0; x--){
+					var nt = cn[x].nodeType;
+					if((nt === 1)||(nt == 3)){ return false; }
+				}
+				return true;
+			}
+		},
+		"contains": function(name, condition){
+			var cz = condition.charAt(0);
+			if( cz == '"' || cz == "'" ){ //remove quote
+				condition = condition.slice(1, -1);
+			}
+			return function(elem){
+				return (elem.innerHTML.indexOf(condition) >= 0);
+			}
+		},
+		"not": function(name, condition){
+			var p = getQueryParts(condition)[0];
+			var ignores = { el: 1 }; 
+			if(p.tag != "*"){
+				ignores.tag = 1;
+			}
+			if(!p.classes.length){
+				ignores.classes = 1;
+			}
+			var ntf = getSimpleFilterFunc(p, ignores);
+			return function(elem){
+				return (!ntf(elem));
+			}
+		},
+		"nth-child": function(name, condition){
+			var pi = parseInt;
+			// avoid re-defining function objects if we can
+			if(condition == "odd"){
+				return isOdd;
+			}else if(condition == "even"){
+				return isEven;
+			}
+			// FIXME: can we shorten this?
+			if(condition.indexOf("n") != -1){
+				var tparts = condition.split("n", 2);
+				var pred = tparts[0] ? ((tparts[0] == '-') ? -1 : pi(tparts[0])) : 1;
+				var idx = tparts[1] ? pi(tparts[1]) : 0;
+				var lb = 0, ub = -1;
+				if(pred > 0){
+					if(idx < 0){
+						idx = (idx % pred) && (pred + (idx % pred));
+					}else if(idx>0){
+						if(idx >= pred){
+							lb = idx - idx % pred;
+						}
+						idx = idx % pred;
+					}
+				}else if(pred<0){
+					pred *= -1;
+					// idx has to be greater than 0 when pred is negative;
+					// shall we throw an error here?
+					if(idx > 0){
+						ub = idx;
+						idx = idx % pred;
+					}
+				}
+				if(pred > 0){
+					return function(elem){
+						var i = getNodeIndex(elem);
+						return (i>=lb) && (ub<0 || i<=ub) && ((i % pred) == idx);
+					}
+				}else{
+					condition = idx;
+				}
+			}
+			var ncount = pi(condition);
+			return function(elem){
+				return (getNodeIndex(elem) == ncount);
+			}
+		}
+	};
+
+	var defaultGetter = (d.isIE) ? function(cond){
+		var clc = cond.toLowerCase();
+		if(clc == "class"){ cond = "className"; }
+		return function(elem){
+			return (caseSensitive ? elem.getAttribute(cond) : elem[cond]||elem[clc]);
+		}
+	} : function(cond){
+		return function(elem){
+			return (elem && elem.getAttribute && elem.hasAttribute(cond));
+		}
+	};
+
+	var getSimpleFilterFunc = function(query, ignores){
+		// generates a node tester function based on the passed query part. The
+		// query part is one of the structures generatd by the query parser
+		// when it creates the query AST. The "ignores" object specifies which
+		// (if any) tests to skip, allowing the system to avoid duplicating
+		// work where it may have already been taken into account by other
+		// factors such as how the nodes to test were fetched in the first
+		// place
+		if(!query){ return yesman; }
+		ignores = ignores||{};
+
+		var ff = null;
+
+		if(!("el" in ignores)){
+			ff = agree(ff, _isElement);
+		}
+
+		if(!("tag" in ignores)){
+			if(query.tag != "*"){
+				ff = agree(ff, function(elem){
+					return (elem && (elem.tagName == query.getTag()));
+				});
+			}
+		}
+
+		if(!("classes" in ignores)){
+			each(query.classes, function(cname, idx, arr){
+				// get the class name
+				/*
+				var isWildcard = cname.charAt(cname.length-1) == "*";
+				if(isWildcard){
+					cname = cname.substr(0, cname.length-1);
+				}
+				// I dislike the regex thing, even if memozied in a cache, but it's VERY short
+				var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)");
+				*/
+				var re = new RegExp("(?:^|\\s)" + cname + "(?:\\s|$)");
+				ff = agree(ff, function(elem){
+					return re.test(elem.className);
+				});
+				ff.count = idx;
+			});
+		}
+
+		if(!("pseudos" in ignores)){
+			each(query.pseudos, function(pseudo){
+				var pn = pseudo.name;
+				if(pseudos[pn]){
+					ff = agree(ff, pseudos[pn](pn, pseudo.value));
+				}
+			});
+		}
+
+		if(!("attrs" in ignores)){
+			each(query.attrs, function(attr){
+				var matcher;
+				var a = attr.attr;
+				// type, attr, matchFor
+				if(attr.type && attrs[attr.type]){
+					matcher = attrs[attr.type](a, attr.matchFor);
+				}else if(a.length){
+					matcher = defaultGetter(a);
+				}
+				if(matcher){
+					ff = agree(ff, matcher);
+				}
+			});
+		}
+
+		if(!("id" in ignores)){
+			if(query.id){
+				ff = agree(ff, function(elem){ 
+					return (!!elem && (elem.id == query.id));
+				});
+			}
+		}
+
+		if(!ff){
+			if(!("default" in ignores)){
+				ff = yesman; 
+			}
+		}
+		return ff;
+	};
+
+	var _nextSibling = function(filterFunc){
+		return function(node, ret, bag){
+			while(node = node[_ns]){
+				if(_noNES && (!_isElement(node))){ continue; }
+				if(
+					(!bag || _isUnique(node, bag)) &&
+					filterFunc(node)
+				){
+					ret.push(node);
+				}
+				break;
+			}
+			return ret;
+		}
+	};
+
+	var _nextSiblings = function(filterFunc){
+		return function(root, ret, bag){
+			var te = root[_ns];
+			while(te){
+				if(_simpleNodeTest(te)){
+					if(bag && !_isUnique(te, bag)){
+						break;
+					}
+					if(filterFunc(te)){
+						ret.push(te);
+					}
+				}
+				te = te[_ns];
+			}
+			return ret;
+		}
+	};
+
+	// get an array of child *elements*, skipping text and comment nodes
+	var _childElements = function(filterFunc){
+		filterFunc = filterFunc||yesman;
+		return function(root, ret, bag){
+			// get an array of child elements, skipping text and comment nodes
+			var te, x = 0, tret = root[childNodesName];
+			while(te = tret[x++]){
+				if(
+					_simpleNodeTest(te) &&
+					(!bag || _isUnique(te, bag)) &&
+					(filterFunc(te, x))
+				){ 
+					ret.push(te);
+				}
+			}
+			return ret;
+		};
+	};
+	
+	/*
+	// thanks, Dean!
+	var itemIsAfterRoot = d.isIE ? function(item, root){
+		return (item.sourceIndex > root.sourceIndex);
+	} : function(item, root){
+		return (item.compareDocumentPosition(root) == 2);
+	};
+	*/
+
+	// test to see if node is below root
+	var _isDescendant = function(node, root){
+		var pn = node.parentNode;
+		while(pn){
+			if(pn == root){
+				break;
+			}
+			pn = pn.parentNode;
+		}
+		return !!pn;
+	};
+
+	var _getElementsFuncCache = {};
+
+	var getElementsFunc = function(query){
+		var retFunc = _getElementsFuncCache[query.query];
+		// if we've got a cached dispatcher, just use that
+		if(retFunc){ return retFunc; }
+		// else, generate a new on
+
+		// NOTE:
+		//		this function returns a function that searches for nodes and
+		//		filters them.  The search may be specialized by infix operators
+		//		(">", "~", or "+") else it will default to searching all
+		//		descendants (the " " selector). Once a group of children is
+		//		founde, a test function is applied to weed out the ones we
+		//		don't want. Many common cases can be fast-pathed. We spend a
+		//		lot of cycles to create a dispatcher that doesn't do more work
+		//		than necessary at any point since, unlike this function, the
+		//		dispatchers will be called every time. The logic of generating
+		//		efficient dispatchers looks like this in pseudo code:
+		//
+		//		# if it's a purely descendant query (no ">", "+", or "~" modifiers)
+		//		if infixOperator == " ":
+		//			if only(id):
+		//				return def(root):
+		//					return d.byId(id, root);
+		//
+		//			elif id:
+		//				return def(root):
+		//					return filter(d.byId(id, root));
+		//
+		//			elif cssClass && getElementsByClassName:
+		//				return def(root):
+		//					return filter(root.getElementsByClassName(cssClass));
+		//
+		//			elif only(tag):
+		//				return def(root):
+		//					return root.getElementsByTagName(tagName);
+		//
+		//			else:
+		//				# search by tag name, then filter
+		//				return def(root):
+		//					return filter(root.getElementsByTagName(tagName||"*"));
+		//
+		//		elif infixOperator == ">":
+		//			# search direct children
+		//			return def(root):
+		//				return filter(root.children);
+		//
+		//		elif infixOperator == "+":
+		//			# search next sibling
+		//			return def(root):
+		//				return filter(root.nextElementSibling);
+		//
+		//		elif infixOperator == "~":
+		//			# search rightward siblings
+		//			return def(root):
+		//				return filter(nextSiblings(root));
+
+		var io = query.infixOper;
+		var oper = (io ? io.oper : "");
+		// the default filter func which tests for all conditions in the query
+		// part. This is potentially inefficient, so some optimized paths may
+		// re-define it to test fewer things.
+		var filterFunc = getSimpleFilterFunc(query, { el: 1 });
+		var qt = query.tag;
+		var wildcardTag = ("*" == qt);
+		var ecs = getDoc()["getElementsByClassName"]; 
+
+		if(!oper){
+			// if there's no infix operator, then it's a descendant query. ID
+			// and "elements by class name" variants can be accelerated so we
+			// call them out explicitly:
+			if(query.id){
+				// testing shows that the overhead of yesman() is acceptable
+				// and can save us some bytes vs. re-defining the function
+				// everywhere.
+				filterFunc = (!query.loops && wildcardTag) ? 
+					yesman : 
+					getSimpleFilterFunc(query, { el: 1, id: 1 });
+
+				retFunc = function(root, arr){
+					var te = d.byId(query.id, (root.ownerDocument||root));
+					if(!te || !filterFunc(te)){ return; }
+					if(9 == root.nodeType){ // if root's a doc, we just return directly
+						return getArr(te, arr);
+					}else{ // otherwise check ancestry
+						if(_isDescendant(te, root)){
+							return getArr(te, arr);
+						}
+					}
+				}
+			}else if(
+				ecs && 
+				// isAlien check. Workaround for Prototype.js being totally evil/dumb.
+				/\{\s*\[native code\]\s*\}/.test(String(ecs)) && 
+				query.classes.length &&
+				!cssCaseBug
+			){
+				// it's a class-based query and we've got a fast way to run it.
+
+				// ignore class and ID filters since we will have handled both
+				filterFunc = getSimpleFilterFunc(query, { el: 1, classes: 1, id: 1 });
+				var classesString = query.classes.join(" ");
+				retFunc = function(root, arr, bag){
+					var ret = getArr(0, arr), te, x=0;
+					var tret = root.getElementsByClassName(classesString);
+					while((te = tret[x++])){
+						if(filterFunc(te, root) && _isUnique(te, bag)){
+							ret.push(te);
+						}
+					}
+					return ret;
+				};
+
+			}else if(!wildcardTag && !query.loops){
+				// it's tag only. Fast-path it.
+				retFunc = function(root, arr, bag){
+					var ret = getArr(0, arr), te, x=0;
+					var tret = root.getElementsByTagName(query.getTag());
+					while((te = tret[x++])){
+						if(_isUnique(te, bag)){
+							ret.push(te);
+						}
+					}
+					return ret;
+				};
+			}else{
+				// the common case:
+				//		a descendant selector without a fast path. By now it's got
+				//		to have a tag selector, even if it's just "*" so we query
+				//		by that and filter
+				filterFunc = getSimpleFilterFunc(query, { el: 1, tag: 1, id: 1 });
+				retFunc = function(root, arr, bag){
+					var ret = getArr(0, arr), te, x=0;
+					// we use getTag() to avoid case sensitivity issues
+					var tret = root.getElementsByTagName(query.getTag());
+					while((te = tret[x++])){
+						if(filterFunc(te, root) && _isUnique(te, bag)){
+							ret.push(te);
+						}
+					}
+					return ret;
+				};
+			}
+		}else{
+			// the query is scoped in some way. Instead of querying by tag we
+			// use some other collection to find candidate nodes
+			var skipFilters = { el: 1 };
+			if(wildcardTag){
+				skipFilters.tag = 1;
+			}
+			filterFunc = getSimpleFilterFunc(query, skipFilters);
+			if("+" == oper){
+				retFunc = _nextSibling(filterFunc);
+			}else if("~" == oper){
+				retFunc = _nextSiblings(filterFunc);
+			}else if(">" == oper){
+				retFunc = _childElements(filterFunc);
+			}
+		}
+		// cache it and return
+		return _getElementsFuncCache[query.query] = retFunc;
+	};
+
+	var filterDown = function(root, queryParts){
+		// NOTE:
+		//		this is the guts of the DOM query system. It takes a list of
+		//		parsed query parts and a root and finds children which match
+		//		the selector represented by the parts
+		var candidates = getArr(root), qp, x, te, qpl = queryParts.length, bag, ret;
+
+		for(var i = 0; i < qpl; i++){
+			ret = [];
+			qp = queryParts[i];
+			x = candidates.length - 1;
+			if(x > 0){
+				// if we have more than one root at this level, provide a new
+				// hash to use for checking group membership but tell the
+				// system not to post-filter us since we will already have been
+				// gauranteed to be unique
+				bag = {};
+				ret.nozip = true;
+			}
+			var gef = getElementsFunc(qp);
+			for(var j = 0; (te = candidates[j]); j++){
+				// for every root, get the elements that match the descendant
+				// selector, adding them to the "ret" array and filtering them
+				// via membership in this level's bag. If there are more query
+				// parts, then this level's return will be used as the next
+				// level's candidates
+				gef(te, ret, bag);
+			}
+			if(!ret.length){ break; }
+			candidates = ret;
+		}
+		return ret;
+	};
+
+	////////////////////////////////////////////////////////////////////////
+	// the query runner
+	////////////////////////////////////////////////////////////////////////
+
+	// these are the primary caches for full-query results. The query
+	// dispatcher functions are generated then stored here for hash lookup in
+	// the future
+	var _queryFuncCacheDOM = {},
+		_queryFuncCacheQSA = {};
+
+	// this is the second level of spliting, from full-length queries (e.g.,
+	// "div.foo .bar") into simple query expressions (e.g., ["div.foo",
+	// ".bar"])
+	var getStepQueryFunc = function(query){
+		var qparts = getQueryParts(trim(query));
+
+		// if it's trivial, avoid iteration and zipping costs
+		if(qparts.length == 1){
+			// we optimize this case here to prevent dispatch further down the
+			// chain, potentially slowing things down. We could more elegantly
+			// handle this in filterDown(), but it's slower for simple things
+			// that need to be fast (e.g., "#someId").
+			var tef = getElementsFunc(qparts[0]);
+			return function(root){
+				var r = tef(root, new qlc());
+				if(r){ r.nozip = true; }
+				return r;
+			}
+		}
+
+		// otherwise, break it up and return a runner that iterates over the parts recursively
+		return function(root){
+			return filterDown(root, qparts);
+		}
+	};
+
+	// NOTES:
+	//	* we can't trust QSA for anything but document-rooted queries, so
+	//	  caching is split into DOM query evaluators and QSA query evaluators
+	//	* caching query results is dirty and leak-prone (or, at a minimum,
+	//	  prone to unbounded growth). Other toolkits may go this route, but
+	//	  they totally destroy their own ability to manage their memory
+	//	  footprint. If we implement it, it should only ever be with a fixed
+	//	  total element reference # limit and an LRU-style algorithm since JS
+	//	  has no weakref support. Caching compiled query evaluators is also
+	//	  potentially problematic, but even on large documents the size of the
+	//	  query evaluators is often < 100 function objects per evaluator (and
+	//	  LRU can be applied if it's ever shown to be an issue).
+	//	* since IE's QSA support is currently only for HTML documents and even
+	//	  then only in IE 8's "standards mode", we have to detect our dispatch
+	//	  route at query time and keep 2 separate caches. Ugg.
+
+	// we need to determine if we think we can run a given query via
+	// querySelectorAll or if we'll need to fall back on DOM queries to get
+	// there. We need a lot of information about the environment and the query
+	// to make the determiniation (e.g. does it support QSA, does the query in
+	// question work in the native QSA impl, etc.).
+	var nua = navigator.userAgent;
+	// some versions of Safari provided QSA, but it was buggy and crash-prone.
+	// We need te detect the right "internal" webkit version to make this work.
+	var wk = "WebKit/";
+	var is525 = (
+		d.isWebKit && 
+		(nua.indexOf(wk) > 0) && 
+		(parseFloat(nua.split(wk)[1]) > 528)
+	);
+
+	// IE QSA queries may incorrectly include comment nodes, so we throw the
+	// zipping function into "remove" comments mode instead of the normal "skip
+	// it" which every other QSA-clued browser enjoys
+	var noZip = d.isIE ? "commentStrip" : "nozip";
+
+	var qsa = "querySelectorAll";
+	var qsaAvail = (
+		!!getDoc()[qsa] && 
+		// see #5832
+		(!d.isSafari || (d.isSafari > 3.1) || is525 )
+	);
+
+	//Don't bother with n+3 type of matches, IE complains if we modify those.
+	var infixSpaceRe = /n\+\d|([^ ])?([>~+])([^ =])?/g;
+	var infixSpaceFunc = function(match, pre, ch, post) {
+		return ch ? (pre ? pre + " " : "") + ch + (post ? " " + post : "") : /*n+3*/ match;
+	};
+
+	var getQueryFunc = function(query, forceDOM){
+		//Normalize query. The CSS3 selectors spec allows for omitting spaces around
+		//infix operators, >, ~ and +
+		//Do the work here since detection for spaces is used as a simple "not use QSA"
+		//test below.
+		query = query.replace(infixSpaceRe, infixSpaceFunc);
+
+		if(qsaAvail){
+			// if we've got a cached variant and we think we can do it, run it!
+			var qsaCached = _queryFuncCacheQSA[query];
+			if(qsaCached && !forceDOM){ return qsaCached; }
+		}
+
+		// else if we've got a DOM cached variant, assume that we already know
+		// all we need to and use it
+		var domCached = _queryFuncCacheDOM[query];
+		if(domCached){ return domCached; }
+
+		// TODO: 
+		//		today we're caching DOM and QSA branches separately so we
+		//		recalc useQSA every time. If we had a way to tag root+query
+		//		efficiently, we'd be in good shape to do a global cache.
+
+		var qcz = query.charAt(0);
+		var nospace = (-1 == query.indexOf(" "));
+
+		// byId searches are wicked fast compared to QSA, even when filtering
+		// is required
+		if( (query.indexOf("#") >= 0) && (nospace) ){
+			forceDOM = true;
+		}
+
+		var useQSA = ( 
+			qsaAvail && (!forceDOM) &&
+			// as per CSS 3, we can't currently start w/ combinator:
+			//		http://www.w3.org/TR/css3-selectors/#w3cselgrammar
+			(specials.indexOf(qcz) == -1) && 
+			// IE's QSA impl sucks on pseudos
+			(!d.isIE || (query.indexOf(":") == -1)) &&
+
+			(!(cssCaseBug && (query.indexOf(".") >= 0))) &&
+
+			// FIXME:
+			//		need to tighten up browser rules on ":contains" and "|=" to
+			//		figure out which aren't good
+			//		Latest webkit (around 531.21.8) does not seem to do well with :checked on option
+			//		elements, even though according to spec, selected options should
+			//		match :checked. So go nonQSA for it:
+			//		http://bugs.dojotoolkit.org/ticket/5179
+			(query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && 
+			(query.indexOf("|=") == -1) // some browsers don't grok it
+		);
+
+		// TODO: 
+		//		if we've got a descendant query (e.g., "> .thinger" instead of
+		//		just ".thinger") in a QSA-able doc, but are passed a child as a
+		//		root, it should be possible to give the item a synthetic ID and
+		//		trivially rewrite the query to the form "#synid > .thinger" to
+		//		use the QSA branch
+
+
+		if(useQSA){
+			var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? 
+						(query + " *") : query;
+			return _queryFuncCacheQSA[query] = function(root){
+				try{
+					// the QSA system contains an egregious spec bug which
+					// limits us, effectively, to only running QSA queries over
+					// entire documents.  See:
+					//		http://ejohn.org/blog/thoughts-on-queryselectorall/
+					//	despite this, we can also handle QSA runs on simple
+					//	selectors, but we don't want detection to be expensive
+					//	so we're just checking for the presence of a space char
+					//	right now. Not elegant, but it's cheaper than running
+					//	the query parser when we might not need to
+					if(!((9 == root.nodeType) || nospace)){ throw ""; }
+					var r = root[qsa](tq);
+					// skip expensive duplication checks and just wrap in a NodeList
+					r[noZip] = true;
+					return r;
+				}catch(e){
+					// else run the DOM branch on this query, ensuring that we
+					// default that way in the future
+					return getQueryFunc(query, true)(root);
+				}
+			}
+		}else{
+			// DOM branch
+			var parts = query.split(/\s*,\s*/);
+			return _queryFuncCacheDOM[query] = ((parts.length < 2) ? 
+				// if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher
+				getStepQueryFunc(query) : 
+				// if it *is* a complex query, break it up into its
+				// constituent parts and return a dispatcher that will
+				// merge the parts when run
+				function(root){
+					var pindex = 0, // avoid array alloc for every invocation
+						ret = [],
+						tp;
+					while((tp = parts[pindex++])){
+						ret = ret.concat(getStepQueryFunc(tp)(root));
+					}
+					return ret;
+				}
+			);
+		}
+	};
+
+	var _zipIdx = 0;
+
+	// NOTE:
+	//		this function is Moo inspired, but our own impl to deal correctly
+	//		with XML in IE
+	var _nodeUID = d.isIE ? function(node){
+		if(caseSensitive){
+			// XML docs don't have uniqueID on their nodes
+			return (node.getAttribute("_uid") || node.setAttribute("_uid", ++_zipIdx) || _zipIdx);
+
+		}else{
+			return node.uniqueID;
+		}
+	} : 
+	function(node){
+		return (node._uid || (node._uid = ++_zipIdx));
+	};
+
+	// determine if a node in is unique in a "bag". In this case we don't want
+	// to flatten a list of unique items, but rather just tell if the item in
+	// question is already in the bag. Normally we'd just use hash lookup to do
+	// this for us but IE's DOM is busted so we can't really count on that. On
+	// the upside, it gives us a built in unique ID function. 
+	var _isUnique = function(node, bag){
+		if(!bag){ return 1; }
+		var id = _nodeUID(node);
+		if(!bag[id]){ return bag[id] = 1; }
+		return 0;
+	};
+
+	// attempt to efficiently determine if an item in a list is a dupe,
+	// returning a list of "uniques", hopefully in doucment order
+	var _zipIdxName = "_zipIdx";
+	var _zip = function(arr){
+		if(arr && arr.nozip){ 
+			return (qlc._wrap) ? qlc._wrap(arr) : arr;
+		}
+		// var ret = new d._NodeListCtor();
+		var ret = new qlc();
+		if(!arr || !arr.length){ return ret; }
+		if(arr[0]){
+			ret.push(arr[0]);
+		}
+		if(arr.length < 2){ return ret; }
+
+		_zipIdx++;
+		
+		// we have to fork here for IE and XML docs because we can't set
+		// expandos on their nodes (apparently). *sigh*
+		if(d.isIE && caseSensitive){
+			var szidx = _zipIdx+"";
+			arr[0].setAttribute(_zipIdxName, szidx);
+			for(var x = 1, te; te = arr[x]; x++){
+				if(arr[x].getAttribute(_zipIdxName) != szidx){ 
+					ret.push(te);
+				}
+				te.setAttribute(_zipIdxName, szidx);
+			}
+		}else if(d.isIE && arr.commentStrip){
+			try{
+				for(var x = 1, te; te = arr[x]; x++){
+					if(_isElement(te)){ 
+						ret.push(te);
+					}
+				}
+			}catch(e){ /* squelch */ }
+		}else{
+			if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; }
+			for(var x = 1, te; te = arr[x]; x++){
+				if(arr[x][_zipIdxName] != _zipIdx){ 
+					ret.push(te);
+				}
+				te[_zipIdxName] = _zipIdx;
+			}
+		}
+		return ret;
+	};
+
+	// the main executor
+	d.query = function(/*String*/ query, /*String|DOMNode?*/ root){
+		//	summary:
+		//		Returns nodes which match the given CSS3 selector, searching the
+		//		entire document by default but optionally taking a node to scope
+		//		the search by. Returns an instance of dojo.NodeList.
+		//	description:
+		//		dojo.query() is the swiss army knife of DOM node manipulation in
+		//		Dojo. Much like Prototype's "$$" (bling-bling) function or JQuery's
+		//		"$" function, dojo.query provides robust, high-performance
+		//		CSS-based node selector support with the option of scoping searches
+		//		to a particular sub-tree of a document.
+		//
+		//		Supported Selectors:
+		//		--------------------
+		//
+		//		dojo.query() supports a rich set of CSS3 selectors, including:
+		//
+		//			* class selectors (e.g., `.foo`)
+		//			* node type selectors like `span`
+		//			* ` ` descendant selectors
+		//			* `>` child element selectors 
+		//			* `#foo` style ID selectors
+		//			* `*` universal selector
+		//			* `~`, the immediately preceeded-by sibling selector
+		//			* `+`, the preceeded-by sibling selector
+		//			* attribute queries:
+		//			|	* `[foo]` attribute presence selector
+		//			|	* `[foo='bar']` attribute value exact match
+		//			|	* `[foo~='bar']` attribute value list item match
+		//			|	* `[foo^='bar']` attribute start match
+		//			|	* `[foo$='bar']` attribute end match
+		//			|	* `[foo*='bar']` attribute substring match
+		//			* `:first-child`, `:last-child`, and `:only-child` positional selectors
+		//			* `:empty` content emtpy selector
+		//			* `:checked` pseudo selector
+		//			* `:nth-child(n)`, `:nth-child(2n+1)` style positional calculations
+		//			* `:nth-child(even)`, `:nth-child(odd)` positional selectors
+		//			* `:not(...)` negation pseudo selectors
+		//
+		//		Any legal combination of these selectors will work with
+		//		`dojo.query()`, including compound selectors ("," delimited).
+		//		Very complex and useful searches can be constructed with this
+		//		palette of selectors and when combined with functions for
+		//		manipulation presented by dojo.NodeList, many types of DOM
+		//		manipulation operations become very straightforward.
+		//		
+		//		Unsupported Selectors:
+		//		----------------------
+		//
+		//		While dojo.query handles many CSS3 selectors, some fall outside of
+		//		what's resaonable for a programmatic node querying engine to
+		//		handle. Currently unsupported selectors include:
+		//		
+		//			* namespace-differentiated selectors of any form
+		//			* all `::` pseduo-element selectors
+		//			* certain pseduo-selectors which don't get a lot of day-to-day use:
+		//			|	* `:root`, `:lang()`, `:target`, `:focus`
+		//			* all visual and state selectors:
+		//			|	* `:root`, `:active`, `:hover`, `:visisted`, `:link`,
+		//				  `:enabled`, `:disabled`
+		//			* `:*-of-type` pseudo selectors
+		//		
+		//		dojo.query and XML Documents:
+		//		-----------------------------
+		//		
+		//		`dojo.query` (as of dojo 1.2) supports searching XML documents
+		//		in a case-sensitive manner. If an HTML document is served with
+		//		a doctype that forces case-sensitivity (e.g., XHTML 1.1
+		//		Strict), dojo.query() will detect this and "do the right
+		//		thing". Case sensitivity is dependent upon the document being
+		//		searched and not the query used. It is therefore possible to
+		//		use case-sensitive queries on strict sub-documents (iframes,
+		//		etc.) or XML documents while still assuming case-insensitivity
+		//		for a host/root document.
+		//
+		//		Non-selector Queries:
+		//		---------------------
+		//
+		//		If something other than a String is passed for the query,
+		//		`dojo.query` will return a new `dojo.NodeList` instance
+		//		constructed from that parameter alone and all further
+		//		processing will stop. This means that if you have a reference
+		//		to a node or NodeList, you can quickly construct a new NodeList
+		//		from the original by calling `dojo.query(node)` or
+		//		`dojo.query(list)`.
+		//
+		//	query:
+		//		The CSS3 expression to match against. For details on the syntax of
+		//		CSS3 selectors, see <http://www.w3.org/TR/css3-selectors/#selectors>
+		//	root:
+		//		A DOMNode (or node id) to scope the search from. Optional.
+		//	returns: dojo.NodeList
+		//		An instance of `dojo.NodeList`. Many methods are available on
+		//		NodeLists for searching, iterating, manipulating, and handling
+		//		events on the matched nodes in the returned list.
+		//	example:
+		//		search the entire document for elements with the class "foo":
+		//	|	dojo.query(".foo");
+		//		these elements will match:
+		//	|	<span class="foo"></span>
+		//	|	<span class="foo bar"></span>
+		//	|	<p class="thud foo"></p>
+		//	example:
+		//		search the entire document for elements with the classes "foo" *and* "bar":
+		//	|	dojo.query(".foo.bar");
+		//		these elements will match:
+		//	|	<span class="foo bar"></span>
+		//		while these will not:
+		//	|	<span class="foo"></span>
+		//	|	<p class="thud foo"></p>
+		//	example:
+		//		find `<span>` elements which are descendants of paragraphs and
+		//		which have a "highlighted" class:
+		//	|	dojo.query("p span.highlighted");
+		//		the innermost span in this fragment matches:
+		//	|	<p class="foo">
+		//	|		<span>...
+		//	|			<span class="highlighted foo bar">...</span>
+		//	|		</span>
+		//	|	</p>
+		//	example:
+		//		set an "odd" class on all odd table rows inside of the table
+		//		`#tabular_data`, using the `>` (direct child) selector to avoid
+		//		affecting any nested tables:
+		//	|	dojo.query("#tabular_data > tbody > tr:nth-child(odd)").addClass("odd");
+		//	example:
+		//		remove all elements with the class "error" from the document
+		//		and store them in a list:
+		//	|	var errors = dojo.query(".error").orphan();
+		//	example:
+		//		add an onclick handler to every submit button in the document
+		//		which causes the form to be sent via Ajax instead:
+		//	|	dojo.query("input[type='submit']").onclick(function(e){
+		//	|		dojo.stopEvent(e); // prevent sending the form
+		//	|		var btn = e.target;
+		//	|		dojo.xhrPost({
+		//	|			form: btn.form,
+		//	|			load: function(data){
+		//	|				// replace the form with the response
+		//	|				var div = dojo.doc.createElement("div");
+		//	|				dojo.place(div, btn.form, "after");
+		//	|				div.innerHTML = data;
+		//	|				dojo.style(btn.form, "display", "none");
+		//	|			}
+		//	|		});
+		//	|	});
+
+		//Set list constructor to desired value. This can change
+		//between calls, so always re-assign here.
+		qlc = d._NodeListCtor;
+
+		if(!query){
+			return new qlc();
+		}
+
+		if(query.constructor == qlc){
+			return query;
+		}
+		if(typeof query != "string"){ // inline'd type check
+			return new qlc(query); // dojo.NodeList
+		}
+		if(typeof root == "string"){ // inline'd type check
+			root = d.byId(root);
+			if(!root){ return new qlc(); }
+		}
+
+		root = root||getDoc();
+		var od = root.ownerDocument||root.documentElement;
+
+		// throw the big case sensitivity switch
+
+		// NOTE:
+		// 		Opera in XHTML mode doesn't detect case-sensitivity correctly
+		// 		and it's not clear that there's any way to test for it
+		caseSensitive = (root.contentType && root.contentType=="application/xml") || 
+						(d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) ||
+						(!!od) && 
+						(d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion));
+
+		// NOTE: 
+		//		adding "true" as the 2nd argument to getQueryFunc is useful for
+		//		testing the DOM branch without worrying about the
+		//		behavior/performance of the QSA branch.
+		var r = getQueryFunc(query)(root);
+
+		// FIXME:
+		//		need to investigate this branch WRT #8074 and #8075
+		if(r && r.nozip && !qlc._wrap){
+			return r;
+		}
+		return _zip(r); // dojo.NodeList
+	}
+
+	// FIXME: need to add infrastructure for post-filtering pseudos, ala :last
+	d.query.pseudos = pseudos;
+
+	// one-off function for filtering a NodeList based on a simple selector
+	d._filterQueryResult = function(nodeList, simpleFilter){
+		var tmpNodeList = new d._NodeListCtor();
+		var filterFunc = getSimpleFilterFunc(getQueryParts(simpleFilter)[0]);
+		for(var x = 0, te; te = nodeList[x]; x++){
+			if(filterFunc(te)){ tmpNodeList.push(te); }
+		}
+		return tmpNodeList;
+	}
+})(this["queryPortability"]||this["acme"]||dojo);
+
+/*
+*/
+
+}
+
+if(!dojo._hasResource["dojo._base.xhr"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.xhr"] = true;
+dojo.provide("dojo._base.xhr");
+
+
+
+
+
+(function(){
+	var _d = dojo, cfg = _d.config;
+
+	function setValue(/*Object*/obj, /*String*/name, /*String*/value){
+		//summary:
+		//		For the named property in object, set the value. If a value
+		//		already exists and it is a string, convert the value to be an
+		//		array of values.
+
+		//Skip it if there is no value
+		if(value === null){
+			return;
+		}
+
+		var val = obj[name];
+		if(typeof val == "string"){ // inline'd type check
+			obj[name] = [val, value];
+		}else if(_d.isArray(val)){
+			val.push(value);
+		}else{
+			obj[name] = value;
+		}
+	}
+	
+	dojo.fieldToObject = function(/*DOMNode||String*/ inputNode){
+		// summary:
+		//		Serialize a form field to a JavaScript object.
+		//
+		// description:
+		//		Returns the value encoded in a form field as
+		//		as a string or an array of strings. Disabled form elements
+		//		and unchecked radio and checkboxes are skipped.	Multi-select
+		//		elements are returned as an array of string values.
+		var ret = null;
+		var item = _d.byId(inputNode);
+		if(item){
+			var _in = item.name;
+			var type = (item.type||"").toLowerCase();
+			if(_in && type && !item.disabled){
+				if(type == "radio" || type == "checkbox"){
+					if(item.checked){ ret = item.value }
+				}else if(item.multiple){
+					ret = [];
+					_d.query("option", item).forEach(function(opt){
+						if(opt.selected){
+							ret.push(opt.value);
+						}
+					});
+				}else{
+					ret = item.value;
+				}
+			}
+		}
+		return ret; // Object
+	}
+
+	dojo.formToObject = function(/*DOMNode||String*/ formNode){
+		// summary:
+		//		Serialize a form node to a JavaScript object.
+		// description:
+		//		Returns the values encoded in an HTML form as
+		//		string properties in an object which it then returns. Disabled form
+		//		elements, buttons, and other non-value form elements are skipped.
+		//		Multi-select elements are returned as an array of string values.
+		//
+		// example:
+		//		This form:
+		//		|	<form id="test_form">
+		//		|		<input type="text" name="blah" value="blah">
+		//		|		<input type="text" name="no_value" value="blah" disabled>
+		//		|		<input type="button" name="no_value2" value="blah">
+		//		|		<select type="select" multiple name="multi" size="5">
+		//		|			<option value="blah">blah</option>
+		//		|			<option value="thud" selected>thud</option>
+		//		|			<option value="thonk" selected>thonk</option>
+		//		|		</select>
+		//		|	</form>
+		//
+		//		yields this object structure as the result of a call to
+		//		formToObject():
+		//
+		//		|	{ 
+		//		|		blah: "blah",
+		//		|		multi: [
+		//		|			"thud",
+		//		|			"thonk"
+		//		|		]
+		//		|	};
+
+		var ret = {};
+		var exclude = "file|submit|image|reset|button|";
+		_d.forEach(dojo.byId(formNode).elements, function(item){
+			var _in = item.name;
+			var type = (item.type||"").toLowerCase();
+			if(_in && type && exclude.indexOf(type) == -1 && !item.disabled){
+				setValue(ret, _in, _d.fieldToObject(item));
+				if(type == "image"){
+					ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0;
+				}
+			}
+		});
+		return ret; // Object
+	}
+
+	dojo.objectToQuery = function(/*Object*/ map){
+		//	summary:
+		//		takes a name/value mapping object and returns a string representing
+		//		a URL-encoded version of that object.
+		//	example:
+		//		this object:
+		//
+		//		|	{ 
+		//		|		blah: "blah",
+		//		|		multi: [
+		//		|			"thud",
+		//		|			"thonk"
+		//		|		]
+		//		|	};
+		//
+		//	yields the following query string:
+		//	
+		//	|	"blah=blah&multi=thud&multi=thonk"
+
+		// FIXME: need to implement encodeAscii!!
+		var enc = encodeURIComponent;
+		var pairs = [];
+		var backstop = {};
+		for(var name in map){
+			var value = map[name];
+			if(value != backstop[name]){
+				var assign = enc(name) + "=";
+				if(_d.isArray(value)){
+					for(var i=0; i < value.length; i++){
+						pairs.push(assign + enc(value[i]));
+					}
+				}else{
+					pairs.push(assign + enc(value));
+				}
+			}
+		}
+		return pairs.join("&"); // String
+	}
+
+	dojo.formToQuery = function(/*DOMNode||String*/ formNode){
+		// summary:
+		//		Returns a URL-encoded string representing the form passed as either a
+		//		node or string ID identifying the form to serialize
+		return _d.objectToQuery(_d.formToObject(formNode)); // String
+	}
+
+	dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){
+		// summary:
+		//		Create a serialized JSON string from a form node or string
+		//		ID identifying the form to serialize
+		return _d.toJson(_d.formToObject(formNode), prettyPrint); // String
+	}
+
+	dojo.queryToObject = function(/*String*/ str){
+		// summary:
+		//		Create an object representing a de-serialized query section of a
+		//		URL. Query keys with multiple values are returned in an array.
+		//
+		// example:
+		//		This string:
+		//
+		//	|		"foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&"
+		//		
+		//		results in this object structure:
+		//
+		//	|		{
+		//	|			foo: [ "bar", "baz" ],
+		//	|			thinger: " spaces =blah",
+		//	|			zonk: "blarg"
+		//	|		}
+		//	
+		//		Note that spaces and other urlencoded entities are correctly
+		//		handled.
+
+		// FIXME: should we grab the URL string if we're not passed one?
+		var ret = {};
+		var qp = str.split("&");
+		var dec = decodeURIComponent;
+		_d.forEach(qp, function(item){
+			if(item.length){
+				var parts = item.split("=");
+				var name = dec(parts.shift());
+				var val = dec(parts.join("="));
+				if(typeof ret[name] == "string"){ // inline'd type check
+					ret[name] = [ret[name]];
+				}
+
+				if(_d.isArray(ret[name])){
+					ret[name].push(val);
+				}else{
+					ret[name] = val;
+				}
+			}
+		});
+		return ret; // Object
+	}
+
+	// need to block async callbacks from snatching this thread as the result
+	// of an async callback might call another sync XHR, this hangs khtml forever
+	// must checked by watchInFlight()
+
+	dojo._blockAsync = false;
+
+	// MOW: remove dojo._contentHandlers alias in 2.0
+	var handlers = _d._contentHandlers = dojo.contentHandlers = {
+		// summary: 
+		//		A map of availble XHR transport handle types. Name matches the
+		//		`handleAs` attribute passed to XHR calls.
+		//
+		// description:
+		//		A map of availble XHR transport handle types. Name matches the
+		//		`handleAs` attribute passed to XHR calls. Each contentHandler is
+		//		called, passing the xhr object for manipulation. The return value
+		//		from the contentHandler will be passed to the `load` or `handle` 
+		//		functions defined in the original xhr call. 
+		//		
+		// example:
+		//		Creating a custom content-handler:
+		//	|	dojo.contentHandlers.makeCaps = function(xhr){
+		//	|		return xhr.responseText.toUpperCase();
+		//	|	}
+		//	|	// and later:
+		//	|	dojo.xhrGet({ 
+		//	|		url:"foo.txt",
+		//	|		handleAs:"makeCaps",
+		//	|		load: function(data){ /* data is a toUpper version of foo.txt */ }
+		//	|	});
+
+		text: function(xhr){ 
+			// summary: A contentHandler which simply returns the plaintext response data
+			return xhr.responseText; 
+		},
+		json: function(xhr){
+			// summary: A contentHandler which returns a JavaScript object created from the response data
+			return _d.fromJson(xhr.responseText || null);
+		},
+		"json-comment-filtered": function(xhr){ 
+			// summary: A contentHandler which expects comment-filtered JSON. 
+			// description: 
+			//		A contentHandler which expects comment-filtered JSON. 
+			//		the json-comment-filtered option was implemented to prevent
+			//		"JavaScript Hijacking", but it is less secure than standard JSON. Use
+			//		standard JSON instead. JSON prefixing can be used to subvert hijacking.
+			//		
+			//		Will throw a notice suggesting to use application/json mimetype, as
+			//		json-commenting can introduce security issues. To decrease the chances of hijacking,
+			//		use the standard `json` contentHandler, and prefix your "JSON" with: {}&& 
+			//		
+			//		use djConfig.useCommentedJson = true to turn off the notice
+			if(!dojo.config.useCommentedJson){
+				console.warn("Consider using the standard mimetype:application/json."
+					+ " json-commenting can introduce security issues. To"
+					+ " decrease the chances of hijacking, use the standard the 'json' handler and"
+					+ " prefix your json with: {}&&\n"
+					+ "Use djConfig.useCommentedJson=true to turn off this message.");
+			}
+
+			var value = xhr.responseText;
+			var cStartIdx = value.indexOf("\/*");
+			var cEndIdx = value.lastIndexOf("*\/");
+			if(cStartIdx == -1 || cEndIdx == -1){
+				throw new Error("JSON was not comment filtered");
+			}
+			return _d.fromJson(value.substring(cStartIdx+2, cEndIdx));
+		},
+		javascript: function(xhr){ 
+			// summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript
+
+			// FIXME: try Moz and IE specific eval variants?
+			return _d.eval(xhr.responseText);
+		},
+		xml: function(xhr){
+			// summary: A contentHandler returning an XML Document parsed from the response data
+			var result = xhr.responseXML;
+						if(_d.isIE && (!result || !result.documentElement)){
+				//WARNING: this branch used by the xml handling in dojo.io.iframe,
+				//so be sure to test dojo.io.iframe if making changes below.
+				var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }
+				var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)];
+				_d.some(dp, function(p){
+					try{
+						var dom = new ActiveXObject(p);
+						dom.async = false;
+						dom.loadXML(xhr.responseText);
+						result = dom;
+					}catch(e){ return false; }
+					return true;
+				});
+			}
+						return result; // DOMDocument
+		},
+		"json-comment-optional": function(xhr){
+			// summary: A contentHandler which checks the presence of comment-filtered JSON and 
+			//		alternates between the `json` and `json-comment-filtered` contentHandlers.
+			if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){
+				return handlers["json-comment-filtered"](xhr);
+			}else{
+				return handlers["json"](xhr);
+			}
+		}
+	};
+
+	/*=====
+	dojo.__IoArgs = function(){
+		//	url: String
+		//		URL to server endpoint.
+		//	content: Object?
+		//		Contains properties with string values. These
+		//		properties will be serialized as name1=value2 and
+		//		passed in the request.
+		//	timeout: Integer?
+		//		Milliseconds to wait for the response. If this time
+		//		passes, the then error callbacks are called.
+		//	form: DOMNode?
+		//		DOM node for a form. Used to extract the form values
+		//		and send to the server.
+		//	preventCache: Boolean?
+		//		Default is false. If true, then a
+		//		"dojo.preventCache" parameter is sent in the request
+		//		with a value that changes with each request
+		//		(timestamp). Useful only with GET-type requests.
+		//	handleAs: String?
+		//		Acceptable values depend on the type of IO
+		//		transport (see specific IO calls for more information).
+		// 	rawBody: String?
+		// 		Sets the raw body for an HTTP request. If this is used, then the content
+		// 		property is ignored. This is mostly useful for HTTP methods that have
+		// 		a body to their requests, like PUT or POST. This property can be used instead
+		// 		of postData and putData for dojo.rawXhrPost and dojo.rawXhrPut respectively.
+		//	ioPublish: Boolean?
+		//		Set this explicitly to false to prevent publishing of topics related to
+		// 		IO operations. Otherwise, if djConfig.ioPublish is set to true, topics
+		// 		will be published via dojo.publish for different phases of an IO operation.
+		// 		See dojo.__IoPublish for a list of topics that are published.
+		//	load: Function?
+		//		This function will be
+		//		called on a successful HTTP response code.
+		//	error: Function?
+		//		This function will
+		//		be called when the request fails due to a network or server error, the url
+		//		is invalid, etc. It will also be called if the load or handle callback throws an
+		//		exception, unless djConfig.debugAtAllCosts is true.  This allows deployed applications
+		//		to continue to run even when a logic error happens in the callback, while making
+		//		it easier to troubleshoot while in debug mode.
+		//	handle: Function?
+		//		This function will
+		//		be called at the end of every request, whether or not an error occurs.
+		this.url = url;
+		this.content = content;
+		this.timeout = timeout;
+		this.form = form;
+		this.preventCache = preventCache;
+		this.handleAs = handleAs;
+		this.ioPublish = ioPublish;
+		this.load = function(response, ioArgs){
+			// ioArgs: dojo.__IoCallbackArgs
+			//		Provides additional information about the request.
+			// response: Object
+			//		The response in the format as defined with handleAs.
+		}
+		this.error = function(response, ioArgs){
+			// ioArgs: dojo.__IoCallbackArgs
+			//		Provides additional information about the request.
+			// response: Object
+			//		The response in the format as defined with handleAs.
+		}
+		this.handle = function(loadOrError, response, ioArgs){
+			// loadOrError: String
+			//		Provides a string that tells you whether this function
+			//		was called because of success (load) or failure (error).
+			// response: Object
+			//		The response in the format as defined with handleAs.
+			// ioArgs: dojo.__IoCallbackArgs
+			//		Provides additional information about the request.
+		}
+	}
+	=====*/
+
+	/*=====
+	dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){
+		//	args: Object
+		//		the original object argument to the IO call.
+		//	xhr: XMLHttpRequest
+		//		For XMLHttpRequest calls only, the
+		//		XMLHttpRequest object that was used for the
+		//		request.
+		//	url: String
+		//		The final URL used for the call. Many times it
+		//		will be different than the original args.url
+		//		value.
+		//	query: String
+		//		For non-GET requests, the
+		//		name1=value1&name2=value2 parameters sent up in
+		//		the request.
+		//	handleAs: String
+		//		The final indicator on how the response will be
+		//		handled.
+		//	id: String
+		//		For dojo.io.script calls only, the internal
+		//		script ID used for the request.
+		//	canDelete: Boolean
+		//		For dojo.io.script calls only, indicates
+		//		whether the script tag that represents the
+		//		request can be deleted after callbacks have
+		//		been called. Used internally to know when
+		//		cleanup can happen on JSONP-type requests.
+		//	json: Object
+		//		For dojo.io.script calls only: holds the JSON
+		//		response for JSONP-type requests. Used
+		//		internally to hold on to the JSON responses.
+		//		You should not need to access it directly --
+		//		the same object should be passed to the success
+		//		callbacks directly.
+		this.args = args;
+		this.xhr = xhr;
+		this.url = url;
+		this.query = query;
+		this.handleAs = handleAs;
+		this.id = id;
+		this.canDelete = canDelete;
+		this.json = json;
+	}
+	=====*/
+
+
+	/*=====
+	dojo.__IoPublish = function(){
+		// 	summary:
+		// 		This is a list of IO topics that can be published
+		// 		if djConfig.ioPublish is set to true. IO topics can be
+		// 		published for any Input/Output, network operation. So,
+		// 		dojo.xhr, dojo.io.script and dojo.io.iframe can all
+		// 		trigger these topics to be published.
+		//	start: String
+		//		"/dojo/io/start" is sent when there are no outstanding IO
+		// 		requests, and a new IO request is started. No arguments
+		// 		are passed with this topic.
+		//	send: String
+		//		"/dojo/io/send" is sent whenever a new IO request is started.
+		// 		It passes the dojo.Deferred for the request with the topic.
+		//	load: String
+		//		"/dojo/io/load" is sent whenever an IO request has loaded
+		// 		successfully. It passes the response and the dojo.Deferred
+		// 		for the request with the topic.
+		//	error: String
+		//		"/dojo/io/error" is sent whenever an IO request has errored.
+		// 		It passes the error and the dojo.Deferred
+		// 		for the request with the topic.
+		//	done: String
+		//		"/dojo/io/done" is sent whenever an IO request has completed,
+		// 		either by loading or by erroring. It passes the error and
+		// 		the dojo.Deferred for the request with the topic.
+		//	stop: String
+		//		"/dojo/io/stop" is sent when all outstanding IO requests have
+		// 		finished. No arguments are passed with this topic.
+		this.start = "/dojo/io/start";
+		this.send = "/dojo/io/send";
+		this.load = "/dojo/io/load";
+		this.error = "/dojo/io/error";
+		this.done = "/dojo/io/done";
+		this.stop = "/dojo/io/stop";
+	}
+	=====*/
+
+
+	dojo._ioSetArgs = function(/*dojo.__IoArgs*/args,
+			/*Function*/canceller,
+			/*Function*/okHandler,
+			/*Function*/errHandler){
+		//	summary: 
+		//		sets up the Deferred and ioArgs property on the Deferred so it
+		//		can be used in an io call.
+		//	args:
+		//		The args object passed into the public io call. Recognized properties on
+		//		the args object are:
+		//	canceller:
+		//		The canceller function used for the Deferred object. The function
+		//		will receive one argument, the Deferred object that is related to the
+		//		canceller.
+		//	okHandler:
+		//		The first OK callback to be registered with Deferred. It has the opportunity
+		//		to transform the OK response. It will receive one argument -- the Deferred
+		//		object returned from this function.
+		//	errHandler:
+		//		The first error callback to be registered with Deferred. It has the opportunity
+		//		to do cleanup on an error. It will receive two arguments: error (the 
+		//		Error object) and dfd, the Deferred object returned from this function.
+
+		var ioArgs = {args: args, url: args.url};
+
+		//Get values from form if requestd.
+		var formObject = null;
+		if(args.form){ 
+			var form = _d.byId(args.form);
+			//IE requires going through getAttributeNode instead of just getAttribute in some form cases, 
+			//so use it for all.  See #2844
+			var actnNode = form.getAttributeNode("action");
+			ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); 
+			formObject = _d.formToObject(form);
+		}
+
+		// set up the query params
+		var miArgs = [{}];
+	
+		if(formObject){
+			// potentially over-ride url-provided params w/ form values
+			miArgs.push(formObject);
+		}
+		if(args.content){
+			// stuff in content over-rides what's set by form
+			miArgs.push(args.content);
+		}
+		if(args.preventCache){
+			miArgs.push({"dojo.preventCache": new Date().valueOf()});
+		}
+		ioArgs.query = _d.objectToQuery(_d.mixin.apply(null, miArgs));
+	
+		// .. and the real work of getting the deferred in order, etc.
+		ioArgs.handleAs = args.handleAs || "text";
+		var d = new _d.Deferred(canceller);
+		d.addCallbacks(okHandler, function(error){
+			return errHandler(error, d);
+		});
+
+		//Support specifying load, error and handle callback functions from the args.
+		//For those callbacks, the "this" object will be the args object.
+		//The callbacks will get the deferred result value as the
+		//first argument and the ioArgs object as the second argument.
+		var ld = args.load;
+		if(ld && _d.isFunction(ld)){
+			d.addCallback(function(value){
+				return ld.call(args, value, ioArgs);
+			});
+		}
+		var err = args.error;
+		if(err && _d.isFunction(err)){
+			d.addErrback(function(value){
+				return err.call(args, value, ioArgs);
+			});
+		}
+		var handle = args.handle;
+		if(handle && _d.isFunction(handle)){
+			d.addBoth(function(value){
+				return handle.call(args, value, ioArgs);
+			});
+		}
+
+		//Plug in topic publishing, if dojo.publish is loaded.
+		if(cfg.ioPublish && _d.publish && ioArgs.args.ioPublish !== false){
+			d.addCallbacks(
+				function(res){
+					_d.publish("/dojo/io/load", [d, res]);
+					return res;
+				},
+				function(res){
+					_d.publish("/dojo/io/error", [d, res]);
+					return res;
+				}
+			);
+			d.addBoth(function(res){
+				_d.publish("/dojo/io/done", [d, res]);
+				return res;
+			});
+		}
+
+		d.ioArgs = ioArgs;
+	
+		// FIXME: need to wire up the xhr object's abort method to something
+		// analagous in the Deferred
+		return d;
+	}
+
+	var _deferredCancel = function(/*Deferred*/dfd){
+		// summary: canceller function for dojo._ioSetArgs call.
+		
+		dfd.canceled = true;
+		var xhr = dfd.ioArgs.xhr;
+		var _at = typeof xhr.abort;
+		if(_at == "function" || _at == "object" || _at == "unknown"){
+			xhr.abort();
+		}
+		var err = dfd.ioArgs.error;
+		if(!err){
+			err = new Error("xhr cancelled");
+			err.dojoType="cancel";
+		}
+		return err;
+	}
+	var _deferredOk = function(/*Deferred*/dfd){
+		// summary: okHandler function for dojo._ioSetArgs call.
+
+		var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
+		return ret === undefined ? null : ret;
+	}
+	var _deferError = function(/*Error*/error, /*Deferred*/dfd){
+		// summary: errHandler function for dojo._ioSetArgs call.
+
+		if(!dfd.ioArgs.args.failOk){
+			console.error(error);
+		}
+		return error;
+	}
+
+	// avoid setting a timer per request. It degrades performance on IE
+	// something fierece if we don't use unified loops.
+	var _inFlightIntvl = null;
+	var _inFlight = [];
+	
+	
+	//Use a separate count for knowing if we are starting/stopping io calls.
+	//Cannot use _inFlight.length since it can change at a different time than
+	//when we want to do this kind of test. We only want to decrement the count
+	//after a callback/errback has finished, since the callback/errback should be
+	//considered as part of finishing a request.
+	var _pubCount = 0;
+	var _checkPubCount = function(dfd){
+		if(_pubCount <= 0){
+			_pubCount = 0;
+			if(cfg.ioPublish && _d.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){
+				_d.publish("/dojo/io/stop");
+			}
+		}
+	};
+
+	var _watchInFlight = function(){
+		//summary: 
+		//		internal method that checks each inflight XMLHttpRequest to see
+		//		if it has completed or if the timeout situation applies.
+		
+		var now = (new Date()).getTime();
+		// make sure sync calls stay thread safe, if this callback is called
+		// during a sync call and this results in another sync call before the
+		// first sync call ends the browser hangs
+		if(!_d._blockAsync){
+			// we need manual loop because we often modify _inFlight (and therefore 'i') while iterating
+			// note: the second clause is an assigment on purpose, lint may complain
+			for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){
+				var dfd = tif.dfd;
+				var func = function(){
+					if(!dfd || dfd.canceled || !tif.validCheck(dfd)){
+						_inFlight.splice(i--, 1); 
+						_pubCount -= 1;
+					}else if(tif.ioCheck(dfd)){
+						_inFlight.splice(i--, 1);
+						tif.resHandle(dfd);
+						_pubCount -= 1;
+					}else if(dfd.startTime){
+						//did we timeout?
+						if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){
+							_inFlight.splice(i--, 1);
+							var err = new Error("timeout exceeded");
+							err.dojoType = "timeout";
+							dfd.errback(err);
+							//Cancel the request so the io module can do appropriate cleanup.
+							dfd.cancel();
+							_pubCount -= 1;
+						}
+					}
+				};
+				if(dojo.config.debugAtAllCosts){
+					func.call(this);
+				}else{
+					try{
+						func.call(this);
+					}catch(e){
+						dfd.errback(e);
+					}
+				}
+			}
+		}
+
+		_checkPubCount(dfd);
+
+		if(!_inFlight.length){
+			clearInterval(_inFlightIntvl);
+			_inFlightIntvl = null;
+			return;
+		}
+	}
+
+	dojo._ioCancelAll = function(){
+		//summary: Cancels all pending IO requests, regardless of IO type
+		//(xhr, script, iframe).
+		try{
+			_d.forEach(_inFlight, function(i){
+				try{
+					i.dfd.cancel();
+				}catch(e){/*squelch*/}
+			});
+		}catch(e){/*squelch*/}
+	}
+
+	//Automatically call cancel all io calls on unload
+	//in IE for trac issue #2357.
+		if(_d.isIE){
+		_d.addOnWindowUnload(_d._ioCancelAll);
+	}
+	
+	_d._ioNotifyStart = function(/*Deferred*/dfd){
+		// summary:
+		// 		If dojo.publish is available, publish topics
+		// 		about the start of a request queue and/or the
+		// 		the beginning of request.
+		// description:
+		// 		Used by IO transports. An IO transport should
+		// 		call this method before making the network connection.
+		if(cfg.ioPublish && _d.publish && dfd.ioArgs.args.ioPublish !== false){
+			if(!_pubCount){
+				_d.publish("/dojo/io/start");
+			}
+			_pubCount += 1;
+			_d.publish("/dojo/io/send", [dfd]);
+		}
+	}
+
+	_d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){
+		// summary: 
+		//		Watches the io request represented by dfd to see if it completes.
+		// dfd: Deferred
+		//		The Deferred object to watch.
+		// validCheck: Function
+		//		Function used to check if the IO request is still valid. Gets the dfd
+		//		object as its only argument.
+		// ioCheck: Function
+		//		Function used to check if basic IO call worked. Gets the dfd
+		//		object as its only argument.
+		// resHandle: Function
+		//		Function used to process response. Gets the dfd
+		//		object as its only argument.
+		var args = dfd.ioArgs.args;
+		if(args.timeout){
+			dfd.startTime = (new Date()).getTime();
+		}
+		
+		_inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle});
+		if(!_inFlightIntvl){
+			_inFlightIntvl = setInterval(_watchInFlight, 50);
+		}
+		// handle sync requests
+		//A weakness: async calls in flight
+		//could have their handlers called as part of the
+		//_watchInFlight call, before the sync's callbacks
+		// are called.
+		if(args.sync){
+			_watchInFlight();
+		}
+	}
+
+	var _defaultContentType = "application/x-www-form-urlencoded";
+
+	var _validCheck = function(/*Deferred*/dfd){
+		return dfd.ioArgs.xhr.readyState; //boolean
+	}
+	var _ioCheck = function(/*Deferred*/dfd){
+		return 4 == dfd.ioArgs.xhr.readyState; //boolean
+	}
+	var _resHandle = function(/*Deferred*/dfd){
+		var xhr = dfd.ioArgs.xhr;
+		if(_d._isDocumentOk(xhr)){
+			dfd.callback(dfd);
+		}else{
+			var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status);
+			err.status = xhr.status;
+			err.responseText = xhr.responseText;
+			dfd.errback(err);
+		}
+	}
+
+	dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){
+		//summary: Adds query params discovered by the io deferred construction to the URL.
+		//Only use this for operations which are fundamentally GET-type operations.
+		if(ioArgs.query.length){
+			ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query;
+			ioArgs.query = null;
+		}		
+	}
+
+	/*=====
+	dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, {
+		constructor: function(){
+			//	summary:
+			//		In addition to the properties listed for the dojo._IoArgs type,
+			//		the following properties are allowed for dojo.xhr* methods.
+			//	handleAs: String?
+			//		Acceptable values are: text (default), json, json-comment-optional,
+			//		json-comment-filtered, javascript, xml. See `dojo.contentHandlers`
+			//	sync: Boolean?
+			//		false is default. Indicates whether the request should
+			//		be a synchronous (blocking) request.
+			//	headers: Object?
+			//		Additional HTTP headers to send in the request.
+			//	failOk: Boolean?
+			//		false is default. Indicates whether a request should be
+			//		allowed to fail (and therefore no console error message in
+			//		the event of a failure)
+			this.handleAs = handleAs;
+			this.sync = sync;
+			this.headers = headers;
+			this.failOk = failOk;
+		}
+	});
+	=====*/
+
+	dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){
+		//	summary:
+		//		Sends an HTTP request with the given method.
+		//	description:
+		//		Sends an HTTP request with the given method.
+		//		See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts
+		//		for those HTTP methods. There are also methods for "raw" PUT and POST methods
+		//		via dojo.rawXhrPut() and dojo.rawXhrPost() respectively.
+		//	method:
+		//		HTTP method to be used, such as GET, POST, PUT, DELETE.  Should be uppercase.
+		//	hasBody:
+		//		If the request has an HTTP body, then pass true for hasBody.
+
+		//Make the Deferred object for this xhr request.
+		var dfd = _d._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError);
+		var ioArgs = dfd.ioArgs;
+
+		//Pass the args to _xhrObj, to allow alternate XHR calls based specific calls, like
+		//the one used for iframe proxies.
+		var xhr = ioArgs.xhr = _d._xhrObj(ioArgs.args);
+		//If XHR factory fails, cancel the deferred.
+		if(!xhr){
+			dfd.cancel();
+			return dfd;
+		}
+
+		//Allow for specifying the HTTP body completely.
+		if("postData" in args){
+			ioArgs.query = args.postData;
+		}else if("putData" in args){
+			ioArgs.query = args.putData;
+		}else if("rawBody" in args){
+			ioArgs.query = args.rawBody;
+		}else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) == -1){
+			//Check for hasBody being passed. If no hasBody,
+			//then only append query string if not a POST or PUT request.
+			_d._ioAddQueryToUrl(ioArgs);
+		}
+
+		// IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open).
+		// workaround for IE6's apply() "issues"
+		xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined);
+		if(args.headers){
+			for(var hdr in args.headers){
+				if(hdr.toLowerCase() === "content-type" && !args.contentType){
+					args.contentType = args.headers[hdr];
+				}else if(args.headers[hdr]){
+					//Only add header if it has a value. This allows for instnace, skipping
+					//insertion of X-Requested-With by specifying empty value.
+					xhr.setRequestHeader(hdr, args.headers[hdr]);
+				}
+			}
+		}
+		// FIXME: is this appropriate for all content types?
+		xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType);
+		if(!args.headers || !("X-Requested-With" in args.headers)){
+			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+		}
+		// FIXME: set other headers here!
+		_d._ioNotifyStart(dfd);
+		if(dojo.config.debugAtAllCosts){
+			xhr.send(ioArgs.query);
+		}else{
+			try{
+				xhr.send(ioArgs.query);
+			}catch(e){
+				ioArgs.error = e;
+				dfd.cancel();
+			}
+		}
+		_d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle);
+		xhr = null;
+		return dfd; // dojo.Deferred
+	}
+
+	dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){
+		//	summary: 
+		//		Sends an HTTP GET request to the server.
+		return _d.xhr("GET", args); // dojo.Deferred
+	}
+
+	dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){
+		//	summary:
+		//		Sends an HTTP POST request to the server. In addtion to the properties
+		//		listed for the dojo.__XhrArgs type, the following property is allowed:
+		//	postData:
+		//		String. Send raw data in the body of the POST request.
+		return _d.xhr("POST", args, true); // dojo.Deferred
+	}
+
+	dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){
+		//	summary:
+		//		Sends an HTTP PUT request to the server. In addtion to the properties
+		//		listed for the dojo.__XhrArgs type, the following property is allowed:
+		//	putData:
+		//		String. Send raw data in the body of the PUT request.
+		return _d.xhr("PUT", args, true); // dojo.Deferred
+	}
+
+	dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){
+		//	summary:
+		//		Sends an HTTP DELETE request to the server.
+		return _d.xhr("DELETE", args); //dojo.Deferred
+	}
+
+	/*
+	dojo.wrapForm = function(formNode){
+		//summary:
+		//		A replacement for FormBind, but not implemented yet.
+
+		// FIXME: need to think harder about what extensions to this we might
+		// want. What should we allow folks to do w/ this? What events to
+		// set/send?
+		throw new Error("dojo.wrapForm not yet implemented");
+	}
+	*/
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.fx"] = true;
+dojo.provide("dojo._base.fx");
+
+
+
+
+
+/*
+	Animation loosely package based on Dan Pupius' work, contributed under CLA:
+		http://pupius.co.uk/js/Toolkit.Drawing.js
+*/
+(function(){
+	var d = dojo;
+	var _mixin = d._mixin;
+
+	dojo._Line = function(/*int*/ start, /*int*/ end){
+		//	summary:
+		//		dojo._Line is the object used to generate values from a start value
+		//		to an end value
+		//	start: int
+		//		Beginning value for range
+		//	end: int
+		//		Ending value for range
+		this.start = start;
+		this.end = end;
+	};
+
+	dojo._Line.prototype.getValue = function(/*float*/ n){
+		//	summary: Returns the point on the line
+		//	n: a floating point number greater than 0 and less than 1
+		return ((this.end - this.start) * n) + this.start; // Decimal
+	};
+
+	dojo.Animation = function(args){
+		//	summary:
+		//		A generic animation class that fires callbacks into its handlers
+		//		object at various states.
+		//	description:
+		//		A generic animation class that fires callbacks into its handlers
+		//		object at various states. Nearly all dojo animation functions
+		//		return an instance of this method, usually without calling the
+		//		.play() method beforehand. Therefore, you will likely need to
+		//		call .play() on instances of `dojo.Animation` when one is
+		//		returned.
+		// args: Object
+		//		The 'magic argument', mixing all the properties into this
+		//		animation instance.
+
+		_mixin(this, args);
+		if(d.isArray(this.curve)){
+			this.curve = new d._Line(this.curve[0], this.curve[1]);
+		}
+
+	};
+
+	// Alias to drop come 2.0:
+	d._Animation = d.Animation;
+
+	d.extend(dojo.Animation, {
+		// duration: Integer
+		//		The time in milliseonds the animation will take to run
+		duration: 350,
+
+	/*=====
+		// curve: dojo._Line|Array
+		//		A two element array of start and end values, or a `dojo._Line` instance to be
+		//		used in the Animation.
+		curve: null,
+
+		// easing: Function?
+		//		A Function to adjust the acceleration (or deceleration) of the progress
+		//		across a dojo._Line
+		easing: null,
+	=====*/
+
+		// repeat: Integer?
+		//		The number of times to loop the animation
+		repeat: 0,
+
+		// rate: Integer?
+		//		the time in milliseconds to wait before advancing to next frame
+		//		(used as a fps timer: 1000/rate = fps)
+		rate: 20 /* 50 fps */,
+
+	/*=====
+		// delay: Integer?
+		//		The time in milliseconds to wait before starting animation after it
+		//		has been .play()'ed
+		delay: null,
+
+		// beforeBegin: Event?
+		//		Synthetic event fired before a dojo.Animation begins playing (synchronous)
+		beforeBegin: null,
+
+		// onBegin: Event?
+		//		Synthetic event fired as a dojo.Animation begins playing (useful?)
+		onBegin: null,
+
+		// onAnimate: Event?
+		//		Synthetic event fired at each interval of a `dojo.Animation`
+		onAnimate: null,
+
+		// onEnd: Event?
+		//		Synthetic event fired after the final frame of a `dojo.Animation`
+		onEnd: null,
+
+		// onPlay: Event?
+		//		Synthetic event fired any time a `dojo.Animation` is play()'ed
+		onPlay: null,
+
+		// onPause: Event?
+		//		Synthetic event fired when a `dojo.Animation` is paused
+		onPause: null,
+
+		// onStop: Event
+		//		Synthetic event fires when a `dojo.Animation` is stopped
+		onStop: null,
+
+	=====*/
+
+		_percent: 0,
+		_startRepeatCount: 0,
+
+		_getStep: function(){
+			var _p = this._percent,
+				_e = this.easing
+			;
+			return _e ? _e(_p) : _p;
+		},
+		_fire: function(/*Event*/ evt, /*Array?*/ args){
+			//	summary:
+			//		Convenience function.  Fire event "evt" and pass it the
+			//		arguments specified in "args".
+			//	description:
+			//		Convenience function.  Fire event "evt" and pass it the
+			//		arguments specified in "args".
+			//		Fires the callback in the scope of the `dojo.Animation`
+			//		instance.
+			//	evt:
+			//		The event to fire.
+			//	args:
+			//		The arguments to pass to the event.
+			var a = args||[];
+			if(this[evt]){
+				if(d.config.debugAtAllCosts){
+					this[evt].apply(this, a);
+				}else{
+					try{
+						this[evt].apply(this, a);
+					}catch(e){
+						// squelch and log because we shouldn't allow exceptions in
+						// synthetic event handlers to cause the internal timer to run
+						// amuck, potentially pegging the CPU. I'm not a fan of this
+						// squelch, but hopefully logging will make it clear what's
+						// going on
+						console.error("exception in animation handler for:", evt);
+						console.error(e);
+					}
+				}
+			}
+			return this; // dojo.Animation
+		},
+
+		play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+			// summary:
+			//		Start the animation.
+			// delay:
+			//		How many milliseconds to delay before starting.
+			// gotoStart:
+			//		If true, starts the animation from the beginning; otherwise,
+			//		starts it from its current position.
+			// returns: dojo.Animation
+			//		The instance to allow chaining.
+
+			var _t = this;
+			if(_t._delayTimer){ _t._clearTimer(); }
+			if(gotoStart){
+				_t._stopTimer();
+				_t._active = _t._paused = false;
+				_t._percent = 0;
+			}else if(_t._active && !_t._paused){
+				return _t;
+			}
+
+			_t._fire("beforeBegin", [_t.node]);
+
+			var de = delay || _t.delay,
+				_p = dojo.hitch(_t, "_play", gotoStart);
+
+			if(de > 0){
+				_t._delayTimer = setTimeout(_p, de);
+				return _t;
+			}
+			_p();
+			return _t;
+		},
+
+		_play: function(gotoStart){
+			var _t = this;
+			if(_t._delayTimer){ _t._clearTimer(); }
+			_t._startTime = new Date().valueOf();
+			if(_t._paused){
+				_t._startTime -= _t.duration * _t._percent;
+			}
+
+			_t._active = true;
+			_t._paused = false;
+			var value = _t.curve.getValue(_t._getStep());
+			if(!_t._percent){
+				if(!_t._startRepeatCount){
+					_t._startRepeatCount = _t.repeat;
+				}
+				_t._fire("onBegin", [value]);
+			}
+
+			_t._fire("onPlay", [value]);
+
+			_t._cycle();
+			return _t; // dojo.Animation
+		},
+
+		pause: function(){
+			// summary: Pauses a running animation.
+			var _t = this;
+			if(_t._delayTimer){ _t._clearTimer(); }
+			_t._stopTimer();
+			if(!_t._active){ return _t; /*dojo.Animation*/ }
+			_t._paused = true;
+			_t._fire("onPause", [_t.curve.getValue(_t._getStep())]);
+			return _t; // dojo.Animation
+		},
+
+		gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){
+			//	summary:
+			//		Sets the progress of the animation.
+			//	percent:
+			//		A percentage in decimal notation (between and including 0.0 and 1.0).
+			//	andPlay:
+			//		If true, play the animation after setting the progress.
+			var _t = this;
+			_t._stopTimer();
+			_t._active = _t._paused = true;
+			_t._percent = percent;
+			if(andPlay){ _t.play(); }
+			return _t; // dojo.Animation
+		},
+
+		stop: function(/*boolean?*/ gotoEnd){
+			// summary: Stops a running animation.
+			// gotoEnd: If true, the animation will end.
+			var _t = this;
+			if(_t._delayTimer){ _t._clearTimer(); }
+			if(!_t._timer){ return _t; /* dojo.Animation */ }
+			_t._stopTimer();
+			if(gotoEnd){
+				_t._percent = 1;
+			}
+			_t._fire("onStop", [_t.curve.getValue(_t._getStep())]);
+			_t._active = _t._paused = false;
+			return _t; // dojo.Animation
+		},
+
+		status: function(){
+			// summary:
+			//		Returns a string token representation of the status of
+			//		the animation, one of: "paused", "playing", "stopped"
+			if(this._active){
+				return this._paused ? "paused" : "playing"; // String
+			}
+			return "stopped"; // String
+		},
+
+		_cycle: function(){
+			var _t = this;
+			if(_t._active){
+				var curr = new Date().valueOf();
+				var step = (curr - _t._startTime) / (_t.duration);
+
+				if(step >= 1){
+					step = 1;
+				}
+				_t._percent = step;
+
+				// Perform easing
+				if(_t.easing){
+					step = _t.easing(step);
+				}
+
+				_t._fire("onAnimate", [_t.curve.getValue(step)]);
+
+				if(_t._percent < 1){
+					_t._startTimer();
+				}else{
+					_t._active = false;
+
+					if(_t.repeat > 0){
+						_t.repeat--;
+						_t.play(null, true);
+					}else if(_t.repeat == -1){
+						_t.play(null, true);
+					}else{
+						if(_t._startRepeatCount){
+							_t.repeat = _t._startRepeatCount;
+							_t._startRepeatCount = 0;
+						}
+					}
+					_t._percent = 0;
+					_t._fire("onEnd", [_t.node]);
+					!_t.repeat && _t._stopTimer();
+				}
+			}
+			return _t; // dojo.Animation
+		},
+
+		_clearTimer: function(){
+			// summary: Clear the play delay timer
+			clearTimeout(this._delayTimer);
+			delete this._delayTimer;
+		}
+
+	});
+
+	// the local timer, stubbed into all Animation instances
+	var ctr = 0,
+		timer = null,
+		runner = {
+			run: function(){}
+		};
+
+	d.extend(d.Animation, {
+
+		_startTimer: function(){
+			if(!this._timer){
+				this._timer = d.connect(runner, "run", this, "_cycle");
+				ctr++;
+			}
+			if(!timer){
+				timer = setInterval(d.hitch(runner, "run"), this.rate);
+			}
+		},
+
+		_stopTimer: function(){
+			if(this._timer){
+				d.disconnect(this._timer);
+				this._timer = null;
+				ctr--;
+			}
+			if(ctr <= 0){
+				clearInterval(timer);
+				timer = null;
+				ctr = 0;
+			}
+		}
+
+	});
+
+	var _makeFadeable =
+				d.isIE ? function(node){
+			// only set the zoom if the "tickle" value would be the same as the
+			// default
+			var ns = node.style;
+			// don't set the width to auto if it didn't already cascade that way.
+			// We don't want to f anyones designs
+			if(!ns.width.length && d.style(node, "width") == "auto"){
+				ns.width = "auto";
+			}
+		} :
+				function(){};
+
+	dojo._fade = function(/*Object*/ args){
+		//	summary:
+		//		Returns an animation that will fade the node defined by
+		//		args.node from the start to end values passed (args.start
+		//		args.end) (end is mandatory, start is optional)
+
+		args.node = d.byId(args.node);
+		var fArgs = _mixin({ properties: {} }, args),
+			props = (fArgs.properties.opacity = {});
+
+		props.start = !("start" in fArgs) ?
+			function(){
+				return +d.style(fArgs.node, "opacity")||0;
+			} : fArgs.start;
+		props.end = fArgs.end;
+
+		var anim = d.animateProperty(fArgs);
+		d.connect(anim, "beforeBegin", d.partial(_makeFadeable, fArgs.node));
+
+		return anim; // dojo.Animation
+	};
+
+	/*=====
+	dojo.__FadeArgs = function(node, duration, easing){
+		//	node: DOMNode|String
+		//		The node referenced in the animation
+		//	duration: Integer?
+		//		Duration of the animation in milliseconds.
+		//	easing: Function?
+		//		An easing function.
+		this.node = node;
+		this.duration = duration;
+		this.easing = easing;
+	}
+	=====*/
+
+	dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){
+		// summary:
+		//		Returns an animation that will fade node defined in 'args' from
+		//		its current opacity to fully opaque.
+		return d._fade(_mixin({ end: 1 }, args)); // dojo.Animation
+	};
+
+	dojo.fadeOut = function(/*dojo.__FadeArgs*/  args){
+		// summary:
+		//		Returns an animation that will fade node defined in 'args'
+		//		from its current opacity to fully transparent.
+		return d._fade(_mixin({ end: 0 }, args)); // dojo.Animation
+	};
+
+	dojo._defaultEasing = function(/*Decimal?*/ n){
+		// summary: The default easing function for dojo.Animation(s)
+		return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2);
+	};
+
+	var PropLine = function(properties){
+		// PropLine is an internal class which is used to model the values of
+		// an a group of CSS properties across an animation lifecycle. In
+		// particular, the "getValue" function handles getting interpolated
+		// values between start and end for a particular CSS value.
+		this._properties = properties;
+		for(var p in properties){
+			var prop = properties[p];
+			if(prop.start instanceof d.Color){
+				// create a reusable temp color object to keep intermediate results
+				prop.tempColor = new d.Color();
+			}
+		}
+	};
+
+	PropLine.prototype.getValue = function(r){
+		var ret = {};
+		for(var p in this._properties){
+			var prop = this._properties[p],
+				start = prop.start;
+			if(start instanceof d.Color){
+				ret[p] = d.blendColors(start, prop.end, r, prop.tempColor).toCss();
+			}else if(!d.isArray(start)){
+				ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0);
+			}
+		}
+		return ret;
+	};
+
+	/*=====
+	dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], {
+		// Properties: Object?
+		//	A hash map of style properties to Objects describing the transition,
+		//	such as the properties of dojo._Line with an additional 'units' property
+		properties: {}
+
+		//TODOC: add event callbacks
+	});
+	=====*/
+
+	dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){
+		// summary:
+		//		Returns an animation that will transition the properties of
+		//		node defined in `args` depending how they are defined in
+		//		`args.properties`
+		//
+		// description:
+		//		`dojo.animateProperty` is the foundation of most `dojo.fx`
+		//		animations. It takes an object of "properties" corresponding to
+		//		style properties, and animates them in parallel over a set
+		//		duration.
+		//
+		// example:
+		//		A simple animation that changes the width of the specified node.
+		//	|	dojo.animateProperty({
+		//	|		node: "nodeId",
+		//	|		properties: { width: 400 },
+		//	|	}).play();
+		//		Dojo figures out the start value for the width and converts the
+		//		integer specified for the width to the more expressive but
+		//		verbose form `{ width: { end: '400', units: 'px' } }` which you
+		//		can also specify directly. Defaults to 'px' if ommitted.
+		//
+		// example:
+		//		Animate width, height, and padding over 2 seconds... the
+		//		pedantic way:
+		//	|	dojo.animateProperty({ node: node, duration:2000,
+		//	|		properties: {
+		//	|			width: { start: '200', end: '400', units:"px" },
+		//	|			height: { start:'200', end: '400', units:"px" },
+		//	|			paddingTop: { start:'5', end:'50', units:"px" }
+		//	|		}
+		//	|	}).play();
+		//		Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties
+		//		are written using "mixed case", as the hyphen is illegal as an object key.
+		//
+		// example:
+		//		Plug in a different easing function and register a callback for
+		//		when the animation ends. Easing functions accept values between
+		//		zero and one and return a value on that basis. In this case, an
+		//		exponential-in curve.
+		//	|	dojo.animateProperty({
+		//	|		node: "nodeId",
+		//	|		// dojo figures out the start value
+		//	|		properties: { width: { end: 400 } },
+		//	|		easing: function(n){
+		//	|			return (n==0) ? 0 : Math.pow(2, 10 * (n - 1));
+		//	|		},
+		//	|		onEnd: function(node){
+		//	|			// called when the animation finishes. The animation
+		//	|			// target is passed to this function
+		//	|		}
+		//	|	}).play(500); // delay playing half a second
+		//
+		// example:
+		//		Like all `dojo.Animation`s, animateProperty returns a handle to the
+		//		Animation instance, which fires the events common to Dojo FX. Use `dojo.connect`
+		//		to access these events outside of the Animation definiton:
+		//	|	var anim = dojo.animateProperty({
+		//	|		node:"someId",
+		//	|		properties:{
+		//	|			width:400, height:500
+		//	|		}
+		//	|	});
+		//	|	dojo.connect(anim,"onEnd", function(){
+		//	|		console.log("animation ended");
+		//	|	});
+		//	|	// play the animation now:
+		//	|	anim.play();
+		//
+		// example:
+		//		Each property can be a function whose return value is substituted along.
+		//		Additionally, each measurement (eg: start, end) can be a function. The node
+		//		reference is passed direcly to callbacks.
+		//	|	dojo.animateProperty({
+		//	|		node:"mine",
+		//	|		properties:{
+		//	|			height:function(node){
+		//	|				// shrink this node by 50%
+		//	|				return dojo.position(node).h / 2
+		//	|			},
+		//	|			width:{
+		//	|				start:function(node){ return 100; },
+		//	|				end:function(node){ return 200; }
+		//	|			}
+		//	|		}
+		//	|	}).play();
+		//
+
+		var n = args.node = d.byId(args.node);
+		if(!args.easing){ args.easing = d._defaultEasing; }
+
+		var anim = new d.Animation(args);
+		d.connect(anim, "beforeBegin", anim, function(){
+			var pm = {};
+			for(var p in this.properties){
+				// Make shallow copy of properties into pm because we overwrite
+				// some values below. In particular if start/end are functions
+				// we don't want to overwrite them or the functions won't be
+				// called if the animation is reused.
+				if(p == "width" || p == "height"){
+					this.node.display = "block";
+				}
+				var prop = this.properties[p];
+				if(d.isFunction(prop)){
+					prop = prop(n);
+				}
+				prop = pm[p] = _mixin({}, (d.isObject(prop) ? prop: { end: prop }));
+
+				if(d.isFunction(prop.start)){
+					prop.start = prop.start(n);
+				}
+				if(d.isFunction(prop.end)){
+					prop.end = prop.end(n);
+				}
+				var isColor = (p.toLowerCase().indexOf("color") >= 0);
+				function getStyle(node, p){
+					// dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable:
+					var v = { height: node.offsetHeight, width: node.offsetWidth }[p];
+					if(v !== undefined){ return v; }
+					v = d.style(node, p);
+					return (p == "opacity") ? +v : (isColor ? v : parseFloat(v));
+				}
+				if(!("end" in prop)){
+					prop.end = getStyle(n, p);
+				}else if(!("start" in prop)){
+					prop.start = getStyle(n, p);
+				}
+
+				if(isColor){
+					prop.start = new d.Color(prop.start);
+					prop.end = new d.Color(prop.end);
+				}else{
+					prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start);
+				}
+			}
+			this.curve = new PropLine(pm);
+		});
+		d.connect(anim, "onAnimate", d.hitch(d, "style", anim.node));
+		return anim; // dojo.Animation
+	};
+
+	dojo.anim = function(	/*DOMNode|String*/	node,
+							/*Object*/			properties,
+							/*Integer?*/		duration,
+							/*Function?*/		easing,
+							/*Function?*/		onEnd,
+							/*Integer?*/		delay){
+		//	summary:
+		//		A simpler interface to `dojo.animateProperty()`, also returns
+		//		an instance of `dojo.Animation` but begins the animation
+		//		immediately, unlike nearly every other Dojo animation API.
+		//	description:
+		//		`dojo.anim` is a simpler (but somewhat less powerful) version
+		//		of `dojo.animateProperty`.  It uses defaults for many basic properties
+		//		and allows for positional parameters to be used in place of the
+		//		packed "property bag" which is used for other Dojo animation
+		//		methods.
+		//
+		//		The `dojo.Animation` object returned from `dojo.anim` will be
+		//		already playing when it is returned from this function, so
+		//		calling play() on it again is (usually) a no-op.
+		//	node:
+		//		a DOM node or the id of a node to animate CSS properties on
+		//	duration:
+		//		The number of milliseconds over which the animation
+		//		should run. Defaults to the global animation default duration
+		//		(350ms).
+		//	easing:
+		//		An easing function over which to calculate acceleration
+		//		and deceleration of the animation through its duration.
+		//		A default easing algorithm is provided, but you may
+		//		plug in any you wish. A large selection of easing algorithms
+		//		are available in `dojo.fx.easing`.
+		//	onEnd:
+		//		A function to be called when the animation finishes
+		//		running.
+		//	delay:
+		//		The number of milliseconds to delay beginning the
+		//		animation by. The default is 0.
+		//	example:
+		//		Fade out a node
+		//	|	dojo.anim("id", { opacity: 0 });
+		//	example:
+		//		Fade out a node over a full second
+		//	|	dojo.anim("id", { opacity: 0 }, 1000);
+		return d.animateProperty({ // dojo.Animation
+			node: node,
+			duration: duration || d.Animation.prototype.duration,
+			properties: properties,
+			easing: easing,
+			onEnd: onEnd
+		}).play(delay || 0);
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo._base.browser"] = true;
+dojo.provide("dojo._base.browser");
+
+
+
+
+
+
+
+
+
+
+//Need this to be the last code segment in base, so do not place any
+//dojo.requireIf calls in this file. Otherwise, due to how the build system
+//puts all requireIf dependencies after the current file, the require calls
+//could be called before all of base is defined.
+dojo.forEach(dojo.config.require, function(i){
+	dojo["require"](i);
+});
+
+}
+
+	//INSERT dojo.i18n._preloadLocalizations HERE
+
+	//Check if document already complete, and if so, just trigger page load
+	//listeners. NOTE: does not work with Firefox before 3.6. To support
+	//those browsers, set djConfig.afterOnLoad = true when you know Dojo is added
+	//after page load. Using a timeout so the rest of this
+	//script gets evaluated properly. This work needs to happen after the
+	//dojo.config.require work done in dojo._base.
+	if(dojo.isBrowser && (document.readyState === "complete" || dojo.config.afterOnLoad)){
+		window.setTimeout(dojo._loadInit, 100);
+	}
+})();
+
Index: trunk/web/dojo/dojo/DeferredList.js
===================================================================
--- trunk/web/dojo/dojo/DeferredList.js	(revision 0)
+++ trunk/web/dojo/dojo/DeferredList.js	(revision 9)
@@ -0,0 +1,58 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.DeferredList"]){
+dojo._hasResource["dojo.DeferredList"]=true;
+dojo.provide("dojo.DeferredList");
+dojo.DeferredList=function(_1,_2,_3,_4,_5){
+var _6=[];
+dojo.Deferred.call(this);
+var _7=this;
+if(_1.length===0&&!_2){
+this.resolve([0,[]]);
+}
+var _8=0;
+dojo.forEach(_1,function(_9,i){
+_9.then(function(_a){
+if(_2){
+_7.resolve([i,_a]);
+}else{
+_b(true,_a);
+}
+},function(_c){
+if(_3){
+_7.reject(_c);
+}else{
+_b(false,_c);
+}
+if(_4){
+return null;
+}
+throw _c;
+});
+function _b(_d,_e){
+_6[i]=[_d,_e];
+_8++;
+if(_8===_1.length){
+_7.resolve(_6);
+}
+};
+});
+};
+dojo.DeferredList.prototype=new dojo.Deferred();
+dojo.DeferredList.prototype.gatherResults=function(_f){
+var d=new dojo.DeferredList(_f,false,true,false);
+d.addCallback(function(_10){
+var ret=[];
+dojo.forEach(_10,function(_11){
+ret.push(_11[1]);
+});
+return ret;
+});
+return d;
+};
+}
Index: trunk/web/dojo/dojo/fx.js
===================================================================
--- trunk/web/dojo/dojo/fx.js	(revision 0)
+++ trunk/web/dojo/dojo/fx.js	(revision 9)
@@ -0,0 +1,252 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.fx"]){
+dojo._hasResource["dojo.fx"]=true;
+dojo.provide("dojo.fx");
+dojo.require("dojo.fx.Toggler");
+(function(){
+var d=dojo,_1={_fire:function(_2,_3){
+if(this[_2]){
+this[_2].apply(this,_3||[]);
+}
+return this;
+}};
+var _4=function(_5){
+this._index=-1;
+this._animations=_5||[];
+this._current=this._onAnimateCtx=this._onEndCtx=null;
+this.duration=0;
+d.forEach(this._animations,function(a){
+this.duration+=a.duration;
+if(a.delay){
+this.duration+=a.delay;
+}
+},this);
+};
+d.extend(_4,{_onAnimate:function(){
+this._fire("onAnimate",arguments);
+},_onEnd:function(){
+d.disconnect(this._onAnimateCtx);
+d.disconnect(this._onEndCtx);
+this._onAnimateCtx=this._onEndCtx=null;
+if(this._index+1==this._animations.length){
+this._fire("onEnd");
+}else{
+this._current=this._animations[++this._index];
+this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");
+this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");
+this._current.play(0,true);
+}
+},play:function(_6,_7){
+if(!this._current){
+this._current=this._animations[this._index=0];
+}
+if(!_7&&this._current.status()=="playing"){
+return this;
+}
+var _8=d.connect(this._current,"beforeBegin",this,function(){
+this._fire("beforeBegin");
+}),_9=d.connect(this._current,"onBegin",this,function(_a){
+this._fire("onBegin",arguments);
+}),_b=d.connect(this._current,"onPlay",this,function(_c){
+this._fire("onPlay",arguments);
+d.disconnect(_8);
+d.disconnect(_9);
+d.disconnect(_b);
+});
+if(this._onAnimateCtx){
+d.disconnect(this._onAnimateCtx);
+}
+this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");
+if(this._onEndCtx){
+d.disconnect(this._onEndCtx);
+}
+this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");
+this._current.play.apply(this._current,arguments);
+return this;
+},pause:function(){
+if(this._current){
+var e=d.connect(this._current,"onPause",this,function(_d){
+this._fire("onPause",arguments);
+d.disconnect(e);
+});
+this._current.pause();
+}
+return this;
+},gotoPercent:function(_e,_f){
+this.pause();
+var _10=this.duration*_e;
+this._current=null;
+d.some(this._animations,function(a){
+if(a.duration<=_10){
+this._current=a;
+return true;
+}
+_10-=a.duration;
+return false;
+});
+if(this._current){
+this._current.gotoPercent(_10/this._current.duration,_f);
+}
+return this;
+},stop:function(_11){
+if(this._current){
+if(_11){
+for(;this._index+1<this._animations.length;++this._index){
+this._animations[this._index].stop(true);
+}
+this._current=this._animations[this._index];
+}
+var e=d.connect(this._current,"onStop",this,function(arg){
+this._fire("onStop",arguments);
+d.disconnect(e);
+});
+this._current.stop();
+}
+return this;
+},status:function(){
+return this._current?this._current.status():"stopped";
+},destroy:function(){
+if(this._onAnimateCtx){
+d.disconnect(this._onAnimateCtx);
+}
+if(this._onEndCtx){
+d.disconnect(this._onEndCtx);
+}
+}});
+d.extend(_4,_1);
+dojo.fx.chain=function(_12){
+return new _4(_12);
+};
+var _13=function(_14){
+this._animations=_14||[];
+this._connects=[];
+this._finished=0;
+this.duration=0;
+d.forEach(_14,function(a){
+var _15=a.duration;
+if(a.delay){
+_15+=a.delay;
+}
+if(this.duration<_15){
+this.duration=_15;
+}
+this._connects.push(d.connect(a,"onEnd",this,"_onEnd"));
+},this);
+this._pseudoAnimation=new d.Animation({curve:[0,1],duration:this.duration});
+var _16=this;
+d.forEach(["beforeBegin","onBegin","onPlay","onAnimate","onPause","onStop","onEnd"],function(evt){
+_16._connects.push(d.connect(_16._pseudoAnimation,evt,function(){
+_16._fire(evt,arguments);
+}));
+});
+};
+d.extend(_13,{_doAction:function(_17,_18){
+d.forEach(this._animations,function(a){
+a[_17].apply(a,_18);
+});
+return this;
+},_onEnd:function(){
+if(++this._finished>this._animations.length){
+this._fire("onEnd");
+}
+},_call:function(_19,_1a){
+var t=this._pseudoAnimation;
+t[_19].apply(t,_1a);
+},play:function(_1b,_1c){
+this._finished=0;
+this._doAction("play",arguments);
+this._call("play",arguments);
+return this;
+},pause:function(){
+this._doAction("pause",arguments);
+this._call("pause",arguments);
+return this;
+},gotoPercent:function(_1d,_1e){
+var ms=this.duration*_1d;
+d.forEach(this._animations,function(a){
+a.gotoPercent(a.duration<ms?1:(ms/a.duration),_1e);
+});
+this._call("gotoPercent",arguments);
+return this;
+},stop:function(_1f){
+this._doAction("stop",arguments);
+this._call("stop",arguments);
+return this;
+},status:function(){
+return this._pseudoAnimation.status();
+},destroy:function(){
+d.forEach(this._connects,dojo.disconnect);
+}});
+d.extend(_13,_1);
+dojo.fx.combine=function(_20){
+return new _13(_20);
+};
+dojo.fx.wipeIn=function(_21){
+var _22=_21.node=d.byId(_21.node),s=_22.style,o;
+var _23=d.animateProperty(d.mixin({properties:{height:{start:function(){
+o=s.overflow;
+s.overflow="hidden";
+if(s.visibility=="hidden"||s.display=="none"){
+s.height="1px";
+s.display="";
+s.visibility="";
+return 1;
+}else{
+var _24=d.style(_22,"height");
+return Math.max(_24,1);
+}
+},end:function(){
+return _22.scrollHeight;
+}}}},_21));
+d.connect(_23,"onEnd",function(){
+s.height="auto";
+s.overflow=o;
+});
+return _23;
+};
+dojo.fx.wipeOut=function(_25){
+var _26=_25.node=d.byId(_25.node),s=_26.style,o;
+var _27=d.animateProperty(d.mixin({properties:{height:{end:1}}},_25));
+d.connect(_27,"beforeBegin",function(){
+o=s.overflow;
+s.overflow="hidden";
+s.display="";
+});
+d.connect(_27,"onEnd",function(){
+s.overflow=o;
+s.height="auto";
+s.display="none";
+});
+return _27;
+};
+dojo.fx.slideTo=function(_28){
+var _29=_28.node=d.byId(_28.node),top=null,_2a=null;
+var _2b=(function(n){
+return function(){
+var cs=d.getComputedStyle(n);
+var pos=cs.position;
+top=(pos=="absolute"?n.offsetTop:parseInt(cs.top)||0);
+_2a=(pos=="absolute"?n.offsetLeft:parseInt(cs.left)||0);
+if(pos!="absolute"&&pos!="relative"){
+var ret=d.position(n,true);
+top=ret.y;
+_2a=ret.x;
+n.style.position="absolute";
+n.style.top=top+"px";
+n.style.left=_2a+"px";
+}
+};
+})(_29);
+_2b();
+var _2c=d.animateProperty(d.mixin({properties:{top:_28.top||0,left:_28.left||0}},_28));
+d.connect(_2c,"beforeBegin",_2c,_2b);
+return _2c;
+};
+})();
+}
Index: trunk/web/dojo/dojo/date.js
===================================================================
--- trunk/web/dojo/dojo/date.js	(revision 0)
+++ trunk/web/dojo/dojo/date.js	(revision 9)
@@ -0,0 +1,213 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.date"]){
+dojo._hasResource["dojo.date"]=true;
+dojo.provide("dojo.date");
+dojo.date.getDaysInMonth=function(_1){
+var _2=_1.getMonth();
+var _3=[31,28,31,30,31,30,31,31,30,31,30,31];
+if(_2==1&&dojo.date.isLeapYear(_1)){
+return 29;
+}
+return _3[_2];
+};
+dojo.date.isLeapYear=function(_4){
+var _5=_4.getFullYear();
+return !(_5%400)||(!(_5%4)&&!!(_5%100));
+};
+dojo.date.getTimezoneName=function(_6){
+var _7=_6.toString();
+var tz="";
+var _8;
+var _9=_7.indexOf("(");
+if(_9>-1){
+tz=_7.substring(++_9,_7.indexOf(")"));
+}else{
+var _a=/([A-Z\/]+) \d{4}$/;
+if((_8=_7.match(_a))){
+tz=_8[1];
+}else{
+_7=_6.toLocaleString();
+_a=/ ([A-Z\/]+)$/;
+if((_8=_7.match(_a))){
+tz=_8[1];
+}
+}
+}
+return (tz=="AM"||tz=="PM")?"":tz;
+};
+dojo.date.compare=function(_b,_c,_d){
+_b=new Date(+_b);
+_c=new Date(+(_c||new Date()));
+if(_d=="date"){
+_b.setHours(0,0,0,0);
+_c.setHours(0,0,0,0);
+}else{
+if(_d=="time"){
+_b.setFullYear(0,0,0);
+_c.setFullYear(0,0,0);
+}
+}
+if(_b>_c){
+return 1;
+}
+if(_b<_c){
+return -1;
+}
+return 0;
+};
+dojo.date.add=function(_e,_f,_10){
+var sum=new Date(+_e);
+var _11=false;
+var _12="Date";
+switch(_f){
+case "day":
+break;
+case "weekday":
+var _13,_14;
+var mod=_10%5;
+if(!mod){
+_13=(_10>0)?5:-5;
+_14=(_10>0)?((_10-5)/5):((_10+5)/5);
+}else{
+_13=mod;
+_14=parseInt(_10/5);
+}
+var _15=_e.getDay();
+var adj=0;
+if(_15==6&&_10>0){
+adj=1;
+}else{
+if(_15==0&&_10<0){
+adj=-1;
+}
+}
+var _16=_15+_13;
+if(_16==0||_16==6){
+adj=(_10>0)?2:-2;
+}
+_10=(7*_14)+_13+adj;
+break;
+case "year":
+_12="FullYear";
+_11=true;
+break;
+case "week":
+_10*=7;
+break;
+case "quarter":
+_10*=3;
+case "month":
+_11=true;
+_12="Month";
+break;
+default:
+_12="UTC"+_f.charAt(0).toUpperCase()+_f.substring(1)+"s";
+}
+if(_12){
+sum["set"+_12](sum["get"+_12]()+_10);
+}
+if(_11&&(sum.getDate()<_e.getDate())){
+sum.setDate(0);
+}
+return sum;
+};
+dojo.date.difference=function(_17,_18,_19){
+_18=_18||new Date();
+_19=_19||"day";
+var _1a=_18.getFullYear()-_17.getFullYear();
+var _1b=1;
+switch(_19){
+case "quarter":
+var m1=_17.getMonth();
+var m2=_18.getMonth();
+var q1=Math.floor(m1/3)+1;
+var q2=Math.floor(m2/3)+1;
+q2+=(_1a*4);
+_1b=q2-q1;
+break;
+case "weekday":
+var _1c=Math.round(dojo.date.difference(_17,_18,"day"));
+var _1d=parseInt(dojo.date.difference(_17,_18,"week"));
+var mod=_1c%7;
+if(mod==0){
+_1c=_1d*5;
+}else{
+var adj=0;
+var _1e=_17.getDay();
+var _1f=_18.getDay();
+_1d=parseInt(_1c/7);
+mod=_1c%7;
+var _20=new Date(_17);
+_20.setDate(_20.getDate()+(_1d*7));
+var _21=_20.getDay();
+if(_1c>0){
+switch(true){
+case _1e==6:
+adj=-1;
+break;
+case _1e==0:
+adj=0;
+break;
+case _1f==6:
+adj=-1;
+break;
+case _1f==0:
+adj=-2;
+break;
+case (_21+mod)>5:
+adj=-2;
+}
+}else{
+if(_1c<0){
+switch(true){
+case _1e==6:
+adj=0;
+break;
+case _1e==0:
+adj=1;
+break;
+case _1f==6:
+adj=2;
+break;
+case _1f==0:
+adj=1;
+break;
+case (_21+mod)<0:
+adj=2;
+}
+}
+}
+_1c+=adj;
+_1c-=(_1d*2);
+}
+_1b=_1c;
+break;
+case "year":
+_1b=_1a;
+break;
+case "month":
+_1b=(_18.getMonth()-_17.getMonth())+(_1a*12);
+break;
+case "week":
+_1b=parseInt(dojo.date.difference(_17,_18,"day")/7);
+break;
+case "day":
+_1b/=24;
+case "hour":
+_1b/=60;
+case "minute":
+_1b/=60;
+case "second":
+_1b/=1000;
+case "millisecond":
+_1b*=_18.getTime()-_17.getTime();
+}
+return Math.round(_1b);
+};
+}
Index: trunk/web/dojo/dojo/robotx.js
===================================================================
--- trunk/web/dojo/dojo/robotx.js	(revision 0)
+++ trunk/web/dojo/dojo/robotx.js	(revision 9)
@@ -0,0 +1,80 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.robotx"]){
+dojo._hasResource["dojo.robotx"]=true;
+dojo.provide("dojo.robotx");
+dojo.require("dojo.robot");
+dojo.experimental("dojo.robotx");
+(function(){
+doh.robot._runsemaphore.lock.push("dojo.robotx.lock");
+var _1=document.getElementById("robotapplication");
+var _2=dojo.connect(doh,"_groupStarted",function(){
+dojo.disconnect(_2);
+_1.style.visibility="visible";
+});
+var _3=function(){
+doh.robot._updateDocument();
+_3=null;
+var _4=(document.compatMode=="BackCompat")?document.body:document.documentElement;
+var _5=document.getElementById("robotconsole").offsetHeight;
+if(_5){
+_1.style.height=(_4.clientHeight-_5)+"px";
+}
+doh.run();
+};
+var _6=function(){
+if(_3){
+_3();
+}
+var _7=dojo.connect(dojo.body(),"onunload",function(){
+dojo.global=window;
+dojo.doc=document;
+dojo.disconnect(_7);
+});
+};
+dojo.config.debugContainerId="robotconsole";
+dojo.config.debugHeight=dojo.config.debugHeight||200;
+document.write("<div id=\"robotconsole\" style=\"position:absolute;left:0px;bottom:0px;width:100%;\"></div>");
+_1=document.createElement("iframe");
+_1.setAttribute("ALLOWTRANSPARENCY","true");
+_1.scrolling=dojo.isIE?"yes":"auto";
+dojo.style(_1,{visibility:"hidden",border:"0px none",padding:"0px",margin:"0px",position:"absolute",left:"0px",top:"0px",width:"100%",height:"100%"});
+if(_1["attachEvent"]!==undefined){
+_1.attachEvent("onload",_6);
+}else{
+dojo.connect(_1,"onload",_6);
+}
+dojo.mixin(doh.robot,{_updateDocument:function(){
+dojo.setContext(_1.contentWindow,_1.contentWindow.document);
+var _8=dojo.global;
+if(_8["dojo"]){
+dojo._topics=_8.dojo._topics;
+}
+},initRobot:function(_9){
+_1.src=_9;
+dojo.addOnLoad(function(){
+var _a={overflow:dojo.isWebKit?"hidden":"visible",margin:"0px",borderWidth:"0px",height:"100%",width:"100%"};
+dojo.style(document.documentElement,_a);
+dojo.style(document.body,_a);
+document.body.appendChild(_1);
+var _b=document.createElement("base");
+_b.href=_9;
+document.getElementsByTagName("head")[0].appendChild(_b);
+});
+},waitForPageToLoad:function(_c){
+var d=new doh.Deferred();
+_3=function(){
+_3=null;
+doh.robot._updateDocument();
+d.callback(true);
+};
+_c();
+return d;
+}});
+})();
+}
Index: trunk/web/dojo/dojo/NodeList-manipulate.js
===================================================================
--- trunk/web/dojo/dojo/NodeList-manipulate.js	(revision 0)
+++ trunk/web/dojo/dojo/NodeList-manipulate.js	(revision 9)
@@ -0,0 +1,212 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.NodeList-manipulate"]){
+dojo._hasResource["dojo.NodeList-manipulate"]=true;
+dojo.provide("dojo.NodeList-manipulate");
+(function(){
+function _1(_2){
+var _3="",ch=_2.childNodes;
+for(var i=0,n;n=ch[i];i++){
+if(n.nodeType!=8){
+if(n.nodeType==1){
+_3+=_1(n);
+}else{
+_3+=n.nodeValue;
+}
+}
+}
+return _3;
+};
+function _4(_5){
+while(_5.childNodes[0]&&_5.childNodes[0].nodeType==1){
+_5=_5.childNodes[0];
+}
+return _5;
+};
+function _6(_7,_8){
+if(typeof _7=="string"){
+_7=dojo._toDom(_7,(_8&&_8.ownerDocument));
+if(_7.nodeType==11){
+_7=_7.childNodes[0];
+}
+}else{
+if(_7.nodeType==1&&_7.parentNode){
+_7=_7.cloneNode(false);
+}
+}
+return _7;
+};
+dojo.extend(dojo.NodeList,{_placeMultiple:function(_9,_a){
+var _b=typeof _9=="string"||_9.nodeType?dojo.query(_9):_9;
+var _c=[];
+for(var i=0;i<_b.length;i++){
+var _d=_b[i];
+var _e=this.length;
+for(var j=_e-1,_f;_f=this[j];j--){
+if(i>0){
+_f=this._cloneNode(_f);
+_c.unshift(_f);
+}
+if(j==_e-1){
+dojo.place(_f,_d,_a);
+}else{
+_d.parentNode.insertBefore(_f,_d);
+}
+_d=_f;
+}
+}
+if(_c.length){
+_c.unshift(0);
+_c.unshift(this.length-1);
+Array.prototype.splice.apply(this,_c);
+}
+return this;
+},innerHTML:function(_10){
+if(arguments.length){
+return this.addContent(_10,"only");
+}else{
+return this[0].innerHTML;
+}
+},text:function(_11){
+if(arguments.length){
+for(var i=0,_12;_12=this[i];i++){
+if(_12.nodeType==1){
+dojo.empty(_12);
+_12.appendChild(_12.ownerDocument.createTextNode(_11));
+}
+}
+return this;
+}else{
+var _13="";
+for(i=0;_12=this[i];i++){
+_13+=_1(_12);
+}
+return _13;
+}
+},val:function(_14){
+if(arguments.length){
+var _15=dojo.isArray(_14);
+for(var _16=0,_17;_17=this[_16];_16++){
+var _18=_17.nodeName.toUpperCase();
+var _19=_17.type;
+var _1a=_15?_14[_16]:_14;
+if(_18=="SELECT"){
+var _1b=_17.options;
+for(var i=0;i<_1b.length;i++){
+var opt=_1b[i];
+if(_17.multiple){
+opt.selected=(dojo.indexOf(_14,opt.value)!=-1);
+}else{
+opt.selected=(opt.value==_1a);
+}
+}
+}else{
+if(_19=="checkbox"||_19=="radio"){
+_17.checked=(_17.value==_1a);
+}else{
+_17.value=_1a;
+}
+}
+}
+return this;
+}else{
+_17=this[0];
+if(!_17||_17.nodeType!=1){
+return undefined;
+}
+_14=_17.value||"";
+if(_17.nodeName.toUpperCase()=="SELECT"&&_17.multiple){
+_14=[];
+_1b=_17.options;
+for(i=0;i<_1b.length;i++){
+opt=_1b[i];
+if(opt.selected){
+_14.push(opt.value);
+}
+}
+if(!_14.length){
+_14=null;
+}
+}
+return _14;
+}
+},append:function(_1c){
+return this.addContent(_1c,"last");
+},appendTo:function(_1d){
+return this._placeMultiple(_1d,"last");
+},prepend:function(_1e){
+return this.addContent(_1e,"first");
+},prependTo:function(_1f){
+return this._placeMultiple(_1f,"first");
+},after:function(_20){
+return this.addContent(_20,"after");
+},insertAfter:function(_21){
+return this._placeMultiple(_21,"after");
+},before:function(_22){
+return this.addContent(_22,"before");
+},insertBefore:function(_23){
+return this._placeMultiple(_23,"before");
+},remove:dojo.NodeList.prototype.orphan,wrap:function(_24){
+if(this[0]){
+_24=_6(_24,this[0]);
+for(var i=0,_25;_25=this[i];i++){
+var _26=this._cloneNode(_24);
+if(_25.parentNode){
+_25.parentNode.replaceChild(_26,_25);
+}
+var _27=_4(_26);
+_27.appendChild(_25);
+}
+}
+return this;
+},wrapAll:function(_28){
+if(this[0]){
+_28=_6(_28,this[0]);
+this[0].parentNode.replaceChild(_28,this[0]);
+var _29=_4(_28);
+for(var i=0,_2a;_2a=this[i];i++){
+_29.appendChild(_2a);
+}
+}
+return this;
+},wrapInner:function(_2b){
+if(this[0]){
+_2b=_6(_2b,this[0]);
+for(var i=0;i<this.length;i++){
+var _2c=this._cloneNode(_2b);
+this._wrap(dojo._toArray(this[i].childNodes),null,this._NodeListCtor).wrapAll(_2c);
+}
+}
+return this;
+},replaceWith:function(_2d){
+_2d=this._normalize(_2d,this[0]);
+for(var i=0,_2e;_2e=this[i];i++){
+this._place(_2d,_2e,"before",i>0);
+_2e.parentNode.removeChild(_2e);
+}
+return this;
+},replaceAll:function(_2f){
+var nl=dojo.query(_2f);
+var _30=this._normalize(this,this[0]);
+for(var i=0,_31;_31=nl[i];i++){
+this._place(_30,_31,"before",i>0);
+_31.parentNode.removeChild(_31);
+}
+return this;
+},clone:function(){
+var ary=[];
+for(var i=0;i<this.length;i++){
+ary.push(this._cloneNode(this[i]));
+}
+return this._wrap(ary,this,this._NodeListCtor);
+}});
+if(!dojo.NodeList.prototype.html){
+dojo.NodeList.prototype.html=dojo.NodeList.prototype.innerHTML;
+}
+})();
+}
Index: trunk/web/dojo/dojo/i18n.js
===================================================================
--- trunk/web/dojo/dojo/i18n.js	(revision 0)
+++ trunk/web/dojo/dojo/i18n.js	(revision 9)
@@ -0,0 +1,171 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.i18n"]){
+dojo._hasResource["dojo.i18n"]=true;
+dojo.provide("dojo.i18n");
+dojo.i18n.getLocalization=function(_1,_2,_3){
+_3=dojo.i18n.normalizeLocale(_3);
+var _4=_3.split("-");
+var _5=[_1,"nls",_2].join(".");
+var _6=dojo._loadedModules[_5];
+if(_6){
+var _7;
+for(var i=_4.length;i>0;i--){
+var _8=_4.slice(0,i).join("_");
+if(_6[_8]){
+_7=_6[_8];
+break;
+}
+}
+if(!_7){
+_7=_6.ROOT;
+}
+if(_7){
+var _9=function(){
+};
+_9.prototype=_7;
+return new _9();
+}
+}
+throw new Error("Bundle not found: "+_2+" in "+_1+" , locale="+_3);
+};
+dojo.i18n.normalizeLocale=function(_a){
+var _b=_a?_a.toLowerCase():dojo.locale;
+if(_b=="root"){
+_b="ROOT";
+}
+return _b;
+};
+dojo.i18n._requireLocalization=function(_c,_d,_e,_f){
+var _10=dojo.i18n.normalizeLocale(_e);
+var _11=[_c,"nls",_d].join(".");
+var _12="";
+if(_f){
+var _13=_f.split(",");
+for(var i=0;i<_13.length;i++){
+if(_10["indexOf"](_13[i])==0){
+if(_13[i].length>_12.length){
+_12=_13[i];
+}
+}
+}
+if(!_12){
+_12="ROOT";
+}
+}
+var _14=_f?_12:_10;
+var _15=dojo._loadedModules[_11];
+var _16=null;
+if(_15){
+if(dojo.config.localizationComplete&&_15._built){
+return;
+}
+var _17=_14.replace(/-/g,"_");
+var _18=_11+"."+_17;
+_16=dojo._loadedModules[_18];
+}
+if(!_16){
+_15=dojo["provide"](_11);
+var _19=dojo._getModuleSymbols(_c);
+var _1a=_19.concat("nls").join("/");
+var _1b;
+dojo.i18n._searchLocalePath(_14,_f,function(loc){
+var _1c=loc.replace(/-/g,"_");
+var _1d=_11+"."+_1c;
+var _1e=false;
+if(!dojo._loadedModules[_1d]){
+dojo["provide"](_1d);
+var _1f=[_1a];
+if(loc!="ROOT"){
+_1f.push(loc);
+}
+_1f.push(_d);
+var _20=_1f.join("/")+".js";
+_1e=dojo._loadPath(_20,null,function(_21){
+var _22=function(){
+};
+_22.prototype=_1b;
+_15[_1c]=new _22();
+for(var j in _21){
+_15[_1c][j]=_21[j];
+}
+});
+}else{
+_1e=true;
+}
+if(_1e&&_15[_1c]){
+_1b=_15[_1c];
+}else{
+_15[_1c]=_1b;
+}
+if(_f){
+return true;
+}
+});
+}
+if(_f&&_10!=_12){
+_15[_10.replace(/-/g,"_")]=_15[_12.replace(/-/g,"_")];
+}
+};
+(function(){
+var _23=dojo.config.extraLocale;
+if(_23){
+if(!_23 instanceof Array){
+_23=[_23];
+}
+var req=dojo.i18n._requireLocalization;
+dojo.i18n._requireLocalization=function(m,b,_24,_25){
+req(m,b,_24,_25);
+if(_24){
+return;
+}
+for(var i=0;i<_23.length;i++){
+req(m,b,_23[i],_25);
+}
+};
+}
+})();
+dojo.i18n._searchLocalePath=function(_26,_27,_28){
+_26=dojo.i18n.normalizeLocale(_26);
+var _29=_26.split("-");
+var _2a=[];
+for(var i=_29.length;i>0;i--){
+_2a.push(_29.slice(0,i).join("-"));
+}
+_2a.push(false);
+if(_27){
+_2a.reverse();
+}
+for(var j=_2a.length-1;j>=0;j--){
+var loc=_2a[j]||"ROOT";
+var _2b=_28(loc);
+if(_2b){
+break;
+}
+}
+};
+dojo.i18n._preloadLocalizations=function(_2c,_2d){
+function _2e(_2f){
+_2f=dojo.i18n.normalizeLocale(_2f);
+dojo.i18n._searchLocalePath(_2f,true,function(loc){
+for(var i=0;i<_2d.length;i++){
+if(_2d[i]==loc){
+dojo["require"](_2c+"_"+loc);
+return true;
+}
+}
+return false;
+});
+};
+_2e();
+var _30=dojo.config.extraLocale||[];
+for(var i=0;i<_30.length;i++){
+_2e(_30[i]);
+}
+};
+}
Index: trunk/web/dojo/dojo/robot.js
===================================================================
--- trunk/web/dojo/dojo/robot.js	(revision 0)
+++ trunk/web/dojo/dojo/robot.js	(revision 9)
@@ -0,0 +1,89 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojo.robot"]){
+dojo._hasResource["dojo.robot"]=true;
+dojo.provide("dojo.robot");
+dojo.experimental("dojo.robot");
+dojo.require("doh.robot");
+dojo.require("dojo.window");
+(function(){
+dojo.mixin(doh.robot,{_resolveNode:function(n){
+if(typeof n=="function"){
+n=n();
+}
+return n?dojo.byId(n):null;
+},_scrollIntoView:function(n){
+var d=dojo,dr=doh.robot,p=null;
+d.forEach(dr._getWindowChain(n),function(w){
+d.withGlobal(w,function(){
+var p2=d.position(n,false),b=d._getPadBorderExtents(n),_1=null;
+if(!p){
+p=p2;
+}else{
+_1=p;
+p={x:p.x+p2.x+b.l,y:p.y+p2.y+b.t,w:p.w,h:p.h};
+}
+dojo.window.scrollIntoView(n,p);
+p2=d.position(n,false);
+if(!_1){
+p=p2;
+}else{
+p={x:_1.x+p2.x+b.l,y:_1.y+p2.y+b.t,w:p.w,h:p.h};
+}
+n=w.frameElement;
+});
+});
+},_position:function(n){
+var d=dojo,p=null,M=Math.max,m=Math.min;
+d.forEach(doh.robot._getWindowChain(n),function(w){
+d.withGlobal(w,function(){
+var p2=d.position(n,false),b=d._getPadBorderExtents(n);
+if(!p){
+p=p2;
+}else{
+var _2;
+d.withGlobal(n.contentWindow,function(){
+_2=dojo.window.getBox();
+});
+p2.r=p2.x+_2.w;
+p2.b=p2.y+_2.h;
+p={x:M(p.x+p2.x,p2.x)+b.l,y:M(p.y+p2.y,p2.y)+b.t,r:m(p.x+p2.x+p.w,p2.r)+b.l,b:m(p.y+p2.y+p.h,p2.b)+b.t};
+p.w=p.r-p.x;
+p.h=p.b-p.y;
+}
+n=w.frameElement;
+});
+});
+return p;
+},_getWindowChain:function(n){
+var cW=dojo.window.get(n.ownerDocument);
+var _3=[cW];
+var f=cW.frameElement;
+return (cW==dojo.global||f==null)?_3:_3.concat(doh.robot._getWindowChain(f));
+},scrollIntoView:function(_4,_5){
+doh.robot.sequence(function(){
+doh.robot._scrollIntoView(doh.robot._resolveNode(_4));
+},_5);
+},mouseMoveAt:function(_6,_7,_8,_9,_a){
+doh.robot._assertRobot();
+_8=_8||100;
+this.sequence(function(){
+_6=doh.robot._resolveNode(_6);
+doh.robot._scrollIntoView(_6);
+var _b=doh.robot._position(_6);
+if(_a===undefined){
+_9=_b.w/2;
+_a=_b.h/2;
+}
+var x=_b.x+_9;
+var y=_b.y+_a;
+doh.robot._mouseMove(x,y,false,_8);
+},_7,_8);
+}});
+})();
+}
Index: trunk/web/dojo/dijit/MenuBar.js
===================================================================
--- trunk/web/dojo/dijit/MenuBar.js	(revision 0)
+++ trunk/web/dojo/dijit/MenuBar.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuBar"]){
+dojo._hasResource["dijit.MenuBar"]=true;
+dojo.provide("dijit.MenuBar");
+dojo.require("dijit.Menu");
+dojo.declare("dijit.MenuBar",dijit._MenuBase,{templateString:dojo.cache("dijit","templates/MenuBar.html","<div class=\"dijitMenuBar dijitMenuPassive\" dojoAttachPoint=\"containerNode\"  waiRole=\"menubar\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress: _onKeyPress\"></div>\n"),baseClass:"dijitMenuBar",_isMenuBar:true,postCreate:function(){
+var k=dojo.keys,l=this.isLeftToRight();
+this.connectKeyNavHandlers(l?[k.LEFT_ARROW]:[k.RIGHT_ARROW],l?[k.RIGHT_ARROW]:[k.LEFT_ARROW]);
+this._orient=this.isLeftToRight()?{BL:"TL"}:{BR:"TR"};
+},focusChild:function(_1){
+var _2=this.focusedChild,_3=_2&&_2.popup&&_2.popup.isShowingNow;
+this.inherited(arguments);
+if(_3&&_1.popup&&!_1.disabled){
+this._openPopup();
+}
+},_onKeyPress:function(_4){
+if(_4.ctrlKey||_4.altKey){
+return;
+}
+switch(_4.charOrCode){
+case dojo.keys.DOWN_ARROW:
+this._moveToPopup(_4);
+dojo.stopEvent(_4);
+}
+},onItemClick:function(_5,_6){
+if(_5.popup&&_5.popup.isShowingNow){
+_5.popup.onCancel();
+}else{
+this.inherited(arguments);
+}
+}});
+}
Index: trunk/web/dojo/dijit/Tooltip.js
===================================================================
--- trunk/web/dojo/dijit/Tooltip.js	(revision 0)
+++ trunk/web/dojo/dijit/Tooltip.js	(revision 9)
@@ -0,0 +1,155 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Tooltip"]){
+dojo._hasResource["dijit.Tooltip"]=true;
+dojo.provide("dijit.Tooltip");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{duration:dijit.defaultDuration,templateString:dojo.cache("dijit","templates/Tooltip.html","<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n"),postCreate:function(){
+dojo.body().appendChild(this.domNode);
+this.bgIframe=new dijit.BackgroundIframe(this.domNode);
+this.fadeIn=dojo.fadeIn({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onShow")});
+this.fadeOut=dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onHide")});
+},show:function(_1,_2,_3,_4){
+if(this.aroundNode&&this.aroundNode===_2){
+return;
+}
+if(this.fadeOut.status()=="playing"){
+this._onDeck=arguments;
+return;
+}
+this.containerNode.innerHTML=_1;
+var _5=dijit.placeOnScreenAroundElement(this.domNode,_2,dijit.getPopupAroundAlignment((_3&&_3.length)?_3:dijit.Tooltip.defaultPosition,!_4),dojo.hitch(this,"orient"));
+dojo.style(this.domNode,"opacity",0);
+this.fadeIn.play();
+this.isShowingNow=true;
+this.aroundNode=_2;
+},orient:function(_6,_7,_8){
+_6.className="dijitTooltip "+{"BL-TL":"dijitTooltipBelow dijitTooltipABLeft","TL-BL":"dijitTooltipAbove dijitTooltipABLeft","BR-TR":"dijitTooltipBelow dijitTooltipABRight","TR-BR":"dijitTooltipAbove dijitTooltipABRight","BR-BL":"dijitTooltipRight","BL-BR":"dijitTooltipLeft"}[_7+"-"+_8];
+},_onShow:function(){
+if(dojo.isIE){
+this.domNode.style.filter="";
+}
+},hide:function(_9){
+if(this._onDeck&&this._onDeck[1]==_9){
+this._onDeck=null;
+}else{
+if(this.aroundNode===_9){
+this.fadeIn.stop();
+this.isShowingNow=false;
+this.aroundNode=null;
+this.fadeOut.play();
+}else{
+}
+}
+},_onHide:function(){
+this.domNode.style.cssText="";
+this.containerNode.innerHTML="";
+if(this._onDeck){
+this.show.apply(this,this._onDeck);
+this._onDeck=null;
+}
+}});
+dijit.showTooltip=function(_a,_b,_c,_d){
+if(!dijit._masterTT){
+dijit._masterTT=new dijit._MasterTooltip();
+}
+return dijit._masterTT.show(_a,_b,_c,_d);
+};
+dijit.hideTooltip=function(_e){
+if(!dijit._masterTT){
+dijit._masterTT=new dijit._MasterTooltip();
+}
+return dijit._masterTT.hide(_e);
+};
+dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],constructor:function(){
+this._nodeConnectionsById={};
+},_setConnectIdAttr:function(_f){
+for(var _10 in this._nodeConnectionsById){
+this.removeTarget(_10);
+}
+dojo.forEach(dojo.isArrayLike(_f)?_f:[_f],this.addTarget,this);
+},_getConnectIdAttr:function(){
+var ary=[];
+for(var id in this._nodeConnectionsById){
+ary.push(id);
+}
+return ary;
+},addTarget:function(id){
+var _11=dojo.byId(id);
+if(!_11){
+return;
+}
+if(_11.id in this._nodeConnectionsById){
+return;
+}
+this._nodeConnectionsById[_11.id]=[this.connect(_11,"onmouseenter","_onTargetMouseEnter"),this.connect(_11,"onmouseleave","_onTargetMouseLeave"),this.connect(_11,"onfocus","_onTargetFocus"),this.connect(_11,"onblur","_onTargetBlur")];
+},removeTarget:function(_12){
+var id=_12.id||_12;
+if(id in this._nodeConnectionsById){
+dojo.forEach(this._nodeConnectionsById[id],this.disconnect,this);
+delete this._nodeConnectionsById[id];
+}
+},postCreate:function(){
+dojo.addClass(this.domNode,"dijitTooltipData");
+},startup:function(){
+this.inherited(arguments);
+var ids=this.connectId;
+dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);
+},_onTargetMouseEnter:function(e){
+this._onHover(e);
+},_onTargetMouseLeave:function(e){
+this._onUnHover(e);
+},_onTargetFocus:function(e){
+this._focus=true;
+this._onHover(e);
+},_onTargetBlur:function(e){
+this._focus=false;
+this._onUnHover(e);
+},_onHover:function(e){
+if(!this._showTimer){
+var _13=e.target;
+this._showTimer=setTimeout(dojo.hitch(this,function(){
+this.open(_13);
+}),this.showDelay);
+}
+},_onUnHover:function(e){
+if(this._focus){
+return;
+}
+if(this._showTimer){
+clearTimeout(this._showTimer);
+delete this._showTimer;
+}
+this.close();
+},open:function(_14){
+if(this._showTimer){
+clearTimeout(this._showTimer);
+delete this._showTimer;
+}
+dijit.showTooltip(this.label||this.domNode.innerHTML,_14,this.position,!this.isLeftToRight());
+this._connectNode=_14;
+this.onShow(_14,this.position);
+},close:function(){
+if(this._connectNode){
+dijit.hideTooltip(this._connectNode);
+delete this._connectNode;
+this.onHide();
+}
+if(this._showTimer){
+clearTimeout(this._showTimer);
+delete this._showTimer;
+}
+},onShow:function(_15,_16){
+},onHide:function(){
+},uninitialize:function(){
+this.close();
+this.inherited(arguments);
+}});
+dijit.Tooltip.defaultPosition=["after","before"];
+}
Index: trunk/web/dojo/dijit/CheckedMenuItem.js
===================================================================
--- trunk/web/dojo/dijit/CheckedMenuItem.js	(revision 0)
+++ trunk/web/dojo/dijit/CheckedMenuItem.js	(revision 9)
@@ -0,0 +1,24 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.CheckedMenuItem"]){
+dojo._hasResource["dijit.CheckedMenuItem"]=true;
+dojo.provide("dijit.CheckedMenuItem");
+dojo.require("dijit.MenuItem");
+dojo.declare("dijit.CheckedMenuItem",dijit.MenuItem,{templateString:dojo.cache("dijit","templates/CheckedMenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">&nbsp;</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_1){
+dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_1);
+dijit.setWaiState(this.domNode,"checked",_1);
+this.checked=_1;
+},onChange:function(_2){
+},_onClick:function(e){
+if(!this.disabled){
+this.set("checked",!this.checked);
+this.onChange(this.checked);
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/dijit-all.js.uncompressed.js
===================================================================
--- trunk/web/dojo/dijit/dijit-all.js.uncompressed.js	(revision 0)
+++ trunk/web/dojo/dijit/dijit-all.js.uncompressed.js	(revision 9)
@@ -0,0 +1,28580 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.colors"] = true;
+dojo.provide("dojo.colors");
+
+//TODO: this module appears to break naming conventions
+
+/*=====
+dojo.colors = {
+	// summary: Color utilities
+}
+=====*/
+
+(function(){
+	// this is a standard conversion prescribed by the CSS3 Color Module
+	var hue2rgb = function(m1, m2, h){
+		if(h < 0){ ++h; }
+		if(h > 1){ --h; }
+		var h6 = 6 * h;
+		if(h6 < 1){ return m1 + (m2 - m1) * h6; }
+		if(2 * h < 1){ return m2; }
+		if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; }
+		return m1;
+	};
+	
+	dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
+		// summary:
+		//		get rgb(a) array from css-style color declarations
+		// description:
+		//		this function can handle all 4 CSS3 Color Module formats: rgb,
+		//		rgba, hsl, hsla, including rgb(a) with percentage values.
+		var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);
+		if(m){
+			var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1], a;
+			if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){
+				var r = c[0];
+				if(r.charAt(r.length - 1) == "%"){
+					// 3 rgb percentage values
+					a = dojo.map(c, function(x){
+						return parseFloat(x) * 2.56;
+					});
+					if(l == 4){ a[3] = c[3]; }
+					return dojo.colorFromArray(a, obj);	// dojo.Color
+				}
+				return dojo.colorFromArray(c, obj);	// dojo.Color
+			}
+			if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){
+				// normalize hsl values
+				var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360,
+					S = parseFloat(c[1]) / 100,
+					L = parseFloat(c[2]) / 100,
+					// calculate rgb according to the algorithm 
+					// recommended by the CSS3 Color Module 
+					m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S, 
+					m1 = 2 * L - m2;
+				a = [
+					hue2rgb(m1, m2, H + 1 / 3) * 256,
+					hue2rgb(m1, m2, H) * 256,
+					hue2rgb(m1, m2, H - 1 / 3) * 256,
+					1
+				];
+				if(l == 4){ a[3] = c[3]; }
+				return dojo.colorFromArray(a, obj);	// dojo.Color
+			}
+		}
+		return null;	// dojo.Color
+	};
+	
+	var confine = function(c, low, high){
+		// summary:
+		//		sanitize a color component by making sure it is a number,
+		//		and clamping it to valid values
+		c = Number(c);
+		return isNaN(c) ? high : c < low ? low : c > high ? high : c;	// Number
+	};
+	
+	dojo.Color.prototype.sanitize = function(){
+		// summary: makes sure that the object has correct attributes
+		var t = this;
+		t.r = Math.round(confine(t.r, 0, 255));
+		t.g = Math.round(confine(t.g, 0, 255));
+		t.b = Math.round(confine(t.b, 0, 255));
+		t.a = confine(t.a, 0, 1);
+		return this;	// dojo.Color
+	};
+})();
+
+
+dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){
+	// summary: creates a greyscale color with an optional alpha
+	return dojo.colorFromArray([g, g, g, a]);
+};
+
+// mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings
+dojo.mixin(dojo.Color.named, {
+	aliceblue:	[240,248,255],
+	antiquewhite:	[250,235,215],
+	aquamarine:	[127,255,212],
+	azure:	[240,255,255],
+	beige:	[245,245,220],
+	bisque:	[255,228,196],
+	blanchedalmond:	[255,235,205],
+	blueviolet:	[138,43,226],
+	brown:	[165,42,42],
+	burlywood:	[222,184,135],
+	cadetblue:	[95,158,160],
+	chartreuse:	[127,255,0],
+	chocolate:	[210,105,30],
+	coral:	[255,127,80],
+	cornflowerblue:	[100,149,237],
+	cornsilk:	[255,248,220],
+	crimson:	[220,20,60],
+	cyan:	[0,255,255],
+	darkblue:	[0,0,139],
+	darkcyan:	[0,139,139],
+	darkgoldenrod:	[184,134,11],
+	darkgray:	[169,169,169],
+	darkgreen:	[0,100,0],
+	darkgrey:	[169,169,169],
+	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],
+	darkseagreen:	[143,188,143],
+	darkslateblue:	[72,61,139],
+	darkslategray:	[47,79,79],
+	darkslategrey:	[47,79,79],
+	darkturquoise:	[0,206,209],
+	darkviolet:	[148,0,211],
+	deeppink:	[255,20,147],
+	deepskyblue:	[0,191,255],
+	dimgray:	[105,105,105],
+	dimgrey:	[105,105,105],
+	dodgerblue:	[30,144,255],
+	firebrick:	[178,34,34],
+	floralwhite:	[255,250,240],
+	forestgreen:	[34,139,34],
+	gainsboro:	[220,220,220],
+	ghostwhite:	[248,248,255],
+	gold:	[255,215,0],
+	goldenrod:	[218,165,32],
+	greenyellow:	[173,255,47],
+	grey:	[128,128,128],
+	honeydew:	[240,255,240],
+	hotpink:	[255,105,180],
+	indianred:	[205,92,92],
+	indigo:	[75,0,130],
+	ivory:	[255,255,240],
+	khaki:	[240,230,140],
+	lavender:	[230,230,250],
+	lavenderblush:	[255,240,245],
+	lawngreen:	[124,252,0],
+	lemonchiffon:	[255,250,205],
+	lightblue:	[173,216,230],
+	lightcoral:	[240,128,128],
+	lightcyan:	[224,255,255],
+	lightgoldenrodyellow:	[250,250,210],
+	lightgray:	[211,211,211],
+	lightgreen:	[144,238,144],
+	lightgrey:	[211,211,211],
+	lightpink:	[255,182,193],
+	lightsalmon:	[255,160,122],
+	lightseagreen:	[32,178,170],
+	lightskyblue:	[135,206,250],
+	lightslategray:	[119,136,153],
+	lightslategrey:	[119,136,153],
+	lightsteelblue:	[176,196,222],
+	lightyellow:	[255,255,224],
+	limegreen:	[50,205,50],
+	linen:	[250,240,230],
+	magenta:	[255,0,255],
+	mediumaquamarine:	[102,205,170],
+	mediumblue:	[0,0,205],
+	mediumorchid:	[186,85,211],
+	mediumpurple:	[147,112,219],
+	mediumseagreen:	[60,179,113],
+	mediumslateblue:	[123,104,238],
+	mediumspringgreen:	[0,250,154],
+	mediumturquoise:	[72,209,204],
+	mediumvioletred:	[199,21,133],
+	midnightblue:	[25,25,112],
+	mintcream:	[245,255,250],
+	mistyrose:	[255,228,225],
+	moccasin:	[255,228,181],
+	navajowhite:	[255,222,173],
+	oldlace:	[253,245,230],
+	olivedrab:	[107,142,35],
+	orange:	[255,165,0],
+	orangered:	[255,69,0],
+	orchid:	[218,112,214],
+	palegoldenrod:	[238,232,170],
+	palegreen:	[152,251,152],
+	paleturquoise:	[175,238,238],
+	palevioletred:	[219,112,147],
+	papayawhip:	[255,239,213],
+	peachpuff:	[255,218,185],
+	peru:	[205,133,63],
+	pink:	[255,192,203],
+	plum:	[221,160,221],
+	powderblue:	[176,224,230],
+	rosybrown:	[188,143,143],
+	royalblue:	[65,105,225],
+	saddlebrown:	[139,69,19],
+	salmon:	[250,128,114],
+	sandybrown:	[244,164,96],
+	seagreen:	[46,139,87],
+	seashell:	[255,245,238],
+	sienna:	[160,82,45],
+	skyblue:	[135,206,235],
+	slateblue:	[106,90,205],
+	slategray:	[112,128,144],
+	slategrey:	[112,128,144],
+	snow:	[255,250,250],
+	springgreen:	[0,255,127],
+	steelblue:	[70,130,180],
+	tan:	[210,180,140],
+	thistle:	[216,191,216],
+	tomato:	[255,99,71],
+	transparent: [0, 0, 0, 0],
+	turquoise:	[64,224,208],
+	violet:	[238,130,238],
+	wheat:	[245,222,179],
+	whitesmoke:	[245,245,245],
+	yellowgreen:	[154,205,50]
+});
+
+}
+
+if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.i18n"] = true;
+dojo.provide("dojo.i18n");
+
+/*=====
+dojo.i18n = {
+	// summary: Utility classes to enable loading of resources for internationalization (i18n)
+};
+=====*/
+
+dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
+	//	summary:
+	//		Returns an Object containing the localization for a given resource
+	//		bundle in a package, matching the specified locale.
+	//	description:
+	//		Returns a hash containing name/value pairs in its prototypesuch
+	//		that values can be easily overridden.  Throws an exception if the
+	//		bundle is not found.  Bundle must have already been loaded by
+	//		`dojo.requireLocalization()` or by a build optimization step.  NOTE:
+	//		try not to call this method as part of an object property
+	//		definition (`var foo = { bar: dojo.i18n.getLocalization() }`).  In
+	//		some loading situations, the bundle may not be available in time
+	//		for the object definition.  Instead, call this method inside a
+	//		function that is run after all modules load or the page loads (like
+	//		in `dojo.addOnLoad()`), or in a widget lifecycle method.
+	//	packageName:
+	//		package which is associated with this resource
+	//	bundleName:
+	//		the base filename of the resource bundle (without the ".js" suffix)
+	//	locale:
+	//		the variant to load (optional).  By default, the locale defined by
+	//		the host environment: dojo.locale
+
+	locale = dojo.i18n.normalizeLocale(locale);
+
+	// look for nearest locale match
+	var elements = locale.split('-');
+	var module = [packageName,"nls",bundleName].join('.');
+	var bundle = dojo._loadedModules[module];
+	if(bundle){
+		var localization;
+		for(var i = elements.length; i > 0; i--){
+			var loc = elements.slice(0, i).join('_');
+			if(bundle[loc]){
+				localization = bundle[loc];
+				break;
+			}
+		}
+		if(!localization){
+			localization = bundle.ROOT;
+		}
+
+		// make a singleton prototype so that the caller won't accidentally change the values globally
+		if(localization){
+			var clazz = function(){};
+			clazz.prototype = localization;
+			return new clazz(); // Object
+		}
+	}
+
+	throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
+};
+
+dojo.i18n.normalizeLocale = function(/*String?*/locale){
+	//	summary:
+	//		Returns canonical form of locale, as used by Dojo.
+	//
+	//  description:
+	//		All variants are case-insensitive and are separated by '-' as specified in [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
+	//		If no locale is specified, the dojo.locale is returned.  dojo.locale is defined by
+	//		the user agent's locale unless overridden by djConfig.
+
+	var result = locale ? locale.toLowerCase() : dojo.locale;
+	if(result == "root"){
+		result = "ROOT";
+	}
+	return result; // String
+};
+
+dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
+	//	summary:
+	//		See dojo.requireLocalization()
+	//	description:
+	// 		Called by the bootstrap, but factored out so that it is only
+	// 		included in the build when needed.
+
+	var targetLocale = dojo.i18n.normalizeLocale(locale);
+ 	var bundlePackage = [moduleName, "nls", bundleName].join(".");
+	// NOTE: 
+	//		When loading these resources, the packaging does not match what is
+	//		on disk.  This is an implementation detail, as this is just a
+	//		private data structure to hold the loaded resources.  e.g.
+	//		`tests/hello/nls/en-us/salutations.js` is loaded as the object
+	//		`tests.hello.nls.salutations.en_us={...}` The structure on disk is
+	//		intended to be most convenient for developers and translators, but
+	//		in memory it is more logical and efficient to store in a different
+	//		order.  Locales cannot use dashes, since the resulting path will
+	//		not evaluate as valid JS, so we translate them to underscores.
+	
+	//Find the best-match locale to load if we have available flat locales.
+	var bestLocale = "";
+	if(availableFlatLocales){
+		var flatLocales = availableFlatLocales.split(",");
+		for(var i = 0; i < flatLocales.length; i++){
+			//Locale must match from start of string.
+			//Using ["indexOf"] so customBase builds do not see
+			//this as a dojo._base.array dependency.
+			if(targetLocale["indexOf"](flatLocales[i]) == 0){
+				if(flatLocales[i].length > bestLocale.length){
+					bestLocale = flatLocales[i];
+				}
+			}
+		}
+		if(!bestLocale){
+			bestLocale = "ROOT";
+		}		
+	}
+
+	//See if the desired locale is already loaded.
+	var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
+	var bundle = dojo._loadedModules[bundlePackage];
+	var localizedBundle = null;
+	if(bundle){
+		if(dojo.config.localizationComplete && bundle._built){return;}
+		var jsLoc = tempLocale.replace(/-/g, '_');
+		var translationPackage = bundlePackage+"."+jsLoc;
+		localizedBundle = dojo._loadedModules[translationPackage];
+	}
+
+	if(!localizedBundle){
+		bundle = dojo["provide"](bundlePackage);
+		var syms = dojo._getModuleSymbols(moduleName);
+		var modpath = syms.concat("nls").join("/");
+		var parent;
+
+		dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function(loc){
+			var jsLoc = loc.replace(/-/g, '_');
+			var translationPackage = bundlePackage + "." + jsLoc;
+			var loaded = false;
+			if(!dojo._loadedModules[translationPackage]){
+				// Mark loaded whether it's found or not, so that further load attempts will not be made
+				dojo["provide"](translationPackage);
+				var module = [modpath];
+				if(loc != "ROOT"){module.push(loc);}
+				module.push(bundleName);
+				var filespec = module.join("/") + '.js';
+				loaded = dojo._loadPath(filespec, null, function(hash){
+					// Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
+					var clazz = function(){};
+					clazz.prototype = parent;
+					bundle[jsLoc] = new clazz();
+					for(var j in hash){ bundle[jsLoc][j] = hash[j]; }
+				});
+			}else{
+				loaded = true;
+			}
+			if(loaded && bundle[jsLoc]){
+				parent = bundle[jsLoc];
+			}else{
+				bundle[jsLoc] = parent;
+			}
+			
+			if(availableFlatLocales){
+				//Stop the locale path searching if we know the availableFlatLocales, since
+				//the first call to this function will load the only bundle that is needed.
+				return true;
+			}
+		});
+	}
+
+	//Save the best locale bundle as the target locale bundle when we know the
+	//the available bundles.
+	if(availableFlatLocales && targetLocale != bestLocale){
+		bundle[targetLocale.replace(/-/g, '_')] = bundle[bestLocale.replace(/-/g, '_')];
+	}
+};
+
+(function(){
+	// If other locales are used, dojo.requireLocalization should load them as
+	// well, by default. 
+	// 
+	// Override dojo.requireLocalization to do load the default bundle, then
+	// iterate through the extraLocale list and load those translations as
+	// well, unless a particular locale was requested.
+
+	var extra = dojo.config.extraLocale;
+	if(extra){
+		if(!extra instanceof Array){
+			extra = [extra];
+		}
+
+		var req = dojo.i18n._requireLocalization;
+		dojo.i18n._requireLocalization = function(m, b, locale, availableFlatLocales){
+			req(m,b,locale, availableFlatLocales);
+			if(locale){return;}
+			for(var i=0; i<extra.length; i++){
+				req(m,b,extra[i], availableFlatLocales);
+			}
+		};
+	}
+})();
+
+dojo.i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
+	//	summary:
+	//		A helper method to assist in searching for locale-based resources.
+	//		Will iterate through the variants of a particular locale, either up
+	//		or down, executing a callback function.  For example, "en-us" and
+	//		true will try "en-us" followed by "en" and finally "ROOT".
+
+	locale = dojo.i18n.normalizeLocale(locale);
+
+	var elements = locale.split('-');
+	var searchlist = [];
+	for(var i = elements.length; i > 0; i--){
+		searchlist.push(elements.slice(0, i).join('-'));
+	}
+	searchlist.push(false);
+	if(down){searchlist.reverse();}
+
+	for(var j = searchlist.length - 1; j >= 0; j--){
+		var loc = searchlist[j] || "ROOT";
+		var stop = searchFunc(loc);
+		if(stop){ break; }
+	}
+};
+
+dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){
+	//	summary:
+	//		Load built, flattened resource bundles, if available for all
+	//		locales used in the page. Only called by built layer files.
+
+	function preload(locale){
+		locale = dojo.i18n.normalizeLocale(locale);
+		dojo.i18n._searchLocalePath(locale, true, function(loc){
+			for(var i=0; i<localesGenerated.length;i++){
+				if(localesGenerated[i] == loc){
+					dojo["require"](bundlePrefix+"_"+loc);
+					return true; // Boolean
+				}
+			}
+			return false; // Boolean
+		});
+	}
+	preload();
+	var extra = dojo.config.extraLocale||[];
+	for(var i=0; i<extra.length; i++){
+		preload(extra[i]);
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit._PaletteMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._PaletteMixin"] = true;
+dojo.provide("dijit._PaletteMixin");
+
+
+dojo.declare("dijit._PaletteMixin",
+	[dijit._CssStateMixin],
+	{
+	// summary:
+	//		A keyboard accessible palette, for picking a color/emoticon/etc.
+	// description:
+	//		A mixin for a grid showing various entities, so the user can pick a certain entity.
+
+	// defaultTimeout: Number
+	//		Number of milliseconds before a held key or button becomes typematic
+	defaultTimeout: 500,
+
+	// timeoutChangeRate: Number
+	//		Fraction of time used to change the typematic timer between events
+	//		1.0 means that each typematic event fires at defaultTimeout intervals
+	//		< 1.0 means that each typematic event fires at an increasing faster rate
+	timeoutChangeRate: 0.90,
+
+	// value: String
+	//		Currently selected color/emoticon/etc.
+	value: null,
+	
+	// _selectedCell: [private] Integer
+	//		Index of the currently selected cell. Initially, none selected
+	_selectedCell: -1,
+
+	// _currentFocus: [private] DomNode
+	//		The currently focused cell (if the palette itself has focus), or otherwise
+	//		the cell to be focused when the palette itself gets focus.
+	//		Different from value, which represents the selected (i.e. clicked) cell.
+/*=====
+	_currentFocus: null,
+=====*/
+
+	// _xDim: [protected] Integer
+	//		This is the number of cells horizontally across.
+/*=====
+	_xDim: null,
+=====*/
+
+	// _yDim: [protected] Integer
+	//		This is the number of cells vertically down.
+/*=====
+	_yDim: null,
+=====*/
+
+	// tabIndex: String
+	//		Widget tab index.
+	tabIndex: "0",
+
+	// cellClass: [protected] String
+	//		CSS class applied to each cell in the palette
+	cellClass: "dijitPaletteCell",
+
+	// dyeClass: [protected] String
+	//	 Name of javascript class for Object created for each cell of the palette.
+	//	 dyeClass should implements dijit.Dye interface
+	dyeClass: '',
+
+	_preparePalette: function(choices, titles) {
+		// summary:
+		//		Subclass must call _preparePalette() from postCreate(), passing in the tooltip
+		//		for each cell
+		// choices: String[][]
+		//		id's for each cell of the palette, used to create Dye JS object for each cell
+		// titles: String[]
+		//		Localized tooltip for each cell
+
+		this._cells = [];
+		var url = this._blankGif;
+		
+		var dyeClassObj = dojo.getObject(this.dyeClass);
+
+		for(var row=0; row < choices.length; row++){
+			var rowNode = dojo.create("tr", {tabIndex: "-1"}, this.gridNode);
+			for(var col=0; col < choices[row].length; col++){
+				var value = choices[row][col];
+				if(value){
+					var cellObject = new dyeClassObj(value);
+					
+					var cellNode = dojo.create("td", {
+						"class": this.cellClass,
+						tabIndex: "-1",
+						title: titles[value]
+					});
+
+					// prepare cell inner structure
+					cellObject.fillCell(cellNode, url);
+
+					this.connect(cellNode, "ondijitclick", "_onCellClick");
+					this._trackMouseState(cellNode, this.cellClass);
+
+					dojo.place(cellNode, rowNode);
+
+					cellNode.index = this._cells.length;
+
+					// save cell info into _cells
+					this._cells.push({node:cellNode, dye:cellObject});
+				}
+			}
+		}
+		this._xDim = choices[0].length;
+		this._yDim = choices.length;
+
+		// Now set all events
+		// The palette itself is navigated to with the tab key on the keyboard
+		// Keyboard navigation within the Palette is with the arrow keys
+		// Spacebar selects the cell.
+		// For the up key the index is changed by negative the x dimension.
+
+		var keyIncrementMap = {
+			UP_ARROW: -this._xDim,
+			// The down key the index is increase by the x dimension.
+			DOWN_ARROW: this._xDim,
+			// Right and left move the index by 1.
+			RIGHT_ARROW: this.isLeftToRight() ? 1 : -1,
+			LEFT_ARROW: this.isLeftToRight() ? -1 : 1
+		};
+		for(var key in keyIncrementMap){
+			this._connects.push(
+				dijit.typematic.addKeyListener(
+					this.domNode,
+					{charOrCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false},
+					this,
+					function(){
+						var increment = keyIncrementMap[key];
+						return function(count){ this._navigateByKey(increment, count); };
+					}(),
+					this.timeoutChangeRate,
+					this.defaultTimeout
+				)
+			);
+		}
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		// Set initial navigable node.
+		this._setCurrent(this._cells[0].node);
+	},
+
+	focus: function(){
+		// summary:
+		//		Focus this widget.  Puts focus on the most recently focused cell.
+
+		// The cell already has tabIndex set, just need to set CSS and focus it
+		dijit.focus(this._currentFocus);
+	},
+
+	_onCellClick: function(/*Event*/ evt){
+		// summary:
+		//		Handler for click, enter key & space key. Selects the cell.
+		// evt:
+		//		The event.
+		// tags:
+		//		private
+
+		var target = evt.currentTarget,	
+			value = this._getDye(target).getValue();
+
+		// First focus the clicked cell, and then send onChange() notification.
+		// onChange() (via _setValueAttr) must be after the focus call, because
+		// it may trigger a refocus to somewhere else (like the Editor content area), and that
+		// second focus should win.
+		// Use setTimeout because IE doesn't like changing focus inside of an event handler.
+		this._setCurrent(target);
+		setTimeout(dojo.hitch(this, function(){
+			dijit.focus(target);		
+			this._setValueAttr(value, true);		
+		}));
+
+		// workaround bug where hover class is not removed on popup because the popup is
+		// closed and then there's no onblur event on the cell
+		dojo.removeClass(target, "dijitPaletteCellHover");
+
+		dojo.stopEvent(evt);
+	},
+
+	_setCurrent: function(/*DomNode*/ node){
+		// summary:
+		//		Sets which node is the focused cell.
+		// description:
+   		//		At any point in time there's exactly one
+		//		cell with tabIndex != -1.   If focus is inside the palette then
+		// 		focus is on that cell.
+		//
+		//		After calling this method, arrow key handlers and mouse click handlers
+		//		should focus the cell in a setTimeout().
+		// tags:
+		//		protected
+		if("_currentFocus" in this){
+			// Remove tabIndex on old cell
+			dojo.attr(this._currentFocus, "tabIndex", "-1");
+		}
+
+		// Set tabIndex of new cell
+		this._currentFocus = node;
+		if(node){
+			dojo.attr(node, "tabIndex", this.tabIndex);
+		}
+	},
+
+	_setValueAttr: function(value, priorityChange){
+		// summary:
+		// 		This selects a cell. It triggers the onChange event.
+		// value: String value of the cell to select
+		// tags:
+		//		protected
+		// priorityChange:
+		//		Optional parameter used to tell the select whether or not to fire
+		//		onChange event.
+		
+		// clear old value and selected cell
+		this.value = null;
+		if(this._selectedCell >= 0){
+			dojo.removeClass(this._cells[this._selectedCell].node, "dijitPaletteCellSelected");
+		}
+		this._selectedCell = -1;
+
+		// search for cell matching specified value
+		if(value){
+			for(var i = 0; i < this._cells.length; i++){
+				if(value == this._cells[i].dye.getValue()){
+					this._selectedCell = i;
+					this.value = value;
+
+					dojo.addClass(this._cells[i].node, "dijitPaletteCellSelected");
+
+					if(priorityChange || priorityChange === undefined){
+						this.onChange(value);
+					}
+
+					break;
+				}
+			}
+		}
+	},
+
+	onChange: function(value){
+		// summary:
+		//		Callback when a cell is selected.
+		// value: String
+		//		Value corresponding to cell.
+	},
+
+	_navigateByKey: function(increment, typeCount){
+		// summary:
+		// 	  	This is the callback for typematic.
+		// 		It changes the focus and the highlighed cell.
+		// increment:
+		// 		How much the key is navigated.
+		// typeCount:
+		//		How many times typematic has fired.
+		// tags:
+		//		private
+
+		// typecount == -1 means the key is released.
+		if(typeCount == -1){ return; }
+
+		var newFocusIndex = this._currentFocus.index + increment;
+		if(newFocusIndex < this._cells.length && newFocusIndex > -1){
+			var focusNode = this._cells[newFocusIndex].node;
+			this._setCurrent(focusNode);
+
+			// Actually focus the node, for the benefit of screen readers.
+			// Use setTimeout because IE doesn't like changing focus inside of an event handler
+			setTimeout(dojo.hitch(dijit, "focus", focusNode), 0);
+		}
+	},
+
+	_getDye: function(/*DomNode*/ cell){
+		// summary:
+		//		Get JS object for given cell DOMNode
+
+		return this._cells[cell.index].dye;
+	}
+});
+
+/*=====
+dojo.declare("dijit.Dye",
+	null,
+	{
+		// summary:
+		//		Interface for the JS Object associated with a palette cell (i.e. DOMNode)
+
+		constructor: function(alias){
+			// summary:
+			//		Initialize according to value or alias like "white"
+			// alias: String
+		},
+
+		getValue: function(){
+			// summary:
+			//		Return "value" of cell; meaning of "value" varies by subclass.
+			// description:
+			//		For example color hex value, emoticon ascii value etc, entity hex value.
+		},
+
+		fillCell: function(cell, blankGif){
+			// summary:
+			//		Add cell DOMNode inner structure
+			//	cell: DomNode
+			//		The surrounding cell
+			//	blankGif: String
+			//		URL for blank cell image
+		}
+	}
+);
+=====*/
+
+}
+
+if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.ColorPalette"] = true;
+dojo.provide("dijit.ColorPalette");
+
+
+
+
+
+
+
+
+
+
+dojo.declare("dijit.ColorPalette",
+	[dijit._Widget, dijit._Templated, dijit._PaletteMixin],
+	{
+	// summary:
+	//		A keyboard accessible color-picking widget
+	// description:
+	//		Grid showing various colors, so the user can pick a certain color.
+	//		Can be used standalone, or as a popup.
+	//
+	// example:
+	// |	<div dojoType="dijit.ColorPalette"></div>
+	//
+	// example:
+	// |	var picker = new dijit.ColorPalette({ },srcNode);
+	// |	picker.startup();
+
+
+	// palette: String
+	//		Size of grid, either "7x10" or "3x4".
+	palette: "7x10",
+
+	// _palettes: [protected] Map
+	// 		This represents the value of the colors.
+	//		The first level is a hashmap of the different palettes available.
+	//		The next two dimensions represent the columns and rows of colors.
+	_palettes: {
+		"7x10":	[["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan",	"lavender", "plum"],
+				["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"],
+				["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", 	"skyblue", "mediumslateblue","orchid"],
+				["gray", "red", "orangered", "darkorange", "yellow", "limegreen", 	"darkseagreen", "royalblue", "slateblue", "mediumorchid"],
+				["dimgray", "crimson", 	"chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"],
+				["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ],
+				["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", 	"purple"]],
+
+		"3x4": [["white", "lime", "green", "blue"],
+			["silver", "yellow", "fuchsia", "navy"],
+			["gray", "red", "purple", "black"]]
+	},
+
+	// _imagePaths: [protected] Map
+	//		This is stores the path to the palette images
+	_imagePaths: {
+		"7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"),
+		"3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png"),
+		"7x10-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors7x10-rtl.png"),
+		"3x4-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors3x4-rtl.png")
+	},
+
+	// templateString: String
+	//		The template of this widget.
+	templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),
+
+	baseClass: "dijitColorPalette",
+
+	dyeClass: 'dijit._Color',
+
+	buildRendering: function(){
+		// Instantiate the template, which makes a skeleton into which we'll insert a bunch of
+		// <img> nodes
+
+		this.inherited(arguments);
+
+		this.imageNode.setAttribute("src", this._imagePaths[this.palette + (this.isLeftToRight() ? "" : "-rtl")].toString());
+
+		var i18nColorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang);
+		this._preparePalette(
+			this._palettes[this.palette],
+			i18nColorNames
+		);
+	}
+});
+
+dojo.declare("dijit._Color", dojo.Color,
+	// summary:
+	//		Object associated with each cell in a ColorPalette palette.
+	//		Implements dijit.Dye.
+	{
+		constructor: function(/*String*/alias){
+			this._alias = alias;
+			this.setColor(dojo.Color.named[alias]);
+		},
+
+		getValue: function(){
+			// summary:
+			//		Note that although dijit._Color is initialized with a value like "white" getValue() always
+			//		returns a hex value
+			return this.toHex();
+		},
+
+		fillCell: function(/*DOMNode*/ cell, /*String*/ blankGif){
+			dojo.create("img", {
+				src: blankGif,
+				"class": "dijitPaletteImg",
+				alt: this._alias
+			}, cell);
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Declaration"] = true;
+dojo.provide("dijit.Declaration");
+
+
+
+dojo.declare(
+	"dijit.Declaration",
+	dijit._Widget,
+	{
+		// summary:
+		//		The Declaration widget allows a developer to declare new widget
+		//		classes directly from a snippet of markup.
+
+		// _noScript: [private] Boolean
+		//		Flag to parser to leave alone the script tags contained inside of me
+		_noScript: true,
+
+		// widgetClass: String
+		//		Name of class being declared, ex: "acme.myWidget"
+		widgetClass: "",
+
+		// propList: Object
+		//		Set of attributes for this widget along with default values, ex:
+		//		{delay: 100, title: "hello world"}
+		defaults: null,
+
+		// mixins: String[]
+		//		List containing the prototype for this widget, and also any mixins,
+		//		ex: ["dijit._Widget", "dijit._Container"]
+		mixins: [],
+
+		buildRendering: function(){
+			var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),
+				methods = dojo.query("> script[type^='dojo/method'][event]", src).orphan(),
+				postscriptConnects = dojo.query("> script[type^='dojo/method']", src).orphan(),
+				regularConnects = dojo.query("> script[type^='dojo/connect']", src).orphan(),
+				srcType = src.nodeName;
+
+			var propList = this.defaults || {};
+
+			// For all methods defined like <script type="dojo/method" event="foo">,
+			// add that method to prototype
+			dojo.forEach(methods, function(s){
+				var evt = s.getAttribute("event"),
+					func = dojo.parser._functionFromScript(s);
+				propList[evt] = func;
+			});
+
+			// map array of strings like [ "dijit.form.Button" ] to array of mixin objects
+			// (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes
+			// a bogus third argument to getObject(), confusing it)
+			this.mixins = this.mixins.length ?
+				dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) :
+				[ dijit._Widget, dijit._Templated ];
+
+			propList.widgetsInTemplate = true;
+			propList._skipNodeCache = true;
+			propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint") || '')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent") || '')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">";
+
+			// strip things so we don't create stuff under us in the initial setup phase
+			dojo.query("[dojoType]", src).forEach(function(node){
+				node.removeAttribute("dojoType");
+			});
+
+			// create the new widget class
+			var wc = dojo.declare(
+				this.widgetClass,
+				this.mixins,
+				propList
+			);
+
+			// Handle <script> blocks of form:
+			//		<script type="dojo/connect" event="foo">
+			// and
+			//		<script type="dojo/method">
+			// (Note that the second one is just shorthand for a dojo/connect to postscript)
+			// Since this is a connect in the declaration, we are actually connection to the method
+			// in the _prototype_.
+			var connects = regularConnects.concat(postscriptConnects);
+			dojo.forEach(connects, function(s){
+				var evt = s.getAttribute("event") || "postscript",
+					func = dojo.parser._functionFromScript(s);
+				dojo.connect(wc.prototype, evt, func);
+			});
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.common"] = true;
+dojo.provide("dojo.dnd.common");
+
+dojo.dnd.getCopyKeyState = dojo.isCopyKey;
+
+dojo.dnd._uniqueId = 0;
+dojo.dnd.getUniqueId = function(){
+	// summary:
+	//		returns a unique string for use with any DOM element
+	var id;
+	do{
+		id = dojo._scopeName + "Unique" + (++dojo.dnd._uniqueId);
+	}while(dojo.byId(id));
+	return id;
+};
+
+dojo.dnd._empty = {};
+
+dojo.dnd.isFormElement = function(/*Event*/ e){
+	// summary:
+	//		returns true if user clicked on a form element
+	var t = e.target;
+	if(t.nodeType == 3 /*TEXT_NODE*/){
+		t = t.parentNode;
+	}
+	return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0;	// Boolean
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.autoscroll"] = true;
+dojo.provide("dojo.dnd.autoscroll");
+
+dojo.dnd.getViewport = function(){
+	// summary:
+	//		Returns a viewport size (visible part of the window)
+
+	// TODO: remove this when getViewport() moved to dojo core, see #7028
+
+	// FIXME: need more docs!!
+	var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
+	if(dojo.isMozilla){
+		return {w: dd.clientWidth, h: w.innerHeight};	// Object
+	}else if(!dojo.isOpera && w.innerWidth){
+		return {w: w.innerWidth, h: w.innerHeight};		// Object
+	}else if (!dojo.isOpera && dd && dd.clientWidth){
+		return {w: dd.clientWidth, h: dd.clientHeight};	// Object
+	}else if (b.clientWidth){
+		return {w: b.clientWidth, h: b.clientHeight};	// Object
+	}
+	return null;	// Object
+};
+
+dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
+dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
+
+dojo.dnd.V_AUTOSCROLL_VALUE = 16;
+dojo.dnd.H_AUTOSCROLL_VALUE = 16;
+
+dojo.dnd.autoScroll = function(e){
+	// summary:
+	//		a handler for onmousemove event, which scrolls the window, if
+	//		necesary
+	// e: Event
+	//		onmousemove event
+
+	// FIXME: needs more docs!
+	var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
+	if(e.clientX < dojo.dnd.H_TRIGGER_AUTOSCROLL){
+		dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
+	}else if(e.clientX > v.w - dojo.dnd.H_TRIGGER_AUTOSCROLL){
+		dx = dojo.dnd.H_AUTOSCROLL_VALUE;
+	}
+	if(e.clientY < dojo.dnd.V_TRIGGER_AUTOSCROLL){
+		dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
+	}else if(e.clientY > v.h - dojo.dnd.V_TRIGGER_AUTOSCROLL){
+		dy = dojo.dnd.V_AUTOSCROLL_VALUE;
+	}
+	window.scrollBy(dx, dy);
+};
+
+dojo.dnd._validNodes = {"div": 1, "p": 1, "td": 1};
+dojo.dnd._validOverflow = {"auto": 1, "scroll": 1};
+
+dojo.dnd.autoScrollNodes = function(e){
+	// summary:
+	//		a handler for onmousemove event, which scrolls the first avaialble
+	//		Dom element, it falls back to dojo.dnd.autoScroll()
+	// e: Event
+	//		onmousemove event
+
+	// FIXME: needs more docs!
+	for(var n = e.target; n;){
+		if(n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)){
+			var s = dojo.getComputedStyle(n);
+			if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
+				var b = dojo._getContentBox(n, s), t = dojo.position(n, true);
+				//console.log(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop);
+				var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2), 
+					h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2),
+					rx = e.pageX - t.x, ry = e.pageY - t.y, dx = 0, dy = 0;
+				if(dojo.isWebKit || dojo.isOpera){
+					// FIXME: this code should not be here, it should be taken into account 
+					// either by the event fixing code, or the dojo.position()
+					// FIXME: this code doesn't work on Opera 9.5 Beta
+					rx += dojo.body().scrollLeft, ry += dojo.body().scrollTop;
+				}
+				if(rx > 0 && rx < b.w){
+					if(rx < w){
+						dx = -w;
+					}else if(rx > b.w - w){
+						dx = w;
+					}
+				}
+				//console.log("ry =", ry, "b.h =", b.h, "h =", h);
+				if(ry > 0 && ry < b.h){
+					if(ry < h){
+						dy = -h;
+					}else if(ry > b.h - h){
+						dy = h;
+					}
+				}
+				var oldLeft = n.scrollLeft, oldTop = n.scrollTop;
+				n.scrollLeft = n.scrollLeft + dx;
+				n.scrollTop  = n.scrollTop  + dy;
+				if(oldLeft != n.scrollLeft || oldTop != n.scrollTop){ return; }
+			}
+		}
+		try{
+			n = n.parentNode;
+		}catch(x){
+			n = null;
+		}
+	}
+	dojo.dnd.autoScroll(e);
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Mover"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Mover"] = true;
+dojo.provide("dojo.dnd.Mover");
+
+
+
+
+dojo.declare("dojo.dnd.Mover", null, {
+	constructor: function(node, e, host){
+		// summary:
+		//		an object, which makes a node follow the mouse. 
+		//		Used as a default mover, and as a base class for custom movers.
+		// node: Node
+		//		a node (or node's id) to be moved
+		// e: Event
+		//		a mouse event, which started the move;
+		//		only pageX and pageY properties are used
+		// host: Object?
+		//		object which implements the functionality of the move,
+		//	 	and defines proper events (onMoveStart and onMoveStop)
+		this.node = dojo.byId(node);
+		this.marginBox = {l: e.pageX, t: e.pageY};
+		this.mouseButton = e.button;
+		var h = this.host = host, d = node.ownerDocument, 
+			firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove");
+		this.events = [
+			dojo.connect(d, "onmousemove", this, "onMouseMove"),
+			dojo.connect(d, "onmouseup",   this, "onMouseUp"),
+			// cancel text selection and text dragging
+			dojo.connect(d, "ondragstart",   dojo.stopEvent),
+			dojo.connect(d.body, "onselectstart", dojo.stopEvent),
+			firstEvent
+		];
+		// notify that the move has started
+		if(h && h.onMoveStart){
+			h.onMoveStart(this);
+		}
+	},
+	// mouse event processors
+	onMouseMove: function(e){
+		// summary:
+		//		event processor for onmousemove
+		// e: Event
+		//		mouse event
+		dojo.dnd.autoScroll(e);
+		var m = this.marginBox;
+		this.host.onMove(this, {l: m.l + e.pageX, t: m.t + e.pageY}, e);
+		dojo.stopEvent(e);
+	},
+	onMouseUp: function(e){
+		if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ? 
+				e.button == 0 : this.mouseButton == e.button){
+			this.destroy();
+		}
+		dojo.stopEvent(e);
+	},
+	// utilities
+	onFirstMove: function(e){
+		// summary:
+		//		makes the node absolute; it is meant to be called only once. 
+		// 		relative and absolutely positioned nodes are assumed to use pixel units
+		var s = this.node.style, l, t, h = this.host;
+		switch(s.position){
+			case "relative":
+			case "absolute":
+				// assume that left and top values are in pixels already
+				l = Math.round(parseFloat(s.left)) || 0;
+				t = Math.round(parseFloat(s.top)) || 0;
+				break;
+			default:
+				s.position = "absolute";	// enforcing the absolute mode
+				var m = dojo.marginBox(this.node);
+				// event.pageX/pageY (which we used to generate the initial
+				// margin box) includes padding and margin set on the body.
+				// However, setting the node's position to absolute and then
+				// doing dojo.marginBox on it *doesn't* take that additional
+				// space into account - so we need to subtract the combined
+				// padding and margin.  We use getComputedStyle and
+				// _getMarginBox/_getContentBox to avoid the extra lookup of
+				// the computed style. 
+				var b = dojo.doc.body;
+				var bs = dojo.getComputedStyle(b);
+				var bm = dojo._getMarginBox(b, bs);
+				var bc = dojo._getContentBox(b, bs);
+				l = m.l - (bc.l - bm.l);
+				t = m.t - (bc.t - bm.t);
+				break;
+		}
+		this.marginBox.l = l - this.marginBox.l;
+		this.marginBox.t = t - this.marginBox.t;
+		if(h && h.onFirstMove){
+			h.onFirstMove(this, e);
+		}
+		dojo.disconnect(this.events.pop());
+	},
+	destroy: function(){
+		// summary:
+		//		stops the move, deletes all references, so the object can be garbage-collected
+		dojo.forEach(this.events, dojo.disconnect);
+		// undo global settings
+		var h = this.host;
+		if(h && h.onMoveStop){
+			h.onMoveStop(this);
+		}
+		// destroy objects
+		this.events = this.node = this.host = null;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Moveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Moveable"] = true;
+dojo.provide("dojo.dnd.Moveable");
+
+
+
+/*=====
+dojo.declare("dojo.dnd.__MoveableArgs", [], {
+	// handle: Node||String
+	//		A node (or node's id), which is used as a mouse handle.
+	//		If omitted, the node itself is used as a handle.
+	handle: null,
+
+	// delay: Number
+	//		delay move by this number of pixels
+	delay: 0,
+
+	// skip: Boolean
+	//		skip move of form elements
+	skip: false,
+
+	// mover: Object
+	//		a constructor of custom Mover
+	mover: dojo.dnd.Mover
+});
+=====*/
+
+dojo.declare("dojo.dnd.Moveable", null, {
+	// object attributes (for markup)
+	handle: "",
+	delay: 0,
+	skip: false,
+	
+	constructor: function(node, params){
+		// summary:
+		//		an object, which makes a node moveable
+		// node: Node
+		//		a node (or node's id) to be moved
+		// params: dojo.dnd.__MoveableArgs?
+		//		optional parameters
+		this.node = dojo.byId(node);
+		if(!params){ params = {}; }
+		this.handle = params.handle ? dojo.byId(params.handle) : null;
+		if(!this.handle){ this.handle = this.node; }
+		this.delay = params.delay > 0 ? params.delay : 0;
+		this.skip  = params.skip;
+		this.mover = params.mover ? params.mover : dojo.dnd.Mover;
+		this.events = [
+			dojo.connect(this.handle, "onmousedown", this, "onMouseDown"),
+			// cancel text selection and text dragging
+			dojo.connect(this.handle, "ondragstart",   this, "onSelectStart"),
+			dojo.connect(this.handle, "onselectstart", this, "onSelectStart")
+		];
+	},
+
+	// markup methods
+	markupFactory: function(params, node){
+		return new dojo.dnd.Moveable(node, params);
+	},
+
+	// methods
+	destroy: function(){
+		// summary:
+		//		stops watching for possible move, deletes all references, so the object can be garbage-collected
+		dojo.forEach(this.events, dojo.disconnect);
+		this.events = this.node = this.handle = null;
+	},
+	
+	// mouse event processors
+	onMouseDown: function(e){
+		// summary:
+		//		event processor for onmousedown, creates a Mover for the node
+		// e: Event
+		//		mouse event
+		if(this.skip && dojo.dnd.isFormElement(e)){ return; }
+		if(this.delay){
+			this.events.push(
+				dojo.connect(this.handle, "onmousemove", this, "onMouseMove"),
+				dojo.connect(this.handle, "onmouseup", this, "onMouseUp")
+			);
+			this._lastX = e.pageX;
+			this._lastY = e.pageY;
+		}else{
+			this.onDragDetected(e);
+		}
+		dojo.stopEvent(e);
+	},
+	onMouseMove: function(e){
+		// summary:
+		//		event processor for onmousemove, used only for delayed drags
+		// e: Event
+		//		mouse event
+		if(Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay){
+			this.onMouseUp(e);
+			this.onDragDetected(e);
+		}
+		dojo.stopEvent(e);
+	},
+	onMouseUp: function(e){
+		// summary:
+		//		event processor for onmouseup, used only for delayed drags
+		// e: Event
+		//		mouse event
+		for(var i = 0; i < 2; ++i){
+			dojo.disconnect(this.events.pop());
+		}
+		dojo.stopEvent(e);
+	},
+	onSelectStart: function(e){
+		// summary:
+		//		event processor for onselectevent and ondragevent
+		// e: Event
+		//		mouse event
+		if(!this.skip || !dojo.dnd.isFormElement(e)){
+			dojo.stopEvent(e);
+		}
+	},
+	
+	// local events
+	onDragDetected: function(/* Event */ e){
+		// summary:
+		//		called when the drag is detected;
+		//		responsible for creation of the mover
+		new this.mover(this.node, e, this);
+	},
+	onMoveStart: function(/* dojo.dnd.Mover */ mover){
+		// summary:
+		//		called before every move operation
+		dojo.publish("/dnd/move/start", [mover]);
+		dojo.addClass(dojo.body(), "dojoMove"); 
+		dojo.addClass(this.node, "dojoMoveItem"); 
+	},
+	onMoveStop: function(/* dojo.dnd.Mover */ mover){
+		// summary:
+		//		called after every move operation
+		dojo.publish("/dnd/move/stop", [mover]);
+		dojo.removeClass(dojo.body(), "dojoMove");
+		dojo.removeClass(this.node, "dojoMoveItem");
+	},
+	onFirstMove: function(/* dojo.dnd.Mover */ mover, /* Event */ e){
+		// summary:
+		//		called during the very first move notification;
+		//		can be used to initialize coordinates, can be overwritten.
+		
+		// default implementation does nothing
+	},
+	onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop, /* Event */ e){
+		// summary:
+		//		called during every move notification;
+		//		should actually move the node; can be overwritten.
+		this.onMoving(mover, leftTop);
+		var s = mover.node.style;
+		s.left = leftTop.l + "px";
+		s.top  = leftTop.t + "px";
+		this.onMoved(mover, leftTop);
+	},
+	onMoving: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+		// summary:
+		//		called before every incremental move; can be overwritten.
+		
+		// default implementation does nothing
+	},
+	onMoved: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+		// summary:
+		//		called after every incremental move; can be overwritten.
+		
+		// default implementation does nothing
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.move"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.move"] = true;
+dojo.provide("dojo.dnd.move");
+
+
+
+
+/*=====
+dojo.declare("dojo.dnd.move.__constrainedMoveableArgs", [dojo.dnd.__MoveableArgs], {
+	// constraints: Function
+	//		Calculates a constraint box.
+	//		It is called in a context of the moveable object.
+	constraints: function(){},
+
+	// within: Boolean
+	//		restrict move within boundaries.
+	within: false
+});
+=====*/
+
+dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {
+	// object attributes (for markup)
+	constraints: function(){},
+	within: false,
+	
+	// markup methods
+	markupFactory: function(params, node){
+		return new dojo.dnd.move.constrainedMoveable(node, params);
+	},
+
+	constructor: function(node, params){
+		// summary:
+		//		an object that makes a node moveable
+		// node: Node
+		//		a node (or node's id) to be moved
+		// params: dojo.dnd.move.__constrainedMoveableArgs?
+		//		an optional object with additional parameters;
+		//		the rest is passed to the base class
+		if(!params){ params = {}; }
+		this.constraints = params.constraints;
+		this.within = params.within;
+	},
+	onFirstMove: function(/* dojo.dnd.Mover */ mover){
+		// summary:
+		//		called during the very first move notification;
+		//		can be used to initialize coordinates, can be overwritten.
+		var c = this.constraintBox = this.constraints.call(this, mover);
+		c.r = c.l + c.w;
+		c.b = c.t + c.h;
+		if(this.within){
+			var mb = dojo.marginBox(mover.node);
+			c.r -= mb.w;
+			c.b -= mb.h;
+		}
+	},
+	onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+		// summary:
+		//		called during every move notification;
+		//		should actually move the node; can be overwritten.
+		var c = this.constraintBox, s = mover.node.style;
+		s.left = (leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l) + "px";
+		s.top  = (leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t) + "px";
+	}
+});
+
+/*=====
+dojo.declare("dojo.dnd.move.__boxConstrainedMoveableArgs", [dojo.dnd.move.__constrainedMoveableArgs], {
+	// box: Object
+	//		a constraint box
+	box: {}
+});
+=====*/
+
+dojo.declare("dojo.dnd.move.boxConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {
+	// box:
+	//		object attributes (for markup)
+	box: {},
+	
+	// markup methods
+	markupFactory: function(params, node){
+		return new dojo.dnd.move.boxConstrainedMoveable(node, params);
+	},
+
+	constructor: function(node, params){
+		// summary:
+		//		an object, which makes a node moveable
+		// node: Node
+		//		a node (or node's id) to be moved
+		// params: dojo.dnd.move.__boxConstrainedMoveableArgs?
+		//		an optional object with parameters
+		var box = params && params.box;
+		this.constraints = function(){ return box; };
+	}
+});
+
+/*=====
+dojo.declare("dojo.dnd.move.__parentConstrainedMoveableArgs", [dojo.dnd.move.__constrainedMoveableArgs], {
+	// area: String
+	//		A parent's area to restrict the move.
+	//		Can be "margin", "border", "padding", or "content".
+	area: ""
+});
+=====*/
+
+dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {
+	// area:
+	//		object attributes (for markup)
+	area: "content",
+
+	// markup methods
+	markupFactory: function(params, node){
+		return new dojo.dnd.move.parentConstrainedMoveable(node, params);
+	},
+
+	constructor: function(node, params){
+		// summary:
+		//		an object, which makes a node moveable
+		// node: Node
+		//		a node (or node's id) to be moved
+		// params: dojo.dnd.move.__parentConstrainedMoveableArgs?
+		//		an optional object with parameters
+		var area = params && params.area;
+		this.constraints = function(){
+			var n = this.node.parentNode, 
+				s = dojo.getComputedStyle(n), 
+				mb = dojo._getMarginBox(n, s);
+			if(area == "margin"){
+				return mb;	// Object
+			}
+			var t = dojo._getMarginExtents(n, s);
+			mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
+			if(area == "border"){
+				return mb;	// Object
+			}
+			t = dojo._getBorderExtents(n, s);
+			mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
+			if(area == "padding"){
+				return mb;	// Object
+			}
+			t = dojo._getPadExtents(n, s);
+			mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
+			return mb;	// Object
+		};
+	}
+});
+
+// WARNING: below are obsolete objects, instead of custom movers use custom moveables (above)
+
+dojo.dnd.move.constrainedMover = function(fun, within){
+	// summary:
+	//		returns a constrained version of dojo.dnd.Mover
+	// description:
+	//		this function produces n object, which will put a constraint on 
+	//		the margin box of dragged object in absolute coordinates
+	// fun: Function
+	//		called on drag, and returns a constraint box
+	// within: Boolean
+	//		if true, constraints the whole dragged object withtin the rectangle, 
+	//		otherwise the constraint is applied to the left-top corner
+
+	dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");
+	var mover = function(node, e, notifier){
+		dojo.dnd.Mover.call(this, node, e, notifier);
+	};
+	dojo.extend(mover, dojo.dnd.Mover.prototype);
+	dojo.extend(mover, {
+		onMouseMove: function(e){
+			// summary: event processor for onmousemove
+			// e: Event: mouse event
+			dojo.dnd.autoScroll(e);
+			var m = this.marginBox, c = this.constraintBox,
+				l = m.l + e.pageX, t = m.t + e.pageY;
+			l = l < c.l ? c.l : c.r < l ? c.r : l;
+			t = t < c.t ? c.t : c.b < t ? c.b : t;
+			this.host.onMove(this, {l: l, t: t});
+		},
+		onFirstMove: function(){
+			// summary: called once to initialize things; it is meant to be called only once
+			dojo.dnd.Mover.prototype.onFirstMove.call(this);
+			var c = this.constraintBox = fun.call(this);
+			c.r = c.l + c.w;
+			c.b = c.t + c.h;
+			if(within){
+				var mb = dojo.marginBox(this.node);
+				c.r -= mb.w;
+				c.b -= mb.h;
+			}
+		}
+	});
+	return mover;	// Object
+};
+
+dojo.dnd.move.boxConstrainedMover = function(box, within){
+	// summary:
+	//		a specialization of dojo.dnd.constrainedMover, which constrains to the specified box
+	// box: Object
+	//		a constraint box (l, t, w, h)
+	// within: Boolean
+	//		if true, constraints the whole dragged object withtin the rectangle, 
+	//		otherwise the constraint is applied to the left-top corner
+
+	dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");
+	return dojo.dnd.move.constrainedMover(function(){ return box; }, within);	// Object
+};
+
+dojo.dnd.move.parentConstrainedMover = function(area, within){
+	// summary:
+	//		a specialization of dojo.dnd.constrainedMover, which constrains to the parent node
+	// area: String
+	//		"margin" to constrain within the parent's margin box, "border" for the border box,
+	//		"padding" for the padding box, and "content" for the content box; "content" is the default value.
+	// within: Boolean
+	//		if true, constraints the whole dragged object within the rectangle, 
+	//		otherwise the constraint is applied to the left-top corner
+
+	dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");
+	var fun = function(){
+		var n = this.node.parentNode, 
+			s = dojo.getComputedStyle(n), 
+			mb = dojo._getMarginBox(n, s);
+		if(area == "margin"){
+			return mb;	// Object
+		}
+		var t = dojo._getMarginExtents(n, s);
+		mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
+		if(area == "border"){
+			return mb;	// Object
+		}
+		t = dojo._getBorderExtents(n, s);
+		mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
+		if(area == "padding"){
+			return mb;	// Object
+		}
+		t = dojo._getPadExtents(n, s);
+		mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
+		return mb;	// Object
+	};
+	return dojo.dnd.move.constrainedMover(fun, within);	// Object
+};
+
+// patching functions one level up for compatibility
+
+dojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover;
+dojo.dnd.boxConstrainedMover = dojo.dnd.move.boxConstrainedMover;
+dojo.dnd.parentConstrainedMover = dojo.dnd.move.parentConstrainedMover;
+
+}
+
+if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.TimedMoveable"] = true;
+dojo.provide("dojo.dnd.TimedMoveable");
+
+
+
+/*=====
+dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], {
+	// timeout: Number
+	//		delay move by this number of ms,
+	//		accumulating position changes during the timeout
+	timeout: 0
+});
+=====*/
+
+(function(){
+	// precalculate long expressions
+	var oldOnMove = dojo.dnd.Moveable.prototype.onMove;
+		
+	dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, {
+		// summary:
+		//		A specialized version of Moveable to support an FPS throttling.
+		//		This class puts an upper restriction on FPS, which may reduce 
+		//		the CPU load. The additional parameter "timeout" regulates
+		//		the delay before actually moving the moveable object.
+		
+		// object attributes (for markup)
+		timeout: 40,	// in ms, 40ms corresponds to 25 fps
+	
+		constructor: function(node, params){
+			// summary:
+			//		an object that makes a node moveable with a timer
+			// node: Node||String
+			//		a node (or node's id) to be moved
+			// params: dojo.dnd.__TimedMoveableArgs
+			//		object with additional parameters.
+			
+			// sanitize parameters
+			if(!params){ params = {}; }
+			if(params.timeout && typeof params.timeout == "number" && params.timeout >= 0){
+				this.timeout = params.timeout;
+			}
+		},
+	
+		// markup methods
+		markupFactory: function(params, node){
+			return new dojo.dnd.TimedMoveable(node, params);
+		},
+	
+		onMoveStop: function(/* dojo.dnd.Mover */ mover){
+			if(mover._timer){
+				// stop timer
+				clearTimeout(mover._timer)
+				// reflect the last received position
+				oldOnMove.call(this, mover, mover._leftTop)
+			}
+			dojo.dnd.Moveable.prototype.onMoveStop.apply(this, arguments);
+		},
+		onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+			mover._leftTop = leftTop;
+			if(!mover._timer){
+				var _t = this;	// to avoid using dojo.hitch()
+				mover._timer = setTimeout(function(){
+					// we don't have any pending requests
+					mover._timer = null;
+					// reflect the last received position
+					oldOnMove.call(_t, mover, mover._leftTop);
+				}, this.timeout);
+			}
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojo.fx.Toggler"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx.Toggler"] = true;
+dojo.provide("dojo.fx.Toggler");
+
+dojo.declare("dojo.fx.Toggler", null, {
+	// summary:
+	//		A simple `dojo.Animation` toggler API.
+	//
+	// description:
+	//		class constructor for an animation toggler. It accepts a packed
+	//		set of arguments about what type of animation to use in each
+	//		direction, duration, etc. All available members are mixed into 
+	//		these animations from the constructor (for example, `node`, 
+	//		`showDuration`, `hideDuration`). 
+	//
+	// example:
+	//	|	var t = new dojo.fx.Toggler({
+	//	|		node: "nodeId",
+	//	|		showDuration: 500,
+	//	|		// hideDuration will default to "200"
+	//	|		showFunc: dojo.fx.wipeIn, 
+	//	|		// hideFunc will default to "fadeOut"
+	//	|	});
+	//	|	t.show(100); // delay showing for 100ms
+	//	|	// ...time passes...
+	//	|	t.hide();
+
+	// node: DomNode
+	//		the node to target for the showing and hiding animations
+	node: null,
+
+	// showFunc: Function
+	//		The function that returns the `dojo.Animation` to show the node
+	showFunc: dojo.fadeIn,
+
+	// hideFunc: Function	
+	//		The function that returns the `dojo.Animation` to hide the node
+	hideFunc: dojo.fadeOut,
+
+	// showDuration:
+	//		Time in milliseconds to run the show Animation
+	showDuration: 200,
+
+	// hideDuration:
+	//		Time in milliseconds to run the hide Animation
+	hideDuration: 200,
+
+	// FIXME: need a policy for where the toggler should "be" the next
+	// time show/hide are called if we're stopped somewhere in the
+	// middle.
+	// FIXME: also would be nice to specify individual showArgs/hideArgs mixed into
+	// each animation individually. 
+	// FIXME: also would be nice to have events from the animations exposed/bridged
+
+	/*=====
+	_showArgs: null,
+	_showAnim: null,
+
+	_hideArgs: null,
+	_hideAnim: null,
+
+	_isShowing: false,
+	_isHiding: false,
+	=====*/
+
+	constructor: function(args){
+		var _t = this;
+
+		dojo.mixin(_t, args);
+		_t.node = args.node;
+		_t._showArgs = dojo.mixin({}, args);
+		_t._showArgs.node = _t.node;
+		_t._showArgs.duration = _t.showDuration;
+		_t.showAnim = _t.showFunc(_t._showArgs);
+
+		_t._hideArgs = dojo.mixin({}, args);
+		_t._hideArgs.node = _t.node;
+		_t._hideArgs.duration = _t.hideDuration;
+		_t.hideAnim = _t.hideFunc(_t._hideArgs);
+
+		dojo.connect(_t.showAnim, "beforeBegin", dojo.hitch(_t.hideAnim, "stop", true));
+		dojo.connect(_t.hideAnim, "beforeBegin", dojo.hitch(_t.showAnim, "stop", true));
+	},
+
+	show: function(delay){
+		// summary: Toggle the node to showing
+		// delay: Integer?
+		//		Ammount of time to stall playing the show animation
+		return this.showAnim.play(delay || 0);
+	},
+
+	hide: function(delay){
+		// summary: Toggle the node to hidden
+		// delay: Integer?
+		//		Ammount of time to stall playing the hide animation
+		return this.hideAnim.play(delay || 0);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx"] = true;
+dojo.provide("dojo.fx");
+ // FIXME: remove this back-compat require in 2.0 
+/*=====
+dojo.fx = {
+	// summary: Effects library on top of Base animations
+};
+=====*/
+(function(){
+	
+	var d = dojo, 
+		_baseObj = {
+			_fire: function(evt, args){
+				if(this[evt]){
+					this[evt].apply(this, args||[]);
+				}
+				return this;
+			}
+		};
+
+	var _chain = function(animations){
+		this._index = -1;
+		this._animations = animations||[];
+		this._current = this._onAnimateCtx = this._onEndCtx = null;
+
+		this.duration = 0;
+		d.forEach(this._animations, function(a){
+			this.duration += a.duration;
+			if(a.delay){ this.duration += a.delay; }
+		}, this);
+	};
+	d.extend(_chain, {
+		_onAnimate: function(){
+			this._fire("onAnimate", arguments);
+		},
+		_onEnd: function(){
+			d.disconnect(this._onAnimateCtx);
+			d.disconnect(this._onEndCtx);
+			this._onAnimateCtx = this._onEndCtx = null;
+			if(this._index + 1 == this._animations.length){
+				this._fire("onEnd");
+			}else{
+				// switch animations
+				this._current = this._animations[++this._index];
+				this._onAnimateCtx = d.connect(this._current, "onAnimate", this, "_onAnimate");
+				this._onEndCtx = d.connect(this._current, "onEnd", this, "_onEnd");
+				this._current.play(0, true);
+			}
+		},
+		play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+			if(!this._current){ this._current = this._animations[this._index = 0]; }
+			if(!gotoStart && this._current.status() == "playing"){ return this; }
+			var beforeBegin = d.connect(this._current, "beforeBegin", this, function(){
+					this._fire("beforeBegin");
+				}),
+				onBegin = d.connect(this._current, "onBegin", this, function(arg){
+					this._fire("onBegin", arguments);
+				}),
+				onPlay = d.connect(this._current, "onPlay", this, function(arg){
+					this._fire("onPlay", arguments);
+					d.disconnect(beforeBegin);
+					d.disconnect(onBegin);
+					d.disconnect(onPlay);
+				});
+			if(this._onAnimateCtx){
+				d.disconnect(this._onAnimateCtx);
+			}
+			this._onAnimateCtx = d.connect(this._current, "onAnimate", this, "_onAnimate");
+			if(this._onEndCtx){
+				d.disconnect(this._onEndCtx);
+			}
+			this._onEndCtx = d.connect(this._current, "onEnd", this, "_onEnd");
+			this._current.play.apply(this._current, arguments);
+			return this;
+		},
+		pause: function(){
+			if(this._current){
+				var e = d.connect(this._current, "onPause", this, function(arg){
+						this._fire("onPause", arguments);
+						d.disconnect(e);
+					});
+				this._current.pause();
+			}
+			return this;
+		},
+		gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){
+			this.pause();
+			var offset = this.duration * percent;
+			this._current = null;
+			d.some(this._animations, function(a){
+				if(a.duration <= offset){
+					this._current = a;
+					return true;
+				}
+				offset -= a.duration;
+				return false;
+			});
+			if(this._current){
+				this._current.gotoPercent(offset / this._current.duration, andPlay);
+			}
+			return this;
+		},
+		stop: function(/*boolean?*/ gotoEnd){
+			if(this._current){
+				if(gotoEnd){
+					for(; this._index + 1 < this._animations.length; ++this._index){
+						this._animations[this._index].stop(true);
+					}
+					this._current = this._animations[this._index];
+				}
+				var e = d.connect(this._current, "onStop", this, function(arg){
+						this._fire("onStop", arguments);
+						d.disconnect(e);
+					});
+				this._current.stop();
+			}
+			return this;
+		},
+		status: function(){
+			return this._current ? this._current.status() : "stopped";
+		},
+		destroy: function(){
+			if(this._onAnimateCtx){ d.disconnect(this._onAnimateCtx); }
+			if(this._onEndCtx){ d.disconnect(this._onEndCtx); }
+		}
+	});
+	d.extend(_chain, _baseObj);
+
+	dojo.fx.chain = function(/*dojo.Animation[]*/ animations){
+		// summary: 
+		//		Chain a list of `dojo.Animation`s to run in sequence
+		//
+		// description:
+		//		Return a `dojo.Animation` which will play all passed
+		//		`dojo.Animation` instances in sequence, firing its own
+		//		synthesized events simulating a single animation. (eg:
+		//		onEnd of this animation means the end of the chain, 
+		//		not the individual animations within)
+		//
+		// example:
+		//	Once `node` is faded out, fade in `otherNode`
+		//	|	dojo.fx.chain([
+		//	|		dojo.fadeIn({ node:node }),
+		//	|		dojo.fadeOut({ node:otherNode })
+		//	|	]).play();
+		//
+		return new _chain(animations) // dojo.Animation
+	};
+
+	var _combine = function(animations){
+		this._animations = animations||[];
+		this._connects = [];
+		this._finished = 0;
+
+		this.duration = 0;
+		d.forEach(animations, function(a){
+			var duration = a.duration;
+			if(a.delay){ duration += a.delay; }
+			if(this.duration < duration){ this.duration = duration; }
+			this._connects.push(d.connect(a, "onEnd", this, "_onEnd"));
+		}, this);
+		
+		this._pseudoAnimation = new d.Animation({curve: [0, 1], duration: this.duration});
+		var self = this;
+		d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], 
+			function(evt){
+				self._connects.push(d.connect(self._pseudoAnimation, evt,
+					function(){ self._fire(evt, arguments); }
+				));
+			}
+		);
+	};
+	d.extend(_combine, {
+		_doAction: function(action, args){
+			d.forEach(this._animations, function(a){
+				a[action].apply(a, args);
+			});
+			return this;
+		},
+		_onEnd: function(){
+			if(++this._finished > this._animations.length){
+				this._fire("onEnd");
+			}
+		},
+		_call: function(action, args){
+			var t = this._pseudoAnimation;
+			t[action].apply(t, args);
+		},
+		play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+			this._finished = 0;
+			this._doAction("play", arguments);
+			this._call("play", arguments);
+			return this;
+		},
+		pause: function(){
+			this._doAction("pause", arguments);
+			this._call("pause", arguments);
+			return this;
+		},
+		gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){
+			var ms = this.duration * percent;
+			d.forEach(this._animations, function(a){
+				a.gotoPercent(a.duration < ms ? 1 : (ms / a.duration), andPlay);
+			});
+			this._call("gotoPercent", arguments);
+			return this;
+		},
+		stop: function(/*boolean?*/ gotoEnd){
+			this._doAction("stop", arguments);
+			this._call("stop", arguments);
+			return this;
+		},
+		status: function(){
+			return this._pseudoAnimation.status();
+		},
+		destroy: function(){
+			d.forEach(this._connects, dojo.disconnect);
+		}
+	});
+	d.extend(_combine, _baseObj);
+
+	dojo.fx.combine = function(/*dojo.Animation[]*/ animations){
+		// summary: 
+		//		Combine a list of `dojo.Animation`s to run in parallel
+		//
+		// description:
+		//		Combine an array of `dojo.Animation`s to run in parallel, 
+		//		providing a new `dojo.Animation` instance encompasing each
+		//		animation, firing standard animation events.
+		//
+		// example:
+		//	Fade out `node` while fading in `otherNode` simultaneously
+		//	|	dojo.fx.combine([
+		//	|		dojo.fadeIn({ node:node }),
+		//	|		dojo.fadeOut({ node:otherNode })
+		//	|	]).play();
+		//
+		// example:
+		//	When the longest animation ends, execute a function:
+		//	|	var anim = dojo.fx.combine([
+		//	|		dojo.fadeIn({ node: n, duration:700 }),
+		//	|		dojo.fadeOut({ node: otherNode, duration: 300 })
+		//	|	]);
+		//	|	dojo.connect(anim, "onEnd", function(){
+		//	|		// overall animation is done.
+		//	|	});
+		//	|	anim.play(); // play the animation
+		//
+		return new _combine(animations); // dojo.Animation
+	};
+
+	dojo.fx.wipeIn = function(/*Object*/ args){
+		// summary:
+		//		Expand a node to it's natural height.
+		//
+		// description:
+		//		Returns an animation that will expand the
+		//		node defined in 'args' object from it's current height to
+		//		it's natural height (with no scrollbar).
+		//		Node must have no margin/border/padding.
+		//
+		// args: Object
+		//		A hash-map of standard `dojo.Animation` constructor properties
+		//		(such as easing: node: duration: and so on)
+		//
+		// example:
+		//	|	dojo.fx.wipeIn({
+		//	|		node:"someId"
+		//	|	}).play()
+		var node = args.node = d.byId(args.node), s = node.style, o;
+
+		var anim = d.animateProperty(d.mixin({
+			properties: {
+				height: {
+					// wrapped in functions so we wait till the last second to query (in case value has changed)
+					start: function(){
+						// start at current [computed] height, but use 1px rather than 0
+						// because 0 causes IE to display the whole panel
+						o = s.overflow;
+						s.overflow = "hidden";
+						if(s.visibility == "hidden" || s.display == "none"){
+							s.height = "1px";
+							s.display = "";
+							s.visibility = "";
+							return 1;
+						}else{
+							var height = d.style(node, "height");
+							return Math.max(height, 1);
+						}
+					},
+					end: function(){
+						return node.scrollHeight;
+					}
+				}
+			}
+		}, args));
+
+		d.connect(anim, "onEnd", function(){ 
+			s.height = "auto";
+			s.overflow = o;
+		});
+
+		return anim; // dojo.Animation
+	}
+
+	dojo.fx.wipeOut = function(/*Object*/ args){
+		// summary:
+		//		Shrink a node to nothing and hide it. 
+		//
+		// description:
+		//		Returns an animation that will shrink node defined in "args"
+		//		from it's current height to 1px, and then hide it.
+		//
+		// args: Object
+		//		A hash-map of standard `dojo.Animation` constructor properties
+		//		(such as easing: node: duration: and so on)
+		// 
+		// example:
+		//	|	dojo.fx.wipeOut({ node:"someId" }).play()
+		
+		var node = args.node = d.byId(args.node), s = node.style, o;
+		
+		var anim = d.animateProperty(d.mixin({
+			properties: {
+				height: {
+					end: 1 // 0 causes IE to display the whole panel
+				}
+			}
+		}, args));
+
+		d.connect(anim, "beforeBegin", function(){
+			o = s.overflow;
+			s.overflow = "hidden";
+			s.display = "";
+		});
+		d.connect(anim, "onEnd", function(){
+			s.overflow = o;
+			s.height = "auto";
+			s.display = "none";
+		});
+
+		return anim; // dojo.Animation
+	}
+
+	dojo.fx.slideTo = function(/*Object*/ args){
+		// summary:
+		//		Slide a node to a new top/left position
+		//
+		// description:
+		//		Returns an animation that will slide "node" 
+		//		defined in args Object from its current position to
+		//		the position defined by (args.left, args.top).
+		//
+		// args: Object
+		//		A hash-map of standard `dojo.Animation` constructor properties
+		//		(such as easing: node: duration: and so on). Special args members
+		//		are `top` and `left`, which indicate the new position to slide to.
+		//
+		// example:
+		//	|	dojo.fx.slideTo({ node: node, left:"40", top:"50", units:"px" }).play()
+
+		var node = args.node = d.byId(args.node), 
+			top = null, left = null;
+
+		var init = (function(n){
+			return function(){
+				var cs = d.getComputedStyle(n);
+				var pos = cs.position;
+				top = (pos == 'absolute' ? n.offsetTop : parseInt(cs.top) || 0);
+				left = (pos == 'absolute' ? n.offsetLeft : parseInt(cs.left) || 0);
+				if(pos != 'absolute' && pos != 'relative'){
+					var ret = d.position(n, true);
+					top = ret.y;
+					left = ret.x;
+					n.style.position="absolute";
+					n.style.top=top+"px";
+					n.style.left=left+"px";
+				}
+			};
+		})(node);
+		init();
+
+		var anim = d.animateProperty(d.mixin({
+			properties: {
+				top: args.top || 0,
+				left: args.left || 0
+			}
+		}, args));
+		d.connect(anim, "beforeBegin", anim, init);
+
+		return anim; // dojo.Animation
+	}
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit.form._FormMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._FormMixin"] = true;
+dojo.provide("dijit.form._FormMixin");
+
+
+
+dojo.declare("dijit.form._FormMixin", null,
+	{
+	// summary:
+	//		Mixin for containers of form widgets (i.e. widgets that represent a single value
+	//		and can be children of a <form> node or dijit.form.Form widget)
+	// description:
+	//		Can extract all the form widgets
+	//		values and combine them into a single javascript object, or alternately
+	//		take such an object and set the values for all the contained
+	//		form widgets
+
+/*=====
+    // value: Object
+	//		Name/value hash for each child widget with a name and value.
+	//		Child widgets without names are not part of the hash.
+	// 
+	//		If there are multiple child widgets w/the same name, value is an array,
+	//		unless they are radio buttons in which case value is a scalar (since only
+	//		one radio button can be checked at a time).
+	//
+	//		If a child widget's name is a dot separated list (like a.b.c.d), it's a nested structure.
+	//
+	//		Example:
+	//	|	{ name: "John Smith", interests: ["sports", "movies"] }
+=====*/
+
+	//	TODO:
+	//	* Repeater
+	//	* better handling for arrays.  Often form elements have names with [] like
+	//	* people[3].sex (for a list of people [{name: Bill, sex: M}, ...])
+	//
+	//
+
+		reset: function(){
+			dojo.forEach(this.getDescendants(), function(widget){
+				if(widget.reset){
+					widget.reset();
+				}
+			});
+		},
+
+		validate: function(){
+			// summary:
+			//		returns if the form is valid - same as isValid - but
+			//			provides a few additional (ui-specific) features.
+			//			1 - it will highlight any sub-widgets that are not
+			//				valid
+			//			2 - it will call focus() on the first invalid
+			//				sub-widget
+			var didFocus = false;
+			return dojo.every(dojo.map(this.getDescendants(), function(widget){
+				// Need to set this so that "required" widgets get their
+				// state set.
+				widget._hasBeenBlurred = true;
+				var valid = widget.disabled || !widget.validate || widget.validate();
+				if(!valid && !didFocus){
+					// Set focus of the first non-valid widget
+					dojo.window.scrollIntoView(widget.containerNode || widget.domNode);
+					widget.focus();
+					didFocus = true;
+				}
+	 			return valid;
+	 		}), function(item){ return item; });
+		},
+
+		setValues: function(val){
+			dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.", "", "2.0");
+			return this.set('value', val);
+		},
+		_setValueAttr: function(/*object*/obj){
+			// summary:
+			//		Fill in form values from according to an Object (in the format returned by attr('value'))
+
+			// generate map from name --> [list of widgets with that name]
+			var map = { };
+			dojo.forEach(this.getDescendants(), function(widget){
+				if(!widget.name){ return; }
+				var entry = map[widget.name] || (map[widget.name] = [] );
+				entry.push(widget);
+			});
+
+			for(var name in map){
+				if(!map.hasOwnProperty(name)){
+					continue;
+				}
+				var widgets = map[name],						// array of widgets w/this name
+					values = dojo.getObject(name, false, obj);	// list of values for those widgets
+
+				if(values === undefined){
+					continue;
+				}
+				if(!dojo.isArray(values)){
+					values = [ values ];
+				}
+				if(typeof widgets[0].checked == 'boolean'){
+					// for checkbox/radio, values is a list of which widgets should be checked
+					dojo.forEach(widgets, function(w, i){
+						w.set('value', dojo.indexOf(values, w.value) != -1);
+					});
+				}else if(widgets[0].multiple){
+					// it takes an array (e.g. multi-select)
+					widgets[0].set('value', values);
+				}else{
+					// otherwise, values is a list of values to be assigned sequentially to each widget
+					dojo.forEach(widgets, function(w, i){
+						w.set('value', values[i]);
+					});
+				}
+			}
+
+			/***
+			 * 	TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets)
+
+			dojo.forEach(this.containerNode.elements, function(element){
+				if(element.name == ''){return};	// like "continue"
+				var namePath = element.name.split(".");
+				var myObj=obj;
+				var name=namePath[namePath.length-1];
+				for(var j=1,len2=namePath.length;j<len2;++j){
+					var p=namePath[j - 1];
+					// repeater support block
+					var nameA=p.split("[");
+					if(nameA.length > 1){
+						if(typeof(myObj[nameA[0]]) == "undefined"){
+							myObj[nameA[0]]=[ ];
+						} // if
+
+						nameIndex=parseInt(nameA[1]);
+						if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
+							myObj[nameA[0]][nameIndex] = { };
+						}
+						myObj=myObj[nameA[0]][nameIndex];
+						continue;
+					} // repeater support ends
+
+					if(typeof(myObj[p]) == "undefined"){
+						myObj=undefined;
+						break;
+					};
+					myObj=myObj[p];
+				}
+
+				if(typeof(myObj) == "undefined"){
+					return;		// like "continue"
+				}
+				if(typeof(myObj[name]) == "undefined" && this.ignoreNullValues){
+					return;		// like "continue"
+				}
+
+				// TODO: widget values (just call attr('value', ...) on the widget)
+
+				// TODO: maybe should call dojo.getNodeProp() instead
+				switch(element.type){
+					case "checkbox":
+						element.checked = (name in myObj) &&
+							dojo.some(myObj[name], function(val){ return val == element.value; });
+						break;
+					case "radio":
+						element.checked = (name in myObj) && myObj[name] == element.value;
+						break;
+					case "select-multiple":
+						element.selectedIndex=-1;
+						dojo.forEach(element.options, function(option){
+							option.selected = dojo.some(myObj[name], function(val){ return option.value == val; });
+						});
+						break;
+					case "select-one":
+						element.selectedIndex="0";
+						dojo.forEach(element.options, function(option){
+							option.selected = option.value == myObj[name];
+						});
+						break;
+					case "hidden":
+					case "text":
+					case "textarea":
+					case "password":
+						element.value = myObj[name] || "";
+						break;
+				}
+	  		});
+	  		*/
+		},
+
+		getValues: function(){
+			dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.", "", "2.0");
+			return this.get('value');
+		},
+		_getValueAttr: function(){
+			// summary:
+			// 		Returns Object representing form values.
+			// description:
+			//		Returns name/value hash for each form element.
+			//		If there are multiple elements w/the same name, value is an array,
+			//		unless they are radio buttons in which case value is a scalar since only
+			//		one can be checked at a time.
+			//
+			//		If the name is a dot separated list (like a.b.c.d), creates a nested structure.
+			//		Only works on widget form elements.
+			// example:
+			//		| { name: "John Smith", interests: ["sports", "movies"] }
+
+			// get widget values
+			var obj = { };
+			dojo.forEach(this.getDescendants(), function(widget){
+				var name = widget.name;
+				if(!name || widget.disabled){ return; }
+
+				// Single value widget (checkbox, radio, or plain <input> type widget
+				var value = widget.get('value');
+
+				// Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
+				if(typeof widget.checked == 'boolean'){
+					if(/Radio/.test(widget.declaredClass)){
+						// radio button
+						if(value !== false){
+							dojo.setObject(name, value, obj);
+						}else{
+							// give radio widgets a default of null
+							value = dojo.getObject(name, false, obj);
+							if(value === undefined){
+								dojo.setObject(name, null, obj);
+							}
+						}
+					}else{
+						// checkbox/toggle button
+						var ary=dojo.getObject(name, false, obj);
+						if(!ary){
+							ary=[];
+							dojo.setObject(name, ary, obj);
+						}
+						if(value !== false){
+							ary.push(value);
+						}
+					}
+				}else{
+					var prev=dojo.getObject(name, false, obj);
+					if(typeof prev != "undefined"){
+						if(dojo.isArray(prev)){
+							prev.push(value);
+						}else{
+							dojo.setObject(name, [prev, value], obj);
+						}
+					}else{
+						// unique name
+						dojo.setObject(name, value, obj);
+					}
+				}
+			});
+
+			/***
+			 * code for plain input boxes (see also dojo.formToObject, can we use that instead of this code?
+			 * but it doesn't understand [] notation, presumably)
+			var obj = { };
+			dojo.forEach(this.containerNode.elements, function(elm){
+				if(!elm.name)	{
+					return;		// like "continue"
+				}
+				var namePath = elm.name.split(".");
+				var myObj=obj;
+				var name=namePath[namePath.length-1];
+				for(var j=1,len2=namePath.length;j<len2;++j){
+					var nameIndex = null;
+					var p=namePath[j - 1];
+					var nameA=p.split("[");
+					if(nameA.length > 1){
+						if(typeof(myObj[nameA[0]]) == "undefined"){
+							myObj[nameA[0]]=[ ];
+						} // if
+						nameIndex=parseInt(nameA[1]);
+						if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){
+							myObj[nameA[0]][nameIndex] = { };
+						}
+					} else if(typeof(myObj[nameA[0]]) == "undefined"){
+						myObj[nameA[0]] = { }
+					} // if
+
+					if(nameA.length == 1){
+						myObj=myObj[nameA[0]];
+					} else{
+						myObj=myObj[nameA[0]][nameIndex];
+					} // if
+				} // for
+
+				if((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)){
+					if(name == name.split("[")[0]){
+						myObj[name]=elm.value;
+					} else{
+						// can not set value when there is no name
+					}
+				} else if(elm.type == "checkbox" && elm.checked){
+					if(typeof(myObj[name]) == 'undefined'){
+						myObj[name]=[ ];
+					}
+					myObj[name].push(elm.value);
+				} else if(elm.type == "select-multiple"){
+					if(typeof(myObj[name]) == 'undefined'){
+						myObj[name]=[ ];
+					}
+					for(var jdx=0,len3=elm.options.length; jdx<len3; ++jdx){
+						if(elm.options[jdx].selected){
+							myObj[name].push(elm.options[jdx].value);
+						}
+					}
+				} // if
+				name=undefined;
+			}); // forEach
+			***/
+			return obj;
+		},
+
+		// TODO: ComboBox might need time to process a recently input value.  This should be async?
+	 	isValid: function(){
+	 		// summary:
+	 		//		Returns true if all of the widgets are valid
+
+	 		// This also populate this._invalidWidgets[] array with list of invalid widgets...
+	 		// TODO: put that into separate function?   It's confusing to have that as a side effect
+	 		// of a method named isValid().
+
+			this._invalidWidgets = dojo.filter(this.getDescendants(), function(widget){
+				return !widget.disabled && widget.isValid && !widget.isValid();
+	 		});
+			return !this._invalidWidgets.length;
+		},
+
+
+		onValidStateChange: function(isValid){
+			// summary:
+			//		Stub function to connect to if you want to do something
+			//		(like disable/enable a submit button) when the valid
+			//		state changes on the form as a whole.
+		},
+
+		_widgetChange: function(widget){
+			// summary:
+			//		Connected to a widget's onChange function - update our
+			//		valid state, if needed.
+			var isValid = this._lastValidState;
+			if(!widget || this._lastValidState === undefined){
+				// We have passed a null widget, or we haven't been validated
+				// yet - let's re-check all our children
+				// This happens when we connect (or reconnect) our children
+				isValid = this.isValid();
+				if(this._lastValidState === undefined){
+					// Set this so that we don't fire an onValidStateChange
+					// the first time
+					this._lastValidState = isValid;
+				}
+			}else if(widget.isValid){
+				this._invalidWidgets = dojo.filter(this._invalidWidgets || [], function(w){
+					return (w != widget);
+				}, this);
+				if(!widget.isValid() && !widget.get("disabled")){
+					this._invalidWidgets.push(widget);
+				}
+				isValid = (this._invalidWidgets.length === 0);
+			}
+			if(isValid !== this._lastValidState){
+				this._lastValidState = isValid;
+				this.onValidStateChange(isValid);
+			}
+		},
+
+		connectChildren: function(){
+			// summary:
+			//		Connects to the onChange function of all children to
+			//		track valid state changes.  You can call this function
+			//		directly, ex. in the event that you programmatically
+			//		add a widget to the form *after* the form has been
+			//		initialized.
+			dojo.forEach(this._changeConnections, dojo.hitch(this, "disconnect"));
+			var _this = this;
+
+			// we connect to validate - so that it better reflects the states
+			// of the widgets - also, we only connect if it has a validate
+			// function (to avoid too many unneeded connections)
+			var conns = (this._changeConnections = []);
+			dojo.forEach(dojo.filter(this.getDescendants(),
+				function(item){ return item.validate; }
+			),
+			function(widget){
+				// We are interested in whenever the widget is validated - or
+				// whenever the disabled attribute on that widget is changed
+				conns.push(_this.connect(widget, "validate",
+									dojo.hitch(_this, "_widgetChange", widget)));
+				conns.push(_this.connect(widget, "_setDisabledAttr",
+									dojo.hitch(_this, "_widgetChange", widget)));
+			});
+
+			// Call the widget change function to update the valid state, in
+			// case something is different now.
+			this._widgetChange(null);
+		},
+
+		startup: function(){
+			this.inherited(arguments);
+			// Initialize our valid state tracking.  Needs to be done in startup
+			// because it's not guaranteed that our children are initialized
+			// yet.
+			this._changeConnections = [];
+			this.connectChildren();
+		}
+	});
+
+}
+
+if(!dojo._hasResource["dijit._DialogMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._DialogMixin"] = true;
+dojo.provide("dijit._DialogMixin");
+
+
+
+dojo.declare("dijit._DialogMixin", null,
+	{
+		// summary:
+		//		This provides functions useful to Dialog and TooltipDialog
+
+		attributeMap: dijit._Widget.prototype.attributeMap,
+
+		execute: function(/*Object*/ formContents){
+			// summary:
+			//		Callback when the user hits the submit button.
+			//		Override this method to handle Dialog execution.
+			// description:
+			//		After the user has pressed the submit button, the Dialog
+			//		first calls onExecute() to notify the container to hide the
+			//		dialog and restore focus to wherever it used to be.
+			//
+			//		*Then* this method is called.
+			// type:
+			//		callback
+		},
+
+		onCancel: function(){
+			// summary:
+			//	    Called when user has pressed the Dialog's cancel button, to notify container.
+			// description:
+			//	    Developer shouldn't override or connect to this method;
+			//		it's a private communication device between the TooltipDialog
+			//		and the thing that opened it (ex: `dijit.form.DropDownButton`)
+			// type:
+			//		protected
+		},
+
+		onExecute: function(){
+			// summary:
+			//	    Called when user has pressed the dialog's OK button, to notify container.
+			// description:
+			//	    Developer shouldn't override or connect to this method;
+			//		it's a private communication device between the TooltipDialog
+			//		and the thing that opened it (ex: `dijit.form.DropDownButton`)
+			// type:
+			//		protected
+		},
+
+		_onSubmit: function(){
+			// summary:
+			//		Callback when user hits submit button
+			// type:
+			//		protected
+			this.onExecute();	// notify container that we are about to execute
+			this.execute(this.get('value'));
+		},
+
+		_getFocusItems: function(/*Node*/ dialogNode){
+			// summary:
+			//		Find focusable Items each time a dialog is opened,
+			//		setting _firstFocusItem and _lastFocusItem
+			// tags:
+			//		protected
+
+			var elems = dijit._getTabNavigable(dojo.byId(dialogNode));
+			this._firstFocusItem = elems.lowest || elems.first || dialogNode;
+			this._lastFocusItem = elems.last || elems.highest || this._firstFocusItem;
+			if(dojo.isMoz && this._firstFocusItem.tagName.toLowerCase() == "input" &&
+					dojo.getNodeProp(this._firstFocusItem, "type").toLowerCase() == "file"){
+				// FF doesn't behave well when first element is input type=file, set first focusable to dialog container
+				dojo.attr(dialogNode, "tabIndex", "0");
+				this._firstFocusItem = dialogNode;
+			}
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.DialogUnderlay"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.DialogUnderlay"] = true;
+dojo.provide("dijit.DialogUnderlay");
+
+
+
+
+
+
+dojo.declare(
+	"dijit.DialogUnderlay",
+	[dijit._Widget, dijit._Templated],
+	{
+		// summary:
+		//		The component that blocks the screen behind a `dijit.Dialog`
+		//
+		// description:
+		// 		A component used to block input behind a `dijit.Dialog`. Only a single
+		//		instance of this widget is created by `dijit.Dialog`, and saved as
+		//		a reference to be shared between all Dialogs as `dijit._underlay`
+		//
+		//		The underlay itself can be styled based on and id:
+		//	|	#myDialog_underlay { background-color:red; }
+		//
+		//		In the case of `dijit.Dialog`, this id is based on the id of the Dialog,
+		//		suffixed with _underlay.
+
+		// Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
+		// Inner div has opacity specified in CSS file.
+		templateString: "<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",
+
+		// Parameters on creation or updatable later
+
+		// dialogId: String
+		//		Id of the dialog.... DialogUnderlay's id is based on this id
+		dialogId: "",
+
+		// class: String
+		//		This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay
+		"class": "",
+
+		attributeMap: { id: "domNode" },
+
+		_setDialogIdAttr: function(id){
+			dojo.attr(this.node, "id", id + "_underlay");
+		},
+
+		_setClassAttr: function(clazz){
+			this.node.className = "dijitDialogUnderlay " + clazz;
+		},
+
+		postCreate: function(){
+			// summary:
+			//		Append the underlay to the body
+			dojo.body().appendChild(this.domNode);
+		},
+
+		layout: function(){
+			// summary:
+			//		Sets the background to the size of the viewport
+			//
+			// description:
+			//		Sets the background to the size of the viewport (rather than the size
+			//		of the document) since we need to cover the whole browser window, even
+			//		if the document is only a few lines long.
+			// tags:
+			//		private
+
+			var is = this.node.style,
+				os = this.domNode.style;
+
+			// hide the background temporarily, so that the background itself isn't
+			// causing scrollbars to appear (might happen when user shrinks browser
+			// window and then we are called to resize)
+			os.display = "none";
+
+			// then resize and show
+			var viewport = dojo.window.getBox();
+			os.top = viewport.t + "px";
+			os.left = viewport.l + "px";
+			is.width = viewport.w + "px";
+			is.height = viewport.h + "px";
+			os.display = "block";
+		},
+
+		show: function(){
+			// summary:
+			//		Show the dialog underlay
+			this.domNode.style.display = "block";
+			this.layout();
+			this.bgIframe = new dijit.BackgroundIframe(this.domNode);
+		},
+
+		hide: function(){
+			// summary:
+			//		Hides the dialog underlay
+			this.bgIframe.destroy();
+			this.domNode.style.display = "none";
+		},
+
+		uninitialize: function(){
+			if(this.bgIframe){
+				this.bgIframe.destroy();
+			}
+			this.inherited(arguments);
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dojo.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.html"] = true;
+dojo.provide("dojo.html");
+
+// the parser might be needed..
+ 
+
+(function(){ // private scope, sort of a namespace
+
+	// idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes
+	var idCounter = 0, 
+		d = dojo;
+	
+	dojo.html._secureForInnerHtml = function(/*String*/ cont){
+		// summary:
+		//		removes !DOCTYPE and title elements from the html string.
+		// 
+		//		khtml is picky about dom faults, you can't attach a style or <title> node as child of body
+		//		must go into head, so we need to cut out those tags
+		//	cont:
+		//		An html string for insertion into the dom
+		//	
+		return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, ""); // String
+	};
+
+/*====
+	dojo.html._emptyNode = function(node){
+		// summary:
+		//		removes all child nodes from the given node
+		//	node: DOMNode
+		//		the parent element
+	};
+=====*/
+	dojo.html._emptyNode = dojo.empty;
+
+	dojo.html._setNodeContent = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont){
+		// summary:
+		//		inserts the given content into the given node
+		//	node:
+		//		the parent element
+		//	content:
+		//		the content to be set on the parent element. 
+		//		This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
+		
+		// always empty
+		d.empty(node);
+
+		if(cont) {
+			if(typeof cont == "string") {
+				cont = d._toDom(cont, node.ownerDocument);
+			}
+			if(!cont.nodeType && d.isArrayLike(cont)) {
+				// handle as enumerable, but it may shrink as we enumerate it
+				for(var startlen=cont.length, i=0; i<cont.length; i=startlen==cont.length ? i+1 : 0) {
+					d.place( cont[i], node, "last");
+				}
+			} else {
+				// pass nodes, documentFragments and unknowns through to dojo.place
+				d.place(cont, node, "last");
+			}
+		}
+
+		// return DomNode
+		return node;
+	};
+
+	// we wrap up the content-setting operation in a object
+	dojo.declare("dojo.html._ContentSetter", null, 
+		{
+			// node: DomNode|String
+			//		An node which will be the parent element that we set content into
+			node: "",
+
+			// content: String|DomNode|DomNode[]
+			//		The content to be placed in the node. Can be an HTML string, a node reference, or a enumerable list of nodes
+			content: "",
+			
+			// id: String?
+			//		Usually only used internally, and auto-generated with each instance 
+			id: "",
+
+			// cleanContent: Boolean
+			//		Should the content be treated as a full html document, 
+			//		and the real content stripped of <html>, <body> wrapper before injection
+			cleanContent: false,
+			
+			// extractContent: Boolean
+			//		Should the content be treated as a full html document, and the real content stripped of <html>, <body> wrapper before injection
+			extractContent: false,
+
+			// parseContent: Boolean
+			//		Should the node by passed to the parser after the new content is set
+			parseContent: false,
+			
+			// lifecyle methods
+			constructor: function(/* Object */params, /* String|DomNode */node){
+				//	summary:
+				//		Provides a configurable, extensible object to wrap the setting on content on a node
+				//		call the set() method to actually set the content..
+ 
+				// the original params are mixed directly into the instance "this"
+				dojo.mixin(this, params || {});
+
+				// give precedence to params.node vs. the node argument
+				// and ensure its a node, not an id string
+				node = this.node = dojo.byId( this.node || node );
+	
+				if(!this.id){
+					this.id = [
+						"Setter",
+						(node) ? node.id || node.tagName : "", 
+						idCounter++
+					].join("_");
+				}
+			},
+			set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){
+				// summary:
+				//		front-end to the set-content sequence 
+				//	cont:
+				//		An html string, node or enumerable list of nodes for insertion into the dom
+				//		If not provided, the object's content property will be used
+				if(undefined !== cont){
+					this.content = cont;
+				}
+				// in the re-use scenario, set needs to be able to mixin new configuration
+				if(params){
+					this._mixin(params);
+				}
+
+				this.onBegin();
+				this.setContent();
+				this.onEnd();
+
+				return this.node;
+			},
+			setContent: function(){
+				// summary:
+				//		sets the content on the node 
+
+				var node = this.node; 
+				if(!node) {
+				    // can't proceed
+					throw new Error(this.declaredClass + ": setContent given no node");
+				}
+				try{
+					node = dojo.html._setNodeContent(node, this.content);
+				}catch(e){
+					// check if a domfault occurs when we are appending this.errorMessage
+					// like for instance if domNode is a UL and we try append a DIV
+	
+					// FIXME: need to allow the user to provide a content error message string
+					var errMess = this.onContentError(e); 
+					try{
+						node.innerHTML = errMess;
+					}catch(e){
+						console.error('Fatal ' + this.declaredClass + '.setContent could not change content due to '+e.message, e);
+					}
+				}
+				// always put back the node for the next method
+				this.node = node; // DomNode
+			},
+			
+			empty: function() {
+				// summary
+				//	cleanly empty out existing content
+
+				// destroy any widgets from a previous run
+				// NOTE: if you dont want this you'll need to empty 
+				// the parseResults array property yourself to avoid bad things happenning
+				if(this.parseResults && this.parseResults.length) {
+					dojo.forEach(this.parseResults, function(w) {
+						if(w.destroy){
+							w.destroy();
+						}
+					});
+					delete this.parseResults;
+				}
+				// this is fast, but if you know its already empty or safe, you could 
+				// override empty to skip this step
+				dojo.html._emptyNode(this.node);
+			},
+	
+			onBegin: function(){
+				// summary
+				//		Called after instantiation, but before set(); 
+				//		It allows modification of any of the object properties 
+				//		- including the node and content provided - before the set operation actually takes place
+				//		This default implementation checks for cleanContent and extractContent flags to 
+				//		optionally pre-process html string content
+				var cont = this.content;
+	
+				if(dojo.isString(cont)){
+					if(this.cleanContent){
+						cont = dojo.html._secureForInnerHtml(cont);
+					}
+  
+					if(this.extractContent){
+						var match = cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+						if(match){ cont = match[1]; }
+					}
+				}
+
+				// clean out the node and any cruft associated with it - like widgets
+				this.empty();
+				
+				this.content = cont;
+				return this.node; /* DomNode */
+			},
+	
+			onEnd: function(){
+				// summary
+				//		Called after set(), when the new content has been pushed into the node
+				//		It provides an opportunity for post-processing before handing back the node to the caller
+				//		This default implementation checks a parseContent flag to optionally run the dojo parser over the new content
+				if(this.parseContent){
+					// populates this.parseResults if you need those..
+					this._parse();
+				}
+				return this.node; /* DomNode */
+			},
+	
+			tearDown: function(){
+				// summary
+				//		manually reset the Setter instance if its being re-used for example for another set()
+				// description
+				//		tearDown() is not called automatically. 
+				//		In normal use, the Setter instance properties are simply allowed to fall out of scope
+				//		but the tearDown method can be called to explicitly reset this instance.
+				delete this.parseResults; 
+				delete this.node; 
+				delete this.content; 
+			},
+  
+			onContentError: function(err){
+				return "Error occured setting content: " + err; 
+			},
+			
+			_mixin: function(params){
+				// mix properties/methods into the instance
+				// TODO: the intention with tearDown is to put the Setter's state 
+				// back to that of the original constructor (vs. deleting/resetting everything regardless of ctor params)
+				// so we could do something here to move the original properties aside for later restoration
+				var empty = {}, key;
+				for(key in params){
+					if(key in empty){ continue; }
+					// TODO: here's our opportunity to mask the properties we dont consider configurable/overridable
+					// .. but history shows we'll almost always guess wrong
+					this[key] = params[key]; 
+				}
+			},
+			_parse: function(){
+				// summary: 
+				//		runs the dojo parser over the node contents, storing any results in this.parseResults
+				//		Any errors resulting from parsing are passed to _onError for handling
+
+				var rootNode = this.node;
+				try{
+					// store the results (widgets, whatever) for potential retrieval
+					this.parseResults = dojo.parser.parse({
+						rootNode: rootNode,
+						dir: this.dir,
+						lang: this.lang
+					});
+				}catch(e){
+					this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id);
+				}
+			},
+  
+			_onError: function(type, err, consoleText){
+				// summary:
+				//		shows user the string that is returned by on[type]Error
+				//		overide/implement on[type]Error and return your own string to customize
+				var errText = this['on' + type + 'Error'].call(this, err);
+				if(consoleText){
+					console.error(consoleText, err);
+				}else if(errText){ // a empty string won't change current content
+					dojo.html._setNodeContent(this.node, errText, true);
+				}
+			}
+	}); // end dojo.declare()
+
+	dojo.html.set = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont, /* Object? */ params){
+			// summary:
+			//		inserts (replaces) the given content into the given node. dojo.place(cont, node, "only")
+			//		may be a better choice for simple HTML insertion.
+			// description:
+			//		Unless you need to use the params capabilities of this method, you should use
+			//		dojo.place(cont, node, "only"). dojo.place() has more robust support for injecting
+			//		an HTML string into the DOM, but it only handles inserting an HTML string as DOM
+			//		elements, or inserting a DOM node. dojo.place does not handle NodeList insertions
+			//		or the other capabilities as defined by the params object for this method.
+			//	node:
+			//		the parent element that will receive the content
+			//	cont:
+			//		the content to be set on the parent element. 
+			//		This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes
+			//	params: 
+			//		Optional flags/properties to configure the content-setting. See dojo.html._ContentSetter
+			//	example:
+			//		A safe string/node/nodelist content replacement/injection with hooks for extension
+			//		Example Usage: 
+			//		dojo.html.set(node, "some string"); 
+			//		dojo.html.set(node, contentNode, {options}); 
+			//		dojo.html.set(node, myNode.childNodes, {options}); 
+		if(undefined == cont){
+			console.warn("dojo.html.set: no cont argument provided, using empty string");
+			cont = "";
+		}	
+		if(!params){
+			// simple and fast
+			return dojo.html._setNodeContent(node, cont, true);
+		}else{ 
+			// more options but slower
+			// note the arguments are reversed in order, to match the convention for instantiation via the parser
+			var op = new dojo.html._ContentSetter(dojo.mixin( 
+					params, 
+					{ content: cont, node: node } 
+			));
+			return op.set();
+		}
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.ContentPane"] = true;
+dojo.provide("dijit.layout.ContentPane");
+
+
+
+	// for dijit.layout.marginBox2contentBox()
+
+
+
+
+
+
+dojo.declare(
+	"dijit.layout.ContentPane", dijit._Widget,
+{
+	// summary:
+	//		A widget that acts as a container for mixed HTML and widgets, and includes an Ajax interface
+	// description:
+	//		A widget that can be used as a stand alone widget
+	//		or as a base class for other widgets.
+	//
+	//		Handles replacement of document fragment using either external uri or javascript
+	//		generated markup or DOM content, instantiating widgets within that content.
+	//		Don't confuse it with an iframe, it only needs/wants document fragments.
+	//		It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
+	//		But note that those classes can contain any widget as a child.
+	// example:
+	//		Some quick samples:
+	//		To change the innerHTML use .set('content', '<b>new content</b>')
+	//
+	//		Or you can send it a NodeList, .set('content', dojo.query('div [class=selected]', userSelection))
+	//		please note that the nodes in NodeList will copied, not moved
+	//
+	//		To do a ajax update use .set('href', url)
+
+	// href: String
+	//		The href of the content that displays now.
+	//		Set this at construction if you want to load data externally when the
+	//		pane is shown.  (Set preload=true to load it immediately.)
+	//		Changing href after creation doesn't have any effect; Use set('href', ...);
+	href: "",
+
+/*=====
+	// content: String || DomNode || NodeList || dijit._Widget
+	//		The innerHTML of the ContentPane.
+	//		Note that the initialization parameter / argument to attr("content", ...)
+	//		can be a String, DomNode, Nodelist, or _Widget.
+	content: "",
+=====*/
+
+	// extractContent: Boolean
+	//		Extract visible content from inside of <body> .... </body>.
+	//		I.e., strip <html> and <head> (and it's contents) from the href
+	extractContent: false,
+
+	// parseOnLoad: Boolean
+	//		Parse content and create the widgets, if any.
+	parseOnLoad: true,
+
+	// preventCache: Boolean
+	//		Prevent caching of data from href's by appending a timestamp to the href.
+	preventCache: false,
+
+	// preload: Boolean
+	//		Force load of data on initialization even if pane is hidden.
+	preload: false,
+
+	// refreshOnShow: Boolean
+	//		Refresh (re-download) content when pane goes from hidden to shown
+	refreshOnShow: false,
+
+	// loadingMessage: String
+	//		Message that shows while downloading
+	loadingMessage: "<span class='dijitContentPaneLoading'>${loadingState}</span>",
+
+	// errorMessage: String
+	//		Message that shows if an error occurs
+	errorMessage: "<span class='dijitContentPaneError'>${errorState}</span>",
+
+	// isLoaded: [readonly] Boolean
+	//		True if the ContentPane has data in it, either specified
+	//		during initialization (via href or inline content), or set
+	//		via attr('content', ...) / attr('href', ...)
+	//
+	//		False if it doesn't have any content, or if ContentPane is
+	//		still in the process of downloading href.
+	isLoaded: false,
+
+	baseClass: "dijitContentPane",
+
+	// doLayout: Boolean
+	//		- false - don't adjust size of children
+	//		- true - if there is a single visible child widget, set it's size to
+	//				however big the ContentPane is
+	doLayout: true,
+
+	// ioArgs: Object
+	//		Parameters to pass to xhrGet() request, for example:
+	// |	<div dojoType="dijit.layout.ContentPane" href="./bar" ioArgs="{timeout: 500}">
+	ioArgs: {},
+
+	// isContainer: [protected] Boolean
+	//		Indicates that this widget acts as a "parent" to the descendant widgets.
+	//		When the parent is started it will call startup() on the child widgets.
+	//		See also `isLayoutContainer`.
+	isContainer: true,
+
+	// isLayoutContainer: [protected] Boolean
+	//		Indicates that this widget will call resize() on it's child widgets
+	//		when they become visible.
+	isLayoutContainer: true,
+
+	// onLoadDeferred: [readonly] dojo.Deferred
+	//		This is the `dojo.Deferred` returned by attr('href', ...) and refresh().
+	//		Calling onLoadDeferred.addCallback() or addErrback() registers your
+	//		callback to be called only once, when the prior attr('href', ...) call or
+	//		the initial href parameter to the constructor finishes loading.
+	//
+	//		This is different than an onLoad() handler which gets called any time any href is loaded.
+	onLoadDeferred: null,
+
+	// Override _Widget's attributeMap because we don't want the title attribute (used to specify
+	// tab labels) to be copied to ContentPane.domNode... otherwise a tooltip shows up over the
+	// entire pane.
+	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+		title: []
+	}),
+
+	postMixInProperties: function(){
+		this.inherited(arguments);
+		var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang);
+		this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages);
+		this.errorMessage = dojo.string.substitute(this.errorMessage, messages);
+
+		// Detect if we were initialized with data
+		if(!this.href && this.srcNodeRef && this.srcNodeRef.innerHTML){
+			this.isLoaded = true;
+		}
+	},
+
+	buildRendering: function(){
+		// Overrides Widget.buildRendering().
+		// Since we have no template we need to set this.containerNode ourselves.
+		// For subclasses of ContentPane do have a template, does nothing.
+		this.inherited(arguments);
+		if(!this.containerNode){
+			// make getDescendants() work
+			this.containerNode = this.domNode;
+		}
+	},
+
+	postCreate: function(){
+		// remove the title attribute so it doesn't show up when hovering
+		// over a node
+		this.domNode.title = "";
+
+		if(!dojo.attr(this.domNode,"role")){
+			dijit.setWaiRole(this.domNode, "group");
+		}
+
+		dojo.addClass(this.domNode, this.baseClass);
+	},
+
+	startup: function(){
+		// summary:
+		//		See `dijit.layout._LayoutWidget.startup` for description.
+		//		Although ContentPane doesn't extend _LayoutWidget, it does implement
+		//		the same API.
+		if(this._started){ return; }
+
+		var parent = dijit._Contained.prototype.getParent.call(this);
+		this._childOfLayoutWidget = parent && parent.isLayoutContainer;
+
+		// I need to call resize() on my child/children (when I become visible), unless
+		// I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then.
+		this._needLayout = !this._childOfLayoutWidget;
+
+		if(this.isLoaded){
+			dojo.forEach(this.getChildren(), function(child){
+				child.startup();
+			});
+		}
+
+		if(this._isShown() || this.preload){
+			this._onShow();
+		}
+
+		this.inherited(arguments);
+	},
+
+	_checkIfSingleChild: function(){
+		// summary:
+		//		Test if we have exactly one visible widget as a child,
+		//		and if so assume that we are a container for that widget,
+		//		and should propogate startup() and resize() calls to it.
+		//		Skips over things like data stores since they aren't visible.
+
+		var childNodes = dojo.query("> *", this.containerNode).filter(function(node){
+				return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc..
+			}),
+			childWidgetNodes = childNodes.filter(function(node){
+				return dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId");
+			}),
+			candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){
+				return widget && widget.domNode && widget.resize;
+			});
+
+		if(
+			// all child nodes are widgets
+			childNodes.length == childWidgetNodes.length &&
+
+			// all but one are invisible (like dojo.data)
+			candidateWidgets.length == 1
+		){
+			this._singleChild = candidateWidgets[0];
+		}else{
+			delete this._singleChild;
+		}
+
+		// So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449)
+		dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild);
+	},
+
+	setHref: function(/*String|Uri*/ href){
+		// summary:
+		//		Deprecated.   Use set('href', ...) instead.
+		dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.", "", "2.0");
+		return this.set("href", href);
+	},
+	_setHrefAttr: function(/*String|Uri*/ href){
+		// summary:
+		//		Hook so attr("href", ...) works.
+		// description:
+		//		Reset the (external defined) content of this pane and replace with new url
+		//		Note: It delays the download until widget is shown if preload is false.
+		//	href:
+		//		url to the page you want to get, must be within the same domain as your mainpage
+
+		// Cancel any in-flight requests (an attr('href') will cancel any in-flight attr('href', ...))
+		this.cancel();
+
+		this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+
+		this.href = href;
+
+		// _setHrefAttr() is called during creation and by the user, after creation.
+		// only in the second case do we actually load the URL; otherwise it's done in startup()
+		if(this._created && (this.preload || this._isShown())){
+			this._load();
+		}else{
+			// Set flag to indicate that href needs to be loaded the next time the
+			// ContentPane is made visible
+			this._hrefChanged = true;
+		}
+
+		return this.onLoadDeferred;		// dojo.Deferred
+	},
+
+	setContent: function(/*String|DomNode|Nodelist*/data){
+		// summary:
+		//		Deprecated.   Use set('content', ...) instead.
+		dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.", "", "2.0");
+		this.set("content", data);
+	},
+	_setContentAttr: function(/*String|DomNode|Nodelist*/data){
+		// summary:
+		//		Hook to make attr("content", ...) work.
+		//		Replaces old content with data content, include style classes from old content
+		//	data:
+		//		the new Content may be String, DomNode or NodeList
+		//
+		//		if data is a NodeList (or an array of nodes) nodes are copied
+		//		so you can import nodes from another document implicitly
+
+		// clear href so we can't run refresh and clear content
+		// refresh should only work if we downloaded the content
+		this.href = "";
+
+		// Cancel any in-flight requests (an attr('content') will cancel any in-flight attr('href', ...))
+		this.cancel();
+
+		// Even though user is just setting content directly, still need to define an onLoadDeferred
+		// because the _onLoadHandler() handler is still getting called from setContent()
+		this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+
+		this._setContent(data || "");
+
+		this._isDownloaded = false; // mark that content is from a attr('content') not an attr('href')
+
+		return this.onLoadDeferred; 	// dojo.Deferred
+	},
+	_getContentAttr: function(){
+		// summary:
+		//		Hook to make attr("content") work
+		return this.containerNode.innerHTML;
+	},
+
+	cancel: function(){
+		// summary:
+		//		Cancels an in-flight download of content
+		if(this._xhrDfd && (this._xhrDfd.fired == -1)){
+			this._xhrDfd.cancel();
+		}
+		delete this._xhrDfd; // garbage collect
+
+		this.onLoadDeferred = null;
+	},
+
+	uninitialize: function(){
+		if(this._beingDestroyed){
+			this.cancel();
+		}
+		this.inherited(arguments);
+	},
+
+	destroyRecursive: function(/*Boolean*/ preserveDom){
+		// summary:
+		//		Destroy the ContentPane and its contents
+
+		// if we have multiple controllers destroying us, bail after the first
+		if(this._beingDestroyed){
+			return;
+		}
+		this.inherited(arguments);
+	},
+
+	resize: function(changeSize, resultSize){
+		// summary:
+		//		See `dijit.layout._LayoutWidget.resize` for description.
+		//		Although ContentPane doesn't extend _LayoutWidget, it does implement
+		//		the same API.
+
+		// For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is
+		// never called, so resize() is our trigger to do the initial href download.
+		if(!this._wasShown){
+			this._onShow();
+		}
+
+		this._resizeCalled = true;
+
+		// Set margin box size, unless it wasn't specified, in which case use current size.
+		if(changeSize){
+			dojo.marginBox(this.domNode, changeSize);
+		}
+
+		// Compute content box size of containerNode in case we [later] need to size our single child.
+		var cn = this.containerNode;
+		if(cn === this.domNode){
+			// If changeSize or resultSize was passed to this method and this.containerNode ==
+			// this.domNode then we can compute the content-box size without querying the node,
+			// which is more reliable (similar to LayoutWidget.resize) (see for example #9449).
+			var mb = resultSize || {};
+			dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize
+			if(!("h" in mb) || !("w" in mb)){
+				mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values
+			}
+			this._contentBox = dijit.layout.marginBox2contentBox(cn, mb);
+		}else{
+			this._contentBox = dojo.contentBox(cn);
+		}
+
+		// Make my children layout, or size my single child widget
+		this._layoutChildren();
+	},
+
+	_isShown: function(){
+		// summary:
+		//		Returns true if the content is currently shown.
+		// description:
+		//		If I am a child of a layout widget then it actually returns true if I've ever been visible,
+		//		not whether I'm currently visible, since that's much faster than tracing up the DOM/widget
+		//		tree every call, and at least solves the performance problem on page load by deferring loading
+		//		hidden ContentPanes until they are first shown
+
+		if(this._childOfLayoutWidget){
+			// If we are TitlePane, etc - we return that only *IF* we've been resized
+			if(this._resizeCalled && "open" in this){
+				return this.open;
+			}
+			return this._resizeCalled;
+		}else if("open" in this){
+			return this.open;		// for TitlePane, etc.
+		}else{
+			// TODO: with _childOfLayoutWidget check maybe this branch no longer necessary?
+			var node = this.domNode;
+			return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden");
+		}
+	},
+
+	_onShow: function(){
+		// summary:
+		//		Called when the ContentPane is made visible
+		// description:
+		//		For a plain ContentPane, this is called on initialization, from startup().
+		//		If the ContentPane is a hidden pane of a TabContainer etc., then it's
+		//		called whenever the pane is made visible.
+		//
+		//		Does necessary processing, including href download and layout/resize of
+		//		child widget(s)
+
+		if(this.href){
+			if(!this._xhrDfd && // if there's an href that isn't already being loaded
+				(!this.isLoaded || this._hrefChanged || this.refreshOnShow)
+			){
+				this.refresh();
+			}
+		}else{
+			// If we are the child of a layout widget then the layout widget will call resize() on
+			// us, and then we will size our child/children.   Otherwise, we need to do it now.
+			if(!this._childOfLayoutWidget && this._needLayout){
+				// If a layout has been scheduled for when we become visible, do it now
+				this._layoutChildren();
+			}
+		}
+
+		this.inherited(arguments);
+
+		// Need to keep track of whether ContentPane has been shown (which is different than
+		// whether or not it's currently visible).
+		this._wasShown = true;
+	},
+
+	refresh: function(){
+		// summary:
+		//		[Re]download contents of href and display
+		// description:
+		//		1. cancels any currently in-flight requests
+		//		2. posts "loading..." message
+		//		3. sends XHR to download new data
+
+		// Cancel possible prior in-flight request
+		this.cancel();
+
+		this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel"));
+		this._load();
+		return this.onLoadDeferred;
+	},
+
+	_load: function(){
+		// summary:
+		//		Load/reload the href specified in this.href
+
+		// display loading message
+		this._setContent(this.onDownloadStart(), true);
+
+		var self = this;
+		var getArgs = {
+			preventCache: (this.preventCache || this.refreshOnShow),
+			url: this.href,
+			handleAs: "text"
+		};
+		if(dojo.isObject(this.ioArgs)){
+			dojo.mixin(getArgs, this.ioArgs);
+		}
+
+		var hand = (this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs));
+
+		hand.addCallback(function(html){
+			try{
+				self._isDownloaded = true;
+				self._setContent(html, false);
+				self.onDownloadEnd();
+			}catch(err){
+				self._onError('Content', err); // onContentError
+			}
+			delete self._xhrDfd;
+			return html;
+		});
+
+		hand.addErrback(function(err){
+			if(!hand.canceled){
+				// show error message in the pane
+				self._onError('Download', err); // onDownloadError
+			}
+			delete self._xhrDfd;
+			return err;
+		});
+
+		// Remove flag saying that a load is needed
+		delete this._hrefChanged;
+	},
+
+	_onLoadHandler: function(data){
+		// summary:
+		//		This is called whenever new content is being loaded
+		this.isLoaded = true;
+		try{
+			this.onLoadDeferred.callback(data);
+			this.onLoad(data);
+		}catch(e){
+			console.error('Error '+this.widgetId+' running custom onLoad code: ' + e.message);
+		}
+	},
+
+	_onUnloadHandler: function(){
+		// summary:
+		//		This is called whenever the content is being unloaded
+		this.isLoaded = false;
+		try{
+			this.onUnload();
+		}catch(e){
+			console.error('Error '+this.widgetId+' running custom onUnload code: ' + e.message);
+		}
+	},
+
+	destroyDescendants: function(){
+		// summary:
+		//		Destroy all the widgets inside the ContentPane and empty containerNode
+
+		// Make sure we call onUnload (but only when the ContentPane has real content)
+		if(this.isLoaded){
+			this._onUnloadHandler();
+		}
+
+		// Even if this.isLoaded == false there might still be a "Loading..." message
+		// to erase, so continue...
+
+		// For historical reasons we need to delete all widgets under this.containerNode,
+		// even ones that the user has created manually.
+		var setter = this._contentSetter;
+		dojo.forEach(this.getChildren(), function(widget){
+			if(widget.destroyRecursive){
+				widget.destroyRecursive();
+			}
+		});
+		if(setter){
+			// Most of the widgets in setter.parseResults have already been destroyed, but
+			// things like Menu that have been moved to <body> haven't yet
+			dojo.forEach(setter.parseResults, function(widget){
+				if(widget.destroyRecursive && widget.domNode && widget.domNode.parentNode == dojo.body()){
+					widget.destroyRecursive();
+				}
+			});
+			delete setter.parseResults;
+		}
+
+		// And then clear away all the DOM nodes
+		dojo.html._emptyNode(this.containerNode);
+
+		// Delete any state information we have about current contents
+		delete this._singleChild;
+	},
+
+	_setContent: function(cont, isFakeContent){
+		// summary:
+		//		Insert the content into the container node
+
+		// first get rid of child widgets
+		this.destroyDescendants();
+
+		// dojo.html.set will take care of the rest of the details
+		// we provide an override for the error handling to ensure the widget gets the errors
+		// configure the setter instance with only the relevant widget instance properties
+		// NOTE: unless we hook into attr, or provide property setters for each property,
+		// we need to re-configure the ContentSetter with each use
+		var setter = this._contentSetter;
+		if(! (setter && setter instanceof dojo.html._ContentSetter)){
+			setter = this._contentSetter = new dojo.html._ContentSetter({
+				node: this.containerNode,
+				_onError: dojo.hitch(this, this._onError),
+				onContentError: dojo.hitch(this, function(e){
+					// fires if a domfault occurs when we are appending this.errorMessage
+					// like for instance if domNode is a UL and we try append a DIV
+					var errMess = this.onContentError(e);
+					try{
+						this.containerNode.innerHTML = errMess;
+					}catch(e){
+						console.error('Fatal '+this.id+' could not change content due to '+e.message, e);
+					}
+				})/*,
+				_onError */
+			});
+		};
+
+		var setterParams = dojo.mixin({
+			cleanContent: this.cleanContent,
+			extractContent: this.extractContent,
+			parseContent: this.parseOnLoad,
+			dir: this.dir,
+			lang: this.lang
+		}, this._contentSetterParams || {});
+
+		dojo.mixin(setter, setterParams);
+
+		setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont );
+
+		// setter params must be pulled afresh from the ContentPane each time
+		delete this._contentSetterParams;
+
+		if(!isFakeContent){
+			// Startup each top level child widget (and they will start their children, recursively)
+			dojo.forEach(this.getChildren(), function(child){
+				// The parser has already called startup on all widgets *without* a getParent() method
+				if(!this.parseOnLoad || child.getParent){
+					child.startup();
+				}
+			}, this);
+
+			// Call resize() on each of my child layout widgets,
+			// or resize() on my single child layout widget...
+			// either now (if I'm currently visible)
+			// or when I become visible
+			this._scheduleLayout();
+
+			this._onLoadHandler(cont);
+		}
+	},
+
+	_onError: function(type, err, consoleText){
+		this.onLoadDeferred.errback(err);
+
+		// shows user the string that is returned by on[type]Error
+		// overide on[type]Error and return your own string to customize
+		var errText = this['on' + type + 'Error'].call(this, err);
+		if(consoleText){
+			console.error(consoleText, err);
+		}else if(errText){// a empty string won't change current content
+			this._setContent(errText, true);
+		}
+	},
+
+	_scheduleLayout: function(){
+		// summary:
+		//		Call resize() on each of my child layout widgets, either now
+		//		(if I'm currently visible) or when I become visible
+		if(this._isShown()){
+			this._layoutChildren();
+		}else{
+			this._needLayout = true;
+		}
+	},
+
+	_layoutChildren: function(){
+		// summary:
+		//		Since I am a Container widget, each of my children expects me to
+		//		call resize() or layout() on them.
+		// description:
+		//		Should be called on initialization and also whenever we get new content
+		//		(from an href, or from attr('content', ...))... but deferred until
+		//		the ContentPane is visible
+
+		if(this.doLayout){
+			this._checkIfSingleChild();
+		}
+
+		if(this._singleChild && this._singleChild.resize){
+			var cb = this._contentBox || dojo.contentBox(this.containerNode);
+
+			// note: if widget has padding this._contentBox will have l and t set,
+			// but don't pass them to resize() or it will doubly-offset the child
+			this._singleChild.resize({w: cb.w, h: cb.h});
+		}else{
+			// All my child widgets are independently sized (rather than matching my size),
+			// but I still need to call resize() on each child to make it layout.
+			dojo.forEach(this.getChildren(), function(widget){
+				if(widget.resize){
+					widget.resize();
+				}
+			});
+		}
+		delete this._needLayout;
+	},
+
+	// EVENT's, should be overide-able
+	onLoad: function(data){
+		// summary:
+		//		Event hook, is called after everything is loaded and widgetified
+		// tags:
+		//		callback
+	},
+
+	onUnload: function(){
+		// summary:
+		//		Event hook, is called before old content is cleared
+		// tags:
+		//		callback
+	},
+
+	onDownloadStart: function(){
+		// summary:
+		//		Called before download starts.
+		// description:
+		//		The string returned by this function will be the html
+		//		that tells the user we are loading something.
+		//		Override with your own function if you want to change text.
+		// tags:
+		//		extension
+		return this.loadingMessage;
+	},
+
+	onContentError: function(/*Error*/ error){
+		// summary:
+		//		Called on DOM faults, require faults etc. in content.
+		//
+		//		In order to display an error message in the pane, return
+		//		the error message from this method, as an HTML string.
+		//
+		//		By default (if this method is not overriden), it returns
+		//		nothing, so the error message is just printed to the console.
+		// tags:
+		//		extension
+	},
+
+	onDownloadError: function(/*Error*/ error){
+		// summary:
+		//		Called when download error occurs.
+		//
+		//		In order to display an error message in the pane, return
+		//		the error message from this method, as an HTML string.
+		//
+		//		Default behavior (if this method is not overriden) is to display
+		//		the error message inside the pane.
+		// tags:
+		//		extension
+		return this.errorMessage;
+	},
+
+	onDownloadEnd: function(){
+		// summary:
+		//		Called when download is finished.
+		// tags:
+		//		callback
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.TooltipDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.TooltipDialog"] = true;
+dojo.provide("dijit.TooltipDialog");
+
+
+
+
+
+
+dojo.declare(
+		"dijit.TooltipDialog",
+		[dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin],
+		{
+			// summary:
+			//		Pops up a dialog that appears like a Tooltip
+
+			// title: String
+			// 		Description of tooltip dialog (required for a11y)
+			title: "",
+
+			// doLayout: [protected] Boolean
+			//		Don't change this parameter from the default value.
+			//		This ContentPane parameter doesn't make sense for TooltipDialog, since TooltipDialog
+			//		is never a child of a layout container, nor can you specify the size of
+			//		TooltipDialog in order to control the size of an inner widget.
+			doLayout: false,
+
+			// autofocus: Boolean
+			// 		A Toggle to modify the default focus behavior of a Dialog, which
+			// 		is to focus on the first dialog element after opening the dialog.
+			//		False will disable autofocusing. Default: true
+			autofocus: true,
+
+			// baseClass: [protected] String
+			//		The root className to use for the various states of this widget
+			baseClass: "dijitTooltipDialog",
+
+			// _firstFocusItem: [private] [readonly] DomNode
+			//		The pointer to the first focusable node in the dialog.
+			//		Set by `dijit._DialogMixin._getFocusItems`.
+			_firstFocusItem: null,
+
+			// _lastFocusItem: [private] [readonly] DomNode
+			//		The pointer to which node has focus prior to our dialog.
+			//		Set by `dijit._DialogMixin._getFocusItems`.
+			_lastFocusItem: null,
+
+			templateString: dojo.cache("dijit", "templates/TooltipDialog.html", "<div waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presentation\"></div>\n</div>\n"),
+
+			postCreate: function(){
+				this.inherited(arguments);
+				this.connect(this.containerNode, "onkeypress", "_onKey");
+				this.containerNode.title = this.title;
+			},
+
+			orient: function(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ corner){
+				// summary:
+				//		Configure widget to be displayed in given position relative to the button.
+				//		This is called from the dijit.popup code, and should not be called
+				//		directly.
+				// tags:
+				//		protected
+				var c = this._currentOrientClass;
+				if(c){
+					dojo.removeClass(this.domNode, c);
+				}
+				c = "dijitTooltipAB"+(corner.charAt(1) == 'L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0) == 'T' ? "Below" : "Above");
+				dojo.addClass(this.domNode, c);
+				this._currentOrientClass = c;
+			},
+
+			onOpen: function(/*Object*/ pos){
+				// summary:
+				//		Called when dialog is displayed.
+				//		This is called from the dijit.popup code, and should not be called directly.
+				// tags:
+				//		protected
+
+				this.orient(this.domNode,pos.aroundCorner, pos.corner);
+				this._onShow(); // lazy load trigger
+
+				if(this.autofocus){
+					this._getFocusItems(this.containerNode);
+					dijit.focus(this._firstFocusItem);
+				}
+			},
+
+			onClose: function(){
+				// summary:
+				//		Called when dialog is hidden.
+				//		This is called from the dijit.popup code, and should not be called directly.
+				// tags:
+				//		protected
+				this.onHide();
+			},
+
+			_onKey: function(/*Event*/ evt){
+				// summary:
+				//		Handler for keyboard events
+				// description:
+				//		Keep keyboard focus in dialog; close dialog on escape key
+				// tags:
+				//		private
+
+				var node = evt.target;
+				var dk = dojo.keys;
+				if(evt.charOrCode === dk.TAB){
+					this._getFocusItems(this.containerNode);
+				}
+				var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
+				if(evt.charOrCode == dk.ESCAPE){
+					// Use setTimeout to avoid crash on IE, see #10396.
+					setTimeout(dojo.hitch(this, "onCancel"), 0);
+					dojo.stopEvent(evt);
+				}else if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
+					if(!singleFocusItem){
+						dijit.focus(this._lastFocusItem); // send focus to last item in dialog
+					}
+					dojo.stopEvent(evt);
+				}else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
+					if(!singleFocusItem){
+						dijit.focus(this._firstFocusItem); // send focus to first item in dialog
+					}
+					dojo.stopEvent(evt);
+				}else if(evt.charOrCode === dk.TAB){
+					// we want the browser's default tab handling to move focus
+					// but we don't want the tab to propagate upwards
+					evt.stopPropagation();
+				}
+			}
+		}
+	);
+
+}
+
+if(!dojo._hasResource["dijit.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Dialog"] = true;
+dojo.provide("dijit.Dialog");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*=====
+dijit._underlay = function(kwArgs){
+	// summary:
+	//		A shared instance of a `dijit.DialogUnderlay`
+	//
+	// description:
+	//		A shared instance of a `dijit.DialogUnderlay` created and
+	//		used by `dijit.Dialog`, though never created until some Dialog
+	//		or subclass thereof is shown.
+};
+=====*/
+
+dojo.declare(
+	"dijit._DialogBase",
+	[dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin, dijit._CssStateMixin],
+	{
+		// summary:
+		//		A modal dialog Widget
+		//
+		// description:
+		//		Pops up a modal dialog window, blocking access to the screen
+		//		and also graying out the screen Dialog is extended from
+		//		ContentPane so it supports all the same parameters (href, etc.)
+		//
+		// example:
+		// |	<div dojoType="dijit.Dialog" href="test.html"></div>
+		//
+		// example:
+		// |	var foo = new dijit.Dialog({ title: "test dialog", content: "test content" };
+		// |	dojo.body().appendChild(foo.domNode);
+		// |	foo.startup();
+
+		templateString: dojo.cache("dijit", "templates/Dialog.html", "<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),
+		
+		baseClass: "dijitDialog",
+		
+		cssStateNodes: {
+			closeButtonNode: "dijitDialogCloseIcon"
+		},
+
+		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+			title: [
+				{ node: "titleNode", type: "innerHTML" },
+				{ node: "titleBar", type: "attribute" }
+			],
+			"aria-describedby":""
+		}),
+
+		// open: Boolean
+		//		True if Dialog is currently displayed on screen.
+		open: false,
+
+		// duration: Integer
+		//		The time in milliseconds it takes the dialog to fade in and out
+		duration: dijit.defaultDuration,
+
+		// refocus: Boolean
+		// 		A Toggle to modify the default focus behavior of a Dialog, which
+		// 		is to re-focus the element which had focus before being opened.
+		//		False will disable refocusing. Default: true
+		refocus: true,
+
+		// autofocus: Boolean
+		// 		A Toggle to modify the default focus behavior of a Dialog, which
+		// 		is to focus on the first dialog element after opening the dialog.
+		//		False will disable autofocusing. Default: true
+		autofocus: true,
+
+		// _firstFocusItem: [private] [readonly] DomNode
+		//		The pointer to the first focusable node in the dialog.
+		//		Set by `dijit._DialogMixin._getFocusItems`.
+		_firstFocusItem: null,
+
+		// _lastFocusItem: [private] [readonly] DomNode
+		//		The pointer to which node has focus prior to our dialog.
+		//		Set by `dijit._DialogMixin._getFocusItems`.
+		_lastFocusItem: null,
+
+		// doLayout: [protected] Boolean
+		//		Don't change this parameter from the default value.
+		//		This ContentPane parameter doesn't make sense for Dialog, since Dialog
+		//		is never a child of a layout container, nor can you specify the size of
+		//		Dialog in order to control the size of an inner widget.
+		doLayout: false,
+
+		// draggable: Boolean
+		//		Toggles the moveable aspect of the Dialog. If true, Dialog
+		//		can be dragged by it's title. If false it will remain centered
+		//		in the viewport.
+		draggable: true,
+
+		//aria-describedby: String
+		//		Allows the user to add an aria-describedby attribute onto the dialog.   The value should
+		//		be the id of the container element of text that describes the dialog purpose (usually
+		//		the first text in the dialog).
+		//		<div dojoType="dijit.Dialog" aria-describedby="intro" .....>
+		//			<div id="intro">Introductory text</div>
+		//			<div>rest of dialog contents</div>
+		//		</div>
+		"aria-describedby":"",
+
+		postMixInProperties: function(){
+			var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
+			dojo.mixin(this, _nlsResources);
+			this.inherited(arguments);
+		},
+
+		postCreate: function(){
+			dojo.style(this.domNode, {
+				display: "none",
+				position:"absolute"
+			});
+			dojo.body().appendChild(this.domNode);
+
+			this.inherited(arguments);
+
+			this.connect(this, "onExecute", "hide");
+			this.connect(this, "onCancel", "hide");
+			this._modalconnects = [];
+		},
+
+		onLoad: function(){
+			// summary:
+			//		Called when data has been loaded from an href.
+			//		Unlike most other callbacks, this function can be connected to (via `dojo.connect`)
+			//		but should *not* be overriden.
+			// tags:
+			//		callback
+
+			// when href is specified we need to reposition the dialog after the data is loaded
+			// and find the focusable elements
+			this._position();
+			if(this.autofocus){
+				this._getFocusItems(this.domNode);
+				dijit.focus(this._firstFocusItem);
+			}
+			this.inherited(arguments);
+		},
+
+		_endDrag: function(e){
+			// summary:
+			//		Called after dragging the Dialog. Saves the position of the dialog in the viewport.
+			// tags:
+			//		private
+			if(e && e.node && e.node === this.domNode){
+				this._relativePosition = dojo.position(e.node);
+			}
+		},
+
+		_setup: function(){
+			// summary:
+			//		Stuff we need to do before showing the Dialog for the first
+			//		time (but we defer it until right beforehand, for
+			//		performance reasons).
+			// tags:
+			//		private
+
+			var node = this.domNode;
+
+			if(this.titleBar && this.draggable){
+				this._moveable = (dojo.isIE == 6) ?
+					new dojo.dnd.TimedMoveable(node, { handle: this.titleBar }) :	// prevent overload, see #5285
+					new dojo.dnd.Moveable(node, { handle: this.titleBar, timeout: 0 });
+				dojo.subscribe("/dnd/move/stop",this,"_endDrag");
+			}else{
+				dojo.addClass(node,"dijitDialogFixed");
+			}
+
+			this.underlayAttrs = {
+				dialogId: this.id,
+				"class": dojo.map(this["class"].split(/\s/), function(s){ return s+"_underlay"; }).join(" ")
+			};
+
+			this._fadeIn = dojo.fadeIn({
+				node: node,
+				duration: this.duration,
+				beforeBegin: dojo.hitch(this, function(){
+					var underlay = dijit._underlay;
+					if(!underlay){
+						underlay = dijit._underlay = new dijit.DialogUnderlay(this.underlayAttrs);
+					}else{
+						underlay.set(this.underlayAttrs);
+					}
+
+					var ds = dijit._dialogStack,
+						zIndex = 948 + ds.length*2;
+					if(ds.length == 1){	// first dialog
+						underlay.show();
+					}
+					dojo.style(dijit._underlay.domNode, 'zIndex', zIndex);
+					dojo.style(this.domNode, 'zIndex', zIndex + 1);
+				}),
+				onEnd: dojo.hitch(this, function(){
+					if(this.autofocus){
+						// find focusable Items each time dialog is shown since if dialog contains a widget the
+						// first focusable items can change
+						this._getFocusItems(this.domNode);
+						dijit.focus(this._firstFocusItem);
+					}
+				})
+			 });
+
+			this._fadeOut = dojo.fadeOut({
+				node: node,
+				duration: this.duration,
+				onEnd: dojo.hitch(this, function(){
+					node.style.display = "none";
+
+					// Restore the previous dialog in the stack, or if this is the only dialog
+					// then restore to original page
+					var ds = dijit._dialogStack;
+					if(ds.length == 0){
+						dijit._underlay.hide();
+					}else{
+						dojo.style(dijit._underlay.domNode, 'zIndex', 948 + ds.length*2);
+						dijit._underlay.set(ds[ds.length-1].underlayAttrs);
+					}
+
+					// Restore focus to wherever it was before this dialog was displayed
+					if(this.refocus){
+						var focus = this._savedFocus;
+
+						// If we are returning control to a previous dialog but for some reason
+						// that dialog didn't have a focused field, set focus to first focusable item.
+						// This situation could happen if two dialogs appeared at nearly the same time,
+						// since a dialog doesn't set it's focus until the fade-in is finished.
+						if(ds.length > 0){
+							var pd = ds[ds.length-1];
+							if(!dojo.isDescendant(focus.node, pd.domNode)){
+								pd._getFocusItems(pd.domNode);
+								focus = pd._firstFocusItem;
+							}
+						}
+
+						dijit.focus(focus);
+					}
+				})
+			 });
+		},
+
+		uninitialize: function(){
+			var wasPlaying = false;
+			if(this._fadeIn && this._fadeIn.status() == "playing"){
+				wasPlaying = true;
+				this._fadeIn.stop();
+			}
+			if(this._fadeOut && this._fadeOut.status() == "playing"){
+				wasPlaying = true;
+				this._fadeOut.stop();
+			}
+			
+			// Hide the underlay, unless the underlay widget has already been destroyed
+			// because we are being called during page unload (when all widgets are destroyed)
+			if((this.open || wasPlaying) && !dijit._underlay._destroyed){
+				dijit._underlay.hide();
+			}
+
+			if(this._moveable){
+				this._moveable.destroy();
+			}
+			this.inherited(arguments);
+		},
+
+		_size: function(){
+			// summary:
+			// 		If necessary, shrink dialog contents so dialog fits in viewport
+			// tags:
+			//		private
+
+			this._checkIfSingleChild();
+
+			// If we resized the dialog contents earlier, reset them back to original size, so
+			// that if the user later increases the viewport size, the dialog can display w/out a scrollbar.
+			// Need to do this before the dojo.marginBox(this.domNode) call below.
+			if(this._singleChild){
+				if(this._singleChildOriginalStyle){
+					this._singleChild.domNode.style.cssText = this._singleChildOriginalStyle;
+				}
+				delete this._singleChildOriginalStyle;
+			}else{
+				dojo.style(this.containerNode, {
+					width:"auto",
+					height:"auto"
+				});
+			}
+
+			var mb = dojo.marginBox(this.domNode);
+			var viewport = dojo.window.getBox();
+			if(mb.w >= viewport.w || mb.h >= viewport.h){
+				// Reduce size of dialog contents so that dialog fits in viewport
+
+				var w = Math.min(mb.w, Math.floor(viewport.w * 0.75)),
+					h = Math.min(mb.h, Math.floor(viewport.h * 0.75));
+
+				if(this._singleChild && this._singleChild.resize){
+					this._singleChildOriginalStyle = this._singleChild.domNode.style.cssText;
+					this._singleChild.resize({w: w, h: h});
+				}else{
+					dojo.style(this.containerNode, {
+						width: w + "px",
+						height: h + "px",
+						overflow: "auto",
+						position: "relative"	// workaround IE bug moving scrollbar or dragging dialog
+					});
+				}
+			}else{
+				if(this._singleChild && this._singleChild.resize){
+					this._singleChild.resize();
+				}
+			}
+		},
+
+		_position: function(){
+			// summary:
+			//		Position modal dialog in the viewport. If no relative offset
+			//		in the viewport has been determined (by dragging, for instance),
+			//		center the node. Otherwise, use the Dialog's stored relative offset,
+			//		and position the node to top: left: values based on the viewport.
+			// tags:
+			//		private
+			if(!dojo.hasClass(dojo.body(),"dojoMove")){
+				var node = this.domNode,
+					viewport = dojo.window.getBox(),
+					p = this._relativePosition,
+					bb = p ? null : dojo._getBorderBox(node),
+					l = Math.floor(viewport.l + (p ? p.x : (viewport.w - bb.w) / 2)),
+					t = Math.floor(viewport.t + (p ? p.y : (viewport.h - bb.h) / 2))
+				;
+				dojo.style(node,{
+					left: l + "px",
+					top: t + "px"
+				});
+			}
+		},
+
+		_onKey: function(/*Event*/ evt){
+			// summary:
+			//		Handles the keyboard events for accessibility reasons
+			// tags:
+			//		private
+
+			var ds = dijit._dialogStack;
+			if(ds[ds.length-1] != this){
+				// console.debug(this.id + ': skipping because', this, 'is not the active dialog');
+				return;
+			}
+
+			if(evt.charOrCode){
+				var dk = dojo.keys;
+				var node = evt.target;
+				if(evt.charOrCode === dk.TAB){
+					this._getFocusItems(this.domNode);
+				}
+				var singleFocusItem = (this._firstFocusItem == this._lastFocusItem);
+				// see if we are shift-tabbing from first focusable item on dialog
+				if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === dk.TAB){
+					if(!singleFocusItem){
+						dijit.focus(this._lastFocusItem); // send focus to last item in dialog
+					}
+					dojo.stopEvent(evt);
+				}else if(node == this._lastFocusItem && evt.charOrCode === dk.TAB && !evt.shiftKey){
+					if(!singleFocusItem){
+						dijit.focus(this._firstFocusItem); // send focus to first item in dialog
+					}
+					dojo.stopEvent(evt);
+				}else{
+					// see if the key is for the dialog
+					while(node){
+						if(node == this.domNode || dojo.hasClass(node, "dijitPopup")){
+							if(evt.charOrCode == dk.ESCAPE){
+								this.onCancel();
+							}else{
+								return; // just let it go
+							}
+						}
+						node = node.parentNode;
+					}
+					// this key is for the disabled document window
+					if(evt.charOrCode !== dk.TAB){ // allow tabbing into the dialog for a11y
+						dojo.stopEvent(evt);
+					// opera won't tab to a div
+					}else if(!dojo.isOpera){
+						try{
+							this._firstFocusItem.focus();
+						}catch(e){ /*squelch*/ }
+					}
+				}
+			}
+		},
+
+		show: function(){
+			// summary:
+			//		Display the dialog
+			if(this.open){ return; }
+
+			// first time we show the dialog, there's some initialization stuff to do
+			if(!this._alreadyInitialized){
+				this._setup();
+				this._alreadyInitialized=true;
+			}
+
+			if(this._fadeOut.status() == "playing"){
+				this._fadeOut.stop();
+			}
+
+			this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
+			this._modalconnects.push(dojo.connect(window, "onresize", this, function(){
+				// IE gives spurious resize events and can actually get stuck
+				// in an infinite loop if we don't ignore them
+				var viewport = dojo.window.getBox();
+				if(!this._oldViewport ||
+						viewport.h != this._oldViewport.h ||
+						viewport.w != this._oldViewport.w){
+					this.layout();
+					this._oldViewport = viewport;
+				}
+			}));
+			this._modalconnects.push(dojo.connect(dojo.doc.documentElement, "onkeypress", this, "_onKey"));
+
+			dojo.style(this.domNode, {
+				opacity:0,
+				display:""
+			});
+
+			this.open = true;
+			this._onShow(); // lazy load trigger
+
+			this._size();
+			this._position();
+			dijit._dialogStack.push(this);
+			this._fadeIn.play();
+
+			this._savedFocus = dijit.getFocus(this);
+		},
+
+		hide: function(){
+			// summary:
+			//		Hide the dialog
+
+			// if we haven't been initialized yet then we aren't showing and we can just return
+			// or if we aren't the active dialog, don't allow us to close yet
+			var ds = dijit._dialogStack;
+			if(!this._alreadyInitialized || this != ds[ds.length-1]){
+				return;
+			}
+
+			if(this._fadeIn.status() == "playing"){
+				this._fadeIn.stop();
+			}
+
+			// throw away current active dialog from stack -- making the previous dialog or the node on the original page active
+			ds.pop();
+
+			this._fadeOut.play();
+
+			if(this._scrollConnected){
+				this._scrollConnected = false;
+			}
+			dojo.forEach(this._modalconnects, dojo.disconnect);
+			this._modalconnects = [];
+
+			if(this._relativePosition){
+				delete this._relativePosition;
+			}
+			this.open = false;
+
+			this.onHide();
+		},
+
+		layout: function(){
+			// summary:
+			//		Position the Dialog and the underlay
+			// tags:
+			//		private
+			if(this.domNode.style.display != "none"){
+				if(dijit._underlay){	// avoid race condition during show()
+					dijit._underlay.layout();
+				}
+				this._position();
+			}
+		},
+
+		destroy: function(){
+			dojo.forEach(this._modalconnects, dojo.disconnect);
+			if(this.refocus && this.open){
+				setTimeout(dojo.hitch(dijit,"focus",this._savedFocus), 25);
+			}
+			this.inherited(arguments);
+		}
+	}
+);
+
+dojo.declare(
+	"dijit.Dialog",
+	[dijit.layout.ContentPane, dijit._DialogBase],
+	{}
+);
+
+// Stack of currenctly displayed dialogs, layered on top of each other
+dijit._dialogStack = [];
+
+// For back-compat.  TODO: remove in 2.0
+
+
+}
+
+if(!dojo._hasResource["dijit._editor.selection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.selection"] = true;
+dojo.provide("dijit._editor.selection");
+
+// FIXME:
+//		all of these methods branch internally for IE. This is probably
+//		sub-optimal in terms of runtime performance. We should investigate the
+//		size difference for differentiating at definition time.
+
+dojo.mixin(dijit._editor.selection, {
+	getType: function(){
+		// summary:
+		//		Get the selection type (like dojo.doc.select.type in IE).
+		if(dojo.isIE){
+			return dojo.doc.selection.type.toLowerCase();
+		}else{
+			var stype = "text";
+
+			// Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
+			var oSel;
+			try{
+				oSel = dojo.global.getSelection();
+			}catch(e){ /*squelch*/ }
+
+			if(oSel && oSel.rangeCount == 1){
+				var oRange = oSel.getRangeAt(0);
+				if(	(oRange.startContainer == oRange.endContainer) &&
+					((oRange.endOffset - oRange.startOffset) == 1) &&
+					(oRange.startContainer.nodeType != 3 /* text node*/)
+				){
+					stype = "control";
+				}
+			}
+			return stype; //String
+		}
+	},
+
+	getSelectedText: function(){
+		// summary:
+		//		Return the text (no html tags) included in the current selection or null if no text is selected
+		if(dojo.isIE){
+			if(dijit._editor.selection.getType() == 'control'){
+				return null;
+			}
+			return dojo.doc.selection.createRange().text;
+		}else{
+			var selection = dojo.global.getSelection();
+			if(selection){
+				return selection.toString(); //String
+			}
+		}
+		return '';
+	},
+
+	getSelectedHtml: function(){
+		// summary:
+		//		Return the html text of the current selection or null if unavailable
+		if(dojo.isIE){
+			if(dijit._editor.selection.getType() == 'control'){
+				return null;
+			}
+			return dojo.doc.selection.createRange().htmlText;
+		}else{
+			var selection = dojo.global.getSelection();
+			if(selection && selection.rangeCount){
+				var i;
+				var html = "";
+				for(i = 0; i < selection.rangeCount; i++){
+					//Handle selections spanning ranges, such as Opera
+					var frag = selection.getRangeAt(i).cloneContents();
+					var div = dojo.doc.createElement("div");
+					div.appendChild(frag);
+					html += div.innerHTML;
+				}
+				return html; //String
+			}
+			return null;
+		}
+	},
+
+	getSelectedElement: function(){
+		// summary:
+		//		Retrieves the selected element (if any), just in the case that
+		//		a single element (object like and image or a table) is
+		//		selected.
+		if(dijit._editor.selection.getType() == "control"){
+			if(dojo.isIE){
+				var range = dojo.doc.selection.createRange();
+				if(range && range.item){
+					return dojo.doc.selection.createRange().item(0);
+				}
+			}else{
+				var selection = dojo.global.getSelection();
+				return selection.anchorNode.childNodes[ selection.anchorOffset ];
+			}
+		}
+		return null;
+	},
+
+	getParentElement: function(){
+		// summary:
+		//		Get the parent element of the current selection
+		if(dijit._editor.selection.getType() == "control"){
+			var p = this.getSelectedElement();
+			if(p){ return p.parentNode; }
+		}else{
+			if(dojo.isIE){
+				var r = dojo.doc.selection.createRange();
+				r.collapse(true);
+				return r.parentElement();
+			}else{
+				var selection = dojo.global.getSelection();
+				if(selection){
+					var node = selection.anchorNode;
+					while(node && (node.nodeType != 1)){ // not an element
+						node = node.parentNode;
+					}
+					return node;
+				}
+			}
+		}
+		return null;
+	},
+
+	hasAncestorElement: function(/*String*/tagName /* ... */){
+		// summary:
+		// 		Check whether current selection has a  parent element which is
+		// 		of type tagName (or one of the other specified tagName)
+		// tagName: String
+		//		The tag name to determine if it has an ancestor of.
+		return this.getAncestorElement.apply(this, arguments) != null; //Boolean
+	},
+
+	getAncestorElement: function(/*String*/tagName /* ... */){
+		// summary:
+		//		Return the parent element of the current selection which is of
+		//		type tagName (or one of the other specified tagName)
+		// tagName: String
+		//		The tag name to determine if it has an ancestor of.
+		var node = this.getSelectedElement() || this.getParentElement();
+		return this.getParentOfType(node, arguments); //DOMNode
+	},
+
+	isTag: function(/*DomNode*/ node, /*String[]*/ tags){
+		// summary:
+		//		Function to determine if a node is one of an array of tags.
+		// node:
+		//		The node to inspect.
+		// tags:
+		//		An array of tag name strings to check to see if the node matches.
+		if(node && node.tagName){
+			var _nlc = node.tagName.toLowerCase();
+			for(var i=0; i<tags.length; i++){
+				var _tlc = String(tags[i]).toLowerCase();
+				if(_nlc == _tlc){
+					return _tlc; // String
+				}
+			}
+		}
+		return "";
+	},
+
+	getParentOfType: function(/*DomNode*/ node, /*String[]*/ tags){
+		// summary:
+		//		Function to locate a parent node that matches one of a set of tags
+		// node:
+		//		The node to inspect.
+		// tags:
+		//		An array of tag name strings to check to see if the node matches.
+		while(node){
+			if(this.isTag(node, tags).length){
+				return node; // DOMNode
+			}
+			node = node.parentNode;
+		}
+		return null;
+	},
+
+	collapse: function(/*Boolean*/beginning){
+		// summary:
+		//		Function to collapse (clear), the current selection
+		// beginning: Boolean
+		//		Boolean to indicate whether to collapse the cursor to the beginning of the selection or end.
+		if(window.getSelection){
+			var selection = dojo.global.getSelection();
+			if(selection.removeAllRanges){ // Mozilla
+				if(beginning){
+					selection.collapseToStart();
+				}else{
+					selection.collapseToEnd();
+				}
+			}else{ // Safari
+				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
+				selection.collapse(beginning);
+			}
+		}else if(dojo.isIE){ // IE
+			var range = dojo.doc.selection.createRange();
+			range.collapse(beginning);
+			range.select();
+		}
+	},
+
+	remove: function(){
+		// summary:
+		//		Function to delete the currently selected content from the document.
+		var sel = dojo.doc.selection;
+		if(dojo.isIE){
+			if(sel.type.toLowerCase() != "none"){
+				sel.clear();
+			}
+			return sel; //Selection
+		}else{
+			sel = dojo.global.getSelection();
+			sel.deleteFromDocument();
+			return sel; //Selection
+		}
+	},
+
+	selectElementChildren: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
+		// summary:
+		//		clear previous selection and select the content of the node
+		//		(excluding the node itself)
+		// element: DOMNode
+		//		The element you wish to select the children content of.
+		// nochangefocus: Boolean
+		//		Boolean to indicate if the foxus should change or not.
+		var win = dojo.global;
+		var doc = dojo.doc;
+		var range;
+		element = dojo.byId(element);
+		if(doc.selection && dojo.isIE && dojo.body().createTextRange){ // IE
+			range = element.ownerDocument.body.createTextRange();
+			range.moveToElementText(element);
+			if(!nochangefocus){
+				try{
+					range.select(); // IE throws an exception here if the widget is hidden.  See #5439
+				}catch(e){ /* squelch */}
+			}
+		}else if(win.getSelection){
+			var selection = dojo.global.getSelection();
+			if(dojo.isOpera){
+				//Opera's selectAllChildren doesn't seem to work right
+				//against <body> nodes and possibly others ... so
+				//we use the W3C range API
+				if(selection.rangeCount){
+					range = selection.getRangeAt(0);
+				}else{
+					range = doc.createRange();
+				}
+				range.setStart(element, 0);
+				range.setEnd(element,(element.nodeType == 3)?element.length:element.childNodes.length);
+				selection.addRange(range);
+			}else{
+				selection.selectAllChildren(element);
+			}
+		}
+	},
+
+	selectElement: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
+		// summary:
+		//		clear previous selection and select element (including all its children)
+		// element:  DOMNode
+		//		The element to select.
+		// nochangefocus: Boolean
+		//		Boolean indicating if the focus should be changed.  IE only.
+		var range;
+		var doc = dojo.doc;
+		var win = dojo.global;
+		element = dojo.byId(element);
+		if(dojo.isIE && dojo.body().createTextRange){
+			try{
+				range = dojo.body().createControlRange();
+				range.addElement(element);
+				if(!nochangefocus){
+					range.select();
+				}
+			}catch(e){
+				this.selectElementChildren(element,nochangefocus);
+			}
+		}else if(dojo.global.getSelection){
+			var selection = win.getSelection();
+			range = doc.createRange();
+			if(selection.removeAllRanges){ // Mozilla
+				// FIXME: does this work on Safari?
+				if(dojo.isOpera){
+					//Opera works if you use the current range on
+					//the selection if present.
+					if(selection.getRangeAt(0)){
+						range = selection.getRangeAt(0);
+					}
+				}
+				range.selectNode(element);
+				selection.removeAllRanges();
+				selection.addRange(range);
+			}
+		}
+	},
+
+	inSelection: function(node){
+		// summary:
+		//		This function determines if 'node' is
+		//		in the current selection.
+		// tags:
+		//		public
+		if(node){
+			var newRange;
+			var doc = dojo.doc;
+			var range;
+
+			if(dojo.global.getSelection){
+				//WC3
+				var sel = dojo.global.getSelection();
+				if(sel && sel.rangeCount > 0){
+					range = sel.getRangeAt(0);
+				}
+				if(range && range.compareBoundaryPoints && doc.createRange){
+					try{
+						newRange = doc.createRange();
+						newRange.setStart(node, 0);
+						if(range.compareBoundaryPoints(range.START_TO_END, newRange) === 1){
+							return true;
+						}
+					}catch(e){ /* squelch */}
+				}
+			}else if(doc.selection){
+				// Probably IE, so we can't use the range object as the pseudo
+				// range doesn't implement the boundry checking, we have to 
+				// use IE specific crud.
+				range = doc.selection.createRange();
+				try{
+					newRange = node.ownerDocument.body.createControlRange();
+					if(newRange){
+						newRange.addElement(node);
+					}
+				}catch(e1){
+					try{
+						newRange = node.ownerDocument.body.createTextRange();
+						newRange.moveToElementText(node);
+					}catch(e2){/* squelch */}
+				}
+				if(range && newRange){
+					// We can finally compare similar to W3C
+					if(range.compareEndPoints("EndToStart", newRange) === 1){
+						return true;
+					}
+				}
+			}
+		}
+		return false; // boolean
+	}
+
+});
+
+}
+
+if(!dojo._hasResource["dijit._editor.range"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.range"] = true;
+dojo.provide("dijit._editor.range");
+
+dijit.range={};
+
+dijit.range.getIndex=function(/*DomNode*/node, /*DomNode*/parent){
+//	dojo.profile.start("dijit.range.getIndex");
+	var ret=[], retR=[];
+	var stop = parent;
+	var onode = node;
+
+	var pnode, n;
+	while(node != stop){
+		var i = 0;
+		pnode = node.parentNode;
+		while((n=pnode.childNodes[i++])){
+			if(n === node){
+				--i;
+				break;
+			}
+		}
+		//if(i>=pnode.childNodes.length){
+			//dojo.debug("Error finding index of a node in dijit.range.getIndex");
+		//}
+		ret.unshift(i);
+		retR.unshift(i-pnode.childNodes.length);
+		node = pnode;
+	}
+
+	//normalized() can not be called so often to prevent
+	//invalidating selection/range, so we have to detect
+	//here that any text nodes in a row
+	if(ret.length > 0 && onode.nodeType == 3){
+		n = onode.previousSibling;
+		while(n && n.nodeType == 3){
+			ret[ret.length-1]--;
+			n = n.previousSibling;
+		}
+		n = onode.nextSibling;
+		while(n && n.nodeType == 3){
+			retR[retR.length-1]++;
+			n = n.nextSibling;
+		}
+	}
+//	dojo.profile.end("dijit.range.getIndex");
+	return {o: ret, r:retR};
+}
+
+dijit.range.getNode = function(/*Array*/index, /*DomNode*/parent){
+	if(!dojo.isArray(index) || index.length == 0){
+		return parent;
+	}
+	var node = parent;
+//	if(!node)debugger
+	dojo.every(index, function(i){
+		if(i >= 0 && i < node.childNodes.length){
+			node = node.childNodes[i];
+		}else{
+			node = null;
+			//console.debug('Error: can not find node with index',index,'under parent node',parent );
+			return false; //terminate dojo.every
+		}
+		return true; //carry on the every loop
+	});
+
+	return node;
+}
+
+dijit.range.getCommonAncestor = function(n1,n2,root){
+	root = root||n1.ownerDocument.body;
+	var getAncestors = function(n){
+		var as=[];
+		while(n){
+			as.unshift(n);
+			if(n !== root){
+				n = n.parentNode;
+			}else{
+				break;
+			}
+		}
+		return as;
+	};
+	var n1as = getAncestors(n1);
+	var n2as = getAncestors(n2);
+
+	var m = Math.min(n1as.length,n2as.length);
+	var com = n1as[0]; //at least, one element should be in the array: the root (BODY by default)
+	for(var i=1;i<m;i++){
+		if(n1as[i] === n2as[i]){
+			com = n1as[i]
+		}else{
+			break;
+		}
+	}
+	return com;
+}
+
+dijit.range.getAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
+	root = root || node.ownerDocument.body;
+	while(node && node !== root){
+		var name = node.nodeName.toUpperCase() ;
+		if(regex.test(name)){
+			return node;
+		}
+
+		node = node.parentNode;
+	}
+	return null;
+}
+
+dijit.range.BlockTagNames = /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
+dijit.range.getBlockAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
+	root = root || node.ownerDocument.body;
+	regex = regex || dijit.range.BlockTagNames;
+	var block=null, blockContainer;
+	while(node && node !== root){
+		var name = node.nodeName.toUpperCase() ;
+		if(!block && regex.test(name)){
+			block = node;
+		}
+		if(!blockContainer && (/^(?:BODY|TD|TH|CAPTION)$/).test(name)){
+			blockContainer = node;
+		}
+
+		node = node.parentNode;
+	}
+	return {blockNode:block, blockContainer:blockContainer || node.ownerDocument.body};
+}
+
+dijit.range.atBeginningOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
+	var atBeginning = false;
+	var offsetAtBeginning = (offset == 0);
+	if(!offsetAtBeginning && node.nodeType == 3){ //if this is a text node, check whether the left part is all space
+		if(/^[\s\xA0]+$/.test(node.nodeValue.substr(0,offset))){
+			offsetAtBeginning = true;
+		}
+	}
+	if(offsetAtBeginning){
+		var cnode = node;
+		atBeginning = true;
+		while(cnode && cnode !== container){
+			if(cnode.previousSibling){
+				atBeginning = false;
+				break;
+			}
+			cnode = cnode.parentNode;
+		}
+	}
+	return atBeginning;
+}
+
+dijit.range.atEndOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
+	var atEnd = false;
+	var offsetAtEnd = (offset == (node.length || node.childNodes.length));
+	if(!offsetAtEnd && node.nodeType == 3){ //if this is a text node, check whether the right part is all space
+		if(/^[\s\xA0]+$/.test(node.nodeValue.substr(offset))){
+			offsetAtEnd = true;
+		}
+	}
+	if(offsetAtEnd){
+		var cnode = node;
+		atEnd = true;
+		while(cnode && cnode !== container){
+			if(cnode.nextSibling){
+				atEnd = false;
+				break;
+			}
+			cnode = cnode.parentNode;
+		}
+	}
+	return atEnd;
+}
+
+dijit.range.adjacentNoneTextNode=function(startnode, next){
+	var node = startnode;
+	var len = (0-startnode.length) || 0;
+	var prop = next?'nextSibling':'previousSibling';
+	while(node){
+		if(node.nodeType!=3){
+			break;
+		}
+		len += node.length
+		node = node[prop];
+	}
+	return [node,len];
+}
+
+dijit.range._w3c = Boolean(window['getSelection']);
+dijit.range.create = function(/*Window?*/win){
+	if(dijit.range._w3c){
+		return (win || dojo.global).document.createRange();
+	}else{//IE
+		return new dijit.range.W3CRange;
+	}
+}
+
+dijit.range.getSelection = function(/*Window*/win, /*Boolean?*/ignoreUpdate){
+	if(dijit.range._w3c){
+		return win.getSelection();
+	}else{//IE
+		var s = new dijit.range.ie.selection(win);
+		if(!ignoreUpdate){
+			s._getCurrentSelection();
+		}
+		return s;
+	}
+}
+
+if(!dijit.range._w3c){
+	dijit.range.ie={
+		cachedSelection: {},
+		selection: function(win){
+			this._ranges = [];
+			this.addRange = function(r, /*boolean*/internal){
+				this._ranges.push(r);
+				if(!internal){
+					r._select();
+				}
+				this.rangeCount = this._ranges.length;
+			};
+			this.removeAllRanges = function(){
+				//don't detach, the range may be used later
+//				for(var i=0;i<this._ranges.length;i++){
+//					this._ranges[i].detach();
+//				}
+				this._ranges = [];
+				this.rangeCount = 0;
+			};
+			var _initCurrentRange = function(){
+				var r = win.document.selection.createRange();
+				var type=win.document.selection.type.toUpperCase();
+				if(type == "CONTROL"){
+					//TODO: multiple range selection(?)
+					return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
+				}else{
+					return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
+				}
+			};
+			this.getRangeAt = function(i){
+				return this._ranges[i];
+			};
+			this._getCurrentSelection = function(){
+				this.removeAllRanges();
+				var r=_initCurrentRange();
+				if(r){
+					this.addRange(r, true);
+				}
+			};
+		},
+		decomposeControlRange: function(range){
+			var firstnode = range.item(0), lastnode = range.item(range.length-1);
+			var startContainer = firstnode.parentNode, endContainer = lastnode.parentNode;
+			var startOffset = dijit.range.getIndex(firstnode, startContainer).o;
+			var endOffset = dijit.range.getIndex(lastnode, endContainer).o+1;
+			return [startContainer, startOffset,endContainer, endOffset];
+		},
+		getEndPoint: function(range, end){
+			var atmrange = range.duplicate();
+			atmrange.collapse(!end);
+			var cmpstr = 'EndTo' + (end?'End':'Start');
+			var parentNode = atmrange.parentElement();
+
+			var startnode, startOffset, lastNode;
+			if(parentNode.childNodes.length>0){
+				dojo.every(parentNode.childNodes, function(node,i){
+					var calOffset;
+					if(node.nodeType != 3){
+						atmrange.moveToElementText(node);
+
+						if(atmrange.compareEndPoints(cmpstr,range) > 0){
+							//startnode = node.previousSibling;
+							if(lastNode && lastNode.nodeType == 3){
+								//where shall we put the start? in the text node or after?
+								startnode = lastNode;
+								calOffset = true;
+							}else{
+								startnode = parentNode;
+								startOffset = i;
+								return false;
+							}
+						}else{
+							if(i == parentNode.childNodes.length-1){
+								startnode = parentNode;
+								startOffset = parentNode.childNodes.length;
+								return false;
+							}
+						}
+					}else{
+						if(i == parentNode.childNodes.length-1){//at the end of this node
+							startnode = node;
+							calOffset = true;
+						}
+					}
+		//			try{
+						if(calOffset && startnode){
+							var prevnode = dijit.range.adjacentNoneTextNode(startnode)[0];
+							if(prevnode){
+								startnode = prevnode.nextSibling;
+							}else{
+								startnode = parentNode.firstChild; //firstChild must be a text node
+							}
+							var prevnodeobj = dijit.range.adjacentNoneTextNode(startnode);
+							prevnode = prevnodeobj[0];
+							var lenoffset = prevnodeobj[1];
+							if(prevnode){
+								atmrange.moveToElementText(prevnode);
+								atmrange.collapse(false);
+							}else{
+								atmrange.moveToElementText(parentNode);
+							}
+							atmrange.setEndPoint(cmpstr, range);
+							startOffset = atmrange.text.length-lenoffset;
+
+							return false;
+						}
+		//			}catch(e){ debugger }
+					lastNode = node;
+					return true;
+				});
+			}else{
+				startnode = parentNode;
+				startOffset = 0;
+			}
+
+			//if at the end of startnode and we are dealing with start container, then
+			//move the startnode to nextSibling if it is a text node
+			//TODO: do this for end container?
+			if(!end && startnode.nodeType == 1 && startOffset == startnode.childNodes.length){
+				var nextnode=startnode.nextSibling;
+				if(nextnode && nextnode.nodeType == 3){
+					startnode = nextnode;
+					startOffset = 0;
+				}
+			}
+			return [startnode, startOffset];
+		},
+		setEndPoint: function(range, container, offset){
+			//text node
+			var atmrange = range.duplicate(), node, len;
+			if(container.nodeType!=3){ //normal node
+				if(offset > 0){
+					node = container.childNodes[offset-1];
+					if(node){
+						if(node.nodeType == 3){
+							container = node;
+							offset = node.length;
+							//pass through
+						}else{
+							if(node.nextSibling && node.nextSibling.nodeType == 3){
+								container=node.nextSibling;
+								offset=0;
+								//pass through
+							}else{
+								atmrange.moveToElementText(node.nextSibling?node:container);
+								var parent = node.parentNode;
+								var tempNode = parent.insertBefore(node.ownerDocument.createTextNode(' '), node.nextSibling);
+								atmrange.collapse(false);
+								parent.removeChild(tempNode);
+							}
+						}
+					}
+				}else{
+					atmrange.moveToElementText(container);
+					atmrange.collapse(true);
+				}
+			}
+			if(container.nodeType == 3){
+				var prevnodeobj = dijit.range.adjacentNoneTextNode(container);
+				var prevnode = prevnodeobj[0];
+				len = prevnodeobj[1];
+				if(prevnode){
+					atmrange.moveToElementText(prevnode);
+					atmrange.collapse(false);
+					//if contentEditable is not inherit, the above collapse won't make the end point
+					//in the correctly position: it always has a -1 offset, so compensate it
+					if(prevnode.contentEditable!='inherit'){
+						len++;
+					}
+				}else{
+					atmrange.moveToElementText(container.parentNode);
+					atmrange.collapse(true);
+				}
+
+				offset += len;
+				if(offset>0){
+					if(atmrange.move('character',offset) != offset){
+						console.error('Error when moving!');
+					}
+				}
+			}
+
+			return atmrange;
+		},
+		decomposeTextRange: function(range){
+			var tmpary = dijit.range.ie.getEndPoint(range);
+			var startContainer = tmpary[0], startOffset = tmpary[1];
+			var endContainer = tmpary[0], endOffset = tmpary[1];
+
+			if(range.htmlText.length){
+				if(range.htmlText == range.text){ //in the same text node
+					endOffset = startOffset+range.text.length;
+				}else{
+					tmpary = dijit.range.ie.getEndPoint(range,true);
+					endContainer = tmpary[0], endOffset = tmpary[1];
+//					if(startContainer.tagName == "BODY"){
+//						startContainer = startContainer.firstChild;
+//					}
+				}
+			}
+			return [startContainer, startOffset, endContainer, endOffset];
+		},
+		setRange: function(range, startContainer,
+			startOffset, endContainer, endOffset, collapsed){
+			var start=dijit.range.ie.setEndPoint(range, startContainer, startOffset);
+
+			range.setEndPoint('StartToStart',start);
+			if(!collapsed){
+				var end=dijit.range.ie.setEndPoint(range, endContainer, endOffset);
+			}
+			range.setEndPoint('EndToEnd',end || start);
+
+			return range;
+		}
+	}
+
+dojo.declare("dijit.range.W3CRange",null, {
+	constructor: function(){
+		if(arguments.length>0){
+			this.setStart(arguments[0][0],arguments[0][1]);
+			this.setEnd(arguments[0][2],arguments[0][3]);
+		}else{
+			this.commonAncestorContainer = null;
+			this.startContainer = null;
+			this.startOffset = 0;
+			this.endContainer = null;
+			this.endOffset = 0;
+			this.collapsed = true;
+		}
+	},
+	_updateInternal: function(){
+		if(this.startContainer !== this.endContainer){
+			this.commonAncestorContainer = dijit.range.getCommonAncestor(this.startContainer, this.endContainer);
+		}else{
+			this.commonAncestorContainer = this.startContainer;
+		}
+		this.collapsed = (this.startContainer === this.endContainer) && (this.startOffset == this.endOffset);
+	},
+	setStart: function(node, offset){
+		offset=parseInt(offset);
+		if(this.startContainer === node && this.startOffset == offset){
+			return;
+		}
+		delete this._cachedBookmark;
+
+		this.startContainer = node;
+		this.startOffset = offset;
+		if(!this.endContainer){
+			this.setEnd(node, offset);
+		}else{
+			this._updateInternal();
+		}
+	},
+	setEnd: function(node, offset){
+		offset=parseInt(offset);
+		if(this.endContainer === node && this.endOffset == offset){
+			return;
+		}
+		delete this._cachedBookmark;
+
+		this.endContainer = node;
+		this.endOffset = offset;
+		if(!this.startContainer){
+			this.setStart(node, offset);
+		}else{
+			this._updateInternal();
+		}
+	},
+	setStartAfter: function(node, offset){
+		this._setPoint('setStart', node, offset, 1);
+	},
+	setStartBefore: function(node, offset){
+		this._setPoint('setStart', node, offset, 0);
+	},
+	setEndAfter: function(node, offset){
+		this._setPoint('setEnd', node, offset, 1);
+	},
+	setEndBefore: function(node, offset){
+		this._setPoint('setEnd', node, offset, 0);
+	},
+	_setPoint: function(what, node, offset, ext){
+		var index = dijit.range.getIndex(node, node.parentNode).o;
+		this[what](node.parentNode, index.pop()+ext);
+	},
+	_getIERange: function(){
+		var r = (this._body || this.endContainer.ownerDocument.body).createTextRange();
+		dijit.range.ie.setRange(r, this.startContainer, this.startOffset, this.endContainer, this.endOffset, this.collapsed);
+		return r;
+	},
+	getBookmark: function(body){
+		this._getIERange();
+		return this._cachedBookmark;
+	},
+	_select: function(){
+		var r = this._getIERange();
+		r.select();
+	},
+	deleteContents: function(){
+		var r = this._getIERange();
+		r.pasteHTML('');
+		this.endContainer = this.startContainer;
+		this.endOffset = this.startOffset;
+		this.collapsed = true;
+	},
+	cloneRange: function(){
+		var r = new dijit.range.W3CRange([this.startContainer,this.startOffset,
+			this.endContainer,this.endOffset]);
+		r._body = this._body;
+		return r;
+	},
+	detach: function(){
+		this._body = null;
+		this.commonAncestorContainer = null;
+		this.startContainer = null;
+		this.startOffset = 0;
+		this.endContainer = null;
+		this.endOffset = 0;
+		this.collapsed = true;
+}
+});
+} //if(!dijit.range._w3c)
+
+}
+
+if(!dojo._hasResource["dijit._editor.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.html"] = true;
+dojo.provide("dijit._editor.html");
+
+dijit._editor.escapeXml=function(/*String*/str, /*Boolean?*/noSingleQuotes){
+	// summary:
+	//		Adds escape sequences for special characters in XML: &<>"'
+	//		Optionally skips escapes for single quotes
+	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
+	if(!noSingleQuotes){
+		str = str.replace(/'/gm, "&#39;");
+	}
+	return str; // string
+};
+
+dijit._editor.getNodeHtml=function(/* DomNode */node){
+	var output;
+	switch(node.nodeType){
+		case 1: //element node
+			var lName = node.nodeName.toLowerCase();
+			if(!lName || lName.charAt(0) == "/"){
+				// IE does some strange things with malformed HTML input, like
+				// treating a close tag </span> without an open tag <span>, as
+				// a new tag with tagName of /span.  Corrupts output HTML, remove
+				// them.  Other browsers don't prefix tags that way, so will
+				// never show up.
+				return "";
+			}
+			output = '<' + lName;
+
+			//store the list of attributes and sort it to have the
+			//attributes appear in the dictionary order
+			var attrarray = [];
+			var attr;
+			if(dojo.isIE && node.outerHTML){
+				var s = node.outerHTML;
+				s = s.substr(0, s.indexOf('>'))
+					.replace(/(['"])[^"']*\1/g, ''); //to make the following regexp safe
+				var reg = /(\b\w+)\s?=/g;
+				var m, key;
+				while((m = reg.exec(s))){
+					key = m[1];
+					if(key.substr(0,3) != '_dj'){
+						if(key == 'src' || key == 'href'){
+							if(node.getAttribute('_djrealurl')){
+								attrarray.push([key,node.getAttribute('_djrealurl')]);
+								continue;
+							}
+						}
+						var val, match;
+						switch(key){
+							case 'style':
+								val = node.style.cssText.toLowerCase();
+								break;
+							case 'class':
+								val = node.className;
+								break;
+							case 'width':
+								if(lName === "img"){
+									// This somehow gets lost on IE for IMG tags and the like
+									// and we have to find it in outerHTML, known IE oddity.
+									match=/width=(\S+)/i.exec(s);
+									if(match){
+										val = match[1];
+									}
+									break;
+								}
+							case 'height':
+								if(lName === "img"){
+									// This somehow gets lost on IE for IMG tags and the like
+									// and we have to find it in outerHTML, known IE oddity.
+									match=/height=(\S+)/i.exec(s);
+									if(match){
+										val = match[1];
+									}
+									break;
+								}
+							default:
+								val = node.getAttribute(key);
+						}
+						if(val != null){
+							attrarray.push([key, val.toString()]);
+						}
+					}
+				}
+			}else{
+				var i = 0;
+				while((attr = node.attributes[i++])){
+					//ignore all attributes starting with _dj which are
+					//internal temporary attributes used by the editor
+					var n = attr.name;
+					if(n.substr(0,3) != '_dj' /*&&
+						(attr.specified == undefined || attr.specified)*/){
+						var v = attr.value;
+						if(n == 'src' || n == 'href'){
+							if(node.getAttribute('_djrealurl')){
+								v = node.getAttribute('_djrealurl');
+							}
+						}
+						attrarray.push([n,v]);
+					}
+				}
+			}
+			attrarray.sort(function(a,b){
+				return a[0] < b[0] ? -1 : (a[0] == b[0] ? 0 : 1);
+			});
+			var j = 0;
+			while((attr = attrarray[j++])){
+				output += ' ' + attr[0] + '="' +
+					(dojo.isString(attr[1]) ? dijit._editor.escapeXml(attr[1], true) : attr[1]) + '"';
+			}
+			if(lName === "script"){
+				// Browsers handle script tags differently in how you get content,
+				// but innerHTML always seems to work, so insert its content that way
+				// Yes, it's bad to allow script tags in the editor code, but some people
+				// seem to want to do it, so we need to at least return them right.
+				// other plugins/filters can strip them.
+				output += '>' + node.innerHTML +'</' + lName + '>';
+			}else{
+				if(node.childNodes.length){
+					output += '>' + dijit._editor.getChildrenHtml(node)+'</' + lName +'>';
+				}else{
+					switch(lName){
+						case 'br':
+						case 'hr':
+						case 'img':
+						case 'input':
+						case 'base':
+						case 'meta':
+						case 'area':
+						case 'basefont':
+							// These should all be singly closed
+							output += ' />';
+							break;
+						default:
+							// Assume XML style separate closure for everything else.
+							output += '></' + lName + '>';
+					}
+				}
+			}
+			break;
+		case 4: // cdata
+		case 3: // text
+			// FIXME:
+			output = dijit._editor.escapeXml(node.nodeValue, true);
+			break;
+		case 8: //comment
+			// FIXME:
+			output = '<!--' + dijit._editor.escapeXml(node.nodeValue, true) + '-->';
+			break;
+		default:
+			output = "<!-- Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName + "-->";
+	}
+	return output;
+};
+
+dijit._editor.getChildrenHtml = function(/* DomNode */dom){
+	// summary:
+	//		Returns the html content of a DomNode and children
+	var out = "";
+	if(!dom){ return out; }
+	var nodes = dom["childNodes"] || dom;
+
+	//IE issue.
+	//If we have an actual node we can check parent relationships on for IE,
+	//We should check, as IE sometimes builds invalid DOMS.  If no parent, we can't check
+	//And should just process it and hope for the best.
+	var checkParent = !dojo.isIE || nodes !== dom;
+
+	var node, i = 0;
+	while((node = nodes[i++])){
+		//IE is broken.  DOMs are supposed to be a tree.  But in the case of malformed HTML, IE generates a graph
+		//meaning one node ends up with multiple references (multiple parents).  This is totally wrong and invalid, but
+		//such is what it is.  We have to keep track and check for this because otherise the source output HTML will have dups.
+		//No other browser generates a graph.  Leave it to IE to break a fundamental DOM rule.  So, we check the parent if we can
+		//If we can't, nothing more we can do other than walk it.
+		if(!checkParent || node.parentNode == dom){
+			out += dijit._editor.getNodeHtml(node);
+		}
+	}
+	return out; // String
+};
+
+}
+
+if(!dojo._hasResource["dijit._editor.RichText"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.RichText"] = true;
+dojo.provide("dijit._editor.RichText");
+
+
+
+
+
+
+
+// used to restore content when user leaves this page then comes back
+// but do not try doing dojo.doc.write if we are using xd loading.
+// dojo.doc.write will only work if RichText.js is included in the dojo.js
+// file. If it is included in dojo.js and you want to allow rich text saving
+// for back/forward actions, then set dojo.config.allowXdRichTextSave = true.
+if(!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"]){
+	if(dojo._postLoad){
+		(function(){
+			var savetextarea = dojo.doc.createElement('textarea');
+			savetextarea.id = dijit._scopeName + "._editor.RichText.savedContent";
+			dojo.style(savetextarea, {
+				display:'none',
+				position:'absolute',
+				top:"-100px",
+				height:"3px",
+				width:"3px"
+			});
+			dojo.body().appendChild(savetextarea);
+		})();
+	}else{
+		//dojo.body() is not available before onLoad is fired
+		try{
+			dojo.doc.write('<textarea id="' + dijit._scopeName + '._editor.RichText.savedContent" ' +
+				'style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>');
+		}catch(e){ }
+	}
+}
+
+dojo.declare("dijit._editor.RichText", [dijit._Widget, dijit._CssStateMixin], {
+	constructor: function(params){
+		// summary:
+		//		dijit._editor.RichText is the core of dijit.Editor, which provides basic
+		//		WYSIWYG editing features.
+		//
+		// description:
+		//		dijit._editor.RichText is the core of dijit.Editor, which provides basic
+		//		WYSIWYG editing features. It also encapsulates the differences
+		//		of different js engines for various browsers.  Do not use this widget
+		//		with an HTML &lt;TEXTAREA&gt; tag, since the browser unescapes XML escape characters,
+		//		like &lt;.  This can have unexpected behavior and lead to security issues
+		//		such as scripting attacks.
+		//
+		// tags:
+		//		private
+
+		// contentPreFilters: Function(String)[]
+		//		Pre content filter function register array.
+		//		these filters will be executed before the actual
+		//		editing area gets the html content.
+		this.contentPreFilters = [];
+
+		// contentPostFilters: Function(String)[]
+		//		post content filter function register array.
+		//		These will be used on the resulting html
+		//		from contentDomPostFilters. The resulting
+		//		content is the final html (returned by getValue()).
+		this.contentPostFilters = [];
+
+		// contentDomPreFilters: Function(DomNode)[]
+		//		Pre content dom filter function register array.
+		//		These filters are applied after the result from
+		//		contentPreFilters are set to the editing area.
+		this.contentDomPreFilters = [];
+
+		// contentDomPostFilters: Function(DomNode)[]
+		//		Post content dom filter function register array.
+		//		These filters are executed on the editing area dom.
+		//		The result from these will be passed to contentPostFilters.
+		this.contentDomPostFilters = [];
+
+		// editingAreaStyleSheets: dojo._URL[]
+		//		array to store all the stylesheets applied to the editing area
+		this.editingAreaStyleSheets = [];
+
+		// Make a copy of this.events before we start writing into it, otherwise we
+		// will modify the prototype which leads to bad things on pages w/multiple editors
+		this.events = [].concat(this.events);
+
+		this._keyHandlers = {};
+		this.contentPreFilters.push(dojo.hitch(this, "_preFixUrlAttributes"));
+		if(dojo.isMoz){
+			this.contentPreFilters.push(this._normalizeFontStyle);
+			this.contentPostFilters.push(this._removeMozBogus);
+		}
+		if(dojo.isWebKit){
+			// Try to clean up WebKit bogus artifacts.  The inserted classes
+			// made by WebKit sometimes messes things up.
+			this.contentPreFilters.push(this._removeWebkitBogus);
+			this.contentPostFilters.push(this._removeWebkitBogus);
+		}
+		if(dojo.isIE){
+			// IE generates <strong> and <em> but we want to normalize to <b> and <i>
+			this.contentPostFilters.push(this._normalizeFontStyle);
+		}
+		//this.contentDomPostFilters.push(this._postDomFixUrlAttributes);
+
+		if(params && dojo.isString(params.value)){
+			this.value = params.value;
+		}
+
+		this.onLoadDeferred = new dojo.Deferred();
+	},
+
+	baseClass: "dijitEditor",
+
+	// inheritWidth: Boolean
+	//		whether to inherit the parent's width or simply use 100%
+	inheritWidth: false,
+
+	// focusOnLoad: [deprecated] Boolean
+	//		Focus into this widget when the page is loaded
+	focusOnLoad: false,
+
+	// name: String?
+	//		Specifies the name of a (hidden) <textarea> node on the page that's used to save
+	//		the editor content on page leave.   Used to restore editor contents after navigating
+	//		to a new page and then hitting the back button.
+	name: "",
+
+	// styleSheets: [const] String
+	//		semicolon (";") separated list of css files for the editing area
+	styleSheets: "",
+
+	// _content: [private] String
+	//		temporary content storage
+	_content: "",
+
+	// height: String
+	//		Set height to fix the editor at a specific height, with scrolling.
+	//		By default, this is 300px.  If you want to have the editor always
+	//		resizes to accommodate the content, use AlwaysShowToolbar plugin
+	//		and set height="".  If this editor is used within a layout widget,
+	//		set height="100%".
+	height: "300px",
+
+	// minHeight: String
+	//		The minimum height that the editor should have.
+	minHeight: "1em",
+
+	// isClosed: [private] Boolean
+	isClosed: true,
+
+	// isLoaded: [private] Boolean
+	isLoaded: false,
+
+	// _SEPARATOR: [private] String
+	//		Used to concat contents from multiple editors into a single string,
+	//		so they can be saved into a single <textarea> node.  See "name" attribute.
+	_SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
+
+	// onLoadDeferred: [protected] dojo.Deferred
+	//		Deferred which is fired when the editor finishes loading
+	onLoadDeferred: null,
+
+	// isTabIndent: Boolean
+	//		Make tab key and shift-tab indent and outdent rather than navigating.
+	//		Caution: sing this makes web pages inaccessible to users unable to use a mouse.
+	isTabIndent: false,
+
+	// disableSpellCheck: [const] Boolean
+	//		When true, disables the browser's native spell checking, if supported.
+	//		Works only in Firefox.
+	disableSpellCheck: false,
+
+	postCreate: function(){
+		if("textarea" == this.domNode.tagName.toLowerCase()){
+			console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");
+		}
+
+		this.inherited(arguments);
+
+		dojo.publish(dijit._scopeName + "._editor.RichText::init", [this]);
+		this.open();
+		this.setupDefaultShortcuts();
+	},
+
+	setupDefaultShortcuts: function(){
+		// summary:
+		//		Add some default key handlers
+		// description:
+		// 		Overwrite this to setup your own handlers. The default
+		// 		implementation does not use Editor commands, but directly
+		//		executes the builtin commands within the underlying browser
+		//		support.
+		// tags:
+		//		protected
+		var exec = dojo.hitch(this, function(cmd, arg){
+			return function(){
+				return !this.execCommand(cmd,arg);
+			};
+		});
+
+		var ctrlKeyHandlers = {
+			b: exec("bold"),
+			i: exec("italic"),
+			u: exec("underline"),
+			a: exec("selectall"),
+			s: function(){ this.save(true); },
+			m: function(){ this.isTabIndent = !this.isTabIndent; },
+
+			"1": exec("formatblock", "h1"),
+			"2": exec("formatblock", "h2"),
+			"3": exec("formatblock", "h3"),
+			"4": exec("formatblock", "h4"),
+
+			"\\": exec("insertunorderedlist")
+		};
+
+		if(!dojo.isIE){
+			ctrlKeyHandlers.Z = exec("redo"); //FIXME: undo?
+		}
+
+		for(var key in ctrlKeyHandlers){
+			this.addKeyHandler(key, true, false, ctrlKeyHandlers[key]);
+		}
+	},
+
+	// events: [private] String[]
+	//		 events which should be connected to the underlying editing area
+	events: ["onKeyPress", "onKeyDown", "onKeyUp", "onClick"],
+
+	// captureEvents: [deprecated] String[]
+	//		 Events which should be connected to the underlying editing
+	//		 area, events in this array will be addListener with
+	//		 capture=true.
+	// TODO: looking at the code I don't see any distinction between events and captureEvents,
+	// so get rid of this for 2.0 if not sooner
+	captureEvents: [],
+
+	_editorCommandsLocalized: false,
+	_localizeEditorCommands: function(){
+		// summary:
+		//		When IE is running in a non-English locale, the API actually changes,
+		//		so that we have to say (for example) danraku instead of p (for paragraph).
+		//		Handle that here.
+		// tags:
+		//		private
+		if(this._editorCommandsLocalized){
+			return;
+		}
+		this._editorCommandsLocalized = true;
+
+		//in IE, names for blockformat is locale dependent, so we cache the values here
+
+		//if the normal way fails, we try the hard way to get the list
+
+		//do not use _cacheLocalBlockFormatNames here, as it will
+		//trigger security warning in IE7
+
+		//put p after div, so if IE returns Normal, we show it as paragraph
+		//We can distinguish p and div if IE returns Normal, however, in order to detect that,
+		//we have to call this.document.selection.createRange().parentElement() or such, which
+		//could slow things down. Leave it as it is for now
+		var formats = ['div', 'p', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul', 'address'];
+		var localhtml = "", format, i=0;
+		while((format=formats[i++])){
+			//append a <br> after each element to separate the elements more reliably
+			if(format.charAt(1) != 'l'){
+				localhtml += "<"+format+"><span>content</span></"+format+"><br/>";
+			}else{
+				localhtml += "<"+format+"><li>content</li></"+format+"><br/>";
+			}
+		}
+		//queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
+		var div = dojo.doc.createElement('div');
+		dojo.style(div, {
+			position: "absolute",
+			top: "-2000px"
+		});
+		dojo.doc.body.appendChild(div);
+		div.innerHTML = localhtml;
+		var node = div.firstChild;
+		while(node){
+			dijit._editor.selection.selectElement(node.firstChild);
+			dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [node.firstChild]);
+			var nativename = node.tagName.toLowerCase();
+			this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");
+			//this.queryCommandValue("formatblock");
+			this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
+			node = node.nextSibling.nextSibling;
+		}
+		dojo.body().removeChild(div);
+	},
+
+	open: function(/*DomNode?*/ element){
+		// summary:
+		//		Transforms the node referenced in this.domNode into a rich text editing
+		//		node.
+		// description:
+		//		Sets up the editing area asynchronously. This will result in
+		//		the creation and replacement with an iframe.
+		//
+		//		A dojo.Deferred object is created at this.onLoadDeferred, and
+		//		users may attach to it to be informed when the rich-text area
+		//		initialization is finalized.
+		// tags:
+		//		private
+
+		if(!this.onLoadDeferred || this.onLoadDeferred.fired >= 0){
+			this.onLoadDeferred = new dojo.Deferred();
+		}
+
+		if(!this.isClosed){ this.close(); }
+		dojo.publish(dijit._scopeName + "._editor.RichText::open", [ this ]);
+
+		this._content = "";
+		if(arguments.length == 1 && element.nodeName){ // else unchanged
+			this.domNode = element;
+		}
+
+		var dn = this.domNode;
+
+		// "html" will hold the innerHTML of the srcNodeRef and will be used to
+		// initialize the editor.
+		var html;
+
+		if(dojo.isString(this.value)){
+			// Allow setting the editor content programmatically instead of
+			// relying on the initial content being contained within the target
+			// domNode.
+			html = this.value;
+			delete this.value;
+			dn.innerHTML = "";
+		}else if(dn.nodeName && dn.nodeName.toLowerCase() == "textarea"){
+			// if we were created from a textarea, then we need to create a
+			// new editing harness node.
+			var ta = (this.textarea = dn);
+			this.name = ta.name;
+			html = ta.value;
+			dn = this.domNode = dojo.doc.createElement("div");
+			dn.setAttribute('widgetId', this.id);
+			ta.removeAttribute('widgetId');
+			dn.cssText = ta.cssText;
+			dn.className += " " + ta.className;
+			dojo.place(dn, ta, "before");
+			var tmpFunc = dojo.hitch(this, function(){
+				//some browsers refuse to submit display=none textarea, so
+				//move the textarea off screen instead
+				dojo.style(ta, {
+					display: "block",
+					position: "absolute",
+					top: "-1000px"
+				});
+
+				if(dojo.isIE){ //nasty IE bug: abnormal formatting if overflow is not hidden
+					var s = ta.style;
+					this.__overflow = s.overflow;
+					s.overflow = "hidden";
+				}
+			});
+			if(dojo.isIE){
+				setTimeout(tmpFunc, 10);
+			}else{
+				tmpFunc();
+			}
+
+			if(ta.form){
+				dojo.connect(ta.form, "onsubmit", this, function(){
+					// FIXME: should we be calling close() here instead?
+					ta.value = this.getValue();
+				});
+			}
+		}else{
+			html = dijit._editor.getChildrenHtml(dn);
+			dn.innerHTML = "";
+		}
+
+		var content = dojo.contentBox(dn);
+		this._oldHeight = content.h;
+		this._oldWidth = content.w;
+
+		this.savedContent = html;
+
+		// If we're a list item we have to put in a blank line to force the
+		// bullet to nicely align at the top of text
+		if(dn.nodeName && dn.nodeName == "LI"){
+			dn.innerHTML = " <br>";
+		}
+	
+		// Construct the editor div structure.
+		this.header = dn.ownerDocument.createElement("div");
+		dn.appendChild(this.header);
+		this.editingArea = dn.ownerDocument.createElement("div");
+		dn.appendChild(this.editingArea);
+		this.footer = dn.ownerDocument.createElement("div");
+		dn.appendChild(this.footer);
+
+		// User has pressed back/forward button so we lost the text in the editor, but it's saved
+		// in a hidden <textarea> (which contains the data for all the editors on this page),
+		// so get editor value from there
+		if(this.name !== "" && (!dojo.config["useXDomain"] || dojo.config["allowXdRichTextSave"])){
+			var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.savedContent");
+			if(saveTextarea.value !== ""){
+				var datas = saveTextarea.value.split(this._SEPARATOR), i=0, dat;
+				while((dat=datas[i++])){
+					var data = dat.split(":");
+					if(data[0] == this.name){
+						html = data[1];
+						datas.splice(i, 1);	// TODO: this has no effect
+						break;
+					}
+				}
+			}
+
+			// TODO: this is troublesome if this editor has been destroyed, should have global handler.
+			// TODO: need to clear <textarea> in global handler
+			dojo.addOnUnload(dojo.hitch(this, "_saveContent"));
+		}
+
+		this.isClosed = false;
+
+		var ifr = (this.editorObject = this.iframe = dojo.doc.createElement('iframe'));
+		ifr.id = this.id+"_iframe";
+		this._iframeSrc = this._getIframeDocTxt();
+		ifr.style.border = "none";
+		ifr.style.width = "100%";
+		if(this._layoutMode){
+			// iframe should be 100% height, thus getting it's height from surrounding
+			// <div> (which has the correct height set by Editor)
+			ifr.style.height = "100%";
+		}else{
+			if(dojo.isIE >= 7){
+				if(this.height){
+					ifr.style.height = this.height;
+				}
+				if(this.minHeight){
+					ifr.style.minHeight = this.minHeight;
+				}
+			}else{
+				ifr.style.height = this.height ? this.height : this.minHeight;
+			}
+		}
+		ifr.frameBorder = 0;
+		ifr._loadFunc = dojo.hitch( this, function(win){
+			this.window = win;
+			this.document = this.window.document;
+
+			if(dojo.isIE){
+				this._localizeEditorCommands();
+			}
+			
+			// Do final setup and set initial contents of editor
+			this.onLoad(html);
+		});
+
+		// Set the iframe's initial (blank) content.
+		var s = 'javascript:parent.' + dijit._scopeName + '.byId("'+this.id+'")._iframeSrc';
+		ifr.setAttribute('src', s);
+		this.editingArea.appendChild(ifr);
+
+		// TODO: this is a guess at the default line-height, kinda works
+		if(dn.nodeName == "LI"){
+			dn.lastChild.style.marginTop = "-1.2em";
+		}
+
+		dojo.addClass(this.domNode, this.baseClass);
+	},
+
+	//static cache variables shared among all instance of this class
+	_local2NativeFormatNames: {},
+	_native2LocalFormatNames: {},
+
+	_getIframeDocTxt: function(){
+		// summary:
+		//		Generates the boilerplate text of the document inside the iframe (ie, <html><head>...</head><body/></html>).
+		//		Editor content (if not blank) should be added afterwards.
+		// tags:
+		//		private
+		var _cs = dojo.getComputedStyle(this.domNode);
+
+		// The contents inside of <body>.  The real contents are set later via a call to setValue().
+		var html = "";
+		var setBodyId = true;
+		if(dojo.isIE || (!this.height && !dojo.isMoz)){
+			// In auto-expand mode, need a wrapper div for AlwaysShowToolbar plugin to correctly
+			// expand/contract the editor as the content changes.
+			html = "<div id='dijitEditorBody'></div>";
+			setBodyId = false;
+		}else if(dojo.isMoz){
+			// workaround bug where can't select then delete text (until user types something
+			// into the editor)... and/or issue where typing doesn't erase selected text
+			this._cursorToStart = true;
+			html = "&nbsp;";
+		}
+
+		var font = [ _cs.fontWeight, _cs.fontSize, _cs.fontFamily ].join(" ");
+
+		// line height is tricky - applying a units value will mess things up.
+		// if we can't get a non-units value, bail out.
+		var lineHeight = _cs.lineHeight;
+		if(lineHeight.indexOf("px") >= 0){
+			lineHeight = parseFloat(lineHeight)/parseFloat(_cs.fontSize);
+			// console.debug(lineHeight);
+		}else if(lineHeight.indexOf("em")>=0){
+			lineHeight = parseFloat(lineHeight);
+		}else{
+			// If we can't get a non-units value, just default
+			// it to the CSS spec default of 'normal'.  Seems to
+			// work better, esp on IE, than '1.0'
+			lineHeight = "normal";
+		}
+		var userStyle = "";
+		var self = this;
+		this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig, function(match){ 
+			match = match.replace(/^;/ig,"") + ';'; 
+			var s = match.split(":")[0];
+			if(s){
+				s = dojo.trim(s);
+				s = s.toLowerCase();
+				var i;
+				var sC = "";
+				for(i = 0; i < s.length; i++){
+					var c = s.charAt(i);
+					switch(c){
+						case "-":
+							i++;
+							c = s.charAt(i).toUpperCase();
+						default:
+							sC += c;
+					}
+				}
+				dojo.style(self.domNode, sC, "");
+			}
+			userStyle += match + ';'; 
+		});
+
+
+		// need to find any associated label element and update iframe document title
+		var label=dojo.query('label[for="'+this.id+'"]');
+
+		return [
+			this.isLeftToRight() ? "<html>\n<head>\n" : "<html dir='rtl'>\n<head>\n",
+			(dojo.isMoz && label.length ? "<title>" + label[0].innerHTML + "</title>\n" : ""),
+			"<meta http-equiv='Content-Type' content='text/html'>\n",
+			"<style>\n",
+			"\tbody,html {\n",
+			"\t\tbackground:transparent;\n",
+			"\t\tpadding: 1px 0 0 0;\n",
+			"\t\tmargin: -1px 0 0 0;\n", // remove extraneous vertical scrollbar on safari and firefox
+
+			// Set the html/body sizing.  Webkit always needs this, other browsers
+			// only set it when height is defined (not auto-expanding), otherwise 
+			// scrollers do not appear.
+			((dojo.isWebKit)?"\t\twidth: 100%;\n":""),
+			((dojo.isWebKit)?"\t\theight: 100%;\n":""),
+			"\t}\n",
+			
+			// TODO: left positioning will cause contents to disappear out of view
+			//	   if it gets too wide for the visible area
+			"\tbody{\n",
+			"\t\ttop:0px;\n",
+			"\t\tleft:0px;\n",
+			"\t\tright:0px;\n",
+			"\t\tfont:", font, ";\n",
+				((this.height||dojo.isOpera) ? "" : "\t\tposition: fixed;\n"),
+			// FIXME: IE 6 won't understand min-height?
+			"\t\tmin-height:", this.minHeight, ";\n",
+			"\t\tline-height:", lineHeight,";\n",
+			"\t}\n",
+			"\tp{ margin: 1em 0; }\n",
+			
+			// Determine how scrollers should be applied.  In autoexpand mode (height = "") no scrollers on y at all.
+			// But in fixed height mode we want both x/y scrollers.  Also, if it's using wrapping div and in auto-expand
+			// (Mainly IE) we need to kill the y scroller on body and html.
+			(!setBodyId && !this.height ? "\tbody,html {overflow-y: hidden;}\n" : ""),
+			"\t#dijitEditorBody{overflow-x: auto; overflow-y:" + (this.height ? "auto;" : "hidden;") + "}\n",
+			"\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n",
+			"\tli{ min-height:1.2em; }\n",
+			"</style>\n",
+			this._applyEditingAreaStyleSheets(),"\n",
+			"</head>\n<body ",
+			(setBodyId?"id='dijitEditorBody' ":""),
+			"onload='frameElement._loadFunc(window,document)' style='"+userStyle+"'>", html, "</body>\n</html>"
+		].join(""); // String
+	},
+
+	_applyEditingAreaStyleSheets: function(){
+		// summary:
+		//		apply the specified css files in styleSheets
+		// tags:
+		//		private
+		var files = [];
+		if(this.styleSheets){
+			files = this.styleSheets.split(';');
+			this.styleSheets = '';
+		}
+
+		//empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
+		files = files.concat(this.editingAreaStyleSheets);
+		this.editingAreaStyleSheets = [];
+
+		var text='', i=0, url;
+		while((url=files[i++])){
+			var abstring = (new dojo._Url(dojo.global.location, url)).toString();
+			this.editingAreaStyleSheets.push(abstring);
+			text += '<link rel="stylesheet" type="text/css" href="'+abstring+'"/>';
+		}
+		return text;
+	},
+
+	addStyleSheet: function(/*dojo._Url*/ uri){
+		// summary:
+		//		add an external stylesheet for the editing area
+		// uri:
+		//		A dojo.uri.Uri pointing to the url of the external css file
+		var url=uri.toString();
+
+		//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
+		if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
+			url = (new dojo._Url(dojo.global.location, url)).toString();
+		}
+
+		if(dojo.indexOf(this.editingAreaStyleSheets, url) > -1){
+//			console.debug("dijit._editor.RichText.addStyleSheet: Style sheet "+url+" is already applied");
+			return;
+		}
+
+		this.editingAreaStyleSheets.push(url);
+		this.onLoadDeferred.addCallback(dojo.hitch(function(){
+			if(this.document.createStyleSheet){ //IE
+				this.document.createStyleSheet(url);
+			}else{ //other browser
+				var head = this.document.getElementsByTagName("head")[0];
+				var stylesheet = this.document.createElement("link");
+				stylesheet.rel="stylesheet";
+				stylesheet.type="text/css";
+				stylesheet.href=url;
+				head.appendChild(stylesheet);
+			}
+		}));
+	},
+
+	removeStyleSheet: function(/*dojo._Url*/ uri){
+		// summary:
+		//		remove an external stylesheet for the editing area
+		var url=uri.toString();
+		//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
+		if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
+			url = (new dojo._Url(dojo.global.location, url)).toString();
+		}
+		var index = dojo.indexOf(this.editingAreaStyleSheets, url);
+		if(index == -1){
+//			console.debug("dijit._editor.RichText.removeStyleSheet: Style sheet "+url+" has not been applied");
+			return;
+		}
+		delete this.editingAreaStyleSheets[index];
+		dojo.withGlobal(this.window,'query', dojo, ['link:[href="'+url+'"]']).orphan();
+	},
+
+	// disabled: Boolean
+	//		The editor is disabled; the text cannot be changed.
+	disabled: false,
+
+	_mozSettingProps: {'styleWithCSS':false},
+	_setDisabledAttr: function(/*Boolean*/ value){
+		this.disabled = value;
+		if(!this.isLoaded){ return; } // this method requires init to be complete
+		value = !!value;
+		if(dojo.isIE || dojo.isWebKit || dojo.isOpera){
+			var preventIEfocus = dojo.isIE && (this.isLoaded || !this.focusOnLoad);
+			if(preventIEfocus){ this.editNode.unselectable = "on"; }
+			this.editNode.contentEditable = !value;
+			if(preventIEfocus){
+				var _this = this;
+				setTimeout(function(){ _this.editNode.unselectable = "off"; }, 0);
+			}
+		}else{ //moz
+			try{
+				this.document.designMode=(value?'off':'on');
+			}catch(e){ return; } // ! _disabledOK
+			if(!value && this._mozSettingProps){
+				var ps = this._mozSettingProps;
+				for(var n in ps){
+					if(ps.hasOwnProperty(n)){
+						try{
+							this.document.execCommand(n,false,ps[n]);
+						}catch(e2){}
+					}
+				}
+			}
+//			this.document.execCommand('contentReadOnly', false, value);
+//				if(value){
+//					this.blur(); //to remove the blinking caret
+//				}
+		}
+		this._disabledOK = true;
+	},
+
+/* Event handlers
+ *****************/
+
+	onLoad: function(/*String*/ html){
+		// summary:
+		//		Handler after the iframe finishes loading.
+		// html: String
+		//		Editor contents should be set to this value
+		// tags:
+		//		protected
+
+		// TODO: rename this to _onLoad, make empty public onLoad() method, deprecate/make protected onLoadDeferred handler?
+
+		if(!this.window.__registeredWindow){
+			this.window.__registeredWindow = true;
+			this._iframeRegHandle = dijit.registerIframe(this.iframe);
+		}
+		if(!dojo.isIE && (this.height || dojo.isMoz)){
+			this.editNode=this.document.body;
+		}else{
+			// there's a wrapper div around the content, see _getIframeDocTxt().
+			this.editNode=this.document.body.firstChild;
+			var _this = this;
+			if(dojo.isIE){ // #4996 IE wants to focus the BODY tag
+				var tabStop = (this.tabStop = dojo.doc.createElement('<div tabIndex=-1>'));
+				this.editingArea.appendChild(tabStop);
+				this.iframe.onfocus = function(){ _this.editNode.setActive(); };
+			}
+		}
+		this.focusNode = this.editNode; // for InlineEditBox
+
+
+		var events = this.events.concat(this.captureEvents);
+		var ap = this.iframe ? this.document : this.editNode;
+		dojo.forEach(events, function(item){
+			this.connect(ap, item.toLowerCase(), item);
+		}, this);
+
+		if(dojo.isIE){ // IE contentEditable
+			this.connect(this.document, "onmousedown", "_onIEMouseDown"); // #4996 fix focus
+
+			// give the node Layout on IE
+			// TODO: this may no longer be needed, since we've reverted IE to using an iframe,
+			// not contentEditable.   Removing it would also probably remove the need for creating
+			// the extra <div> in _getIframeDocTxt()
+			this.editNode.style.zoom = 1.0;
+		}else{
+			this.connect(this.document, "onmousedown", function(){
+				// Clear the moveToStart focus, as mouse 
+				// down will set cursor point.  Required to properly
+				// work with selection/position driven plugins and clicks in
+				// the window. refs: #10678
+				delete this._cursorToStart;
+			}); 
+		}
+
+		if(dojo.isWebKit){
+			//WebKit sometimes doesn't fire right on selections, so the toolbar
+			//doesn't update right.  Therefore, help it out a bit with an additional
+			//listener.  A mouse up will typically indicate a display change, so fire this
+			//and get the toolbar to adapt.  Reference: #9532
+			this._webkitListener = this.connect(this.document, "onmouseup", "onDisplayChanged");
+		}
+
+		if(dojo.isIE){
+			// Try to make sure 'hidden' elements aren't visible in edit mode (like browsers other than IE
+			// do).  See #9103
+			try{
+				this.document.execCommand('RespectVisibilityInDesign', true, null);
+			}catch(e){/* squelch */}
+		}
+
+		this.isLoaded = true;
+
+		this.set('disabled', this.disabled); // initialize content to editable (or not)
+
+		// Note that setValue() call will only work after isLoaded is set to true (above)
+
+		// Set up a function to allow delaying the setValue until a callback is fired
+		// This ensures extensions like dijit.Editor have a way to hold the value set 
+		// until plugins load (and do things like register filters.
+		var setContent = dojo.hitch(this, function(){
+			this.setValue(html);
+			if(this.onLoadDeferred){
+				this.onLoadDeferred.callback(true);
+			}
+			this.onDisplayChanged();
+			if(this.focusOnLoad){
+				// after the document loads, then set focus after updateInterval expires so that
+				// onNormalizedDisplayChanged has run to avoid input caret issues
+				dojo.addOnLoad(dojo.hitch(this, function(){ setTimeout(dojo.hitch(this, "focus"), this.updateInterval); }));
+			}
+			// Save off the initial content now
+			this.savedContent = this.getValue(true);
+		});
+		if(this.setValueDeferred){
+			this.setValueDeferred.addCallback(setContent);
+		}else{
+			setContent();
+		}
+
+	},
+
+	onKeyDown: function(/* Event */ e){
+		// summary:
+		//		Handler for onkeydown event
+		// tags:
+		//		protected
+
+		// we need this event at the moment to get the events from control keys
+		// such as the backspace. It might be possible to add this to Dojo, so that
+		// keyPress events can be emulated by the keyDown and keyUp detection.
+
+		if(e.keyCode === dojo.keys.TAB && this.isTabIndent ){
+			dojo.stopEvent(e); //prevent tab from moving focus out of editor
+
+			// FIXME: this is a poor-man's indent/outdent. It would be
+			// better if it added 4 "&nbsp;" chars in an undoable way.
+			// Unfortunately pasteHTML does not prove to be undoable
+			if(this.queryCommandEnabled((e.shiftKey ? "outdent" : "indent"))){
+				this.execCommand((e.shiftKey ? "outdent" : "indent"));
+			}
+		}
+		if(dojo.isIE){
+			if(e.keyCode == dojo.keys.TAB && !this.isTabIndent){
+				if(e.shiftKey && !e.ctrlKey && !e.altKey){
+					// focus the BODY so the browser will tab away from it instead
+					this.iframe.focus();
+				}else if(!e.shiftKey && !e.ctrlKey && !e.altKey){
+					// focus the BODY so the browser will tab away from it instead
+					this.tabStop.focus();
+				}
+			}else if(e.keyCode === dojo.keys.BACKSPACE && this.document.selection.type === "Control"){
+				// IE has a bug where if a non-text object is selected in the editor,
+				// hitting backspace would act as if the browser's back button was
+				// clicked instead of deleting the object. see #1069
+				dojo.stopEvent(e);
+				this.execCommand("delete");
+			}else if((65 <= e.keyCode && e.keyCode <= 90) ||
+				(e.keyCode>=37 && e.keyCode<=40) // FIXME: get this from connect() instead!
+			){ //arrow keys
+				e.charCode = e.keyCode;
+				this.onKeyPress(e);
+			}
+		}
+		return true;
+	},
+
+	onKeyUp: function(e){
+		// summary:
+		//		Handler for onkeyup event
+		// tags:
+		//      callback
+		return;
+	},
+
+	setDisabled: function(/*Boolean*/ disabled){
+		// summary:
+		//		Deprecated, use set('disabled', ...) instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated('dijit.Editor::setDisabled is deprecated','use dijit.Editor::attr("disabled",boolean) instead', 2.0);
+		this.set('disabled',disabled);
+	},
+	_setValueAttr: function(/*String*/ value){
+		// summary:
+		//      Registers that attr("value", foo) should call setValue(foo)
+		this.setValue(value);
+	},
+	_setDisableSpellCheckAttr: function(/*Boolean*/ disabled){
+		if(this.document){
+			dojo.attr(this.document.body, "spellcheck", !disabled);
+		}else{
+			// try again after the editor is finished loading
+			this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+				dojo.attr(this.document.body, "spellcheck", !disabled);
+			}));
+		}
+		this.disableSpellCheck = disabled;
+	},
+
+	onKeyPress: function(e){
+		// summary:
+		//		Handle the various key events
+		// tags:
+		//		protected
+
+		var c = (e.keyChar && e.keyChar.toLowerCase()) || e.keyCode,
+			handlers = this._keyHandlers[c],
+			args = arguments;
+
+		if(handlers && !e.altKey){
+			dojo.some(handlers, function(h){
+				// treat meta- same as ctrl-, for benefit of mac users
+				if(!(h.shift ^ e.shiftKey) && !(h.ctrl ^ (e.ctrlKey||e.metaKey))){
+					if(!h.handler.apply(this, args)){
+						e.preventDefault();
+					}
+					return true;
+				}
+			}, this);
+		}
+
+		// function call after the character has been inserted
+		if(!this._onKeyHitch){
+			this._onKeyHitch = dojo.hitch(this, "onKeyPressed");
+		}
+		setTimeout(this._onKeyHitch, 1);
+		return true;
+	},
+
+	addKeyHandler: function(/*String*/ key, /*Boolean*/ ctrl, /*Boolean*/ shift, /*Function*/ handler){
+		// summary:
+		//		Add a handler for a keyboard shortcut
+		// description:
+		//		The key argument should be in lowercase if it is a letter character
+		// tags:
+		//		protected
+		if(!dojo.isArray(this._keyHandlers[key])){
+			this._keyHandlers[key] = [];
+		}
+		//TODO: would be nice to make this a hash instead of an array for quick lookups
+		this._keyHandlers[key].push({
+			shift: shift || false,
+			ctrl: ctrl || false,
+			handler: handler
+		});
+	},
+
+	onKeyPressed: function(){
+		// summary:
+		//		Handler for after the user has pressed a key, and the display has been updated.
+		//		(Runs on a timer so that it runs after the display is updated)
+		// tags:
+		//		private
+		this.onDisplayChanged(/*e*/); // can't pass in e
+	},
+
+	onClick: function(/*Event*/ e){
+		// summary:
+		//		Handler for when the user clicks.
+		// tags:
+		//		private
+
+		// console.info('onClick',this._tryDesignModeOn);
+		this.onDisplayChanged(e);
+	},
+
+	_onIEMouseDown: function(/*Event*/ e){
+		// summary:
+		//		IE only to prevent 2 clicks to focus
+		// tags:
+		//		protected
+
+		if(!this._focused && !this.disabled){
+			this.focus();
+		}
+	},
+
+	_onBlur: function(e){
+		// summary:
+		//		Called from focus manager when focus has moved away from this editor
+		// tags:
+		//		protected
+
+		// console.info('_onBlur')
+
+		this.inherited(arguments);
+		var _c=this.getValue(true);
+
+		if(_c!=this.savedContent){
+			this.onChange(_c);
+			this.savedContent=_c;
+		}
+	},
+	_onFocus: function(/*Event*/ e){
+		// summary:
+		//		Called from focus manager when focus has moved into this editor
+		// tags:
+		//		protected
+
+		// console.info('_onFocus')
+		if(!this.disabled){
+			if(!this._disabledOK){
+				this.set('disabled', false);
+			}
+			this.inherited(arguments);
+		}
+	},
+
+	// TODO: why is this needed - should we deprecate this ?
+	blur: function(){
+		// summary:
+		//		Remove focus from this instance.
+		// tags:
+		//		deprecated
+		if(!dojo.isIE && this.window.document.documentElement && this.window.document.documentElement.focus){
+			this.window.document.documentElement.focus();
+		}else if(dojo.doc.body.focus){
+			dojo.doc.body.focus();
+		}
+	},
+
+	focus: function(){
+		// summary:
+		//		Move focus to this editor
+		if(!this.isLoaded){
+			this.focusOnLoad = true;
+			return;
+		}
+		if(this._cursorToStart){ 
+			delete this._cursorToStart;
+			if(this.editNode.childNodes){
+				this.placeCursorAtStart(); // this calls focus() so return
+				return;
+			}
+		}
+		if(!dojo.isIE){
+			dijit.focus(this.iframe);
+		}else if(this.editNode && this.editNode.focus){
+			// editNode may be hidden in display:none div, lets just punt in this case
+			//this.editNode.focus(); -> causes IE to scroll always (strict and quirks mode) to the top the Iframe
+			// if we fire the event manually and let the browser handle the focusing, the latest
+			// cursor position is focused like in FF
+			this.iframe.fireEvent('onfocus', document.createEventObject()); // createEventObject only in IE
+		//	}else{
+		// TODO: should we throw here?
+		// console.debug("Have no idea how to focus into the editor!");
+		}
+	},
+
+	// _lastUpdate: 0,
+	updateInterval: 200,
+	_updateTimer: null,
+	onDisplayChanged: function(/*Event*/ e){
+		// summary:
+		//		This event will be fired everytime the display context
+		//		changes and the result needs to be reflected in the UI.
+		// description:
+		//		If you don't want to have update too often,
+		//		onNormalizedDisplayChanged should be used instead
+		// tags:
+		//		private
+
+		// var _t=new Date();
+		if(this._updateTimer){
+			clearTimeout(this._updateTimer);
+		}
+		if(!this._updateHandler){
+			this._updateHandler = dojo.hitch(this,"onNormalizedDisplayChanged");
+		}
+		this._updateTimer = setTimeout(this._updateHandler, this.updateInterval);
+	},
+	onNormalizedDisplayChanged: function(){
+		// summary:
+		//		This event is fired every updateInterval ms or more
+		// description:
+		//		If something needs to happen immediately after a
+		//		user change, please use onDisplayChanged instead.
+		// tags:
+		//		private
+		delete this._updateTimer;
+	},
+	onChange: function(newContent){
+		// summary:
+		//		This is fired if and only if the editor loses focus and
+		//		the content is changed.
+	},
+	_normalizeCommand: function(/*String*/ cmd, /*Anything?*/argument){
+		// summary:
+		//		Used as the advice function by dojo.connect to map our
+		//		normalized set of commands to those supported by the target
+		//		browser.
+		// tags:
+		//		private
+
+		var command = cmd.toLowerCase();
+		if(command == "formatblock"){
+			if(dojo.isSafari && argument === undefined){ command = "heading"; }
+		}else if(command == "hilitecolor" && !dojo.isMoz){
+			command = "backcolor";
+		}
+
+		return command;
+	},
+
+	_qcaCache: {},
+	queryCommandAvailable: function(/*String*/ command){
+		// summary:
+		//		Tests whether a command is supported by the host. Clients
+		//		SHOULD check whether a command is supported before attempting
+		//		to use it, behaviour for unsupported commands is undefined.
+		// command:
+		//		The command to test for
+		// tags:
+		//		private
+
+		// memoizing version. See _queryCommandAvailable for computing version
+		var ca = this._qcaCache[command];
+		if(ca !== undefined){ return ca; }
+		return (this._qcaCache[command] = this._queryCommandAvailable(command));
+	},
+
+	_queryCommandAvailable: function(/*String*/ command){
+		// summary:
+		//		See queryCommandAvailable().
+		// tags:
+		//		private
+
+		var ie = 1;
+		var mozilla = 1 << 1;
+		var webkit = 1 << 2;
+		var opera = 1 << 3;
+		var webkit420 = 1 << 4;
+
+		function isSupportedBy(browsers){
+			return {
+				ie: Boolean(browsers & ie),
+				mozilla: Boolean(browsers & mozilla),
+				webkit: Boolean(browsers & webkit),
+				webkit420: Boolean(browsers & webkit420),
+				opera: Boolean(browsers & opera)
+			};
+		}
+
+		var supportedBy = null;
+
+		switch(command.toLowerCase()){
+			case "bold": case "italic": case "underline":
+			case "subscript": case "superscript":
+			case "fontname": case "fontsize":
+			case "forecolor": case "hilitecolor":
+			case "justifycenter": case "justifyfull": case "justifyleft":
+			case "justifyright": case "delete": case "selectall": case "toggledir":
+				supportedBy = isSupportedBy(mozilla | ie | webkit | opera);
+				break;
+
+			case "createlink": case "unlink": case "removeformat":
+			case "inserthorizontalrule": case "insertimage":
+			case "insertorderedlist": case "insertunorderedlist":
+			case "indent": case "outdent": case "formatblock":
+			case "inserthtml": case "undo": case "redo": case "strikethrough": case "tabindent":
+				supportedBy = isSupportedBy(mozilla | ie | opera | webkit420);
+				break;
+
+			case "blockdirltr": case "blockdirrtl":
+			case "dirltr": case "dirrtl":
+			case "inlinedirltr": case "inlinedirrtl":
+				supportedBy = isSupportedBy(ie);
+				break;
+			case "cut": case "copy": case "paste":
+				supportedBy = isSupportedBy( ie | mozilla | webkit420);
+				break;
+
+			case "inserttable":
+				supportedBy = isSupportedBy(mozilla | ie);
+				break;
+
+			case "insertcell": case "insertcol": case "insertrow":
+			case "deletecells": case "deletecols": case "deleterows":
+			case "mergecells": case "splitcell":
+				supportedBy = isSupportedBy(ie | mozilla);
+				break;
+
+			default: return false;
+		}
+
+		return (dojo.isIE && supportedBy.ie) ||
+			(dojo.isMoz && supportedBy.mozilla) ||
+			(dojo.isWebKit && supportedBy.webkit) ||
+			(dojo.isWebKit > 420 && supportedBy.webkit420) ||
+			(dojo.isOpera && supportedBy.opera);	// Boolean return true if the command is supported, false otherwise
+	},
+
+	execCommand: function(/*String*/ command, argument){
+		// summary:
+		//		Executes a command in the Rich Text area
+		// command:
+		//		The command to execute
+		// argument:
+		//		An optional argument to the command
+		// tags:
+		//		protected
+		var returnValue;
+
+		//focus() is required for IE to work
+		//In addition, focus() makes sure after the execution of
+		//the command, the editor receives the focus as expected
+		this.focus();
+
+		command = this._normalizeCommand(command, argument);
+
+
+		if(argument !== undefined){
+			if(command == "heading"){
+				throw new Error("unimplemented");
+			}else if((command == "formatblock") && dojo.isIE){
+				argument = '<'+argument+'>';
+			}
+		}
+
+		//Check to see if we have any over-rides for commands, they will be functions on this
+		//widget of the form _commandImpl.  If we don't, fall through to the basic native
+		//exec command of the browser.
+		var implFunc = "_" + command + "Impl";
+		if(this[implFunc]){
+			returnValue = this[implFunc](argument);
+		}else{
+			argument = arguments.length > 1 ? argument : null;
+			if(argument || command!="createlink"){
+				returnValue = this.document.execCommand(command, false, argument);
+			}
+		}
+
+		this.onDisplayChanged();
+		return returnValue;
+	},
+
+	queryCommandEnabled: function(/*String*/ command){
+		// summary:
+		//		Check whether a command is enabled or not.
+		// tags:
+		//		protected
+		if(this.disabled || !this._disabledOK){ return false; }
+		command = this._normalizeCommand(command);
+		if(dojo.isMoz || dojo.isWebKit){
+			if(command == "unlink"){ // mozilla returns true always
+				// console.debug(this._sCall("hasAncestorElement", ['a']));
+				return this._sCall("hasAncestorElement", ["a"]);
+			}else if(command == "inserttable"){
+				return true;
+			}
+		}
+		//see #4109
+		if(dojo.isWebKit){
+			if(command == "copy"){
+				command = "cut";
+			}else if(command == "paste"){
+				return true;
+			}
+		}
+
+		var elem = dojo.isIE ? this.document.selection.createRange() : this.document;
+		try{
+			return elem.queryCommandEnabled(command);
+		}catch(e){
+			//Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
+			return false;
+		}
+
+	},
+
+	queryCommandState: function(command){
+		// summary:
+		//		Check the state of a given command and returns true or false.
+		// tags:
+		//		protected
+
+		if(this.disabled || !this._disabledOK){ return false; }
+		command = this._normalizeCommand(command);
+		try{
+			return this.document.queryCommandState(command);
+		}catch(e){
+			//Squelch, occurs if editor is hidden on FF 3 (and maybe others.)
+			return false;
+		}
+	},
+
+	queryCommandValue: function(command){
+		// summary:
+		//		Check the value of a given command. This matters most for
+		//		custom selections and complex values like font value setting.
+		// tags:
+		//		protected
+
+		if(this.disabled || !this._disabledOK){ return false; }
+		var r;
+		command = this._normalizeCommand(command);
+		if(dojo.isIE && command == "formatblock"){
+			r = this._native2LocalFormatNames[this.document.queryCommandValue(command)];
+		}else if(dojo.isMoz && command === "hilitecolor"){
+			var oldValue;
+			try{
+				oldValue = this.document.queryCommandValue("styleWithCSS");
+			}catch(e){
+				oldValue = false;
+			}
+			this.document.execCommand("styleWithCSS", false, true);
+			r = this.document.queryCommandValue(command);
+			this.document.execCommand("styleWithCSS", false, oldValue);
+		}else{
+			r = this.document.queryCommandValue(command);
+		}
+		return r;
+	},
+
+	// Misc.
+
+	_sCall: function(name, args){
+		// summary:
+		//		Run the named method of dijit._editor.selection over the
+		//		current editor instance's window, with the passed args.
+		// tags:
+		//		private
+		return dojo.withGlobal(this.window, name, dijit._editor.selection, args);
+	},
+
+	// FIXME: this is a TON of code duplication. Why?
+
+	placeCursorAtStart: function(){
+		// summary:
+		//		Place the cursor at the start of the editing area.
+		// tags:
+		//		private
+
+		this.focus();
+
+		//see comments in placeCursorAtEnd
+		var isvalid=false;
+		if(dojo.isMoz){
+			// TODO:  Is this branch even necessary?
+			var first=this.editNode.firstChild;
+			while(first){
+				if(first.nodeType == 3){
+					if(first.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
+						isvalid=true;
+						this._sCall("selectElement", [ first ]);
+						break;
+					}
+				}else if(first.nodeType == 1){
+					isvalid=true;
+					var tg = first.tagName ? first.tagName.toLowerCase() : "";
+					// Collapse before childless tags.
+					if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){
+						this._sCall("selectElement", [ first ]);
+					}else{
+						// Collapse inside tags with children.
+						this._sCall("selectElementChildren", [ first ]);
+					}
+					break;
+				}
+				first = first.nextSibling;
+			}
+		}else{
+			isvalid=true;
+			this._sCall("selectElementChildren", [ this.editNode ]);
+		}
+		if(isvalid){
+			this._sCall("collapse", [ true ]);
+		}
+	},
+
+	placeCursorAtEnd: function(){
+		// summary:
+		//		Place the cursor at the end of the editing area.
+		// tags:
+		//		private
+
+		this.focus();
+
+		//In mozilla, if last child is not a text node, we have to use
+		// selectElementChildren on this.editNode.lastChild otherwise the
+		// cursor would be placed at the end of the closing tag of
+		//this.editNode.lastChild
+		var isvalid=false;
+		if(dojo.isMoz){
+			var last=this.editNode.lastChild;
+			while(last){
+				if(last.nodeType == 3){
+					if(last.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
+						isvalid=true;
+						this._sCall("selectElement", [ last ]);
+						break;
+					}
+				}else if(last.nodeType == 1){
+					isvalid=true;
+					if(last.lastChild){
+						this._sCall("selectElement", [ last.lastChild ]);
+					}else{
+						this._sCall("selectElement", [ last ]);
+					}
+					break;
+				}
+				last = last.previousSibling;
+			}
+		}else{
+			isvalid=true;
+			this._sCall("selectElementChildren", [ this.editNode ]);
+		}
+		if(isvalid){
+			this._sCall("collapse", [ false ]);
+		}
+	},
+
+	getValue: function(/*Boolean?*/ nonDestructive){
+		// summary:
+		//		Return the current content of the editing area (post filters
+		//		are applied).  Users should call attr('value') instead.
+		//	nonDestructive:
+		//		defaults to false. Should the post-filtering be run over a copy
+		//		of the live DOM? Most users should pass "true" here unless they
+		//		*really* know that none of the installed filters are going to
+		//		mess up the editing session.
+		// tags:
+		//		private
+		if(this.textarea){
+			if(this.isClosed || !this.isLoaded){
+				return this.textarea.value;
+			}
+		}
+
+		return this._postFilterContent(null, nonDestructive);
+	},
+	_getValueAttr: function(){
+		// summary:
+		//		Hook to make attr("value") work
+		return this.getValue(true);
+	},
+
+	setValue: function(/*String*/ html){
+		// summary:
+		//		This function sets the content. No undo history is preserved.
+		//		Users should use set('value', ...) instead.
+		// tags:
+		//		deprecated
+
+		// TODO: remove this and getValue() for 2.0, and move code to _setValueAttr()
+
+		if(!this.isLoaded){
+			// try again after the editor is finished loading
+			this.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+				this.setValue(html);
+			}));
+			return;
+		}
+		this._cursorToStart = true;
+		if(this.textarea && (this.isClosed || !this.isLoaded)){
+			this.textarea.value=html;
+		}else{
+			html = this._preFilterContent(html);
+			var node = this.isClosed ? this.domNode : this.editNode;
+
+			// Use &nbsp; to avoid webkit problems where editor is disabled until the user clicks it
+			if(!html && dojo.isWebKit){
+				html = "&nbsp;";
+			}
+			node.innerHTML = html;
+			this._preDomFilterContent(node);
+		}
+		this.onDisplayChanged();
+	},
+
+	replaceValue: function(/*String*/ html){
+		// summary:
+		//		This function set the content while trying to maintain the undo stack
+		//		(now only works fine with Moz, this is identical to setValue in all
+		//		other browsers)
+		// tags:
+		//		protected
+
+		if(this.isClosed){
+			this.setValue(html);
+		}else if(this.window && this.window.getSelection && !dojo.isMoz){ // Safari
+			// look ma! it's a totally f'd browser!
+			this.setValue(html);
+		}else if(this.window && this.window.getSelection){ // Moz
+			html = this._preFilterContent(html);
+			this.execCommand("selectall");
+			if(!html){ 
+				this._cursorToStart = true;
+				html = "&nbsp;"; 
+			}
+			this.execCommand("inserthtml", html);
+			this._preDomFilterContent(this.editNode);
+		}else if(this.document && this.document.selection){//IE
+			//In IE, when the first element is not a text node, say
+			//an <a> tag, when replacing the content of the editing
+			//area, the <a> tag will be around all the content
+			//so for now, use setValue for IE too
+			this.setValue(html);
+		}
+	},
+
+	_preFilterContent: function(/*String*/ html){
+		// summary:
+		//		Filter the input before setting the content of the editing
+		//		area. DOM pre-filtering may happen after this
+		//		string-based filtering takes place but as of 1.2, this is not
+		//		guaranteed for operations such as the inserthtml command.
+		// tags:
+		//		private
+
+		var ec = html;
+		dojo.forEach(this.contentPreFilters, function(ef){ if(ef){ ec = ef(ec); } });
+		return ec;
+	},
+	_preDomFilterContent: function(/*DomNode*/ dom){
+		// summary:
+		//		filter the input's live DOM. All filter operations should be
+		//		considered to be "live" and operating on the DOM that the user
+		//		will be interacting with in their editing session.
+		// tags:
+		//		private
+		dom = dom || this.editNode;
+		dojo.forEach(this.contentDomPreFilters, function(ef){
+			if(ef && dojo.isFunction(ef)){
+				ef(dom);
+			}
+		}, this);
+	},
+
+	_postFilterContent: function(
+		/*DomNode|DomNode[]|String?*/ dom,
+		/*Boolean?*/ nonDestructive){
+		// summary:
+		//		filter the output after getting the content of the editing area
+		//
+		// description:
+		//		post-filtering allows plug-ins and users to specify any number
+		//		of transforms over the editor's content, enabling many common
+		//		use-cases such as transforming absolute to relative URLs (and
+		//		vice-versa), ensuring conformance with a particular DTD, etc.
+		//		The filters are registered in the contentDomPostFilters and
+		//		contentPostFilters arrays. Each item in the
+		//		contentDomPostFilters array is a function which takes a DOM
+		//		Node or array of nodes as its only argument and returns the
+		//		same. It is then passed down the chain for further filtering.
+		//		The contentPostFilters array behaves the same way, except each
+		//		member operates on strings. Together, the DOM and string-based
+		//		filtering allow the full range of post-processing that should
+		//		be necessaray to enable even the most agressive of post-editing
+		//		conversions to take place.
+		//
+		//		If nonDestructive is set to "true", the nodes are cloned before
+		//		filtering proceeds to avoid potentially destructive transforms
+		//		to the content which may still needed to be edited further.
+		//		Once DOM filtering has taken place, the serialized version of
+		//		the DOM which is passed is run through each of the
+		//		contentPostFilters functions.
+		//
+		//	dom:
+		//		a node, set of nodes, which to filter using each of the current
+		//		members of the contentDomPostFilters and contentPostFilters arrays.
+		//
+		//	nonDestructive:
+		//		defaults to "false". If true, ensures that filtering happens on
+		//		a clone of the passed-in content and not the actual node
+		//		itself.
+		//
+		// tags:
+		//		private
+
+		var ec;
+		if(!dojo.isString(dom)){
+			dom = dom || this.editNode;
+			if(this.contentDomPostFilters.length){
+				if(nonDestructive){
+					dom = dojo.clone(dom);
+				}
+				dojo.forEach(this.contentDomPostFilters, function(ef){
+					dom = ef(dom);
+				});
+			}
+			ec = dijit._editor.getChildrenHtml(dom);
+		}else{
+			ec = dom;
+		}
+
+		if(!dojo.trim(ec.replace(/^\xA0\xA0*/, '').replace(/\xA0\xA0*$/, '')).length){
+			ec = "";
+		}
+
+		//	if(dojo.isIE){
+		//		//removing appended <P>&nbsp;</P> for IE
+		//		ec = ec.replace(/(?:<p>&nbsp;</p>[\n\r]*)+$/i,"");
+		//	}
+		dojo.forEach(this.contentPostFilters, function(ef){
+			ec = ef(ec);
+		});
+
+		return ec;
+	},
+
+	_saveContent: function(/*Event*/ e){
+		// summary:
+		//		Saves the content in an onunload event if the editor has not been closed
+		// tags:
+		//		private
+
+		var saveTextarea = dojo.byId(dijit._scopeName + "._editor.RichText.savedContent");
+		if(saveTextarea.value){
+			saveTextarea.value += this._SEPARATOR;
+		}
+		saveTextarea.value += this.name + ":" + this.getValue(true);
+	},
+
+
+	escapeXml: function(/*String*/ str, /*Boolean*/ noSingleQuotes){
+		// summary:
+		//		Adds escape sequences for special characters in XML.
+		//		Optionally skips escapes for single quotes
+		// tags:
+		//		private
+
+		str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
+		if(!noSingleQuotes){
+			str = str.replace(/'/gm, "&#39;");
+		}
+		return str; // string
+	},
+
+	getNodeHtml: function(/* DomNode */ node){
+		// summary:
+		//		Deprecated.   Use dijit._editor._getNodeHtml() instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated('dijit.Editor::getNodeHtml is deprecated','use dijit._editor.getNodeHtml instead', 2);
+		return dijit._editor.getNodeHtml(node); // String
+	},
+
+	getNodeChildrenHtml: function(/* DomNode */ dom){
+		// summary:
+		//		Deprecated.   Use dijit._editor.getChildrenHtml() instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated('dijit.Editor::getNodeChildrenHtml is deprecated','use dijit._editor.getChildrenHtml instead', 2);
+		return dijit._editor.getChildrenHtml(dom);
+	},
+
+	close: function(/*Boolean*/ save){
+		// summary:
+		//		Kills the editor and optionally writes back the modified contents to the
+		//		element from which it originated.
+		// save:
+		//		Whether or not to save the changes. If false, the changes are discarded.
+		// tags:
+		//		private
+
+		if(this.isClosed){return false; }
+
+		if(!arguments.length){ save = true; }
+		this._content = this.getValue();
+		var changed = (this.savedContent != this._content);
+
+		// line height is squashed for iframes
+		// FIXME: why was this here? if (this.iframe){ this.domNode.style.lineHeight = null; }
+
+		if(this.interval){ clearInterval(this.interval); }
+
+		if(this._webkitListener){
+			//Cleaup of WebKit fix: #9532
+			this.disconnect(this._webkitListener);
+			delete this._webkitListener;
+		}
+
+		// Guard against memory leaks on IE (see #9268)
+		if(dojo.isIE){
+			 this.iframe.onfocus = null;
+		}
+		this.iframe._loadFunc = null;
+
+		if(this._iframeRegHandle){
+			dijit.unregisterIframe(this._iframeRegHandle);
+			delete this._iframeRegHandle;
+		}
+
+		if(this.textarea){
+			var s = this.textarea.style;
+			s.position = "";
+			s.left = s.top = "";
+			if(dojo.isIE){
+				s.overflow = this.__overflow;
+				this.__overflow = null;
+			}
+			this.textarea.value = save ? this._content : this.savedContent;
+			dojo.destroy(this.domNode);
+			this.domNode = this.textarea;
+		}else{
+			// if(save){
+			// why we treat moz differently? comment out to fix #1061
+			//		if(dojo.isMoz){
+			//			var nc = dojo.doc.createElement("span");
+			//			this.domNode.appendChild(nc);
+			//			nc.innerHTML = this.editNode.innerHTML;
+			//		}else{
+			//			this.domNode.innerHTML = this._content;
+			//		}
+			// }
+
+			// Note that this destroys the iframe
+			this.domNode.innerHTML = save ? this._content : this.savedContent;
+		}
+		delete this.iframe;
+
+		dojo.removeClass(this.domNode, this.baseClass);
+		this.isClosed = true;
+		this.isLoaded = false;
+
+		delete this.editNode;
+		delete this.focusNode;
+
+		if(this.window && this.window._frameElement){
+			this.window._frameElement = null;
+		}
+
+		this.window = null;
+		this.document = null;
+		this.editingArea = null;
+		this.editorObject = null;
+
+		return changed; // Boolean: whether the content has been modified
+	},
+
+	destroy: function(){
+		if(!this.isClosed){ this.close(false); }
+		this.inherited(arguments);
+	},
+
+	_removeMozBogus: function(/* String */ html){
+		// summary:
+		//		Post filter to remove unwanted HTML attributes generated by mozilla
+		// tags:
+		//		private
+		return html.replace(/\stype="_moz"/gi, '').replace(/\s_moz_dirty=""/gi, '').replace(/_moz_resizing="(true|false)"/gi,''); // String
+	},
+	_removeWebkitBogus: function(/* String */ html){
+		// summary:
+		//		Post filter to remove unwanted HTML attributes generated by webkit
+		// tags:
+		//		private
+		html = html.replace(/\sclass="webkit-block-placeholder"/gi, '');
+		html = html.replace(/\sclass="apple-style-span"/gi, '');
+		return html; // String
+	},
+	_normalizeFontStyle: function(/* String */ html){
+		// summary:
+		//		Convert 'strong' and 'em' to 'b' and 'i'.
+		// description:
+		//		Moz can not handle strong/em tags correctly, so to help
+		//		mozilla and also to normalize output, convert them to 'b' and 'i'.
+		//
+		//		Note the IE generates 'strong' and 'em' rather than 'b' and 'i'
+		// tags:
+		//		private
+		return html.replace(/<(\/)?strong([ \>])/gi, '<$1b$2')
+			.replace(/<(\/)?em([ \>])/gi, '<$1i$2' ); // String
+	},
+
+	_preFixUrlAttributes: function(/* String */ html){
+		// summary:
+		//		Pre-filter to do fixing to href attributes on <a> and <img> tags
+		// tags:
+		//		private
+		return html.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,
+				'$1$4$2$3$5$2 _djrealurl=$2$3$5$2')
+			.replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,
+				'$1$4$2$3$5$2 _djrealurl=$2$3$5$2'); // String
+	},
+
+	/*****************************************************************************
+		The following functions implement HTML manipulation commands for various
+		browser/contentEditable implementations.  The goal of them is to enforce
+		standard behaviors of them.
+	******************************************************************************/
+
+	_inserthorizontalruleImpl: function(argument){
+		// summary:
+		//		This function implements the insertion of HTML 'HR' tags.
+		//		into a point on the page.  IE doesn't to it right, so
+		//		we have to use an alternate form
+		// argument:
+		//		arguments to the exec command, if any.
+		// tags:
+		//		protected
+		if(dojo.isIE){
+			return this._inserthtmlImpl("<hr>");
+		}
+		return this.document.execCommand("inserthorizontalrule", false, argument);
+	},
+
+	_unlinkImpl: function(argument){
+		// summary:
+		//		This function implements the unlink of an 'a' tag.
+		// argument:
+		//		arguments to the exec command, if any.
+		// tags:
+		//		protected
+		if((this.queryCommandEnabled("unlink")) && (dojo.isMoz || dojo.isWebKit)){
+			var a = this._sCall("getAncestorElement", [ "a" ]);
+			this._sCall("selectElement", [ a ]);
+			return this.document.execCommand("unlink", false, null);
+		}
+		return this.document.execCommand("unlink", false, argument);
+	},
+
+	_hilitecolorImpl: function(argument){
+		// summary:
+		//		This function implements the hilitecolor command
+		// argument:
+		//		arguments to the exec command, if any.
+		// tags:
+		//		protected
+		var returnValue;
+		if(dojo.isMoz){
+			// mozilla doesn't support hilitecolor properly when useCSS is
+			// set to false (bugzilla #279330)
+			this.document.execCommand("styleWithCSS", false, true);
+			returnValue = this.document.execCommand("hilitecolor", false, argument);
+			this.document.execCommand("styleWithCSS", false, false);
+		}else{
+			returnValue = this.document.execCommand("hilitecolor", false, argument);
+		}
+		return returnValue;
+	},
+
+	_backcolorImpl: function(argument){
+		// summary:
+		//		This function implements the backcolor command
+		// argument:
+		//		arguments to the exec command, if any.
+		// tags:
+		//		protected
+		if(dojo.isIE){
+			// Tested under IE 6 XP2, no problem here, comment out
+			// IE weirdly collapses ranges when we exec these commands, so prevent it
+			//	var tr = this.document.selection.createRange();
+			argument = argument ? argument : null;
+		}
+		return this.document.execCommand("backcolor", false, argument);
+	},
+
+	_forecolorImpl: function(argument){
+		// summary:
+		//		This function implements the forecolor command
+		// argument:
+		//		arguments to the exec command, if any.
+		// tags:
+		//		protected
+		if(dojo.isIE){
+			// Tested under IE 6 XP2, no problem here, comment out
+			// IE weirdly collapses ranges when we exec these commands, so prevent it
+			//	var tr = this.document.selection.createRange();
+			argument = argument? argument : null;
+		}
+		return this.document.execCommand("forecolor", false, argument);
+	},
+
+	_inserthtmlImpl: function(argument){
+		// summary:
+		//		This function implements the insertion of HTML content into
+		//		a point on the page.
+		// argument:
+		//		The content to insert, if any.
+		// tags:
+		//		protected
+		argument = this._preFilterContent(argument);
+		var rv = true;
+		if(dojo.isIE){
+			var insertRange = this.document.selection.createRange();
+			if(this.document.selection.type.toUpperCase() == 'CONTROL'){
+				var n=insertRange.item(0);
+				while(insertRange.length){
+					insertRange.remove(insertRange.item(0));
+				}
+				n.outerHTML=argument;
+			}else{
+				insertRange.pasteHTML(argument);
+			}
+			insertRange.select();
+			//insertRange.collapse(true);
+		}else if(dojo.isMoz && !argument.length){
+			//mozilla can not inserthtml an empty html to delete current selection
+			//so we delete the selection instead in this case
+			this._sCall("remove"); // FIXME
+		}else{
+			rv = this.document.execCommand("inserthtml", false, argument);
+		}
+		return rv;
+	},
+
+	getHeaderHeight: function(){
+		// summary:
+		//		A function for obtaining the height of the header node
+		return this._getNodeChildrenHeight(this.header); // Number
+	},
+
+	getFooterHeight: function(){
+		// summary:
+		//		A function for obtaining the height of the footer node
+		return this._getNodeChildrenHeight(this.footer); // Number
+	},
+
+	_getNodeChildrenHeight: function(node){
+		// summary:
+		//		An internal function for computing the cumulative height of all child nodes of 'node'
+		// node:
+		//		The node to process the children of;
+		var h = 0;
+		if(node && node.childNodes){
+			// IE didn't compute it right when position was obtained on the node directly is some cases, 
+			// so we have to walk over all the children manually.
+			var i; 
+			for(i = 0; i < node.childNodes.length; i++){ 
+				var size = dojo.position(node.childNodes[i]); 
+				h += size.h;   
+			} 
+		}
+		return h; // Number
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._KeyNavContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._KeyNavContainer"] = true;
+dojo.provide("dijit._KeyNavContainer");
+
+
+dojo.declare("dijit._KeyNavContainer",
+	dijit._Container,
+	{
+
+		// summary:
+		//		A _Container with keyboard navigation of its children.
+		// description:
+		//		To use this mixin, call connectKeyNavHandlers() in
+		//		postCreate() and call startupKeyNavChildren() in startup().
+		//		It provides normalized keyboard and focusing code for Container
+		//		widgets.
+/*=====
+		// focusedChild: [protected] Widget
+		//		The currently focused child widget, or null if there isn't one
+		focusedChild: null,
+=====*/
+
+		// tabIndex: Integer
+		//		Tab index of the container; same as HTML tabIndex attribute.
+		//		Note then when user tabs into the container, focus is immediately
+		//		moved to the first item in the container.
+		tabIndex: "0",
+
+		_keyNavCodes: {},
+
+		connectKeyNavHandlers: function(/*dojo.keys[]*/ prevKeyCodes, /*dojo.keys[]*/ nextKeyCodes){
+			// summary:
+			//		Call in postCreate() to attach the keyboard handlers
+			//		to the container.
+			// preKeyCodes: dojo.keys[]
+			//		Key codes for navigating to the previous child.
+			// nextKeyCodes: dojo.keys[]
+			//		Key codes for navigating to the next child.
+			// tags:
+			//		protected
+
+			var keyCodes = (this._keyNavCodes = {});
+			var prev = dojo.hitch(this, this.focusPrev);
+			var next = dojo.hitch(this, this.focusNext);
+			dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; });
+			dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; });
+			this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
+			this.connect(this.domNode, "onfocus", "_onContainerFocus");
+		},
+
+		startupKeyNavChildren: function(){
+			// summary:
+			//		Call in startup() to set child tabindexes to -1
+			// tags:
+			//		protected
+			dojo.forEach(this.getChildren(), dojo.hitch(this, "_startupChild"));
+		},
+
+		addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
+			// summary:
+			//		Add a child to our _Container
+			dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
+			this._startupChild(widget);
+		},
+
+		focus: function(){
+			// summary:
+			//		Default focus() implementation: focus the first child.
+			this.focusFirstChild();
+		},
+
+		focusFirstChild: function(){
+			// summary:
+			//		Focus the first focusable child in the container.
+			// tags:
+			//		protected
+			var child = this._getFirstFocusableChild();
+			if(child){ // edge case: Menu could be empty or hidden
+				this.focusChild(child);
+			}
+		},
+
+		focusNext: function(){
+			// summary:
+			//		Focus the next widget
+			// tags:
+			//		protected
+			var child = this._getNextFocusableChild(this.focusedChild, 1);
+			this.focusChild(child);
+		},
+
+		focusPrev: function(){
+			// summary:
+			//		Focus the last focusable node in the previous widget
+			//		(ex: go to the ComboButton icon section rather than button section)
+			// tags:
+			//		protected
+			var child = this._getNextFocusableChild(this.focusedChild, -1);
+			this.focusChild(child, true);
+		},
+
+		focusChild: function(/*dijit._Widget*/ widget, /*Boolean*/ last){
+			// summary:
+			//		Focus widget.
+			// widget:
+			//		Reference to container's child widget
+			// last:
+			//		If true and if widget has multiple focusable nodes, focus the
+			//		last one instead of the first one
+			// tags:
+			//		protected
+			
+			if(this.focusedChild && widget !== this.focusedChild){
+				this._onChildBlur(this.focusedChild);
+			}
+			widget.focus(last ? "end" : "start");
+			this.focusedChild = widget;
+		},
+
+		_startupChild: function(/*dijit._Widget*/ widget){
+			// summary:
+			//		Setup for each child widget
+			// description:
+			//		Sets tabIndex=-1 on each child, so that the tab key will 
+			//		leave the container rather than visiting each child.
+			// tags:
+			//		private
+			
+			widget.set("tabIndex", "-1");
+			
+			this.connect(widget, "_onFocus", function(){
+				// Set valid tabIndex so tabbing away from widget goes to right place, see #10272
+				widget.set("tabIndex", this.tabIndex);
+			});
+			this.connect(widget, "_onBlur", function(){
+				widget.set("tabIndex", "-1");
+			});
+		},
+
+		_onContainerFocus: function(evt){
+			// summary:
+			//		Handler for when the container gets focus
+			// description:
+			//		Initially the container itself has a tabIndex, but when it gets
+			//		focus, switch focus to first child...
+			// tags:
+			//		private
+
+			// Note that we can't use _onFocus() because switching focus from the
+			// _onFocus() handler confuses the focus.js code
+			// (because it causes _onFocusNode() to be called recursively)
+
+			// focus bubbles on Firefox,
+			// so just make sure that focus has really gone to the container
+			if(evt.target !== this.domNode){ return; }
+
+			this.focusFirstChild();
+
+			// and then set the container's tabIndex to -1,
+			// (don't remove as that breaks Safari 4)
+			// so that tab or shift-tab will go to the fields after/before
+			// the container, rather than the container itself
+			dojo.attr(this.domNode, "tabIndex", "-1");
+		},
+
+		_onBlur: function(evt){
+			// When focus is moved away the container, and its descendant (popup) widgets,
+			// then restore the container's tabIndex so that user can tab to it again.
+			// Note that using _onBlur() so that this doesn't happen when focus is shifted
+			// to one of my child widgets (typically a popup)
+			if(this.tabIndex){
+				dojo.attr(this.domNode, "tabIndex", this.tabIndex);
+			}
+			this.inherited(arguments);
+		},
+
+		_onContainerKeypress: function(evt){
+			// summary:
+			//		When a key is pressed, if it's an arrow key etc. then
+			//		it's handled here.
+			// tags:
+			//		private
+			if(evt.ctrlKey || evt.altKey){ return; }
+			var func = this._keyNavCodes[evt.charOrCode];
+			if(func){
+				func();
+				dojo.stopEvent(evt);
+			}
+		},
+
+		_onChildBlur: function(/*dijit._Widget*/ widget){
+			// summary:
+			//		Called when focus leaves a child widget to go
+			//		to a sibling widget.
+			// tags:
+			//		protected
+		},
+
+		_getFirstFocusableChild: function(){
+			// summary:
+			//		Returns first child that can be focused
+			return this._getNextFocusableChild(null, 1);	// dijit._Widget
+		},
+
+		_getNextFocusableChild: function(child, dir){
+			// summary:
+			//		Returns the next or previous focusable child, compared
+			//		to "child"
+			// child: Widget
+			//		The current widget
+			// dir: Integer
+			//		* 1 = after
+			//		* -1 = before
+			if(child){
+				child = this._getSiblingOfChild(child, dir);
+			}
+			var children = this.getChildren();
+			for(var i=0; i < children.length; i++){
+				if(!child){
+					child = children[(dir>0) ? 0 : (children.length-1)];
+				}
+				if(child.isFocusable()){
+					return child;	// dijit._Widget
+				}
+				child = this._getSiblingOfChild(child, dir);
+			}
+			// no focusable child found
+			return null;	// dijit._Widget
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.ToolbarSeparator"] = true;
+dojo.provide("dijit.ToolbarSeparator");
+
+
+
+
+dojo.declare("dijit.ToolbarSeparator",
+		[ dijit._Widget, dijit._Templated ],
+		{
+		// summary:
+		//		A spacer between two `dijit.Toolbar` items
+		templateString: '<div class="dijitToolbarSeparator dijitInline" waiRole="presentation"></div>',
+		postCreate: function(){ dojo.setSelectable(this.domNode, false); },
+		isFocusable: function(){
+			// summary:
+			//		This widget isn't focusable, so pass along that fact.
+			// tags:
+			//		protected
+			return false;
+		}
+
+	});
+
+
+
+}
+
+if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Toolbar"] = true;
+dojo.provide("dijit.Toolbar");
+
+
+
+
+
+dojo.declare("dijit.Toolbar",
+	[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
+	{
+	// summary:
+	//		A Toolbar widget, used to hold things like `dijit.Editor` buttons
+
+	templateString:
+		'<div class="dijit" waiRole="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
+		//	'<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
+		//		'<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
+		//	'</table>' +
+		'</div>',
+
+	baseClass: "dijitToolbar",
+
+	postCreate: function(){
+		this.connectKeyNavHandlers(
+			this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
+			this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
+		);
+		this.inherited(arguments);
+	},
+
+	startup: function(){
+		if(this._started){ return; }
+
+		this.startupKeyNavChildren();
+
+		this.inherited(arguments);
+	}
+}
+);
+
+// For back-compat, remove for 2.0
+
+
+}
+
+if(!dojo._hasResource["dijit._HasDropDown"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._HasDropDown"] = true;
+dojo.provide("dijit._HasDropDown");
+
+
+
+
+dojo.declare("dijit._HasDropDown",
+	null,
+	{
+		// summary:
+		//		Mixin for widgets that need drop down ability.
+
+		// _buttonNode: [protected] DomNode
+		//		The button/icon/node to click to display the drop down.
+		//		Can be set via a dojoAttachPoint assignment.
+		//		If missing, then either focusNode or domNode (if focusNode is also missing) will be used.
+		_buttonNode: null,
+
+		// _arrowWrapperNode: [protected] DomNode
+		//		Will set CSS class dijitUpArrow, dijitDownArrow, dijitRightArrow etc. on this node depending
+		//		on where the drop down is set to be positioned.
+		//		Can be set via a dojoAttachPoint assignment.
+		//		If missing, then _buttonNode will be used.
+		_arrowWrapperNode: null,
+
+		// _popupStateNode: [protected] DomNode
+		//		The node to set the popupActive class on.
+		//		Can be set via a dojoAttachPoint assignment.
+		//		If missing, then focusNode or _buttonNode (if focusNode is missing) will be used.
+		_popupStateNode: null,
+
+		// _aroundNode: [protected] DomNode
+		//		The node to display the popup around.
+		//		Can be set via a dojoAttachPoint assignment.
+		//		If missing, then domNode will be used.
+		_aroundNode: null,
+
+		// dropDown: [protected] Widget
+		//		The widget to display as a popup.  This widget *must* be
+		//		defined before the startup function is called.
+		dropDown: null,
+
+		// autoWidth: [protected] Boolean
+		//		Set to true to make the drop down at least as wide as this
+		//		widget.  Set to false if the drop down should just be its
+		//		default width
+		autoWidth: true,
+
+		// forceWidth: [protected] Boolean
+		//		Set to true to make the drop down exactly as wide as this
+		//		widget.  Overrides autoWidth.
+		forceWidth: false,
+
+		// maxHeight: [protected] Integer
+		//		The max height for our dropdown.  Set to 0 for no max height.
+		//		any dropdown taller than this will have scrollbars
+		maxHeight: 0,
+
+		// dropDownPosition: [const] String[]
+		//		This variable controls the position of the drop down.
+		//		It's an array of strings with the following values:
+		//
+		//			* before: places drop down to the left of the target node/widget, or to the right in
+		//			  the case of RTL scripts like Hebrew and Arabic
+		//			* after: places drop down to the right of the target node/widget, or to the left in
+		//			  the case of RTL scripts like Hebrew and Arabic
+		//			* above: drop down goes above target node
+		//			* below: drop down goes below target node
+		//
+		//		The list is positions is tried, in order, until a position is found where the drop down fits
+		//		within the viewport.
+		//
+		dropDownPosition: ["below","above"],
+
+		// _stopClickEvents: Boolean
+		//		When set to false, the click events will not be stopped, in
+		//		case you want to use them in your subwidget
+		_stopClickEvents: true,
+
+		_onDropDownMouseDown: function(/*Event*/ e){
+			// summary:
+			//		Callback when the user mousedown's on the arrow icon
+
+			if(this.disabled || this.readOnly){ return; }
+
+			this._docHandler = this.connect(dojo.doc, "onmouseup", "_onDropDownMouseUp");
+
+			this.toggleDropDown();
+		},
+
+		_onDropDownMouseUp: function(/*Event?*/ e){
+			// summary:
+			//		Callback when the user lifts their mouse after mouse down on the arrow icon.
+			//		If the drop is a simple menu and the mouse is over the menu, we execute it, otherwise, we focus our
+			//		dropDown node.  If the event is missing, then we are not
+			//		a mouseup event.
+			//
+			//		This is useful for the common mouse movement pattern
+			//		with native browser <select> nodes:
+			//			1. mouse down on the select node (probably on the arrow)
+			//			2. move mouse to a menu item while holding down the mouse button
+			//			3. mouse up.  this selects the menu item as though the user had clicked it.
+			if(e && this._docHandler){
+				this.disconnect(this._docHandler);
+			}
+			var dropDown = this.dropDown, overMenu = false;
+
+			if(e && this._opened){
+				// This code deals with the corner-case when the drop down covers the original widget,
+				// because it's so large.  In that case mouse-up shouldn't select a value from the menu.
+				// Find out if our target is somewhere in our dropdown widget,
+				// but not over our _buttonNode (the clickable node)
+				var c = dojo.position(this._buttonNode, true);
+				if(!(e.pageX >= c.x && e.pageX <= c.x + c.w) ||
+					!(e.pageY >= c.y && e.pageY <= c.y + c.h)){
+					var t = e.target;
+					while(t && !overMenu){
+						if(dojo.hasClass(t, "dijitPopup")){
+							overMenu = true;
+						}else{
+							t = t.parentNode;
+						}
+					}
+					if(overMenu){
+						t = e.target;
+						if(dropDown.onItemClick){
+							var menuItem;
+							while(t && !(menuItem = dijit.byNode(t))){
+								t = t.parentNode;
+							}
+							if(menuItem && menuItem.onClick && menuItem.getParent){
+								menuItem.getParent().onItemClick(menuItem, e);
+							}
+						}
+						return;
+					}
+				}
+			}
+			if(this._opened && dropDown.focus){
+				// Focus the dropdown widget - do it on a delay so that we
+				// don't steal our own focus.
+				window.setTimeout(dojo.hitch(dropDown, "focus"), 1);
+			}
+		},
+
+		_onDropDownClick: function(/*Event*/ e){
+			// the drop down was already opened on mousedown/keydown; just need to call stopEvent()
+			if(this._stopClickEvents){
+				dojo.stopEvent(e);
+			}			
+		},
+
+		_setupDropdown: function(){
+			// summary:
+			//		set up nodes and connect our mouse and keypress events
+			this._buttonNode = this._buttonNode || this.focusNode || this.domNode;
+			this._popupStateNode = this._popupStateNode || this.focusNode || this._buttonNode;
+			this._aroundNode = this._aroundNode || this.domNode;
+			this.connect(this._buttonNode, "onmousedown", "_onDropDownMouseDown");
+			this.connect(this._buttonNode, "onclick", "_onDropDownClick");
+			this.connect(this._buttonNode, "onkeydown", "_onDropDownKeydown");
+			this.connect(this._buttonNode, "onkeyup", "_onKey");
+
+			// If we have a _setStateClass function (which happens when
+			// we are a form widget), then we need to connect our open/close
+			// functions to it
+			if(this._setStateClass){
+				this.connect(this, "openDropDown", "_setStateClass");
+				this.connect(this, "closeDropDown", "_setStateClass");
+			}
+
+			// Add a class to the "dijitDownArrowButton" type class to _buttonNode so theme can set direction of arrow
+			// based on where drop down will normally appear
+			var defaultPos = {
+					"after" : this.isLeftToRight() ? "Right" : "Left",
+					"before" : this.isLeftToRight() ? "Left" : "Right",
+					"above" : "Up",
+					"below" : "Down",
+					"left" : "Left",
+					"right" : "Right"
+			}[this.dropDownPosition[0]] || this.dropDownPosition[0] || "Down";
+			dojo.addClass(this._arrowWrapperNode || this._buttonNode, "dijit" + defaultPos + "ArrowButton");
+		},
+
+		postCreate: function(){
+			this._setupDropdown();
+			this.inherited(arguments);
+		},
+
+		destroyDescendants: function(){
+			if(this.dropDown){
+				// Destroy the drop down, unless it's already been destroyed.  This can happen because
+				// the drop down is a direct child of <body> even though it's logically my child.
+				if(!this.dropDown._destroyed){
+					this.dropDown.destroyRecursive();
+				}
+				delete this.dropDown;
+			}
+			this.inherited(arguments);
+		},
+
+		_onDropDownKeydown: function(/*Event*/ e){
+			if(e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE){
+				e.preventDefault();	// stop IE screen jump
+			}
+		},
+
+		_onKey: function(/*Event*/ e){
+			// summary:
+			//		Callback when the user presses a key while focused on the button node
+
+			if(this.disabled || this.readOnly){ return; }
+			var d = this.dropDown;
+			if(d && this._opened && d.handleKey){
+				if(d.handleKey(e) === false){ return; }
+			}
+			if(d && this._opened && e.keyCode == dojo.keys.ESCAPE){
+				this.toggleDropDown();
+			}else if(d && !this._opened && 
+					(e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE)){
+				this.toggleDropDown();
+				if(d.focus){
+					setTimeout(dojo.hitch(d, "focus"), 1);
+				}
+			}
+		},
+
+		_onBlur: function(){
+			// summary:
+			//		Called magically when focus has shifted away from this widget and it's dropdown
+
+			this.closeDropDown();
+			// don't focus on button.  the user has explicitly focused on something else.
+			this.inherited(arguments);
+		},
+
+		isLoaded: function(){
+			// summary:
+			//		Returns whether or not the dropdown is loaded.  This can
+			//		be overridden in order to force a call to loadDropDown().
+			// tags:
+			//		protected
+
+			return true;
+		},
+
+		loadDropDown: function(/* Function */ loadCallback){
+			// summary:
+			//		Loads the data for the dropdown, and at some point, calls
+			//		the given callback
+			// tags:
+			//		protected
+
+			loadCallback();
+		},
+
+		toggleDropDown: function(){
+			// summary:
+			//		Toggle the drop-down widget; if it is up, close it, if not, open it
+			// tags:
+			//		protected
+
+			if(this.disabled || this.readOnly){ return; }
+			this.focus();
+			var dropDown = this.dropDown;
+			if(!dropDown){ return; }
+			if(!this._opened){
+				// If we aren't loaded, load it first so there isn't a flicker
+				if(!this.isLoaded()){
+					this.loadDropDown(dojo.hitch(this, "openDropDown"));
+					return;
+				}else{
+					this.openDropDown();
+				}
+			}else{
+				this.closeDropDown();
+			}
+		},
+
+		openDropDown: function(){
+			// summary:
+			//		Opens the dropdown for this widget - it returns the
+			//		return value of dijit.popup.open
+			// tags:
+			//		protected
+
+			var dropDown = this.dropDown;
+			var ddNode = dropDown.domNode;
+			var self = this;
+
+			// Prepare our popup's height and honor maxHeight if it exists.
+
+			// TODO: isn't maxHeight dependent on the return value from dijit.popup.open(),
+			// ie, dependent on how much space is available (BK)
+
+			if(!this._preparedNode){
+				dijit.popup.moveOffScreen(ddNode);
+				this._preparedNode = true;			
+				// Check if we have explicitly set width and height on the dropdown widget dom node
+				if(ddNode.style.width){
+					this._explicitDDWidth = true;
+				}
+				if(ddNode.style.height){
+					this._explicitDDHeight = true;
+				}
+			}
+
+			// Code for resizing dropdown (height limitation, or increasing width to match my width)
+			if(this.maxHeight || this.forceWidth || this.autoWidth){
+				var myStyle = {
+					display: "",
+					visibility: "hidden"
+				};
+				if(!this._explicitDDWidth){
+					myStyle.width = "";
+				}
+				if(!this._explicitDDHeight){
+					myStyle.height = "";
+				}
+				dojo.style(ddNode, myStyle);
+				
+				// Get size of drop down, and determine if vertical scroll bar needed
+				var mb = dojo.marginBox(ddNode);
+				var overHeight = (this.maxHeight && mb.h > this.maxHeight);
+				dojo.style(ddNode, {
+					overflowX: "hidden",
+					overflowY: overHeight ? "auto" : "hidden"
+				});
+				if(overHeight){
+					mb.h = this.maxHeight;
+					if("w" in mb){
+						mb.w += 16;	// room for vertical scrollbar
+					}
+				}else{
+					delete mb.h;
+				}
+				delete mb.t;
+				delete mb.l;
+
+				// Adjust dropdown width to match or be larger than my width
+				if(this.forceWidth){
+					mb.w = this.domNode.offsetWidth;
+				}else if(this.autoWidth){
+					mb.w = Math.max(mb.w, this.domNode.offsetWidth);
+				}else{
+					delete mb.w;
+				}
+				
+				// And finally, resize the dropdown to calculated height and width
+				if(dojo.isFunction(dropDown.resize)){
+					dropDown.resize(mb);
+				}else{
+					dojo.marginBox(ddNode, mb);
+				}
+			}
+
+			var retVal = dijit.popup.open({
+				parent: this,
+				popup: dropDown,
+				around: this._aroundNode,
+				orient: dijit.getPopupAroundAlignment((this.dropDownPosition && this.dropDownPosition.length) ? this.dropDownPosition : ["below"],this.isLeftToRight()),
+				onExecute: function(){
+					self.closeDropDown(true);
+				},
+				onCancel: function(){
+					self.closeDropDown(true);
+				},
+				onClose: function(){
+					dojo.attr(self._popupStateNode, "popupActive", false);
+					dojo.removeClass(self._popupStateNode, "dijitHasDropDownOpen");
+					self._opened = false;
+					self.state = "";
+				}
+			});
+			dojo.attr(this._popupStateNode, "popupActive", "true");
+			dojo.addClass(self._popupStateNode, "dijitHasDropDownOpen");
+			this._opened=true;
+			this.state="Opened";
+			// TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown
+			return retVal;
+		},
+
+		closeDropDown: function(/*Boolean*/ focus){
+			// summary:
+			//		Closes the drop down on this widget
+			// tags:
+			//		protected
+
+			if(this._opened){
+				if(focus){ this.focus(); }
+				dijit.popup.close(this.dropDown);
+				this._opened = false;
+				this.state = "";
+			}
+		}
+
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form.Button"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Button"] = true;
+dojo.provide("dijit.form.Button");
+
+
+
+
+
+dojo.declare("dijit.form.Button",
+	dijit.form._FormWidget,
+	{
+	// summary:
+	//		Basically the same thing as a normal HTML button, but with special styling.
+	// description:
+	//		Buttons can display a label, an icon, or both.
+	//		A label should always be specified (through innerHTML) or the label
+	//		attribute.  It can be hidden via showLabel=false.
+	// example:
+	// |	<button dojoType="dijit.form.Button" onClick="...">Hello world</button>
+	//
+	// example:
+	// |	var button1 = new dijit.form.Button({label: "hello world", onClick: foo});
+	// |	dojo.body().appendChild(button1.domNode);
+
+	// label: HTML String
+	//		Text to display in button.
+	//		If the label is hidden (showLabel=false) then and no title has
+	//		been specified, then label is also set as title attribute of icon.
+	label: "",
+
+	// showLabel: Boolean
+	//		Set this to true to hide the label text and display only the icon.
+	//		(If showLabel=false then iconClass must be specified.)
+	//		Especially useful for toolbars.
+	//		If showLabel=true, the label will become the title (a.k.a. tooltip/hint) of the icon.
+	//
+	//		The exception case is for computers in high-contrast mode, where the label
+	//		will still be displayed, since the icon doesn't appear.
+	showLabel: true,
+
+	// iconClass: String
+	//		Class to apply to DOMNode in button to make it display an icon
+	iconClass: "",
+
+	// type: String
+	//		Defines the type of button.  "button", "submit", or "reset".
+	type: "button",
+
+	baseClass: "dijitButton",
+
+	templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
+
+	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+		value: "valueNode",
+		iconClass: { node: "iconNode", type: "class" }
+	}),
+
+
+	_onClick: function(/*Event*/ e){
+		// summary:
+		//		Internal function to handle click actions
+		if(this.disabled){
+			return false;
+		}
+		this._clicked(); // widget click actions
+		return this.onClick(e); // user click actions
+	},
+
+	_onButtonClick: function(/*Event*/ e){
+		// summary:
+		//		Handler when the user activates the button portion.
+		if(this._onClick(e) === false){ // returning nothing is same as true
+			e.preventDefault(); // needed for checkbox
+		}else if(this.type == "submit" && !(this.valueNode||this.focusNode).form){ // see if a nonform widget needs to be signalled
+			for(var node=this.domNode; node.parentNode/*#5935*/; node=node.parentNode){
+				var widget=dijit.byNode(node);
+				if(widget && typeof widget._onSubmit == "function"){
+					widget._onSubmit(e);
+					break;
+				}
+			}
+		}else if(this.valueNode){
+			this.valueNode.click();
+			e.preventDefault(); // cancel BUTTON click and continue with hidden INPUT click
+		}
+	},
+
+	_fillContent: function(/*DomNode*/ source){
+		// Overrides _Templated._fillContent().
+		// If button label is specified as srcNodeRef.innerHTML rather than
+		// this.params.label, handle it here.
+		if(source && (!this.params || !("label" in this.params))){
+			this.set('label', source.innerHTML);
+		}
+	},
+
+	postCreate: function(){
+		dojo.setSelectable(this.focusNode, false);
+		this.inherited(arguments);
+	},
+
+	_setShowLabelAttr: function(val){
+		if(this.containerNode){
+			dojo.toggleClass(this.containerNode, "dijitDisplayNone", !val);
+		}
+		this.showLabel = val;
+	},
+
+	onClick: function(/*Event*/ e){
+		// summary:
+		//		Callback for when button is clicked.
+		//		If type="submit", return true to perform submit, or false to cancel it.
+		// type:
+		//		callback
+		return true;		// Boolean
+	},
+
+	_clicked: function(/*Event*/ e){
+		// summary:
+		//		Internal overridable function for when the button is clicked
+	},
+
+	setLabel: function(/*String*/ content){
+		// summary:
+		//		Deprecated.  Use set('label', ...) instead.
+		dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.", "", "2.0");
+		this.set("label", content);
+	},
+
+	_setLabelAttr: function(/*String*/ content){
+		// summary:
+		//		Hook for attr('label', ...) to work.
+		// description:
+		//		Set the label (text) of the button; takes an HTML string.
+		this.containerNode.innerHTML = this.label = content;
+		if(this.showLabel == false && !this.params.title){
+			this.titleNode.title = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
+		}
+	}
+});
+
+
+dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container, dijit._HasDropDown], {
+	// summary:
+	//		A button with a drop down
+	//
+	// example:
+	// |	<button dojoType="dijit.form.DropDownButton" label="Hello world">
+	// |		<div dojotype="dijit.Menu">...</div>
+	// |	</button>
+	//
+	// example:
+	// |	var button1 = new dijit.form.DropDownButton({ label: "hi", dropDown: new dijit.Menu(...) });
+	// |	dojo.body().appendChild(button1);
+	//
+
+	baseClass : "dijitDropDownButton",
+
+	templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),
+
+	_fillContent: function(){
+		// Overrides Button._fillContent().
+		//
+		// My inner HTML contains both the button contents and a drop down widget, like
+		// <DropDownButton>  <span>push me</span>  <Menu> ... </Menu> </DropDownButton>
+		// The first node is assumed to be the button content. The widget is the popup.
+
+		if(this.srcNodeRef){ // programatically created buttons might not define srcNodeRef
+			//FIXME: figure out how to filter out the widget and use all remaining nodes as button
+			//	content, not just nodes[0]
+			var nodes = dojo.query("*", this.srcNodeRef);
+			dijit.form.DropDownButton.superclass._fillContent.call(this, nodes[0]);
+
+			// save pointer to srcNode so we can grab the drop down widget after it's instantiated
+			this.dropDownContainer = this.srcNodeRef;
+		}
+	},
+
+	startup: function(){
+		if(this._started){ return; }
+
+		// the child widget from srcNodeRef is the dropdown widget.  Insert it in the page DOM,
+		// make it invisible, and store a reference to pass to the popup code.
+		if(!this.dropDown){
+			var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
+			this.dropDown = dijit.byNode(dropDownNode);
+			delete this.dropDownContainer;
+		}
+		dijit.popup.moveOffScreen(this.dropDown.domNode);
+
+		this.inherited(arguments);
+	},
+
+	isLoaded: function(){
+		// Returns whether or not we are loaded - if our dropdown has an href,
+		// then we want to check that.
+		var dropDown = this.dropDown;
+		return (!dropDown.href || dropDown.isLoaded);
+	},
+
+	loadDropDown: function(){
+		// Loads our dropdown
+		var dropDown = this.dropDown;
+		if(!dropDown){ return; }
+		if(!this.isLoaded()){
+			var handler = dojo.connect(dropDown, "onLoad", this, function(){
+				dojo.disconnect(handler);
+				this.openDropDown();
+			});
+			dropDown.refresh();
+		}else{
+			this.openDropDown();
+		}
+	},
+
+	isFocusable: function(){
+		// Overridden so that focus is handled by the _HasDropDown mixin, not by
+		// the _FormWidget mixin.
+		return this.inherited(arguments) && !this._mouseDown;
+	}
+});
+
+dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
+	// summary:
+	//		A combination button and drop-down button.
+	//		Users can click one side to "press" the button, or click an arrow
+	//		icon to display the drop down.
+	//
+	// example:
+	// |	<button dojoType="dijit.form.ComboButton" onClick="...">
+	// |		<span>Hello world</span>
+	// |		<div dojoType="dijit.Menu">...</div>
+	// |	</button>
+	//
+	// example:
+	// |	var button1 = new dijit.form.ComboButton({label: "hello world", onClick: foo, dropDown: "myMenu"});
+	// |	dojo.body().appendChild(button1.domNode);
+	//
+
+	templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),
+
+	attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
+		id: "",
+		tabIndex: ["focusNode", "titleNode"],
+		title: "titleNode"
+	}),
+
+	// optionsTitle: String
+	//		Text that describes the options menu (accessibility)
+	optionsTitle: "",
+
+	baseClass: "dijitComboButton",
+
+	// Set classes like dijitButtonContentsHover or dijitArrowButtonActive depending on
+	// mouse action over specified node
+	cssStateNodes: {
+		"buttonNode": "dijitButtonNode",
+		"titleNode": "dijitButtonContents",
+		"_popupStateNode": "dijitDownArrowButton"
+	},
+
+	_focusedNode: null,
+
+	_onButtonKeyPress: function(/*Event*/ evt){
+		// summary:
+		//		Handler for right arrow key when focus is on left part of button
+		if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "RIGHT_ARROW" : "LEFT_ARROW"]){
+			dijit.focus(this._popupStateNode);
+			dojo.stopEvent(evt);
+		}
+	},
+
+	_onArrowKeyPress: function(/*Event*/ evt){
+		// summary:
+		//		Handler for left arrow key when focus is on right part of button
+		if(evt.charOrCode == dojo.keys[this.isLeftToRight() ? "LEFT_ARROW" : "RIGHT_ARROW"]){
+			dijit.focus(this.titleNode);
+			dojo.stopEvent(evt);
+		}
+	},
+	
+	focus: function(/*String*/ position){
+		// summary:
+		//		Focuses this widget to according to position, if specified,
+		//		otherwise on arrow node
+		// position:
+		//		"start" or "end"
+		
+		dijit.focus(position == "start" ? this.titleNode : this._popupStateNode);
+	}
+});
+
+dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
+	// summary:
+	//		A button that can be in two states (checked or not).
+	//		Can be base class for things like tabs or checkbox or radio buttons
+
+	baseClass: "dijitToggleButton",
+
+	// checked: Boolean
+	//		Corresponds to the native HTML <input> element's attribute.
+	//		In markup, specified as "checked='checked'" or just "checked".
+	//		True if the button is depressed, or the checkbox is checked,
+	//		or the radio button is selected, etc.
+	checked: false,
+
+	attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), {
+		checked:"focusNode"
+	}),
+
+	_clicked: function(/*Event*/ evt){
+		this.set('checked', !this.checked);
+	},
+
+	_setCheckedAttr: function(/*Boolean*/ value, /* Boolean? */ priorityChange){
+		this.checked = value;
+		dojo.attr(this.focusNode || this.domNode, "checked", value);
+		dijit.setWaiState(this.focusNode || this.domNode, "pressed", value);
+		this._handleOnChange(value, priorityChange);
+	},
+
+	setChecked: function(/*Boolean*/ checked){
+		// summary:
+		//		Deprecated.   Use set('checked', true/false) instead.
+		dojo.deprecated("setChecked("+checked+") is deprecated. Use set('checked',"+checked+") instead.", "", "2.0");
+		this.set('checked', checked);
+	},
+
+	reset: function(){
+		// summary:
+		//		Reset the widget's value to what it was at initialization time
+
+		this._hasBeenBlurred = false;
+
+		// set checked state to original setting
+		this.set('checked', this.params.checked || false);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._editor._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor._Plugin"] = true;
+dojo.provide("dijit._editor._Plugin");
+
+
+
+dojo.declare("dijit._editor._Plugin", null, {
+	// summary
+	//		Base class for a "plugin" to the editor, which is usually
+	//		a single button on the Toolbar and some associated code
+
+	constructor: function(/*Object?*/args, /*DomNode?*/node){
+		this.params = args || {};
+		dojo.mixin(this, this.params);
+		this._connects=[];
+	},
+
+	// editor: [const] dijit.Editor
+	//		Points to the parent editor
+	editor: null,
+
+	// iconClassPrefix: [const] String
+	//		The CSS class name for the button node is formed from `iconClassPrefix` and `command`
+	iconClassPrefix: "dijitEditorIcon",
+
+	// button: dijit._Widget?
+	//		Pointer to `dijit.form.Button` or other widget (ex: `dijit.form.FilteringSelect`)
+	//		that is added to the toolbar to control this plugin.
+	//		If not specified, will be created on initialization according to `buttonClass`
+	button: null,
+
+	// command: String
+	//		String like "insertUnorderedList", "outdent", "justifyCenter", etc. that represents an editor command.
+	//		Passed to editor.execCommand() if `useDefaultCommand` is true.
+	command: "",
+
+	// useDefaultCommand: Boolean
+	//		If true, this plugin executes by calling Editor.execCommand() with the argument specified in `command`.
+	useDefaultCommand: true,
+
+	// buttonClass: Widget Class
+	//		Class of widget (ex: dijit.form.Button or dijit.form.FilteringSelect)
+	//		that is added to the toolbar to control this plugin.
+	//		This is used to instantiate the button, unless `button` itself is specified directly.
+	buttonClass: dijit.form.Button,
+
+	getLabel: function(/*String*/key){
+		// summary:
+		//		Returns the label to use for the button
+		// tags:
+		//		private
+		return this.editor.commands[key];		// String
+	},
+
+	_initButton: function(){
+		// summary:
+		//		Initialize the button or other widget that will control this plugin.
+		//		This code only works for plugins controlling built-in commands in the editor.
+		// tags:
+		//		protected extension
+		if(this.command.length){
+			var label = this.getLabel(this.command),
+				editor = this.editor,
+				className = this.iconClassPrefix+" "+this.iconClassPrefix + this.command.charAt(0).toUpperCase() + this.command.substr(1);
+			if(!this.button){
+				var props = dojo.mixin({
+					label: label,
+					dir: editor.dir,
+					lang: editor.lang,
+					showLabel: false,
+					iconClass: className,
+					dropDown: this.dropDown,
+					tabIndex: "-1"
+				}, this.params || {});
+				this.button = new this.buttonClass(props);
+			}
+		}
+	},
+
+	destroy: function(){
+		// summary:
+		//		Destroy this plugin
+
+		dojo.forEach(this._connects, dojo.disconnect);
+		if(this.dropDown){
+			this.dropDown.destroyRecursive();
+		}
+	},
+
+	connect: function(o, f, tf){
+		// summary:
+		//		Make a dojo.connect() that is automatically disconnected when this plugin is destroyed.
+		//		Similar to `dijit._Widget.connect`.
+		// tags:
+		//		protected
+		this._connects.push(dojo.connect(o, f, this, tf));
+	},
+
+	updateState: function(){
+		// summary:
+		//		Change state of the plugin to respond to events in the editor.
+		// description:
+		//		This is called on meaningful events in the editor, such as change of selection
+		//		or caret position (but not simple typing of alphanumeric keys).   It gives the
+		//		plugin a chance to update the CSS of its button.
+		//
+		//		For example, the "bold" plugin will highlight/unhighlight the bold button depending on whether the
+		//		characters next to the caret are bold or not.
+		//
+		//		Only makes sense when `useDefaultCommand` is true, as it calls Editor.queryCommandEnabled(`command`).
+		var e = this.editor,
+			c = this.command,
+			checked, enabled;
+		if(!e || !e.isLoaded || !c.length){ return; }
+		if(this.button){
+			try{
+				enabled = e.queryCommandEnabled(c);
+				if(this.enabled !== enabled){
+					this.enabled = enabled;
+					this.button.set('disabled', !enabled);
+				}
+				if(typeof this.button.checked == 'boolean'){
+					checked = e.queryCommandState(c);
+					if(this.checked !== checked){
+						this.checked = checked;
+						this.button.set('checked', e.queryCommandState(c));
+					}
+				}
+			}catch(e){
+				console.log(e); // FIXME: we shouldn't have debug statements in our code.  Log as an error?
+			}
+		}
+	},
+
+	setEditor: function(/*dijit.Editor*/ editor){
+		// summary:
+		//		Tell the plugin which Editor it is associated with.
+
+		// TODO: refactor code to just pass editor to constructor.
+
+		// FIXME: detach from previous editor!!
+		this.editor = editor;
+
+		// FIXME: prevent creating this if we don't need to (i.e., editor can't handle our command)
+		this._initButton();
+
+		// Processing for buttons that execute by calling editor.execCommand()
+		if(this.button && this.useDefaultCommand){
+			if(this.editor.queryCommandAvailable(this.command)){
+				this.connect(this.button, "onClick",
+					dojo.hitch(this.editor, "execCommand", this.command, this.commandArg)
+				);
+			}else{
+				// hide button because editor doesn't support command (due to browser limitations)
+				this.button.domNode.style.display = "none";			
+			}
+		}
+
+		this.connect(this.editor, "onNormalizedDisplayChanged", "updateState");
+	},
+
+	setToolbar: function(/*dijit.Toolbar*/ toolbar){
+		// summary:
+		//		Tell the plugin to add it's controller widget (often a button)
+		//		to the toolbar.  Does nothing if there is no controller widget.
+
+		// TODO: refactor code to just pass toolbar to constructor.
+
+		if(this.button){
+			toolbar.addChild(this.button);
+		}
+		// console.debug("adding", this.button, "to:", toolbar);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"] = true;
+dojo.provide("dijit._editor.plugins.EnterKeyHandling");
+
+
+
+dojo.declare("dijit._editor.plugins.EnterKeyHandling", dijit._editor._Plugin, {
+	// summary:
+	//		This plugin tries to make all browsers behave consistently w.r.t
+	//		displaying paragraphs, specifically dealing with when the user presses
+	//		the ENTER key.
+	//
+	//		It deals mainly with how the text appears on the screen (specifically
+	//		address the double-spaced line problem on IE), but also has some code
+	//		to normalize what attr('value') returns.
+	//
+	// description:
+	//		This plugin has three modes:
+	//
+	//			* blockModeForEnter=BR
+	//			* blockModeForEnter=DIV
+	//			* blockModeForEnter=P
+	//
+	//		In blockModeForEnter=P, the ENTER key semantically means "start a new
+	//		paragraph", whereas shift-ENTER means  "new line in the current paragraph".
+	//		For example:
+	//
+	//		|	first paragraph <shift-ENTER>
+	//		|	second line of first paragraph <ENTER>
+	//		|
+	//		|	second paragraph
+	//
+	//		In the other two modes, the ENTER key means to go to a new line in the
+	//		current paragraph, and users [visually] create a new paragraph by pressing ENTER twice.
+	//		For example, if the user enters text into an editor like this:
+	//
+	//		|		one <ENTER>
+	//		|		two <ENTER>
+	//		|		three <ENTER>
+	//		|		<ENTER>
+	//		|		four <ENTER>
+	//		|		five <ENTER>
+	//		|		six <ENTER>
+	//
+	//		It will appear on the screen as two paragraphs of three lines each.
+	//
+	//		blockNodeForEnter=BR
+	//		--------------------
+	//		On IE, typing the above keystrokes in the editor will internally produce DOM of:
+	//
+	//		|		<p>one</p>
+	//		|		<p>two</p>
+	//		|		<p>three</p>
+	//		|		<p></p>
+	//		|		<p>four</p>
+	//		|		<p>five</p>
+	//		|		<p>six</p>
+	//
+	//		However, blockNodeForEnter=BR makes the Editor on IE display like other browsers, by
+	//		changing the CSS for the <p> node to not have top/bottom margins,
+	//		thus eliminating the double-spaced appearance.
+	//
+	//		Also, attr('value') when used w/blockNodeForEnter=br on IE will return:
+	//
+	//		|	<p> one <br> two <br> three </p>
+	//		|	<p> four <br> five <br> six </p>
+	//
+	//		This output normalization implemented by a filter when the
+	//		editor writes out it's data, to convert consecutive <p>
+	//		nodes into a single <p> node with internal <br> separators.
+	//
+	//		There's also a pre-filter to mirror the post-filter.
+	//		It converts a single <p> with <br> line breaks
+	//		into separate <p> nodes, and creates empty <p> nodes for spacing
+	//		between paragraphs.
+	//
+	//		On FF typing the above keystrokes will internally generate:
+	//
+	//		|		one <br> two <br> three <br> <br> four <br> five <br> six <br>
+	//
+	//		And on Safari it will generate:
+	//
+	//		|		"one"
+	//		|		<div>two</div>
+	//		|		<div>three</div>
+	//		|		<div><br></div>
+	//		|		<div>four</div>
+	//		|		<div>five</div>
+	//		|		<div>six</div>
+	//
+	//		Thus, Safari and FF already look correct although semantically their content is a bit strange.
+	//		On Safari or Firefox blockNodeForEnter=BR uses the builtin editor command "insertBrOnReturn",
+	//		but that doesn't seem to do anything.
+	//		Thus, attr('value') on safari/FF returns the browser-specific HTML listed above,
+	//		rather than the semantically meaningful value that IE returns: <p>one<br>two</p> <p>three<br>four</p>.
+	//
+	//		(Note: originally based on http://bugs.dojotoolkit.org/ticket/2859)
+	//
+	//		blockNodeForEnter=P
+	//		-------------------
+	//		Plugin will monitor keystrokes and update the editor's content on the fly,
+	//		so that the ENTER key will create a new <p> on FF and Safari (it already
+	//		works that way by default on IE).
+	//
+	//		blockNodeForEnter=DIV
+	//		---------------------
+	//		Follows the same code path as blockNodeForEnter=P but inserting a <div>
+	//		on ENTER key.  Although it produces strange internal DOM, like this:
+	//
+	//		|	<div>paragraph one</div>
+	//		|	<div>paragraph one, line 2</div>
+	//		|	<div>&nbsp;</div>
+	//		|	<div>paragraph two</div>
+	//
+	//		it does provide a consistent look on all browsers, and the on-the-fly DOM updating
+	//		can be useful for collaborative editing.
+
+	// blockNodeForEnter: String
+	//		This property decides the behavior of Enter key. It can be either P,
+	//		DIV, BR, or empty (which means disable this feature). Anything else
+	//		will trigger errors.
+	//
+	//		See class description for more details.
+	blockNodeForEnter: 'BR',
+
+	constructor: function(args){
+		if(args){
+			dojo.mixin(this,args);
+		}
+	},
+
+	setEditor: function(editor){
+		// Overrides _Plugin.setEditor().
+		this.editor = editor;
+		if(this.blockNodeForEnter == 'BR'){
+			if(dojo.isIE){
+				editor.contentDomPreFilters.push(dojo.hitch(this, "regularPsToSingleLinePs"));
+				editor.contentDomPostFilters.push(dojo.hitch(this, "singleLinePsToRegularPs"));
+				editor.onLoadDeferred.addCallback(dojo.hitch(this, "_fixNewLineBehaviorForIE"));
+			}else{
+				editor.onLoadDeferred.addCallback(dojo.hitch(this,function(d){
+					try{
+						this.editor.document.execCommand("insertBrOnReturn", false, true);
+					}catch(e){}
+					return d;
+				}));
+			}
+		}else if(this.blockNodeForEnter){
+			// add enter key handler
+			// FIXME: need to port to the new event code!!
+			dojo['require']('dijit._editor.range');
+			var h = dojo.hitch(this,this.handleEnterKey);
+			editor.addKeyHandler(13, 0, 0, h); //enter
+			editor.addKeyHandler(13, 0, 1, h); //shift+enter
+			this.connect(this.editor,'onKeyPressed','onKeyPressed');
+		}
+	},
+	onKeyPressed: function(e){
+		// summary:
+		//		Handler for keypress events.
+		// tags:
+		//		private
+		if(this._checkListLater){
+			if(dojo.withGlobal(this.editor.window, 'isCollapsed', dijit)){
+				var liparent=dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, ['LI']);
+				if(!liparent){
+					// circulate the undo detection code by calling RichText::execCommand directly
+					dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
+					// set the innerHTML of the new block node
+					var block = dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, [this.blockNodeForEnter]);
+					if(block){
+						block.innerHTML=this.bogusHtmlContent;
+						if(dojo.isIE){
+							// move to the start by moving backwards one char
+							var r = this.editor.document.selection.createRange();
+							r.move('character',-1);
+							r.select();
+						}
+					}else{
+						console.error('onKeyPressed: Cannot find the new block node'); // FIXME
+					}
+				}else{
+					if(dojo.isMoz){
+						if(liparent.parentNode.parentNode.nodeName == 'LI'){
+							liparent=liparent.parentNode.parentNode;
+						}
+					}
+					var fc=liparent.firstChild;
+					if(fc && fc.nodeType == 1 && (fc.nodeName == 'UL' || fc.nodeName == 'OL')){
+						liparent.insertBefore(fc.ownerDocument.createTextNode('\xA0'),fc);
+						var newrange = dijit.range.create(this.editor.window);
+						newrange.setStart(liparent.firstChild,0);
+						var selection = dijit.range.getSelection(this.editor.window, true);
+						selection.removeAllRanges();
+						selection.addRange(newrange);
+					}
+				}
+			}
+			this._checkListLater = false;
+		}
+		if(this._pressedEnterInBlock){
+			// the new created is the original current P, so we have previousSibling below
+			if(this._pressedEnterInBlock.previousSibling){
+				this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);
+			}
+			delete this._pressedEnterInBlock;
+		}
+	},
+
+	// bogusHtmlContent: [private] String
+	//		HTML to stick into a new empty block
+	bogusHtmlContent: '&nbsp;',
+
+	// blockNodes: [private] Regex
+	//		Regex for testing if a given tag is a block level (display:block) tag
+	blockNodes: /^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,
+
+	handleEnterKey: function(e){
+		// summary:
+		//		Handler for enter key events when blockModeForEnter is DIV or P.
+		// description:
+		//		Manually handle enter key event to make the behavior consistent across
+		//		all supported browsers. See class description for details.
+		// tags:
+		//		private
+
+		var selection, range, newrange, doc=this.editor.document,br;
+		if(e.shiftKey){		// shift+enter always generates <br>
+			var parent = dojo.withGlobal(this.editor.window, "getParentElement", dijit._editor.selection);
+			var header = dijit.range.getAncestor(parent,this.blockNodes);
+			if(header){
+				if(!e.shiftKey && header.tagName == 'LI'){
+					return true; // let browser handle
+				}
+				selection = dijit.range.getSelection(this.editor.window);
+				range = selection.getRangeAt(0);
+				if(!range.collapsed){
+					range.deleteContents();
+					selection = dijit.range.getSelection(this.editor.window);
+					range = selection.getRangeAt(0);
+				}
+				if(dijit.range.atBeginningOfContainer(header, range.startContainer, range.startOffset)){
+					if(e.shiftKey){
+						br=doc.createElement('br');
+						newrange = dijit.range.create(this.editor.window);
+						header.insertBefore(br,header.firstChild);
+						newrange.setStartBefore(br.nextSibling);
+						selection.removeAllRanges();
+						selection.addRange(newrange);
+					}else{
+						dojo.place(br, header, "before");
+					}
+				}else if(dijit.range.atEndOfContainer(header, range.startContainer, range.startOffset)){
+					newrange = dijit.range.create(this.editor.window);
+					br=doc.createElement('br');
+					if(e.shiftKey){
+						header.appendChild(br);
+						header.appendChild(doc.createTextNode('\xA0'));
+						newrange.setStart(header.lastChild,0);
+					}else{
+						dojo.place(br, header, "after");
+						newrange.setStartAfter(header);
+					}
+
+					selection.removeAllRanges();
+					selection.addRange(newrange);
+				}else{
+					return true; // let browser handle
+				}
+			}else{
+				// don't change this: do not call this.execCommand, as that may have other logic in subclass
+				dijit._editor.RichText.prototype.execCommand.call(this.editor, 'inserthtml', '<br>');
+			}
+			return false;
+		}
+		var _letBrowserHandle = true;
+
+		// first remove selection
+		selection = dijit.range.getSelection(this.editor.window);
+		range = selection.getRangeAt(0);
+		if(!range.collapsed){
+			range.deleteContents();
+			selection = dijit.range.getSelection(this.editor.window);
+			range = selection.getRangeAt(0);
+		}
+
+		var block = dijit.range.getBlockAncestor(range.endContainer, null, this.editor.editNode);
+		var blockNode = block.blockNode;
+
+		// if this is under a LI or the parent of the blockNode is LI, just let browser to handle it
+		if((this._checkListLater = (blockNode && (blockNode.nodeName == 'LI' || blockNode.parentNode.nodeName == 'LI')))){
+			if(dojo.isMoz){
+				// press enter in middle of P may leave a trailing <br/>, let's remove it later
+				this._pressedEnterInBlock = blockNode;
+			}
+			// if this li only contains spaces, set the content to empty so the browser will outdent this item
+			if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(blockNode.innerHTML)){
+				// empty LI node
+				blockNode.innerHTML = '';
+				if(dojo.isWebKit){ // WebKit tosses the range when innerHTML is reset
+					newrange = dijit.range.create(this.editor.window);
+					newrange.setStart(blockNode, 0);
+					selection.removeAllRanges();
+					selection.addRange(newrange);
+				}
+				this._checkListLater = false; // nothing to check since the browser handles outdent
+			}
+			return true;
+		}
+
+		// text node directly under body, let's wrap them in a node
+		if(!block.blockNode || block.blockNode===this.editor.editNode){
+			try{
+				dijit._editor.RichText.prototype.execCommand.call(this.editor, 'formatblock',this.blockNodeForEnter);
+			}catch(e2){ /*squelch FF3 exception bug when editor content is a single BR*/ }
+			// get the newly created block node
+			// FIXME
+			block = {blockNode:dojo.withGlobal(this.editor.window, "getAncestorElement", dijit._editor.selection, [this.blockNodeForEnter]),
+					blockContainer: this.editor.editNode};
+			if(block.blockNode){
+				if(block.blockNode != this.editor.editNode &&
+					(!(block.blockNode.textContent || block.blockNode.innerHTML).replace(/^\s+|\s+$/g, "").length)){
+					this.removeTrailingBr(block.blockNode);
+					return false;
+				}
+			}else{	// we shouldn't be here if formatblock worked
+				block.blockNode = this.editor.editNode;
+			}
+			selection = dijit.range.getSelection(this.editor.window);
+			range = selection.getRangeAt(0);
+		}
+
+		var newblock = doc.createElement(this.blockNodeForEnter);
+		newblock.innerHTML=this.bogusHtmlContent;
+		this.removeTrailingBr(block.blockNode);
+		if(dijit.range.atEndOfContainer(block.blockNode, range.endContainer, range.endOffset)){
+			if(block.blockNode === block.blockContainer){
+				block.blockNode.appendChild(newblock);
+			}else{
+				dojo.place(newblock, block.blockNode, "after");
+			}
+			_letBrowserHandle = false;
+			// lets move caret to the newly created block
+			newrange = dijit.range.create(this.editor.window);
+			newrange.setStart(newblock, 0);
+			selection.removeAllRanges();
+			selection.addRange(newrange);
+			if(this.editor.height){
+				dojo.window.scrollIntoView(newblock);
+			}
+		}else if(dijit.range.atBeginningOfContainer(block.blockNode,
+				range.startContainer, range.startOffset)){
+			dojo.place(newblock, block.blockNode, block.blockNode === block.blockContainer ? "first" : "before");
+			if(newblock.nextSibling && this.editor.height){
+				// position input caret - mostly WebKit needs this
+				newrange = dijit.range.create(this.editor.window);
+				newrange.setStart(newblock.nextSibling, 0);
+				selection.removeAllRanges();
+				selection.addRange(newrange);
+				// browser does not scroll the caret position into view, do it manually
+				dojo.window.scrollIntoView(newblock.nextSibling);
+			}
+			_letBrowserHandle = false;
+		}else{ //press enter in the middle of P/DIV/Whatever/
+			if(block.blockNode === block.blockContainer){
+				block.blockNode.appendChild(newblock);
+			}else{
+				dojo.place(newblock, block.blockNode, "after");
+			}
+			_letBrowserHandle = false;
+
+			// Clone any block level styles.
+			if(block.blockNode.style){
+				if(newblock.style){
+					if(block.blockNode.style.cssText){
+						newblock.style.cssText = block.blockNode.style.cssText;
+					}
+				}
+			}
+			
+			// Okay, we probably have to split.
+			var rs = range.startContainer;
+			if(rs && rs.nodeType == 3){
+				// Text node, we have to split it.
+				var nodeToMove, tNode;
+				var txt = rs.nodeValue;
+				var startNode = doc.createTextNode(txt.substring(0, range.startOffset));
+				var endNode = doc.createTextNode(txt.substring(range.startOffset, txt.length));
+
+				// Place the split, then remove original nodes.
+				dojo.place(startNode, rs, "before");
+				dojo.place(endNode, rs, "after");
+				dojo.destroy(rs);
+
+				// Okay, we split the text.  Now we need to see if we're
+				// parented to the block element we're splitting and if
+				// not, we have to split all the way up.  Ugh.
+				var parentC = startNode.parentNode;
+				while(parentC !== block.blockNode){
+					var tg = parentC.tagName;
+					var newTg = doc.createElement(tg);
+					// Clone over any 'style' data. 
+					if(parentC.style){
+						if(newTg.style){
+							if(parentC.style.cssText){
+								newTg.style.cssText = parentC.style.cssText;
+							}
+						}
+					}
+
+					nodeToMove = endNode;
+					while(nodeToMove){
+						tNode = nodeToMove.nextSibling;
+						newTg.appendChild(nodeToMove);
+						nodeToMove = tNode;
+					}
+					dojo.place(newTg, parentC, "after");
+					startNode = parentC;
+					endNode = newTg;
+					parentC = parentC.parentNode;
+				}
+
+				// Lastly, move the split out tags to the new block.
+				// as they should now be split properly.
+				nodeToMove = endNode;
+				if(nodeToMove.nodeType == 1 || (nodeToMove.nodeType == 3 && nodeToMove.nodeValue)){
+					// Non-blank text and non-text nodes need to clear out that blank space
+					// before moving the contents.
+					newblock.innerHTML = "";
+				}
+				while(nodeToMove){
+					tNode = nodeToMove.nextSibling;
+					newblock.appendChild(nodeToMove);
+					nodeToMove = tNode;
+				}
+			}
+			
+			//lets move caret to the newly created block
+			newrange = dijit.range.create(this.editor.window);
+			newrange.setStart(newblock, 0);
+			selection.removeAllRanges();
+			selection.addRange(newrange);
+			if(this.editor.height){
+				dijit.scrollIntoView(newblock);
+			}
+			if(dojo.isMoz){
+				// press enter in middle of P may leave a trailing <br/>, let's remove it later
+				this._pressedEnterInBlock = block.blockNode;
+			}
+		}
+		return _letBrowserHandle;
+	},
+
+	removeTrailingBr: function(container){
+		// summary:
+		//		If last child of container is a <br>, then remove it.
+		// tags:
+		//		private
+		var para = /P|DIV|LI/i.test(container.tagName) ?
+			container : dijit._editor.selection.getParentOfType(container,['P','DIV','LI']);
+
+		if(!para){ return; }
+		if(para.lastChild){
+			if((para.childNodes.length > 1 && para.lastChild.nodeType == 3 && /^[\s\xAD]*$/.test(para.lastChild.nodeValue)) ||
+				para.lastChild.tagName=='BR'){
+
+				dojo.destroy(para.lastChild);
+			}
+		}
+		if(!para.childNodes.length){
+			para.innerHTML=this.bogusHtmlContent;
+		}
+	},
+	_fixNewLineBehaviorForIE: function(d){
+		// summary:
+		//		Insert CSS so <p> nodes don't have spacing around them,
+		//		thus hiding the fact that ENTER key on IE is creating new
+		//		paragraphs
+
+		// cannot use !important since there may be custom user styling;
+		var doc = this.editor.document;
+		if(doc.__INSERTED_EDITIOR_NEWLINE_CSS === undefined){
+			var style = dojo.create("style", {type: "text/css"}, doc.getElementsByTagName("head")[0]);
+			style.styleSheet.cssText = "p{margin:0;}"; // cannot use !important since there may be custom user styling;
+			this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS = true;
+		}
+		return d;
+	},
+	regularPsToSingleLinePs: function(element, noWhiteSpaceInEmptyP){
+		// summary:
+		//		Converts a <p> node containing <br>'s into multiple <p> nodes.
+		// description:
+		//		See singleLinePsToRegularPs().   This method does the
+		//		opposite thing, and is used as a pre-filter when loading the
+		//		editor, to mirror the effects of the post-filter at end of edit.
+		// tags:
+		//		private
+		function wrapLinesInPs(el){
+		  // move "lines" of top-level text nodes into ps
+			function wrapNodes(nodes){
+				// nodes are assumed to all be siblings
+				var newP = nodes[0].ownerDocument.createElement('p'); // FIXME: not very idiomatic
+				nodes[0].parentNode.insertBefore(newP, nodes[0]);
+				dojo.forEach(nodes, function(node){
+					newP.appendChild(node);
+				});
+			}
+
+			var currentNodeIndex = 0;
+			var nodesInLine = [];
+			var currentNode;
+			while(currentNodeIndex < el.childNodes.length){
+				currentNode = el.childNodes[currentNodeIndex];
+				if( currentNode.nodeType==3 ||	// text node
+					(currentNode.nodeType==1 && currentNode.nodeName!='BR' && dojo.style(currentNode, "display")!="block")
+				){
+					nodesInLine.push(currentNode);
+				}else{
+					// hit line delimiter; process nodesInLine if there are any
+					var nextCurrentNode = currentNode.nextSibling;
+					if(nodesInLine.length){
+						wrapNodes(nodesInLine);
+						currentNodeIndex = (currentNodeIndex+1)-nodesInLine.length;
+						if(currentNode.nodeName=="BR"){
+							dojo.destroy(currentNode);
+						}
+					}
+					nodesInLine = [];
+				}
+				currentNodeIndex++;
+			}
+			if(nodesInLine.length){ wrapNodes(nodesInLine); }
+		}
+
+		function splitP(el){
+			// split a paragraph into seperate paragraphs at BRs
+			var currentNode = null;
+			var trailingNodes = [];
+			var lastNodeIndex = el.childNodes.length-1;
+			for(var i=lastNodeIndex; i>=0; i--){
+				currentNode = el.childNodes[i];
+				if(currentNode.nodeName=="BR"){
+					var newP = currentNode.ownerDocument.createElement('p');
+					dojo.place(newP, el, "after");
+					if(trailingNodes.length==0 && i != lastNodeIndex){
+						newP.innerHTML = "&nbsp;"
+					}
+					dojo.forEach(trailingNodes, function(node){
+						newP.appendChild(node);
+					});
+					dojo.destroy(currentNode);
+					trailingNodes = [];
+				}else{
+					trailingNodes.unshift(currentNode);
+				}
+			}
+		}
+
+		var pList = [];
+		var ps = element.getElementsByTagName('p');
+		dojo.forEach(ps, function(p){ pList.push(p); });
+		dojo.forEach(pList, function(p){
+			var prevSib = p.previousSibling;
+			if(	(prevSib) && (prevSib.nodeType == 1) && 
+				(prevSib.nodeName == 'P' || dojo.style(prevSib, 'display') != 'block')
+			){
+				var newP = p.parentNode.insertBefore(this.document.createElement('p'), p);
+				// this is essential to prevent IE from losing the P.
+				// if it's going to be innerHTML'd later we need
+				// to add the &nbsp; to _really_ force the issue
+				newP.innerHTML = noWhiteSpaceInEmptyP ? "" : "&nbsp;";
+			}
+			splitP(p);
+		},this.editor);
+		wrapLinesInPs(element);
+		return element;
+	},
+
+	singleLinePsToRegularPs: function(element){
+		// summary:
+		//		Called as post-filter.
+		//		Apparently collapses adjacent <p> nodes into a single <p>
+		//		nodes with <br> separating each line.
+		//
+		// example:
+		//		Given this input:
+		//	|	<p>line 1</p>
+		//	|	<p>line 2</p>
+		//	|	<ol>
+		//	|		<li>item 1
+		//	|		<li>item 2
+		//	|	</ol>
+		//	|	<p>line 3</p>
+		//	|	<p>line 4</p>
+		//
+		//		Will convert to:
+		//	|	<p>line 1<br>line 2</p>
+		//	|	<ol>
+		//	|		<li>item 1
+		//	|		<li>item 2
+		//	|	</ol>
+		//	|	<p>line 3<br>line 4</p>
+		//
+		//		Not sure why this situation would even come up after the pre-filter and
+		//		the enter-key-handling code.
+		//
+		// tags:
+		//		private
+
+		function getParagraphParents(node){
+			// summary:
+			//		Used to get list of all nodes that contain paragraphs.
+			//		Seems like that would just be the very top node itself, but apparently not.
+			var ps = node.getElementsByTagName('p');
+			var parents = [];
+			for(var i=0; i<ps.length; i++){
+				var p = ps[i];
+				var knownParent = false;
+				for(var k=0; k < parents.length; k++){
+					if(parents[k] === p.parentNode){
+						knownParent = true;
+						break;
+					}
+				}
+				if(!knownParent){
+					parents.push(p.parentNode);
+				}
+			}
+			return parents;
+		}
+
+		function isParagraphDelimiter(node){
+			return (!node.childNodes.length || node.innerHTML=="&nbsp;");
+		}
+
+		var paragraphContainers = getParagraphParents(element);
+		for(var i=0; i<paragraphContainers.length; i++){
+			var container = paragraphContainers[i];
+			var firstPInBlock = null;
+			var node = container.firstChild;
+			var deleteNode = null;
+			while(node){
+				if(node.nodeType != 1 || node.tagName != 'P' ||
+						(node.getAttributeNode('style') || {/*no style*/}).specified){
+					firstPInBlock = null;
+				}else if(isParagraphDelimiter(node)){
+					deleteNode = node;
+					firstPInBlock = null;
+				}else{
+					if(firstPInBlock == null){
+						firstPInBlock = node;
+					}else{
+						if( (!firstPInBlock.lastChild || firstPInBlock.lastChild.nodeName != 'BR') &&
+							(node.firstChild) &&
+							(node.firstChild.nodeName != 'BR')
+						){
+							firstPInBlock.appendChild(this.editor.document.createElement('br'));
+						}
+						while(node.firstChild){
+							firstPInBlock.appendChild(node.firstChild);
+						}
+						deleteNode = node;
+					}
+				}
+				node = node.nextSibling;
+				if(deleteNode){
+					dojo.destroy(deleteNode);
+					deleteNode = null;
+				}
+			}
+		}
+		return element;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.Editor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Editor"] = true;
+dojo.provide("dijit.Editor");
+
+
+
+
+
+
+
+
+
+
+
+
+
+dojo.declare(
+	"dijit.Editor",
+	dijit._editor.RichText,
+	{
+		// summary:
+		//		A rich text Editing widget
+		//
+		// description:
+		//		This widget provides basic WYSIWYG editing features, based on the browser's
+		//		underlying rich text editing capability, accompanied by a toolbar (`dijit.Toolbar`).
+		//		A plugin model is available to extend the editor's capabilities as well as the
+		//		the options available in the toolbar.  Content generation may vary across
+		//		browsers, and clipboard operations may have different results, to name
+		//		a few limitations.  Note: this widget should not be used with the HTML
+		//		&lt;TEXTAREA&gt; tag -- see dijit._editor.RichText for details.
+
+		// plugins: Object[]
+		//		A list of plugin names (as strings) or instances (as objects)
+		//		for this widget.
+		//
+		//		When declared in markup, it might look like:
+		//	|	plugins="['bold',{name:'dijit._editor.plugins.FontChoice', command:'fontName', generic:true}]"
+		plugins: null,
+
+		// extraPlugins: Object[]
+		//		A list of extra plugin names which will be appended to plugins array
+		extraPlugins: null,
+
+		constructor: function(){
+			// summary:
+			//		Runs on widget initialization to setup arrays etc.
+			// tags:
+			//		private
+
+			if(!dojo.isArray(this.plugins)){
+				this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|",
+				"insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull",
+				"dijit._editor.plugins.EnterKeyHandling" /*, "createLink"*/];
+			}
+
+			this._plugins=[];
+			this._editInterval = this.editActionInterval * 1000;
+
+			//IE will always lose focus when other element gets focus, while for FF and safari,
+			//when no iframe is used, focus will be lost whenever another element gets focus.
+			//For IE, we can connect to onBeforeDeactivate, which will be called right before
+			//the focus is lost, so we can obtain the selected range. For other browsers,
+			//no equivelent of onBeforeDeactivate, so we need to do two things to make sure
+			//selection is properly saved before focus is lost: 1) when user clicks another
+			//element in the page, in which case we listen to mousedown on the entire page and
+			//see whether user clicks out of a focus editor, if so, save selection (focus will
+			//only lost after onmousedown event is fired, so we can obtain correct caret pos.)
+			//2) when user tabs away from the editor, which is handled in onKeyDown below.
+			if(dojo.isIE){
+				this.events.push("onBeforeDeactivate");
+				this.events.push("onBeforeActivate");
+			}
+		},
+
+		postCreate: function(){
+			//for custom undo/redo, if enabled.
+			this._steps=this._steps.slice(0);
+			this._undoedSteps=this._undoedSteps.slice(0);
+
+			if(dojo.isArray(this.extraPlugins)){
+				this.plugins=this.plugins.concat(this.extraPlugins);
+			}
+
+			// Set up a deferred so that the value isn't applied to the editor 
+			// until all the plugins load, needed to avoid timing condition
+			// reported in #10537.
+			this.setValueDeferred = new dojo.Deferred();
+
+			this.inherited(arguments);
+
+			this.commands = dojo.i18n.getLocalization("dijit._editor", "commands", this.lang);
+
+			if(!this.toolbar){
+				// if we haven't been assigned a toolbar, create one
+				this.toolbar = new dijit.Toolbar({
+					dir: this.dir,
+					lang: this.lang
+				});
+				this.header.appendChild(this.toolbar.domNode);
+			}
+
+			dojo.forEach(this.plugins, this.addPlugin, this);
+
+			// Okay, denote the value can now be set.
+			this.setValueDeferred.callback(true);
+
+			dojo.addClass(this.iframe.parentNode, "dijitEditorIFrameContainer");
+			dojo.addClass(this.iframe, "dijitEditorIFrame");
+			dojo.attr(this.iframe, "allowTransparency", true);
+
+			if(dojo.isWebKit){
+				// Disable selecting the entire editor by inadvertant double-clicks.
+				// on buttons, title bar, etc.  Otherwise clicking too fast on
+				// a button such as undo/redo selects the entire editor.
+				dojo.style(this.domNode, "KhtmlUserSelect", "none");
+			}
+			this.toolbar.startup();
+			this.onNormalizedDisplayChanged(); //update toolbar button status
+		},
+		destroy: function(){
+			dojo.forEach(this._plugins, function(p){
+				if(p && p.destroy){
+					p.destroy();
+				}
+			});
+			this._plugins=[];
+			this.toolbar.destroyRecursive();
+			delete this.toolbar;
+			this.inherited(arguments);
+		},
+		addPlugin: function(/*String||Object*/plugin, /*Integer?*/index){
+			// summary:
+			//		takes a plugin name as a string or a plugin instance and
+			//		adds it to the toolbar and associates it with this editor
+			//		instance. The resulting plugin is added to the Editor's
+			//		plugins array. If index is passed, it's placed in the plugins
+			//		array at that index. No big magic, but a nice helper for
+			//		passing in plugin names via markup.
+			//
+			// plugin: String, args object or plugin instance
+			//
+			// args:
+			//		This object will be passed to the plugin constructor
+			//
+			// index: Integer
+			//		Used when creating an instance from
+			//		something already in this.plugins. Ensures that the new
+			//		instance is assigned to this.plugins at that index.
+			var args=dojo.isString(plugin)?{name:plugin}:plugin;
+			if(!args.setEditor){
+				var o={"args":args,"plugin":null,"editor":this};
+				dojo.publish(dijit._scopeName + ".Editor.getPlugin",[o]);
+				if(!o.plugin){
+					var pc = dojo.getObject(args.name);
+					if(pc){
+						o.plugin=new pc(args);
+					}
+				}
+				if(!o.plugin){
+					console.warn('Cannot find plugin',plugin);
+					return;
+				}
+				plugin=o.plugin;
+			}
+			if(arguments.length > 1){
+				this._plugins[index] = plugin;
+			}else{
+				this._plugins.push(plugin);
+			}
+			plugin.setEditor(this);
+			if(dojo.isFunction(plugin.setToolbar)){
+				plugin.setToolbar(this.toolbar);
+			}
+		},
+		//the following 3 functions are required to make the editor play nice under a layout widget, see #4070
+		startup: function(){
+			// summary:
+			//		Exists to make Editor work as a child of a layout widget.
+			//		Developers don't need to call this method.
+			// tags:
+			//		protected
+			//console.log('startup',arguments);
+		},
+		resize: function(size){
+			// summary:
+			//		Resize the editor to the specified size, see `dijit.layout._LayoutWidget.resize`
+			if(size){
+				// we've been given a height/width for the entire editor (toolbar + contents), calls layout()
+				// to split the allocated size between the toolbar and the contents
+				dijit.layout._LayoutWidget.prototype.resize.apply(this, arguments);
+			}
+			/*
+			else{
+				// do nothing, the editor is already laid out correctly.   The user has probably specified
+				// the height parameter, which was used to set a size on the iframe
+			}
+			*/
+		},
+		layout: function(){
+			// summary:
+			//		Called from `dijit.layout._LayoutWidget.resize`.  This shouldn't be called directly
+			// tags:
+			//		protected
+
+			// Converts the iframe (or rather the <div> surrounding it) to take all the available space
+			// except what's needed for the header (toolbars) and footer (breadcrumbs, etc).
+			// A class was added to the iframe container and some themes style it, so we have to
+			// calc off the added margins and padding too. See tracker: #10662
+			var areaHeight = (this._contentBox.h - 
+				(this.getHeaderHeight() + this.getFooterHeight() + 
+				 dojo._getPadBorderExtents(this.iframe.parentNode).h +
+				 dojo._getMarginExtents(this.iframe.parentNode).h));
+			this.editingArea.style.height = areaHeight + "px";
+			if(this.iframe){
+				this.iframe.style.height="100%";
+			}
+			this._layoutMode = true;
+		},
+		_onIEMouseDown: function(/*Event*/ e){
+			// summary:
+			//		IE only to prevent 2 clicks to focus
+			// tags:
+			//		private
+			var outsideClientArea;
+			// IE 8's componentFromPoint is broken, which is a shame since it
+			// was smaller code, but oh well.  We have to do this brute force
+			// to detect if the click was scroller or not.
+			var b = this.document.body;
+			var clientWidth = b.clientWidth;
+			var clientHeight = b.clientHeight;
+			var clientLeft = b.clientLeft;
+			var offsetWidth = b.offsetWidth;
+			var offsetHeight = b.offsetHeight;
+			var offsetLeft = b.offsetLeft;
+
+			//Check for vertical scroller click.
+			bodyDir = b.dir?b.dir.toLowerCase():""
+			if(bodyDir != "rtl"){
+				if(clientWidth < offsetWidth && e.x > clientWidth && e.x < offsetWidth){ 
+					// Check the click was between width and offset width, if so, scroller
+					outsideClientArea = true;
+				}
+			}else{
+				// RTL mode, we have to go by the left offsets.
+				if(e.x < clientLeft && e.x > offsetLeft){
+					// Check the click was between width and offset width, if so, scroller
+					outsideClientArea = true;
+				}
+			}
+			if(!outsideClientArea){
+				// Okay, might be horiz scroller, check that.
+				if(clientHeight < offsetHeight && e.y > clientHeight && e.y < offsetHeight){
+					// Horizontal scroller.
+					outsideClientArea = true;
+				}
+			}
+			if(!outsideClientArea){
+				delete this._cursorToStart; // Remove the force to cursor to start position. 
+				delete this._savedSelection; // new mouse position overrides old selection
+				if(e.target.tagName == "BODY"){
+					setTimeout(dojo.hitch(this, "placeCursorAtEnd"), 0);
+				}
+				this.inherited(arguments);
+			}
+		},
+		onBeforeActivate: function(e){
+			this._restoreSelection();
+		},
+		onBeforeDeactivate: function(e){
+			// summary:
+			//		Called on IE right before focus is lost.   Saves the selected range.
+			// tags:
+			//		private
+			if(this.customUndo){
+				this.endEditing(true);
+			}
+			//in IE, the selection will be lost when other elements get focus,
+			//let's save focus before the editor is deactivated
+			if(e.target.tagName != "BODY"){
+				this._saveSelection();
+			}
+			//console.log('onBeforeDeactivate',this);
+		},
+
+		/* beginning of custom undo/redo support */
+
+		// customUndo: Boolean
+		//		Whether we shall use custom undo/redo support instead of the native
+		//		browser support. By default, we only enable customUndo for IE, as it
+		//		has broken native undo/redo support. Note: the implementation does
+		//		support other browsers which have W3C DOM2 Range API implemented.
+		//		It was also enabled on WebKit, to fix undo/redo enablement. (#9613)
+		customUndo: dojo.isIE || dojo.isWebKit,
+
+		// editActionInterval: Integer
+		//		When using customUndo, not every keystroke will be saved as a step.
+		//		Instead typing (including delete) will be grouped together: after
+		//		a user stops typing for editActionInterval seconds, a step will be
+		//		saved; if a user resume typing within editActionInterval seconds,
+		//		the timeout will be restarted. By default, editActionInterval is 3
+		//		seconds.
+		editActionInterval: 3,
+
+		beginEditing: function(cmd){
+			// summary:
+			//		Called to note that the user has started typing alphanumeric characters, if it's not already noted.
+			//		Deals with saving undo; see editActionInterval parameter.
+			// tags:
+			//		private
+			if(!this._inEditing){
+				this._inEditing=true;
+				this._beginEditing(cmd);
+			}
+			if(this.editActionInterval>0){
+				if(this._editTimer){
+					clearTimeout(this._editTimer);
+				}
+				this._editTimer = setTimeout(dojo.hitch(this, this.endEditing), this._editInterval);
+			}
+		},
+		_steps:[],
+		_undoedSteps:[],
+		execCommand: function(cmd){
+			// summary:
+			//		Main handler for executing any commands to the editor, like paste, bold, etc.
+			//      Called by plugins, but not meant to be called by end users.
+			// tags:
+			//		protected
+			if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
+				return this[cmd]();
+			}else{
+				if(this.customUndo){
+					this.endEditing();
+					this._beginEditing();
+				}
+				var r;
+				try{
+					r = this.inherited('execCommand', arguments);
+					if(dojo.isWebKit && cmd == 'paste' && !r){ //see #4598: safari does not support invoking paste from js
+						throw { code: 1011 }; // throw an object like Mozilla's error
+					}
+				}catch(e){
+					//TODO: when else might we get an exception?  Do we need the Mozilla test below?
+					if(e.code == 1011 /* Mozilla: service denied */ && /copy|cut|paste/.test(cmd)){
+						// Warn user of platform limitation.  Cannot programmatically access clipboard. See ticket #4136
+						var sub = dojo.string.substitute,
+							accel = {cut:'X', copy:'C', paste:'V'};
+						alert(sub(this.commands.systemShortcut,
+							[this.commands[cmd], sub(this.commands[dojo.isMac ? 'appleKey' : 'ctrlKey'], [accel[cmd]])]));
+					}
+					r = false;
+				}
+				if(this.customUndo){
+					this._endEditing();
+				}
+				return r;
+			}
+		},
+		queryCommandEnabled: function(cmd){
+			// summary:
+			//		Returns true if specified editor command is enabled.
+			//      Used by the plugins to know when to highlight/not highlight buttons.
+			// tags:
+			//		protected
+			if(this.customUndo && (cmd == 'undo' || cmd == 'redo')){
+				return cmd == 'undo' ? (this._steps.length > 1) : (this._undoedSteps.length > 0);
+			}else{
+				return this.inherited('queryCommandEnabled',arguments);
+			}
+		},
+		_moveToBookmark: function(b){
+			// summary:
+			//		Selects the text specified in bookmark b
+			// tags:
+			//		private
+			var bookmark = b.mark;
+			var mark = b.mark;
+			var col = b.isCollapsed;
+			var r, sNode, eNode, sel;
+			if(mark){
+				if(dojo.isIE){
+					if(dojo.isArray(mark)){
+						//IE CONTROL, have to use the native bookmark.
+						bookmark = [];
+						dojo.forEach(mark,function(n){
+							bookmark.push(dijit.range.getNode(n,this.editNode));
+						},this);
+						dojo.withGlobal(this.window,'moveToBookmark',dijit,[{mark: bookmark, isCollapsed: col}]);
+					}else{
+						if(mark.startContainer && mark.endContainer){
+							// Use the pseudo WC3 range API.  This works better for positions
+							// than the IE native bookmark code.
+							sel = dijit.range.getSelection(this.window);
+							if(sel && sel.removeAllRanges){
+								sel.removeAllRanges();
+								r = dijit.range.create(this.window);
+								sNode = dijit.range.getNode(mark.startContainer,this.editNode);
+								eNode = dijit.range.getNode(mark.endContainer,this.editNode);
+								if(sNode && eNode){
+									// Okay, we believe we found the position, so add it into the selection
+									// There are cases where it may not be found, particularly in undo/redo, when
+									// IE changes the underlying DOM on us (wraps text in a <p> tag or similar.
+									// So, in those cases, don't bother restoring selection.
+									r.setStart(sNode,mark.startOffset);
+									r.setEnd(eNode,mark.endOffset);
+									sel.addRange(r);
+								}
+							}
+						}
+					}
+				}else{//w3c range
+					sel = dijit.range.getSelection(this.window);
+					if(sel && sel.removeAllRanges){
+						sel.removeAllRanges();
+						r = dijit.range.create(this.window);
+						sNode = dijit.range.getNode(mark.startContainer,this.editNode);
+						eNode = dijit.range.getNode(mark.endContainer,this.editNode);
+						if(sNode && eNode){
+							// Okay, we believe we found the position, so add it into the selection
+							// There are cases where it may not be found, particularly in undo/redo, when
+							// formatting as been done and so on, so don't restore selection then.
+							r.setStart(sNode,mark.startOffset);
+							r.setEnd(eNode,mark.endOffset);
+							sel.addRange(r);
+						}
+					}
+				}
+			}
+		},
+		_changeToStep: function(from, to){
+			// summary:
+			//		Reverts editor to "to" setting, from the undo stack.
+			// tags:
+			//		private
+			this.setValue(to.text);
+			var b=to.bookmark;
+			if(!b){ return; }
+			this._moveToBookmark(b);
+		},
+		undo: function(){
+			// summary:
+			//		Handler for editor undo (ex: ctrl-z) operation
+			// tags:
+			//		private
+			//console.log('undo');
+			var ret = false;
+			if(!this._undoRedoActive){
+				this._undoRedoActive = true;
+				this.endEditing(true);
+				var s=this._steps.pop();
+				if(s && this._steps.length>0){
+					this.focus();
+					this._changeToStep(s,this._steps[this._steps.length-1]);
+					this._undoedSteps.push(s);
+					this.onDisplayChanged();
+					delete this._undoRedoActive;
+					ret = true;
+				}
+				delete this._undoRedoActive;
+			}	
+			return ret;
+		},
+		redo: function(){
+			// summary:
+			//		Handler for editor redo (ex: ctrl-y) operation
+			// tags:
+			//		private
+			//console.log('redo');
+			var ret = false;
+			if(!this._undoRedoActive){
+				this._undoRedoActive = true;
+				this.endEditing(true);
+				var s=this._undoedSteps.pop();
+				if(s && this._steps.length>0){
+					this.focus();
+					this._changeToStep(this._steps[this._steps.length-1],s);
+					this._steps.push(s);
+					this.onDisplayChanged();
+					ret = true;
+				}
+				delete this._undoRedoActive;
+			}
+			return ret;
+		},
+		endEditing: function(ignore_caret){
+			// summary:
+			//		Called to note that the user has stopped typing alphanumeric characters, if it's not already noted.
+			//		Deals with saving undo; see editActionInterval parameter.
+			// tags:
+			//		private
+			if(this._editTimer){
+				clearTimeout(this._editTimer);
+			}
+			if(this._inEditing){
+				this._endEditing(ignore_caret);
+				this._inEditing=false;
+			}
+		},
+
+		_getBookmark: function(){
+			// summary:
+			//		Get the currently selected text
+			// tags:
+			//		protected
+			var b=dojo.withGlobal(this.window,dijit.getBookmark);
+			var tmp=[];
+			if(b && b.mark){
+				var mark = b.mark;
+				if(dojo.isIE){
+					// Try to use the pseudo range API on IE for better accuracy.
+					var sel = dijit.range.getSelection(this.window);
+					if(!dojo.isArray(mark)){
+						if(sel){
+							var range;
+							if(sel.rangeCount){
+								range = sel.getRangeAt(0);
+							}
+							if(range){
+								b.mark = range.cloneRange();
+							}else{
+								b.mark = dojo.withGlobal(this.window,dijit.getBookmark);
+							}
+						}
+					}else{
+						// Control ranges (img, table, etc), handle differently.
+						dojo.forEach(b.mark,function(n){
+							tmp.push(dijit.range.getIndex(n,this.editNode).o);
+						},this);
+						b.mark = tmp;
+					}
+				}
+				try{
+					if(b.mark && b.mark.startContainer){
+						tmp=dijit.range.getIndex(b.mark.startContainer,this.editNode).o;
+						b.mark={startContainer:tmp,
+							startOffset:b.mark.startOffset,
+							endContainer:b.mark.endContainer===b.mark.startContainer?tmp:dijit.range.getIndex(b.mark.endContainer,this.editNode).o,
+							endOffset:b.mark.endOffset};
+					}
+				}catch(e){
+					b.mark = null;
+				}
+			}
+			return b;
+		},
+		_beginEditing: function(cmd){
+			// summary:
+			//		Called when the user starts typing alphanumeric characters.
+			//		Deals with saving undo; see editActionInterval parameter.
+			// tags:
+			//		private
+			if(this._steps.length === 0){
+				// You want to use the editor content without post filtering
+				// to make sure selection restores right for the 'initial' state.
+				// and undo is called.  So not using this.savedContent, as it was 'processed'
+				// and the line-up for selections may have been altered.
+				this._steps.push({'text':dijit._editor.getChildrenHtml(this.editNode),'bookmark':this._getBookmark()});
+			}
+		},
+		_endEditing: function(ignore_caret){
+			// summary:
+			//		Called when the user stops typing alphanumeric characters.
+			//		Deals with saving undo; see editActionInterval parameter.
+			// tags:
+			//		private
+			// Avoid filtering to make sure selections restore.
+			var v = dijit._editor.getChildrenHtml(this.editNode);
+
+			this._undoedSteps=[];//clear undoed steps
+			this._steps.push({text: v, bookmark: this._getBookmark()});
+		},
+		onKeyDown: function(e){
+			// summary:
+			//		Handler for onkeydown event.
+			// tags:
+			//		private
+
+			//We need to save selection if the user TAB away from this editor
+			//no need to call _saveSelection for IE, as that will be taken care of in onBeforeDeactivate
+			if(!dojo.isIE && !this.iframe && e.keyCode == dojo.keys.TAB && !this.tabIndent){
+				this._saveSelection();
+			}
+			if(!this.customUndo){
+				this.inherited(arguments);
+				return;
+			}
+			var k = e.keyCode, ks = dojo.keys;
+			if(e.ctrlKey && !e.altKey){//undo and redo only if the special right Alt + z/y are not pressed #5892
+				if(k == 90 || k == 122){ //z
+					dojo.stopEvent(e);
+					this.undo();
+					return;
+				}else if(k == 89 || k == 121){ //y
+					dojo.stopEvent(e);
+					this.redo();
+					return;
+				}
+			}
+			this.inherited(arguments);
+
+			switch(k){
+					case ks.ENTER:
+					case ks.BACKSPACE:
+					case ks.DELETE:
+						this.beginEditing();
+						break;
+					case 88: //x
+					case 86: //v
+						if(e.ctrlKey && !e.altKey && !e.metaKey){
+							this.endEditing();//end current typing step if any
+							if(e.keyCode == 88){
+								this.beginEditing('cut');
+								//use timeout to trigger after the cut is complete
+								setTimeout(dojo.hitch(this, this.endEditing), 1);
+							}else{
+								this.beginEditing('paste');
+								//use timeout to trigger after the paste is complete
+								setTimeout(dojo.hitch(this, this.endEditing), 1);
+							}
+							break;
+						}
+						//pass through
+					default:
+						if(!e.ctrlKey && !e.altKey && !e.metaKey && (e.keyCode<dojo.keys.F1 || e.keyCode>dojo.keys.F15)){
+							this.beginEditing();
+							break;
+						}
+						//pass through
+					case ks.ALT:
+						this.endEditing();
+						break;
+					case ks.UP_ARROW:
+					case ks.DOWN_ARROW:
+					case ks.LEFT_ARROW:
+					case ks.RIGHT_ARROW:
+					case ks.HOME:
+					case ks.END:
+					case ks.PAGE_UP:
+					case ks.PAGE_DOWN:
+						this.endEditing(true);
+						break;
+					//maybe ctrl+backspace/delete, so don't endEditing when ctrl is pressed
+					case ks.CTRL:
+					case ks.SHIFT:
+					case ks.TAB:
+						break;
+				}
+		},
+		_onBlur: function(){
+			// summary:
+			//		Called from focus manager when focus has moved away from this editor
+			// tags:
+			//		protected
+
+			//this._saveSelection();
+			this.inherited('_onBlur',arguments);
+			this.endEditing(true);
+		},
+		_saveSelection: function(){
+			// summary:
+			//		Save the currently selected text in _savedSelection attribute
+			// tags:
+			//		private
+			this._savedSelection=this._getBookmark();
+			//console.log('save selection',this._savedSelection,this);
+		},
+		_restoreSelection: function(){
+			// summary:
+			//		Re-select the text specified in _savedSelection attribute;
+			//		see _saveSelection().
+			// tags:
+			//		private
+			if(this._savedSelection){
+				// Clear off cursor to start, we're deliberately going to a selection.
+				delete this._cursorToStart;
+				// only restore the selection if the current range is collapsed
+				// if not collapsed, then it means the editor does not lose
+				// selection and there is no need to restore it
+				if(dojo.withGlobal(this.window,'isCollapsed',dijit)){
+					this._moveToBookmark(this._savedSelection);
+				}
+				delete this._savedSelection;
+			}
+		},
+
+		onClick: function(){
+			// summary:
+			//		Handler for when editor is clicked
+			// tags:
+			//		protected
+			this.endEditing(true);
+			this.inherited(arguments);
+		},
+
+		_setDisabledAttr: function(/*Boolean*/ value){
+			if(!this.disabled && value){
+				// Disable editor: disable all enabled buttons and remember that list
+				this._buttonEnabledPlugins = dojo.filter(this._plugins, function(p){
+					if (p && p.button && !p.button.get("disabled")) {
+						p.button.set("disabled", true);
+						return true;
+					}
+					return false;
+				});
+			}else if(this.disabled && !value){
+				// Enable editor: we only want to enable the buttons that should be
+				// enabled (for example, the outdent button shouldn't be enabled if the current
+				// text can't be outdented).
+				dojo.forEach(this._buttonEnabledPlugins, function(p){
+					p.button.attr("disabled", false);
+					p.updateState && p.updateState();	// just in case something changed, like caret position
+				});
+			}
+			
+			this.inherited(arguments);
+		},
+		
+		_setStateClass: function(){
+			this.inherited(arguments);
+			
+			// Let theme set the editor's text color based on editor enabled/disabled state.
+			// We need to jump through hoops because the main document (where the theme CSS is)
+			// is separate from the iframe's document.
+			if(this.document && this.document.body){
+				dojo.style(this.document.body, "color", dojo.style(this.iframe, "color"));
+			}
+		}
+	}
+);
+
+// Register the "default plugins", ie, the built-in editor commands
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+	if(o.plugin){ return; }
+	var args = o.args, p;
+	var _p = dijit._editor._Plugin;
+	var name = args.name;
+	switch(name){
+		case "undo": case "redo": case "cut": case "copy": case "paste": case "insertOrderedList":
+		case "insertUnorderedList": case "indent": case "outdent": case "justifyCenter":
+		case "justifyFull": case "justifyLeft": case "justifyRight": case "delete":
+		case "selectAll": case "removeFormat": case "unlink":
+		case "insertHorizontalRule":
+			p = new _p({ command: name });
+			break;
+
+		case "bold": case "italic": case "underline": case "strikethrough":
+		case "subscript": case "superscript":
+			p = new _p({ buttonClass: dijit.form.ToggleButton, command: name });
+			break;
+		case "|":
+			p = new _p({ button: new dijit.ToolbarSeparator(), setEditor: function(editor) {this.editor = editor;} });
+	}
+//	console.log('name',name,p);
+	o.plugin=p;
+});
+
+}
+
+if(!dojo._hasResource["dojo.regexp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.regexp"] = true;
+dojo.provide("dojo.regexp");
+
+/*=====
+dojo.regexp = {
+	// summary: Regular expressions and Builder resources
+};
+=====*/
+
+dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){
+	//	summary:
+	//		Adds escape sequences for special characters in regular expressions
+	// except:
+	//		a String with special characters to be left unescaped
+
+	return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, function(ch){
+		if(except && except.indexOf(ch) != -1){
+			return ch;
+		}
+		return "\\" + ch;
+	}); // String
+}
+
+dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
+	//	summary:
+	//		Builds a regular expression that groups subexpressions
+	//	description:
+	//		A utility function used by some of the RE generators. The
+	//		subexpressions are constructed by the function, re, in the second
+	//		parameter.  re builds one subexpression for each elem in the array
+	//		a, in the first parameter. Returns a string for a regular
+	//		expression that groups all the subexpressions.
+	// arr:
+	//		A single value or an array of values.
+	// re:
+	//		A function. Takes one parameter and converts it to a regular
+	//		expression. 
+	// nonCapture:
+	//		If true, uses non-capturing match, otherwise matches are retained
+	//		by regular expression. Defaults to false
+
+	// case 1: a is a single value.
+	if(!(arr instanceof Array)){
+		return re(arr); // String
+	}
+
+	// case 2: a is an array
+	var b = [];
+	for(var i = 0; i < arr.length; i++){
+		// convert each elem to a RE
+		b.push(re(arr[i]));
+	}
+
+	 // join the REs as alternatives in a RE group.
+	return dojo.regexp.group(b.join("|"), nonCapture); // String
+}
+
+dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
+	// summary:
+	//		adds group match to expression
+	// nonCapture:
+	//		If true, uses non-capturing match, otherwise matches are retained
+	//		by regular expression. 
+	return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
+}
+
+}
+
+if(!dojo._hasResource["dojo.data.util.sorter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.data.util.sorter"] = true;
+dojo.provide("dojo.data.util.sorter");
+
+dojo.data.util.sorter.basicComparator = function(	/*anything*/ a, 
+													/*anything*/ b){
+	//	summary:  
+	//		Basic comparision function that compares if an item is greater or less than another item
+	//	description:  
+	//		returns 1 if a > b, -1 if a < b, 0 if equal.
+	//		'null' values (null, undefined) are treated as larger values so that they're pushed to the end of the list.
+	//		And compared to each other, null is equivalent to undefined.
+	
+	//null is a problematic compare, so if null, we set to undefined.
+	//Makes the check logic simple, compact, and consistent
+	//And (null == undefined) === true, so the check later against null
+	//works for undefined and is less bytes.
+	var r = -1;
+	if(a === null){
+		a = undefined;
+	}
+	if(b === null){
+		b = undefined;
+	}
+	if(a == b){
+		r = 0; 
+	}else if(a > b || a == null){
+		r = 1; 
+	}
+	return r; //int {-1,0,1}
+};
+
+dojo.data.util.sorter.createSortFunction = function(	/* attributes array */sortSpec,
+														/*dojo.data.core.Read*/ store){
+	//	summary:  
+	//		Helper function to generate the sorting function based off the list of sort attributes.
+	//	description:  
+	//		The sort function creation will look for a property on the store called 'comparatorMap'.  If it exists
+	//		it will look in the mapping for comparisons function for the attributes.  If one is found, it will
+	//		use it instead of the basic comparator, which is typically used for strings, ints, booleans, and dates.
+	//		Returns the sorting function for this particular list of attributes and sorting directions.
+	//
+	//	sortSpec: array
+	//		A JS object that array that defines out what attribute names to sort on and whether it should be descenting or asending.
+	//		The objects should be formatted as follows:
+	//		{
+	//			attribute: "attributeName-string" || attribute,
+	//			descending: true|false;   // Default is false.
+	//		}
+	//	store: object
+	//		The datastore object to look up item values from.
+	//
+	var sortFunctions=[];
+
+	function createSortFunction(attr, dir, comp, s){
+		//Passing in comp and s (comparator and store), makes this
+		//function much faster.
+		return function(itemA, itemB){
+			var a = s.getValue(itemA, attr);
+			var b = s.getValue(itemB, attr);
+			return dir * comp(a,b); //int
+		};
+	}
+	var sortAttribute;
+	var map = store.comparatorMap;
+	var bc = dojo.data.util.sorter.basicComparator;
+	for(var i = 0; i < sortSpec.length; i++){
+		sortAttribute = sortSpec[i];
+		var attr = sortAttribute.attribute;
+		if(attr){
+			var dir = (sortAttribute.descending) ? -1 : 1;
+			var comp = bc;
+			if(map){
+				if(typeof attr !== "string" && ("toString" in attr)){
+					 attr = attr.toString();
+				}
+				comp = map[attr] || bc;
+			}
+			sortFunctions.push(createSortFunction(attr, 
+				dir, comp, store));
+		}
+	}
+	return function(rowA, rowB){
+		var i=0;
+		while(i < sortFunctions.length){
+			var ret = sortFunctions[i++](rowA, rowB);
+			if(ret !== 0){
+				return ret;//int
+			}
+		}
+		return 0; //int  
+	}; // Function
+};
+
+}
+
+if(!dojo._hasResource["dojo.data.util.simpleFetch"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.data.util.simpleFetch"] = true;
+dojo.provide("dojo.data.util.simpleFetch");
+
+
+dojo.data.util.simpleFetch.fetch = function(/* Object? */ request){
+	//	summary:
+	//		The simpleFetch mixin is designed to serve as a set of function(s) that can
+	//		be mixed into other datastore implementations to accelerate their development.  
+	//		The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems() 
+	//		call by returning an array of all the found items that matched the query.  The simpleFetch mixin
+	//		is not designed to work for datastores that respond to a fetch() call by incrementally
+	//		loading items, or sequentially loading partial batches of the result
+	//		set.  For datastores that mixin simpleFetch, simpleFetch 
+	//		implements a fetch method that automatically handles eight of the fetch()
+	//		arguments -- onBegin, onItem, onComplete, onError, start, count, sort and scope
+	//		The class mixing in simpleFetch should not implement fetch(),
+	//		but should instead implement a _fetchItems() method.  The _fetchItems() 
+	//		method takes three arguments, the keywordArgs object that was passed 
+	//		to fetch(), a callback function to be called when the result array is
+	//		available, and an error callback to be called if something goes wrong.
+	//		The _fetchItems() method should ignore any keywordArgs parameters for
+	//		start, count, onBegin, onItem, onComplete, onError, sort, and scope.  
+	//		The _fetchItems() method needs to correctly handle any other keywordArgs
+	//		parameters, including the query parameter and any optional parameters 
+	//		(such as includeChildren).  The _fetchItems() method should create an array of 
+	//		result items and pass it to the fetchHandler along with the original request object 
+	//		-- or, the _fetchItems() method may, if it wants to, create an new request object 
+	//		with other specifics about the request that are specific to the datastore and pass 
+	//		that as the request object to the handler.
+	//
+	//		For more information on this specific function, see dojo.data.api.Read.fetch()
+	request = request || {};
+	if(!request.store){
+		request.store = this;
+	}
+	var self = this;
+
+	var _errorHandler = function(errorData, requestObject){
+		if(requestObject.onError){
+			var scope = requestObject.scope || dojo.global;
+			requestObject.onError.call(scope, errorData, requestObject);
+		}
+	};
+
+	var _fetchHandler = function(items, requestObject){
+		var oldAbortFunction = requestObject.abort || null;
+		var aborted = false;
+
+		var startIndex = requestObject.start?requestObject.start:0;
+		var endIndex = (requestObject.count && (requestObject.count !== Infinity))?(startIndex + requestObject.count):items.length;
+
+		requestObject.abort = function(){
+			aborted = true;
+			if(oldAbortFunction){
+				oldAbortFunction.call(requestObject);
+			}
+		};
+
+		var scope = requestObject.scope || dojo.global;
+		if(!requestObject.store){
+			requestObject.store = self;
+		}
+		if(requestObject.onBegin){
+			requestObject.onBegin.call(scope, items.length, requestObject);
+		}
+		if(requestObject.sort){
+			items.sort(dojo.data.util.sorter.createSortFunction(requestObject.sort, self));
+		}
+		if(requestObject.onItem){
+			for(var i = startIndex; (i < items.length) && (i < endIndex); ++i){
+				var item = items[i];
+				if(!aborted){
+					requestObject.onItem.call(scope, item, requestObject);
+				}
+			}
+		}
+		if(requestObject.onComplete && !aborted){
+			var subset = null;
+			if(!requestObject.onItem){
+				subset = items.slice(startIndex, endIndex);
+			}
+			requestObject.onComplete.call(scope, subset, requestObject);
+		}
+	};
+	this._fetchItems(request, _fetchHandler, _errorHandler);
+	return request;	// Object
+};
+
+}
+
+if(!dojo._hasResource["dojo.data.util.filter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.data.util.filter"] = true;
+dojo.provide("dojo.data.util.filter");
+
+dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){
+	//	summary:  
+	//		Helper function to convert a simple pattern to a regular expression for matching.
+	//	description:
+	//		Returns a regular expression object that conforms to the defined conversion rules.
+	//		For example:  
+	//			ca*   -> /^ca.*$/
+	//			*ca*  -> /^.*ca.*$/
+	//			*c\*a*  -> /^.*c\*a.*$/
+	//			*c\*a?*  -> /^.*c\*a..*$/
+	//			and so on.
+	//
+	//	pattern: string
+	//		A simple matching pattern to convert that follows basic rules:
+	//			* Means match anything, so ca* means match anything starting with ca
+	//			? Means match single character.  So, b?b will match to bob and bab, and so on.
+	//      	\ is an escape character.  So for example, \* means do not treat * as a match, but literal character *.
+	//				To use a \ as a character in the string, it must be escaped.  So in the pattern it should be 
+	//				represented by \\ to be treated as an ordinary \ character instead of an escape.
+	//
+	//	ignoreCase:
+	//		An optional flag to indicate if the pattern matching should be treated as case-sensitive or not when comparing
+	//		By default, it is assumed case sensitive.
+
+	var rxp = "^";
+	var c = null;
+	for(var i = 0; i < pattern.length; i++){
+		c = pattern.charAt(i);
+		switch(c){
+			case '\\':
+				rxp += c;
+				i++;
+				rxp += pattern.charAt(i);
+				break;
+			case '*':
+				rxp += ".*"; break;
+			case '?':
+				rxp += "."; break;
+			case '$':
+			case '^':
+			case '/':
+			case '+':
+			case '.':
+			case '|':
+			case '(':
+			case ')':
+			case '{':
+			case '}':
+			case '[':
+			case ']':
+				rxp += "\\"; //fallthrough
+			default:
+				rxp += c;
+		}
+	}
+	rxp += "$";
+	if(ignoreCase){
+		return new RegExp(rxp,"mi"); //RegExp
+	}else{
+		return new RegExp(rxp,"m"); //RegExp
+	}
+	
+};
+
+}
+
+if(!dojo._hasResource["dijit.form.TextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.TextBox"] = true;
+dojo.provide("dijit.form.TextBox");
+
+
+
+dojo.declare(
+	"dijit.form.TextBox",
+	dijit.form._FormValueWidget,
+	{
+		// summary:
+		//		A base class for textbox form inputs
+
+		// trim: Boolean
+		//		Removes leading and trailing whitespace if true.  Default is false.
+		trim: false,
+
+		// uppercase: Boolean
+		//		Converts all characters to uppercase if true.  Default is false.
+		uppercase: false,
+
+		// lowercase: Boolean
+		//		Converts all characters to lowercase if true.  Default is false.
+		lowercase: false,
+
+		// propercase: Boolean
+		//		Converts the first character of each word to uppercase if true.
+		propercase: false,
+
+		//	maxLength: String
+		//		HTML INPUT tag maxLength declaration.
+		maxLength: "",
+
+		//	selectOnClick: [const] Boolean
+		//		If true, all text will be selected when focused with mouse
+		selectOnClick: false,
+
+		//	placeHolder: String
+		//		Defines a hint to help users fill out the input field (as defined in HTML 5).
+		//		This should only contain plain text (no html markup).
+		placeHolder: "",
+		
+		templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
+		_singleNodeTemplate: '<input class="dijit dijitReset dijitLeft dijitInputField" dojoAttachPoint="textbox,focusNode" autocomplete="off" type="${type}" ${!nameAttrSetting} />',
+
+		_buttonInputDisabled: dojo.isIE ? "disabled" : "", // allows IE to disallow focus, but Firefox cannot be disabled for mousedown events
+
+		baseClass: "dijitTextBox",
+
+		attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
+			maxLength: "focusNode"
+		}),
+		
+		postMixInProperties: function(){
+			var type = this.type.toLowerCase();
+			if(this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == dijit.form.TextBox.prototype.templateString)){
+				this.templateString = this._singleNodeTemplate;
+			}
+			this.inherited(arguments);
+		},
+
+		_setPlaceHolderAttr: function(v){
+			this.placeHolder = v;
+			if(!this._phspan){
+				this._attachPoints.push('_phspan');
+				/* dijitInputField class gives placeHolder same padding as the input field
+				 * parent node already has dijitInputField class but it doesn't affect this <span>
+				 * since it's position: absolute.
+				 */
+				this._phspan = dojo.create('span',{className:'dijitPlaceHolder dijitInputField'},this.textbox,'after');
+			}
+			this._phspan.innerHTML="";
+			this._phspan.appendChild(document.createTextNode(v));
+			
+			this._updatePlaceHolder();
+		},
+		
+		_updatePlaceHolder: function(){
+			if(this._phspan){
+				this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";
+			}
+		},
+
+		_getValueAttr: function(){
+			// summary:
+			//		Hook so attr('value') works as we like.
+			// description:
+			//		For `dijit.form.TextBox` this basically returns the value of the <input>.
+			//
+			//		For `dijit.form.MappedTextBox` subclasses, which have both
+			//		a "displayed value" and a separate "submit value",
+			//		This treats the "displayed value" as the master value, computing the
+			//		submit value from it via this.parse().
+			return this.parse(this.get('displayedValue'), this.constraints);
+		},
+
+		_setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
+			// summary:
+			//		Hook so attr('value', ...) works.
+			//
+			// description:
+			//		Sets the value of the widget to "value" which can be of
+			//		any type as determined by the widget.
+			//
+			// value:
+			//		The visual element value is also set to a corresponding,
+			//		but not necessarily the same, value.
+			//
+			// formattedValue:
+			//		If specified, used to set the visual element value,
+			//		otherwise a computed visual value is used.
+			//
+			// priorityChange:
+			//		If true, an onChange event is fired immediately instead of
+			//		waiting for the next blur event.
+
+			var filteredValue;
+			if(value !== undefined){
+				// TODO: this is calling filter() on both the display value and the actual value.
+				// I added a comment to the filter() definition about this, but it should be changed.
+				filteredValue = this.filter(value);
+				if(typeof formattedValue != "string"){
+					if(filteredValue !== null && ((typeof filteredValue != "number") || !isNaN(filteredValue))){
+						formattedValue = this.filter(this.format(filteredValue, this.constraints));
+					}else{ formattedValue = ''; }
+				}
+			}
+			if(formattedValue != null && formattedValue != undefined && ((typeof formattedValue) != "number" || !isNaN(formattedValue)) && this.textbox.value != formattedValue){
+				this.textbox.value = formattedValue;
+			}
+
+			this._updatePlaceHolder();
+
+			this.inherited(arguments, [filteredValue, priorityChange]);
+		},
+
+		// displayedValue: String
+		//		For subclasses like ComboBox where the displayed value
+		//		(ex: Kentucky) and the serialized value (ex: KY) are different,
+		//		this represents the displayed value.
+		//
+		//		Setting 'displayedValue' through attr('displayedValue', ...)
+		//		updates 'value', and vice-versa.  Otherwise 'value' is updated
+		//		from 'displayedValue' periodically, like onBlur etc.
+		//
+		//		TODO: move declaration to MappedTextBox?
+		//		Problem is that ComboBox references displayedValue,
+		//		for benefit of FilteringSelect.
+		displayedValue: "",
+
+		getDisplayedValue: function(){
+			// summary:
+			//		Deprecated.   Use set('displayedValue') instead.
+			// tags:
+			//		deprecated
+			dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.", "", "2.0");
+			return this.get('displayedValue');
+		},
+
+		_getDisplayedValueAttr: function(){
+			// summary:
+			//		Hook so attr('displayedValue') works.
+			// description:
+			//		Returns the displayed value (what the user sees on the screen),
+			// 		after filtering (ie, trimming spaces etc.).
+			//
+			//		For some subclasses of TextBox (like ComboBox), the displayed value
+			//		is different from the serialized value that's actually
+			//		sent to the server (see dijit.form.ValidationTextBox.serialize)
+
+			return this.filter(this.textbox.value);
+		},
+
+		setDisplayedValue: function(/*String*/value){
+			// summary:
+			//		Deprecated.   Use set('displayedValue', ...) instead.
+			// tags:
+			//		deprecated
+			dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.", "", "2.0");
+			this.set('displayedValue', value);
+		},
+
+		_setDisplayedValueAttr: function(/*String*/value){
+			// summary:
+			//		Hook so attr('displayedValue', ...) works.
+			// description:
+			//		Sets the value of the visual element to the string "value".
+			//		The widget value is also set to a corresponding,
+			//		but not necessarily the same, value.
+
+			if(value === null || value === undefined){ value = '' }
+			else if(typeof value != "string"){ value = String(value) }
+			this.textbox.value = value;
+			this._setValueAttr(this.get('value'), undefined, value);
+		},
+
+		format: function(/* String */ value, /* Object */ constraints){
+			// summary:
+			//		Replacable function to convert a value to a properly formatted string.
+			// tags:
+			//		protected extension
+			return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
+		},
+
+		parse: function(/* String */ value, /* Object */ constraints){
+			// summary:
+			//		Replacable function to convert a formatted string to a value
+			// tags:
+			//		protected extension
+
+			return value;	// String
+		},
+
+		_refreshState: function(){
+			// summary:
+			//		After the user types some characters, etc., this method is
+			//		called to check the field for validity etc.  The base method
+			//		in `dijit.form.TextBox` does nothing, but subclasses override.
+			// tags:
+			//		protected
+		},
+
+		_onInput: function(e){
+			if(e && e.type && /key/i.test(e.type) && e.keyCode){
+				switch(e.keyCode){
+					case dojo.keys.SHIFT:
+					case dojo.keys.ALT:
+					case dojo.keys.CTRL:
+					case dojo.keys.TAB:
+						return;
+				}
+			}
+			if(this.intermediateChanges){
+				var _this = this;
+				// the setTimeout allows the key to post to the widget input box
+				setTimeout(function(){ _this._handleOnChange(_this.get('value'), false); }, 0);
+			}
+			this._refreshState();
+		},
+
+		postCreate: function(){
+			// setting the value here is needed since value="" in the template causes "undefined"
+			// and setting in the DOM (instead of the JS object) helps with form reset actions
+			if(dojo.isIE){ // IE INPUT tag fontFamily has to be set directly using STYLE
+				var s = dojo.getComputedStyle(this.domNode);
+				if(s){
+					var ff = s.fontFamily;
+					if(ff){
+						var inputs = this.domNode.getElementsByTagName("INPUT");
+						if(inputs){
+							for(var i=0; i < inputs.length; i++){
+								inputs[i].style.fontFamily = ff;
+							}
+						}
+					}
+				}
+			}
+			this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values shuld be the same
+			this.inherited(arguments);
+			if(dojo.isMoz || dojo.isOpera){
+				this.connect(this.textbox, "oninput", this._onInput);
+			}else{
+				this.connect(this.textbox, "onkeydown", this._onInput);
+				this.connect(this.textbox, "onkeyup", this._onInput);
+				this.connect(this.textbox, "onpaste", this._onInput);
+				this.connect(this.textbox, "oncut", this._onInput);
+			}
+		},
+
+		_blankValue: '', // if the textbox is blank, what value should be reported
+		filter: function(val){
+			// summary:
+			//		Auto-corrections (such as trimming) that are applied to textbox
+			//		value on blur or form submit.
+			// description:
+			//		For MappedTextBox subclasses, this is called twice
+			// 			- once with the display value
+			//			- once the value as set/returned by attr('value', ...)
+			//		and attr('value'), ex: a Number for NumberTextBox.
+			//
+			//		In the latter case it does corrections like converting null to NaN.  In
+			//		the former case the NumberTextBox.filter() method calls this.inherited()
+			//		to execute standard trimming code in TextBox.filter().
+			//
+			//		TODO: break this into two methods in 2.0
+			//
+			// tags:
+			//		protected extension
+			if(val === null){ return this._blankValue; }
+			if(typeof val != "string"){ return val; }
+			if(this.trim){
+				val = dojo.trim(val);
+			}
+			if(this.uppercase){
+				val = val.toUpperCase();
+			}
+			if(this.lowercase){
+				val = val.toLowerCase();
+			}
+			if(this.propercase){
+				val = val.replace(/[^\s]+/g, function(word){
+					return word.substring(0,1).toUpperCase() + word.substring(1);
+				});
+			}
+			return val;
+		},
+
+		_setBlurValue: function(){
+			this._setValueAttr(this.get('value'), true);
+		},
+
+		_onBlur: function(e){
+			if(this.disabled){ return; }
+			this._setBlurValue();
+			this.inherited(arguments);
+
+			if(this._selectOnClickHandle){
+				this.disconnect(this._selectOnClickHandle);
+			}
+			if(this.selectOnClick && dojo.isMoz){
+				this.textbox.selectionStart = this.textbox.selectionEnd = undefined; // clear selection so that the next mouse click doesn't reselect
+			}
+			
+			this._updatePlaceHolder();
+		},
+
+		_onFocus: function(/*String*/ by){
+			if(this.disabled || this.readOnly){ return; }
+
+			// Select all text on focus via click if nothing already selected.
+			// Since mouse-up will clear the selection need to defer selection until after mouse-up.
+			// Don't do anything on focus by tabbing into the widget since there's no associated mouse-up event.
+			if(this.selectOnClick && by == "mouse"){
+				this._selectOnClickHandle = this.connect(this.domNode, "onmouseup", function(){
+					// Only select all text on first click; otherwise users would have no way to clear
+					// the selection.
+					this.disconnect(this._selectOnClickHandle);
+
+					// Check if the user selected some text manually (mouse-down, mouse-move, mouse-up)
+					// and if not, then select all the text
+					var textIsNotSelected;
+					if(dojo.isIE){
+						var range = dojo.doc.selection.createRange();
+						var parent = range.parentElement();
+						textIsNotSelected = parent == this.textbox && range.text.length == 0;
+					}else{
+						textIsNotSelected = this.textbox.selectionStart == this.textbox.selectionEnd;
+					}
+					if(textIsNotSelected){
+						dijit.selectInputText(this.textbox);
+					}
+				});
+			}
+
+			this._updatePlaceHolder();
+			
+			this._refreshState();
+			this.inherited(arguments);
+		},
+
+		reset: function(){
+			// Overrides dijit._FormWidget.reset().
+			// Additionally resets the displayed textbox value to ''
+			this.textbox.value = '';
+			this.inherited(arguments);
+		}
+	}
+);
+
+dijit.selectInputText = function(/*DomNode*/element, /*Number?*/ start, /*Number?*/ stop){
+	// summary:
+	//		Select text in the input element argument, from start (default 0), to stop (default end).
+
+	// TODO: use functions in _editor/selection.js?
+	var _window = dojo.global;
+	var _document = dojo.doc;
+	element = dojo.byId(element);
+	if(isNaN(start)){ start = 0; }
+	if(isNaN(stop)){ stop = element.value ? element.value.length : 0; }
+	dijit.focus(element);
+	if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
+		if(element.createTextRange){
+			var range = element.createTextRange();
+			with(range){
+				collapse(true);
+				moveStart("character", -99999); // move to 0
+				moveStart("character", start); // delta from 0 is the correct position
+				moveEnd("character", stop-start);
+				select();
+			}
+		}
+	}else if(_window["getSelection"]){
+		if(element.setSelectionRange){
+			element.setSelectionRange(start, stop);
+		}
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Tooltip"] = true;
+dojo.provide("dijit.Tooltip");
+
+
+
+
+dojo.declare(
+	"dijit._MasterTooltip",
+	[dijit._Widget, dijit._Templated],
+	{
+		// summary:
+		//		Internal widget that holds the actual tooltip markup,
+		//		which occurs once per page.
+		//		Called by Tooltip widgets which are just containers to hold
+		//		the markup
+		// tags:
+		//		protected
+
+		// duration: Integer
+		//		Milliseconds to fade in/fade out
+		duration: dijit.defaultDuration,
+
+		templateString: dojo.cache("dijit", "templates/Tooltip.html", "<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n"),
+
+		postCreate: function(){
+			dojo.body().appendChild(this.domNode);
+
+			this.bgIframe = new dijit.BackgroundIframe(this.domNode);
+
+			// Setup fade-in and fade-out functions.
+			this.fadeIn = dojo.fadeIn({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onShow") });
+			this.fadeOut = dojo.fadeOut({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onHide") });
+
+		},
+
+		show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position, /*Boolean*/ rtl){
+			// summary:
+			//		Display tooltip w/specified contents to right of specified node
+			//		(To left if there's no space on the right, or if rtl == true)
+
+			if(this.aroundNode && this.aroundNode === aroundNode){
+				return;
+			}
+
+			if(this.fadeOut.status() == "playing"){
+				// previous tooltip is being hidden; wait until the hide completes then show new one
+				this._onDeck=arguments;
+				return;
+			}
+			this.containerNode.innerHTML=innerHTML;
+
+			var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, dijit.getPopupAroundAlignment((position && position.length) ? position : dijit.Tooltip.defaultPosition, !rtl), dojo.hitch(this, "orient"));
+
+			// show it
+			dojo.style(this.domNode, "opacity", 0);
+			this.fadeIn.play();
+			this.isShowingNow = true;
+			this.aroundNode = aroundNode;
+		},
+
+		orient: function(/* DomNode */ node, /* String */ aroundCorner, /* String */ tooltipCorner){
+			// summary:
+			//		Private function to set CSS for tooltip node based on which position it's in.
+			//		This is called by the dijit popup code.
+			// tags:
+			//		protected
+
+			node.className = "dijitTooltip " +
+				{
+					"BL-TL": "dijitTooltipBelow dijitTooltipABLeft",
+					"TL-BL": "dijitTooltipAbove dijitTooltipABLeft",
+					"BR-TR": "dijitTooltipBelow dijitTooltipABRight",
+					"TR-BR": "dijitTooltipAbove dijitTooltipABRight",
+					"BR-BL": "dijitTooltipRight",
+					"BL-BR": "dijitTooltipLeft"
+				}[aroundCorner + "-" + tooltipCorner];
+		},
+
+		_onShow: function(){
+			// summary:
+			//		Called at end of fade-in operation
+			// tags:
+			//		protected
+			if(dojo.isIE){
+				// the arrow won't show up on a node w/an opacity filter
+				this.domNode.style.filter="";
+			}
+		},
+
+		hide: function(aroundNode){
+			// summary:
+			//		Hide the tooltip
+			if(this._onDeck && this._onDeck[1] == aroundNode){
+				// this hide request is for a show() that hasn't even started yet;
+				// just cancel the pending show()
+				this._onDeck=null;
+			}else if(this.aroundNode === aroundNode){
+				// this hide request is for the currently displayed tooltip
+				this.fadeIn.stop();
+				this.isShowingNow = false;
+				this.aroundNode = null;
+				this.fadeOut.play();
+			}else{
+				// just ignore the call, it's for a tooltip that has already been erased
+			}
+		},
+
+		_onHide: function(){
+			// summary:
+			//		Called at end of fade-out operation
+			// tags:
+			//		protected
+
+			this.domNode.style.cssText="";	// to position offscreen again
+			this.containerNode.innerHTML="";
+			if(this._onDeck){
+				// a show request has been queued up; do it now
+				this.show.apply(this, this._onDeck);
+				this._onDeck=null;
+			}
+		}
+
+	}
+);
+
+dijit.showTooltip = function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position, /*Boolean*/ rtl){
+	// summary:
+	//		Display tooltip w/specified contents in specified position.
+	//		See description of dijit.Tooltip.defaultPosition for details on position parameter.
+	//		If position is not specified then dijit.Tooltip.defaultPosition is used.
+	if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
+	return dijit._masterTT.show(innerHTML, aroundNode, position, rtl);
+};
+
+dijit.hideTooltip = function(aroundNode){
+	// summary:
+	//		Hide the tooltip
+	if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
+	return dijit._masterTT.hide(aroundNode);
+};
+
+dojo.declare(
+	"dijit.Tooltip",
+	dijit._Widget,
+	{
+		// summary:
+		//		Pops up a tooltip (a help message) when you hover over a node.
+
+		// label: String
+		//		Text to display in the tooltip.
+		//		Specified as innerHTML when creating the widget from markup.
+		label: "",
+
+		// showDelay: Integer
+		//		Number of milliseconds to wait after hovering over/focusing on the object, before
+		//		the tooltip is displayed.
+		showDelay: 400,
+
+		// connectId: [const] String[]
+		//		Id's of domNodes to attach the tooltip to.
+		//		When user hovers over any of the specified dom nodes, the tooltip will appear.
+		//
+		//		Note: Currently connectId can only be specified on initialization, it cannot
+		//		be changed via attr('connectId', ...)
+		//
+		//		Note: in 2.0 this will be renamed to connectIds for less confusion.
+		connectId: [],
+
+		// position: String[]
+		//		See description of `dijit.Tooltip.defaultPosition` for details on position parameter.
+		position: [],
+
+		constructor: function(){
+			// Map id's of nodes I'm connected to to a list of the this.connect() handles
+			this._nodeConnectionsById = {};
+		},
+
+		_setConnectIdAttr: function(newIds){
+			for(var oldId in this._nodeConnectionsById){
+				this.removeTarget(oldId);
+			}
+			dojo.forEach(dojo.isArrayLike(newIds) ? newIds : [newIds], this.addTarget, this);
+		},
+
+		_getConnectIdAttr: function(){
+			var ary = [];
+			for(var id in this._nodeConnectionsById){
+				ary.push(id);
+			}
+			return ary;
+		},
+
+		addTarget: function(/*DOMNODE || String*/ id){
+			// summary:
+			//		Attach tooltip to specified node, if it's not already connected
+			var node = dojo.byId(id);
+			if(!node){ return; }
+			if(node.id in this._nodeConnectionsById){ return; }//Already connected
+
+			this._nodeConnectionsById[node.id] = [
+				this.connect(node, "onmouseenter", "_onTargetMouseEnter"),
+				this.connect(node, "onmouseleave", "_onTargetMouseLeave"),
+				this.connect(node, "onfocus", "_onTargetFocus"),
+				this.connect(node, "onblur", "_onTargetBlur")
+			];
+		},
+
+		removeTarget: function(/*DOMNODE || String*/ node){
+			// summary:
+			//		Detach tooltip from specified node
+
+			// map from DOMNode back to plain id string
+			var id = node.id || node;
+
+			if(id in this._nodeConnectionsById){
+				dojo.forEach(this._nodeConnectionsById[id], this.disconnect, this);
+				delete this._nodeConnectionsById[id];
+			}
+		},
+
+		postCreate: function(){
+			dojo.addClass(this.domNode,"dijitTooltipData");
+		},
+
+		startup: function(){
+			this.inherited(arguments);
+
+			// If this tooltip was created in a template, or for some other reason the specified connectId[s]
+			// didn't exist during the widget's initialization, then connect now.
+			var ids = this.connectId;
+			dojo.forEach(dojo.isArrayLike(ids) ? ids : [ids], this.addTarget, this);
+		},
+
+		_onTargetMouseEnter: function(/*Event*/ e){
+			// summary:
+			//		Handler for mouseenter event on the target node
+			// tags:
+			//		private
+			this._onHover(e);
+		},
+
+		_onTargetMouseLeave: function(/*Event*/ e){
+			// summary:
+			//		Handler for mouseleave event on the target node
+			// tags:
+			//		private
+			this._onUnHover(e);
+		},
+
+		_onTargetFocus: function(/*Event*/ e){
+			// summary:
+			//		Handler for focus event on the target node
+			// tags:
+			//		private
+
+			this._focus = true;
+			this._onHover(e);
+		},
+
+		_onTargetBlur: function(/*Event*/ e){
+			// summary:
+			//		Handler for blur event on the target node
+			// tags:
+			//		private
+
+			this._focus = false;
+			this._onUnHover(e);
+		},
+
+		_onHover: function(/*Event*/ e){
+			// summary:
+			//		Despite the name of this method, it actually handles both hover and focus
+			//		events on the target node, setting a timer to show the tooltip.
+			// tags:
+			//		private
+			if(!this._showTimer){
+				var target = e.target;
+				this._showTimer = setTimeout(dojo.hitch(this, function(){this.open(target)}), this.showDelay);
+			}
+		},
+
+		_onUnHover: function(/*Event*/ e){
+			// summary:
+			//		Despite the name of this method, it actually handles both mouseleave and blur
+			//		events on the target node, hiding the tooltip.
+			// tags:
+			//		private
+
+			// keep a tooltip open if the associated element still has focus (even though the
+			// mouse moved away)
+			if(this._focus){ return; }
+
+			if(this._showTimer){
+				clearTimeout(this._showTimer);
+				delete this._showTimer;
+			}
+			this.close();
+		},
+
+		open: function(/*DomNode*/ target){
+ 			// summary:
+			//		Display the tooltip; usually not called directly.
+			// tags:
+			//		private
+
+			if(this._showTimer){
+				clearTimeout(this._showTimer);
+				delete this._showTimer;
+			}
+			dijit.showTooltip(this.label || this.domNode.innerHTML, target, this.position, !this.isLeftToRight());
+
+			this._connectNode = target;
+			this.onShow(target, this.position);
+		},
+
+		close: function(){
+			// summary:
+			//		Hide the tooltip or cancel timer for show of tooltip
+			// tags:
+			//		private
+
+			if(this._connectNode){
+				// if tooltip is currently shown
+				dijit.hideTooltip(this._connectNode);
+				delete this._connectNode;
+				this.onHide();
+			}
+			if(this._showTimer){
+				// if tooltip is scheduled to be shown (after a brief delay)
+				clearTimeout(this._showTimer);
+				delete this._showTimer;
+			}
+		},
+
+		onShow: function(target, position){
+			// summary:
+			//		Called when the tooltip is shown
+			// tags:
+			//		callback
+		},
+
+		onHide: function(){
+			// summary:
+			//		Called when the tooltip is hidden
+			// tags:
+			//		callback
+		},
+
+		uninitialize: function(){
+			this.close();
+			this.inherited(arguments);
+		}
+	}
+);
+
+// dijit.Tooltip.defaultPosition: String[]
+//		This variable controls the position of tooltips, if the position is not specified to
+//		the Tooltip widget or *TextBox widget itself.  It's an array of strings with the following values:
+//
+//			* before: places tooltip to the left of the target node/widget, or to the right in
+//			  the case of RTL scripts like Hebrew and Arabic
+//			* after: places tooltip to the right of the target node/widget, or to the left in
+//			  the case of RTL scripts like Hebrew and Arabic
+//			* above: tooltip goes above target node
+//			* below: tooltip goes below target node
+//
+//		The list is positions is tried, in order, until a position is found where the tooltip fits
+//		within the viewport.
+//
+//		Be careful setting this parameter.  A value of "above" may work fine until the user scrolls
+//		the screen so that there's no room above the target node.   Nodes with drop downs, like
+//		DropDownButton or FilteringSelect, are especially problematic, in that you need to be sure
+//		that the drop down and tooltip don't overlap, even when the viewport is scrolled so that there
+//		is only room below (or above) the target node, but not both.
+dijit.Tooltip.defaultPosition = ["after", "before"];
+
+}
+
+if(!dojo._hasResource["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ValidationTextBox"] = true;
+dojo.provide("dijit.form.ValidationTextBox");
+
+
+
+
+
+
+
+
+/*=====
+	dijit.form.ValidationTextBox.__Constraints = function(){
+		// locale: String
+		//		locale used for validation, picks up value from this widget's lang attribute
+		// _flags_: anything
+		//		various flags passed to regExpGen function
+		this.locale = "";
+		this._flags_ = "";
+	}
+=====*/
+
+dojo.declare(
+	"dijit.form.ValidationTextBox",
+	dijit.form.TextBox,
+	{
+		// summary:
+		//		Base class for textbox widgets with the ability to validate content of various types and provide user feedback.
+		// tags:
+		//		protected
+
+		templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),
+		baseClass: "dijitTextBox dijitValidationTextBox",
+
+		// required: Boolean
+		//		User is required to enter data into this field.
+		required: false,
+
+		// promptMessage: String
+		//		If defined, display this hint string immediately on focus to the textbox, if empty.
+		//		Think of this like a tooltip that tells the user what to do, not an error message
+		//		that tells the user what they've done wrong.
+		//
+		//		Message disappears when user starts typing.
+		promptMessage: "",
+
+		// invalidMessage: String
+		// 		The message to display if value is invalid.
+		//		The translated string value is read from the message file by default.
+		// 		Set to "" to use the promptMessage instead.
+		invalidMessage: "$_unset_$",
+
+		// missingMessage: String
+		// 		The message to display if value is empty and the field is required.
+		//		The translated string value is read from the message file by default.
+		// 		Set to "" to use the invalidMessage instead.
+		missingMessage: "$_unset_$",
+
+		// constraints: dijit.form.ValidationTextBox.__Constraints
+		//		user-defined object needed to pass parameters to the validator functions
+		constraints: {},
+
+		// regExp: [extension protected] String
+		//		regular expression string used to validate the input
+		//		Do not specify both regExp and regExpGen
+		regExp: ".*",
+
+		regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/constraints){
+			// summary:
+			//		Overridable function used to generate regExp when dependent on constraints.
+			//		Do not specify both regExp and regExpGen.
+			// tags:
+			//		extension protected
+			return this.regExp; // String
+		},
+
+		// state: [readonly] String
+		//		Shows current state (ie, validation result) of input (Normal, Warning, or Error)
+		state: "",
+
+		// tooltipPosition: String[]
+		//		See description of `dijit.Tooltip.defaultPosition` for details on this parameter.
+		tooltipPosition: [],
+
+		_setValueAttr: function(){
+			// summary:
+			//		Hook so attr('value', ...) works.
+			this.inherited(arguments);
+			this.validate(this._focused);
+		},
+
+		validator: function(/*anything*/value, /*dijit.form.ValidationTextBox.__Constraints*/constraints){
+			// summary:
+			//		Overridable function used to validate the text input against the regular expression.
+			// tags:
+			//		protected
+			return (new RegExp("^(?:" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) &&
+				(!this.required || !this._isEmpty(value)) &&
+				(this._isEmpty(value) || this.parse(value, constraints) !== undefined); // Boolean
+		},
+
+		_isValidSubset: function(){
+			// summary:
+			//		Returns true if the value is either already valid or could be made valid by appending characters.
+			//		This is used for validation while the user [may be] still typing.
+			return this.textbox.value.search(this._partialre) == 0;
+		},
+
+		isValid: function(/*Boolean*/ isFocused){
+			// summary:
+			//		Tests if value is valid.
+			//		Can override with your own routine in a subclass.
+			// tags:
+			//		protected
+			return this.validator(this.textbox.value, this.constraints);
+		},
+
+		_isEmpty: function(value){
+			// summary:
+			//		Checks for whitespace
+			return /^\s*$/.test(value); // Boolean
+		},
+
+		getErrorMessage: function(/*Boolean*/ isFocused){
+			// summary:
+			//		Return an error message to show if appropriate
+			// tags:
+			//		protected
+			return (this.required && this._isEmpty(this.textbox.value)) ? this.missingMessage : this.invalidMessage; // String
+		},
+
+		getPromptMessage: function(/*Boolean*/ isFocused){
+			// summary:
+			//		Return a hint message to show when widget is first focused
+			// tags:
+			//		protected
+			return this.promptMessage; // String
+		},
+
+		_maskValidSubsetError: true,
+		validate: function(/*Boolean*/ isFocused){
+			// summary:
+			//		Called by oninit, onblur, and onkeypress.
+			// description:
+			//		Show missing or invalid messages if appropriate, and highlight textbox field.
+			// tags:
+			//		protected
+			var message = "";
+			var isValid = this.disabled || this.isValid(isFocused);
+			if(isValid){ this._maskValidSubsetError = true; }
+			var isEmpty = this._isEmpty(this.textbox.value);
+			var isValidSubset = !isValid && !isEmpty && isFocused && this._isValidSubset();
+			this.state = ((isValid || ((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "" : "Error";
+			if(this.state == "Error"){ this._maskValidSubsetError = isFocused; } // we want the error to show up afer a blur and refocus
+			this._setStateClass();
+			dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
+			if(isFocused){
+				if(this.state == "Error"){
+					message = this.getErrorMessage(true);
+				}else{
+					message = this.getPromptMessage(true); // show the prompt whever there's no error
+				}
+				this._maskValidSubsetError = true; // since we're focused, always mask warnings
+			}
+			this.displayMessage(message);
+			return isValid;
+		},
+
+		// _message: String
+		//		Currently displayed message
+		_message: "",
+
+		displayMessage: function(/*String*/ message){
+			// summary:
+			//		Overridable method to display validation errors/hints.
+			//		By default uses a tooltip.
+			// tags:
+			//		extension
+			if(this._message == message){ return; }
+			this._message = message;
+			dijit.hideTooltip(this.domNode);
+			if(message){
+				dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
+			}
+		},
+
+		_refreshState: function(){
+			// Overrides TextBox._refreshState()
+			this.validate(this._focused);
+			this.inherited(arguments);
+		},
+
+		//////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+		constructor: function(){
+			this.constraints = {};
+		},
+
+		_setConstraintsAttr: function(/* Object */ constraints){
+			if(!constraints.locale && this.lang){
+				constraints.locale = this.lang;
+			}
+			this.constraints = constraints;
+			this._computePartialRE();
+		},
+
+		_computePartialRE: function(){
+			var p = this.regExpGen(this.constraints);
+			this.regExp = p;
+			var partialre = "";
+			// parse the regexp and produce a new regexp that matches valid subsets
+			// if the regexp is .* then there's no use in matching subsets since everything is valid
+			if(p != ".*"){ this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,
+				function (re){
+					switch(re.charAt(0)){
+						case '{':
+						case '+':
+						case '?':
+						case '*':
+						case '^':
+						case '$':
+						case '|':
+						case '(':
+							partialre += re;
+							break;
+						case ")":
+							partialre += "|$)";
+							break;
+						 default:
+							partialre += "(?:"+re+"|$)";
+							break;
+					}
+				}
+			);}
+			try{ // this is needed for now since the above regexp parsing needs more test verification
+				"".search(partialre);
+			}catch(e){ // should never be here unless the original RE is bad or the parsing is bad
+				partialre = this.regExp;
+				console.warn('RegExp error in ' + this.declaredClass + ': ' + this.regExp);
+			} // should never be here unless the original RE is bad or the parsing is bad
+			this._partialre = "^(?:" + partialre + ")$";
+		},
+
+		postMixInProperties: function(){
+			this.inherited(arguments);
+			this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
+			if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this.messages.invalidMessage; }
+			if(!this.invalidMessage){ this.invalidMessage = this.promptMessage; }
+			if(this.missingMessage == "$_unset_$"){ this.missingMessage = this.messages.missingMessage; }
+			if(!this.missingMessage){ this.missingMessage = this.invalidMessage; }
+			this._setConstraintsAttr(this.constraints); // this needs to happen now (and later) due to codependency on _set*Attr calls attachPoints
+		},
+
+		_setDisabledAttr: function(/*Boolean*/ value){
+			this.inherited(arguments);	// call FormValueWidget._setDisabledAttr()
+			this._refreshState();
+		},
+
+		_setRequiredAttr: function(/*Boolean*/ value){
+			this.required = value;
+			dijit.setWaiState(this.focusNode, "required", value);
+			this._refreshState();
+		},
+
+		reset:function(){
+			// Overrides dijit.form.TextBox.reset() by also
+			// hiding errors about partial matches
+			this._maskValidSubsetError = true;
+			this.inherited(arguments);
+		},
+
+		_onBlur: function(){
+			this.displayMessage('');
+			this.inherited(arguments);
+		}
+	}
+);
+
+dojo.declare(
+	"dijit.form.MappedTextBox",
+	dijit.form.ValidationTextBox,
+	{
+		// summary:
+		//		A dijit.form.ValidationTextBox subclass which provides a base class for widgets that have
+		//		a visible formatted display value, and a serializable
+		//		value in a hidden input field which is actually sent to the server.
+		// description:
+		//		The visible display may
+		//		be locale-dependent and interactive.  The value sent to the server is stored in a hidden
+		//		input field which uses the `name` attribute declared by the original widget.  That value sent
+		//		to the server is defined by the dijit.form.MappedTextBox.serialize method and is typically
+		//		locale-neutral.
+		// tags:
+		//		protected
+
+		postMixInProperties: function(){
+			this.inherited(arguments);
+
+			// we want the name attribute to go to the hidden <input>, not the displayed <input>,
+			// so override _FormWidget.postMixInProperties() setting of nameAttrSetting
+			this.nameAttrSetting = "";
+		},
+
+		serialize: function(/*anything*/val, /*Object?*/options){
+			// summary:
+			//		Overridable function used to convert the attr('value') result to a canonical
+			//		(non-localized) string.  For example, will print dates in ISO format, and
+			//		numbers the same way as they are represented in javascript.
+			// tags:
+			//		protected extension
+			return val.toString ? val.toString() : ""; // String
+		},
+
+		toString: function(){
+			// summary:
+			//		Returns widget as a printable string using the widget's value
+			// tags:
+			//		protected
+			var val = this.filter(this.get('value')); // call filter in case value is nonstring and filter has been customized
+			return val != null ? (typeof val == "string" ? val : this.serialize(val, this.constraints)) : ""; // String
+		},
+
+		validate: function(){
+			// Overrides `dijit.form.TextBox.validate`
+			this.valueNode.value = this.toString();
+			return this.inherited(arguments);
+		},
+
+		buildRendering: function(){
+			// Overrides `dijit._Templated.buildRendering`
+
+			this.inherited(arguments);
+
+			// Create a hidden <input> node with the serialized value used for submit
+			// (as opposed to the displayed value).
+			// Passing in name as markup rather than calling dojo.create() with an attrs argument
+			// to make dojo.query(input[name=...]) work on IE. (see #8660)
+			this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name + "'" : "") + ">", this.textbox, "after");
+		},
+
+		reset:function(){
+			// Overrides `dijit.form.ValidationTextBox.reset` to
+			// reset the hidden textbox value to ''
+			this.valueNode.value = '';
+			this.inherited(arguments);
+		}
+	}
+);
+
+/*=====
+	dijit.form.RangeBoundTextBox.__Constraints = function(){
+		// min: Number
+		//		Minimum signed value.  Default is -Infinity
+		// max: Number
+		//		Maximum signed value.  Default is +Infinity
+		this.min = min;
+		this.max = max;
+	}
+=====*/
+
+dojo.declare(
+	"dijit.form.RangeBoundTextBox",
+	dijit.form.MappedTextBox,
+	{
+		// summary:
+		//		Base class for textbox form widgets which defines a range of valid values.
+
+		// rangeMessage: String
+		//		The message to display if value is out-of-range
+		rangeMessage: "",
+
+		/*=====
+		// constraints: dijit.form.RangeBoundTextBox.__Constraints
+		constraints: {},
+		======*/
+
+		rangeCheck: function(/*Number*/ primitive, /*dijit.form.RangeBoundTextBox.__Constraints*/ constraints){
+			// summary:
+			//		Overridable function used to validate the range of the numeric input value.
+			// tags:
+			//		protected
+			return	("min" in constraints? (this.compare(primitive,constraints.min) >= 0) : true) &&
+				("max" in constraints? (this.compare(primitive,constraints.max) <= 0) : true); // Boolean
+		},
+
+		isInRange: function(/*Boolean*/ isFocused){
+			// summary:
+			//		Tests if the value is in the min/max range specified in constraints
+			// tags:
+			//		protected
+			return this.rangeCheck(this.get('value'), this.constraints);
+		},
+
+		_isDefinitelyOutOfRange: function(){
+			// summary:
+			//		Returns true if the value is out of range and will remain
+			//		out of range even if the user types more characters
+			var val = this.get('value');
+			var isTooLittle = false;
+			var isTooMuch = false;
+			if("min" in this.constraints){
+				var min = this.constraints.min;
+				min = this.compare(val, ((typeof min == "number") && min >= 0 && val !=0) ? 0 : min);
+				isTooLittle = (typeof min == "number") && min < 0;
+			}
+			if("max" in this.constraints){
+				var max = this.constraints.max;
+				max = this.compare(val, ((typeof max != "number") || max > 0) ? max : 0);
+				isTooMuch = (typeof max == "number") && max > 0;
+			}
+			return isTooLittle || isTooMuch;
+		},
+
+		_isValidSubset: function(){
+			// summary:
+			//		Overrides `dijit.form.ValidationTextBox._isValidSubset`.
+			//		Returns true if the input is syntactically valid, and either within
+			//		range or could be made in range by more typing.
+			return this.inherited(arguments) && !this._isDefinitelyOutOfRange();
+		},
+
+		isValid: function(/*Boolean*/ isFocused){
+			// Overrides dijit.form.ValidationTextBox.isValid to check that the value is also in range.
+			return this.inherited(arguments) &&
+				((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused)); // Boolean
+		},
+
+		getErrorMessage: function(/*Boolean*/ isFocused){
+			// Overrides dijit.form.ValidationTextBox.getErrorMessage to print "out of range" message if appropriate
+			var v = this.get('value');
+			if(v !== null && v !== '' && v !== undefined && (typeof v != "number" || !isNaN(v)) && !this.isInRange(isFocused)){ // don't check isInRange w/o a real value
+				return this.rangeMessage; // String
+			}
+			return this.inherited(arguments);
+		},
+
+		postMixInProperties: function(){
+			this.inherited(arguments);
+			if(!this.rangeMessage){
+				this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
+				this.rangeMessage = this.messages.rangeMessage;
+			}
+		},
+
+		_setConstraintsAttr: function(/* Object */ constraints){
+			this.inherited(arguments);
+			if(this.focusNode){ // not set when called from postMixInProperties
+				if(this.constraints.min !== undefined){
+					dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);
+				}else{
+					dijit.removeWaiState(this.focusNode, "valuemin");
+				}
+				if(this.constraints.max !== undefined){
+					dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);
+				}else{
+					dijit.removeWaiState(this.focusNode, "valuemax");
+				}
+			}
+		},
+
+		_setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){
+			// summary:
+			//		Hook so attr('value', ...) works.
+
+			dijit.setWaiState(this.focusNode, "valuenow", value);
+			this.inherited(arguments);
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form.ComboBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ComboBox"] = true;
+dojo.provide("dijit.form.ComboBox");
+
+
+
+
+
+
+
+
+
+
+
+
+dojo.declare(
+	"dijit.form.ComboBoxMixin",
+	null,
+	{
+		// summary:
+		//		Implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect`
+		// description:
+		//		All widgets that mix in dijit.form.ComboBoxMixin must extend `dijit.form._FormValueWidget`.
+		// tags:
+		//		protected
+
+		// item: Object
+		//		This is the item returned by the dojo.data.store implementation that
+		//		provides the data for this ComboBox, it's the currently selected item.
+		item: null,
+
+		// pageSize: Integer
+		//		Argument to data provider.
+		//		Specifies number of search results per page (before hitting "next" button)
+		pageSize: Infinity,
+
+		// store: Object
+		//		Reference to data provider object used by this ComboBox
+		store: null,
+
+		// fetchProperties: Object
+		//		Mixin to the dojo.data store's fetch.
+		//		For example, to set the sort order of the ComboBox menu, pass:
+		//	|	{ sort: {attribute:"name",descending: true} }
+		//		To override the default queryOptions so that deep=false, do:
+		//	|	{ queryOptions: {ignoreCase: true, deep: false} }
+		fetchProperties:{},
+
+		// query: Object
+		//		A query that can be passed to 'store' to initially filter the items,
+		//		before doing further filtering based on `searchAttr` and the key.
+		//		Any reference to the `searchAttr` is ignored.
+		query: {},
+
+		// autoComplete: Boolean
+		//		If user types in a partial string, and then tab out of the `<input>` box,
+		//		automatically copy the first entry displayed in the drop down list to
+		//		the `<input>` field
+		autoComplete: true,
+
+		// highlightMatch: String
+		// 		One of: "first", "all" or "none".
+		//
+		//		If the ComboBox/FilteringSelect opens with the search results and the searched
+		//		string can be found, it will be highlighted.  If set to "all"
+		//		then will probably want to change `queryExpr` parameter to '*${0}*'
+		//
+		//		Highlighting is only performed when `labelType` is "text", so as to not
+		//		interfere with any HTML markup an HTML label might contain.
+		highlightMatch: "first",
+
+		// searchDelay: Integer
+		//		Delay in milliseconds between when user types something and we start
+		//		searching based on that value
+		searchDelay: 100,
+
+		// searchAttr: String
+		//		Search for items in the data store where this attribute (in the item)
+		//		matches what the user typed
+		searchAttr: "name",
+
+		// labelAttr: String?
+		//		The entries in the drop down list come from this attribute in the
+		//		dojo.data items.
+		//		If not specified, the searchAttr attribute is used instead.
+		labelAttr: "",
+
+		// labelType: String
+		//		Specifies how to interpret the labelAttr in the data store items.
+		//		Can be "html" or "text".
+		labelType: "text",
+
+		// queryExpr: String
+		//		This specifies what query ComboBox/FilteringSelect sends to the data store,
+		//		based on what the user has typed.  Changing this expression will modify
+		//		whether the drop down shows only exact matches, a "starting with" match,
+		//		etc.   Use it in conjunction with highlightMatch.
+		//		dojo.data query expression pattern.
+		//		`${0}` will be substituted for the user text.
+		//		`*` is used for wildcards.
+		//		`${0}*` means "starts with", `*${0}*` means "contains", `${0}` means "is"
+		queryExpr: "${0}*",
+
+		// ignoreCase: Boolean
+		//		Set true if the ComboBox/FilteringSelect should ignore case when matching possible items
+		ignoreCase: true,
+
+		// hasDownArrow: [const] Boolean
+		//		Set this textbox to have a down arrow button, to display the drop down list.
+		//		Defaults to true.
+		hasDownArrow: true,
+
+		templateString: dojo.cache("dijit.form", "templates/ComboBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),
+
+		baseClass: "dijitTextBox dijitComboBox",
+
+		// Set classes like dijitDownArrowButtonHover depending on
+		// mouse action over button node
+		cssStateNodes: {
+			"downArrowNode": "dijitDownArrowButton"
+		},
+
+		_getCaretPos: function(/*DomNode*/ element){
+			// khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
+			var pos = 0;
+			if(typeof(element.selectionStart) == "number"){
+				// FIXME: this is totally borked on Moz < 1.3. Any recourse?
+				pos = element.selectionStart;
+			}else if(dojo.isIE){
+				// in the case of a mouse click in a popup being handled,
+				// then the dojo.doc.selection is not the textarea, but the popup
+				// var r = dojo.doc.selection.createRange();
+				// hack to get IE 6 to play nice. What a POS browser.
+				var tr = dojo.doc.selection.createRange().duplicate();
+				var ntr = element.createTextRange();
+				tr.move("character",0);
+				ntr.move("character",0);
+				try{
+					// If control doesnt have focus, you get an exception.
+					// Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
+					// There appears to be no workaround for this - googled for quite a while.
+					ntr.setEndPoint("EndToEnd", tr);
+					pos = String(ntr.text).replace(/\r/g,"").length;
+				}catch(e){
+					// If focus has shifted, 0 is fine for caret pos.
+				}
+			}
+			return pos;
+		},
+
+		_setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
+			location = parseInt(location);
+			dijit.selectInputText(element, location, location);
+		},
+
+		_setDisabledAttr: function(/*Boolean*/ value){
+			// Additional code to set disabled state of ComboBox node.
+			// Overrides _FormValueWidget._setDisabledAttr() or ValidationTextBox._setDisabledAttr().
+			this.inherited(arguments);
+			dijit.setWaiState(this.comboNode, "disabled", value);
+		},
+
+		_abortQuery: function(){
+			// stop in-progress query
+			if(this.searchTimer){
+				clearTimeout(this.searchTimer);
+				this.searchTimer = null;
+			}
+			if(this._fetchHandle){
+				if(this._fetchHandle.abort){ this._fetchHandle.abort(); }
+				this._fetchHandle = null;
+			}
+		},
+
+		_onInput: function(/*Event*/ evt){
+			// summary:
+			//		Handles paste events
+			if(!this.searchTimer && (evt.type == 'paste'/*IE|WebKit*/ || evt.type == 'input'/*Firefox*/) && this._lastInput != this.textbox.value){
+				this.searchTimer = setTimeout(dojo.hitch(this, function(){
+					this._onKeyPress({charOrCode: 229}); // fake IME key to cause a search
+				}), 100); // long delay that will probably be preempted by keyboard input
+			}
+			this.inherited(arguments);
+		},
+
+		_onKeyPress: function(/*Event*/ evt){
+			// summary:
+			//		Handles keyboard events
+			var key = evt.charOrCode;
+			// except for cutting/pasting case - ctrl + x/v
+			if(evt.altKey || ((evt.ctrlKey || evt.metaKey) && (key != 'x' && key != 'v')) || key == dojo.keys.SHIFT){
+				return; // throw out weird key combinations and spurious events
+			}
+			var doSearch = false;
+			var searchFunction = "_startSearchFromInput";
+			var pw = this._popupWidget;
+			var dk = dojo.keys;
+			var highlighted = null;
+			this._prev_key_backspace = false;
+			this._abortQuery();
+			if(this._isShowingNow){
+				pw.handleKey(key);
+				highlighted = pw.getHighlightedOption();
+			}
+			switch(key){
+				case dk.PAGE_DOWN:
+				case dk.DOWN_ARROW:
+				case dk.PAGE_UP:
+				case dk.UP_ARROW:
+					if(!this._isShowingNow){
+						doSearch = true;
+						searchFunction = "_startSearchAll";
+					}else{
+						this._announceOption(highlighted);
+					}
+					dojo.stopEvent(evt);
+					break;
+
+				case dk.ENTER:
+					// prevent submitting form if user presses enter. Also
+					// prevent accepting the value if either Next or Previous
+					// are selected
+					if(highlighted){
+						// only stop event on prev/next
+						if(highlighted == pw.nextButton){
+							this._nextSearch(1);
+							dojo.stopEvent(evt);
+							break;
+						}else if(highlighted == pw.previousButton){
+							this._nextSearch(-1);
+							dojo.stopEvent(evt);
+							break;
+						}
+					}else{
+						// Update 'value' (ex: KY) according to currently displayed text
+						this._setBlurValue(); // set value if needed
+						this._setCaretPos(this.focusNode, this.focusNode.value.length); // move cursor to end and cancel highlighting
+					}
+					// default case:
+					// prevent submit, but allow event to bubble
+					evt.preventDefault();
+					// fall through
+
+				case dk.TAB:
+					var newvalue = this.get('displayedValue');
+					//	if the user had More Choices selected fall into the
+					//	_onBlur handler
+					if(pw && (
+						newvalue == pw._messages["previousMessage"] ||
+						newvalue == pw._messages["nextMessage"])
+					){
+						break;
+					}
+					if(highlighted){
+						this._selectOption();
+					}
+					if(this._isShowingNow){
+						this._lastQuery = null; // in case results come back later
+						this._hideResultList();
+					}
+					break;
+
+				case ' ':
+					if(highlighted){
+						dojo.stopEvent(evt);
+						this._selectOption();
+						this._hideResultList();
+					}else{
+						doSearch = true;
+					}
+					break;
+
+				case dk.ESCAPE:
+					if(this._isShowingNow){
+						dojo.stopEvent(evt);
+						this._hideResultList();
+					}
+					break;
+
+				case dk.DELETE:
+				case dk.BACKSPACE:
+					this._prev_key_backspace = true;
+					doSearch = true;
+					break;
+
+				default:
+					// Non char keys (F1-F12 etc..)  shouldn't open list.
+					// Ascii characters and IME input (Chinese, Japanese etc.) should.
+					// On IE and safari, IME input produces keycode == 229, and we simulate
+					// it on firefox by attaching to compositionend event (see compositionend method)
+					doSearch = typeof key == 'string' || key == 229;
+			}
+			if(doSearch){
+				// need to wait a tad before start search so that the event
+				// bubbles through DOM and we have value visible
+				this.item = undefined; // undefined means item needs to be set
+				this.searchTimer = setTimeout(dojo.hitch(this, searchFunction),1);
+			}
+		},
+
+		_autoCompleteText: function(/*String*/ text){
+			// summary:
+			// 		Fill in the textbox with the first item from the drop down
+			// 		list, and highlight the characters that were
+			// 		auto-completed. For example, if user typed "CA" and the
+			// 		drop down list appeared, the textbox would be changed to
+			// 		"California" and "ifornia" would be highlighted.
+
+			var fn = this.focusNode;
+
+			// IE7: clear selection so next highlight works all the time
+			dijit.selectInputText(fn, fn.value.length);
+			// does text autoComplete the value in the textbox?
+			var caseFilter = this.ignoreCase? 'toLowerCase' : 'substr';
+			if(text[caseFilter](0).indexOf(this.focusNode.value[caseFilter](0)) == 0){
+				var cpos = this._getCaretPos(fn);
+				// only try to extend if we added the last character at the end of the input
+				if((cpos+1) > fn.value.length){
+					// only add to input node as we would overwrite Capitalisation of chars
+					// actually, that is ok
+					fn.value = text;//.substr(cpos);
+					// visually highlight the autocompleted characters
+					dijit.selectInputText(fn, cpos);
+				}
+			}else{
+				// text does not autoComplete; replace the whole value and highlight
+				fn.value = text;
+				dijit.selectInputText(fn);
+			}
+		},
+
+		_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
+			this._fetchHandle = null;
+			if(	this.disabled ||
+				this.readOnly ||
+				(dataObject.query[this.searchAttr] != this._lastQuery)
+			){
+				return;
+			}
+			this._popupWidget.clearResultList();
+			if(!results.length && !this._maxOptions){ // this condition needs to match !this._isvalid set in FilteringSelect::_openResultList
+				this._hideResultList();
+				return;
+			}
+
+
+			// Fill in the textbox with the first item from the drop down list,
+			// and highlight the characters that were auto-completed. For
+			// example, if user typed "CA" and the drop down list appeared, the
+			// textbox would be changed to "California" and "ifornia" would be
+			// highlighted.
+
+			dataObject._maxOptions = this._maxOptions;
+			var nodes = this._popupWidget.createOptions(
+				results,
+				dataObject,
+				dojo.hitch(this, "_getMenuLabelFromItem")
+			);
+
+			// show our list (only if we have content, else nothing)
+			this._showResultList();
+
+			// #4091:
+			//		tell the screen reader that the paging callback finished by
+			//		shouting the next choice
+			if(dataObject.direction){
+				if(1 == dataObject.direction){
+					this._popupWidget.highlightFirstOption();
+				}else if(-1 == dataObject.direction){
+					this._popupWidget.highlightLastOption();
+				}
+				this._announceOption(this._popupWidget.getHighlightedOption());
+			}else if(this.autoComplete && !this._prev_key_backspace /*&& !dataObject.direction*/
+				// when the user clicks the arrow button to show the full list,
+				// startSearch looks for "*".
+				// it does not make sense to autocomplete
+				// if they are just previewing the options available.
+				&& !/^[*]+$/.test(dataObject.query[this.searchAttr])){
+					this._announceOption(nodes[1]); // 1st real item
+			}
+		},
+
+		_showResultList: function(){
+			this._hideResultList();
+			// hide the tooltip
+			this.displayMessage("");
+
+			// Position the list and if it's too big to fit on the screen then
+			// size it to the maximum possible height
+			// Our dear friend IE doesnt take max-height so we need to
+			// calculate that on our own every time
+
+			// TODO: want to redo this, see
+			//		http://trac.dojotoolkit.org/ticket/3272
+			//	and
+			//		http://trac.dojotoolkit.org/ticket/4108
+
+
+			// natural size of the list has changed, so erase old
+			// width/height settings, which were hardcoded in a previous
+			// call to this function (via dojo.marginBox() call)
+			dojo.style(this._popupWidget.domNode, {width: "", height: ""});
+
+			var best = this.open();
+			// #3212:
+			//		only set auto scroll bars if necessary prevents issues with
+			//		scroll bars appearing when they shouldn't when node is made
+			//		wider (fractional pixels cause this)
+			var popupbox = dojo.marginBox(this._popupWidget.domNode);
+			this._popupWidget.domNode.style.overflow =
+				((best.h == popupbox.h) && (best.w == popupbox.w)) ? "hidden" : "auto";
+			// #4134:
+			//		borrow TextArea scrollbar test so content isn't covered by
+			//		scrollbar and horizontal scrollbar doesn't appear
+			var newwidth = best.w;
+			if(best.h < this._popupWidget.domNode.scrollHeight){
+				newwidth += 16;
+			}
+			dojo.marginBox(this._popupWidget.domNode, {
+				h: best.h,
+				w: Math.max(newwidth, this.domNode.offsetWidth)
+			});
+			
+			// If we increased the width of drop down to match the width of ComboBox.domNode,
+			// then need to reposition the drop down (wrapper) so (all of) the drop down still
+			// appears underneath the ComboBox.domNode
+			if(newwidth < this.domNode.offsetWidth){
+				this._popupWidget.domNode.parentNode.style.left = dojo.position(this.domNode, true).x + "px";
+			}
+
+			dijit.setWaiState(this.comboNode, "expanded", "true");
+		},
+
+		_hideResultList: function(){
+			this._abortQuery();
+			if(this._isShowingNow){
+				dijit.popup.close(this._popupWidget);
+				this._isShowingNow=false;
+				dijit.setWaiState(this.comboNode, "expanded", "false");
+				dijit.removeWaiState(this.focusNode,"activedescendant");
+			}
+		},
+
+		_setBlurValue: function(){
+			// if the user clicks away from the textbox OR tabs away, set the
+			// value to the textbox value
+			// #4617:
+			//		if value is now more choices or previous choices, revert
+			//		the value
+			var newvalue = this.get('displayedValue');
+			var pw = this._popupWidget;
+			if(pw && (
+				newvalue == pw._messages["previousMessage"] ||
+				newvalue == pw._messages["nextMessage"]
+				)
+			){
+				this._setValueAttr(this._lastValueReported, true);
+			}else if(typeof this.item == "undefined"){
+				// Update 'value' (ex: KY) according to currently displayed text
+				this.item = null;
+				this.set('displayedValue', newvalue);
+			}else{
+				if(this.value != this._lastValueReported){
+					dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true);
+				}
+				this._refreshState();
+			}
+		},
+
+		_onBlur: function(){
+			// summary:
+			//		Called magically when focus has shifted away from this widget and it's drop down
+			this._hideResultList();
+			this.inherited(arguments);
+		},
+
+		_setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
+			// summary:
+			//              Set the displayed valued in the input box, and the hidden value
+			//              that gets submitted, based on a dojo.data store item.
+			// description:
+			//              Users shouldn't call this function; they should be calling
+			//              attr('item', value)
+			// tags:
+			//              private
+			if(!displayedValue){ displayedValue = this.labelFunc(item, this.store); }
+			this.value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue;
+			this.item = item;
+			dijit.form.ComboBox.superclass._setValueAttr.call(this, this.value, priorityChange, displayedValue);
+		},
+
+		_announceOption: function(/*Node*/ node){
+			// summary:
+			//		a11y code that puts the highlighted option in the textbox.
+			//		This way screen readers will know what is happening in the
+			//		menu.
+
+			if(!node){
+				return;
+			}
+			// pull the text value from the item attached to the DOM node
+			var newValue;
+			if(node == this._popupWidget.nextButton ||
+				node == this._popupWidget.previousButton){
+				newValue = node.innerHTML;
+				this.item = undefined;
+				this.value = '';
+			}else{
+				newValue = this.labelFunc(node.item, this.store);
+				this.set('item', node.item, false, newValue);
+			}
+			// get the text that the user manually entered (cut off autocompleted text)
+			this.focusNode.value = this.focusNode.value.substring(0, this._lastInput.length);
+			// set up ARIA activedescendant
+			dijit.setWaiState(this.focusNode, "activedescendant", dojo.attr(node, "id"));
+			// autocomplete the rest of the option to announce change
+			this._autoCompleteText(newValue);
+		},
+
+		_selectOption: function(/*Event*/ evt){
+			// summary:
+			//		Menu callback function, called when an item in the menu is selected.
+			if(evt){
+				this._announceOption(evt.target);
+			}
+			this._hideResultList();
+			this._setCaretPos(this.focusNode, this.focusNode.value.length);
+			dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true); // set this.value and fire onChange
+		},
+
+		_onArrowMouseDown: function(evt){
+			// summary:
+			//		Callback when arrow is clicked
+			if(this.disabled || this.readOnly){
+				return;
+			}
+			dojo.stopEvent(evt);
+			this.focus();
+			if(this._isShowingNow){
+				this._hideResultList();
+			}else{
+				// forces full population of results, if they click
+				// on the arrow it means they want to see more options
+				this._startSearchAll();
+			}
+		},
+
+		_startSearchAll: function(){
+			this._startSearch('');
+		},
+
+		_startSearchFromInput: function(){
+			this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g, "\\$1"));
+		},
+
+		_getQueryString: function(/*String*/ text){
+			return dojo.string.substitute(this.queryExpr, [text]);
+		},
+
+		_startSearch: function(/*String*/ key){
+			if(!this._popupWidget){
+				var popupId = this.id + "_popup";
+				this._popupWidget = new dijit.form._ComboBoxMenu({
+					onChange: dojo.hitch(this, this._selectOption),
+					id: popupId,
+					dir: this.dir
+				});
+				dijit.removeWaiState(this.focusNode,"activedescendant");
+				dijit.setWaiState(this.textbox,"owns",popupId); // associate popup with textbox
+			}
+			// create a new query to prevent accidentally querying for a hidden
+			// value from FilteringSelect's keyField
+			var query = dojo.clone(this.query); // #5970
+			this._lastInput = key; // Store exactly what was entered by the user.
+			this._lastQuery = query[this.searchAttr] = this._getQueryString(key);
+			// #5970: set _lastQuery, *then* start the timeout
+			// otherwise, if the user types and the last query returns before the timeout,
+			// _lastQuery won't be set and their input gets rewritten
+			this.searchTimer=setTimeout(dojo.hitch(this, function(query, _this){
+				this.searchTimer = null;
+				var fetch = {
+					queryOptions: {
+						ignoreCase: this.ignoreCase,
+						deep: true
+					},
+					query: query,
+					onBegin: dojo.hitch(this, "_setMaxOptions"),
+					onComplete: dojo.hitch(this, "_openResultList"),
+					onError: function(errText){
+						_this._fetchHandle = null;
+						console.error('dijit.form.ComboBox: ' + errText);
+						dojo.hitch(_this, "_hideResultList")();
+					},
+					start: 0,
+					count: this.pageSize
+				};
+				dojo.mixin(fetch, _this.fetchProperties);
+				this._fetchHandle = _this.store.fetch(fetch);
+
+				var nextSearch = function(dataObject, direction){
+					dataObject.start += dataObject.count*direction;
+					// #4091:
+					//		tell callback the direction of the paging so the screen
+					//		reader knows which menu option to shout
+					dataObject.direction = direction;
+					this._fetchHandle = this.store.fetch(dataObject);
+				};
+				this._nextSearch = this._popupWidget.onPage = dojo.hitch(this, nextSearch, this._fetchHandle);
+			}, query, this), this.searchDelay);
+		},
+
+		_setMaxOptions: function(size, request){
+			 this._maxOptions = size;
+		},
+
+		_getValueField: function(){
+			// summmary:
+			//		Helper for postMixInProperties() to set this.value based on data inlined into the markup.
+			//		Returns the attribute name in the item (in dijit.form._ComboBoxDataStore) to use as the value.
+			return this.searchAttr;
+		},
+
+		/////////////// Event handlers /////////////////////
+
+		// FIXME: For 2.0, rename to "_compositionEnd"
+		compositionend: function(/*Event*/ evt){
+			// summary:
+			//		When inputting characters using an input method, such as
+			//		Asian languages, it will generate this event instead of
+			//		onKeyDown event.
+			//		Note: this event is only triggered in FF (not in IE/safari)
+			// tags:
+			//		private
+
+			// 229 is the code produced by IE and safari while pressing keys during
+			// IME input mode
+			this._onKeyPress({charOrCode: 229});
+		},
+
+		//////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+		constructor: function(){
+			this.query={};
+			this.fetchProperties={};
+		},
+
+		postMixInProperties: function(){
+			if(!this.store){
+				var srcNodeRef = this.srcNodeRef;
+
+				// if user didn't specify store, then assume there are option tags
+				this.store = new dijit.form._ComboBoxDataStore(srcNodeRef);
+
+				// if there is no value set and there is an option list, set
+				// the value to the first value to be consistent with native
+				// Select
+
+				// Firefox and Safari set value
+				// IE6 and Opera set selectedIndex, which is automatically set
+				// by the selected attribute of an option tag
+				// IE6 does not set value, Opera sets value = selectedIndex
+				if(!("value" in this.params)){
+					var item = this.store.fetchSelectedItem();
+					if(item){
+						var valueField = this._getValueField();
+						this.value = valueField != this.searchAttr? this.store.getValue(item, valueField) : this.labelFunc(item, this.store);
+					}
+				}
+			}
+			this.inherited(arguments);
+		},
+
+		postCreate: function(){
+			// summary:
+			//		Subclasses must call this method from their postCreate() methods
+			// tags:
+			//		protected
+
+			if(!this.hasDownArrow){
+				this.downArrowNode.style.display = "none";
+			}
+
+			// find any associated label element and add to ComboBox node.
+			var label=dojo.query('label[for="'+this.id+'"]');
+			if(label.length){
+				label[0].id = (this.id+"_label");
+				var cn=this.comboNode;
+				dijit.setWaiState(cn, "labelledby", label[0].id);
+
+			}
+			this.inherited(arguments);
+		},
+
+		uninitialize: function(){
+			if(this._popupWidget && !this._popupWidget._destroyed){
+				this._hideResultList();
+				this._popupWidget.destroy();
+			}
+			this.inherited(arguments);
+		},
+
+		_getMenuLabelFromItem: function(/*Item*/ item){
+			var label = this.labelAttr? this.store.getValue(item, this.labelAttr) : this.labelFunc(item, this.store);
+			var labelType = this.labelType;
+			// If labelType is not "text" we don't want to screw any markup ot whatever.
+			if(this.highlightMatch != "none" && this.labelType == "text" && this._lastInput){
+				label = this.doHighlight(label, this._escapeHtml(this._lastInput));
+				labelType = "html";
+			}
+			return {html: labelType == "html", label: label};
+		},
+
+		doHighlight: function(/*String*/label, /*String*/find){
+			// summary:
+			//		Highlights the string entered by the user in the menu.  By default this
+			//		highlights the first occurence found. Override this method
+			//		to implement your custom highlighing.
+			// tags:
+			//		protected
+
+			// Add greedy when this.highlightMatch == "all"
+			var modifiers = "i"+(this.highlightMatch == "all"?"g":"");
+			var escapedLabel = this._escapeHtml(label);
+			find = dojo.regexp.escapeString(find); // escape regexp special chars
+			var ret = escapedLabel.replace(new RegExp("(^|\\s)("+ find +")", modifiers),
+					'$1<span class="dijitComboBoxHighlightMatch">$2</span>');
+			return ret;// returns String, (almost) valid HTML (entities encoded)
+		},
+
+		_escapeHtml: function(/*string*/str){
+			// TODO Should become dojo.html.entities(), when exists use instead
+			// summary:
+			//		Adds escape sequences for special characters in XML: &<>"'
+			str = String(str).replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
+				.replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
+			return str; // string
+		},
+
+		open: function(){
+			// summary:
+			//		Opens the drop down menu.  TODO: rename to _open.
+			// tags:
+			//		private
+			this._isShowingNow=true;
+			return dijit.popup.open({
+				popup: this._popupWidget,
+				around: this.domNode,
+				parent: this
+			});
+		},
+
+		reset: function(){
+			// Overrides the _FormWidget.reset().
+			// Additionally reset the .item (to clean up).
+			this.item = null;
+			this.inherited(arguments);
+		},
+
+		labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){
+			// summary:
+			//              Computes the label to display based on the dojo.data store item.
+			// returns:
+			//              The label that the ComboBox should display
+			// tags:
+			//              private
+
+			// Use toString() because XMLStore returns an XMLItem whereas this
+			// method is expected to return a String (#9354)
+			return store.getValue(item, this.searchAttr).toString(); // String
+		}
+	}
+);
+
+dojo.declare(
+	"dijit.form._ComboBoxMenu",
+	[dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+	{
+		// summary:
+		//		Focus-less menu for internal use in `dijit.form.ComboBox`
+		// tags:
+		//		private
+
+		templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"
+				+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"
+				+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"
+			+"</ul>",
+
+		// _messages: Object
+		//		Holds "next" and "previous" text for paging buttons on drop down
+		_messages: null,
+		
+		baseClass: "dijitComboBoxMenu",
+
+		postMixInProperties: function(){
+			this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
+			this.inherited(arguments);
+		},
+
+		_setValueAttr: function(/*Object*/ value){
+			this.value = value;
+			this.onChange(value);
+		},
+
+		// stubs
+		onChange: function(/*Object*/ value){
+			// summary:
+			//		Notifies ComboBox/FilteringSelect that user clicked an option in the drop down menu.
+			//		Probably should be called onSelect.
+			// tags:
+			//		callback
+		},
+		onPage: function(/*Number*/ direction){
+			// summary:
+			//		Notifies ComboBox/FilteringSelect that user clicked to advance to next/previous page.
+			// tags:
+			//		callback
+		},
+
+		postCreate: function(){
+			// fill in template with i18n messages
+			this.previousButton.innerHTML = this._messages["previousMessage"];
+			this.nextButton.innerHTML = this._messages["nextMessage"];
+			this.inherited(arguments);
+		},
+
+		onClose: function(){
+			// summary:
+			//		Callback from dijit.popup code to this widget, notifying it that it closed
+			// tags:
+			//		private
+			this._blurOptionNode();
+		},
+
+		_createOption: function(/*Object*/ item, labelFunc){
+			// summary:
+			//		Creates an option to appear on the popup menu subclassed by
+			//		`dijit.form.FilteringSelect`.
+
+			var labelObject = labelFunc(item);
+			var menuitem = dojo.doc.createElement("li");
+			dijit.setWaiRole(menuitem, "option");
+			if(labelObject.html){
+				menuitem.innerHTML = labelObject.label;
+			}else{
+				menuitem.appendChild(
+					dojo.doc.createTextNode(labelObject.label)
+				);
+			}
+			// #3250: in blank options, assign a normal height
+			if(menuitem.innerHTML == ""){
+				menuitem.innerHTML = "&nbsp;";
+			}
+			menuitem.item=item;
+			return menuitem;
+		},
+
+		createOptions: function(results, dataObject, labelFunc){
+			// summary:
+			//		Fills in the items in the drop down list
+			// results:
+			//		Array of dojo.data items
+			// dataObject:
+			//		dojo.data store
+			// labelFunc:
+			//		Function to produce a label in the drop down list from a dojo.data item
+
+			//this._dataObject=dataObject;
+			//this._dataObject.onComplete=dojo.hitch(comboBox, comboBox._openResultList);
+			// display "Previous . . ." button
+			this.previousButton.style.display = (dataObject.start == 0) ? "none" : "";
+			dojo.attr(this.previousButton, "id", this.id + "_prev");
+			// create options using _createOption function defined by parent
+			// ComboBox (or FilteringSelect) class
+			// #2309:
+			//		iterate over cache nondestructively
+			dojo.forEach(results, function(item, i){
+				var menuitem = this._createOption(item, labelFunc);
+				menuitem.className = "dijitReset dijitMenuItem" +
+					(this.isLeftToRight() ? "" : " dijitMenuItemRtl");
+				dojo.attr(menuitem, "id", this.id + i);
+				this.domNode.insertBefore(menuitem, this.nextButton);
+			}, this);
+			// display "Next . . ." button
+			var displayMore = false;
+			//Try to determine if we should show 'more'...
+			if(dataObject._maxOptions && dataObject._maxOptions != -1){
+				if((dataObject.start + dataObject.count) < dataObject._maxOptions){
+					displayMore = true;
+				}else if((dataObject.start + dataObject.count) > dataObject._maxOptions && dataObject.count == results.length){
+					//Weird return from a datastore, where a start + count > maxOptions
+					// implies maxOptions isn't really valid and we have to go into faking it.
+					//And more or less assume more if count == results.length
+					displayMore = true;
+				}
+			}else if(dataObject.count == results.length){
+				//Don't know the size, so we do the best we can based off count alone.
+				//So, if we have an exact match to count, assume more.
+				displayMore = true;
+			}
+
+			this.nextButton.style.display = displayMore ? "" : "none";
+			dojo.attr(this.nextButton,"id", this.id + "_next");
+			return this.domNode.childNodes;
+		},
+
+		clearResultList: function(){
+			// summary:
+			//		Clears the entries in the drop down list, but of course keeps the previous and next buttons.
+			while(this.domNode.childNodes.length>2){
+				this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
+			}
+		},
+
+		_onMouseDown: function(/*Event*/ evt){
+			dojo.stopEvent(evt);
+		},
+
+		_onMouseUp: function(/*Event*/ evt){
+			if(evt.target === this.domNode || !this._highlighted_option){
+				return;
+			}else if(evt.target == this.previousButton){
+				this.onPage(-1);
+			}else if(evt.target == this.nextButton){
+				this.onPage(1);
+			}else{
+				var tgt = evt.target;
+				// while the clicked node is inside the div
+				while(!tgt.item){
+					// recurse to the top
+					tgt = tgt.parentNode;
+				}
+				this._setValueAttr({ target: tgt }, true);
+			}
+		},
+
+		_onMouseOver: function(/*Event*/ evt){
+			if(evt.target === this.domNode){ return; }
+			var tgt = evt.target;
+			if(!(tgt == this.previousButton || tgt == this.nextButton)){
+				// while the clicked node is inside the div
+				while(!tgt.item){
+					// recurse to the top
+					tgt = tgt.parentNode;
+				}
+			}
+			this._focusOptionNode(tgt);
+		},
+
+		_onMouseOut: function(/*Event*/ evt){
+			if(evt.target === this.domNode){ return; }
+			this._blurOptionNode();
+		},
+
+		_focusOptionNode: function(/*DomNode*/ node){
+			// summary:
+			//		Does the actual highlight.
+			if(this._highlighted_option != node){
+				this._blurOptionNode();
+				this._highlighted_option = node;
+				dojo.addClass(this._highlighted_option, "dijitMenuItemSelected");
+			}
+		},
+
+		_blurOptionNode: function(){
+			// summary:
+			//		Removes highlight on highlighted option.
+			if(this._highlighted_option){
+				dojo.removeClass(this._highlighted_option, "dijitMenuItemSelected");
+				this._highlighted_option = null;
+			}
+		},
+
+		_highlightNextOption: function(){
+			// summary:
+			// 		Highlight the item just below the current selection.
+			// 		If nothing selected, highlight first option.
+
+			// because each press of a button clears the menu,
+			// the highlighted option sometimes becomes detached from the menu!
+			// test to see if the option has a parent to see if this is the case.
+			if(!this.getHighlightedOption()){
+				var fc = this.domNode.firstChild;
+				this._focusOptionNode(fc.style.display == "none" ? fc.nextSibling : fc);
+			}else{
+				var ns = this._highlighted_option.nextSibling;
+				if(ns && ns.style.display != "none"){
+					this._focusOptionNode(ns);
+				}else{
+					this.highlightFirstOption();
+				}
+			}
+			// scrollIntoView is called outside of _focusOptionNode because in IE putting it inside causes the menu to scroll up on mouseover
+			dojo.window.scrollIntoView(this._highlighted_option);
+		},
+
+		highlightFirstOption: function(){
+			// summary:
+			// 		Highlight the first real item in the list (not Previous Choices).
+			var first = this.domNode.firstChild;
+			var second = first.nextSibling;
+			this._focusOptionNode(second.style.display == "none" ? first : second); // remotely possible that Previous Choices is the only thing in the list
+			dojo.window.scrollIntoView(this._highlighted_option);
+		},
+
+		highlightLastOption: function(){
+			// summary:
+			// 		Highlight the last real item in the list (not More Choices).
+			this._focusOptionNode(this.domNode.lastChild.previousSibling);
+			dojo.window.scrollIntoView(this._highlighted_option);
+		},
+
+		_highlightPrevOption: function(){
+			// summary:
+			// 		Highlight the item just above the current selection.
+			// 		If nothing selected, highlight last option (if
+			// 		you select Previous and try to keep scrolling up the list).
+			if(!this.getHighlightedOption()){
+				var lc = this.domNode.lastChild;
+				this._focusOptionNode(lc.style.display == "none" ? lc.previousSibling : lc);
+			}else{
+				var ps = this._highlighted_option.previousSibling;
+				if(ps && ps.style.display != "none"){
+					this._focusOptionNode(ps);
+				}else{
+					this.highlightLastOption();
+				}
+			}
+			dojo.window.scrollIntoView(this._highlighted_option);
+		},
+
+		_page: function(/*Boolean*/ up){
+			// summary:
+			//		Handles page-up and page-down keypresses
+
+			var scrollamount = 0;
+			var oldscroll = this.domNode.scrollTop;
+			var height = dojo.style(this.domNode, "height");
+			// if no item is highlighted, highlight the first option
+			if(!this.getHighlightedOption()){
+				this._highlightNextOption();
+			}
+			while(scrollamount<height){
+				if(up){
+					// stop at option 1
+					if(!this.getHighlightedOption().previousSibling ||
+						this._highlighted_option.previousSibling.style.display == "none"){
+						break;
+					}
+					this._highlightPrevOption();
+				}else{
+					// stop at last option
+					if(!this.getHighlightedOption().nextSibling ||
+						this._highlighted_option.nextSibling.style.display == "none"){
+						break;
+					}
+					this._highlightNextOption();
+				}
+				// going backwards
+				var newscroll=this.domNode.scrollTop;
+				scrollamount+=(newscroll-oldscroll)*(up ? -1:1);
+				oldscroll=newscroll;
+			}
+		},
+
+		pageUp: function(){
+			// summary:
+			//		Handles pageup keypress.
+			//		TODO: just call _page directly from handleKey().
+			// tags:
+			//		private
+			this._page(true);
+		},
+
+		pageDown: function(){
+			// summary:
+			//		Handles pagedown keypress.
+			//		TODO: just call _page directly from handleKey().
+			// tags:
+			//		private
+			this._page(false);
+		},
+
+		getHighlightedOption: function(){
+			// summary:
+			//		Returns the highlighted option.
+			var ho = this._highlighted_option;
+			return (ho && ho.parentNode) ? ho : null;
+		},
+
+		handleKey: function(key){
+			switch(key){
+				case dojo.keys.DOWN_ARROW:
+					this._highlightNextOption();
+					break;
+				case dojo.keys.PAGE_DOWN:
+					this.pageDown();
+					break;
+				case dojo.keys.UP_ARROW:
+					this._highlightPrevOption();
+					break;
+				case dojo.keys.PAGE_UP:
+					this.pageUp();
+					break;
+			}
+		}
+	}
+);
+
+dojo.declare(
+	"dijit.form.ComboBox",
+	[dijit.form.ValidationTextBox, dijit.form.ComboBoxMixin],
+	{
+		// summary:
+		//		Auto-completing text box, and base class for dijit.form.FilteringSelect.
+		//
+		// description:
+		//		The drop down box's values are populated from an class called
+		//		a data provider, which returns a list of values based on the characters
+		//		that the user has typed into the input box.
+		//		If OPTION tags are used as the data provider via markup,
+		//		then the OPTION tag's child text node is used as the widget value
+		//		when selected.  The OPTION tag's value attribute is ignored.
+		//		To set the default value when using OPTION tags, specify the selected
+		//		attribute on 1 of the child OPTION tags.
+		//
+		//		Some of the options to the ComboBox are actually arguments to the data
+		//		provider.
+
+		_setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
+			// summary:
+			//		Hook so attr('value', value) works.
+			// description:
+			//		Sets the value of the select.
+			this.item = null; // value not looked up in store
+			if(!value){ value = ''; } // null translates to blank
+			dijit.form.ValidationTextBox.prototype._setValueAttr.call(this, value, priorityChange, displayedValue);
+		}
+	}
+);
+
+dojo.declare("dijit.form._ComboBoxDataStore", null, {
+	// summary:
+	//		Inefficient but small data store specialized for inlined `dijit.form.ComboBox` data
+	//
+	// description:
+	//		Provides a store for inlined data like:
+	//
+	//	|	<select>
+	//	|		<option value="AL">Alabama</option>
+	//	|		...
+	//
+	//		Actually. just implements the subset of dojo.data.Read/Notification
+	//		needed for ComboBox and FilteringSelect to work.
+	//
+	//		Note that an item is just a pointer to the <option> DomNode.
+
+	constructor: function( /*DomNode*/ root){
+		this.root = root;
+		if(root.tagName != "SELECT" && root.firstChild){
+			root = dojo.query("select", root);
+			if(root.length > 0){ // SELECT is a child of srcNodeRef
+				root = root[0];
+			}else{ // no select, so create 1 to parent the option tags to define selectedIndex
+				this.root.innerHTML = "<SELECT>"+this.root.innerHTML+"</SELECT>";
+				root = this.root.firstChild;
+			}
+			this.root = root;
+		}
+		dojo.query("> option", root).forEach(function(node){
+			//	TODO: this was added in #3858 but unclear why/if it's needed;  doesn't seem to be.
+			//	If it is needed then can we just hide the select itself instead?
+			//node.style.display="none";
+			node.innerHTML = dojo.trim(node.innerHTML);
+		});
+
+	},
+
+	getValue: function(	/* item */ item,
+						/* attribute-name-string */ attribute,
+						/* value? */ defaultValue){
+		return (attribute == "value") ? item.value : (item.innerText || item.textContent || '');
+	},
+
+	isItemLoaded: function(/* anything */ something){
+		return true;
+	},
+
+	getFeatures: function(){
+		return {"dojo.data.api.Read": true, "dojo.data.api.Identity": true};
+	},
+
+	_fetchItems: function(	/* Object */ args,
+							/* Function */ findCallback,
+							/* Function */ errorCallback){
+		// summary:
+		//		See dojo.data.util.simpleFetch.fetch()
+		if(!args.query){ args.query = {}; }
+		if(!args.query.name){ args.query.name = ""; }
+		if(!args.queryOptions){ args.queryOptions = {}; }
+		var matcher = dojo.data.util.filter.patternToRegExp(args.query.name, args.queryOptions.ignoreCase),
+			items = dojo.query("> option", this.root).filter(function(option){
+				return (option.innerText || option.textContent || '').match(matcher);
+			} );
+		if(args.sort){
+			items.sort(dojo.data.util.sorter.createSortFunction(args.sort, this));
+		}
+		findCallback(items, args);
+	},
+
+	close: function(/*dojo.data.api.Request || args || null */ request){
+		return;
+	},
+
+	getLabel: function(/* item */ item){
+		return item.innerHTML;
+	},
+
+	getIdentity: function(/* item */ item){
+		return dojo.attr(item, "value");
+	},
+
+	fetchItemByIdentity: function(/* Object */ args){
+		// summary:
+		//		Given the identity of an item, this method returns the item that has
+		//		that identity through the onItem callback.
+		//		Refer to dojo.data.api.Identity.fetchItemByIdentity() for more details.
+		//
+		// description:
+		//		Given arguments like:
+		//
+		//	|		{identity: "CA", onItem: function(item){...}
+		//
+		//		Call `onItem()` with the DOM node `<option value="CA">California</option>`
+		var item = dojo.query("> option[value='" + args.identity + "']", this.root)[0];
+		args.onItem(item);
+	},
+
+	fetchSelectedItem: function(){
+		// summary:
+		//		Get the option marked as selected, like `<option selected>`.
+		//		Not part of dojo.data API.
+		var root = this.root,
+			si = root.selectedIndex;
+		return typeof si == "number"
+			? dojo.query("> option:nth-child(" + (si != -1 ? si+1 : 1) + ")", root)[0]
+			: null;	// dojo.data.Item
+	}
+});
+//Mix in the simple fetch implementation to this class.
+dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);
+
+}
+
+if(!dojo._hasResource["dijit.form.FilteringSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.FilteringSelect"] = true;
+dojo.provide("dijit.form.FilteringSelect");
+
+
+
+dojo.declare(
+	"dijit.form.FilteringSelect",
+	[dijit.form.MappedTextBox, dijit.form.ComboBoxMixin],
+	{
+		// summary:
+		//		An enhanced version of the HTML SELECT tag, populated dynamically
+		//
+		// description:
+		//		An enhanced version of the HTML SELECT tag, populated dynamically. It works
+		//		very nicely with very large data sets because it can load and page data as needed.
+		//		It also resembles ComboBox, but does not allow values outside of the provided ones.
+		//		If OPTION tags are used as the data provider via markup, then the
+		//		OPTION tag's child text node is used as the displayed value when selected
+		//		while the OPTION tag's value attribute is used as the widget value on form submit.
+		//		To set the default value when using OPTION tags, specify the selected
+		//		attribute on 1 of the child OPTION tags.
+		//
+		//		Similar features:
+		//			- There is a drop down list of possible values.
+		//			- You can only enter a value from the drop down list.  (You can't
+		//				enter an arbitrary value.)
+		//			- The value submitted with the form is the hidden value (ex: CA),
+		//				not the displayed value a.k.a. label (ex: California)
+		//
+		//		Enhancements over plain HTML version:
+		//			- If you type in some text then it will filter down the list of
+		//				possible values in the drop down list.
+		//			- List can be specified either as a static list or via a javascript
+		//				function (that can get the list from a server)
+
+		_isvalid: true,
+
+		// required: Boolean
+		//		True (default) if user is required to enter a value into this field.
+		required: true,
+
+		_lastDisplayedValue: "",
+
+		isValid: function(){
+			// Overrides ValidationTextBox.isValid()
+			return this._isvalid || (!this.required && this.get('displayedValue') == ""); // #5974
+		},
+
+		_refreshState: function(){
+			if(!this.searchTimer){ // state will be refreshed after results are returned
+				this.inherited(arguments);
+			}
+		},
+
+		_callbackSetLabel: function(	/*Array*/ result,
+						/*Object*/ dataObject,
+						/*Boolean?*/ priorityChange){
+			// summary:
+			//		Callback function that dynamically sets the label of the
+			//		ComboBox
+
+			// setValue does a synchronous lookup,
+			// so it calls _callbackSetLabel directly,
+			// and so does not pass dataObject
+			// still need to test against _lastQuery in case it came too late
+			if((dataObject && dataObject.query[this.searchAttr] != this._lastQuery) || (!dataObject && result.length && this.store.getIdentity(result[0]) != this._lastQuery)){
+				return;
+			}
+			if(!result.length){
+				//#3268: do nothing on bad input
+				//#3285: change CSS to indicate error
+				this.valueNode.value = "";
+				dijit.form.TextBox.superclass._setValueAttr.call(this, "", priorityChange || (priorityChange === undefined && !this._focused));
+				this._isvalid = false;
+				this.validate(this._focused);
+				this.item = null;
+			}else{
+				this.set('item', result[0], priorityChange);
+			}
+		},
+
+		_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
+			// Overrides ComboBox._openResultList()
+
+			// #3285: tap into search callback to see if user's query resembles a match
+			if(dataObject.query[this.searchAttr] != this._lastQuery){
+				return;
+			}
+			if(this.item === undefined){ // item == undefined for keyboard search
+				this._isvalid = results.length != 0 || this._maxOptions != 0; // result.length==0 && maxOptions != 0 implies the nextChoices item selected but then the datastore returned 0 more entries
+				this.validate(true);
+			}
+			dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
+		},
+
+		_getValueAttr: function(){
+			// summary:
+			//		Hook for attr('value') to work.
+
+			// don't get the textbox value but rather the previously set hidden value.
+			// Use this.valueNode.value which isn't always set for other MappedTextBox widgets until blur
+			return this.valueNode.value;
+		},
+
+		_getValueField: function(){
+			// Overrides ComboBox._getValueField()
+			return "value";
+		},
+
+		_setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
+			// summary:
+			//		Hook so attr('value', value) works.
+			// description:
+			//		Sets the value of the select.
+			//		Also sets the label to the corresponding value by reverse lookup.
+			if(!this._onChangeActive){ priorityChange = null; }
+			this._lastQuery = value;
+
+			if(value === null || value === ''){
+				this._setDisplayedValueAttr('', priorityChange);
+				return;
+			}
+
+			//#3347: fetchItemByIdentity if no keyAttr specified
+			var self = this;
+			this.store.fetchItemByIdentity({
+				identity: value,
+				onItem: function(item){
+					self._callbackSetLabel(item? [item] : [], undefined, priorityChange);
+				}
+			});
+		},
+
+		_setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){
+			// summary:
+			//		Set the displayed valued in the input box, and the hidden value
+			//		that gets submitted, based on a dojo.data store item.
+			// description:
+			//		Users shouldn't call this function; they should be calling
+			//		attr('item', value)
+			// tags:
+			//		private
+			this._isvalid = true;
+			this.inherited(arguments);
+			this.valueNode.value = this.value;
+			this._lastDisplayedValue = this.textbox.value;
+		},
+
+		_getDisplayQueryString: function(/*String*/ text){
+			return text.replace(/([\\\*\?])/g, "\\$1");
+		},
+
+		_setDisplayedValueAttr: function(/*String*/ label, /*Boolean?*/ priorityChange){
+			// summary:
+			//		Hook so attr('displayedValue', label) works.
+			// description:
+			//		Sets textbox to display label. Also performs reverse lookup
+			//		to set the hidden value.
+
+			// When this is called during initialization it'll ping the datastore
+			// for reverse lookup, and when that completes (after an XHR request)
+			// will call setValueAttr()... but that shouldn't trigger an onChange()
+			// event, even when it happens after creation has finished
+			if(!this._created){
+				priorityChange = false;
+			}
+
+			if(this.store){
+				this._hideResultList();
+				var query = dojo.clone(this.query); // #6196: populate query with user-specifics
+				// escape meta characters of dojo.data.util.filter.patternToRegExp().
+				this._lastQuery = query[this.searchAttr] = this._getDisplayQueryString(label);
+				// if the label is not valid, the callback will never set it,
+				// so the last valid value will get the warning textbox set the
+				// textbox value now so that the impending warning will make
+				// sense to the user
+				this.textbox.value = label;
+				this._lastDisplayedValue = label;
+				var _this = this;
+				var fetch = {
+					query: query,
+					queryOptions: {
+						ignoreCase: this.ignoreCase,
+						deep: true
+					},
+					onComplete: function(result, dataObject){
+						_this._fetchHandle = null;
+						dojo.hitch(_this, "_callbackSetLabel")(result, dataObject, priorityChange);
+					},
+					onError: function(errText){
+						_this._fetchHandle = null;
+						console.error('dijit.form.FilteringSelect: ' + errText);
+						dojo.hitch(_this, "_callbackSetLabel")([], undefined, false);
+					}
+				};
+				dojo.mixin(fetch, this.fetchProperties);
+				this._fetchHandle = this.store.fetch(fetch);
+			}
+		},
+
+		postMixInProperties: function(){
+			this.inherited(arguments);
+			this._isvalid = !this.required;
+		},
+
+		undo: function(){
+			this.set('displayedValue', this._lastDisplayedValue);
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.data.ItemFileReadStore"] = true;
+dojo.provide("dojo.data.ItemFileReadStore");
+
+
+
+
+
+dojo.declare("dojo.data.ItemFileReadStore", null,{
+	//	summary:
+	//		The ItemFileReadStore implements the dojo.data.api.Read API and reads
+	//		data from JSON files that have contents in this format --
+	//		{ items: [
+	//			{ name:'Kermit', color:'green', age:12, friends:['Gonzo', {_reference:{name:'Fozzie Bear'}}]},
+	//			{ name:'Fozzie Bear', wears:['hat', 'tie']},
+	//			{ name:'Miss Piggy', pets:'Foo-Foo'}
+	//		]}
+	//		Note that it can also contain an 'identifer' property that specified which attribute on the items 
+	//		in the array of items that acts as the unique identifier for that item.
+	//
+	constructor: function(/* Object */ keywordParameters){
+		//	summary: constructor
+		//	keywordParameters: {url: String}
+		//	keywordParameters: {data: jsonObject}
+		//	keywordParameters: {typeMap: object)
+		//		The structure of the typeMap object is as follows:
+		//		{
+		//			type0: function || object,
+		//			type1: function || object,
+		//			...
+		//			typeN: function || object
+		//		}
+		//		Where if it is a function, it is assumed to be an object constructor that takes the 
+		//		value of _value as the initialization parameters.  If it is an object, then it is assumed
+		//		to be an object of general form:
+		//		{
+		//			type: function, //constructor.
+		//			deserialize:	function(value) //The function that parses the value and constructs the object defined by type appropriately.
+		//		}
+	
+		this._arrayOfAllItems = [];
+		this._arrayOfTopLevelItems = [];
+		this._loadFinished = false;
+		this._jsonFileUrl = keywordParameters.url;
+		this._ccUrl = keywordParameters.url;
+		this.url = keywordParameters.url;
+		this._jsonData = keywordParameters.data;
+		this.data = null;
+		this._datatypeMap = keywordParameters.typeMap || {};
+		if(!this._datatypeMap['Date']){
+			//If no default mapping for dates, then set this as default.
+			//We use the dojo.date.stamp here because the ISO format is the 'dojo way'
+			//of generically representing dates.
+			this._datatypeMap['Date'] = {
+											type: Date,
+											deserialize: function(value){
+												return dojo.date.stamp.fromISOString(value);
+											}
+										};
+		}
+		this._features = {'dojo.data.api.Read':true, 'dojo.data.api.Identity':true};
+		this._itemsByIdentity = null;
+		this._storeRefPropName = "_S"; // Default name for the store reference to attach to every item.
+		this._itemNumPropName = "_0"; // Default Item Id for isItem to attach to every item.
+		this._rootItemPropName = "_RI"; // Default Item Id for isItem to attach to every item.
+		this._reverseRefMap = "_RRM"; // Default attribute for constructing a reverse reference map for use with reference integrity
+		this._loadInProgress = false; //Got to track the initial load to prevent duelling loads of the dataset.
+		this._queuedFetches = [];
+		if(keywordParameters.urlPreventCache !== undefined){
+			this.urlPreventCache = keywordParameters.urlPreventCache?true:false;
+		}
+		if(keywordParameters.hierarchical !== undefined){
+			this.hierarchical = keywordParameters.hierarchical?true:false;
+		}
+		if(keywordParameters.clearOnClose){
+			this.clearOnClose = true;
+		}
+		if("failOk" in keywordParameters){
+			this.failOk = keywordParameters.failOk?true:false;
+		}
+	},
+	
+	url: "",	// use "" rather than undefined for the benefit of the parser (#3539)
+
+	//Internal var, crossCheckUrl.  Used so that setting either url or _jsonFileUrl, can still trigger a reload
+	//when clearOnClose and close is used.
+	_ccUrl: "",
+
+	data: null,	// define this so that the parser can populate it
+
+	typeMap: null, //Define so parser can populate.
+	
+	//Parameter to allow users to specify if a close call should force a reload or not.
+	//By default, it retains the old behavior of not clearing if close is called.  But
+	//if set true, the store will be reset to default state.  Note that by doing this,
+	//all item handles will become invalid and a new fetch must be issued.
+	clearOnClose: false,
+
+	//Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url.  
+	//Note this does not mean the store calls the server on each fetch, only that the data load has preventCache set as an option.
+	//Added for tracker: #6072
+	urlPreventCache: false,
+	
+	//Parameter for specifying that it is OK for the xhrGet call to fail silently.
+	failOk: false,
+
+	//Parameter to indicate to process data from the url as hierarchical 
+	//(data items can contain other data items in js form).  Default is true 
+	//for backwards compatibility.  False means only root items are processed 
+	//as items, all child objects outside of type-mapped objects and those in 
+	//specific reference format, are left straight JS data objects.
+	hierarchical: true,
+
+	_assertIsItem: function(/* item */ item){
+		//	summary:
+		//		This function tests whether the item passed in is indeed an item in the store.
+		//	item: 
+		//		The item to test for being contained by the store.
+		if(!this.isItem(item)){ 
+			throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");
+		}
+	},
+
+	_assertIsAttribute: function(/* attribute-name-string */ attribute){
+		//	summary:
+		//		This function tests whether the item passed in is indeed a valid 'attribute' like type for the store.
+		//	attribute: 
+		//		The attribute to test for being contained by the store.
+		if(typeof attribute !== "string"){ 
+			throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");
+		}
+	},
+
+	getValue: function(	/* item */ item, 
+						/* attribute-name-string */ attribute, 
+						/* value? */ defaultValue){
+		//	summary: 
+		//		See dojo.data.api.Read.getValue()
+		var values = this.getValues(item, attribute);
+		return (values.length > 0)?values[0]:defaultValue; // mixed
+	},
+
+	getValues: function(/* item */ item, 
+						/* attribute-name-string */ attribute){
+		//	summary: 
+		//		See dojo.data.api.Read.getValues()
+
+		this._assertIsItem(item);
+		this._assertIsAttribute(attribute);
+		// Clone it before returning.  refs: #10474
+		return (item[attribute] || []).slice(0); // Array
+	},
+
+	getAttributes: function(/* item */ item){
+		//	summary: 
+		//		See dojo.data.api.Read.getAttributes()
+		this._assertIsItem(item);
+		var attributes = [];
+		for(var key in item){
+			// Save off only the real item attributes, not the special id marks for O(1) isItem.
+			if((key !== this._storeRefPropName) && (key !== this._itemNumPropName) && (key !== this._rootItemPropName) && (key !== this._reverseRefMap)){
+				attributes.push(key);
+			}
+		}
+		return attributes; // Array
+	},
+
+	hasAttribute: function(	/* item */ item,
+							/* attribute-name-string */ attribute){
+		//	summary: 
+		//		See dojo.data.api.Read.hasAttribute()
+		this._assertIsItem(item);
+		this._assertIsAttribute(attribute);
+		return (attribute in item);
+	},
+
+	containsValue: function(/* item */ item, 
+							/* attribute-name-string */ attribute, 
+							/* anything */ value){
+		//	summary: 
+		//		See dojo.data.api.Read.containsValue()
+		var regexp = undefined;
+		if(typeof value === "string"){
+			regexp = dojo.data.util.filter.patternToRegExp(value, false);
+		}
+		return this._containsValue(item, attribute, value, regexp); //boolean.
+	},
+
+	_containsValue: function(	/* item */ item, 
+								/* attribute-name-string */ attribute, 
+								/* anything */ value,
+								/* RegExp?*/ regexp){
+		//	summary: 
+		//		Internal function for looking at the values contained by the item.
+		//	description: 
+		//		Internal function for looking at the values contained by the item.  This 
+		//		function allows for denoting if the comparison should be case sensitive for
+		//		strings or not (for handling filtering cases where string case should not matter)
+		//	
+		//	item:
+		//		The data item to examine for attribute values.
+		//	attribute:
+		//		The attribute to inspect.
+		//	value:	
+		//		The value to match.
+		//	regexp:
+		//		Optional regular expression generated off value if value was of string type to handle wildcarding.
+		//		If present and attribute values are string, then it can be used for comparison instead of 'value'
+		return dojo.some(this.getValues(item, attribute), function(possibleValue){
+			if(possibleValue !== null && !dojo.isObject(possibleValue) && regexp){
+				if(possibleValue.toString().match(regexp)){
+					return true; // Boolean
+				}
+			}else if(value === possibleValue){
+				return true; // Boolean
+			}
+		});
+	},
+
+	isItem: function(/* anything */ something){
+		//	summary: 
+		//		See dojo.data.api.Read.isItem()
+		if(something && something[this._storeRefPropName] === this){
+			if(this._arrayOfAllItems[something[this._itemNumPropName]] === something){
+				return true;
+			}
+		}
+		return false; // Boolean
+	},
+
+	isItemLoaded: function(/* anything */ something){
+		//	summary: 
+		//		See dojo.data.api.Read.isItemLoaded()
+		return this.isItem(something); //boolean
+	},
+
+	loadItem: function(/* object */ keywordArgs){
+		//	summary: 
+		//		See dojo.data.api.Read.loadItem()
+		this._assertIsItem(keywordArgs.item);
+	},
+
+	getFeatures: function(){
+		//	summary: 
+		//		See dojo.data.api.Read.getFeatures()
+		return this._features; //Object
+	},
+
+	getLabel: function(/* item */ item){
+		//	summary: 
+		//		See dojo.data.api.Read.getLabel()
+		if(this._labelAttr && this.isItem(item)){
+			return this.getValue(item,this._labelAttr); //String
+		}
+		return undefined; //undefined
+	},
+
+	getLabelAttributes: function(/* item */ item){
+		//	summary: 
+		//		See dojo.data.api.Read.getLabelAttributes()
+		if(this._labelAttr){
+			return [this._labelAttr]; //array
+		}
+		return null; //null
+	},
+
+	_fetchItems: function(	/* Object */ keywordArgs, 
+							/* Function */ findCallback, 
+							/* Function */ errorCallback){
+		//	summary: 
+		//		See dojo.data.util.simpleFetch.fetch()
+		var self = this,
+		    filter = function(requestArgs, arrayOfItems){
+			var items = [],
+			    i, key;
+			if(requestArgs.query){
+				var value,
+				    ignoreCase = requestArgs.queryOptions ? requestArgs.queryOptions.ignoreCase : false;
+
+				//See if there are any string values that can be regexp parsed first to avoid multiple regexp gens on the
+				//same value for each item examined.  Much more efficient.
+				var regexpList = {};
+				for(key in requestArgs.query){
+					value = requestArgs.query[key];
+					if(typeof value === "string"){
+						regexpList[key] = dojo.data.util.filter.patternToRegExp(value, ignoreCase);
+					}else if(value instanceof RegExp){
+						regexpList[key] = value;
+					}
+				}
+				for(i = 0; i < arrayOfItems.length; ++i){
+					var match = true;
+					var candidateItem = arrayOfItems[i];
+					if(candidateItem === null){
+						match = false;
+					}else{
+						for(key in requestArgs.query){
+							value = requestArgs.query[key];
+							if(!self._containsValue(candidateItem, key, value, regexpList[key])){
+								match = false;
+							}
+						}
+					}
+					if(match){
+						items.push(candidateItem);
+					}
+				}
+				findCallback(items, requestArgs);
+			}else{
+				// We want a copy to pass back in case the parent wishes to sort the array. 
+				// We shouldn't allow resort of the internal list, so that multiple callers 
+				// can get lists and sort without affecting each other.  We also need to
+				// filter out any null values that have been left as a result of deleteItem()
+				// calls in ItemFileWriteStore.
+				for(i = 0; i < arrayOfItems.length; ++i){
+					var item = arrayOfItems[i];
+					if(item !== null){
+						items.push(item);
+					}
+				}
+				findCallback(items, requestArgs);
+			}
+		};
+
+		if(this._loadFinished){
+			filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
+		}else{
+			//Do a check on the JsonFileUrl and crosscheck it.
+			//If it doesn't match the cross-check, it needs to be updated
+			//This allows for either url or _jsonFileUrl to he changed to
+			//reset the store load location.  Done this way for backwards 
+			//compatibility.  People use _jsonFileUrl (even though officially
+			//private.
+			if(this._jsonFileUrl !== this._ccUrl){
+				dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+					"To change the url, set the url property of the store," +
+					" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+				this._ccUrl = this._jsonFileUrl;
+				this.url = this._jsonFileUrl;
+			}else if(this.url !== this._ccUrl){
+				this._jsonFileUrl = this.url;
+				this._ccUrl = this.url;
+			}
+
+			//See if there was any forced reset of data.
+			if(this.data != null && this._jsonData == null){
+				this._jsonData = this.data;
+				this.data = null;
+			}
+
+			if(this._jsonFileUrl){
+				//If fetches come in before the loading has finished, but while
+				//a load is in progress, we have to defer the fetching to be 
+				//invoked in the callback.
+				if(this._loadInProgress){
+					this._queuedFetches.push({args: keywordArgs, filter: filter});
+				}else{
+					this._loadInProgress = true;
+					var getArgs = {
+							url: self._jsonFileUrl, 
+							handleAs: "json-comment-optional",
+							preventCache: this.urlPreventCache,
+							failOk: this.failOk
+						};
+					var getHandler = dojo.xhrGet(getArgs);
+					getHandler.addCallback(function(data){
+						try{
+							self._getItemsFromLoadedData(data);
+							self._loadFinished = true;
+							self._loadInProgress = false;
+							
+							filter(keywordArgs, self._getItemsArray(keywordArgs.queryOptions));
+							self._handleQueuedFetches();
+						}catch(e){
+							self._loadFinished = true;
+							self._loadInProgress = false;
+							errorCallback(e, keywordArgs);
+						}
+					});
+					getHandler.addErrback(function(error){
+						self._loadInProgress = false;
+						errorCallback(error, keywordArgs);
+					});
+
+					//Wire up the cancel to abort of the request
+					//This call cancel on the deferred if it hasn't been called
+					//yet and then will chain to the simple abort of the
+					//simpleFetch keywordArgs
+					var oldAbort = null;
+					if(keywordArgs.abort){
+						oldAbort = keywordArgs.abort;
+					}
+					keywordArgs.abort = function(){
+						var df = getHandler;
+						if(df && df.fired === -1){
+							df.cancel();
+							df = null;
+						}
+						if(oldAbort){
+							oldAbort.call(keywordArgs);
+						}
+					};
+				}
+			}else if(this._jsonData){
+				try{
+					this._loadFinished = true;
+					this._getItemsFromLoadedData(this._jsonData);
+					this._jsonData = null;
+					filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
+				}catch(e){
+					errorCallback(e, keywordArgs);
+				}
+			}else{
+				errorCallback(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."), keywordArgs);
+			}
+		}
+	},
+
+	_handleQueuedFetches: function(){
+		//	summary: 
+		//		Internal function to execute delayed request in the store.
+		//Execute any deferred fetches now.
+		if(this._queuedFetches.length > 0){
+			for(var i = 0; i < this._queuedFetches.length; i++){
+				var fData = this._queuedFetches[i],
+				    delayedQuery = fData.args,
+				    delayedFilter = fData.filter;
+				if(delayedFilter){
+					delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions)); 
+				}else{
+					this.fetchItemByIdentity(delayedQuery);
+				}
+			}
+			this._queuedFetches = [];
+		}
+	},
+
+	_getItemsArray: function(/*object?*/queryOptions){
+		//	summary: 
+		//		Internal function to determine which list of items to search over.
+		//	queryOptions: The query options parameter, if any.
+		if(queryOptions && queryOptions.deep){
+			return this._arrayOfAllItems; 
+		}
+		return this._arrayOfTopLevelItems;
+	},
+
+	close: function(/*dojo.data.api.Request || keywordArgs || null */ request){
+		 //	summary: 
+		 //		See dojo.data.api.Read.close()
+		 if(this.clearOnClose && 
+			this._loadFinished && 
+			!this._loadInProgress){
+			 //Reset all internalsback to default state.  This will force a reload
+			 //on next fetch.  This also checks that the data or url param was set 
+			 //so that the store knows it can get data.  Without one of those being set,
+			 //the next fetch will trigger an error.
+
+			 if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) && 
+				 (this.url == "" || this.url == null)
+				) && this.data == null){
+				 console.debug("dojo.data.ItemFileReadStore: WARNING!  Data reload " +
+					" information has not been provided." + 
+					"  Please set 'url' or 'data' to the appropriate value before" +
+					" the next fetch");
+			 }
+			 this._arrayOfAllItems = [];
+			 this._arrayOfTopLevelItems = [];
+			 this._loadFinished = false;
+			 this._itemsByIdentity = null;
+			 this._loadInProgress = false;
+			 this._queuedFetches = [];
+		 }
+	},
+
+	_getItemsFromLoadedData: function(/* Object */ dataObject){
+		//	summary:
+		//		Function to parse the loaded data into item format and build the internal items array.
+		//	description:
+		//		Function to parse the loaded data into item format and build the internal items array.
+		//
+		//	dataObject:
+		//		The JS data object containing the raw data to convery into item format.
+		//
+		// 	returns: array
+		//		Array of items in store item format.
+		
+		// First, we define a couple little utility functions...
+		var addingArrays = false,
+		    self = this;
+		
+		function valueIsAnItem(/* anything */ aValue){
+			// summary:
+			//		Given any sort of value that could be in the raw json data,
+			//		return true if we should interpret the value as being an
+			//		item itself, rather than a literal value or a reference.
+			// example:
+			// 	|	false == valueIsAnItem("Kermit");
+			// 	|	false == valueIsAnItem(42);
+			// 	|	false == valueIsAnItem(new Date());
+			// 	|	false == valueIsAnItem({_type:'Date', _value:'May 14, 1802'});
+			// 	|	false == valueIsAnItem({_reference:'Kermit'});
+			// 	|	true == valueIsAnItem({name:'Kermit', color:'green'});
+			// 	|	true == valueIsAnItem({iggy:'pop'});
+			// 	|	true == valueIsAnItem({foo:42});
+			var isItem = (
+				(aValue !== null) &&
+				(typeof aValue === "object") &&
+				(!dojo.isArray(aValue) || addingArrays) &&
+				(!dojo.isFunction(aValue)) &&
+				(aValue.constructor == Object || dojo.isArray(aValue)) &&
+				(typeof aValue._reference === "undefined") && 
+				(typeof aValue._type === "undefined") && 
+				(typeof aValue._value === "undefined") &&
+				self.hierarchical
+			);
+			return isItem;
+		}
+		
+		function addItemAndSubItemsToArrayOfAllItems(/* Item */ anItem){
+			self._arrayOfAllItems.push(anItem);
+			for(var attribute in anItem){
+				var valueForAttribute = anItem[attribute];
+				if(valueForAttribute){
+					if(dojo.isArray(valueForAttribute)){
+						var valueArray = valueForAttribute;
+						for(var k = 0; k < valueArray.length; ++k){
+							var singleValue = valueArray[k];
+							if(valueIsAnItem(singleValue)){
+								addItemAndSubItemsToArrayOfAllItems(singleValue);
+							}
+						}
+					}else{
+						if(valueIsAnItem(valueForAttribute)){
+							addItemAndSubItemsToArrayOfAllItems(valueForAttribute);
+						}
+					}
+				}
+			}
+		}
+
+		this._labelAttr = dataObject.label;
+
+		// We need to do some transformations to convert the data structure
+		// that we read from the file into a format that will be convenient
+		// to work with in memory.
+
+		// Step 1: Walk through the object hierarchy and build a list of all items
+		var i,
+		    item;
+		this._arrayOfAllItems = [];
+		this._arrayOfTopLevelItems = dataObject.items;
+
+		for(i = 0; i < this._arrayOfTopLevelItems.length; ++i){
+			item = this._arrayOfTopLevelItems[i];
+			if(dojo.isArray(item)){
+				addingArrays = true;
+			}
+			addItemAndSubItemsToArrayOfAllItems(item);
+			item[this._rootItemPropName]=true;
+		}
+
+		// Step 2: Walk through all the attribute values of all the items, 
+		// and replace single values with arrays.  For example, we change this:
+		//		{ name:'Miss Piggy', pets:'Foo-Foo'}
+		// into this:
+		//		{ name:['Miss Piggy'], pets:['Foo-Foo']}
+		// 
+		// We also store the attribute names so we can validate our store  
+		// reference and item id special properties for the O(1) isItem
+		var allAttributeNames = {},
+		    key;
+
+		for(i = 0; i < this._arrayOfAllItems.length; ++i){
+			item = this._arrayOfAllItems[i];
+			for(key in item){
+				if(key !== this._rootItemPropName){
+					var value = item[key];
+					if(value !== null){
+						if(!dojo.isArray(value)){
+							item[key] = [value];
+						}
+					}else{
+						item[key] = [null];
+					}
+				}
+				allAttributeNames[key]=key;
+			}
+		}
+
+		// Step 3: Build unique property names to use for the _storeRefPropName and _itemNumPropName
+		// This should go really fast, it will generally never even run the loop.
+		while(allAttributeNames[this._storeRefPropName]){
+			this._storeRefPropName += "_";
+		}
+		while(allAttributeNames[this._itemNumPropName]){
+			this._itemNumPropName += "_";
+		}
+		while(allAttributeNames[this._reverseRefMap]){
+			this._reverseRefMap += "_";
+		}
+
+		// Step 4: Some data files specify an optional 'identifier', which is 
+		// the name of an attribute that holds the identity of each item. 
+		// If this data file specified an identifier attribute, then build a 
+		// hash table of items keyed by the identity of the items.
+		var arrayOfValues;
+
+		var identifier = dataObject.identifier;
+		if(identifier){
+			this._itemsByIdentity = {};
+			this._features['dojo.data.api.Identity'] = identifier;
+			for(i = 0; i < this._arrayOfAllItems.length; ++i){
+				item = this._arrayOfAllItems[i];
+				arrayOfValues = item[identifier];
+				var identity = arrayOfValues[0];
+				if(!this._itemsByIdentity[identity]){
+					this._itemsByIdentity[identity] = item;
+				}else{
+					if(this._jsonFileUrl){
+						throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: [" + this._jsonFileUrl + "] is malformed.  Items within the list have identifier: [" + identifier + "].  Value collided: [" + identity + "]");
+					}else if(this._jsonData){
+						throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: [" + identifier + "].  Value collided: [" + identity + "]");
+					}
+				}
+			}
+		}else{
+			this._features['dojo.data.api.Identity'] = Number;
+		}
+
+		// Step 5: Walk through all the items, and set each item's properties 
+		// for _storeRefPropName and _itemNumPropName, so that store.isItem() will return true.
+		for(i = 0; i < this._arrayOfAllItems.length; ++i){
+			item = this._arrayOfAllItems[i];
+			item[this._storeRefPropName] = this;
+			item[this._itemNumPropName] = i;
+		}
+
+		// Step 6: We walk through all the attribute values of all the items,
+		// looking for type/value literals and item-references.
+		//
+		// We replace item-references with pointers to items.  For example, we change:
+		//		{ name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
+		// into this:
+		//		{ name:['Kermit'], friends:[miss_piggy] } 
+		// (where miss_piggy is the object representing the 'Miss Piggy' item).
+		//
+		// We replace type/value pairs with typed-literals.  For example, we change:
+		//		{ name:['Nelson Mandela'], born:[{_type:'Date', _value:'July 18, 1918'}] }
+		// into this:
+		//		{ name:['Kermit'], born:(new Date('July 18, 1918')) } 
+		//
+		// We also generate the associate map for all items for the O(1) isItem function.
+		for(i = 0; i < this._arrayOfAllItems.length; ++i){
+			item = this._arrayOfAllItems[i]; // example: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
+			for(key in item){
+				arrayOfValues = item[key]; // example: [{_reference:{name:'Miss Piggy'}}]
+				for(var j = 0; j < arrayOfValues.length; ++j){
+					value = arrayOfValues[j]; // example: {_reference:{name:'Miss Piggy'}}
+					if(value !== null && typeof value == "object"){
+						if(("_type" in value) && ("_value" in value)){
+							var type = value._type; // examples: 'Date', 'Color', or 'ComplexNumber'
+							var mappingObj = this._datatypeMap[type]; // examples: Date, dojo.Color, foo.math.ComplexNumber, {type: dojo.Color, deserialize(value){ return new dojo.Color(value)}}
+							if(!mappingObj){ 
+								throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '" + type + "'");
+							}else if(dojo.isFunction(mappingObj)){
+								arrayOfValues[j] = new mappingObj(value._value);
+							}else if(dojo.isFunction(mappingObj.deserialize)){
+								arrayOfValues[j] = mappingObj.deserialize(value._value);
+							}else{
+								throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");
+							}
+						}
+						if(value._reference){
+							var referenceDescription = value._reference; // example: {name:'Miss Piggy'}
+							if(!dojo.isObject(referenceDescription)){
+								// example: 'Miss Piggy'
+								// from an item like: { name:['Kermit'], friends:[{_reference:'Miss Piggy'}]}
+								arrayOfValues[j] = this._getItemByIdentity(referenceDescription);
+							}else{
+								// example: {name:'Miss Piggy'}
+								// from an item like: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
+								for(var k = 0; k < this._arrayOfAllItems.length; ++k){
+									var candidateItem = this._arrayOfAllItems[k],
+									    found = true;
+									for(var refKey in referenceDescription){
+										if(candidateItem[refKey] != referenceDescription[refKey]){ 
+											found = false; 
+										}
+									}
+									if(found){ 
+										arrayOfValues[j] = candidateItem; 
+									}
+								}
+							}
+							if(this.referenceIntegrity){
+								var refItem = arrayOfValues[j];
+								if(this.isItem(refItem)){
+									this._addReferenceToMap(refItem, item, key);
+								}
+							}
+						}else if(this.isItem(value)){
+							//It's a child item (not one referenced through _reference).  
+							//We need to treat this as a referenced item, so it can be cleaned up
+							//in a write store easily.
+							if(this.referenceIntegrity){
+								this._addReferenceToMap(value, item, key);
+							}
+						}
+					}
+				}
+			}
+		}
+	},
+
+	_addReferenceToMap: function(/*item*/ refItem, /*item*/ parentItem, /*string*/ attribute){
+		 //	summary:
+		 //		Method to add an reference map entry for an item and attribute.
+		 //	description:
+		 //		Method to add an reference map entry for an item and attribute. 		 //
+		 //	refItem:
+		 //		The item that is referenced.
+		 //	parentItem:
+		 //		The item that holds the new reference to refItem.
+		 //	attribute:
+		 //		The attribute on parentItem that contains the new reference.
+		 
+		 //Stub function, does nothing.  Real processing is in ItemFileWriteStore.
+	},
+
+	getIdentity: function(/* item */ item){
+		//	summary: 
+		//		See dojo.data.api.Identity.getIdentity()
+		var identifier = this._features['dojo.data.api.Identity'];
+		if(identifier === Number){
+			return item[this._itemNumPropName]; // Number
+		}else{
+			var arrayOfValues = item[identifier];
+			if(arrayOfValues){
+				return arrayOfValues[0]; // Object || String
+			}
+		}
+		return null; // null
+	},
+
+	fetchItemByIdentity: function(/* Object */ keywordArgs){
+		//	summary: 
+		//		See dojo.data.api.Identity.fetchItemByIdentity()
+
+		// Hasn't loaded yet, we have to trigger the load.
+		var item,
+		    scope;
+		if(!this._loadFinished){
+			var self = this;
+			//Do a check on the JsonFileUrl and crosscheck it.
+			//If it doesn't match the cross-check, it needs to be updated
+			//This allows for either url or _jsonFileUrl to he changed to
+			//reset the store load location.  Done this way for backwards 
+			//compatibility.  People use _jsonFileUrl (even though officially
+			//private.
+			if(this._jsonFileUrl !== this._ccUrl){
+				dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+					"To change the url, set the url property of the store," +
+					" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+				this._ccUrl = this._jsonFileUrl;
+				this.url = this._jsonFileUrl;
+			}else if(this.url !== this._ccUrl){
+				this._jsonFileUrl = this.url;
+				this._ccUrl = this.url;
+			}
+			
+			//See if there was any forced reset of data.
+			if(this.data != null && this._jsonData == null){
+				this._jsonData = this.data;
+				this.data = null;
+			}
+
+			if(this._jsonFileUrl){
+
+				if(this._loadInProgress){
+					this._queuedFetches.push({args: keywordArgs});
+				}else{
+					this._loadInProgress = true;
+					var getArgs = {
+							url: self._jsonFileUrl, 
+							handleAs: "json-comment-optional",
+							preventCache: this.urlPreventCache,
+							failOk: this.failOk
+					};
+					var getHandler = dojo.xhrGet(getArgs);
+					getHandler.addCallback(function(data){
+						var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
+						try{
+							self._getItemsFromLoadedData(data);
+							self._loadFinished = true;
+							self._loadInProgress = false;
+							item = self._getItemByIdentity(keywordArgs.identity);
+							if(keywordArgs.onItem){
+								keywordArgs.onItem.call(scope, item);
+							}
+							self._handleQueuedFetches();
+						}catch(error){
+							self._loadInProgress = false;
+							if(keywordArgs.onError){
+								keywordArgs.onError.call(scope, error);
+							}
+						}
+					});
+					getHandler.addErrback(function(error){
+						self._loadInProgress = false;
+						if(keywordArgs.onError){
+							var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
+							keywordArgs.onError.call(scope, error);
+						}
+					});
+				}
+
+			}else if(this._jsonData){
+				// Passed in data, no need to xhr.
+				self._getItemsFromLoadedData(self._jsonData);
+				self._jsonData = null;
+				self._loadFinished = true;
+				item = self._getItemByIdentity(keywordArgs.identity);
+				if(keywordArgs.onItem){
+					scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
+					keywordArgs.onItem.call(scope, item);
+				}
+			} 
+		}else{
+			// Already loaded.  We can just look it up and call back.
+			item = this._getItemByIdentity(keywordArgs.identity);
+			if(keywordArgs.onItem){
+				scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
+				keywordArgs.onItem.call(scope, item);
+			}
+		}
+	},
+
+	_getItemByIdentity: function(/* Object */ identity){
+		//	summary:
+		//		Internal function to look an item up by its identity map.
+		var item = null;
+		if(this._itemsByIdentity){
+			item = this._itemsByIdentity[identity];
+		}else{
+			item = this._arrayOfAllItems[identity];
+		}
+		if(item === undefined){
+			item = null;
+		}
+		return item; // Object
+	},
+
+	getIdentityAttributes: function(/* item */ item){
+		//	summary: 
+		//		See dojo.data.api.Identity.getIdentifierAttributes()
+		 
+		var identifier = this._features['dojo.data.api.Identity'];
+		if(identifier === Number){
+			// If (identifier === Number) it means getIdentity() just returns
+			// an integer item-number for each item.  The dojo.data.api.Identity
+			// spec says we need to return null if the identity is not composed 
+			// of attributes 
+			return null; // null
+		}else{
+			return [identifier]; // Array
+		}
+	},
+	
+	_forceLoad: function(){
+		//	summary: 
+		//		Internal function to force a load of the store if it hasn't occurred yet.  This is required
+		//		for specific functions to work properly.  
+		var self = this;
+		//Do a check on the JsonFileUrl and crosscheck it.
+		//If it doesn't match the cross-check, it needs to be updated
+		//This allows for either url or _jsonFileUrl to he changed to
+		//reset the store load location.  Done this way for backwards 
+		//compatibility.  People use _jsonFileUrl (even though officially
+		//private.
+		if(this._jsonFileUrl !== this._ccUrl){
+			dojo.deprecated("dojo.data.ItemFileReadStore: ", 
+				"To change the url, set the url property of the store," +
+				" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+			this._ccUrl = this._jsonFileUrl;
+			this.url = this._jsonFileUrl;
+		}else if(this.url !== this._ccUrl){
+			this._jsonFileUrl = this.url;
+			this._ccUrl = this.url;
+		}
+
+		//See if there was any forced reset of data.
+		if(this.data != null && this._jsonData == null){
+			this._jsonData = this.data;
+			this.data = null;
+		}
+
+		if(this._jsonFileUrl){
+				var getArgs = {
+					url: this._jsonFileUrl, 
+					handleAs: "json-comment-optional",
+					preventCache: this.urlPreventCache,
+					failOk: this.failOk,
+					sync: true
+				};
+			var getHandler = dojo.xhrGet(getArgs);
+			getHandler.addCallback(function(data){
+				try{
+					//Check to be sure there wasn't another load going on concurrently 
+					//So we don't clobber data that comes in on it.  If there is a load going on
+					//then do not save this data.  It will potentially clobber current data.
+					//We mainly wanted to sync/wait here.
+					//TODO:  Revisit the loading scheme of this store to improve multi-initial
+					//request handling.
+					if(self._loadInProgress !== true && !self._loadFinished){
+						self._getItemsFromLoadedData(data);
+						self._loadFinished = true;
+					}else if(self._loadInProgress){
+						//Okay, we hit an error state we can't recover from.  A forced load occurred
+						//while an async load was occurring.  Since we cannot block at this point, the best
+						//that can be managed is to throw an error.
+						throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress."); 
+					}
+				}catch(e){
+					console.log(e);
+					throw e;
+				}
+			});
+			getHandler.addErrback(function(error){
+				throw error;
+			});
+		}else if(this._jsonData){
+			self._getItemsFromLoadedData(self._jsonData);
+			self._jsonData = null;
+			self._loadFinished = true;
+		} 
+	}
+});
+//Mix in the simple fetch implementation to this class.
+dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);
+
+}
+
+if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.FontChoice"] = true;
+dojo.provide("dijit._editor.plugins.FontChoice");
+
+
+
+
+
+
+
+
+
+
+dojo.declare("dijit._editor.plugins._FontDropDown",
+	[dijit._Widget, dijit._Templated],{
+	// summary:
+	//		Base class for widgets that contains a label (like "Font:")
+	//		and a FilteringSelect drop down to pick a value.
+	//		Used as Toolbar entry.
+
+	// label: [public] String
+	//		The label to apply to this particular FontDropDown.
+	label: "",
+
+	// widgetsInTemplate: [public] boolean
+	//		Over-ride denoting the template has widgets to parse.
+	widgetsInTemplate: true,
+
+	// plainText: [public] boolean
+	//		Flag to indicate that the returned label should be plain text
+	//		instead of an example.
+	plainText: false,
+
+	// templateString: [public] String
+	//		The template used to construct the labeled dropdown.
+	templateString:
+		"<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>" +
+			"<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>" +
+			"<input dojoType='dijit.form.FilteringSelect' required=false labelType=html labelAttr=label searchAttr=name " +
+					"tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>" +
+		"</span>",
+
+	postMixInProperties: function(){
+		// summary:
+		//		Over-ride to misin specific properties.
+		this.inherited(arguments);
+
+		this.strings = dojo.i18n.getLocalization("dijit._editor", "FontChoice");
+
+		// Set some substitution variables used in the template
+		this.label = this.strings[this.command];
+		this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+		this.selectId = this.id + "_select";
+
+		this.inherited(arguments);
+	},
+
+	postCreate: function(){
+		// summary:
+		//		Over-ride for the default postCreate action
+		//		This establishes the filtering selects and the like.
+
+		// Initialize the list of items in the drop down by creating data store with items like:
+		// {value: 1, name: "xx-small", label: "<font size=1>xx-small</font-size>" }
+		var	items = dojo.map(this.values, function(value){
+				var name = this.strings[value] || value;
+				return {
+					label: this.getLabel(value, name),
+					name: name,
+					value: value
+				};
+			}, this);
+
+		this.select.store = new dojo.data.ItemFileReadStore({
+			data: {
+				identifier: "value",
+				items: items
+			}
+		});
+
+		this.select.set("value", "", false);
+		this.disabled = this.select.get("disabled");
+	},
+
+	_setValueAttr: function(value, priorityChange){
+		// summary:
+		//		Over-ride for the default action of setting the
+		//		widget value, maps the input to known values
+		// value: Object|String
+		//		The value to set in the select.
+		// priorityChange:
+		//		Optional parameter used to tell the select whether or not to fire
+		//		onChange event.
+
+		//if the value is not a permitted value, just set empty string to prevent showing the warning icon
+		priorityChange = priorityChange !== false?true:false;
+		this.select.set('value', dojo.indexOf(this.values,value) < 0 ? "" : value, priorityChange);
+		if(!priorityChange){
+			// Clear the last state in case of updateState calls.  Ref: #10466
+			this.select._lastValueReported=null;
+		}
+	},
+
+	_getValueAttr: function(){
+		// summary:
+		//		Allow retreiving the value from the composite select on
+		//		call to button.get("value");
+		return this.select.get('value');
+	},
+
+	focus: function(){
+		// summary:
+		//		Over-ride for focus control of this widget.  Delegates focus down to the
+		//		filtering select.
+		this.select.focus();
+	},
+
+	_setDisabledAttr: function(value){
+		// summary:
+		//		Over-ride for the button's 'disabled' attribute so that it can be
+		//		disabled programmatically.
+
+		// Save off ths disabled state so the get retrieves it correctly
+		//without needing to have a function proxy it.
+		this.disabled = value;
+		this.select.set("disabled", value);
+	}
+});
+
+
+dojo.declare("dijit._editor.plugins._FontNameDropDown", dijit._editor.plugins._FontDropDown, {
+	// summary:
+	//		Dropdown to select a font; goes in editor toolbar.
+
+	// generic: Boolean
+	//		Use generic (web standard) font names
+	generic: false,
+
+	// command: [public] String
+	//		The editor 'command' implemented by this plugin.
+	command: "fontName",
+
+	postMixInProperties: function(){
+		// summary:
+		//		Over-ride for the default posr mixin control
+		if(!this.values){
+			this.values = this.generic ?
+				["serif", "sans-serif", "monospace", "cursive", "fantasy"] : // CSS font-family generics
+					["Arial", "Times New Roman", "Comic Sans MS", "Courier New"];
+		}
+		this.inherited(arguments);
+	},
+
+	getLabel: function(value, name){
+		// summary:
+		//		Function used to generate the labels of the format dropdown
+		//		will return a formatted, or plain label based on the value
+		//		of the plainText option.
+		// value: String
+		//		The 'insert value' associated with a name
+		// name: String
+		//		The text name of the value
+		if(this.plainText){
+			return name;
+		}else{
+			return "<div style='font-family: "+value+"'>" + name + "</div>";
+		}
+	},
+
+	_setValueAttr: function(value, priorityChange){
+		// summary:
+		//		Over-ride for the default action of setting the
+		//		widget value, maps the input to known values
+
+		priorityChange = priorityChange !== false?true:false;
+		if(this.generic){
+			var map = {
+				"Arial": "sans-serif",
+				"Helvetica": "sans-serif",
+				"Myriad": "sans-serif",
+				"Times": "serif",
+				"Times New Roman": "serif",
+				"Comic Sans MS": "cursive",
+				"Apple Chancery": "cursive",
+				"Courier": "monospace",
+				"Courier New": "monospace",
+				"Papyrus": "fantasy"
+//					,"????": "fantasy" TODO: IE doesn't map fantasy font-family?
+			};
+			value = map[value] || value;
+		}
+		this.inherited(arguments, [value, priorityChange]);
+	}
+});
+
+dojo.declare("dijit._editor.plugins._FontSizeDropDown", dijit._editor.plugins._FontDropDown, {
+	// summary:
+	//		Dropdown to select a font size; goes in editor toolbar.
+
+	// command: [public] String
+	//		The editor 'command' implemented by this plugin.
+	command: "fontSize",
+
+	// values: [public] Number[]
+	//		The HTML font size values supported by this plugin
+	values: [1,2,3,4,5,6,7], // sizes according to the old HTML FONT SIZE
+
+	getLabel: function(value, name){
+		// summary:
+		//		Function used to generate the labels of the format dropdown
+		//		will return a formatted, or plain label based on the value
+		//		of the plainText option.
+		//		We're stuck using the deprecated FONT tag to correspond
+		//		with the size measurements used by the editor
+		// value: String
+		//		The 'insert value' associated with a name
+		// name: String
+		//		The text name of the value
+		if(this.plainText){
+			return name;
+		}else{
+			return "<font size=" + value + "'>" + name + "</font>";
+		}
+	},
+
+	_setValueAttr: function(value, priorityChange){
+		// summary:
+		//		Over-ride for the default action of setting the
+		//		widget value, maps the input to known values
+		priorityChange = priorityChange !== false?true:false;
+		if(value.indexOf && value.indexOf("px") != -1){
+			var pixels = parseInt(value, 10);
+			value = {10:1, 13:2, 16:3, 18:4, 24:5, 32:6, 48:7}[pixels] || value;
+		}
+
+		this.inherited(arguments, [value, priorityChange]);
+	}
+});
+
+
+dojo.declare("dijit._editor.plugins._FormatBlockDropDown", dijit._editor.plugins._FontDropDown, {
+	// summary:
+	//		Dropdown to select a format (like paragraph or heading); goes in editor toolbar.
+
+	// command: [public] String
+	//		The editor 'command' implemented by this plugin.
+	command: "formatBlock",
+
+	// values: [public] Array
+	//		The HTML format tags supported by this plugin
+	values: ["noFormat", "p", "h1", "h2", "h3", "pre"],
+
+	postCreate: function(){
+		// Init and set the default value to no formatting.  Update state will adjust it
+		// as needed.
+		this.inherited(arguments);
+		this.set("value", "noFormat", false);
+	},
+
+	getLabel: function(value, name){
+		// summary:
+		//		Function used to generate the labels of the format dropdown
+		//		will return a formatted, or plain label based on the value
+		//		of the plainText option.
+		// value: String
+		//		The 'insert value' associated with a name
+		// name: String
+		//		The text name of the value
+		if(this.plainText){
+			return name;
+		}else{
+			return "<" + value + ">" + name + "</" + value + ">";
+		}
+	},
+
+	_execCommand: function(editor, command, choice){
+		// summary:
+		//		Over-ride for default exec-command label.
+		// 		Allows us to treat 'none' as special.
+		if(choice === "noFormat"){
+			var start;
+			var end;
+			var sel = dijit.range.getSelection(editor.window);
+			if(sel && sel.rangeCount > 0){
+				var range = sel.getRangeAt(0);
+				var node, tag;
+				if(range){
+					start = range.startContainer;
+					end = range.endContainer;
+
+					// find containing nodes of start/end.
+					while(start && start !== editor.editNode && 
+						  start !== editor.document.body && 
+						  start.nodeType !== 1){
+						start = start.parentNode;
+					}
+
+					while(end && end !== editor.editNode && 
+						  end !== editor.document.body && 
+						  end.nodeType !== 1){
+						end = end.parentNode;
+					}
+
+					var processChildren = dojo.hitch(this, function(node, array){
+						if(node.childNodes && node.childNodes.length){
+							var i;
+							for(i = 0; i < node.childNodes.length; i++){
+								var c = node.childNodes[i];
+								if(c.nodeType == 1){
+									if(dojo.withGlobal(editor.window, "inSelection", dijit._editor.selection, [c])){
+										var tag = c.tagName? c.tagName.toLowerCase(): "";
+										if(dojo.indexOf(this.values, tag) !== -1){
+											array.push(c);
+										}
+										processChildren(c,array);
+									}
+								}
+							}
+						}
+					});
+
+					var unformatNodes = dojo.hitch(this, function(nodes){
+						// summary:
+						//		Internal function to clear format nodes.
+						// nodes:
+						//		The array of nodes to strip formatting from.
+						if(nodes && nodes.length){
+							editor.beginEditing();
+							while(nodes.length){
+								this._removeFormat(editor, nodes.pop());
+							}
+							editor.endEditing();
+						}
+					});
+
+					var clearNodes = [];
+					if(start == end){
+						//Contained within the same block, may be collapsed, but who cares, see if we
+						// have a block element to remove.
+						var block;
+						node = start;
+						while(node && node !== editor.editNode && node !== editor.document.body){
+							if(node.nodeType == 1){
+								tag = node.tagName? node.tagName.toLowerCase(): "";
+								if(dojo.indexOf(this.values, tag) !== -1){
+									block = node;
+									break;
+								}
+							}
+							node = node.parentNode;
+						}
+
+						//Also look for all child nodes in the selection that may need to be 
+						//cleared of formatting
+						processChildren(start, clearNodes);
+						if(block) { clearNodes = [block].concat(clearNodes); }
+						unformatNodes(clearNodes);
+					}else{
+						// Probably a multi select, so we have to process it.  Whee.
+						node = start;
+						while(dojo.withGlobal(editor.window, "inSelection", dijit._editor.selection, [node])){
+							if(node.nodeType == 1){
+								tag = node.tagName? node.tagName.toLowerCase(): "";
+								if(dojo.indexOf(this.values, tag) !== -1){
+									clearNodes.push(node);
+								}
+								processChildren(node,clearNodes);
+							}
+							node = node.nextSibling;
+						}
+						unformatNodes(clearNodes);
+					}
+					editor.onDisplayChanged();
+				}
+			}
+		}else{
+			editor.execCommand(command, choice);
+		}
+	},
+
+	_removeFormat: function(editor, node){
+		// summary:
+		//		function to remove the block format node.
+		// node:
+		//		The block format node to remove (and leave the contents behind)
+		if(editor.customUndo){
+			// So of course IE doesn't work right with paste-overs.
+			// We have to do this manually, which is okay since IE already uses
+			// customUndo and we turned it on for WebKit.  WebKit pasted funny, 
+			// so couldn't use the execCommand approach
+			while(node.firstChild){
+				dojo.place(node.firstChild, node, "before");
+			}
+			node.parentNode.removeChild(node);
+		}else{
+			// Everyone else works fine this way, a paste-over and is native
+			// undo friendly.
+			dojo.withGlobal(editor.window, 
+				 "selectElementChildren", dijit._editor.selection, [node]);
+			var html = 	dojo.withGlobal(editor.window, 
+				 "getSelectedHtml", dijit._editor.selection, [null]);
+			dojo.withGlobal(editor.window, 
+				 "selectElement", dijit._editor.selection, [node]);
+			editor.execCommand("inserthtml", html||"");
+		}
+	}
+});
+
+// TODO: for 2.0, split into FontChoice plugin into three separate classes,
+// one for each command (and change registry below)
+dojo.declare("dijit._editor.plugins.FontChoice", dijit._editor._Plugin,{
+	// summary:
+	//		This plugin provides three drop downs for setting style in the editor
+	//		(font, font size, and format block), as controlled by command.
+	//
+	// description:
+	//		The commands provided by this plugin are:
+	//
+	//		* fontName
+	//	|		Provides a drop down to select from a list of font names
+	//		* fontSize
+	//	|		Provides a drop down to select from a list of font sizes
+	//		* formatBlock
+	//	|		Provides a drop down to select from a list of block styles
+	//	|
+	//
+	//		which can easily be added to an editor by including one or more of the above commands
+	//		in the `plugins` attribute as follows:
+	//
+	//	|	plugins="['fontName','fontSize',...]"
+	//
+	//		It is possible to override the default dropdown list by providing an Array for the `custom` property when
+	//		instantiating this plugin, e.g.
+	//
+	//	|	plugins="[{name:'dijit._editor.plugins.FontChoice', command:'fontName', custom:['Verdana','Myriad','Garamond']},...]"
+	//
+	//		Alternatively, for `fontName` only, `generic:true` may be specified to provide a dropdown with
+	//		[CSS generic font families](http://www.w3.org/TR/REC-CSS2/fonts.html#generic-font-families)
+	//
+	//		Note that the editor is often unable to properly handle font styling information defined outside
+	//		the context of the current editor instance, such as pre-populated HTML.
+
+	// useDefaultCommand: [protected] booleam
+	//		Override _Plugin.useDefaultCommand...
+	//		processing is handled by this plugin, not by dijit.Editor.
+	useDefaultCommand: false,
+
+	_initButton: function(){
+		// summary:
+		//		Overrides _Plugin._initButton(), to initialize the FilteringSelect+label in toolbar,
+		//		rather than a simple button.
+		// tags:
+		//		protected
+
+		// Create the widget to go into the toolbar (the so-called "button")
+		var clazz = {
+				fontName: dijit._editor.plugins._FontNameDropDown,
+				fontSize: dijit._editor.plugins._FontSizeDropDown,
+				formatBlock: dijit._editor.plugins._FormatBlockDropDown
+			}[this.command],
+		params = this.params;
+
+		// For back-compat reasons support setting custom values via "custom" parameter
+		// rather than "values" parameter
+		if(this.params.custom){
+			params.values = this.params.custom;
+		}
+
+		var editor = this.editor;
+		this.button = new clazz(dojo.delegate({dir: editor.dir, lang: editor.lang}, params));
+
+		// Reflect changes to the drop down in the editor
+		this.connect(this.button.select, "onChange", function(choice){
+			// User invoked change, since all internal updates set priorityChange to false and will
+			// not trigger an onChange event.
+			this.editor.focus();
+			
+			if(this.command == "fontName" && choice.indexOf(" ") != -1){ choice = "'" + choice + "'"; }
+
+			// Invoke, the editor already normalizes commands called through its
+			// execCommand.
+			if(this.button._execCommand){
+				this.button._execCommand(this.editor, this.command, choice);
+			}else{
+				this.editor.execCommand(this.command, choice);
+			}
+			
+			// Enable custom undo for webkit, needed for noFormat to work properly
+			// and still undo.
+			this.editor.customUndo = this.editor.customUndo || dojo.isWebKit;
+		});
+	},
+
+	updateState: function(){
+		// summary:
+		//		Overrides _Plugin.updateState().  This controls updating the menu
+		//		options to the right values on state changes in the document (that trigger a
+		//		test of the actions.)
+		//		It set value of drop down in toolbar to reflect font/font size/format block
+		//		of text at current caret position.
+		// tags:
+		//		protected
+		var _e = this.editor;
+		var _c = this.command;
+		if(!_e || !_e.isLoaded || !_c.length){ return; }
+		if(this.button){
+			var value;
+			try{
+				value = _e.queryCommandValue(_c) || "";
+			}catch(e){
+				//Firefox may throw error above if the editor is just loaded, ignore it
+				value = "";
+			}
+
+			// strip off single quotes, if any
+			var quoted = dojo.isString(value) && value.match(/'([^']*)'/);
+			if(quoted){ value = quoted[1]; }
+
+			if(_c === "formatBlock"){
+				if(!value || value == "p"){
+					// Some browsers (WebKit) doesn't actually get the tag info right.
+					// and IE returns paragraph when in a DIV!, so incorrect a lot,
+					// so we have double-check it.
+					value = null;
+					var elem;
+					// Try to find the current element where the caret is.
+					var sel = dijit.range.getSelection(this.editor.window);
+					if(sel && sel.rangeCount > 0){
+						var range = sel.getRangeAt(0);
+						if(range){
+							elem = range.endContainer;
+						}
+					}
+
+					// Okay, now see if we can find one of the formatting types we're in.
+					while(elem && elem !== _e.editNode && elem !== _e.document){
+						var tg = elem.tagName?elem.tagName.toLowerCase():"";
+						if(tg && dojo.indexOf(this.button.values, tg) > -1){
+							value = tg;
+							break;
+						}
+						elem = elem.parentNode;
+					}
+					if(!value){
+						// Still no value, so lets select 'none'.
+						value = "noFormat";
+					}
+				}else{
+					// Check that the block format is one allowed, if not,
+					// null it so that it gets set to empty.
+					if(dojo.indexOf(this.button.values, value) < 0){
+						value = "noFormat";
+					}
+				}
+			}
+			if(value !== this.button.get("value")){
+				// Set the value, but denote it is not a priority change, so no
+				// onchange fires.
+				this.button.set('value', value, false);
+			}
+		}
+	}
+});
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+	if(o.plugin){ return; }
+	switch(o.args.name){
+	case "fontName": case "fontSize": case "formatBlock":
+		o.plugin = new dijit._editor.plugins.FontChoice({
+			command: o.args.name,
+			plainText: o.args.plainText?o.args.plainText:false
+		});
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form._FormSelectWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._FormSelectWidget"] = true;
+dojo.provide("dijit.form._FormSelectWidget");
+
+
+
+
+/*=====
+dijit.form.__SelectOption = function(){
+	// value: String
+	//		The value of the option.  Setting to empty (or missing) will
+	//		place a separator at that location
+	// label: String
+	//		The label for our option.  It can contain html tags.
+	//  selected: Boolean
+	//		Whether or not we are a selected option
+	// disabled: Boolean
+	//		Whether or not this specific option is disabled
+	this.value = value;
+	this.label = label;
+	this.selected = selected;
+	this.disabled = disabled;
+}
+=====*/
+
+dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, {
+	// summary:
+	//		Extends _FormValueWidget in order to provide "select-specific"
+	//		values - i.e., those values that are unique to <select> elements.
+	//		This also provides the mechanism for reading the elements from
+	//		a store, if desired.
+
+	// multiple: Boolean
+	//		Whether or not we are multi-valued
+	multiple: false,
+
+	// options: dijit.form.__SelectOption[]
+	//		The set of options for our select item.  Roughly corresponds to
+	//      the html <option> tag.
+	options: null,
+
+	// store: dojo.data.api.Identity
+	//		A store which, at the very least impelements dojo.data.api.Identity
+	//		to use for getting our list of options - rather than reading them
+	//		from the <option> html tags.
+	store: null,
+
+	// query: object
+	//		A query to use when fetching items from our store
+	query: null,
+
+	// queryOptions: object
+	//		Query options to use when fetching from the store
+	queryOptions: null,
+
+	// onFetch: Function
+	//		A callback to do with an onFetch - but before any items are actually
+	//		iterated over (i.e. to filter even futher what you want to add)
+	onFetch: null,
+
+	// sortByLabel: boolean
+	//		Flag to sort the options returned from a store by the label of
+	//		the store.
+	sortByLabel: true,
+
+
+	// loadChildrenOnOpen: boolean
+	//		By default loadChildren is called when the items are fetched from the
+	//		store.  This property allows delaying loadChildren (and the creation
+	//		of the options/menuitems) until the user opens the click the button.
+	//		dropdown
+	loadChildrenOnOpen: false,
+
+	getOptions: function(/* anything */ valueOrIdx){
+		// summary:
+		//		Returns a given option (or options).
+		// valueOrIdx:
+		//		If passed in as a string, that string is used to look up the option
+		//		in the array of options - based on the value property.
+		//		(See dijit.form.__SelectOption).
+		//
+		//		If passed in a number, then the option with the given index (0-based)
+		//		within this select will be returned.
+		//
+		//		If passed in a dijit.form.__SelectOption, the same option will be
+		//		returned if and only if it exists within this select.
+		//
+		//		If passed an array, then an array will be returned with each element
+		//		in the array being looked up.
+		//
+		//		If not passed a value, then all options will be returned
+		//
+		// returns:
+		//		The option corresponding with the given value or index.  null
+		//		is returned if any of the following are true:
+		//			- A string value is passed in which doesn't exist
+		//			- An index is passed in which is outside the bounds of the array of options
+		//			- A dijit.form.__SelectOption is passed in which is not a part of the select
+
+		// NOTE: the compare for passing in a dijit.form.__SelectOption checks
+		//		if the value property matches - NOT if the exact option exists
+		// NOTE: if passing in an array, null elements will be placed in the returned
+		//		array when a value is not found.
+		var lookupValue = valueOrIdx, opts = this.options || [], l = opts.length;
+
+		if(lookupValue === undefined){
+			return opts; // dijit.form.__SelectOption[]
+		}
+		if(dojo.isArray(lookupValue)){
+			return dojo.map(lookupValue, "return this.getOptions(item);", this); // dijit.form.__SelectOption[]
+		}
+		if(dojo.isObject(valueOrIdx)){
+			// We were passed an option - so see if it's in our array (directly),
+			// and if it's not, try and find it by value.
+			if(!dojo.some(this.options, function(o, idx){
+				if(o === lookupValue ||
+					(o.value && o.value === lookupValue.value)){
+					lookupValue = idx;
+					return true;
+				}
+				return false;
+			})){
+				lookupValue = -1;
+			}
+		}
+		if(typeof lookupValue == "string"){
+			for(var i=0; i<l; i++){
+				if(opts[i].value === lookupValue){
+					lookupValue = i;
+					break;
+				}
+			}
+		}
+		if(typeof lookupValue == "number" && lookupValue >= 0 && lookupValue < l){
+			return this.options[lookupValue] // dijit.form.__SelectOption
+		}
+		return null; // null
+	},
+
+	addOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ option){
+		// summary:
+		//		Adds an option or options to the end of the select.  If value
+		//		of the option is empty or missing, a separator is created instead.
+		//		Passing in an array of options will yield slightly better performance
+		//		since the children are only loaded once.
+		if(!dojo.isArray(option)){ option = [option]; }
+		dojo.forEach(option, function(i){
+			if(i && dojo.isObject(i)){
+				this.options.push(i);
+			}
+		}, this);
+		this._loadChildren();
+	},
+
+	removeOption: function(/* string, dijit.form.__SelectOption, number, or array */ valueOrIdx){
+		// summary:
+		//		Removes the given option or options.  You can remove by string
+		//		(in which case the value is removed), number (in which case the
+		//		index in the options array is removed), or select option (in
+		//		which case, the select option with a matching value is removed).
+		//		You can also pass in an array of those values for a slightly
+		//		better performance since the children are only loaded once.
+		if(!dojo.isArray(valueOrIdx)){ valueOrIdx = [valueOrIdx]; }
+		var oldOpts = this.getOptions(valueOrIdx);
+		dojo.forEach(oldOpts, function(i){
+			// We can get null back in our array - if our option was not found.  In
+			// that case, we don't want to blow up...
+			if(i){
+				this.options = dojo.filter(this.options, function(node, idx){
+					return (node.value !== i.value);
+				});
+				this._removeOptionItem(i);
+			}
+		}, this);
+		this._loadChildren();
+	},
+
+	updateOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ newOption){
+		// summary:
+		//		Updates the values of the given option.  The option to update
+		//		is matched based on the value of the entered option.  Passing
+		//		in an array of new options will yeild better performance since
+		//		the children will only be loaded once.
+		if(!dojo.isArray(newOption)){ newOption = [newOption]; }
+		dojo.forEach(newOption, function(i){
+			var oldOpt = this.getOptions(i), k;
+			if(oldOpt){
+				for(k in i){ oldOpt[k] = i[k]; }
+			}
+		}, this);
+		this._loadChildren();
+	},
+
+	setStore: function(/* dojo.data.api.Identity */ store,
+						/* anything? */ selectedValue,
+						/* Object? */ fetchArgs){
+		// summary:
+		//		Sets the store you would like to use with this select widget.
+		//		The selected value is the value of the new store to set.  This
+		//		function returns the original store, in case you want to reuse
+		//		it or something.
+		// store: dojo.data.api.Identity
+		//		The store you would like to use - it MUST implement Identity,
+		//		and MAY implement Notification.
+		// selectedValue: anything?
+		//		The value that this widget should set itself to *after* the store
+		//		has been loaded
+		// fetchArgs: Object?
+		//		The arguments that will be passed to the store's fetch() function
+		var oStore = this.store;
+		fetchArgs = fetchArgs || {};
+		if(oStore !== store){
+			// Our store has changed, so update our notifications
+			dojo.forEach(this._notifyConnections || [], dojo.disconnect);
+			delete this._notifyConnections;
+			if(store && store.getFeatures()["dojo.data.api.Notification"]){
+				this._notifyConnections = [
+					dojo.connect(store, "onNew", this, "_onNewItem"),
+					dojo.connect(store, "onDelete", this, "_onDeleteItem"),
+					dojo.connect(store, "onSet", this, "_onSetItem")
+				];
+			}
+			this.store = store;
+		}
+
+		// Turn off change notifications while we make all these changes
+		this._onChangeActive = false;
+
+		// Remove existing options (if there are any)
+		if(this.options && this.options.length){
+			this.removeOption(this.options);
+		}
+
+		// Add our new options
+		if(store){
+			var cb = function(items){
+				if(this.sortByLabel && !fetchArgs.sort && items.length){
+					items.sort(dojo.data.util.sorter.createSortFunction([{
+						attribute: store.getLabelAttributes(items[0])[0]
+					}], store));
+				}
+
+				if(fetchArgs.onFetch){
+					items = fetchArgs.onFetch(items);
+				}
+				// TODO: Add these guys as a batch, instead of separately
+				dojo.forEach(items, function(i){
+					this._addOptionForItem(i);
+				}, this);
+
+				// Set our value (which might be undefined), and then tweak
+				// it to send a change event with the real value
+				this._loadingStore = false;
+				this.set("value", (("_pendingValue" in this) ? this._pendingValue : selectedValue));
+				delete this._pendingValue;
+
+				if(!this.loadChildrenOnOpen){
+					this._loadChildren();
+				}else{
+					this._pseudoLoadChildren(items);
+				}
+				this._fetchedWith = opts;
+				this._lastValueReported = this.multiple ? [] : null;
+				this._onChangeActive = true;
+				this.onSetStore();
+				this._handleOnChange(this.value);
+			};
+			var opts = dojo.mixin({onComplete:cb, scope: this}, fetchArgs);
+			this._loadingStore = true;
+			store.fetch(opts);
+		}else{
+			delete this._fetchedWith;
+		}
+		return oStore;	// dojo.data.api.Identity
+	},
+
+	_setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
+		// summary:
+		//		set the value of the widget.
+		//		If a string is passed, then we set our value from looking it up.
+		if(this._loadingStore){
+			// Our store is loading - so save our value, and we'll set it when
+			// we're done
+			this._pendingValue = newValue;
+			return;
+		}
+		var opts = this.getOptions() || [];
+		if(!dojo.isArray(newValue)){
+			newValue = [newValue];
+		}
+		dojo.forEach(newValue, function(i, idx){
+			if(!dojo.isObject(i)){
+				i = i + "";
+			}
+			if(typeof i === "string"){
+				newValue[idx] = dojo.filter(opts, function(node){
+					return node.value === i;
+				})[0] || {value: "", label: ""};
+			}
+		}, this);
+
+		// Make sure some sane default is set
+		newValue = dojo.filter(newValue, function(i){ return i && i.value; });
+		if(!this.multiple && (!newValue[0] || !newValue[0].value) && opts.length){
+			newValue[0] = opts[0];
+		}
+		dojo.forEach(opts, function(i){
+			i.selected = dojo.some(newValue, function(v){ return v.value === i.value; });
+		});
+		var val = dojo.map(newValue, function(i){ return i.value; }),
+			disp = dojo.map(newValue, function(i){ return i.label; });
+
+		this.value = this.multiple ? val : val[0];
+		this._setDisplay(this.multiple ? disp : disp[0]);
+		this._updateSelection();
+		this._handleOnChange(this.value, priorityChange);
+	},
+
+	_getDisplayedValueAttr: function(){
+		// summary:
+		//		returns the displayed value of the widget
+		var val = this.get("value");
+		if(!dojo.isArray(val)){
+			val = [val];
+		}
+		var ret = dojo.map(this.getOptions(val), function(v){
+			if(v && "label" in v){
+				return v.label;
+			}else if(v){
+				return v.value;
+			}
+			return null;
+		}, this);
+		return this.multiple ? ret : ret[0];
+	},
+
+	_getValueDeprecated: false, // remove when _FormWidget:getValue is removed
+	getValue: function(){
+		// summary:
+		//		get the value of the widget.
+		return this._lastValue;
+	},
+
+	undo: function(){
+		// summary:
+		//		restore the value to the last value passed to onChange
+		this._setValueAttr(this._lastValueReported, false);
+	},
+
+	_loadChildren: function(){
+		// summary:
+		//		Loads the children represented by this widget's options.
+		//		reset the menu to make it "populatable on the next click
+		if(this._loadingStore){ return; }
+		dojo.forEach(this._getChildren(), function(child){
+			child.destroyRecursive();
+		});
+		// Add each menu item
+		dojo.forEach(this.options, this._addOptionItem, this);
+
+		// Update states
+		this._updateSelection();
+	},
+
+	_updateSelection: function(){
+		// summary:
+		//		Sets the "selected" class on the item for styling purposes
+		this.value = this._getValueFromOpts();
+		var val = this.value;
+		if(!dojo.isArray(val)){
+			val = [val];
+		}
+		if(val && val[0]){
+			dojo.forEach(this._getChildren(), function(child){
+				var isSelected = dojo.some(val, function(v){
+					return child.option && (v === child.option.value);
+				});
+				dojo.toggleClass(child.domNode, this.baseClass + "SelectedOption", isSelected);
+				dijit.setWaiState(child.domNode, "selected", isSelected);
+			}, this);
+		}
+		this._handleOnChange(this.value);
+	},
+
+	_getValueFromOpts: function(){
+		// summary:
+		//		Returns the value of the widget by reading the options for
+		//		the selected flag
+		var opts = this.getOptions() || [];
+		if(!this.multiple && opts.length){
+			// Mirror what a select does - choose the first one
+			var opt = dojo.filter(opts, function(i){
+				return i.selected;
+			})[0];
+			if(opt && opt.value){
+				return opt.value
+			}else{
+				opts[0].selected = true;
+				return opts[0].value;
+			}
+		}else if(this.multiple){
+			// Set value to be the sum of all selected
+			return dojo.map(dojo.filter(opts, function(i){
+				return i.selected;
+			}), function(i){
+				return i.value;
+			}) || [];
+		}
+		return "";
+	},
+
+	// Internal functions to call when we have store notifications come in
+	_onNewItem: function(/* item */ item, /* Object? */ parentInfo){
+		if(!parentInfo || !parentInfo.parent){
+			// Only add it if we are top-level
+			this._addOptionForItem(item);
+		}
+	},
+	_onDeleteItem: function(/* item */ item){
+		var store = this.store;
+		this.removeOption(store.getIdentity(item));
+	},
+	_onSetItem: function(/* item */ item){
+		this.updateOption(this._getOptionObjForItem(item));
+	},
+
+	_getOptionObjForItem: function(item){
+		// summary:
+		//		Returns an option object based off the given item.  The "value"
+		//		of the option item will be the identity of the item, the "label"
+		//		of the option will be the label of the item.  If the item contains
+		//		children, the children value of the item will be set
+		var store = this.store, label = store.getLabel(item),
+			value = (label ? store.getIdentity(item) : null);
+		return {value: value, label: label, item:item}; // dijit.form.__SelectOption
+	},
+
+	_addOptionForItem: function(/* item */ item){
+		// summary:
+		//		Creates (and adds) the option for the given item
+		var store = this.store;
+		if(!store.isItemLoaded(item)){
+			// We are not loaded - so let's load it and add later
+			store.loadItem({item: item, onComplete: function(i){
+				this._addOptionForItem(item);
+			},
+			scope: this});
+			return;
+		}
+		var newOpt = this._getOptionObjForItem(item);
+		this.addOption(newOpt);
+	},
+
+	constructor: function(/* Object */ keywordArgs){
+		// summary:
+		//		Saves off our value, if we have an initial one set so we
+		//		can use it if we have a store as well (see startup())
+		this._oValue = (keywordArgs || {}).value || null;
+	},
+
+	_fillContent: function(){
+		// summary:
+		//		Loads our options and sets up our dropdown correctly.  We
+		//		don't want any content, so we don't call any inherit chain
+		//		function.
+		var opts = this.options;
+		if(!opts){
+			opts = this.options = this.srcNodeRef ? dojo.query(">",
+						this.srcNodeRef).map(function(node){
+							if(node.getAttribute("type") === "separator"){
+								return { value: "", label: "", selected: false, disabled: false };
+							}
+							return { value: node.getAttribute("value"),
+										label: String(node.innerHTML),
+										selected: node.getAttribute("selected") || false,
+										disabled: node.getAttribute("disabled") || false };
+						}, this) : [];
+		}
+		if(!this.value){
+			this.value = this._getValueFromOpts();
+		}else if(this.multiple && typeof this.value == "string"){
+			this.value = this.value.split(",");
+		}
+	},
+
+	postCreate: function(){
+		// summary:
+		//		sets up our event handling that we need for functioning
+		//		as a select
+		dojo.setSelectable(this.focusNode, false);
+		this.inherited(arguments);
+
+		// Make our event connections for updating state
+		this.connect(this, "onChange", "_updateSelection");
+		this.connect(this, "startup", "_loadChildren");
+
+		this._setValueAttr(this.value, null);
+	},
+
+	startup: function(){
+		// summary:
+		//		Connects in our store, if we have one defined
+		this.inherited(arguments);
+		var store = this.store, fetchArgs = {};
+		dojo.forEach(["query", "queryOptions", "onFetch"], function(i){
+			if(this[i]){
+				fetchArgs[i] = this[i];
+			}
+			delete this[i];
+		}, this);
+		if(store && store.getFeatures()["dojo.data.api.Identity"]){
+			// Temporarily set our store to null so that it will get set
+			// and connected appropriately
+			this.store = null;
+			this.setStore(store, this._oValue, fetchArgs);
+		}
+	},
+
+	destroy: function(){
+		// summary:
+		//		Clean up our connections
+		dojo.forEach(this._notifyConnections || [], dojo.disconnect);
+		this.inherited(arguments);
+	},
+
+	_addOptionItem: function(/* dijit.form.__SelectOption */ option){
+		// summary:
+		//		User-overridable function which, for the given option, adds an
+		//		item to the select.  If the option doesn't have a value, then a
+		//		separator is added in that place.  Make sure to store the option
+		//		in the created option widget.
+	},
+
+	_removeOptionItem: function(/* dijit.form.__SelectOption */ option){
+		// summary:
+		//		User-overridable function which, for the given option, removes
+		//		its item from the select.
+	},
+
+	_setDisplay: function(/*String or String[]*/ newDisplay){
+		// summary:
+		//		Overridable function which will set the display for the
+		//		widget.  newDisplay is either a string (in the case of
+		//		single selects) or array of strings (in the case of multi-selects)
+	},
+
+	_getChildren: function(){
+		// summary:
+		//		Overridable function to return the children that this widget contains.
+		return [];
+	},
+
+	_getSelectedOptionsAttr: function(){
+		// summary:
+		//		hooks into this.attr to provide a mechanism for getting the
+		//		option items for the current value of the widget.
+		return this.getOptions(this.get("value"));
+	},
+
+	_pseudoLoadChildren: function(/* item[] */ items){
+		// summary:
+		//		a function that will "fake" loading children, if needed, and
+		//		if we have set to not load children until the widget opens.
+		// items:
+		//		An array of items that will be loaded, when needed
+	},
+
+	onSetStore: function(){
+		// summary:
+		//		a function that can be connected to in order to receive a
+		//		notification that the store has finished loading and all options
+		//		from that store are available
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.MenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuItem"] = true;
+dojo.provide("dijit.MenuItem");
+
+
+
+
+
+
+dojo.declare("dijit.MenuItem",
+		[dijit._Widget, dijit._Templated, dijit._Contained, dijit._CssStateMixin],
+		{
+		// summary:
+		//		A line item in a Menu Widget
+
+		// Make 3 columns
+		// icon, label, and expand arrow (BiDi-dependent) indicating sub-menu
+		templateString: dojo.cache("dijit", "templates/MenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),
+
+		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+			label: { node: "containerNode", type: "innerHTML" },
+			iconClass: { node: "iconNode", type: "class" }
+		}),
+
+		baseClass: "dijitMenuItem",
+
+		// label: String
+		//		Menu text
+		label: '',
+
+		// iconClass: String
+		//		Class to apply to DOMNode to make it display an icon.
+		iconClass: "",
+
+		// accelKey: String
+		//		Text for the accelerator (shortcut) key combination.
+		//		Note that although Menu can display accelerator keys there
+		//		is no infrastructure to actually catch and execute these
+		//		accelerators.
+		accelKey: "",
+
+		// disabled: Boolean
+		//		If true, the menu item is disabled.
+		//		If false, the menu item is enabled.
+		disabled: false,
+
+		_fillContent: function(/*DomNode*/ source){
+			// If button label is specified as srcNodeRef.innerHTML rather than
+			// this.params.label, handle it here.
+			if(source && !("label" in this.params)){
+				this.set('label', source.innerHTML);
+			}
+		},
+
+		postCreate: function(){
+			this.inherited(arguments);
+			dojo.setSelectable(this.domNode, false);
+			var label = this.id+"_text";
+			dojo.attr(this.containerNode, "id", label);
+			if(this.accelKeyNode){
+				dojo.attr(this.accelKeyNode, "id", this.id + "_accel");
+				label += " " + this.id + "_accel";
+			}
+			dijit.setWaiState(this.domNode, "labelledby", label);
+		},
+
+		_onHover: function(){
+			// summary:
+			//		Handler when mouse is moved onto menu item
+			// tags:
+			//		protected
+			this.getParent().onItemHover(this);
+		},
+
+		_onUnhover: function(){
+			// summary:
+			//		Handler when mouse is moved off of menu item,
+			//		possibly to a child menu, or maybe to a sibling
+			//		menuitem or somewhere else entirely.
+			// tags:
+			//		protected
+
+			// if we are unhovering the currently selected item
+			// then unselect it
+			this.getParent().onItemUnhover(this);
+
+			// _onUnhover() is called when the menu is hidden (collapsed), due to clicking
+			// a MenuItem and having it execut.  When that happens, FF and IE don't generate
+			// an onmouseout event for the MenuItem, so give _CssStateMixin some help
+			this._hovering = false;
+			this._setStateClass();
+		},
+
+		_onClick: function(evt){
+			// summary:
+			//		Internal handler for click events on MenuItem.
+			// tags:
+			//		private
+			this.getParent().onItemClick(this, evt);
+			dojo.stopEvent(evt);
+		},
+
+		onClick: function(/*Event*/ evt){
+			// summary:
+			//		User defined function to handle clicks
+			// tags:
+			//		callback
+		},
+
+		focus: function(){
+			// summary:
+			//		Focus on this MenuItem
+			try{
+				if(dojo.isIE == 8){
+					// needed for IE8 which won't scroll TR tags into view on focus yet calling scrollIntoView creates flicker (#10275)
+					this.containerNode.focus();
+				}
+				dijit.focus(this.focusNode);
+			}catch(e){
+				// this throws on IE (at least) in some scenarios
+			}
+		},
+
+		_onFocus: function(){
+			// summary:
+			//		This is called by the focus manager when focus
+			//		goes to this MenuItem or a child menu.
+			// tags:
+			//		protected
+			this._setSelected(true);
+			this.getParent()._onItemFocus(this);
+
+			this.inherited(arguments);
+		},
+
+		_setSelected: function(selected){
+			// summary:
+			//		Indicate that this node is the currently selected one
+			// tags:
+			//		private
+
+			/***
+			 * TODO: remove this method and calls to it, when _onBlur() is working for MenuItem.
+			 * Currently _onBlur() gets called when focus is moved from the MenuItem to a child menu.
+			 * That's not supposed to happen, but the problem is:
+			 * In order to allow dijit.popup's getTopPopup() to work,a sub menu's popupParent
+			 * points to the parent Menu, bypassing the parent MenuItem... thus the
+			 * MenuItem is not in the chain of active widgets and gets a premature call to
+			 * _onBlur()
+			 */
+
+			dojo.toggleClass(this.domNode, "dijitMenuItemSelected", selected);
+		},
+
+		setLabel: function(/*String*/ content){
+			// summary:
+			//		Deprecated.   Use set('label', ...) instead.
+			// tags:
+			//		deprecated
+			dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.", "", "2.0");
+			this.set("label", content);
+		},
+
+		setDisabled: function(/*Boolean*/ disabled){
+			// summary:
+			//		Deprecated.   Use set('disabled', bool) instead.
+			// tags:
+			//		deprecated
+			dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.", "", "2.0");
+			this.set('disabled', disabled);
+		},
+		_setDisabledAttr: function(/*Boolean*/ value){
+			// summary:
+			//		Hook for attr('disabled', ...) to work.
+			//		Enable or disable this menu item.
+			this.disabled = value;
+			dijit.setWaiState(this.focusNode, 'disabled', value ? 'true' : 'false');
+		},
+		_setAccelKeyAttr: function(/*String*/ value){
+			// summary:
+			//		Hook for attr('accelKey', ...) to work.
+			//		Set accelKey on this menu item.
+			this.accelKey=value;
+
+			this.accelKeyNode.style.display=value?"":"none";
+			this.accelKeyNode.innerHTML=value;
+			//have to use colSpan to make it work in IE
+			dojo.attr(this.containerNode,'colSpan',value?"1":"2");
+		}
+	});
+
+}
+
+if(!dojo._hasResource["dijit.PopupMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.PopupMenuItem"] = true;
+dojo.provide("dijit.PopupMenuItem");
+
+
+
+dojo.declare("dijit.PopupMenuItem",
+		dijit.MenuItem,
+		{
+		_fillContent: function(){
+			// summary:
+			//		When Menu is declared in markup, this code gets the menu label and
+			//		the popup widget from the srcNodeRef.
+			// description:
+			//		srcNodeRefinnerHTML contains both the menu item text and a popup widget
+			//		The first part holds the menu item text and the second part is the popup
+			// example:
+			// |	<div dojoType="dijit.PopupMenuItem">
+			// |		<span>pick me</span>
+			// |		<popup> ... </popup>
+			// |	</div>
+			// tags:
+			//		protected
+
+			if(this.srcNodeRef){
+				var nodes = dojo.query("*", this.srcNodeRef);
+				dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]);
+
+				// save pointer to srcNode so we can grab the drop down widget after it's instantiated
+				this.dropDownContainer = this.srcNodeRef;
+			}
+		},
+
+		startup: function(){
+			if(this._started){ return; }
+			this.inherited(arguments);
+
+			// we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's
+			// land now.  move it to dojo.doc.body.
+			if(!this.popup){
+				var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
+				this.popup = dijit.byNode(node);
+			}
+			dojo.body().appendChild(this.popup.domNode);
+			this.popup.startup();
+
+			this.popup.domNode.style.display="none";
+			if(this.arrowWrapper){
+				dojo.style(this.arrowWrapper, "visibility", "");
+			}
+			dijit.setWaiState(this.focusNode, "haspopup", "true");
+		},
+
+		destroyDescendants: function(){
+			if(this.popup){
+				// Destroy the popup, unless it's already been destroyed.  This can happen because
+				// the popup is a direct child of <body> even though it's logically my child.
+				if(!this.popup._destroyed){
+					this.popup.destroyRecursive();
+				}
+				delete this.popup;
+			}
+			this.inherited(arguments);
+		}
+	});
+
+
+}
+
+if(!dojo._hasResource["dijit.CheckedMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.CheckedMenuItem"] = true;
+dojo.provide("dijit.CheckedMenuItem");
+
+
+
+dojo.declare("dijit.CheckedMenuItem",
+		dijit.MenuItem,
+		{
+		// summary:
+		//		A checkbox-like menu item for toggling on and off
+
+		templateString: dojo.cache("dijit", "templates/CheckedMenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">&nbsp;</td>\n</tr>\n"),
+
+		// checked: Boolean
+		//		Our checked state
+		checked: false,
+		_setCheckedAttr: function(/*Boolean*/ checked){
+			// summary:
+			//		Hook so attr('checked', bool) works.
+			//		Sets the class and state for the check box.
+			dojo.toggleClass(this.domNode, "dijitCheckedMenuItemChecked", checked);
+			dijit.setWaiState(this.domNode, "checked", checked);
+			this.checked = checked;
+		},
+
+		onChange: function(/*Boolean*/ checked){
+			// summary:
+			//		User defined function to handle check/uncheck events
+			// tags:
+			//		callback
+		},
+
+		_onClick: function(/*Event*/ e){
+			// summary:
+			//		Clicking this item just toggles its state
+			// tags:
+			//		private
+			if(!this.disabled){
+				this.set("checked", !this.checked);
+				this.onChange(this.checked);
+			}
+			this.inherited(arguments);
+		}
+	});
+
+}
+
+if(!dojo._hasResource["dijit.MenuSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuSeparator"] = true;
+dojo.provide("dijit.MenuSeparator");
+
+
+
+
+
+dojo.declare("dijit.MenuSeparator",
+		[dijit._Widget, dijit._Templated, dijit._Contained],
+		{
+		// summary:
+		//		A line between two menu items
+
+		templateString: dojo.cache("dijit", "templates/MenuSeparator.html", "<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),
+
+		postCreate: function(){
+			dojo.setSelectable(this.domNode, false);
+		},
+
+		isFocusable: function(){
+			// summary:
+			//		Override to always return false
+			// tags:
+			//		protected
+
+			return false; // Boolean
+		}
+	});
+
+
+}
+
+if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Menu"] = true;
+dojo.provide("dijit.Menu");
+
+
+
+
+
+
+
+dojo.declare("dijit._MenuBase",
+	[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
+{
+	// summary:
+	//		Base class for Menu and MenuBar
+
+	// parentMenu: [readonly] Widget
+	//		pointer to menu that displayed me
+	parentMenu: null,
+
+	// popupDelay: Integer
+	//		number of milliseconds before hovering (without clicking) causes the popup to automatically open.
+	popupDelay: 500,
+
+	startup: function(){
+		if(this._started){ return; }
+
+		dojo.forEach(this.getChildren(), function(child){ child.startup(); });
+		this.startupKeyNavChildren();
+
+		this.inherited(arguments);
+	},
+
+	onExecute: function(){
+		// summary:
+		//		Attach point for notification about when a menu item has been executed.
+		//		This is an internal mechanism used for Menus to signal to their parent to
+		//		close them, because they are about to execute the onClick handler.   In
+		//		general developers should not attach to or override this method.
+		// tags:
+		//		protected
+	},
+
+	onCancel: function(/*Boolean*/ closeAll){
+		// summary:
+		//		Attach point for notification about when the user cancels the current menu
+		//		This is an internal mechanism used for Menus to signal to their parent to
+		//		close them.  In general developers should not attach to or override this method.
+		// tags:
+		//		protected
+	},
+
+	_moveToPopup: function(/*Event*/ evt){
+		// summary:
+		//		This handles the right arrow key (left arrow key on RTL systems),
+		//		which will either open a submenu, or move to the next item in the
+		//		ancestor MenuBar
+		// tags:
+		//		private
+
+		if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){
+			this.focusedChild._onClick(evt);
+		}else{
+			var topMenu = this._getTopMenu();
+			if(topMenu && topMenu._isMenuBar){
+				topMenu.focusNext();
+			}
+		}
+	},
+
+	_onPopupHover: function(/*Event*/ evt){
+		// summary:
+		//		This handler is called when the mouse moves over the popup.
+		// tags:
+		//		private
+
+		// if the mouse hovers over a menu popup that is in pending-close state,
+		// then stop the close operation.
+		// This can't be done in onItemHover since some popup targets don't have MenuItems (e.g. ColorPicker)
+		if(this.currentPopup && this.currentPopup._pendingClose_timer){
+			var parentMenu = this.currentPopup.parentMenu;
+			// highlight the parent menu item pointing to this popup
+			if(parentMenu.focusedChild){
+				parentMenu.focusedChild._setSelected(false);
+			}
+			parentMenu.focusedChild = this.currentPopup.from_item;
+			parentMenu.focusedChild._setSelected(true);
+			// cancel the pending close
+			this._stopPendingCloseTimer(this.currentPopup);
+		}
+	},
+
+	onItemHover: function(/*MenuItem*/ item){
+		// summary:
+		//		Called when cursor is over a MenuItem.
+		// tags:
+		//		protected
+
+		// Don't do anything unless user has "activated" the menu by:
+		//		1) clicking it
+		//		2) opening it from a parent menu (which automatically focuses it)
+		if(this.isActive){
+			this.focusChild(item);
+			if(this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer){
+				this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay);
+			}
+		}
+		// if the user is mixing mouse and keyboard navigation,
+		// then the menu may not be active but a menu item has focus,
+		// but it's not the item that the mouse just hovered over.
+		// To avoid both keyboard and mouse selections, use the latest.
+		if(this.focusedChild){
+			this.focusChild(item);
+		}
+		this._hoveredChild = item;
+	},
+
+	_onChildBlur: function(item){
+		// summary:
+		//		Called when a child MenuItem becomes inactive because focus
+		//		has been removed from the MenuItem *and* it's descendant menus.
+		// tags:
+		//		private
+		this._stopPopupTimer();
+		item._setSelected(false);
+		// Close all popups that are open and descendants of this menu
+		var itemPopup = item.popup;
+		if(itemPopup){
+			this._stopPendingCloseTimer(itemPopup);
+			itemPopup._pendingClose_timer = setTimeout(function(){
+				itemPopup._pendingClose_timer = null;
+				if(itemPopup.parentMenu){
+					itemPopup.parentMenu.currentPopup = null;
+				}
+				dijit.popup.close(itemPopup); // this calls onClose
+			}, this.popupDelay);
+		}
+	},
+
+	onItemUnhover: function(/*MenuItem*/ item){
+		// summary:
+		//		Callback fires when mouse exits a MenuItem
+		// tags:
+		//		protected
+
+		if(this.isActive){
+			this._stopPopupTimer();
+		}
+		if(this._hoveredChild == item){ this._hoveredChild = null; }
+	},
+
+	_stopPopupTimer: function(){
+		// summary:
+		//		Cancels the popup timer because the user has stop hovering
+		//		on the MenuItem, etc.
+		// tags:
+		//		private
+		if(this.hover_timer){
+			clearTimeout(this.hover_timer);
+			this.hover_timer = null;
+		}
+	},
+
+	_stopPendingCloseTimer: function(/*dijit._Widget*/ popup){
+		// summary:
+		//		Cancels the pending-close timer because the close has been preempted
+		// tags:
+		//		private
+		if(popup._pendingClose_timer){
+			clearTimeout(popup._pendingClose_timer);
+			popup._pendingClose_timer = null;
+		}
+	},
+
+	_stopFocusTimer: function(){
+		// summary:
+		//		Cancels the pending-focus timer because the menu was closed before focus occured
+		// tags:
+		//		private
+		if(this._focus_timer){
+			clearTimeout(this._focus_timer);
+			this._focus_timer = null;
+		}
+	},
+
+	_getTopMenu: function(){
+		// summary:
+		//		Returns the top menu in this chain of Menus
+		// tags:
+		//		private
+		for(var top=this; top.parentMenu; top=top.parentMenu);
+		return top;
+	},
+
+	onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
+		// summary:
+		//		Handle clicks on an item.
+		// tags:
+		//		private
+
+		// this can't be done in _onFocus since the _onFocus events occurs asynchronously
+		if(typeof this.isShowingNow == 'undefined'){ // non-popup menu
+			this._markActive();
+		}
+
+		this.focusChild(item);
+
+		if(item.disabled){ return false; }
+
+		if(item.popup){
+			this._openPopup();
+		}else{
+			// before calling user defined handler, close hierarchy of menus
+			// and restore focus to place it was when menu was opened
+			this.onExecute();
+
+			// user defined handler for click
+			item.onClick(evt);
+		}
+	},
+
+	_openPopup: function(){
+		// summary:
+		//		Open the popup to the side of/underneath the current menu item
+		// tags:
+		//		protected
+
+		this._stopPopupTimer();
+		var from_item = this.focusedChild;
+		if(!from_item){ return; } // the focused child lost focus since the timer was started
+		var popup = from_item.popup;
+		if(popup.isShowingNow){ return; }
+		if(this.currentPopup){
+			this._stopPendingCloseTimer(this.currentPopup);
+			dijit.popup.close(this.currentPopup);
+		}
+		popup.parentMenu = this;
+		popup.from_item = from_item; // helps finding the parent item that should be focused for this popup
+		var self = this;
+		dijit.popup.open({
+			parent: this,
+			popup: popup,
+			around: from_item.domNode,
+			orient: this._orient || (this.isLeftToRight() ?
+									{'TR': 'TL', 'TL': 'TR', 'BR': 'BL', 'BL': 'BR'} :
+									{'TL': 'TR', 'TR': 'TL', 'BL': 'BR', 'BR': 'BL'}),
+			onCancel: function(){ // called when the child menu is canceled
+				// set isActive=false (_closeChild vs _cleanUp) so that subsequent hovering will NOT open child menus
+				// which seems aligned with the UX of most applications (e.g. notepad, wordpad, paint shop pro)
+				self.focusChild(from_item);	// put focus back on my node
+				self._cleanUp();			// close the submenu (be sure this is done _after_ focus is moved)
+				from_item._setSelected(true); // oops, _cleanUp() deselected the item
+				self.focusedChild = from_item;	// and unset focusedChild
+			},
+			onExecute: dojo.hitch(this, "_cleanUp")
+		});
+
+		this.currentPopup = popup;
+		// detect mouseovers to handle lazy mouse movements that temporarily focus other menu items
+		popup.connect(popup.domNode, "onmouseenter", dojo.hitch(self, "_onPopupHover")); // cleaned up when the popped-up widget is destroyed on close
+
+		if(popup.focus){
+			// If user is opening the popup via keyboard (right arrow, or down arrow for MenuBar),
+			// if the cursor happens to collide with the popup, it will generate an onmouseover event
+			// even though the mouse wasn't moved.   Use a setTimeout() to call popup.focus so that
+			// our focus() call overrides the onmouseover event, rather than vice-versa.  (#8742)
+			popup._focus_timer = setTimeout(dojo.hitch(popup, function(){
+				this._focus_timer = null;
+				this.focus();
+			}), 0);
+		}
+	},
+
+	_markActive: function(){
+		// summary:
+		//              Mark this menu's state as active.
+		//		Called when this Menu gets focus from:
+		//			1) clicking it (mouse or via space/arrow key)
+		//			2) being opened by a parent menu.
+		//		This is not called just from mouse hover.
+		//		Focusing a menu via TAB does NOT automatically set isActive
+		//		since TAB is a navigation operation and not a selection one.
+		//		For Windows apps, pressing the ALT key focuses the menubar
+		//		menus (similar to TAB navigation) but the menu is not active
+		//		(ie no dropdown) until an item is clicked.
+		this.isActive = true;
+		dojo.addClass(this.domNode, "dijitMenuActive");
+		dojo.removeClass(this.domNode, "dijitMenuPassive");
+	},
+
+	onOpen: function(/*Event*/ e){
+		// summary:
+		//		Callback when this menu is opened.
+		//		This is called by the popup manager as notification that the menu
+		//		was opened.
+		// tags:
+		//		private
+
+		this.isShowingNow = true;
+		this._markActive();
+	},
+
+	_markInactive: function(){
+		// summary:
+		//		Mark this menu's state as inactive.
+		this.isActive = false; // don't do this in _onBlur since the state is pending-close until we get here
+		dojo.removeClass(this.domNode, "dijitMenuActive");
+		dojo.addClass(this.domNode, "dijitMenuPassive");
+	},
+
+	onClose: function(){
+		// summary:
+		//		Callback when this menu is closed.
+		//		This is called by the popup manager as notification that the menu
+		//		was closed.
+		// tags:
+		//		private
+
+		this._stopFocusTimer();
+		this._markInactive();
+		this.isShowingNow = false;
+		this.parentMenu = null;
+	},
+
+	_closeChild: function(){
+		// summary:
+		//		Called when submenu is clicked or focus is lost.  Close hierarchy of menus.
+		// tags:
+		//		private
+		this._stopPopupTimer();
+		if(this.focusedChild){ // unhighlight the focused item
+			this.focusedChild._setSelected(false);
+			this.focusedChild._onUnhover();
+			this.focusedChild = null;
+		}
+		if(this.currentPopup){
+			// Close all popups that are open and descendants of this menu
+			dijit.popup.close(this.currentPopup);
+			this.currentPopup = null;
+		}
+	},
+
+	_onItemFocus: function(/*MenuItem*/ item){
+		// summary:
+		//		Called when child of this Menu gets focus from:
+		//			1) clicking it
+		//			2) tabbing into it
+		//			3) being opened by a parent menu.
+		//		This is not called just from mouse hover.
+		if(this._hoveredChild && this._hoveredChild != item){
+			this._hoveredChild._onUnhover(); // any previous mouse movement is trumped by focus selection
+		}
+	},
+
+	_onBlur: function(){
+		// summary:
+		//		Called when focus is moved away from this Menu and it's submenus.
+		// tags:
+		//		protected
+		this._cleanUp();
+		this.inherited(arguments);
+	},
+
+	_cleanUp: function(){
+		// summary:
+		//		Called when the user is done with this menu.  Closes hierarchy of menus.
+		// tags:
+		//		private
+
+		this._closeChild(); // don't call this.onClose since that's incorrect for MenuBar's that never close
+		if(typeof this.isShowingNow == 'undefined'){ // non-popup menu doesn't call onClose
+			this._markInactive();
+		}
+	}
+});
+
+dojo.declare("dijit.Menu",
+	dijit._MenuBase,
+	{
+	// summary
+	//		A context menu you can assign to multiple elements
+
+	// TODO: most of the code in here is just for context menu (right-click menu)
+	// support.  In retrospect that should have been a separate class (dijit.ContextMenu).
+	// Split them for 2.0
+
+	constructor: function(){
+		this._bindings = [];
+	},
+
+	templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
+
+	baseClass: "dijitMenu",
+
+	// targetNodeIds: [const] String[]
+	//		Array of dom node ids of nodes to attach to.
+	//		Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
+	targetNodeIds: [],
+
+	// contextMenuForWindow: [const] Boolean
+	//		If true, right clicking anywhere on the window will cause this context menu to open.
+	//		If false, must specify targetNodeIds.
+	contextMenuForWindow: false,
+
+	// leftClickToOpen: [const] Boolean
+	//		If true, menu will open on left click instead of right click, similiar to a file menu.
+	leftClickToOpen: false,
+
+	// refocus: Boolean
+	// 		When this menu closes, re-focus the element which had focus before it was opened.
+	refocus: true,
+
+	postCreate: function(){
+		if(this.contextMenuForWindow){
+			this.bindDomNode(dojo.body());
+		}else{
+			// TODO: should have _setTargetNodeIds() method to handle initialization and a possible
+			// later attr('targetNodeIds', ...) call.   There's also a problem that targetNodeIds[]
+			// gets stale after calls to bindDomNode()/unBindDomNode() as it still is just the original list (see #9610)
+			dojo.forEach(this.targetNodeIds, this.bindDomNode, this);
+		}
+		var k = dojo.keys, l = this.isLeftToRight();
+		this._openSubMenuKey = l ? k.RIGHT_ARROW : k.LEFT_ARROW;
+		this._closeSubMenuKey = l ? k.LEFT_ARROW : k.RIGHT_ARROW;
+		this.connectKeyNavHandlers([k.UP_ARROW], [k.DOWN_ARROW]);
+	},
+
+	_onKeyPress: function(/*Event*/ evt){
+		// summary:
+		//		Handle keyboard based menu navigation.
+		// tags:
+		//		protected
+
+		if(evt.ctrlKey || evt.altKey){ return; }
+
+		switch(evt.charOrCode){
+			case this._openSubMenuKey:
+				this._moveToPopup(evt);
+				dojo.stopEvent(evt);
+				break;
+			case this._closeSubMenuKey:
+				if(this.parentMenu){
+					if(this.parentMenu._isMenuBar){
+						this.parentMenu.focusPrev();
+					}else{
+						this.onCancel(false);
+					}
+				}else{
+					dojo.stopEvent(evt);
+				}
+				break;
+		}
+	},
+
+	// thanks burstlib!
+	_iframeContentWindow: function(/* HTMLIFrameElement */iframe_el){
+		// summary:
+		//		Returns the window reference of the passed iframe
+		// tags:
+		//		private
+		var win = dojo.window.get(this._iframeContentDocument(iframe_el)) ||
+			// Moz. TODO: is this available when defaultView isn't?
+			this._iframeContentDocument(iframe_el)['__parent__'] ||
+			(iframe_el.name && dojo.doc.frames[iframe_el.name]) || null;
+		return win;	//	Window
+	},
+
+	_iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){
+		// summary:
+		//		Returns a reference to the document object inside iframe_el
+		// tags:
+		//		protected
+		var doc = iframe_el.contentDocument // W3
+			|| (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE
+			|| (iframe_el.name && dojo.doc.frames[iframe_el.name] && dojo.doc.frames[iframe_el.name].document)
+			|| null;
+		return doc;	//	HTMLDocument
+	},
+
+	bindDomNode: function(/*String|DomNode*/ node){
+		// summary:
+		//		Attach menu to given node
+		node = dojo.byId(node);
+
+		var cn;	// Connect node
+
+		// Support context menus on iframes.   Rather than binding to the iframe itself we need
+		// to bind to the <body> node inside the iframe.
+		if(node.tagName.toLowerCase() == "iframe"){
+			var iframe = node,
+				win = this._iframeContentWindow(iframe);
+			cn = dojo.withGlobal(win, dojo.body);
+		}else{
+			
+			// To capture these events at the top level, attach to <html>, not <body>.
+			// Otherwise right-click context menu just doesn't work.
+			cn = (node == dojo.body() ? dojo.doc.documentElement : node);
+		}
+
+
+		// "binding" is the object to track our connection to the node (ie, the parameter to bindDomNode())
+		var binding = {
+			node: node,
+			iframe: iframe
+		};
+
+		// Save info about binding in _bindings[], and make node itself record index(+1) into
+		// _bindings[] array.   Prefix w/_dijitMenu to avoid setting an attribute that may
+		// start with a number, which fails on FF/safari.
+		dojo.attr(node, "_dijitMenu" + this.id, this._bindings.push(binding));
+
+		// Setup the connections to monitor click etc., unless we are connecting to an iframe which hasn't finished
+		// loading yet, in which case we need to wait for the onload event first, and then connect
+		// On linux Shift-F10 produces the oncontextmenu event, but on Windows it doesn't, so
+		// we need to monitor keyboard events in addition to the oncontextmenu event.
+		var doConnects = dojo.hitch(this, function(cn){
+			return [
+				// TODO: when leftClickToOpen is true then shouldn't space/enter key trigger the menu,
+				// rather than shift-F10?
+				dojo.connect(cn, this.leftClickToOpen ? "onclick" : "oncontextmenu", this, function(evt){
+					// Schedule context menu to be opened unless it's already been scheduled from onkeydown handler
+					dojo.stopEvent(evt);
+					this._scheduleOpen(evt.target, iframe, {x: evt.pageX, y: evt.pageY});
+				}),
+				dojo.connect(cn, "onkeydown", this, function(evt){
+					if(evt.shiftKey && evt.keyCode == dojo.keys.F10){
+						dojo.stopEvent(evt);
+						this._scheduleOpen(evt.target, iframe);	// no coords - open near target node
+					}
+				})
+			];	
+		});
+		binding.connects = cn ? doConnects(cn) : [];
+
+		if(iframe){
+			// Setup handler to [re]bind to the iframe when the contents are initially loaded,
+			// and every time the contents change.
+			// Need to do this b/c we are actually binding to the iframe's <body> node.
+			// Note: can't use dojo.connect(), see #9609.
+
+			binding.onloadHandler = dojo.hitch(this, function(){
+				// want to remove old connections, but IE throws exceptions when trying to
+				// access the <body> node because it's already gone, or at least in a state of limbo
+
+				var win = this._iframeContentWindow(iframe);
+					cn = dojo.withGlobal(win, dojo.body);
+				binding.connects = doConnects(cn);
+			});
+			if(iframe.addEventListener){
+				iframe.addEventListener("load", binding.onloadHandler, false);
+			}else{
+				iframe.attachEvent("onload", binding.onloadHandler);
+			}
+		}
+	},
+
+	unBindDomNode: function(/*String|DomNode*/ nodeName){
+		// summary:
+		//		Detach menu from given node
+
+		var node;
+		try{
+			node = dojo.byId(nodeName);
+		}catch(e){
+			// On IE the dojo.byId() call will get an exception if the attach point was
+			// the <body> node of an <iframe> that has since been reloaded (and thus the
+			// <body> node is in a limbo state of destruction.
+			return;
+		}
+
+		// node["_dijitMenu" + this.id] contains index(+1) into my _bindings[] array
+		var attrName = "_dijitMenu" + this.id;
+		if(node && dojo.hasAttr(node, attrName)){
+			var bid = dojo.attr(node, attrName)-1, b = this._bindings[bid];
+			dojo.forEach(b.connects, dojo.disconnect);
+
+			// Remove listener for iframe onload events
+			var iframe = b.iframe;
+			if(iframe){
+				if(iframe.removeEventListener){
+					iframe.removeEventListener("load", b.onloadHandler, false);
+				}else{
+					iframe.detachEvent("onload", b.onloadHandler);
+				}
+			}
+
+			dojo.removeAttr(node, attrName);
+			delete this._bindings[bid];
+		}
+	},
+
+	_scheduleOpen: function(/*DomNode?*/ target, /*DomNode?*/ iframe, /*Object?*/ coords){
+		// summary:
+		//		Set timer to display myself.  Using a timer rather than displaying immediately solves
+		//		two problems:
+		//
+		//		1. IE: without the delay, focus work in "open" causes the system
+		//		context menu to appear in spite of stopEvent.
+		//
+		//		2. Avoid double-shows on linux, where shift-F10 generates an oncontextmenu event
+		//		even after a dojo.stopEvent(e).  (Shift-F10 on windows doesn't generate the
+		//		oncontextmenu event.)
+
+		if(!this._openTimer){
+			this._openTimer = setTimeout(dojo.hitch(this, function(){
+				delete this._openTimer;
+				this._openMyself({
+					target: target,
+					iframe: iframe,
+					coords: coords
+				});
+			}), 1);
+		}
+	},
+
+	_openMyself: function(args){
+		// summary:
+		//		Internal function for opening myself when the user does a right-click or something similar.
+		// args:
+		//		This is an Object containing:
+		//		* target:
+		//			The node that is being clicked
+		//		* iframe:
+		//			If an <iframe> is being clicked, iframe points to that iframe
+		//		* coords:
+		//			Put menu at specified x/y position in viewport, or if iframe is
+		//			specified, then relative to iframe.
+		//
+		//		_openMyself() formerly took the event object, and since various code references
+		//		evt.target (after connecting to _openMyself()), using an Object for parameters
+		//		(so that old code still works).
+
+		var target = args.target,
+			iframe = args.iframe,
+			coords = args.coords;
+
+		// Get coordinates to open menu, either at specified (mouse) position or (if triggered via keyboard)
+		// then near the node the menu is assigned to.
+		if(coords){
+			if(iframe){
+				// Specified coordinates are on <body> node of an <iframe>, convert to match main document
+				var od = target.ownerDocument,
+					ifc = dojo.position(iframe, true),
+					win = this._iframeContentWindow(iframe),
+					scroll = dojo.withGlobal(win, "_docScroll", dojo);
+	
+				var cs = dojo.getComputedStyle(iframe),
+					tp = dojo._toPixelValue,
+					left = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingLeft)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderLeftWidth) : 0),
+					top = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingTop)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderTopWidth) : 0);
+
+				coords.x += ifc.x + left - scroll.x;
+				coords.y += ifc.y + top - scroll.y;
+			}
+		}else{
+			coords = dojo.position(target, true);
+			coords.x += 10;
+			coords.y += 10;
+		}
+
+		var self=this;
+		var savedFocus = dijit.getFocus(this);
+		function closeAndRestoreFocus(){
+			// user has clicked on a menu or popup
+			if(self.refocus){
+				dijit.focus(savedFocus);
+			}
+			dijit.popup.close(self);
+		}
+		dijit.popup.open({
+			popup: this,
+			x: coords.x,
+			y: coords.y,
+			onExecute: closeAndRestoreFocus,
+			onCancel: closeAndRestoreFocus,
+			orient: this.isLeftToRight() ? 'L' : 'R'
+		});
+		this.focus();
+
+		this._onBlur = function(){
+			this.inherited('_onBlur', arguments);
+			// Usually the parent closes the child widget but if this is a context
+			// menu then there is no parent
+			dijit.popup.close(this);
+			// don't try to restore focus; user has clicked another part of the screen
+			// and set focus there
+		};
+	},
+
+	uninitialize: function(){
+ 		dojo.forEach(this._bindings, function(b){ if(b){ this.unBindDomNode(b.node); } }, this);
+ 		this.inherited(arguments);
+	}
+}
+);
+
+// Back-compat (TODO: remove in 2.0)
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dijit.form.Select"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Select"] = true;
+dojo.provide("dijit.form.Select");
+
+
+
+
+
+
+
+
+dojo.declare("dijit.form._SelectMenu", dijit.Menu, {
+	// summary:
+	//		An internally-used menu for dropdown that allows us a vertical scrollbar
+	buildRendering: function(){
+		// summary:
+		//		Stub in our own changes, so that our domNode is not a table
+		//		otherwise, we won't respond correctly to heights/overflows
+		this.inherited(arguments);
+		var o = (this.menuTableNode = this.domNode);
+		var n = (this.domNode = dojo.create("div", {style: {overflowX: "hidden", overflowY: "scroll"}}));
+		if(o.parentNode){
+			o.parentNode.replaceChild(n, o);
+		}
+		dojo.removeClass(o, "dijitMenuTable");
+		n.className = o.className + " dijitSelectMenu";
+		o.className = "dijitReset dijitMenuTable";
+		dijit.setWaiRole(o,"listbox");
+		dijit.setWaiRole(n,"presentation");
+		n.appendChild(o);
+	},
+	resize: function(/*Object*/ mb){
+		// summary:
+		//		Overridden so that we are able to handle resizing our
+		//		internal widget.  Note that this is not a "full" resize
+		//		implementation - it only works correctly if you pass it a
+		//		marginBox.
+		//
+		// mb: Object
+		//		The margin box to set this dropdown to.
+		if(mb){
+			dojo.marginBox(this.domNode, mb);
+			if("w" in mb){
+				// We've explicitly set the wrapper <div>'s width, so set <table> width to match.
+				// 100% is safer than a pixel value because there may be a scroll bar with
+				// browser/OS specific width.
+				this.menuTableNode.style.width = "100%";
+			}
+		}
+	}
+});
+
+dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropDown], {
+	// summary:
+	//		This is a "styleable" select box - it is basically a DropDownButton which
+	//		can take a <select> as its input.
+
+	baseClass: "dijitSelect",
+
+	templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"  dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),
+
+	// attributeMap: Object
+	//		Add in our style to be applied to the focus node
+	attributeMap: dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),
+
+	// required: Boolean
+	//		Can be true or false, default is false.
+	required: false,
+
+	// state: String
+	//		Shows current state (ie, validation result) of input (Normal, Warning, or Error)
+	state: "",
+
+	//	tooltipPosition: String[]
+	//		See description of dijit.Tooltip.defaultPosition for details on this parameter.
+	tooltipPosition: [],
+
+	// emptyLabel: string
+	//		What to display in an "empty" dropdown
+	emptyLabel: "",
+
+	// _isLoaded: Boolean
+	//		Whether or not we have been loaded
+	_isLoaded: false,
+
+	// _childrenLoaded: Boolean
+	//		Whether or not our children have been loaded
+	_childrenLoaded: false,
+
+	_fillContent: function(){
+		// summary:
+		//		Set the value to be the first, or the selected index
+		this.inherited(arguments);
+		if(this.options.length && !this.value && this.srcNodeRef){
+			var si = this.srcNodeRef.selectedIndex;
+			this.value = this.options[si != -1 ? si : 0].value;
+		}
+
+		// Create the dropDown widget
+		this.dropDown = new dijit.form._SelectMenu({id: this.id + "_menu"});
+		dojo.addClass(this.dropDown.domNode, this.baseClass + "Menu");
+	},
+
+	_getMenuItemForOption: function(/*dijit.form.__SelectOption*/ option){
+		// summary:
+		//		For the given option, return the menu item that should be
+		//		used to display it.  This can be overridden as needed
+		if(!option.value){
+			// We are a separator (no label set for it)
+			return new dijit.MenuSeparator();
+		}else{
+			// Just a regular menu option
+			var click = dojo.hitch(this, "_setValueAttr", option);
+			var item = new dijit.MenuItem({
+				option: option,
+				label: option.label,
+				onClick: click,
+				disabled: option.disabled || false
+			});
+			dijit.setWaiRole(item.focusNode, "listitem");
+			return item;
+		}
+	},
+
+	_addOptionItem: function(/*dijit.form.__SelectOption*/ option){
+		// summary:
+		//		For the given option, add an option to our dropdown.
+		//		If the option doesn't have a value, then a separator is added
+		//		in that place.
+		if(this.dropDown){
+			this.dropDown.addChild(this._getMenuItemForOption(option));
+		}
+	},
+
+	_getChildren: function(){
+		if(!this.dropDown){
+			return [];
+		}
+		return this.dropDown.getChildren();
+	},
+
+	_loadChildren: function(/*Boolean*/ loadMenuItems){
+		// summary:
+		//		Resets the menu and the length attribute of the button - and
+		//		ensures that the label is appropriately set.
+		//	loadMenuItems: Boolean
+		//		actually loads the child menu items - we only do this when we are
+		//		populating for showing the dropdown.
+
+		if(loadMenuItems === true){
+			// this.inherited destroys this.dropDown's child widgets (MenuItems).
+			// Avoid this.dropDown (Menu widget) having a pointer to a destroyed widget (which will cause
+			// issues later in _setSelected). (see #10296)
+			if(this.dropDown){
+				delete this.dropDown.focusedChild;
+			}
+			if(this.options.length){
+				this.inherited(arguments);
+			}else{
+				// Drop down menu is blank but add one blank entry just so something appears on the screen
+				// to let users know that they are no choices (mimicing native select behavior)
+				dojo.forEach(this._getChildren(), function(child){ child.destroyRecursive(); });
+				var item = new dijit.MenuItem({label: "&nbsp;"});
+				this.dropDown.addChild(item);
+			}
+		}else{
+			this._updateSelection();
+		}
+
+		var len = this.options.length;
+		this._isLoaded = false;
+		this._childrenLoaded = true;
+
+		if(!this._loadingStore){
+			// Don't call this if we are loading - since we will handle it later
+			this._setValueAttr(this.value);
+		}
+	},
+
+	_setValueAttr: function(value){
+		this.inherited(arguments);
+		dojo.attr(this.valueNode, "value", this.get("value"));
+	},
+
+	_setDisplay: function(/*String*/ newDisplay){
+		// summary:
+		//		sets the display for the given value (or values)
+		this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' +
+					(newDisplay || this.emptyLabel || "&nbsp;") +
+					'</span>';
+		dijit.setWaiState(this.focusNode, "valuetext", (newDisplay || this.emptyLabel || "&nbsp;") );
+	},
+
+	validate: function(/*Boolean*/ isFocused){
+		// summary:
+		//		Called by oninit, onblur, and onkeypress.
+		// description:
+		//		Show missing or invalid messages if appropriate, and highlight textbox field.
+		//		Used when a select is initially set to no value and the user is required to
+		//		set the value.
+		
+		var isValid = this.isValid(isFocused);
+		this.state = isValid ? "" : "Error";
+		this._setStateClass();
+		dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true");
+		var message = isValid ? "" : this._missingMsg;
+		if(this._message !== message){
+			this._message = message;
+			dijit.hideTooltip(this.domNode);
+			if(message){
+				dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight());
+			}
+		}
+		return isValid;
+	},
+
+	isValid: function(/*Boolean*/ isFocused){
+		// summary:
+		//		Whether or not this is a valid value.   The only way a Select
+		//		can be invalid is when it's required but nothing is selected.
+		return (!this.required || !(/^\s*$/.test(this.value)));
+	},
+
+	reset: function(){
+		// summary:
+		//		Overridden so that the state will be cleared.
+		this.inherited(arguments);
+		dijit.hideTooltip(this.domNode);
+		this.state = "";
+		this._setStateClass();
+		delete this._message;
+	},
+
+	postMixInProperties: function(){
+		// summary:
+		//		set the missing message
+		this.inherited(arguments);
+		this._missingMsg = dojo.i18n.getLocalization("dijit.form", "validate",
+									this.lang).missingMessage;
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		if(this.tableNode.style.width){
+			dojo.addClass(this.domNode, this.baseClass + "FixedWidth");
+		}
+	},
+
+	isLoaded: function(){
+		return this._isLoaded;
+	},
+
+	loadDropDown: function(/*Function*/ loadCallback){
+		// summary:
+		//		populates the menu
+		this._loadChildren(true);
+		this._isLoaded = true;
+		loadCallback();
+	},
+
+	closeDropDown: function(){
+		// overriding _HasDropDown.closeDropDown()
+		this.inherited(arguments);
+
+		if(this.dropDown && this.dropDown.menuTableNode){
+			// Erase possible width: 100% setting from _SelectMenu.resize().
+			// Leaving it would interfere with the next openDropDown() call, which
+			// queries the natural size of the drop down.
+			this.dropDown.menuTableNode.style.width = "";
+		}
+	},
+
+	uninitialize: function(preserveDom){
+		if(this.dropDown && !this.dropDown._destroyed){
+			this.dropDown.destroyRecursive(preserveDom);
+			delete this.dropDown;
+		}
+		this.inherited(arguments);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._editor.plugins.LinkDialog"] = true;
+dojo.provide("dijit._editor.plugins.LinkDialog");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+dojo.declare("dijit._editor.plugins.LinkDialog", dijit._editor._Plugin, {
+	// summary:
+	//		This plugin provides the basis for an 'anchor' (link) dialog and an extension of it
+	//		provides the image link dialog.
+	//
+	// description:
+	//		The command provided by this plugin is:
+	//		* createLink
+
+	// Override _Plugin.buttonClass.   This plugin is controlled by a DropDownButton
+	// (which triggers a TooltipDialog).
+	buttonClass: dijit.form.DropDownButton,
+
+	// Override _Plugin.useDefaultCommand... processing is handled by this plugin, not by dijit.Editor.
+	useDefaultCommand: false,
+
+	// urlRegExp: [protected] String
+	//		Used for validating input as correct URL.  While file:// urls are not terribly
+	//		useful, they are technically valid.
+	urlRegExp: "((https?|ftps?|file)\\://|\./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",
+
+	// emailRegExp: [protected] String
+	//		Used for validating input as correct email address.  Taken from dojox.validate
+	emailRegExp:  "<?(mailto\\:)([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+" /*username*/ + "@" +  
+        "((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)+(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)\\.?)|localhost|^[^-][a-zA-Z0-9_-]*>?",	// host.
+
+	// htmlTemplate: [protected] String
+	//		String used for templating the HTML to insert at the desired point.
+	htmlTemplate: "<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\"" +
+		" target=\"${targetSelect}\"" +
+		">${textInput}</a>",
+
+	// tag: [protected] String
+	//		Tag used for the link type.
+	tag: "a",
+
+	// _hostRxp [private] RegExp
+	//		Regular expression used to validate url fragments (ip address, hostname, etc)
+	_hostRxp:  new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
+
+	// _userAtRxp [private] RegExp
+	//		Regular expression used to validate e-mail address fragment.
+	_userAtRxp: new RegExp("^([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+@", "i"),
+
+	// linkDialogTemplate: [protected] String
+	//		Template for contents of TooltipDialog to pick URL
+	linkDialogTemplate: [
+		"<table><tr><td>",
+		"<label for='${id}_urlInput'>${url}</label>",
+		"</td><td>",
+		"<input dojoType='dijit.form.ValidationTextBox' required='true' " +
+		"id='${id}_urlInput' name='urlInput' intermediateChanges='true'>",
+		"</td></tr><tr><td>",
+		"<label for='${id}_textInput'>${text}</label>",
+		"</td><td>",
+		"<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' " +
+		"name='textInput' intermediateChanges='true'>",
+		"</td></tr><tr><td>",
+		"<label for='${id}_targetSelect'>${target}</label>",
+		"</td><td>",
+		"<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>",
+		"<option selected='selected' value='_self'>${currentWindow}</option>",
+		"<option value='_blank'>${newWindow}</option>",
+		"<option value='_top'>${topWindow}</option>",
+		"<option value='_parent'>${parentWindow}</option>",
+		"</select>",
+		"</td></tr><tr><td colspan='2'>",
+		"<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
+		"<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
+		"</td></tr></table>"
+	].join(""),
+
+	_initButton: function(){
+		// Override _Plugin._initButton() to initialize DropDownButton and TooltipDialog.
+		var _this = this;
+		this.tag = this.command == 'insertImage' ? 'img' : 'a';
+		var messages = dojo.mixin(dojo.i18n.getLocalization("dijit", "common", this.lang),
+			dojo.i18n.getLocalization("dijit._editor", "LinkDialog", this.lang));
+		var dropDown = (this.dropDown = new dijit.TooltipDialog({
+			title: messages[this.command + "Title"],
+			execute: dojo.hitch(this, "setValue"),
+			onOpen: function(){
+				_this._onOpenDialog();
+				dijit.TooltipDialog.prototype.onOpen.apply(this, arguments);
+			},
+			onCancel: function(){
+				setTimeout(dojo.hitch(_this, "_onCloseDialog"),0);
+			}
+		}));
+		messages.urlRegExp = this.urlRegExp;
+		messages.id = dijit.getUniqueId(this.editor.id);
+		this._uniqueId = messages.id;
+		this._setContent(dropDown.title +
+			"<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>" +
+			dojo.string.substitute(this.linkDialogTemplate, messages));
+		dropDown.startup();
+		this._urlInput = dijit.byId(this._uniqueId + "_urlInput");
+		this._textInput = dijit.byId(this._uniqueId + "_textInput");
+		this._setButton = dijit.byId(this._uniqueId + "_setButton");
+		this.connect(dijit.byId(this._uniqueId + "_cancelButton"), "onClick", function(){
+			this.dropDown.onCancel();
+		});
+		if(this._urlInput){
+			this.connect(this._urlInput, "onChange", "_checkAndFixInput");
+		}
+		if(this._textInput){
+			this.connect(this._textInput, "onChange", "_checkAndFixInput");
+		}
+
+		// Build up the dual check for http/https/file:, and mailto formats.
+		this._urlRegExp = new RegExp("^" + this.urlRegExp + "$", "i");
+		this._emailRegExp = new RegExp("^" + this.emailRegExp + "$", "i");
+		this._urlInput.isValid = dojo.hitch(this, function(){
+			// Function over-ride of isValid to test if the input matches a url or a mailto style link.
+			var value = this._urlInput.get("value");
+			return this._urlRegExp.test(value) || this._emailRegExp.test(value);
+		});
+
+		this._connectTagEvents();
+		this.inherited(arguments);
+	},
+
+	_checkAndFixInput: function(){
+		// summary:
+		//		A function to listen for onChange events and test the input contents
+		//		for valid information, such as valid urls with http/https/ftp and if
+		//		not present, try and guess if the input url is relative or not, and if
+		//		not, append http:// to it.  Also validates other fields as determined by
+		//		the internal _isValid function.
+		var self = this;
+		var url = this._urlInput.get("value");
+		var fixupUrl = function(url){
+			var appendHttp = false;
+			var appendMailto = false;
+			if(url && url.length > 1){
+				url = dojo.trim(url);
+				if(url.indexOf("mailto:") !== 0){
+					if(url.indexOf("/") > 0){
+						if(url.indexOf("://") === -1){
+							// Check that it doesn't start with / or ./, which would
+							// imply 'target server relativeness'
+							if(url.charAt(0) !== '/' && url.indexOf("./") !== 0){
+								if(self._hostRxp.test(url)){
+									appendHttp = true;
+								}
+							}
+						}
+					}else if(self._userAtRxp.test(url)){
+						// If it looks like a foo@, append a mailto.
+						appendMailto = true;
+					}
+				}
+			}
+			if(appendHttp){
+				self._urlInput.set("value", "http://" + url);
+			}
+			if(appendMailto){
+				self._urlInput.set("value", "mailto:" + url);
+			}
+			self._setButton.set("disabled", !self._isValid());
+		};
+		if(this._delayedCheck){
+			clearTimeout(this._delayedCheck);
+			this._delayedCheck = null;
+		}
+		this._delayedCheck = setTimeout(function(){
+			fixupUrl(url);
+		}, 250);
+	},
+
+	_connectTagEvents: function(){
+		// summary:
+		//		Over-ridable function that connects tag specific events.
+		this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+			this.connect(this.editor.editNode, "ondblclick", this._onDblClick);
+		}));
+	},
+
+	_isValid: function(){
+		// summary:
+		//		Internal function to allow validating of the inputs
+		//		for a link to determine if set should be disabled or not
+		// tags:
+		//		protected
+		return this._urlInput.isValid() && this._textInput.isValid();
+	},
+
+	_setContent: function(staticPanel){
+		// summary:
+		//		Helper for _initButton above.   Not sure why it's a separate method.
+		this.dropDown.set('content', staticPanel);
+	},
+
+	_checkValues: function(args){
+		// summary:
+		//		Function to check the values in args and 'fix' them up as needed.
+		// args: Object
+		//		Content being set.		
+		// tags: 
+		//		protected
+		if(args && args.urlInput){
+			args.urlInput = args.urlInput.replace(/"/g, "&quot;");
+		}
+		return args;
+	},
+
+	setValue: function(args){
+		// summary:
+		//		Callback from the dialog when user presses "set" button.
+		// tags:
+		//		private
+		//TODO: prevent closing popup if the text is empty
+		this._onCloseDialog();
+		if(dojo.isIE){ //see #4151
+			var sel = dijit.range.getSelection(this.editor.window);
+			var range = sel.getRangeAt(0);
+			var a = range.endContainer;
+			if(a.nodeType === 3){
+				// Text node, may be the link contents, so check parent.
+				// This plugin doesn't really support nested HTML elements
+				// in the link, it assumes all link content is text.
+				a = a.parentNode;
+			}
+			if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
+				// Stll nothing, one last thing to try on IE, as it might be 'img'
+				// and thus considered a control.
+				a = dojo.withGlobal(this.editor.window,
+					"getSelectedElement", dijit._editor.selection, [this.tag]);
+			}
+			if(a && (a.nodeName && a.nodeName.toLowerCase() === this.tag)){
+				// Okay, we do have a match.  IE, for some reason, sometimes pastes before
+				// instead of removing the targetted paste-over element, so we unlink the
+				// old one first.  If we do not the <a> tag remains, but it has no content,
+				// so isn't readily visible (but is wrong for the action).
+				if(this.editor.queryCommandEnabled("unlink")){
+					// Select all the link childent, then unlink.  The following insert will
+					// then replace the selected text.
+					dojo.withGlobal(this.editor.window,
+						"selectElementChildren", dijit._editor.selection, [a]);
+					this.editor.execCommand("unlink");
+				}
+			}
+		}
+		// make sure values are properly escaped, etc.
+		args = this._checkValues(args); 
+		this.editor.execCommand('inserthtml',
+			dojo.string.substitute(this.htmlTemplate, args));
+	},
+
+	_onCloseDialog: function(){
+		// summary:
+		//		Handler for close event on the dialog
+		this.editor.focus();
+	},
+
+	_getCurrentValues: function(a){
+		// summary:
+		//		Over-ride for getting the values to set in the dropdown.
+		// a:
+		//		The anchor/link to process for data for the dropdown.
+		// tags:
+		//		protected
+		var url, text, target;
+		if(a && a.tagName.toLowerCase() === this.tag){
+			url = a.getAttribute('_djrealurl') || a.getAttribute('href');
+			target = a.getAttribute('target') || "_self";
+			text = a.textContent || a.innerText;
+			dojo.withGlobal(this.editor.window, "selectElement", dijit._editor.selection, [a, true]);
+		}else{
+			text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
+		}
+		return {urlInput: url || '', textInput: text || '', targetSelect: target || ''}; //Object;
+	},
+
+	_onOpenDialog: function(){
+		// summary:
+		//		Handler for when the dialog is opened.
+		//		If the caret is currently in a URL then populate the URL's info into the dialog.
+		var a;
+		if(dojo.isIE){
+			// IE is difficult to select the element in, using the range unified
+			// API seems to work reasonably well.
+			var sel = dijit.range.getSelection(this.editor.window);
+			var range = sel.getRangeAt(0);
+			a = range.endContainer;
+			if(a.nodeType === 3){
+				// Text node, may be the link contents, so check parent.
+				// This plugin doesn't really support nested HTML elements
+				// in the link, it assumes all link content is text.
+				a = a.parentNode;
+			}
+			if(a && (a.nodeName && a.nodeName.toLowerCase() !== this.tag)){
+				// Stll nothing, one last thing to try on IE, as it might be 'img'
+				// and thus considered a control.
+				a = dojo.withGlobal(this.editor.window,
+					"getSelectedElement", dijit._editor.selection, [this.tag]);
+			}
+		}else{
+			a = dojo.withGlobal(this.editor.window,
+				"getAncestorElement", dijit._editor.selection, [this.tag]);
+		}
+		this.dropDown.reset();
+		this._setButton.set("disabled", true);
+		this.dropDown.set("value", this._getCurrentValues(a));
+	},
+
+	_onDblClick: function(e){
+		// summary:
+		// 		Function to define a behavior on double clicks on the element
+		//		type this dialog edits to select it and pop up the editor
+		//		dialog.
+		// e: Object
+		//		The double-click event.
+		// tags:
+		//		protected.
+		if(e && e.target){
+			var t = e.target;
+			var tg = t.tagName? t.tagName.toLowerCase() : "";
+			if(tg === this.tag && dojo.attr(t,"href")){
+				dojo.withGlobal(this.editor.window,
+					 "selectElement",
+					 dijit._editor.selection, [t]);
+				this.editor.onDisplayChanged();
+				setTimeout(dojo.hitch(this, function(){
+					// Focus shift outside the event handler.
+					// IE doesn't like focus changes in event handles.
+					this.button.set("disabled", false);
+					this.button.openDropDown();
+				}), 10);
+			}
+		}
+	}
+});
+
+dojo.declare("dijit._editor.plugins.ImgLinkDialog", [dijit._editor.plugins.LinkDialog], {
+	// summary:
+	//		This plugin extends LinkDialog and adds in a plugin for handling image links.
+	//		provides the image link dialog.
+	//
+	// description:
+	//		The command provided by this plugin is:
+	//		* insertImage
+
+	// linkDialogTemplate: [protected] String
+	//		Over-ride for template since img dialog doesn't need target that anchor tags may.
+	linkDialogTemplate: [
+		"<table><tr><td>",
+		"<label for='${id}_urlInput'>${url}</label>",
+		"</td><td>",
+		"<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' " +
+		"required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'>",
+		"</td></tr><tr><td>",
+		"<label for='${id}_textInput'>${text}</label>",
+		"</td><td>",
+		"<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' " +
+		"name='textInput' intermediateChanges='true'>",
+		"</td></tr><tr><td>",
+		"</td><td>",
+		"</td></tr><tr><td colspan='2'>",
+		"<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>",
+		"<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>",
+		"</td></tr></table>"
+	].join(""),
+
+	// htmlTemplate: [protected] String
+	//		String used for templating the <img> HTML to insert at the desired point.
+	htmlTemplate: "<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",
+
+	// tag: [protected] String
+	//		Tag used for the link type (img).
+	tag: "img",
+
+	_getCurrentValues: function(img){
+		// summary:
+		//		Over-ride for getting the values to set in the dropdown.
+		// a:
+		//		The anchor/link to process for data for the dropdown.
+		// tags:
+		//		protected
+		var url, text;
+		if(img && img.tagName.toLowerCase() === this.tag){
+			url = img.getAttribute('_djrealurl') || img.getAttribute('src');
+			text = img.getAttribute('alt');
+			dojo.withGlobal(this.editor.window,
+				"selectElement", dijit._editor.selection, [img, true]);
+		}else{
+			text = dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
+		}
+		return {urlInput: url || '', textInput: text || ''}; //Object;
+	},
+
+	_isValid: function(){
+		// summary:
+		//		Over-ride for images.  You can have alt text of blank, it is valid.
+		// tags:
+		//		protected
+		return this._urlInput.isValid();
+	},
+
+	_connectTagEvents: function(){
+		// summary:
+		//		Over-ridable function that connects tag specific events.
+		this.inherited(arguments);
+		this.editor.onLoadDeferred.addCallback(dojo.hitch(this, function(){
+			// Use onmousedown instead of onclick.  Seems that IE eats the first onclick
+			// to wrap it in a selector box, then the second one acts as onclick.  See #10420
+			this.connect(this.editor.editNode, "onmousedown", this._selectTag);
+		}));
+	},
+
+	_selectTag: function(e){
+		// summary:
+		//		A simple event handler that lets me select an image if it is clicked on.
+		//		makes it easier to select images in a standard way across browsers.  Otherwise
+		//		selecting an image for edit becomes difficult.
+		// e: Event
+		//		The mousedown event.
+		// tags:
+		//		private
+		if(e && e.target){
+			var t = e.target;
+			var tg = t.tagName? t.tagName.toLowerCase() : "";
+			if(tg === this.tag){
+				dojo.withGlobal(this.editor.window,
+					"selectElement",
+					dijit._editor.selection, [t]);
+			}
+		}
+	},
+
+	_checkValues: function(args){
+		// summary:
+		//		Function to check the values in args and 'fix' them up as needed 
+		//		(special characters in the url or alt text)
+		// args: Object
+		//		Content being set.		
+		// tags: 
+		//		protected
+		if(args && args.urlInput){
+			args.urlInput = args.urlInput.replace(/"/g, "&quot;");
+		}
+		if(args && args.textInput){
+			args.textInput = args.textInput.replace(/"/g, "&quot;");
+		}
+		return args;
+	},
+
+	_onDblClick: function(e){
+		// summary:
+		// 		Function to define a behavior on double clicks on the element
+		//		type this dialog edits to select it and pop up the editor
+		//		dialog.
+		// e: Object
+		//		The double-click event.
+		// tags:
+		//		protected.
+		if(e && e.target){
+			var t = e.target;
+			var tg = t.tagName? t.tagName.toLowerCase() : "";
+			if(tg === this.tag && dojo.attr(t,"src")){
+				dojo.withGlobal(this.editor.window,
+					 "selectElement",
+					 dijit._editor.selection, [t]);
+				this.editor.onDisplayChanged();
+				setTimeout(dojo.hitch(this, function(){
+					// Focus shift outside the event handler.
+					// IE doesn't like focus changes in event handles.
+					this.button.set("disabled", false);
+					this.button.openDropDown();
+				}), 10);
+			}
+		}
+	}
+});
+
+// Register this plugin.
+dojo.subscribe(dijit._scopeName + ".Editor.getPlugin",null,function(o){
+	if(o.plugin){ return; }
+	switch(o.args.name){
+		case "createLink":
+			o.plugin = new dijit._editor.plugins.LinkDialog({command: o.args.name});
+			break;
+		case "insertImage":
+			o.plugin = new dijit._editor.plugins.ImgLinkDialog({command: o.args.name});
+			break;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.MenuBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuBar"] = true;
+dojo.provide("dijit.MenuBar");
+
+
+
+dojo.declare("dijit.MenuBar", dijit._MenuBase, {
+	// summary:
+	//		A menu bar, listing menu choices horizontally, like the "File" menu in most desktop applications
+
+	templateString: dojo.cache("dijit", "templates/MenuBar.html", "<div class=\"dijitMenuBar dijitMenuPassive\" dojoAttachPoint=\"containerNode\"  waiRole=\"menubar\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress: _onKeyPress\"></div>\n"),
+
+	baseClass: "dijitMenuBar",
+
+	// _isMenuBar: [protected] Boolean
+	//		This is a MenuBar widget, not a (vertical) Menu widget.
+	_isMenuBar: true,
+
+	postCreate: function(){
+		var k = dojo.keys, l = this.isLeftToRight();
+		this.connectKeyNavHandlers(
+			l ? [k.LEFT_ARROW] : [k.RIGHT_ARROW],
+			l ? [k.RIGHT_ARROW] : [k.LEFT_ARROW]
+		);
+
+		// parameter to dijit.popup.open() about where to put popup (relative to this.domNode)
+		this._orient = this.isLeftToRight() ? {BL: 'TL'} : {BR: 'TR'};
+	},
+
+	focusChild: function(item){
+		// overload focusChild so that whenever the focus is moved to a new item,
+		// check the previous focused whether it has its popup open, if so, after
+		// focusing the new item, open its submenu immediately
+		var prev_item = this.focusedChild,
+			showpopup = prev_item && prev_item.popup && prev_item.popup.isShowingNow;
+		this.inherited(arguments);
+		if(showpopup && item.popup && !item.disabled){
+			this._openPopup();		// TODO: on down arrow, _openPopup() is called here and in onItemClick()
+		}
+	},
+
+	_onKeyPress: function(/*Event*/ evt){
+		// summary:
+		//		Handle keyboard based menu navigation.
+		// tags:
+		//		protected
+
+		if(evt.ctrlKey || evt.altKey){ return; }
+
+		switch(evt.charOrCode){
+			case dojo.keys.DOWN_ARROW:
+				this._moveToPopup(evt);
+				dojo.stopEvent(evt);
+		}
+	},
+
+	onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
+		// summary:
+		//		Handle clicks on an item. Cancels a dropdown if already open.
+		// tags:
+		//		private
+		if(item.popup && item.popup.isShowingNow){
+			item.popup.onCancel();
+		}else{
+			this.inherited(arguments);
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.MenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuBarItem"] = true;
+dojo.provide("dijit.MenuBarItem");
+
+
+
+dojo.declare("dijit._MenuBarItemMixin", null, {
+	templateString: dojo.cache("dijit", "templates/MenuBarItem.html", "<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<span dojoAttachPoint=\"containerNode\"></span>\n</div>\n"),
+
+	// overriding attributeMap because we don't have icon
+	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+		label: { node: "containerNode", type: "innerHTML" }
+	})
+});
+
+dojo.declare("dijit.MenuBarItem", [dijit.MenuItem, dijit._MenuBarItemMixin], {
+	// summary:
+	//		Item in a MenuBar that's clickable, and doesn't spawn a submenu when pressed (or hovered)
+
+});
+
+}
+
+if(!dojo._hasResource["dijit.PopupMenuBarItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.PopupMenuBarItem"] = true;
+dojo.provide("dijit.PopupMenuBarItem");
+
+
+
+
+dojo.declare("dijit.PopupMenuBarItem", [dijit.PopupMenuItem, dijit._MenuBarItemMixin], {
+	// summary:
+	//		Item in a MenuBar like "File" or "Edit", that spawns a submenu when pressed (or hovered)
+});
+
+
+}
+
+if(!dojo._hasResource["dojo.number"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.number"] = true;
+dojo.provide("dojo.number");
+
+
+
+
+
+
+
+/*=====
+dojo.number = {
+	// summary: localized formatting and parsing routines for Number
+}
+
+dojo.number.__FormatOptions = function(){
+	//	pattern: String?
+	//		override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	//		with this string.  Default value is based on locale.  Overriding this property will defeat
+	//		localization.  Literal characters in patterns are not supported.
+	//	type: String?
+	//		choose a format type based on the locale from the following:
+	//		decimal, scientific (not yet supported), percent, currency. decimal by default.
+	//	places: Number?
+	//		fixed number of decimal places to show.  This overrides any
+	//		information in the provided pattern.
+	//	round: Number?
+	//		5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
+	//		means do not round.
+	//	locale: String?
+	//		override the locale used to determine formatting rules
+	//	fractional: Boolean?
+	//		If false, show no decimal places, overriding places and pattern settings.
+	this.pattern = pattern;
+	this.type = type;
+	this.places = places;
+	this.round = round;
+	this.locale = locale;
+	this.fractional = fractional;
+}
+=====*/
+
+dojo.number.format = function(/*Number*/value, /*dojo.number.__FormatOptions?*/options){
+	// summary:
+	//		Format a Number as a String, using locale-specific settings
+	// description:
+	//		Create a string from a Number using a known localized pattern.
+	//		Formatting patterns appropriate to the locale are chosen from the
+	//		[Common Locale Data Repository](http://unicode.org/cldr) as well as the appropriate symbols and
+	//		delimiters.
+	//		If value is Infinity, -Infinity, or is not a valid JavaScript number, return null.
+	// value:
+	//		the number to be formatted
+
+	options = dojo.mixin({}, options || {});
+	var locale = dojo.i18n.normalizeLocale(options.locale),
+		bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale);
+	options.customs = bundle;
+	var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"];
+	if(isNaN(value) || Math.abs(value) == Infinity){ return null; } // null
+	return dojo.number._applyPattern(value, pattern, options); // String
+};
+
+//dojo.number._numberPatternRE = /(?:[#0]*,?)*[#0](?:\.0*#*)?/; // not precise, but good enough
+dojo.number._numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/; // not precise, but good enough
+
+dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatOptions?*/options){
+	// summary:
+	//		Apply pattern to format value as a string using options. Gives no
+	//		consideration to local customs.
+	// value:
+	//		the number to be formatted.
+	// pattern:
+	//		a pattern string as described by
+	//		[unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	// options: dojo.number.__FormatOptions?
+	//		_applyPattern is usually called via `dojo.number.format()` which
+	//		populates an extra property in the options parameter, "customs".
+	//		The customs object specifies group and decimal parameters if set.
+
+	//TODO: support escapes
+	options = options || {};
+	var group = options.customs.group,
+		decimal = options.customs.decimal,
+		patternList = pattern.split(';'),
+		positivePattern = patternList[0];
+	pattern = patternList[(value < 0) ? 1 : 0] || ("-" + positivePattern);
+
+	//TODO: only test against unescaped
+	if(pattern.indexOf('%') != -1){
+		value *= 100;
+	}else if(pattern.indexOf('\u2030') != -1){
+		value *= 1000; // per mille
+	}else if(pattern.indexOf('\u00a4') != -1){
+		group = options.customs.currencyGroup || group;//mixins instead?
+		decimal = options.customs.currencyDecimal || decimal;// Should these be mixins instead?
+		pattern = pattern.replace(/\u00a4{1,3}/, function(match){
+			var prop = ["symbol", "currency", "displayName"][match.length-1];
+			return options[prop] || options.currency || "";
+		});
+	}else if(pattern.indexOf('E') != -1){
+		throw new Error("exponential notation not supported");
+	}
+	
+	//TODO: support @ sig figs?
+	var numberPatternRE = dojo.number._numberPatternRE;
+	var numberPattern = positivePattern.match(numberPatternRE);
+	if(!numberPattern){
+		throw new Error("unable to find a number expression in pattern: "+pattern);
+	}
+	if(options.fractional === false){ options.places = 0; }
+	return pattern.replace(numberPatternRE,
+		dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round}));
+}
+
+dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/increment){
+	//	summary:
+	//		Rounds to the nearest value with the given number of decimal places, away from zero
+	//	description:
+	//		Rounds to the nearest value with the given number of decimal places, away from zero if equal.
+	//		Similar to Number.toFixed(), but compensates for browser quirks. Rounding can be done by
+	//		fractional increments also, such as the nearest quarter.
+	//		NOTE: Subject to floating point errors.  See dojox.math.round for experimental workaround.
+	//	value:
+	//		The number to round
+	//	places:
+	//		The number of decimal places where rounding takes place.  Defaults to 0 for whole rounding.
+	//		Must be non-negative.
+	//	increment:
+	//		Rounds next place to nearest value of increment/10.  10 by default.
+	//	example:
+	//		>>> dojo.number.round(-0.5)
+	//		-1
+	//		>>> dojo.number.round(162.295, 2)
+	//		162.29  // note floating point error.  Should be 162.3
+	//		>>> dojo.number.round(10.71, 0, 2.5)
+	//		10.75
+	var factor = 10 / (increment || 10);
+	return (factor * +value).toFixed(places) / factor; // Number
+}
+
+if((0.9).toFixed() == 0){
+	// (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit
+	// is just after the rounding place and is >=5
+	(function(){
+		var round = dojo.number.round;
+		dojo.number.round = function(v, p, m){
+			var d = Math.pow(10, -p || 0), a = Math.abs(v);
+			if(!v || a >= d || a * Math.pow(10, p + 1) < 5){
+				d = 0;
+			}
+			return round(v, p, m) + (v > 0 ? d : -d);
+		}
+	})();
+}
+
+/*=====
+dojo.number.__FormatAbsoluteOptions = function(){
+	//	decimal: String?
+	//		the decimal separator
+	//	group: String?
+	//		the group separator
+	//	places: Number?|String?
+	//		number of decimal places.  the range "n,m" will format to m places.
+	//	round: Number?
+	//		5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
+	//		means don't round.
+	this.decimal = decimal;
+	this.group = group;
+	this.places = places;
+	this.round = round;
+}
+=====*/
+
+dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){
+	// summary: 
+	//		Apply numeric pattern to absolute value using options. Gives no
+	//		consideration to local customs.
+	// value:
+	//		the number to be formatted, ignores sign
+	// pattern:
+	//		the number portion of a pattern (e.g. `#,##0.00`)
+	options = options || {};
+	if(options.places === true){options.places=0;}
+	if(options.places === Infinity){options.places=6;} // avoid a loop; pick a limit
+
+	var patternParts = pattern.split("."),
+		comma = typeof options.places == "string" && options.places.indexOf(","),
+		maxPlaces = options.places;
+	if(comma){
+		maxPlaces = options.places.substring(comma + 1);
+	}else if(!(maxPlaces >= 0)){
+		maxPlaces = (patternParts[1] || []).length;
+	}
+	if(!(options.round < 0)){
+		value = dojo.number.round(value, maxPlaces, options.round);
+	}
+
+	var valueParts = String(Math.abs(value)).split("."),
+		fractional = valueParts[1] || "";
+	if(patternParts[1] || options.places){
+		if(comma){
+			options.places = options.places.substring(0, comma);
+		}
+		// Pad fractional with trailing zeros
+		var pad = options.places !== undefined ? options.places : (patternParts[1] && patternParts[1].lastIndexOf("0") + 1);
+		if(pad > fractional.length){
+			valueParts[1] = dojo.string.pad(fractional, pad, '0', true);
+		}
+
+		// Truncate fractional
+		if(maxPlaces < fractional.length){
+			valueParts[1] = fractional.substr(0, maxPlaces);
+		}
+	}else{
+		if(valueParts[1]){ valueParts.pop(); }
+	}
+
+	// Pad whole with leading zeros
+	var patternDigits = patternParts[0].replace(',', '');
+	pad = patternDigits.indexOf("0");
+	if(pad != -1){
+		pad = patternDigits.length - pad;
+		if(pad > valueParts[0].length){
+			valueParts[0] = dojo.string.pad(valueParts[0], pad);
+		}
+
+		// Truncate whole
+		if(patternDigits.indexOf("#") == -1){
+			valueParts[0] = valueParts[0].substr(valueParts[0].length - pad);
+		}
+	}
+
+	// Add group separators
+	var index = patternParts[0].lastIndexOf(','),
+		groupSize, groupSize2;
+	if(index != -1){
+		groupSize = patternParts[0].length - index - 1;
+		var remainder = patternParts[0].substr(0, index);
+		index = remainder.lastIndexOf(',');
+		if(index != -1){
+			groupSize2 = remainder.length - index - 1;
+		}
+	}
+	var pieces = [];
+	for(var whole = valueParts[0]; whole;){
+		var off = whole.length - groupSize;
+		pieces.push((off > 0) ? whole.substr(off) : whole);
+		whole = (off > 0) ? whole.slice(0, off) : "";
+		if(groupSize2){
+			groupSize = groupSize2;
+			delete groupSize2;
+		}
+	}
+	valueParts[0] = pieces.reverse().join(options.group || ",");
+
+	return valueParts.join(options.decimal || ".");
+};
+
+/*=====
+dojo.number.__RegexpOptions = function(){
+	//	pattern: String?
+	//		override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	//		with this string.  Default value is based on locale.  Overriding this property will defeat
+	//		localization.
+	//	type: String?
+	//		choose a format type based on the locale from the following:
+	//		decimal, scientific (not yet supported), percent, currency. decimal by default.
+	//	locale: String?
+	//		override the locale used to determine formatting rules
+	//	strict: Boolean?
+	//		strict parsing, false by default.  Strict parsing requires input as produced by the format() method.
+	//		Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators
+	//	places: Number|String?
+	//		number of decimal places to accept: Infinity, a positive number, or
+	//		a range "n,m".  Defined by pattern or Infinity if pattern not provided.
+	this.pattern = pattern;
+	this.type = type;
+	this.locale = locale;
+	this.strict = strict;
+	this.places = places;
+}
+=====*/
+dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){
+	//	summary:
+	//		Builds the regular needed to parse a number
+	//	description:
+	//		Returns regular expression with positive and negative match, group
+	//		and decimal separators
+	return dojo.number._parseInfo(options).regexp; // String
+}
+
+dojo.number._parseInfo = function(/*Object?*/options){
+	options = options || {};
+	var locale = dojo.i18n.normalizeLocale(options.locale),
+		bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale),
+		pattern = options.pattern || bundle[(options.type || "decimal") + "Format"],
+//TODO: memoize?
+		group = bundle.group,
+		decimal = bundle.decimal,
+		factor = 1;
+
+	if(pattern.indexOf('%') != -1){
+		factor /= 100;
+	}else if(pattern.indexOf('\u2030') != -1){
+		factor /= 1000; // per mille
+	}else{
+		var isCurrency = pattern.indexOf('\u00a4') != -1;
+		if(isCurrency){
+			group = bundle.currencyGroup || group;
+			decimal = bundle.currencyDecimal || decimal;
+		}
+	}
+
+	//TODO: handle quoted escapes
+	var patternList = pattern.split(';');
+	if(patternList.length == 1){
+		patternList.push("-" + patternList[0]);
+	}
+
+	var re = dojo.regexp.buildGroupRE(patternList, function(pattern){
+		pattern = "(?:"+dojo.regexp.escapeString(pattern, '.')+")";
+		return pattern.replace(dojo.number._numberPatternRE, function(format){
+			var flags = {
+				signed: false,
+				separator: options.strict ? group : [group,""],
+				fractional: options.fractional,
+				decimal: decimal,
+				exponent: false
+				},
+
+				parts = format.split('.'),
+				places = options.places;
+
+			// special condition for percent (factor != 1)
+			// allow decimal places even if not specified in pattern
+			if(parts.length == 1 && factor != 1){
+			    parts[1] = "###";
+			}
+			if(parts.length == 1 || places === 0){
+				flags.fractional = false;
+			}else{
+				if(places === undefined){ places = options.pattern ? parts[1].lastIndexOf('0') + 1 : Infinity; }
+				if(places && options.fractional == undefined){flags.fractional = true;} // required fractional, unless otherwise specified
+				if(!options.places && (places < parts[1].length)){ places += "," + parts[1].length; }
+				flags.places = places;
+			}
+			var groups = parts[0].split(',');
+			if(groups.length > 1){
+				flags.groupSize = groups.pop().length;
+				if(groups.length > 1){
+					flags.groupSize2 = groups.pop().length;
+				}
+			}
+			return "("+dojo.number._realNumberRegexp(flags)+")";
+		});
+	}, true);
+
+	if(isCurrency){
+		// substitute the currency symbol for the placeholder in the pattern
+		re = re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g, function(match, before, target, after){
+			var prop = ["symbol", "currency", "displayName"][target.length-1],
+				symbol = dojo.regexp.escapeString(options[prop] || options.currency || "");
+			before = before ? "[\\s\\xa0]" : "";
+			after = after ? "[\\s\\xa0]" : "";
+			if(!options.strict){
+				if(before){before += "*";}
+				if(after){after += "*";}
+				return "(?:"+before+symbol+after+")?";
+			}
+			return before+symbol+after;
+		});
+	}
+
+//TODO: substitute localized sign/percent/permille/etc.?
+
+	// normalize whitespace and return
+	return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object
+}
+
+/*=====
+dojo.number.__ParseOptions = function(){
+	//	pattern: String?
+	//		override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	//		with this string.  Default value is based on locale.  Overriding this property will defeat
+	//		localization.  Literal characters in patterns are not supported.
+	//	type: String?
+	//		choose a format type based on the locale from the following:
+	//		decimal, scientific (not yet supported), percent, currency. decimal by default.
+	//	locale: String?
+	//		override the locale used to determine formatting rules
+	//	strict: Boolean?
+	//		strict parsing, false by default.  Strict parsing requires input as produced by the format() method.
+	//		Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators
+	//	fractional: Boolean?|Array?
+	//		Whether to include the fractional portion, where the number of decimal places are implied by pattern
+	//		or explicit 'places' parameter.  The value [true,false] makes the fractional portion optional.
+	this.pattern = pattern;
+	this.type = type;
+	this.locale = locale;
+	this.strict = strict;
+	this.fractional = fractional;
+}
+=====*/
+dojo.number.parse = function(/*String*/expression, /*dojo.number.__ParseOptions?*/options){
+	// summary:
+	//		Convert a properly formatted string to a primitive Number, using
+	//		locale-specific settings.
+	// description:
+	//		Create a Number from a string using a known localized pattern.
+	//		Formatting patterns are chosen appropriate to the locale
+	//		and follow the syntax described by
+	//		[unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+    	//		Note that literal characters in patterns are not supported.
+	// expression:
+	//		A string representation of a Number
+	var info = dojo.number._parseInfo(options),
+		results = (new RegExp("^"+info.regexp+"$")).exec(expression);
+	if(!results){
+		return NaN; //NaN
+	}
+	var absoluteMatch = results[1]; // match for the positive expression
+	if(!results[1]){
+		if(!results[2]){
+			return NaN; //NaN
+		}
+		// matched the negative pattern
+		absoluteMatch =results[2];
+		info.factor *= -1;
+	}
+
+	// Transform it to something Javascript can parse as a number.  Normalize
+	// decimal point and strip out group separators or alternate forms of whitespace
+	absoluteMatch = absoluteMatch.
+		replace(new RegExp("["+info.group + "\\s\\xa0"+"]", "g"), "").
+		replace(info.decimal, ".");
+	// Adjust for negative sign, percent, etc. as necessary
+	return absoluteMatch * info.factor; //Number
+};
+
+/*=====
+dojo.number.__RealNumberRegexpFlags = function(){
+	//	places: Number?
+	//		The integer number of decimal places or a range given as "n,m".  If
+	//		not given, the decimal part is optional and the number of places is
+	//		unlimited.
+	//	decimal: String?
+	//		A string for the character used as the decimal point.  Default
+	//		is ".".
+	//	fractional: Boolean?|Array?
+	//		Whether decimal places are used.  Can be true, false, or [true,
+	//		false].  Default is [true, false] which means optional.
+	//	exponent: Boolean?|Array?
+	//		Express in exponential notation.  Can be true, false, or [true,
+	//		false]. Default is [true, false], (i.e. will match if the
+	//		exponential part is present are not).
+	//	eSigned: Boolean?|Array?
+	//		The leading plus-or-minus sign on the exponent.  Can be true,
+	//		false, or [true, false].  Default is [true, false], (i.e. will
+	//		match if it is signed or unsigned).  flags in regexp.integer can be
+	//		applied.
+	this.places = places;
+	this.decimal = decimal;
+	this.fractional = fractional;
+	this.exponent = exponent;
+	this.eSigned = eSigned;
+}
+=====*/
+
+dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*/flags){
+	// summary:
+	//		Builds a regular expression to match a real number in exponential
+	//		notation
+
+	// assign default values to missing parameters
+	flags = flags || {};
+	//TODO: use mixin instead?
+	if(!("places" in flags)){ flags.places = Infinity; }
+	if(typeof flags.decimal != "string"){ flags.decimal = "."; }
+	if(!("fractional" in flags) || /^0/.test(flags.places)){ flags.fractional = [true, false]; }
+	if(!("exponent" in flags)){ flags.exponent = [true, false]; }
+	if(!("eSigned" in flags)){ flags.eSigned = [true, false]; }
+
+	var integerRE = dojo.number._integerRegexp(flags),
+		decimalRE = dojo.regexp.buildGroupRE(flags.fractional,
+		function(q){
+			var re = "";
+			if(q && (flags.places!==0)){
+				re = "\\" + flags.decimal;
+				if(flags.places == Infinity){ 
+					re = "(?:" + re + "\\d+)?"; 
+				}else{
+					re += "\\d{" + flags.places + "}"; 
+				}
+			}
+			return re;
+		},
+		true
+	);
+
+	var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
+		function(q){ 
+			if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; }
+			return ""; 
+		}
+	);
+
+	var realRE = integerRE + decimalRE;
+	// allow for decimals without integers, e.g. .25
+	if(decimalRE){realRE = "(?:(?:"+ realRE + ")|(?:" + decimalRE + "))";}
+	return realRE + exponentRE; // String
+};
+
+/*=====
+dojo.number.__IntegerRegexpFlags = function(){
+	//	signed: Boolean?
+	//		The leading plus-or-minus sign. Can be true, false, or `[true,false]`.
+	//		Default is `[true, false]`, (i.e. will match if it is signed
+	//		or unsigned).
+	//	separator: String?
+	//		The character used as the thousands separator. Default is no
+	//		separator. For more than one symbol use an array, e.g. `[",", ""]`,
+	//		makes ',' optional.
+	//	groupSize: Number?
+	//		group size between separators
+	//	groupSize2: Number?
+	//		second grouping, where separators 2..n have a different interval than the first separator (for India)
+	this.signed = signed;
+	this.separator = separator;
+	this.groupSize = groupSize;
+	this.groupSize2 = groupSize2;
+}
+=====*/
+
+dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){
+	// summary: 
+	//		Builds a regular expression that matches an integer
+
+	// assign default values to missing parameters
+	flags = flags || {};
+	if(!("signed" in flags)){ flags.signed = [true, false]; }
+	if(!("separator" in flags)){
+		flags.separator = "";
+	}else if(!("groupSize" in flags)){
+		flags.groupSize = 3;
+	}
+
+	var signRE = dojo.regexp.buildGroupRE(flags.signed,
+		function(q){ return q ? "[-+]" : ""; },
+		true
+	);
+
+	var numberRE = dojo.regexp.buildGroupRE(flags.separator,
+		function(sep){
+			if(!sep){
+				return "(?:\\d+)";
+			}
+
+			sep = dojo.regexp.escapeString(sep);
+			if(sep == " "){ sep = "\\s"; }
+			else if(sep == "\xa0"){ sep = "\\s\\xa0"; }
+
+			var grp = flags.groupSize, grp2 = flags.groupSize2;
+			//TODO: should we continue to enforce that numbers with separators begin with 1-9?  See #6933
+			if(grp2){
+				var grp2RE = "(?:0|[1-9]\\d{0," + (grp2-1) + "}(?:[" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
+				return ((grp-grp2) > 0) ? "(?:" + grp2RE + "|(?:0|[1-9]\\d{0," + (grp-1) + "}))" : grp2RE;
+			}
+			return "(?:0|[1-9]\\d{0," + (grp-1) + "}(?:[" + sep + "]\\d{" + grp + "})*)";
+		},
+		true
+	);
+
+	return signRE + numberRE; // String
+}
+
+}
+
+if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.ProgressBar"] = true;
+dojo.provide("dijit.ProgressBar");
+
+
+
+
+
+
+
+dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
+	// summary:
+	//		A progress indication widget, showing the amount completed
+	//		(often the percentage completed) of a task.
+	//
+	// example:
+	// |	<div dojoType="ProgressBar"
+	// |		 places="0"
+	// |		 progress="..." maximum="...">
+	// |	</div>
+	//
+	// description:
+	//		Note that the progress bar is updated via (a non-standard)
+	//		update() method, rather than via attr() like other widgets.
+
+	// progress: [const] String (Percentage or Number)
+	//		Number or percentage indicating amount of task completed.
+	// 		With "%": percentage value, 0% <= progress <= 100%, or
+	// 		without "%": absolute value, 0 <= progress <= maximum
+	// TODO: rename to value for 2.0
+	progress: "0",
+
+	// maximum: [const] Float
+	//		Max sample number
+	maximum: 100,
+
+	// places: [const] Number
+	//		Number of places to show in values; 0 by default
+	places: 0,
+
+	// indeterminate: [const] Boolean
+	// 		If false: show progress value (number or percentage).
+	// 		If true: show that a process is underway but that the amount completed is unknown.
+	indeterminate: false,
+
+	// name: String
+	//		this is the field name (for a form) if set. This needs to be set if you want to use
+	//		this widget in a dijit.form.Form widget (such as dijit.Dialog)
+	name: '',
+
+	templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),
+
+	// _indeterminateHighContrastImagePath: [private] dojo._URL
+	//		URL to image to use for indeterminate progress bar when display is in high contrast mode
+	_indeterminateHighContrastImagePath:
+		dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
+
+	// public functions
+	postCreate: function(){
+		this.inherited(arguments);
+		this.indeterminateHighContrastImage.setAttribute("src",
+			this._indeterminateHighContrastImagePath.toString());
+		this.update();
+	},
+
+	update: function(/*Object?*/attributes){
+		// summary:
+		//		Change attributes of ProgressBar, similar to attr(hash).
+		//
+		// attributes:
+		//		May provide progress and/or maximum properties on this parameter;
+		//		see attribute specs for details.
+		//
+		// example:
+		//	|	myProgressBar.update({'indeterminate': true});
+		//	|	myProgressBar.update({'progress': 80});
+
+		// TODO: deprecate this method and use set() instead
+
+		dojo.mixin(this, attributes || {});
+		var tip = this.internalProgress;
+		var percent = 1, classFunc;
+		if(this.indeterminate){
+			classFunc = "addClass";
+			dijit.removeWaiState(tip, "valuenow");
+			dijit.removeWaiState(tip, "valuemin");
+			dijit.removeWaiState(tip, "valuemax");
+		}else{
+			classFunc = "removeClass";
+			if(String(this.progress).indexOf("%") != -1){
+				percent = Math.min(parseFloat(this.progress)/100, 1);
+				this.progress = percent * this.maximum;
+			}else{
+				this.progress = Math.min(this.progress, this.maximum);
+				percent = this.progress / this.maximum;
+			}
+			var text = this.report(percent);
+			this.label.firstChild.nodeValue = text;
+			dijit.setWaiState(tip, "describedby", this.label.id);
+			dijit.setWaiState(tip, "valuenow", this.progress);
+			dijit.setWaiState(tip, "valuemin", 0);
+			dijit.setWaiState(tip, "valuemax", this.maximum);
+		}
+		dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate");
+		tip.style.width = (percent * 100) + "%";
+		this.onChange();
+	},
+
+	_setValueAttr: function(v){
+		if(v == Infinity){
+			this.update({indeterminate:true});
+		}else{
+			this.update({indeterminate:false, progress:v});
+		}
+	},
+
+	_getValueAttr: function(){
+		return this.progress;
+	},
+
+	report: function(/*float*/percent){
+		// summary:
+		//		Generates message to show inside progress bar (normally indicating amount of task completed).
+		//		May be overridden.
+		// tags:
+		//		extension
+
+		return dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang });
+	},
+
+	onChange: function(){
+		// summary:
+		//		Callback fired when progress updates.
+		// tags:
+		//		progress
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.TitlePane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.TitlePane"] = true;
+dojo.provide("dijit.TitlePane");
+
+
+
+
+
+
+
+dojo.declare(
+	"dijit.TitlePane",
+	[dijit.layout.ContentPane, dijit._Templated, dijit._CssStateMixin],
+{
+	// summary:
+	//		A pane with a title on top, that can be expanded or collapsed.
+	//
+	// description:
+	//		An accessible container with a title Heading, and a content
+	//		section that slides open and closed. TitlePane is an extension to
+	//		`dijit.layout.ContentPane`, providing all the useful content-control aspects from it.
+	//
+	// example:
+	// | 	// load a TitlePane from remote file:
+	// |	var foo = new dijit.TitlePane({ href: "foobar.html", title:"Title" });
+	// |	foo.startup();
+	//
+	// example:
+	// |	<!-- markup href example: -->
+	// |	<div dojoType="dijit.TitlePane" href="foobar.html" title="Title"></div>
+	//
+	// example:
+	// |	<!-- markup with inline data -->
+	// | 	<div dojoType="dijit.TitlePane" title="Title">
+	// |		<p>I am content</p>
+	// |	</div>
+
+	// title: String
+	//		Title of the pane
+	title: "",
+
+	// open: Boolean
+	//		Whether pane is opened or closed.
+	open: true,
+
+	// toggleable: Boolean
+	//		Whether pane can be opened or closed by clicking the title bar.
+	toggleable: true,
+
+	// tabIndex: String
+	//		Tabindex setting for the title (so users can tab to the title then
+	//		use space/enter to open/close the title pane)
+	tabIndex: "0",
+
+	// duration: Integer
+	//		Time in milliseconds to fade in/fade out
+	duration: dijit.defaultDuration,
+
+	// baseClass: [protected] String
+	//		The root className to be placed on this widget's domNode.
+	baseClass: "dijitTitlePane",
+
+	templateString: dojo.cache("dijit", "templates/TitlePane.html", "<div>\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode\">\n\t\t<div class=\"dijitTitlePaneTitleFocus\" dojoAttachPoint=\"focusNode\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t\t</div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" waiRole=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" waiRole=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),
+
+	attributeMap: dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap, {
+		title: { node: "titleNode", type: "innerHTML" },
+		tooltip: {node: "focusNode", type: "attribute", attribute: "title"},	// focusNode spans the entire width, titleNode doesn't
+		id:""
+	}),
+
+	postCreate: function(){
+		if(!this.open){
+			this.hideNode.style.display = this.wipeNode.style.display = "none";
+		}
+		
+		// Hover and focus effect on title bar, except for non-toggleable TitlePanes
+		// This should really be controlled from _setToggleableAttr() but _CssStateMixin
+		// doesn't provide a way to disconnect a previous _trackMouseState() call
+		if(this.toggleable){
+			this._trackMouseState(this.titleBarNode, "dijitTitlePaneTitle");
+		}
+		this._setCss();
+		dojo.setSelectable(this.titleNode, false);
+
+		// setup open/close animations
+		var hideNode = this.hideNode, wipeNode = this.wipeNode;
+		this._wipeIn = dojo.fx.wipeIn({
+			node: this.wipeNode,
+			duration: this.duration,
+			beforeBegin: function(){
+				hideNode.style.display="";
+			}
+		});
+		this._wipeOut = dojo.fx.wipeOut({
+			node: this.wipeNode,
+			duration: this.duration,
+			onEnd: function(){
+				hideNode.style.display="none";
+			}
+		});
+		this.inherited(arguments);
+	},
+
+	_setOpenAttr: function(/* Boolean */ open){
+		// summary:
+		//		Hook to make attr("open", boolean) control the open/closed state of the pane.
+		// open: Boolean
+		//		True if you want to open the pane, false if you want to close it.
+		if(this.open !== open){ this.toggle(); }
+		dijit.setWaiState(this.containerNode,"hidden", this.open ? "false" : "true");
+		dijit.setWaiState(this.focusNode, "pressed", this.open ? "true" : "false");
+	},
+
+	_setToggleableAttr: function(/* Boolean */ canToggle){
+		// summary:
+		//		Hook to make attr("canToggle", boolean) work.
+		// canToggle: Boolean
+		//		True to allow user to open/close pane by clicking title bar.
+		this.toggleable = canToggle;
+		dijit.setWaiRole(this.focusNode, canToggle ? "button" : "heading");
+		if(canToggle){
+			// TODO: if canToggle is switched from true false shouldn't we remove this setting?
+			dijit.setWaiState(this.focusNode, "controls", this.id+"_pane");
+			dojo.attr(this.focusNode, "tabIndex", this.tabIndex);
+		}
+		else{
+			dojo.removeAttr(this.focusNode, "tabIndex");
+		}
+		this._setCss();
+	},
+
+	_setContentAttr: function(content){
+		// summary:
+		//		Hook to make attr("content", ...) work.
+		// 		Typically called when an href is loaded.  Our job is to make the animation smooth.
+
+		if(!this.open || !this._wipeOut || this._wipeOut.status() == "playing"){
+			// we are currently *closing* the pane (or the pane is closed), so just let that continue
+			this.inherited(arguments);
+		}else{
+			if(this._wipeIn && this._wipeIn.status() == "playing"){
+				this._wipeIn.stop();
+			}
+
+			// freeze container at current height so that adding new content doesn't make it jump
+			dojo.marginBox(this.wipeNode, { h: dojo.marginBox(this.wipeNode).h });
+
+			// add the new content (erasing the old content, if any)
+			this.inherited(arguments);
+
+			// call _wipeIn.play() to animate from current height to new height
+			if(this._wipeIn){
+				this._wipeIn.play();
+			}else{
+				this.hideNode.style.display = "";
+			}
+		}
+	},
+
+	toggle: function(){
+		// summary:
+		//		Switches between opened and closed state
+		// tags:
+		//		private
+
+		dojo.forEach([this._wipeIn, this._wipeOut], function(animation){
+			if(animation && animation.status() == "playing"){
+				animation.stop();
+			}
+		});
+
+		var anim = this[this.open ? "_wipeOut" : "_wipeIn"]
+		if(anim){
+			anim.play();
+		}else{
+			this.hideNode.style.display = this.open ? "" : "none";
+		}
+		this.open =! this.open;
+
+		// load content (if this is the first time we are opening the TitlePane
+		// and content is specified as an href, or href was set when hidden)
+		if(this.open){
+			this._onShow();
+		}else{
+			this.onHide();
+		}
+
+		this._setCss();
+	},
+
+	_setCss: function(){
+		// summary:
+		//		Set the open/close css state for the TitlePane
+		// tags:
+		//		private
+
+		var node = this.titleBarNode || this.focusNode;
+
+		if(this._titleBarClass){
+			dojo.removeClass(node, this._titleBarClass);
+		}
+		this._titleBarClass = "dijit" + (this.toggleable ? "" : "Fixed") + (this.open ? "Open" : "Closed");
+		dojo.addClass(node, this._titleBarClass);
+		this.arrowNodeInner.innerHTML = this.open ? "-" : "+";
+	},
+
+	_onTitleKey: function(/*Event*/ e){
+		// summary:
+		//		Handler for when user hits a key
+		// tags:
+		//		private
+
+		if(e.charOrCode == dojo.keys.ENTER || e.charOrCode == ' '){
+			if(this.toggleable){
+				this.toggle();
+			}
+			dojo.stopEvent(e);
+		}else if(e.charOrCode == dojo.keys.DOWN_ARROW && this.open){
+			this.containerNode.focus();
+			e.preventDefault();
+	 	}
+	},
+
+	_onTitleClick: function(){
+		// summary:
+		//		Handler when user clicks the title bar
+		// tags:
+		//		private
+		if(this.toggleable){
+			this.toggle();
+		}
+	},
+
+	setTitle: function(/*String*/ title){
+		// summary:
+		//		Deprecated.  Use set('title', ...) instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use set('title', ...) instead.", "", "2.0");
+		this.set("title", title);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.DeferredList"] = true;
+dojo.provide("dojo.DeferredList");
+dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
+	// summary:
+	//		Provides event handling for a group of Deferred objects.
+	// description:
+	//		DeferredList takes an array of existing deferreds and returns a new deferred of its own
+	//		this new deferred will typically have its callback fired when all of the deferreds in
+	//		the given list have fired their own deferreds.  The parameters `fireOnOneCallback` and
+	//		fireOnOneErrback, will fire before all the deferreds as appropriate
+	//
+	//	list:
+	//		The list of deferreds to be synchronizied with this DeferredList
+	//	fireOnOneCallback:
+	//		Will cause the DeferredLists callback to be fired as soon as any
+	//		of the deferreds in its list have been fired instead of waiting until
+	//		the entire list has finished
+	//	fireonOneErrback:
+	//		Will cause the errback to fire upon any of the deferreds errback
+	//	canceller:
+	//		A deferred canceller function, see dojo.Deferred
+	var resultList = [];
+	dojo.Deferred.call(this);
+	var self = this;
+	if(list.length === 0 && !fireOnOneCallback){
+		this.resolve([0, []]);
+	}
+	var finished = 0;
+	dojo.forEach(list, function(item, i){
+		item.then(function(result){
+			if(fireOnOneCallback){
+				self.resolve([i, result]);
+			}else{
+				addResult(true, result);
+			}
+		},function(error){
+			if(fireOnOneErrback){
+				self.reject(error);
+			}else{
+				addResult(false, error);
+			}
+			if(consumeErrors){
+				return null;
+			}
+			throw error;
+		});
+		function addResult(succeeded, result){
+			resultList[i] = [succeeded, result];
+			finished++;
+			if(finished === list.length){
+				self.resolve(resultList);
+			}
+			
+		}
+	});
+};
+dojo.DeferredList.prototype = new dojo.Deferred();
+
+dojo.DeferredList.prototype.gatherResults= function(deferredList){
+	// summary:	
+	//	Gathers the results of the deferreds for packaging
+	//	as the parameters to the Deferred Lists' callback
+
+	var d = new dojo.DeferredList(deferredList, false, true, false);
+	d.addCallback(function(results){
+		var ret = [];
+		dojo.forEach(results, function(result){
+			ret.push(result[1]);
+		});
+		return ret;
+	});
+	return d;
+};
+
+}
+
+if(!dojo._hasResource["dojo.cookie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cookie"] = true;
+dojo.provide("dojo.cookie");
+
+
+
+/*=====
+dojo.__cookieProps = function(){
+	//	expires: Date|String|Number?
+	//		If a number, the number of days from today at which the cookie
+	//		will expire. If a date, the date past which the cookie will expire.
+	//		If expires is in the past, the cookie will be deleted.
+	//		If expires is omitted or is 0, the cookie will expire when the browser closes. << FIXME: 0 seems to disappear right away? FF3.
+	//	path: String?
+	//		The path to use for the cookie.
+	//	domain: String?
+	//		The domain to use for the cookie.
+	//	secure: Boolean?
+	//		Whether to only send the cookie on secure connections
+	this.expires = expires;
+	this.path = path;
+	this.domain = domain;
+	this.secure = secure;
+}
+=====*/
+
+
+dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/props){
+	//	summary: 
+	//		Get or set a cookie.
+	//	description:
+	// 		If one argument is passed, returns the value of the cookie
+	// 		For two or more arguments, acts as a setter.
+	//	name:
+	//		Name of the cookie
+	//	value:
+	//		Value for the cookie
+	//	props: 
+	//		Properties for the cookie
+	//	example:
+	//		set a cookie with the JSON-serialized contents of an object which
+	//		will expire 5 days from now:
+	//	|	dojo.cookie("configObj", dojo.toJson(config), { expires: 5 });
+	//	
+	//	example:
+	//		de-serialize a cookie back into a JavaScript object:
+	//	|	var config = dojo.fromJson(dojo.cookie("configObj"));
+	//	
+	//	example:
+	//		delete a cookie:
+	//	|	dojo.cookie("configObj", null, {expires: -1});
+	var c = document.cookie;
+	if(arguments.length == 1){
+		var matches = c.match(new RegExp("(?:^|; )" + dojo.regexp.escapeString(name) + "=([^;]*)"));
+		return matches ? decodeURIComponent(matches[1]) : undefined; // String or undefined
+	}else{
+		props = props || {};
+// FIXME: expires=0 seems to disappear right away, not on close? (FF3)  Change docs?
+		var exp = props.expires;
+		if(typeof exp == "number"){ 
+			var d = new Date();
+			d.setTime(d.getTime() + exp*24*60*60*1000);
+			exp = props.expires = d;
+		}
+		if(exp && exp.toUTCString){ props.expires = exp.toUTCString(); }
+
+		value = encodeURIComponent(value);
+		var updatedCookie = name + "=" + value, propName;
+		for(propName in props){
+			updatedCookie += "; " + propName;
+			var propValue = props[propName];
+			if(propValue !== true){ updatedCookie += "=" + propValue; }
+		}
+		document.cookie = updatedCookie;
+	}
+};
+
+dojo.cookie.isSupported = function(){
+	//	summary:
+	//		Use to determine if the current browser supports cookies or not.
+	//		
+	//		Returns true if user allows cookies.
+	//		Returns false if user doesn't allow cookies.
+
+	if(!("cookieEnabled" in navigator)){
+		this("__djCookieTest__", "CookiesAllowed");
+		navigator.cookieEnabled = this("__djCookieTest__") == "CookiesAllowed";
+		if(navigator.cookieEnabled){
+			this("__djCookieTest__", "", {expires: -1});
+		}
+	}
+	return navigator.cookieEnabled;
+};
+
+}
+
+if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.tree.TreeStoreModel"] = true;
+dojo.provide("dijit.tree.TreeStoreModel");
+
+dojo.declare(
+		"dijit.tree.TreeStoreModel",
+		null,
+	{
+		// summary:
+		//		Implements dijit.Tree.model connecting to a store with a single
+		//		root item.  Any methods passed into the constructor will override
+		//		the ones defined here.
+
+		// store: dojo.data.Store
+		//		Underlying store
+		store: null,
+
+		// childrenAttrs: String[]
+		//		One or more attribute names (attributes in the dojo.data item) that specify that item's children
+		childrenAttrs: ["children"],
+
+		// newItemIdAttr: String
+		//		Name of attribute in the Object passed to newItem() that specifies the id.
+		//
+		//		If newItemIdAttr is set then it's used when newItem() is called to see if an
+		//		item with the same id already exists, and if so just links to the old item
+		//		(so that the old item ends up with two parents).
+		//
+		//		Setting this to null or "" will make every drop create a new item.
+		newItemIdAttr: "id",
+
+		// labelAttr: String
+		//		If specified, get label for tree node from this attribute, rather
+		//		than by calling store.getLabel()
+		labelAttr: "",
+
+	 	// root: [readonly] dojo.data.Item
+		//		Pointer to the root item (read only, not a parameter)
+		root: null,
+
+		// query: anything
+		//		Specifies datastore query to return the root item for the tree.
+		//		Must only return a single item.   Alternately can just pass in pointer
+		//		to root item.
+		// example:
+		//	|	{id:'ROOT'}
+		query: null,
+
+		// deferItemLoadingUntilExpand: Boolean
+		//		Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes
+		// 		until they are expanded. This allows for lazying loading where only one
+		//		loadItem (and generally one network call, consequently) per expansion
+		// 		(rather than one for each child).
+		// 		This relies on partial loading of the children items; each children item of a
+		// 		fully loaded item should contain the label and info about having children.
+		deferItemLoadingUntilExpand: false,
+
+		constructor: function(/* Object */ args){
+			// summary:
+			//		Passed the arguments listed above (store, etc)
+			// tags:
+			//		private
+
+			dojo.mixin(this, args);
+
+			this.connects = [];
+
+			var store = this.store;
+			if(!store.getFeatures()['dojo.data.api.Identity']){
+				throw new Error("dijit.Tree: store must support dojo.data.Identity");
+			}
+
+			// if the store supports Notification, subscribe to the notification events
+			if(store.getFeatures()['dojo.data.api.Notification']){
+				this.connects = this.connects.concat([
+					dojo.connect(store, "onNew", this, "onNewItem"),
+					dojo.connect(store, "onDelete", this, "onDeleteItem"),
+					dojo.connect(store, "onSet", this, "onSetItem")
+				]);
+			}
+		},
+
+		destroy: function(){
+			dojo.forEach(this.connects, dojo.disconnect);
+			// TODO: should cancel any in-progress processing of getRoot(), getChildren()
+		},
+
+		// =======================================================================
+		// Methods for traversing hierarchy
+
+		getRoot: function(onItem, onError){
+			// summary:
+			//		Calls onItem with the root item for the tree, possibly a fabricated item.
+			//		Calls onError on error.
+			if(this.root){
+				onItem(this.root);
+			}else{
+				this.store.fetch({
+					query: this.query,
+					onComplete: dojo.hitch(this, function(items){
+						if(items.length != 1){
+							throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length +
+							 	" items, but must return exactly one item");
+						}
+						this.root = items[0];
+						onItem(this.root);
+					}),
+					onError: onError
+				});
+			}
+		},
+
+		mayHaveChildren: function(/*dojo.data.Item*/ item){
+			// summary:
+			//		Tells if an item has or may have children.  Implementing logic here
+			//		avoids showing +/- expando icon for nodes that we know don't have children.
+			//		(For efficiency reasons we may not want to check if an element actually
+			//		has children until user clicks the expando node)
+			return dojo.some(this.childrenAttrs, function(attr){
+				return this.store.hasAttribute(item, attr);
+			}, this);
+		},
+
+		getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){
+			// summary:
+			// 		Calls onComplete() with array of child items of given parent item, all loaded.
+
+			var store = this.store;
+			if(!store.isItemLoaded(parentItem)){
+				// The parent is not loaded yet, we must be in deferItemLoadingUntilExpand
+				// mode, so we will load it and just return the children (without loading each
+				// child item)
+				var getChildren = dojo.hitch(this, arguments.callee);
+				store.loadItem({
+					item: parentItem,
+					onItem: function(parentItem){
+						getChildren(parentItem, onComplete, onError);
+					},
+					onError: onError
+				});
+				return;
+			}
+			// get children of specified item
+			var childItems = [];
+			for(var i=0; i<this.childrenAttrs.length; i++){
+				var vals = store.getValues(parentItem, this.childrenAttrs[i]);
+				childItems = childItems.concat(vals);
+			}
+
+			// count how many items need to be loaded
+			var _waitCount = 0;
+			if(!this.deferItemLoadingUntilExpand){
+				dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
+			}
+
+			if(_waitCount == 0){
+				// all items are already loaded (or we aren't loading them).  proceed...
+				onComplete(childItems);
+			}else{
+				// still waiting for some or all of the items to load
+				dojo.forEach(childItems, function(item, idx){
+					if(!store.isItemLoaded(item)){
+						store.loadItem({
+							item: item,
+							onItem: function(item){
+								childItems[idx] = item;
+								if(--_waitCount == 0){
+									// all nodes have been loaded, send them to the tree
+									onComplete(childItems);
+								}
+							},
+							onError: onError
+						});
+					}
+				});
+			}
+		},
+
+		// =======================================================================
+		// Inspecting items
+
+		isItem: function(/* anything */ something){
+			return this.store.isItem(something);	// Boolean
+		},
+
+		fetchItemByIdentity: function(/* object */ keywordArgs){
+			this.store.fetchItemByIdentity(keywordArgs);
+		},
+
+		getIdentity: function(/* item */ item){
+			return this.store.getIdentity(item);	// Object
+		},
+
+		getLabel: function(/*dojo.data.Item*/ item){
+			// summary:
+			//		Get the label for an item
+			if(this.labelAttr){
+				return this.store.getValue(item,this.labelAttr);	// String
+			}else{
+				return this.store.getLabel(item);	// String
+			}
+		},
+
+		// =======================================================================
+		// Write interface
+
+		newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+			// summary:
+			//		Creates a new item.   See `dojo.data.api.Write` for details on args.
+			//		Used in drag & drop when item from external source dropped onto tree.
+			// description:
+			//		Developers will need to override this method if new items get added
+			//		to parents with multiple children attributes, in order to define which
+			//		children attribute points to the new item.
+
+			var pInfo = {parent: parent, attribute: this.childrenAttrs[0], insertIndex: insertIndex};
+
+			if(this.newItemIdAttr && args[this.newItemIdAttr]){
+				// Maybe there's already a corresponding item in the store; if so, reuse it.
+				this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){
+					if(item){
+						// There's already a matching item in store, use it
+						this.pasteItem(item, null, parent, true, insertIndex);
+					}else{
+						// Create new item in the tree, based on the drag source.
+						this.store.newItem(args, pInfo);
+					}
+				}});
+			}else{
+				// [as far as we know] there is no id so we must assume this is a new item
+				this.store.newItem(args, pInfo);
+			}
+		},
+
+		pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
+			// summary:
+			//		Move or copy an item from one parent item to another.
+			//		Used in drag & drop
+			var store = this.store,
+				parentAttr = this.childrenAttrs[0];	// name of "children" attr in parent item
+
+			// remove child from source item, and record the attribute that child occurred in
+			if(oldParentItem){
+				dojo.forEach(this.childrenAttrs, function(attr){
+					if(store.containsValue(oldParentItem, attr, childItem)){
+						if(!bCopy){
+							var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){
+								return x != childItem;
+							});
+							store.setValues(oldParentItem, attr, values);
+						}
+						parentAttr = attr;
+					}
+				});
+			}
+
+			// modify target item's children attribute to include this item
+			if(newParentItem){
+				if(typeof insertIndex == "number"){
+					// call slice() to avoid modifying the original array, confusing the data store
+					var childItems = store.getValues(newParentItem, parentAttr).slice();
+					childItems.splice(insertIndex, 0, childItem);
+					store.setValues(newParentItem, parentAttr, childItems);
+				}else{
+					store.setValues(newParentItem, parentAttr,
+						store.getValues(newParentItem, parentAttr).concat(childItem));
+				}
+			}
+		},
+
+		// =======================================================================
+		// Callbacks
+
+		onChange: function(/*dojo.data.Item*/ item){
+			// summary:
+			//		Callback whenever an item has changed, so that Tree
+			//		can update the label, icon, etc.   Note that changes
+			//		to an item's children or parent(s) will trigger an
+			//		onChildrenChange() so you can ignore those changes here.
+			// tags:
+			//		callback
+		},
+
+		onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+			// summary:
+			//		Callback to do notifications about new, updated, or deleted items.
+			// tags:
+			//		callback
+		},
+
+		onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+			// summary:
+			//		Callback when an item has been deleted.
+			// description:
+			//		Note that there will also be an onChildrenChange() callback for the parent
+			//		of this item.
+			// tags:
+			//		callback
+		},
+
+		// =======================================================================
+		// Events from data store
+
+		onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
+			// summary:
+			//		Handler for when new items appear in the store, either from a drop operation
+			//		or some other way.   Updates the tree view (if necessary).
+			// description:
+			//		If the new item is a child of an existing item,
+			//		calls onChildrenChange() with the new list of children
+			//		for that existing item.
+			//
+			// tags:
+			//		extension
+
+			// We only care about the new item if it has a parent that corresponds to a TreeNode
+			// we are currently displaying
+			if(!parentInfo){
+				return;
+			}
+
+			// Call onChildrenChange() on parent (ie, existing) item with new list of children
+			// In the common case, the new list of children is simply parentInfo.newValue or
+			// [ parentInfo.newValue ], although if items in the store has multiple
+			// child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue,
+			// so call getChildren() to be sure to get right answer.
+			this.getChildren(parentInfo.item, dojo.hitch(this, function(children){
+				this.onChildrenChange(parentInfo.item, children);
+			}));
+		},
+
+		onDeleteItem: function(/*Object*/ item){
+			// summary:
+			//		Handler for delete notifications from underlying store
+			this.onDelete(item);
+		},
+
+		onSetItem: function(/* item */ item,
+						/* attribute-name-string */ attribute,
+						/* object | array */ oldValue,
+						/* object | array */ newValue){
+			// summary:
+			//		Updates the tree view according to changes in the data store.
+			// description:
+			//		Handles updates to an item's children by calling onChildrenChange(), and
+			//		other updates to an item by calling onChange().
+			//
+			//		See `onNewItem` for more details on handling updates to an item's children.
+			// tags:
+			//		extension
+
+			if(dojo.indexOf(this.childrenAttrs, attribute) != -1){
+				// item's children list changed
+				this.getChildren(item, dojo.hitch(this, function(children){
+					// See comments in onNewItem() about calling getChildren()
+					this.onChildrenChange(item, children);
+				}));
+			}else{
+				// item's label/icon/etc. changed.
+				this.onChange(item);
+			}
+		}
+	});
+
+
+
+}
+
+if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.tree.ForestStoreModel"] = true;
+dojo.provide("dijit.tree.ForestStoreModel");
+
+
+
+dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, {
+	// summary:
+	//		Interface between Tree and a dojo.store that doesn't have a root item,
+	//		i.e. has multiple "top level" items.
+	//
+	// description
+	//		Use this class to wrap a dojo.store, making all the items matching the specified query
+	//		appear as children of a fabricated "root item".  If no query is specified then all the
+	//		items returned by fetch() on the underlying store become children of the root item.
+	//		It allows dijit.Tree to assume a single root item, even if the store doesn't have one.
+
+	// Parameters to constructor
+
+	// rootId: String
+	//		ID of fabricated root item
+	rootId: "$root$",
+
+	// rootLabel: String
+	//		Label of fabricated root item
+	rootLabel: "ROOT",
+
+	// query: String
+	//		Specifies the set of children of the root item.
+	// example:
+	//	|	{type:'continent'}
+	query: null,
+
+	// End of parameters to constructor
+
+	constructor: function(params){
+		// summary:
+		//		Sets up variables, etc.
+		// tags:
+		//		private
+
+		// Make dummy root item
+		this.root = {
+			store: this,
+			root: true,
+			id: params.rootId,
+			label: params.rootLabel,
+			children: params.rootChildren	// optional param
+		};
+	},
+
+	// =======================================================================
+	// Methods for traversing hierarchy
+
+	mayHaveChildren: function(/*dojo.data.Item*/ item){
+		// summary:
+		//		Tells if an item has or may have children.  Implementing logic here
+		//		avoids showing +/- expando icon for nodes that we know don't have children.
+		//		(For efficiency reasons we may not want to check if an element actually
+		//		has children until user clicks the expando node)
+		// tags:
+		//		extension
+		return item === this.root || this.inherited(arguments);
+	},
+
+	getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){
+		// summary:
+		// 		Calls onComplete() with array of child items of given parent item, all loaded.
+		if(parentItem === this.root){
+			if(this.root.children){
+				// already loaded, just return
+				callback(this.root.children);
+			}else{
+				this.store.fetch({
+					query: this.query,
+					onComplete: dojo.hitch(this, function(items){
+						this.root.children = items;
+						callback(items);
+					}),
+					onError: onError
+				});
+			}
+		}else{
+			this.inherited(arguments);
+		}
+	},
+
+	// =======================================================================
+	// Inspecting items
+
+	isItem: function(/* anything */ something){
+		return (something === this.root) ? true : this.inherited(arguments);
+	},
+
+	fetchItemByIdentity: function(/* object */ keywordArgs){
+		if(keywordArgs.identity == this.root.id){
+			var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
+			if(keywordArgs.onItem){
+				keywordArgs.onItem.call(scope, this.root);
+			}
+		}else{
+			this.inherited(arguments);
+		}
+	},
+
+	getIdentity: function(/* item */ item){
+		return (item === this.root) ? this.root.id : this.inherited(arguments);
+	},
+
+	getLabel: function(/* item */ item){
+		return	(item === this.root) ? this.root.label : this.inherited(arguments);
+	},
+
+	// =======================================================================
+	// Write interface
+
+	newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){
+		// summary:
+		//		Creates a new item.   See dojo.data.api.Write for details on args.
+		//		Used in drag & drop when item from external source dropped onto tree.
+		if(parent === this.root){
+			this.onNewRootItem(args);
+			return this.store.newItem(args);
+		}else{
+			return this.inherited(arguments);
+		}
+	},
+
+	onNewRootItem: function(args){
+		// summary:
+		//		User can override this method to modify a new element that's being
+		//		added to the root of the tree, for example to add a flag like root=true
+	},
+
+	pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){
+		// summary:
+		//		Move or copy an item from one parent item to another.
+		//		Used in drag & drop
+		if(oldParentItem === this.root){
+			if(!bCopy){
+				// It's onLeaveRoot()'s responsibility to modify the item so it no longer matches
+				// this.query... thus triggering an onChildrenChange() event to notify the Tree
+				// that this element is no longer a child of the root node
+				this.onLeaveRoot(childItem);
+			}
+		}
+		dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem,
+			oldParentItem === this.root ? null : oldParentItem,
+			newParentItem === this.root ? null : newParentItem,
+			bCopy,
+			insertIndex
+		);
+		if(newParentItem === this.root){
+			// It's onAddToRoot()'s responsibility to modify the item so it matches
+			// this.query... thus triggering an onChildrenChange() event to notify the Tree
+			// that this element is now a child of the root node
+			this.onAddToRoot(childItem);
+		}
+	},
+
+	// =======================================================================
+	// Handling for top level children
+
+	onAddToRoot: function(/* item */ item){
+		// summary:
+		//		Called when item added to root of tree; user must override this method
+		//		to modify the item so that it matches the query for top level items
+		// example:
+		//	|	store.setValue(item, "root", true);
+		// tags:
+		//		extension
+		console.log(this, ": item ", item, " added to root");
+	},
+
+	onLeaveRoot: function(/* item */ item){
+		// summary:
+		//		Called when item removed from root of tree; user must override this method
+		//		to modify the item so it doesn't match the query for top level items
+		// example:
+		// 	|	store.unsetAttribute(item, "root");
+		// tags:
+		//		extension
+		console.log(this, ": item ", item, " removed from root");
+	},
+
+	// =======================================================================
+	// Events from data store
+
+	_requeryTop: function(){
+		// reruns the query for the children of the root node,
+		// sending out an onSet notification if those children have changed
+		var oldChildren = this.root.children || [];
+		this.store.fetch({
+			query: this.query,
+			onComplete: dojo.hitch(this, function(newChildren){
+				this.root.children = newChildren;
+
+				// If the list of children or the order of children has changed...
+				if(oldChildren.length != newChildren.length ||
+					dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){
+					this.onChildrenChange(this.root, newChildren);
+				}
+			})
+		});
+	},
+
+	onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){
+		// summary:
+		//		Handler for when new items appear in the store.  Developers should override this
+		//		method to be more efficient based on their app/data.
+		// description:
+		//		Note that the default implementation requeries the top level items every time
+		//		a new item is created, since any new item could be a top level item (even in
+		//		addition to being a child of another item, since items can have multiple parents).
+		//
+		//		Developers can override this function to do something more efficient if they can
+		//		detect which items are possible top level items (based on the item and the
+		//		parentInfo parameters).  Often all top level items have parentInfo==null, but
+		//		that will depend on which store you use and what your data is like.
+		// tags:
+		//		extension
+		this._requeryTop();
+
+		this.inherited(arguments);
+	},
+
+	onDeleteItem: function(/*Object*/ item){
+		// summary:
+		//		Handler for delete notifications from underlying store
+
+		// check if this was a child of root, and if so send notification that root's children
+		// have changed
+		if(dojo.indexOf(this.root.children, item) != -1){
+			this._requeryTop();
+		}
+
+		this.inherited(arguments);
+	}
+});
+
+
+
+}
+
+if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Tree"] = true;
+dojo.provide("dijit.Tree");
+
+
+
+
+
+
+
+
+
+
+
+dojo.declare(
+	"dijit._TreeNode",
+	[dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained, dijit._CssStateMixin],
+{
+	// summary:
+	//		Single node within a tree.   This class is used internally
+	//		by Tree and should not be accessed directly.
+	// tags:
+	//		private
+
+	// item: dojo.data.Item
+	//		the dojo.data entry this tree represents
+	item: null,
+
+	// isTreeNode: [protected] Boolean
+	//		Indicates that this is a TreeNode.   Used by `dijit.Tree` only,
+	//		should not be accessed directly.
+	isTreeNode: true,
+
+	// label: String
+	//		Text of this tree node
+	label: "",
+
+	// isExpandable: [private] Boolean
+	//		This node has children, so show the expando node (+ sign)
+	isExpandable: null,
+
+	// isExpanded: [readonly] Boolean
+	//		This node is currently expanded (ie, opened)
+	isExpanded: false,
+
+	// state: [private] String
+	//		Dynamic loading-related stuff.
+	//		When an empty folder node appears, it is "UNCHECKED" first,
+	//		then after dojo.data query it becomes "LOADING" and, finally "LOADED"
+	state: "UNCHECKED",
+
+	templateString: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),
+
+	baseClass: "dijitTreeNode",
+
+	// For hover effect for tree node, and focus effect for label
+	cssStateNodes: {
+		rowNode: "dijitTreeRow",
+		labelNode: "dijitTreeLabel"
+	},
+
+	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+		label: {node: "labelNode", type: "innerText"},
+		tooltip: {node: "rowNode", type: "attribute", attribute: "title"}
+	}),
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		// set expand icon for leaf
+		this._setExpando();
+
+		// set icon and label class based on item
+		this._updateItemClasses(this.item);
+
+		if(this.isExpandable){
+			dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
+		}
+	},
+
+	_setIndentAttr: function(indent){
+		// summary:
+		//		Tell this node how many levels it should be indented
+		// description:
+		//		0 for top level nodes, 1 for their children, 2 for their
+		//		grandchildren, etc.
+		this.indent = indent;
+
+		// Math.max() is to prevent negative padding on hidden root node (when indent == -1)
+		var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px";
+
+		dojo.style(this.domNode, "backgroundPosition",	pixels + " 0px");
+		dojo.style(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels);
+
+		dojo.forEach(this.getChildren(), function(child){
+			child.set("indent", indent+1);
+		});
+	},
+
+	markProcessing: function(){
+		// summary:
+		//		Visually denote that tree is loading data, etc.
+		// tags:
+		//		private
+		this.state = "LOADING";
+		this._setExpando(true);
+	},
+
+	unmarkProcessing: function(){
+		// summary:
+		//		Clear markup from markProcessing() call
+		// tags:
+		//		private
+		this._setExpando(false);
+	},
+
+	_updateItemClasses: function(item){
+		// summary:
+		//		Set appropriate CSS classes for icon and label dom node
+		//		(used to allow for item updates to change respective CSS)
+		// tags:
+		//		private
+		var tree = this.tree, model = tree.model;
+		if(tree._v10Compat && item === model.root){
+			// For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0)
+			item = null;
+		}
+		this._applyClassAndStyle(item, "icon", "Icon");
+		this._applyClassAndStyle(item, "label", "Label");
+		this._applyClassAndStyle(item, "row", "Row");
+	},
+
+	_applyClassAndStyle: function(item, lower, upper){
+		// summary:
+		//		Set the appropriate CSS classes and styles for labels, icons and rows.
+		//
+		// item:
+		//		The data item.
+		//
+		// lower:
+		//		The lower case attribute to use, e.g. 'icon', 'label' or 'row'.
+		//
+		// upper:
+		//		The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'.
+		//
+		// tags:
+		//		private
+
+		var clsName = "_" + lower + "Class";
+		var nodeName = lower + "Node";
+
+		if(this[clsName]){
+			dojo.removeClass(this[nodeName], this[clsName]);
+ 		}
+		this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded);
+		if(this[clsName]){
+			dojo.addClass(this[nodeName], this[clsName]);
+ 		}
+		dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {});
+ 	},
+
+	_updateLayout: function(){
+		// summary:
+		//		Set appropriate CSS classes for this.domNode
+		// tags:
+		//		private
+		var parent = this.getParent();
+		if(!parent || parent.rowNode.style.display == "none"){
+			/* if we are hiding the root node then make every first level child look like a root node */
+			dojo.addClass(this.domNode, "dijitTreeIsRoot");
+		}else{
+			dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
+		}
+	},
+
+	_setExpando: function(/*Boolean*/ processing){
+		// summary:
+		//		Set the right image for the expando node
+		// tags:
+		//		private
+
+		var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
+						"dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"],
+			_a11yStates = ["*","-","+","*"],
+			idx = processing ? 0 : (this.isExpandable ?	(this.isExpanded ? 1 : 2) : 3);
+
+		// apply the appropriate class to the expando node
+		dojo.removeClass(this.expandoNode, styles);
+		dojo.addClass(this.expandoNode, styles[idx]);
+
+		// provide a non-image based indicator for images-off mode
+		this.expandoNodeText.innerHTML = _a11yStates[idx];
+
+	},
+
+	expand: function(){
+		// summary:
+		//		Show my children
+		// returns:
+		//		Deferred that fires when expansion is complete
+
+		// If there's already an expand in progress or we are already expanded, just return
+		if(this._expandDeferred){
+			return this._expandDeferred;		// dojo.Deferred
+		}
+
+		// cancel in progress collapse operation
+		this._wipeOut && this._wipeOut.stop();
+
+		// All the state information for when a node is expanded, maybe this should be
+		// set when the animation completes instead
+		this.isExpanded = true;
+		dijit.setWaiState(this.labelNode, "expanded", "true");
+		dijit.setWaiRole(this.containerNode, "group");
+		dojo.addClass(this.contentNode,'dijitTreeContentExpanded');
+		this._setExpando();
+		this._updateItemClasses(this.item);
+		if(this == this.tree.rootNode){
+			dijit.setWaiState(this.tree.domNode, "expanded", "true");
+		}
+
+		var def,
+			wipeIn = dojo.fx.wipeIn({
+				node: this.containerNode, duration: dijit.defaultDuration,
+				onEnd: function(){
+					def.callback(true);
+				}
+			});
+
+		// Deferred that fires when expand is complete
+		def = (this._expandDeferred = new dojo.Deferred(function(){
+			// Canceller
+			wipeIn.stop();
+		}));
+
+		wipeIn.play();
+
+		return def;		// dojo.Deferred
+	},
+
+	collapse: function(){
+		// summary:
+		//		Collapse this node (if it's expanded)
+
+		if(!this.isExpanded){ return; }
+
+		// cancel in progress expand operation
+		if(this._expandDeferred){
+			this._expandDeferred.cancel();
+			delete this._expandDeferred;
+		}
+
+		this.isExpanded = false;
+		dijit.setWaiState(this.labelNode, "expanded", "false");
+		if(this == this.tree.rootNode){
+			dijit.setWaiState(this.tree.domNode, "expanded", "false");
+		}
+		dojo.removeClass(this.contentNode,'dijitTreeContentExpanded');
+		this._setExpando();
+		this._updateItemClasses(this.item);
+
+		if(!this._wipeOut){
+			this._wipeOut = dojo.fx.wipeOut({
+				node: this.containerNode, duration: dijit.defaultDuration
+			});
+		}
+		this._wipeOut.play();
+	},
+
+	// indent: Integer
+	//		Levels from this node to the root node
+	indent: 0,
+
+	setChildItems: function(/* Object[] */ items){
+		// summary:
+		//		Sets the child items of this node, removing/adding nodes
+		//		from current children to match specified items[] array.
+		//		Also, if this.persist == true, expands any children that were previously
+		// 		opened.
+		// returns:
+		//		Deferred object that fires after all previously opened children
+		//		have been expanded again (or fires instantly if there are no such children).
+
+		var tree = this.tree,
+			model = tree.model,
+			defs = [];	// list of deferreds that need to fire before I am complete
+
+
+		// Orphan all my existing children.
+		// If items contains some of the same items as before then we will reattach them.
+		// Don't call this.removeChild() because that will collapse the tree etc.
+		dojo.forEach(this.getChildren(), function(child){
+			dijit._Container.prototype.removeChild.call(this, child);
+		}, this);
+
+		this.state = "LOADED";
+
+		if(items && items.length > 0){
+			this.isExpandable = true;
+
+			// Create _TreeNode widget for each specified tree node, unless one already
+			// exists and isn't being used (presumably it's from a DnD move and was recently
+			// released
+			dojo.forEach(items, function(item){
+				var id = model.getIdentity(item),
+					existingNodes = tree._itemNodesMap[id],
+					node;
+				if(existingNodes){
+					for(var i=0;i<existingNodes.length;i++){
+						if(existingNodes[i] && !existingNodes[i].getParent()){
+							node = existingNodes[i];
+							node.set('indent', this.indent+1);
+							break;
+						}
+					}
+				}
+				if(!node){
+					node = this.tree._createTreeNode({
+							item: item,
+							tree: tree,
+							isExpandable: model.mayHaveChildren(item),
+							label: tree.getLabel(item),
+							tooltip: tree.getTooltip(item),
+							dir: tree.dir,
+							lang: tree.lang,
+							indent: this.indent + 1
+						});
+					if(existingNodes){
+						existingNodes.push(node);
+					}else{
+						tree._itemNodesMap[id] = [node];
+					}
+				}
+				this.addChild(node);
+
+				// If node was previously opened then open it again now (this may trigger
+				// more data store accesses, recursively)
+				if(this.tree.autoExpand || this.tree._state(item)){
+					defs.push(tree._expandNode(node));
+				}
+			}, this);
+
+			// note that updateLayout() needs to be called on each child after
+			// _all_ the children exist
+			dojo.forEach(this.getChildren(), function(child, idx){
+				child._updateLayout();
+			});
+		}else{
+			this.isExpandable=false;
+		}
+
+		if(this._setExpando){
+			// change expando to/from dot or + icon, as appropriate
+			this._setExpando(false);
+		}
+
+		// Set leaf icon or folder icon, as appropriate
+		this._updateItemClasses(this.item);
+
+		// On initial tree show, make the selected TreeNode as either the root node of the tree,
+		// or the first child, if the root node is hidden
+		if(this == tree.rootNode){
+			var fc = this.tree.showRoot ? this : this.getChildren()[0];
+			if(fc){
+				fc.setFocusable(true);
+				tree.lastFocused = fc;
+			}else{
+				// fallback: no nodes in tree so focus on Tree <div> itself
+				tree.domNode.setAttribute("tabIndex", "0");
+			}
+		}
+
+		return new dojo.DeferredList(defs);	// dojo.Deferred
+	},
+
+	removeChild: function(/* treeNode */ node){
+		this.inherited(arguments);
+
+		var children = this.getChildren();
+		if(children.length == 0){
+			this.isExpandable = false;
+			this.collapse();
+		}
+
+		dojo.forEach(children, function(child){
+				child._updateLayout();
+		});
+	},
+
+	makeExpandable: function(){
+		// summary:
+		//		if this node wasn't already showing the expando node,
+		//		turn it into one and call _setExpando()
+
+		// TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0
+
+		this.isExpandable = true;
+		this._setExpando(false);
+	},
+
+	_onLabelFocus: function(evt){
+		// summary:
+		//		Called when this row is focused (possibly programatically)
+		//		Note that we aren't using _onFocus() builtin to dijit
+		//		because it's called when focus is moved to a descendant TreeNode.
+		// tags:
+		//		private
+		this.tree._onNodeFocus(this);
+	},
+
+	setSelected: function(/*Boolean*/ selected){
+		// summary:
+		//		A Tree has a (single) currently selected node.
+		//		Mark that this node is/isn't that currently selected node.
+		// description:
+		//		In particular, setting a node as selected involves setting tabIndex
+		//		so that when user tabs to the tree, focus will go to that node (only).
+		dijit.setWaiState(this.labelNode, "selected", selected);
+		dojo.toggleClass(this.rowNode, "dijitTreeRowSelected", selected);
+	},
+
+	setFocusable: function(/*Boolean*/ selected){
+		// summary:
+		//		A Tree has a (single) node that's focusable.
+		//		Mark that this node is/isn't that currently focsuable node.
+		// description:
+		//		In particular, setting a node as selected involves setting tabIndex
+		//		so that when user tabs to the tree, focus will go to that node (only).
+
+		this.labelNode.setAttribute("tabIndex", selected ? "0" : "-1");
+	},
+
+	_onClick: function(evt){
+		// summary:
+		//		Handler for onclick event on a node
+		// tags:
+		//		private
+		this.tree._onClick(this, evt);
+	},
+	_onDblClick: function(evt){
+		// summary:
+		//		Handler for ondblclick event on a node
+		// tags:
+		//		private
+		this.tree._onDblClick(this, evt);
+	},
+
+	_onMouseEnter: function(evt){
+		// summary:
+		//		Handler for onmouseenter event on a node
+		// tags:
+		//		private
+		this.tree._onNodeMouseEnter(this, evt);
+	},
+
+	_onMouseLeave: function(evt){
+		// summary:
+		//		Handler for onmouseenter event on a node
+		// tags:
+		//		private
+		this.tree._onNodeMouseLeave(this, evt);
+	}
+});
+
+dojo.declare(
+	"dijit.Tree",
+	[dijit._Widget, dijit._Templated],
+{
+	// summary:
+	//		This widget displays hierarchical data from a store.
+
+	// store: [deprecated] String||dojo.data.Store
+	//		Deprecated.  Use "model" parameter instead.
+	//		The store to get data to display in the tree.
+	store: null,
+
+	// model: dijit.Tree.model
+	//		Interface to read tree data, get notifications of changes to tree data,
+	//		and for handling drop operations (i.e drag and drop onto the tree)
+	model: null,
+
+	// query: [deprecated] anything
+	//		Deprecated.  User should specify query to the model directly instead.
+	//		Specifies datastore query to return the root item or top items for the tree.
+	query: null,
+
+	// label: [deprecated] String
+	//		Deprecated.  Use dijit.tree.ForestStoreModel directly instead.
+	//		Used in conjunction with query parameter.
+	//		If a query is specified (rather than a root node id), and a label is also specified,
+	//		then a fake root node is created and displayed, with this label.
+	label: "",
+
+	// showRoot: [const] Boolean
+	//		Should the root node be displayed, or hidden?
+	showRoot: true,
+
+	// childrenAttr: [deprecated] String[]
+	//		Deprecated.   This information should be specified in the model.
+	//		One ore more attributes that holds children of a tree node
+	childrenAttr: ["children"],
+
+	// path: String[] or Item[]
+	//		Full path from rootNode to selected node expressed as array of items or array of ids.
+	//		Since setting the path may be asynchronous (because ofwaiting on dojo.data), set("path", ...)
+	//		returns a Deferred to indicate when the set is complete.
+	path: [],
+
+	// selectedItem: [readonly] Item
+	//		The currently selected item in this tree.
+	//		This property can only be set (via set('selectedItem', ...)) when that item is already
+	//		visible in the tree.   (I.e. the tree has already been expanded to show that node.)
+	//		Should generally use `path` attribute to set the selected item instead.
+	selectedItem: null,
+
+	// openOnClick: Boolean
+	//		If true, clicking a folder node's label will open it, rather than calling onClick()
+	openOnClick: false,
+
+	// openOnDblClick: Boolean
+	//		If true, double-clicking a folder node's label will open it, rather than calling onDblClick()
+	openOnDblClick: false,
+
+	templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),
+
+	// persist: Boolean
+	//		Enables/disables use of cookies for state saving.
+	persist: true,
+
+	// autoExpand: Boolean
+	//		Fully expand the tree on load.   Overrides `persist`
+	autoExpand: false,
+
+	// dndController: [protected] String
+	//		Class name to use as as the dnd controller.  Specifying this class enables DnD.
+	//		Generally you should specify this as "dijit.tree.dndSource".
+	dndController: null,
+
+	// parameters to pull off of the tree and pass on to the dndController as its params
+	dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"],
+
+	//declare the above items so they can be pulled from the tree's markup
+
+	// onDndDrop: [protected] Function
+	//		Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`.
+	//		Generally this doesn't need to be set.
+	onDndDrop: null,
+
+	/*=====
+	itemCreator: function(nodes, target, source){
+		// summary:
+		//		Returns objects passed to `Tree.model.newItem()` based on DnD nodes
+		//		dropped onto the tree.   Developer must override this method to enable
+		// 		dropping from external sources onto this Tree, unless the Tree.model's items
+		//		happen to look like {id: 123, name: "Apple" } with no other attributes.
+		// description:
+		//		For each node in nodes[], which came from source, create a hash of name/value
+		//		pairs to be passed to Tree.model.newItem().  Returns array of those hashes.
+		// nodes: DomNode[]
+		//		The DOMNodes dragged from the source container
+		// target: DomNode
+		//		The target TreeNode.rowNode
+		// source: dojo.dnd.Source
+		//		The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source
+		// returns: Object[]
+		//		Array of name/value hashes for each new item to be added to the Tree, like:
+		// |	[
+		// |		{ id: 123, label: "apple", foo: "bar" },
+		// |		{ id: 456, label: "pear", zaz: "bam" }
+		// |	]
+		// tags:
+		//		extension
+		return [{}];
+	},
+	=====*/
+	itemCreator: null,
+
+	// onDndCancel: [protected] Function
+	//		Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`.
+	//		Generally this doesn't need to be set.
+	onDndCancel: null,
+
+/*=====
+	checkAcceptance: function(source, nodes){
+		// summary:
+		//		Checks if the Tree itself can accept nodes from this source
+		// source: dijit.tree._dndSource
+		//		The source which provides items
+		// nodes: DOMNode[]
+		//		Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if
+		//		source is a dijit.Tree.
+		// tags:
+		//		extension
+		return true;	// Boolean
+	},
+=====*/
+	checkAcceptance: null,
+
+/*=====
+	checkItemAcceptance: function(target, source, position){
+		// summary:
+		//		Stub function to be overridden if one wants to check for the ability to drop at the node/item level
+		// description:
+		//		In the base case, this is called to check if target can become a child of source.
+		//		When betweenThreshold is set, position="before" or "after" means that we
+		//		are asking if the source node can be dropped before/after the target node.
+		// target: DOMNode
+		//		The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to
+		//		Use dijit.getEnclosingWidget(target) to get the TreeNode.
+		// source: dijit.tree.dndSource
+		//		The (set of) nodes we are dropping
+		// position: String
+		//		"over", "before", or "after"
+		// tags:
+		//		extension
+		return true;	// Boolean
+	},
+=====*/
+	checkItemAcceptance: null,
+
+	// dragThreshold: Integer
+	//		Number of pixels mouse moves before it's considered the start of a drag operation
+	dragThreshold: 5,
+
+	// betweenThreshold: Integer
+	//		Set to a positive value to allow drag and drop "between" nodes.
+	//
+	//		If during DnD mouse is over a (target) node but less than betweenThreshold
+	//		pixels from the bottom edge, dropping the the dragged node will make it
+	//		the next sibling of the target node, rather than the child.
+	//
+	//		Similarly, if mouse is over a target node but less that betweenThreshold
+	//		pixels from the top edge, dropping the dragged node will make it
+	//		the target node's previous sibling rather than the target node's child.
+	betweenThreshold: 0,
+
+	// _nodePixelIndent: Integer
+	//		Number of pixels to indent tree nodes (relative to parent node).
+	//		Default is 19 but can be overridden by setting CSS class dijitTreeIndent
+	//		and calling resize() or startup() on tree after it's in the DOM.
+	_nodePixelIndent: 19,
+
+	_publish: function(/*String*/ topicName, /*Object*/ message){
+		// summary:
+		//		Publish a message for this widget/topic
+		dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message || {})]);
+	},
+
+	postMixInProperties: function(){
+		this.tree = this;
+
+		if(this.autoExpand){
+			// There's little point in saving opened/closed state of nodes for a Tree
+			// that initially opens all it's nodes.
+			this.persist = false;
+		}
+
+		this._itemNodesMap={};
+
+		if(!this.cookieName){
+			this.cookieName = this.id + "SaveStateCookie";
+		}
+
+		this._loadDeferred = new dojo.Deferred();
+
+		this.inherited(arguments);
+	},
+
+	postCreate: function(){
+		this._initState();
+
+		// Create glue between store and Tree, if not specified directly by user
+		if(!this.model){
+			this._store2model();
+		}
+
+		// monitor changes to items
+		this.connect(this.model, "onChange", "_onItemChange");
+		this.connect(this.model, "onChildrenChange", "_onItemChildrenChange");
+		this.connect(this.model, "onDelete", "_onItemDelete");
+
+		this._load();
+
+		this.inherited(arguments);
+
+		if(this.dndController){
+			if(dojo.isString(this.dndController)){
+				this.dndController = dojo.getObject(this.dndController);
+			}
+			var params={};
+			for(var i=0; i<this.dndParams.length;i++){
+				if(this[this.dndParams[i]]){
+					params[this.dndParams[i]] = this[this.dndParams[i]];
+				}
+			}
+			this.dndController = new this.dndController(this, params);
+		}
+	},
+
+	_store2model: function(){
+		// summary:
+		//		User specified a store&query rather than model, so create model from store/query
+		this._v10Compat = true;
+		dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
+
+		var modelParams = {
+			id: this.id + "_ForestStoreModel",
+			store: this.store,
+			query: this.query,
+			childrenAttrs: this.childrenAttr
+		};
+
+		// Only override the model's mayHaveChildren() method if the user has specified an override
+		if(this.params.mayHaveChildren){
+			modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren");
+		}
+
+		if(this.params.getItemChildren){
+			modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){
+				this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError);
+			});
+		}
+		this.model = new dijit.tree.ForestStoreModel(modelParams);
+
+		// For backwards compatibility, the visibility of the root node is controlled by
+		// whether or not the user has specified a label
+		this.showRoot = Boolean(this.label);
+	},
+
+	onLoad: function(){
+		// summary:
+		//		Called when tree finishes loading and expanding.
+		// description:
+		//		If persist == true the loading may encompass many levels of fetches
+		//		from the data store, each asynchronous.   Waits for all to finish.
+		// tags:
+		//		callback
+	},
+
+	_load: function(){
+		// summary:
+		//		Initial load of the tree.
+		//		Load root node (possibly hidden) and it's children.
+		this.model.getRoot(
+			dojo.hitch(this, function(item){
+				var rn = (this.rootNode = this.tree._createTreeNode({
+					item: item,
+					tree: this,
+					isExpandable: true,
+					label: this.label || this.getLabel(item),
+					indent: this.showRoot ? 0 : -1
+				}));
+				if(!this.showRoot){
+					rn.rowNode.style.display="none";
+				}
+				this.domNode.appendChild(rn.domNode);
+				var identity = this.model.getIdentity(item);
+				if(this._itemNodesMap[identity]){
+					this._itemNodesMap[identity].push(rn);
+				}else{
+					this._itemNodesMap[identity] = [rn];
+				}
+
+				rn._updateLayout();		// sets "dijitTreeIsRoot" CSS classname
+
+				// load top level children and then fire onLoad() event
+				this._expandNode(rn).addCallback(dojo.hitch(this, function(){
+					this._loadDeferred.callback(true);
+					this.onLoad();
+				}));
+			}),
+			function(err){
+				console.error(this, ": error loading root: ", err);
+			}
+		);
+	},
+
+	getNodesByItem: function(/*dojo.data.Item or id*/ item){
+		// summary:
+		//		Returns all tree nodes that refer to an item
+		// returns:
+		//		Array of tree nodes that refer to passed item
+
+		if(!item){ return []; }
+		var identity = dojo.isString(item) ? item : this.model.getIdentity(item);
+		// return a copy so widget don't get messed up by changes to returned array
+		return [].concat(this._itemNodesMap[identity]);
+	},
+
+	_setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){
+		// summary:
+		//		Select a tree node related to passed item.
+		//		WARNING: if model use multi-parented items or desired tree node isn't already loaded
+		//		behavior is undefined. Use set('path', ...) instead.
+
+		var oldValue = this.get("selectedItem");
+		var identity = (!item || dojo.isString(item)) ? item : this.model.getIdentity(item);
+		if(identity == oldValue ? this.model.getIdentity(oldValue) : null){ return; }
+		var nodes = this._itemNodesMap[identity];
+		this._selectNode((nodes && nodes[0]) || null);	//select the first item
+	},
+
+	_getSelectedItemAttr: function(){
+		// summary:
+		//		Return item related to selected tree node.
+		return this.selectedNode && this.selectedNode.item;
+	},
+
+	_setPathAttr: function(/*Item[] || String[]*/ path){
+		// summary:
+		//		Select the tree node identified by passed path.
+		// path:
+		//		Array of items or item id's
+		// returns:
+		//		Deferred to indicate when the set is complete
+
+		var d = new dojo.Deferred();
+
+		this._selectNode(null);
+		if(!path || !path.length){
+			d.resolve(true);
+			return d;
+		}
+
+		// If this is called during initialization, defer running until Tree has finished loading
+		this._loadDeferred.addCallback(dojo.hitch(this, function(){
+			if(!this.rootNode){
+				d.reject(new Error("!this.rootNode"));
+				return;
+			}
+			if(path[0] !== this.rootNode.item && (dojo.isString(path[0]) && path[0] != this.model.getIdentity(this.rootNode.item))){
+				d.reject(new Error(this.id + ":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));
+				return;
+			}
+			path.shift();
+
+			var node = this.rootNode;
+
+			function advance(){
+				// summary:
+				// 		Called when "node" has completed loading and expanding.   Pop the next item from the path
+				//		(which must be a child of "node") and advance to it, and then recurse.
+
+				// Set item and identity to next item in path (node is pointing to the item that was popped
+				// from the path _last_ time.
+				var item = path.shift(),
+					identity = dojo.isString(item) ? item : this.model.getIdentity(item);
+
+				// Change "node" from previous item in path to the item we just popped from path
+				dojo.some(this._itemNodesMap[identity], function(n){
+					if(n.getParent() == node){
+						node = n;
+						return true;
+					}
+					return false;
+				});
+
+				if(path.length){
+					// Need to do more expanding
+					this._expandNode(node).addCallback(dojo.hitch(this, advance));
+				}else{
+					// Final destination node, select it
+					this._selectNode(node);
+					
+					// signal that path setting is finished
+					d.resolve(true);
+				}
+			}
+
+			this._expandNode(node).addCallback(dojo.hitch(this, advance));
+		}));
+			
+		return d;
+	},
+
+	_getPathAttr: function(){
+		// summary:
+		//		Return an array of items that is the path to selected tree node.
+		if(!this.selectedNode){ return; }
+		var res = [];
+		var treeNode = this.selectedNode;
+		while(treeNode && treeNode !== this.rootNode){
+			res.unshift(treeNode.item);
+			treeNode = treeNode.getParent();
+		}
+		res.unshift(this.rootNode.item);
+		return res;
+	},
+
+	////////////// Data store related functions //////////////////////
+	// These just get passed to the model; they are here for back-compat
+
+	mayHaveChildren: function(/*dojo.data.Item*/ item){
+		// summary:
+		//		Deprecated.   This should be specified on the model itself.
+		//
+		//		Overridable function to tell if an item has or may have children.
+		//		Controls whether or not +/- expando icon is shown.
+		//		(For efficiency reasons we may not want to check if an element actually
+		//		has children until user clicks the expando node)
+		// tags:
+		//		deprecated
+	},
+
+	getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
+		// summary:
+		//		Deprecated.   This should be specified on the model itself.
+		//
+		// 		Overridable function that return array of child items of given parent item,
+		//		or if parentItem==null then return top items in tree
+		// tags:
+		//		deprecated
+	},
+
+	///////////////////////////////////////////////////////
+	// Functions for converting an item to a TreeNode
+	getLabel: function(/*dojo.data.Item*/ item){
+		// summary:
+		//		Overridable function to get the label for a tree node (given the item)
+		// tags:
+		//		extension
+		return this.model.getLabel(item);	// String
+	},
+
+	getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+		// summary:
+		//		Overridable function to return CSS class name to display icon
+		// tags:
+		//		extension
+		return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf"
+	},
+
+	getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+		// summary:
+		//		Overridable function to return CSS class name to display label
+		// tags:
+		//		extension
+	},
+
+	getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+		// summary:
+		//		Overridable function to return CSS class name to display row
+		// tags:
+		//		extension
+	},
+
+	getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+		// summary:
+		//		Overridable function to return CSS styles to display icon
+		// returns:
+		//		Object suitable for input to dojo.style() like {backgroundImage: "url(...)"}
+		// tags:
+		//		extension
+	},
+
+	getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+		// summary:
+		//		Overridable function to return CSS styles to display label
+		// returns:
+		//		Object suitable for input to dojo.style() like {color: "red", background: "green"}
+		// tags:
+		//		extension
+	},
+
+	getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){
+		// summary:
+		//		Overridable function to return CSS styles to display row
+		// returns:
+		//		Object suitable for input to dojo.style() like {background-color: "#bbb"}
+		// tags:
+		//		extension
+	},
+
+	getTooltip: function(/*dojo.data.Item*/ item){
+		// summary:
+		//		Overridable function to get the tooltip for a tree node (given the item)
+		// tags:
+		//		extension
+		return "";	// String
+	},
+
+	/////////// Keyboard and Mouse handlers ////////////////////
+
+	_onKeyPress: function(/*Event*/ e){
+		// summary:
+		//		Translates keypress events into commands for the controller
+		if(e.altKey){ return; }
+		var dk = dojo.keys;
+		var treeNode = dijit.getEnclosingWidget(e.target);
+		if(!treeNode){ return; }
+
+		var key = e.charOrCode;
+		if(typeof key == "string"){	// handle printables (letter navigation)
+			// Check for key navigation.
+			if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
+				this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } );
+				dojo.stopEvent(e);
+			}
+		}else{	// handle non-printables (arrow keys)
+			// clear record of recent printables (being saved for multi-char letter navigation),
+			// because "a", down-arrow, "b" shouldn't search for "ab"
+			if(this._curSearch){
+				clearTimeout(this._curSearch.timer);
+				delete this._curSearch;
+			}
+
+			var map = this._keyHandlerMap;
+			if(!map){
+				// setup table mapping keys to events
+				map = {};
+				map[dk.ENTER]="_onEnterKey";
+				map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow";
+				map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow";
+				map[dk.UP_ARROW]="_onUpArrow";
+				map[dk.DOWN_ARROW]="_onDownArrow";
+				map[dk.HOME]="_onHomeKey";
+				map[dk.END]="_onEndKey";
+				this._keyHandlerMap = map;
+			}
+			if(this._keyHandlerMap[key]){
+				this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } );
+				dojo.stopEvent(e);
+			}
+		}
+	},
+
+	_onEnterKey: function(/*Object*/ message, /*Event*/ evt){
+		this._publish("execute", { item: message.item, node: message.node } );
+		this._selectNode(message.node);
+		this.onClick(message.item, message.node, evt);
+	},
+
+	_onDownArrow: function(/*Object*/ message){
+		// summary:
+		//		down arrow pressed; get next visible node, set focus there
+		var node = this._getNextNode(message.node);
+		if(node && node.isTreeNode){
+			this.focusNode(node);
+		}
+	},
+
+	_onUpArrow: function(/*Object*/ message){
+		// summary:
+		//		Up arrow pressed; move to previous visible node
+
+		var node = message.node;
+
+		// if younger siblings
+		var previousSibling = node.getPreviousSibling();
+		if(previousSibling){
+			node = previousSibling;
+			// if the previous node is expanded, dive in deep
+			while(node.isExpandable && node.isExpanded && node.hasChildren()){
+				// move to the last child
+				var children = node.getChildren();
+				node = children[children.length-1];
+			}
+		}else{
+			// if this is the first child, return the parent
+			// unless the parent is the root of a tree with a hidden root
+			var parent = node.getParent();
+			if(!(!this.showRoot && parent === this.rootNode)){
+				node = parent;
+			}
+		}
+
+		if(node && node.isTreeNode){
+			this.focusNode(node);
+		}
+	},
+
+	_onRightArrow: function(/*Object*/ message){
+		// summary:
+		//		Right arrow pressed; go to child node
+		var node = message.node;
+
+		// if not expanded, expand, else move to 1st child
+		if(node.isExpandable && !node.isExpanded){
+			this._expandNode(node);
+		}else if(node.hasChildren()){
+			node = node.getChildren()[0];
+			if(node && node.isTreeNode){
+				this.focusNode(node);
+			}
+		}
+	},
+
+	_onLeftArrow: function(/*Object*/ message){
+		// summary:
+		//		Left arrow pressed.
+		//		If not collapsed, collapse, else move to parent.
+
+		var node = message.node;
+
+		if(node.isExpandable && node.isExpanded){
+			this._collapseNode(node);
+		}else{
+			var parent = node.getParent();
+			if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){
+				this.focusNode(parent);
+			}
+		}
+	},
+
+	_onHomeKey: function(){
+		// summary:
+		//		Home key pressed; get first visible node, and set focus there
+		var node = this._getRootOrFirstNode();
+		if(node){
+			this.focusNode(node);
+		}
+	},
+
+	_onEndKey: function(/*Object*/ message){
+		// summary:
+		//		End key pressed; go to last visible node.
+
+		var node = this.rootNode;
+		while(node.isExpanded){
+			var c = node.getChildren();
+			node = c[c.length - 1];
+		}
+
+		if(node && node.isTreeNode){
+			this.focusNode(node);
+		}
+	},
+
+	// multiCharSearchDuration: Number
+	//		If multiple characters are typed where each keystroke happens within
+	//		multiCharSearchDuration of the previous keystroke,
+	//		search for nodes matching all the keystrokes.
+	//
+	//		For example, typing "ab" will search for entries starting with
+	//		"ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration.
+	multiCharSearchDuration: 250,
+
+	_onLetterKeyNav: function(message){
+		// summary:
+		//		Called when user presses a prinatable key; search for node starting with recently typed letters.
+		// message: Object
+		//		Like { node: TreeNode, key: 'a' } where key is the key the user pressed.
+
+		// Branch depending on whether this key starts a new search, or modifies an existing search
+		var cs = this._curSearch;
+		if(cs){
+			// We are continuing a search.  Ex: user has pressed 'a', and now has pressed
+			// 'b', so we want to search for nodes starting w/"ab".
+			cs.pattern = cs.pattern + message.key;
+			clearTimeout(cs.timer);
+		}else{
+			// We are starting a new search
+			cs = this._curSearch = {
+					pattern: message.key,
+					startNode: message.node
+			};
+		}
+
+		// set/reset timer to forget recent keystrokes
+		var self = this;
+		cs.timer = setTimeout(function(){
+			delete self._curSearch;
+		}, this.multiCharSearchDuration);
+
+		// Navigate to TreeNode matching keystrokes [entered so far].
+		var node = cs.startNode;
+		do{
+			node = this._getNextNode(node);
+			//check for last node, jump to first node if necessary
+			if(!node){
+				node = this._getRootOrFirstNode();
+			}
+		}while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern));
+		if(node && node.isTreeNode){
+			// no need to set focus if back where we started
+			if(node !== cs.startNode){
+				this.focusNode(node);
+			}
+		}
+	},
+
+	_onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
+		// summary:
+		//		Translates click events into commands for the controller to process
+
+		var domElement = e.target,
+			isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
+
+		if( (this.openOnClick && nodeWidget.isExpandable) || isExpandoClick ){
+			// expando node was clicked, or label of a folder node was clicked; open it
+			if(nodeWidget.isExpandable){
+				this._onExpandoClick({node:nodeWidget});
+			}
+		}else{
+			this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
+			this.onClick(nodeWidget.item, nodeWidget, e);
+			this.focusNode(nodeWidget);
+		}
+		if(!isExpandoClick){
+			this._selectNode(nodeWidget);
+		}
+		dojo.stopEvent(e);
+	},
+	_onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){
+		// summary:
+		//		Translates double-click events into commands for the controller to process
+
+		var domElement = e.target,
+			isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText);
+
+		if( (this.openOnDblClick && nodeWidget.isExpandable) ||isExpandoClick ){
+			// expando node was clicked, or label of a folder node was clicked; open it
+			if(nodeWidget.isExpandable){
+				this._onExpandoClick({node:nodeWidget});
+			}
+		}else{
+			this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } );
+			this.onDblClick(nodeWidget.item, nodeWidget, e);
+			this.focusNode(nodeWidget);
+		}
+		if(!isExpandoClick){
+			this._selectNode(nodeWidget);
+		}
+		dojo.stopEvent(e);
+	},
+
+	_onExpandoClick: function(/*Object*/ message){
+		// summary:
+		//		User clicked the +/- icon; expand or collapse my children.
+		var node = message.node;
+
+		// If we are collapsing, we might be hiding the currently focused node.
+		// Also, clicking the expando node might have erased focus from the current node.
+		// For simplicity's sake just focus on the node with the expando.
+		this.focusNode(node);
+
+		if(node.isExpanded){
+			this._collapseNode(node);
+		}else{
+			this._expandNode(node);
+		}
+	},
+
+	onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
+		// summary:
+		//		Callback when a tree node is clicked
+		// tags:
+		//		callback
+	},
+	onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){
+		// summary:
+		//		Callback when a tree node is double-clicked
+		// tags:
+		//		callback
+	},
+	onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){
+		// summary:
+		//		Callback when a node is opened
+		// tags:
+		//		callback
+	},
+	onClose: function(/* dojo.data */ item, /*TreeNode*/ node){
+		// summary:
+		//		Callback when a node is closed
+		// tags:
+		//		callback
+	},
+
+	_getNextNode: function(node){
+		// summary:
+		//		Get next visible node
+
+		if(node.isExpandable && node.isExpanded && node.hasChildren()){
+			// if this is an expanded node, get the first child
+			return node.getChildren()[0];		// _TreeNode
+		}else{
+			// find a parent node with a sibling
+			while(node && node.isTreeNode){
+				var returnNode = node.getNextSibling();
+				if(returnNode){
+					return returnNode;		// _TreeNode
+				}
+				node = node.getParent();
+			}
+			return null;
+		}
+	},
+
+	_getRootOrFirstNode: function(){
+		// summary:
+		//		Get first visible node
+		return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0];
+	},
+
+	_collapseNode: function(/*_TreeNode*/ node){
+		// summary:
+		//		Called when the user has requested to collapse the node
+
+		if(node._expandNodeDeferred){
+			delete node._expandNodeDeferred;
+		}
+
+		if(node.isExpandable){
+			if(node.state == "LOADING"){
+				// ignore clicks while we are in the process of loading data
+				return;
+			}
+
+			node.collapse();
+			this.onClose(node.item, node);
+
+			if(node.item){
+				this._state(node.item,false);
+				this._saveState();
+			}
+		}
+	},
+
+	_expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){
+		// summary:
+		//		Called when the user has requested to expand the node
+		// recursive:
+		//		Internal flag used when _expandNode() calls itself, don't set.
+		// returns:
+		//		Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants
+		//		that were previously opened too
+
+		if(node._expandNodeDeferred && !recursive){
+			// there's already an expand in progress (or completed), so just return
+			return node._expandNodeDeferred;	// dojo.Deferred
+		}
+
+		var model = this.model,
+			item = node.item,
+			_this = this;
+
+		switch(node.state){
+			case "UNCHECKED":
+				// need to load all the children, and then expand
+				node.markProcessing();
+
+				// Setup deferred to signal when the load and expand are finished.
+				// Save that deferred in this._expandDeferred as a flag that operation is in progress.
+				var def = (node._expandNodeDeferred = new dojo.Deferred());
+
+				// Get the children
+				model.getChildren(
+					item,
+					function(items){
+						node.unmarkProcessing();
+
+						// Display the children and also start expanding any children that were previously expanded
+						// (if this.persist == true).   The returned Deferred will fire when those expansions finish.
+						var scid = node.setChildItems(items);
+
+						// Call _expandNode() again but this time it will just to do the animation (default branch).
+						// The returned Deferred will fire when the animation completes.
+						// TODO: seems like I can avoid recursion and just use a deferred to sequence the events?
+						var ed = _this._expandNode(node, true);
+
+						// After the above two tasks (setChildItems() and recursive _expandNode()) finish,
+						// signal that I am done.
+						scid.addCallback(function(){
+							ed.addCallback(function(){
+								def.callback();
+							})
+						});
+					},
+					function(err){
+						console.error(_this, ": error loading root children: ", err);
+					}
+				);
+				break;
+
+			default:	// "LOADED"
+				// data is already loaded; just expand node
+				def = (node._expandNodeDeferred = node.expand());
+
+				this.onOpen(node.item, node);
+
+				if(item){
+					this._state(item, true);
+					this._saveState();
+				}
+		}
+
+		return def;	// dojo.Deferred
+	},
+
+	////////////////// Miscellaneous functions ////////////////
+
+	focusNode: function(/* _tree.Node */ node){
+		// summary:
+		//		Focus on the specified node (which must be visible)
+		// tags:
+		//		protected
+
+		// set focus so that the label will be voiced using screen readers
+		dijit.focus(node.labelNode);
+	},
+
+	_selectNode: function(/*_tree.Node*/ node){
+		// summary:
+		//		Mark specified node as select, and unmark currently selected node.
+		// tags:
+		//		protected
+
+		if(this.selectedNode && !this.selectedNode._destroyed){
+			this.selectedNode.setSelected(false);
+		}
+		if(node){
+			node.setSelected(true);
+		}
+		this.selectedNode = node;
+	},
+
+	_onNodeFocus: function(/*dijit._Widget*/ node){
+		// summary:
+		//		Called when a TreeNode gets focus, either by user clicking
+		//		it, or programatically by arrow key handling code.
+		// description:
+		//		It marks that the current node is the selected one, and the previously
+		//		selected node no longer is.
+
+		if(node && node != this.lastFocused){
+			if(this.lastFocused && !this.lastFocused._destroyed){
+				// mark that the previously focsable node is no longer focusable
+				this.lastFocused.setFocusable(false);
+			}
+
+			// mark that the new node is the currently selected one
+			node.setFocusable(true);
+			this.lastFocused = node;
+		}
+	},
+
+	_onNodeMouseEnter: function(/*dijit._Widget*/ node){
+		// summary:
+		//		Called when mouse is over a node (onmouseenter event),
+		//		this is monitored by the DND code
+	},
+
+	_onNodeMouseLeave: function(/*dijit._Widget*/ node){
+		// summary:
+		//		Called when mouse leaves a node (onmouseleave event),
+		//		this is monitored by the DND code
+	},
+
+	//////////////// Events from the model //////////////////////////
+
+	_onItemChange: function(/*Item*/ item){
+		// summary:
+		//		Processes notification of a change to an item's scalar values like label
+		var model = this.model,
+			identity = model.getIdentity(item),
+			nodes = this._itemNodesMap[identity];
+
+		if(nodes){
+			var label = this.getLabel(item),
+				tooltip = this.getTooltip(item);
+			dojo.forEach(nodes, function(node){
+				node.set({
+					item: item,		// theoretically could be new JS Object representing same item
+					label: label,
+					tooltip: tooltip
+				});
+				node._updateItemClasses(item);
+			});
+		}
+	},
+
+	_onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){
+		// summary:
+		//		Processes notification of a change to an item's children
+		var model = this.model,
+			identity = model.getIdentity(parent),
+			parentNodes = this._itemNodesMap[identity];
+
+		if(parentNodes){
+			dojo.forEach(parentNodes,function(parentNode){
+				parentNode.setChildItems(newChildrenList);
+			});
+		}
+	},
+
+	_onItemDelete: function(/*Item*/ item){
+		// summary:
+		//		Processes notification of a deletion of an item
+		var model = this.model,
+			identity = model.getIdentity(item),
+			nodes = this._itemNodesMap[identity];
+
+		if(nodes){
+			dojo.forEach(nodes,function(node){
+				var parent = node.getParent();
+				if(parent){
+					// if node has not already been orphaned from a _onSetItem(parent, "children", ..) call...
+					parent.removeChild(node);
+				}
+				node.destroyRecursive();
+			});
+			delete this._itemNodesMap[identity];
+		}
+	},
+
+	/////////////// Miscellaneous funcs
+
+	_initState: function(){
+		// summary:
+		//		Load in which nodes should be opened automatically
+		if(this.persist){
+			var cookie = dojo.cookie(this.cookieName);
+			this._openedItemIds = {};
+			if(cookie){
+				dojo.forEach(cookie.split(','), function(item){
+					this._openedItemIds[item] = true;
+				}, this);
+			}
+		}
+	},
+	_state: function(item,expanded){
+		// summary:
+		//		Query or set expanded state for an item,
+		if(!this.persist){
+			return false;
+		}
+		var id=this.model.getIdentity(item);
+		if(arguments.length === 1){
+			return this._openedItemIds[id];
+		}
+		if(expanded){
+			this._openedItemIds[id] = true;
+		}else{
+			delete this._openedItemIds[id];
+		}
+	},
+	_saveState: function(){
+		// summary:
+		//		Create and save a cookie with the currently expanded nodes identifiers
+		if(!this.persist){
+			return;
+		}
+		var ary = [];
+		for(var id in this._openedItemIds){
+			ary.push(id);
+		}
+		dojo.cookie(this.cookieName, ary.join(","), {expires:365});
+	},
+
+	destroy: function(){
+		if(this._curSearch){
+			clearTimeout(this._curSearch.timer);
+			delete this._curSearch;
+		}
+		if(this.rootNode){
+			this.rootNode.destroyRecursive();
+		}
+		if(this.dndController && !dojo.isString(this.dndController)){
+			this.dndController.destroy();
+		}
+		this.rootNode = null;
+		this.inherited(arguments);
+	},
+
+	destroyRecursive: function(){
+		// A tree is treated as a leaf, not as a node with children (like a grid),
+		// but defining destroyRecursive for back-compat.
+		this.destroy();
+	},
+
+	resize: function(changeSize){
+		if(changeSize){
+			dojo.marginBox(this.domNode, changeSize);
+			dojo.style(this.domNode, "overflow", "auto");	// for scrollbars
+		}
+
+		// The only JS sizing involved w/tree is the indentation, which is specified
+		// in CSS and read in through this dummy indentDetector node (tree must be
+		// visible and attached to the DOM to read this)
+		this._nodePixelIndent = dojo.marginBox(this.tree.indentDetector).w;
+
+		if(this.tree.rootNode){
+			// If tree has already loaded, then reset indent for all the nodes
+			this.tree.rootNode.set('indent', this.showRoot ? 0 : -1);
+		}
+	},
+
+	_createTreeNode: function(/*Object*/ args){
+		// summary:
+		//		creates a TreeNode
+		// description:
+		//		Developers can override this method to define their own TreeNode class;
+		//		However it will probably be removed in a future release in favor of a way
+		//		of just specifying a widget for the label, rather than one that contains
+		//		the children too.
+		return new dijit._TreeNode(args);
+	}
+});
+
+// For back-compat.  TODO: remove in 2.0
+
+
+
+}
+
+if(!dojo._hasResource["dijit.InlineEditBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.InlineEditBox"] = true;
+dojo.provide("dijit.InlineEditBox");
+
+
+
+
+
+
+
+
+
+
+dojo.declare("dijit.InlineEditBox",
+	dijit._Widget,
+	{
+	// summary:
+	//		An element with in-line edit capabilites
+	//
+	// description:
+	//		Behavior for an existing node (`<p>`, `<div>`, `<span>`, etc.) so that
+	// 		when you click it, an editor shows up in place of the original
+	//		text.  Optionally, Save and Cancel button are displayed below the edit widget.
+	//		When Save is clicked, the text is pulled from the edit
+	//		widget and redisplayed and the edit widget is again hidden.
+	//		By default a plain Textarea widget is used as the editor (or for
+	//		inline values a TextBox), but you can specify an editor such as
+	//		dijit.Editor (for editing HTML) or a Slider (for adjusting a number).
+	//		An edit widget must support the following API to be used:
+	//			- displayedValue or value as initialization parameter,
+	//			and available through set('displayedValue') / set('value')
+	//			- void focus()
+	//			- DOM-node focusNode = node containing editable text
+
+	// editing: [readonly] Boolean
+	//		Is the node currently in edit mode?
+	editing: false,
+
+	// autoSave: Boolean
+	//		Changing the value automatically saves it; don't have to push save button
+	//		(and save button isn't even displayed)
+	autoSave: true,
+
+	// buttonSave: String
+	//		Save button label
+	buttonSave: "",
+
+	// buttonCancel: String
+	//		Cancel button label
+	buttonCancel: "",
+
+	// renderAsHtml: Boolean
+	//		Set this to true if the specified Editor's value should be interpreted as HTML
+	//		rather than plain text (ex: `dijit.Editor`)
+	renderAsHtml: false,
+
+	// editor: String
+	//		Class name for Editor widget
+	editor: "dijit.form.TextBox",
+
+	// editorWrapper: String
+	//		Class name for widget that wraps the editor widget, displaying save/cancel
+	//		buttons.
+	editorWrapper: "dijit._InlineEditor",
+
+	// editorParams: Object
+	//		Set of parameters for editor, like {required: true}
+	editorParams: {},
+
+	onChange: function(value){
+		// summary:
+		//		Set this handler to be notified of changes to value.
+		// tags:
+		//		callback
+	},
+
+	onCancel: function(){
+		// summary:
+		//		Set this handler to be notified when editing is cancelled.
+		// tags:
+		//		callback
+	},
+
+	// width: String
+	//		Width of editor.  By default it's width=100% (ie, block mode).
+	width: "100%",
+
+	// value: String
+	//		The display value of the widget in read-only mode
+	value: "",
+
+	// noValueIndicator: [const] String
+	//		The text that gets displayed when there is no value (so that the user has a place to click to edit)
+	noValueIndicator: dojo.isIE <= 6 ?	// font-family needed on IE6 but it messes up IE8
+		"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>" :
+		"<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",
+
+	constructor: function(){
+		// summary:
+		//		Sets up private arrays etc.
+		// tags:
+		//		private
+		this.editorParams = {};
+	},
+
+	postMixInProperties: function(){
+		this.inherited(arguments);
+
+		// save pointer to original source node, since Widget nulls-out srcNodeRef
+		this.displayNode = this.srcNodeRef;
+
+		// connect handlers to the display node
+		var events = {
+			ondijitclick: "_onClick",
+			onmouseover: "_onMouseOver",
+			onmouseout: "_onMouseOut",
+			onfocus: "_onMouseOver",
+			onblur: "_onMouseOut"
+		};
+		for(var name in events){
+			this.connect(this.displayNode, name, events[name]);
+		}
+		dijit.setWaiRole(this.displayNode, "button");
+		if(!this.displayNode.getAttribute("tabIndex")){
+			this.displayNode.setAttribute("tabIndex", 0);
+		}
+
+		if(!this.value && !("value" in this.params)){ // "" is a good value if specified directly so check params){
+		   this.value = dojo.trim(this.renderAsHtml ? this.displayNode.innerHTML :
+		      (this.displayNode.innerText||this.displayNode.textContent||""));
+		}
+		if(!this.value){
+		    this.displayNode.innerHTML = this.noValueIndicator;
+		}
+
+		dojo.addClass(this.displayNode, 'dijitInlineEditBoxDisplayMode');
+	},
+
+	setDisabled: function(/*Boolean*/ disabled){
+		// summary:
+		//		Deprecated.   Use set('disabled', ...) instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.", "", "2.0");
+		this.set('disabled', disabled);
+	},
+
+	_setDisabledAttr: function(/*Boolean*/ disabled){
+		// summary:
+		//		Hook to make set("disabled", ...) work.
+		//		Set disabled state of widget.
+		this.disabled = disabled;
+		dijit.setWaiState(this.domNode, "disabled", disabled);
+		if(disabled){
+			this.displayNode.removeAttribute("tabIndex");
+		}else{
+			this.displayNode.setAttribute("tabIndex", 0);
+		}
+		dojo.toggleClass(this.displayNode, "dijitInlineEditBoxDisplayModeDisabled", disabled);
+	},
+
+	_onMouseOver: function(){
+		// summary:
+		//		Handler for onmouseover and onfocus event.
+		// tags:
+		//		private
+		if(!this.disabled){
+			dojo.addClass(this.displayNode, "dijitInlineEditBoxDisplayModeHover");
+		}
+	},
+
+	_onMouseOut: function(){
+		// summary:
+		//		Handler for onmouseout and onblur event.
+		// tags:
+		//		private
+		dojo.removeClass(this.displayNode, "dijitInlineEditBoxDisplayModeHover");
+	},
+
+	_onClick: function(/*Event*/ e){
+		// summary:
+		//		Handler for onclick event.
+		// tags:
+		//		private
+		if(this.disabled){ return; }
+		if(e){ dojo.stopEvent(e); }
+		this._onMouseOut();
+
+		// Since FF gets upset if you move a node while in an event handler for that node...
+		setTimeout(dojo.hitch(this, "edit"), 0);
+	},
+
+	edit: function(){
+		// summary:
+		//		Display the editor widget in place of the original (read only) markup.
+		// tags:
+		//		private
+
+		if(this.disabled || this.editing){ return; }
+		this.editing = true;
+
+		// save some display node values that can be restored later
+		this._savedPosition = dojo.style(this.displayNode, "position") || "static";
+		this._savedOpacity = dojo.style(this.displayNode, "opacity") || "1";
+		this._savedTabIndex = dojo.attr(this.displayNode, "tabIndex") || "0";
+
+		if(this.wrapperWidget){
+			var ew = this.wrapperWidget.editWidget;
+			ew.set("displayedValue" in ew ? "displayedValue" : "value", this.value);
+		}else{
+			// Placeholder for edit widget
+			// Put place holder (and eventually editWidget) before the display node so that it's positioned correctly
+			// when Calendar dropdown appears, which happens automatically on focus.
+			var placeholder = dojo.create("span", null, this.domNode, "before");
+
+			// Create the editor wrapper (the thing that holds the editor widget and the save/cancel buttons)
+			var ewc = dojo.getObject(this.editorWrapper);
+			this.wrapperWidget = new ewc({
+				value: this.value,
+				buttonSave: this.buttonSave,
+				buttonCancel: this.buttonCancel,
+				dir: this.dir,
+				lang: this.lang,
+				tabIndex: this._savedTabIndex,
+				editor: this.editor,
+				inlineEditBox: this,
+				sourceStyle: dojo.getComputedStyle(this.displayNode),
+				save: dojo.hitch(this, "save"),
+				cancel: dojo.hitch(this, "cancel")
+			}, placeholder);
+		}
+		var ww = this.wrapperWidget;
+
+		if(dojo.isIE){
+			dijit.focus(dijit.getFocus()); // IE (at least 8) needs help with tab order changes
+		}
+		// to avoid screen jitter, we first create the editor with position:absolute, visibility:hidden,
+		// and then when it's finished rendering, we switch from display mode to editor
+		// position:absolute releases screen space allocated to the display node
+		// opacity:0 is the same as visibility:hidden but is still focusable
+		// visiblity:hidden removes focus outline
+
+		dojo.style(this.displayNode, { position: "absolute", opacity: "0", display: "none" }); // makes display node invisible, display style used for focus-ability
+		dojo.style(ww.domNode, { position: this._savedPosition, visibility: "visible", opacity: "1" });
+		dojo.attr(this.displayNode, "tabIndex", "-1"); // needed by WebKit for TAB from editor to skip displayNode
+
+		// Replace the display widget with edit widget, leaving them both displayed for a brief time so that
+		// focus can be shifted without incident.  (browser may needs some time to render the editor.)
+		setTimeout(dojo.hitch(this, function(){
+			ww.focus(); // both nodes are showing, so we can switch focus safely
+			ww._resetValue = ww.getValue();
+		}), 0);
+	},
+
+	_onBlur: function(){
+		// summary:
+		//		Called when focus moves outside the InlineEditBox.
+		//		Performs garbage collection.
+		// tags:
+		//		private
+
+		this.inherited(arguments);
+		if(!this.editing){
+			/* causes IE focus problems, see TooltipDialog_a11y.html...
+			setTimeout(dojo.hitch(this, function(){
+				if(this.wrapperWidget){
+					this.wrapperWidget.destroy();
+					delete this.wrapperWidget;
+				}
+			}), 0);
+			*/
+		}
+	},
+
+	destroy: function(){
+		if(this.wrapperWidget){
+			this.wrapperWidget.destroy();
+			delete this.wrapperWidget;
+		}
+		this.inherited(arguments);
+	},
+
+	_showText: function(/*Boolean*/ focus){
+		// summary:
+		//		Revert to display mode, and optionally focus on display node
+		// tags:
+		//		private
+
+		var ww = this.wrapperWidget;
+		dojo.style(ww.domNode, { position: "absolute", visibility: "hidden", opacity: "0" }); // hide the editor from mouse/keyboard events
+		dojo.style(this.displayNode, { position: this._savedPosition, opacity: this._savedOpacity, display: "" }); // make the original text visible
+		dojo.attr(this.displayNode, "tabIndex", this._savedTabIndex);
+		if(focus){
+			dijit.focus(this.displayNode);
+		}
+	},
+
+	save: function(/*Boolean*/ focus){
+		// summary:
+		//		Save the contents of the editor and revert to display mode.
+		// focus: Boolean
+		//		Focus on the display mode text
+		// tags:
+		//		private
+
+		if(this.disabled || !this.editing){ return; }
+		this.editing = false;
+
+		var ww = this.wrapperWidget;
+		var value = ww.getValue();
+		this.set('value', value); // display changed, formatted value
+
+		// tell the world that we have changed
+		setTimeout(dojo.hitch(this, "onChange", value), 0); // setTimeout prevents browser freeze for long-running event handlers
+
+		this._showText(focus); // set focus as needed
+	},
+
+	setValue: function(/*String*/ val){
+		// summary:
+		//		Deprecated.   Use set('value', ...) instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
+		return this.set("value", val);
+	},
+
+	_setValueAttr: function(/*String*/ val){
+		// summary:
+		// 		Hook to make set("value", ...) work.
+		//		Inserts specified HTML value into this node, or an "input needed" character if node is blank.
+
+		this.value = val = dojo.trim(val);
+		if(!this.renderAsHtml){
+			val = val.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;").replace(/\n/g, "<br>");
+		}
+		this.displayNode.innerHTML = val || this.noValueIndicator;
+	},
+
+	getValue: function(){
+		// summary:
+		//		Deprecated.   Use get('value') instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.", "", "2.0");
+		return this.get("value");
+	},
+
+	cancel: function(/*Boolean*/ focus){
+		// summary:
+		//		Revert to display mode, discarding any changes made in the editor
+		// tags:
+		//		private
+
+		if(this.disabled || !this.editing){ return; }
+		this.editing = false;
+
+		// tell the world that we have no changes
+		setTimeout(dojo.hitch(this, "onCancel"), 0); // setTimeout prevents browser freeze for long-running event handlers
+
+		this._showText(focus);
+	}
+});
+
+dojo.declare(
+	"dijit._InlineEditor",
+	 [dijit._Widget, dijit._Templated],
+{
+	// summary:
+	// 		Internal widget used by InlineEditBox, displayed when in editing mode
+	//		to display the editor and maybe save/cancel buttons.  Calling code should
+	//		connect to save/cancel methods to detect when editing is finished
+	//
+	//		Has mainly the same parameters as InlineEditBox, plus these values:
+	//
+	// style: Object
+	//		Set of CSS attributes of display node, to replicate in editor
+	//
+	// value: String
+	//		Value as an HTML string or plain text string, depending on renderAsHTML flag
+
+	templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),
+	widgetsInTemplate: true,
+
+	postMixInProperties: function(){
+		this.inherited(arguments);
+		this.messages = dojo.i18n.getLocalization("dijit", "common", this.lang);
+		dojo.forEach(["buttonSave", "buttonCancel"], function(prop){
+			if(!this[prop]){ this[prop] = this.messages[prop]; }
+		}, this);
+	},
+
+	postCreate: function(){
+		// Create edit widget in place in the template
+		var cls = dojo.getObject(this.editor);
+
+		// Copy the style from the source
+		// Don't copy ALL properties though, just the necessary/applicable ones.
+		// wrapperStyle/destStyle code is to workaround IE bug where getComputedStyle().fontSize
+		// is a relative value like 200%, rather than an absolute value like 24px, and
+		// the 200% can refer *either* to a setting on the node or it's ancestor (see #11175)
+		var srcStyle = this.sourceStyle,
+			editStyle = "line-height:" + srcStyle.lineHeight + ";",
+			destStyle = dojo.getComputedStyle(this.domNode);
+		dojo.forEach(["Weight","Family","Size","Style"], function(prop){
+			var textStyle = srcStyle["font"+prop],
+				wrapperStyle = destStyle["font"+prop];
+			if(wrapperStyle != textStyle){
+				editStyle += "font-"+prop+":"+srcStyle["font"+prop]+";";
+			}
+		}, this);
+		dojo.forEach(["marginTop","marginBottom","marginLeft", "marginRight"], function(prop){
+			this.domNode.style[prop] = srcStyle[prop];
+		}, this);
+		var width = this.inlineEditBox.width;
+		if(width == "100%"){
+			// block mode
+			editStyle += "width:100%;";
+			this.domNode.style.display = "block";
+		}else{
+			// inline-block mode
+			editStyle += "width:" + (width + (Number(width) == width ? "px" : "")) + ";";
+		}
+		var editorParams = dojo.delegate(this.inlineEditBox.editorParams, {
+			style: editStyle,
+			dir: this.dir,
+			lang: this.lang
+		});
+		editorParams[ "displayedValue" in cls.prototype ? "displayedValue" : "value"] = this.value;
+		var ew = (this.editWidget = new cls(editorParams, this.editorPlaceholder));
+
+		if(this.inlineEditBox.autoSave){
+			// Remove the save/cancel buttons since saving is done by simply tabbing away or
+			// selecting a value from the drop down list
+			dojo.destroy(this.buttonContainer);
+
+			// Selecting a value from a drop down list causes an onChange event and then we save
+			this.connect(ew, "onChange", "_onChange");
+
+			// ESC and TAB should cancel and save.  Note that edit widgets do a stopEvent() on ESC key (to
+			// prevent Dialog from closing when the user just wants to revert the value in the edit widget),
+			// so this is the only way we can see the key press event.
+			this.connect(ew, "onKeyPress", "_onKeyPress");
+		}else{
+			// If possible, enable/disable save button based on whether the user has changed the value
+			if("intermediateChanges" in cls.prototype){
+				ew.set("intermediateChanges", true);
+				this.connect(ew, "onChange", "_onIntermediateChange");
+				this.saveButton.set("disabled", true);
+			}
+		}
+	},
+
+	_onIntermediateChange: function(val){
+		// summary:
+		//		Called for editor widgets that support the intermediateChanges=true flag as a way
+		//		to detect when to enable/disabled the save button
+		this.saveButton.set("disabled", (this.getValue() == this._resetValue) || !this.enableSave());
+	},
+
+	destroy: function(){
+		this.editWidget.destroy(true); // let the parent wrapper widget clean up the DOM
+		this.inherited(arguments);
+	},
+
+	getValue: function(){
+		// summary:
+		//		Return the [display] value of the edit widget
+		var ew = this.editWidget;
+		return String(ew.get("displayedValue" in ew ? "displayedValue" : "value"));
+	},
+
+	_onKeyPress: function(e){
+		// summary:
+		//		Handler for keypress in the edit box in autoSave mode.
+		// description:
+		//		For autoSave widgets, if Esc/Enter, call cancel/save.
+		// tags:
+		//		private
+
+		if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
+			if(e.altKey || e.ctrlKey){ return; }
+			// If Enter/Esc pressed, treat as save/cancel.
+			if(e.charOrCode == dojo.keys.ESCAPE){
+				dojo.stopEvent(e);
+				this.cancel(true); // sets editing=false which short-circuits _onBlur processing
+			}else if(e.charOrCode == dojo.keys.ENTER && e.target.tagName == "INPUT"){
+				dojo.stopEvent(e);
+				this._onChange(); // fire _onBlur and then save
+			}
+
+			// _onBlur will handle TAB automatically by allowing
+			// the TAB to change focus before we mess with the DOM: #6227
+			// Expounding by request:
+			// 	The current focus is on the edit widget input field.
+			//	save() will hide and destroy this widget.
+			//	We want the focus to jump from the currently hidden
+			//	displayNode, but since it's hidden, it's impossible to
+			//	unhide it, focus it, and then have the browser focus
+			//	away from it to the next focusable element since each
+			//	of these events is asynchronous and the focus-to-next-element
+			//	is already queued.
+			//	So we allow the browser time to unqueue the move-focus event
+			//	before we do all the hide/show stuff.
+		}
+	},
+
+	_onBlur: function(){
+		// summary:
+		//		Called when focus moves outside the editor
+		// tags:
+		//		private
+
+		this.inherited(arguments);
+		if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){
+			if(this.getValue() == this._resetValue){
+				this.cancel(false);
+			}else if(this.enableSave()){
+				this.save(false);
+			}
+		}
+	},
+
+	_onChange: function(){
+		// summary:
+		//		Called when the underlying widget fires an onChange event,
+		//		such as when the user selects a value from the drop down list of a ComboBox,
+		//		which means that the user has finished entering the value and we should save.
+		// tags:
+		//		private
+
+		if(this.inlineEditBox.autoSave && this.inlineEditBox.editing && this.enableSave()){
+			dojo.style(this.inlineEditBox.displayNode, { display: "" });
+			dijit.focus(this.inlineEditBox.displayNode); // fires _onBlur which will save the formatted value
+		}
+	},
+
+	enableSave: function(){
+		// summary:
+		//		User overridable function returning a Boolean to indicate
+		// 		if the Save button should be enabled or not - usually due to invalid conditions
+		// tags:
+		//		extension
+		return (
+			this.editWidget.isValid
+			? this.editWidget.isValid()
+			: true
+		);
+	},
+
+	focus: function(){
+		// summary:
+		//		Focus the edit widget.
+		// tags:
+		//		protected
+
+		this.editWidget.focus();
+		setTimeout(dojo.hitch(this, function(){
+			if(this.editWidget.focusNode && this.editWidget.focusNode.tagName == "INPUT"){
+				dijit.selectInputText(this.editWidget.focusNode);
+			}
+		}), 0);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Form"] = true;
+dojo.provide("dijit.form.Form");
+
+
+
+
+
+dojo.declare(
+	"dijit.form.Form",
+	[dijit._Widget, dijit._Templated, dijit.form._FormMixin],
+	{
+		// summary:
+		//		Widget corresponding to HTML form tag, for validation and serialization
+		//
+		// example:
+		//	|	<form dojoType="dijit.form.Form" id="myForm">
+		//	|		Name: <input type="text" name="name" />
+		//	|	</form>
+		//	|	myObj = {name: "John Doe"};
+		//	|	dijit.byId('myForm').set('value', myObj);
+		//	|
+		//	|	myObj=dijit.byId('myForm').get('value');
+
+		// HTML <FORM> attributes
+
+		// name: String?
+		//		Name of form for scripting.
+		name: "",
+
+		// action: String?
+		//		Server-side form handler.
+		action: "",
+
+		// method: String?
+		//		HTTP method used to submit the form, either "GET" or "POST".
+		method: "",
+
+		// encType: String?
+		//		Encoding type for the form, ex: application/x-www-form-urlencoded.
+		encType: "",
+
+		// accept-charset: String?
+		//		List of supported charsets.
+		"accept-charset": "",
+
+		// accept: String?
+		//		List of MIME types for file upload.
+		accept: "",
+
+		// target: String?
+		//		Target frame for the document to be opened in.
+		target: "",
+
+		templateString: "<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",
+
+		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+			action: "",
+			method: "",
+			encType: "",
+			"accept-charset": "",
+			accept: "",
+			target: ""
+		}),
+
+		postMixInProperties: function(){
+			// Setup name=foo string to be referenced from the template (but only if a name has been specified)
+			// Unfortunately we can't use attributeMap to set the name due to IE limitations, see #8660
+			this.nameAttrSetting = this.name ? ("name='" + this.name + "'") : "";
+			this.inherited(arguments);
+		},
+
+		execute: function(/*Object*/ formContents){
+			// summary:
+			//		Deprecated: use submit()
+			// tags:
+			//		deprecated
+		},
+
+		onExecute: function(){
+			// summary:
+			//		Deprecated: use onSubmit()
+			// tags:
+			//		deprecated
+		},
+
+		_setEncTypeAttr: function(/*String*/ value){
+			this.encType = value;
+			dojo.attr(this.domNode, "encType", value);
+			if(dojo.isIE){ this.domNode.encoding = value; }
+		},
+
+		postCreate: function(){
+			// IE tries to hide encType
+			// TODO: this code should be in parser, not here.
+			if(dojo.isIE && this.srcNodeRef && this.srcNodeRef.attributes){
+				var item = this.srcNodeRef.attributes.getNamedItem('encType');
+				if(item && !item.specified && (typeof item.value == "string")){
+					this.set('encType', item.value);
+				}
+			}
+			this.inherited(arguments);
+		},
+
+		reset: function(/*Event?*/ e){
+			// summary:
+			//		restores all widget values back to their init values,
+			//		calls onReset() which can cancel the reset by returning false
+
+			// create fake event so we can know if preventDefault() is called
+			var faux = {
+				returnValue: true, // the IE way
+				preventDefault: function(){ // not IE
+							this.returnValue = false;
+						},
+				stopPropagation: function(){}, 
+				currentTarget: e ? e.target : this.domNode, 
+				target: e ? e.target : this.domNode
+			};
+			// if return value is not exactly false, and haven't called preventDefault(), then reset
+			if(!(this.onReset(faux) === false) && faux.returnValue){
+				this.inherited(arguments, []);
+			}
+		},
+
+		onReset: function(/*Event?*/ e){
+			// summary:
+			//		Callback when user resets the form. This method is intended
+			//		to be over-ridden. When the `reset` method is called
+			//		programmatically, the return value from `onReset` is used
+			//		to compute whether or not resetting should proceed
+			// tags:
+			//		callback
+			return true; // Boolean
+		},
+
+		_onReset: function(e){
+			this.reset(e);
+			dojo.stopEvent(e);
+			return false;
+		},
+
+		_onSubmit: function(e){
+			var fp = dijit.form.Form.prototype;
+			// TODO: remove this if statement beginning with 2.0
+			if(this.execute != fp.execute || this.onExecute != fp.onExecute){
+				dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.", "", "2.0");
+				this.onExecute();
+				this.execute(this.getValues());
+			}
+			if(this.onSubmit(e) === false){ // only exactly false stops submit
+				dojo.stopEvent(e);
+			}
+		},
+
+		onSubmit: function(/*Event?*/e){
+			// summary:
+			//		Callback when user submits the form.
+			// description:
+			//		This method is intended to be over-ridden, but by default it checks and
+			//		returns the validity of form elements. When the `submit`
+			//		method is called programmatically, the return value from
+			//		`onSubmit` is used to compute whether or not submission
+			//		should proceed
+			// tags:
+			//		extension
+
+			return this.isValid(); // Boolean
+		},
+
+		submit: function(){
+			// summary:
+			//		programmatically submit form if and only if the `onSubmit` returns true
+			if(!(this.onSubmit() === false)){
+				this.containerNode.submit();
+			}
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form.DropDownButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.DropDownButton"] = true;
+dojo.provide("dijit.form.DropDownButton");
+
+
+
+}
+
+if(!dojo._hasResource["dijit.form.ComboButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ComboButton"] = true;
+dojo.provide("dijit.form.ComboButton");
+
+
+}
+
+if(!dojo._hasResource["dijit.form.ToggleButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.ToggleButton"] = true;
+dojo.provide("dijit.form.ToggleButton");
+
+
+}
+
+if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.CheckBox"] = true;
+dojo.provide("dijit.form.CheckBox");
+
+
+
+dojo.declare(
+	"dijit.form.CheckBox",
+	dijit.form.ToggleButton,
+	{
+		// summary:
+		// 		Same as an HTML checkbox, but with fancy styling.
+		//
+		// description:
+		//		User interacts with real html inputs.
+		//		On onclick (which occurs by mouse click, space-bar, or
+		//		using the arrow keys to switch the selected radio button),
+		//		we update the state of the checkbox/radio.
+		//
+		//		There are two modes:
+		//			1. High contrast mode
+		//			2. Normal mode
+		//
+		//		In case 1, the regular html inputs are shown and used by the user.
+		//		In case 2, the regular html inputs are invisible but still used by
+		//		the user. They are turned quasi-invisible and overlay the background-image.
+
+		templateString: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),
+
+		baseClass: "dijitCheckBox",
+
+		// type: [private] String
+		//		type attribute on <input> node.
+		//		Overrides `dijit.form.Button.type`.   Users should not change this value.
+		type: "checkbox",
+
+		// value: String
+		//		As an initialization parameter, equivalent to value field on normal checkbox
+		//		(if checked, the value is passed as the value when form is submitted).
+		//
+		//		However, attr('value') will return either the string or false depending on
+		//		whether or not the checkbox is checked.
+		//
+		//		attr('value', string) will check the checkbox and change the value to the
+		//		specified string
+		//
+		//		attr('value', boolean) will change the checked state.
+		value: "on",
+
+		// readOnly: Boolean
+		//		Should this widget respond to user input?
+		//		In markup, this is specified as "readOnly".
+		//		Similar to disabled except readOnly form values are submitted.
+		readOnly: false,
+		
+		// the attributeMap should inherit from dijit.form._FormWidget.prototype.attributeMap 
+		// instead of ToggleButton as the icon mapping has no meaning for a CheckBox
+		attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+			readOnly: "focusNode"
+		}),
+
+		_setReadOnlyAttr: function(/*Boolean*/ value){
+			this.readOnly = value;
+			dojo.attr(this.focusNode, 'readOnly', value);
+			dijit.setWaiState(this.focusNode, "readonly", value);
+		},
+
+		_setValueAttr: function(/*String or Boolean*/ newValue, /*Boolean*/ priorityChange){
+			// summary:
+			//		Handler for value= attribute to constructor, and also calls to
+			//		attr('value', val).
+			// description:
+			//		During initialization, just saves as attribute to the <input type=checkbox>.
+			//
+			//		After initialization,
+			//		when passed a boolean, controls whether or not the CheckBox is checked.
+			//		If passed a string, changes the value attribute of the CheckBox (the one
+			//		specified as "value" when the CheckBox was constructed (ex: <input
+			//		dojoType="dijit.CheckBox" value="chicken">)
+			if(typeof newValue == "string"){
+				this.value = newValue;
+				dojo.attr(this.focusNode, 'value', newValue);
+				newValue = true;
+			}
+			if(this._created){
+				this.set('checked', newValue, priorityChange);
+			}
+		},
+		_getValueAttr: function(){
+			// summary:
+			//		Hook so attr('value') works.
+			// description:
+			//		If the CheckBox is checked, returns the value attribute.
+			//		Otherwise returns false.
+			return (this.checked ? this.value : false);
+		},
+
+		// Override dijit.form.Button._setLabelAttr() since we don't even have a containerNode.
+		// Normally users won't try to set label, except when CheckBox or RadioButton is the child of a dojox.layout.TabContainer
+		_setLabelAttr: undefined,
+
+		postMixInProperties: function(){
+			if(this.value == ""){
+				this.value = "on";
+			}
+
+			// Need to set initial checked state as part of template, so that form submit works.
+			// dojo.attr(node, "checked", bool) doesn't work on IEuntil node has been attached
+			// to <body>, see #8666
+			this.checkedAttrSetting = this.checked ? "checked" : "";
+
+			this.inherited(arguments);
+		},
+
+		 _fillContent: function(/*DomNode*/ source){
+			// Override Button::_fillContent() since it doesn't make sense for CheckBox,
+			// since CheckBox doesn't even have a container
+		},
+
+		reset: function(){
+			// Override ToggleButton.reset()
+
+			this._hasBeenBlurred = false;
+
+			this.set('checked', this.params.checked || false);
+
+			// Handle unlikely event that the <input type=checkbox> value attribute has changed
+			this.value = this.params.value || "on";
+			dojo.attr(this.focusNode, 'value', this.value);
+		},
+
+		_onFocus: function(){
+			if(this.id){
+				dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");
+			}
+			this.inherited(arguments);
+		},
+
+		_onBlur: function(){
+			if(this.id){
+				dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");
+			}
+			this.inherited(arguments);
+		},
+
+		_onClick: function(/*Event*/ e){
+			// summary:
+			//		Internal function to handle click actions - need to check
+			//		readOnly, since button no longer does that check.
+			if(this.readOnly){
+				return false;
+			}
+			return this.inherited(arguments);
+		}
+	}
+);
+
+dojo.declare(
+	"dijit.form.RadioButton",
+	dijit.form.CheckBox,
+	{
+		// summary:
+		// 		Same as an HTML radio, but with fancy styling.
+
+		type: "radio",
+		baseClass: "dijitRadio",
+
+		_setCheckedAttr: function(/*Boolean*/ value){
+			// If I am being checked then have to deselect currently checked radio button
+			this.inherited(arguments);
+			if(!this._created){ return; }
+			if(value){
+				var _this = this;
+				// search for radio buttons with the same name that need to be unchecked
+				dojo.query("INPUT[type=radio]", this.focusNode.form || dojo.doc).forEach( // can't use name= since dojo.query doesn't support [] in the name
+					function(inputNode){
+						if(inputNode.name == _this.name && inputNode != _this.focusNode && inputNode.form == _this.focusNode.form){
+							var widget = dijit.getEnclosingWidget(inputNode);
+							if(widget && widget.checked){
+								widget.set('checked', false);
+							}
+						}
+					}
+				);
+			}
+		},
+
+		_clicked: function(/*Event*/ e){
+			if(!this.checked){
+				this.set('checked', true);
+			}
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form.RadioButton"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.RadioButton"] = true;
+dojo.provide("dijit.form.RadioButton");
+
+
+// TODO: for 2.0, move the RadioButton code into this file
+
+}
+
+if(!dojo._hasResource["dojo.cldr.monetary"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cldr.monetary"] = true;
+dojo.provide("dojo.cldr.monetary");
+
+dojo.cldr.monetary.getData = function(/*String*/code){
+// summary: A mapping of currency code to currency-specific formatting information. Returns a unique object with properties: places, round.
+// code: an [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code
+
+// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/currencyData/fractions
+
+	var placesData = {
+		ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,
+		COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,
+		IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,
+		LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,
+		MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,
+		SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,
+		XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0
+	};
+
+	var roundingData = {CHF:5};
+
+	var places = placesData[code], round = roundingData[code];
+	if(typeof places == "undefined"){ places = 2; }
+	if(typeof round == "undefined"){ round = 0; }
+
+	return {places: places, round: round}; // Object
+};
+
+}
+
+if(!dojo._hasResource["dojo.currency"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.currency"] = true;
+dojo.provide("dojo.currency");
+
+
+
+
+
+
+/*=====
+dojo.currency = {
+	// summary: localized formatting and parsing routines for currencies
+	//
+	// description: extends dojo.number to provide culturally-appropriate formatting of values
+	//	in various world currencies, including use of a currency symbol.  The currencies are specified
+	//	by a three-letter international symbol in all uppercase, and support for the currencies is
+	//	provided by the data in `dojo.cldr`.  The scripts generating dojo.cldr specify which
+	//	currency support is included.  A fixed number of decimal places is determined based
+	//	on the currency type and is not determined by the 'pattern' argument.  The fractional
+	//	portion is optional, by default, and variable length decimals are not supported.
+}
+=====*/
+
+dojo.currency._mixInDefaults = function(options){
+	options = options || {};
+	options.type = "currency";
+
+	// Get locale-dependent currency data, like the symbol
+	var bundle = dojo.i18n.getLocalization("dojo.cldr", "currency", options.locale) || {};
+
+	// Mixin locale-independent currency data, like # of places
+	var iso = options.currency;
+	var data = dojo.cldr.monetary.getData(iso);
+
+	dojo.forEach(["displayName","symbol","group","decimal"], function(prop){
+		data[prop] = bundle[iso+"_"+prop];
+	});
+
+	data.fractional = [true, false];
+
+	// Mixin with provided options
+	return dojo.mixin(data, options);
+}
+
+/*=====
+dojo.declare("dojo.currency.__FormatOptions", [dojo.number.__FormatOptions], {
+	//	type: String?
+	//		Should not be set.  Value is assumed to be "currency".
+	//	symbol: String?
+	//		localized currency symbol. The default will be looked up in table of supported currencies in `dojo.cldr`
+	//		A [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code will be used if not found.
+	//	currency: String?
+	//		an [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD".
+	//		For use with dojo.currency only.
+	//	places: Number?
+	//		number of decimal places to show.  Default is defined based on which currency is used.
+	type: "",
+	symbol: "",
+	currency: "",
+	places: ""
+});
+=====*/
+
+dojo.currency.format = function(/*Number*/value, /*dojo.currency.__FormatOptions?*/options){
+// summary:
+//		Format a Number as a currency, using locale-specific settings
+//
+// description:
+//		Create a string from a Number using a known, localized pattern.
+//		[Formatting patterns](http://www.unicode.org/reports/tr35/#Number_Elements)
+//		appropriate to the locale are chosen from the [CLDR](http://unicode.org/cldr)
+//		as well as the appropriate symbols and delimiters and number of decimal places.
+//
+// value:
+//		the number to be formatted.
+
+	return dojo.number.format(value, dojo.currency._mixInDefaults(options));
+}
+
+dojo.currency.regexp = function(/*dojo.number.__RegexpOptions?*/options){
+//
+// summary:
+//		Builds the regular needed to parse a currency value
+//
+// description:
+//		Returns regular expression with positive and negative match, group and decimal separators
+//		Note: the options.places default, the number of decimal places to accept, is defined by the currency type.
+	return dojo.number.regexp(dojo.currency._mixInDefaults(options)); // String
+}
+
+/*=====
+dojo.declare("dojo.currency.__ParseOptions", [dojo.number.__ParseOptions], {
+	//	type: String?
+	//		Should not be set.  Value is assumed to be currency.
+	//	currency: String?
+	//		an [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD".
+	//		For use with dojo.currency only.
+	//	symbol: String?
+	//		localized currency symbol. The default will be looked up in table of supported currencies in `dojo.cldr`
+	//		A [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code will be used if not found.
+	//	places: Number?
+	//		fixed number of decimal places to accept.  The default is determined based on which currency is used.
+	//	fractional: Boolean?|Array?
+	//		Whether to include the fractional portion, where the number of decimal places are implied by the currency
+	//		or explicit 'places' parameter.  The value [true,false] makes the fractional portion optional.
+	//		By default for currencies, it the fractional portion is optional.
+	type: "",
+	currency: "",
+	symbol: "",
+	places: "",
+	fractional: ""
+});
+=====*/
+
+dojo.currency.parse = function(/*String*/expression, /*dojo.currency.__ParseOptions?*/options){
+	//
+	// summary:
+	//		Convert a properly formatted currency string to a primitive Number,
+	//		using locale-specific settings.
+	//
+	// description:
+	//		Create a Number from a string using a known, localized pattern.
+	//		[Formatting patterns](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	//		are chosen appropriate to the locale, as well as the appropriate symbols and delimiters
+	//		and number of decimal places.
+	//
+	// expression: A string representation of a currency value
+
+	return dojo.number.parse(expression, dojo.currency._mixInDefaults(options));
+}
+
+}
+
+if(!dojo._hasResource["dijit.form.NumberTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.NumberTextBox"] = true;
+dojo.provide("dijit.form.NumberTextBox");
+
+
+
+
+/*=====
+dojo.declare(
+	"dijit.form.NumberTextBox.__Constraints",
+	[dijit.form.RangeBoundTextBox.__Constraints, dojo.number.__FormatOptions, dojo.number.__ParseOptions], {
+	// summary:
+	//		Specifies both the rules on valid/invalid values (minimum, maximum,
+	//		number of required decimal places), and also formatting options for
+	//		displaying the value when the field is not focused.
+	// example:
+	//		Minimum/maximum:
+	//		To specify a field between 0 and 120:
+	//	|		{min:0,max:120}
+	//		To specify a field that must be an integer:
+	//	|		{fractional:false}
+	//		To specify a field where 0 to 3 decimal places are allowed on input,
+	//		but after the field is blurred the value is displayed with 3 decimal places:
+	//	|		{places:'0,3'}
+});
+=====*/
+
+dojo.declare("dijit.form.NumberTextBoxMixin",
+	null,
+	{
+		// summary:
+		//		A mixin for all number textboxes
+		// tags:
+		//		protected
+
+		// Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
+		// than a straight regexp to deal with locale (plus formatting options too?)
+		regExpGen: dojo.number.regexp,
+
+		/*=====
+		// constraints: dijit.form.NumberTextBox.__Constraints
+		//		Despite the name, this parameter specifies both constraints on the input
+		//		(including minimum/maximum allowed values) as well as
+		//		formatting options like places (the number of digits to display after
+		//		the decimal point).   See `dijit.form.NumberTextBox.__Constraints` for details.
+		constraints: {},
+		======*/
+
+		// value: Number
+		//		The value of this NumberTextBox as a Javascript Number (i.e., not a String).
+		//		If the displayed value is blank, the value is NaN, and if the user types in
+		//		an gibberish value (like "hello world"), the value is undefined
+		//		(i.e. attr('value') returns undefined).
+		//
+		//		Symmetrically, attr('value', NaN) will clear the displayed value,
+		//		whereas attr('value', undefined) will have no effect.
+		value: NaN,
+
+		// editOptions: [protected] Object
+		//		Properties to mix into constraints when the value is being edited.
+		//		This is here because we edit the number in the format "12345", which is
+		//		different than the display value (ex: "12,345")
+		editOptions: { pattern: '#.######' },
+
+		/*=====
+		_formatter: function(value, options){
+			// summary:
+			//		_formatter() is called by format().   It's the base routine for formatting a number,
+			//		as a string, for example converting 12345 into "12,345".
+			// value: Number
+			//		The number to be converted into a string.
+			// options: dojo.number.__FormatOptions?
+			//		Formatting options
+			// tags:
+			//		protected extension
+
+			return "12345";		// String
+		},
+		 =====*/
+		_formatter: dojo.number.format,
+
+		_setConstraintsAttr: function(/* Object */ constraints){
+			var places = typeof constraints.places == "number"? constraints.places : 0;
+			if(places){ places++; } // decimal rounding errors take away another digit of precision
+			if(typeof constraints.max != "number"){
+				constraints.max = 9 * Math.pow(10, 15-places);
+			}
+			if(typeof constraints.min != "number"){
+				constraints.min = -9 * Math.pow(10, 15-places);
+			}
+			this.inherited(arguments, [ constraints ]);
+			if(this.focusNode && this.focusNode.value && !isNaN(this.value)){
+				this.set('value', this.value);
+			}
+		},
+
+		_onFocus: function(){
+			if(this.disabled){ return; }
+			var val = this.get('value');
+			if(typeof val == "number" && !isNaN(val)){
+				var formattedValue = this.format(val, this.constraints);
+				if(formattedValue !== undefined){
+					this.textbox.value = formattedValue;
+				}
+			}
+			this.inherited(arguments);
+		},
+
+		format: function(/*Number*/ value, /*dojo.number.__FormatOptions*/ constraints){
+			// summary:
+			//		Formats the value as a Number, according to constraints.
+			// tags:
+			//		protected
+
+			var formattedValue = String(value);
+			if(typeof value != "number"){ return formattedValue; }
+			if(isNaN(value)){ return ""; }
+			// check for exponential notation that dojo.number.format chokes on
+			if(!("rangeCheck" in this && this.rangeCheck(value, constraints)) && constraints.exponent !== false && /\de[-+]?\d/i.test(formattedValue)){
+				return formattedValue;
+			}
+			if(this.editOptions && this._focused){
+				constraints = dojo.mixin({}, constraints, this.editOptions);
+			}
+			return this._formatter(value, constraints);
+		},
+
+		/*=====
+		parse: function(value, constraints){
+			// summary:
+			//		Parses the string value as a Number, according to constraints.
+			// value: String
+			//		String representing a number
+			// constraints: dojo.number.__ParseOptions
+			//		Formatting options
+			// tags:
+			//		protected
+
+			return 123.45;		// Number
+		},
+		=====*/
+		parse: dojo.number.parse,
+
+		_getDisplayedValueAttr: function(){
+			var v = this.inherited(arguments);
+			return isNaN(v) ? this.textbox.value : v;
+		},
+
+		filter: function(/*Number*/ value){
+			// summary:
+			//		This is called with both the display value (string), and the actual value (a number).
+			//		When called with the actual value it does corrections so that '' etc. are represented as NaN.
+			//		Otherwise it dispatches to the superclass's filter() method.
+			//
+			//		See `dijit.form.TextBox.filter` for more details.
+			return (value === null || value === '' || value === undefined) ? NaN : this.inherited(arguments); // attr('value', null||''||undefined) should fire onChange(NaN)
+		},
+
+		serialize: function(/*Number*/ value, /*Object?*/options){
+			// summary:
+			//		Convert value (a Number) into a canonical string (ie, how the number literal is written in javascript/java/C/etc.)
+			// tags:
+			//		protected
+			return (typeof value != "number" || isNaN(value)) ? '' : this.inherited(arguments);
+		},
+
+		_setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange, /*String?*/formattedValue){
+			// summary:
+			//		Hook so attr('value', ...) works.
+			if(value !== undefined && formattedValue === undefined){
+				formattedValue = String(value);
+				if(typeof value == "number"){
+					if(isNaN(value)){ formattedValue = '' }
+					// check for exponential notation that dojo.number.format chokes on
+					else if(("rangeCheck" in this && this.rangeCheck(value, this.constraints)) || this.constraints.exponent === false || !/\de[-+]?\d/i.test(formattedValue)){
+						formattedValue = undefined; // lets format comnpute a real string value
+					}
+				}else if(!value){ // 0 processed in if branch above, ''|null|undefined flow thru here
+					formattedValue = '';
+					value = NaN;
+				}else{ // non-numeric values
+					value = undefined;
+				}
+			}
+			this.inherited(arguments, [value, priorityChange, formattedValue]);
+		},
+
+		_getValueAttr: function(){
+			// summary:
+			//		Hook so attr('value') works.
+			//		Returns Number, NaN for '', or undefined for unparsable text
+			var v = this.inherited(arguments); // returns Number for all values accepted by parse() or NaN for all other displayed values
+
+			// If the displayed value of the textbox is gibberish (ex: "hello world"), this.inherited() above
+			// returns NaN; this if() branch converts the return value to undefined.
+			// Returning undefined prevents user text from being overwritten when doing _setValueAttr(_getValueAttr()).
+			// A blank displayed value is still returned as NaN.
+			if(isNaN(v) && this.textbox.value !== ''){
+				if(this.constraints.exponent !== false && /\de[-+]?\d/i.test(this.textbox.value) && (new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({}, this.constraints))+"$").test(this.textbox.value))){	// check for exponential notation that parse() rejected (erroneously?)
+					var n = Number(this.textbox.value);
+					return isNaN(n) ? undefined : n; // return exponential Number or undefined for random text (may not be possible to do with the above RegExp check)
+				}else{
+					return undefined; // gibberish
+				}
+			}else{
+				return v; // Number or NaN for ''
+			}
+		},
+
+		isValid: function(/*Boolean*/ isFocused){
+			// Overrides dijit.form.RangeBoundTextBox.isValid to check that the editing-mode value is valid since
+			// it may not be formatted according to the regExp vaidation rules
+			if(!this._focused || this._isEmpty(this.textbox.value)){
+				return this.inherited(arguments);
+			}else{
+				var v = this.get('value');
+				if(!isNaN(v) && this.rangeCheck(v, this.constraints)){
+					if(this.constraints.exponent !== false && /\de[-+]?\d/i.test(this.textbox.value)){ // exponential, parse doesn't like it
+						return true; // valid exponential number in range
+					}else{
+						return this.inherited(arguments);
+					}
+				}else{
+					return false;
+				}
+			}
+		}
+	}
+);
+
+dojo.declare("dijit.form.NumberTextBox",
+	[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],
+	{
+		// summary:
+		//		A TextBox for entering numbers, with formatting and range checking
+		// description:
+		//		NumberTextBox is a textbox for entering and displaying numbers, supporting
+		//		the following main features:
+		//
+		//			1. Enforce minimum/maximum allowed values (as well as enforcing that the user types
+		//				a number rather than a random string)
+		//			2. NLS support (altering roles of comma and dot as "thousands-separator" and "decimal-point"
+		//				depending on locale).
+		//			3. Separate modes for editing the value and displaying it, specifically that
+		//				the thousands separator character (typically comma) disappears when editing
+		//				but reappears after the field is blurred.
+		//			4. Formatting and constraints regarding the number of places (digits after the decimal point)
+		//				allowed on input, and number of places displayed when blurred (see `constraints` parameter).
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.CurrencyTextBox"] = true;
+dojo.provide("dijit.form.CurrencyTextBox");
+
+
+
+
+/*=====
+dojo.declare(
+	"dijit.form.CurrencyTextBox.__Constraints",
+	[dijit.form.NumberTextBox.__Constraints, dojo.currency.__FormatOptions, dojo.currency.__ParseOptions], {
+	// summary:
+	//		Specifies both the rules on valid/invalid values (minimum, maximum,
+	//		number of required decimal places), and also formatting options for
+	//		displaying the value when the field is not focused (currency symbol,
+	//		etc.)
+	// description:
+	//		Follows the pattern of `dijit.form.NumberTextBox.constraints`.
+	//		In general developers won't need to set this parameter
+	// example:
+	//		To ensure that the user types in the cents (for example, 1.00 instead of just 1):
+	//	|		{fractional:true}
+});
+=====*/
+
+dojo.declare(
+	"dijit.form.CurrencyTextBox",
+	dijit.form.NumberTextBox,
+	{
+		// summary:
+		//		A validating currency textbox
+		// description:
+		//		CurrencyTextBox is similar to `dijit.form.NumberTextBox` but has a few
+		//		extra features related to currency:
+		//
+		//		1. After specifying the currency type (american dollars, euros, etc.) it automatically
+		//			sets parse/format options such as how many decimal places to show.
+		//		2. The currency mark (dollar sign, euro mark, etc.) is displayed when the field is blurred
+		//			but erased during editing, so that the user can just enter a plain number.
+
+		// currency: [const] String
+		//		the [ISO4217](http://en.wikipedia.org/wiki/ISO_4217) currency code, a three letter sequence like "USD"
+		currency: "",
+
+		// constraints: dijit.form.CurrencyTextBox.__Constraints
+		//		Despite the name, this parameter specifies both constraints on the input
+		//		(including minimum/maximum allowed values) as well as
+		//		formatting options.   See `dijit.form.CurrencyTextBox.__Constraints` for details.
+		/*=====
+		constraints: {},
+		======*/
+		
+		baseClass: "dijitTextBox dijitCurrencyTextBox",
+
+		// Override regExpGen ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
+		// than a straight regexp to deal with locale  (plus formatting options too?)
+		regExpGen: function(constraints){
+			// if focused, accept either currency data or NumberTextBox format
+			return '(' + (this._focused? this.inherited(arguments, [ dojo.mixin({}, constraints, this.editOptions) ]) + '|' : '')
+				+ dojo.currency.regexp(constraints) + ')';
+		},
+
+		// Override NumberTextBox._formatter to deal with currencies, ex: converts "123.45" to "$123.45"
+		_formatter: dojo.currency.format,
+
+		parse: function(/* String */ value, /* Object */ constraints){
+			// summary:
+			// 		Parses string value as a Currency, according to the constraints object
+			// tags:
+			// 		protected extension
+			var v = dojo.currency.parse(value, constraints);
+			if(isNaN(v) && /\d+/.test(value)){ // currency parse failed, but it could be because they are using NumberTextBox format so try its parse
+				return this.inherited(arguments, [ value, dojo.mixin({}, constraints, this.editOptions) ]);
+			}
+			return v;
+		},
+
+		_setConstraintsAttr: function(/* Object */ constraints){
+			if(!constraints.currency && this.currency){
+				constraints.currency = this.currency;
+			}
+			this.inherited(arguments, [ dojo.currency._mixInDefaults(dojo.mixin(constraints, { exponent: false })) ]); // get places
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dojo.cldr.supplemental"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cldr.supplemental"] = true;
+dojo.provide("dojo.cldr.supplemental");
+
+
+
+dojo.cldr.supplemental.getFirstDayOfWeek = function(/*String?*/locale){
+// summary: Returns a zero-based index for first day of the week
+// description:
+//		Returns a zero-based index for first day of the week, as used by the local (Gregorian) calendar.
+//		e.g. Sunday (returns 0), or Monday (returns 1)
+
+	// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/firstDay
+	var firstDay = {/*default is 1=Monday*/
+		mv:5,
+		af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,
+		ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,
+		ar:0,as:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,
+		il:0,'in':0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mn:0,mo:0,mp:0,
+		mt:0,nz:0,ph:0,pk:0,sg:0,sy:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,
+		vi:0,zw:0
+// variant. do not use?		gb:0,
+	};
+
+	var country = dojo.cldr.supplemental._region(locale);
+	var dow = firstDay[country];
+	return (dow === undefined) ? 1 : dow; /*Number*/
+};
+
+dojo.cldr.supplemental._region = function(/*String?*/locale){
+	locale = dojo.i18n.normalizeLocale(locale);
+	var tags = locale.split('-');
+	var region = tags[1];
+	if(!region){
+		// IE often gives language only (#2269)
+		// Arbitrary mappings of language-only locales to a country:
+		region = {de:"de", en:"us", es:"es", fi:"fi", fr:"fr", he:"il", hu:"hu", it:"it",
+			ja:"jp", ko:"kr", nl:"nl", pt:"br", sv:"se", zh:"cn"}[tags[0]];
+	}else if(region.length == 4){
+		// The ISO 3166 country code is usually in the second position, unless a
+		// 4-letter script is given. See http://www.ietf.org/rfc/rfc4646.txt
+		region = tags[2];
+	}
+	return region;
+}
+
+dojo.cldr.supplemental.getWeekend = function(/*String?*/locale){
+// summary: Returns a hash containing the start and end days of the weekend
+// description:
+//		Returns a hash containing the start and end days of the weekend according to local custom using locale,
+//		or by default in the user's locale.
+//		e.g. {start:6, end:0}
+
+	// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/weekend{Start,End}
+	var weekendStart = {/*default is 6=Saturday*/
+		'in':0,
+		af:4,dz:4,ir:4,om:4,sa:4,ye:4,
+		ae:5,bh:5,eg:5,il:5,iq:5,jo:5,kw:5,ly:5,ma:5,qa:5,sd:5,sy:5,tn:5
+	};
+
+	var weekendEnd = {/*default is 0=Sunday*/
+		af:5,dz:5,ir:5,om:5,sa:5,ye:5,
+		ae:6,bh:5,eg:6,il:6,iq:6,jo:6,kw:6,ly:6,ma:6,qa:6,sd:6,sy:6,tn:6
+	};
+
+	var country = dojo.cldr.supplemental._region(locale);
+	var start = weekendStart[country];
+	var end = weekendEnd[country];
+	if(start === undefined){start=6;}
+	if(end === undefined){end=0;}
+	return {start:start, end:end}; /*Object {start,end}*/
+};
+
+}
+
+if(!dojo._hasResource["dojo.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date"] = true;
+dojo.provide("dojo.date");
+
+/*=====
+dojo.date = {
+	// summary: Date manipulation utilities
+}
+=====*/
+
+dojo.date.getDaysInMonth = function(/*Date*/dateObject){
+	//	summary:
+	//		Returns the number of days in the month used by dateObject
+	var month = dateObject.getMonth();
+	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+	if(month == 1 && dojo.date.isLeapYear(dateObject)){ return 29; } // Number
+	return days[month]; // Number
+}
+
+dojo.date.isLeapYear = function(/*Date*/dateObject){
+	//	summary:
+	//		Determines if the year of the dateObject is a leap year
+	//	description:
+	//		Leap years are years with an additional day YYYY-02-29, where the
+	//		year number is a multiple of four with the following exception: If
+	//		a year is a multiple of 100, then it is only a leap year if it is
+	//		also a multiple of 400. For example, 1900 was not a leap year, but
+	//		2000 is one.
+
+	var year = dateObject.getFullYear();
+	return !(year%400) || (!(year%4) && !!(year%100)); // Boolean
+}
+
+// FIXME: This is not localized
+dojo.date.getTimezoneName = function(/*Date*/dateObject){
+	//	summary:
+	//		Get the user's time zone as provided by the browser
+	// dateObject:
+	//		Needed because the timezone may vary with time (daylight savings)
+	//	description:
+	//		Try to get time zone info from toString or toLocaleString method of
+	//		the Date object -- UTC offset is not a time zone.  See
+	//		http://www.twinsun.com/tz/tz-link.htm Note: results may be
+	//		inconsistent across browsers.
+
+	var str = dateObject.toString(); // Start looking in toString
+	var tz = ''; // The result -- return empty string if nothing found
+	var match;
+
+	// First look for something in parentheses -- fast lookup, no regex
+	var pos = str.indexOf('(');
+	if(pos > -1){
+		tz = str.substring(++pos, str.indexOf(')'));
+	}else{
+		// If at first you don't succeed ...
+		// If IE knows about the TZ, it appears before the year
+		// Capital letters or slash before a 4-digit year 
+		// at the end of string
+		var pat = /([A-Z\/]+) \d{4}$/;
+		if((match = str.match(pat))){
+			tz = match[1];
+		}else{
+		// Some browsers (e.g. Safari) glue the TZ on the end
+		// of toLocaleString instead of putting it in toString
+			str = dateObject.toLocaleString();
+			// Capital letters or slash -- end of string, 
+			// after space
+			pat = / ([A-Z\/]+)$/;
+			if((match = str.match(pat))){
+				tz = match[1];
+			}
+		}
+	}
+
+	// Make sure it doesn't somehow end up return AM or PM
+	return (tz == 'AM' || tz == 'PM') ? '' : tz; // String
+}
+
+// Utility methods to do arithmetic calculations with Dates
+
+dojo.date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){
+	//	summary:
+	//		Compare two date objects by date, time, or both.
+	//	description:
+	//  	Returns 0 if equal, positive if a > b, else negative.
+	//	date1:
+	//		Date object
+	//	date2:
+	//		Date object.  If not specified, the current Date is used.
+	//	portion:
+	//		A string indicating the "date" or "time" portion of a Date object.
+	//		Compares both "date" and "time" by default.  One of the following:
+	//		"date", "time", "datetime"
+
+	// Extra step required in copy for IE - see #3112
+	date1 = new Date(+date1);
+	date2 = new Date(+(date2 || new Date()));
+
+	if(portion == "date"){
+		// Ignore times and compare dates.
+		date1.setHours(0, 0, 0, 0);
+		date2.setHours(0, 0, 0, 0);
+	}else if(portion == "time"){
+		// Ignore dates and compare times.
+		date1.setFullYear(0, 0, 0);
+		date2.setFullYear(0, 0, 0);
+	}
+	
+	if(date1 > date2){ return 1; } // int
+	if(date1 < date2){ return -1; } // int
+	return 0; // int
+};
+
+dojo.date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){
+	//	summary:
+	//		Add to a Date in intervals of different size, from milliseconds to years
+	//	date: Date
+	//		Date object to start with
+	//	interval:
+	//		A string representing the interval.  One of the following:
+	//			"year", "month", "day", "hour", "minute", "second",
+	//			"millisecond", "quarter", "week", "weekday"
+	//	amount:
+	//		How much to add to the date.
+
+	var sum = new Date(+date); // convert to Number before copying to accomodate IE (#3112)
+	var fixOvershoot = false;
+	var property = "Date";
+
+	switch(interval){
+		case "day":
+			break;
+		case "weekday":
+			//i18n FIXME: assumes Saturday/Sunday weekend, but this is not always true.  see dojo.cldr.supplemental
+
+			// Divide the increment time span into weekspans plus leftover days
+			// e.g., 8 days is one 5-day weekspan / and two leftover days
+			// Can't have zero leftover days, so numbers divisible by 5 get
+			// a days value of 5, and the remaining days make up the number of weeks
+			var days, weeks;
+			var mod = amount % 5;
+			if(!mod){
+				days = (amount > 0) ? 5 : -5;
+				weeks = (amount > 0) ? ((amount-5)/5) : ((amount+5)/5);
+			}else{
+				days = mod;
+				weeks = parseInt(amount/5);
+			}
+			// Get weekday value for orig date param
+			var strt = date.getDay();
+			// Orig date is Sat / positive incrementer
+			// Jump over Sun
+			var adj = 0;
+			if(strt == 6 && amount > 0){
+				adj = 1;
+			}else if(strt == 0 && amount < 0){
+			// Orig date is Sun / negative incrementer
+			// Jump back over Sat
+				adj = -1;
+			}
+			// Get weekday val for the new date
+			var trgt = strt + days;
+			// New date is on Sat or Sun
+			if(trgt == 0 || trgt == 6){
+				adj = (amount > 0) ? 2 : -2;
+			}
+			// Increment by number of weeks plus leftover days plus
+			// weekend adjustments
+			amount = (7 * weeks) + days + adj;
+			break;
+		case "year":
+			property = "FullYear";
+			// Keep increment/decrement from 2/29 out of March
+			fixOvershoot = true;
+			break;
+		case "week":
+			amount *= 7;
+			break;
+		case "quarter":
+			// Naive quarter is just three months
+			amount *= 3;
+			// fallthrough...
+		case "month":
+			// Reset to last day of month if you overshoot
+			fixOvershoot = true;
+			property = "Month";
+			break;
+//		case "hour":
+//		case "minute":
+//		case "second":
+//		case "millisecond":
+		default:
+			property = "UTC"+interval.charAt(0).toUpperCase() + interval.substring(1) + "s";
+	}
+
+	if(property){
+		sum["set"+property](sum["get"+property]()+amount);
+	}
+
+	if(fixOvershoot && (sum.getDate() < date.getDate())){
+		sum.setDate(0);
+	}
+
+	return sum; // Date
+};
+
+dojo.date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){
+	//	summary:
+	//		Get the difference in a specific unit of time (e.g., number of
+	//		months, weeks, days, etc.) between two dates, rounded to the
+	//		nearest integer.
+	//	date1:
+	//		Date object
+	//	date2:
+	//		Date object.  If not specified, the current Date is used.
+	//	interval:
+	//		A string representing the interval.  One of the following:
+	//			"year", "month", "day", "hour", "minute", "second",
+	//			"millisecond", "quarter", "week", "weekday"
+	//		Defaults to "day".
+
+	date2 = date2 || new Date();
+	interval = interval || "day";
+	var yearDiff = date2.getFullYear() - date1.getFullYear();
+	var delta = 1; // Integer return value
+
+	switch(interval){
+		case "quarter":
+			var m1 = date1.getMonth();
+			var m2 = date2.getMonth();
+			// Figure out which quarter the months are in
+			var q1 = Math.floor(m1/3) + 1;
+			var q2 = Math.floor(m2/3) + 1;
+			// Add quarters for any year difference between the dates
+			q2 += (yearDiff * 4);
+			delta = q2 - q1;
+			break;
+		case "weekday":
+			var days = Math.round(dojo.date.difference(date1, date2, "day"));
+			var weeks = parseInt(dojo.date.difference(date1, date2, "week"));
+			var mod = days % 7;
+
+			// Even number of weeks
+			if(mod == 0){
+				days = weeks*5;
+			}else{
+				// Weeks plus spare change (< 7 days)
+				var adj = 0;
+				var aDay = date1.getDay();
+				var bDay = date2.getDay();
+
+				weeks = parseInt(days/7);
+				mod = days % 7;
+				// Mark the date advanced by the number of
+				// round weeks (may be zero)
+				var dtMark = new Date(date1);
+				dtMark.setDate(dtMark.getDate()+(weeks*7));
+				var dayMark = dtMark.getDay();
+
+				// Spare change days -- 6 or less
+				if(days > 0){
+					switch(true){
+						// Range starts on Sat
+						case aDay == 6:
+							adj = -1;
+							break;
+						// Range starts on Sun
+						case aDay == 0:
+							adj = 0;
+							break;
+						// Range ends on Sat
+						case bDay == 6:
+							adj = -1;
+							break;
+						// Range ends on Sun
+						case bDay == 0:
+							adj = -2;
+							break;
+						// Range contains weekend
+						case (dayMark + mod) > 5:
+							adj = -2;
+					}
+				}else if(days < 0){
+					switch(true){
+						// Range starts on Sat
+						case aDay == 6:
+							adj = 0;
+							break;
+						// Range starts on Sun
+						case aDay == 0:
+							adj = 1;
+							break;
+						// Range ends on Sat
+						case bDay == 6:
+							adj = 2;
+							break;
+						// Range ends on Sun
+						case bDay == 0:
+							adj = 1;
+							break;
+						// Range contains weekend
+						case (dayMark + mod) < 0:
+							adj = 2;
+					}
+				}
+				days += adj;
+				days -= (weeks*2);
+			}
+			delta = days;
+			break;
+		case "year":
+			delta = yearDiff;
+			break;
+		case "month":
+			delta = (date2.getMonth() - date1.getMonth()) + (yearDiff * 12);
+			break;
+		case "week":
+			// Truncate instead of rounding
+			// Don't use Math.floor -- value may be negative
+			delta = parseInt(dojo.date.difference(date1, date2, "day")/7);
+			break;
+		case "day":
+			delta /= 24;
+			// fallthrough
+		case "hour":
+			delta /= 60;
+			// fallthrough
+		case "minute":
+			delta /= 60;
+			// fallthrough
+		case "second":
+			delta /= 1000;
+			// fallthrough
+		case "millisecond":
+			delta *= date2.getTime() - date1.getTime();
+	}
+
+	// Round for fractional values and DST leaps
+	return Math.round(delta); // Number (integer)
+};
+
+}
+
+if(!dojo._hasResource["dojo.date.locale"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date.locale"] = true;
+dojo.provide("dojo.date.locale");
+
+// Localization methods for Date.   Honor local customs using locale-dependent dojo.cldr data.
+
+
+
+
+
+
+
+// Load the bundles containing localization information for
+// names and formats
+
+
+//NOTE: Everything in this module assumes Gregorian calendars.
+// Other calendars will be implemented in separate modules.
+
+(function(){
+	// Format a pattern without literals
+	function formatPattern(dateObject, bundle, options, pattern){
+		return pattern.replace(/([a-z])\1*/ig, function(match){
+			var s, pad,
+				c = match.charAt(0),
+				l = match.length,
+				widthList = ["abbr", "wide", "narrow"];
+			switch(c){
+				case 'G':
+					s = bundle[(l < 4) ? "eraAbbr" : "eraNames"][dateObject.getFullYear() < 0 ? 0 : 1];
+					break;
+				case 'y':
+					s = dateObject.getFullYear();
+					switch(l){
+						case 1:
+							break;
+						case 2:
+							if(!options.fullYear){
+								s = String(s); s = s.substr(s.length - 2);
+								break;
+							}
+							// fallthrough
+						default:
+							pad = true;
+					}
+					break;
+				case 'Q':
+				case 'q':
+					s = Math.ceil((dateObject.getMonth()+1)/3);
+//					switch(l){
+//						case 1: case 2:
+							pad = true;
+//							break;
+//						case 3: case 4: // unimplemented
+//					}
+					break;
+				case 'M':
+					var m = dateObject.getMonth();
+					if(l<3){
+						s = m+1; pad = true;
+					}else{
+						var propM = ["months", "format", widthList[l-3]].join("-");
+						s = bundle[propM][m];
+					}
+					break;
+				case 'w':
+					var firstDay = 0;
+					s = dojo.date.locale._getWeekOfYear(dateObject, firstDay); pad = true;
+					break;
+				case 'd':
+					s = dateObject.getDate(); pad = true;
+					break;
+				case 'D':
+					s = dojo.date.locale._getDayOfYear(dateObject); pad = true;
+					break;
+				case 'E':
+					var d = dateObject.getDay();
+					if(l<3){
+						s = d+1; pad = true;
+					}else{
+						var propD = ["days", "format", widthList[l-3]].join("-");
+						s = bundle[propD][d];
+					}
+					break;
+				case 'a':
+					var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
+					s = bundle['dayPeriods-format-wide-' + timePeriod];
+					break;
+				case 'h':
+				case 'H':
+				case 'K':
+				case 'k':
+					var h = dateObject.getHours();
+					// strange choices in the date format make it impossible to write this succinctly
+					switch (c){
+						case 'h': // 1-12
+							s = (h % 12) || 12;
+							break;
+						case 'H': // 0-23
+							s = h;
+							break;
+						case 'K': // 0-11
+							s = (h % 12);
+							break;
+						case 'k': // 1-24
+							s = h || 24;
+							break;
+					}
+					pad = true;
+					break;
+				case 'm':
+					s = dateObject.getMinutes(); pad = true;
+					break;
+				case 's':
+					s = dateObject.getSeconds(); pad = true;
+					break;
+				case 'S':
+					s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3)); pad = true;
+					break;
+				case 'v': // FIXME: don't know what this is. seems to be same as z?
+				case 'z':
+					// We only have one timezone to offer; the one from the browser
+					s = dojo.date.locale._getZone(dateObject, true, options);
+					if(s){break;}
+					l=4;
+					// fallthrough... use GMT if tz not available
+				case 'Z':
+					var offset = dojo.date.locale._getZone(dateObject, false, options);
+					var tz = [
+						(offset<=0 ? "+" : "-"),
+						dojo.string.pad(Math.floor(Math.abs(offset)/60), 2),
+						dojo.string.pad(Math.abs(offset)% 60, 2)
+					];
+					if(l==4){
+						tz.splice(0, 0, "GMT");
+						tz.splice(3, 0, ":");
+					}
+					s = tz.join("");
+					break;
+//				case 'Y': case 'u': case 'W': case 'F': case 'g': case 'A': case 'e':
+//					console.log(match+" modifier unimplemented");
+				default:
+					throw new Error("dojo.date.locale.format: invalid pattern char: "+pattern);
+			}
+			if(pad){ s = dojo.string.pad(s, l); }
+			return s;
+		});
+	}
+
+/*=====
+	dojo.date.locale.__FormatOptions = function(){
+	//	selector: String
+	//		choice of 'time','date' (default: date and time)
+	//	formatLength: String
+	//		choice of long, short, medium or full (plus any custom additions).  Defaults to 'short'
+	//	datePattern:String
+	//		override pattern with this string
+	//	timePattern:String
+	//		override pattern with this string
+	//	am: String
+	//		override strings for am in times
+	//	pm: String
+	//		override strings for pm in times
+	//	locale: String
+	//		override the locale used to determine formatting rules
+	//	fullYear: Boolean
+	//		(format only) use 4 digit years whenever 2 digit years are called for
+	//	strict: Boolean
+	//		(parse only) strict parsing, off by default
+		this.selector = selector;
+		this.formatLength = formatLength;
+		this.datePattern = datePattern;
+		this.timePattern = timePattern;
+		this.am = am;
+		this.pm = pm;
+		this.locale = locale;
+		this.fullYear = fullYear;
+		this.strict = strict;
+	}
+=====*/
+
+dojo.date.locale._getZone = function(/*Date*/dateObject, /*boolean*/getName, /*dojo.date.locale.__FormatOptions?*/options){
+	// summary:
+	//		Returns the zone (or offset) for the given date and options.  This
+	//		is broken out into a separate function so that it can be overridden
+	//		by timezone-aware code.
+	//
+	// dateObject:
+	//		the date and/or time being formatted.
+	//
+	// getName:
+	//		Whether to return the timezone string (if true), or the offset (if false)
+	//
+	// options:
+	//		The options being used for formatting
+	if(getName){
+		return dojo.date.getTimezoneName(dateObject);
+	}else{
+		return dateObject.getTimezoneOffset();
+	}
+};
+
+
+dojo.date.locale.format = function(/*Date*/dateObject, /*dojo.date.locale.__FormatOptions?*/options){
+	// summary:
+	//		Format a Date object as a String, using locale-specific settings.
+	//
+	// description:
+	//		Create a string from a Date object using a known localized pattern.
+	//		By default, this method formats both date and time from dateObject.
+	//		Formatting patterns are chosen appropriate to the locale.  Different
+	//		formatting lengths may be chosen, with "full" used by default.
+	//		Custom patterns may be used or registered with translations using
+	//		the dojo.date.locale.addCustomFormats method.
+	//		Formatting patterns are implemented using [the syntax described at
+	//		unicode.org](http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns)
+	//
+	// dateObject:
+	//		the date and/or time to be formatted.  If a time only is formatted,
+	//		the values in the year, month, and day fields are irrelevant.  The
+	//		opposite is true when formatting only dates.
+
+	options = options || {};
+
+	var locale = dojo.i18n.normalizeLocale(options.locale),
+		formatLength = options.formatLength || 'short',
+		bundle = dojo.date.locale._getGregorianBundle(locale),
+		str = [],
+		sauce = dojo.hitch(this, formatPattern, dateObject, bundle, options);
+	if(options.selector == "year"){
+		return _processPattern(bundle["dateFormatItem-yyyy"] || "yyyy", sauce);
+	}
+	var pattern;
+	if(options.selector != "date"){
+		pattern = options.timePattern || bundle["timeFormat-"+formatLength];
+		if(pattern){str.push(_processPattern(pattern, sauce));}
+	}
+	if(options.selector != "time"){
+		pattern = options.datePattern || bundle["dateFormat-"+formatLength];
+		if(pattern){str.push(_processPattern(pattern, sauce));}
+	}
+
+	return str.length == 1 ? str[0] : bundle["dateTimeFormat-"+formatLength].replace(/\{(\d+)\}/g,
+		function(match, key){ return str[key]; }); // String
+};
+
+dojo.date.locale.regexp = function(/*dojo.date.locale.__FormatOptions?*/options){
+	// summary:
+	//		Builds the regular needed to parse a localized date
+
+	return dojo.date.locale._parseInfo(options).regexp; // String
+};
+
+dojo.date.locale._parseInfo = function(/*dojo.date.locale.__FormatOptions?*/options){
+	options = options || {};
+	var locale = dojo.i18n.normalizeLocale(options.locale),
+		bundle = dojo.date.locale._getGregorianBundle(locale),
+		formatLength = options.formatLength || 'short',
+		datePattern = options.datePattern || bundle["dateFormat-" + formatLength],
+		timePattern = options.timePattern || bundle["timeFormat-" + formatLength],
+		pattern;
+	if(options.selector == 'date'){
+		pattern = datePattern;
+	}else if(options.selector == 'time'){
+		pattern = timePattern;
+	}else{
+		pattern = bundle["dateTimeFormat-"+formatLength].replace(/\{(\d+)\}/g,
+			function(match, key){ return [timePattern, datePattern][key]; });
+	}
+
+	var tokens = [],
+		re = _processPattern(pattern, dojo.hitch(this, _buildDateTimeRE, tokens, bundle, options));
+	return {regexp: re, tokens: tokens, bundle: bundle};
+};
+
+dojo.date.locale.parse = function(/*String*/value, /*dojo.date.locale.__FormatOptions?*/options){
+	// summary:
+	//		Convert a properly formatted string to a primitive Date object,
+	//		using locale-specific settings.
+	//
+	// description:
+	//		Create a Date object from a string using a known localized pattern.
+	//		By default, this method parses looking for both date and time in the string.
+	//		Formatting patterns are chosen appropriate to the locale.  Different
+	//		formatting lengths may be chosen, with "full" used by default.
+	//		Custom patterns may be used or registered with translations using
+	//		the dojo.date.locale.addCustomFormats method.
+	//	
+	//		Formatting patterns are implemented using [the syntax described at
+	//		unicode.org](http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns)
+	//		When two digit years are used, a century is chosen according to a sliding 
+	//		window of 80 years before and 20 years after present year, for both `yy` and `yyyy` patterns.
+	//		year < 100CE requires strict mode.
+	//
+	// value:
+	//		A string representation of a date
+
+	var info = dojo.date.locale._parseInfo(options),
+		tokens = info.tokens, bundle = info.bundle,
+		re = new RegExp("^" + info.regexp + "$", info.strict ? "" : "i"),
+		match = re.exec(value);
+
+	if(!match){ return null; } // null
+
+	var widthList = ['abbr', 'wide', 'narrow'],
+		result = [1970,0,1,0,0,0,0], // will get converted to a Date at the end
+		amPm = "",
+		valid = dojo.every(match, function(v, i){
+		if(!i){return true;}
+		var token=tokens[i-1];
+		var l=token.length;
+		switch(token.charAt(0)){
+			case 'y':
+				if(l != 2 && options.strict){
+					//interpret year literally, so '5' would be 5 A.D.
+					result[0] = v;
+				}else{
+					if(v<100){
+						v = Number(v);
+						//choose century to apply, according to a sliding window
+						//of 80 years before and 20 years after present year
+						var year = '' + new Date().getFullYear(),
+							century = year.substring(0, 2) * 100,
+							cutoff = Math.min(Number(year.substring(2, 4)) + 20, 99),
+							num = (v < cutoff) ? century + v : century - 100 + v;
+						result[0] = num;
+					}else{
+						//we expected 2 digits and got more...
+						if(options.strict){
+							return false;
+						}
+						//interpret literally, so '150' would be 150 A.D.
+						//also tolerate '1950', if 'yyyy' input passed to 'yy' format
+						result[0] = v;
+					}
+				}
+				break;
+			case 'M':
+				if(l>2){
+					var months = bundle['months-format-' + widthList[l-3]].concat();
+					if(!options.strict){
+						//Tolerate abbreviating period in month part
+						//Case-insensitive comparison
+						v = v.replace(".","").toLowerCase();
+						months = dojo.map(months, function(s){ return s.replace(".","").toLowerCase(); } );
+					}
+					v = dojo.indexOf(months, v);
+					if(v == -1){
+//						console.log("dojo.date.locale.parse: Could not parse month name: '" + v + "'.");
+						return false;
+					}
+				}else{
+					v--;
+				}
+				result[1] = v;
+				break;
+			case 'E':
+			case 'e':
+				var days = bundle['days-format-' + widthList[l-3]].concat();
+				if(!options.strict){
+					//Case-insensitive comparison
+					v = v.toLowerCase();
+					days = dojo.map(days, function(d){return d.toLowerCase();});
+				}
+				v = dojo.indexOf(days, v);
+				if(v == -1){
+//					console.log("dojo.date.locale.parse: Could not parse weekday name: '" + v + "'.");
+					return false;
+				}
+
+				//TODO: not sure what to actually do with this input,
+				//in terms of setting something on the Date obj...?
+				//without more context, can't affect the actual date
+				//TODO: just validate?
+				break;
+			case 'D':
+				result[1] = 0;
+				// fallthrough...
+			case 'd':
+				result[2] = v;
+				break;
+			case 'a': //am/pm
+				var am = options.am || bundle['dayPeriods-format-wide-am'],
+					pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+				if(!options.strict){
+					var period = /\./g;
+					v = v.replace(period,'').toLowerCase();
+					am = am.replace(period,'').toLowerCase();
+					pm = pm.replace(period,'').toLowerCase();
+				}
+				if(options.strict && v != am && v != pm){
+//					console.log("dojo.date.locale.parse: Could not parse am/pm part.");
+					return false;
+				}
+
+				// we might not have seen the hours field yet, so store the state and apply hour change later
+				amPm = (v == pm) ? 'p' : (v == am) ? 'a' : '';
+				break;
+			case 'K': //hour (1-24)
+				if(v == 24){ v = 0; }
+				// fallthrough...
+			case 'h': //hour (1-12)
+			case 'H': //hour (0-23)
+			case 'k': //hour (0-11)
+				//TODO: strict bounds checking, padding
+				if(v > 23){
+//					console.log("dojo.date.locale.parse: Illegal hours value");
+					return false;
+				}
+
+				//in the 12-hour case, adjusting for am/pm requires the 'a' part
+				//which could come before or after the hour, so we will adjust later
+				result[3] = v;
+				break;
+			case 'm': //minutes
+				result[4] = v;
+				break;
+			case 's': //seconds
+				result[5] = v;
+				break;
+			case 'S': //milliseconds
+				result[6] = v;
+//				break;
+//			case 'w':
+//TODO				var firstDay = 0;
+//			default:
+//TODO: throw?
+//				console.log("dojo.date.locale.parse: unsupported pattern char=" + token.charAt(0));
+		}
+		return true;
+	});
+
+	var hours = +result[3];
+	if(amPm === 'p' && hours < 12){
+		result[3] = hours + 12; //e.g., 3pm -> 15
+	}else if(amPm === 'a' && hours == 12){
+		result[3] = 0; //12am -> 0
+	}
+
+	//TODO: implement a getWeekday() method in order to test 
+	//validity of input strings containing 'EEE' or 'EEEE'...
+
+	var dateObject = new Date(result[0], result[1], result[2], result[3], result[4], result[5], result[6]); // Date
+	if(options.strict){
+		dateObject.setFullYear(result[0]);
+	}
+
+	// Check for overflow.  The Date() constructor normalizes things like April 32nd...
+	//TODO: why isn't this done for times as well?
+	var allTokens = tokens.join(""),
+		dateToken = allTokens.indexOf('d') != -1,
+		monthToken = allTokens.indexOf('M') != -1;
+
+	if(!valid ||
+		(monthToken && dateObject.getMonth() > result[1]) ||
+		(dateToken && dateObject.getDate() > result[2])){
+		return null;
+	}
+
+	// Check for underflow, due to DST shifts.  See #9366
+	// This assumes a 1 hour dst shift correction at midnight
+	// We could compare the timezone offset after the shift and add the difference instead.
+	if((monthToken && dateObject.getMonth() < result[1]) ||
+		(dateToken && dateObject.getDate() < result[2])){
+		dateObject = dojo.date.add(dateObject, "hour", 1);
+	}
+
+	return dateObject; // Date
+};
+
+function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
+	//summary: Process a pattern with literals in it
+
+	// Break up on single quotes, treat every other one as a literal, except '' which becomes '
+	var identity = function(x){return x;};
+	applyPattern = applyPattern || identity;
+	applyLiteral = applyLiteral || identity;
+	applyAll = applyAll || identity;
+
+	//split on single quotes (which escape literals in date format strings) 
+	//but preserve escaped single quotes (e.g., o''clock)
+	var chunks = pattern.match(/(''|[^'])+/g),
+		literal = pattern.charAt(0) == "'";
+
+	dojo.forEach(chunks, function(chunk, i){
+		if(!chunk){
+			chunks[i]='';
+		}else{
+			chunks[i]=(literal ? applyLiteral : applyPattern)(chunk.replace(/''/g, "'"));
+			literal = !literal;
+		}
+	});
+	return applyAll(chunks.join(''));
+}
+
+function _buildDateTimeRE(tokens, bundle, options, pattern){
+	pattern = dojo.regexp.escapeString(pattern);
+	if(!options.strict){ pattern = pattern.replace(" a", " ?a"); } // kludge to tolerate no space before am/pm
+	return pattern.replace(/([a-z])\1*/ig, function(match){
+		// Build a simple regexp.  Avoid captures, which would ruin the tokens list
+		var s,
+			c = match.charAt(0),
+			l = match.length,
+			p2 = '', p3 = '';
+		if(options.strict){
+			if(l > 1){ p2 = '0' + '{'+(l-1)+'}'; }
+			if(l > 2){ p3 = '0' + '{'+(l-2)+'}'; }
+		}else{
+			p2 = '0?'; p3 = '0{0,2}';
+		}
+		switch(c){
+			case 'y':
+				s = '\\d{2,4}';
+				break;
+			case 'M':
+				s = (l>2) ? '\\S+?' : p2+'[1-9]|1[0-2]';
+				break;
+			case 'D':
+				s = p2+'[1-9]|'+p3+'[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]';
+				break;
+			case 'd':
+				s = '3[01]|[12]\\d|'+p2+'[1-9]';
+				break;
+			case 'w':
+				s = p2+'[1-9]|[1-4][0-9]|5[0-3]';
+				break;
+			case 'E':
+				s = '\\S+';
+				break;
+			case 'h': //hour (1-12)
+				s = p2+'[1-9]|1[0-2]';
+				break;
+			case 'k': //hour (0-11)
+				s = p2+'\\d|1[01]';
+				break;
+			case 'H': //hour (0-23)
+				s = p2+'\\d|1\\d|2[0-3]';
+				break;
+			case 'K': //hour (1-24)
+				s = p2+'[1-9]|1\\d|2[0-4]';
+				break;
+			case 'm':
+			case 's':
+				s = '[0-5]\\d';
+				break;
+			case 'S':
+				s = '\\d{'+l+'}';
+				break;
+			case 'a':
+				var am = options.am || bundle['dayPeriods-format-wide-am'],
+					pm = options.pm || bundle['dayPeriods-format-wide-pm'];
+				if(options.strict){
+					s = am + '|' + pm;
+				}else{
+					s = am + '|' + pm;
+					if(am != am.toLowerCase()){ s += '|' + am.toLowerCase(); }
+					if(pm != pm.toLowerCase()){ s += '|' + pm.toLowerCase(); }
+					if(s.indexOf('.') != -1){ s += '|' + s.replace(/\./g, ""); }
+				}
+				s = s.replace(/\./g, "\\.");
+				break;
+			default:
+			// case 'v':
+			// case 'z':
+			// case 'Z':
+				s = ".*";
+//				console.log("parse of date format, pattern=" + pattern);
+		}
+
+		if(tokens){ tokens.push(match); }
+
+		return "(" + s + ")"; // add capture
+	}).replace(/[\xa0 ]/g, "[\\s\\xa0]"); // normalize whitespace.  Need explicit handling of \xa0 for IE.
+}
+})();
+
+(function(){
+var _customFormats = [];
+dojo.date.locale.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
+	// summary:
+	//		Add a reference to a bundle containing localized custom formats to be
+	//		used by date/time formatting and parsing routines.
+	//
+	// description:
+	//		The user may add custom localized formats where the bundle has properties following the
+	//		same naming convention used by dojo.cldr: `dateFormat-xxxx` / `timeFormat-xxxx`
+	//		The pattern string should match the format used by the CLDR.
+	//		See dojo.date.locale.format() for details.
+	//		The resources must be loaded by dojo.requireLocalization() prior to use
+
+	_customFormats.push({pkg:packageName,name:bundleName});
+};
+
+dojo.date.locale._getGregorianBundle = function(/*String*/locale){
+	var gregorian = {};
+	dojo.forEach(_customFormats, function(desc){
+		var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
+		gregorian = dojo.mixin(gregorian, bundle);
+	}, this);
+	return gregorian; /*Object*/
+};
+})();
+
+dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");
+
+dojo.date.locale.getNames = function(/*String*/item, /*String*/type, /*String?*/context, /*String?*/locale){
+	// summary:
+	//		Used to get localized strings from dojo.cldr for day or month names.
+	//
+	// item:
+	//	'months' || 'days'
+	// type:
+	//	'wide' || 'narrow' || 'abbr' (e.g. "Monday", "Mon", or "M" respectively, in English)
+	// context:
+	//	'standAlone' || 'format' (default)
+	// locale:
+	//	override locale used to find the names
+
+	var label,
+		lookup = dojo.date.locale._getGregorianBundle(locale),
+		props = [item, context, type];
+	if(context == 'standAlone'){
+		var key = props.join('-');
+		label = lookup[key];
+		// Fall back to 'format' flavor of name
+		if(label[0] == 1){ label = undefined; } // kludge, in the absence of real aliasing support in dojo.cldr
+	}
+	props[1] = 'format';
+
+	// return by copy so changes won't be made accidentally to the in-memory model
+	return (label || lookup[props.join('-')]).concat(); /*Array*/
+};
+
+dojo.date.locale.isWeekend = function(/*Date?*/dateObject, /*String?*/locale){
+	// summary:
+	//	Determines if the date falls on a weekend, according to local custom.
+
+	var weekend = dojo.cldr.supplemental.getWeekend(locale),
+		day = (dateObject || new Date()).getDay();
+	if(weekend.end < weekend.start){
+		weekend.end += 7;
+		if(day < weekend.start){ day += 7; }
+	}
+	return day >= weekend.start && day <= weekend.end; // Boolean
+};
+
+// These are used only by format and strftime.  Do they need to be public?  Which module should they go in?
+
+dojo.date.locale._getDayOfYear = function(/*Date*/dateObject){
+	// summary: gets the day of the year as represented by dateObject
+	return dojo.date.difference(new Date(dateObject.getFullYear(), 0, 1, dateObject.getHours()), dateObject) + 1; // Number
+};
+
+dojo.date.locale._getWeekOfYear = function(/*Date*/dateObject, /*Number*/firstDayOfWeek){
+	if(arguments.length == 1){ firstDayOfWeek = 0; } // Sunday
+
+	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1).getDay(),
+		adj = (firstDayOfYear - firstDayOfWeek + 7) % 7,
+		week = Math.floor((dojo.date.locale._getDayOfYear(dateObject) + adj - 1) / 7);
+
+	// if year starts on the specified day, start counting weeks at 1
+	if(firstDayOfYear == firstDayOfWeek){ week++; }
+
+	return week; // Number
+};
+
+}
+
+if(!dojo._hasResource["dijit.Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Calendar"] = true;
+dojo.provide("dijit.Calendar");
+
+
+
+
+
+
+
+
+
+dojo.declare(
+	"dijit.Calendar",
+	[dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+	{
+		// summary:
+		//		A simple GUI for choosing a date in the context of a monthly calendar.
+		//
+		// description:
+		//		A simple GUI for choosing a date in the context of a monthly calendar.
+		//		This widget can't be used in a form because it doesn't serialize the date to an
+		//		`<input>` field.  For a form element, use dijit.form.DateTextBox instead.
+		//
+		//		Note that the parser takes all dates attributes passed in the
+		//		[RFC 3339 format](http://www.faqs.org/rfcs/rfc3339.html), e.g. `2005-06-30T08:05:00-07:00`
+		//		so that they are serializable and locale-independent.
+		//
+		// example:
+		//	|	var calendar = new dijit.Calendar({}, dojo.byId("calendarNode"));
+		//
+		// example:
+		//	|	<div dojoType="dijit.Calendar"></div>
+
+		templateString: dojo.cache("dijit", "templates/Calendar.html", "<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\" role=\"grid\" dojoAttachEvent=\"onkeypress: _onKeyPress\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarDecrease\" waiRole=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow\">-</span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div class=\"dijitVisible\">\n\t\t\t\t\t<div class=\"dijitPopup dijitMenu dijitMenuPassive dijitHidden\" dojoAttachPoint=\"monthDropDown\" dojoAttachEvent=\"onmouseup: _onMonthSelect, onmouseover: _onMenuHover, onmouseout: _onMenuHover\">\n\t\t\t\t\t\t<div class=\"dijitCalendarMonthLabelTemplate dijitCalendarMonthLabel\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonthLabel dijitInline dijitVisible\" dojoAttachEvent=\"onmousedown: _onMonthToggle\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarIncrease\" waiRole=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow\">+</span>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\" role=\"columnheader\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\" role=\"row\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\" role=\"gridcell\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\n"),
+
+		// value: Date
+		//		The currently selected Date
+		value: new Date(),
+
+		// datePackage: String
+		//		JavaScript namespace to find Calendar routines.  Uses Gregorian Calendar routines
+		//		at dojo.date by default.
+		datePackage: "dojo.date",
+
+		// dayWidth: String
+		//		How to represent the days of the week in the calendar header. See dojo.date.locale
+		dayWidth: "narrow",
+
+		// tabIndex: Integer
+		//		Order fields are traversed when user hits the tab key
+		tabIndex: "0",
+		
+		baseClass:"dijitCalendar",
+
+		// Set node classes for various mouse events, see dijit._CssStateMixin for more details 
+		cssStateNodes: {
+			"decrementMonth": "dijitCalendarArrow",
+			"incrementMonth": "dijitCalendarArrow",
+			"previousYearLabelNode": "dijitCalendarPreviousYear",
+			"nextYearLabelNode": "dijitCalendarNextYear"			
+		},
+
+		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+			tabIndex: "domNode"
+ 		}),
+
+		setValue: function(/*Date*/ value){
+			// summary:
+			//      Deprecated.   Used attr('value', ...) instead.
+			// tags:
+			//      deprecated
+			dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
+			this.set('value', value);
+		},
+
+		_getValueAttr: function(){
+			// summary:
+			//		Support getter attr('value')
+			var value = new this.dateClassObj(this.value);
+			value.setHours(0, 0, 0, 0); // return midnight, local time for back-compat
+
+			// If daylight savings pushes midnight to the previous date, fix the Date
+			// object to point at 1am so it will represent the correct day. See #9366
+			if(value.getDate() < this.value.getDate()){
+				value = this.dateFuncObj.add(value, "hour", 1);
+			}
+			return value;
+		},
+
+		_setValueAttr: function(/*Date*/ value){
+			// summary:
+			//		Support setter attr("value", ...)
+			// description:
+			// 		Set the current date and update the UI.  If the date is disabled, the value will
+			//		not change, but the display will change to the corresponding month.
+			// tags:
+			//      protected
+			if(!this.value || this.dateFuncObj.compare(value, this.value)){
+				value = new this.dateClassObj(value);
+				value.setHours(1); // to avoid issues when DST shift occurs at midnight, see #8521, #9366
+				this.displayMonth = new this.dateClassObj(value);
+				if(!this.isDisabledDate(value, this.lang)){
+					this.value = value;
+					this.onChange(this.get('value'));
+				}
+				dojo.attr(this.domNode, "aria-label",
+					this.dateLocaleModule.format(value,
+						{selector:"date", formatLength:"full"}));
+				this._populateGrid();
+			}
+		},
+
+		_setText: function(node, text){
+			// summary:
+			//		This just sets the content of node to the specified text.
+			//		Can't do "node.innerHTML=text" because of an IE bug w/tables, see #3434.
+			// tags:
+			//      private
+			while(node.firstChild){
+				node.removeChild(node.firstChild);
+			}
+			node.appendChild(dojo.doc.createTextNode(text));
+		},
+
+		_populateGrid: function(){
+			// summary:
+			//      Fills in the calendar grid with each day (1-31)
+			// tags:
+			//      private
+			var month = this.displayMonth;
+			month.setDate(1);
+			var firstDay = month.getDay(),
+				daysInMonth = this.dateFuncObj.getDaysInMonth(month),
+				daysInPreviousMonth = this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(month, "month", -1)),
+				today = new this.dateClassObj(),
+				dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+			if(dayOffset > firstDay){ dayOffset -= 7; }
+
+			// Iterate through dates in the calendar and fill in date numbers and style info
+			dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){
+				i += dayOffset;
+				var date = new this.dateClassObj(month),
+					number, clazz = "dijitCalendar", adj = 0;
+
+				if(i < firstDay){
+					number = daysInPreviousMonth - firstDay + i + 1;
+					adj = -1;
+					clazz += "Previous";
+				}else if(i >= (firstDay + daysInMonth)){
+					number = i - firstDay - daysInMonth + 1;
+					adj = 1;
+					clazz += "Next";
+				}else{
+					number = i - firstDay + 1;
+					clazz += "Current";
+				}
+
+				if(adj){
+					date = this.dateFuncObj.add(date, "month", adj);
+				}
+				date.setDate(number);
+
+				if(!this.dateFuncObj.compare(date, today, "date")){
+					clazz = "dijitCalendarCurrentDate " + clazz;
+				}
+
+				if(this._isSelectedDate(date, this.lang)){
+					clazz = "dijitCalendarSelectedDate " + clazz;
+				}
+
+				if(this.isDisabledDate(date, this.lang)){
+					clazz = "dijitCalendarDisabledDate " + clazz;
+				}
+
+				var clazz2 = this.getClassForDate(date, this.lang);
+				if(clazz2){
+					clazz = clazz2 + " " + clazz;
+				}
+
+				template.className = clazz + "Month dijitCalendarDateTemplate";
+				template.dijitDateValue = date.valueOf();
+				var label = dojo.query(".dijitCalendarDateLabel", template)[0],
+					text = date.getDateLocalized ? date.getDateLocalized(this.lang) : date.getDate();
+				this._setText(label, text);
+			}, this);
+
+			// Fill in localized month name
+			var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang, month);
+			this._setText(this.monthLabelNode, monthNames[month.getMonth()]);
+			// Repopulate month list based on current year (Hebrew calendar)
+			dojo.query(".dijitCalendarMonthLabelTemplate", this.domNode).forEach(function(node, i){
+				dojo.toggleClass(node, "dijitHidden", !(i in monthNames)); // hide leap months (Hebrew)
+				this._setText(node, monthNames[i]);
+			}, this);
+
+			// Fill in localized prev/current/next years
+			var y = month.getFullYear() - 1;
+			var d = new this.dateClassObj();
+			dojo.forEach(["previous", "current", "next"], function(name){
+				d.setFullYear(y++);
+				this._setText(this[name+"YearLabelNode"],
+					this.dateLocaleModule.format(d, {selector:'year', locale:this.lang}));
+			}, this);
+
+			// Set up repeating mouse behavior
+			var _this = this;
+			var typematic = function(nodeProp, dateProp, adj){
+//FIXME: leaks (collects) listeners if populateGrid is called multiple times.  Do this once?
+				_this._connects.push(
+					dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count){
+						if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
+					}, 0.8, 500)
+				);
+			};
+			typematic("incrementMonth", "month", 1);
+			typematic("decrementMonth", "month", -1);
+			typematic("nextYearLabelNode", "year", 1);
+			typematic("previousYearLabelNode", "year", -1);
+		},
+
+		goToToday: function(){
+			// summary:
+			//      Sets calendar's value to today's date
+			this.set('value', new this.dateClassObj());
+		},
+
+		constructor: function(/*Object*/args){
+			var dateClass = (args.datePackage && (args.datePackage != "dojo.date"))? args.datePackage + ".Date" : "Date";
+			this.dateClassObj = dojo.getObject(dateClass, false);
+			this.datePackage = args.datePackage || this.datePackage;
+			this.dateFuncObj = dojo.getObject(this.datePackage, false);
+			this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
+		},
+
+		postMixInProperties: function(){
+			// parser.instantiate sometimes passes in NaN for IE.  Use default value in prototype instead.
+			if(isNaN(this.value)){ delete this.value; }
+			this.inherited(arguments);
+		},
+
+		postCreate: function(){
+			this.inherited(arguments);
+			dojo.setSelectable(this.domNode, false);
+
+			var cloneClass = dojo.hitch(this, function(clazz, n){
+				var template = dojo.query(clazz, this.domNode)[0];
+	 			for(var i=0; i<n; i++){
+					template.parentNode.appendChild(template.cloneNode(true));
+				}
+			});
+
+			// clone the day label and calendar day templates 6 times to make 7 columns
+			cloneClass(".dijitCalendarDayLabelTemplate", 6);
+			cloneClass(".dijitCalendarDateTemplate", 6);
+
+			// now make 6 week rows
+			cloneClass(".dijitCalendarWeekTemplate", 5);
+
+			// insert localized day names in the header
+			var dayNames = this.dateLocaleModule.getNames('days', this.dayWidth, 'standAlone', this.lang);
+			var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+			dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function(label, i){
+				this._setText(label, dayNames[(i + dayOffset) % 7]);
+			}, this);
+
+			var dateObj = new this.dateClassObj(this.value);
+			// Fill in spacer/month dropdown element with all the month names (invisible) so that the maximum width will affect layout
+			var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang, dateObj);
+			cloneClass(".dijitCalendarMonthLabelTemplate", monthNames.length-1);
+			dojo.query(".dijitCalendarMonthLabelTemplate", this.domNode).forEach(function(node, i){
+				dojo.attr(node, "month", i);
+				if(i in monthNames){ this._setText(node, monthNames[i]); }
+				dojo.place(node.cloneNode(true), this.monthLabelSpacer);
+			}, this);
+
+			this.value = null;
+			this.set('value', dateObj);
+		},
+
+		_onMenuHover: function(e){
+			dojo.stopEvent(e);
+			dojo.toggleClass(e.target, "dijitMenuItemHover");
+		},
+
+		_adjustDisplay: function(/*String*/ part, /*int*/ amount){
+			// summary:
+			//      Moves calendar forwards or backwards by months or years
+			// part:
+			//      "month" or "year"
+			// amount:
+			//      Number of months or years
+			// tags:
+			//      private
+			this.displayMonth = this.dateFuncObj.add(this.displayMonth, part, amount);
+			this._populateGrid();
+		},
+
+		_onMonthToggle: function(/*Event*/ evt){
+			// summary:
+			//      Handler for when user triggers or dismisses the month list
+			// tags:
+			//      protected
+			dojo.stopEvent(evt);
+
+			if(evt.type == "mousedown"){
+				var coords = dojo.position(this.monthLabelNode);
+//				coords.y -= dojo.position(this.domNode, true).y;
+				// Size the dropdown's width to match the label in the widget
+				// so that they are horizontally aligned
+				var dim = {
+					width: coords.w + "px",
+					top: -this.displayMonth.getMonth() * coords.h + "px"
+				};
+				if((dojo.isIE && dojo.isQuirks) || dojo.isIE < 7){
+					dim.left = -coords.w/2 + "px";
+				}
+				dojo.style(this.monthDropDown, dim);
+				this._popupHandler = this.connect(document, "onmouseup", "_onMonthToggle");
+			}else{
+				this.disconnect(this._popupHandler);
+				delete this._popupHandler;
+			}
+
+			dojo.toggleClass(this.monthDropDown, "dijitHidden");
+			dojo.toggleClass(this.monthLabelNode, "dijitVisible");
+		},
+
+		_onMonthSelect: function(/*Event*/ evt){
+			// summary:
+			//      Handler for when user selects a month from a list
+			// tags:
+			//      protected
+			this._onMonthToggle(evt);
+			this.displayMonth.setMonth(dojo.attr(evt.target, "month"));
+			this._populateGrid();
+		},
+
+		_onDayClick: function(/*Event*/ evt){
+			// summary:
+			//      Handler for day clicks, selects the date if appropriate
+			// tags:
+			//      protected
+			dojo.stopEvent(evt);
+			for(var node = evt.target; node && !node.dijitDateValue; node = node.parentNode);
+			if(node && !dojo.hasClass(node, "dijitCalendarDisabledDate")){
+				this.set('value', node.dijitDateValue);
+				this.onValueSelected(this.get('value'));
+			}
+		},
+
+		_onDayMouseOver: function(/*Event*/ evt){
+			// summary:
+			//      Handler for mouse over events on days, sets hovered style
+			// tags:
+			//      protected
+
+			// event can occur on <td> or the <span> inside the td,
+			// set node to the <td>.
+			var node =
+				dojo.hasClass(evt.target, "dijitCalendarDateLabel") ?
+				evt.target.parentNode :
+				evt.target;
+
+			if(node && (node.dijitDateValue || node == this.previousYearLabelNode || node == this.nextYearLabelNode) ){
+				dojo.addClass(node, "dijitCalendarHoveredDate");
+				this._currentNode = node;
+			}
+		},
+
+		_onDayMouseOut: function(/*Event*/ evt){
+			// summary:
+			//      Handler for mouse out events on days, clears hovered style
+			// tags:
+			//      protected
+	
+			if(!this._currentNode){ return; }
+			
+			// if mouse out occurs moving from <td> to <span> inside <td>, ignore it
+			if(evt.relatedTarget && evt.relatedTarget.parentNode == this._currentNode){ return; }
+
+			dojo.removeClass(this._currentNode, "dijitCalendarHoveredDate");
+			if(dojo.hasClass(this._currentNode, "dijitCalendarActiveDate")) {
+				dojo.removeClass(this._currentNode, "dijitCalendarActiveDate");
+			}
+			this._currentNode = null;
+		},
+		
+		_onDayMouseDown: function(/*Event*/ evt){
+			var node = evt.target.parentNode;
+			if(node && node.dijitDateValue){
+				dojo.addClass(node, "dijitCalendarActiveDate");
+				this._currentNode = node;
+			}
+		},
+		
+		_onDayMouseUp: function(/*Event*/ evt){
+			var node = evt.target.parentNode;
+			if(node && node.dijitDateValue){
+				dojo.removeClass(node, "dijitCalendarActiveDate");
+			}
+		},
+
+//TODO: use typematic
+//TODO: skip disabled dates without ending up in a loop
+//TODO: could optimize by avoiding populate grid when month does not change
+		_onKeyPress: function(/*Event*/evt){
+			// summary:
+			//		Provides keyboard navigation of calendar
+			// tags:
+			//		protected
+			var dk = dojo.keys,
+				increment = -1,
+				interval,
+				newValue = this.value;
+			switch(evt.keyCode){
+				case dk.RIGHT_ARROW:
+					increment = 1;
+					//fallthrough...
+				case dk.LEFT_ARROW:
+					interval = "day";
+					if(!this.isLeftToRight()){ increment *= -1; }
+					break;
+				case dk.DOWN_ARROW:
+					increment = 1;
+					//fallthrough...
+				case dk.UP_ARROW:
+					interval = "week";
+					break;
+				case dk.PAGE_DOWN:
+					increment = 1;
+					//fallthrough...
+				case dk.PAGE_UP:
+					interval = evt.ctrlKey ? "year" : "month";
+					break;
+				case dk.END:
+					// go to the next month
+					newValue = this.dateFuncObj.add(newValue, "month", 1);
+					// subtract a day from the result when we're done
+					interval = "day";
+					//fallthrough...
+				case dk.HOME:
+					newValue = new Date(newValue).setDate(1);
+					break;
+				case dk.ENTER:
+					this.onValueSelected(this.get('value'));
+					break;
+				case dk.ESCAPE:
+					//TODO
+				default:
+					return;
+			}
+			dojo.stopEvent(evt);
+
+			if(interval){
+				newValue = this.dateFuncObj.add(newValue, interval, increment);
+			}
+
+			this.set("value", newValue);
+		},
+
+		onValueSelected: function(/*Date*/ date){
+			// summary:
+			//		Notification that a date cell was selected.  It may be the same as the previous value.
+			// description:
+			//      Used by `dijit.form._DateTimeTextBox` (and thus `dijit.form.DateTextBox`)
+			//      to get notification when the user has clicked a date.
+			// tags:
+			//      protected
+		},
+
+		onChange: function(/*Date*/ date){
+			// summary:
+			//		Called only when the selected date has changed
+		},
+
+		_isSelectedDate: function(/*Date*/ dateObject, /*String?*/ locale){
+			// summary:
+			//		Extension point so developers can subclass Calendar to
+			//		support multiple (concurrently) selected dates
+			// tags:
+			//		protected extension
+			return !this.dateFuncObj.compare(dateObject, this.value, "date")
+		},
+
+		isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
+			// summary:
+			//		May be overridden to disable certain dates in the calendar e.g. `isDisabledDate=dojo.date.locale.isWeekend`
+			// tags:
+			//      extension
+/*=====
+			return false; // Boolean
+=====*/
+		},
+
+		getClassForDate: function(/*Date*/ dateObject, /*String?*/ locale){
+			// summary:
+			//		May be overridden to return CSS classes to associate with the date entry for the given dateObject,
+			//		for example to indicate a holiday in specified locale.
+			// tags:
+			//      extension
+
+/*=====
+			return ""; // String
+=====*/
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._DateTimeTextBox"] = true;
+dojo.provide("dijit.form._DateTimeTextBox");
+
+
+
+
+
+
+new Date("X"); // workaround for #11279, new Date("") == NaN
+
+/*=====
+dojo.declare(
+	"dijit.form._DateTimeTextBox.__Constraints",
+	[dijit.form.RangeBoundTextBox.__Constraints, dojo.date.locale.__FormatOptions], {
+	// summary:
+	//		Specifies both the rules on valid/invalid values (first/last date/time allowed),
+	//		and also formatting options for how the date/time is displayed.
+	// example:
+	//		To restrict to dates within 2004, displayed in a long format like "December 25, 2005":
+	//	|		{min:'2004-01-01',max:'2004-12-31', formatLength:'long'}
+});
+=====*/
+
+dojo.declare(
+	"dijit.form._DateTimeTextBox",
+	dijit.form.RangeBoundTextBox,
+	{
+		// summary:
+		//		Base class for validating, serializable, range-bound date or time text box.
+
+		// constraints: dijit.form._DateTimeTextBox.__Constraints
+		//		Despite the name, this parameter specifies both constraints on the input
+		//		(including starting/ending dates/times allowed) as well as
+		//		formatting options like whether the date is displayed in long (ex: December 25, 2005)
+		//		or short (ex: 12/25/2005) format.   See `dijit.form._DateTimeTextBox.__Constraints` for details.
+		/*=====
+		constraints: {},
+		======*/
+
+		// Override ValidationTextBox.regExpGen().... we use a reg-ex generating function rather
+		// than a straight regexp to deal with locale  (plus formatting options too?)
+		regExpGen: dojo.date.locale.regexp,
+
+		// datePackage: String
+		//	JavaScript namespace to find calendar routines.  Uses Gregorian calendar routines
+		//	at dojo.date, by default.
+		datePackage: "dojo.date",
+
+		// Override _FormWidget.compare() to work for dates/times
+		compare: dojo.date.compare,
+
+		format: function(/*Date*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
+			// summary:
+			//		Formats the value as a Date, according to specified locale (second argument)
+			// tags:
+			//		protected
+			if(!value){ return ''; }
+			return this.dateLocaleModule.format(value, constraints);
+		},
+
+		parse: function(/*String*/ value, /*dojo.date.locale.__FormatOptions*/ constraints){
+			// summary:
+			//		Parses as string as a Date, according to constraints
+			// tags:
+			//		protected
+
+			return this.dateLocaleModule.parse(value, constraints) || (this._isEmpty(value) ? null : undefined);	 // Date
+		},
+
+		// Overrides ValidationTextBox.serialize() to serialize a date in canonical ISO format.
+		serialize: function(/*anything*/val, /*Object?*/options){
+			if(val.toGregorian){
+				val = val.toGregorian();
+			}
+			return dojo.date.stamp.toISOString(val, options);
+		},
+
+		// value: Date
+		//		The value of this widget as a JavaScript Date object.  Use get("value") / set("value", val) to manipulate.
+		//		When passed to the parser in markup, must be specified according to `dojo.date.stamp.fromISOString`
+		value: new Date(""),	// value.toString()="NaN"
+		_blankValue: null,	// used by filter() when the textbox is blank
+
+		//	popupClass: [protected extension] String
+		//		Name of the popup widget class used to select a date/time.
+		//		Subclasses should specify this.
+		popupClass: "", // default is no popup = text only
+
+
+		// _selector: [protected extension] String
+		//		Specifies constraints.selector passed to dojo.date functions, should be either
+		//		"date" or "time".
+		//		Subclass must specify this.
+		_selector: "",
+
+		constructor: function(/*Object*/args){
+			var dateClass = args.datePackage ? args.datePackage + ".Date" : "Date";
+			this.dateClassObj = dojo.getObject(dateClass, false);
+			this.value = new this.dateClassObj("");
+
+			this.datePackage = args.datePackage || this.datePackage;
+			this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
+			this.regExpGen = this.dateLocaleModule.regexp;
+		},
+
+		_setConstraintsAttr: function(/* Object */ constraints){
+			constraints.selector = this._selector;
+			constraints.fullYear = true; // see #5465 - always format with 4-digit years
+			var fromISO = dojo.date.stamp.fromISOString;
+			if(typeof constraints.min == "string"){ constraints.min = fromISO(constraints.min); }
+ 			if(typeof constraints.max == "string"){ constraints.max = fromISO(constraints.max); }
+			this.inherited(arguments, [constraints]);
+		},
+
+		_onFocus: function(/*Event*/ evt){
+			// summary:
+			//		open the popup
+			this._open();
+			this.inherited(arguments);
+		},
+
+		_setValueAttr: function(/*Date*/ value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){
+			// summary:
+			//		Sets the date on this textbox.  Note that `value` must be like a Javascript Date object.
+			if(value !== undefined){
+				if(!value || value.toString() == dijit.form._DateTimeTextBox.prototype.value.toString()){
+					value = null;
+				}
+				if(value instanceof Date && !(this.dateClassObj instanceof Date)){
+					value = new this.dateClassObj(value);
+				}
+			}
+			this.inherited(arguments, [value, priorityChange, formattedValue]);
+			if(this._picker){
+				// #3948: fix blank date on popup only
+				if(!value){value = new this.dateClassObj();}
+				this._picker.set('value', value);
+			}
+		},
+
+		_open: function(){
+			// summary:
+			//		opens the TimePicker, and sets the onValueSelected value
+
+			if(this.disabled || this.readOnly || !this.popupClass){return;}
+
+			var textBox = this;
+
+			if(!this._picker){
+				var PopupProto = dojo.getObject(this.popupClass, false);
+				this._picker = new PopupProto({
+					onValueSelected: function(value){
+						if(textBox._tabbingAway){
+							delete textBox._tabbingAway;
+						}else{
+							textBox.focus(); // focus the textbox before the popup closes to avoid reopening the popup
+						}
+						setTimeout(dojo.hitch(textBox, "_close"), 1); // allow focus time to take
+
+						// this will cause InlineEditBox and other handlers to do stuff so make sure it's last
+						dijit.form._DateTimeTextBox.superclass._setValueAttr.call(textBox, value, true);
+					},
+					id: this.id + "_popup",
+					dir: textBox.dir,
+					lang: textBox.lang,
+					value: this.get('value') || new this.dateClassObj(),
+					constraints: textBox.constraints,
+
+					datePackage: textBox.datePackage,
+
+					isDisabledDate: function(/*Date*/ date){
+						// summary:
+						// 	disables dates outside of the min/max of the _DateTimeTextBox
+						var compare = dojo.date.compare;
+						var constraints = textBox.constraints;
+						return constraints && (
+							(constraints.min && compare(constraints.min, date, textBox._selector) > 0) ||
+							(constraints.max && compare(constraints.max, date, textBox._selector) < 0)
+						);
+					}
+				});
+			}
+			if(!this._opened){
+				// Open drop down.  Align left sides of input box and drop down, even in RTL mode,
+				// otherwise positioning thrown off when the drop down width is changed in marginBox call below (#10676)
+				dijit.popup.open({
+					parent: this,
+					popup: this._picker,
+					orient: {'BL':'TL', 'TL':'BL'},
+					around: this.domNode,
+					onCancel: dojo.hitch(this, this._close),
+					onClose: function(){ textBox._opened=false; }
+				});
+				this._opened=true;
+			}
+
+			dojo.marginBox(this._picker.domNode,{ w:this.domNode.offsetWidth });
+		},
+
+		_close: function(){
+			if(this._opened){
+				dijit.popup.close(this._picker);
+				this._opened=false;
+			}
+		},
+
+		_onBlur: function(){
+			// summary:
+			//		Called magically when focus has shifted away from this widget and it's dropdown
+			this._close();
+			if(this._picker){
+				// teardown so that constraints will be rebuilt next time (redundant reference: #6002)
+				this._picker.destroy();
+				delete this._picker;
+			}
+			this.inherited(arguments);
+			// don't focus on <input>.  the user has explicitly focused on something else.
+		},
+
+		_getDisplayedValueAttr: function(){
+			return this.textbox.value;
+		},
+
+		_setDisplayedValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){
+			this._setValueAttr(this.parse(value, this.constraints), priorityChange, value);
+		},
+
+		destroy: function(){
+			if(this._picker){
+				this._picker.destroy();
+				delete this._picker;
+			}
+			this.inherited(arguments);
+		},
+
+		postCreate: function(){
+			this.inherited(arguments);
+			this.connect(this.focusNode, 'onkeypress', this._onKeyPress);
+			this.connect(this.focusNode, 'onclick', this._open);
+		},
+
+		_onKeyPress: function(/*Event*/ e){
+			// summary:
+			//		Handler for keypress events
+
+			var p = this._picker, dk = dojo.keys;
+			// Handle the key in the picker, if it has a handler.  If the handler
+			// returns false, then don't handle any other keys.
+			if(p && this._opened && p.handleKey){
+				if(p.handleKey(e) === false){ return; }
+			}
+			if(this._opened && e.charOrCode == dk.ESCAPE && !(e.shiftKey || e.ctrlKey || e.altKey || e.metaKey)){
+				this._close();
+				dojo.stopEvent(e);
+			}else if(!this._opened && e.charOrCode == dk.DOWN_ARROW){
+				this._open();
+				dojo.stopEvent(e);
+			}else if(e.charOrCode === dk.TAB){
+				this._tabbingAway = true;
+			}else if(this._opened && (e.keyChar || e.charOrCode === dk.BACKSPACE || e.charOrCode == dk.DELETE)){
+				// Replace the element - but do it after a delay to allow for
+				// filtering to occur
+				setTimeout(dojo.hitch(this, function(){
+					if(this._picker && this._opened){
+						dijit.placeOnScreenAroundElement(p.domNode.parentNode, this.domNode, {'BL':'TL', 'TL':'BL'}, p.orient ? dojo.hitch(p, "orient") : null);
+					}
+				}), 1);
+			}
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form.DateTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.DateTextBox"] = true;
+dojo.provide("dijit.form.DateTextBox");
+
+
+
+
+dojo.declare(
+	"dijit.form.DateTextBox",
+	dijit.form._DateTimeTextBox,
+	{
+		// summary:
+		//		A validating, serializable, range-bound date text box with a drop down calendar
+		//
+		//		Example:
+		// |	new dijit.form.DateTextBox({value: new Date(2009, 0, 20)})
+		//
+		//		Example:
+		// |	<input dojotype='dijit.form.DateTextBox' value='2009-01-20'>
+
+		baseClass: "dijitTextBox dijitDateTextBox",
+		popupClass: "dijit.Calendar",
+		_selector: "date",
+
+		// value: Date
+		//		The value of this widget as a JavaScript Date object, with only year/month/day specified.
+		//		If specified in markup, use the format specified in `dojo.date.stamp.fromISOString`
+		value: new Date("")	// value.toString()="NaN"
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.form._Spinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._Spinner"] = true;
+dojo.provide("dijit.form._Spinner");
+
+
+
+dojo.declare(
+	"dijit.form._Spinner",
+	dijit.form.RangeBoundTextBox,
+	{
+		// summary:
+		//		Mixin for validation widgets with a spinner.
+		// description:
+		//		This class basically (conceptually) extends `dijit.form.ValidationTextBox`.
+		//		It modifies the template to have up/down arrows, and provides related handling code.
+
+		// defaultTimeout: Number
+		//		Number of milliseconds before a held arrow key or up/down button becomes typematic
+		defaultTimeout: 500,
+
+		// minimumTimeout: Number
+		//       minimum number of milliseconds that typematic event fires when held key or button is held
+		minimumTimeout: 10,
+
+		// timeoutChangeRate: Number
+		//		Fraction of time used to change the typematic timer between events.
+		//		1.0 means that each typematic event fires at defaultTimeout intervals.
+		//		< 1.0 means that each typematic event fires at an increasing faster rate.
+		timeoutChangeRate: 0.90,
+
+		// smallDelta: Number
+		//	  Adjust the value by this much when spinning using the arrow keys/buttons
+		smallDelta: 1,
+
+		// largeDelta: Number
+		//	  Adjust the value by this much when spinning using the PgUp/Dn keys
+		largeDelta: 10,
+
+		templateString: dojo.cache("dijit.form", "templates/Spinner.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitButtonNode dijitSpinnerButtonContainer\"\n\t\t><input class=\"dijitReset dijitInputField dijitSpinnerButtonInner\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t/><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9650;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9660;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" ${!nameAttrSetting}\n\t/></div\n></div>\n"),
+
+		baseClass: "dijitTextBox dijitSpinner",
+
+		// Set classes like dijitUpArrowButtonHover or dijitDownArrowButtonActive depending on
+		// mouse action over specified node
+		cssStateNodes: {
+			"upArrowNode": "dijitUpArrowButton",
+			"downArrowNode": "dijitDownArrowButton"
+		},
+
+		adjust: function(/* Object */ val, /*Number*/ delta){
+			// summary:
+			//		Overridable function used to adjust a primitive value(Number/Date/...) by the delta amount specified.
+			// 		The val is adjusted in a way that makes sense to the object type.
+			// tags:
+			//		protected extension
+			return val;
+		},
+
+		_arrowPressed: function(/*Node*/ nodePressed, /*Number*/ direction, /*Number*/ increment){
+			// summary:
+			//		Handler for arrow button or arrow key being pressed
+			if(this.disabled || this.readOnly){ return; }
+			this._setValueAttr(this.adjust(this.get('value'), direction*increment), false);
+			dijit.selectInputText(this.textbox, this.textbox.value.length);
+		},
+
+		_arrowReleased: function(/*Node*/ node){
+			// summary:
+			//		Handler for arrow button or arrow key being released
+			this._wheelTimer = null;
+			if(this.disabled || this.readOnly){ return; }
+		},
+
+		_typematicCallback: function(/*Number*/ count, /*DOMNode*/ node, /*Event*/ evt){
+			var inc=this.smallDelta;
+			if(node == this.textbox){
+				var k=dojo.keys;
+				var key = evt.charOrCode;
+				inc = (key == k.PAGE_UP || key == k.PAGE_DOWN) ? this.largeDelta : this.smallDelta;
+				node = (key == k.UP_ARROW || key == k.PAGE_UP) ? this.upArrowNode : this.downArrowNode;
+			}
+			if(count == -1){ this._arrowReleased(node); }
+			else{ this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1, inc); }
+		},
+
+		_wheelTimer: null,
+		_mouseWheeled: function(/*Event*/ evt){
+			// summary:
+			//		Mouse wheel listener where supported
+
+			dojo.stopEvent(evt);
+			// FIXME: Safari bubbles
+
+			// be nice to DOH and scroll as much as the event says to
+			var scrollAmount = evt.detail ? (evt.detail * -1) : (evt.wheelDelta / 120);
+			if(scrollAmount !== 0){
+				var node = this[(scrollAmount > 0 ? "upArrowNode" : "downArrowNode" )];
+
+				this._arrowPressed(node, scrollAmount, this.smallDelta);
+
+				if(!this._wheelTimer){
+					clearTimeout(this._wheelTimer);
+				}
+				this._wheelTimer = setTimeout(dojo.hitch(this,"_arrowReleased",node), 50);
+			}
+
+		},
+
+		postCreate: function(){
+			this.inherited(arguments);
+
+			// extra listeners
+			this.connect(this.domNode, !dojo.isMozilla ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
+			this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+			this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+			this._connects.push(dijit.typematic.addListener(this.upArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+			this._connects.push(dijit.typematic.addListener(this.downArrowNode, this.textbox, {charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout, this.minimumTimeout));
+		}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form.NumberSpinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.NumberSpinner"] = true;
+dojo.provide("dijit.form.NumberSpinner");
+
+
+
+
+dojo.declare("dijit.form.NumberSpinner",
+	[dijit.form._Spinner, dijit.form.NumberTextBoxMixin],
+	{
+	// summary:
+	//		Extends NumberTextBox to add up/down arrows and pageup/pagedown for incremental change to the value
+	//
+	// description:
+	//		A `dijit.form.NumberTextBox` extension to provide keyboard accessible value selection
+	//		as well as icons for spinning direction. When using the keyboard, the typematic rules
+	//		apply, meaning holding the key will gradually increase or decrease the value and
+	// 		accelerate.
+	//
+	// example:
+	//	| new dijit.form.NumberSpinner({ constraints:{ max:300, min:100 }}, "someInput");
+
+	adjust: function(/* Object */val, /* Number*/delta){
+		// summary:
+		//		Change Number val by the given amount
+		// tags:
+		//		protected
+
+		var tc = this.constraints,
+			v = isNaN(val),
+			gotMax = !isNaN(tc.max),
+			gotMin = !isNaN(tc.min)
+		;
+		if(v && delta != 0){ // blank or invalid value and they want to spin, so create defaults
+			val = (delta > 0) ?
+				gotMin ? tc.min : gotMax ? tc.max : 0 :
+				gotMax ? this.constraints.max : gotMin ? tc.min : 0
+			;
+		}
+		var newval = val + delta;
+		if(v || isNaN(newval)){ return val; }
+		if(gotMax && (newval > tc.max)){
+			newval = tc.max;
+		}
+		if(gotMin && (newval < tc.min)){
+			newval = tc.min;
+		}
+		return newval;
+	},
+
+	_onKeyPress: function(e){
+		if((e.charOrCode == dojo.keys.HOME || e.charOrCode == dojo.keys.END) && !(e.ctrlKey || e.altKey || e.metaKey)
+		&& typeof this.get('value') != 'undefined' /* gibberish, so HOME and END are default editing keys*/){
+			var value = this.constraints[(e.charOrCode == dojo.keys.HOME ? "min" : "max")];
+			if(typeof value == "number"){
+				this._setValueAttr(value, false);
+			}
+			// eat home or end key whether we change the value or not
+			dojo.stopEvent(e);
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form.MultiSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.MultiSelect"] = true;
+dojo.provide("dijit.form.MultiSelect");
+
+
+
+dojo.declare("dijit.form.MultiSelect", dijit.form._FormValueWidget, {
+	// summary:
+	//		Widget version of a <select multiple=true> element,
+	//		for selecting multiple options.
+
+	// size: Number
+	//		Number of elements to display on a page
+	//		NOTE: may be removed in version 2.0, since elements may have variable height;
+	//		set the size via style="..." or CSS class names instead.
+	size: 7,
+
+	templateString: "<select multiple='true' ${!nameAttrSetting} dojoAttachPoint='containerNode,focusNode' dojoAttachEvent='onchange: _onChange'></select>",
+
+	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+		size: "focusNode"
+	}),
+
+	reset: function(){
+		// summary:
+		//		Reset the widget's value to what it was at initialization time
+
+		// TODO: once we inherit from FormValueWidget this won't be needed
+		this._hasBeenBlurred = false;
+		this._setValueAttr(this._resetValue, true);
+	},
+
+	addSelected: function(/* dijit.form.MultiSelect */ select){
+		// summary:
+		//		Move the selected nodes of a passed Select widget
+		//		instance to this Select widget.
+		//
+		// example:
+		// |	// move all the selected values from "bar" to "foo"
+		// | 	dijit.byId("foo").addSelected(dijit.byId("bar"));
+
+		select.getSelected().forEach(function(n){
+			this.containerNode.appendChild(n);
+			// scroll to bottom to see item
+			// cannot use scrollIntoView since <option> tags don't support all attributes
+			// does not work on IE due to a bug where <select> always shows scrollTop = 0
+			this.domNode.scrollTop = this.domNode.offsetHeight; // overshoot will be ignored
+			// scrolling the source select is trickier esp. on safari who forgets to change the scrollbar size
+			var oldscroll = select.domNode.scrollTop;
+			select.domNode.scrollTop = 0;
+			select.domNode.scrollTop = oldscroll;
+		},this);
+	},
+
+	getSelected: function(){
+		// summary:
+		//		Access the NodeList of the selected options directly
+		return dojo.query("option",this.containerNode).filter(function(n){
+			return n.selected; // Boolean
+		}); // dojo.NodeList
+	},
+
+	_getValueAttr: function(){
+		// summary:
+		//		Hook so attr('value') works.
+		// description:
+		//		Returns an array of the selected options' values.
+		return this.getSelected().map(function(n){
+			return n.value;
+		});
+	},
+
+	multiple: true, // for Form
+
+	_setValueAttr: function(/* Array */values){
+		// summary:
+		//		Hook so attr('value', values) works.
+		// description:
+		//		Set the value(s) of this Select based on passed values
+		dojo.query("option",this.containerNode).forEach(function(n){
+			n.selected = (dojo.indexOf(values,n.value) != -1);
+		});
+	},
+
+	invertSelection: function(onChange){
+		// summary:
+		//		Invert the selection
+		// onChange: Boolean
+		//		If null, onChange is not fired.
+		dojo.query("option",this.containerNode).forEach(function(n){
+			n.selected = !n.selected;
+		});
+		this._handleOnChange(this.get('value'), onChange == true);
+	},
+
+	_onChange: function(/*Event*/ e){
+		this._handleOnChange(this.get('value'), true);
+	},
+
+	// for layout widgets:
+	resize: function(/* Object */size){
+		if(size){
+			dojo.marginBox(this.domNode, size);
+		}
+	},
+
+	postCreate: function(){
+		this._onChange();
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form.HorizontalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.HorizontalSlider"] = true;
+dojo.provide("dijit.form.HorizontalSlider");
+
+
+
+
+
+
+
+
+dojo.declare(
+	"dijit.form.HorizontalSlider",
+	[dijit.form._FormValueWidget, dijit._Container],
+{
+	// summary:
+	//		A form widget that allows one to select a value with a horizontally draggable handle
+
+	templateString: dojo.cache("dijit.form", "templates/HorizontalSlider.html", "<table class=\"dijit dijitReset dijitSlider dijitSliderH\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"topDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderDecrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><div class=\"dijitReset dijitSliderBarContainerH\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableH\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleH\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderIncrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n"),
+
+	// Overrides FormValueWidget.value to indicate numeric value
+	value: 0,
+
+	// showButtons: Boolean
+	//		Show increment/decrement buttons at the ends of the slider?
+	showButtons: true,
+
+	// minimum:: Integer
+	//		The minimum value the slider can be set to.
+	minimum: 0,
+
+	// maximum: Integer
+	//		The maximum value the slider can be set to.
+	maximum: 100,
+
+	// discreteValues: Integer
+	//		If specified, indicates that the slider handle has only 'discreteValues' possible positions,
+	//      and that after dragging the handle, it will snap to the nearest possible position.
+	//      Thus, the slider has only 'discreteValues' possible values.
+	//
+	//		For example, if minimum=10, maxiumum=30, and discreteValues=3, then the slider handle has
+	//		three possible positions, representing values 10, 20, or 30.
+	//
+	//		If discreteValues is not specified or if it's value is higher than the number of pixels
+	//		in the slider bar, then the slider handle can be moved freely, and the slider's value will be
+	//		computed/reported based on pixel position (in this case it will likely be fractional,
+	//      such as 123.456789).
+	discreteValues: Infinity,
+
+	// pageIncrement: Integer
+	//		If discreteValues is also specified, this indicates the amount of clicks (ie, snap positions)
+	//      that the slider handle is moved via pageup/pagedown keys.
+	//	If discreteValues is not specified, it indicates the number of pixels.
+	pageIncrement: 2,
+
+	// clickSelect: Boolean
+	//		If clicking the slider bar changes the value or not
+	clickSelect: true,
+
+	// slideDuration: Number
+	//		The time in ms to take to animate the slider handle from 0% to 100%,
+	//		when clicking the slider bar to make the handle move.
+	slideDuration: dijit.defaultDuration,
+
+	// Flag to _Templated  (TODO: why is this here?   I see no widgets in the template.)
+	widgetsInTemplate: true,
+
+	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+		id: ""
+	}),
+
+	baseClass: "dijitSlider",
+
+	// Apply CSS classes to up/down arrows and handle per mouse state
+	cssStateNodes: {
+		incrementButton: "dijitSliderIncrementButton",
+		decrementButton: "dijitSliderDecrementButton",
+		focusNode: "dijitSliderThumb"
+	},
+
+	_mousePixelCoord: "pageX",
+	_pixelCount: "w",
+	_startingPixelCoord: "x",
+	_startingPixelCount: "l",
+	_handleOffsetCoord: "left",
+	_progressPixelSize: "width",
+
+	_onKeyUp: function(/*Event*/ e){
+		if(this.disabled || this.readOnly || e.altKey || e.ctrlKey || e.metaKey){ return; }
+		this._setValueAttr(this.value, true);
+	},
+
+	_onKeyPress: function(/*Event*/ e){
+		if(this.disabled || this.readOnly || e.altKey || e.ctrlKey || e.metaKey){ return; }
+		switch(e.charOrCode){
+			case dojo.keys.HOME:
+				this._setValueAttr(this.minimum, false);
+				break;
+			case dojo.keys.END:
+				this._setValueAttr(this.maximum, false);
+				break;
+			// this._descending === false: if ascending vertical (min on top)
+			// (this._descending || this.isLeftToRight()): if left-to-right horizontal or descending vertical
+			case ((this._descending || this.isLeftToRight()) ? dojo.keys.RIGHT_ARROW : dojo.keys.LEFT_ARROW):
+			case (this._descending === false ? dojo.keys.DOWN_ARROW : dojo.keys.UP_ARROW):
+			case (this._descending === false ? dojo.keys.PAGE_DOWN : dojo.keys.PAGE_UP):
+				this.increment(e);
+				break;
+			case ((this._descending || this.isLeftToRight()) ? dojo.keys.LEFT_ARROW : dojo.keys.RIGHT_ARROW):
+			case (this._descending === false ? dojo.keys.UP_ARROW : dojo.keys.DOWN_ARROW):
+			case (this._descending === false ? dojo.keys.PAGE_UP : dojo.keys.PAGE_DOWN):
+				this.decrement(e);
+				break;
+			default:
+				return;
+		}
+		dojo.stopEvent(e);
+	},
+
+	_onHandleClick: function(e){
+		if(this.disabled || this.readOnly){ return; }
+		if(!dojo.isIE){
+			// make sure you get focus when dragging the handle
+			// (but don't do on IE because it causes a flicker on mouse up (due to blur then focus)
+			dijit.focus(this.sliderHandle);
+		}
+		dojo.stopEvent(e);
+	},
+
+	_isReversed: function(){
+		// summary:
+		//		Returns true if direction is from right to left
+		// tags:
+		//		protected extension
+		return !this.isLeftToRight();
+	},
+
+	_onBarClick: function(e){
+		if(this.disabled || this.readOnly || !this.clickSelect){ return; }
+		dijit.focus(this.sliderHandle);
+		dojo.stopEvent(e);
+		var abspos = dojo.position(this.sliderBarContainer, true);
+		var pixelValue = e[this._mousePixelCoord] - abspos[this._startingPixelCoord];
+		this._setPixelValue(this._isReversed() ? (abspos[this._pixelCount] - pixelValue) : pixelValue, abspos[this._pixelCount], true);
+		this._movable.onMouseDown(e);
+	},
+
+	_setPixelValue: function(/*Number*/ pixelValue, /*Number*/ maxPixels, /*Boolean, optional*/ priorityChange){
+		if(this.disabled || this.readOnly){ return; }
+		pixelValue = pixelValue < 0 ? 0 : maxPixels < pixelValue ? maxPixels : pixelValue;
+		var count = this.discreteValues;
+		if(count <= 1 || count == Infinity){ count = maxPixels; }
+		count--;
+		var pixelsPerValue = maxPixels / count;
+		var wholeIncrements = Math.round(pixelValue / pixelsPerValue);
+		this._setValueAttr((this.maximum-this.minimum)*wholeIncrements/count + this.minimum, priorityChange);
+	},
+
+	_setValueAttr: function(/*Number*/ value, /*Boolean, optional*/ priorityChange){
+		// summary:
+		//		Hook so attr('value', value) works.
+		this.valueNode.value = this.value = value;
+		dijit.setWaiState(this.focusNode, "valuenow", value);
+		this.inherited(arguments);
+		var percent = (value - this.minimum) / (this.maximum - this.minimum);
+		var progressBar = (this._descending === false) ? this.remainingBar : this.progressBar;
+		var remainingBar = (this._descending === false) ? this.progressBar : this.remainingBar;
+		if(this._inProgressAnim && this._inProgressAnim.status != "stopped"){
+			this._inProgressAnim.stop(true);
+		}
+		if(priorityChange && this.slideDuration > 0 && progressBar.style[this._progressPixelSize]){
+			// animate the slider
+			var _this = this;
+			var props = {};
+			var start = parseFloat(progressBar.style[this._progressPixelSize]);
+			var duration = this.slideDuration * (percent-start/100);
+			if(duration == 0){ return; }
+			if(duration < 0){ duration = 0 - duration; }
+			props[this._progressPixelSize] = { start: start, end: percent*100, units:"%" };
+			this._inProgressAnim = dojo.animateProperty({ node: progressBar, duration: duration,
+				onAnimate: function(v){ remainingBar.style[_this._progressPixelSize] = (100-parseFloat(v[_this._progressPixelSize])) + "%"; },
+				onEnd: function(){ delete _this._inProgressAnim; },
+				properties: props
+			})
+			this._inProgressAnim.play();
+		}
+		else{
+			progressBar.style[this._progressPixelSize] = (percent*100) + "%";
+			remainingBar.style[this._progressPixelSize] = ((1-percent)*100) + "%";
+		}
+	},
+
+	_bumpValue: function(signedChange, /*Boolean, optional*/ priorityChange){
+		if(this.disabled || this.readOnly){ return; }
+		var s = dojo.getComputedStyle(this.sliderBarContainer);
+		var c = dojo._getContentBox(this.sliderBarContainer, s);
+		var count = this.discreteValues;
+		if(count <= 1 || count == Infinity){ count = c[this._pixelCount]; }
+		count--;
+		var value = (this.value - this.minimum) * count / (this.maximum - this.minimum) + signedChange;
+		if(value < 0){ value = 0; }
+		if(value > count){ value = count; }
+		value = value * (this.maximum - this.minimum) / count + this.minimum;
+		this._setValueAttr(value, priorityChange);
+	},
+
+	_onClkBumper: function(val){
+		if(this.disabled || this.readOnly || !this.clickSelect){ return; }
+		this._setValueAttr(val, true);
+	},
+
+	_onClkIncBumper: function(){
+		this._onClkBumper(this._descending === false ? this.minimum : this.maximum);
+	},
+
+	_onClkDecBumper: function(){
+		this._onClkBumper(this._descending === false ? this.maximum : this.minimum);
+	},
+
+	decrement: function(/*Event*/ e){
+		// summary:
+		//		Decrement slider
+		// tags:
+		//		private
+		this._bumpValue(e.charOrCode == dojo.keys.PAGE_DOWN ? -this.pageIncrement : -1);
+	},
+
+	increment: function(/*Event*/ e){
+		// summary:
+		//		Increment slider
+		// tags:
+		//		private
+		this._bumpValue(e.charOrCode == dojo.keys.PAGE_UP ? this.pageIncrement : 1);
+	},
+
+	_mouseWheeled: function(/*Event*/ evt){
+		// summary:
+		//		Event handler for mousewheel where supported
+		dojo.stopEvent(evt);
+		var janky = !dojo.isMozilla;
+		var scroll = evt[(janky ? "wheelDelta" : "detail")] * (janky ? 1 : -1);
+		this._bumpValue(scroll < 0 ? -1 : 1, true); // negative scroll acts like a decrement
+	},
+
+	startup: function(){
+		if(this._started){ return; }
+
+		dojo.forEach(this.getChildren(), function(child){
+			if(this[child.container] != this.containerNode){
+				this[child.container].appendChild(child.domNode);
+			}
+		}, this);
+
+		this.inherited(arguments);
+	},
+
+	_typematicCallback: function(/*Number*/ count, /*Object*/ button, /*Event*/ e){
+		if(count == -1){
+			this._setValueAttr(this.value, true);
+		}else{
+			this[(button == (this._descending? this.incrementButton : this.decrementButton)) ? "decrement" : "increment"](e);
+		}
+	},
+
+	postCreate: function(){
+		if(this.showButtons){
+			this.incrementButton.style.display="";
+			this.decrementButton.style.display="";
+			this._connects.push(dijit.typematic.addMouseListener(
+				this.decrementButton, this, "_typematicCallback", 25, 500));
+			this._connects.push(dijit.typematic.addMouseListener(
+				this.incrementButton, this, "_typematicCallback", 25, 500));
+		}
+		this.connect(this.domNode, !dojo.isMozilla ? "onmousewheel" : "DOMMouseScroll", "_mouseWheeled");
+
+		// define a custom constructor for a SliderMover that points back to me
+		var mover = dojo.declare(dijit.form._SliderMover, {
+			widget: this
+		});
+
+		this._movable = new dojo.dnd.Moveable(this.sliderHandle, {mover: mover});
+		// find any associated label element and add to slider focusnode.
+		var label=dojo.query('label[for="'+this.id+'"]');
+		if(label.length){
+			label[0].id = (this.id+"_label");
+			dijit.setWaiState(this.focusNode, "labelledby", label[0].id);
+		}
+		dijit.setWaiState(this.focusNode, "valuemin", this.minimum);
+		dijit.setWaiState(this.focusNode, "valuemax", this.maximum);
+
+		this.inherited(arguments);
+		this._layoutHackIE7();
+	},
+
+	destroy: function(){
+		this._movable.destroy();
+		if(this._inProgressAnim && this._inProgressAnim.status != "stopped"){
+			this._inProgressAnim.stop(true);
+		}
+		this._supportingWidgets = dijit.findWidgets(this.domNode); // tells destroy about pseudo-child widgets (ruler/labels)
+		this.inherited(arguments);
+	}
+});
+
+dojo.declare("dijit.form._SliderMover",
+	dojo.dnd.Mover,
+{
+	onMouseMove: function(e){
+		var widget = this.widget;
+		var abspos = widget._abspos;
+		if(!abspos){
+			abspos = widget._abspos = dojo.position(widget.sliderBarContainer, true);
+			widget._setPixelValue_ = dojo.hitch(widget, "_setPixelValue");
+			widget._isReversed_ = widget._isReversed();
+		}
+		var pixelValue = e[widget._mousePixelCoord] - abspos[widget._startingPixelCoord];
+		widget._setPixelValue_(widget._isReversed_ ? (abspos[widget._pixelCount]-pixelValue) : pixelValue, abspos[widget._pixelCount], false);
+	},
+
+	destroy: function(e){
+		dojo.dnd.Mover.prototype.destroy.apply(this, arguments);
+		var widget = this.widget;
+		widget._abspos = null;
+		widget._setValueAttr(widget.value, true);
+	}
+});
+
+
+
+}
+
+if(!dojo._hasResource["dijit.form.VerticalSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.VerticalSlider"] = true;
+dojo.provide("dijit.form.VerticalSlider");
+
+
+
+dojo.declare(
+	"dijit.form.VerticalSlider",
+	dijit.form.HorizontalSlider,
+{
+	// summary:
+	//		A form widget that allows one to select a value with a vertically draggable handle
+
+	templateString: dojo.cache("dijit.form", "templates/VerticalSlider.html", "<table class=\"dijit dijitReset dijitSlider dijitSliderV\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderIncrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><center class=\"dijitReset dijitSliderBarContainerV\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"><!--#5629--></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableV\" style=\"vertical-align:top;\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleV\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderDecrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></table>\n"),
+	_mousePixelCoord: "pageY",
+	_pixelCount: "h",
+	_startingPixelCoord: "y",
+	_startingPixelCount: "t",
+	_handleOffsetCoord: "top",
+	_progressPixelSize: "height",
+
+	// _descending: Boolean
+	//	   Specifies if the slider values go from high-on-top (true), or low-on-top (false)
+	//	TODO: expose this in 1.2 - the css progress/remaining bar classes need to be reversed
+	_descending: true,
+
+	_isReversed: function(){
+		// summary:
+		//		Overrides HorizontalSlider._isReversed.
+		//		Indicates if values are high on top (with low numbers on the bottom).
+		return this._descending;
+	}
+});
+
+
+}
+
+if(!dojo._hasResource["dijit.form.HorizontalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.HorizontalRule"] = true;
+dojo.provide("dijit.form.HorizontalRule");
+
+
+
+
+dojo.declare("dijit.form.HorizontalRule", [dijit._Widget, dijit._Templated],
+{
+	// summary:
+	//		Hash marks for `dijit.form.HorizontalSlider`
+
+	templateString: '<div class="dijitRuleContainer dijitRuleContainerH"></div>',
+
+	// count: Integer
+	//		Number of hash marks to generate
+	count: 3,
+
+	// container: String
+	//		For HorizontalSlider, this is either "topDecoration" or "bottomDecoration",
+	//		and indicates whether this rule goes above or below the slider.
+	container: "containerNode",
+
+	// ruleStyle: String
+	//		CSS style to apply to individual hash marks
+	ruleStyle: "",
+
+	_positionPrefix: '<div class="dijitRuleMark dijitRuleMarkH" style="left:',
+	_positionSuffix: '%;',
+	_suffix: '"></div>',
+
+	_genHTML: function(pos, ndx){
+		return this._positionPrefix + pos + this._positionSuffix + this.ruleStyle + this._suffix;
+	},
+
+	// _isHorizontal: [protected extension] Boolean
+	//		VerticalRule will override this...
+	_isHorizontal: true,
+
+	postCreate: function(){
+		var innerHTML;
+		if(this.count == 1){
+			innerHTML = this._genHTML(50, 0);
+		}else{
+			var i;
+			var interval = 100 / (this.count-1);
+			if(!this._isHorizontal || this.isLeftToRight()){
+				innerHTML = this._genHTML(0, 0);
+				for(i=1; i < this.count-1; i++){
+					innerHTML += this._genHTML(interval*i, i);
+				}
+				innerHTML += this._genHTML(100, this.count-1);
+			}else{
+				innerHTML = this._genHTML(100, 0);
+				for(i=1; i < this.count-1; i++){
+					innerHTML += this._genHTML(100-interval*i, i);
+				}
+				innerHTML += this._genHTML(0, this.count-1);
+			}
+		}
+		this.domNode.innerHTML = innerHTML;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form.VerticalRule"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.VerticalRule"] = true;
+dojo.provide("dijit.form.VerticalRule");
+
+
+
+dojo.declare("dijit.form.VerticalRule", dijit.form.HorizontalRule,
+{
+	// summary:
+	//		Hash marks for the `dijit.form.VerticalSlider`
+
+	templateString: '<div class="dijitRuleContainer dijitRuleContainerV"></div>',
+	_positionPrefix: '<div class="dijitRuleMark dijitRuleMarkV" style="top:',
+
+/*=====
+	// container: String
+	//		This is either "leftDecoration" or "rightDecoration",
+	//		to indicate whether this rule goes to the left or to the right of the slider.
+	//		Note that on RTL system, "leftDecoration" would actually go to the right, and vice-versa.
+	container: "",
+=====*/
+
+	// Overrides HorizontalRule._isHorizontal
+	_isHorizontal: false
+
+});
+
+
+}
+
+if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.HorizontalRuleLabels"] = true;
+dojo.provide("dijit.form.HorizontalRuleLabels");
+
+
+
+dojo.declare("dijit.form.HorizontalRuleLabels", dijit.form.HorizontalRule,
+{
+	// summary:
+	//		Labels for `dijit.form.HorizontalSlider`
+
+	templateString: '<div class="dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH"></div>',
+
+	// labelStyle: String
+	//		CSS style to apply to individual text labels
+	labelStyle: "",
+
+	// labels: String[]?
+	//		Array of text labels to render - evenly spaced from left-to-right or bottom-to-top.
+	//		Alternately, minimum and maximum can be specified, to get numeric labels.
+	labels: [],
+
+	// numericMargin: Integer
+	//		Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
+	numericMargin: 0,
+
+	// numericMinimum: Integer
+	//		Leftmost label value for generated numeric labels when labels[] are not specified
+	minimum: 0,
+
+	// numericMaximum: Integer
+	//		Rightmost label value for generated numeric labels when labels[] are not specified
+	maximum: 1,
+
+	// constraints: Object
+	//		pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
+	constraints: {pattern:"#%"},
+
+	_positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerH" style="left:',
+	_labelPrefix: '"><div class="dijitRuleLabel dijitRuleLabelH">',
+	_suffix: '</div></div>',
+
+	_calcPosition: function(pos){
+		// summary:
+		//		Returns the value to be used in HTML for the label as part of the left: attribute
+		// tags:
+		//		protected extension
+		return pos;
+	},
+
+	_genHTML: function(pos, ndx){
+		return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle + this._labelPrefix + this.labels[ndx] + this._suffix;
+	},
+
+	getLabels: function(){
+		// summary:
+		//		Overridable function to return array of labels to use for this slider.
+		//		Can specify a getLabels() method instead of a labels[] array, or min/max attributes.
+		// tags:
+		//		protected extension
+
+		// if the labels array was not specified directly, then see if <li> children were
+		var labels = this.labels;
+		if(!labels.length){
+			// for markup creation, labels are specified as child elements
+			labels = dojo.query("> li", this.srcNodeRef).map(function(node){
+				return String(node.innerHTML);
+			});
+		}
+		this.srcNodeRef.innerHTML = '';
+		// if the labels were not specified directly and not as <li> children, then calculate numeric labels
+		if(!labels.length && this.count > 1){
+			var start = this.minimum;
+			var inc = (this.maximum - start) / (this.count-1);
+			for(var i=0; i < this.count; i++){
+				labels.push((i < this.numericMargin || i >= (this.count-this.numericMargin)) ? '' : dojo.number.format(start, this.constraints));
+				start += inc;
+			}
+		}
+		return labels;
+	},
+
+	postMixInProperties: function(){
+		this.inherited(arguments);
+		this.labels = this.getLabels();
+		this.count = this.labels.length;
+	}
+});
+
+
+
+}
+
+if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.VerticalRuleLabels"] = true;
+dojo.provide("dijit.form.VerticalRuleLabels");
+
+
+
+dojo.declare("dijit.form.VerticalRuleLabels", dijit.form.HorizontalRuleLabels,
+{
+	// summary:
+	//		Labels for the `dijit.form.VerticalSlider`
+
+	templateString: '<div class="dijitRuleContainer dijitRuleContainerV dijitRuleLabelsContainer dijitRuleLabelsContainerV"></div>',
+
+	_positionPrefix: '<div class="dijitRuleLabelContainer dijitRuleLabelContainerV" style="top:',
+	_labelPrefix: '"><span class="dijitRuleLabel dijitRuleLabelV">',
+
+	_calcPosition: function(pos){
+		// Overrides HorizontalRuleLabel._calcPosition()
+		return 100-pos;
+	},
+
+	// needed to prevent labels from being reversed in RTL mode
+	_isHorizontal: false
+});
+
+}
+
+if(!dojo._hasResource["dijit.form.SimpleTextarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.SimpleTextarea"] = true;
+dojo.provide("dijit.form.SimpleTextarea");
+
+
+
+dojo.declare("dijit.form.SimpleTextarea",
+	dijit.form.TextBox,
+	{
+	// summary:
+	//		A simple textarea that degrades, and responds to
+	// 		minimal LayoutContainer usage, and works with dijit.form.Form.
+	//		Doesn't automatically size according to input, like Textarea.
+	//
+	// example:
+	//	|	<textarea dojoType="dijit.form.SimpleTextarea" name="foo" value="bar" rows=30 cols=40></textarea>
+	//
+	// example:
+	//	|	new dijit.form.SimpleTextarea({ rows:20, cols:30 }, "foo");
+
+	baseClass: "dijitTextBox dijitTextArea",
+
+	attributeMap: dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap, {
+		rows:"textbox", cols: "textbox"
+	}),
+
+	// rows: Number
+	//		The number of rows of text.
+	rows: "3",
+
+	// rows: Number
+	//		The number of characters per line.
+	cols: "20",
+
+	templateString: "<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",
+
+	postMixInProperties: function(){
+		// Copy value from srcNodeRef, unless user specified a value explicitly (or there is no srcNodeRef)
+		if(!this.value && this.srcNodeRef){
+			this.value = this.srcNodeRef.value;
+		}
+		this.inherited(arguments);
+	},
+
+	filter: function(/*String*/ value){
+		// Override TextBox.filter to deal with newlines... specifically (IIRC) this is for IE which writes newlines
+		// as \r\n instead of just \n
+		if(value){
+			value = value.replace(/\r/g,"");
+		}
+		return this.inherited(arguments);
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6
+			dojo.addClass(this.textbox, "dijitTextAreaCols");
+		}
+	},
+
+	_previousValue: "",
+	_onInput: function(/*Event?*/ e){
+		// Override TextBox._onInput() to enforce maxLength restriction
+		if(this.maxLength){
+			var maxLength = parseInt(this.maxLength);
+			var value = this.textbox.value.replace(/\r/g,'');
+			var overflow = value.length - maxLength;
+			if(overflow > 0){
+				if(e){ dojo.stopEvent(e); }
+				var textarea = this.textbox;
+				if(textarea.selectionStart){
+					var pos = textarea.selectionStart;
+					var cr = 0;
+					if(dojo.isOpera){
+						cr = (this.textbox.value.substring(0,pos).match(/\r/g) || []).length;
+					}
+					this.textbox.value = value.substring(0,pos-overflow-cr)+value.substring(pos-cr);
+					textarea.setSelectionRange(pos-overflow, pos-overflow);
+				}else if(dojo.doc.selection){ //IE
+					textarea.focus();
+					var range = dojo.doc.selection.createRange();
+					// delete overflow characters
+					range.moveStart("character", -overflow);
+					range.text = '';
+					// show cursor
+					range.select();
+				}
+			}
+			this._previousValue = this.textbox.value;
+		}
+		this.inherited(arguments);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form.Textarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form.Textarea"] = true;
+dojo.provide("dijit.form.Textarea");
+
+
+
+dojo.declare(
+	"dijit.form.Textarea",
+	dijit.form.SimpleTextarea,
+	{
+	// summary:
+	//		A textarea widget that adjusts it's height according to the amount of data.
+	//
+	// description:
+	//		A textarea that dynamically expands/contracts (changing it's height) as
+	//		the user types, to display all the text without requiring a scroll bar.
+	//
+	//		Takes nearly all the parameters (name, value, etc.) that a vanilla textarea takes.
+	//		Rows is not supported since this widget adjusts the height.
+	//
+	// example:
+	// |	<textarea dojoType="dijit.form.TextArea">...</textarea>
+
+
+	// Override SimpleTextArea.cols to default to width:100%, for backward compatibility
+	cols: "",
+
+	_previousNewlines: 0,
+	_strictMode: (dojo.doc.compatMode != 'BackCompat'), // not the same as !dojo.isQuirks
+
+	_getHeight: function(textarea){
+		var newH = textarea.scrollHeight;
+		if(dojo.isIE){
+			newH += textarea.offsetHeight - textarea.clientHeight - ((dojo.isIE < 8 && this._strictMode) ? dojo._getPadBorderExtents(textarea).h : 0);
+		}else if(dojo.isMoz){
+			newH += textarea.offsetHeight - textarea.clientHeight; // creates room for horizontal scrollbar
+		}else if(dojo.isWebKit && !(dojo.isSafari < 4)){ // Safari 4.0 && Chrome
+			newH += dojo._getBorderExtents(textarea).h;
+		}else{ // Safari 3.x and Opera 9.6
+			newH += dojo._getPadBorderExtents(textarea).h;
+		}
+		return newH;
+	},
+
+	_estimateHeight: function(textarea){
+		// summary:
+		// 		Approximate the height when the textarea is invisible with the number of lines in the text.
+		// 		Fails when someone calls setValue with a long wrapping line, but the layout fixes itself when the user clicks inside so . . .
+		// 		In IE, the resize event is supposed to fire when the textarea becomes visible again and that will correct the size automatically.
+		//
+		textarea.style.maxHeight = "";
+		textarea.style.height = "auto";
+		// #rows = #newlines+1
+		// Note: on Moz, the following #rows appears to be 1 too many.
+		// Actually, Moz is reserving room for the scrollbar.
+		// If you increase the font size, this behavior becomes readily apparent as the last line gets cut off without the +1.
+		textarea.rows = (textarea.value.match(/\n/g) || []).length + 1;
+	},
+
+	_needsHelpShrinking: dojo.isMoz || dojo.isWebKit,
+
+	_onInput: function(){
+		// Override SimpleTextArea._onInput() to deal with height adjustment
+		this.inherited(arguments);
+		if(this._busyResizing){ return; }
+		this._busyResizing = true;
+		var textarea = this.textbox;
+		if(textarea.scrollHeight && textarea.offsetHeight && textarea.clientHeight){
+			var newH = this._getHeight(textarea) + "px";
+			if(textarea.style.height != newH){
+				textarea.style.maxHeight = textarea.style.height = newH;
+			}
+			if(this._needsHelpShrinking){
+				if(this._setTimeoutHandle){
+					clearTimeout(this._setTimeoutHandle);
+				}
+				this._setTimeoutHandle = setTimeout(dojo.hitch(this, "_shrink"), 0); // try to collapse multiple shrinks into 1
+			}
+		}else{
+			// hidden content of unknown size
+			this._estimateHeight(textarea);
+		}
+		this._busyResizing = false;
+	},
+
+	_busyResizing: false,
+	_shrink: function(){
+		// grow paddingBottom to see if scrollHeight shrinks (when it is unneccesarily big)
+		this._setTimeoutHandle = null;
+		if(this._needsHelpShrinking && !this._busyResizing){
+			this._busyResizing = true;
+			var textarea = this.textbox;
+			var empty = false;
+			if(textarea.value == ''){
+				textarea.value = ' '; // prevent collapse all the way back to 0
+				empty = true;
+			}
+			var scrollHeight = textarea.scrollHeight;
+			if(!scrollHeight){
+				this._estimateHeight(textarea);
+			}else{
+				var oldPadding = textarea.style.paddingBottom;
+				var newPadding = dojo._getPadExtents(textarea);
+				newPadding = newPadding.h - newPadding.t;
+				textarea.style.paddingBottom = newPadding + 1 + "px"; // tweak padding to see if height can be reduced
+				var newH = this._getHeight(textarea) - 1 + "px"; // see if the height changed by the 1px added
+				if(textarea.style.maxHeight != newH){ // if can be reduced, so now try a big chunk
+					textarea.style.paddingBottom = newPadding + scrollHeight + "px";
+					textarea.scrollTop = 0;
+					textarea.style.maxHeight = this._getHeight(textarea) - scrollHeight + "px"; // scrollHeight is the added padding
+				}
+				textarea.style.paddingBottom = oldPadding;
+			}
+			if(empty){
+				textarea.value = '';
+			}
+			this._busyResizing = false;
+		}
+	},
+
+	resize: function(){
+		// summary:
+		//		Resizes the textarea vertically (should be called after a style/value change)
+		this._onInput();
+	},
+
+	_setValueAttr: function(){
+		this.inherited(arguments);
+		this.resize();
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		// tweak textarea style to reduce browser differences
+		dojo.style(this.textbox, { overflowY: 'hidden', overflowX: 'auto', boxSizing: 'border-box', MsBoxSizing: 'border-box', WebkitBoxSizing: 'border-box', MozBoxSizing: 'border-box' });
+		this.connect(this.textbox, "onscroll", this._onInput);
+		this.connect(this.textbox, "onresize", this._onInput);
+		this.connect(this.textbox, "onfocus", this._onInput); // useful when a previous estimate was off a bit
+		this._setTimeoutHandle = setTimeout(dojo.hitch(this, "resize"), 0);
+	},
+
+	uninitialize: function(){
+		if(this._setTimeoutHandle){
+			clearTimeout(this._setTimeoutHandle);
+		}
+		this.inherited(arguments);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.StackController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.StackController"] = true;
+dojo.provide("dijit.layout.StackController");
+
+
+
+
+
+
+
+dojo.declare(
+		"dijit.layout.StackController",
+		[dijit._Widget, dijit._Templated, dijit._Container],
+		{
+			// summary:
+			//		Set of buttons to select a page in a page list.
+			// description:
+			//		Monitors the specified StackContainer, and whenever a page is
+			//		added, deleted, or selected, updates itself accordingly.
+
+			templateString: "<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
+
+			// containerId: [const] String
+			//		The id of the page container that I point to
+			containerId: "",
+
+			// buttonWidget: [const] String
+			//		The name of the button widget to create to correspond to each page
+			buttonWidget: "dijit.layout._StackButton",
+
+			postCreate: function(){
+				dijit.setWaiRole(this.domNode, "tablist");
+
+				this.pane2button = {};		// mapping from pane id to buttons
+				this.pane2handles = {};		// mapping from pane id to this.connect() handles
+
+				// Listen to notifications from StackContainer
+				this.subscribe(this.containerId+"-startup", "onStartup");
+				this.subscribe(this.containerId+"-addChild", "onAddChild");
+				this.subscribe(this.containerId+"-removeChild", "onRemoveChild");
+				this.subscribe(this.containerId+"-selectChild", "onSelectChild");
+				this.subscribe(this.containerId+"-containerKeyPress", "onContainerKeyPress");
+			},
+
+			onStartup: function(/*Object*/ info){
+				// summary:
+				//		Called after StackContainer has finished initializing
+				// tags:
+				//		private
+				dojo.forEach(info.children, this.onAddChild, this);
+				if(info.selected){
+					// Show button corresponding to selected pane (unless selected
+					// is null because there are no panes)
+					this.onSelectChild(info.selected);
+				}
+			},
+
+			destroy: function(){
+				for(var pane in this.pane2button){
+					this.onRemoveChild(dijit.byId(pane));
+				}
+				this.inherited(arguments);
+			},
+
+			onAddChild: function(/*dijit._Widget*/ page, /*Integer?*/ insertIndex){
+				// summary:
+				//		Called whenever a page is added to the container.
+				//		Create button corresponding to the page.
+				// tags:
+				//		private
+
+				// create an instance of the button widget
+				var cls = dojo.getObject(this.buttonWidget);
+				var button = new cls({
+					id: this.id + "_" + page.id,
+					label: page.title,
+					dir: page.dir,
+					lang: page.lang,
+					showLabel: page.showTitle,
+					iconClass: page.iconClass,
+					closeButton: page.closable,
+					title: page.tooltip
+				});
+				dijit.setWaiState(button.focusNode,"selected", "false");
+				this.pane2handles[page.id] = [
+					this.connect(page, 'set', function(name, value){
+						var buttonAttr = {
+							title: 'label',
+							showTitle: 'showLabel',
+							iconClass: 'iconClass',
+							closable: 'closeButton',
+							tooltip: 'title'
+						}[name];
+						if(buttonAttr){
+							button.set(buttonAttr, value);
+						}
+					}),
+					this.connect(button, 'onClick', dojo.hitch(this,"onButtonClick", page)),
+					this.connect(button, 'onClickCloseButton', dojo.hitch(this,"onCloseButtonClick", page))
+				];
+				this.addChild(button, insertIndex);
+				this.pane2button[page.id] = button;
+				page.controlButton = button;	// this value might be overwritten if two tabs point to same container
+				if(!this._currentChild){ // put the first child into the tab order
+					button.focusNode.setAttribute("tabIndex", "0");
+					dijit.setWaiState(button.focusNode, "selected", "true");
+					this._currentChild = page;
+				}
+				// make sure all tabs have the same length
+				if(!this.isLeftToRight() && dojo.isIE && this._rectifyRtlTabList){
+					this._rectifyRtlTabList();
+				}
+			},
+
+			onRemoveChild: function(/*dijit._Widget*/ page){
+				// summary:
+				//		Called whenever a page is removed from the container.
+				//		Remove the button corresponding to the page.
+				// tags:
+				//		private
+
+				if(this._currentChild === page){ this._currentChild = null; }
+				dojo.forEach(this.pane2handles[page.id], this.disconnect, this);
+				delete this.pane2handles[page.id];
+				var button = this.pane2button[page.id];
+				if(button){
+					this.removeChild(button);
+					delete this.pane2button[page.id];
+					button.destroy();
+				}
+				delete page.controlButton;
+			},
+
+			onSelectChild: function(/*dijit._Widget*/ page){
+				// summary:
+				//		Called when a page has been selected in the StackContainer, either by me or by another StackController
+				// tags:
+				//		private
+
+				if(!page){ return; }
+
+				if(this._currentChild){
+					var oldButton=this.pane2button[this._currentChild.id];
+					oldButton.set('checked', false);
+					dijit.setWaiState(oldButton.focusNode, "selected", "false");
+					oldButton.focusNode.setAttribute("tabIndex", "-1");
+				}
+
+				var newButton=this.pane2button[page.id];
+				newButton.set('checked', true);
+				dijit.setWaiState(newButton.focusNode, "selected", "true");
+				this._currentChild = page;
+				newButton.focusNode.setAttribute("tabIndex", "0");
+				var container = dijit.byId(this.containerId);
+				dijit.setWaiState(container.containerNode, "labelledby", newButton.id);
+			},
+
+			onButtonClick: function(/*dijit._Widget*/ page){
+				// summary:
+				//		Called whenever one of my child buttons is pressed in an attempt to select a page
+				// tags:
+				//		private
+
+				var container = dijit.byId(this.containerId);
+				container.selectChild(page);
+			},
+
+			onCloseButtonClick: function(/*dijit._Widget*/ page){
+				// summary:
+				//		Called whenever one of my child buttons [X] is pressed in an attempt to close a page
+				// tags:
+				//		private
+
+				var container = dijit.byId(this.containerId);
+				container.closeChild(page);
+				if(this._currentChild){
+					var b = this.pane2button[this._currentChild.id];
+					if(b){
+						dijit.focus(b.focusNode || b.domNode);
+					}
+				}
+			},
+
+			// TODO: this is a bit redundant with forward, back api in StackContainer
+			adjacent: function(/*Boolean*/ forward){
+				// summary:
+				//		Helper for onkeypress to find next/previous button
+				// tags:
+				//		private
+
+				if(!this.isLeftToRight() && (!this.tabPosition || /top|bottom/.test(this.tabPosition))){ forward = !forward; }
+				// find currently focused button in children array
+				var children = this.getChildren();
+				var current = dojo.indexOf(children, this.pane2button[this._currentChild.id]);
+				// pick next button to focus on
+				var offset = forward ? 1 : children.length - 1;
+				return children[ (current + offset) % children.length ]; // dijit._Widget
+			},
+
+			onkeypress: function(/*Event*/ e){
+				// summary:
+				//		Handle keystrokes on the page list, for advancing to next/previous button
+				//		and closing the current page if the page is closable.
+				// tags:
+				//		private
+
+				if(this.disabled || e.altKey ){ return; }
+				var forward = null;
+				if(e.ctrlKey || !e._djpage){
+					var k = dojo.keys;
+					switch(e.charOrCode){
+						case k.LEFT_ARROW:
+						case k.UP_ARROW:
+							if(!e._djpage){ forward = false; }
+							break;
+						case k.PAGE_UP:
+							if(e.ctrlKey){ forward = false; }
+							break;
+						case k.RIGHT_ARROW:
+						case k.DOWN_ARROW:
+							if(!e._djpage){ forward = true; }
+							break;
+						case k.PAGE_DOWN:
+							if(e.ctrlKey){ forward = true; }
+							break;
+						case k.DELETE:
+							if(this._currentChild.closable){
+								this.onCloseButtonClick(this._currentChild);
+							}
+							dojo.stopEvent(e);
+							break;
+						default:
+							if(e.ctrlKey){
+								if(e.charOrCode === k.TAB){
+									this.adjacent(!e.shiftKey).onClick();
+									dojo.stopEvent(e);
+								}else if(e.charOrCode == "w"){
+									if(this._currentChild.closable){
+										this.onCloseButtonClick(this._currentChild);
+									}
+									dojo.stopEvent(e); // avoid browser tab closing.
+								}
+							}
+					}
+					// handle page navigation
+					if(forward !== null){
+						this.adjacent(forward).onClick();
+						dojo.stopEvent(e);
+					}
+				}
+			},
+
+			onContainerKeyPress: function(/*Object*/ info){
+				// summary:
+				//		Called when there was a keypress on the container
+				// tags:
+				//		private
+				info.e._djpage = info.page;
+				this.onkeypress(info.e);
+			}
+	});
+
+
+dojo.declare("dijit.layout._StackButton",
+		dijit.form.ToggleButton,
+		{
+		// summary:
+		//		Internal widget used by StackContainer.
+		// description:
+		//		The button-like or tab-like object you click to select or delete a page
+		// tags:
+		//		private
+
+		// Override _FormWidget.tabIndex.
+		// StackContainer buttons are not in the tab order by default.
+		// Probably we should be calling this.startupKeyNavChildren() instead.
+		tabIndex: "-1",
+
+		postCreate: function(/*Event*/ evt){
+			dijit.setWaiRole((this.focusNode || this.domNode), "tab");
+			this.inherited(arguments);
+		},
+
+		onClick: function(/*Event*/ evt){
+			// summary:
+			//		This is for TabContainer where the tabs are <span> rather than button,
+			//		so need to set focus explicitly (on some browsers)
+			//		Note that you shouldn't override this method, but you can connect to it.
+			dijit.focus(this.focusNode);
+
+			// ... now let StackController catch the event and tell me what to do
+		},
+
+		onClickCloseButton: function(/*Event*/ evt){
+			// summary:
+			//		StackContainer connects to this function; if your widget contains a close button
+			//		then clicking it should call this function.
+			//		Note that you shouldn't override this method, but you can connect to it.
+			evt.stopPropagation();
+		}
+	});
+
+
+}
+
+if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.StackContainer"] = true;
+dojo.provide("dijit.layout.StackContainer");
+
+
+
+
+
+
+dojo.declare(
+	"dijit.layout.StackContainer",
+	dijit.layout._LayoutWidget,
+	{
+	// summary:
+	//		A container that has multiple children, but shows only
+	//		one child at a time
+	//
+	// description:
+	//		A container for widgets (ContentPanes, for example) That displays
+	//		only one Widget at a time.
+	//
+	//		Publishes topics [widgetId]-addChild, [widgetId]-removeChild, and [widgetId]-selectChild
+	//
+	//		Can be base class for container, Wizard, Show, etc.
+
+	// doLayout: Boolean
+	//		If true, change the size of my currently displayed child to match my size
+	doLayout: true,
+
+	// persist: Boolean
+	//		Remembers the selected child across sessions
+	persist: false,
+
+	baseClass: "dijitStackContainer",
+
+/*=====
+	// selectedChildWidget: [readonly] dijit._Widget
+	//		References the currently selected child widget, if any.
+	//		Adjust selected child with selectChild() method.
+	selectedChildWidget: null,
+=====*/
+
+	postCreate: function(){
+		this.inherited(arguments);
+		dojo.addClass(this.domNode, "dijitLayoutContainer");
+		dijit.setWaiRole(this.containerNode, "tabpanel");
+		this.connect(this.domNode, "onkeypress", this._onKeyPress);
+	},
+
+	startup: function(){
+		if(this._started){ return; }
+
+		var children = this.getChildren();
+
+		// Setup each page panel to be initially hidden
+		dojo.forEach(children, this._setupChild, this);
+
+		// Figure out which child to initially display, defaulting to first one
+		if(this.persist){
+			this.selectedChildWidget = dijit.byId(dojo.cookie(this.id + "_selectedChild"));
+		}else{
+			dojo.some(children, function(child){
+				if(child.selected){
+					this.selectedChildWidget = child;
+				}
+				return child.selected;
+			}, this);
+		}
+		var selected = this.selectedChildWidget;
+		if(!selected && children[0]){
+			selected = this.selectedChildWidget = children[0];
+			selected.selected = true;
+		}
+
+		// Publish information about myself so any StackControllers can initialize.
+		// This needs to happen before this.inherited(arguments) so that for
+		// TabContainer, this._contentBox doesn't include the space for the tab labels.
+		dojo.publish(this.id+"-startup", [{children: children, selected: selected}]);
+
+		// Startup each child widget, and do initial layout like setting this._contentBox,
+		// then calls this.resize() which does the initial sizing on the selected child.
+		this.inherited(arguments);
+	},
+
+	resize: function(){
+		// Resize is called when we are first made visible (it's called from startup()
+		// if we are initially visible).   If this is the first time we've been made
+		// visible then show our first child.
+		var selected = this.selectedChildWidget;
+		if(selected && !this._hasBeenShown){
+			this._hasBeenShown = true;
+			this._showChild(selected);
+		}
+		this.inherited(arguments);
+	},
+
+	_setupChild: function(/*dijit._Widget*/ child){
+		// Overrides _LayoutWidget._setupChild()
+
+		this.inherited(arguments);
+
+		dojo.removeClass(child.domNode, "dijitVisible");
+		dojo.addClass(child.domNode, "dijitHidden");
+
+		// remove the title attribute so it doesn't show up when i hover
+		// over a node
+		child.domNode.title = "";
+	},
+
+	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+		// Overrides _Container.addChild() to do layout and publish events
+
+		this.inherited(arguments);
+
+		if(this._started){
+			dojo.publish(this.id+"-addChild", [child, insertIndex]);
+
+			// in case the tab titles have overflowed from one line to two lines
+			// (or, if this if first child, from zero lines to one line)
+			// TODO: w/ScrollingTabController this is no longer necessary, although
+			// ScrollTabController.resize() does need to get called to show/hide
+			// the navigation buttons as appropriate, but that's handled in ScrollingTabController.onAddChild()
+			this.layout();
+
+			// if this is the first child, then select it
+			if(!this.selectedChildWidget){
+				this.selectChild(child);
+			}
+		}
+	},
+
+	removeChild: function(/*dijit._Widget*/ page){
+		// Overrides _Container.removeChild() to do layout and publish events
+
+		this.inherited(arguments);
+
+		if(this._started){
+			// this will notify any tablists to remove a button; do this first because it may affect sizing
+			dojo.publish(this.id + "-removeChild", [page]);
+		}
+
+		// If we are being destroyed than don't run the code below (to select another page), because we are deleting
+		// every page one by one
+		if(this._beingDestroyed){ return; }
+
+		// Select new page to display, also updating TabController to show the respective tab.
+		// Do this before layout call because it can affect the height of the TabController.
+		if(this.selectedChildWidget === page){
+			this.selectedChildWidget = undefined;
+			if(this._started){
+				var children = this.getChildren();
+				if(children.length){
+					this.selectChild(children[0]);
+				}
+			}
+		}
+
+		if(this._started){
+			// In case the tab titles now take up one line instead of two lines
+			// (note though that ScrollingTabController never overflows to multiple lines),
+			// or the height has changed slightly because of addition/removal of tab which close icon
+			this.layout();
+		}
+	},
+
+	selectChild: function(/*dijit._Widget|String*/ page, /*Boolean*/ animate){
+		// summary:
+		//		Show the given widget (which must be one of my children)
+		// page:
+		//		Reference to child widget or id of child widget
+
+		page = dijit.byId(page);
+
+		if(this.selectedChildWidget != page){
+			// Deselect old page and select new one
+			this._transition(page, this.selectedChildWidget, animate);
+			this.selectedChildWidget = page;
+			dojo.publish(this.id+"-selectChild", [page]);
+
+			if(this.persist){
+				dojo.cookie(this.id + "_selectedChild", this.selectedChildWidget.id);
+			}
+		}
+	},
+
+	_transition: function(/*dijit._Widget*/newWidget, /*dijit._Widget*/oldWidget){
+		// summary:
+		//		Hide the old widget and display the new widget.
+		//		Subclasses should override this.
+		// tags:
+		//		protected extension
+		if(oldWidget){
+			this._hideChild(oldWidget);
+		}
+		this._showChild(newWidget);
+
+		// Size the new widget, in case this is the first time it's being shown,
+		// or I have been resized since the last time it was shown.
+		// Note that page must be visible for resizing to work.
+		if(newWidget.resize){
+			if(this.doLayout){
+				newWidget.resize(this._containerContentBox || this._contentBox);
+			}else{
+				// the child should pick it's own size but we still need to call resize()
+				// (with no arguments) to let the widget lay itself out
+				newWidget.resize();
+			}
+		}
+	},
+
+	_adjacent: function(/*Boolean*/ forward){
+		// summary:
+		//		Gets the next/previous child widget in this container from the current selection.
+		var children = this.getChildren();
+		var index = dojo.indexOf(children, this.selectedChildWidget);
+		index += forward ? 1 : children.length - 1;
+		return children[ index % children.length ]; // dijit._Widget
+	},
+
+	forward: function(){
+		// summary:
+		//		Advance to next page.
+		this.selectChild(this._adjacent(true), true);
+	},
+
+	back: function(){
+		// summary:
+		//		Go back to previous page.
+		this.selectChild(this._adjacent(false), true);
+	},
+
+	_onKeyPress: function(e){
+		dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]);
+	},
+
+	layout: function(){
+		// Implement _LayoutWidget.layout() virtual method.
+		if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){
+			this.selectedChildWidget.resize(this._containerContentBox || this._contentBox);
+		}
+	},
+
+	_showChild: function(/*dijit._Widget*/ page){
+		// summary:
+		//		Show the specified child by changing it's CSS, and call _onShow()/onShow() so
+		//		it can do any updates it needs regarding loading href's etc.
+		var children = this.getChildren();
+		page.isFirstChild = (page == children[0]);
+		page.isLastChild = (page == children[children.length-1]);
+		page.selected = true;
+
+		dojo.removeClass(page.domNode, "dijitHidden");
+		dojo.addClass(page.domNode, "dijitVisible");
+
+		page._onShow();
+	},
+
+	_hideChild: function(/*dijit._Widget*/ page){
+		// summary:
+		//		Hide the specified child by changing it's CSS, and call _onHide() so
+		//		it's notified.
+		page.selected=false;
+		dojo.removeClass(page.domNode, "dijitVisible");
+		dojo.addClass(page.domNode, "dijitHidden");
+
+		page.onHide();
+	},
+
+	closeChild: function(/*dijit._Widget*/ page){
+		// summary:
+		//		Callback when user clicks the [X] to remove a page.
+		//		If onClose() returns true then remove and destroy the child.
+		// tags:
+		//		private
+		var remove = page.onClose(this, page);
+		if(remove){
+			this.removeChild(page);
+			// makes sure we can clean up executeScripts in ContentPane onUnLoad
+			page.destroyRecursive();
+		}
+	},
+
+	destroyDescendants: function(/*Boolean*/preserveDom){
+		dojo.forEach(this.getChildren(), function(child){
+			this.removeChild(child);
+			child.destroyRecursive(preserveDom);
+		}, this);
+	}
+});
+
+// For back-compat, remove for 2.0
+
+
+
+// These arguments can be specified for the children of a StackContainer.
+// Since any widget can be specified as a StackContainer child, mix them
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+	// selected: Boolean
+	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
+	//		Specifies that this widget should be the initially displayed pane.
+	//		Note: to change the selected child use `dijit.layout.StackContainer.selectChild`
+	selected: false,
+
+	// closable: Boolean
+	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
+	//		True if user can close (destroy) this child, such as (for example) clicking the X on the tab.
+	closable: false,
+
+	// iconClass: String
+	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
+	//		CSS Class specifying icon to use in label associated with this pane.
+	iconClass: "",
+
+	// showTitle: Boolean
+	//		Parameter for children of `dijit.layout.StackContainer` or subclasses.
+	//		When true, display title of this widget as tab label etc., rather than just using
+	//		icon specified in iconClass
+	showTitle: true
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.AccordionPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.AccordionPane"] = true;
+dojo.provide("dijit.layout.AccordionPane");
+
+
+
+dojo.declare("dijit.layout.AccordionPane", dijit.layout.ContentPane, {
+	// summary:
+	//		Deprecated widget.   Use `dijit.layout.ContentPane` instead.
+	// tags:
+	//		deprecated
+
+	constructor: function(){
+		dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead", "", "2.0");
+	},
+
+	onSelected: function(){
+		// summary:
+		//		called when this pane is selected
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.AccordionContainer"] = true;
+dojo.provide("dijit.layout.AccordionContainer");
+
+
+
+
+
+
+
+
+
+	// for back compat, remove for 2.0
+
+dojo.declare(
+	"dijit.layout.AccordionContainer",
+	dijit.layout.StackContainer,
+	{
+		// summary:
+		//		Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,
+		//		and switching between panes is visualized by sliding the other panes up/down.
+		// example:
+		//	| 	<div dojoType="dijit.layout.AccordionContainer">
+		//	|		<div dojoType="dijit.layout.ContentPane" title="pane 1">
+		//	|		</div>
+		//	|		<div dojoType="dijit.layout.ContentPane" title="pane 2">
+		//	|			<p>This is some text</p>
+		//	|		</div>
+		//	|	</div>
+
+		// duration: Integer
+		//		Amount of time (in ms) it takes to slide panes
+		duration: dijit.defaultDuration,
+
+		// buttonWidget: [const] String
+		//		The name of the widget used to display the title of each pane
+		buttonWidget: "dijit.layout._AccordionButton",
+
+		// _verticalSpace: Number
+		//		Pixels of space available for the open pane
+		//		(my content box size minus the cumulative size of all the title bars)
+		_verticalSpace: 0,
+
+		baseClass: "dijitAccordionContainer",
+
+		postCreate: function(){
+			this.domNode.style.overflow = "hidden";
+			this.inherited(arguments);
+			dijit.setWaiRole(this.domNode, "tablist");
+		},
+
+		startup: function(){
+			if(this._started){ return; }
+			this.inherited(arguments);
+			if(this.selectedChildWidget){
+				var style = this.selectedChildWidget.containerNode.style;
+				style.display = "";
+				style.overflow = "auto";
+				this.selectedChildWidget._wrapperWidget.set("selected", true);
+			}
+		},
+
+		_getTargetHeight: function(/* Node */ node){
+			// summary:
+			//		For the given node, returns the height that should be
+			//		set to achieve our vertical space (subtract any padding
+			//		we may have).
+			//
+			//		This is used by the animations.
+			//
+			//		TODO: I don't think this works correctly in IE quirks when an elements
+			//		style.height including padding and borders
+			var cs = dojo.getComputedStyle(node);
+			return Math.max(this._verticalSpace - dojo._getPadBorderExtents(node, cs).h - dojo._getMarginExtents(node, cs).h, 0);
+		},
+
+		layout: function(){
+			// Implement _LayoutWidget.layout() virtual method.
+			// Set the height of the open pane based on what room remains.
+
+			var openPane = this.selectedChildWidget;
+			
+			if(!openPane){ return;}
+
+			var openPaneContainer = openPane._wrapperWidget.domNode,
+				openPaneContainerMargin = dojo._getMarginExtents(openPaneContainer),
+				openPaneContainerPadBorder = dojo._getPadBorderExtents(openPaneContainer),
+				mySize = this._contentBox;
+
+			// get cumulative height of all the unselected title bars
+			var totalCollapsedHeight = 0;
+			dojo.forEach(this.getChildren(), function(child){
+	            if(child != openPane){
+					totalCollapsedHeight += dojo.marginBox(child._wrapperWidget.domNode).h;
+				}
+			});
+			this._verticalSpace = mySize.h - totalCollapsedHeight - openPaneContainerMargin.h 
+			 	- openPaneContainerPadBorder.h - openPane._buttonWidget.getTitleHeight();
+
+			// Memo size to make displayed child
+			this._containerContentBox = {
+				h: this._verticalSpace,
+				w: this._contentBox.w - openPaneContainerMargin.w - openPaneContainerPadBorder.w
+			};
+
+			if(openPane){
+				openPane.resize(this._containerContentBox);
+			}
+		},
+
+		_setupChild: function(child){
+			// Overrides _LayoutWidget._setupChild().
+			// Put wrapper widget around the child widget, showing title
+
+			child._wrapperWidget = new dijit.layout._AccordionInnerContainer({
+				contentWidget: child,
+				buttonWidget: this.buttonWidget,
+				id: child.id + "_wrapper",
+				dir: child.dir,
+				lang: child.lang,
+				parent: this
+			});
+
+			this.inherited(arguments);
+		},
+
+		addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){	
+			if(this._started){
+				// Adding a child to a started Accordion is complicated because children have
+				// wrapper widgets.  Default code path (calling this.inherited()) would add
+				// the new child inside another child's wrapper.
+
+				// First add in child as a direct child of this AccordionContainer
+				dojo.place(child.domNode, this.containerNode, insertIndex);
+
+				if(!child._started){
+					child.startup();
+				}
+				
+				// Then stick the wrapper widget around the child widget
+				this._setupChild(child);
+
+				// Code below copied from StackContainer	
+				dojo.publish(this.id+"-addChild", [child, insertIndex]);
+				this.layout();
+				if(!this.selectedChildWidget){
+					this.selectChild(child);
+				}
+			}else{
+				// We haven't been started yet so just add in the child widget directly,
+				// and the wrapper will be created on startup()
+				this.inherited(arguments);
+			}
+		},
+
+		removeChild: function(child){
+			// Overrides _LayoutWidget.removeChild().
+
+			// destroy wrapper widget first, before StackContainer.getChildren() call
+			child._wrapperWidget.destroy();
+			delete child._wrapperWidget;
+			dojo.removeClass(child.domNode, "dijitHidden");
+
+			this.inherited(arguments);
+		},
+
+		getChildren: function(){
+			// Overrides _Container.getChildren() to return content panes rather than internal AccordionInnerContainer panes
+			return dojo.map(this.inherited(arguments), function(child){
+				return child.declaredClass == "dijit.layout._AccordionInnerContainer" ? child.contentWidget : child;
+			}, this);
+		},
+
+		destroy: function(){
+			dojo.forEach(this.getChildren(), function(child){
+				child._wrapperWidget.destroy();
+			});
+			this.inherited(arguments);
+		},
+
+		_transition: function(/*dijit._Widget?*/newWidget, /*dijit._Widget?*/oldWidget, /*Boolean*/ animate){
+			// Overrides StackContainer._transition() to provide sliding of title bars etc.
+
+//TODO: should be able to replace this with calls to slideIn/slideOut
+			if(this._inTransition){ return; }
+			var animations = [];
+			var paneHeight = this._verticalSpace;
+			if(newWidget){
+				newWidget._wrapperWidget.set("selected", true);
+
+				this._showChild(newWidget);	// prepare widget to be slid in
+
+				// Size the new widget, in case this is the first time it's being shown,
+				// or I have been resized since the last time it was shown.
+				// Note that page must be visible for resizing to work.
+				if(this.doLayout && newWidget.resize){
+					newWidget.resize(this._containerContentBox);
+				}
+
+				var newContents = newWidget.domNode;
+				dojo.addClass(newContents, "dijitVisible");
+				dojo.removeClass(newContents, "dijitHidden");
+				
+				if(animate){
+					var newContentsOverflow = newContents.style.overflow;
+					newContents.style.overflow = "hidden";
+					animations.push(dojo.animateProperty({
+						node: newContents,
+						duration: this.duration,
+						properties: {
+							height: { start: 1, end: this._getTargetHeight(newContents) }
+						},
+						onEnd: function(){
+							newContents.style.overflow = newContentsOverflow;
+
+							// Kick IE to workaround layout bug, see #11415
+							if(dojo.isIE){
+								setTimeout(function(){
+									dojo.removeClass(newContents.parentNode, "dijitAccordionInnerContainerFocused");
+									setTimeout(function(){
+										dojo.addClass(newContents.parentNode, "dijitAccordionInnerContainerFocused");
+									}, 0);
+								}, 0);
+							}
+						}
+					}));
+				}
+			}
+			if(oldWidget){
+				oldWidget._wrapperWidget.set("selected", false);
+				var oldContents = oldWidget.domNode;
+				if(animate){
+					var oldContentsOverflow = oldContents.style.overflow;
+					oldContents.style.overflow = "hidden";
+					animations.push(dojo.animateProperty({
+						node: oldContents,
+						duration: this.duration,
+						properties: {
+							height: { start: this._getTargetHeight(oldContents), end: 1 }
+						},
+						onEnd: function(){
+							dojo.addClass(oldContents, "dijitHidden");
+							dojo.removeClass(oldContents, "dijitVisible");
+							oldContents.style.overflow = oldContentsOverflow;
+							if(oldWidget.onHide){
+								oldWidget.onHide();
+							}
+						}
+					}));
+				}else{
+					dojo.addClass(oldContents, "dijitHidden");
+					dojo.removeClass(oldContents, "dijitVisible");
+					if(oldWidget.onHide){
+						oldWidget.onHide();
+					}
+				}
+			}
+
+			if(animate){
+				this._inTransition = true;
+				var combined = dojo.fx.combine(animations);
+				combined.onEnd = dojo.hitch(this, function(){
+					delete this._inTransition;
+				});
+				combined.play();
+			}			
+		},
+
+		// note: we are treating the container as controller here
+		_onKeyPress: function(/*Event*/ e, /*dijit._Widget*/ fromTitle){
+			// summary:
+			//		Handle keypress events
+			// description:
+			//		This is called from a handler on AccordionContainer.domNode
+			//		(setup in StackContainer), and is also called directly from
+			//		the click handler for accordion labels
+			if(this._inTransition || this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){
+				if(this._inTransition){
+					dojo.stopEvent(e);
+				}
+				return;
+			}
+			var k = dojo.keys,
+				c = e.charOrCode;
+			if((fromTitle && (c == k.LEFT_ARROW || c == k.UP_ARROW)) ||
+					(e.ctrlKey && c == k.PAGE_UP)){
+				this._adjacent(false)._buttonWidget._onTitleClick();
+				dojo.stopEvent(e);
+			}else if((fromTitle && (c == k.RIGHT_ARROW || c == k.DOWN_ARROW)) ||
+					(e.ctrlKey && (c == k.PAGE_DOWN || c == k.TAB))){
+				this._adjacent(true)._buttonWidget._onTitleClick();
+				dojo.stopEvent(e);
+			}
+		}
+	}
+);
+
+dojo.declare("dijit.layout._AccordionInnerContainer",
+	[dijit._Widget, dijit._CssStateMixin], {
+		// summary:
+		//		Internal widget placed as direct child of AccordionContainer.containerNode.
+		//		When other widgets are added as children to an AccordionContainer they are wrapped in
+		//		this widget.
+		
+		// buttonWidget: String
+		//		Name of class to use to instantiate title
+		//		(Wish we didn't have a separate widget for just the title but maintaining it
+		//		for backwards compatibility, is it worth it?)
+/*=====
+		 buttonWidget: null,
+=====*/
+		// contentWidget: dijit._Widget
+		//		Pointer to the real child widget
+/*=====
+	 	contentWidget: null,
+=====*/
+
+		baseClass: "dijitAccordionInnerContainer",
+
+		// tell nested layout widget that we will take care of sizing
+		isContainer: true,
+		isLayoutContainer: true,
+
+		buildRendering: function(){			
+			// Create wrapper div, placed where the child is now
+			this.domNode = dojo.place("<div class='" + this.baseClass + "'>", this.contentWidget.domNode, "after");
+			
+			// wrapper div's first child is the button widget (ie, the title bar)
+			var child = this.contentWidget,
+				cls = dojo.getObject(this.buttonWidget);
+			this.button = child._buttonWidget = (new cls({
+				contentWidget: child,
+				label: child.title,
+				title: child.tooltip,
+				dir: child.dir,
+				lang: child.lang,
+				iconClass: child.iconClass,
+				id: child.id + "_button",
+				parent: this.parent
+			})).placeAt(this.domNode);
+			
+			// and then the actual content widget (changing it from prior-sibling to last-child)
+			dojo.place(this.contentWidget.domNode, this.domNode);
+		},
+
+		postCreate: function(){
+			this.inherited(arguments);
+			this.connect(this.contentWidget, 'set', function(name, value){
+				var mappedName = {title: "label", tooltip: "title", iconClass: "iconClass"}[name];
+				if(mappedName){
+					this.button.set(mappedName, value);
+				}
+			}, this);
+		},
+
+		_setSelectedAttr: function(/*Boolean*/ isSelected){
+			this.selected = isSelected;
+			this.button.set("selected", isSelected);
+			if(isSelected){
+				var cw = this.contentWidget;
+				if(cw.onSelected){ cw.onSelected(); }
+			}
+		},
+
+		startup: function(){
+			// Called by _Container.addChild()
+			this.contentWidget.startup();
+		},
+
+		destroy: function(){
+			this.button.destroyRecursive();
+			
+			delete this.contentWidget._buttonWidget;
+			delete this.contentWidget._wrapperWidget;
+
+			this.inherited(arguments);
+		},
+		
+		destroyDescendants: function(){
+			// since getChildren isn't working for me, have to code this manually
+			this.contentWidget.destroyRecursive();
+		}
+});
+
+dojo.declare("dijit.layout._AccordionButton",
+	[dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+	{
+	// summary:
+	//		The title bar to click to open up an accordion pane.
+	//		Internal widget used by AccordionContainer.
+	// tags:
+	//		private
+
+	templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),
+	attributeMap: dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap), {
+		label: {node: "titleTextNode", type: "innerHTML" },
+		title: {node: "titleTextNode", type: "attribute", attribute: "title"},
+		iconClass: { node: "iconNode", type: "class" }
+	}),
+
+	baseClass: "dijitAccordionTitle",
+
+	getParent: function(){
+		// summary:
+		//		Returns the AccordionContainer parent.
+		// tags:
+		//		private
+		return this.parent;
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		dojo.setSelectable(this.domNode, false);
+		var titleTextNodeId = dojo.attr(this.domNode,'id').replace(' ','_');
+		dojo.attr(this.titleTextNode, "id", titleTextNodeId+"_title");
+		dijit.setWaiState(this.focusNode, "labelledby", dojo.attr(this.titleTextNode, "id"));
+	},
+
+	getTitleHeight: function(){
+		// summary:
+		//		Returns the height of the title dom node.
+		return dojo.marginBox(this.domNode).h;	// Integer
+	},
+
+	// TODO: maybe the parent should set these methods directly rather than forcing the code
+	// into the button widget?
+	_onTitleClick: function(){
+		// summary:
+		//		Callback when someone clicks my title.
+		var parent = this.getParent();
+		if(!parent._inTransition){
+			parent.selectChild(this.contentWidget, true);
+			dijit.focus(this.focusNode);
+		}
+	},
+
+	_onTitleKeyPress: function(/*Event*/ evt){
+		return this.getParent()._onKeyPress(evt, this.contentWidget);
+	},
+
+	_setSelectedAttr: function(/*Boolean*/ isSelected){
+		this.selected = isSelected;
+		dijit.setWaiState(this.focusNode, "expanded", isSelected);
+		dijit.setWaiState(this.focusNode, "selected", isSelected);
+		this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.BorderContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.BorderContainer"] = true;
+dojo.provide("dijit.layout.BorderContainer");
+
+
+
+
+dojo.declare(
+	"dijit.layout.BorderContainer",
+	dijit.layout._LayoutWidget,
+{
+	// summary:
+	//		Provides layout in up to 5 regions, a mandatory center with optional borders along its 4 sides.
+	//
+	// description:
+	//		A BorderContainer is a box with a specified size, such as style="width: 500px; height: 500px;",
+	//		that contains a child widget marked region="center" and optionally children widgets marked
+	//		region equal to "top", "bottom", "leading", "trailing", "left" or "right".
+	//		Children along the edges will be laid out according to width or height dimensions and may
+	//		include optional splitters (splitter="true") to make them resizable by the user.  The remaining
+	//		space is designated for the center region.
+	//
+	//		NOTE: Splitters must not be more than 50 pixels in width.
+	//
+	//		The outer size must be specified on the BorderContainer node.  Width must be specified for the sides
+	//		and height for the top and bottom, respectively.  No dimensions should be specified on the center;
+	//		it will fill the remaining space.  Regions named "leading" and "trailing" may be used just like
+	//		"left" and "right" except that they will be reversed in right-to-left environments.
+	//
+	// example:
+	// |	<div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false"
+	// |            style="width: 400px; height: 300px;">
+	// |		<div dojoType="ContentPane" region="top">header text</div>
+	// |		<div dojoType="ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div>
+	// |		<div dojoType="ContentPane" region="center">client area</div>
+	// |	</div>
+
+	// design: String
+	//		Which design is used for the layout:
+	//			- "headline" (default) where the top and bottom extend
+	//				the full width of the container
+	//			- "sidebar" where the left and right sides extend from top to bottom.
+	design: "headline",
+
+	// gutters: Boolean
+	//		Give each pane a border and margin.
+	//		Margin determined by domNode.paddingLeft.
+	//		When false, only resizable panes have a gutter (i.e. draggable splitter) for resizing.
+	gutters: true,
+
+	// liveSplitters: Boolean
+	//		Specifies whether splitters resize as you drag (true) or only upon mouseup (false)
+	liveSplitters: true,
+
+	// persist: Boolean
+	//		Save splitter positions in a cookie.
+	persist: false,
+
+	baseClass: "dijitBorderContainer",
+
+	// _splitterClass: String
+	// 		Optional hook to override the default Splitter widget used by BorderContainer
+	_splitterClass: "dijit.layout._Splitter",
+
+	postMixInProperties: function(){
+		// change class name to indicate that BorderContainer is being used purely for
+		// layout (like LayoutContainer) rather than for pretty formatting.
+		if(!this.gutters){
+			this.baseClass += "NoGutter";
+		}
+		this.inherited(arguments);
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		this._splitters = {};
+		this._splitterThickness = {};
+	},
+
+	startup: function(){
+		if(this._started){ return; }
+		dojo.forEach(this.getChildren(), this._setupChild, this);
+		this.inherited(arguments);
+	},
+
+	_setupChild: function(/*dijit._Widget*/ child){
+		// Override _LayoutWidget._setupChild().
+
+		var region = child.region;
+		if(region){
+			this.inherited(arguments);
+
+			dojo.addClass(child.domNode, this.baseClass+"Pane");
+
+			var ltr = this.isLeftToRight();
+			if(region == "leading"){ region = ltr ? "left" : "right"; }
+			if(region == "trailing"){ region = ltr ? "right" : "left"; }
+
+			//FIXME: redundant?
+			this["_"+region] = child.domNode;
+			this["_"+region+"Widget"] = child;
+
+			// Create draggable splitter for resizing pane,
+			// or alternately if splitter=false but BorderContainer.gutters=true then
+			// insert dummy div just for spacing
+			if((child.splitter || this.gutters) && !this._splitters[region]){
+				var _Splitter = dojo.getObject(child.splitter ? this._splitterClass : "dijit.layout._Gutter");
+				var splitter = new _Splitter({
+					id: child.id + "_splitter",
+					container: this,
+					child: child,
+					region: region,
+					live: this.liveSplitters
+				});
+				splitter.isSplitter = true;
+				this._splitters[region] = splitter.domNode;
+				dojo.place(this._splitters[region], child.domNode, "after");
+
+				// Splitters arent added as Contained children, so we need to call startup explicitly
+				splitter.startup();
+			}
+			child.region = region;
+		}
+	},
+
+	_computeSplitterThickness: function(region){
+		this._splitterThickness[region] = this._splitterThickness[region] ||
+			dojo.marginBox(this._splitters[region])[(/top|bottom/.test(region) ? 'h' : 'w')];
+	},
+
+	layout: function(){
+		// Implement _LayoutWidget.layout() virtual method.
+		for(var region in this._splitters){ this._computeSplitterThickness(region); }
+		this._layoutChildren();
+	},
+
+	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+		// Override _LayoutWidget.addChild().
+		this.inherited(arguments);
+		if(this._started){
+			this.layout(); //OPT
+		}
+	},
+
+	removeChild: function(/*dijit._Widget*/ child){
+		// Override _LayoutWidget.removeChild().
+		var region = child.region;
+		var splitter = this._splitters[region];
+		if(splitter){
+			dijit.byNode(splitter).destroy();
+			delete this._splitters[region];
+			delete this._splitterThickness[region];
+		}
+		this.inherited(arguments);
+		delete this["_"+region];
+		delete this["_" +region+"Widget"];
+		if(this._started){
+			this._layoutChildren();
+		}
+		dojo.removeClass(child.domNode, this.baseClass+"Pane");
+	},
+
+	getChildren: function(){
+		// Override _LayoutWidget.getChildren() to only return real children, not the splitters.
+		return dojo.filter(this.inherited(arguments), function(widget){
+			return !widget.isSplitter;
+		});
+	},
+
+	getSplitter: function(/*String*/region){
+		// summary:
+		//		Returns the widget responsible for rendering the splitter associated with region
+		var splitter = this._splitters[region];
+		return splitter ? dijit.byNode(splitter) : null;
+	},
+
+	resize: function(newSize, currentSize){
+		// Overrides _LayoutWidget.resize().
+
+		// resetting potential padding to 0px to provide support for 100% width/height + padding
+		// TODO: this hack doesn't respect the box model and is a temporary fix
+		if(!this.cs || !this.pe){
+			var node = this.domNode;
+			this.cs = dojo.getComputedStyle(node);
+			this.pe = dojo._getPadExtents(node, this.cs);
+			this.pe.r = dojo._toPixelValue(node, this.cs.paddingRight);
+			this.pe.b = dojo._toPixelValue(node, this.cs.paddingBottom);
+
+			dojo.style(node, "padding", "0px");
+		}
+
+		this.inherited(arguments);
+	},
+
+	_layoutChildren: function(/*String?*/changedRegion, /*Number?*/ changedRegionSize){
+		// summary:
+		//		This is the main routine for setting size/position of each child.
+		// description:
+		//		With no arguments, measures the height of top/bottom panes, the width
+		//		of left/right panes, and then sizes all panes accordingly.
+		//
+		//		With changedRegion specified (as "left", "top", "bottom", or "right"),
+		//		it changes that region's width/height to changedRegionSize and
+		//		then resizes other regions that were affected.
+		// changedRegion:
+		//		The region should be changed because splitter was dragged.
+		//		"left", "right", "top", or "bottom".
+		// changedRegionSize:
+		//		The new width/height (in pixels) to make changedRegion
+
+		if(!this._borderBox || !this._borderBox.h){
+			// We are currently hidden, or we haven't been sized by our parent yet.
+			// Abort.   Someone will resize us later.
+			return;
+		}
+
+		var sidebarLayout = (this.design == "sidebar");
+		var topHeight = 0, bottomHeight = 0, leftWidth = 0, rightWidth = 0;
+		var topStyle = {}, leftStyle = {}, rightStyle = {}, bottomStyle = {},
+			centerStyle = (this._center && this._center.style) || {};
+
+		var changedSide = /left|right/.test(changedRegion);
+
+		var layoutSides = !changedRegion || (!changedSide && !sidebarLayout);
+		var layoutTopBottom = !changedRegion || (changedSide && sidebarLayout);
+
+		// Ask browser for width/height of side panes.
+		// Would be nice to cache this but height can change according to width
+		// (because words wrap around).  I don't think width will ever change though
+		// (except when the user drags a splitter).
+		if(this._top){
+			topStyle = (changedRegion == "top" || layoutTopBottom) && this._top.style;
+			topHeight = changedRegion == "top" ? changedRegionSize : dojo.marginBox(this._top).h;
+		}
+		if(this._left){
+			leftStyle = (changedRegion == "left" || layoutSides) && this._left.style;
+			leftWidth = changedRegion == "left" ? changedRegionSize : dojo.marginBox(this._left).w;
+		}
+		if(this._right){
+			rightStyle = (changedRegion == "right" || layoutSides) && this._right.style;
+			rightWidth = changedRegion == "right" ? changedRegionSize : dojo.marginBox(this._right).w;
+		}
+		if(this._bottom){
+			bottomStyle = (changedRegion == "bottom" || layoutTopBottom) && this._bottom.style;
+			bottomHeight = changedRegion == "bottom" ? changedRegionSize : dojo.marginBox(this._bottom).h;
+		}
+
+		var splitters = this._splitters;
+		var topSplitter = splitters.top, bottomSplitter = splitters.bottom,
+			leftSplitter = splitters.left, rightSplitter = splitters.right;
+		var splitterThickness = this._splitterThickness;
+		var topSplitterThickness = splitterThickness.top || 0,
+			leftSplitterThickness = splitterThickness.left || 0,
+			rightSplitterThickness = splitterThickness.right || 0,
+			bottomSplitterThickness = splitterThickness.bottom || 0;
+
+		// Check for race condition where CSS hasn't finished loading, so
+		// the splitter width == the viewport width (#5824)
+		if(leftSplitterThickness > 50 || rightSplitterThickness > 50){
+			setTimeout(dojo.hitch(this, function(){
+				// Results are invalid.  Clear them out.
+				this._splitterThickness = {};
+
+				for(var region in this._splitters){
+					this._computeSplitterThickness(region);
+				}
+				this._layoutChildren();
+			}), 50);
+			return false;
+		}
+
+		var pe = this.pe;
+
+		var splitterBounds = {
+			left: (sidebarLayout ? leftWidth + leftSplitterThickness: 0) + pe.l + "px",
+			right: (sidebarLayout ? rightWidth + rightSplitterThickness: 0) + pe.r + "px"
+		};
+
+		if(topSplitter){
+			dojo.mixin(topSplitter.style, splitterBounds);
+			topSplitter.style.top = topHeight + pe.t + "px";
+		}
+
+		if(bottomSplitter){
+			dojo.mixin(bottomSplitter.style, splitterBounds);
+			bottomSplitter.style.bottom = bottomHeight + pe.b + "px";
+		}
+
+		splitterBounds = {
+			top: (sidebarLayout ? 0 : topHeight + topSplitterThickness) + pe.t + "px",
+			bottom: (sidebarLayout ? 0 : bottomHeight + bottomSplitterThickness) + pe.b + "px"
+		};
+
+		if(leftSplitter){
+			dojo.mixin(leftSplitter.style, splitterBounds);
+			leftSplitter.style.left = leftWidth + pe.l + "px";
+		}
+
+		if(rightSplitter){
+			dojo.mixin(rightSplitter.style, splitterBounds);
+			rightSplitter.style.right = rightWidth + pe.r +	"px";
+		}
+
+		dojo.mixin(centerStyle, {
+			top: pe.t + topHeight + topSplitterThickness + "px",
+			left: pe.l + leftWidth + leftSplitterThickness + "px",
+			right: pe.r + rightWidth + rightSplitterThickness + "px",
+			bottom: pe.b + bottomHeight + bottomSplitterThickness + "px"
+		});
+
+		var bounds = {
+			top: sidebarLayout ? pe.t + "px" : centerStyle.top,
+			bottom: sidebarLayout ? pe.b + "px" : centerStyle.bottom
+		};
+		dojo.mixin(leftStyle, bounds);
+		dojo.mixin(rightStyle, bounds);
+		leftStyle.left = pe.l + "px"; rightStyle.right = pe.r + "px"; topStyle.top = pe.t + "px"; bottomStyle.bottom = pe.b + "px";
+		if(sidebarLayout){
+			topStyle.left = bottomStyle.left = leftWidth + leftSplitterThickness + pe.l + "px";
+			topStyle.right = bottomStyle.right = rightWidth + rightSplitterThickness + pe.r + "px";
+		}else{
+			topStyle.left = bottomStyle.left = pe.l + "px";
+			topStyle.right = bottomStyle.right = pe.r + "px";
+		}
+
+		// More calculations about sizes of panes
+		var containerHeight = this._borderBox.h - pe.t - pe.b,
+			middleHeight = containerHeight - ( topHeight + topSplitterThickness + bottomHeight + bottomSplitterThickness),
+			sidebarHeight = sidebarLayout ? containerHeight : middleHeight;
+
+		var containerWidth = this._borderBox.w - pe.l - pe.r,
+			middleWidth = containerWidth - (leftWidth + leftSplitterThickness + rightWidth + rightSplitterThickness),
+			sidebarWidth = sidebarLayout ? middleWidth : containerWidth;
+
+		// New margin-box size of each pane
+		var dim = {
+			top:	{ w: sidebarWidth, h: topHeight },
+			bottom: { w: sidebarWidth, h: bottomHeight },
+			left:	{ w: leftWidth, h: sidebarHeight },
+			right:	{ w: rightWidth, h: sidebarHeight },
+			center:	{ h: middleHeight, w: middleWidth }
+		};
+
+		if(changedRegion){
+			// Respond to splitter drag event by changing changedRegion's width or height
+			var child = this["_" + changedRegion + "Widget"],
+				mb = {};
+				mb[ /top|bottom/.test(changedRegion) ? "h" : "w"] = changedRegionSize;
+			child.resize ? child.resize(mb, dim[child.region]) : dojo.marginBox(child.domNode, mb);
+		}
+
+		// Nodes in IE<8 don't respond to t/l/b/r, and TEXTAREA doesn't respond in any browser
+		var janky = dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.some(this.getChildren(), function(child){
+			return child.domNode.tagName == "TEXTAREA" || child.domNode.tagName == "INPUT";
+		});
+		if(janky){
+			// Set the size of the children the old fashioned way, by setting
+			// CSS width and height
+
+			var resizeWidget = function(widget, changes, result){
+				if(widget){
+					(widget.resize ? widget.resize(changes, result) : dojo.marginBox(widget.domNode, changes));
+				}
+			};
+
+			if(leftSplitter){ leftSplitter.style.height = sidebarHeight; }
+			if(rightSplitter){ rightSplitter.style.height = sidebarHeight; }
+			resizeWidget(this._leftWidget, {h: sidebarHeight}, dim.left);
+			resizeWidget(this._rightWidget, {h: sidebarHeight}, dim.right);
+
+			if(topSplitter){ topSplitter.style.width = sidebarWidth; }
+			if(bottomSplitter){ bottomSplitter.style.width = sidebarWidth; }
+			resizeWidget(this._topWidget, {w: sidebarWidth}, dim.top);
+			resizeWidget(this._bottomWidget, {w: sidebarWidth}, dim.bottom);
+
+			resizeWidget(this._centerWidget, dim.center);
+		}else{
+			// Calculate which panes need a notification that their size has been changed
+			// (we've already set style.top/bottom/left/right on those other panes).
+			var notifySides = !changedRegion || (/top|bottom/.test(changedRegion) && this.design != "sidebar"),
+				notifyTopBottom = !changedRegion || (/left|right/.test(changedRegion) && this.design == "sidebar"),
+				notifyList = {
+					center: true,
+					left: notifySides,
+					right: notifySides,
+					top: notifyTopBottom,
+					bottom: notifyTopBottom
+				};
+			
+			// Send notification to those panes that have changed size
+			dojo.forEach(this.getChildren(), function(child){
+				if(child.resize && notifyList[child.region]){
+					child.resize(null, dim[child.region]);
+				}
+			}, this);
+		}
+	},
+
+	destroy: function(){
+		for(var region in this._splitters){
+			var splitter = this._splitters[region];
+			dijit.byNode(splitter).destroy();
+			dojo.destroy(splitter);
+		}
+		delete this._splitters;
+		delete this._splitterThickness;
+		this.inherited(arguments);
+	}
+});
+
+// This argument can be specified for the children of a BorderContainer.
+// Since any widget can be specified as a LayoutContainer child, mix it
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+	// region: [const] String
+	//		Parameter for children of `dijit.layout.BorderContainer`.
+	//		Values: "top", "bottom", "leading", "trailing", "left", "right", "center".
+	//		See the `dijit.layout.BorderContainer` description for details.
+	region: '',
+
+	// splitter: [const] Boolean
+	//		Parameter for child of `dijit.layout.BorderContainer` where region != "center".
+	//		If true, enables user to resize the widget by putting a draggable splitter between
+	//		this widget and the region=center widget.
+	splitter: false,
+
+	// minSize: [const] Number
+	//		Parameter for children of `dijit.layout.BorderContainer`.
+	//		Specifies a minimum size (in pixels) for this widget when resized by a splitter.
+	minSize: 0,
+
+	// maxSize: [const] Number
+	//		Parameter for children of `dijit.layout.BorderContainer`.
+	//		Specifies a maximum size (in pixels) for this widget when resized by a splitter.
+	maxSize: Infinity
+});
+
+
+
+dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ],
+{
+	// summary:
+	//		A draggable spacer between two items in a `dijit.layout.BorderContainer`.
+	// description:
+	//		This is instantiated by `dijit.layout.BorderContainer`.  Users should not
+	//		create it directly.
+	// tags:
+	//		private
+
+/*=====
+ 	// container: [const] dijit.layout.BorderContainer
+ 	//		Pointer to the parent BorderContainer
+	container: null,
+
+	// child: [const] dijit.layout._LayoutWidget
+	//		Pointer to the pane associated with this splitter
+	child: null,
+
+	// region: String
+	//		Region of pane associated with this splitter.
+	//		"top", "bottom", "left", "right".
+	region: null,
+=====*/
+
+	// live: [const] Boolean
+	//		If true, the child's size changes and the child widget is redrawn as you drag the splitter;
+	//		otherwise, the size doesn't change until you drop the splitter (by mouse-up)
+	live: true,
+
+	templateString: '<div class="dijitSplitter" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" waiRole="separator"><div class="dijitSplitterThumb"></div></div>',
+
+	postCreate: function(){
+		this.inherited(arguments);
+		this.horizontal = /top|bottom/.test(this.region);
+		dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V"));
+//		dojo.addClass(this.child.domNode, "dijitSplitterPane");
+//		dojo.setSelectable(this.domNode, false); //TODO is this necessary?
+
+		this._factor = /top|left/.test(this.region) ? 1 : -1;
+
+		this._cookieName = this.container.id + "_" + this.region;
+		if(this.container.persist){
+			// restore old size
+			var persistSize = dojo.cookie(this._cookieName);
+			if(persistSize){
+				this.child.domNode.style[this.horizontal ? "height" : "width"] = persistSize;
+			}
+		}
+	},
+
+	_computeMaxSize: function(){
+		// summary:
+		//		Compute the maximum size that my corresponding pane can be set to
+
+		var dim = this.horizontal ? 'h' : 'w',
+			thickness = this.container._splitterThickness[this.region];
+			
+		// Get DOMNode of opposite pane, if an opposite pane exists.
+		// Ex: if I am the _Splitter for the left pane, then get the right pane.
+		var flip = {left:'right', right:'left', top:'bottom', bottom:'top', leading:'trailing', trailing:'leading'},
+			oppNode = this.container["_" + flip[this.region]];
+		
+		// I can expand up to the edge of the opposite pane, or if there's no opposite pane, then to
+		// edge of BorderContainer
+		var available = dojo.contentBox(this.container.domNode)[dim] -
+				(oppNode ? dojo.marginBox(oppNode)[dim] : 0) -
+				20 - thickness * 2;
+
+		return Math.min(this.child.maxSize, available);
+	},
+
+	_startDrag: function(e){
+		if(!this.cover){
+			this.cover = dojo.doc.createElement('div');
+			dojo.addClass(this.cover, "dijitSplitterCover");
+			dojo.place(this.cover, this.child.domNode, "after");
+		}
+		dojo.addClass(this.cover, "dijitSplitterCoverActive");
+
+		// Safeguard in case the stop event was missed.  Shouldn't be necessary if we always get the mouse up.
+		if(this.fake){ dojo.destroy(this.fake); }
+		if(!(this._resize = this.live)){ //TODO: disable live for IE6?
+			// create fake splitter to display at old position while we drag
+			(this.fake = this.domNode.cloneNode(true)).removeAttribute("id");
+			dojo.addClass(this.domNode, "dijitSplitterShadow");
+			dojo.place(this.fake, this.domNode, "after");
+		}
+		dojo.addClass(this.domNode, "dijitSplitterActive");
+		dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Active");
+		if(this.fake){
+			dojo.removeClass(this.fake, "dijitSplitterHover");
+			dojo.removeClass(this.fake, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover");
+		}
+
+		//Performance: load data info local vars for onmousevent function closure
+		var factor = this._factor,
+			max = this._computeMaxSize(),
+			min = this.child.minSize || 20,
+			isHorizontal = this.horizontal,
+			axis = isHorizontal ? "pageY" : "pageX",
+			pageStart = e[axis],
+			splitterStyle = this.domNode.style,
+			dim = isHorizontal ? 'h' : 'w',
+			childStart = dojo.marginBox(this.child.domNode)[dim],
+			region = this.region,
+			splitterStart = parseInt(this.domNode.style[region], 10),
+			resize = this._resize,
+			childNode = this.child.domNode,
+			layoutFunc = dojo.hitch(this.container, this.container._layoutChildren),
+			de = dojo.doc;
+
+		this._handlers = (this._handlers || []).concat([
+			dojo.connect(de, "onmousemove", this._drag = function(e, forceResize){
+				var delta = e[axis] - pageStart,
+					childSize = factor * delta + childStart,
+					boundChildSize = Math.max(Math.min(childSize, max), min);
+
+				if(resize || forceResize){
+					layoutFunc(region, boundChildSize);
+				}
+				splitterStyle[region] = factor * delta + splitterStart + (boundChildSize - childSize) + "px";
+			}),
+			dojo.connect(de, "ondragstart", dojo.stopEvent),
+			dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent),
+			dojo.connect(de, "onmouseup", this, "_stopDrag")
+		]);
+		dojo.stopEvent(e);
+	},
+
+	_onMouse: function(e){
+		var o = (e.type == "mouseover" || e.type == "mouseenter");
+		dojo.toggleClass(this.domNode, "dijitSplitterHover", o);
+		dojo.toggleClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover", o);
+	},
+
+	_stopDrag: function(e){
+		try{
+			if(this.cover){
+				dojo.removeClass(this.cover, "dijitSplitterCoverActive");
+			}
+			if(this.fake){ dojo.destroy(this.fake); }
+			dojo.removeClass(this.domNode, "dijitSplitterActive");
+			dojo.removeClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Active");
+			dojo.removeClass(this.domNode, "dijitSplitterShadow");
+			this._drag(e); //TODO: redundant with onmousemove?
+			this._drag(e, true);
+		}finally{
+			this._cleanupHandlers();
+			delete this._drag;
+		}
+
+		if(this.container.persist){
+			dojo.cookie(this._cookieName, this.child.domNode.style[this.horizontal ? "height" : "width"], {expires:365});
+		}
+	},
+
+	_cleanupHandlers: function(){
+		dojo.forEach(this._handlers, dojo.disconnect);
+		delete this._handlers;
+	},
+
+	_onKeyPress: function(/*Event*/ e){
+		// should we apply typematic to this?
+		this._resize = true;
+		var horizontal = this.horizontal;
+		var tick = 1;
+		var dk = dojo.keys;
+		switch(e.charOrCode){
+			case horizontal ? dk.UP_ARROW : dk.LEFT_ARROW:
+				tick *= -1;
+//				break;
+			case horizontal ? dk.DOWN_ARROW : dk.RIGHT_ARROW:
+				break;
+			default:
+//				this.inherited(arguments);
+				return;
+		}
+		var childSize = dojo.marginBox(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick;
+		this.container._layoutChildren(this.region, Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize));
+		dojo.stopEvent(e);
+	},
+
+	destroy: function(){
+		this._cleanupHandlers();
+		delete this.child;
+		delete this.container;
+		delete this.cover;
+		delete this.fake;
+		this.inherited(arguments);
+	}
+});
+
+dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated ],
+{
+	// summary:
+	// 		Just a spacer div to separate side pane from center pane.
+	//		Basically a trick to lookup the gutter/splitter width from the theme.
+	// description:
+	//		Instantiated by `dijit.layout.BorderContainer`.  Users should not
+	//		create directly.
+	// tags:
+	//		private
+
+	templateString: '<div class="dijitGutter" waiRole="presentation"></div>',
+
+	postCreate: function(){
+		this.horizontal = /top|bottom/.test(this.region);
+		dojo.addClass(this.domNode, "dijitGutter" + (this.horizontal ? "H" : "V"));
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.LayoutContainer"] = true;
+dojo.provide("dijit.layout.LayoutContainer");
+
+
+
+dojo.declare("dijit.layout.LayoutContainer",
+	dijit.layout._LayoutWidget,
+	{
+	// summary:
+	//		Deprecated.  Use `dijit.layout.BorderContainer` instead.
+	//
+	// description:
+	//		Provides Delphi-style panel layout semantics.
+	//
+	//		A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
+	//		that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client".
+	//		It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box,
+	//		and then it takes the child marked "client" and puts it into the remaining space in the middle.
+	//
+	//		Left/right positioning is similar to CSS's "float: left" and "float: right",
+	//		and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such
+	//		CSS.
+	//
+	//		Note that there can only be one client element, but there can be multiple left, right, top,
+	//		or bottom elements.
+	//
+	// example:
+	// |	<style>
+	// |		html, body{ height: 100%; width: 100%; }
+	// |	</style>
+	// |	<div dojoType="dijit.layout.LayoutContainer" style="width: 100%; height: 100%">
+	// |		<div dojoType="dijit.layout.ContentPane" layoutAlign="top">header text</div>
+	// |		<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="width: 200px;">table of contents</div>
+	// |		<div dojoType="dijit.layout.ContentPane" layoutAlign="client">client area</div>
+	// |	</div>
+	//
+	//		Lays out each child in the natural order the children occur in.
+	//		Basically each child is laid out into the "remaining space", where "remaining space" is initially
+	//		the content area of this widget, but is reduced to a smaller rectangle each time a child is added.
+	// tags:
+	//		deprecated
+
+	baseClass: "dijitLayoutContainer",
+
+	constructor: function(){
+		dojo.deprecated("dijit.layout.LayoutContainer is deprecated", "use BorderContainer instead", 2.0);
+	},
+
+	layout: function(){
+		dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
+	},
+
+	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+		this.inherited(arguments);
+		if(this._started){
+			dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
+		}
+	},
+
+	removeChild: function(/*dijit._Widget*/ widget){
+		this.inherited(arguments);
+		if(this._started){
+			dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
+		}
+	}
+});
+
+// This argument can be specified for the children of a LayoutContainer.
+// Since any widget can be specified as a LayoutContainer child, mix it
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+	// layoutAlign: String
+	//		"none", "left", "right", "bottom", "top", and "client".
+	//		See the LayoutContainer description for details on this parameter.
+	layoutAlign: 'none'
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.LinkPane"] = true;
+dojo.provide("dijit.layout.LinkPane");
+
+
+
+
+dojo.declare("dijit.layout.LinkPane",
+	[dijit.layout.ContentPane, dijit._Templated],
+	{
+	// summary:
+	//		A ContentPane with an href where (when declared in markup)
+	//		the title is specified as innerHTML rather than as a title attribute.
+	// description:
+	//		LinkPane is just a ContentPane that is declared in markup similarly
+	//		to an anchor.  The anchor's body (the words between `<a>` and `</a>`)
+	//		become the title of the widget (used for TabContainer, AccordionContainer, etc.)
+	// example:
+	//	| <a href="foo.html">my title</a>
+
+	// I'm using a template because the user may specify the input as
+	// <a href="foo.html">title</a>, in which case we need to get rid of the
+	// <a> because we don't want a link.
+	templateString: '<div class="dijitLinkPane" dojoAttachPoint="containerNode"></div>',
+
+	postMixInProperties: function(){
+		// If user has specified node contents, they become the title
+		// (the link must be plain text)
+		if(this.srcNodeRef){
+			this.title += this.srcNodeRef.innerHTML;
+		}
+		this.inherited(arguments);
+	},
+
+	_fillContent: function(/*DomNode*/ source){
+		// Overrides _Templated._fillContent().
+
+		// _Templated._fillContent() relocates srcNodeRef innerHTML to templated container node,
+		// but in our case the srcNodeRef innerHTML is the title, so shouldn't be
+		// copied
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.SplitContainer"] = true;
+dojo.provide("dijit.layout.SplitContainer");
+
+//
+// FIXME: make it prettier
+// FIXME: active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
+//
+
+
+
+
+dojo.declare("dijit.layout.SplitContainer",
+	dijit.layout._LayoutWidget,
+	{
+	// summary:
+	//		Deprecated.  Use `dijit.layout.BorderContainer` instead.
+	// description:
+	//		A Container widget with sizing handles in-between each child.
+	//		Contains multiple children widgets, all of which are displayed side by side
+	//		(either horizontally or vertically); there's a bar between each of the children,
+	//		and you can adjust the relative size of each child by dragging the bars.
+	//
+	//		You must specify a size (width and height) for the SplitContainer.
+	// tags:
+	//		deprecated
+
+	constructor: function(){
+		dojo.deprecated("dijit.layout.SplitContainer is deprecated", "use BorderContainer with splitter instead", 2.0);
+	},
+
+	// activeSizing: Boolean
+	//		If true, the children's size changes as you drag the bar;
+	//		otherwise, the sizes don't change until you drop the bar (by mouse-up)
+	activeSizing: false,
+
+	// sizerWidth: Integer
+	//		Size in pixels of the bar between each child
+	sizerWidth: 7, // FIXME: this should be a CSS attribute (at 7 because css wants it to be 7 until we fix to css)
+
+	// orientation: String
+	//		either 'horizontal' or vertical; indicates whether the children are
+	//		arranged side-by-side or up/down.
+	orientation: 'horizontal',
+
+	// persist: Boolean
+	//		Save splitter positions in a cookie
+	persist: true,
+
+	baseClass: "dijitSplitContainer",
+
+	postMixInProperties: function(){
+		this.inherited("postMixInProperties",arguments);
+		this.isHorizontal = (this.orientation == 'horizontal');
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		this.sizers = [];
+
+		// overflow has to be explicitly hidden for splitContainers using gekko (trac #1435)
+		// to keep other combined css classes from inadvertantly making the overflow visible
+		if(dojo.isMozilla){
+			this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work
+		}
+
+		// create the fake dragger
+		if(typeof this.sizerWidth == "object"){
+			try{ //FIXME: do this without a try/catch
+				this.sizerWidth = parseInt(this.sizerWidth.toString());
+			}catch(e){ this.sizerWidth = 7; }
+		}
+		var sizer = dojo.doc.createElement('div');
+		this.virtualSizer = sizer;
+		sizer.style.position = 'relative';
+
+		// #1681: work around the dreaded 'quirky percentages in IE' layout bug
+		// If the splitcontainer's dimensions are specified in percentages, it
+		// will be resized when the virtualsizer is displayed in _showSizingLine
+		// (typically expanding its bounds unnecessarily). This happens because
+		// we use position: relative for .dijitSplitContainer.
+		// The workaround: instead of changing the display style attribute,
+		// switch to changing the zIndex (bring to front/move to back)
+
+		sizer.style.zIndex = 10;
+		sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV';
+		this.domNode.appendChild(sizer);
+		dojo.setSelectable(sizer, false);
+	},
+
+	destroy: function(){
+		delete this.virtualSizer;
+		dojo.forEach(this._ownconnects, dojo.disconnect);
+		this.inherited(arguments);
+	},
+	startup: function(){
+		if(this._started){ return; }
+
+		dojo.forEach(this.getChildren(), function(child, i, children){
+			// attach the children and create the draggers
+			this._setupChild(child);
+
+			if(i < children.length-1){
+				this._addSizer();
+			}
+		}, this);
+
+		if(this.persist){
+			this._restoreState();
+		}
+
+		this.inherited(arguments);
+	},
+
+	_setupChild: function(/*dijit._Widget*/ child){
+		this.inherited(arguments);
+		child.domNode.style.position = "absolute";
+		dojo.addClass(child.domNode, "dijitSplitPane");
+	},
+
+	_onSizerMouseDown: function(e){
+		if(e.target.id){
+			for(var i=0;i<this.sizers.length;i++){
+				if(this.sizers[i].id == e.target.id){
+					break;
+				}
+			}
+			if(i<this.sizers.length){
+				this.beginSizing(e,i);
+			}
+		}
+	},
+	_addSizer: function(index){
+		index = index === undefined ? this.sizers.length : index;
+
+		// TODO: use a template for this!!!
+		var sizer = dojo.doc.createElement('div');
+		sizer.id=dijit.getUniqueId('dijit_layout_SplitterContainer_Splitter');
+		this.sizers.splice(index,0,sizer);
+		this.domNode.appendChild(sizer);
+
+		sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV';
+
+		// add the thumb div
+		var thumb = dojo.doc.createElement('div');
+		thumb.className = 'thumb';
+		sizer.appendChild(thumb);
+
+		// FIXME: are you serious? why aren't we using mover start/stop combo?
+		this.connect(sizer, "onmousedown", '_onSizerMouseDown');
+
+		dojo.setSelectable(sizer, false);
+	},
+
+	removeChild: function(widget){
+		// summary:
+		//		Remove sizer, but only if widget is really our child and
+		// we have at least one sizer to throw away
+		if(this.sizers.length){
+			var i=dojo.indexOf(this.getChildren(), widget)
+			if(i != -1){
+				if(i == this.sizers.length){
+					i--;
+				}
+				dojo.destroy(this.sizers[i]);
+				this.sizers.splice(i,1);
+			}
+		}
+
+		// Remove widget and repaint
+		this.inherited(arguments);
+		if(this._started){
+			this.layout();
+		}
+	},
+
+	addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+		// summary:
+		//		Add a child widget to the container
+		// child:
+		//		a widget to add
+		// insertIndex:
+		//		postion in the "stack" to add the child widget
+
+		this.inherited(arguments);
+
+		if(this._started){
+			// Do the stuff that startup() does for each widget
+			var children = this.getChildren();
+			if(children.length > 1){
+				this._addSizer(insertIndex);
+			}
+
+			// and then reposition (ie, shrink) every pane to make room for the new guy
+			this.layout();
+		}
+	},
+
+	layout: function(){
+		// summary:
+		//		Do layout of panels
+
+		// base class defines this._contentBox on initial creation and also
+		// on resize
+		this.paneWidth = this._contentBox.w;
+		this.paneHeight = this._contentBox.h;
+
+		var children = this.getChildren();
+		if(!children.length){ return; }
+
+		//
+		// calculate space
+		//
+
+		var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
+		if(children.length > 1){
+			space -= this.sizerWidth * (children.length - 1);
+		}
+
+		//
+		// calculate total of SizeShare values
+		//
+		var outOf = 0;
+		dojo.forEach(children, function(child){
+			outOf += child.sizeShare;
+		});
+
+		//
+		// work out actual pixels per sizeshare unit
+		//
+		var pixPerUnit = space / outOf;
+
+		//
+		// set the SizeActual member of each pane
+		//
+		var totalSize = 0;
+		dojo.forEach(children.slice(0, children.length - 1), function(child){
+			var size = Math.round(pixPerUnit * child.sizeShare);
+			child.sizeActual = size;
+			totalSize += size;
+		});
+
+		children[children.length-1].sizeActual = space - totalSize;
+
+		//
+		// make sure the sizes are ok
+		//
+		this._checkSizes();
+
+		//
+		// now loop, positioning each pane and letting children resize themselves
+		//
+
+		var pos = 0;
+		var size = children[0].sizeActual;
+		this._movePanel(children[0], pos, size);
+		children[0].position = pos;
+		pos += size;
+
+		// if we don't have any sizers, our layout method hasn't been called yet
+		// so bail until we are called..TODO: REVISIT: need to change the startup
+		// algorithm to guaranteed the ordering of calls to layout method
+		if(!this.sizers){
+			return;
+		}
+
+		dojo.some(children.slice(1), function(child, i){
+			// error-checking
+			if(!this.sizers[i]){
+				return true;
+			}
+			// first we position the sizing handle before this pane
+			this._moveSlider(this.sizers[i], pos, this.sizerWidth);
+			this.sizers[i].position = pos;
+			pos += this.sizerWidth;
+
+			size = child.sizeActual;
+			this._movePanel(child, pos, size);
+			child.position = pos;
+			pos += size;
+		}, this);
+	},
+
+	_movePanel: function(panel, pos, size){
+		if(this.isHorizontal){
+			panel.domNode.style.left = pos + 'px';	// TODO: resize() takes l and t parameters too, don't need to set manually
+			panel.domNode.style.top = 0;
+			var box = {w: size, h: this.paneHeight};
+			if(panel.resize){
+				panel.resize(box);
+			}else{
+				dojo.marginBox(panel.domNode, box);
+			}
+		}else{
+			panel.domNode.style.left = 0;	// TODO: resize() takes l and t parameters too, don't need to set manually
+			panel.domNode.style.top = pos + 'px';
+			var box = {w: this.paneWidth, h: size};
+			if(panel.resize){
+				panel.resize(box);
+			}else{
+				dojo.marginBox(panel.domNode, box);
+			}
+		}
+	},
+
+	_moveSlider: function(slider, pos, size){
+		if(this.isHorizontal){
+			slider.style.left = pos + 'px';
+			slider.style.top = 0;
+			dojo.marginBox(slider, { w: size, h: this.paneHeight });
+		}else{
+			slider.style.left = 0;
+			slider.style.top = pos + 'px';
+			dojo.marginBox(slider, { w: this.paneWidth, h: size });
+		}
+	},
+
+	_growPane: function(growth, pane){
+		if(growth > 0){
+			if(pane.sizeActual > pane.sizeMin){
+				if((pane.sizeActual - pane.sizeMin) > growth){
+
+					// stick all the growth in this pane
+					pane.sizeActual = pane.sizeActual - growth;
+					growth = 0;
+				}else{
+					// put as much growth in here as we can
+					growth -= pane.sizeActual - pane.sizeMin;
+					pane.sizeActual = pane.sizeMin;
+				}
+			}
+		}
+		return growth;
+	},
+
+	_checkSizes: function(){
+
+		var totalMinSize = 0;
+		var totalSize = 0;
+		var children = this.getChildren();
+
+		dojo.forEach(children, function(child){
+			totalSize += child.sizeActual;
+			totalMinSize += child.sizeMin;
+		});
+
+		// only make adjustments if we have enough space for all the minimums
+
+		if(totalMinSize <= totalSize){
+
+			var growth = 0;
+
+			dojo.forEach(children, function(child){
+				if(child.sizeActual < child.sizeMin){
+					growth += child.sizeMin - child.sizeActual;
+					child.sizeActual = child.sizeMin;
+				}
+			});
+
+			if(growth > 0){
+				var list = this.isDraggingLeft ? children.reverse() : children;
+				dojo.forEach(list, function(child){
+					growth = this._growPane(growth, child);
+				}, this);
+			}
+		}else{
+			dojo.forEach(children, function(child){
+				child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize));
+			});
+		}
+	},
+
+	beginSizing: function(e, i){
+		var children = this.getChildren();
+		this.paneBefore = children[i];
+		this.paneAfter = children[i+1];
+
+		this.isSizing = true;
+		this.sizingSplitter = this.sizers[i];
+
+		if(!this.cover){
+			this.cover = dojo.create('div', {
+					style: {
+						position:'absolute',
+						zIndex:5,
+						top: 0,
+						left: 0,
+						width: "100%",
+						height: "100%"
+					}
+				}, this.domNode);
+		}else{
+			this.cover.style.zIndex = 5;
+		}
+		this.sizingSplitter.style.zIndex = 6;
+
+		// TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet (but can't we use it anyway if we pay attention? we do elsewhere.)
+		this.originPos = dojo.position(children[0].domNode, true);
+		if(this.isHorizontal){
+			var client = e.layerX || e.offsetX || 0;
+			var screen = e.pageX;
+			this.originPos = this.originPos.x;
+		}else{
+			var client = e.layerY || e.offsetY || 0;
+			var screen = e.pageY;
+			this.originPos = this.originPos.y;
+		}
+		this.startPoint = this.lastPoint = screen;
+		this.screenToClientOffset = screen - client;
+		this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position;
+
+		if(!this.activeSizing){
+			this._showSizingLine();
+		}
+
+		//
+		// attach mouse events
+		//
+		this._ownconnects = [];
+		this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmousemove", this, "changeSizing"));
+		this._ownconnects.push(dojo.connect(dojo.doc.documentElement, "onmouseup", this, "endSizing"));
+
+		dojo.stopEvent(e);
+	},
+
+	changeSizing: function(e){
+		if(!this.isSizing){ return; }
+		this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
+		this.movePoint();
+		if(this.activeSizing){
+			this._updateSize();
+		}else{
+			this._moveSizingLine();
+		}
+		dojo.stopEvent(e);
+	},
+
+	endSizing: function(e){
+		if(!this.isSizing){ return; }
+		if(this.cover){
+			this.cover.style.zIndex = -1;
+		}
+		if(!this.activeSizing){
+			this._hideSizingLine();
+		}
+
+		this._updateSize();
+
+		this.isSizing = false;
+
+		if(this.persist){
+			this._saveState(this);
+		}
+
+		dojo.forEach(this._ownconnects, dojo.disconnect);
+	},
+
+	movePoint: function(){
+
+		// make sure lastPoint is a legal point to drag to
+		var p = this.lastPoint - this.screenToClientOffset;
+
+		var a = p - this.dragOffset;
+		a = this.legaliseSplitPoint(a);
+		p = a + this.dragOffset;
+
+		this.lastPoint = p + this.screenToClientOffset;
+	},
+
+	legaliseSplitPoint: function(a){
+
+		a += this.sizingSplitter.position;
+
+		this.isDraggingLeft = !!(a > 0);
+
+		if(!this.activeSizing){
+			var min = this.paneBefore.position + this.paneBefore.sizeMin;
+			if(a < min){
+				a = min;
+			}
+
+			var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
+			if(a > max){
+				a = max;
+			}
+		}
+
+		a -= this.sizingSplitter.position;
+
+		this._checkSizes();
+
+		return a;
+	},
+
+	_updateSize: function(){
+	//FIXME: sometimes this.lastPoint is NaN
+		var pos = this.lastPoint - this.dragOffset - this.originPos;
+
+		var start_region = this.paneBefore.position;
+		var end_region = this.paneAfter.position + this.paneAfter.sizeActual;
+
+		this.paneBefore.sizeActual = pos - start_region;
+		this.paneAfter.position	= pos + this.sizerWidth;
+		this.paneAfter.sizeActual = end_region - this.paneAfter.position;
+
+		dojo.forEach(this.getChildren(), function(child){
+			child.sizeShare = child.sizeActual;
+		});
+
+		if(this._started){
+			this.layout();
+		}
+	},
+
+	_showSizingLine: function(){
+
+		this._moveSizingLine();
+
+		dojo.marginBox(this.virtualSizer,
+			this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth });
+
+		this.virtualSizer.style.display = 'block';
+	},
+
+	_hideSizingLine: function(){
+		this.virtualSizer.style.display = 'none';
+	},
+
+	_moveSizingLine: function(){
+		var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
+		dojo.style(this.virtualSizer,(this.isHorizontal ? "left" : "top"),pos+"px");
+		// this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; // FIXME: remove this line if the previous is better
+	},
+
+	_getCookieName: function(i){
+		return this.id + "_" + i;
+	},
+
+	_restoreState: function(){
+		dojo.forEach(this.getChildren(), function(child, i){
+			var cookieName = this._getCookieName(i);
+			var cookieValue = dojo.cookie(cookieName);
+			if(cookieValue){
+				var pos = parseInt(cookieValue);
+				if(typeof pos == "number"){
+					child.sizeShare = pos;
+				}
+			}
+		}, this);
+	},
+
+	_saveState: function(){
+		if(!this.persist){
+			return;
+		}
+		dojo.forEach(this.getChildren(), function(child, i){
+			dojo.cookie(this._getCookieName(i), child.sizeShare, {expires:365});
+		}, this);
+	}
+});
+
+// These arguments can be specified for the children of a SplitContainer.
+// Since any widget can be specified as a SplitContainer child, mix them
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget, {
+	// sizeMin: [deprecated] Integer
+	//		Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
+	//		Minimum size (width or height) of a child of a SplitContainer.
+	//		The value is relative to other children's sizeShare properties.
+	sizeMin: 10,
+
+	// sizeShare: [deprecated] Integer
+	//		Deprecated.  Parameter for children of `dijit.layout.SplitContainer`.
+	//		Size (width or height) of a child of a SplitContainer.
+	//		The value is relative to other children's sizeShare properties.
+	//		For example, if there are two children and each has sizeShare=10, then
+	//		each takes up 50% of the available space.
+	sizeShare: 10
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout._TabContainerBase"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout._TabContainerBase"] = true;
+dojo.provide("dijit.layout._TabContainerBase");
+
+
+
+
+dojo.declare("dijit.layout._TabContainerBase",
+	[dijit.layout.StackContainer, dijit._Templated],
+	{
+	// summary:
+	//		Abstract base class for TabContainer.   Must define _makeController() to instantiate
+	//		and return the widget that displays the tab labels
+	// description:
+	//		A TabContainer is a container that has multiple panes, but shows only
+	//		one pane at a time.  There are a set of tabs corresponding to each pane,
+	//		where each tab has the name (aka title) of the pane, and optionally a close button.
+
+	// tabPosition: String
+	//		Defines where tabs go relative to tab content.
+	//		"top", "bottom", "left-h", "right-h"
+	tabPosition: "top",
+
+	baseClass: "dijitTabContainer",
+
+	// tabStrip: Boolean
+	//		Defines whether the tablist gets an extra class for layouting, putting a border/shading
+	//		around the set of tabs.
+	tabStrip: false,
+
+	// nested: Boolean
+	//		If true, use styling for a TabContainer nested inside another TabContainer.
+	//		For tundra etc., makes tabs look like links, and hides the outer
+	//		border since the outer TabContainer already has a border.
+	nested: false,
+
+	templateString: dojo.cache("dijit.layout", "templates/TabContainer.html", "<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" dojoAttachPoint=\"tablistNode\"></div>\n\t<div dojoAttachPoint=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n"),
+
+	postMixInProperties: function(){
+		// set class name according to tab position, ex: dijitTabContainerTop
+		this.baseClass += this.tabPosition.charAt(0).toUpperCase() + this.tabPosition.substr(1).replace(/-.*/, "");
+
+		this.srcNodeRef && dojo.style(this.srcNodeRef, "visibility", "hidden");
+
+		this.inherited(arguments);
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		// Create the tab list that will have a tab (a.k.a. tab button) for each tab panel
+		this.tablist = this._makeController(this.tablistNode);
+
+		if(!this.doLayout){ dojo.addClass(this.domNode, "dijitTabContainerNoLayout"); }
+
+		if(this.nested){
+			/* workaround IE's lack of support for "a > b" selectors by
+			 * tagging each node in the template.
+			 */
+			dojo.addClass(this.domNode, "dijitTabContainerNested");
+			dojo.addClass(this.tablist.containerNode, "dijitTabContainerTabListNested");
+			dojo.addClass(this.tablistSpacer, "dijitTabContainerSpacerNested");
+			dojo.addClass(this.containerNode, "dijitTabPaneWrapperNested");
+		}else{
+			dojo.addClass(this.domNode, "tabStrip-" + (this.tabStrip ? "enabled" : "disabled"));
+		}
+	},
+
+	_setupChild: function(/*dijit._Widget*/ tab){
+		// Overrides StackContainer._setupChild().
+		dojo.addClass(tab.domNode, "dijitTabPane");
+		this.inherited(arguments);
+	},
+
+	startup: function(){
+		if(this._started){ return; }
+
+		// wire up the tablist and its tabs
+		this.tablist.startup();
+
+		this.inherited(arguments);
+	},
+
+	layout: function(){
+		// Overrides StackContainer.layout().
+		// Configure the content pane to take up all the space except for where the tabs are
+
+		if(!this._contentBox || typeof(this._contentBox.l) == "undefined"){return;}
+
+		var sc = this.selectedChildWidget;
+
+		if(this.doLayout){
+			// position and size the titles and the container node
+			var titleAlign = this.tabPosition.replace(/-h/, "");
+			this.tablist.layoutAlign = titleAlign;
+			var children = [this.tablist, {
+				domNode: this.tablistSpacer,
+				layoutAlign: titleAlign
+			}, {
+				domNode: this.containerNode,
+				layoutAlign: "client"
+			}];
+			dijit.layout.layoutChildren(this.domNode, this._contentBox, children);
+
+			// Compute size to make each of my children.
+			// children[2] is the margin-box size of this.containerNode, set by layoutChildren() call above
+			this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[2]);
+
+			if(sc && sc.resize){
+				sc.resize(this._containerContentBox);
+			}
+		}else{
+			// just layout the tab controller, so it can position left/right buttons etc.
+			if(this.tablist.resize){
+				this.tablist.resize({w: dojo.contentBox(this.domNode).w});
+			}
+
+			// and call resize() on the selected pane just to tell it that it's been made visible
+			if(sc && sc.resize){
+				sc.resize();
+			}
+		}
+	},
+
+	destroy: function(){
+		if(this.tablist){
+			this.tablist.destroy();
+		}
+		this.inherited(arguments);
+	}
+});
+
+
+}
+
+if(!dojo._hasResource["dijit.layout.TabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.TabController"] = true;
+dojo.provide("dijit.layout.TabController");
+
+
+
+// Menu is used for an accessible close button, would be nice to have a lighter-weight solution
+
+
+
+
+
+dojo.declare("dijit.layout.TabController",
+	dijit.layout.StackController,
+{
+	// summary:
+	// 		Set of tabs (the things with titles and a close button, that you click to show a tab panel).
+	//		Used internally by `dijit.layout.TabContainer`.
+	// description:
+	//		Lets the user select the currently shown pane in a TabContainer or StackContainer.
+	//		TabController also monitors the TabContainer, and whenever a pane is
+	//		added or deleted updates itself accordingly.
+	// tags:
+	//		private
+
+	templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
+
+	// tabPosition: String
+	//		Defines where tabs go relative to the content.
+	//		"top", "bottom", "left-h", "right-h"
+	tabPosition: "top",
+
+	// buttonWidget: String
+	//		The name of the tab widget to create to correspond to each page
+	buttonWidget: "dijit.layout._TabButton",
+
+	_rectifyRtlTabList: function(){
+		// summary:
+		//		For left/right TabContainer when page is RTL mode, rectify the width of all tabs to be equal, otherwise the tab widths are different in IE
+
+		if(0 >= this.tabPosition.indexOf('-h')){ return; }
+		if(!this.pane2button){ return; }
+
+		var maxWidth = 0;
+		for(var pane in this.pane2button){
+			var ow = this.pane2button[pane].innerDiv.scrollWidth;
+			maxWidth = Math.max(maxWidth, ow);
+		}
+		//unify the length of all the tabs
+		for(pane in this.pane2button){
+			this.pane2button[pane].innerDiv.style.width = maxWidth + 'px';
+		}
+	}
+});
+
+dojo.declare("dijit.layout._TabButton",
+	dijit.layout._StackButton,
+	{
+	// summary:
+	//		A tab (the thing you click to select a pane).
+	// description:
+	//		Contains the title of the pane, and optionally a close-button to destroy the pane.
+	//		This is an internal widget and should not be instantiated directly.
+	// tags:
+	//		private
+
+	// baseClass: String
+	//		The CSS class applied to the domNode.
+	baseClass: "dijitTab",
+
+	// Apply dijitTabCloseButtonHover when close button is hovered
+	cssStateNodes: {
+		closeNode: "dijitTabCloseButton"
+	},
+
+	templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),
+
+	// Override _FormWidget.scrollOnFocus.
+	// Don't scroll the whole tab container into view when the button is focused.
+	scrollOnFocus: false,
+
+	postMixInProperties: function(){
+		// Override blank iconClass from Button to do tab height adjustment on IE6,
+		// to make sure that tabs with and w/out close icons are same height
+		if(!this.iconClass){
+			this.iconClass = "dijitTabButtonIcon";
+		}
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		dojo.setSelectable(this.containerNode, false);
+
+		// If a custom icon class has not been set for the
+		// tab icon, set its width to one pixel. This ensures
+		// that the height styling of the tab is maintained,
+		// as it is based on the height of the icon.
+		// TODO: I still think we can just set dijitTabButtonIcon to 1px in CSS <Bill>
+		if(this.iconNode.className == "dijitTabButtonIcon"){
+			dojo.style(this.iconNode, "width", "1px");
+		}
+	},
+
+	startup: function(){
+		this.inherited(arguments);
+		var n = this.domNode;
+
+		// Required to give IE6 a kick, as it initially hides the
+		// tabs until they are focused on.
+		setTimeout(function(){
+			n.className = n.className;
+		}, 1);
+	},
+
+	_setCloseButtonAttr: function(disp){
+		this.closeButton = disp;
+		dojo.toggleClass(this.innerDiv, "dijitClosable", disp);
+		this.closeNode.style.display = disp ? "" : "none";
+		if(disp){
+			var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
+			if(this.closeNode){
+				dojo.attr(this.closeNode,"title", _nlsResources.itemClose);
+			}
+			// add context menu onto title button
+			var _nlsResources = dojo.i18n.getLocalization("dijit", "common");
+			this._closeMenu = new dijit.Menu({
+				id: this.id+"_Menu",
+				dir: this.dir,
+				lang: this.lang,
+				targetNodeIds: [this.domNode]
+			});
+
+			this._closeMenu.addChild(new dijit.MenuItem({
+				label: _nlsResources.itemClose,
+				dir: this.dir,
+				lang: this.lang,
+				onClick: dojo.hitch(this, "onClickCloseButton")
+			}));
+		}else{
+			if(this._closeMenu){
+				this._closeMenu.destroyRecursive();
+				delete this._closeMenu;
+			}
+		}
+	},
+	_setLabelAttr: function(/*String*/ content){
+		// summary:
+		//		Hook for attr('label', ...) to work.
+		// description:
+		//		takes an HTML string.
+		//		Inherited ToggleButton implementation will Set the label (text) of the button; 
+		//		Need to set the alt attribute of icon on tab buttons if no label displayed
+			this.inherited(arguments);
+			if(this.showLabel == false && !this.params.title){
+				this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || '');
+			}
+		},
+
+	destroy: function(){
+		if(this._closeMenu){
+			this._closeMenu.destroyRecursive();
+			delete this._closeMenu;
+		}
+		this.inherited(arguments);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.ScrollingTabController"] = true;
+dojo.provide("dijit.layout.ScrollingTabController");
+
+
+
+
+dojo.declare("dijit.layout.ScrollingTabController",
+	dijit.layout.TabController,
+	{
+	// summary:
+	//		Set of tabs with left/right arrow keys and a menu to switch between tabs not
+	//		all fitting on a single row.
+	//		Works only for horizontal tabs (either above or below the content, not to the left
+	//		or right).
+	// tags:
+	//		private
+
+	templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"),
+
+	// useMenu:[const] Boolean
+	//		True if a menu should be used to select tabs when they are too
+	//		wide to fit the TabContainer, false otherwise.
+	useMenu: true,
+
+	// useSlider: [const] Boolean
+	//		True if a slider should be used to select tabs when they are too
+	//		wide to fit the TabContainer, false otherwise.
+	useSlider: true,
+
+	// tabStripClass: String
+	//		The css class to apply to the tab strip, if it is visible.
+	tabStripClass: "",
+
+	widgetsInTemplate: true,
+
+	// _minScroll: Number
+	//		The distance in pixels from the edge of the tab strip which,
+	//		if a scroll animation is less than, forces the scroll to
+	//		go all the way to the left/right.
+	_minScroll: 5,
+
+	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+		"class": "containerNode"
+	}),
+
+	postCreate: function(){
+		this.inherited(arguments);
+		var n = this.domNode;
+
+		this.scrollNode = this.tablistWrapper;
+		this._initButtons();
+
+		if(!this.tabStripClass){
+			this.tabStripClass = "dijitTabContainer" +
+				this.tabPosition.charAt(0).toUpperCase() +
+				this.tabPosition.substr(1).replace(/-.*/, "") +
+				"None";
+			dojo.addClass(n, "tabStrip-disabled")
+		}
+
+		dojo.addClass(this.tablistWrapper, this.tabStripClass);
+	},
+
+	onStartup: function(){
+		this.inherited(arguments);
+
+		// Do not show the TabController until the related
+		// StackController has added it's children.  This gives
+		// a less visually jumpy instantiation.
+		dojo.style(this.domNode, "visibility", "visible");
+		this._postStartup = true;
+	},
+
+	onAddChild: function(page, insertIndex){
+		this.inherited(arguments);
+		var menuItem;
+		if(this.useMenu){
+			var containerId = this.containerId;
+			menuItem = new dijit.MenuItem({
+				id: page.id + "_stcMi",
+				label: page.title,
+				dir: page.dir,
+				lang: page.lang,
+				onClick: dojo.hitch(this, function(){
+					var container = dijit.byId(containerId);
+					container.selectChild(page);
+				})
+			});
+			this._menuChildren[page.id] = menuItem;
+			this._menu.addChild(menuItem, insertIndex);
+		}
+
+		// update the menuItem label when the button label is updated
+		this.pane2handles[page.id].push(
+			this.connect(this.pane2button[page.id], "set", function(name, value){
+				if(this._postStartup){
+					if(name == "label"){
+						if(menuItem){
+							menuItem.set(name, value);
+						}
+	
+						// The changed label will have changed the width of the
+						// buttons, so do a resize
+						if(this._dim){
+							this.resize(this._dim);
+						}
+					}
+				}
+			})
+		);
+
+		// Increment the width of the wrapper when a tab is added
+		// This makes sure that the buttons never wrap.
+		// The value 200 is chosen as it should be bigger than most
+		// Tab button widths.
+		dojo.style(this.containerNode, "width",
+			(dojo.style(this.containerNode, "width") + 200) + "px");
+	},
+
+	onRemoveChild: function(page, insertIndex){
+		// null out _selectedTab because we are about to delete that dom node
+		var button = this.pane2button[page.id];
+		if(this._selectedTab === button.domNode){
+			this._selectedTab = null;
+		}
+
+		// delete menu entry corresponding to pane that was removed from TabContainer
+		if(this.useMenu && page && page.id && this._menuChildren[page.id]){
+			this._menu.removeChild(this._menuChildren[page.id]);
+			this._menuChildren[page.id].destroy();
+			delete this._menuChildren[page.id];
+		}
+
+		this.inherited(arguments);
+	},
+
+	_initButtons: function(){
+		// summary:
+		//		Creates the buttons used to scroll to view tabs that
+		//		may not be visible if the TabContainer is too narrow.
+		this._menuChildren = {};
+
+		// Make a list of the buttons to display when the tab labels become
+		// wider than the TabContainer, and hide the other buttons.
+		// Also gets the total width of the displayed buttons.
+		this._btnWidth = 0;
+		this._buttons = dojo.query("> .tabStripButton", this.domNode).filter(function(btn){
+			if((this.useMenu && btn == this._menuBtn.domNode) ||
+				(this.useSlider && (btn == this._rightBtn.domNode || btn == this._leftBtn.domNode))){
+				this._btnWidth += dojo.marginBox(btn).w;
+				return true;
+			}else{
+				dojo.style(btn, "display", "none");
+				return false;
+			}
+		}, this);
+
+		if(this.useMenu){
+			// Create the menu that is used to select tabs.
+			this._menu = new dijit.Menu({
+				id: this.id + "_menu",
+				dir: this.dir,
+				lang: this.lang,
+				targetNodeIds: [this._menuBtn.domNode],
+				leftClickToOpen: true,
+				refocus: false	// selecting a menu item sets focus to a TabButton
+			});
+			this._supportingWidgets.push(this._menu);
+		}
+	},
+
+	_getTabsWidth: function(){
+		var children = this.getChildren();
+		if(children.length){
+			var leftTab = children[this.isLeftToRight() ? 0 : children.length - 1].domNode,
+				rightTab = children[this.isLeftToRight() ? children.length - 1 : 0].domNode;
+			return rightTab.offsetLeft + dojo.style(rightTab, "width") - leftTab.offsetLeft;
+		}else{
+			return 0;
+		}
+	},
+
+	_enableBtn: function(width){
+		// summary:
+		//		Determines if the tabs are wider than the width of the TabContainer, and
+		//		thus that we need to display left/right/menu navigation buttons.
+		var tabsWidth = this._getTabsWidth();
+		width = width || dojo.style(this.scrollNode, "width");
+		return tabsWidth > 0 && width < tabsWidth;
+	},
+
+	resize: function(dim){
+		// summary:
+		//		Hides or displays the buttons used to scroll the tab list and launch the menu
+		//		that selects tabs.
+
+		if(this.domNode.offsetWidth == 0){
+			return;
+		}
+
+		// Save the dimensions to be used when a child is renamed.
+		this._dim = dim;
+
+		// Set my height to be my natural height (tall enough for one row of tab labels),
+		// and my content-box width based on margin-box width specified in dim parameter.
+		// But first reset scrollNode.height in case it was set by layoutChildren() call
+		// in a previous run of this method.
+		this.scrollNode.style.height = "auto";
+		this._contentBox = dijit.layout.marginBox2contentBox(this.domNode, {h: 0, w: dim.w});
+		this._contentBox.h = this.scrollNode.offsetHeight;
+		dojo.contentBox(this.domNode, this._contentBox);
+
+		// Show/hide the left/right/menu navigation buttons depending on whether or not they
+		// are needed.
+		var enable = this._enableBtn(this._contentBox.w);
+		this._buttons.style("display", enable ? "" : "none");
+
+		// Position and size the navigation buttons and the tablist
+		this._leftBtn.layoutAlign = "left";
+		this._rightBtn.layoutAlign = "right";
+		this._menuBtn.layoutAlign = this.isLeftToRight() ? "right" : "left";
+		dijit.layout.layoutChildren(this.domNode, this._contentBox,
+			[this._menuBtn, this._leftBtn, this._rightBtn, {domNode: this.scrollNode, layoutAlign: "client"}]);
+
+		// set proper scroll so that selected tab is visible
+		if(this._selectedTab){
+			if(this._anim && this._anim.status() == "playing"){
+				this._anim.stop();
+			}
+			var w = this.scrollNode,
+				sl = this._convertToScrollLeft(this._getScrollForSelectedTab());
+			w.scrollLeft = sl;
+		}
+
+		// Enable/disabled left right buttons depending on whether or not user can scroll to left or right
+		this._setButtonClass(this._getScroll());
+		
+		this._postResize = true;
+	},
+
+	_getScroll: function(){
+		// summary:
+		//		Returns the current scroll of the tabs where 0 means
+		//		"scrolled all the way to the left" and some positive number, based on #
+		//		of pixels of possible scroll (ex: 1000) means "scrolled all the way to the right"
+		var sl = (this.isLeftToRight() || dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.isWebKit) ? this.scrollNode.scrollLeft :
+				dojo.style(this.containerNode, "width") - dojo.style(this.scrollNode, "width")
+					 + (dojo.isIE == 8 ? -1 : 1) * this.scrollNode.scrollLeft;
+		return sl;
+	},
+
+	_convertToScrollLeft: function(val){
+		// summary:
+		//		Given a scroll value where 0 means "scrolled all the way to the left"
+		//		and some positive number, based on # of pixels of possible scroll (ex: 1000)
+		//		means "scrolled all the way to the right", return value to set this.scrollNode.scrollLeft
+		//		to achieve that scroll.
+		//
+		//		This method is to adjust for RTL funniness in various browsers and versions.
+		if(this.isLeftToRight() || dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.isWebKit){
+			return val;
+		}else{
+			var maxScroll = dojo.style(this.containerNode, "width") - dojo.style(this.scrollNode, "width");
+			return (dojo.isIE == 8 ? -1 : 1) * (val - maxScroll);
+		}
+	},
+
+	onSelectChild: function(/*dijit._Widget*/ page){
+		// summary:
+		//		Smoothly scrolls to a tab when it is selected.
+
+		var tab = this.pane2button[page.id];
+		if(!tab || !page){return;}
+
+		// Scroll to the selected tab, except on startup, when scrolling is handled in resize()
+		var node = tab.domNode;
+		if(this._postResize && node != this._selectedTab){
+			this._selectedTab = node;
+
+			var sl = this._getScroll();
+
+			if(sl > node.offsetLeft ||
+					sl + dojo.style(this.scrollNode, "width") <
+					node.offsetLeft + dojo.style(node, "width")){
+				this.createSmoothScroll().play();
+			}
+		}
+
+		this.inherited(arguments);
+	},
+
+	_getScrollBounds: function(){
+		// summary:
+		//		Returns the minimum and maximum scroll setting to show the leftmost and rightmost
+		//		tabs (respectively)
+		var children = this.getChildren(),
+			scrollNodeWidth = dojo.style(this.scrollNode, "width"),		// about 500px
+			containerWidth = dojo.style(this.containerNode, "width"),	// 50,000px
+			maxPossibleScroll = containerWidth - scrollNodeWidth,	// scrolling until right edge of containerNode visible
+			tabsWidth = this._getTabsWidth();
+
+		if(children.length && tabsWidth > scrollNodeWidth){
+			// Scrolling should happen
+			return {
+				min: this.isLeftToRight() ? 0 : children[children.length-1].domNode.offsetLeft,
+				max: this.isLeftToRight() ?
+					(children[children.length-1].domNode.offsetLeft + dojo.style(children[children.length-1].domNode, "width")) - scrollNodeWidth :
+					maxPossibleScroll
+			};
+		}else{
+			// No scrolling needed, all tabs visible, we stay either scrolled to far left or far right (depending on dir)
+			var onlyScrollPosition = this.isLeftToRight() ? 0 : maxPossibleScroll;
+			return {
+				min: onlyScrollPosition,
+				max: onlyScrollPosition
+			};
+		}
+	},
+
+	_getScrollForSelectedTab: function(){
+		// summary:
+		//		Returns the scroll value setting so that the selected tab
+		//		will appear in the center
+		var w = this.scrollNode,
+			n = this._selectedTab,
+			scrollNodeWidth = dojo.style(this.scrollNode, "width"),
+			scrollBounds = this._getScrollBounds();
+
+		// TODO: scroll minimal amount (to either right or left) so that
+		// selected tab is fully visible, and just return if it's already visible?
+		var pos = (n.offsetLeft + dojo.style(n, "width")/2) - scrollNodeWidth/2;
+		pos = Math.min(Math.max(pos, scrollBounds.min), scrollBounds.max);
+
+		// TODO:
+		// If scrolling close to the left side or right side, scroll
+		// all the way to the left or right.  See this._minScroll.
+		// (But need to make sure that doesn't scroll the tab out of view...)
+		return pos;
+	},
+
+	createSmoothScroll : function(x){
+		// summary:
+		//		Creates a dojo._Animation object that smoothly scrolls the tab list
+		//		either to a fixed horizontal pixel value, or to the selected tab.
+		// description:
+		//		If an number argument is passed to the function, that horizontal
+		//		pixel position is scrolled to.  Otherwise the currently selected
+		//		tab is scrolled to.
+		// x: Integer?
+		//		An optional pixel value to scroll to, indicating distance from left.
+
+		// Calculate position to scroll to
+		if(arguments.length > 0){
+			// position specified by caller, just make sure it's within bounds
+			var scrollBounds = this._getScrollBounds();
+			x = Math.min(Math.max(x, scrollBounds.min), scrollBounds.max);
+		}else{
+			// scroll to center the current tab
+			x = this._getScrollForSelectedTab();
+		}
+
+		if(this._anim && this._anim.status() == "playing"){
+			this._anim.stop();
+		}
+
+		var self = this,
+			w = this.scrollNode,
+			anim = new dojo._Animation({
+				beforeBegin: function(){
+					if(this.curve){ delete this.curve; }
+					var oldS = w.scrollLeft,
+						newS = self._convertToScrollLeft(x);
+					anim.curve = new dojo._Line(oldS, newS);
+				},
+				onAnimate: function(val){
+					w.scrollLeft = val;
+				}
+			});
+		this._anim = anim;
+
+		// Disable/enable left/right buttons according to new scroll position
+		this._setButtonClass(x);
+
+		return anim; // dojo._Animation
+	},
+
+	_getBtnNode: function(e){
+		// summary:
+		//		Gets a button DOM node from a mouse click event.
+		// e:
+		//		The mouse click event.
+		var n = e.target;
+		while(n && !dojo.hasClass(n, "tabStripButton")){
+			n = n.parentNode;
+		}
+		return n;
+	},
+
+	doSlideRight: function(e){
+		// summary:
+		//		Scrolls the menu to the right.
+		// e:
+		//		The mouse click event.
+		this.doSlide(1, this._getBtnNode(e));
+	},
+
+	doSlideLeft: function(e){
+		// summary:
+		//		Scrolls the menu to the left.
+		// e:
+		//		The mouse click event.
+		this.doSlide(-1,this._getBtnNode(e));
+	},
+
+	doSlide: function(direction, node){
+		// summary:
+		//		Scrolls the tab list to the left or right by 75% of the widget width.
+		// direction:
+		//		If the direction is 1, the widget scrolls to the right, if it is
+		//		-1, it scrolls to the left.
+
+		if(node && dojo.hasClass(node, "dijitTabDisabled")){return;}
+
+		var sWidth = dojo.style(this.scrollNode, "width");
+		var d = (sWidth * 0.75) * direction;
+
+		var to = this._getScroll() + d;
+
+		this._setButtonClass(to);
+
+		this.createSmoothScroll(to).play();
+	},
+
+	_setButtonClass: function(scroll){
+		// summary:
+		//		Disables the left scroll button if the tabs are scrolled all the way to the left,
+		//		or the right scroll button in the opposite case.
+		// scroll: Integer
+		//		amount of horizontal scroll
+
+		var scrollBounds = this._getScrollBounds();
+		this._leftBtn.set("disabled", scroll <= scrollBounds.min);
+		this._rightBtn.set("disabled", scroll >= scrollBounds.max);
+	}
+});
+
+dojo.declare("dijit.layout._ScrollingTabControllerButton",
+	dijit.form.Button,
+	{
+		baseClass: "dijitTab tabStripButton",
+
+		templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),
+
+		// Override inherited tabIndex: 0 from dijit.form.Button, because user shouldn't be
+		// able to tab to the left/right/menu buttons
+		tabIndex: "-1"
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout.TabContainer"] = true;
+dojo.provide("dijit.layout.TabContainer");
+
+
+
+
+
+dojo.declare("dijit.layout.TabContainer",
+	dijit.layout._TabContainerBase,
+	{
+		// summary:
+		//		A Container with tabs to select each child (only one of which is displayed at a time).
+		// description:
+		//		A TabContainer is a container that has multiple panes, but shows only
+		//		one pane at a time.  There are a set of tabs corresponding to each pane,
+		//		where each tab has the name (aka title) of the pane, and optionally a close button.
+
+		// useMenu: [const] Boolean
+		//		True if a menu should be used to select tabs when they are too
+		//		wide to fit the TabContainer, false otherwise.
+		useMenu: true,
+
+		// useSlider: [const] Boolean
+		//		True if a slider should be used to select tabs when they are too
+		//		wide to fit the TabContainer, false otherwise.
+		useSlider: true,
+
+		// controllerWidget: String
+		//		An optional parameter to override the widget used to display the tab labels
+		controllerWidget: "",
+
+		_makeController: function(/*DomNode*/ srcNode){
+			// summary:
+			//		Instantiate tablist controller widget and return reference to it.
+			//		Callback from _TabContainerBase.postCreate().
+			// tags:
+			//		protected extension
+
+			var cls = this.baseClass + "-tabs" + (this.doLayout ? "" : " dijitTabNoLayout"),
+				TabController = dojo.getObject(this.controllerWidget);
+
+			return new TabController({
+				id: this.id + "_tablist",
+				dir: this.dir,
+				lang: this.lang,
+				tabPosition: this.tabPosition,
+				doLayout: this.doLayout,
+				containerId: this.id,
+				"class": cls,
+				nested: this.nested,
+				useMenu: this.useMenu,
+				useSlider: this.useSlider,
+				tabStripClass: this.tabStrip ? this.baseClass + (this.tabStrip ? "":"No") + "Strip": null
+			}, srcNode);
+		},
+
+		postMixInProperties: function(){
+			this.inherited(arguments);
+
+			// Scrolling controller only works for horizontal non-nested tabs
+			if(!this.controllerWidget){
+				this.controllerWidget = (this.tabPosition == "top" || this.tabPosition == "bottom") && !this.nested ?
+							"dijit.layout.ScrollingTabController" : "dijit.layout.TabController";
+			}
+		}
+});
+
+
+}
+
+if(!dojo._hasResource["dijit.dijit-all"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.dijit-all"] = true;
+console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");
+dojo.provide("dijit.dijit-all");
+
+/*=====
+dijit["dijit-all"] = {
+	// summary:
+	//		A rollup that includes every dijit. You probably don't need this.
+};
+=====*/
+
+
+
+
+
+
+
+
+
+
+// Editor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// Form widgets
+
+
+// Button widgets
+
+
+
+
+
+
+
+// TextBox widgets
+
+
+
+
+
+
+
+// Select widgets
+
+
+
+
+
+// Slider widgets
+
+
+
+
+
+
+
+// Textarea widgets
+
+
+
+// Layout widgets
+
+
+
+ //deprecated
+
+ //deprecated
+
+
+
+}
+
+
+dojo.i18n._preloadLocalizations("dijit.nls.dijit-all", ["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
Index: trunk/web/dojo/dijit/PopupMenuBarItem.js
===================================================================
--- trunk/web/dojo/dijit/PopupMenuBarItem.js	(revision 0)
+++ trunk/web/dojo/dijit/PopupMenuBarItem.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.PopupMenuBarItem"]){
+dojo._hasResource["dijit.PopupMenuBarItem"]=true;
+dojo.provide("dijit.PopupMenuBarItem");
+dojo.require("dijit.PopupMenuItem");
+dojo.require("dijit.MenuBarItem");
+dojo.declare("dijit.PopupMenuBarItem",[dijit.PopupMenuItem,dijit._MenuBarItemMixin],{});
+}
Index: trunk/web/dojo/dijit/_base/manager.js
===================================================================
--- trunk/web/dojo/dijit/_base/manager.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/manager.js	(revision 9)
@@ -0,0 +1,245 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.manager"]){
+dojo._hasResource["dijit._base.manager"]=true;
+dojo.provide("dijit._base.manager");
+dojo.declare("dijit.WidgetSet",null,{constructor:function(){
+this._hash={};
+this.length=0;
+},add:function(_1){
+if(this._hash[_1.id]){
+throw new Error("Tried to register widget with id=="+_1.id+" but that id is already registered");
+}
+this._hash[_1.id]=_1;
+this.length++;
+},remove:function(id){
+if(this._hash[id]){
+delete this._hash[id];
+this.length--;
+}
+},forEach:function(_2,_3){
+_3=_3||dojo.global;
+var i=0,id;
+for(id in this._hash){
+_2.call(_3,this._hash[id],i++,this._hash);
+}
+return this;
+},filter:function(_4,_5){
+_5=_5||dojo.global;
+var _6=new dijit.WidgetSet(),i=0,id;
+for(id in this._hash){
+var w=this._hash[id];
+if(_4.call(_5,w,i++,this._hash)){
+_6.add(w);
+}
+}
+return _6;
+},byId:function(id){
+return this._hash[id];
+},byClass:function(_7){
+var _8=new dijit.WidgetSet(),id,_9;
+for(id in this._hash){
+_9=this._hash[id];
+if(_9.declaredClass==_7){
+_8.add(_9);
+}
+}
+return _8;
+},toArray:function(){
+var ar=[];
+for(var id in this._hash){
+ar.push(this._hash[id]);
+}
+return ar;
+},map:function(_a,_b){
+return dojo.map(this.toArray(),_a,_b);
+},every:function(_c,_d){
+_d=_d||dojo.global;
+var x=0,i;
+for(i in this._hash){
+if(!_c.call(_d,this._hash[i],x++,this._hash)){
+return false;
+}
+}
+return true;
+},some:function(_e,_f){
+_f=_f||dojo.global;
+var x=0,i;
+for(i in this._hash){
+if(_e.call(_f,this._hash[i],x++,this._hash)){
+return true;
+}
+}
+return false;
+}});
+(function(){
+dijit.registry=new dijit.WidgetSet();
+var _10=dijit.registry._hash,_11=dojo.attr,_12=dojo.hasAttr,_13=dojo.style;
+dijit.byId=function(id){
+return typeof id=="string"?_10[id]:id;
+};
+var _14={};
+dijit.getUniqueId=function(_15){
+var id;
+do{
+id=_15+"_"+(_15 in _14?++_14[_15]:_14[_15]=0);
+}while(_10[id]);
+return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;
+};
+dijit.findWidgets=function(_16){
+var _17=[];
+function _18(_19){
+for(var _1a=_19.firstChild;_1a;_1a=_1a.nextSibling){
+if(_1a.nodeType==1){
+var _1b=_1a.getAttribute("widgetId");
+if(_1b){
+_17.push(_10[_1b]);
+}else{
+_18(_1a);
+}
+}
+}
+};
+_18(_16);
+return _17;
+};
+dijit._destroyAll=function(){
+dijit._curFocus=null;
+dijit._prevFocus=null;
+dijit._activeStack=[];
+dojo.forEach(dijit.findWidgets(dojo.body()),function(_1c){
+if(!_1c._destroyed){
+if(_1c.destroyRecursive){
+_1c.destroyRecursive();
+}else{
+if(_1c.destroy){
+_1c.destroy();
+}
+}
+}
+});
+};
+if(dojo.isIE){
+dojo.addOnWindowUnload(function(){
+dijit._destroyAll();
+});
+}
+dijit.byNode=function(_1d){
+return _10[_1d.getAttribute("widgetId")];
+};
+dijit.getEnclosingWidget=function(_1e){
+while(_1e){
+var id=_1e.getAttribute&&_1e.getAttribute("widgetId");
+if(id){
+return _10[id];
+}
+_1e=_1e.parentNode;
+}
+return null;
+};
+var _1f=(dijit._isElementShown=function(_20){
+var s=_13(_20);
+return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_11(_20,"type")!="hidden");
+});
+dijit.hasDefaultTabStop=function(_21){
+switch(_21.nodeName.toLowerCase()){
+case "a":
+return _12(_21,"href");
+case "area":
+case "button":
+case "input":
+case "object":
+case "select":
+case "textarea":
+return true;
+case "iframe":
+if(dojo.isMoz){
+try{
+return _21.contentDocument.designMode=="on";
+}
+catch(err){
+return false;
+}
+}else{
+if(dojo.isWebKit){
+var doc=_21.contentDocument,_22=doc&&doc.body;
+return _22&&_22.contentEditable=="true";
+}else{
+try{
+doc=_21.contentWindow.document;
+_22=doc&&doc.body;
+return _22&&_22.firstChild&&_22.firstChild.contentEditable=="true";
+}
+catch(e){
+return false;
+}
+}
+}
+default:
+return _21.contentEditable=="true";
+}
+};
+var _23=(dijit.isTabNavigable=function(_24){
+if(_11(_24,"disabled")){
+return false;
+}else{
+if(_12(_24,"tabIndex")){
+return _11(_24,"tabIndex")>=0;
+}else{
+return dijit.hasDefaultTabStop(_24);
+}
+}
+});
+dijit._getTabNavigable=function(_25){
+var _26,_27,_28,_29,_2a,_2b;
+var _2c=function(_2d){
+dojo.query("> *",_2d).forEach(function(_2e){
+if((dojo.isIE&&_2e.scopeName!=="HTML")||!_1f(_2e)){
+return;
+}
+if(_23(_2e)){
+var _2f=_11(_2e,"tabIndex");
+if(!_12(_2e,"tabIndex")||_2f==0){
+if(!_26){
+_26=_2e;
+}
+_27=_2e;
+}else{
+if(_2f>0){
+if(!_28||_2f<_29){
+_29=_2f;
+_28=_2e;
+}
+if(!_2a||_2f>=_2b){
+_2b=_2f;
+_2a=_2e;
+}
+}
+}
+}
+if(_2e.nodeName.toUpperCase()!="SELECT"){
+_2c(_2e);
+}
+});
+};
+if(_1f(_25)){
+_2c(_25);
+}
+return {first:_26,last:_27,lowest:_28,highest:_2a};
+};
+dijit.getFirstInTabbingOrder=function(_30){
+var _31=dijit._getTabNavigable(dojo.byId(_30));
+return _31.lowest?_31.lowest:_31.first;
+};
+dijit.getLastInTabbingOrder=function(_32){
+var _33=dijit._getTabNavigable(dojo.byId(_32));
+return _33.last?_33.last:_33.highest;
+};
+dijit.defaultDuration=dojo.config["defaultDuration"]||200;
+})();
+}
Index: trunk/web/dojo/dijit/_base/scroll.js
===================================================================
--- trunk/web/dojo/dijit/_base/scroll.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/scroll.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.scroll"]){
+dojo._hasResource["dijit._base.scroll"]=true;
+dojo.provide("dijit._base.scroll");
+dojo.require("dojo.window");
+dijit.scrollIntoView=function(_1,_2){
+dojo.window.scrollIntoView(_1,_2);
+};
+}
Index: trunk/web/dojo/dijit/_base/focus.js
===================================================================
--- trunk/web/dojo/dijit/_base/focus.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/focus.js	(revision 9)
@@ -0,0 +1,299 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.focus"]){
+dojo._hasResource["dijit._base.focus"]=true;
+dojo.provide("dijit._base.focus");
+dojo.require("dojo.window");
+dojo.require("dijit._base.manager");
+dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){
+return dijit.getBookmark().isCollapsed;
+},getBookmark:function(){
+var bm,rg,tg,_1=dojo.doc.selection,cf=dijit._curFocus;
+if(dojo.global.getSelection){
+_1=dojo.global.getSelection();
+if(_1){
+if(_1.isCollapsed){
+tg=cf?cf.tagName:"";
+if(tg){
+tg=tg.toLowerCase();
+if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){
+_1={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};
+return {isCollapsed:(_1.end<=_1.start),mark:_1};
+}
+}
+bm={isCollapsed:true};
+}else{
+rg=_1.getRangeAt(0);
+bm={isCollapsed:false,mark:rg.cloneRange()};
+}
+}
+}else{
+if(_1){
+tg=cf?cf.tagName:"";
+tg=tg.toLowerCase();
+if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){
+if(_1.type&&_1.type.toLowerCase()=="none"){
+return {isCollapsed:true,mark:null};
+}else{
+rg=_1.createRange();
+return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};
+}
+}
+bm={};
+try{
+rg=_1.createRange();
+bm.isCollapsed=!(_1.type=="Text"?rg.htmlText.length:rg.length);
+}
+catch(e){
+bm.isCollapsed=true;
+return bm;
+}
+if(_1.type.toUpperCase()=="CONTROL"){
+if(rg.length){
+bm.mark=[];
+var i=0,_2=rg.length;
+while(i<_2){
+bm.mark.push(rg.item(i++));
+}
+}else{
+bm.isCollapsed=true;
+bm.mark=null;
+}
+}else{
+bm.mark=rg.getBookmark();
+}
+}else{
+console.warn("No idea how to store the current selection for this browser!");
+}
+}
+return bm;
+},moveToBookmark:function(_3){
+var _4=dojo.doc,_5=_3.mark;
+if(_5){
+if(dojo.global.getSelection){
+var _6=dojo.global.getSelection();
+if(_6&&_6.removeAllRanges){
+if(_5.pRange){
+var r=_5;
+var n=r.node;
+n.selectionStart=r.start;
+n.selectionEnd=r.end;
+}else{
+_6.removeAllRanges();
+_6.addRange(_5);
+}
+}else{
+console.warn("No idea how to restore selection for this browser!");
+}
+}else{
+if(_4.selection&&_5){
+var rg;
+if(_5.pRange){
+rg=_5.range;
+}else{
+if(dojo.isArray(_5)){
+rg=_4.body.createControlRange();
+dojo.forEach(_5,function(n){
+rg.addElement(n);
+});
+}else{
+rg=_4.body.createTextRange();
+rg.moveToBookmark(_5);
+}
+}
+rg.select();
+}
+}
+}
+},getFocus:function(_7,_8){
+var _9=!dijit._curFocus||(_7&&dojo.isDescendant(dijit._curFocus,_7.domNode))?dijit._prevFocus:dijit._curFocus;
+return {node:_9,bookmark:(_9==dijit._curFocus)&&dojo.withGlobal(_8||dojo.global,dijit.getBookmark),openedForWindow:_8};
+},focus:function(_a){
+if(!_a){
+return;
+}
+var _b="node" in _a?_a.node:_a,_c=_a.bookmark,_d=_a.openedForWindow,_e=_c?_c.isCollapsed:false;
+if(_b){
+var _f=(_b.tagName.toLowerCase()=="iframe")?_b.contentWindow:_b;
+if(_f&&_f.focus){
+try{
+_f.focus();
+}
+catch(e){
+}
+}
+dijit._onFocusNode(_b);
+}
+if(_c&&dojo.withGlobal(_d||dojo.global,dijit.isCollapsed)&&!_e){
+if(_d){
+_d.focus();
+}
+try{
+dojo.withGlobal(_d||dojo.global,dijit.moveToBookmark,null,[_c]);
+}
+catch(e2){
+}
+}
+},_activeStack:[],registerIframe:function(_10){
+return dijit.registerWin(_10.contentWindow,_10);
+},unregisterIframe:function(_11){
+dijit.unregisterWin(_11);
+},registerWin:function(_12,_13){
+var _14=function(evt){
+dijit._justMouseDowned=true;
+setTimeout(function(){
+dijit._justMouseDowned=false;
+},0);
+if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){
+return;
+}
+dijit._onTouchNode(_13||evt.target||evt.srcElement,"mouse");
+};
+var doc=dojo.isIE?_12.document.documentElement:_12.document;
+if(doc){
+if(dojo.isIE){
+doc.attachEvent("onmousedown",_14);
+var _15=function(evt){
+if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){
+dijit._onFocusNode(_13||evt.srcElement);
+}else{
+dijit._onTouchNode(_13||evt.srcElement);
+}
+};
+doc.attachEvent("onactivate",_15);
+var _16=function(evt){
+dijit._onBlurNode(_13||evt.srcElement);
+};
+doc.attachEvent("ondeactivate",_16);
+return function(){
+doc.detachEvent("onmousedown",_14);
+doc.detachEvent("onactivate",_15);
+doc.detachEvent("ondeactivate",_16);
+doc=null;
+};
+}else{
+doc.addEventListener("mousedown",_14,true);
+var _17=function(evt){
+dijit._onFocusNode(_13||evt.target);
+};
+doc.addEventListener("focus",_17,true);
+var _18=function(evt){
+dijit._onBlurNode(_13||evt.target);
+};
+doc.addEventListener("blur",_18,true);
+return function(){
+doc.removeEventListener("mousedown",_14,true);
+doc.removeEventListener("focus",_17,true);
+doc.removeEventListener("blur",_18,true);
+doc=null;
+};
+}
+}
+},unregisterWin:function(_19){
+_19&&_19();
+},_onBlurNode:function(_1a){
+dijit._prevFocus=dijit._curFocus;
+dijit._curFocus=null;
+if(dijit._justMouseDowned){
+return;
+}
+if(dijit._clearActiveWidgetsTimer){
+clearTimeout(dijit._clearActiveWidgetsTimer);
+}
+dijit._clearActiveWidgetsTimer=setTimeout(function(){
+delete dijit._clearActiveWidgetsTimer;
+dijit._setStack([]);
+dijit._prevFocus=null;
+},100);
+},_onTouchNode:function(_1b,by){
+if(dijit._clearActiveWidgetsTimer){
+clearTimeout(dijit._clearActiveWidgetsTimer);
+delete dijit._clearActiveWidgetsTimer;
+}
+var _1c=[];
+try{
+while(_1b){
+var _1d=dojo.attr(_1b,"dijitPopupParent");
+if(_1d){
+_1b=dijit.byId(_1d).domNode;
+}else{
+if(_1b.tagName&&_1b.tagName.toLowerCase()=="body"){
+if(_1b===dojo.body()){
+break;
+}
+_1b=dojo.window.get(_1b.ownerDocument).frameElement;
+}else{
+var id=_1b.getAttribute&&_1b.getAttribute("widgetId"),_1e=id&&dijit.byId(id);
+if(_1e&&!(by=="mouse"&&_1e.get("disabled"))){
+_1c.unshift(id);
+}
+_1b=_1b.parentNode;
+}
+}
+}
+}
+catch(e){
+}
+dijit._setStack(_1c,by);
+},_onFocusNode:function(_1f){
+if(!_1f){
+return;
+}
+if(_1f.nodeType==9){
+return;
+}
+dijit._onTouchNode(_1f);
+if(_1f==dijit._curFocus){
+return;
+}
+if(dijit._curFocus){
+dijit._prevFocus=dijit._curFocus;
+}
+dijit._curFocus=_1f;
+dojo.publish("focusNode",[_1f]);
+},_setStack:function(_20,by){
+var _21=dijit._activeStack;
+dijit._activeStack=_20;
+for(var _22=0;_22<Math.min(_21.length,_20.length);_22++){
+if(_21[_22]!=_20[_22]){
+break;
+}
+}
+var _23;
+for(var i=_21.length-1;i>=_22;i--){
+_23=dijit.byId(_21[i]);
+if(_23){
+_23._focused=false;
+_23._hasBeenBlurred=true;
+if(_23._onBlur){
+_23._onBlur(by);
+}
+dojo.publish("widgetBlur",[_23,by]);
+}
+}
+for(i=_22;i<_20.length;i++){
+_23=dijit.byId(_20[i]);
+if(_23){
+_23._focused=true;
+if(_23._onFocus){
+_23._onFocus(by);
+}
+dojo.publish("widgetFocus",[_23,by]);
+}
+}
+}});
+dojo.addOnLoad(function(){
+var _24=dijit.registerWin(window);
+if(dojo.isIE){
+dojo.addOnWindowUnload(function(){
+dijit.unregisterWin(_24);
+_24=null;
+});
+}
+});
+}
Index: trunk/web/dojo/dijit/_base/typematic.js
===================================================================
--- trunk/web/dojo/dijit/_base/typematic.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/typematic.js	(revision 9)
@@ -0,0 +1,87 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.typematic"]){
+dojo._hasResource["dijit._base.typematic"]=true;
+dojo.provide("dijit._base.typematic");
+dijit.typematic={_fireEventAndReload:function(){
+this._timer=null;
+this._callback(++this._count,this._node,this._evt);
+this._currentTimeout=Math.max(this._currentTimeout<0?this._initialDelay:(this._subsequentDelay>1?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay)),this._minDelay);
+this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);
+},trigger:function(_1,_2,_3,_4,_5,_6,_7,_8){
+if(_5!=this._obj){
+this.stop();
+this._initialDelay=_7||500;
+this._subsequentDelay=_6||0.9;
+this._minDelay=_8||10;
+this._obj=_5;
+this._evt=_1;
+this._node=_3;
+this._currentTimeout=-1;
+this._count=-1;
+this._callback=dojo.hitch(_2,_4);
+this._fireEventAndReload();
+this._evt=dojo.mixin({faux:true},_1);
+}
+},stop:function(){
+if(this._timer){
+clearTimeout(this._timer);
+this._timer=null;
+}
+if(this._obj){
+this._callback(-1,this._node,this._evt);
+this._obj=null;
+}
+},addKeyListener:function(_9,_a,_b,_c,_d,_e,_f){
+if(_a.keyCode){
+_a.charOrCode=_a.keyCode;
+dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");
+}else{
+if(_a.charCode){
+_a.charOrCode=String.fromCharCode(_a.charCode);
+dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");
+}
+}
+return [dojo.connect(_9,"onkeypress",this,function(evt){
+if(evt.charOrCode==_a.charOrCode&&(_a.ctrlKey===undefined||_a.ctrlKey==evt.ctrlKey)&&(_a.altKey===undefined||_a.altKey==evt.altKey)&&(_a.metaKey===undefined||_a.metaKey==(evt.metaKey||false))&&(_a.shiftKey===undefined||_a.shiftKey==evt.shiftKey)){
+dojo.stopEvent(evt);
+dijit.typematic.trigger(evt,_b,_9,_c,_a,_d,_e,_f);
+}else{
+if(dijit.typematic._obj==_a){
+dijit.typematic.stop();
+}
+}
+}),dojo.connect(_9,"onkeyup",this,function(evt){
+if(dijit.typematic._obj==_a){
+dijit.typematic.stop();
+}
+})];
+},addMouseListener:function(_10,_11,_12,_13,_14,_15){
+var dc=dojo.connect;
+return [dc(_10,"mousedown",this,function(evt){
+dojo.stopEvent(evt);
+dijit.typematic.trigger(evt,_11,_10,_12,_10,_13,_14,_15);
+}),dc(_10,"mouseup",this,function(evt){
+dojo.stopEvent(evt);
+dijit.typematic.stop();
+}),dc(_10,"mouseout",this,function(evt){
+dojo.stopEvent(evt);
+dijit.typematic.stop();
+}),dc(_10,"mousemove",this,function(evt){
+evt.preventDefault();
+}),dc(_10,"dblclick",this,function(evt){
+dojo.stopEvent(evt);
+if(dojo.isIE){
+dijit.typematic.trigger(evt,_11,_10,_12,_10,_13,_14,_15);
+setTimeout(dojo.hitch(this,dijit.typematic.stop),50);
+}
+})];
+},addListener:function(_16,_17,_18,_19,_1a,_1b,_1c,_1d){
+return this.addKeyListener(_17,_18,_19,_1a,_1b,_1c,_1d).concat(this.addMouseListener(_16,_19,_1a,_1b,_1c,_1d));
+}};
+}
Index: trunk/web/dojo/dijit/_base/wai.js
===================================================================
--- trunk/web/dojo/dijit/_base/wai.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/wai.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.wai"]){
+dojo._hasResource["dijit._base.wai"]=true;
+dojo.provide("dijit._base.wai");
+dijit.wai={onload:function(){
+var _1=dojo.create("div",{id:"a11yTestNode",style:{cssText:"border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif"))+"\");"}},dojo.body());
+var cs=dojo.getComputedStyle(_1);
+if(cs){
+var _2=cs.backgroundImage;
+var _3=(cs.borderTopColor==cs.borderRightColor)||(_2!=null&&(_2=="none"||_2=="url(invalid-url:)"));
+dojo[_3?"addClass":"removeClass"](dojo.body(),"dijit_a11y");
+if(dojo.isIE){
+_1.outerHTML="";
+}else{
+dojo.body().removeChild(_1);
+}
+}
+}};
+if(dojo.isIE||dojo.isMoz){
+dojo._loaders.unshift(dijit.wai.onload);
+}
+dojo.mixin(dijit,{_XhtmlRoles:/banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,hasWaiRole:function(_4,_5){
+var _6=this.getWaiRole(_4);
+return _5?(_6.indexOf(_5)>-1):(_6.length>0);
+},getWaiRole:function(_7){
+return dojo.trim((dojo.attr(_7,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));
+},setWaiRole:function(_8,_9){
+var _a=dojo.attr(_8,"role")||"";
+if(!this._XhtmlRoles.test(_a)){
+dojo.attr(_8,"role",_9);
+}else{
+if((" "+_a+" ").indexOf(" "+_9+" ")<0){
+var _b=dojo.trim(_a.replace(this._XhtmlRoles,""));
+var _c=dojo.trim(_a.replace(_b,""));
+dojo.attr(_8,"role",_c+(_c?" ":"")+_9);
+}
+}
+},removeWaiRole:function(_d,_e){
+var _f=dojo.attr(_d,"role");
+if(!_f){
+return;
+}
+if(_e){
+var t=dojo.trim((" "+_f+" ").replace(" "+_e+" "," "));
+dojo.attr(_d,"role",t);
+}else{
+_d.removeAttribute("role");
+}
+},hasWaiState:function(_10,_11){
+return _10.hasAttribute?_10.hasAttribute("aria-"+_11):!!_10.getAttribute("aria-"+_11);
+},getWaiState:function(_12,_13){
+return _12.getAttribute("aria-"+_13)||"";
+},setWaiState:function(_14,_15,_16){
+_14.setAttribute("aria-"+_15,_16);
+},removeWaiState:function(_17,_18){
+_17.removeAttribute("aria-"+_18);
+}});
+}
Index: trunk/web/dojo/dijit/_base/popup.js
===================================================================
--- trunk/web/dojo/dijit/_base/popup.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/popup.js	(revision 9)
@@ -0,0 +1,158 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.popup"]){
+dojo._hasResource["dijit._base.popup"]=true;
+dojo.provide("dijit._base.popup");
+dojo.require("dijit._base.focus");
+dojo.require("dijit._base.place");
+dojo.require("dijit._base.window");
+dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_1){
+var _2=_1.parentNode;
+if(!_2||!dojo.hasClass(_2,"dijitPopup")){
+_2=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());
+dijit.setWaiRole(_2,"presentation");
+_2.appendChild(_1);
+}
+var s=_1.style;
+s.display="";
+s.visibility="";
+s.position="";
+s.top="0px";
+dojo.style(_2,{visibility:"hidden",top:"-9999px"});
+},getTopPopup:function(){
+var _3=this._stack;
+for(var pi=_3.length-1;pi>0&&_3[pi].parent===_3[pi-1].widget;pi--){
+}
+return _3[pi];
+},open:function(_4){
+var _5=this._stack,_6=_4.popup,_7=_4.orient||((_4.parent?_4.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_8=_4.around,id=(_4.around&&_4.around.id)?(_4.around.id+"_dropdown"):("popup_"+this._idGen++);
+var _9=_6.domNode.parentNode;
+if(!_9||!dojo.hasClass(_9,"dijitPopup")){
+this.moveOffScreen(_6.domNode);
+_9=_6.domNode.parentNode;
+}
+dojo.attr(_9,{id:id,style:{zIndex:this._beginZIndex+_5.length},"class":"dijitPopup "+(_6.baseClass||_6["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_4.parent?_4.parent.id:""});
+if(dojo.isIE||dojo.isMoz){
+var _a=_9.childNodes[1];
+if(!_a){
+_a=new dijit.BackgroundIframe(_9);
+}
+}
+var _b=_8?dijit.placeOnScreenAroundElement(_9,_8,_7,_6.orient?dojo.hitch(_6,"orient"):null):dijit.placeOnScreen(_9,_4,_7=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_4.padding);
+_9.style.visibility="visible";
+_6.domNode.style.visibility="visible";
+var _c=[];
+_c.push(dojo.connect(_9,"onkeypress",this,function(_d){
+if(_d.charOrCode==dojo.keys.ESCAPE&&_4.onCancel){
+dojo.stopEvent(_d);
+_4.onCancel();
+}else{
+if(_d.charOrCode===dojo.keys.TAB){
+dojo.stopEvent(_d);
+var _e=this.getTopPopup();
+if(_e&&_e.onCancel){
+_e.onCancel();
+}
+}
+}
+}));
+if(_6.onCancel){
+_c.push(dojo.connect(_6,"onCancel",_4.onCancel));
+}
+_c.push(dojo.connect(_6,_6.onExecute?"onExecute":"onChange",this,function(){
+var _f=this.getTopPopup();
+if(_f&&_f.onExecute){
+_f.onExecute();
+}
+}));
+_5.push({wrapper:_9,iframe:_a,widget:_6,parent:_4.parent,onExecute:_4.onExecute,onCancel:_4.onCancel,onClose:_4.onClose,handlers:_c});
+if(_6.onOpen){
+_6.onOpen(_b);
+}
+return _b;
+},close:function(_10){
+var _11=this._stack;
+while(dojo.some(_11,function(_12){
+return _12.widget==_10;
+})){
+var top=_11.pop(),_13=top.wrapper,_14=top.iframe,_15=top.widget,_16=top.onClose;
+if(_15.onClose){
+_15.onClose();
+}
+dojo.forEach(top.handlers,dojo.disconnect);
+if(_15&&_15.domNode){
+this.moveOffScreen(_15.domNode);
+}else{
+dojo.destroy(_13);
+}
+if(_16){
+_16();
+}
+}
+}};
+dijit._frames=new function(){
+var _17=[];
+this.pop=function(){
+var _18;
+if(_17.length){
+_18=_17.pop();
+_18.style.display="";
+}else{
+if(dojo.isIE){
+var _19=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";
+var _1a="<iframe src='"+_19+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";
+_18=dojo.doc.createElement(_1a);
+}else{
+_18=dojo.create("iframe");
+_18.src="javascript:\"\"";
+_18.className="dijitBackgroundIframe";
+dojo.style(_18,"opacity",0.1);
+}
+_18.tabIndex=-1;
+dijit.setWaiRole(_18,"presentation");
+}
+return _18;
+};
+this.push=function(_1b){
+_1b.style.display="none";
+_17.push(_1b);
+};
+}();
+dijit.BackgroundIframe=function(_1c){
+if(!_1c.id){
+throw new Error("no id");
+}
+if(dojo.isIE||dojo.isMoz){
+var _1d=dijit._frames.pop();
+_1c.appendChild(_1d);
+if(dojo.isIE<7){
+this.resize(_1c);
+this._conn=dojo.connect(_1c,"onresize",this,function(){
+this.resize(_1c);
+});
+}else{
+dojo.style(_1d,{width:"100%",height:"100%"});
+}
+this.iframe=_1d;
+}
+};
+dojo.extend(dijit.BackgroundIframe,{resize:function(_1e){
+if(this.iframe&&dojo.isIE<7){
+dojo.style(this.iframe,{width:_1e.offsetWidth+"px",height:_1e.offsetHeight+"px"});
+}
+},destroy:function(){
+if(this._conn){
+dojo.disconnect(this._conn);
+this._conn=null;
+}
+if(this.iframe){
+dijit._frames.push(this.iframe);
+delete this.iframe;
+}
+}});
+}
Index: trunk/web/dojo/dijit/_base/place.js
===================================================================
--- trunk/web/dojo/dijit/_base/place.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/place.js	(revision 9)
@@ -0,0 +1,111 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.place"]){
+dojo._hasResource["dijit._base.place"]=true;
+dojo.provide("dijit._base.place");
+dojo.require("dojo.window");
+dojo.require("dojo.AdapterRegistry");
+dijit.getViewport=function(){
+return dojo.window.getBox();
+};
+dijit.placeOnScreen=function(_1,_2,_3,_4){
+var _5=dojo.map(_3,function(_6){
+var c={corner:_6,pos:{x:_2.x,y:_2.y}};
+if(_4){
+c.pos.x+=_6.charAt(1)=="L"?_4.x:-_4.x;
+c.pos.y+=_6.charAt(0)=="T"?_4.y:-_4.y;
+}
+return c;
+});
+return dijit._place(_1,_5);
+};
+dijit._place=function(_7,_8,_9){
+var _a=dojo.window.getBox();
+if(!_7.parentNode||String(_7.parentNode.tagName).toLowerCase()!="body"){
+dojo.body().appendChild(_7);
+}
+var _b=null;
+dojo.some(_8,function(_c){
+var _d=_c.corner;
+var _e=_c.pos;
+if(_9){
+_9(_7,_c.aroundCorner,_d);
+}
+var _f=_7.style;
+var _10=_f.display;
+var _11=_f.visibility;
+_f.visibility="hidden";
+_f.display="";
+var mb=dojo.marginBox(_7);
+_f.display=_10;
+_f.visibility=_11;
+var _12=Math.max(_a.l,_d.charAt(1)=="L"?_e.x:(_e.x-mb.w)),_13=Math.max(_a.t,_d.charAt(0)=="T"?_e.y:(_e.y-mb.h)),_14=Math.min(_a.l+_a.w,_d.charAt(1)=="L"?(_12+mb.w):_e.x),_15=Math.min(_a.t+_a.h,_d.charAt(0)=="T"?(_13+mb.h):_e.y),_16=_14-_12,_17=_15-_13,_18=(mb.w-_16)+(mb.h-_17);
+if(_b==null||_18<_b.overflow){
+_b={corner:_d,aroundCorner:_c.aroundCorner,x:_12,y:_13,w:_16,h:_17,overflow:_18};
+}
+return !_18;
+});
+_7.style.left=_b.x+"px";
+_7.style.top=_b.y+"px";
+if(_b.overflow&&_9){
+_9(_7,_b.aroundCorner,_b.corner);
+}
+return _b;
+};
+dijit.placeOnScreenAroundNode=function(_19,_1a,_1b,_1c){
+_1a=dojo.byId(_1a);
+var _1d=_1a.style.display;
+_1a.style.display="";
+var _1e=dojo.position(_1a,true);
+_1a.style.display=_1d;
+return dijit._placeOnScreenAroundRect(_19,_1e.x,_1e.y,_1e.w,_1e.h,_1b,_1c);
+};
+dijit.placeOnScreenAroundRectangle=function(_1f,_20,_21,_22){
+return dijit._placeOnScreenAroundRect(_1f,_20.x,_20.y,_20.width,_20.height,_21,_22);
+};
+dijit._placeOnScreenAroundRect=function(_23,x,y,_24,_25,_26,_27){
+var _28=[];
+for(var _29 in _26){
+_28.push({aroundCorner:_29,corner:_26[_29],pos:{x:x+(_29.charAt(1)=="L"?0:_24),y:y+(_29.charAt(0)=="T"?0:_25)}});
+}
+return dijit._place(_23,_28,_27);
+};
+dijit.placementRegistry=new dojo.AdapterRegistry();
+dijit.placementRegistry.register("node",function(n,x){
+return typeof x=="object"&&typeof x.offsetWidth!="undefined"&&typeof x.offsetHeight!="undefined";
+},dijit.placeOnScreenAroundNode);
+dijit.placementRegistry.register("rect",function(n,x){
+return typeof x=="object"&&"x" in x&&"y" in x&&"width" in x&&"height" in x;
+},dijit.placeOnScreenAroundRectangle);
+dijit.placeOnScreenAroundElement=function(_2a,_2b,_2c,_2d){
+return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);
+};
+dijit.getPopupAroundAlignment=function(_2e,_2f){
+var _30={};
+dojo.forEach(_2e,function(pos){
+switch(pos){
+case "after":
+_30[_2f?"BR":"BL"]=_2f?"BL":"BR";
+break;
+case "before":
+_30[_2f?"BL":"BR"]=_2f?"BR":"BL";
+break;
+case "below":
+_30[_2f?"BL":"BR"]=_2f?"TL":"TR";
+_30[_2f?"BR":"BL"]=_2f?"TR":"TL";
+break;
+case "above":
+default:
+_30[_2f?"TL":"TR"]=_2f?"BL":"BR";
+_30[_2f?"TR":"TL"]=_2f?"BR":"BL";
+break;
+}
+});
+return _30;
+};
+}
Index: trunk/web/dojo/dijit/_base/sniff.js
===================================================================
--- trunk/web/dojo/dijit/_base/sniff.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/sniff.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.sniff"]){
+dojo._hasResource["dijit._base.sniff"]=true;
+dojo.provide("dijit._base.sniff");
+dojo.require("dojo.uacss");
+}
Index: trunk/web/dojo/dijit/_base/window.js
===================================================================
--- trunk/web/dojo/dijit/_base/window.js	(revision 0)
+++ trunk/web/dojo/dijit/_base/window.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base.window"]){
+dojo._hasResource["dijit._base.window"]=true;
+dojo.provide("dijit._base.window");
+dojo.require("dojo.window");
+dijit.getDocumentWindow=function(_1){
+return dojo.window.get(_1);
+};
+}
Index: trunk/web/dojo/dijit/Dialog.js
===================================================================
--- trunk/web/dojo/dijit/Dialog.js	(revision 0)
+++ trunk/web/dojo/dijit/Dialog.js	(revision 9)
@@ -0,0 +1,256 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Dialog"]){
+dojo._hasResource["dijit.Dialog"]=true;
+dojo.provide("dijit.Dialog");
+dojo.require("dojo.dnd.move");
+dojo.require("dojo.dnd.TimedMoveable");
+dojo.require("dojo.fx");
+dojo.require("dojo.window");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._CssStateMixin");
+dojo.require("dijit.form._FormMixin");
+dojo.require("dijit._DialogMixin");
+dojo.require("dijit.DialogUnderlay");
+dojo.require("dijit.layout.ContentPane");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){
+var _1=dojo.i18n.getLocalization("dijit","common");
+dojo.mixin(this,_1);
+this.inherited(arguments);
+},postCreate:function(){
+dojo.style(this.domNode,{display:"none",position:"absolute"});
+dojo.body().appendChild(this.domNode);
+this.inherited(arguments);
+this.connect(this,"onExecute","hide");
+this.connect(this,"onCancel","hide");
+this._modalconnects=[];
+},onLoad:function(){
+this._position();
+if(this.autofocus){
+this._getFocusItems(this.domNode);
+dijit.focus(this._firstFocusItem);
+}
+this.inherited(arguments);
+},_endDrag:function(e){
+if(e&&e.node&&e.node===this.domNode){
+this._relativePosition=dojo.position(e.node);
+}
+},_setup:function(){
+var _2=this.domNode;
+if(this.titleBar&&this.draggable){
+this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(_2,{handle:this.titleBar}):new dojo.dnd.Moveable(_2,{handle:this.titleBar,timeout:0});
+dojo.subscribe("/dnd/move/stop",this,"_endDrag");
+}else{
+dojo.addClass(_2,"dijitDialogFixed");
+}
+this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){
+return s+"_underlay";
+}).join(" ")};
+this._fadeIn=dojo.fadeIn({node:_2,duration:this.duration,beforeBegin:dojo.hitch(this,function(){
+var _3=dijit._underlay;
+if(!_3){
+_3=dijit._underlay=new dijit.DialogUnderlay(this.underlayAttrs);
+}else{
+_3.set(this.underlayAttrs);
+}
+var ds=dijit._dialogStack,_4=948+ds.length*2;
+if(ds.length==1){
+_3.show();
+}
+dojo.style(dijit._underlay.domNode,"zIndex",_4);
+dojo.style(this.domNode,"zIndex",_4+1);
+}),onEnd:dojo.hitch(this,function(){
+if(this.autofocus){
+this._getFocusItems(this.domNode);
+dijit.focus(this._firstFocusItem);
+}
+})});
+this._fadeOut=dojo.fadeOut({node:_2,duration:this.duration,onEnd:dojo.hitch(this,function(){
+_2.style.display="none";
+var ds=dijit._dialogStack;
+if(ds.length==0){
+dijit._underlay.hide();
+}else{
+dojo.style(dijit._underlay.domNode,"zIndex",948+ds.length*2);
+dijit._underlay.set(ds[ds.length-1].underlayAttrs);
+}
+if(this.refocus){
+var _5=this._savedFocus;
+if(ds.length>0){
+var pd=ds[ds.length-1];
+if(!dojo.isDescendant(_5.node,pd.domNode)){
+pd._getFocusItems(pd.domNode);
+_5=pd._firstFocusItem;
+}
+}
+dijit.focus(_5);
+}
+})});
+},uninitialize:function(){
+var _6=false;
+if(this._fadeIn&&this._fadeIn.status()=="playing"){
+_6=true;
+this._fadeIn.stop();
+}
+if(this._fadeOut&&this._fadeOut.status()=="playing"){
+_6=true;
+this._fadeOut.stop();
+}
+if((this.open||_6)&&!dijit._underlay._destroyed){
+dijit._underlay.hide();
+}
+if(this._moveable){
+this._moveable.destroy();
+}
+this.inherited(arguments);
+},_size:function(){
+this._checkIfSingleChild();
+if(this._singleChild){
+if(this._singleChildOriginalStyle){
+this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;
+}
+delete this._singleChildOriginalStyle;
+}else{
+dojo.style(this.containerNode,{width:"auto",height:"auto"});
+}
+var mb=dojo.marginBox(this.domNode);
+var _7=dojo.window.getBox();
+if(mb.w>=_7.w||mb.h>=_7.h){
+var w=Math.min(mb.w,Math.floor(_7.w*0.75)),h=Math.min(mb.h,Math.floor(_7.h*0.75));
+if(this._singleChild&&this._singleChild.resize){
+this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;
+this._singleChild.resize({w:w,h:h});
+}else{
+dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});
+}
+}else{
+if(this._singleChild&&this._singleChild.resize){
+this._singleChild.resize();
+}
+}
+},_position:function(){
+if(!dojo.hasClass(dojo.body(),"dojoMove")){
+var _8=this.domNode,_9=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(_8),l=Math.floor(_9.l+(p?p.x:(_9.w-bb.w)/2)),t=Math.floor(_9.t+(p?p.y:(_9.h-bb.h)/2));
+dojo.style(_8,{left:l+"px",top:t+"px"});
+}
+},_onKey:function(_a){
+var ds=dijit._dialogStack;
+if(ds[ds.length-1]!=this){
+return;
+}
+if(_a.charOrCode){
+var dk=dojo.keys;
+var _b=_a.target;
+if(_a.charOrCode===dk.TAB){
+this._getFocusItems(this.domNode);
+}
+var _c=(this._firstFocusItem==this._lastFocusItem);
+if(_b==this._firstFocusItem&&_a.shiftKey&&_a.charOrCode===dk.TAB){
+if(!_c){
+dijit.focus(this._lastFocusItem);
+}
+dojo.stopEvent(_a);
+}else{
+if(_b==this._lastFocusItem&&_a.charOrCode===dk.TAB&&!_a.shiftKey){
+if(!_c){
+dijit.focus(this._firstFocusItem);
+}
+dojo.stopEvent(_a);
+}else{
+while(_b){
+if(_b==this.domNode||dojo.hasClass(_b,"dijitPopup")){
+if(_a.charOrCode==dk.ESCAPE){
+this.onCancel();
+}else{
+return;
+}
+}
+_b=_b.parentNode;
+}
+if(_a.charOrCode!==dk.TAB){
+dojo.stopEvent(_a);
+}else{
+if(!dojo.isOpera){
+try{
+this._firstFocusItem.focus();
+}
+catch(e){
+}
+}
+}
+}
+}
+}
+},show:function(){
+if(this.open){
+return;
+}
+if(!this._alreadyInitialized){
+this._setup();
+this._alreadyInitialized=true;
+}
+if(this._fadeOut.status()=="playing"){
+this._fadeOut.stop();
+}
+this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));
+this._modalconnects.push(dojo.connect(window,"onresize",this,function(){
+var _d=dojo.window.getBox();
+if(!this._oldViewport||_d.h!=this._oldViewport.h||_d.w!=this._oldViewport.w){
+this.layout();
+this._oldViewport=_d;
+}
+}));
+this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));
+dojo.style(this.domNode,{opacity:0,display:""});
+this.open=true;
+this._onShow();
+this._size();
+this._position();
+dijit._dialogStack.push(this);
+this._fadeIn.play();
+this._savedFocus=dijit.getFocus(this);
+},hide:function(){
+var ds=dijit._dialogStack;
+if(!this._alreadyInitialized||this!=ds[ds.length-1]){
+return;
+}
+if(this._fadeIn.status()=="playing"){
+this._fadeIn.stop();
+}
+ds.pop();
+this._fadeOut.play();
+if(this._scrollConnected){
+this._scrollConnected=false;
+}
+dojo.forEach(this._modalconnects,dojo.disconnect);
+this._modalconnects=[];
+if(this._relativePosition){
+delete this._relativePosition;
+}
+this.open=false;
+this.onHide();
+},layout:function(){
+if(this.domNode.style.display!="none"){
+if(dijit._underlay){
+dijit._underlay.layout();
+}
+this._position();
+}
+},destroy:function(){
+dojo.forEach(this._modalconnects,dojo.disconnect);
+if(this.refocus&&this.open){
+setTimeout(dojo.hitch(dijit,"focus",this._savedFocus),25);
+}
+this.inherited(arguments);
+}});
+dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});
+dijit._dialogStack=[];
+dojo.require("dijit.TooltipDialog");
+}
Index: trunk/web/dojo/dijit/layout/StackController.js
===================================================================
--- trunk/web/dojo/dijit/layout/StackController.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/StackController.js	(revision 9)
@@ -0,0 +1,174 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.StackController"]){
+dojo._hasResource["dijit.layout.StackController"]=true;
+dojo.provide("dijit.layout.StackController");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.form.ToggleButton");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",containerId:"",buttonWidget:"dijit.layout._StackButton",postCreate:function(){
+dijit.setWaiRole(this.domNode,"tablist");
+this.pane2button={};
+this.pane2handles={};
+this.subscribe(this.containerId+"-startup","onStartup");
+this.subscribe(this.containerId+"-addChild","onAddChild");
+this.subscribe(this.containerId+"-removeChild","onRemoveChild");
+this.subscribe(this.containerId+"-selectChild","onSelectChild");
+this.subscribe(this.containerId+"-containerKeyPress","onContainerKeyPress");
+},onStartup:function(_1){
+dojo.forEach(_1.children,this.onAddChild,this);
+if(_1.selected){
+this.onSelectChild(_1.selected);
+}
+},destroy:function(){
+for(var _2 in this.pane2button){
+this.onRemoveChild(dijit.byId(_2));
+}
+this.inherited(arguments);
+},onAddChild:function(_3,_4){
+var _5=dojo.getObject(this.buttonWidget);
+var _6=new _5({id:this.id+"_"+_3.id,label:_3.title,dir:_3.dir,lang:_3.lang,showLabel:_3.showTitle,iconClass:_3.iconClass,closeButton:_3.closable,title:_3.tooltip});
+dijit.setWaiState(_6.focusNode,"selected","false");
+this.pane2handles[_3.id]=[this.connect(_3,"set",function(_7,_8){
+var _9={title:"label",showTitle:"showLabel",iconClass:"iconClass",closable:"closeButton",tooltip:"title"}[_7];
+if(_9){
+_6.set(_9,_8);
+}
+}),this.connect(_6,"onClick",dojo.hitch(this,"onButtonClick",_3)),this.connect(_6,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",_3))];
+this.addChild(_6,_4);
+this.pane2button[_3.id]=_6;
+_3.controlButton=_6;
+if(!this._currentChild){
+_6.focusNode.setAttribute("tabIndex","0");
+dijit.setWaiState(_6.focusNode,"selected","true");
+this._currentChild=_3;
+}
+if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){
+this._rectifyRtlTabList();
+}
+},onRemoveChild:function(_a){
+if(this._currentChild===_a){
+this._currentChild=null;
+}
+dojo.forEach(this.pane2handles[_a.id],this.disconnect,this);
+delete this.pane2handles[_a.id];
+var _b=this.pane2button[_a.id];
+if(_b){
+this.removeChild(_b);
+delete this.pane2button[_a.id];
+_b.destroy();
+}
+delete _a.controlButton;
+},onSelectChild:function(_c){
+if(!_c){
+return;
+}
+if(this._currentChild){
+var _d=this.pane2button[this._currentChild.id];
+_d.set("checked",false);
+dijit.setWaiState(_d.focusNode,"selected","false");
+_d.focusNode.setAttribute("tabIndex","-1");
+}
+var _e=this.pane2button[_c.id];
+_e.set("checked",true);
+dijit.setWaiState(_e.focusNode,"selected","true");
+this._currentChild=_c;
+_e.focusNode.setAttribute("tabIndex","0");
+var _f=dijit.byId(this.containerId);
+dijit.setWaiState(_f.containerNode,"labelledby",_e.id);
+},onButtonClick:function(_10){
+var _11=dijit.byId(this.containerId);
+_11.selectChild(_10);
+},onCloseButtonClick:function(_12){
+var _13=dijit.byId(this.containerId);
+_13.closeChild(_12);
+if(this._currentChild){
+var b=this.pane2button[this._currentChild.id];
+if(b){
+dijit.focus(b.focusNode||b.domNode);
+}
+}
+},adjacent:function(_14){
+if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){
+_14=!_14;
+}
+var _15=this.getChildren();
+var _16=dojo.indexOf(_15,this.pane2button[this._currentChild.id]);
+var _17=_14?1:_15.length-1;
+return _15[(_16+_17)%_15.length];
+},onkeypress:function(e){
+if(this.disabled||e.altKey){
+return;
+}
+var _18=null;
+if(e.ctrlKey||!e._djpage){
+var k=dojo.keys;
+switch(e.charOrCode){
+case k.LEFT_ARROW:
+case k.UP_ARROW:
+if(!e._djpage){
+_18=false;
+}
+break;
+case k.PAGE_UP:
+if(e.ctrlKey){
+_18=false;
+}
+break;
+case k.RIGHT_ARROW:
+case k.DOWN_ARROW:
+if(!e._djpage){
+_18=true;
+}
+break;
+case k.PAGE_DOWN:
+if(e.ctrlKey){
+_18=true;
+}
+break;
+case k.DELETE:
+if(this._currentChild.closable){
+this.onCloseButtonClick(this._currentChild);
+}
+dojo.stopEvent(e);
+break;
+default:
+if(e.ctrlKey){
+if(e.charOrCode===k.TAB){
+this.adjacent(!e.shiftKey).onClick();
+dojo.stopEvent(e);
+}else{
+if(e.charOrCode=="w"){
+if(this._currentChild.closable){
+this.onCloseButtonClick(this._currentChild);
+}
+dojo.stopEvent(e);
+}
+}
+}
+}
+if(_18!==null){
+this.adjacent(_18).onClick();
+dojo.stopEvent(e);
+}
+}
+},onContainerKeyPress:function(_19){
+_19.e._djpage=_19.page;
+this.onkeypress(_19.e);
+}});
+dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){
+dijit.setWaiRole((this.focusNode||this.domNode),"tab");
+this.inherited(arguments);
+},onClick:function(evt){
+dijit.focus(this.focusNode);
+},onClickCloseButton:function(evt){
+evt.stopPropagation();
+}});
+}
Index: trunk/web/dojo/dijit/layout/TabContainer.js
===================================================================
--- trunk/web/dojo/dijit/layout/TabContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/TabContainer.js	(revision 9)
@@ -0,0 +1,23 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.TabContainer"]){
+dojo._hasResource["dijit.layout.TabContainer"]=true;
+dojo.provide("dijit.layout.TabContainer");
+dojo.require("dijit.layout._TabContainerBase");
+dojo.require("dijit.layout.TabController");
+dojo.require("dijit.layout.ScrollingTabController");
+dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_1){
+var _2=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_3=dojo.getObject(this.controllerWidget);
+return new _3({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":_2,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_1);
+},postMixInProperties:function(){
+this.inherited(arguments);
+if(!this.controllerWidget){
+this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";
+}
+}});
+}
Index: trunk/web/dojo/dijit/layout/TabController.js
===================================================================
--- trunk/web/dojo/dijit/layout/TabController.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/TabController.js	(revision 9)
@@ -0,0 +1,77 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.TabController"]){
+dojo._hasResource["dijit.layout.TabController"]=true;
+dojo.provide("dijit.layout.TabController");
+dojo.require("dijit.layout.StackController");
+dojo.require("dijit.Menu");
+dojo.require("dijit.MenuItem");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",tabPosition:"top",buttonWidget:"dijit.layout._TabButton",_rectifyRtlTabList:function(){
+if(0>=this.tabPosition.indexOf("-h")){
+return;
+}
+if(!this.pane2button){
+return;
+}
+var _1=0;
+for(var _2 in this.pane2button){
+var ow=this.pane2button[_2].innerDiv.scrollWidth;
+_1=Math.max(_1,ow);
+}
+for(_2 in this.pane2button){
+this.pane2button[_2].innerDiv.style.width=_1+"px";
+}
+}});
+dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),scrollOnFocus:false,postMixInProperties:function(){
+if(!this.iconClass){
+this.iconClass="dijitTabButtonIcon";
+}
+},postCreate:function(){
+this.inherited(arguments);
+dojo.setSelectable(this.containerNode,false);
+if(this.iconNode.className=="dijitTabButtonIcon"){
+dojo.style(this.iconNode,"width","1px");
+}
+},startup:function(){
+this.inherited(arguments);
+var n=this.domNode;
+setTimeout(function(){
+n.className=n.className;
+},1);
+},_setCloseButtonAttr:function(_3){
+this.closeButton=_3;
+dojo.toggleClass(this.innerDiv,"dijitClosable",_3);
+this.closeNode.style.display=_3?"":"none";
+if(_3){
+var _4=dojo.i18n.getLocalization("dijit","common");
+if(this.closeNode){
+dojo.attr(this.closeNode,"title",_4.itemClose);
+}
+var _4=dojo.i18n.getLocalization("dijit","common");
+this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});
+this._closeMenu.addChild(new dijit.MenuItem({label:_4.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));
+}else{
+if(this._closeMenu){
+this._closeMenu.destroyRecursive();
+delete this._closeMenu;
+}
+}
+},_setLabelAttr:function(_5){
+this.inherited(arguments);
+if(this.showLabel==false&&!this.params.title){
+this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");
+}
+},destroy:function(){
+if(this._closeMenu){
+this._closeMenu.destroyRecursive();
+delete this._closeMenu;
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/layout/ContentPane.js
===================================================================
--- trunk/web/dojo/dijit/layout/ContentPane.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/ContentPane.js	(revision 9)
@@ -0,0 +1,291 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.ContentPane"]){
+dojo._hasResource["dijit.layout.ContentPane"]=true;
+dojo.provide("dijit.layout.ContentPane");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Contained");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dojo.parser");
+dojo.require("dojo.string");
+dojo.require("dojo.html");
+dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.layout.ContentPane",dijit._Widget,{href:"",extractContent:false,parseOnLoad:true,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,baseClass:"dijitContentPane",doLayout:true,ioArgs:{},isContainer:true,isLayoutContainer:true,onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),postMixInProperties:function(){
+this.inherited(arguments);
+var _1=dojo.i18n.getLocalization("dijit","loading",this.lang);
+this.loadingMessage=dojo.string.substitute(this.loadingMessage,_1);
+this.errorMessage=dojo.string.substitute(this.errorMessage,_1);
+if(!this.href&&this.srcNodeRef&&this.srcNodeRef.innerHTML){
+this.isLoaded=true;
+}
+},buildRendering:function(){
+this.inherited(arguments);
+if(!this.containerNode){
+this.containerNode=this.domNode;
+}
+},postCreate:function(){
+this.domNode.title="";
+if(!dojo.attr(this.domNode,"role")){
+dijit.setWaiRole(this.domNode,"group");
+}
+dojo.addClass(this.domNode,this.baseClass);
+},startup:function(){
+if(this._started){
+return;
+}
+var _2=dijit._Contained.prototype.getParent.call(this);
+this._childOfLayoutWidget=_2&&_2.isLayoutContainer;
+this._needLayout=!this._childOfLayoutWidget;
+if(this.isLoaded){
+dojo.forEach(this.getChildren(),function(_3){
+_3.startup();
+});
+}
+if(this._isShown()||this.preload){
+this._onShow();
+}
+this.inherited(arguments);
+},_checkIfSingleChild:function(){
+var _4=dojo.query("> *",this.containerNode).filter(function(_5){
+return _5.tagName!=="SCRIPT";
+}),_6=_4.filter(function(_7){
+return dojo.hasAttr(_7,"dojoType")||dojo.hasAttr(_7,"widgetId");
+}),_8=dojo.filter(_6.map(dijit.byNode),function(_9){
+return _9&&_9.domNode&&_9.resize;
+});
+if(_4.length==_6.length&&_8.length==1){
+this._singleChild=_8[0];
+}else{
+delete this._singleChild;
+}
+dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);
+},setHref:function(_a){
+dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");
+return this.set("href",_a);
+},_setHrefAttr:function(_b){
+this.cancel();
+this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
+this.href=_b;
+if(this._created&&(this.preload||this._isShown())){
+this._load();
+}else{
+this._hrefChanged=true;
+}
+return this.onLoadDeferred;
+},setContent:function(_c){
+dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.","","2.0");
+this.set("content",_c);
+},_setContentAttr:function(_d){
+this.href="";
+this.cancel();
+this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
+this._setContent(_d||"");
+this._isDownloaded=false;
+return this.onLoadDeferred;
+},_getContentAttr:function(){
+return this.containerNode.innerHTML;
+},cancel:function(){
+if(this._xhrDfd&&(this._xhrDfd.fired==-1)){
+this._xhrDfd.cancel();
+}
+delete this._xhrDfd;
+this.onLoadDeferred=null;
+},uninitialize:function(){
+if(this._beingDestroyed){
+this.cancel();
+}
+this.inherited(arguments);
+},destroyRecursive:function(_e){
+if(this._beingDestroyed){
+return;
+}
+this.inherited(arguments);
+},resize:function(_f,_10){
+if(!this._wasShown){
+this._onShow();
+}
+this._resizeCalled=true;
+if(_f){
+dojo.marginBox(this.domNode,_f);
+}
+var cn=this.containerNode;
+if(cn===this.domNode){
+var mb=_10||{};
+dojo.mixin(mb,_f||{});
+if(!("h" in mb)||!("w" in mb)){
+mb=dojo.mixin(dojo.marginBox(cn),mb);
+}
+this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);
+}else{
+this._contentBox=dojo.contentBox(cn);
+}
+this._layoutChildren();
+},_isShown:function(){
+if(this._childOfLayoutWidget){
+if(this._resizeCalled&&"open" in this){
+return this.open;
+}
+return this._resizeCalled;
+}else{
+if("open" in this){
+return this.open;
+}else{
+var _11=this.domNode;
+return (_11.style.display!="none")&&(_11.style.visibility!="hidden")&&!dojo.hasClass(_11,"dijitHidden");
+}
+}
+},_onShow:function(){
+if(this.href){
+if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){
+this.refresh();
+}
+}else{
+if(!this._childOfLayoutWidget&&this._needLayout){
+this._layoutChildren();
+}
+}
+this.inherited(arguments);
+this._wasShown=true;
+},refresh:function(){
+this.cancel();
+this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
+this._load();
+return this.onLoadDeferred;
+},_load:function(){
+this._setContent(this.onDownloadStart(),true);
+var _12=this;
+var _13={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};
+if(dojo.isObject(this.ioArgs)){
+dojo.mixin(_13,this.ioArgs);
+}
+var _14=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_13));
+_14.addCallback(function(_15){
+try{
+_12._isDownloaded=true;
+_12._setContent(_15,false);
+_12.onDownloadEnd();
+}
+catch(err){
+_12._onError("Content",err);
+}
+delete _12._xhrDfd;
+return _15;
+});
+_14.addErrback(function(err){
+if(!_14.canceled){
+_12._onError("Download",err);
+}
+delete _12._xhrDfd;
+return err;
+});
+delete this._hrefChanged;
+},_onLoadHandler:function(_16){
+this.isLoaded=true;
+try{
+this.onLoadDeferred.callback(_16);
+this.onLoad(_16);
+}
+catch(e){
+console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);
+}
+},_onUnloadHandler:function(){
+this.isLoaded=false;
+try{
+this.onUnload();
+}
+catch(e){
+console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);
+}
+},destroyDescendants:function(){
+if(this.isLoaded){
+this._onUnloadHandler();
+}
+var _17=this._contentSetter;
+dojo.forEach(this.getChildren(),function(_18){
+if(_18.destroyRecursive){
+_18.destroyRecursive();
+}
+});
+if(_17){
+dojo.forEach(_17.parseResults,function(_19){
+if(_19.destroyRecursive&&_19.domNode&&_19.domNode.parentNode==dojo.body()){
+_19.destroyRecursive();
+}
+});
+delete _17.parseResults;
+}
+dojo.html._emptyNode(this.containerNode);
+delete this._singleChild;
+},_setContent:function(_1a,_1b){
+this.destroyDescendants();
+var _1c=this._contentSetter;
+if(!(_1c&&_1c instanceof dojo.html._ContentSetter)){
+_1c=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){
+var _1d=this.onContentError(e);
+try{
+this.containerNode.innerHTML=_1d;
+}
+catch(e){
+console.error("Fatal "+this.id+" could not change content due to "+e.message,e);
+}
+})});
+}
+var _1e=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,dir:this.dir,lang:this.lang},this._contentSetterParams||{});
+dojo.mixin(_1c,_1e);
+_1c.set((dojo.isObject(_1a)&&_1a.domNode)?_1a.domNode:_1a);
+delete this._contentSetterParams;
+if(!_1b){
+dojo.forEach(this.getChildren(),function(_1f){
+if(!this.parseOnLoad||_1f.getParent){
+_1f.startup();
+}
+},this);
+this._scheduleLayout();
+this._onLoadHandler(_1a);
+}
+},_onError:function(_20,err,_21){
+this.onLoadDeferred.errback(err);
+var _22=this["on"+_20+"Error"].call(this,err);
+if(_21){
+console.error(_21,err);
+}else{
+if(_22){
+this._setContent(_22,true);
+}
+}
+},_scheduleLayout:function(){
+if(this._isShown()){
+this._layoutChildren();
+}else{
+this._needLayout=true;
+}
+},_layoutChildren:function(){
+if(this.doLayout){
+this._checkIfSingleChild();
+}
+if(this._singleChild&&this._singleChild.resize){
+var cb=this._contentBox||dojo.contentBox(this.containerNode);
+this._singleChild.resize({w:cb.w,h:cb.h});
+}else{
+dojo.forEach(this.getChildren(),function(_23){
+if(_23.resize){
+_23.resize();
+}
+});
+}
+delete this._needLayout;
+},onLoad:function(_24){
+},onUnload:function(){
+},onDownloadStart:function(){
+return this.loadingMessage;
+},onContentError:function(_25){
+},onDownloadError:function(_26){
+return this.errorMessage;
+},onDownloadEnd:function(){
+}});
+}
Index: trunk/web/dojo/dijit/layout/SplitContainer.js
===================================================================
--- trunk/web/dojo/dijit/layout/SplitContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/SplitContainer.js	(revision 9)
@@ -0,0 +1,348 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.SplitContainer"]){
+dojo._hasResource["dijit.layout.SplitContainer"]=true;
+dojo.provide("dijit.layout.SplitContainer");
+dojo.require("dojo.cookie");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{constructor:function(){
+dojo.deprecated("dijit.layout.SplitContainer is deprecated","use BorderContainer with splitter instead",2);
+},activeSizing:false,sizerWidth:7,orientation:"horizontal",persist:true,baseClass:"dijitSplitContainer",postMixInProperties:function(){
+this.inherited("postMixInProperties",arguments);
+this.isHorizontal=(this.orientation=="horizontal");
+},postCreate:function(){
+this.inherited(arguments);
+this.sizers=[];
+if(dojo.isMozilla){
+this.domNode.style.overflow="-moz-scrollbars-none";
+}
+if(typeof this.sizerWidth=="object"){
+try{
+this.sizerWidth=parseInt(this.sizerWidth.toString());
+}
+catch(e){
+this.sizerWidth=7;
+}
+}
+var _1=dojo.doc.createElement("div");
+this.virtualSizer=_1;
+_1.style.position="relative";
+_1.style.zIndex=10;
+_1.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";
+this.domNode.appendChild(_1);
+dojo.setSelectable(_1,false);
+},destroy:function(){
+delete this.virtualSizer;
+dojo.forEach(this._ownconnects,dojo.disconnect);
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+dojo.forEach(this.getChildren(),function(_2,i,_3){
+this._setupChild(_2);
+if(i<_3.length-1){
+this._addSizer();
+}
+},this);
+if(this.persist){
+this._restoreState();
+}
+this.inherited(arguments);
+},_setupChild:function(_4){
+this.inherited(arguments);
+_4.domNode.style.position="absolute";
+dojo.addClass(_4.domNode,"dijitSplitPane");
+},_onSizerMouseDown:function(e){
+if(e.target.id){
+for(var i=0;i<this.sizers.length;i++){
+if(this.sizers[i].id==e.target.id){
+break;
+}
+}
+if(i<this.sizers.length){
+this.beginSizing(e,i);
+}
+}
+},_addSizer:function(_5){
+_5=_5===undefined?this.sizers.length:_5;
+var _6=dojo.doc.createElement("div");
+_6.id=dijit.getUniqueId("dijit_layout_SplitterContainer_Splitter");
+this.sizers.splice(_5,0,_6);
+this.domNode.appendChild(_6);
+_6.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";
+var _7=dojo.doc.createElement("div");
+_7.className="thumb";
+_6.appendChild(_7);
+this.connect(_6,"onmousedown","_onSizerMouseDown");
+dojo.setSelectable(_6,false);
+},removeChild:function(_8){
+if(this.sizers.length){
+var i=dojo.indexOf(this.getChildren(),_8);
+if(i!=-1){
+if(i==this.sizers.length){
+i--;
+}
+dojo.destroy(this.sizers[i]);
+this.sizers.splice(i,1);
+}
+}
+this.inherited(arguments);
+if(this._started){
+this.layout();
+}
+},addChild:function(_9,_a){
+this.inherited(arguments);
+if(this._started){
+var _b=this.getChildren();
+if(_b.length>1){
+this._addSizer(_a);
+}
+this.layout();
+}
+},layout:function(){
+this.paneWidth=this._contentBox.w;
+this.paneHeight=this._contentBox.h;
+var _c=this.getChildren();
+if(!_c.length){
+return;
+}
+var _d=this.isHorizontal?this.paneWidth:this.paneHeight;
+if(_c.length>1){
+_d-=this.sizerWidth*(_c.length-1);
+}
+var _e=0;
+dojo.forEach(_c,function(_f){
+_e+=_f.sizeShare;
+});
+var _10=_d/_e;
+var _11=0;
+dojo.forEach(_c.slice(0,_c.length-1),function(_12){
+var _13=Math.round(_10*_12.sizeShare);
+_12.sizeActual=_13;
+_11+=_13;
+});
+_c[_c.length-1].sizeActual=_d-_11;
+this._checkSizes();
+var pos=0;
+var _14=_c[0].sizeActual;
+this._movePanel(_c[0],pos,_14);
+_c[0].position=pos;
+pos+=_14;
+if(!this.sizers){
+return;
+}
+dojo.some(_c.slice(1),function(_15,i){
+if(!this.sizers[i]){
+return true;
+}
+this._moveSlider(this.sizers[i],pos,this.sizerWidth);
+this.sizers[i].position=pos;
+pos+=this.sizerWidth;
+_14=_15.sizeActual;
+this._movePanel(_15,pos,_14);
+_15.position=pos;
+pos+=_14;
+},this);
+},_movePanel:function(_16,pos,_17){
+if(this.isHorizontal){
+_16.domNode.style.left=pos+"px";
+_16.domNode.style.top=0;
+var box={w:_17,h:this.paneHeight};
+if(_16.resize){
+_16.resize(box);
+}else{
+dojo.marginBox(_16.domNode,box);
+}
+}else{
+_16.domNode.style.left=0;
+_16.domNode.style.top=pos+"px";
+var box={w:this.paneWidth,h:_17};
+if(_16.resize){
+_16.resize(box);
+}else{
+dojo.marginBox(_16.domNode,box);
+}
+}
+},_moveSlider:function(_18,pos,_19){
+if(this.isHorizontal){
+_18.style.left=pos+"px";
+_18.style.top=0;
+dojo.marginBox(_18,{w:_19,h:this.paneHeight});
+}else{
+_18.style.left=0;
+_18.style.top=pos+"px";
+dojo.marginBox(_18,{w:this.paneWidth,h:_19});
+}
+},_growPane:function(_1a,_1b){
+if(_1a>0){
+if(_1b.sizeActual>_1b.sizeMin){
+if((_1b.sizeActual-_1b.sizeMin)>_1a){
+_1b.sizeActual=_1b.sizeActual-_1a;
+_1a=0;
+}else{
+_1a-=_1b.sizeActual-_1b.sizeMin;
+_1b.sizeActual=_1b.sizeMin;
+}
+}
+}
+return _1a;
+},_checkSizes:function(){
+var _1c=0;
+var _1d=0;
+var _1e=this.getChildren();
+dojo.forEach(_1e,function(_1f){
+_1d+=_1f.sizeActual;
+_1c+=_1f.sizeMin;
+});
+if(_1c<=_1d){
+var _20=0;
+dojo.forEach(_1e,function(_21){
+if(_21.sizeActual<_21.sizeMin){
+_20+=_21.sizeMin-_21.sizeActual;
+_21.sizeActual=_21.sizeMin;
+}
+});
+if(_20>0){
+var _22=this.isDraggingLeft?_1e.reverse():_1e;
+dojo.forEach(_22,function(_23){
+_20=this._growPane(_20,_23);
+},this);
+}
+}else{
+dojo.forEach(_1e,function(_24){
+_24.sizeActual=Math.round(_1d*(_24.sizeMin/_1c));
+});
+}
+},beginSizing:function(e,i){
+var _25=this.getChildren();
+this.paneBefore=_25[i];
+this.paneAfter=_25[i+1];
+this.isSizing=true;
+this.sizingSplitter=this.sizers[i];
+if(!this.cover){
+this.cover=dojo.create("div",{style:{position:"absolute",zIndex:5,top:0,left:0,width:"100%",height:"100%"}},this.domNode);
+}else{
+this.cover.style.zIndex=5;
+}
+this.sizingSplitter.style.zIndex=6;
+this.originPos=dojo.position(_25[0].domNode,true);
+if(this.isHorizontal){
+var _26=e.layerX||e.offsetX||0;
+var _27=e.pageX;
+this.originPos=this.originPos.x;
+}else{
+var _26=e.layerY||e.offsetY||0;
+var _27=e.pageY;
+this.originPos=this.originPos.y;
+}
+this.startPoint=this.lastPoint=_27;
+this.screenToClientOffset=_27-_26;
+this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;
+if(!this.activeSizing){
+this._showSizingLine();
+}
+this._ownconnects=[];
+this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmousemove",this,"changeSizing"));
+this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmouseup",this,"endSizing"));
+dojo.stopEvent(e);
+},changeSizing:function(e){
+if(!this.isSizing){
+return;
+}
+this.lastPoint=this.isHorizontal?e.pageX:e.pageY;
+this.movePoint();
+if(this.activeSizing){
+this._updateSize();
+}else{
+this._moveSizingLine();
+}
+dojo.stopEvent(e);
+},endSizing:function(e){
+if(!this.isSizing){
+return;
+}
+if(this.cover){
+this.cover.style.zIndex=-1;
+}
+if(!this.activeSizing){
+this._hideSizingLine();
+}
+this._updateSize();
+this.isSizing=false;
+if(this.persist){
+this._saveState(this);
+}
+dojo.forEach(this._ownconnects,dojo.disconnect);
+},movePoint:function(){
+var p=this.lastPoint-this.screenToClientOffset;
+var a=p-this.dragOffset;
+a=this.legaliseSplitPoint(a);
+p=a+this.dragOffset;
+this.lastPoint=p+this.screenToClientOffset;
+},legaliseSplitPoint:function(a){
+a+=this.sizingSplitter.position;
+this.isDraggingLeft=!!(a>0);
+if(!this.activeSizing){
+var min=this.paneBefore.position+this.paneBefore.sizeMin;
+if(a<min){
+a=min;
+}
+var max=this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin));
+if(a>max){
+a=max;
+}
+}
+a-=this.sizingSplitter.position;
+this._checkSizes();
+return a;
+},_updateSize:function(){
+var pos=this.lastPoint-this.dragOffset-this.originPos;
+var _28=this.paneBefore.position;
+var _29=this.paneAfter.position+this.paneAfter.sizeActual;
+this.paneBefore.sizeActual=pos-_28;
+this.paneAfter.position=pos+this.sizerWidth;
+this.paneAfter.sizeActual=_29-this.paneAfter.position;
+dojo.forEach(this.getChildren(),function(_2a){
+_2a.sizeShare=_2a.sizeActual;
+});
+if(this._started){
+this.layout();
+}
+},_showSizingLine:function(){
+this._moveSizingLine();
+dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});
+this.virtualSizer.style.display="block";
+},_hideSizingLine:function(){
+this.virtualSizer.style.display="none";
+},_moveSizingLine:function(){
+var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;
+dojo.style(this.virtualSizer,(this.isHorizontal?"left":"top"),pos+"px");
+},_getCookieName:function(i){
+return this.id+"_"+i;
+},_restoreState:function(){
+dojo.forEach(this.getChildren(),function(_2b,i){
+var _2c=this._getCookieName(i);
+var _2d=dojo.cookie(_2c);
+if(_2d){
+var pos=parseInt(_2d);
+if(typeof pos=="number"){
+_2b.sizeShare=pos;
+}
+}
+},this);
+},_saveState:function(){
+if(!this.persist){
+return;
+}
+dojo.forEach(this.getChildren(),function(_2e,i){
+dojo.cookie(this._getCookieName(i),_2e.sizeShare,{expires:365});
+},this);
+}});
+dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});
+}
Index: trunk/web/dojo/dijit/layout/BorderContainer.js
===================================================================
--- trunk/web/dojo/dijit/layout/BorderContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/BorderContainer.js	(revision 9)
@@ -0,0 +1,327 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.BorderContainer"]){
+dojo._hasResource["dijit.layout.BorderContainer"]=true;
+dojo.provide("dijit.layout.BorderContainer");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dojo.cookie");
+dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",gutters:true,liveSplitters:true,persist:false,baseClass:"dijitBorderContainer",_splitterClass:"dijit.layout._Splitter",postMixInProperties:function(){
+if(!this.gutters){
+this.baseClass+="NoGutter";
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this._splitters={};
+this._splitterThickness={};
+},startup:function(){
+if(this._started){
+return;
+}
+dojo.forEach(this.getChildren(),this._setupChild,this);
+this.inherited(arguments);
+},_setupChild:function(_1){
+var _2=_1.region;
+if(_2){
+this.inherited(arguments);
+dojo.addClass(_1.domNode,this.baseClass+"Pane");
+var _3=this.isLeftToRight();
+if(_2=="leading"){
+_2=_3?"left":"right";
+}
+if(_2=="trailing"){
+_2=_3?"right":"left";
+}
+this["_"+_2]=_1.domNode;
+this["_"+_2+"Widget"]=_1;
+if((_1.splitter||this.gutters)&&!this._splitters[_2]){
+var _4=dojo.getObject(_1.splitter?this._splitterClass:"dijit.layout._Gutter");
+var _5=new _4({id:_1.id+"_splitter",container:this,child:_1,region:_2,live:this.liveSplitters});
+_5.isSplitter=true;
+this._splitters[_2]=_5.domNode;
+dojo.place(this._splitters[_2],_1.domNode,"after");
+_5.startup();
+}
+_1.region=_2;
+}
+},_computeSplitterThickness:function(_6){
+this._splitterThickness[_6]=this._splitterThickness[_6]||dojo.marginBox(this._splitters[_6])[(/top|bottom/.test(_6)?"h":"w")];
+},layout:function(){
+for(var _7 in this._splitters){
+this._computeSplitterThickness(_7);
+}
+this._layoutChildren();
+},addChild:function(_8,_9){
+this.inherited(arguments);
+if(this._started){
+this.layout();
+}
+},removeChild:function(_a){
+var _b=_a.region;
+var _c=this._splitters[_b];
+if(_c){
+dijit.byNode(_c).destroy();
+delete this._splitters[_b];
+delete this._splitterThickness[_b];
+}
+this.inherited(arguments);
+delete this["_"+_b];
+delete this["_"+_b+"Widget"];
+if(this._started){
+this._layoutChildren();
+}
+dojo.removeClass(_a.domNode,this.baseClass+"Pane");
+},getChildren:function(){
+return dojo.filter(this.inherited(arguments),function(_d){
+return !_d.isSplitter;
+});
+},getSplitter:function(_e){
+var _f=this._splitters[_e];
+return _f?dijit.byNode(_f):null;
+},resize:function(_10,_11){
+if(!this.cs||!this.pe){
+var _12=this.domNode;
+this.cs=dojo.getComputedStyle(_12);
+this.pe=dojo._getPadExtents(_12,this.cs);
+this.pe.r=dojo._toPixelValue(_12,this.cs.paddingRight);
+this.pe.b=dojo._toPixelValue(_12,this.cs.paddingBottom);
+dojo.style(_12,"padding","0px");
+}
+this.inherited(arguments);
+},_layoutChildren:function(_13,_14){
+if(!this._borderBox||!this._borderBox.h){
+return;
+}
+var _15=(this.design=="sidebar");
+var _16=0,_17=0,_18=0,_19=0;
+var _1a={},_1b={},_1c={},_1d={},_1e=(this._center&&this._center.style)||{};
+var _1f=/left|right/.test(_13);
+var _20=!_13||(!_1f&&!_15);
+var _21=!_13||(_1f&&_15);
+if(this._top){
+_1a=(_13=="top"||_21)&&this._top.style;
+_16=_13=="top"?_14:dojo.marginBox(this._top).h;
+}
+if(this._left){
+_1b=(_13=="left"||_20)&&this._left.style;
+_18=_13=="left"?_14:dojo.marginBox(this._left).w;
+}
+if(this._right){
+_1c=(_13=="right"||_20)&&this._right.style;
+_19=_13=="right"?_14:dojo.marginBox(this._right).w;
+}
+if(this._bottom){
+_1d=(_13=="bottom"||_21)&&this._bottom.style;
+_17=_13=="bottom"?_14:dojo.marginBox(this._bottom).h;
+}
+var _22=this._splitters;
+var _23=_22.top,_24=_22.bottom,_25=_22.left,_26=_22.right;
+var _27=this._splitterThickness;
+var _28=_27.top||0,_29=_27.left||0,_2a=_27.right||0,_2b=_27.bottom||0;
+if(_29>50||_2a>50){
+setTimeout(dojo.hitch(this,function(){
+this._splitterThickness={};
+for(var _2c in this._splitters){
+this._computeSplitterThickness(_2c);
+}
+this._layoutChildren();
+}),50);
+return false;
+}
+var pe=this.pe;
+var _2d={left:(_15?_18+_29:0)+pe.l+"px",right:(_15?_19+_2a:0)+pe.r+"px"};
+if(_23){
+dojo.mixin(_23.style,_2d);
+_23.style.top=_16+pe.t+"px";
+}
+if(_24){
+dojo.mixin(_24.style,_2d);
+_24.style.bottom=_17+pe.b+"px";
+}
+_2d={top:(_15?0:_16+_28)+pe.t+"px",bottom:(_15?0:_17+_2b)+pe.b+"px"};
+if(_25){
+dojo.mixin(_25.style,_2d);
+_25.style.left=_18+pe.l+"px";
+}
+if(_26){
+dojo.mixin(_26.style,_2d);
+_26.style.right=_19+pe.r+"px";
+}
+dojo.mixin(_1e,{top:pe.t+_16+_28+"px",left:pe.l+_18+_29+"px",right:pe.r+_19+_2a+"px",bottom:pe.b+_17+_2b+"px"});
+var _2e={top:_15?pe.t+"px":_1e.top,bottom:_15?pe.b+"px":_1e.bottom};
+dojo.mixin(_1b,_2e);
+dojo.mixin(_1c,_2e);
+_1b.left=pe.l+"px";
+_1c.right=pe.r+"px";
+_1a.top=pe.t+"px";
+_1d.bottom=pe.b+"px";
+if(_15){
+_1a.left=_1d.left=_18+_29+pe.l+"px";
+_1a.right=_1d.right=_19+_2a+pe.r+"px";
+}else{
+_1a.left=_1d.left=pe.l+"px";
+_1a.right=_1d.right=pe.r+"px";
+}
+var _2f=this._borderBox.h-pe.t-pe.b,_30=_2f-(_16+_28+_17+_2b),_31=_15?_2f:_30;
+var _32=this._borderBox.w-pe.l-pe.r,_33=_32-(_18+_29+_19+_2a),_34=_15?_33:_32;
+var dim={top:{w:_34,h:_16},bottom:{w:_34,h:_17},left:{w:_18,h:_31},right:{w:_19,h:_31},center:{h:_30,w:_33}};
+if(_13){
+var _35=this["_"+_13+"Widget"],mb={};
+mb[/top|bottom/.test(_13)?"h":"w"]=_14;
+_35.resize?_35.resize(mb,dim[_35.region]):dojo.marginBox(_35.domNode,mb);
+}
+var _36=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_37){
+return _37.domNode.tagName=="TEXTAREA"||_37.domNode.tagName=="INPUT";
+});
+if(_36){
+var _38=function(_39,_3a,_3b){
+if(_39){
+(_39.resize?_39.resize(_3a,_3b):dojo.marginBox(_39.domNode,_3a));
+}
+};
+if(_25){
+_25.style.height=_31;
+}
+if(_26){
+_26.style.height=_31;
+}
+_38(this._leftWidget,{h:_31},dim.left);
+_38(this._rightWidget,{h:_31},dim.right);
+if(_23){
+_23.style.width=_34;
+}
+if(_24){
+_24.style.width=_34;
+}
+_38(this._topWidget,{w:_34},dim.top);
+_38(this._bottomWidget,{w:_34},dim.bottom);
+_38(this._centerWidget,dim.center);
+}else{
+var _3c=!_13||(/top|bottom/.test(_13)&&this.design!="sidebar"),_3d=!_13||(/left|right/.test(_13)&&this.design=="sidebar"),_3e={center:true,left:_3c,right:_3c,top:_3d,bottom:_3d};
+dojo.forEach(this.getChildren(),function(_3f){
+if(_3f.resize&&_3e[_3f.region]){
+_3f.resize(null,dim[_3f.region]);
+}
+},this);
+}
+},destroy:function(){
+for(var _40 in this._splitters){
+var _41=this._splitters[_40];
+dijit.byNode(_41).destroy();
+dojo.destroy(_41);
+}
+delete this._splitters;
+delete this._splitterThickness;
+this.inherited(arguments);
+}});
+dojo.extend(dijit._Widget,{region:"",splitter:false,minSize:0,maxSize:Infinity});
+dojo.require("dijit._Templated");
+dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse\" tabIndex=\"0\" waiRole=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>",postCreate:function(){
+this.inherited(arguments);
+this.horizontal=/top|bottom/.test(this.region);
+dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V"));
+this._factor=/top|left/.test(this.region)?1:-1;
+this._cookieName=this.container.id+"_"+this.region;
+if(this.container.persist){
+var _42=dojo.cookie(this._cookieName);
+if(_42){
+this.child.domNode.style[this.horizontal?"height":"width"]=_42;
+}
+}
+},_computeMaxSize:function(){
+var dim=this.horizontal?"h":"w",_43=this.container._splitterThickness[this.region];
+var _44={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_45=this.container["_"+_44[this.region]];
+var _46=dojo.contentBox(this.container.domNode)[dim]-(_45?dojo.marginBox(_45)[dim]:0)-20-_43*2;
+return Math.min(this.child.maxSize,_46);
+},_startDrag:function(e){
+if(!this.cover){
+this.cover=dojo.doc.createElement("div");
+dojo.addClass(this.cover,"dijitSplitterCover");
+dojo.place(this.cover,this.child.domNode,"after");
+}
+dojo.addClass(this.cover,"dijitSplitterCoverActive");
+if(this.fake){
+dojo.destroy(this.fake);
+}
+if(!(this._resize=this.live)){
+(this.fake=this.domNode.cloneNode(true)).removeAttribute("id");
+dojo.addClass(this.domNode,"dijitSplitterShadow");
+dojo.place(this.fake,this.domNode,"after");
+}
+dojo.addClass(this.domNode,"dijitSplitterActive");
+dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");
+if(this.fake){
+dojo.removeClass(this.fake,"dijitSplitterHover");
+dojo.removeClass(this.fake,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover");
+}
+var _47=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_48=this.horizontal,_49=_48?"pageY":"pageX",_4a=e[_49],_4b=this.domNode.style,dim=_48?"h":"w",_4c=dojo.marginBox(this.child.domNode)[dim],_4d=this.region,_4e=parseInt(this.domNode.style[_4d],10),_4f=this._resize,_50=this.child.domNode,_51=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc;
+this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_52){
+var _53=e[_49]-_4a,_54=_47*_53+_4c,_55=Math.max(Math.min(_54,max),min);
+if(_4f||_52){
+_51(_4d,_55);
+}
+_4b[_4d]=_47*_53+_4e+(_55-_54)+"px";
+}),dojo.connect(de,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent),dojo.connect(de,"onmouseup",this,"_stopDrag")]);
+dojo.stopEvent(e);
+},_onMouse:function(e){
+var o=(e.type=="mouseover"||e.type=="mouseenter");
+dojo.toggleClass(this.domNode,"dijitSplitterHover",o);
+dojo.toggleClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover",o);
+},_stopDrag:function(e){
+try{
+if(this.cover){
+dojo.removeClass(this.cover,"dijitSplitterCoverActive");
+}
+if(this.fake){
+dojo.destroy(this.fake);
+}
+dojo.removeClass(this.domNode,"dijitSplitterActive");
+dojo.removeClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");
+dojo.removeClass(this.domNode,"dijitSplitterShadow");
+this._drag(e);
+this._drag(e,true);
+}
+finally{
+this._cleanupHandlers();
+delete this._drag;
+}
+if(this.container.persist){
+dojo.cookie(this._cookieName,this.child.domNode.style[this.horizontal?"height":"width"],{expires:365});
+}
+},_cleanupHandlers:function(){
+dojo.forEach(this._handlers,dojo.disconnect);
+delete this._handlers;
+},_onKeyPress:function(e){
+this._resize=true;
+var _56=this.horizontal;
+var _57=1;
+var dk=dojo.keys;
+switch(e.charOrCode){
+case _56?dk.UP_ARROW:dk.LEFT_ARROW:
+_57*=-1;
+case _56?dk.DOWN_ARROW:dk.RIGHT_ARROW:
+break;
+default:
+return;
+}
+var _58=dojo.marginBox(this.child.domNode)[_56?"h":"w"]+this._factor*_57;
+this.container._layoutChildren(this.region,Math.max(Math.min(_58,this._computeMaxSize()),this.child.minSize));
+dojo.stopEvent(e);
+},destroy:function(){
+this._cleanupHandlers();
+delete this.child;
+delete this.container;
+delete this.cover;
+delete this.fake;
+this.inherited(arguments);
+}});
+dojo.declare("dijit.layout._Gutter",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitGutter\" waiRole=\"presentation\"></div>",postCreate:function(){
+this.horizontal=/top|bottom/.test(this.region);
+dojo.addClass(this.domNode,"dijitGutter"+(this.horizontal?"H":"V"));
+}});
+}
Index: trunk/web/dojo/dijit/layout/LayoutContainer.js
===================================================================
--- trunk/web/dojo/dijit/layout/LayoutContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/LayoutContainer.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.LayoutContainer"]){
+dojo._hasResource["dijit.layout.LayoutContainer"]=true;
+dojo.provide("dijit.layout.LayoutContainer");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.declare("dijit.layout.LayoutContainer",dijit.layout._LayoutWidget,{baseClass:"dijitLayoutContainer",constructor:function(){
+dojo.deprecated("dijit.layout.LayoutContainer is deprecated","use BorderContainer instead",2);
+},layout:function(){
+dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());
+},addChild:function(_1,_2){
+this.inherited(arguments);
+if(this._started){
+dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());
+}
+},removeChild:function(_3){
+this.inherited(arguments);
+if(this._started){
+dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());
+}
+}});
+dojo.extend(dijit._Widget,{layoutAlign:"none"});
+}
Index: trunk/web/dojo/dijit/layout/_LayoutWidget.js
===================================================================
--- trunk/web/dojo/dijit/layout/_LayoutWidget.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/_LayoutWidget.js	(revision 9)
@@ -0,0 +1,126 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout._LayoutWidget"]){
+dojo._hasResource["dijit.layout._LayoutWidget"]=true;
+dojo.provide("dijit.layout._LayoutWidget");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Container");
+dojo.require("dijit._Contained");
+dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{baseClass:"dijitLayoutContainer",isLayoutContainer:true,postCreate:function(){
+dojo.addClass(this.domNode,"dijitContainer");
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+var _1=this.getParent&&this.getParent();
+if(!(_1&&_1.isLayoutContainer)){
+this.resize();
+this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){
+this.resize();
+});
+}
+},resize:function(_2,_3){
+var _4=this.domNode;
+if(_2){
+dojo.marginBox(_4,_2);
+if(_2.t){
+_4.style.top=_2.t+"px";
+}
+if(_2.l){
+_4.style.left=_2.l+"px";
+}
+}
+var mb=_3||{};
+dojo.mixin(mb,_2||{});
+if(!("h" in mb)||!("w" in mb)){
+mb=dojo.mixin(dojo.marginBox(_4),mb);
+}
+var cs=dojo.getComputedStyle(_4);
+var me=dojo._getMarginExtents(_4,cs);
+var be=dojo._getBorderExtents(_4,cs);
+var bb=(this._borderBox={w:mb.w-(me.w+be.w),h:mb.h-(me.h+be.h)});
+var pe=dojo._getPadExtents(_4,cs);
+this._contentBox={l:dojo._toPixelValue(_4,cs.paddingLeft),t:dojo._toPixelValue(_4,cs.paddingTop),w:bb.w-pe.w,h:bb.h-pe.h};
+this.layout();
+},layout:function(){
+},_setupChild:function(_5){
+dojo.addClass(_5.domNode,this.baseClass+"-child");
+if(_5.baseClass){
+dojo.addClass(_5.domNode,this.baseClass+"-"+_5.baseClass);
+}
+},addChild:function(_6,_7){
+this.inherited(arguments);
+if(this._started){
+this._setupChild(_6);
+}
+},removeChild:function(_8){
+dojo.removeClass(_8.domNode,this.baseClass+"-child");
+if(_8.baseClass){
+dojo.removeClass(_8.domNode,this.baseClass+"-"+_8.baseClass);
+}
+this.inherited(arguments);
+}});
+dijit.layout.marginBox2contentBox=function(_9,mb){
+var cs=dojo.getComputedStyle(_9);
+var me=dojo._getMarginExtents(_9,cs);
+var pb=dojo._getPadBorderExtents(_9,cs);
+return {l:dojo._toPixelValue(_9,cs.paddingLeft),t:dojo._toPixelValue(_9,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};
+};
+(function(){
+var _a=function(_b){
+return _b.substring(0,1).toUpperCase()+_b.substring(1);
+};
+var _c=function(_d,_e){
+_d.resize?_d.resize(_e):dojo.marginBox(_d.domNode,_e);
+dojo.mixin(_d,dojo.marginBox(_d.domNode));
+dojo.mixin(_d,_e);
+};
+dijit.layout.layoutChildren=function(_f,dim,_10){
+dim=dojo.mixin({},dim);
+dojo.addClass(_f,"dijitLayoutContainer");
+_10=dojo.filter(_10,function(_11){
+return _11.layoutAlign!="client";
+}).concat(dojo.filter(_10,function(_12){
+return _12.layoutAlign=="client";
+}));
+dojo.forEach(_10,function(_13){
+var elm=_13.domNode,pos=_13.layoutAlign;
+var _14=elm.style;
+_14.left=dim.l+"px";
+_14.top=dim.t+"px";
+_14.bottom=_14.right="auto";
+dojo.addClass(elm,"dijitAlign"+_a(pos));
+if(pos=="top"||pos=="bottom"){
+_c(_13,{w:dim.w});
+dim.h-=_13.h;
+if(pos=="top"){
+dim.t+=_13.h;
+}else{
+_14.top=dim.t+dim.h+"px";
+}
+}else{
+if(pos=="left"||pos=="right"){
+_c(_13,{h:dim.h});
+dim.w-=_13.w;
+if(pos=="left"){
+dim.l+=_13.w;
+}else{
+_14.left=dim.l+dim.w+"px";
+}
+}else{
+if(pos=="client"){
+_c(_13,dim);
+}
+}
+}
+});
+};
+})();
+}
Index: trunk/web/dojo/dijit/layout/LinkPane.js
===================================================================
--- trunk/web/dojo/dijit/layout/LinkPane.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/LinkPane.js	(revision 9)
@@ -0,0 +1,20 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.LinkPane"]){
+dojo._hasResource["dijit.layout.LinkPane"]=true;
+dojo.provide("dijit.layout.LinkPane");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.layout.LinkPane",[dijit.layout.ContentPane,dijit._Templated],{templateString:"<div class=\"dijitLinkPane\" dojoAttachPoint=\"containerNode\"></div>",postMixInProperties:function(){
+if(this.srcNodeRef){
+this.title+=this.srcNodeRef.innerHTML;
+}
+this.inherited(arguments);
+},_fillContent:function(_1){
+}});
+}
Index: trunk/web/dojo/dijit/layout/_TabContainerBase.js
===================================================================
--- trunk/web/dojo/dijit/layout/_TabContainerBase.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/_TabContainerBase.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout._TabContainerBase"]){
+dojo._hasResource["dijit.layout._TabContainerBase"]=true;
+dojo.provide("dijit.layout._TabContainerBase");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.layout._TabContainerBase",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",baseClass:"dijitTabContainer",tabStrip:false,nested:false,templateString:dojo.cache("dijit.layout","templates/TabContainer.html","<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" dojoAttachPoint=\"tablistNode\"></div>\n\t<div dojoAttachPoint=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n"),postMixInProperties:function(){
+this.baseClass+=this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"");
+this.srcNodeRef&&dojo.style(this.srcNodeRef,"visibility","hidden");
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.tablist=this._makeController(this.tablistNode);
+if(!this.doLayout){
+dojo.addClass(this.domNode,"dijitTabContainerNoLayout");
+}
+if(this.nested){
+dojo.addClass(this.domNode,"dijitTabContainerNested");
+dojo.addClass(this.tablist.containerNode,"dijitTabContainerTabListNested");
+dojo.addClass(this.tablistSpacer,"dijitTabContainerSpacerNested");
+dojo.addClass(this.containerNode,"dijitTabPaneWrapperNested");
+}else{
+dojo.addClass(this.domNode,"tabStrip-"+(this.tabStrip?"enabled":"disabled"));
+}
+},_setupChild:function(_1){
+dojo.addClass(_1.domNode,"dijitTabPane");
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+this.tablist.startup();
+this.inherited(arguments);
+},layout:function(){
+if(!this._contentBox||typeof (this._contentBox.l)=="undefined"){
+return;
+}
+var sc=this.selectedChildWidget;
+if(this.doLayout){
+var _2=this.tabPosition.replace(/-h/,"");
+this.tablist.layoutAlign=_2;
+var _3=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_2},{domNode:this.containerNode,layoutAlign:"client"}];
+dijit.layout.layoutChildren(this.domNode,this._contentBox,_3);
+this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_3[2]);
+if(sc&&sc.resize){
+sc.resize(this._containerContentBox);
+}
+}else{
+if(this.tablist.resize){
+this.tablist.resize({w:dojo.contentBox(this.domNode).w});
+}
+if(sc&&sc.resize){
+sc.resize();
+}
+}
+},destroy:function(){
+if(this.tablist){
+this.tablist.destroy();
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/layout/AccordionContainer.js
===================================================================
--- trunk/web/dojo/dijit/layout/AccordionContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/AccordionContainer.js	(revision 9)
@@ -0,0 +1,220 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.AccordionContainer"]){
+dojo._hasResource["dijit.layout.AccordionContainer"]=true;
+dojo.provide("dijit.layout.AccordionContainer");
+dojo.require("dojo.fx");
+dojo.require("dijit._Container");
+dojo.require("dijit._Templated");
+dojo.require("dijit._CssStateMixin");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit.layout.AccordionPane");
+dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",_verticalSpace:0,baseClass:"dijitAccordionContainer",postCreate:function(){
+this.domNode.style.overflow="hidden";
+this.inherited(arguments);
+dijit.setWaiRole(this.domNode,"tablist");
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(this.selectedChildWidget){
+var _1=this.selectedChildWidget.containerNode.style;
+_1.display="";
+_1.overflow="auto";
+this.selectedChildWidget._wrapperWidget.set("selected",true);
+}
+},_getTargetHeight:function(_2){
+var cs=dojo.getComputedStyle(_2);
+return Math.max(this._verticalSpace-dojo._getPadBorderExtents(_2,cs).h-dojo._getMarginExtents(_2,cs).h,0);
+},layout:function(){
+var _3=this.selectedChildWidget;
+if(!_3){
+return;
+}
+var _4=_3._wrapperWidget.domNode,_5=dojo._getMarginExtents(_4),_6=dojo._getPadBorderExtents(_4),_7=this._contentBox;
+var _8=0;
+dojo.forEach(this.getChildren(),function(_9){
+if(_9!=_3){
+_8+=dojo.marginBox(_9._wrapperWidget.domNode).h;
+}
+});
+this._verticalSpace=_7.h-_8-_5.h-_6.h-_3._buttonWidget.getTitleHeight();
+this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_5.w-_6.w};
+if(_3){
+_3.resize(this._containerContentBox);
+}
+},_setupChild:function(_a){
+_a._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_a,buttonWidget:this.buttonWidget,id:_a.id+"_wrapper",dir:_a.dir,lang:_a.lang,parent:this});
+this.inherited(arguments);
+},addChild:function(_b,_c){
+if(this._started){
+dojo.place(_b.domNode,this.containerNode,_c);
+if(!_b._started){
+_b.startup();
+}
+this._setupChild(_b);
+dojo.publish(this.id+"-addChild",[_b,_c]);
+this.layout();
+if(!this.selectedChildWidget){
+this.selectChild(_b);
+}
+}else{
+this.inherited(arguments);
+}
+},removeChild:function(_d){
+_d._wrapperWidget.destroy();
+delete _d._wrapperWidget;
+dojo.removeClass(_d.domNode,"dijitHidden");
+this.inherited(arguments);
+},getChildren:function(){
+return dojo.map(this.inherited(arguments),function(_e){
+return _e.declaredClass=="dijit.layout._AccordionInnerContainer"?_e.contentWidget:_e;
+},this);
+},destroy:function(){
+dojo.forEach(this.getChildren(),function(_f){
+_f._wrapperWidget.destroy();
+});
+this.inherited(arguments);
+},_transition:function(_10,_11,_12){
+if(this._inTransition){
+return;
+}
+var _13=[];
+var _14=this._verticalSpace;
+if(_10){
+_10._wrapperWidget.set("selected",true);
+this._showChild(_10);
+if(this.doLayout&&_10.resize){
+_10.resize(this._containerContentBox);
+}
+var _15=_10.domNode;
+dojo.addClass(_15,"dijitVisible");
+dojo.removeClass(_15,"dijitHidden");
+if(_12){
+var _16=_15.style.overflow;
+_15.style.overflow="hidden";
+_13.push(dojo.animateProperty({node:_15,duration:this.duration,properties:{height:{start:1,end:this._getTargetHeight(_15)}},onEnd:function(){
+_15.style.overflow=_16;
+if(dojo.isIE){
+setTimeout(function(){
+dojo.removeClass(_15.parentNode,"dijitAccordionInnerContainerFocused");
+setTimeout(function(){
+dojo.addClass(_15.parentNode,"dijitAccordionInnerContainerFocused");
+},0);
+},0);
+}
+}}));
+}
+}
+if(_11){
+_11._wrapperWidget.set("selected",false);
+var _17=_11.domNode;
+if(_12){
+var _18=_17.style.overflow;
+_17.style.overflow="hidden";
+_13.push(dojo.animateProperty({node:_17,duration:this.duration,properties:{height:{start:this._getTargetHeight(_17),end:1}},onEnd:function(){
+dojo.addClass(_17,"dijitHidden");
+dojo.removeClass(_17,"dijitVisible");
+_17.style.overflow=_18;
+if(_11.onHide){
+_11.onHide();
+}
+}}));
+}else{
+dojo.addClass(_17,"dijitHidden");
+dojo.removeClass(_17,"dijitVisible");
+if(_11.onHide){
+_11.onHide();
+}
+}
+}
+if(_12){
+this._inTransition=true;
+var _19=dojo.fx.combine(_13);
+_19.onEnd=dojo.hitch(this,function(){
+delete this._inTransition;
+});
+_19.play();
+}
+},_onKeyPress:function(e,_1a){
+if(this._inTransition||this.disabled||e.altKey||!(_1a||e.ctrlKey)){
+if(this._inTransition){
+dojo.stopEvent(e);
+}
+return;
+}
+var k=dojo.keys,c=e.charOrCode;
+if((_1a&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){
+this._adjacent(false)._buttonWidget._onTitleClick();
+dojo.stopEvent(e);
+}else{
+if((_1a&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){
+this._adjacent(true)._buttonWidget._onTitleClick();
+dojo.stopEvent(e);
+}
+}
+}});
+dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){
+this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");
+var _1b=this.contentWidget,cls=dojo.getObject(this.buttonWidget);
+this.button=_1b._buttonWidget=(new cls({contentWidget:_1b,label:_1b.title,title:_1b.tooltip,dir:_1b.dir,lang:_1b.lang,iconClass:_1b.iconClass,id:_1b.id+"_button",parent:this.parent})).placeAt(this.domNode);
+dojo.place(this.contentWidget.domNode,this.domNode);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.contentWidget,"set",function(_1c,_1d){
+var _1e={title:"label",tooltip:"title",iconClass:"iconClass"}[_1c];
+if(_1e){
+this.button.set(_1e,_1d);
+}
+},this);
+},_setSelectedAttr:function(_1f){
+this.selected=_1f;
+this.button.set("selected",_1f);
+if(_1f){
+var cw=this.contentWidget;
+if(cw.onSelected){
+cw.onSelected();
+}
+}
+},startup:function(){
+this.contentWidget.startup();
+},destroy:function(){
+this.button.destroyRecursive();
+delete this.contentWidget._buttonWidget;
+delete this.contentWidget._wrapperWidget;
+this.inherited(arguments);
+},destroyDescendants:function(){
+this.contentWidget.destroyRecursive();
+}});
+dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){
+return this.parent;
+},postCreate:function(){
+this.inherited(arguments);
+dojo.setSelectable(this.domNode,false);
+var _20=dojo.attr(this.domNode,"id").replace(" ","_");
+dojo.attr(this.titleTextNode,"id",_20+"_title");
+dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));
+},getTitleHeight:function(){
+return dojo.marginBox(this.domNode).h;
+},_onTitleClick:function(){
+var _21=this.getParent();
+if(!_21._inTransition){
+_21.selectChild(this.contentWidget,true);
+dijit.focus(this.focusNode);
+}
+},_onTitleKeyPress:function(evt){
+return this.getParent()._onKeyPress(evt,this.contentWidget);
+},_setSelectedAttr:function(_22){
+this.selected=_22;
+dijit.setWaiState(this.focusNode,"expanded",_22);
+dijit.setWaiState(this.focusNode,"selected",_22);
+this.focusNode.setAttribute("tabIndex",_22?"0":"-1");
+}});
+}
Index: trunk/web/dojo/dijit/layout/AccordionPane.js
===================================================================
--- trunk/web/dojo/dijit/layout/AccordionPane.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/AccordionPane.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.AccordionPane"]){
+dojo._hasResource["dijit.layout.AccordionPane"]=true;
+dojo.provide("dijit.layout.AccordionPane");
+dojo.require("dijit.layout.ContentPane");
+dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){
+dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");
+},onSelected:function(){
+}});
+}
Index: trunk/web/dojo/dijit/layout/ScrollingTabController.js
===================================================================
--- trunk/web/dojo/dijit/layout/ScrollingTabController.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/ScrollingTabController.js	(revision 9)
@@ -0,0 +1,199 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){
+dojo._hasResource["dijit.layout.ScrollingTabController"]=true;
+dojo.provide("dijit.layout.ScrollingTabController");
+dojo.require("dijit.layout.TabController");
+dojo.require("dijit.Menu");
+dojo.declare("dijit.layout.ScrollingTabController",dijit.layout.TabController,{templateString:dojo.cache("dijit.layout","templates/ScrollingTabController.html","<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"),useMenu:true,useSlider:true,tabStripClass:"",widgetsInTemplate:true,_minScroll:5,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{"class":"containerNode"}),postCreate:function(){
+this.inherited(arguments);
+var n=this.domNode;
+this.scrollNode=this.tablistWrapper;
+this._initButtons();
+if(!this.tabStripClass){
+this.tabStripClass="dijitTabContainer"+this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"")+"None";
+dojo.addClass(n,"tabStrip-disabled");
+}
+dojo.addClass(this.tablistWrapper,this.tabStripClass);
+},onStartup:function(){
+this.inherited(arguments);
+dojo.style(this.domNode,"visibility","visible");
+this._postStartup=true;
+},onAddChild:function(_1,_2){
+this.inherited(arguments);
+var _3;
+if(this.useMenu){
+var _4=this.containerId;
+_3=new dijit.MenuItem({id:_1.id+"_stcMi",label:_1.title,dir:_1.dir,lang:_1.lang,onClick:dojo.hitch(this,function(){
+var _5=dijit.byId(_4);
+_5.selectChild(_1);
+})});
+this._menuChildren[_1.id]=_3;
+this._menu.addChild(_3,_2);
+}
+this.pane2handles[_1.id].push(this.connect(this.pane2button[_1.id],"set",function(_6,_7){
+if(this._postStartup){
+if(_6=="label"){
+if(_3){
+_3.set(_6,_7);
+}
+if(this._dim){
+this.resize(this._dim);
+}
+}
+}
+}));
+dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");
+},onRemoveChild:function(_8,_9){
+var _a=this.pane2button[_8.id];
+if(this._selectedTab===_a.domNode){
+this._selectedTab=null;
+}
+if(this.useMenu&&_8&&_8.id&&this._menuChildren[_8.id]){
+this._menu.removeChild(this._menuChildren[_8.id]);
+this._menuChildren[_8.id].destroy();
+delete this._menuChildren[_8.id];
+}
+this.inherited(arguments);
+},_initButtons:function(){
+this._menuChildren={};
+this._btnWidth=0;
+this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(_b){
+if((this.useMenu&&_b==this._menuBtn.domNode)||(this.useSlider&&(_b==this._rightBtn.domNode||_b==this._leftBtn.domNode))){
+this._btnWidth+=dojo.marginBox(_b).w;
+return true;
+}else{
+dojo.style(_b,"display","none");
+return false;
+}
+},this);
+if(this.useMenu){
+this._menu=new dijit.Menu({id:this.id+"_menu",dir:this.dir,lang:this.lang,targetNodeIds:[this._menuBtn.domNode],leftClickToOpen:true,refocus:false});
+this._supportingWidgets.push(this._menu);
+}
+},_getTabsWidth:function(){
+var _c=this.getChildren();
+if(_c.length){
+var _d=_c[this.isLeftToRight()?0:_c.length-1].domNode,_e=_c[this.isLeftToRight()?_c.length-1:0].domNode;
+return _e.offsetLeft+dojo.style(_e,"width")-_d.offsetLeft;
+}else{
+return 0;
+}
+},_enableBtn:function(_f){
+var _10=this._getTabsWidth();
+_f=_f||dojo.style(this.scrollNode,"width");
+return _10>0&&_f<_10;
+},resize:function(dim){
+if(this.domNode.offsetWidth==0){
+return;
+}
+this._dim=dim;
+this.scrollNode.style.height="auto";
+this._contentBox=dijit.layout.marginBox2contentBox(this.domNode,{h:0,w:dim.w});
+this._contentBox.h=this.scrollNode.offsetHeight;
+dojo.contentBox(this.domNode,this._contentBox);
+var _11=this._enableBtn(this._contentBox.w);
+this._buttons.style("display",_11?"":"none");
+this._leftBtn.layoutAlign="left";
+this._rightBtn.layoutAlign="right";
+this._menuBtn.layoutAlign=this.isLeftToRight()?"right":"left";
+dijit.layout.layoutChildren(this.domNode,this._contentBox,[this._menuBtn,this._leftBtn,this._rightBtn,{domNode:this.scrollNode,layoutAlign:"client"}]);
+if(this._selectedTab){
+if(this._anim&&this._anim.status()=="playing"){
+this._anim.stop();
+}
+var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());
+w.scrollLeft=sl;
+}
+this._setButtonClass(this._getScroll());
+this._postResize=true;
+},_getScroll:function(){
+var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit)?this.scrollNode.scrollLeft:dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width")+(dojo.isIE==8?-1:1)*this.scrollNode.scrollLeft;
+return sl;
+},_convertToScrollLeft:function(val){
+if(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit){
+return val;
+}else{
+var _12=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");
+return (dojo.isIE==8?-1:1)*(val-_12);
+}
+},onSelectChild:function(_13){
+var tab=this.pane2button[_13.id];
+if(!tab||!_13){
+return;
+}
+var _14=tab.domNode;
+if(this._postResize&&_14!=this._selectedTab){
+this._selectedTab=_14;
+var sl=this._getScroll();
+if(sl>_14.offsetLeft||sl+dojo.style(this.scrollNode,"width")<_14.offsetLeft+dojo.style(_14,"width")){
+this.createSmoothScroll().play();
+}
+}
+this.inherited(arguments);
+},_getScrollBounds:function(){
+var _15=this.getChildren(),_16=dojo.style(this.scrollNode,"width"),_17=dojo.style(this.containerNode,"width"),_18=_17-_16,_19=this._getTabsWidth();
+if(_15.length&&_19>_16){
+return {min:this.isLeftToRight()?0:_15[_15.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_15[_15.length-1].domNode.offsetLeft+dojo.style(_15[_15.length-1].domNode,"width"))-_16:_18};
+}else{
+var _1a=this.isLeftToRight()?0:_18;
+return {min:_1a,max:_1a};
+}
+},_getScrollForSelectedTab:function(){
+var w=this.scrollNode,n=this._selectedTab,_1b=dojo.style(this.scrollNode,"width"),_1c=this._getScrollBounds();
+var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_1b/2;
+pos=Math.min(Math.max(pos,_1c.min),_1c.max);
+return pos;
+},createSmoothScroll:function(x){
+if(arguments.length>0){
+var _1d=this._getScrollBounds();
+x=Math.min(Math.max(x,_1d.min),_1d.max);
+}else{
+x=this._getScrollForSelectedTab();
+}
+if(this._anim&&this._anim.status()=="playing"){
+this._anim.stop();
+}
+var _1e=this,w=this.scrollNode,_1f=new dojo._Animation({beforeBegin:function(){
+if(this.curve){
+delete this.curve;
+}
+var _20=w.scrollLeft,_21=_1e._convertToScrollLeft(x);
+_1f.curve=new dojo._Line(_20,_21);
+},onAnimate:function(val){
+w.scrollLeft=val;
+}});
+this._anim=_1f;
+this._setButtonClass(x);
+return _1f;
+},_getBtnNode:function(e){
+var n=e.target;
+while(n&&!dojo.hasClass(n,"tabStripButton")){
+n=n.parentNode;
+}
+return n;
+},doSlideRight:function(e){
+this.doSlide(1,this._getBtnNode(e));
+},doSlideLeft:function(e){
+this.doSlide(-1,this._getBtnNode(e));
+},doSlide:function(_22,_23){
+if(_23&&dojo.hasClass(_23,"dijitTabDisabled")){
+return;
+}
+var _24=dojo.style(this.scrollNode,"width");
+var d=(_24*0.75)*_22;
+var to=this._getScroll()+d;
+this._setButtonClass(to);
+this.createSmoothScroll(to).play();
+},_setButtonClass:function(_25){
+var _26=this._getScrollBounds();
+this._leftBtn.set("disabled",_25<=_26.min);
+this._rightBtn.set("disabled",_25>=_26.max);
+}});
+dojo.declare("dijit.layout._ScrollingTabControllerButton",dijit.form.Button,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"-1"});
+}
Index: trunk/web/dojo/dijit/layout/StackContainer.js
===================================================================
--- trunk/web/dojo/dijit/layout/StackContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/layout/StackContainer.js	(revision 9)
@@ -0,0 +1,148 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.layout.StackContainer"]){
+dojo._hasResource["dijit.layout.StackContainer"]=true;
+dojo.provide("dijit.layout.StackContainer");
+dojo.require("dijit._Templated");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.require("dojo.cookie");
+dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,persist:false,baseClass:"dijitStackContainer",postCreate:function(){
+this.inherited(arguments);
+dojo.addClass(this.domNode,"dijitLayoutContainer");
+dijit.setWaiRole(this.containerNode,"tabpanel");
+this.connect(this.domNode,"onkeypress",this._onKeyPress);
+},startup:function(){
+if(this._started){
+return;
+}
+var _1=this.getChildren();
+dojo.forEach(_1,this._setupChild,this);
+if(this.persist){
+this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));
+}else{
+dojo.some(_1,function(_2){
+if(_2.selected){
+this.selectedChildWidget=_2;
+}
+return _2.selected;
+},this);
+}
+var _3=this.selectedChildWidget;
+if(!_3&&_1[0]){
+_3=this.selectedChildWidget=_1[0];
+_3.selected=true;
+}
+dojo.publish(this.id+"-startup",[{children:_1,selected:_3}]);
+this.inherited(arguments);
+},resize:function(){
+var _4=this.selectedChildWidget;
+if(_4&&!this._hasBeenShown){
+this._hasBeenShown=true;
+this._showChild(_4);
+}
+this.inherited(arguments);
+},_setupChild:function(_5){
+this.inherited(arguments);
+dojo.removeClass(_5.domNode,"dijitVisible");
+dojo.addClass(_5.domNode,"dijitHidden");
+_5.domNode.title="";
+},addChild:function(_6,_7){
+this.inherited(arguments);
+if(this._started){
+dojo.publish(this.id+"-addChild",[_6,_7]);
+this.layout();
+if(!this.selectedChildWidget){
+this.selectChild(_6);
+}
+}
+},removeChild:function(_8){
+this.inherited(arguments);
+if(this._started){
+dojo.publish(this.id+"-removeChild",[_8]);
+}
+if(this._beingDestroyed){
+return;
+}
+if(this.selectedChildWidget===_8){
+this.selectedChildWidget=undefined;
+if(this._started){
+var _9=this.getChildren();
+if(_9.length){
+this.selectChild(_9[0]);
+}
+}
+}
+if(this._started){
+this.layout();
+}
+},selectChild:function(_a,_b){
+_a=dijit.byId(_a);
+if(this.selectedChildWidget!=_a){
+this._transition(_a,this.selectedChildWidget,_b);
+this.selectedChildWidget=_a;
+dojo.publish(this.id+"-selectChild",[_a]);
+if(this.persist){
+dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);
+}
+}
+},_transition:function(_c,_d){
+if(_d){
+this._hideChild(_d);
+}
+this._showChild(_c);
+if(_c.resize){
+if(this.doLayout){
+_c.resize(this._containerContentBox||this._contentBox);
+}else{
+_c.resize();
+}
+}
+},_adjacent:function(_e){
+var _f=this.getChildren();
+var _10=dojo.indexOf(_f,this.selectedChildWidget);
+_10+=_e?1:_f.length-1;
+return _f[_10%_f.length];
+},forward:function(){
+this.selectChild(this._adjacent(true),true);
+},back:function(){
+this.selectChild(this._adjacent(false),true);
+},_onKeyPress:function(e){
+dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);
+},layout:function(){
+if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){
+this.selectedChildWidget.resize(this._containerContentBox||this._contentBox);
+}
+},_showChild:function(_11){
+var _12=this.getChildren();
+_11.isFirstChild=(_11==_12[0]);
+_11.isLastChild=(_11==_12[_12.length-1]);
+_11.selected=true;
+dojo.removeClass(_11.domNode,"dijitHidden");
+dojo.addClass(_11.domNode,"dijitVisible");
+_11._onShow();
+},_hideChild:function(_13){
+_13.selected=false;
+dojo.removeClass(_13.domNode,"dijitVisible");
+dojo.addClass(_13.domNode,"dijitHidden");
+_13.onHide();
+},closeChild:function(_14){
+var _15=_14.onClose(this,_14);
+if(_15){
+this.removeChild(_14);
+_14.destroyRecursive();
+}
+},destroyDescendants:function(_16){
+dojo.forEach(this.getChildren(),function(_17){
+this.removeChild(_17);
+_17.destroyRecursive(_16);
+},this);
+}});
+dojo.require("dijit.layout.StackController");
+dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});
+}
Index: trunk/web/dojo/dijit/_DialogMixin.js
===================================================================
--- trunk/web/dojo/dijit/_DialogMixin.js	(revision 0)
+++ trunk/web/dojo/dijit/_DialogMixin.js	(revision 9)
@@ -0,0 +1,27 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._DialogMixin"]){
+dojo._hasResource["dijit._DialogMixin"]=true;
+dojo.provide("dijit._DialogMixin");
+dojo.require("dijit._Widget");
+dojo.declare("dijit._DialogMixin",null,{attributeMap:dijit._Widget.prototype.attributeMap,execute:function(_1){
+},onCancel:function(){
+},onExecute:function(){
+},_onSubmit:function(){
+this.onExecute();
+this.execute(this.get("value"));
+},_getFocusItems:function(_2){
+var _3=dijit._getTabNavigable(dojo.byId(_2));
+this._firstFocusItem=_3.lowest||_3.first||_2;
+this._lastFocusItem=_3.last||_3.highest||this._firstFocusItem;
+if(dojo.isMoz&&this._firstFocusItem.tagName.toLowerCase()=="input"&&dojo.getNodeProp(this._firstFocusItem,"type").toLowerCase()=="file"){
+dojo.attr(_2,"tabIndex","0");
+this._firstFocusItem=_2;
+}
+}});
+}
Index: trunk/web/dojo/dijit/DialogUnderlay.js
===================================================================
--- trunk/web/dojo/dijit/DialogUnderlay.js	(revision 0)
+++ trunk/web/dojo/dijit/DialogUnderlay.js	(revision 9)
@@ -0,0 +1,42 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.DialogUnderlay"]){
+dojo._hasResource["dijit.DialogUnderlay"]=true;
+dojo.provide("dijit.DialogUnderlay");
+dojo.require("dojo.window");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.DialogUnderlay",[dijit._Widget,dijit._Templated],{templateString:"<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",dialogId:"","class":"",attributeMap:{id:"domNode"},_setDialogIdAttr:function(id){
+dojo.attr(this.node,"id",id+"_underlay");
+},_setClassAttr:function(_1){
+this.node.className="dijitDialogUnderlay "+_1;
+},postCreate:function(){
+dojo.body().appendChild(this.domNode);
+},layout:function(){
+var is=this.node.style,os=this.domNode.style;
+os.display="none";
+var _2=dojo.window.getBox();
+os.top=_2.t+"px";
+os.left=_2.l+"px";
+is.width=_2.w+"px";
+is.height=_2.h+"px";
+os.display="block";
+},show:function(){
+this.domNode.style.display="block";
+this.layout();
+this.bgIframe=new dijit.BackgroundIframe(this.domNode);
+},hide:function(){
+this.bgIframe.destroy();
+this.domNode.style.display="none";
+},uninitialize:function(){
+if(this.bgIframe){
+this.bgIframe.destroy();
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/dijit.js
===================================================================
--- trunk/web/dojo/dijit/dijit.js	(revision 0)
+++ trunk/web/dojo/dijit/dijit.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.window.getBox=function(){var _1=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _2=dojo._docScroll();return {w:_1.clientWidth,h:_1.clientHeight,l:_2.x,t:_2.y};};dojo.window.get=function(_3){if(dojo.isIE&&window!==document.parentWindow){_3.parentWindow.execScript("document._parentWindow = window;","Javascript");var _4=_3._parentWindow;_3._parentWindow=null;return _4;}return _3.parentWindow||_3.defaultView;};dojo.window.scrollIntoView=function(_5,_6){try{_5=dojo.byId(_5);var _7=_5.ownerDocument||dojo.doc,_8=_7.body||dojo.body(),_9=_7.documentElement||_8.parentNode,_a=dojo.isIE,_b=dojo.isWebKit;if((!(dojo.isMoz||_a||_b||dojo.isOpera)||_5==_8||_5==_9)&&(typeof _5.scrollIntoView!="undefined")){_5.scrollIntoView(false);return;}var _c=_7.compatMode=="BackCompat",_d=_c?_8:_9,_e=_b?_8:_d,_f=_d.clientWidth,_10=_d.clientHeight,rtl=!dojo._isBodyLtr(),_11=_6||dojo.position(_5),el=_5.parentNode,_12=function(el){return ((_a<=6||(_a&&_c))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_12(_5)){return;}while(el){if(el==_8){el=_e;}var _13=dojo.position(el),_14=_12(el);if(el==_e){_13.w=_f;_13.h=_10;if(_e==_9&&_a&&rtl){_13.x+=_e.offsetWidth-_13.w;}if(_13.x<0||!_a){_13.x=0;}if(_13.y<0||!_a){_13.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_13.w-=pb.w;_13.h-=pb.h;_13.x+=pb.l;_13.y+=pb.t;}if(el!=_e){var _15=el.clientWidth,_16=_13.w-_15;if(_15>0&&_16>0){_13.w=_15;if(_a&&rtl){_13.x+=_16;}}_15=el.clientHeight;_16=_13.h-_15;if(_15>0&&_16>0){_13.h=_15;}}if(_14){if(_13.y<0){_13.h+=_13.y;_13.y=0;}if(_13.x<0){_13.w+=_13.x;_13.x=0;}if(_13.y+_13.h>_10){_13.h=_10-_13.y;}if(_13.x+_13.w>_f){_13.w=_f-_13.x;}}var l=_11.x-_13.x,t=_11.y-Math.max(_13.y,0),r=l+_11.w-_13.w,bot=t+_11.h-_13.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);_11.x+=el.scrollLeft;el.scrollLeft+=(_a>=8&&!_c&&rtl)?-s:s;_11.x-=el.scrollLeft;}if(bot*t>0){_11.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_11.y-=el.scrollTop;}el=(el!=_e)&&!_14&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_5.scrollIntoView(false);}};}if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};this.length=0;},add:function(_17){if(this._hash[_17.id]){throw new Error("Tried to register widget with id=="+_17.id+" but that id is already registered");}this._hash[_17.id]=_17;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_18,_19){_19=_19||dojo.global;var i=0,id;for(id in this._hash){_18.call(_19,this._hash[id],i++,this._hash);}return this;},filter:function(_1a,_1b){_1b=_1b||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_1a.call(_1b,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_1c;for(id in this._hash){_1c=this._hash[id];if(_1c.declaredClass==cls){res.add(_1c);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_1d,_1e){return dojo.map(this.toArray(),_1d,_1e);},every:function(_1f,_20){_20=_20||dojo.global;var x=0,i;for(i in this._hash){if(!_1f.call(_20,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_21,_22){_22=_22||dojo.global;var x=0,i;for(i in this._hash){if(_21.call(_22,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _23=dijit.registry._hash,_24=dojo.attr,_25=dojo.hasAttr,_26=dojo.style;dijit.byId=function(id){return typeof id=="string"?_23[id]:id;};var _27={};dijit.getUniqueId=function(_28){var id;do{id=_28+"_"+(_28 in _27?++_27[_28]:_27[_28]=0);}while(_23[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_29){var _2a=[];function _2b(_2c){for(var _2d=_2c.firstChild;_2d;_2d=_2d.nextSibling){if(_2d.nodeType==1){var _2e=_2d.getAttribute("widgetId");if(_2e){_2a.push(_23[_2e]);}else{_2b(_2d);}}}};_2b(_29);return _2a;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_2f){if(!_2f._destroyed){if(_2f.destroyRecursive){_2f.destroyRecursive();}else{if(_2f.destroy){_2f.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_30){return _23[_30.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_31){while(_31){var id=_31.getAttribute&&_31.getAttribute("widgetId");if(id){return _23[id];}_31=_31.parentNode;}return null;};var _32=(dijit._isElementShown=function(_33){var s=_26(_33);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_24(_33,"type")!="hidden");});dijit.hasDefaultTabStop=function(_34){switch(_34.nodeName.toLowerCase()){case "a":return _25(_34,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":if(dojo.isMoz){try{return _34.contentDocument.designMode=="on";}catch(err){return false;}}else{if(dojo.isWebKit){var doc=_34.contentDocument,_35=doc&&doc.body;return _35&&_35.contentEditable=="true";}else{try{doc=_34.contentWindow.document;_35=doc&&doc.body;return _35&&_35.firstChild&&_35.firstChild.contentEditable=="true";}catch(e){return false;}}}default:return _34.contentEditable=="true";}};var _36=(dijit.isTabNavigable=function(_37){if(_24(_37,"disabled")){return false;}else{if(_25(_37,"tabIndex")){return _24(_37,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_37);}}});dijit._getTabNavigable=function(_38){var _39,_3a,_3b,_3c,_3d,_3e;var _3f=function(_40){dojo.query("> *",_40).forEach(function(_41){if((dojo.isIE&&_41.scopeName!=="HTML")||!_32(_41)){return;}if(_36(_41)){var _42=_24(_41,"tabIndex");if(!_25(_41,"tabIndex")||_42==0){if(!_39){_39=_41;}_3a=_41;}else{if(_42>0){if(!_3b||_42<_3c){_3c=_42;_3b=_41;}if(!_3d||_42>=_3e){_3e=_42;_3d=_41;}}}}if(_41.nodeName.toUpperCase()!="SELECT"){_3f(_41);}});};if(_32(_38)){_3f(_38);}return {first:_39,last:_3a,lowest:_3b,highest:_3d};};dijit.getFirstInTabbingOrder=function(_43){var _44=dijit._getTabNavigable(dojo.byId(_43));return _44.lowest?_44.lowest:_44.first;};dijit.getLastInTabbingOrder=function(_45){var _46=dijit._getTabNavigable(dojo.byId(_45));return _46.last?_46.last:_46.highest;};dijit.defaultDuration=dojo.config["defaultDuration"]||200;})();}if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){return dijit.getBookmark().isCollapsed;},getBookmark:function(){var bm,rg,tg,sel=dojo.doc.selection,cf=dijit._curFocus;if(dojo.global.getSelection){sel=dojo.global.getSelection();if(sel){if(sel.isCollapsed){tg=cf?cf.tagName:"";if(tg){tg=tg.toLowerCase();if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){sel={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};return {isCollapsed:(sel.end<=sel.start),mark:sel};}}bm={isCollapsed:true};}else{rg=sel.getRangeAt(0);bm={isCollapsed:false,mark:rg.cloneRange()};}}}else{if(sel){tg=cf?cf.tagName:"";tg=tg.toLowerCase();if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){if(sel.type&&sel.type.toLowerCase()=="none"){return {isCollapsed:true,mark:null};}else{rg=sel.createRange();return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};}}bm={};try{rg=sel.createRange();bm.isCollapsed=!(sel.type=="Text"?rg.htmlText.length:rg.length);}catch(e){bm.isCollapsed=true;return bm;}if(sel.type.toUpperCase()=="CONTROL"){if(rg.length){bm.mark=[];var i=0,len=rg.length;while(i<len){bm.mark.push(rg.item(i++));}}else{bm.isCollapsed=true;bm.mark=null;}}else{bm.mark=rg.getBookmark();}}else{console.warn("No idea how to store the current selection for this browser!");}}return bm;},moveToBookmark:function(_47){var _48=dojo.doc,_49=_47.mark;if(_49){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_49.pRange){var r=_49;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_49);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_48.selection&&_49){var rg;if(_49.pRange){rg=_49.range;}else{if(dojo.isArray(_49)){rg=_48.body.createControlRange();dojo.forEach(_49,function(n){rg.addElement(n);});}else{rg=_48.body.createTextRange();rg.moveToBookmark(_49);}}rg.select();}}}},getFocus:function(_4a,_4b){var _4c=!dijit._curFocus||(_4a&&dojo.isDescendant(dijit._curFocus,_4a.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_4c,bookmark:(_4c==dijit._curFocus)&&dojo.withGlobal(_4b||dojo.global,dijit.getBookmark),openedForWindow:_4b};},focus:function(_4d){if(!_4d){return;}var _4e="node" in _4d?_4d.node:_4d,_4f=_4d.bookmark,_50=_4d.openedForWindow,_51=_4f?_4f.isCollapsed:false;if(_4e){var _52=(_4e.tagName.toLowerCase()=="iframe")?_4e.contentWindow:_4e;if(_52&&_52.focus){try{_52.focus();}catch(e){}}dijit._onFocusNode(_4e);}if(_4f&&dojo.withGlobal(_50||dojo.global,dijit.isCollapsed)&&!_51){if(_50){_50.focus();}try{dojo.withGlobal(_50||dojo.global,dijit.moveToBookmark,null,[_4f]);}catch(e2){}}},_activeStack:[],registerIframe:function(_53){return dijit.registerWin(_53.contentWindow,_53);},unregisterIframe:function(_54){dijit.unregisterWin(_54);},registerWin:function(_55,_56){var _57=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_56||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_55.document.documentElement:_55.document;if(doc){if(dojo.isIE){doc.attachEvent("onmousedown",_57);var _58=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_56||evt.srcElement);}else{dijit._onTouchNode(_56||evt.srcElement);}};doc.attachEvent("onactivate",_58);var _59=function(evt){dijit._onBlurNode(_56||evt.srcElement);};doc.attachEvent("ondeactivate",_59);return function(){doc.detachEvent("onmousedown",_57);doc.detachEvent("onactivate",_58);doc.detachEvent("ondeactivate",_59);doc=null;};}else{doc.addEventListener("mousedown",_57,true);var _5a=function(evt){dijit._onFocusNode(_56||evt.target);};doc.addEventListener("focus",_5a,true);var _5b=function(evt){dijit._onBlurNode(_56||evt.target);};doc.addEventListener("blur",_5b,true);return function(){doc.removeEventListener("mousedown",_57,true);doc.removeEventListener("focus",_5a,true);doc.removeEventListener("blur",_5b,true);doc=null;};}}},unregisterWin:function(_5c){_5c&&_5c();},_onBlurNode:function(_5d){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);dijit._prevFocus=null;},100);},_onTouchNode:function(_5e,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _5f=[];try{while(_5e){var _60=dojo.attr(_5e,"dijitPopupParent");if(_60){_5e=dijit.byId(_60).domNode;}else{if(_5e.tagName&&_5e.tagName.toLowerCase()=="body"){if(_5e===dojo.body()){break;}_5e=dojo.window.get(_5e.ownerDocument).frameElement;}else{var id=_5e.getAttribute&&_5e.getAttribute("widgetId"),_61=id&&dijit.byId(id);if(_61&&!(by=="mouse"&&_61.get("disabled"))){_5f.unshift(id);}_5e=_5e.parentNode;}}}}catch(e){}dijit._setStack(_5f,by);},_onFocusNode:function(_62){if(!_62){return;}if(_62.nodeType==9){return;}dijit._onTouchNode(_62);if(_62==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_62;dojo.publish("focusNode",[_62]);},_setStack:function(_63,by){var _64=dijit._activeStack;dijit._activeStack=_63;for(var _65=0;_65<Math.min(_64.length,_63.length);_65++){if(_64[_65]!=_63[_65]){break;}}var _66;for(var i=_64.length-1;i>=_65;i--){_66=dijit.byId(_64[i]);if(_66){_66._focused=false;_66._hasBeenBlurred=true;if(_66._onBlur){_66._onBlur(by);}dojo.publish("widgetBlur",[_66,by]);}}for(i=_65;i<_63.length;i++){_66=dijit.byId(_63[i]);if(_66){_66._focused=true;if(_66._onFocus){_66._onFocus(by);}dojo.publish("widgetFocus",[_66,by]);}}}});dojo.addOnLoad(function(){var _67=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_67);_67=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_68){this.pairs=[];this.returnWrappers=_68||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_69,_6a,_6b,_6c,_6d){this.pairs[((_6d)?"unshift":"push")]([_69,_6a,_6b,_6c]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _6e=this.pairs[i];if(_6e[1].apply(this,arguments)){if((_6e[3])||(this.returnWrappers)){return _6e[2];}else{return _6e[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_6f){for(var i=0;i<this.pairs.length;i++){var _70=this.pairs[i];if(_70[0]==_6f){this.pairs.splice(i,1);return true;}}return false;}});}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){return dojo.window.getBox();};dijit.placeOnScreen=function(_71,pos,_72,_73){var _74=dojo.map(_72,function(_75){var c={corner:_75,pos:{x:pos.x,y:pos.y}};if(_73){c.pos.x+=_75.charAt(1)=="L"?_73.x:-_73.x;c.pos.y+=_75.charAt(0)=="T"?_73.y:-_73.y;}return c;});return dijit._place(_71,_74);};dijit._place=function(_76,_77,_78){var _79=dojo.window.getBox();if(!_76.parentNode||String(_76.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_76);}var _7a=null;dojo.some(_77,function(_7b){var _7c=_7b.corner;var pos=_7b.pos;if(_78){_78(_76,_7b.aroundCorner,_7c);}var _7d=_76.style;var _7e=_7d.display;var _7f=_7d.visibility;_7d.visibility="hidden";_7d.display="";var mb=dojo.marginBox(_76);_7d.display=_7e;_7d.visibility=_7f;var _80=Math.max(_79.l,_7c.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_81=Math.max(_79.t,_7c.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_82=Math.min(_79.l+_79.w,_7c.charAt(1)=="L"?(_80+mb.w):pos.x),_83=Math.min(_79.t+_79.h,_7c.charAt(0)=="T"?(_81+mb.h):pos.y),_84=_82-_80,_85=_83-_81,_86=(mb.w-_84)+(mb.h-_85);if(_7a==null||_86<_7a.overflow){_7a={corner:_7c,aroundCorner:_7b.aroundCorner,x:_80,y:_81,w:_84,h:_85,overflow:_86};}return !_86;});_76.style.left=_7a.x+"px";_76.style.top=_7a.y+"px";if(_7a.overflow&&_78){_78(_76,_7a.aroundCorner,_7a.corner);}return _7a;};dijit.placeOnScreenAroundNode=function(_87,_88,_89,_8a){_88=dojo.byId(_88);var _8b=_88.style.display;_88.style.display="";var _8c=dojo.position(_88,true);_88.style.display=_8b;return dijit._placeOnScreenAroundRect(_87,_8c.x,_8c.y,_8c.w,_8c.h,_89,_8a);};dijit.placeOnScreenAroundRectangle=function(_8d,_8e,_8f,_90){return dijit._placeOnScreenAroundRect(_8d,_8e.x,_8e.y,_8e.width,_8e.height,_8f,_90);};dijit._placeOnScreenAroundRect=function(_91,x,y,_92,_93,_94,_95){var _96=[];for(var _97 in _94){_96.push({aroundCorner:_97,corner:_94[_97],pos:{x:x+(_97.charAt(1)=="L"?0:_92),y:y+(_97.charAt(0)=="T"?0:_93)}});}return dijit._place(_91,_96,_95);};dijit.placementRegistry=new dojo.AdapterRegistry();dijit.placementRegistry.register("node",function(n,x){return typeof x=="object"&&typeof x.offsetWidth!="undefined"&&typeof x.offsetHeight!="undefined";},dijit.placeOnScreenAroundNode);dijit.placementRegistry.register("rect",function(n,x){return typeof x=="object"&&"x" in x&&"y" in x&&"width" in x&&"height" in x;},dijit.placeOnScreenAroundRectangle);dijit.placeOnScreenAroundElement=function(_98,_99,_9a,_9b){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_9c,_9d){var _9e={};dojo.forEach(_9c,function(pos){switch(pos){case "after":_9e[_9d?"BR":"BL"]=_9d?"BL":"BR";break;case "before":_9e[_9d?"BL":"BR"]=_9d?"BR":"BL";break;case "below":_9e[_9d?"BL":"BR"]=_9d?"TL":"TR";_9e[_9d?"BR":"BL"]=_9d?"TR":"TL";break;case "above":default:_9e[_9d?"TL":"TR"]=_9d?"BL":"BR";_9e[_9d?"TR":"TL"]=_9d?"BR":"BL";break;}});return _9e;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_9f){var _a0=_9f.parentNode;if(!_a0||!dojo.hasClass(_a0,"dijitPopup")){_a0=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());dijit.setWaiRole(_a0,"presentation");_a0.appendChild(_9f);}var s=_9f.style;s.display="";s.visibility="";s.position="";s.top="0px";dojo.style(_a0,{visibility:"hidden",top:"-9999px"});},getTopPopup:function(){var _a1=this._stack;for(var pi=_a1.length-1;pi>0&&_a1[pi].parent===_a1[pi-1].widget;pi--){}return _a1[pi];},open:function(_a2){var _a3=this._stack,_a4=_a2.popup,_a5=_a2.orient||((_a2.parent?_a2.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_a6=_a2.around,id=(_a2.around&&_a2.around.id)?(_a2.around.id+"_dropdown"):("popup_"+this._idGen++);var _a7=_a4.domNode.parentNode;if(!_a7||!dojo.hasClass(_a7,"dijitPopup")){this.moveOffScreen(_a4.domNode);_a7=_a4.domNode.parentNode;}dojo.attr(_a7,{id:id,style:{zIndex:this._beginZIndex+_a3.length},"class":"dijitPopup "+(_a4.baseClass||_a4["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_a2.parent?_a2.parent.id:""});if(dojo.isIE||dojo.isMoz){var _a8=_a7.childNodes[1];if(!_a8){_a8=new dijit.BackgroundIframe(_a7);}}var _a9=_a6?dijit.placeOnScreenAroundElement(_a7,_a6,_a5,_a4.orient?dojo.hitch(_a4,"orient"):null):dijit.placeOnScreen(_a7,_a2,_a5=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_a2.padding);_a7.style.visibility="visible";_a4.domNode.style.visibility="visible";var _aa=[];_aa.push(dojo.connect(_a7,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&_a2.onCancel){dojo.stopEvent(evt);_a2.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _ab=this.getTopPopup();if(_ab&&_ab.onCancel){_ab.onCancel();}}}}));if(_a4.onCancel){_aa.push(dojo.connect(_a4,"onCancel",_a2.onCancel));}_aa.push(dojo.connect(_a4,_a4.onExecute?"onExecute":"onChange",this,function(){var _ac=this.getTopPopup();if(_ac&&_ac.onExecute){_ac.onExecute();}}));_a3.push({wrapper:_a7,iframe:_a8,widget:_a4,parent:_a2.parent,onExecute:_a2.onExecute,onCancel:_a2.onCancel,onClose:_a2.onClose,handlers:_aa});if(_a4.onOpen){_a4.onOpen(_a9);}return _a9;},close:function(_ad){var _ae=this._stack;while(dojo.some(_ae,function(_af){return _af.widget==_ad;})){var top=_ae.pop(),_b0=top.wrapper,_b1=top.iframe,_b2=top.widget,_b3=top.onClose;if(_b2.onClose){_b2.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_b2&&_b2.domNode){this.moveOffScreen(_b2.domNode);}else{dojo.destroy(_b0);}if(_b3){_b3();}}}};dijit._frames=new function(){var _b4=[];this.pop=function(){var _b5;if(_b4.length){_b5=_b4.pop();_b5.style.display="";}else{if(dojo.isIE){var _b6=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";var _b7="<iframe src='"+_b6+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_b5=dojo.doc.createElement(_b7);}else{_b5=dojo.create("iframe");_b5.src="javascript:\"\"";_b5.className="dijitBackgroundIframe";dojo.style(_b5,"opacity",0.1);}_b5.tabIndex=-1;dijit.setWaiRole(_b5,"presentation");}return _b5;};this.push=function(_b8){_b8.style.display="none";_b4.push(_b8);};}();dijit.BackgroundIframe=function(_b9){if(!_b9.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _ba=dijit._frames.pop();_b9.appendChild(_ba);if(dojo.isIE<7){this.resize(_b9);this._conn=dojo.connect(_b9,"onresize",this,function(){this.resize(_b9);});}else{dojo.style(_ba,{width:"100%",height:"100%"});}this.iframe=_ba;}};dojo.extend(dijit.BackgroundIframe,{resize:function(_bb){if(this.iframe&&dojo.isIE<7){dojo.style(this.iframe,{width:_bb.offsetWidth+"px",height:_bb.offsetHeight+"px"});}},destroy:function(){if(this._conn){dojo.disconnect(this._conn);this._conn=null;}if(this.iframe){dijit._frames.push(this.iframe);delete this.iframe;}}});}if(!dojo._hasResource["dijit._base.scroll"]){dojo._hasResource["dijit._base.scroll"]=true;dojo.provide("dijit._base.scroll");dijit.scrollIntoView=function(_bc,pos){dojo.window.scrollIntoView(_bc,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,_bd=d.doc.documentElement,ie=d.isIE,_be=d.isOpera,maj=Math.floor,ff=d.isFF,_bf=d.boxModel.replace(/-/,""),_c0={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_be,dj_khtml:d.isKhtml,dj_webkit:d.isWebKit,dj_safari:d.isSafari,dj_chrome:d.isChrome,dj_gecko:d.isMozilla,dj_ff3:maj(ff)==3};_c0["dj_"+_bf]=true;var _c1="";for(var clz in _c0){if(_c0[clz]){_c1+=clz+" ";}}_bd.className=d.trim(_bd.className+" "+_c1);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _c2="dj_rtl dijitRtl "+_c1.replace(/ /g,"-rtl ");_bd.className=d.trim(_bd.className+" "+_c2);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}if(!dojo._hasResource["dijit._base.typematic"]){dojo._hasResource["dijit._base.typematic"]=true;dojo.provide("dijit._base.typematic");dijit.typematic={_fireEventAndReload:function(){this._timer=null;this._callback(++this._count,this._node,this._evt);this._currentTimeout=Math.max(this._currentTimeout<0?this._initialDelay:(this._subsequentDelay>1?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_c3,_c4,_c5,obj,_c6,_c7,_c8){if(obj!=this._obj){this.stop();this._initialDelay=_c7||500;this._subsequentDelay=_c6||0.9;this._minDelay=_c8||10;this._obj=obj;this._evt=evt;this._node=_c4;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_c3,_c5);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(_c9,_ca,_cb,_cc,_cd,_ce,_cf){if(_ca.keyCode){_ca.charOrCode=_ca.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_ca.charCode){_ca.charOrCode=String.fromCharCode(_ca.charCode);dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}}return [dojo.connect(_c9,"onkeypress",this,function(evt){if(evt.charOrCode==_ca.charOrCode&&(_ca.ctrlKey===undefined||_ca.ctrlKey==evt.ctrlKey)&&(_ca.altKey===undefined||_ca.altKey==evt.altKey)&&(_ca.metaKey===undefined||_ca.metaKey==(evt.metaKey||false))&&(_ca.shiftKey===undefined||_ca.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_cb,_c9,_cc,_ca,_cd,_ce,_cf);}else{if(dijit.typematic._obj==_ca){dijit.typematic.stop();}}}),dojo.connect(_c9,"onkeyup",this,function(evt){if(dijit.typematic._obj==_ca){dijit.typematic.stop();}})];},addMouseListener:function(_d0,_d1,_d2,_d3,_d4,_d5){var dc=dojo.connect;return [dc(_d0,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);}),dc(_d0,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mousemove",this,function(evt){evt.preventDefault();}),dc(_d0,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_d6,_d7,_d8,_d9,_da,_db,_dc,_dd){return this.addKeyListener(_d7,_d8,_d9,_da,_db,_dc,_dd).concat(this.addMouseListener(_d6,_d9,_da,_db,_dc,_dd));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.wai={onload:function(){var div=dojo.create("div",{id:"a11yTestNode",style:{cssText:"border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif"))+"\");"}},dojo.body());var cs=dojo.getComputedStyle(div);if(cs){var _de=cs.backgroundImage;var _df=(cs.borderTopColor==cs.borderRightColor)||(_de!=null&&(_de=="none"||_de=="url(invalid-url:)"));dojo[_df?"addClass":"removeClass"](dojo.body(),"dijit_a11y");if(dojo.isIE){div.outerHTML="";}else{dojo.body().removeChild(div);}}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}dojo.mixin(dijit,{_XhtmlRoles:/banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,hasWaiRole:function(_e0,_e1){var _e2=this.getWaiRole(_e0);return _e1?(_e2.indexOf(_e1)>-1):(_e2.length>0);},getWaiRole:function(_e3){return dojo.trim((dojo.attr(_e3,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));},setWaiRole:function(_e4,_e5){var _e6=dojo.attr(_e4,"role")||"";if(!this._XhtmlRoles.test(_e6)){dojo.attr(_e4,"role",_e5);}else{if((" "+_e6+" ").indexOf(" "+_e5+" ")<0){var _e7=dojo.trim(_e6.replace(this._XhtmlRoles,""));var _e8=dojo.trim(_e6.replace(_e7,""));dojo.attr(_e4,"role",_e8+(_e8?" ":"")+_e5);}}},removeWaiRole:function(_e9,_ea){var _eb=dojo.attr(_e9,"role");if(!_eb){return;}if(_ea){var t=dojo.trim((" "+_eb+" ").replace(" "+_ea+" "," "));dojo.attr(_e9,"role",t);}else{_e9.removeAttribute("role");}},hasWaiState:function(_ec,_ed){return _ec.hasAttribute?_ec.hasAttribute("aria-"+_ed):!!_ec.getAttribute("aria-"+_ed);},getWaiState:function(_ee,_ef){return _ee.getAttribute("aria-"+_ef)||"";},setWaiState:function(_f0,_f1,_f2){_f0.setAttribute("aria-"+_f1,_f2);},removeWaiState:function(_f3,_f4){_f3.removeAttribute("aria-"+_f4);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_f5,_f6){if(!dojo.date.stamp._isoRegExp){dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;}var _f7=dojo.date.stamp._isoRegExp.exec(_f5),_f8=null;if(_f7){_f7.shift();if(_f7[1]){_f7[1]--;}if(_f7[6]){_f7[6]*=1000;}if(_f6){_f6=new Date(_f6);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_f9){return _f6["get"+_f9]();}),function(_fa,_fb){_f7[_fb]=_f7[_fb]||_fa;});}_f8=new Date(_f7[0]||1970,_f7[1]||0,_f7[2]||1,_f7[3]||0,_f7[4]||0,_f7[5]||0,_f7[6]||0);if(_f7[0]<100){_f8.setFullYear(_f7[0]||1970);}var _fc=0,_fd=_f7[7]&&_f7[7].charAt(0);if(_fd!="Z"){_fc=((_f7[8]||0)*60)+(Number(_f7[9])||0);if(_fd!="-"){_fc*=-1;}}if(_fd){_fc-=_f8.getTimezoneOffset();}if(_fc){_f8.setTime(_f8.getTime()+_fc*60000);}}return _f8;};dojo.date.stamp.toISOString=function(_fe,_ff){var _100=function(n){return (n<10)?"0"+n:n;};_ff=_ff||{};var _101=[],_102=_ff.zulu?"getUTC":"get",date="";if(_ff.selector!="time"){var year=_fe[_102+"FullYear"]();date=["0000".substr((year+"").length)+year,_100(_fe[_102+"Month"]()+1),_100(_fe[_102+"Date"]())].join("-");}_101.push(date);if(_ff.selector!="date"){var time=[_100(_fe[_102+"Hours"]()),_100(_fe[_102+"Minutes"]()),_100(_fe[_102+"Seconds"]())].join(":");var _103=_fe[_102+"Milliseconds"]();if(_ff.milliseconds){time+="."+(_103<100?"0":"")+_100(_103);}if(_ff.zulu){time+="Z";}else{if(_ff.selector!="time"){var _104=_fe.getTimezoneOffset();var _105=Math.abs(_104);time+=(_104>0?"-":"+")+_100(Math.floor(_105/60))+":"+_100(_105%60);}}_101.push(time);}return _101.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;this._attrName=d._scopeName+"Type";this._query="["+this._attrName+"]";function _106(_107){if(d.isString(_107)){return "string";}if(typeof _107=="number"){return "number";}if(typeof _107=="boolean"){return "boolean";}if(d.isFunction(_107)){return "function";}if(d.isArray(_107)){return "array";}if(_107 instanceof Date){return "date";}if(_107 instanceof d._Url){return "url";}return "object";};function _108(_109,type){switch(type){case "string":return _109;case "number":return _109.length?Number(_109):NaN;case "boolean":return typeof _109=="boolean"?_109:!(_109.toLowerCase()=="false");case "function":if(d.isFunction(_109)){_109=_109.toString();_109=d.trim(_109.substring(_109.indexOf("{")+1,_109.length-1));}try{if(_109===""||_109.search(/[^\w\.]+/i)!=-1){return new Function(_109);}else{return d.getObject(_109,false)||new Function(_109);}}catch(e){return new Function();}case "array":return _109?_109.split(/\s*,\s*/):[];case "date":switch(_109){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_109);}case "url":return d.baseUrl+_109;default:return d.fromJson(_109);}};var _10a={};dojo.connect(dojo,"extend",function(){_10a={};});function _10b(_10c){if(!_10a[_10c]){var cls=d.getObject(_10c);if(!cls){return null;}var _10d=cls.prototype;var _10e={},_10f={};for(var name in _10d){if(name.charAt(0)=="_"){continue;}if(name in _10f){continue;}var _110=_10d[name];_10e[name]=_106(_110);}_10a[_10c]={cls:cls,params:_10e};}return _10a[_10c];};this._functionFromScript=function(_111){var _112="";var _113="";var _114=_111.getAttribute("args");if(_114){d.forEach(_114.split(/\s*,\s*/),function(part,idx){_112+="var "+part+" = arguments["+idx+"]; ";});}var _115=_111.getAttribute("with");if(_115&&_115.length){d.forEach(_115.split(/\s*,\s*/),function(part){_112+="with("+part+"){";_113+="}";});}return new Function(_112+_111.innerHTML+_113);};this.instantiate=function(_116,_117,args){var _118=[],dp=dojo.parser;_117=_117||{};args=args||{};d.forEach(_116,function(obj){if(!obj){return;}var node,type,_119,_11a,_11b;if(obj.node){node=obj.node;type=obj.type;_119=obj.clsInfo||(type&&_10b(type));_11a=_119&&_119.cls;_11b=obj.scripts;}else{node=obj;type=dp._attrName in _117?_117[dp._attrName]:node.getAttribute(dp._attrName);_119=type&&_10b(type);_11a=_119&&_119.cls;_11b=(_11a&&(_11a._noScript||_11a.prototype._noScript)?[]:d.query("> script[type^='dojo/']",node));}if(!_119){throw new Error("Could not load class '"+type);}var _11c={},_11d=node.attributes;if(args.defaults){dojo.mixin(_11c,args.defaults);}if(obj.inherited){dojo.mixin(_11c,obj.inherited);}for(var name in _119.params){var item=name in _117?{value:_117[name],specified:true}:_11d.getNamedItem(name);if(!item||(!item.specified&&(!dojo.isIE||name.toLowerCase()!="value"))){continue;}var _11e=item.value;switch(name){case "class":_11e="className" in _117?_117.className:node.className;break;case "style":_11e="style" in _117?_117.style:(node.style&&node.style.cssText);}var _11f=_119.params[name];if(typeof _11e=="string"){_11c[name]=_108(_11e,_11f);}else{_11c[name]=_11e;}}var _120=[],_121=[];d.forEach(_11b,function(_122){node.removeChild(_122);var _123=_122.getAttribute("event"),type=_122.getAttribute("type"),nf=d.parser._functionFromScript(_122);if(_123){if(type=="dojo/connect"){_120.push({event:_123,func:nf});}else{_11c[_123]=nf;}}else{_121.push(nf);}});var _124=_11a.markupFactory||_11a.prototype&&_11a.prototype.markupFactory;var _125=_124?_124(_11c,node,_11a):new _11a(_11c,node);_118.push(_125);var _126=node.getAttribute("jsId");if(_126){d.setObject(_126,_125);}d.forEach(_120,function(_127){d.connect(_125,_127.event,null,_127.func);});d.forEach(_121,function(func){func.call(_125);});});if(!_117._started){d.forEach(_118,function(_128){if(!args.noStart&&_128&&_128.startup&&!_128._started&&(!_128.getParent||!_128.getParent())){_128.startup();}});}return _118;};this.parse=function(_129,args){var root;if(!args&&_129&&_129.rootNode){args=_129;root=args.rootNode;}else{root=_129;}var _12a=this._attrName;function scan(_12b,list){var _12c=dojo.clone(_12b.inherited);dojo.forEach(["dir","lang"],function(name){var val=_12b.node.getAttribute(name);if(val){_12c[name]=val;}});var _12d=_12b.scripts;var _12e=!_12b.clsInfo||!_12b.clsInfo.cls.prototype.stopParser;for(var _12f=_12b.node.firstChild;_12f;_12f=_12f.nextSibling){if(_12f.nodeType==1){var type=_12e&&_12f.getAttribute(_12a);if(type){var _130={"type":type,clsInfo:_10b(type),node:_12f,scripts:[],inherited:_12c};list.push(_130);scan(_130,list);}else{if(_12d&&_12f.nodeName.toLowerCase()=="script"){type=_12f.getAttribute("type");if(type&&/^dojo\//i.test(type)){_12d.push(_12f);}}else{if(_12e){scan({node:_12f,inherited:_12c},list);}}}}}};var list=[];scan({node:root?dojo.byId(root):dojo.body(),inherited:(args&&args.inherited)||{dir:dojo._isBodyLtr()?"ltr":"rtl"}},list);return this.instantiate(list,null,args);};}();(function(){var _131=function(){if(dojo.config.parseOnLoad){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_131);}else{dojo._loaders.unshift(_131);}})();}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.require("dijit._base");dojo.connect(dojo,"_connect",function(_132,_133){if(_132&&dojo.isFunction(_132._onConnect)){_132._onConnect(_133);}});dijit._connectOnUseEventHandler=function(_134){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _135=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_135);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_135);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){var _136={},_137=function(_138){var dc=_138.declaredClass;if(!_136[dc]){var r=[],_139,_13a=_138.constructor.prototype;for(var _13b in _13a){if(dojo.isFunction(_13a[_13b])&&(_139=_13b.match(/^_set([a-zA-Z]*)Attr$/))&&_139[1]){r.push(_139[1].charAt(0).toLowerCase()+_139[1].substr(1));}}_136[dc]=r;}return _136[dc]||[];};dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_13c,_13d){this.create(_13c,_13d);},create:function(_13e,_13f){this.srcNodeRef=dojo.byId(_13f);this._connects=[];this._subscribes=[];this._deferredConnects=dojo.clone(this._deferredConnects);for(var attr in this.attributeMap){delete this._deferredConnects[attr];}for(attr in this._deferredConnects){if(this[attr]!==dijit._connectOnUseEventHandler){delete this._deferredConnects[attr];}}if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_13e){this.params=_13e;dojo.mixin(this,_13e);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this._applyAttributes();var _140=this.srcNodeRef;if(_140&&_140.parentNode){_140.parentNode.replaceChild(this.domNode,_140);}for(attr in this.params){this._onConnect(attr);}}if(this.domNode){this.domNode.setAttribute("widgetId",this.id);}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}this._created=true;},_applyAttributes:function(){var _141=function(attr,_142){if((_142.params&&attr in _142.params)||_142[attr]){_142.set(attr,_142[attr]);}};for(var attr in this.attributeMap){_141(attr,this);}dojo.forEach(_137(this),function(a){if(!(a in this.attributeMap)){_141(a,this);}},this);},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.create("div");},postCreate:function(){if(this.baseClass){var _143=this.baseClass.split(" ");if(!this.isLeftToRight()){_143=_143.concat(dojo.map(_143,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_143);}},startup:function(){this._started=true;},destroyRecursive:function(_144){this._beingDestroyed=true;this.destroyDescendants(_144);this.destroy(_144);},destroy:function(_145){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_146){dfe(_146,d.disconnect);});dfe(this._subscribes,function(_147){dun(_147);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_145);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_148){if(this.bgIframe){this.bgIframe.destroy(_148);delete this.bgIframe;}if(this.domNode){if(_148){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_148){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_149){dojo.forEach(this.getChildren(),function(_14a){if(_14a.destroyRecursive){_14a.destroyRecursive(_149);}});},uninitialize:function(){return false;},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},_onConnect:function(_14b){if(_14b in this._deferredConnects){var _14c=this[this._deferredConnects[_14b]||"domNode"];this.connect(_14c,_14b.toLowerCase(),_14b);delete this._deferredConnects[_14b];}},_setClassAttr:function(_14d){var _14e=this[this.attributeMap["class"]||"domNode"];dojo.removeClass(_14e,this["class"]);this["class"]=_14d;dojo.addClass(_14e,_14d);},_setStyleAttr:function(_14f){var _150=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_14f)){dojo.style(_150,_14f);}else{if(_150.style.cssText){_150.style.cssText+="; "+_14f;}else{_150.style.cssText=_14f;}}this.style=_14f;},setAttribute:function(attr,_151){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_151);},_attrToDom:function(attr,_152){var _153=this.attributeMap[attr];dojo.forEach(dojo.isArray(_153)?_153:[_153],function(_154){var _155=this[_154.node||_154||"domNode"];var type=_154.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_152)){_152=dojo.hitch(this,_152);}var _156=_154.attribute?_154.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_155,_156,_152);break;case "innerText":_155.innerHTML="";_155.appendChild(dojo.doc.createTextNode(_152));break;case "innerHTML":_155.innerHTML=_152;break;case "class":dojo.removeClass(_155,this[attr]);dojo.addClass(_155,_152);break;}},this);this[attr]=_152;},attr:function(name,_157){if(dojo.config.isDebug){var _158=arguments.callee._ach||(arguments.callee._ach={}),_159=(arguments.callee.caller||"unknown caller").toString();if(!_158[_159]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_159,"","2.0");_158[_159]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},get:function(name){var _15a=this._getAttrNames(name);return this[_15a.g]?this[_15a.g]():this[name];},set:function(name,_15b){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _15c=this._getAttrNames(name);if(this[_15c.s]){var _15d=this[_15c.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_15b);}var _15e=this[name];this[name]=_15b;}return _15d||this;},_attrPairNames:{},_getAttrNames:function(name){var apn=this._attrPairNames;if(apn[name]){return apn[name];}var uc=name.charAt(0).toUpperCase()+name.substr(1);return (apn[name]={n:name+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];},getChildren:function(){return this.containerNode?dijit.findWidgets(this.containerNode):[];},nodesWithKeyClick:["input","button"],connect:function(obj,_15f,_160){var d=dojo,dc=d._connect,_161=[];if(_15f=="ondijitclick"){if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_160);_161.push(dc(obj,"onkeydown",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=e.target;e.preventDefault();}}),dc(obj,"onkeyup",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target===dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=null;return m(e);}}));}_15f="onclick";}_161.push(dc(obj,_15f,this,_160));this._connects.push(_161);return _161;},disconnect:function(_162){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_162){dojo.forEach(_162,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_163,_164){var d=dojo,_165=d.subscribe(_163,this,_164);this._subscribes.push(_165);return _165;},unsubscribe:function(_166){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_166){dojo.unsubscribe(_166);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},placeAt:function(_167,_168){if(_167.declaredClass&&_167.addChild){_167.addChild(this,_168);}else{dojo.place(this.domNode,_167,_168);}return this;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.string.rep=function(str,num){if(num<=0||!str){return "";}var buf=[];for(;;){if(num&1){buf.push(str);}if(!(num>>=1)){break;}str+=str;}return buf.join("");};dojo.string.pad=function(text,size,ch,end){if(!ch){ch="0";}var out=String(text),pad=dojo.string.rep(ch,Math.ceil((size-out.length)/ch.length));return end?out+pad:pad+out;};dojo.string.substitute=function(_169,map,_16a,_16b){_16b=_16b||dojo.global;_16a=_16a?dojo.hitch(_16b,_16a):function(v){return v;};return _169.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_16c,key,_16d){var _16e=dojo.getObject(key,false,map);if(_16d){_16e=dojo.getObject(_16d,false,_16b).call(_16b,_16e,key);}return _16a(_16e,key).toString();});};dojo.string.trim=String.prototype.trim?dojo.trim:function(str){str=str.replace(/^\s+/,"");for(var i=str.length-1;i>=0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}return str;};}if(!dojo._hasResource["dojo.cache"]){dojo._hasResource["dojo.cache"]=true;dojo.provide("dojo.cache");(function(){var _16f={};dojo.cache=function(_170,url,_171){if(typeof _170=="string"){var _172=dojo.moduleUrl(_170,url);}else{_172=_170;_171=url;}var key=_172.toString();var val=_171;if(_171!=undefined&&!dojo.isString(_171)){val=("value" in _171?_171.value:undefined);}var _173=_171&&_171.sanitize?true:false;if(typeof val=="string"){val=_16f[key]=_173?dojo.cache._sanitize(val):val;}else{if(val===null){delete _16f[key];}else{if(!(key in _16f)){val=dojo._getText(key);_16f[key]=_173?dojo.cache._sanitize(val):val;}val=_16f[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _174=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_174){val=_174[1];}}else{val="";}return val;};})();}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){this._attachPoints=[];},_stringRepl:function(tmpl){var _175=this.declaredClass,_176=this;return dojo.string.substitute(tmpl,this,function(_177,key){if(key.charAt(0)=="!"){_177=dojo.getObject(key.substr(1),false,_176);}if(typeof _177=="undefined"){throw new Error(_175+" template:"+key);}if(_177==null){return "";}return key.charAt(0)=="!"?_177:_177.toString().replace(/"/g,"&quot;");},this);},buildRendering:function(){var _178=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_178)){node=dojo._toDom(this._stringRepl(_178));if(node.nodeType!=1){throw new Error("Invalid template: "+_178);}}else{node=_178.cloneNode(true);}this.domNode=node;this._attachTemplateNodes(node);if(this.widgetsInTemplate){var _179=dojo.parser,qry,attr;if(_179._query!="[dojoType]"){qry=_179._query;attr=_179._attrName;_179._query="[dojoType]";_179._attrName="dojoType";}var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));if(qry){_179._query=qry;_179._attrName=attr;}this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_17a){var dest=this.containerNode;if(_17a&&dest){while(_17a.hasChildNodes()){dest.appendChild(_17a.firstChild);}}},_attachTemplateNodes:function(_17b,_17c){_17c=_17c||function(n,p){return n.getAttribute(p);};var _17d=dojo.isArray(_17b)?_17b:(_17b.all||_17b.getElementsByTagName("*"));var x=dojo.isArray(_17b)?0:-1;for(;x<_17d.length;x++){var _17e=(x==-1)?_17b:_17d[x];if(this.widgetsInTemplate&&_17c(_17e,"dojoType")){continue;}var _17f=_17c(_17e,"dojoAttachPoint");if(_17f){var _180,_181=_17f.split(/\s*,\s*/);while((_180=_181.shift())){if(dojo.isArray(this[_180])){this[_180].push(_17e);}else{this[_180]=_17e;}this._attachPoints.push(_180);}}var _182=_17c(_17e,"dojoAttachEvent");if(_182){var _183,_184=_182.split(/\s*,\s*/);var trim=dojo.trim;while((_183=_184.shift())){if(_183){var _185=null;if(_183.indexOf(":")!=-1){var _186=_183.split(":");_183=trim(_186[0]);_185=trim(_186[1]);}else{_183=trim(_183);}if(!_185){_185=_183;}this.connect(_17e,_183,_185);}}}var role=_17c(_17e,"waiRole");if(role){dijit.setWaiRole(_17e,role);}var _187=_17c(_17e,"waiState");if(_187){dojo.forEach(_187.split(/\s*,\s*/),function(_188){if(_188.indexOf("-")!=-1){var pair=_188.split("-");dijit.setWaiState(_17e,pair[0],pair[1]);}});}}},startup:function(){dojo.forEach(this._startupWidgets,function(w){if(w&&!w._started&&w.startup){w.startup();}});this.inherited(arguments);},destroyRendering:function(){dojo.forEach(this._attachPoints,function(_189){delete this[_189];},this);this._attachPoints=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_18a,_18b,_18c){var _18d=dijit._Templated._templateCache;var key=_18b||_18a;var _18e=_18d[key];if(_18e){try{if(!_18e.ownerDocument||_18e.ownerDocument==dojo.doc){return _18e;}}catch(e){}dojo.destroy(_18e);}if(!_18b){_18b=dojo.cache(_18a,{sanitize:true});}_18b=dojo.string.trim(_18b);if(_18c||_18b.match(/\$\{([^\}]+)\}/g)){return (_18d[key]=_18b);}else{var node=dojo._toDom(_18b);if(node.nodeType!=1){throw new Error("Invalid template: "+_18b);}return (_18d[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _18f=dijit._Templated._templateCache;for(var key in _18f){var _190=_18f[key];if(typeof _190=="object"){dojo.destroy(_190);}delete _18f[key];}});}dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});}if(!dojo._hasResource["dijit._Container"]){dojo._hasResource["dijit._Container"]=true;dojo.provide("dijit._Container");dojo.declare("dijit._Container",null,{isContainer:true,buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},addChild:function(_191,_192){var _193=this.containerNode;if(_192&&typeof _192=="number"){var _194=this.getChildren();if(_194&&_194.length>=_192){_193=_194[_192-1].domNode;_192="after";}}dojo.place(_191.domNode,_193,_192);if(this._started&&!_191._started){_191.startup();}},removeChild:function(_195){if(typeof _195=="number"&&_195>0){_195=this.getChildren()[_195];}if(_195){var node=_195.domNode;if(node&&node.parentNode){node.parentNode.removeChild(node);}}},hasChildren:function(){return this.getChildren().length>0;},destroyDescendants:function(_196){dojo.forEach(this.getChildren(),function(_197){_197.destroyRecursive(_196);});},_getSiblingOfChild:function(_198,dir){var node=_198.domNode,_199=(dir>0?"nextSibling":"previousSibling");do{node=node[_199];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_19a){return dojo.indexOf(this.getChildren(),_19a);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_19b){_19b.startup();});this.inherited(arguments);}});}if(!dojo._hasResource["dijit._Contained"]){dojo._hasResource["dijit._Contained"]=true;dojo.provide("dijit._Contained");dojo.declare("dijit._Contained",null,{getParent:function(){var _19c=dijit.getEnclosingWidget(this.domNode.parentNode);return _19c&&_19c.isContainer?_19c:null;},_getSibling:function(_19d){var node=this.domNode;do{node=node[_19d+"Sibling"];}while(node&&node.nodeType!=1);return node&&dijit.byNode(node);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");},getIndexInParent:function(){var p=this.getParent();if(!p||!p.getIndexOfChild){return -1;}return p.getIndexOfChild(this);}});}if(!dojo._hasResource["dijit.layout._LayoutWidget"]){dojo._hasResource["dijit.layout._LayoutWidget"]=true;dojo.provide("dijit.layout._LayoutWidget");dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{baseClass:"dijitLayoutContainer",isLayoutContainer:true,postCreate:function(){dojo.addClass(this.domNode,"dijitContainer");this.inherited(arguments);},startup:function(){if(this._started){return;}this.inherited(arguments);var _19e=this.getParent&&this.getParent();if(!(_19e&&_19e.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_19f,_1a0){var node=this.domNode;if(_19f){dojo.marginBox(node,_19f);if(_19f.t){node.style.top=_19f.t+"px";}if(_19f.l){node.style.left=_19f.l+"px";}}var mb=_1a0||{};dojo.mixin(mb,_19f||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(node),mb);}var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var be=dojo._getBorderExtents(node,cs);var bb=(this._borderBox={w:mb.w-(me.w+be.w),h:mb.h-(me.h+be.h)});var pe=dojo._getPadExtents(node,cs);this._contentBox={l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:bb.w-pe.w,h:bb.h-pe.h};this.layout();},layout:function(){},_setupChild:function(_1a1){dojo.addClass(_1a1.domNode,this.baseClass+"-child");if(_1a1.baseClass){dojo.addClass(_1a1.domNode,this.baseClass+"-"+_1a1.baseClass);}},addChild:function(_1a2,_1a3){this.inherited(arguments);if(this._started){this._setupChild(_1a2);}},removeChild:function(_1a4){dojo.removeClass(_1a4.domNode,this.baseClass+"-child");if(_1a4.baseClass){dojo.removeClass(_1a4.domNode,this.baseClass+"-"+_1a4.baseClass);}this.inherited(arguments);}});dijit.layout.marginBox2contentBox=function(node,mb){var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var pb=dojo._getPadBorderExtents(node,cs);return {l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};};(function(){var _1a5=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_1a6,dim){_1a6.resize?_1a6.resize(dim):dojo.marginBox(_1a6.domNode,dim);dojo.mixin(_1a6,dojo.marginBox(_1a6.domNode));dojo.mixin(_1a6,dim);};dijit.layout.layoutChildren=function(_1a7,dim,_1a8){dim=dojo.mixin({},dim);dojo.addClass(_1a7,"dijitLayoutContainer");_1a8=dojo.filter(_1a8,function(item){return item.layoutAlign!="client";}).concat(dojo.filter(_1a8,function(item){return item.layoutAlign=="client";}));dojo.forEach(_1a8,function(_1a9){var elm=_1a9.domNode,pos=_1a9.layoutAlign;var _1aa=elm.style;_1aa.left=dim.l+"px";_1aa.top=dim.t+"px";_1aa.bottom=_1aa.right="auto";dojo.addClass(elm,"dijitAlign"+_1a5(pos));if(pos=="top"||pos=="bottom"){size(_1a9,{w:dim.w});dim.h-=_1a9.h;if(pos=="top"){dim.t+=_1a9.h;}else{_1aa.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_1a9,{h:dim.h});dim.w-=_1a9.w;if(pos=="left"){dim.l+=_1a9.w;}else{_1aa.left=dim.l+dim.w+"px";}}else{if(pos=="client"){size(_1a9,dim);}}}});};})();}if(!dojo._hasResource["dijit._CssStateMixin"]){dojo._hasResource["dijit._CssStateMixin"]=true;dojo.provide("dijit._CssStateMixin");dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},postCreate:function(){this.inherited(arguments);dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){this.connect(this.domNode,e,"_cssMouseEvent");},this);this.connect(this,"set",function(name,_1ab){if(arguments.length>=2&&{disabled:true,readOnly:true,checked:true,selected:true}[name]){this._setStateClass();}});dojo.forEach(["_onFocus","_onBlur"],function(ap){this.connect(this,ap,"_setStateClass");},this);for(var ap in this.cssStateNodes){this._trackMouseState(this[ap],this.cssStateNodes[ap]);}this._setStateClass();},_cssMouseEvent:function(_1ac){if(!this.disabled){switch(_1ac.type){case "mouseenter":case "mouseover":this._hovering=true;this._active=this._mouseDown;break;case "mouseleave":case "mouseout":this._hovering=false;this._active=false;break;case "mousedown":this._active=true;this._mouseDown=true;var _1ad=this.connect(dojo.body(),"onmouseup",function(){this._active=false;this._mouseDown=false;this._setStateClass();this.disconnect(_1ad);});break;}this._setStateClass();}},_setStateClass:function(){var _1ae=this.baseClass.split(" ");function _1af(_1b0){_1ae=_1ae.concat(dojo.map(_1ae,function(c){return c+_1b0;}),"dijit"+_1b0);};if(!this.isLeftToRight()){_1af("Rtl");}if(this.checked){_1af("Checked");}if(this.state){_1af(this.state);}if(this.selected){_1af("Selected");}if(this.disabled){_1af("Disabled");}else{if(this.readOnly){_1af("ReadOnly");}else{if(this._active){_1af("Active");}else{if(this._hovering){_1af("Hover");}}}}if(this._focused){_1af("Focused");}var tn=this.stateNode||this.domNode,_1b1={};dojo.forEach(tn.className.split(" "),function(c){_1b1[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _1b1[c];});}dojo.forEach(_1ae,function(c){_1b1[c]=true;});var _1b2=[];for(var c in _1b1){_1b2.push(c);}tn.className=_1b2.join(" ");this._stateClasses=_1ae;},_trackMouseState:function(node,_1b3){var _1b4=false,_1b5=false,_1b6=false;var self=this,cn=dojo.hitch(this,"connect",node);function _1b7(){var _1b8=("disabled" in self&&self.disabled)||("readonly" in self&&self.readonly);dojo.toggleClass(node,_1b3+"Hover",_1b4&&!_1b5&&!_1b8);dojo.toggleClass(node,_1b3+"Active",_1b5&&!_1b8);dojo.toggleClass(node,_1b3+"Focused",_1b6&&!_1b8);};cn("onmouseenter",function(){_1b4=true;_1b7();});cn("onmouseleave",function(){_1b4=false;_1b5=false;_1b7();});cn("onmousedown",function(){_1b5=true;_1b7();});cn("onmouseup",function(){_1b5=false;_1b7();});cn("onfocus",function(){_1b6=true;_1b7();});cn("onblur",function(){_1b6=false;_1b7();});this.connect(this,"set",function(name,_1b9){if(name=="disabled"||name=="readOnly"){_1b7();}});}});}if(!dojo._hasResource["dijit.form._FormWidget"]){dojo._hasResource["dijit.form._FormWidget"]=true;dojo.provide("dijit.form._FormWidget");dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{name:"",alt:"",value:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,scrollOnFocus:true,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{value:"focusNode",id:"focusNode",tabIndex:"focusNode",alt:"focusNode",title:"focusNode"}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name=\""+this.name.replace(/'/g,"&quot;")+"\""):"";this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousedown","_onMouseDown");},_setDisabledAttr:function(_1ba){this.disabled=_1ba;dojo.attr(this.focusNode,"disabled",_1ba);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_1ba);}dijit.setWaiState(this.focusNode,"disabled",_1ba);if(_1ba){this._hovering=false;this._active=false;var _1bb="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";dojo.forEach(dojo.isArray(_1bb)?_1bb:[_1bb],function(_1bc){var node=this[_1bc];if(dojo.isWebKit||dijit.hasDefaultTabStop(node)){node.setAttribute("tabIndex","-1");}else{node.removeAttribute("tabIndex");}},this);}else{this.focusNode.setAttribute("tabIndex",this.tabIndex);}},setDisabled:function(_1bd){dojo.deprecated("setDisabled("+_1bd+") is deprecated. Use set('disabled',"+_1bd+") instead.","","2.0");this.set("disabled",_1bd);},_onFocus:function(e){if(this.scrollOnFocus){dojo.window.scrollIntoView(this.domNode);}this.inherited(arguments);},isFocusable:function(){return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){dijit.focus(this.focusNode);},compare:function(val1,val2){if(typeof val1=="number"&&typeof val2=="number"){return (isNaN(val1)&&isNaN(val2))?0:val1-val2;}else{if(val1>val2){return 1;}else{if(val1<val2){return -1;}else{return 0;}}}},onChange:function(_1be){},_onChangeActive:false,_handleOnChange:function(_1bf,_1c0){this._lastValue=_1bf;if(this._lastValueReported==undefined&&(_1c0===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1bf;}if((this.intermediateChanges||_1c0||_1c0===undefined)&&((typeof _1bf!=typeof this._lastValueReported)||this.compare(_1bf,this._lastValueReported)!=0)){this._lastValueReported=_1bf;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1bf);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1c1){dojo.deprecated("dijit.form._FormWidget:setValue("+_1c1+") is deprecated.  Use set('value',"+_1c1+") instead.","","2.0");this.set("value",_1c1);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_onMouseDown:function(e){if(!e.ctrlKey&&this.isFocusable()){var _1c2=this.connect(dojo.body(),"onmouseup",function(){if(this.isFocusable()){this.focus();}this.disconnect(_1c2);});}}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1c3){this.readOnly=_1c3;dojo.attr(this.focusNode,"readOnly",_1c3);dijit.setWaiState(this.focusNode,"readonly",_1c3);},postCreate:function(){this.inherited(arguments);if(dojo.isIE){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._resetValue=this.value;}},_setValueAttr:function(_1c4,_1c5){this.value=_1c4;this._handleOnChange(_1c4,_1c5);},_getValueAttr:function(){return this._lastValue;},undo:function(){this._setValueAttr(this._lastValueReported,false);},reset:function(){this._hasBeenBlurred=false;this._setValueAttr(this._resetValue,true);},_onKeyDown:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!(e.ctrlKey||e.altKey||e.metaKey)){var te;if(dojo.isIE){e.preventDefault();te=document.createEventObject();te.keyCode=dojo.keys.ESCAPE;te.shiftKey=e.shiftKey;e.srcElement.fireEvent("onkeypress",te);}}},_layoutHackIE7:function(){if(dojo.isIE==7){var _1c6=this.domNode;var _1c7=_1c6.parentNode;var _1c8=_1c6.firstChild||_1c6;var _1c9=_1c8.style.filter;var _1ca=this;while(_1c7&&_1c7.clientHeight==0){(function ping(){var _1cb=_1ca.connect(_1c7,"onscroll",function(e){_1ca.disconnect(_1cb);_1c8.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1c8.style.filter=_1c9;},0);});})();_1c7=_1c7.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}
Index: trunk/web/dojo/dijit/Menu.js
===================================================================
--- trunk/web/dojo/dijit/Menu.js	(revision 0)
+++ trunk/web/dojo/dijit/Menu.js	(revision 9)
@@ -0,0 +1,325 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Menu"]){
+dojo._hasResource["dijit.Menu"]=true;
+dojo.provide("dijit.Menu");
+dojo.require("dojo.window");
+dojo.require("dijit._Widget");
+dojo.require("dijit._KeyNavContainer");
+dojo.require("dijit._Templated");
+dojo.declare("dijit._MenuBase",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{parentMenu:null,popupDelay:500,startup:function(){
+if(this._started){
+return;
+}
+dojo.forEach(this.getChildren(),function(_1){
+_1.startup();
+});
+this.startupKeyNavChildren();
+this.inherited(arguments);
+},onExecute:function(){
+},onCancel:function(_2){
+},_moveToPopup:function(_3){
+if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){
+this.focusedChild._onClick(_3);
+}else{
+var _4=this._getTopMenu();
+if(_4&&_4._isMenuBar){
+_4.focusNext();
+}
+}
+},_onPopupHover:function(_5){
+if(this.currentPopup&&this.currentPopup._pendingClose_timer){
+var _6=this.currentPopup.parentMenu;
+if(_6.focusedChild){
+_6.focusedChild._setSelected(false);
+}
+_6.focusedChild=this.currentPopup.from_item;
+_6.focusedChild._setSelected(true);
+this._stopPendingCloseTimer(this.currentPopup);
+}
+},onItemHover:function(_7){
+if(this.isActive){
+this.focusChild(_7);
+if(this.focusedChild.popup&&!this.focusedChild.disabled&&!this.hover_timer){
+this.hover_timer=setTimeout(dojo.hitch(this,"_openPopup"),this.popupDelay);
+}
+}
+if(this.focusedChild){
+this.focusChild(_7);
+}
+this._hoveredChild=_7;
+},_onChildBlur:function(_8){
+this._stopPopupTimer();
+_8._setSelected(false);
+var _9=_8.popup;
+if(_9){
+this._stopPendingCloseTimer(_9);
+_9._pendingClose_timer=setTimeout(function(){
+_9._pendingClose_timer=null;
+if(_9.parentMenu){
+_9.parentMenu.currentPopup=null;
+}
+dijit.popup.close(_9);
+},this.popupDelay);
+}
+},onItemUnhover:function(_a){
+if(this.isActive){
+this._stopPopupTimer();
+}
+if(this._hoveredChild==_a){
+this._hoveredChild=null;
+}
+},_stopPopupTimer:function(){
+if(this.hover_timer){
+clearTimeout(this.hover_timer);
+this.hover_timer=null;
+}
+},_stopPendingCloseTimer:function(_b){
+if(_b._pendingClose_timer){
+clearTimeout(_b._pendingClose_timer);
+_b._pendingClose_timer=null;
+}
+},_stopFocusTimer:function(){
+if(this._focus_timer){
+clearTimeout(this._focus_timer);
+this._focus_timer=null;
+}
+},_getTopMenu:function(){
+for(var _c=this;_c.parentMenu;_c=_c.parentMenu){
+}
+return _c;
+},onItemClick:function(_d,_e){
+if(typeof this.isShowingNow=="undefined"){
+this._markActive();
+}
+this.focusChild(_d);
+if(_d.disabled){
+return false;
+}
+if(_d.popup){
+this._openPopup();
+}else{
+this.onExecute();
+_d.onClick(_e);
+}
+},_openPopup:function(){
+this._stopPopupTimer();
+var _f=this.focusedChild;
+if(!_f){
+return;
+}
+var _10=_f.popup;
+if(_10.isShowingNow){
+return;
+}
+if(this.currentPopup){
+this._stopPendingCloseTimer(this.currentPopup);
+dijit.popup.close(this.currentPopup);
+}
+_10.parentMenu=this;
+_10.from_item=_f;
+var _11=this;
+dijit.popup.open({parent:this,popup:_10,around:_f.domNode,orient:this._orient||(this.isLeftToRight()?{"TR":"TL","TL":"TR","BR":"BL","BL":"BR"}:{"TL":"TR","TR":"TL","BL":"BR","BR":"BL"}),onCancel:function(){
+_11.focusChild(_f);
+_11._cleanUp();
+_f._setSelected(true);
+_11.focusedChild=_f;
+},onExecute:dojo.hitch(this,"_cleanUp")});
+this.currentPopup=_10;
+_10.connect(_10.domNode,"onmouseenter",dojo.hitch(_11,"_onPopupHover"));
+if(_10.focus){
+_10._focus_timer=setTimeout(dojo.hitch(_10,function(){
+this._focus_timer=null;
+this.focus();
+}),0);
+}
+},_markActive:function(){
+this.isActive=true;
+dojo.addClass(this.domNode,"dijitMenuActive");
+dojo.removeClass(this.domNode,"dijitMenuPassive");
+},onOpen:function(e){
+this.isShowingNow=true;
+this._markActive();
+},_markInactive:function(){
+this.isActive=false;
+dojo.removeClass(this.domNode,"dijitMenuActive");
+dojo.addClass(this.domNode,"dijitMenuPassive");
+},onClose:function(){
+this._stopFocusTimer();
+this._markInactive();
+this.isShowingNow=false;
+this.parentMenu=null;
+},_closeChild:function(){
+this._stopPopupTimer();
+if(this.focusedChild){
+this.focusedChild._setSelected(false);
+this.focusedChild._onUnhover();
+this.focusedChild=null;
+}
+if(this.currentPopup){
+dijit.popup.close(this.currentPopup);
+this.currentPopup=null;
+}
+},_onItemFocus:function(_12){
+if(this._hoveredChild&&this._hoveredChild!=_12){
+this._hoveredChild._onUnhover();
+}
+},_onBlur:function(){
+this._cleanUp();
+this.inherited(arguments);
+},_cleanUp:function(){
+this._closeChild();
+if(typeof this.isShowingNow=="undefined"){
+this._markInactive();
+}
+}});
+dojo.declare("dijit.Menu",dijit._MenuBase,{constructor:function(){
+this._bindings=[];
+},templateString:dojo.cache("dijit","templates/Menu.html","<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,postCreate:function(){
+if(this.contextMenuForWindow){
+this.bindDomNode(dojo.body());
+}else{
+dojo.forEach(this.targetNodeIds,this.bindDomNode,this);
+}
+var k=dojo.keys,l=this.isLeftToRight();
+this._openSubMenuKey=l?k.RIGHT_ARROW:k.LEFT_ARROW;
+this._closeSubMenuKey=l?k.LEFT_ARROW:k.RIGHT_ARROW;
+this.connectKeyNavHandlers([k.UP_ARROW],[k.DOWN_ARROW]);
+},_onKeyPress:function(evt){
+if(evt.ctrlKey||evt.altKey){
+return;
+}
+switch(evt.charOrCode){
+case this._openSubMenuKey:
+this._moveToPopup(evt);
+dojo.stopEvent(evt);
+break;
+case this._closeSubMenuKey:
+if(this.parentMenu){
+if(this.parentMenu._isMenuBar){
+this.parentMenu.focusPrev();
+}else{
+this.onCancel(false);
+}
+}else{
+dojo.stopEvent(evt);
+}
+break;
+}
+},_iframeContentWindow:function(_13){
+var win=dojo.window.get(this._iframeContentDocument(_13))||this._iframeContentDocument(_13)["__parent__"]||(_13.name&&dojo.doc.frames[_13.name])||null;
+return win;
+},_iframeContentDocument:function(_14){
+var doc=_14.contentDocument||(_14.contentWindow&&_14.contentWindow.document)||(_14.name&&dojo.doc.frames[_14.name]&&dojo.doc.frames[_14.name].document)||null;
+return doc;
+},bindDomNode:function(_15){
+_15=dojo.byId(_15);
+var cn;
+if(_15.tagName.toLowerCase()=="iframe"){
+var _16=_15,win=this._iframeContentWindow(_16);
+cn=dojo.withGlobal(win,dojo.body);
+}else{
+cn=(_15==dojo.body()?dojo.doc.documentElement:_15);
+}
+var _17={node:_15,iframe:_16};
+dojo.attr(_15,"_dijitMenu"+this.id,this._bindings.push(_17));
+var _18=dojo.hitch(this,function(cn){
+return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){
+dojo.stopEvent(evt);
+this._scheduleOpen(evt.target,_16,{x:evt.pageX,y:evt.pageY});
+}),dojo.connect(cn,"onkeydown",this,function(evt){
+if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){
+dojo.stopEvent(evt);
+this._scheduleOpen(evt.target,_16);
+}
+})];
+});
+_17.connects=cn?_18(cn):[];
+if(_16){
+_17.onloadHandler=dojo.hitch(this,function(){
+var win=this._iframeContentWindow(_16);
+cn=dojo.withGlobal(win,dojo.body);
+_17.connects=_18(cn);
+});
+if(_16.addEventListener){
+_16.addEventListener("load",_17.onloadHandler,false);
+}else{
+_16.attachEvent("onload",_17.onloadHandler);
+}
+}
+},unBindDomNode:function(_19){
+var _1a;
+try{
+_1a=dojo.byId(_19);
+}
+catch(e){
+return;
+}
+var _1b="_dijitMenu"+this.id;
+if(_1a&&dojo.hasAttr(_1a,_1b)){
+var bid=dojo.attr(_1a,_1b)-1,b=this._bindings[bid];
+dojo.forEach(b.connects,dojo.disconnect);
+var _1c=b.iframe;
+if(_1c){
+if(_1c.removeEventListener){
+_1c.removeEventListener("load",b.onloadHandler,false);
+}else{
+_1c.detachEvent("onload",b.onloadHandler);
+}
+}
+dojo.removeAttr(_1a,_1b);
+delete this._bindings[bid];
+}
+},_scheduleOpen:function(_1d,_1e,_1f){
+if(!this._openTimer){
+this._openTimer=setTimeout(dojo.hitch(this,function(){
+delete this._openTimer;
+this._openMyself({target:_1d,iframe:_1e,coords:_1f});
+}),1);
+}
+},_openMyself:function(_20){
+var _21=_20.target,_22=_20.iframe,_23=_20.coords;
+if(_23){
+if(_22){
+var od=_21.ownerDocument,ifc=dojo.position(_22,true),win=this._iframeContentWindow(_22),_24=dojo.withGlobal(win,"_docScroll",dojo);
+var cs=dojo.getComputedStyle(_22),tp=dojo._toPixelValue,_25=(dojo.isIE&&dojo.isQuirks?0:tp(_22,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_22,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_22,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_22,cs.borderTopWidth):0);
+_23.x+=ifc.x+_25-_24.x;
+_23.y+=ifc.y+top-_24.y;
+}
+}else{
+_23=dojo.position(_21,true);
+_23.x+=10;
+_23.y+=10;
+}
+var _26=this;
+var _27=dijit.getFocus(this);
+function _28(){
+if(_26.refocus){
+dijit.focus(_27);
+}
+dijit.popup.close(_26);
+};
+dijit.popup.open({popup:this,x:_23.x,y:_23.y,onExecute:_28,onCancel:_28,orient:this.isLeftToRight()?"L":"R"});
+this.focus();
+this._onBlur=function(){
+this.inherited("_onBlur",arguments);
+dijit.popup.close(this);
+};
+},uninitialize:function(){
+dojo.forEach(this._bindings,function(b){
+if(b){
+this.unBindDomNode(b.node);
+}
+},this);
+this.inherited(arguments);
+}});
+dojo.require("dijit.MenuItem");
+dojo.require("dijit.PopupMenuItem");
+dojo.require("dijit.CheckedMenuItem");
+dojo.require("dijit.MenuSeparator");
+}
Index: trunk/web/dojo/dijit/PopupMenuItem.js
===================================================================
--- trunk/web/dojo/dijit/PopupMenuItem.js	(revision 0)
+++ trunk/web/dojo/dijit/PopupMenuItem.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.PopupMenuItem"]){
+dojo._hasResource["dijit.PopupMenuItem"]=true;
+dojo.provide("dijit.PopupMenuItem");
+dojo.require("dijit.MenuItem");
+dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){
+if(this.srcNodeRef){
+var _1=dojo.query("*",this.srcNodeRef);
+dijit.PopupMenuItem.superclass._fillContent.call(this,_1[0]);
+this.dropDownContainer=this.srcNodeRef;
+}
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(!this.popup){
+var _2=dojo.query("[widgetId]",this.dropDownContainer)[0];
+this.popup=dijit.byNode(_2);
+}
+dojo.body().appendChild(this.popup.domNode);
+this.popup.startup();
+this.popup.domNode.style.display="none";
+if(this.arrowWrapper){
+dojo.style(this.arrowWrapper,"visibility","");
+}
+dijit.setWaiState(this.focusNode,"haspopup","true");
+},destroyDescendants:function(){
+if(this.popup){
+if(!this.popup._destroyed){
+this.popup.destroyRecursive();
+}
+delete this.popup;
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/LICENSE
===================================================================
--- trunk/web/dojo/dijit/LICENSE	(revision 0)
+++ trunk/web/dojo/dijit/LICENSE	(revision 9)
@@ -0,0 +1,195 @@
+Dojo is available under *either* the terms of the modified BSD license *or* the
+Academic Free License version 2.1. As a recipient of Dojo, you may choose which
+license to receive this code under (except as noted in per-module LICENSE
+files). Some modules may not be the copyright of the Dojo Foundation. These
+modules contain explicit declarations of copyright in both the LICENSE files in
+the directories in which they reside and in the code itself. No external
+contributions are allowed under licenses which are fundamentally incompatible
+with the AFL or BSD licenses that Dojo is distributed under.
+
+The text of the AFL and BSD licenses is reproduced below. 
+
+-------------------------------------------------------------------------------
+The "New" BSD License:
+**********************
+
+Copyright (c) 2005-2010, The Dojo Foundation
+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 Dojo Foundation 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.
+
+-------------------------------------------------------------------------------
+The Academic Free License, v. 2.1:
+**********************************
+
+This Academic Free License (the "License") applies to any original work of
+authorship (the "Original Work") whose owner (the "Licensor") has placed the
+following notice immediately following the copyright notice for the Original
+Work:
+
+Licensed under the Academic Free License version 2.1
+
+1) Grant of Copyright License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license to do the
+following:
+
+a) to reproduce the Original Work in copies;
+
+b) to prepare derivative works ("Derivative Works") based upon the Original
+Work;
+
+c) to distribute copies of the Original Work and Derivative Works to the
+public;
+
+d) to perform the Original Work publicly; and
+
+e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
+claims owned or controlled by the Licensor that are embodied in the Original
+Work as furnished by the Licensor, to make, use, sell and offer for sale the
+Original Work and Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred
+form of the Original Work for making modifications to it and all available
+documentation describing how to modify the Original Work. Licensor hereby
+agrees to provide a machine-readable copy of the Source Code of the Original
+Work along with each copy of the Original Work that Licensor distributes.
+Licensor reserves the right to satisfy this obligation by placing a
+machine-readable copy of the Source Code in an information repository
+reasonably calculated to permit inexpensive and convenient access by You for as
+long as Licensor continues to distribute the Original Work, and by publishing
+the address of that information repository in a notice immediately following
+the copyright notice that applies to the Original Work.
+
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names
+of any contributors to the Original Work, nor any of their trademarks or
+service marks, may be used to endorse or promote products derived from this
+Original Work without express prior written permission of the Licensor. Nothing
+in this License shall be deemed to grant any rights to trademarks, copyrights,
+patents, trade secrets or any other intellectual property of Licensor except as
+expressly stated herein. No patent license is granted to make, use, sell or
+offer to sell embodiments of any patent claims other than the licensed claims
+defined in Section 2. No right is granted to the trademarks of Licensor even if
+such marks are included in the Original Work. Nothing in this License shall be
+interpreted to prohibit Licensor from licensing under different terms from this
+License any Original Work that Licensor otherwise would have a right to
+license.
+
+5) This section intentionally omitted.
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative
+Works that You create, all copyright, patent or trademark notices from the
+Source Code of the Original Work, as well as any notices of licensing and any
+descriptive text identified therein as an "Attribution Notice." You must cause
+the Source Code for any Derivative Works that You create to carry a prominent
+Attribution Notice reasonably calculated to inform recipients that You have
+modified the Original Work.
+
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
+the copyright in and to the Original Work and the patent rights granted herein
+by Licensor are owned by the Licensor or are sublicensed to You under the terms
+of this License with the permission of the contributor(s) of those copyrights
+and patent rights. Except as expressly stated in the immediately proceeding
+sentence, the Original Work is provided under this License on an "AS IS" BASIS
+and WITHOUT WARRANTY, either express or implied, including, without limitation,
+the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
+This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
+license to Original Work is granted hereunder except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory,
+whether in tort (including negligence), contract, or otherwise, shall the
+Licensor be liable to any person for any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License
+or the use of the Original Work including, without limitation, damages for loss
+of goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses. This limitation of liability shall not
+apply to liability for death or personal injury resulting from Licensor's
+negligence to the extent applicable law prohibits such limitation. Some
+jurisdictions do not allow the exclusion or limitation of incidental or
+consequential damages, so this exclusion and limitation may not apply to You.
+
+9) Acceptance and Termination. If You distribute copies of the Original Work or
+a Derivative Work, You must make a reasonable effort under the circumstances to
+obtain the express assent of recipients to the terms of this License. Nothing
+else but this License (or another written agreement between Licensor and You)
+grants You permission to create Derivative Works based upon the Original Work
+or to exercise any of the rights granted in Section 1 herein, and any attempt
+to do so except under the terms of this License (or another written agreement
+between Licensor and You) is expressly prohibited by U.S. copyright law, the
+equivalent laws of other countries, and by international treaty. Therefore, by
+exercising any of the rights granted to You in Section 1 herein, You indicate
+Your acceptance of this License and all of its terms and conditions.
+
+10) Termination for Patent Action. This License shall terminate automatically
+and You may no longer exercise any of the rights granted to You by this License
+as of the date You commence an action, including a cross-claim or counterclaim,
+against Licensor or any licensee alleging that the Original Work infringes a
+patent. This termination provision shall not apply for an action alleging
+patent infringement by combinations of the Original Work with other software or
+hardware.
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
+License may be brought only in the courts of a jurisdiction wherein the
+Licensor resides or in which Licensor conducts its primary business, and under
+the laws of that jurisdiction excluding its conflict-of-law provisions. The
+application of the United Nations Convention on Contracts for the International
+Sale of Goods is expressly excluded. Any use of the Original Work outside the
+scope of this License or after its termination shall be subject to the
+requirements and penalties of the U.S. Copyright Act, 17 U.S.C. Â§ 101 et
+seq., the equivalent laws of other countries, and international treaty. This
+section shall survive the termination of this License.
+
+12) Attorneys Fees. In any action to enforce the terms of this License or
+seeking damages relating thereto, the prevailing party shall be entitled to
+recover its costs and expenses, including, without limitation, reasonable
+attorneys' fees and costs incurred in connection with such action, including
+any appeal of such action. This section shall survive the termination of this
+License.
+
+13) Miscellaneous. This License represents the complete agreement concerning
+the subject matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent necessary to
+make it enforceable.
+
+14) Definition of "You" in This License. "You" throughout this License, whether
+in upper or lower case, means an individual or a legal entity exercising rights
+under, and complying with all of the terms of, this License. For legal
+entities, "You" includes any entity that controls, is controlled by, or is
+under common control with you. For purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty percent
+(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
+entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise
+restricted or conditioned by this License or by law, and Licensor promises not
+to interfere with or be responsible for such uses by You.
+
+This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
+Permission is hereby granted to copy and distribute this license without
+modification. This license may not be modified without the express written
+permission of its copyright owner.
Index: trunk/web/dojo/dijit/_Calendar.js
===================================================================
--- trunk/web/dojo/dijit/_Calendar.js	(revision 0)
+++ trunk/web/dojo/dijit/_Calendar.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._Calendar"]){
+dojo._hasResource["dijit._Calendar"]=true;
+dojo.provide("dijit._Calendar");
+dojo.require("dijit.Calendar");
+dojo.deprecated("dijit._Calendar is deprecated","dijit._Calendar moved to dijit.Calendar",1.5);
+dijit._Calendar=dijit.Calendar;
+}
Index: trunk/web/dojo/dijit/dijit-all.js
===================================================================
--- trunk/web/dojo/dijit/dijit-all.js	(revision 0)
+++ trunk/web/dojo/dijit/dijit-all.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");(function(){var _1=function(m1,m2,h){if(h<0){++h;}if(h>1){--h;}var h6=6*h;if(h6<1){return m1+(m2-m1)*h6;}if(2*h<1){return m2;}if(3*h<2){return m1+(m2-m1)*(2/3-h)*6;}return m1;};dojo.colorFromRgb=function(_2,_3){var m=_2.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);if(m){var c=m[2].split(/\s*,\s*/),l=c.length,t=m[1],a;if((t=="rgb"&&l==3)||(t=="rgba"&&l==4)){var r=c[0];if(r.charAt(r.length-1)=="%"){a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,_3);}return dojo.colorFromArray(c,_3);}if((t=="hsl"&&l==3)||(t=="hsla"&&l==4)){var H=((parseFloat(c[0])%360)+360)%360/360,S=parseFloat(c[1])/100,L=parseFloat(c[2])/100,m2=L<=0.5?L*(S+1):L+S-L*S,m1=2*L-m2;a=[_1(m1,m2,H+1/3)*256,_1(m1,m2,H)*256,_1(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,_3);}}return null;};var _4=function(c,_5,_6){c=Number(c);return isNaN(c)?_6:c<_5?_5:c>_6?_6:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_4(t.r,0,255));t.g=Math.round(_4(t.g,0,255));t.b=Math.round(_4(t.b,0,255));t.a=_4(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};dojo.mixin(dojo.Color.named,{aliceblue:[240,248,255],antiquewhite:[250,235,215],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],blanchedalmond:[255,235,205],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],oldlace:[253,245,230],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],thistle:[216,191,216],tomato:[255,99,71],transparent:[0,0,0,0],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],whitesmoke:[245,245,245],yellowgreen:[154,205,50]});}if(!dojo._hasResource["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_7,_8,_9){_9=dojo.i18n.normalizeLocale(_9);var _a=_9.split("-");var _b=[_7,"nls",_8].join(".");var _c=dojo._loadedModules[_b];if(_c){var _d;for(var i=_a.length;i>0;i--){var _e=_a.slice(0,i).join("_");if(_c[_e]){_d=_c[_e];break;}}if(!_d){_d=_c.ROOT;}if(_d){var _f=function(){};_f.prototype=_d;return new _f();}}throw new Error("Bundle not found: "+_8+" in "+_7+" , locale="+_9);};dojo.i18n.normalizeLocale=function(_10){var _11=_10?_10.toLowerCase():dojo.locale;if(_11=="root"){_11="ROOT";}return _11;};dojo.i18n._requireLocalization=function(_12,_13,_14,_15){var _16=dojo.i18n.normalizeLocale(_14);var _17=[_12,"nls",_13].join(".");var _18="";if(_15){var _19=_15.split(",");for(var i=0;i<_19.length;i++){if(_16["indexOf"](_19[i])==0){if(_19[i].length>_18.length){_18=_19[i];}}}if(!_18){_18="ROOT";}}var _1a=_15?_18:_16;var _1b=dojo._loadedModules[_17];var _1c=null;if(_1b){if(dojo.config.localizationComplete&&_1b._built){return;}var _1d=_1a.replace(/-/g,"_");var _1e=_17+"."+_1d;_1c=dojo._loadedModules[_1e];}if(!_1c){_1b=dojo["provide"](_17);var _1f=dojo._getModuleSymbols(_12);var _20=_1f.concat("nls").join("/");var _21;dojo.i18n._searchLocalePath(_1a,_15,function(loc){var _22=loc.replace(/-/g,"_");var _23=_17+"."+_22;var _24=false;if(!dojo._loadedModules[_23]){dojo["provide"](_23);var _25=[_20];if(loc!="ROOT"){_25.push(loc);}_25.push(_13);var _26=_25.join("/")+".js";_24=dojo._loadPath(_26,null,function(_27){var _28=function(){};_28.prototype=_21;_1b[_22]=new _28();for(var j in _27){_1b[_22][j]=_27[j];}});}else{_24=true;}if(_24&&_1b[_22]){_21=_1b[_22];}else{_1b[_22]=_21;}if(_15){return true;}});}if(_15&&_16!=_18){_1b[_16.replace(/-/g,"_")]=_1b[_18.replace(/-/g,"_")];}};(function(){var _29=dojo.config.extraLocale;if(_29){if(!_29 instanceof Array){_29=[_29];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_2a,_2b){req(m,b,_2a,_2b);if(_2a){return;}for(var i=0;i<_29.length;i++){req(m,b,_29[i],_2b);}};}})();dojo.i18n._searchLocalePath=function(_2c,_2d,_2e){_2c=dojo.i18n.normalizeLocale(_2c);var _2f=_2c.split("-");var _30=[];for(var i=_2f.length;i>0;i--){_30.push(_2f.slice(0,i).join("-"));}_30.push(false);if(_2d){_30.reverse();}for(var j=_30.length-1;j>=0;j--){var loc=_30[j]||"ROOT";var _31=_2e(loc);if(_31){break;}}};dojo.i18n._preloadLocalizations=function(_32,_33){function _34(_35){_35=dojo.i18n.normalizeLocale(_35);dojo.i18n._searchLocalePath(_35,true,function(loc){for(var i=0;i<_33.length;i++){if(_33[i]==loc){dojo["require"](_32+"_"+loc);return true;}}return false;});};_34();var _36=dojo.config.extraLocale||[];for(var i=0;i<_36.length;i++){_34(_36[i]);}};}if(!dojo._hasResource["dijit._PaletteMixin"]){dojo._hasResource["dijit._PaletteMixin"]=true;dojo.provide("dijit._PaletteMixin");dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_37,_38){this._cells=[];var url=this._blankGif;var _39=dojo.getObject(this.dyeClass);for(var row=0;row<_37.length;row++){var _3a=dojo.create("tr",{tabIndex:"-1"},this.gridNode);for(var col=0;col<_37[row].length;col++){var _3b=_37[row][col];if(_3b){var _3c=new _39(_3b);var _3d=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_38[_3b]});_3c.fillCell(_3d,url);this.connect(_3d,"ondijitclick","_onCellClick");this._trackMouseState(_3d,this.cellClass);dojo.place(_3d,_3a);_3d.index=this._cells.length;this._cells.push({node:_3d,dye:_3c});}}}this._xDim=_37[0].length;this._yDim=_37.length;var _3e={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};for(var key in _3e){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[key],ctrlKey:false,altKey:false,shiftKey:false},this,function(){var _3f=_3e[key];return function(_40){this._navigateByKey(_3f,_40);};}(),this.timeoutChangeRate,this.defaultTimeout));}},postCreate:function(){this.inherited(arguments);this._setCurrent(this._cells[0].node);},focus:function(){dijit.focus(this._currentFocus);},_onCellClick:function(evt){var _41=evt.currentTarget,_42=this._getDye(_41).getValue();this._setCurrent(_41);setTimeout(dojo.hitch(this,function(){dijit.focus(_41);this._setValueAttr(_42,true);}));dojo.removeClass(_41,"dijitPaletteCellHover");dojo.stopEvent(evt);},_setCurrent:function(_43){if("_currentFocus" in this){dojo.attr(this._currentFocus,"tabIndex","-1");}this._currentFocus=_43;if(_43){dojo.attr(_43,"tabIndex",this.tabIndex);}},_setValueAttr:function(_44,_45){this.value=null;if(this._selectedCell>=0){dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");}this._selectedCell=-1;if(_44){for(var i=0;i<this._cells.length;i++){if(_44==this._cells[i].dye.getValue()){this._selectedCell=i;this.value=_44;dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");if(_45||_45===undefined){this.onChange(_44);}break;}}}},onChange:function(_46){},_navigateByKey:function(_47,_48){if(_48==-1){return;}var _49=this._currentFocus.index+_47;if(_49<this._cells.length&&_49>-1){var _4a=this._cells[_49].node;this._setCurrent(_4a);setTimeout(dojo.hitch(dijit,"focus",_4a),0);}},_getDye:function(_4b){return this._cells[_4b.index].dye;}});}if(!dojo._hasResource["dijit.ColorPalette"]){dojo._hasResource["dijit.ColorPalette"]=true;dojo.provide("dijit.ColorPalette");dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_palettes:{"7x10":[["white","seashell","cornsilk","lemonchiffon","lightyellow","palegreen","paleturquoise","lightcyan","lavender","plum"],["lightgray","pink","bisque","moccasin","khaki","lightgreen","lightseagreen","lightskyblue","cornflowerblue","violet"],["silver","lightcoral","sandybrown","orange","palegoldenrod","chartreuse","mediumturquoise","skyblue","mediumslateblue","orchid"],["gray","red","orangered","darkorange","yellow","limegreen","darkseagreen","royalblue","slateblue","mediumorchid"],["dimgray","crimson","chocolate","coral","gold","forestgreen","seagreen","blue","blueviolet","darkorchid"],["darkslategray","firebrick","saddlebrown","sienna","olive","green","darkcyan","mediumblue","darkslateblue","darkmagenta"],["black","darkred","maroon","brown","darkolivegreen","darkgreen","midnightblue","navy","indigo","purple"]],"3x4":[["white","lime","green","blue"],["silver","yellow","fuchsia","navy"],["gray","red","purple","black"]]},_imagePaths:{"7x10":dojo.moduleUrl("dijit.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png"),"7x10-rtl":dojo.moduleUrl("dijit.themes","a11y/colors7x10-rtl.png"),"3x4-rtl":dojo.moduleUrl("dijit.themes","a11y/colors3x4-rtl.png")},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",dyeClass:"dijit._Color",buildRendering:function(){this.inherited(arguments);this.imageNode.setAttribute("src",this._imagePaths[this.palette+(this.isLeftToRight()?"":"-rtl")].toString());var _4c=dojo.i18n.getLocalization("dojo","colors",this.lang);this._preparePalette(this._palettes[this.palette],_4c);}});dojo.declare("dijit._Color",dojo.Color,{constructor:function(_4d){this._alias=_4d;this.setColor(dojo.Color.named[_4d]);},getValue:function(){return this.toHex();},fillCell:function(_4e,_4f){dojo.create("img",{src:_4f,"class":"dijitPaletteImg",alt:this._alias},_4e);}});}if(!dojo._hasResource["dijit.Declaration"]){dojo._hasResource["dijit.Declaration"]=true;dojo.provide("dijit.Declaration");dojo.declare("dijit.Declaration",dijit._Widget,{_noScript:true,widgetClass:"",defaults:null,mixins:[],buildRendering:function(){var src=this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),_50=dojo.query("> script[type^='dojo/method'][event]",src).orphan(),_51=dojo.query("> script[type^='dojo/method']",src).orphan(),_52=dojo.query("> script[type^='dojo/connect']",src).orphan(),_53=src.nodeName;var _54=this.defaults||{};dojo.forEach(_50,function(s){var evt=s.getAttribute("event"),_55=dojo.parser._functionFromScript(s);_54[evt]=_55;});this.mixins=this.mixins.length?dojo.map(this.mixins,function(_56){return dojo.getObject(_56);}):[dijit._Widget,dijit._Templated];_54.widgetsInTemplate=true;_54._skipNodeCache=true;_54.templateString="<"+_53+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||"")+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||"")+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+_53+">";dojo.query("[dojoType]",src).forEach(function(_57){_57.removeAttribute("dojoType");});var wc=dojo.declare(this.widgetClass,this.mixins,_54);var _58=_52.concat(_51);dojo.forEach(_58,function(s){var evt=s.getAttribute("event")||"postscript",_59=dojo.parser._functionFromScript(s);dojo.connect(wc.prototype,evt,_59);});}});}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.dnd.getCopyKeyState=dojo.isCopyKey;dojo.dnd._uniqueId=0;dojo.dnd.getUniqueId=function(){var id;do{id=dojo._scopeName+"Unique"+(++dojo.dnd._uniqueId);}while(dojo.byId(id));return id;};dojo.dnd._empty={};dojo.dnd.isFormElement=function(e){var t=e.target;if(t.nodeType==3){t=t.parentNode;}return " button textarea input select option ".indexOf(" "+t.tagName.toLowerCase()+" ")>=0;};}if(!dojo._hasResource["dojo.dnd.autoscroll"]){dojo._hasResource["dojo.dnd.autoscroll"]=true;dojo.provide("dojo.dnd.autoscroll");dojo.dnd.getViewport=function(){var d=dojo.doc,dd=d.documentElement,w=window,b=dojo.body();if(dojo.isMozilla){return {w:dd.clientWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&w.innerWidth){return {w:w.innerWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&dd&&dd.clientWidth){return {w:dd.clientWidth,h:dd.clientHeight};}else{if(b.clientWidth){return {w:b.clientWidth,h:b.clientHeight};}}}}return null;};dojo.dnd.V_TRIGGER_AUTOSCROLL=32;dojo.dnd.H_TRIGGER_AUTOSCROLL=32;dojo.dnd.V_AUTOSCROLL_VALUE=16;dojo.dnd.H_AUTOSCROLL_VALUE=16;dojo.dnd.autoScroll=function(e){var v=dojo.dnd.getViewport(),dx=0,dy=0;if(e.clientX<dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=-dojo.dnd.H_AUTOSCROLL_VALUE;}else{if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=dojo.dnd.H_AUTOSCROLL_VALUE;}}if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=-dojo.dnd.V_AUTOSCROLL_VALUE;}else{if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=dojo.dnd.V_AUTOSCROLL_VALUE;}}window.scrollBy(dx,dy);};dojo.dnd._validNodes={"div":1,"p":1,"td":1};dojo.dnd._validOverflow={"auto":1,"scroll":1};dojo.dnd.autoScrollNodes=function(e){for(var n=e.target;n;){if(n.nodeType==1&&(n.tagName.toLowerCase() in dojo.dnd._validNodes)){var s=dojo.getComputedStyle(n);if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){var b=dojo._getContentBox(n,s),t=dojo.position(n,true);var w=Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL,b.w/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx=e.pageX-t.x,ry=e.pageY-t.y,dx=0,dy=0;if(dojo.isWebKit||dojo.isOpera){rx+=dojo.body().scrollLeft,ry+=dojo.body().scrollTop;}if(rx>0&&rx<b.w){if(rx<w){dx=-w;}else{if(rx>b.w-w){dx=w;}}}if(ry>0&&ry<b.h){if(ry<h){dy=-h;}else{if(ry>b.h-h){dy=h;}}}var _5a=n.scrollLeft,_5b=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_5a!=n.scrollLeft||_5b!=n.scrollTop){return;}}}try{n=n.parentNode;}catch(x){n=null;}}dojo.dnd.autoScroll(e);};}if(!dojo._hasResource["dojo.dnd.Mover"]){dojo._hasResource["dojo.dnd.Mover"]=true;dojo.provide("dojo.dnd.Mover");dojo.declare("dojo.dnd.Mover",null,{constructor:function(_5c,e,_5d){this.node=dojo.byId(_5c);this.marginBox={l:e.pageX,t:e.pageY};this.mouseButton=e.button;var h=this.host=_5d,d=_5c.ownerDocument,_5e=dojo.connect(d,"onmousemove",this,"onFirstMove");this.events=[dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"onMouseUp"),dojo.connect(d,"ondragstart",dojo.stopEvent),dojo.connect(d.body,"onselectstart",dojo.stopEvent),_5e];if(h&&h.onMoveStart){h.onMoveStart(this);}},onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox;this.host.onMove(this,{l:m.l+e.pageX,t:m.t+e.pageY},e);dojo.stopEvent(e);},onMouseUp:function(e){if(dojo.isWebKit&&dojo.isMac&&this.mouseButton==2?e.button==0:this.mouseButton==e.button){this.destroy();}dojo.stopEvent(e);},onFirstMove:function(e){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left))||0;t=Math.round(parseFloat(s.top))||0;break;default:s.position="absolute";var m=dojo.marginBox(this.node);var b=dojo.doc.body;var bs=dojo.getComputedStyle(b);var bm=dojo._getMarginBox(b,bs);var bc=dojo._getContentBox(b,bs);l=m.l-(bc.l-bm.l);t=m.t-(bc.t-bm.t);break;}this.marginBox.l=l-this.marginBox.l;this.marginBox.t=t-this.marginBox.t;if(h&&h.onFirstMove){h.onFirstMove(this,e);}dojo.disconnect(this.events.pop());},destroy:function(){dojo.forEach(this.events,dojo.disconnect);var h=this.host;if(h&&h.onMoveStop){h.onMoveStop(this);}this.events=this.node=this.host=null;}});}if(!dojo._hasResource["dojo.dnd.Moveable"]){dojo._hasResource["dojo.dnd.Moveable"]=true;dojo.provide("dojo.dnd.Moveable");dojo.declare("dojo.dnd.Moveable",null,{handle:"",delay:0,skip:false,constructor:function(_5f,_60){this.node=dojo.byId(_5f);if(!_60){_60={};}this.handle=_60.handle?dojo.byId(_60.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_60.delay>0?_60.delay:0;this.skip=_60.skip;this.mover=_60.mover?_60.mover:dojo.dnd.Mover;this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown"),dojo.connect(this.handle,"ondragstart",this,"onSelectStart"),dojo.connect(this.handle,"onselectstart",this,"onSelectStart")];},markupFactory:function(_61,_62){return new dojo.dnd.Moveable(_62,_61);},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.events=this.node=this.handle=null;},onMouseDown:function(e){if(this.skip&&dojo.dnd.isFormElement(e)){return;}if(this.delay){this.events.push(dojo.connect(this.handle,"onmousemove",this,"onMouseMove"),dojo.connect(this.handle,"onmouseup",this,"onMouseUp"));this._lastX=e.pageX;this._lastY=e.pageY;}else{this.onDragDetected(e);}dojo.stopEvent(e);},onMouseMove:function(e){if(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay){this.onMouseUp(e);this.onDragDetected(e);}dojo.stopEvent(e);},onMouseUp:function(e){for(var i=0;i<2;++i){dojo.disconnect(this.events.pop());}dojo.stopEvent(e);},onSelectStart:function(e){if(!this.skip||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onDragDetected:function(e){new this.mover(this.node,e,this);},onMoveStart:function(_63){dojo.publish("/dnd/move/start",[_63]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_64){dojo.publish("/dnd/move/stop",[_64]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_65,e){},onMove:function(_66,_67,e){this.onMoving(_66,_67);var s=_66.node.style;s.left=_67.l+"px";s.top=_67.t+"px";this.onMoved(_66,_67);},onMoving:function(_68,_69){},onMoved:function(_6a,_6b){}});}if(!dojo._hasResource["dojo.dnd.move"]){dojo._hasResource["dojo.dnd.move"]=true;dojo.provide("dojo.dnd.move");dojo.declare("dojo.dnd.move.constrainedMoveable",dojo.dnd.Moveable,{constraints:function(){},within:false,markupFactory:function(_6c,_6d){return new dojo.dnd.move.constrainedMoveable(_6d,_6c);},constructor:function(_6e,_6f){if(!_6f){_6f={};}this.constraints=_6f.constraints;this.within=_6f.within;},onFirstMove:function(_70){var c=this.constraintBox=this.constraints.call(this,_70);c.r=c.l+c.w;c.b=c.t+c.h;if(this.within){var mb=dojo.marginBox(_70.node);c.r-=mb.w;c.b-=mb.h;}},onMove:function(_71,_72){var c=this.constraintBox,s=_71.node.style;s.left=(_72.l<c.l?c.l:c.r<_72.l?c.r:_72.l)+"px";s.top=(_72.t<c.t?c.t:c.b<_72.t?c.b:_72.t)+"px";}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_73,_74){return new dojo.dnd.move.boxConstrainedMoveable(_74,_73);},constructor:function(_75,_76){var box=_76&&_76.box;this.constraints=function(){return box;};}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_77,_78){return new dojo.dnd.move.parentConstrainedMoveable(_78,_77);},constructor:function(_79,_7a){var _7b=_7a&&_7a.area;this.constraints=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(_7b=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_7b=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_7b=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};}});dojo.dnd.move.constrainedMover=function(fun,_7c){dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");var _7d=function(_7e,e,_7f){dojo.dnd.Mover.call(this,_7e,e,_7f);};dojo.extend(_7d,dojo.dnd.Mover.prototype);dojo.extend(_7d,{onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox,c=this.constraintBox,l=m.l+e.pageX,t=m.t+e.pageY;l=l<c.l?c.l:c.r<l?c.r:l;t=t<c.t?c.t:c.b<t?c.b:t;this.host.onMove(this,{l:l,t:t});},onFirstMove:function(){dojo.dnd.Mover.prototype.onFirstMove.call(this);var c=this.constraintBox=fun.call(this);c.r=c.l+c.w;c.b=c.t+c.h;if(_7c){var mb=dojo.marginBox(this.node);c.r-=mb.w;c.b-=mb.h;}}});return _7d;};dojo.dnd.move.boxConstrainedMover=function(box,_80){dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");return dojo.dnd.move.constrainedMover(function(){return box;},_80);};dojo.dnd.move.parentConstrainedMover=function(_81,_82){dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");var fun=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(_81=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_81=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_81=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};return dojo.dnd.move.constrainedMover(fun,_82);};dojo.dnd.constrainedMover=dojo.dnd.move.constrainedMover;dojo.dnd.boxConstrainedMover=dojo.dnd.move.boxConstrainedMover;dojo.dnd.parentConstrainedMover=dojo.dnd.move.parentConstrainedMover;}if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){dojo._hasResource["dojo.dnd.TimedMoveable"]=true;dojo.provide("dojo.dnd.TimedMoveable");(function(){var _83=dojo.dnd.Moveable.prototype.onMove;dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(_84,_85){if(!_85){_85={};}if(_85.timeout&&typeof _85.timeout=="number"&&_85.timeout>=0){this.timeout=_85.timeout;}},markupFactory:function(_86,_87){return new dojo.dnd.TimedMoveable(_87,_86);},onMoveStop:function(_88){if(_88._timer){clearTimeout(_88._timer);_83.call(this,_88,_88._leftTop);}dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);},onMove:function(_89,_8a){_89._leftTop=_8a;if(!_89._timer){var _8b=this;_89._timer=setTimeout(function(){_89._timer=null;_83.call(_8b,_89,_89._leftTop);},this.timeout);}}});})();}if(!dojo._hasResource["dojo.fx.Toggler"]){dojo._hasResource["dojo.fx.Toggler"]=true;dojo.provide("dojo.fx.Toggler");dojo.declare("dojo.fx.Toggler",null,{node:null,showFunc:dojo.fadeIn,hideFunc:dojo.fadeOut,showDuration:200,hideDuration:200,constructor:function(_8c){var _8d=this;dojo.mixin(_8d,_8c);_8d.node=_8c.node;_8d._showArgs=dojo.mixin({},_8c);_8d._showArgs.node=_8d.node;_8d._showArgs.duration=_8d.showDuration;_8d.showAnim=_8d.showFunc(_8d._showArgs);_8d._hideArgs=dojo.mixin({},_8c);_8d._hideArgs.node=_8d.node;_8d._hideArgs.duration=_8d.hideDuration;_8d.hideAnim=_8d.hideFunc(_8d._hideArgs);dojo.connect(_8d.showAnim,"beforeBegin",dojo.hitch(_8d.hideAnim,"stop",true));dojo.connect(_8d.hideAnim,"beforeBegin",dojo.hitch(_8d.showAnim,"stop",true));},show:function(_8e){return this.showAnim.play(_8e||0);},hide:function(_8f){return this.hideAnim.play(_8f||0);}});}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");(function(){var d=dojo,_90={_fire:function(evt,_91){if(this[evt]){this[evt].apply(this,_91||[]);}return this;}};var _92=function(_93){this._index=-1;this._animations=_93||[];this._current=this._onAnimateCtx=this._onEndCtx=null;this.duration=0;d.forEach(this._animations,function(a){this.duration+=a.duration;if(a.delay){this.duration+=a.delay;}},this);};d.extend(_92,{_onAnimate:function(){this._fire("onAnimate",arguments);},_onEnd:function(){d.disconnect(this._onAnimateCtx);d.disconnect(this._onEndCtx);this._onAnimateCtx=this._onEndCtx=null;if(this._index+1==this._animations.length){this._fire("onEnd");}else{this._current=this._animations[++this._index];this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play(0,true);}},play:function(_94,_95){if(!this._current){this._current=this._animations[this._index=0];}if(!_95&&this._current.status()=="playing"){return this;}var _96=d.connect(this._current,"beforeBegin",this,function(){this._fire("beforeBegin");}),_97=d.connect(this._current,"onBegin",this,function(arg){this._fire("onBegin",arguments);}),_98=d.connect(this._current,"onPlay",this,function(arg){this._fire("onPlay",arguments);d.disconnect(_96);d.disconnect(_97);d.disconnect(_98);});if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");if(this._onEndCtx){d.disconnect(this._onEndCtx);}this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play.apply(this._current,arguments);return this;},pause:function(){if(this._current){var e=d.connect(this._current,"onPause",this,function(arg){this._fire("onPause",arguments);d.disconnect(e);});this._current.pause();}return this;},gotoPercent:function(_99,_9a){this.pause();var _9b=this.duration*_99;this._current=null;d.some(this._animations,function(a){if(a.duration<=_9b){this._current=a;return true;}_9b-=a.duration;return false;});if(this._current){this._current.gotoPercent(_9b/this._current.duration,_9a);}return this;},stop:function(_9c){if(this._current){if(_9c){for(;this._index+1<this._animations.length;++this._index){this._animations[this._index].stop(true);}this._current=this._animations[this._index];}var e=d.connect(this._current,"onStop",this,function(arg){this._fire("onStop",arguments);d.disconnect(e);});this._current.stop();}return this;},status:function(){return this._current?this._current.status():"stopped";},destroy:function(){if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}if(this._onEndCtx){d.disconnect(this._onEndCtx);}}});d.extend(_92,_90);dojo.fx.chain=function(_9d){return new _92(_9d);};var _9e=function(_9f){this._animations=_9f||[];this._connects=[];this._finished=0;this.duration=0;d.forEach(_9f,function(a){var _a0=a.duration;if(a.delay){_a0+=a.delay;}if(this.duration<_a0){this.duration=_a0;}this._connects.push(d.connect(a,"onEnd",this,"_onEnd"));},this);this._pseudoAnimation=new d.Animation({curve:[0,1],duration:this.duration});var _a1=this;d.forEach(["beforeBegin","onBegin","onPlay","onAnimate","onPause","onStop","onEnd"],function(evt){_a1._connects.push(d.connect(_a1._pseudoAnimation,evt,function(){_a1._fire(evt,arguments);}));});};d.extend(_9e,{_doAction:function(_a2,_a3){d.forEach(this._animations,function(a){a[_a2].apply(a,_a3);});return this;},_onEnd:function(){if(++this._finished>this._animations.length){this._fire("onEnd");}},_call:function(_a4,_a5){var t=this._pseudoAnimation;t[_a4].apply(t,_a5);},play:function(_a6,_a7){this._finished=0;this._doAction("play",arguments);this._call("play",arguments);return this;},pause:function(){this._doAction("pause",arguments);this._call("pause",arguments);return this;},gotoPercent:function(_a8,_a9){var ms=this.duration*_a8;d.forEach(this._animations,function(a){a.gotoPercent(a.duration<ms?1:(ms/a.duration),_a9);});this._call("gotoPercent",arguments);return this;},stop:function(_aa){this._doAction("stop",arguments);this._call("stop",arguments);return this;},status:function(){return this._pseudoAnimation.status();},destroy:function(){d.forEach(this._connects,dojo.disconnect);}});d.extend(_9e,_90);dojo.fx.combine=function(_ab){return new _9e(_ab);};dojo.fx.wipeIn=function(_ac){var _ad=_ac.node=d.byId(_ac.node),s=_ad.style,o;var _ae=d.animateProperty(d.mixin({properties:{height:{start:function(){o=s.overflow;s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _af=d.style(_ad,"height");return Math.max(_af,1);}},end:function(){return _ad.scrollHeight;}}}},_ac));d.connect(_ae,"onEnd",function(){s.height="auto";s.overflow=o;});return _ae;};dojo.fx.wipeOut=function(_b0){var _b1=_b0.node=d.byId(_b0.node),s=_b1.style,o;var _b2=d.animateProperty(d.mixin({properties:{height:{end:1}}},_b0));d.connect(_b2,"beforeBegin",function(){o=s.overflow;s.overflow="hidden";s.display="";});d.connect(_b2,"onEnd",function(){s.overflow=o;s.height="auto";s.display="none";});return _b2;};dojo.fx.slideTo=function(_b3){var _b4=_b3.node=d.byId(_b3.node),top=null,_b5=null;var _b6=(function(n){return function(){var cs=d.getComputedStyle(n);var pos=cs.position;top=(pos=="absolute"?n.offsetTop:parseInt(cs.top)||0);_b5=(pos=="absolute"?n.offsetLeft:parseInt(cs.left)||0);if(pos!="absolute"&&pos!="relative"){var ret=d.position(n,true);top=ret.y;_b5=ret.x;n.style.position="absolute";n.style.top=top+"px";n.style.left=_b5+"px";}};})(_b4);_b6();var _b7=d.animateProperty(d.mixin({properties:{top:_b3.top||0,left:_b3.left||0}},_b3));d.connect(_b7,"beforeBegin",_b7,_b6);return _b7;};})();}if(!dojo._hasResource["dijit.form._FormMixin"]){dojo._hasResource["dijit.form._FormMixin"]=true;dojo.provide("dijit.form._FormMixin");dojo.declare("dijit.form._FormMixin",null,{reset:function(){dojo.forEach(this.getDescendants(),function(_b8){if(_b8.reset){_b8.reset();}});},validate:function(){var _b9=false;return dojo.every(dojo.map(this.getDescendants(),function(_ba){_ba._hasBeenBlurred=true;var _bb=_ba.disabled||!_ba.validate||_ba.validate();if(!_bb&&!_b9){dojo.window.scrollIntoView(_ba.containerNode||_ba.domNode);_ba.focus();_b9=true;}return _bb;}),function(_bc){return _bc;});},setValues:function(val){dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(obj){var map={};dojo.forEach(this.getDescendants(),function(_bd){if(!_bd.name){return;}var _be=map[_bd.name]||(map[_bd.name]=[]);_be.push(_bd);});for(var _bf in map){if(!map.hasOwnProperty(_bf)){continue;}var _c0=map[_bf],_c1=dojo.getObject(_bf,false,obj);if(_c1===undefined){continue;}if(!dojo.isArray(_c1)){_c1=[_c1];}if(typeof _c0[0].checked=="boolean"){dojo.forEach(_c0,function(w,i){w.set("value",dojo.indexOf(_c1,w.value)!=-1);});}else{if(_c0[0].multiple){_c0[0].set("value",_c1);}else{dojo.forEach(_c0,function(w,i){w.set("value",_c1[i]);});}}}},getValues:function(){dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_getValueAttr:function(){var obj={};dojo.forEach(this.getDescendants(),function(_c2){var _c3=_c2.name;if(!_c3||_c2.disabled){return;}var _c4=_c2.get("value");if(typeof _c2.checked=="boolean"){if(/Radio/.test(_c2.declaredClass)){if(_c4!==false){dojo.setObject(_c3,_c4,obj);}else{_c4=dojo.getObject(_c3,false,obj);if(_c4===undefined){dojo.setObject(_c3,null,obj);}}}else{var ary=dojo.getObject(_c3,false,obj);if(!ary){ary=[];dojo.setObject(_c3,ary,obj);}if(_c4!==false){ary.push(_c4);}}}else{var _c5=dojo.getObject(_c3,false,obj);if(typeof _c5!="undefined"){if(dojo.isArray(_c5)){_c5.push(_c4);}else{dojo.setObject(_c3,[_c5,_c4],obj);}}else{dojo.setObject(_c3,_c4,obj);}}});return obj;},isValid:function(){this._invalidWidgets=dojo.filter(this.getDescendants(),function(_c6){return !_c6.disabled&&_c6.isValid&&!_c6.isValid();});return !this._invalidWidgets.length;},onValidStateChange:function(_c7){},_widgetChange:function(_c8){var _c9=this._lastValidState;if(!_c8||this._lastValidState===undefined){_c9=this.isValid();if(this._lastValidState===undefined){this._lastValidState=_c9;}}else{if(_c8.isValid){this._invalidWidgets=dojo.filter(this._invalidWidgets||[],function(w){return (w!=_c8);},this);if(!_c8.isValid()&&!_c8.get("disabled")){this._invalidWidgets.push(_c8);}_c9=(this._invalidWidgets.length===0);}}if(_c9!==this._lastValidState){this._lastValidState=_c9;this.onValidStateChange(_c9);}},connectChildren:function(){dojo.forEach(this._changeConnections,dojo.hitch(this,"disconnect"));var _ca=this;var _cb=(this._changeConnections=[]);dojo.forEach(dojo.filter(this.getDescendants(),function(_cc){return _cc.validate;}),function(_cd){_cb.push(_ca.connect(_cd,"validate",dojo.hitch(_ca,"_widgetChange",_cd)));_cb.push(_ca.connect(_cd,"_setDisabledAttr",dojo.hitch(_ca,"_widgetChange",_cd)));});this._widgetChange(null);},startup:function(){this.inherited(arguments);this._changeConnections=[];this.connectChildren();}});}if(!dojo._hasResource["dijit._DialogMixin"]){dojo._hasResource["dijit._DialogMixin"]=true;dojo.provide("dijit._DialogMixin");dojo.declare("dijit._DialogMixin",null,{attributeMap:dijit._Widget.prototype.attributeMap,execute:function(_ce){},onCancel:function(){},onExecute:function(){},_onSubmit:function(){this.onExecute();this.execute(this.get("value"));},_getFocusItems:function(_cf){var _d0=dijit._getTabNavigable(dojo.byId(_cf));this._firstFocusItem=_d0.lowest||_d0.first||_cf;this._lastFocusItem=_d0.last||_d0.highest||this._firstFocusItem;if(dojo.isMoz&&this._firstFocusItem.tagName.toLowerCase()=="input"&&dojo.getNodeProp(this._firstFocusItem,"type").toLowerCase()=="file"){dojo.attr(_cf,"tabIndex","0");this._firstFocusItem=_cf;}}});}if(!dojo._hasResource["dijit.DialogUnderlay"]){dojo._hasResource["dijit.DialogUnderlay"]=true;dojo.provide("dijit.DialogUnderlay");dojo.declare("dijit.DialogUnderlay",[dijit._Widget,dijit._Templated],{templateString:"<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",dialogId:"","class":"",attributeMap:{id:"domNode"},_setDialogIdAttr:function(id){dojo.attr(this.node,"id",id+"_underlay");},_setClassAttr:function(_d1){this.node.className="dijitDialogUnderlay "+_d1;},postCreate:function(){dojo.body().appendChild(this.domNode);},layout:function(){var is=this.node.style,os=this.domNode.style;os.display="none";var _d2=dojo.window.getBox();os.top=_d2.t+"px";os.left=_d2.l+"px";is.width=_d2.w+"px";is.height=_d2.h+"px";os.display="block";},show:function(){this.domNode.style.display="block";this.layout();this.bgIframe=new dijit.BackgroundIframe(this.domNode);},hide:function(){this.bgIframe.destroy();this.domNode.style.display="none";},uninitialize:function(){if(this.bgIframe){this.bgIframe.destroy();}this.inherited(arguments);}});}if(!dojo._hasResource["dojo.html"]){dojo._hasResource["dojo.html"]=true;dojo.provide("dojo.html");(function(){var _d3=0,d=dojo;dojo.html._secureForInnerHtml=function(_d4){return _d4.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");};dojo.html._emptyNode=dojo.empty;dojo.html._setNodeContent=function(_d5,_d6){d.empty(_d5);if(_d6){if(typeof _d6=="string"){_d6=d._toDom(_d6,_d5.ownerDocument);}if(!_d6.nodeType&&d.isArrayLike(_d6)){for(var _d7=_d6.length,i=0;i<_d6.length;i=_d7==_d6.length?i+1:0){d.place(_d6[i],_d5,"last");}}else{d.place(_d6,_d5,"last");}}return _d5;};dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,constructor:function(_d8,_d9){dojo.mixin(this,_d8||{});_d9=this.node=dojo.byId(this.node||_d9);if(!this.id){this.id=["Setter",(_d9)?_d9.id||_d9.tagName:"",_d3++].join("_");}},set:function(_da,_db){if(undefined!==_da){this.content=_da;}if(_db){this._mixin(_db);}this.onBegin();this.setContent();this.onEnd();return this.node;},setContent:function(){var _dc=this.node;if(!_dc){throw new Error(this.declaredClass+": setContent given no node");}try{_dc=dojo.html._setNodeContent(_dc,this.content);}catch(e){var _dd=this.onContentError(e);try{_dc.innerHTML=_dd;}catch(e){console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);}}this.node=_dc;},empty:function(){if(this.parseResults&&this.parseResults.length){dojo.forEach(this.parseResults,function(w){if(w.destroy){w.destroy();}});delete this.parseResults;}dojo.html._emptyNode(this.node);},onBegin:function(){var _de=this.content;if(dojo.isString(_de)){if(this.cleanContent){_de=dojo.html._secureForInnerHtml(_de);}if(this.extractContent){var _df=_de.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_df){_de=_df[1];}}}this.empty();this.content=_de;return this.node;},onEnd:function(){if(this.parseContent){this._parse();}return this.node;},tearDown:function(){delete this.parseResults;delete this.node;delete this.content;},onContentError:function(err){return "Error occured setting content: "+err;},_mixin:function(_e0){var _e1={},key;for(key in _e0){if(key in _e1){continue;}this[key]=_e0[key];}},_parse:function(){var _e2=this.node;try{this.parseResults=dojo.parser.parse({rootNode:_e2,dir:this.dir,lang:this.lang});}catch(e){this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);}},_onError:function(_e3,err,_e4){var _e5=this["on"+_e3+"Error"].call(this,err);if(_e4){console.error(_e4,err);}else{if(_e5){dojo.html._setNodeContent(this.node,_e5,true);}}}});dojo.html.set=function(_e6,_e7,_e8){if(undefined==_e7){console.warn("dojo.html.set: no cont argument provided, using empty string");_e7="";}if(!_e8){return dojo.html._setNodeContent(_e6,_e7,true);}else{var op=new dojo.html._ContentSetter(dojo.mixin(_e8,{content:_e7,node:_e6}));return op.set();}};})();}if(!dojo._hasResource["dijit.layout.ContentPane"]){dojo._hasResource["dijit.layout.ContentPane"]=true;dojo.provide("dijit.layout.ContentPane");dojo.declare("dijit.layout.ContentPane",dijit._Widget,{href:"",extractContent:false,parseOnLoad:true,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,baseClass:"dijitContentPane",doLayout:true,ioArgs:{},isContainer:true,isLayoutContainer:true,onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),postMixInProperties:function(){this.inherited(arguments);var _e9=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_e9);this.errorMessage=dojo.string.substitute(this.errorMessage,_e9);if(!this.href&&this.srcNodeRef&&this.srcNodeRef.innerHTML){this.isLoaded=true;}},buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},postCreate:function(){this.domNode.title="";if(!dojo.attr(this.domNode,"role")){dijit.setWaiRole(this.domNode,"group");}dojo.addClass(this.domNode,this.baseClass);},startup:function(){if(this._started){return;}var _ea=dijit._Contained.prototype.getParent.call(this);this._childOfLayoutWidget=_ea&&_ea.isLayoutContainer;this._needLayout=!this._childOfLayoutWidget;if(this.isLoaded){dojo.forEach(this.getChildren(),function(_eb){_eb.startup();});}if(this._isShown()||this.preload){this._onShow();}this.inherited(arguments);},_checkIfSingleChild:function(){var _ec=dojo.query("> *",this.containerNode).filter(function(_ed){return _ed.tagName!=="SCRIPT";}),_ee=_ec.filter(function(_ef){return dojo.hasAttr(_ef,"dojoType")||dojo.hasAttr(_ef,"widgetId");}),_f0=dojo.filter(_ee.map(dijit.byNode),function(_f1){return _f1&&_f1.domNode&&_f1.resize;});if(_ec.length==_ee.length&&_f0.length==1){this._singleChild=_f0[0];}else{delete this._singleChild;}dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);},setHref:function(_f2){dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");return this.set("href",_f2);},_setHrefAttr:function(_f3){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.href=_f3;if(this._created&&(this.preload||this._isShown())){this._load();}else{this._hrefChanged=true;}return this.onLoadDeferred;},setContent:function(_f4){dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated.  Use set('content', ...) instead.","","2.0");this.set("content",_f4);},_setContentAttr:function(_f5){this.href="";this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._setContent(_f5||"");this._isDownloaded=false;return this.onLoadDeferred;},_getContentAttr:function(){return this.containerNode.innerHTML;},cancel:function(){if(this._xhrDfd&&(this._xhrDfd.fired==-1)){this._xhrDfd.cancel();}delete this._xhrDfd;this.onLoadDeferred=null;},uninitialize:function(){if(this._beingDestroyed){this.cancel();}this.inherited(arguments);},destroyRecursive:function(_f6){if(this._beingDestroyed){return;}this.inherited(arguments);},resize:function(_f7,_f8){if(!this._wasShown){this._onShow();}this._resizeCalled=true;if(_f7){dojo.marginBox(this.domNode,_f7);}var cn=this.containerNode;if(cn===this.domNode){var mb=_f8||{};dojo.mixin(mb,_f7||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(cn),mb);}this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);}else{this._contentBox=dojo.contentBox(cn);}this._layoutChildren();},_isShown:function(){if(this._childOfLayoutWidget){if(this._resizeCalled&&"open" in this){return this.open;}return this._resizeCalled;}else{if("open" in this){return this.open;}else{var _f9=this.domNode;return (_f9.style.display!="none")&&(_f9.style.visibility!="hidden")&&!dojo.hasClass(_f9,"dijitHidden");}}},_onShow:function(){if(this.href){if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){this.refresh();}}else{if(!this._childOfLayoutWidget&&this._needLayout){this._layoutChildren();}}this.inherited(arguments);this._wasShown=true;},refresh:function(){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._load();return this.onLoadDeferred;},_load:function(){this._setContent(this.onDownloadStart(),true);var _fa=this;var _fb={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};if(dojo.isObject(this.ioArgs)){dojo.mixin(_fb,this.ioArgs);}var _fc=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_fb));_fc.addCallback(function(_fd){try{_fa._isDownloaded=true;_fa._setContent(_fd,false);_fa.onDownloadEnd();}catch(err){_fa._onError("Content",err);}delete _fa._xhrDfd;return _fd;});_fc.addErrback(function(err){if(!_fc.canceled){_fa._onError("Download",err);}delete _fa._xhrDfd;return err;});delete this._hrefChanged;},_onLoadHandler:function(_fe){this.isLoaded=true;try{this.onLoadDeferred.callback(_fe);this.onLoad(_fe);}catch(e){console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);}},_onUnloadHandler:function(){this.isLoaded=false;try{this.onUnload();}catch(e){console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);}},destroyDescendants:function(){if(this.isLoaded){this._onUnloadHandler();}var _ff=this._contentSetter;dojo.forEach(this.getChildren(),function(_100){if(_100.destroyRecursive){_100.destroyRecursive();}});if(_ff){dojo.forEach(_ff.parseResults,function(_101){if(_101.destroyRecursive&&_101.domNode&&_101.domNode.parentNode==dojo.body()){_101.destroyRecursive();}});delete _ff.parseResults;}dojo.html._emptyNode(this.containerNode);delete this._singleChild;},_setContent:function(cont,_102){this.destroyDescendants();var _103=this._contentSetter;if(!(_103&&_103 instanceof dojo.html._ContentSetter)){_103=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){var _104=this.onContentError(e);try{this.containerNode.innerHTML=_104;}catch(e){console.error("Fatal "+this.id+" could not change content due to "+e.message,e);}})});}var _105=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,dir:this.dir,lang:this.lang},this._contentSetterParams||{});dojo.mixin(_103,_105);_103.set((dojo.isObject(cont)&&cont.domNode)?cont.domNode:cont);delete this._contentSetterParams;if(!_102){dojo.forEach(this.getChildren(),function(_106){if(!this.parseOnLoad||_106.getParent){_106.startup();}},this);this._scheduleLayout();this._onLoadHandler(cont);}},_onError:function(type,err,_107){this.onLoadDeferred.errback(err);var _108=this["on"+type+"Error"].call(this,err);if(_107){console.error(_107,err);}else{if(_108){this._setContent(_108,true);}}},_scheduleLayout:function(){if(this._isShown()){this._layoutChildren();}else{this._needLayout=true;}},_layoutChildren:function(){if(this.doLayout){this._checkIfSingleChild();}if(this._singleChild&&this._singleChild.resize){var cb=this._contentBox||dojo.contentBox(this.containerNode);this._singleChild.resize({w:cb.w,h:cb.h});}else{dojo.forEach(this.getChildren(),function(_109){if(_109.resize){_109.resize();}});}delete this._needLayout;},onLoad:function(data){},onUnload:function(){},onDownloadStart:function(){return this.loadingMessage;},onContentError:function(_10a){},onDownloadError:function(_10b){return this.errorMessage;},onDownloadEnd:function(){}});}if(!dojo._hasResource["dijit.TooltipDialog"]){dojo._hasResource["dijit.TooltipDialog"]=true;dojo.provide("dijit.TooltipDialog");dojo.declare("dijit.TooltipDialog",[dijit.layout.ContentPane,dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin],{title:"",doLayout:false,autofocus:true,baseClass:"dijitTooltipDialog",_firstFocusItem:null,_lastFocusItem:null,templateString:dojo.cache("dijit","templates/TooltipDialog.html","<div waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presentation\"></div>\n</div>\n"),postCreate:function(){this.inherited(arguments);this.connect(this.containerNode,"onkeypress","_onKey");this.containerNode.title=this.title;},orient:function(node,_10c,_10d){var c=this._currentOrientClass;if(c){dojo.removeClass(this.domNode,c);}c="dijitTooltipAB"+(_10d.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_10d.charAt(0)=="T"?"Below":"Above");dojo.addClass(this.domNode,c);this._currentOrientClass=c;},onOpen:function(pos){this.orient(this.domNode,pos.aroundCorner,pos.corner);this._onShow();if(this.autofocus){this._getFocusItems(this.containerNode);dijit.focus(this._firstFocusItem);}},onClose:function(){this.onHide();},_onKey:function(evt){var node=evt.target;var dk=dojo.keys;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.containerNode);}var _10e=(this._firstFocusItem==this._lastFocusItem);if(evt.charOrCode==dk.ESCAPE){setTimeout(dojo.hitch(this,"onCancel"),0);dojo.stopEvent(evt);}else{if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_10e){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_10e){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{if(evt.charOrCode===dk.TAB){evt.stopPropagation();}}}}}});}if(!dojo._hasResource["dijit.Dialog"]){dojo._hasResource["dijit.Dialog"]=true;dojo.provide("dijit.Dialog");dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){var _10f=dojo.i18n.getLocalization("dijit","common");dojo.mixin(this,_10f);this.inherited(arguments);},postCreate:function(){dojo.style(this.domNode,{display:"none",position:"absolute"});dojo.body().appendChild(this.domNode);this.inherited(arguments);this.connect(this,"onExecute","hide");this.connect(this,"onCancel","hide");this._modalconnects=[];},onLoad:function(){this._position();if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this.inherited(arguments);},_endDrag:function(e){if(e&&e.node&&e.node===this.domNode){this._relativePosition=dojo.position(e.node);}},_setup:function(){var node=this.domNode;if(this.titleBar&&this.draggable){this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(node,{handle:this.titleBar}):new dojo.dnd.Moveable(node,{handle:this.titleBar,timeout:0});dojo.subscribe("/dnd/move/stop",this,"_endDrag");}else{dojo.addClass(node,"dijitDialogFixed");}this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){return s+"_underlay";}).join(" ")};this._fadeIn=dojo.fadeIn({node:node,duration:this.duration,beforeBegin:dojo.hitch(this,function(){var _110=dijit._underlay;if(!_110){_110=dijit._underlay=new dijit.DialogUnderlay(this.underlayAttrs);}else{_110.set(this.underlayAttrs);}var ds=dijit._dialogStack,_111=948+ds.length*2;if(ds.length==1){_110.show();}dojo.style(dijit._underlay.domNode,"zIndex",_111);dojo.style(this.domNode,"zIndex",_111+1);}),onEnd:dojo.hitch(this,function(){if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}})});this._fadeOut=dojo.fadeOut({node:node,duration:this.duration,onEnd:dojo.hitch(this,function(){node.style.display="none";var ds=dijit._dialogStack;if(ds.length==0){dijit._underlay.hide();}else{dojo.style(dijit._underlay.domNode,"zIndex",948+ds.length*2);dijit._underlay.set(ds[ds.length-1].underlayAttrs);}if(this.refocus){var _112=this._savedFocus;if(ds.length>0){var pd=ds[ds.length-1];if(!dojo.isDescendant(_112.node,pd.domNode)){pd._getFocusItems(pd.domNode);_112=pd._firstFocusItem;}}dijit.focus(_112);}})});},uninitialize:function(){var _113=false;if(this._fadeIn&&this._fadeIn.status()=="playing"){_113=true;this._fadeIn.stop();}if(this._fadeOut&&this._fadeOut.status()=="playing"){_113=true;this._fadeOut.stop();}if((this.open||_113)&&!dijit._underlay._destroyed){dijit._underlay.hide();}if(this._moveable){this._moveable.destroy();}this.inherited(arguments);},_size:function(){this._checkIfSingleChild();if(this._singleChild){if(this._singleChildOriginalStyle){this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;}delete this._singleChildOriginalStyle;}else{dojo.style(this.containerNode,{width:"auto",height:"auto"});}var mb=dojo.marginBox(this.domNode);var _114=dojo.window.getBox();if(mb.w>=_114.w||mb.h>=_114.h){var w=Math.min(mb.w,Math.floor(_114.w*0.75)),h=Math.min(mb.h,Math.floor(_114.h*0.75));if(this._singleChild&&this._singleChild.resize){this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;this._singleChild.resize({w:w,h:h});}else{dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});}}else{if(this._singleChild&&this._singleChild.resize){this._singleChild.resize();}}},_position:function(){if(!dojo.hasClass(dojo.body(),"dojoMove")){var node=this.domNode,_115=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(node),l=Math.floor(_115.l+(p?p.x:(_115.w-bb.w)/2)),t=Math.floor(_115.t+(p?p.y:(_115.h-bb.h)/2));dojo.style(node,{left:l+"px",top:t+"px"});}},_onKey:function(evt){var ds=dijit._dialogStack;if(ds[ds.length-1]!=this){return;}if(evt.charOrCode){var dk=dojo.keys;var node=evt.target;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.domNode);}var _116=(this._firstFocusItem==this._lastFocusItem);if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_116){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_116){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{while(node){if(node==this.domNode||dojo.hasClass(node,"dijitPopup")){if(evt.charOrCode==dk.ESCAPE){this.onCancel();}else{return;}}node=node.parentNode;}if(evt.charOrCode!==dk.TAB){dojo.stopEvent(evt);}else{if(!dojo.isOpera){try{this._firstFocusItem.focus();}catch(e){}}}}}}},show:function(){if(this.open){return;}if(!this._alreadyInitialized){this._setup();this._alreadyInitialized=true;}if(this._fadeOut.status()=="playing"){this._fadeOut.stop();}this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));this._modalconnects.push(dojo.connect(window,"onresize",this,function(){var _117=dojo.window.getBox();if(!this._oldViewport||_117.h!=this._oldViewport.h||_117.w!=this._oldViewport.w){this.layout();this._oldViewport=_117;}}));this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));dojo.style(this.domNode,{opacity:0,display:""});this.open=true;this._onShow();this._size();this._position();dijit._dialogStack.push(this);this._fadeIn.play();this._savedFocus=dijit.getFocus(this);},hide:function(){var ds=dijit._dialogStack;if(!this._alreadyInitialized||this!=ds[ds.length-1]){return;}if(this._fadeIn.status()=="playing"){this._fadeIn.stop();}ds.pop();this._fadeOut.play();if(this._scrollConnected){this._scrollConnected=false;}dojo.forEach(this._modalconnects,dojo.disconnect);this._modalconnects=[];if(this._relativePosition){delete this._relativePosition;}this.open=false;this.onHide();},layout:function(){if(this.domNode.style.display!="none"){if(dijit._underlay){dijit._underlay.layout();}this._position();}},destroy:function(){dojo.forEach(this._modalconnects,dojo.disconnect);if(this.refocus&&this.open){setTimeout(dojo.hitch(dijit,"focus",this._savedFocus),25);}this.inherited(arguments);}});dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});dijit._dialogStack=[];}if(!dojo._hasResource["dijit._editor.selection"]){dojo._hasResource["dijit._editor.selection"]=true;dojo.provide("dijit._editor.selection");dojo.mixin(dijit._editor.selection,{getType:function(){if(dojo.isIE){return dojo.doc.selection.type.toLowerCase();}else{var _118="text";var oSel;try{oSel=dojo.global.getSelection();}catch(e){}if(oSel&&oSel.rangeCount==1){var _119=oSel.getRangeAt(0);if((_119.startContainer==_119.endContainer)&&((_119.endOffset-_119.startOffset)==1)&&(_119.startContainer.nodeType!=3)){_118="control";}}return _118;}},getSelectedText:function(){if(dojo.isIE){if(dijit._editor.selection.getType()=="control"){return null;}return dojo.doc.selection.createRange().text;}else{var _11a=dojo.global.getSelection();if(_11a){return _11a.toString();}}return "";},getSelectedHtml:function(){if(dojo.isIE){if(dijit._editor.selection.getType()=="control"){return null;}return dojo.doc.selection.createRange().htmlText;}else{var _11b=dojo.global.getSelection();if(_11b&&_11b.rangeCount){var i;var html="";for(i=0;i<_11b.rangeCount;i++){var frag=_11b.getRangeAt(i).cloneContents();var div=dojo.doc.createElement("div");div.appendChild(frag);html+=div.innerHTML;}return html;}return null;}},getSelectedElement:function(){if(dijit._editor.selection.getType()=="control"){if(dojo.isIE){var _11c=dojo.doc.selection.createRange();if(_11c&&_11c.item){return dojo.doc.selection.createRange().item(0);}}else{var _11d=dojo.global.getSelection();return _11d.anchorNode.childNodes[_11d.anchorOffset];}}return null;},getParentElement:function(){if(dijit._editor.selection.getType()=="control"){var p=this.getSelectedElement();if(p){return p.parentNode;}}else{if(dojo.isIE){var r=dojo.doc.selection.createRange();r.collapse(true);return r.parentElement();}else{var _11e=dojo.global.getSelection();if(_11e){var node=_11e.anchorNode;while(node&&(node.nodeType!=1)){node=node.parentNode;}return node;}}}return null;},hasAncestorElement:function(_11f){return this.getAncestorElement.apply(this,arguments)!=null;},getAncestorElement:function(_120){var node=this.getSelectedElement()||this.getParentElement();return this.getParentOfType(node,arguments);},isTag:function(node,tags){if(node&&node.tagName){var _121=node.tagName.toLowerCase();for(var i=0;i<tags.length;i++){var _122=String(tags[i]).toLowerCase();if(_121==_122){return _122;}}}return "";},getParentOfType:function(node,tags){while(node){if(this.isTag(node,tags).length){return node;}node=node.parentNode;}return null;},collapse:function(_123){if(window.getSelection){var _124=dojo.global.getSelection();if(_124.removeAllRanges){if(_123){_124.collapseToStart();}else{_124.collapseToEnd();}}else{_124.collapse(_123);}}else{if(dojo.isIE){var _125=dojo.doc.selection.createRange();_125.collapse(_123);_125.select();}}},remove:function(){var sel=dojo.doc.selection;if(dojo.isIE){if(sel.type.toLowerCase()!="none"){sel.clear();}return sel;}else{sel=dojo.global.getSelection();sel.deleteFromDocument();return sel;}},selectElementChildren:function(_126,_127){var win=dojo.global;var doc=dojo.doc;var _128;_126=dojo.byId(_126);if(doc.selection&&dojo.isIE&&dojo.body().createTextRange){_128=_126.ownerDocument.body.createTextRange();_128.moveToElementText(_126);if(!_127){try{_128.select();}catch(e){}}}else{if(win.getSelection){var _129=dojo.global.getSelection();if(dojo.isOpera){if(_129.rangeCount){_128=_129.getRangeAt(0);}else{_128=doc.createRange();}_128.setStart(_126,0);_128.setEnd(_126,(_126.nodeType==3)?_126.length:_126.childNodes.length);_129.addRange(_128);}else{_129.selectAllChildren(_126);}}}},selectElement:function(_12a,_12b){var _12c;var doc=dojo.doc;var win=dojo.global;_12a=dojo.byId(_12a);if(dojo.isIE&&dojo.body().createTextRange){try{_12c=dojo.body().createControlRange();_12c.addElement(_12a);if(!_12b){_12c.select();}}catch(e){this.selectElementChildren(_12a,_12b);}}else{if(dojo.global.getSelection){var _12d=win.getSelection();_12c=doc.createRange();if(_12d.removeAllRanges){if(dojo.isOpera){if(_12d.getRangeAt(0)){_12c=_12d.getRangeAt(0);}}_12c.selectNode(_12a);_12d.removeAllRanges();_12d.addRange(_12c);}}}},inSelection:function(node){if(node){var _12e;var doc=dojo.doc;var _12f;if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.rangeCount>0){_12f=sel.getRangeAt(0);}if(_12f&&_12f.compareBoundaryPoints&&doc.createRange){try{_12e=doc.createRange();_12e.setStart(node,0);if(_12f.compareBoundaryPoints(_12f.START_TO_END,_12e)===1){return true;}}catch(e){}}}else{if(doc.selection){_12f=doc.selection.createRange();try{_12e=node.ownerDocument.body.createControlRange();if(_12e){_12e.addElement(node);}}catch(e1){try{_12e=node.ownerDocument.body.createTextRange();_12e.moveToElementText(node);}catch(e2){}}if(_12f&&_12e){if(_12f.compareEndPoints("EndToStart",_12e)===1){return true;}}}}}return false;}});}if(!dojo._hasResource["dijit._editor.range"]){dojo._hasResource["dijit._editor.range"]=true;dojo.provide("dijit._editor.range");dijit.range={};dijit.range.getIndex=function(node,_130){var ret=[],retR=[];var stop=_130;var _131=node;var _132,n;while(node!=stop){var i=0;_132=node.parentNode;while((n=_132.childNodes[i++])){if(n===node){--i;break;}}ret.unshift(i);retR.unshift(i-_132.childNodes.length);node=_132;}if(ret.length>0&&_131.nodeType==3){n=_131.previousSibling;while(n&&n.nodeType==3){ret[ret.length-1]--;n=n.previousSibling;}n=_131.nextSibling;while(n&&n.nodeType==3){retR[retR.length-1]++;n=n.nextSibling;}}return {o:ret,r:retR};};dijit.range.getNode=function(_133,_134){if(!dojo.isArray(_133)||_133.length==0){return _134;}var node=_134;dojo.every(_133,function(i){if(i>=0&&i<node.childNodes.length){node=node.childNodes[i];}else{node=null;return false;}return true;});return node;};dijit.range.getCommonAncestor=function(n1,n2,root){root=root||n1.ownerDocument.body;var _135=function(n){var as=[];while(n){as.unshift(n);if(n!==root){n=n.parentNode;}else{break;}}return as;};var n1as=_135(n1);var n2as=_135(n2);var m=Math.min(n1as.length,n2as.length);var com=n1as[0];for(var i=1;i<m;i++){if(n1as[i]===n2as[i]){com=n1as[i];}else{break;}}return com;};dijit.range.getAncestor=function(node,_136,root){root=root||node.ownerDocument.body;while(node&&node!==root){var name=node.nodeName.toUpperCase();if(_136.test(name)){return node;}node=node.parentNode;}return null;};dijit.range.BlockTagNames=/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;dijit.range.getBlockAncestor=function(node,_137,root){root=root||node.ownerDocument.body;_137=_137||dijit.range.BlockTagNames;var _138=null,_139;while(node&&node!==root){var name=node.nodeName.toUpperCase();if(!_138&&_137.test(name)){_138=node;}if(!_139&&(/^(?:BODY|TD|TH|CAPTION)$/).test(name)){_139=node;}node=node.parentNode;}return {blockNode:_138,blockContainer:_139||node.ownerDocument.body};};dijit.range.atBeginningOfContainer=function(_13a,node,_13b){var _13c=false;var _13d=(_13b==0);if(!_13d&&node.nodeType==3){if(/^[\s\xA0]+$/.test(node.nodeValue.substr(0,_13b))){_13d=true;}}if(_13d){var _13e=node;_13c=true;while(_13e&&_13e!==_13a){if(_13e.previousSibling){_13c=false;break;}_13e=_13e.parentNode;}}return _13c;};dijit.range.atEndOfContainer=function(_13f,node,_140){var _141=false;var _142=(_140==(node.length||node.childNodes.length));if(!_142&&node.nodeType==3){if(/^[\s\xA0]+$/.test(node.nodeValue.substr(_140))){_142=true;}}if(_142){var _143=node;_141=true;while(_143&&_143!==_13f){if(_143.nextSibling){_141=false;break;}_143=_143.parentNode;}}return _141;};dijit.range.adjacentNoneTextNode=function(_144,next){var node=_144;var len=(0-_144.length)||0;var prop=next?"nextSibling":"previousSibling";while(node){if(node.nodeType!=3){break;}len+=node.length;node=node[prop];}return [node,len];};dijit.range._w3c=Boolean(window["getSelection"]);dijit.range.create=function(win){if(dijit.range._w3c){return (win||dojo.global).document.createRange();}else{return new dijit.range.W3CRange;}};dijit.range.getSelection=function(win,_145){if(dijit.range._w3c){return win.getSelection();}else{var s=new dijit.range.ie.selection(win);if(!_145){s._getCurrentSelection();}return s;}};if(!dijit.range._w3c){dijit.range.ie={cachedSelection:{},selection:function(win){this._ranges=[];this.addRange=function(r,_146){this._ranges.push(r);if(!_146){r._select();}this.rangeCount=this._ranges.length;};this.removeAllRanges=function(){this._ranges=[];this.rangeCount=0;};var _147=function(){var r=win.document.selection.createRange();var type=win.document.selection.type.toUpperCase();if(type=="CONTROL"){return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));}else{return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));}};this.getRangeAt=function(i){return this._ranges[i];};this._getCurrentSelection=function(){this.removeAllRanges();var r=_147();if(r){this.addRange(r,true);}};},decomposeControlRange:function(_148){var _149=_148.item(0),_14a=_148.item(_148.length-1);var _14b=_149.parentNode,_14c=_14a.parentNode;var _14d=dijit.range.getIndex(_149,_14b).o;var _14e=dijit.range.getIndex(_14a,_14c).o+1;return [_14b,_14d,_14c,_14e];},getEndPoint:function(_14f,end){var _150=_14f.duplicate();_150.collapse(!end);var _151="EndTo"+(end?"End":"Start");var _152=_150.parentElement();var _153,_154,_155;if(_152.childNodes.length>0){dojo.every(_152.childNodes,function(node,i){var _156;if(node.nodeType!=3){_150.moveToElementText(node);if(_150.compareEndPoints(_151,_14f)>0){if(_155&&_155.nodeType==3){_153=_155;_156=true;}else{_153=_152;_154=i;return false;}}else{if(i==_152.childNodes.length-1){_153=_152;_154=_152.childNodes.length;return false;}}}else{if(i==_152.childNodes.length-1){_153=node;_156=true;}}if(_156&&_153){var _157=dijit.range.adjacentNoneTextNode(_153)[0];if(_157){_153=_157.nextSibling;}else{_153=_152.firstChild;}var _158=dijit.range.adjacentNoneTextNode(_153);_157=_158[0];var _159=_158[1];if(_157){_150.moveToElementText(_157);_150.collapse(false);}else{_150.moveToElementText(_152);}_150.setEndPoint(_151,_14f);_154=_150.text.length-_159;return false;}_155=node;return true;});}else{_153=_152;_154=0;}if(!end&&_153.nodeType==1&&_154==_153.childNodes.length){var _15a=_153.nextSibling;if(_15a&&_15a.nodeType==3){_153=_15a;_154=0;}}return [_153,_154];},setEndPoint:function(_15b,_15c,_15d){var _15e=_15b.duplicate(),node,len;if(_15c.nodeType!=3){if(_15d>0){node=_15c.childNodes[_15d-1];if(node){if(node.nodeType==3){_15c=node;_15d=node.length;}else{if(node.nextSibling&&node.nextSibling.nodeType==3){_15c=node.nextSibling;_15d=0;}else{_15e.moveToElementText(node.nextSibling?node:_15c);var _15f=node.parentNode;var _160=_15f.insertBefore(node.ownerDocument.createTextNode(" "),node.nextSibling);_15e.collapse(false);_15f.removeChild(_160);}}}}else{_15e.moveToElementText(_15c);_15e.collapse(true);}}if(_15c.nodeType==3){var _161=dijit.range.adjacentNoneTextNode(_15c);var _162=_161[0];len=_161[1];if(_162){_15e.moveToElementText(_162);_15e.collapse(false);if(_162.contentEditable!="inherit"){len++;}}else{_15e.moveToElementText(_15c.parentNode);_15e.collapse(true);}_15d+=len;if(_15d>0){if(_15e.move("character",_15d)!=_15d){console.error("Error when moving!");}}}return _15e;},decomposeTextRange:function(_163){var _164=dijit.range.ie.getEndPoint(_163);var _165=_164[0],_166=_164[1];var _167=_164[0],_168=_164[1];if(_163.htmlText.length){if(_163.htmlText==_163.text){_168=_166+_163.text.length;}else{_164=dijit.range.ie.getEndPoint(_163,true);_167=_164[0],_168=_164[1];}}return [_165,_166,_167,_168];},setRange:function(_169,_16a,_16b,_16c,_16d,_16e){var _16f=dijit.range.ie.setEndPoint(_169,_16a,_16b);_169.setEndPoint("StartToStart",_16f);if(!_16e){var end=dijit.range.ie.setEndPoint(_169,_16c,_16d);}_169.setEndPoint("EndToEnd",end||_16f);return _169;}};dojo.declare("dijit.range.W3CRange",null,{constructor:function(){if(arguments.length>0){this.setStart(arguments[0][0],arguments[0][1]);this.setEnd(arguments[0][2],arguments[0][3]);}else{this.commonAncestorContainer=null;this.startContainer=null;this.startOffset=0;this.endContainer=null;this.endOffset=0;this.collapsed=true;}},_updateInternal:function(){if(this.startContainer!==this.endContainer){this.commonAncestorContainer=dijit.range.getCommonAncestor(this.startContainer,this.endContainer);}else{this.commonAncestorContainer=this.startContainer;}this.collapsed=(this.startContainer===this.endContainer)&&(this.startOffset==this.endOffset);},setStart:function(node,_170){_170=parseInt(_170);if(this.startContainer===node&&this.startOffset==_170){return;}delete this._cachedBookmark;this.startContainer=node;this.startOffset=_170;if(!this.endContainer){this.setEnd(node,_170);}else{this._updateInternal();}},setEnd:function(node,_171){_171=parseInt(_171);if(this.endContainer===node&&this.endOffset==_171){return;}delete this._cachedBookmark;this.endContainer=node;this.endOffset=_171;if(!this.startContainer){this.setStart(node,_171);}else{this._updateInternal();}},setStartAfter:function(node,_172){this._setPoint("setStart",node,_172,1);},setStartBefore:function(node,_173){this._setPoint("setStart",node,_173,0);},setEndAfter:function(node,_174){this._setPoint("setEnd",node,_174,1);},setEndBefore:function(node,_175){this._setPoint("setEnd",node,_175,0);},_setPoint:function(what,node,_176,ext){var _177=dijit.range.getIndex(node,node.parentNode).o;this[what](node.parentNode,_177.pop()+ext);},_getIERange:function(){var r=(this._body||this.endContainer.ownerDocument.body).createTextRange();dijit.range.ie.setRange(r,this.startContainer,this.startOffset,this.endContainer,this.endOffset,this.collapsed);return r;},getBookmark:function(body){this._getIERange();return this._cachedBookmark;},_select:function(){var r=this._getIERange();r.select();},deleteContents:function(){var r=this._getIERange();r.pasteHTML("");this.endContainer=this.startContainer;this.endOffset=this.startOffset;this.collapsed=true;},cloneRange:function(){var r=new dijit.range.W3CRange([this.startContainer,this.startOffset,this.endContainer,this.endOffset]);r._body=this._body;return r;},detach:function(){this._body=null;this.commonAncestorContainer=null;this.startContainer=null;this.startOffset=0;this.endContainer=null;this.endOffset=0;this.collapsed=true;}});}}if(!dojo._hasResource["dijit._editor.html"]){dojo._hasResource["dijit._editor.html"]=true;dojo.provide("dijit._editor.html");dijit._editor.escapeXml=function(str,_178){str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");if(!_178){str=str.replace(/'/gm,"&#39;");}return str;};dijit._editor.getNodeHtml=function(node){var _179;switch(node.nodeType){case 1:var _17a=node.nodeName.toLowerCase();if(!_17a||_17a.charAt(0)=="/"){return "";}_179="<"+_17a;var _17b=[];var attr;if(dojo.isIE&&node.outerHTML){var s=node.outerHTML;s=s.substr(0,s.indexOf(">")).replace(/(['"])[^"']*\1/g,"");var reg=/(\b\w+)\s?=/g;var m,key;while((m=reg.exec(s))){key=m[1];if(key.substr(0,3)!="_dj"){if(key=="src"||key=="href"){if(node.getAttribute("_djrealurl")){_17b.push([key,node.getAttribute("_djrealurl")]);continue;}}var val,_17c;switch(key){case "style":val=node.style.cssText.toLowerCase();break;case "class":val=node.className;break;case "width":if(_17a==="img"){_17c=/width=(\S+)/i.exec(s);if(_17c){val=_17c[1];}break;}case "height":if(_17a==="img"){_17c=/height=(\S+)/i.exec(s);if(_17c){val=_17c[1];}break;}default:val=node.getAttribute(key);}if(val!=null){_17b.push([key,val.toString()]);}}}}else{var i=0;while((attr=node.attributes[i++])){var n=attr.name;if(n.substr(0,3)!="_dj"){var v=attr.value;if(n=="src"||n=="href"){if(node.getAttribute("_djrealurl")){v=node.getAttribute("_djrealurl");}}_17b.push([n,v]);}}}_17b.sort(function(a,b){return a[0]<b[0]?-1:(a[0]==b[0]?0:1);});var j=0;while((attr=_17b[j++])){_179+=" "+attr[0]+"=\""+(dojo.isString(attr[1])?dijit._editor.escapeXml(attr[1],true):attr[1])+"\"";}if(_17a==="script"){_179+=">"+node.innerHTML+"</"+_17a+">";}else{if(node.childNodes.length){_179+=">"+dijit._editor.getChildrenHtml(node)+"</"+_17a+">";}else{switch(_17a){case "br":case "hr":case "img":case "input":case "base":case "meta":case "area":case "basefont":_179+=" />";break;default:_179+="></"+_17a+">";}}}break;case 4:case 3:_179=dijit._editor.escapeXml(node.nodeValue,true);break;case 8:_179="<!--"+dijit._editor.escapeXml(node.nodeValue,true)+"-->";break;default:_179="<!-- Element not recognized - Type: "+node.nodeType+" Name: "+node.nodeName+"-->";}return _179;};dijit._editor.getChildrenHtml=function(dom){var out="";if(!dom){return out;}var _17d=dom["childNodes"]||dom;var _17e=!dojo.isIE||_17d!==dom;var node,i=0;while((node=_17d[i++])){if(!_17e||node.parentNode==dom){out+=dijit._editor.getNodeHtml(node);}}return out;};}if(!dojo._hasResource["dijit._editor.RichText"]){dojo._hasResource["dijit._editor.RichText"]=true;dojo.provide("dijit._editor.RichText");if(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"]){if(dojo._postLoad){(function(){var _17f=dojo.doc.createElement("textarea");_17f.id=dijit._scopeName+"._editor.RichText.savedContent";dojo.style(_17f,{display:"none",position:"absolute",top:"-100px",height:"3px",width:"3px"});dojo.body().appendChild(_17f);})();}else{try{dojo.doc.write("<textarea id=\""+dijit._scopeName+"._editor.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");}catch(e){}}}dojo.declare("dijit._editor.RichText",[dijit._Widget,dijit._CssStateMixin],{constructor:function(_180){this.contentPreFilters=[];this.contentPostFilters=[];this.contentDomPreFilters=[];this.contentDomPostFilters=[];this.editingAreaStyleSheets=[];this.events=[].concat(this.events);this._keyHandlers={};this.contentPreFilters.push(dojo.hitch(this,"_preFixUrlAttributes"));if(dojo.isMoz){this.contentPreFilters.push(this._normalizeFontStyle);this.contentPostFilters.push(this._removeMozBogus);}if(dojo.isWebKit){this.contentPreFilters.push(this._removeWebkitBogus);this.contentPostFilters.push(this._removeWebkitBogus);}if(dojo.isIE){this.contentPostFilters.push(this._normalizeFontStyle);}if(_180&&dojo.isString(_180.value)){this.value=_180.value;}this.onLoadDeferred=new dojo.Deferred();},baseClass:"dijitEditor",inheritWidth:false,focusOnLoad:false,name:"",styleSheets:"",_content:"",height:"300px",minHeight:"1em",isClosed:true,isLoaded:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,isTabIndent:false,disableSpellCheck:false,postCreate:function(){if("textarea"==this.domNode.tagName.toLowerCase()){console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");}this.inherited(arguments);dojo.publish(dijit._scopeName+"._editor.RichText::init",[this]);this.open();this.setupDefaultShortcuts();},setupDefaultShortcuts:function(){var exec=dojo.hitch(this,function(cmd,arg){return function(){return !this.execCommand(cmd,arg);};});var _181={b:exec("bold"),i:exec("italic"),u:exec("underline"),a:exec("selectall"),s:function(){this.save(true);},m:function(){this.isTabIndent=!this.isTabIndent;},"1":exec("formatblock","h1"),"2":exec("formatblock","h2"),"3":exec("formatblock","h3"),"4":exec("formatblock","h4"),"\\":exec("insertunorderedlist")};if(!dojo.isIE){_181.Z=exec("redo");}for(var key in _181){this.addKeyHandler(key,true,false,_181[key]);}},events:["onKeyPress","onKeyDown","onKeyUp","onClick"],captureEvents:[],_editorCommandsLocalized:false,_localizeEditorCommands:function(){if(this._editorCommandsLocalized){return;}this._editorCommandsLocalized=true;var _182=["div","p","pre","h1","h2","h3","h4","h5","h6","ol","ul","address"];var _183="",_184,i=0;while((_184=_182[i++])){if(_184.charAt(1)!="l"){_183+="<"+_184+"><span>content</span></"+_184+"><br/>";}else{_183+="<"+_184+"><li>content</li></"+_184+"><br/>";}}var div=dojo.doc.createElement("div");dojo.style(div,{position:"absolute",top:"-2000px"});dojo.doc.body.appendChild(div);div.innerHTML=_183;var node=div.firstChild;while(node){dijit._editor.selection.selectElement(node.firstChild);dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[node.firstChild]);var _185=node.tagName.toLowerCase();this._local2NativeFormatNames[_185]=document.queryCommandValue("formatblock");this._native2LocalFormatNames[this._local2NativeFormatNames[_185]]=_185;node=node.nextSibling.nextSibling;}dojo.body().removeChild(div);},open:function(_186){if(!this.onLoadDeferred||this.onLoadDeferred.fired>=0){this.onLoadDeferred=new dojo.Deferred();}if(!this.isClosed){this.close();}dojo.publish(dijit._scopeName+"._editor.RichText::open",[this]);this._content="";if(arguments.length==1&&_186.nodeName){this.domNode=_186;}var dn=this.domNode;var html;if(dojo.isString(this.value)){html=this.value;delete this.value;dn.innerHTML="";}else{if(dn.nodeName&&dn.nodeName.toLowerCase()=="textarea"){var ta=(this.textarea=dn);this.name=ta.name;html=ta.value;dn=this.domNode=dojo.doc.createElement("div");dn.setAttribute("widgetId",this.id);ta.removeAttribute("widgetId");dn.cssText=ta.cssText;dn.className+=" "+ta.className;dojo.place(dn,ta,"before");var _187=dojo.hitch(this,function(){dojo.style(ta,{display:"block",position:"absolute",top:"-1000px"});if(dojo.isIE){var s=ta.style;this.__overflow=s.overflow;s.overflow="hidden";}});if(dojo.isIE){setTimeout(_187,10);}else{_187();}if(ta.form){dojo.connect(ta.form,"onsubmit",this,function(){ta.value=this.getValue();});}}else{html=dijit._editor.getChildrenHtml(dn);dn.innerHTML="";}}var _188=dojo.contentBox(dn);this._oldHeight=_188.h;this._oldWidth=_188.w;this.savedContent=html;if(dn.nodeName&&dn.nodeName=="LI"){dn.innerHTML=" <br>";}this.header=dn.ownerDocument.createElement("div");dn.appendChild(this.header);this.editingArea=dn.ownerDocument.createElement("div");dn.appendChild(this.editingArea);this.footer=dn.ownerDocument.createElement("div");dn.appendChild(this.footer);if(this.name!==""&&(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"])){var _189=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");if(_189.value!==""){var _18a=_189.value.split(this._SEPARATOR),i=0,dat;while((dat=_18a[i++])){var data=dat.split(":");if(data[0]==this.name){html=data[1];_18a.splice(i,1);break;}}}dojo.addOnUnload(dojo.hitch(this,"_saveContent"));}this.isClosed=false;var ifr=(this.editorObject=this.iframe=dojo.doc.createElement("iframe"));ifr.id=this.id+"_iframe";this._iframeSrc=this._getIframeDocTxt();ifr.style.border="none";ifr.style.width="100%";if(this._layoutMode){ifr.style.height="100%";}else{if(dojo.isIE>=7){if(this.height){ifr.style.height=this.height;}if(this.minHeight){ifr.style.minHeight=this.minHeight;}}else{ifr.style.height=this.height?this.height:this.minHeight;}}ifr.frameBorder=0;ifr._loadFunc=dojo.hitch(this,function(win){this.window=win;this.document=this.window.document;if(dojo.isIE){this._localizeEditorCommands();}this.onLoad(html);});var s="javascript:parent."+dijit._scopeName+".byId(\""+this.id+"\")._iframeSrc";ifr.setAttribute("src",s);this.editingArea.appendChild(ifr);if(dn.nodeName=="LI"){dn.lastChild.style.marginTop="-1.2em";}dojo.addClass(this.domNode,this.baseClass);},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_getIframeDocTxt:function(){var _18b=dojo.getComputedStyle(this.domNode);var html="";var _18c=true;if(dojo.isIE||(!this.height&&!dojo.isMoz)){html="<div id='dijitEditorBody'></div>";_18c=false;}else{if(dojo.isMoz){this._cursorToStart=true;html="&nbsp;";}}var font=[_18b.fontWeight,_18b.fontSize,_18b.fontFamily].join(" ");var _18d=_18b.lineHeight;if(_18d.indexOf("px")>=0){_18d=parseFloat(_18d)/parseFloat(_18b.fontSize);}else{if(_18d.indexOf("em")>=0){_18d=parseFloat(_18d);}else{_18d="normal";}}var _18e="";var self=this;this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig,function(_18f){_18f=_18f.replace(/^;/ig,"")+";";var s=_18f.split(":")[0];if(s){s=dojo.trim(s);s=s.toLowerCase();var i;var sC="";for(i=0;i<s.length;i++){var c=s.charAt(i);switch(c){case "-":i++;c=s.charAt(i).toUpperCase();default:sC+=c;}}dojo.style(self.domNode,sC,"");}_18e+=_18f+";";});var _190=dojo.query("label[for=\""+this.id+"\"]");return [this.isLeftToRight()?"<html>\n<head>\n":"<html dir='rtl'>\n<head>\n",(dojo.isMoz&&_190.length?"<title>"+_190[0].innerHTML+"</title>\n":""),"<meta http-equiv='Content-Type' content='text/html'>\n","<style>\n","\tbody,html {\n","\t\tbackground:transparent;\n","\t\tpadding: 1px 0 0 0;\n","\t\tmargin: -1px 0 0 0;\n",((dojo.isWebKit)?"\t\twidth: 100%;\n":""),((dojo.isWebKit)?"\t\theight: 100%;\n":""),"\t}\n","\tbody{\n","\t\ttop:0px;\n","\t\tleft:0px;\n","\t\tright:0px;\n","\t\tfont:",font,";\n",((this.height||dojo.isOpera)?"":"\t\tposition: fixed;\n"),"\t\tmin-height:",this.minHeight,";\n","\t\tline-height:",_18d,";\n","\t}\n","\tp{ margin: 1em 0; }\n",(!_18c&&!this.height?"\tbody,html {overflow-y: hidden;}\n":""),"\t#dijitEditorBody{overflow-x: auto; overflow-y:"+(this.height?"auto;":"hidden;")+"}\n","\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n","\tli{ min-height:1.2em; }\n","</style>\n",this._applyEditingAreaStyleSheets(),"\n","</head>\n<body ",(_18c?"id='dijitEditorBody' ":""),"onload='frameElement._loadFunc(window,document)' style='"+_18e+"'>",html,"</body>\n</html>"].join("");},_applyEditingAreaStyleSheets:function(){var _191=[];if(this.styleSheets){_191=this.styleSheets.split(";");this.styleSheets="";}_191=_191.concat(this.editingAreaStyleSheets);this.editingAreaStyleSheets=[];var text="",i=0,url;while((url=_191[i++])){var _192=(new dojo._Url(dojo.global.location,url)).toString();this.editingAreaStyleSheets.push(_192);text+="<link rel=\"stylesheet\" type=\"text/css\" href=\""+_192+"\"/>";}return text;},addStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}if(dojo.indexOf(this.editingAreaStyleSheets,url)>-1){return;}this.editingAreaStyleSheets.push(url);this.onLoadDeferred.addCallback(dojo.hitch(function(){if(this.document.createStyleSheet){this.document.createStyleSheet(url);}else{var head=this.document.getElementsByTagName("head")[0];var _193=this.document.createElement("link");_193.rel="stylesheet";_193.type="text/css";_193.href=url;head.appendChild(_193);}}));},removeStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}var _194=dojo.indexOf(this.editingAreaStyleSheets,url);if(_194==-1){return;}delete this.editingAreaStyleSheets[_194];dojo.withGlobal(this.window,"query",dojo,["link:[href=\""+url+"\"]"]).orphan();},disabled:false,_mozSettingProps:{"styleWithCSS":false},_setDisabledAttr:function(_195){this.disabled=_195;if(!this.isLoaded){return;}_195=!!_195;if(dojo.isIE||dojo.isWebKit||dojo.isOpera){var _196=dojo.isIE&&(this.isLoaded||!this.focusOnLoad);if(_196){this.editNode.unselectable="on";}this.editNode.contentEditable=!_195;if(_196){var _197=this;setTimeout(function(){_197.editNode.unselectable="off";},0);}}else{try{this.document.designMode=(_195?"off":"on");}catch(e){return;}if(!_195&&this._mozSettingProps){var ps=this._mozSettingProps;for(var n in ps){if(ps.hasOwnProperty(n)){try{this.document.execCommand(n,false,ps[n]);}catch(e2){}}}}}this._disabledOK=true;},onLoad:function(html){if(!this.window.__registeredWindow){this.window.__registeredWindow=true;this._iframeRegHandle=dijit.registerIframe(this.iframe);}if(!dojo.isIE&&(this.height||dojo.isMoz)){this.editNode=this.document.body;}else{this.editNode=this.document.body.firstChild;var _198=this;if(dojo.isIE){var _199=(this.tabStop=dojo.doc.createElement("<div tabIndex=-1>"));this.editingArea.appendChild(_199);this.iframe.onfocus=function(){_198.editNode.setActive();};}}this.focusNode=this.editNode;var _19a=this.events.concat(this.captureEvents);var ap=this.iframe?this.document:this.editNode;dojo.forEach(_19a,function(item){this.connect(ap,item.toLowerCase(),item);},this);if(dojo.isIE){this.connect(this.document,"onmousedown","_onIEMouseDown");this.editNode.style.zoom=1;}else{this.connect(this.document,"onmousedown",function(){delete this._cursorToStart;});}if(dojo.isWebKit){this._webkitListener=this.connect(this.document,"onmouseup","onDisplayChanged");}if(dojo.isIE){try{this.document.execCommand("RespectVisibilityInDesign",true,null);}catch(e){}}this.isLoaded=true;this.set("disabled",this.disabled);var _19b=dojo.hitch(this,function(){this.setValue(html);if(this.onLoadDeferred){this.onLoadDeferred.callback(true);}this.onDisplayChanged();if(this.focusOnLoad){dojo.addOnLoad(dojo.hitch(this,function(){setTimeout(dojo.hitch(this,"focus"),this.updateInterval);}));}this.savedContent=this.getValue(true);});if(this.setValueDeferred){this.setValueDeferred.addCallback(_19b);}else{_19b();}},onKeyDown:function(e){if(e.keyCode===dojo.keys.TAB&&this.isTabIndent){dojo.stopEvent(e);if(this.queryCommandEnabled((e.shiftKey?"outdent":"indent"))){this.execCommand((e.shiftKey?"outdent":"indent"));}}if(dojo.isIE){if(e.keyCode==dojo.keys.TAB&&!this.isTabIndent){if(e.shiftKey&&!e.ctrlKey&&!e.altKey){this.iframe.focus();}else{if(!e.shiftKey&&!e.ctrlKey&&!e.altKey){this.tabStop.focus();}}}else{if(e.keyCode===dojo.keys.BACKSPACE&&this.document.selection.type==="Control"){dojo.stopEvent(e);this.execCommand("delete");}else{if((65<=e.keyCode&&e.keyCode<=90)||(e.keyCode>=37&&e.keyCode<=40)){e.charCode=e.keyCode;this.onKeyPress(e);}}}}return true;},onKeyUp:function(e){return;},setDisabled:function(_19c){dojo.deprecated("dijit.Editor::setDisabled is deprecated","use dijit.Editor::attr(\"disabled\",boolean) instead",2);this.set("disabled",_19c);},_setValueAttr:function(_19d){this.setValue(_19d);},_setDisableSpellCheckAttr:function(_19e){if(this.document){dojo.attr(this.document.body,"spellcheck",!_19e);}else{this.onLoadDeferred.addCallback(dojo.hitch(this,function(){dojo.attr(this.document.body,"spellcheck",!_19e);}));}this.disableSpellCheck=_19e;},onKeyPress:function(e){var c=(e.keyChar&&e.keyChar.toLowerCase())||e.keyCode,_19f=this._keyHandlers[c],args=arguments;if(_19f&&!e.altKey){dojo.some(_19f,function(h){if(!(h.shift^e.shiftKey)&&!(h.ctrl^(e.ctrlKey||e.metaKey))){if(!h.handler.apply(this,args)){e.preventDefault();}return true;}},this);}if(!this._onKeyHitch){this._onKeyHitch=dojo.hitch(this,"onKeyPressed");}setTimeout(this._onKeyHitch,1);return true;},addKeyHandler:function(key,ctrl,_1a0,_1a1){if(!dojo.isArray(this._keyHandlers[key])){this._keyHandlers[key]=[];}this._keyHandlers[key].push({shift:_1a0||false,ctrl:ctrl||false,handler:_1a1});},onKeyPressed:function(){this.onDisplayChanged();},onClick:function(e){this.onDisplayChanged(e);},_onIEMouseDown:function(e){if(!this._focused&&!this.disabled){this.focus();}},_onBlur:function(e){this.inherited(arguments);var _1a2=this.getValue(true);if(_1a2!=this.savedContent){this.onChange(_1a2);this.savedContent=_1a2;}},_onFocus:function(e){if(!this.disabled){if(!this._disabledOK){this.set("disabled",false);}this.inherited(arguments);}},blur:function(){if(!dojo.isIE&&this.window.document.documentElement&&this.window.document.documentElement.focus){this.window.document.documentElement.focus();}else{if(dojo.doc.body.focus){dojo.doc.body.focus();}}},focus:function(){if(!this.isLoaded){this.focusOnLoad=true;return;}if(this._cursorToStart){delete this._cursorToStart;if(this.editNode.childNodes){this.placeCursorAtStart();return;}}if(!dojo.isIE){dijit.focus(this.iframe);}else{if(this.editNode&&this.editNode.focus){this.iframe.fireEvent("onfocus",document.createEventObject());}}},updateInterval:200,_updateTimer:null,onDisplayChanged:function(e){if(this._updateTimer){clearTimeout(this._updateTimer);}if(!this._updateHandler){this._updateHandler=dojo.hitch(this,"onNormalizedDisplayChanged");}this._updateTimer=setTimeout(this._updateHandler,this.updateInterval);},onNormalizedDisplayChanged:function(){delete this._updateTimer;},onChange:function(_1a3){},_normalizeCommand:function(cmd,_1a4){var _1a5=cmd.toLowerCase();if(_1a5=="formatblock"){if(dojo.isSafari&&_1a4===undefined){_1a5="heading";}}else{if(_1a5=="hilitecolor"&&!dojo.isMoz){_1a5="backcolor";}}return _1a5;},_qcaCache:{},queryCommandAvailable:function(_1a6){var ca=this._qcaCache[_1a6];if(ca!==undefined){return ca;}return (this._qcaCache[_1a6]=this._queryCommandAvailable(_1a6));},_queryCommandAvailable:function(_1a7){var ie=1;var _1a8=1<<1;var _1a9=1<<2;var _1aa=1<<3;var _1ab=1<<4;function _1ac(_1ad){return {ie:Boolean(_1ad&ie),mozilla:Boolean(_1ad&_1a8),webkit:Boolean(_1ad&_1a9),webkit420:Boolean(_1ad&_1ab),opera:Boolean(_1ad&_1aa)};};var _1ae=null;switch(_1a7.toLowerCase()){case "bold":case "italic":case "underline":case "subscript":case "superscript":case "fontname":case "fontsize":case "forecolor":case "hilitecolor":case "justifycenter":case "justifyfull":case "justifyleft":case "justifyright":case "delete":case "selectall":case "toggledir":_1ae=_1ac(_1a8|ie|_1a9|_1aa);break;case "createlink":case "unlink":case "removeformat":case "inserthorizontalrule":case "insertimage":case "insertorderedlist":case "insertunorderedlist":case "indent":case "outdent":case "formatblock":case "inserthtml":case "undo":case "redo":case "strikethrough":case "tabindent":_1ae=_1ac(_1a8|ie|_1aa|_1ab);break;case "blockdirltr":case "blockdirrtl":case "dirltr":case "dirrtl":case "inlinedirltr":case "inlinedirrtl":_1ae=_1ac(ie);break;case "cut":case "copy":case "paste":_1ae=_1ac(ie|_1a8|_1ab);break;case "inserttable":_1ae=_1ac(_1a8|ie);break;case "insertcell":case "insertcol":case "insertrow":case "deletecells":case "deletecols":case "deleterows":case "mergecells":case "splitcell":_1ae=_1ac(ie|_1a8);break;default:return false;}return (dojo.isIE&&_1ae.ie)||(dojo.isMoz&&_1ae.mozilla)||(dojo.isWebKit&&_1ae.webkit)||(dojo.isWebKit>420&&_1ae.webkit420)||(dojo.isOpera&&_1ae.opera);},execCommand:function(_1af,_1b0){var _1b1;this.focus();_1af=this._normalizeCommand(_1af,_1b0);if(_1b0!==undefined){if(_1af=="heading"){throw new Error("unimplemented");}else{if((_1af=="formatblock")&&dojo.isIE){_1b0="<"+_1b0+">";}}}var _1b2="_"+_1af+"Impl";if(this[_1b2]){_1b1=this[_1b2](_1b0);}else{_1b0=arguments.length>1?_1b0:null;if(_1b0||_1af!="createlink"){_1b1=this.document.execCommand(_1af,false,_1b0);}}this.onDisplayChanged();return _1b1;},queryCommandEnabled:function(_1b3){if(this.disabled||!this._disabledOK){return false;}_1b3=this._normalizeCommand(_1b3);if(dojo.isMoz||dojo.isWebKit){if(_1b3=="unlink"){return this._sCall("hasAncestorElement",["a"]);}else{if(_1b3=="inserttable"){return true;}}}if(dojo.isWebKit){if(_1b3=="copy"){_1b3="cut";}else{if(_1b3=="paste"){return true;}}}var elem=dojo.isIE?this.document.selection.createRange():this.document;try{return elem.queryCommandEnabled(_1b3);}catch(e){return false;}},queryCommandState:function(_1b4){if(this.disabled||!this._disabledOK){return false;}_1b4=this._normalizeCommand(_1b4);try{return this.document.queryCommandState(_1b4);}catch(e){return false;}},queryCommandValue:function(_1b5){if(this.disabled||!this._disabledOK){return false;}var r;_1b5=this._normalizeCommand(_1b5);if(dojo.isIE&&_1b5=="formatblock"){r=this._native2LocalFormatNames[this.document.queryCommandValue(_1b5)];}else{if(dojo.isMoz&&_1b5==="hilitecolor"){var _1b6;try{_1b6=this.document.queryCommandValue("styleWithCSS");}catch(e){_1b6=false;}this.document.execCommand("styleWithCSS",false,true);r=this.document.queryCommandValue(_1b5);this.document.execCommand("styleWithCSS",false,_1b6);}else{r=this.document.queryCommandValue(_1b5);}}return r;},_sCall:function(name,args){return dojo.withGlobal(this.window,name,dijit._editor.selection,args);},placeCursorAtStart:function(){this.focus();var _1b7=false;if(dojo.isMoz){var _1b8=this.editNode.firstChild;while(_1b8){if(_1b8.nodeType==3){if(_1b8.nodeValue.replace(/^\s+|\s+$/g,"").length>0){_1b7=true;this._sCall("selectElement",[_1b8]);break;}}else{if(_1b8.nodeType==1){_1b7=true;var tg=_1b8.tagName?_1b8.tagName.toLowerCase():"";if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){this._sCall("selectElement",[_1b8]);}else{this._sCall("selectElementChildren",[_1b8]);}break;}}_1b8=_1b8.nextSibling;}}else{_1b7=true;this._sCall("selectElementChildren",[this.editNode]);}if(_1b7){this._sCall("collapse",[true]);}},placeCursorAtEnd:function(){this.focus();var _1b9=false;if(dojo.isMoz){var last=this.editNode.lastChild;while(last){if(last.nodeType==3){if(last.nodeValue.replace(/^\s+|\s+$/g,"").length>0){_1b9=true;this._sCall("selectElement",[last]);break;}}else{if(last.nodeType==1){_1b9=true;if(last.lastChild){this._sCall("selectElement",[last.lastChild]);}else{this._sCall("selectElement",[last]);}break;}}last=last.previousSibling;}}else{_1b9=true;this._sCall("selectElementChildren",[this.editNode]);}if(_1b9){this._sCall("collapse",[false]);}},getValue:function(_1ba){if(this.textarea){if(this.isClosed||!this.isLoaded){return this.textarea.value;}}return this._postFilterContent(null,_1ba);},_getValueAttr:function(){return this.getValue(true);},setValue:function(html){if(!this.isLoaded){this.onLoadDeferred.addCallback(dojo.hitch(this,function(){this.setValue(html);}));return;}this._cursorToStart=true;if(this.textarea&&(this.isClosed||!this.isLoaded)){this.textarea.value=html;}else{html=this._preFilterContent(html);var node=this.isClosed?this.domNode:this.editNode;if(!html&&dojo.isWebKit){html="&nbsp;";}node.innerHTML=html;this._preDomFilterContent(node);}this.onDisplayChanged();},replaceValue:function(html){if(this.isClosed){this.setValue(html);}else{if(this.window&&this.window.getSelection&&!dojo.isMoz){this.setValue(html);}else{if(this.window&&this.window.getSelection){html=this._preFilterContent(html);this.execCommand("selectall");if(!html){this._cursorToStart=true;html="&nbsp;";}this.execCommand("inserthtml",html);this._preDomFilterContent(this.editNode);}else{if(this.document&&this.document.selection){this.setValue(html);}}}}},_preFilterContent:function(html){var ec=html;dojo.forEach(this.contentPreFilters,function(ef){if(ef){ec=ef(ec);}});return ec;},_preDomFilterContent:function(dom){dom=dom||this.editNode;dojo.forEach(this.contentDomPreFilters,function(ef){if(ef&&dojo.isFunction(ef)){ef(dom);}},this);},_postFilterContent:function(dom,_1bb){var ec;if(!dojo.isString(dom)){dom=dom||this.editNode;if(this.contentDomPostFilters.length){if(_1bb){dom=dojo.clone(dom);}dojo.forEach(this.contentDomPostFilters,function(ef){dom=ef(dom);});}ec=dijit._editor.getChildrenHtml(dom);}else{ec=dom;}if(!dojo.trim(ec.replace(/^\xA0\xA0*/,"").replace(/\xA0\xA0*$/,"")).length){ec="";}dojo.forEach(this.contentPostFilters,function(ef){ec=ef(ec);});return ec;},_saveContent:function(e){var _1bc=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");if(_1bc.value){_1bc.value+=this._SEPARATOR;}_1bc.value+=this.name+":"+this.getValue(true);},escapeXml:function(str,_1bd){str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");if(!_1bd){str=str.replace(/'/gm,"&#39;");}return str;},getNodeHtml:function(node){dojo.deprecated("dijit.Editor::getNodeHtml is deprecated","use dijit._editor.getNodeHtml instead",2);return dijit._editor.getNodeHtml(node);},getNodeChildrenHtml:function(dom){dojo.deprecated("dijit.Editor::getNodeChildrenHtml is deprecated","use dijit._editor.getChildrenHtml instead",2);return dijit._editor.getChildrenHtml(dom);},close:function(save){if(this.isClosed){return false;}if(!arguments.length){save=true;}this._content=this.getValue();var _1be=(this.savedContent!=this._content);if(this.interval){clearInterval(this.interval);}if(this._webkitListener){this.disconnect(this._webkitListener);delete this._webkitListener;}if(dojo.isIE){this.iframe.onfocus=null;}this.iframe._loadFunc=null;if(this._iframeRegHandle){dijit.unregisterIframe(this._iframeRegHandle);delete this._iframeRegHandle;}if(this.textarea){var s=this.textarea.style;s.position="";s.left=s.top="";if(dojo.isIE){s.overflow=this.__overflow;this.__overflow=null;}this.textarea.value=save?this._content:this.savedContent;dojo.destroy(this.domNode);this.domNode=this.textarea;}else{this.domNode.innerHTML=save?this._content:this.savedContent;}delete this.iframe;dojo.removeClass(this.domNode,this.baseClass);this.isClosed=true;this.isLoaded=false;delete this.editNode;delete this.focusNode;if(this.window&&this.window._frameElement){this.window._frameElement=null;}this.window=null;this.document=null;this.editingArea=null;this.editorObject=null;return _1be;},destroy:function(){if(!this.isClosed){this.close(false);}this.inherited(arguments);},_removeMozBogus:function(html){return html.replace(/\stype="_moz"/gi,"").replace(/\s_moz_dirty=""/gi,"").replace(/_moz_resizing="(true|false)"/gi,"");},_removeWebkitBogus:function(html){html=html.replace(/\sclass="webkit-block-placeholder"/gi,"");html=html.replace(/\sclass="apple-style-span"/gi,"");return html;},_normalizeFontStyle:function(html){return html.replace(/<(\/)?strong([ \>])/gi,"<$1b$2").replace(/<(\/)?em([ \>])/gi,"<$1i$2");},_preFixUrlAttributes:function(html){return html.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2").replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2");},_inserthorizontalruleImpl:function(_1bf){if(dojo.isIE){return this._inserthtmlImpl("<hr>");}return this.document.execCommand("inserthorizontalrule",false,_1bf);},_unlinkImpl:function(_1c0){if((this.queryCommandEnabled("unlink"))&&(dojo.isMoz||dojo.isWebKit)){var a=this._sCall("getAncestorElement",["a"]);this._sCall("selectElement",[a]);return this.document.execCommand("unlink",false,null);}return this.document.execCommand("unlink",false,_1c0);},_hilitecolorImpl:function(_1c1){var _1c2;if(dojo.isMoz){this.document.execCommand("styleWithCSS",false,true);_1c2=this.document.execCommand("hilitecolor",false,_1c1);this.document.execCommand("styleWithCSS",false,false);}else{_1c2=this.document.execCommand("hilitecolor",false,_1c1);}return _1c2;},_backcolorImpl:function(_1c3){if(dojo.isIE){_1c3=_1c3?_1c3:null;}return this.document.execCommand("backcolor",false,_1c3);},_forecolorImpl:function(_1c4){if(dojo.isIE){_1c4=_1c4?_1c4:null;}return this.document.execCommand("forecolor",false,_1c4);},_inserthtmlImpl:function(_1c5){_1c5=this._preFilterContent(_1c5);var rv=true;if(dojo.isIE){var _1c6=this.document.selection.createRange();if(this.document.selection.type.toUpperCase()=="CONTROL"){var n=_1c6.item(0);while(_1c6.length){_1c6.remove(_1c6.item(0));}n.outerHTML=_1c5;}else{_1c6.pasteHTML(_1c5);}_1c6.select();}else{if(dojo.isMoz&&!_1c5.length){this._sCall("remove");}else{rv=this.document.execCommand("inserthtml",false,_1c5);}}return rv;},getHeaderHeight:function(){return this._getNodeChildrenHeight(this.header);},getFooterHeight:function(){return this._getNodeChildrenHeight(this.footer);},_getNodeChildrenHeight:function(node){var h=0;if(node&&node.childNodes){var i;for(i=0;i<node.childNodes.length;i++){var size=dojo.position(node.childNodes[i]);h+=size.h;}}return h;}});}if(!dojo._hasResource["dijit._KeyNavContainer"]){dojo._hasResource["dijit._KeyNavContainer"]=true;dojo.provide("dijit._KeyNavContainer");dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_1c7,_1c8){var _1c9=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_1c7,function(code){_1c9[code]=prev;});dojo.forEach(_1c8,function(code){_1c9[code]=next;});this.connect(this.domNode,"onkeypress","_onContainerKeypress");this.connect(this.domNode,"onfocus","_onContainerFocus");},startupKeyNavChildren:function(){dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));},addChild:function(_1ca,_1cb){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_1ca);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _1cc=this._getFirstFocusableChild();if(_1cc){this.focusChild(_1cc);}},focusNext:function(){var _1cd=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_1cd);},focusPrev:function(){var _1ce=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_1ce,true);},focusChild:function(_1cf,last){if(this.focusedChild&&_1cf!==this.focusedChild){this._onChildBlur(this.focusedChild);}_1cf.focus(last?"end":"start");this.focusedChild=_1cf;},_startupChild:function(_1d0){_1d0.set("tabIndex","-1");this.connect(_1d0,"_onFocus",function(){_1d0.set("tabIndex",this.tabIndex);});this.connect(_1d0,"_onBlur",function(){_1d0.set("tabIndex","-1");});},_onContainerFocus:function(evt){if(evt.target!==this.domNode){return;}this.focusFirstChild();dojo.attr(this.domNode,"tabIndex","-1");},_onBlur:function(evt){if(this.tabIndex){dojo.attr(this.domNode,"tabIndex",this.tabIndex);}this.inherited(arguments);},_onContainerKeypress:function(evt){if(evt.ctrlKey||evt.altKey){return;}var func=this._keyNavCodes[evt.charOrCode];if(func){func();dojo.stopEvent(evt);}},_onChildBlur:function(_1d1){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getNextFocusableChild:function(_1d2,dir){if(_1d2){_1d2=this._getSiblingOfChild(_1d2,dir);}var _1d3=this.getChildren();for(var i=0;i<_1d3.length;i++){if(!_1d2){_1d2=_1d3[(dir>0)?0:(_1d3.length-1)];}if(_1d2.isFocusable()){return _1d2;}_1d2=this._getSiblingOfChild(_1d2,dir);}return null;}});}if(!dojo._hasResource["dijit.ToolbarSeparator"]){dojo._hasResource["dijit.ToolbarSeparator"]=true;dojo.provide("dijit.ToolbarSeparator");dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\" waiRole=\"presentation\"></div>",postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Toolbar"]){dojo._hasResource["dijit.Toolbar"]=true;dojo.provide("dijit.Toolbar");dojo.declare("dijit.Toolbar",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{templateString:"<div class=\"dijit\" waiRole=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);this.inherited(arguments);},startup:function(){if(this._started){return;}this.startupKeyNavChildren();this.inherited(arguments);}});}if(!dojo._hasResource["dijit._HasDropDown"]){dojo._hasResource["dijit._HasDropDown"]=true;dojo.provide("dijit._HasDropDown");dojo.declare("dijit._HasDropDown",null,{_buttonNode:null,_arrowWrapperNode:null,_popupStateNode:null,_aroundNode:null,dropDown:null,autoWidth:true,forceWidth:false,maxHeight:0,dropDownPosition:["below","above"],_stopClickEvents:true,_onDropDownMouseDown:function(e){if(this.disabled||this.readOnly){return;}this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");this.toggleDropDown();},_onDropDownMouseUp:function(e){if(e&&this._docHandler){this.disconnect(this._docHandler);}var _1d4=this.dropDown,_1d5=false;if(e&&this._opened){var c=dojo.position(this._buttonNode,true);if(!(e.pageX>=c.x&&e.pageX<=c.x+c.w)||!(e.pageY>=c.y&&e.pageY<=c.y+c.h)){var t=e.target;while(t&&!_1d5){if(dojo.hasClass(t,"dijitPopup")){_1d5=true;}else{t=t.parentNode;}}if(_1d5){t=e.target;if(_1d4.onItemClick){var _1d6;while(t&&!(_1d6=dijit.byNode(t))){t=t.parentNode;}if(_1d6&&_1d6.onClick&&_1d6.getParent){_1d6.getParent().onItemClick(_1d6,e);}}return;}}}if(this._opened&&_1d4.focus){window.setTimeout(dojo.hitch(_1d4,"focus"),1);}},_onDropDownClick:function(e){if(this._stopClickEvents){dojo.stopEvent(e);}},_setupDropdown:function(){this._buttonNode=this._buttonNode||this.focusNode||this.domNode;this._popupStateNode=this._popupStateNode||this.focusNode||this._buttonNode;this._aroundNode=this._aroundNode||this.domNode;this.connect(this._buttonNode,"onmousedown","_onDropDownMouseDown");this.connect(this._buttonNode,"onclick","_onDropDownClick");this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");this.connect(this._buttonNode,"onkeyup","_onKey");if(this._setStateClass){this.connect(this,"openDropDown","_setStateClass");this.connect(this,"closeDropDown","_setStateClass");}var _1d7={"after":this.isLeftToRight()?"Right":"Left","before":this.isLeftToRight()?"Left":"Right","above":"Up","below":"Down","left":"Left","right":"Right"}[this.dropDownPosition[0]]||this.dropDownPosition[0]||"Down";dojo.addClass(this._arrowWrapperNode||this._buttonNode,"dijit"+_1d7+"ArrowButton");},postCreate:function(){this._setupDropdown();this.inherited(arguments);},destroyDescendants:function(){if(this.dropDown){if(!this.dropDown._destroyed){this.dropDown.destroyRecursive();}delete this.dropDown;}this.inherited(arguments);},_onDropDownKeydown:function(e){if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE){e.preventDefault();}},_onKey:function(e){if(this.disabled||this.readOnly){return;}var d=this.dropDown;if(d&&this._opened&&d.handleKey){if(d.handleKey(e)===false){return;}}if(d&&this._opened&&e.keyCode==dojo.keys.ESCAPE){this.toggleDropDown();}else{if(d&&!this._opened&&(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE)){this.toggleDropDown();if(d.focus){setTimeout(dojo.hitch(d,"focus"),1);}}}},_onBlur:function(){this.closeDropDown();this.inherited(arguments);},isLoaded:function(){return true;},loadDropDown:function(_1d8){_1d8();},toggleDropDown:function(){if(this.disabled||this.readOnly){return;}this.focus();var _1d9=this.dropDown;if(!_1d9){return;}if(!this._opened){if(!this.isLoaded()){this.loadDropDown(dojo.hitch(this,"openDropDown"));return;}else{this.openDropDown();}}else{this.closeDropDown();}},openDropDown:function(){var _1da=this.dropDown;var _1db=_1da.domNode;var self=this;if(!this._preparedNode){dijit.popup.moveOffScreen(_1db);this._preparedNode=true;if(_1db.style.width){this._explicitDDWidth=true;}if(_1db.style.height){this._explicitDDHeight=true;}}if(this.maxHeight||this.forceWidth||this.autoWidth){var _1dc={display:"",visibility:"hidden"};if(!this._explicitDDWidth){_1dc.width="";}if(!this._explicitDDHeight){_1dc.height="";}dojo.style(_1db,_1dc);var mb=dojo.marginBox(_1db);var _1dd=(this.maxHeight&&mb.h>this.maxHeight);dojo.style(_1db,{overflowX:"hidden",overflowY:_1dd?"auto":"hidden"});if(_1dd){mb.h=this.maxHeight;if("w" in mb){mb.w+=16;}}else{delete mb.h;}delete mb.t;delete mb.l;if(this.forceWidth){mb.w=this.domNode.offsetWidth;}else{if(this.autoWidth){mb.w=Math.max(mb.w,this.domNode.offsetWidth);}else{delete mb.w;}}if(dojo.isFunction(_1da.resize)){_1da.resize(mb);}else{dojo.marginBox(_1db,mb);}}var _1de=dijit.popup.open({parent:this,popup:_1da,around:this._aroundNode,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){self.closeDropDown(true);},onCancel:function(){self.closeDropDown(true);},onClose:function(){dojo.attr(self._popupStateNode,"popupActive",false);dojo.removeClass(self._popupStateNode,"dijitHasDropDownOpen");self._opened=false;self.state="";}});dojo.attr(this._popupStateNode,"popupActive","true");dojo.addClass(self._popupStateNode,"dijitHasDropDownOpen");this._opened=true;this.state="Opened";return _1de;},closeDropDown:function(_1df){if(this._opened){if(_1df){this.focus();}dijit.popup.close(this.dropDown);this._opened=false;this.state="";}}});}if(!dojo._hasResource["dijit.form.Button"]){dojo._hasResource["dijit.form.Button"]=true;dojo.provide("dijit.form.Button");dojo.declare("dijit.form.Button",dijit.form._FormWidget,{label:"",showLabel:true,iconClass:"",type:"button",baseClass:"dijitButton",templateString:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode",iconClass:{node:"iconNode",type:"class"}}),_onClick:function(e){if(this.disabled){return false;}this._clicked();return this.onClick(e);},_onButtonClick:function(e){if(this._onClick(e)===false){e.preventDefault();}else{if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){for(var node=this.domNode;node.parentNode;node=node.parentNode){var _1e0=dijit.byNode(node);if(_1e0&&typeof _1e0._onSubmit=="function"){_1e0._onSubmit(e);break;}}}else{if(this.valueNode){this.valueNode.click();e.preventDefault();}}}},_fillContent:function(_1e1){if(_1e1&&(!this.params||!("label" in this.params))){this.set("label",_1e1.innerHTML);}},postCreate:function(){dojo.setSelectable(this.focusNode,false);this.inherited(arguments);},_setShowLabelAttr:function(val){if(this.containerNode){dojo.toggleClass(this.containerNode,"dijitDisplayNone",!val);}this.showLabel=val;},onClick:function(e){return true;},_clicked:function(e){},setLabel:function(_1e2){dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_1e2);},_setLabelAttr:function(_1e3){this.containerNode.innerHTML=this.label=_1e3;if(this.showLabel==false&&!this.params.title){this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}}});dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){if(this.srcNodeRef){var _1e4=dojo.query("*",this.srcNodeRef);dijit.form.DropDownButton.superclass._fillContent.call(this,_1e4[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}if(!this.dropDown){var _1e5=dojo.query("[widgetId]",this.dropDownContainer)[0];this.dropDown=dijit.byNode(_1e5);delete this.dropDownContainer;}dijit.popup.moveOffScreen(this.dropDown.domNode);this.inherited(arguments);},isLoaded:function(){var _1e6=this.dropDown;return (!_1e6.href||_1e6.isLoaded);},loadDropDown:function(){var _1e7=this.dropDown;if(!_1e7){return;}if(!this.isLoaded()){var _1e8=dojo.connect(_1e7,"onLoad",this,function(){dojo.disconnect(_1e8);this.openDropDown();});_1e7.refresh();}else{this.openDropDown();}},isFocusable:function(){return this.inherited(arguments)&&!this._mouseDown;}});dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){dijit.focus(this._popupStateNode);dojo.stopEvent(evt);}},_onArrowKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){dijit.focus(this.titleNode);dojo.stopEvent(evt);}},focus:function(_1e9){dijit.focus(_1e9=="start"?this.titleNode:this._popupStateNode);}});dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(evt){this.set("checked",!this.checked);},_setCheckedAttr:function(_1ea,_1eb){this.checked=_1ea;dojo.attr(this.focusNode||this.domNode,"checked",_1ea);dijit.setWaiState(this.focusNode||this.domNode,"pressed",_1ea);this._handleOnChange(_1ea,_1eb);},setChecked:function(_1ec){dojo.deprecated("setChecked("+_1ec+") is deprecated. Use set('checked',"+_1ec+") instead.","","2.0");this.set("checked",_1ec);},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);}});}if(!dojo._hasResource["dijit._editor._Plugin"]){dojo._hasResource["dijit._editor._Plugin"]=true;dojo.provide("dijit._editor._Plugin");dojo.declare("dijit._editor._Plugin",null,{constructor:function(args,node){this.params=args||{};dojo.mixin(this,this.params);this._connects=[];},editor:null,iconClassPrefix:"dijitEditorIcon",button:null,command:"",useDefaultCommand:true,buttonClass:dijit.form.Button,getLabel:function(key){return this.editor.commands[key];},_initButton:function(){if(this.command.length){var _1ed=this.getLabel(this.command),_1ee=this.editor,_1ef=this.iconClassPrefix+" "+this.iconClassPrefix+this.command.charAt(0).toUpperCase()+this.command.substr(1);if(!this.button){var _1f0=dojo.mixin({label:_1ed,dir:_1ee.dir,lang:_1ee.lang,showLabel:false,iconClass:_1ef,dropDown:this.dropDown,tabIndex:"-1"},this.params||{});this.button=new this.buttonClass(_1f0);}}},destroy:function(){dojo.forEach(this._connects,dojo.disconnect);if(this.dropDown){this.dropDown.destroyRecursive();}},connect:function(o,f,tf){this._connects.push(dojo.connect(o,f,this,tf));},updateState:function(){var e=this.editor,c=this.command,_1f1,_1f2;if(!e||!e.isLoaded||!c.length){return;}if(this.button){try{_1f2=e.queryCommandEnabled(c);if(this.enabled!==_1f2){this.enabled=_1f2;this.button.set("disabled",!_1f2);}if(typeof this.button.checked=="boolean"){_1f1=e.queryCommandState(c);if(this.checked!==_1f1){this.checked=_1f1;this.button.set("checked",e.queryCommandState(c));}}}catch(e){}}},setEditor:function(_1f3){this.editor=_1f3;this._initButton();if(this.button&&this.useDefaultCommand){if(this.editor.queryCommandAvailable(this.command)){this.connect(this.button,"onClick",dojo.hitch(this.editor,"execCommand",this.command,this.commandArg));}else{this.button.domNode.style.display="none";}}this.connect(this.editor,"onNormalizedDisplayChanged","updateState");},setToolbar:function(_1f4){if(this.button){_1f4.addChild(this.button);}}});}if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]=true;dojo.provide("dijit._editor.plugins.EnterKeyHandling");dojo.declare("dijit._editor.plugins.EnterKeyHandling",dijit._editor._Plugin,{blockNodeForEnter:"BR",constructor:function(args){if(args){dojo.mixin(this,args);}},setEditor:function(_1f5){this.editor=_1f5;if(this.blockNodeForEnter=="BR"){if(dojo.isIE){_1f5.contentDomPreFilters.push(dojo.hitch(this,"regularPsToSingleLinePs"));_1f5.contentDomPostFilters.push(dojo.hitch(this,"singleLinePsToRegularPs"));_1f5.onLoadDeferred.addCallback(dojo.hitch(this,"_fixNewLineBehaviorForIE"));}else{_1f5.onLoadDeferred.addCallback(dojo.hitch(this,function(d){try{this.editor.document.execCommand("insertBrOnReturn",false,true);}catch(e){}return d;}));}}else{if(this.blockNodeForEnter){dojo["require"]("dijit._editor.range");var h=dojo.hitch(this,this.handleEnterKey);_1f5.addKeyHandler(13,0,0,h);_1f5.addKeyHandler(13,0,1,h);this.connect(this.editor,"onKeyPressed","onKeyPressed");}}},onKeyPressed:function(e){if(this._checkListLater){if(dojo.withGlobal(this.editor.window,"isCollapsed",dijit)){var _1f6=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,["LI"]);if(!_1f6){dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);var _1f7=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]);if(_1f7){_1f7.innerHTML=this.bogusHtmlContent;if(dojo.isIE){var r=this.editor.document.selection.createRange();r.move("character",-1);r.select();}}else{console.error("onKeyPressed: Cannot find the new block node");}}else{if(dojo.isMoz){if(_1f6.parentNode.parentNode.nodeName=="LI"){_1f6=_1f6.parentNode.parentNode;}}var fc=_1f6.firstChild;if(fc&&fc.nodeType==1&&(fc.nodeName=="UL"||fc.nodeName=="OL")){_1f6.insertBefore(fc.ownerDocument.createTextNode(" "),fc);var _1f8=dijit.range.create(this.editor.window);_1f8.setStart(_1f6.firstChild,0);var _1f9=dijit.range.getSelection(this.editor.window,true);_1f9.removeAllRanges();_1f9.addRange(_1f8);}}}this._checkListLater=false;}if(this._pressedEnterInBlock){if(this._pressedEnterInBlock.previousSibling){this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);}delete this._pressedEnterInBlock;}},bogusHtmlContent:"&nbsp;",blockNodes:/^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,handleEnterKey:function(e){var _1fa,_1fb,_1fc,doc=this.editor.document,br;if(e.shiftKey){var _1fd=dojo.withGlobal(this.editor.window,"getParentElement",dijit._editor.selection);var _1fe=dijit.range.getAncestor(_1fd,this.blockNodes);if(_1fe){if(!e.shiftKey&&_1fe.tagName=="LI"){return true;}_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);if(!_1fb.collapsed){_1fb.deleteContents();_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);}if(dijit.range.atBeginningOfContainer(_1fe,_1fb.startContainer,_1fb.startOffset)){if(e.shiftKey){br=doc.createElement("br");_1fc=dijit.range.create(this.editor.window);_1fe.insertBefore(br,_1fe.firstChild);_1fc.setStartBefore(br.nextSibling);_1fa.removeAllRanges();_1fa.addRange(_1fc);}else{dojo.place(br,_1fe,"before");}}else{if(dijit.range.atEndOfContainer(_1fe,_1fb.startContainer,_1fb.startOffset)){_1fc=dijit.range.create(this.editor.window);br=doc.createElement("br");if(e.shiftKey){_1fe.appendChild(br);_1fe.appendChild(doc.createTextNode(" "));_1fc.setStart(_1fe.lastChild,0);}else{dojo.place(br,_1fe,"after");_1fc.setStartAfter(_1fe);}_1fa.removeAllRanges();_1fa.addRange(_1fc);}else{return true;}}}else{dijit._editor.RichText.prototype.execCommand.call(this.editor,"inserthtml","<br>");}return false;}var _1ff=true;_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);if(!_1fb.collapsed){_1fb.deleteContents();_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);}var _200=dijit.range.getBlockAncestor(_1fb.endContainer,null,this.editor.editNode);var _201=_200.blockNode;if((this._checkListLater=(_201&&(_201.nodeName=="LI"||_201.parentNode.nodeName=="LI")))){if(dojo.isMoz){this._pressedEnterInBlock=_201;}if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(_201.innerHTML)){_201.innerHTML="";if(dojo.isWebKit){_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_201,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);}this._checkListLater=false;}return true;}if(!_200.blockNode||_200.blockNode===this.editor.editNode){try{dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);}catch(e2){}_200={blockNode:dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]),blockContainer:this.editor.editNode};if(_200.blockNode){if(_200.blockNode!=this.editor.editNode&&(!(_200.blockNode.textContent||_200.blockNode.innerHTML).replace(/^\s+|\s+$/g,"").length)){this.removeTrailingBr(_200.blockNode);return false;}}else{_200.blockNode=this.editor.editNode;}_1fa=dijit.range.getSelection(this.editor.window);_1fb=_1fa.getRangeAt(0);}var _202=doc.createElement(this.blockNodeForEnter);_202.innerHTML=this.bogusHtmlContent;this.removeTrailingBr(_200.blockNode);if(dijit.range.atEndOfContainer(_200.blockNode,_1fb.endContainer,_1fb.endOffset)){if(_200.blockNode===_200.blockContainer){_200.blockNode.appendChild(_202);}else{dojo.place(_202,_200.blockNode,"after");}_1ff=false;_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_202,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);if(this.editor.height){dojo.window.scrollIntoView(_202);}}else{if(dijit.range.atBeginningOfContainer(_200.blockNode,_1fb.startContainer,_1fb.startOffset)){dojo.place(_202,_200.blockNode,_200.blockNode===_200.blockContainer?"first":"before");if(_202.nextSibling&&this.editor.height){_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_202.nextSibling,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);dojo.window.scrollIntoView(_202.nextSibling);}_1ff=false;}else{if(_200.blockNode===_200.blockContainer){_200.blockNode.appendChild(_202);}else{dojo.place(_202,_200.blockNode,"after");}_1ff=false;if(_200.blockNode.style){if(_202.style){if(_200.blockNode.style.cssText){_202.style.cssText=_200.blockNode.style.cssText;}}}var rs=_1fb.startContainer;if(rs&&rs.nodeType==3){var _203,_204;var txt=rs.nodeValue;var _205=doc.createTextNode(txt.substring(0,_1fb.startOffset));var _206=doc.createTextNode(txt.substring(_1fb.startOffset,txt.length));dojo.place(_205,rs,"before");dojo.place(_206,rs,"after");dojo.destroy(rs);var _207=_205.parentNode;while(_207!==_200.blockNode){var tg=_207.tagName;var _208=doc.createElement(tg);if(_207.style){if(_208.style){if(_207.style.cssText){_208.style.cssText=_207.style.cssText;}}}_203=_206;while(_203){_204=_203.nextSibling;_208.appendChild(_203);_203=_204;}dojo.place(_208,_207,"after");_205=_207;_206=_208;_207=_207.parentNode;}_203=_206;if(_203.nodeType==1||(_203.nodeType==3&&_203.nodeValue)){_202.innerHTML="";}while(_203){_204=_203.nextSibling;_202.appendChild(_203);_203=_204;}}_1fc=dijit.range.create(this.editor.window);_1fc.setStart(_202,0);_1fa.removeAllRanges();_1fa.addRange(_1fc);if(this.editor.height){dijit.scrollIntoView(_202);}if(dojo.isMoz){this._pressedEnterInBlock=_200.blockNode;}}}return _1ff;},removeTrailingBr:function(_209){var para=/P|DIV|LI/i.test(_209.tagName)?_209:dijit._editor.selection.getParentOfType(_209,["P","DIV","LI"]);if(!para){return;}if(para.lastChild){if((para.childNodes.length>1&&para.lastChild.nodeType==3&&/^[\s\xAD]*$/.test(para.lastChild.nodeValue))||para.lastChild.tagName=="BR"){dojo.destroy(para.lastChild);}}if(!para.childNodes.length){para.innerHTML=this.bogusHtmlContent;}},_fixNewLineBehaviorForIE:function(d){var doc=this.editor.document;if(doc.__INSERTED_EDITIOR_NEWLINE_CSS===undefined){var _20a=dojo.create("style",{type:"text/css"},doc.getElementsByTagName("head")[0]);_20a.styleSheet.cssText="p{margin:0;}";this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS=true;}return d;},regularPsToSingleLinePs:function(_20b,_20c){function _20d(el){function _20e(_20f){var newP=_20f[0].ownerDocument.createElement("p");_20f[0].parentNode.insertBefore(newP,_20f[0]);dojo.forEach(_20f,function(node){newP.appendChild(node);});};var _210=0;var _211=[];var _212;while(_210<el.childNodes.length){_212=el.childNodes[_210];if(_212.nodeType==3||(_212.nodeType==1&&_212.nodeName!="BR"&&dojo.style(_212,"display")!="block")){_211.push(_212);}else{var _213=_212.nextSibling;if(_211.length){_20e(_211);_210=(_210+1)-_211.length;if(_212.nodeName=="BR"){dojo.destroy(_212);}}_211=[];}_210++;}if(_211.length){_20e(_211);}};function _214(el){var _215=null;var _216=[];var _217=el.childNodes.length-1;for(var i=_217;i>=0;i--){_215=el.childNodes[i];if(_215.nodeName=="BR"){var newP=_215.ownerDocument.createElement("p");dojo.place(newP,el,"after");if(_216.length==0&&i!=_217){newP.innerHTML="&nbsp;";}dojo.forEach(_216,function(node){newP.appendChild(node);});dojo.destroy(_215);_216=[];}else{_216.unshift(_215);}}};var _218=[];var ps=_20b.getElementsByTagName("p");dojo.forEach(ps,function(p){_218.push(p);});dojo.forEach(_218,function(p){var _219=p.previousSibling;if((_219)&&(_219.nodeType==1)&&(_219.nodeName=="P"||dojo.style(_219,"display")!="block")){var newP=p.parentNode.insertBefore(this.document.createElement("p"),p);newP.innerHTML=_20c?"":"&nbsp;";}_214(p);},this.editor);_20d(_20b);return _20b;},singleLinePsToRegularPs:function(_21a){function _21b(node){var ps=node.getElementsByTagName("p");var _21c=[];for(var i=0;i<ps.length;i++){var p=ps[i];var _21d=false;for(var k=0;k<_21c.length;k++){if(_21c[k]===p.parentNode){_21d=true;break;}}if(!_21d){_21c.push(p.parentNode);}}return _21c;};function _21e(node){return (!node.childNodes.length||node.innerHTML=="&nbsp;");};var _21f=_21b(_21a);for(var i=0;i<_21f.length;i++){var _220=_21f[i];var _221=null;var node=_220.firstChild;var _222=null;while(node){if(node.nodeType!=1||node.tagName!="P"||(node.getAttributeNode("style")||{}).specified){_221=null;}else{if(_21e(node)){_222=node;_221=null;}else{if(_221==null){_221=node;}else{if((!_221.lastChild||_221.lastChild.nodeName!="BR")&&(node.firstChild)&&(node.firstChild.nodeName!="BR")){_221.appendChild(this.editor.document.createElement("br"));}while(node.firstChild){_221.appendChild(node.firstChild);}_222=node;}}}node=node.nextSibling;if(_222){dojo.destroy(_222);_222=null;}}}return _21a;}});}if(!dojo._hasResource["dijit.Editor"]){dojo._hasResource["dijit.Editor"]=true;dojo.provide("dijit.Editor");dojo.declare("dijit.Editor",dijit._editor.RichText,{plugins:null,extraPlugins:null,constructor:function(){if(!dojo.isArray(this.plugins)){this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|","insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull","dijit._editor.plugins.EnterKeyHandling"];}this._plugins=[];this._editInterval=this.editActionInterval*1000;if(dojo.isIE){this.events.push("onBeforeDeactivate");this.events.push("onBeforeActivate");}},postCreate:function(){this._steps=this._steps.slice(0);this._undoedSteps=this._undoedSteps.slice(0);if(dojo.isArray(this.extraPlugins)){this.plugins=this.plugins.concat(this.extraPlugins);}this.setValueDeferred=new dojo.Deferred();this.inherited(arguments);this.commands=dojo.i18n.getLocalization("dijit._editor","commands",this.lang);if(!this.toolbar){this.toolbar=new dijit.Toolbar({dir:this.dir,lang:this.lang});this.header.appendChild(this.toolbar.domNode);}dojo.forEach(this.plugins,this.addPlugin,this);this.setValueDeferred.callback(true);dojo.addClass(this.iframe.parentNode,"dijitEditorIFrameContainer");dojo.addClass(this.iframe,"dijitEditorIFrame");dojo.attr(this.iframe,"allowTransparency",true);if(dojo.isWebKit){dojo.style(this.domNode,"KhtmlUserSelect","none");}this.toolbar.startup();this.onNormalizedDisplayChanged();},destroy:function(){dojo.forEach(this._plugins,function(p){if(p&&p.destroy){p.destroy();}});this._plugins=[];this.toolbar.destroyRecursive();delete this.toolbar;this.inherited(arguments);},addPlugin:function(_223,_224){var args=dojo.isString(_223)?{name:_223}:_223;if(!args.setEditor){var o={"args":args,"plugin":null,"editor":this};dojo.publish(dijit._scopeName+".Editor.getPlugin",[o]);if(!o.plugin){var pc=dojo.getObject(args.name);if(pc){o.plugin=new pc(args);}}if(!o.plugin){console.warn("Cannot find plugin",_223);return;}_223=o.plugin;}if(arguments.length>1){this._plugins[_224]=_223;}else{this._plugins.push(_223);}_223.setEditor(this);if(dojo.isFunction(_223.setToolbar)){_223.setToolbar(this.toolbar);}},startup:function(){},resize:function(size){if(size){dijit.layout._LayoutWidget.prototype.resize.apply(this,arguments);}},layout:function(){var _225=(this._contentBox.h-(this.getHeaderHeight()+this.getFooterHeight()+dojo._getPadBorderExtents(this.iframe.parentNode).h+dojo._getMarginExtents(this.iframe.parentNode).h));this.editingArea.style.height=_225+"px";if(this.iframe){this.iframe.style.height="100%";}this._layoutMode=true;},_onIEMouseDown:function(e){var _226;var b=this.document.body;var _227=b.clientWidth;var _228=b.clientHeight;var _229=b.clientLeft;var _22a=b.offsetWidth;var _22b=b.offsetHeight;var _22c=b.offsetLeft;bodyDir=b.dir?b.dir.toLowerCase():"";if(bodyDir!="rtl"){if(_227<_22a&&e.x>_227&&e.x<_22a){_226=true;}}else{if(e.x<_229&&e.x>_22c){_226=true;}}if(!_226){if(_228<_22b&&e.y>_228&&e.y<_22b){_226=true;}}if(!_226){delete this._cursorToStart;delete this._savedSelection;if(e.target.tagName=="BODY"){setTimeout(dojo.hitch(this,"placeCursorAtEnd"),0);}this.inherited(arguments);}},onBeforeActivate:function(e){this._restoreSelection();},onBeforeDeactivate:function(e){if(this.customUndo){this.endEditing(true);}if(e.target.tagName!="BODY"){this._saveSelection();}},customUndo:dojo.isIE||dojo.isWebKit,editActionInterval:3,beginEditing:function(cmd){if(!this._inEditing){this._inEditing=true;this._beginEditing(cmd);}if(this.editActionInterval>0){if(this._editTimer){clearTimeout(this._editTimer);}this._editTimer=setTimeout(dojo.hitch(this,this.endEditing),this._editInterval);}},_steps:[],_undoedSteps:[],execCommand:function(cmd){if(this.customUndo&&(cmd=="undo"||cmd=="redo")){return this[cmd]();}else{if(this.customUndo){this.endEditing();this._beginEditing();}var r;try{r=this.inherited("execCommand",arguments);if(dojo.isWebKit&&cmd=="paste"&&!r){throw {code:1011};}}catch(e){if(e.code==1011&&/copy|cut|paste/.test(cmd)){var sub=dojo.string.substitute,_22d={cut:"X",copy:"C",paste:"V"};alert(sub(this.commands.systemShortcut,[this.commands[cmd],sub(this.commands[dojo.isMac?"appleKey":"ctrlKey"],[_22d[cmd]])]));}r=false;}if(this.customUndo){this._endEditing();}return r;}},queryCommandEnabled:function(cmd){if(this.customUndo&&(cmd=="undo"||cmd=="redo")){return cmd=="undo"?(this._steps.length>1):(this._undoedSteps.length>0);}else{return this.inherited("queryCommandEnabled",arguments);}},_moveToBookmark:function(b){var _22e=b.mark;var mark=b.mark;var col=b.isCollapsed;var r,_22f,_230,sel;if(mark){if(dojo.isIE){if(dojo.isArray(mark)){_22e=[];dojo.forEach(mark,function(n){_22e.push(dijit.range.getNode(n,this.editNode));},this);dojo.withGlobal(this.window,"moveToBookmark",dijit,[{mark:_22e,isCollapsed:col}]);}else{if(mark.startContainer&&mark.endContainer){sel=dijit.range.getSelection(this.window);if(sel&&sel.removeAllRanges){sel.removeAllRanges();r=dijit.range.create(this.window);_22f=dijit.range.getNode(mark.startContainer,this.editNode);_230=dijit.range.getNode(mark.endContainer,this.editNode);if(_22f&&_230){r.setStart(_22f,mark.startOffset);r.setEnd(_230,mark.endOffset);sel.addRange(r);}}}}}else{sel=dijit.range.getSelection(this.window);if(sel&&sel.removeAllRanges){sel.removeAllRanges();r=dijit.range.create(this.window);_22f=dijit.range.getNode(mark.startContainer,this.editNode);_230=dijit.range.getNode(mark.endContainer,this.editNode);if(_22f&&_230){r.setStart(_22f,mark.startOffset);r.setEnd(_230,mark.endOffset);sel.addRange(r);}}}}},_changeToStep:function(from,to){this.setValue(to.text);var b=to.bookmark;if(!b){return;}this._moveToBookmark(b);},undo:function(){var ret=false;if(!this._undoRedoActive){this._undoRedoActive=true;this.endEditing(true);var s=this._steps.pop();if(s&&this._steps.length>0){this.focus();this._changeToStep(s,this._steps[this._steps.length-1]);this._undoedSteps.push(s);this.onDisplayChanged();delete this._undoRedoActive;ret=true;}delete this._undoRedoActive;}return ret;},redo:function(){var ret=false;if(!this._undoRedoActive){this._undoRedoActive=true;this.endEditing(true);var s=this._undoedSteps.pop();if(s&&this._steps.length>0){this.focus();this._changeToStep(this._steps[this._steps.length-1],s);this._steps.push(s);this.onDisplayChanged();ret=true;}delete this._undoRedoActive;}return ret;},endEditing:function(_231){if(this._editTimer){clearTimeout(this._editTimer);}if(this._inEditing){this._endEditing(_231);this._inEditing=false;}},_getBookmark:function(){var b=dojo.withGlobal(this.window,dijit.getBookmark);var tmp=[];if(b&&b.mark){var mark=b.mark;if(dojo.isIE){var sel=dijit.range.getSelection(this.window);if(!dojo.isArray(mark)){if(sel){var _232;if(sel.rangeCount){_232=sel.getRangeAt(0);}if(_232){b.mark=_232.cloneRange();}else{b.mark=dojo.withGlobal(this.window,dijit.getBookmark);}}}else{dojo.forEach(b.mark,function(n){tmp.push(dijit.range.getIndex(n,this.editNode).o);},this);b.mark=tmp;}}try{if(b.mark&&b.mark.startContainer){tmp=dijit.range.getIndex(b.mark.startContainer,this.editNode).o;b.mark={startContainer:tmp,startOffset:b.mark.startOffset,endContainer:b.mark.endContainer===b.mark.startContainer?tmp:dijit.range.getIndex(b.mark.endContainer,this.editNode).o,endOffset:b.mark.endOffset};}}catch(e){b.mark=null;}}return b;},_beginEditing:function(cmd){if(this._steps.length===0){this._steps.push({"text":dijit._editor.getChildrenHtml(this.editNode),"bookmark":this._getBookmark()});}},_endEditing:function(_233){var v=dijit._editor.getChildrenHtml(this.editNode);this._undoedSteps=[];this._steps.push({text:v,bookmark:this._getBookmark()});},onKeyDown:function(e){if(!dojo.isIE&&!this.iframe&&e.keyCode==dojo.keys.TAB&&!this.tabIndent){this._saveSelection();}if(!this.customUndo){this.inherited(arguments);return;}var k=e.keyCode,ks=dojo.keys;if(e.ctrlKey&&!e.altKey){if(k==90||k==122){dojo.stopEvent(e);this.undo();return;}else{if(k==89||k==121){dojo.stopEvent(e);this.redo();return;}}}this.inherited(arguments);switch(k){case ks.ENTER:case ks.BACKSPACE:case ks.DELETE:this.beginEditing();break;case 88:case 86:if(e.ctrlKey&&!e.altKey&&!e.metaKey){this.endEditing();if(e.keyCode==88){this.beginEditing("cut");setTimeout(dojo.hitch(this,this.endEditing),1);}else{this.beginEditing("paste");setTimeout(dojo.hitch(this,this.endEditing),1);}break;}default:if(!e.ctrlKey&&!e.altKey&&!e.metaKey&&(e.keyCode<dojo.keys.F1||e.keyCode>dojo.keys.F15)){this.beginEditing();break;}case ks.ALT:this.endEditing();break;case ks.UP_ARROW:case ks.DOWN_ARROW:case ks.LEFT_ARROW:case ks.RIGHT_ARROW:case ks.HOME:case ks.END:case ks.PAGE_UP:case ks.PAGE_DOWN:this.endEditing(true);break;case ks.CTRL:case ks.SHIFT:case ks.TAB:break;}},_onBlur:function(){this.inherited("_onBlur",arguments);this.endEditing(true);},_saveSelection:function(){this._savedSelection=this._getBookmark();},_restoreSelection:function(){if(this._savedSelection){delete this._cursorToStart;if(dojo.withGlobal(this.window,"isCollapsed",dijit)){this._moveToBookmark(this._savedSelection);}delete this._savedSelection;}},onClick:function(){this.endEditing(true);this.inherited(arguments);},_setDisabledAttr:function(_234){if(!this.disabled&&_234){this._buttonEnabledPlugins=dojo.filter(this._plugins,function(p){if(p&&p.button&&!p.button.get("disabled")){p.button.set("disabled",true);return true;}return false;});}else{if(this.disabled&&!_234){dojo.forEach(this._buttonEnabledPlugins,function(p){p.button.attr("disabled",false);p.updateState&&p.updateState();});}}this.inherited(arguments);},_setStateClass:function(){this.inherited(arguments);if(this.document&&this.document.body){dojo.style(this.document.body,"color",dojo.style(this.iframe,"color"));}}});dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){if(o.plugin){return;}var args=o.args,p;var _235=dijit._editor._Plugin;var name=args.name;switch(name){case "undo":case "redo":case "cut":case "copy":case "paste":case "insertOrderedList":case "insertUnorderedList":case "indent":case "outdent":case "justifyCenter":case "justifyFull":case "justifyLeft":case "justifyRight":case "delete":case "selectAll":case "removeFormat":case "unlink":case "insertHorizontalRule":p=new _235({command:name});break;case "bold":case "italic":case "underline":case "strikethrough":case "subscript":case "superscript":p=new _235({buttonClass:dijit.form.ToggleButton,command:name});break;case "|":p=new _235({button:new dijit.ToolbarSeparator(),setEditor:function(_236){this.editor=_236;}});}o.plugin=p;});}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.regexp.escapeString=function(str,_237){return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){if(_237&&_237.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_238){if(!(arr instanceof Array)){return re(arr);}var b=[];for(var i=0;i<arr.length;i++){b.push(re(arr[i]));}return dojo.regexp.group(b.join("|"),_238);};dojo.regexp.group=function(_239,_23a){return "("+(_23a?"?:":"")+_239+")";};}if(!dojo._hasResource["dojo.data.util.sorter"]){dojo._hasResource["dojo.data.util.sorter"]=true;dojo.provide("dojo.data.util.sorter");dojo.data.util.sorter.basicComparator=function(a,b){var r=-1;if(a===null){a=undefined;}if(b===null){b=undefined;}if(a==b){r=0;}else{if(a>b||a==null){r=1;}}return r;};dojo.data.util.sorter.createSortFunction=function(_23b,_23c){var _23d=[];function _23e(attr,dir,comp,s){return function(_23f,_240){var a=s.getValue(_23f,attr);var b=s.getValue(_240,attr);return dir*comp(a,b);};};var _241;var map=_23c.comparatorMap;var bc=dojo.data.util.sorter.basicComparator;for(var i=0;i<_23b.length;i++){_241=_23b[i];var attr=_241.attribute;if(attr){var dir=(_241.descending)?-1:1;var comp=bc;if(map){if(typeof attr!=="string"&&("toString" in attr)){attr=attr.toString();}comp=map[attr]||bc;}_23d.push(_23e(attr,dir,comp,_23c));}}return function(rowA,rowB){var i=0;while(i<_23d.length){var ret=_23d[i++](rowA,rowB);if(ret!==0){return ret;}}return 0;};};}if(!dojo._hasResource["dojo.data.util.simpleFetch"]){dojo._hasResource["dojo.data.util.simpleFetch"]=true;dojo.provide("dojo.data.util.simpleFetch");dojo.data.util.simpleFetch.fetch=function(_242){_242=_242||{};if(!_242.store){_242.store=this;}var self=this;var _243=function(_244,_245){if(_245.onError){var _246=_245.scope||dojo.global;_245.onError.call(_246,_244,_245);}};var _247=function(_248,_249){var _24a=_249.abort||null;var _24b=false;var _24c=_249.start?_249.start:0;var _24d=(_249.count&&(_249.count!==Infinity))?(_24c+_249.count):_248.length;_249.abort=function(){_24b=true;if(_24a){_24a.call(_249);}};var _24e=_249.scope||dojo.global;if(!_249.store){_249.store=self;}if(_249.onBegin){_249.onBegin.call(_24e,_248.length,_249);}if(_249.sort){_248.sort(dojo.data.util.sorter.createSortFunction(_249.sort,self));}if(_249.onItem){for(var i=_24c;(i<_248.length)&&(i<_24d);++i){var item=_248[i];if(!_24b){_249.onItem.call(_24e,item,_249);}}}if(_249.onComplete&&!_24b){var _24f=null;if(!_249.onItem){_24f=_248.slice(_24c,_24d);}_249.onComplete.call(_24e,_24f,_249);}};this._fetchItems(_242,_247,_243);return _242;};}if(!dojo._hasResource["dojo.data.util.filter"]){dojo._hasResource["dojo.data.util.filter"]=true;dojo.provide("dojo.data.util.filter");dojo.data.util.filter.patternToRegExp=function(_250,_251){var rxp="^";var c=null;for(var i=0;i<_250.length;i++){c=_250.charAt(i);switch(c){case "\\":rxp+=c;i++;rxp+=_250.charAt(i);break;case "*":rxp+=".*";break;case "?":rxp+=".";break;case "$":case "^":case "/":case "+":case ".":case "|":case "(":case ")":case "{":case "}":case "[":case "]":rxp+="\\";default:rxp+=c;}}rxp+="$";if(_251){return new RegExp(rxp,"mi");}else{return new RegExp(rxp,"m");}};}if(!dojo._hasResource["dijit.form.TextBox"]){dojo._hasResource["dijit.form.TextBox"]=true;dojo.provide("dijit.form.TextBox");dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){var type=this.type.toLowerCase();if(this.templateString.toLowerCase()=="input"||((type=="hidden"||type=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){this.templateString=this._singleNodeTemplate;}this.inherited(arguments);},_setPlaceHolderAttr:function(v){this.placeHolder=v;if(!this._phspan){this._attachPoints.push("_phspan");this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");}this._phspan.innerHTML="";this._phspan.appendChild(document.createTextNode(v));this._updatePlaceHolder();},_updatePlaceHolder:function(){if(this._phspan){this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";}},_getValueAttr:function(){return this.parse(this.get("displayedValue"),this.constraints);},_setValueAttr:function(_252,_253,_254){var _255;if(_252!==undefined){_255=this.filter(_252);if(typeof _254!="string"){if(_255!==null&&((typeof _255!="number")||!isNaN(_255))){_254=this.filter(this.format(_255,this.constraints));}else{_254="";}}}if(_254!=null&&_254!=undefined&&((typeof _254)!="number"||!isNaN(_254))&&this.textbox.value!=_254){this.textbox.value=_254;}this._updatePlaceHolder();this.inherited(arguments,[_255,_253]);},displayedValue:"",getDisplayedValue:function(){dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");return this.get("displayedValue");},_getDisplayedValueAttr:function(){return this.filter(this.textbox.value);},setDisplayedValue:function(_256){dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");this.set("displayedValue",_256);},_setDisplayedValueAttr:function(_257){if(_257===null||_257===undefined){_257="";}else{if(typeof _257!="string"){_257=String(_257);}}this.textbox.value=_257;this._setValueAttr(this.get("value"),undefined,_257);},format:function(_258,_259){return ((_258==null||_258==undefined)?"":(_258.toString?_258.toString():_258));},parse:function(_25a,_25b){return _25a;},_refreshState:function(){},_onInput:function(e){if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){switch(e.keyCode){case dojo.keys.SHIFT:case dojo.keys.ALT:case dojo.keys.CTRL:case dojo.keys.TAB:return;}}if(this.intermediateChanges){var _25c=this;setTimeout(function(){_25c._handleOnChange(_25c.get("value"),false);},0);}this._refreshState();},postCreate:function(){if(dojo.isIE){var s=dojo.getComputedStyle(this.domNode);if(s){var ff=s.fontFamily;if(ff){var _25d=this.domNode.getElementsByTagName("INPUT");if(_25d){for(var i=0;i<_25d.length;i++){_25d[i].style.fontFamily=ff;}}}}}this.textbox.setAttribute("value",this.textbox.value);this.inherited(arguments);if(dojo.isMoz||dojo.isOpera){this.connect(this.textbox,"oninput",this._onInput);}else{this.connect(this.textbox,"onkeydown",this._onInput);this.connect(this.textbox,"onkeyup",this._onInput);this.connect(this.textbox,"onpaste",this._onInput);this.connect(this.textbox,"oncut",this._onInput);}},_blankValue:"",filter:function(val){if(val===null){return this._blankValue;}if(typeof val!="string"){return val;}if(this.trim){val=dojo.trim(val);}if(this.uppercase){val=val.toUpperCase();}if(this.lowercase){val=val.toLowerCase();}if(this.propercase){val=val.replace(/[^\s]+/g,function(word){return word.substring(0,1).toUpperCase()+word.substring(1);});}return val;},_setBlurValue:function(){this._setValueAttr(this.get("value"),true);},_onBlur:function(e){if(this.disabled){return;}this._setBlurValue();this.inherited(arguments);if(this._selectOnClickHandle){this.disconnect(this._selectOnClickHandle);}if(this.selectOnClick&&dojo.isMoz){this.textbox.selectionStart=this.textbox.selectionEnd=undefined;}this._updatePlaceHolder();},_onFocus:function(by){if(this.disabled||this.readOnly){return;}if(this.selectOnClick&&by=="mouse"){this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){this.disconnect(this._selectOnClickHandle);var _25e;if(dojo.isIE){var _25f=dojo.doc.selection.createRange();var _260=_25f.parentElement();_25e=_260==this.textbox&&_25f.text.length==0;}else{_25e=this.textbox.selectionStart==this.textbox.selectionEnd;}if(_25e){dijit.selectInputText(this.textbox);}});}this._updatePlaceHolder();this._refreshState();this.inherited(arguments);},reset:function(){this.textbox.value="";this.inherited(arguments);}});dijit.selectInputText=function(_261,_262,stop){var _263=dojo.global;var _264=dojo.doc;_261=dojo.byId(_261);if(isNaN(_262)){_262=0;}if(isNaN(stop)){stop=_261.value?_261.value.length:0;}dijit.focus(_261);if(_264["selection"]&&dojo.body()["createTextRange"]){if(_261.createTextRange){var _265=_261.createTextRange();with(_265){collapse(true);moveStart("character",-99999);moveStart("character",_262);moveEnd("character",stop-_262);select();}}}else{if(_263["getSelection"]){if(_261.setSelectionRange){_261.setSelectionRange(_262,stop);}}}};}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{duration:dijit.defaultDuration,templateString:dojo.cache("dijit","templates/Tooltip.html","<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n"),postCreate:function(){dojo.body().appendChild(this.domNode);this.bgIframe=new dijit.BackgroundIframe(this.domNode);this.fadeIn=dojo.fadeIn({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onShow")});this.fadeOut=dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onHide")});},show:function(_266,_267,_268,rtl){if(this.aroundNode&&this.aroundNode===_267){return;}if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_266;var pos=dijit.placeOnScreenAroundElement(this.domNode,_267,dijit.getPopupAroundAlignment((_268&&_268.length)?_268:dijit.Tooltip.defaultPosition,!rtl),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_267;},orient:function(node,_269,_26a){node.className="dijitTooltip "+{"BL-TL":"dijitTooltipBelow dijitTooltipABLeft","TL-BL":"dijitTooltipAbove dijitTooltipABLeft","BR-TR":"dijitTooltipBelow dijitTooltipABRight","TR-BR":"dijitTooltipAbove dijitTooltipABRight","BR-BL":"dijitTooltipRight","BL-BR":"dijitTooltipLeft"}[_269+"-"+_26a];},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_26b){if(this._onDeck&&this._onDeck[1]==_26b){this._onDeck=null;}else{if(this.aroundNode===_26b){this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();}else{}}},_onHide:function(){this.domNode.style.cssText="";this.containerNode.innerHTML="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_26c,_26d,_26e,rtl){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_26c,_26d,_26e,rtl);};dijit.hideTooltip=function(_26f){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_26f);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],constructor:function(){this._nodeConnectionsById={};},_setConnectIdAttr:function(_270){for(var _271 in this._nodeConnectionsById){this.removeTarget(_271);}dojo.forEach(dojo.isArrayLike(_270)?_270:[_270],this.addTarget,this);},_getConnectIdAttr:function(){var ary=[];for(var id in this._nodeConnectionsById){ary.push(id);}return ary;},addTarget:function(id){var node=dojo.byId(id);if(!node){return;}if(node.id in this._nodeConnectionsById){return;}this._nodeConnectionsById[node.id]=[this.connect(node,"onmouseenter","_onTargetMouseEnter"),this.connect(node,"onmouseleave","_onTargetMouseLeave"),this.connect(node,"onfocus","_onTargetFocus"),this.connect(node,"onblur","_onTargetBlur")];},removeTarget:function(node){var id=node.id||node;if(id in this._nodeConnectionsById){dojo.forEach(this._nodeConnectionsById[id],this.disconnect,this);delete this._nodeConnectionsById[id];}},postCreate:function(){dojo.addClass(this.domNode,"dijitTooltipData");},startup:function(){this.inherited(arguments);var ids=this.connectId;dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);},_onTargetMouseEnter:function(e){this._onHover(e);},_onTargetMouseLeave:function(e){this._onUnHover(e);},_onTargetFocus:function(e){this._focus=true;this._onHover(e);},_onTargetBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _272=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_272);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_273){if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_273,this.position,!this.isLeftToRight());this._connectNode=_273;this.onShow(_273,this.position);},close:function(){if(this._connectNode){dijit.hideTooltip(this._connectNode);delete this._connectNode;this.onHide();}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},onShow:function(_274,_275){},onHide:function(){},uninitialize:function(){this.close();this.inherited(arguments);}});dijit.Tooltip.defaultPosition=["after","before"];}if(!dojo._hasResource["dijit.form.ValidationTextBox"]){dojo._hasResource["dijit.form.ValidationTextBox"]=true;dojo.provide("dijit.form.ValidationTextBox");dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{templateString:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",constraints:{},regExp:".*",regExpGen:function(_276){return this.regExp;},state:"",tooltipPosition:[],_setValueAttr:function(){this.inherited(arguments);this.validate(this._focused);},validator:function(_277,_278){return (new RegExp("^(?:"+this.regExpGen(_278)+")"+(this.required?"":"?")+"$")).test(_277)&&(!this.required||!this._isEmpty(_277))&&(this._isEmpty(_277)||this.parse(_277,_278)!==undefined);},_isValidSubset:function(){return this.textbox.value.search(this._partialre)==0;},isValid:function(_279){return this.validator(this.textbox.value,this.constraints);},_isEmpty:function(_27a){return /^\s*$/.test(_27a);},getErrorMessage:function(_27b){return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;},getPromptMessage:function(_27c){return this.promptMessage;},_maskValidSubsetError:true,validate:function(_27d){var _27e="";var _27f=this.disabled||this.isValid(_27d);if(_27f){this._maskValidSubsetError=true;}var _280=this._isEmpty(this.textbox.value);var _281=!_27f&&!_280&&_27d&&this._isValidSubset();this.state=((_27f||((!this._hasBeenBlurred||_27d)&&_280)||_281)&&this._maskValidSubsetError)?"":"Error";if(this.state=="Error"){this._maskValidSubsetError=_27d;}this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_27f?"false":"true");if(_27d){if(this.state=="Error"){_27e=this.getErrorMessage(true);}else{_27e=this.getPromptMessage(true);}this._maskValidSubsetError=true;}this.displayMessage(_27e);return _27f;},_message:"",displayMessage:function(_282){if(this._message==_282){return;}this._message=_282;dijit.hideTooltip(this.domNode);if(_282){dijit.showTooltip(_282,this.domNode,this.tooltipPosition,!this.isLeftToRight());}},_refreshState:function(){this.validate(this._focused);this.inherited(arguments);},constructor:function(){this.constraints={};},_setConstraintsAttr:function(_283){if(!_283.locale&&this.lang){_283.locale=this.lang;}this.constraints=_283;this._computePartialRE();},_computePartialRE:function(){var p=this.regExpGen(this.constraints);this.regExp=p;var _284="";if(p!=".*"){this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){switch(re.charAt(0)){case "{":case "+":case "?":case "*":case "^":case "$":case "|":case "(":_284+=re;break;case ")":_284+="|$)";break;default:_284+="(?:"+re+"|$)";break;}});}try{"".search(_284);}catch(e){_284=this.regExp;console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);}this._partialre="^(?:"+_284+")$";},postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);if(this.invalidMessage=="$_unset_$"){this.invalidMessage=this.messages.invalidMessage;}if(!this.invalidMessage){this.invalidMessage=this.promptMessage;}if(this.missingMessage=="$_unset_$"){this.missingMessage=this.messages.missingMessage;}if(!this.missingMessage){this.missingMessage=this.invalidMessage;}this._setConstraintsAttr(this.constraints);},_setDisabledAttr:function(_285){this.inherited(arguments);this._refreshState();},_setRequiredAttr:function(_286){this.required=_286;dijit.setWaiState(this.focusNode,"required",_286);this._refreshState();},reset:function(){this._maskValidSubsetError=true;this.inherited(arguments);},_onBlur:function(){this.displayMessage("");this.inherited(arguments);}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){this.inherited(arguments);this.nameAttrSetting="";},serialize:function(val,_287){return val.toString?val.toString():"";},toString:function(){var val=this.filter(this.get("value"));return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";},validate:function(){this.valueNode.value=this.toString();return this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name+"'":"")+">",this.textbox,"after");},reset:function(){this.valueNode.value="";this.inherited(arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_288,_289){return ("min" in _289?(this.compare(_288,_289.min)>=0):true)&&("max" in _289?(this.compare(_288,_289.max)<=0):true);},isInRange:function(_28a){return this.rangeCheck(this.get("value"),this.constraints);},_isDefinitelyOutOfRange:function(){var val=this.get("value");var _28b=false;var _28c=false;if("min" in this.constraints){var min=this.constraints.min;min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);_28b=(typeof min=="number")&&min<0;}if("max" in this.constraints){var max=this.constraints.max;max=this.compare(val,((typeof max!="number")||max>0)?max:0);_28c=(typeof max=="number")&&max>0;}return _28b||_28c;},_isValidSubset:function(){return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();},isValid:function(_28d){return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_28d));},getErrorMessage:function(_28e){var v=this.get("value");if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_28e)){return this.rangeMessage;}return this.inherited(arguments);},postMixInProperties:function(){this.inherited(arguments);if(!this.rangeMessage){this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);this.rangeMessage=this.messages.rangeMessage;}},_setConstraintsAttr:function(_28f){this.inherited(arguments);if(this.focusNode){if(this.constraints.min!==undefined){dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);}else{dijit.removeWaiState(this.focusNode,"valuemin");}if(this.constraints.max!==undefined){dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);}else{dijit.removeWaiState(this.focusNode,"valuemax");}}},_setValueAttr:function(_290,_291){dijit.setWaiState(this.focusNode,"valuenow",_290);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.ComboBox"]){dojo._hasResource["dijit.form.ComboBox"]=true;dojo.provide("dijit.form.ComboBox");dojo.declare("dijit.form.ComboBoxMixin",null,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/ComboBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",cssStateNodes:{"downArrowNode":"dijitDownArrowButton"},_getCaretPos:function(_292){var pos=0;if(typeof (_292.selectionStart)=="number"){pos=_292.selectionStart;}else{if(dojo.isIE){var tr=dojo.doc.selection.createRange().duplicate();var ntr=_292.createTextRange();tr.move("character",0);ntr.move("character",0);try{ntr.setEndPoint("EndToEnd",tr);pos=String(ntr.text).replace(/\r/g,"").length;}catch(e){}}}return pos;},_setCaretPos:function(_293,_294){_294=parseInt(_294);dijit.selectInputText(_293,_294,_294);},_setDisabledAttr:function(_295){this.inherited(arguments);dijit.setWaiState(this.comboNode,"disabled",_295);},_abortQuery:function(){if(this.searchTimer){clearTimeout(this.searchTimer);this.searchTimer=null;}if(this._fetchHandle){if(this._fetchHandle.abort){this._fetchHandle.abort();}this._fetchHandle=null;}},_onInput:function(evt){if(!this.searchTimer&&(evt.type=="paste"||evt.type=="input")&&this._lastInput!=this.textbox.value){this.searchTimer=setTimeout(dojo.hitch(this,function(){this._onKeyPress({charOrCode:229});}),100);}this.inherited(arguments);},_onKeyPress:function(evt){var key=evt.charOrCode;if(evt.altKey||((evt.ctrlKey||evt.metaKey)&&(key!="x"&&key!="v"))||key==dojo.keys.SHIFT){return;}var _296=false;var _297="_startSearchFromInput";var pw=this._popupWidget;var dk=dojo.keys;var _298=null;this._prev_key_backspace=false;this._abortQuery();if(this._isShowingNow){pw.handleKey(key);_298=pw.getHighlightedOption();}switch(key){case dk.PAGE_DOWN:case dk.DOWN_ARROW:case dk.PAGE_UP:case dk.UP_ARROW:if(!this._isShowingNow){_296=true;_297="_startSearchAll";}else{this._announceOption(_298);}dojo.stopEvent(evt);break;case dk.ENTER:if(_298){if(_298==pw.nextButton){this._nextSearch(1);dojo.stopEvent(evt);break;}else{if(_298==pw.previousButton){this._nextSearch(-1);dojo.stopEvent(evt);break;}}}else{this._setBlurValue();this._setCaretPos(this.focusNode,this.focusNode.value.length);}evt.preventDefault();case dk.TAB:var _299=this.get("displayedValue");if(pw&&(_299==pw._messages["previousMessage"]||_299==pw._messages["nextMessage"])){break;}if(_298){this._selectOption();}if(this._isShowingNow){this._lastQuery=null;this._hideResultList();}break;case " ":if(_298){dojo.stopEvent(evt);this._selectOption();this._hideResultList();}else{_296=true;}break;case dk.ESCAPE:if(this._isShowingNow){dojo.stopEvent(evt);this._hideResultList();}break;case dk.DELETE:case dk.BACKSPACE:this._prev_key_backspace=true;_296=true;break;default:_296=typeof key=="string"||key==229;}if(_296){this.item=undefined;this.searchTimer=setTimeout(dojo.hitch(this,_297),1);}},_autoCompleteText:function(text){var fn=this.focusNode;dijit.selectInputText(fn,fn.value.length);var _29a=this.ignoreCase?"toLowerCase":"substr";if(text[_29a](0).indexOf(this.focusNode.value[_29a](0))==0){var cpos=this._getCaretPos(fn);if((cpos+1)>fn.value.length){fn.value=text;dijit.selectInputText(fn,cpos);}}else{fn.value=text;dijit.selectInputText(fn);}},_openResultList:function(_29b,_29c){this._fetchHandle=null;if(this.disabled||this.readOnly||(_29c.query[this.searchAttr]!=this._lastQuery)){return;}this._popupWidget.clearResultList();if(!_29b.length&&!this._maxOptions){this._hideResultList();return;}_29c._maxOptions=this._maxOptions;var _29d=this._popupWidget.createOptions(_29b,_29c,dojo.hitch(this,"_getMenuLabelFromItem"));this._showResultList();if(_29c.direction){if(1==_29c.direction){this._popupWidget.highlightFirstOption();}else{if(-1==_29c.direction){this._popupWidget.highlightLastOption();}}this._announceOption(this._popupWidget.getHighlightedOption());}else{if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_29c.query[this.searchAttr])){this._announceOption(_29d[1]);}}},_showResultList:function(){this._hideResultList();this.displayMessage("");dojo.style(this._popupWidget.domNode,{width:"",height:""});var best=this.open();var _29e=dojo.marginBox(this._popupWidget.domNode);this._popupWidget.domNode.style.overflow=((best.h==_29e.h)&&(best.w==_29e.w))?"hidden":"auto";var _29f=best.w;if(best.h<this._popupWidget.domNode.scrollHeight){_29f+=16;}dojo.marginBox(this._popupWidget.domNode,{h:best.h,w:Math.max(_29f,this.domNode.offsetWidth)});if(_29f<this.domNode.offsetWidth){this._popupWidget.domNode.parentNode.style.left=dojo.position(this.domNode,true).x+"px";}dijit.setWaiState(this.comboNode,"expanded","true");},_hideResultList:function(){this._abortQuery();if(this._isShowingNow){dijit.popup.close(this._popupWidget);this._isShowingNow=false;dijit.setWaiState(this.comboNode,"expanded","false");dijit.removeWaiState(this.focusNode,"activedescendant");}},_setBlurValue:function(){var _2a0=this.get("displayedValue");var pw=this._popupWidget;if(pw&&(_2a0==pw._messages["previousMessage"]||_2a0==pw._messages["nextMessage"])){this._setValueAttr(this._lastValueReported,true);}else{if(typeof this.item=="undefined"){this.item=null;this.set("displayedValue",_2a0);}else{if(this.value!=this._lastValueReported){dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);}this._refreshState();}}},_onBlur:function(){this._hideResultList();this.inherited(arguments);},_setItemAttr:function(item,_2a1,_2a2){if(!_2a2){_2a2=this.labelFunc(item,this.store);}this.value=this._getValueField()!=this.searchAttr?this.store.getIdentity(item):_2a2;this.item=item;dijit.form.ComboBox.superclass._setValueAttr.call(this,this.value,_2a1,_2a2);},_announceOption:function(node){if(!node){return;}var _2a3;if(node==this._popupWidget.nextButton||node==this._popupWidget.previousButton){_2a3=node.innerHTML;this.item=undefined;this.value="";}else{_2a3=this.labelFunc(node.item,this.store);this.set("item",node.item,false,_2a3);}this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(node,"id"));this._autoCompleteText(_2a3);},_selectOption:function(evt){if(evt){this._announceOption(evt.target);}this._hideResultList();this._setCaretPos(this.focusNode,this.focusNode.value.length);dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);},_onArrowMouseDown:function(evt){if(this.disabled||this.readOnly){return;}dojo.stopEvent(evt);this.focus();if(this._isShowingNow){this._hideResultList();}else{this._startSearchAll();}},_startSearchAll:function(){this._startSearch("");},_startSearchFromInput:function(){this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));},_getQueryString:function(text){return dojo.string.substitute(this.queryExpr,[text]);},_startSearch:function(key){if(!this._popupWidget){var _2a4=this.id+"_popup";this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption),id:_2a4,dir:this.dir});dijit.removeWaiState(this.focusNode,"activedescendant");dijit.setWaiState(this.textbox,"owns",_2a4);}var _2a5=dojo.clone(this.query);this._lastInput=key;this._lastQuery=_2a5[this.searchAttr]=this._getQueryString(key);this.searchTimer=setTimeout(dojo.hitch(this,function(_2a6,_2a7){this.searchTimer=null;var _2a8={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_2a6,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_2a9){_2a7._fetchHandle=null;console.error("dijit.form.ComboBox: "+_2a9);dojo.hitch(_2a7,"_hideResultList")();},start:0,count:this.pageSize};dojo.mixin(_2a8,_2a7.fetchProperties);this._fetchHandle=_2a7.store.fetch(_2a8);var _2aa=function(_2ab,_2ac){_2ab.start+=_2ab.count*_2ac;_2ab.direction=_2ac;this._fetchHandle=this.store.fetch(_2ab);};this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,_2aa,this._fetchHandle);},_2a5,this),this.searchDelay);},_setMaxOptions:function(size,_2ad){this._maxOptions=size;},_getValueField:function(){return this.searchAttr;},compositionend:function(evt){this._onKeyPress({charOrCode:229});},constructor:function(){this.query={};this.fetchProperties={};},postMixInProperties:function(){if(!this.store){var _2ae=this.srcNodeRef;this.store=new dijit.form._ComboBoxDataStore(_2ae);if(!("value" in this.params)){var item=this.store.fetchSelectedItem();if(item){var _2af=this._getValueField();this.value=_2af!=this.searchAttr?this.store.getValue(item,_2af):this.labelFunc(item,this.store);}}}this.inherited(arguments);},postCreate:function(){if(!this.hasDownArrow){this.downArrowNode.style.display="none";}var _2b0=dojo.query("label[for=\""+this.id+"\"]");if(_2b0.length){_2b0[0].id=(this.id+"_label");var cn=this.comboNode;dijit.setWaiState(cn,"labelledby",_2b0[0].id);}this.inherited(arguments);},uninitialize:function(){if(this._popupWidget&&!this._popupWidget._destroyed){this._hideResultList();this._popupWidget.destroy();}this.inherited(arguments);},_getMenuLabelFromItem:function(item){var _2b1=this.labelAttr?this.store.getValue(item,this.labelAttr):this.labelFunc(item,this.store);var _2b2=this.labelType;if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){_2b1=this.doHighlight(_2b1,this._escapeHtml(this._lastInput));_2b2="html";}return {html:_2b2=="html",label:_2b1};},doHighlight:function(_2b3,find){var _2b4="i"+(this.highlightMatch=="all"?"g":"");var _2b5=this._escapeHtml(_2b3);find=dojo.regexp.escapeString(find);var ret=_2b5.replace(new RegExp("(^|\\s)("+find+")",_2b4),"$1<span class=\"dijitComboBoxHighlightMatch\">$2</span>");return ret;},_escapeHtml:function(str){str=String(str).replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");return str;},open:function(){this._isShowingNow=true;return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});},reset:function(){this.item=null;this.inherited(arguments);},labelFunc:function(item,_2b6){return _2b6.getValue(item,this.searchAttr).toString();}});dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);this.inherited(arguments);},_setValueAttr:function(_2b7){this.value=_2b7;this.onChange(_2b7);},onChange:function(_2b8){},onPage:function(_2b9){},postCreate:function(){this.previousButton.innerHTML=this._messages["previousMessage"];this.nextButton.innerHTML=this._messages["nextMessage"];this.inherited(arguments);},onClose:function(){this._blurOptionNode();},_createOption:function(item,_2ba){var _2bb=_2ba(item);var _2bc=dojo.doc.createElement("li");dijit.setWaiRole(_2bc,"option");if(_2bb.html){_2bc.innerHTML=_2bb.label;}else{_2bc.appendChild(dojo.doc.createTextNode(_2bb.label));}if(_2bc.innerHTML==""){_2bc.innerHTML="&nbsp;";}_2bc.item=item;return _2bc;},createOptions:function(_2bd,_2be,_2bf){this.previousButton.style.display=(_2be.start==0)?"none":"";dojo.attr(this.previousButton,"id",this.id+"_prev");dojo.forEach(_2bd,function(item,i){var _2c0=this._createOption(item,_2bf);_2c0.className="dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl");dojo.attr(_2c0,"id",this.id+i);this.domNode.insertBefore(_2c0,this.nextButton);},this);var _2c1=false;if(_2be._maxOptions&&_2be._maxOptions!=-1){if((_2be.start+_2be.count)<_2be._maxOptions){_2c1=true;}else{if((_2be.start+_2be.count)>_2be._maxOptions&&_2be.count==_2bd.length){_2c1=true;}}}else{if(_2be.count==_2bd.length){_2c1=true;}}this.nextButton.style.display=_2c1?"":"none";dojo.attr(this.nextButton,"id",this.id+"_next");return this.domNode.childNodes;},clearResultList:function(){while(this.domNode.childNodes.length>2){this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);}},_onMouseDown:function(evt){dojo.stopEvent(evt);},_onMouseUp:function(evt){if(evt.target===this.domNode||!this._highlighted_option){return;}else{if(evt.target==this.previousButton){this.onPage(-1);}else{if(evt.target==this.nextButton){this.onPage(1);}else{var tgt=evt.target;while(!tgt.item){tgt=tgt.parentNode;}this._setValueAttr({target:tgt},true);}}}},_onMouseOver:function(evt){if(evt.target===this.domNode){return;}var tgt=evt.target;if(!(tgt==this.previousButton||tgt==this.nextButton)){while(!tgt.item){tgt=tgt.parentNode;}}this._focusOptionNode(tgt);},_onMouseOut:function(evt){if(evt.target===this.domNode){return;}this._blurOptionNode();},_focusOptionNode:function(node){if(this._highlighted_option!=node){this._blurOptionNode();this._highlighted_option=node;dojo.addClass(this._highlighted_option,"dijitMenuItemSelected");}},_blurOptionNode:function(){if(this._highlighted_option){dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");this._highlighted_option=null;}},_highlightNextOption:function(){if(!this.getHighlightedOption()){var fc=this.domNode.firstChild;this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);}else{var ns=this._highlighted_option.nextSibling;if(ns&&ns.style.display!="none"){this._focusOptionNode(ns);}else{this.highlightFirstOption();}}dojo.window.scrollIntoView(this._highlighted_option);},highlightFirstOption:function(){var _2c2=this.domNode.firstChild;var _2c3=_2c2.nextSibling;this._focusOptionNode(_2c3.style.display=="none"?_2c2:_2c3);dojo.window.scrollIntoView(this._highlighted_option);},highlightLastOption:function(){this._focusOptionNode(this.domNode.lastChild.previousSibling);dojo.window.scrollIntoView(this._highlighted_option);},_highlightPrevOption:function(){if(!this.getHighlightedOption()){var lc=this.domNode.lastChild;this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);}else{var ps=this._highlighted_option.previousSibling;if(ps&&ps.style.display!="none"){this._focusOptionNode(ps);}else{this.highlightLastOption();}}dojo.window.scrollIntoView(this._highlighted_option);},_page:function(up){var _2c4=0;var _2c5=this.domNode.scrollTop;var _2c6=dojo.style(this.domNode,"height");if(!this.getHighlightedOption()){this._highlightNextOption();}while(_2c4<_2c6){if(up){if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){break;}this._highlightPrevOption();}else{if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){break;}this._highlightNextOption();}var _2c7=this.domNode.scrollTop;_2c4+=(_2c7-_2c5)*(up?-1:1);_2c5=_2c7;}},pageUp:function(){this._page(true);},pageDown:function(){this._page(false);},getHighlightedOption:function(){var ho=this._highlighted_option;return (ho&&ho.parentNode)?ho:null;},handleKey:function(key){switch(key){case dojo.keys.DOWN_ARROW:this._highlightNextOption();break;case dojo.keys.PAGE_DOWN:this.pageDown();break;case dojo.keys.UP_ARROW:this._highlightPrevOption();break;case dojo.keys.PAGE_UP:this.pageUp();break;}}});dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_2c8,_2c9,_2ca){this.item=null;if(!_2c8){_2c8="";}dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_2c8,_2c9,_2ca);}});dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(root){this.root=root;if(root.tagName!="SELECT"&&root.firstChild){root=dojo.query("select",root);if(root.length>0){root=root[0];}else{this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";root=this.root.firstChild;}this.root=root;}dojo.query("> option",root).forEach(function(node){node.innerHTML=dojo.trim(node.innerHTML);});},getValue:function(item,_2cb,_2cc){return (_2cb=="value")?item.value:(item.innerText||item.textContent||"");},isItemLoaded:function(_2cd){return true;},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};},_fetchItems:function(args,_2ce,_2cf){if(!args.query){args.query={};}if(!args.query.name){args.query.name="";}if(!args.queryOptions){args.queryOptions={};}var _2d0=dojo.data.util.filter.patternToRegExp(args.query.name,args.queryOptions.ignoreCase),_2d1=dojo.query("> option",this.root).filter(function(_2d2){return (_2d2.innerText||_2d2.textContent||"").match(_2d0);});if(args.sort){_2d1.sort(dojo.data.util.sorter.createSortFunction(args.sort,this));}_2ce(_2d1,args);},close:function(_2d3){return;},getLabel:function(item){return item.innerHTML;},getIdentity:function(item){return dojo.attr(item,"value");},fetchItemByIdentity:function(args){var item=dojo.query("> option[value='"+args.identity+"']",this.root)[0];args.onItem(item);},fetchSelectedItem:function(){var root=this.root,si=root.selectedIndex;return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",root)[0]:null;}});dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dijit.form.FilteringSelect"]){dojo._hasResource["dijit.form.FilteringSelect"]=true;dojo.provide("dijit.form.FilteringSelect");dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{_isvalid:true,required:true,_lastDisplayedValue:"",isValid:function(){return this._isvalid||(!this.required&&this.get("displayedValue")=="");},_refreshState:function(){if(!this.searchTimer){this.inherited(arguments);}},_callbackSetLabel:function(_2d4,_2d5,_2d6){if((_2d5&&_2d5.query[this.searchAttr]!=this._lastQuery)||(!_2d5&&_2d4.length&&this.store.getIdentity(_2d4[0])!=this._lastQuery)){return;}if(!_2d4.length){this.valueNode.value="";dijit.form.TextBox.superclass._setValueAttr.call(this,"",_2d6||(_2d6===undefined&&!this._focused));this._isvalid=false;this.validate(this._focused);this.item=null;}else{this.set("item",_2d4[0],_2d6);}},_openResultList:function(_2d7,_2d8){if(_2d8.query[this.searchAttr]!=this._lastQuery){return;}if(this.item===undefined){this._isvalid=_2d7.length!=0||this._maxOptions!=0;this.validate(true);}dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);},_getValueAttr:function(){return this.valueNode.value;},_getValueField:function(){return "value";},_setValueAttr:function(_2d9,_2da){if(!this._onChangeActive){_2da=null;}this._lastQuery=_2d9;if(_2d9===null||_2d9===""){this._setDisplayedValueAttr("",_2da);return;}var self=this;this.store.fetchItemByIdentity({identity:_2d9,onItem:function(item){self._callbackSetLabel(item?[item]:[],undefined,_2da);}});},_setItemAttr:function(item,_2db,_2dc){this._isvalid=true;this.inherited(arguments);this.valueNode.value=this.value;this._lastDisplayedValue=this.textbox.value;},_getDisplayQueryString:function(text){return text.replace(/([\\\*\?])/g,"\\$1");},_setDisplayedValueAttr:function(_2dd,_2de){if(!this._created){_2de=false;}if(this.store){this._hideResultList();var _2df=dojo.clone(this.query);this._lastQuery=_2df[this.searchAttr]=this._getDisplayQueryString(_2dd);this.textbox.value=_2dd;this._lastDisplayedValue=_2dd;var _2e0=this;var _2e1={query:_2df,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_2e2,_2e3){_2e0._fetchHandle=null;dojo.hitch(_2e0,"_callbackSetLabel")(_2e2,_2e3,_2de);},onError:function(_2e4){_2e0._fetchHandle=null;console.error("dijit.form.FilteringSelect: "+_2e4);dojo.hitch(_2e0,"_callbackSetLabel")([],undefined,false);}};dojo.mixin(_2e1,this.fetchProperties);this._fetchHandle=this.store.fetch(_2e1);}},postMixInProperties:function(){this.inherited(arguments);this._isvalid=!this.required;},undo:function(){this.set("displayedValue",this._lastDisplayedValue);}});}if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){dojo._hasResource["dojo.data.ItemFileReadStore"]=true;dojo.provide("dojo.data.ItemFileReadStore");dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_2e5){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_2e5.url;this._ccUrl=_2e5.url;this.url=_2e5.url;this._jsonData=_2e5.data;this.data=null;this._datatypeMap=_2e5.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_2e6){return dojo.date.stamp.fromISOString(_2e6);}};}this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};this._itemsByIdentity=null;this._storeRefPropName="_S";this._itemNumPropName="_0";this._rootItemPropName="_RI";this._reverseRefMap="_RRM";this._loadInProgress=false;this._queuedFetches=[];if(_2e5.urlPreventCache!==undefined){this.urlPreventCache=_2e5.urlPreventCache?true:false;}if(_2e5.hierarchical!==undefined){this.hierarchical=_2e5.hierarchical?true:false;}if(_2e5.clearOnClose){this.clearOnClose=true;}if("failOk" in _2e5){this.failOk=_2e5.failOk?true:false;}},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(item){if(!this.isItem(item)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_2e7){if(typeof _2e7!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(item,_2e8,_2e9){var _2ea=this.getValues(item,_2e8);return (_2ea.length>0)?_2ea[0]:_2e9;},getValues:function(item,_2eb){this._assertIsItem(item);this._assertIsAttribute(_2eb);return (item[_2eb]||[]).slice(0);},getAttributes:function(item){this._assertIsItem(item);var _2ec=[];for(var key in item){if((key!==this._storeRefPropName)&&(key!==this._itemNumPropName)&&(key!==this._rootItemPropName)&&(key!==this._reverseRefMap)){_2ec.push(key);}}return _2ec;},hasAttribute:function(item,_2ed){this._assertIsItem(item);this._assertIsAttribute(_2ed);return (_2ed in item);},containsValue:function(item,_2ee,_2ef){var _2f0=undefined;if(typeof _2ef==="string"){_2f0=dojo.data.util.filter.patternToRegExp(_2ef,false);}return this._containsValue(item,_2ee,_2ef,_2f0);},_containsValue:function(item,_2f1,_2f2,_2f3){return dojo.some(this.getValues(item,_2f1),function(_2f4){if(_2f4!==null&&!dojo.isObject(_2f4)&&_2f3){if(_2f4.toString().match(_2f3)){return true;}}else{if(_2f2===_2f4){return true;}}});},isItem:function(_2f5){if(_2f5&&_2f5[this._storeRefPropName]===this){if(this._arrayOfAllItems[_2f5[this._itemNumPropName]]===_2f5){return true;}}return false;},isItemLoaded:function(_2f6){return this.isItem(_2f6);},loadItem:function(_2f7){this._assertIsItem(_2f7.item);},getFeatures:function(){return this._features;},getLabel:function(item){if(this._labelAttr&&this.isItem(item)){return this.getValue(item,this._labelAttr);}return undefined;},getLabelAttributes:function(item){if(this._labelAttr){return [this._labelAttr];}return null;},_fetchItems:function(_2f8,_2f9,_2fa){var self=this,_2fb=function(_2fc,_2fd){var _2fe=[],i,key;if(_2fc.query){var _2ff,_300=_2fc.queryOptions?_2fc.queryOptions.ignoreCase:false;var _301={};for(key in _2fc.query){_2ff=_2fc.query[key];if(typeof _2ff==="string"){_301[key]=dojo.data.util.filter.patternToRegExp(_2ff,_300);}else{if(_2ff instanceof RegExp){_301[key]=_2ff;}}}for(i=0;i<_2fd.length;++i){var _302=true;var _303=_2fd[i];if(_303===null){_302=false;}else{for(key in _2fc.query){_2ff=_2fc.query[key];if(!self._containsValue(_303,key,_2ff,_301[key])){_302=false;}}}if(_302){_2fe.push(_303);}}_2f9(_2fe,_2fc);}else{for(i=0;i<_2fd.length;++i){var item=_2fd[i];if(item!==null){_2fe.push(item);}}_2f9(_2fe,_2fc);}};if(this._loadFinished){_2fb(_2f8,this._getItemsArray(_2f8.queryOptions));}else{if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_2f8,filter:_2fb});}else{this._loadInProgress=true;var _304={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _305=dojo.xhrGet(_304);_305.addCallback(function(data){try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;_2fb(_2f8,self._getItemsArray(_2f8.queryOptions));self._handleQueuedFetches();}catch(e){self._loadFinished=true;self._loadInProgress=false;_2fa(e,_2f8);}});_305.addErrback(function(_306){self._loadInProgress=false;_2fa(_306,_2f8);});var _307=null;if(_2f8.abort){_307=_2f8.abort;}_2f8.abort=function(){var df=_305;if(df&&df.fired===-1){df.cancel();df=null;}if(_307){_307.call(_2f8);}};}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_2fb(_2f8,this._getItemsArray(_2f8.queryOptions));}catch(e){_2fa(e,_2f8);}}else{_2fa(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_2f8);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _308=this._queuedFetches[i],_309=_308.args,_30a=_308.filter;if(_30a){_30a(_309,this._getItemsArray(_309.queryOptions));}else{this.fetchItemByIdentity(_309);}}this._queuedFetches=[];}},_getItemsArray:function(_30b){if(_30b&&_30b.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_30c){if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){}this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._itemsByIdentity=null;this._loadInProgress=false;this._queuedFetches=[];}},_getItemsFromLoadedData:function(_30d){var _30e=false,self=this;function _30f(_310){var _311=((_310!==null)&&(typeof _310==="object")&&(!dojo.isArray(_310)||_30e)&&(!dojo.isFunction(_310))&&(_310.constructor==Object||dojo.isArray(_310))&&(typeof _310._reference==="undefined")&&(typeof _310._type==="undefined")&&(typeof _310._value==="undefined")&&self.hierarchical);return _311;};function _312(_313){self._arrayOfAllItems.push(_313);for(var _314 in _313){var _315=_313[_314];if(_315){if(dojo.isArray(_315)){var _316=_315;for(var k=0;k<_316.length;++k){var _317=_316[k];if(_30f(_317)){_312(_317);}}}else{if(_30f(_315)){_312(_315);}}}}};this._labelAttr=_30d.label;var i,item;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_30d.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){item=this._arrayOfTopLevelItems[i];if(dojo.isArray(item)){_30e=true;}_312(item);item[this._rootItemPropName]=true;}var _318={},key;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){if(key!==this._rootItemPropName){var _319=item[key];if(_319!==null){if(!dojo.isArray(_319)){item[key]=[_319];}}else{item[key]=[null];}}_318[key]=key;}}while(_318[this._storeRefPropName]){this._storeRefPropName+="_";}while(_318[this._itemNumPropName]){this._itemNumPropName+="_";}while(_318[this._reverseRefMap]){this._reverseRefMap+="_";}var _31a;var _31b=_30d.identifier;if(_31b){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_31b;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];_31a=item[_31b];var _31c=_31a[0];if(!this._itemsByIdentity[_31c]){this._itemsByIdentity[_31c]=item;}else{if(this._jsonFileUrl){throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: ["+this._jsonFileUrl+"] is malformed.  Items within the list have identifier: ["+_31b+"].  Value collided: ["+_31c+"]");}else{if(this._jsonData){throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: ["+_31b+"].  Value collided: ["+_31c+"]");}}}}}else{this._features["dojo.data.api.Identity"]=Number;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];item[this._storeRefPropName]=this;item[this._itemNumPropName]=i;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){_31a=item[key];for(var j=0;j<_31a.length;++j){_319=_31a[j];if(_319!==null&&typeof _319=="object"){if(("_type" in _319)&&("_value" in _319)){var type=_319._type;var _31d=this._datatypeMap[type];if(!_31d){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+type+"'");}else{if(dojo.isFunction(_31d)){_31a[j]=new _31d(_319._value);}else{if(dojo.isFunction(_31d.deserialize)){_31a[j]=_31d.deserialize(_319._value);}else{throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");}}}}if(_319._reference){var _31e=_319._reference;if(!dojo.isObject(_31e)){_31a[j]=this._getItemByIdentity(_31e);}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _31f=this._arrayOfAllItems[k],_320=true;for(var _321 in _31e){if(_31f[_321]!=_31e[_321]){_320=false;}}if(_320){_31a[j]=_31f;}}}if(this.referenceIntegrity){var _322=_31a[j];if(this.isItem(_322)){this._addReferenceToMap(_322,item,key);}}}else{if(this.isItem(_319)){if(this.referenceIntegrity){this._addReferenceToMap(_319,item,key);}}}}}}}},_addReferenceToMap:function(_323,_324,_325){},getIdentity:function(item){var _326=this._features["dojo.data.api.Identity"];if(_326===Number){return item[this._itemNumPropName];}else{var _327=item[_326];if(_327){return _327[0];}}return null;},fetchItemByIdentity:function(_328){var item,_329;if(!this._loadFinished){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_328});}else{this._loadInProgress=true;var _32a={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _32b=dojo.xhrGet(_32a);_32b.addCallback(function(data){var _32c=_328.scope?_328.scope:dojo.global;try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;item=self._getItemByIdentity(_328.identity);if(_328.onItem){_328.onItem.call(_32c,item);}self._handleQueuedFetches();}catch(error){self._loadInProgress=false;if(_328.onError){_328.onError.call(_32c,error);}}});_32b.addErrback(function(_32d){self._loadInProgress=false;if(_328.onError){var _32e=_328.scope?_328.scope:dojo.global;_328.onError.call(_32e,_32d);}});}}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;item=self._getItemByIdentity(_328.identity);if(_328.onItem){_329=_328.scope?_328.scope:dojo.global;_328.onItem.call(_329,item);}}}}else{item=this._getItemByIdentity(_328.identity);if(_328.onItem){_329=_328.scope?_328.scope:dojo.global;_328.onItem.call(_329,item);}}},_getItemByIdentity:function(_32f){var item=null;if(this._itemsByIdentity){item=this._itemsByIdentity[_32f];}else{item=this._arrayOfAllItems[_32f];}if(item===undefined){item=null;}return item;},getIdentityAttributes:function(item){var _330=this._features["dojo.data.api.Identity"];if(_330===Number){return null;}else{return [_330];}},_forceLoad:function(){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){var _331={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};var _332=dojo.xhrGet(_331);_332.addCallback(function(data){try{if(self._loadInProgress!==true&&!self._loadFinished){self._getItemsFromLoadedData(data);self._loadFinished=true;}else{if(self._loadInProgress){throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");}}}catch(e){throw e;}});_332.addErrback(function(_333){throw _333;});}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;}}}});dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){dojo._hasResource["dijit._editor.plugins.FontChoice"]=true;dojo.provide("dijit._editor.plugins.FontChoice");dojo.declare("dijit._editor.plugins._FontDropDown",[dijit._Widget,dijit._Templated],{label:"",widgetsInTemplate:true,plainText:false,templateString:"<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>"+"<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>"+"<input dojoType='dijit.form.FilteringSelect' required=false labelType=html labelAttr=label searchAttr=name "+"tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>"+"</span>",postMixInProperties:function(){this.inherited(arguments);this.strings=dojo.i18n.getLocalization("dijit._editor","FontChoice");this.label=this.strings[this.command];this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));this.selectId=this.id+"_select";this.inherited(arguments);},postCreate:function(){var _334=dojo.map(this.values,function(_335){var name=this.strings[_335]||_335;return {label:this.getLabel(_335,name),name:name,value:_335};},this);this.select.store=new dojo.data.ItemFileReadStore({data:{identifier:"value",items:_334}});this.select.set("value","",false);this.disabled=this.select.get("disabled");},_setValueAttr:function(_336,_337){_337=_337!==false?true:false;this.select.set("value",dojo.indexOf(this.values,_336)<0?"":_336,_337);if(!_337){this.select._lastValueReported=null;}},_getValueAttr:function(){return this.select.get("value");},focus:function(){this.select.focus();},_setDisabledAttr:function(_338){this.disabled=_338;this.select.set("disabled",_338);}});dojo.declare("dijit._editor.plugins._FontNameDropDown",dijit._editor.plugins._FontDropDown,{generic:false,command:"fontName",postMixInProperties:function(){if(!this.values){this.values=this.generic?["serif","sans-serif","monospace","cursive","fantasy"]:["Arial","Times New Roman","Comic Sans MS","Courier New"];}this.inherited(arguments);},getLabel:function(_339,name){if(this.plainText){return name;}else{return "<div style='font-family: "+_339+"'>"+name+"</div>";}},_setValueAttr:function(_33a,_33b){_33b=_33b!==false?true:false;if(this.generic){var map={"Arial":"sans-serif","Helvetica":"sans-serif","Myriad":"sans-serif","Times":"serif","Times New Roman":"serif","Comic Sans MS":"cursive","Apple Chancery":"cursive","Courier":"monospace","Courier New":"monospace","Papyrus":"fantasy"};_33a=map[_33a]||_33a;}this.inherited(arguments,[_33a,_33b]);}});dojo.declare("dijit._editor.plugins._FontSizeDropDown",dijit._editor.plugins._FontDropDown,{command:"fontSize",values:[1,2,3,4,5,6,7],getLabel:function(_33c,name){if(this.plainText){return name;}else{return "<font size="+_33c+"'>"+name+"</font>";}},_setValueAttr:function(_33d,_33e){_33e=_33e!==false?true:false;if(_33d.indexOf&&_33d.indexOf("px")!=-1){var _33f=parseInt(_33d,10);_33d={10:1,13:2,16:3,18:4,24:5,32:6,48:7}[_33f]||_33d;}this.inherited(arguments,[_33d,_33e]);}});dojo.declare("dijit._editor.plugins._FormatBlockDropDown",dijit._editor.plugins._FontDropDown,{command:"formatBlock",values:["noFormat","p","h1","h2","h3","pre"],postCreate:function(){this.inherited(arguments);this.set("value","noFormat",false);},getLabel:function(_340,name){if(this.plainText){return name;}else{return "<"+_340+">"+name+"</"+_340+">";}},_execCommand:function(_341,_342,_343){if(_343==="noFormat"){var _344;var end;var sel=dijit.range.getSelection(_341.window);if(sel&&sel.rangeCount>0){var _345=sel.getRangeAt(0);var node,tag;if(_345){_344=_345.startContainer;end=_345.endContainer;while(_344&&_344!==_341.editNode&&_344!==_341.document.body&&_344.nodeType!==1){_344=_344.parentNode;}while(end&&end!==_341.editNode&&end!==_341.document.body&&end.nodeType!==1){end=end.parentNode;}var _346=dojo.hitch(this,function(node,_347){if(node.childNodes&&node.childNodes.length){var i;for(i=0;i<node.childNodes.length;i++){var c=node.childNodes[i];if(c.nodeType==1){if(dojo.withGlobal(_341.window,"inSelection",dijit._editor.selection,[c])){var tag=c.tagName?c.tagName.toLowerCase():"";if(dojo.indexOf(this.values,tag)!==-1){_347.push(c);}_346(c,_347);}}}}});var _348=dojo.hitch(this,function(_349){if(_349&&_349.length){_341.beginEditing();while(_349.length){this._removeFormat(_341,_349.pop());}_341.endEditing();}});var _34a=[];if(_344==end){var _34b;node=_344;while(node&&node!==_341.editNode&&node!==_341.document.body){if(node.nodeType==1){tag=node.tagName?node.tagName.toLowerCase():"";if(dojo.indexOf(this.values,tag)!==-1){_34b=node;break;}}node=node.parentNode;}_346(_344,_34a);if(_34b){_34a=[_34b].concat(_34a);}_348(_34a);}else{node=_344;while(dojo.withGlobal(_341.window,"inSelection",dijit._editor.selection,[node])){if(node.nodeType==1){tag=node.tagName?node.tagName.toLowerCase():"";if(dojo.indexOf(this.values,tag)!==-1){_34a.push(node);}_346(node,_34a);}node=node.nextSibling;}_348(_34a);}_341.onDisplayChanged();}}}else{_341.execCommand(_342,_343);}},_removeFormat:function(_34c,node){if(_34c.customUndo){while(node.firstChild){dojo.place(node.firstChild,node,"before");}node.parentNode.removeChild(node);}else{dojo.withGlobal(_34c.window,"selectElementChildren",dijit._editor.selection,[node]);var html=dojo.withGlobal(_34c.window,"getSelectedHtml",dijit._editor.selection,[null]);dojo.withGlobal(_34c.window,"selectElement",dijit._editor.selection,[node]);_34c.execCommand("inserthtml",html||"");}}});dojo.declare("dijit._editor.plugins.FontChoice",dijit._editor._Plugin,{useDefaultCommand:false,_initButton:function(){var _34d={fontName:dijit._editor.plugins._FontNameDropDown,fontSize:dijit._editor.plugins._FontSizeDropDown,formatBlock:dijit._editor.plugins._FormatBlockDropDown}[this.command],_34e=this.params;if(this.params.custom){_34e.values=this.params.custom;}var _34f=this.editor;this.button=new _34d(dojo.delegate({dir:_34f.dir,lang:_34f.lang},_34e));this.connect(this.button.select,"onChange",function(_350){this.editor.focus();if(this.command=="fontName"&&_350.indexOf(" ")!=-1){_350="'"+_350+"'";}if(this.button._execCommand){this.button._execCommand(this.editor,this.command,_350);}else{this.editor.execCommand(this.command,_350);}this.editor.customUndo=this.editor.customUndo||dojo.isWebKit;});},updateState:function(){var _351=this.editor;var _352=this.command;if(!_351||!_351.isLoaded||!_352.length){return;}if(this.button){var _353;try{_353=_351.queryCommandValue(_352)||"";}catch(e){_353="";}var _354=dojo.isString(_353)&&_353.match(/'([^']*)'/);if(_354){_353=_354[1];}if(_352==="formatBlock"){if(!_353||_353=="p"){_353=null;var elem;var sel=dijit.range.getSelection(this.editor.window);if(sel&&sel.rangeCount>0){var _355=sel.getRangeAt(0);if(_355){elem=_355.endContainer;}}while(elem&&elem!==_351.editNode&&elem!==_351.document){var tg=elem.tagName?elem.tagName.toLowerCase():"";if(tg&&dojo.indexOf(this.button.values,tg)>-1){_353=tg;break;}elem=elem.parentNode;}if(!_353){_353="noFormat";}}else{if(dojo.indexOf(this.button.values,_353)<0){_353="noFormat";}}}if(_353!==this.button.get("value")){this.button.set("value",_353,false);}}}});dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){if(o.plugin){return;}switch(o.args.name){case "fontName":case "fontSize":case "formatBlock":o.plugin=new dijit._editor.plugins.FontChoice({command:o.args.name,plainText:o.args.plainText?o.args.plainText:false});}});}if(!dojo._hasResource["dijit.form._FormSelectWidget"]){dojo._hasResource["dijit.form._FormSelectWidget"]=true;dojo.provide("dijit.form._FormSelectWidget");dojo.declare("dijit.form._FormSelectWidget",dijit.form._FormValueWidget,{multiple:false,options:null,store:null,query:null,queryOptions:null,onFetch:null,sortByLabel:true,loadChildrenOnOpen:false,getOptions:function(_356){var _357=_356,opts=this.options||[],l=opts.length;if(_357===undefined){return opts;}if(dojo.isArray(_357)){return dojo.map(_357,"return this.getOptions(item);",this);}if(dojo.isObject(_356)){if(!dojo.some(this.options,function(o,idx){if(o===_357||(o.value&&o.value===_357.value)){_357=idx;return true;}return false;})){_357=-1;}}if(typeof _357=="string"){for(var i=0;i<l;i++){if(opts[i].value===_357){_357=i;break;}}}if(typeof _357=="number"&&_357>=0&&_357<l){return this.options[_357];}return null;},addOption:function(_358){if(!dojo.isArray(_358)){_358=[_358];}dojo.forEach(_358,function(i){if(i&&dojo.isObject(i)){this.options.push(i);}},this);this._loadChildren();},removeOption:function(_359){if(!dojo.isArray(_359)){_359=[_359];}var _35a=this.getOptions(_359);dojo.forEach(_35a,function(i){if(i){this.options=dojo.filter(this.options,function(node,idx){return (node.value!==i.value);});this._removeOptionItem(i);}},this);this._loadChildren();},updateOption:function(_35b){if(!dojo.isArray(_35b)){_35b=[_35b];}dojo.forEach(_35b,function(i){var _35c=this.getOptions(i),k;if(_35c){for(k in i){_35c[k]=i[k];}}},this);this._loadChildren();},setStore:function(_35d,_35e,_35f){var _360=this.store;_35f=_35f||{};if(_360!==_35d){dojo.forEach(this._notifyConnections||[],dojo.disconnect);delete this._notifyConnections;if(_35d&&_35d.getFeatures()["dojo.data.api.Notification"]){this._notifyConnections=[dojo.connect(_35d,"onNew",this,"_onNewItem"),dojo.connect(_35d,"onDelete",this,"_onDeleteItem"),dojo.connect(_35d,"onSet",this,"_onSetItem")];}this.store=_35d;}this._onChangeActive=false;if(this.options&&this.options.length){this.removeOption(this.options);}if(_35d){var cb=function(_361){if(this.sortByLabel&&!_35f.sort&&_361.length){_361.sort(dojo.data.util.sorter.createSortFunction([{attribute:_35d.getLabelAttributes(_361[0])[0]}],_35d));}if(_35f.onFetch){_361=_35f.onFetch(_361);}dojo.forEach(_361,function(i){this._addOptionForItem(i);},this);this._loadingStore=false;this.set("value",(("_pendingValue" in this)?this._pendingValue:_35e));delete this._pendingValue;if(!this.loadChildrenOnOpen){this._loadChildren();}else{this._pseudoLoadChildren(_361);}this._fetchedWith=opts;this._lastValueReported=this.multiple?[]:null;this._onChangeActive=true;this.onSetStore();this._handleOnChange(this.value);};var opts=dojo.mixin({onComplete:cb,scope:this},_35f);this._loadingStore=true;_35d.fetch(opts);}else{delete this._fetchedWith;}return _360;},_setValueAttr:function(_362,_363){if(this._loadingStore){this._pendingValue=_362;return;}var opts=this.getOptions()||[];if(!dojo.isArray(_362)){_362=[_362];}dojo.forEach(_362,function(i,idx){if(!dojo.isObject(i)){i=i+"";}if(typeof i==="string"){_362[idx]=dojo.filter(opts,function(node){return node.value===i;})[0]||{value:"",label:""};}},this);_362=dojo.filter(_362,function(i){return i&&i.value;});if(!this.multiple&&(!_362[0]||!_362[0].value)&&opts.length){_362[0]=opts[0];}dojo.forEach(opts,function(i){i.selected=dojo.some(_362,function(v){return v.value===i.value;});});var val=dojo.map(_362,function(i){return i.value;}),disp=dojo.map(_362,function(i){return i.label;});this.value=this.multiple?val:val[0];this._setDisplay(this.multiple?disp:disp[0]);this._updateSelection();this._handleOnChange(this.value,_363);},_getDisplayedValueAttr:function(){var val=this.get("value");if(!dojo.isArray(val)){val=[val];}var ret=dojo.map(this.getOptions(val),function(v){if(v&&"label" in v){return v.label;}else{if(v){return v.value;}}return null;},this);return this.multiple?ret:ret[0];},_getValueDeprecated:false,getValue:function(){return this._lastValue;},undo:function(){this._setValueAttr(this._lastValueReported,false);},_loadChildren:function(){if(this._loadingStore){return;}dojo.forEach(this._getChildren(),function(_364){_364.destroyRecursive();});dojo.forEach(this.options,this._addOptionItem,this);this._updateSelection();},_updateSelection:function(){this.value=this._getValueFromOpts();var val=this.value;if(!dojo.isArray(val)){val=[val];}if(val&&val[0]){dojo.forEach(this._getChildren(),function(_365){var _366=dojo.some(val,function(v){return _365.option&&(v===_365.option.value);});dojo.toggleClass(_365.domNode,this.baseClass+"SelectedOption",_366);dijit.setWaiState(_365.domNode,"selected",_366);},this);}this._handleOnChange(this.value);},_getValueFromOpts:function(){var opts=this.getOptions()||[];if(!this.multiple&&opts.length){var opt=dojo.filter(opts,function(i){return i.selected;})[0];if(opt&&opt.value){return opt.value;}else{opts[0].selected=true;return opts[0].value;}}else{if(this.multiple){return dojo.map(dojo.filter(opts,function(i){return i.selected;}),function(i){return i.value;})||[];}}return "";},_onNewItem:function(item,_367){if(!_367||!_367.parent){this._addOptionForItem(item);}},_onDeleteItem:function(item){var _368=this.store;this.removeOption(_368.getIdentity(item));},_onSetItem:function(item){this.updateOption(this._getOptionObjForItem(item));},_getOptionObjForItem:function(item){var _369=this.store,_36a=_369.getLabel(item),_36b=(_36a?_369.getIdentity(item):null);return {value:_36b,label:_36a,item:item};},_addOptionForItem:function(item){var _36c=this.store;if(!_36c.isItemLoaded(item)){_36c.loadItem({item:item,onComplete:function(i){this._addOptionForItem(item);},scope:this});return;}var _36d=this._getOptionObjForItem(item);this.addOption(_36d);},constructor:function(_36e){this._oValue=(_36e||{}).value||null;},_fillContent:function(){var opts=this.options;if(!opts){opts=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(node){if(node.getAttribute("type")==="separator"){return {value:"",label:"",selected:false,disabled:false};}return {value:node.getAttribute("value"),label:String(node.innerHTML),selected:node.getAttribute("selected")||false,disabled:node.getAttribute("disabled")||false};},this):[];}if(!this.value){this.value=this._getValueFromOpts();}else{if(this.multiple&&typeof this.value=="string"){this.value=this.value.split(",");}}},postCreate:function(){dojo.setSelectable(this.focusNode,false);this.inherited(arguments);this.connect(this,"onChange","_updateSelection");this.connect(this,"startup","_loadChildren");this._setValueAttr(this.value,null);},startup:function(){this.inherited(arguments);var _36f=this.store,_370={};dojo.forEach(["query","queryOptions","onFetch"],function(i){if(this[i]){_370[i]=this[i];}delete this[i];},this);if(_36f&&_36f.getFeatures()["dojo.data.api.Identity"]){this.store=null;this.setStore(_36f,this._oValue,_370);}},destroy:function(){dojo.forEach(this._notifyConnections||[],dojo.disconnect);this.inherited(arguments);},_addOptionItem:function(_371){},_removeOptionItem:function(_372){},_setDisplay:function(_373){},_getChildren:function(){return [];},_getSelectedOptionsAttr:function(){return this.getOptions(this.get("value"));},_pseudoLoadChildren:function(_374){},onSetStore:function(){}});}if(!dojo._hasResource["dijit.MenuItem"]){dojo._hasResource["dijit.MenuItem"]=true;dojo.provide("dijit.MenuItem");dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_375){if(_375&&!("label" in this.params)){this.set("label",_375.innerHTML);}},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _376=this.id+"_text";dojo.attr(this.containerNode,"id",_376);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_376+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_376);},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);this._hovering=false;this._setStateClass();},_onClick:function(evt){this.getParent().onItemClick(this,evt);dojo.stopEvent(evt);},onClick:function(evt){},focus:function(){try{if(dojo.isIE==8){this.containerNode.focus();}dijit.focus(this.focusNode);}catch(e){}},_onFocus:function(){this._setSelected(true);this.getParent()._onItemFocus(this);this.inherited(arguments);},_setSelected:function(_377){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_377);},setLabel:function(_378){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_378);},setDisabled:function(_379){dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_379);},_setDisabledAttr:function(_37a){this.disabled=_37a;dijit.setWaiState(this.focusNode,"disabled",_37a?"true":"false");},_setAccelKeyAttr:function(_37b){this.accelKey=_37b;this.accelKeyNode.style.display=_37b?"":"none";this.accelKeyNode.innerHTML=_37b;dojo.attr(this.containerNode,"colSpan",_37b?"1":"2");}});}if(!dojo._hasResource["dijit.PopupMenuItem"]){dojo._hasResource["dijit.PopupMenuItem"]=true;dojo.provide("dijit.PopupMenuItem");dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){if(this.srcNodeRef){var _37c=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_37c[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}this.inherited(arguments);if(!this.popup){var node=dojo.query("[widgetId]",this.dropDownContainer)[0];this.popup=dijit.byNode(node);}dojo.body().appendChild(this.popup.domNode);this.popup.startup();this.popup.domNode.style.display="none";if(this.arrowWrapper){dojo.style(this.arrowWrapper,"visibility","");}dijit.setWaiState(this.focusNode,"haspopup","true");},destroyDescendants:function(){if(this.popup){if(!this.popup._destroyed){this.popup.destroyRecursive();}delete this.popup;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.CheckedMenuItem"]){dojo._hasResource["dijit.CheckedMenuItem"]=true;dojo.provide("dijit.CheckedMenuItem");dojo.declare("dijit.CheckedMenuItem",dijit.MenuItem,{templateString:dojo.cache("dijit","templates/CheckedMenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">&nbsp;</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_37d){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_37d);dijit.setWaiState(this.domNode,"checked",_37d);this.checked=_37d;},onChange:function(_37e){},_onClick:function(e){if(!this.disabled){this.set("checked",!this.checked);this.onChange(this.checked);}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.MenuSeparator"]){dojo._hasResource["dijit.MenuSeparator"]=true;dojo.provide("dijit.MenuSeparator");dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuSeparator.html","<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Menu"]){dojo._hasResource["dijit.Menu"]=true;dojo.provide("dijit.Menu");dojo.declare("dijit._MenuBase",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{parentMenu:null,popupDelay:500,startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_37f){_37f.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_380){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _381=this._getTopMenu();if(_381&&_381._isMenuBar){_381.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _382=this.currentPopup.parentMenu;if(_382.focusedChild){_382.focusedChild._setSelected(false);}_382.focusedChild=this.currentPopup.from_item;_382.focusedChild._setSelected(true);this._stopPendingCloseTimer(this.currentPopup);}},onItemHover:function(item){if(this.isActive){this.focusChild(item);if(this.focusedChild.popup&&!this.focusedChild.disabled&&!this.hover_timer){this.hover_timer=setTimeout(dojo.hitch(this,"_openPopup"),this.popupDelay);}}if(this.focusedChild){this.focusChild(item);}this._hoveredChild=item;},_onChildBlur:function(item){this._stopPopupTimer();item._setSelected(false);var _383=item.popup;if(_383){this._stopPendingCloseTimer(_383);_383._pendingClose_timer=setTimeout(function(){_383._pendingClose_timer=null;if(_383.parentMenu){_383.parentMenu.currentPopup=null;}dijit.popup.close(_383);},this.popupDelay);}},onItemUnhover:function(item){if(this.isActive){this._stopPopupTimer();}if(this._hoveredChild==item){this._hoveredChild=null;}},_stopPopupTimer:function(){if(this.hover_timer){clearTimeout(this.hover_timer);this.hover_timer=null;}},_stopPendingCloseTimer:function(_384){if(_384._pendingClose_timer){clearTimeout(_384._pendingClose_timer);_384._pendingClose_timer=null;}},_stopFocusTimer:function(){if(this._focus_timer){clearTimeout(this._focus_timer);this._focus_timer=null;}},_getTopMenu:function(){for(var top=this;top.parentMenu;top=top.parentMenu){}return top;},onItemClick:function(item,evt){if(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.disabled){return false;}if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _385=this.focusedChild;if(!_385){return;}var _386=_385.popup;if(_386.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_386.parentMenu=this;_386.from_item=_385;var self=this;dijit.popup.open({parent:this,popup:_386,around:_385.domNode,orient:this._orient||(this.isLeftToRight()?{"TR":"TL","TL":"TR","BR":"BL","BL":"BR"}:{"TL":"TR","TR":"TL","BL":"BR","BR":"BL"}),onCancel:function(){self.focusChild(_385);self._cleanUp();_385._setSelected(true);self.focusedChild=_385;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_386;_386.connect(_386.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_386.focus){_386._focus_timer=setTimeout(dojo.hitch(_386,function(){this._focus_timer=null;this.focus();}),0);}},_markActive:function(){this.isActive=true;dojo.addClass(this.domNode,"dijitMenuActive");dojo.removeClass(this.domNode,"dijitMenuPassive");},onOpen:function(e){this.isShowingNow=true;this._markActive();},_markInactive:function(){this.isActive=false;dojo.removeClass(this.domNode,"dijitMenuActive");dojo.addClass(this.domNode,"dijitMenuPassive");},onClose:function(){this._stopFocusTimer();this._markInactive();this.isShowingNow=false;this.parentMenu=null;},_closeChild:function(){this._stopPopupTimer();if(this.focusedChild){this.focusedChild._setSelected(false);this.focusedChild._onUnhover();this.focusedChild=null;}if(this.currentPopup){dijit.popup.close(this.currentPopup);this.currentPopup=null;}},_onItemFocus:function(item){if(this._hoveredChild&&this._hoveredChild!=item){this._hoveredChild._onUnhover();}},_onBlur:function(){this._cleanUp();this.inherited(arguments);},_cleanUp:function(){this._closeChild();if(typeof this.isShowingNow=="undefined"){this._markInactive();}}});dojo.declare("dijit.Menu",dijit._MenuBase,{constructor:function(){this._bindings=[];},templateString:dojo.cache("dijit","templates/Menu.html","<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,postCreate:function(){if(this.contextMenuForWindow){this.bindDomNode(dojo.body());}else{dojo.forEach(this.targetNodeIds,this.bindDomNode,this);}var k=dojo.keys,l=this.isLeftToRight();this._openSubMenuKey=l?k.RIGHT_ARROW:k.LEFT_ARROW;this._closeSubMenuKey=l?k.LEFT_ARROW:k.RIGHT_ARROW;this.connectKeyNavHandlers([k.UP_ARROW],[k.DOWN_ARROW]);},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.charOrCode){case this._openSubMenuKey:this._moveToPopup(evt);dojo.stopEvent(evt);break;case this._closeSubMenuKey:if(this.parentMenu){if(this.parentMenu._isMenuBar){this.parentMenu.focusPrev();}else{this.onCancel(false);}}else{dojo.stopEvent(evt);}break;}},_iframeContentWindow:function(_387){var win=dojo.window.get(this._iframeContentDocument(_387))||this._iframeContentDocument(_387)["__parent__"]||(_387.name&&dojo.doc.frames[_387.name])||null;return win;},_iframeContentDocument:function(_388){var doc=_388.contentDocument||(_388.contentWindow&&_388.contentWindow.document)||(_388.name&&dojo.doc.frames[_388.name]&&dojo.doc.frames[_388.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _389=node,win=this._iframeContentWindow(_389);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _38a={node:node,iframe:_389};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_38a));var _38b=dojo.hitch(this,function(cn){return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_389,{x:evt.pageX,y:evt.pageY});}),dojo.connect(cn,"onkeydown",this,function(evt){if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_389);}})];});_38a.connects=cn?_38b(cn):[];if(_389){_38a.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_389);cn=dojo.withGlobal(win,dojo.body);_38a.connects=_38b(cn);});if(_389.addEventListener){_389.addEventListener("load",_38a.onloadHandler,false);}else{_389.attachEvent("onload",_38a.onloadHandler);}}},unBindDomNode:function(_38c){var node;try{node=dojo.byId(_38c);}catch(e){return;}var _38d="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_38d)){var bid=dojo.attr(node,_38d)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _38e=b.iframe;if(_38e){if(_38e.removeEventListener){_38e.removeEventListener("load",b.onloadHandler,false);}else{_38e.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_38d);delete this._bindings[bid];}},_scheduleOpen:function(_38f,_390,_391){if(!this._openTimer){this._openTimer=setTimeout(dojo.hitch(this,function(){delete this._openTimer;this._openMyself({target:_38f,iframe:_390,coords:_391});}),1);}},_openMyself:function(args){var _392=args.target,_393=args.iframe,_394=args.coords;if(_394){if(_393){var od=_392.ownerDocument,ifc=dojo.position(_393,true),win=this._iframeContentWindow(_393),_395=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_393),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_393,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_393,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_393,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_393,cs.borderTopWidth):0);_394.x+=ifc.x+left-_395.x;_394.y+=ifc.y+top-_395.y;}}else{_394=dojo.position(_392,true);_394.x+=10;_394.y+=10;}var self=this;var _396=dijit.getFocus(this);function _397(){if(self.refocus){dijit.focus(_396);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:_394.x,y:_394.y,onExecute:_397,onCancel:_397,orient:this.isLeftToRight()?"L":"R"});this.focus();this._onBlur=function(){this.inherited("_onBlur",arguments);dijit.popup.close(this);};},uninitialize:function(){dojo.forEach(this._bindings,function(b){if(b){this.unBindDomNode(b.node);}},this);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.Select"]){dojo._hasResource["dijit.form.Select"]=true;dojo.provide("dijit.form.Select");dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){this.inherited(arguments);var o=(this.menuTableNode=this.domNode);var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));if(o.parentNode){o.parentNode.replaceChild(n,o);}dojo.removeClass(o,"dijitMenuTable");n.className=o.className+" dijitSelectMenu";o.className="dijitReset dijitMenuTable";dijit.setWaiRole(o,"listbox");dijit.setWaiRole(n,"presentation");n.appendChild(o);},resize:function(mb){if(mb){dojo.marginBox(this.domNode,mb);if("w" in mb){this.menuTableNode.style.width="100%";}}}});dojo.declare("dijit.form.Select",[dijit.form._FormSelectWidget,dijit._HasDropDown],{baseClass:"dijitSelect",templateString:dojo.cache("dijit.form","templates/Select.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"  dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),required:false,state:"",tooltipPosition:[],emptyLabel:"",_isLoaded:false,_childrenLoaded:false,_fillContent:function(){this.inherited(arguments);if(this.options.length&&!this.value&&this.srcNodeRef){var si=this.srcNodeRef.selectedIndex;this.value=this.options[si!=-1?si:0].value;}this.dropDown=new dijit.form._SelectMenu({id:this.id+"_menu"});dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");},_getMenuItemForOption:function(_398){if(!_398.value){return new dijit.MenuSeparator();}else{var _399=dojo.hitch(this,"_setValueAttr",_398);var item=new dijit.MenuItem({option:_398,label:_398.label,onClick:_399,disabled:_398.disabled||false});dijit.setWaiRole(item.focusNode,"listitem");return item;}},_addOptionItem:function(_39a){if(this.dropDown){this.dropDown.addChild(this._getMenuItemForOption(_39a));}},_getChildren:function(){if(!this.dropDown){return [];}return this.dropDown.getChildren();},_loadChildren:function(_39b){if(_39b===true){if(this.dropDown){delete this.dropDown.focusedChild;}if(this.options.length){this.inherited(arguments);}else{dojo.forEach(this._getChildren(),function(_39c){_39c.destroyRecursive();});var item=new dijit.MenuItem({label:"&nbsp;"});this.dropDown.addChild(item);}}else{this._updateSelection();}var len=this.options.length;this._isLoaded=false;this._childrenLoaded=true;if(!this._loadingStore){this._setValueAttr(this.value);}},_setValueAttr:function(_39d){this.inherited(arguments);dojo.attr(this.valueNode,"value",this.get("value"));},_setDisplay:function(_39e){this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_39e||this.emptyLabel||"&nbsp;")+"</span>";dijit.setWaiState(this.focusNode,"valuetext",(_39e||this.emptyLabel||"&nbsp;"));},validate:function(_39f){var _3a0=this.isValid(_39f);this.state=_3a0?"":"Error";this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_3a0?"false":"true");var _3a1=_3a0?"":this._missingMsg;if(this._message!==_3a1){this._message=_3a1;dijit.hideTooltip(this.domNode);if(_3a1){dijit.showTooltip(_3a1,this.domNode,this.tooltipPosition,!this.isLeftToRight());}}return _3a0;},isValid:function(_3a2){return (!this.required||!(/^\s*$/.test(this.value)));},reset:function(){this.inherited(arguments);dijit.hideTooltip(this.domNode);this.state="";this._setStateClass();delete this._message;},postMixInProperties:function(){this.inherited(arguments);this._missingMsg=dojo.i18n.getLocalization("dijit.form","validate",this.lang).missingMessage;},postCreate:function(){this.inherited(arguments);if(this.tableNode.style.width){dojo.addClass(this.domNode,this.baseClass+"FixedWidth");}},isLoaded:function(){return this._isLoaded;},loadDropDown:function(_3a3){this._loadChildren(true);this._isLoaded=true;_3a3();},closeDropDown:function(){this.inherited(arguments);if(this.dropDown&&this.dropDown.menuTableNode){this.dropDown.menuTableNode.style.width="";}},uninitialize:function(_3a4){if(this.dropDown&&!this.dropDown._destroyed){this.dropDown.destroyRecursive(_3a4);delete this.dropDown;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){dojo._hasResource["dijit._editor.plugins.LinkDialog"]=true;dojo.provide("dijit._editor.plugins.LinkDialog");dojo.declare("dijit._editor.plugins.LinkDialog",dijit._editor._Plugin,{buttonClass:dijit.form.DropDownButton,useDefaultCommand:false,urlRegExp:"((https?|ftps?|file)\\://|./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",emailRegExp:"<?(mailto\\:)([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+"+"@"+"((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)+(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)\\.?)|localhost|^[^-][a-zA-Z0-9_-]*>?",htmlTemplate:"<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\""+" target=\"${targetSelect}\""+">${textInput}</a>",tag:"a",_hostRxp:new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),_userAtRxp:new RegExp("^([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+@","i"),linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' "+"id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_targetSelect'>${target}</label>","</td><td>","<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>","<option selected='selected' value='_self'>${currentWindow}</option>","<option value='_blank'>${newWindow}</option>","<option value='_top'>${topWindow}</option>","<option value='_parent'>${parentWindow}</option>","</select>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),_initButton:function(){var _3a5=this;this.tag=this.command=="insertImage"?"img":"a";var _3a6=dojo.mixin(dojo.i18n.getLocalization("dijit","common",this.lang),dojo.i18n.getLocalization("dijit._editor","LinkDialog",this.lang));var _3a7=(this.dropDown=new dijit.TooltipDialog({title:_3a6[this.command+"Title"],execute:dojo.hitch(this,"setValue"),onOpen:function(){_3a5._onOpenDialog();dijit.TooltipDialog.prototype.onOpen.apply(this,arguments);},onCancel:function(){setTimeout(dojo.hitch(_3a5,"_onCloseDialog"),0);}}));_3a6.urlRegExp=this.urlRegExp;_3a6.id=dijit.getUniqueId(this.editor.id);this._uniqueId=_3a6.id;this._setContent(_3a7.title+"<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>"+dojo.string.substitute(this.linkDialogTemplate,_3a6));_3a7.startup();this._urlInput=dijit.byId(this._uniqueId+"_urlInput");this._textInput=dijit.byId(this._uniqueId+"_textInput");this._setButton=dijit.byId(this._uniqueId+"_setButton");this.connect(dijit.byId(this._uniqueId+"_cancelButton"),"onClick",function(){this.dropDown.onCancel();});if(this._urlInput){this.connect(this._urlInput,"onChange","_checkAndFixInput");}if(this._textInput){this.connect(this._textInput,"onChange","_checkAndFixInput");}this._urlRegExp=new RegExp("^"+this.urlRegExp+"$","i");this._emailRegExp=new RegExp("^"+this.emailRegExp+"$","i");this._urlInput.isValid=dojo.hitch(this,function(){var _3a8=this._urlInput.get("value");return this._urlRegExp.test(_3a8)||this._emailRegExp.test(_3a8);});this._connectTagEvents();this.inherited(arguments);},_checkAndFixInput:function(){var self=this;var url=this._urlInput.get("value");var _3a9=function(url){var _3aa=false;var _3ab=false;if(url&&url.length>1){url=dojo.trim(url);if(url.indexOf("mailto:")!==0){if(url.indexOf("/")>0){if(url.indexOf("://")===-1){if(url.charAt(0)!=="/"&&url.indexOf("./")!==0){if(self._hostRxp.test(url)){_3aa=true;}}}}else{if(self._userAtRxp.test(url)){_3ab=true;}}}}if(_3aa){self._urlInput.set("value","http://"+url);}if(_3ab){self._urlInput.set("value","mailto:"+url);}self._setButton.set("disabled",!self._isValid());};if(this._delayedCheck){clearTimeout(this._delayedCheck);this._delayedCheck=null;}this._delayedCheck=setTimeout(function(){_3a9(url);},250);},_connectTagEvents:function(){this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){this.connect(this.editor.editNode,"ondblclick",this._onDblClick);}));},_isValid:function(){return this._urlInput.isValid()&&this._textInput.isValid();},_setContent:function(_3ac){this.dropDown.set("content",_3ac);},_checkValues:function(args){if(args&&args.urlInput){args.urlInput=args.urlInput.replace(/"/g,"&quot;");}return args;},setValue:function(args){this._onCloseDialog();if(dojo.isIE){var sel=dijit.range.getSelection(this.editor.window);var _3ad=sel.getRangeAt(0);var a=_3ad.endContainer;if(a.nodeType===3){a=a.parentNode;}if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);}if(a&&(a.nodeName&&a.nodeName.toLowerCase()===this.tag)){if(this.editor.queryCommandEnabled("unlink")){dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[a]);this.editor.execCommand("unlink");}}}args=this._checkValues(args);this.editor.execCommand("inserthtml",dojo.string.substitute(this.htmlTemplate,args));},_onCloseDialog:function(){this.editor.focus();},_getCurrentValues:function(a){var url,text,_3ae;if(a&&a.tagName.toLowerCase()===this.tag){url=a.getAttribute("_djrealurl")||a.getAttribute("href");_3ae=a.getAttribute("target")||"_self";text=a.textContent||a.innerText;dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[a,true]);}else{text=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);}return {urlInput:url||"",textInput:text||"",targetSelect:_3ae||""};},_onOpenDialog:function(){var a;if(dojo.isIE){var sel=dijit.range.getSelection(this.editor.window);var _3af=sel.getRangeAt(0);a=_3af.endContainer;if(a.nodeType===3){a=a.parentNode;}if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);}}else{a=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.tag]);}this.dropDown.reset();this._setButton.set("disabled",true);this.dropDown.set("value",this._getCurrentValues(a));},_onDblClick:function(e){if(e&&e.target){var t=e.target;var tg=t.tagName?t.tagName.toLowerCase():"";if(tg===this.tag&&dojo.attr(t,"href")){dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);this.editor.onDisplayChanged();setTimeout(dojo.hitch(this,function(){this.button.set("disabled",false);this.button.openDropDown();}),10);}}}});dojo.declare("dijit._editor.plugins.ImgLinkDialog",[dijit._editor.plugins.LinkDialog],{linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' "+"required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","</td><td>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),htmlTemplate:"<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",tag:"img",_getCurrentValues:function(img){var url,text;if(img&&img.tagName.toLowerCase()===this.tag){url=img.getAttribute("_djrealurl")||img.getAttribute("src");text=img.getAttribute("alt");dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[img,true]);}else{text=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);}return {urlInput:url||"",textInput:text||""};},_isValid:function(){return this._urlInput.isValid();},_connectTagEvents:function(){this.inherited(arguments);this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){this.connect(this.editor.editNode,"onmousedown",this._selectTag);}));},_selectTag:function(e){if(e&&e.target){var t=e.target;var tg=t.tagName?t.tagName.toLowerCase():"";if(tg===this.tag){dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);}}},_checkValues:function(args){if(args&&args.urlInput){args.urlInput=args.urlInput.replace(/"/g,"&quot;");}if(args&&args.textInput){args.textInput=args.textInput.replace(/"/g,"&quot;");}return args;},_onDblClick:function(e){if(e&&e.target){var t=e.target;var tg=t.tagName?t.tagName.toLowerCase():"";if(tg===this.tag&&dojo.attr(t,"src")){dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);this.editor.onDisplayChanged();setTimeout(dojo.hitch(this,function(){this.button.set("disabled",false);this.button.openDropDown();}),10);}}}});dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){if(o.plugin){return;}switch(o.args.name){case "createLink":o.plugin=new dijit._editor.plugins.LinkDialog({command:o.args.name});break;case "insertImage":o.plugin=new dijit._editor.plugins.ImgLinkDialog({command:o.args.name});break;}});}if(!dojo._hasResource["dijit.MenuBar"]){dojo._hasResource["dijit.MenuBar"]=true;dojo.provide("dijit.MenuBar");dojo.declare("dijit.MenuBar",dijit._MenuBase,{templateString:dojo.cache("dijit","templates/MenuBar.html","<div class=\"dijitMenuBar dijitMenuPassive\" dojoAttachPoint=\"containerNode\"  waiRole=\"menubar\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress: _onKeyPress\"></div>\n"),baseClass:"dijitMenuBar",_isMenuBar:true,postCreate:function(){var k=dojo.keys,l=this.isLeftToRight();this.connectKeyNavHandlers(l?[k.LEFT_ARROW]:[k.RIGHT_ARROW],l?[k.RIGHT_ARROW]:[k.LEFT_ARROW]);this._orient=this.isLeftToRight()?{BL:"TL"}:{BR:"TR"};},focusChild:function(item){var _3b0=this.focusedChild,_3b1=_3b0&&_3b0.popup&&_3b0.popup.isShowingNow;this.inherited(arguments);if(_3b1&&item.popup&&!item.disabled){this._openPopup();}},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.charOrCode){case dojo.keys.DOWN_ARROW:this._moveToPopup(evt);dojo.stopEvent(evt);}},onItemClick:function(item,evt){if(item.popup&&item.popup.isShowingNow){item.popup.onCancel();}else{this.inherited(arguments);}}});}if(!dojo._hasResource["dijit.MenuBarItem"]){dojo._hasResource["dijit.MenuBarItem"]=true;dojo.provide("dijit.MenuBarItem");dojo.declare("dijit._MenuBarItemMixin",null,{templateString:dojo.cache("dijit","templates/MenuBarItem.html","<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<span dojoAttachPoint=\"containerNode\"></span>\n</div>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"}})});dojo.declare("dijit.MenuBarItem",[dijit.MenuItem,dijit._MenuBarItemMixin],{});}if(!dojo._hasResource["dijit.PopupMenuBarItem"]){dojo._hasResource["dijit.PopupMenuBarItem"]=true;dojo.provide("dijit.PopupMenuBarItem");dojo.declare("dijit.PopupMenuBarItem",[dijit.PopupMenuItem,dijit._MenuBarItemMixin],{});}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.number.format=function(_3b2,_3b3){_3b3=dojo.mixin({},_3b3||{});var _3b4=dojo.i18n.normalizeLocale(_3b3.locale),_3b5=dojo.i18n.getLocalization("dojo.cldr","number",_3b4);_3b3.customs=_3b5;var _3b6=_3b3.pattern||_3b5[(_3b3.type||"decimal")+"Format"];if(isNaN(_3b2)||Math.abs(_3b2)==Infinity){return null;}return dojo.number._applyPattern(_3b2,_3b6,_3b3);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_3b7,_3b8,_3b9){_3b9=_3b9||{};var _3ba=_3b9.customs.group,_3bb=_3b9.customs.decimal,_3bc=_3b8.split(";"),_3bd=_3bc[0];_3b8=_3bc[(_3b7<0)?1:0]||("-"+_3bd);if(_3b8.indexOf("%")!=-1){_3b7*=100;}else{if(_3b8.indexOf("‰")!=-1){_3b7*=1000;}else{if(_3b8.indexOf("¤")!=-1){_3ba=_3b9.customs.currencyGroup||_3ba;_3bb=_3b9.customs.currencyDecimal||_3bb;_3b8=_3b8.replace(/\u00a4{1,3}/,function(_3be){var prop=["symbol","currency","displayName"][_3be.length-1];return _3b9[prop]||_3b9.currency||"";});}else{if(_3b8.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _3bf=dojo.number._numberPatternRE;var _3c0=_3bd.match(_3bf);if(!_3c0){throw new Error("unable to find a number expression in pattern: "+_3b8);}if(_3b9.fractional===false){_3b9.places=0;}return _3b8.replace(_3bf,dojo.number._formatAbsolute(_3b7,_3c0[0],{decimal:_3bb,group:_3ba,places:_3b9.places,round:_3b9.round}));};dojo.number.round=function(_3c1,_3c2,_3c3){var _3c4=10/(_3c3||10);return (_3c4*+_3c1).toFixed(_3c2)/_3c4;};if((0.9).toFixed()==0){(function(){var _3c5=dojo.number.round;dojo.number.round=function(v,p,m){var d=Math.pow(10,-p||0),a=Math.abs(v);if(!v||a>=d||a*Math.pow(10,p+1)<5){d=0;}return _3c5(v,p,m)+(v>0?d:-d);};})();}dojo.number._formatAbsolute=function(_3c6,_3c7,_3c8){_3c8=_3c8||{};if(_3c8.places===true){_3c8.places=0;}if(_3c8.places===Infinity){_3c8.places=6;}var _3c9=_3c7.split("."),_3ca=typeof _3c8.places=="string"&&_3c8.places.indexOf(","),_3cb=_3c8.places;if(_3ca){_3cb=_3c8.places.substring(_3ca+1);}else{if(!(_3cb>=0)){_3cb=(_3c9[1]||[]).length;}}if(!(_3c8.round<0)){_3c6=dojo.number.round(_3c6,_3cb,_3c8.round);}var _3cc=String(Math.abs(_3c6)).split("."),_3cd=_3cc[1]||"";if(_3c9[1]||_3c8.places){if(_3ca){_3c8.places=_3c8.places.substring(0,_3ca);}var pad=_3c8.places!==undefined?_3c8.places:(_3c9[1]&&_3c9[1].lastIndexOf("0")+1);if(pad>_3cd.length){_3cc[1]=dojo.string.pad(_3cd,pad,"0",true);}if(_3cb<_3cd.length){_3cc[1]=_3cd.substr(0,_3cb);}}else{if(_3cc[1]){_3cc.pop();}}var _3ce=_3c9[0].replace(",","");pad=_3ce.indexOf("0");if(pad!=-1){pad=_3ce.length-pad;if(pad>_3cc[0].length){_3cc[0]=dojo.string.pad(_3cc[0],pad);}if(_3ce.indexOf("#")==-1){_3cc[0]=_3cc[0].substr(_3cc[0].length-pad);}}var _3cf=_3c9[0].lastIndexOf(","),_3d0,_3d1;if(_3cf!=-1){_3d0=_3c9[0].length-_3cf-1;var _3d2=_3c9[0].substr(0,_3cf);_3cf=_3d2.lastIndexOf(",");if(_3cf!=-1){_3d1=_3d2.length-_3cf-1;}}var _3d3=[];for(var _3d4=_3cc[0];_3d4;){var off=_3d4.length-_3d0;_3d3.push((off>0)?_3d4.substr(off):_3d4);_3d4=(off>0)?_3d4.slice(0,off):"";if(_3d1){_3d0=_3d1;delete _3d1;}}_3cc[0]=_3d3.reverse().join(_3c8.group||",");return _3cc.join(_3c8.decimal||".");};dojo.number.regexp=function(_3d5){return dojo.number._parseInfo(_3d5).regexp;};dojo.number._parseInfo=function(_3d6){_3d6=_3d6||{};var _3d7=dojo.i18n.normalizeLocale(_3d6.locale),_3d8=dojo.i18n.getLocalization("dojo.cldr","number",_3d7),_3d9=_3d6.pattern||_3d8[(_3d6.type||"decimal")+"Format"],_3da=_3d8.group,_3db=_3d8.decimal,_3dc=1;if(_3d9.indexOf("%")!=-1){_3dc/=100;}else{if(_3d9.indexOf("‰")!=-1){_3dc/=1000;}else{var _3dd=_3d9.indexOf("¤")!=-1;if(_3dd){_3da=_3d8.currencyGroup||_3da;_3db=_3d8.currencyDecimal||_3db;}}}var _3de=_3d9.split(";");if(_3de.length==1){_3de.push("-"+_3de[0]);}var re=dojo.regexp.buildGroupRE(_3de,function(_3df){_3df="(?:"+dojo.regexp.escapeString(_3df,".")+")";return _3df.replace(dojo.number._numberPatternRE,function(_3e0){var _3e1={signed:false,separator:_3d6.strict?_3da:[_3da,""],fractional:_3d6.fractional,decimal:_3db,exponent:false},_3e2=_3e0.split("."),_3e3=_3d6.places;if(_3e2.length==1&&_3dc!=1){_3e2[1]="###";}if(_3e2.length==1||_3e3===0){_3e1.fractional=false;}else{if(_3e3===undefined){_3e3=_3d6.pattern?_3e2[1].lastIndexOf("0")+1:Infinity;}if(_3e3&&_3d6.fractional==undefined){_3e1.fractional=true;}if(!_3d6.places&&(_3e3<_3e2[1].length)){_3e3+=","+_3e2[1].length;}_3e1.places=_3e3;}var _3e4=_3e2[0].split(",");if(_3e4.length>1){_3e1.groupSize=_3e4.pop().length;if(_3e4.length>1){_3e1.groupSize2=_3e4.pop().length;}}return "("+dojo.number._realNumberRegexp(_3e1)+")";});},true);if(_3dd){re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_3e5,_3e6,_3e7,_3e8){var prop=["symbol","currency","displayName"][_3e7.length-1],_3e9=dojo.regexp.escapeString(_3d6[prop]||_3d6.currency||"");_3e6=_3e6?"[\\s\\xa0]":"";_3e8=_3e8?"[\\s\\xa0]":"";if(!_3d6.strict){if(_3e6){_3e6+="*";}if(_3e8){_3e8+="*";}return "(?:"+_3e6+_3e9+_3e8+")?";}return _3e6+_3e9+_3e8;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_3da,decimal:_3db,factor:_3dc};};dojo.number.parse=function(_3ea,_3eb){var info=dojo.number._parseInfo(_3eb),_3ec=(new RegExp("^"+info.regexp+"$")).exec(_3ea);if(!_3ec){return NaN;}var _3ed=_3ec[1];if(!_3ec[1]){if(!_3ec[2]){return NaN;}_3ed=_3ec[2];info.factor*=-1;}_3ed=_3ed.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return _3ed*info.factor;};dojo.number._realNumberRegexp=function(_3ee){_3ee=_3ee||{};if(!("places" in _3ee)){_3ee.places=Infinity;}if(typeof _3ee.decimal!="string"){_3ee.decimal=".";}if(!("fractional" in _3ee)||/^0/.test(_3ee.places)){_3ee.fractional=[true,false];}if(!("exponent" in _3ee)){_3ee.exponent=[true,false];}if(!("eSigned" in _3ee)){_3ee.eSigned=[true,false];}var _3ef=dojo.number._integerRegexp(_3ee),_3f0=dojo.regexp.buildGroupRE(_3ee.fractional,function(q){var re="";if(q&&(_3ee.places!==0)){re="\\"+_3ee.decimal;if(_3ee.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_3ee.places+"}";}}return re;},true);var _3f1=dojo.regexp.buildGroupRE(_3ee.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_3ee.eSigned})+")";}return "";});var _3f2=_3ef+_3f0;if(_3f0){_3f2="(?:(?:"+_3f2+")|(?:"+_3f0+"))";}return _3f2+_3f1;};dojo.number._integerRegexp=function(_3f3){_3f3=_3f3||{};if(!("signed" in _3f3)){_3f3.signed=[true,false];}if(!("separator" in _3f3)){_3f3.separator="";}else{if(!("groupSize" in _3f3)){_3f3.groupSize=3;}}var _3f4=dojo.regexp.buildGroupRE(_3f3.signed,function(q){return q?"[-+]":"";},true);var _3f5=dojo.regexp.buildGroupRE(_3f3.separator,function(sep){if(!sep){return "(?:\\d+)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_3f3.groupSize,grp2=_3f3.groupSize2;if(grp2){var _3f6="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_3f6+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_3f6;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _3f4+_3f5;};}if(!dojo._hasResource["dijit.ProgressBar"]){dojo._hasResource["dijit.ProgressBar"]=true;dojo.provide("dijit.ProgressBar");dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",maximum:100,places:0,indeterminate:false,name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postCreate:function(){this.inherited(arguments);this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());this.update();},update:function(_3f7){dojo.mixin(this,_3f7||{});var tip=this.internalProgress;var _3f8=1,_3f9;if(this.indeterminate){_3f9="addClass";dijit.removeWaiState(tip,"valuenow");dijit.removeWaiState(tip,"valuemin");dijit.removeWaiState(tip,"valuemax");}else{_3f9="removeClass";if(String(this.progress).indexOf("%")!=-1){_3f8=Math.min(parseFloat(this.progress)/100,1);this.progress=_3f8*this.maximum;}else{this.progress=Math.min(this.progress,this.maximum);_3f8=this.progress/this.maximum;}var text=this.report(_3f8);this.label.firstChild.nodeValue=text;dijit.setWaiState(tip,"describedby",this.label.id);dijit.setWaiState(tip,"valuenow",this.progress);dijit.setWaiState(tip,"valuemin",0);dijit.setWaiState(tip,"valuemax",this.maximum);}dojo[_3f9](this.domNode,"dijitProgressBarIndeterminate");tip.style.width=(_3f8*100)+"%";this.onChange();},_setValueAttr:function(v){if(v==Infinity){this.update({indeterminate:true});}else{this.update({indeterminate:false,progress:v});}},_getValueAttr:function(){return this.progress;},report:function(_3fa){return dojo.number.format(_3fa,{type:"percent",places:this.places,locale:this.lang});},onChange:function(){}});}if(!dojo._hasResource["dijit.TitlePane"]){dojo._hasResource["dijit.TitlePane"]=true;dojo.provide("dijit.TitlePane");dojo.declare("dijit.TitlePane",[dijit.layout.ContentPane,dijit._Templated,dijit._CssStateMixin],{title:"",open:true,toggleable:true,tabIndex:"0",duration:dijit.defaultDuration,baseClass:"dijitTitlePane",templateString:dojo.cache("dijit","templates/TitlePane.html","<div>\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode\">\n\t\t<div class=\"dijitTitlePaneTitleFocus\" dojoAttachPoint=\"focusNode\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t\t</div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" waiRole=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" waiRole=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),attributeMap:dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap,{title:{node:"titleNode",type:"innerHTML"},tooltip:{node:"focusNode",type:"attribute",attribute:"title"},id:""}),postCreate:function(){if(!this.open){this.hideNode.style.display=this.wipeNode.style.display="none";}if(this.toggleable){this._trackMouseState(this.titleBarNode,"dijitTitlePaneTitle");}this._setCss();dojo.setSelectable(this.titleNode,false);var _3fb=this.hideNode,_3fc=this.wipeNode;this._wipeIn=dojo.fx.wipeIn({node:this.wipeNode,duration:this.duration,beforeBegin:function(){_3fb.style.display="";}});this._wipeOut=dojo.fx.wipeOut({node:this.wipeNode,duration:this.duration,onEnd:function(){_3fb.style.display="none";}});this.inherited(arguments);},_setOpenAttr:function(open){if(this.open!==open){this.toggle();}dijit.setWaiState(this.containerNode,"hidden",this.open?"false":"true");dijit.setWaiState(this.focusNode,"pressed",this.open?"true":"false");},_setToggleableAttr:function(_3fd){this.toggleable=_3fd;dijit.setWaiRole(this.focusNode,_3fd?"button":"heading");if(_3fd){dijit.setWaiState(this.focusNode,"controls",this.id+"_pane");dojo.attr(this.focusNode,"tabIndex",this.tabIndex);}else{dojo.removeAttr(this.focusNode,"tabIndex");}this._setCss();},_setContentAttr:function(_3fe){if(!this.open||!this._wipeOut||this._wipeOut.status()=="playing"){this.inherited(arguments);}else{if(this._wipeIn&&this._wipeIn.status()=="playing"){this._wipeIn.stop();}dojo.marginBox(this.wipeNode,{h:dojo.marginBox(this.wipeNode).h});this.inherited(arguments);if(this._wipeIn){this._wipeIn.play();}else{this.hideNode.style.display="";}}},toggle:function(){dojo.forEach([this._wipeIn,this._wipeOut],function(_3ff){if(_3ff&&_3ff.status()=="playing"){_3ff.stop();}});var anim=this[this.open?"_wipeOut":"_wipeIn"];if(anim){anim.play();}else{this.hideNode.style.display=this.open?"":"none";}this.open=!this.open;if(this.open){this._onShow();}else{this.onHide();}this._setCss();},_setCss:function(){var node=this.titleBarNode||this.focusNode;if(this._titleBarClass){dojo.removeClass(node,this._titleBarClass);}this._titleBarClass="dijit"+(this.toggleable?"":"Fixed")+(this.open?"Open":"Closed");dojo.addClass(node,this._titleBarClass);this.arrowNodeInner.innerHTML=this.open?"-":"+";},_onTitleKey:function(e){if(e.charOrCode==dojo.keys.ENTER||e.charOrCode==" "){if(this.toggleable){this.toggle();}dojo.stopEvent(e);}else{if(e.charOrCode==dojo.keys.DOWN_ARROW&&this.open){this.containerNode.focus();e.preventDefault();}}},_onTitleClick:function(){if(this.toggleable){this.toggle();}},setTitle:function(_400){dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use set('title', ...) instead.","","2.0");this.set("title",_400);}});}if(!dojo._hasResource["dojo.DeferredList"]){dojo._hasResource["dojo.DeferredList"]=true;dojo.provide("dojo.DeferredList");dojo.DeferredList=function(list,_401,_402,_403,_404){var _405=[];dojo.Deferred.call(this);var self=this;if(list.length===0&&!_401){this.resolve([0,[]]);}var _406=0;dojo.forEach(list,function(item,i){item.then(function(_407){if(_401){self.resolve([i,_407]);}else{_408(true,_407);}},function(_409){if(_402){self.reject(_409);}else{_408(false,_409);}if(_403){return null;}throw _409;});function _408(_40a,_40b){_405[i]=[_40a,_40b];_406++;if(_406===list.length){self.resolve(_405);}};});};dojo.DeferredList.prototype=new dojo.Deferred();dojo.DeferredList.prototype.gatherResults=function(_40c){var d=new dojo.DeferredList(_40c,false,true,false);d.addCallback(function(_40d){var ret=[];dojo.forEach(_40d,function(_40e){ret.push(_40e[1]);});return ret;});return d;};}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_40f,_410){var c=document.cookie;if(arguments.length==1){var _411=c.match(new RegExp("(?:^|; )"+dojo.regexp.escapeString(name)+"=([^;]*)"));return _411?decodeURIComponent(_411[1]):undefined;}else{_410=_410||{};var exp=_410.expires;if(typeof exp=="number"){var d=new Date();d.setTime(d.getTime()+exp*24*60*60*1000);exp=_410.expires=d;}if(exp&&exp.toUTCString){_410.expires=exp.toUTCString();}_40f=encodeURIComponent(_40f);var _412=name+"="+_40f,_413;for(_413 in _410){_412+="; "+_413;var _414=_410[_413];if(_414!==true){_412+="="+_414;}}document.cookie=_412;}};dojo.cookie.isSupported=function(){if(!("cookieEnabled" in navigator)){this("__djCookieTest__","CookiesAllowed");navigator.cookieEnabled=this("__djCookieTest__")=="CookiesAllowed";if(navigator.cookieEnabled){this("__djCookieTest__","",{expires:-1});}}return navigator.cookieEnabled;};}if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){dojo._hasResource["dijit.tree.TreeStoreModel"]=true;dojo.provide("dijit.tree.TreeStoreModel");dojo.declare("dijit.tree.TreeStoreModel",null,{store:null,childrenAttrs:["children"],newItemIdAttr:"id",labelAttr:"",root:null,query:null,deferItemLoadingUntilExpand:false,constructor:function(args){dojo.mixin(this,args);this.connects=[];var _415=this.store;if(!_415.getFeatures()["dojo.data.api.Identity"]){throw new Error("dijit.Tree: store must support dojo.data.Identity");}if(_415.getFeatures()["dojo.data.api.Notification"]){this.connects=this.connects.concat([dojo.connect(_415,"onNew",this,"onNewItem"),dojo.connect(_415,"onDelete",this,"onDeleteItem"),dojo.connect(_415,"onSet",this,"onSetItem")]);}},destroy:function(){dojo.forEach(this.connects,dojo.disconnect);},getRoot:function(_416,_417){if(this.root){_416(this.root);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_418){if(_418.length!=1){throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_418.length+" items, but must return exactly one item");}this.root=_418[0];_416(this.root);}),onError:_417});}},mayHaveChildren:function(item){return dojo.some(this.childrenAttrs,function(attr){return this.store.hasAttribute(item,attr);},this);},getChildren:function(_419,_41a,_41b){var _41c=this.store;if(!_41c.isItemLoaded(_419)){var _41d=dojo.hitch(this,arguments.callee);_41c.loadItem({item:_419,onItem:function(_41e){_41d(_41e,_41a,_41b);},onError:_41b});return;}var _41f=[];for(var i=0;i<this.childrenAttrs.length;i++){var vals=_41c.getValues(_419,this.childrenAttrs[i]);_41f=_41f.concat(vals);}var _420=0;if(!this.deferItemLoadingUntilExpand){dojo.forEach(_41f,function(item){if(!_41c.isItemLoaded(item)){_420++;}});}if(_420==0){_41a(_41f);}else{dojo.forEach(_41f,function(item,idx){if(!_41c.isItemLoaded(item)){_41c.loadItem({item:item,onItem:function(item){_41f[idx]=item;if(--_420==0){_41a(_41f);}},onError:_41b});}});}},isItem:function(_421){return this.store.isItem(_421);},fetchItemByIdentity:function(_422){this.store.fetchItemByIdentity(_422);},getIdentity:function(item){return this.store.getIdentity(item);},getLabel:function(item){if(this.labelAttr){return this.store.getValue(item,this.labelAttr);}else{return this.store.getLabel(item);}},newItem:function(args,_423,_424){var _425={parent:_423,attribute:this.childrenAttrs[0],insertIndex:_424};if(this.newItemIdAttr&&args[this.newItemIdAttr]){this.fetchItemByIdentity({identity:args[this.newItemIdAttr],scope:this,onItem:function(item){if(item){this.pasteItem(item,null,_423,true,_424);}else{this.store.newItem(args,_425);}}});}else{this.store.newItem(args,_425);}},pasteItem:function(_426,_427,_428,_429,_42a){var _42b=this.store,_42c=this.childrenAttrs[0];if(_427){dojo.forEach(this.childrenAttrs,function(attr){if(_42b.containsValue(_427,attr,_426)){if(!_429){var _42d=dojo.filter(_42b.getValues(_427,attr),function(x){return x!=_426;});_42b.setValues(_427,attr,_42d);}_42c=attr;}});}if(_428){if(typeof _42a=="number"){var _42e=_42b.getValues(_428,_42c).slice();_42e.splice(_42a,0,_426);_42b.setValues(_428,_42c,_42e);}else{_42b.setValues(_428,_42c,_42b.getValues(_428,_42c).concat(_426));}}},onChange:function(item){},onChildrenChange:function(_42f,_430){},onDelete:function(_431,_432){},onNewItem:function(item,_433){if(!_433){return;}this.getChildren(_433.item,dojo.hitch(this,function(_434){this.onChildrenChange(_433.item,_434);}));},onDeleteItem:function(item){this.onDelete(item);},onSetItem:function(item,_435,_436,_437){if(dojo.indexOf(this.childrenAttrs,_435)!=-1){this.getChildren(item,dojo.hitch(this,function(_438){this.onChildrenChange(item,_438);}));}else{this.onChange(item);}}});}if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){dojo._hasResource["dijit.tree.ForestStoreModel"]=true;dojo.provide("dijit.tree.ForestStoreModel");dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_439){this.root={store:this,root:true,id:_439.rootId,label:_439.rootLabel,children:_439.rootChildren};},mayHaveChildren:function(item){return item===this.root||this.inherited(arguments);},getChildren:function(_43a,_43b,_43c){if(_43a===this.root){if(this.root.children){_43b(this.root.children);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_43d){this.root.children=_43d;_43b(_43d);}),onError:_43c});}}else{this.inherited(arguments);}},isItem:function(_43e){return (_43e===this.root)?true:this.inherited(arguments);},fetchItemByIdentity:function(_43f){if(_43f.identity==this.root.id){var _440=_43f.scope?_43f.scope:dojo.global;if(_43f.onItem){_43f.onItem.call(_440,this.root);}}else{this.inherited(arguments);}},getIdentity:function(item){return (item===this.root)?this.root.id:this.inherited(arguments);},getLabel:function(item){return (item===this.root)?this.root.label:this.inherited(arguments);},newItem:function(args,_441,_442){if(_441===this.root){this.onNewRootItem(args);return this.store.newItem(args);}else{return this.inherited(arguments);}},onNewRootItem:function(args){},pasteItem:function(_443,_444,_445,_446,_447){if(_444===this.root){if(!_446){this.onLeaveRoot(_443);}}dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_443,_444===this.root?null:_444,_445===this.root?null:_445,_446,_447);if(_445===this.root){this.onAddToRoot(_443);}},onAddToRoot:function(item){},onLeaveRoot:function(item){},_requeryTop:function(){var _448=this.root.children||[];this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_449){this.root.children=_449;if(_448.length!=_449.length||dojo.some(_448,function(item,idx){return _449[idx]!=item;})){this.onChildrenChange(this.root,_449);}})});},onNewItem:function(item,_44a){this._requeryTop();this.inherited(arguments);},onDeleteItem:function(item){if(dojo.indexOf(this.root.children,item)!=-1){this._requeryTop();}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.Tree"]){dojo._hasResource["dijit.Tree"]=true;dojo.provide("dijit.Tree");dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),postCreate:function(){this.inherited(arguments);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}},_setIndentAttr:function(_44b){this.indent=_44b;var _44c=(Math.max(_44b,0)*this.tree._nodePixelIndent)+"px";dojo.style(this.domNode,"backgroundPosition",_44c+" 0px");dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_44c);dojo.forEach(this.getChildren(),function(_44d){_44d.set("indent",_44b+1);});},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(item){var tree=this.tree,_44e=tree.model;if(tree._v10Compat&&item===_44e.root){item=null;}this._applyClassAndStyle(item,"icon","Icon");this._applyClassAndStyle(item,"label","Label");this._applyClassAndStyle(item,"row","Row");},_applyClassAndStyle:function(item,_44f,_450){var _451="_"+_44f+"Class";var _452=_44f+"Node";if(this[_451]){dojo.removeClass(this[_452],this[_451]);}this[_451]=this.tree["get"+_450+"Class"](item,this.isExpanded);if(this[_451]){dojo.addClass(this[_452],this[_451]);}dojo.style(this[_452],this.tree["get"+_450+"Style"](item,this.isExpanded)||{});},_updateLayout:function(){var _453=this.getParent();if(!_453||_453.rowNode.style.display=="none"){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_454){var _455=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_456=["*","-","+","*"],idx=_454?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.removeClass(this.expandoNode,_455);dojo.addClass(this.expandoNode,_455[idx]);this.expandoNodeText.innerHTML=_456[idx];},expand:function(){if(this._expandDeferred){return this._expandDeferred;}this._wipeOut&&this._wipeOut.stop();this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");dijit.setWaiRole(this.containerNode,"group");dojo.addClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","true");}var def,_457=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){def.callback(true);}});def=(this._expandDeferred=new dojo.Deferred(function(){_457.stop();}));_457.play();return def;},collapse:function(){if(!this.isExpanded){return;}if(this._expandDeferred){this._expandDeferred.cancel();delete this._expandDeferred;}this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","false");}dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(!this._wipeOut){this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeOut.play();},indent:0,setChildItems:function(_458){var tree=this.tree,_459=tree.model,defs=[];dojo.forEach(this.getChildren(),function(_45a){dijit._Container.prototype.removeChild.call(this,_45a);},this);this.state="LOADED";if(_458&&_458.length>0){this.isExpandable=true;dojo.forEach(_458,function(item){var id=_459.getIdentity(item),_45b=tree._itemNodesMap[id],node;if(_45b){for(var i=0;i<_45b.length;i++){if(_45b[i]&&!_45b[i].getParent()){node=_45b[i];node.set("indent",this.indent+1);break;}}}if(!node){node=this.tree._createTreeNode({item:item,tree:tree,isExpandable:_459.mayHaveChildren(item),label:tree.getLabel(item),tooltip:tree.getTooltip(item),dir:tree.dir,lang:tree.lang,indent:this.indent+1});if(_45b){_45b.push(node);}else{tree._itemNodesMap[id]=[node];}}this.addChild(node);if(this.tree.autoExpand||this.tree._state(item)){defs.push(tree._expandNode(node));}},this);dojo.forEach(this.getChildren(),function(_45c,idx){_45c._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}this._updateItemClasses(this.item);if(this==tree.rootNode){var fc=this.tree.showRoot?this:this.getChildren()[0];if(fc){fc.setFocusable(true);tree.lastFocused=fc;}else{tree.domNode.setAttribute("tabIndex","0");}}return new dojo.DeferredList(defs);},removeChild:function(node){this.inherited(arguments);var _45d=this.getChildren();if(_45d.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_45d,function(_45e){_45e._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);},_onLabelFocus:function(evt){this.tree._onNodeFocus(this);},setSelected:function(_45f){dijit.setWaiState(this.labelNode,"selected",_45f);dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_45f);},setFocusable:function(_460){this.labelNode.setAttribute("tabIndex",_460?"0":"-1");},_onClick:function(evt){this.tree._onClick(this,evt);},_onDblClick:function(evt){this.tree._onDblClick(this,evt);},_onMouseEnter:function(evt){this.tree._onNodeMouseEnter(this,evt);},_onMouseLeave:function(evt){this.tree._onNodeMouseLeave(this,evt);}});dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],path:[],selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_461,_462){dojo.publish(this.id,[dojo.mixin({tree:this,event:_461},_462||{})]);},postMixInProperties:function(){this.tree=this;if(this.autoExpand){this.persist=false;}this._itemNodesMap={};if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}this._loadDeferred=new dojo.Deferred();this.inherited(arguments);},postCreate:function(){this._initState();if(!this.model){this._store2model();}this.connect(this.model,"onChange","_onItemChange");this.connect(this.model,"onChildrenChange","_onItemChildrenChange");this.connect(this.model,"onDelete","_onItemDelete");this._load();this.inherited(arguments);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _463={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_463[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_463);}},_store2model:function(){this._v10Compat=true;dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");var _464={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};if(this.params.mayHaveChildren){_464.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");}if(this.params.getItemChildren){_464.getChildren=dojo.hitch(this,function(item,_465,_466){this.getItemChildren((this._v10Compat&&item===this.model.root)?null:item,_465,_466);});}this.model=new dijit.tree.ForestStoreModel(_464);this.showRoot=Boolean(this.label);},onLoad:function(){},_load:function(){this.model.getRoot(dojo.hitch(this,function(item){var rn=(this.rootNode=this.tree._createTreeNode({item:item,tree:this,isExpandable:true,label:this.label||this.getLabel(item),indent:this.showRoot?0:-1}));if(!this.showRoot){rn.rowNode.style.display="none";}this.domNode.appendChild(rn.domNode);var _467=this.model.getIdentity(item);if(this._itemNodesMap[_467]){this._itemNodesMap[_467].push(rn);}else{this._itemNodesMap[_467]=[rn];}rn._updateLayout();this._expandNode(rn).addCallback(dojo.hitch(this,function(){this._loadDeferred.callback(true);this.onLoad();}));}),function(err){console.error(this,": error loading root: ",err);});},getNodesByItem:function(item){if(!item){return [];}var _468=dojo.isString(item)?item:this.model.getIdentity(item);return [].concat(this._itemNodesMap[_468]);},_setSelectedItemAttr:function(item){var _469=this.get("selectedItem");var _46a=(!item||dojo.isString(item))?item:this.model.getIdentity(item);if(_46a==_469?this.model.getIdentity(_469):null){return;}var _46b=this._itemNodesMap[_46a];this._selectNode((_46b&&_46b[0])||null);},_getSelectedItemAttr:function(){return this.selectedNode&&this.selectedNode.item;},_setPathAttr:function(path){var d=new dojo.Deferred();this._selectNode(null);if(!path||!path.length){d.resolve(true);return d;}this._loadDeferred.addCallback(dojo.hitch(this,function(){if(!this.rootNode){d.reject(new Error("!this.rootNode"));return;}if(path[0]!==this.rootNode.item&&(dojo.isString(path[0])&&path[0]!=this.model.getIdentity(this.rootNode.item))){d.reject(new Error(this.id+":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));return;}path.shift();var node=this.rootNode;function _46c(){var item=path.shift(),_46d=dojo.isString(item)?item:this.model.getIdentity(item);dojo.some(this._itemNodesMap[_46d],function(n){if(n.getParent()==node){node=n;return true;}return false;});if(path.length){this._expandNode(node).addCallback(dojo.hitch(this,_46c));}else{this._selectNode(node);d.resolve(true);}};this._expandNode(node).addCallback(dojo.hitch(this,_46c));}));return d;},_getPathAttr:function(){if(!this.selectedNode){return;}var res=[];var _46e=this.selectedNode;while(_46e&&_46e!==this.rootNode){res.unshift(_46e.item);_46e=_46e.getParent();}res.unshift(this.rootNode.item);return res;},mayHaveChildren:function(item){},getItemChildren:function(_46f,_470){},getLabel:function(item){return this.model.getLabel(item);},getIconClass:function(item,_471){return (!item||this.model.mayHaveChildren(item))?(_471?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";},getLabelClass:function(item,_472){},getRowClass:function(item,_473){},getIconStyle:function(item,_474){},getLabelStyle:function(item,_475){},getRowStyle:function(item,_476){},getTooltip:function(item){return "";},_onKeyPress:function(e){if(e.altKey){return;}var dk=dojo.keys;var _477=dijit.getEnclosingWidget(e.target);if(!_477){return;}var key=e.charOrCode;if(typeof key=="string"){if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){this._onLetterKeyNav({node:_477,key:key.toLowerCase()});dojo.stopEvent(e);}}else{if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}var map=this._keyHandlerMap;if(!map){map={};map[dk.ENTER]="_onEnterKey";map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";map[dk.UP_ARROW]="_onUpArrow";map[dk.DOWN_ARROW]="_onDownArrow";map[dk.HOME]="_onHomeKey";map[dk.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[key]){this[this._keyHandlerMap[key]]({node:_477,item:_477.item,evt:e});dojo.stopEvent(e);}}},_onEnterKey:function(_478,evt){this._publish("execute",{item:_478.item,node:_478.node});this._selectNode(_478.node);this.onClick(_478.item,_478.node,evt);},_onDownArrow:function(_479){var node=this._getNextNode(_479.node);if(node&&node.isTreeNode){this.focusNode(node);}},_onUpArrow:function(_47a){var node=_47a.node;var _47b=node.getPreviousSibling();if(_47b){node=_47b;while(node.isExpandable&&node.isExpanded&&node.hasChildren()){var _47c=node.getChildren();node=_47c[_47c.length-1];}}else{var _47d=node.getParent();if(!(!this.showRoot&&_47d===this.rootNode)){node=_47d;}}if(node&&node.isTreeNode){this.focusNode(node);}},_onRightArrow:function(_47e){var node=_47e.node;if(node.isExpandable&&!node.isExpanded){this._expandNode(node);}else{if(node.hasChildren()){node=node.getChildren()[0];if(node&&node.isTreeNode){this.focusNode(node);}}}},_onLeftArrow:function(_47f){var node=_47f.node;if(node.isExpandable&&node.isExpanded){this._collapseNode(node);}else{var _480=node.getParent();if(_480&&_480.isTreeNode&&!(!this.showRoot&&_480===this.rootNode)){this.focusNode(_480);}}},_onHomeKey:function(){var node=this._getRootOrFirstNode();if(node){this.focusNode(node);}},_onEndKey:function(_481){var node=this.rootNode;while(node.isExpanded){var c=node.getChildren();node=c[c.length-1];}if(node&&node.isTreeNode){this.focusNode(node);}},multiCharSearchDuration:250,_onLetterKeyNav:function(_482){var cs=this._curSearch;if(cs){cs.pattern=cs.pattern+_482.key;clearTimeout(cs.timer);}else{cs=this._curSearch={pattern:_482.key,startNode:_482.node};}var self=this;cs.timer=setTimeout(function(){delete self._curSearch;},this.multiCharSearchDuration);var node=cs.startNode;do{node=this._getNextNode(node);if(!node){node=this._getRootOrFirstNode();}}while(node!==cs.startNode&&(node.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));if(node&&node.isTreeNode){if(node!==cs.startNode){this.focusNode(node);}}},_onClick:function(_483,e){var _484=e.target,_485=(_484==_483.expandoNode||_484==_483.expandoNodeText);if((this.openOnClick&&_483.isExpandable)||_485){if(_483.isExpandable){this._onExpandoClick({node:_483});}}else{this._publish("execute",{item:_483.item,node:_483,evt:e});this.onClick(_483.item,_483,e);this.focusNode(_483);}if(!_485){this._selectNode(_483);}dojo.stopEvent(e);},_onDblClick:function(_486,e){var _487=e.target,_488=(_487==_486.expandoNode||_487==_486.expandoNodeText);if((this.openOnDblClick&&_486.isExpandable)||_488){if(_486.isExpandable){this._onExpandoClick({node:_486});}}else{this._publish("execute",{item:_486.item,node:_486,evt:e});this.onDblClick(_486.item,_486,e);this.focusNode(_486);}if(!_488){this._selectNode(_486);}dojo.stopEvent(e);},_onExpandoClick:function(_489){var node=_489.node;this.focusNode(node);if(node.isExpanded){this._collapseNode(node);}else{this._expandNode(node);}},onClick:function(item,node,evt){},onDblClick:function(item,node,evt){},onOpen:function(item,node){},onClose:function(item,node){},_getNextNode:function(node){if(node.isExpandable&&node.isExpanded&&node.hasChildren()){return node.getChildren()[0];}else{while(node&&node.isTreeNode){var _48a=node.getNextSibling();if(_48a){return _48a;}node=node.getParent();}return null;}},_getRootOrFirstNode:function(){return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];},_collapseNode:function(node){if(node._expandNodeDeferred){delete node._expandNodeDeferred;}if(node.isExpandable){if(node.state=="LOADING"){return;}node.collapse();this.onClose(node.item,node);if(node.item){this._state(node.item,false);this._saveState();}}},_expandNode:function(node,_48b){if(node._expandNodeDeferred&&!_48b){return node._expandNodeDeferred;}var _48c=this.model,item=node.item,_48d=this;switch(node.state){case "UNCHECKED":node.markProcessing();var def=(node._expandNodeDeferred=new dojo.Deferred());_48c.getChildren(item,function(_48e){node.unmarkProcessing();var scid=node.setChildItems(_48e);var ed=_48d._expandNode(node,true);scid.addCallback(function(){ed.addCallback(function(){def.callback();});});},function(err){console.error(_48d,": error loading root children: ",err);});break;default:def=(node._expandNodeDeferred=node.expand());this.onOpen(node.item,node);if(item){this._state(item,true);this._saveState();}}return def;},focusNode:function(node){dijit.focus(node.labelNode);},_selectNode:function(node){if(this.selectedNode&&!this.selectedNode._destroyed){this.selectedNode.setSelected(false);}if(node){node.setSelected(true);}this.selectedNode=node;},_onNodeFocus:function(node){if(node&&node!=this.lastFocused){if(this.lastFocused&&!this.lastFocused._destroyed){this.lastFocused.setFocusable(false);}node.setFocusable(true);this.lastFocused=node;}},_onNodeMouseEnter:function(node){},_onNodeMouseLeave:function(node){},_onItemChange:function(item){var _48f=this.model,_490=_48f.getIdentity(item),_491=this._itemNodesMap[_490];if(_491){var _492=this.getLabel(item),_493=this.getTooltip(item);dojo.forEach(_491,function(node){node.set({item:item,label:_492,tooltip:_493});node._updateItemClasses(item);});}},_onItemChildrenChange:function(_494,_495){var _496=this.model,_497=_496.getIdentity(_494),_498=this._itemNodesMap[_497];if(_498){dojo.forEach(_498,function(_499){_499.setChildItems(_495);});}},_onItemDelete:function(item){var _49a=this.model,_49b=_49a.getIdentity(item),_49c=this._itemNodesMap[_49b];if(_49c){dojo.forEach(_49c,function(node){var _49d=node.getParent();if(_49d){_49d.removeChild(node);}node.destroyRecursive();});delete this._itemNodesMap[_49b];}},_initState:function(){if(this.persist){var _49e=dojo.cookie(this.cookieName);this._openedItemIds={};if(_49e){dojo.forEach(_49e.split(","),function(item){this._openedItemIds[item]=true;},this);}}},_state:function(item,_49f){if(!this.persist){return false;}var id=this.model.getIdentity(item);if(arguments.length===1){return this._openedItemIds[id];}if(_49f){this._openedItemIds[id]=true;}else{delete this._openedItemIds[id];}},_saveState:function(){if(!this.persist){return;}var ary=[];for(var id in this._openedItemIds){ary.push(id);}dojo.cookie(this.cookieName,ary.join(","),{expires:365});},destroy:function(){if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}if(this.rootNode){this.rootNode.destroyRecursive();}if(this.dndController&&!dojo.isString(this.dndController)){this.dndController.destroy();}this.rootNode=null;this.inherited(arguments);},destroyRecursive:function(){this.destroy();},resize:function(_4a0){if(_4a0){dojo.marginBox(this.domNode,_4a0);dojo.style(this.domNode,"overflow","auto");}this._nodePixelIndent=dojo.marginBox(this.tree.indentDetector).w;if(this.tree.rootNode){this.tree.rootNode.set("indent",this.showRoot?0:-1);}},_createTreeNode:function(args){return new dijit._TreeNode(args);}});}if(!dojo._hasResource["dijit.InlineEditBox"]){dojo._hasResource["dijit.InlineEditBox"]=true;dojo.provide("dijit.InlineEditBox");dojo.declare("dijit.InlineEditBox",dijit._Widget,{editing:false,autoSave:true,buttonSave:"",buttonCancel:"",renderAsHtml:false,editor:"dijit.form.TextBox",editorWrapper:"dijit._InlineEditor",editorParams:{},onChange:function(_4a1){},onCancel:function(){},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>":"<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",constructor:function(){this.editorParams={};},postMixInProperties:function(){this.inherited(arguments);this.displayNode=this.srcNodeRef;var _4a2={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};for(var name in _4a2){this.connect(this.displayNode,name,_4a2[name]);}dijit.setWaiRole(this.displayNode,"button");if(!this.displayNode.getAttribute("tabIndex")){this.displayNode.setAttribute("tabIndex",0);}if(!this.value&&!("value" in this.params)){this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));}if(!this.value){this.displayNode.innerHTML=this.noValueIndicator;}dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");},setDisabled:function(_4a3){dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_4a3);},_setDisabledAttr:function(_4a4){this.disabled=_4a4;dijit.setWaiState(this.domNode,"disabled",_4a4);if(_4a4){this.displayNode.removeAttribute("tabIndex");}else{this.displayNode.setAttribute("tabIndex",0);}dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_4a4);},_onMouseOver:function(){if(!this.disabled){dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");}},_onMouseOut:function(){dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");},_onClick:function(e){if(this.disabled){return;}if(e){dojo.stopEvent(e);}this._onMouseOut();setTimeout(dojo.hitch(this,"edit"),0);},edit:function(){if(this.disabled||this.editing){return;}this.editing=true;this._savedPosition=dojo.style(this.displayNode,"position")||"static";this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";if(this.wrapperWidget){var ew=this.wrapperWidget.editWidget;ew.set("displayedValue" in ew?"displayedValue":"value",this.value);}else{var _4a5=dojo.create("span",null,this.domNode,"before");var ewc=dojo.getObject(this.editorWrapper);this.wrapperWidget=new ewc({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_4a5);}var ww=this.wrapperWidget;if(dojo.isIE){dijit.focus(dijit.getFocus());}dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});dojo.attr(this.displayNode,"tabIndex","-1");setTimeout(dojo.hitch(this,function(){ww.focus();ww._resetValue=ww.getValue();}),0);},_onBlur:function(){this.inherited(arguments);if(!this.editing){}},destroy:function(){if(this.wrapperWidget){this.wrapperWidget.destroy();delete this.wrapperWidget;}this.inherited(arguments);},_showText:function(_4a6){var ww=this.wrapperWidget;dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);if(_4a6){dijit.focus(this.displayNode);}},save:function(_4a7){if(this.disabled||!this.editing){return;}this.editing=false;var ww=this.wrapperWidget;var _4a8=ww.getValue();this.set("value",_4a8);setTimeout(dojo.hitch(this,"onChange",_4a8),0);this._showText(_4a7);},setValue:function(val){dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(val){this.value=val=dojo.trim(val);if(!this.renderAsHtml){val=val.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/\n/g,"<br>");}this.displayNode.innerHTML=val||this.noValueIndicator;},getValue:function(){dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.","","2.0");return this.get("value");},cancel:function(_4a9){if(this.disabled||!this.editing){return;}this.editing=false;setTimeout(dojo.hitch(this,"onCancel"),0);this._showText(_4a9);}});dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit","common",this.lang);dojo.forEach(["buttonSave","buttonCancel"],function(prop){if(!this[prop]){this[prop]=this.messages[prop];}},this);},postCreate:function(){var cls=dojo.getObject(this.editor);var _4aa=this.sourceStyle,_4ab="line-height:"+_4aa.lineHeight+";",_4ac=dojo.getComputedStyle(this.domNode);dojo.forEach(["Weight","Family","Size","Style"],function(prop){var _4ad=_4aa["font"+prop],_4ae=_4ac["font"+prop];if(_4ae!=_4ad){_4ab+="font-"+prop+":"+_4aa["font"+prop]+";";}},this);dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(prop){this.domNode.style[prop]=_4aa[prop];},this);var _4af=this.inlineEditBox.width;if(_4af=="100%"){_4ab+="width:100%;";this.domNode.style.display="block";}else{_4ab+="width:"+(_4af+(Number(_4af)==_4af?"px":""))+";";}var _4b0=dojo.delegate(this.inlineEditBox.editorParams,{style:_4ab,dir:this.dir,lang:this.lang});_4b0["displayedValue" in cls.prototype?"displayedValue":"value"]=this.value;var ew=(this.editWidget=new cls(_4b0,this.editorPlaceholder));if(this.inlineEditBox.autoSave){dojo.destroy(this.buttonContainer);this.connect(ew,"onChange","_onChange");this.connect(ew,"onKeyPress","_onKeyPress");}else{if("intermediateChanges" in cls.prototype){ew.set("intermediateChanges",true);this.connect(ew,"onChange","_onIntermediateChange");this.saveButton.set("disabled",true);}}},_onIntermediateChange:function(val){this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());},destroy:function(){this.editWidget.destroy(true);this.inherited(arguments);},getValue:function(){var ew=this.editWidget;return String(ew.get("displayedValue" in ew?"displayedValue":"value"));},_onKeyPress:function(e){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(e.altKey||e.ctrlKey){return;}if(e.charOrCode==dojo.keys.ESCAPE){dojo.stopEvent(e);this.cancel(true);}else{if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){dojo.stopEvent(e);this._onChange();}}}},_onBlur:function(){this.inherited(arguments);if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(this.getValue()==this._resetValue){this.cancel(false);}else{if(this.enableSave()){this.save(false);}}}},_onChange:function(){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){dojo.style(this.inlineEditBox.displayNode,{display:""});dijit.focus(this.inlineEditBox.displayNode);}},enableSave:function(){return (this.editWidget.isValid?this.editWidget.isValid():true);},focus:function(){this.editWidget.focus();setTimeout(dojo.hitch(this,function(){if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){dijit.selectInputText(this.editWidget.focusNode);}}),0);}});}if(!dojo._hasResource["dijit.form.Form"]){dojo._hasResource["dijit.form.Form"]=true;dojo.provide("dijit.form.Form");dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";this.inherited(arguments);},execute:function(_4b1){},onExecute:function(){},_setEncTypeAttr:function(_4b2){this.encType=_4b2;dojo.attr(this.domNode,"encType",_4b2);if(dojo.isIE){this.domNode.encoding=_4b2;}},postCreate:function(){if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){var item=this.srcNodeRef.attributes.getNamedItem("encType");if(item&&!item.specified&&(typeof item.value=="string")){this.set("encType",item.value);}}this.inherited(arguments);},reset:function(e){var faux={returnValue:true,preventDefault:function(){this.returnValue=false;},stopPropagation:function(){},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};if(!(this.onReset(faux)===false)&&faux.returnValue){this.inherited(arguments,[]);}},onReset:function(e){return true;},_onReset:function(e){this.reset(e);dojo.stopEvent(e);return false;},_onSubmit:function(e){var fp=dijit.form.Form.prototype;if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");this.onExecute();this.execute(this.getValues());}if(this.onSubmit(e)===false){dojo.stopEvent(e);}},onSubmit:function(e){return this.isValid();},submit:function(){if(!(this.onSubmit()===false)){this.containerNode.submit();}}});}if(!dojo._hasResource["dijit.form.DropDownButton"]){dojo._hasResource["dijit.form.DropDownButton"]=true;dojo.provide("dijit.form.DropDownButton");}if(!dojo._hasResource["dijit.form.ComboButton"]){dojo._hasResource["dijit.form.ComboButton"]=true;dojo.provide("dijit.form.ComboButton");}if(!dojo._hasResource["dijit.form.ToggleButton"]){dojo._hasResource["dijit.form.ToggleButton"]=true;dojo.provide("dijit.form.ToggleButton");}if(!dojo._hasResource["dijit.form.CheckBox"]){dojo._hasResource["dijit.form.CheckBox"]=true;dojo.provide("dijit.form.CheckBox");dojo.declare("dijit.form.CheckBox",dijit.form.ToggleButton,{templateString:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_4b3){this.readOnly=_4b3;dojo.attr(this.focusNode,"readOnly",_4b3);dijit.setWaiState(this.focusNode,"readonly",_4b3);},_setValueAttr:function(_4b4,_4b5){if(typeof _4b4=="string"){this.value=_4b4;dojo.attr(this.focusNode,"value",_4b4);_4b4=true;}if(this._created){this.set("checked",_4b4,_4b5);}},_getValueAttr:function(){return (this.checked?this.value:false);},_setLabelAttr:undefined,postMixInProperties:function(){if(this.value==""){this.value="on";}this.checkedAttrSetting=this.checked?"checked":"";this.inherited(arguments);},_fillContent:function(_4b6){},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);this.value=this.params.value||"on";dojo.attr(this.focusNode,"value",this.value);},_onFocus:function(){if(this.id){dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");}this.inherited(arguments);},_onBlur:function(){if(this.id){dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");}this.inherited(arguments);},_onClick:function(e){if(this.readOnly){return false;}return this.inherited(arguments);}});dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_4b7){this.inherited(arguments);if(!this._created){return;}if(_4b7){var _4b8=this;dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_4b9){if(_4b9.name==_4b8.name&&_4b9!=_4b8.focusNode&&_4b9.form==_4b8.focusNode.form){var _4ba=dijit.getEnclosingWidget(_4b9);if(_4ba&&_4ba.checked){_4ba.set("checked",false);}}});}},_clicked:function(e){if(!this.checked){this.set("checked",true);}}});}if(!dojo._hasResource["dijit.form.RadioButton"]){dojo._hasResource["dijit.form.RadioButton"]=true;dojo.provide("dijit.form.RadioButton");}if(!dojo._hasResource["dojo.cldr.monetary"]){dojo._hasResource["dojo.cldr.monetary"]=true;dojo.provide("dojo.cldr.monetary");dojo.cldr.monetary.getData=function(code){var _4bb={ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0};var _4bc={CHF:5};var _4bd=_4bb[code],_4be=_4bc[code];if(typeof _4bd=="undefined"){_4bd=2;}if(typeof _4be=="undefined"){_4be=0;}return {places:_4bd,round:_4be};};}if(!dojo._hasResource["dojo.currency"]){dojo._hasResource["dojo.currency"]=true;dojo.provide("dojo.currency");dojo.currency._mixInDefaults=function(_4bf){_4bf=_4bf||{};_4bf.type="currency";var _4c0=dojo.i18n.getLocalization("dojo.cldr","currency",_4bf.locale)||{};var iso=_4bf.currency;var data=dojo.cldr.monetary.getData(iso);dojo.forEach(["displayName","symbol","group","decimal"],function(prop){data[prop]=_4c0[iso+"_"+prop];});data.fractional=[true,false];return dojo.mixin(data,_4bf);};dojo.currency.format=function(_4c1,_4c2){return dojo.number.format(_4c1,dojo.currency._mixInDefaults(_4c2));};dojo.currency.regexp=function(_4c3){return dojo.number.regexp(dojo.currency._mixInDefaults(_4c3));};dojo.currency.parse=function(_4c4,_4c5){return dojo.number.parse(_4c4,dojo.currency._mixInDefaults(_4c5));};}if(!dojo._hasResource["dijit.form.NumberTextBox"]){dojo._hasResource["dijit.form.NumberTextBox"]=true;dojo.provide("dijit.form.NumberTextBox");dojo.declare("dijit.form.NumberTextBoxMixin",null,{regExpGen:dojo.number.regexp,value:NaN,editOptions:{pattern:"#.######"},_formatter:dojo.number.format,_setConstraintsAttr:function(_4c6){var _4c7=typeof _4c6.places=="number"?_4c6.places:0;if(_4c7){_4c7++;}if(typeof _4c6.max!="number"){_4c6.max=9*Math.pow(10,15-_4c7);}if(typeof _4c6.min!="number"){_4c6.min=-9*Math.pow(10,15-_4c7);}this.inherited(arguments,[_4c6]);if(this.focusNode&&this.focusNode.value&&!isNaN(this.value)){this.set("value",this.value);}},_onFocus:function(){if(this.disabled){return;}var val=this.get("value");if(typeof val=="number"&&!isNaN(val)){var _4c8=this.format(val,this.constraints);if(_4c8!==undefined){this.textbox.value=_4c8;}}this.inherited(arguments);},format:function(_4c9,_4ca){var _4cb=String(_4c9);if(typeof _4c9!="number"){return _4cb;}if(isNaN(_4c9)){return "";}if(!("rangeCheck" in this&&this.rangeCheck(_4c9,_4ca))&&_4ca.exponent!==false&&/\de[-+]?\d/i.test(_4cb)){return _4cb;}if(this.editOptions&&this._focused){_4ca=dojo.mixin({},_4ca,this.editOptions);}return this._formatter(_4c9,_4ca);},parse:dojo.number.parse,_getDisplayedValueAttr:function(){var v=this.inherited(arguments);return isNaN(v)?this.textbox.value:v;},filter:function(_4cc){return (_4cc===null||_4cc===""||_4cc===undefined)?NaN:this.inherited(arguments);},serialize:function(_4cd,_4ce){return (typeof _4cd!="number"||isNaN(_4cd))?"":this.inherited(arguments);},_setValueAttr:function(_4cf,_4d0,_4d1){if(_4cf!==undefined&&_4d1===undefined){_4d1=String(_4cf);if(typeof _4cf=="number"){if(isNaN(_4cf)){_4d1="";}else{if(("rangeCheck" in this&&this.rangeCheck(_4cf,this.constraints))||this.constraints.exponent===false||!/\de[-+]?\d/i.test(_4d1)){_4d1=undefined;}}}else{if(!_4cf){_4d1="";_4cf=NaN;}else{_4cf=undefined;}}}this.inherited(arguments,[_4cf,_4d0,_4d1]);},_getValueAttr:function(){var v=this.inherited(arguments);if(isNaN(v)&&this.textbox.value!==""){if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)&&(new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({},this.constraints))+"$").test(this.textbox.value))){var n=Number(this.textbox.value);return isNaN(n)?undefined:n;}else{return undefined;}}else{return v;}},isValid:function(_4d2){if(!this._focused||this._isEmpty(this.textbox.value)){return this.inherited(arguments);}else{var v=this.get("value");if(!isNaN(v)&&this.rangeCheck(v,this.constraints)){if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)){return true;}else{return this.inherited(arguments);}}else{return false;}}}});dojo.declare("dijit.form.NumberTextBox",[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],{});}if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){dojo._hasResource["dijit.form.CurrencyTextBox"]=true;dojo.provide("dijit.form.CurrencyTextBox");dojo.declare("dijit.form.CurrencyTextBox",dijit.form.NumberTextBox,{currency:"",baseClass:"dijitTextBox dijitCurrencyTextBox",regExpGen:function(_4d3){return "("+(this._focused?this.inherited(arguments,[dojo.mixin({},_4d3,this.editOptions)])+"|":"")+dojo.currency.regexp(_4d3)+")";},_formatter:dojo.currency.format,parse:function(_4d4,_4d5){var v=dojo.currency.parse(_4d4,_4d5);if(isNaN(v)&&/\d+/.test(_4d4)){return this.inherited(arguments,[_4d4,dojo.mixin({},_4d5,this.editOptions)]);}return v;},_setConstraintsAttr:function(_4d6){if(!_4d6.currency&&this.currency){_4d6.currency=this.currency;}this.inherited(arguments,[dojo.currency._mixInDefaults(dojo.mixin(_4d6,{exponent:false}))]);}});}if(!dojo._hasResource["dojo.cldr.supplemental"]){dojo._hasResource["dojo.cldr.supplemental"]=true;dojo.provide("dojo.cldr.supplemental");dojo.cldr.supplemental.getFirstDayOfWeek=function(_4d7){var _4d8={mv:5,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,ar:0,as:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,"in":0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mn:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,sy:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,zw:0};var _4d9=dojo.cldr.supplemental._region(_4d7);var dow=_4d8[_4d9];return (dow===undefined)?1:dow;};dojo.cldr.supplemental._region=function(_4da){_4da=dojo.i18n.normalizeLocale(_4da);var tags=_4da.split("-");var _4db=tags[1];if(!_4db){_4db={de:"de",en:"us",es:"es",fi:"fi",fr:"fr",he:"il",hu:"hu",it:"it",ja:"jp",ko:"kr",nl:"nl",pt:"br",sv:"se",zh:"cn"}[tags[0]];}else{if(_4db.length==4){_4db=tags[2];}}return _4db;};dojo.cldr.supplemental.getWeekend=function(_4dc){var _4dd={"in":0,af:4,dz:4,ir:4,om:4,sa:4,ye:4,ae:5,bh:5,eg:5,il:5,iq:5,jo:5,kw:5,ly:5,ma:5,qa:5,sd:5,sy:5,tn:5};var _4de={af:5,dz:5,ir:5,om:5,sa:5,ye:5,ae:6,bh:5,eg:6,il:6,iq:6,jo:6,kw:6,ly:6,ma:6,qa:6,sd:6,sy:6,tn:6};var _4df=dojo.cldr.supplemental._region(_4dc);var _4e0=_4dd[_4df];var end=_4de[_4df];if(_4e0===undefined){_4e0=6;}if(end===undefined){end=0;}return {start:_4e0,end:end};};}if(!dojo._hasResource["dojo.date"]){dojo._hasResource["dojo.date"]=true;dojo.provide("dojo.date");dojo.date.getDaysInMonth=function(_4e1){var _4e2=_4e1.getMonth();var days=[31,28,31,30,31,30,31,31,30,31,30,31];if(_4e2==1&&dojo.date.isLeapYear(_4e1)){return 29;}return days[_4e2];};dojo.date.isLeapYear=function(_4e3){var year=_4e3.getFullYear();return !(year%400)||(!(year%4)&&!!(year%100));};dojo.date.getTimezoneName=function(_4e4){var str=_4e4.toString();var tz="";var _4e5;var pos=str.indexOf("(");if(pos>-1){tz=str.substring(++pos,str.indexOf(")"));}else{var pat=/([A-Z\/]+) \d{4}$/;if((_4e5=str.match(pat))){tz=_4e5[1];}else{str=_4e4.toLocaleString();pat=/ ([A-Z\/]+)$/;if((_4e5=str.match(pat))){tz=_4e5[1];}}}return (tz=="AM"||tz=="PM")?"":tz;};dojo.date.compare=function(_4e6,_4e7,_4e8){_4e6=new Date(+_4e6);_4e7=new Date(+(_4e7||new Date()));if(_4e8=="date"){_4e6.setHours(0,0,0,0);_4e7.setHours(0,0,0,0);}else{if(_4e8=="time"){_4e6.setFullYear(0,0,0);_4e7.setFullYear(0,0,0);}}if(_4e6>_4e7){return 1;}if(_4e6<_4e7){return -1;}return 0;};dojo.date.add=function(date,_4e9,_4ea){var sum=new Date(+date);var _4eb=false;var _4ec="Date";switch(_4e9){case "day":break;case "weekday":var days,_4ed;var mod=_4ea%5;if(!mod){days=(_4ea>0)?5:-5;_4ed=(_4ea>0)?((_4ea-5)/5):((_4ea+5)/5);}else{days=mod;_4ed=parseInt(_4ea/5);}var strt=date.getDay();var adj=0;if(strt==6&&_4ea>0){adj=1;}else{if(strt==0&&_4ea<0){adj=-1;}}var trgt=strt+days;if(trgt==0||trgt==6){adj=(_4ea>0)?2:-2;}_4ea=(7*_4ed)+days+adj;break;case "year":_4ec="FullYear";_4eb=true;break;case "week":_4ea*=7;break;case "quarter":_4ea*=3;case "month":_4eb=true;_4ec="Month";break;default:_4ec="UTC"+_4e9.charAt(0).toUpperCase()+_4e9.substring(1)+"s";}if(_4ec){sum["set"+_4ec](sum["get"+_4ec]()+_4ea);}if(_4eb&&(sum.getDate()<date.getDate())){sum.setDate(0);}return sum;};dojo.date.difference=function(_4ee,_4ef,_4f0){_4ef=_4ef||new Date();_4f0=_4f0||"day";var _4f1=_4ef.getFullYear()-_4ee.getFullYear();var _4f2=1;switch(_4f0){case "quarter":var m1=_4ee.getMonth();var m2=_4ef.getMonth();var q1=Math.floor(m1/3)+1;var q2=Math.floor(m2/3)+1;q2+=(_4f1*4);_4f2=q2-q1;break;case "weekday":var days=Math.round(dojo.date.difference(_4ee,_4ef,"day"));var _4f3=parseInt(dojo.date.difference(_4ee,_4ef,"week"));var mod=days%7;if(mod==0){days=_4f3*5;}else{var adj=0;var aDay=_4ee.getDay();var bDay=_4ef.getDay();_4f3=parseInt(days/7);mod=days%7;var _4f4=new Date(_4ee);_4f4.setDate(_4f4.getDate()+(_4f3*7));var _4f5=_4f4.getDay();if(days>0){switch(true){case aDay==6:adj=-1;break;case aDay==0:adj=0;break;case bDay==6:adj=-1;break;case bDay==0:adj=-2;break;case (_4f5+mod)>5:adj=-2;}}else{if(days<0){switch(true){case aDay==6:adj=0;break;case aDay==0:adj=1;break;case bDay==6:adj=2;break;case bDay==0:adj=1;break;case (_4f5+mod)<0:adj=2;}}}days+=adj;days-=(_4f3*2);}_4f2=days;break;case "year":_4f2=_4f1;break;case "month":_4f2=(_4ef.getMonth()-_4ee.getMonth())+(_4f1*12);break;case "week":_4f2=parseInt(dojo.date.difference(_4ee,_4ef,"day")/7);break;case "day":_4f2/=24;case "hour":_4f2/=60;case "minute":_4f2/=60;case "second":_4f2/=1000;case "millisecond":_4f2*=_4ef.getTime()-_4ee.getTime();}return Math.round(_4f2);};}if(!dojo._hasResource["dojo.date.locale"]){dojo._hasResource["dojo.date.locale"]=true;dojo.provide("dojo.date.locale");(function(){function _4f6(_4f7,_4f8,_4f9,_4fa){return _4fa.replace(/([a-z])\1*/ig,function(_4fb){var s,pad,c=_4fb.charAt(0),l=_4fb.length,_4fc=["abbr","wide","narrow"];switch(c){case "G":s=_4f8[(l<4)?"eraAbbr":"eraNames"][_4f7.getFullYear()<0?0:1];break;case "y":s=_4f7.getFullYear();switch(l){case 1:break;case 2:if(!_4f9.fullYear){s=String(s);s=s.substr(s.length-2);break;}default:pad=true;}break;case "Q":case "q":s=Math.ceil((_4f7.getMonth()+1)/3);pad=true;break;case "M":var m=_4f7.getMonth();if(l<3){s=m+1;pad=true;}else{var _4fd=["months","format",_4fc[l-3]].join("-");s=_4f8[_4fd][m];}break;case "w":var _4fe=0;s=dojo.date.locale._getWeekOfYear(_4f7,_4fe);pad=true;break;case "d":s=_4f7.getDate();pad=true;break;case "D":s=dojo.date.locale._getDayOfYear(_4f7);pad=true;break;case "E":var d=_4f7.getDay();if(l<3){s=d+1;pad=true;}else{var _4ff=["days","format",_4fc[l-3]].join("-");s=_4f8[_4ff][d];}break;case "a":var _500=(_4f7.getHours()<12)?"am":"pm";s=_4f8["dayPeriods-format-wide-"+_500];break;case "h":case "H":case "K":case "k":var h=_4f7.getHours();switch(c){case "h":s=(h%12)||12;break;case "H":s=h;break;case "K":s=(h%12);break;case "k":s=h||24;break;}pad=true;break;case "m":s=_4f7.getMinutes();pad=true;break;case "s":s=_4f7.getSeconds();pad=true;break;case "S":s=Math.round(_4f7.getMilliseconds()*Math.pow(10,l-3));pad=true;break;case "v":case "z":s=dojo.date.locale._getZone(_4f7,true,_4f9);if(s){break;}l=4;case "Z":var _501=dojo.date.locale._getZone(_4f7,false,_4f9);var tz=[(_501<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_501)/60),2),dojo.string.pad(Math.abs(_501)%60,2)];if(l==4){tz.splice(0,0,"GMT");tz.splice(3,0,":");}s=tz.join("");break;default:throw new Error("dojo.date.locale.format: invalid pattern char: "+_4fa);}if(pad){s=dojo.string.pad(s,l);}return s;});};dojo.date.locale._getZone=function(_502,_503,_504){if(_503){return dojo.date.getTimezoneName(_502);}else{return _502.getTimezoneOffset();}};dojo.date.locale.format=function(_505,_506){_506=_506||{};var _507=dojo.i18n.normalizeLocale(_506.locale),_508=_506.formatLength||"short",_509=dojo.date.locale._getGregorianBundle(_507),str=[],_50a=dojo.hitch(this,_4f6,_505,_509,_506);if(_506.selector=="year"){return _50b(_509["dateFormatItem-yyyy"]||"yyyy",_50a);}var _50c;if(_506.selector!="date"){_50c=_506.timePattern||_509["timeFormat-"+_508];if(_50c){str.push(_50b(_50c,_50a));}}if(_506.selector!="time"){_50c=_506.datePattern||_509["dateFormat-"+_508];if(_50c){str.push(_50b(_50c,_50a));}}return str.length==1?str[0]:_509["dateTimeFormat-"+_508].replace(/\{(\d+)\}/g,function(_50d,key){return str[key];});};dojo.date.locale.regexp=function(_50e){return dojo.date.locale._parseInfo(_50e).regexp;};dojo.date.locale._parseInfo=function(_50f){_50f=_50f||{};var _510=dojo.i18n.normalizeLocale(_50f.locale),_511=dojo.date.locale._getGregorianBundle(_510),_512=_50f.formatLength||"short",_513=_50f.datePattern||_511["dateFormat-"+_512],_514=_50f.timePattern||_511["timeFormat-"+_512],_515;if(_50f.selector=="date"){_515=_513;}else{if(_50f.selector=="time"){_515=_514;}else{_515=_511["dateTimeFormat-"+_512].replace(/\{(\d+)\}/g,function(_516,key){return [_514,_513][key];});}}var _517=[],re=_50b(_515,dojo.hitch(this,_518,_517,_511,_50f));return {regexp:re,tokens:_517,bundle:_511};};dojo.date.locale.parse=function(_519,_51a){var info=dojo.date.locale._parseInfo(_51a),_51b=info.tokens,_51c=info.bundle,re=new RegExp("^"+info.regexp+"$",info.strict?"":"i"),_51d=re.exec(_519);if(!_51d){return null;}var _51e=["abbr","wide","narrow"],_51f=[1970,0,1,0,0,0,0],amPm="",_520=dojo.every(_51d,function(v,i){if(!i){return true;}var _521=_51b[i-1];var l=_521.length;switch(_521.charAt(0)){case "y":if(l!=2&&_51a.strict){_51f[0]=v;}else{if(v<100){v=Number(v);var year=""+new Date().getFullYear(),_522=year.substring(0,2)*100,_523=Math.min(Number(year.substring(2,4))+20,99),num=(v<_523)?_522+v:_522-100+v;_51f[0]=num;}else{if(_51a.strict){return false;}_51f[0]=v;}}break;case "M":if(l>2){var _524=_51c["months-format-"+_51e[l-3]].concat();if(!_51a.strict){v=v.replace(".","").toLowerCase();_524=dojo.map(_524,function(s){return s.replace(".","").toLowerCase();});}v=dojo.indexOf(_524,v);if(v==-1){return false;}}else{v--;}_51f[1]=v;break;case "E":case "e":var days=_51c["days-format-"+_51e[l-3]].concat();if(!_51a.strict){v=v.toLowerCase();days=dojo.map(days,function(d){return d.toLowerCase();});}v=dojo.indexOf(days,v);if(v==-1){return false;}break;case "D":_51f[1]=0;case "d":_51f[2]=v;break;case "a":var am=_51a.am||_51c["dayPeriods-format-wide-am"],pm=_51a.pm||_51c["dayPeriods-format-wide-pm"];if(!_51a.strict){var _525=/\./g;v=v.replace(_525,"").toLowerCase();am=am.replace(_525,"").toLowerCase();pm=pm.replace(_525,"").toLowerCase();}if(_51a.strict&&v!=am&&v!=pm){return false;}amPm=(v==pm)?"p":(v==am)?"a":"";break;case "K":if(v==24){v=0;}case "h":case "H":case "k":if(v>23){return false;}_51f[3]=v;break;case "m":_51f[4]=v;break;case "s":_51f[5]=v;break;case "S":_51f[6]=v;}return true;});var _526=+_51f[3];if(amPm==="p"&&_526<12){_51f[3]=_526+12;}else{if(amPm==="a"&&_526==12){_51f[3]=0;}}var _527=new Date(_51f[0],_51f[1],_51f[2],_51f[3],_51f[4],_51f[5],_51f[6]);if(_51a.strict){_527.setFullYear(_51f[0]);}var _528=_51b.join(""),_529=_528.indexOf("d")!=-1,_52a=_528.indexOf("M")!=-1;if(!_520||(_52a&&_527.getMonth()>_51f[1])||(_529&&_527.getDate()>_51f[2])){return null;}if((_52a&&_527.getMonth()<_51f[1])||(_529&&_527.getDate()<_51f[2])){_527=dojo.date.add(_527,"hour",1);}return _527;};function _50b(_52b,_52c,_52d,_52e){var _52f=function(x){return x;};_52c=_52c||_52f;_52d=_52d||_52f;_52e=_52e||_52f;var _530=_52b.match(/(''|[^'])+/g),_531=_52b.charAt(0)=="'";dojo.forEach(_530,function(_532,i){if(!_532){_530[i]="";}else{_530[i]=(_531?_52d:_52c)(_532.replace(/''/g,"'"));_531=!_531;}});return _52e(_530.join(""));};function _518(_533,_534,_535,_536){_536=dojo.regexp.escapeString(_536);if(!_535.strict){_536=_536.replace(" a"," ?a");}return _536.replace(/([a-z])\1*/ig,function(_537){var s,c=_537.charAt(0),l=_537.length,p2="",p3="";if(_535.strict){if(l>1){p2="0"+"{"+(l-1)+"}";}if(l>2){p3="0"+"{"+(l-2)+"}";}}else{p2="0?";p3="0{0,2}";}switch(c){case "y":s="\\d{2,4}";break;case "M":s=(l>2)?"\\S+?":p2+"[1-9]|1[0-2]";break;case "D":s=p2+"[1-9]|"+p3+"[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]";break;case "d":s="3[01]|[12]\\d|"+p2+"[1-9]";break;case "w":s=p2+"[1-9]|[1-4][0-9]|5[0-3]";break;case "E":s="\\S+";break;case "h":s=p2+"[1-9]|1[0-2]";break;case "k":s=p2+"\\d|1[01]";break;case "H":s=p2+"\\d|1\\d|2[0-3]";break;case "K":s=p2+"[1-9]|1\\d|2[0-4]";break;case "m":case "s":s="[0-5]\\d";break;case "S":s="\\d{"+l+"}";break;case "a":var am=_535.am||_534["dayPeriods-format-wide-am"],pm=_535.pm||_534["dayPeriods-format-wide-pm"];if(_535.strict){s=am+"|"+pm;}else{s=am+"|"+pm;if(am!=am.toLowerCase()){s+="|"+am.toLowerCase();}if(pm!=pm.toLowerCase()){s+="|"+pm.toLowerCase();}if(s.indexOf(".")!=-1){s+="|"+s.replace(/\./g,"");}}s=s.replace(/\./g,"\\.");break;default:s=".*";}if(_533){_533.push(_537);}return "("+s+")";}).replace(/[\xa0 ]/g,"[\\s\\xa0]");};})();(function(){var _538=[];dojo.date.locale.addCustomFormats=function(_539,_53a){_538.push({pkg:_539,name:_53a});};dojo.date.locale._getGregorianBundle=function(_53b){var _53c={};dojo.forEach(_538,function(desc){var _53d=dojo.i18n.getLocalization(desc.pkg,desc.name,_53b);_53c=dojo.mixin(_53c,_53d);},this);return _53c;};})();dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");dojo.date.locale.getNames=function(item,type,_53e,_53f){var _540,_541=dojo.date.locale._getGregorianBundle(_53f),_542=[item,_53e,type];if(_53e=="standAlone"){var key=_542.join("-");_540=_541[key];if(_540[0]==1){_540=undefined;}}_542[1]="format";return (_540||_541[_542.join("-")]).concat();};dojo.date.locale.isWeekend=function(_543,_544){var _545=dojo.cldr.supplemental.getWeekend(_544),day=(_543||new Date()).getDay();if(_545.end<_545.start){_545.end+=7;if(day<_545.start){day+=7;}}return day>=_545.start&&day<=_545.end;};dojo.date.locale._getDayOfYear=function(_546){return dojo.date.difference(new Date(_546.getFullYear(),0,1,_546.getHours()),_546)+1;};dojo.date.locale._getWeekOfYear=function(_547,_548){if(arguments.length==1){_548=0;}var _549=new Date(_547.getFullYear(),0,1).getDay(),adj=(_549-_548+7)%7,week=Math.floor((dojo.date.locale._getDayOfYear(_547)+adj-1)/7);if(_549==_548){week++;}return week;};}if(!dojo._hasResource["dijit.Calendar"]){dojo._hasResource["dijit.Calendar"]=true;dojo.provide("dijit.Calendar");dojo.declare("dijit.Calendar",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Calendar.html","<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\" role=\"grid\" dojoAttachEvent=\"onkeypress: _onKeyPress\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarDecrease\" waiRole=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow\">-</span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div class=\"dijitVisible\">\n\t\t\t\t\t<div class=\"dijitPopup dijitMenu dijitMenuPassive dijitHidden\" dojoAttachPoint=\"monthDropDown\" dojoAttachEvent=\"onmouseup: _onMonthSelect, onmouseover: _onMenuHover, onmouseout: _onMenuHover\">\n\t\t\t\t\t\t<div class=\"dijitCalendarMonthLabelTemplate dijitCalendarMonthLabel\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonthLabel dijitInline dijitVisible\" dojoAttachEvent=\"onmousedown: _onMonthToggle\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarIncrease\" waiRole=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow\">+</span>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\" role=\"columnheader\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\" role=\"row\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\" role=\"gridcell\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\n"),value:new Date(),datePackage:"dojo.date",dayWidth:"narrow",tabIndex:"0",baseClass:"dijitCalendar",cssStateNodes:{"decrementMonth":"dijitCalendarArrow","incrementMonth":"dijitCalendarArrow","previousYearLabelNode":"dijitCalendarPreviousYear","nextYearLabelNode":"dijitCalendarNextYear"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{tabIndex:"domNode"}),setValue:function(_54a){dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.","","2.0");this.set("value",_54a);},_getValueAttr:function(){var _54b=new this.dateClassObj(this.value);_54b.setHours(0,0,0,0);if(_54b.getDate()<this.value.getDate()){_54b=this.dateFuncObj.add(_54b,"hour",1);}return _54b;},_setValueAttr:function(_54c){if(!this.value||this.dateFuncObj.compare(_54c,this.value)){_54c=new this.dateClassObj(_54c);_54c.setHours(1);this.displayMonth=new this.dateClassObj(_54c);if(!this.isDisabledDate(_54c,this.lang)){this.value=_54c;this.onChange(this.get("value"));}dojo.attr(this.domNode,"aria-label",this.dateLocaleModule.format(_54c,{selector:"date",formatLength:"full"}));this._populateGrid();}},_setText:function(node,text){while(node.firstChild){node.removeChild(node.firstChild);}node.appendChild(dojo.doc.createTextNode(text));},_populateGrid:function(){var _54d=this.displayMonth;_54d.setDate(1);var _54e=_54d.getDay(),_54f=this.dateFuncObj.getDaysInMonth(_54d),_550=this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(_54d,"month",-1)),_551=new this.dateClassObj(),_552=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);if(_552>_54e){_552-=7;}dojo.query(".dijitCalendarDateTemplate",this.domNode).forEach(function(_553,i){i+=_552;var date=new this.dateClassObj(_54d),_554,_555="dijitCalendar",adj=0;if(i<_54e){_554=_550-_54e+i+1;adj=-1;_555+="Previous";}else{if(i>=(_54e+_54f)){_554=i-_54e-_54f+1;adj=1;_555+="Next";}else{_554=i-_54e+1;_555+="Current";}}if(adj){date=this.dateFuncObj.add(date,"month",adj);}date.setDate(_554);if(!this.dateFuncObj.compare(date,_551,"date")){_555="dijitCalendarCurrentDate "+_555;}if(this._isSelectedDate(date,this.lang)){_555="dijitCalendarSelectedDate "+_555;}if(this.isDisabledDate(date,this.lang)){_555="dijitCalendarDisabledDate "+_555;}var _556=this.getClassForDate(date,this.lang);if(_556){_555=_556+" "+_555;}_553.className=_555+"Month dijitCalendarDateTemplate";_553.dijitDateValue=date.valueOf();var _557=dojo.query(".dijitCalendarDateLabel",_553)[0],text=date.getDateLocalized?date.getDateLocalized(this.lang):date.getDate();this._setText(_557,text);},this);var _558=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_54d);this._setText(this.monthLabelNode,_558[_54d.getMonth()]);dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(node,i){dojo.toggleClass(node,"dijitHidden",!(i in _558));this._setText(node,_558[i]);},this);var y=_54d.getFullYear()-1;var d=new this.dateClassObj();dojo.forEach(["previous","current","next"],function(name){d.setFullYear(y++);this._setText(this[name+"YearLabelNode"],this.dateLocaleModule.format(d,{selector:"year",locale:this.lang}));},this);var _559=this;var _55a=function(_55b,_55c,adj){_559._connects.push(dijit.typematic.addMouseListener(_559[_55b],_559,function(_55d){if(_55d>=0){_559._adjustDisplay(_55c,adj);}},0.8,500));};_55a("incrementMonth","month",1);_55a("decrementMonth","month",-1);_55a("nextYearLabelNode","year",1);_55a("previousYearLabelNode","year",-1);},goToToday:function(){this.set("value",new this.dateClassObj());},constructor:function(args){var _55e=(args.datePackage&&(args.datePackage!="dojo.date"))?args.datePackage+".Date":"Date";this.dateClassObj=dojo.getObject(_55e,false);this.datePackage=args.datePackage||this.datePackage;this.dateFuncObj=dojo.getObject(this.datePackage,false);this.dateLocaleModule=dojo.getObject(this.datePackage+".locale",false);},postMixInProperties:function(){if(isNaN(this.value)){delete this.value;}this.inherited(arguments);},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _55f=dojo.hitch(this,function(_560,n){var _561=dojo.query(_560,this.domNode)[0];for(var i=0;i<n;i++){_561.parentNode.appendChild(_561.cloneNode(true));}});_55f(".dijitCalendarDayLabelTemplate",6);_55f(".dijitCalendarDateTemplate",6);_55f(".dijitCalendarWeekTemplate",5);var _562=this.dateLocaleModule.getNames("days",this.dayWidth,"standAlone",this.lang);var _563=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_564,i){this._setText(_564,_562[(i+_563)%7]);},this);var _565=new this.dateClassObj(this.value);var _566=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_565);_55f(".dijitCalendarMonthLabelTemplate",_566.length-1);dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(node,i){dojo.attr(node,"month",i);if(i in _566){this._setText(node,_566[i]);}dojo.place(node.cloneNode(true),this.monthLabelSpacer);},this);this.value=null;this.set("value",_565);},_onMenuHover:function(e){dojo.stopEvent(e);dojo.toggleClass(e.target,"dijitMenuItemHover");},_adjustDisplay:function(part,_567){this.displayMonth=this.dateFuncObj.add(this.displayMonth,part,_567);this._populateGrid();},_onMonthToggle:function(evt){dojo.stopEvent(evt);if(evt.type=="mousedown"){var _568=dojo.position(this.monthLabelNode);var dim={width:_568.w+"px",top:-this.displayMonth.getMonth()*_568.h+"px"};if((dojo.isIE&&dojo.isQuirks)||dojo.isIE<7){dim.left=-_568.w/2+"px";}dojo.style(this.monthDropDown,dim);this._popupHandler=this.connect(document,"onmouseup","_onMonthToggle");}else{this.disconnect(this._popupHandler);delete this._popupHandler;}dojo.toggleClass(this.monthDropDown,"dijitHidden");dojo.toggleClass(this.monthLabelNode,"dijitVisible");},_onMonthSelect:function(evt){this._onMonthToggle(evt);this.displayMonth.setMonth(dojo.attr(evt.target,"month"));this._populateGrid();},_onDayClick:function(evt){dojo.stopEvent(evt);for(var node=evt.target;node&&!node.dijitDateValue;node=node.parentNode){}if(node&&!dojo.hasClass(node,"dijitCalendarDisabledDate")){this.set("value",node.dijitDateValue);this.onValueSelected(this.get("value"));}},_onDayMouseOver:function(evt){var node=dojo.hasClass(evt.target,"dijitCalendarDateLabel")?evt.target.parentNode:evt.target;if(node&&(node.dijitDateValue||node==this.previousYearLabelNode||node==this.nextYearLabelNode)){dojo.addClass(node,"dijitCalendarHoveredDate");this._currentNode=node;}},_onDayMouseOut:function(evt){if(!this._currentNode){return;}if(evt.relatedTarget&&evt.relatedTarget.parentNode==this._currentNode){return;}dojo.removeClass(this._currentNode,"dijitCalendarHoveredDate");if(dojo.hasClass(this._currentNode,"dijitCalendarActiveDate")){dojo.removeClass(this._currentNode,"dijitCalendarActiveDate");}this._currentNode=null;},_onDayMouseDown:function(evt){var node=evt.target.parentNode;if(node&&node.dijitDateValue){dojo.addClass(node,"dijitCalendarActiveDate");this._currentNode=node;}},_onDayMouseUp:function(evt){var node=evt.target.parentNode;if(node&&node.dijitDateValue){dojo.removeClass(node,"dijitCalendarActiveDate");}},_onKeyPress:function(evt){var dk=dojo.keys,_569=-1,_56a,_56b=this.value;switch(evt.keyCode){case dk.RIGHT_ARROW:_569=1;case dk.LEFT_ARROW:_56a="day";if(!this.isLeftToRight()){_569*=-1;}break;case dk.DOWN_ARROW:_569=1;case dk.UP_ARROW:_56a="week";break;case dk.PAGE_DOWN:_569=1;case dk.PAGE_UP:_56a=evt.ctrlKey?"year":"month";break;case dk.END:_56b=this.dateFuncObj.add(_56b,"month",1);_56a="day";case dk.HOME:_56b=new Date(_56b).setDate(1);break;case dk.ENTER:this.onValueSelected(this.get("value"));break;case dk.ESCAPE:default:return;}dojo.stopEvent(evt);if(_56a){_56b=this.dateFuncObj.add(_56b,_56a,_569);}this.set("value",_56b);},onValueSelected:function(date){},onChange:function(date){},_isSelectedDate:function(_56c,_56d){return !this.dateFuncObj.compare(_56c,this.value,"date");},isDisabledDate:function(_56e,_56f){},getClassForDate:function(_570,_571){}});}if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){dojo._hasResource["dijit.form._DateTimeTextBox"]=true;dojo.provide("dijit.form._DateTimeTextBox");new Date("X");dojo.declare("dijit.form._DateTimeTextBox",dijit.form.RangeBoundTextBox,{regExpGen:dojo.date.locale.regexp,datePackage:"dojo.date",compare:dojo.date.compare,format:function(_572,_573){if(!_572){return "";}return this.dateLocaleModule.format(_572,_573);},parse:function(_574,_575){return this.dateLocaleModule.parse(_574,_575)||(this._isEmpty(_574)?null:undefined);},serialize:function(val,_576){if(val.toGregorian){val=val.toGregorian();}return dojo.date.stamp.toISOString(val,_576);},value:new Date(""),_blankValue:null,popupClass:"",_selector:"",constructor:function(args){var _577=args.datePackage?args.datePackage+".Date":"Date";this.dateClassObj=dojo.getObject(_577,false);this.value=new this.dateClassObj("");this.datePackage=args.datePackage||this.datePackage;this.dateLocaleModule=dojo.getObject(this.datePackage+".locale",false);this.regExpGen=this.dateLocaleModule.regexp;},_setConstraintsAttr:function(_578){_578.selector=this._selector;_578.fullYear=true;var _579=dojo.date.stamp.fromISOString;if(typeof _578.min=="string"){_578.min=_579(_578.min);}if(typeof _578.max=="string"){_578.max=_579(_578.max);}this.inherited(arguments,[_578]);},_onFocus:function(evt){this._open();this.inherited(arguments);},_setValueAttr:function(_57a,_57b,_57c){if(_57a!==undefined){if(!_57a||_57a.toString()==dijit.form._DateTimeTextBox.prototype.value.toString()){_57a=null;}if(_57a instanceof Date&&!(this.dateClassObj instanceof Date)){_57a=new this.dateClassObj(_57a);}}this.inherited(arguments,[_57a,_57b,_57c]);if(this._picker){if(!_57a){_57a=new this.dateClassObj();}this._picker.set("value",_57a);}},_open:function(){if(this.disabled||this.readOnly||!this.popupClass){return;}var _57d=this;if(!this._picker){var _57e=dojo.getObject(this.popupClass,false);this._picker=new _57e({onValueSelected:function(_57f){if(_57d._tabbingAway){delete _57d._tabbingAway;}else{_57d.focus();}setTimeout(dojo.hitch(_57d,"_close"),1);dijit.form._DateTimeTextBox.superclass._setValueAttr.call(_57d,_57f,true);},id:this.id+"_popup",dir:_57d.dir,lang:_57d.lang,value:this.get("value")||new this.dateClassObj(),constraints:_57d.constraints,datePackage:_57d.datePackage,isDisabledDate:function(date){var _580=dojo.date.compare;var _581=_57d.constraints;return _581&&((_581.min&&_580(_581.min,date,_57d._selector)>0)||(_581.max&&_580(_581.max,date,_57d._selector)<0));}});}if(!this._opened){dijit.popup.open({parent:this,popup:this._picker,orient:{"BL":"TL","TL":"BL"},around:this.domNode,onCancel:dojo.hitch(this,this._close),onClose:function(){_57d._opened=false;}});this._opened=true;}dojo.marginBox(this._picker.domNode,{w:this.domNode.offsetWidth});},_close:function(){if(this._opened){dijit.popup.close(this._picker);this._opened=false;}},_onBlur:function(){this._close();if(this._picker){this._picker.destroy();delete this._picker;}this.inherited(arguments);},_getDisplayedValueAttr:function(){return this.textbox.value;},_setDisplayedValueAttr:function(_582,_583){this._setValueAttr(this.parse(_582,this.constraints),_583,_582);},destroy:function(){if(this._picker){this._picker.destroy();delete this._picker;}this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.focusNode,"onkeypress",this._onKeyPress);this.connect(this.focusNode,"onclick",this._open);},_onKeyPress:function(e){var p=this._picker,dk=dojo.keys;if(p&&this._opened&&p.handleKey){if(p.handleKey(e)===false){return;}}if(this._opened&&e.charOrCode==dk.ESCAPE&&!(e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)){this._close();dojo.stopEvent(e);}else{if(!this._opened&&e.charOrCode==dk.DOWN_ARROW){this._open();dojo.stopEvent(e);}else{if(e.charOrCode===dk.TAB){this._tabbingAway=true;}else{if(this._opened&&(e.keyChar||e.charOrCode===dk.BACKSPACE||e.charOrCode==dk.DELETE)){setTimeout(dojo.hitch(this,function(){if(this._picker&&this._opened){dijit.placeOnScreenAroundElement(p.domNode.parentNode,this.domNode,{"BL":"TL","TL":"BL"},p.orient?dojo.hitch(p,"orient"):null);}}),1);}}}}}});}if(!dojo._hasResource["dijit.form.DateTextBox"]){dojo._hasResource["dijit.form.DateTextBox"]=true;dojo.provide("dijit.form.DateTextBox");dojo.declare("dijit.form.DateTextBox",dijit.form._DateTimeTextBox,{baseClass:"dijitTextBox dijitDateTextBox",popupClass:"dijit.Calendar",_selector:"date",value:new Date("")});}if(!dojo._hasResource["dijit.form._Spinner"]){dojo._hasResource["dijit.form._Spinner"]=true;dojo.provide("dijit.form._Spinner");dojo.declare("dijit.form._Spinner",dijit.form.RangeBoundTextBox,{defaultTimeout:500,minimumTimeout:10,timeoutChangeRate:0.9,smallDelta:1,largeDelta:10,templateString:dojo.cache("dijit.form","templates/Spinner.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitButtonNode dijitSpinnerButtonContainer\"\n\t\t><input class=\"dijitReset dijitInputField dijitSpinnerButtonInner\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t/><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9650;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9660;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" ${!nameAttrSetting}\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitSpinner",cssStateNodes:{"upArrowNode":"dijitUpArrowButton","downArrowNode":"dijitDownArrowButton"},adjust:function(val,_584){return val;},_arrowPressed:function(_585,_586,_587){if(this.disabled||this.readOnly){return;}this._setValueAttr(this.adjust(this.get("value"),_586*_587),false);dijit.selectInputText(this.textbox,this.textbox.value.length);},_arrowReleased:function(node){this._wheelTimer=null;if(this.disabled||this.readOnly){return;}},_typematicCallback:function(_588,node,evt){var inc=this.smallDelta;if(node==this.textbox){var k=dojo.keys;var key=evt.charOrCode;inc=(key==k.PAGE_UP||key==k.PAGE_DOWN)?this.largeDelta:this.smallDelta;node=(key==k.UP_ARROW||key==k.PAGE_UP)?this.upArrowNode:this.downArrowNode;}if(_588==-1){this._arrowReleased(node);}else{this._arrowPressed(node,(node==this.upArrowNode)?1:-1,inc);}},_wheelTimer:null,_mouseWheeled:function(evt){dojo.stopEvent(evt);var _589=evt.detail?(evt.detail*-1):(evt.wheelDelta/120);if(_589!==0){var node=this[(_589>0?"upArrowNode":"downArrowNode")];this._arrowPressed(node,_589,this.smallDelta);if(!this._wheelTimer){clearTimeout(this._wheelTimer);}this._wheelTimer=setTimeout(dojo.hitch(this,"_arrowReleased",node),50);}},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll","_mouseWheeled");this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));}});}if(!dojo._hasResource["dijit.form.NumberSpinner"]){dojo._hasResource["dijit.form.NumberSpinner"]=true;dojo.provide("dijit.form.NumberSpinner");dojo.declare("dijit.form.NumberSpinner",[dijit.form._Spinner,dijit.form.NumberTextBoxMixin],{adjust:function(val,_58a){var tc=this.constraints,v=isNaN(val),_58b=!isNaN(tc.max),_58c=!isNaN(tc.min);if(v&&_58a!=0){val=(_58a>0)?_58c?tc.min:_58b?tc.max:0:_58b?this.constraints.max:_58c?tc.min:0;}var _58d=val+_58a;if(v||isNaN(_58d)){return val;}if(_58b&&(_58d>tc.max)){_58d=tc.max;}if(_58c&&(_58d<tc.min)){_58d=tc.min;}return _58d;},_onKeyPress:function(e){if((e.charOrCode==dojo.keys.HOME||e.charOrCode==dojo.keys.END)&&!(e.ctrlKey||e.altKey||e.metaKey)&&typeof this.get("value")!="undefined"){var _58e=this.constraints[(e.charOrCode==dojo.keys.HOME?"min":"max")];if(typeof _58e=="number"){this._setValueAttr(_58e,false);}dojo.stopEvent(e);}}});}if(!dojo._hasResource["dijit.form.MultiSelect"]){dojo._hasResource["dijit.form.MultiSelect"]=true;dojo.provide("dijit.form.MultiSelect");dojo.declare("dijit.form.MultiSelect",dijit.form._FormValueWidget,{size:7,templateString:"<select multiple='true' ${!nameAttrSetting} dojoAttachPoint='containerNode,focusNode' dojoAttachEvent='onchange: _onChange'></select>",attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{size:"focusNode"}),reset:function(){this._hasBeenBlurred=false;this._setValueAttr(this._resetValue,true);},addSelected:function(_58f){_58f.getSelected().forEach(function(n){this.containerNode.appendChild(n);this.domNode.scrollTop=this.domNode.offsetHeight;var _590=_58f.domNode.scrollTop;_58f.domNode.scrollTop=0;_58f.domNode.scrollTop=_590;},this);},getSelected:function(){return dojo.query("option",this.containerNode).filter(function(n){return n.selected;});},_getValueAttr:function(){return this.getSelected().map(function(n){return n.value;});},multiple:true,_setValueAttr:function(_591){dojo.query("option",this.containerNode).forEach(function(n){n.selected=(dojo.indexOf(_591,n.value)!=-1);});},invertSelection:function(_592){dojo.query("option",this.containerNode).forEach(function(n){n.selected=!n.selected;});this._handleOnChange(this.get("value"),_592==true);},_onChange:function(e){this._handleOnChange(this.get("value"),true);},resize:function(size){if(size){dojo.marginBox(this.domNode,size);}},postCreate:function(){this._onChange();}});}if(!dojo._hasResource["dijit.form.HorizontalSlider"]){dojo._hasResource["dijit.form.HorizontalSlider"]=true;dojo.provide("dijit.form.HorizontalSlider");dojo.declare("dijit.form.HorizontalSlider",[dijit.form._FormValueWidget,dijit._Container],{templateString:dojo.cache("dijit.form","templates/HorizontalSlider.html","<table class=\"dijit dijitReset dijitSlider dijitSliderH\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"topDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderDecrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><div class=\"dijitReset dijitSliderBarContainerH\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableH\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleH\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderIncrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n"),value:0,showButtons:true,minimum:0,maximum:100,discreteValues:Infinity,pageIncrement:2,clickSelect:true,slideDuration:dijit.defaultDuration,widgetsInTemplate:true,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{id:""}),baseClass:"dijitSlider",cssStateNodes:{incrementButton:"dijitSliderIncrementButton",decrementButton:"dijitSliderDecrementButton",focusNode:"dijitSliderThumb"},_mousePixelCoord:"pageX",_pixelCount:"w",_startingPixelCoord:"x",_startingPixelCount:"l",_handleOffsetCoord:"left",_progressPixelSize:"width",_onKeyUp:function(e){if(this.disabled||this.readOnly||e.altKey||e.ctrlKey||e.metaKey){return;}this._setValueAttr(this.value,true);},_onKeyPress:function(e){if(this.disabled||this.readOnly||e.altKey||e.ctrlKey||e.metaKey){return;}switch(e.charOrCode){case dojo.keys.HOME:this._setValueAttr(this.minimum,false);break;case dojo.keys.END:this._setValueAttr(this.maximum,false);break;case ((this._descending||this.isLeftToRight())?dojo.keys.RIGHT_ARROW:dojo.keys.LEFT_ARROW):case (this._descending===false?dojo.keys.DOWN_ARROW:dojo.keys.UP_ARROW):case (this._descending===false?dojo.keys.PAGE_DOWN:dojo.keys.PAGE_UP):this.increment(e);break;case ((this._descending||this.isLeftToRight())?dojo.keys.LEFT_ARROW:dojo.keys.RIGHT_ARROW):case (this._descending===false?dojo.keys.UP_ARROW:dojo.keys.DOWN_ARROW):case (this._descending===false?dojo.keys.PAGE_UP:dojo.keys.PAGE_DOWN):this.decrement(e);break;default:return;}dojo.stopEvent(e);},_onHandleClick:function(e){if(this.disabled||this.readOnly){return;}if(!dojo.isIE){dijit.focus(this.sliderHandle);}dojo.stopEvent(e);},_isReversed:function(){return !this.isLeftToRight();},_onBarClick:function(e){if(this.disabled||this.readOnly||!this.clickSelect){return;}dijit.focus(this.sliderHandle);dojo.stopEvent(e);var _593=dojo.position(this.sliderBarContainer,true);var _594=e[this._mousePixelCoord]-_593[this._startingPixelCoord];this._setPixelValue(this._isReversed()?(_593[this._pixelCount]-_594):_594,_593[this._pixelCount],true);this._movable.onMouseDown(e);},_setPixelValue:function(_595,_596,_597){if(this.disabled||this.readOnly){return;}_595=_595<0?0:_596<_595?_596:_595;var _598=this.discreteValues;if(_598<=1||_598==Infinity){_598=_596;}_598--;var _599=_596/_598;var _59a=Math.round(_595/_599);this._setValueAttr((this.maximum-this.minimum)*_59a/_598+this.minimum,_597);},_setValueAttr:function(_59b,_59c){this.valueNode.value=this.value=_59b;dijit.setWaiState(this.focusNode,"valuenow",_59b);this.inherited(arguments);var _59d=(_59b-this.minimum)/(this.maximum-this.minimum);var _59e=(this._descending===false)?this.remainingBar:this.progressBar;var _59f=(this._descending===false)?this.progressBar:this.remainingBar;if(this._inProgressAnim&&this._inProgressAnim.status!="stopped"){this._inProgressAnim.stop(true);}if(_59c&&this.slideDuration>0&&_59e.style[this._progressPixelSize]){var _5a0=this;var _5a1={};var _5a2=parseFloat(_59e.style[this._progressPixelSize]);var _5a3=this.slideDuration*(_59d-_5a2/100);if(_5a3==0){return;}if(_5a3<0){_5a3=0-_5a3;}_5a1[this._progressPixelSize]={start:_5a2,end:_59d*100,units:"%"};this._inProgressAnim=dojo.animateProperty({node:_59e,duration:_5a3,onAnimate:function(v){_59f.style[_5a0._progressPixelSize]=(100-parseFloat(v[_5a0._progressPixelSize]))+"%";},onEnd:function(){delete _5a0._inProgressAnim;},properties:_5a1});this._inProgressAnim.play();}else{_59e.style[this._progressPixelSize]=(_59d*100)+"%";_59f.style[this._progressPixelSize]=((1-_59d)*100)+"%";}},_bumpValue:function(_5a4,_5a5){if(this.disabled||this.readOnly){return;}var s=dojo.getComputedStyle(this.sliderBarContainer);var c=dojo._getContentBox(this.sliderBarContainer,s);var _5a6=this.discreteValues;if(_5a6<=1||_5a6==Infinity){_5a6=c[this._pixelCount];}_5a6--;var _5a7=(this.value-this.minimum)*_5a6/(this.maximum-this.minimum)+_5a4;if(_5a7<0){_5a7=0;}if(_5a7>_5a6){_5a7=_5a6;}_5a7=_5a7*(this.maximum-this.minimum)/_5a6+this.minimum;this._setValueAttr(_5a7,_5a5);},_onClkBumper:function(val){if(this.disabled||this.readOnly||!this.clickSelect){return;}this._setValueAttr(val,true);},_onClkIncBumper:function(){this._onClkBumper(this._descending===false?this.minimum:this.maximum);},_onClkDecBumper:function(){this._onClkBumper(this._descending===false?this.maximum:this.minimum);},decrement:function(e){this._bumpValue(e.charOrCode==dojo.keys.PAGE_DOWN?-this.pageIncrement:-1);},increment:function(e){this._bumpValue(e.charOrCode==dojo.keys.PAGE_UP?this.pageIncrement:1);},_mouseWheeled:function(evt){dojo.stopEvent(evt);var _5a8=!dojo.isMozilla;var _5a9=evt[(_5a8?"wheelDelta":"detail")]*(_5a8?1:-1);this._bumpValue(_5a9<0?-1:1,true);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_5aa){if(this[_5aa.container]!=this.containerNode){this[_5aa.container].appendChild(_5aa.domNode);}},this);this.inherited(arguments);},_typematicCallback:function(_5ab,_5ac,e){if(_5ab==-1){this._setValueAttr(this.value,true);}else{this[(_5ac==(this._descending?this.incrementButton:this.decrementButton))?"decrement":"increment"](e);}},postCreate:function(){if(this.showButtons){this.incrementButton.style.display="";this.decrementButton.style.display="";this._connects.push(dijit.typematic.addMouseListener(this.decrementButton,this,"_typematicCallback",25,500));this._connects.push(dijit.typematic.addMouseListener(this.incrementButton,this,"_typematicCallback",25,500));}this.connect(this.domNode,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll","_mouseWheeled");var _5ad=dojo.declare(dijit.form._SliderMover,{widget:this});this._movable=new dojo.dnd.Moveable(this.sliderHandle,{mover:_5ad});var _5ae=dojo.query("label[for=\""+this.id+"\"]");if(_5ae.length){_5ae[0].id=(this.id+"_label");dijit.setWaiState(this.focusNode,"labelledby",_5ae[0].id);}dijit.setWaiState(this.focusNode,"valuemin",this.minimum);dijit.setWaiState(this.focusNode,"valuemax",this.maximum);this.inherited(arguments);this._layoutHackIE7();},destroy:function(){this._movable.destroy();if(this._inProgressAnim&&this._inProgressAnim.status!="stopped"){this._inProgressAnim.stop(true);}this._supportingWidgets=dijit.findWidgets(this.domNode);this.inherited(arguments);}});dojo.declare("dijit.form._SliderMover",dojo.dnd.Mover,{onMouseMove:function(e){var _5af=this.widget;var _5b0=_5af._abspos;if(!_5b0){_5b0=_5af._abspos=dojo.position(_5af.sliderBarContainer,true);_5af._setPixelValue_=dojo.hitch(_5af,"_setPixelValue");_5af._isReversed_=_5af._isReversed();}var _5b1=e[_5af._mousePixelCoord]-_5b0[_5af._startingPixelCoord];_5af._setPixelValue_(_5af._isReversed_?(_5b0[_5af._pixelCount]-_5b1):_5b1,_5b0[_5af._pixelCount],false);},destroy:function(e){dojo.dnd.Mover.prototype.destroy.apply(this,arguments);var _5b2=this.widget;_5b2._abspos=null;_5b2._setValueAttr(_5b2.value,true);}});}if(!dojo._hasResource["dijit.form.VerticalSlider"]){dojo._hasResource["dijit.form.VerticalSlider"]=true;dojo.provide("dijit.form.VerticalSlider");dojo.declare("dijit.form.VerticalSlider",dijit.form.HorizontalSlider,{templateString:dojo.cache("dijit.form","templates/VerticalSlider.html","<table class=\"dijit dijitReset dijitSlider dijitSliderV\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderIncrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><center class=\"dijitReset dijitSliderBarContainerV\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"><!--#5629--></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableV\" style=\"vertical-align:top;\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleV\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderDecrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></table>\n"),_mousePixelCoord:"pageY",_pixelCount:"h",_startingPixelCoord:"y",_startingPixelCount:"t",_handleOffsetCoord:"top",_progressPixelSize:"height",_descending:true,_isReversed:function(){return this._descending;}});}if(!dojo._hasResource["dijit.form.HorizontalRule"]){dojo._hasResource["dijit.form.HorizontalRule"]=true;dojo.provide("dijit.form.HorizontalRule");dojo.declare("dijit.form.HorizontalRule",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerH\"></div>",count:3,container:"containerNode",ruleStyle:"",_positionPrefix:"<div class=\"dijitRuleMark dijitRuleMarkH\" style=\"left:",_positionSuffix:"%;",_suffix:"\"></div>",_genHTML:function(pos,ndx){return this._positionPrefix+pos+this._positionSuffix+this.ruleStyle+this._suffix;},_isHorizontal:true,postCreate:function(){var _5b3;if(this.count==1){_5b3=this._genHTML(50,0);}else{var i;var _5b4=100/(this.count-1);if(!this._isHorizontal||this.isLeftToRight()){_5b3=this._genHTML(0,0);for(i=1;i<this.count-1;i++){_5b3+=this._genHTML(_5b4*i,i);}_5b3+=this._genHTML(100,this.count-1);}else{_5b3=this._genHTML(100,0);for(i=1;i<this.count-1;i++){_5b3+=this._genHTML(100-_5b4*i,i);}_5b3+=this._genHTML(0,this.count-1);}}this.domNode.innerHTML=_5b3;}});}if(!dojo._hasResource["dijit.form.VerticalRule"]){dojo._hasResource["dijit.form.VerticalRule"]=true;dojo.provide("dijit.form.VerticalRule");dojo.declare("dijit.form.VerticalRule",dijit.form.HorizontalRule,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerV\"></div>",_positionPrefix:"<div class=\"dijitRuleMark dijitRuleMarkV\" style=\"top:",_isHorizontal:false});}if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){dojo._hasResource["dijit.form.HorizontalRuleLabels"]=true;dojo.provide("dijit.form.HorizontalRuleLabels");dojo.declare("dijit.form.HorizontalRuleLabels",dijit.form.HorizontalRule,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH\"></div>",labelStyle:"",labels:[],numericMargin:0,minimum:0,maximum:1,constraints:{pattern:"#%"},_positionPrefix:"<div class=\"dijitRuleLabelContainer dijitRuleLabelContainerH\" style=\"left:",_labelPrefix:"\"><div class=\"dijitRuleLabel dijitRuleLabelH\">",_suffix:"</div></div>",_calcPosition:function(pos){return pos;},_genHTML:function(pos,ndx){return this._positionPrefix+this._calcPosition(pos)+this._positionSuffix+this.labelStyle+this._labelPrefix+this.labels[ndx]+this._suffix;},getLabels:function(){var _5b5=this.labels;if(!_5b5.length){_5b5=dojo.query("> li",this.srcNodeRef).map(function(node){return String(node.innerHTML);});}this.srcNodeRef.innerHTML="";if(!_5b5.length&&this.count>1){var _5b6=this.minimum;var inc=(this.maximum-_5b6)/(this.count-1);for(var i=0;i<this.count;i++){_5b5.push((i<this.numericMargin||i>=(this.count-this.numericMargin))?"":dojo.number.format(_5b6,this.constraints));_5b6+=inc;}}return _5b5;},postMixInProperties:function(){this.inherited(arguments);this.labels=this.getLabels();this.count=this.labels.length;}});}if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){dojo._hasResource["dijit.form.VerticalRuleLabels"]=true;dojo.provide("dijit.form.VerticalRuleLabels");dojo.declare("dijit.form.VerticalRuleLabels",dijit.form.HorizontalRuleLabels,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerV dijitRuleLabelsContainer dijitRuleLabelsContainerV\"></div>",_positionPrefix:"<div class=\"dijitRuleLabelContainer dijitRuleLabelContainerV\" style=\"top:",_labelPrefix:"\"><span class=\"dijitRuleLabel dijitRuleLabelV\">",_calcPosition:function(pos){return 100-pos;},_isHorizontal:false});}if(!dojo._hasResource["dijit.form.SimpleTextarea"]){dojo._hasResource["dijit.form.SimpleTextarea"]=true;dojo.provide("dijit.form.SimpleTextarea");dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextBox dijitTextArea",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{rows:"textbox",cols:"textbox"}),rows:"3",cols:"20",templateString:"<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",postMixInProperties:function(){if(!this.value&&this.srcNodeRef){this.value=this.srcNodeRef.value;}this.inherited(arguments);},filter:function(_5b7){if(_5b7){_5b7=_5b7.replace(/\r/g,"");}return this.inherited(arguments);},postCreate:function(){this.inherited(arguments);if(dojo.isIE&&this.cols){dojo.addClass(this.textbox,"dijitTextAreaCols");}},_previousValue:"",_onInput:function(e){if(this.maxLength){var _5b8=parseInt(this.maxLength);var _5b9=this.textbox.value.replace(/\r/g,"");var _5ba=_5b9.length-_5b8;if(_5ba>0){if(e){dojo.stopEvent(e);}var _5bb=this.textbox;if(_5bb.selectionStart){var pos=_5bb.selectionStart;var cr=0;if(dojo.isOpera){cr=(this.textbox.value.substring(0,pos).match(/\r/g)||[]).length;}this.textbox.value=_5b9.substring(0,pos-_5ba-cr)+_5b9.substring(pos-cr);_5bb.setSelectionRange(pos-_5ba,pos-_5ba);}else{if(dojo.doc.selection){_5bb.focus();var _5bc=dojo.doc.selection.createRange();_5bc.moveStart("character",-_5ba);_5bc.text="";_5bc.select();}}}this._previousValue=this.textbox.value;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.Textarea"]){dojo._hasResource["dijit.form.Textarea"]=true;dojo.provide("dijit.form.Textarea");dojo.declare("dijit.form.Textarea",dijit.form.SimpleTextarea,{cols:"",_previousNewlines:0,_strictMode:(dojo.doc.compatMode!="BackCompat"),_getHeight:function(_5bd){var newH=_5bd.scrollHeight;if(dojo.isIE){newH+=_5bd.offsetHeight-_5bd.clientHeight-((dojo.isIE<8&&this._strictMode)?dojo._getPadBorderExtents(_5bd).h:0);}else{if(dojo.isMoz){newH+=_5bd.offsetHeight-_5bd.clientHeight;}else{if(dojo.isWebKit&&!(dojo.isSafari<4)){newH+=dojo._getBorderExtents(_5bd).h;}else{newH+=dojo._getPadBorderExtents(_5bd).h;}}}return newH;},_estimateHeight:function(_5be){_5be.style.maxHeight="";_5be.style.height="auto";_5be.rows=(_5be.value.match(/\n/g)||[]).length+1;},_needsHelpShrinking:dojo.isMoz||dojo.isWebKit,_onInput:function(){this.inherited(arguments);if(this._busyResizing){return;}this._busyResizing=true;var _5bf=this.textbox;if(_5bf.scrollHeight&&_5bf.offsetHeight&&_5bf.clientHeight){var newH=this._getHeight(_5bf)+"px";if(_5bf.style.height!=newH){_5bf.style.maxHeight=_5bf.style.height=newH;}if(this._needsHelpShrinking){if(this._setTimeoutHandle){clearTimeout(this._setTimeoutHandle);}this._setTimeoutHandle=setTimeout(dojo.hitch(this,"_shrink"),0);}}else{this._estimateHeight(_5bf);}this._busyResizing=false;},_busyResizing:false,_shrink:function(){this._setTimeoutHandle=null;if(this._needsHelpShrinking&&!this._busyResizing){this._busyResizing=true;var _5c0=this.textbox;var _5c1=false;if(_5c0.value==""){_5c0.value=" ";_5c1=true;}var _5c2=_5c0.scrollHeight;if(!_5c2){this._estimateHeight(_5c0);}else{var _5c3=_5c0.style.paddingBottom;var _5c4=dojo._getPadExtents(_5c0);_5c4=_5c4.h-_5c4.t;_5c0.style.paddingBottom=_5c4+1+"px";var newH=this._getHeight(_5c0)-1+"px";if(_5c0.style.maxHeight!=newH){_5c0.style.paddingBottom=_5c4+_5c2+"px";_5c0.scrollTop=0;_5c0.style.maxHeight=this._getHeight(_5c0)-_5c2+"px";}_5c0.style.paddingBottom=_5c3;}if(_5c1){_5c0.value="";}this._busyResizing=false;}},resize:function(){this._onInput();},_setValueAttr:function(){this.inherited(arguments);this.resize();},postCreate:function(){this.inherited(arguments);dojo.style(this.textbox,{overflowY:"hidden",overflowX:"auto",boxSizing:"border-box",MsBoxSizing:"border-box",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box"});this.connect(this.textbox,"onscroll",this._onInput);this.connect(this.textbox,"onresize",this._onInput);this.connect(this.textbox,"onfocus",this._onInput);this._setTimeoutHandle=setTimeout(dojo.hitch(this,"resize"),0);},uninitialize:function(){if(this._setTimeoutHandle){clearTimeout(this._setTimeoutHandle);}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.StackController"]){dojo._hasResource["dijit.layout.StackController"]=true;dojo.provide("dijit.layout.StackController");dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",containerId:"",buttonWidget:"dijit.layout._StackButton",postCreate:function(){dijit.setWaiRole(this.domNode,"tablist");this.pane2button={};this.pane2handles={};this.subscribe(this.containerId+"-startup","onStartup");this.subscribe(this.containerId+"-addChild","onAddChild");this.subscribe(this.containerId+"-removeChild","onRemoveChild");this.subscribe(this.containerId+"-selectChild","onSelectChild");this.subscribe(this.containerId+"-containerKeyPress","onContainerKeyPress");},onStartup:function(info){dojo.forEach(info.children,this.onAddChild,this);if(info.selected){this.onSelectChild(info.selected);}},destroy:function(){for(var pane in this.pane2button){this.onRemoveChild(dijit.byId(pane));}this.inherited(arguments);},onAddChild:function(page,_5c5){var cls=dojo.getObject(this.buttonWidget);var _5c6=new cls({id:this.id+"_"+page.id,label:page.title,dir:page.dir,lang:page.lang,showLabel:page.showTitle,iconClass:page.iconClass,closeButton:page.closable,title:page.tooltip});dijit.setWaiState(_5c6.focusNode,"selected","false");this.pane2handles[page.id]=[this.connect(page,"set",function(name,_5c7){var _5c8={title:"label",showTitle:"showLabel",iconClass:"iconClass",closable:"closeButton",tooltip:"title"}[name];if(_5c8){_5c6.set(_5c8,_5c7);}}),this.connect(_5c6,"onClick",dojo.hitch(this,"onButtonClick",page)),this.connect(_5c6,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page))];this.addChild(_5c6,_5c5);this.pane2button[page.id]=_5c6;page.controlButton=_5c6;if(!this._currentChild){_5c6.focusNode.setAttribute("tabIndex","0");dijit.setWaiState(_5c6.focusNode,"selected","true");this._currentChild=page;}if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){this._rectifyRtlTabList();}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}dojo.forEach(this.pane2handles[page.id],this.disconnect,this);delete this.pane2handles[page.id];var _5c9=this.pane2button[page.id];if(_5c9){this.removeChild(_5c9);delete this.pane2button[page.id];_5c9.destroy();}delete page.controlButton;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _5ca=this.pane2button[this._currentChild.id];_5ca.set("checked",false);dijit.setWaiState(_5ca.focusNode,"selected","false");_5ca.focusNode.setAttribute("tabIndex","-1");}var _5cb=this.pane2button[page.id];_5cb.set("checked",true);dijit.setWaiState(_5cb.focusNode,"selected","true");this._currentChild=page;_5cb.focusNode.setAttribute("tabIndex","0");var _5cc=dijit.byId(this.containerId);dijit.setWaiState(_5cc.containerNode,"labelledby",_5cb.id);},onButtonClick:function(page){var _5cd=dijit.byId(this.containerId);_5cd.selectChild(page);},onCloseButtonClick:function(page){var _5ce=dijit.byId(this.containerId);_5ce.closeChild(page);if(this._currentChild){var b=this.pane2button[this._currentChild.id];if(b){dijit.focus(b.focusNode||b.domNode);}}},adjacent:function(_5cf){if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){_5cf=!_5cf;}var _5d0=this.getChildren();var _5d1=dojo.indexOf(_5d0,this.pane2button[this._currentChild.id]);var _5d2=_5cf?1:_5d0.length-1;return _5d0[(_5d1+_5d2)%_5d0.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _5d3=null;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.charOrCode){case k.LEFT_ARROW:case k.UP_ARROW:if(!e._djpage){_5d3=false;}break;case k.PAGE_UP:if(e.ctrlKey){_5d3=false;}break;case k.RIGHT_ARROW:case k.DOWN_ARROW:if(!e._djpage){_5d3=true;}break;case k.PAGE_DOWN:if(e.ctrlKey){_5d3=true;}break;case k.DELETE:if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);break;default:if(e.ctrlKey){if(e.charOrCode===k.TAB){this.adjacent(!e.shiftKey).onClick();dojo.stopEvent(e);}else{if(e.charOrCode=="w"){if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);}}}}if(_5d3!==null){this.adjacent(_5d3).onClick();dojo.stopEvent(e);}}},onContainerKeyPress:function(info){info.e._djpage=info.page;this.onkeypress(info.e);}});dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){dijit.setWaiRole((this.focusNode||this.domNode),"tab");this.inherited(arguments);},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});}if(!dojo._hasResource["dijit.layout.StackContainer"]){dojo._hasResource["dijit.layout.StackContainer"]=true;dojo.provide("dijit.layout.StackContainer");dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,persist:false,baseClass:"dijitStackContainer",postCreate:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitLayoutContainer");dijit.setWaiRole(this.containerNode,"tabpanel");this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _5d4=this.getChildren();dojo.forEach(_5d4,this._setupChild,this);if(this.persist){this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));}else{dojo.some(_5d4,function(_5d5){if(_5d5.selected){this.selectedChildWidget=_5d5;}return _5d5.selected;},this);}var _5d6=this.selectedChildWidget;if(!_5d6&&_5d4[0]){_5d6=this.selectedChildWidget=_5d4[0];_5d6.selected=true;}dojo.publish(this.id+"-startup",[{children:_5d4,selected:_5d6}]);this.inherited(arguments);},resize:function(){var _5d7=this.selectedChildWidget;if(_5d7&&!this._hasBeenShown){this._hasBeenShown=true;this._showChild(_5d7);}this.inherited(arguments);},_setupChild:function(_5d8){this.inherited(arguments);dojo.removeClass(_5d8.domNode,"dijitVisible");dojo.addClass(_5d8.domNode,"dijitHidden");_5d8.domNode.title="";},addChild:function(_5d9,_5da){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-addChild",[_5d9,_5da]);this.layout();if(!this.selectedChildWidget){this.selectChild(_5d9);}}},removeChild:function(page){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-removeChild",[page]);}if(this._beingDestroyed){return;}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _5db=this.getChildren();if(_5db.length){this.selectChild(_5db[0]);}}}if(this._started){this.layout();}},selectChild:function(page,_5dc){page=dijit.byId(page);if(this.selectedChildWidget!=page){this._transition(page,this.selectedChildWidget,_5dc);this.selectedChildWidget=page;dojo.publish(this.id+"-selectChild",[page]);if(this.persist){dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);}}},_transition:function(_5dd,_5de){if(_5de){this._hideChild(_5de);}this._showChild(_5dd);if(_5dd.resize){if(this.doLayout){_5dd.resize(this._containerContentBox||this._contentBox);}else{_5dd.resize();}}},_adjacent:function(_5df){var _5e0=this.getChildren();var _5e1=dojo.indexOf(_5e0,this.selectedChildWidget);_5e1+=_5df?1:_5e0.length-1;return _5e0[_5e1%_5e0.length];},forward:function(){this.selectChild(this._adjacent(true),true);},back:function(){this.selectChild(this._adjacent(false),true);},_onKeyPress:function(e){dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);},layout:function(){if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._containerContentBox||this._contentBox);}},_showChild:function(page){var _5e2=this.getChildren();page.isFirstChild=(page==_5e2[0]);page.isLastChild=(page==_5e2[_5e2.length-1]);page.selected=true;dojo.removeClass(page.domNode,"dijitHidden");dojo.addClass(page.domNode,"dijitVisible");page._onShow();},_hideChild:function(page){page.selected=false;dojo.removeClass(page.domNode,"dijitVisible");dojo.addClass(page.domNode,"dijitHidden");page.onHide();},closeChild:function(page){var _5e3=page.onClose(this,page);if(_5e3){this.removeChild(page);page.destroyRecursive();}},destroyDescendants:function(_5e4){dojo.forEach(this.getChildren(),function(_5e5){this.removeChild(_5e5);_5e5.destroyRecursive(_5e4);},this);}});dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});}if(!dojo._hasResource["dijit.layout.AccordionPane"]){dojo._hasResource["dijit.layout.AccordionPane"]=true;dojo.provide("dijit.layout.AccordionPane");dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");},onSelected:function(){}});}if(!dojo._hasResource["dijit.layout.AccordionContainer"]){dojo._hasResource["dijit.layout.AccordionContainer"]=true;dojo.provide("dijit.layout.AccordionContainer");dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",_verticalSpace:0,baseClass:"dijitAccordionContainer",postCreate:function(){this.domNode.style.overflow="hidden";this.inherited(arguments);dijit.setWaiRole(this.domNode,"tablist");},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.selectedChildWidget){var _5e6=this.selectedChildWidget.containerNode.style;_5e6.display="";_5e6.overflow="auto";this.selectedChildWidget._wrapperWidget.set("selected",true);}},_getTargetHeight:function(node){var cs=dojo.getComputedStyle(node);return Math.max(this._verticalSpace-dojo._getPadBorderExtents(node,cs).h-dojo._getMarginExtents(node,cs).h,0);},layout:function(){var _5e7=this.selectedChildWidget;if(!_5e7){return;}var _5e8=_5e7._wrapperWidget.domNode,_5e9=dojo._getMarginExtents(_5e8),_5ea=dojo._getPadBorderExtents(_5e8),_5eb=this._contentBox;var _5ec=0;dojo.forEach(this.getChildren(),function(_5ed){if(_5ed!=_5e7){_5ec+=dojo.marginBox(_5ed._wrapperWidget.domNode).h;}});this._verticalSpace=_5eb.h-_5ec-_5e9.h-_5ea.h-_5e7._buttonWidget.getTitleHeight();this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_5e9.w-_5ea.w};if(_5e7){_5e7.resize(this._containerContentBox);}},_setupChild:function(_5ee){_5ee._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_5ee,buttonWidget:this.buttonWidget,id:_5ee.id+"_wrapper",dir:_5ee.dir,lang:_5ee.lang,parent:this});this.inherited(arguments);},addChild:function(_5ef,_5f0){if(this._started){dojo.place(_5ef.domNode,this.containerNode,_5f0);if(!_5ef._started){_5ef.startup();}this._setupChild(_5ef);dojo.publish(this.id+"-addChild",[_5ef,_5f0]);this.layout();if(!this.selectedChildWidget){this.selectChild(_5ef);}}else{this.inherited(arguments);}},removeChild:function(_5f1){_5f1._wrapperWidget.destroy();delete _5f1._wrapperWidget;dojo.removeClass(_5f1.domNode,"dijitHidden");this.inherited(arguments);},getChildren:function(){return dojo.map(this.inherited(arguments),function(_5f2){return _5f2.declaredClass=="dijit.layout._AccordionInnerContainer"?_5f2.contentWidget:_5f2;},this);},destroy:function(){dojo.forEach(this.getChildren(),function(_5f3){_5f3._wrapperWidget.destroy();});this.inherited(arguments);},_transition:function(_5f4,_5f5,_5f6){if(this._inTransition){return;}var _5f7=[];var _5f8=this._verticalSpace;if(_5f4){_5f4._wrapperWidget.set("selected",true);this._showChild(_5f4);if(this.doLayout&&_5f4.resize){_5f4.resize(this._containerContentBox);}var _5f9=_5f4.domNode;dojo.addClass(_5f9,"dijitVisible");dojo.removeClass(_5f9,"dijitHidden");if(_5f6){var _5fa=_5f9.style.overflow;_5f9.style.overflow="hidden";_5f7.push(dojo.animateProperty({node:_5f9,duration:this.duration,properties:{height:{start:1,end:this._getTargetHeight(_5f9)}},onEnd:function(){_5f9.style.overflow=_5fa;if(dojo.isIE){setTimeout(function(){dojo.removeClass(_5f9.parentNode,"dijitAccordionInnerContainerFocused");setTimeout(function(){dojo.addClass(_5f9.parentNode,"dijitAccordionInnerContainerFocused");},0);},0);}}}));}}if(_5f5){_5f5._wrapperWidget.set("selected",false);var _5fb=_5f5.domNode;if(_5f6){var _5fc=_5fb.style.overflow;_5fb.style.overflow="hidden";_5f7.push(dojo.animateProperty({node:_5fb,duration:this.duration,properties:{height:{start:this._getTargetHeight(_5fb),end:1}},onEnd:function(){dojo.addClass(_5fb,"dijitHidden");dojo.removeClass(_5fb,"dijitVisible");_5fb.style.overflow=_5fc;if(_5f5.onHide){_5f5.onHide();}}}));}else{dojo.addClass(_5fb,"dijitHidden");dojo.removeClass(_5fb,"dijitVisible");if(_5f5.onHide){_5f5.onHide();}}}if(_5f6){this._inTransition=true;var _5fd=dojo.fx.combine(_5f7);_5fd.onEnd=dojo.hitch(this,function(){delete this._inTransition;});_5fd.play();}},_onKeyPress:function(e,_5fe){if(this._inTransition||this.disabled||e.altKey||!(_5fe||e.ctrlKey)){if(this._inTransition){dojo.stopEvent(e);}return;}var k=dojo.keys,c=e.charOrCode;if((_5fe&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){this._adjacent(false)._buttonWidget._onTitleClick();dojo.stopEvent(e);}else{if((_5fe&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){this._adjacent(true)._buttonWidget._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");var _5ff=this.contentWidget,cls=dojo.getObject(this.buttonWidget);this.button=_5ff._buttonWidget=(new cls({contentWidget:_5ff,label:_5ff.title,title:_5ff.tooltip,dir:_5ff.dir,lang:_5ff.lang,iconClass:_5ff.iconClass,id:_5ff.id+"_button",parent:this.parent})).placeAt(this.domNode);dojo.place(this.contentWidget.domNode,this.domNode);},postCreate:function(){this.inherited(arguments);this.connect(this.contentWidget,"set",function(name,_600){var _601={title:"label",tooltip:"title",iconClass:"iconClass"}[name];if(_601){this.button.set(_601,_600);}},this);},_setSelectedAttr:function(_602){this.selected=_602;this.button.set("selected",_602);if(_602){var cw=this.contentWidget;if(cw.onSelected){cw.onSelected();}}},startup:function(){this.contentWidget.startup();},destroy:function(){this.button.destroyRecursive();delete this.contentWidget._buttonWidget;delete this.contentWidget._wrapperWidget;this.inherited(arguments);},destroyDescendants:function(){this.contentWidget.destroyRecursive();}});dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){return this.parent;},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _603=dojo.attr(this.domNode,"id").replace(" ","_");dojo.attr(this.titleTextNode,"id",_603+"_title");dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));},getTitleHeight:function(){return dojo.marginBox(this.domNode).h;},_onTitleClick:function(){var _604=this.getParent();if(!_604._inTransition){_604.selectChild(this.contentWidget,true);dijit.focus(this.focusNode);}},_onTitleKeyPress:function(evt){return this.getParent()._onKeyPress(evt,this.contentWidget);},_setSelectedAttr:function(_605){this.selected=_605;dijit.setWaiState(this.focusNode,"expanded",_605);dijit.setWaiState(this.focusNode,"selected",_605);this.focusNode.setAttribute("tabIndex",_605?"0":"-1");}});}if(!dojo._hasResource["dijit.layout.BorderContainer"]){dojo._hasResource["dijit.layout.BorderContainer"]=true;dojo.provide("dijit.layout.BorderContainer");dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",gutters:true,liveSplitters:true,persist:false,baseClass:"dijitBorderContainer",_splitterClass:"dijit.layout._Splitter",postMixInProperties:function(){if(!this.gutters){this.baseClass+="NoGutter";}this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this._splitters={};this._splitterThickness={};},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),this._setupChild,this);this.inherited(arguments);},_setupChild:function(_606){var _607=_606.region;if(_607){this.inherited(arguments);dojo.addClass(_606.domNode,this.baseClass+"Pane");var ltr=this.isLeftToRight();if(_607=="leading"){_607=ltr?"left":"right";}if(_607=="trailing"){_607=ltr?"right":"left";}this["_"+_607]=_606.domNode;this["_"+_607+"Widget"]=_606;if((_606.splitter||this.gutters)&&!this._splitters[_607]){var _608=dojo.getObject(_606.splitter?this._splitterClass:"dijit.layout._Gutter");var _609=new _608({id:_606.id+"_splitter",container:this,child:_606,region:_607,live:this.liveSplitters});_609.isSplitter=true;this._splitters[_607]=_609.domNode;dojo.place(this._splitters[_607],_606.domNode,"after");_609.startup();}_606.region=_607;}},_computeSplitterThickness:function(_60a){this._splitterThickness[_60a]=this._splitterThickness[_60a]||dojo.marginBox(this._splitters[_60a])[(/top|bottom/.test(_60a)?"h":"w")];},layout:function(){for(var _60b in this._splitters){this._computeSplitterThickness(_60b);}this._layoutChildren();},addChild:function(_60c,_60d){this.inherited(arguments);if(this._started){this.layout();}},removeChild:function(_60e){var _60f=_60e.region;var _610=this._splitters[_60f];if(_610){dijit.byNode(_610).destroy();delete this._splitters[_60f];delete this._splitterThickness[_60f];}this.inherited(arguments);delete this["_"+_60f];delete this["_"+_60f+"Widget"];if(this._started){this._layoutChildren();}dojo.removeClass(_60e.domNode,this.baseClass+"Pane");},getChildren:function(){return dojo.filter(this.inherited(arguments),function(_611){return !_611.isSplitter;});},getSplitter:function(_612){var _613=this._splitters[_612];return _613?dijit.byNode(_613):null;},resize:function(_614,_615){if(!this.cs||!this.pe){var node=this.domNode;this.cs=dojo.getComputedStyle(node);this.pe=dojo._getPadExtents(node,this.cs);this.pe.r=dojo._toPixelValue(node,this.cs.paddingRight);this.pe.b=dojo._toPixelValue(node,this.cs.paddingBottom);dojo.style(node,"padding","0px");}this.inherited(arguments);},_layoutChildren:function(_616,_617){if(!this._borderBox||!this._borderBox.h){return;}var _618=(this.design=="sidebar");var _619=0,_61a=0,_61b=0,_61c=0;var _61d={},_61e={},_61f={},_620={},_621=(this._center&&this._center.style)||{};var _622=/left|right/.test(_616);var _623=!_616||(!_622&&!_618);var _624=!_616||(_622&&_618);if(this._top){_61d=(_616=="top"||_624)&&this._top.style;_619=_616=="top"?_617:dojo.marginBox(this._top).h;}if(this._left){_61e=(_616=="left"||_623)&&this._left.style;_61b=_616=="left"?_617:dojo.marginBox(this._left).w;}if(this._right){_61f=(_616=="right"||_623)&&this._right.style;_61c=_616=="right"?_617:dojo.marginBox(this._right).w;}if(this._bottom){_620=(_616=="bottom"||_624)&&this._bottom.style;_61a=_616=="bottom"?_617:dojo.marginBox(this._bottom).h;}var _625=this._splitters;var _626=_625.top,_627=_625.bottom,_628=_625.left,_629=_625.right;var _62a=this._splitterThickness;var _62b=_62a.top||0,_62c=_62a.left||0,_62d=_62a.right||0,_62e=_62a.bottom||0;if(_62c>50||_62d>50){setTimeout(dojo.hitch(this,function(){this._splitterThickness={};for(var _62f in this._splitters){this._computeSplitterThickness(_62f);}this._layoutChildren();}),50);return false;}var pe=this.pe;var _630={left:(_618?_61b+_62c:0)+pe.l+"px",right:(_618?_61c+_62d:0)+pe.r+"px"};if(_626){dojo.mixin(_626.style,_630);_626.style.top=_619+pe.t+"px";}if(_627){dojo.mixin(_627.style,_630);_627.style.bottom=_61a+pe.b+"px";}_630={top:(_618?0:_619+_62b)+pe.t+"px",bottom:(_618?0:_61a+_62e)+pe.b+"px"};if(_628){dojo.mixin(_628.style,_630);_628.style.left=_61b+pe.l+"px";}if(_629){dojo.mixin(_629.style,_630);_629.style.right=_61c+pe.r+"px";}dojo.mixin(_621,{top:pe.t+_619+_62b+"px",left:pe.l+_61b+_62c+"px",right:pe.r+_61c+_62d+"px",bottom:pe.b+_61a+_62e+"px"});var _631={top:_618?pe.t+"px":_621.top,bottom:_618?pe.b+"px":_621.bottom};dojo.mixin(_61e,_631);dojo.mixin(_61f,_631);_61e.left=pe.l+"px";_61f.right=pe.r+"px";_61d.top=pe.t+"px";_620.bottom=pe.b+"px";if(_618){_61d.left=_620.left=_61b+_62c+pe.l+"px";_61d.right=_620.right=_61c+_62d+pe.r+"px";}else{_61d.left=_620.left=pe.l+"px";_61d.right=_620.right=pe.r+"px";}var _632=this._borderBox.h-pe.t-pe.b,_633=_632-(_619+_62b+_61a+_62e),_634=_618?_632:_633;var _635=this._borderBox.w-pe.l-pe.r,_636=_635-(_61b+_62c+_61c+_62d),_637=_618?_636:_635;var dim={top:{w:_637,h:_619},bottom:{w:_637,h:_61a},left:{w:_61b,h:_634},right:{w:_61c,h:_634},center:{h:_633,w:_636}};if(_616){var _638=this["_"+_616+"Widget"],mb={};mb[/top|bottom/.test(_616)?"h":"w"]=_617;_638.resize?_638.resize(mb,dim[_638.region]):dojo.marginBox(_638.domNode,mb);}var _639=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_63a){return _63a.domNode.tagName=="TEXTAREA"||_63a.domNode.tagName=="INPUT";});if(_639){var _63b=function(_63c,_63d,_63e){if(_63c){(_63c.resize?_63c.resize(_63d,_63e):dojo.marginBox(_63c.domNode,_63d));}};if(_628){_628.style.height=_634;}if(_629){_629.style.height=_634;}_63b(this._leftWidget,{h:_634},dim.left);_63b(this._rightWidget,{h:_634},dim.right);if(_626){_626.style.width=_637;}if(_627){_627.style.width=_637;}_63b(this._topWidget,{w:_637},dim.top);_63b(this._bottomWidget,{w:_637},dim.bottom);_63b(this._centerWidget,dim.center);}else{var _63f=!_616||(/top|bottom/.test(_616)&&this.design!="sidebar"),_640=!_616||(/left|right/.test(_616)&&this.design=="sidebar"),_641={center:true,left:_63f,right:_63f,top:_640,bottom:_640};dojo.forEach(this.getChildren(),function(_642){if(_642.resize&&_641[_642.region]){_642.resize(null,dim[_642.region]);}},this);}},destroy:function(){for(var _643 in this._splitters){var _644=this._splitters[_643];dijit.byNode(_644).destroy();dojo.destroy(_644);}delete this._splitters;delete this._splitterThickness;this.inherited(arguments);}});dojo.extend(dijit._Widget,{region:"",splitter:false,minSize:0,maxSize:Infinity});dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse\" tabIndex=\"0\" waiRole=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>",postCreate:function(){this.inherited(arguments);this.horizontal=/top|bottom/.test(this.region);dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V"));this._factor=/top|left/.test(this.region)?1:-1;this._cookieName=this.container.id+"_"+this.region;if(this.container.persist){var _645=dojo.cookie(this._cookieName);if(_645){this.child.domNode.style[this.horizontal?"height":"width"]=_645;}}},_computeMaxSize:function(){var dim=this.horizontal?"h":"w",_646=this.container._splitterThickness[this.region];var flip={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_647=this.container["_"+flip[this.region]];var _648=dojo.contentBox(this.container.domNode)[dim]-(_647?dojo.marginBox(_647)[dim]:0)-20-_646*2;return Math.min(this.child.maxSize,_648);},_startDrag:function(e){if(!this.cover){this.cover=dojo.doc.createElement("div");dojo.addClass(this.cover,"dijitSplitterCover");dojo.place(this.cover,this.child.domNode,"after");}dojo.addClass(this.cover,"dijitSplitterCoverActive");if(this.fake){dojo.destroy(this.fake);}if(!(this._resize=this.live)){(this.fake=this.domNode.cloneNode(true)).removeAttribute("id");dojo.addClass(this.domNode,"dijitSplitterShadow");dojo.place(this.fake,this.domNode,"after");}dojo.addClass(this.domNode,"dijitSplitterActive");dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");if(this.fake){dojo.removeClass(this.fake,"dijitSplitterHover");dojo.removeClass(this.fake,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover");}var _649=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_64a=this.horizontal,axis=_64a?"pageY":"pageX",_64b=e[axis],_64c=this.domNode.style,dim=_64a?"h":"w",_64d=dojo.marginBox(this.child.domNode)[dim],_64e=this.region,_64f=parseInt(this.domNode.style[_64e],10),_650=this._resize,_651=this.child.domNode,_652=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc;this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_653){var _654=e[axis]-_64b,_655=_649*_654+_64d,_656=Math.max(Math.min(_655,max),min);if(_650||_653){_652(_64e,_656);}_64c[_64e]=_649*_654+_64f+(_656-_655)+"px";}),dojo.connect(de,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent),dojo.connect(de,"onmouseup",this,"_stopDrag")]);dojo.stopEvent(e);},_onMouse:function(e){var o=(e.type=="mouseover"||e.type=="mouseenter");dojo.toggleClass(this.domNode,"dijitSplitterHover",o);dojo.toggleClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover",o);},_stopDrag:function(e){try{if(this.cover){dojo.removeClass(this.cover,"dijitSplitterCoverActive");}if(this.fake){dojo.destroy(this.fake);}dojo.removeClass(this.domNode,"dijitSplitterActive");dojo.removeClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");dojo.removeClass(this.domNode,"dijitSplitterShadow");this._drag(e);this._drag(e,true);}finally{this._cleanupHandlers();delete this._drag;}if(this.container.persist){dojo.cookie(this._cookieName,this.child.domNode.style[this.horizontal?"height":"width"],{expires:365});}},_cleanupHandlers:function(){dojo.forEach(this._handlers,dojo.disconnect);delete this._handlers;},_onKeyPress:function(e){this._resize=true;var _657=this.horizontal;var tick=1;var dk=dojo.keys;switch(e.charOrCode){case _657?dk.UP_ARROW:dk.LEFT_ARROW:tick*=-1;case _657?dk.DOWN_ARROW:dk.RIGHT_ARROW:break;default:return;}var _658=dojo.marginBox(this.child.domNode)[_657?"h":"w"]+this._factor*tick;this.container._layoutChildren(this.region,Math.max(Math.min(_658,this._computeMaxSize()),this.child.minSize));dojo.stopEvent(e);},destroy:function(){this._cleanupHandlers();delete this.child;delete this.container;delete this.cover;delete this.fake;this.inherited(arguments);}});dojo.declare("dijit.layout._Gutter",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitGutter\" waiRole=\"presentation\"></div>",postCreate:function(){this.horizontal=/top|bottom/.test(this.region);dojo.addClass(this.domNode,"dijitGutter"+(this.horizontal?"H":"V"));}});}if(!dojo._hasResource["dijit.layout.LayoutContainer"]){dojo._hasResource["dijit.layout.LayoutContainer"]=true;dojo.provide("dijit.layout.LayoutContainer");dojo.declare("dijit.layout.LayoutContainer",dijit.layout._LayoutWidget,{baseClass:"dijitLayoutContainer",constructor:function(){dojo.deprecated("dijit.layout.LayoutContainer is deprecated","use BorderContainer instead",2);},layout:function(){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());},addChild:function(_659,_65a){this.inherited(arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}},removeChild:function(_65b){this.inherited(arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}}});dojo.extend(dijit._Widget,{layoutAlign:"none"});}if(!dojo._hasResource["dijit.layout.LinkPane"]){dojo._hasResource["dijit.layout.LinkPane"]=true;dojo.provide("dijit.layout.LinkPane");dojo.declare("dijit.layout.LinkPane",[dijit.layout.ContentPane,dijit._Templated],{templateString:"<div class=\"dijitLinkPane\" dojoAttachPoint=\"containerNode\"></div>",postMixInProperties:function(){if(this.srcNodeRef){this.title+=this.srcNodeRef.innerHTML;}this.inherited(arguments);},_fillContent:function(_65c){}});}if(!dojo._hasResource["dijit.layout.SplitContainer"]){dojo._hasResource["dijit.layout.SplitContainer"]=true;dojo.provide("dijit.layout.SplitContainer");dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{constructor:function(){dojo.deprecated("dijit.layout.SplitContainer is deprecated","use BorderContainer with splitter instead",2);},activeSizing:false,sizerWidth:7,orientation:"horizontal",persist:true,baseClass:"dijitSplitContainer",postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.isHorizontal=(this.orientation=="horizontal");},postCreate:function(){this.inherited(arguments);this.sizers=[];if(dojo.isMozilla){this.domNode.style.overflow="-moz-scrollbars-none";}if(typeof this.sizerWidth=="object"){try{this.sizerWidth=parseInt(this.sizerWidth.toString());}catch(e){this.sizerWidth=7;}}var _65d=dojo.doc.createElement("div");this.virtualSizer=_65d;_65d.style.position="relative";_65d.style.zIndex=10;_65d.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";this.domNode.appendChild(_65d);dojo.setSelectable(_65d,false);},destroy:function(){delete this.virtualSizer;dojo.forEach(this._ownconnects,dojo.disconnect);this.inherited(arguments);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_65e,i,_65f){this._setupChild(_65e);if(i<_65f.length-1){this._addSizer();}},this);if(this.persist){this._restoreState();}this.inherited(arguments);},_setupChild:function(_660){this.inherited(arguments);_660.domNode.style.position="absolute";dojo.addClass(_660.domNode,"dijitSplitPane");},_onSizerMouseDown:function(e){if(e.target.id){for(var i=0;i<this.sizers.length;i++){if(this.sizers[i].id==e.target.id){break;}}if(i<this.sizers.length){this.beginSizing(e,i);}}},_addSizer:function(_661){_661=_661===undefined?this.sizers.length:_661;var _662=dojo.doc.createElement("div");_662.id=dijit.getUniqueId("dijit_layout_SplitterContainer_Splitter");this.sizers.splice(_661,0,_662);this.domNode.appendChild(_662);_662.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";var _663=dojo.doc.createElement("div");_663.className="thumb";_662.appendChild(_663);this.connect(_662,"onmousedown","_onSizerMouseDown");dojo.setSelectable(_662,false);},removeChild:function(_664){if(this.sizers.length){var i=dojo.indexOf(this.getChildren(),_664);if(i!=-1){if(i==this.sizers.length){i--;}dojo.destroy(this.sizers[i]);this.sizers.splice(i,1);}}this.inherited(arguments);if(this._started){this.layout();}},addChild:function(_665,_666){this.inherited(arguments);if(this._started){var _667=this.getChildren();if(_667.length>1){this._addSizer(_666);}this.layout();}},layout:function(){this.paneWidth=this._contentBox.w;this.paneHeight=this._contentBox.h;var _668=this.getChildren();if(!_668.length){return;}var _669=this.isHorizontal?this.paneWidth:this.paneHeight;if(_668.length>1){_669-=this.sizerWidth*(_668.length-1);}var _66a=0;dojo.forEach(_668,function(_66b){_66a+=_66b.sizeShare;});var _66c=_669/_66a;var _66d=0;dojo.forEach(_668.slice(0,_668.length-1),function(_66e){var size=Math.round(_66c*_66e.sizeShare);_66e.sizeActual=size;_66d+=size;});_668[_668.length-1].sizeActual=_669-_66d;this._checkSizes();var pos=0;var size=_668[0].sizeActual;this._movePanel(_668[0],pos,size);_668[0].position=pos;pos+=size;if(!this.sizers){return;}dojo.some(_668.slice(1),function(_66f,i){if(!this.sizers[i]){return true;}this._moveSlider(this.sizers[i],pos,this.sizerWidth);this.sizers[i].position=pos;pos+=this.sizerWidth;size=_66f.sizeActual;this._movePanel(_66f,pos,size);_66f.position=pos;pos+=size;},this);},_movePanel:function(_670,pos,size){if(this.isHorizontal){_670.domNode.style.left=pos+"px";_670.domNode.style.top=0;var box={w:size,h:this.paneHeight};if(_670.resize){_670.resize(box);}else{dojo.marginBox(_670.domNode,box);}}else{_670.domNode.style.left=0;_670.domNode.style.top=pos+"px";var box={w:this.paneWidth,h:size};if(_670.resize){_670.resize(box);}else{dojo.marginBox(_670.domNode,box);}}},_moveSlider:function(_671,pos,size){if(this.isHorizontal){_671.style.left=pos+"px";_671.style.top=0;dojo.marginBox(_671,{w:size,h:this.paneHeight});}else{_671.style.left=0;_671.style.top=pos+"px";dojo.marginBox(_671,{w:this.paneWidth,h:size});}},_growPane:function(_672,pane){if(_672>0){if(pane.sizeActual>pane.sizeMin){if((pane.sizeActual-pane.sizeMin)>_672){pane.sizeActual=pane.sizeActual-_672;_672=0;}else{_672-=pane.sizeActual-pane.sizeMin;pane.sizeActual=pane.sizeMin;}}}return _672;},_checkSizes:function(){var _673=0;var _674=0;var _675=this.getChildren();dojo.forEach(_675,function(_676){_674+=_676.sizeActual;_673+=_676.sizeMin;});if(_673<=_674){var _677=0;dojo.forEach(_675,function(_678){if(_678.sizeActual<_678.sizeMin){_677+=_678.sizeMin-_678.sizeActual;_678.sizeActual=_678.sizeMin;}});if(_677>0){var list=this.isDraggingLeft?_675.reverse():_675;dojo.forEach(list,function(_679){_677=this._growPane(_677,_679);},this);}}else{dojo.forEach(_675,function(_67a){_67a.sizeActual=Math.round(_674*(_67a.sizeMin/_673));});}},beginSizing:function(e,i){var _67b=this.getChildren();this.paneBefore=_67b[i];this.paneAfter=_67b[i+1];this.isSizing=true;this.sizingSplitter=this.sizers[i];if(!this.cover){this.cover=dojo.create("div",{style:{position:"absolute",zIndex:5,top:0,left:0,width:"100%",height:"100%"}},this.domNode);}else{this.cover.style.zIndex=5;}this.sizingSplitter.style.zIndex=6;this.originPos=dojo.position(_67b[0].domNode,true);if(this.isHorizontal){var _67c=e.layerX||e.offsetX||0;var _67d=e.pageX;this.originPos=this.originPos.x;}else{var _67c=e.layerY||e.offsetY||0;var _67d=e.pageY;this.originPos=this.originPos.y;}this.startPoint=this.lastPoint=_67d;this.screenToClientOffset=_67d-_67c;this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;if(!this.activeSizing){this._showSizingLine();}this._ownconnects=[];this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmousemove",this,"changeSizing"));this._ownconnects.push(dojo.connect(dojo.doc.documentElement,"onmouseup",this,"endSizing"));dojo.stopEvent(e);},changeSizing:function(e){if(!this.isSizing){return;}this.lastPoint=this.isHorizontal?e.pageX:e.pageY;this.movePoint();if(this.activeSizing){this._updateSize();}else{this._moveSizingLine();}dojo.stopEvent(e);},endSizing:function(e){if(!this.isSizing){return;}if(this.cover){this.cover.style.zIndex=-1;}if(!this.activeSizing){this._hideSizingLine();}this._updateSize();this.isSizing=false;if(this.persist){this._saveState(this);}dojo.forEach(this._ownconnects,dojo.disconnect);},movePoint:function(){var p=this.lastPoint-this.screenToClientOffset;var a=p-this.dragOffset;a=this.legaliseSplitPoint(a);p=a+this.dragOffset;this.lastPoint=p+this.screenToClientOffset;},legaliseSplitPoint:function(a){a+=this.sizingSplitter.position;this.isDraggingLeft=!!(a>0);if(!this.activeSizing){var min=this.paneBefore.position+this.paneBefore.sizeMin;if(a<min){a=min;}var max=this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin));if(a>max){a=max;}}a-=this.sizingSplitter.position;this._checkSizes();return a;},_updateSize:function(){var pos=this.lastPoint-this.dragOffset-this.originPos;var _67e=this.paneBefore.position;var _67f=this.paneAfter.position+this.paneAfter.sizeActual;this.paneBefore.sizeActual=pos-_67e;this.paneAfter.position=pos+this.sizerWidth;this.paneAfter.sizeActual=_67f-this.paneAfter.position;dojo.forEach(this.getChildren(),function(_680){_680.sizeShare=_680.sizeActual;});if(this._started){this.layout();}},_showSizingLine:function(){this._moveSizingLine();dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});this.virtualSizer.style.display="block";},_hideSizingLine:function(){this.virtualSizer.style.display="none";},_moveSizingLine:function(){var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;dojo.style(this.virtualSizer,(this.isHorizontal?"left":"top"),pos+"px");},_getCookieName:function(i){return this.id+"_"+i;},_restoreState:function(){dojo.forEach(this.getChildren(),function(_681,i){var _682=this._getCookieName(i);var _683=dojo.cookie(_682);if(_683){var pos=parseInt(_683);if(typeof pos=="number"){_681.sizeShare=pos;}}},this);},_saveState:function(){if(!this.persist){return;}dojo.forEach(this.getChildren(),function(_684,i){dojo.cookie(this._getCookieName(i),_684.sizeShare,{expires:365});},this);}});dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});}if(!dojo._hasResource["dijit.layout._TabContainerBase"]){dojo._hasResource["dijit.layout._TabContainerBase"]=true;dojo.provide("dijit.layout._TabContainerBase");dojo.declare("dijit.layout._TabContainerBase",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",baseClass:"dijitTabContainer",tabStrip:false,nested:false,templateString:dojo.cache("dijit.layout","templates/TabContainer.html","<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" dojoAttachPoint=\"tablistNode\"></div>\n\t<div dojoAttachPoint=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n"),postMixInProperties:function(){this.baseClass+=this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"");this.srcNodeRef&&dojo.style(this.srcNodeRef,"visibility","hidden");this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.tablist=this._makeController(this.tablistNode);if(!this.doLayout){dojo.addClass(this.domNode,"dijitTabContainerNoLayout");}if(this.nested){dojo.addClass(this.domNode,"dijitTabContainerNested");dojo.addClass(this.tablist.containerNode,"dijitTabContainerTabListNested");dojo.addClass(this.tablistSpacer,"dijitTabContainerSpacerNested");dojo.addClass(this.containerNode,"dijitTabPaneWrapperNested");}else{dojo.addClass(this.domNode,"tabStrip-"+(this.tabStrip?"enabled":"disabled"));}},_setupChild:function(tab){dojo.addClass(tab.domNode,"dijitTabPane");this.inherited(arguments);},startup:function(){if(this._started){return;}this.tablist.startup();this.inherited(arguments);},layout:function(){if(!this._contentBox||typeof (this._contentBox.l)=="undefined"){return;}var sc=this.selectedChildWidget;if(this.doLayout){var _685=this.tabPosition.replace(/-h/,"");this.tablist.layoutAlign=_685;var _686=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_685},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_686);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_686[2]);if(sc&&sc.resize){sc.resize(this._containerContentBox);}}else{if(this.tablist.resize){this.tablist.resize({w:dojo.contentBox(this.domNode).w});}if(sc&&sc.resize){sc.resize();}}},destroy:function(){if(this.tablist){this.tablist.destroy();}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.TabController"]){dojo._hasResource["dijit.layout.TabController"]=true;dojo.provide("dijit.layout.TabController");dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",tabPosition:"top",buttonWidget:"dijit.layout._TabButton",_rectifyRtlTabList:function(){if(0>=this.tabPosition.indexOf("-h")){return;}if(!this.pane2button){return;}var _687=0;for(var pane in this.pane2button){var ow=this.pane2button[pane].innerDiv.scrollWidth;_687=Math.max(_687,ow);}for(pane in this.pane2button){this.pane2button[pane].innerDiv.style.width=_687+"px";}}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n    <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n        <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n        \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t        <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t        <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t        <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t        \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t            <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t        ></span>\n\t\t\t</div>\n        </div>\n    </div>\n</div>\n"),scrollOnFocus:false,postMixInProperties:function(){if(!this.iconClass){this.iconClass="dijitTabButtonIcon";}},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.containerNode,false);if(this.iconNode.className=="dijitTabButtonIcon"){dojo.style(this.iconNode,"width","1px");}},startup:function(){this.inherited(arguments);var n=this.domNode;setTimeout(function(){n.className=n.className;},1);},_setCloseButtonAttr:function(disp){this.closeButton=disp;dojo.toggleClass(this.innerDiv,"dijitClosable",disp);this.closeNode.style.display=disp?"":"none";if(disp){var _688=dojo.i18n.getLocalization("dijit","common");if(this.closeNode){dojo.attr(this.closeNode,"title",_688.itemClose);}var _688=dojo.i18n.getLocalization("dijit","common");this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});this._closeMenu.addChild(new dijit.MenuItem({label:_688.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));}else{if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}}},_setLabelAttr:function(_689){this.inherited(arguments);if(this.showLabel==false&&!this.params.title){this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},destroy:function(){if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){dojo._hasResource["dijit.layout.ScrollingTabController"]=true;dojo.provide("dijit.layout.ScrollingTabController");dojo.declare("dijit.layout.ScrollingTabController",dijit.layout.TabController,{templateString:dojo.cache("dijit.layout","templates/ScrollingTabController.html","<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>&#9660;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>&#9664;</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>&#9654;</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"),useMenu:true,useSlider:true,tabStripClass:"",widgetsInTemplate:true,_minScroll:5,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{"class":"containerNode"}),postCreate:function(){this.inherited(arguments);var n=this.domNode;this.scrollNode=this.tablistWrapper;this._initButtons();if(!this.tabStripClass){this.tabStripClass="dijitTabContainer"+this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"")+"None";dojo.addClass(n,"tabStrip-disabled");}dojo.addClass(this.tablistWrapper,this.tabStripClass);},onStartup:function(){this.inherited(arguments);dojo.style(this.domNode,"visibility","visible");this._postStartup=true;},onAddChild:function(page,_68a){this.inherited(arguments);var _68b;if(this.useMenu){var _68c=this.containerId;_68b=new dijit.MenuItem({id:page.id+"_stcMi",label:page.title,dir:page.dir,lang:page.lang,onClick:dojo.hitch(this,function(){var _68d=dijit.byId(_68c);_68d.selectChild(page);})});this._menuChildren[page.id]=_68b;this._menu.addChild(_68b,_68a);}this.pane2handles[page.id].push(this.connect(this.pane2button[page.id],"set",function(name,_68e){if(this._postStartup){if(name=="label"){if(_68b){_68b.set(name,_68e);}if(this._dim){this.resize(this._dim);}}}}));dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");},onRemoveChild:function(page,_68f){var _690=this.pane2button[page.id];if(this._selectedTab===_690.domNode){this._selectedTab=null;}if(this.useMenu&&page&&page.id&&this._menuChildren[page.id]){this._menu.removeChild(this._menuChildren[page.id]);this._menuChildren[page.id].destroy();delete this._menuChildren[page.id];}this.inherited(arguments);},_initButtons:function(){this._menuChildren={};this._btnWidth=0;this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(btn){if((this.useMenu&&btn==this._menuBtn.domNode)||(this.useSlider&&(btn==this._rightBtn.domNode||btn==this._leftBtn.domNode))){this._btnWidth+=dojo.marginBox(btn).w;return true;}else{dojo.style(btn,"display","none");return false;}},this);if(this.useMenu){this._menu=new dijit.Menu({id:this.id+"_menu",dir:this.dir,lang:this.lang,targetNodeIds:[this._menuBtn.domNode],leftClickToOpen:true,refocus:false});this._supportingWidgets.push(this._menu);}},_getTabsWidth:function(){var _691=this.getChildren();if(_691.length){var _692=_691[this.isLeftToRight()?0:_691.length-1].domNode,_693=_691[this.isLeftToRight()?_691.length-1:0].domNode;return _693.offsetLeft+dojo.style(_693,"width")-_692.offsetLeft;}else{return 0;}},_enableBtn:function(_694){var _695=this._getTabsWidth();_694=_694||dojo.style(this.scrollNode,"width");return _695>0&&_694<_695;},resize:function(dim){if(this.domNode.offsetWidth==0){return;}this._dim=dim;this.scrollNode.style.height="auto";this._contentBox=dijit.layout.marginBox2contentBox(this.domNode,{h:0,w:dim.w});this._contentBox.h=this.scrollNode.offsetHeight;dojo.contentBox(this.domNode,this._contentBox);var _696=this._enableBtn(this._contentBox.w);this._buttons.style("display",_696?"":"none");this._leftBtn.layoutAlign="left";this._rightBtn.layoutAlign="right";this._menuBtn.layoutAlign=this.isLeftToRight()?"right":"left";dijit.layout.layoutChildren(this.domNode,this._contentBox,[this._menuBtn,this._leftBtn,this._rightBtn,{domNode:this.scrollNode,layoutAlign:"client"}]);if(this._selectedTab){if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());w.scrollLeft=sl;}this._setButtonClass(this._getScroll());this._postResize=true;},_getScroll:function(){var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit)?this.scrollNode.scrollLeft:dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width")+(dojo.isIE==8?-1:1)*this.scrollNode.scrollLeft;return sl;},_convertToScrollLeft:function(val){if(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit){return val;}else{var _697=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");return (dojo.isIE==8?-1:1)*(val-_697);}},onSelectChild:function(page){var tab=this.pane2button[page.id];if(!tab||!page){return;}var node=tab.domNode;if(this._postResize&&node!=this._selectedTab){this._selectedTab=node;var sl=this._getScroll();if(sl>node.offsetLeft||sl+dojo.style(this.scrollNode,"width")<node.offsetLeft+dojo.style(node,"width")){this.createSmoothScroll().play();}}this.inherited(arguments);},_getScrollBounds:function(){var _698=this.getChildren(),_699=dojo.style(this.scrollNode,"width"),_69a=dojo.style(this.containerNode,"width"),_69b=_69a-_699,_69c=this._getTabsWidth();if(_698.length&&_69c>_699){return {min:this.isLeftToRight()?0:_698[_698.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_698[_698.length-1].domNode.offsetLeft+dojo.style(_698[_698.length-1].domNode,"width"))-_699:_69b};}else{var _69d=this.isLeftToRight()?0:_69b;return {min:_69d,max:_69d};}},_getScrollForSelectedTab:function(){var w=this.scrollNode,n=this._selectedTab,_69e=dojo.style(this.scrollNode,"width"),_69f=this._getScrollBounds();var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_69e/2;pos=Math.min(Math.max(pos,_69f.min),_69f.max);return pos;},createSmoothScroll:function(x){if(arguments.length>0){var _6a0=this._getScrollBounds();x=Math.min(Math.max(x,_6a0.min),_6a0.max);}else{x=this._getScrollForSelectedTab();}if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var self=this,w=this.scrollNode,anim=new dojo._Animation({beforeBegin:function(){if(this.curve){delete this.curve;}var oldS=w.scrollLeft,newS=self._convertToScrollLeft(x);anim.curve=new dojo._Line(oldS,newS);},onAnimate:function(val){w.scrollLeft=val;}});this._anim=anim;this._setButtonClass(x);return anim;},_getBtnNode:function(e){var n=e.target;while(n&&!dojo.hasClass(n,"tabStripButton")){n=n.parentNode;}return n;},doSlideRight:function(e){this.doSlide(1,this._getBtnNode(e));},doSlideLeft:function(e){this.doSlide(-1,this._getBtnNode(e));},doSlide:function(_6a1,node){if(node&&dojo.hasClass(node,"dijitTabDisabled")){return;}var _6a2=dojo.style(this.scrollNode,"width");var d=(_6a2*0.75)*_6a1;var to=this._getScroll()+d;this._setButtonClass(to);this.createSmoothScroll(to).play();},_setButtonClass:function(_6a3){var _6a4=this._getScrollBounds();this._leftBtn.set("disabled",_6a3<=_6a4.min);this._rightBtn.set("disabled",_6a3>=_6a4.max);}});dojo.declare("dijit.layout._ScrollingTabControllerButton",dijit.form.Button,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"-1"});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_6a5){var cls=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_6a6=dojo.getObject(this.controllerWidget);return new _6a6({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":cls,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_6a5);},postMixInProperties:function(){this.inherited(arguments);if(!this.controllerWidget){this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";}}});}if(!dojo._hasResource["dijit.dijit-all"]){dojo._hasResource["dijit.dijit-all"]=true;console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");dojo.provide("dijit.dijit-all");}dojo.i18n._preloadLocalizations("dijit.nls.dijit-all",["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
Index: trunk/web/dojo/dijit/_base.js
===================================================================
--- trunk/web/dojo/dijit/_base.js	(revision 0)
+++ trunk/web/dojo/dijit/_base.js	(revision 9)
@@ -0,0 +1,20 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._base"]){
+dojo._hasResource["dijit._base"]=true;
+dojo.provide("dijit._base");
+dojo.require("dijit._base.focus");
+dojo.require("dijit._base.manager");
+dojo.require("dijit._base.place");
+dojo.require("dijit._base.popup");
+dojo.require("dijit._base.scroll");
+dojo.require("dijit._base.sniff");
+dojo.require("dijit._base.typematic");
+dojo.require("dijit._base.wai");
+dojo.require("dijit._base.window");
+}
Index: trunk/web/dojo/dijit/Calendar.js
===================================================================
--- trunk/web/dojo/dijit/Calendar.js	(revision 0)
+++ trunk/web/dojo/dijit/Calendar.js	(revision 9)
@@ -0,0 +1,265 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Calendar"]){
+dojo._hasResource["dijit.Calendar"]=true;
+dojo.provide("dijit.Calendar");
+dojo.require("dojo.cldr.supplemental");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._CssStateMixin");
+dojo.declare("dijit.Calendar",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Calendar.html","<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\" role=\"grid\" dojoAttachEvent=\"onkeypress: _onKeyPress\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarDecrease\" waiRole=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow\">-</span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div class=\"dijitVisible\">\n\t\t\t\t\t<div class=\"dijitPopup dijitMenu dijitMenuPassive dijitHidden\" dojoAttachPoint=\"monthDropDown\" dojoAttachEvent=\"onmouseup: _onMonthSelect, onmouseover: _onMenuHover, onmouseout: _onMenuHover\">\n\t\t\t\t\t\t<div class=\"dijitCalendarMonthLabelTemplate dijitCalendarMonthLabel\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonthLabel dijitInline dijitVisible\" dojoAttachEvent=\"onmousedown: _onMonthToggle\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarIncrease\" waiRole=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow\">+</span>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\" role=\"columnheader\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\" role=\"row\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\" role=\"gridcell\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\n"),value:new Date(),datePackage:"dojo.date",dayWidth:"narrow",tabIndex:"0",baseClass:"dijitCalendar",cssStateNodes:{"decrementMonth":"dijitCalendarArrow","incrementMonth":"dijitCalendarArrow","previousYearLabelNode":"dijitCalendarPreviousYear","nextYearLabelNode":"dijitCalendarNextYear"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{tabIndex:"domNode"}),setValue:function(_1){
+dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.","","2.0");
+this.set("value",_1);
+},_getValueAttr:function(){
+var _2=new this.dateClassObj(this.value);
+_2.setHours(0,0,0,0);
+if(_2.getDate()<this.value.getDate()){
+_2=this.dateFuncObj.add(_2,"hour",1);
+}
+return _2;
+},_setValueAttr:function(_3){
+if(!this.value||this.dateFuncObj.compare(_3,this.value)){
+_3=new this.dateClassObj(_3);
+_3.setHours(1);
+this.displayMonth=new this.dateClassObj(_3);
+if(!this.isDisabledDate(_3,this.lang)){
+this.value=_3;
+this.onChange(this.get("value"));
+}
+dojo.attr(this.domNode,"aria-label",this.dateLocaleModule.format(_3,{selector:"date",formatLength:"full"}));
+this._populateGrid();
+}
+},_setText:function(_4,_5){
+while(_4.firstChild){
+_4.removeChild(_4.firstChild);
+}
+_4.appendChild(dojo.doc.createTextNode(_5));
+},_populateGrid:function(){
+var _6=this.displayMonth;
+_6.setDate(1);
+var _7=_6.getDay(),_8=this.dateFuncObj.getDaysInMonth(_6),_9=this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(_6,"month",-1)),_a=new this.dateClassObj(),_b=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+if(_b>_7){
+_b-=7;
+}
+dojo.query(".dijitCalendarDateTemplate",this.domNode).forEach(function(_c,i){
+i+=_b;
+var _d=new this.dateClassObj(_6),_e,_f="dijitCalendar",adj=0;
+if(i<_7){
+_e=_9-_7+i+1;
+adj=-1;
+_f+="Previous";
+}else{
+if(i>=(_7+_8)){
+_e=i-_7-_8+1;
+adj=1;
+_f+="Next";
+}else{
+_e=i-_7+1;
+_f+="Current";
+}
+}
+if(adj){
+_d=this.dateFuncObj.add(_d,"month",adj);
+}
+_d.setDate(_e);
+if(!this.dateFuncObj.compare(_d,_a,"date")){
+_f="dijitCalendarCurrentDate "+_f;
+}
+if(this._isSelectedDate(_d,this.lang)){
+_f="dijitCalendarSelectedDate "+_f;
+}
+if(this.isDisabledDate(_d,this.lang)){
+_f="dijitCalendarDisabledDate "+_f;
+}
+var _10=this.getClassForDate(_d,this.lang);
+if(_10){
+_f=_10+" "+_f;
+}
+_c.className=_f+"Month dijitCalendarDateTemplate";
+_c.dijitDateValue=_d.valueOf();
+var _11=dojo.query(".dijitCalendarDateLabel",_c)[0],_12=_d.getDateLocalized?_d.getDateLocalized(this.lang):_d.getDate();
+this._setText(_11,_12);
+},this);
+var _13=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_6);
+this._setText(this.monthLabelNode,_13[_6.getMonth()]);
+dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(_14,i){
+dojo.toggleClass(_14,"dijitHidden",!(i in _13));
+this._setText(_14,_13[i]);
+},this);
+var y=_6.getFullYear()-1;
+var d=new this.dateClassObj();
+dojo.forEach(["previous","current","next"],function(_15){
+d.setFullYear(y++);
+this._setText(this[_15+"YearLabelNode"],this.dateLocaleModule.format(d,{selector:"year",locale:this.lang}));
+},this);
+var _16=this;
+var _17=function(_18,_19,adj){
+_16._connects.push(dijit.typematic.addMouseListener(_16[_18],_16,function(_1a){
+if(_1a>=0){
+_16._adjustDisplay(_19,adj);
+}
+},0.8,500));
+};
+_17("incrementMonth","month",1);
+_17("decrementMonth","month",-1);
+_17("nextYearLabelNode","year",1);
+_17("previousYearLabelNode","year",-1);
+},goToToday:function(){
+this.set("value",new this.dateClassObj());
+},constructor:function(_1b){
+var _1c=(_1b.datePackage&&(_1b.datePackage!="dojo.date"))?_1b.datePackage+".Date":"Date";
+this.dateClassObj=dojo.getObject(_1c,false);
+this.datePackage=_1b.datePackage||this.datePackage;
+this.dateFuncObj=dojo.getObject(this.datePackage,false);
+this.dateLocaleModule=dojo.getObject(this.datePackage+".locale",false);
+},postMixInProperties:function(){
+if(isNaN(this.value)){
+delete this.value;
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+dojo.setSelectable(this.domNode,false);
+var _1d=dojo.hitch(this,function(_1e,n){
+var _1f=dojo.query(_1e,this.domNode)[0];
+for(var i=0;i<n;i++){
+_1f.parentNode.appendChild(_1f.cloneNode(true));
+}
+});
+_1d(".dijitCalendarDayLabelTemplate",6);
+_1d(".dijitCalendarDateTemplate",6);
+_1d(".dijitCalendarWeekTemplate",5);
+var _20=this.dateLocaleModule.getNames("days",this.dayWidth,"standAlone",this.lang);
+var _21=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
+dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_22,i){
+this._setText(_22,_20[(i+_21)%7]);
+},this);
+var _23=new this.dateClassObj(this.value);
+var _24=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_23);
+_1d(".dijitCalendarMonthLabelTemplate",_24.length-1);
+dojo.query(".dijitCalendarMonthLabelTemplate",this.domNode).forEach(function(_25,i){
+dojo.attr(_25,"month",i);
+if(i in _24){
+this._setText(_25,_24[i]);
+}
+dojo.place(_25.cloneNode(true),this.monthLabelSpacer);
+},this);
+this.value=null;
+this.set("value",_23);
+},_onMenuHover:function(e){
+dojo.stopEvent(e);
+dojo.toggleClass(e.target,"dijitMenuItemHover");
+},_adjustDisplay:function(_26,_27){
+this.displayMonth=this.dateFuncObj.add(this.displayMonth,_26,_27);
+this._populateGrid();
+},_onMonthToggle:function(evt){
+dojo.stopEvent(evt);
+if(evt.type=="mousedown"){
+var _28=dojo.position(this.monthLabelNode);
+var dim={width:_28.w+"px",top:-this.displayMonth.getMonth()*_28.h+"px"};
+if((dojo.isIE&&dojo.isQuirks)||dojo.isIE<7){
+dim.left=-_28.w/2+"px";
+}
+dojo.style(this.monthDropDown,dim);
+this._popupHandler=this.connect(document,"onmouseup","_onMonthToggle");
+}else{
+this.disconnect(this._popupHandler);
+delete this._popupHandler;
+}
+dojo.toggleClass(this.monthDropDown,"dijitHidden");
+dojo.toggleClass(this.monthLabelNode,"dijitVisible");
+},_onMonthSelect:function(evt){
+this._onMonthToggle(evt);
+this.displayMonth.setMonth(dojo.attr(evt.target,"month"));
+this._populateGrid();
+},_onDayClick:function(evt){
+dojo.stopEvent(evt);
+for(var _29=evt.target;_29&&!_29.dijitDateValue;_29=_29.parentNode){
+}
+if(_29&&!dojo.hasClass(_29,"dijitCalendarDisabledDate")){
+this.set("value",_29.dijitDateValue);
+this.onValueSelected(this.get("value"));
+}
+},_onDayMouseOver:function(evt){
+var _2a=dojo.hasClass(evt.target,"dijitCalendarDateLabel")?evt.target.parentNode:evt.target;
+if(_2a&&(_2a.dijitDateValue||_2a==this.previousYearLabelNode||_2a==this.nextYearLabelNode)){
+dojo.addClass(_2a,"dijitCalendarHoveredDate");
+this._currentNode=_2a;
+}
+},_onDayMouseOut:function(evt){
+if(!this._currentNode){
+return;
+}
+if(evt.relatedTarget&&evt.relatedTarget.parentNode==this._currentNode){
+return;
+}
+dojo.removeClass(this._currentNode,"dijitCalendarHoveredDate");
+if(dojo.hasClass(this._currentNode,"dijitCalendarActiveDate")){
+dojo.removeClass(this._currentNode,"dijitCalendarActiveDate");
+}
+this._currentNode=null;
+},_onDayMouseDown:function(evt){
+var _2b=evt.target.parentNode;
+if(_2b&&_2b.dijitDateValue){
+dojo.addClass(_2b,"dijitCalendarActiveDate");
+this._currentNode=_2b;
+}
+},_onDayMouseUp:function(evt){
+var _2c=evt.target.parentNode;
+if(_2c&&_2c.dijitDateValue){
+dojo.removeClass(_2c,"dijitCalendarActiveDate");
+}
+},_onKeyPress:function(evt){
+var dk=dojo.keys,_2d=-1,_2e,_2f=this.value;
+switch(evt.keyCode){
+case dk.RIGHT_ARROW:
+_2d=1;
+case dk.LEFT_ARROW:
+_2e="day";
+if(!this.isLeftToRight()){
+_2d*=-1;
+}
+break;
+case dk.DOWN_ARROW:
+_2d=1;
+case dk.UP_ARROW:
+_2e="week";
+break;
+case dk.PAGE_DOWN:
+_2d=1;
+case dk.PAGE_UP:
+_2e=evt.ctrlKey?"year":"month";
+break;
+case dk.END:
+_2f=this.dateFuncObj.add(_2f,"month",1);
+_2e="day";
+case dk.HOME:
+_2f=new Date(_2f).setDate(1);
+break;
+case dk.ENTER:
+this.onValueSelected(this.get("value"));
+break;
+case dk.ESCAPE:
+default:
+return;
+}
+dojo.stopEvent(evt);
+if(_2e){
+_2f=this.dateFuncObj.add(_2f,_2e,_2d);
+}
+this.set("value",_2f);
+},onValueSelected:function(_30){
+},onChange:function(_31){
+},_isSelectedDate:function(_32,_33){
+return !this.dateFuncObj.compare(_32,this.value,"date");
+},isDisabledDate:function(_34,_35){
+},getClassForDate:function(_36,_37){
+}});
+}
Index: trunk/web/dojo/dijit/TooltipDialog.js
===================================================================
--- trunk/web/dojo/dijit/TooltipDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/TooltipDialog.js	(revision 9)
@@ -0,0 +1,66 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.TooltipDialog"]){
+dojo._hasResource["dijit.TooltipDialog"]=true;
+dojo.provide("dijit.TooltipDialog");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._Templated");
+dojo.require("dijit.form._FormMixin");
+dojo.require("dijit._DialogMixin");
+dojo.declare("dijit.TooltipDialog",[dijit.layout.ContentPane,dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin],{title:"",doLayout:false,autofocus:true,baseClass:"dijitTooltipDialog",_firstFocusItem:null,_lastFocusItem:null,templateString:dojo.cache("dijit","templates/TooltipDialog.html","<div waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presentation\"></div>\n</div>\n"),postCreate:function(){
+this.inherited(arguments);
+this.connect(this.containerNode,"onkeypress","_onKey");
+this.containerNode.title=this.title;
+},orient:function(_1,_2,_3){
+var c=this._currentOrientClass;
+if(c){
+dojo.removeClass(this.domNode,c);
+}
+c="dijitTooltipAB"+(_3.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_3.charAt(0)=="T"?"Below":"Above");
+dojo.addClass(this.domNode,c);
+this._currentOrientClass=c;
+},onOpen:function(_4){
+this.orient(this.domNode,_4.aroundCorner,_4.corner);
+this._onShow();
+if(this.autofocus){
+this._getFocusItems(this.containerNode);
+dijit.focus(this._firstFocusItem);
+}
+},onClose:function(){
+this.onHide();
+},_onKey:function(_5){
+var _6=_5.target;
+var dk=dojo.keys;
+if(_5.charOrCode===dk.TAB){
+this._getFocusItems(this.containerNode);
+}
+var _7=(this._firstFocusItem==this._lastFocusItem);
+if(_5.charOrCode==dk.ESCAPE){
+setTimeout(dojo.hitch(this,"onCancel"),0);
+dojo.stopEvent(_5);
+}else{
+if(_6==this._firstFocusItem&&_5.shiftKey&&_5.charOrCode===dk.TAB){
+if(!_7){
+dijit.focus(this._lastFocusItem);
+}
+dojo.stopEvent(_5);
+}else{
+if(_6==this._lastFocusItem&&_5.charOrCode===dk.TAB&&!_5.shiftKey){
+if(!_7){
+dijit.focus(this._firstFocusItem);
+}
+dojo.stopEvent(_5);
+}else{
+if(_5.charOrCode===dk.TAB){
+_5.stopPropagation();
+}
+}
+}
+}
+}});
+}
Index: trunk/web/dojo/dijit/robotx.js
===================================================================
--- trunk/web/dojo/dijit/robotx.js	(revision 0)
+++ trunk/web/dojo/dijit/robotx.js	(revision 9)
@@ -0,0 +1,24 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.robotx"]){
+dojo._hasResource["dijit.robotx"]=true;
+dojo.provide("dijit.robotx");
+dojo.require("dijit.robot");
+dojo.require("dojo.robotx");
+dojo.experimental("dijit.robotx");
+(function(){
+var _1=doh.robot._updateDocument;
+dojo.mixin(doh.robot,{_updateDocument:function(){
+_1();
+var _2=dojo.global;
+if(_2["dijit"]){
+dijit=_2.dijit;
+}
+}});
+})();
+}
Index: trunk/web/dojo/dijit/_Templated.js
===================================================================
--- trunk/web/dojo/dijit/_Templated.js	(revision 0)
+++ trunk/web/dojo/dijit/_Templated.js	(revision 9)
@@ -0,0 +1,184 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._Templated"]){
+dojo._hasResource["dijit._Templated"]=true;
+dojo.provide("dijit._Templated");
+dojo.require("dijit._Widget");
+dojo.require("dojo.string");
+dojo.require("dojo.parser");
+dojo.require("dojo.cache");
+dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){
+this._attachPoints=[];
+},_stringRepl:function(_1){
+var _2=this.declaredClass,_3=this;
+return dojo.string.substitute(_1,this,function(_4,_5){
+if(_5.charAt(0)=="!"){
+_4=dojo.getObject(_5.substr(1),false,_3);
+}
+if(typeof _4=="undefined"){
+throw new Error(_2+" template:"+_5);
+}
+if(_4==null){
+return "";
+}
+return _5.charAt(0)=="!"?_4:_4.toString().replace(/"/g,"&quot;");
+},this);
+},buildRendering:function(){
+var _6=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);
+var _7;
+if(dojo.isString(_6)){
+_7=dojo._toDom(this._stringRepl(_6));
+if(_7.nodeType!=1){
+throw new Error("Invalid template: "+_6);
+}
+}else{
+_7=_6.cloneNode(true);
+}
+this.domNode=_7;
+this._attachTemplateNodes(_7);
+if(this.widgetsInTemplate){
+var _8=dojo.parser,_9,_a;
+if(_8._query!="[dojoType]"){
+_9=_8._query;
+_a=_8._attrName;
+_8._query="[dojoType]";
+_8._attrName="dojoType";
+}
+var cw=(this._startupWidgets=dojo.parser.parse(_7,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));
+if(_9){
+_8._query=_9;
+_8._attrName=_a;
+}
+this._supportingWidgets=dijit.findWidgets(_7);
+this._attachTemplateNodes(cw,function(n,p){
+return n[p];
+});
+}
+this._fillContent(this.srcNodeRef);
+},_fillContent:function(_b){
+var _c=this.containerNode;
+if(_b&&_c){
+while(_b.hasChildNodes()){
+_c.appendChild(_b.firstChild);
+}
+}
+},_attachTemplateNodes:function(_d,_e){
+_e=_e||function(n,p){
+return n.getAttribute(p);
+};
+var _f=dojo.isArray(_d)?_d:(_d.all||_d.getElementsByTagName("*"));
+var x=dojo.isArray(_d)?0:-1;
+for(;x<_f.length;x++){
+var _10=(x==-1)?_d:_f[x];
+if(this.widgetsInTemplate&&_e(_10,"dojoType")){
+continue;
+}
+var _11=_e(_10,"dojoAttachPoint");
+if(_11){
+var _12,_13=_11.split(/\s*,\s*/);
+while((_12=_13.shift())){
+if(dojo.isArray(this[_12])){
+this[_12].push(_10);
+}else{
+this[_12]=_10;
+}
+this._attachPoints.push(_12);
+}
+}
+var _14=_e(_10,"dojoAttachEvent");
+if(_14){
+var _15,_16=_14.split(/\s*,\s*/);
+var _17=dojo.trim;
+while((_15=_16.shift())){
+if(_15){
+var _18=null;
+if(_15.indexOf(":")!=-1){
+var _19=_15.split(":");
+_15=_17(_19[0]);
+_18=_17(_19[1]);
+}else{
+_15=_17(_15);
+}
+if(!_18){
+_18=_15;
+}
+this.connect(_10,_15,_18);
+}
+}
+}
+var _1a=_e(_10,"waiRole");
+if(_1a){
+dijit.setWaiRole(_10,_1a);
+}
+var _1b=_e(_10,"waiState");
+if(_1b){
+dojo.forEach(_1b.split(/\s*,\s*/),function(_1c){
+if(_1c.indexOf("-")!=-1){
+var _1d=_1c.split("-");
+dijit.setWaiState(_10,_1d[0],_1d[1]);
+}
+});
+}
+}
+},startup:function(){
+dojo.forEach(this._startupWidgets,function(w){
+if(w&&!w._started&&w.startup){
+w.startup();
+}
+});
+this.inherited(arguments);
+},destroyRendering:function(){
+dojo.forEach(this._attachPoints,function(_1e){
+delete this[_1e];
+},this);
+this._attachPoints=[];
+this.inherited(arguments);
+}});
+dijit._Templated._templateCache={};
+dijit._Templated.getCachedTemplate=function(_1f,_20,_21){
+var _22=dijit._Templated._templateCache;
+var key=_20||_1f;
+var _23=_22[key];
+if(_23){
+try{
+if(!_23.ownerDocument||_23.ownerDocument==dojo.doc){
+return _23;
+}
+}
+catch(e){
+}
+dojo.destroy(_23);
+}
+if(!_20){
+_20=dojo.cache(_1f,{sanitize:true});
+}
+_20=dojo.string.trim(_20);
+if(_21||_20.match(/\$\{([^\}]+)\}/g)){
+return (_22[key]=_20);
+}else{
+var _24=dojo._toDom(_20);
+if(_24.nodeType!=1){
+throw new Error("Invalid template: "+_20);
+}
+return (_22[key]=_24);
+}
+};
+if(dojo.isIE){
+dojo.addOnWindowUnload(function(){
+var _25=dijit._Templated._templateCache;
+for(var key in _25){
+var _26=_25[key];
+if(typeof _26=="object"){
+dojo.destroy(_26);
+}
+delete _25[key];
+}
+});
+}
+dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});
+}
Index: trunk/web/dojo/dijit/_Widget.js
===================================================================
--- trunk/web/dojo/dijit/_Widget.js	(revision 0)
+++ trunk/web/dojo/dijit/_Widget.js	(revision 9)
@@ -0,0 +1,345 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._Widget"]){
+dojo._hasResource["dijit._Widget"]=true;
+dojo.provide("dijit._Widget");
+dojo.require("dijit._base");
+dojo.connect(dojo,"_connect",function(_1,_2){
+if(_1&&dojo.isFunction(_1._onConnect)){
+_1._onConnect(_2);
+}
+});
+dijit._connectOnUseEventHandler=function(_3){
+};
+dijit._lastKeyDownNode=null;
+if(dojo.isIE){
+(function(){
+var _4=function(_5){
+dijit._lastKeyDownNode=_5.srcElement;
+};
+dojo.doc.attachEvent("onkeydown",_4);
+dojo.addOnWindowUnload(function(){
+dojo.doc.detachEvent("onkeydown",_4);
+});
+})();
+}else{
+dojo.doc.addEventListener("keydown",function(_6){
+dijit._lastKeyDownNode=_6.target;
+},true);
+}
+(function(){
+var _7={},_8=function(_9){
+var dc=_9.declaredClass;
+if(!_7[dc]){
+var r=[],_a,_b=_9.constructor.prototype;
+for(var _c in _b){
+if(dojo.isFunction(_b[_c])&&(_a=_c.match(/^_set([a-zA-Z]*)Attr$/))&&_a[1]){
+r.push(_a[1].charAt(0).toLowerCase()+_a[1].substr(1));
+}
+}
+_7[dc]=r;
+}
+return _7[dc]||[];
+};
+dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_d,_e){
+this.create(_d,_e);
+},create:function(_f,_10){
+this.srcNodeRef=dojo.byId(_10);
+this._connects=[];
+this._subscribes=[];
+this._deferredConnects=dojo.clone(this._deferredConnects);
+for(var _11 in this.attributeMap){
+delete this._deferredConnects[_11];
+}
+for(_11 in this._deferredConnects){
+if(this[_11]!==dijit._connectOnUseEventHandler){
+delete this._deferredConnects[_11];
+}
+}
+if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){
+this.id=this.srcNodeRef.id;
+}
+if(_f){
+this.params=_f;
+dojo.mixin(this,_f);
+}
+this.postMixInProperties();
+if(!this.id){
+this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+}
+dijit.registry.add(this);
+this.buildRendering();
+if(this.domNode){
+this._applyAttributes();
+var _12=this.srcNodeRef;
+if(_12&&_12.parentNode){
+_12.parentNode.replaceChild(this.domNode,_12);
+}
+for(_11 in this.params){
+this._onConnect(_11);
+}
+}
+if(this.domNode){
+this.domNode.setAttribute("widgetId",this.id);
+}
+this.postCreate();
+if(this.srcNodeRef&&!this.srcNodeRef.parentNode){
+delete this.srcNodeRef;
+}
+this._created=true;
+},_applyAttributes:function(){
+var _13=function(_14,_15){
+if((_15.params&&_14 in _15.params)||_15[_14]){
+_15.set(_14,_15[_14]);
+}
+};
+for(var _16 in this.attributeMap){
+_13(_16,this);
+}
+dojo.forEach(_8(this),function(a){
+if(!(a in this.attributeMap)){
+_13(a,this);
+}
+},this);
+},postMixInProperties:function(){
+},buildRendering:function(){
+this.domNode=this.srcNodeRef||dojo.create("div");
+},postCreate:function(){
+if(this.baseClass){
+var _17=this.baseClass.split(" ");
+if(!this.isLeftToRight()){
+_17=_17.concat(dojo.map(_17,function(_18){
+return _18+"Rtl";
+}));
+}
+dojo.addClass(this.domNode,_17);
+}
+},startup:function(){
+this._started=true;
+},destroyRecursive:function(_19){
+this._beingDestroyed=true;
+this.destroyDescendants(_19);
+this.destroy(_19);
+},destroy:function(_1a){
+this._beingDestroyed=true;
+this.uninitialize();
+var d=dojo,dfe=d.forEach,dun=d.unsubscribe;
+dfe(this._connects,function(_1b){
+dfe(_1b,d.disconnect);
+});
+dfe(this._subscribes,function(_1c){
+dun(_1c);
+});
+dfe(this._supportingWidgets||[],function(w){
+if(w.destroyRecursive){
+w.destroyRecursive();
+}else{
+if(w.destroy){
+w.destroy();
+}
+}
+});
+this.destroyRendering(_1a);
+dijit.registry.remove(this.id);
+this._destroyed=true;
+},destroyRendering:function(_1d){
+if(this.bgIframe){
+this.bgIframe.destroy(_1d);
+delete this.bgIframe;
+}
+if(this.domNode){
+if(_1d){
+dojo.removeAttr(this.domNode,"widgetId");
+}else{
+dojo.destroy(this.domNode);
+}
+delete this.domNode;
+}
+if(this.srcNodeRef){
+if(!_1d){
+dojo.destroy(this.srcNodeRef);
+}
+delete this.srcNodeRef;
+}
+},destroyDescendants:function(_1e){
+dojo.forEach(this.getChildren(),function(_1f){
+if(_1f.destroyRecursive){
+_1f.destroyRecursive(_1e);
+}
+});
+},uninitialize:function(){
+return false;
+},onFocus:function(){
+},onBlur:function(){
+},_onFocus:function(e){
+this.onFocus();
+},_onBlur:function(){
+this.onBlur();
+},_onConnect:function(_20){
+if(_20 in this._deferredConnects){
+var _21=this[this._deferredConnects[_20]||"domNode"];
+this.connect(_21,_20.toLowerCase(),_20);
+delete this._deferredConnects[_20];
+}
+},_setClassAttr:function(_22){
+var _23=this[this.attributeMap["class"]||"domNode"];
+dojo.removeClass(_23,this["class"]);
+this["class"]=_22;
+dojo.addClass(_23,_22);
+},_setStyleAttr:function(_24){
+var _25=this[this.attributeMap.style||"domNode"];
+if(dojo.isObject(_24)){
+dojo.style(_25,_24);
+}else{
+if(_25.style.cssText){
+_25.style.cssText+="; "+_24;
+}else{
+_25.style.cssText=_24;
+}
+}
+this.style=_24;
+},setAttribute:function(_26,_27){
+dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");
+this.set(_26,_27);
+},_attrToDom:function(_28,_29){
+var _2a=this.attributeMap[_28];
+dojo.forEach(dojo.isArray(_2a)?_2a:[_2a],function(_2b){
+var _2c=this[_2b.node||_2b||"domNode"];
+var _2d=_2b.type||"attribute";
+switch(_2d){
+case "attribute":
+if(dojo.isFunction(_29)){
+_29=dojo.hitch(this,_29);
+}
+var _2e=_2b.attribute?_2b.attribute:(/^on[A-Z][a-zA-Z]*$/.test(_28)?_28.toLowerCase():_28);
+dojo.attr(_2c,_2e,_29);
+break;
+case "innerText":
+_2c.innerHTML="";
+_2c.appendChild(dojo.doc.createTextNode(_29));
+break;
+case "innerHTML":
+_2c.innerHTML=_29;
+break;
+case "class":
+dojo.removeClass(_2c,this[_28]);
+dojo.addClass(_2c,_29);
+break;
+}
+},this);
+this[_28]=_29;
+},attr:function(_2f,_30){
+if(dojo.config.isDebug){
+var _31=arguments.callee._ach||(arguments.callee._ach={}),_32=(arguments.callee.caller||"unknown caller").toString();
+if(!_31[_32]){
+dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_32,"","2.0");
+_31[_32]=true;
+}
+}
+var _33=arguments.length;
+if(_33>=2||typeof _2f==="object"){
+return this.set.apply(this,arguments);
+}else{
+return this.get(_2f);
+}
+},get:function(_34){
+var _35=this._getAttrNames(_34);
+return this[_35.g]?this[_35.g]():this[_34];
+},set:function(_36,_37){
+if(typeof _36==="object"){
+for(var x in _36){
+this.set(x,_36[x]);
+}
+return this;
+}
+var _38=this._getAttrNames(_36);
+if(this[_38.s]){
+var _39=this[_38.s].apply(this,Array.prototype.slice.call(arguments,1));
+}else{
+if(_36 in this.attributeMap){
+this._attrToDom(_36,_37);
+}
+var _3a=this[_36];
+this[_36]=_37;
+}
+return _39||this;
+},_attrPairNames:{},_getAttrNames:function(_3b){
+var apn=this._attrPairNames;
+if(apn[_3b]){
+return apn[_3b];
+}
+var uc=_3b.charAt(0).toUpperCase()+_3b.substr(1);
+return (apn[_3b]={n:_3b+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});
+},toString:function(){
+return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";
+},getDescendants:function(){
+return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];
+},getChildren:function(){
+return this.containerNode?dijit.findWidgets(this.containerNode):[];
+},nodesWithKeyClick:["input","button"],connect:function(obj,_3c,_3d){
+var d=dojo,dc=d._connect,_3e=[];
+if(_3c=="ondijitclick"){
+if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){
+var m=d.hitch(this,_3d);
+_3e.push(dc(obj,"onkeydown",this,function(e){
+if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){
+dijit._lastKeyDownNode=e.target;
+e.preventDefault();
+}
+}),dc(obj,"onkeyup",this,function(e){
+if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target===dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){
+dijit._lastKeyDownNode=null;
+return m(e);
+}
+}));
+}
+_3c="onclick";
+}
+_3e.push(dc(obj,_3c,this,_3d));
+this._connects.push(_3e);
+return _3e;
+},disconnect:function(_3f){
+for(var i=0;i<this._connects.length;i++){
+if(this._connects[i]==_3f){
+dojo.forEach(_3f,dojo.disconnect);
+this._connects.splice(i,1);
+return;
+}
+}
+},subscribe:function(_40,_41){
+var d=dojo,_42=d.subscribe(_40,this,_41);
+this._subscribes.push(_42);
+return _42;
+},unsubscribe:function(_43){
+for(var i=0;i<this._subscribes.length;i++){
+if(this._subscribes[i]==_43){
+dojo.unsubscribe(_43);
+this._subscribes.splice(i,1);
+return;
+}
+}
+},isLeftToRight:function(){
+return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();
+},isFocusable:function(){
+return this.focus&&(dojo.style(this.domNode,"display")!="none");
+},placeAt:function(_44,_45){
+if(_44.declaredClass&&_44.addChild){
+_44.addChild(this,_45);
+}else{
+dojo.place(this.domNode,_44,_45);
+}
+return this;
+},_onShow:function(){
+this.onShow();
+},onShow:function(){
+},onHide:function(){
+},onClose:function(){
+return true;
+}});
+})();
+}
Index: trunk/web/dojo/dijit/_tree/dndSource.js
===================================================================
--- trunk/web/dojo/dijit/_tree/dndSource.js	(revision 0)
+++ trunk/web/dojo/dijit/_tree/dndSource.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._tree.dndSource"]){
+dojo._hasResource["dijit._tree.dndSource"]=true;
+dojo.provide("dijit._tree.dndSource");
+dojo.require("dijit.tree.dndSource");
+dojo.deprecated("dijit._tree.dndSource has been moved to dijit.tree.dndSource, use that instead","","2.0");
+dijit._tree.dndSource=dijit.tree.dndSource;
+}
Index: trunk/web/dojo/dijit/ToolbarSeparator.js
===================================================================
--- trunk/web/dojo/dijit/ToolbarSeparator.js	(revision 0)
+++ trunk/web/dojo/dijit/ToolbarSeparator.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.ToolbarSeparator"]){
+dojo._hasResource["dijit.ToolbarSeparator"]=true;
+dojo.provide("dijit.ToolbarSeparator");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\" waiRole=\"presentation\"></div>",postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+},isFocusable:function(){
+return false;
+}});
+}
Index: trunk/web/dojo/dijit/robot.js
===================================================================
--- trunk/web/dojo/dijit/robot.js	(revision 0)
+++ trunk/web/dojo/dijit/robot.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.robot"]){
+dojo._hasResource["dijit.robot"]=true;
+dojo.provide("dijit.robot");
+dojo.require("dojo.robot");
+}
Index: trunk/web/dojo/dijit/Declaration.js
===================================================================
--- trunk/web/dojo/dijit/Declaration.js	(revision 0)
+++ trunk/web/dojo/dijit/Declaration.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Declaration"]){
+dojo._hasResource["dijit.Declaration"]=true;
+dojo.provide("dijit.Declaration");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.Declaration",dijit._Widget,{_noScript:true,widgetClass:"",defaults:null,mixins:[],buildRendering:function(){
+var _1=this.srcNodeRef.parentNode.removeChild(this.srcNodeRef),_2=dojo.query("> script[type^='dojo/method'][event]",_1).orphan(),_3=dojo.query("> script[type^='dojo/method']",_1).orphan(),_4=dojo.query("> script[type^='dojo/connect']",_1).orphan(),_5=_1.nodeName;
+var _6=this.defaults||{};
+dojo.forEach(_2,function(s){
+var _7=s.getAttribute("event"),_8=dojo.parser._functionFromScript(s);
+_6[_7]=_8;
+});
+this.mixins=this.mixins.length?dojo.map(this.mixins,function(_9){
+return dojo.getObject(_9);
+}):[dijit._Widget,dijit._Templated];
+_6.widgetsInTemplate=true;
+_6._skipNodeCache=true;
+_6.templateString="<"+_5+" class='"+_1.className+"' dojoAttachPoint='"+(_1.getAttribute("dojoAttachPoint")||"")+"' dojoAttachEvent='"+(_1.getAttribute("dojoAttachEvent")||"")+"' >"+_1.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+_5+">";
+dojo.query("[dojoType]",_1).forEach(function(_a){
+_a.removeAttribute("dojoType");
+});
+var wc=dojo.declare(this.widgetClass,this.mixins,_6);
+var _b=_4.concat(_3);
+dojo.forEach(_b,function(s){
+var _c=s.getAttribute("event")||"postscript",_d=dojo.parser._functionFromScript(s);
+dojo.connect(wc.prototype,_c,_d);
+});
+}});
+}
Index: trunk/web/dojo/dijit/TitlePane.js
===================================================================
--- trunk/web/dojo/dijit/TitlePane.js	(revision 0)
+++ trunk/web/dojo/dijit/TitlePane.js	(revision 9)
@@ -0,0 +1,110 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.TitlePane"]){
+dojo._hasResource["dijit.TitlePane"]=true;
+dojo.provide("dijit.TitlePane");
+dojo.require("dojo.fx");
+dojo.require("dijit._Templated");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._CssStateMixin");
+dojo.declare("dijit.TitlePane",[dijit.layout.ContentPane,dijit._Templated,dijit._CssStateMixin],{title:"",open:true,toggleable:true,tabIndex:"0",duration:dijit.defaultDuration,baseClass:"dijitTitlePane",templateString:dojo.cache("dijit","templates/TitlePane.html","<div>\n\t<div dojoAttachEvent=\"onclick:_onTitleClick, onkeypress:_onTitleKey\"\n\t\t\tclass=\"dijitTitlePaneTitle\" dojoAttachPoint=\"titleBarNode\">\n\t\t<div class=\"dijitTitlePaneTitleFocus\" dojoAttachPoint=\"focusNode\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"arrowNode\" class=\"dijitArrowNode\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span\n\t\t\t><span dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></span>\n\t\t</div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\" waiRole=\"presentation\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\" waiRole=\"presentation\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" id=\"${id}_pane\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc.  Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),attributeMap:dojo.delegate(dijit.layout.ContentPane.prototype.attributeMap,{title:{node:"titleNode",type:"innerHTML"},tooltip:{node:"focusNode",type:"attribute",attribute:"title"},id:""}),postCreate:function(){
+if(!this.open){
+this.hideNode.style.display=this.wipeNode.style.display="none";
+}
+if(this.toggleable){
+this._trackMouseState(this.titleBarNode,"dijitTitlePaneTitle");
+}
+this._setCss();
+dojo.setSelectable(this.titleNode,false);
+var _1=this.hideNode,_2=this.wipeNode;
+this._wipeIn=dojo.fx.wipeIn({node:this.wipeNode,duration:this.duration,beforeBegin:function(){
+_1.style.display="";
+}});
+this._wipeOut=dojo.fx.wipeOut({node:this.wipeNode,duration:this.duration,onEnd:function(){
+_1.style.display="none";
+}});
+this.inherited(arguments);
+},_setOpenAttr:function(_3){
+if(this.open!==_3){
+this.toggle();
+}
+dijit.setWaiState(this.containerNode,"hidden",this.open?"false":"true");
+dijit.setWaiState(this.focusNode,"pressed",this.open?"true":"false");
+},_setToggleableAttr:function(_4){
+this.toggleable=_4;
+dijit.setWaiRole(this.focusNode,_4?"button":"heading");
+if(_4){
+dijit.setWaiState(this.focusNode,"controls",this.id+"_pane");
+dojo.attr(this.focusNode,"tabIndex",this.tabIndex);
+}else{
+dojo.removeAttr(this.focusNode,"tabIndex");
+}
+this._setCss();
+},_setContentAttr:function(_5){
+if(!this.open||!this._wipeOut||this._wipeOut.status()=="playing"){
+this.inherited(arguments);
+}else{
+if(this._wipeIn&&this._wipeIn.status()=="playing"){
+this._wipeIn.stop();
+}
+dojo.marginBox(this.wipeNode,{h:dojo.marginBox(this.wipeNode).h});
+this.inherited(arguments);
+if(this._wipeIn){
+this._wipeIn.play();
+}else{
+this.hideNode.style.display="";
+}
+}
+},toggle:function(){
+dojo.forEach([this._wipeIn,this._wipeOut],function(_6){
+if(_6&&_6.status()=="playing"){
+_6.stop();
+}
+});
+var _7=this[this.open?"_wipeOut":"_wipeIn"];
+if(_7){
+_7.play();
+}else{
+this.hideNode.style.display=this.open?"":"none";
+}
+this.open=!this.open;
+if(this.open){
+this._onShow();
+}else{
+this.onHide();
+}
+this._setCss();
+},_setCss:function(){
+var _8=this.titleBarNode||this.focusNode;
+if(this._titleBarClass){
+dojo.removeClass(_8,this._titleBarClass);
+}
+this._titleBarClass="dijit"+(this.toggleable?"":"Fixed")+(this.open?"Open":"Closed");
+dojo.addClass(_8,this._titleBarClass);
+this.arrowNodeInner.innerHTML=this.open?"-":"+";
+},_onTitleKey:function(e){
+if(e.charOrCode==dojo.keys.ENTER||e.charOrCode==" "){
+if(this.toggleable){
+this.toggle();
+}
+dojo.stopEvent(e);
+}else{
+if(e.charOrCode==dojo.keys.DOWN_ARROW&&this.open){
+this.containerNode.focus();
+e.preventDefault();
+}
+}
+},_onTitleClick:function(){
+if(this.toggleable){
+this.toggle();
+}
+},setTitle:function(_9){
+dojo.deprecated("dijit.TitlePane.setTitle() is deprecated.  Use set('title', ...) instead.","","2.0");
+this.set("title",_9);
+}});
+}
Index: trunk/web/dojo/dijit/Editor.js
===================================================================
--- trunk/web/dojo/dijit/Editor.js	(revision 0)
+++ trunk/web/dojo/dijit/Editor.js	(revision 9)
@@ -0,0 +1,473 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Editor"]){
+dojo._hasResource["dijit.Editor"]=true;
+dojo.provide("dijit.Editor");
+dojo.require("dijit._editor.RichText");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.ToolbarSeparator");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.plugins.EnterKeyHandling");
+dojo.require("dijit._editor.range");
+dojo.require("dijit._Container");
+dojo.require("dojo.i18n");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dijit._editor.range");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.Editor",dijit._editor.RichText,{plugins:null,extraPlugins:null,constructor:function(){
+if(!dojo.isArray(this.plugins)){
+this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|","insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull","dijit._editor.plugins.EnterKeyHandling"];
+}
+this._plugins=[];
+this._editInterval=this.editActionInterval*1000;
+if(dojo.isIE){
+this.events.push("onBeforeDeactivate");
+this.events.push("onBeforeActivate");
+}
+},postCreate:function(){
+this._steps=this._steps.slice(0);
+this._undoedSteps=this._undoedSteps.slice(0);
+if(dojo.isArray(this.extraPlugins)){
+this.plugins=this.plugins.concat(this.extraPlugins);
+}
+this.setValueDeferred=new dojo.Deferred();
+this.inherited(arguments);
+this.commands=dojo.i18n.getLocalization("dijit._editor","commands",this.lang);
+if(!this.toolbar){
+this.toolbar=new dijit.Toolbar({dir:this.dir,lang:this.lang});
+this.header.appendChild(this.toolbar.domNode);
+}
+dojo.forEach(this.plugins,this.addPlugin,this);
+this.setValueDeferred.callback(true);
+dojo.addClass(this.iframe.parentNode,"dijitEditorIFrameContainer");
+dojo.addClass(this.iframe,"dijitEditorIFrame");
+dojo.attr(this.iframe,"allowTransparency",true);
+if(dojo.isWebKit){
+dojo.style(this.domNode,"KhtmlUserSelect","none");
+}
+this.toolbar.startup();
+this.onNormalizedDisplayChanged();
+},destroy:function(){
+dojo.forEach(this._plugins,function(p){
+if(p&&p.destroy){
+p.destroy();
+}
+});
+this._plugins=[];
+this.toolbar.destroyRecursive();
+delete this.toolbar;
+this.inherited(arguments);
+},addPlugin:function(_1,_2){
+var _3=dojo.isString(_1)?{name:_1}:_1;
+if(!_3.setEditor){
+var o={"args":_3,"plugin":null,"editor":this};
+dojo.publish(dijit._scopeName+".Editor.getPlugin",[o]);
+if(!o.plugin){
+var pc=dojo.getObject(_3.name);
+if(pc){
+o.plugin=new pc(_3);
+}
+}
+if(!o.plugin){
+console.warn("Cannot find plugin",_1);
+return;
+}
+_1=o.plugin;
+}
+if(arguments.length>1){
+this._plugins[_2]=_1;
+}else{
+this._plugins.push(_1);
+}
+_1.setEditor(this);
+if(dojo.isFunction(_1.setToolbar)){
+_1.setToolbar(this.toolbar);
+}
+},startup:function(){
+},resize:function(_4){
+if(_4){
+dijit.layout._LayoutWidget.prototype.resize.apply(this,arguments);
+}
+},layout:function(){
+var _5=(this._contentBox.h-(this.getHeaderHeight()+this.getFooterHeight()+dojo._getPadBorderExtents(this.iframe.parentNode).h+dojo._getMarginExtents(this.iframe.parentNode).h));
+this.editingArea.style.height=_5+"px";
+if(this.iframe){
+this.iframe.style.height="100%";
+}
+this._layoutMode=true;
+},_onIEMouseDown:function(e){
+var _6;
+var b=this.document.body;
+var _7=b.clientWidth;
+var _8=b.clientHeight;
+var _9=b.clientLeft;
+var _a=b.offsetWidth;
+var _b=b.offsetHeight;
+var _c=b.offsetLeft;
+bodyDir=b.dir?b.dir.toLowerCase():"";
+if(bodyDir!="rtl"){
+if(_7<_a&&e.x>_7&&e.x<_a){
+_6=true;
+}
+}else{
+if(e.x<_9&&e.x>_c){
+_6=true;
+}
+}
+if(!_6){
+if(_8<_b&&e.y>_8&&e.y<_b){
+_6=true;
+}
+}
+if(!_6){
+delete this._cursorToStart;
+delete this._savedSelection;
+if(e.target.tagName=="BODY"){
+setTimeout(dojo.hitch(this,"placeCursorAtEnd"),0);
+}
+this.inherited(arguments);
+}
+},onBeforeActivate:function(e){
+this._restoreSelection();
+},onBeforeDeactivate:function(e){
+if(this.customUndo){
+this.endEditing(true);
+}
+if(e.target.tagName!="BODY"){
+this._saveSelection();
+}
+},customUndo:dojo.isIE||dojo.isWebKit,editActionInterval:3,beginEditing:function(_d){
+if(!this._inEditing){
+this._inEditing=true;
+this._beginEditing(_d);
+}
+if(this.editActionInterval>0){
+if(this._editTimer){
+clearTimeout(this._editTimer);
+}
+this._editTimer=setTimeout(dojo.hitch(this,this.endEditing),this._editInterval);
+}
+},_steps:[],_undoedSteps:[],execCommand:function(_e){
+if(this.customUndo&&(_e=="undo"||_e=="redo")){
+return this[_e]();
+}else{
+if(this.customUndo){
+this.endEditing();
+this._beginEditing();
+}
+var r;
+try{
+r=this.inherited("execCommand",arguments);
+if(dojo.isWebKit&&_e=="paste"&&!r){
+throw {code:1011};
+}
+}
+catch(e){
+if(e.code==1011&&/copy|cut|paste/.test(_e)){
+var _f=dojo.string.substitute,_10={cut:"X",copy:"C",paste:"V"};
+alert(_f(this.commands.systemShortcut,[this.commands[_e],_f(this.commands[dojo.isMac?"appleKey":"ctrlKey"],[_10[_e]])]));
+}
+r=false;
+}
+if(this.customUndo){
+this._endEditing();
+}
+return r;
+}
+},queryCommandEnabled:function(cmd){
+if(this.customUndo&&(cmd=="undo"||cmd=="redo")){
+return cmd=="undo"?(this._steps.length>1):(this._undoedSteps.length>0);
+}else{
+return this.inherited("queryCommandEnabled",arguments);
+}
+},_moveToBookmark:function(b){
+var _11=b.mark;
+var _12=b.mark;
+var col=b.isCollapsed;
+var r,_13,_14,sel;
+if(_12){
+if(dojo.isIE){
+if(dojo.isArray(_12)){
+_11=[];
+dojo.forEach(_12,function(n){
+_11.push(dijit.range.getNode(n,this.editNode));
+},this);
+dojo.withGlobal(this.window,"moveToBookmark",dijit,[{mark:_11,isCollapsed:col}]);
+}else{
+if(_12.startContainer&&_12.endContainer){
+sel=dijit.range.getSelection(this.window);
+if(sel&&sel.removeAllRanges){
+sel.removeAllRanges();
+r=dijit.range.create(this.window);
+_13=dijit.range.getNode(_12.startContainer,this.editNode);
+_14=dijit.range.getNode(_12.endContainer,this.editNode);
+if(_13&&_14){
+r.setStart(_13,_12.startOffset);
+r.setEnd(_14,_12.endOffset);
+sel.addRange(r);
+}
+}
+}
+}
+}else{
+sel=dijit.range.getSelection(this.window);
+if(sel&&sel.removeAllRanges){
+sel.removeAllRanges();
+r=dijit.range.create(this.window);
+_13=dijit.range.getNode(_12.startContainer,this.editNode);
+_14=dijit.range.getNode(_12.endContainer,this.editNode);
+if(_13&&_14){
+r.setStart(_13,_12.startOffset);
+r.setEnd(_14,_12.endOffset);
+sel.addRange(r);
+}
+}
+}
+}
+},_changeToStep:function(_15,to){
+this.setValue(to.text);
+var b=to.bookmark;
+if(!b){
+return;
+}
+this._moveToBookmark(b);
+},undo:function(){
+var ret=false;
+if(!this._undoRedoActive){
+this._undoRedoActive=true;
+this.endEditing(true);
+var s=this._steps.pop();
+if(s&&this._steps.length>0){
+this.focus();
+this._changeToStep(s,this._steps[this._steps.length-1]);
+this._undoedSteps.push(s);
+this.onDisplayChanged();
+delete this._undoRedoActive;
+ret=true;
+}
+delete this._undoRedoActive;
+}
+return ret;
+},redo:function(){
+var ret=false;
+if(!this._undoRedoActive){
+this._undoRedoActive=true;
+this.endEditing(true);
+var s=this._undoedSteps.pop();
+if(s&&this._steps.length>0){
+this.focus();
+this._changeToStep(this._steps[this._steps.length-1],s);
+this._steps.push(s);
+this.onDisplayChanged();
+ret=true;
+}
+delete this._undoRedoActive;
+}
+return ret;
+},endEditing:function(_16){
+if(this._editTimer){
+clearTimeout(this._editTimer);
+}
+if(this._inEditing){
+this._endEditing(_16);
+this._inEditing=false;
+}
+},_getBookmark:function(){
+var b=dojo.withGlobal(this.window,dijit.getBookmark);
+var tmp=[];
+if(b&&b.mark){
+var _17=b.mark;
+if(dojo.isIE){
+var sel=dijit.range.getSelection(this.window);
+if(!dojo.isArray(_17)){
+if(sel){
+var _18;
+if(sel.rangeCount){
+_18=sel.getRangeAt(0);
+}
+if(_18){
+b.mark=_18.cloneRange();
+}else{
+b.mark=dojo.withGlobal(this.window,dijit.getBookmark);
+}
+}
+}else{
+dojo.forEach(b.mark,function(n){
+tmp.push(dijit.range.getIndex(n,this.editNode).o);
+},this);
+b.mark=tmp;
+}
+}
+try{
+if(b.mark&&b.mark.startContainer){
+tmp=dijit.range.getIndex(b.mark.startContainer,this.editNode).o;
+b.mark={startContainer:tmp,startOffset:b.mark.startOffset,endContainer:b.mark.endContainer===b.mark.startContainer?tmp:dijit.range.getIndex(b.mark.endContainer,this.editNode).o,endOffset:b.mark.endOffset};
+}
+}
+catch(e){
+b.mark=null;
+}
+}
+return b;
+},_beginEditing:function(cmd){
+if(this._steps.length===0){
+this._steps.push({"text":dijit._editor.getChildrenHtml(this.editNode),"bookmark":this._getBookmark()});
+}
+},_endEditing:function(_19){
+var v=dijit._editor.getChildrenHtml(this.editNode);
+this._undoedSteps=[];
+this._steps.push({text:v,bookmark:this._getBookmark()});
+},onKeyDown:function(e){
+if(!dojo.isIE&&!this.iframe&&e.keyCode==dojo.keys.TAB&&!this.tabIndent){
+this._saveSelection();
+}
+if(!this.customUndo){
+this.inherited(arguments);
+return;
+}
+var k=e.keyCode,ks=dojo.keys;
+if(e.ctrlKey&&!e.altKey){
+if(k==90||k==122){
+dojo.stopEvent(e);
+this.undo();
+return;
+}else{
+if(k==89||k==121){
+dojo.stopEvent(e);
+this.redo();
+return;
+}
+}
+}
+this.inherited(arguments);
+switch(k){
+case ks.ENTER:
+case ks.BACKSPACE:
+case ks.DELETE:
+this.beginEditing();
+break;
+case 88:
+case 86:
+if(e.ctrlKey&&!e.altKey&&!e.metaKey){
+this.endEditing();
+if(e.keyCode==88){
+this.beginEditing("cut");
+setTimeout(dojo.hitch(this,this.endEditing),1);
+}else{
+this.beginEditing("paste");
+setTimeout(dojo.hitch(this,this.endEditing),1);
+}
+break;
+}
+default:
+if(!e.ctrlKey&&!e.altKey&&!e.metaKey&&(e.keyCode<dojo.keys.F1||e.keyCode>dojo.keys.F15)){
+this.beginEditing();
+break;
+}
+case ks.ALT:
+this.endEditing();
+break;
+case ks.UP_ARROW:
+case ks.DOWN_ARROW:
+case ks.LEFT_ARROW:
+case ks.RIGHT_ARROW:
+case ks.HOME:
+case ks.END:
+case ks.PAGE_UP:
+case ks.PAGE_DOWN:
+this.endEditing(true);
+break;
+case ks.CTRL:
+case ks.SHIFT:
+case ks.TAB:
+break;
+}
+},_onBlur:function(){
+this.inherited("_onBlur",arguments);
+this.endEditing(true);
+},_saveSelection:function(){
+this._savedSelection=this._getBookmark();
+},_restoreSelection:function(){
+if(this._savedSelection){
+delete this._cursorToStart;
+if(dojo.withGlobal(this.window,"isCollapsed",dijit)){
+this._moveToBookmark(this._savedSelection);
+}
+delete this._savedSelection;
+}
+},onClick:function(){
+this.endEditing(true);
+this.inherited(arguments);
+},_setDisabledAttr:function(_1a){
+if(!this.disabled&&_1a){
+this._buttonEnabledPlugins=dojo.filter(this._plugins,function(p){
+if(p&&p.button&&!p.button.get("disabled")){
+p.button.set("disabled",true);
+return true;
+}
+return false;
+});
+}else{
+if(this.disabled&&!_1a){
+dojo.forEach(this._buttonEnabledPlugins,function(p){
+p.button.attr("disabled",false);
+p.updateState&&p.updateState();
+});
+}
+}
+this.inherited(arguments);
+},_setStateClass:function(){
+this.inherited(arguments);
+if(this.document&&this.document.body){
+dojo.style(this.document.body,"color",dojo.style(this.iframe,"color"));
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _1b=o.args,p;
+var _1c=dijit._editor._Plugin;
+var _1d=_1b.name;
+switch(_1d){
+case "undo":
+case "redo":
+case "cut":
+case "copy":
+case "paste":
+case "insertOrderedList":
+case "insertUnorderedList":
+case "indent":
+case "outdent":
+case "justifyCenter":
+case "justifyFull":
+case "justifyLeft":
+case "justifyRight":
+case "delete":
+case "selectAll":
+case "removeFormat":
+case "unlink":
+case "insertHorizontalRule":
+p=new _1c({command:_1d});
+break;
+case "bold":
+case "italic":
+case "underline":
+case "strikethrough":
+case "subscript":
+case "superscript":
+p=new _1c({buttonClass:dijit.form.ToggleButton,command:_1d});
+break;
+case "|":
+p=new _1c({button:new dijit.ToolbarSeparator(),setEditor:function(_1e){
+this.editor=_1e;
+}});
+}
+o.plugin=p;
+});
+}
Index: trunk/web/dojo/dijit/_HasDropDown.js
===================================================================
--- trunk/web/dojo/dijit/_HasDropDown.js	(revision 0)
+++ trunk/web/dojo/dijit/_HasDropDown.js	(revision 9)
@@ -0,0 +1,208 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._HasDropDown"]){
+dojo._hasResource["dijit._HasDropDown"]=true;
+dojo.provide("dijit._HasDropDown");
+dojo.require("dijit._base.place");
+dojo.require("dijit._Widget");
+dojo.declare("dijit._HasDropDown",null,{_buttonNode:null,_arrowWrapperNode:null,_popupStateNode:null,_aroundNode:null,dropDown:null,autoWidth:true,forceWidth:false,maxHeight:0,dropDownPosition:["below","above"],_stopClickEvents:true,_onDropDownMouseDown:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");
+this.toggleDropDown();
+},_onDropDownMouseUp:function(e){
+if(e&&this._docHandler){
+this.disconnect(this._docHandler);
+}
+var _1=this.dropDown,_2=false;
+if(e&&this._opened){
+var c=dojo.position(this._buttonNode,true);
+if(!(e.pageX>=c.x&&e.pageX<=c.x+c.w)||!(e.pageY>=c.y&&e.pageY<=c.y+c.h)){
+var t=e.target;
+while(t&&!_2){
+if(dojo.hasClass(t,"dijitPopup")){
+_2=true;
+}else{
+t=t.parentNode;
+}
+}
+if(_2){
+t=e.target;
+if(_1.onItemClick){
+var _3;
+while(t&&!(_3=dijit.byNode(t))){
+t=t.parentNode;
+}
+if(_3&&_3.onClick&&_3.getParent){
+_3.getParent().onItemClick(_3,e);
+}
+}
+return;
+}
+}
+}
+if(this._opened&&_1.focus){
+window.setTimeout(dojo.hitch(_1,"focus"),1);
+}
+},_onDropDownClick:function(e){
+if(this._stopClickEvents){
+dojo.stopEvent(e);
+}
+},_setupDropdown:function(){
+this._buttonNode=this._buttonNode||this.focusNode||this.domNode;
+this._popupStateNode=this._popupStateNode||this.focusNode||this._buttonNode;
+this._aroundNode=this._aroundNode||this.domNode;
+this.connect(this._buttonNode,"onmousedown","_onDropDownMouseDown");
+this.connect(this._buttonNode,"onclick","_onDropDownClick");
+this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");
+this.connect(this._buttonNode,"onkeyup","_onKey");
+if(this._setStateClass){
+this.connect(this,"openDropDown","_setStateClass");
+this.connect(this,"closeDropDown","_setStateClass");
+}
+var _4={"after":this.isLeftToRight()?"Right":"Left","before":this.isLeftToRight()?"Left":"Right","above":"Up","below":"Down","left":"Left","right":"Right"}[this.dropDownPosition[0]]||this.dropDownPosition[0]||"Down";
+dojo.addClass(this._arrowWrapperNode||this._buttonNode,"dijit"+_4+"ArrowButton");
+},postCreate:function(){
+this._setupDropdown();
+this.inherited(arguments);
+},destroyDescendants:function(){
+if(this.dropDown){
+if(!this.dropDown._destroyed){
+this.dropDown.destroyRecursive();
+}
+delete this.dropDown;
+}
+this.inherited(arguments);
+},_onDropDownKeydown:function(e){
+if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE){
+e.preventDefault();
+}
+},_onKey:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+var d=this.dropDown;
+if(d&&this._opened&&d.handleKey){
+if(d.handleKey(e)===false){
+return;
+}
+}
+if(d&&this._opened&&e.keyCode==dojo.keys.ESCAPE){
+this.toggleDropDown();
+}else{
+if(d&&!this._opened&&(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE)){
+this.toggleDropDown();
+if(d.focus){
+setTimeout(dojo.hitch(d,"focus"),1);
+}
+}
+}
+},_onBlur:function(){
+this.closeDropDown();
+this.inherited(arguments);
+},isLoaded:function(){
+return true;
+},loadDropDown:function(_5){
+_5();
+},toggleDropDown:function(){
+if(this.disabled||this.readOnly){
+return;
+}
+this.focus();
+var _6=this.dropDown;
+if(!_6){
+return;
+}
+if(!this._opened){
+if(!this.isLoaded()){
+this.loadDropDown(dojo.hitch(this,"openDropDown"));
+return;
+}else{
+this.openDropDown();
+}
+}else{
+this.closeDropDown();
+}
+},openDropDown:function(){
+var _7=this.dropDown;
+var _8=_7.domNode;
+var _9=this;
+if(!this._preparedNode){
+dijit.popup.moveOffScreen(_8);
+this._preparedNode=true;
+if(_8.style.width){
+this._explicitDDWidth=true;
+}
+if(_8.style.height){
+this._explicitDDHeight=true;
+}
+}
+if(this.maxHeight||this.forceWidth||this.autoWidth){
+var _a={display:"",visibility:"hidden"};
+if(!this._explicitDDWidth){
+_a.width="";
+}
+if(!this._explicitDDHeight){
+_a.height="";
+}
+dojo.style(_8,_a);
+var mb=dojo.marginBox(_8);
+var _b=(this.maxHeight&&mb.h>this.maxHeight);
+dojo.style(_8,{overflowX:"hidden",overflowY:_b?"auto":"hidden"});
+if(_b){
+mb.h=this.maxHeight;
+if("w" in mb){
+mb.w+=16;
+}
+}else{
+delete mb.h;
+}
+delete mb.t;
+delete mb.l;
+if(this.forceWidth){
+mb.w=this.domNode.offsetWidth;
+}else{
+if(this.autoWidth){
+mb.w=Math.max(mb.w,this.domNode.offsetWidth);
+}else{
+delete mb.w;
+}
+}
+if(dojo.isFunction(_7.resize)){
+_7.resize(mb);
+}else{
+dojo.marginBox(_8,mb);
+}
+}
+var _c=dijit.popup.open({parent:this,popup:_7,around:this._aroundNode,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){
+_9.closeDropDown(true);
+},onCancel:function(){
+_9.closeDropDown(true);
+},onClose:function(){
+dojo.attr(_9._popupStateNode,"popupActive",false);
+dojo.removeClass(_9._popupStateNode,"dijitHasDropDownOpen");
+_9._opened=false;
+_9.state="";
+}});
+dojo.attr(this._popupStateNode,"popupActive","true");
+dojo.addClass(_9._popupStateNode,"dijitHasDropDownOpen");
+this._opened=true;
+this.state="Opened";
+return _c;
+},closeDropDown:function(_d){
+if(this._opened){
+if(_d){
+this.focus();
+}
+dijit.popup.close(this.dropDown);
+this._opened=false;
+this.state="";
+}
+}});
+}
Index: trunk/web/dojo/dijit/form/HorizontalRuleLabels.js
===================================================================
--- trunk/web/dojo/dijit/form/HorizontalRuleLabels.js	(revision 0)
+++ trunk/web/dojo/dijit/form/HorizontalRuleLabels.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.HorizontalRuleLabels"]){
+dojo._hasResource["dijit.form.HorizontalRuleLabels"]=true;
+dojo.provide("dijit.form.HorizontalRuleLabels");
+dojo.require("dijit.form.HorizontalRule");
+dojo.declare("dijit.form.HorizontalRuleLabels",dijit.form.HorizontalRule,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerH dijitRuleLabelsContainer dijitRuleLabelsContainerH\"></div>",labelStyle:"",labels:[],numericMargin:0,minimum:0,maximum:1,constraints:{pattern:"#%"},_positionPrefix:"<div class=\"dijitRuleLabelContainer dijitRuleLabelContainerH\" style=\"left:",_labelPrefix:"\"><div class=\"dijitRuleLabel dijitRuleLabelH\">",_suffix:"</div></div>",_calcPosition:function(_1){
+return _1;
+},_genHTML:function(_2,_3){
+return this._positionPrefix+this._calcPosition(_2)+this._positionSuffix+this.labelStyle+this._labelPrefix+this.labels[_3]+this._suffix;
+},getLabels:function(){
+var _4=this.labels;
+if(!_4.length){
+_4=dojo.query("> li",this.srcNodeRef).map(function(_5){
+return String(_5.innerHTML);
+});
+}
+this.srcNodeRef.innerHTML="";
+if(!_4.length&&this.count>1){
+var _6=this.minimum;
+var _7=(this.maximum-_6)/(this.count-1);
+for(var i=0;i<this.count;i++){
+_4.push((i<this.numericMargin||i>=(this.count-this.numericMargin))?"":dojo.number.format(_6,this.constraints));
+_6+=_7;
+}
+}
+return _4;
+},postMixInProperties:function(){
+this.inherited(arguments);
+this.labels=this.getLabels();
+this.count=this.labels.length;
+}});
+}
Index: trunk/web/dojo/dijit/form/_FormSelectWidget.js
===================================================================
--- trunk/web/dojo/dijit/form/_FormSelectWidget.js	(revision 0)
+++ trunk/web/dojo/dijit/form/_FormSelectWidget.js	(revision 9)
@@ -0,0 +1,307 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._FormSelectWidget"]){
+dojo._hasResource["dijit.form._FormSelectWidget"]=true;
+dojo.provide("dijit.form._FormSelectWidget");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dojo.data.util.sorter");
+dojo.declare("dijit.form._FormSelectWidget",dijit.form._FormValueWidget,{multiple:false,options:null,store:null,query:null,queryOptions:null,onFetch:null,sortByLabel:true,loadChildrenOnOpen:false,getOptions:function(_1){
+var _2=_1,_3=this.options||[],l=_3.length;
+if(_2===undefined){
+return _3;
+}
+if(dojo.isArray(_2)){
+return dojo.map(_2,"return this.getOptions(item);",this);
+}
+if(dojo.isObject(_1)){
+if(!dojo.some(this.options,function(o,_4){
+if(o===_2||(o.value&&o.value===_2.value)){
+_2=_4;
+return true;
+}
+return false;
+})){
+_2=-1;
+}
+}
+if(typeof _2=="string"){
+for(var i=0;i<l;i++){
+if(_3[i].value===_2){
+_2=i;
+break;
+}
+}
+}
+if(typeof _2=="number"&&_2>=0&&_2<l){
+return this.options[_2];
+}
+return null;
+},addOption:function(_5){
+if(!dojo.isArray(_5)){
+_5=[_5];
+}
+dojo.forEach(_5,function(i){
+if(i&&dojo.isObject(i)){
+this.options.push(i);
+}
+},this);
+this._loadChildren();
+},removeOption:function(_6){
+if(!dojo.isArray(_6)){
+_6=[_6];
+}
+var _7=this.getOptions(_6);
+dojo.forEach(_7,function(i){
+if(i){
+this.options=dojo.filter(this.options,function(_8,_9){
+return (_8.value!==i.value);
+});
+this._removeOptionItem(i);
+}
+},this);
+this._loadChildren();
+},updateOption:function(_a){
+if(!dojo.isArray(_a)){
+_a=[_a];
+}
+dojo.forEach(_a,function(i){
+var _b=this.getOptions(i),k;
+if(_b){
+for(k in i){
+_b[k]=i[k];
+}
+}
+},this);
+this._loadChildren();
+},setStore:function(_c,_d,_e){
+var _f=this.store;
+_e=_e||{};
+if(_f!==_c){
+dojo.forEach(this._notifyConnections||[],dojo.disconnect);
+delete this._notifyConnections;
+if(_c&&_c.getFeatures()["dojo.data.api.Notification"]){
+this._notifyConnections=[dojo.connect(_c,"onNew",this,"_onNewItem"),dojo.connect(_c,"onDelete",this,"_onDeleteItem"),dojo.connect(_c,"onSet",this,"_onSetItem")];
+}
+this.store=_c;
+}
+this._onChangeActive=false;
+if(this.options&&this.options.length){
+this.removeOption(this.options);
+}
+if(_c){
+var cb=function(_10){
+if(this.sortByLabel&&!_e.sort&&_10.length){
+_10.sort(dojo.data.util.sorter.createSortFunction([{attribute:_c.getLabelAttributes(_10[0])[0]}],_c));
+}
+if(_e.onFetch){
+_10=_e.onFetch(_10);
+}
+dojo.forEach(_10,function(i){
+this._addOptionForItem(i);
+},this);
+this._loadingStore=false;
+this.set("value",(("_pendingValue" in this)?this._pendingValue:_d));
+delete this._pendingValue;
+if(!this.loadChildrenOnOpen){
+this._loadChildren();
+}else{
+this._pseudoLoadChildren(_10);
+}
+this._fetchedWith=_11;
+this._lastValueReported=this.multiple?[]:null;
+this._onChangeActive=true;
+this.onSetStore();
+this._handleOnChange(this.value);
+};
+var _11=dojo.mixin({onComplete:cb,scope:this},_e);
+this._loadingStore=true;
+_c.fetch(_11);
+}else{
+delete this._fetchedWith;
+}
+return _f;
+},_setValueAttr:function(_12,_13){
+if(this._loadingStore){
+this._pendingValue=_12;
+return;
+}
+var _14=this.getOptions()||[];
+if(!dojo.isArray(_12)){
+_12=[_12];
+}
+dojo.forEach(_12,function(i,idx){
+if(!dojo.isObject(i)){
+i=i+"";
+}
+if(typeof i==="string"){
+_12[idx]=dojo.filter(_14,function(_15){
+return _15.value===i;
+})[0]||{value:"",label:""};
+}
+},this);
+_12=dojo.filter(_12,function(i){
+return i&&i.value;
+});
+if(!this.multiple&&(!_12[0]||!_12[0].value)&&_14.length){
+_12[0]=_14[0];
+}
+dojo.forEach(_14,function(i){
+i.selected=dojo.some(_12,function(v){
+return v.value===i.value;
+});
+});
+var val=dojo.map(_12,function(i){
+return i.value;
+}),_16=dojo.map(_12,function(i){
+return i.label;
+});
+this.value=this.multiple?val:val[0];
+this._setDisplay(this.multiple?_16:_16[0]);
+this._updateSelection();
+this._handleOnChange(this.value,_13);
+},_getDisplayedValueAttr:function(){
+var val=this.get("value");
+if(!dojo.isArray(val)){
+val=[val];
+}
+var ret=dojo.map(this.getOptions(val),function(v){
+if(v&&"label" in v){
+return v.label;
+}else{
+if(v){
+return v.value;
+}
+}
+return null;
+},this);
+return this.multiple?ret:ret[0];
+},_getValueDeprecated:false,getValue:function(){
+return this._lastValue;
+},undo:function(){
+this._setValueAttr(this._lastValueReported,false);
+},_loadChildren:function(){
+if(this._loadingStore){
+return;
+}
+dojo.forEach(this._getChildren(),function(_17){
+_17.destroyRecursive();
+});
+dojo.forEach(this.options,this._addOptionItem,this);
+this._updateSelection();
+},_updateSelection:function(){
+this.value=this._getValueFromOpts();
+var val=this.value;
+if(!dojo.isArray(val)){
+val=[val];
+}
+if(val&&val[0]){
+dojo.forEach(this._getChildren(),function(_18){
+var _19=dojo.some(val,function(v){
+return _18.option&&(v===_18.option.value);
+});
+dojo.toggleClass(_18.domNode,this.baseClass+"SelectedOption",_19);
+dijit.setWaiState(_18.domNode,"selected",_19);
+},this);
+}
+this._handleOnChange(this.value);
+},_getValueFromOpts:function(){
+var _1a=this.getOptions()||[];
+if(!this.multiple&&_1a.length){
+var opt=dojo.filter(_1a,function(i){
+return i.selected;
+})[0];
+if(opt&&opt.value){
+return opt.value;
+}else{
+_1a[0].selected=true;
+return _1a[0].value;
+}
+}else{
+if(this.multiple){
+return dojo.map(dojo.filter(_1a,function(i){
+return i.selected;
+}),function(i){
+return i.value;
+})||[];
+}
+}
+return "";
+},_onNewItem:function(_1b,_1c){
+if(!_1c||!_1c.parent){
+this._addOptionForItem(_1b);
+}
+},_onDeleteItem:function(_1d){
+var _1e=this.store;
+this.removeOption(_1e.getIdentity(_1d));
+},_onSetItem:function(_1f){
+this.updateOption(this._getOptionObjForItem(_1f));
+},_getOptionObjForItem:function(_20){
+var _21=this.store,_22=_21.getLabel(_20),_23=(_22?_21.getIdentity(_20):null);
+return {value:_23,label:_22,item:_20};
+},_addOptionForItem:function(_24){
+var _25=this.store;
+if(!_25.isItemLoaded(_24)){
+_25.loadItem({item:_24,onComplete:function(i){
+this._addOptionForItem(_24);
+},scope:this});
+return;
+}
+var _26=this._getOptionObjForItem(_24);
+this.addOption(_26);
+},constructor:function(_27){
+this._oValue=(_27||{}).value||null;
+},_fillContent:function(){
+var _28=this.options;
+if(!_28){
+_28=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(_29){
+if(_29.getAttribute("type")==="separator"){
+return {value:"",label:"",selected:false,disabled:false};
+}
+return {value:_29.getAttribute("value"),label:String(_29.innerHTML),selected:_29.getAttribute("selected")||false,disabled:_29.getAttribute("disabled")||false};
+},this):[];
+}
+if(!this.value){
+this.value=this._getValueFromOpts();
+}else{
+if(this.multiple&&typeof this.value=="string"){
+this.value=this.value.split(",");
+}
+}
+},postCreate:function(){
+dojo.setSelectable(this.focusNode,false);
+this.inherited(arguments);
+this.connect(this,"onChange","_updateSelection");
+this.connect(this,"startup","_loadChildren");
+this._setValueAttr(this.value,null);
+},startup:function(){
+this.inherited(arguments);
+var _2a=this.store,_2b={};
+dojo.forEach(["query","queryOptions","onFetch"],function(i){
+if(this[i]){
+_2b[i]=this[i];
+}
+delete this[i];
+},this);
+if(_2a&&_2a.getFeatures()["dojo.data.api.Identity"]){
+this.store=null;
+this.setStore(_2a,this._oValue,_2b);
+}
+},destroy:function(){
+dojo.forEach(this._notifyConnections||[],dojo.disconnect);
+this.inherited(arguments);
+},_addOptionItem:function(_2c){
+},_removeOptionItem:function(_2d){
+},_setDisplay:function(_2e){
+},_getChildren:function(){
+return [];
+},_getSelectedOptionsAttr:function(){
+return this.getOptions(this.get("value"));
+},_pseudoLoadChildren:function(_2f){
+},onSetStore:function(){
+}});
+}
Index: trunk/web/dojo/dijit/form/_FormMixin.js
===================================================================
--- trunk/web/dojo/dijit/form/_FormMixin.js	(revision 0)
+++ trunk/web/dojo/dijit/form/_FormMixin.js	(revision 9)
@@ -0,0 +1,158 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._FormMixin"]){
+dojo._hasResource["dijit.form._FormMixin"]=true;
+dojo.provide("dijit.form._FormMixin");
+dojo.require("dojo.window");
+dojo.declare("dijit.form._FormMixin",null,{reset:function(){
+dojo.forEach(this.getDescendants(),function(_1){
+if(_1.reset){
+_1.reset();
+}
+});
+},validate:function(){
+var _2=false;
+return dojo.every(dojo.map(this.getDescendants(),function(_3){
+_3._hasBeenBlurred=true;
+var _4=_3.disabled||!_3.validate||_3.validate();
+if(!_4&&!_2){
+dojo.window.scrollIntoView(_3.containerNode||_3.domNode);
+_3.focus();
+_2=true;
+}
+return _4;
+}),function(_5){
+return _5;
+});
+},setValues:function(_6){
+dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.","","2.0");
+return this.set("value",_6);
+},_setValueAttr:function(_7){
+var _8={};
+dojo.forEach(this.getDescendants(),function(_9){
+if(!_9.name){
+return;
+}
+var _a=_8[_9.name]||(_8[_9.name]=[]);
+_a.push(_9);
+});
+for(var _b in _8){
+if(!_8.hasOwnProperty(_b)){
+continue;
+}
+var _c=_8[_b],_d=dojo.getObject(_b,false,_7);
+if(_d===undefined){
+continue;
+}
+if(!dojo.isArray(_d)){
+_d=[_d];
+}
+if(typeof _c[0].checked=="boolean"){
+dojo.forEach(_c,function(w,i){
+w.set("value",dojo.indexOf(_d,w.value)!=-1);
+});
+}else{
+if(_c[0].multiple){
+_c[0].set("value",_d);
+}else{
+dojo.forEach(_c,function(w,i){
+w.set("value",_d[i]);
+});
+}
+}
+}
+},getValues:function(){
+dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");
+return this.get("value");
+},_getValueAttr:function(){
+var _e={};
+dojo.forEach(this.getDescendants(),function(_f){
+var _10=_f.name;
+if(!_10||_f.disabled){
+return;
+}
+var _11=_f.get("value");
+if(typeof _f.checked=="boolean"){
+if(/Radio/.test(_f.declaredClass)){
+if(_11!==false){
+dojo.setObject(_10,_11,_e);
+}else{
+_11=dojo.getObject(_10,false,_e);
+if(_11===undefined){
+dojo.setObject(_10,null,_e);
+}
+}
+}else{
+var ary=dojo.getObject(_10,false,_e);
+if(!ary){
+ary=[];
+dojo.setObject(_10,ary,_e);
+}
+if(_11!==false){
+ary.push(_11);
+}
+}
+}else{
+var _12=dojo.getObject(_10,false,_e);
+if(typeof _12!="undefined"){
+if(dojo.isArray(_12)){
+_12.push(_11);
+}else{
+dojo.setObject(_10,[_12,_11],_e);
+}
+}else{
+dojo.setObject(_10,_11,_e);
+}
+}
+});
+return _e;
+},isValid:function(){
+this._invalidWidgets=dojo.filter(this.getDescendants(),function(_13){
+return !_13.disabled&&_13.isValid&&!_13.isValid();
+});
+return !this._invalidWidgets.length;
+},onValidStateChange:function(_14){
+},_widgetChange:function(_15){
+var _16=this._lastValidState;
+if(!_15||this._lastValidState===undefined){
+_16=this.isValid();
+if(this._lastValidState===undefined){
+this._lastValidState=_16;
+}
+}else{
+if(_15.isValid){
+this._invalidWidgets=dojo.filter(this._invalidWidgets||[],function(w){
+return (w!=_15);
+},this);
+if(!_15.isValid()&&!_15.get("disabled")){
+this._invalidWidgets.push(_15);
+}
+_16=(this._invalidWidgets.length===0);
+}
+}
+if(_16!==this._lastValidState){
+this._lastValidState=_16;
+this.onValidStateChange(_16);
+}
+},connectChildren:function(){
+dojo.forEach(this._changeConnections,dojo.hitch(this,"disconnect"));
+var _17=this;
+var _18=(this._changeConnections=[]);
+dojo.forEach(dojo.filter(this.getDescendants(),function(_19){
+return _19.validate;
+}),function(_1a){
+_18.push(_17.connect(_1a,"validate",dojo.hitch(_17,"_widgetChange",_1a)));
+_18.push(_17.connect(_1a,"_setDisabledAttr",dojo.hitch(_17,"_widgetChange",_1a)));
+});
+this._widgetChange(null);
+},startup:function(){
+this.inherited(arguments);
+this._changeConnections=[];
+this.connectChildren();
+}});
+}
Index: trunk/web/dojo/dijit/form/_DateTimeTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/_DateTimeTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/_DateTimeTextBox.js	(revision 9)
@@ -0,0 +1,148 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._DateTimeTextBox"]){
+dojo._hasResource["dijit.form._DateTimeTextBox"]=true;
+dojo.provide("dijit.form._DateTimeTextBox");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+dojo.require("dojo.date.stamp");
+dojo.require("dijit.form.ValidationTextBox");
+new Date("X");
+dojo.declare("dijit.form._DateTimeTextBox",dijit.form.RangeBoundTextBox,{regExpGen:dojo.date.locale.regexp,datePackage:"dojo.date",compare:dojo.date.compare,format:function(_1,_2){
+if(!_1){
+return "";
+}
+return this.dateLocaleModule.format(_1,_2);
+},parse:function(_3,_4){
+return this.dateLocaleModule.parse(_3,_4)||(this._isEmpty(_3)?null:undefined);
+},serialize:function(_5,_6){
+if(_5.toGregorian){
+_5=_5.toGregorian();
+}
+return dojo.date.stamp.toISOString(_5,_6);
+},value:new Date(""),_blankValue:null,popupClass:"",_selector:"",constructor:function(_7){
+var _8=_7.datePackage?_7.datePackage+".Date":"Date";
+this.dateClassObj=dojo.getObject(_8,false);
+this.value=new this.dateClassObj("");
+this.datePackage=_7.datePackage||this.datePackage;
+this.dateLocaleModule=dojo.getObject(this.datePackage+".locale",false);
+this.regExpGen=this.dateLocaleModule.regexp;
+},_setConstraintsAttr:function(_9){
+_9.selector=this._selector;
+_9.fullYear=true;
+var _a=dojo.date.stamp.fromISOString;
+if(typeof _9.min=="string"){
+_9.min=_a(_9.min);
+}
+if(typeof _9.max=="string"){
+_9.max=_a(_9.max);
+}
+this.inherited(arguments,[_9]);
+},_onFocus:function(_b){
+this._open();
+this.inherited(arguments);
+},_setValueAttr:function(_c,_d,_e){
+if(_c!==undefined){
+if(!_c||_c.toString()==dijit.form._DateTimeTextBox.prototype.value.toString()){
+_c=null;
+}
+if(_c instanceof Date&&!(this.dateClassObj instanceof Date)){
+_c=new this.dateClassObj(_c);
+}
+}
+this.inherited(arguments,[_c,_d,_e]);
+if(this._picker){
+if(!_c){
+_c=new this.dateClassObj();
+}
+this._picker.set("value",_c);
+}
+},_open:function(){
+if(this.disabled||this.readOnly||!this.popupClass){
+return;
+}
+var _f=this;
+if(!this._picker){
+var _10=dojo.getObject(this.popupClass,false);
+this._picker=new _10({onValueSelected:function(_11){
+if(_f._tabbingAway){
+delete _f._tabbingAway;
+}else{
+_f.focus();
+}
+setTimeout(dojo.hitch(_f,"_close"),1);
+dijit.form._DateTimeTextBox.superclass._setValueAttr.call(_f,_11,true);
+},id:this.id+"_popup",dir:_f.dir,lang:_f.lang,value:this.get("value")||new this.dateClassObj(),constraints:_f.constraints,datePackage:_f.datePackage,isDisabledDate:function(_12){
+var _13=dojo.date.compare;
+var _14=_f.constraints;
+return _14&&((_14.min&&_13(_14.min,_12,_f._selector)>0)||(_14.max&&_13(_14.max,_12,_f._selector)<0));
+}});
+}
+if(!this._opened){
+dijit.popup.open({parent:this,popup:this._picker,orient:{"BL":"TL","TL":"BL"},around:this.domNode,onCancel:dojo.hitch(this,this._close),onClose:function(){
+_f._opened=false;
+}});
+this._opened=true;
+}
+dojo.marginBox(this._picker.domNode,{w:this.domNode.offsetWidth});
+},_close:function(){
+if(this._opened){
+dijit.popup.close(this._picker);
+this._opened=false;
+}
+},_onBlur:function(){
+this._close();
+if(this._picker){
+this._picker.destroy();
+delete this._picker;
+}
+this.inherited(arguments);
+},_getDisplayedValueAttr:function(){
+return this.textbox.value;
+},_setDisplayedValueAttr:function(_15,_16){
+this._setValueAttr(this.parse(_15,this.constraints),_16,_15);
+},destroy:function(){
+if(this._picker){
+this._picker.destroy();
+delete this._picker;
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.focusNode,"onkeypress",this._onKeyPress);
+this.connect(this.focusNode,"onclick",this._open);
+},_onKeyPress:function(e){
+var p=this._picker,dk=dojo.keys;
+if(p&&this._opened&&p.handleKey){
+if(p.handleKey(e)===false){
+return;
+}
+}
+if(this._opened&&e.charOrCode==dk.ESCAPE&&!(e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)){
+this._close();
+dojo.stopEvent(e);
+}else{
+if(!this._opened&&e.charOrCode==dk.DOWN_ARROW){
+this._open();
+dojo.stopEvent(e);
+}else{
+if(e.charOrCode===dk.TAB){
+this._tabbingAway=true;
+}else{
+if(this._opened&&(e.keyChar||e.charOrCode===dk.BACKSPACE||e.charOrCode==dk.DELETE)){
+setTimeout(dojo.hitch(this,function(){
+if(this._picker&&this._opened){
+dijit.placeOnScreenAroundElement(p.domNode.parentNode,this.domNode,{"BL":"TL","TL":"BL"},p.orient?dojo.hitch(p,"orient"):null);
+}
+}),1);
+}
+}
+}
+}
+}});
+}
Index: trunk/web/dojo/dijit/form/Button.js
===================================================================
--- trunk/web/dojo/dijit/form/Button.js	(revision 0)
+++ trunk/web/dojo/dijit/form/Button.js	(revision 9)
@@ -0,0 +1,127 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.Button"]){
+dojo._hasResource["dijit.form.Button"]=true;
+dojo.provide("dijit.form.Button");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit._Container");
+dojo.require("dijit._HasDropDown");
+dojo.declare("dijit.form.Button",dijit.form._FormWidget,{label:"",showLabel:true,iconClass:"",type:"button",baseClass:"dijitButton",templateString:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">&#x25CF;</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode",iconClass:{node:"iconNode",type:"class"}}),_onClick:function(e){
+if(this.disabled){
+return false;
+}
+this._clicked();
+return this.onClick(e);
+},_onButtonClick:function(e){
+if(this._onClick(e)===false){
+e.preventDefault();
+}else{
+if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){
+for(var _1=this.domNode;_1.parentNode;_1=_1.parentNode){
+var _2=dijit.byNode(_1);
+if(_2&&typeof _2._onSubmit=="function"){
+_2._onSubmit(e);
+break;
+}
+}
+}else{
+if(this.valueNode){
+this.valueNode.click();
+e.preventDefault();
+}
+}
+}
+},_fillContent:function(_3){
+if(_3&&(!this.params||!("label" in this.params))){
+this.set("label",_3.innerHTML);
+}
+},postCreate:function(){
+dojo.setSelectable(this.focusNode,false);
+this.inherited(arguments);
+},_setShowLabelAttr:function(_4){
+if(this.containerNode){
+dojo.toggleClass(this.containerNode,"dijitDisplayNone",!_4);
+}
+this.showLabel=_4;
+},onClick:function(e){
+return true;
+},_clicked:function(e){
+},setLabel:function(_5){
+dojo.deprecated("dijit.form.Button.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");
+this.set("label",_5);
+},_setLabelAttr:function(_6){
+this.containerNode.innerHTML=this.label=_6;
+if(this.showLabel==false&&!this.params.title){
+this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");
+}
+}});
+dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">&#9660;</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){
+if(this.srcNodeRef){
+var _7=dojo.query("*",this.srcNodeRef);
+dijit.form.DropDownButton.superclass._fillContent.call(this,_7[0]);
+this.dropDownContainer=this.srcNodeRef;
+}
+},startup:function(){
+if(this._started){
+return;
+}
+if(!this.dropDown){
+var _8=dojo.query("[widgetId]",this.dropDownContainer)[0];
+this.dropDown=dijit.byNode(_8);
+delete this.dropDownContainer;
+}
+dijit.popup.moveOffScreen(this.dropDown.domNode);
+this.inherited(arguments);
+},isLoaded:function(){
+var _9=this.dropDown;
+return (!_9.href||_9.isLoaded);
+},loadDropDown:function(){
+var _a=this.dropDown;
+if(!_a){
+return;
+}
+if(!this.isLoaded()){
+var _b=dojo.connect(_a,"onLoad",this,function(){
+dojo.disconnect(_b);
+this.openDropDown();
+});
+_a.refresh();
+}else{
+this.openDropDown();
+}
+},isFocusable:function(){
+return this.inherited(arguments)&&!this._mouseDown;
+}});
+dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(_c){
+if(_c.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){
+dijit.focus(this._popupStateNode);
+dojo.stopEvent(_c);
+}
+},_onArrowKeyPress:function(_d){
+if(_d.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){
+dijit.focus(this.titleNode);
+dojo.stopEvent(_d);
+}
+},focus:function(_e){
+dijit.focus(_e=="start"?this.titleNode:this._popupStateNode);
+}});
+dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(_f){
+this.set("checked",!this.checked);
+},_setCheckedAttr:function(_10,_11){
+this.checked=_10;
+dojo.attr(this.focusNode||this.domNode,"checked",_10);
+dijit.setWaiState(this.focusNode||this.domNode,"pressed",_10);
+this._handleOnChange(_10,_11);
+},setChecked:function(_12){
+dojo.deprecated("setChecked("+_12+") is deprecated. Use set('checked',"+_12+") instead.","","2.0");
+this.set("checked",_12);
+},reset:function(){
+this._hasBeenBlurred=false;
+this.set("checked",this.params.checked||false);
+}});
+}
Index: trunk/web/dojo/dijit/form/VerticalSlider.js
===================================================================
--- trunk/web/dojo/dijit/form/VerticalSlider.js	(revision 0)
+++ trunk/web/dojo/dijit/form/VerticalSlider.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.VerticalSlider"]){
+dojo._hasResource["dijit.form.VerticalSlider"]=true;
+dojo.provide("dijit.form.VerticalSlider");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.declare("dijit.form.VerticalSlider",dijit.form.HorizontalSlider,{templateString:dojo.cache("dijit.form","templates/VerticalSlider.html","<table class=\"dijit dijitReset dijitSlider dijitSliderV\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderIncrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><center class=\"dijitReset dijitSliderBarContainerV\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"><!--#5629--></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableV\" style=\"vertical-align:top;\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleV\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderDecrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></table>\n"),_mousePixelCoord:"pageY",_pixelCount:"h",_startingPixelCoord:"y",_startingPixelCount:"t",_handleOffsetCoord:"top",_progressPixelSize:"height",_descending:true,_isReversed:function(){
+return this._descending;
+}});
+}
Index: trunk/web/dojo/dijit/form/ToggleButton.js
===================================================================
--- trunk/web/dojo/dijit/form/ToggleButton.js	(revision 0)
+++ trunk/web/dojo/dijit/form/ToggleButton.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.ToggleButton"]){
+dojo._hasResource["dijit.form.ToggleButton"]=true;
+dojo.provide("dijit.form.ToggleButton");
+dojo.require("dijit.form.Button");
+}
Index: trunk/web/dojo/dijit/form/Select.js
===================================================================
--- trunk/web/dojo/dijit/form/Select.js	(revision 0)
+++ trunk/web/dojo/dijit/form/Select.js	(revision 9)
@@ -0,0 +1,140 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.Select"]){
+dojo._hasResource["dijit.form.Select"]=true;
+dojo.provide("dijit.form.Select");
+dojo.require("dijit.form._FormSelectWidget");
+dojo.require("dijit._HasDropDown");
+dojo.require("dijit.Menu");
+dojo.require("dijit.Tooltip");
+dojo.requireLocalization("dijit.form","validate",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){
+this.inherited(arguments);
+var o=(this.menuTableNode=this.domNode);
+var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));
+if(o.parentNode){
+o.parentNode.replaceChild(n,o);
+}
+dojo.removeClass(o,"dijitMenuTable");
+n.className=o.className+" dijitSelectMenu";
+o.className="dijitReset dijitMenuTable";
+dijit.setWaiRole(o,"listbox");
+dijit.setWaiRole(n,"presentation");
+n.appendChild(o);
+},resize:function(mb){
+if(mb){
+dojo.marginBox(this.domNode,mb);
+if("w" in mb){
+this.menuTableNode.style.width="100%";
+}
+}
+}});
+dojo.declare("dijit.form.Select",[dijit.form._FormSelectWidget,dijit._HasDropDown],{baseClass:"dijitSelect",templateString:dojo.cache("dijit.form","templates/Select.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"  dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">&#9660;</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),required:false,state:"",tooltipPosition:[],emptyLabel:"",_isLoaded:false,_childrenLoaded:false,_fillContent:function(){
+this.inherited(arguments);
+if(this.options.length&&!this.value&&this.srcNodeRef){
+var si=this.srcNodeRef.selectedIndex;
+this.value=this.options[si!=-1?si:0].value;
+}
+this.dropDown=new dijit.form._SelectMenu({id:this.id+"_menu"});
+dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");
+},_getMenuItemForOption:function(_1){
+if(!_1.value){
+return new dijit.MenuSeparator();
+}else{
+var _2=dojo.hitch(this,"_setValueAttr",_1);
+var _3=new dijit.MenuItem({option:_1,label:_1.label,onClick:_2,disabled:_1.disabled||false});
+dijit.setWaiRole(_3.focusNode,"listitem");
+return _3;
+}
+},_addOptionItem:function(_4){
+if(this.dropDown){
+this.dropDown.addChild(this._getMenuItemForOption(_4));
+}
+},_getChildren:function(){
+if(!this.dropDown){
+return [];
+}
+return this.dropDown.getChildren();
+},_loadChildren:function(_5){
+if(_5===true){
+if(this.dropDown){
+delete this.dropDown.focusedChild;
+}
+if(this.options.length){
+this.inherited(arguments);
+}else{
+dojo.forEach(this._getChildren(),function(_6){
+_6.destroyRecursive();
+});
+var _7=new dijit.MenuItem({label:"&nbsp;"});
+this.dropDown.addChild(_7);
+}
+}else{
+this._updateSelection();
+}
+var _8=this.options.length;
+this._isLoaded=false;
+this._childrenLoaded=true;
+if(!this._loadingStore){
+this._setValueAttr(this.value);
+}
+},_setValueAttr:function(_9){
+this.inherited(arguments);
+dojo.attr(this.valueNode,"value",this.get("value"));
+},_setDisplay:function(_a){
+this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_a||this.emptyLabel||"&nbsp;")+"</span>";
+dijit.setWaiState(this.focusNode,"valuetext",(_a||this.emptyLabel||"&nbsp;"));
+},validate:function(_b){
+var _c=this.isValid(_b);
+this.state=_c?"":"Error";
+this._setStateClass();
+dijit.setWaiState(this.focusNode,"invalid",_c?"false":"true");
+var _d=_c?"":this._missingMsg;
+if(this._message!==_d){
+this._message=_d;
+dijit.hideTooltip(this.domNode);
+if(_d){
+dijit.showTooltip(_d,this.domNode,this.tooltipPosition,!this.isLeftToRight());
+}
+}
+return _c;
+},isValid:function(_e){
+return (!this.required||!(/^\s*$/.test(this.value)));
+},reset:function(){
+this.inherited(arguments);
+dijit.hideTooltip(this.domNode);
+this.state="";
+this._setStateClass();
+delete this._message;
+},postMixInProperties:function(){
+this.inherited(arguments);
+this._missingMsg=dojo.i18n.getLocalization("dijit.form","validate",this.lang).missingMessage;
+},postCreate:function(){
+this.inherited(arguments);
+if(this.tableNode.style.width){
+dojo.addClass(this.domNode,this.baseClass+"FixedWidth");
+}
+},isLoaded:function(){
+return this._isLoaded;
+},loadDropDown:function(_f){
+this._loadChildren(true);
+this._isLoaded=true;
+_f();
+},closeDropDown:function(){
+this.inherited(arguments);
+if(this.dropDown&&this.dropDown.menuTableNode){
+this.dropDown.menuTableNode.style.width="";
+}
+},uninitialize:function(_10){
+if(this.dropDown&&!this.dropDown._destroyed){
+this.dropDown.destroyRecursive(_10);
+delete this.dropDown;
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/form/HorizontalRule.js
===================================================================
--- trunk/web/dojo/dijit/form/HorizontalRule.js	(revision 0)
+++ trunk/web/dojo/dijit/form/HorizontalRule.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.HorizontalRule"]){
+dojo._hasResource["dijit.form.HorizontalRule"]=true;
+dojo.provide("dijit.form.HorizontalRule");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.form.HorizontalRule",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerH\"></div>",count:3,container:"containerNode",ruleStyle:"",_positionPrefix:"<div class=\"dijitRuleMark dijitRuleMarkH\" style=\"left:",_positionSuffix:"%;",_suffix:"\"></div>",_genHTML:function(_1,_2){
+return this._positionPrefix+_1+this._positionSuffix+this.ruleStyle+this._suffix;
+},_isHorizontal:true,postCreate:function(){
+var _3;
+if(this.count==1){
+_3=this._genHTML(50,0);
+}else{
+var i;
+var _4=100/(this.count-1);
+if(!this._isHorizontal||this.isLeftToRight()){
+_3=this._genHTML(0,0);
+for(i=1;i<this.count-1;i++){
+_3+=this._genHTML(_4*i,i);
+}
+_3+=this._genHTML(100,this.count-1);
+}else{
+_3=this._genHTML(100,0);
+for(i=1;i<this.count-1;i++){
+_3+=this._genHTML(100-_4*i,i);
+}
+_3+=this._genHTML(0,this.count-1);
+}
+}
+this.domNode.innerHTML=_3;
+}});
+}
Index: trunk/web/dojo/dijit/form/Slider.js
===================================================================
--- trunk/web/dojo/dijit/form/Slider.js	(revision 0)
+++ trunk/web/dojo/dijit/form/Slider.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.Slider"]){
+dojo._hasResource["dijit.form.Slider"]=true;
+dojo.provide("dijit.form.Slider");
+dojo.deprecated("Call require() for HorizontalSlider / VerticalRule, explicitly rather than 'dijit.form.Slider' itself","","2.0");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.require("dijit.form.VerticalSlider");
+dojo.require("dijit.form.HorizontalRule");
+dojo.require("dijit.form.VerticalRule");
+dojo.require("dijit.form.HorizontalRuleLabels");
+dojo.require("dijit.form.VerticalRuleLabels");
+}
Index: trunk/web/dojo/dijit/form/FilteringSelect.js
===================================================================
--- trunk/web/dojo/dijit/form/FilteringSelect.js	(revision 0)
+++ trunk/web/dojo/dijit/form/FilteringSelect.js	(revision 9)
@@ -0,0 +1,92 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.FilteringSelect"]){
+dojo._hasResource["dijit.form.FilteringSelect"]=true;
+dojo.provide("dijit.form.FilteringSelect");
+dojo.require("dijit.form.ComboBox");
+dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{_isvalid:true,required:true,_lastDisplayedValue:"",isValid:function(){
+return this._isvalid||(!this.required&&this.get("displayedValue")=="");
+},_refreshState:function(){
+if(!this.searchTimer){
+this.inherited(arguments);
+}
+},_callbackSetLabel:function(_1,_2,_3){
+if((_2&&_2.query[this.searchAttr]!=this._lastQuery)||(!_2&&_1.length&&this.store.getIdentity(_1[0])!=this._lastQuery)){
+return;
+}
+if(!_1.length){
+this.valueNode.value="";
+dijit.form.TextBox.superclass._setValueAttr.call(this,"",_3||(_3===undefined&&!this._focused));
+this._isvalid=false;
+this.validate(this._focused);
+this.item=null;
+}else{
+this.set("item",_1[0],_3);
+}
+},_openResultList:function(_4,_5){
+if(_5.query[this.searchAttr]!=this._lastQuery){
+return;
+}
+if(this.item===undefined){
+this._isvalid=_4.length!=0||this._maxOptions!=0;
+this.validate(true);
+}
+dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);
+},_getValueAttr:function(){
+return this.valueNode.value;
+},_getValueField:function(){
+return "value";
+},_setValueAttr:function(_6,_7){
+if(!this._onChangeActive){
+_7=null;
+}
+this._lastQuery=_6;
+if(_6===null||_6===""){
+this._setDisplayedValueAttr("",_7);
+return;
+}
+var _8=this;
+this.store.fetchItemByIdentity({identity:_6,onItem:function(_9){
+_8._callbackSetLabel(_9?[_9]:[],undefined,_7);
+}});
+},_setItemAttr:function(_a,_b,_c){
+this._isvalid=true;
+this.inherited(arguments);
+this.valueNode.value=this.value;
+this._lastDisplayedValue=this.textbox.value;
+},_getDisplayQueryString:function(_d){
+return _d.replace(/([\\\*\?])/g,"\\$1");
+},_setDisplayedValueAttr:function(_e,_f){
+if(!this._created){
+_f=false;
+}
+if(this.store){
+this._hideResultList();
+var _10=dojo.clone(this.query);
+this._lastQuery=_10[this.searchAttr]=this._getDisplayQueryString(_e);
+this.textbox.value=_e;
+this._lastDisplayedValue=_e;
+var _11=this;
+var _12={query:_10,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_13,_14){
+_11._fetchHandle=null;
+dojo.hitch(_11,"_callbackSetLabel")(_13,_14,_f);
+},onError:function(_15){
+_11._fetchHandle=null;
+console.error("dijit.form.FilteringSelect: "+_15);
+dojo.hitch(_11,"_callbackSetLabel")([],undefined,false);
+}};
+dojo.mixin(_12,this.fetchProperties);
+this._fetchHandle=this.store.fetch(_12);
+}
+},postMixInProperties:function(){
+this.inherited(arguments);
+this._isvalid=!this.required;
+},undo:function(){
+this.set("displayedValue",this._lastDisplayedValue);
+}});
+}
Index: trunk/web/dojo/dijit/form/MappedTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/MappedTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/MappedTextBox.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.MappedTextBox"]){
+dojo._hasResource["dijit.form.MappedTextBox"]=true;
+dojo.provide("dijit.form.MappedTextBox");
+dojo.require("dijit.form.ValidationTextBox");
+}
Index: trunk/web/dojo/dijit/form/CheckBox.js
===================================================================
--- trunk/web/dojo/dijit/form/CheckBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/CheckBox.js	(revision 9)
@@ -0,0 +1,76 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.CheckBox"]){
+dojo._hasResource["dijit.form.CheckBox"]=true;
+dojo.provide("dijit.form.CheckBox");
+dojo.require("dijit.form.ToggleButton");
+dojo.declare("dijit.form.CheckBox",dijit.form.ToggleButton,{templateString:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_1){
+this.readOnly=_1;
+dojo.attr(this.focusNode,"readOnly",_1);
+dijit.setWaiState(this.focusNode,"readonly",_1);
+},_setValueAttr:function(_2,_3){
+if(typeof _2=="string"){
+this.value=_2;
+dojo.attr(this.focusNode,"value",_2);
+_2=true;
+}
+if(this._created){
+this.set("checked",_2,_3);
+}
+},_getValueAttr:function(){
+return (this.checked?this.value:false);
+},_setLabelAttr:undefined,postMixInProperties:function(){
+if(this.value==""){
+this.value="on";
+}
+this.checkedAttrSetting=this.checked?"checked":"";
+this.inherited(arguments);
+},_fillContent:function(_4){
+},reset:function(){
+this._hasBeenBlurred=false;
+this.set("checked",this.params.checked||false);
+this.value=this.params.value||"on";
+dojo.attr(this.focusNode,"value",this.value);
+},_onFocus:function(){
+if(this.id){
+dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");
+}
+this.inherited(arguments);
+},_onBlur:function(){
+if(this.id){
+dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");
+}
+this.inherited(arguments);
+},_onClick:function(e){
+if(this.readOnly){
+return false;
+}
+return this.inherited(arguments);
+}});
+dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_5){
+this.inherited(arguments);
+if(!this._created){
+return;
+}
+if(_5){
+var _6=this;
+dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_7){
+if(_7.name==_6.name&&_7!=_6.focusNode&&_7.form==_6.focusNode.form){
+var _8=dijit.getEnclosingWidget(_7);
+if(_8&&_8.checked){
+_8.set("checked",false);
+}
+}
+});
+}
+},_clicked:function(e){
+if(!this.checked){
+this.set("checked",true);
+}
+}});
+}
Index: trunk/web/dojo/dijit/form/SimpleTextarea.js
===================================================================
--- trunk/web/dojo/dijit/form/SimpleTextarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/SimpleTextarea.js	(revision 9)
@@ -0,0 +1,59 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.SimpleTextarea"]){
+dojo._hasResource["dijit.form.SimpleTextarea"]=true;
+dojo.provide("dijit.form.SimpleTextarea");
+dojo.require("dijit.form.TextBox");
+dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextBox dijitTextArea",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{rows:"textbox",cols:"textbox"}),rows:"3",cols:"20",templateString:"<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",postMixInProperties:function(){
+if(!this.value&&this.srcNodeRef){
+this.value=this.srcNodeRef.value;
+}
+this.inherited(arguments);
+},filter:function(_1){
+if(_1){
+_1=_1.replace(/\r/g,"");
+}
+return this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+if(dojo.isIE&&this.cols){
+dojo.addClass(this.textbox,"dijitTextAreaCols");
+}
+},_previousValue:"",_onInput:function(e){
+if(this.maxLength){
+var _2=parseInt(this.maxLength);
+var _3=this.textbox.value.replace(/\r/g,"");
+var _4=_3.length-_2;
+if(_4>0){
+if(e){
+dojo.stopEvent(e);
+}
+var _5=this.textbox;
+if(_5.selectionStart){
+var _6=_5.selectionStart;
+var cr=0;
+if(dojo.isOpera){
+cr=(this.textbox.value.substring(0,_6).match(/\r/g)||[]).length;
+}
+this.textbox.value=_3.substring(0,_6-_4-cr)+_3.substring(_6-cr);
+_5.setSelectionRange(_6-_4,_6-_4);
+}else{
+if(dojo.doc.selection){
+_5.focus();
+var _7=dojo.doc.selection.createRange();
+_7.moveStart("character",-_4);
+_7.text="";
+_7.select();
+}
+}
+}
+this._previousValue=this.textbox.value;
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/form/DropDownButton.js
===================================================================
--- trunk/web/dojo/dijit/form/DropDownButton.js	(revision 0)
+++ trunk/web/dojo/dijit/form/DropDownButton.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.DropDownButton"]){
+dojo._hasResource["dijit.form.DropDownButton"]=true;
+dojo.provide("dijit.form.DropDownButton");
+dojo.require("dijit.form.Button");
+}
Index: trunk/web/dojo/dijit/form/RadioButton.js
===================================================================
--- trunk/web/dojo/dijit/form/RadioButton.js	(revision 0)
+++ trunk/web/dojo/dijit/form/RadioButton.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.RadioButton"]){
+dojo._hasResource["dijit.form.RadioButton"]=true;
+dojo.provide("dijit.form.RadioButton");
+dojo.require("dijit.form.CheckBox");
+}
Index: trunk/web/dojo/dijit/form/MultiSelect.js
===================================================================
--- trunk/web/dojo/dijit/form/MultiSelect.js	(revision 0)
+++ trunk/web/dojo/dijit/form/MultiSelect.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.MultiSelect"]){
+dojo._hasResource["dijit.form.MultiSelect"]=true;
+dojo.provide("dijit.form.MultiSelect");
+dojo.require("dijit.form._FormWidget");
+dojo.declare("dijit.form.MultiSelect",dijit.form._FormValueWidget,{size:7,templateString:"<select multiple='true' ${!nameAttrSetting} dojoAttachPoint='containerNode,focusNode' dojoAttachEvent='onchange: _onChange'></select>",attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{size:"focusNode"}),reset:function(){
+this._hasBeenBlurred=false;
+this._setValueAttr(this._resetValue,true);
+},addSelected:function(_1){
+_1.getSelected().forEach(function(n){
+this.containerNode.appendChild(n);
+this.domNode.scrollTop=this.domNode.offsetHeight;
+var _2=_1.domNode.scrollTop;
+_1.domNode.scrollTop=0;
+_1.domNode.scrollTop=_2;
+},this);
+},getSelected:function(){
+return dojo.query("option",this.containerNode).filter(function(n){
+return n.selected;
+});
+},_getValueAttr:function(){
+return this.getSelected().map(function(n){
+return n.value;
+});
+},multiple:true,_setValueAttr:function(_3){
+dojo.query("option",this.containerNode).forEach(function(n){
+n.selected=(dojo.indexOf(_3,n.value)!=-1);
+});
+},invertSelection:function(_4){
+dojo.query("option",this.containerNode).forEach(function(n){
+n.selected=!n.selected;
+});
+this._handleOnChange(this.get("value"),_4==true);
+},_onChange:function(e){
+this._handleOnChange(this.get("value"),true);
+},resize:function(_5){
+if(_5){
+dojo.marginBox(this.domNode,_5);
+}
+},postCreate:function(){
+this._onChange();
+}});
+}
Index: trunk/web/dojo/dijit/form/ComboButton.js
===================================================================
--- trunk/web/dojo/dijit/form/ComboButton.js	(revision 0)
+++ trunk/web/dojo/dijit/form/ComboButton.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.ComboButton"]){
+dojo._hasResource["dijit.form.ComboButton"]=true;
+dojo.provide("dijit.form.ComboButton");
+dojo.require("dijit.form.Button");
+}
Index: trunk/web/dojo/dijit/form/HorizontalSlider.js
===================================================================
--- trunk/web/dojo/dijit/form/HorizontalSlider.js	(revision 0)
+++ trunk/web/dojo/dijit/form/HorizontalSlider.js	(revision 9)
@@ -0,0 +1,209 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.HorizontalSlider"]){
+dojo._hasResource["dijit.form.HorizontalSlider"]=true;
+dojo.provide("dijit.form.HorizontalSlider");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit._Container");
+dojo.require("dojo.dnd.move");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.number");
+dojo.require("dojo._base.fx");
+dojo.declare("dijit.form.HorizontalSlider",[dijit.form._FormValueWidget,dijit._Container],{templateString:dojo.cache("dijit.form","templates/HorizontalSlider.html","<table class=\"dijit dijitReset dijitSlider dijitSliderH\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"topDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderDecrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><div class=\"dijitReset dijitSliderBarContainerH\" waiRole=\"presentation\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"\n\t\t\t\t\t><div class=\"dijitSliderMoveable dijitSliderMoveableH\"\n\t\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderImageHandle dijitSliderImageHandleH\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderIncrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n"),value:0,showButtons:true,minimum:0,maximum:100,discreteValues:Infinity,pageIncrement:2,clickSelect:true,slideDuration:dijit.defaultDuration,widgetsInTemplate:true,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{id:""}),baseClass:"dijitSlider",cssStateNodes:{incrementButton:"dijitSliderIncrementButton",decrementButton:"dijitSliderDecrementButton",focusNode:"dijitSliderThumb"},_mousePixelCoord:"pageX",_pixelCount:"w",_startingPixelCoord:"x",_startingPixelCount:"l",_handleOffsetCoord:"left",_progressPixelSize:"width",_onKeyUp:function(e){
+if(this.disabled||this.readOnly||e.altKey||e.ctrlKey||e.metaKey){
+return;
+}
+this._setValueAttr(this.value,true);
+},_onKeyPress:function(e){
+if(this.disabled||this.readOnly||e.altKey||e.ctrlKey||e.metaKey){
+return;
+}
+switch(e.charOrCode){
+case dojo.keys.HOME:
+this._setValueAttr(this.minimum,false);
+break;
+case dojo.keys.END:
+this._setValueAttr(this.maximum,false);
+break;
+case ((this._descending||this.isLeftToRight())?dojo.keys.RIGHT_ARROW:dojo.keys.LEFT_ARROW):
+case (this._descending===false?dojo.keys.DOWN_ARROW:dojo.keys.UP_ARROW):
+case (this._descending===false?dojo.keys.PAGE_DOWN:dojo.keys.PAGE_UP):
+this.increment(e);
+break;
+case ((this._descending||this.isLeftToRight())?dojo.keys.LEFT_ARROW:dojo.keys.RIGHT_ARROW):
+case (this._descending===false?dojo.keys.UP_ARROW:dojo.keys.DOWN_ARROW):
+case (this._descending===false?dojo.keys.PAGE_UP:dojo.keys.PAGE_DOWN):
+this.decrement(e);
+break;
+default:
+return;
+}
+dojo.stopEvent(e);
+},_onHandleClick:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.sliderHandle);
+}
+dojo.stopEvent(e);
+},_isReversed:function(){
+return !this.isLeftToRight();
+},_onBarClick:function(e){
+if(this.disabled||this.readOnly||!this.clickSelect){
+return;
+}
+dijit.focus(this.sliderHandle);
+dojo.stopEvent(e);
+var _1=dojo.position(this.sliderBarContainer,true);
+var _2=e[this._mousePixelCoord]-_1[this._startingPixelCoord];
+this._setPixelValue(this._isReversed()?(_1[this._pixelCount]-_2):_2,_1[this._pixelCount],true);
+this._movable.onMouseDown(e);
+},_setPixelValue:function(_3,_4,_5){
+if(this.disabled||this.readOnly){
+return;
+}
+_3=_3<0?0:_4<_3?_4:_3;
+var _6=this.discreteValues;
+if(_6<=1||_6==Infinity){
+_6=_4;
+}
+_6--;
+var _7=_4/_6;
+var _8=Math.round(_3/_7);
+this._setValueAttr((this.maximum-this.minimum)*_8/_6+this.minimum,_5);
+},_setValueAttr:function(_9,_a){
+this.valueNode.value=this.value=_9;
+dijit.setWaiState(this.focusNode,"valuenow",_9);
+this.inherited(arguments);
+var _b=(_9-this.minimum)/(this.maximum-this.minimum);
+var _c=(this._descending===false)?this.remainingBar:this.progressBar;
+var _d=(this._descending===false)?this.progressBar:this.remainingBar;
+if(this._inProgressAnim&&this._inProgressAnim.status!="stopped"){
+this._inProgressAnim.stop(true);
+}
+if(_a&&this.slideDuration>0&&_c.style[this._progressPixelSize]){
+var _e=this;
+var _f={};
+var _10=parseFloat(_c.style[this._progressPixelSize]);
+var _11=this.slideDuration*(_b-_10/100);
+if(_11==0){
+return;
+}
+if(_11<0){
+_11=0-_11;
+}
+_f[this._progressPixelSize]={start:_10,end:_b*100,units:"%"};
+this._inProgressAnim=dojo.animateProperty({node:_c,duration:_11,onAnimate:function(v){
+_d.style[_e._progressPixelSize]=(100-parseFloat(v[_e._progressPixelSize]))+"%";
+},onEnd:function(){
+delete _e._inProgressAnim;
+},properties:_f});
+this._inProgressAnim.play();
+}else{
+_c.style[this._progressPixelSize]=(_b*100)+"%";
+_d.style[this._progressPixelSize]=((1-_b)*100)+"%";
+}
+},_bumpValue:function(_12,_13){
+if(this.disabled||this.readOnly){
+return;
+}
+var s=dojo.getComputedStyle(this.sliderBarContainer);
+var c=dojo._getContentBox(this.sliderBarContainer,s);
+var _14=this.discreteValues;
+if(_14<=1||_14==Infinity){
+_14=c[this._pixelCount];
+}
+_14--;
+var _15=(this.value-this.minimum)*_14/(this.maximum-this.minimum)+_12;
+if(_15<0){
+_15=0;
+}
+if(_15>_14){
+_15=_14;
+}
+_15=_15*(this.maximum-this.minimum)/_14+this.minimum;
+this._setValueAttr(_15,_13);
+},_onClkBumper:function(val){
+if(this.disabled||this.readOnly||!this.clickSelect){
+return;
+}
+this._setValueAttr(val,true);
+},_onClkIncBumper:function(){
+this._onClkBumper(this._descending===false?this.minimum:this.maximum);
+},_onClkDecBumper:function(){
+this._onClkBumper(this._descending===false?this.maximum:this.minimum);
+},decrement:function(e){
+this._bumpValue(e.charOrCode==dojo.keys.PAGE_DOWN?-this.pageIncrement:-1);
+},increment:function(e){
+this._bumpValue(e.charOrCode==dojo.keys.PAGE_UP?this.pageIncrement:1);
+},_mouseWheeled:function(evt){
+dojo.stopEvent(evt);
+var _16=!dojo.isMozilla;
+var _17=evt[(_16?"wheelDelta":"detail")]*(_16?1:-1);
+this._bumpValue(_17<0?-1:1,true);
+},startup:function(){
+if(this._started){
+return;
+}
+dojo.forEach(this.getChildren(),function(_18){
+if(this[_18.container]!=this.containerNode){
+this[_18.container].appendChild(_18.domNode);
+}
+},this);
+this.inherited(arguments);
+},_typematicCallback:function(_19,_1a,e){
+if(_19==-1){
+this._setValueAttr(this.value,true);
+}else{
+this[(_1a==(this._descending?this.incrementButton:this.decrementButton))?"decrement":"increment"](e);
+}
+},postCreate:function(){
+if(this.showButtons){
+this.incrementButton.style.display="";
+this.decrementButton.style.display="";
+this._connects.push(dijit.typematic.addMouseListener(this.decrementButton,this,"_typematicCallback",25,500));
+this._connects.push(dijit.typematic.addMouseListener(this.incrementButton,this,"_typematicCallback",25,500));
+}
+this.connect(this.domNode,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll","_mouseWheeled");
+var _1b=dojo.declare(dijit.form._SliderMover,{widget:this});
+this._movable=new dojo.dnd.Moveable(this.sliderHandle,{mover:_1b});
+var _1c=dojo.query("label[for=\""+this.id+"\"]");
+if(_1c.length){
+_1c[0].id=(this.id+"_label");
+dijit.setWaiState(this.focusNode,"labelledby",_1c[0].id);
+}
+dijit.setWaiState(this.focusNode,"valuemin",this.minimum);
+dijit.setWaiState(this.focusNode,"valuemax",this.maximum);
+this.inherited(arguments);
+this._layoutHackIE7();
+},destroy:function(){
+this._movable.destroy();
+if(this._inProgressAnim&&this._inProgressAnim.status!="stopped"){
+this._inProgressAnim.stop(true);
+}
+this._supportingWidgets=dijit.findWidgets(this.domNode);
+this.inherited(arguments);
+}});
+dojo.declare("dijit.form._SliderMover",dojo.dnd.Mover,{onMouseMove:function(e){
+var _1d=this.widget;
+var _1e=_1d._abspos;
+if(!_1e){
+_1e=_1d._abspos=dojo.position(_1d.sliderBarContainer,true);
+_1d._setPixelValue_=dojo.hitch(_1d,"_setPixelValue");
+_1d._isReversed_=_1d._isReversed();
+}
+var _1f=e[_1d._mousePixelCoord]-_1e[_1d._startingPixelCoord];
+_1d._setPixelValue_(_1d._isReversed_?(_1e[_1d._pixelCount]-_1f):_1f,_1e[_1d._pixelCount],false);
+},destroy:function(e){
+dojo.dnd.Mover.prototype.destroy.apply(this,arguments);
+var _20=this.widget;
+_20._abspos=null;
+_20._setValueAttr(_20.value,true);
+}});
+}
Index: trunk/web/dojo/dijit/form/RangeBoundTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/RangeBoundTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/RangeBoundTextBox.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.RangeBoundTextBox"]){
+dojo._hasResource["dijit.form.RangeBoundTextBox"]=true;
+dojo.provide("dijit.form.RangeBoundTextBox");
+dojo.require("dijit.form.ValidationTextBox");
+}
Index: trunk/web/dojo/dijit/form/_FormWidget.js
===================================================================
--- trunk/web/dojo/dijit/form/_FormWidget.js	(revision 0)
+++ trunk/web/dojo/dijit/form/_FormWidget.js	(revision 9)
@@ -0,0 +1,166 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._FormWidget"]){
+dojo._hasResource["dijit.form._FormWidget"]=true;
+dojo.provide("dijit.form._FormWidget");
+dojo.require("dojo.window");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._CssStateMixin");
+dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{name:"",alt:"",value:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,scrollOnFocus:true,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{value:"focusNode",id:"focusNode",tabIndex:"focusNode",alt:"focusNode",title:"focusNode"}),postMixInProperties:function(){
+this.nameAttrSetting=this.name?("name=\""+this.name.replace(/'/g,"&quot;")+"\""):"";
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.domNode,"onmousedown","_onMouseDown");
+},_setDisabledAttr:function(_1){
+this.disabled=_1;
+dojo.attr(this.focusNode,"disabled",_1);
+if(this.valueNode){
+dojo.attr(this.valueNode,"disabled",_1);
+}
+dijit.setWaiState(this.focusNode,"disabled",_1);
+if(_1){
+this._hovering=false;
+this._active=false;
+var _2="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";
+dojo.forEach(dojo.isArray(_2)?_2:[_2],function(_3){
+var _4=this[_3];
+if(dojo.isWebKit||dijit.hasDefaultTabStop(_4)){
+_4.setAttribute("tabIndex","-1");
+}else{
+_4.removeAttribute("tabIndex");
+}
+},this);
+}else{
+this.focusNode.setAttribute("tabIndex",this.tabIndex);
+}
+},setDisabled:function(_5){
+dojo.deprecated("setDisabled("+_5+") is deprecated. Use set('disabled',"+_5+") instead.","","2.0");
+this.set("disabled",_5);
+},_onFocus:function(e){
+if(this.scrollOnFocus){
+dojo.window.scrollIntoView(this.domNode);
+}
+this.inherited(arguments);
+},isFocusable:function(){
+return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");
+},focus:function(){
+dijit.focus(this.focusNode);
+},compare:function(_6,_7){
+if(typeof _6=="number"&&typeof _7=="number"){
+return (isNaN(_6)&&isNaN(_7))?0:_6-_7;
+}else{
+if(_6>_7){
+return 1;
+}else{
+if(_6<_7){
+return -1;
+}else{
+return 0;
+}
+}
+}
+},onChange:function(_8){
+},_onChangeActive:false,_handleOnChange:function(_9,_a){
+this._lastValue=_9;
+if(this._lastValueReported==undefined&&(_a===null||!this._onChangeActive)){
+this._resetValue=this._lastValueReported=_9;
+}
+if((this.intermediateChanges||_a||_a===undefined)&&((typeof _9!=typeof this._lastValueReported)||this.compare(_9,this._lastValueReported)!=0)){
+this._lastValueReported=_9;
+if(this._onChangeActive){
+if(this._onChangeHandle){
+clearTimeout(this._onChangeHandle);
+}
+this._onChangeHandle=setTimeout(dojo.hitch(this,function(){
+this._onChangeHandle=null;
+this.onChange(_9);
+}),0);
+}
+}
+},create:function(){
+this.inherited(arguments);
+this._onChangeActive=true;
+},destroy:function(){
+if(this._onChangeHandle){
+clearTimeout(this._onChangeHandle);
+this.onChange(this._lastValueReported);
+}
+this.inherited(arguments);
+},setValue:function(_b){
+dojo.deprecated("dijit.form._FormWidget:setValue("+_b+") is deprecated.  Use set('value',"+_b+") instead.","","2.0");
+this.set("value",_b);
+},getValue:function(){
+dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");
+return this.get("value");
+},_onMouseDown:function(e){
+if(!e.ctrlKey&&this.isFocusable()){
+var _c=this.connect(dojo.body(),"onmouseup",function(){
+if(this.isFocusable()){
+this.focus();
+}
+this.disconnect(_c);
+});
+}
+}});
+dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_d){
+this.readOnly=_d;
+dojo.attr(this.focusNode,"readOnly",_d);
+dijit.setWaiState(this.focusNode,"readonly",_d);
+},postCreate:function(){
+this.inherited(arguments);
+if(dojo.isIE){
+this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);
+}
+if(this._resetValue===undefined){
+this._resetValue=this.value;
+}
+},_setValueAttr:function(_e,_f){
+this.value=_e;
+this._handleOnChange(_e,_f);
+},_getValueAttr:function(){
+return this._lastValue;
+},undo:function(){
+this._setValueAttr(this._lastValueReported,false);
+},reset:function(){
+this._hasBeenBlurred=false;
+this._setValueAttr(this._resetValue,true);
+},_onKeyDown:function(e){
+if(e.keyCode==dojo.keys.ESCAPE&&!(e.ctrlKey||e.altKey||e.metaKey)){
+var te;
+if(dojo.isIE){
+e.preventDefault();
+te=document.createEventObject();
+te.keyCode=dojo.keys.ESCAPE;
+te.shiftKey=e.shiftKey;
+e.srcElement.fireEvent("onkeypress",te);
+}
+}
+},_layoutHackIE7:function(){
+if(dojo.isIE==7){
+var _10=this.domNode;
+var _11=_10.parentNode;
+var _12=_10.firstChild||_10;
+var _13=_12.style.filter;
+var _14=this;
+while(_11&&_11.clientHeight==0){
+(function ping(){
+var _15=_14.connect(_11,"onscroll",function(e){
+_14.disconnect(_15);
+_12.style.filter=(new Date()).getMilliseconds();
+setTimeout(function(){
+_12.style.filter=_13;
+},0);
+});
+})();
+_11=_11.parentNode;
+}
+}
+}});
+}
Index: trunk/web/dojo/dijit/form/NumberTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/NumberTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/NumberTextBox.js	(revision 9)
@@ -0,0 +1,112 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.NumberTextBox"]){
+dojo._hasResource["dijit.form.NumberTextBox"]=true;
+dojo.provide("dijit.form.NumberTextBox");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dojo.number");
+dojo.declare("dijit.form.NumberTextBoxMixin",null,{regExpGen:dojo.number.regexp,value:NaN,editOptions:{pattern:"#.######"},_formatter:dojo.number.format,_setConstraintsAttr:function(_1){
+var _2=typeof _1.places=="number"?_1.places:0;
+if(_2){
+_2++;
+}
+if(typeof _1.max!="number"){
+_1.max=9*Math.pow(10,15-_2);
+}
+if(typeof _1.min!="number"){
+_1.min=-9*Math.pow(10,15-_2);
+}
+this.inherited(arguments,[_1]);
+if(this.focusNode&&this.focusNode.value&&!isNaN(this.value)){
+this.set("value",this.value);
+}
+},_onFocus:function(){
+if(this.disabled){
+return;
+}
+var _3=this.get("value");
+if(typeof _3=="number"&&!isNaN(_3)){
+var _4=this.format(_3,this.constraints);
+if(_4!==undefined){
+this.textbox.value=_4;
+}
+}
+this.inherited(arguments);
+},format:function(_5,_6){
+var _7=String(_5);
+if(typeof _5!="number"){
+return _7;
+}
+if(isNaN(_5)){
+return "";
+}
+if(!("rangeCheck" in this&&this.rangeCheck(_5,_6))&&_6.exponent!==false&&/\de[-+]?\d/i.test(_7)){
+return _7;
+}
+if(this.editOptions&&this._focused){
+_6=dojo.mixin({},_6,this.editOptions);
+}
+return this._formatter(_5,_6);
+},parse:dojo.number.parse,_getDisplayedValueAttr:function(){
+var v=this.inherited(arguments);
+return isNaN(v)?this.textbox.value:v;
+},filter:function(_8){
+return (_8===null||_8===""||_8===undefined)?NaN:this.inherited(arguments);
+},serialize:function(_9,_a){
+return (typeof _9!="number"||isNaN(_9))?"":this.inherited(arguments);
+},_setValueAttr:function(_b,_c,_d){
+if(_b!==undefined&&_d===undefined){
+_d=String(_b);
+if(typeof _b=="number"){
+if(isNaN(_b)){
+_d="";
+}else{
+if(("rangeCheck" in this&&this.rangeCheck(_b,this.constraints))||this.constraints.exponent===false||!/\de[-+]?\d/i.test(_d)){
+_d=undefined;
+}
+}
+}else{
+if(!_b){
+_d="";
+_b=NaN;
+}else{
+_b=undefined;
+}
+}
+}
+this.inherited(arguments,[_b,_c,_d]);
+},_getValueAttr:function(){
+var v=this.inherited(arguments);
+if(isNaN(v)&&this.textbox.value!==""){
+if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)&&(new RegExp("^"+dojo.number._realNumberRegexp(dojo.mixin({},this.constraints))+"$").test(this.textbox.value))){
+var n=Number(this.textbox.value);
+return isNaN(n)?undefined:n;
+}else{
+return undefined;
+}
+}else{
+return v;
+}
+},isValid:function(_e){
+if(!this._focused||this._isEmpty(this.textbox.value)){
+return this.inherited(arguments);
+}else{
+var v=this.get("value");
+if(!isNaN(v)&&this.rangeCheck(v,this.constraints)){
+if(this.constraints.exponent!==false&&/\de[-+]?\d/i.test(this.textbox.value)){
+return true;
+}else{
+return this.inherited(arguments);
+}
+}else{
+return false;
+}
+}
+}});
+dojo.declare("dijit.form.NumberTextBox",[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],{});
+}
Index: trunk/web/dojo/dijit/form/CurrencyTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/CurrencyTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/CurrencyTextBox.js	(revision 9)
@@ -0,0 +1,27 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){
+dojo._hasResource["dijit.form.CurrencyTextBox"]=true;
+dojo.provide("dijit.form.CurrencyTextBox");
+dojo.require("dojo.currency");
+dojo.require("dijit.form.NumberTextBox");
+dojo.declare("dijit.form.CurrencyTextBox",dijit.form.NumberTextBox,{currency:"",baseClass:"dijitTextBox dijitCurrencyTextBox",regExpGen:function(_1){
+return "("+(this._focused?this.inherited(arguments,[dojo.mixin({},_1,this.editOptions)])+"|":"")+dojo.currency.regexp(_1)+")";
+},_formatter:dojo.currency.format,parse:function(_2,_3){
+var v=dojo.currency.parse(_2,_3);
+if(isNaN(v)&&/\d+/.test(_2)){
+return this.inherited(arguments,[_2,dojo.mixin({},_3,this.editOptions)]);
+}
+return v;
+},_setConstraintsAttr:function(_4){
+if(!_4.currency&&this.currency){
+_4.currency=this.currency;
+}
+this.inherited(arguments,[dojo.currency._mixInDefaults(dojo.mixin(_4,{exponent:false}))]);
+}});
+}
Index: trunk/web/dojo/dijit/form/ValidationTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/ValidationTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/ValidationTextBox.js	(revision 9)
@@ -0,0 +1,211 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.ValidationTextBox"]){
+dojo._hasResource["dijit.form.ValidationTextBox"]=true;
+dojo.provide("dijit.form.ValidationTextBox");
+dojo.require("dojo.i18n");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.Tooltip");
+dojo.requireLocalization("dijit.form","validate",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{templateString:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",constraints:{},regExp:".*",regExpGen:function(_1){
+return this.regExp;
+},state:"",tooltipPosition:[],_setValueAttr:function(){
+this.inherited(arguments);
+this.validate(this._focused);
+},validator:function(_2,_3){
+return (new RegExp("^(?:"+this.regExpGen(_3)+")"+(this.required?"":"?")+"$")).test(_2)&&(!this.required||!this._isEmpty(_2))&&(this._isEmpty(_2)||this.parse(_2,_3)!==undefined);
+},_isValidSubset:function(){
+return this.textbox.value.search(this._partialre)==0;
+},isValid:function(_4){
+return this.validator(this.textbox.value,this.constraints);
+},_isEmpty:function(_5){
+return /^\s*$/.test(_5);
+},getErrorMessage:function(_6){
+return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;
+},getPromptMessage:function(_7){
+return this.promptMessage;
+},_maskValidSubsetError:true,validate:function(_8){
+var _9="";
+var _a=this.disabled||this.isValid(_8);
+if(_a){
+this._maskValidSubsetError=true;
+}
+var _b=this._isEmpty(this.textbox.value);
+var _c=!_a&&!_b&&_8&&this._isValidSubset();
+this.state=((_a||((!this._hasBeenBlurred||_8)&&_b)||_c)&&this._maskValidSubsetError)?"":"Error";
+if(this.state=="Error"){
+this._maskValidSubsetError=_8;
+}
+this._setStateClass();
+dijit.setWaiState(this.focusNode,"invalid",_a?"false":"true");
+if(_8){
+if(this.state=="Error"){
+_9=this.getErrorMessage(true);
+}else{
+_9=this.getPromptMessage(true);
+}
+this._maskValidSubsetError=true;
+}
+this.displayMessage(_9);
+return _a;
+},_message:"",displayMessage:function(_d){
+if(this._message==_d){
+return;
+}
+this._message=_d;
+dijit.hideTooltip(this.domNode);
+if(_d){
+dijit.showTooltip(_d,this.domNode,this.tooltipPosition,!this.isLeftToRight());
+}
+},_refreshState:function(){
+this.validate(this._focused);
+this.inherited(arguments);
+},constructor:function(){
+this.constraints={};
+},_setConstraintsAttr:function(_e){
+if(!_e.locale&&this.lang){
+_e.locale=this.lang;
+}
+this.constraints=_e;
+this._computePartialRE();
+},_computePartialRE:function(){
+var p=this.regExpGen(this.constraints);
+this.regExp=p;
+var _f="";
+if(p!=".*"){
+this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){
+switch(re.charAt(0)){
+case "{":
+case "+":
+case "?":
+case "*":
+case "^":
+case "$":
+case "|":
+case "(":
+_f+=re;
+break;
+case ")":
+_f+="|$)";
+break;
+default:
+_f+="(?:"+re+"|$)";
+break;
+}
+});
+}
+try{
+"".search(_f);
+}
+catch(e){
+_f=this.regExp;
+console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);
+}
+this._partialre="^(?:"+_f+")$";
+},postMixInProperties:function(){
+this.inherited(arguments);
+this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);
+if(this.invalidMessage=="$_unset_$"){
+this.invalidMessage=this.messages.invalidMessage;
+}
+if(!this.invalidMessage){
+this.invalidMessage=this.promptMessage;
+}
+if(this.missingMessage=="$_unset_$"){
+this.missingMessage=this.messages.missingMessage;
+}
+if(!this.missingMessage){
+this.missingMessage=this.invalidMessage;
+}
+this._setConstraintsAttr(this.constraints);
+},_setDisabledAttr:function(_10){
+this.inherited(arguments);
+this._refreshState();
+},_setRequiredAttr:function(_11){
+this.required=_11;
+dijit.setWaiState(this.focusNode,"required",_11);
+this._refreshState();
+},reset:function(){
+this._maskValidSubsetError=true;
+this.inherited(arguments);
+},_onBlur:function(){
+this.displayMessage("");
+this.inherited(arguments);
+}});
+dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){
+this.inherited(arguments);
+this.nameAttrSetting="";
+},serialize:function(val,_12){
+return val.toString?val.toString():"";
+},toString:function(){
+var val=this.filter(this.get("value"));
+return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";
+},validate:function(){
+this.valueNode.value=this.toString();
+return this.inherited(arguments);
+},buildRendering:function(){
+this.inherited(arguments);
+this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name+"'":"")+">",this.textbox,"after");
+},reset:function(){
+this.valueNode.value="";
+this.inherited(arguments);
+}});
+dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_13,_14){
+return ("min" in _14?(this.compare(_13,_14.min)>=0):true)&&("max" in _14?(this.compare(_13,_14.max)<=0):true);
+},isInRange:function(_15){
+return this.rangeCheck(this.get("value"),this.constraints);
+},_isDefinitelyOutOfRange:function(){
+var val=this.get("value");
+var _16=false;
+var _17=false;
+if("min" in this.constraints){
+var min=this.constraints.min;
+min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);
+_16=(typeof min=="number")&&min<0;
+}
+if("max" in this.constraints){
+var max=this.constraints.max;
+max=this.compare(val,((typeof max!="number")||max>0)?max:0);
+_17=(typeof max=="number")&&max>0;
+}
+return _16||_17;
+},_isValidSubset:function(){
+return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();
+},isValid:function(_18){
+return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_18));
+},getErrorMessage:function(_19){
+var v=this.get("value");
+if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_19)){
+return this.rangeMessage;
+}
+return this.inherited(arguments);
+},postMixInProperties:function(){
+this.inherited(arguments);
+if(!this.rangeMessage){
+this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);
+this.rangeMessage=this.messages.rangeMessage;
+}
+},_setConstraintsAttr:function(_1a){
+this.inherited(arguments);
+if(this.focusNode){
+if(this.constraints.min!==undefined){
+dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);
+}else{
+dijit.removeWaiState(this.focusNode,"valuemin");
+}
+if(this.constraints.max!==undefined){
+dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);
+}else{
+dijit.removeWaiState(this.focusNode,"valuemax");
+}
+}
+},_setValueAttr:function(_1b,_1c){
+dijit.setWaiState(this.focusNode,"valuenow",_1b);
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/form/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/ComboBox.js	(revision 9)
@@ -0,0 +1,615 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.ComboBox"]){
+dojo._hasResource["dijit.form.ComboBox"]=true;
+dojo.provide("dijit.form.ComboBox");
+dojo.require("dojo.window");
+dojo.require("dojo.regexp");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.require("dijit._CssStateMixin");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.requireLocalization("dijit.form","ComboBox",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.form.ComboBoxMixin",null,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/ComboBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",cssStateNodes:{"downArrowNode":"dijitDownArrowButton"},_getCaretPos:function(_1){
+var _2=0;
+if(typeof (_1.selectionStart)=="number"){
+_2=_1.selectionStart;
+}else{
+if(dojo.isIE){
+var tr=dojo.doc.selection.createRange().duplicate();
+var _3=_1.createTextRange();
+tr.move("character",0);
+_3.move("character",0);
+try{
+_3.setEndPoint("EndToEnd",tr);
+_2=String(_3.text).replace(/\r/g,"").length;
+}
+catch(e){
+}
+}
+}
+return _2;
+},_setCaretPos:function(_4,_5){
+_5=parseInt(_5);
+dijit.selectInputText(_4,_5,_5);
+},_setDisabledAttr:function(_6){
+this.inherited(arguments);
+dijit.setWaiState(this.comboNode,"disabled",_6);
+},_abortQuery:function(){
+if(this.searchTimer){
+clearTimeout(this.searchTimer);
+this.searchTimer=null;
+}
+if(this._fetchHandle){
+if(this._fetchHandle.abort){
+this._fetchHandle.abort();
+}
+this._fetchHandle=null;
+}
+},_onInput:function(_7){
+if(!this.searchTimer&&(_7.type=="paste"||_7.type=="input")&&this._lastInput!=this.textbox.value){
+this.searchTimer=setTimeout(dojo.hitch(this,function(){
+this._onKeyPress({charOrCode:229});
+}),100);
+}
+this.inherited(arguments);
+},_onKeyPress:function(_8){
+var _9=_8.charOrCode;
+if(_8.altKey||((_8.ctrlKey||_8.metaKey)&&(_9!="x"&&_9!="v"))||_9==dojo.keys.SHIFT){
+return;
+}
+var _a=false;
+var _b="_startSearchFromInput";
+var pw=this._popupWidget;
+var dk=dojo.keys;
+var _c=null;
+this._prev_key_backspace=false;
+this._abortQuery();
+if(this._isShowingNow){
+pw.handleKey(_9);
+_c=pw.getHighlightedOption();
+}
+switch(_9){
+case dk.PAGE_DOWN:
+case dk.DOWN_ARROW:
+case dk.PAGE_UP:
+case dk.UP_ARROW:
+if(!this._isShowingNow){
+_a=true;
+_b="_startSearchAll";
+}else{
+this._announceOption(_c);
+}
+dojo.stopEvent(_8);
+break;
+case dk.ENTER:
+if(_c){
+if(_c==pw.nextButton){
+this._nextSearch(1);
+dojo.stopEvent(_8);
+break;
+}else{
+if(_c==pw.previousButton){
+this._nextSearch(-1);
+dojo.stopEvent(_8);
+break;
+}
+}
+}else{
+this._setBlurValue();
+this._setCaretPos(this.focusNode,this.focusNode.value.length);
+}
+_8.preventDefault();
+case dk.TAB:
+var _d=this.get("displayedValue");
+if(pw&&(_d==pw._messages["previousMessage"]||_d==pw._messages["nextMessage"])){
+break;
+}
+if(_c){
+this._selectOption();
+}
+if(this._isShowingNow){
+this._lastQuery=null;
+this._hideResultList();
+}
+break;
+case " ":
+if(_c){
+dojo.stopEvent(_8);
+this._selectOption();
+this._hideResultList();
+}else{
+_a=true;
+}
+break;
+case dk.ESCAPE:
+if(this._isShowingNow){
+dojo.stopEvent(_8);
+this._hideResultList();
+}
+break;
+case dk.DELETE:
+case dk.BACKSPACE:
+this._prev_key_backspace=true;
+_a=true;
+break;
+default:
+_a=typeof _9=="string"||_9==229;
+}
+if(_a){
+this.item=undefined;
+this.searchTimer=setTimeout(dojo.hitch(this,_b),1);
+}
+},_autoCompleteText:function(_e){
+var fn=this.focusNode;
+dijit.selectInputText(fn,fn.value.length);
+var _f=this.ignoreCase?"toLowerCase":"substr";
+if(_e[_f](0).indexOf(this.focusNode.value[_f](0))==0){
+var _10=this._getCaretPos(fn);
+if((_10+1)>fn.value.length){
+fn.value=_e;
+dijit.selectInputText(fn,_10);
+}
+}else{
+fn.value=_e;
+dijit.selectInputText(fn);
+}
+},_openResultList:function(_11,_12){
+this._fetchHandle=null;
+if(this.disabled||this.readOnly||(_12.query[this.searchAttr]!=this._lastQuery)){
+return;
+}
+this._popupWidget.clearResultList();
+if(!_11.length&&!this._maxOptions){
+this._hideResultList();
+return;
+}
+_12._maxOptions=this._maxOptions;
+var _13=this._popupWidget.createOptions(_11,_12,dojo.hitch(this,"_getMenuLabelFromItem"));
+this._showResultList();
+if(_12.direction){
+if(1==_12.direction){
+this._popupWidget.highlightFirstOption();
+}else{
+if(-1==_12.direction){
+this._popupWidget.highlightLastOption();
+}
+}
+this._announceOption(this._popupWidget.getHighlightedOption());
+}else{
+if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_12.query[this.searchAttr])){
+this._announceOption(_13[1]);
+}
+}
+},_showResultList:function(){
+this._hideResultList();
+this.displayMessage("");
+dojo.style(this._popupWidget.domNode,{width:"",height:""});
+var _14=this.open();
+var _15=dojo.marginBox(this._popupWidget.domNode);
+this._popupWidget.domNode.style.overflow=((_14.h==_15.h)&&(_14.w==_15.w))?"hidden":"auto";
+var _16=_14.w;
+if(_14.h<this._popupWidget.domNode.scrollHeight){
+_16+=16;
+}
+dojo.marginBox(this._popupWidget.domNode,{h:_14.h,w:Math.max(_16,this.domNode.offsetWidth)});
+if(_16<this.domNode.offsetWidth){
+this._popupWidget.domNode.parentNode.style.left=dojo.position(this.domNode,true).x+"px";
+}
+dijit.setWaiState(this.comboNode,"expanded","true");
+},_hideResultList:function(){
+this._abortQuery();
+if(this._isShowingNow){
+dijit.popup.close(this._popupWidget);
+this._isShowingNow=false;
+dijit.setWaiState(this.comboNode,"expanded","false");
+dijit.removeWaiState(this.focusNode,"activedescendant");
+}
+},_setBlurValue:function(){
+var _17=this.get("displayedValue");
+var pw=this._popupWidget;
+if(pw&&(_17==pw._messages["previousMessage"]||_17==pw._messages["nextMessage"])){
+this._setValueAttr(this._lastValueReported,true);
+}else{
+if(typeof this.item=="undefined"){
+this.item=null;
+this.set("displayedValue",_17);
+}else{
+if(this.value!=this._lastValueReported){
+dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);
+}
+this._refreshState();
+}
+}
+},_onBlur:function(){
+this._hideResultList();
+this.inherited(arguments);
+},_setItemAttr:function(_18,_19,_1a){
+if(!_1a){
+_1a=this.labelFunc(_18,this.store);
+}
+this.value=this._getValueField()!=this.searchAttr?this.store.getIdentity(_18):_1a;
+this.item=_18;
+dijit.form.ComboBox.superclass._setValueAttr.call(this,this.value,_19,_1a);
+},_announceOption:function(_1b){
+if(!_1b){
+return;
+}
+var _1c;
+if(_1b==this._popupWidget.nextButton||_1b==this._popupWidget.previousButton){
+_1c=_1b.innerHTML;
+this.item=undefined;
+this.value="";
+}else{
+_1c=this.labelFunc(_1b.item,this.store);
+this.set("item",_1b.item,false,_1c);
+}
+this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);
+dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(_1b,"id"));
+this._autoCompleteText(_1c);
+},_selectOption:function(evt){
+if(evt){
+this._announceOption(evt.target);
+}
+this._hideResultList();
+this._setCaretPos(this.focusNode,this.focusNode.value.length);
+dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);
+},_onArrowMouseDown:function(evt){
+if(this.disabled||this.readOnly){
+return;
+}
+dojo.stopEvent(evt);
+this.focus();
+if(this._isShowingNow){
+this._hideResultList();
+}else{
+this._startSearchAll();
+}
+},_startSearchAll:function(){
+this._startSearch("");
+},_startSearchFromInput:function(){
+this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));
+},_getQueryString:function(_1d){
+return dojo.string.substitute(this.queryExpr,[_1d]);
+},_startSearch:function(key){
+if(!this._popupWidget){
+var _1e=this.id+"_popup";
+this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption),id:_1e,dir:this.dir});
+dijit.removeWaiState(this.focusNode,"activedescendant");
+dijit.setWaiState(this.textbox,"owns",_1e);
+}
+var _1f=dojo.clone(this.query);
+this._lastInput=key;
+this._lastQuery=_1f[this.searchAttr]=this._getQueryString(key);
+this.searchTimer=setTimeout(dojo.hitch(this,function(_20,_21){
+this.searchTimer=null;
+var _22={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_20,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_23){
+_21._fetchHandle=null;
+console.error("dijit.form.ComboBox: "+_23);
+dojo.hitch(_21,"_hideResultList")();
+},start:0,count:this.pageSize};
+dojo.mixin(_22,_21.fetchProperties);
+this._fetchHandle=_21.store.fetch(_22);
+var _24=function(_25,_26){
+_25.start+=_25.count*_26;
+_25.direction=_26;
+this._fetchHandle=this.store.fetch(_25);
+};
+this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,_24,this._fetchHandle);
+},_1f,this),this.searchDelay);
+},_setMaxOptions:function(_27,_28){
+this._maxOptions=_27;
+},_getValueField:function(){
+return this.searchAttr;
+},compositionend:function(evt){
+this._onKeyPress({charOrCode:229});
+},constructor:function(){
+this.query={};
+this.fetchProperties={};
+},postMixInProperties:function(){
+if(!this.store){
+var _29=this.srcNodeRef;
+this.store=new dijit.form._ComboBoxDataStore(_29);
+if(!("value" in this.params)){
+var _2a=this.store.fetchSelectedItem();
+if(_2a){
+var _2b=this._getValueField();
+this.value=_2b!=this.searchAttr?this.store.getValue(_2a,_2b):this.labelFunc(_2a,this.store);
+}
+}
+}
+this.inherited(arguments);
+},postCreate:function(){
+if(!this.hasDownArrow){
+this.downArrowNode.style.display="none";
+}
+var _2c=dojo.query("label[for=\""+this.id+"\"]");
+if(_2c.length){
+_2c[0].id=(this.id+"_label");
+var cn=this.comboNode;
+dijit.setWaiState(cn,"labelledby",_2c[0].id);
+}
+this.inherited(arguments);
+},uninitialize:function(){
+if(this._popupWidget&&!this._popupWidget._destroyed){
+this._hideResultList();
+this._popupWidget.destroy();
+}
+this.inherited(arguments);
+},_getMenuLabelFromItem:function(_2d){
+var _2e=this.labelAttr?this.store.getValue(_2d,this.labelAttr):this.labelFunc(_2d,this.store);
+var _2f=this.labelType;
+if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){
+_2e=this.doHighlight(_2e,this._escapeHtml(this._lastInput));
+_2f="html";
+}
+return {html:_2f=="html",label:_2e};
+},doHighlight:function(_30,_31){
+var _32="i"+(this.highlightMatch=="all"?"g":"");
+var _33=this._escapeHtml(_30);
+_31=dojo.regexp.escapeString(_31);
+var ret=_33.replace(new RegExp("(^|\\s)("+_31+")",_32),"$1<span class=\"dijitComboBoxHighlightMatch\">$2</span>");
+return ret;
+},_escapeHtml:function(str){
+str=String(str).replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
+return str;
+},open:function(){
+this._isShowingNow=true;
+return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});
+},reset:function(){
+this.item=null;
+this.inherited(arguments);
+},labelFunc:function(_34,_35){
+return _35.getValue(_34,this.searchAttr).toString();
+}});
+dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){
+this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);
+this.inherited(arguments);
+},_setValueAttr:function(_36){
+this.value=_36;
+this.onChange(_36);
+},onChange:function(_37){
+},onPage:function(_38){
+},postCreate:function(){
+this.previousButton.innerHTML=this._messages["previousMessage"];
+this.nextButton.innerHTML=this._messages["nextMessage"];
+this.inherited(arguments);
+},onClose:function(){
+this._blurOptionNode();
+},_createOption:function(_39,_3a){
+var _3b=_3a(_39);
+var _3c=dojo.doc.createElement("li");
+dijit.setWaiRole(_3c,"option");
+if(_3b.html){
+_3c.innerHTML=_3b.label;
+}else{
+_3c.appendChild(dojo.doc.createTextNode(_3b.label));
+}
+if(_3c.innerHTML==""){
+_3c.innerHTML="&nbsp;";
+}
+_3c.item=_39;
+return _3c;
+},createOptions:function(_3d,_3e,_3f){
+this.previousButton.style.display=(_3e.start==0)?"none":"";
+dojo.attr(this.previousButton,"id",this.id+"_prev");
+dojo.forEach(_3d,function(_40,i){
+var _41=this._createOption(_40,_3f);
+_41.className="dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl");
+dojo.attr(_41,"id",this.id+i);
+this.domNode.insertBefore(_41,this.nextButton);
+},this);
+var _42=false;
+if(_3e._maxOptions&&_3e._maxOptions!=-1){
+if((_3e.start+_3e.count)<_3e._maxOptions){
+_42=true;
+}else{
+if((_3e.start+_3e.count)>_3e._maxOptions&&_3e.count==_3d.length){
+_42=true;
+}
+}
+}else{
+if(_3e.count==_3d.length){
+_42=true;
+}
+}
+this.nextButton.style.display=_42?"":"none";
+dojo.attr(this.nextButton,"id",this.id+"_next");
+return this.domNode.childNodes;
+},clearResultList:function(){
+while(this.domNode.childNodes.length>2){
+this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
+}
+},_onMouseDown:function(evt){
+dojo.stopEvent(evt);
+},_onMouseUp:function(evt){
+if(evt.target===this.domNode||!this._highlighted_option){
+return;
+}else{
+if(evt.target==this.previousButton){
+this.onPage(-1);
+}else{
+if(evt.target==this.nextButton){
+this.onPage(1);
+}else{
+var tgt=evt.target;
+while(!tgt.item){
+tgt=tgt.parentNode;
+}
+this._setValueAttr({target:tgt},true);
+}
+}
+}
+},_onMouseOver:function(evt){
+if(evt.target===this.domNode){
+return;
+}
+var tgt=evt.target;
+if(!(tgt==this.previousButton||tgt==this.nextButton)){
+while(!tgt.item){
+tgt=tgt.parentNode;
+}
+}
+this._focusOptionNode(tgt);
+},_onMouseOut:function(evt){
+if(evt.target===this.domNode){
+return;
+}
+this._blurOptionNode();
+},_focusOptionNode:function(_43){
+if(this._highlighted_option!=_43){
+this._blurOptionNode();
+this._highlighted_option=_43;
+dojo.addClass(this._highlighted_option,"dijitMenuItemSelected");
+}
+},_blurOptionNode:function(){
+if(this._highlighted_option){
+dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");
+this._highlighted_option=null;
+}
+},_highlightNextOption:function(){
+if(!this.getHighlightedOption()){
+var fc=this.domNode.firstChild;
+this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);
+}else{
+var ns=this._highlighted_option.nextSibling;
+if(ns&&ns.style.display!="none"){
+this._focusOptionNode(ns);
+}else{
+this.highlightFirstOption();
+}
+}
+dojo.window.scrollIntoView(this._highlighted_option);
+},highlightFirstOption:function(){
+var _44=this.domNode.firstChild;
+var _45=_44.nextSibling;
+this._focusOptionNode(_45.style.display=="none"?_44:_45);
+dojo.window.scrollIntoView(this._highlighted_option);
+},highlightLastOption:function(){
+this._focusOptionNode(this.domNode.lastChild.previousSibling);
+dojo.window.scrollIntoView(this._highlighted_option);
+},_highlightPrevOption:function(){
+if(!this.getHighlightedOption()){
+var lc=this.domNode.lastChild;
+this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);
+}else{
+var ps=this._highlighted_option.previousSibling;
+if(ps&&ps.style.display!="none"){
+this._focusOptionNode(ps);
+}else{
+this.highlightLastOption();
+}
+}
+dojo.window.scrollIntoView(this._highlighted_option);
+},_page:function(up){
+var _46=0;
+var _47=this.domNode.scrollTop;
+var _48=dojo.style(this.domNode,"height");
+if(!this.getHighlightedOption()){
+this._highlightNextOption();
+}
+while(_46<_48){
+if(up){
+if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){
+break;
+}
+this._highlightPrevOption();
+}else{
+if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){
+break;
+}
+this._highlightNextOption();
+}
+var _49=this.domNode.scrollTop;
+_46+=(_49-_47)*(up?-1:1);
+_47=_49;
+}
+},pageUp:function(){
+this._page(true);
+},pageDown:function(){
+this._page(false);
+},getHighlightedOption:function(){
+var ho=this._highlighted_option;
+return (ho&&ho.parentNode)?ho:null;
+},handleKey:function(key){
+switch(key){
+case dojo.keys.DOWN_ARROW:
+this._highlightNextOption();
+break;
+case dojo.keys.PAGE_DOWN:
+this.pageDown();
+break;
+case dojo.keys.UP_ARROW:
+this._highlightPrevOption();
+break;
+case dojo.keys.PAGE_UP:
+this.pageUp();
+break;
+}
+}});
+dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_4a,_4b,_4c){
+this.item=null;
+if(!_4a){
+_4a="";
+}
+dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_4a,_4b,_4c);
+}});
+dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(_4d){
+this.root=_4d;
+if(_4d.tagName!="SELECT"&&_4d.firstChild){
+_4d=dojo.query("select",_4d);
+if(_4d.length>0){
+_4d=_4d[0];
+}else{
+this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";
+_4d=this.root.firstChild;
+}
+this.root=_4d;
+}
+dojo.query("> option",_4d).forEach(function(_4e){
+_4e.innerHTML=dojo.trim(_4e.innerHTML);
+});
+},getValue:function(_4f,_50,_51){
+return (_50=="value")?_4f.value:(_4f.innerText||_4f.textContent||"");
+},isItemLoaded:function(_52){
+return true;
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},_fetchItems:function(_53,_54,_55){
+if(!_53.query){
+_53.query={};
+}
+if(!_53.query.name){
+_53.query.name="";
+}
+if(!_53.queryOptions){
+_53.queryOptions={};
+}
+var _56=dojo.data.util.filter.patternToRegExp(_53.query.name,_53.queryOptions.ignoreCase),_57=dojo.query("> option",this.root).filter(function(_58){
+return (_58.innerText||_58.textContent||"").match(_56);
+});
+if(_53.sort){
+_57.sort(dojo.data.util.sorter.createSortFunction(_53.sort,this));
+}
+_54(_57,_53);
+},close:function(_59){
+return;
+},getLabel:function(_5a){
+return _5a.innerHTML;
+},getIdentity:function(_5b){
+return dojo.attr(_5b,"value");
+},fetchItemByIdentity:function(_5c){
+var _5d=dojo.query("> option[value='"+_5c.identity+"']",this.root)[0];
+_5c.onItem(_5d);
+},fetchSelectedItem:function(){
+var _5e=this.root,si=_5e.selectedIndex;
+return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",_5e)[0]:null;
+}});
+dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dijit/form/TimeTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/TimeTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/TimeTextBox.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.TimeTextBox"]){
+dojo._hasResource["dijit.form.TimeTextBox"]=true;
+dojo.provide("dijit.form.TimeTextBox");
+dojo.require("dijit._TimePicker");
+dojo.require("dijit.form._DateTimeTextBox");
+dojo.declare("dijit.form.TimeTextBox",dijit.form._DateTimeTextBox,{baseClass:"dijitTextBox dijitTimeTextBox",popupClass:"dijit._TimePicker",_selector:"time",value:new Date("")});
+}
Index: trunk/web/dojo/dijit/form/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/Textarea.js	(revision 9)
@@ -0,0 +1,103 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.Textarea"]){
+dojo._hasResource["dijit.form.Textarea"]=true;
+dojo.provide("dijit.form.Textarea");
+dojo.require("dijit.form.SimpleTextarea");
+dojo.declare("dijit.form.Textarea",dijit.form.SimpleTextarea,{cols:"",_previousNewlines:0,_strictMode:(dojo.doc.compatMode!="BackCompat"),_getHeight:function(_1){
+var _2=_1.scrollHeight;
+if(dojo.isIE){
+_2+=_1.offsetHeight-_1.clientHeight-((dojo.isIE<8&&this._strictMode)?dojo._getPadBorderExtents(_1).h:0);
+}else{
+if(dojo.isMoz){
+_2+=_1.offsetHeight-_1.clientHeight;
+}else{
+if(dojo.isWebKit&&!(dojo.isSafari<4)){
+_2+=dojo._getBorderExtents(_1).h;
+}else{
+_2+=dojo._getPadBorderExtents(_1).h;
+}
+}
+}
+return _2;
+},_estimateHeight:function(_3){
+_3.style.maxHeight="";
+_3.style.height="auto";
+_3.rows=(_3.value.match(/\n/g)||[]).length+1;
+},_needsHelpShrinking:dojo.isMoz||dojo.isWebKit,_onInput:function(){
+this.inherited(arguments);
+if(this._busyResizing){
+return;
+}
+this._busyResizing=true;
+var _4=this.textbox;
+if(_4.scrollHeight&&_4.offsetHeight&&_4.clientHeight){
+var _5=this._getHeight(_4)+"px";
+if(_4.style.height!=_5){
+_4.style.maxHeight=_4.style.height=_5;
+}
+if(this._needsHelpShrinking){
+if(this._setTimeoutHandle){
+clearTimeout(this._setTimeoutHandle);
+}
+this._setTimeoutHandle=setTimeout(dojo.hitch(this,"_shrink"),0);
+}
+}else{
+this._estimateHeight(_4);
+}
+this._busyResizing=false;
+},_busyResizing:false,_shrink:function(){
+this._setTimeoutHandle=null;
+if(this._needsHelpShrinking&&!this._busyResizing){
+this._busyResizing=true;
+var _6=this.textbox;
+var _7=false;
+if(_6.value==""){
+_6.value=" ";
+_7=true;
+}
+var _8=_6.scrollHeight;
+if(!_8){
+this._estimateHeight(_6);
+}else{
+var _9=_6.style.paddingBottom;
+var _a=dojo._getPadExtents(_6);
+_a=_a.h-_a.t;
+_6.style.paddingBottom=_a+1+"px";
+var _b=this._getHeight(_6)-1+"px";
+if(_6.style.maxHeight!=_b){
+_6.style.paddingBottom=_a+_8+"px";
+_6.scrollTop=0;
+_6.style.maxHeight=this._getHeight(_6)-_8+"px";
+}
+_6.style.paddingBottom=_9;
+}
+if(_7){
+_6.value="";
+}
+this._busyResizing=false;
+}
+},resize:function(){
+this._onInput();
+},_setValueAttr:function(){
+this.inherited(arguments);
+this.resize();
+},postCreate:function(){
+this.inherited(arguments);
+dojo.style(this.textbox,{overflowY:"hidden",overflowX:"auto",boxSizing:"border-box",MsBoxSizing:"border-box",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box"});
+this.connect(this.textbox,"onscroll",this._onInput);
+this.connect(this.textbox,"onresize",this._onInput);
+this.connect(this.textbox,"onfocus",this._onInput);
+this._setTimeoutHandle=setTimeout(dojo.hitch(this,"resize"),0);
+},uninitialize:function(){
+if(this._setTimeoutHandle){
+clearTimeout(this._setTimeoutHandle);
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/form/_Spinner.js
===================================================================
--- trunk/web/dojo/dijit/form/_Spinner.js	(revision 0)
+++ trunk/web/dojo/dijit/form/_Spinner.js	(revision 9)
@@ -0,0 +1,57 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form._Spinner"]){
+dojo._hasResource["dijit.form._Spinner"]=true;
+dojo.provide("dijit.form._Spinner");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.declare("dijit.form._Spinner",dijit.form.RangeBoundTextBox,{defaultTimeout:500,minimumTimeout:10,timeoutChangeRate:0.9,smallDelta:1,largeDelta:10,templateString:dojo.cache("dijit.form","templates/Spinner.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitButtonNode dijitSpinnerButtonContainer\"\n\t\t><input class=\"dijitReset dijitInputField dijitSpinnerButtonInner\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t/><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitUpArrowButton\"\n\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9650;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t\t><div class=\"dijitReset dijitLeft dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t><div class=\"dijitArrowButtonInner\"\n\t\t\t\t><input class=\"dijitReset dijitInputField\" value=\"&#9660;\" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t\t\t${_buttonInputDisabled}\n\t\t\t/></div\n\t\t></div\n\t></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onkeypress:_onKeyPress\"\n\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" ${!nameAttrSetting}\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitSpinner",cssStateNodes:{"upArrowNode":"dijitUpArrowButton","downArrowNode":"dijitDownArrowButton"},adjust:function(_1,_2){
+return _1;
+},_arrowPressed:function(_3,_4,_5){
+if(this.disabled||this.readOnly){
+return;
+}
+this._setValueAttr(this.adjust(this.get("value"),_4*_5),false);
+dijit.selectInputText(this.textbox,this.textbox.value.length);
+},_arrowReleased:function(_6){
+this._wheelTimer=null;
+if(this.disabled||this.readOnly){
+return;
+}
+},_typematicCallback:function(_7,_8,_9){
+var _a=this.smallDelta;
+if(_8==this.textbox){
+var k=dojo.keys;
+var _b=_9.charOrCode;
+_a=(_b==k.PAGE_UP||_b==k.PAGE_DOWN)?this.largeDelta:this.smallDelta;
+_8=(_b==k.UP_ARROW||_b==k.PAGE_UP)?this.upArrowNode:this.downArrowNode;
+}
+if(_7==-1){
+this._arrowReleased(_8);
+}else{
+this._arrowPressed(_8,(_8==this.upArrowNode)?1:-1,_a);
+}
+},_wheelTimer:null,_mouseWheeled:function(_c){
+dojo.stopEvent(_c);
+var _d=_c.detail?(_c.detail*-1):(_c.wheelDelta/120);
+if(_d!==0){
+var _e=this[(_d>0?"upArrowNode":"downArrowNode")];
+this._arrowPressed(_e,_d,this.smallDelta);
+if(!this._wheelTimer){
+clearTimeout(this._wheelTimer);
+}
+this._wheelTimer=setTimeout(dojo.hitch(this,"_arrowReleased",_e),50);
+}
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.domNode,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll","_mouseWheeled");
+this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
+this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
+this._connects.push(dijit.typematic.addListener(this.upArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_UP,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
+this._connects.push(dijit.typematic.addListener(this.downArrowNode,this.textbox,{charOrCode:dojo.keys.PAGE_DOWN,ctrlKey:false,altKey:false,shiftKey:false,metaKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout,this.minimumTimeout));
+}});
+}
Index: trunk/web/dojo/dijit/form/nls/sv/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sv/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sv/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sv/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sv/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sv/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"redigeringsområdesram"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sv/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sv/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sv/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"edit area","iframeFocusTitle":"edit area frame"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/de/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/de/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/de/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/de/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/de/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/de/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/de/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/de/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/de/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"Editierbereich","iframeFocusTitle":"Rahmen für Editierbereich"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ja/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ja/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ja/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ja/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ja/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ja/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ja/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ja/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ja/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"編集域","iframeFocusTitle":"編集域フレーム"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/he/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/he/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/he/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/he/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/he/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/he/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/he/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/he/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/he/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"אזור עריכה","iframeFocusTitle":"מסגרת אזור עריכה"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/fi/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/fi/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/fi/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/fi/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/fi/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/fi/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/fi/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/fi/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/fi/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"muokkausalue","iframeFocusTitle":"muokkausalueen kehys"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/nb/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/nb/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/nb/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Tidligere valg","nextMessage":"Flere valg"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/nb/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/nb/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/nb/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/nb/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/nb/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/nb/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"ramme for redigeringsområde"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/el/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/el/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/el/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/el/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/el/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/el/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/el/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/el/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/el/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"περιοχή επεξεργασίας","iframeFocusTitle":"πλαίσιο περιοχής επεξεργασίας"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ar/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ar/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ar/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ar/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ar/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ar/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ar/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ar/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ar/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"مساحة التحرير","iframeFocusTitle":"اطار مساحة التحرير"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pt-pt/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pt-pt/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pt-pt/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"área de edição","iframeFocusTitle":"painel da área de edição"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pt-pt/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pt-pt/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pt-pt/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Opções anteriores","nextMessage":"Mais opções"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pt-pt/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pt-pt/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pt-pt/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/cs/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/cs/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/cs/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Předchozí volby","nextMessage":"Další volby"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/cs/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/cs/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/cs/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Tato hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota není platná.","missingMessage":"Tato hodnota je vyžadována."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/cs/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/cs/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/cs/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"oblast úprav","iframeFocusTitle":"rámec oblasti úprav"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/fr/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/fr/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/fr/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"zone d'édition","iframeFocusTitle":"cadre de la zone d'édition"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/fr/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/fr/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/fr/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Choix précédents","nextMessage":"Plus de choix"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/fr/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/fr/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/fr/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/es/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/es/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/es/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/es/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/es/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/es/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/es/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/es/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/es/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"área de edición","iframeFocusTitle":"marco del área de edición"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ko/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ko/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ko/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ko/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ko/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ko/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ko/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ko/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ko/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"편집 영역","iframeFocusTitle":"편집 영역 프레임"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/nl/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/nl/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/nl/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Eerdere opties","nextMessage":"Meer opties"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/nl/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/nl/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/nl/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/nl/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/nl/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/nl/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"veld bewerken","iframeFocusTitle":"veldkader bewerken"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/zh-tw/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/zh-tw/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/zh-tw/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"前一個選擇項","nextMessage":"其他選擇項"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/zh-tw/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/zh-tw/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/zh-tw/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"此值超出範圍。","invalidMessage":"輸入的值無效。","missingMessage":"必須提供此值。"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/zh-tw/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/zh-tw/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/zh-tw/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"編輯區","iframeFocusTitle":"編輯區框"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pl/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pl/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pl/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"Obszar edycji","iframeFocusTitle":"Ramka obszaru edycji"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pl/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pl/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pl/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Poprzednie wybory","nextMessage":"Więcej wyborów"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pl/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pl/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pl/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Ta wartość jest spoza zakresu.","invalidMessage":"Wprowadzona wartość jest niepoprawna.","missingMessage":"Ta wartość jest wymagana."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/th/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/th/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/th/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/th/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/th/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/th/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/th/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/th/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/th/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"แก้ไขพื้นที่","iframeFocusTitle":"แก้ไขกรอบพื้นที่"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/it/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/it/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/it/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"modifica area","iframeFocusTitle":"modifica frame area"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/it/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/it/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/it/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/it/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/it/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/it/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/hu/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/hu/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/hu/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"szerkesztési terület","iframeFocusTitle":"szerkesztési terület keret"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/hu/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/hu/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/hu/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Előző menüpontok","nextMessage":"További menüpontok"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/hu/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/hu/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/hu/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Az érték kívül van a megengedett tartományon.","invalidMessage":"A megadott érték érvénytelen.","missingMessage":"Meg kell adni egy értéket."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sk/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sk/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sk/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sk/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sk/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sk/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sk/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sk/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sk/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"upraviť oblasť","iframeFocusTitle":"upraviť rám oblasti"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sl/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sl/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sl/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Prejšnje možnosti","nextMessage":"Dodatne možnosti"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sl/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sl/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sl/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Ta vrednost je zunaj obsega. ","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/sl/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/sl/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/sl/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"urejanje področja","iframeFocusTitle":"urejanje področja okvirja"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ro/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ro/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ro/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Alegeri anterioare","nextMessage":"Mai multe alegeri"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ro/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ro/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ro/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Această valoare este în afara intervalului. ","invalidMessage":"Valoarea introdusă nu este validă.","missingMessage":"Această valoare este necesară."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ro/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ro/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ro/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"zonă de editare","iframeFocusTitle":"cadru zonă de editare"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/zh/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/zh/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/zh/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"先前选项","nextMessage":"更多选项"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/zh/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/zh/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/zh/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"此值超出范围。","invalidMessage":"输入的值无效。","missingMessage":"此值是必需值。"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/zh/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/zh/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/zh/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"编辑区","iframeFocusTitle":"编辑区框架"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pt/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pt/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pt/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Opções anteriores","nextMessage":"Mais opções"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pt/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pt/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pt/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/pt/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/pt/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/pt/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"editar área","iframeFocusTitle":"editar quadro da área"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Previous choices","nextMessage":"More choices"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ca/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ca/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ca/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ca/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ca/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ca/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ca/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ca/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ca/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"àrea d'edició","iframeFocusTitle":"Marc de l'àrea d'edició"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/da/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/da/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/da/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"redigeringsområde","iframeFocusTitle":"ramme om redigeringsområde"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/da/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/da/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/da/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Forrige valg","nextMessage":"Flere valg"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/da/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/da/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/da/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ugyldig.","missingMessage":"Værdien er påkrævet."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/tr/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/tr/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/tr/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/tr/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/tr/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/tr/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/tr/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/tr/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/tr/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"düzenleme alanı","iframeFocusTitle":"düzenleme alanı çerçevesi"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ru/Textarea.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ru/Textarea.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ru/Textarea.js	(revision 9)
@@ -0,0 +1 @@
+({"iframeEditTitle":"область редактирования","iframeFocusTitle":"фрейм области редактирования"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ru/ComboBox.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ru/ComboBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ru/ComboBox.js	(revision 9)
@@ -0,0 +1 @@
+({"previousMessage":"Предыдущие варианты","nextMessage":"Следующие варианты"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/nls/ru/validate.js
===================================================================
--- trunk/web/dojo/dijit/form/nls/ru/validate.js	(revision 0)
+++ trunk/web/dojo/dijit/form/nls/ru/validate.js	(revision 9)
@@ -0,0 +1 @@
+({"rangeMessage":"Это значение вне диапазона.","invalidMessage":"Указано недопустимое значение.","missingMessage":"Это обязательное значение."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/form/VerticalRuleLabels.js
===================================================================
--- trunk/web/dojo/dijit/form/VerticalRuleLabels.js	(revision 0)
+++ trunk/web/dojo/dijit/form/VerticalRuleLabels.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.VerticalRuleLabels"]){
+dojo._hasResource["dijit.form.VerticalRuleLabels"]=true;
+dojo.provide("dijit.form.VerticalRuleLabels");
+dojo.require("dijit.form.HorizontalRuleLabels");
+dojo.declare("dijit.form.VerticalRuleLabels",dijit.form.HorizontalRuleLabels,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerV dijitRuleLabelsContainer dijitRuleLabelsContainerV\"></div>",_positionPrefix:"<div class=\"dijitRuleLabelContainer dijitRuleLabelContainerV\" style=\"top:",_labelPrefix:"\"><span class=\"dijitRuleLabel dijitRuleLabelV\">",_calcPosition:function(_1){
+return 100-_1;
+},_isHorizontal:false});
+}
Index: trunk/web/dojo/dijit/form/NumberSpinner.js
===================================================================
--- trunk/web/dojo/dijit/form/NumberSpinner.js	(revision 0)
+++ trunk/web/dojo/dijit/form/NumberSpinner.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.NumberSpinner"]){
+dojo._hasResource["dijit.form.NumberSpinner"]=true;
+dojo.provide("dijit.form.NumberSpinner");
+dojo.require("dijit.form._Spinner");
+dojo.require("dijit.form.NumberTextBox");
+dojo.declare("dijit.form.NumberSpinner",[dijit.form._Spinner,dijit.form.NumberTextBoxMixin],{adjust:function(_1,_2){
+var tc=this.constraints,v=isNaN(_1),_3=!isNaN(tc.max),_4=!isNaN(tc.min);
+if(v&&_2!=0){
+_1=(_2>0)?_4?tc.min:_3?tc.max:0:_3?this.constraints.max:_4?tc.min:0;
+}
+var _5=_1+_2;
+if(v||isNaN(_5)){
+return _1;
+}
+if(_3&&(_5>tc.max)){
+_5=tc.max;
+}
+if(_4&&(_5<tc.min)){
+_5=tc.min;
+}
+return _5;
+},_onKeyPress:function(e){
+if((e.charOrCode==dojo.keys.HOME||e.charOrCode==dojo.keys.END)&&!(e.ctrlKey||e.altKey||e.metaKey)&&typeof this.get("value")!="undefined"){
+var _6=this.constraints[(e.charOrCode==dojo.keys.HOME?"min":"max")];
+if(typeof _6=="number"){
+this._setValueAttr(_6,false);
+}
+dojo.stopEvent(e);
+}
+}});
+}
Index: trunk/web/dojo/dijit/form/DateTextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/DateTextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/DateTextBox.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.DateTextBox"]){
+dojo._hasResource["dijit.form.DateTextBox"]=true;
+dojo.provide("dijit.form.DateTextBox");
+dojo.require("dijit.Calendar");
+dojo.require("dijit.form._DateTimeTextBox");
+dojo.declare("dijit.form.DateTextBox",dijit.form._DateTimeTextBox,{baseClass:"dijitTextBox dijitDateTextBox",popupClass:"dijit.Calendar",_selector:"date",value:new Date("")});
+}
Index: trunk/web/dojo/dijit/form/TextBox.js
===================================================================
--- trunk/web/dojo/dijit/form/TextBox.js	(revision 0)
+++ trunk/web/dojo/dijit/form/TextBox.js	(revision 9)
@@ -0,0 +1,209 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.TextBox"]){
+dojo._hasResource["dijit.form.TextBox"]=true;
+dojo.provide("dijit.form.TextBox");
+dojo.require("dijit.form._FormWidget");
+dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){
+var _1=this.type.toLowerCase();
+if(this.templateString.toLowerCase()=="input"||((_1=="hidden"||_1=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){
+this.templateString=this._singleNodeTemplate;
+}
+this.inherited(arguments);
+},_setPlaceHolderAttr:function(v){
+this.placeHolder=v;
+if(!this._phspan){
+this._attachPoints.push("_phspan");
+this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");
+}
+this._phspan.innerHTML="";
+this._phspan.appendChild(document.createTextNode(v));
+this._updatePlaceHolder();
+},_updatePlaceHolder:function(){
+if(this._phspan){
+this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";
+}
+},_getValueAttr:function(){
+return this.parse(this.get("displayedValue"),this.constraints);
+},_setValueAttr:function(_2,_3,_4){
+var _5;
+if(_2!==undefined){
+_5=this.filter(_2);
+if(typeof _4!="string"){
+if(_5!==null&&((typeof _5!="number")||!isNaN(_5))){
+_4=this.filter(this.format(_5,this.constraints));
+}else{
+_4="";
+}
+}
+}
+if(_4!=null&&_4!=undefined&&((typeof _4)!="number"||!isNaN(_4))&&this.textbox.value!=_4){
+this.textbox.value=_4;
+}
+this._updatePlaceHolder();
+this.inherited(arguments,[_5,_3]);
+},displayedValue:"",getDisplayedValue:function(){
+dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");
+return this.get("displayedValue");
+},_getDisplayedValueAttr:function(){
+return this.filter(this.textbox.value);
+},setDisplayedValue:function(_6){
+dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");
+this.set("displayedValue",_6);
+},_setDisplayedValueAttr:function(_7){
+if(_7===null||_7===undefined){
+_7="";
+}else{
+if(typeof _7!="string"){
+_7=String(_7);
+}
+}
+this.textbox.value=_7;
+this._setValueAttr(this.get("value"),undefined,_7);
+},format:function(_8,_9){
+return ((_8==null||_8==undefined)?"":(_8.toString?_8.toString():_8));
+},parse:function(_a,_b){
+return _a;
+},_refreshState:function(){
+},_onInput:function(e){
+if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){
+switch(e.keyCode){
+case dojo.keys.SHIFT:
+case dojo.keys.ALT:
+case dojo.keys.CTRL:
+case dojo.keys.TAB:
+return;
+}
+}
+if(this.intermediateChanges){
+var _c=this;
+setTimeout(function(){
+_c._handleOnChange(_c.get("value"),false);
+},0);
+}
+this._refreshState();
+},postCreate:function(){
+if(dojo.isIE){
+var s=dojo.getComputedStyle(this.domNode);
+if(s){
+var ff=s.fontFamily;
+if(ff){
+var _d=this.domNode.getElementsByTagName("INPUT");
+if(_d){
+for(var i=0;i<_d.length;i++){
+_d[i].style.fontFamily=ff;
+}
+}
+}
+}
+}
+this.textbox.setAttribute("value",this.textbox.value);
+this.inherited(arguments);
+if(dojo.isMoz||dojo.isOpera){
+this.connect(this.textbox,"oninput",this._onInput);
+}else{
+this.connect(this.textbox,"onkeydown",this._onInput);
+this.connect(this.textbox,"onkeyup",this._onInput);
+this.connect(this.textbox,"onpaste",this._onInput);
+this.connect(this.textbox,"oncut",this._onInput);
+}
+},_blankValue:"",filter:function(_e){
+if(_e===null){
+return this._blankValue;
+}
+if(typeof _e!="string"){
+return _e;
+}
+if(this.trim){
+_e=dojo.trim(_e);
+}
+if(this.uppercase){
+_e=_e.toUpperCase();
+}
+if(this.lowercase){
+_e=_e.toLowerCase();
+}
+if(this.propercase){
+_e=_e.replace(/[^\s]+/g,function(_f){
+return _f.substring(0,1).toUpperCase()+_f.substring(1);
+});
+}
+return _e;
+},_setBlurValue:function(){
+this._setValueAttr(this.get("value"),true);
+},_onBlur:function(e){
+if(this.disabled){
+return;
+}
+this._setBlurValue();
+this.inherited(arguments);
+if(this._selectOnClickHandle){
+this.disconnect(this._selectOnClickHandle);
+}
+if(this.selectOnClick&&dojo.isMoz){
+this.textbox.selectionStart=this.textbox.selectionEnd=undefined;
+}
+this._updatePlaceHolder();
+},_onFocus:function(by){
+if(this.disabled||this.readOnly){
+return;
+}
+if(this.selectOnClick&&by=="mouse"){
+this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){
+this.disconnect(this._selectOnClickHandle);
+var _10;
+if(dojo.isIE){
+var _11=dojo.doc.selection.createRange();
+var _12=_11.parentElement();
+_10=_12==this.textbox&&_11.text.length==0;
+}else{
+_10=this.textbox.selectionStart==this.textbox.selectionEnd;
+}
+if(_10){
+dijit.selectInputText(this.textbox);
+}
+});
+}
+this._updatePlaceHolder();
+this._refreshState();
+this.inherited(arguments);
+},reset:function(){
+this.textbox.value="";
+this.inherited(arguments);
+}});
+dijit.selectInputText=function(_13,_14,_15){
+var _16=dojo.global;
+var _17=dojo.doc;
+_13=dojo.byId(_13);
+if(isNaN(_14)){
+_14=0;
+}
+if(isNaN(_15)){
+_15=_13.value?_13.value.length:0;
+}
+dijit.focus(_13);
+if(_17["selection"]&&dojo.body()["createTextRange"]){
+if(_13.createTextRange){
+var _18=_13.createTextRange();
+with(_18){
+collapse(true);
+moveStart("character",-99999);
+moveStart("character",_14);
+moveEnd("character",_15-_14);
+select();
+}
+}
+}else{
+if(_16["getSelection"]){
+if(_13.setSelectionRange){
+_13.setSelectionRange(_14,_15);
+}
+}
+}
+};
+}
Index: trunk/web/dojo/dijit/form/VerticalRule.js
===================================================================
--- trunk/web/dojo/dijit/form/VerticalRule.js	(revision 0)
+++ trunk/web/dojo/dijit/form/VerticalRule.js	(revision 9)
@@ -0,0 +1,13 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.VerticalRule"]){
+dojo._hasResource["dijit.form.VerticalRule"]=true;
+dojo.provide("dijit.form.VerticalRule");
+dojo.require("dijit.form.HorizontalRule");
+dojo.declare("dijit.form.VerticalRule",dijit.form.HorizontalRule,{templateString:"<div class=\"dijitRuleContainer dijitRuleContainerV\"></div>",_positionPrefix:"<div class=\"dijitRuleMark dijitRuleMarkV\" style=\"top:",_isHorizontal:false});
+}
Index: trunk/web/dojo/dijit/form/Form.js
===================================================================
--- trunk/web/dojo/dijit/form/Form.js	(revision 0)
+++ trunk/web/dojo/dijit/form/Form.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.form.Form"]){
+dojo._hasResource["dijit.form.Form"]=true;
+dojo.provide("dijit.form.Form");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit.form._FormMixin");
+dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){
+this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";
+this.inherited(arguments);
+},execute:function(_1){
+},onExecute:function(){
+},_setEncTypeAttr:function(_2){
+this.encType=_2;
+dojo.attr(this.domNode,"encType",_2);
+if(dojo.isIE){
+this.domNode.encoding=_2;
+}
+},postCreate:function(){
+if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){
+var _3=this.srcNodeRef.attributes.getNamedItem("encType");
+if(_3&&!_3.specified&&(typeof _3.value=="string")){
+this.set("encType",_3.value);
+}
+}
+this.inherited(arguments);
+},reset:function(e){
+var _4={returnValue:true,preventDefault:function(){
+this.returnValue=false;
+},stopPropagation:function(){
+},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};
+if(!(this.onReset(_4)===false)&&_4.returnValue){
+this.inherited(arguments,[]);
+}
+},onReset:function(e){
+return true;
+},_onReset:function(e){
+this.reset(e);
+dojo.stopEvent(e);
+return false;
+},_onSubmit:function(e){
+var fp=dijit.form.Form.prototype;
+if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){
+dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");
+this.onExecute();
+this.execute(this.getValues());
+}
+if(this.onSubmit(e)===false){
+dojo.stopEvent(e);
+}
+},onSubmit:function(e){
+return this.isValid();
+},submit:function(){
+if(!(this.onSubmit()===false)){
+this.containerNode.submit();
+}
+}});
+}
Index: trunk/web/dojo/dijit/ProgressBar.js
===================================================================
--- trunk/web/dojo/dijit/ProgressBar.js	(revision 0)
+++ trunk/web/dojo/dijit/ProgressBar.js	(revision 9)
@@ -0,0 +1,59 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.ProgressBar"]){
+dojo._hasResource["dijit.ProgressBar"]=true;
+dojo.provide("dijit.ProgressBar");
+dojo.require("dojo.fx");
+dojo.require("dojo.number");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",maximum:100,places:0,indeterminate:false,name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postCreate:function(){
+this.inherited(arguments);
+this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());
+this.update();
+},update:function(_1){
+dojo.mixin(this,_1||{});
+var _2=this.internalProgress;
+var _3=1,_4;
+if(this.indeterminate){
+_4="addClass";
+dijit.removeWaiState(_2,"valuenow");
+dijit.removeWaiState(_2,"valuemin");
+dijit.removeWaiState(_2,"valuemax");
+}else{
+_4="removeClass";
+if(String(this.progress).indexOf("%")!=-1){
+_3=Math.min(parseFloat(this.progress)/100,1);
+this.progress=_3*this.maximum;
+}else{
+this.progress=Math.min(this.progress,this.maximum);
+_3=this.progress/this.maximum;
+}
+var _5=this.report(_3);
+this.label.firstChild.nodeValue=_5;
+dijit.setWaiState(_2,"describedby",this.label.id);
+dijit.setWaiState(_2,"valuenow",this.progress);
+dijit.setWaiState(_2,"valuemin",0);
+dijit.setWaiState(_2,"valuemax",this.maximum);
+}
+dojo[_4](this.domNode,"dijitProgressBarIndeterminate");
+_2.style.width=(_3*100)+"%";
+this.onChange();
+},_setValueAttr:function(v){
+if(v==Infinity){
+this.update({indeterminate:true});
+}else{
+this.update({indeterminate:false,progress:v});
+}
+},_getValueAttr:function(){
+return this.progress;
+},report:function(_6){
+return dojo.number.format(_6,{type:"percent",places:this.places,locale:this.lang});
+},onChange:function(){
+}});
+}
Index: trunk/web/dojo/dijit/_TimePicker.js
===================================================================
--- trunk/web/dojo/dijit/_TimePicker.js	(revision 0)
+++ trunk/web/dojo/dijit/_TimePicker.js	(revision 9)
@@ -0,0 +1,265 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._TimePicker"]){
+dojo._hasResource["dijit._TimePicker"]=true;
+dojo.provide("dijit._TimePicker");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dojo.date.locale");
+dojo.declare("dijit._TimePicker",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/TimePicker.html","<div id=\"widget_${id}\" class=\"dijitMenu\"\n    ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode dijitUpArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" wairole=\"presentation\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9650;</div></div\n    ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n    ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode dijitDownArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" wairole=\"presentation\" role=\"presentation\">&nbsp;</div\n\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div></div\n></div>\n"),baseClass:"dijitTimePicker",clickableIncrement:"T00:15:00",visibleIncrement:"T01:00:00",visibleRange:"T05:00:00",value:new Date(),_visibleIncrement:2,_clickableIncrement:1,_totalIncrements:10,constraints:{},serialize:dojo.date.stamp.toISOString,_filterString:"",setValue:function(_1){
+dojo.deprecated("dijit._TimePicker:setValue() is deprecated.  Use set('value', ...) instead.","","2.0");
+this.set("value",_1);
+},_setValueAttr:function(_2){
+this.value=_2;
+this._showText();
+},onOpen:function(_3){
+if(this._beenOpened&&this.domNode.parentNode){
+var p=dijit.byId(this.domNode.parentNode.dijitPopupParent);
+if(p){
+var _4=p.get("displayedValue");
+if(_4&&!p.parse(_4,p.constraints)){
+this._filterString=_4;
+}else{
+this._filterString="";
+}
+this._showText();
+}
+}
+this._beenOpened=true;
+},isDisabledDate:function(_5,_6){
+return false;
+},_getFilteredNodes:function(_7,_8,_9){
+var _a=[],n,i=_7,_b=this._maxIncrement+Math.abs(i),_c=_9?-1:1,_d=_9?1:0,_e=_9?0:1;
+do{
+i=i-_d;
+n=this._createOption(i);
+if(n){
+_a.push(n);
+}
+i=i+_e;
+}while(_a.length<_8&&(i*_c)<_b);
+if(_9){
+_a.reverse();
+}
+return _a;
+},_showText:function(){
+this.timeMenu.innerHTML="";
+var _f=dojo.date.stamp.fromISOString;
+this._clickableIncrementDate=_f(this.clickableIncrement);
+this._visibleIncrementDate=_f(this.visibleIncrement);
+this._visibleRangeDate=_f(this.visibleRange);
+var _10=function(_11){
+return _11.getHours()*60*60+_11.getMinutes()*60+_11.getSeconds();
+};
+var _12=_10(this._clickableIncrementDate);
+var _13=_10(this._visibleIncrementDate);
+var _14=_10(this._visibleRangeDate);
+var _15=this.value.getTime();
+this._refDate=new Date(_15-_15%(_13*1000));
+this._refDate.setFullYear(1970,0,1);
+this._clickableIncrement=1;
+this._totalIncrements=_14/_12;
+this._visibleIncrement=_13/_12;
+this._maxIncrement=(60*60*24)/_12;
+var _16=this._getFilteredNodes(0,this._totalIncrements>>1,true);
+var _17=this._getFilteredNodes(0,this._totalIncrements>>1,false);
+if(_16.length<this._totalIncrements>>1){
+_16=_16.slice(_16.length/2);
+_17=_17.slice(0,_17.length/2);
+}
+dojo.forEach(_16.concat(_17),function(n){
+this.timeMenu.appendChild(n);
+},this);
+},postCreate:function(){
+if(this.constraints===dijit._TimePicker.prototype.constraints){
+this.constraints={};
+}
+dojo.mixin(this,this.constraints);
+if(!this.constraints.locale){
+this.constraints.locale=this.lang;
+}
+this.connect(this.timeMenu,dojo.isIE?"onmousewheel":"DOMMouseScroll","_mouseWheeled");
+var _18=this;
+var _19=function(){
+_18._connects.push(dijit.typematic.addMouseListener.apply(null,arguments));
+};
+_19(this.upArrow,this,this._onArrowUp,1,50);
+_19(this.downArrow,this,this._onArrowDown,1,50);
+var _1a=function(cb){
+return function(cnt){
+if(cnt>0){
+cb.call(this,arguments);
+}
+};
+};
+var _1b=function(_1c,cb){
+return function(e){
+dojo.stopEvent(e);
+dijit.typematic.trigger(e,this,_1c,_1a(cb),_1c,1,50);
+};
+};
+this.connect(this.upArrow,"onmouseover",_1b(this.upArrow,this._onArrowUp));
+this.connect(this.downArrow,"onmouseover",_1b(this.downArrow,this._onArrowDown));
+this.inherited(arguments);
+},_buttonMouse:function(e){
+dojo.toggleClass(e.currentTarget,e.currentTarget==this.upArrow?"dijitUpArrowHover":"dijitDownArrowHover",e.type=="mouseenter"||e.type=="mouseover");
+},_createOption:function(_1d){
+var _1e=new Date(this._refDate);
+var _1f=this._clickableIncrementDate;
+_1e.setHours(_1e.getHours()+_1f.getHours()*_1d,_1e.getMinutes()+_1f.getMinutes()*_1d,_1e.getSeconds()+_1f.getSeconds()*_1d);
+if(this.constraints.selector=="time"){
+_1e.setFullYear(1970,0,1);
+}
+var _20=dojo.date.locale.format(_1e,this.constraints);
+if(this._filterString&&_20.toLowerCase().indexOf(this._filterString)!==0){
+return null;
+}
+var div=dojo.create("div",{"class":this.baseClass+"Item"});
+div.date=_1e;
+div.index=_1d;
+dojo.create("div",{"class":this.baseClass+"ItemInner",innerHTML:_20},div);
+if(_1d%this._visibleIncrement<1&&_1d%this._visibleIncrement>-1){
+dojo.addClass(div,this.baseClass+"Marker");
+}else{
+if(!(_1d%this._clickableIncrement)){
+dojo.addClass(div,this.baseClass+"Tick");
+}
+}
+if(this.isDisabledDate(_1e)){
+dojo.addClass(div,this.baseClass+"ItemDisabled");
+}
+if(!dojo.date.compare(this.value,_1e,this.constraints.selector)){
+div.selected=true;
+dojo.addClass(div,this.baseClass+"ItemSelected");
+if(dojo.hasClass(div,this.baseClass+"Marker")){
+dojo.addClass(div,this.baseClass+"MarkerSelected");
+}else{
+dojo.addClass(div,this.baseClass+"TickSelected");
+}
+}
+return div;
+},_onOptionSelected:function(tgt){
+var _21=tgt.target.date||tgt.target.parentNode.date;
+if(!_21||this.isDisabledDate(_21)){
+return;
+}
+this._highlighted_option=null;
+this.set("value",_21);
+this.onValueSelected(_21);
+},onValueSelected:function(_22){
+},_highlightOption:function(_23,_24){
+if(!_23){
+return;
+}
+if(_24){
+if(this._highlighted_option){
+this._highlightOption(this._highlighted_option,false);
+}
+this._highlighted_option=_23;
+}else{
+if(this._highlighted_option!==_23){
+return;
+}else{
+this._highlighted_option=null;
+}
+}
+dojo.toggleClass(_23,this.baseClass+"ItemHover",_24);
+if(dojo.hasClass(_23,this.baseClass+"Marker")){
+dojo.toggleClass(_23,this.baseClass+"MarkerHover",_24);
+}else{
+dojo.toggleClass(_23,this.baseClass+"TickHover",_24);
+}
+},onmouseover:function(e){
+this._keyboardSelected=null;
+var tgr=(e.target.parentNode===this.timeMenu)?e.target:e.target.parentNode;
+if(!dojo.hasClass(tgr,this.baseClass+"Item")){
+return;
+}
+this._highlightOption(tgr,true);
+},onmouseout:function(e){
+this._keyboardSelected=null;
+var tgr=(e.target.parentNode===this.timeMenu)?e.target:e.target.parentNode;
+this._highlightOption(tgr,false);
+},_mouseWheeled:function(e){
+this._keyboardSelected=null;
+dojo.stopEvent(e);
+var _25=(dojo.isIE?e.wheelDelta:-e.detail);
+this[(_25>0?"_onArrowUp":"_onArrowDown")]();
+},_onArrowUp:function(_26){
+if(typeof _26=="number"&&_26==-1){
+return;
+}
+if(!this.timeMenu.childNodes.length){
+return;
+}
+var _27=this.timeMenu.childNodes[0].index;
+var _28=this._getFilteredNodes(_27,1,true);
+if(_28.length){
+this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length-1]);
+this.timeMenu.insertBefore(_28[0],this.timeMenu.childNodes[0]);
+}
+},_onArrowDown:function(_29){
+if(typeof _29=="number"&&_29==-1){
+return;
+}
+if(!this.timeMenu.childNodes.length){
+return;
+}
+var _2a=this.timeMenu.childNodes[this.timeMenu.childNodes.length-1].index+1;
+var _2b=this._getFilteredNodes(_2a,1,false);
+if(_2b.length){
+this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
+this.timeMenu.appendChild(_2b[0]);
+}
+},handleKey:function(e){
+var dk=dojo.keys;
+if(e.keyChar||e.charOrCode===dk.BACKSPACE||e.charOrCode==dk.DELETE){
+setTimeout(dojo.hitch(this,function(){
+this._filterString=e.target.value.toLowerCase();
+this._showText();
+}),1);
+}else{
+if(e.charOrCode==dk.DOWN_ARROW||e.charOrCode==dk.UP_ARROW){
+dojo.stopEvent(e);
+if(this._highlighted_option&&!this._highlighted_option.parentNode){
+this._highlighted_option=null;
+}
+var _2c=this.timeMenu,tgt=this._highlighted_option||dojo.query("."+this.baseClass+"ItemSelected",_2c)[0];
+if(!tgt){
+tgt=_2c.childNodes[0];
+}else{
+if(_2c.childNodes.length){
+if(e.charOrCode==dk.DOWN_ARROW&&!tgt.nextSibling){
+this._onArrowDown();
+}else{
+if(e.charOrCode==dk.UP_ARROW&&!tgt.previousSibling){
+this._onArrowUp();
+}
+}
+if(e.charOrCode==dk.DOWN_ARROW){
+tgt=tgt.nextSibling;
+}else{
+tgt=tgt.previousSibling;
+}
+}
+}
+this._highlightOption(tgt,true);
+this._keyboardSelected=tgt;
+}else{
+if(this._highlighted_option&&(e.charOrCode==dk.ENTER||e.charOrCode===dk.TAB)){
+if(!this._keyboardSelected&&e.charOrCode===dk.TAB){
+return;
+}
+if(e.charOrCode==dk.ENTER){
+dojo.stopEvent(e);
+}
+this._onOptionSelected({target:this._highlighted_option});
+}
+}
+}
+}});
+}
Index: trunk/web/dojo/dijit/_CssStateMixin.js
===================================================================
--- trunk/web/dojo/dijit/_CssStateMixin.js	(revision 0)
+++ trunk/web/dojo/dijit/_CssStateMixin.js	(revision 9)
@@ -0,0 +1,149 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._CssStateMixin"]){
+dojo._hasResource["dijit._CssStateMixin"]=true;
+dojo.provide("dijit._CssStateMixin");
+dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},postCreate:function(){
+this.inherited(arguments);
+dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){
+this.connect(this.domNode,e,"_cssMouseEvent");
+},this);
+this.connect(this,"set",function(_1,_2){
+if(arguments.length>=2&&{disabled:true,readOnly:true,checked:true,selected:true}[_1]){
+this._setStateClass();
+}
+});
+dojo.forEach(["_onFocus","_onBlur"],function(ap){
+this.connect(this,ap,"_setStateClass");
+},this);
+for(var ap in this.cssStateNodes){
+this._trackMouseState(this[ap],this.cssStateNodes[ap]);
+}
+this._setStateClass();
+},_cssMouseEvent:function(_3){
+if(!this.disabled){
+switch(_3.type){
+case "mouseenter":
+case "mouseover":
+this._hovering=true;
+this._active=this._mouseDown;
+break;
+case "mouseleave":
+case "mouseout":
+this._hovering=false;
+this._active=false;
+break;
+case "mousedown":
+this._active=true;
+this._mouseDown=true;
+var _4=this.connect(dojo.body(),"onmouseup",function(){
+this._active=false;
+this._mouseDown=false;
+this._setStateClass();
+this.disconnect(_4);
+});
+break;
+}
+this._setStateClass();
+}
+},_setStateClass:function(){
+var _5=this.baseClass.split(" ");
+function _6(_7){
+_5=_5.concat(dojo.map(_5,function(c){
+return c+_7;
+}),"dijit"+_7);
+};
+if(!this.isLeftToRight()){
+_6("Rtl");
+}
+if(this.checked){
+_6("Checked");
+}
+if(this.state){
+_6(this.state);
+}
+if(this.selected){
+_6("Selected");
+}
+if(this.disabled){
+_6("Disabled");
+}else{
+if(this.readOnly){
+_6("ReadOnly");
+}else{
+if(this._active){
+_6("Active");
+}else{
+if(this._hovering){
+_6("Hover");
+}
+}
+}
+}
+if(this._focused){
+_6("Focused");
+}
+var tn=this.stateNode||this.domNode,_8={};
+dojo.forEach(tn.className.split(" "),function(c){
+_8[c]=true;
+});
+if("_stateClasses" in this){
+dojo.forEach(this._stateClasses,function(c){
+delete _8[c];
+});
+}
+dojo.forEach(_5,function(c){
+_8[c]=true;
+});
+var _9=[];
+for(var c in _8){
+_9.push(c);
+}
+tn.className=_9.join(" ");
+this._stateClasses=_5;
+},_trackMouseState:function(_a,_b){
+var _c=false,_d=false,_e=false;
+var _f=this,cn=dojo.hitch(this,"connect",_a);
+function _10(){
+var _11=("disabled" in _f&&_f.disabled)||("readonly" in _f&&_f.readonly);
+dojo.toggleClass(_a,_b+"Hover",_c&&!_d&&!_11);
+dojo.toggleClass(_a,_b+"Active",_d&&!_11);
+dojo.toggleClass(_a,_b+"Focused",_e&&!_11);
+};
+cn("onmouseenter",function(){
+_c=true;
+_10();
+});
+cn("onmouseleave",function(){
+_c=false;
+_d=false;
+_10();
+});
+cn("onmousedown",function(){
+_d=true;
+_10();
+});
+cn("onmouseup",function(){
+_d=false;
+_10();
+});
+cn("onfocus",function(){
+_e=true;
+_10();
+});
+cn("onblur",function(){
+_e=false;
+_10();
+});
+this.connect(this,"set",function(_12,_13){
+if(_12=="disabled"||_12=="readOnly"){
+_10();
+}
+});
+}});
+}
Index: trunk/web/dojo/dijit/ColorPalette.js
===================================================================
--- trunk/web/dojo/dijit/ColorPalette.js	(revision 0)
+++ trunk/web/dojo/dijit/ColorPalette.js	(revision 9)
@@ -0,0 +1,31 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.ColorPalette"]){
+dojo._hasResource["dijit.ColorPalette"]=true;
+dojo.provide("dijit.ColorPalette");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.colors");
+dojo.require("dojo.i18n");
+dojo.require("dijit._PaletteMixin");
+dojo.requireLocalization("dojo","colors",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_palettes:{"7x10":[["white","seashell","cornsilk","lemonchiffon","lightyellow","palegreen","paleturquoise","lightcyan","lavender","plum"],["lightgray","pink","bisque","moccasin","khaki","lightgreen","lightseagreen","lightskyblue","cornflowerblue","violet"],["silver","lightcoral","sandybrown","orange","palegoldenrod","chartreuse","mediumturquoise","skyblue","mediumslateblue","orchid"],["gray","red","orangered","darkorange","yellow","limegreen","darkseagreen","royalblue","slateblue","mediumorchid"],["dimgray","crimson","chocolate","coral","gold","forestgreen","seagreen","blue","blueviolet","darkorchid"],["darkslategray","firebrick","saddlebrown","sienna","olive","green","darkcyan","mediumblue","darkslateblue","darkmagenta"],["black","darkred","maroon","brown","darkolivegreen","darkgreen","midnightblue","navy","indigo","purple"]],"3x4":[["white","lime","green","blue"],["silver","yellow","fuchsia","navy"],["gray","red","purple","black"]]},_imagePaths:{"7x10":dojo.moduleUrl("dijit.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png"),"7x10-rtl":dojo.moduleUrl("dijit.themes","a11y/colors7x10-rtl.png"),"3x4-rtl":dojo.moduleUrl("dijit.themes","a11y/colors3x4-rtl.png")},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",dyeClass:"dijit._Color",buildRendering:function(){
+this.inherited(arguments);
+this.imageNode.setAttribute("src",this._imagePaths[this.palette+(this.isLeftToRight()?"":"-rtl")].toString());
+var _1=dojo.i18n.getLocalization("dojo","colors",this.lang);
+this._preparePalette(this._palettes[this.palette],_1);
+}});
+dojo.declare("dijit._Color",dojo.Color,{constructor:function(_2){
+this._alias=_2;
+this.setColor(dojo.Color.named[_2]);
+},getValue:function(){
+return this.toHex();
+},fillCell:function(_3,_4){
+dojo.create("img",{src:_4,"class":"dijitPaletteImg",alt:this._alias},_3);
+}});
+}
Index: trunk/web/dojo/dijit/InlineEditBox.js
===================================================================
--- trunk/web/dojo/dijit/InlineEditBox.js	(revision 0)
+++ trunk/web/dojo/dijit/InlineEditBox.js	(revision 9)
@@ -0,0 +1,231 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.InlineEditBox"]){
+dojo._hasResource["dijit.InlineEditBox"]=true;
+dojo.provide("dijit.InlineEditBox");
+dojo.require("dojo.i18n");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Container");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.form.TextBox");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit.InlineEditBox",dijit._Widget,{editing:false,autoSave:true,buttonSave:"",buttonCancel:"",renderAsHtml:false,editor:"dijit.form.TextBox",editorWrapper:"dijit._InlineEditor",editorParams:{},onChange:function(_1){
+},onCancel:function(){
+},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>":"<span style='text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",constructor:function(){
+this.editorParams={};
+},postMixInProperties:function(){
+this.inherited(arguments);
+this.displayNode=this.srcNodeRef;
+var _2={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};
+for(var _3 in _2){
+this.connect(this.displayNode,_3,_2[_3]);
+}
+dijit.setWaiRole(this.displayNode,"button");
+if(!this.displayNode.getAttribute("tabIndex")){
+this.displayNode.setAttribute("tabIndex",0);
+}
+if(!this.value&&!("value" in this.params)){
+this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));
+}
+if(!this.value){
+this.displayNode.innerHTML=this.noValueIndicator;
+}
+dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");
+},setDisabled:function(_4){
+dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");
+this.set("disabled",_4);
+},_setDisabledAttr:function(_5){
+this.disabled=_5;
+dijit.setWaiState(this.domNode,"disabled",_5);
+if(_5){
+this.displayNode.removeAttribute("tabIndex");
+}else{
+this.displayNode.setAttribute("tabIndex",0);
+}
+dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_5);
+},_onMouseOver:function(){
+if(!this.disabled){
+dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");
+}
+},_onMouseOut:function(){
+dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");
+},_onClick:function(e){
+if(this.disabled){
+return;
+}
+if(e){
+dojo.stopEvent(e);
+}
+this._onMouseOut();
+setTimeout(dojo.hitch(this,"edit"),0);
+},edit:function(){
+if(this.disabled||this.editing){
+return;
+}
+this.editing=true;
+this._savedPosition=dojo.style(this.displayNode,"position")||"static";
+this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";
+this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";
+if(this.wrapperWidget){
+var ew=this.wrapperWidget.editWidget;
+ew.set("displayedValue" in ew?"displayedValue":"value",this.value);
+}else{
+var _6=dojo.create("span",null,this.domNode,"before");
+var _7=dojo.getObject(this.editorWrapper);
+this.wrapperWidget=new _7({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_6);
+}
+var ww=this.wrapperWidget;
+if(dojo.isIE){
+dijit.focus(dijit.getFocus());
+}
+dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});
+dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});
+dojo.attr(this.displayNode,"tabIndex","-1");
+setTimeout(dojo.hitch(this,function(){
+ww.focus();
+ww._resetValue=ww.getValue();
+}),0);
+},_onBlur:function(){
+this.inherited(arguments);
+if(!this.editing){
+}
+},destroy:function(){
+if(this.wrapperWidget){
+this.wrapperWidget.destroy();
+delete this.wrapperWidget;
+}
+this.inherited(arguments);
+},_showText:function(_8){
+var ww=this.wrapperWidget;
+dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});
+dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});
+dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);
+if(_8){
+dijit.focus(this.displayNode);
+}
+},save:function(_9){
+if(this.disabled||!this.editing){
+return;
+}
+this.editing=false;
+var ww=this.wrapperWidget;
+var _a=ww.getValue();
+this.set("value",_a);
+setTimeout(dojo.hitch(this,"onChange",_a),0);
+this._showText(_9);
+},setValue:function(_b){
+dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated.  Use set('value', ...) instead.","","2.0");
+return this.set("value",_b);
+},_setValueAttr:function(_c){
+this.value=_c=dojo.trim(_c);
+if(!this.renderAsHtml){
+_c=_c.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/\n/g,"<br>");
+}
+this.displayNode.innerHTML=_c||this.noValueIndicator;
+},getValue:function(){
+dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated.  Use get('value') instead.","","2.0");
+return this.get("value");
+},cancel:function(_d){
+if(this.disabled||!this.editing){
+return;
+}
+this.editing=false;
+setTimeout(dojo.hitch(this,"onCancel"),0);
+this._showText(_d);
+}});
+dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){
+this.inherited(arguments);
+this.messages=dojo.i18n.getLocalization("dijit","common",this.lang);
+dojo.forEach(["buttonSave","buttonCancel"],function(_e){
+if(!this[_e]){
+this[_e]=this.messages[_e];
+}
+},this);
+},postCreate:function(){
+var _f=dojo.getObject(this.editor);
+var _10=this.sourceStyle,_11="line-height:"+_10.lineHeight+";",_12=dojo.getComputedStyle(this.domNode);
+dojo.forEach(["Weight","Family","Size","Style"],function(_13){
+var _14=_10["font"+_13],_15=_12["font"+_13];
+if(_15!=_14){
+_11+="font-"+_13+":"+_10["font"+_13]+";";
+}
+},this);
+dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(_16){
+this.domNode.style[_16]=_10[_16];
+},this);
+var _17=this.inlineEditBox.width;
+if(_17=="100%"){
+_11+="width:100%;";
+this.domNode.style.display="block";
+}else{
+_11+="width:"+(_17+(Number(_17)==_17?"px":""))+";";
+}
+var _18=dojo.delegate(this.inlineEditBox.editorParams,{style:_11,dir:this.dir,lang:this.lang});
+_18["displayedValue" in _f.prototype?"displayedValue":"value"]=this.value;
+var ew=(this.editWidget=new _f(_18,this.editorPlaceholder));
+if(this.inlineEditBox.autoSave){
+dojo.destroy(this.buttonContainer);
+this.connect(ew,"onChange","_onChange");
+this.connect(ew,"onKeyPress","_onKeyPress");
+}else{
+if("intermediateChanges" in _f.prototype){
+ew.set("intermediateChanges",true);
+this.connect(ew,"onChange","_onIntermediateChange");
+this.saveButton.set("disabled",true);
+}
+}
+},_onIntermediateChange:function(val){
+this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());
+},destroy:function(){
+this.editWidget.destroy(true);
+this.inherited(arguments);
+},getValue:function(){
+var ew=this.editWidget;
+return String(ew.get("displayedValue" in ew?"displayedValue":"value"));
+},_onKeyPress:function(e){
+if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){
+if(e.altKey||e.ctrlKey){
+return;
+}
+if(e.charOrCode==dojo.keys.ESCAPE){
+dojo.stopEvent(e);
+this.cancel(true);
+}else{
+if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){
+dojo.stopEvent(e);
+this._onChange();
+}
+}
+}
+},_onBlur:function(){
+this.inherited(arguments);
+if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){
+if(this.getValue()==this._resetValue){
+this.cancel(false);
+}else{
+if(this.enableSave()){
+this.save(false);
+}
+}
+}
+},_onChange:function(){
+if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){
+dojo.style(this.inlineEditBox.displayNode,{display:""});
+dijit.focus(this.inlineEditBox.displayNode);
+}
+},enableSave:function(){
+return (this.editWidget.isValid?this.editWidget.isValid():true);
+},focus:function(){
+this.editWidget.focus();
+setTimeout(dojo.hitch(this,function(){
+if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){
+dijit.selectInputText(this.editWidget.focusNode);
+}
+}),0);
+}});
+}
Index: trunk/web/dojo/dijit/_KeyNavContainer.js
===================================================================
--- trunk/web/dojo/dijit/_KeyNavContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/_KeyNavContainer.js	(revision 9)
@@ -0,0 +1,95 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._KeyNavContainer"]){
+dojo._hasResource["dijit._KeyNavContainer"]=true;
+dojo.provide("dijit._KeyNavContainer");
+dojo.require("dijit._Container");
+dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_1,_2){
+var _3=(this._keyNavCodes={});
+var _4=dojo.hitch(this,this.focusPrev);
+var _5=dojo.hitch(this,this.focusNext);
+dojo.forEach(_1,function(_6){
+_3[_6]=_4;
+});
+dojo.forEach(_2,function(_7){
+_3[_7]=_5;
+});
+this.connect(this.domNode,"onkeypress","_onContainerKeypress");
+this.connect(this.domNode,"onfocus","_onContainerFocus");
+},startupKeyNavChildren:function(){
+dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));
+},addChild:function(_8,_9){
+dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);
+this._startupChild(_8);
+},focus:function(){
+this.focusFirstChild();
+},focusFirstChild:function(){
+var _a=this._getFirstFocusableChild();
+if(_a){
+this.focusChild(_a);
+}
+},focusNext:function(){
+var _b=this._getNextFocusableChild(this.focusedChild,1);
+this.focusChild(_b);
+},focusPrev:function(){
+var _c=this._getNextFocusableChild(this.focusedChild,-1);
+this.focusChild(_c,true);
+},focusChild:function(_d,_e){
+if(this.focusedChild&&_d!==this.focusedChild){
+this._onChildBlur(this.focusedChild);
+}
+_d.focus(_e?"end":"start");
+this.focusedChild=_d;
+},_startupChild:function(_f){
+_f.set("tabIndex","-1");
+this.connect(_f,"_onFocus",function(){
+_f.set("tabIndex",this.tabIndex);
+});
+this.connect(_f,"_onBlur",function(){
+_f.set("tabIndex","-1");
+});
+},_onContainerFocus:function(evt){
+if(evt.target!==this.domNode){
+return;
+}
+this.focusFirstChild();
+dojo.attr(this.domNode,"tabIndex","-1");
+},_onBlur:function(evt){
+if(this.tabIndex){
+dojo.attr(this.domNode,"tabIndex",this.tabIndex);
+}
+this.inherited(arguments);
+},_onContainerKeypress:function(evt){
+if(evt.ctrlKey||evt.altKey){
+return;
+}
+var _10=this._keyNavCodes[evt.charOrCode];
+if(_10){
+_10();
+dojo.stopEvent(evt);
+}
+},_onChildBlur:function(_11){
+},_getFirstFocusableChild:function(){
+return this._getNextFocusableChild(null,1);
+},_getNextFocusableChild:function(_12,dir){
+if(_12){
+_12=this._getSiblingOfChild(_12,dir);
+}
+var _13=this.getChildren();
+for(var i=0;i<_13.length;i++){
+if(!_12){
+_12=_13[(dir>0)?0:(_13.length-1)];
+}
+if(_12.isFocusable()){
+return _12;
+}
+_12=this._getSiblingOfChild(_12,dir);
+}
+return null;
+}});
+}
Index: trunk/web/dojo/dijit/Tree.js
===================================================================
--- trunk/web/dojo/dijit/Tree.js	(revision 0)
+++ trunk/web/dojo/dijit/Tree.js	(revision 9)
@@ -0,0 +1,678 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Tree"]){
+dojo._hasResource["dijit.Tree"]=true;
+dojo.provide("dijit.Tree");
+dojo.require("dojo.fx");
+dojo.require("dojo.DeferredList");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit._Contained");
+dojo.require("dijit._CssStateMixin");
+dojo.require("dojo.cookie");
+dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),postCreate:function(){
+this.inherited(arguments);
+this._setExpando();
+this._updateItemClasses(this.item);
+if(this.isExpandable){
+dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);
+}
+},_setIndentAttr:function(_1){
+this.indent=_1;
+var _2=(Math.max(_1,0)*this.tree._nodePixelIndent)+"px";
+dojo.style(this.domNode,"backgroundPosition",_2+" 0px");
+dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_2);
+dojo.forEach(this.getChildren(),function(_3){
+_3.set("indent",_1+1);
+});
+},markProcessing:function(){
+this.state="LOADING";
+this._setExpando(true);
+},unmarkProcessing:function(){
+this._setExpando(false);
+},_updateItemClasses:function(_4){
+var _5=this.tree,_6=_5.model;
+if(_5._v10Compat&&_4===_6.root){
+_4=null;
+}
+this._applyClassAndStyle(_4,"icon","Icon");
+this._applyClassAndStyle(_4,"label","Label");
+this._applyClassAndStyle(_4,"row","Row");
+},_applyClassAndStyle:function(_7,_8,_9){
+var _a="_"+_8+"Class";
+var _b=_8+"Node";
+if(this[_a]){
+dojo.removeClass(this[_b],this[_a]);
+}
+this[_a]=this.tree["get"+_9+"Class"](_7,this.isExpanded);
+if(this[_a]){
+dojo.addClass(this[_b],this[_a]);
+}
+dojo.style(this[_b],this.tree["get"+_9+"Style"](_7,this.isExpanded)||{});
+},_updateLayout:function(){
+var _c=this.getParent();
+if(!_c||_c.rowNode.style.display=="none"){
+dojo.addClass(this.domNode,"dijitTreeIsRoot");
+}else{
+dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());
+}
+},_setExpando:function(_d){
+var _e=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_f=["*","-","+","*"],idx=_d?0:(this.isExpandable?(this.isExpanded?1:2):3);
+dojo.removeClass(this.expandoNode,_e);
+dojo.addClass(this.expandoNode,_e[idx]);
+this.expandoNodeText.innerHTML=_f[idx];
+},expand:function(){
+if(this._expandDeferred){
+return this._expandDeferred;
+}
+this._wipeOut&&this._wipeOut.stop();
+this.isExpanded=true;
+dijit.setWaiState(this.labelNode,"expanded","true");
+dijit.setWaiRole(this.containerNode,"group");
+dojo.addClass(this.contentNode,"dijitTreeContentExpanded");
+this._setExpando();
+this._updateItemClasses(this.item);
+if(this==this.tree.rootNode){
+dijit.setWaiState(this.tree.domNode,"expanded","true");
+}
+var def,_10=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){
+def.callback(true);
+}});
+def=(this._expandDeferred=new dojo.Deferred(function(){
+_10.stop();
+}));
+_10.play();
+return def;
+},collapse:function(){
+if(!this.isExpanded){
+return;
+}
+if(this._expandDeferred){
+this._expandDeferred.cancel();
+delete this._expandDeferred;
+}
+this.isExpanded=false;
+dijit.setWaiState(this.labelNode,"expanded","false");
+if(this==this.tree.rootNode){
+dijit.setWaiState(this.tree.domNode,"expanded","false");
+}
+dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");
+this._setExpando();
+this._updateItemClasses(this.item);
+if(!this._wipeOut){
+this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});
+}
+this._wipeOut.play();
+},indent:0,setChildItems:function(_11){
+var _12=this.tree,_13=_12.model,_14=[];
+dojo.forEach(this.getChildren(),function(_15){
+dijit._Container.prototype.removeChild.call(this,_15);
+},this);
+this.state="LOADED";
+if(_11&&_11.length>0){
+this.isExpandable=true;
+dojo.forEach(_11,function(_16){
+var id=_13.getIdentity(_16),_17=_12._itemNodesMap[id],_18;
+if(_17){
+for(var i=0;i<_17.length;i++){
+if(_17[i]&&!_17[i].getParent()){
+_18=_17[i];
+_18.set("indent",this.indent+1);
+break;
+}
+}
+}
+if(!_18){
+_18=this.tree._createTreeNode({item:_16,tree:_12,isExpandable:_13.mayHaveChildren(_16),label:_12.getLabel(_16),tooltip:_12.getTooltip(_16),dir:_12.dir,lang:_12.lang,indent:this.indent+1});
+if(_17){
+_17.push(_18);
+}else{
+_12._itemNodesMap[id]=[_18];
+}
+}
+this.addChild(_18);
+if(this.tree.autoExpand||this.tree._state(_16)){
+_14.push(_12._expandNode(_18));
+}
+},this);
+dojo.forEach(this.getChildren(),function(_19,idx){
+_19._updateLayout();
+});
+}else{
+this.isExpandable=false;
+}
+if(this._setExpando){
+this._setExpando(false);
+}
+this._updateItemClasses(this.item);
+if(this==_12.rootNode){
+var fc=this.tree.showRoot?this:this.getChildren()[0];
+if(fc){
+fc.setFocusable(true);
+_12.lastFocused=fc;
+}else{
+_12.domNode.setAttribute("tabIndex","0");
+}
+}
+return new dojo.DeferredList(_14);
+},removeChild:function(_1a){
+this.inherited(arguments);
+var _1b=this.getChildren();
+if(_1b.length==0){
+this.isExpandable=false;
+this.collapse();
+}
+dojo.forEach(_1b,function(_1c){
+_1c._updateLayout();
+});
+},makeExpandable:function(){
+this.isExpandable=true;
+this._setExpando(false);
+},_onLabelFocus:function(evt){
+this.tree._onNodeFocus(this);
+},setSelected:function(_1d){
+dijit.setWaiState(this.labelNode,"selected",_1d);
+dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_1d);
+},setFocusable:function(_1e){
+this.labelNode.setAttribute("tabIndex",_1e?"0":"-1");
+},_onClick:function(evt){
+this.tree._onClick(this,evt);
+},_onDblClick:function(evt){
+this.tree._onDblClick(this,evt);
+},_onMouseEnter:function(evt){
+this.tree._onNodeMouseEnter(this,evt);
+},_onMouseLeave:function(evt){
+this.tree._onNodeMouseLeave(this,evt);
+}});
+dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],path:[],selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_1f,_20){
+dojo.publish(this.id,[dojo.mixin({tree:this,event:_1f},_20||{})]);
+},postMixInProperties:function(){
+this.tree=this;
+if(this.autoExpand){
+this.persist=false;
+}
+this._itemNodesMap={};
+if(!this.cookieName){
+this.cookieName=this.id+"SaveStateCookie";
+}
+this._loadDeferred=new dojo.Deferred();
+this.inherited(arguments);
+},postCreate:function(){
+this._initState();
+if(!this.model){
+this._store2model();
+}
+this.connect(this.model,"onChange","_onItemChange");
+this.connect(this.model,"onChildrenChange","_onItemChildrenChange");
+this.connect(this.model,"onDelete","_onItemDelete");
+this._load();
+this.inherited(arguments);
+if(this.dndController){
+if(dojo.isString(this.dndController)){
+this.dndController=dojo.getObject(this.dndController);
+}
+var _21={};
+for(var i=0;i<this.dndParams.length;i++){
+if(this[this.dndParams[i]]){
+_21[this.dndParams[i]]=this[this.dndParams[i]];
+}
+}
+this.dndController=new this.dndController(this,_21);
+}
+},_store2model:function(){
+this._v10Compat=true;
+dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");
+var _22={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};
+if(this.params.mayHaveChildren){
+_22.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");
+}
+if(this.params.getItemChildren){
+_22.getChildren=dojo.hitch(this,function(_23,_24,_25){
+this.getItemChildren((this._v10Compat&&_23===this.model.root)?null:_23,_24,_25);
+});
+}
+this.model=new dijit.tree.ForestStoreModel(_22);
+this.showRoot=Boolean(this.label);
+},onLoad:function(){
+},_load:function(){
+this.model.getRoot(dojo.hitch(this,function(_26){
+var rn=(this.rootNode=this.tree._createTreeNode({item:_26,tree:this,isExpandable:true,label:this.label||this.getLabel(_26),indent:this.showRoot?0:-1}));
+if(!this.showRoot){
+rn.rowNode.style.display="none";
+}
+this.domNode.appendChild(rn.domNode);
+var _27=this.model.getIdentity(_26);
+if(this._itemNodesMap[_27]){
+this._itemNodesMap[_27].push(rn);
+}else{
+this._itemNodesMap[_27]=[rn];
+}
+rn._updateLayout();
+this._expandNode(rn).addCallback(dojo.hitch(this,function(){
+this._loadDeferred.callback(true);
+this.onLoad();
+}));
+}),function(err){
+console.error(this,": error loading root: ",err);
+});
+},getNodesByItem:function(_28){
+if(!_28){
+return [];
+}
+var _29=dojo.isString(_28)?_28:this.model.getIdentity(_28);
+return [].concat(this._itemNodesMap[_29]);
+},_setSelectedItemAttr:function(_2a){
+var _2b=this.get("selectedItem");
+var _2c=(!_2a||dojo.isString(_2a))?_2a:this.model.getIdentity(_2a);
+if(_2c==_2b?this.model.getIdentity(_2b):null){
+return;
+}
+var _2d=this._itemNodesMap[_2c];
+this._selectNode((_2d&&_2d[0])||null);
+},_getSelectedItemAttr:function(){
+return this.selectedNode&&this.selectedNode.item;
+},_setPathAttr:function(_2e){
+var d=new dojo.Deferred();
+this._selectNode(null);
+if(!_2e||!_2e.length){
+d.resolve(true);
+return d;
+}
+this._loadDeferred.addCallback(dojo.hitch(this,function(){
+if(!this.rootNode){
+d.reject(new Error("!this.rootNode"));
+return;
+}
+if(_2e[0]!==this.rootNode.item&&(dojo.isString(_2e[0])&&_2e[0]!=this.model.getIdentity(this.rootNode.item))){
+d.reject(new Error(this.id+":path[0] doesn't match this.rootNode.item.  Maybe you are using the wrong tree."));
+return;
+}
+_2e.shift();
+var _2f=this.rootNode;
+function _30(){
+var _31=_2e.shift(),_32=dojo.isString(_31)?_31:this.model.getIdentity(_31);
+dojo.some(this._itemNodesMap[_32],function(n){
+if(n.getParent()==_2f){
+_2f=n;
+return true;
+}
+return false;
+});
+if(_2e.length){
+this._expandNode(_2f).addCallback(dojo.hitch(this,_30));
+}else{
+this._selectNode(_2f);
+d.resolve(true);
+}
+};
+this._expandNode(_2f).addCallback(dojo.hitch(this,_30));
+}));
+return d;
+},_getPathAttr:function(){
+if(!this.selectedNode){
+return;
+}
+var res=[];
+var _33=this.selectedNode;
+while(_33&&_33!==this.rootNode){
+res.unshift(_33.item);
+_33=_33.getParent();
+}
+res.unshift(this.rootNode.item);
+return res;
+},mayHaveChildren:function(_34){
+},getItemChildren:function(_35,_36){
+},getLabel:function(_37){
+return this.model.getLabel(_37);
+},getIconClass:function(_38,_39){
+return (!_38||this.model.mayHaveChildren(_38))?(_39?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";
+},getLabelClass:function(_3a,_3b){
+},getRowClass:function(_3c,_3d){
+},getIconStyle:function(_3e,_3f){
+},getLabelStyle:function(_40,_41){
+},getRowStyle:function(_42,_43){
+},getTooltip:function(_44){
+return "";
+},_onKeyPress:function(e){
+if(e.altKey){
+return;
+}
+var dk=dojo.keys;
+var _45=dijit.getEnclosingWidget(e.target);
+if(!_45){
+return;
+}
+var key=e.charOrCode;
+if(typeof key=="string"){
+if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){
+this._onLetterKeyNav({node:_45,key:key.toLowerCase()});
+dojo.stopEvent(e);
+}
+}else{
+if(this._curSearch){
+clearTimeout(this._curSearch.timer);
+delete this._curSearch;
+}
+var map=this._keyHandlerMap;
+if(!map){
+map={};
+map[dk.ENTER]="_onEnterKey";
+map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";
+map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";
+map[dk.UP_ARROW]="_onUpArrow";
+map[dk.DOWN_ARROW]="_onDownArrow";
+map[dk.HOME]="_onHomeKey";
+map[dk.END]="_onEndKey";
+this._keyHandlerMap=map;
+}
+if(this._keyHandlerMap[key]){
+this[this._keyHandlerMap[key]]({node:_45,item:_45.item,evt:e});
+dojo.stopEvent(e);
+}
+}
+},_onEnterKey:function(_46,evt){
+this._publish("execute",{item:_46.item,node:_46.node});
+this._selectNode(_46.node);
+this.onClick(_46.item,_46.node,evt);
+},_onDownArrow:function(_47){
+var _48=this._getNextNode(_47.node);
+if(_48&&_48.isTreeNode){
+this.focusNode(_48);
+}
+},_onUpArrow:function(_49){
+var _4a=_49.node;
+var _4b=_4a.getPreviousSibling();
+if(_4b){
+_4a=_4b;
+while(_4a.isExpandable&&_4a.isExpanded&&_4a.hasChildren()){
+var _4c=_4a.getChildren();
+_4a=_4c[_4c.length-1];
+}
+}else{
+var _4d=_4a.getParent();
+if(!(!this.showRoot&&_4d===this.rootNode)){
+_4a=_4d;
+}
+}
+if(_4a&&_4a.isTreeNode){
+this.focusNode(_4a);
+}
+},_onRightArrow:function(_4e){
+var _4f=_4e.node;
+if(_4f.isExpandable&&!_4f.isExpanded){
+this._expandNode(_4f);
+}else{
+if(_4f.hasChildren()){
+_4f=_4f.getChildren()[0];
+if(_4f&&_4f.isTreeNode){
+this.focusNode(_4f);
+}
+}
+}
+},_onLeftArrow:function(_50){
+var _51=_50.node;
+if(_51.isExpandable&&_51.isExpanded){
+this._collapseNode(_51);
+}else{
+var _52=_51.getParent();
+if(_52&&_52.isTreeNode&&!(!this.showRoot&&_52===this.rootNode)){
+this.focusNode(_52);
+}
+}
+},_onHomeKey:function(){
+var _53=this._getRootOrFirstNode();
+if(_53){
+this.focusNode(_53);
+}
+},_onEndKey:function(_54){
+var _55=this.rootNode;
+while(_55.isExpanded){
+var c=_55.getChildren();
+_55=c[c.length-1];
+}
+if(_55&&_55.isTreeNode){
+this.focusNode(_55);
+}
+},multiCharSearchDuration:250,_onLetterKeyNav:function(_56){
+var cs=this._curSearch;
+if(cs){
+cs.pattern=cs.pattern+_56.key;
+clearTimeout(cs.timer);
+}else{
+cs=this._curSearch={pattern:_56.key,startNode:_56.node};
+}
+var _57=this;
+cs.timer=setTimeout(function(){
+delete _57._curSearch;
+},this.multiCharSearchDuration);
+var _58=cs.startNode;
+do{
+_58=this._getNextNode(_58);
+if(!_58){
+_58=this._getRootOrFirstNode();
+}
+}while(_58!==cs.startNode&&(_58.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));
+if(_58&&_58.isTreeNode){
+if(_58!==cs.startNode){
+this.focusNode(_58);
+}
+}
+},_onClick:function(_59,e){
+var _5a=e.target,_5b=(_5a==_59.expandoNode||_5a==_59.expandoNodeText);
+if((this.openOnClick&&_59.isExpandable)||_5b){
+if(_59.isExpandable){
+this._onExpandoClick({node:_59});
+}
+}else{
+this._publish("execute",{item:_59.item,node:_59,evt:e});
+this.onClick(_59.item,_59,e);
+this.focusNode(_59);
+}
+if(!_5b){
+this._selectNode(_59);
+}
+dojo.stopEvent(e);
+},_onDblClick:function(_5c,e){
+var _5d=e.target,_5e=(_5d==_5c.expandoNode||_5d==_5c.expandoNodeText);
+if((this.openOnDblClick&&_5c.isExpandable)||_5e){
+if(_5c.isExpandable){
+this._onExpandoClick({node:_5c});
+}
+}else{
+this._publish("execute",{item:_5c.item,node:_5c,evt:e});
+this.onDblClick(_5c.item,_5c,e);
+this.focusNode(_5c);
+}
+if(!_5e){
+this._selectNode(_5c);
+}
+dojo.stopEvent(e);
+},_onExpandoClick:function(_5f){
+var _60=_5f.node;
+this.focusNode(_60);
+if(_60.isExpanded){
+this._collapseNode(_60);
+}else{
+this._expandNode(_60);
+}
+},onClick:function(_61,_62,evt){
+},onDblClick:function(_63,_64,evt){
+},onOpen:function(_65,_66){
+},onClose:function(_67,_68){
+},_getNextNode:function(_69){
+if(_69.isExpandable&&_69.isExpanded&&_69.hasChildren()){
+return _69.getChildren()[0];
+}else{
+while(_69&&_69.isTreeNode){
+var _6a=_69.getNextSibling();
+if(_6a){
+return _6a;
+}
+_69=_69.getParent();
+}
+return null;
+}
+},_getRootOrFirstNode:function(){
+return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];
+},_collapseNode:function(_6b){
+if(_6b._expandNodeDeferred){
+delete _6b._expandNodeDeferred;
+}
+if(_6b.isExpandable){
+if(_6b.state=="LOADING"){
+return;
+}
+_6b.collapse();
+this.onClose(_6b.item,_6b);
+if(_6b.item){
+this._state(_6b.item,false);
+this._saveState();
+}
+}
+},_expandNode:function(_6c,_6d){
+if(_6c._expandNodeDeferred&&!_6d){
+return _6c._expandNodeDeferred;
+}
+var _6e=this.model,_6f=_6c.item,_70=this;
+switch(_6c.state){
+case "UNCHECKED":
+_6c.markProcessing();
+var def=(_6c._expandNodeDeferred=new dojo.Deferred());
+_6e.getChildren(_6f,function(_71){
+_6c.unmarkProcessing();
+var _72=_6c.setChildItems(_71);
+var ed=_70._expandNode(_6c,true);
+_72.addCallback(function(){
+ed.addCallback(function(){
+def.callback();
+});
+});
+},function(err){
+console.error(_70,": error loading root children: ",err);
+});
+break;
+default:
+def=(_6c._expandNodeDeferred=_6c.expand());
+this.onOpen(_6c.item,_6c);
+if(_6f){
+this._state(_6f,true);
+this._saveState();
+}
+}
+return def;
+},focusNode:function(_73){
+dijit.focus(_73.labelNode);
+},_selectNode:function(_74){
+if(this.selectedNode&&!this.selectedNode._destroyed){
+this.selectedNode.setSelected(false);
+}
+if(_74){
+_74.setSelected(true);
+}
+this.selectedNode=_74;
+},_onNodeFocus:function(_75){
+if(_75&&_75!=this.lastFocused){
+if(this.lastFocused&&!this.lastFocused._destroyed){
+this.lastFocused.setFocusable(false);
+}
+_75.setFocusable(true);
+this.lastFocused=_75;
+}
+},_onNodeMouseEnter:function(_76){
+},_onNodeMouseLeave:function(_77){
+},_onItemChange:function(_78){
+var _79=this.model,_7a=_79.getIdentity(_78),_7b=this._itemNodesMap[_7a];
+if(_7b){
+var _7c=this.getLabel(_78),_7d=this.getTooltip(_78);
+dojo.forEach(_7b,function(_7e){
+_7e.set({item:_78,label:_7c,tooltip:_7d});
+_7e._updateItemClasses(_78);
+});
+}
+},_onItemChildrenChange:function(_7f,_80){
+var _81=this.model,_82=_81.getIdentity(_7f),_83=this._itemNodesMap[_82];
+if(_83){
+dojo.forEach(_83,function(_84){
+_84.setChildItems(_80);
+});
+}
+},_onItemDelete:function(_85){
+var _86=this.model,_87=_86.getIdentity(_85),_88=this._itemNodesMap[_87];
+if(_88){
+dojo.forEach(_88,function(_89){
+var _8a=_89.getParent();
+if(_8a){
+_8a.removeChild(_89);
+}
+_89.destroyRecursive();
+});
+delete this._itemNodesMap[_87];
+}
+},_initState:function(){
+if(this.persist){
+var _8b=dojo.cookie(this.cookieName);
+this._openedItemIds={};
+if(_8b){
+dojo.forEach(_8b.split(","),function(_8c){
+this._openedItemIds[_8c]=true;
+},this);
+}
+}
+},_state:function(_8d,_8e){
+if(!this.persist){
+return false;
+}
+var id=this.model.getIdentity(_8d);
+if(arguments.length===1){
+return this._openedItemIds[id];
+}
+if(_8e){
+this._openedItemIds[id]=true;
+}else{
+delete this._openedItemIds[id];
+}
+},_saveState:function(){
+if(!this.persist){
+return;
+}
+var ary=[];
+for(var id in this._openedItemIds){
+ary.push(id);
+}
+dojo.cookie(this.cookieName,ary.join(","),{expires:365});
+},destroy:function(){
+if(this._curSearch){
+clearTimeout(this._curSearch.timer);
+delete this._curSearch;
+}
+if(this.rootNode){
+this.rootNode.destroyRecursive();
+}
+if(this.dndController&&!dojo.isString(this.dndController)){
+this.dndController.destroy();
+}
+this.rootNode=null;
+this.inherited(arguments);
+},destroyRecursive:function(){
+this.destroy();
+},resize:function(_8f){
+if(_8f){
+dojo.marginBox(this.domNode,_8f);
+dojo.style(this.domNode,"overflow","auto");
+}
+this._nodePixelIndent=dojo.marginBox(this.tree.indentDetector).w;
+if(this.tree.rootNode){
+this.tree.rootNode.set("indent",this.showRoot?0:-1);
+}
+},_createTreeNode:function(_90){
+return new dijit._TreeNode(_90);
+}});
+dojo.require("dijit.tree.TreeStoreModel");
+dojo.require("dijit.tree.ForestStoreModel");
+}
Index: trunk/web/dojo/dijit/resources/_modules.js
===================================================================
--- trunk/web/dojo/dijit/resources/_modules.js	(revision 0)
+++ trunk/web/dojo/dijit/resources/_modules.js	(revision 9)
@@ -0,0 +1,7 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
Index: trunk/web/dojo/dijit/icons/images/editorIconsEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/editorIconsEnabled.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/editorIconsEnabled.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/editorIconsEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/editorIconsEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/editorIconsEnabled_rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/editorIconsEnabled_rtl.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/editorIconsEnabled_rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/editorIconsEnabled_rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/editorIconsEnabled_rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/loadingAnimation_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/loadingAnimation_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/icons/images/loadingAnimation_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/loadingAnimation_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/loadingAnimation_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled_rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled_rtl.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled_rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled_rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/commonIconsObjActDisabled_rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit_rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit_rtl.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit_rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit_rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/commonIconsObjActEnabled8bit_rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/editorIconsDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/editorIconsDisabled.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/editorIconsDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/editorIconsDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/editorIconsDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/images/editorIconsDisabled_rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/icons/images/editorIconsDisabled_rtl.png
===================================================================
--- trunk/web/dojo/dijit/icons/images/editorIconsDisabled_rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/icons/images/editorIconsDisabled_rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/icons/images/editorIconsDisabled_rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/icons/editorIcons.css
===================================================================
--- trunk/web/dojo/dijit/icons/editorIcons.css	(revision 0)
+++ trunk/web/dojo/dijit/icons/editorIcons.css	(revision 9)
@@ -0,0 +1,57 @@
+
+.dijitEditorIcon {
+	background-image: url('images/editorIconsEnabled.png'); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.dijitDisabled .dijitEditorIcon {
+	background-image: url('images/editorIconsDisabled.png'); 
+}
+.dijitEditorIconSep { background-position: 0px; }
+.dijitEditorIconSave { background-position: -18px; }
+.dijitEditorIconPrint { background-position: -36px; }
+.dijitEditorIconCut { background-position: -54px; }
+.dijitEditorIconCopy { background-position: -72px; }
+.dijitEditorIconPaste { background-position: -90px; }
+.dijitEditorIconDelete { background-position: -108px; }
+.dijitEditorIconCancel { background-position: -126px; }
+.dijitEditorIconUndo { background-position: -144px; }
+.dijitEditorIconRedo { background-position: -162px; }
+.dijitEditorIconSelectAll { background-position: -180px; }
+.dijitEditorIconBold { background-position: -198px; }
+.dijitEditorIconItalic { background-position: -216px; }
+.dijitEditorIconUnderline { background-position: -234px; }
+.dijitEditorIconStrikethrough { background-position: -252px; }
+.dijitEditorIconSuperscript { background-position: -270px; }
+.dijitEditorIconSubscript { background-position: -288px; }
+.dijitEditorIconJustifyCenter { background-position: -306px; }
+.dijitEditorIconJustifyFull { background-position: -324px; }
+.dijitEditorIconJustifyLeft { background-position: -342px; }
+.dijitEditorIconJustifyRight { background-position: -360px; }
+.dijitEditorIconIndent { background-position: -378px; }
+.dijitEditorIconOutdent { background-position: -396px; }
+.dijitEditorIconListBulletIndent { background-position: -414px; }
+.dijitEditorIconListBulletOutdent { background-position: -432px; }
+.dijitEditorIconListNumIndent { background-position: -450px; }
+.dijitEditorIconListNumOutdent { background-position: -468px; }
+.dijitEditorIconTabIndent { background-position: -486px; }
+.dijitEditorIconLeftToRight { background-position: -504px; }
+.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
+.dijitEditorIconBackColor { background-position: -540px; }
+.dijitEditorIconForeColor { background-position: -558px; }
+.dijitEditorIconHiliteColor { background-position: -576px; }
+.dijitEditorIconNewPage { background-position: -594px; }
+.dijitEditorIconInsertImage { background-position: -612px; }
+.dijitEditorIconInsertTable { background-position: -630px; }
+.dijitEditorIconSpace { background-position: -648px; }
+.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
+.dijitEditorIconInsertOrderedList { background-position: -684px; }
+.dijitEditorIconInsertUnorderedList { background-position: -702px; }
+.dijitEditorIconCreateLink { background-position: -720px; }
+.dijitEditorIconUnlink { background-position: -738px; }
+.dijitEditorIconViewSource { background-position: -756px; }
+.dijitEditorIconRemoveFormat { background-position: -774px; }
+.dijitEditorIconFullScreen { background-position: -792px; }
+.dijitEditorIconWikiword { background-position: -810px; }
Index: trunk/web/dojo/dijit/icons/editorIcons_rtl.css
===================================================================
--- trunk/web/dojo/dijit/icons/editorIcons_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/icons/editorIcons_rtl.css	(revision 9)
@@ -0,0 +1,10 @@
+
+.dijitEditorRtl .dijitEditorIcon {
+	background-image: url('images/editorIconsEnabled_rtl.png'); 
+}
+.dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url('images/editorIconsDisabled_rtl.png'); 
+}
+.dijitToolbarRtl .dijitToolbarSeparator {
+	background-image: url('images/editorIconsEnabled_rtl.png');
+}
Index: trunk/web/dojo/dijit/icons/commonIcons.css
===================================================================
--- trunk/web/dojo/dijit/icons/commonIcons.css	(revision 0)
+++ trunk/web/dojo/dijit/icons/commonIcons.css	(revision 9)
@@ -0,0 +1,146 @@
+
+.dijitIconSave,
+.dijitIconPrint,
+.dijitIconCut,
+.dijitIconCopy,
+.dijitIconClear,
+.dijitIconDelete,
+.dijitIconUndo,
+.dijitIconEdit,
+.dijitIconNewTask,
+.dijitIconEditTask,
+.dijitIconEditProperty,
+.dijitIconTask,
+.dijitIconFilter,
+.dijitIconConfigure,
+.dijitIconSearch,
+.dijitIconApplication,
+.dijitIconBookmark,
+.dijitIconChart,
+.dijitIconConnector,
+.dijitIconDatabase,
+.dijitIconDocuments,
+.dijitIconMail,
+.dijitLeaf,
+.dijitIconFile,
+.dijitIconFunction,
+.dijitIconKey,
+.dijitIconPackage,
+.dijitIconSample,
+.dijitIconTable,
+.dijitIconUsers,
+.dijitFolderClosed,
+.dijitIconFolderClosed,
+.dijitFolderOpened,
+.dijitIconFolderOpen,
+.dijitIconError {
+	background-image: url('images/commonIconsObjActEnabled.png'); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitIconSave,
+.dj_ie6 .dijitIconPrint,
+.dj_ie6 .dijitIconCut,
+.dj_ie6 .dijitIconCopy,
+.dj_ie6 .dijitIconClear,
+.dj_ie6 .dijitIconDelete,
+.dj_ie6 .dijitIconUndo,
+.dj_ie6 .dijitIconEdit,
+.dj_ie6 .dijitIconNewTask,
+.dj_ie6 .dijitIconEditTask,
+.dj_ie6 .dijitIconEditProperty,
+.dj_ie6 .dijitIconTask,
+.dj_ie6 .dijitIconFilter,
+.dj_ie6 .dijitIconConfigure,
+.dj_ie6 .dijitIconSearch,
+.dj_ie6 .dijitIconApplication,
+.dj_ie6 .dijitIconBookmark,
+.dj_ie6 .dijitIconChart,
+.dj_ie6 .dijitIconConnector,
+.dj_ie6 .dijitIconDatabase,
+.dj_ie6 .dijitIconDocuments,
+.dj_ie6 .dijitIconMail,
+.dj_ie6 .dijitLeaf,
+.dj_ie6 .dijitIconFile,
+.dj_ie6 .dijitIconFunction,
+.dj_ie6 .dijitIconKey,
+.dj_ie6 .dijitIconPackage,
+.dj_ie6 .dijitIconSample,
+.dj_ie6 .dijitIconTable,
+.dj_ie6 .dijitIconUsers,
+.dj_ie6 .dijitFolderClosed,
+.dj_ie6 .dijitIconFolderClosed,
+.dj_ie6 .dijitFolderOpened,
+.dj_ie6 .dijitIconFolderOpen,
+.dj_ie6 .dijitIconError {
+	background-image: url('images/commonIconsObjActEnabled8bit.png');
+}
+.dijitDisabled .dijitIconSave,
+.dijitDisabled .dijitIconPrint,
+.dijitDisabled .dijitIconCut,
+.dijitDisabled .dijitIconCopy,
+.dijitDisabled .dijitIconClear,
+.dijitDisabled .dijitIconDelete,
+.dijitDisabled .dijitIconUndo,
+.dijitDisabled .dijitIconEdit,
+.dijitDisabled .dijitIconNewTask,
+.dijitDisabled .dijitIconEditTask,
+.dijitDisabled .dijitIconEditProperty,
+.dijitDisabled .dijitIconTask,
+.dijitDisabled .dijitIconFilter,
+.dijitDisabled .dijitIconConfigure,
+.dijitDisabled .dijitIconSearch,
+.dijitDisabled .dijitIconApplication,
+.dijitDisabled .dijitIconBookmark,
+.dijitDisabled .dijitIconChart,
+.dijitDisabled .dijitIconConnector,
+.dijitDisabled .dijitIconDatabase,
+.dijitDisabled .dijitIconDocuments,
+.dijitDisabled .dijitIconMail,
+.dijitDisabled .dijitLeaf,
+.dijitDisabled .dijitIconFile,
+.dijitDisabled .dijitIconFunction,
+.dijitDisabled .dijitIconKey,
+.dijitDisabled .dijitIconPackage,
+.dijitDisabled .dijitIconSample,
+.dijitDisabled .dijitIconTable,
+.dijitDisabled .dijitIconUsers,
+.dijitDisabled .dijitFolderClosed,
+.dijitDisabled .dijitIconFolderClosed,
+.dijitDisabled .dijitFolderOpened,
+.dijitDisabled .dijitIconFolderOpen,
+.dijitDisabled .dijitIconError {
+	background-image: url('images/commonIconsObjActDisabled.png'); 
+}
+.dijitIconSave { background-position: 0px; }
+.dijitIconPrint { background-position: -16px; }
+.dijitIconCut { background-position: -32px; }
+.dijitIconCopy { background-position: -48px; }
+.dijitIconClear { background-position: -64px; }
+.dijitIconDelete { background-position: -80px; }
+.dijitIconUndo { background-position: -96px; }
+.dijitIconEdit { background-position: -112px; }
+.dijitIconNewTask { background-position: -128px; }
+.dijitIconEditTask { background-position: -144px; }
+.dijitIconEditProperty { background-position: -166px; }
+.dijitIconTask { background-position: -176px; }
+.dijitIconFilter { background-position: -192px; }
+.dijitIconConfigure { background-position: -208px; }
+.dijitIconSearch { background-position: -224px; }
+.dijitIconError { background-position: -496px; } 
+.dijitIconApplication { background-position: -240px; }
+.dijitIconBookmark { background-position: -256px; }
+.dijitIconChart { background-position: -272px; }
+.dijitIconConnector { background-position: -288px; }
+.dijitIconDatabase { background-position: -304px; }
+.dijitIconDocuments { background-position: -320px; }
+.dijitIconMail { background-position: -336px; }
+.dijitIconFile, .dijitLeaf { background-position: -352px; }
+.dijitIconFunction { background-position: -368px; }
+.dijitIconKey { background-position: -384px; }
+.dijitIconPackage{ background-position: -400px; }
+.dijitIconSample { background-position: -416px; }
+.dijitIconTable { background-position: -432px; }
+.dijitIconUsers { background-position: -448px; }
+.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
+.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
Index: trunk/web/dojo/dijit/icons/commonIcons_rtl.css
===================================================================
--- trunk/web/dojo/dijit/icons/commonIcons_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/icons/commonIcons_rtl.css	(revision 9)
@@ -0,0 +1,117 @@
+
+.dijitRtl .dijitIconSave,
+.dijitRtl .dijitIconPrint,
+.dijitRtl .dijitIconCut,
+.dijitRtl .dijitIconCopy,
+.dijitRtl .dijitIconClear,
+.dijitRtl .dijitIconDelete,
+.dijitRtl .dijitIconUndo,
+.dijitRtl .dijitIconEdit,
+.dijitRtl .dijitIconNewTask,
+.dijitRtl .dijitIconEditTask,
+.dijitRtl .dijitIconEditProperty,
+.dijitRtl .dijitIconTask,
+.dijitRtl .dijitIconFilter,
+.dijitRtl .dijitIconConfigure,
+.dijitRtl .dijitIconSearch,
+.dijitRtl .dijitIconApplication,
+.dijitRtl .dijitIconBookmark,
+.dijitRtl .dijitIconChart,
+.dijitRtl .dijitIconConnector,
+.dijitRtl .dijitIconDatabase,
+.dijitRtl .dijitIconDocuments,
+.dijitRtl .dijitIconMail,
+.dijitRtl .dijitLeaf,
+.dijitRtl .dijitIconFile,
+.dijitRtl .dijitIconFunction,
+.dijitRtl .dijitIconKey,
+.dijitRtl .dijitIconPackage,
+.dijitRtl .dijitIconSample,
+.dijitRtl .dijitIconTable,
+.dijitRtl .dijitIconUsers,
+.dijitRtl .dijitFolderClosed,
+.dijitRtl .dijitIconFolderClosed,
+.dijitRtl .dijitFolderOpened,
+.dijitRtl .dijitIconFolderOpen,
+.dijitRtl .dijitIconError, .dijitRtl .dijitContentPaneError { 
+	background-image: url('images/commonIconsObjActEnabled_rtl.png'); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitRtl .dijitIconSave,
+.dj_ie6 .dijitRtl .dijitIconPrint,
+.dj_ie6 .dijitRtl .dijitIconCut,
+.dj_ie6 .dijitRtl .dijitIconCopy,
+.dj_ie6 .dijitRtl .dijitIconClear,
+.dj_ie6 .dijitRtl .dijitIconDelete,
+.dj_ie6 .dijitRtl .dijitIconUndo,
+.dj_ie6 .dijitRtl .dijitIconEdit,
+.dj_ie6 .dijitRtl .dijitIconNewTask,
+.dj_ie6 .dijitRtl .dijitIconEditTask,
+.dj_ie6 .dijitRtl .dijitIconEditProperty,
+.dj_ie6 .dijitRtl .dijitIconTask,
+.dj_ie6 .dijitRtl .dijitIconFilter,
+.dj_ie6 .dijitRtl .dijitIconConfigure,
+.dj_ie6 .dijitRtl .dijitIconSearch,
+.dj_ie6 .dijitRtl .dijitIconApplication,
+.dj_ie6 .dijitRtl .dijitIconBookmark,
+.dj_ie6 .dijitRtl .dijitIconChart,
+.dj_ie6 .dijitRtl .dijitIconConnector,
+.dj_ie6 .dijitRtl .dijitIconDatabase,
+.dj_ie6 .dijitRtl .dijitIconDocuments,
+.dj_ie6 .dijitRtl .dijitIconMail,
+.dj_ie6 .dijitRtl .dijitLeaf,
+.dj_ie6 .dijitRtl .dijitIconFile,
+.dj_ie6 .dijitRtl .dijitIconFunction,
+.dj_ie6 .dijitRtl .dijitIconKey,
+.dj_ie6 .dijitRtl .dijitIconPackage,
+.dj_ie6 .dijitRtl .dijitIconSample,
+.dj_ie6 .dijitRtl .dijitIconTable,
+.dj_ie6 .dijitRtl .dijitIconUsers,
+.dj_ie6 .dijitRtl .dijitFolderClosed,
+.dj_ie6 .dijitRtl .dijitIconFolderClosed,
+.dj_ie6 .dijitRtl .dijitFolderOpened,
+.dj_ie6 .dijitRtl .dijitIconFolderOpen,
+.dj_ie6 .dijitRtl .dijitIconError, .dj_ie6 .dijitRtl .dijitContentPaneError {
+	background-image: url('images/commonIconsObjActEnabled8bit_rtl.png');
+}
+.dijitRtl .dijitDisabled .dijitIconSave,
+.dijitRtl .dijitDisabled .dijitIconPrint,
+.dijitRtl .dijitDisabled .dijitIconCut,
+.dijitRtl .dijitDisabled .dijitIconCopy,
+.dijitRtl .dijitDisabled .dijitIconClear,
+.dijitRtl .dijitDisabled .dijitIconDelete,
+.dijitRtl .dijitDisabled .dijitIconUndo,
+.dijitRtl .dijitDisabled .dijitIconEdit,
+.dijitRtl .dijitDisabled .dijitIconNewTask,
+.dijitRtl .dijitDisabled .dijitIconEditTask,
+.dijitRtl .dijitDisabled .dijitIconEditProperty,
+.dijitRtl .dijitDisabled .dijitIconTask,
+.dijitRtl .dijitDisabled .dijitIconFilter,
+.dijitRtl .dijitDisabled .dijitIconConfigure,
+.dijitRtl .dijitDisabled .dijitIconSearch,
+.dijitRtl .dijitDisabled .dijitIconApplication,
+.dijitRtl .dijitDisabled .dijitIconBookmark,
+.dijitRtl .dijitDisabled .dijitIconChart,
+.dijitRtl .dijitDisabled .dijitIconConnector,
+.dijitRtl .dijitDisabled .dijitIconDatabase,
+.dijitRtl .dijitDisabled .dijitIconDocuments,
+.dijitRtl .dijitDisabled .dijitIconMail,
+.dijitRtl .dijitDisabled .dijitLeaf,
+.dijitRtl .dijitDisabled .dijitIconFile,
+.dijitRtl .dijitDisabled .dijitIconFunction,
+.dijitRtl .dijitDisabled .dijitIconKey,
+.dijitRtl .dijitDisabled .dijitIconPackage,
+.dijitRtl .dijitDisabled .dijitIconSample,
+.dijitRtl .dijitDisabled .dijitIconTable,
+.dijitRtl .dijitDisabled .dijitIconUsers,
+.dijitRtl .dijitDisabled .dijitFolderClosed,
+.dijitRtl .dijitDisabled .dijitIconFolderClosed,
+.dijitRtl .dijitDisabled .dijitFolderOpened,
+.dijitRtl .dijitDisabled .dijitIconFolderOpen,
+.dijitRtl .dijitDisabled .dijitIconError, .dijitRtl .dijitDisabled .dijitContentPaneError {
+	background-image: url('images/commonIconsObjActDisabled_rtl.png'); 
+}
+.dijitRtl .dijitContentPaneLoading {
+	background:url('images/loadingAnimation_rtl.gif') no-repeat;
+}
Index: trunk/web/dojo/dijit/_PaletteMixin.js
===================================================================
--- trunk/web/dojo/dijit/_PaletteMixin.js	(revision 0)
+++ trunk/web/dojo/dijit/_PaletteMixin.js	(revision 9)
@@ -0,0 +1,98 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._PaletteMixin"]){
+dojo._hasResource["dijit._PaletteMixin"]=true;
+dojo.provide("dijit._PaletteMixin");
+dojo.require("dijit._CssStateMixin");
+dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_1,_2){
+this._cells=[];
+var _3=this._blankGif;
+var _4=dojo.getObject(this.dyeClass);
+for(var _5=0;_5<_1.length;_5++){
+var _6=dojo.create("tr",{tabIndex:"-1"},this.gridNode);
+for(var _7=0;_7<_1[_5].length;_7++){
+var _8=_1[_5][_7];
+if(_8){
+var _9=new _4(_8);
+var _a=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_2[_8]});
+_9.fillCell(_a,_3);
+this.connect(_a,"ondijitclick","_onCellClick");
+this._trackMouseState(_a,this.cellClass);
+dojo.place(_a,_6);
+_a.index=this._cells.length;
+this._cells.push({node:_a,dye:_9});
+}
+}
+}
+this._xDim=_1[0].length;
+this._yDim=_1.length;
+var _b={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};
+for(var _c in _b){
+this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[_c],ctrlKey:false,altKey:false,shiftKey:false},this,function(){
+var _d=_b[_c];
+return function(_e){
+this._navigateByKey(_d,_e);
+};
+}(),this.timeoutChangeRate,this.defaultTimeout));
+}
+},postCreate:function(){
+this.inherited(arguments);
+this._setCurrent(this._cells[0].node);
+},focus:function(){
+dijit.focus(this._currentFocus);
+},_onCellClick:function(_f){
+var _10=_f.currentTarget,_11=this._getDye(_10).getValue();
+this._setCurrent(_10);
+setTimeout(dojo.hitch(this,function(){
+dijit.focus(_10);
+this._setValueAttr(_11,true);
+}));
+dojo.removeClass(_10,"dijitPaletteCellHover");
+dojo.stopEvent(_f);
+},_setCurrent:function(_12){
+if("_currentFocus" in this){
+dojo.attr(this._currentFocus,"tabIndex","-1");
+}
+this._currentFocus=_12;
+if(_12){
+dojo.attr(_12,"tabIndex",this.tabIndex);
+}
+},_setValueAttr:function(_13,_14){
+this.value=null;
+if(this._selectedCell>=0){
+dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");
+}
+this._selectedCell=-1;
+if(_13){
+for(var i=0;i<this._cells.length;i++){
+if(_13==this._cells[i].dye.getValue()){
+this._selectedCell=i;
+this.value=_13;
+dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");
+if(_14||_14===undefined){
+this.onChange(_13);
+}
+break;
+}
+}
+}
+},onChange:function(_15){
+},_navigateByKey:function(_16,_17){
+if(_17==-1){
+return;
+}
+var _18=this._currentFocus.index+_16;
+if(_18<this._cells.length&&_18>-1){
+var _19=this._cells[_18].node;
+this._setCurrent(_19);
+setTimeout(dojo.hitch(dijit,"focus",_19),0);
+}
+},_getDye:function(_1a){
+return this._cells[_1a.index].dye;
+}});
+}
Index: trunk/web/dojo/dijit/Toolbar.js
===================================================================
--- trunk/web/dojo/dijit/Toolbar.js	(revision 0)
+++ trunk/web/dojo/dijit/Toolbar.js	(revision 9)
@@ -0,0 +1,25 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.Toolbar"]){
+dojo._hasResource["dijit.Toolbar"]=true;
+dojo.provide("dijit.Toolbar");
+dojo.require("dijit._Widget");
+dojo.require("dijit._KeyNavContainer");
+dojo.require("dijit._Templated");
+dojo.declare("dijit.Toolbar",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{templateString:"<div class=\"dijit\" waiRole=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){
+this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+this.startupKeyNavChildren();
+this.inherited(arguments);
+}});
+dojo.require("dijit.ToolbarSeparator");
+}
Index: trunk/web/dojo/dijit/_Contained.js
===================================================================
--- trunk/web/dojo/dijit/_Contained.js	(revision 0)
+++ trunk/web/dojo/dijit/_Contained.js	(revision 9)
@@ -0,0 +1,31 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._Contained"]){
+dojo._hasResource["dijit._Contained"]=true;
+dojo.provide("dijit._Contained");
+dojo.declare("dijit._Contained",null,{getParent:function(){
+var _1=dijit.getEnclosingWidget(this.domNode.parentNode);
+return _1&&_1.isContainer?_1:null;
+},_getSibling:function(_2){
+var _3=this.domNode;
+do{
+_3=_3[_2+"Sibling"];
+}while(_3&&_3.nodeType!=1);
+return _3&&dijit.byNode(_3);
+},getPreviousSibling:function(){
+return this._getSibling("previous");
+},getNextSibling:function(){
+return this._getSibling("next");
+},getIndexInParent:function(){
+var p=this.getParent();
+if(!p||!p.getIndexOfChild){
+return -1;
+}
+return p.getIndexOfChild(this);
+}});
+}
Index: trunk/web/dojo/dijit/MenuBarItem.js
===================================================================
--- trunk/web/dojo/dijit/MenuBarItem.js	(revision 0)
+++ trunk/web/dojo/dijit/MenuBarItem.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuBarItem"]){
+dojo._hasResource["dijit.MenuBarItem"]=true;
+dojo.provide("dijit.MenuBarItem");
+dojo.require("dijit.MenuItem");
+dojo.declare("dijit._MenuBarItemMixin",null,{templateString:dojo.cache("dijit","templates/MenuBarItem.html","<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<span dojoAttachPoint=\"containerNode\"></span>\n</div>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"}})});
+dojo.declare("dijit.MenuBarItem",[dijit.MenuItem,dijit._MenuBarItemMixin],{});
+}
Index: trunk/web/dojo/dijit/_editor/range.js
===================================================================
--- trunk/web/dojo/dijit/_editor/range.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/range.js	(revision 9)
@@ -0,0 +1,453 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.range"]){
+dojo._hasResource["dijit._editor.range"]=true;
+dojo.provide("dijit._editor.range");
+dijit.range={};
+dijit.range.getIndex=function(_1,_2){
+var _3=[],_4=[];
+var _5=_2;
+var _6=_1;
+var _7,n;
+while(_1!=_5){
+var i=0;
+_7=_1.parentNode;
+while((n=_7.childNodes[i++])){
+if(n===_1){
+--i;
+break;
+}
+}
+_3.unshift(i);
+_4.unshift(i-_7.childNodes.length);
+_1=_7;
+}
+if(_3.length>0&&_6.nodeType==3){
+n=_6.previousSibling;
+while(n&&n.nodeType==3){
+_3[_3.length-1]--;
+n=n.previousSibling;
+}
+n=_6.nextSibling;
+while(n&&n.nodeType==3){
+_4[_4.length-1]++;
+n=n.nextSibling;
+}
+}
+return {o:_3,r:_4};
+};
+dijit.range.getNode=function(_8,_9){
+if(!dojo.isArray(_8)||_8.length==0){
+return _9;
+}
+var _a=_9;
+dojo.every(_8,function(i){
+if(i>=0&&i<_a.childNodes.length){
+_a=_a.childNodes[i];
+}else{
+_a=null;
+return false;
+}
+return true;
+});
+return _a;
+};
+dijit.range.getCommonAncestor=function(n1,n2,_b){
+_b=_b||n1.ownerDocument.body;
+var _c=function(n){
+var as=[];
+while(n){
+as.unshift(n);
+if(n!==_b){
+n=n.parentNode;
+}else{
+break;
+}
+}
+return as;
+};
+var _d=_c(n1);
+var _e=_c(n2);
+var m=Math.min(_d.length,_e.length);
+var _f=_d[0];
+for(var i=1;i<m;i++){
+if(_d[i]===_e[i]){
+_f=_d[i];
+}else{
+break;
+}
+}
+return _f;
+};
+dijit.range.getAncestor=function(_10,_11,_12){
+_12=_12||_10.ownerDocument.body;
+while(_10&&_10!==_12){
+var _13=_10.nodeName.toUpperCase();
+if(_11.test(_13)){
+return _10;
+}
+_10=_10.parentNode;
+}
+return null;
+};
+dijit.range.BlockTagNames=/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
+dijit.range.getBlockAncestor=function(_14,_15,_16){
+_16=_16||_14.ownerDocument.body;
+_15=_15||dijit.range.BlockTagNames;
+var _17=null,_18;
+while(_14&&_14!==_16){
+var _19=_14.nodeName.toUpperCase();
+if(!_17&&_15.test(_19)){
+_17=_14;
+}
+if(!_18&&(/^(?:BODY|TD|TH|CAPTION)$/).test(_19)){
+_18=_14;
+}
+_14=_14.parentNode;
+}
+return {blockNode:_17,blockContainer:_18||_14.ownerDocument.body};
+};
+dijit.range.atBeginningOfContainer=function(_1a,_1b,_1c){
+var _1d=false;
+var _1e=(_1c==0);
+if(!_1e&&_1b.nodeType==3){
+if(/^[\s\xA0]+$/.test(_1b.nodeValue.substr(0,_1c))){
+_1e=true;
+}
+}
+if(_1e){
+var _1f=_1b;
+_1d=true;
+while(_1f&&_1f!==_1a){
+if(_1f.previousSibling){
+_1d=false;
+break;
+}
+_1f=_1f.parentNode;
+}
+}
+return _1d;
+};
+dijit.range.atEndOfContainer=function(_20,_21,_22){
+var _23=false;
+var _24=(_22==(_21.length||_21.childNodes.length));
+if(!_24&&_21.nodeType==3){
+if(/^[\s\xA0]+$/.test(_21.nodeValue.substr(_22))){
+_24=true;
+}
+}
+if(_24){
+var _25=_21;
+_23=true;
+while(_25&&_25!==_20){
+if(_25.nextSibling){
+_23=false;
+break;
+}
+_25=_25.parentNode;
+}
+}
+return _23;
+};
+dijit.range.adjacentNoneTextNode=function(_26,_27){
+var _28=_26;
+var len=(0-_26.length)||0;
+var _29=_27?"nextSibling":"previousSibling";
+while(_28){
+if(_28.nodeType!=3){
+break;
+}
+len+=_28.length;
+_28=_28[_29];
+}
+return [_28,len];
+};
+dijit.range._w3c=Boolean(window["getSelection"]);
+dijit.range.create=function(win){
+if(dijit.range._w3c){
+return (win||dojo.global).document.createRange();
+}else{
+return new dijit.range.W3CRange;
+}
+};
+dijit.range.getSelection=function(win,_2a){
+if(dijit.range._w3c){
+return win.getSelection();
+}else{
+var s=new dijit.range.ie.selection(win);
+if(!_2a){
+s._getCurrentSelection();
+}
+return s;
+}
+};
+if(!dijit.range._w3c){
+dijit.range.ie={cachedSelection:{},selection:function(win){
+this._ranges=[];
+this.addRange=function(r,_2b){
+this._ranges.push(r);
+if(!_2b){
+r._select();
+}
+this.rangeCount=this._ranges.length;
+};
+this.removeAllRanges=function(){
+this._ranges=[];
+this.rangeCount=0;
+};
+var _2c=function(){
+var r=win.document.selection.createRange();
+var _2d=win.document.selection.type.toUpperCase();
+if(_2d=="CONTROL"){
+return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
+}else{
+return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
+}
+};
+this.getRangeAt=function(i){
+return this._ranges[i];
+};
+this._getCurrentSelection=function(){
+this.removeAllRanges();
+var r=_2c();
+if(r){
+this.addRange(r,true);
+}
+};
+},decomposeControlRange:function(_2e){
+var _2f=_2e.item(0),_30=_2e.item(_2e.length-1);
+var _31=_2f.parentNode,_32=_30.parentNode;
+var _33=dijit.range.getIndex(_2f,_31).o;
+var _34=dijit.range.getIndex(_30,_32).o+1;
+return [_31,_33,_32,_34];
+},getEndPoint:function(_35,end){
+var _36=_35.duplicate();
+_36.collapse(!end);
+var _37="EndTo"+(end?"End":"Start");
+var _38=_36.parentElement();
+var _39,_3a,_3b;
+if(_38.childNodes.length>0){
+dojo.every(_38.childNodes,function(_3c,i){
+var _3d;
+if(_3c.nodeType!=3){
+_36.moveToElementText(_3c);
+if(_36.compareEndPoints(_37,_35)>0){
+if(_3b&&_3b.nodeType==3){
+_39=_3b;
+_3d=true;
+}else{
+_39=_38;
+_3a=i;
+return false;
+}
+}else{
+if(i==_38.childNodes.length-1){
+_39=_38;
+_3a=_38.childNodes.length;
+return false;
+}
+}
+}else{
+if(i==_38.childNodes.length-1){
+_39=_3c;
+_3d=true;
+}
+}
+if(_3d&&_39){
+var _3e=dijit.range.adjacentNoneTextNode(_39)[0];
+if(_3e){
+_39=_3e.nextSibling;
+}else{
+_39=_38.firstChild;
+}
+var _3f=dijit.range.adjacentNoneTextNode(_39);
+_3e=_3f[0];
+var _40=_3f[1];
+if(_3e){
+_36.moveToElementText(_3e);
+_36.collapse(false);
+}else{
+_36.moveToElementText(_38);
+}
+_36.setEndPoint(_37,_35);
+_3a=_36.text.length-_40;
+return false;
+}
+_3b=_3c;
+return true;
+});
+}else{
+_39=_38;
+_3a=0;
+}
+if(!end&&_39.nodeType==1&&_3a==_39.childNodes.length){
+var _41=_39.nextSibling;
+if(_41&&_41.nodeType==3){
+_39=_41;
+_3a=0;
+}
+}
+return [_39,_3a];
+},setEndPoint:function(_42,_43,_44){
+var _45=_42.duplicate(),_46,len;
+if(_43.nodeType!=3){
+if(_44>0){
+_46=_43.childNodes[_44-1];
+if(_46){
+if(_46.nodeType==3){
+_43=_46;
+_44=_46.length;
+}else{
+if(_46.nextSibling&&_46.nextSibling.nodeType==3){
+_43=_46.nextSibling;
+_44=0;
+}else{
+_45.moveToElementText(_46.nextSibling?_46:_43);
+var _47=_46.parentNode;
+var _48=_47.insertBefore(_46.ownerDocument.createTextNode(" "),_46.nextSibling);
+_45.collapse(false);
+_47.removeChild(_48);
+}
+}
+}
+}else{
+_45.moveToElementText(_43);
+_45.collapse(true);
+}
+}
+if(_43.nodeType==3){
+var _49=dijit.range.adjacentNoneTextNode(_43);
+var _4a=_49[0];
+len=_49[1];
+if(_4a){
+_45.moveToElementText(_4a);
+_45.collapse(false);
+if(_4a.contentEditable!="inherit"){
+len++;
+}
+}else{
+_45.moveToElementText(_43.parentNode);
+_45.collapse(true);
+}
+_44+=len;
+if(_44>0){
+if(_45.move("character",_44)!=_44){
+console.error("Error when moving!");
+}
+}
+}
+return _45;
+},decomposeTextRange:function(_4b){
+var _4c=dijit.range.ie.getEndPoint(_4b);
+var _4d=_4c[0],_4e=_4c[1];
+var _4f=_4c[0],_50=_4c[1];
+if(_4b.htmlText.length){
+if(_4b.htmlText==_4b.text){
+_50=_4e+_4b.text.length;
+}else{
+_4c=dijit.range.ie.getEndPoint(_4b,true);
+_4f=_4c[0],_50=_4c[1];
+}
+}
+return [_4d,_4e,_4f,_50];
+},setRange:function(_51,_52,_53,_54,_55,_56){
+var _57=dijit.range.ie.setEndPoint(_51,_52,_53);
+_51.setEndPoint("StartToStart",_57);
+if(!_56){
+var end=dijit.range.ie.setEndPoint(_51,_54,_55);
+}
+_51.setEndPoint("EndToEnd",end||_57);
+return _51;
+}};
+dojo.declare("dijit.range.W3CRange",null,{constructor:function(){
+if(arguments.length>0){
+this.setStart(arguments[0][0],arguments[0][1]);
+this.setEnd(arguments[0][2],arguments[0][3]);
+}else{
+this.commonAncestorContainer=null;
+this.startContainer=null;
+this.startOffset=0;
+this.endContainer=null;
+this.endOffset=0;
+this.collapsed=true;
+}
+},_updateInternal:function(){
+if(this.startContainer!==this.endContainer){
+this.commonAncestorContainer=dijit.range.getCommonAncestor(this.startContainer,this.endContainer);
+}else{
+this.commonAncestorContainer=this.startContainer;
+}
+this.collapsed=(this.startContainer===this.endContainer)&&(this.startOffset==this.endOffset);
+},setStart:function(_58,_59){
+_59=parseInt(_59);
+if(this.startContainer===_58&&this.startOffset==_59){
+return;
+}
+delete this._cachedBookmark;
+this.startContainer=_58;
+this.startOffset=_59;
+if(!this.endContainer){
+this.setEnd(_58,_59);
+}else{
+this._updateInternal();
+}
+},setEnd:function(_5a,_5b){
+_5b=parseInt(_5b);
+if(this.endContainer===_5a&&this.endOffset==_5b){
+return;
+}
+delete this._cachedBookmark;
+this.endContainer=_5a;
+this.endOffset=_5b;
+if(!this.startContainer){
+this.setStart(_5a,_5b);
+}else{
+this._updateInternal();
+}
+},setStartAfter:function(_5c,_5d){
+this._setPoint("setStart",_5c,_5d,1);
+},setStartBefore:function(_5e,_5f){
+this._setPoint("setStart",_5e,_5f,0);
+},setEndAfter:function(_60,_61){
+this._setPoint("setEnd",_60,_61,1);
+},setEndBefore:function(_62,_63){
+this._setPoint("setEnd",_62,_63,0);
+},_setPoint:function(_64,_65,_66,ext){
+var _67=dijit.range.getIndex(_65,_65.parentNode).o;
+this[_64](_65.parentNode,_67.pop()+ext);
+},_getIERange:function(){
+var r=(this._body||this.endContainer.ownerDocument.body).createTextRange();
+dijit.range.ie.setRange(r,this.startContainer,this.startOffset,this.endContainer,this.endOffset,this.collapsed);
+return r;
+},getBookmark:function(_68){
+this._getIERange();
+return this._cachedBookmark;
+},_select:function(){
+var r=this._getIERange();
+r.select();
+},deleteContents:function(){
+var r=this._getIERange();
+r.pasteHTML("");
+this.endContainer=this.startContainer;
+this.endOffset=this.startOffset;
+this.collapsed=true;
+},cloneRange:function(){
+var r=new dijit.range.W3CRange([this.startContainer,this.startOffset,this.endContainer,this.endOffset]);
+r._body=this._body;
+return r;
+},detach:function(){
+this._body=null;
+this.commonAncestorContainer=null;
+this.startContainer=null;
+this.startOffset=0;
+this.endContainer=null;
+this.endOffset=0;
+this.collapsed=true;
+}});
+}
+}
Index: trunk/web/dojo/dijit/_editor/_Plugin.js
===================================================================
--- trunk/web/dojo/dijit/_editor/_Plugin.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/_Plugin.js	(revision 9)
@@ -0,0 +1,73 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor._Plugin"]){
+dojo._hasResource["dijit._editor._Plugin"]=true;
+dojo.provide("dijit._editor._Plugin");
+dojo.require("dijit._Widget");
+dojo.require("dijit.form.Button");
+dojo.declare("dijit._editor._Plugin",null,{constructor:function(_1,_2){
+this.params=_1||{};
+dojo.mixin(this,this.params);
+this._connects=[];
+},editor:null,iconClassPrefix:"dijitEditorIcon",button:null,command:"",useDefaultCommand:true,buttonClass:dijit.form.Button,getLabel:function(_3){
+return this.editor.commands[_3];
+},_initButton:function(){
+if(this.command.length){
+var _4=this.getLabel(this.command),_5=this.editor,_6=this.iconClassPrefix+" "+this.iconClassPrefix+this.command.charAt(0).toUpperCase()+this.command.substr(1);
+if(!this.button){
+var _7=dojo.mixin({label:_4,dir:_5.dir,lang:_5.lang,showLabel:false,iconClass:_6,dropDown:this.dropDown,tabIndex:"-1"},this.params||{});
+this.button=new this.buttonClass(_7);
+}
+}
+},destroy:function(){
+dojo.forEach(this._connects,dojo.disconnect);
+if(this.dropDown){
+this.dropDown.destroyRecursive();
+}
+},connect:function(o,f,tf){
+this._connects.push(dojo.connect(o,f,this,tf));
+},updateState:function(){
+var e=this.editor,c=this.command,_8,_9;
+if(!e||!e.isLoaded||!c.length){
+return;
+}
+if(this.button){
+try{
+_9=e.queryCommandEnabled(c);
+if(this.enabled!==_9){
+this.enabled=_9;
+this.button.set("disabled",!_9);
+}
+if(typeof this.button.checked=="boolean"){
+_8=e.queryCommandState(c);
+if(this.checked!==_8){
+this.checked=_8;
+this.button.set("checked",e.queryCommandState(c));
+}
+}
+}
+catch(e){
+}
+}
+},setEditor:function(_a){
+this.editor=_a;
+this._initButton();
+if(this.button&&this.useDefaultCommand){
+if(this.editor.queryCommandAvailable(this.command)){
+this.connect(this.button,"onClick",dojo.hitch(this.editor,"execCommand",this.command,this.commandArg));
+}else{
+this.button.domNode.style.display="none";
+}
+}
+this.connect(this.editor,"onNormalizedDisplayChanged","updateState");
+},setToolbar:function(_b){
+if(this.button){
+_b.addChild(this.button);
+}
+}});
+}
Index: trunk/web/dojo/dijit/_editor/nls/el/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/el/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/el/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Περιγραφή:","insertImageTitle":"Ιδιότητες εικόνας","set":"Ορισμός","newWindow":"Νέο παράθυρο","topWindow":"Παράθυρο σε πρώτο πλάνο","target":"Προορισμός:","createLinkTitle":"Ιδιότητες σύνδεσης","parentWindow":"Γονικό παράθυρο","currentWindow":"Τρέχον παράθυρο","url":"Διεύθυνση URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/el/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/el/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/el/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-μικρά","2":"x-μικρά","formatBlock":"Μορφή","3":"μικρά","4":"μεσαία","5":"μεγάλα","6":"x-μεγάλα","7":"xx-μεγάλα","fantasy":"φαντασίας","serif":"με πατούρες (serif)","p":"Παράγραφος","pre":"Προ-μορφοποιημένο","sans-serif":"χωρίς πατούρες (sans-serif)","fontName":"Γραμματοσειρά","h1":"Επικεφαλίδα","h2":"Δευτερεύουσα επικεφαλίδα","h3":"Δευτερεύουσα επικεφαλίδα τρίτου επιπέδου","monospace":"σταθερού πλάτους","fontSize":"Μέγεθος","cursive":"πλάγιοι","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/el/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/el/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/el/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Αφαίρεση μορφοποίησης","copy":"Αντιγραφή","paste":"Επικόλληση","selectAll":"Επιλογή όλων","insertOrderedList":"Αριθμημένη λίστα","insertTable":"Εισαγωγή/Τροποποίηση πίνακα","print":"Εκτύπωση","underline":"Υπογράμμιση","foreColor":"Χρώμα προσκηνίου","htmlToggle":"Πρωτογενής κώδικας HTML","formatBlock":"Στυλ παραγράφου","newPage":"Νέα σελίδα","insertHorizontalRule":"Οριζόντια γραμμή","delete":"Διαγραφή","insertUnorderedList":"Λίστα με κουκίδες","tableProp":"Ιδιότητα πίνακα","insertImage":"Εισαγωγή εικόνας","superscript":"Εκθέτης","subscript":"Δείκτης","createLink":"Δημιουργία σύνδεσης","undo":"Αναίρεση","fullScreen":"Εναλλαγή κατάστασης πλήρους οθόνης","italic":"Πλάγια","fontName":"Όνομα γραμματοσειράς","justifyLeft":"Στοίχιση αριστερά","unlink":"Αφαίρεση σύνδεσης","toggleTableBorder":"Εναλλαγή εμφάνισης περιγράμματος πίνακα","viewSource":"Προβολή προέλευσης HTML","fontSize":"Μέγεθος γραμματοσειράς","systemShortcut":"Σε αυτό το πρόγραμμα πλοήγησης, η ενέργεια \"${0}\" είναι διαθέσιμη μόνο με τη χρήση μιας συντόμευσης πληκτρολογίου. Χρησιμοποιήστε τη συντόμευση ${1}.","indent":"Εσοχή","redo":"Ακύρωση αναίρεσης","strikethrough":"Διαγράμμιση","justifyFull":"Πλήρης στοίχιση","justifyCenter":"Στοίχιση στο κέντρο","hiliteColor":"Χρώμα φόντου","deleteTable":"Διαγραφή πίνακα","outdent":"Μείωση περιθωρίου","cut":"Αποκοπή","plainFormatBlock":"Στυλ παραγράφου","toggleDir":"Εναλλαγή κατεύθυνσης","bold":"Έντονα","tabIndent":"Εσοχή με το πλήκτρο Tab","justifyRight":"Στοίχιση δεξιά","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ar/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ar/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ar/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"الوصف:","insertImageTitle":"خصائص الصورة","set":"تحديد","newWindow":"نافذة جديدة","topWindow":"النافذة العلوية","target":"الهدف: ","createLinkTitle":"خصائص الوصلة","parentWindow":"النافذة الرئيسية","currentWindow":"النافذة الحالية","url":"عنوان URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ar/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ar/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ar/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"صغير جدا جدا","2":"صغير جدا","formatBlock":"النسق","3":"صغير","4":"متوسط","5":"كبير","6":"كبير جدا","7":"كبير جدا جدا","fantasy":"خيالي","serif":"serif","p":"فقرة","pre":"منسق بصفة مسبقة","sans-serif":"sans-serif","fontName":"طاقم طباعة","h1":"عنوان","h2":"عنوان فرعي","h3":"فرعي-عنوان فرعي","monospace":"أحادي المسافة","fontSize":"الحجم","cursive":"كتابة بحروف متصلة","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ar/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ar/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ar/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"ازالة النسق","copy":"نسخ","paste":"لصق","selectAll":"اختيار كل","insertOrderedList":"‏كشف مرقم‏","insertTable":"ادراج/تحرير جدول","print":"‏طباعة‏","underline":"~تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","newPage":"صفحة جديدة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","fullScreen":"تبديل الشاشة الكاملة","italic":"~مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","viewSource":"‫مشاهدة مصدر HTML‬","ctrlKey":"ctrl+${0}","fontSize":"حجم طاقم الطباعة","systemShortcut":"التصرف \"${0}\" يكون متاحا فقط في برنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح. استخدم ${1}.","indent":"‏ازاحة للداخل‏","redo":"‏اعادة‏","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عري~ض","tabIndent":"ازاحة للداخل باستخدام Tab","justifyRight":"محاذاة الى اليمين","appleKey":"⌘${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Descrição:","insertImageTitle":"Propriedades da imagem","set":"Definir","newWindow":"Nova janela","topWindow":"Janela superior","target":"Destino:","createLinkTitle":"Propriedades da ligação","parentWindow":"Janela ascendente","currentWindow":"Janela actual","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pt-pt/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pt-pt/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pt-pt/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xxs","2":"xs","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"xl","7":"xxl","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Tipo de letra","h1":"Título","h2":"Sub-título","h3":"Sub-subtítulo","monospace":"monospace","fontSize":"Tamanho","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pt-pt/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pt-pt/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pt-pt/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Remover formato","copy":"Copiar","paste":"Colar","selectAll":"Seleccionar tudo","insertOrderedList":"Lista numerada","insertTable":"Inserir/Editar tabela","print":"Imprimir","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de parágrafo","newPage":"Nova página","insertHorizontalRule":"Régua horizontal","delete":"Eliminar","insertUnorderedList":"Lista marcada","tableProp":"Propriedades da tabela","insertImage":"Inserir imagem","superscript":"Superior à linha","subscript":"Inferior à linha","createLink":"Criar ligação","undo":"Anular","fullScreen":"Alternar ecrã completo","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","viewSource":"Ver origem HTML","fontSize":"Tamanho do tipo de letra","systemShortcut":"A acção \"${0}\" apenas está disponível no navegador utilizando um atalho de teclado. Utilize ${1}.","indent":"Indentar","redo":"Repetir","strikethrough":"Rasurado","justifyFull":"Justificar","justifyCenter":"Alinhar ao centro","hiliteColor":"Cor de segundo plano","deleteTable":"Eliminar tabela","outdent":"Recuar","cut":"Cortar","plainFormatBlock":"Estilo de parágrafo","toggleDir":"Alternar direcção","bold":"Negrito","tabIndent":"Indentar com a tecla Tab","justifyRight":"Alinhar à direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/cs/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/cs/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/cs/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Popis:","insertImageTitle":"Vlastnosti obrázku","set":"Nastavit","newWindow":"Nové okno","topWindow":"Okno nejvyšší úrovně","target":"Cíl:","createLinkTitle":"Vlastnosti odkazu","parentWindow":"Nadřízené okno","currentWindow":"Aktuální okno","url":"Adresa URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/cs/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/cs/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/cs/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"extra malé","2":"velmi malé","formatBlock":"Formát","3":"malé","4":"střední","5":"velké","6":"velmi velké","7":"extra velké","fantasy":"fantasy","serif":"serif","p":"Odstavec","pre":"Předformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Nadpis","h2":"Podnadpis","h3":"Podnadpis 2","monospace":"monospace","fontSize":"Velikost","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/cs/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/cs/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/cs/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Odebrat formát","copy":"Kopírovat","paste":"Vložit","selectAll":"Vybrat vše","insertOrderedList":"Číslovaný seznam","insertTable":"Vložit/upravit tabulku","print":"Tisk","underline":"Podtržení","foreColor":"Barva popředí","htmlToggle":"Zdroj HTML","formatBlock":"Styl odstavce","newPage":"Nová stránka","insertHorizontalRule":"Vodorovná čára","delete":"Odstranit","insertUnorderedList":"Seznam s odrážkami","tableProp":"Vlastnost tabulky","insertImage":"Vložit obrázek","superscript":"Horní index","subscript":"Dolní index","createLink":"Vytvořit odkaz","undo":"Zpět","fullScreen":"Přepnout režim celé obrazovky","italic":"Kurzíva","fontName":"Název písma","justifyLeft":"Zarovnat vlevo","unlink":"Odebrat odkaz","toggleTableBorder":"Přepnout ohraničení tabulky","viewSource":"Zobrazit zdroj ve formátu HTML","fontSize":"Velikost písma","systemShortcut":"Akce \"${0}\" je v prohlížeči dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesovou zkratku ${1}.","indent":"Odsadit","redo":"Opakovat","strikethrough":"Přeškrtnutí","justifyFull":"Do bloku","justifyCenter":"Zarovnat na střed","hiliteColor":"Barva pozadí","deleteTable":"Odstranit tabulku","outdent":"Předsadit","cut":"Vyjmout","plainFormatBlock":"Styl odstavce","toggleDir":"Přepnout směr","bold":"Tučné","tabIndent":"Odsazení tabulátoru","justifyRight":"Zarovnat vpravo","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/es/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/es/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/es/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-pequeño","2":"x-pequeño","formatBlock":"Formato","3":"pequeño","4":"medio","5":"grande","6":"x-grande","7":"xx-grande","fantasy":"fantasía","serif":"serif","p":"Párrafo","pre":"Preformateado","sans-serif":"sans-serif","fontName":"Font","h1":"Cabecera","h2":"Subcabecera","h3":"Sub-subcabecera","monospace":"espacio sencillo","fontSize":"Tamaño","cursive":"cursiva","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/es/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/es/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/es/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Eliminar formato","copy":"Copiar","paste":"Pegar","selectAll":"Seleccionar todo","insertOrderedList":"Lista numerada","insertTable":"Insertar/Editar tabla","print":"Imprimir","underline":"Subrayado","foreColor":"Color de primer plano","htmlToggle":"Fuente HTML","formatBlock":"Estilo de párrafo","newPage":"Nueva página","insertHorizontalRule":"Regla horizontal","delete":"Suprimir","insertUnorderedList":"Lista con viñetas","tableProp":"Propiedad de tabla","insertImage":"Insertar imagen","superscript":"Superíndice","subscript":"Subíndice","createLink":"Crear enlace","undo":"Deshacer","fullScreen":"Conmutar pantalla completa","italic":"Cursiva","fontName":"Nombre de font","justifyLeft":"Alinear izquierda","unlink":"Eliminar enlace","toggleTableBorder":"Conmutar borde de tabla","viewSource":"Ver fuente HTML","ctrlKey":"control+${0}","fontSize":"Tamaño de font","systemShortcut":"La acción \"${0}\" sólo está disponible en su navegador mediante un atajo de teclado. Utilice ${1}.","indent":"Sangría","redo":"Rehacer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinear centro","hiliteColor":"Color de segundo plano","deleteTable":"Suprimir tabla","outdent":"Anular sangría","cut":"Cortar","plainFormatBlock":"Estilo de párrafo","toggleDir":"Conmutar dirección","bold":"Negrita","tabIndent":"Sangría de tabulador","justifyRight":"Alinear derecha","appleKey":"⌘${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/es/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/es/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/es/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Descripción: ","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino: ","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/fr/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/fr/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/fr/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Description :","insertImageTitle":"Propriétés des images","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Première fenêtre","target":"Cible :","createLinkTitle":"Propriétés des liens","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre en cours","url":"URL :"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/fr/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/fr/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/fr/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xxs","2":"xs","formatBlock":"Mise en forme","3":"s","4":"m","5":"l","6":"xl","7":"xxl","fantasy":"fantaisie","serif":"serif","p":"Paragraphe","pre":"Pré-mise en forme","sans-serif":"sans serif","fontName":"Police","h1":"En-tête","h2":"Sous-en-tête","h3":"Sous-sous-en-tête","monospace":"espacement fixe","fontSize":"Taille","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/fr/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/fr/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/fr/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer vers le mode plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"Action \"${0}\" uniquement disponible dans votre navigateur via un raccourci clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/zh-tw/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/zh-tw/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/zh-tw/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"說明：","insertImageTitle":"影像內容","set":"設定","newWindow":"新視窗","topWindow":"最上面的視窗","target":"目標：","createLinkTitle":"鏈結內容","parentWindow":"上層視窗","currentWindow":"現行視窗","url":"URL："})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/zh-tw/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/zh-tw/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/zh-tw/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"最小","2":"較小","formatBlock":"格式","3":"小","4":"中","5":"大","6":"較大","7":"最大","fantasy":"Fantasy","serif":"新細明體","p":"段落","pre":"預先格式化","sans-serif":"新細明體","fontName":"字型","h1":"標題","h2":"子標題","h3":"次子標題","monospace":"等寬","fontSize":"大小","cursive":"Cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/zh-tw/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/zh-tw/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/zh-tw/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"移除格式","copy":"複製","paste":"貼上","selectAll":"全選","insertOrderedList":"編號清單","insertTable":"插入/編輯表格","print":"列印","underline":"底線","foreColor":"前景顏色","htmlToggle":"HTML 原始檔","formatBlock":"段落樣式","newPage":"新建頁面","insertHorizontalRule":"水平尺規","delete":"刪除","insertUnorderedList":"項目符號清單","tableProp":"表格內容","insertImage":"插入影像","superscript":"上標","subscript":"下標","createLink":"建立鏈結","undo":"復原","fullScreen":"切換全螢幕","italic":"斜體","fontName":"字型名稱","justifyLeft":"靠左對齊","unlink":"移除鏈結","toggleTableBorder":"切換表格邊框","viewSource":"檢視 HTML 原始檔","fontSize":"字型大小","systemShortcut":"\"${0}\" 動作只能在瀏覽器中透過使用鍵盤快速鍵來使用。請使用 ${1}。","indent":"縮排","redo":"重做","strikethrough":"加刪除線","justifyFull":"對齊","justifyCenter":"置中對齊","hiliteColor":"背景顏色","deleteTable":"刪除表格","outdent":"凸排","cut":"剪下","plainFormatBlock":"段落樣式","toggleDir":"切換方向","bold":"粗體","tabIndent":"定位點縮排","justifyRight":"靠右對齊","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/nl/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/nl/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/nl/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Beschrijving:","insertImageTitle":"Afbeeldingseigenschappen","set":"Instellen","newWindow":"Nieuw venster","topWindow":"Bovenste venster","target":"Doel:","createLinkTitle":"Linkeigenschappen","parentWindow":"Hoofdvenster","currentWindow":"Huidig venster","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/nl/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/nl/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/nl/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-klein","2":"x-klein","formatBlock":"Opmaak","3":"klein","4":"gemiddeld","5":"groot","6":"x-groot","7":"xx-groot","fantasy":"fantasy","serif":"serif","p":"Alinea","pre":"Vooraf opgemaakt","sans-serif":"sans-serif","fontName":"Lettertype","h1":"Kop","h2":"Subkop","h3":"Sub-subkop","monospace":"monospace","fontSize":"Grootte","cursive":"cursief","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/nl/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/nl/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/nl/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Opmaak verwijderen","copy":"Kopiëren","paste":"Plakken","selectAll":"Alles selecteren","insertOrderedList":"Genummerde lijst","insertTable":"Tabel invoegen/bewerken","print":"Afdrukken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","newPage":"Nieuwe pagina","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","fullScreen":"Volledig scherm in-/uitschakelen","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","viewSource":"HTML-bron bekijken","fontSize":"Lettergrootte","systemShortcut":"De actie \"${0}\" is alleen beschikbaar in uw browser via een sneltoetscombinatie. Gebruik ${1}.","indent":"Inspringen","redo":"Opnieuw","strikethrough":"Doorhalen","justifyFull":"Uitvullen","justifyCenter":"Centreren","hiliteColor":"Achtergrondkleur","deleteTable":"Tabel wissen","outdent":"Uitspringen","cut":"Knippen","plainFormatBlock":"Alineastijl","toggleDir":"Schrijfrichting wijzigen","bold":"Vet","tabIndent":"Inspringen","justifyRight":"Rechts uitlijnen","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ko/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ko/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ko/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"가장 작게","2":"조금 작게","formatBlock":"서식","3":"작게","4":"중간","5":"크게","6":"조금 크게","7":"가장 크게","fantasy":"fantasy","serif":"serif","p":"단락","pre":"서식이 지정됨","sans-serif":"sans-serif","fontName":"글꼴","h1":"제목","h2":"부제목","h3":"하위 부제목","monospace":"monospace","fontSize":"크기","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ko/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ko/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ko/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"형식 제거","copy":"복사","paste":"붙여넣기","selectAll":"모두 선택","insertOrderedList":"번호 목록","insertTable":"테이블 삽입/편집","print":"인쇄","underline":"밑줄","foreColor":"전경색","htmlToggle":"HTML 소스","formatBlock":"단락 스타일","newPage":"새 페이지","insertHorizontalRule":"수평 자","delete":"삭제","insertUnorderedList":"글머리표 목록","tableProp":"테이블 특성","insertImage":"이미지 삽입","superscript":"위첨자","subscript":"아래첨자","createLink":"링크 작성","undo":"실행 취소","fullScreen":"토글 전체 화면","italic":"기울임체","fontName":"글꼴 이름","justifyLeft":"왼쪽 맞춤","unlink":"링크 제거","toggleTableBorder":"토글 테이블 테두리","viewSource":"HTML 소스 보기","fontSize":"글꼴 크기","systemShortcut":"\"${0}\" 조치는 브라우저에서 키보드 단축키를 이용해서만 사용할 수 있습니다. ${1}을(를) 사용하십시오.","indent":"들여쓰기","redo":"다시 실행","strikethrough":"취소선","justifyFull":"양쪽 맞춤","justifyCenter":"가운데 맞춤","hiliteColor":"배경색","deleteTable":"테이블 삭제","outdent":"내어쓰기","cut":"잘라내기","plainFormatBlock":"단락 스타일","toggleDir":"토글 방향","bold":"굵은체","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ko/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ko/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ko/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"설명:","insertImageTitle":"이미지 특성","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상:","createLinkTitle":"링크 특성","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/th/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/th/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/th/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"รายละเอียด","insertImageTitle":"คุณสมบัติอิมเมจ","set":"ตั้งค่า","newWindow":"หน้าต่างใหม่","topWindow":"หน้าต่างบนสุด","target":"เป้าหมาย:","createLinkTitle":"คุณสมบัติลิงก์","parentWindow":"หน้าต่างหลัก","currentWindow":"หน้าต่างปัจจุบัน","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/th/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/th/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/th/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"รูปแบบ","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"ย่อหน้า","pre":"การกำหนดรูปแบบล่วงหน้า","sans-serif":"sans-serif","fontName":"ฟอนต์","h1":"ส่วนหัว","h2":"ส่วนหัวย่อย","h3":"ส่วนย่อยของส่วนหัวย่อย","monospace":"monospace","fontSize":"ขนาด","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/th/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/th/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/th/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"ลบรูปแบบออก","copy":"คัดลอก","paste":"วาง","selectAll":"เลือกทั้งหมด","insertOrderedList":"ลำดับเลข","insertTable":"แทรก/แก้ไขตาราง","print":"พิมพ์","underline":"ขีดเส้นใต้","foreColor":"สีพื้นหน้า","htmlToggle":"ซอร์ส HTML","formatBlock":"ลักษณะย่อหน้า","newPage":"หน้าใหม่","insertHorizontalRule":"ไม้บรรทัดแนวนอน","delete":"ลบ","insertUnorderedList":"หัวข้อย่อย","tableProp":"คุณสมบัติตาราง","insertImage":"แทรกอิมเมจ","superscript":"ตัวยก","subscript":"ตัวห้อย","createLink":"สร้างลิงก์","undo":"เลิกทำ","fullScreen":"สลับจอภาพแบบเต็ม","italic":"ตัวเอียง","fontName":"ชื่อฟอนต์","justifyLeft":"จัดชิดซ้าย","unlink":"ลบลิงก์ออก","toggleTableBorder":"สลับเส้นขอบตาราง","viewSource":"ดูซอร์ส HTML","fontSize":"ขนาดฟอนต์","systemShortcut":"การดำเนินการ\"${0}\" ใช้งานได้เฉพาะกับเบราว์เซอร์ของคุณโดยใช้แป้นพิมพ์ลัด ใช้ ${1}","indent":"เพิ่มการเยื้อง","redo":"ทำซ้ำ","strikethrough":"ขีดทับ","justifyFull":"จัดชิดขอบ","justifyCenter":"จัดกึ่งกลาง","hiliteColor":"สีพื้นหลัง","deleteTable":"ลบตาราง","outdent":"ลดการเยื้อง","cut":"ตัด","plainFormatBlock":"ลักษณะย่อหน้า","toggleDir":"สลับทิศทาง","bold":"ตัวหนา","tabIndent":"เยื้องแท็บ","justifyRight":"จัดชิดขวา","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pl/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pl/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pl/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Opis:","insertImageTitle":"Właściwości obrazu","set":"Ustaw","newWindow":"Nowe okno","topWindow":"Okno najwyższego poziomu","target":"Cel:","createLinkTitle":"Właściwości odsyłacza","parentWindow":"Okno macierzyste","currentWindow":"Bieżące okno","url":"Adres URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pl/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pl/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pl/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"najmniejsza","2":"mniejsza","formatBlock":"Format","3":"mała","4":"średnia","5":"duża","6":"większa","7":"największa","fantasy":"fantazyjna","serif":"szeryfowa","p":"Akapit","pre":"Wstępnie sformatowane","sans-serif":"bezszeryfowa","fontName":"Czcionka","h1":"Nagłówek","h2":"Nagłówek 2-go poziomu","h3":"Nagłówek 3-go poziomu","monospace":"czcionka o stałej szerokości","fontSize":"Wielkość","cursive":"kursywa","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pl/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pl/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pl/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Usuń formatowanie","copy":"Kopiuj","paste":"Wklej","selectAll":"Wybierz wszystko","insertOrderedList":"Lista numerowana","insertTable":"Wstaw/edytuj tabelę","print":"Drukuj","underline":"Podkreślenie","foreColor":"Kolor pierwszego planu","htmlToggle":"Źródło HTML","formatBlock":"Styl akapitu","newPage":"Nowa strona","insertHorizontalRule":"Linia pozioma","delete":"Usuń","insertUnorderedList":"Lista wypunktowana","tableProp":"Właściwość tabeli","insertImage":"Wstaw obraz","superscript":"Indeks górny","subscript":"Indeks dolny","createLink":"Utwórz odsyłacz","undo":"Cofnij","fullScreen":"Przełącz pełny ekran","italic":"Kursywa","fontName":"Nazwa czcionki","justifyLeft":"Wyrównaj do lewej","unlink":"Usuń odsyłacz","toggleTableBorder":"Przełącz ramkę tabeli","viewSource":"Wyświetl kod źródłowy HTML","ctrlKey":"Ctrl+${0}","fontSize":"Wielkość czcionki","systemShortcut":"Działanie ${0} jest dostępne w tej przeglądarce wyłącznie przy użyciu skrótu klawiaturowego. Należy użyć klawiszy ${1}.","indent":"Wcięcie","redo":"Ponów","strikethrough":"Przekreślenie","justifyFull":"Wyrównaj do lewej i prawej","justifyCenter":"Wyrównaj do środka","hiliteColor":"Kolor tła","deleteTable":"Usuń tabelę","outdent":"Usuń wcięcie","cut":"Wytnij","plainFormatBlock":"Styl akapitu","toggleDir":"Przełącz kierunek","bold":"Pogrubienie","tabIndent":"Wcięcie o tabulator","justifyRight":"Wyrównaj do prawej","appleKey":"⌘${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/it/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/it/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/it/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra superiore","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra padre","currentWindow":"Finestra corrente","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/it/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/it/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/it/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragrafo","pre":"Preformattato","sans-serif":"sans-serif","fontName":"Carattere","h1":"Intestazione","h2":"Sottointestazione","h3":"Sottointestazione secondaria","monospace":"spaziatura fissa","fontSize":"Dimensione","cursive":"corsivo","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/it/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/it/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/it/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolinea","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Attiva/Disattiva bordo tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"La azione \"${0}\" è disponibile solo nel browser tramite un tasto di scelta rapida. Utilizzare ${1}.","indent":"Rientro","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Annulla rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Attiva/Disattiva direzione","bold":"Grassetto","tabIndent":"Rientro tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/hu/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/hu/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/hu/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Leírás:","insertImageTitle":"Kép tulajdonságai","set":"Beállítás","newWindow":"Új ablak","topWindow":"Legfelső szintű ablak","target":"Cél:","createLinkTitle":"Hivatkozás tulajdonságai","parentWindow":"Szülő ablak","currentWindow":"Aktuális ablak","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/hu/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/hu/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/hu/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-kicsi","2":"x-kicsi","formatBlock":"Formátum","3":"kicsi","4":"közepes","5":"nagy","6":"x-nagy","7":"xx-nagy","fantasy":"fantázia","serif":"talpas","p":"Bekezdés","pre":"Előformázott","sans-serif":"talpatlan","fontName":"Betűtípus","h1":"Címsor","h2":"Alcím","h3":"Al-alcím","monospace":"rögzített szélességű","fontSize":"Méret","cursive":"kurzív","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/hu/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/hu/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/hu/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Formázás eltávolítása","copy":"Másolás","paste":"Beillesztés","selectAll":"Összes kijelölése","insertOrderedList":"Számozott lista","insertTable":"Táblázat beszúrása/szerkesztése","print":"Nyomtatás","underline":"Aláhúzott","foreColor":"Előtérszín","htmlToggle":"HTML forrás","formatBlock":"Bekezdés stílusa","newPage":"Új oldal","insertHorizontalRule":"Vízszintes vonalzó","delete":"Törlés","insertUnorderedList":"Felsorolásjeles lista","tableProp":"Táblázat tulajdonságai","insertImage":"Kép beszúrása","superscript":"Felső index","subscript":"Alsó index","createLink":"Hivatkozás létrehozása","undo":"Visszavonás","fullScreen":"Váltás teljes képernyőre","italic":"Dőlt","fontName":"Betűtípus","justifyLeft":"Balra igazítás","unlink":"Hivatkozás eltávolítása","toggleTableBorder":"Táblázatszegély ki-/bekapcsolása","viewSource":"HTML forrás megjelenítése","fontSize":"Betűméret","systemShortcut":"A(z) \"${0}\" művelet a böngészőben csak billentyűparancs használatával érhető el. Használja a következőt: ${1}.","indent":"Behúzás","redo":"Újra","strikethrough":"Áthúzott","justifyFull":"Sorkizárás","justifyCenter":"Középre igazítás","hiliteColor":"Háttérszín","deleteTable":"Táblázat törlése","outdent":"Negatív behúzás","cut":"Kivágás","plainFormatBlock":"Bekezdés stílusa","toggleDir":"Irány váltókapcsoló","bold":"Félkövér","tabIndent":"Tab behúzás","justifyRight":"Jobbra igazítás","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sk/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sk/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sk/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Opis:","insertImageTitle":"Vlastnosti obrázka ","set":"Nastaviť","newWindow":"Nové okno ","topWindow":"Najvrchnejšie okno ","target":"Cieľ:","createLinkTitle":"Pripojiť vlastnosti","parentWindow":"Rodičovské okno ","currentWindow":"Aktuálne okno ","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sk/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sk/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sk/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Formát","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Odsek","pre":"Predformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Hlavička","h2":"Podhlavička","h3":"Pod-podhlavička","monospace":"monospace","fontSize":"Veľkosť","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sk/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sk/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sk/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Odstrániť formát","copy":"Kopírovať","paste":"Nalepiť","selectAll":"Vybrať všetko","insertOrderedList":"Číslovaný zoznam","insertTable":"Vložiť/upraviť tabuľku","print":"Tlačiť","underline":"Podčiarknuť","foreColor":"Farba popredia","htmlToggle":"Zdroj HTML","formatBlock":"Štýl odseku","newPage":"Nová stránka ","insertHorizontalRule":"Horizontálna čiara","delete":"Vymazať","insertUnorderedList":"Zoznam s odrážkami","tableProp":"Vlastnosť tabuľky","insertImage":"Vložiť obrázok","superscript":"Horný index","subscript":"Dolný index","createLink":"Vytvoriť prepojenie","undo":"Vrátiť späť","fullScreen":"Zobraziť na celú obrazovku","italic":"Kurzíva","fontName":"Názov písma","justifyLeft":"Zarovnať doľava","unlink":"Odstrániť prepojenie","toggleTableBorder":"Prepnúť rámček tabuľky","viewSource":"Zobraziť zdrojový kód HTML ","fontSize":"Veľkosť písma","systemShortcut":"Akcia \"${0}\" je vo vašom prehliadači dostupná len s použitím klávesovej skratky. Použite ${1}.","indent":"Odsadiť","redo":"Znova vykonať","strikethrough":"Prečiarknuť","justifyFull":"Zarovnať podľa okraja","justifyCenter":"Zarovnať na stred","hiliteColor":"Farba pozadia","deleteTable":"Vymazať tabuľku","outdent":"Predsadiť","cut":"Vystrihnúť","plainFormatBlock":"Štýl odseku","toggleDir":"Prepnúť smer","bold":"Tučné písmo","tabIndent":"Odsadenie tabulátora","justifyRight":"Zarovnať doprava","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sl/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sl/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sl/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Opis:","insertImageTitle":"Lastnosti slike","set":"Nastavi","newWindow":"Novo okno","topWindow":"Najvišje okno","target":"Cilj:","createLinkTitle":"Lastnosti povezave","parentWindow":"Nadrejeno okno","currentWindow":"Trenutno okno","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sl/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sl/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sl/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-majhno","2":"x-majhno","formatBlock":"Oblika","3":"majhno","4":"srednje","5":"veliko","6":"x-veliko","7":"xx-veliko","fantasy":"fantasy","serif":"serif","p":"Odstavek","pre":"Vnaprej oblikovano","sans-serif":"sans-serif","fontName":"Pisava","h1":"Naslov","h2":"Podnaslov","h3":"Pod podnaslov","monospace":"monospace","fontSize":"Velikost","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sl/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sl/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sl/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Odstrani obliko zapisa","copy":"Prekopiraj","paste":"Prilepi","selectAll":"Izberi vse","insertOrderedList":"Oštevilčen seznam","insertTable":"Vstavi/uredi tabelo","print":"Natisni","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvorna koda HTML","formatBlock":"Slog odstavka","newPage":"Nova stran","insertHorizontalRule":"Vodoravno ravnilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","fullScreen":"Preklopi na celozaslonski način","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi na rob tabele","viewSource":"Prikaži izvorno kodo HTML","fontSize":"Velikost pisave","systemShortcut":"Dejanje \"${0}\" lahko v vašem brskalniku uporabite samo z bližnjico na tipkovnici. Uporabite ${1}.","indent":"Zamik","redo":"Znova uveljavi","strikethrough":"Prečrtano","justifyFull":"Obojestranska poravnava","justifyCenter":"Poravnaj na sredino","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Viseč odstavek","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi na usmeritev","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ro/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ro/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ro/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Descriere:","insertImageTitle":"Proprietăţi imagine","set":"Setare","newWindow":"Fereastră nouă","topWindow":"Fereastra cea mai de sus","target":"Ţintă:","createLinkTitle":"Proprietăţi legătură","parentWindow":"Fereastra părinte","currentWindow":"Fereastra curentă","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ro/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ro/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ro/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"noFormat":"Fără","1":"xxs (xx-small)","2":"xs (x-small)","formatBlock":"Format","3":"s (small)","4":"m (medium)","5":"l (large)","6":"xl (x-large)","7":"xxl (xx-large)","fantasy":"fantasy","serif":"serif","p":"Paragraf","pre":"Preformatat","sans-serif":"sans-serif","fontName":"Font","h1":"Titlu","h2":"Subtitlu","h3":"Sub-subtitlu","monospace":"monospace","fontSize":"Dimensiune","cursive":"cursive"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ro/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ro/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ro/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Înlăturare format","copy":"Copiere","paste":"Lipire","selectAll":"Selectare toate","insertOrderedList":"Listă numerotată","insertTable":"Inserare/Editare tabelă","print":"Tipărire","underline":"Subliniere","foreColor":"Culoare prim plan","htmlToggle":"Sursă HTML","formatBlock":"Stil paragraf","newPage":"Pagină nouă","insertHorizontalRule":"Regulă orizontală","delete":"Ştergere","insertUnorderedList":"Listă cu marcaje","tableProp":"Proprietăţi tabelă","insertImage":"Inserare imagine","superscript":"Scriere indice superior","subscript":"Scriere indice inferior","createLink":"Creare legătură","undo":"Anulare acţiune","fullScreen":"Comutare ecran complet","italic":"Cursive","fontName":"Nume font","justifyLeft":"Aliniere la stânga","unlink":"Înlăturare legătură","toggleTableBorder":"Comutare bordură tabelă","viewSource":"Vizualizare sursă HTML","fontSize":"Dimensiune font","systemShortcut":"Acţiunea \"${0}\" este disponibilă în browser folosind o scurtătură de la tastatură. Folosiţi ${1}.","indent":"Indentare","redo":"Repetare acţiune","strikethrough":"Suprascriere linie","justifyFull":"Aliniere","justifyCenter":"Aliniere pe centru","hiliteColor":"Culoare fundal","deleteTable":"Ştergere tabelă","outdent":"Outdentare","cut":"Tăiere","plainFormatBlock":"Stil paragraf","toggleDir":"Comutare direcţie","bold":"Aldine","tabIndent":"Indentare cu tab","justifyRight":"Aliniere la dreapta","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/zh/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/zh/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/zh/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"XXS 号","2":"XS 号","formatBlock":"格式","3":"S 号","4":"M 号","5":"L 号","6":"XL 号","7":"XXL 号","fantasy":"虚线","serif":"有衬线","p":"段落","pre":"预设有格式的","sans-serif":"无衬线","fontName":"字体","h1":"标题","h2":"子标题","h3":"二级子标题","monospace":"等宽字体","fontSize":"大小","cursive":"草书","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/zh/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/zh/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/zh/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"除去格式","copy":"复制","paste":"粘贴","selectAll":"全选","insertOrderedList":"编号列表","insertTable":"插入/编辑表","print":"打印","underline":"下划线","foreColor":"前景色","htmlToggle":"HTML 源代码","formatBlock":"段落样式","newPage":"新建页面","insertHorizontalRule":"水平线","delete":"删除","insertUnorderedList":"符号列表","tableProp":"表属性","insertImage":"插入图像","superscript":"上标","subscript":"下标","createLink":"创建链接","undo":"撤销","fullScreen":"切换全屏幕","italic":"斜体","fontName":"字体名称","justifyLeft":"左对齐","unlink":"除去链接","toggleTableBorder":"切换表边框","viewSource":"查看 HTML 源代码","fontSize":"字体大小","systemShortcut":"只能在浏览器中通过键盘快捷方式执行“${0}”操作。使用 ${1}。","indent":"增加缩进","redo":"重做","strikethrough":"删除线","justifyFull":"对齐","justifyCenter":"居中","hiliteColor":"背景色","deleteTable":"删除表","outdent":"减少缩进","cut":"剪切","plainFormatBlock":"段落样式","toggleDir":"固定方向","bold":"粗体","tabIndent":"制表符缩进","justifyRight":"右对齐","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/zh/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/zh/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/zh/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"描述：","insertImageTitle":"图像属性","set":"设置","newWindow":"新窗口","topWindow":"最顶部窗口","target":"目标：","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL："})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ca/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ca/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ca/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Descipció:","insertImageTitle":"Propietats de la imatge","set":"Defineix","newWindow":"Finestra nova","topWindow":"Finestra superior","target":"Destinació:","createLinkTitle":"Propietats de l'enllaç","parentWindow":"Finestra pare","currentWindow":"Finestra actual","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ca/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ca/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ca/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-petit","2":"x-petit","formatBlock":"Format","3":"petit","4":"mitjà","5":"gran","6":"x-gran","7":"xx-gran","fantasy":"Fantasia","serif":"serif","p":"Paràgraf","pre":"Format previ","sans-serif":"sans-serif","fontName":"Tipus de lletra","h1":"Títol","h2":"Subtítol","h3":"Subsubtítol","monospace":"monoespai","fontSize":"Mida","cursive":"Cursiva","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ca/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ca/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ca/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Elimina el format","copy":"Copia","paste":"Enganxa","selectAll":"Selecciona-ho tot","insertOrderedList":"Llista numerada","insertTable":"Insereix/edita la taula","print":"Imprimeix","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","newPage":"Pàgina nova","insertHorizontalRule":"Regle horitzontal","delete":"Suprimeix","insertUnorderedList":"Llista de vinyetes","tableProp":"Propietat de taula","insertImage":"Insereix imatge","superscript":"Superíndex","subscript":"Subíndex","createLink":"Crea un enllaç","undo":"Desfés","fullScreen":"Commuta pantalla completa","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a la esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","viewSource":"Visualitza font HTML","ctrlKey":"control+${0}","fontSize":"Cos de la lletra","systemShortcut":"L'acció \"${0}\" és l'única disponible al navegador utilitzant una drecera del teclat. Utilitzeu ${1}.","indent":"Sagnat","redo":"Refés","strikethrough":"Ratllat","justifyFull":"Justifica","justifyCenter":"Centra","hiliteColor":"Color de fons","deleteTable":"Suprimeix la taula","outdent":"Sagna a l'esquerra","cut":"Retalla","plainFormatBlock":"Estil de paràgraf","toggleDir":"Inverteix la direcció","bold":"Negreta","tabIndent":"Sagnat","justifyRight":"Alinea a la dreta","appleKey":"⌘${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pt/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pt/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pt/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Descrição:","insertImageTitle":"Propriedades de Imagem","set":"Definir","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","createLinkTitle":"Propriedades de Link","parentWindow":"Janela Pai","currentWindow":"Janela Atual","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pt/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pt/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pt/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"extra-extra-pequeno","2":"extra-pequeno","formatBlock":"Formatar","3":"pequena","4":"médio","5":"grande","6":"extra-grande","7":"extra-extra-grande","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Fonte","h1":"Título","h2":"Subtítulo","h3":"Sub-subtítulo","monospace":"espaço simples","fontSize":"Tamanho","cursive":"cursiva","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/pt/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/pt/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/pt/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Impressão","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar pela Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho do teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor de segundo plano","deleteTable":"Excluir Tabela","outdent":"Não-chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar pela Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/da/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/da/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/da/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Beskrivelse:","insertImageTitle":"Billedegenskaber","set":"Definér","newWindow":"Nyt vindue","topWindow":"Øverste vindue","target":"Mål:","createLinkTitle":"Linkegenskaber","parentWindow":"Overordnet vindue","currentWindow":"Aktuelt vindue","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/da/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/da/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/da/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Afsnit","pre":"Forudformateret","sans-serif":"sans-serif","fontName":"Skrifttype","h1":"Overskrift","h2":"Underoverskrift","h3":"Underunderoverskrift","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/da/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/da/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/da/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Fjern format","copy":"Kopiér","paste":"Sæt ind","selectAll":"Markér alle","insertOrderedList":"Nummereret liste","insertTable":"Indsæt/redigér tabel","print":"Udskriv","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","newPage":"Ny side","insertHorizontalRule":"Vandret linje","delete":"Slet","insertUnorderedList":"Punktliste","tableProp":"Tabelegenskab","insertImage":"Indsæt billede","superscript":"Hævet skrift","subscript":"Sænket skrift","createLink":"Opret link","undo":"Fortryd","fullScreen":"Aktivér/deaktivér fuldskærm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","viewSource":"Vis HTML-kilde","ctrlKey":"Ctrl+${0}","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i din browser med en tastaturgenvej. Brug ${1}.","indent":"Indrykning","redo":"Annullér Fortryd","strikethrough":"Gennemstreget","justifyFull":"Lige margener","justifyCenter":"Centreret","hiliteColor":"Baggrundsfarve","deleteTable":"Slet tabel","outdent":"Udrykning","cut":"Klip","plainFormatBlock":"Afsnitstypografi","toggleDir":"Skift retning","bold":"Fed","tabIndent":"Indrykning med tabulator","justifyRight":"Højrejusteret","appleKey":"⌘${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/tr/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/tr/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/tr/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Açıklama:","insertImageTitle":"Resim Özellikleri","set":"Ayarla","newWindow":"Yeni Pencere","topWindow":"En Üst Pencere","target":"Hedef:","createLinkTitle":"Bağlantı Özellikleri","parentWindow":"Üst Pencere","currentWindow":"Geçerli Pencere","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/tr/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/tr/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/tr/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-küçük","2":"x-küçük","formatBlock":"Biçim","3":"küçük","4":"orta","5":"büyük","6":"x-büyük","7":"xx-büyük","fantasy":"fantazi","serif":"serif","p":"Paragraf","pre":"Önceden Biçimlendirilmiş","sans-serif":"sans-serif","fontName":"Yazı Tipi","h1":"Başlık","h2":"Alt Başlık","h3":"Alt Alt Başlık","monospace":"tek aralıklı","fontSize":"Boyut","cursive":"el yazısı","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/tr/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/tr/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/tr/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Biçimi Kaldır","copy":"Kopyala","paste":"Yapıştır","selectAll":"Tümünü Seç","insertOrderedList":"Numaralı Liste","insertTable":"Tablo Ekle/Düzenle","print":"Yazdır","underline":"Altı Çizili","foreColor":"Ön Plan Rengi","htmlToggle":"HTML Kaynağı","formatBlock":"Paragraf Stili","newPage":"Yeni Sayfa","insertHorizontalRule":"Yatay Kural","delete":"Sil","insertUnorderedList":"Madde İşaretli Liste","tableProp":"Tablo Özelliği","insertImage":"Resim Ekle","superscript":"Üst Simge","subscript":"Alt Simge","createLink":"Bağlantı Oluştur","undo":"Geri Al","fullScreen":"Tam Ekranı Aç/Kapat","italic":"İtalik","fontName":"Yazı Tipi Adı","justifyLeft":"Sola Hizala","unlink":"Bağlantıyı Kaldır","toggleTableBorder":"Tablo Kenarlığını Göster/Gizle","viewSource":"HTML Kaynağını Görüntüle","fontSize":"Yazı Tipi Boyutu","systemShortcut":"\"${0}\" işlemi yalnızca tarayıcınızda bir klavye kısayoluyla birlikte kullanılabilir. Şunu kullanın: ${1}.","indent":"Girinti","redo":"Yinele","strikethrough":"Üstü Çizili","justifyFull":"Yasla","justifyCenter":"Ortaya Hizala","hiliteColor":"Arka Plan Rengi","deleteTable":"Tabloyu Sil","outdent":"Çıkıntı","cut":"Kes","plainFormatBlock":"Paragraf Stili","toggleDir":"Yönü Değiştir","bold":"Kalın","tabIndent":"Sekme Girintisi","justifyRight":"Sağa Hizala","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ru/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ru/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ru/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Описание:","insertImageTitle":"Свойства изображения","set":"Задать","newWindow":"Новое окно","topWindow":"Окно верхнего уровня","target":"Целевой объект:","createLinkTitle":"Свойства ссылки","parentWindow":"Родительское окно","currentWindow":"Текущее окно","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ru/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ru/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ru/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"самый маленький","2":"очень маленький","formatBlock":"Формат","3":"маленький","4":"средний","5":"большой","6":"очень большой","7":"самый большой","fantasy":"артистический","serif":"с засечками","p":"Абзац","pre":"Заранее отформатированный","sans-serif":"без засечек","fontName":"Шрифт","h1":"Заголовок","h2":"Подзаголовок","h3":"Вложенный подзаголовок","monospace":"непропорциональный","fontSize":"Размер","cursive":"курсив","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ru/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ru/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ru/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Удалить формат","copy":"Копировать","paste":"Вставить","selectAll":"Выбрать все","insertOrderedList":"Нумерованный список","insertTable":"Вставить/изменить таблицу","print":"Печать","underline":"Подчеркивание","foreColor":"Цвет текста","htmlToggle":"Код HTML","formatBlock":"Стиль абзаца","newPage":"Создать страницу","insertHorizontalRule":"Горизонтальная линейка","delete":"Удалить","insertUnorderedList":"Список с маркерами","tableProp":"Свойства таблицы","insertImage":"Вставить изображение","superscript":"Верхний индекс","subscript":"Нижний индекс","createLink":"Создать ссылку","undo":"Отменить","fullScreen":"Переключить полноэкранный режим","italic":"Курсив","fontName":"Название шрифта","justifyLeft":"По левому краю","unlink":"Удалить ссылку","toggleTableBorder":"Переключить рамку таблицы","viewSource":"Показать исходный код HTML","fontSize":"Размер шрифта","systemShortcut":"Действие \"${0}\" можно выполнить в браузере только путем нажатия клавиш ${1}.","indent":"Отступ","redo":"Повторить","strikethrough":"Перечеркивание","justifyFull":"По ширине","justifyCenter":"По центру","hiliteColor":"Цвет фона","deleteTable":"Удалить таблицу","outdent":"Втяжка","cut":"Вырезать","plainFormatBlock":"Стиль абзаца","toggleDir":"Изменить направление","bold":"Полужирный","tabIndent":"Табуляция","justifyRight":"По правому краю","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/de/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/de/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/de/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Beschreibung:","insertImageTitle":"Grafikeigenschaften","set":"Festlegen","newWindow":"Neues Fenster","topWindow":"Aktives Fenster","target":"Ziel:","createLinkTitle":"Linkeigenschaften","parentWindow":"Übergeordnetes Fenster","currentWindow":"Aktuelles Fenster","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/de/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/de/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/de/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"XXS","2":"XS","formatBlock":"Format","3":"S","4":"M","5":"L","6":"XL","7":"XXL","fantasy":"Fantasie","serif":"Serife","p":"Absatz","pre":"Vorformatiert","sans-serif":"Serifenlos","fontName":"Schriftart","h1":"Überschrift","h2":"Unterüberschrift","h3":"Unterunterüberschrift","monospace":"Monospaceschrift","fontSize":"Größe","cursive":"Kursiv","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/de/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/de/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/de/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Formatierung entfernen","copy":"Kopieren","paste":"Einfügen","selectAll":"Alles auswählen","insertOrderedList":"Nummerierung","insertTable":"Tabelle einfügen/bearbeiten","print":"Drucken","underline":"Unterstrichen","foreColor":"Vordergrundfarbe","htmlToggle":"HTML-Quelltext","formatBlock":"Absatzstil","newPage":"Neue Seite","insertHorizontalRule":"Horizontaler Strich","delete":"Löschen","insertUnorderedList":"Aufzählungszeichen","tableProp":"Tabelleneigenschaft","insertImage":"Grafik einfügen","superscript":"Hochgestellt","subscript":"Tiefgestellt","createLink":"Link erstellen","undo":"Rückgängig","fullScreen":"Gesamtanzeige","italic":"Kursiv","fontName":"Schriftartname","justifyLeft":"Linksbündig","unlink":"Link entfernen","toggleTableBorder":"Tabellenumrandung ein-/ausschalten","viewSource":"HTML-Quelle","ctrlKey":"Strg+${0}","fontSize":"Schriftgröße","systemShortcut":"Die Aktion \"${0}\" ist nur über einen Direktaufruf in Ihrem Browser verfügbar. Verwenden Sie ${1}.","indent":"Einrücken","redo":"Wiederherstellen","strikethrough":"Durchgestrichen","justifyFull":"Blocksatz","justifyCenter":"Zentriert","hiliteColor":"Hintergrundfarbe","deleteTable":"Tabelle löschen","outdent":"Ausrücken","cut":"Ausschneiden","plainFormatBlock":"Absatzstil","toggleDir":"Wechselrichtung","bold":"Fett","tabIndent":"Tabulatoreinrückung","justifyRight":"Rechtsbündig","appleKey":"⌘${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sv/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sv/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sv/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"mycket, mycket litet","2":"mycket litet","formatBlock":"Format","3":"litet","4":"medelstort","5":"stort","6":"extra stort","7":"extra extra stort","fantasy":"fantasy","serif":"serif","p":"Stycke","pre":"Förformaterat","sans-serif":"sans-serif","fontName":"Teckensnitt","h1":"Rubrik","h2":"Underrubrik","h3":"Underunderrubrik","monospace":"monospace","fontSize":"Storlek","cursive":"kursivt","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sv/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sv/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sv/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Ta bort format","copy":"Kopiera","paste":"Klistra in","selectAll":"Markera allt","insertOrderedList":"Numrerad lista","insertTable":"Infoga/redigera tabell","print":"Skriv ut","underline":"Understrykning","foreColor":"Förgrundsfärg","htmlToggle":"HTML-källkod","formatBlock":"Styckeformat","newPage":"Ny sida","insertHorizontalRule":"Horisontell linjal","delete":"Ta bort","appleKey":"⌘+${0}","insertUnorderedList":"Punktlista","tableProp":"Tabellegenskap","insertImage":"Infoga bild","superscript":"Upphöjt","subscript":"Nedsänkt","createLink":"Skapa länk","undo":"Ångra","fullScreen":"Växla helskärm","italic":"Kursiv","fontName":"Teckensnittsnamn","justifyLeft":"Vänsterjustera","unlink":"Ta bort länk","toggleTableBorder":"Aktivera/avaktivera tabellram","viewSource":"Visa HTML-kod","ctrlKey":"Ctrl+${0}","fontSize":"Teckenstorlek","systemShortcut":"Åtgärden \"${0}\" är endast tillgänglig i webbläsaren med hjälp av ett kortkommando. Använd ${1}.","indent":"Indrag","redo":"Gör om","strikethrough":"Genomstruken","justifyFull":"Marginaljustera","justifyCenter":"Centrera","hiliteColor":"Bakgrundsfärg","deleteTable":"Ta bort tabell","outdent":"Utdrag","cut":"Klipp ut","plainFormatBlock":"Styckeformat","toggleDir":"Växla riktning","bold":"Fetstil","tabIndent":"Tabbindrag","justifyRight":"Högerjustera"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/sv/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/sv/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/sv/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Beskrivning:","insertImageTitle":"Bildegenskaper","set":"Ange","newWindow":"nytt fönster","topWindow":"översta fönstret","target":"Mål:","createLinkTitle":"Länkegenskaper","parentWindow":"överordnat fönster","currentWindow":"aktuellt fönster","url":"URL-adress:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ja/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ja/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ja/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"説明:","insertImageTitle":"イメージ・プロパティー","set":"設定","newWindow":"新規ウィンドウ","topWindow":"最上位ウィンドウ","target":"ターゲット:","createLinkTitle":"リンク・プロパティー","parentWindow":"親ウィンドウ","currentWindow":"現行ウィンドウ","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ja/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ja/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ja/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"超極小","2":"極小","formatBlock":"フォーマット","3":"小","4":"標準","5":"大","6":"特大","7":"超特大","fantasy":"fantasy","serif":"serif","p":"段落","pre":"事前フォーマット済み","sans-serif":"sans-serif","fontName":"フォント","h1":"見出し","h2":"副見出し","h3":"副見出しの副見出し","monospace":"monospace","fontSize":"サイズ","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/ja/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/ja/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/ja/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"形式の除去","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"新しいページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブルプロパティ","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"全画面表示に切り替え","italic":"斜体","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの削除","toggleTableBorder":"テーブルボーダーの切り替え","viewSource":"HTML ソースの表示","fontSize":"フォントサイズ","systemShortcut":"\"${0}\" アクションを使用できるのは、ブラウザーでキーボードショートカットを使用する場合のみです。 ${1} を使用してください。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"背景色","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブインデント","justifyRight":"右揃え","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"noFormat":"None","1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/he/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/he/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/he/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"תיאור:","insertImageTitle":"תכונות תמונה","set":"הגדרה","newWindow":"חלון חדש","topWindow":"חלון עליון ","target":"יעד:","createLinkTitle":"תכונות קישור","parentWindow":"חלון אב","currentWindow":"חלון נוכחי ","url":"URL:‏"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/he/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/he/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/he/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"קטן ביות","2":"קטן מאוד","formatBlock":"עיצוב","3":"קטן","4":"בינוני","5":"גדול","6":"גדול מאוד","7":"גדול ביותר","fantasy":"fantasy","serif":"serif","p":"פיסקה","pre":"מעוצב מראש","sans-serif":"sans-serif","fontName":"גופן","h1":"כותרת","h2":"תת-כותרת","h3":"תת-תת-כותרת","monospace":"monospace","fontSize":"גודל","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/he/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/he/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/he/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"סילוק עיצוב","copy":"עותק","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","print":"הדפסה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","newPage":"דף חדש ","insertHorizontalRule":"קו אופקי","delete":"מחיקה","appleKey":"⌘${0}‎","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","fullScreen":"מיתוג מסך מלא ","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","viewSource":"הצגת מקור HTML ","ctrlKey":"ctrl+${0}‎","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/fi/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/fi/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/fi/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Kuvaus:","insertImageTitle":"Kuvan ominaisuudet","set":"Aseta","newWindow":"Uusi ikkuna","topWindow":"Päällimmäinen ikkuna","target":"Kohde:","createLinkTitle":"Linkin ominaisuudet","parentWindow":"Pääikkuna","currentWindow":"Nykyinen ikkuna","url":"URL-osoite:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/fi/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/fi/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/fi/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-small","2":"x-small","formatBlock":"Muoto","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Kappale","pre":"Esimuotoiltu","sans-serif":"sans-serif","fontName":"Fontti","h1":"Otsikko","h2":"Alatason otsikko","h3":"Alimman tason otsikko","monospace":"monospace","fontSize":"Koko","cursive":"cursive","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/fi/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/fi/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/fi/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Poista muotoilu","copy":"Kopioi","paste":"Liitä","selectAll":"Valitse kaikki","insertOrderedList":"Numeroitu luettelo","insertTable":"Lisää taulukko/muokkaa taulukkoa","print":"Tulosta","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","newPage":"Uusi sivu","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Yläindeksi","subscript":"Alaindeksi","createLink":"Luo linkki","undo":"Kumoa","fullScreen":"Vaihda koko näyttö","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","viewSource":"Näytä HTML-lähde","fontSize":"Fontin koko","systemShortcut":"Toiminto \"${0}\" on käytettävissä selaimessa vain näppäimistön pikatoiminnolla. Käytä seuraavaa: ${1}.","indent":"Sisennä","redo":"Tee uudelleen","strikethrough":"Yliviivaus","justifyFull":"Tasaus","justifyCenter":"Tasaus keskelle","hiliteColor":"Taustaväri","deleteTable":"Poista taulukko","outdent":"Ulonna","cut":"Leikkaa","plainFormatBlock":"Kappaletyyli","toggleDir":"Vaihda suuntaa","bold":"Lihavointi","tabIndent":"Sarkainsisennys","justifyRight":"Tasaus oikealle","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/nb/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/nb/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/nb/FontChoice.js	(revision 9)
@@ -0,0 +1 @@
+({"1":"xx-liten","2":"x-liten","formatBlock":"Format","3":"liten","4":"middels","5":"stor","6":"x-stor","7":"xx-stor","fantasy":"fantasi","serif":"serif","p":"Avsnitt","pre":"Forhåndsformatert","sans-serif":"sans-serif","fontName":"Skrift","h1":"Overskrift","h2":"Undertittel","h3":"Under-undertittel","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv","noFormat":"None"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/nb/commands.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/nb/commands.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/nb/commands.js	(revision 9)
@@ -0,0 +1 @@
+({"removeFormat":"Fjern format","copy":"Kopier","paste":"Lim inn","selectAll":"Velg alle","insertOrderedList":"Nummerert liste","insertTable":"Sett inn/rediger tabell","print":"Skriv ut","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","newPage":"Ny side","insertHorizontalRule":"Vannrett strek","delete":"Slett","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","fullScreen":"Slå på/av full skjerm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","viewSource":"Vis HTML-kilde","fontSize":"Skriftstørrelse","systemShortcut":"Handlingen \"${0}\" er bare tilgjengelig i nettleseren ved hjelp av en tastatursnarvei. Bruk ${1}.","indent":"Innrykk","redo":"Gjør om","strikethrough":"Gjennomstreking","justifyFull":"Juster","justifyCenter":"Midtstill","hiliteColor":"Bakgrunnsfarge","deleteTable":"Slett tabell","outdent":"Fjern innrykk","cut":"Klipp ut","plainFormatBlock":"Avsnittsstil","toggleDir":"Bytt retning","bold":"Fet","tabIndent":"Tabulatorinnrykk","justifyRight":"Høyrejuster","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/nls/nb/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/nls/nb/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/nls/nb/LinkDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"text":"Beskrivelse:","insertImageTitle":"Bildeegenskaper","set":"Definer","newWindow":"Nytt vindu","topWindow":"Øverste vindu","target":"Mål:","createLinkTitle":"Koblingsegenskaper","parentWindow":"Overordnet vindu","currentWindow":"Gjeldende vindu","url":"URL:"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/_editor/html.js
===================================================================
--- trunk/web/dojo/dijit/_editor/html.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/html.js	(revision 9)
@@ -0,0 +1,147 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.html"]){
+dojo._hasResource["dijit._editor.html"]=true;
+dojo.provide("dijit._editor.html");
+dijit._editor.escapeXml=function(_1,_2){
+_1=_1.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
+if(!_2){
+_1=_1.replace(/'/gm,"&#39;");
+}
+return _1;
+};
+dijit._editor.getNodeHtml=function(_3){
+var _4;
+switch(_3.nodeType){
+case 1:
+var _5=_3.nodeName.toLowerCase();
+if(!_5||_5.charAt(0)=="/"){
+return "";
+}
+_4="<"+_5;
+var _6=[];
+var _7;
+if(dojo.isIE&&_3.outerHTML){
+var s=_3.outerHTML;
+s=s.substr(0,s.indexOf(">")).replace(/(['"])[^"']*\1/g,"");
+var _8=/(\b\w+)\s?=/g;
+var m,_9;
+while((m=_8.exec(s))){
+_9=m[1];
+if(_9.substr(0,3)!="_dj"){
+if(_9=="src"||_9=="href"){
+if(_3.getAttribute("_djrealurl")){
+_6.push([_9,_3.getAttribute("_djrealurl")]);
+continue;
+}
+}
+var _a,_b;
+switch(_9){
+case "style":
+_a=_3.style.cssText.toLowerCase();
+break;
+case "class":
+_a=_3.className;
+break;
+case "width":
+if(_5==="img"){
+_b=/width=(\S+)/i.exec(s);
+if(_b){
+_a=_b[1];
+}
+break;
+}
+case "height":
+if(_5==="img"){
+_b=/height=(\S+)/i.exec(s);
+if(_b){
+_a=_b[1];
+}
+break;
+}
+default:
+_a=_3.getAttribute(_9);
+}
+if(_a!=null){
+_6.push([_9,_a.toString()]);
+}
+}
+}
+}else{
+var i=0;
+while((_7=_3.attributes[i++])){
+var n=_7.name;
+if(n.substr(0,3)!="_dj"){
+var v=_7.value;
+if(n=="src"||n=="href"){
+if(_3.getAttribute("_djrealurl")){
+v=_3.getAttribute("_djrealurl");
+}
+}
+_6.push([n,v]);
+}
+}
+}
+_6.sort(function(a,b){
+return a[0]<b[0]?-1:(a[0]==b[0]?0:1);
+});
+var j=0;
+while((_7=_6[j++])){
+_4+=" "+_7[0]+"=\""+(dojo.isString(_7[1])?dijit._editor.escapeXml(_7[1],true):_7[1])+"\"";
+}
+if(_5==="script"){
+_4+=">"+_3.innerHTML+"</"+_5+">";
+}else{
+if(_3.childNodes.length){
+_4+=">"+dijit._editor.getChildrenHtml(_3)+"</"+_5+">";
+}else{
+switch(_5){
+case "br":
+case "hr":
+case "img":
+case "input":
+case "base":
+case "meta":
+case "area":
+case "basefont":
+_4+=" />";
+break;
+default:
+_4+="></"+_5+">";
+}
+}
+}
+break;
+case 4:
+case 3:
+_4=dijit._editor.escapeXml(_3.nodeValue,true);
+break;
+case 8:
+_4="<!--"+dijit._editor.escapeXml(_3.nodeValue,true)+"-->";
+break;
+default:
+_4="<!-- Element not recognized - Type: "+_3.nodeType+" Name: "+_3.nodeName+"-->";
+}
+return _4;
+};
+dijit._editor.getChildrenHtml=function(_c){
+var _d="";
+if(!_c){
+return _d;
+}
+var _e=_c["childNodes"]||_c;
+var _f=!dojo.isIE||_e!==_c;
+var _10,i=0;
+while((_10=_e[i++])){
+if(!_f||_10.parentNode==_c){
+_d+=dijit._editor.getNodeHtml(_10);
+}
+}
+return _d;
+};
+}
Index: trunk/web/dojo/dijit/_editor/selection.js
===================================================================
--- trunk/web/dojo/dijit/_editor/selection.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/selection.js	(revision 9)
@@ -0,0 +1,267 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.selection"]){
+dojo._hasResource["dijit._editor.selection"]=true;
+dojo.provide("dijit._editor.selection");
+dojo.mixin(dijit._editor.selection,{getType:function(){
+if(dojo.isIE){
+return dojo.doc.selection.type.toLowerCase();
+}else{
+var _1="text";
+var _2;
+try{
+_2=dojo.global.getSelection();
+}
+catch(e){
+}
+if(_2&&_2.rangeCount==1){
+var _3=_2.getRangeAt(0);
+if((_3.startContainer==_3.endContainer)&&((_3.endOffset-_3.startOffset)==1)&&(_3.startContainer.nodeType!=3)){
+_1="control";
+}
+}
+return _1;
+}
+},getSelectedText:function(){
+if(dojo.isIE){
+if(dijit._editor.selection.getType()=="control"){
+return null;
+}
+return dojo.doc.selection.createRange().text;
+}else{
+var _4=dojo.global.getSelection();
+if(_4){
+return _4.toString();
+}
+}
+return "";
+},getSelectedHtml:function(){
+if(dojo.isIE){
+if(dijit._editor.selection.getType()=="control"){
+return null;
+}
+return dojo.doc.selection.createRange().htmlText;
+}else{
+var _5=dojo.global.getSelection();
+if(_5&&_5.rangeCount){
+var i;
+var _6="";
+for(i=0;i<_5.rangeCount;i++){
+var _7=_5.getRangeAt(i).cloneContents();
+var _8=dojo.doc.createElement("div");
+_8.appendChild(_7);
+_6+=_8.innerHTML;
+}
+return _6;
+}
+return null;
+}
+},getSelectedElement:function(){
+if(dijit._editor.selection.getType()=="control"){
+if(dojo.isIE){
+var _9=dojo.doc.selection.createRange();
+if(_9&&_9.item){
+return dojo.doc.selection.createRange().item(0);
+}
+}else{
+var _a=dojo.global.getSelection();
+return _a.anchorNode.childNodes[_a.anchorOffset];
+}
+}
+return null;
+},getParentElement:function(){
+if(dijit._editor.selection.getType()=="control"){
+var p=this.getSelectedElement();
+if(p){
+return p.parentNode;
+}
+}else{
+if(dojo.isIE){
+var r=dojo.doc.selection.createRange();
+r.collapse(true);
+return r.parentElement();
+}else{
+var _b=dojo.global.getSelection();
+if(_b){
+var _c=_b.anchorNode;
+while(_c&&(_c.nodeType!=1)){
+_c=_c.parentNode;
+}
+return _c;
+}
+}
+}
+return null;
+},hasAncestorElement:function(_d){
+return this.getAncestorElement.apply(this,arguments)!=null;
+},getAncestorElement:function(_e){
+var _f=this.getSelectedElement()||this.getParentElement();
+return this.getParentOfType(_f,arguments);
+},isTag:function(_10,_11){
+if(_10&&_10.tagName){
+var _12=_10.tagName.toLowerCase();
+for(var i=0;i<_11.length;i++){
+var _13=String(_11[i]).toLowerCase();
+if(_12==_13){
+return _13;
+}
+}
+}
+return "";
+},getParentOfType:function(_14,_15){
+while(_14){
+if(this.isTag(_14,_15).length){
+return _14;
+}
+_14=_14.parentNode;
+}
+return null;
+},collapse:function(_16){
+if(window.getSelection){
+var _17=dojo.global.getSelection();
+if(_17.removeAllRanges){
+if(_16){
+_17.collapseToStart();
+}else{
+_17.collapseToEnd();
+}
+}else{
+_17.collapse(_16);
+}
+}else{
+if(dojo.isIE){
+var _18=dojo.doc.selection.createRange();
+_18.collapse(_16);
+_18.select();
+}
+}
+},remove:function(){
+var sel=dojo.doc.selection;
+if(dojo.isIE){
+if(sel.type.toLowerCase()!="none"){
+sel.clear();
+}
+return sel;
+}else{
+sel=dojo.global.getSelection();
+sel.deleteFromDocument();
+return sel;
+}
+},selectElementChildren:function(_19,_1a){
+var win=dojo.global;
+var doc=dojo.doc;
+var _1b;
+_19=dojo.byId(_19);
+if(doc.selection&&dojo.isIE&&dojo.body().createTextRange){
+_1b=_19.ownerDocument.body.createTextRange();
+_1b.moveToElementText(_19);
+if(!_1a){
+try{
+_1b.select();
+}
+catch(e){
+}
+}
+}else{
+if(win.getSelection){
+var _1c=dojo.global.getSelection();
+if(dojo.isOpera){
+if(_1c.rangeCount){
+_1b=_1c.getRangeAt(0);
+}else{
+_1b=doc.createRange();
+}
+_1b.setStart(_19,0);
+_1b.setEnd(_19,(_19.nodeType==3)?_19.length:_19.childNodes.length);
+_1c.addRange(_1b);
+}else{
+_1c.selectAllChildren(_19);
+}
+}
+}
+},selectElement:function(_1d,_1e){
+var _1f;
+var doc=dojo.doc;
+var win=dojo.global;
+_1d=dojo.byId(_1d);
+if(dojo.isIE&&dojo.body().createTextRange){
+try{
+_1f=dojo.body().createControlRange();
+_1f.addElement(_1d);
+if(!_1e){
+_1f.select();
+}
+}
+catch(e){
+this.selectElementChildren(_1d,_1e);
+}
+}else{
+if(dojo.global.getSelection){
+var _20=win.getSelection();
+_1f=doc.createRange();
+if(_20.removeAllRanges){
+if(dojo.isOpera){
+if(_20.getRangeAt(0)){
+_1f=_20.getRangeAt(0);
+}
+}
+_1f.selectNode(_1d);
+_20.removeAllRanges();
+_20.addRange(_1f);
+}
+}
+}
+},inSelection:function(_21){
+if(_21){
+var _22;
+var doc=dojo.doc;
+var _23;
+if(dojo.global.getSelection){
+var sel=dojo.global.getSelection();
+if(sel&&sel.rangeCount>0){
+_23=sel.getRangeAt(0);
+}
+if(_23&&_23.compareBoundaryPoints&&doc.createRange){
+try{
+_22=doc.createRange();
+_22.setStart(_21,0);
+if(_23.compareBoundaryPoints(_23.START_TO_END,_22)===1){
+return true;
+}
+}
+catch(e){
+}
+}
+}else{
+if(doc.selection){
+_23=doc.selection.createRange();
+try{
+_22=_21.ownerDocument.body.createControlRange();
+if(_22){
+_22.addElement(_21);
+}
+}
+catch(e1){
+try{
+_22=_21.ownerDocument.body.createTextRange();
+_22.moveToElementText(_21);
+}
+catch(e2){
+}
+}
+if(_23&&_22){
+if(_23.compareEndPoints("EndToStart",_22)===1){
+return true;
+}
+}
+}
+}
+}
+return false;
+}});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/NewPage.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/NewPage.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/NewPage.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.NewPage"]){
+dojo._hasResource["dijit._editor.plugins.NewPage"]=true;
+dojo.provide("dijit._editor.plugins.NewPage");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.NewPage",dijit._editor._Plugin,{content:"<br>",_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands"),_2=this.editor;
+this.button=new dijit.form.Button({label:_1["newPage"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"NewPage",tabIndex:"-1",onClick:dojo.hitch(this,"_newPage")});
+},setEditor:function(_3){
+this.editor=_3;
+this._initButton();
+},_newPage:function(){
+this.editor.beginEditing();
+this.editor.set("value",this.content);
+this.editor.endEditing();
+this.editor.focus();
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _4=o.args.name.toLowerCase();
+if(_4==="newpage"){
+o.plugin=new dijit._editor.plugins.NewPage({content:("content" in o.args)?o.args.content:"<br>"});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/TabIndent.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/TabIndent.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/TabIndent.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.TabIndent"]){
+dojo._hasResource["dijit._editor.plugins.TabIndent"]=true;
+dojo.provide("dijit._editor.plugins.TabIndent");
+dojo.experimental("dijit._editor.plugins.TabIndent");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.ToggleButton");
+dojo.declare("dijit._editor.plugins.TabIndent",dijit._editor._Plugin,{useDefaultCommand:false,buttonClass:dijit.form.ToggleButton,command:"tabIndent",_initButton:function(){
+this.inherited(arguments);
+var e=this.editor;
+this.connect(this.button,"onChange",function(_1){
+e.set("isTabIndent",_1);
+});
+this.updateState();
+},updateState:function(){
+this.button.set("checked",this.editor.isTabIndent,false);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "tabIndent":
+o.plugin=new dijit._editor.plugins.TabIndent({command:o.args.name});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/EnterKeyHandling.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/EnterKeyHandling.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/EnterKeyHandling.js	(revision 9)
@@ -0,0 +1,423 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){
+dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]=true;
+dojo.provide("dijit._editor.plugins.EnterKeyHandling");
+dojo.require("dojo.window");
+dojo.declare("dijit._editor.plugins.EnterKeyHandling",dijit._editor._Plugin,{blockNodeForEnter:"BR",constructor:function(_1){
+if(_1){
+dojo.mixin(this,_1);
+}
+},setEditor:function(_2){
+this.editor=_2;
+if(this.blockNodeForEnter=="BR"){
+if(dojo.isIE){
+_2.contentDomPreFilters.push(dojo.hitch(this,"regularPsToSingleLinePs"));
+_2.contentDomPostFilters.push(dojo.hitch(this,"singleLinePsToRegularPs"));
+_2.onLoadDeferred.addCallback(dojo.hitch(this,"_fixNewLineBehaviorForIE"));
+}else{
+_2.onLoadDeferred.addCallback(dojo.hitch(this,function(d){
+try{
+this.editor.document.execCommand("insertBrOnReturn",false,true);
+}
+catch(e){
+}
+return d;
+}));
+}
+}else{
+if(this.blockNodeForEnter){
+dojo["require"]("dijit._editor.range");
+var h=dojo.hitch(this,this.handleEnterKey);
+_2.addKeyHandler(13,0,0,h);
+_2.addKeyHandler(13,0,1,h);
+this.connect(this.editor,"onKeyPressed","onKeyPressed");
+}
+}
+},onKeyPressed:function(e){
+if(this._checkListLater){
+if(dojo.withGlobal(this.editor.window,"isCollapsed",dijit)){
+var _3=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,["LI"]);
+if(!_3){
+dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);
+var _4=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]);
+if(_4){
+_4.innerHTML=this.bogusHtmlContent;
+if(dojo.isIE){
+var r=this.editor.document.selection.createRange();
+r.move("character",-1);
+r.select();
+}
+}else{
+console.error("onKeyPressed: Cannot find the new block node");
+}
+}else{
+if(dojo.isMoz){
+if(_3.parentNode.parentNode.nodeName=="LI"){
+_3=_3.parentNode.parentNode;
+}
+}
+var fc=_3.firstChild;
+if(fc&&fc.nodeType==1&&(fc.nodeName=="UL"||fc.nodeName=="OL")){
+_3.insertBefore(fc.ownerDocument.createTextNode(" "),fc);
+var _5=dijit.range.create(this.editor.window);
+_5.setStart(_3.firstChild,0);
+var _6=dijit.range.getSelection(this.editor.window,true);
+_6.removeAllRanges();
+_6.addRange(_5);
+}
+}
+}
+this._checkListLater=false;
+}
+if(this._pressedEnterInBlock){
+if(this._pressedEnterInBlock.previousSibling){
+this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);
+}
+delete this._pressedEnterInBlock;
+}
+},bogusHtmlContent:"&nbsp;",blockNodes:/^(?:P|H1|H2|H3|H4|H5|H6|LI)$/,handleEnterKey:function(e){
+var _7,_8,_9,_a=this.editor.document,br;
+if(e.shiftKey){
+var _b=dojo.withGlobal(this.editor.window,"getParentElement",dijit._editor.selection);
+var _c=dijit.range.getAncestor(_b,this.blockNodes);
+if(_c){
+if(!e.shiftKey&&_c.tagName=="LI"){
+return true;
+}
+_7=dijit.range.getSelection(this.editor.window);
+_8=_7.getRangeAt(0);
+if(!_8.collapsed){
+_8.deleteContents();
+_7=dijit.range.getSelection(this.editor.window);
+_8=_7.getRangeAt(0);
+}
+if(dijit.range.atBeginningOfContainer(_c,_8.startContainer,_8.startOffset)){
+if(e.shiftKey){
+br=_a.createElement("br");
+_9=dijit.range.create(this.editor.window);
+_c.insertBefore(br,_c.firstChild);
+_9.setStartBefore(br.nextSibling);
+_7.removeAllRanges();
+_7.addRange(_9);
+}else{
+dojo.place(br,_c,"before");
+}
+}else{
+if(dijit.range.atEndOfContainer(_c,_8.startContainer,_8.startOffset)){
+_9=dijit.range.create(this.editor.window);
+br=_a.createElement("br");
+if(e.shiftKey){
+_c.appendChild(br);
+_c.appendChild(_a.createTextNode(" "));
+_9.setStart(_c.lastChild,0);
+}else{
+dojo.place(br,_c,"after");
+_9.setStartAfter(_c);
+}
+_7.removeAllRanges();
+_7.addRange(_9);
+}else{
+return true;
+}
+}
+}else{
+dijit._editor.RichText.prototype.execCommand.call(this.editor,"inserthtml","<br>");
+}
+return false;
+}
+var _d=true;
+_7=dijit.range.getSelection(this.editor.window);
+_8=_7.getRangeAt(0);
+if(!_8.collapsed){
+_8.deleteContents();
+_7=dijit.range.getSelection(this.editor.window);
+_8=_7.getRangeAt(0);
+}
+var _e=dijit.range.getBlockAncestor(_8.endContainer,null,this.editor.editNode);
+var _f=_e.blockNode;
+if((this._checkListLater=(_f&&(_f.nodeName=="LI"||_f.parentNode.nodeName=="LI")))){
+if(dojo.isMoz){
+this._pressedEnterInBlock=_f;
+}
+if(/^(\s|&nbsp;|\xA0|<span\b[^>]*\bclass=['"]Apple-style-span['"][^>]*>(\s|&nbsp;|\xA0)<\/span>)?(<br>)?$/.test(_f.innerHTML)){
+_f.innerHTML="";
+if(dojo.isWebKit){
+_9=dijit.range.create(this.editor.window);
+_9.setStart(_f,0);
+_7.removeAllRanges();
+_7.addRange(_9);
+}
+this._checkListLater=false;
+}
+return true;
+}
+if(!_e.blockNode||_e.blockNode===this.editor.editNode){
+try{
+dijit._editor.RichText.prototype.execCommand.call(this.editor,"formatblock",this.blockNodeForEnter);
+}
+catch(e2){
+}
+_e={blockNode:dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.blockNodeForEnter]),blockContainer:this.editor.editNode};
+if(_e.blockNode){
+if(_e.blockNode!=this.editor.editNode&&(!(_e.blockNode.textContent||_e.blockNode.innerHTML).replace(/^\s+|\s+$/g,"").length)){
+this.removeTrailingBr(_e.blockNode);
+return false;
+}
+}else{
+_e.blockNode=this.editor.editNode;
+}
+_7=dijit.range.getSelection(this.editor.window);
+_8=_7.getRangeAt(0);
+}
+var _10=_a.createElement(this.blockNodeForEnter);
+_10.innerHTML=this.bogusHtmlContent;
+this.removeTrailingBr(_e.blockNode);
+if(dijit.range.atEndOfContainer(_e.blockNode,_8.endContainer,_8.endOffset)){
+if(_e.blockNode===_e.blockContainer){
+_e.blockNode.appendChild(_10);
+}else{
+dojo.place(_10,_e.blockNode,"after");
+}
+_d=false;
+_9=dijit.range.create(this.editor.window);
+_9.setStart(_10,0);
+_7.removeAllRanges();
+_7.addRange(_9);
+if(this.editor.height){
+dojo.window.scrollIntoView(_10);
+}
+}else{
+if(dijit.range.atBeginningOfContainer(_e.blockNode,_8.startContainer,_8.startOffset)){
+dojo.place(_10,_e.blockNode,_e.blockNode===_e.blockContainer?"first":"before");
+if(_10.nextSibling&&this.editor.height){
+_9=dijit.range.create(this.editor.window);
+_9.setStart(_10.nextSibling,0);
+_7.removeAllRanges();
+_7.addRange(_9);
+dojo.window.scrollIntoView(_10.nextSibling);
+}
+_d=false;
+}else{
+if(_e.blockNode===_e.blockContainer){
+_e.blockNode.appendChild(_10);
+}else{
+dojo.place(_10,_e.blockNode,"after");
+}
+_d=false;
+if(_e.blockNode.style){
+if(_10.style){
+if(_e.blockNode.style.cssText){
+_10.style.cssText=_e.blockNode.style.cssText;
+}
+}
+}
+var rs=_8.startContainer;
+if(rs&&rs.nodeType==3){
+var _11,_12;
+var txt=rs.nodeValue;
+var _13=_a.createTextNode(txt.substring(0,_8.startOffset));
+var _14=_a.createTextNode(txt.substring(_8.startOffset,txt.length));
+dojo.place(_13,rs,"before");
+dojo.place(_14,rs,"after");
+dojo.destroy(rs);
+var _15=_13.parentNode;
+while(_15!==_e.blockNode){
+var tg=_15.tagName;
+var _16=_a.createElement(tg);
+if(_15.style){
+if(_16.style){
+if(_15.style.cssText){
+_16.style.cssText=_15.style.cssText;
+}
+}
+}
+_11=_14;
+while(_11){
+_12=_11.nextSibling;
+_16.appendChild(_11);
+_11=_12;
+}
+dojo.place(_16,_15,"after");
+_13=_15;
+_14=_16;
+_15=_15.parentNode;
+}
+_11=_14;
+if(_11.nodeType==1||(_11.nodeType==3&&_11.nodeValue)){
+_10.innerHTML="";
+}
+while(_11){
+_12=_11.nextSibling;
+_10.appendChild(_11);
+_11=_12;
+}
+}
+_9=dijit.range.create(this.editor.window);
+_9.setStart(_10,0);
+_7.removeAllRanges();
+_7.addRange(_9);
+if(this.editor.height){
+dijit.scrollIntoView(_10);
+}
+if(dojo.isMoz){
+this._pressedEnterInBlock=_e.blockNode;
+}
+}
+}
+return _d;
+},removeTrailingBr:function(_17){
+var _18=/P|DIV|LI/i.test(_17.tagName)?_17:dijit._editor.selection.getParentOfType(_17,["P","DIV","LI"]);
+if(!_18){
+return;
+}
+if(_18.lastChild){
+if((_18.childNodes.length>1&&_18.lastChild.nodeType==3&&/^[\s\xAD]*$/.test(_18.lastChild.nodeValue))||_18.lastChild.tagName=="BR"){
+dojo.destroy(_18.lastChild);
+}
+}
+if(!_18.childNodes.length){
+_18.innerHTML=this.bogusHtmlContent;
+}
+},_fixNewLineBehaviorForIE:function(d){
+var doc=this.editor.document;
+if(doc.__INSERTED_EDITIOR_NEWLINE_CSS===undefined){
+var _19=dojo.create("style",{type:"text/css"},doc.getElementsByTagName("head")[0]);
+_19.styleSheet.cssText="p{margin:0;}";
+this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS=true;
+}
+return d;
+},regularPsToSingleLinePs:function(_1a,_1b){
+function _1c(el){
+function _1d(_1e){
+var _1f=_1e[0].ownerDocument.createElement("p");
+_1e[0].parentNode.insertBefore(_1f,_1e[0]);
+dojo.forEach(_1e,function(_20){
+_1f.appendChild(_20);
+});
+};
+var _21=0;
+var _22=[];
+var _23;
+while(_21<el.childNodes.length){
+_23=el.childNodes[_21];
+if(_23.nodeType==3||(_23.nodeType==1&&_23.nodeName!="BR"&&dojo.style(_23,"display")!="block")){
+_22.push(_23);
+}else{
+var _24=_23.nextSibling;
+if(_22.length){
+_1d(_22);
+_21=(_21+1)-_22.length;
+if(_23.nodeName=="BR"){
+dojo.destroy(_23);
+}
+}
+_22=[];
+}
+_21++;
+}
+if(_22.length){
+_1d(_22);
+}
+};
+function _25(el){
+var _26=null;
+var _27=[];
+var _28=el.childNodes.length-1;
+for(var i=_28;i>=0;i--){
+_26=el.childNodes[i];
+if(_26.nodeName=="BR"){
+var _29=_26.ownerDocument.createElement("p");
+dojo.place(_29,el,"after");
+if(_27.length==0&&i!=_28){
+_29.innerHTML="&nbsp;";
+}
+dojo.forEach(_27,function(_2a){
+_29.appendChild(_2a);
+});
+dojo.destroy(_26);
+_27=[];
+}else{
+_27.unshift(_26);
+}
+}
+};
+var _2b=[];
+var ps=_1a.getElementsByTagName("p");
+dojo.forEach(ps,function(p){
+_2b.push(p);
+});
+dojo.forEach(_2b,function(p){
+var _2c=p.previousSibling;
+if((_2c)&&(_2c.nodeType==1)&&(_2c.nodeName=="P"||dojo.style(_2c,"display")!="block")){
+var _2d=p.parentNode.insertBefore(this.document.createElement("p"),p);
+_2d.innerHTML=_1b?"":"&nbsp;";
+}
+_25(p);
+},this.editor);
+_1c(_1a);
+return _1a;
+},singleLinePsToRegularPs:function(_2e){
+function _2f(_30){
+var ps=_30.getElementsByTagName("p");
+var _31=[];
+for(var i=0;i<ps.length;i++){
+var p=ps[i];
+var _32=false;
+for(var k=0;k<_31.length;k++){
+if(_31[k]===p.parentNode){
+_32=true;
+break;
+}
+}
+if(!_32){
+_31.push(p.parentNode);
+}
+}
+return _31;
+};
+function _33(_34){
+return (!_34.childNodes.length||_34.innerHTML=="&nbsp;");
+};
+var _35=_2f(_2e);
+for(var i=0;i<_35.length;i++){
+var _36=_35[i];
+var _37=null;
+var _38=_36.firstChild;
+var _39=null;
+while(_38){
+if(_38.nodeType!=1||_38.tagName!="P"||(_38.getAttributeNode("style")||{}).specified){
+_37=null;
+}else{
+if(_33(_38)){
+_39=_38;
+_37=null;
+}else{
+if(_37==null){
+_37=_38;
+}else{
+if((!_37.lastChild||_37.lastChild.nodeName!="BR")&&(_38.firstChild)&&(_38.firstChild.nodeName!="BR")){
+_37.appendChild(this.editor.document.createElement("br"));
+}
+while(_38.firstChild){
+_37.appendChild(_38.firstChild);
+}
+_39=_38;
+}
+}
+}
+_38=_38.nextSibling;
+if(_39){
+dojo.destroy(_39);
+_39=null;
+}
+}
+}
+return _2e;
+}});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/ViewSource.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/ViewSource.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/ViewSource.js	(revision 9)
@@ -0,0 +1,317 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.ViewSource"]){
+dojo._hasResource["dijit._editor.plugins.ViewSource"]=true;
+dojo.provide("dijit._editor.plugins.ViewSource");
+dojo.require("dojo.window");
+dojo.require("dojo.i18n");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.ViewSource",dijit._editor._Plugin,{stripScripts:true,stripComments:true,stripIFrames:true,readOnly:false,_fsPlugin:null,toggle:function(){
+if(dojo.isWebKit){
+this._vsFocused=true;
+}
+this.button.set("checked",!this.button.get("checked"));
+},_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands"),_2=this.editor;
+this.button=new dijit.form.ToggleButton({label:_1["viewSource"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"ViewSource",tabIndex:"-1",onChange:dojo.hitch(this,"_showSource")});
+if(dojo.isIE==7){
+this._ieFixNode=dojo.create("div",{style:{opacity:"0",zIndex:"-1000",position:"absolute",top:"-1000px"}},dojo.body());
+}
+this.button.set("readOnly",false);
+},setEditor:function(_3){
+this.editor=_3;
+this._initButton();
+this.editor.addKeyHandler(dojo.keys.F12,true,true,dojo.hitch(this,function(e){
+this.button.focus();
+this.toggle();
+dojo.stopEvent(e);
+setTimeout(dojo.hitch(this,function(){
+this.editor.focus();
+}),100);
+}));
+},_showSource:function(_4){
+var ed=this.editor;
+var _5=ed._plugins;
+var _6;
+this._sourceShown=_4;
+var _7=this;
+try{
+if(!this.sourceArea){
+this._createSourceView();
+}
+if(_4){
+ed._sourceQueryCommandEnabled=ed.queryCommandEnabled;
+ed.queryCommandEnabled=function(_8){
+var _9=_8.toLowerCase();
+if(_9==="viewsource"){
+return true;
+}else{
+return false;
+}
+};
+this.editor.onDisplayChanged();
+_6=ed.get("value");
+_6=this._filter(_6);
+ed.set("value",_6);
+this._pluginList=[];
+this._disabledPlugins=dojo.filter(_5,function(p){
+if(p&&p.button&&!p.button.get("disabled")&&!(p instanceof dijit._editor.plugins.ViewSource)){
+p._vs_updateState=p.updateState;
+p.updateState=function(){
+return false;
+};
+p.button.set("disabled",true);
+if(p.command){
+switch(p.command){
+case "bold":
+case "italic":
+case "underline":
+case "strikethrough":
+case "superscript":
+case "subscript":
+p.button.set("checked",false);
+break;
+default:
+break;
+}
+}
+return true;
+}
+});
+if(this._fsPlugin){
+this._fsPlugin._getAltViewNode=function(){
+return _7.sourceArea;
+};
+}
+this.sourceArea.value=_6;
+var is=dojo.marginBox(ed.iframe.parentNode);
+dojo.marginBox(this.sourceArea,{w:is.w,h:is.h});
+dojo.style(ed.iframe,"display","none");
+dojo.style(this.sourceArea,{display:"block"});
+var _a=function(){
+var vp=dojo.window.getBox();
+if("_prevW" in this&&"_prevH" in this){
+if(vp.w===this._prevW&&vp.h===this._prevH){
+return;
+}else{
+this._prevW=vp.w;
+this._prevH=vp.h;
+}
+}else{
+this._prevW=vp.w;
+this._prevH=vp.h;
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+delete this._resizer;
+}
+this._resizer=setTimeout(dojo.hitch(this,function(){
+delete this._resizer;
+this._resize();
+}),10);
+};
+this._resizeHandle=dojo.connect(window,"onresize",this,_a);
+setTimeout(dojo.hitch(this,this._resize),100);
+this.editor.onNormalizedDisplayChanged();
+}else{
+if(!ed._sourceQueryCommandEnabled){
+return;
+}
+dojo.disconnect(this._resizeHandle);
+delete this._resizeHandle;
+ed.queryCommandEnabled=ed._sourceQueryCommandEnabled;
+if(!this._readOnly){
+_6=this.sourceArea.value;
+_6=this._filter(_6);
+ed.beginEditing();
+ed.set("value",_6);
+ed.endEditing();
+}
+dojo.forEach(this._disabledPlugins,function(p){
+p.button.set("disabled",false);
+if(p._vs_updateState){
+p.updateState=p._vs_updateState;
+}
+});
+this._disabledPlugins=null;
+dojo.style(this.sourceArea,"display","none");
+dojo.style(ed.iframe,"display","block");
+delete ed._sourceQueryCommandEnabled;
+this.editor.onDisplayChanged();
+}
+setTimeout(dojo.hitch(this,function(){
+var _b=ed.domNode.parentNode;
+if(_b){
+var _c=dijit.getEnclosingWidget(_b);
+if(_c&&_c.resize){
+_c.resize();
+}
+}
+ed.resize();
+}),300);
+}
+catch(e){
+}
+},_resize:function(){
+var ed=this.editor;
+var _d=ed.getHeaderHeight();
+var fH=ed.getFooterHeight();
+var eb=dojo.position(ed.domNode);
+var _e=dojo._getPadBorderExtents(ed.iframe.parentNode);
+var _f=dojo._getMarginExtents(ed.iframe.parentNode);
+var _10=dojo._getPadBorderExtents(ed.domNode);
+var _11=dojo._getMarginExtents(ed.domNode);
+var edb={w:eb.w-(_10.w+_11.w),h:eb.h-(_d+_10.h+_11.h+fH)};
+if(this._fsPlugin&&this._fsPlugin.isFullscreen){
+var vp=dojo.window.getBox();
+edb.w=(vp.w-_10.w);
+edb.h=(vp.h-(_d+_10.h+fH));
+}
+if(dojo.isIE){
+edb.h-=2;
+}
+if(this._ieFixNode){
+var _12=-this._ieFixNode.offsetTop/1000;
+edb.w=Math.floor((edb.w+0.9)/_12);
+edb.h=Math.floor((edb.h+0.9)/_12);
+}
+dojo.marginBox(this.sourceArea,{w:edb.w-(_e.w+_f.w),h:edb.h-(_e.h+_f.h)});
+dojo.marginBox(ed.iframe.parentNode,{h:edb.h});
+},_createSourceView:function(){
+var ed=this.editor;
+var _13=ed._plugins;
+this.sourceArea=dojo.create("textarea");
+if(this.readOnly){
+dojo.attr(this.sourceArea,"readOnly",true);
+this._readOnly=true;
+}
+dojo.style(this.sourceArea,{padding:"0px",margin:"0px",borderWidth:"0px",borderStyle:"none"});
+dojo.place(this.sourceArea,ed.iframe,"before");
+if(dojo.isIE&&ed.iframe.parentNode.lastChild!==ed.iframe){
+dojo.style(ed.iframe.parentNode.lastChild,{width:"0px",height:"0px",padding:"0px",margin:"0px",borderWidth:"0px",borderStyle:"none"});
+}
+ed._viewsource_oldFocus=ed.focus;
+var _14=this;
+ed.focus=function(){
+if(_14._sourceShown){
+_14.setSourceAreaCaret();
+}else{
+try{
+if(this._vsFocused){
+delete this._vsFocused;
+dijit.focus(ed.editNode);
+}else{
+ed._viewsource_oldFocus();
+}
+}
+catch(e){
+}
+}
+};
+var i,p;
+for(i=0;i<_13.length;i++){
+p=_13[i];
+if(p&&(p.declaredClass==="dijit._editor.plugins.FullScreen"||p.declaredClass===(dijit._scopeName+"._editor.plugins.FullScreen"))){
+this._fsPlugin=p;
+break;
+}
+}
+if(this._fsPlugin){
+this._fsPlugin._viewsource_getAltViewNode=this._fsPlugin._getAltViewNode;
+this._fsPlugin._getAltViewNode=function(){
+return _14._sourceShown?_14.sourceArea:this._viewsource_getAltViewNode();
+};
+}
+this.connect(this.sourceArea,"onkeydown",dojo.hitch(this,function(e){
+if(this._sourceShown&&e.keyCode==dojo.keys.F12&&e.ctrlKey&&e.shiftKey){
+this.button.focus();
+this.button.set("checked",false);
+setTimeout(dojo.hitch(this,function(){
+ed.focus();
+}),100);
+dojo.stopEvent(e);
+}
+}));
+},_stripScripts:function(_15){
+if(_15){
+_15=_15.replace(/<\s*script[^>]*>((.|\s)*?)<\\?\/\s*script\s*>/ig,"");
+_15=_15.replace(/<\s*script\b([^<>]|\s)*>?/ig,"");
+_15=_15.replace(/<[^>]*=(\s|)*[("|')]javascript:[^$1][(\s|.)]*[$1][^>]*>/ig,"");
+}
+return _15;
+},_stripComments:function(_16){
+if(_16){
+_16=_16.replace(/<!--(.|\s){1,}?-->/g,"");
+}
+return _16;
+},_stripIFrames:function(_17){
+if(_17){
+_17=_17.replace(/<\s*iframe[^>]*>((.|\s)*?)<\\?\/\s*iframe\s*>/ig,"");
+}
+return _17;
+},_filter:function(_18){
+if(_18){
+if(this.stripScripts){
+_18=this._stripScripts(_18);
+}
+if(this.stripComments){
+_18=this._stripComments(_18);
+}
+if(this.stripIFrames){
+_18=this._stripIFrames(_18);
+}
+}
+return _18;
+},setSourceAreaCaret:function(){
+var win=dojo.global;
+var _19=this.sourceArea;
+dijit.focus(_19);
+if(this._sourceShown&&!this.readOnly){
+if(dojo.isIE){
+if(this.sourceArea.createTextRange){
+var _1a=_19.createTextRange();
+_1a.collapse(true);
+_1a.moveStart("character",-99999);
+_1a.moveStart("character",0);
+_1a.moveEnd("character",0);
+_1a.select();
+}
+}else{
+if(win.getSelection){
+if(_19.setSelectionRange){
+_19.setSelectionRange(0,0);
+}
+}
+}
+}
+},destroy:function(){
+if(this._ieFixNode){
+dojo.body().removeChild(this._ieFixNode);
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+delete this._resizer;
+}
+if(this._resizeHandle){
+dojo.disconnect(this._resizeHandle);
+delete this._resizeHandle;
+}
+this.inherited(arguments);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _1b=o.args.name.toLowerCase();
+if(_1b==="viewsource"){
+o.plugin=new dijit._editor.plugins.ViewSource({readOnly:("readOnly" in o.args)?o.args.readOnly:false,stripComments:("stripComments" in o.args)?o.args.stripComments:true,stripScripts:("stripScripts" in o.args)?o.args.stripScripts:true,stripIFrames:("stripIFrames" in o.args)?o.args.stripIFrames:true});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/Print.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/Print.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/Print.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.Print"]){
+dojo._hasResource["dijit._editor.plugins.Print"]=true;
+dojo.provide("dijit._editor.plugins.Print");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.Print",dijit._editor._Plugin,{_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands"),_2=this.editor;
+this.button=new dijit.form.Button({label:_1["print"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Print",tabIndex:"-1",onClick:dojo.hitch(this,"_print")});
+},setEditor:function(_3){
+this.editor=_3;
+this._initButton();
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+if(!this.editor.iframe.contentWindow["print"]){
+this.button.set("disabled",true);
+}
+}));
+},_print:function(){
+var _4=this.editor.iframe;
+if(_4.contentWindow["print"]){
+if(!dojo.isOpera&&!dojo.isChrome){
+dijit.focus(_4);
+_4.contentWindow.print();
+}else{
+var _5=this.editor.document;
+var _6=this.editor.get("value");
+_6="<html><head><meta http-equiv='Content-Type' "+"content='text/html; charset='UTF-8'></head><body>"+_6+"</body></html>";
+var _7=window.open("javascript: ''","","status=0,menubar=0,location=0,toolbar=0,"+"width=1,height=1,resizable=0,scrollbars=0");
+_7.document.open();
+_7.document.write(_6);
+_7.document.close();
+var _8=[];
+var _9=_5.getElementsByTagName("style");
+if(_9){
+var i;
+for(i=0;i<_9.length;i++){
+var _a=_9[i].innerHTML;
+var _b=_7.document.createElement("style");
+_b.appendChild(_7.document.createTextNode(_a));
+_7.document.getElementsByTagName("head")[0].appendChild(_b);
+}
+}
+_7.print();
+_7.close();
+}
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _c=o.args.name.toLowerCase();
+if(_c==="print"){
+o.plugin=new dijit._editor.plugins.Print({command:"print"});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/LinkDialog.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/LinkDialog.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/LinkDialog.js	(revision 9)
@@ -0,0 +1,236 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){
+dojo._hasResource["dijit._editor.plugins.LinkDialog"]=true;
+dojo.provide("dijit._editor.plugins.LinkDialog");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit.form.Select");
+dojo.require("dijit._editor.range");
+dojo.require("dojo.i18n");
+dojo.require("dojo.string");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dijit._editor","LinkDialog",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.LinkDialog",dijit._editor._Plugin,{buttonClass:dijit.form.DropDownButton,useDefaultCommand:false,urlRegExp:"((https?|ftps?|file)\\://|./|/|)(/[a-zA-Z]{1,1}:/|)(((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)*(?:[a-zA-Z](?:[-\\da-zA-Z]{0,80}[\\da-zA-Z])?)\\.?)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:\\d+)?(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#.*)?)?)?",emailRegExp:"<?(mailto\\:)([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+"+"@"+"((?:(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)\\.)+(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)\\.?)|localhost|^[^-][a-zA-Z0-9_-]*>?",htmlTemplate:"<a href=\"${urlInput}\" _djrealurl=\"${urlInput}\""+" target=\"${targetSelect}\""+">${textInput}</a>",tag:"a",_hostRxp:new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),_userAtRxp:new RegExp("^([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+@","i"),linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' "+"id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_targetSelect'>${target}</label>","</td><td>","<select id='${id}_targetSelect' name='targetSelect' dojoType='dijit.form.Select'>","<option selected='selected' value='_self'>${currentWindow}</option>","<option value='_blank'>${newWindow}</option>","<option value='_top'>${topWindow}</option>","<option value='_parent'>${parentWindow}</option>","</select>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),_initButton:function(){
+var _1=this;
+this.tag=this.command=="insertImage"?"img":"a";
+var _2=dojo.mixin(dojo.i18n.getLocalization("dijit","common",this.lang),dojo.i18n.getLocalization("dijit._editor","LinkDialog",this.lang));
+var _3=(this.dropDown=new dijit.TooltipDialog({title:_2[this.command+"Title"],execute:dojo.hitch(this,"setValue"),onOpen:function(){
+_1._onOpenDialog();
+dijit.TooltipDialog.prototype.onOpen.apply(this,arguments);
+},onCancel:function(){
+setTimeout(dojo.hitch(_1,"_onCloseDialog"),0);
+}}));
+_2.urlRegExp=this.urlRegExp;
+_2.id=dijit.getUniqueId(this.editor.id);
+this._uniqueId=_2.id;
+this._setContent(_3.title+"<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>"+dojo.string.substitute(this.linkDialogTemplate,_2));
+_3.startup();
+this._urlInput=dijit.byId(this._uniqueId+"_urlInput");
+this._textInput=dijit.byId(this._uniqueId+"_textInput");
+this._setButton=dijit.byId(this._uniqueId+"_setButton");
+this.connect(dijit.byId(this._uniqueId+"_cancelButton"),"onClick",function(){
+this.dropDown.onCancel();
+});
+if(this._urlInput){
+this.connect(this._urlInput,"onChange","_checkAndFixInput");
+}
+if(this._textInput){
+this.connect(this._textInput,"onChange","_checkAndFixInput");
+}
+this._urlRegExp=new RegExp("^"+this.urlRegExp+"$","i");
+this._emailRegExp=new RegExp("^"+this.emailRegExp+"$","i");
+this._urlInput.isValid=dojo.hitch(this,function(){
+var _4=this._urlInput.get("value");
+return this._urlRegExp.test(_4)||this._emailRegExp.test(_4);
+});
+this._connectTagEvents();
+this.inherited(arguments);
+},_checkAndFixInput:function(){
+var _5=this;
+var _6=this._urlInput.get("value");
+var _7=function(_8){
+var _9=false;
+var _a=false;
+if(_8&&_8.length>1){
+_8=dojo.trim(_8);
+if(_8.indexOf("mailto:")!==0){
+if(_8.indexOf("/")>0){
+if(_8.indexOf("://")===-1){
+if(_8.charAt(0)!=="/"&&_8.indexOf("./")!==0){
+if(_5._hostRxp.test(_8)){
+_9=true;
+}
+}
+}
+}else{
+if(_5._userAtRxp.test(_8)){
+_a=true;
+}
+}
+}
+}
+if(_9){
+_5._urlInput.set("value","http://"+_8);
+}
+if(_a){
+_5._urlInput.set("value","mailto:"+_8);
+}
+_5._setButton.set("disabled",!_5._isValid());
+};
+if(this._delayedCheck){
+clearTimeout(this._delayedCheck);
+this._delayedCheck=null;
+}
+this._delayedCheck=setTimeout(function(){
+_7(_6);
+},250);
+},_connectTagEvents:function(){
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this.connect(this.editor.editNode,"ondblclick",this._onDblClick);
+}));
+},_isValid:function(){
+return this._urlInput.isValid()&&this._textInput.isValid();
+},_setContent:function(_b){
+this.dropDown.set("content",_b);
+},_checkValues:function(_c){
+if(_c&&_c.urlInput){
+_c.urlInput=_c.urlInput.replace(/"/g,"&quot;");
+}
+return _c;
+},setValue:function(_d){
+this._onCloseDialog();
+if(dojo.isIE){
+var _e=dijit.range.getSelection(this.editor.window);
+var _f=_e.getRangeAt(0);
+var a=_f.endContainer;
+if(a.nodeType===3){
+a=a.parentNode;
+}
+if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){
+a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);
+}
+if(a&&(a.nodeName&&a.nodeName.toLowerCase()===this.tag)){
+if(this.editor.queryCommandEnabled("unlink")){
+dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[a]);
+this.editor.execCommand("unlink");
+}
+}
+}
+_d=this._checkValues(_d);
+this.editor.execCommand("inserthtml",dojo.string.substitute(this.htmlTemplate,_d));
+},_onCloseDialog:function(){
+this.editor.focus();
+},_getCurrentValues:function(a){
+var url,_10,_11;
+if(a&&a.tagName.toLowerCase()===this.tag){
+url=a.getAttribute("_djrealurl")||a.getAttribute("href");
+_11=a.getAttribute("target")||"_self";
+_10=a.textContent||a.innerText;
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[a,true]);
+}else{
+_10=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);
+}
+return {urlInput:url||"",textInput:_10||"",targetSelect:_11||""};
+},_onOpenDialog:function(){
+var a;
+if(dojo.isIE){
+var sel=dijit.range.getSelection(this.editor.window);
+var _12=sel.getRangeAt(0);
+a=_12.endContainer;
+if(a.nodeType===3){
+a=a.parentNode;
+}
+if(a&&(a.nodeName&&a.nodeName.toLowerCase()!==this.tag)){
+a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,[this.tag]);
+}
+}else{
+a=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,[this.tag]);
+}
+this.dropDown.reset();
+this._setButton.set("disabled",true);
+this.dropDown.set("value",this._getCurrentValues(a));
+},_onDblClick:function(e){
+if(e&&e.target){
+var t=e.target;
+var tg=t.tagName?t.tagName.toLowerCase():"";
+if(tg===this.tag&&dojo.attr(t,"href")){
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);
+this.editor.onDisplayChanged();
+setTimeout(dojo.hitch(this,function(){
+this.button.set("disabled",false);
+this.button.openDropDown();
+}),10);
+}
+}
+}});
+dojo.declare("dijit._editor.plugins.ImgLinkDialog",[dijit._editor.plugins.LinkDialog],{linkDialogTemplate:["<table><tr><td>","<label for='${id}_urlInput'>${url}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' regExp='${urlRegExp}' "+"required='true' id='${id}_urlInput' name='urlInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='false' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr><tr><td>","</td><td>","</td></tr><tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${buttonCancel}</button>","</td></tr></table>"].join(""),htmlTemplate:"<img src=\"${urlInput}\" _djrealurl=\"${urlInput}\" alt=\"${textInput}\" />",tag:"img",_getCurrentValues:function(img){
+var url,_13;
+if(img&&img.tagName.toLowerCase()===this.tag){
+url=img.getAttribute("_djrealurl")||img.getAttribute("src");
+_13=img.getAttribute("alt");
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[img,true]);
+}else{
+_13=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);
+}
+return {urlInput:url||"",textInput:_13||""};
+},_isValid:function(){
+return this._urlInput.isValid();
+},_connectTagEvents:function(){
+this.inherited(arguments);
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this.connect(this.editor.editNode,"onmousedown",this._selectTag);
+}));
+},_selectTag:function(e){
+if(e&&e.target){
+var t=e.target;
+var tg=t.tagName?t.tagName.toLowerCase():"";
+if(tg===this.tag){
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);
+}
+}
+},_checkValues:function(_14){
+if(_14&&_14.urlInput){
+_14.urlInput=_14.urlInput.replace(/"/g,"&quot;");
+}
+if(_14&&_14.textInput){
+_14.textInput=_14.textInput.replace(/"/g,"&quot;");
+}
+return _14;
+},_onDblClick:function(e){
+if(e&&e.target){
+var t=e.target;
+var tg=t.tagName?t.tagName.toLowerCase():"";
+if(tg===this.tag&&dojo.attr(t,"src")){
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);
+this.editor.onDisplayChanged();
+setTimeout(dojo.hitch(this,function(){
+this.button.set("disabled",false);
+this.button.openDropDown();
+}),10);
+}
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "createLink":
+o.plugin=new dijit._editor.plugins.LinkDialog({command:o.args.name});
+break;
+case "insertImage":
+o.plugin=new dijit._editor.plugins.ImgLinkDialog({command:o.args.name});
+break;
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/ToggleDir.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/ToggleDir.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/ToggleDir.js	(revision 9)
@@ -0,0 +1,42 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.ToggleDir"]){
+dojo._hasResource["dijit._editor.plugins.ToggleDir"]=true;
+dojo.provide("dijit._editor.plugins.ToggleDir");
+dojo.experimental("dijit._editor.plugins.ToggleDir");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.ToggleButton");
+dojo.declare("dijit._editor.plugins.ToggleDir",dijit._editor._Plugin,{useDefaultCommand:false,command:"toggleDir",buttonClass:dijit.form.ToggleButton,_initButton:function(){
+this.inherited(arguments);
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+var _1=this.editor.editorObject.contentWindow.document.documentElement;
+_1=_1.getElementsByTagName("body")[0];
+var _2=dojo.getComputedStyle(_1).direction=="ltr";
+this.button.set("checked",!_2);
+this.connect(this.button,"onChange","_setRtl");
+}));
+},updateState:function(){
+},_setRtl:function(_3){
+var _4="ltr";
+if(_3){
+_4="rtl";
+}
+var _5=this.editor.editorObject.contentWindow.document.documentElement;
+_5=_5.getElementsByTagName("body")[0];
+_5.dir=_4;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "toggleDir":
+o.plugin=new dijit._editor.plugins.ToggleDir({command:o.args.name});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/FontChoice.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/FontChoice.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/FontChoice.js	(revision 9)
@@ -0,0 +1,265 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){
+dojo._hasResource["dijit._editor.plugins.FontChoice"]=true;
+dojo.provide("dijit._editor.plugins.FontChoice");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.range");
+dojo.require("dijit._editor.selection");
+dojo.require("dijit.form.FilteringSelect");
+dojo.require("dojo.data.ItemFileReadStore");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit._editor","FontChoice",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins._FontDropDown",[dijit._Widget,dijit._Templated],{label:"",widgetsInTemplate:true,plainText:false,templateString:"<span style='white-space: nowrap' class='dijit dijitReset dijitInline'>"+"<label class='dijitLeft dijitInline' for='${selectId}'>${label}</label>"+"<input dojoType='dijit.form.FilteringSelect' required=false labelType=html labelAttr=label searchAttr=name "+"tabIndex='-1' id='${selectId}' dojoAttachPoint='select' value=''/>"+"</span>",postMixInProperties:function(){
+this.inherited(arguments);
+this.strings=dojo.i18n.getLocalization("dijit._editor","FontChoice");
+this.label=this.strings[this.command];
+this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+this.selectId=this.id+"_select";
+this.inherited(arguments);
+},postCreate:function(){
+var _1=dojo.map(this.values,function(_2){
+var _3=this.strings[_2]||_2;
+return {label:this.getLabel(_2,_3),name:_3,value:_2};
+},this);
+this.select.store=new dojo.data.ItemFileReadStore({data:{identifier:"value",items:_1}});
+this.select.set("value","",false);
+this.disabled=this.select.get("disabled");
+},_setValueAttr:function(_4,_5){
+_5=_5!==false?true:false;
+this.select.set("value",dojo.indexOf(this.values,_4)<0?"":_4,_5);
+if(!_5){
+this.select._lastValueReported=null;
+}
+},_getValueAttr:function(){
+return this.select.get("value");
+},focus:function(){
+this.select.focus();
+},_setDisabledAttr:function(_6){
+this.disabled=_6;
+this.select.set("disabled",_6);
+}});
+dojo.declare("dijit._editor.plugins._FontNameDropDown",dijit._editor.plugins._FontDropDown,{generic:false,command:"fontName",postMixInProperties:function(){
+if(!this.values){
+this.values=this.generic?["serif","sans-serif","monospace","cursive","fantasy"]:["Arial","Times New Roman","Comic Sans MS","Courier New"];
+}
+this.inherited(arguments);
+},getLabel:function(_7,_8){
+if(this.plainText){
+return _8;
+}else{
+return "<div style='font-family: "+_7+"'>"+_8+"</div>";
+}
+},_setValueAttr:function(_9,_a){
+_a=_a!==false?true:false;
+if(this.generic){
+var _b={"Arial":"sans-serif","Helvetica":"sans-serif","Myriad":"sans-serif","Times":"serif","Times New Roman":"serif","Comic Sans MS":"cursive","Apple Chancery":"cursive","Courier":"monospace","Courier New":"monospace","Papyrus":"fantasy"};
+_9=_b[_9]||_9;
+}
+this.inherited(arguments,[_9,_a]);
+}});
+dojo.declare("dijit._editor.plugins._FontSizeDropDown",dijit._editor.plugins._FontDropDown,{command:"fontSize",values:[1,2,3,4,5,6,7],getLabel:function(_c,_d){
+if(this.plainText){
+return _d;
+}else{
+return "<font size="+_c+"'>"+_d+"</font>";
+}
+},_setValueAttr:function(_e,_f){
+_f=_f!==false?true:false;
+if(_e.indexOf&&_e.indexOf("px")!=-1){
+var _10=parseInt(_e,10);
+_e={10:1,13:2,16:3,18:4,24:5,32:6,48:7}[_10]||_e;
+}
+this.inherited(arguments,[_e,_f]);
+}});
+dojo.declare("dijit._editor.plugins._FormatBlockDropDown",dijit._editor.plugins._FontDropDown,{command:"formatBlock",values:["noFormat","p","h1","h2","h3","pre"],postCreate:function(){
+this.inherited(arguments);
+this.set("value","noFormat",false);
+},getLabel:function(_11,_12){
+if(this.plainText){
+return _12;
+}else{
+return "<"+_11+">"+_12+"</"+_11+">";
+}
+},_execCommand:function(_13,_14,_15){
+if(_15==="noFormat"){
+var _16;
+var end;
+var sel=dijit.range.getSelection(_13.window);
+if(sel&&sel.rangeCount>0){
+var _17=sel.getRangeAt(0);
+var _18,tag;
+if(_17){
+_16=_17.startContainer;
+end=_17.endContainer;
+while(_16&&_16!==_13.editNode&&_16!==_13.document.body&&_16.nodeType!==1){
+_16=_16.parentNode;
+}
+while(end&&end!==_13.editNode&&end!==_13.document.body&&end.nodeType!==1){
+end=end.parentNode;
+}
+var _19=dojo.hitch(this,function(_1a,_1b){
+if(_1a.childNodes&&_1a.childNodes.length){
+var i;
+for(i=0;i<_1a.childNodes.length;i++){
+var c=_1a.childNodes[i];
+if(c.nodeType==1){
+if(dojo.withGlobal(_13.window,"inSelection",dijit._editor.selection,[c])){
+var tag=c.tagName?c.tagName.toLowerCase():"";
+if(dojo.indexOf(this.values,tag)!==-1){
+_1b.push(c);
+}
+_19(c,_1b);
+}
+}
+}
+}
+});
+var _1c=dojo.hitch(this,function(_1d){
+if(_1d&&_1d.length){
+_13.beginEditing();
+while(_1d.length){
+this._removeFormat(_13,_1d.pop());
+}
+_13.endEditing();
+}
+});
+var _1e=[];
+if(_16==end){
+var _1f;
+_18=_16;
+while(_18&&_18!==_13.editNode&&_18!==_13.document.body){
+if(_18.nodeType==1){
+tag=_18.tagName?_18.tagName.toLowerCase():"";
+if(dojo.indexOf(this.values,tag)!==-1){
+_1f=_18;
+break;
+}
+}
+_18=_18.parentNode;
+}
+_19(_16,_1e);
+if(_1f){
+_1e=[_1f].concat(_1e);
+}
+_1c(_1e);
+}else{
+_18=_16;
+while(dojo.withGlobal(_13.window,"inSelection",dijit._editor.selection,[_18])){
+if(_18.nodeType==1){
+tag=_18.tagName?_18.tagName.toLowerCase():"";
+if(dojo.indexOf(this.values,tag)!==-1){
+_1e.push(_18);
+}
+_19(_18,_1e);
+}
+_18=_18.nextSibling;
+}
+_1c(_1e);
+}
+_13.onDisplayChanged();
+}
+}
+}else{
+_13.execCommand(_14,_15);
+}
+},_removeFormat:function(_20,_21){
+if(_20.customUndo){
+while(_21.firstChild){
+dojo.place(_21.firstChild,_21,"before");
+}
+_21.parentNode.removeChild(_21);
+}else{
+dojo.withGlobal(_20.window,"selectElementChildren",dijit._editor.selection,[_21]);
+var _22=dojo.withGlobal(_20.window,"getSelectedHtml",dijit._editor.selection,[null]);
+dojo.withGlobal(_20.window,"selectElement",dijit._editor.selection,[_21]);
+_20.execCommand("inserthtml",_22||"");
+}
+}});
+dojo.declare("dijit._editor.plugins.FontChoice",dijit._editor._Plugin,{useDefaultCommand:false,_initButton:function(){
+var _23={fontName:dijit._editor.plugins._FontNameDropDown,fontSize:dijit._editor.plugins._FontSizeDropDown,formatBlock:dijit._editor.plugins._FormatBlockDropDown}[this.command],_24=this.params;
+if(this.params.custom){
+_24.values=this.params.custom;
+}
+var _25=this.editor;
+this.button=new _23(dojo.delegate({dir:_25.dir,lang:_25.lang},_24));
+this.connect(this.button.select,"onChange",function(_26){
+this.editor.focus();
+if(this.command=="fontName"&&_26.indexOf(" ")!=-1){
+_26="'"+_26+"'";
+}
+if(this.button._execCommand){
+this.button._execCommand(this.editor,this.command,_26);
+}else{
+this.editor.execCommand(this.command,_26);
+}
+this.editor.customUndo=this.editor.customUndo||dojo.isWebKit;
+});
+},updateState:function(){
+var _27=this.editor;
+var _28=this.command;
+if(!_27||!_27.isLoaded||!_28.length){
+return;
+}
+if(this.button){
+var _29;
+try{
+_29=_27.queryCommandValue(_28)||"";
+}
+catch(e){
+_29="";
+}
+var _2a=dojo.isString(_29)&&_29.match(/'([^']*)'/);
+if(_2a){
+_29=_2a[1];
+}
+if(_28==="formatBlock"){
+if(!_29||_29=="p"){
+_29=null;
+var _2b;
+var sel=dijit.range.getSelection(this.editor.window);
+if(sel&&sel.rangeCount>0){
+var _2c=sel.getRangeAt(0);
+if(_2c){
+_2b=_2c.endContainer;
+}
+}
+while(_2b&&_2b!==_27.editNode&&_2b!==_27.document){
+var tg=_2b.tagName?_2b.tagName.toLowerCase():"";
+if(tg&&dojo.indexOf(this.button.values,tg)>-1){
+_29=tg;
+break;
+}
+_2b=_2b.parentNode;
+}
+if(!_29){
+_29="noFormat";
+}
+}else{
+if(dojo.indexOf(this.button.values,_29)<0){
+_29="noFormat";
+}
+}
+}
+if(_29!==this.button.get("value")){
+this.button.set("value",_29,false);
+}
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "fontName":
+case "fontSize":
+case "formatBlock":
+o.plugin=new dijit._editor.plugins.FontChoice({command:o.args.name,plainText:o.args.plainText?o.args.plainText:false});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/FullScreen.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/FullScreen.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/FullScreen.js	(revision 9)
@@ -0,0 +1,232 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.FullScreen"]){
+dojo._hasResource["dijit._editor.plugins.FullScreen"]=true;
+dojo.provide("dijit._editor.plugins.FullScreen");
+dojo.require("dojo.window");
+dojo.require("dojo.i18n");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.requireLocalization("dijit._editor","commands",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dijit._editor.plugins.FullScreen",dijit._editor._Plugin,{zIndex:500,_origState:null,_origiFrameState:null,_resizeHandle:null,isFullscreen:false,toggle:function(){
+this.button.set("checked",!this.button.get("checked"));
+},_initButton:function(){
+var _1=dojo.i18n.getLocalization("dijit._editor","commands"),_2=this.editor;
+this.button=new dijit.form.ToggleButton({label:_1["fullScreen"],dir:_2.dir,lang:_2.lang,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"FullScreen",tabIndex:"-1",onChange:dojo.hitch(this,"_setFullScreen")});
+},setEditor:function(_3){
+this.editor=_3;
+this._initButton();
+this.editor.addKeyHandler(dojo.keys.F11,true,true,dojo.hitch(this,function(e){
+this.toggle();
+dojo.stopEvent(e);
+setTimeout(dojo.hitch(this,function(){
+this.editor.focus();
+}),250);
+return true;
+}));
+this.connect(this.editor.domNode,"onkeydown","_containFocus");
+},_containFocus:function(e){
+if(this.isFullscreen){
+var ed=this.editor;
+if(!ed.isTabIndent&&ed._fullscreen_oldOnKeyDown&&e.keyCode===dojo.keys.TAB){
+var f=dijit.getFocus();
+var _4=this._getAltViewNode();
+if(f.node==ed.iframe||(_4&&f.node===_4)){
+setTimeout(dojo.hitch(this,function(){
+ed.toolbar.focus();
+}),10);
+}else{
+if(_4&&dojo.style(ed.iframe,"display")==="none"){
+setTimeout(dojo.hitch(this,function(){
+dijit.focus(_4);
+}),10);
+}else{
+setTimeout(dojo.hitch(this,function(){
+ed.focus();
+}),10);
+}
+}
+dojo.stopEvent(e);
+}else{
+if(ed._fullscreen_oldOnKeyDown){
+ed._fullscreen_oldOnKeyDown(e);
+}
+}
+}
+},_resizeEditor:function(){
+var vp=dojo.window.getBox();
+dojo.marginBox(this.editor.domNode,{w:vp.w,h:vp.h});
+var _5=this.editor.getHeaderHeight();
+var _6=this.editor.getFooterHeight();
+var _7=dojo._getPadBorderExtents(this.editor.domNode);
+var _8=dojo._getPadBorderExtents(this.editor.iframe.parentNode);
+var _9=dojo._getMarginExtents(this.editor.iframe.parentNode);
+var _a=vp.h-(_5+_7.h+_6);
+dojo.marginBox(this.editor.iframe.parentNode,{h:_a,w:vp.w});
+dojo.marginBox(this.editor.iframe,{h:_a-(_8.h+_9.h)});
+},_getAltViewNode:function(){
+},_setFullScreen:function(_b){
+var vp=dojo.window.getBox();
+var ed=this.editor;
+var _c=dojo.body();
+var _d=ed.domNode.parentNode;
+this.isFullscreen=_b;
+if(_b){
+while(_d&&_d!==dojo.body()){
+dojo.addClass(_d,"dijitForceStatic");
+_d=_d.parentNode;
+}
+this._editorResizeHolder=this.editor.resize;
+ed.resize=function(){
+};
+ed._fullscreen_oldOnKeyDown=ed.onKeyDown;
+ed.onKeyDown=dojo.hitch(this,this._containFocus);
+this._origState={};
+this._origiFrameState={};
+var _e=ed.domNode,_f=_e&&_e.style||{};
+this._origState={width:_f.width||"",height:_f.height||"",top:dojo.style(_e,"top")||"",left:dojo.style(_e,"left")||"",position:dojo.style(_e,"position")||"static",marginBox:dojo.marginBox(ed.domNode)};
+var _10=ed.iframe,_11=_10&&_10.style||{};
+var bc=dojo.style(ed.iframe,"backgroundColor");
+this._origiFrameState={backgroundColor:bc||"transparent",width:_11.width||"auto",height:_11.height||"auto",zIndex:_11.zIndex||""};
+dojo.style(ed.domNode,{position:"absolute",top:"0px",left:"0px",zIndex:this.zIndex,width:vp.w+"px",height:vp.h+"px"});
+dojo.style(ed.iframe,{height:"100%",width:"100%",zIndex:this.zIndex,backgroundColor:bc!=="transparent"&&bc!=="rgba(0, 0, 0, 0)"?bc:"white"});
+dojo.style(ed.iframe.parentNode,{height:"95%",width:"100%"});
+if(_c.style&&_c.style.overflow){
+this._oldOverflow=dojo.style(_c,"overflow");
+}else{
+this._oldOverflow="";
+}
+if(dojo.isIE&&!dojo.isQuirks){
+if(_c.parentNode&&_c.parentNode.style&&_c.parentNode.style.overflow){
+this._oldBodyParentOverflow=_c.parentNode.style.overflow;
+}else{
+try{
+this._oldBodyParentOverflow=dojo.style(_c.parentNode,"overflow");
+}
+catch(e){
+this._oldBodyParentOverflow="scroll";
+}
+}
+dojo.style(_c.parentNode,"overflow","hidden");
+}
+dojo.style(_c,"overflow","hidden");
+var _12=function(){
+var vp=dojo.window.getBox();
+if("_prevW" in this&&"_prevH" in this){
+if(vp.w===this._prevW&&vp.h===this._prevH){
+return;
+}
+}else{
+this._prevW=vp.w;
+this._prevH=vp.h;
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+delete this._resizer;
+}
+this._resizer=setTimeout(dojo.hitch(this,function(){
+delete this._resizer;
+this._resizeEditor();
+}),10);
+};
+this._resizeHandle=dojo.connect(window,"onresize",this,_12);
+this._resizeHandle2=dojo.connect(ed,"resize",dojo.hitch(this,function(){
+if(this._resizer){
+clearTimeout(this._resizer);
+delete this._resizer;
+}
+this._resizer=setTimeout(dojo.hitch(this,function(){
+delete this._resizer;
+this._resizeEditor();
+}),10);
+}));
+this._resizeEditor();
+var dn=this.editor.toolbar.domNode;
+setTimeout(function(){
+dojo.window.scrollIntoView(dn);
+},250);
+}else{
+if(this._resizeHandle){
+dojo.disconnect(this._resizeHandle);
+this._resizeHandle=null;
+}
+if(this._resizeHandle2){
+dojo.disconnect(this._resizeHandle2);
+this._resizeHandle2=null;
+}
+if(this._rst){
+clearTimeout(this._rst);
+this._rst=null;
+}
+while(_d&&_d!==dojo.body()){
+dojo.removeClass(_d,"dijitForceStatic");
+_d=_d.parentNode;
+}
+if(this._editorResizeHolder){
+this.editor.resize=this._editorResizeHolder;
+}
+if(!this._origState&&!this._origiFrameState){
+return;
+}
+if(ed._fullscreen_oldOnKeyDown){
+ed.onKeyDown=ed._fullscreen_oldOnKeyDown;
+delete ed._fullscreen_oldOnKeyDown;
+}
+var _13=this;
+setTimeout(function(){
+var mb=_13._origState.marginBox;
+var oh=_13._origState.height;
+if(dojo.isIE&&!dojo.isQuirks){
+_c.parentNode.style.overflow=_13._oldBodyParentOverflow;
+delete _13._oldBodyParentOverflow;
+}
+dojo.style(_c,"overflow",_13._oldOverflow);
+delete _13._oldOverflow;
+dojo.style(ed.domNode,_13._origState);
+dojo.style(ed.iframe.parentNode,{height:"",width:""});
+dojo.style(ed.iframe,_13._origiFrameState);
+delete _13._origState;
+delete _13._origiFrameState;
+var _14=dijit.getEnclosingWidget(ed.domNode.parentNode);
+if(_14&&_14.resize){
+_14.resize();
+}else{
+if(!oh||oh.indexOf("%")<0){
+setTimeout(dojo.hitch(this,function(){
+ed.resize({h:mb.h});
+}),0);
+}
+}
+dojo.window.scrollIntoView(_13.editor.toolbar.domNode);
+},100);
+}
+},destroy:function(){
+if(this._resizeHandle){
+dojo.disconnect(this._resizeHandle);
+this._resizeHandle=null;
+}
+if(this._resizeHandle2){
+dojo.disconnect(this._resizeHandle2);
+this._resizeHandle2=null;
+}
+if(this._resizer){
+clearTimeout(this._resizer);
+this._resizer=null;
+}
+this.inherited(arguments);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _15=o.args.name.toLowerCase();
+if(_15==="fullscreen"){
+o.plugin=new dijit._editor.plugins.FullScreen({zIndex:("zIndex" in o.args)?o.args.zIndex:500});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/TextColor.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/TextColor.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/TextColor.js	(revision 9)
@@ -0,0 +1,62 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.TextColor"]){
+dojo._hasResource["dijit._editor.plugins.TextColor"]=true;
+dojo.provide("dijit._editor.plugins.TextColor");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.ColorPalette");
+dojo.declare("dijit._editor.plugins.TextColor",dijit._editor._Plugin,{buttonClass:dijit.form.DropDownButton,useDefaultCommand:false,constructor:function(){
+this.dropDown=new dijit.ColorPalette();
+this.connect(this.dropDown,"onChange",function(_1){
+this.editor.execCommand(this.command,_1);
+});
+},updateState:function(){
+var _2=this.editor;
+var _3=this.command;
+if(!_2||!_2.isLoaded||!_3.length){
+return;
+}
+if(this.button){
+var _4;
+try{
+_4=_2.queryCommandValue(_3)||"";
+}
+catch(e){
+_4="";
+}
+}
+if(_4==""){
+_4="#000000";
+}
+if(_4=="transparent"){
+_4="#ffffff";
+}
+if(typeof _4=="string"){
+if(_4.indexOf("rgb")>-1){
+_4=dojo.colorFromRgb(_4).toHex();
+}
+}else{
+_4=((_4&255)<<16)|(_4&65280)|((_4&16711680)>>>16);
+_4=_4.toString(16);
+_4="#000000".slice(0,7-_4.length)+_4;
+}
+if(_4!==this.dropDown.get("value")){
+this.dropDown.set("value",_4,false);
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "foreColor":
+case "hiliteColor":
+o.plugin=new dijit._editor.plugins.TextColor({command:o.args.name});
+}
+});
+}
Index: trunk/web/dojo/dijit/_editor/plugins/AlwaysShowToolbar.js
===================================================================
--- trunk/web/dojo/dijit/_editor/plugins/AlwaysShowToolbar.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/plugins/AlwaysShowToolbar.js	(revision 9)
@@ -0,0 +1,119 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"]){
+dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"]=true;
+dojo.provide("dijit._editor.plugins.AlwaysShowToolbar");
+dojo.declare("dijit._editor.plugins.AlwaysShowToolbar",dijit._editor._Plugin,{_handleScroll:true,setEditor:function(e){
+if(!e.iframe){
+return;
+}
+this.editor=e;
+e.onLoadDeferred.addCallback(dojo.hitch(this,this.enable));
+},enable:function(d){
+this._updateHeight();
+this.connect(window,"onscroll","globalOnScrollHandler");
+this.connect(this.editor,"onNormalizedDisplayChanged","_updateHeight");
+return d;
+},_updateHeight:function(){
+var e=this.editor;
+if(!e.isLoaded){
+return;
+}
+if(e.height){
+return;
+}
+var _1=dojo.marginBox(e.editNode).h;
+if(dojo.isOpera){
+_1=e.editNode.scrollHeight;
+}
+if(!_1){
+_1=dojo.marginBox(e.document.body).h;
+}
+if(_1==0){
+return;
+}
+if(dojo.isIE<=7&&this.editor.minHeight){
+var _2=parseInt(this.editor.minHeight);
+if(_1<_2){
+_1=_2;
+}
+}
+if(_1!=this._lastHeight){
+this._lastHeight=_1;
+dojo.marginBox(e.iframe,{h:this._lastHeight});
+}
+},_lastHeight:0,globalOnScrollHandler:function(){
+var _3=dojo.isIE<7;
+if(!this._handleScroll){
+return;
+}
+var _4=this.editor.header;
+var db=dojo.body;
+if(!this._scrollSetUp){
+this._scrollSetUp=true;
+this._scrollThreshold=dojo.position(_4,true).y;
+}
+var _5=dojo._docScroll().y;
+var s=_4.style;
+if(_5>this._scrollThreshold&&_5<this._scrollThreshold+this._lastHeight){
+if(!this._fixEnabled){
+var _6=dojo.marginBox(_4);
+this.editor.iframe.style.marginTop=_6.h+"px";
+if(_3){
+s.left=dojo.position(_4).x;
+if(_4.previousSibling){
+this._IEOriginalPos=["after",_4.previousSibling];
+}else{
+if(_4.nextSibling){
+this._IEOriginalPos=["before",_4.nextSibling];
+}else{
+this._IEOriginalPos=["last",_4.parentNode];
+}
+}
+dojo.body().appendChild(_4);
+dojo.addClass(_4,"dijitIEFixedToolbar");
+}else{
+s.position="fixed";
+s.top="0px";
+}
+dojo.marginBox(_4,{w:_6.w});
+s.zIndex=2000;
+this._fixEnabled=true;
+}
+var _7=(this.height)?parseInt(this.editor.height):this.editor._lastHeight;
+s.display=(_5>this._scrollThreshold+_7)?"none":"";
+}else{
+if(this._fixEnabled){
+this.editor.iframe.style.marginTop="";
+s.position="";
+s.top="";
+s.zIndex="";
+s.display="";
+if(_3){
+s.left="";
+dojo.removeClass(_4,"dijitIEFixedToolbar");
+if(this._IEOriginalPos){
+dojo.place(_4,this._IEOriginalPos[1],this._IEOriginalPos[0]);
+this._IEOriginalPos=null;
+}else{
+dojo.place(_4,this.editor.iframe,"before");
+}
+}
+s.width="";
+this._fixEnabled=false;
+}
+}
+},destroy:function(){
+this._IEOriginalPos=null;
+this._handleScroll=false;
+dojo.forEach(this._connects,dojo.disconnect);
+if(dojo.isIE<7){
+dojo.removeClass(this.editor.header,"dijitIEFixedToolbar");
+}
+}});
+}
Index: trunk/web/dojo/dijit/_editor/RichText.js
===================================================================
--- trunk/web/dojo/dijit/_editor/RichText.js	(revision 0)
+++ trunk/web/dojo/dijit/_editor/RichText.js	(revision 9)
@@ -0,0 +1,1046 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._editor.RichText"]){
+dojo._hasResource["dijit._editor.RichText"]=true;
+dojo.provide("dijit._editor.RichText");
+dojo.require("dijit._Widget");
+dojo.require("dijit._CssStateMixin");
+dojo.require("dijit._editor.selection");
+dojo.require("dijit._editor.range");
+dojo.require("dijit._editor.html");
+if(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"]){
+if(dojo._postLoad){
+(function(){
+var _1=dojo.doc.createElement("textarea");
+_1.id=dijit._scopeName+"._editor.RichText.savedContent";
+dojo.style(_1,{display:"none",position:"absolute",top:"-100px",height:"3px",width:"3px"});
+dojo.body().appendChild(_1);
+})();
+}else{
+try{
+dojo.doc.write("<textarea id=\""+dijit._scopeName+"._editor.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");
+}
+catch(e){
+}
+}
+}
+dojo.declare("dijit._editor.RichText",[dijit._Widget,dijit._CssStateMixin],{constructor:function(_2){
+this.contentPreFilters=[];
+this.contentPostFilters=[];
+this.contentDomPreFilters=[];
+this.contentDomPostFilters=[];
+this.editingAreaStyleSheets=[];
+this.events=[].concat(this.events);
+this._keyHandlers={};
+this.contentPreFilters.push(dojo.hitch(this,"_preFixUrlAttributes"));
+if(dojo.isMoz){
+this.contentPreFilters.push(this._normalizeFontStyle);
+this.contentPostFilters.push(this._removeMozBogus);
+}
+if(dojo.isWebKit){
+this.contentPreFilters.push(this._removeWebkitBogus);
+this.contentPostFilters.push(this._removeWebkitBogus);
+}
+if(dojo.isIE){
+this.contentPostFilters.push(this._normalizeFontStyle);
+}
+if(_2&&dojo.isString(_2.value)){
+this.value=_2.value;
+}
+this.onLoadDeferred=new dojo.Deferred();
+},baseClass:"dijitEditor",inheritWidth:false,focusOnLoad:false,name:"",styleSheets:"",_content:"",height:"300px",minHeight:"1em",isClosed:true,isLoaded:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,isTabIndent:false,disableSpellCheck:false,postCreate:function(){
+if("textarea"==this.domNode.tagName.toLowerCase()){
+console.warn("RichText should not be used with the TEXTAREA tag.  See dijit._editor.RichText docs.");
+}
+this.inherited(arguments);
+dojo.publish(dijit._scopeName+"._editor.RichText::init",[this]);
+this.open();
+this.setupDefaultShortcuts();
+},setupDefaultShortcuts:function(){
+var _3=dojo.hitch(this,function(_4,_5){
+return function(){
+return !this.execCommand(_4,_5);
+};
+});
+var _6={b:_3("bold"),i:_3("italic"),u:_3("underline"),a:_3("selectall"),s:function(){
+this.save(true);
+},m:function(){
+this.isTabIndent=!this.isTabIndent;
+},"1":_3("formatblock","h1"),"2":_3("formatblock","h2"),"3":_3("formatblock","h3"),"4":_3("formatblock","h4"),"\\":_3("insertunorderedlist")};
+if(!dojo.isIE){
+_6.Z=_3("redo");
+}
+for(var _7 in _6){
+this.addKeyHandler(_7,true,false,_6[_7]);
+}
+},events:["onKeyPress","onKeyDown","onKeyUp","onClick"],captureEvents:[],_editorCommandsLocalized:false,_localizeEditorCommands:function(){
+if(this._editorCommandsLocalized){
+return;
+}
+this._editorCommandsLocalized=true;
+var _8=["div","p","pre","h1","h2","h3","h4","h5","h6","ol","ul","address"];
+var _9="",_a,i=0;
+while((_a=_8[i++])){
+if(_a.charAt(1)!="l"){
+_9+="<"+_a+"><span>content</span></"+_a+"><br/>";
+}else{
+_9+="<"+_a+"><li>content</li></"+_a+"><br/>";
+}
+}
+var _b=dojo.doc.createElement("div");
+dojo.style(_b,{position:"absolute",top:"-2000px"});
+dojo.doc.body.appendChild(_b);
+_b.innerHTML=_9;
+var _c=_b.firstChild;
+while(_c){
+dijit._editor.selection.selectElement(_c.firstChild);
+dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[_c.firstChild]);
+var _d=_c.tagName.toLowerCase();
+this._local2NativeFormatNames[_d]=document.queryCommandValue("formatblock");
+this._native2LocalFormatNames[this._local2NativeFormatNames[_d]]=_d;
+_c=_c.nextSibling.nextSibling;
+}
+dojo.body().removeChild(_b);
+},open:function(_e){
+if(!this.onLoadDeferred||this.onLoadDeferred.fired>=0){
+this.onLoadDeferred=new dojo.Deferred();
+}
+if(!this.isClosed){
+this.close();
+}
+dojo.publish(dijit._scopeName+"._editor.RichText::open",[this]);
+this._content="";
+if(arguments.length==1&&_e.nodeName){
+this.domNode=_e;
+}
+var dn=this.domNode;
+var _f;
+if(dojo.isString(this.value)){
+_f=this.value;
+delete this.value;
+dn.innerHTML="";
+}else{
+if(dn.nodeName&&dn.nodeName.toLowerCase()=="textarea"){
+var ta=(this.textarea=dn);
+this.name=ta.name;
+_f=ta.value;
+dn=this.domNode=dojo.doc.createElement("div");
+dn.setAttribute("widgetId",this.id);
+ta.removeAttribute("widgetId");
+dn.cssText=ta.cssText;
+dn.className+=" "+ta.className;
+dojo.place(dn,ta,"before");
+var _10=dojo.hitch(this,function(){
+dojo.style(ta,{display:"block",position:"absolute",top:"-1000px"});
+if(dojo.isIE){
+var s=ta.style;
+this.__overflow=s.overflow;
+s.overflow="hidden";
+}
+});
+if(dojo.isIE){
+setTimeout(_10,10);
+}else{
+_10();
+}
+if(ta.form){
+dojo.connect(ta.form,"onsubmit",this,function(){
+ta.value=this.getValue();
+});
+}
+}else{
+_f=dijit._editor.getChildrenHtml(dn);
+dn.innerHTML="";
+}
+}
+var _11=dojo.contentBox(dn);
+this._oldHeight=_11.h;
+this._oldWidth=_11.w;
+this.savedContent=_f;
+if(dn.nodeName&&dn.nodeName=="LI"){
+dn.innerHTML=" <br>";
+}
+this.header=dn.ownerDocument.createElement("div");
+dn.appendChild(this.header);
+this.editingArea=dn.ownerDocument.createElement("div");
+dn.appendChild(this.editingArea);
+this.footer=dn.ownerDocument.createElement("div");
+dn.appendChild(this.footer);
+if(this.name!==""&&(!dojo.config["useXDomain"]||dojo.config["allowXdRichTextSave"])){
+var _12=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");
+if(_12.value!==""){
+var _13=_12.value.split(this._SEPARATOR),i=0,dat;
+while((dat=_13[i++])){
+var _14=dat.split(":");
+if(_14[0]==this.name){
+_f=_14[1];
+_13.splice(i,1);
+break;
+}
+}
+}
+dojo.addOnUnload(dojo.hitch(this,"_saveContent"));
+}
+this.isClosed=false;
+var ifr=(this.editorObject=this.iframe=dojo.doc.createElement("iframe"));
+ifr.id=this.id+"_iframe";
+this._iframeSrc=this._getIframeDocTxt();
+ifr.style.border="none";
+ifr.style.width="100%";
+if(this._layoutMode){
+ifr.style.height="100%";
+}else{
+if(dojo.isIE>=7){
+if(this.height){
+ifr.style.height=this.height;
+}
+if(this.minHeight){
+ifr.style.minHeight=this.minHeight;
+}
+}else{
+ifr.style.height=this.height?this.height:this.minHeight;
+}
+}
+ifr.frameBorder=0;
+ifr._loadFunc=dojo.hitch(this,function(win){
+this.window=win;
+this.document=this.window.document;
+if(dojo.isIE){
+this._localizeEditorCommands();
+}
+this.onLoad(_f);
+});
+var s="javascript:parent."+dijit._scopeName+".byId(\""+this.id+"\")._iframeSrc";
+ifr.setAttribute("src",s);
+this.editingArea.appendChild(ifr);
+if(dn.nodeName=="LI"){
+dn.lastChild.style.marginTop="-1.2em";
+}
+dojo.addClass(this.domNode,this.baseClass);
+},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_getIframeDocTxt:function(){
+var _15=dojo.getComputedStyle(this.domNode);
+var _16="";
+var _17=true;
+if(dojo.isIE||(!this.height&&!dojo.isMoz)){
+_16="<div id='dijitEditorBody'></div>";
+_17=false;
+}else{
+if(dojo.isMoz){
+this._cursorToStart=true;
+_16="&nbsp;";
+}
+}
+var _18=[_15.fontWeight,_15.fontSize,_15.fontFamily].join(" ");
+var _19=_15.lineHeight;
+if(_19.indexOf("px")>=0){
+_19=parseFloat(_19)/parseFloat(_15.fontSize);
+}else{
+if(_19.indexOf("em")>=0){
+_19=parseFloat(_19);
+}else{
+_19="normal";
+}
+}
+var _1a="";
+var _1b=this;
+this.style.replace(/(^|;)\s*(line-|font-?)[^;]+/ig,function(_1c){
+_1c=_1c.replace(/^;/ig,"")+";";
+var s=_1c.split(":")[0];
+if(s){
+s=dojo.trim(s);
+s=s.toLowerCase();
+var i;
+var sC="";
+for(i=0;i<s.length;i++){
+var c=s.charAt(i);
+switch(c){
+case "-":
+i++;
+c=s.charAt(i).toUpperCase();
+default:
+sC+=c;
+}
+}
+dojo.style(_1b.domNode,sC,"");
+}
+_1a+=_1c+";";
+});
+var _1d=dojo.query("label[for=\""+this.id+"\"]");
+return [this.isLeftToRight()?"<html>\n<head>\n":"<html dir='rtl'>\n<head>\n",(dojo.isMoz&&_1d.length?"<title>"+_1d[0].innerHTML+"</title>\n":""),"<meta http-equiv='Content-Type' content='text/html'>\n","<style>\n","\tbody,html {\n","\t\tbackground:transparent;\n","\t\tpadding: 1px 0 0 0;\n","\t\tmargin: -1px 0 0 0;\n",((dojo.isWebKit)?"\t\twidth: 100%;\n":""),((dojo.isWebKit)?"\t\theight: 100%;\n":""),"\t}\n","\tbody{\n","\t\ttop:0px;\n","\t\tleft:0px;\n","\t\tright:0px;\n","\t\tfont:",_18,";\n",((this.height||dojo.isOpera)?"":"\t\tposition: fixed;\n"),"\t\tmin-height:",this.minHeight,";\n","\t\tline-height:",_19,";\n","\t}\n","\tp{ margin: 1em 0; }\n",(!_17&&!this.height?"\tbody,html {overflow-y: hidden;}\n":""),"\t#dijitEditorBody{overflow-x: auto; overflow-y:"+(this.height?"auto;":"hidden;")+"}\n","\tli > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; }\n","\tli{ min-height:1.2em; }\n","</style>\n",this._applyEditingAreaStyleSheets(),"\n","</head>\n<body ",(_17?"id='dijitEditorBody' ":""),"onload='frameElement._loadFunc(window,document)' style='"+_1a+"'>",_16,"</body>\n</html>"].join("");
+},_applyEditingAreaStyleSheets:function(){
+var _1e=[];
+if(this.styleSheets){
+_1e=this.styleSheets.split(";");
+this.styleSheets="";
+}
+_1e=_1e.concat(this.editingAreaStyleSheets);
+this.editingAreaStyleSheets=[];
+var _1f="",i=0,url;
+while((url=_1e[i++])){
+var _20=(new dojo._Url(dojo.global.location,url)).toString();
+this.editingAreaStyleSheets.push(_20);
+_1f+="<link rel=\"stylesheet\" type=\"text/css\" href=\""+_20+"\"/>";
+}
+return _1f;
+},addStyleSheet:function(uri){
+var url=uri.toString();
+if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
+url=(new dojo._Url(dojo.global.location,url)).toString();
+}
+if(dojo.indexOf(this.editingAreaStyleSheets,url)>-1){
+return;
+}
+this.editingAreaStyleSheets.push(url);
+this.onLoadDeferred.addCallback(dojo.hitch(function(){
+if(this.document.createStyleSheet){
+this.document.createStyleSheet(url);
+}else{
+var _21=this.document.getElementsByTagName("head")[0];
+var _22=this.document.createElement("link");
+_22.rel="stylesheet";
+_22.type="text/css";
+_22.href=url;
+_21.appendChild(_22);
+}
+}));
+},removeStyleSheet:function(uri){
+var url=uri.toString();
+if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){
+url=(new dojo._Url(dojo.global.location,url)).toString();
+}
+var _23=dojo.indexOf(this.editingAreaStyleSheets,url);
+if(_23==-1){
+return;
+}
+delete this.editingAreaStyleSheets[_23];
+dojo.withGlobal(this.window,"query",dojo,["link:[href=\""+url+"\"]"]).orphan();
+},disabled:false,_mozSettingProps:{"styleWithCSS":false},_setDisabledAttr:function(_24){
+this.disabled=_24;
+if(!this.isLoaded){
+return;
+}
+_24=!!_24;
+if(dojo.isIE||dojo.isWebKit||dojo.isOpera){
+var _25=dojo.isIE&&(this.isLoaded||!this.focusOnLoad);
+if(_25){
+this.editNode.unselectable="on";
+}
+this.editNode.contentEditable=!_24;
+if(_25){
+var _26=this;
+setTimeout(function(){
+_26.editNode.unselectable="off";
+},0);
+}
+}else{
+try{
+this.document.designMode=(_24?"off":"on");
+}
+catch(e){
+return;
+}
+if(!_24&&this._mozSettingProps){
+var ps=this._mozSettingProps;
+for(var n in ps){
+if(ps.hasOwnProperty(n)){
+try{
+this.document.execCommand(n,false,ps[n]);
+}
+catch(e2){
+}
+}
+}
+}
+}
+this._disabledOK=true;
+},onLoad:function(_27){
+if(!this.window.__registeredWindow){
+this.window.__registeredWindow=true;
+this._iframeRegHandle=dijit.registerIframe(this.iframe);
+}
+if(!dojo.isIE&&(this.height||dojo.isMoz)){
+this.editNode=this.document.body;
+}else{
+this.editNode=this.document.body.firstChild;
+var _28=this;
+if(dojo.isIE){
+var _29=(this.tabStop=dojo.doc.createElement("<div tabIndex=-1>"));
+this.editingArea.appendChild(_29);
+this.iframe.onfocus=function(){
+_28.editNode.setActive();
+};
+}
+}
+this.focusNode=this.editNode;
+var _2a=this.events.concat(this.captureEvents);
+var ap=this.iframe?this.document:this.editNode;
+dojo.forEach(_2a,function(_2b){
+this.connect(ap,_2b.toLowerCase(),_2b);
+},this);
+if(dojo.isIE){
+this.connect(this.document,"onmousedown","_onIEMouseDown");
+this.editNode.style.zoom=1;
+}else{
+this.connect(this.document,"onmousedown",function(){
+delete this._cursorToStart;
+});
+}
+if(dojo.isWebKit){
+this._webkitListener=this.connect(this.document,"onmouseup","onDisplayChanged");
+}
+if(dojo.isIE){
+try{
+this.document.execCommand("RespectVisibilityInDesign",true,null);
+}
+catch(e){
+}
+}
+this.isLoaded=true;
+this.set("disabled",this.disabled);
+var _2c=dojo.hitch(this,function(){
+this.setValue(_27);
+if(this.onLoadDeferred){
+this.onLoadDeferred.callback(true);
+}
+this.onDisplayChanged();
+if(this.focusOnLoad){
+dojo.addOnLoad(dojo.hitch(this,function(){
+setTimeout(dojo.hitch(this,"focus"),this.updateInterval);
+}));
+}
+this.savedContent=this.getValue(true);
+});
+if(this.setValueDeferred){
+this.setValueDeferred.addCallback(_2c);
+}else{
+_2c();
+}
+},onKeyDown:function(e){
+if(e.keyCode===dojo.keys.TAB&&this.isTabIndent){
+dojo.stopEvent(e);
+if(this.queryCommandEnabled((e.shiftKey?"outdent":"indent"))){
+this.execCommand((e.shiftKey?"outdent":"indent"));
+}
+}
+if(dojo.isIE){
+if(e.keyCode==dojo.keys.TAB&&!this.isTabIndent){
+if(e.shiftKey&&!e.ctrlKey&&!e.altKey){
+this.iframe.focus();
+}else{
+if(!e.shiftKey&&!e.ctrlKey&&!e.altKey){
+this.tabStop.focus();
+}
+}
+}else{
+if(e.keyCode===dojo.keys.BACKSPACE&&this.document.selection.type==="Control"){
+dojo.stopEvent(e);
+this.execCommand("delete");
+}else{
+if((65<=e.keyCode&&e.keyCode<=90)||(e.keyCode>=37&&e.keyCode<=40)){
+e.charCode=e.keyCode;
+this.onKeyPress(e);
+}
+}
+}
+}
+return true;
+},onKeyUp:function(e){
+return;
+},setDisabled:function(_2d){
+dojo.deprecated("dijit.Editor::setDisabled is deprecated","use dijit.Editor::attr(\"disabled\",boolean) instead",2);
+this.set("disabled",_2d);
+},_setValueAttr:function(_2e){
+this.setValue(_2e);
+},_setDisableSpellCheckAttr:function(_2f){
+if(this.document){
+dojo.attr(this.document.body,"spellcheck",!_2f);
+}else{
+this.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+dojo.attr(this.document.body,"spellcheck",!_2f);
+}));
+}
+this.disableSpellCheck=_2f;
+},onKeyPress:function(e){
+var c=(e.keyChar&&e.keyChar.toLowerCase())||e.keyCode,_30=this._keyHandlers[c],_31=arguments;
+if(_30&&!e.altKey){
+dojo.some(_30,function(h){
+if(!(h.shift^e.shiftKey)&&!(h.ctrl^(e.ctrlKey||e.metaKey))){
+if(!h.handler.apply(this,_31)){
+e.preventDefault();
+}
+return true;
+}
+},this);
+}
+if(!this._onKeyHitch){
+this._onKeyHitch=dojo.hitch(this,"onKeyPressed");
+}
+setTimeout(this._onKeyHitch,1);
+return true;
+},addKeyHandler:function(key,_32,_33,_34){
+if(!dojo.isArray(this._keyHandlers[key])){
+this._keyHandlers[key]=[];
+}
+this._keyHandlers[key].push({shift:_33||false,ctrl:_32||false,handler:_34});
+},onKeyPressed:function(){
+this.onDisplayChanged();
+},onClick:function(e){
+this.onDisplayChanged(e);
+},_onIEMouseDown:function(e){
+if(!this._focused&&!this.disabled){
+this.focus();
+}
+},_onBlur:function(e){
+this.inherited(arguments);
+var _35=this.getValue(true);
+if(_35!=this.savedContent){
+this.onChange(_35);
+this.savedContent=_35;
+}
+},_onFocus:function(e){
+if(!this.disabled){
+if(!this._disabledOK){
+this.set("disabled",false);
+}
+this.inherited(arguments);
+}
+},blur:function(){
+if(!dojo.isIE&&this.window.document.documentElement&&this.window.document.documentElement.focus){
+this.window.document.documentElement.focus();
+}else{
+if(dojo.doc.body.focus){
+dojo.doc.body.focus();
+}
+}
+},focus:function(){
+if(!this.isLoaded){
+this.focusOnLoad=true;
+return;
+}
+if(this._cursorToStart){
+delete this._cursorToStart;
+if(this.editNode.childNodes){
+this.placeCursorAtStart();
+return;
+}
+}
+if(!dojo.isIE){
+dijit.focus(this.iframe);
+}else{
+if(this.editNode&&this.editNode.focus){
+this.iframe.fireEvent("onfocus",document.createEventObject());
+}
+}
+},updateInterval:200,_updateTimer:null,onDisplayChanged:function(e){
+if(this._updateTimer){
+clearTimeout(this._updateTimer);
+}
+if(!this._updateHandler){
+this._updateHandler=dojo.hitch(this,"onNormalizedDisplayChanged");
+}
+this._updateTimer=setTimeout(this._updateHandler,this.updateInterval);
+},onNormalizedDisplayChanged:function(){
+delete this._updateTimer;
+},onChange:function(_36){
+},_normalizeCommand:function(cmd,_37){
+var _38=cmd.toLowerCase();
+if(_38=="formatblock"){
+if(dojo.isSafari&&_37===undefined){
+_38="heading";
+}
+}else{
+if(_38=="hilitecolor"&&!dojo.isMoz){
+_38="backcolor";
+}
+}
+return _38;
+},_qcaCache:{},queryCommandAvailable:function(_39){
+var ca=this._qcaCache[_39];
+if(ca!==undefined){
+return ca;
+}
+return (this._qcaCache[_39]=this._queryCommandAvailable(_39));
+},_queryCommandAvailable:function(_3a){
+var ie=1;
+var _3b=1<<1;
+var _3c=1<<2;
+var _3d=1<<3;
+var _3e=1<<4;
+function _3f(_40){
+return {ie:Boolean(_40&ie),mozilla:Boolean(_40&_3b),webkit:Boolean(_40&_3c),webkit420:Boolean(_40&_3e),opera:Boolean(_40&_3d)};
+};
+var _41=null;
+switch(_3a.toLowerCase()){
+case "bold":
+case "italic":
+case "underline":
+case "subscript":
+case "superscript":
+case "fontname":
+case "fontsize":
+case "forecolor":
+case "hilitecolor":
+case "justifycenter":
+case "justifyfull":
+case "justifyleft":
+case "justifyright":
+case "delete":
+case "selectall":
+case "toggledir":
+_41=_3f(_3b|ie|_3c|_3d);
+break;
+case "createlink":
+case "unlink":
+case "removeformat":
+case "inserthorizontalrule":
+case "insertimage":
+case "insertorderedlist":
+case "insertunorderedlist":
+case "indent":
+case "outdent":
+case "formatblock":
+case "inserthtml":
+case "undo":
+case "redo":
+case "strikethrough":
+case "tabindent":
+_41=_3f(_3b|ie|_3d|_3e);
+break;
+case "blockdirltr":
+case "blockdirrtl":
+case "dirltr":
+case "dirrtl":
+case "inlinedirltr":
+case "inlinedirrtl":
+_41=_3f(ie);
+break;
+case "cut":
+case "copy":
+case "paste":
+_41=_3f(ie|_3b|_3e);
+break;
+case "inserttable":
+_41=_3f(_3b|ie);
+break;
+case "insertcell":
+case "insertcol":
+case "insertrow":
+case "deletecells":
+case "deletecols":
+case "deleterows":
+case "mergecells":
+case "splitcell":
+_41=_3f(ie|_3b);
+break;
+default:
+return false;
+}
+return (dojo.isIE&&_41.ie)||(dojo.isMoz&&_41.mozilla)||(dojo.isWebKit&&_41.webkit)||(dojo.isWebKit>420&&_41.webkit420)||(dojo.isOpera&&_41.opera);
+},execCommand:function(_42,_43){
+var _44;
+this.focus();
+_42=this._normalizeCommand(_42,_43);
+if(_43!==undefined){
+if(_42=="heading"){
+throw new Error("unimplemented");
+}else{
+if((_42=="formatblock")&&dojo.isIE){
+_43="<"+_43+">";
+}
+}
+}
+var _45="_"+_42+"Impl";
+if(this[_45]){
+_44=this[_45](_43);
+}else{
+_43=arguments.length>1?_43:null;
+if(_43||_42!="createlink"){
+_44=this.document.execCommand(_42,false,_43);
+}
+}
+this.onDisplayChanged();
+return _44;
+},queryCommandEnabled:function(_46){
+if(this.disabled||!this._disabledOK){
+return false;
+}
+_46=this._normalizeCommand(_46);
+if(dojo.isMoz||dojo.isWebKit){
+if(_46=="unlink"){
+return this._sCall("hasAncestorElement",["a"]);
+}else{
+if(_46=="inserttable"){
+return true;
+}
+}
+}
+if(dojo.isWebKit){
+if(_46=="copy"){
+_46="cut";
+}else{
+if(_46=="paste"){
+return true;
+}
+}
+}
+var _47=dojo.isIE?this.document.selection.createRange():this.document;
+try{
+return _47.queryCommandEnabled(_46);
+}
+catch(e){
+return false;
+}
+},queryCommandState:function(_48){
+if(this.disabled||!this._disabledOK){
+return false;
+}
+_48=this._normalizeCommand(_48);
+try{
+return this.document.queryCommandState(_48);
+}
+catch(e){
+return false;
+}
+},queryCommandValue:function(_49){
+if(this.disabled||!this._disabledOK){
+return false;
+}
+var r;
+_49=this._normalizeCommand(_49);
+if(dojo.isIE&&_49=="formatblock"){
+r=this._native2LocalFormatNames[this.document.queryCommandValue(_49)];
+}else{
+if(dojo.isMoz&&_49==="hilitecolor"){
+var _4a;
+try{
+_4a=this.document.queryCommandValue("styleWithCSS");
+}
+catch(e){
+_4a=false;
+}
+this.document.execCommand("styleWithCSS",false,true);
+r=this.document.queryCommandValue(_49);
+this.document.execCommand("styleWithCSS",false,_4a);
+}else{
+r=this.document.queryCommandValue(_49);
+}
+}
+return r;
+},_sCall:function(_4b,_4c){
+return dojo.withGlobal(this.window,_4b,dijit._editor.selection,_4c);
+},placeCursorAtStart:function(){
+this.focus();
+var _4d=false;
+if(dojo.isMoz){
+var _4e=this.editNode.firstChild;
+while(_4e){
+if(_4e.nodeType==3){
+if(_4e.nodeValue.replace(/^\s+|\s+$/g,"").length>0){
+_4d=true;
+this._sCall("selectElement",[_4e]);
+break;
+}
+}else{
+if(_4e.nodeType==1){
+_4d=true;
+var tg=_4e.tagName?_4e.tagName.toLowerCase():"";
+if(/br|input|img|base|meta|area|basefont|hr|link/.test(tg)){
+this._sCall("selectElement",[_4e]);
+}else{
+this._sCall("selectElementChildren",[_4e]);
+}
+break;
+}
+}
+_4e=_4e.nextSibling;
+}
+}else{
+_4d=true;
+this._sCall("selectElementChildren",[this.editNode]);
+}
+if(_4d){
+this._sCall("collapse",[true]);
+}
+},placeCursorAtEnd:function(){
+this.focus();
+var _4f=false;
+if(dojo.isMoz){
+var _50=this.editNode.lastChild;
+while(_50){
+if(_50.nodeType==3){
+if(_50.nodeValue.replace(/^\s+|\s+$/g,"").length>0){
+_4f=true;
+this._sCall("selectElement",[_50]);
+break;
+}
+}else{
+if(_50.nodeType==1){
+_4f=true;
+if(_50.lastChild){
+this._sCall("selectElement",[_50.lastChild]);
+}else{
+this._sCall("selectElement",[_50]);
+}
+break;
+}
+}
+_50=_50.previousSibling;
+}
+}else{
+_4f=true;
+this._sCall("selectElementChildren",[this.editNode]);
+}
+if(_4f){
+this._sCall("collapse",[false]);
+}
+},getValue:function(_51){
+if(this.textarea){
+if(this.isClosed||!this.isLoaded){
+return this.textarea.value;
+}
+}
+return this._postFilterContent(null,_51);
+},_getValueAttr:function(){
+return this.getValue(true);
+},setValue:function(_52){
+if(!this.isLoaded){
+this.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this.setValue(_52);
+}));
+return;
+}
+this._cursorToStart=true;
+if(this.textarea&&(this.isClosed||!this.isLoaded)){
+this.textarea.value=_52;
+}else{
+_52=this._preFilterContent(_52);
+var _53=this.isClosed?this.domNode:this.editNode;
+if(!_52&&dojo.isWebKit){
+_52="&nbsp;";
+}
+_53.innerHTML=_52;
+this._preDomFilterContent(_53);
+}
+this.onDisplayChanged();
+},replaceValue:function(_54){
+if(this.isClosed){
+this.setValue(_54);
+}else{
+if(this.window&&this.window.getSelection&&!dojo.isMoz){
+this.setValue(_54);
+}else{
+if(this.window&&this.window.getSelection){
+_54=this._preFilterContent(_54);
+this.execCommand("selectall");
+if(!_54){
+this._cursorToStart=true;
+_54="&nbsp;";
+}
+this.execCommand("inserthtml",_54);
+this._preDomFilterContent(this.editNode);
+}else{
+if(this.document&&this.document.selection){
+this.setValue(_54);
+}
+}
+}
+}
+},_preFilterContent:function(_55){
+var ec=_55;
+dojo.forEach(this.contentPreFilters,function(ef){
+if(ef){
+ec=ef(ec);
+}
+});
+return ec;
+},_preDomFilterContent:function(dom){
+dom=dom||this.editNode;
+dojo.forEach(this.contentDomPreFilters,function(ef){
+if(ef&&dojo.isFunction(ef)){
+ef(dom);
+}
+},this);
+},_postFilterContent:function(dom,_56){
+var ec;
+if(!dojo.isString(dom)){
+dom=dom||this.editNode;
+if(this.contentDomPostFilters.length){
+if(_56){
+dom=dojo.clone(dom);
+}
+dojo.forEach(this.contentDomPostFilters,function(ef){
+dom=ef(dom);
+});
+}
+ec=dijit._editor.getChildrenHtml(dom);
+}else{
+ec=dom;
+}
+if(!dojo.trim(ec.replace(/^\xA0\xA0*/,"").replace(/\xA0\xA0*$/,"")).length){
+ec="";
+}
+dojo.forEach(this.contentPostFilters,function(ef){
+ec=ef(ec);
+});
+return ec;
+},_saveContent:function(e){
+var _57=dojo.byId(dijit._scopeName+"._editor.RichText.savedContent");
+if(_57.value){
+_57.value+=this._SEPARATOR;
+}
+_57.value+=this.name+":"+this.getValue(true);
+},escapeXml:function(str,_58){
+str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
+if(!_58){
+str=str.replace(/'/gm,"&#39;");
+}
+return str;
+},getNodeHtml:function(_59){
+dojo.deprecated("dijit.Editor::getNodeHtml is deprecated","use dijit._editor.getNodeHtml instead",2);
+return dijit._editor.getNodeHtml(_59);
+},getNodeChildrenHtml:function(dom){
+dojo.deprecated("dijit.Editor::getNodeChildrenHtml is deprecated","use dijit._editor.getChildrenHtml instead",2);
+return dijit._editor.getChildrenHtml(dom);
+},close:function(_5a){
+if(this.isClosed){
+return false;
+}
+if(!arguments.length){
+_5a=true;
+}
+this._content=this.getValue();
+var _5b=(this.savedContent!=this._content);
+if(this.interval){
+clearInterval(this.interval);
+}
+if(this._webkitListener){
+this.disconnect(this._webkitListener);
+delete this._webkitListener;
+}
+if(dojo.isIE){
+this.iframe.onfocus=null;
+}
+this.iframe._loadFunc=null;
+if(this._iframeRegHandle){
+dijit.unregisterIframe(this._iframeRegHandle);
+delete this._iframeRegHandle;
+}
+if(this.textarea){
+var s=this.textarea.style;
+s.position="";
+s.left=s.top="";
+if(dojo.isIE){
+s.overflow=this.__overflow;
+this.__overflow=null;
+}
+this.textarea.value=_5a?this._content:this.savedContent;
+dojo.destroy(this.domNode);
+this.domNode=this.textarea;
+}else{
+this.domNode.innerHTML=_5a?this._content:this.savedContent;
+}
+delete this.iframe;
+dojo.removeClass(this.domNode,this.baseClass);
+this.isClosed=true;
+this.isLoaded=false;
+delete this.editNode;
+delete this.focusNode;
+if(this.window&&this.window._frameElement){
+this.window._frameElement=null;
+}
+this.window=null;
+this.document=null;
+this.editingArea=null;
+this.editorObject=null;
+return _5b;
+},destroy:function(){
+if(!this.isClosed){
+this.close(false);
+}
+this.inherited(arguments);
+},_removeMozBogus:function(_5c){
+return _5c.replace(/\stype="_moz"/gi,"").replace(/\s_moz_dirty=""/gi,"").replace(/_moz_resizing="(true|false)"/gi,"");
+},_removeWebkitBogus:function(_5d){
+_5d=_5d.replace(/\sclass="webkit-block-placeholder"/gi,"");
+_5d=_5d.replace(/\sclass="apple-style-span"/gi,"");
+return _5d;
+},_normalizeFontStyle:function(_5e){
+return _5e.replace(/<(\/)?strong([ \>])/gi,"<$1b$2").replace(/<(\/)?em([ \>])/gi,"<$1i$2");
+},_preFixUrlAttributes:function(_5f){
+return _5f.replace(/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2").replace(/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2");
+},_inserthorizontalruleImpl:function(_60){
+if(dojo.isIE){
+return this._inserthtmlImpl("<hr>");
+}
+return this.document.execCommand("inserthorizontalrule",false,_60);
+},_unlinkImpl:function(_61){
+if((this.queryCommandEnabled("unlink"))&&(dojo.isMoz||dojo.isWebKit)){
+var a=this._sCall("getAncestorElement",["a"]);
+this._sCall("selectElement",[a]);
+return this.document.execCommand("unlink",false,null);
+}
+return this.document.execCommand("unlink",false,_61);
+},_hilitecolorImpl:function(_62){
+var _63;
+if(dojo.isMoz){
+this.document.execCommand("styleWithCSS",false,true);
+_63=this.document.execCommand("hilitecolor",false,_62);
+this.document.execCommand("styleWithCSS",false,false);
+}else{
+_63=this.document.execCommand("hilitecolor",false,_62);
+}
+return _63;
+},_backcolorImpl:function(_64){
+if(dojo.isIE){
+_64=_64?_64:null;
+}
+return this.document.execCommand("backcolor",false,_64);
+},_forecolorImpl:function(_65){
+if(dojo.isIE){
+_65=_65?_65:null;
+}
+return this.document.execCommand("forecolor",false,_65);
+},_inserthtmlImpl:function(_66){
+_66=this._preFilterContent(_66);
+var rv=true;
+if(dojo.isIE){
+var _67=this.document.selection.createRange();
+if(this.document.selection.type.toUpperCase()=="CONTROL"){
+var n=_67.item(0);
+while(_67.length){
+_67.remove(_67.item(0));
+}
+n.outerHTML=_66;
+}else{
+_67.pasteHTML(_66);
+}
+_67.select();
+}else{
+if(dojo.isMoz&&!_66.length){
+this._sCall("remove");
+}else{
+rv=this.document.execCommand("inserthtml",false,_66);
+}
+}
+return rv;
+},getHeaderHeight:function(){
+return this._getNodeChildrenHeight(this.header);
+},getFooterHeight:function(){
+return this._getNodeChildrenHeight(this.footer);
+},_getNodeChildrenHeight:function(_68){
+var h=0;
+if(_68&&_68.childNodes){
+var i;
+for(i=0;i<_68.childNodes.length;i++){
+var _69=dojo.position(_68.childNodes[i]);
+h+=_69.h;
+}
+}
+return h;
+}});
+}
Index: trunk/web/dojo/dijit/themes/dijit.css
===================================================================
--- trunk/web/dojo/dijit/themes/dijit.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/dijit.css	(revision 9)
@@ -0,0 +1,1652 @@
+.dijitReset {
+	margin:0;
+	border:0;
+	padding:0;
+	line-height:normal;
+	font: inherit;
+	color: inherit;
+}
+.dijit_a11y .dijitReset {
+	-moz-appearance: none; 
+}
+.dijitInline {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dijitHidden {
+	
+	display: none !important;
+}
+.dijitVisible {
+	
+	display: block !important;	
+	position: relative;			
+}
+.dijitInputContainer {
+	
+	#zoom: 1;
+	overflow: hidden;
+	float: none !important; 
+	position:relative;
+}
+.dj_ie INPUT.dijitTextBox,
+.dj_ie .dijitTextBox INPUT {
+	font-size: 100%;
+}
+.dijitTextBox .dijitSpinnerButtonContainer,
+.dijitTextBox .dijitArrowButtonContainer,
+.dijitTextBox .dijitValidationContainer {
+	float: right;
+	text-align: center;
+}
+.dijitTextBox INPUT.dijitInputField {
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+}
+.dijitTextBox .dijitValidationContainer {
+	display: none;
+}
+.dijitInlineTable {
+	
+	display:inline-table;
+	display:inline-block;		
+	#zoom: 1; 
+	#display:inline; 
+	box-sizing: content-box; -moz-box-sizing: content-box;
+	border:0;
+	padding:0;
+}
+.dijitTeeny {
+	font-size:1px;
+	line-height:1px;
+}
+.dijitOffScreen {
+	position: absolute;
+	visibility: hidden;
+	left: 50%;
+	top: -10000px;
+}
+.dijitPopup {
+	position: absolute;
+	background-color: transparent;
+	margin: 0;
+	border: 0;
+	padding: 0;
+}
+.dijit_a11y .dijitPopup,
+.dijit_ally .dijitPopup DIV,
+.dijit_a11y .dijitPopup TABLE,
+.dijit_a11y .dijitTooltipContainer {
+	background-color: white !important;
+}
+.dijitPositionOnly {
+	
+	padding: 0 !important;
+	border: 0 !important;
+	background-color: transparent !important;
+	background-image: none !important;
+	height: auto !important;
+	width: auto !important;
+}
+.dijitNonPositionOnly {
+	
+	float: none !important;
+	position: static !important;
+	margin: 0 0 0 0 !important;
+	vertical-align: middle !important;
+}
+.dijitBackgroundIframe {
+	
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	z-index: -1;
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+.dijitDisplayNone {
+	
+	display:none !important;
+}
+.dijitContainer {
+	
+	overflow: hidden;	
+}
+.dijit_a11y * {
+	background-image:none !important;
+}
+.dijit_a11y .dijitIcon,
+.dijit_a11y DIV.dijitArrowButtonInner, 
+.dijit_a11y SPAN.dijitArrowButtonInner,
+.dijit_a11y IMG.dijitArrowButtonInner,
+.dijit_a11y .dijitCalendarIncrementControl {
+	
+	display: none;
+}
+.dijitSpinner DIV.dijitArrowButtonInner {
+	display: block; 
+}
+.dijit_a11y .dijitA11ySideArrow {
+	display: inline !important; 
+	cursor: pointer;
+}
+.dijit_a11y .dijitCalendarDateLabel {
+	padding: 1px;
+}
+.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+	border-style: dotted !important;
+	border-width: 1px;
+	padding: 0px;
+}
+.dijit_a11y .dijitCalendarDateTemplate {
+	padding-bottom: 0.1em !important;	
+}
+.dijit_a11y .dijit * {
+	background:white !important;
+	color:black !important;
+}
+.dijit_a11y .dijitButtonNode {
+	border-color: black!important;
+	border-style: outset!important;
+	border-width: medium!important;
+}
+.dijit_a11y .dijitTextBoxReadOnly .dijitInputField,
+.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitButtonNode * {
+	vertical-align: middle;
+}
+.dijitButtonNode .dijitArrowButtonInner {
+	
+	background: no-repeat center;
+	width: 12px;
+	height: 12px;
+	direction: ltr; 
+}
+.dijitLeft {
+	
+	background-position:left top;
+	background-repeat:no-repeat;
+}
+.dijitStretch {
+	
+	white-space:nowrap;			
+	background-repeat:repeat-x;
+}
+.dijitRight {
+	
+	#display:inline;				
+	background-position:right top;
+	background-repeat:no-repeat;
+}
+.dijitToggleButton,
+.dijitButton,
+.dijitDropDownButton,
+.dijitComboButton {
+	
+	margin: 0.2em;
+}
+.dijitButtonContents {
+	display: block;		
+}
+td.dijitButtonContents {
+	display: table-cell;	
+}
+.dijitButtonNode IMG {
+	
+	vertical-align:middle;
+	
+}
+TABLE.dijitComboButton { 
+	
+	border-collapse: collapse;
+	border:0;
+	padding:0;
+	margin:0;
+}
+.dijitToolbar .dijitComboButton {
+	
+	border-collapse: separate;
+}
+.dijitToolbar .dijitToggleButton,
+.dijitToolbar .dijitButton,
+.dijitToolbar .dijitDropDownButton,
+.dijitToolbar .dijitComboButton {
+	margin: 0;
+}
+.dijitToolbar .dijitButtonContents {
+	
+	padding: 1px 2px;
+}
+.dj_ie .dijitComboButton {
+	
+	margin-bottom: -3px;
+}
+.dj_webkit .dijitToolbar .dijitDropDownButton {
+	padding-left: 0.3em;
+}
+.dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
+	padding:0;
+}
+.dijitButtonNode {
+	
+	border:1px solid gray;
+	margin:0;
+	line-height:normal;
+	vertical-align: middle;
+	#vertical-align: auto;
+	text-align:center;
+	white-space: nowrap;
+}
+.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
+	
+	line-height:inherit;
+}
+.dijitTextBox .dijitButtonNode {
+	border-width: 0;
+}
+.dijitButtonNode,
+.dijitButtonNode * {
+	cursor: pointer;
+}
+.dj_ie .dijitButtonNode {
+	
+	zoom: 1;
+}
+.dj_ie .dijitButtonNode button {
+	
+	overflow: visible;
+}
+DIV.dijitArrowButton {
+	float: right;
+}
+.dijitTextBox {
+	border: solid black 1px;
+	#overflow: hidden; 
+	width: 15em;	
+	vertical-align: middle;
+	#vertical-align: auto;
+}
+.dijitTextBoxReadOnly,
+.dijitTextBoxDisabled {
+	color: gray;
+}
+.dj_webkit .dijitTextBoxDisabled INPUT {
+	color: #eee; 
+}
+.dj_webkit TEXTAREA.dijitTextAreaDisabled {
+	color: #333; 
+}
+.dj_gecko .dijitTextBoxReadOnly INPUT,
+.dj_gecko .dijitTextBoxDisabled INPUT {
+	-moz-user-input: none; 
+}
+.dijitPlaceHolder {
+	
+	color: #AAAAAA;
+	font-style: italic;
+	position: absolute;
+	top: 0;
+	left: 0;
+	#filter: ""; 
+}
+.dijitTimeTextBox {
+	width: 8em;
+}
+.dijitTextBox INPUT:focus {
+	outline: none;	
+}
+.dijitTextBoxFocused {
+	outline: auto 5px -webkit-focus-ring-color;
+}
+.dijitTextBox INPUT {
+	float: left; 
+}
+.dijitInputInner {
+	
+	border:0 !important;
+	vertical-align:middle !important;
+	background-color:transparent !important;
+	width:100% !important;
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+}
+.dijit_a11y .dijitTextBox INPUT {
+	margin: 0 !important;
+}
+.dijitTextBoxError INPUT.dijitValidationInner,
+.dijitTextBox INPUT.dijitArrowButtonInner {
+	
+	text-indent: -1em !important;
+	direction: ltr !important;
+	text-align: left !important;
+	height: auto !important;
+	#text-indent: 0 !important;
+	#letter-spacing: -5em !important;
+	#text-align: right !important;
+}
+.dj_ie .dijitTextBox INPUT,
+.dj_ie INPUT.dijitTextBox {
+	overflow-y: visible; 
+	line-height: normal; 
+}
+.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
+.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
+	line-height: 86%; 
+}
+.dj_ie6 .dijitTextBox INPUT,
+.dj_ie6 INPUT.dijitTextBox,
+.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
+.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
+.dj_iequirks INPUT.dijitTextBox {
+	line-height: 100%; 
+}
+.dijit_a11y INPUT.dijitValidationInner,
+.dijit_a11y INPUT.dijitArrowButtonInner {
+	
+	text-indent: 0 !important;
+	width: 1em !important;
+	#text-align: left !important;
+}
+.dijitTextBoxError .dijitValidationContainer {
+	display: inline;
+	cursor: default;
+}
+.dijitSpinner .dijitSpinnerButtonContainer,
+.dijitComboBox .dijitArrowButtonContainer {
+	
+	border-width: 0 0 0 1px !important; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	
+	border-width: 0;
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	clear: both; 
+}
+.dijit_a11y .dijitTextBox .dijitValidationContainer,
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
+	
+	border: solid black !important;
+	border-width: 0 0 0 1px !important;
+}
+.dj_ie .dijitToolbar .dijitComboBox {
+	
+	vertical-align: middle;
+}
+.dijitTextBox .dijitSpinnerButtonContainer {
+	width: 1em;
+	position: relative !important;
+	overflow: hidden;
+}
+.dijitSpinner .dijitSpinnerButtonInner {
+	width:1em;
+	visibility:hidden !important; 
+	overflow-x:hidden;
+}
+.dijitComboBox .dijitButtonNode,
+.dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 0;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border: 0 none !important;
+}
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
+.dijit_a11y .dijitSpinnerButtonContainer INPUT {
+	width: 1em !important;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
+	margin: 0 auto !important; 
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.3em !important;
+	padding-right: 0.3em !important;
+	margin-left: 0.3em !important;
+	margin-right: 0.3em !important;
+	width: 1.4em !important;
+}
+.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.0em !important; 
+	padding-right: 0.0em !important;
+	width: 1em !important;
+}
+.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0.1em !important;
+	margin-right: 0.1em !important;
+	width: 1em !important;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+	width: 2em !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	
+	padding: 0;
+	position: absolute !important;
+	right: 0;
+	float: none;
+	height: 50%;
+	width: 100%;
+	bottom: auto;
+	left: 0;
+	right: auto;
+}
+.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: auto;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
+	overflow: visible !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
+	top: 50%;
+	border-top-width: 1px !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
+	#bottom: 50%;	
+	top: 0;
+}
+.dijitSpinner .dijitArrowButtonInner {
+	margin: auto;
+	overflow-x: hidden;
+	height: 100% !important;
+}
+.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
+	height: auto !important;
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	-moz-transform: scale(0.5);
+	-moz-transform-origin: center top;
+	-webkit-transform: scale(0.5);
+	-webkit-transform-origin: center top;
+	-o-transform: scale(0.5);
+	-o-transform-origin: center top;
+	transform: scale(0.5);
+	transform-origin: left top;
+	padding-top: 0;
+	padding-bottom: 0;
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	width: 100%;
+}
+.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	zoom: 50%; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
+	overflow: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 100%;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 1em; 
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	visibility: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	vertical-align:top;
+	visibility: visible;
+}
+.dijit_a11y .dijitSpinnerButtonContainer {
+	width: 1em;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 1px 0px 0px 0px;
+	border-style: solid !important;
+}
+.dijitCheckBox,
+.dijitRadio,
+.dijitCheckBoxInput {
+	padding: 0;
+	border: 0;
+	width: 16px;
+	height: 16px;
+	background-position:center center;
+	background-repeat:no-repeat;
+	overflow: hidden;
+}
+.dijitCheckBox INPUT,
+.dijitRadio INPUT {
+	margin: 0;
+	padding: 0;
+	display: block;
+}
+.dijitCheckBoxInput {
+	
+	opacity: 0.01;
+}
+.dj_ie .dijitCheckBoxInput {
+	filter: alpha(opacity=0);
+}
+.dijit_a11y .dijitCheckBox,
+.dijit_a11y .dijitRadio {
+	
+	width: auto !important;
+	height: auto !important;
+}
+.dijit_a11y .dijitCheckBoxInput {
+	opacity: 1;
+	filter: none;
+	width: auto;
+	height: auto;
+}
+.dijitProgressBarEmpty {
+	
+	position:relative;overflow:hidden;
+	border:1px solid black; 	
+	z-index:0;			
+}
+.dijitProgressBarFull {
+	
+	position:absolute;
+	overflow:hidden;
+	z-index:-1;
+	top:0;
+	width:100%;
+}
+.dj_ie6 .dijitProgressBarFull {
+	height:1.6em;
+}
+.dijitProgressBarTile {
+	
+	position:absolute;
+	overflow:hidden;
+	top:0;
+	left:0;
+	bottom:0;
+	right:0;
+	margin:0;
+	padding:0;
+	width:auto;
+	height:auto;
+	background-color:#aaa;
+	background-attachment: fixed;
+}
+.dijit_a11y .dijitProgressBarTile {
+	
+	border-width:2px;
+	border-style:solid;
+	background-color:transparent !important;
+}
+.dj_ie6 .dijitProgressBarTile {
+	
+	position:static;
+	
+	height:1.6em;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarLabel {
+	visibility:hidden;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+}
+.dijitProgressBarIndeterminateHighContrastImage {
+	display:none;
+}
+.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
+	display:block;
+	position:absolute;
+	top:0;
+	bottom:0;
+	margin:0;
+	padding:0;
+	width:100%;
+	height:auto;
+}
+.dijitProgressBarLabel {
+	display:block;
+	position:static;
+	width:100%;
+	text-align:center;
+	background-color:transparent !important;
+}
+.dijitTooltip {
+	position: absolute;
+	z-index: 2000;
+	display: block;
+	
+	left: 50%;
+	top: -10000px;
+	overflow: visible;
+}
+.dijitTooltipContainer {
+	border: solid black 2px;
+	background: #b8b5b5;
+	color: black;
+	font-size: small;
+}
+.dijitTooltipFocusNode {
+	padding: 2px 2px 2px 2px;
+}
+.dijitTooltipConnector {
+	position: absolute;
+}
+.dijit_a11y .dijitTooltipConnector {
+	display: none;	
+}
+.dijitTooltipData {
+	display:none;
+}
+.dijitLayoutContainer {
+	position: relative;
+	display: block;
+	overflow: hidden;
+}
+body .dijitAlignTop,
+body .dijitAlignBottom,
+body .dijitAlignLeft,
+body .dijitAlignRight {
+	position: absolute;
+	overflow: hidden;
+}
+body .dijitAlignClient { position: absolute; }
+.dijitBorderContainer, .dijitBorderContainerNoGutter {
+	position:relative;
+	overflow: hidden;
+}
+.dijitBorderContainerPane,
+.dijitBorderContainerNoGutterPane {
+	position: absolute !important;	
+	z-index: 2;		
+}
+.dijitBorderContainer > .dijitTextArea {
+	
+	resize: none;
+}
+.dijitGutter {
+	
+	position: absolute;
+	font-size: 1px;		
+}
+.dijitSplitter {
+	position: absolute;
+	overflow: hidden;
+	z-index: 10;		
+	background-color: #fff;
+	border-color: gray;
+	border-style: solid;
+	border-width: 0;
+}
+.dj_ie .dijitSplitter {
+	z-index: 1;	
+}
+.dijitSplitterActive {
+	z-index: 11 !important;
+}
+.dijitSplitterCover {
+	position:absolute;
+	z-index:-1;
+	top:0;
+	left:0;
+	width:100%;
+	height:100%;
+}
+.dijitSplitterCoverActive {
+	z-index:3 !important;
+}
+.dj_ie .dijitSplitterCover {
+	background: white;
+	filter: alpha(opacity=0);
+}
+.dijitSplitterH {
+	height: 7px;
+	border-top:1px;
+	border-bottom:1px;
+	cursor: ns-resize;
+}
+.dijitSplitterV {
+	width: 7px;
+	border-left:1px;
+	border-right:1px;
+	cursor: ew-resize;
+}
+.dijitSplitContainer {
+	position: relative;
+	overflow: hidden;
+	display: block;
+}
+.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
+	outline-style:dotted;
+	outline-width: 2px;
+}
+.dijitSplitPane {
+	position: absolute;
+}
+.dijitSplitContainerSizerH,
+.dijitSplitContainerSizerV {
+	position:absolute;
+	font-size: 1px;
+	cursor: move;
+	cursor: w-resize;
+	background-color: ThreeDFace;
+	border: 1px solid;
+	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
+	margin: 0;
+}
+.dijitSplitContainerSizerH .thumb, .dijitSplitterV .dijitSplitterThumb {
+	overflow:hidden;
+	position:absolute;
+	top:49%;
+}
+.dijitSplitContainerSizerV .thumb, .dijitSplitterH .dijitSplitterThumb {
+	position:absolute;
+	left:49%;
+}
+.dijitSplitterShadow,
+.dijitSplitContainerVirtualSizerH,
+.dijitSplitContainerVirtualSizerV {
+	font-size: 1px;
+	background-color: ThreeDShadow;
+	-moz-opacity: 0.5;
+	opacity: 0.5;
+	filter: Alpha(Opacity=50);
+	margin: 0;
+}
+.dj_ie .dijitSplitterV, .dijitSplitContainerVirtualSizerH {
+	cursor: w-resize;
+}
+.dj_ie .dijitSplitterH, .dijitSplitContainerSizerV, .dijitSplitContainerVirtualSizerV {
+	cursor: n-resize;
+}
+.dijit_a11y .dijitSplitterH {
+	border-top:1px solid #d3d3d3 !important;
+	border-bottom:1px solid #d3d3d3 !important;
+}
+.dijit_a11y .dijitSplitterV {
+	border-left:1px solid #d3d3d3 !important;
+	border-right:1px solid #d3d3d3 !important;
+}
+.dijitContentPane {
+	display: block;
+	overflow: auto;	
+}
+.dijitContentPaneSingleChild {
+	
+	overflow: hidden;
+}
+.dijitTitlePane {
+	display: block;
+	overflow: hidden;
+}
+.dijitTitlePaneTitle {
+	cursor: pointer;
+}
+.dijitFixedOpen {
+	
+	cursor: default;
+}
+.dijitTitlePaneTitle * {
+	vertical-align: middle;
+}
+.dijitTitlePane .dijitArrowNodeInner {
+	
+	display: none;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
+	
+	display:inline !important;
+	font-family: monospace;		
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+	
+	display:none;
+}
+.dj_ie6 .dijitTitlePaneContentOuter,
+.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
+	
+	zoom: 1;
+}
+.dijitColorPalette {
+	border: 1px solid #999;
+	background: #fff;
+	position: relative;
+}
+img.dijitColorPaletteUnder {
+	
+	border-style: none;
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+.dijitColorPalette .dijitPaletteTable {
+	
+	padding: 2px 3px 3px 3px;
+	position: relative;
+	overflow: hidden;
+	outline: 0;
+	border-collapse: separate;
+}
+.dj_ie6 .dijitColorPalette .dijitPaletteTable,
+.dj_ie7 .dijitColorPalette .dijitPaletteTable,
+.dj_iequirks .dijitColorPalette .dijitPaletteTable {
+	
+	padding: 0;
+	margin: 2px 3px 3px 3px;
+}
+.dijitColorPalette .dijitPaletteCell {
+	
+	height: 20px;
+	width: 20px;
+	font-size: 1px;
+	vertical-align: middle;
+	text-align: center;
+}
+.dijitColorPalette .dijitPaletteImg {
+	
+	width: 16px;
+	height: 14px;
+	border: 1px solid #999;
+	cursor: default;
+	vertical-align: middle;
+}
+.dj_iequirks .dijitColorPalette .dijitPaletteImg {
+	margin: 1px;	
+}
+.dijitPaletteTable td {
+		padding: 0px;
+}
+.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	
+	border: 1px solid #000;
+}
+.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+	border: 2px solid #000;
+}
+.dijit_a11y .dijitColorPalette .dijitPaletteTable,
+.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
+	
+	background-color: transparent !important;
+}
+.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
+	border: 3px dotted #000;	
+	margin: -1px;
+}
+.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 2px solid #000 !important;
+}
+.dijitAccordionContainer {
+	border:1px solid #b7b7b7;
+	border-top:0 !important;
+}
+.dijitAccordionTitle {
+	cursor: pointer;
+}
+.dijitAccordionTitleSelected {
+	cursor: default;
+}
+.dijitAccordionTitle .arrowTextUp,
+.dijitAccordionTitle .arrowTextDown {
+	display: none;
+	font-size: 0.65em;
+	font-weight: normal !important;
+}
+.dijit_a11y .dijitAccordionTitle .arrowTextUp,
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
+	display: inline;
+}
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
+	display: none;
+}
+.dj_ie6 .dijitAccordionTitle,
+.dj_iequirks .dijitAccordionTitle {
+	
+	zoom: 1;
+}
+.dijitCalendarContainer {
+	width: auto;	
+}
+.dijitCalendarContainer th, .dijitCalendarContainer td {
+	padding: 0;
+}
+.dijitCalendarNextYear {
+	margin:0 0 0 0.55em;
+}
+.dijitCalendarPreviousYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarIncrementControl {
+	vertical-align: middle;
+}
+.dijitCalendarIncrementControl,
+.dijitCalendarDateTemplate,
+.dijitCalendarMonthLabel,
+.dijitCalendarPreviousYear,
+.dijitCalendarNextYear {
+	cursor: pointer;
+}
+.dijitCalendarDisabledDate {
+	color: gray;
+	text-decoration: line-through;
+	cursor: default;
+}
+.dijitSpacer {
+	
+  	position: relative;
+  	height: 1px;
+  	overflow: hidden;
+  	visibility: hidden;
+}
+.dijitMenu {
+	border:1px solid black;
+	background-color:white;
+}
+.dijitMenuTable {
+	border-collapse:collapse;
+	border-width:0;
+	background-color:white;
+}
+.dj_webkit .dijitMenuTable td[colspan="2"]{
+	border-right:hidden;
+}
+.dijitMenuItem {
+	text-align: left;
+	white-space: nowrap;
+	padding:.1em .2em;
+	cursor:pointer;
+}
+.dijitMenuPassive .dijitMenuItemHover,
+.dijitMenuItemSelected {
+	
+	background-color:black;
+	color:white;
+}
+.dijitMenuItemIcon, .dijitMenuExpand {
+	background-repeat: no-repeat;
+}
+.dijitMenuItemDisabled * {
+	
+	opacity:0.5;
+	cursor:default;
+}
+.dj_ie .dijit_a11y .dijitMenuItemDisabled,
+.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
+.dj_ie .dijitMenuItemDisabled *,
+.dj_ie .dijitMenuItemDisabled td {
+	color:gray !important;
+	filter: alpha(opacity=35);
+}
+.dijitMenuItemLabel {
+	position: relative;
+	vertical-align: middle;
+}
+.dijit_a11y .dijitMenuItemSelected {
+	border: 1px dotted black !important;
+}
+.dj_ff3 .dijit_a11y .dijitMenuItem td {
+	padding: none !important;
+	background:none !important;
+}
+.dijit_a11y .dijitMenuItemSelected .dijitMenuItemLabel {
+	border-width: 1px;
+	border-style: solid;
+}
+.dj_ie8 .dijit_a11y .dijitMenuItemLabel {
+	position:static;
+}
+.dijitMenuExpandA11y {
+	display: none;
+}
+.dijit_a11y .dijitMenuExpandA11y {
+	display: inline;
+}
+.dijitMenuSeparator td {
+	border: 0;
+	padding: 0;
+}
+.dijitMenuSeparatorTop {
+	height: 50%;
+	margin: 0;
+	margin-top:3px;
+	font-size: 1px;
+}
+.dijitMenuSeparatorBottom {
+	height: 50%;
+	margin: 0;
+	margin-bottom:3px;
+	font-size: 1px;
+}
+.dijitCheckedMenuItemIconChar {
+	vertical-align: middle;
+	visibility:hidden;
+}
+.dijitCheckedMenuItemChecked .dijitCheckedMenuItemIconChar {
+	visibility: visible;
+}
+.dijit_a11y .dijitCheckedMenuItemIconChar {
+	display:inline !important;
+}
+.dijit_a11y .dijitCheckedMenuItemIcon {
+	display: none;
+}
+.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
+	
+	margin: 0px;
+}
+.dijitStackController .dijitToggleButtonChecked * {
+	cursor: default;	
+}
+.dijitTabContainerNoLayout {
+	width: 100%;	
+}
+.dijitTabContainerBottom-tabs,
+.dijitTabContainerTop-tabs,
+.dijitTabContainerLeft-tabs,
+.dijitTabContainerRight-tabs {
+	overflow: visible !important;  
+}
+.dijitTabContainerBottom-container,
+.dijitTabContainerTop-container,
+.dijitTabContainerLeft-container,
+.dijitTabContainerRight-container {
+	z-index:0;
+	overflow: hidden;
+	border: 1px solid black;
+}
+.nowrapTabStrip {
+	width: 50000px;
+	display: block;
+	position: relative;
+}
+.dijitTabListWrapper {
+	overflow: hidden;
+}
+.dijit_a11y .tabStripButton img {
+	
+	display: none;
+}
+.dijitTabContainerTop-tabs {
+	border-bottom: 1px solid black;
+}
+.dijitTabContainerTop-container {
+	border-top: 0px;
+}
+.dijitTabContainerLeft-tabs {
+	border-right: 1px solid black;
+	float: left;
+}
+.dijitTabContainerLeft-container {
+	border-left: 0px;
+}
+.dijitTabContainerBottom-tabs {
+	border-top: 1px solid black;
+}
+.dijitTabContainerBottom-container {
+	border-bottom: 0px;
+}
+.dijitTabContainerRight-tabs {
+	border-left: 1px solid black;
+	float: left;
+}
+.dijitTabContainerRight-container {
+	border-right: 0px;
+}
+DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
+	cursor: auto;
+}
+.dijitTab {
+	position:relative;
+	cursor:pointer;
+	white-space:nowrap;
+	z-index:3;
+}
+.dijitTab * {
+	
+	vertical-align: middle;
+}
+.dijitTabChecked {
+	cursor: default;	
+}
+.dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;	
+}
+.dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;	
+}
+.dijitTabContainerLeft-tabs .dijitTab {
+	left: 1px;	
+}
+.dijitTabContainerRight-tabs .dijitTab {
+	left: -1px;	
+}
+.dijitTabContainerTop-tabs .dijitTab,
+.dijitTabContainerBottom-tabs .dijitTab {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+}
+.dijitTabInnerDiv {
+	position:relative;
+}
+.tabStripButton {
+	z-index: 12;
+}
+.dijitTabButtonDisabled .tabStripButton {
+	display: none;
+}
+.dijitTabCloseButton {
+	margin-left: 1em;
+}
+.dijitTabCloseText {
+	display:none;
+}
+.dijit_a11y .dijitTabCloseButton {
+	background-image: none !important;
+	width: auto !important;
+	height: auto !important;
+	border: thin dotted;	
+}
+.dijit_a11y .dijitTabCloseButtonHover {
+	border:thin solid;	
+}
+.dijit_a11y .dijitTabCloseText {
+	display: inline;
+}
+.dijit_a11y .dijitTabChecked {
+	
+	border-style:dashed !important;
+}
+.dijit_a11y .dijitTabInnerDiv {
+	border-left:none !important;
+ }
+.dijitTabPane,
+.dijitStackContainer-child,
+.dijitAccordionContainer-child {
+	
+    border: none !important;
+}
+.dijitInlineEditBoxDisplayMode {
+	border: 1px solid transparent;	
+	cursor: text;
+}
+.dijit_a11y .dijitInlineEditBoxDisplayMode,
+.dj_ie6 .dijitInlineEditBoxDisplayMode {
+	
+	border: none;
+}
+.dijitInlineEditBoxDisplayModeHover,
+.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
+.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
+	
+	background-color: #e2ebf2;
+	border: solid 1px black;
+}
+.dijitInlineEditBoxDisplayModeDisabled {
+	cursor: default;
+}
+.dijitTreeIndent {
+	
+	width: 19px;
+}
+.dijitTreeRow, .dijitTreeContent {
+	white-space: nowrap;
+}
+.dijitTreeRow img {
+	
+	vertical-align: middle;
+}
+.dijitTreeContent {
+    cursor: default;
+}
+.dijitExpandoText {
+	display: none;
+}
+.dijit_a11y .dijitExpandoText {
+	display: inline;
+	padding-left: 10px;
+	padding-right: 10px;
+	font-family: monospace;
+	border-style: solid;
+	border-width: thin;
+	cursor: pointer;
+}
+.dijitTreeLabel {
+	margin: 0px 4px;
+}
+.dijitDialog {
+	position: absolute;
+	z-index: 999;
+	overflow: hidden;       
+}
+.dijitDialogTitleBar {
+	cursor: move;
+}
+.dijitDialogFixed .dijitDialogTitleBar {
+	cursor:default;
+}
+.dijitDialogCloseIcon {
+	cursor: pointer;
+}
+.dijitDialogUnderlayWrapper {
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 998;
+	display: none;
+	background: transparent !important;
+}
+.dijitDialogUnderlay {
+	background: #eee;
+	opacity: 0.5;
+}
+.dj_ie .dijitDialogUnderlay {
+	filter: alpha(opacity=50);
+}
+.dijit_a11y .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitDialog {
+	opacity: 1 !important;
+	background-color: white !important;
+}
+.dijitDialog .closeText {
+	display:none;
+	
+	position:absolute;
+}
+.dijit_a11y .dijitDialog .closeText {
+	display:inline;
+}
+.dijitSliderMoveable {
+	z-index:99;
+	position:absolute !important;
+	display:block;
+	vertical-align:middle;
+}
+.dijitSliderMoveableH {
+	right:0;
+}
+.dijitSliderMoveableV {
+	right:50%;
+}
+.dijit_a11y DIV.dijitSliderImageHandle,
+.dijitSliderImageHandle {
+	margin:0;
+	padding:0;
+	position:relative !important;
+	border:8px solid gray;
+	width:0;
+	height:0;
+	cursor: pointer;
+}
+.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
+	font-size: 0;
+}
+.dj_ie7 .dijitSliderImageHandle {
+	overflow: hidden; 
+}
+.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
+	overflow: visible; 
+}
+.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
+	border:4px solid #000;
+	height:8px;
+	width:8px;
+}
+.dijitSliderImageHandleV {
+	top:-8px;
+	right: -50%;
+}
+.dijitSliderImageHandleH {
+	left:50%;
+	top:-5px;
+	vertical-align:top;
+}
+.dijitSliderBar {
+	border-style:solid;
+	border-color:black;
+	cursor: pointer;
+}
+.dijitSliderBarContainerV {
+	position:relative;
+	height:100%;
+	z-index:1;
+}
+.dijitSliderBarContainerH {
+	position:relative;
+	z-index:1;
+}
+.dijitSliderBarH {
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBarV {
+	width:4px;
+	border-width:0 1px;
+}
+.dijitSliderProgressBar {
+	background-color:red;
+	z-index:1;
+}
+.dijitSliderProgressBarV {
+	position:static !important;
+	height:0%;
+	vertical-align:top;
+	text-align:left;
+}
+.dijitSliderProgressBarH {
+	position:absolute !important;
+	width:0%;
+	vertical-align:middle;
+	overflow:visible;
+}
+.dijitSliderRemainingBar {
+	overflow:hidden;
+	background-color:transparent;
+	z-index:1;
+}
+.dijitSliderRemainingBarV {
+	height:100%;
+	text-align:left;
+}
+.dijitSliderRemainingBarH {
+	width:100% !important;
+}
+.dijitSliderBumper {
+	overflow:hidden;
+	z-index:1;
+}
+.dijitSliderBumperV {
+	width:4px;
+	height:8px;
+	border-width:0 1px;
+}
+.dijitSliderBumperH {
+	width:8px;
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBottomBumper,
+.dijitSliderLeftBumper {
+	background-color:red;
+}
+.dijitSliderTopBumper,
+.dijitSliderRightBumper {
+	background-color:transparent;
+}
+.dijitSliderDecoration {
+	text-align:center;
+}
+.dijitSliderV TD {
+	position: relative; 
+}
+.dijitSliderDecorationH {
+	width: 100%;
+}
+.dijitSliderDecorationV {
+	height: 100%;
+}
+.dijitSliderButton {
+	font-family:monospace;
+	margin:0;
+	padding:0;
+	display:block;
+}
+.dijit_a11y .dijitSliderButtonInner {
+	visibility:visible !important;
+}
+.dijitSliderButtonContainer {
+	text-align:center;
+	height:0;	
+}
+.dijitSliderButtonContainer * {
+	cursor: pointer;
+}
+.dijitSlider .dijitButtonNode {
+	padding:0;
+	display:block;
+}
+.dijitRuleContainer {
+	position:relative;
+	overflow:visible;
+}
+.dijitRuleContainerV {
+	height:100%;
+	line-height:0;
+	float:left;
+	text-align:left;
+}
+.dj_opera .dijitRuleContainerV {
+	line-height:2%;
+}
+.dj_ie .dijitRuleContainerV {
+	line-height:normal;
+}
+.dj_gecko .dijitRuleContainerV {
+	margin:0 0 1px 0; 
+}
+.dijitRuleMark {
+	position:absolute;
+	border:1px solid black;
+	line-height:0;
+	height:100%;
+}
+.dijitRuleMarkH {
+	width:0;
+	border-top-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+}
+.dijitRuleLabelContainer {
+	position:absolute;
+}
+.dijitRuleLabelContainerH {
+	text-align:center;
+	display:inline-block;
+}
+.dijitRuleLabelH {
+	position:relative;
+	left:-50%;
+}
+.dijitRuleLabelV {
+	
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+.dijitRuleMarkV {
+	height:0;
+	border-right-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+	width:100%;
+	left:0;
+}
+.dj_ie .dijitRuleLabelContainerV {
+	margin-top:-.55em;
+}
+.dijit_a11y .dijitSliderReadOnly,
+.dijit_a11y .dijitSliderDisabled {
+	opacity:0.6;
+}
+.dj_ie .dijit_a11y .dijitSliderReadOnly .dijitSliderBar,
+.dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
+	filter: alpha(opacity=40);
+}
+.dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
+	font-family: monospace; 
+	font-size: 1em;
+	line-height: 1em;
+	height: auto;
+	width: auto;
+	margin: 0px 4px;
+}
+.dijit_a11y .dijitButtonContents .dijitButtonText,
+.dijit_a11y .dijitTab .tabLabel {
+	display: inline !important;
+}
+.dijitTextArea {
+	width:100%;
+	overflow-y: auto;	
+}
+.dijitTextArea[cols] {
+	width:auto; 
+}
+.dj_ie .dijitTextAreaCols {
+	width:auto;
+}
+.dijitToolbarSeparator {
+	height: 18px;
+	width: 5px;
+	padding: 0 1px;
+	margin: 0;
+}
+.dijitIEFixedToolbar {
+	position:absolute;
+	
+	top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.dijitEditor {
+	display: block;	
+}
+.dijitEditorDisabled,
+.dijitEditorReadOnly {
+	color: gray;
+}
+.dijitTimePickerItemInner {
+	text-align:center;
+	border:0;
+	padding:2px 8px 2px 8px;
+}
+.dijitTimePickerTick,
+.dijitTimePickerMarker {
+	border-bottom:1px solid gray;
+}
+.dijitTimePicker .dijitDownArrowButton {
+	border-top: none !important;
+}
+.dijitTimePickerTick {
+	color:#CCC;
+}
+.dijitTimePickerMarker {
+	color:black;
+	background-color:#CCC;
+}
+.dijitTimePickerItemSelected {
+	font-weight:bold;
+	color:#333;
+	background-color:#b7cdee;
+}
+.dijitTimePickerItemHover {
+	background-color:gray;
+	color:white;
+	cursor:pointer;
+}
+.dijit_a11y .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	border: solid 4px black;
+}
+.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
+	border: dashed 4px black;
+}
+.dijitToggleButtonIconChar {
+	
+	display:none !important;
+}
+.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
+	display:inline !important;
+	visibility:hidden;
+}
+.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
+	font-family: "Arial Unicode MS";	
+}
+.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
+	display: inline !important; 
+	visibility:visible !important;
+}
+.dijitArrowButtonChar {
+        display:none !important;
+}
+.dijit_a11y .dijitArrowButtonChar {
+        display:inline !important;
+}
+.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
+.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
+	display:none !important;
+}
+.dijitSelect {
+	margin: 0.2em;
+	border-collapse: collapse;
+}
+.dj_ie .dijitSelect,
+.dj_ie7 .dijitSelect,
+.dj_iequirks .dijitSelect {
+	vertical-align: middle; 
+}
+.dj_ie8 .dijitSelect .dijitButtonText {
+	vertical-align: top;
+}
+.dijitToolbar .dijitSelect {
+	margin: 0;
+}
+.dj_webkit .dijitToolbar .dijitSelect {
+	padding-left: 0.3em;
+}
+.dijit_a11y .dijitSelectDisabled .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitSelect .dijitButtonContents {
+	padding: 0px;
+	background: transparent none;
+	white-space: nowrap;
+	text-align: left;
+}
+.dijitSelectFixedWidth .dijitButtonContents {
+	width: 100%;
+}
+.dijitSelectMenu .dijitMenuItemIcon {
+	
+	display:none;
+}
+.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
+.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
+	
+	position: static;
+}
+.dijitSelectLabel *
+{
+	vertical-align: baseline;
+}
+.dijitSelectSelectedOption * {
+	font-weight: bold;
+}
+.dijitSelectMenu {
+	border-width: 1px;
+}
+.dijitSelectMenu .dijitMenuTable {
+	margin: 0px;
+	background-color: transparent;
+}
+.dijitForceStatic {
+	position: static !important;
+}
+.dijitReadOnly *,
+.dijitDisabled *,
+.dijitReadOnly,
+.dijitDisabled {
+	
+	cursor: default;
+}
Index: trunk/web/dojo/dijit/themes/a11y/indeterminate_progress.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/a11y/indeterminate_progress.gif
===================================================================
--- trunk/web/dojo/dijit/themes/a11y/indeterminate_progress.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/a11y/indeterminate_progress.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/a11y/indeterminate_progress.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/a11y/colors3x4-rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/a11y/colors3x4-rtl.png
===================================================================
--- trunk/web/dojo/dijit/themes/a11y/colors3x4-rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/a11y/colors3x4-rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/a11y/colors3x4-rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/a11y/colors3x4.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/a11y/colors3x4.png
===================================================================
--- trunk/web/dojo/dijit/themes/a11y/colors3x4.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/a11y/colors3x4.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/a11y/colors3x4.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/a11y/colors7x10-rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/a11y/colors7x10-rtl.png
===================================================================
--- trunk/web/dojo/dijit/themes/a11y/colors7x10-rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/a11y/colors7x10-rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/a11y/colors7x10-rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/a11y/colors7x10.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/a11y/colors7x10.png
===================================================================
--- trunk/web/dojo/dijit/themes/a11y/colors7x10.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/a11y/colors7x10.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/a11y/colors7x10.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/a11y/README.txt
===================================================================
--- trunk/web/dojo/dijit/themes/a11y/README.txt	(revision 0)
+++ trunk/web/dojo/dijit/themes/a11y/README.txt	(revision 9)
@@ -0,0 +1,3 @@
+This folder contains images used by all themes when in "high-contrast" mode.
+
+If you think you need to put something here, please talk to Becky or Bill first.
\ No newline at end of file
Index: trunk/web/dojo/dijit/themes/dijit_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/dijit_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/dijit_rtl.css	(revision 9)
@@ -0,0 +1,88 @@
+.dijitRtl .dijitPlaceHolder {
+	left: auto;
+	right: 0;
+}
+.dijitMenuItemRtl {
+	text-align: right;
+}
+.dj_iequirks .dijitComboButtonRtl BUTTON {
+	
+	float:left;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitComboBoxRtl .dijitArrowButtonContainer {
+	
+	border-right-width: 1px !important;
+	border-right-style: solid !important;
+	border-left-width: 0px !important;
+	border-left-style: none !important;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
+	border-right: 1px solid black !important;
+	border-left: 0px none black !important;
+}
+.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
+	right: 0;
+	left: auto;
+}
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitArrowButtonContainer {
+	float: left;
+}
+.dijitCalendarRtl .dijitCalendarNextYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarRtl .dijitCalendarPreviousYear {
+	margin:0 0 0 0.55em;
+}
+.dijitSliderRtl .dijitSliderImageHandleV {
+	left:auto;
+}
+.dijitSliderRtl .dijitSliderImageHandleH {
+	left:-50%;
+}
+.dijitSliderRtl .dijitSliderMoveableH {
+	right:auto;
+	left:0;
+}
+.dijitSliderRtl .dijitRuleContainerV {
+	float:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleContainerV {
+	text-align:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelV {
+	text-align:left;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelH {
+	zoom:1;
+}
+.dijitSliderRtl .dijitSliderProgressBarH {
+	
+	float:right;
+	right:0;
+	left:auto;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+	background-position:right;
+	padding-right:25px;
+}
+.dijitTabRtl .dijitTabCloseButton {
+	margin-left: 0px;
+	margin-right: 1em;
+}
+.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
+	width:100%;
+}
+.dijitColorPaletteRtl .dijitColorPaletteUnder {
+	
+	left: auto;
+	right: 0;
+}
+.dijitSelectRtl .dijitButtonContents {
+	text-align: right;
+}
Index: trunk/web/dojo/dijit/themes/soria/Toolbar.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Toolbar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Toolbar.css	(revision 9)
@@ -0,0 +1,56 @@
+.soria .dijitToolbar {
+	border-bottom: 1px solid #ccc;
+	background:#eaeaea url("images/titleBar.png") repeat-x top left;
+}
+.dj_ie6 .soria .dijitToolbar {
+	height: 10px;
+}
+.soria .dijitToolbar .dijitButtonNode,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	margin: 0px;
+	padding: 0px;
+	border: none;
+	font-size: 12px;
+}
+.soria .dijitToolbar .dijitButton,
+.soria .dijitToolbar .dijitToggleButton,
+.soria .dijitToolbar .dijitDropDownButton,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	padding: 1px;	
+}
+.soria .dijitToolbar .dijitButtonChecked,
+.soria .dijitToolbar .dijitToggleButtonChecked {
+	background-color:#d8e5f8;
+	border:1px solid #316ac5;
+	padding: 0px;
+}
+.soria .dijitToolbar .dijitButtonCheckedHover,
+.soria .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+	background-color:#9abbea;
+	border:1px solid #316ac5;
+	padding: 0px;
+}
+.soria .dijitToolbar .dijitButtonHover,
+.soria .dijitToolbar .dijitToggleButtonHover,
+.soria .dijitToolbar .dijitDropDownButtonHover,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
+	
+	border: 1px solid #316ac5;
+	padding: 0px;
+	background-color:#9abbea;
+}
+.soria .dijitToolbar label {
+	padding: 3px 3px 0 6px;
+}
+.dj_ie .soria .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+	
+	border: 1px #777 dotted !important;
+	padding: 0px;
+}
Index: trunk/web/dojo/dijit/themes/soria/Menu.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Menu.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Menu.css	(revision 9)
@@ -0,0 +1,62 @@
+
+.soria .dijitMenu,
+.soria .dijitMenuBar {
+	border: 1px solid #cbcbcb;
+	margin: 0px;
+	padding: 0px;
+	background-color: #fff;
+}
+.soria .dijitBorderContainer .dijitMenuBar {
+	border:1px solid #B1BADF;
+}
+.soria .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0px;
+	color: #243C5F;
+}
+.soria .dijitMenuBar .dijitMenuItem {
+	padding: 4px 5px;
+}
+.soria .dijitMenuPreviousButton, .soria .dijitMenuNextButton {
+	font-style: italic;
+}
+.soria .dijitMenuItem TD {
+	padding:1px;
+}
+.soria .dijitMenuPassive .dijitMenuItemHover,
+.soria .dijitMenuItemSelected {
+	background-color: #d9e6f9; 
+	color: #243C5F;
+}
+.soria .dijitMenuItemIcon {
+	width: 15px;
+	height: 15px;
+}
+.soria .dijitMenuExpand {
+	width:15px;
+	height:15px;
+	background-image: url('images/spriteRoundedIconsSmall.png');
+	background-position: -30px top;
+}
+.dj_ie6 .soria .dijitMenuExpand {
+	background-image: url('images/spriteRoundedIconsSmall.gif');
+}
+.soria .dijitMenuSeparator {
+	height: 1px;
+}
+.soria .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #fff; 
+}
+.soria .dijitMenuSeparatorBottom {
+	border-top: 1px solid #8ba0bd;
+}
+.soria .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.soria .dijitCheckedMenuItemIcon {
+	background-image: url('images/spriteCheckbox.gif');
+	background-position: -80px;
+}
+.soria .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/soria/TitlePane_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/TitlePane_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/TitlePane_rtl.css	(revision 9)
@@ -0,0 +1,6 @@
+.dijitRtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
+.dj_ie6-rtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
Index: trunk/web/dojo/dijit/themes/soria/Editor_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Editor_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Editor_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+
+.dijitRtl .soria .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); 
+}
+.dijitRtl .soria .dijitDisabled .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); 
+}
Index: trunk/web/dojo/dijit/themes/soria/Calendar.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Calendar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Calendar.css	(revision 9)
@@ -0,0 +1,117 @@
+
+.soria .dijitCalendarIncrementControl {
+	
+	width:15px;
+	height:15px;
+	background-image: url("images/spriteRoundedIconsSmall.png");
+	background-repeat: no-repeat;
+}
+.dj_ie6 .soria .dijitCalendarIncrementControl {
+	font-size:.1em;
+	background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.soria .dijitA11ySideArrow {
+	display: none;
+}
+.soria .dijitCalendarDecrease {
+	background-position: top left;
+}
+.soria .dijitCalendarIncrease {
+	background-position: -30px top;
+}
+.soria table.dijitCalendarContainer {
+	font-size: 100%;
+	border-spacing: 0;
+	border-collapse: separate;
+	border: 1px solid #b1badf;
+	margin: 0;
+}
+.soria .dijitCalendarMonthContainer th {
+	
+	background:#bed7f0 url("images/titleBar.png") repeat-x top;
+	padding-top:.3em;
+	padding-bottom:.2em;
+	text-align:center;
+}
+.dj_ie6 .soria .dijitCalendarMonthContainer th {
+	padding-top:.2em;
+	padding-bottom:.1em;
+}
+.soria .dijitCalendarDayLabelTemplate {
+	
+	background:#bed7f0;
+	font-weight:normal;
+	padding-top:.15em;
+	padding-bottom:.2em;
+	border-bottom: 1px solid #b1badf;
+	color:#293a4b;
+	text-align:center;
+}
+.soria .dijitCalendarBodyContainer {
+	border-bottom: 1px solid #eeeeee;
+}
+.soria .dijitCalendarMonthLabel {
+	color:#293a4b;
+	font-weight: bold;
+}
+.soria .dijitCalendarDateTemplate {
+	
+	font-size: 0.9em;
+	font-weight: bold;
+	text-align: center;
+	padding: 0.3em 0.3em 0.05em 0.3em;
+	letter-spacing: 1px;
+	background-color: #fff;
+	border:#fff solid 1px !important;
+}
+.dj_ie .soria .dijitCalendarDateTemplate {
+	padding: 0.1em .33em 0.02em .33em;
+}
+.soria .dijitCalendarPreviousMonth,
+.soria .dijitCalendarNextMonth 		{
+	
+	color:#999999;
+	background-color:#fdfdfd !important;
+	border:#fdfdfd solid 1px !important;
+}
+.soria .dijitCalendarCurrentMonth {
+	
+}
+.soria .dijitCalendarDisabledDate {
+	text-decoration:line-through !important;
+}
+.soria .dijitCalendarCurrentDate {
+	
+	text-decoration:underline;
+	font-weight:bold;
+}
+.soria .dijitCalendarSelectedDate {
+	
+	background-color:#b9cbf1 !important;
+	color:black !important;
+	border:#4b5aaa solid 1px !important;
+}
+.soria .dijitCalendarYearContainer {
+	
+	background:white url("images/titleBar.png") repeat-x top;
+}
+.soria .dijitCalendarYearLabel {
+	
+	margin:0;
+	padding:0.4em 0 0.25em 0;
+	text-align:center;
+}
+.soria .dijitCalendarSelectedYear {
+	
+	color:black;
+	padding:0.2em;
+	padding-bottom:0.1em;
+	background-color:#b9cbf1 !important;
+	border:#4b5aaa solid 1px !important;
+}
+.soria .dijitCalendarNextYear,
+.soria .dijitCalendarPreviousYear {
+	
+	color:black !important;
+	font-weight:normal;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/Checkbox.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/Checkbox.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/Checkbox.css	(revision 9)
@@ -0,0 +1,40 @@
+
+.soria .dijitToggleButton .dijitCheckBox,
+.soria .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url('../images/spriteCheckbox.gif');
+}
+.soria .dijitCheckBox,
+.soria .dijitCheckBoxIcon {		
+	background-image: url('../images/spriteCheckbox.gif'); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.soria .dijitCheckBox,
+.soria .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -16px;
+}
+.soria .dijitCheckBoxChecked,
+.soria .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: 0px;
+}
+.soria .dijitCheckBoxDisabled {
+	
+	background-position: -48px;
+}
+.soria .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -32px;
+}
+.soria .dijitCheckBoxHover {
+	
+	background-position: -80px;
+}
+.soria .dijitCheckBoxCheckedHover {
+	
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/Common.css	(revision 9)
@@ -0,0 +1,51 @@
+
+.soria .dijitInputContainer INPUT,
+.soria .dijitTextBox {
+	margin: 0em 0.1em;
+}
+.soria .dijitTextBox,
+.soria .dijitTextArea {
+	
+	background:#fff url("../images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #8ba0bd;
+}
+.soria .dijitComboBox .dijitButtonNode {
+	padding: 0 0.2em;
+}
+.soria .dijitTextBox .dijitButtonNode {
+	
+	border-color: #8ba0bd;
+}
+.soria .dijitTextBoxFocused,
+.soria .dijitTextAreaFocused {
+	
+	border-color:#406b9b;
+}
+.soria .dijitTextBoxFocused .dijitButtonNode,
+.soria .dijitSpinner .dijitUpArrowButtonActive,
+.soria .dijitSpinner .dijitDownArrowButtonActive {
+	border-left-color:#8ba0bd;
+}
+.soria .dijitSpinnerFocused .dijitDownArrowButton,
+.soria .dijitSpinner .dijitUpArrowButtonActive,
+.soria .dijitSpinner .dijitDownArrowButtonActive {
+	border-top-color:#8ba0bd;
+}
+.soria .dijitError {
+	border-color:#f3d118;
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.soria .dijitErrorFocused {
+	background-color:#ff6;
+	background-image:none;
+}
+.soria .dijitValidationIcon {
+	
+	width: 16px;
+	background: transparent url('../images/warning.png') no-repeat center center;
+}
+.soria .dijitComboBoxHighlightMatch {
+	background-color:#f9f7ba;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/RadioButton.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/RadioButton.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/RadioButton.css	(revision 9)
@@ -0,0 +1,40 @@
+
+.soria .dijitToggleButton .dijitRadio,
+.soria .dijitToggleButton .dijitRadioIcon {
+	background-image: url('../images/spriteRadio.gif');
+}
+.soria .dijitRadio,
+.soria .dijitRadioIcon	{		
+	background-image: url('../images/spriteRadio.gif'); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.soria .dijitRadio,
+.soria .dijitToggleButton .dijitRadioIcon {
+	
+	background-position: -16px;
+}
+.soria .dijitRadioChecked,
+.soria .dijitToggleButtonChecked .dijitRadioIcon {
+	
+	background-position: 0px;
+}
+.soria .dijitRadioDisabled {
+	
+	background-position: -48px;
+}
+.soria .dijitRadioCheckedDisabled {
+	
+	background-position: -32px;
+}
+.soria .dijitRadioHover {
+	
+	background-position: -80px;
+}
+.soria .dijitRadioCheckedHover {
+	
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/Button.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/Button.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/Button.css	(revision 9)
@@ -0,0 +1,105 @@
+
+.soria .dijitButtonNode {
+	
+	border: 1px solid #8ba0bd;
+	border-bottom:1px solid #657c9c;
+	padding: 0.1em 0.2em 0.2em 0.2em;
+	background: #bcd5f0 url("../images/buttonEnabled.png") repeat-x top left;
+}
+.soria .dijitSelect .dijitButtonContents {
+	border-right: none;
+}
+.soria .dijitButtonText {
+	text-align: center;
+	padding: 0 0.3em;
+}
+.soria .dijitArrowButton {
+	color: #111;
+}
+.soria .dijitComboButton .dijitDownArrowButton {
+	padding-right:4px;
+}
+.soria .dijitTextBoxReadOnly,
+.soria .dijitTextBoxReadOnly .dijitButtonNode,
+.soria .dijitButtonDisabled .dijitButtonNode,
+.soria .dijitToggleButtonDisabled .dijitButtonNode,
+.soria .dijitDropDownButtonDisabled .dijitButtonNode,
+.soria .dijitComboButtonDisabled .dijitButtonNode,
+.soria .dijitTextBoxDisabled,
+.soria .dijitTextBoxDisabled .dijitButtonNode {
+	
+	border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+	background:#c3d3e5 url("../images/buttonDisabled.png") top repeat-x;
+	opacity: 0.60;
+}
+.dj_ie6 .soria .dijitReadOnly INPUT,
+.dj_ie7 .soria .dijitReadOnly INPUT,
+.dj_ie6 .soria .dijitComboButtonDisabled .dijitButtonText,
+.dj_ie7 .soria .dijitComboButtonDisabled .dijitButtonText {
+	
+	color: #aaa;
+}
+.soria .dijitButtonHover .dijitButtonNode,
+.soria .dijitButtonNodeHover,
+.soria .dijitToggleButtonHover .dijitButtonNode,
+.soria .dijitDropDownButtonHover .dijitButtonNode,
+.soria .dijitButtonContentsHover,
+.soria .dijitUpArrowButtonHover,
+.soria .dijitDownArrowButtonHover {
+	
+	
+	color:#243C5F;
+	background:#acc5e2 url("../images/buttonHover.png") repeat-x top left;
+}
+.soria .dijitButtonActive .dijitButtonNode,
+.soria .dijitToggleButtonActive .dijitButtonNode,
+.soria .dijitDropDownButtonActive .dijitButtonNode,
+.soria .dijitComboButtonActive .dijitButtonContents,
+.soria .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+	
+	border-color:#657c9c;
+	background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
+}
+.soria .dijitUpArrowButtonActive,
+.soria .dijitDownArrowButtonActive {
+	
+	background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
+}
+.soria .dijitArrowButtonInner {
+	background-image: url("../images/spriteArrows.png");
+	background-repeat: no-repeat;
+	background-position: 0px center;
+	width: 11px;
+	height: 11px;
+}
+.soria .dijitComboBox .dijitArrowButtonInner {
+        background-position: 0 center;
+}
+.soria .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -11px center;
+}
+.soria .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -22px center;
+}
+.soria .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -33px center;
+}
+.dj_ie6 .soria .dijitArrowButtonInner {
+	background-image: url("../images/spriteArrows.gif");
+}
+.dj_ie .soria .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: 1px; 
+}
+.soria .dijitSpinnerButtonContainer {
+	width: auto;
+	padding: 0;
+}
+.soria .dijitSpinner .dijitArrowButton {
+	width: 15px;
+}
+.soria .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.soria .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/Button_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/Button_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/Button_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+.dijitRtl .soria .dijitComboBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.dijitRtl .soria .dijitSelect .dijitButtonContents {
+	border-left: none;
+	border-right-width: 1px;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/TimeTextBox.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/TimeTextBox.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/TimeTextBox.css	(revision 9)
@@ -0,0 +1 @@
+@CHARSET "UTF-8";
Index: trunk/web/dojo/dijit/themes/soria/form/Select.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/Select.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/Select.css	(revision 9)
@@ -0,0 +1,44 @@
+.soria .dijitSelect .dijitButtonNode {
+	padding: 0px;
+}
+.soria .dijitSelect .dijitButtonContents {
+	padding-top: 1px;
+    background:#fff url("../images/validationInputBg.png") repeat-x top left;
+    #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.soria .dijitSelectHover .dijitButtonContents,
+.soria .dijitSelectActive .dijitButtonContents,
+.soria .dijitSelectOpened .dijitButtonContents,
+.soria .dijitSelectDisabled .dijitButtonContents,
+.soria .dijitSelectReadOnly .dijitButtonContents{
+	background: transparent none;
+}
+.dj_ie .soria .dijitSelect .dijitButtonContents {
+	padding-top: 0px;
+}
+.soria .dijitSelect .dijitArrowButton {
+	padding: 0px 2px;
+}
+.soria .dijitSelectDisabled .dijitButtonNode {
+    border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+    background:#c3d3e5 url("../images/buttonDisabled.png") top repeat-x;
+}
+.dj_ie .soria .dijitSelectDisabled  .dijitButtonNode * {
+	filter: gray() alpha(opacity=50);
+}
+.soria .dijitSelectHover .dijitButtonNode {
+    color:#000;
+    background:#acc5e2 url("../images/buttonHover.png") repeat-x top left;
+}
+.soria .dijitSelectActive .dijitButtonNode,
+.soria .dijitSelectOpened .dijitButtonNode {
+    border-color:#657c9c;
+    background: #91b4e5 url("../images/buttonActive.png") top left repeat-x;
+}
+.soria .dijitSelectMenu td {
+	padding: 0em;
+}
+.soria .dijitSelectMenu .dijitMenuItemLabel,
+.soria .dijitSelectMenu .dijitMenuArrowCell {
+	padding: 0.1em 0.2em;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/Slider.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/Slider.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/Slider.css	(revision 9)
@@ -0,0 +1,122 @@
+
+.soria .dijitSliderProgressBarH {
+	border-color: #b1badf;
+	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.soria .dijitSliderProgressBarV {
+	border-color: #b1badf;
+	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.soria .dijitSliderFocused .dijitSliderProgressBarH,
+.soria .dijitSliderFocused .dijitSliderLeftBumper {
+	background-image:url("../images/sliderFullFocus.png");
+}
+.soria .dijitSliderFocused .dijitSliderProgressBarV,
+.soria .dijitSliderFocused .dijitSliderBottomBumper {
+	background-image:url("../images/sliderFullVerticalFocus.png");
+}
+.soria .dijitSliderRemainingBarV {
+	border-color: #b4b4b4;
+	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
+}
+.soria .dijitSliderRemainingBarH {
+	border-color: #b4b4b4;
+	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+}
+.soria .dijitSliderBar {
+	border-style: solid;
+	outline:1px;
+	
+}
+.soria .dijitSliderFocused .dijitSliderBar {
+	border-color:#8ba0bd;
+}
+.soria .dijitSliderImageHandleH {
+	border:0px;
+	width:15px;
+	height:18px;
+	background:url("../images/preciseSliderThumb.png") no-repeat center top;
+}
+.soria .dijitSliderFocused .dijitSliderImageHandleH {
+	background-image:url("../images/preciseSliderThumbFocus.png");
+	#background-image:url("../images/preciseSliderThumbFocus.gif");
+}
+.dj_ie6 .soria .dijitSliderImageHandleH {
+	background-image:url("../images/preciseSliderThumb.gif");
+}
+.soria .dijitSliderLeftBumper {
+	border-left-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.soria .dijitSliderRightBumper {
+	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+	border-color: #b4b4b4;
+	border-right-width: 1px;
+}
+.soria .dijitSliderImageHandleV {
+	border:0px;
+	width:20px;
+	height:15px;
+	background:url("../images/sliderThumb.png") no-repeat center center;
+	#background:url("../images/sliderThumb.gif") no-repeat center center;
+}
+.soria .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url("../images/sliderThumbFocus.png");
+	#background-image:url("../images/sliderThumbFocus.gif");
+}
+.soria .dijitSliderBottomBumper {
+	border-bottom-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.soria .dijitSliderTopBumper {
+	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
+	border-color: #b4b4b4;
+	border-top-width: 1px;
+}
+.soria .dijitSliderIncrementIconH,
+.soria .dijitSliderIncrementIconV {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -45px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -45px top;
+	width:15px; height:15px;
+}
+.soria .dijitSliderIncrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.soria .dijitSliderDecrementIconH,
+.soria .dijitSliderDecrementIconV {
+	width:15px;
+	height:15px;
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.soria .dijitSliderDecrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0px top;
+}
+.soria .dijitSliderButtonInner {
+	visibility:hidden;
+}
+.soria .dijitSliderReadOnly *,
+.soria .dijitSliderDisabled * {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	color: #bdbdbd;
+}
+.soria .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.soria .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position: 0px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.soria .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position: -30px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.soria .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position: -15px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.soria .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position: -45px -15px;
+}
Index: trunk/web/dojo/dijit/themes/soria/form/Slider_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/form/Slider_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/form/Slider_rtl.css	(revision 9)
@@ -0,0 +1,29 @@
+
+.dijitRtl .soria .dijitSliderProgressBarH,
+.dijitRtl .soria .dijitSliderRemainingBarH,
+.dijitRtl .soria .dijitSliderLeftBumper,
+.dijitRtl .soria .dijitSliderRightBumper,
+.dijitRtl .soria .dijitSliderTopBumper {
+	background-position: top right;
+}
+.dijitRtl .soria .dijitSliderProgressBarV,
+.dijitRtl .soria .dijitSliderRemainingBarV,
+.dijitRtl .soria .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.dijitRtl .soria .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.dijitRtl .soria .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.dijitRtl .soria .dijitSliderIncrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat left top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat left top;
+}
+.dijitRtl .soria .dijitSliderDecrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
Index: trunk/web/dojo/dijit/themes/soria/soria.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/soria.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/soria.css	(revision 9)
@@ -0,0 +1,3345 @@
+
+.dijitReset {
+	
+	margin:0;
+	border:0;
+	padding:0;
+	line-height:normal;
+	font: inherit;
+	color: inherit;
+}
+.dijit_a11y .dijitReset {
+	-moz-appearance: none; 
+}
+.dijitInline {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dijitHidden {
+	
+	display: none !important;
+}
+.dijitVisible {
+	
+	display: block !important;	
+	position: relative;			
+}
+.dijitInputContainer {
+	
+	#zoom: 1;
+	overflow: hidden;
+	float: none !important; 
+	position:relative;
+}
+.dj_ie INPUT.dijitTextBox,
+.dj_ie .dijitTextBox INPUT {
+	font-size: 100%;
+}
+.dijitTextBox .dijitSpinnerButtonContainer,
+.dijitTextBox .dijitArrowButtonContainer,
+.dijitTextBox .dijitValidationContainer {
+	float: right;
+	text-align: center;
+}
+.dijitTextBox INPUT.dijitInputField {
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+}
+.dijitTextBox .dijitValidationContainer {
+	display: none;
+}
+.dijitInlineTable {
+	
+	display:inline-table;
+	display:inline-block;		
+	#zoom: 1; 
+	#display:inline; 
+	box-sizing: content-box; -moz-box-sizing: content-box;
+	border:0;
+	padding:0;
+}
+.dijitTeeny {
+	font-size:1px;
+	line-height:1px;
+}
+.dijitOffScreen {
+	position: absolute;
+	visibility: hidden;
+	left: 50%;
+	top: -10000px;
+}
+.dijitPopup {
+	position: absolute;
+	background-color: transparent;
+	margin: 0;
+	border: 0;
+	padding: 0;
+}
+.dijit_a11y .dijitPopup,
+.dijit_ally .dijitPopup DIV,
+.dijit_a11y .dijitPopup TABLE,
+.dijit_a11y .dijitTooltipContainer {
+	background-color: white !important;
+}
+.dijitPositionOnly {
+	
+	padding: 0 !important;
+	border: 0 !important;
+	background-color: transparent !important;
+	background-image: none !important;
+	height: auto !important;
+	width: auto !important;
+}
+.dijitNonPositionOnly {
+	
+	float: none !important;
+	position: static !important;
+	margin: 0 0 0 0 !important;
+	vertical-align: middle !important;
+}
+.dijitBackgroundIframe {
+	
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	z-index: -1;
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+.dijitDisplayNone {
+	
+	display:none !important;
+}
+.dijitContainer {
+	
+	overflow: hidden;	
+}
+.dijit_a11y * {
+	background-image:none !important;
+}
+.dijit_a11y .dijitIcon,
+.dijit_a11y DIV.dijitArrowButtonInner, 
+.dijit_a11y SPAN.dijitArrowButtonInner,
+.dijit_a11y IMG.dijitArrowButtonInner,
+.dijit_a11y .dijitCalendarIncrementControl {
+	
+	display: none;
+}
+.dijitSpinner DIV.dijitArrowButtonInner {
+	display: block; 
+}
+.dijit_a11y .dijitA11ySideArrow {
+	display: inline !important; 
+	cursor: pointer;
+}
+.dijit_a11y .dijitCalendarDateLabel {
+	padding: 1px;
+}
+.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+	border-style: dotted !important;
+	border-width: 1px;
+	padding: 0px;
+}
+.dijit_a11y .dijitCalendarDateTemplate {
+	padding-bottom: 0.1em !important;	
+}
+.dijit_a11y .dijit * {
+	background:white !important;
+	color:black !important;
+}
+.dijit_a11y .dijitButtonNode {
+	border-color: black!important;
+	border-style: outset!important;
+	border-width: medium!important;
+}
+.dijit_a11y .dijitTextBoxReadOnly .dijitInputField,
+.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitButtonNode * {
+	vertical-align: middle;
+}
+.dijitButtonNode .dijitArrowButtonInner {
+	
+	background: no-repeat center;
+	width: 12px;
+	height: 12px;
+	direction: ltr; 
+}
+.dijitLeft {
+	
+	background-position:left top;
+	background-repeat:no-repeat;
+}
+.dijitStretch {
+	
+	white-space:nowrap;			
+	background-repeat:repeat-x;
+}
+.dijitRight {
+	
+	#display:inline;				
+	background-position:right top;
+	background-repeat:no-repeat;
+}
+.dijitToggleButton,
+.dijitButton,
+.dijitDropDownButton,
+.dijitComboButton {
+	
+	margin: 0.2em;
+}
+.dijitButtonContents {
+	display: block;		
+}
+td.dijitButtonContents {
+	display: table-cell;	
+}
+.dijitButtonNode IMG {
+	
+	vertical-align:middle;
+	
+}
+TABLE.dijitComboButton { 
+	
+	border-collapse: collapse;
+	border:0;
+	padding:0;
+	margin:0;
+}
+.dijitToolbar .dijitComboButton {
+	
+	border-collapse: separate;
+}
+.dijitToolbar .dijitToggleButton,
+.dijitToolbar .dijitButton,
+.dijitToolbar .dijitDropDownButton,
+.dijitToolbar .dijitComboButton {
+	margin: 0;
+}
+.dijitToolbar .dijitButtonContents {
+	
+	padding: 1px 2px;
+}
+.dj_ie .dijitComboButton {
+	
+	margin-bottom: -3px;
+}
+.dj_webkit .dijitToolbar .dijitDropDownButton {
+	padding-left: 0.3em;
+}
+.dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
+	padding:0;
+}
+.dijitButtonNode {
+	
+	border:1px solid gray;
+	margin:0;
+	line-height:normal;
+	vertical-align: middle;
+	#vertical-align: auto;
+	text-align:center;
+	white-space: nowrap;
+}
+.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
+	
+	line-height:inherit;
+}
+.dijitTextBox .dijitButtonNode {
+	border-width: 0;
+}
+.dijitButtonNode,
+.dijitButtonNode * {
+	cursor: pointer;
+}
+.dj_ie .dijitButtonNode {
+	
+	zoom: 1;
+}
+.dj_ie .dijitButtonNode button {
+	
+	overflow: visible;
+}
+DIV.dijitArrowButton {
+	float: right;
+}
+.dijitTextBox {
+	border: solid black 1px;
+	#overflow: hidden; 
+	width: 15em;	
+	vertical-align: middle;
+	#vertical-align: auto;
+}
+.dijitTextBoxReadOnly,
+.dijitTextBoxDisabled {
+	color: gray;
+}
+.dj_webkit .dijitTextBoxDisabled INPUT {
+	color: #eee; 
+}
+.dj_webkit TEXTAREA.dijitTextAreaDisabled {
+	color: #333; 
+}
+.dj_gecko .dijitTextBoxReadOnly INPUT,
+.dj_gecko .dijitTextBoxDisabled INPUT {
+	-moz-user-input: none; 
+}
+.dijitPlaceHolder {
+	
+	color: #AAAAAA;
+	font-style: italic;
+	position: absolute;
+	top: 0;
+	left: 0;
+	#filter: ""; 
+}
+.dijitTimeTextBox {
+	width: 8em;
+}
+.dijitTextBox INPUT:focus {
+	outline: none;	
+}
+.dijitTextBoxFocused {
+	outline: auto 5px -webkit-focus-ring-color;
+}
+.dijitTextBox INPUT {
+	float: left; 
+}
+.dijitInputInner {
+	
+	border:0 !important;
+	vertical-align:middle !important;
+	background-color:transparent !important;
+	width:100% !important;
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+}
+.dijit_a11y .dijitTextBox INPUT {
+	margin: 0 !important;
+}
+.dijitTextBoxError INPUT.dijitValidationInner,
+.dijitTextBox INPUT.dijitArrowButtonInner {
+	
+	text-indent: -1em !important;
+	direction: ltr !important;
+	text-align: left !important;
+	height: auto !important;
+	#text-indent: 0 !important;
+	#letter-spacing: -5em !important;
+	#text-align: right !important;
+}
+.dj_ie .dijitTextBox INPUT,
+.dj_ie INPUT.dijitTextBox {
+	overflow-y: visible; 
+	line-height: normal; 
+}
+.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
+.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
+	line-height: 86%; 
+}
+.dj_ie6 .dijitTextBox INPUT,
+.dj_ie6 INPUT.dijitTextBox,
+.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
+.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
+.dj_iequirks INPUT.dijitTextBox {
+	line-height: 100%; 
+}
+.dijit_a11y INPUT.dijitValidationInner,
+.dijit_a11y INPUT.dijitArrowButtonInner {
+	
+	text-indent: 0 !important;
+	width: 1em !important;
+	#text-align: left !important;
+}
+.dijitTextBoxError .dijitValidationContainer {
+	display: inline;
+	cursor: default;
+}
+.dijitSpinner .dijitSpinnerButtonContainer,
+.dijitComboBox .dijitArrowButtonContainer {
+	
+	border-width: 0 0 0 1px !important; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	
+	border-width: 0;
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	clear: both; 
+}
+.dijit_a11y .dijitTextBox .dijitValidationContainer,
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
+	
+	border: solid black !important;
+	border-width: 0 0 0 1px !important;
+}
+.dj_ie .dijitToolbar .dijitComboBox {
+	
+	vertical-align: middle;
+}
+.dijitTextBox .dijitSpinnerButtonContainer {
+	width: 1em;
+	position: relative !important;
+	overflow: hidden;
+}
+.dijitSpinner .dijitSpinnerButtonInner {
+	width:1em;
+	visibility:hidden !important; 
+	overflow-x:hidden;
+}
+.dijitComboBox .dijitButtonNode,
+.dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 0;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border: 0 none !important;
+}
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
+.dijit_a11y .dijitSpinnerButtonContainer INPUT {
+	width: 1em !important;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
+	margin: 0 auto !important; 
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.3em !important;
+	padding-right: 0.3em !important;
+	margin-left: 0.3em !important;
+	margin-right: 0.3em !important;
+	width: 1.4em !important;
+}
+.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.0em !important; 
+	padding-right: 0.0em !important;
+	width: 1em !important;
+}
+.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0.1em !important;
+	margin-right: 0.1em !important;
+	width: 1em !important;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+	width: 2em !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	
+	padding: 0;
+	position: absolute !important;
+	right: 0;
+	float: none;
+	height: 50%;
+	width: 100%;
+	bottom: auto;
+	left: 0;
+	right: auto;
+}
+.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: auto;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
+	overflow: visible !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
+	top: 50%;
+	border-top-width: 1px !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
+	#bottom: 50%;	
+	top: 0;
+}
+.dijitSpinner .dijitArrowButtonInner {
+	margin: auto;
+	overflow-x: hidden;
+	height: 100% !important;
+}
+.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
+	height: auto !important;
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	-moz-transform: scale(0.5);
+	-moz-transform-origin: center top;
+	-webkit-transform: scale(0.5);
+	-webkit-transform-origin: center top;
+	-o-transform: scale(0.5);
+	-o-transform-origin: center top;
+	transform: scale(0.5);
+	transform-origin: left top;
+	padding-top: 0;
+	padding-bottom: 0;
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	width: 100%;
+}
+.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	zoom: 50%; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
+	overflow: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 100%;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 1em; 
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	visibility: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	vertical-align:top;
+	visibility: visible;
+}
+.dijit_a11y .dijitSpinnerButtonContainer {
+	width: 1em;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 1px 0px 0px 0px;
+	border-style: solid !important;
+}
+.dijitCheckBox,
+.dijitRadio,
+.dijitCheckBoxInput {
+	padding: 0;
+	border: 0;
+	width: 16px;
+	height: 16px;
+	background-position:center center;
+	background-repeat:no-repeat;
+	overflow: hidden;
+}
+.dijitCheckBox INPUT,
+.dijitRadio INPUT {
+	margin: 0;
+	padding: 0;
+	display: block;
+}
+.dijitCheckBoxInput {
+	
+	opacity: 0.01;
+}
+.dj_ie .dijitCheckBoxInput {
+	filter: alpha(opacity=0);
+}
+.dijit_a11y .dijitCheckBox,
+.dijit_a11y .dijitRadio {
+	
+	width: auto !important;
+	height: auto !important;
+}
+.dijit_a11y .dijitCheckBoxInput {
+	opacity: 1;
+	filter: none;
+	width: auto;
+	height: auto;
+}
+.dijitProgressBarEmpty {
+	
+	position:relative;overflow:hidden;
+	border:1px solid black; 	
+	z-index:0;			
+}
+.dijitProgressBarFull {
+	
+	position:absolute;
+	overflow:hidden;
+	z-index:-1;
+	top:0;
+	width:100%;
+}
+.dj_ie6 .dijitProgressBarFull {
+	height:1.6em;
+}
+.dijitProgressBarTile {
+	
+	position:absolute;
+	overflow:hidden;
+	top:0;
+	left:0;
+	bottom:0;
+	right:0;
+	margin:0;
+	padding:0;
+	width:auto;
+	height:auto;
+	background-color:#aaa;
+	background-attachment: fixed;
+}
+.dijit_a11y .dijitProgressBarTile {
+	
+	border-width:2px;
+	border-style:solid;
+	background-color:transparent !important;
+}
+.dj_ie6 .dijitProgressBarTile {
+	
+	position:static;
+	
+	height:1.6em;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarLabel {
+	visibility:hidden;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+}
+.dijitProgressBarIndeterminateHighContrastImage {
+	display:none;
+}
+.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
+	display:block;
+	position:absolute;
+	top:0;
+	bottom:0;
+	margin:0;
+	padding:0;
+	width:100%;
+	height:auto;
+}
+.dijitProgressBarLabel {
+	display:block;
+	position:static;
+	width:100%;
+	text-align:center;
+	background-color:transparent !important;
+}
+.dijitTooltip {
+	position: absolute;
+	z-index: 2000;
+	display: block;
+	
+	left: 50%;
+	top: -10000px;
+	overflow: visible;
+}
+.dijitTooltipContainer {
+	border: solid black 2px;
+	background: #b8b5b5;
+	color: black;
+	font-size: small;
+}
+.dijitTooltipFocusNode {
+	padding: 2px 2px 2px 2px;
+}
+.dijitTooltipConnector {
+	position: absolute;
+}
+.dijit_a11y .dijitTooltipConnector {
+	display: none;	
+}
+.dijitTooltipData {
+	display:none;
+}
+.dijitLayoutContainer {
+	position: relative;
+	display: block;
+	overflow: hidden;
+}
+body .dijitAlignTop,
+body .dijitAlignBottom,
+body .dijitAlignLeft,
+body .dijitAlignRight {
+	position: absolute;
+	overflow: hidden;
+}
+body .dijitAlignClient { position: absolute; }
+.dijitBorderContainer, .dijitBorderContainerNoGutter {
+	position:relative;
+	overflow: hidden;
+}
+.dijitBorderContainerPane,
+.dijitBorderContainerNoGutterPane {
+	position: absolute !important;	
+	z-index: 2;		
+}
+.dijitBorderContainer > .dijitTextArea {
+	
+	resize: none;
+}
+.dijitGutter {
+	
+	position: absolute;
+	font-size: 1px;		
+}
+.dijitSplitter {
+	position: absolute;
+	overflow: hidden;
+	z-index: 10;		
+	background-color: #fff;
+	border-color: gray;
+	border-style: solid;
+	border-width: 0;
+}
+.dj_ie .dijitSplitter {
+	z-index: 1;	
+}
+.dijitSplitterActive {
+	z-index: 11 !important;
+}
+.dijitSplitterCover {
+	position:absolute;
+	z-index:-1;
+	top:0;
+	left:0;
+	width:100%;
+	height:100%;
+}
+.dijitSplitterCoverActive {
+	z-index:3 !important;
+}
+.dj_ie .dijitSplitterCover {
+	background: white;
+	filter: alpha(opacity=0);
+}
+.dijitSplitterH {
+	height: 7px;
+	border-top:1px;
+	border-bottom:1px;
+	cursor: ns-resize;
+}
+.dijitSplitterV {
+	width: 7px;
+	border-left:1px;
+	border-right:1px;
+	cursor: ew-resize;
+}
+.dijitSplitContainer {
+	position: relative;
+	overflow: hidden;
+	display: block;
+}
+.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
+	outline-style:dotted;
+	outline-width: 2px;
+}
+.dijitSplitPane {
+	position: absolute;
+}
+.dijitSplitContainerSizerH,
+.dijitSplitContainerSizerV {
+	position:absolute;
+	font-size: 1px;
+	cursor: move;
+	cursor: w-resize;
+	background-color: ThreeDFace;
+	border: 1px solid;
+	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
+	margin: 0;
+}
+.dijitSplitContainerSizerH .thumb, .dijitSplitterV .dijitSplitterThumb {
+	overflow:hidden;
+	position:absolute;
+	top:49%;
+}
+.dijitSplitContainerSizerV .thumb, .dijitSplitterH .dijitSplitterThumb {
+	position:absolute;
+	left:49%;
+}
+.dijitSplitterShadow,
+.dijitSplitContainerVirtualSizerH,
+.dijitSplitContainerVirtualSizerV {
+	font-size: 1px;
+	background-color: ThreeDShadow;
+	-moz-opacity: 0.5;
+	opacity: 0.5;
+	filter: Alpha(Opacity=50);
+	margin: 0;
+}
+.dj_ie .dijitSplitterV, .dijitSplitContainerVirtualSizerH {
+	cursor: w-resize;
+}
+.dj_ie .dijitSplitterH, .dijitSplitContainerSizerV, .dijitSplitContainerVirtualSizerV {
+	cursor: n-resize;
+}
+.dijit_a11y .dijitSplitterH {
+	border-top:1px solid #d3d3d3 !important;
+	border-bottom:1px solid #d3d3d3 !important;
+}
+.dijit_a11y .dijitSplitterV {
+	border-left:1px solid #d3d3d3 !important;
+	border-right:1px solid #d3d3d3 !important;
+}
+.dijitContentPane {
+	display: block;
+	overflow: auto;	
+}
+.dijitContentPaneSingleChild {
+	
+	overflow: hidden;
+}
+.dijitTitlePane {
+	display: block;
+	overflow: hidden;
+}
+.dijitTitlePaneTitle {
+	cursor: pointer;
+}
+.dijitFixedOpen {
+	
+	cursor: default;
+}
+.dijitTitlePaneTitle * {
+	vertical-align: middle;
+}
+.dijitTitlePane .dijitArrowNodeInner {
+	
+	display: none;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
+	
+	display:inline !important;
+	font-family: monospace;		
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+	
+	display:none;
+}
+.dj_ie6 .dijitTitlePaneContentOuter,
+.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
+	
+	zoom: 1;
+}
+.dijitColorPalette {
+	border: 1px solid #999;
+	background: #fff;
+	position: relative;
+}
+img.dijitColorPaletteUnder {
+	
+	border-style: none;
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+.dijitColorPalette .dijitPaletteTable {
+	
+	padding: 2px 3px 3px 3px;
+	position: relative;
+	overflow: hidden;
+	outline: 0;
+	border-collapse: separate;
+}
+.dj_ie6 .dijitColorPalette .dijitPaletteTable,
+.dj_ie7 .dijitColorPalette .dijitPaletteTable,
+.dj_iequirks .dijitColorPalette .dijitPaletteTable {
+	
+	padding: 0;
+	margin: 2px 3px 3px 3px;
+}
+.dijitColorPalette .dijitPaletteCell {
+	
+	height: 20px;
+	width: 20px;
+	font-size: 1px;
+	vertical-align: middle;
+	text-align: center;
+}
+.dijitColorPalette .dijitPaletteImg {
+	
+	width: 16px;
+	height: 14px;
+	border: 1px solid #999;
+	cursor: default;
+	vertical-align: middle;
+}
+.dj_iequirks .dijitColorPalette .dijitPaletteImg {
+	margin: 1px;	
+}
+.dijitPaletteTable td {
+		padding: 0px;
+}
+.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	
+	border: 1px solid #000;
+}
+.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+	border: 2px solid #000;
+}
+.dijit_a11y .dijitColorPalette .dijitPaletteTable,
+.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
+	
+	background-color: transparent !important;
+}
+.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
+	border: 3px dotted #000;	
+	margin: -1px;
+}
+.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 2px solid #000 !important;
+}
+.dijitAccordionContainer {
+	border:1px solid #b7b7b7;
+	border-top:0 !important;
+}
+.dijitAccordionTitle {
+	cursor: pointer;
+}
+.dijitAccordionTitleSelected {
+	cursor: default;
+}
+.dijitAccordionTitle .arrowTextUp,
+.dijitAccordionTitle .arrowTextDown {
+	display: none;
+	font-size: 0.65em;
+	font-weight: normal !important;
+}
+.dijit_a11y .dijitAccordionTitle .arrowTextUp,
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
+	display: inline;
+}
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
+	display: none;
+}
+.dj_ie6 .dijitAccordionTitle,
+.dj_iequirks .dijitAccordionTitle {
+	
+	zoom: 1;
+}
+.dijitCalendarContainer {
+	width: auto;	
+}
+.dijitCalendarContainer th, .dijitCalendarContainer td {
+	padding: 0;
+}
+.dijitCalendarNextYear {
+	margin:0 0 0 0.55em;
+}
+.dijitCalendarPreviousYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarIncrementControl {
+	vertical-align: middle;
+}
+.dijitCalendarIncrementControl,
+.dijitCalendarDateTemplate,
+.dijitCalendarMonthLabel,
+.dijitCalendarPreviousYear,
+.dijitCalendarNextYear {
+	cursor: pointer;
+}
+.dijitCalendarDisabledDate {
+	color: gray;
+	text-decoration: line-through;
+	cursor: default;
+}
+.dijitSpacer {
+	
+  	position: relative;
+  	height: 1px;
+  	overflow: hidden;
+  	visibility: hidden;
+}
+.dijitMenu {
+	border:1px solid black;
+	background-color:white;
+}
+.dijitMenuTable {
+	border-collapse:collapse;
+	border-width:0;
+	background-color:white;
+}
+.dj_webkit .dijitMenuTable td[colspan="2"]{
+	border-right:hidden;
+}
+.dijitMenuItem {
+	text-align: left;
+	white-space: nowrap;
+	padding:.1em .2em;
+	cursor:pointer;
+}
+.dijitMenuPassive .dijitMenuItemHover,
+.dijitMenuItemSelected {
+	
+	background-color:black;
+	color:white;
+}
+.dijitMenuItemIcon, .dijitMenuExpand {
+	background-repeat: no-repeat;
+}
+.dijitMenuItemDisabled * {
+	
+	opacity:0.5;
+	cursor:default;
+}
+.dj_ie .dijit_a11y .dijitMenuItemDisabled,
+.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
+.dj_ie .dijitMenuItemDisabled *,
+.dj_ie .dijitMenuItemDisabled td {
+	color:gray !important;
+	filter: alpha(opacity=35);
+}
+.dijitMenuItemLabel {
+	position: relative;
+	vertical-align: middle;
+}
+.dijit_a11y .dijitMenuItemSelected {
+	border: 1px dotted black !important;
+}
+.dj_ff3 .dijit_a11y .dijitMenuItem td {
+	padding: none !important;
+	background:none !important;
+}
+.dijit_a11y .dijitMenuItemSelected .dijitMenuItemLabel {
+	border-width: 1px;
+	border-style: solid;
+}
+.dj_ie8 .dijit_a11y .dijitMenuItemLabel {
+	position:static;
+}
+.dijitMenuExpandA11y {
+	display: none;
+}
+.dijit_a11y .dijitMenuExpandA11y {
+	display: inline;
+}
+.dijitMenuSeparator td {
+	border: 0;
+	padding: 0;
+}
+.dijitMenuSeparatorTop {
+	height: 50%;
+	margin: 0;
+	margin-top:3px;
+	font-size: 1px;
+}
+.dijitMenuSeparatorBottom {
+	height: 50%;
+	margin: 0;
+	margin-bottom:3px;
+	font-size: 1px;
+}
+.dijitCheckedMenuItemIconChar {
+	vertical-align: middle;
+	visibility:hidden;
+}
+.dijitCheckedMenuItemChecked .dijitCheckedMenuItemIconChar {
+	visibility: visible;
+}
+.dijit_a11y .dijitCheckedMenuItemIconChar {
+	display:inline !important;
+}
+.dijit_a11y .dijitCheckedMenuItemIcon {
+	display: none;
+}
+.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
+	
+	margin: 0px;
+}
+.dijitStackController .dijitToggleButtonChecked * {
+	cursor: default;	
+}
+.dijitTabContainerNoLayout {
+	width: 100%;	
+}
+.dijitTabContainerBottom-tabs,
+.dijitTabContainerTop-tabs,
+.dijitTabContainerLeft-tabs,
+.dijitTabContainerRight-tabs {
+	overflow: visible !important;  
+}
+.dijitTabContainerBottom-container,
+.dijitTabContainerTop-container,
+.dijitTabContainerLeft-container,
+.dijitTabContainerRight-container {
+	z-index:0;
+	overflow: hidden;
+	border: 1px solid black;
+}
+.nowrapTabStrip {
+	width: 50000px;
+	display: block;
+	position: relative;
+}
+.dijitTabListWrapper {
+	overflow: hidden;
+}
+.dijit_a11y .tabStripButton img {
+	
+	display: none;
+}
+.dijitTabContainerTop-tabs {
+	border-bottom: 1px solid black;
+}
+.dijitTabContainerTop-container {
+	border-top: 0px;
+}
+.dijitTabContainerLeft-tabs {
+	border-right: 1px solid black;
+	float: left;
+}
+.dijitTabContainerLeft-container {
+	border-left: 0px;
+}
+.dijitTabContainerBottom-tabs {
+	border-top: 1px solid black;
+}
+.dijitTabContainerBottom-container {
+	border-bottom: 0px;
+}
+.dijitTabContainerRight-tabs {
+	border-left: 1px solid black;
+	float: left;
+}
+.dijitTabContainerRight-container {
+	border-right: 0px;
+}
+DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
+	cursor: auto;
+}
+.dijitTab {
+	position:relative;
+	cursor:pointer;
+	white-space:nowrap;
+	z-index:3;
+}
+.dijitTab * {
+	
+	vertical-align: middle;
+}
+.dijitTabChecked {
+	cursor: default;	
+}
+.dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;	
+}
+.dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;	
+}
+.dijitTabContainerLeft-tabs .dijitTab {
+	left: 1px;	
+}
+.dijitTabContainerRight-tabs .dijitTab {
+	left: -1px;	
+}
+.dijitTabContainerTop-tabs .dijitTab,
+.dijitTabContainerBottom-tabs .dijitTab {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+}
+.dijitTabInnerDiv {
+	position:relative;
+}
+.tabStripButton {
+	z-index: 12;
+}
+.dijitTabButtonDisabled .tabStripButton {
+	display: none;
+}
+.dijitTabCloseButton {
+	margin-left: 1em;
+}
+.dijitTabCloseText {
+	display:none;
+}
+.dijit_a11y .dijitTabCloseButton {
+	background-image: none !important;
+	width: auto !important;
+	height: auto !important;
+	border: thin dotted;	
+}
+.dijit_a11y .dijitTabCloseButtonHover {
+	border:thin solid;	
+}
+.dijit_a11y .dijitTabCloseText {
+	display: inline;
+}
+.dijit_a11y .dijitTabChecked {
+	
+	border-style:dashed !important;
+}
+.dijit_a11y .dijitTabInnerDiv {
+	border-left:none !important;
+ }
+.dijitTabPane,
+.dijitStackContainer-child,
+.dijitAccordionContainer-child {
+	
+    border: none !important;
+}
+.dijitInlineEditBoxDisplayMode {
+	border: 1px solid transparent;	
+	cursor: text;
+}
+.dijit_a11y .dijitInlineEditBoxDisplayMode,
+.dj_ie6 .dijitInlineEditBoxDisplayMode {
+	
+	border: none;
+}
+.dijitInlineEditBoxDisplayModeHover,
+.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
+.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
+	
+	background-color: #e2ebf2;
+	border: solid 1px black;
+}
+.dijitInlineEditBoxDisplayModeDisabled {
+	cursor: default;
+}
+.dijitTreeIndent {
+	
+	width: 19px;
+}
+.dijitTreeRow, .dijitTreeContent {
+	white-space: nowrap;
+}
+.dijitTreeRow img {
+	
+	vertical-align: middle;
+}
+.dijitTreeContent {
+    cursor: default;
+}
+.dijitExpandoText {
+	display: none;
+}
+.dijit_a11y .dijitExpandoText {
+	display: inline;
+	padding-left: 10px;
+	padding-right: 10px;
+	font-family: monospace;
+	border-style: solid;
+	border-width: thin;
+	cursor: pointer;
+}
+.dijitTreeLabel {
+	margin: 0px 4px;
+}
+.dijitDialog {
+	position: absolute;
+	z-index: 999;
+	overflow: hidden;       
+}
+.dijitDialogTitleBar {
+	cursor: move;
+}
+.dijitDialogFixed .dijitDialogTitleBar {
+	cursor:default;
+}
+.dijitDialogCloseIcon {
+	cursor: pointer;
+}
+.dijitDialogUnderlayWrapper {
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 998;
+	display: none;
+	background: transparent !important;
+}
+.dijitDialogUnderlay {
+	background: #eee;
+	opacity: 0.5;
+}
+.dj_ie .dijitDialogUnderlay {
+	filter: alpha(opacity=50);
+}
+.dijit_a11y .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitDialog {
+	opacity: 1 !important;
+	background-color: white !important;
+}
+.dijitDialog .closeText {
+	display:none;
+	
+	position:absolute;
+}
+.dijit_a11y .dijitDialog .closeText {
+	display:inline;
+}
+.dijitSliderMoveable {
+	z-index:99;
+	position:absolute !important;
+	display:block;
+	vertical-align:middle;
+}
+.dijitSliderMoveableH {
+	right:0;
+}
+.dijitSliderMoveableV {
+	right:50%;
+}
+.dijit_a11y DIV.dijitSliderImageHandle,
+.dijitSliderImageHandle {
+	margin:0;
+	padding:0;
+	position:relative !important;
+	border:8px solid gray;
+	width:0;
+	height:0;
+	cursor: pointer;
+}
+.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
+	font-size: 0;
+}
+.dj_ie7 .dijitSliderImageHandle {
+	overflow: hidden; 
+}
+.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
+	overflow: visible; 
+}
+.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
+	border:4px solid #000;
+	height:8px;
+	width:8px;
+}
+.dijitSliderImageHandleV {
+	top:-8px;
+	right: -50%;
+}
+.dijitSliderImageHandleH {
+	left:50%;
+	top:-5px;
+	vertical-align:top;
+}
+.dijitSliderBar {
+	border-style:solid;
+	border-color:black;
+	cursor: pointer;
+}
+.dijitSliderBarContainerV {
+	position:relative;
+	height:100%;
+	z-index:1;
+}
+.dijitSliderBarContainerH {
+	position:relative;
+	z-index:1;
+}
+.dijitSliderBarH {
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBarV {
+	width:4px;
+	border-width:0 1px;
+}
+.dijitSliderProgressBar {
+	background-color:red;
+	z-index:1;
+}
+.dijitSliderProgressBarV {
+	position:static !important;
+	height:0%;
+	vertical-align:top;
+	text-align:left;
+}
+.dijitSliderProgressBarH {
+	position:absolute !important;
+	width:0%;
+	vertical-align:middle;
+	overflow:visible;
+}
+.dijitSliderRemainingBar {
+	overflow:hidden;
+	background-color:transparent;
+	z-index:1;
+}
+.dijitSliderRemainingBarV {
+	height:100%;
+	text-align:left;
+}
+.dijitSliderRemainingBarH {
+	width:100% !important;
+}
+.dijitSliderBumper {
+	overflow:hidden;
+	z-index:1;
+}
+.dijitSliderBumperV {
+	width:4px;
+	height:8px;
+	border-width:0 1px;
+}
+.dijitSliderBumperH {
+	width:8px;
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBottomBumper,
+.dijitSliderLeftBumper {
+	background-color:red;
+}
+.dijitSliderTopBumper,
+.dijitSliderRightBumper {
+	background-color:transparent;
+}
+.dijitSliderDecoration {
+	text-align:center;
+}
+.dijitSliderV TD {
+	position: relative; 
+}
+.dijitSliderDecorationH {
+	width: 100%;
+}
+.dijitSliderDecorationV {
+	height: 100%;
+}
+.dijitSliderButton {
+	font-family:monospace;
+	margin:0;
+	padding:0;
+	display:block;
+}
+.dijit_a11y .dijitSliderButtonInner {
+	visibility:visible !important;
+}
+.dijitSliderButtonContainer {
+	text-align:center;
+	height:0;	
+}
+.dijitSliderButtonContainer * {
+	cursor: pointer;
+}
+.dijitSlider .dijitButtonNode {
+	padding:0;
+	display:block;
+}
+.dijitRuleContainer {
+	position:relative;
+	overflow:visible;
+}
+.dijitRuleContainerV {
+	height:100%;
+	line-height:0;
+	float:left;
+	text-align:left;
+}
+.dj_opera .dijitRuleContainerV {
+	line-height:2%;
+}
+.dj_ie .dijitRuleContainerV {
+	line-height:normal;
+}
+.dj_gecko .dijitRuleContainerV {
+	margin:0 0 1px 0; 
+}
+.dijitRuleMark {
+	position:absolute;
+	border:1px solid black;
+	line-height:0;
+	height:100%;
+}
+.dijitRuleMarkH {
+	width:0;
+	border-top-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+}
+.dijitRuleLabelContainer {
+	position:absolute;
+}
+.dijitRuleLabelContainerH {
+	text-align:center;
+	display:inline-block;
+}
+.dijitRuleLabelH {
+	position:relative;
+	left:-50%;
+}
+.dijitRuleLabelV {
+	
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+.dijitRuleMarkV {
+	height:0;
+	border-right-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+	width:100%;
+	left:0;
+}
+.dj_ie .dijitRuleLabelContainerV {
+	margin-top:-.55em;
+}
+.dijit_a11y .dijitSliderReadOnly,
+.dijit_a11y .dijitSliderDisabled {
+	opacity:0.6;
+}
+.dj_ie .dijit_a11y .dijitSliderReadOnly .dijitSliderBar,
+.dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
+	filter: alpha(opacity=40);
+}
+.dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
+	font-family: monospace; 
+	font-size: 1em;
+	line-height: 1em;
+	height: auto;
+	width: auto;
+	margin: 0px 4px;
+}
+.dijit_a11y .dijitButtonContents .dijitButtonText,
+.dijit_a11y .dijitTab .tabLabel {
+	display: inline !important;
+}
+.dijitTextArea {
+	width:100%;
+	overflow-y: auto;	
+}
+.dijitTextArea[cols] {
+	width:auto; 
+}
+.dj_ie .dijitTextAreaCols {
+	width:auto;
+}
+.dijitToolbarSeparator {
+	height: 18px;
+	width: 5px;
+	padding: 0 1px;
+	margin: 0;
+}
+.dijitIEFixedToolbar {
+	position:absolute;
+	
+	top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.dijitEditor {
+	display: block;	
+}
+.dijitEditorDisabled,
+.dijitEditorReadOnly {
+	color: gray;
+}
+.dijitTimePickerItemInner {
+	text-align:center;
+	border:0;
+	padding:2px 8px 2px 8px;
+}
+.dijitTimePickerTick,
+.dijitTimePickerMarker {
+	border-bottom:1px solid gray;
+}
+.dijitTimePicker .dijitDownArrowButton {
+	border-top: none !important;
+}
+.dijitTimePickerTick {
+	color:#CCC;
+}
+.dijitTimePickerMarker {
+	color:black;
+	background-color:#CCC;
+}
+.dijitTimePickerItemSelected {
+	font-weight:bold;
+	color:#333;
+	background-color:#b7cdee;
+}
+.dijitTimePickerItemHover {
+	background-color:gray;
+	color:white;
+	cursor:pointer;
+}
+.dijit_a11y .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	border: solid 4px black;
+}
+.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
+	border: dashed 4px black;
+}
+.dijitToggleButtonIconChar {
+	
+	display:none !important;
+}
+.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
+	display:inline !important;
+	visibility:hidden;
+}
+.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
+	font-family: "Arial Unicode MS";	
+}
+.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
+	display: inline !important; 
+	visibility:visible !important;
+}
+.dijitArrowButtonChar {
+        display:none !important;
+}
+.dijit_a11y .dijitArrowButtonChar {
+        display:inline !important;
+}
+.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
+.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
+	display:none !important;
+}
+.dijitSelect {
+	margin: 0.2em;
+	border-collapse: collapse;
+}
+.dj_ie .dijitSelect,
+.dj_ie7 .dijitSelect,
+.dj_iequirks .dijitSelect {
+	vertical-align: middle; 
+}
+.dj_ie8 .dijitSelect .dijitButtonText {
+	vertical-align: top;
+}
+.dijitToolbar .dijitSelect {
+	margin: 0;
+}
+.dj_webkit .dijitToolbar .dijitSelect {
+	padding-left: 0.3em;
+}
+.dijit_a11y .dijitSelectDisabled .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitSelect .dijitButtonContents {
+	padding: 0px;
+	background: transparent none;
+	white-space: nowrap;
+	text-align: left;
+}
+.dijitSelectFixedWidth .dijitButtonContents {
+	width: 100%;
+}
+.dijitSelectMenu .dijitMenuItemIcon {
+	
+	display:none;
+}
+.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
+.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
+	
+	position: static;
+}
+.dijitSelectLabel *
+{
+	vertical-align: baseline;
+}
+.dijitSelectSelectedOption * {
+	font-weight: bold;
+}
+.dijitSelectMenu {
+	border-width: 1px;
+}
+.dijitSelectMenu .dijitMenuTable {
+	margin: 0px;
+	background-color: transparent;
+}
+.dijitForceStatic {
+	position: static !important;
+}
+.dijitReadOnly *,
+.dijitDisabled *,
+.dijitReadOnly,
+.dijitDisabled {
+	
+	cursor: default;
+}
+.dijitIconSave,
+.dijitIconPrint,
+.dijitIconCut,
+.dijitIconCopy,
+.dijitIconClear,
+.dijitIconDelete,
+.dijitIconUndo,
+.dijitIconEdit,
+.dijitIconNewTask,
+.dijitIconEditTask,
+.dijitIconEditProperty,
+.dijitIconTask,
+.dijitIconFilter,
+.dijitIconConfigure,
+.dijitIconSearch,
+.dijitIconApplication,
+.dijitIconBookmark,
+.dijitIconChart,
+.dijitIconConnector,
+.dijitIconDatabase,
+.dijitIconDocuments,
+.dijitIconMail,
+.dijitLeaf,
+.dijitIconFile,
+.dijitIconFunction,
+.dijitIconKey,
+.dijitIconPackage,
+.dijitIconSample,
+.dijitIconTable,
+.dijitIconUsers,
+.dijitFolderClosed,
+.dijitIconFolderClosed,
+.dijitFolderOpened,
+.dijitIconFolderOpen,
+.dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitIconSave,
+.dj_ie6 .dijitIconPrint,
+.dj_ie6 .dijitIconCut,
+.dj_ie6 .dijitIconCopy,
+.dj_ie6 .dijitIconClear,
+.dj_ie6 .dijitIconDelete,
+.dj_ie6 .dijitIconUndo,
+.dj_ie6 .dijitIconEdit,
+.dj_ie6 .dijitIconNewTask,
+.dj_ie6 .dijitIconEditTask,
+.dj_ie6 .dijitIconEditProperty,
+.dj_ie6 .dijitIconTask,
+.dj_ie6 .dijitIconFilter,
+.dj_ie6 .dijitIconConfigure,
+.dj_ie6 .dijitIconSearch,
+.dj_ie6 .dijitIconApplication,
+.dj_ie6 .dijitIconBookmark,
+.dj_ie6 .dijitIconChart,
+.dj_ie6 .dijitIconConnector,
+.dj_ie6 .dijitIconDatabase,
+.dj_ie6 .dijitIconDocuments,
+.dj_ie6 .dijitIconMail,
+.dj_ie6 .dijitLeaf,
+.dj_ie6 .dijitIconFile,
+.dj_ie6 .dijitIconFunction,
+.dj_ie6 .dijitIconKey,
+.dj_ie6 .dijitIconPackage,
+.dj_ie6 .dijitIconSample,
+.dj_ie6 .dijitIconTable,
+.dj_ie6 .dijitIconUsers,
+.dj_ie6 .dijitFolderClosed,
+.dj_ie6 .dijitIconFolderClosed,
+.dj_ie6 .dijitFolderOpened,
+.dj_ie6 .dijitIconFolderOpen,
+.dj_ie6 .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
+}
+.dijitDisabled .dijitIconSave,
+.dijitDisabled .dijitIconPrint,
+.dijitDisabled .dijitIconCut,
+.dijitDisabled .dijitIconCopy,
+.dijitDisabled .dijitIconClear,
+.dijitDisabled .dijitIconDelete,
+.dijitDisabled .dijitIconUndo,
+.dijitDisabled .dijitIconEdit,
+.dijitDisabled .dijitIconNewTask,
+.dijitDisabled .dijitIconEditTask,
+.dijitDisabled .dijitIconEditProperty,
+.dijitDisabled .dijitIconTask,
+.dijitDisabled .dijitIconFilter,
+.dijitDisabled .dijitIconConfigure,
+.dijitDisabled .dijitIconSearch,
+.dijitDisabled .dijitIconApplication,
+.dijitDisabled .dijitIconBookmark,
+.dijitDisabled .dijitIconChart,
+.dijitDisabled .dijitIconConnector,
+.dijitDisabled .dijitIconDatabase,
+.dijitDisabled .dijitIconDocuments,
+.dijitDisabled .dijitIconMail,
+.dijitDisabled .dijitLeaf,
+.dijitDisabled .dijitIconFile,
+.dijitDisabled .dijitIconFunction,
+.dijitDisabled .dijitIconKey,
+.dijitDisabled .dijitIconPackage,
+.dijitDisabled .dijitIconSample,
+.dijitDisabled .dijitIconTable,
+.dijitDisabled .dijitIconUsers,
+.dijitDisabled .dijitFolderClosed,
+.dijitDisabled .dijitIconFolderClosed,
+.dijitDisabled .dijitFolderOpened,
+.dijitDisabled .dijitIconFolderOpen,
+.dijitDisabled .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
+}
+.dijitIconSave { background-position: 0px; }
+.dijitIconPrint { background-position: -16px; }
+.dijitIconCut { background-position: -32px; }
+.dijitIconCopy { background-position: -48px; }
+.dijitIconClear { background-position: -64px; }
+.dijitIconDelete { background-position: -80px; }
+.dijitIconUndo { background-position: -96px; }
+.dijitIconEdit { background-position: -112px; }
+.dijitIconNewTask { background-position: -128px; }
+.dijitIconEditTask { background-position: -144px; }
+.dijitIconEditProperty { background-position: -166px; }
+.dijitIconTask { background-position: -176px; }
+.dijitIconFilter { background-position: -192px; }
+.dijitIconConfigure { background-position: -208px; }
+.dijitIconSearch { background-position: -224px; }
+.dijitIconError { background-position: -496px; } 
+.dijitIconApplication { background-position: -240px; }
+.dijitIconBookmark { background-position: -256px; }
+.dijitIconChart { background-position: -272px; }
+.dijitIconConnector { background-position: -288px; }
+.dijitIconDatabase { background-position: -304px; }
+.dijitIconDocuments { background-position: -320px; }
+.dijitIconMail { background-position: -336px; }
+.dijitIconFile, .dijitLeaf { background-position: -352px; }
+.dijitIconFunction { background-position: -368px; }
+.dijitIconKey { background-position: -384px; }
+.dijitIconPackage{ background-position: -400px; }
+.dijitIconSample { background-position: -416px; }
+.dijitIconTable { background-position: -432px; }
+.dijitIconUsers { background-position: -448px; }
+.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
+.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
+.soria .dojoDndItemBefore {
+	border-top: 2px solid #369;
+}
+.soria .dojoDndItemAfter {
+	border-bottom: 2px solid #369;
+}
+.soria .dojoDndItemOver {
+	cursor:pointer;
+}
+.soria table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.soria .dojoDndAvatar td	{ border: none; }
+.soria .dojoDndAvatar tr	{ border: none; }
+.soria .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
+.soria .dojoDndAvatarItem td { padding: 2px;}
+.soria.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria .dijitContentPane {
+    padding: 0px;
+}
+.soria .dijitTabContainerTop-dijitContentPane,
+.soria .dijitTabContainerLeft-dijitContentPane,
+.soria .dijitTabContainerBottom-dijitContentPane,
+.soria .dijitTabContainerRight-dijitContentPane,
+.soria .dijitAccordionContainer-dijitContentPane {
+    background-color: #fff;
+    padding: 5px;
+}
+.soria .dijitSplitContainer-dijitContentPane,
+.soria .dijitBorderContainer-dijitContentPane {
+    background-color: #fff;		
+    padding: 5px;
+}
+ .soria .dijitTabContainer .tabStripRBtn {
+	margin-right: 21px;
+}
+ .soria .dijitTabContainer .tabStripLBtn {
+	margin-left: 21px;
+}
+ .soria .nowrapTabStrip .dijitTab {
+	top: 2px;
+}
+ .soria .dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;
+	bottom: 2px;
+}
+.soria .dijitTabPaneWrapper {
+	background:#fff;
+	border:1px solid #B1BADF;
+	margin: 0;
+	padding-left: 0px;
+}
+.soria .dijitTabInnerDiv {
+	padding:0px 3px 0px 0px;
+	margin: 0 0 0 4px;
+	background: url(images/tabContainerSprite.gif) no-repeat;
+	background-position: right -400px;
+}
+.soria .dijitTab {
+	line-height:normal;
+	margin:0 2px 0 0;	
+	padding:0px;
+	background: url(images/tabContainerSprite.gif) no-repeat 0 -300px;
+	color: #243C5F;
+	border-bottom: 1px #B1BADF solid;
+}
+.soria .dijitTabInnerDiv .dijitTabContent {
+	padding:4px 3px 2px 4px;
+	background: url(images/tabContainerSprite.gif) repeat-x 0 -350px;
+	position: relative;
+}
+.soria .dijitTabListWrapper {
+	z-index: 10;
+}
+.soria .dijitTabHover {
+	color: #243C5F;
+	background: url(images/tabContainerSprite.gif) no-repeat 0px -150px;
+}
+.soria .dijitTabHover .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -250px;
+}
+.soria .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabContainerSprite.gif) repeat-x 0 -200px;
+}
+.soria .dijitTabChecked
+{
+	
+	background: url(images/tabContainerSprite.gif) no-repeat 0px -0px;
+}
+.soria .dijitTabChecked .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -100px;
+}
+.soria .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabContainerSprite.gif) repeat-x 0 -50px;
+	color: #243C5F !important;
+}
+.soria .dijitTabContainerTabListNested {
+	background: #F0F4FC;
+	background: #D9E9F9;
+	border: none;
+}
+.soria .dijitTabContainerTabListNested .dijitTab {
+	background: none;
+	border: none;
+	top: 0px;	
+}
+.soria .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
+.soria .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+	background: none;
+}
+.soria .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+	text-decoration: underline;
+}
+.soria .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+	text-decoration: underline;
+	font-weight: bold;
+}
+.soria .dijitTabContainerSpacerNested .dijitTabSpacer {
+	
+	height: 0px;
+}
+.soria .dijitTabPaneWrapperNested {
+	border: none;	
+}
+.soria .dijitTabCloseButton {
+	width: 15px;
+	height: 15px;
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px top;
+	margin-top: -1px;
+}
+.dj_ie6 .soria .dijitTabCloseButton {
+	background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px top;
+}
+.soria .dijitTabCloseButtonHover {
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px -15px;
+}
+.dj_ie6 .soria .dijitTabCloseButtonHover {
+	background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px -15px;
+}
+.soria .dijitTab .tabLabel {
+	
+	min-height: 15px;
+	display: inline-block;
+}
+.dj_ie6 .soria .dijitTabButtonIcon {
+	
+	height: 18px;
+	width: 1px;
+}
+.soria .dijitTabContainerTop-tabs {
+	border-color: #B1BADF;
+	padding-left: 3px;
+}
+.soria .dijitTabContainerTopNoStrip {
+	padding-top: 3px;
+}
+.soria .dijitTabContainerTop-container {
+	border-top: none;
+}
+.soria .dijitTabContainerTop .dijitTabListWrapper {
+	border-bottom: none;
+}
+.soria .dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;
+}
+.soria .dijitTabContainerTop-tabs .dijitTabChecked {
+	border-bottom-color: #94b4e6;
+}
+.soria .dijitTabContainerTopStrip {
+	border: 1px solid #B1BADF;
+	margin-top: 1px;
+	padding-top: 1px;
+	background: #F0F4FC;
+}
+.soria .dijitTabContainerTopStrip .dijitTabContainerTop-tabs {
+	padding-left: 3px;
+}
+.soria .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.soria .dijitTabContainerBottom-tabs {
+	margin-top: -1px;
+	padding-left: 3px;
+	border-top: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerBottom .dijitTabListWrapper {
+	border-top: none;
+	padding-top: 1px;
+	padding-bottom: 1px;
+	float: left;
+}
+.soria .dijitTabContainerBottom-container {
+	border-bottom: none;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTab {
+	border-bottom: none;
+	border-top: 1px solid #B1BADF;
+	background: url(images/tabBottomEnabledSpriteLR.gif) no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked {
+	border-top-color:#94b4e6;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
+	padding-top: 3px;
+	padding-bottom: 3px;
+	background: url(images/tabBottomEnabledC.gif) repeat-x bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+	background: url(images/tabBottomEnabledSpriteLR.gif) no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover {
+	color: #243C5F;
+	background: url(images/tabBottomHoverSpriteLR.gif) no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url(images/tabBottomHoverSpriteLR.gif) no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabBottomHoverC.gif) repeat-x bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked {
+	
+	background: url(images/tabBottomActiveSpriteLR.gif) no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background: url(images/tabBottomActiveSpriteLR.gif) no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabBottomActiveC.gif) repeat-x bottom left;
+}
+.soria .dijitTabContainerBottomStrip {
+	padding-bottom: 2px;
+	border: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerBottomStrip {
+	background: #F0F4FC;
+}
+.soria .dijitTabContainerBottom-spacer,
+.soria .dijitTabContainerTop-spacer {
+	height: 2px;
+	border: 1px solid #8ba0bd;
+	background: #94b4e6;
+}
+.soria .dijitTabContainerTop-spacer {
+	border-top: none;
+}
+.soria .dijitTabContainerBottom-spacer {
+	border-bottom: none;
+}
+.soria .dijitTabContainerRight-tabs {
+	height: 100%;
+	border-color: #ccc;
+	padding-top: 3px;
+}
+.soria .dijitTabContainerRight-container {
+	border-right: none;
+}
+.soria .dijitTabContainerRight-tabs .dijitTab {
+	border-bottom: none;
+	border-left: 1px solid #B1BADF;
+	border-bottom: 1px solid #B1BADF !important;
+}
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+	border-bottom: solid #B1BADF 1px;
+	margin-bottom: -1px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabChecked {
+	border-left-color: #94b4e6;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabChecked {
+	background: url(images/tabRightChecked.gif) no-repeat left top !important;
+}
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #94b4e6 1px;
+	margin-bottom: -1px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTab {
+	background: url(images/tabContainerSprite.gif) no-repeat left -350px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
+	background: url(images/tabContainerSprite.gif) no-repeat left -200px;
+}
+.soria .dijitTabContainerRightStrip {
+	padding-right: 2px;
+	border: 1px solid #B1BADF;
+	background: #F0F4FC;
+	border-left: none;
+}
+.soria .dijitTabContainerLeft-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+	height: 100%;
+}
+.soria .dijitTabContainerLeft-container {
+	border-left: none;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTab {
+	border-right: 1px solid #B1BADF;
+	border-bottom: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabChecked {
+	border-right: 1px solid #94b4e6;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -350px;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -200px;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	background: url(images/tabLeftChecked.gif) no-repeat right top;
+}
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	border-bottom: solid #B1BADF 1px;
+	margin-bottom: -1px;
+}
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #94b4e6 1px;
+	margin-bottom: -1px;
+}
+.soria .dijitTabContainerLeftStrip {
+	padding-left: 2px;
+	border: 1px solid #B1BADF;
+	background: #F0F4FC;
+	border-right: none;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTab,
+.soria .dijitTabContainerRight-tabs .dijitTab {
+	margin-right:auto;
+	margin-bottom:2px;	
+}
+.soria .dijitTabContainerLeft-spacer,
+.soria .dijitTabContainerRight-spacer {
+	width: 2px;
+	border: 1px solid #8ba0bd;
+	background: #94b4e6;
+}
+.soria .dijitTabContainerLeft-spacer {
+	border-left: none;
+}
+.soria .dijitTabContainerRight-spacer {
+	border-right: none;
+}
+.soria .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+	border-left: 0px solid #ccc;
+	border-top: 0px solid #ccc;
+	border-right: 0px solid #ccc;
+	padding-top: 0px;
+	padding-left: 0px;
+}
+.soria .dijitTabContainer .tabStripButton {
+	margin-right: 0;
+}
+.soria .dijitTabContainer .tabStripButton-top {
+	margin-top: 1px;
+}
+.soria .tabStripButton .dijitTabContent{
+	padding: 6px 0 5px 0;
+}
+.dj_ie6 .soria .tabStripButton .dijitTabContent,
+.dj_ie7 .soria .tabStripButton .dijitTabContent {
+	padding-top: 7px;
+}
+.soria .tabStrip-disabled .tabStripButton .dijitTabContent {
+	padding: 5px 0 3px 0;
+}
+.dj_ie6 .soria .tabStrip-disabled .tabStripButton .dijitTabContent,
+.dj_ie7 .soria .tabStrip-disabled .tabStripButton .dijitTabContent {
+	padding-top: 6px;
+}
+.soria .dijitTabContainer .tabStripButton-bottom {
+	background: transparent url(images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
+	border-bottom: medium none;
+	border-top: 1px solid #B1BADF;
+}
+.soria .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
+	background: transparent url(images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
+}
+.soria .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
+	background: transparent;
+}
+.soria .dijitTabStripIcon {
+	height: 14px;
+	width: 14px;
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat left top ;
+}
+.dj_ie6 .soria .dijitTabStripIcon {
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.soria .dijitTabStripSlideRightIcon {
+	background-position: -30px top;
+}
+.soria .dijitTabStripMenuIcon {
+	background-position: -15px top;
+}
+.soria .dijitAccordionContainer {
+	border-color: #b1badf;
+	background-color: #fff;
+}
+.soria .dijitAccordionTitle {
+	background:#fafafa url(images/titleBar.png) repeat-x top left;
+	border-top: 1px solid #b9bbdd;
+	padding: 5px 4px 6px 8px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #373941;
+}
+.soria .dijitAccordionTitleSelected  {
+	background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
+	font-weight: bold;
+	border-top: 1px solid #b9bbdd;
+	border-bottom: 1px solid #b9bbdd;
+	padding: 5px 4px 5px 8px;
+	color: #243C5F;
+}
+.soria .dijitAccordionArrow {
+	background:url(images/spriteRoundedIconsSmallBl.gif) no-repeat -30px top;
+	width:15px;
+	height:15px;
+	margin-top:-1px;
+}
+.soria .dijitAccordionTitleSelected .dijitAccordionArrow {
+	background:url(images/spriteRoundedIconsSmallBl.gif) no-repeat -15px top;
+	margin-top:-1px;
+}
+.soria .dijitAccordionText {
+	margin-left: 4px;
+	margin-right: 4px;
+}
+.soria .dijitSplitContainerSizerH {
+	background:url(images/splitContainerSizerV.png) repeat-y #cddef4;
+	border:0;
+	border-left:0px solid #436496;
+	border-right:0px solid #436496;
+	width:5px;
+}
+.soria .dijitSplitContainerSizerH .thumb {
+	background:url(images/splitContainerSizerV-thumb.png) no-repeat #ccc;
+	left:1px;
+	width:2px;
+	height:19px;
+}
+.soria .dijitSplitContainerSizerV {
+	background:url(images/splitContainerSizerH.png) repeat-x #cddef4;
+	border:0;
+	border-top:0px solid #436496;
+	border-bottom:0px solid #436496;
+	height:2px;
+}
+.soria .dijitSplitContainerSizerV .thumb {
+	background:url(images/splitContainerSizerH-thumb.png) no-repeat #ccc;
+	top:1px;
+	width:19px;
+	height:5px;
+}
+.soria .dijitBorderContainer {
+	background-color: #e1ebfb;
+	padding: 5px;
+}
+.soria .dijitSplitContainer-child,
+.soria .dijitBorderContainer-child {
+	
+	border: 1px #b1badf solid;
+}
+.soria .dijitBorderContainer-dijitTabContainerTop,
+.soria .dijitBorderContainer-dijitTabContainerBottom,
+.soria .dijitBorderContainer-dijitTabContainerLeft,
+.soria .dijitBorderContainer-dijitTabContainerRight {
+	
+	 border: none;
+}
+.soria .dijitBorderContainer-dijitBorderContainer {
+	
+	border: none;
+	padding: 0px;
+}
+.soria .dijitSplitterH,
+.soria .dijitGutterH {
+	background: #E1EBFB;
+	border:0;
+	border-left:0px solid #d3d3d3;
+	border-right:0px solid #d3d3d3;
+	height:5px;
+}
+.soria .dijitSplitterH .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.soria .dijitSplitterV,
+.soria .dijitGutterV {
+	background: #E1EBFB;
+	border:0;
+	border-top:0px solid #d3d3d3;
+	border-bottom:0px solid #d3d3d3;
+	width:5px;
+}
+.soria .dijitSplitterV .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:19px;
+	left:2px;
+	width:1px;
+}
+.soria .dijitSplitterActive {
+	font-size: 1px;
+	background-image: none;
+	background-color: #aaa;
+	-moz-opacity: 0.6;
+	opacity: 0.6;
+	filter: Alpha(Opacity=60);
+	margin: 0;
+}
+.soria .dijitInputContainer INPUT,
+.soria .dijitTextBox {
+	margin: 0em 0.1em;
+}
+.soria .dijitTextBox,
+.soria .dijitTextArea {
+	
+	background:#fff url(images/validationInputBg.png) repeat-x top left;
+	#background:#fff url(images/validationInputBg.gif) repeat-x top left;
+	border:1px solid #8ba0bd;
+}
+.soria .dijitComboBox .dijitButtonNode {
+	padding: 0 0.2em;
+}
+.soria .dijitTextBox .dijitButtonNode {
+	
+	border-color: #8ba0bd;
+}
+.soria .dijitTextBoxFocused,
+.soria .dijitTextAreaFocused {
+	
+	border-color:#406b9b;
+}
+.soria .dijitTextBoxFocused .dijitButtonNode,
+.soria .dijitSpinner .dijitUpArrowButtonActive,
+.soria .dijitSpinner .dijitDownArrowButtonActive {
+	border-left-color:#8ba0bd;
+}
+.soria .dijitSpinnerFocused .dijitDownArrowButton,
+.soria .dijitSpinner .dijitUpArrowButtonActive,
+.soria .dijitSpinner .dijitDownArrowButtonActive {
+	border-top-color:#8ba0bd;
+}
+.soria .dijitError {
+	border-color:#f3d118;
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.soria .dijitErrorFocused {
+	background-color:#ff6;
+	background-image:none;
+}
+.soria .dijitValidationIcon {
+	
+	width: 16px;
+	background: transparent url(images/warning.png) no-repeat center center;
+}
+.soria .dijitComboBoxHighlightMatch {
+	background-color:#f9f7ba;
+}
+.soria .dijitButtonNode {
+	
+	border: 1px solid #8ba0bd;
+	border-bottom:1px solid #657c9c;
+	padding: 0.1em 0.2em 0.2em 0.2em;
+	background: #bcd5f0 url(images/buttonEnabled.png) repeat-x top left;
+}
+.soria .dijitSelect .dijitButtonContents {
+	border-right: none;
+}
+.soria .dijitButtonText {
+	text-align: center;
+	padding: 0 0.3em;
+}
+.soria .dijitArrowButton {
+	color: #111;
+}
+.soria .dijitComboButton .dijitDownArrowButton {
+	padding-right:4px;
+}
+.soria .dijitTextBoxReadOnly,
+.soria .dijitTextBoxReadOnly .dijitButtonNode,
+.soria .dijitButtonDisabled .dijitButtonNode,
+.soria .dijitToggleButtonDisabled .dijitButtonNode,
+.soria .dijitDropDownButtonDisabled .dijitButtonNode,
+.soria .dijitComboButtonDisabled .dijitButtonNode,
+.soria .dijitTextBoxDisabled,
+.soria .dijitTextBoxDisabled .dijitButtonNode {
+	
+	border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+	background:#c3d3e5 url(images/buttonDisabled.png) top repeat-x;
+	opacity: 0.60;
+}
+.dj_ie6 .soria .dijitReadOnly INPUT,
+.dj_ie7 .soria .dijitReadOnly INPUT,
+.dj_ie6 .soria .dijitComboButtonDisabled .dijitButtonText,
+.dj_ie7 .soria .dijitComboButtonDisabled .dijitButtonText {
+	
+	color: #aaa;
+}
+.soria .dijitButtonHover .dijitButtonNode,
+.soria .dijitButtonNodeHover,
+.soria .dijitToggleButtonHover .dijitButtonNode,
+.soria .dijitDropDownButtonHover .dijitButtonNode,
+.soria .dijitButtonContentsHover,
+.soria .dijitUpArrowButtonHover,
+.soria .dijitDownArrowButtonHover {
+	
+	
+	color:#243C5F;
+	background:#acc5e2 url(images/buttonHover.png) repeat-x top left;
+}
+.soria .dijitButtonActive .dijitButtonNode,
+.soria .dijitToggleButtonActive .dijitButtonNode,
+.soria .dijitDropDownButtonActive .dijitButtonNode,
+.soria .dijitComboButtonActive .dijitButtonContents,
+.soria .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+	
+	border-color:#657c9c;
+	background: #91b4e5 url(images/buttonActive.png) top left repeat-x;
+}
+.soria .dijitUpArrowButtonActive,
+.soria .dijitDownArrowButtonActive {
+	
+	background: #91b4e5 url(images/buttonActive.png) top left repeat-x;
+}
+.soria .dijitArrowButtonInner {
+	background-image: url(images/spriteArrows.png);
+	background-repeat: no-repeat;
+	background-position: 0px center;
+	width: 11px;
+	height: 11px;
+}
+.soria .dijitComboBox .dijitArrowButtonInner {
+        background-position: 0 center;
+}
+.soria .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -11px center;
+}
+.soria .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -22px center;
+}
+.soria .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -33px center;
+}
+.dj_ie6 .soria .dijitArrowButtonInner {
+	background-image: url(images/spriteArrows.gif);
+}
+.dj_ie .soria .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: 1px; 
+}
+.soria .dijitSpinnerButtonContainer {
+	width: auto;
+	padding: 0;
+}
+.soria .dijitSpinner .dijitArrowButton {
+	width: 15px;
+}
+.soria .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.soria .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
+.soria .dijitToggleButton .dijitCheckBox,
+.soria .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url(images/spriteCheckbox.gif);
+}
+.soria .dijitCheckBox,
+.soria .dijitCheckBoxIcon {		
+	background-image: url(images/spriteCheckbox.gif); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.soria .dijitCheckBox,
+.soria .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -16px;
+}
+.soria .dijitCheckBoxChecked,
+.soria .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: 0px;
+}
+.soria .dijitCheckBoxDisabled {
+	
+	background-position: -48px;
+}
+.soria .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -32px;
+}
+.soria .dijitCheckBoxHover {
+	
+	background-position: -80px;
+}
+.soria .dijitCheckBoxCheckedHover {
+	
+	background-position: -64px;
+}
+.soria .dijitToggleButton .dijitRadio,
+.soria .dijitToggleButton .dijitRadioIcon {
+	background-image: url(images/spriteRadio.gif);
+}
+.soria .dijitRadio,
+.soria .dijitRadioIcon	{		
+	background-image: url(images/spriteRadio.gif); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.soria .dijitRadio,
+.soria .dijitToggleButton .dijitRadioIcon {
+	
+	background-position: -16px;
+}
+.soria .dijitRadioChecked,
+.soria .dijitToggleButtonChecked .dijitRadioIcon {
+	
+	background-position: 0px;
+}
+.soria .dijitRadioDisabled {
+	
+	background-position: -48px;
+}
+.soria .dijitRadioCheckedDisabled {
+	
+	background-position: -32px;
+}
+.soria .dijitRadioHover {
+	
+	background-position: -80px;
+}
+.soria .dijitRadioCheckedHover {
+	
+	background-position: -64px;
+}
+.soria .dijitSliderProgressBarH {
+	border-color: #b1badf;
+	background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.soria .dijitSliderProgressBarV {
+	border-color: #b1badf;
+	background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.soria .dijitSliderFocused .dijitSliderProgressBarH,
+.soria .dijitSliderFocused .dijitSliderLeftBumper {
+	background-image:url(images/sliderFullFocus.png);
+}
+.soria .dijitSliderFocused .dijitSliderProgressBarV,
+.soria .dijitSliderFocused .dijitSliderBottomBumper {
+	background-image:url(images/sliderFullVerticalFocus.png);
+}
+.soria .dijitSliderRemainingBarV {
+	border-color: #b4b4b4;
+	background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y bottom left;
+}
+.soria .dijitSliderRemainingBarH {
+	border-color: #b4b4b4;
+	background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+}
+.soria .dijitSliderBar {
+	border-style: solid;
+	outline:1px;
+	
+}
+.soria .dijitSliderFocused .dijitSliderBar {
+	border-color:#8ba0bd;
+}
+.soria .dijitSliderImageHandleH {
+	border:0px;
+	width:15px;
+	height:18px;
+	background:url(images/preciseSliderThumb.png) no-repeat center top;
+}
+.soria .dijitSliderFocused .dijitSliderImageHandleH {
+	background-image:url(images/preciseSliderThumbFocus.png);
+	#background-image:url(images/preciseSliderThumbFocus.gif);
+}
+.dj_ie6 .soria .dijitSliderImageHandleH {
+	background-image:url(images/preciseSliderThumb.gif);
+}
+.soria .dijitSliderLeftBumper {
+	border-left-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.soria .dijitSliderRightBumper {
+	background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+	border-color: #b4b4b4;
+	border-right-width: 1px;
+}
+.soria .dijitSliderImageHandleV {
+	border:0px;
+	width:20px;
+	height:15px;
+	background:url(images/sliderThumb.png) no-repeat center center;
+	#background:url(images/sliderThumb.gif) no-repeat center center;
+}
+.soria .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url(images/sliderThumbFocus.png);
+	#background-image:url(images/sliderThumbFocus.gif);
+}
+.soria .dijitSliderBottomBumper {
+	border-bottom-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.soria .dijitSliderTopBumper {
+	background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y top left;
+	border-color: #b4b4b4;
+	border-top-width: 1px;
+}
+.soria .dijitSliderIncrementIconH,
+.soria .dijitSliderIncrementIconV {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -45px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -45px top;
+	width:15px; height:15px;
+}
+.soria .dijitSliderIncrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.soria .dijitSliderDecrementIconH,
+.soria .dijitSliderDecrementIconV {
+	width:15px;
+	height:15px;
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -15px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+}
+.soria .dijitSliderDecrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat 0px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat 0px top;
+}
+.soria .dijitSliderButtonInner {
+	visibility:hidden;
+}
+.soria .dijitSliderReadOnly *,
+.soria .dijitSliderDisabled * {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	color: #bdbdbd;
+}
+.soria .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.soria .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position: 0px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.soria .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position: -30px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.soria .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position: -15px -15px;
+}
+.soria .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.soria .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position: -45px -15px;
+}
+.soria .dijitSelect .dijitButtonNode {
+	padding: 0px;
+}
+.soria .dijitSelect .dijitButtonContents {
+	padding-top: 1px;
+    background:#fff url(images/validationInputBg.png) repeat-x top left;
+    #background:#fff url(images/validationInputBg.gif) repeat-x top left;
+}
+.soria .dijitSelectHover .dijitButtonContents,
+.soria .dijitSelectActive .dijitButtonContents,
+.soria .dijitSelectOpened .dijitButtonContents,
+.soria .dijitSelectDisabled .dijitButtonContents,
+.soria .dijitSelectReadOnly .dijitButtonContents{
+	background: transparent none;
+}
+.dj_ie .soria .dijitSelect .dijitButtonContents {
+	padding-top: 0px;
+}
+.soria .dijitSelect .dijitArrowButton {
+	padding: 0px 2px;
+}
+.soria .dijitSelectDisabled .dijitButtonNode {
+    border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+    background:#c3d3e5 url(images/buttonDisabled.png) top repeat-x;
+}
+.dj_ie .soria .dijitSelectDisabled  .dijitButtonNode * {
+	filter: gray() alpha(opacity=50);
+}
+.soria .dijitSelectHover .dijitButtonNode {
+    color:#000;
+    background:#acc5e2 url(images/buttonHover.png) repeat-x top left;
+}
+.soria .dijitSelectActive .dijitButtonNode,
+.soria .dijitSelectOpened .dijitButtonNode {
+    border-color:#657c9c;
+    background: #91b4e5 url(images/buttonActive.png) top left repeat-x;
+}
+.soria .dijitSelectMenu td {
+	padding: 0em;
+}
+.soria .dijitSelectMenu .dijitMenuItemLabel,
+.soria .dijitSelectMenu .dijitMenuArrowCell {
+	padding: 0.1em 0.2em;
+}
+.soria .dijitTreeNode {
+    background : url(images/treeI.gif) no-repeat;
+    background-position : top left;
+    background-repeat : repeat-y;
+    zoom: 1;	
+}
+.soria .dijitTreeRowHover {
+	
+	background-image: url(images/treeHover.png);
+	background-repeat: repeat;
+	background-color: transparent !important;
+}
+.soria .dijitTreeIsLast {
+    background: url(images/treeI_half.gif) no-repeat;
+}
+.soria .dijitTreeLabel {
+	font-weight: normal;
+	margin-left: 3px;
+}
+.soria .dijitTreeIsRoot {
+    margin-left: 0;
+    background-image: none;
+}
+.soria .dijitTreeExpando {
+    width: 18px;
+    height: 18px;
+}
+.soria .dijitTreeRow {
+	
+	padding-bottom: 2px;
+}
+.soria .dijitTreeContent {
+    min-height: 18px;
+    min-width: 18px;
+    padding-left:1px;
+}
+.soria .dijitTreeRowSelected .dijitTreeLabel{
+	background:#b8cbec;
+}
+.soria .dijitTreeExpandoOpened {
+	background: url(images/spriteTree.gif) no-repeat -18px top;
+}
+.soria .dijitTreeExpandoClosed {
+	background-image: url(images/spriteTree.gif);
+}
+.soria .dijitTreeExpandoLeaf {
+	background: url(images/spriteTree.gif) no-repeat -36px top;
+}
+.soria .dijitTreeExpandoLoading {
+	background-image: url(images/treeExpand_loading.gif);
+}
+.soria .dijitTreeIcon {
+	width: 16px;
+	height: 16px;
+}
+.soria .dijitFolderOpened {
+	background: url(images/spriteDivIcons.gif) no-repeat -16px top;
+}
+.soria .dijitFolderClosed {
+	background: url(images/spriteDivIcons.gif) no-repeat top left;
+}
+.soria .dijitLeaf {
+	background: url(images/spriteDivIcons.gif) no-repeat -32px top;
+}
+.soria .dijitTreeNode .dojoDndItemBefore,
+.soria .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.soria .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	
+	border-top: 2px solid #369;
+}
+.soria .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	
+	border-bottom: 2px solid #369;
+}
+.soria .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.soria .dijitProgressBarEmpty{
+	
+	background:#fff url(images/progressBarEmpty.png) repeat-x center center;
+	border-color: #8ba0bd;
+}
+.soria .dijitProgressBarTile{
+	
+	background:#f0f0f0 url(images/progressBarFull.png) repeat-x center center;
+}
+.soria .dijitProgressBarFull {
+	border-right:1px solid #8ba0bd;
+}
+.soria .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.soria .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url(images/progressBarAnim.gif) repeat-x center center;
+}
+.soria .dijitTitlePaneTitle {
+	background: #cccccc;
+	background:#fff url(images/titleBar.png) repeat-x top left;
+	border:1px solid #bfbfbf;
+	padding:3px 4px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #6d6d6d;
+}
+.soria .dijitTitlePaneTitleHover {
+	background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
+}
+.soria .dijitTitlePaneTitle * {
+	vertical-align: middle;
+}
+.soria .dijitTitlePane .dijitOpen .dijitArrowNode,
+.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	width:15px;
+	height:15px;
+}
+.soria .dijitTitlePaneTextNode {
+	color: #243C5F;
+}
+.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+}
+.dj_ie6 .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.soria .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -15px top;
+}
+.dj_ie6 .soria .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+}
+.soria .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border: 1px solid #bfbfbf;
+	border-top: 0px;
+}
+.soria .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.soria .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+}
+.soria .dijitCalendarIncrementControl {
+	
+	width:15px;
+	height:15px;
+	background-image: url(images/spriteRoundedIconsSmall.png);
+	background-repeat: no-repeat;
+}
+.dj_ie6 .soria .dijitCalendarIncrementControl {
+	font-size:.1em;
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.soria .dijitA11ySideArrow {
+	display: none;
+}
+.soria .dijitCalendarDecrease {
+	background-position: top left;
+}
+.soria .dijitCalendarIncrease {
+	background-position: -30px top;
+}
+.soria table.dijitCalendarContainer {
+	font-size: 100%;
+	border-spacing: 0;
+	border-collapse: separate;
+	border: 1px solid #b1badf;
+	margin: 0;
+}
+.soria .dijitCalendarMonthContainer th {
+	
+	background:#bed7f0 url(images/titleBar.png) repeat-x top;
+	padding-top:.3em;
+	padding-bottom:.2em;
+	text-align:center;
+}
+.dj_ie6 .soria .dijitCalendarMonthContainer th {
+	padding-top:.2em;
+	padding-bottom:.1em;
+}
+.soria .dijitCalendarDayLabelTemplate {
+	
+	background:#bed7f0;
+	font-weight:normal;
+	padding-top:.15em;
+	padding-bottom:.2em;
+	border-bottom: 1px solid #b1badf;
+	color:#293a4b;
+	text-align:center;
+}
+.soria .dijitCalendarBodyContainer {
+	border-bottom: 1px solid #eeeeee;
+}
+.soria .dijitCalendarMonthLabel {
+	color:#293a4b;
+	font-weight: bold;
+}
+.soria .dijitCalendarDateTemplate {
+	
+	font-size: 0.9em;
+	font-weight: bold;
+	text-align: center;
+	padding: 0.3em 0.3em 0.05em 0.3em;
+	letter-spacing: 1px;
+	background-color: #fff;
+	border:#fff solid 1px !important;
+}
+.dj_ie .soria .dijitCalendarDateTemplate {
+	padding: 0.1em .33em 0.02em .33em;
+}
+.soria .dijitCalendarPreviousMonth,
+.soria .dijitCalendarNextMonth 		{
+	
+	color:#999999;
+	background-color:#fdfdfd !important;
+	border:#fdfdfd solid 1px !important;
+}
+.soria .dijitCalendarCurrentMonth {
+	
+}
+.soria .dijitCalendarDisabledDate {
+	text-decoration:line-through !important;
+}
+.soria .dijitCalendarCurrentDate {
+	
+	text-decoration:underline;
+	font-weight:bold;
+}
+.soria .dijitCalendarSelectedDate {
+	
+	background-color:#b9cbf1 !important;
+	color:black !important;
+	border:#4b5aaa solid 1px !important;
+}
+.soria .dijitCalendarYearContainer {
+	
+	background:white url(images/titleBar.png) repeat-x top;
+}
+.soria .dijitCalendarYearLabel {
+	
+	margin:0;
+	padding:0.4em 0 0.25em 0;
+	text-align:center;
+}
+.soria .dijitCalendarSelectedYear {
+	
+	color:black;
+	padding:0.2em;
+	padding-bottom:0.1em;
+	background-color:#b9cbf1 !important;
+	border:#4b5aaa solid 1px !important;
+}
+.soria .dijitCalendarNextYear,
+.soria .dijitCalendarPreviousYear {
+	
+	color:black !important;
+	font-weight:normal;
+}
+.soria .dijitTimePickerTick,
+.soria .dijitTimePickerMarker {
+	border-color: #b1badf;
+}
+.soria .dijitTimePickerTick {
+	color:white;
+}
+.soria .dijitTimePickerMarker {
+	background:#bed7f0 url(images/titleBar.png) repeat-x top;
+	color:#293a4b;
+	font-weight: bold;
+}
+.soria .dijitTimePickerItemSelected {
+	color: black;
+	background: #b9cbf1 none;
+}
+.soria .dijitTimePickerItemHover {
+	background: #60a1ea none;
+	color:white;
+}
+.soria .dijitTimePickerItemHover,
+.soria .dijitTimePickerItemSelected {
+	position: relative;
+	z-index: 10;
+}
+.soria .dijitTimePickerTick .dijitTimePickerItemInner {
+	font-size:0.4em;
+}
+.soria .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.soria .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	font-size:1em;
+}
+.soria .dijitTimePickerMarkerHover {
+	border-top: 1px solid #94b9ef;
+}
+.soria .dijitTimePickerTickHover,
+.soria .dijitTimePickerTickSelected {
+	margin-top:-0.3em;
+	margin-bottom:-0.3em;
+	border-bottom: none;
+}
+.soria .dijitToolbar {
+	border-bottom: 1px solid #ccc;
+	background:#eaeaea url(images/titleBar.png) repeat-x top left;
+}
+.dj_ie6 .soria .dijitToolbar {
+	height: 10px;
+}
+.soria .dijitToolbar .dijitButtonNode,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	margin: 0px;
+	padding: 0px;
+	border: none;
+	font-size: 12px;
+}
+.soria .dijitToolbar .dijitButton,
+.soria .dijitToolbar .dijitToggleButton,
+.soria .dijitToolbar .dijitDropDownButton,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContents,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	padding: 1px;	
+}
+.soria .dijitToolbar .dijitButtonChecked,
+.soria .dijitToolbar .dijitToggleButtonChecked {
+	background-color:#d8e5f8;
+	border:1px solid #316ac5;
+	padding: 0px;
+}
+.soria .dijitToolbar .dijitButtonCheckedHover,
+.soria .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+	background-color:#9abbea;
+	border:1px solid #316ac5;
+	padding: 0px;
+}
+.soria .dijitToolbar .dijitButtonHover,
+.soria .dijitToolbar .dijitToggleButtonHover,
+.soria .dijitToolbar .dijitDropDownButtonHover,
+.soria .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
+.soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
+	
+	border: 1px solid #316ac5;
+	padding: 0px;
+	background-color:#9abbea;
+}
+.soria .dijitToolbar label {
+	padding: 3px 3px 0 6px;
+}
+.dj_ie .soria .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .soria .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+	
+	border: 1px #777 dotted !important;
+	padding: 0px;
+}
+.soria .dijitDialog {
+	background: #eee;
+	border: 1px solid #cbcbcb;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+	padding: 0px;
+}
+.soria .dijitDialog .dijitDialogTitle {
+	
+	font-weight: bold;
+	padding: 0px 4px;
+	font-size: 0.9em;
+	color: #3243C5F;
+}
+.soria .dijitDialog .dijitDialogPaneContent {
+	background: #ffffff;
+	border-top: 1px solid #b1badf;
+	padding:10px;
+}
+.soria .dijitDialogTitleBar {
+	
+	background: #fafafa url(images/titleBar.png) repeat-x top left;
+	padding: 5px 6px 3px 6px;
+	outline:0; 
+}
+.soria .dijitDialogCloseIcon {
+	
+	background-image: url(images/spriteRoundedIconsSmallBl.png);
+	background-repeat: no-repeat;
+	background-position: -60px 0px;
+	position: absolute;
+	vertical-align: middle;
+	right: 6px;
+	top: 4px;
+	height: 15px;
+	width: 15px;
+}
+.dj_ie6 .soria .dijitDialogCloseIcon {
+	background-image: url(images/spriteRoundedIconsSmallBl.gif);
+}
+.soria .dijitDialogCloseIconHover {
+	background-position: -60px -15px;
+}
+.soria .dijitTooltip,
+.soria .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 10px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 10px;
+}
+.soria .dijitTooltipContainer {
+	
+	background-color: #fff;
+	border:1px solid #cbcbcb;
+	padding:0.45em;
+}
+.soria .dijitTooltipConnector {
+	
+	border:0px;
+	z-index: 2;
+}
+.soria .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 6px;
+}
+.soria .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 6px;
+	background:url(images/tooltipConnectorUp.png) no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .soria .dijitTooltipBelow .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorUp.gif);
+}
+.soria .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 6px;
+	background:url(images/tooltipConnectorDown.png) no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorDown.gif);
+}
+.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorDown.gif);
+}
+.dj_ie6 .soria .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -5px;
+}
+.soria .dijitTooltipLeft {
+	padding-right: 10px;
+}
+.dj_ie6 .soria .dijitTooltipLeft {
+	padding-left: 11px;
+}
+.soria .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background:url(images/tooltipConnectorRight.png) no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .soria .dijitTooltipLeft .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorRight.gif);
+}
+.soria .dijitTooltipRight {
+	padding-left: 10px;
+}
+.soria .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background:url(images/tooltipConnectorLeft.png) no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .soria .dijitTooltipRight .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorLeft.gif);
+}
+.soria .dijitMenu,
+.soria .dijitMenuBar {
+	border: 1px solid #cbcbcb;
+	margin: 0px;
+	padding: 0px;
+	background-color: #fff;
+}
+.soria .dijitBorderContainer .dijitMenuBar {
+	border:1px solid #B1BADF;
+}
+.soria .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0px;
+	color: #243C5F;
+}
+.soria .dijitMenuBar .dijitMenuItem {
+	padding: 4px 5px;
+}
+.soria .dijitMenuPreviousButton, .soria .dijitMenuNextButton {
+	font-style: italic;
+}
+.soria .dijitMenuItem TD {
+	padding:1px;
+}
+.soria .dijitMenuPassive .dijitMenuItemHover,
+.soria .dijitMenuItemSelected {
+	background-color: #d9e6f9; 
+	color: #243C5F;
+}
+.soria .dijitMenuItemIcon {
+	width: 15px;
+	height: 15px;
+}
+.soria .dijitMenuExpand {
+	width:15px;
+	height:15px;
+	background-image: url(images/spriteRoundedIconsSmall.png);
+	background-position: -30px top;
+}
+.dj_ie6 .soria .dijitMenuExpand {
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.soria .dijitMenuSeparator {
+	height: 1px;
+}
+.soria .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #fff; 
+}
+.soria .dijitMenuSeparatorBottom {
+	border-top: 1px solid #8ba0bd;
+}
+.soria .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.soria .dijitCheckedMenuItemIcon {
+	background-image: url(images/spriteCheckbox.gif);
+	background-position: -80px;
+}
+.soria .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
+.soria .dijitToolbar .dijitToolbarSeparator {
+	background: url(../../icons/images/editorIconsEnabled.png); 
+}
+.soria .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled.png); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.soria .dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled.png); 
+}
+.dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled.png); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled.png); 
+}
+.dijitEditorIconSep { background-position: 0px; }
+.dijitEditorIconSave { background-position: -18px; }
+.dijitEditorIconPrint { background-position: -36px; }
+.dijitEditorIconCut { background-position: -54px; }
+.dijitEditorIconCopy { background-position: -72px; }
+.dijitEditorIconPaste { background-position: -90px; }
+.dijitEditorIconDelete { background-position: -108px; }
+.dijitEditorIconCancel { background-position: -126px; }
+.dijitEditorIconUndo { background-position: -144px; }
+.dijitEditorIconRedo { background-position: -162px; }
+.dijitEditorIconSelectAll { background-position: -180px; }
+.dijitEditorIconBold { background-position: -198px; }
+.dijitEditorIconItalic { background-position: -216px; }
+.dijitEditorIconUnderline { background-position: -234px; }
+.dijitEditorIconStrikethrough { background-position: -252px; }
+.dijitEditorIconSuperscript { background-position: -270px; }
+.dijitEditorIconSubscript { background-position: -288px; }
+.dijitEditorIconJustifyCenter { background-position: -306px; }
+.dijitEditorIconJustifyFull { background-position: -324px; }
+.dijitEditorIconJustifyLeft { background-position: -342px; }
+.dijitEditorIconJustifyRight { background-position: -360px; }
+.dijitEditorIconIndent { background-position: -378px; }
+.dijitEditorIconOutdent { background-position: -396px; }
+.dijitEditorIconListBulletIndent { background-position: -414px; }
+.dijitEditorIconListBulletOutdent { background-position: -432px; }
+.dijitEditorIconListNumIndent { background-position: -450px; }
+.dijitEditorIconListNumOutdent { background-position: -468px; }
+.dijitEditorIconTabIndent { background-position: -486px; }
+.dijitEditorIconLeftToRight { background-position: -504px; }
+.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
+.dijitEditorIconBackColor { background-position: -540px; }
+.dijitEditorIconForeColor { background-position: -558px; }
+.dijitEditorIconHiliteColor { background-position: -576px; }
+.dijitEditorIconNewPage { background-position: -594px; }
+.dijitEditorIconInsertImage { background-position: -612px; }
+.dijitEditorIconInsertTable { background-position: -630px; }
+.dijitEditorIconSpace { background-position: -648px; }
+.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
+.dijitEditorIconInsertOrderedList { background-position: -684px; }
+.dijitEditorIconInsertUnorderedList { background-position: -702px; }
+.dijitEditorIconCreateLink { background-position: -720px; }
+.dijitEditorIconUnlink { background-position: -738px; }
+.dijitEditorIconViewSource { background-position: -756px; }
+.dijitEditorIconRemoveFormat { background-position: -774px; }
+.dijitEditorIconFullScreen { background-position: -792px; }
+.dijitEditorIconWikiword { background-position: -810px; }
+ 
+.dijitColorPalette {
+	border:1px solid #cbcbcb;
+	background:#fff;
+	-moz-border-radius: 0px !important;
+}
Index: trunk/web/dojo/dijit/themes/soria/TimePicker_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/TimePicker_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/TimePicker_rtl.css	(revision 9)
@@ -0,0 +1,4 @@
+.dj_ie6-rtl .soria .dijitTimePickerMarkerHover,
+.dj_ie7-rtl .soria .dijitTimePickerMarkerHover {
+        border-top: 0px; 
+}
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripeBottom.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripeBottom.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabStripeBottom.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabStripeBottom.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabStripeBottom.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteArrows.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteArrows.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/validationInputBg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/validationInputBg.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/validationInputBg.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/validationInputBg.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/validationInputBg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFull.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFull.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderFull.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderFull.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderFull.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/warning.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/warning.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/warning.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/warning.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/warning.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/buttonActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/buttonActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/buttonActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/buttonActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/buttonActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorDown.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderThumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderThumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderThumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/treeI_half.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/treeI_half.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/treeI_half.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/treeI_half.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/treeI_half.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorRight.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteArrows.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteArrows.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteArrows.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteArrows.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteArrows.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteTree_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/dndNoMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/dndNoMove.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/dndNoMove.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/dndNoMove.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/dndNoMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledC.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledC.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledC.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledC.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledC.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabRightChecked.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabRightChecked.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabRightChecked.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabRightChecked.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabRightChecked.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/dndNoCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/dndNoCopy.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/dndNoCopy.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/dndNoCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/dndNoCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFullVerticalFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFullVerticalFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderFullVerticalFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderFullVerticalFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderFullVerticalFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH-thumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH-thumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH-thumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH-thumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerH-thumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderEmpty.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderEmpty.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderEmpty.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderEmpty.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderEmpty.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumb.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderThumb.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderThumb.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderThumb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFullFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFullFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderFullFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderFullFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderFullFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabLeftChecked.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabLeftChecked.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabLeftChecked.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabLeftChecked.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabLeftChecked.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/treeI_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/treeI_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/treeI_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/treeI_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/treeI_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/treeExpand_loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/treeExpand_loading.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/treeExpand_loading.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/treeExpand_loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/treeExpand_loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV-thumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV-thumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV-thumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV-thumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/splitContainerSizerV-thumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripe.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripe.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabStripe.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabStripe.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabStripe.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverC.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverC.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverC.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverC.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverC.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRadio.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRadio.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteRadio.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteRadio.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteRadio.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteTree.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteTree.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteTree.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripeLeft.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripeLeft.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabStripeLeft.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabStripeLeft.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabStripeLeft.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFullVertical.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderFullVertical.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderFullVertical.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderFullVertical.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderFullVertical.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/titleBarActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/titleBarActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/titleBarActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/titleBarActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/titleBarActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/treeHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/treeHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/treeHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/treeHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/treeHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabBottomHoverSpriteLR.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRadio.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRadio.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteRadio.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteRadio.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteRadio.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/titleBar.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/titleBar.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/titleBar.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/titleBar.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/titleBar.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteTree.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteTree.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteTree.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteTree.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/progressBarEmpty.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/progressBarEmpty.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/progressBarEmpty.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/progressBarEmpty.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/progressBarEmpty.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveC.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveC.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveC.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveC.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveC.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmallBl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabBottomEnabledSpriteLR.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/progressBarFull.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/progressBarFull.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/progressBarFull.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/progressBarFull.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/progressBarFull.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/preciseSliderThumbFocus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/progressBarAnim.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/progressBarAnim.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/progressBarAnim.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/progressBarAnim.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/progressBarAnim.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteDivIcons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/treeI.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/treeI.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/treeI.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/treeI.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/treeI.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderEmptyVertical.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderEmptyVertical.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderEmptyVertical.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderEmptyVertical.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderEmptyVertical.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/dndMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/dndMove.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/dndMove.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/dndMove.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/dndMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/accordionItemActive.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteRoundedIconsSmall.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabBottomActiveSpriteLR.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/dndCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/dndCopy.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/dndCopy.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/dndCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/dndCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorLeft.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/sliderThumbFocus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/buttonDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/buttonDisabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/buttonDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/buttonDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/buttonDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/treeI_half_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/treeI_half_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/treeI_half_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/treeI_half_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/treeI_half_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tooltipConnectorUp.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripeRight.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabStripeRight.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabStripeRight.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabStripeRight.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabStripeRight.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/spriteCheckbox.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/buttonHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/buttonHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/buttonHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/buttonHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/buttonHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/tabContainerSprite.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/tabContainerSprite.gif
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/tabContainerSprite.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/tabContainerSprite.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/tabContainerSprite.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/validationInputBg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/validationInputBg.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/validationInputBg.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/validationInputBg.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/validationInputBg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/images/buttonEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/soria/images/buttonEnabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/soria/images/buttonEnabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/images/buttonEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/soria/images/buttonEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/soria/Dialog_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Dialog_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Dialog_rtl.css	(revision 9)
@@ -0,0 +1,5 @@
+
+.dijitRtl .soria .dijitDialogTitleBar .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
Index: trunk/web/dojo/dijit/themes/soria/Tree_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Tree_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Tree_rtl.css	(revision 9)
@@ -0,0 +1,18 @@
+
+.dijitRtl .soria .dijitTreeNode,
+.dijitRtl .soria .dijitTreeExpandoLeaf {
+	
+    background-image: none;
+}
+.dijitRtl .soria .dijitTreeContent {
+    padding-left: 0px;
+    padding-right: 1px;
+}
+.dijitRtl .soria .dijitTreeExpandoOpened {
+	
+	background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
+}
+.dijitRtl .soria .dijitTreeExpandoClosed {
+	
+	background-image: url('images/spriteTree_rtl.gif');
+}
Index: trunk/web/dojo/dijit/themes/soria/TitlePane.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/TitlePane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/TitlePane.css	(revision 9)
@@ -0,0 +1,48 @@
+
+.soria .dijitTitlePaneTitle {
+	background: #cccccc;
+	background:#fff url("images/titleBar.png") repeat-x top left;
+	border:1px solid #bfbfbf;
+	padding:3px 4px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #6d6d6d;
+}
+.soria .dijitTitlePaneTitleHover {
+	background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
+}
+.soria .dijitTitlePaneTitle * {
+	vertical-align: middle;
+}
+.soria .dijitTitlePane .dijitOpen .dijitArrowNode,
+.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	width:15px;
+	height:15px;
+}
+.soria .dijitTitlePaneTextNode {
+	color: #243C5F;
+}
+.soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+}
+.dj_ie6 .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.soria .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url('images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+}
+.dj_ie6 .soria .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.soria .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border: 1px solid #bfbfbf;
+	border-top: 0px;
+}
+.soria .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.soria .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+}
Index: trunk/web/dojo/dijit/themes/soria/Menu_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Menu_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Menu_rtl.css	(revision 9)
@@ -0,0 +1,8 @@
+
+.dijitRtl .soria .dijitMenuItem .dijitMenuItemIcon {
+	padding-left: 3px;
+	padding-right: 0px;
+}
+.dijitRtl .soria .dijitMenuItem .dijitMenuExpand {
+	background-position: left top;
+}
Index: trunk/web/dojo/dijit/themes/soria/Editor.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Editor.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Editor.css	(revision 9)
@@ -0,0 +1,13 @@
+.soria .dijitToolbar .dijitToolbarSeparator {
+	background: url('../../icons/images/editorIconsEnabled.png'); 
+}
+.soria .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsEnabled.png'); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.soria .dijitDisabled .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsDisabled.png'); 
+}
Index: trunk/web/dojo/dijit/themes/soria/layout/ContentPane.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/layout/ContentPane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/layout/ContentPane.css	(revision 9)
@@ -0,0 +1,17 @@
+
+.soria .dijitContentPane {
+    padding: 0px;
+}
+.soria .dijitTabContainerTop-dijitContentPane,
+.soria .dijitTabContainerLeft-dijitContentPane,
+.soria .dijitTabContainerBottom-dijitContentPane,
+.soria .dijitTabContainerRight-dijitContentPane,
+.soria .dijitAccordionContainer-dijitContentPane {
+    background-color: #fff;
+    padding: 5px;
+}
+.soria .dijitSplitContainer-dijitContentPane,
+.soria .dijitBorderContainer-dijitContentPane {
+    background-color: #fff;		
+    padding: 5px;
+}
Index: trunk/web/dojo/dijit/themes/soria/layout/SplitContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/layout/SplitContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/layout/SplitContainer.css	(revision 9)
@@ -0,0 +1,27 @@
+
+.soria .dijitSplitContainerSizerH {
+	background:url("../images/splitContainerSizerV.png") repeat-y #cddef4;
+	border:0;
+	border-left:0px solid #436496;
+	border-right:0px solid #436496;
+	width:5px;
+}
+.soria .dijitSplitContainerSizerH .thumb {
+	background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc;
+	left:1px;
+	width:2px;
+	height:19px;
+}
+.soria .dijitSplitContainerSizerV {
+	background:url("../images/splitContainerSizerH.png") repeat-x #cddef4;
+	border:0;
+	border-top:0px solid #436496;
+	border-bottom:0px solid #436496;
+	height:2px;
+}
+.soria .dijitSplitContainerSizerV .thumb {
+	background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
+	top:1px;
+	width:19px;
+	height:5px;
+}
Index: trunk/web/dojo/dijit/themes/soria/layout/BorderContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/layout/BorderContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/layout/BorderContainer.css	(revision 9)
@@ -0,0 +1,59 @@
+
+.soria .dijitBorderContainer {
+	background-color: #e1ebfb;
+	padding: 5px;
+}
+.soria .dijitSplitContainer-child,
+.soria .dijitBorderContainer-child {
+	
+	border: 1px #b1badf solid;
+}
+.soria .dijitBorderContainer-dijitTabContainerTop,
+.soria .dijitBorderContainer-dijitTabContainerBottom,
+.soria .dijitBorderContainer-dijitTabContainerLeft,
+.soria .dijitBorderContainer-dijitTabContainerRight {
+	
+	 border: none;
+}
+.soria .dijitBorderContainer-dijitBorderContainer {
+	
+	border: none;
+	padding: 0px;
+}
+.soria .dijitSplitterH,
+.soria .dijitGutterH {
+	background: #E1EBFB;
+	border:0;
+	border-left:0px solid #d3d3d3;
+	border-right:0px solid #d3d3d3;
+	height:5px;
+}
+.soria .dijitSplitterH .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.soria .dijitSplitterV,
+.soria .dijitGutterV {
+	background: #E1EBFB;
+	border:0;
+	border-top:0px solid #d3d3d3;
+	border-bottom:0px solid #d3d3d3;
+	width:5px;
+}
+.soria .dijitSplitterV .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:19px;
+	left:2px;
+	width:1px;
+}
+.soria .dijitSplitterActive {
+	font-size: 1px;
+	background-image: none;
+	background-color: #aaa;
+	-moz-opacity: 0.6;
+	opacity: 0.6;
+	filter: Alpha(Opacity=60);
+	margin: 0;
+}
Index: trunk/web/dojo/dijit/themes/soria/layout/AccordionContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/layout/AccordionContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/layout/AccordionContainer.css	(revision 9)
@@ -0,0 +1,35 @@
+
+.soria .dijitAccordionContainer {
+	border-color: #b1badf;
+	background-color: #fff;
+}
+.soria .dijitAccordionTitle {
+	background:#fafafa url("../images/titleBar.png") repeat-x top left;
+	border-top: 1px solid #b9bbdd;
+	padding: 5px 4px 6px 8px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #373941;
+}
+.soria .dijitAccordionTitleSelected  {
+	background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
+	font-weight: bold;
+	border-top: 1px solid #b9bbdd;
+	border-bottom: 1px solid #b9bbdd;
+	padding: 5px 4px 5px 8px;
+	color: #243C5F;
+}
+.soria .dijitAccordionArrow {
+	background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -30px top;
+	width:15px;
+	height:15px;
+	margin-top:-1px;
+}
+.soria .dijitAccordionTitleSelected .dijitAccordionArrow {
+	background:url("../images/spriteRoundedIconsSmallBl.gif") no-repeat -15px top;
+	margin-top:-1px;
+}
+.soria .dijitAccordionText {
+	margin-left: 4px;
+	margin-right: 4px;
+}
Index: trunk/web/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+.dijitRtl .soria .dijitAccordionArrow {
+	background-position: 0px top;
+}
+.dijitRtl .soria .dijitAccordionTitleSelected .dijitAccordionArrow {
+	
+	background-position: -15px top;
+}
Index: trunk/web/dojo/dijit/themes/soria/layout/TabContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/layout/TabContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/layout/TabContainer.css	(revision 9)
@@ -0,0 +1,372 @@
+
+ .soria .dijitTabContainer .tabStripRBtn {
+	margin-right: 21px;
+}
+ .soria .dijitTabContainer .tabStripLBtn {
+	margin-left: 21px;
+}
+ .soria .nowrapTabStrip .dijitTab {
+	top: 2px;
+}
+ .soria .dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;
+	bottom: 2px;
+}
+.soria .dijitTabPaneWrapper {
+	background:#fff;
+	border:1px solid #B1BADF;
+	margin: 0;
+	padding-left: 0px;
+}
+.soria .dijitTabInnerDiv {
+	padding:0px 3px 0px 0px;
+	margin: 0 0 0 4px;
+	background: url("../images/tabContainerSprite.gif") no-repeat;
+	background-position: right -400px;
+}
+.soria .dijitTab {
+	line-height:normal;
+	margin:0 2px 0 0;	
+	padding:0px;
+	background: url("../images/tabContainerSprite.gif") no-repeat 0 -300px;
+	color: #243C5F;
+	border-bottom: 1px #B1BADF solid;
+}
+.soria .dijitTabInnerDiv .dijitTabContent {
+	padding:4px 3px 2px 4px;
+	background: url("../images/tabContainerSprite.gif") repeat-x 0 -350px;
+	position: relative;
+}
+.soria .dijitTabListWrapper {
+	z-index: 10;
+}
+.soria .dijitTabHover {
+	color: #243C5F;
+	background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
+}
+.soria .dijitTabHover .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -250px;
+}
+.soria .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabContainerSprite.gif") repeat-x 0 -200px;
+}
+.soria .dijitTabChecked
+{
+	
+	background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
+}
+.soria .dijitTabChecked .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -100px;
+}
+.soria .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabContainerSprite.gif") repeat-x 0 -50px;
+	color: #243C5F !important;
+}
+.soria .dijitTabContainerTabListNested {
+	background: #F0F4FC;
+	background: #D9E9F9;
+	border: none;
+}
+.soria .dijitTabContainerTabListNested .dijitTab {
+	background: none;
+	border: none;
+	top: 0px;	
+}
+.soria .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
+.soria .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+	background: none;
+}
+.soria .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+	text-decoration: underline;
+}
+.soria .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+	text-decoration: underline;
+	font-weight: bold;
+}
+.soria .dijitTabContainerSpacerNested .dijitTabSpacer {
+	
+	height: 0px;
+}
+.soria .dijitTabPaneWrapperNested {
+	border: none;	
+}
+.soria .dijitTabCloseButton {
+	width: 15px;
+	height: 15px;
+	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px top;
+	margin-top: -1px;
+}
+.dj_ie6 .soria .dijitTabCloseButton {
+	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
+}
+.soria .dijitTabCloseButtonHover {
+	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px -15px;
+}
+.dj_ie6 .soria .dijitTabCloseButtonHover {
+	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px -15px;
+}
+.soria .dijitTab .tabLabel {
+	
+	min-height: 15px;
+	display: inline-block;
+}
+.dj_ie6 .soria .dijitTabButtonIcon {
+	
+	height: 18px;
+	width: 1px;
+}
+.soria .dijitTabContainerTop-tabs {
+	border-color: #B1BADF;
+	padding-left: 3px;
+}
+.soria .dijitTabContainerTopNoStrip {
+	padding-top: 3px;
+}
+.soria .dijitTabContainerTop-container {
+	border-top: none;
+}
+.soria .dijitTabContainerTop .dijitTabListWrapper {
+	border-bottom: none;
+}
+.soria .dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;
+}
+.soria .dijitTabContainerTop-tabs .dijitTabChecked {
+	border-bottom-color: #94b4e6;
+}
+.soria .dijitTabContainerTopStrip {
+	border: 1px solid #B1BADF;
+	margin-top: 1px;
+	padding-top: 1px;
+	background: #F0F4FC;
+}
+.soria .dijitTabContainerTopStrip .dijitTabContainerTop-tabs {
+	padding-left: 3px;
+}
+.soria .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.soria .dijitTabContainerBottom-tabs {
+	margin-top: -1px;
+	padding-left: 3px;
+	border-top: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerBottom .dijitTabListWrapper {
+	border-top: none;
+	padding-top: 1px;
+	padding-bottom: 1px;
+	float: left;
+}
+.soria .dijitTabContainerBottom-container {
+	border-bottom: none;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTab {
+	border-bottom: none;
+	border-top: 1px solid #B1BADF;
+	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked {
+	border-top-color:#94b4e6;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
+	padding-top: 3px;
+	padding-bottom: 3px;
+	background: url("../images/tabBottomEnabledC.gif") repeat-x bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover {
+	color: #243C5F;
+	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabBottomHoverC.gif") repeat-x bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked {
+	
+	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom left;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom right;
+}
+.soria .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabBottomActiveC.gif") repeat-x bottom left;
+}
+.soria .dijitTabContainerBottomStrip {
+	padding-bottom: 2px;
+	border: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerBottomStrip {
+	background: #F0F4FC;
+}
+.soria .dijitTabContainerBottom-spacer,
+.soria .dijitTabContainerTop-spacer {
+	height: 2px;
+	border: 1px solid #8ba0bd;
+	background: #94b4e6;
+}
+.soria .dijitTabContainerTop-spacer {
+	border-top: none;
+}
+.soria .dijitTabContainerBottom-spacer {
+	border-bottom: none;
+}
+.soria .dijitTabContainerRight-tabs {
+	height: 100%;
+	border-color: #ccc;
+	padding-top: 3px;
+}
+.soria .dijitTabContainerRight-container {
+	border-right: none;
+}
+.soria .dijitTabContainerRight-tabs .dijitTab {
+	border-bottom: none;
+	border-left: 1px solid #B1BADF;
+	border-bottom: 1px solid #B1BADF !important;
+}
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+	border-bottom: solid #B1BADF 1px;
+	margin-bottom: -1px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabChecked {
+	border-left-color: #94b4e6;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabChecked {
+	background: url("../images/tabRightChecked.gif") no-repeat left top !important;
+}
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie6 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #94b4e6 1px;
+	margin-bottom: -1px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTab {
+	background: url("../images/tabContainerSprite.gif") no-repeat left -350px;
+}
+.soria .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
+	background: url("../images/tabContainerSprite.gif") no-repeat left -200px;
+}
+.soria .dijitTabContainerRightStrip {
+	padding-right: 2px;
+	border: 1px solid #B1BADF;
+	background: #F0F4FC;
+	border-left: none;
+}
+.soria .dijitTabContainerLeft-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+	height: 100%;
+}
+.soria .dijitTabContainerLeft-container {
+	border-left: none;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTab {
+	border-right: 1px solid #B1BADF;
+	border-bottom: 1px solid #B1BADF;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabChecked {
+	border-right: 1px solid #94b4e6;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -350px;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -200px;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	background: url("../images/tabLeftChecked.gif") no-repeat right top;
+}
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	border-bottom: solid #B1BADF 1px;
+	margin-bottom: -1px;
+}
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie6 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv,
+.dj_ie7 .soria .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #94b4e6 1px;
+	margin-bottom: -1px;
+}
+.soria .dijitTabContainerLeftStrip {
+	padding-left: 2px;
+	border: 1px solid #B1BADF;
+	background: #F0F4FC;
+	border-right: none;
+}
+.soria .dijitTabContainerLeft-tabs .dijitTab,
+.soria .dijitTabContainerRight-tabs .dijitTab {
+	margin-right:auto;
+	margin-bottom:2px;	
+}
+.soria .dijitTabContainerLeft-spacer,
+.soria .dijitTabContainerRight-spacer {
+	width: 2px;
+	border: 1px solid #8ba0bd;
+	background: #94b4e6;
+}
+.soria .dijitTabContainerLeft-spacer {
+	border-left: none;
+}
+.soria .dijitTabContainerRight-spacer {
+	border-right: none;
+}
+.soria .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+	border-left: 0px solid #ccc;
+	border-top: 0px solid #ccc;
+	border-right: 0px solid #ccc;
+	padding-top: 0px;
+	padding-left: 0px;
+}
+.soria .dijitTabContainer .tabStripButton {
+	margin-right: 0;
+}
+.soria .dijitTabContainer .tabStripButton-top {
+	margin-top: 1px;
+}
+.soria .tabStripButton .dijitTabContent{
+	padding: 6px 0 5px 0;
+}
+.dj_ie6 .soria .tabStripButton .dijitTabContent,
+.dj_ie7 .soria .tabStripButton .dijitTabContent {
+	padding-top: 7px;
+}
+.soria .tabStrip-disabled .tabStripButton .dijitTabContent {
+	padding: 5px 0 3px 0;
+}
+.dj_ie6 .soria .tabStrip-disabled .tabStripButton .dijitTabContent,
+.dj_ie7 .soria .tabStrip-disabled .tabStripButton .dijitTabContent {
+	padding-top: 6px;
+}
+.soria .dijitTabContainer .tabStripButton-bottom {
+	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
+	border-bottom: medium none;
+	border-top: 1px solid #B1BADF;
+}
+.soria .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
+	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
+}
+.soria .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
+	background: transparent;
+}
+.soria .dijitTabStripIcon {
+	height: 14px;
+	width: 14px;
+	background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top ;
+}
+.dj_ie6 .soria .dijitTabStripIcon {
+	background-image: url(../images/spriteRoundedIconsSmall.gif);
+}
+.soria .dijitTabStripSlideRightIcon {
+	background-position: -30px top;
+}
+.soria .dijitTabStripMenuIcon {
+	background-position: -15px top;
+}
Index: trunk/web/dojo/dijit/themes/soria/layout/TabContainer_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/layout/TabContainer_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/layout/TabContainer_rtl.css	(revision 9)
@@ -0,0 +1,34 @@
+.dijitRtl .soria .dijitTab {
+	margin-right:0;
+	margin-left:2px;		
+}
+.dijitRtl .soria .dijitTabContainer .tabStripButton {
+	margin-left: 0;
+}
+.dijitRtl .soria .dijitTabContainerTopStrip,
+.dijitRtl .soria .dijitTabContainerBottomStrip,
+.dijitRtl .soria .dijitTabContainerTop-tabs,
+.dijitRtl .soria .dijitTabContainerBottom-tabs {
+	padding-left: 0;
+	padding-right: 3px;
+}
+.dijitRtl .soria .dijitTabInnerDiv {
+	padding-left: 3px;
+	padding-right: 4px;
+}
+.dijitRtl .soria .dijitTabPaneWrapper {
+	#zoom: 1;
+}
+.dj_ie-rtl .soria .dijitTabContainerLeft-tabs {
+	margin-left: 0px !important;
+}
+.dj_ie-rtl .soria .dijitTabContainerRight-tabs {
+	margin-right: 0px !important;
+}
+.dijitRtl .soria .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .soria .dijitTabContainerRight-tabs .dijitTab {
+	margin-left:0px;
+}
+.dj_ie-rtl .soria .dijitTab .dijitTabInnerDiv{
+	width : 1%;
+}
Index: trunk/web/dojo/dijit/themes/soria/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Common.css	(revision 9)
@@ -0,0 +1,19 @@
+
+.soria .dojoDndItemBefore {
+	border-top: 2px solid #369;
+}
+.soria .dojoDndItemAfter {
+	border-bottom: 2px solid #369;
+}
+.soria .dojoDndItemOver {
+	cursor:pointer;
+}
+.soria table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.soria .dojoDndAvatar td	{ border: none; }
+.soria .dojoDndAvatar tr	{ border: none; }
+.soria .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
+.soria .dojoDndAvatarItem td { padding: 2px;}
+.soria.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.soria.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
Index: trunk/web/dojo/dijit/themes/soria/ProgressBar.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/ProgressBar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/ProgressBar.css	(revision 9)
@@ -0,0 +1,24 @@
+
+.soria .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.soria .dijitProgressBarEmpty{
+	
+	background:#fff url("images/progressBarEmpty.png") repeat-x center center;
+	border-color: #8ba0bd;
+}
+.soria .dijitProgressBarTile{
+	
+	background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
+}
+.soria .dijitProgressBarFull {
+	border-right:1px solid #8ba0bd;
+}
+.soria .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.soria .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
+}
Index: trunk/web/dojo/dijit/themes/soria/Calendar_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Calendar_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Calendar_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+
+.dijitRtl .soria .dijitCalendarDecrease {
+	background-position: -30px top;
+}
+.dijitRtl .soria .dijitCalendarIncrease {
+	background-position: 0px top;
+}
Index: trunk/web/dojo/dijit/themes/soria/TimePicker.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/TimePicker.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/TimePicker.css	(revision 9)
@@ -0,0 +1,42 @@
+
+.soria .dijitTimePickerTick,
+.soria .dijitTimePickerMarker {
+	border-color: #b1badf;
+}
+.soria .dijitTimePickerTick {
+	color:white;
+}
+.soria .dijitTimePickerMarker {
+	background:#bed7f0 url("images/titleBar.png") repeat-x top;
+	color:#293a4b;
+	font-weight: bold;
+}
+.soria .dijitTimePickerItemSelected {
+	color: black;
+	background: #b9cbf1 none;
+}
+.soria .dijitTimePickerItemHover {
+	background: #60a1ea none;
+	color:white;
+}
+.soria .dijitTimePickerItemHover,
+.soria .dijitTimePickerItemSelected {
+	position: relative;
+	z-index: 10;
+}
+.soria .dijitTimePickerTick .dijitTimePickerItemInner {
+	font-size:0.4em;
+}
+.soria .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.soria .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	font-size:1em;
+}
+.soria .dijitTimePickerMarkerHover {
+	border-top: 1px solid #94b9ef;
+}
+.soria .dijitTimePickerTickHover,
+.soria .dijitTimePickerTickSelected {
+	margin-top:-0.3em;
+	margin-bottom:-0.3em;
+	border-bottom: none;
+}
Index: trunk/web/dojo/dijit/themes/soria/ColorPalette.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/ColorPalette.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/ColorPalette.css	(revision 9)
@@ -0,0 +1,5 @@
+.dijitColorPalette {
+	border:1px solid #cbcbcb;
+	background:#fff;
+	-moz-border-radius: 0px !important;
+}
Index: trunk/web/dojo/dijit/themes/soria/soria_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/soria_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/soria_rtl.css	(revision 9)
@@ -0,0 +1,225 @@
+
+.dijitRtl .dijitPlaceHolder {
+	left: auto;
+	right: 0;
+}
+.dijitMenuItemRtl {
+	text-align: right;
+}
+.dj_iequirks .dijitComboButtonRtl BUTTON {
+	
+	float:left;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitComboBoxRtl .dijitArrowButtonContainer {
+	
+	border-right-width: 1px !important;
+	border-right-style: solid !important;
+	border-left-width: 0px !important;
+	border-left-style: none !important;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
+	border-right: 1px solid black !important;
+	border-left: 0px none black !important;
+}
+.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
+	right: 0;
+	left: auto;
+}
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitArrowButtonContainer {
+	float: left;
+}
+.dijitCalendarRtl .dijitCalendarNextYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarRtl .dijitCalendarPreviousYear {
+	margin:0 0 0 0.55em;
+}
+.dijitSliderRtl .dijitSliderImageHandleV {
+	left:auto;
+}
+.dijitSliderRtl .dijitSliderImageHandleH {
+	left:-50%;
+}
+.dijitSliderRtl .dijitSliderMoveableH {
+	right:auto;
+	left:0;
+}
+.dijitSliderRtl .dijitRuleContainerV {
+	float:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleContainerV {
+	text-align:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelV {
+	text-align:left;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelH {
+	zoom:1;
+}
+.dijitSliderRtl .dijitSliderProgressBarH {
+	
+	float:right;
+	right:0;
+	left:auto;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+	background-position:right;
+	padding-right:25px;
+}
+.dijitTabRtl .dijitTabCloseButton {
+	margin-left: 0px;
+	margin-right: 1em;
+}
+.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
+	width:100%;
+}
+.dijitColorPaletteRtl .dijitColorPaletteUnder {
+	
+	left: auto;
+	right: 0;
+}
+.dijitSelectRtl .dijitButtonContents {
+	text-align: right;
+}
+.dijitRtl .soria .dijitTab {
+	margin-right:0;
+	margin-left:2px;		
+}
+.dijitRtl .soria .dijitTabContainer .tabStripButton {
+	margin-left: 0;
+}
+.dijitRtl .soria .dijitTabContainerTopStrip,
+.dijitRtl .soria .dijitTabContainerBottomStrip,
+.dijitRtl .soria .dijitTabContainerTop-tabs,
+.dijitRtl .soria .dijitTabContainerBottom-tabs {
+	padding-left: 0;
+	padding-right: 3px;
+}
+.dijitRtl .soria .dijitTabInnerDiv {
+	padding-left: 3px;
+	padding-right: 4px;
+}
+.dijitRtl .soria .dijitTabPaneWrapper {
+	#zoom: 1;
+}
+.dj_ie-rtl .soria .dijitTabContainerLeft-tabs {
+	margin-left: 0px !important;
+}
+.dj_ie-rtl .soria .dijitTabContainerRight-tabs {
+	margin-right: 0px !important;
+}
+.dijitRtl .soria .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .soria .dijitTabContainerRight-tabs .dijitTab {
+	margin-left:0px;
+}
+.dj_ie-rtl .soria .dijitTab .dijitTabInnerDiv{
+	width : 1%;
+}
+.dijitRtl .soria .dijitAccordionArrow {
+	background-position: 0px top;
+}
+.dijitRtl .soria .dijitAccordionTitleSelected .dijitAccordionArrow {
+	
+	background-position: -15px top;
+}
+.dijitRtl .soria .dijitSliderProgressBarH,
+.dijitRtl .soria .dijitSliderRemainingBarH,
+.dijitRtl .soria .dijitSliderLeftBumper,
+.dijitRtl .soria .dijitSliderRightBumper,
+.dijitRtl .soria .dijitSliderTopBumper {
+	background-position: top right;
+}
+.dijitRtl .soria .dijitSliderProgressBarV,
+.dijitRtl .soria .dijitSliderRemainingBarV,
+.dijitRtl .soria .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.dijitRtl .soria .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.dijitRtl .soria .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.dijitRtl .soria .dijitSliderIncrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat left top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat left top;
+}
+.dijitRtl .soria .dijitSliderDecrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.dijitRtl .soria .dijitComboBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.dijitRtl .soria .dijitSelect .dijitButtonContents {
+	border-left: none;
+	border-right-width: 1px;
+}
+.dijitRtl .soria .dijitTreeNode,
+.dijitRtl .soria .dijitTreeExpandoLeaf {
+	
+    background-image: none;
+}
+.dijitRtl .soria .dijitTreeContent {
+    padding-left: 0px;
+    padding-right: 1px;
+}
+.dijitRtl .soria .dijitTreeExpandoOpened {
+	
+	background: url(images/spriteTree_rtl.gif) no-repeat -18px top;
+}
+.dijitRtl .soria .dijitTreeExpandoClosed {
+	
+	background-image: url(images/spriteTree_rtl.gif);
+}
+.dijitRtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
+.dj_ie6-rtl .soria .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
+.dijitRtl .soria .dijitCalendarDecrease {
+	background-position: -30px top;
+}
+.dijitRtl .soria .dijitCalendarIncrease {
+	background-position: 0px top;
+}
+.dj_ie6-rtl .soria .dijitTimePickerMarkerHover,
+.dj_ie7-rtl .soria .dijitTimePickerMarkerHover {
+        border-top: 0px; 
+}
+.dijitRtl .soria .dijitDialogTitleBar .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
+.dijitRtl .soria .dijitMenuItem .dijitMenuItemIcon {
+	padding-left: 3px;
+	padding-right: 0px;
+}
+.dijitRtl .soria .dijitMenuItem .dijitMenuExpand {
+	background-position: left top;
+}
+.dijitRtl .soria .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitRtl .soria .dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitToolbarRtl .dijitToolbarSeparator {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
+}
+ 
Index: trunk/web/dojo/dijit/themes/soria/Tree.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Tree.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Tree.css	(revision 9)
@@ -0,0 +1,78 @@
+
+.soria .dijitTreeNode {
+    background : url('images/treeI.gif') no-repeat;
+    background-position : top left;
+    background-repeat : repeat-y;
+    zoom: 1;	
+}
+.soria .dijitTreeRowHover {
+	
+	background-image: url(images/treeHover.png);
+	background-repeat: repeat;
+	background-color: transparent !important;
+}
+.soria .dijitTreeIsLast {
+    background: url('images/treeI_half.gif') no-repeat;
+}
+.soria .dijitTreeLabel {
+	font-weight: normal;
+	margin-left: 3px;
+}
+.soria .dijitTreeIsRoot {
+    margin-left: 0;
+    background-image: none;
+}
+.soria .dijitTreeExpando {
+    width: 18px;
+    height: 18px;
+}
+.soria .dijitTreeRow {
+	
+	padding-bottom: 2px;
+}
+.soria .dijitTreeContent {
+    min-height: 18px;
+    min-width: 18px;
+    padding-left:1px;
+}
+.soria .dijitTreeRowSelected .dijitTreeLabel{
+	background:#b8cbec;
+}
+.soria .dijitTreeExpandoOpened {
+	background: url('images/spriteTree.gif') no-repeat -18px top;
+}
+.soria .dijitTreeExpandoClosed {
+	background-image: url('images/spriteTree.gif');
+}
+.soria .dijitTreeExpandoLeaf {
+	background: url('images/spriteTree.gif') no-repeat -36px top;
+}
+.soria .dijitTreeExpandoLoading {
+	background-image: url('images/treeExpand_loading.gif');
+}
+.soria .dijitTreeIcon {
+	width: 16px;
+	height: 16px;
+}
+.soria .dijitFolderOpened {
+	background: url('images/spriteDivIcons.gif') no-repeat -16px top;
+}
+.soria .dijitFolderClosed {
+	background: url('images/spriteDivIcons.gif') no-repeat top left;
+}
+.soria .dijitLeaf {
+	background: url('images/spriteDivIcons.gif') no-repeat -32px top;
+}
+.soria .dijitTreeNode .dojoDndItemBefore,
+.soria .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.soria .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	
+	border-top: 2px solid #369;
+}
+.soria .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	
+	border-bottom: 2px solid #369;
+}
Index: trunk/web/dojo/dijit/themes/soria/Dialog.css
===================================================================
--- trunk/web/dojo/dijit/themes/soria/Dialog.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/soria/Dialog.css	(revision 9)
@@ -0,0 +1,131 @@
+
+.soria .dijitDialog {
+	background: #eee;
+	border: 1px solid #cbcbcb;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+	padding: 0px;
+}
+.soria .dijitDialog .dijitDialogTitle {
+	
+	font-weight: bold;
+	padding: 0px 4px;
+	font-size: 0.9em;
+	color: #3243C5F;
+}
+.soria .dijitDialog .dijitDialogPaneContent {
+	background: #ffffff;
+	border-top: 1px solid #b1badf;
+	padding:10px;
+}
+.soria .dijitDialogTitleBar {
+	
+	background: #fafafa url("images/titleBar.png") repeat-x top left;
+	padding: 5px 6px 3px 6px;
+	outline:0; 
+}
+.soria .dijitDialogCloseIcon {
+	
+	background-image: url("images/spriteRoundedIconsSmallBl.png");
+	background-repeat: no-repeat;
+	background-position: -60px 0px;
+	position: absolute;
+	vertical-align: middle;
+	right: 6px;
+	top: 4px;
+	height: 15px;
+	width: 15px;
+}
+.dj_ie6 .soria .dijitDialogCloseIcon {
+	background-image: url("images/spriteRoundedIconsSmallBl.gif");
+}
+.soria .dijitDialogCloseIconHover {
+	background-position: -60px -15px;
+}
+.soria .dijitTooltip,
+.soria .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 10px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 10px;
+}
+.soria .dijitTooltipContainer {
+	
+	background-color: #fff;
+	border:1px solid #cbcbcb;
+	padding:0.45em;
+}
+.soria .dijitTooltipConnector {
+	
+	border:0px;
+	z-index: 2;
+}
+.soria .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 6px;
+}
+.soria .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 6px;
+	background:url("images/tooltipConnectorUp.png") no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .soria .dijitTooltipBelow .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorUp.gif");
+}
+.soria .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 6px;
+	background:url("images/tooltipConnectorDown.png") no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie .soria .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie6 .soria .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -5px;
+}
+.soria .dijitTooltipLeft {
+	padding-right: 10px;
+}
+.dj_ie6 .soria .dijitTooltipLeft {
+	padding-left: 11px;
+}
+.soria .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background:url("images/tooltipConnectorRight.png") no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .soria .dijitTooltipLeft .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorRight.gif");
+}
+.soria .dijitTooltipRight {
+	padding-left: 10px;
+}
+.soria .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background:url("images/tooltipConnectorLeft.png") no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .soria .dijitTooltipRight .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorLeft.gif");
+}
Index: trunk/web/dojo/dijit/themes/tundra/Toolbar.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Toolbar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Toolbar.css	(revision 9)
@@ -0,0 +1,64 @@
+.tundra .dijitToolbar {
+	border-bottom: 1px solid #ccc;
+	background:#eaeaea url("images/titleBar.png") repeat-x top left;
+}
+.dj_ie6 .tundra .dijitToolbar {
+	height: 10px;
+}
+.tundra .dijitToolbar .dijitButtonNode,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	margin: 0px;
+	padding: 0px;
+	border: none;
+	font-size: 12px;
+}
+.tundra .dijitToolbar .dijitButton,
+.tundra .dijitToolbar .dijitToggleButton,
+.tundra .dijitToolbar .dijitDropDownButton,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton  {
+	background: none;
+	padding: 1px;
+}
+.tundra .dijitToolbar .dijitButtonChecked,
+.tundra .dijitToolbar .dijitToggleButtonChecked {
+	background-color:#d4dff2;
+	border:1px solid #316ac5;
+	padding: 0px;	
+}
+.tundra .dijitToolbar .dijitButtonCheckedHover,
+.tundra .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+	background-color:#abc1e5;
+	border:1px solid #316ac5;
+	padding: 0px;	
+}
+.tundra .dijitToolbar .dijitButtonHover,
+.tundra .dijitToolbar .dijitToggleButtonHover,
+.tundra .dijitToolbar .dijitDropDownButtonHover,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
+	
+	border: 1px solid #869cbf;
+	padding: 0px;	
+	background-color:#e1e5f0;
+}
+.tundra .dijitToolbar label {
+	padding: 3px 3px 0 6px;
+}
+.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+	
+	border: 1px #555 dotted !important;
+	padding: 0px;
+}
+.tundra .dijitToolbarSeparator {
+	
+	background: url('../../icons/images/editorIconsEnabled.png');
+}
+.tundra .dijitToolbarRtl .dijitToolbarSeparator {
+	
+	background-image: url('../../icons/images/editorIconsDisabled.png');
+}
Index: trunk/web/dojo/dijit/themes/tundra/Menu.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Menu.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Menu.css	(revision 9)
@@ -0,0 +1,61 @@
+.tundra .dijitMenu,
+.tundra .dijitMenuBar {
+	border: 1px solid #7eabcd;
+	margin: 0px;
+	padding: 0px;
+	background-color: #f7f7f7;
+}
+.tundra .dijitBorderContainer .dijitMenuBar {
+	border:1px solid #ccc;
+}
+.tundra .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0;
+}
+.tundra .dijitMenuItem {
+	padding: 4px 5px;
+}
+.tundra .dijitMenuPreviousButton, .tundra .dijitMenuNextButton {
+	font-style: italic;
+}
+.tundra .dijitMenuItem td {
+	padding: 2px;
+}
+.tundra .dijitMenuPassive .dijitMenuItemHover,
+.tundra .dijitMenuItemSelected {
+	background-color: #3559ac;
+	color:#fff;
+}
+.tundra .dijitMenuItemIcon {
+	width: 16px;
+	height: 16px;
+}
+.tundra .dijitMenuExpand {
+	
+	width: 7px;
+	height: 7px;
+	background-image: url('images/spriteArrows.png');
+	background-position: -14px 0px;
+}
+.dj_ie6 .tundra .dijitMenuExpand {
+	background-image: url('images/spriteArrows.gif');
+}
+.tundra .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #9b9b9b;
+}
+.tundra .dijitMenuSeparatorBottom {
+	border-top: 1px solid #e8e8e8;
+}
+.tundra .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.tundra .dijitCheckedMenuItemIcon {
+	background-image: url('images/checkmark.png');
+	background-position: -80px;
+}
+.dj_ie6 .tundra .dijitCheckedMenuItemIcon {
+	background-image: url('images/checkmark.gif');
+}
+.tundra .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/TitlePane_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/TitlePane_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/TitlePane_rtl.css	(revision 9)
@@ -0,0 +1,3 @@
+.tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
+	background-position: -7px 0px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Editor_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Editor_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Editor_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+
+.tundra .dijitEditorRtl .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); 
+}
+.tundra .dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); 
+}
Index: trunk/web/dojo/dijit/themes/tundra/Calendar.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Calendar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Calendar.css	(revision 9)
@@ -0,0 +1,118 @@
+
+.tundra .dijitCalendarIncrementControl {
+	
+	width:15px;
+	height:15px;
+	background-image: url("images/spriteRoundedIconsSmall.png");
+	background-repeat: no-repeat
+}
+.dj_ie6 .tundra .dijitCalendarIncrementControl {
+	font-size:.1em;
+	background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.tundra .dijitA11ySideArrow {
+	display: none;
+}
+.tundra .dijitCalendarDecrease {
+	background-position: top left;
+}
+.tundra .dijitCalendarIncrease {
+	background-position: -30px top;
+}
+.tundra .dijitCalendarContainer {
+	font-size: 100%;
+	border-spacing: 0;
+	border-collapse: separate;
+	border: 1px solid #ccc;
+	margin: 0;
+}
+.tundra .dijitCalendarMonthContainer th {
+	
+	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+	padding-top:.3em;
+	padding-bottom:.2em;
+	text-align:center;
+}
+.dj_ie6 .tundra .dijitCalendarMonthContainer th {
+	padding-top:.2em;
+	padding-bottom:.1em;
+}
+.tundra .dijitCalendarDayLabelTemplate {
+	
+	background:white url("images/calendarDayLabel.png") repeat-x bottom;
+	font-weight:normal;
+	padding-top:.15em;
+	padding-bottom:0em;
+	border-top: 1px solid #eeeeee;
+	color:#293a4b;
+	text-align:center;
+}
+.tundra .dijitCalendarBodyContainer {
+	border-bottom: 1px solid #eeeeee;
+}
+.tundra .dijitCalendarMonthLabel {
+	color:#293a4b;
+	font-weight: bold;
+}
+.tundra .dijitCalendarDateTemplate {
+	
+	font-size: 0.9em;
+	font-weight: bold;
+	text-align: center;
+	padding: 0.3em 0.3em 0.05em 0.3em;
+	letter-spacing: 1px;
+}
+.dj_ie .tundra .dijitCalendarDateTemplate {
+	padding: 0.1em .33em 0.02em .33em;
+}
+.tundra .dijitCalendarPreviousMonth,
+.tundra .dijitCalendarNextMonth 		{
+	
+	color:#999999;
+	background-color:#f8f8f8;
+}
+.tundra .dijitCalendarCurrentMonth {
+	
+	background-color: white;
+}
+.tundra .dijitCalendarCurrentDate {
+	
+	text-decoration:underline;
+	font-weight:bold;
+}
+.tundra .dijitCalendarHoveredDate {
+	background-color: #e2ebf2;
+}
+.tundra .dijitCalendarDisabledDate {
+	text-decoration: line-through;
+	background-color: white;	
+}
+.tundra .dijitCalendarSelectedDate {
+	
+	background-color:#bbc4d0 !important;
+	color:black !important;
+}
+.tundra .dijitCalendarYearContainer {
+	
+	background:white url("images/calendarYearLabel.png") repeat-x bottom;
+	border-top:1px solid #ccc;
+}
+.tundra .dijitCalendarYearLabel {
+	
+	margin:0;
+	padding:0.4em 0 0.25em 0;
+	text-align:center;
+}
+.tundra .dijitCalendarSelectedYear {
+	
+	color:black;
+	padding:0.2em;
+	padding-bottom:0.1em;
+	background-color:#bbc4d0 !important;
+}
+.tundra .dijitCalendarNextYear,
+.tundra .dijitCalendarPreviousYear {
+	
+	color:black !important;
+	font-weight:normal;
+}
Index: trunk/web/dojo/dijit/themes/tundra/form/Select.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/form/Select.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/form/Select.css	(revision 9)
@@ -0,0 +1,47 @@
+.tundra .dijitSelect .dijitButtonNode {
+	padding: 0px;
+}
+.tundra .dijitSelect .dijitButtonNode .dijitArrowButtonInner {
+	margin: 0px 4px 0px 5px;
+}
+.tundra .dijitSelect .dijitButtonContents {
+	padding-top: 1px;
+	background:#fff url("../images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.tundra .dijitSelectHover .dijitButtonContents,
+.tundra .dijitSelectActive .dijitButtonContents,
+.tundra .dijitSelectOpened .dijitButtonContents,
+.tundra .dijitSelectDisabled .dijitButtonContents,
+.tundra .dijitSelectReadOnly .dijitButtonContents{
+	background: transparent none;
+}
+.dj_ie .tundra .dijitSelect .dijitButtonContents {
+	padding-top: 0px;
+}
+.tundra .dijitSelectDisabled .dijitButtonNode {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;
+}
+.dj_ie .tundra .dijitSelectDisabled  .dijitButtonNode * {
+	filter: gray() alpha(opacity=50);
+}
+.tundra .dijitSelectHover .dijitButtonNode {
+	border-color:#a5beda;
+	border-bottom-color:#5c7590;
+	border-right-color:#5c7590;
+	color:#243C5F;
+	background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dijitSelectActive .dijitButtonNode,
+.tundra .dijitSelectOpened .dijitButtonNode {
+	border-color:#366dba;
+	background: #ededed url("../images/buttonActive.png") bottom repeat-x;
+}
+.tundra .dijitSelectMenu td {
+	padding: 0em;
+}
+.tundra .dijitSelectMenu .dijitMenuItemLabel,
+.tundra .dijitSelectMenu .dijitMenuArrowCell {
+	padding: 0.1em 0.2em;
+}
Index: trunk/web/dojo/dijit/themes/tundra/form/Slider.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/form/Slider.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/form/Slider.css	(revision 9)
@@ -0,0 +1,129 @@
+.tundra .dijitSliderProgressBarH {
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.tundra .dijitSliderProgressBarV {
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.tundra .dijitSliderFocused .dijitSliderProgressBarH,
+.tundra .dijitSliderFocused .dijitSliderLeftBumper {
+	background-image:url("../images/sliderFullFocus.png");
+}
+.tundra .dijitSliderFocused .dijitSliderProgressBarV,
+.tundra .dijitSliderFocused .dijitSliderBottomBumper {
+	background-image:url("../images/sliderFullVerticalFocus.png");
+}
+.tundra .dijitSliderRemainingBarV {
+	border-color: #b4b4b4;
+	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
+}
+.tundra .dijitSliderRemainingBarH {
+	border-color: #b4b4b4;
+	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+}
+.tundra .dijitSliderBar {
+	border-style: solid;
+	outline:1px;
+}
+.tundra .dijitSliderFocused .dijitSliderBar {
+	border-color:#888;
+}
+.tundra .dijitSliderImageHandleH {
+	border:0px;
+	width:16px;
+	height:16px;
+	background:url("../images/preciseSliderThumb.png") no-repeat center top;
+}
+.tundra .dijitSliderFocused .dijitSliderImageHandleH {
+	background-image:url("../images/preciseSliderThumbFocus.png");
+	#background-image:url("../images/preciseSliderThumbFocus.gif");
+}
+.dj_ie6 .tundra .dijitSliderImageHandleH {
+	background-image:url("../images/preciseSliderThumb.gif");
+}
+.tundra .dijitSliderLeftBumper {
+	border-left-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.tundra .dijitSliderRightBumper {
+	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+	border-color: #b4b4b4;
+	border-right-width: 1px;
+}
+.tundra .dijitSliderImageHandleV {
+	border:0px;
+	width:16px;
+	height:16px;
+	background:url("../images/sliderThumb.png") no-repeat center center;
+}
+.tundra .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url("../images/sliderThumbFocus.png");
+}
+.dj_ie6 .tundra .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url("../images/sliderThumbFocus.gif");
+}
+.tundra .dijitSliderBottomBumper {
+	border-bottom-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.tundra .dijitSliderTopBumper {
+	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
+	border-color: #b4b4b4;
+	border-top-width: 1px;
+}
+.tundra .dijitSliderDecrementIconH,
+.tundra .dijitSliderDecrementIconV,
+.tundra .dijitSliderIncrementIconH,
+.tundra .dijitSliderIncrementIconV {
+	background-image: url('../images/spriteArrows.png');
+	background-repeat: no-repeat;
+	margin: 5px;
+	height: 7px;
+	width: 7px;
+	font-size: 1px;
+}
+.dj_ie6 .tundra .dijitSliderDecrementIconH,
+.dj_ie6 .tundra .dijitSliderDecrementIconV,
+.dj_ie6 .tundra .dijitSliderIncrementIconH,
+.dj_ie6 .tundra .dijitSliderIncrementIconV {
+	background-image: url('../images/spriteArrows.gif');
+}
+.tundra .dijitSliderDecrementIconH {
+	background-position: -7px 0px;
+}
+.tundra .dijitSliderIncrementIconH {
+	background-position: -14px 0px;
+}
+.tundra .dijitSliderDecrementIconV {
+	background-position: 0px 0px;
+}
+.tundra .dijitSliderIncrementIconV {
+	background-position: -21px 0px;
+}
+.tundra .dijitSliderButtonInner {
+	visibility:hidden;
+}
+.tundra .dijitSliderReadOnly *,
+.tundra .dijitSliderDisabled * {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	color: #bdbdbd;
+}
+.tundra .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.tundra .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position: -35px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.tundra .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position: -42px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.tundra .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position: -28px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.tundra .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position: -49px 0px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/form/Slider_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/form/Slider_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/form/Slider_rtl.css	(revision 9)
@@ -0,0 +1,26 @@
+.tundra .dijitSliderRtl .dijitSliderProgressBarH,
+.tundra .dijitSliderRtl .dijitSliderRemainingBarH,
+.tundra .dijitSliderRtl .dijitSliderLeftBumper,
+.tundra .dijitSliderRtl .dijitSliderRightBumper,
+.tundra .dijitSliderRtl .dijitSliderTopBumper {
+	background-position: top right;
+}
+.tundra .dijitSliderRtl .dijitSliderProgressBarV,
+.tundra .dijitSliderRtl .dijitSliderRemainingBarV,
+.tundra .dijitSliderRtl .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.tundra .dijitSliderRtl .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.tundra .dijitSliderRtl .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.tundra .dijitSliderRtl .dijitSliderIncrementIconH {
+	background-position: -7px 0px;
+}
+.tundra .dijitSliderRtl .dijitSliderDecrementIconH {
+	background-position: -14px 0px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/form/Checkbox.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/form/Checkbox.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/form/Checkbox.css	(revision 9)
@@ -0,0 +1,45 @@
+.tundra .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url('../images/checkmarkNoBorder.png');
+}
+.dj_ie6 .tundra .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url('../images/checkmarkNoBorder.gif');
+}
+.tundra .dijitCheckBox,
+.tundra .dijitCheckBoxIcon			{
+	background-image: url('../images/checkmark.png'); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0 2px 0 0;
+	padding: 0;
+}
+.dj_ie6 .tundra .dijitCheckBox,
+.dj_ie6 .tundra .dijitCheckBoxIcon			{
+	background-image: url('../images/checkmark.gif'); 
+}
+.tundra .dijitCheckBox,
+.tundra .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -16px;
+}
+.tundra .dijitCheckBoxChecked,
+.tundra .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: 0px;
+}
+.tundra .dijitCheckBoxDisabled {
+	
+	background-position: -48px;
+}
+.tundra .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -32px;
+}
+.tundra .dijitCheckBoxHover {
+	
+	background-position: -80px;
+}
+.tundra .dijitCheckBoxCheckedHover {
+	
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/form/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/form/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/form/Common.css	(revision 9)
@@ -0,0 +1,48 @@
+
+.tundra .dijitInputContainer INPUT,
+.tundra .dijitTextBox {
+	margin: 0em 0.1em;
+}
+.tundra .dijitTextArea {
+	padding: 3px;
+}
+.tundra .dijitTextBox {
+	
+	background:#fff url("../images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #b3b3b3;
+}
+.tundra .dijitComboBox .dijitButtonNode {
+	padding: 0 0.2em;
+}
+.tundra .dijitTextBox .dijitButtonNode {
+	
+	border-color: #9b9b9b;
+}
+.tundra .dijitTextBoxFocused {
+	
+	border-color:#406b9b;
+}
+.tundra .dijitTextBoxFocused .dijitButtonNode {
+	border-color:#366dba;
+}
+.tundra .dijitError {
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.tundra .dijitErrorFocused {
+	background-color:#f9f999;
+	background-image:none;
+}
+.tundra .dijitValidationIcon {
+	
+	width: 16px;
+	background: transparent url('../images/warning.png') no-repeat center center;
+}
+.tundra .dijitComboBoxHighlightMatch {
+	background-color:#a5beda;
+}
+.tundra .dijitFocusedLabel {
+	
+	outline: 1px dotted #666666;
+}
Index: trunk/web/dojo/dijit/themes/tundra/form/RadioButton.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/form/RadioButton.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/form/RadioButton.css	(revision 9)
@@ -0,0 +1,44 @@
+
+.tundra .dijitRadio,			
+.tundra .dijitRadioIcon	{		
+	background-image: url('../images/checkmark.png'); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.dj_ie6 .tundra .dijitRadio,
+.dj_ie6 .tundra .dijitRadioIcon	{
+	background-image: url('../images/checkmark.gif'); 
+}
+.tundra .dijitToggleButton .dijitRadioIcon {
+	
+	background-image: url('../images/checkmarkNoBorder.png');
+}
+.dj_ie6 .tundra .dijitToggleButton .dijitRadioIcon {
+	background-image: url('../images/checkmarkNoBorder.gif');
+}
+.tundra .dijitRadio,
+.tundra .dijitRadioIcon {
+	
+	background-position: -112px;
+}
+.tundra .dijitRadioDisabled {
+	
+	background-position: -144px;
+}
+.tundra .dijitRadioHover {
+	
+	background-position: -176px;
+}
+.tundra .dijitRadioChecked,
+.tundra .dijitRadioCheckedHover,
+.tundra .dijitToggleButtonChecked .dijitRadioIcon {
+	
+	background-position: -96px;
+}
+.tundra .dijitRadioCheckedDisabled {
+	
+	background-position: -128px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/form/Button.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/form/Button.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/form/Button.css	(revision 9)
@@ -0,0 +1,118 @@
+
+.tundra .dijitButtonNode {
+	
+	border: 1px solid #c0c0c0;
+	border-bottom: 1px solid #9b9b9b;
+	padding: 0.1em 0.2em 0.2em 0.2em;
+	background: #fff url("../images/buttonEnabled.png") repeat-x bottom left;
+}
+.tundra .dijitButtonText {
+	text-align: center;
+	padding: 0 0.3em;
+}
+.tundra .dijitDisabled .dijitButtonText {
+	color: #7F7F7F;
+}
+.tundra .dijitArrowButton {
+	color: #111;
+}
+.tundra .dijitComboButton .dijitDownArrowButton {
+	padding-right:4px;
+}
+.tundra .dijitTextBoxReadOnly,
+.tundra .dijitTextBoxReadOnly .dijitButtonNode,
+.tundra .dijitButtonDisabled .dijitButtonNode,
+.tundra .dijitToggleButtonDisabled .dijitButtonNode,
+.tundra .dijitDropDownButtonDisabled .dijitButtonNode,
+.tundra .dijitComboButtonDisabled .dijitButtonNode,
+.tundra .dijitTextBoxDisabled,
+.tundra .dijitTextBoxDisabled .dijitButtonNode {
+	
+	border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5;
+	background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;
+}
+.tundra .dijitButtonHover .dijitButtonNode,
+.tundra .dijitButtonNodeHover,
+.tundra .dijitToggleButtonHover .dijitButtonNode,
+.tundra .dijitDropDownButtonHover .dijitButtonNode,
+.tundra .dijitComboButton .dijitButtonContentsHover,
+.tundra .dijitComboButton .dijitDownArrowButtonHover {
+	
+	
+	border-color: #a5beda;
+	border-bottom-color:#5c7590;
+	color:#243C5F;
+	background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dijitDownArrowButtonHover,
+.tundra .dijitUpArrowButtonHover {
+	
+	color:#243C5F;
+	background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dijitUpArrowButtonActive,
+.tundra .dijitDownArrowButtonActive,
+.tundra .dijitButtonActive .dijitButtonNode,
+.tundra .dijitToggleButtonActive .dijitButtonNode,
+.tundra .dijitDropDownButtonActive .dijitButtonNode,
+.tundra .dijitButtonContentsActive,
+.tundra .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+	
+	border-color:#366dba;
+	background: #ededed url("../images/buttonActive.png") bottom repeat-x;
+}
+.tundra .dijitArrowButtonInner {
+	background:url("../images/spriteArrows.png") no-repeat scroll 0px center;
+	width: 7px;
+	height: 7px;
+	margin: 0px 4px 0px 4px;
+}
+.tundra .dijitTextBox .dijitArrowButtonInner {
+	background-position: 0 center;
+}
+.dj_ie6 .tundra .dijitArrowButtonInner {
+	background-image:url("../images/spriteArrows.gif");
+}
+.tundra .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -7px center;
+}
+.tundra .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -14px center;
+}
+.tundra .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -21px center;
+}
+.tundra .dijitDisabled .dijitArrowButtonInner {
+	background-position: -28px center;
+}
+.tundra .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -35px center;
+}
+.tundra .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -42px center;
+}
+.tundra .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -49px center;
+}
+.dj_webkit .tundra .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: -1px; 
+}
+.dj_ie .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
+	margin-top: -2px; 
+}
+.dj_ie8 .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
+	margin-top: -1px; 
+}
+.tundra .dijitSpinnerButtonContainer {
+	width: auto;
+	padding: 0;
+}
+.tundra .dijitSpinner .dijitArrowButton {
+	width: 15px;
+}
+.tundra .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.tundra .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
Index: trunk/web/dojo/dijit/themes/tundra/TimePicker_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/TimePicker_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/TimePicker_rtl.css	(revision 9)
@@ -0,0 +1,4 @@
+ .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,
+.dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {
+        border-top: 0px; 
+}
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonEnabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/buttonEnabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/buttonEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/buttonEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/leaf.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/leaf.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/leaf.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/leaf.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/leaf.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/doubleArrowUp.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/doubleArrowUp.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/doubleArrowUp.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/doubleArrowUp.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/doubleArrowUp.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/i_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/i_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/i_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/i_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/i_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabHover.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabHover.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabHover.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabHover.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabHover.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/radioButtonHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/radioButtonHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/radioButtonHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/loading.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/loading.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH-thumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH-thumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH-thumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH-thumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH-thumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/plusButton.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/plusButton.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/plusButton.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/plusButton.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/plusButton.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/menu.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/menu.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/menu.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/menu.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/menu.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/accordionItemHover.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/accordionItemHover.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/accordionItemHover.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/accordionItemHover.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/accordionItemHover.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonEnabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/radioButtonEnabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/radioButtonEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/radioButtonEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/minusButton.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/minusButton.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/minusButton.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/minusButton.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/minusButton.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarFull.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarFull.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarFull.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarFull.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarFull.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_loading.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_loading.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumbFocus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/preciseSliderThumb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV-thumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV-thumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV-thumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV-thumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV-thumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/comboArrowDown.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/comboArrowDown.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/comboArrowDown.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/comboArrowDown.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/comboArrowDown.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorRight.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/i_half_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/i_half_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/i_half_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/i_half_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/i_half_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/folderClosed.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/folderClosed.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/folderClosed.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/folderClosed.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/folderClosed.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/folderOpened.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/folderOpened.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/folderOpened.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/folderOpened.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/folderOpened.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dndNoMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dndNoMove.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dndNoMove.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dndNoMove.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dndNoMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderEmptyVertical.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderEmptyVertical.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderEmptyVertical.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderEmptyVertical.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderEmptyVertical.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dndMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dndMove.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dndMove.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dndMove.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dndMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/accordionItemActive.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/accordionItemActive.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/accordionItemActive.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/accordionItemActive.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/accordionItemActive.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dndNoCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dndNoCopy.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dndNoCopy.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dndNoCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dndNoCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/no.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/no.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/no.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/no.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/no.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabDisabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFullVertical.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFullVertical.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderFullVertical.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderFullVertical.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderFullVertical.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.psd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.psd
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.psd	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.psd	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim.psd
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dndCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dndCopy.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dndCopy.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dndCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dndCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/titleBarBg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/titleBarBg.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/titleBarBg.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/titleBarBg.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/titleBarBg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/checkmarkNoBorder.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/buttonActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/buttonActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/buttonActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/i.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/i.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/i.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/i.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/i.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/smallArrowDown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/smallArrowDown.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/smallArrowDown.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/smallArrowDown.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/smallArrowDown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorDown.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/buttonHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/buttonHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/buttonHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/calendarMonthLabel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/calendarMonthLabel.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/calendarMonthLabel.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/calendarMonthLabel.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/calendarMonthLabel.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonDisabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/radioButtonDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/radioButtonDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/radioButtonDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerH.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/spriteArrows.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/calendarYearLabel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/calendarYearLabel.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/calendarYearLabel.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/calendarYearLabel.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/calendarYearLabel.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_minus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-1.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-1.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-1.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-1.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-1.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabClose.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabClose.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabClose.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabClose.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabClose.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-2.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-2.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-2.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-3.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-3.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-3.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-3.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-4.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-4.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-4.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-4.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-4.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-5.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-5.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-5.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-5.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-5.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-6.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-6.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-6.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-6.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-6.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/splitContainerSizerV.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-7.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-7.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-7.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-7.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-7.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-8.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-8.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-8.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-8.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-8.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/buttonDisabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/buttonDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/buttonDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/buttonDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/i_half.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/i_half.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/i_half.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/i_half.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/i_half.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-9.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-9.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-9.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-9.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarAnim-9.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/warning.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/warning.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/warning.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/warning.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/warning.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/calendarDayLabel.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/calendarDayLabel.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/calendarDayLabel.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/calendarDayLabel.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/calendarDayLabel.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/circleIcon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/circleIcon.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/circleIcon.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/circleIcon.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/circleIcon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/doubleArrowDown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/doubleArrowDown.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/doubleArrowDown.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/doubleArrowDown.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/doubleArrowDown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabClose.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabClose.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabClose.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabClose.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabClose.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dojoTundraGradientBg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/popupMenuBg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/popupMenuBg.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/popupMenuBg.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/popupMenuBg.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/popupMenuBg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderThumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderThumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderThumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderThumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderThumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_plus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.psd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.psd
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.psd	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.psd	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/dijitProgressBarAnim.psd
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/noX.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/noX.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/noX.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/noX.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/noX.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/radioButtonActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/radioButtonActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/smallArrowUp.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/smallArrowUp.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/smallArrowUp.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/smallArrowUp.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/smallArrowUp.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmark.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmark.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/checkmark.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/checkmark.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/checkmark.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/circleIcon.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/circleIcon.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/circleIcon.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/circleIcon.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/circleIcon.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorUp.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFullVerticalFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFullVerticalFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderFullVerticalFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderFullVerticalFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderFullVerticalFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderEmpty.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderEmpty.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderEmpty.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderEmpty.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderEmpty.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFull.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFull.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderFull.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderFull.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderFull.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFullFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderFullFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderFullFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderFullFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderFullFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/titleBar.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/titleBar.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/titleBar.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/titleBar.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/titleBar.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_leaf.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarEmpty.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/progressBarEmpty.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/progressBarEmpty.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/progressBarEmpty.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/progressBarEmpty.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmark.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/checkmark.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/checkmark.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/checkmark.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/checkmark.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_mius.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_mius.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/treeExpand_mius.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/treeExpand_mius.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/treeExpand_mius.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveDisabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/radioButtonActiveDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tooltipConnectorLeft.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabEnabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabEnabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.gif
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/tabCloseHover.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/sliderThumbFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.png
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/tundra/images/validationInputBg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/tundra/tundra_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/tundra_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/tundra_rtl.css	(revision 9)
@@ -0,0 +1,200 @@
+
+.dijitRtl .dijitPlaceHolder {
+	left: auto;
+	right: 0;
+}
+.dijitMenuItemRtl {
+	text-align: right;
+}
+.dj_iequirks .dijitComboButtonRtl BUTTON {
+	
+	float:left;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitComboBoxRtl .dijitArrowButtonContainer {
+	
+	border-right-width: 1px !important;
+	border-right-style: solid !important;
+	border-left-width: 0px !important;
+	border-left-style: none !important;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
+	border-right: 1px solid black !important;
+	border-left: 0px none black !important;
+}
+.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
+	right: 0;
+	left: auto;
+}
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitArrowButtonContainer {
+	float: left;
+}
+.dijitCalendarRtl .dijitCalendarNextYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarRtl .dijitCalendarPreviousYear {
+	margin:0 0 0 0.55em;
+}
+.dijitSliderRtl .dijitSliderImageHandleV {
+	left:auto;
+}
+.dijitSliderRtl .dijitSliderImageHandleH {
+	left:-50%;
+}
+.dijitSliderRtl .dijitSliderMoveableH {
+	right:auto;
+	left:0;
+}
+.dijitSliderRtl .dijitRuleContainerV {
+	float:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleContainerV {
+	text-align:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelV {
+	text-align:left;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelH {
+	zoom:1;
+}
+.dijitSliderRtl .dijitSliderProgressBarH {
+	
+	float:right;
+	right:0;
+	left:auto;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+	background-position:right;
+	padding-right:25px;
+}
+.dijitTabRtl .dijitTabCloseButton {
+	margin-left: 0px;
+	margin-right: 1em;
+}
+.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
+	width:100%;
+}
+.dijitColorPaletteRtl .dijitColorPaletteUnder {
+	
+	left: auto;
+	right: 0;
+}
+.dijitSelectRtl .dijitButtonContents {
+	text-align: right;
+}
+.tundra .dijitCalendarRtl .dijitCalendarDecrease {
+	background-position: -30px top;
+}
+.tundra .dijitCalendarRtl .dijitCalendarIncrease {
+	background-position: 0px top;
+}
+ .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,
+.dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {
+        border-top: 0px; 
+}
+.tundra .dijitDialogRtl .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
+.tundra .dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.tundra .dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitToolbarRtl .dijitToolbarSeparator {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
+}
+.tundra .dijitMenuItemRtl .dijitMenuExpand {
+	background-position: -7px 0px;
+}
+.tundra .dijitTreeNodeRtl,
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {
+	
+    background-image: none;
+}
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {
+	
+	background-image: url(images/treeExpand_minus_rtl.gif);
+}
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {
+	background-image: url(images/treeExpand_plus_rtl.gif);
+}
+.tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
+	background-position: -7px 0px;
+}
+.tundra .dijitTabRtl {
+	-moz-box-orient:horizontal;
+	text-align: right;
+}
+.tundra .dijitTabRtl .dijitTabInnerDiv {
+	padding:2px 9px 2px 8px;
+}
+.tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {
+	
+	padding-bottom: 3px;
+	padding-top: 1px;
+}
+.tundra .tabStripButtonRtl .dijitTabInnerDiv {
+	padding: 3px 2px 4px 2px;
+}
+.tundra .dijitTabPaneWrapper {
+	#zoom: 1;
+}
+.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
+	margin-left: 1px !important;
+}
+.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
+	margin-right: 1px !important;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTabRtl,
+.tundra .dijitTabContainerRight-tabs .dijitTabRtl {
+	margin-left:0px;
+}
+.dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {
+	
+	width : 0.1% !important;
+}
+.dj_iequirks-rtl .tundra .dijitTabContainerTopNone,
+.dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {
+	
+	border-left: 1px solid #fff;
+	border-right: 1px solid #fff;
+}
+.tundra .dijitSliderRtl .dijitSliderProgressBarH,
+.tundra .dijitSliderRtl .dijitSliderRemainingBarH,
+.tundra .dijitSliderRtl .dijitSliderLeftBumper,
+.tundra .dijitSliderRtl .dijitSliderRightBumper,
+.tundra .dijitSliderRtl .dijitSliderTopBumper {
+	background-position: top right;
+}
+.tundra .dijitSliderRtl .dijitSliderProgressBarV,
+.tundra .dijitSliderRtl .dijitSliderRemainingBarV,
+.tundra .dijitSliderRtl .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.tundra .dijitSliderRtl .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.tundra .dijitSliderRtl .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.tundra .dijitSliderRtl .dijitSliderIncrementIconH {
+	background-position: -7px 0px;
+}
+.tundra .dijitSliderRtl .dijitSliderDecrementIconH {
+	background-position: -14px 0px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Dialog_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Dialog_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Dialog_rtl.css	(revision 9)
@@ -0,0 +1,5 @@
+
+.tundra .dijitDialogRtl .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Tree_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Tree_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Tree_rtl.css	(revision 9)
@@ -0,0 +1,13 @@
+
+.tundra .dijitTreeNodeRtl,
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {
+	
+    background-image: none;
+}
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {
+	
+	background-image: url('images/treeExpand_minus_rtl.gif');
+}
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {
+	background-image: url('images/treeExpand_plus_rtl.gif');
+}
Index: trunk/web/dojo/dijit/themes/tundra/TitlePane.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/TitlePane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/TitlePane.css	(revision 9)
@@ -0,0 +1,34 @@
+.tundra .dijitTitlePaneTitle {
+	background: #cccccc;
+	background:#fff url("images/titleBar.png") repeat-x bottom left;
+	border:1px solid #bfbfbf;
+	padding:3px 4px;
+}
+.tundra .dijitTitlePaneTitleHover  {
+	background: #f8fafd url("images/accordionItemHover.gif") bottom repeat-x;
+}
+.tundra .dijitTitlePane .dijitArrowNode {
+	background-image: url('images/spriteArrows.png');
+	background-repeat: no-repeat;
+	background-position: 0px 0px;
+	height: 7px;
+	width: 7px;
+}
+.dj_ie6 .tundra .dijitTitlePane .dijitArrowNode {
+	background-image: url('images/spriteArrows.gif');
+}
+.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: -14px 0px;
+}
+.tundra .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border:1px solid #bfbfbf;
+	border-top: 0px;
+}
+.tundra .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.tundra .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Menu_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Menu_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Menu_rtl.css	(revision 9)
@@ -0,0 +1,3 @@
+.tundra .dijitMenuItemRtl .dijitMenuExpand {
+	background-position: -7px 0px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Editor.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Editor.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Editor.css	(revision 9)
@@ -0,0 +1,14 @@
+.dijitEditor {
+	border:1px solid #bfbfbf;
+	border-top:0;
+}
+.tundra .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsEnabled.png'); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.tundra .dijitDisabled .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsDisabled.png'); 
+}
Index: trunk/web/dojo/dijit/themes/tundra/layout/AccordionContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/layout/AccordionContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/layout/AccordionContainer.css	(revision 9)
@@ -0,0 +1,20 @@
+
+.tundra .dijitAccordionContainer {
+	border-color: #ccc;
+	background-color: #fff;
+}
+.tundra .dijitAccordionTitle {
+	background:#fafafa url("../images/titleBar.png") repeat-x bottom left;
+	border-top: 1px solid #bfbfbf;
+	padding: 4px 4px 4px 8px;
+}
+.tundra .dijitAccordionTitleHover  {
+	background: #f8fafd url("../images/accordionItemHover.gif") bottom repeat-x;
+}
+.tundra .dijitAccordionTitleSelected  {
+	background: #f9f9f9 url("../images/accordionItemActive.gif") bottom repeat-x;
+	font-weight: bold;
+	border-top: 1px solid #aaaaaa;
+	border-bottom: 1px solid #bfbfbf;
+	padding: 4px 4px 4px 8px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/layout/TabContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/layout/TabContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/layout/TabContainer.css	(revision 9)
@@ -0,0 +1,249 @@
+
+.tundra .dijitTabPaneWrapper {
+	background:#fff;
+	border:1px solid #ccc;
+	margin: 0;
+	padding: 0;
+}
+.tundra .dijitTab {
+	line-height:normal;
+	margin-right:4px;	
+	padding:0px;
+	border:1px solid #ccc;
+	background:#e2e2e2 url("../images/tabEnabled.png") repeat-x;
+}
+.tundra .dijitTabInnerDiv {
+	padding:2px 8px 2px 9px;
+}
+.tundra .dijitTabSpacer {
+	display: none;
+}
+.tundra .dijitTabContainer .tabStripRBtn {
+	margin-right: 20px;
+}
+.tundra .dijitTabContainer .tabStripLBtn {
+	margin-left: 20px;
+}
+.tundra .nowrapTabStrip .dijitTab {
+	top: 2px;
+}
+.tundra .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
+	top: 0px;
+	bottom: 2px;
+}
+.tundra .dijitTabChecked {
+	
+	background-color:#fff;
+	border-color: #ccc;
+	background-image:none;
+}
+.tundra .dijitTabHover {
+	color: #243C5F;
+	border-top-color:#92a0b3;
+	border-left-color:#92a0b3;
+	border-right-color:#92a0b3;
+	border-bottom-color:#92a0b3;
+	background:#e2e2e2 url("../images/tabHover.gif") repeat-x;
+}
+.tundra .dijitTabContainerTop .dijitTabHover {
+	border-bottom-color:#ccc;
+}
+.tundra .dijitTabContainerBottom .dijitTabHover {
+	border-top-color:#ccc;
+}
+.tundra .dijitTabContainerLeft .dijitTabHover {
+	border-right-color:#ccc;
+}
+.tundra .dijitTabContainerRight .dijitTabHover {
+	border-left-color:#ccc;
+}
+.tundra .dijitTabContainer .dijitTabCheckedHover {
+	color: inherit;
+	border:1px solid #ccc;
+	background:#fff;
+}
+.tundra .dijitTab .tabLabel {
+	
+	min-height: 12px;
+	display: inline-block;
+}
+.tundra .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.tundra .dijitTabContainerNested .dijitTabContainerTop-tabs {
+	border-bottom: 1px solid #CCC;
+}
+.tundra .dijitTabContainerTabListNested .dijitTab {
+	background: none;
+	border: none;
+	top: 0px;		
+}
+.tundra .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+}
+.tundra .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+	text-decoration: underline;
+}
+.tundra .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent .tabLabel {
+	text-decoration: underline;
+	font-weight: bold;
+	
+}
+.tundra .dijitTabContainer .dijitTabPaneWrapperNested {
+	border: none;	
+}
+.tundra .dijitTabCloseButton {
+	background: url("../images/tabClose.png") no-repeat right top;
+	width: 12px;
+	height: 12px;
+}
+.dj_ie6 .tundra .dijitTabCloseButton {
+	background-image : url("../images/tabClose.gif");
+}
+.tundra .dijitTabCloseButtonHover {
+	background-image : url("../images/tabCloseHover.png");
+}
+.dj_ie6 .tundra .dijitTabCloseButtonHover {
+	background-image : url("../images/tabCloseHover.gif");
+}
+.tundra .dijitTabContainerTop-tabs {
+	margin-bottom: 0px;
+	border-color: #cccccc;
+	padding-left: 3px;
+	background-position: bottom;
+}
+.tundra .dijitTabContainerTop-tabs .dijitTab {
+	top: 0px;
+	margin-bottom: -1px;
+}
+.tundra .dijitTabContainerTop-container {
+	border-top: none;
+}
+.tundra .dijitTabContainerTop-tabs .dijitTabChecked {
+	border-bottom-color:white;
+}
+.tundra .dijitTabContainerTop-tabs,
+.tundra .dijitTabContainerBottom-tabs {
+	padding-left: 3px;
+	padding-right: 3px;
+}
+.tundra .dijitTabContainerTopStrip {
+	border-top: 1px solid #CCC;
+	border-right: 1px solid #CCC;
+	border-left: 1px solid #CCC;
+	padding-top: 2px;
+	background: #f2f2f2;
+}
+.tundra .dijitTabContainerTopNone {
+	padding-top: 0px;
+}
+.tundra .dijitTabContainerBottom-tabs {
+	margin-top: 0px;
+	border-color: #cccccc;
+	background-position: top;
+	padding-left: 3px;
+}
+.tundra .dijitTabContainerBottom-tabs .dijitTab {
+	bottom: 0px;
+	margin-top: -1px;
+}
+.tundra .dijitTabContainerBottom-container {
+	border-bottom: none;
+}
+.tundra .dijitTabContainerBottom-tabs .dijitTabChecked {
+	border-top-color:white;
+}
+.tundra .dijitTabContainerBottomStrip {
+	padding-bottom: 2px;
+	border: 1px solid #ccc;
+	background: #f2f2f2;
+	border-top: none;
+}
+.tundra .dijitTabContainerRight-tabs {
+	border-color: #ccc;
+	height: 100%;
+	padding-top: 3px;
+}
+.tundra .dijitTabContainerRightStrip {
+	margin-left: -1px;
+}
+.tundra .dijitTabContainerRight-container {
+	border-right: none;
+}
+.tundra .dijitTabContainerRight-tabs .dijitTabChecked {
+	border-left-color:white;
+}
+.tundra .dijitTabContainerRightStrip {
+	padding-right: 2px;
+	border: 1px solid #ccc;
+}
+.tundra .dijitTabContainerRightStrip {
+	background: #f2f2f2;
+}
+.tundra .dijitTabContainerLeft-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+	height: 100%;
+}
+.tundra .dijitTabContainerLeft-container {
+	border-left: none;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTabChecked {
+	border-right-color:white;
+}
+.tundra .dijitTabContainerLeftStrip {
+	padding-left: 2px;
+	border: 1px solid #ccc;
+	background: #f2f2f2;
+	border-right: none;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTab,
+.tundra .dijitTabContainerRight-tabs .dijitTab {
+	margin-right:0px;
+	margin-bottom:4px;	
+}
+.tundra .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+	border-left: 0px solid #ccc;
+	border-top: 0px solid #ccc;
+	border-right: 0px solid #ccc;
+	padding-top: 0px;
+	padding-left: 0px;
+}
+.tundra .dijitTabContainer .tabStripButton {
+	margin-right: 0;
+	padding-top: 2px;
+	z-index: 12;
+}
+.tundra .dijitTabContainerBottom .tabStripButton {
+	padding-top: 2px;
+}
+.tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
+	padding-bottom: 3px;
+	padding-top: 1px;
+}
+.tundra .tabStripButton .dijitTabInnerDiv {
+	padding: 3px 2px 4px 2px;
+}
+.dj_ie6 .tundra .tabStripButton .dijitTabInnerDiv,
+.dj_ie7 .tundra .tabStripButton .dijitTabInnerDiv,
+.dj_opera .tundra .tabStripButton .dijitTabInnerDiv {
+	padding-bottom: 5px;
+}
+.dj_ie6 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
+.dj_ie7 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
+.dj_opera .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
+	padding-bottom: 4px;
+}
+.tundra .dijitTabStripIcon {
+	height: 14px;
+	width: 14px;
+	background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top ;
+}
+.dj_ie6 .tundra .dijitTabStripIcon {
+	background-image: url(../images/spriteRoundedIconsSmall.gif);
+}
+.tundra .dijitTabStripSlideRightIcon {
+	background-position: -30px top;
+}
+.tundra .dijitTabStripMenuIcon {
+	background-position: -15px top;
+}
Index: trunk/web/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css	(revision 9)
@@ -0,0 +1,38 @@
+.tundra .dijitTabRtl {
+	-moz-box-orient:horizontal;
+	text-align: right;
+}
+.tundra .dijitTabRtl .dijitTabInnerDiv {
+	padding:2px 9px 2px 8px;
+}
+.tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {
+	
+	padding-bottom: 3px;
+	padding-top: 1px;
+}
+.tundra .tabStripButtonRtl .dijitTabInnerDiv {
+	padding: 3px 2px 4px 2px;
+}
+.tundra .dijitTabPaneWrapper {
+	#zoom: 1;
+}
+.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
+	margin-left: 1px !important;
+}
+.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
+	margin-right: 1px !important;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTabRtl,
+.tundra .dijitTabContainerRight-tabs .dijitTabRtl {
+	margin-left:0px;
+}
+.dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {
+	
+	width : 0.1% !important;
+}
+.dj_iequirks-rtl .tundra .dijitTabContainerTopNone,
+.dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {
+	
+	border-left: 1px solid #fff;
+	border-right: 1px solid #fff;
+}
Index: trunk/web/dojo/dijit/themes/tundra/layout/ContentPane.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/layout/ContentPane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/layout/ContentPane.css	(revision 9)
@@ -0,0 +1,17 @@
+
+.tundra .dijitContentPane {
+	padding: 0px;
+}
+.tundra .dijitTabContainerTop-dijitContentPane,
+.tundra .dijitTabContainerLeft-dijitContentPane,
+.tundra .dijitTabContainerBottom-dijitContentPane,
+.tundra .dijitTabContainerRight-dijitContentPane,
+.tundra .dijitAccordionContainer-dijitContentPane {
+	background-color: #fff;
+	padding: 5px;
+}
+.tundra .dijitSplitContainer-dijitContentPane,
+.tundra .dijitBorderContainer-dijitContentPane {
+	background-color: #fff;		
+	padding: 5px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/layout/SplitContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/layout/SplitContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/layout/SplitContainer.css	(revision 9)
@@ -0,0 +1,28 @@
+.tundra .dijitSplitContainerSizerH {
+	background:url("../images/splitContainerSizerV.png") repeat-y #fff;
+	border:0;
+	border-left:1px solid #bfbfbf;
+	border-right:1px solid #bfbfbf;
+	width:7px;
+}
+.tundra .dijitSplitContainerSizerH .thumb {
+	background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc;
+	left:1px;
+	width:3px;
+	height:19px;
+	overflow: hidden;
+}
+.tundra .dijitSplitContainerSizerV {
+	background:url("../images/splitContainerSizerH.png") repeat-x #fff;
+	border:0;
+	border-top:1px solid #bfbfbf;
+	border-bottom:1px solid #bfbfbf;
+	height:7px;
+}
+.tundra .dijitSplitContainerSizerV .thumb {
+	background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc;
+	top:1px;
+	width:19px;
+	height:3px;
+	overflow: hidden;
+}
Index: trunk/web/dojo/dijit/themes/tundra/layout/BorderContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/layout/BorderContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/layout/BorderContainer.css	(revision 9)
@@ -0,0 +1,55 @@
+
+.tundra .dijitBorderContainer {
+	background-color: #fcfcfc;
+	padding: 5px;
+}
+.tundra .dijitSplitContainer-child,
+.tundra .dijitBorderContainer-child {
+	
+	border: 1px #ccc solid;
+}
+.tundra .dijitBorderContainer-dijitTabContainerTop,
+.tundra .dijitBorderContainer-dijitTabContainerBottom,
+.tundra .dijitBorderContainer-dijitTabContainerLeft,
+.tundra .dijitBorderContainer-dijitTabContainerRight {
+	
+	 border: none;
+}
+.tundra .dijitBorderContainer-dijitBorderContainer {
+	
+	border: none;
+	padding: 0px;
+}
+.tundra .dijitSplitterH,
+.tundra .dijitGutterH {
+	background:#fcfcfc;
+	border:0;
+	height:5px;
+}
+.tundra .dijitSplitterH .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.tundra .dijitSplitterV,
+.tundra .dijitGutterV {
+	background:#fcfcfc;
+	border:0;
+	width:5px;
+}
+.tundra .dijitSplitterV .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:19px;
+	left:2px;
+	width:1px;
+}
+.tundra .dijitSplitterActive {
+	font-size: 1px;
+	background-image: none;
+	background-color: #aaa;
+	-moz-opacity: 0.6;
+	opacity: 0.6;
+	filter: Alpha(Opacity=60);
+	margin: 0;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Common.css	(revision 9)
@@ -0,0 +1,27 @@
+
+.tundra .dojoDndItemBefore {
+	border-top: 2px solid #369;
+}
+.tundra .dojoDndItemAfter {
+	border-bottom: 2px solid #369;
+}
+.tundra .dojoDndItemOver {
+	cursor:pointer;
+}
+.tundra table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.tundra .dojoDndAvatar td	{ border: none; }
+.tundra .dojoDndAvatar tr	{ border: none; }
+.tundra .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
+.tundra .dojoDndAvatarItem td { padding: 2px;}
+.tundra.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra .dijitContentPaneLoading {
+	background:url('images/loading.gif') no-repeat left center;
+	padding-left:25px;
+}
+.tundra .dijitContentPaneError {
+	background:url('images/warning.png') no-repeat left center;
+	padding-left:25px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/ProgressBar.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/ProgressBar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/ProgressBar.css	(revision 9)
@@ -0,0 +1,23 @@
+.tundra .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.tundra .dijitProgressBarEmpty {
+	
+	background:#fff url("images/progressBarEmpty.png") repeat-x center center;
+	border-color: #a2a2a2 #b8b8b8 #b8b8b8 #a2a2a2;
+}
+.tundra .dijitProgressBarTile {
+	
+	background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
+}
+.tundra .dijitProgressBarFull {
+	border-right:1px solid #b8b8b8;
+}
+.tundra .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.tundra .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Calendar_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Calendar_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Calendar_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+
+.tundra .dijitCalendarRtl .dijitCalendarDecrease {
+	background-position: -30px top;
+}
+.tundra .dijitCalendarRtl .dijitCalendarIncrease {
+	background-position: 0px top;
+}
Index: trunk/web/dojo/dijit/themes/tundra/TimePicker.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/TimePicker.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/TimePicker.css	(revision 9)
@@ -0,0 +1,42 @@
+
+.tundra .dijitTimePickerTick,
+.tundra .dijitTimePickerMarker {
+	border-color: #ccc;
+}
+.tundra .dijitTimePickerTick {
+	color:white;
+}
+.tundra .dijitTimePickerMarker {
+	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+	color:#293a4b;
+	font-weight: bold;
+}
+.tundra .dijitTimePickerItemSelected {
+	color: black;
+	background: #bbc4d0 none;
+}
+.tundra .dijitTimePickerItemHover {
+	background: #60a1ea none;
+	color:white;
+}
+.tundra .dijitTimePickerItemHover,
+.tundra .dijitTimePickerItemSelected {
+	position: relative;
+	z-index: 10;
+}
+.tundra .dijitTimePickerTick .dijitTimePickerItemInner {
+	font-size:0.4em;
+}
+.tundra .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.tundra .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	font-size:1em;
+}
+.tundra .dijitTimePickerMarkerHover {
+	border-top: 1px solid #ccc;
+}
+.tundra .dijitTimePickerTickHover,
+.tundra .dijitTimePickerTickSelected {
+	margin-top:-0.3em;
+	margin-bottom:-0.3em;
+	border-bottom: none;
+}
Index: trunk/web/dojo/dijit/themes/tundra/tundra.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/tundra.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/tundra.css	(revision 9)
@@ -0,0 +1,3437 @@
+
+.dijitReset {
+	
+	margin:0;
+	border:0;
+	padding:0;
+	line-height:normal;
+	font: inherit;
+	color: inherit;
+}
+.dijit_a11y .dijitReset {
+	-moz-appearance: none; 
+}
+.dijitInline {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dijitHidden {
+	
+	display: none !important;
+}
+.dijitVisible {
+	
+	display: block !important;	
+	position: relative;			
+}
+.dijitInputContainer {
+	
+	#zoom: 1;
+	overflow: hidden;
+	float: none !important; 
+	position:relative;
+}
+.dj_ie INPUT.dijitTextBox,
+.dj_ie .dijitTextBox INPUT {
+	font-size: 100%;
+}
+.dijitTextBox .dijitSpinnerButtonContainer,
+.dijitTextBox .dijitArrowButtonContainer,
+.dijitTextBox .dijitValidationContainer {
+	float: right;
+	text-align: center;
+}
+.dijitTextBox INPUT.dijitInputField {
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+}
+.dijitTextBox .dijitValidationContainer {
+	display: none;
+}
+.dijitInlineTable {
+	
+	display:inline-table;
+	display:inline-block;		
+	#zoom: 1; 
+	#display:inline; 
+	box-sizing: content-box; -moz-box-sizing: content-box;
+	border:0;
+	padding:0;
+}
+.dijitTeeny {
+	font-size:1px;
+	line-height:1px;
+}
+.dijitOffScreen {
+	position: absolute;
+	visibility: hidden;
+	left: 50%;
+	top: -10000px;
+}
+.dijitPopup {
+	position: absolute;
+	background-color: transparent;
+	margin: 0;
+	border: 0;
+	padding: 0;
+}
+.dijit_a11y .dijitPopup,
+.dijit_ally .dijitPopup DIV,
+.dijit_a11y .dijitPopup TABLE,
+.dijit_a11y .dijitTooltipContainer {
+	background-color: white !important;
+}
+.dijitPositionOnly {
+	
+	padding: 0 !important;
+	border: 0 !important;
+	background-color: transparent !important;
+	background-image: none !important;
+	height: auto !important;
+	width: auto !important;
+}
+.dijitNonPositionOnly {
+	
+	float: none !important;
+	position: static !important;
+	margin: 0 0 0 0 !important;
+	vertical-align: middle !important;
+}
+.dijitBackgroundIframe {
+	
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	z-index: -1;
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+.dijitDisplayNone {
+	
+	display:none !important;
+}
+.dijitContainer {
+	
+	overflow: hidden;	
+}
+.dijit_a11y * {
+	background-image:none !important;
+}
+.dijit_a11y .dijitIcon,
+.dijit_a11y DIV.dijitArrowButtonInner, 
+.dijit_a11y SPAN.dijitArrowButtonInner,
+.dijit_a11y IMG.dijitArrowButtonInner,
+.dijit_a11y .dijitCalendarIncrementControl {
+	
+	display: none;
+}
+.dijitSpinner DIV.dijitArrowButtonInner {
+	display: block; 
+}
+.dijit_a11y .dijitA11ySideArrow {
+	display: inline !important; 
+	cursor: pointer;
+}
+.dijit_a11y .dijitCalendarDateLabel {
+	padding: 1px;
+}
+.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+	border-style: dotted !important;
+	border-width: 1px;
+	padding: 0px;
+}
+.dijit_a11y .dijitCalendarDateTemplate {
+	padding-bottom: 0.1em !important;	
+}
+.dijit_a11y .dijit * {
+	background:white !important;
+	color:black !important;
+}
+.dijit_a11y .dijitButtonNode {
+	border-color: black!important;
+	border-style: outset!important;
+	border-width: medium!important;
+}
+.dijit_a11y .dijitTextBoxReadOnly .dijitInputField,
+.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitButtonNode * {
+	vertical-align: middle;
+}
+.dijitButtonNode .dijitArrowButtonInner {
+	
+	background: no-repeat center;
+	width: 12px;
+	height: 12px;
+	direction: ltr; 
+}
+.dijitLeft {
+	
+	background-position:left top;
+	background-repeat:no-repeat;
+}
+.dijitStretch {
+	
+	white-space:nowrap;			
+	background-repeat:repeat-x;
+}
+.dijitRight {
+	
+	#display:inline;				
+	background-position:right top;
+	background-repeat:no-repeat;
+}
+.dijitToggleButton,
+.dijitButton,
+.dijitDropDownButton,
+.dijitComboButton {
+	
+	margin: 0.2em;
+}
+.dijitButtonContents {
+	display: block;		
+}
+td.dijitButtonContents {
+	display: table-cell;	
+}
+.dijitButtonNode IMG {
+	
+	vertical-align:middle;
+	
+}
+TABLE.dijitComboButton { 
+	
+	border-collapse: collapse;
+	border:0;
+	padding:0;
+	margin:0;
+}
+.dijitToolbar .dijitComboButton {
+	
+	border-collapse: separate;
+}
+.dijitToolbar .dijitToggleButton,
+.dijitToolbar .dijitButton,
+.dijitToolbar .dijitDropDownButton,
+.dijitToolbar .dijitComboButton {
+	margin: 0;
+}
+.dijitToolbar .dijitButtonContents {
+	
+	padding: 1px 2px;
+}
+.dj_ie .dijitComboButton {
+	
+	margin-bottom: -3px;
+}
+.dj_webkit .dijitToolbar .dijitDropDownButton {
+	padding-left: 0.3em;
+}
+.dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
+	padding:0;
+}
+.dijitButtonNode {
+	
+	border:1px solid gray;
+	margin:0;
+	line-height:normal;
+	vertical-align: middle;
+	#vertical-align: auto;
+	text-align:center;
+	white-space: nowrap;
+}
+.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
+	
+	line-height:inherit;
+}
+.dijitTextBox .dijitButtonNode {
+	border-width: 0;
+}
+.dijitButtonNode,
+.dijitButtonNode * {
+	cursor: pointer;
+}
+.dj_ie .dijitButtonNode {
+	
+	zoom: 1;
+}
+.dj_ie .dijitButtonNode button {
+	
+	overflow: visible;
+}
+DIV.dijitArrowButton {
+	float: right;
+}
+.dijitTextBox {
+	border: solid black 1px;
+	#overflow: hidden; 
+	width: 15em;	
+	vertical-align: middle;
+	#vertical-align: auto;
+}
+.dijitTextBoxReadOnly,
+.dijitTextBoxDisabled {
+	color: gray;
+}
+.dj_webkit .dijitTextBoxDisabled INPUT {
+	color: #eee; 
+}
+.dj_webkit TEXTAREA.dijitTextAreaDisabled {
+	color: #333; 
+}
+.dj_gecko .dijitTextBoxReadOnly INPUT,
+.dj_gecko .dijitTextBoxDisabled INPUT {
+	-moz-user-input: none; 
+}
+.dijitPlaceHolder {
+	
+	color: #AAAAAA;
+	font-style: italic;
+	position: absolute;
+	top: 0;
+	left: 0;
+	#filter: ""; 
+}
+.dijitTimeTextBox {
+	width: 8em;
+}
+.dijitTextBox INPUT:focus {
+	outline: none;	
+}
+.dijitTextBoxFocused {
+	outline: auto 5px -webkit-focus-ring-color;
+}
+.dijitTextBox INPUT {
+	float: left; 
+}
+.dijitInputInner {
+	
+	border:0 !important;
+	vertical-align:middle !important;
+	background-color:transparent !important;
+	width:100% !important;
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+}
+.dijit_a11y .dijitTextBox INPUT {
+	margin: 0 !important;
+}
+.dijitTextBoxError INPUT.dijitValidationInner,
+.dijitTextBox INPUT.dijitArrowButtonInner {
+	
+	text-indent: -1em !important;
+	direction: ltr !important;
+	text-align: left !important;
+	height: auto !important;
+	#text-indent: 0 !important;
+	#letter-spacing: -5em !important;
+	#text-align: right !important;
+}
+.dj_ie .dijitTextBox INPUT,
+.dj_ie INPUT.dijitTextBox {
+	overflow-y: visible; 
+	line-height: normal; 
+}
+.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
+.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
+	line-height: 86%; 
+}
+.dj_ie6 .dijitTextBox INPUT,
+.dj_ie6 INPUT.dijitTextBox,
+.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
+.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
+.dj_iequirks INPUT.dijitTextBox {
+	line-height: 100%; 
+}
+.dijit_a11y INPUT.dijitValidationInner,
+.dijit_a11y INPUT.dijitArrowButtonInner {
+	
+	text-indent: 0 !important;
+	width: 1em !important;
+	#text-align: left !important;
+}
+.dijitTextBoxError .dijitValidationContainer {
+	display: inline;
+	cursor: default;
+}
+.dijitSpinner .dijitSpinnerButtonContainer,
+.dijitComboBox .dijitArrowButtonContainer {
+	
+	border-width: 0 0 0 1px !important; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	
+	border-width: 0;
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	clear: both; 
+}
+.dijit_a11y .dijitTextBox .dijitValidationContainer,
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
+	
+	border: solid black !important;
+	border-width: 0 0 0 1px !important;
+}
+.dj_ie .dijitToolbar .dijitComboBox {
+	
+	vertical-align: middle;
+}
+.dijitTextBox .dijitSpinnerButtonContainer {
+	width: 1em;
+	position: relative !important;
+	overflow: hidden;
+}
+.dijitSpinner .dijitSpinnerButtonInner {
+	width:1em;
+	visibility:hidden !important; 
+	overflow-x:hidden;
+}
+.dijitComboBox .dijitButtonNode,
+.dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 0;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border: 0 none !important;
+}
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
+.dijit_a11y .dijitSpinnerButtonContainer INPUT {
+	width: 1em !important;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
+	margin: 0 auto !important; 
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.3em !important;
+	padding-right: 0.3em !important;
+	margin-left: 0.3em !important;
+	margin-right: 0.3em !important;
+	width: 1.4em !important;
+}
+.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.0em !important; 
+	padding-right: 0.0em !important;
+	width: 1em !important;
+}
+.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0.1em !important;
+	margin-right: 0.1em !important;
+	width: 1em !important;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+	width: 2em !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	
+	padding: 0;
+	position: absolute !important;
+	right: 0;
+	float: none;
+	height: 50%;
+	width: 100%;
+	bottom: auto;
+	left: 0;
+	right: auto;
+}
+.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: auto;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
+	overflow: visible !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
+	top: 50%;
+	border-top-width: 1px !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
+	#bottom: 50%;	
+	top: 0;
+}
+.dijitSpinner .dijitArrowButtonInner {
+	margin: auto;
+	overflow-x: hidden;
+	height: 100% !important;
+}
+.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
+	height: auto !important;
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	-moz-transform: scale(0.5);
+	-moz-transform-origin: center top;
+	-webkit-transform: scale(0.5);
+	-webkit-transform-origin: center top;
+	-o-transform: scale(0.5);
+	-o-transform-origin: center top;
+	transform: scale(0.5);
+	transform-origin: left top;
+	padding-top: 0;
+	padding-bottom: 0;
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	width: 100%;
+}
+.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	zoom: 50%; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
+	overflow: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 100%;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 1em; 
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	visibility: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	vertical-align:top;
+	visibility: visible;
+}
+.dijit_a11y .dijitSpinnerButtonContainer {
+	width: 1em;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 1px 0px 0px 0px;
+	border-style: solid !important;
+}
+.dijitCheckBox,
+.dijitRadio,
+.dijitCheckBoxInput {
+	padding: 0;
+	border: 0;
+	width: 16px;
+	height: 16px;
+	background-position:center center;
+	background-repeat:no-repeat;
+	overflow: hidden;
+}
+.dijitCheckBox INPUT,
+.dijitRadio INPUT {
+	margin: 0;
+	padding: 0;
+	display: block;
+}
+.dijitCheckBoxInput {
+	
+	opacity: 0.01;
+}
+.dj_ie .dijitCheckBoxInput {
+	filter: alpha(opacity=0);
+}
+.dijit_a11y .dijitCheckBox,
+.dijit_a11y .dijitRadio {
+	
+	width: auto !important;
+	height: auto !important;
+}
+.dijit_a11y .dijitCheckBoxInput {
+	opacity: 1;
+	filter: none;
+	width: auto;
+	height: auto;
+}
+.dijitProgressBarEmpty {
+	
+	position:relative;overflow:hidden;
+	border:1px solid black; 	
+	z-index:0;			
+}
+.dijitProgressBarFull {
+	
+	position:absolute;
+	overflow:hidden;
+	z-index:-1;
+	top:0;
+	width:100%;
+}
+.dj_ie6 .dijitProgressBarFull {
+	height:1.6em;
+}
+.dijitProgressBarTile {
+	
+	position:absolute;
+	overflow:hidden;
+	top:0;
+	left:0;
+	bottom:0;
+	right:0;
+	margin:0;
+	padding:0;
+	width:auto;
+	height:auto;
+	background-color:#aaa;
+	background-attachment: fixed;
+}
+.dijit_a11y .dijitProgressBarTile {
+	
+	border-width:2px;
+	border-style:solid;
+	background-color:transparent !important;
+}
+.dj_ie6 .dijitProgressBarTile {
+	
+	position:static;
+	
+	height:1.6em;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarLabel {
+	visibility:hidden;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+}
+.dijitProgressBarIndeterminateHighContrastImage {
+	display:none;
+}
+.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
+	display:block;
+	position:absolute;
+	top:0;
+	bottom:0;
+	margin:0;
+	padding:0;
+	width:100%;
+	height:auto;
+}
+.dijitProgressBarLabel {
+	display:block;
+	position:static;
+	width:100%;
+	text-align:center;
+	background-color:transparent !important;
+}
+.dijitTooltip {
+	position: absolute;
+	z-index: 2000;
+	display: block;
+	
+	left: 50%;
+	top: -10000px;
+	overflow: visible;
+}
+.dijitTooltipContainer {
+	border: solid black 2px;
+	background: #b8b5b5;
+	color: black;
+	font-size: small;
+}
+.dijitTooltipFocusNode {
+	padding: 2px 2px 2px 2px;
+}
+.dijitTooltipConnector {
+	position: absolute;
+}
+.dijit_a11y .dijitTooltipConnector {
+	display: none;	
+}
+.dijitTooltipData {
+	display:none;
+}
+.dijitLayoutContainer {
+	position: relative;
+	display: block;
+	overflow: hidden;
+}
+body .dijitAlignTop,
+body .dijitAlignBottom,
+body .dijitAlignLeft,
+body .dijitAlignRight {
+	position: absolute;
+	overflow: hidden;
+}
+body .dijitAlignClient { position: absolute; }
+.dijitBorderContainer, .dijitBorderContainerNoGutter {
+	position:relative;
+	overflow: hidden;
+}
+.dijitBorderContainerPane,
+.dijitBorderContainerNoGutterPane {
+	position: absolute !important;	
+	z-index: 2;		
+}
+.dijitBorderContainer > .dijitTextArea {
+	
+	resize: none;
+}
+.dijitGutter {
+	
+	position: absolute;
+	font-size: 1px;		
+}
+.dijitSplitter {
+	position: absolute;
+	overflow: hidden;
+	z-index: 10;		
+	background-color: #fff;
+	border-color: gray;
+	border-style: solid;
+	border-width: 0;
+}
+.dj_ie .dijitSplitter {
+	z-index: 1;	
+}
+.dijitSplitterActive {
+	z-index: 11 !important;
+}
+.dijitSplitterCover {
+	position:absolute;
+	z-index:-1;
+	top:0;
+	left:0;
+	width:100%;
+	height:100%;
+}
+.dijitSplitterCoverActive {
+	z-index:3 !important;
+}
+.dj_ie .dijitSplitterCover {
+	background: white;
+	filter: alpha(opacity=0);
+}
+.dijitSplitterH {
+	height: 7px;
+	border-top:1px;
+	border-bottom:1px;
+	cursor: ns-resize;
+}
+.dijitSplitterV {
+	width: 7px;
+	border-left:1px;
+	border-right:1px;
+	cursor: ew-resize;
+}
+.dijitSplitContainer {
+	position: relative;
+	overflow: hidden;
+	display: block;
+}
+.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
+	outline-style:dotted;
+	outline-width: 2px;
+}
+.dijitSplitPane {
+	position: absolute;
+}
+.dijitSplitContainerSizerH,
+.dijitSplitContainerSizerV {
+	position:absolute;
+	font-size: 1px;
+	cursor: move;
+	cursor: w-resize;
+	background-color: ThreeDFace;
+	border: 1px solid;
+	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
+	margin: 0;
+}
+.dijitSplitContainerSizerH .thumb, .dijitSplitterV .dijitSplitterThumb {
+	overflow:hidden;
+	position:absolute;
+	top:49%;
+}
+.dijitSplitContainerSizerV .thumb, .dijitSplitterH .dijitSplitterThumb {
+	position:absolute;
+	left:49%;
+}
+.dijitSplitterShadow,
+.dijitSplitContainerVirtualSizerH,
+.dijitSplitContainerVirtualSizerV {
+	font-size: 1px;
+	background-color: ThreeDShadow;
+	-moz-opacity: 0.5;
+	opacity: 0.5;
+	filter: Alpha(Opacity=50);
+	margin: 0;
+}
+.dj_ie .dijitSplitterV, .dijitSplitContainerVirtualSizerH {
+	cursor: w-resize;
+}
+.dj_ie .dijitSplitterH, .dijitSplitContainerSizerV, .dijitSplitContainerVirtualSizerV {
+	cursor: n-resize;
+}
+.dijit_a11y .dijitSplitterH {
+	border-top:1px solid #d3d3d3 !important;
+	border-bottom:1px solid #d3d3d3 !important;
+}
+.dijit_a11y .dijitSplitterV {
+	border-left:1px solid #d3d3d3 !important;
+	border-right:1px solid #d3d3d3 !important;
+}
+.dijitContentPane {
+	display: block;
+	overflow: auto;	
+}
+.dijitContentPaneSingleChild {
+	
+	overflow: hidden;
+}
+.dijitTitlePane {
+	display: block;
+	overflow: hidden;
+}
+.dijitTitlePaneTitle {
+	cursor: pointer;
+}
+.dijitFixedOpen {
+	
+	cursor: default;
+}
+.dijitTitlePaneTitle * {
+	vertical-align: middle;
+}
+.dijitTitlePane .dijitArrowNodeInner {
+	
+	display: none;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
+	
+	display:inline !important;
+	font-family: monospace;		
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+	
+	display:none;
+}
+.dj_ie6 .dijitTitlePaneContentOuter,
+.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
+	
+	zoom: 1;
+}
+.dijitColorPalette {
+	border: 1px solid #999;
+	background: #fff;
+	position: relative;
+}
+img.dijitColorPaletteUnder {
+	
+	border-style: none;
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+.dijitColorPalette .dijitPaletteTable {
+	
+	padding: 2px 3px 3px 3px;
+	position: relative;
+	overflow: hidden;
+	outline: 0;
+	border-collapse: separate;
+}
+.dj_ie6 .dijitColorPalette .dijitPaletteTable,
+.dj_ie7 .dijitColorPalette .dijitPaletteTable,
+.dj_iequirks .dijitColorPalette .dijitPaletteTable {
+	
+	padding: 0;
+	margin: 2px 3px 3px 3px;
+}
+.dijitColorPalette .dijitPaletteCell {
+	
+	height: 20px;
+	width: 20px;
+	font-size: 1px;
+	vertical-align: middle;
+	text-align: center;
+}
+.dijitColorPalette .dijitPaletteImg {
+	
+	width: 16px;
+	height: 14px;
+	border: 1px solid #999;
+	cursor: default;
+	vertical-align: middle;
+}
+.dj_iequirks .dijitColorPalette .dijitPaletteImg {
+	margin: 1px;	
+}
+.dijitPaletteTable td {
+		padding: 0px;
+}
+.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	
+	border: 1px solid #000;
+}
+.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+	border: 2px solid #000;
+}
+.dijit_a11y .dijitColorPalette .dijitPaletteTable,
+.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
+	
+	background-color: transparent !important;
+}
+.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
+	border: 3px dotted #000;	
+	margin: -1px;
+}
+.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 2px solid #000 !important;
+}
+.dijitAccordionContainer {
+	border:1px solid #b7b7b7;
+	border-top:0 !important;
+}
+.dijitAccordionTitle {
+	cursor: pointer;
+}
+.dijitAccordionTitleSelected {
+	cursor: default;
+}
+.dijitAccordionTitle .arrowTextUp,
+.dijitAccordionTitle .arrowTextDown {
+	display: none;
+	font-size: 0.65em;
+	font-weight: normal !important;
+}
+.dijit_a11y .dijitAccordionTitle .arrowTextUp,
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
+	display: inline;
+}
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
+	display: none;
+}
+.dj_ie6 .dijitAccordionTitle,
+.dj_iequirks .dijitAccordionTitle {
+	
+	zoom: 1;
+}
+.dijitCalendarContainer {
+	width: auto;	
+}
+.dijitCalendarContainer th, .dijitCalendarContainer td {
+	padding: 0;
+}
+.dijitCalendarNextYear {
+	margin:0 0 0 0.55em;
+}
+.dijitCalendarPreviousYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarIncrementControl {
+	vertical-align: middle;
+}
+.dijitCalendarIncrementControl,
+.dijitCalendarDateTemplate,
+.dijitCalendarMonthLabel,
+.dijitCalendarPreviousYear,
+.dijitCalendarNextYear {
+	cursor: pointer;
+}
+.dijitCalendarDisabledDate {
+	color: gray;
+	text-decoration: line-through;
+	cursor: default;
+}
+.dijitSpacer {
+	
+  	position: relative;
+  	height: 1px;
+  	overflow: hidden;
+  	visibility: hidden;
+}
+.dijitMenu {
+	border:1px solid black;
+	background-color:white;
+}
+.dijitMenuTable {
+	border-collapse:collapse;
+	border-width:0;
+	background-color:white;
+}
+.dj_webkit .dijitMenuTable td[colspan="2"]{
+	border-right:hidden;
+}
+.dijitMenuItem {
+	text-align: left;
+	white-space: nowrap;
+	padding:.1em .2em;
+	cursor:pointer;
+}
+.dijitMenuPassive .dijitMenuItemHover,
+.dijitMenuItemSelected {
+	
+	background-color:black;
+	color:white;
+}
+.dijitMenuItemIcon, .dijitMenuExpand {
+	background-repeat: no-repeat;
+}
+.dijitMenuItemDisabled * {
+	
+	opacity:0.5;
+	cursor:default;
+}
+.dj_ie .dijit_a11y .dijitMenuItemDisabled,
+.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
+.dj_ie .dijitMenuItemDisabled *,
+.dj_ie .dijitMenuItemDisabled td {
+	color:gray !important;
+	filter: alpha(opacity=35);
+}
+.dijitMenuItemLabel {
+	position: relative;
+	vertical-align: middle;
+}
+.dijit_a11y .dijitMenuItemSelected {
+	border: 1px dotted black !important;
+}
+.dj_ff3 .dijit_a11y .dijitMenuItem td {
+	padding: none !important;
+	background:none !important;
+}
+.dijit_a11y .dijitMenuItemSelected .dijitMenuItemLabel {
+	border-width: 1px;
+	border-style: solid;
+}
+.dj_ie8 .dijit_a11y .dijitMenuItemLabel {
+	position:static;
+}
+.dijitMenuExpandA11y {
+	display: none;
+}
+.dijit_a11y .dijitMenuExpandA11y {
+	display: inline;
+}
+.dijitMenuSeparator td {
+	border: 0;
+	padding: 0;
+}
+.dijitMenuSeparatorTop {
+	height: 50%;
+	margin: 0;
+	margin-top:3px;
+	font-size: 1px;
+}
+.dijitMenuSeparatorBottom {
+	height: 50%;
+	margin: 0;
+	margin-bottom:3px;
+	font-size: 1px;
+}
+.dijitCheckedMenuItemIconChar {
+	vertical-align: middle;
+	visibility:hidden;
+}
+.dijitCheckedMenuItemChecked .dijitCheckedMenuItemIconChar {
+	visibility: visible;
+}
+.dijit_a11y .dijitCheckedMenuItemIconChar {
+	display:inline !important;
+}
+.dijit_a11y .dijitCheckedMenuItemIcon {
+	display: none;
+}
+.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
+	
+	margin: 0px;
+}
+.dijitStackController .dijitToggleButtonChecked * {
+	cursor: default;	
+}
+.dijitTabContainerNoLayout {
+	width: 100%;	
+}
+.dijitTabContainerBottom-tabs,
+.dijitTabContainerTop-tabs,
+.dijitTabContainerLeft-tabs,
+.dijitTabContainerRight-tabs {
+	overflow: visible !important;  
+}
+.dijitTabContainerBottom-container,
+.dijitTabContainerTop-container,
+.dijitTabContainerLeft-container,
+.dijitTabContainerRight-container {
+	z-index:0;
+	overflow: hidden;
+	border: 1px solid black;
+}
+.nowrapTabStrip {
+	width: 50000px;
+	display: block;
+	position: relative;
+}
+.dijitTabListWrapper {
+	overflow: hidden;
+}
+.dijit_a11y .tabStripButton img {
+	
+	display: none;
+}
+.dijitTabContainerTop-tabs {
+	border-bottom: 1px solid black;
+}
+.dijitTabContainerTop-container {
+	border-top: 0px;
+}
+.dijitTabContainerLeft-tabs {
+	border-right: 1px solid black;
+	float: left;
+}
+.dijitTabContainerLeft-container {
+	border-left: 0px;
+}
+.dijitTabContainerBottom-tabs {
+	border-top: 1px solid black;
+}
+.dijitTabContainerBottom-container {
+	border-bottom: 0px;
+}
+.dijitTabContainerRight-tabs {
+	border-left: 1px solid black;
+	float: left;
+}
+.dijitTabContainerRight-container {
+	border-right: 0px;
+}
+DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
+	cursor: auto;
+}
+.dijitTab {
+	position:relative;
+	cursor:pointer;
+	white-space:nowrap;
+	z-index:3;
+}
+.dijitTab * {
+	
+	vertical-align: middle;
+}
+.dijitTabChecked {
+	cursor: default;	
+}
+.dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;	
+}
+.dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;	
+}
+.dijitTabContainerLeft-tabs .dijitTab {
+	left: 1px;	
+}
+.dijitTabContainerRight-tabs .dijitTab {
+	left: -1px;	
+}
+.dijitTabContainerTop-tabs .dijitTab,
+.dijitTabContainerBottom-tabs .dijitTab {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+}
+.dijitTabInnerDiv {
+	position:relative;
+}
+.tabStripButton {
+	z-index: 12;
+}
+.dijitTabButtonDisabled .tabStripButton {
+	display: none;
+}
+.dijitTabCloseButton {
+	margin-left: 1em;
+}
+.dijitTabCloseText {
+	display:none;
+}
+.dijit_a11y .dijitTabCloseButton {
+	background-image: none !important;
+	width: auto !important;
+	height: auto !important;
+	border: thin dotted;	
+}
+.dijit_a11y .dijitTabCloseButtonHover {
+	border:thin solid;	
+}
+.dijit_a11y .dijitTabCloseText {
+	display: inline;
+}
+.dijit_a11y .dijitTabChecked {
+	
+	border-style:dashed !important;
+}
+.dijit_a11y .dijitTabInnerDiv {
+	border-left:none !important;
+ }
+.dijitTabPane,
+.dijitStackContainer-child,
+.dijitAccordionContainer-child {
+	
+    border: none !important;
+}
+.dijitInlineEditBoxDisplayMode {
+	border: 1px solid transparent;	
+	cursor: text;
+}
+.dijit_a11y .dijitInlineEditBoxDisplayMode,
+.dj_ie6 .dijitInlineEditBoxDisplayMode {
+	
+	border: none;
+}
+.dijitInlineEditBoxDisplayModeHover,
+.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
+.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
+	
+	background-color: #e2ebf2;
+	border: solid 1px black;
+}
+.dijitInlineEditBoxDisplayModeDisabled {
+	cursor: default;
+}
+.dijitTreeIndent {
+	
+	width: 19px;
+}
+.dijitTreeRow, .dijitTreeContent {
+	white-space: nowrap;
+}
+.dijitTreeRow img {
+	
+	vertical-align: middle;
+}
+.dijitTreeContent {
+    cursor: default;
+}
+.dijitExpandoText {
+	display: none;
+}
+.dijit_a11y .dijitExpandoText {
+	display: inline;
+	padding-left: 10px;
+	padding-right: 10px;
+	font-family: monospace;
+	border-style: solid;
+	border-width: thin;
+	cursor: pointer;
+}
+.dijitTreeLabel {
+	margin: 0px 4px;
+}
+.dijitDialog {
+	position: absolute;
+	z-index: 999;
+	overflow: hidden;       
+}
+.dijitDialogTitleBar {
+	cursor: move;
+}
+.dijitDialogFixed .dijitDialogTitleBar {
+	cursor:default;
+}
+.dijitDialogCloseIcon {
+	cursor: pointer;
+}
+.dijitDialogUnderlayWrapper {
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 998;
+	display: none;
+	background: transparent !important;
+}
+.dijitDialogUnderlay {
+	background: #eee;
+	opacity: 0.5;
+}
+.dj_ie .dijitDialogUnderlay {
+	filter: alpha(opacity=50);
+}
+.dijit_a11y .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitDialog {
+	opacity: 1 !important;
+	background-color: white !important;
+}
+.dijitDialog .closeText {
+	display:none;
+	
+	position:absolute;
+}
+.dijit_a11y .dijitDialog .closeText {
+	display:inline;
+}
+.dijitSliderMoveable {
+	z-index:99;
+	position:absolute !important;
+	display:block;
+	vertical-align:middle;
+}
+.dijitSliderMoveableH {
+	right:0;
+}
+.dijitSliderMoveableV {
+	right:50%;
+}
+.dijit_a11y DIV.dijitSliderImageHandle,
+.dijitSliderImageHandle {
+	margin:0;
+	padding:0;
+	position:relative !important;
+	border:8px solid gray;
+	width:0;
+	height:0;
+	cursor: pointer;
+}
+.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
+	font-size: 0;
+}
+.dj_ie7 .dijitSliderImageHandle {
+	overflow: hidden; 
+}
+.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
+	overflow: visible; 
+}
+.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
+	border:4px solid #000;
+	height:8px;
+	width:8px;
+}
+.dijitSliderImageHandleV {
+	top:-8px;
+	right: -50%;
+}
+.dijitSliderImageHandleH {
+	left:50%;
+	top:-5px;
+	vertical-align:top;
+}
+.dijitSliderBar {
+	border-style:solid;
+	border-color:black;
+	cursor: pointer;
+}
+.dijitSliderBarContainerV {
+	position:relative;
+	height:100%;
+	z-index:1;
+}
+.dijitSliderBarContainerH {
+	position:relative;
+	z-index:1;
+}
+.dijitSliderBarH {
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBarV {
+	width:4px;
+	border-width:0 1px;
+}
+.dijitSliderProgressBar {
+	background-color:red;
+	z-index:1;
+}
+.dijitSliderProgressBarV {
+	position:static !important;
+	height:0%;
+	vertical-align:top;
+	text-align:left;
+}
+.dijitSliderProgressBarH {
+	position:absolute !important;
+	width:0%;
+	vertical-align:middle;
+	overflow:visible;
+}
+.dijitSliderRemainingBar {
+	overflow:hidden;
+	background-color:transparent;
+	z-index:1;
+}
+.dijitSliderRemainingBarV {
+	height:100%;
+	text-align:left;
+}
+.dijitSliderRemainingBarH {
+	width:100% !important;
+}
+.dijitSliderBumper {
+	overflow:hidden;
+	z-index:1;
+}
+.dijitSliderBumperV {
+	width:4px;
+	height:8px;
+	border-width:0 1px;
+}
+.dijitSliderBumperH {
+	width:8px;
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBottomBumper,
+.dijitSliderLeftBumper {
+	background-color:red;
+}
+.dijitSliderTopBumper,
+.dijitSliderRightBumper {
+	background-color:transparent;
+}
+.dijitSliderDecoration {
+	text-align:center;
+}
+.dijitSliderV TD {
+	position: relative; 
+}
+.dijitSliderDecorationH {
+	width: 100%;
+}
+.dijitSliderDecorationV {
+	height: 100%;
+}
+.dijitSliderButton {
+	font-family:monospace;
+	margin:0;
+	padding:0;
+	display:block;
+}
+.dijit_a11y .dijitSliderButtonInner {
+	visibility:visible !important;
+}
+.dijitSliderButtonContainer {
+	text-align:center;
+	height:0;	
+}
+.dijitSliderButtonContainer * {
+	cursor: pointer;
+}
+.dijitSlider .dijitButtonNode {
+	padding:0;
+	display:block;
+}
+.dijitRuleContainer {
+	position:relative;
+	overflow:visible;
+}
+.dijitRuleContainerV {
+	height:100%;
+	line-height:0;
+	float:left;
+	text-align:left;
+}
+.dj_opera .dijitRuleContainerV {
+	line-height:2%;
+}
+.dj_ie .dijitRuleContainerV {
+	line-height:normal;
+}
+.dj_gecko .dijitRuleContainerV {
+	margin:0 0 1px 0; 
+}
+.dijitRuleMark {
+	position:absolute;
+	border:1px solid black;
+	line-height:0;
+	height:100%;
+}
+.dijitRuleMarkH {
+	width:0;
+	border-top-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+}
+.dijitRuleLabelContainer {
+	position:absolute;
+}
+.dijitRuleLabelContainerH {
+	text-align:center;
+	display:inline-block;
+}
+.dijitRuleLabelH {
+	position:relative;
+	left:-50%;
+}
+.dijitRuleLabelV {
+	
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+.dijitRuleMarkV {
+	height:0;
+	border-right-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+	width:100%;
+	left:0;
+}
+.dj_ie .dijitRuleLabelContainerV {
+	margin-top:-.55em;
+}
+.dijit_a11y .dijitSliderReadOnly,
+.dijit_a11y .dijitSliderDisabled {
+	opacity:0.6;
+}
+.dj_ie .dijit_a11y .dijitSliderReadOnly .dijitSliderBar,
+.dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
+	filter: alpha(opacity=40);
+}
+.dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
+	font-family: monospace; 
+	font-size: 1em;
+	line-height: 1em;
+	height: auto;
+	width: auto;
+	margin: 0px 4px;
+}
+.dijit_a11y .dijitButtonContents .dijitButtonText,
+.dijit_a11y .dijitTab .tabLabel {
+	display: inline !important;
+}
+.dijitTextArea {
+	width:100%;
+	overflow-y: auto;	
+}
+.dijitTextArea[cols] {
+	width:auto; 
+}
+.dj_ie .dijitTextAreaCols {
+	width:auto;
+}
+.dijitToolbarSeparator {
+	height: 18px;
+	width: 5px;
+	padding: 0 1px;
+	margin: 0;
+}
+.dijitIEFixedToolbar {
+	position:absolute;
+	
+	top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.dijitEditor {
+	display: block;	
+}
+.dijitEditorDisabled,
+.dijitEditorReadOnly {
+	color: gray;
+}
+.dijitTimePickerItemInner {
+	text-align:center;
+	border:0;
+	padding:2px 8px 2px 8px;
+}
+.dijitTimePickerTick,
+.dijitTimePickerMarker {
+	border-bottom:1px solid gray;
+}
+.dijitTimePicker .dijitDownArrowButton {
+	border-top: none !important;
+}
+.dijitTimePickerTick {
+	color:#CCC;
+}
+.dijitTimePickerMarker {
+	color:black;
+	background-color:#CCC;
+}
+.dijitTimePickerItemSelected {
+	font-weight:bold;
+	color:#333;
+	background-color:#b7cdee;
+}
+.dijitTimePickerItemHover {
+	background-color:gray;
+	color:white;
+	cursor:pointer;
+}
+.dijit_a11y .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	border: solid 4px black;
+}
+.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
+	border: dashed 4px black;
+}
+.dijitToggleButtonIconChar {
+	
+	display:none !important;
+}
+.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
+	display:inline !important;
+	visibility:hidden;
+}
+.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
+	font-family: "Arial Unicode MS";	
+}
+.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
+	display: inline !important; 
+	visibility:visible !important;
+}
+.dijitArrowButtonChar {
+        display:none !important;
+}
+.dijit_a11y .dijitArrowButtonChar {
+        display:inline !important;
+}
+.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
+.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
+	display:none !important;
+}
+.dijitSelect {
+	margin: 0.2em;
+	border-collapse: collapse;
+}
+.dj_ie .dijitSelect,
+.dj_ie7 .dijitSelect,
+.dj_iequirks .dijitSelect {
+	vertical-align: middle; 
+}
+.dj_ie8 .dijitSelect .dijitButtonText {
+	vertical-align: top;
+}
+.dijitToolbar .dijitSelect {
+	margin: 0;
+}
+.dj_webkit .dijitToolbar .dijitSelect {
+	padding-left: 0.3em;
+}
+.dijit_a11y .dijitSelectDisabled .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitSelect .dijitButtonContents {
+	padding: 0px;
+	background: transparent none;
+	white-space: nowrap;
+	text-align: left;
+}
+.dijitSelectFixedWidth .dijitButtonContents {
+	width: 100%;
+}
+.dijitSelectMenu .dijitMenuItemIcon {
+	
+	display:none;
+}
+.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
+.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
+	
+	position: static;
+}
+.dijitSelectLabel *
+{
+	vertical-align: baseline;
+}
+.dijitSelectSelectedOption * {
+	font-weight: bold;
+}
+.dijitSelectMenu {
+	border-width: 1px;
+}
+.dijitSelectMenu .dijitMenuTable {
+	margin: 0px;
+	background-color: transparent;
+}
+.dijitForceStatic {
+	position: static !important;
+}
+.dijitReadOnly *,
+.dijitDisabled *,
+.dijitReadOnly,
+.dijitDisabled {
+	
+	cursor: default;
+}
+.dijitIconSave,
+.dijitIconPrint,
+.dijitIconCut,
+.dijitIconCopy,
+.dijitIconClear,
+.dijitIconDelete,
+.dijitIconUndo,
+.dijitIconEdit,
+.dijitIconNewTask,
+.dijitIconEditTask,
+.dijitIconEditProperty,
+.dijitIconTask,
+.dijitIconFilter,
+.dijitIconConfigure,
+.dijitIconSearch,
+.dijitIconApplication,
+.dijitIconBookmark,
+.dijitIconChart,
+.dijitIconConnector,
+.dijitIconDatabase,
+.dijitIconDocuments,
+.dijitIconMail,
+.dijitLeaf,
+.dijitIconFile,
+.dijitIconFunction,
+.dijitIconKey,
+.dijitIconPackage,
+.dijitIconSample,
+.dijitIconTable,
+.dijitIconUsers,
+.dijitFolderClosed,
+.dijitIconFolderClosed,
+.dijitFolderOpened,
+.dijitIconFolderOpen,
+.dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitIconSave,
+.dj_ie6 .dijitIconPrint,
+.dj_ie6 .dijitIconCut,
+.dj_ie6 .dijitIconCopy,
+.dj_ie6 .dijitIconClear,
+.dj_ie6 .dijitIconDelete,
+.dj_ie6 .dijitIconUndo,
+.dj_ie6 .dijitIconEdit,
+.dj_ie6 .dijitIconNewTask,
+.dj_ie6 .dijitIconEditTask,
+.dj_ie6 .dijitIconEditProperty,
+.dj_ie6 .dijitIconTask,
+.dj_ie6 .dijitIconFilter,
+.dj_ie6 .dijitIconConfigure,
+.dj_ie6 .dijitIconSearch,
+.dj_ie6 .dijitIconApplication,
+.dj_ie6 .dijitIconBookmark,
+.dj_ie6 .dijitIconChart,
+.dj_ie6 .dijitIconConnector,
+.dj_ie6 .dijitIconDatabase,
+.dj_ie6 .dijitIconDocuments,
+.dj_ie6 .dijitIconMail,
+.dj_ie6 .dijitLeaf,
+.dj_ie6 .dijitIconFile,
+.dj_ie6 .dijitIconFunction,
+.dj_ie6 .dijitIconKey,
+.dj_ie6 .dijitIconPackage,
+.dj_ie6 .dijitIconSample,
+.dj_ie6 .dijitIconTable,
+.dj_ie6 .dijitIconUsers,
+.dj_ie6 .dijitFolderClosed,
+.dj_ie6 .dijitIconFolderClosed,
+.dj_ie6 .dijitFolderOpened,
+.dj_ie6 .dijitIconFolderOpen,
+.dj_ie6 .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
+}
+.dijitDisabled .dijitIconSave,
+.dijitDisabled .dijitIconPrint,
+.dijitDisabled .dijitIconCut,
+.dijitDisabled .dijitIconCopy,
+.dijitDisabled .dijitIconClear,
+.dijitDisabled .dijitIconDelete,
+.dijitDisabled .dijitIconUndo,
+.dijitDisabled .dijitIconEdit,
+.dijitDisabled .dijitIconNewTask,
+.dijitDisabled .dijitIconEditTask,
+.dijitDisabled .dijitIconEditProperty,
+.dijitDisabled .dijitIconTask,
+.dijitDisabled .dijitIconFilter,
+.dijitDisabled .dijitIconConfigure,
+.dijitDisabled .dijitIconSearch,
+.dijitDisabled .dijitIconApplication,
+.dijitDisabled .dijitIconBookmark,
+.dijitDisabled .dijitIconChart,
+.dijitDisabled .dijitIconConnector,
+.dijitDisabled .dijitIconDatabase,
+.dijitDisabled .dijitIconDocuments,
+.dijitDisabled .dijitIconMail,
+.dijitDisabled .dijitLeaf,
+.dijitDisabled .dijitIconFile,
+.dijitDisabled .dijitIconFunction,
+.dijitDisabled .dijitIconKey,
+.dijitDisabled .dijitIconPackage,
+.dijitDisabled .dijitIconSample,
+.dijitDisabled .dijitIconTable,
+.dijitDisabled .dijitIconUsers,
+.dijitDisabled .dijitFolderClosed,
+.dijitDisabled .dijitIconFolderClosed,
+.dijitDisabled .dijitFolderOpened,
+.dijitDisabled .dijitIconFolderOpen,
+.dijitDisabled .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
+}
+.dijitIconSave { background-position: 0px; }
+.dijitIconPrint { background-position: -16px; }
+.dijitIconCut { background-position: -32px; }
+.dijitIconCopy { background-position: -48px; }
+.dijitIconClear { background-position: -64px; }
+.dijitIconDelete { background-position: -80px; }
+.dijitIconUndo { background-position: -96px; }
+.dijitIconEdit { background-position: -112px; }
+.dijitIconNewTask { background-position: -128px; }
+.dijitIconEditTask { background-position: -144px; }
+.dijitIconEditProperty { background-position: -166px; }
+.dijitIconTask { background-position: -176px; }
+.dijitIconFilter { background-position: -192px; }
+.dijitIconConfigure { background-position: -208px; }
+.dijitIconSearch { background-position: -224px; }
+.dijitIconError { background-position: -496px; } 
+.dijitIconApplication { background-position: -240px; }
+.dijitIconBookmark { background-position: -256px; }
+.dijitIconChart { background-position: -272px; }
+.dijitIconConnector { background-position: -288px; }
+.dijitIconDatabase { background-position: -304px; }
+.dijitIconDocuments { background-position: -320px; }
+.dijitIconMail { background-position: -336px; }
+.dijitIconFile, .dijitLeaf { background-position: -352px; }
+.dijitIconFunction { background-position: -368px; }
+.dijitIconKey { background-position: -384px; }
+.dijitIconPackage{ background-position: -400px; }
+.dijitIconSample { background-position: -416px; }
+.dijitIconTable { background-position: -432px; }
+.dijitIconUsers { background-position: -448px; }
+.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
+.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
+.tundra .dojoDndItemBefore {
+	border-top: 2px solid #369;
+}
+.tundra .dojoDndItemAfter {
+	border-bottom: 2px solid #369;
+}
+.tundra .dojoDndItemOver {
+	cursor:pointer;
+}
+.tundra table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.tundra .dojoDndAvatar td	{ border: none; }
+.tundra .dojoDndAvatar tr	{ border: none; }
+.tundra .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
+.tundra .dojoDndAvatarItem td { padding: 2px;}
+.tundra.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.tundra .dijitContentPaneLoading {
+	background:url(images/loading.gif) no-repeat left center;
+	padding-left:25px;
+}
+.tundra .dijitContentPaneError {
+	background:url(images/warning.png) no-repeat left center;
+	padding-left:25px;
+}
+.tundra .dijitContentPane {
+	padding: 0px;
+}
+.tundra .dijitTabContainerTop-dijitContentPane,
+.tundra .dijitTabContainerLeft-dijitContentPane,
+.tundra .dijitTabContainerBottom-dijitContentPane,
+.tundra .dijitTabContainerRight-dijitContentPane,
+.tundra .dijitAccordionContainer-dijitContentPane {
+	background-color: #fff;
+	padding: 5px;
+}
+.tundra .dijitSplitContainer-dijitContentPane,
+.tundra .dijitBorderContainer-dijitContentPane {
+	background-color: #fff;		
+	padding: 5px;
+}
+.tundra .dijitTabPaneWrapper {
+	background:#fff;
+	border:1px solid #ccc;
+	margin: 0;
+	padding: 0;
+}
+.tundra .dijitTab {
+	line-height:normal;
+	margin-right:4px;	
+	padding:0px;
+	border:1px solid #ccc;
+	background:#e2e2e2 url(images/tabEnabled.png) repeat-x;
+}
+.tundra .dijitTabInnerDiv {
+	padding:2px 8px 2px 9px;
+}
+.tundra .dijitTabSpacer {
+	display: none;
+}
+.tundra .dijitTabContainer .tabStripRBtn {
+	margin-right: 20px;
+}
+.tundra .dijitTabContainer .tabStripLBtn {
+	margin-left: 20px;
+}
+.tundra .nowrapTabStrip .dijitTab {
+	top: 2px;
+}
+.tundra .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
+	top: 0px;
+	bottom: 2px;
+}
+.tundra .dijitTabChecked {
+	
+	background-color:#fff;
+	border-color: #ccc;
+	background-image:none;
+}
+.tundra .dijitTabHover {
+	color: #243C5F;
+	border-top-color:#92a0b3;
+	border-left-color:#92a0b3;
+	border-right-color:#92a0b3;
+	border-bottom-color:#92a0b3;
+	background:#e2e2e2 url(images/tabHover.gif) repeat-x;
+}
+.tundra .dijitTabContainerTop .dijitTabHover {
+	border-bottom-color:#ccc;
+}
+.tundra .dijitTabContainerBottom .dijitTabHover {
+	border-top-color:#ccc;
+}
+.tundra .dijitTabContainerLeft .dijitTabHover {
+	border-right-color:#ccc;
+}
+.tundra .dijitTabContainerRight .dijitTabHover {
+	border-left-color:#ccc;
+}
+.tundra .dijitTabContainer .dijitTabCheckedHover {
+	color: inherit;
+	border:1px solid #ccc;
+	background:#fff;
+}
+.tundra .dijitTab .tabLabel {
+	
+	min-height: 12px;
+	display: inline-block;
+}
+.tundra .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.tundra .dijitTabContainerNested .dijitTabContainerTop-tabs {
+	border-bottom: 1px solid #CCC;
+}
+.tundra .dijitTabContainerTabListNested .dijitTab {
+	background: none;
+	border: none;
+	top: 0px;		
+}
+.tundra .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+}
+.tundra .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+	text-decoration: underline;
+}
+.tundra .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent .tabLabel {
+	text-decoration: underline;
+	font-weight: bold;
+	
+}
+.tundra .dijitTabContainer .dijitTabPaneWrapperNested {
+	border: none;	
+}
+.tundra .dijitTabCloseButton {
+	background: url(images/tabClose.png) no-repeat right top;
+	width: 12px;
+	height: 12px;
+}
+.dj_ie6 .tundra .dijitTabCloseButton {
+	background-image : url(images/tabClose.gif);
+}
+.tundra .dijitTabCloseButtonHover {
+	background-image : url(images/tabCloseHover.png);
+}
+.dj_ie6 .tundra .dijitTabCloseButtonHover {
+	background-image : url(images/tabCloseHover.gif);
+}
+.tundra .dijitTabContainerTop-tabs {
+	margin-bottom: 0px;
+	border-color: #cccccc;
+	padding-left: 3px;
+	background-position: bottom;
+}
+.tundra .dijitTabContainerTop-tabs .dijitTab {
+	top: 0px;
+	margin-bottom: -1px;
+}
+.tundra .dijitTabContainerTop-container {
+	border-top: none;
+}
+.tundra .dijitTabContainerTop-tabs .dijitTabChecked {
+	border-bottom-color:white;
+}
+.tundra .dijitTabContainerTop-tabs,
+.tundra .dijitTabContainerBottom-tabs {
+	padding-left: 3px;
+	padding-right: 3px;
+}
+.tundra .dijitTabContainerTopStrip {
+	border-top: 1px solid #CCC;
+	border-right: 1px solid #CCC;
+	border-left: 1px solid #CCC;
+	padding-top: 2px;
+	background: #f2f2f2;
+}
+.tundra .dijitTabContainerTopNone {
+	padding-top: 0px;
+}
+.tundra .dijitTabContainerBottom-tabs {
+	margin-top: 0px;
+	border-color: #cccccc;
+	background-position: top;
+	padding-left: 3px;
+}
+.tundra .dijitTabContainerBottom-tabs .dijitTab {
+	bottom: 0px;
+	margin-top: -1px;
+}
+.tundra .dijitTabContainerBottom-container {
+	border-bottom: none;
+}
+.tundra .dijitTabContainerBottom-tabs .dijitTabChecked {
+	border-top-color:white;
+}
+.tundra .dijitTabContainerBottomStrip {
+	padding-bottom: 2px;
+	border: 1px solid #ccc;
+	background: #f2f2f2;
+	border-top: none;
+}
+.tundra .dijitTabContainerRight-tabs {
+	border-color: #ccc;
+	height: 100%;
+	padding-top: 3px;
+}
+.tundra .dijitTabContainerRightStrip {
+	margin-left: -1px;
+}
+.tundra .dijitTabContainerRight-container {
+	border-right: none;
+}
+.tundra .dijitTabContainerRight-tabs .dijitTabChecked {
+	border-left-color:white;
+}
+.tundra .dijitTabContainerRightStrip {
+	padding-right: 2px;
+	border: 1px solid #ccc;
+}
+.tundra .dijitTabContainerRightStrip {
+	background: #f2f2f2;
+}
+.tundra .dijitTabContainerLeft-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+	height: 100%;
+}
+.tundra .dijitTabContainerLeft-container {
+	border-left: none;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTabChecked {
+	border-right-color:white;
+}
+.tundra .dijitTabContainerLeftStrip {
+	padding-left: 2px;
+	border: 1px solid #ccc;
+	background: #f2f2f2;
+	border-right: none;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTab,
+.tundra .dijitTabContainerRight-tabs .dijitTab {
+	margin-right:0px;
+	margin-bottom:4px;	
+}
+.tundra .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+	border-left: 0px solid #ccc;
+	border-top: 0px solid #ccc;
+	border-right: 0px solid #ccc;
+	padding-top: 0px;
+	padding-left: 0px;
+}
+.tundra .dijitTabContainer .tabStripButton {
+	margin-right: 0;
+	padding-top: 2px;
+	z-index: 12;
+}
+.tundra .dijitTabContainerBottom .tabStripButton {
+	padding-top: 2px;
+}
+.tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
+	padding-bottom: 3px;
+	padding-top: 1px;
+}
+.tundra .tabStripButton .dijitTabInnerDiv {
+	padding: 3px 2px 4px 2px;
+}
+.dj_ie6 .tundra .tabStripButton .dijitTabInnerDiv,
+.dj_ie7 .tundra .tabStripButton .dijitTabInnerDiv,
+.dj_opera .tundra .tabStripButton .dijitTabInnerDiv {
+	padding-bottom: 5px;
+}
+.dj_ie6 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
+.dj_ie7 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,
+.dj_opera .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {
+	padding-bottom: 4px;
+}
+.tundra .dijitTabStripIcon {
+	height: 14px;
+	width: 14px;
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat left top ;
+}
+.dj_ie6 .tundra .dijitTabStripIcon {
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.tundra .dijitTabStripSlideRightIcon {
+	background-position: -30px top;
+}
+.tundra .dijitTabStripMenuIcon {
+	background-position: -15px top;
+}
+.tundra .dijitAccordionContainer {
+	border-color: #ccc;
+	background-color: #fff;
+}
+.tundra .dijitAccordionTitle {
+	background:#fafafa url(images/titleBar.png) repeat-x bottom left;
+	border-top: 1px solid #bfbfbf;
+	padding: 4px 4px 4px 8px;
+}
+.tundra .dijitAccordionTitleHover  {
+	background: #f8fafd url(images/accordionItemHover.gif) bottom repeat-x;
+}
+.tundra .dijitAccordionTitleSelected  {
+	background: #f9f9f9 url(images/accordionItemActive.gif) bottom repeat-x;
+	font-weight: bold;
+	border-top: 1px solid #aaaaaa;
+	border-bottom: 1px solid #bfbfbf;
+	padding: 4px 4px 4px 8px;
+}
+.tundra .dijitSplitContainerSizerH {
+	background:url(images/splitContainerSizerV.png) repeat-y #fff;
+	border:0;
+	border-left:1px solid #bfbfbf;
+	border-right:1px solid #bfbfbf;
+	width:7px;
+}
+.tundra .dijitSplitContainerSizerH .thumb {
+	background:url(images/splitContainerSizerV-thumb.png) no-repeat #ccc;
+	left:1px;
+	width:3px;
+	height:19px;
+	overflow: hidden;
+}
+.tundra .dijitSplitContainerSizerV {
+	background:url(images/splitContainerSizerH.png) repeat-x #fff;
+	border:0;
+	border-top:1px solid #bfbfbf;
+	border-bottom:1px solid #bfbfbf;
+	height:7px;
+}
+.tundra .dijitSplitContainerSizerV .thumb {
+	background:url(images/splitContainerSizerH-thumb.png) no-repeat #ccc;
+	top:1px;
+	width:19px;
+	height:3px;
+	overflow: hidden;
+}
+.tundra .dijitBorderContainer {
+	background-color: #fcfcfc;
+	padding: 5px;
+}
+.tundra .dijitSplitContainer-child,
+.tundra .dijitBorderContainer-child {
+	
+	border: 1px #ccc solid;
+}
+.tundra .dijitBorderContainer-dijitTabContainerTop,
+.tundra .dijitBorderContainer-dijitTabContainerBottom,
+.tundra .dijitBorderContainer-dijitTabContainerLeft,
+.tundra .dijitBorderContainer-dijitTabContainerRight {
+	
+	 border: none;
+}
+.tundra .dijitBorderContainer-dijitBorderContainer {
+	
+	border: none;
+	padding: 0px;
+}
+.tundra .dijitSplitterH,
+.tundra .dijitGutterH {
+	background:#fcfcfc;
+	border:0;
+	height:5px;
+}
+.tundra .dijitSplitterH .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.tundra .dijitSplitterV,
+.tundra .dijitGutterV {
+	background:#fcfcfc;
+	border:0;
+	width:5px;
+}
+.tundra .dijitSplitterV .dijitSplitterThumb {
+	background:#B0B0B0 none;
+	height:19px;
+	left:2px;
+	width:1px;
+}
+.tundra .dijitSplitterActive {
+	font-size: 1px;
+	background-image: none;
+	background-color: #aaa;
+	-moz-opacity: 0.6;
+	opacity: 0.6;
+	filter: Alpha(Opacity=60);
+	margin: 0;
+}
+.tundra .dijitInputContainer INPUT,
+.tundra .dijitTextBox {
+	margin: 0em 0.1em;
+}
+.tundra .dijitTextArea {
+	padding: 3px;
+}
+.tundra .dijitTextBox {
+	
+	background:#fff url(images/validationInputBg.png) repeat-x top left;
+	#background:#fff url(images/validationInputBg.gif) repeat-x top left;
+	border:1px solid #b3b3b3;
+}
+.tundra .dijitComboBox .dijitButtonNode {
+	padding: 0 0.2em;
+}
+.tundra .dijitTextBox .dijitButtonNode {
+	
+	border-color: #9b9b9b;
+}
+.tundra .dijitTextBoxFocused {
+	
+	border-color:#406b9b;
+}
+.tundra .dijitTextBoxFocused .dijitButtonNode {
+	border-color:#366dba;
+}
+.tundra .dijitError {
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.tundra .dijitErrorFocused {
+	background-color:#f9f999;
+	background-image:none;
+}
+.tundra .dijitValidationIcon {
+	
+	width: 16px;
+	background: transparent url(images/warning.png) no-repeat center center;
+}
+.tundra .dijitComboBoxHighlightMatch {
+	background-color:#a5beda;
+}
+.tundra .dijitFocusedLabel {
+	
+	outline: 1px dotted #666666;
+}
+.tundra .dijitButtonNode {
+	
+	border: 1px solid #c0c0c0;
+	border-bottom: 1px solid #9b9b9b;
+	padding: 0.1em 0.2em 0.2em 0.2em;
+	background: #fff url(images/buttonEnabled.png) repeat-x bottom left;
+}
+.tundra .dijitButtonText {
+	text-align: center;
+	padding: 0 0.3em;
+}
+.tundra .dijitDisabled .dijitButtonText {
+	color: #7F7F7F;
+}
+.tundra .dijitArrowButton {
+	color: #111;
+}
+.tundra .dijitComboButton .dijitDownArrowButton {
+	padding-right:4px;
+}
+.tundra .dijitTextBoxReadOnly,
+.tundra .dijitTextBoxReadOnly .dijitButtonNode,
+.tundra .dijitButtonDisabled .dijitButtonNode,
+.tundra .dijitToggleButtonDisabled .dijitButtonNode,
+.tundra .dijitDropDownButtonDisabled .dijitButtonNode,
+.tundra .dijitComboButtonDisabled .dijitButtonNode,
+.tundra .dijitTextBoxDisabled,
+.tundra .dijitTextBoxDisabled .dijitButtonNode {
+	
+	border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5;
+	background:#e4e4e4 url(images/buttonDisabled.png) top repeat-x;
+}
+.tundra .dijitButtonHover .dijitButtonNode,
+.tundra .dijitButtonNodeHover,
+.tundra .dijitToggleButtonHover .dijitButtonNode,
+.tundra .dijitDropDownButtonHover .dijitButtonNode,
+.tundra .dijitComboButton .dijitButtonContentsHover,
+.tundra .dijitComboButton .dijitDownArrowButtonHover {
+	
+	
+	border-color: #a5beda;
+	border-bottom-color:#5c7590;
+	color:#243C5F;
+	background:#fcfdff url(images/buttonHover.png) repeat-x bottom;
+}
+.tundra .dijitDownArrowButtonHover,
+.tundra .dijitUpArrowButtonHover {
+	
+	color:#243C5F;
+	background:#fcfdff url(images/buttonHover.png) repeat-x bottom;
+}
+.tundra .dijitUpArrowButtonActive,
+.tundra .dijitDownArrowButtonActive,
+.tundra .dijitButtonActive .dijitButtonNode,
+.tundra .dijitToggleButtonActive .dijitButtonNode,
+.tundra .dijitDropDownButtonActive .dijitButtonNode,
+.tundra .dijitButtonContentsActive,
+.tundra .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+	
+	border-color:#366dba;
+	background: #ededed url(images/buttonActive.png) bottom repeat-x;
+}
+.tundra .dijitArrowButtonInner {
+	background:url(images/spriteArrows.png) no-repeat scroll 0px center;
+	width: 7px;
+	height: 7px;
+	margin: 0px 4px 0px 4px;
+}
+.tundra .dijitTextBox .dijitArrowButtonInner {
+	background-position: 0 center;
+}
+.dj_ie6 .tundra .dijitArrowButtonInner {
+	background-image:url(images/spriteArrows.gif);
+}
+.tundra .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -7px center;
+}
+.tundra .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -14px center;
+}
+.tundra .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -21px center;
+}
+.tundra .dijitDisabled .dijitArrowButtonInner {
+	background-position: -28px center;
+}
+.tundra .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -35px center;
+}
+.tundra .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -42px center;
+}
+.tundra .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -49px center;
+}
+.dj_webkit .tundra .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: -1px; 
+}
+.dj_ie .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
+	margin-top: -2px; 
+}
+.dj_ie8 .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
+	margin-top: -1px; 
+}
+.tundra .dijitSpinnerButtonContainer {
+	width: auto;
+	padding: 0;
+}
+.tundra .dijitSpinner .dijitArrowButton {
+	width: 15px;
+}
+.tundra .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.tundra .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
+.tundra .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url(images/checkmarkNoBorder.png);
+}
+.dj_ie6 .tundra .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url(images/checkmarkNoBorder.gif);
+}
+.tundra .dijitCheckBox,
+.tundra .dijitCheckBoxIcon			{
+	background-image: url(images/checkmark.png); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0 2px 0 0;
+	padding: 0;
+}
+.dj_ie6 .tundra .dijitCheckBox,
+.dj_ie6 .tundra .dijitCheckBoxIcon			{
+	background-image: url(images/checkmark.gif); 
+}
+.tundra .dijitCheckBox,
+.tundra .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -16px;
+}
+.tundra .dijitCheckBoxChecked,
+.tundra .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: 0px;
+}
+.tundra .dijitCheckBoxDisabled {
+	
+	background-position: -48px;
+}
+.tundra .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -32px;
+}
+.tundra .dijitCheckBoxHover {
+	
+	background-position: -80px;
+}
+.tundra .dijitCheckBoxCheckedHover {
+	
+	background-position: -64px;
+}
+.tundra .dijitRadio,			
+.tundra .dijitRadioIcon	{		
+	background-image: url(images/checkmark.png); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.dj_ie6 .tundra .dijitRadio,
+.dj_ie6 .tundra .dijitRadioIcon	{
+	background-image: url(images/checkmark.gif); 
+}
+.tundra .dijitToggleButton .dijitRadioIcon {
+	
+	background-image: url(images/checkmarkNoBorder.png);
+}
+.dj_ie6 .tundra .dijitToggleButton .dijitRadioIcon {
+	background-image: url(images/checkmarkNoBorder.gif);
+}
+.tundra .dijitRadio,
+.tundra .dijitRadioIcon {
+	
+	background-position: -112px;
+}
+.tundra .dijitRadioDisabled {
+	
+	background-position: -144px;
+}
+.tundra .dijitRadioHover {
+	
+	background-position: -176px;
+}
+.tundra .dijitRadioChecked,
+.tundra .dijitRadioCheckedHover,
+.tundra .dijitToggleButtonChecked .dijitRadioIcon {
+	
+	background-position: -96px;
+}
+.tundra .dijitRadioCheckedDisabled {
+	
+	background-position: -128px;
+}
+.tundra .dijitSliderProgressBarH {
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.tundra .dijitSliderProgressBarV {
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.tundra .dijitSliderFocused .dijitSliderProgressBarH,
+.tundra .dijitSliderFocused .dijitSliderLeftBumper {
+	background-image:url(images/sliderFullFocus.png);
+}
+.tundra .dijitSliderFocused .dijitSliderProgressBarV,
+.tundra .dijitSliderFocused .dijitSliderBottomBumper {
+	background-image:url(images/sliderFullVerticalFocus.png);
+}
+.tundra .dijitSliderRemainingBarV {
+	border-color: #b4b4b4;
+	background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y bottom left;
+}
+.tundra .dijitSliderRemainingBarH {
+	border-color: #b4b4b4;
+	background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+}
+.tundra .dijitSliderBar {
+	border-style: solid;
+	outline:1px;
+}
+.tundra .dijitSliderFocused .dijitSliderBar {
+	border-color:#888;
+}
+.tundra .dijitSliderImageHandleH {
+	border:0px;
+	width:16px;
+	height:16px;
+	background:url(images/preciseSliderThumb.png) no-repeat center top;
+}
+.tundra .dijitSliderFocused .dijitSliderImageHandleH {
+	background-image:url(images/preciseSliderThumbFocus.png);
+	#background-image:url(images/preciseSliderThumbFocus.gif);
+}
+.dj_ie6 .tundra .dijitSliderImageHandleH {
+	background-image:url(images/preciseSliderThumb.gif);
+}
+.tundra .dijitSliderLeftBumper {
+	border-left-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.tundra .dijitSliderRightBumper {
+	background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+	border-color: #b4b4b4;
+	border-right-width: 1px;
+}
+.tundra .dijitSliderImageHandleV {
+	border:0px;
+	width:16px;
+	height:16px;
+	background:url(images/sliderThumb.png) no-repeat center center;
+}
+.tundra .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url(images/sliderThumbFocus.png);
+}
+.dj_ie6 .tundra .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url(images/sliderThumbFocus.gif);
+}
+.tundra .dijitSliderBottomBumper {
+	border-bottom-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.tundra .dijitSliderTopBumper {
+	background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y top left;
+	border-color: #b4b4b4;
+	border-top-width: 1px;
+}
+.tundra .dijitSliderDecrementIconH,
+.tundra .dijitSliderDecrementIconV,
+.tundra .dijitSliderIncrementIconH,
+.tundra .dijitSliderIncrementIconV {
+	background-image: url(images/spriteArrows.png);
+	background-repeat: no-repeat;
+	margin: 5px;
+	height: 7px;
+	width: 7px;
+	font-size: 1px;
+}
+.dj_ie6 .tundra .dijitSliderDecrementIconH,
+.dj_ie6 .tundra .dijitSliderDecrementIconV,
+.dj_ie6 .tundra .dijitSliderIncrementIconH,
+.dj_ie6 .tundra .dijitSliderIncrementIconV {
+	background-image: url(images/spriteArrows.gif);
+}
+.tundra .dijitSliderDecrementIconH {
+	background-position: -7px 0px;
+}
+.tundra .dijitSliderIncrementIconH {
+	background-position: -14px 0px;
+}
+.tundra .dijitSliderDecrementIconV {
+	background-position: 0px 0px;
+}
+.tundra .dijitSliderIncrementIconV {
+	background-position: -21px 0px;
+}
+.tundra .dijitSliderButtonInner {
+	visibility:hidden;
+}
+.tundra .dijitSliderReadOnly *,
+.tundra .dijitSliderDisabled * {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	color: #bdbdbd;
+}
+.tundra .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.tundra .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position: -35px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.tundra .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position: -42px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.tundra .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position: -28px 0px;
+}
+.tundra .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.tundra .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position: -49px 0px;
+}
+.tundra .dijitSelect .dijitButtonNode {
+	padding: 0px;
+}
+.tundra .dijitSelect .dijitButtonNode .dijitArrowButtonInner {
+	margin: 0px 4px 0px 5px;
+}
+.tundra .dijitSelect .dijitButtonContents {
+	padding-top: 1px;
+	background:#fff url(images/validationInputBg.png) repeat-x top left;
+	#background:#fff url(images/validationInputBg.gif) repeat-x top left;
+}
+.tundra .dijitSelectHover .dijitButtonContents,
+.tundra .dijitSelectActive .dijitButtonContents,
+.tundra .dijitSelectOpened .dijitButtonContents,
+.tundra .dijitSelectDisabled .dijitButtonContents,
+.tundra .dijitSelectReadOnly .dijitButtonContents{
+	background: transparent none;
+}
+.dj_ie .tundra .dijitSelect .dijitButtonContents {
+	padding-top: 0px;
+}
+.tundra .dijitSelectDisabled .dijitButtonNode {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	background:#e4e4e4 url(images/buttonDisabled.png) top repeat-x;
+}
+.dj_ie .tundra .dijitSelectDisabled  .dijitButtonNode * {
+	filter: gray() alpha(opacity=50);
+}
+.tundra .dijitSelectHover .dijitButtonNode {
+	border-color:#a5beda;
+	border-bottom-color:#5c7590;
+	border-right-color:#5c7590;
+	color:#243C5F;
+	background:#fcfdff url(images/buttonHover.png) repeat-x bottom;
+}
+.tundra .dijitSelectActive .dijitButtonNode,
+.tundra .dijitSelectOpened .dijitButtonNode {
+	border-color:#366dba;
+	background: #ededed url(images/buttonActive.png) bottom repeat-x;
+}
+.tundra .dijitSelectMenu td {
+	padding: 0em;
+}
+.tundra .dijitSelectMenu .dijitMenuItemLabel,
+.tundra .dijitSelectMenu .dijitMenuArrowCell {
+	padding: 0.1em 0.2em;
+}
+.tundra .dijitTreeNode {
+    background-image : url(images/i.gif);
+    background-repeat : repeat-y;
+    zoom: 1;	
+}
+.tundra .dijitTreeIsLast {
+    background: url(images/i_half.gif) no-repeat;
+}
+.tundra .dijitTreeIsRoot {
+    margin-left: 0;
+    background-image: none;
+}
+.tundra .dijitTreeExpando {
+    width: 18px;
+    height: 18px;
+}
+.tundra .dijitTreeRow {
+	
+	padding-bottom: 2px;
+}
+.tundra .dijitTreeContent {
+    min-height: 18px;
+    min-width: 18px;
+}
+.tundra .dijitTreeRowSelected .dijitTreeLabel {
+	background:#e2ebfe;
+}
+.tundra .dijitTreeRowHover {
+	
+	background-image: url(images/treeHover.png);
+	background-repeat: repeat;
+	background-color: transparent !important;
+}
+.tundra .dijitTreeExpandoOpened {
+	background-image: url(images/treeExpand_minus.gif);
+}
+.tundra .dijitTreeExpandoClosed {
+	background-image: url(images/treeExpand_plus.gif);
+}
+.tundra .dijitTreeExpandoLeaf {
+	background-image: url(images/treeExpand_leaf.gif);
+}
+.tundra .dijitTreeExpandoLoading {
+	background-image: url(images/treeExpand_loading.gif);
+}
+.tundra .dijitTreeIcon {
+	width: 16px;
+	height: 16px;
+}
+.tundra .dijitFolderOpened {
+	background: url(images/folderOpened.gif) no-repeat;
+}
+.tundra .dijitFolderClosed {
+	background: url(images/folderClosed.gif) no-repeat;
+}
+.tundra .dijitLeaf {
+	background: url(images/leaf.gif) no-repeat;
+}
+.tundra .dijitTreeNode .dojoDndItemBefore,
+.tundra .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.tundra .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	
+	border-top: 2px solid #369;
+}
+.tundra .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	
+	border-bottom: 2px solid #369;
+}
+.tundra .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.tundra .dijitProgressBarEmpty {
+	
+	background:#fff url(images/progressBarEmpty.png) repeat-x center center;
+	border-color: #a2a2a2 #b8b8b8 #b8b8b8 #a2a2a2;
+}
+.tundra .dijitProgressBarTile {
+	
+	background:#f0f0f0 url(images/progressBarFull.png) repeat-x center center;
+}
+.tundra .dijitProgressBarFull {
+	border-right:1px solid #b8b8b8;
+}
+.tundra .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.tundra .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url(images/progressBarAnim.gif) repeat-x center center;
+}
+.tundra .dijitTitlePaneTitle {
+	background: #cccccc;
+	background:#fff url(images/titleBar.png) repeat-x bottom left;
+	border:1px solid #bfbfbf;
+	padding:3px 4px;
+}
+.tundra .dijitTitlePaneTitleHover  {
+	background: #f8fafd url(images/accordionItemHover.gif) bottom repeat-x;
+}
+.tundra .dijitTitlePane .dijitArrowNode {
+	background-image: url(images/spriteArrows.png);
+	background-repeat: no-repeat;
+	background-position: 0px 0px;
+	height: 7px;
+	width: 7px;
+}
+.dj_ie6 .tundra .dijitTitlePane .dijitArrowNode {
+	background-image: url(images/spriteArrows.gif);
+}
+.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: -14px 0px;
+}
+.tundra .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border:1px solid #bfbfbf;
+	border-top: 0px;
+}
+.tundra .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.tundra .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+}
+.tundra .dijitCalendarIncrementControl {
+	
+	width:15px;
+	height:15px;
+	background-image: url(images/spriteRoundedIconsSmall.png);
+	background-repeat: no-repeat
+}
+.dj_ie6 .tundra .dijitCalendarIncrementControl {
+	font-size:.1em;
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.tundra .dijitA11ySideArrow {
+	display: none;
+}
+.tundra .dijitCalendarDecrease {
+	background-position: top left;
+}
+.tundra .dijitCalendarIncrease {
+	background-position: -30px top;
+}
+.tundra .dijitCalendarContainer {
+	font-size: 100%;
+	border-spacing: 0;
+	border-collapse: separate;
+	border: 1px solid #ccc;
+	margin: 0;
+}
+.tundra .dijitCalendarMonthContainer th {
+	
+	background:#d3d3d3 url(images/titleBar.png) repeat-x top;
+	padding-top:.3em;
+	padding-bottom:.2em;
+	text-align:center;
+}
+.dj_ie6 .tundra .dijitCalendarMonthContainer th {
+	padding-top:.2em;
+	padding-bottom:.1em;
+}
+.tundra .dijitCalendarDayLabelTemplate {
+	
+	background:white url(images/calendarDayLabel.png) repeat-x bottom;
+	font-weight:normal;
+	padding-top:.15em;
+	padding-bottom:0em;
+	border-top: 1px solid #eeeeee;
+	color:#293a4b;
+	text-align:center;
+}
+.tundra .dijitCalendarBodyContainer {
+	border-bottom: 1px solid #eeeeee;
+}
+.tundra .dijitCalendarMonthLabel {
+	color:#293a4b;
+	font-weight: bold;
+}
+.tundra .dijitCalendarDateTemplate {
+	
+	font-size: 0.9em;
+	font-weight: bold;
+	text-align: center;
+	padding: 0.3em 0.3em 0.05em 0.3em;
+	letter-spacing: 1px;
+}
+.dj_ie .tundra .dijitCalendarDateTemplate {
+	padding: 0.1em .33em 0.02em .33em;
+}
+.tundra .dijitCalendarPreviousMonth,
+.tundra .dijitCalendarNextMonth 		{
+	
+	color:#999999;
+	background-color:#f8f8f8;
+}
+.tundra .dijitCalendarCurrentMonth {
+	
+	background-color: white;
+}
+.tundra .dijitCalendarCurrentDate {
+	
+	text-decoration:underline;
+	font-weight:bold;
+}
+.tundra .dijitCalendarHoveredDate {
+	background-color: #e2ebf2;
+}
+.tundra .dijitCalendarDisabledDate {
+	text-decoration: line-through;
+	background-color: white;	
+}
+.tundra .dijitCalendarSelectedDate {
+	
+	background-color:#bbc4d0 !important;
+	color:black !important;
+}
+.tundra .dijitCalendarYearContainer {
+	
+	background:white url(images/calendarYearLabel.png) repeat-x bottom;
+	border-top:1px solid #ccc;
+}
+.tundra .dijitCalendarYearLabel {
+	
+	margin:0;
+	padding:0.4em 0 0.25em 0;
+	text-align:center;
+}
+.tundra .dijitCalendarSelectedYear {
+	
+	color:black;
+	padding:0.2em;
+	padding-bottom:0.1em;
+	background-color:#bbc4d0 !important;
+}
+.tundra .dijitCalendarNextYear,
+.tundra .dijitCalendarPreviousYear {
+	
+	color:black !important;
+	font-weight:normal;
+}
+.tundra .dijitTimePickerTick,
+.tundra .dijitTimePickerMarker {
+	border-color: #ccc;
+}
+.tundra .dijitTimePickerTick {
+	color:white;
+}
+.tundra .dijitTimePickerMarker {
+	background:#d3d3d3 url(images/titleBar.png) repeat-x top;
+	color:#293a4b;
+	font-weight: bold;
+}
+.tundra .dijitTimePickerItemSelected {
+	color: black;
+	background: #bbc4d0 none;
+}
+.tundra .dijitTimePickerItemHover {
+	background: #60a1ea none;
+	color:white;
+}
+.tundra .dijitTimePickerItemHover,
+.tundra .dijitTimePickerItemSelected {
+	position: relative;
+	z-index: 10;
+}
+.tundra .dijitTimePickerTick .dijitTimePickerItemInner {
+	font-size:0.4em;
+}
+.tundra .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.tundra .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	font-size:1em;
+}
+.tundra .dijitTimePickerMarkerHover {
+	border-top: 1px solid #ccc;
+}
+.tundra .dijitTimePickerTickHover,
+.tundra .dijitTimePickerTickSelected {
+	margin-top:-0.3em;
+	margin-bottom:-0.3em;
+	border-bottom: none;
+}
+.tundra .dijitToolbar {
+	border-bottom: 1px solid #ccc;
+	background:#eaeaea url(images/titleBar.png) repeat-x top left;
+}
+.dj_ie6 .tundra .dijitToolbar {
+	height: 10px;
+}
+.tundra .dijitToolbar .dijitButtonNode,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	margin: 0px;
+	padding: 0px;
+	border: none;
+	font-size: 12px;
+}
+.tundra .dijitToolbar .dijitButton,
+.tundra .dijitToolbar .dijitToggleButton,
+.tundra .dijitToolbar .dijitDropDownButton,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton  {
+	background: none;
+	padding: 1px;
+}
+.tundra .dijitToolbar .dijitButtonChecked,
+.tundra .dijitToolbar .dijitToggleButtonChecked {
+	background-color:#d4dff2;
+	border:1px solid #316ac5;
+	padding: 0px;	
+}
+.tundra .dijitToolbar .dijitButtonCheckedHover,
+.tundra .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+	background-color:#abc1e5;
+	border:1px solid #316ac5;
+	padding: 0px;	
+}
+.tundra .dijitToolbar .dijitButtonHover,
+.tundra .dijitToolbar .dijitToggleButtonHover,
+.tundra .dijitToolbar .dijitDropDownButtonHover,
+.tundra .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
+.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
+	
+	border: 1px solid #869cbf;
+	padding: 0px;	
+	background-color:#e1e5f0;
+}
+.tundra .dijitToolbar label {
+	padding: 3px 3px 0 6px;
+}
+.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+	
+	border: 1px #555 dotted !important;
+	padding: 0px;
+}
+.tundra .dijitToolbarSeparator {
+	
+	background: url(../../icons/images/editorIconsEnabled.png);
+}
+.tundra .dijitToolbarRtl .dijitToolbarSeparator {
+	
+	background-image: url(../../icons/images/editorIconsDisabled.png);
+}
+.tundra .dijitDialog {
+	background: #fff;
+	border: 1px solid #7eabcd;
+	padding: 0px;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+}
+.tundra .dijitDialogPaneContent {
+	background: #fff;
+	border-top: 1px solid #d3d3d3;
+	padding:10px;
+}
+.tundra .dijitDialogTitleBar {
+	
+	background: #fafafa url(images/titleBar.png) repeat-x top left;
+	padding: 5px 6px 3px 6px;
+	outline:0; 
+}
+.tundra .dijitDialogTitle {
+	
+	font-weight: bold;
+	padding: 0px 4px;
+}
+.tundra .dijitDialogCloseIcon {
+	
+	
+	background: url(images/tabClose.png) no-repeat right top;
+	position: absolute;
+	vertical-align: middle;
+	right: 6px;
+	top: 4px;
+	height: 15px;
+	width: 15px;
+}
+.dj_ie6 .tundra .dijitDialogCloseIcon {
+	background : url(images/tabClose.gif) no-repeat right top;
+}
+.tundra .dijitDialogCloseIconHover {
+	background: url(images/tabCloseHover.png) no-repeat right top;
+}
+.dj_ie6 .tundra .dijitDialogCloseIconHover {
+	background : url(images/tabCloseHover.gif) no-repeat right top;
+}
+.tundra .dijitTooltip,
+.tundra .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 13px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 13px;
+}
+.tundra .dijitTooltipContainer {
+	
+	background: #ffffff url(images/popupMenuBg.gif) repeat-x bottom left;
+	border: 1px solid #7eabcd;
+	padding: 0.45em;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+}
+.tundra .dijitTooltipConnector {
+	
+	border:0px;
+	z-index: 2;
+}
+.tundra .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 3px;
+}
+.tundra .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 3px;
+	background:url(images/tooltipConnectorUp.png) no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipBelow .dijitTooltipConnector {
+	
+	background-image: url(images/tooltipConnectorUp.gif);
+}
+.tundra .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 3px;
+	background:url(images/tooltipConnectorDown.png) no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorDown.gif);
+}
+.dj_ie6 .tundra .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -3px;
+}
+.tundra .dijitTooltipLeft {
+	padding-right: 14px;
+}
+.dj_ie6 .tundra .dijitTooltipLeft {
+	padding-left: 15px;
+}
+.tundra .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background:url(images/tooltipConnectorRight.png) no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipLeft .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorRight.gif);
+}
+.tundra .dijitTooltipRight {
+	padding-left: 14px;
+}
+.tundra .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background:url(images/tooltipConnectorLeft.png) no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipRight .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorLeft.gif);
+}
+.dj_webkit .tundra .dijitTooltipContainer {
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+}
+.tundra .dijitMenu,
+.tundra .dijitMenuBar {
+	border: 1px solid #7eabcd;
+	margin: 0px;
+	padding: 0px;
+	background-color: #f7f7f7;
+}
+.tundra .dijitBorderContainer .dijitMenuBar {
+	border:1px solid #ccc;
+}
+.tundra .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0;
+}
+.tundra .dijitMenuItem {
+	padding: 4px 5px;
+}
+.tundra .dijitMenuPreviousButton, .tundra .dijitMenuNextButton {
+	font-style: italic;
+}
+.tundra .dijitMenuItem td {
+	padding: 2px;
+}
+.tundra .dijitMenuPassive .dijitMenuItemHover,
+.tundra .dijitMenuItemSelected {
+	background-color: #3559ac;
+	color:#fff;
+}
+.tundra .dijitMenuItemIcon {
+	width: 16px;
+	height: 16px;
+}
+.tundra .dijitMenuExpand {
+	
+	width: 7px;
+	height: 7px;
+	background-image: url(images/spriteArrows.png);
+	background-position: -14px 0px;
+}
+.dj_ie6 .tundra .dijitMenuExpand {
+	background-image: url(images/spriteArrows.gif);
+}
+.tundra .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #9b9b9b;
+}
+.tundra .dijitMenuSeparatorBottom {
+	border-top: 1px solid #e8e8e8;
+}
+.tundra .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.tundra .dijitCheckedMenuItemIcon {
+	background-image: url(images/checkmark.png);
+	background-position: -80px;
+}
+.dj_ie6 .tundra .dijitCheckedMenuItemIcon {
+	background-image: url(images/checkmark.gif);
+}
+.tundra .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
+.dijitEditor {
+	border:1px solid #bfbfbf;
+	border-top:0;
+}
+.tundra .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled.png); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.tundra .dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled.png); 
+}
+.dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled.png); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled.png); 
+}
+.dijitEditorIconSep { background-position: 0px; }
+.dijitEditorIconSave { background-position: -18px; }
+.dijitEditorIconPrint { background-position: -36px; }
+.dijitEditorIconCut { background-position: -54px; }
+.dijitEditorIconCopy { background-position: -72px; }
+.dijitEditorIconPaste { background-position: -90px; }
+.dijitEditorIconDelete { background-position: -108px; }
+.dijitEditorIconCancel { background-position: -126px; }
+.dijitEditorIconUndo { background-position: -144px; }
+.dijitEditorIconRedo { background-position: -162px; }
+.dijitEditorIconSelectAll { background-position: -180px; }
+.dijitEditorIconBold { background-position: -198px; }
+.dijitEditorIconItalic { background-position: -216px; }
+.dijitEditorIconUnderline { background-position: -234px; }
+.dijitEditorIconStrikethrough { background-position: -252px; }
+.dijitEditorIconSuperscript { background-position: -270px; }
+.dijitEditorIconSubscript { background-position: -288px; }
+.dijitEditorIconJustifyCenter { background-position: -306px; }
+.dijitEditorIconJustifyFull { background-position: -324px; }
+.dijitEditorIconJustifyLeft { background-position: -342px; }
+.dijitEditorIconJustifyRight { background-position: -360px; }
+.dijitEditorIconIndent { background-position: -378px; }
+.dijitEditorIconOutdent { background-position: -396px; }
+.dijitEditorIconListBulletIndent { background-position: -414px; }
+.dijitEditorIconListBulletOutdent { background-position: -432px; }
+.dijitEditorIconListNumIndent { background-position: -450px; }
+.dijitEditorIconListNumOutdent { background-position: -468px; }
+.dijitEditorIconTabIndent { background-position: -486px; }
+.dijitEditorIconLeftToRight { background-position: -504px; }
+.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
+.dijitEditorIconBackColor { background-position: -540px; }
+.dijitEditorIconForeColor { background-position: -558px; }
+.dijitEditorIconHiliteColor { background-position: -576px; }
+.dijitEditorIconNewPage { background-position: -594px; }
+.dijitEditorIconInsertImage { background-position: -612px; }
+.dijitEditorIconInsertTable { background-position: -630px; }
+.dijitEditorIconSpace { background-position: -648px; }
+.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
+.dijitEditorIconInsertOrderedList { background-position: -684px; }
+.dijitEditorIconInsertUnorderedList { background-position: -702px; }
+.dijitEditorIconCreateLink { background-position: -720px; }
+.dijitEditorIconUnlink { background-position: -738px; }
+.dijitEditorIconViewSource { background-position: -756px; }
+.dijitEditorIconRemoveFormat { background-position: -774px; }
+.dijitEditorIconFullScreen { background-position: -792px; }
+.dijitEditorIconWikiword { background-position: -810px; }
+ 
+.dijitColorPalette {
+	border:1px solid #7eabcd;
+	background:#fff;
+	-moz-border-radius: 0px !important;
+}
+.dijitRtl .dijitPlaceHolder {
+	left: auto;
+	right: 0;
+}
+.dijitMenuItemRtl {
+	text-align: right;
+}
+.dj_iequirks .dijitComboButtonRtl BUTTON {
+	
+	float:left;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitComboBoxRtl .dijitArrowButtonContainer {
+	
+	border-right-width: 1px !important;
+	border-right-style: solid !important;
+	border-left-width: 0px !important;
+	border-left-style: none !important;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
+	border-right: 1px solid black !important;
+	border-left: 0px none black !important;
+}
+.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
+	right: 0;
+	left: auto;
+}
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitArrowButtonContainer {
+	float: left;
+}
+.dijitCalendarRtl .dijitCalendarNextYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarRtl .dijitCalendarPreviousYear {
+	margin:0 0 0 0.55em;
+}
+.dijitSliderRtl .dijitSliderImageHandleV {
+	left:auto;
+}
+.dijitSliderRtl .dijitSliderImageHandleH {
+	left:-50%;
+}
+.dijitSliderRtl .dijitSliderMoveableH {
+	right:auto;
+	left:0;
+}
+.dijitSliderRtl .dijitRuleContainerV {
+	float:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleContainerV {
+	text-align:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelV {
+	text-align:left;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelH {
+	zoom:1;
+}
+.dijitSliderRtl .dijitSliderProgressBarH {
+	
+	float:right;
+	right:0;
+	left:auto;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+	background-position:right;
+	padding-right:25px;
+}
+.dijitTabRtl .dijitTabCloseButton {
+	margin-left: 0px;
+	margin-right: 1em;
+}
+.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
+	width:100%;
+}
+.dijitColorPaletteRtl .dijitColorPaletteUnder {
+	
+	left: auto;
+	right: 0;
+}
+.dijitSelectRtl .dijitButtonContents {
+	text-align: right;
+}
+.tundra .dijitCalendarRtl .dijitCalendarDecrease {
+	background-position: -30px top;
+}
+.tundra .dijitCalendarRtl .dijitCalendarIncrease {
+	background-position: 0px top;
+}
+ .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,
+.dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {
+        border-top: 0px; 
+}
+.tundra .dijitDialogRtl .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
+.tundra .dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.tundra .dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitToolbarRtl .dijitToolbarSeparator {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
+}
+.tundra .dijitMenuItemRtl .dijitMenuExpand {
+	background-position: -7px 0px;
+}
+.tundra .dijitTreeNodeRtl,
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {
+	
+    background-image: none;
+}
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {
+	
+	background-image: url(images/treeExpand_minus_rtl.gif);
+}
+.tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {
+	background-image: url(images/treeExpand_plus_rtl.gif);
+}
+.tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
+	background-position: -7px 0px;
+}
+.tundra .dijitTabRtl {
+	-moz-box-orient:horizontal;
+	text-align: right;
+}
+.tundra .dijitTabRtl .dijitTabInnerDiv {
+	padding:2px 9px 2px 8px;
+}
+.tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {
+	
+	padding-bottom: 3px;
+	padding-top: 1px;
+}
+.tundra .tabStripButtonRtl .dijitTabInnerDiv {
+	padding: 3px 2px 4px 2px;
+}
+.tundra .dijitTabPaneWrapper {
+	#zoom: 1;
+}
+.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {
+	margin-left: 1px !important;
+}
+.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {
+	margin-right: 1px !important;
+}
+.tundra .dijitTabContainerLeft-tabs .dijitTabRtl,
+.tundra .dijitTabContainerRight-tabs .dijitTabRtl {
+	margin-left:0px;
+}
+.dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {
+	
+	width : 0.1% !important;
+}
+.dj_iequirks-rtl .tundra .dijitTabContainerTopNone,
+.dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {
+	
+	border-left: 1px solid #fff;
+	border-right: 1px solid #fff;
+}
+.tundra .dijitSliderRtl .dijitSliderProgressBarH,
+.tundra .dijitSliderRtl .dijitSliderRemainingBarH,
+.tundra .dijitSliderRtl .dijitSliderLeftBumper,
+.tundra .dijitSliderRtl .dijitSliderRightBumper,
+.tundra .dijitSliderRtl .dijitSliderTopBumper {
+	background-position: top right;
+}
+.tundra .dijitSliderRtl .dijitSliderProgressBarV,
+.tundra .dijitSliderRtl .dijitSliderRemainingBarV,
+.tundra .dijitSliderRtl .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.tundra .dijitSliderRtl .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.tundra .dijitSliderRtl .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.tundra .dijitSliderRtl .dijitSliderIncrementIconH {
+	background-position: -7px 0px;
+}
+.tundra .dijitSliderRtl .dijitSliderDecrementIconH {
+	background-position: -14px 0px;
+}
Index: trunk/web/dojo/dijit/themes/tundra/ColorPalette.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/ColorPalette.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/ColorPalette.css	(revision 9)
@@ -0,0 +1,5 @@
+.dijitColorPalette {
+	border:1px solid #7eabcd;
+	background:#fff;
+	-moz-border-radius: 0px !important;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Tree.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Tree.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Tree.css	(revision 9)
@@ -0,0 +1,72 @@
+
+.tundra .dijitTreeNode {
+    background-image : url('images/i.gif');
+    background-repeat : repeat-y;
+    zoom: 1;	
+}
+.tundra .dijitTreeIsLast {
+    background: url('images/i_half.gif') no-repeat;
+}
+.tundra .dijitTreeIsRoot {
+    margin-left: 0;
+    background-image: none;
+}
+.tundra .dijitTreeExpando {
+    width: 18px;
+    height: 18px;
+}
+.tundra .dijitTreeRow {
+	
+	padding-bottom: 2px;
+}
+.tundra .dijitTreeContent {
+    min-height: 18px;
+    min-width: 18px;
+}
+.tundra .dijitTreeRowSelected .dijitTreeLabel {
+	background:#e2ebfe;
+}
+.tundra .dijitTreeRowHover {
+	
+	background-image: url(images/treeHover.png);
+	background-repeat: repeat;
+	background-color: transparent !important;
+}
+.tundra .dijitTreeExpandoOpened {
+	background-image: url('images/treeExpand_minus.gif');
+}
+.tundra .dijitTreeExpandoClosed {
+	background-image: url('images/treeExpand_plus.gif');
+}
+.tundra .dijitTreeExpandoLeaf {
+	background-image: url('images/treeExpand_leaf.gif');
+}
+.tundra .dijitTreeExpandoLoading {
+	background-image: url('images/treeExpand_loading.gif');
+}
+.tundra .dijitTreeIcon {
+	width: 16px;
+	height: 16px;
+}
+.tundra .dijitFolderOpened {
+	background: url('images/folderOpened.gif') no-repeat;
+}
+.tundra .dijitFolderClosed {
+	background: url('images/folderClosed.gif') no-repeat;
+}
+.tundra .dijitLeaf {
+	background: url('images/leaf.gif') no-repeat;
+}
+.tundra .dijitTreeNode .dojoDndItemBefore,
+.tundra .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.tundra .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	
+	border-top: 2px solid #369;
+}
+.tundra .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	
+	border-bottom: 2px solid #369;
+}
Index: trunk/web/dojo/dijit/themes/tundra/Dialog.css
===================================================================
--- trunk/web/dojo/dijit/themes/tundra/Dialog.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/tundra/Dialog.css	(revision 9)
@@ -0,0 +1,134 @@
+
+.tundra .dijitDialog {
+	background: #fff;
+	border: 1px solid #7eabcd;
+	padding: 0px;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+}
+.tundra .dijitDialogPaneContent {
+	background: #fff;
+	border-top: 1px solid #d3d3d3;
+	padding:10px;
+}
+.tundra .dijitDialogTitleBar {
+	
+	background: #fafafa url("images/titleBar.png") repeat-x top left;
+	padding: 5px 6px 3px 6px;
+	outline:0; 
+}
+.tundra .dijitDialogTitle {
+	
+	font-weight: bold;
+	padding: 0px 4px;
+}
+.tundra .dijitDialogCloseIcon {
+	
+	
+	background: url("images/tabClose.png") no-repeat right top;
+	position: absolute;
+	vertical-align: middle;
+	right: 6px;
+	top: 4px;
+	height: 15px;
+	width: 15px;
+}
+.dj_ie6 .tundra .dijitDialogCloseIcon {
+	background : url("images/tabClose.gif") no-repeat right top;
+}
+.tundra .dijitDialogCloseIconHover {
+	background: url("images/tabCloseHover.png") no-repeat right top;
+}
+.dj_ie6 .tundra .dijitDialogCloseIconHover {
+	background : url("images/tabCloseHover.gif") no-repeat right top;
+}
+.tundra .dijitTooltip,
+.tundra .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 13px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 13px;
+}
+.tundra .dijitTooltipContainer {
+	
+	background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
+	border: 1px solid #7eabcd;
+	padding: 0.45em;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+}
+.tundra .dijitTooltipConnector {
+	
+	border:0px;
+	z-index: 2;
+}
+.tundra .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 3px;
+}
+.tundra .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 3px;
+	background:url("images/tooltipConnectorUp.png") no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipBelow .dijitTooltipConnector {
+	
+	background-image: url("images/tooltipConnectorUp.gif");
+}
+.tundra .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 3px;
+	background:url("images/tooltipConnectorDown.png") no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie6 .tundra .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -3px;
+}
+.tundra .dijitTooltipLeft {
+	padding-right: 14px;
+}
+.dj_ie6 .tundra .dijitTooltipLeft {
+	padding-left: 15px;
+}
+.tundra .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background:url("images/tooltipConnectorRight.png") no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipLeft .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorRight.gif");
+}
+.tundra .dijitTooltipRight {
+	padding-left: 14px;
+}
+.tundra .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background:url("images/tooltipConnectorLeft.png") no-repeat top left;
+	width:16px;
+	height:14px;
+}
+.dj_ie .tundra .dijitTooltipRight .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorLeft.gif");
+}
+.dj_webkit .tundra .dijitTooltipContainer {
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+}
Index: trunk/web/dojo/dijit/themes/claro/Tree.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Tree.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Tree.css	(revision 9)
@@ -0,0 +1,88 @@
+
+.claro .dijitTreeNode {
+    zoom: 1;	
+}
+.claro .dijitTreeIsRoot {
+    background-image: none;
+}
+.claro .dijitTreeRow {
+	
+	padding: 4px 1px 2px 0px;
+	margin-left: 1px;
+	background-image: url("images/commonHighlight.png");
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	border-color: rgba(118,157,192,0);
+	background-color: rgba(171,214,255,0);
+	-webkit-transition-property:background-color, border-color;
+	-webkit-transition-duration:.25s ;
+	-webkit-transition-timing-function: ease-out;
+}
+.dj_ie6 .claro .dijitTreeRow {
+	background-image: none;
+}
+.claro .dijitTreeRowSelected {
+	background-repeat:repeat-x;
+	background-color:#d8edff;
+	padding: 3px 0px 1px;
+	margin-left: 0px;
+	border:solid 1px #c3e2fd;
+	color:#000;
+}
+.claro .dijitTreeRowHover {
+	background-color:#abd6ff;
+	padding: 3px 0px 1px;
+	margin-left: 0px;
+	border:solid 1px #769dc0;
+	color:#000;
+	-webkit-transition-duration:.25s ; 
+}
+.claro .dijitTreeRowActive {
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	padding: 3px 0px 1px;
+	margin-left: 0px;
+	border:solid 1px #769dc0;
+	color:#000;
+}
+.dj_ie6 .claro .dijitTreeRowActive {
+	background-image: none;
+}
+.claro .dijitTreeRowFocused {
+	background-repeat: repeat;
+}
+.claro .dijitTreeExpando {
+	background-image: url('images/treeExpandImages.png');
+    width: 16px;
+    height: 16px;
+	background-position: -35px 0px		
+}
+.dj_ie6 .claro .dijitTreeExpando {
+	background-image: url('images/treeExpandImages8bit.png');
+}
+.claro .dijitTreeRowHover .dijitTreeExpandoOpened {
+	background-position: -53px 0px;
+}
+.claro .dijitTreeExpandoClosed {
+	background-position: 1px 0px;
+}
+.claro .dijitTreeRowHover .dijitTreeExpandoClosed {
+	background-position: -17px 0px;
+}
+.claro .dijitTreeExpandoLeaf{
+	background-image:none;
+}
+.claro .dijitTreeExpandoLoading {
+	background-image: url('images/loadingAnimation.gif');
+}
+.claro .dijitTreeNode .dojoDndItemBefore,
+.claro .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.claro .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	border-top: 2px solid #369;
+}
+.claro .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	border-bottom: 2px solid #369;
+}
Index: trunk/web/dojo/dijit/themes/claro/Dialog.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Dialog.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Dialog.css	(revision 9)
@@ -0,0 +1,162 @@
+
+.claro .dijitDialog {
+	border: 1px solid #769dc0;
+	box-shadow:0px 1px 5px rgba(0,0,0,0.25);
+	-webkit-box-shadow:0px 1px 5px rgba(0,0,0,0.25);
+	-moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+} 
+.claro .dijitDialogPaneContent {
+	background: #fff repeat-x top left;
+	border-top: 1px solid #769dc0;
+	padding:10px 8px;
+	position: relative;
+}
+.claro .dijitDialogPaneContentArea {
+	 
+	margin: -10px -8px;
+	padding: 10px 8px;
+}
+.claro .dijitDialogPaneActionBar {
+	
+	background-color: #f2f2f2;
+	padding: 3px 5px 2px 7px;
+	text-align: right;
+	border-top: 1px solid #cdcdcd;
+	margin: 10px -8px -10px;
+}
+.claro .dijitDialogPaneActionBar .dijitButton {
+	float: none;
+}
+.claro .dijitDialogTitleBar {
+	
+	border: 1px solid #fff;
+	border-top:none;
+	background-color: #abd6ff;
+	background-image: url("images/titlebar.png");
+	background-repeat:repeat-x;
+	padding: 5px 7px 4px 7px;
+}
+.claro .dijitDialogTitle {
+	
+	padding: 0px 1px;
+	font-size:1.091em;
+}
+.claro .dijitDialogCloseIcon {
+	
+	background: url("images/dialogCloseIcon.png");
+	background-repeat:no-repeat;
+	position: absolute;
+	right: 5px;
+	height: 15px;
+	width: 21px;
+}
+.dj_ie6 .claro .dijitDialogCloseIcon {
+	background-image: url("images/dialogCloseIcon8bit.png");
+}
+.claro .dijitDialogCloseIconHover {
+	background-position:-21px;
+}
+.claro .dijitDialogCloseIconActive {
+	background-position:-42px;
+}
+.claro .dijitTooltip,
+.claro .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 13px;
+	padding-left:3px;
+	padding-right:3px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 13px;
+	padding-left:3px;
+	padding-right:3px;
+}
+.claro .dijitTooltipContainer {
+	
+	background-color:#fff;
+	background-image:url("images/tooltip.png");
+	background-repeat:repeat-x;
+	background-position:-575px 100%;
+	border:1px solid #769DC0;
+	padding:6px 8px;
+	border-radius: 4px;
+	-webkit-border-radius: 4px;
+	-moz-border-radius: 4px;
+	box-shadow:0px 1px 3px rgba(0,0,0,0.25);
+	-webkit-box-shadow:0px 1px 3px rgba(0,0,0,0.25);
+	-moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.25);
+	font-size: 1em;
+} 
+.dj_ie6 .claro .dijitTooltipContainer {
+	background-image: none;
+}
+.claro .dijitTooltipConnector {
+	
+	border: 0px;
+	z-index: 2;
+	background-image:url("images/tooltip.png");
+	background-repeat:no-repeat;
+	width:16px;
+	height:14px;
+}
+.dj_ie6 .claro .dijitTooltipConnector {
+	background-image:url("images/tooltip8bit.png");
+}
+.claro .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 3px;
+}
+.claro .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 3px;
+	background-position:-31px 0%;
+	width:16px;
+	height:14px;
+}
+.claro .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 3px;
+	background-position:-15px 0%;
+	width:16px;
+	height:14px;
+}
+.dj_ie7 .claro .dijitTooltipAbove .dijitTooltipConnector,
+.dj_ie6 .claro .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -1px;
+}
+.claro .dijitTooltipLeft {
+	padding-right: 14px;
+}
+.dj_ie6 .claro .dijitTooltipLeft {
+	padding-left: 15px;
+}
+.claro .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background-position:0px 0%;
+	width:16px;
+	height:14px;
+}
+.claro .dijitTooltipRight {
+	padding-left: 14px;
+}
+.claro .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background-position:-48px 0%;
+	width:16px;
+	height:14px;
+}
+.claro .dijitDialogUnderlay {
+	background: #fff;
+}
Index: trunk/web/dojo/dijit/themes/claro/claro.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/claro.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/claro.css	(revision 9)
@@ -0,0 +1,4687 @@
+.dijitReset {
+	margin:0;
+	border:0;
+	padding:0;
+	line-height:normal;
+	font: inherit;
+	color: inherit;
+}
+.dijit_a11y .dijitReset {
+	-moz-appearance: none; 
+}
+.dijitInline {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dijitHidden {
+	
+	display: none !important;
+}
+.dijitVisible {
+	
+	display: block !important;	
+	position: relative;			
+}
+.dijitInputContainer {
+	
+	#zoom: 1;
+	overflow: hidden;
+	float: none !important; 
+	position:relative;
+}
+.dj_ie INPUT.dijitTextBox,
+.dj_ie .dijitTextBox INPUT {
+	font-size: 100%;
+}
+.dijitTextBox .dijitSpinnerButtonContainer,
+.dijitTextBox .dijitArrowButtonContainer,
+.dijitTextBox .dijitValidationContainer {
+	float: right;
+	text-align: center;
+}
+.dijitTextBox INPUT.dijitInputField {
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+}
+.dijitTextBox .dijitValidationContainer {
+	display: none;
+}
+.dijitInlineTable {
+	
+	display:inline-table;
+	display:inline-block;		
+	#zoom: 1; 
+	#display:inline; 
+	box-sizing: content-box; -moz-box-sizing: content-box;
+	border:0;
+	padding:0;
+}
+.dijitTeeny {
+	font-size:1px;
+	line-height:1px;
+}
+.dijitOffScreen {
+	position: absolute;
+	visibility: hidden;
+	left: 50%;
+	top: -10000px;
+}
+.dijitPopup {
+	position: absolute;
+	background-color: transparent;
+	margin: 0;
+	border: 0;
+	padding: 0;
+}
+.dijit_a11y .dijitPopup,
+.dijit_ally .dijitPopup DIV,
+.dijit_a11y .dijitPopup TABLE,
+.dijit_a11y .dijitTooltipContainer {
+	background-color: white !important;
+}
+.dijitPositionOnly {
+	
+	padding: 0 !important;
+	border: 0 !important;
+	background-color: transparent !important;
+	background-image: none !important;
+	height: auto !important;
+	width: auto !important;
+}
+.dijitNonPositionOnly {
+	
+	float: none !important;
+	position: static !important;
+	margin: 0 0 0 0 !important;
+	vertical-align: middle !important;
+}
+.dijitBackgroundIframe {
+	
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	z-index: -1;
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+.dijitDisplayNone {
+	
+	display:none !important;
+}
+.dijitContainer {
+	
+	overflow: hidden;	
+}
+.dijit_a11y * {
+	background-image:none !important;
+}
+.dijit_a11y .dijitIcon,
+.dijit_a11y DIV.dijitArrowButtonInner, 
+.dijit_a11y SPAN.dijitArrowButtonInner,
+.dijit_a11y IMG.dijitArrowButtonInner,
+.dijit_a11y .dijitCalendarIncrementControl {
+	
+	display: none;
+}
+.dijitSpinner DIV.dijitArrowButtonInner {
+	display: block; 
+}
+.dijit_a11y .dijitA11ySideArrow {
+	display: inline !important; 
+	cursor: pointer;
+}
+.dijit_a11y .dijitCalendarDateLabel {
+	padding: 1px;
+}
+.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+	border-style: dotted !important;
+	border-width: 1px;
+	padding: 0px;
+}
+.dijit_a11y .dijitCalendarDateTemplate {
+	padding-bottom: 0.1em !important;	
+}
+.dijit_a11y .dijit * {
+	background:white !important;
+	color:black !important;
+}
+.dijit_a11y .dijitButtonNode {
+	border-color: black!important;
+	border-style: outset!important;
+	border-width: medium!important;
+}
+.dijit_a11y .dijitTextBoxReadOnly .dijitInputField,
+.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitButtonNode * {
+	vertical-align: middle;
+}
+.dijitButtonNode .dijitArrowButtonInner {
+	
+	background: no-repeat center;
+	width: 12px;
+	height: 12px;
+	direction: ltr; 
+}
+.dijitLeft {
+	
+	background-position:left top;
+	background-repeat:no-repeat;
+}
+.dijitStretch {
+	
+	white-space:nowrap;			
+	background-repeat:repeat-x;
+}
+.dijitRight {
+	
+	#display:inline;				
+	background-position:right top;
+	background-repeat:no-repeat;
+}
+.dijitToggleButton,
+.dijitButton,
+.dijitDropDownButton,
+.dijitComboButton {
+	
+	margin: 0.2em;
+}
+.dijitButtonContents {
+	display: block;		
+}
+td.dijitButtonContents {
+	display: table-cell;	
+}
+.dijitButtonNode IMG {
+	
+	vertical-align:middle;
+	
+}
+TABLE.dijitComboButton { 
+	
+	border-collapse: collapse;
+	border:0;
+	padding:0;
+	margin:0;
+}
+.dijitToolbar .dijitComboButton {
+	
+	border-collapse: separate;
+}
+.dijitToolbar .dijitToggleButton,
+.dijitToolbar .dijitButton,
+.dijitToolbar .dijitDropDownButton,
+.dijitToolbar .dijitComboButton {
+	margin: 0;
+}
+.dijitToolbar .dijitButtonContents {
+	
+	padding: 1px 2px;
+}
+.dj_ie .dijitComboButton {
+	
+	margin-bottom: -3px;
+}
+.dj_webkit .dijitToolbar .dijitDropDownButton {
+	padding-left: 0.3em;
+}
+.dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
+	padding:0;
+}
+.dijitButtonNode {
+	
+	border:1px solid gray;
+	margin:0;
+	line-height:normal;
+	vertical-align: middle;
+	#vertical-align: auto;
+	text-align:center;
+	white-space: nowrap;
+}
+.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
+	
+	line-height:inherit;
+}
+.dijitTextBox .dijitButtonNode {
+	border-width: 0;
+}
+.dijitButtonNode,
+.dijitButtonNode * {
+	cursor: pointer;
+}
+.dj_ie .dijitButtonNode {
+	
+	zoom: 1;
+}
+.dj_ie .dijitButtonNode button {
+	
+	overflow: visible;
+}
+DIV.dijitArrowButton {
+	float: right;
+}
+.dijitTextBox {
+	border: solid black 1px;
+	#overflow: hidden; 
+	width: 15em;	
+	vertical-align: middle;
+	#vertical-align: auto;
+}
+.dijitTextBoxReadOnly,
+.dijitTextBoxDisabled {
+	color: gray;
+}
+.dj_webkit .dijitTextBoxDisabled INPUT {
+	color: #eee; 
+}
+.dj_webkit TEXTAREA.dijitTextAreaDisabled {
+	color: #333; 
+}
+.dj_gecko .dijitTextBoxReadOnly INPUT,
+.dj_gecko .dijitTextBoxDisabled INPUT {
+	-moz-user-input: none; 
+}
+.dijitPlaceHolder {
+	
+	color: #AAAAAA;
+	font-style: italic;
+	position: absolute;
+	top: 0;
+	left: 0;
+	#filter: ""; 
+}
+.dijitTimeTextBox {
+	width: 8em;
+}
+.dijitTextBox INPUT:focus {
+	outline: none;	
+}
+.dijitTextBoxFocused {
+	outline: auto 5px -webkit-focus-ring-color;
+}
+.dijitTextBox INPUT {
+	float: left; 
+}
+.dijitInputInner {
+	
+	border:0 !important;
+	vertical-align:middle !important;
+	background-color:transparent !important;
+	width:100% !important;
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+}
+.dijit_a11y .dijitTextBox INPUT {
+	margin: 0 !important;
+}
+.dijitTextBoxError INPUT.dijitValidationInner,
+.dijitTextBox INPUT.dijitArrowButtonInner {
+	
+	text-indent: -1em !important;
+	direction: ltr !important;
+	text-align: left !important;
+	height: auto !important;
+	#text-indent: 0 !important;
+	#letter-spacing: -5em !important;
+	#text-align: right !important;
+}
+.dj_ie .dijitTextBox INPUT,
+.dj_ie INPUT.dijitTextBox {
+	overflow-y: visible; 
+	line-height: normal; 
+}
+.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
+.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
+	line-height: 86%; 
+}
+.dj_ie6 .dijitTextBox INPUT,
+.dj_ie6 INPUT.dijitTextBox,
+.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
+.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
+.dj_iequirks INPUT.dijitTextBox {
+	line-height: 100%; 
+}
+.dijit_a11y INPUT.dijitValidationInner,
+.dijit_a11y INPUT.dijitArrowButtonInner {
+	
+	text-indent: 0 !important;
+	width: 1em !important;
+	#text-align: left !important;
+}
+.dijitTextBoxError .dijitValidationContainer {
+	display: inline;
+	cursor: default;
+}
+.dijitSpinner .dijitSpinnerButtonContainer,
+.dijitComboBox .dijitArrowButtonContainer {
+	
+	border-width: 0 0 0 1px !important; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	
+	border-width: 0;
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	clear: both; 
+}
+.dijit_a11y .dijitTextBox .dijitValidationContainer,
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
+	
+	border: solid black !important;
+	border-width: 0 0 0 1px !important;
+}
+.dj_ie .dijitToolbar .dijitComboBox {
+	
+	vertical-align: middle;
+}
+.dijitTextBox .dijitSpinnerButtonContainer {
+	width: 1em;
+	position: relative !important;
+	overflow: hidden;
+}
+.dijitSpinner .dijitSpinnerButtonInner {
+	width:1em;
+	visibility:hidden !important; 
+	overflow-x:hidden;
+}
+.dijitComboBox .dijitButtonNode,
+.dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 0;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border: 0 none !important;
+}
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
+.dijit_a11y .dijitSpinnerButtonContainer INPUT {
+	width: 1em !important;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
+	margin: 0 auto !important; 
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.3em !important;
+	padding-right: 0.3em !important;
+	margin-left: 0.3em !important;
+	margin-right: 0.3em !important;
+	width: 1.4em !important;
+}
+.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.0em !important; 
+	padding-right: 0.0em !important;
+	width: 1em !important;
+}
+.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0.1em !important;
+	margin-right: 0.1em !important;
+	width: 1em !important;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+	width: 2em !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	
+	padding: 0;
+	position: absolute !important;
+	right: 0;
+	float: none;
+	height: 50%;
+	width: 100%;
+	bottom: auto;
+	left: 0;
+	right: auto;
+}
+.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: auto;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
+	overflow: visible !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
+	top: 50%;
+	border-top-width: 1px !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
+	#bottom: 50%;	
+	top: 0;
+}
+.dijitSpinner .dijitArrowButtonInner {
+	margin: auto;
+	overflow-x: hidden;
+	height: 100% !important;
+}
+.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
+	height: auto !important;
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	-moz-transform: scale(0.5);
+	-moz-transform-origin: center top;
+	-webkit-transform: scale(0.5);
+	-webkit-transform-origin: center top;
+	-o-transform: scale(0.5);
+	-o-transform-origin: center top;
+	transform: scale(0.5);
+	transform-origin: left top;
+	padding-top: 0;
+	padding-bottom: 0;
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	width: 100%;
+}
+.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	zoom: 50%; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
+	overflow: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 100%;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 1em; 
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	visibility: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	vertical-align:top;
+	visibility: visible;
+}
+.dijit_a11y .dijitSpinnerButtonContainer {
+	width: 1em;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 1px 0px 0px 0px;
+	border-style: solid !important;
+}
+.dijitCheckBox,
+.dijitRadio,
+.dijitCheckBoxInput {
+	padding: 0;
+	border: 0;
+	width: 16px;
+	height: 16px;
+	background-position:center center;
+	background-repeat:no-repeat;
+	overflow: hidden;
+}
+.dijitCheckBox INPUT,
+.dijitRadio INPUT {
+	margin: 0;
+	padding: 0;
+	display: block;
+}
+.dijitCheckBoxInput {
+	
+	opacity: 0.01;
+}
+.dj_ie .dijitCheckBoxInput {
+	filter: alpha(opacity=0);
+}
+.dijit_a11y .dijitCheckBox,
+.dijit_a11y .dijitRadio {
+	
+	width: auto !important;
+	height: auto !important;
+}
+.dijit_a11y .dijitCheckBoxInput {
+	opacity: 1;
+	filter: none;
+	width: auto;
+	height: auto;
+}
+.dijitProgressBarEmpty {
+	
+	position:relative;overflow:hidden;
+	border:1px solid black; 	
+	z-index:0;			
+}
+.dijitProgressBarFull {
+	
+	position:absolute;
+	overflow:hidden;
+	z-index:-1;
+	top:0;
+	width:100%;
+}
+.dj_ie6 .dijitProgressBarFull {
+	height:1.6em;
+}
+.dijitProgressBarTile {
+	
+	position:absolute;
+	overflow:hidden;
+	top:0;
+	left:0;
+	bottom:0;
+	right:0;
+	margin:0;
+	padding:0;
+	width:auto;
+	height:auto;
+	background-color:#aaa;
+	background-attachment: fixed;
+}
+.dijit_a11y .dijitProgressBarTile {
+	
+	border-width:2px;
+	border-style:solid;
+	background-color:transparent !important;
+}
+.dj_ie6 .dijitProgressBarTile {
+	
+	position:static;
+	
+	height:1.6em;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarLabel {
+	visibility:hidden;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+}
+.dijitProgressBarIndeterminateHighContrastImage {
+	display:none;
+}
+.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
+	display:block;
+	position:absolute;
+	top:0;
+	bottom:0;
+	margin:0;
+	padding:0;
+	width:100%;
+	height:auto;
+}
+.dijitProgressBarLabel {
+	display:block;
+	position:static;
+	width:100%;
+	text-align:center;
+	background-color:transparent !important;
+}
+.dijitTooltip {
+	position: absolute;
+	z-index: 2000;
+	display: block;
+	
+	left: 50%;
+	top: -10000px;
+	overflow: visible;
+}
+.dijitTooltipContainer {
+	border: solid black 2px;
+	background: #b8b5b5;
+	color: black;
+	font-size: small;
+}
+.dijitTooltipFocusNode {
+	padding: 2px 2px 2px 2px;
+}
+.dijitTooltipConnector {
+	position: absolute;
+}
+.dijit_a11y .dijitTooltipConnector {
+	display: none;	
+}
+.dijitTooltipData {
+	display:none;
+}
+.dijitLayoutContainer {
+	position: relative;
+	display: block;
+	overflow: hidden;
+}
+body .dijitAlignTop,
+body .dijitAlignBottom,
+body .dijitAlignLeft,
+body .dijitAlignRight {
+	position: absolute;
+	overflow: hidden;
+}
+body .dijitAlignClient { position: absolute; }
+.dijitBorderContainer, .dijitBorderContainerNoGutter {
+	position:relative;
+	overflow: hidden;
+}
+.dijitBorderContainerPane,
+.dijitBorderContainerNoGutterPane {
+	position: absolute !important;	
+	z-index: 2;		
+}
+.dijitBorderContainer > .dijitTextArea {
+	
+	resize: none;
+}
+.dijitGutter {
+	
+	position: absolute;
+	font-size: 1px;		
+}
+.dijitSplitter {
+	position: absolute;
+	overflow: hidden;
+	z-index: 10;		
+	background-color: #fff;
+	border-color: gray;
+	border-style: solid;
+	border-width: 0;
+}
+.dj_ie .dijitSplitter {
+	z-index: 1;	
+}
+.dijitSplitterActive {
+	z-index: 11 !important;
+}
+.dijitSplitterCover {
+	position:absolute;
+	z-index:-1;
+	top:0;
+	left:0;
+	width:100%;
+	height:100%;
+}
+.dijitSplitterCoverActive {
+	z-index:3 !important;
+}
+.dj_ie .dijitSplitterCover {
+	background: white;
+	filter: alpha(opacity=0);
+}
+.dijitSplitterH {
+	height: 7px;
+	border-top:1px;
+	border-bottom:1px;
+	cursor: ns-resize;
+}
+.dijitSplitterV {
+	width: 7px;
+	border-left:1px;
+	border-right:1px;
+	cursor: ew-resize;
+}
+.dijitSplitContainer {
+	position: relative;
+	overflow: hidden;
+	display: block;
+}
+.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
+	outline-style:dotted;
+	outline-width: 2px;
+}
+.dijitSplitPane {
+	position: absolute;
+}
+.dijitSplitContainerSizerH,
+.dijitSplitContainerSizerV {
+	position:absolute;
+	font-size: 1px;
+	cursor: move;
+	cursor: w-resize;
+	background-color: ThreeDFace;
+	border: 1px solid;
+	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
+	margin: 0;
+}
+.dijitSplitContainerSizerH .thumb, .dijitSplitterV .dijitSplitterThumb {
+	overflow:hidden;
+	position:absolute;
+	top:49%;
+}
+.dijitSplitContainerSizerV .thumb, .dijitSplitterH .dijitSplitterThumb {
+	position:absolute;
+	left:49%;
+}
+.dijitSplitterShadow,
+.dijitSplitContainerVirtualSizerH,
+.dijitSplitContainerVirtualSizerV {
+	font-size: 1px;
+	background-color: ThreeDShadow;
+	-moz-opacity: 0.5;
+	opacity: 0.5;
+	filter: Alpha(Opacity=50);
+	margin: 0;
+}
+.dj_ie .dijitSplitterV, .dijitSplitContainerVirtualSizerH {
+	cursor: w-resize;
+}
+.dj_ie .dijitSplitterH, .dijitSplitContainerSizerV, .dijitSplitContainerVirtualSizerV {
+	cursor: n-resize;
+}
+.dijit_a11y .dijitSplitterH {
+	border-top:1px solid #d3d3d3 !important;
+	border-bottom:1px solid #d3d3d3 !important;
+}
+.dijit_a11y .dijitSplitterV {
+	border-left:1px solid #d3d3d3 !important;
+	border-right:1px solid #d3d3d3 !important;
+}
+.dijitContentPane {
+	display: block;
+	overflow: auto;	
+}
+.dijitContentPaneSingleChild {
+	
+	overflow: hidden;
+}
+.dijitTitlePane {
+	display: block;
+	overflow: hidden;
+}
+.dijitTitlePaneTitle {
+	cursor: pointer;
+}
+.dijitFixedOpen {
+	
+	cursor: default;
+}
+.dijitTitlePaneTitle * {
+	vertical-align: middle;
+}
+.dijitTitlePane .dijitArrowNodeInner {
+	
+	display: none;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
+	
+	display:inline !important;
+	font-family: monospace;		
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+	
+	display:none;
+}
+.dj_ie6 .dijitTitlePaneContentOuter,
+.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
+	
+	zoom: 1;
+}
+.dijitColorPalette {
+	border: 1px solid #999;
+	background: #fff;
+	position: relative;
+}
+img.dijitColorPaletteUnder {
+	
+	border-style: none;
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+.dijitColorPalette .dijitPaletteTable {
+	
+	padding: 2px 3px 3px 3px;
+	position: relative;
+	overflow: hidden;
+	outline: 0;
+	border-collapse: separate;
+}
+.dj_ie6 .dijitColorPalette .dijitPaletteTable,
+.dj_ie7 .dijitColorPalette .dijitPaletteTable,
+.dj_iequirks .dijitColorPalette .dijitPaletteTable {
+	
+	padding: 0;
+	margin: 2px 3px 3px 3px;
+}
+.dijitColorPalette .dijitPaletteCell {
+	
+	height: 20px;
+	width: 20px;
+	font-size: 1px;
+	vertical-align: middle;
+	text-align: center;
+}
+.dijitColorPalette .dijitPaletteImg {
+	
+	width: 16px;
+	height: 14px;
+	border: 1px solid #999;
+	cursor: default;
+	vertical-align: middle;
+}
+.dj_iequirks .dijitColorPalette .dijitPaletteImg {
+	margin: 1px;	
+}
+.dijitPaletteTable td {
+		padding: 0px;
+}
+.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	
+	border: 1px solid #000;
+}
+.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+	border: 2px solid #000;
+}
+.dijit_a11y .dijitColorPalette .dijitPaletteTable,
+.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
+	
+	background-color: transparent !important;
+}
+.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
+	border: 3px dotted #000;	
+	margin: -1px;
+}
+.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 2px solid #000 !important;
+}
+.dijitAccordionContainer {
+	border:1px solid #b7b7b7;
+	border-top:0 !important;
+}
+.dijitAccordionTitle {
+	cursor: pointer;
+}
+.dijitAccordionTitleSelected {
+	cursor: default;
+}
+.dijitAccordionTitle .arrowTextUp,
+.dijitAccordionTitle .arrowTextDown {
+	display: none;
+	font-size: 0.65em;
+	font-weight: normal !important;
+}
+.dijit_a11y .dijitAccordionTitle .arrowTextUp,
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
+	display: inline;
+}
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
+	display: none;
+}
+.dj_ie6 .dijitAccordionTitle,
+.dj_iequirks .dijitAccordionTitle {
+	
+	zoom: 1;
+}
+.dijitCalendarContainer {
+	width: auto;	
+}
+.dijitCalendarContainer th, .dijitCalendarContainer td {
+	padding: 0;
+}
+.dijitCalendarNextYear {
+	margin:0 0 0 0.55em;
+}
+.dijitCalendarPreviousYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarIncrementControl {
+	vertical-align: middle;
+}
+.dijitCalendarIncrementControl,
+.dijitCalendarDateTemplate,
+.dijitCalendarMonthLabel,
+.dijitCalendarPreviousYear,
+.dijitCalendarNextYear {
+	cursor: pointer;
+}
+.dijitCalendarDisabledDate {
+	color: gray;
+	text-decoration: line-through;
+	cursor: default;
+}
+.dijitSpacer {
+	
+  	position: relative;
+  	height: 1px;
+  	overflow: hidden;
+  	visibility: hidden;
+}
+.dijitMenu {
+	border:1px solid black;
+	background-color:white;
+}
+.dijitMenuTable {
+	border-collapse:collapse;
+	border-width:0;
+	background-color:white;
+}
+.dj_webkit .dijitMenuTable td[colspan="2"]{
+	border-right:hidden;
+}
+.dijitMenuItem {
+	text-align: left;
+	white-space: nowrap;
+	padding:.1em .2em;
+	cursor:pointer;
+}
+.dijitMenuPassive .dijitMenuItemHover,
+.dijitMenuItemSelected {
+	
+	background-color:black;
+	color:white;
+}
+.dijitMenuItemIcon, .dijitMenuExpand {
+	background-repeat: no-repeat;
+}
+.dijitMenuItemDisabled * {
+	
+	opacity:0.5;
+	cursor:default;
+}
+.dj_ie .dijit_a11y .dijitMenuItemDisabled,
+.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
+.dj_ie .dijitMenuItemDisabled *,
+.dj_ie .dijitMenuItemDisabled td {
+	color:gray !important;
+	filter: alpha(opacity=35);
+}
+.dijitMenuItemLabel {
+	position: relative;
+	vertical-align: middle;
+}
+.dijit_a11y .dijitMenuItemSelected {
+	border: 1px dotted black !important;
+}
+.dj_ff3 .dijit_a11y .dijitMenuItem td {
+	padding: none !important;
+	background:none !important;
+}
+.dijit_a11y .dijitMenuItemSelected .dijitMenuItemLabel {
+	border-width: 1px;
+	border-style: solid;
+}
+.dj_ie8 .dijit_a11y .dijitMenuItemLabel {
+	position:static;
+}
+.dijitMenuExpandA11y {
+	display: none;
+}
+.dijit_a11y .dijitMenuExpandA11y {
+	display: inline;
+}
+.dijitMenuSeparator td {
+	border: 0;
+	padding: 0;
+}
+.dijitMenuSeparatorTop {
+	height: 50%;
+	margin: 0;
+	margin-top:3px;
+	font-size: 1px;
+}
+.dijitMenuSeparatorBottom {
+	height: 50%;
+	margin: 0;
+	margin-bottom:3px;
+	font-size: 1px;
+}
+.dijitCheckedMenuItemIconChar {
+	vertical-align: middle;
+	visibility:hidden;
+}
+.dijitCheckedMenuItemChecked .dijitCheckedMenuItemIconChar {
+	visibility: visible;
+}
+.dijit_a11y .dijitCheckedMenuItemIconChar {
+	display:inline !important;
+}
+.dijit_a11y .dijitCheckedMenuItemIcon {
+	display: none;
+}
+.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
+	
+	margin: 0px;
+}
+.dijitStackController .dijitToggleButtonChecked * {
+	cursor: default;	
+}
+.dijitTabContainerNoLayout {
+	width: 100%;	
+}
+.dijitTabContainerBottom-tabs,
+.dijitTabContainerTop-tabs,
+.dijitTabContainerLeft-tabs,
+.dijitTabContainerRight-tabs {
+	overflow: visible !important;  
+}
+.dijitTabContainerBottom-container,
+.dijitTabContainerTop-container,
+.dijitTabContainerLeft-container,
+.dijitTabContainerRight-container {
+	z-index:0;
+	overflow: hidden;
+	border: 1px solid black;
+}
+.nowrapTabStrip {
+	width: 50000px;
+	display: block;
+	position: relative;
+}
+.dijitTabListWrapper {
+	overflow: hidden;
+}
+.dijit_a11y .tabStripButton img {
+	
+	display: none;
+}
+.dijitTabContainerTop-tabs {
+	border-bottom: 1px solid black;
+}
+.dijitTabContainerTop-container {
+	border-top: 0px;
+}
+.dijitTabContainerLeft-tabs {
+	border-right: 1px solid black;
+	float: left;
+}
+.dijitTabContainerLeft-container {
+	border-left: 0px;
+}
+.dijitTabContainerBottom-tabs {
+	border-top: 1px solid black;
+}
+.dijitTabContainerBottom-container {
+	border-bottom: 0px;
+}
+.dijitTabContainerRight-tabs {
+	border-left: 1px solid black;
+	float: left;
+}
+.dijitTabContainerRight-container {
+	border-right: 0px;
+}
+DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
+	cursor: auto;
+}
+.dijitTab {
+	position:relative;
+	cursor:pointer;
+	white-space:nowrap;
+	z-index:3;
+}
+.dijitTab * {
+	
+	vertical-align: middle;
+}
+.dijitTabChecked {
+	cursor: default;	
+}
+.dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;	
+}
+.dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;	
+}
+.dijitTabContainerLeft-tabs .dijitTab {
+	left: 1px;	
+}
+.dijitTabContainerRight-tabs .dijitTab {
+	left: -1px;	
+}
+.dijitTabContainerTop-tabs .dijitTab,
+.dijitTabContainerBottom-tabs .dijitTab {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+}
+.dijitTabInnerDiv {
+	position:relative;
+}
+.tabStripButton {
+	z-index: 12;
+}
+.dijitTabButtonDisabled .tabStripButton {
+	display: none;
+}
+.dijitTabCloseButton {
+	margin-left: 1em;
+}
+.dijitTabCloseText {
+	display:none;
+}
+.dijit_a11y .dijitTabCloseButton {
+	background-image: none !important;
+	width: auto !important;
+	height: auto !important;
+	border: thin dotted;	
+}
+.dijit_a11y .dijitTabCloseButtonHover {
+	border:thin solid;	
+}
+.dijit_a11y .dijitTabCloseText {
+	display: inline;
+}
+.dijit_a11y .dijitTabChecked {
+	
+	border-style:dashed !important;
+}
+.dijit_a11y .dijitTabInnerDiv {
+	border-left:none !important;
+ }
+.dijitTabPane,
+.dijitStackContainer-child,
+.dijitAccordionContainer-child {
+	
+    border: none !important;
+}
+.dijitInlineEditBoxDisplayMode {
+	border: 1px solid transparent;	
+	cursor: text;
+}
+.dijit_a11y .dijitInlineEditBoxDisplayMode,
+.dj_ie6 .dijitInlineEditBoxDisplayMode {
+	
+	border: none;
+}
+.dijitInlineEditBoxDisplayModeHover,
+.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
+.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
+	
+	background-color: #e2ebf2;
+	border: solid 1px black;
+}
+.dijitInlineEditBoxDisplayModeDisabled {
+	cursor: default;
+}
+.dijitTreeIndent {
+	
+	width: 19px;
+}
+.dijitTreeRow, .dijitTreeContent {
+	white-space: nowrap;
+}
+.dijitTreeRow img {
+	
+	vertical-align: middle;
+}
+.dijitTreeContent {
+    cursor: default;
+}
+.dijitExpandoText {
+	display: none;
+}
+.dijit_a11y .dijitExpandoText {
+	display: inline;
+	padding-left: 10px;
+	padding-right: 10px;
+	font-family: monospace;
+	border-style: solid;
+	border-width: thin;
+	cursor: pointer;
+}
+.dijitTreeLabel {
+	margin: 0px 4px;
+}
+.dijitDialog {
+	position: absolute;
+	z-index: 999;
+	overflow: hidden;       
+}
+.dijitDialogTitleBar {
+	cursor: move;
+}
+.dijitDialogFixed .dijitDialogTitleBar {
+	cursor:default;
+}
+.dijitDialogCloseIcon {
+	cursor: pointer;
+}
+.dijitDialogUnderlayWrapper {
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 998;
+	display: none;
+	background: transparent !important;
+}
+.dijitDialogUnderlay {
+	background: #eee;
+	opacity: 0.5;
+}
+.dj_ie .dijitDialogUnderlay {
+	filter: alpha(opacity=50);
+}
+.dijit_a11y .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitDialog {
+	opacity: 1 !important;
+	background-color: white !important;
+}
+.dijitDialog .closeText {
+	display:none;
+	
+	position:absolute;
+}
+.dijit_a11y .dijitDialog .closeText {
+	display:inline;
+}
+.dijitSliderMoveable {
+	z-index:99;
+	position:absolute !important;
+	display:block;
+	vertical-align:middle;
+}
+.dijitSliderMoveableH {
+	right:0;
+}
+.dijitSliderMoveableV {
+	right:50%;
+}
+.dijit_a11y DIV.dijitSliderImageHandle,
+.dijitSliderImageHandle {
+	margin:0;
+	padding:0;
+	position:relative !important;
+	border:8px solid gray;
+	width:0;
+	height:0;
+	cursor: pointer;
+}
+.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
+	font-size: 0;
+}
+.dj_ie7 .dijitSliderImageHandle {
+	overflow: hidden; 
+}
+.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
+	overflow: visible; 
+}
+.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
+	border:4px solid #000;
+	height:8px;
+	width:8px;
+}
+.dijitSliderImageHandleV {
+	top:-8px;
+	right: -50%;
+}
+.dijitSliderImageHandleH {
+	left:50%;
+	top:-5px;
+	vertical-align:top;
+}
+.dijitSliderBar {
+	border-style:solid;
+	border-color:black;
+	cursor: pointer;
+}
+.dijitSliderBarContainerV {
+	position:relative;
+	height:100%;
+	z-index:1;
+}
+.dijitSliderBarContainerH {
+	position:relative;
+	z-index:1;
+}
+.dijitSliderBarH {
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBarV {
+	width:4px;
+	border-width:0 1px;
+}
+.dijitSliderProgressBar {
+	background-color:red;
+	z-index:1;
+}
+.dijitSliderProgressBarV {
+	position:static !important;
+	height:0%;
+	vertical-align:top;
+	text-align:left;
+}
+.dijitSliderProgressBarH {
+	position:absolute !important;
+	width:0%;
+	vertical-align:middle;
+	overflow:visible;
+}
+.dijitSliderRemainingBar {
+	overflow:hidden;
+	background-color:transparent;
+	z-index:1;
+}
+.dijitSliderRemainingBarV {
+	height:100%;
+	text-align:left;
+}
+.dijitSliderRemainingBarH {
+	width:100% !important;
+}
+.dijitSliderBumper {
+	overflow:hidden;
+	z-index:1;
+}
+.dijitSliderBumperV {
+	width:4px;
+	height:8px;
+	border-width:0 1px;
+}
+.dijitSliderBumperH {
+	width:8px;
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBottomBumper,
+.dijitSliderLeftBumper {
+	background-color:red;
+}
+.dijitSliderTopBumper,
+.dijitSliderRightBumper {
+	background-color:transparent;
+}
+.dijitSliderDecoration {
+	text-align:center;
+}
+.dijitSliderV TD {
+	position: relative; 
+}
+.dijitSliderDecorationH {
+	width: 100%;
+}
+.dijitSliderDecorationV {
+	height: 100%;
+}
+.dijitSliderButton {
+	font-family:monospace;
+	margin:0;
+	padding:0;
+	display:block;
+}
+.dijit_a11y .dijitSliderButtonInner {
+	visibility:visible !important;
+}
+.dijitSliderButtonContainer {
+	text-align:center;
+	height:0;	
+}
+.dijitSliderButtonContainer * {
+	cursor: pointer;
+}
+.dijitSlider .dijitButtonNode {
+	padding:0;
+	display:block;
+}
+.dijitRuleContainer {
+	position:relative;
+	overflow:visible;
+}
+.dijitRuleContainerV {
+	height:100%;
+	line-height:0;
+	float:left;
+	text-align:left;
+}
+.dj_opera .dijitRuleContainerV {
+	line-height:2%;
+}
+.dj_ie .dijitRuleContainerV {
+	line-height:normal;
+}
+.dj_gecko .dijitRuleContainerV {
+	margin:0 0 1px 0; 
+}
+.dijitRuleMark {
+	position:absolute;
+	border:1px solid black;
+	line-height:0;
+	height:100%;
+}
+.dijitRuleMarkH {
+	width:0;
+	border-top-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+}
+.dijitRuleLabelContainer {
+	position:absolute;
+}
+.dijitRuleLabelContainerH {
+	text-align:center;
+	display:inline-block;
+}
+.dijitRuleLabelH {
+	position:relative;
+	left:-50%;
+}
+.dijitRuleLabelV {
+	
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+.dijitRuleMarkV {
+	height:0;
+	border-right-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+	width:100%;
+	left:0;
+}
+.dj_ie .dijitRuleLabelContainerV {
+	margin-top:-.55em;
+}
+.dijit_a11y .dijitSliderReadOnly,
+.dijit_a11y .dijitSliderDisabled {
+	opacity:0.6;
+}
+.dj_ie .dijit_a11y .dijitSliderReadOnly .dijitSliderBar,
+.dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
+	filter: alpha(opacity=40);
+}
+.dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
+	font-family: monospace; 
+	font-size: 1em;
+	line-height: 1em;
+	height: auto;
+	width: auto;
+	margin: 0px 4px;
+}
+.dijit_a11y .dijitButtonContents .dijitButtonText,
+.dijit_a11y .dijitTab .tabLabel {
+	display: inline !important;
+}
+.dijitTextArea {
+	width:100%;
+	overflow-y: auto;	
+}
+.dijitTextArea[cols] {
+	width:auto; 
+}
+.dj_ie .dijitTextAreaCols {
+	width:auto;
+}
+.dijitToolbarSeparator {
+	height: 18px;
+	width: 5px;
+	padding: 0 1px;
+	margin: 0;
+}
+.dijitIEFixedToolbar {
+	position:absolute;
+	
+	top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.dijitEditor {
+	display: block;	
+}
+.dijitEditorDisabled,
+.dijitEditorReadOnly {
+	color: gray;
+}
+.dijitTimePickerItemInner {
+	text-align:center;
+	border:0;
+	padding:2px 8px 2px 8px;
+}
+.dijitTimePickerTick,
+.dijitTimePickerMarker {
+	border-bottom:1px solid gray;
+}
+.dijitTimePicker .dijitDownArrowButton {
+	border-top: none !important;
+}
+.dijitTimePickerTick {
+	color:#CCC;
+}
+.dijitTimePickerMarker {
+	color:black;
+	background-color:#CCC;
+}
+.dijitTimePickerItemSelected {
+	font-weight:bold;
+	color:#333;
+	background-color:#b7cdee;
+}
+.dijitTimePickerItemHover {
+	background-color:gray;
+	color:white;
+	cursor:pointer;
+}
+.dijit_a11y .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	border: solid 4px black;
+}
+.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
+	border: dashed 4px black;
+}
+.dijitToggleButtonIconChar {
+	
+	display:none !important;
+}
+.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
+	display:inline !important;
+	visibility:hidden;
+}
+.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
+	font-family: "Arial Unicode MS";	
+}
+.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
+	display: inline !important; 
+	visibility:visible !important;
+}
+.dijitArrowButtonChar {
+        display:none !important;
+}
+.dijit_a11y .dijitArrowButtonChar {
+        display:inline !important;
+}
+.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
+.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
+	display:none !important;
+}
+.dijitSelect {
+	margin: 0.2em;
+	border-collapse: collapse;
+}
+.dj_ie .dijitSelect,
+.dj_ie7 .dijitSelect,
+.dj_iequirks .dijitSelect {
+	vertical-align: middle; 
+}
+.dj_ie8 .dijitSelect .dijitButtonText {
+	vertical-align: top;
+}
+.dijitToolbar .dijitSelect {
+	margin: 0;
+}
+.dj_webkit .dijitToolbar .dijitSelect {
+	padding-left: 0.3em;
+}
+.dijit_a11y .dijitSelectDisabled .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitSelect .dijitButtonContents {
+	padding: 0px;
+	background: transparent none;
+	white-space: nowrap;
+	text-align: left;
+}
+.dijitSelectFixedWidth .dijitButtonContents {
+	width: 100%;
+}
+.dijitSelectMenu .dijitMenuItemIcon {
+	
+	display:none;
+}
+.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
+.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
+	
+	position: static;
+}
+.dijitSelectLabel *
+{
+	vertical-align: baseline;
+}
+.dijitSelectSelectedOption * {
+	font-weight: bold;
+}
+.dijitSelectMenu {
+	border-width: 1px;
+}
+.dijitSelectMenu .dijitMenuTable {
+	margin: 0px;
+	background-color: transparent;
+}
+.dijitForceStatic {
+	position: static !important;
+}
+.dijitReadOnly *,
+.dijitDisabled *,
+.dijitReadOnly,
+.dijitDisabled {
+	
+	cursor: default;
+}
+.claro {
+	font-family:Verdana,Arial,Helvetica,sans-serif;
+	font-size: .688em;
+	color: #131313;
+}
+h1 {
+	font-size: 1.545em; 
+	font-weight: normal;
+	line-height: 1em; 
+	margin-top: 1em;
+	margin-bottom:0.727em;
+}
+.claro .dijitDialog h1 { 
+	margin-top:0em; 
+}
+h2 { 
+	font-size: 1.364em; 
+	line-height: 1.455em; 
+	margin-top:1em; 
+	margin-bottom:0.60em;
+	font-weight: normal;
+}
+h3, h4, h5, h6 {
+	font-size:1.091em; 
+	font-weight: normal; 
+	line-height: 1.5em; 
+	margin-top: 1.5em; 
+	margin-bottom: 0;
+}
+p { 
+	font-size: 1em; 
+	line-height: 1.3em;
+}
+blockquote { 
+	font-size: 0.916em; 
+	margin-top: 3.272em; 
+	margin-bottom: 3.272em; 
+	line-height: 1.636em; 
+	padding: 1.636em; 
+	border-top: 1px solid #ccc; 
+	border-bottom: 1px solid #ccc;
+}
+ol li, ul li { 
+	font-size: 1em; 
+	line-height: 1.5em; 
+	margin: 0;
+}
+pre, code { 
+	font-size:115%;
+	*font-size:100%;
+	font-family:inherit; 
+	background-color: #efefef; 
+	border: 1px solid #ccc;
+}
+pre { 
+	border-width: 1px 0; 
+	padding: 1.5em;
+}
+table {  font-size:100%; }
+table.dojoTabular { 
+	border-collapse: collapse; 
+	border-spacing: 0; 
+	border: 1px solid #ccc; 
+	margin: 0 1.5em;
+}
+.dojoTabular th { 
+	text-align: center; 
+	font-weight: bold;
+}
+table.dojoTabular thead, table.dojoTabular tfoot { 
+	background-color: #efefef; 
+	border: 1px solid #ccc; 
+	border-width: 1px 0; 
+}
+table.dojoTabular thead tr th,
+table.dojoTabular thead tr td,
+table.dojoTabular tbody tr td,
+table.dojoTabular tfoot tr td { 
+	padding: 0.25em 0.5em;
+}
+	
+.dijitIconSave,
+.dijitIconPrint,
+.dijitIconCut,
+.dijitIconCopy,
+.dijitIconClear,
+.dijitIconDelete,
+.dijitIconUndo,
+.dijitIconEdit,
+.dijitIconNewTask,
+.dijitIconEditTask,
+.dijitIconEditProperty,
+.dijitIconTask,
+.dijitIconFilter,
+.dijitIconConfigure,
+.dijitIconSearch,
+.dijitIconApplication,
+.dijitIconBookmark,
+.dijitIconChart,
+.dijitIconConnector,
+.dijitIconDatabase,
+.dijitIconDocuments,
+.dijitIconMail,
+.dijitLeaf,
+.dijitIconFile,
+.dijitIconFunction,
+.dijitIconKey,
+.dijitIconPackage,
+.dijitIconSample,
+.dijitIconTable,
+.dijitIconUsers,
+.dijitFolderClosed,
+.dijitIconFolderClosed,
+.dijitFolderOpened,
+.dijitIconFolderOpen,
+.dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitIconSave,
+.dj_ie6 .dijitIconPrint,
+.dj_ie6 .dijitIconCut,
+.dj_ie6 .dijitIconCopy,
+.dj_ie6 .dijitIconClear,
+.dj_ie6 .dijitIconDelete,
+.dj_ie6 .dijitIconUndo,
+.dj_ie6 .dijitIconEdit,
+.dj_ie6 .dijitIconNewTask,
+.dj_ie6 .dijitIconEditTask,
+.dj_ie6 .dijitIconEditProperty,
+.dj_ie6 .dijitIconTask,
+.dj_ie6 .dijitIconFilter,
+.dj_ie6 .dijitIconConfigure,
+.dj_ie6 .dijitIconSearch,
+.dj_ie6 .dijitIconApplication,
+.dj_ie6 .dijitIconBookmark,
+.dj_ie6 .dijitIconChart,
+.dj_ie6 .dijitIconConnector,
+.dj_ie6 .dijitIconDatabase,
+.dj_ie6 .dijitIconDocuments,
+.dj_ie6 .dijitIconMail,
+.dj_ie6 .dijitLeaf,
+.dj_ie6 .dijitIconFile,
+.dj_ie6 .dijitIconFunction,
+.dj_ie6 .dijitIconKey,
+.dj_ie6 .dijitIconPackage,
+.dj_ie6 .dijitIconSample,
+.dj_ie6 .dijitIconTable,
+.dj_ie6 .dijitIconUsers,
+.dj_ie6 .dijitFolderClosed,
+.dj_ie6 .dijitIconFolderClosed,
+.dj_ie6 .dijitFolderOpened,
+.dj_ie6 .dijitIconFolderOpen,
+.dj_ie6 .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
+}
+.dijitDisabled .dijitIconSave,
+.dijitDisabled .dijitIconPrint,
+.dijitDisabled .dijitIconCut,
+.dijitDisabled .dijitIconCopy,
+.dijitDisabled .dijitIconClear,
+.dijitDisabled .dijitIconDelete,
+.dijitDisabled .dijitIconUndo,
+.dijitDisabled .dijitIconEdit,
+.dijitDisabled .dijitIconNewTask,
+.dijitDisabled .dijitIconEditTask,
+.dijitDisabled .dijitIconEditProperty,
+.dijitDisabled .dijitIconTask,
+.dijitDisabled .dijitIconFilter,
+.dijitDisabled .dijitIconConfigure,
+.dijitDisabled .dijitIconSearch,
+.dijitDisabled .dijitIconApplication,
+.dijitDisabled .dijitIconBookmark,
+.dijitDisabled .dijitIconChart,
+.dijitDisabled .dijitIconConnector,
+.dijitDisabled .dijitIconDatabase,
+.dijitDisabled .dijitIconDocuments,
+.dijitDisabled .dijitIconMail,
+.dijitDisabled .dijitLeaf,
+.dijitDisabled .dijitIconFile,
+.dijitDisabled .dijitIconFunction,
+.dijitDisabled .dijitIconKey,
+.dijitDisabled .dijitIconPackage,
+.dijitDisabled .dijitIconSample,
+.dijitDisabled .dijitIconTable,
+.dijitDisabled .dijitIconUsers,
+.dijitDisabled .dijitFolderClosed,
+.dijitDisabled .dijitIconFolderClosed,
+.dijitDisabled .dijitFolderOpened,
+.dijitDisabled .dijitIconFolderOpen,
+.dijitDisabled .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
+}
+.dijitIconSave { background-position: 0px; }
+.dijitIconPrint { background-position: -16px; }
+.dijitIconCut { background-position: -32px; }
+.dijitIconCopy { background-position: -48px; }
+.dijitIconClear { background-position: -64px; }
+.dijitIconDelete { background-position: -80px; }
+.dijitIconUndo { background-position: -96px; }
+.dijitIconEdit { background-position: -112px; }
+.dijitIconNewTask { background-position: -128px; }
+.dijitIconEditTask { background-position: -144px; }
+.dijitIconEditProperty { background-position: -166px; }
+.dijitIconTask { background-position: -176px; }
+.dijitIconFilter { background-position: -192px; }
+.dijitIconConfigure { background-position: -208px; }
+.dijitIconSearch { background-position: -224px; }
+.dijitIconError { background-position: -496px; } 
+.dijitIconApplication { background-position: -240px; }
+.dijitIconBookmark { background-position: -256px; }
+.dijitIconChart { background-position: -272px; }
+.dijitIconConnector { background-position: -288px; }
+.dijitIconDatabase { background-position: -304px; }
+.dijitIconDocuments { background-position: -320px; }
+.dijitIconMail { background-position: -336px; }
+.dijitIconFile, .dijitLeaf { background-position: -352px; }
+.dijitIconFunction { background-position: -368px; }
+.dijitIconKey { background-position: -384px; }
+.dijitIconPackage{ background-position: -400px; }
+.dijitIconSample { background-position: -416px; }
+.dijitIconTable { background-position: -432px; }
+.dijitIconUsers { background-position: -448px; }
+.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
+.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
+.claro .dijitPopup {
+	box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+	-webkit-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+	-moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+}
+.claro .dijitTooltipDialogPopup {
+	
+	box-shadow: none;
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+}
+.claro .dijitComboBoxHighlightMatch {
+	background-color:#a5beda;
+}
+.claro .dijitFocusedLabel {
+	
+	outline: 1px dotted #666666;
+}
+.claro .dijitContentPaneLoading {
+	background:url(images/loadingAnimation.gif) no-repeat left center;
+	padding-left:25px;
+}
+.claro .dijitContentPaneError {
+    background:url(../../icons/images/commonIconsObjActEnabled.png) no-repeat left center;
+    background-position: -496px; 
+	no-repeat left center;
+	padding-left:25px;
+}
+.claro .dojoDndItemBefore,
+.claro .dojoDndItemAfter{
+	border-top: 1px solid #769DC0;
+}
+.claro .dojoDndItemOver {
+	cursor:pointer;
+	}
+.claro table.dojoDndAvatar {
+	border: 1px solid #b5bcc7;
+	border-collapse: collapse;
+	background-color: #fff;
+	-webkit-box-shadow:0px 1px 3px rgba(0, 0, 0, .25);
+}
+.claro .dojoDndAvatarHeader td	{ 
+	height: 20px;
+	padding-left:21px;
+}
+.claro.dojoDndMove .dojoDndAvatarHeader, .claro.dojoDndCopy .dojoDndAvatarHeader {
+	background-image: url(images/dnd.png);
+	background-repeat: no-repeat;
+	background-position:2px -122px;
+}
+.claro .dojoDndAvatarItem td {
+	padding: 5px;
+}
+.claro.dojoDndMove .dojoDndAvatarHeader	{
+	background-color: #f58383; 
+	background-position:2px -103px;
+}
+.claro.dojoDndCopy .dojoDndAvatarHeader	{
+	background-color: #f58383; 
+	background-position:2px -68px;
+}
+.claro.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{
+	background-color: #97e68d; 
+	background-position:2px -33px;
+}
+.claro.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{
+	background-color: #97e68d;
+	background-position:2px 2px;
+}
+.claro .dijitTextBoxError .dijitValidationContainer {
+	background-color: #d46363;
+	background-image: url(form/images/error.png);
+	background-position: top center;
+	border: solid #d46464 0px;
+	border-left-width: 1px;
+	width: 9px;
+}
+.claro .dijitTextBoxError .dijitValidationIcon {
+	width: 0px;
+	background-color: transparent !important; 
+}
+.claro .dijitTextBox .dijitInputContainer,
+.claro .dijitTextArea,
+.claro .dijitInputField .dijitPlaceHolder {
+	padding: 2px;
+}
+.claro .dijitTextBox,
+.claro .dijitTextBox .dijitButtonNode {
+	
+	border-color: #b5bcc7;
+	-webkit-transition-property:background-color, border;
+ 	-webkit-transition-duration:.35s;
+}
+.claro .dijitTextBox {
+	background-color: #f7fcff;
+}
+.claro .dijitTextBoxHover,
+.claro .dijitTextBoxHover .dijitButtonNode {
+	border-color: #769dc0;
+ 	-webkit-transition-duration:.25s;
+}
+.claro .dijitTextBoxHover {
+	background-color: #e9f4fe;
+	background-image: url(form/images/textBox_back.png);
+	background-repeat: repeat-x;
+}
+.claro .dijitTextBoxError,
+.claro .dijitTextBoxError .dijitButtonNode {
+	border-color: #d46464;
+}
+.claro .dijitTextBoxError,
+.claro .dijitTextBoxError .dijitInputContainer {
+	background-color: #fdf7f7;
+}
+.claro .dijitTextBoxFocused,
+.claro .dijitTextBoxFocused .dijitButtonNode {
+	border-color:#769dc0;
+ 	-webkit-transition-duration:.1s;
+}
+.claro .dijitTextBoxFocused {
+	background-color: #fff;
+	background-image: url(form/images/textBox_back.png);
+	background-repeat: repeat-x;
+}
+.claro .dijitTextBoxFocused .dijitInputContainer {
+	background: #fff;
+}
+.claro .dijitTextBoxErrorFocused,
+.claro .dijitTextBoxErrorFocused .dijitButtonNode {
+	border-color: #ce4f4f;
+}
+.claro .dijitTextBoxDisabled,
+.claro .dijitTextBoxDisabled .dijitButtonNode {
+	border-color: #d3d3d3;
+}
+.claro .dijitTextBoxDisabled {
+	background-color: #efefef;
+	background-image: none;
+	color: #818181;
+}
+.claro .dijitComboBox .dijitArrowButtonInner {
+	background-image: url(form/images/commonFormArrows.png);
+	background-position:-35px 53%;
+	background-repeat: no-repeat;
+	margin: 0px;
+	width:16px;
+	height:100%;
+	border: 1px solid #fff;
+}
+.claro .dijitTextBox .dijitInputField {
+	padding-top: 1px; 
+	padding-bottom: 1px;
+}
+.claro .dijitTextBox .dijitInputInner {
+	
+	padding: 1px 2px 1px 0; 
+}
+.claro .dijitTextBox .dijitValidationContainer {
+	padding: 0 0 2px 0; 
+}
+.claro .dijitComboBox .dijitButtonNode {
+	background-color: #ebeef4;
+	background-image: url(form/images/formHighlight.png);
+	background-repeat:repeat-x;
+}
+.claro .dijitComboBoxHover .dijitButtonNode {
+	background-color:#abd6ff;
+}
+.claro .dijitComboBoxHover .dijitArrowButtonInner {
+	background-position:-70px 53%;
+}
+.claro .dijitComboBoxFocused .dijitButtonNode {
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	padding: 1px;
+}	
+.claro .dijitComboBoxFocused .dijitArrowButtonInner {
+	background-position:-70px 53%;
+	border: 0px none;
+}
+.claro div.dijitComboBoxDisabled .dijitArrowButtonInner {
+	
+	background-position:0px 50%;
+	background-color:#f1f1f1;
+}
+.dj_ff3 .claro .dijitInputField input[type="hidden"] {
+	display: none;
+	height: 0;
+	width: 0;
+}
+.dj_ie6 .claro .dijitTextBox,
+.dj_ie6 .claro .dijitComboBox .dijitButtonNode {
+	background-image: none;
+}
+.dj_quirks .claro .dijitComboBox .dijitArrowButtonInner {
+	border: 0px;
+}
+.dj_quirks .claro .dijitComboBox .dijitArrowButtonContainer {
+	padding: 1px;
+}
+.claro .dijitButtonNode {
+	
+	-webkit-transition-property:background-color;
+ 	-webkit-transition-duration:.3s;
+}
+.claro .dijitButton .dijitButtonNode,
+.claro .dijitDropDownButton .dijitButtonNode,
+.claro .dijitComboButton .dijitButtonNode,
+.claro .dijitToggleButton .dijitButtonNode {
+	
+	border: 1px solid #769dc0;
+	padding:2px 4px 4px 4px;
+	background-image: url(form/images/button.png);
+	background-position: center top;
+	background-repeat: repeat-x;
+	background-color: #e4f2ff;
+	border-radius: 4px;
+	-moz-border-radius: 4px;
+	-webkit-border-radius: 4px;
+	box-shadow:0px 1px 1px rgba(0,0,0,0.15);
+	-webkit-box-shadow:0px 1px 1px rgba(0,0,0,0.15);
+	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.15);	
+}
+.claro .dijitComboButton .dijitArrowButton {
+	border-left-width: 0px;
+	padding: 4px 2px 4px 2px;	
+}
+.claro .dijitArrowButtonInner {
+	width: 15px;
+	height: 15px;
+	margin: 0 auto;
+	background-image:url(form/images/buttonArrows.png);
+	background-repeat:no-repeat;
+	background-position:-51px 53%;
+}
+.claro .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -77px 53%;
+}
+.claro .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -26px 53%;
+}
+.claro .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: 0px 53%;
+}
+.claro .dijitDisabled .dijitArrowButtonInner {
+	background-position: -151px 53%;
+}
+.claro .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -177px 53%;
+}
+.claro .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -126px 53%;
+}
+.claro .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -100px 53%;
+}
+.claro .dijitButtonText {
+	padding: 0 0.3em;
+	text-align: center;
+}
+.claro .dijitDisabled .dijitButtonText {
+	color: #7F7F7F;
+}
+.claro .dijitButtonHover .dijitButtonNode,
+.claro .dijitDropDownButtonHover .dijitButtonNode,
+.claro .dijitComboButton .dijitButtonNodeHover, 
+.claro .dijitComboButton .dijitDownArrowButtonHover,
+.claro .dijitToggleButtonHover .dijitButtonNode {
+	background-color: #afd9ff;
+	color:#000;
+ 	-webkit-transition-duration:.2s;
+}
+.claro .dijitButtonActive .dijitButtonNode, 
+.claro .dijitDropDownButtonActive .dijitButtonNode,
+.claro .dijitComboButtonActive .dijitButtonNode,
+.claro .dijitToggleButtonActive .dijitButtonNode {
+	background-color: #99cfff;
+	box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
+ 	-webkit-transition-duration:.1s;
+}
+.claro .dijitButtonDisabled,
+.claro .dijitDropDownButtonDisabled,
+.claro .dijitComboButtonDisabled,
+.claro .dijitToggleButtonDisabled {
+	background-image: none;
+	outline: none;
+}
+.claro .dijitButtonDisabled .dijitButtonNode,
+.claro .dijitDropDownButtonDisabled .dijitButtonNode,
+.claro .dijitComboButtonDisabled .dijitButtonNode,
+.claro .dijitToggleButtonDisabled .dijitButtonNode { 
+	background-position:0px -149px;
+	background-color: #e3e3e3;
+	border: solid 1px #c9c9c9;
+	color: #696969;
+	box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
+}
+.claro .dijitComboButtonDisabled .dijitArrowButton{ 
+	border-left-width: 0px;
+}
+.claro table.dijitComboButton {
+	border-collapse: separate;	
+}
+.dj_ie6 .claro .dijitButtonNode {
+	background-image: none;
+}
+.claro .dijitComboButton .dijitStretch {
+	-moz-border-radius: 4px 0px 0px 4px;
+	-webkit-border-top-left-radius: 4px;
+	-webkit-border-top-right-radius: 0px;
+	-webkit-border-bottom-right-radius: 0px;
+	-webkit-border-bottom-left-radius: 4px;
+}
+.claro .dijitComboButton .dijitArrowButton {
+	-moz-border-radius: 0px 4px 4px 0px;
+	-webkit-border-top-left-radius: 0px;
+	-webkit-border-top-right-radius: 4px;
+	-webkit-border-bottom-right-radius: 4px;
+	-webkit-border-bottom-left-radius: 0px;
+}
+.claro .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url(images/checkmarkNoBorder.png);
+}
+.dj_ie6 .claro .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url(images/checkmarkNoBorder.gif);
+}
+.claro .dijitCheckBox,
+.claro .dijitCheckBoxIcon			{
+	background-image: url(form/images/checkboxRadioButtonStates.png); 
+	background-repeat: no-repeat;
+	width: 15px;
+	height: 16px;
+	margin: 0 2px 0 0;
+	padding: 0;
+}
+.dj_ie6 .claro .dijitCheckBox,
+.dj_ie6 .claro .dijitCheckBoxIcon			{
+	background-image: url(form/images/checkboxAndRadioButtons_IE6.png); 
+}
+.claro .dijitCheckBox,
+.claro .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -15px;
+}
+.claro .dijitCheckBoxChecked,
+.claro .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: -0px;
+}
+.claro .dijitCheckBoxDisabled {
+	
+	background-position: -75px;
+}
+.claro .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -60px;
+}
+.claro .dijitCheckBoxHover {
+	
+	background-position: -45px;
+}
+.claro .dijitCheckBoxCheckedHover {
+	
+	background-position: -30px;
+}
+.claro .dijitToggleButton .dijitRadio,
+.claro .dijitToggleButton .dijitRadioIcon {
+	background-image: url(form/images/checkboxRadioButtonStates.png);
+}
+.dj_ie6 .claro .dijitToggleButton .dijitRadio,
+.dj_ie6 .claro .dijitToggleButton .dijitRadioIcon {
+	background-image: url(form/images/checkboxAndRadioButtons_IE6.png);
+}
+.claro .dijitRadio,
+.claro .dijitRadioIcon	{		
+	background-image: url(form/images/checkboxRadioButtonStates.png); 
+	background-repeat: no-repeat;
+	width: 15px;
+	height: 15px;
+	margin: 0px 2px 0px 0px;
+	padding: 0px;
+}
+.dj_ie6 .claro .dijitRadio,
+.dj_ie6 .claro .dijitRadioIcon	{		
+	background-image: url(form/images/checkboxAndRadioButtons_IE6.png); 
+}
+.claro .dijitRadio{
+	
+	background-position: -105px;
+}
+.claro .dijitToggleButton .dijitRadioIcon {
+	
+	background-position: -107px;
+}
+.claro .dijitRadioDisabled {
+	
+	background-position: -165px;
+}
+.claro .dijitRadioHover {
+	
+	background-position: -135px;
+}
+.claro .dijitRadioChecked{
+	background-position: -90px;
+}
+.claro .dijitToggleButtonChecked .dijitRadioIcon {
+	background-position: -92px;
+}
+.claro .dijitRadioCheckedHover{
+	background-position: -120px;
+}
+.claro .dijitRadioCheckedDisabled {
+	
+	background-position: -150px;
+}
+.claro .dijitSelect .dijitButtonText {
+	padding: 0px 5px 2px 5px;
+}
+.claro .dijitSelect {
+	border: 1px solid #b5bcc7;
+	background-color: #f7fcff;
+	border-collapse: separate;
+}
+.dj_ie6 .claro .dijitSelect,
+.dj_ie6 .claro .dijitSelect .dijitButtonNode {
+	background-image:none;
+}
+.claro .dijitSelect .dijitButtonContents {
+	border: 0px solid #b5bcc7;
+	border-right-width: 1px;
+}
+.claro .dijitSelect .dijitArrowButton {
+	padding: 0;
+	border: 1px solid #fff;	
+	border-top:none;
+	background-color:#ebeef4;
+	background-image: url(form/images/formHighlight.png);
+	background-repeat:repeat-x;
+}
+.claro .dijitSelect .dijitArrowButton .dijitArrowButtonInner {
+	background-image: url(form/images/commonFormArrows.png);
+	background-position:-35px 70%;
+	background-repeat: no-repeat;
+	width:16px;
+	height:16px;
+	display:block;
+}
+.claro .dijitSelectHover {
+	border: 1px solid #769dc0;
+	background-color: #e9f4fe;
+	background-image: url(form/images/textBox_back.png);
+	background-repeat: repeat-x;
+}
+.claro .dijitSelectHover .dijitButtonContents {
+	border-color:#81a5c6;
+}
+.claro .dijitSelectHover .dijitArrowButton {
+	background-color:#abd6ff;
+}
+.claro .dijitSelectHover .dijitArrowButton .dijitArrowButtonInner {
+	background-position:-70px 70%;
+}
+.claro .dijitSelectFocused {
+	border: 1px solid #769dc0;
+}
+.claro .dijitSelectFocused .dijitButtonContents {
+	border-color:#81a5c6;
+}
+.claro .dijitSelectFocused .dijitArrowButton {
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	border: none;
+	padding: 0px 1px;
+}
+.claro .dijitSelectFocused .dijitArrowButton .dijitArrowButtonInner {
+	background-position:-70px 70%;
+	margin-bottom: 1px;
+}
+.claro .dijitSelectDisabled {
+	border: 1px solid #d3d3d3;
+	background-color: #efefef;
+	background-image: none;
+	color: #818181;
+}
+.claro .dijitSelectDisabled .dijitArrowButton { 
+	background-color: #efefef;
+}
+.claro .dijitSelectDisabled .dijitArrowButton .dijitArrowButtonInner {
+	background-position:0px 70%
+}
+.claro .dijitSelectMenu td.dijitMenuItemIconCell,
+.claro .dijitSelectMenu td.dijitMenuArrowCell { 
+	
+	display: none;  
+}
+.claro .dijitSelectMenu td.dijitMenuItemLabel {
+	
+	padding-left: 5px;
+	padding-right: 5px;
+}
+.claro .dijitSelectMenu .dijitMenuSeparatorTop {
+	border-bottom:1px solid #769dc0;
+}
+.claro .dijitTabPaneWrapper {
+	background:#fff;
+}
+.claro .dijitTabPaneWrapper,
+.claro .dijitTabContainerTop-tabs,
+.claro .dijitTabContainerBottom-tabs,
+.claro .dijitTabContainerLeft-tabs,
+.claro .dijitTabContainerRight-tabs {
+	
+	border-color: #b5bcc7;
+}
+.claro .dijitTabCloseButton {
+	background: url(layout/images/tabClose.png) no-repeat;
+	width: 14px;
+	height: 14px;
+	margin-left: 5px;
+	margin-right:-3px;
+}
+.claro .dijitTabCloseButtonHover {
+	background-position:-14px;
+}
+.claro .dijitTabCloseButtonActive {
+	background-position:-28px;
+}
+.claro .dijitTabSpacer {
+	
+	display: none;
+}
+.claro .dijitTabInnerDiv {
+	background-color:#e6e6e7;
+	-webkit-transition-property:background-color, border;
+ 	-webkit-transition-duration:.35s;
+	color:#4a4a4a;
+}
+.claro .dijitTabHover .dijitTabInnerDiv {
+	background-color:#a9d6ff;
+ 	-webkit-transition-duration:.25s;
+	color:#000;
+}
+.claro .dijitTabActive .dijitTabInnerDiv {
+	background-color:#8bc4f9;
+	color:#000;
+	-webkit-transition-duration:.1s;
+}
+.claro .dijitTabChecked .dijitTabInnerDiv {
+	background-color:#b2d4f3;
+	color:#000;
+}
+.claro .dijitTabContent {
+	border: 1px solid #b5bcc7;
+}
+.claro .dijitTabHover .dijitTabContent,
+.claro .dijitTabActive .dijitTabContent {
+	border-color: #769dc0;
+}
+.claro .dijitTabChecked .dijitTabContent {
+	color:#000;
+	border-color: #b5bcc7;	
+}
+.claro .tabStripButton .dijitTabInnerDiv {
+	background-color: transparent;
+}
+.claro .tabStripButton .dijitTabContent {
+	border: none;
+}
+.claro .dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;	
+	margin-right: 1px;
+	padding-top: 3px;
+}
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTab {
+	top: 3px;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabContent {
+	padding:3px 8px 3px 4px;
+	border-bottom: 1px;
+	background-image:url(layout/images/tabTop.png);
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	min-width: 60px;
+	text-align: center;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+	padding-bottom: 4px;
+	padding-top: 6px;
+}
+.dj_ie .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+	border-bottom: none;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv {
+	background-image:url(layout/images/tabTop.png);
+	background-position:0px -248px;
+	background-position:bottom;
+	background-repeat:repeat-x;
+	box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
+	-webkit-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
+	-moz-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-image:none;
+	box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
+	-moz-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+	background-position:0px -102px;
+	background-repeat:repeat-x;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;	
+	margin-right: 1px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabContent {
+	padding:3px 8px 4px 4px;
+	border-top: none;
+	background-image: url(layout/images/tabBottom.png);
+	background-position:0px -249px;
+	background-repeat: repeat-x;
+	background-position:bottom;
+	min-width: 60px;
+	text-align: center;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTab {
+	padding-bottom: 3px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+	background-image: url(layout/images/tabBottom.png);
+	background-position: top;
+	background-repeat: repeat-x;
+	box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
+	-webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
+	-moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
+	
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabContent {
+	padding-bottom: 7px;
+	padding-top: 4px;
+	background-position:0px -119px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked {
+	padding-bottom: 0;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-image:none;
+	box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
+	-moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
+}
+.claro .dijitTabContainerLeft-tabs .dijitTab {
+	left: 1px;	
+	margin-bottom: 1px;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	background-image: url(layout/images/tabLeft.png);
+	background-position: -347px -340px;
+	background-repeat: repeat-y;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabContent {
+	padding:3px 8px 4px 4px;
+	background-image: url(layout/images/tabLeft.png);
+	background-repeat: repeat-y;
+	background-position:0px 0px;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabContent {
+	padding-right: 9px;
+	border-right: none;
+	background-image: none;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-position:0px -179px;
+	background-repeat:repeat-y;
+	box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
+	-webkit-box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
+	-moz-box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.05);
+}
+.claro .dijitTabContainerRight-tabs .dijitTab {
+	left: -1px;	
+	margin-bottom: 1px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+	background-image: url(layout/images/tabRight.png);
+	background-repeat: repeat-y;
+	background-position: -1px -347px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabContent {
+	padding:3px 8px 4px 4px;
+	background-image: url(layout/images/tabRight.png);
+	background-position:right top;
+	background-repeat: repeat-y;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabContent {
+	padding-left: 5px;
+	border-left: none;
+	background-image: none;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-position:-348px -179px;
+	box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
+	-webkit-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
+	-moz-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
+}
+.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerTop-tabs .dijitTabContent {
+	border-radius: 2px 2px 0px 0px;
+	-moz-border-radius: 2px 2px 0px 0px;
+	-webkit-border-top-left-radius:2px;
+	-webkit-border-top-right-radius:2px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerBottom-tabs .dijitTabContent{
+	border-radius: 0px 0px 2px 2px;
+	-moz-border-radius: 0px 0px 2px 2px;
+	-webkit-border-bottom-right-radius:2px;
+	-webkit-border-bottom-left-radius:2px;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerLeft-tabs .dijitTabContent{
+	border-radius: 2px 0px 0px 2px;
+	-moz-border-radius: 2px 0px 0px 2px;
+	-webkit-border-top-left-radius:2px;
+	-webkit-border-bottom-left-radius:2px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerRight-tabs .dijitTabContent{
+	border-radius: 0px 2px 2px 0px;
+	-moz-border-radius: 0px 2px 2px 0px;
+	-webkit-border-top-right-radius:2px;
+	-webkit-border-bottom-right-radius:2px;
+}
+.claro .tabStripButton {
+	background-color:#deecf9;
+	border: 1px solid #b5bcc7;
+}
+.claro .dijitTabListContainer-top .tabStripButton {
+	padding: 4px 3px;
+	margin-top:7px;
+	background-image: url(layout/images/tabTop.png);
+	background-position:0px 0px;
+}
+.claro .dijitTabListContainer-bottom .tabStripButton {
+	padding:5px 3px;
+	margin-bottom:4px;
+	background-image: url(layout/images/tabTop.png);
+	background-position:0px -248px;
+	background-position:bottom;
+}
+.claro .tabStripButtonHover {
+	background-color:#a6d2fb;
+}
+.claro .tabStripButtonActive {
+	background-color:#7dbefa;
+}
+.claro .dijitTabStripIcon {
+	height:15px;
+	width:15px;
+	margin: 0 auto;
+	background:url(form/images/buttonArrows.png) no-repeat -75px 50%;
+	background-color: transparent;
+}
+.claro .dijitTabStripSlideRightIcon{
+	background-position: -24px 50%;
+}
+.claro .dijitTabStripMenuIcon {
+	background-position: -51px 50%;
+}
+.claro .dijitTabListContainer-top .tabStripButtonDisabled,
+.claro .dijitTabListContainer-bottom .tabStripButtonDisabled {
+	background-color:#dddddd;
+	border:1px solid #c9c9c9;
+}
+.claro .tabStripButtonDisabled .dijitTabStripSlideLeftIcon {
+	background-position:-175px 50%;
+}
+.claro .tabStripButtonDisabled .dijitTabStripSlideRightIcon {
+	background-position: -124px 50%;
+}
+.claro .tabStripButtonDisabled .dijitTabStripMenuIcon {
+	background-position: -151px 50%;
+} 
+.claro .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.claro .dijitTabContainerNested .dijitTabContainerTop-tabs {
+	border-bottom:solid 1px #b5bcc7;
+	padding:1px 2px 4px;
+	margin-top:-2px;
+}
+.claro .dijitTabContainerTabListNested .dijitTabContent {
+	background:rgba(255, 255, 255, 0) none repeat scroll 0 0;
+	border: none;
+	padding: 4px;
+	border-color: rgba(118,157,192,0);
+	-webkit-transition-property:background-color, border-color;
+ 	-webkit-transition-duration:.3s;
+}
+.claro .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv {
+	
+	background: none;
+	border: none;
+	top: 0px;
+	box-shadow: none;
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+}
+.claro .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent {
+	background-color:#eaf4fc;
+	border-radius: 2px 2px 2px 2px;
+	-moz-border-radius: 2px 2px 2px 2px;
+	-webkit-border-radius:2px;
+	border:solid 1px #c8dff3;
+	padding: 3px;
+	webkit-transition-duration:.2s;
+}
+.claro .dijitTabContainerTabListNested .dijitTabHover .tabLabel {
+	text-decoration: none;
+}
+.claro .dijitTabContainerTabListNested .dijitTabActive .dijitTabContent {
+	border-radius: 2px 2px 2px 2px;
+	-moz-border-radius: 2px 2px 2px 2px;
+	-webkit-border-radius:2px;
+	border:solid 1px #a8c7e2;
+	padding: 3px;
+	background:#b9d9f5 url(layout/images/tabNested.png) repeat-x;
+	-webkit-transition-duration:.1s;
+}
+.claro .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent {
+	border-radius: 2px 2px 2px 2px;
+	-moz-border-radius: 2px 2px 2px 2px;
+	-webkit-border-radius:2px;
+	padding: 3px;
+	border:solid 1px #a8c7e2;
+	background-position: 0px 105px;
+	background-color:#d4e8f9;
+}
+.claro .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+	text-decoration: none;
+	background-image:none;
+}
+.claro .dijitTabPaneWrapperNested {
+	border: none;
+}
+.dj_ie6 .claro .dijitTabContent,
+.dj_ie6 .claro .dijitTabInnerDiv,
+.dj_ie6 .dijitTabListContainer-top .tabStripButton,
+.dj_ie6 .dijitTabListContainer-bottom .tabStripButton{
+	background-image: none;
+}
+.claro .dijitDialog {
+	border: 1px solid #769dc0;
+	box-shadow:0px 1px 5px rgba(0,0,0,0.25);
+	-webkit-box-shadow:0px 1px 5px rgba(0,0,0,0.25);
+	-moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+} 
+.claro .dijitDialogPaneContent {
+	background: #fff repeat-x top left;
+	border-top: 1px solid #769dc0;
+	padding:10px 8px;
+	position: relative;
+}
+.claro .dijitDialogPaneContentArea {
+	 
+	margin: -10px -8px;
+	padding: 10px 8px;
+}
+.claro .dijitDialogPaneActionBar {
+	
+	background-color: #f2f2f2;
+	padding: 3px 5px 2px 7px;
+	text-align: right;
+	border-top: 1px solid #cdcdcd;
+	margin: 10px -8px -10px;
+}
+.claro .dijitDialogPaneActionBar .dijitButton {
+	float: none;
+}
+.claro .dijitDialogTitleBar {
+	
+	border: 1px solid #fff;
+	border-top:none;
+	background-color: #abd6ff;
+	background-image: url(images/titlebar.png);
+	background-repeat:repeat-x;
+	padding: 5px 7px 4px 7px;
+}
+.claro .dijitDialogTitle {
+	
+	padding: 0px 1px;
+	font-size:1.091em;
+}
+.claro .dijitDialogCloseIcon {
+	
+	background: url(images/dialogCloseIcon.png);
+	background-repeat:no-repeat;
+	position: absolute;
+	right: 5px;
+	height: 15px;
+	width: 21px;
+}
+.dj_ie6 .claro .dijitDialogCloseIcon {
+	background-image: url(images/dialogCloseIcon8bit.png);
+}
+.claro .dijitDialogCloseIconHover {
+	background-position:-21px;
+}
+.claro .dijitDialogCloseIconActive {
+	background-position:-42px;
+}
+.claro .dijitTooltip,
+.claro .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 13px;
+	padding-left:3px;
+	padding-right:3px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 13px;
+	padding-left:3px;
+	padding-right:3px;
+}
+.claro .dijitTooltipContainer {
+	
+	background-color:#fff;
+	background-image:url(images/tooltip.png);
+	background-repeat:repeat-x;
+	background-position:-575px 100%;
+	border:1px solid #769DC0;
+	padding:6px 8px;
+	border-radius: 4px;
+	-webkit-border-radius: 4px;
+	-moz-border-radius: 4px;
+	box-shadow:0px 1px 3px rgba(0,0,0,0.25);
+	-webkit-box-shadow:0px 1px 3px rgba(0,0,0,0.25);
+	-moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.25);
+	font-size: 1em;
+} 
+.dj_ie6 .claro .dijitTooltipContainer {
+	background-image: none;
+}
+.claro .dijitTooltipConnector {
+	
+	border: 0px;
+	z-index: 2;
+	background-image:url(images/tooltip.png);
+	background-repeat:no-repeat;
+	width:16px;
+	height:14px;
+}
+.dj_ie6 .claro .dijitTooltipConnector {
+	background-image:url(images/tooltip8bit.png);
+}
+.claro .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 3px;
+}
+.claro .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 3px;
+	background-position:-31px 0%;
+	width:16px;
+	height:14px;
+}
+.claro .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 3px;
+	background-position:-15px 0%;
+	width:16px;
+	height:14px;
+}
+.dj_ie7 .claro .dijitTooltipAbove .dijitTooltipConnector,
+.dj_ie6 .claro .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -1px;
+}
+.claro .dijitTooltipLeft {
+	padding-right: 14px;
+}
+.dj_ie6 .claro .dijitTooltipLeft {
+	padding-left: 15px;
+}
+.claro .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background-position:0px 0%;
+	width:16px;
+	height:14px;
+}
+.claro .dijitTooltipRight {
+	padding-left: 14px;
+}
+.claro .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background-position:-48px 0%;
+	width:16px;
+	height:14px;
+}
+.claro .dijitDialogUnderlay {
+	background: #fff;
+}
+.claro .dijitAccordionContainer {
+	border:none;
+}
+.claro .dijitAccordionInnerContainer {
+	background-color: #e6e6e7;	
+	border:solid 1px #b5bcc7;
+	margin-bottom:1px;
+	-webkit-transition-property:background-color,border;
+ 	-webkit-transition-duration:.3s;
+	-webkit-transition-timing-function:linear;
+}
+.claro .dijitAccordionTitle {
+	background-color: transparent;	
+	background-image: url(layout/images/accordion.png);
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	padding: 5px 7px 2px 7px;
+	min-height:17px;
+	color:#4a4a4a;
+}
+.dj_ie6 .claro .dijitAccordionTitle {
+	background-image: none;
+}
+.claro .dijitAccordionContainer .dijitAccordionContainer-child {
+	background-color:#fff;
+	
+	border:1px solid #92bce1 !important;
+	margin: 0px 2px 2px;
+	padding: 9px;
+}
+.claro .dijitAccordionInnerContainerActive {
+	border:1px solid #769DC0;
+	background-color:#7dbefa;
+	-webkit-transition-duration:.1s;
+}
+.claro .dijitAccordionInnerContainerActive .dijitAccordionTitle {
+	background-position:0px -136px;
+	color:#000;
+}
+.claro .dijitAccordionInnerContainerSelected {
+	border-color:#92bce1;
+	background-color: #cde8ff;
+}
+.claro .dijitAccordionInnerContainerSelected .dijitAccordionTitle {
+	color:#000;
+	background-position: 0 0;	
+}
+.claro .dijitAccordionInnerContainerHover dijitAccordionTitle {
+	
+	color:#000;
+}
+.claro .dijitAccordionInnerContainerHover,
+.claro .dijitAccordionInnerContainerSelectedActive {
+	border:1px solid #769DC0;
+	background-color:#9dcfff;
+	-webkit-transition-duration:.2s;
+}
+.claro .dijitAccordionInnerContainerSelectedHover .dijitAccordionContainer-child,
+.claro .dijitAccordionInnerContainerSelectedActive .dijitAccordionContainer-child {
+	background-color:#ffffff;
+	border:1px solid #769DC0 !important;
+	-webkit-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
+	-moz-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
+}
+.claro .dijitContentPane {
+	padding: 8px;
+}		
+.claro .dijitTabContainerTop-dijitContentPane,
+.claro .dijitTabContainerLeft-dijitContentPane,
+.claro .dijitTabContainerBottom-dijitContentPane,
+.claro .dijitTabContainerRight-dijitContentPane,
+.claro .dijitAccordionContainer-dijitContentPane {
+	background-color: #fff;
+	padding: 8px;		
+}
+.claro .dijitSplitContainer-dijitContentPane,
+.claro .dijitBorderContainer-dijitContentPane {
+	background-color: #fff;		
+	padding: 8px;
+}
+.claro .dijitCalendar {
+	border:solid 1px #b5bcc7;
+	background-color:#d4ebff;
+	background-image:url(images/calendarContainerImages.png);
+	background-position:0px -448px;
+	background-repeat:repeat-x;
+	text-align:center;
+	padding:6px 5px 3px 5px;
+	-moz-border-radius:4px;
+	-webkit-border-radius:4px;	
+}
+.dj_ie6 .claro .dijitCalendar {
+	background-image:none;
+}
+.claro .dijitCalendar img {
+	border:none;
+}
+.claro .dijitCalendarHover,
+.claro .dijitCalendarActive {
+	background-color: #b7dcff;
+	border:solid 1px #769dc0;
+}
+.claro .dijitCalendarMonthContainer th {
+	text-align:center;
+	padding-bottom:4px;
+	vertical-align:middle;
+}
+.claro .dijitCalendarMonthLabelSpacer {
+	display:none;
+}
+.claro .dijitCalendarMonthLabel {
+	color:#000000;
+	font-size: 1.091em;
+	display: block;
+}
+.claro .dijitCalendarIncrementControl {
+	width:18px;
+	height:16px;
+	background-image: url(images/calendarArrows.png);
+	background-repeat: no-repeat;
+}
+.dj_ie6 .claro .dijitCalendarIncrementControl {
+	background-image: url(images/calendarArrows8bit.png);
+}
+.claro .dijitCalendarIncrease {
+	background-position:-18px 0px;
+}
+.claro .dijitCalendarArrowHover .dijitCalendarDecrease {
+	background-position:-36px 0px;
+}
+.claro .dijitCalendarArrowHover .dijitCalendarIncrease {
+	background-position:-55px 0px;
+}
+.claro .dijitCalendarArrowActive .dijitCalendarDecrease {
+	background-position:-72px 0px;
+}
+.claro .dijitCalendarArrowActive .dijitCalendarIncrease {
+	background-position:-91px 0px;
+}
+.claro .dijitA11ySideArrow {
+	
+	display: none;
+}
+.claro .dijitDayLabels th {
+	padding:0px 4px 0px 4px;
+	border-bottom:solid 1px #99b5cd;
+	font-weight:bold;
+	text-align:center;
+}
+.claro .dijitCalendarDayLabelTemplate {
+	padding-bottom:0em;
+	text-align:center;
+	border-bottom:1px solid #99B5CD;
+	font-size:0.909em;
+	padding:0 3px 2px;
+}
+.claro .dijitCalendarDateTemplate {
+	text-align:center;
+	background-color:#fff;
+	background-image:url(images/calendarContainerImages.png);
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	border-bottom: 1px solid #dadde1;
+	padding-top:0px;
+	font-size:0.909em;
+	font-family: Arial;
+	font-weight:bold;
+	letter-spacing:.05em;
+	text-align:center;
+}
+.dj_ie6 .claro .dijitCalendarDateTemplate {
+	background-image: none;
+}
+.claro .dijitCalendarPreviousMonth,
+.claro .dijitCalendarNextMonth {
+	background-color:#ebf3f9;
+	background-image:none;
+	border-bottom:solid 1px #d2dae8;
+	color:#547da1;
+}
+.claro .dijitCalendarDateTemplate .dijitCalendarDateLabel {
+	text-decoration:none;
+	display:block;
+	padding:3px 5px 3px 4px;
+	border:solid 1px #fff;
+	color:#1e1e1e;
+	background-color:rgba(171,212,251,0);	
+	-webkit-transition-property:background-color, border;
+ 	-webkit-transition-duration:.35s;
+}
+.claro .dijitCalendarPreviousMonth .dijitCalendarDateLabel,
+.claro .dijitCalendarNextMonth .dijitCalendarDateLabel{
+	color:#547da1;
+	border-color:#ebf3f9;
+}
+.claro .dijitCalendarYearContainer {
+	vertical-align:middle;
+}
+.claro .dijitCalendarYearControl {
+	padding: 1px 2px 2px 2px;
+}
+.claro .dijitCalendarYearLabel {
+	padding:2px 0px 0px 0px;
+	margin:0;
+}
+.claro .dijitCalendarYearLabel span {
+	
+	vertical-align:middle;
+}
+.claro .dijitCalendarSelectedYear {
+	padding:0px 3px;
+}
+.claro .dijitCalendarNextYear,
+.claro .dijitCalendarPreviousYear {
+	padding: 1px 6px 1px 6px;
+	font-size:0.909em;
+}
+.claro .dijitCalendarSelectedYear {
+	font-size:1.091em;
+	color:#000;
+}
+.claro .dijitCalendarHoveredDate .dijitCalendarDateLabel{
+	background-color:#abd4fb;
+	border:solid 1px #729dc2;
+	color:#000;
+	-webkit-transition-duration:.2s;
+}
+.claro .dijitCalendarNextYearHover,
+.claro .dijitCalendarPreviousYearHover {
+	color:#000;
+	border:solid 1px #fefefe;
+	padding: 0px 5px 0px 5px;	
+	background-color:#eaf4fe;
+}
+.claro .dijitCalendarNextYearActive,
+.claro .dijitCalendarPreviousYearActive {
+	border: solid 1px #87b3d9;
+	padding: 0px 5px 0px 5px;	
+	background-color:#90bde6;
+}
+.claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
+	background-image:url(images/calendarContainerImages.png);
+	background-position:0px -300px;
+	background-color:#75b5f0;
+	border:solid 1px #fff;
+	-webkit-transition-duration:.1s;
+}
+.dj_ie6 .claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
+	background-image:none;
+}
+.claro .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+	color:#000;
+	background-color:#e7f4ff;
+	border-color:#accfed;
+}
+.claro .dijitCalendarDisabledDate .dijitCalendarDateLabel {
+	text-decoration:line-through;
+	
+	
+	background-color: transparent;
+	border-width: 0px;
+	padding: 4px 6px 4px 5px;
+	color: #547DA1;
+}
+.claro .dijitCalendarMonthContainer .dijitMenu{
+	
+	top: 20px !important;
+	left: 0px;
+	border-color: #769dc0;
+	background-color: #fff;
+	text-align:center;
+	background-image: none;
+}
+.claro .dijitCalendarMonthContainer .dijitMenu .dijitCalendarMonthLabel{
+	border-top: solid 1px #fff;
+	border-bottom: solid 1px #fff;
+	padding: 2px 20px;
+}
+.claro .dijitCalendarMonthContainer .dijitMenu .dijitMenuItemHover {
+	background-color: #abd6ff;
+	border-color: #769dc0;
+	border-width:1px 0px;
+	background-image: url(images/commonHighlight.png);
+	background-repeat:repeat-x;
+}
+.claro .dijitMenuBar {
+	border: 1px solid #b5bcc7;
+	margin: 0px;
+	padding: 0px;
+	background-color: #e6e6e7;
+	background-image: url(images/commonHighlight.png);
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitMenuBar {
+	background-image:none;
+}
+.claro .dijitMenu {
+	background-repeat:repeat-y;
+	background-color:#fff;
+	border: 1px solid #769dc0;
+	
+	margin: -1px 0;
+}
+.claro .dijitMenuBar .dijitMenuItem {  
+	padding: 6px 10px 7px;
+	background-position:0px 100px;
+	color:#4a4a4a;
+	margin:-1px;
+}	
+.claro .dijitMenuItem {
+	background-image: url(images/menuHighlight.png);
+	background-position:0px -40px;
+	background-repeat:repeat-x;
+}
+.claro .dijitMenuTable {
+	border-collapse:separate;
+	border-spacing:0 0;
+	padding:0px;
+}
+.claro .dijitMenuItem td{
+	padding:1px;
+}
+.claro .dijitMenuPassive .dijitMenuItemHover,
+.claro .dijitMenuPassive .dijitMenuItemSelected {
+	background-color: #abd6ff;
+	border:solid 1px #769dc0;
+	background-position:0px 0px;
+	color:#000;
+	padding: 5px 9px 6px;
+}
+.claro .dijitMenuPassive .dijitMenuItemActive{
+	background-position:0px -177px;
+}
+.dj_ie6 .claro .dijitMenuItem,
+.dj_ie6 .claro .dijitMenuPassive .dijitMenuItem {
+	background-image: none;
+}
+.claro .dijitMenuActive .dijitMenuItemHover,
+.claro .dijitMenuActive .dijitMenuItemSelected {
+	border:solid 1px #769dc0;
+	padding: 5px 9px 6px;
+	background-color: #9dcfff;
+	background-position:0px 0px;
+	color:#000;
+}
+.dj_ie .claro .dijitMenuActive .dijitMenuItemHover,
+.dj_ie .claro .dijitMenuActive .dijitMenuItemSelected,
+.dj_ie .claro .dijitMenuPassive .dijitMenuItemHover,
+.dj_ie .claro .dijitMenuPassive .dijitMenuItemSelected {
+	padding-top: 6px;
+	padding-bottom: 5px;
+	margin-top: -3px;
+}
+.claro .dijitMenuActive .dijitMenuItemActive{
+	background-color: #7dbefa;
+	background-position:0px -177px;
+}
+.claro .dijitMenuItemActive {
+	background-position:0px -177px;
+}
+.claro td.dijitMenuItemIconCell {
+ padding: 2px;
+ margin: 0px 0px 0px 4px;
+}
+.claro td.dijitMenuItemLabel {
+	padding-top: 5px;
+	padding-bottom: 5px;
+}
+.claro .dijitMenuExpand {
+	width: 7px;
+	height: 7px;
+	background-image: url(images/spriteArrows.png);
+	background-position: -14px 0px;
+	margin-right:3px;
+}
+.claro .dijitMenuItemDisabled .dijitMenuItemIconCell {
+	opacity:1;
+}
+.claro .dijitMenuSeparatorTop {
+	height: auto;
+	margin-top:1px; 
+	border-bottom: 1px solid #b5bcc7
+}
+.claro .dijitMenuSeparatorBottom{
+	height: auto;
+	margin-bottom:1px;
+}
+.claro .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.claro .dijitCheckedMenuItemIcon {
+	background-image: url(form/images/checkboxRadioButtonStates.png);
+	background-repeat:no-repeat;
+	background-position: -15px 50%;
+	width:15px;
+	height:16px;
+}
+.dj_ie6 .claro .dijitCheckedMenuItemIcon {
+	background-image: url(form/images/checkboxAndRadioButtons_IE6.png);
+}
+.claro .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: 0 50%;
+}
+.claro .dijitComboBoxMenu {
+	margin-left:0px;
+	background-image: none;
+}
+.claro .dijitComboBoxMenu .dijitMenuItem{
+	padding:2px 0px;
+	text-indent:6px;
+	border-width:1px 0px 1px 0px;
+	border-style:solid;
+	border-color:#fff;
+}
+.claro .dijitComboBoxMenu .dijitMenuItemSelected {
+	color:#000;
+	border-color:#768dc0;
+	background-color:#abd6ff;
+}
+.claro .dijitComboBoxMenuActive .dijitMenuItemSelected {
+	background-position:0px -177px;
+	background-color:#7dbefa;
+}
+.claro .dijitMenuPreviousButton, .claro .dijitMenuNextButton {
+	font-style: italic;
+}
+.claro .dijitSliderBar {
+	border-style: solid;
+	outline: 1px;
+}
+.claro .dijitSliderFocused .dijitSliderBar {
+	border-color: #769dc0;
+}
+.claro .dijitSliderHover .dijitSliderBar {
+	border-color: #769dc0;
+}
+.claro .dijitSliderDisabled .dijitSliderBar {
+	background-image: none;
+	border-color: #d3d3d3;
+}
+.claro .dijitRuleLabelsContainerH {
+	padding: 2px 0px;
+}
+.claro .dijitSlider .dijitSliderProgressBarH,
+.claro .dijitSlider .dijitSliderLeftBumper{
+	background-image: url(form/images/sliderHorizontal.png);
+	background-repeat:repeat-x;
+	background-position:0 -20px;
+	border-color: #b5bcc7;
+	background-color: #cfe5fa;
+}
+.claro .dijitSlider .dijitSliderRemainingBarH,
+.claro .dijitSlider .dijitSliderRightBumper{
+	background-image: url(form/images/sliderHorizontal.png);
+	background-repeat:repeat-x;
+	background-position:0 -11px;
+	border-color: #b5bcc7;
+	background-color: #fff;
+}
+.claro .dijitSliderRightBumper {
+	border-right: solid 1px #b5bcc7;
+}
+.claro .dijitSliderLeftBumper {
+	border-left: solid 1px #b5bcc7;
+}
+.claro .dijitSliderHover .dijitSliderProgressBarH,
+.claro .dijitSliderHover .dijitSliderLeftBumper{
+	background-position:0 -20px;
+	background-color: #abd6ff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderHover .dijitSliderRemainingBarH,
+.claro .dijitSliderHover .dijitSliderRightBumper{
+	background-position:0 0px;
+	background-color: #fff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderFocused .dijitSliderProgressBarH,
+.claro .dijitSliderFocused .dijitSliderLeftBumper{
+	background-position:0 -30px;
+	background-color: #abd6ff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderFocused .dijitSliderRemainingBarH,
+.claro .dijitSliderFocused .dijitSliderRightBumper{
+	background-position:0 -9px;
+	background-color: #fff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderDisabled .dijitSliderProgressBarH,
+.claro .dijitSliderDisabled .dijitSliderLeftBumper{
+	background-color: #cdcdcd;
+	background-image:none;
+}
+.claro .dijitSliderDisabled .dijitSliderRemainingBarH,
+.claro .dijitSliderDisabled .dijitSliderRightBumper{
+	background-color: #efefef;
+}
+.claro .dijitRuleLabelsContainerV {
+	padding: 0px 2px;
+}
+.claro .dijitSlider .dijitSliderProgressBarV,
+.claro .dijitSlider .dijitSliderBottomBumper{
+	background-image: url(form/images/sliderVertical.png);
+	background-repeat:repeat-y;
+	background-position:-36px 0;
+	border-color: #b5bcc7;
+	background-color: #cfe5fa;
+}
+.claro .dijitSlider .dijitSliderRemainingBarV,
+.claro .dijitSlider .dijitSliderTopBumper{
+	background-image: url(form/images/sliderVertical.png);
+	background-repeat:repeat-y;
+	background-position:-3px 0;
+	border-color: #b5bcc7;
+	background-color: #fff;
+}
+.claro .dijitSliderBottomBumper {
+	border-bottom: solid 1px #b5bcc7;
+}
+.claro .dijitSliderTopBumper {
+	border-top: solid 1px #b5bcc7;
+}
+.claro .dijitSliderHover .dijitSliderProgressBarV,
+.claro .dijitSliderHover .dijitSliderBottomBumper{
+	background-position:-36px 0;
+	background-color: #abd6ff;
+}
+.claro .dijitSliderHover .dijitSliderRemainingBarV,
+.claro .dijitSliderHover .dijitSliderTopBumper{
+	background-position:0 0;
+	background-color: #fff;
+}
+.claro .dijitSliderFocused .dijitSliderProgressBarV,
+.claro .dijitSliderFocused .dijitSliderBottomBumper{
+	background-position:-56px 0;
+	background-color: #abd6ff;
+}
+.claro .dijitSliderFocused .dijitSliderRemainingBarV,
+.claro .dijitSliderFocused .dijitSliderTopBumper{
+	background-position:-18px 0;
+	background-color: #fff;
+}
+.claro .dijitSliderDisabled .dijitSliderProgressBarV,
+.claro .dijitSliderDisabled .dijitSliderBottomBumper{
+	background-color: #cdcdcd;
+}
+.claro .dijitSliderDisabled .dijitSliderRemainingBarV,
+.claro .dijitSliderDisabled .dijitSliderTopBumper{
+	background-color: #efefef;
+}
+.claro .dijitSliderImageHandleH {
+	border: 0px;
+	width: 18px;
+	height: 16px;
+	background-image: url(form/images/sliderThumbs.png);
+	background-repeat:no-repeat;
+	background-position:0 0;
+}
+.claro .dijitSliderHover .dijitSliderImageHandleH {
+	background-position:-18px 0;
+}
+.claro .dijitSliderFocused .dijitSliderImageHandleH {
+	background-position:-36px 0;
+}
+.claro .dijitSliderProgressBarH .dijitSliderThumbHover{
+	background-position:-36px 0;
+}
+.claro .dijitSliderProgressBarH .dijitSliderThumbActive{
+	background-position:-36px 0;
+}
+.claro .dijitSliderReadOnly .dijitSliderImageHandleH,
+.claro .dijitSliderDisabled .dijitSliderImageHandleH {
+	background-position:-54px 0;
+}
+.claro .dijitSliderImageHandleV {
+	border: 0px;
+	width: 18px;
+	height: 16px;
+	background-image: url(form/images/sliderThumbs.png);
+	background-repeat:no-repeat;
+	background-position:-289px 0;
+}
+.claro .dijitSliderHover .dijitSliderImageHandleV {
+	background-position:-307px 0;
+}
+.claro .dijitSliderFocused .dijitSliderImageHandleV {
+	background-position:-325px 0;
+}
+.claro .dijitSliderProgressBarV .dijitSliderThumbHover{
+	background-position:-325px 0;
+}
+.claro .dijitSliderProgressBarV .dijitSliderThumbActive{
+	background-position:-325px 0;
+}
+.claro .dijitSliderReadOnly .dijitSliderImageHandleV,
+.claro .dijitSliderDisabled .dijitSliderImageHandleV {
+	background-position:-343px 0;
+}
+.claro .dijitSliderButtonContainerH{
+	padding: 1px 3px 1px 2px;
+}
+.claro .dijitSliderButtonContainerV{
+	padding: 3px 1px 2px 1px;
+}
+.claro .dijitSliderDecrementIconH,
+.claro .dijitSliderIncrementIconH,
+.claro .dijitSliderDecrementIconV,
+.claro .dijitSliderIncrementIconV {
+	background-image: url(form/images/commonFormArrows.png);
+	background-repeat:no-repeat;
+	background-color: #e9ecf2;
+	-moz-border-radius: 2px;
+	-webkit-border-radius: 2px;
+	border: solid 1px #b5bcc7;
+	font-size: 1px;
+}
+.claro .dijitSliderDecrementIconH,
+.claro .dijitSliderIncrementIconH {
+	height: 12px;
+	width: 9px;
+}
+.claro .dijitSliderDecrementIconV,
+.claro .dijitSliderIncrementIconV {
+	height: 9px;
+	width: 12px;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconH,
+.claro .dijitSliderActive .dijitSliderIncrementIconH,
+.claro .dijitSliderActive .dijitSliderDecrementIconV,
+.claro .dijitSliderActive .dijitSliderIncrementIconV,
+.claro .dijitSliderHover .dijitSliderDecrementIconH,
+.claro .dijitSliderHover .dijitSliderIncrementIconH,
+.claro .dijitSliderHover .dijitSliderDecrementIconV,
+.claro .dijitSliderHover .dijitSliderIncrementIconV {
+	border: solid 1px #769dc0;
+	background-color:#fff;
+}
+.claro .dijitSliderDecrementIconH {
+	background-position:-357px 50%;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconH
+.claro .dijitSliderHover .dijitSliderDecrementIconH {
+	background-position:-393px 50%;
+}
+.claro .dijitSliderIncrementIconH {
+	background-position:-251px 50%;
+}
+.claro .dijitSliderActive .dijitSliderIncrementIconH
+.claro .dijitSliderHover .dijitSliderIncrementIconH {
+	background-position:-283px 50%;
+}
+.claro .dijitSliderDecrementIconV {
+	background-position:-38px 50%;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconV
+.claro .dijitSliderHover .dijitSliderDecrementIconV {
+	background-position:-73px 50%;
+}
+.claro .dijitSliderIncrementIconV {
+	background-position:-143px 49%;
+}
+.claro .dijitSliderActive .dijitSliderIncrementIconV
+.claro .dijitSliderHover .dijitSliderIncrementIconV {
+	background-position:-178px 49%;
+}
+.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonHover,
+.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonHover,
+.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonHover,
+.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonHover {
+	background-color: #cce3fc;
+}
+.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonActive,
+.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonActive,
+.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonActive,
+.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonActive {
+	background-color: #a5d0fc;
+	border-color:#6591b9;
+}
+.claro .dijitSliderButtonInner {
+	visibility: hidden;
+}
+.claro .dijitSliderDisabled .dijitSliderBar{
+	border-color: #d3d3d3;
+}
+.claro .dijitSliderReadOnly *,.claro .dijitSliderDisabled * {
+	border-color: #d3d3d3;
+	color: #bdbdbd;
+}
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.claro .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position:-321px 50%;
+	background-color:#e9e9e9;
+}
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.claro .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position:-215px 50%;
+	background-color:#e9e9e9;
+}
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.claro .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position:-3px 49%;
+	background-color:#e9e9e9;
+}
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.claro .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position:-107px 49%;
+	background-color:#e9e9e9;
+}
+.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarH,
+.dj_ie6 .claro .dijitSlider .dijitSliderLeftBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarH,
+.dj_ie6 .claro .dijitSlider .dijitSliderRightBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarV,
+.dj_ie6 .claro .dijitSlider .dijitSliderTopBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarV,
+.dj_ie6 .claro .dijitSlider .dijitSliderBottomBumper {
+	background-image:none;
+}
+.claro  .dijitColorPalette {
+	outline: 1px solid #769dc0; 
+	border: 1px solid #c0ccdf;
+	background:#fff;
+	-moz-border-radius: 0px;
+}
+.claro .dijitColorPalette .dijitPaletteImg {
+	
+	border: 1px solid #cecece;
+}
+.claro .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 1px solid #000;
+}
+.claro .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.claro .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+	border: 2px solid #000;
+}
+.claro .dijitInlineEditBoxDisplayMode {
+	border: 1px solid transparent;
+}
+.claro .dijitInlineEditBoxDisplayModeHover {
+	background-color: #e2f1ff;
+	border: solid 1px #769dc0;
+}
+.dj_ie6 .claro .dijitInlineEditBoxDisplayMode {
+	border: none;
+}
+ 
+.claro .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.claro .dijitProgressBarEmpty {
+	
+	background:#fff url(images/progressBarEmpty.png) repeat-none left;
+	border-color: #769dc0;
+}
+.claro .dijitProgressBarTile {
+	
+	background:#9dcfff url(images/progressBarFull.png) repeat-x top;	
+}
+.dj_ie6 .claro .dijitProgressBarTile {
+	background-image: none;
+} 
+.claro .dijitProgressBarFull {
+	border-right:1px solid #769dc0;
+}
+.claro .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.claro .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url(images/progressBarAnim.gif) repeat-x top;
+} 
+.claro .dijitTimePicker .dijitButtonNode {
+	padding: 0 0;
+	border-radius: 0;
+	-moz-border-radius: 0;
+	-webkit-border-radius: 0;
+}
+.claro .dijitTimePicker{
+	border:1px #b5bcc7 solid;
+	border-top:none;
+	border-bottom:none;
+	background-color:#fff;
+}
+.claro .dijitTimePickerItem{
+	
+	background-image: url(images/commonHighlight.png);
+	background-position:0px -1px;
+	background-repeat:repeat-x;
+	border-top:solid 1px #b5bcc7;
+	border-bottom:solid 1px #b5bcc7;
+	margin-right:-1px;
+	margin-left:-1px;
+	margin-top:-1px;
+}
+.dj_ie6 .claro .dijitTimePickerItem {
+	background-image: none;
+}
+.claro .dijitTimePickerTick {
+	
+	color:#7a7a7a;
+	background-color:#f2f2f2;
+	font-size:0.818em;
+}
+.claro .dijitTimePickerMarker {
+	
+	color:#000;
+	background-color:#e3f2ff;
+	font-size: 1em;
+	white-space: nowrap;
+}
+.claro .dijitTimePickerTickHover,
+.claro .dijitTimePickerMarkerHover,
+.claro .dijitTimePickerMarkerSelected,
+.claro .dijitTimePickerTickSelected {
+	background-color: #83c0fa;
+	color:#000;
+	border:solid 1px #b5bcc7;
+	margin-left:-7px;
+	margin-right:-7px;
+}
+.claro .dijitTimePickerMarkerSelected,
+.claro .dijitTimePickerTickSelected {
+	font-size: 1em;
+	}
+.dj_ie .claro .dijitTimePickerTickHover,
+.dj_ie .claro .dijitTimePickerMarkerHover,
+.dj_ie .claro .dijitTimePickerMarkerSelected,
+.dj_ie .claro .dijitTimePickerTickSelected  {
+	width: 114%;
+}
+.dj_ie6 .claro .dijitTimePickerTickHover,
+.dj_ie6 .claro .dijitTimePickerMarkerHover,
+.dj_ie6 .claro .dijitTimePickerMarkerSelected,
+.dj_ie6 .claro .dijitTimePickerTickSelected  {
+	position: relative; 	
+	zoom: 1; 
+}
+.claro .dijitTimePickerTick .dijitTimePickerItemInner {
+	padding:1px;
+	margin:0px;
+}
+.claro .dijitTimePicker .dijitButtonNode {
+	border-left:none;
+	border-right:none;
+	border-color:#b5bcc7;
+	background-color: #f6f7fa;
+	background-image: url(images/commonHighlight.png);
+	background-position:0px -1px;
+	background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitTimePicker .dijitButtonNode {
+	background-image: none;
+}
+.claro .dijitTimePicker .dijitArrowButtonInner{
+	height: 100%; 
+	background-image: url(form/images/commonFormArrows.png);
+	background-repeat: no-repeat;
+	background-position:-140px 45%;
+}
+.claro .dijitTimePicker .dijitDownArrowButton .dijitArrowButtonInner{
+	background-position:-35px 45%;
+}
+.claro .dijitTimePicker .dijitUpArrowHover, 
+.claro .dijitTimePicker .dijitDownArrowHover {
+	background-color: #abd6ff;
+}
+.claro .dijitTimePicker .dijitUpArrowHover .dijitArrowButtonInner {
+	background-position:-175px 45%;
+}
+.claro .dijitTimePicker .dijitDownArrowHover .dijitArrowButtonInner {
+	background-position:-70px 45%;
+}
+.claro .dijitBorderContainer {
+	border: 1px #b5bcc7 solid;
+	padding: 5px;
+}
+.claro .dijitSplitContainer-child,
+.claro .dijitBorderContainer-child {
+	
+	border: 1px #b5bcc7 solid;
+}
+.claro .dijitBorderContainer-dijitTabContainerTop,
+.claro .dijitBorderContainer-dijitTabContainerBottom,
+.claro .dijitBorderContainer-dijitTabContainerLeft,
+.claro .dijitBorderContainer-dijitTabContainerRight,
+.claro .dijitBorderContainer-dijitAccordionContainer {
+	
+	 border: none;
+}
+.claro .dijitBorderContainer-dijitBorderContainer {
+	
+	border: 1px #c0ccdf solid;
+	padding: 5px;
+}
+.claro .dijitSplitterH,
+.claro .dijitGutterH {
+	background:none;
+	border:0;
+	height:5px;
+}
+.claro .dijitSplitterH .dijitSplitterThumb {
+	background:#dde2e9 none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.claro .dijitSplitterV,
+.claro .dijitGutterV {
+	background:none;
+	border:0;
+	width:5px;
+	margin: 0;
+}
+.claro .dijitSplitterV .dijitSplitterThumb {
+	background:#dde2e9 none;
+	height:19px;
+	left:2px;
+	width:1px;
+	margin: 0;
+}
+.claro .dijitSplitterHHover {
+	font-size: 1px;
+	background: url(layout/images/splitterHorizontalHover.png) no-repeat center top;
+}
+.claro .dijitSplitterHHover .dijitSplitterThumb {
+	background:#769dc0 none;
+}
+.claro .dijitSplitterVHover {
+	font-size: 1px;
+	background: url(layout/images/splitterVerticalHover.png) no-repeat center left;
+}
+.claro .dijitSplitterVHover .dijitSplitterThumb {
+	background:#769dc0 none;
+}
+.dj_ie6 .dijitSplitterHHover,
+.dj_ie6 .claro .dijitSplitterVHover {
+	background-color:#cfe9ff;
+	background-image:none;
+}
+.claro .dijitSplitterHActive {
+	font-size: 1px;
+	background-color:#abd4fb;
+	border-top:blue;
+}
+.claro .dijitSplitterVActive {
+	font-size: 1px;
+	background-color:#abd4fb;
+}
+.claro .dijitTreeNode {
+    zoom: 1;	
+}
+.claro .dijitTreeIsRoot {
+    background-image: none;
+}
+.claro .dijitTreeRow {
+	
+	padding: 4px 1px 2px 0px;
+	margin-left: 1px;
+	background-image: url(images/commonHighlight.png);
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	border-color: rgba(118,157,192,0);
+	background-color: rgba(171,214,255,0);
+	-webkit-transition-property:background-color, border-color;
+	-webkit-transition-duration:.25s ;
+	-webkit-transition-timing-function: ease-out;
+}
+.dj_ie6 .claro .dijitTreeRow {
+	background-image: none;
+}
+.claro .dijitTreeRowSelected {
+	background-repeat:repeat-x;
+	background-color:#d8edff;
+	padding: 3px 0px 1px;
+	margin-left: 0px;
+	border:solid 1px #c3e2fd;
+	color:#000;
+}
+.claro .dijitTreeRowHover {
+	background-color:#abd6ff;
+	padding: 3px 0px 1px;
+	margin-left: 0px;
+	border:solid 1px #769dc0;
+	color:#000;
+	-webkit-transition-duration:.25s ; 
+}
+.claro .dijitTreeRowActive {
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	padding: 3px 0px 1px;
+	margin-left: 0px;
+	border:solid 1px #769dc0;
+	color:#000;
+}
+.dj_ie6 .claro .dijitTreeRowActive {
+	background-image: none;
+}
+.claro .dijitTreeRowFocused {
+	background-repeat: repeat;
+}
+.claro .dijitTreeExpando {
+	background-image: url(images/treeExpandImages.png);
+    width: 16px;
+    height: 16px;
+	background-position: -35px 0px		
+}
+.dj_ie6 .claro .dijitTreeExpando {
+	background-image: url(images/treeExpandImages8bit.png);
+}
+.claro .dijitTreeRowHover .dijitTreeExpandoOpened {
+	background-position: -53px 0px;
+}
+.claro .dijitTreeExpandoClosed {
+	background-position: 1px 0px;
+}
+.claro .dijitTreeRowHover .dijitTreeExpandoClosed {
+	background-position: -17px 0px;
+}
+.claro .dijitTreeExpandoLeaf{
+	background-image:none;
+}
+.claro .dijitTreeExpandoLoading {
+	background-image: url(images/loadingAnimation.gif);
+}
+.claro .dijitTreeNode .dojoDndItemBefore,
+.claro .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.claro .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	border-top: 2px solid #369;
+}
+.claro .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	border-bottom: 2px solid #369;
+}
+ 
+.claro .dijitToolbar {
+	border-bottom: 1px solid #b5bcc7;
+	background-color: #f1f1f1;
+	background-image: url(images/commonHighlight.png);
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	padding: 2px 0px 2px 4px;
+	zoom: 1;
+}
+.claro .dijitToolbar label {
+	padding: 0px 3px 0 6px;
+}
+.claro .dijitToolbar .dijitButtonNode {
+	border:none;
+	padding: 2px;
+	background-image: url(images/commonHighlight.png);
+	background-position:0 -30px;
+	background-repeat:repeat-x;
+	background-color:rgba(171,214,255,0);
+	border-radius: 2px;	
+	-moz-border-radius: 2px;	
+	-webkit-border-radius: 2px;	
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+	-webkit-transition-property:background-color;
+	-webkit-transition-duration:.3s, .35s;
+}
+.claro .dijitToolbar .dijitComboButton .dijitButtonNode{
+	padding: 3px 2px 3px 2px;	
+}
+.dj_ie .claro .dijitToolbar .dijitButtonNode {
+	background-color: transparent;   
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
+	background: none;	
+}
+.claro .dijitToolbar .dijitComboBox .dijitButtonNode {
+	padding: 0px;
+}
+.claro .dijitToolbar .dijitComboButton {
+	padding: 1px;
+}
+.claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode {
+	background-position:0 0;
+	border:solid 1px #769dc0;
+	background-color: #abd6ff;
+	padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonHover {
+	background-color: #abd6ff;
+	border: solid 1px #769dc0;
+	padding: 0px;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+	background-position:0 0;
+	padding: 2px;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+	background-color: #7dd6fa;
+}
+.claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode {
+	border:solid 1px #769dc0;
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonActive {
+	-webkit-transition-duration:.2s;
+	border: solid 1px #769dc0;
+	padding: 0px;
+}
+.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNode {
+	background-color: #7dbefa;
+	background-position:0px -177px;
+	padding: 2px;
+}
+.claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
+	background-color: #7dbefa;
+}
+.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
+	border-color: #769dc0;
+	background-color:#fff;
+	padding: 1px;
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonContents, 
+.dj_ie7 .claro .dijitToolbar .dijitButtonContents {
+	margin: -2px 0;
+	padding: 0;
+}
+.dj_ie6 .claro .dijitToolbar {
+	background-image: none;
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
+	margin: 1px; 
+	border: none;
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
+.dj_ie6 .claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive,
+.dj_ie6 .claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
+	margin: 0;	
+	border-width: 1px;
+	border-style: solid;
+	background-image: none;
+}
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
+	padding: 1px;	
+}
+.claro .dijitToolbarSeparator {
+	
+	background: url(../../icons/images/editorIconsEnabled.png);
+}
+.claro .dijitDisabled .dijitToolbar {
+	background:none;
+	background-color:#f5f5f5;
+	border-bottom: 1px solid #d3d3d3;
+}
+.claro .dijitEditorIFrameContainer{
+	padding:3px 3px 1px 10px;
+}
+.claro .dijitEditorIFrame {
+	background-color: #fff;
+}
+.claro .dijitEditor {
+	border: 1px solid #b5bcc7;
+}
+.claro .dijitEditor .dijitEditorIFrameContainer{
+	background-color: #fff;
+	background-image: url(form/images/textBox_back.png);
+	background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitEditor .dijitEditorIFrameContainer{
+	background-image: none;
+}
+.claro .dijitEditorHover .dijitEditorIFrameContainer,
+.claro .dijitEditorHover .dijitEditorIFrameContainer .dijitEditorIFrame{
+	background-color: #eef7ff;
+}
+.claro .dijitEditorFocused .dijitEditorIFrameContainer,
+.claro .dijitEditorFocused .dijitEditorIFrameContainer .dijitEditorIFrame{
+	
+	background-color: #fff;
+}
+.claro .dijitEditorDisabled {
+	border: 1px solid #d3d3d3;
+	color: #818181;
+}
+.claro .dijitDisabled .dijitEditorIFrame,
+.claro .dijitDisabled .dijitEditorIFrameContainer {
+	background-color: #efefef;
+	background-image: none;
+}
+.dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled.png); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled.png); 
+}
+.dijitEditorIconSep { background-position: 0px; }
+.dijitEditorIconSave { background-position: -18px; }
+.dijitEditorIconPrint { background-position: -36px; }
+.dijitEditorIconCut { background-position: -54px; }
+.dijitEditorIconCopy { background-position: -72px; }
+.dijitEditorIconPaste { background-position: -90px; }
+.dijitEditorIconDelete { background-position: -108px; }
+.dijitEditorIconCancel { background-position: -126px; }
+.dijitEditorIconUndo { background-position: -144px; }
+.dijitEditorIconRedo { background-position: -162px; }
+.dijitEditorIconSelectAll { background-position: -180px; }
+.dijitEditorIconBold { background-position: -198px; }
+.dijitEditorIconItalic { background-position: -216px; }
+.dijitEditorIconUnderline { background-position: -234px; }
+.dijitEditorIconStrikethrough { background-position: -252px; }
+.dijitEditorIconSuperscript { background-position: -270px; }
+.dijitEditorIconSubscript { background-position: -288px; }
+.dijitEditorIconJustifyCenter { background-position: -306px; }
+.dijitEditorIconJustifyFull { background-position: -324px; }
+.dijitEditorIconJustifyLeft { background-position: -342px; }
+.dijitEditorIconJustifyRight { background-position: -360px; }
+.dijitEditorIconIndent { background-position: -378px; }
+.dijitEditorIconOutdent { background-position: -396px; }
+.dijitEditorIconListBulletIndent { background-position: -414px; }
+.dijitEditorIconListBulletOutdent { background-position: -432px; }
+.dijitEditorIconListNumIndent { background-position: -450px; }
+.dijitEditorIconListNumOutdent { background-position: -468px; }
+.dijitEditorIconTabIndent { background-position: -486px; }
+.dijitEditorIconLeftToRight { background-position: -504px; }
+.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
+.dijitEditorIconBackColor { background-position: -540px; }
+.dijitEditorIconForeColor { background-position: -558px; }
+.dijitEditorIconHiliteColor { background-position: -576px; }
+.dijitEditorIconNewPage { background-position: -594px; }
+.dijitEditorIconInsertImage { background-position: -612px; }
+.dijitEditorIconInsertTable { background-position: -630px; }
+.dijitEditorIconSpace { background-position: -648px; }
+.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
+.dijitEditorIconInsertOrderedList { background-position: -684px; }
+.dijitEditorIconInsertUnorderedList { background-position: -702px; }
+.dijitEditorIconCreateLink { background-position: -720px; }
+.dijitEditorIconUnlink { background-position: -738px; }
+.dijitEditorIconViewSource { background-position: -756px; }
+.dijitEditorIconRemoveFormat { background-position: -774px; }
+.dijitEditorIconFullScreen { background-position: -792px; }
+.dijitEditorIconWikiword { background-position: -810px; }
+ 
+.claro .dijitTitlePaneTitle {
+	background-color: #e6e6e7;
+	background-image: url(images/titlebar.png);
+	background-repeat:repeat-x;
+	border:1px solid #b5bcc7;
+	padding: 0px 7px 3px 7px;
+	min-height:17px;
+	color:#131313;
+}
+.dj_ie6 .claro .dijitTitlePaneTitle {
+	background-image: none;
+}
+.claro .dijitTitlePaneTitleHover {
+	background-color: #abd6ff;
+	border-color: #769dc0;
+}
+.claro .dijitTitlePaneTitleActive {
+	background-color: #7dbefa;
+	border-color: #769dc0;
+	background-position:0px -136px;
+}
+.claro .dijitTitlePaneTitleFocus {
+	margin-top:3px;
+	padding-bottom:2px;
+}
+.claro .dijitTitlePane .dijitArrowNode {
+	background-image: url(images/spriteArrows.png);
+	background-repeat: no-repeat;
+	height: 8px;
+	width: 7px;
+}
+.claro .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background-position: 0px 0px;
+}
+.claro .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: -14px 0px;
+}
+.claro .dijitTitlePaneFocused .dijitTitlePaneTextNode {
+	color:#000;
+}
+.claro .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border:1px solid #b5bcc7;
+	border-top:none;
+}
+.claro .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.claro .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+	vertical-align:text-top;
+}
+.claro .dijitSpinnerButtonContainer {
+	overflow: hidden;
+	position: relative;
+	width: auto;
+	padding: 0 2px;
+}
+.claro .dijitSpinnerButtonContainer .dijitSpinnerButtonInner {
+	border-width: 1px 0; 
+	border-style: solid none;
+}
+.claro .dijitSpinner .dijitArrowButton {
+	width:auto;
+	background-color: #ebeef4;
+	background-image: url(form/images/formHighlight.png);
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	overflow: hidden;
+}
+.dj_iequirks .claro .dijitSpinner .dijitArrowButton {
+	overflow: visible; 
+}
+.claro .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.claro .dijitSpinner .dijitArrowButtonInner {
+	border:solid 1px #fff;
+	border-bottom-width: 0; 
+	background-image: url(form/images/commonFormArrows.png);
+	background-repeat: no-repeat;
+	height: 100%;
+	width:15px;
+	padding-left: 1px;
+	padding-right: 1px;
+	
+	background-position:-139px center;
+	
+	display: block;
+	margin: -1px 0px -1px 0px;	
+	#margin-top: 0; 
+}
+.dj_iequirks .claro .dijitSpinner .dijitArrowButtonInner {
+	width: 19px;
+}
+.claro .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
+	background-position:-34px;
+}
+.claro .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
+.claro .dijitUpArrowButtonActive,
+.claro .dijitDownArrowButtonActive {
+	background-color:#abd6ff;
+}
+.claro .dijitSpinner .dijitUpArrowButtonHover,
+.claro .dijitSpinner .dijitDownArrowButtonHover,
+.claro .dijitSpinnerFocused .dijitArrowButton {
+	background-color: #a0d1ff;
+}
+.claro .dijitSpinner .dijitUpArrowButtonHover .dijitArrowButtonInner {
+	background-position:-174px;
+}
+.claro .dijitSpinner .dijitDownArrowButtonHover .dijitArrowButtonInner {
+	background-position:-69px;
+}
+.claro .dijitSpinnerFocused {
+	background-color: #fff;
+	background-image: none;
+}
+.claro .dijitSpinner .dijitDownArrowButtonActive,
+.claro .dijitSpinner .dijitUpArrowButtonActive {
+	background-color: #3299f9;
+	background-position:0px -177px;
+}
+.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner,
+.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
+	
+	border: 0px;
+	padding: 1px;
+	margin-right:2px;
+	margin-bottom:1px;
+}
+.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner {
+	background-position:-173px;
+}
+.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
+	background-position:-68px;
+}
+.claro .dijitSpinnerDisabled .dijitArrowButtonInner {
+	background-color: #f1f1f1;
+}
+.claro .dijitSpinnerDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position:-104px;
+}
+.claro .dijitSpinnerDisabled .dijitDownArrowButton .dijitArrowButtonInner {
+	background-position:1px;
+}
+.dj_ie7 .claro .dijitSpinner {
+	overflow:visible;
+} 
+.dijitRtl .dijitPlaceHolder {
+	left: auto;
+	right: 0;
+}
+.dijitMenuItemRtl {
+	text-align: right;
+}
+.dj_iequirks .dijitComboButtonRtl BUTTON {
+	
+	float:left;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitComboBoxRtl .dijitArrowButtonContainer {
+	
+	border-right-width: 1px !important;
+	border-right-style: solid !important;
+	border-left-width: 0px !important;
+	border-left-style: none !important;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
+	border-right: 1px solid black !important;
+	border-left: 0px none black !important;
+}
+.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
+	right: 0;
+	left: auto;
+}
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitArrowButtonContainer {
+	float: left;
+}
+.dijitCalendarRtl .dijitCalendarNextYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarRtl .dijitCalendarPreviousYear {
+	margin:0 0 0 0.55em;
+}
+.dijitSliderRtl .dijitSliderImageHandleV {
+	left:auto;
+}
+.dijitSliderRtl .dijitSliderImageHandleH {
+	left:-50%;
+}
+.dijitSliderRtl .dijitSliderMoveableH {
+	right:auto;
+	left:0;
+}
+.dijitSliderRtl .dijitRuleContainerV {
+	float:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleContainerV {
+	text-align:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelV {
+	text-align:left;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelH {
+	zoom:1;
+}
+.dijitSliderRtl .dijitSliderProgressBarH {
+	
+	float:right;
+	right:0;
+	left:auto;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+	background-position:right;
+	padding-right:25px;
+}
+.dijitTabRtl .dijitTabCloseButton {
+	margin-left: 0px;
+	margin-right: 1em;
+}
+.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
+	width:100%;
+}
+.dijitColorPaletteRtl .dijitColorPaletteUnder {
+	
+	left: auto;
+	right: 0;
+}
+.dijitSelectRtl .dijitButtonContents {
+	text-align: right;
+}
+.claro .dijitTextBoxRtlError .dijitValidationContainer {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.claro .dijitComboButtonRtl .dijitStretch {
+	-moz-border-radius: 0px 4px 4px 0px;
+	-webkit-border-top-left-radius: 0px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 0px;	
+}
+.claro .dijitComboButtonRtl .dijitArrowButton {
+	-moz-border-radius:  4px 0px 0px  4px;
+	-webkit-border-top-left-radius:4px;
+    -webkit-border-top-right-radius:0px;
+    -webkit-border-bottom-right-radius:0px;
+    -webkit-border-bottom-left-radius:4px;
+	padding:3px 0px 4px;
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.claro .dijitTabContainerBottom-tabs .dijitTabRtl {
+	margin-right: 0;
+	margin-left: 1px;
+}
+.claro .dijitTabRtl {
+	-moz-box-orient:horizontal;
+	text-align: right;
+}
+.dj_ie7 .claro .dijitTabRtl .dijitTabContent {
+	display: block;
+	left: 0;
+}
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
+	top: 1px;
+}
+.dj_ie7 .claro .tabStripButtonRtl .dijitButtonContents,
+.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,	
+.dj_ie6 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie6 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv {
+	float:left;
+}
+.dj_ie6 .claro .dijitTabRtl .tabLabel,
+.dj_ie6 .claro .dijitTabContainerRight-tabs .dijitTabRtl,
+.dj_ie6 .claro .dijitTabContainerLeft-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerLeft-tabs .dijitTabRtl .dijitTabInnerDiv {
+	
+	zoom:1;
+}
+.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
+	margin-right:5px;
+}
+.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs,
+.dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
+	width:1%;
+}
+.dj_ie6 .dijitTabContainerTopStrip,
+.dj_ie6 .dijitTabContainerBottomStrip {
+	position:absolute;
+}
+.dj_iequirks .claro .dijitTabContainerTopRtl .dijitTabContainerTopStrip {
+	padding-top: 10px;
+}
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtlChecked .dijitTabInnerDiv {
+	background-position:-341px -179px;
+}
+.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon,
+.dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
+   position: relative;
+}
+.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {	
+	
+	padding-left: 3px;
+}
+.dj_iequirks-rtl .claro .dijitTabListWrapper {
+	
+	border-left: 1px solid #fff;
+	border-right: 1px solid #fff;
+}
+.claro .dijitSliderRtl .dijitSliderProgressBarH,
+.claro .dijitSliderRtl .dijitSliderRemainingBarH,
+.claro .dijitSliderRtl .dijitSliderLeftBumper,
+.claro .dijitSliderRtl .dijitSliderRightBumper,
+.claro .dijitSliderRtl .dijitSliderTopBumper {
+	background-position: top right;
+}
+.claro .dijitSliderRtl .dijitSliderProgressBarV,
+.claro .dijitSliderRtl .dijitSliderRemainingBarV,
+.claro .dijitSliderRtl .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.claro .dijitSliderRtl .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.claro .dijitSliderRtl .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.claro .dijitSliderRtl .dijitSliderIncrementIconH {
+	background-position:-357px 50%;
+}
+.claro .dijitSliderRtl .dijitSliderDecrementIconH {
+	background-position:-251px 50%;
+}
+.claro .dijitSelectRtl .dijitButtonContents {
+	border-right-width: 0px;
+	border-left-width: 1px;
+}
+.claro .dijitDialogRtl .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
+.claro .dijitDialogRtl .dijitDialogPaneActionBar {
+	text-align: left;
+	padding: 3px 7px 2px 5px;
+}
+.claro .dijitEditorRtl .dijitEditorIFrameContainer{
+	padding:3px 10px 1px 3px;
+}
+.dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitToolbarRtl .dijitToolbarSeparator {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
+}
+.dijitRtl .dijitIconSave,
+.dijitRtl .dijitIconPrint,
+.dijitRtl .dijitIconCut,
+.dijitRtl .dijitIconCopy,
+.dijitRtl .dijitIconClear,
+.dijitRtl .dijitIconDelete,
+.dijitRtl .dijitIconUndo,
+.dijitRtl .dijitIconEdit,
+.dijitRtl .dijitIconNewTask,
+.dijitRtl .dijitIconEditTask,
+.dijitRtl .dijitIconEditProperty,
+.dijitRtl .dijitIconTask,
+.dijitRtl .dijitIconFilter,
+.dijitRtl .dijitIconConfigure,
+.dijitRtl .dijitIconSearch,
+.dijitRtl .dijitIconApplication,
+.dijitRtl .dijitIconBookmark,
+.dijitRtl .dijitIconChart,
+.dijitRtl .dijitIconConnector,
+.dijitRtl .dijitIconDatabase,
+.dijitRtl .dijitIconDocuments,
+.dijitRtl .dijitIconMail,
+.dijitRtl .dijitLeaf,
+.dijitRtl .dijitIconFile,
+.dijitRtl .dijitIconFunction,
+.dijitRtl .dijitIconKey,
+.dijitRtl .dijitIconPackage,
+.dijitRtl .dijitIconSample,
+.dijitRtl .dijitIconTable,
+.dijitRtl .dijitIconUsers,
+.dijitRtl .dijitFolderClosed,
+.dijitRtl .dijitIconFolderClosed,
+.dijitRtl .dijitFolderOpened,
+.dijitRtl .dijitIconFolderOpen,
+.dijitRtl .dijitIconError, .dijitRtl .dijitContentPaneError { 
+	background-image: url(../../icons/images/commonIconsObjActEnabled_rtl.png); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitRtl .dijitIconSave,
+.dj_ie6 .dijitRtl .dijitIconPrint,
+.dj_ie6 .dijitRtl .dijitIconCut,
+.dj_ie6 .dijitRtl .dijitIconCopy,
+.dj_ie6 .dijitRtl .dijitIconClear,
+.dj_ie6 .dijitRtl .dijitIconDelete,
+.dj_ie6 .dijitRtl .dijitIconUndo,
+.dj_ie6 .dijitRtl .dijitIconEdit,
+.dj_ie6 .dijitRtl .dijitIconNewTask,
+.dj_ie6 .dijitRtl .dijitIconEditTask,
+.dj_ie6 .dijitRtl .dijitIconEditProperty,
+.dj_ie6 .dijitRtl .dijitIconTask,
+.dj_ie6 .dijitRtl .dijitIconFilter,
+.dj_ie6 .dijitRtl .dijitIconConfigure,
+.dj_ie6 .dijitRtl .dijitIconSearch,
+.dj_ie6 .dijitRtl .dijitIconApplication,
+.dj_ie6 .dijitRtl .dijitIconBookmark,
+.dj_ie6 .dijitRtl .dijitIconChart,
+.dj_ie6 .dijitRtl .dijitIconConnector,
+.dj_ie6 .dijitRtl .dijitIconDatabase,
+.dj_ie6 .dijitRtl .dijitIconDocuments,
+.dj_ie6 .dijitRtl .dijitIconMail,
+.dj_ie6 .dijitRtl .dijitLeaf,
+.dj_ie6 .dijitRtl .dijitIconFile,
+.dj_ie6 .dijitRtl .dijitIconFunction,
+.dj_ie6 .dijitRtl .dijitIconKey,
+.dj_ie6 .dijitRtl .dijitIconPackage,
+.dj_ie6 .dijitRtl .dijitIconSample,
+.dj_ie6 .dijitRtl .dijitIconTable,
+.dj_ie6 .dijitRtl .dijitIconUsers,
+.dj_ie6 .dijitRtl .dijitFolderClosed,
+.dj_ie6 .dijitRtl .dijitIconFolderClosed,
+.dj_ie6 .dijitRtl .dijitFolderOpened,
+.dj_ie6 .dijitRtl .dijitIconFolderOpen,
+.dj_ie6 .dijitRtl .dijitIconError, .dj_ie6 .dijitRtl .dijitContentPaneError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled8bit_rtl.png);
+}
+.dijitRtl .dijitDisabled .dijitIconSave,
+.dijitRtl .dijitDisabled .dijitIconPrint,
+.dijitRtl .dijitDisabled .dijitIconCut,
+.dijitRtl .dijitDisabled .dijitIconCopy,
+.dijitRtl .dijitDisabled .dijitIconClear,
+.dijitRtl .dijitDisabled .dijitIconDelete,
+.dijitRtl .dijitDisabled .dijitIconUndo,
+.dijitRtl .dijitDisabled .dijitIconEdit,
+.dijitRtl .dijitDisabled .dijitIconNewTask,
+.dijitRtl .dijitDisabled .dijitIconEditTask,
+.dijitRtl .dijitDisabled .dijitIconEditProperty,
+.dijitRtl .dijitDisabled .dijitIconTask,
+.dijitRtl .dijitDisabled .dijitIconFilter,
+.dijitRtl .dijitDisabled .dijitIconConfigure,
+.dijitRtl .dijitDisabled .dijitIconSearch,
+.dijitRtl .dijitDisabled .dijitIconApplication,
+.dijitRtl .dijitDisabled .dijitIconBookmark,
+.dijitRtl .dijitDisabled .dijitIconChart,
+.dijitRtl .dijitDisabled .dijitIconConnector,
+.dijitRtl .dijitDisabled .dijitIconDatabase,
+.dijitRtl .dijitDisabled .dijitIconDocuments,
+.dijitRtl .dijitDisabled .dijitIconMail,
+.dijitRtl .dijitDisabled .dijitLeaf,
+.dijitRtl .dijitDisabled .dijitIconFile,
+.dijitRtl .dijitDisabled .dijitIconFunction,
+.dijitRtl .dijitDisabled .dijitIconKey,
+.dijitRtl .dijitDisabled .dijitIconPackage,
+.dijitRtl .dijitDisabled .dijitIconSample,
+.dijitRtl .dijitDisabled .dijitIconTable,
+.dijitRtl .dijitDisabled .dijitIconUsers,
+.dijitRtl .dijitDisabled .dijitFolderClosed,
+.dijitRtl .dijitDisabled .dijitIconFolderClosed,
+.dijitRtl .dijitDisabled .dijitFolderOpened,
+.dijitRtl .dijitDisabled .dijitIconFolderOpen,
+.dijitRtl .dijitDisabled .dijitIconError, .dijitRtl .dijitDisabled .dijitContentPaneError {
+	background-image: url(../../icons/images/commonIconsObjActDisabled_rtl.png); 
+}
+.dijitRtl .dijitContentPaneLoading {
+	background:url(../../icons/images/loadingAnimation_rtl.gif) no-repeat;
+}
+.claro .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
+	background-position: -7px 0px;
+}
+.claro .dijitMenuItemRtl .dijitMenuExpand {
+	background-position: -7px 0px;
+	margin-right: 0px;
+	margin-left: 3px;
+}
+.claro .dijitMenuItemRtl .dijitMenuItemIcon {
+	margin:0px 4px 0px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarIncrease{
+	background-position: 0px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarDecrease {
+	background-position: -18px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarIncrease {
+	background-position: -36px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarDecrease {
+	background-position: -55px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarIncrease {
+	background-position: -72px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarDecrease {
+	background-position: -91px 0px;
+}
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerSelected,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickSelected {
+	margin-left:-6px;
+	margin-right:-8px;
+	width: 114%;	
+}
Index: trunk/web/dojo/dijit/themes/claro/Toolbar.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Toolbar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Toolbar.css	(revision 9)
@@ -0,0 +1,133 @@
+
+.claro .dijitToolbar {
+	border-bottom: 1px solid #b5bcc7;
+	background-color: #f1f1f1;
+	background-image: url("images/commonHighlight.png");
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	padding: 2px 0px 2px 4px;
+	zoom: 1;
+}
+.claro .dijitToolbar label {
+	padding: 0px 3px 0 6px;
+}
+.claro .dijitToolbar .dijitButtonNode {
+	border:none;
+	padding: 2px;
+	background-image: url("images/commonHighlight.png");
+	background-position:0 -30px;
+	background-repeat:repeat-x;
+	background-color:rgba(171,214,255,0);
+	border-radius: 2px;	
+	-moz-border-radius: 2px;	
+	-webkit-border-radius: 2px;	
+	-moz-box-shadow: none;
+	-webkit-box-shadow: none;
+	-webkit-transition-property:background-color;
+	-webkit-transition-duration:.3s, .35s;
+}
+.claro .dijitToolbar .dijitComboButton .dijitButtonNode{
+	padding: 3px 2px 3px 2px;	
+}
+.dj_ie .claro .dijitToolbar .dijitButtonNode {
+	background-color: transparent;   
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
+	background: none;	
+}
+.claro .dijitToolbar .dijitComboBox .dijitButtonNode {
+	padding: 0px;
+}
+.claro .dijitToolbar .dijitComboButton {
+	padding: 1px;
+}
+.claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode {
+	background-position:0 0;
+	border:solid 1px #769dc0;
+	background-color: #abd6ff;
+	padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonHover {
+	background-color: #abd6ff;
+	border: solid 1px #769dc0;
+	padding: 0px;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitButtonNode,
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+	background-position:0 0;
+	padding: 2px;
+}
+.claro .dijitToolbar .dijitComboButtonHover .dijitDownArrowButton {
+	background-color: #7dd6fa;
+}
+.claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode {
+	border:solid 1px #769dc0;
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	padding: 1px;
+}
+.claro .dijitToolbar .dijitComboButtonActive {
+	-webkit-transition-duration:.2s;
+	border: solid 1px #769dc0;
+	padding: 0px;
+}
+.claro .dijitToolbar .dijitComboButtonActive .dijitButtonNode {
+	background-color: #7dbefa;
+	background-position:0px -177px;
+	padding: 2px;
+}
+.claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
+	background-color: #7dbefa;
+}
+.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
+	border-color: #769dc0;
+	background-color:#fff;
+	padding: 1px;
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonContents, 
+.dj_ie7 .claro .dijitToolbar .dijitButtonContents {
+	margin: -2px 0;
+	padding: 0;
+}
+.dj_ie6 .claro .dijitToolbar {
+	background-image: none;
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonNode {
+	margin: 1px; 
+	border: none;
+}
+.dj_ie6 .claro .dijitToolbar .dijitButtonHover .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
+.dj_ie6 .claro .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitButtonActive .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitDropDownButtonActive .dijitButtonNode,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive,
+.dj_ie6 .claro .dijitToolbar .dijitToggleButtonActive .dijitButtonNode,
+.claro .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
+	margin: 0;	
+	border-width: 1px;
+	border-style: solid;
+	background-image: none;
+}
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeHover,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitButtonNodeActive,
+.dj_ie6 .claro .dijitToolbar .dijitComboButton .dijitDownArrowButtonActive {
+	padding: 1px;	
+}
+.claro .dijitToolbarSeparator {
+	
+	background: url('../../icons/images/editorIconsEnabled.png');
+}
+.claro .dijitDisabled .dijitToolbar {
+	background:none;
+	background-color:#f5f5f5;
+	border-bottom: 1px solid #d3d3d3;
+}
Index: trunk/web/dojo/dijit/themes/claro/Menu.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Menu.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Menu.css	(revision 9)
@@ -0,0 +1,143 @@
+
+.claro .dijitMenuBar {
+	border: 1px solid #b5bcc7;
+	margin: 0px;
+	padding: 0px;
+	background-color: #e6e6e7;
+	background-image: url("images/commonHighlight.png");
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitMenuBar {
+	background-image:none;
+}
+.claro .dijitMenu {
+	background-repeat:repeat-y;
+	background-color:#fff;
+	border: 1px solid #769dc0;
+	
+	margin: -1px 0;
+}
+.claro .dijitMenuBar .dijitMenuItem {  
+	padding: 6px 10px 7px;
+	background-position:0px 100px;
+	color:#4a4a4a;
+	margin:-1px;
+}	
+.claro .dijitMenuItem {
+	background-image: url("images/menuHighlight.png");
+	background-position:0px -40px;
+	background-repeat:repeat-x;
+}
+.claro .dijitMenuTable {
+	border-collapse:separate;
+	border-spacing:0 0;
+	padding:0px;
+}
+.claro .dijitMenuItem td{
+	padding:1px;
+}
+.claro .dijitMenuPassive .dijitMenuItemHover,
+.claro .dijitMenuPassive .dijitMenuItemSelected {
+	background-color: #abd6ff;
+	border:solid 1px #769dc0;
+	background-position:0px 0px;
+	color:#000;
+	padding: 5px 9px 6px;
+}
+.claro .dijitMenuPassive .dijitMenuItemActive{
+	background-position:0px -177px;
+}
+.dj_ie6 .claro .dijitMenuItem,
+.dj_ie6 .claro .dijitMenuPassive .dijitMenuItem {
+	background-image: none;
+}
+.claro .dijitMenuActive .dijitMenuItemHover,
+.claro .dijitMenuActive .dijitMenuItemSelected {
+	border:solid 1px #769dc0;
+	padding: 5px 9px 6px;
+	background-color: #9dcfff;
+	background-position:0px 0px;
+	color:#000;
+}
+.dj_ie .claro .dijitMenuActive .dijitMenuItemHover,
+.dj_ie .claro .dijitMenuActive .dijitMenuItemSelected,
+.dj_ie .claro .dijitMenuPassive .dijitMenuItemHover,
+.dj_ie .claro .dijitMenuPassive .dijitMenuItemSelected {
+	padding-top: 6px;
+	padding-bottom: 5px;
+	margin-top: -3px;
+}
+.claro .dijitMenuActive .dijitMenuItemActive{
+	background-color: #7dbefa;
+	background-position:0px -177px;
+}
+.claro .dijitMenuItemActive {
+	background-position:0px -177px;
+}
+.claro td.dijitMenuItemIconCell {
+ padding: 2px;
+ margin: 0px 0px 0px 4px;
+}
+.claro td.dijitMenuItemLabel {
+	padding-top: 5px;
+	padding-bottom: 5px;
+}
+.claro .dijitMenuExpand {
+	width: 7px;
+	height: 7px;
+	background-image: url('images/spriteArrows.png');
+	background-position: -14px 0px;
+	margin-right:3px;
+}
+.claro .dijitMenuItemDisabled .dijitMenuItemIconCell {
+	opacity:1;
+}
+.claro .dijitMenuSeparatorTop {
+	height: auto;
+	margin-top:1px; 
+	border-bottom: 1px solid #b5bcc7
+}
+.claro .dijitMenuSeparatorBottom{
+	height: auto;
+	margin-bottom:1px;
+}
+.claro .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.claro .dijitCheckedMenuItemIcon {
+	background-image: url('form/images/checkboxRadioButtonStates.png');
+	background-repeat:no-repeat;
+	background-position: -15px 50%;
+	width:15px;
+	height:16px;
+}
+.dj_ie6 .claro .dijitCheckedMenuItemIcon {
+	background-image: url('form/images/checkboxAndRadioButtons_IE6.png');
+}
+.claro .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: 0 50%;
+}
+.claro .dijitComboBoxMenu {
+	margin-left:0px;
+	background-image: none;
+}
+.claro .dijitComboBoxMenu .dijitMenuItem{
+	padding:2px 0px;
+	text-indent:6px;
+	border-width:1px 0px 1px 0px;
+	border-style:solid;
+	border-color:#fff;
+}
+.claro .dijitComboBoxMenu .dijitMenuItemSelected {
+	color:#000;
+	border-color:#768dc0;
+	background-color:#abd6ff;
+}
+.claro .dijitComboBoxMenuActive .dijitMenuItemSelected {
+	background-position:0px -177px;
+	background-color:#7dbefa;
+}
+.claro .dijitMenuPreviousButton, .claro .dijitMenuNextButton {
+	font-style: italic;
+}
Index: trunk/web/dojo/dijit/themes/claro/TitlePane_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/TitlePane_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/TitlePane_rtl.css	(revision 9)
@@ -0,0 +1,4 @@
+
+.claro .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
+	background-position: -7px 0px;
+}
Index: trunk/web/dojo/dijit/themes/claro/Editor_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Editor_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Editor_rtl.css	(revision 9)
@@ -0,0 +1,4 @@
+
+.claro .dijitEditorRtl .dijitEditorIFrameContainer{
+	padding:3px 10px 1px 3px;
+}
Index: trunk/web/dojo/dijit/themes/claro/Calendar.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Calendar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Calendar.css	(revision 9)
@@ -0,0 +1,206 @@
+
+.claro .dijitCalendar {
+	border:solid 1px #b5bcc7;
+	background-color:#d4ebff;
+	background-image:url("images/calendarContainerImages.png");
+	background-position:0px -448px;
+	background-repeat:repeat-x;
+	text-align:center;
+	padding:6px 5px 3px 5px;
+	-moz-border-radius:4px;
+	-webkit-border-radius:4px;	
+}
+.dj_ie6 .claro .dijitCalendar {
+	background-image:none;
+}
+.claro .dijitCalendar img {
+	border:none;
+}
+.claro .dijitCalendarHover,
+.claro .dijitCalendarActive {
+	background-color: #b7dcff;
+	border:solid 1px #769dc0;
+}
+.claro .dijitCalendarMonthContainer th {
+	text-align:center;
+	padding-bottom:4px;
+	vertical-align:middle;
+}
+.claro .dijitCalendarMonthLabelSpacer {
+	display:none;
+}
+.claro .dijitCalendarMonthLabel {
+	color:#000000;
+	font-size: 1.091em;
+	display: block;
+}
+.claro .dijitCalendarIncrementControl {
+	width:18px;
+	height:16px;
+	background-image: url("images/calendarArrows.png");
+	background-repeat: no-repeat;
+}
+.dj_ie6 .claro .dijitCalendarIncrementControl {
+	background-image: url("images/calendarArrows8bit.png");
+}
+.claro .dijitCalendarIncrease {
+	background-position:-18px 0px;
+}
+.claro .dijitCalendarArrowHover .dijitCalendarDecrease {
+	background-position:-36px 0px;
+}
+.claro .dijitCalendarArrowHover .dijitCalendarIncrease {
+	background-position:-55px 0px;
+}
+.claro .dijitCalendarArrowActive .dijitCalendarDecrease {
+	background-position:-72px 0px;
+}
+.claro .dijitCalendarArrowActive .dijitCalendarIncrease {
+	background-position:-91px 0px;
+}
+.claro .dijitA11ySideArrow {
+	
+	display: none;
+}
+.claro .dijitDayLabels th {
+	padding:0px 4px 0px 4px;
+	border-bottom:solid 1px #99b5cd;
+	font-weight:bold;
+	text-align:center;
+}
+.claro .dijitCalendarDayLabelTemplate {
+	padding-bottom:0em;
+	text-align:center;
+	border-bottom:1px solid #99B5CD;
+	font-size:0.909em;
+	padding:0 3px 2px;
+}
+.claro .dijitCalendarDateTemplate {
+	text-align:center;
+	background-color:#fff;
+	background-image:url("images/calendarContainerImages.png");
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	border-bottom: 1px solid #dadde1;
+	padding-top:0px;
+	font-size:0.909em;
+	font-family: Arial;
+	font-weight:bold;
+	letter-spacing:.05em;
+	text-align:center;
+}
+.dj_ie6 .claro .dijitCalendarDateTemplate {
+	background-image: none;
+}
+.claro .dijitCalendarPreviousMonth,
+.claro .dijitCalendarNextMonth {
+	background-color:#ebf3f9;
+	background-image:none;
+	border-bottom:solid 1px #d2dae8;
+	color:#547da1;
+}
+.claro .dijitCalendarDateTemplate .dijitCalendarDateLabel {
+	text-decoration:none;
+	display:block;
+	padding:3px 5px 3px 4px;
+	border:solid 1px #fff;
+	color:#1e1e1e;
+	background-color:rgba(171,212,251,0);	
+	-webkit-transition-property:background-color, border;
+ 	-webkit-transition-duration:.35s;
+}
+.claro .dijitCalendarPreviousMonth .dijitCalendarDateLabel,
+.claro .dijitCalendarNextMonth .dijitCalendarDateLabel{
+	color:#547da1;
+	border-color:#ebf3f9;
+}
+.claro .dijitCalendarYearContainer {
+	vertical-align:middle;
+}
+.claro .dijitCalendarYearControl {
+	padding: 1px 2px 2px 2px;
+}
+.claro .dijitCalendarYearLabel {
+	padding:2px 0px 0px 0px;
+	margin:0;
+}
+.claro .dijitCalendarYearLabel span {
+	
+	vertical-align:middle;
+}
+.claro .dijitCalendarSelectedYear {
+	padding:0px 3px;
+}
+.claro .dijitCalendarNextYear,
+.claro .dijitCalendarPreviousYear {
+	padding: 1px 6px 1px 6px;
+	font-size:0.909em;
+}
+.claro .dijitCalendarSelectedYear {
+	font-size:1.091em;
+	color:#000;
+}
+.claro .dijitCalendarHoveredDate .dijitCalendarDateLabel{
+	background-color:#abd4fb;
+	border:solid 1px #729dc2;
+	color:#000;
+	-webkit-transition-duration:.2s;
+}
+.claro .dijitCalendarNextYearHover,
+.claro .dijitCalendarPreviousYearHover {
+	color:#000;
+	border:solid 1px #fefefe;
+	padding: 0px 5px 0px 5px;	
+	background-color:#eaf4fe;
+}
+.claro .dijitCalendarNextYearActive,
+.claro .dijitCalendarPreviousYearActive {
+	border: solid 1px #87b3d9;
+	padding: 0px 5px 0px 5px;	
+	background-color:#90bde6;
+}
+.claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
+	background-image:url("images/calendarContainerImages.png");
+	background-position:0px -300px;
+	background-color:#75b5f0;
+	border:solid 1px #fff;
+	-webkit-transition-duration:.1s;
+}
+.dj_ie6 .claro .dijitCalendarActiveDate .dijitCalendarDateLabel {
+	background-image:none;
+}
+.claro .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+	color:#000;
+	background-color:#e7f4ff;
+	border-color:#accfed;
+}
+.claro .dijitCalendarDisabledDate .dijitCalendarDateLabel {
+	text-decoration:line-through;
+	
+	
+	background-color: transparent;
+	border-width: 0px;
+	padding: 4px 6px 4px 5px;
+	color: #547DA1;
+}
+.claro .dijitCalendarMonthContainer .dijitMenu{
+	
+	top: 20px !important;
+	left: 0px;
+	border-color: #769dc0;
+	background-color: #fff;
+	text-align:center;
+	background-image: none;
+}
+.claro .dijitCalendarMonthContainer .dijitMenu .dijitCalendarMonthLabel{
+	border-top: solid 1px #fff;
+	border-bottom: solid 1px #fff;
+	padding: 2px 20px;
+}
+.claro .dijitCalendarMonthContainer .dijitMenu .dijitMenuItemHover {
+	background-color: #abd6ff;
+	border-color: #769dc0;
+	border-width:1px 0px;
+	background-image: url("images/commonHighlight.png");
+	background-repeat:repeat-x;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/Slider.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Slider.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Slider.css	(revision 9)
@@ -0,0 +1,294 @@
+
+.claro .dijitSliderBar {
+	border-style: solid;
+	outline: 1px;
+}
+.claro .dijitSliderFocused .dijitSliderBar {
+	border-color: #769dc0;
+}
+.claro .dijitSliderHover .dijitSliderBar {
+	border-color: #769dc0;
+}
+.claro .dijitSliderDisabled .dijitSliderBar {
+	background-image: none;
+	border-color: #d3d3d3;
+}
+.claro .dijitRuleLabelsContainerH {
+	padding: 2px 0px;
+}
+.claro .dijitSlider .dijitSliderProgressBarH,
+.claro .dijitSlider .dijitSliderLeftBumper{
+	background-image: url("images/sliderHorizontal.png");
+	background-repeat:repeat-x;
+	background-position:0 -20px;
+	border-color: #b5bcc7;
+	background-color: #cfe5fa;
+}
+.claro .dijitSlider .dijitSliderRemainingBarH,
+.claro .dijitSlider .dijitSliderRightBumper{
+	background-image: url("images/sliderHorizontal.png");
+	background-repeat:repeat-x;
+	background-position:0 -11px;
+	border-color: #b5bcc7;
+	background-color: #fff;
+}
+.claro .dijitSliderRightBumper {
+	border-right: solid 1px #b5bcc7;
+}
+.claro .dijitSliderLeftBumper {
+	border-left: solid 1px #b5bcc7;
+}
+.claro .dijitSliderHover .dijitSliderProgressBarH,
+.claro .dijitSliderHover .dijitSliderLeftBumper{
+	background-position:0 -20px;
+	background-color: #abd6ff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderHover .dijitSliderRemainingBarH,
+.claro .dijitSliderHover .dijitSliderRightBumper{
+	background-position:0 0px;
+	background-color: #fff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderFocused .dijitSliderProgressBarH,
+.claro .dijitSliderFocused .dijitSliderLeftBumper{
+	background-position:0 -30px;
+	background-color: #abd6ff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderFocused .dijitSliderRemainingBarH,
+.claro .dijitSliderFocused .dijitSliderRightBumper{
+	background-position:0 -9px;
+	background-color: #fff;
+	border-color: #769dc0;
+}
+.claro .dijitSliderDisabled .dijitSliderProgressBarH,
+.claro .dijitSliderDisabled .dijitSliderLeftBumper{
+	background-color: #cdcdcd;
+	background-image:none;
+}
+.claro .dijitSliderDisabled .dijitSliderRemainingBarH,
+.claro .dijitSliderDisabled .dijitSliderRightBumper{
+	background-color: #efefef;
+}
+.claro .dijitRuleLabelsContainerV {
+	padding: 0px 2px;
+}
+.claro .dijitSlider .dijitSliderProgressBarV,
+.claro .dijitSlider .dijitSliderBottomBumper{
+	background-image: url("images/sliderVertical.png");
+	background-repeat:repeat-y;
+	background-position:-36px 0;
+	border-color: #b5bcc7;
+	background-color: #cfe5fa;
+}
+.claro .dijitSlider .dijitSliderRemainingBarV,
+.claro .dijitSlider .dijitSliderTopBumper{
+	background-image: url("images/sliderVertical.png");
+	background-repeat:repeat-y;
+	background-position:-3px 0;
+	border-color: #b5bcc7;
+	background-color: #fff;
+}
+.claro .dijitSliderBottomBumper {
+	border-bottom: solid 1px #b5bcc7;
+}
+.claro .dijitSliderTopBumper {
+	border-top: solid 1px #b5bcc7;
+}
+.claro .dijitSliderHover .dijitSliderProgressBarV,
+.claro .dijitSliderHover .dijitSliderBottomBumper{
+	background-position:-36px 0;
+	background-color: #abd6ff;
+}
+.claro .dijitSliderHover .dijitSliderRemainingBarV,
+.claro .dijitSliderHover .dijitSliderTopBumper{
+	background-position:0 0;
+	background-color: #fff;
+}
+.claro .dijitSliderFocused .dijitSliderProgressBarV,
+.claro .dijitSliderFocused .dijitSliderBottomBumper{
+	background-position:-56px 0;
+	background-color: #abd6ff;
+}
+.claro .dijitSliderFocused .dijitSliderRemainingBarV,
+.claro .dijitSliderFocused .dijitSliderTopBumper{
+	background-position:-18px 0;
+	background-color: #fff;
+}
+.claro .dijitSliderDisabled .dijitSliderProgressBarV,
+.claro .dijitSliderDisabled .dijitSliderBottomBumper{
+	background-color: #cdcdcd;
+}
+.claro .dijitSliderDisabled .dijitSliderRemainingBarV,
+.claro .dijitSliderDisabled .dijitSliderTopBumper{
+	background-color: #efefef;
+}
+.claro .dijitSliderImageHandleH {
+	border: 0px;
+	width: 18px;
+	height: 16px;
+	background-image: url("images/sliderThumbs.png");
+	background-repeat:no-repeat;
+	background-position:0 0;
+}
+.claro .dijitSliderHover .dijitSliderImageHandleH {
+	background-position:-18px 0;
+}
+.claro .dijitSliderFocused .dijitSliderImageHandleH {
+	background-position:-36px 0;
+}
+.claro .dijitSliderProgressBarH .dijitSliderThumbHover{
+	background-position:-36px 0;
+}
+.claro .dijitSliderProgressBarH .dijitSliderThumbActive{
+	background-position:-36px 0;
+}
+.claro .dijitSliderReadOnly .dijitSliderImageHandleH,
+.claro .dijitSliderDisabled .dijitSliderImageHandleH {
+	background-position:-54px 0;
+}
+.claro .dijitSliderImageHandleV {
+	border: 0px;
+	width: 18px;
+	height: 16px;
+	background-image: url("images/sliderThumbs.png");
+	background-repeat:no-repeat;
+	background-position:-289px 0;
+}
+.claro .dijitSliderHover .dijitSliderImageHandleV {
+	background-position:-307px 0;
+}
+.claro .dijitSliderFocused .dijitSliderImageHandleV {
+	background-position:-325px 0;
+}
+.claro .dijitSliderProgressBarV .dijitSliderThumbHover{
+	background-position:-325px 0;
+}
+.claro .dijitSliderProgressBarV .dijitSliderThumbActive{
+	background-position:-325px 0;
+}
+.claro .dijitSliderReadOnly .dijitSliderImageHandleV,
+.claro .dijitSliderDisabled .dijitSliderImageHandleV {
+	background-position:-343px 0;
+}
+.claro .dijitSliderButtonContainerH{
+	padding: 1px 3px 1px 2px;
+}
+.claro .dijitSliderButtonContainerV{
+	padding: 3px 1px 2px 1px;
+}
+.claro .dijitSliderDecrementIconH,
+.claro .dijitSliderIncrementIconH,
+.claro .dijitSliderDecrementIconV,
+.claro .dijitSliderIncrementIconV {
+	background-image: url('images/commonFormArrows.png');
+	background-repeat:no-repeat;
+	background-color: #e9ecf2;
+	-moz-border-radius: 2px;
+	-webkit-border-radius: 2px;
+	border: solid 1px #b5bcc7;
+	font-size: 1px;
+}
+.claro .dijitSliderDecrementIconH,
+.claro .dijitSliderIncrementIconH {
+	height: 12px;
+	width: 9px;
+}
+.claro .dijitSliderDecrementIconV,
+.claro .dijitSliderIncrementIconV {
+	height: 9px;
+	width: 12px;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconH,
+.claro .dijitSliderActive .dijitSliderIncrementIconH,
+.claro .dijitSliderActive .dijitSliderDecrementIconV,
+.claro .dijitSliderActive .dijitSliderIncrementIconV,
+.claro .dijitSliderHover .dijitSliderDecrementIconH,
+.claro .dijitSliderHover .dijitSliderIncrementIconH,
+.claro .dijitSliderHover .dijitSliderDecrementIconV,
+.claro .dijitSliderHover .dijitSliderIncrementIconV {
+	border: solid 1px #769dc0;
+	background-color:#fff;
+}
+.claro .dijitSliderDecrementIconH {
+	background-position:-357px 50%;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconH
+.claro .dijitSliderHover .dijitSliderDecrementIconH {
+	background-position:-393px 50%;
+}
+.claro .dijitSliderIncrementIconH {
+	background-position:-251px 50%;
+}
+.claro .dijitSliderActive .dijitSliderIncrementIconH
+.claro .dijitSliderHover .dijitSliderIncrementIconH {
+	background-position:-283px 50%;
+}
+.claro .dijitSliderDecrementIconV {
+	background-position:-38px 50%;
+}
+.claro .dijitSliderActive .dijitSliderDecrementIconV
+.claro .dijitSliderHover .dijitSliderDecrementIconV {
+	background-position:-73px 50%;
+}
+.claro .dijitSliderIncrementIconV {
+	background-position:-143px 49%;
+}
+.claro .dijitSliderActive .dijitSliderIncrementIconV
+.claro .dijitSliderHover .dijitSliderIncrementIconV {
+	background-position:-178px 49%;
+}
+.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonHover,
+.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonHover,
+.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonHover,
+.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonHover {
+	background-color: #cce3fc;
+}
+.claro .dijitSliderButtonContainerV .dijitSliderDecrementButtonActive,
+.claro .dijitSliderButtonContainerH .dijitSliderDecrementButtonActive,
+.claro .dijitSliderButtonContainerV .dijitSliderIncrementButtonActive,
+.claro .dijitSliderButtonContainerH .dijitSliderIncrementButtonActive {
+	background-color: #a5d0fc;
+	border-color:#6591b9;
+}
+.claro .dijitSliderButtonInner {
+	visibility: hidden;
+}
+.claro .dijitSliderDisabled .dijitSliderBar{
+	border-color: #d3d3d3;
+}
+.claro .dijitSliderReadOnly *,.claro .dijitSliderDisabled * {
+	border-color: #d3d3d3;
+	color: #bdbdbd;
+}
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.claro .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position:-321px 50%;
+	background-color:#e9e9e9;
+}
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.claro .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position:-215px 50%;
+	background-color:#e9e9e9;
+}
+.claro .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.claro .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position:-3px 49%;
+	background-color:#e9e9e9;
+}
+.claro .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.claro .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position:-107px 49%;
+	background-color:#e9e9e9;
+}
+.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarH,
+.dj_ie6 .claro .dijitSlider .dijitSliderLeftBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarH,
+.dj_ie6 .claro .dijitSlider .dijitSliderRightBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderProgressBarV,
+.dj_ie6 .claro .dijitSlider .dijitSliderTopBumper,
+.dj_ie6 .claro .dijitSlider .dijitSliderRemainingBarV,
+.dj_ie6 .claro .dijitSlider .dijitSliderBottomBumper {
+	background-image:none;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/Slider_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Slider_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Slider_rtl.css	(revision 9)
@@ -0,0 +1,26 @@
+.claro .dijitSliderRtl .dijitSliderProgressBarH,
+.claro .dijitSliderRtl .dijitSliderRemainingBarH,
+.claro .dijitSliderRtl .dijitSliderLeftBumper,
+.claro .dijitSliderRtl .dijitSliderRightBumper,
+.claro .dijitSliderRtl .dijitSliderTopBumper {
+	background-position: top right;
+}
+.claro .dijitSliderRtl .dijitSliderProgressBarV,
+.claro .dijitSliderRtl .dijitSliderRemainingBarV,
+.claro .dijitSliderRtl .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.claro .dijitSliderRtl .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.claro .dijitSliderRtl .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.claro .dijitSliderRtl .dijitSliderIncrementIconH {
+	background-position:-357px 50%;
+}
+.claro .dijitSliderRtl .dijitSliderDecrementIconH {
+	background-position:-251px 50%;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/Checkbox.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Checkbox.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Checkbox.css	(revision 9)
@@ -0,0 +1,46 @@
+
+.claro .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url('../images/checkmarkNoBorder.png');
+}
+.dj_ie6 .claro .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url('../images/checkmarkNoBorder.gif');
+}
+.claro .dijitCheckBox,
+.claro .dijitCheckBoxIcon			{
+	background-image: url('images/checkboxRadioButtonStates.png'); 
+	background-repeat: no-repeat;
+	width: 15px;
+	height: 16px;
+	margin: 0 2px 0 0;
+	padding: 0;
+}
+.dj_ie6 .claro .dijitCheckBox,
+.dj_ie6 .claro .dijitCheckBoxIcon			{
+	background-image: url('images/checkboxAndRadioButtons_IE6.png'); 
+}
+.claro .dijitCheckBox,
+.claro .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -15px;
+}
+.claro .dijitCheckBoxChecked,
+.claro .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: -0px;
+}
+.claro .dijitCheckBoxDisabled {
+	
+	background-position: -75px;
+}
+.claro .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -60px;
+}
+.claro .dijitCheckBoxHover {
+	
+	background-position: -45px;
+}
+.claro .dijitCheckBoxCheckedHover {
+	
+	background-position: -30px;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/NumberSpinner.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/NumberSpinner.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/NumberSpinner.css	(revision 9)
@@ -0,0 +1,100 @@
+
+.claro .dijitSpinnerButtonContainer {
+	overflow: hidden;
+	position: relative;
+	width: auto;
+	padding: 0 2px;
+}
+.claro .dijitSpinnerButtonContainer .dijitSpinnerButtonInner {
+	border-width: 1px 0; 
+	border-style: solid none;
+}
+.claro .dijitSpinner .dijitArrowButton {
+	width:auto;
+	background-color: #ebeef4;
+	background-image: url("images/formHighlight.png");
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	overflow: hidden;
+}
+.dj_iequirks .claro .dijitSpinner .dijitArrowButton {
+	overflow: visible; 
+}
+.claro .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.claro .dijitSpinner .dijitArrowButtonInner {
+	border:solid 1px #fff;
+	border-bottom-width: 0; 
+	background-image: url("images/commonFormArrows.png");
+	background-repeat: no-repeat;
+	height: 100%;
+	width:15px;
+	padding-left: 1px;
+	padding-right: 1px;
+	
+	background-position:-139px center;
+	
+	display: block;
+	margin: -1px 0px -1px 0px;	
+	#margin-top: 0; 
+}
+.dj_iequirks .claro .dijitSpinner .dijitArrowButtonInner {
+	width: 19px;
+}
+.claro .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {
+	background-position:-34px;
+}
+.claro .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
+.claro .dijitUpArrowButtonActive,
+.claro .dijitDownArrowButtonActive {
+	background-color:#abd6ff;
+}
+.claro .dijitSpinner .dijitUpArrowButtonHover,
+.claro .dijitSpinner .dijitDownArrowButtonHover,
+.claro .dijitSpinnerFocused .dijitArrowButton {
+	background-color: #a0d1ff;
+}
+.claro .dijitSpinner .dijitUpArrowButtonHover .dijitArrowButtonInner {
+	background-position:-174px;
+}
+.claro .dijitSpinner .dijitDownArrowButtonHover .dijitArrowButtonInner {
+	background-position:-69px;
+}
+.claro .dijitSpinnerFocused {
+	background-color: #fff;
+	background-image: none;
+}
+.claro .dijitSpinner .dijitDownArrowButtonActive,
+.claro .dijitSpinner .dijitUpArrowButtonActive {
+	background-color: #3299f9;
+	background-position:0px -177px;
+}
+.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner,
+.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
+	
+	border: 0px;
+	padding: 1px;
+	margin-right:2px;
+	margin-bottom:1px;
+}
+.claro .dijitSpinner .dijitUpArrowButtonActive .dijitArrowButtonInner {
+	background-position:-173px;
+}
+.claro .dijitSpinner .dijitDownArrowButtonActive .dijitArrowButtonInner {
+	background-position:-68px;
+}
+.claro .dijitSpinnerDisabled .dijitArrowButtonInner {
+	background-color: #f1f1f1;
+}
+.claro .dijitSpinnerDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position:-104px;
+}
+.claro .dijitSpinnerDisabled .dijitDownArrowButton .dijitArrowButtonInner {
+	background-position:1px;
+}
+.dj_ie7 .claro .dijitSpinner {
+	overflow:visible;
+} 
Index: trunk/web/dojo/dijit/themes/claro/form/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Common.css	(revision 9)
@@ -0,0 +1,132 @@
+
+.claro .dijitTextBoxError .dijitValidationContainer {
+	background-color: #d46363;
+	background-image: url('images/error.png');
+	background-position: top center;
+	border: solid #d46464 0px;
+	border-left-width: 1px;
+	width: 9px;
+}
+.claro .dijitTextBoxError .dijitValidationIcon {
+	width: 0px;
+	background-color: transparent !important; 
+}
+.claro .dijitTextBox .dijitInputContainer,
+.claro .dijitTextArea,
+.claro .dijitInputField .dijitPlaceHolder {
+	padding: 2px;
+}
+.claro .dijitTextBox,
+.claro .dijitTextBox .dijitButtonNode {
+	
+	border-color: #b5bcc7;
+	-webkit-transition-property:background-color, border;
+ 	-webkit-transition-duration:.35s;
+}
+.claro .dijitTextBox {
+	background-color: #f7fcff;
+}
+.claro .dijitTextBoxHover,
+.claro .dijitTextBoxHover .dijitButtonNode {
+	border-color: #769dc0;
+ 	-webkit-transition-duration:.25s;
+}
+.claro .dijitTextBoxHover {
+	background-color: #e9f4fe;
+	background-image: url('images/textBox_back.png');
+	background-repeat: repeat-x;
+}
+.claro .dijitTextBoxError,
+.claro .dijitTextBoxError .dijitButtonNode {
+	border-color: #d46464;
+}
+.claro .dijitTextBoxError,
+.claro .dijitTextBoxError .dijitInputContainer {
+	background-color: #fdf7f7;
+}
+.claro .dijitTextBoxFocused,
+.claro .dijitTextBoxFocused .dijitButtonNode {
+	border-color:#769dc0;
+ 	-webkit-transition-duration:.1s;
+}
+.claro .dijitTextBoxFocused {
+	background-color: #fff;
+	background-image: url('images/textBox_back.png');
+	background-repeat: repeat-x;
+}
+.claro .dijitTextBoxFocused .dijitInputContainer {
+	background: #fff;
+}
+.claro .dijitTextBoxErrorFocused,
+.claro .dijitTextBoxErrorFocused .dijitButtonNode {
+	border-color: #ce4f4f;
+}
+.claro .dijitTextBoxDisabled,
+.claro .dijitTextBoxDisabled .dijitButtonNode {
+	border-color: #d3d3d3;
+}
+.claro .dijitTextBoxDisabled {
+	background-color: #efefef;
+	background-image: none;
+	color: #818181;
+}
+.claro .dijitComboBox .dijitArrowButtonInner {
+	background-image: url("images/commonFormArrows.png");
+	background-position:-35px 53%;
+	background-repeat: no-repeat;
+	margin: 0px;
+	width:16px;
+	height:100%;
+	border: 1px solid #fff;
+}
+.claro .dijitTextBox .dijitInputField {
+	padding-top: 1px; 
+	padding-bottom: 1px;
+}
+.claro .dijitTextBox .dijitInputInner {
+	
+	padding: 1px 2px 1px 0; 
+}
+.claro .dijitTextBox .dijitValidationContainer {
+	padding: 0 0 2px 0; 
+}
+.claro .dijitComboBox .dijitButtonNode {
+	background-color: #ebeef4;
+	background-image: url("images/formHighlight.png");
+	background-repeat:repeat-x;
+}
+.claro .dijitComboBoxHover .dijitButtonNode {
+	background-color:#abd6ff;
+}
+.claro .dijitComboBoxHover .dijitArrowButtonInner {
+	background-position:-70px 53%;
+}
+.claro .dijitComboBoxFocused .dijitButtonNode {
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	padding: 1px;
+}	
+.claro .dijitComboBoxFocused .dijitArrowButtonInner {
+	background-position:-70px 53%;
+	border: 0px none;
+}
+.claro div.dijitComboBoxDisabled .dijitArrowButtonInner {
+	
+	background-position:0px 50%;
+	background-color:#f1f1f1;
+}
+.dj_ff3 .claro .dijitInputField input[type="hidden"] {
+	display: none;
+	height: 0;
+	width: 0;
+}
+.dj_ie6 .claro .dijitTextBox,
+.dj_ie6 .claro .dijitComboBox .dijitButtonNode {
+	background-image: none;
+}
+.dj_quirks .claro .dijitComboBox .dijitArrowButtonInner {
+	border: 0px;
+}
+.dj_quirks .claro .dijitComboBox .dijitArrowButtonContainer {
+	padding: 1px;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/Common_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Common_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Common_rtl.css	(revision 9)
@@ -0,0 +1,5 @@
+
+.claro .dijitTextBoxRtlError .dijitValidationContainer {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/RadioButton.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/RadioButton.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/RadioButton.css	(revision 9)
@@ -0,0 +1,51 @@
+
+.claro .dijitToggleButton .dijitRadio,
+.claro .dijitToggleButton .dijitRadioIcon {
+	background-image: url('images/checkboxRadioButtonStates.png');
+}
+.dj_ie6 .claro .dijitToggleButton .dijitRadio,
+.dj_ie6 .claro .dijitToggleButton .dijitRadioIcon {
+	background-image: url('images/checkboxAndRadioButtons_IE6.png');
+}
+.claro .dijitRadio,
+.claro .dijitRadioIcon	{		
+	background-image: url('images/checkboxRadioButtonStates.png'); 
+	background-repeat: no-repeat;
+	width: 15px;
+	height: 15px;
+	margin: 0px 2px 0px 0px;
+	padding: 0px;
+}
+.dj_ie6 .claro .dijitRadio,
+.dj_ie6 .claro .dijitRadioIcon	{		
+	background-image: url('images/checkboxAndRadioButtons_IE6.png'); 
+}
+.claro .dijitRadio{
+	
+	background-position: -105px;
+}
+.claro .dijitToggleButton .dijitRadioIcon {
+	
+	background-position: -107px;
+}
+.claro .dijitRadioDisabled {
+	
+	background-position: -165px;
+}
+.claro .dijitRadioHover {
+	
+	background-position: -135px;
+}
+.claro .dijitRadioChecked{
+	background-position: -90px;
+}
+.claro .dijitToggleButtonChecked .dijitRadioIcon {
+	background-position: -92px;
+}
+.claro .dijitRadioCheckedHover{
+	background-position: -120px;
+}
+.claro .dijitRadioCheckedDisabled {
+	
+	background-position: -150px;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/Button.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Button.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Button.css	(revision 9)
@@ -0,0 +1,125 @@
+
+.claro .dijitButtonNode {
+	
+	-webkit-transition-property:background-color;
+ 	-webkit-transition-duration:.3s;
+}
+.claro .dijitButton .dijitButtonNode,
+.claro .dijitDropDownButton .dijitButtonNode,
+.claro .dijitComboButton .dijitButtonNode,
+.claro .dijitToggleButton .dijitButtonNode {
+	
+	border: 1px solid #769dc0;
+	padding:2px 4px 4px 4px;
+	background-image: url("images/button.png");
+	background-position: center top;
+	background-repeat: repeat-x;
+	background-color: #e4f2ff;
+	border-radius: 4px;
+	-moz-border-radius: 4px;
+	-webkit-border-radius: 4px;
+	box-shadow:0px 1px 1px rgba(0,0,0,0.15);
+	-webkit-box-shadow:0px 1px 1px rgba(0,0,0,0.15);
+	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.15);	
+}
+.claro .dijitComboButton .dijitArrowButton {
+	border-left-width: 0px;
+	padding: 4px 2px 4px 2px;	
+}
+.claro .dijitArrowButtonInner {
+	width: 15px;
+	height: 15px;
+	margin: 0 auto;
+	background-image:url("images/buttonArrows.png");
+	background-repeat:no-repeat;
+	background-position:-51px 53%;
+}
+.claro .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -77px 53%;
+}
+.claro .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -26px 53%;
+}
+.claro .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: 0px 53%;
+}
+.claro .dijitDisabled .dijitArrowButtonInner {
+	background-position: -151px 53%;
+}
+.claro .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -177px 53%;
+}
+.claro .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -126px 53%;
+}
+.claro .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -100px 53%;
+}
+.claro .dijitButtonText {
+	padding: 0 0.3em;
+	text-align: center;
+}
+.claro .dijitDisabled .dijitButtonText {
+	color: #7F7F7F;
+}
+.claro .dijitButtonHover .dijitButtonNode,
+.claro .dijitDropDownButtonHover .dijitButtonNode,
+.claro .dijitComboButton .dijitButtonNodeHover, 
+.claro .dijitComboButton .dijitDownArrowButtonHover,
+.claro .dijitToggleButtonHover .dijitButtonNode {
+	background-color: #afd9ff;
+	color:#000;
+ 	-webkit-transition-duration:.2s;
+}
+.claro .dijitButtonActive .dijitButtonNode, 
+.claro .dijitDropDownButtonActive .dijitButtonNode,
+.claro .dijitComboButtonActive .dijitButtonNode,
+.claro .dijitToggleButtonActive .dijitButtonNode {
+	background-color: #99cfff;
+	box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
+ 	-webkit-transition-duration:.1s;
+}
+.claro .dijitButtonDisabled,
+.claro .dijitDropDownButtonDisabled,
+.claro .dijitComboButtonDisabled,
+.claro .dijitToggleButtonDisabled {
+	background-image: none;
+	outline: none;
+}
+.claro .dijitButtonDisabled .dijitButtonNode,
+.claro .dijitDropDownButtonDisabled .dijitButtonNode,
+.claro .dijitComboButtonDisabled .dijitButtonNode,
+.claro .dijitToggleButtonDisabled .dijitButtonNode { 
+	background-position:0px -149px;
+	background-color: #e3e3e3;
+	border: solid 1px #c9c9c9;
+	color: #696969;
+	box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-webkit-box-shadow:0px 0px 0px rgba(0,0,0,0);
+	-moz-box-shadow: 0px 0px 0px rgba(0,0,0,0);
+}
+.claro .dijitComboButtonDisabled .dijitArrowButton{ 
+	border-left-width: 0px;
+}
+.claro table.dijitComboButton {
+	border-collapse: separate;	
+}
+.dj_ie6 .claro .dijitButtonNode {
+	background-image: none;
+}
+.claro .dijitComboButton .dijitStretch {
+	-moz-border-radius: 4px 0px 0px 4px;
+	-webkit-border-top-left-radius: 4px;
+	-webkit-border-top-right-radius: 0px;
+	-webkit-border-bottom-right-radius: 0px;
+	-webkit-border-bottom-left-radius: 4px;
+}
+.claro .dijitComboButton .dijitArrowButton {
+	-moz-border-radius: 0px 4px 4px 0px;
+	-webkit-border-top-left-radius: 0px;
+	-webkit-border-top-right-radius: 4px;
+	-webkit-border-bottom-right-radius: 4px;
+	-webkit-border-bottom-left-radius: 0px;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/Button_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Button_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Button_rtl.css	(revision 9)
@@ -0,0 +1,18 @@
+
+.claro .dijitComboButtonRtl .dijitStretch {
+	-moz-border-radius: 0px 4px 4px 0px;
+	-webkit-border-top-left-radius: 0px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 0px;	
+}
+.claro .dijitComboButtonRtl .dijitArrowButton {
+	-moz-border-radius:  4px 0px 0px  4px;
+	-webkit-border-top-left-radius:4px;
+    -webkit-border-top-right-radius:0px;
+    -webkit-border-bottom-right-radius:0px;
+    -webkit-border-bottom-left-radius:4px;
+	padding:3px 0px 4px;
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/images/checkboxRadioButtonStates.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/checkboxRadioButtonStates.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/checkboxRadioButtonStates.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/checkboxRadioButtonStates.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/checkboxRadioButtonStates.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/shadow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/shadow.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/shadow.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/shadow.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/shadow.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/sliderThumbs.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/sliderThumbs.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/sliderThumbs.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/sliderThumbs.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/sliderThumbs.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/buttonArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/buttonArrows.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/buttonArrows.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/buttonArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/buttonArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/error.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/error.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/error.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/error.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/error.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/checkboxAndRadioButtons_IE6.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/checkboxAndRadioButtons_IE6.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/checkboxAndRadioButtons_IE6.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/checkboxAndRadioButtons_IE6.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/checkboxAndRadioButtons_IE6.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/commonFormArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/commonFormArrows.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/commonFormArrows.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/commonFormArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/commonFormArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/button.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/button.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/button.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/button.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/button.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/button_grad_d.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/button_grad_d.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/button_grad_d.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/button_grad_d.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/button_grad_d.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/formHighlight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/formHighlight.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/formHighlight.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/formHighlight.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/formHighlight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/sliderHorizontal.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/sliderHorizontal.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/sliderHorizontal.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/sliderHorizontal.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/sliderHorizontal.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/sliderVertical.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/sliderVertical.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/sliderVertical.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/sliderVertical.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/sliderVertical.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/images/textBox_back.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/form/images/textBox_back.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/images/textBox_back.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/images/textBox_back.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/form/images/textBox_back.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/form/Select.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Select.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Select.css	(revision 9)
@@ -0,0 +1,89 @@
+
+.claro .dijitSelect .dijitButtonText {
+	padding: 0px 5px 2px 5px;
+}
+.claro .dijitSelect {
+	border: 1px solid #b5bcc7;
+	background-color: #f7fcff;
+	border-collapse: separate;
+}
+.dj_ie6 .claro .dijitSelect,
+.dj_ie6 .claro .dijitSelect .dijitButtonNode {
+	background-image:none;
+}
+.claro .dijitSelect .dijitButtonContents {
+	border: 0px solid #b5bcc7;
+	border-right-width: 1px;
+}
+.claro .dijitSelect .dijitArrowButton {
+	padding: 0;
+	border: 1px solid #fff;	
+	border-top:none;
+	background-color:#ebeef4;
+	background-image: url("images/formHighlight.png");
+	background-repeat:repeat-x;
+}
+.claro .dijitSelect .dijitArrowButton .dijitArrowButtonInner {
+	background-image: url("images/commonFormArrows.png");
+	background-position:-35px 70%;
+	background-repeat: no-repeat;
+	width:16px;
+	height:16px;
+	display:block;
+}
+.claro .dijitSelectHover {
+	border: 1px solid #769dc0;
+	background-color: #e9f4fe;
+	background-image: url('images/textBox_back.png');
+	background-repeat: repeat-x;
+}
+.claro .dijitSelectHover .dijitButtonContents {
+	border-color:#81a5c6;
+}
+.claro .dijitSelectHover .dijitArrowButton {
+	background-color:#abd6ff;
+}
+.claro .dijitSelectHover .dijitArrowButton .dijitArrowButtonInner {
+	background-position:-70px 70%;
+}
+.claro .dijitSelectFocused {
+	border: 1px solid #769dc0;
+}
+.claro .dijitSelectFocused .dijitButtonContents {
+	border-color:#81a5c6;
+}
+.claro .dijitSelectFocused .dijitArrowButton {
+	background-color:#7dbefa;
+	background-position:0px -177px;
+	border: none;
+	padding: 0px 1px;
+}
+.claro .dijitSelectFocused .dijitArrowButton .dijitArrowButtonInner {
+	background-position:-70px 70%;
+	margin-bottom: 1px;
+}
+.claro .dijitSelectDisabled {
+	border: 1px solid #d3d3d3;
+	background-color: #efefef;
+	background-image: none;
+	color: #818181;
+}
+.claro .dijitSelectDisabled .dijitArrowButton { 
+	background-color: #efefef;
+}
+.claro .dijitSelectDisabled .dijitArrowButton .dijitArrowButtonInner {
+	background-position:0px 70%
+}
+.claro .dijitSelectMenu td.dijitMenuItemIconCell,
+.claro .dijitSelectMenu td.dijitMenuArrowCell { 
+	
+	display: none;  
+}
+.claro .dijitSelectMenu td.dijitMenuItemLabel {
+	
+	padding-left: 5px;
+	padding-right: 5px;
+}
+.claro .dijitSelectMenu .dijitMenuSeparatorTop {
+	border-bottom:1px solid #769dc0;
+}
Index: trunk/web/dojo/dijit/themes/claro/form/Select_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/form/Select_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/form/Select_rtl.css	(revision 9)
@@ -0,0 +1,4 @@
+.claro .dijitSelectRtl .dijitButtonContents {
+	border-right-width: 0px;
+	border-left-width: 1px;
+}
Index: trunk/web/dojo/dijit/themes/claro/TimePicker_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/TimePicker_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/TimePicker_rtl.css	(revision 9)
@@ -0,0 +1,9 @@
+
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerSelected,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickSelected {
+	margin-left:-6px;
+	margin-right:-8px;
+	width: 114%;	
+}
Index: trunk/web/dojo/dijit/themes/claro/images/tooltip.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/tooltip.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/tooltip.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/tooltip.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/tooltip.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/menuHighlight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/menuHighlight.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/menuHighlight.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/menuHighlight.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/menuHighlight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/calendarArrows8bit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/calendarArrows8bit.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/calendarArrows8bit.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/calendarArrows8bit.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/calendarArrows8bit.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/loading.gif
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/loading.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/loadingAnimation.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/loadingAnimation.gif
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/loadingAnimation.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/loadingAnimation.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/loadingAnimation.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/calendarContainerImages.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/calendarContainerImages.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/calendarContainerImages.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/calendarContainerImages.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/calendarContainerImages.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.gif
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/spriteArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/spriteArrows.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/spriteArrows.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/spriteArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/spriteArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/dnd.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/dnd.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/dnd.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/dnd.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/dnd.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/titlebar.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/titlebar.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/titlebar.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/titlebar.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/titlebar.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/calendarArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/calendarArrows.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/calendarArrows.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/calendarArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/calendarArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/progressBarEmpty.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/progressBarEmpty.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/progressBarEmpty.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/progressBarEmpty.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/progressBarEmpty.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/progressBarFull.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/progressBarFull.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/progressBarFull.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/progressBarFull.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/progressBarFull.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/treeExpandImages8bit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/treeExpandImages8bit.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/treeExpandImages8bit.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/treeExpandImages8bit.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/treeExpandImages8bit.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/treeExpand_loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/treeExpand_loading.gif
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/treeExpand_loading.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/treeExpand_loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/treeExpand_loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/progressBarAnim.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/progressBarAnim.gif
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/progressBarAnim.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/progressBarAnim.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/progressBarAnim.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/commonHighlight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/commonHighlight.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/commonHighlight.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/commonHighlight.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/commonHighlight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/tooltip8bit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/tooltip8bit.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/tooltip8bit.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/tooltip8bit.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/tooltip8bit.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/checkmarkNoBorder.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/treeExpandImages.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/treeExpandImages.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/treeExpandImages.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/treeExpandImages.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/treeExpandImages.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon8bit.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon8bit.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon8bit.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon8bit.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/images/dialogCloseIcon8bit.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/document.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/document.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/document.css	(revision 9)
@@ -0,0 +1,81 @@
+
+.claro {
+	font-family:Verdana,Arial,Helvetica,sans-serif;
+	font-size: .688em;
+	color: #131313;
+}
+h1 {
+	font-size: 1.545em; 
+	font-weight: normal;
+	line-height: 1em; 
+	margin-top: 1em;
+	margin-bottom:0.727em;
+}
+.claro .dijitDialog h1 { 
+	margin-top:0em; 
+}
+h2 { 
+	font-size: 1.364em; 
+	line-height: 1.455em; 
+	margin-top:1em; 
+	margin-bottom:0.60em;
+	font-weight: normal;
+}
+h3, h4, h5, h6 {
+	font-size:1.091em; 
+	font-weight: normal; 
+	line-height: 1.5em; 
+	margin-top: 1.5em; 
+	margin-bottom: 0;
+}
+p { 
+	font-size: 1em; 
+	line-height: 1.3em;
+}
+blockquote { 
+	font-size: 0.916em; 
+	margin-top: 3.272em; 
+	margin-bottom: 3.272em; 
+	line-height: 1.636em; 
+	padding: 1.636em; 
+	border-top: 1px solid #ccc; 
+	border-bottom: 1px solid #ccc;
+}
+ol li, ul li { 
+	font-size: 1em; 
+	line-height: 1.5em; 
+	margin: 0;
+}
+pre, code { 
+	font-size:115%;
+	*font-size:100%;
+	font-family:inherit; 
+	background-color: #efefef; 
+	border: 1px solid #ccc;
+}
+pre { 
+	border-width: 1px 0; 
+	padding: 1.5em;
+}
+table {  font-size:100%; }
+table.dojoTabular { 
+	border-collapse: collapse; 
+	border-spacing: 0; 
+	border: 1px solid #ccc; 
+	margin: 0 1.5em;
+}
+.dojoTabular th { 
+	text-align: center; 
+	font-weight: bold;
+}
+table.dojoTabular thead, table.dojoTabular tfoot { 
+	background-color: #efefef; 
+	border: 1px solid #ccc; 
+	border-width: 1px 0; 
+}
+table.dojoTabular thead tr th,
+table.dojoTabular thead tr td,
+table.dojoTabular tbody tr td,
+table.dojoTabular tfoot tr td { 
+	padding: 0.25em 0.5em;
+}
Index: trunk/web/dojo/dijit/themes/claro/Dialog_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Dialog_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Dialog_rtl.css	(revision 9)
@@ -0,0 +1,9 @@
+
+.claro .dijitDialogRtl .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
+.claro .dijitDialogRtl .dijitDialogPaneActionBar {
+	text-align: left;
+	padding: 3px 7px 2px 5px;
+}
Index: trunk/web/dojo/dijit/themes/claro/claro_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/claro_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/claro_rtl.css	(revision 9)
@@ -0,0 +1,380 @@
+
+.dijitRtl .dijitPlaceHolder {
+	left: auto;
+	right: 0;
+}
+.dijitMenuItemRtl {
+	text-align: right;
+}
+.dj_iequirks .dijitComboButtonRtl BUTTON {
+	
+	float:left;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitComboBoxRtl .dijitArrowButtonContainer {
+	
+	border-right-width: 1px !important;
+	border-right-style: solid !important;
+	border-left-width: 0px !important;
+	border-left-style: none !important;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
+	border-right: 1px solid black !important;
+	border-left: 0px none black !important;
+}
+.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
+	right: 0;
+	left: auto;
+}
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitArrowButtonContainer {
+	float: left;
+}
+.dijitCalendarRtl .dijitCalendarNextYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarRtl .dijitCalendarPreviousYear {
+	margin:0 0 0 0.55em;
+}
+.dijitSliderRtl .dijitSliderImageHandleV {
+	left:auto;
+}
+.dijitSliderRtl .dijitSliderImageHandleH {
+	left:-50%;
+}
+.dijitSliderRtl .dijitSliderMoveableH {
+	right:auto;
+	left:0;
+}
+.dijitSliderRtl .dijitRuleContainerV {
+	float:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleContainerV {
+	text-align:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelV {
+	text-align:left;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelH {
+	zoom:1;
+}
+.dijitSliderRtl .dijitSliderProgressBarH {
+	
+	float:right;
+	right:0;
+	left:auto;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+	background-position:right;
+	padding-right:25px;
+}
+.dijitTabRtl .dijitTabCloseButton {
+	margin-left: 0px;
+	margin-right: 1em;
+}
+.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
+	width:100%;
+}
+.dijitColorPaletteRtl .dijitColorPaletteUnder {
+	
+	left: auto;
+	right: 0;
+}
+.dijitSelectRtl .dijitButtonContents {
+	text-align: right;
+}
+.claro .dijitTextBoxRtlError .dijitValidationContainer {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.claro .dijitComboButtonRtl .dijitStretch {
+	-moz-border-radius: 0px 4px 4px 0px;
+	-webkit-border-top-left-radius: 0px;
+    -webkit-border-top-right-radius: 4px;
+    -webkit-border-bottom-right-radius: 4px;
+    -webkit-border-bottom-left-radius: 0px;	
+}
+.claro .dijitComboButtonRtl .dijitArrowButton {
+	-moz-border-radius:  4px 0px 0px  4px;
+	-webkit-border-top-left-radius:4px;
+    -webkit-border-top-right-radius:0px;
+    -webkit-border-bottom-right-radius:0px;
+    -webkit-border-bottom-left-radius:4px;
+	padding:3px 0px 4px;
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.claro .dijitTabContainerBottom-tabs .dijitTabRtl {
+	margin-right: 0;
+	margin-left: 1px;
+}
+.claro .dijitTabRtl {
+	-moz-box-orient:horizontal;
+	text-align: right;
+}
+.dj_ie7 .claro .dijitTabRtl .dijitTabContent {
+	display: block;
+	left: 0;
+}
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
+	top: 1px;
+}
+.dj_ie7 .claro .tabStripButtonRtl .dijitButtonContents,
+.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,	
+.dj_ie6 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie6 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv {
+	float:left;
+}
+.dj_ie6 .claro .dijitTabRtl .tabLabel,
+.dj_ie6 .claro .dijitTabContainerRight-tabs .dijitTabRtl,
+.dj_ie6 .claro .dijitTabContainerLeft-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerLeft-tabs .dijitTabRtl .dijitTabInnerDiv {
+	
+	zoom:1;
+}
+.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
+	margin-right:5px;
+}
+.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs,
+.dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
+	width:1%;
+}
+.dj_ie6 .dijitTabContainerTopStrip,
+.dj_ie6 .dijitTabContainerBottomStrip {
+	position:absolute;
+}
+.dj_iequirks .claro .dijitTabContainerTopRtl .dijitTabContainerTopStrip {
+	padding-top: 10px;
+}
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtlChecked .dijitTabInnerDiv {
+	background-position:-341px -179px;
+}
+.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon,
+.dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
+   position: relative;
+}
+.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {	
+	
+	padding-left: 3px;
+}
+.dj_iequirks-rtl .claro .dijitTabListWrapper {
+	
+	border-left: 1px solid #fff;
+	border-right: 1px solid #fff;
+}
+.claro .dijitSliderRtl .dijitSliderProgressBarH,
+.claro .dijitSliderRtl .dijitSliderRemainingBarH,
+.claro .dijitSliderRtl .dijitSliderLeftBumper,
+.claro .dijitSliderRtl .dijitSliderRightBumper,
+.claro .dijitSliderRtl .dijitSliderTopBumper {
+	background-position: top right;
+}
+.claro .dijitSliderRtl .dijitSliderProgressBarV,
+.claro .dijitSliderRtl .dijitSliderRemainingBarV,
+.claro .dijitSliderRtl .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.claro .dijitSliderRtl .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.claro .dijitSliderRtl .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.claro .dijitSliderRtl .dijitSliderIncrementIconH {
+	background-position:-357px 50%;
+}
+.claro .dijitSliderRtl .dijitSliderDecrementIconH {
+	background-position:-251px 50%;
+}
+.claro .dijitSelectRtl .dijitButtonContents {
+	border-right-width: 0px;
+	border-left-width: 1px;
+}
+.claro .dijitDialogRtl .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
+.claro .dijitDialogRtl .dijitDialogPaneActionBar {
+	text-align: left;
+	padding: 3px 7px 2px 5px;
+}
+.claro .dijitEditorRtl .dijitEditorIFrameContainer{
+	padding:3px 10px 1px 3px;
+}
+.dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitToolbarRtl .dijitToolbarSeparator {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
+}
+.dijitRtl .dijitIconSave,
+.dijitRtl .dijitIconPrint,
+.dijitRtl .dijitIconCut,
+.dijitRtl .dijitIconCopy,
+.dijitRtl .dijitIconClear,
+.dijitRtl .dijitIconDelete,
+.dijitRtl .dijitIconUndo,
+.dijitRtl .dijitIconEdit,
+.dijitRtl .dijitIconNewTask,
+.dijitRtl .dijitIconEditTask,
+.dijitRtl .dijitIconEditProperty,
+.dijitRtl .dijitIconTask,
+.dijitRtl .dijitIconFilter,
+.dijitRtl .dijitIconConfigure,
+.dijitRtl .dijitIconSearch,
+.dijitRtl .dijitIconApplication,
+.dijitRtl .dijitIconBookmark,
+.dijitRtl .dijitIconChart,
+.dijitRtl .dijitIconConnector,
+.dijitRtl .dijitIconDatabase,
+.dijitRtl .dijitIconDocuments,
+.dijitRtl .dijitIconMail,
+.dijitRtl .dijitLeaf,
+.dijitRtl .dijitIconFile,
+.dijitRtl .dijitIconFunction,
+.dijitRtl .dijitIconKey,
+.dijitRtl .dijitIconPackage,
+.dijitRtl .dijitIconSample,
+.dijitRtl .dijitIconTable,
+.dijitRtl .dijitIconUsers,
+.dijitRtl .dijitFolderClosed,
+.dijitRtl .dijitIconFolderClosed,
+.dijitRtl .dijitFolderOpened,
+.dijitRtl .dijitIconFolderOpen,
+.dijitRtl .dijitIconError, .dijitRtl .dijitContentPaneError { 
+	background-image: url(../../icons/images/commonIconsObjActEnabled_rtl.png); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitRtl .dijitIconSave,
+.dj_ie6 .dijitRtl .dijitIconPrint,
+.dj_ie6 .dijitRtl .dijitIconCut,
+.dj_ie6 .dijitRtl .dijitIconCopy,
+.dj_ie6 .dijitRtl .dijitIconClear,
+.dj_ie6 .dijitRtl .dijitIconDelete,
+.dj_ie6 .dijitRtl .dijitIconUndo,
+.dj_ie6 .dijitRtl .dijitIconEdit,
+.dj_ie6 .dijitRtl .dijitIconNewTask,
+.dj_ie6 .dijitRtl .dijitIconEditTask,
+.dj_ie6 .dijitRtl .dijitIconEditProperty,
+.dj_ie6 .dijitRtl .dijitIconTask,
+.dj_ie6 .dijitRtl .dijitIconFilter,
+.dj_ie6 .dijitRtl .dijitIconConfigure,
+.dj_ie6 .dijitRtl .dijitIconSearch,
+.dj_ie6 .dijitRtl .dijitIconApplication,
+.dj_ie6 .dijitRtl .dijitIconBookmark,
+.dj_ie6 .dijitRtl .dijitIconChart,
+.dj_ie6 .dijitRtl .dijitIconConnector,
+.dj_ie6 .dijitRtl .dijitIconDatabase,
+.dj_ie6 .dijitRtl .dijitIconDocuments,
+.dj_ie6 .dijitRtl .dijitIconMail,
+.dj_ie6 .dijitRtl .dijitLeaf,
+.dj_ie6 .dijitRtl .dijitIconFile,
+.dj_ie6 .dijitRtl .dijitIconFunction,
+.dj_ie6 .dijitRtl .dijitIconKey,
+.dj_ie6 .dijitRtl .dijitIconPackage,
+.dj_ie6 .dijitRtl .dijitIconSample,
+.dj_ie6 .dijitRtl .dijitIconTable,
+.dj_ie6 .dijitRtl .dijitIconUsers,
+.dj_ie6 .dijitRtl .dijitFolderClosed,
+.dj_ie6 .dijitRtl .dijitIconFolderClosed,
+.dj_ie6 .dijitRtl .dijitFolderOpened,
+.dj_ie6 .dijitRtl .dijitIconFolderOpen,
+.dj_ie6 .dijitRtl .dijitIconError, .dj_ie6 .dijitRtl .dijitContentPaneError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled8bit_rtl.png);
+}
+.dijitRtl .dijitDisabled .dijitIconSave,
+.dijitRtl .dijitDisabled .dijitIconPrint,
+.dijitRtl .dijitDisabled .dijitIconCut,
+.dijitRtl .dijitDisabled .dijitIconCopy,
+.dijitRtl .dijitDisabled .dijitIconClear,
+.dijitRtl .dijitDisabled .dijitIconDelete,
+.dijitRtl .dijitDisabled .dijitIconUndo,
+.dijitRtl .dijitDisabled .dijitIconEdit,
+.dijitRtl .dijitDisabled .dijitIconNewTask,
+.dijitRtl .dijitDisabled .dijitIconEditTask,
+.dijitRtl .dijitDisabled .dijitIconEditProperty,
+.dijitRtl .dijitDisabled .dijitIconTask,
+.dijitRtl .dijitDisabled .dijitIconFilter,
+.dijitRtl .dijitDisabled .dijitIconConfigure,
+.dijitRtl .dijitDisabled .dijitIconSearch,
+.dijitRtl .dijitDisabled .dijitIconApplication,
+.dijitRtl .dijitDisabled .dijitIconBookmark,
+.dijitRtl .dijitDisabled .dijitIconChart,
+.dijitRtl .dijitDisabled .dijitIconConnector,
+.dijitRtl .dijitDisabled .dijitIconDatabase,
+.dijitRtl .dijitDisabled .dijitIconDocuments,
+.dijitRtl .dijitDisabled .dijitIconMail,
+.dijitRtl .dijitDisabled .dijitLeaf,
+.dijitRtl .dijitDisabled .dijitIconFile,
+.dijitRtl .dijitDisabled .dijitIconFunction,
+.dijitRtl .dijitDisabled .dijitIconKey,
+.dijitRtl .dijitDisabled .dijitIconPackage,
+.dijitRtl .dijitDisabled .dijitIconSample,
+.dijitRtl .dijitDisabled .dijitIconTable,
+.dijitRtl .dijitDisabled .dijitIconUsers,
+.dijitRtl .dijitDisabled .dijitFolderClosed,
+.dijitRtl .dijitDisabled .dijitIconFolderClosed,
+.dijitRtl .dijitDisabled .dijitFolderOpened,
+.dijitRtl .dijitDisabled .dijitIconFolderOpen,
+.dijitRtl .dijitDisabled .dijitIconError, .dijitRtl .dijitDisabled .dijitContentPaneError {
+	background-image: url(../../icons/images/commonIconsObjActDisabled_rtl.png); 
+}
+.dijitRtl .dijitContentPaneLoading {
+	background:url(../../icons/images/loadingAnimation_rtl.gif) no-repeat;
+}
+.claro .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {
+	background-position: -7px 0px;
+}
+.claro .dijitMenuItemRtl .dijitMenuExpand {
+	background-position: -7px 0px;
+	margin-right: 0px;
+	margin-left: 3px;
+}
+.claro .dijitMenuItemRtl .dijitMenuItemIcon {
+	margin:0px 4px 0px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarIncrease{
+	background-position: 0px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarDecrease {
+	background-position: -18px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarIncrease {
+	background-position: -36px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarDecrease {
+	background-position: -55px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarIncrease {
+	background-position: -72px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarDecrease {
+	background-position: -91px 0px;
+}
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerHover,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerMarkerSelected,
+.dj_ie .claro .dijitTimePickerRtl .dijitTimePickerTickSelected {
+	margin-left:-6px;
+	margin-right:-8px;
+	width: 114%;	
+}
Index: trunk/web/dojo/dijit/themes/claro/Menu_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Menu_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Menu_rtl.css	(revision 9)
@@ -0,0 +1,8 @@
+.claro .dijitMenuItemRtl .dijitMenuExpand {
+	background-position: -7px 0px;
+	margin-right: 0px;
+	margin-left: 3px;
+}
+.claro .dijitMenuItemRtl .dijitMenuItemIcon {
+	margin:0px 4px 0px 0px;
+}
Index: trunk/web/dojo/dijit/themes/claro/TitlePane.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/TitlePane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/TitlePane.css	(revision 9)
@@ -0,0 +1,54 @@
+
+.claro .dijitTitlePaneTitle {
+	background-color: #e6e6e7;
+	background-image: url("images/titlebar.png");
+	background-repeat:repeat-x;
+	border:1px solid #b5bcc7;
+	padding: 0px 7px 3px 7px;
+	min-height:17px;
+	color:#131313;
+}
+.dj_ie6 .claro .dijitTitlePaneTitle {
+	background-image: none;
+}
+.claro .dijitTitlePaneTitleHover {
+	background-color: #abd6ff;
+	border-color: #769dc0;
+}
+.claro .dijitTitlePaneTitleActive {
+	background-color: #7dbefa;
+	border-color: #769dc0;
+	background-position:0px -136px;
+}
+.claro .dijitTitlePaneTitleFocus {
+	margin-top:3px;
+	padding-bottom:2px;
+}
+.claro .dijitTitlePane .dijitArrowNode {
+	background-image: url('images/spriteArrows.png');
+	background-repeat: no-repeat;
+	height: 8px;
+	width: 7px;
+}
+.claro .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background-position: 0px 0px;
+}
+.claro .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: -14px 0px;
+}
+.claro .dijitTitlePaneFocused .dijitTitlePaneTextNode {
+	color:#000;
+}
+.claro .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border:1px solid #b5bcc7;
+	border-top:none;
+}
+.claro .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.claro .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+	vertical-align:text-top;
+}
Index: trunk/web/dojo/dijit/themes/claro/layout/AccordionContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/AccordionContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/AccordionContainer.css	(revision 9)
@@ -0,0 +1,65 @@
+
+.claro .dijitAccordionContainer {
+	border:none;
+}
+.claro .dijitAccordionInnerContainer {
+	background-color: #e6e6e7;	
+	border:solid 1px #b5bcc7;
+	margin-bottom:1px;
+	-webkit-transition-property:background-color,border;
+ 	-webkit-transition-duration:.3s;
+	-webkit-transition-timing-function:linear;
+}
+.claro .dijitAccordionTitle {
+	background-color: transparent;	
+	background-image: url("images/accordion.png");
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	padding: 5px 7px 2px 7px;
+	min-height:17px;
+	color:#4a4a4a;
+}
+.dj_ie6 .claro .dijitAccordionTitle {
+	background-image: none;
+}
+.claro .dijitAccordionContainer .dijitAccordionContainer-child {
+	background-color:#fff;
+	
+	border:1px solid #92bce1 !important;
+	margin: 0px 2px 2px;
+	padding: 9px;
+}
+.claro .dijitAccordionInnerContainerActive {
+	border:1px solid #769DC0;
+	background-color:#7dbefa;
+	-webkit-transition-duration:.1s;
+}
+.claro .dijitAccordionInnerContainerActive .dijitAccordionTitle {
+	background-position:0px -136px;
+	color:#000;
+}
+.claro .dijitAccordionInnerContainerSelected {
+	border-color:#92bce1;
+	background-color: #cde8ff;
+}
+.claro .dijitAccordionInnerContainerSelected .dijitAccordionTitle {
+	color:#000;
+	background-position: 0 0;	
+}
+.claro .dijitAccordionInnerContainerHover dijitAccordionTitle {
+	
+	color:#000;
+}
+.claro .dijitAccordionInnerContainerHover,
+.claro .dijitAccordionInnerContainerSelectedActive {
+	border:1px solid #769DC0;
+	background-color:#9dcfff;
+	-webkit-transition-duration:.2s;
+}
+.claro .dijitAccordionInnerContainerSelectedHover .dijitAccordionContainer-child,
+.claro .dijitAccordionInnerContainerSelectedActive .dijitAccordionContainer-child {
+	background-color:#ffffff;
+	border:1px solid #769DC0 !important;
+	-webkit-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
+	-moz-box-shadow:inset 0px 0px 3px rgba(0, 0, 0, .25);
+}
Index: trunk/web/dojo/dijit/themes/claro/layout/TabContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/TabContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/TabContainer.css	(revision 9)
@@ -0,0 +1,348 @@
+
+.claro .dijitTabPaneWrapper {
+	background:#fff;
+}
+.claro .dijitTabPaneWrapper,
+.claro .dijitTabContainerTop-tabs,
+.claro .dijitTabContainerBottom-tabs,
+.claro .dijitTabContainerLeft-tabs,
+.claro .dijitTabContainerRight-tabs {
+	
+	border-color: #b5bcc7;
+}
+.claro .dijitTabCloseButton {
+	background: url("images/tabClose.png") no-repeat;
+	width: 14px;
+	height: 14px;
+	margin-left: 5px;
+	margin-right:-3px;
+}
+.claro .dijitTabCloseButtonHover {
+	background-position:-14px;
+}
+.claro .dijitTabCloseButtonActive {
+	background-position:-28px;
+}
+.claro .dijitTabSpacer {
+	
+	display: none;
+}
+.claro .dijitTabInnerDiv {
+	background-color:#e6e6e7;
+	-webkit-transition-property:background-color, border;
+ 	-webkit-transition-duration:.35s;
+	color:#4a4a4a;
+}
+.claro .dijitTabHover .dijitTabInnerDiv {
+	background-color:#a9d6ff;
+ 	-webkit-transition-duration:.25s;
+	color:#000;
+}
+.claro .dijitTabActive .dijitTabInnerDiv {
+	background-color:#8bc4f9;
+	color:#000;
+	-webkit-transition-duration:.1s;
+}
+.claro .dijitTabChecked .dijitTabInnerDiv {
+	background-color:#b2d4f3;
+	color:#000;
+}
+.claro .dijitTabContent {
+	border: 1px solid #b5bcc7;
+}
+.claro .dijitTabHover .dijitTabContent,
+.claro .dijitTabActive .dijitTabContent {
+	border-color: #769dc0;
+}
+.claro .dijitTabChecked .dijitTabContent {
+	color:#000;
+	border-color: #b5bcc7;	
+}
+.claro .tabStripButton .dijitTabInnerDiv {
+	background-color: transparent;
+}
+.claro .tabStripButton .dijitTabContent {
+	border: none;
+}
+.claro .dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;	
+	margin-right: 1px;
+	padding-top: 3px;
+}
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTab {
+	top: 3px;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabContent {
+	padding:3px 8px 3px 4px;
+	border-bottom: 1px;
+	background-image:url("images/tabTop.png");
+	background-position:0px 0px;
+	background-repeat:repeat-x;
+	min-width: 60px;
+	text-align: center;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+	padding-bottom: 4px;
+	padding-top: 6px;
+}
+.dj_ie .claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+	border-bottom: none;
+}
+.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv {
+	background-image:url("images/tabTop.png");
+	background-position:0px -248px;
+	background-position:bottom;
+	background-repeat:repeat-x;
+	box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
+	-webkit-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
+	-moz-box-shadow: 0px -1px 1px rgba(0, 0, 0, 0.04);
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-image:none;
+	box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
+	-moz-box-shadow: 0px -1px 2px rgba(0, 0, 0, 0.05);
+}
+.claro .dijitTabContainerTop-tabs .dijitTabChecked .dijitTabContent {
+	background-position:0px -102px;
+	background-repeat:repeat-x;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;	
+	margin-right: 1px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabContent {
+	padding:3px 8px 4px 4px;
+	border-top: none;
+	background-image: url("images/tabBottom.png");
+	background-position:0px -249px;
+	background-repeat: repeat-x;
+	background-position:bottom;
+	min-width: 60px;
+	text-align: center;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTab {
+	padding-bottom: 3px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+	background-image: url("images/tabBottom.png");
+	background-position: top;
+	background-repeat: repeat-x;
+	box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
+	-webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
+	-moz-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04);
+	
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabContent {
+	padding-bottom: 7px;
+	padding-top: 4px;
+	background-position:0px -119px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked {
+	padding-bottom: 0;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-image:none;
+	box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
+	-moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05);
+}
+.claro .dijitTabContainerLeft-tabs .dijitTab {
+	left: 1px;	
+	margin-bottom: 1px;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	background-image: url("images/tabLeft.png");
+	background-position: -347px -340px;
+	background-repeat: repeat-y;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabContent {
+	padding:3px 8px 4px 4px;
+	background-image: url("images/tabLeft.png");
+	background-repeat: repeat-y;
+	background-position:0px 0px;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabContent {
+	padding-right: 9px;
+	border-right: none;
+	background-image: none;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-position:0px -179px;
+	background-repeat:repeat-y;
+	box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
+	-webkit-box-shadow: -1px 0px 2px rgba(0, 0, 0, .05);
+	-moz-box-shadow: -1px 0px 2px rgba(0, 0, 0, 0.05);
+}
+.claro .dijitTabContainerRight-tabs .dijitTab {
+	left: -1px;	
+	margin-bottom: 1px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+	background-image: url("images/tabRight.png");
+	background-repeat: repeat-y;
+	background-position: -1px -347px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabContent {
+	padding:3px 8px 4px 4px;
+	background-image: url("images/tabRight.png");
+	background-position:right top;
+	background-repeat: repeat-y;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabContent {
+	padding-left: 5px;
+	border-left: none;
+	background-image: none;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background-position:-348px -179px;
+	box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
+	-webkit-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
+	-moz-box-shadow: 1px 0px 2px rgba(0, 0, 0, 0.07);
+}
+.claro .dijitTabContainerTop-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerTop-tabs .dijitTabContent {
+	border-radius: 2px 2px 0px 0px;
+	-moz-border-radius: 2px 2px 0px 0px;
+	-webkit-border-top-left-radius:2px;
+	-webkit-border-top-right-radius:2px;
+}
+.claro .dijitTabContainerBottom-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerBottom-tabs .dijitTabContent{
+	border-radius: 0px 0px 2px 2px;
+	-moz-border-radius: 0px 0px 2px 2px;
+	-webkit-border-bottom-right-radius:2px;
+	-webkit-border-bottom-left-radius:2px;
+}
+.claro .dijitTabContainerLeft-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerLeft-tabs .dijitTabContent{
+	border-radius: 2px 0px 0px 2px;
+	-moz-border-radius: 2px 0px 0px 2px;
+	-webkit-border-top-left-radius:2px;
+	-webkit-border-bottom-left-radius:2px;
+}
+.claro .dijitTabContainerRight-tabs .dijitTabInnerDiv,
+.claro .dijitTabContainerRight-tabs .dijitTabContent{
+	border-radius: 0px 2px 2px 0px;
+	-moz-border-radius: 0px 2px 2px 0px;
+	-webkit-border-top-right-radius:2px;
+	-webkit-border-bottom-right-radius:2px;
+}
+.claro .tabStripButton {
+	background-color:#deecf9;
+	border: 1px solid #b5bcc7;
+}
+.claro .dijitTabListContainer-top .tabStripButton {
+	padding: 4px 3px;
+	margin-top:7px;
+	background-image: url("images/tabTop.png");
+	background-position:0px 0px;
+}
+.claro .dijitTabListContainer-bottom .tabStripButton {
+	padding:5px 3px;
+	margin-bottom:4px;
+	background-image: url("images/tabTop.png");
+	background-position:0px -248px;
+	background-position:bottom;
+}
+.claro .tabStripButtonHover {
+	background-color:#a6d2fb;
+}
+.claro .tabStripButtonActive {
+	background-color:#7dbefa;
+}
+.claro .dijitTabStripIcon {
+	height:15px;
+	width:15px;
+	margin: 0 auto;
+	background:url("../form/images/buttonArrows.png") no-repeat -75px 50%;
+	background-color: transparent;
+}
+.claro .dijitTabStripSlideRightIcon{
+	background-position: -24px 50%;
+}
+.claro .dijitTabStripMenuIcon {
+	background-position: -51px 50%;
+}
+.claro .dijitTabListContainer-top .tabStripButtonDisabled,
+.claro .dijitTabListContainer-bottom .tabStripButtonDisabled {
+	background-color:#dddddd;
+	border:1px solid #c9c9c9;
+}
+.claro .tabStripButtonDisabled .dijitTabStripSlideLeftIcon {
+	background-position:-175px 50%;
+}
+.claro .tabStripButtonDisabled .dijitTabStripSlideRightIcon {
+	background-position: -124px 50%;
+}
+.claro .tabStripButtonDisabled .dijitTabStripMenuIcon {
+	background-position: -151px 50%;
+} 
+.claro .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.claro .dijitTabContainerNested .dijitTabContainerTop-tabs {
+	border-bottom:solid 1px #b5bcc7;
+	padding:1px 2px 4px;
+	margin-top:-2px;
+}
+.claro .dijitTabContainerTabListNested .dijitTabContent {
+	background:rgba(255, 255, 255, 0) none repeat scroll 0 0;
+	border: none;
+	padding: 4px;
+	border-color: rgba(118,157,192,0);
+	-webkit-transition-property:background-color, border-color;
+ 	-webkit-transition-duration:.3s;
+}
+.claro .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv {
+	
+	background: none;
+	border: none;
+	top: 0px;
+	box-shadow: none;
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+}
+.claro .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent {
+	background-color:#eaf4fc;
+	border-radius: 2px 2px 2px 2px;
+	-moz-border-radius: 2px 2px 2px 2px;
+	-webkit-border-radius:2px;
+	border:solid 1px #c8dff3;
+	padding: 3px;
+	webkit-transition-duration:.2s;
+}
+.claro .dijitTabContainerTabListNested .dijitTabHover .tabLabel {
+	text-decoration: none;
+}
+.claro .dijitTabContainerTabListNested .dijitTabActive .dijitTabContent {
+	border-radius: 2px 2px 2px 2px;
+	-moz-border-radius: 2px 2px 2px 2px;
+	-webkit-border-radius:2px;
+	border:solid 1px #a8c7e2;
+	padding: 3px;
+	background:#b9d9f5 url("images/tabNested.png") repeat-x;
+	-webkit-transition-duration:.1s;
+}
+.claro .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent {
+	border-radius: 2px 2px 2px 2px;
+	-moz-border-radius: 2px 2px 2px 2px;
+	-webkit-border-radius:2px;
+	padding: 3px;
+	border:solid 1px #a8c7e2;
+	background-position: 0px 105px;
+	background-color:#d4e8f9;
+}
+.claro .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+	text-decoration: none;
+	background-image:none;
+}
+.claro .dijitTabPaneWrapperNested {
+	border: none;
+}
+.dj_ie6 .claro .dijitTabContent,
+.dj_ie6 .claro .dijitTabInnerDiv,
+.dj_ie6 .dijitTabListContainer-top .tabStripButton,
+.dj_ie6 .dijitTabListContainer-bottom .tabStripButton{
+	background-image: none;
+}
Index: trunk/web/dojo/dijit/themes/claro/layout/TabContainer_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/TabContainer_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/TabContainer_rtl.css	(revision 9)
@@ -0,0 +1,67 @@
+.claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.claro .dijitTabContainerBottom-tabs .dijitTabRtl {
+	margin-right: 0;
+	margin-left: 1px;
+}
+.claro .dijitTabRtl {
+	-moz-box-orient:horizontal;
+	text-align: right;
+}
+.dj_ie7 .claro .dijitTabRtl .dijitTabContent {
+	display: block;
+	left: 0;
+}
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabCheckedRtl {
+	top: 1px;
+}
+.dj_ie7 .claro .tabStripButtonRtl .dijitButtonContents,
+.dj_ie8 .claro .tabStripButtonRtl .dijitButtonContents,	
+.dj_ie6 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie6 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerTop-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_iequirks .claro .dijitTabContainerBottom-tabs .dijitTabRtl .dijitTabInnerDiv {
+	float:left;
+}
+.dj_ie6 .claro .dijitTabRtl .tabLabel,
+.dj_ie6 .claro .dijitTabContainerRight-tabs .dijitTabRtl,
+.dj_ie6 .claro .dijitTabContainerLeft-tabs .dijitTabRtl,
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtl .dijitTabInnerDiv,
+.dj_ie7 .claro .dijitTabContainerLeft-tabs .dijitTabRtl .dijitTabInnerDiv {
+	
+	zoom:1;
+}
+.dj_ie6 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_ie7 .claro .dijitTabRtl .dijitTabCloseButton,
+.dj_iequirks .claro .dijitTabRtl .dijitTabCloseButton {
+	margin-right:5px;
+}
+.dj_ie6 .claro .dijitTabContainerRightRtl .dijitTabContainerRight-tabs,
+.dj_ie6 .claro .dijitTabContainerLeftRtl .dijitTabContainerLeft-tabs {
+	width:1%;
+}
+.dj_ie6 .dijitTabContainerTopStrip,
+.dj_ie6 .dijitTabContainerBottomStrip {
+	position:absolute;
+}
+.dj_iequirks .claro .dijitTabContainerTopRtl .dijitTabContainerTopStrip {
+	padding-top: 10px;
+}
+.dj_ie7 .claro .dijitTabContainerRight-tabs .dijitTabRtlChecked .dijitTabInnerDiv {
+	background-position:-341px -179px;
+}
+.dj_ie6 .dijitTabContainerTopRtl .dijitTabStripIcon,
+.dj_ie6 .dijitTabContainerBottomRtl .dijitTabStripIcon {
+   position: relative;
+}
+.dj_ie6-rtl .claro .dijitTabContainerTop-tabs {	
+	
+	padding-left: 3px;
+}
+.dj_iequirks-rtl .claro .dijitTabListWrapper {
+	
+	border-left: 1px solid #fff;
+	border-right: 1px solid #fff;
+}
Index: trunk/web/dojo/dijit/themes/claro/layout/ContentPane.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/ContentPane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/ContentPane.css	(revision 9)
@@ -0,0 +1,17 @@
+
+.claro .dijitContentPane {
+	padding: 8px;
+}		
+.claro .dijitTabContainerTop-dijitContentPane,
+.claro .dijitTabContainerLeft-dijitContentPane,
+.claro .dijitTabContainerBottom-dijitContentPane,
+.claro .dijitTabContainerRight-dijitContentPane,
+.claro .dijitAccordionContainer-dijitContentPane {
+	background-color: #fff;
+	padding: 8px;		
+}
+.claro .dijitSplitContainer-dijitContentPane,
+.claro .dijitBorderContainer-dijitContentPane {
+	background-color: #fff;		
+	padding: 8px;
+}
Index: trunk/web/dojo/dijit/themes/claro/layout/images/splitterHorizontalHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/splitterHorizontalHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/splitterHorizontalHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/splitterHorizontalHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/splitterHorizontalHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/splitterVerticalHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/splitterVerticalHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/splitterVerticalHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/splitterVerticalHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/splitterVerticalHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabRight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabRight.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/tabRight.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/tabRight.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/tabRight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabNested.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabNested.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/tabNested.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/tabNested.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/tabNested.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabTop.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabTop.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/tabTop.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/tabTop.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/tabTop.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabBottom.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabBottom.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/tabBottom.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/tabBottom.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/tabBottom.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabClose.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabClose.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/tabClose.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/tabClose.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/tabClose.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/accordion.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/accordion.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/accordion.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/accordion.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/accordion.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabLeft.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/claro/layout/images/tabLeft.png
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/images/tabLeft.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/images/tabLeft.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/claro/layout/images/tabLeft.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/claro/layout/BorderContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/layout/BorderContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/layout/BorderContainer.css	(revision 9)
@@ -0,0 +1,77 @@
+
+.claro .dijitBorderContainer {
+	border: 1px #b5bcc7 solid;
+	padding: 5px;
+}
+.claro .dijitSplitContainer-child,
+.claro .dijitBorderContainer-child {
+	
+	border: 1px #b5bcc7 solid;
+}
+.claro .dijitBorderContainer-dijitTabContainerTop,
+.claro .dijitBorderContainer-dijitTabContainerBottom,
+.claro .dijitBorderContainer-dijitTabContainerLeft,
+.claro .dijitBorderContainer-dijitTabContainerRight,
+.claro .dijitBorderContainer-dijitAccordionContainer {
+	
+	 border: none;
+}
+.claro .dijitBorderContainer-dijitBorderContainer {
+	
+	border: 1px #c0ccdf solid;
+	padding: 5px;
+}
+.claro .dijitSplitterH,
+.claro .dijitGutterH {
+	background:none;
+	border:0;
+	height:5px;
+}
+.claro .dijitSplitterH .dijitSplitterThumb {
+	background:#dde2e9 none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.claro .dijitSplitterV,
+.claro .dijitGutterV {
+	background:none;
+	border:0;
+	width:5px;
+	margin: 0;
+}
+.claro .dijitSplitterV .dijitSplitterThumb {
+	background:#dde2e9 none;
+	height:19px;
+	left:2px;
+	width:1px;
+	margin: 0;
+}
+.claro .dijitSplitterHHover {
+	font-size: 1px;
+	background: url("images/splitterHorizontalHover.png") no-repeat center top;
+}
+.claro .dijitSplitterHHover .dijitSplitterThumb {
+	background:#769dc0 none;
+}
+.claro .dijitSplitterVHover {
+	font-size: 1px;
+	background: url("images/splitterVerticalHover.png") no-repeat center left;
+}
+.claro .dijitSplitterVHover .dijitSplitterThumb {
+	background:#769dc0 none;
+}
+.dj_ie6 .dijitSplitterHHover,
+.dj_ie6 .claro .dijitSplitterVHover {
+	background-color:#cfe9ff;
+	background-image:none;
+}
+.claro .dijitSplitterHActive {
+	font-size: 1px;
+	background-color:#abd4fb;
+	border-top:blue;
+}
+.claro .dijitSplitterVActive {
+	font-size: 1px;
+	background-color:#abd4fb;
+}
Index: trunk/web/dojo/dijit/themes/claro/Editor.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Editor.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Editor.css	(revision 9)
@@ -0,0 +1,36 @@
+
+.claro .dijitEditorIFrameContainer{
+	padding:3px 3px 1px 10px;
+}
+.claro .dijitEditorIFrame {
+	background-color: #fff;
+}
+.claro .dijitEditor {
+	border: 1px solid #b5bcc7;
+}
+.claro .dijitEditor .dijitEditorIFrameContainer{
+	background-color: #fff;
+	background-image: url('form/images/textBox_back.png');
+	background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitEditor .dijitEditorIFrameContainer{
+	background-image: none;
+}
+.claro .dijitEditorHover .dijitEditorIFrameContainer,
+.claro .dijitEditorHover .dijitEditorIFrameContainer .dijitEditorIFrame{
+	background-color: #eef7ff;
+}
+.claro .dijitEditorFocused .dijitEditorIFrameContainer,
+.claro .dijitEditorFocused .dijitEditorIFrameContainer .dijitEditorIFrame{
+	
+	background-color: #fff;
+}
+.claro .dijitEditorDisabled {
+	border: 1px solid #d3d3d3;
+	color: #818181;
+}
+.claro .dijitDisabled .dijitEditorIFrame,
+.claro .dijitDisabled .dijitEditorIFrameContainer {
+	background-color: #efefef;
+	background-image: none;
+}
Index: trunk/web/dojo/dijit/themes/claro/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Common.css	(revision 9)
@@ -0,0 +1,70 @@
+
+.claro .dijitPopup {
+	box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+	-webkit-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+	-moz-box-shadow: 0px 1px 5px rgba(0,0,0,0.25);
+}
+.claro .dijitTooltipDialogPopup {
+	
+	box-shadow: none;
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+}
+.claro .dijitComboBoxHighlightMatch {
+	background-color:#a5beda;
+}
+.claro .dijitFocusedLabel {
+	
+	outline: 1px dotted #666666;
+}
+.claro .dijitContentPaneLoading {
+	background:url('images/loadingAnimation.gif') no-repeat left center;
+	padding-left:25px;
+}
+.claro .dijitContentPaneError {
+    background:url('../../icons/images/commonIconsObjActEnabled.png') no-repeat left center;
+    background-position: -496px; 
+	no-repeat left center;
+	padding-left:25px;
+}
+.claro .dojoDndItemBefore,
+.claro .dojoDndItemAfter{
+	border-top: 1px solid #769DC0;
+}
+.claro .dojoDndItemOver {
+	cursor:pointer;
+	}
+.claro table.dojoDndAvatar {
+	border: 1px solid #b5bcc7;
+	border-collapse: collapse;
+	background-color: #fff;
+	-webkit-box-shadow:0px 1px 3px rgba(0, 0, 0, .25);
+}
+.claro .dojoDndAvatarHeader td	{ 
+	height: 20px;
+	padding-left:21px;
+}
+.claro.dojoDndMove .dojoDndAvatarHeader, .claro.dojoDndCopy .dojoDndAvatarHeader {
+	background-image: url(images/dnd.png);
+	background-repeat: no-repeat;
+	background-position:2px -122px;
+}
+.claro .dojoDndAvatarItem td {
+	padding: 5px;
+}
+.claro.dojoDndMove .dojoDndAvatarHeader	{
+	background-color: #f58383; 
+	background-position:2px -103px;
+}
+.claro.dojoDndCopy .dojoDndAvatarHeader	{
+	background-color: #f58383; 
+	background-position:2px -68px;
+}
+.claro.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{
+	background-color: #97e68d; 
+	background-position:2px -33px;
+}
+.claro.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{
+	background-color: #97e68d;
+	background-position:2px 2px;
+}
Index: trunk/web/dojo/dijit/themes/claro/ProgressBar.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/ProgressBar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/ProgressBar.css	(revision 9)
@@ -0,0 +1,28 @@
+
+ 
+.claro .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.claro .dijitProgressBarEmpty {
+	
+	background:#fff url("images/progressBarEmpty.png") repeat-none left;
+	border-color: #769dc0;
+}
+.claro .dijitProgressBarTile {
+	
+	background:#9dcfff url("images/progressBarFull.png") repeat-x top;	
+}
+.dj_ie6 .claro .dijitProgressBarTile {
+	background-image: none;
+} 
+.claro .dijitProgressBarFull {
+	border-right:1px solid #769dc0;
+}
+.claro .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.claro .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url("images/progressBarAnim.gif") repeat-x top;
+} 
Index: trunk/web/dojo/dijit/themes/claro/Calendar_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/Calendar_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/Calendar_rtl.css	(revision 9)
@@ -0,0 +1,18 @@
+.claro .dijitCalendarRtl .dijitCalendarIncrease{
+	background-position: 0px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarDecrease {
+	background-position: -18px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarIncrease {
+	background-position: -36px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowHover .dijitCalendarDecrease {
+	background-position: -55px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarIncrease {
+	background-position: -72px 0px;
+}
+.claro .dijitCalendarRtl .dijitCalendarArrowActive .dijitCalendarDecrease {
+	background-position: -91px 0px;
+}
Index: trunk/web/dojo/dijit/themes/claro/TimePicker.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/TimePicker.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/TimePicker.css	(revision 9)
@@ -0,0 +1,102 @@
+
+.claro .dijitTimePicker .dijitButtonNode {
+	padding: 0 0;
+	border-radius: 0;
+	-moz-border-radius: 0;
+	-webkit-border-radius: 0;
+}
+.claro .dijitTimePicker{
+	border:1px #b5bcc7 solid;
+	border-top:none;
+	border-bottom:none;
+	background-color:#fff;
+}
+.claro .dijitTimePickerItem{
+	
+	background-image: url("images/commonHighlight.png");
+	background-position:0px -1px;
+	background-repeat:repeat-x;
+	border-top:solid 1px #b5bcc7;
+	border-bottom:solid 1px #b5bcc7;
+	margin-right:-1px;
+	margin-left:-1px;
+	margin-top:-1px;
+}
+.dj_ie6 .claro .dijitTimePickerItem {
+	background-image: none;
+}
+.claro .dijitTimePickerTick {
+	
+	color:#7a7a7a;
+	background-color:#f2f2f2;
+	font-size:0.818em;
+}
+.claro .dijitTimePickerMarker {
+	
+	color:#000;
+	background-color:#e3f2ff;
+	font-size: 1em;
+	white-space: nowrap;
+}
+.claro .dijitTimePickerTickHover,
+.claro .dijitTimePickerMarkerHover,
+.claro .dijitTimePickerMarkerSelected,
+.claro .dijitTimePickerTickSelected {
+	background-color: #83c0fa;
+	color:#000;
+	border:solid 1px #b5bcc7;
+	margin-left:-7px;
+	margin-right:-7px;
+}
+.claro .dijitTimePickerMarkerSelected,
+.claro .dijitTimePickerTickSelected {
+	font-size: 1em;
+	}
+.dj_ie .claro .dijitTimePickerTickHover,
+.dj_ie .claro .dijitTimePickerMarkerHover,
+.dj_ie .claro .dijitTimePickerMarkerSelected,
+.dj_ie .claro .dijitTimePickerTickSelected  {
+	width: 114%;
+}
+.dj_ie6 .claro .dijitTimePickerTickHover,
+.dj_ie6 .claro .dijitTimePickerMarkerHover,
+.dj_ie6 .claro .dijitTimePickerMarkerSelected,
+.dj_ie6 .claro .dijitTimePickerTickSelected  {
+	position: relative; 	
+	zoom: 1; 
+}
+.claro .dijitTimePickerTick .dijitTimePickerItemInner {
+	padding:1px;
+	margin:0px;
+}
+.claro .dijitTimePicker .dijitButtonNode {
+	border-left:none;
+	border-right:none;
+	border-color:#b5bcc7;
+	background-color: #f6f7fa;
+	background-image: url("images/commonHighlight.png");
+	background-position:0px -1px;
+	background-repeat:repeat-x;
+}
+.dj_ie6 .claro .dijitTimePicker .dijitButtonNode {
+	background-image: none;
+}
+.claro .dijitTimePicker .dijitArrowButtonInner{
+	height: 100%; 
+	background-image: url("form/images/commonFormArrows.png");
+	background-repeat: no-repeat;
+	background-position:-140px 45%;
+}
+.claro .dijitTimePicker .dijitDownArrowButton .dijitArrowButtonInner{
+	background-position:-35px 45%;
+}
+.claro .dijitTimePicker .dijitUpArrowHover, 
+.claro .dijitTimePicker .dijitDownArrowHover {
+	background-color: #abd6ff;
+}
+.claro .dijitTimePicker .dijitUpArrowHover .dijitArrowButtonInner {
+	background-position:-175px 45%;
+}
+.claro .dijitTimePicker .dijitDownArrowHover .dijitArrowButtonInner {
+	background-position:-70px 45%;
+}
Index: trunk/web/dojo/dijit/themes/claro/ColorPalette.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/ColorPalette.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/ColorPalette.css	(revision 9)
@@ -0,0 +1,18 @@
+
+.claro  .dijitColorPalette {
+	outline: 1px solid #769dc0; 
+	border: 1px solid #c0ccdf;
+	background:#fff;
+	-moz-border-radius: 0px;
+}
+.claro .dijitColorPalette .dijitPaletteImg {
+	
+	border: 1px solid #cecece;
+}
+.claro .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 1px solid #000;
+}
+.claro .dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.claro .dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+	border: 2px solid #000;
+}
Index: trunk/web/dojo/dijit/themes/claro/InlineEditBox.css
===================================================================
--- trunk/web/dojo/dijit/themes/claro/InlineEditBox.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/claro/InlineEditBox.css	(revision 9)
@@ -0,0 +1,11 @@
+
+.claro .dijitInlineEditBoxDisplayMode {
+	border: 1px solid transparent;
+}
+.claro .dijitInlineEditBoxDisplayModeHover {
+	background-color: #e2f1ff;
+	border: solid 1px #769dc0;
+}
+.dj_ie6 .claro .dijitInlineEditBoxDisplayMode {
+	border: none;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/nihilo.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/nihilo.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/nihilo.css	(revision 9)
@@ -0,0 +1,3404 @@
+
+.dijitReset {
+	
+	margin:0;
+	border:0;
+	padding:0;
+	line-height:normal;
+	font: inherit;
+	color: inherit;
+}
+.dijit_a11y .dijitReset {
+	-moz-appearance: none; 
+}
+.dijitInline {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dijitHidden {
+	
+	display: none !important;
+}
+.dijitVisible {
+	
+	display: block !important;	
+	position: relative;			
+}
+.dijitInputContainer {
+	
+	#zoom: 1;
+	overflow: hidden;
+	float: none !important; 
+	position:relative;
+}
+.dj_ie INPUT.dijitTextBox,
+.dj_ie .dijitTextBox INPUT {
+	font-size: 100%;
+}
+.dijitTextBox .dijitSpinnerButtonContainer,
+.dijitTextBox .dijitArrowButtonContainer,
+.dijitTextBox .dijitValidationContainer {
+	float: right;
+	text-align: center;
+}
+.dijitTextBox INPUT.dijitInputField {
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+}
+.dijitTextBox .dijitValidationContainer {
+	display: none;
+}
+.dijitInlineTable {
+	
+	display:inline-table;
+	display:inline-block;		
+	#zoom: 1; 
+	#display:inline; 
+	box-sizing: content-box; -moz-box-sizing: content-box;
+	border:0;
+	padding:0;
+}
+.dijitTeeny {
+	font-size:1px;
+	line-height:1px;
+}
+.dijitOffScreen {
+	position: absolute;
+	visibility: hidden;
+	left: 50%;
+	top: -10000px;
+}
+.dijitPopup {
+	position: absolute;
+	background-color: transparent;
+	margin: 0;
+	border: 0;
+	padding: 0;
+}
+.dijit_a11y .dijitPopup,
+.dijit_ally .dijitPopup DIV,
+.dijit_a11y .dijitPopup TABLE,
+.dijit_a11y .dijitTooltipContainer {
+	background-color: white !important;
+}
+.dijitPositionOnly {
+	
+	padding: 0 !important;
+	border: 0 !important;
+	background-color: transparent !important;
+	background-image: none !important;
+	height: auto !important;
+	width: auto !important;
+}
+.dijitNonPositionOnly {
+	
+	float: none !important;
+	position: static !important;
+	margin: 0 0 0 0 !important;
+	vertical-align: middle !important;
+}
+.dijitBackgroundIframe {
+	
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	z-index: -1;
+	border: 0;
+	padding: 0;
+	margin: 0;
+}
+.dijitDisplayNone {
+	
+	display:none !important;
+}
+.dijitContainer {
+	
+	overflow: hidden;	
+}
+.dijit_a11y * {
+	background-image:none !important;
+}
+.dijit_a11y .dijitIcon,
+.dijit_a11y DIV.dijitArrowButtonInner, 
+.dijit_a11y SPAN.dijitArrowButtonInner,
+.dijit_a11y IMG.dijitArrowButtonInner,
+.dijit_a11y .dijitCalendarIncrementControl {
+	
+	display: none;
+}
+.dijitSpinner DIV.dijitArrowButtonInner {
+	display: block; 
+}
+.dijit_a11y .dijitA11ySideArrow {
+	display: inline !important; 
+	cursor: pointer;
+}
+.dijit_a11y .dijitCalendarDateLabel {
+	padding: 1px;
+}
+.dijit_a11y .dijitCalendarSelectedDate .dijitCalendarDateLabel {
+	border-style: dotted !important;
+	border-width: 1px;
+	padding: 0px;
+}
+.dijit_a11y .dijitCalendarDateTemplate {
+	padding-bottom: 0.1em !important;	
+}
+.dijit_a11y .dijit * {
+	background:white !important;
+	color:black !important;
+}
+.dijit_a11y .dijitButtonNode {
+	border-color: black!important;
+	border-style: outset!important;
+	border-width: medium!important;
+}
+.dijit_a11y .dijitTextBoxReadOnly .dijitInputField,
+.dijit_a11y .dijitTextBoxReadOnly .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitButtonNode * {
+	vertical-align: middle;
+}
+.dijitButtonNode .dijitArrowButtonInner {
+	
+	background: no-repeat center;
+	width: 12px;
+	height: 12px;
+	direction: ltr; 
+}
+.dijitLeft {
+	
+	background-position:left top;
+	background-repeat:no-repeat;
+}
+.dijitStretch {
+	
+	white-space:nowrap;			
+	background-repeat:repeat-x;
+}
+.dijitRight {
+	
+	#display:inline;				
+	background-position:right top;
+	background-repeat:no-repeat;
+}
+.dijitToggleButton,
+.dijitButton,
+.dijitDropDownButton,
+.dijitComboButton {
+	
+	margin: 0.2em;
+}
+.dijitButtonContents {
+	display: block;		
+}
+td.dijitButtonContents {
+	display: table-cell;	
+}
+.dijitButtonNode IMG {
+	
+	vertical-align:middle;
+	
+}
+TABLE.dijitComboButton { 
+	
+	border-collapse: collapse;
+	border:0;
+	padding:0;
+	margin:0;
+}
+.dijitToolbar .dijitComboButton {
+	
+	border-collapse: separate;
+}
+.dijitToolbar .dijitToggleButton,
+.dijitToolbar .dijitButton,
+.dijitToolbar .dijitDropDownButton,
+.dijitToolbar .dijitComboButton {
+	margin: 0;
+}
+.dijitToolbar .dijitButtonContents {
+	
+	padding: 1px 2px;
+}
+.dj_ie .dijitComboButton {
+	
+	margin-bottom: -3px;
+}
+.dj_webkit .dijitToolbar .dijitDropDownButton {
+	padding-left: 0.3em;
+}
+.dj_gecko .dijitToolbar .dijitButtonNode::-moz-focus-inner {
+	padding:0;
+}
+.dijitButtonNode {
+	
+	border:1px solid gray;
+	margin:0;
+	line-height:normal;
+	vertical-align: middle;
+	#vertical-align: auto;
+	text-align:center;
+	white-space: nowrap;
+}
+.dj_webkit .dijitSpinner .dijitSpinnerButtonContainer {
+	
+	line-height:inherit;
+}
+.dijitTextBox .dijitButtonNode {
+	border-width: 0;
+}
+.dijitButtonNode,
+.dijitButtonNode * {
+	cursor: pointer;
+}
+.dj_ie .dijitButtonNode {
+	
+	zoom: 1;
+}
+.dj_ie .dijitButtonNode button {
+	
+	overflow: visible;
+}
+DIV.dijitArrowButton {
+	float: right;
+}
+.dijitTextBox {
+	border: solid black 1px;
+	#overflow: hidden; 
+	width: 15em;	
+	vertical-align: middle;
+	#vertical-align: auto;
+}
+.dijitTextBoxReadOnly,
+.dijitTextBoxDisabled {
+	color: gray;
+}
+.dj_webkit .dijitTextBoxDisabled INPUT {
+	color: #eee; 
+}
+.dj_webkit TEXTAREA.dijitTextAreaDisabled {
+	color: #333; 
+}
+.dj_gecko .dijitTextBoxReadOnly INPUT,
+.dj_gecko .dijitTextBoxDisabled INPUT {
+	-moz-user-input: none; 
+}
+.dijitPlaceHolder {
+	
+	color: #AAAAAA;
+	font-style: italic;
+	position: absolute;
+	top: 0;
+	left: 0;
+	#filter: ""; 
+}
+.dijitTimeTextBox {
+	width: 8em;
+}
+.dijitTextBox INPUT:focus {
+	outline: none;	
+}
+.dijitTextBoxFocused {
+	outline: auto 5px -webkit-focus-ring-color;
+}
+.dijitTextBox INPUT {
+	float: left; 
+}
+.dijitInputInner {
+	
+	border:0 !important;
+	vertical-align:middle !important;
+	background-color:transparent !important;
+	width:100% !important;
+	
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+}
+.dijit_a11y .dijitTextBox INPUT {
+	margin: 0 !important;
+}
+.dijitTextBoxError INPUT.dijitValidationInner,
+.dijitTextBox INPUT.dijitArrowButtonInner {
+	
+	text-indent: -1em !important;
+	direction: ltr !important;
+	text-align: left !important;
+	height: auto !important;
+	#text-indent: 0 !important;
+	#letter-spacing: -5em !important;
+	#text-align: right !important;
+}
+.dj_ie .dijitTextBox INPUT,
+.dj_ie INPUT.dijitTextBox {
+	overflow-y: visible; 
+	line-height: normal; 
+}
+.dj_ie7 .dijitTextBox INPUT.dijitValidationInner,
+.dj_ie7 .dijitTextBox INPUT.dijitArrowButtonInner {
+	line-height: 86%; 
+}
+.dj_ie6 .dijitTextBox INPUT,
+.dj_ie6 INPUT.dijitTextBox,
+.dj_iequirks .dijitTextBox INPUT.dijitValidationInner,
+.dj_iequirks .dijitTextBox INPUT.dijitArrowButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitSpinnerButtonInner,
+.dj_iequirks .dijitTextBox INPUT.dijitInputInner,
+.dj_iequirks INPUT.dijitTextBox {
+	line-height: 100%; 
+}
+.dijit_a11y INPUT.dijitValidationInner,
+.dijit_a11y INPUT.dijitArrowButtonInner {
+	
+	text-indent: 0 !important;
+	width: 1em !important;
+	#text-align: left !important;
+}
+.dijitTextBoxError .dijitValidationContainer {
+	display: inline;
+	cursor: default;
+}
+.dijitSpinner .dijitSpinnerButtonContainer,
+.dijitComboBox .dijitArrowButtonContainer {
+	
+	border-width: 0 0 0 1px !important; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	
+	border-width: 0;
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitButtonNode {
+	clear: both; 
+}
+.dijit_a11y .dijitTextBox .dijitValidationContainer,
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBox .dijitArrowButtonContainer {
+	
+	border: solid black !important;
+	border-width: 0 0 0 1px !important;
+}
+.dj_ie .dijitToolbar .dijitComboBox {
+	
+	vertical-align: middle;
+}
+.dijitTextBox .dijitSpinnerButtonContainer {
+	width: 1em;
+	position: relative !important;
+	overflow: hidden;
+}
+.dijitSpinner .dijitSpinnerButtonInner {
+	width:1em;
+	visibility:hidden !important; 
+	overflow-x:hidden;
+}
+.dijitComboBox .dijitButtonNode,
+.dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 0;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border: 0 none !important;
+}
+.dijit_a11y .dijitTextBox .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner,
+.dijit_a11y .dijitSpinnerButtonContainer INPUT {
+	width: 1em !important;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner {
+	margin: 0 auto !important; 
+}
+.dj_ie .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.3em !important;
+	padding-right: 0.3em !important;
+	margin-left: 0.3em !important;
+	margin-right: 0.3em !important;
+	width: 1.4em !important;
+}
+.dj_ie7 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding-left: 0.0em !important; 
+	padding-right: 0.0em !important;
+	width: 1em !important;
+}
+.dj_ie6 .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0.1em !important;
+	margin-right: 0.1em !important;
+	width: 1em !important;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	margin-left: 0 !important;
+	margin-right: 0 !important;
+	width: 2em !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	
+	padding: 0;
+	position: absolute !important;
+	right: 0;
+	float: none;
+	height: 50%;
+	width: 100%;
+	bottom: auto;
+	left: 0;
+	right: auto;
+}
+.dj_iequirks .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: auto;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitArrowButton {
+	overflow: visible !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitDownArrowButton {
+	top: 50%;
+	border-top-width: 1px !important;
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitUpArrowButton {
+	#bottom: 50%;	
+	top: 0;
+}
+.dijitSpinner .dijitArrowButtonInner {
+	margin: auto;
+	overflow-x: hidden;
+	height: 100% !important;
+}
+.dj_iequirks .dijitSpinner .dijitArrowButtonInner {
+	height: auto !important;
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	-moz-transform: scale(0.5);
+	-moz-transform-origin: center top;
+	-webkit-transform: scale(0.5);
+	-webkit-transform-origin: center top;
+	-o-transform: scale(0.5);
+	-o-transform-origin: center top;
+	transform: scale(0.5);
+	transform-origin: left top;
+	padding-top: 0;
+	padding-bottom: 0;
+	padding-left: 0 !important;
+	padding-right: 0 !important;
+	width: 100%;
+}
+.dj_ie .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	zoom: 50%; 
+}
+.dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButtonInner {
+	overflow: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 100%;
+}
+.dj_iequirks .dijit_a11y .dijitSpinner .dijitSpinnerButtonContainer .dijitArrowButton {
+	width: 1em; 
+}
+.dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	visibility: hidden;
+}
+.dijit_a11y .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	vertical-align:top;
+	visibility: visible;
+}
+.dijit_a11y .dijitSpinnerButtonContainer {
+	width: 1em;
+}
+.dijit_a11y .dijitSpinnerButtonContainer .dijitButtonNode {
+	border-width: 1px 0px 0px 0px;
+	border-style: solid !important;
+}
+.dijitCheckBox,
+.dijitRadio,
+.dijitCheckBoxInput {
+	padding: 0;
+	border: 0;
+	width: 16px;
+	height: 16px;
+	background-position:center center;
+	background-repeat:no-repeat;
+	overflow: hidden;
+}
+.dijitCheckBox INPUT,
+.dijitRadio INPUT {
+	margin: 0;
+	padding: 0;
+	display: block;
+}
+.dijitCheckBoxInput {
+	
+	opacity: 0.01;
+}
+.dj_ie .dijitCheckBoxInput {
+	filter: alpha(opacity=0);
+}
+.dijit_a11y .dijitCheckBox,
+.dijit_a11y .dijitRadio {
+	
+	width: auto !important;
+	height: auto !important;
+}
+.dijit_a11y .dijitCheckBoxInput {
+	opacity: 1;
+	filter: none;
+	width: auto;
+	height: auto;
+}
+.dijitProgressBarEmpty {
+	
+	position:relative;overflow:hidden;
+	border:1px solid black; 	
+	z-index:0;			
+}
+.dijitProgressBarFull {
+	
+	position:absolute;
+	overflow:hidden;
+	z-index:-1;
+	top:0;
+	width:100%;
+}
+.dj_ie6 .dijitProgressBarFull {
+	height:1.6em;
+}
+.dijitProgressBarTile {
+	
+	position:absolute;
+	overflow:hidden;
+	top:0;
+	left:0;
+	bottom:0;
+	right:0;
+	margin:0;
+	padding:0;
+	width:auto;
+	height:auto;
+	background-color:#aaa;
+	background-attachment: fixed;
+}
+.dijit_a11y .dijitProgressBarTile {
+	
+	border-width:2px;
+	border-style:solid;
+	background-color:transparent !important;
+}
+.dj_ie6 .dijitProgressBarTile {
+	
+	position:static;
+	
+	height:1.6em;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarLabel {
+	visibility:hidden;
+}
+.dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+}
+.dijitProgressBarIndeterminateHighContrastImage {
+	display:none;
+}
+.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage {
+	display:block;
+	position:absolute;
+	top:0;
+	bottom:0;
+	margin:0;
+	padding:0;
+	width:100%;
+	height:auto;
+}
+.dijitProgressBarLabel {
+	display:block;
+	position:static;
+	width:100%;
+	text-align:center;
+	background-color:transparent !important;
+}
+.dijitTooltip {
+	position: absolute;
+	z-index: 2000;
+	display: block;
+	
+	left: 50%;
+	top: -10000px;
+	overflow: visible;
+}
+.dijitTooltipContainer {
+	border: solid black 2px;
+	background: #b8b5b5;
+	color: black;
+	font-size: small;
+}
+.dijitTooltipFocusNode {
+	padding: 2px 2px 2px 2px;
+}
+.dijitTooltipConnector {
+	position: absolute;
+}
+.dijit_a11y .dijitTooltipConnector {
+	display: none;	
+}
+.dijitTooltipData {
+	display:none;
+}
+.dijitLayoutContainer {
+	position: relative;
+	display: block;
+	overflow: hidden;
+}
+body .dijitAlignTop,
+body .dijitAlignBottom,
+body .dijitAlignLeft,
+body .dijitAlignRight {
+	position: absolute;
+	overflow: hidden;
+}
+body .dijitAlignClient { position: absolute; }
+.dijitBorderContainer, .dijitBorderContainerNoGutter {
+	position:relative;
+	overflow: hidden;
+}
+.dijitBorderContainerPane,
+.dijitBorderContainerNoGutterPane {
+	position: absolute !important;	
+	z-index: 2;		
+}
+.dijitBorderContainer > .dijitTextArea {
+	
+	resize: none;
+}
+.dijitGutter {
+	
+	position: absolute;
+	font-size: 1px;		
+}
+.dijitSplitter {
+	position: absolute;
+	overflow: hidden;
+	z-index: 10;		
+	background-color: #fff;
+	border-color: gray;
+	border-style: solid;
+	border-width: 0;
+}
+.dj_ie .dijitSplitter {
+	z-index: 1;	
+}
+.dijitSplitterActive {
+	z-index: 11 !important;
+}
+.dijitSplitterCover {
+	position:absolute;
+	z-index:-1;
+	top:0;
+	left:0;
+	width:100%;
+	height:100%;
+}
+.dijitSplitterCoverActive {
+	z-index:3 !important;
+}
+.dj_ie .dijitSplitterCover {
+	background: white;
+	filter: alpha(opacity=0);
+}
+.dijitSplitterH {
+	height: 7px;
+	border-top:1px;
+	border-bottom:1px;
+	cursor: ns-resize;
+}
+.dijitSplitterV {
+	width: 7px;
+	border-left:1px;
+	border-right:1px;
+	cursor: ew-resize;
+}
+.dijitSplitContainer {
+	position: relative;
+	overflow: hidden;
+	display: block;
+}
+.dj_ff3 .dijit_a11y div.dijitSplitter:focus {
+	outline-style:dotted;
+	outline-width: 2px;
+}
+.dijitSplitPane {
+	position: absolute;
+}
+.dijitSplitContainerSizerH,
+.dijitSplitContainerSizerV {
+	position:absolute;
+	font-size: 1px;
+	cursor: move;
+	cursor: w-resize;
+	background-color: ThreeDFace;
+	border: 1px solid;
+	border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
+	margin: 0;
+}
+.dijitSplitContainerSizerH .thumb, .dijitSplitterV .dijitSplitterThumb {
+	overflow:hidden;
+	position:absolute;
+	top:49%;
+}
+.dijitSplitContainerSizerV .thumb, .dijitSplitterH .dijitSplitterThumb {
+	position:absolute;
+	left:49%;
+}
+.dijitSplitterShadow,
+.dijitSplitContainerVirtualSizerH,
+.dijitSplitContainerVirtualSizerV {
+	font-size: 1px;
+	background-color: ThreeDShadow;
+	-moz-opacity: 0.5;
+	opacity: 0.5;
+	filter: Alpha(Opacity=50);
+	margin: 0;
+}
+.dj_ie .dijitSplitterV, .dijitSplitContainerVirtualSizerH {
+	cursor: w-resize;
+}
+.dj_ie .dijitSplitterH, .dijitSplitContainerSizerV, .dijitSplitContainerVirtualSizerV {
+	cursor: n-resize;
+}
+.dijit_a11y .dijitSplitterH {
+	border-top:1px solid #d3d3d3 !important;
+	border-bottom:1px solid #d3d3d3 !important;
+}
+.dijit_a11y .dijitSplitterV {
+	border-left:1px solid #d3d3d3 !important;
+	border-right:1px solid #d3d3d3 !important;
+}
+.dijitContentPane {
+	display: block;
+	overflow: auto;	
+}
+.dijitContentPaneSingleChild {
+	
+	overflow: hidden;
+}
+.dijitTitlePane {
+	display: block;
+	overflow: hidden;
+}
+.dijitTitlePaneTitle {
+	cursor: pointer;
+}
+.dijitFixedOpen {
+	
+	cursor: default;
+}
+.dijitTitlePaneTitle * {
+	vertical-align: middle;
+}
+.dijitTitlePane .dijitArrowNodeInner {
+	
+	display: none;
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
+	
+	display:inline !important;
+	font-family: monospace;		
+}
+.dijit_a11y .dijitTitlePane .dijitArrowNode {
+	
+	display:none;
+}
+.dj_ie6 .dijitTitlePaneContentOuter,
+.dj_ie6 .dijitTitlePane .dijitTitlePaneTitle {
+	
+	zoom: 1;
+}
+.dijitColorPalette {
+	border: 1px solid #999;
+	background: #fff;
+	position: relative;
+}
+img.dijitColorPaletteUnder {
+	
+	border-style: none;
+	position: absolute;
+	left: 0;
+	top: 0;
+}
+.dijitColorPalette .dijitPaletteTable {
+	
+	padding: 2px 3px 3px 3px;
+	position: relative;
+	overflow: hidden;
+	outline: 0;
+	border-collapse: separate;
+}
+.dj_ie6 .dijitColorPalette .dijitPaletteTable,
+.dj_ie7 .dijitColorPalette .dijitPaletteTable,
+.dj_iequirks .dijitColorPalette .dijitPaletteTable {
+	
+	padding: 0;
+	margin: 2px 3px 3px 3px;
+}
+.dijitColorPalette .dijitPaletteCell {
+	
+	height: 20px;
+	width: 20px;
+	font-size: 1px;
+	vertical-align: middle;
+	text-align: center;
+}
+.dijitColorPalette .dijitPaletteImg {
+	
+	width: 16px;
+	height: 14px;
+	border: 1px solid #999;
+	cursor: default;
+	vertical-align: middle;
+}
+.dj_iequirks .dijitColorPalette .dijitPaletteImg {
+	margin: 1px;	
+}
+.dijitPaletteTable td {
+		padding: 0px;
+}
+.dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	
+	border: 1px solid #000;
+}
+.dijitColorPalette .dijitPaletteCellActive .dijitPaletteImg,
+.dijitColorPalette .dijitPaletteCellSelected .dijitPaletteImg {
+	border: 2px solid #000;
+}
+.dijit_a11y .dijitColorPalette .dijitPaletteTable,
+.dijit_a11y .dijitColorPalette .dijitPaletteTable * {
+	
+	background-color: transparent !important;
+}
+.dj_gecko .dijit_a11y .dijitColorPalette .dijitPaletteCellFocused .dijitPaletteImg {
+	border: 3px dotted #000;	
+	margin: -1px;
+}
+.dijit_a11y  .dijitColorPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 2px solid #000 !important;
+}
+.dijitAccordionContainer {
+	border:1px solid #b7b7b7;
+	border-top:0 !important;
+}
+.dijitAccordionTitle {
+	cursor: pointer;
+}
+.dijitAccordionTitleSelected {
+	cursor: default;
+}
+.dijitAccordionTitle .arrowTextUp,
+.dijitAccordionTitle .arrowTextDown {
+	display: none;
+	font-size: 0.65em;
+	font-weight: normal !important;
+}
+.dijit_a11y .dijitAccordionTitle .arrowTextUp,
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextDown {
+	display: inline;
+}
+.dijit_a11y .dijitAccordionTitleSelected .arrowTextUp {
+	display: none;
+}
+.dj_ie6 .dijitAccordionTitle,
+.dj_iequirks .dijitAccordionTitle {
+	
+	zoom: 1;
+}
+.dijitCalendarContainer {
+	width: auto;	
+}
+.dijitCalendarContainer th, .dijitCalendarContainer td {
+	padding: 0;
+}
+.dijitCalendarNextYear {
+	margin:0 0 0 0.55em;
+}
+.dijitCalendarPreviousYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarIncrementControl {
+	vertical-align: middle;
+}
+.dijitCalendarIncrementControl,
+.dijitCalendarDateTemplate,
+.dijitCalendarMonthLabel,
+.dijitCalendarPreviousYear,
+.dijitCalendarNextYear {
+	cursor: pointer;
+}
+.dijitCalendarDisabledDate {
+	color: gray;
+	text-decoration: line-through;
+	cursor: default;
+}
+.dijitSpacer {
+	
+  	position: relative;
+  	height: 1px;
+  	overflow: hidden;
+  	visibility: hidden;
+}
+.dijitMenu {
+	border:1px solid black;
+	background-color:white;
+}
+.dijitMenuTable {
+	border-collapse:collapse;
+	border-width:0;
+	background-color:white;
+}
+.dj_webkit .dijitMenuTable td[colspan="2"]{
+	border-right:hidden;
+}
+.dijitMenuItem {
+	text-align: left;
+	white-space: nowrap;
+	padding:.1em .2em;
+	cursor:pointer;
+}
+.dijitMenuPassive .dijitMenuItemHover,
+.dijitMenuItemSelected {
+	
+	background-color:black;
+	color:white;
+}
+.dijitMenuItemIcon, .dijitMenuExpand {
+	background-repeat: no-repeat;
+}
+.dijitMenuItemDisabled * {
+	
+	opacity:0.5;
+	cursor:default;
+}
+.dj_ie .dijit_a11y .dijitMenuItemDisabled,
+.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
+.dj_ie .dijitMenuItemDisabled *,
+.dj_ie .dijitMenuItemDisabled td {
+	color:gray !important;
+	filter: alpha(opacity=35);
+}
+.dijitMenuItemLabel {
+	position: relative;
+	vertical-align: middle;
+}
+.dijit_a11y .dijitMenuItemSelected {
+	border: 1px dotted black !important;
+}
+.dj_ff3 .dijit_a11y .dijitMenuItem td {
+	padding: none !important;
+	background:none !important;
+}
+.dijit_a11y .dijitMenuItemSelected .dijitMenuItemLabel {
+	border-width: 1px;
+	border-style: solid;
+}
+.dj_ie8 .dijit_a11y .dijitMenuItemLabel {
+	position:static;
+}
+.dijitMenuExpandA11y {
+	display: none;
+}
+.dijit_a11y .dijitMenuExpandA11y {
+	display: inline;
+}
+.dijitMenuSeparator td {
+	border: 0;
+	padding: 0;
+}
+.dijitMenuSeparatorTop {
+	height: 50%;
+	margin: 0;
+	margin-top:3px;
+	font-size: 1px;
+}
+.dijitMenuSeparatorBottom {
+	height: 50%;
+	margin: 0;
+	margin-bottom:3px;
+	font-size: 1px;
+}
+.dijitCheckedMenuItemIconChar {
+	vertical-align: middle;
+	visibility:hidden;
+}
+.dijitCheckedMenuItemChecked .dijitCheckedMenuItemIconChar {
+	visibility: visible;
+}
+.dijit_a11y .dijitCheckedMenuItemIconChar {
+	display:inline !important;
+}
+.dijit_a11y .dijitCheckedMenuItemIcon {
+	display: none;
+}
+.dj_ie .dijit_a11y .dijitMenuBar .dijitMenuItem {
+	
+	margin: 0px;
+}
+.dijitStackController .dijitToggleButtonChecked * {
+	cursor: default;	
+}
+.dijitTabContainerNoLayout {
+	width: 100%;	
+}
+.dijitTabContainerBottom-tabs,
+.dijitTabContainerTop-tabs,
+.dijitTabContainerLeft-tabs,
+.dijitTabContainerRight-tabs {
+	overflow: visible !important;  
+}
+.dijitTabContainerBottom-container,
+.dijitTabContainerTop-container,
+.dijitTabContainerLeft-container,
+.dijitTabContainerRight-container {
+	z-index:0;
+	overflow: hidden;
+	border: 1px solid black;
+}
+.nowrapTabStrip {
+	width: 50000px;
+	display: block;
+	position: relative;
+}
+.dijitTabListWrapper {
+	overflow: hidden;
+}
+.dijit_a11y .tabStripButton img {
+	
+	display: none;
+}
+.dijitTabContainerTop-tabs {
+	border-bottom: 1px solid black;
+}
+.dijitTabContainerTop-container {
+	border-top: 0px;
+}
+.dijitTabContainerLeft-tabs {
+	border-right: 1px solid black;
+	float: left;
+}
+.dijitTabContainerLeft-container {
+	border-left: 0px;
+}
+.dijitTabContainerBottom-tabs {
+	border-top: 1px solid black;
+}
+.dijitTabContainerBottom-container {
+	border-bottom: 0px;
+}
+.dijitTabContainerRight-tabs {
+	border-left: 1px solid black;
+	float: left;
+}
+.dijitTabContainerRight-container {
+	border-right: 0px;
+}
+DIV.dijitTabDisabled, .dj_ie DIV.dijitTabDisabled {
+	cursor: auto;
+}
+.dijitTab {
+	position:relative;
+	cursor:pointer;
+	white-space:nowrap;
+	z-index:3;
+}
+.dijitTab * {
+	
+	vertical-align: middle;
+}
+.dijitTabChecked {
+	cursor: default;	
+}
+.dijitTabContainerTop-tabs .dijitTab {
+	top: 1px;	
+}
+.dijitTabContainerBottom-tabs .dijitTab {
+	top: -1px;	
+}
+.dijitTabContainerLeft-tabs .dijitTab {
+	left: 1px;	
+}
+.dijitTabContainerRight-tabs .dijitTab {
+	left: -1px;	
+}
+.dijitTabContainerTop-tabs .dijitTab,
+.dijitTabContainerBottom-tabs .dijitTab {
+	
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+}
+.dijitTabInnerDiv {
+	position:relative;
+}
+.tabStripButton {
+	z-index: 12;
+}
+.dijitTabButtonDisabled .tabStripButton {
+	display: none;
+}
+.dijitTabCloseButton {
+	margin-left: 1em;
+}
+.dijitTabCloseText {
+	display:none;
+}
+.dijit_a11y .dijitTabCloseButton {
+	background-image: none !important;
+	width: auto !important;
+	height: auto !important;
+	border: thin dotted;	
+}
+.dijit_a11y .dijitTabCloseButtonHover {
+	border:thin solid;	
+}
+.dijit_a11y .dijitTabCloseText {
+	display: inline;
+}
+.dijit_a11y .dijitTabChecked {
+	
+	border-style:dashed !important;
+}
+.dijit_a11y .dijitTabInnerDiv {
+	border-left:none !important;
+ }
+.dijitTabPane,
+.dijitStackContainer-child,
+.dijitAccordionContainer-child {
+	
+    border: none !important;
+}
+.dijitInlineEditBoxDisplayMode {
+	border: 1px solid transparent;	
+	cursor: text;
+}
+.dijit_a11y .dijitInlineEditBoxDisplayMode,
+.dj_ie6 .dijitInlineEditBoxDisplayMode {
+	
+	border: none;
+}
+.dijitInlineEditBoxDisplayModeHover,
+.dijit_a11y .dijitInlineEditBoxDisplayModeHover,
+.dj_ie6 .dijitInlineEditBoxDisplayModeHover {
+	
+	background-color: #e2ebf2;
+	border: solid 1px black;
+}
+.dijitInlineEditBoxDisplayModeDisabled {
+	cursor: default;
+}
+.dijitTreeIndent {
+	
+	width: 19px;
+}
+.dijitTreeRow, .dijitTreeContent {
+	white-space: nowrap;
+}
+.dijitTreeRow img {
+	
+	vertical-align: middle;
+}
+.dijitTreeContent {
+    cursor: default;
+}
+.dijitExpandoText {
+	display: none;
+}
+.dijit_a11y .dijitExpandoText {
+	display: inline;
+	padding-left: 10px;
+	padding-right: 10px;
+	font-family: monospace;
+	border-style: solid;
+	border-width: thin;
+	cursor: pointer;
+}
+.dijitTreeLabel {
+	margin: 0px 4px;
+}
+.dijitDialog {
+	position: absolute;
+	z-index: 999;
+	overflow: hidden;       
+}
+.dijitDialogTitleBar {
+	cursor: move;
+}
+.dijitDialogFixed .dijitDialogTitleBar {
+	cursor:default;
+}
+.dijitDialogCloseIcon {
+	cursor: pointer;
+}
+.dijitDialogUnderlayWrapper {
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 998;
+	display: none;
+	background: transparent !important;
+}
+.dijitDialogUnderlay {
+	background: #eee;
+	opacity: 0.5;
+}
+.dj_ie .dijitDialogUnderlay {
+	filter: alpha(opacity=50);
+}
+.dijit_a11y .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitDialog {
+	opacity: 1 !important;
+	background-color: white !important;
+}
+.dijitDialog .closeText {
+	display:none;
+	
+	position:absolute;
+}
+.dijit_a11y .dijitDialog .closeText {
+	display:inline;
+}
+.dijitSliderMoveable {
+	z-index:99;
+	position:absolute !important;
+	display:block;
+	vertical-align:middle;
+}
+.dijitSliderMoveableH {
+	right:0;
+}
+.dijitSliderMoveableV {
+	right:50%;
+}
+.dijit_a11y DIV.dijitSliderImageHandle,
+.dijitSliderImageHandle {
+	margin:0;
+	padding:0;
+	position:relative !important;
+	border:8px solid gray;
+	width:0;
+	height:0;
+	cursor: pointer;
+}
+.dj_iequirks .dijit_a11y .dijitSliderImageHandle {
+	font-size: 0;
+}
+.dj_ie7 .dijitSliderImageHandle {
+	overflow: hidden; 
+}
+.dj_ie7 .dijit_a11y .dijitSliderImageHandle {
+	overflow: visible; 
+}
+.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
+	border:4px solid #000;
+	height:8px;
+	width:8px;
+}
+.dijitSliderImageHandleV {
+	top:-8px;
+	right: -50%;
+}
+.dijitSliderImageHandleH {
+	left:50%;
+	top:-5px;
+	vertical-align:top;
+}
+.dijitSliderBar {
+	border-style:solid;
+	border-color:black;
+	cursor: pointer;
+}
+.dijitSliderBarContainerV {
+	position:relative;
+	height:100%;
+	z-index:1;
+}
+.dijitSliderBarContainerH {
+	position:relative;
+	z-index:1;
+}
+.dijitSliderBarH {
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBarV {
+	width:4px;
+	border-width:0 1px;
+}
+.dijitSliderProgressBar {
+	background-color:red;
+	z-index:1;
+}
+.dijitSliderProgressBarV {
+	position:static !important;
+	height:0%;
+	vertical-align:top;
+	text-align:left;
+}
+.dijitSliderProgressBarH {
+	position:absolute !important;
+	width:0%;
+	vertical-align:middle;
+	overflow:visible;
+}
+.dijitSliderRemainingBar {
+	overflow:hidden;
+	background-color:transparent;
+	z-index:1;
+}
+.dijitSliderRemainingBarV {
+	height:100%;
+	text-align:left;
+}
+.dijitSliderRemainingBarH {
+	width:100% !important;
+}
+.dijitSliderBumper {
+	overflow:hidden;
+	z-index:1;
+}
+.dijitSliderBumperV {
+	width:4px;
+	height:8px;
+	border-width:0 1px;
+}
+.dijitSliderBumperH {
+	width:8px;
+	height:4px;
+	border-width:1px 0;
+}
+.dijitSliderBottomBumper,
+.dijitSliderLeftBumper {
+	background-color:red;
+}
+.dijitSliderTopBumper,
+.dijitSliderRightBumper {
+	background-color:transparent;
+}
+.dijitSliderDecoration {
+	text-align:center;
+}
+.dijitSliderV TD {
+	position: relative; 
+}
+.dijitSliderDecorationH {
+	width: 100%;
+}
+.dijitSliderDecorationV {
+	height: 100%;
+}
+.dijitSliderButton {
+	font-family:monospace;
+	margin:0;
+	padding:0;
+	display:block;
+}
+.dijit_a11y .dijitSliderButtonInner {
+	visibility:visible !important;
+}
+.dijitSliderButtonContainer {
+	text-align:center;
+	height:0;	
+}
+.dijitSliderButtonContainer * {
+	cursor: pointer;
+}
+.dijitSlider .dijitButtonNode {
+	padding:0;
+	display:block;
+}
+.dijitRuleContainer {
+	position:relative;
+	overflow:visible;
+}
+.dijitRuleContainerV {
+	height:100%;
+	line-height:0;
+	float:left;
+	text-align:left;
+}
+.dj_opera .dijitRuleContainerV {
+	line-height:2%;
+}
+.dj_ie .dijitRuleContainerV {
+	line-height:normal;
+}
+.dj_gecko .dijitRuleContainerV {
+	margin:0 0 1px 0; 
+}
+.dijitRuleMark {
+	position:absolute;
+	border:1px solid black;
+	line-height:0;
+	height:100%;
+}
+.dijitRuleMarkH {
+	width:0;
+	border-top-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+}
+.dijitRuleLabelContainer {
+	position:absolute;
+}
+.dijitRuleLabelContainerH {
+	text-align:center;
+	display:inline-block;
+}
+.dijitRuleLabelH {
+	position:relative;
+	left:-50%;
+}
+.dijitRuleLabelV {
+	
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	overflow: hidden;
+}
+.dijitRuleMarkV {
+	height:0;
+	border-right-width:0 !important;
+	border-bottom-width:0 !important;
+	border-left-width:0 !important;
+	width:100%;
+	left:0;
+}
+.dj_ie .dijitRuleLabelContainerV {
+	margin-top:-.55em;
+}
+.dijit_a11y .dijitSliderReadOnly,
+.dijit_a11y .dijitSliderDisabled {
+	opacity:0.6;
+}
+.dj_ie .dijit_a11y .dijitSliderReadOnly .dijitSliderBar,
+.dj_ie .dijit_a11y .dijitSliderDisabled .dijitSliderBar {
+	filter: alpha(opacity=40);
+}
+.dijit_a11y .dijitSlider .dijitSliderButtonContainer DIV {
+	font-family: monospace; 
+	font-size: 1em;
+	line-height: 1em;
+	height: auto;
+	width: auto;
+	margin: 0px 4px;
+}
+.dijit_a11y .dijitButtonContents .dijitButtonText,
+.dijit_a11y .dijitTab .tabLabel {
+	display: inline !important;
+}
+.dijitTextArea {
+	width:100%;
+	overflow-y: auto;	
+}
+.dijitTextArea[cols] {
+	width:auto; 
+}
+.dj_ie .dijitTextAreaCols {
+	width:auto;
+}
+.dijitToolbarSeparator {
+	height: 18px;
+	width: 5px;
+	padding: 0 1px;
+	margin: 0;
+}
+.dijitIEFixedToolbar {
+	position:absolute;
+	
+	top: expression(eval((document.documentElement||document.body).scrollTop));
+}
+.dijitEditor {
+	display: block;	
+}
+.dijitEditorDisabled,
+.dijitEditorReadOnly {
+	color: gray;
+}
+.dijitTimePickerItemInner {
+	text-align:center;
+	border:0;
+	padding:2px 8px 2px 8px;
+}
+.dijitTimePickerTick,
+.dijitTimePickerMarker {
+	border-bottom:1px solid gray;
+}
+.dijitTimePicker .dijitDownArrowButton {
+	border-top: none !important;
+}
+.dijitTimePickerTick {
+	color:#CCC;
+}
+.dijitTimePickerMarker {
+	color:black;
+	background-color:#CCC;
+}
+.dijitTimePickerItemSelected {
+	font-weight:bold;
+	color:#333;
+	background-color:#b7cdee;
+}
+.dijitTimePickerItemHover {
+	background-color:gray;
+	color:white;
+	cursor:pointer;
+}
+.dijit_a11y .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	border: solid 4px black;
+}
+.dijit_a11y .dijitTimePickerItemHover .dijitTimePickerItemInner {
+	border: dashed 4px black;
+}
+.dijitToggleButtonIconChar {
+	
+	display:none !important;
+}
+.dijit_a11y .dijitToggleButton .dijitToggleButtonIconChar {
+	display:inline !important;
+	visibility:hidden;
+}
+.dj_ie6 .dijitToggleButtonIconChar, .dj_ie6 .tabStripButton .dijitButtonText {
+	font-family: "Arial Unicode MS";	
+}
+.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
+	display: inline !important; 
+	visibility:visible !important;
+}
+.dijitArrowButtonChar {
+        display:none !important;
+}
+.dijit_a11y .dijitArrowButtonChar {
+        display:inline !important;
+}
+.dijit_a11y .dijitDropDownButton .dijitArrowButtonInner,
+.dijit_a11y .dijitComboButton .dijitArrowButtonInner {
+	display:none !important;
+}
+.dijitSelect {
+	margin: 0.2em;
+	border-collapse: collapse;
+}
+.dj_ie .dijitSelect,
+.dj_ie7 .dijitSelect,
+.dj_iequirks .dijitSelect {
+	vertical-align: middle; 
+}
+.dj_ie8 .dijitSelect .dijitButtonText {
+	vertical-align: top;
+}
+.dijitToolbar .dijitSelect {
+	margin: 0;
+}
+.dj_webkit .dijitToolbar .dijitSelect {
+	padding-left: 0.3em;
+}
+.dijit_a11y .dijitSelectDisabled .dijitButtonNode {
+	border-style: outset!important;
+	border-width: medium!important;
+	border-color: #999 !important;
+	color:#999 !important;
+}
+.dijitSelect .dijitButtonContents {
+	padding: 0px;
+	background: transparent none;
+	white-space: nowrap;
+	text-align: left;
+}
+.dijitSelectFixedWidth .dijitButtonContents {
+	width: 100%;
+}
+.dijitSelectMenu .dijitMenuItemIcon {
+	
+	display:none;
+}
+.dj_ie6 .dijitSelectMenu .dijitMenuItemLabel,
+.dj_ie7 .dijitSelectMenu .dijitMenuItemLabel {
+	
+	position: static;
+}
+.dijitSelectLabel *
+{
+	vertical-align: baseline;
+}
+.dijitSelectSelectedOption * {
+	font-weight: bold;
+}
+.dijitSelectMenu {
+	border-width: 1px;
+}
+.dijitSelectMenu .dijitMenuTable {
+	margin: 0px;
+	background-color: transparent;
+}
+.dijitForceStatic {
+	position: static !important;
+}
+.dijitReadOnly *,
+.dijitDisabled *,
+.dijitReadOnly,
+.dijitDisabled {
+	
+	cursor: default;
+}
+.dijitIconSave,
+.dijitIconPrint,
+.dijitIconCut,
+.dijitIconCopy,
+.dijitIconClear,
+.dijitIconDelete,
+.dijitIconUndo,
+.dijitIconEdit,
+.dijitIconNewTask,
+.dijitIconEditTask,
+.dijitIconEditProperty,
+.dijitIconTask,
+.dijitIconFilter,
+.dijitIconConfigure,
+.dijitIconSearch,
+.dijitIconApplication,
+.dijitIconBookmark,
+.dijitIconChart,
+.dijitIconConnector,
+.dijitIconDatabase,
+.dijitIconDocuments,
+.dijitIconMail,
+.dijitLeaf,
+.dijitIconFile,
+.dijitIconFunction,
+.dijitIconKey,
+.dijitIconPackage,
+.dijitIconSample,
+.dijitIconTable,
+.dijitIconUsers,
+.dijitFolderClosed,
+.dijitIconFolderClosed,
+.dijitFolderOpened,
+.dijitIconFolderOpen,
+.dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled.png); 
+	width: 16px;
+	height: 16px;
+}
+.dj_ie6 .dijitIconSave,
+.dj_ie6 .dijitIconPrint,
+.dj_ie6 .dijitIconCut,
+.dj_ie6 .dijitIconCopy,
+.dj_ie6 .dijitIconClear,
+.dj_ie6 .dijitIconDelete,
+.dj_ie6 .dijitIconUndo,
+.dj_ie6 .dijitIconEdit,
+.dj_ie6 .dijitIconNewTask,
+.dj_ie6 .dijitIconEditTask,
+.dj_ie6 .dijitIconEditProperty,
+.dj_ie6 .dijitIconTask,
+.dj_ie6 .dijitIconFilter,
+.dj_ie6 .dijitIconConfigure,
+.dj_ie6 .dijitIconSearch,
+.dj_ie6 .dijitIconApplication,
+.dj_ie6 .dijitIconBookmark,
+.dj_ie6 .dijitIconChart,
+.dj_ie6 .dijitIconConnector,
+.dj_ie6 .dijitIconDatabase,
+.dj_ie6 .dijitIconDocuments,
+.dj_ie6 .dijitIconMail,
+.dj_ie6 .dijitLeaf,
+.dj_ie6 .dijitIconFile,
+.dj_ie6 .dijitIconFunction,
+.dj_ie6 .dijitIconKey,
+.dj_ie6 .dijitIconPackage,
+.dj_ie6 .dijitIconSample,
+.dj_ie6 .dijitIconTable,
+.dj_ie6 .dijitIconUsers,
+.dj_ie6 .dijitFolderClosed,
+.dj_ie6 .dijitIconFolderClosed,
+.dj_ie6 .dijitFolderOpened,
+.dj_ie6 .dijitIconFolderOpen,
+.dj_ie6 .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActEnabled8bit.png);
+}
+.dijitDisabled .dijitIconSave,
+.dijitDisabled .dijitIconPrint,
+.dijitDisabled .dijitIconCut,
+.dijitDisabled .dijitIconCopy,
+.dijitDisabled .dijitIconClear,
+.dijitDisabled .dijitIconDelete,
+.dijitDisabled .dijitIconUndo,
+.dijitDisabled .dijitIconEdit,
+.dijitDisabled .dijitIconNewTask,
+.dijitDisabled .dijitIconEditTask,
+.dijitDisabled .dijitIconEditProperty,
+.dijitDisabled .dijitIconTask,
+.dijitDisabled .dijitIconFilter,
+.dijitDisabled .dijitIconConfigure,
+.dijitDisabled .dijitIconSearch,
+.dijitDisabled .dijitIconApplication,
+.dijitDisabled .dijitIconBookmark,
+.dijitDisabled .dijitIconChart,
+.dijitDisabled .dijitIconConnector,
+.dijitDisabled .dijitIconDatabase,
+.dijitDisabled .dijitIconDocuments,
+.dijitDisabled .dijitIconMail,
+.dijitDisabled .dijitLeaf,
+.dijitDisabled .dijitIconFile,
+.dijitDisabled .dijitIconFunction,
+.dijitDisabled .dijitIconKey,
+.dijitDisabled .dijitIconPackage,
+.dijitDisabled .dijitIconSample,
+.dijitDisabled .dijitIconTable,
+.dijitDisabled .dijitIconUsers,
+.dijitDisabled .dijitFolderClosed,
+.dijitDisabled .dijitIconFolderClosed,
+.dijitDisabled .dijitFolderOpened,
+.dijitDisabled .dijitIconFolderOpen,
+.dijitDisabled .dijitIconError {
+	background-image: url(../../icons/images/commonIconsObjActDisabled.png); 
+}
+.dijitIconSave { background-position: 0px; }
+.dijitIconPrint { background-position: -16px; }
+.dijitIconCut { background-position: -32px; }
+.dijitIconCopy { background-position: -48px; }
+.dijitIconClear { background-position: -64px; }
+.dijitIconDelete { background-position: -80px; }
+.dijitIconUndo { background-position: -96px; }
+.dijitIconEdit { background-position: -112px; }
+.dijitIconNewTask { background-position: -128px; }
+.dijitIconEditTask { background-position: -144px; }
+.dijitIconEditProperty { background-position: -166px; }
+.dijitIconTask { background-position: -176px; }
+.dijitIconFilter { background-position: -192px; }
+.dijitIconConfigure { background-position: -208px; }
+.dijitIconSearch { background-position: -224px; }
+.dijitIconError { background-position: -496px; } 
+.dijitIconApplication { background-position: -240px; }
+.dijitIconBookmark { background-position: -256px; }
+.dijitIconChart { background-position: -272px; }
+.dijitIconConnector { background-position: -288px; }
+.dijitIconDatabase { background-position: -304px; }
+.dijitIconDocuments { background-position: -320px; }
+.dijitIconMail { background-position: -336px; }
+.dijitIconFile, .dijitLeaf { background-position: -352px; }
+.dijitIconFunction { background-position: -368px; }
+.dijitIconKey { background-position: -384px; }
+.dijitIconPackage{ background-position: -400px; }
+.dijitIconSample { background-position: -416px; }
+.dijitIconTable { background-position: -432px; }
+.dijitIconUsers { background-position: -448px; }
+.dijitIconFolderClosed, .dijitFolderClosed { background-position: -464px; }
+.dijitIconFolderOpen, .dijitFolderOpened { background-position: -480px; }
+.nihilo .dojoDndItemBefore {
+	border-top: 2px solid #369;
+}
+.nihilo .dojoDndItemAfter {
+	border-bottom: 2px solid #369;
+}
+.nihilo .dojoDndItemOver {
+	cursor:pointer;
+}
+.nihilo table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.nihilo .dojoDndAvatar td	{ border: none; }
+.nihilo .dojoDndAvatar tr	{ border: none; }
+.nihilo .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
+.nihilo .dojoDndAvatarItem td { padding: 2px;}
+.nihilo.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo .dijitContentPane {
+    padding: 0px;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane,
+.nihilo .dijitTabContainerLeft-dijitContentPane,
+.nihilo .dijitTabContainerRight-dijitContentPane,
+.nihilo .dijitTabContainerBottom-dijitContentPane,
+.nihilo .dijitAccordionContainer-dijitContentPane {
+    background-color: #fff;
+    padding: 5px;
+}
+.nihilo .dijitSplitContainer-dijitContentPane,
+.nihilo .dijitBorderContainer-dijitContentPane {
+    background-color: #fff;		
+    padding: 5px;
+}
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+	border: 1px solid #d3d3d3;
+	margin: 0px;
+	padding: 0px;
+	background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+	border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0px;
+	color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+	padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+	font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+	padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+	background-color: #ffe284; 
+	color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+	width: 15px;
+	height: 15px;
+}
+.nihilo .dijitMenuExpand {
+	width:15px;
+	height:15px;
+	background-image: url(images/spriteRoundedIconsSmall.png);
+	background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+	background-image:url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitMenuSeparator {
+	height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #fff; 
+}
+.nihilo .dijitMenuSeparatorBottom {
+	border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+	background-image: url(images/spriteCheckbox.gif);
+	background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
+.nihilo .dijitTabContainer .tabStripRBtn {
+	margin-right: 21px;
+}
+.nihilo .dijitTabContainer .tabStripLBtn {
+	margin-left: 21px;
+}
+.nihilo .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
+	top: 0px;
+}
+.nihilo .dijitTabPaneWrapper {
+	background:#fff;
+	border:1px solid #ccc;
+	margin: 0;
+	padding: 0;
+}
+.nihilo .dijitTabInnerDiv {
+	padding:0px 3px 0px 0px;
+	margin: 0 0 0 4px;
+	background: url(images/tabContainerSprite.gif) no-repeat;
+	background-position: right -400px;
+}
+.nihilo .dijitTab {
+	line-height:normal;
+	margin:0 2px 0 0;	
+	padding:0px;
+	background: url(images/tabContainerSprite.gif) no-repeat 0 -300px;
+	color: #6d6d6d;
+	border-bottom: 1px #ccc solid;
+}
+.nihilo .dijitTabInnerDiv .dijitTabContent {
+	padding:3px 3px 3px 4px;
+	background: url(images/tabContainerSprite.gif) repeat-x 0 -350px;
+	position: relative;
+}
+.nihilo .dijitTabHover {
+	color: #243C5F;
+	background: url(images/tabContainerSprite.gif) no-repeat 0px -150px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -250px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabContainerSprite.gif) repeat-x 0 -200px;
+}
+.nihilo .dijitTabChecked
+{
+	
+	background: url(images/tabContainerSprite.gif) no-repeat 0px -0px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -100px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabContainerSprite.gif) repeat-x 0 -50px;
+	color: #243C5F !important;
+}
+.nihilo .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.nihilo .dijitTabContainerTabListNested {
+	background: #FDFDFD;
+	border: none;
+	margin-bottom: 0px;		
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab {
+	background: none;
+	border: none;
+	top: 0px;	
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+	background: none;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+	text-decoration: underline;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+	text-decoration: underline;
+	font-weight: bold;
+}
+.nihilo .dijitTabContainerSpacerNested {
+	
+	height: 0px;
+	border-bottom: 0px;
+}
+.nihilo .dijitTabPaneWrapperNested {
+	border: none;	
+}
+.nihilo .dijitTabCloseButton {
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px top;
+	width: 15px;
+	height: 15px;
+	margin-top: -1px;
+}
+.dj_ie6 .nihilo .dijitTabCloseButton {
+	background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px top;
+}
+.nihilo .dijitTabCloseButtonHover {
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat -60px -15px;
+}
+.dj_ie6 .nihilo .dijitTabCloseButtonHover {
+	background: url(images/spriteRoundedIconsSmall.gif) no-repeat -60px -15px;
+}
+.nihilo .dijitTab .tabLabel {
+	
+	min-height: 15px;
+	display: inline-block;
+}
+.dj_ie6 .nihilo .dijitTabButtonIcon {
+	
+	height: 18px;
+	width: 1px;
+}
+.nihilo .dijitTabContainerTop-tabs {
+	border-bottom: none;
+	padding-bottom: 1px;
+	background-position: bottom;
+	padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-top,
+.dj_ie7 .nihilo .dijitTabListContainer-top {
+	z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerTop-tabs,
+.dj_ie7 .nihilo .dijitTabContainerTop-tabs {
+	border-bottom: 1px solid #ccc;
+	padding-bottom: 0px;
+}
+.nihilo .dijitTabContainerTopNoStrip {
+	padding-top: 3px;
+}
+.nihilo .dijitTabContainerTop-container {
+	border-top: none;
+}
+.nihilo .dijitTabContainerTop-tabs .dijitTabChecked {
+	border-bottom-color: #f8f8f8;
+}
+.nihilo .dijitTabContainer .dijitTabContainerTopStrip {
+	border-bottom: none;
+	padding-top: 1px;
+	margin-top: 1px;
+	background: #f2f2f2;
+	border-top: 1px solid #CCC;
+	border-right: 1px solid #CCC;
+	border-left: 1px solid #CCC;
+}
+.nihilo .dijitTabContainerBottom-tabs {
+	border-top: none;
+	background-position: top;
+	padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-bottom,
+.dj_ie7 .nihilo .dijitTabListContainer-bottom {
+	z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerBottom-tabs,
+.dj_ie7 .nihilo .dijitTabContainerBottom-tabs {
+	border-top: 1px solid #ccc;
+	margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-container {
+	border-bottom: none;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTab {
+	border-bottom: none;
+	border-top: 1px solid #ccc;
+	background: url(images/tabBottomEnabledSpriteLR.gif) no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked {
+	border-top-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
+	padding-top: 3px;
+	padding-bottom: 3px;
+	background: url(images/tabBottomEnabledC.gif) repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+	background: url(images/tabBottomEnabledSpriteLR.gif) no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover {
+	color: #243C5F;
+	background: url(images/tabBottomHoverSpriteLR.gif) no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url(images/tabBottomHoverSpriteLR.gif) no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabBottomHoverC.gif) repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked {
+	
+	background: url(images/tabBottomActiveSpriteLR.gif) no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background: url(images/tabBottomActiveSpriteLR.gif) no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url(images/tabBottomActiveC.gif) repeat-x bottom left;
+}
+.nihilo .dijitTabContainer .dijitTabContainerBottomStrip {
+	border: 1px solid #ccc;
+	background: #f2f2f2;
+	border-top: none;
+	padding-bottom: 2px;
+}
+.nihilo .dijitTabContainerBottom-spacer,
+.nihilo .dijitTabContainerTop-spacer {
+	height: 2px;
+	border: 1px solid #ccc;
+	background: #f8f8f8;
+}
+.nihilo  .dijitTabContainerTop-spacer {
+	margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-spacer {
+	margin-bottom: -1px;
+}
+.nihilo .dijitTabContainerRight-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+}
+.nihilo .dijitTabContainerRight .dijitTabListWrapper {
+	padding-right: 3px;
+}
+.nihilo .dijitTabContainerRight-container {
+	border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+	border-bottom: none;
+	border-left: 1px solid #ccc;
+	border-bottom: 1px solid #dedede !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+	border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+	border-left-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+	background: url(images/tabRightChecked.gif) no-repeat left top !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #efefef 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+	background: url(images/tabContainerSprite.gif) no-repeat left -350px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
+	background: url(images/tabContainerSprite.gif) no-repeat left -200px;
+}
+.nihilo .dijitTabContainerRightStrip {
+	padding-right: 2px;
+	border: 1px solid #ccc;
+	border-left: none;
+	background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+}
+.nihilo .dijitTabContainerLeft-container {
+	border-left: none;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab {
+	border-right: 1px solid #ccc;
+	border-bottom: 1px solid #dedede;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked {
+	border-right: 1px solid #f8f8f8;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -350px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url(images/tabContainerSprite.gif) no-repeat right -200px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	background: url(images/tabLeftChecked.gif) no-repeat right top;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #efefef 1px;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerLeftStrip {
+	padding-left: 2px;
+	border: 1px solid #ccc;
+	border-right: none;
+}
+.nihilo .dijitTabContainerLeftStrip {
+	background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+	margin-right:auto;
+	margin-bottom:2px;	
+}
+.nihilo .dijitTabContainerLeft-spacer,
+.nihilo .dijitTabContainerRight-spacer {
+	width: 2px;
+	border: 1px solid #ccc;
+	background: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-spacer {
+	border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs {
+	padding-top: 3px;
+	height: 100%;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+	height: 100%;
+}
+.nihilo .dijitTabContainerLeft-spacer {
+	border-left: none;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+	border-left: 0px solid #ccc;
+	border-top: 0px solid #ccc;
+	border-right: 0px solid #ccc;
+	padding-top: 0px;
+	padding-left: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton {
+	margin-right: 0px;
+}
+.nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding: 5px 0 6px;
+}
+.dj_ie6 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding-bottom: 7px;
+}
+.nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding: 3px 0 5px;
+}
+.dj_ie6 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding-top: 4px;
+}
+.nihilo .dijitTabStripIcon {
+	height: 14px;
+	width: 14px;
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat left top;
+}
+.dj_ie6 .nihilo .dijitTabStripIcon {
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitTabStripSlideRightIcon {
+	background-position: -30px top;
+}
+.nihilo .dijitTabStripMenuIcon {
+	background-position: -15px top;
+}
+.nihilo .dijitTabContainerTopNone {
+	padding-top: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton-top {
+	margin-top: 1px;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom {
+	background: transparent url(images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
+	border-bottom: medium none;
+	border-top: 1px solid #CCCCCC;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
+	background: transparent url(images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
+	background: transparent;
+}
+.nihilo .dijitAccordionContainer {
+	border-color: #ccc;
+	background-color: #fff;
+}
+.nihilo .dijitAccordionTitle {
+	background:#fafafa url(images/titleBar.png) repeat-x top left;
+	border-top: 1px solid #dedede;
+	padding: 5px 4px 6px 8px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #6d6d6d;
+}
+.nihilo .dijitAccordionTitleSelected  {
+	background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
+	font-weight: bold;
+	border-top: 1px solid #dedede;
+	border-bottom: 1px solid #dedede;
+	padding: 5px 4px 5px 8px;
+	color: #243C5F;
+}
+.nihilo .dijitAccordionArrow {
+	background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+	width:15px;
+	height:15px;
+	margin-top:-1px;
+}
+.nihilo .dijitAccordionTitleSelected .dijitAccordionArrow {
+	background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+	margin-top:-1px;
+}
+.nihilo .dijitAccordionText {
+	margin-left: 4px;
+	margin-right: 4px;
+}
+.nihilo .dijitSplitContainerSizerH {
+	background:url(images/splitContainerSizerV.png) repeat-y #fff;
+	border:0;
+	border-left:0px solid #d3d3d3;
+	border-right:0px solid #d3d3d3;
+	width:5px;
+}
+.nihilo .dijitSplitContainerSizerH .thumb {
+	background:url(images/splitContainerSizerV-thumb.png) no-repeat;
+	left:1px;
+	width:2px;
+	height:19px;
+}
+.nihilo .dijitSplitContainerSizerV {
+	background:url(images/splitContainerSizerH.png) repeat-x #fff;
+	border:0;
+	border-top:0px solid #d3d3d3;
+	border-bottom:0px solid #d3d3d3;
+	height:2px;
+}
+.nihilo .dijitSplitContainerSizerV .thumb {
+	background:url(images/splitContainerSizerH-thumb.png) no-repeat;
+	top:1px;
+	width:19px;
+	height:5px;
+}
+.nihilo .dijitBorderContainer {
+	background-color: #fcfcfc;
+	padding: 5px;
+}
+.nihilo .dijitSplitContainer-child,
+.nihilo .dijitBorderContainer-child {
+	
+    border: 1px #ccc solid;
+}
+.nihilo .dijitBorderContainer-dijitTabContainerTop,
+.nihilo .dijitBorderContainer-dijitTabContainerBottom,
+.nihilo .dijitBorderContainer-dijitTabContainerLeft,
+.nihilo .dijitBorderContainer-dijitTabContainerRight {
+	
+	 border: none;
+}
+.nihilo .dijitBorderContainer-dijitBorderContainer {
+	
+	border: none;
+	padding: 0px;
+}
+.nihilo .dijitSplitterH,
+.nihilo .dijitGutterH {
+	background:#FCFCFC;
+	border:0;
+	border-left:0px solid #d3d3d3;
+	border-right:0px solid #d3d3d3;
+	height:5px;
+}
+.nihilo .dijitSplitterH .dijitSplitterThumb {
+	background:#8BA0BD none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.nihilo .dijitSplitterV,
+.nihilo .dijitGutterV {
+	background:#FCFCFC;
+	border:0;
+	border-top:0px solid #d3d3d3;
+	border-bottom:0px solid #d3d3d3;
+	width:5px;
+}
+.nihilo .dijitSplitterV .dijitSplitterThumb {
+	background:#8BA0BD none;
+	height:19px;
+	left:2px;
+	width:1px;
+}
+.nihilo .dijitSplitterActive {
+	font-size: 1px;
+	background-image: none;
+	background-color: #aaa;
+	-moz-opacity: 0.6;
+	opacity: 0.6;
+	filter: Alpha(Opacity=60);
+	margin: 0;
+}
+.nihilo .dijitInputContainer INPUT,
+.nihilo .dijitTextBox {
+	margin: 0em 0.1em;
+}
+.nihilo .dijitTextBox,
+.nihilo .dijitTextArea {
+	
+	background:#fff url(images/validationInputBg.png) repeat-x top left;
+	#background:#fff url(images/validationInputBg.gif) repeat-x top left;
+	border:1px solid #d3d3d3;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+	padding: 0 0.2em !important;
+}
+.nihilo .dijitTextBox .dijitButtonNode {
+	
+	border-color: #d3d3d3;
+}
+.nihilo .dijitTextBoxFocused,
+.nihilo .dijitTextAreaFocused {
+	
+	border-color:#b3b3b3;
+}
+.nihilo .dijitTextBoxFocused .dijitButtonNode,
+.nihilo .dijitSpinner .dijitUpArrowButtonActive,
+.nihilo .dijitSpinner .dijitDownArrowButtonActive {
+	border-left-color:#d3d3d3;
+}
+.nihilo .dijitSpinnerFocused .dijitDownArrowButton,
+.nihilo .dijitSpinner .dijitUpArrowButtonActive,
+.nihilo .dijitSpinner .dijitDownArrowButtonActive {
+	border-top-color:#d3d3d3;
+}
+.nihilo .dijitError {
+	border-color:#b3b3b3;
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.nihilo .dijitErrorFocused {
+	background-color:#ff6;
+	background-image:none;
+}
+.nihilo .dijitValidationIcon {
+	
+	width: 16px;
+	background: transparent url(images/warning.png) no-repeat center center;
+}
+.nihilo .dijitComboBoxHighlightMatch {
+	background-color:#d3d3d3;
+}
+.nihilo .dijitButtonNode {
+	
+	
+	border:1px solid #dedede;
+	border-bottom:1px solid #dedede;
+	padding: 0.1em 0.2em 0.2em 0.2em;
+	background: #fff url(images/buttonEnabled.png) repeat-x top left;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+	border-right: none;
+}
+.nihilo .dijitButtonText {
+	text-align: center;
+	padding: 0 0.3em;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.nihilo .dijitArrowButton {
+	color: #111;
+}
+.nihilo .dijitComboButton .dijitDownArrowButton {
+	padding-right:4px;
+}
+.nihilo .dijitComboBoxReadOnly,
+.nihilo .dijitSpinnerReadOnly,
+.nihilo .dijitSpinnerReadOnly .dijitButtonNode,
+.nihilo .dijitButtonDisabled .dijitButtonNode,
+.nihilo .dijitToggleButtonDisabled .dijitButtonNode,
+.nihilo .dijitDropDownButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboBoxDisabled,
+.nihilo .dijitSpinnerDisabled,
+.nihilo .dijitSpinnerDisabled .dijitButtonNode {
+	
+	border-color: #dedede;
+	background:#fafafa url(images/buttonDisabled.png) top repeat-x;
+	opacity: 0.60;
+}
+.dj_ie6 .nihilo .dijitReadOnly INPUT,
+.dj_ie7 .nihilo .dijitReadOnly INPUT,
+.dj_ie6 .nihilo .dijitComboButtonDisabled .dijitButtonText,
+.dj_ie7 .nihilo .dijitComboButtonDisabled .dijitButtonText {
+	
+	color: #aaa;
+}
+.nihilo .dijitButtonHover .dijitButtonNode,
+.nihilo .dijitButtonNodeHover,
+.nihilo .dijitToggleButtonHover .dijitButtonNode,
+.nihilo .dijitDropDownButtonHover .dijitButtonNode,
+.nihilo .dijitButtonContentsHover,
+.nihilo .dijitDownArrowButtonHover,
+.nihilo .dijitUpArrowButtonHover {
+	
+	
+	color:#243C5F;
+	background:#fcfcfc url(images/buttonHover.png) repeat-x top left;
+}
+.nihilo .dijitUpArrowButtonActive,
+.nihilo .dijitDownArrowButtonActive,
+.nihilo .dijitButtonActive .dijitButtonNode,
+.nihilo .dijitToggleButtonActive .dijitButtonNode,
+.nihilo .dijitDropDownButtonActive .dijitButtonNode,
+.nihilo .dijitComboButton .dijitButtonContentsActive,
+.nihilo .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+	
+	border-color:#dedede;
+	background: #f5f5f5 url(images/buttonActive.png) top left repeat-x;
+}
+.nihilo .dijitArrowButtonInner {
+	background-image: url(images/spriteArrows.png);
+	background-repeat: no-repeat;
+	background-position: 0px center;
+	width: 11px;
+	height: 11px;
+}
+.nihilo .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -11px center;
+}
+.nihilo .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -22px center;
+}
+.nihilo .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -33px center;
+}
+.dj_ie6 .nihilo .dijitArrowButtonInner {
+	background-image: url(images/spriteArrows.gif);
+}
+.dj_webkit .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: -1px; 
+}
+.dj_ie .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: 1px; 
+}
+.nihilo .dijitSpinnerButtonContainer {
+	width: auto;
+	padding: 0;
+}
+.nihilo .dijitSpinner .dijitArrowButton {
+	width: 15px;
+}
+.nihilo .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.nihilo .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
+.nihilo .dijitToggleButton .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url(images/spriteCheckbox.gif);
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitCheckBoxIcon {		
+	background-image: url(images/spriteCheckbox.gif); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -16px;
+}
+.nihilo .dijitCheckBoxChecked,
+.nihilo .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: 0px;
+}
+.nihilo .dijitCheckBoxDisabled {
+	
+	background-position: -48px;
+}
+.nihilo .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -32px;
+}
+.nihilo .dijitCheckBoxHover {
+	
+	background-position: -80px;
+}
+.nihilo .dijitCheckBoxCheckedHover {
+	
+	background-position: -64px;
+}
+.nihilo .dijitToggleButton .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+	background-image: url(images/spriteRadio.gif);
+}
+.nihilo .dijitRadio,
+.nihilo .dijitRadioIcon	{		
+	background-image: url(images/spriteRadio.gif); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.nihilo .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+	
+	background-position: -16px;
+}
+.nihilo .dijitRadioChecked,
+.nihilo .dijitToggleButtonChecked .dijitRadioIcon {
+	
+	background-position: 0px;
+}
+.nihilo .dijitRadioDisabled {
+	
+	background-position: -48px;
+}
+.nihilo .dijitRadioCheckedDisabled {
+	
+	background-position: -32px;
+}
+.nihilo .dijitRadioHover {
+	
+	background-position: -80px;
+}
+.nihilo .dijitRadioCheckedHover {
+	
+	background-position: -64px;
+}
+.nihilo .dijitSliderProgressBarH {
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.nihilo .dijitSliderProgressBarV {
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarH,
+.nihilo .dijitSliderFocused .dijitSliderLeftBumper {
+	background-image:url(images/sliderFullFocus.png);
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarV,
+.nihilo .dijitSliderFocused .dijitSliderBottomBumper {
+	background-image:url(images/sliderFullVerticalFocus.png);
+}
+.nihilo .dijitSliderRemainingBarV {
+	border-color: #b4b4b4;
+	background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y bottom left;
+}
+.nihilo .dijitSliderRemainingBarH {
+	border-color: #b4b4b4;
+	background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+}
+.nihilo .dijitSliderBar {
+	border-style: solid;
+	outline:1px;
+	
+}
+.nihilo .dijitSliderFocused .dijitSliderBar {
+	border-color:#727272;
+}
+.nihilo .dijitSliderImageHandleH {
+	border:0px;
+	width:15px;
+	height:18px;
+	background:url(images/preciseSliderThumb.png) no-repeat center top;
+	#background:url(images/preciseSliderThumb.gif) no-repeat center top;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleH {
+	background-image:url(images/preciseSliderThumbFocus.png);
+	#background-image:url(images/preciseSliderThumbFocus.gif);
+}
+.nihilo .dijitSliderLeftBumper {
+	border-left-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFull.png) repeat-x top left;
+}
+.nihilo .dijitSliderRightBumper {
+	background: #dcdcdc url(images/sliderEmpty.png) repeat-x top left;
+	border-color: #b4b4b4;
+	border-right-width: 1px;
+}
+.nihilo .dijitSliderImageHandleV {
+	border:0px;
+	width:20px;
+	height:15px;
+	background:url(images/sliderThumb.png) no-repeat center center;
+	#background:url(images/sliderThumb.gif) no-repeat center center;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url(images/sliderThumbFocus.png);
+	#background-image:url(images/sliderThumbFocus.gif);
+}
+.nihilo .dijitSliderBottomBumper {
+	border-bottom-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url(images/sliderFullVertical.png) repeat-y bottom left;
+}
+.nihilo .dijitSliderTopBumper {
+	background: #dcdcdc url(images/sliderEmptyVertical.png) repeat-y top left;
+	border-color: #b4b4b4;
+	border-top-width: 1px;
+}
+.nihilo .dijitSliderIncrementIconH,
+.nihilo .dijitSliderIncrementIconV {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -45px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -45px top;
+	width:15px; height:15px;
+}
+.nihilo .dijitSliderIncrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.nihilo .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDecrementIconV {
+	width:15px;
+	height:15px;
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -15px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+}
+.nihilo .dijitSliderDecrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat 0px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat 0px top;
+}
+.nihilo .dijitSliderButtonInner {
+	visibility:hidden;
+}
+.nihilo .dijitSliderReadOnly *,
+.nihilo .dijitSliderDisabled * {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	color: #bdbdbd;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position: 0px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position: -30px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position: -15px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position: -45px -15px;
+}
+.nihilo .dijitSelect .dijitButtonNode {
+	padding: 0px;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+	padding-top: 1px;
+    background:#fff url(images/validationInputBg.png) repeat-x top left;
+    #background:#fff url(images/validationInputBg.gif) repeat-x top left;
+}
+.nihilo .dijitSelectHover .dijitButtonContents,
+.nihilo .dijitSelectActive .dijitButtonContents,
+.nihilo .dijitSelectOpened .dijitButtonContents,
+.nihilo .dijitSelectDisabled .dijitButtonContents,
+.nihilo .dijitSelectReadOnly .dijitButtonContents{
+	background: transparent none;
+}
+.dj_ie .nihilo .dijitSelect .dijitButtonContents {
+	padding-top: 0px;
+}
+.nihilo .dijitSelect .dijitArrowButton {
+	padding: 0px 2px;
+}
+.nihilo .dijitSelectDisabled .dijitButtonNode {
+    border-color: #dedede;
+    background:#fafafa url(images/buttonDisabled.png) top repeat-x;
+}
+.dj_ie .nihilo .dijitSelectDisabled  .dijitButtonNode * {
+	filter: gray() alpha(opacity=50);
+}
+.nihilo .dijitSelectHover .dijitButtonNode {
+    color:#000;
+    background:#fcfcfc url(images/buttonHover.png) repeat-x top left;
+}
+.nihilo .dijitSelectActive .dijitButtonNode,
+.nihilo .dijitSelectOpened .dijitButtonNode {
+    border-color:#dedede;
+    background: #f5f5f5 url(images/buttonActive.png) top left repeat-x;
+}
+.nihilo .dijitSelectMenu td {
+	padding: 0em;
+}
+.nihilo .dijitSelectMenu .dijitMenuItemLabel,
+.nihilo .dijitSelectMenu .dijitMenuArrowCell {
+	padding: 0.1em 0.2em;
+}
+.nihilo .dijitTreeNode {
+    background : url(images/treeI.gif) no-repeat;
+    background-position : top left;
+    background-repeat : repeat-y;
+    zoom: 1;	
+}
+.nihilo .dijitTreeIsLast {
+    background: url(images/treeI_half.gif) no-repeat;
+}
+.nihilo .dijitTreeRowHover {
+	
+	background-image: url(images/treeHover.png);
+	background-repeat: repeat;
+	background-color: transparent !important;
+}
+.nihilo .dijitTreeLabel {
+	font-weight: normal;
+	margin-left: 3px;
+}
+.nihilo .dijitTreeIsRoot {
+    margin-left: 0;
+    background-image: none;
+}
+.nihilo .dijitTreeExpando {
+    width: 18px;
+    height: 18px;
+}
+.nihilo .dijitTreeRow {
+	
+	padding-bottom: 2px;
+}
+.nihilo .dijitTreeContent {
+    min-height: 18px;
+    min-width: 18px;
+    padding-left:1px;
+}
+.nihilo .dijitTreeExpandoOpened {
+	background: url(images/spriteTree.gif) no-repeat -18px top;
+}
+.nihilo .dijitTreeExpandoClosed {
+	background-image: url(images/spriteTree.gif);
+}
+.nihilo .dijitTreeExpandoLeaf {
+	background: url(images/spriteTree.gif) no-repeat -36px top;
+}
+.nihilo .dijitTreeExpandoLoading {
+	background-image: url(images/treeExpand_loading.gif);
+}
+.nihilo .dijitTreeIcon {
+	width: 16px;
+	height: 16px;
+}
+.nihilo .dijitFolderOpened {
+	background: url(images/spriteDivIcons.gif) no-repeat -16px top;
+}
+.nihilo .dijitFolderClosed {
+	background: url(images/spriteDivIcons.gif) no-repeat top left;
+}
+.nihilo .dijitLeaf {
+	background: url(images/spriteDivIcons.gif) no-repeat -32px top;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore,
+.nihilo .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	
+	border-top: 2px solid #369;
+}
+.nihilo .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	
+	border-bottom: 2px solid #369;
+}
+.nihilo .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.nihilo .dijitProgressBarEmpty{
+	
+	background:#fff url(images/progressBarEmpty.png) repeat-x center center;
+	border-color: #f8d582 #f8d582 #f8d582 #f8d582;
+}
+.nihilo .dijitProgressBarTile{
+	
+	background:#f0f0f0 url(images/progressBarFull.png) repeat-x center center;
+}
+.nihilo .dijitProgressBarFull {
+	border-right:1px solid #f8d582;
+}
+.nihilo .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.nihilo .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url(images/progressBarAnim.gif) repeat-x center center;
+}
+.nihilo .dijitTitlePaneTitle {
+	background: #cccccc;
+	background:#fff url(images/titleBar.png) repeat-x top left;
+	border:1px solid #bfbfbf;
+	padding:3px 4px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #6d6d6d;
+}
+.nihilo .dijitTitlePaneTitleHover  {
+	background: #f9f9f9 url(images/accordionItemActive.png) top repeat-x;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode,
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	width:15px;
+	height:15px;
+}
+.nihilo .dijitTitlePaneTextNode {
+	color: #243C5F;
+}
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background: url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -15px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url(images/spriteRoundedIconsSmall.gif) no-repeat -15px top;
+}
+.nihilo .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border:1px solid #bfbfbf;
+	border-top: 0px;
+}
+.nihilo .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.nihilo .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+}
+.nihilo .dijitCalendarIncrementControl {
+	
+	width:15px;
+	height:15px;
+	background-image: url(images/spriteRoundedIconsSmall.png);
+	background-repeat: no-repeat
+}
+.dj_ie6 .nihilo .dijitCalendarIncrementControl {
+	font-size:.1em;
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitA11ySideArrow {
+	display: none;
+}
+.nihilo .dijitCalendarDecrease {
+	background-position: top left;
+}
+.nihilo .dijitCalendarIncrease {
+	background-position: -30px top;
+}
+.nihilo table.dijitCalendarContainer {
+	font-size: 100%;
+	border-spacing: 0;
+	border-collapse: separate;
+	border: 1px solid #ccc;
+	margin: 0;
+}
+.nihilo .dijitCalendarMonthContainer th {
+	
+	background:#d3d3d3 url(images/titleBar.png) repeat-x top;
+	padding-top:.3em;
+	padding-bottom:.2em;
+	text-align:center;
+}
+.dj_ie6 .nihilo .dijitCalendarMonthContainer th {
+	padding-top:.2em;
+	padding-bottom:.1em;
+}
+.nihilo .dijitCalendarDayLabelTemplate {
+	
+	background:#fefefe;
+	font-weight:normal;
+	padding-top:.15em;
+	padding-bottom:.2em;
+	border-bottom: 1px solid #eeeeee;
+	color:#293a4b;
+	text-align:center;
+}
+.nihilo .dijitCalendarBodyContainer {
+	border-bottom: 1px solid #eeeeee;
+}
+.nihilo .dijitCalendarMonthLabel {
+	color:#293a4b;
+	font-weight: bold;
+}
+.nihilo .dijitCalendarDateTemplate {
+	
+	font-size: 0.9em;
+	font-weight: bold;
+	text-align: center;
+	padding: 0.3em 0.3em 0.05em 0.3em;
+	letter-spacing: 1px;
+	background-color: #fdfdfd;
+	border:#fdfdfd solid 1px !important;
+}
+.dj_ie .nihilo .dijitCalendarDateTemplate {
+	padding: 0.1em .33em 0.02em .33em;
+}
+.nihilo .dijitCalendarPreviousMonth,
+.nihilo .dijitCalendarNextMonth 		{
+	
+	color:#999999;
+	background-color:#f5f5f5 !important;
+	border:#f5f5f5 solid 1px !important;
+}
+.nihilo .dijitCalendarCurrentMonth {
+	
+}
+.nihilo .dijitCalendarDisabledDate {
+	text-decoration:line-through !important;
+}
+.nihilo .dijitCalendarCurrentDate {
+	
+	text-decoration:underline;
+	font-weight:bold;
+}
+.nihilo .dijitCalendarSelectedDate {
+	
+	background-color:#ffe284 !important;
+	color:black !important;
+	border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarYearContainer {
+	
+	background:white url(images/titleBar.png) repeat-x top;
+}
+.nihilo .dijitCalendarYearLabel {
+	
+	margin:0;
+	padding:0.4em 0 0.25em 0;
+	text-align:center;
+}
+.nihilo .dijitCalendarSelectedYear {
+	
+	color:black;
+	padding:0.2em;
+	padding-bottom:0.1em;
+	background-color:#ffe284 !important;
+	border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarNextYear,
+.nihilo .dijitCalendarPreviousYear {
+	
+	color:black !important;
+	font-weight:normal;
+}
+.nihilo .dijitTimePickerTick,
+.nihilo .dijitTimePickerMarker {
+	border-color: #eeeeee;
+}
+.nihilo .dijitTimePickerTick {
+	color:white;
+}
+.nihilo .dijitTimePickerMarker {
+	background:#d3d3d3 url(images/titleBar.png) repeat-x top;
+	color:#293a4b;
+	font-weight: bold;
+}
+.nihilo .dijitTimePickerItemSelected {
+	color: black;
+	background: #ffe284 none;
+}
+.nihilo .dijitTimePickerItemHover {
+	background: #d6d6dd none;
+	color:black;
+}
+.nihilo .dijitTimePickerItemHover,
+.nihilo .dijitTimePickerItemSelected {
+	position: relative;
+	z-index: 10;
+}
+.nihilo .dijitTimePickerTick .dijitTimePickerItemInner {
+	font-size:0.4em;
+}
+.nihilo .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.nihilo .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	font-size:1em;
+}
+.nihilo .dijitTimePickerMarkerHover {
+	border-top: 1px solid #eeeeee;
+}
+.nihilo .dijitTimePickerTickHover,
+.nihilo .dijitTimePickerTickSelected {
+	margin-top:-0.3em;
+	margin-bottom:-0.3em;
+	border-bottom: none;
+}
+.nihilo .dijitToolbar {
+	border-bottom: 1px solid #ccc;
+	background:#eaeaea url(images/titleBar.png) repeat-x top left;
+}
+.dj_ie6 .nihilo .dijitToolbar {
+	height: 10px;
+}
+.nihilo .dijitToolbar .dijitButtonNode,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	margin: 0px;
+	padding: 0px;
+	border: none;
+	font-size: 12px;
+}
+.nihilo .dijitToolbar .dijitButton,
+.nihilo .dijitToolbar .dijitToggleButton,
+.nihilo .dijitToolbar .dijitDropDownButton,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	padding: 1px;	
+}
+.nihilo .dijitToolbar .dijitButtonChecked,
+.nihilo .dijitToolbar .dijitToggleButtonChecked {
+	background-color:#ffeeb9;
+	border:1px solid #f7c95c;
+	padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonCheckedHover,
+.nihilo .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+	background-color:#ffe284;
+	border:1px solid #f7c95c;
+	padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonHover,
+.nihilo .dijitToolbar .dijitToggleButtonHover,
+.nihilo .dijitToolbar .dijitDropDownButtonHover,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
+	
+	border: 1px solid #f7c95c;
+	padding: 0;
+	background-color:#ffe284;
+}
+.nihilo .dijitToolbar label {
+	padding: 3px 3px 0 6px;
+}
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+	
+	border: 1px #555 dotted !important;
+	padding: 0px;
+}
+.nihilo .dijitDialog {
+	background: #eee;
+	border: 1px solid #d3d3d3;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+	padding: 0px;
+}
+.nihilo .dijitDialog .dijitDialogTitle {
+	
+	font-size: 0.9em;
+	color: #3243C5F;
+	font-weight: bold;
+	padding: 0px 4px;
+}
+.nihilo .dijitDialog .dijitDialogPaneContent {
+	background: #ffffff;
+	border-top: 1px solid #d3d3d3;
+	padding:10px;
+}
+.nihilo .dijitDialogTitleBar {
+	
+	background: #fafafa url(images/titleBar.png) repeat-x top left;
+	padding: 5px 6px 3px 6px;
+	outline:0; 
+}
+.nihilo .dijitDialogCloseIcon {
+	
+	background-image: url(images/spriteRoundedIconsSmall.png);
+	background-repeat: no-repeat;
+	background-position: -60px 0px;
+	position: absolute;
+	vertical-align: middle;
+	right: 6px;
+	top: 4px;
+	height: 15px;
+	width: 15px;
+}
+.dj_ie6 .nihilo .dijitDialogCloseIcon {
+	background-image: url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitDialogCloseIconHover {
+	background-position: -60px -15px;
+}
+.nihilo .dijitTooltip,
+.nihilo .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 10px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 10px;
+}
+.nihilo .dijitTooltipContainer {
+	
+	background-color: #fff;
+	border:1px solid #d3d3d3;
+	padding:0.45em;
+}
+.nihilo .dijitTooltipConnector {
+	
+	border:0px;
+	z-index: 2;
+}
+.nihilo .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 6px;
+}
+.nihilo .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 6px;
+	background:url(images/tooltipConnectorUp.png) no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .nihilo .dijitTooltipBelow .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorUp.gif);
+}
+.nihilo .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 6px;
+	background:url(images/tooltipConnectorDown.png) no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorDown.gif);
+}
+.dj_ie6 .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -5px;
+}
+.nihilo .dijitTooltipLeft {
+	padding-right: 10px;
+}
+.dj_ie6 .nihilo .dijitTooltipLeft {
+	padding-left: 11px;
+}
+.nihilo .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background:url(images/tooltipConnectorRight.png) no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .nihilo .dijitTooltipLeft .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorRight.gif);
+}
+.nihilo .dijitTooltipRight {
+	padding-left: 10px;
+}
+.nihilo .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background:url(images/tooltipConnectorLeft.png) no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .nihilo .dijitTooltipRight .dijitTooltipConnector {
+	background-image: url(images/tooltipConnectorLeft.gif);
+}
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+	border: 1px solid #d3d3d3;
+	margin: 0px;
+	padding: 0px;
+	background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+	border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0px;
+	color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+	padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+	font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+	padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+	background-color: #ffe284; 
+	color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+	width: 15px;
+	height: 15px;
+}
+.nihilo .dijitMenuExpand {
+	width:15px;
+	height:15px;
+	background-image: url(images/spriteRoundedIconsSmall.png);
+	background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+	background-image:url(images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitMenuSeparator {
+	height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #fff; 
+}
+.nihilo .dijitMenuSeparatorBottom {
+	border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+	background-image: url(images/spriteCheckbox.gif);
+	background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
+.nihilo .dijitToolbar .dijitToolbarSeparator {
+	background: url(../../icons/images/editorIconsEnabled.png); 
+}
+.nihilo .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled.png); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.nihilo .dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled.png); 
+}
+.dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled.png); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled.png); 
+}
+.dijitEditorIconSep { background-position: 0px; }
+.dijitEditorIconSave { background-position: -18px; }
+.dijitEditorIconPrint { background-position: -36px; }
+.dijitEditorIconCut { background-position: -54px; }
+.dijitEditorIconCopy { background-position: -72px; }
+.dijitEditorIconPaste { background-position: -90px; }
+.dijitEditorIconDelete { background-position: -108px; }
+.dijitEditorIconCancel { background-position: -126px; }
+.dijitEditorIconUndo { background-position: -144px; }
+.dijitEditorIconRedo { background-position: -162px; }
+.dijitEditorIconSelectAll { background-position: -180px; }
+.dijitEditorIconBold { background-position: -198px; }
+.dijitEditorIconItalic { background-position: -216px; }
+.dijitEditorIconUnderline { background-position: -234px; }
+.dijitEditorIconStrikethrough { background-position: -252px; }
+.dijitEditorIconSuperscript { background-position: -270px; }
+.dijitEditorIconSubscript { background-position: -288px; }
+.dijitEditorIconJustifyCenter { background-position: -306px; }
+.dijitEditorIconJustifyFull { background-position: -324px; }
+.dijitEditorIconJustifyLeft { background-position: -342px; }
+.dijitEditorIconJustifyRight { background-position: -360px; }
+.dijitEditorIconIndent { background-position: -378px; }
+.dijitEditorIconOutdent { background-position: -396px; }
+.dijitEditorIconListBulletIndent { background-position: -414px; }
+.dijitEditorIconListBulletOutdent { background-position: -432px; }
+.dijitEditorIconListNumIndent { background-position: -450px; }
+.dijitEditorIconListNumOutdent { background-position: -468px; }
+.dijitEditorIconTabIndent { background-position: -486px; }
+.dijitEditorIconLeftToRight { background-position: -504px; }
+.dijitEditorIconRightToLeft, .dijitEditorIconToggleDir { background-position: -522px; }
+.dijitEditorIconBackColor { background-position: -540px; }
+.dijitEditorIconForeColor { background-position: -558px; }
+.dijitEditorIconHiliteColor { background-position: -576px; }
+.dijitEditorIconNewPage { background-position: -594px; }
+.dijitEditorIconInsertImage { background-position: -612px; }
+.dijitEditorIconInsertTable { background-position: -630px; }
+.dijitEditorIconSpace { background-position: -648px; }
+.dijitEditorIconInsertHorizontalRule { background-position: -666px; }
+.dijitEditorIconInsertOrderedList { background-position: -684px; }
+.dijitEditorIconInsertUnorderedList { background-position: -702px; }
+.dijitEditorIconCreateLink { background-position: -720px; }
+.dijitEditorIconUnlink { background-position: -738px; }
+.dijitEditorIconViewSource { background-position: -756px; }
+.dijitEditorIconRemoveFormat { background-position: -774px; }
+.dijitEditorIconFullScreen { background-position: -792px; }
+.dijitEditorIconWikiword { background-position: -810px; }
+ 
+.dijitColorPalette {
+	border:1px solid #d3d3d3;
+	background:#fff;
+	-moz-border-radius: 0px !important;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/TitlePane.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/TitlePane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/TitlePane.css	(revision 9)
@@ -0,0 +1,45 @@
+
+.nihilo .dijitTitlePaneTitle {
+	background: #cccccc;
+	background:#fff url("images/titleBar.png") repeat-x top left;
+	border:1px solid #bfbfbf;
+	padding:3px 4px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #6d6d6d;
+}
+.nihilo .dijitTitlePaneTitleHover  {
+	background: #f9f9f9 url("images/accordionItemActive.png") top repeat-x;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode,
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	width:15px;
+	height:15px;
+}
+.nihilo .dijitTitlePaneTextNode {
+	color: #243C5F;
+}
+.nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background: url('images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url('images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+}
+.dj_ie6 .nihilo .dijitTitlePane .dijitOpen .dijitArrowNode {
+	background:url('images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.nihilo .dijitTitlePaneContentOuter {
+	background: #ffffff;
+	border:1px solid #bfbfbf;
+	border-top: 0px;
+}
+.nihilo .dijitTitlePaneContentInner {
+	padding:10px;
+}
+.nihilo .dijitTitlePaneTextNode {
+	margin-left: 4px;
+	margin-right: 4px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Menu_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Menu_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Menu_rtl.css	(revision 9)
@@ -0,0 +1,8 @@
+
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuItemIcon {
+	padding-left: 3px;
+	padding-right: 0px;
+}
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuExpand {
+	background-position: 0px top;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Editor.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Editor.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Editor.css	(revision 9)
@@ -0,0 +1,13 @@
+.nihilo .dijitToolbar .dijitToolbarSeparator {
+	background: url('../../icons/images/editorIconsEnabled.png'); 
+}
+.nihilo .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsEnabled.png'); 
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.nihilo .dijitDisabled .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsDisabled.png'); 
+}
Index: trunk/web/dojo/dijit/themes/nihilo/layout/AccordionContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/layout/AccordionContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/layout/AccordionContainer.css	(revision 9)
@@ -0,0 +1,35 @@
+
+.nihilo .dijitAccordionContainer {
+	border-color: #ccc;
+	background-color: #fff;
+}
+.nihilo .dijitAccordionTitle {
+	background:#fafafa url("../images/titleBar.png") repeat-x top left;
+	border-top: 1px solid #dedede;
+	padding: 5px 4px 6px 8px;
+	font-size: 0.9em;
+	font-weight: bold;
+	color: #6d6d6d;
+}
+.nihilo .dijitAccordionTitleSelected  {
+	background: #f9f9f9 url("../images/accordionItemActive.png") top repeat-x;
+	font-weight: bold;
+	border-top: 1px solid #dedede;
+	border-bottom: 1px solid #dedede;
+	padding: 5px 4px 5px 8px;
+	color: #243C5F;
+}
+.nihilo .dijitAccordionArrow {
+	background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -30px top;
+	width:15px;
+	height:15px;
+	margin-top:-1px;
+}
+.nihilo .dijitAccordionTitleSelected .dijitAccordionArrow {
+	background:url("../images/spriteRoundedIconsSmall.gif") no-repeat -15px top;
+	margin-top:-1px;
+}
+.nihilo .dijitAccordionText {
+	margin-left: 4px;
+	margin-right: 4px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+.dijitRtl .nihilo .dijitAccordionArrow {
+	background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitAccordionTitleSelected .dijitAccordionArrow {
+	
+	background-position: -15px top;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/layout/TabContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/layout/TabContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/layout/TabContainer.css	(revision 9)
@@ -0,0 +1,439 @@
+
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+	border: 1px solid #d3d3d3;
+	margin: 0px;
+	padding: 0px;
+	background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+	border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0px;
+	color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+	padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+	font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+	padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+	background-color: #ffe284; 
+	color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+	width: 15px;
+	height: 15px;
+}
+.nihilo .dijitMenuExpand {
+	width:15px;
+	height:15px;
+	background-image: url(../images/spriteRoundedIconsSmall.png);
+	background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+	background-image:url(../images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitMenuSeparator {
+	height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #fff; 
+}
+.nihilo .dijitMenuSeparatorBottom {
+	border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+	background-image: url(../images/spriteCheckbox.gif);
+	background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
+.nihilo .dijitTabContainer .tabStripRBtn {
+	margin-right: 21px;
+}
+.nihilo .dijitTabContainer .tabStripLBtn {
+	margin-left: 21px;
+}
+.nihilo .dijitTabContainerBottom .nowrapTabStrip .dijitTab {
+	top: 0px;
+}
+.nihilo .dijitTabPaneWrapper {
+	background:#fff;
+	border:1px solid #ccc;
+	margin: 0;
+	padding: 0;
+}
+.nihilo .dijitTabInnerDiv {
+	padding:0px 3px 0px 0px;
+	margin: 0 0 0 4px;
+	background: url("../images/tabContainerSprite.gif") no-repeat;
+	background-position: right -400px;
+}
+.nihilo .dijitTab {
+	line-height:normal;
+	margin:0 2px 0 0;	
+	padding:0px;
+	background: url("../images/tabContainerSprite.gif") no-repeat 0 -300px;
+	color: #6d6d6d;
+	border-bottom: 1px #ccc solid;
+}
+.nihilo .dijitTabInnerDiv .dijitTabContent {
+	padding:3px 3px 3px 4px;
+	background: url("../images/tabContainerSprite.gif") repeat-x 0 -350px;
+	position: relative;
+}
+.nihilo .dijitTabHover {
+	color: #243C5F;
+	background: url("../images/tabContainerSprite.gif") no-repeat 0px -150px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -250px;
+}
+.nihilo .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabContainerSprite.gif") repeat-x 0 -200px;
+}
+.nihilo .dijitTabChecked
+{
+	
+	background: url("../images/tabContainerSprite.gif") no-repeat 0px -0px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -100px;
+}
+.nihilo .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabContainerSprite.gif") repeat-x 0 -50px;
+	color: #243C5F !important;
+}
+.nihilo .dijitTabContainerNested .dijitTabListWrapper {
+	height: auto;
+}
+.nihilo .dijitTabContainerTabListNested {
+	background: #FDFDFD;
+	border: none;
+	margin-bottom: 0px;		
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab {
+	background: none;
+	border: none;
+	top: 0px;	
+}
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabInnerDiv,
+.nihilo .dijitTabContainerTabListNested .dijitTab .dijitTabContent {
+	background: none;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {
+	text-decoration: underline;
+}
+.nihilo .dijitTabContainerTabListNested .dijitTabChecked .tabLabel {
+	text-decoration: underline;
+	font-weight: bold;
+}
+.nihilo .dijitTabContainerSpacerNested {
+	
+	height: 0px;
+	border-bottom: 0px;
+}
+.nihilo .dijitTabPaneWrapperNested {
+	border: none;	
+}
+.nihilo .dijitTabCloseButton {
+	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px top;
+	width: 15px;
+	height: 15px;
+	margin-top: -1px;
+}
+.dj_ie6 .nihilo .dijitTabCloseButton {
+	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px top;
+}
+.nihilo .dijitTabCloseButtonHover {
+	background: url("../images/spriteRoundedIconsSmall.png") no-repeat -60px -15px;
+}
+.dj_ie6 .nihilo .dijitTabCloseButtonHover {
+	background: url("../images/spriteRoundedIconsSmall.gif") no-repeat -60px -15px;
+}
+.nihilo .dijitTab .tabLabel {
+	
+	min-height: 15px;
+	display: inline-block;
+}
+.dj_ie6 .nihilo .dijitTabButtonIcon {
+	
+	height: 18px;
+	width: 1px;
+}
+.nihilo .dijitTabContainerTop-tabs {
+	border-bottom: none;
+	padding-bottom: 1px;
+	background-position: bottom;
+	padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-top,
+.dj_ie7 .nihilo .dijitTabListContainer-top {
+	z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerTop-tabs,
+.dj_ie7 .nihilo .dijitTabContainerTop-tabs {
+	border-bottom: 1px solid #ccc;
+	padding-bottom: 0px;
+}
+.nihilo .dijitTabContainerTopNoStrip {
+	padding-top: 3px;
+}
+.nihilo .dijitTabContainerTop-container {
+	border-top: none;
+}
+.nihilo .dijitTabContainerTop-tabs .dijitTabChecked {
+	border-bottom-color: #f8f8f8;
+}
+.nihilo .dijitTabContainer .dijitTabContainerTopStrip {
+	border-bottom: none;
+	padding-top: 1px;
+	margin-top: 1px;
+	background: #f2f2f2;
+	border-top: 1px solid #CCC;
+	border-right: 1px solid #CCC;
+	border-left: 1px solid #CCC;
+}
+.nihilo .dijitTabContainerBottom-tabs {
+	border-top: none;
+	background-position: top;
+	padding-left: 3px;
+}
+.dj_ie6 .nihilo .dijitTabListContainer-bottom,
+.dj_ie7 .nihilo .dijitTabListContainer-bottom {
+	z-index: 3;
+}
+.dj_ie6 .nihilo .dijitTabContainerBottom-tabs,
+.dj_ie7 .nihilo .dijitTabContainerBottom-tabs {
+	border-top: 1px solid #ccc;
+	margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-container {
+	border-bottom: none;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTab {
+	border-bottom: none;
+	border-top: 1px solid #ccc;
+	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked {
+	border-top-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv .dijitTabContent {
+	padding-top: 3px;
+	padding-bottom: 3px;
+	background: url("../images/tabBottomEnabledC.gif") repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabInnerDiv {
+	background: url("../images/tabBottomEnabledSpriteLR.gif") no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover {
+	color: #243C5F;
+	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url("../images/tabBottomHoverSpriteLR.gif") no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabHover .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabBottomHoverC.gif") repeat-x bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked {
+	
+	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom left;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv {
+	background: url("../images/tabBottomActiveSpriteLR.gif") no-repeat bottom right;
+}
+.nihilo .dijitTabContainerBottom-tabs .dijitTabChecked .dijitTabInnerDiv .dijitTabContent {
+	background: url("../images/tabBottomActiveC.gif") repeat-x bottom left;
+}
+.nihilo .dijitTabContainer .dijitTabContainerBottomStrip {
+	border: 1px solid #ccc;
+	background: #f2f2f2;
+	border-top: none;
+	padding-bottom: 2px;
+}
+.nihilo .dijitTabContainerBottom-spacer,
+.nihilo .dijitTabContainerTop-spacer {
+	height: 2px;
+	border: 1px solid #ccc;
+	background: #f8f8f8;
+}
+.nihilo  .dijitTabContainerTop-spacer {
+	margin-top: -1px;
+}
+.nihilo .dijitTabContainerBottom-spacer {
+	margin-bottom: -1px;
+}
+.nihilo .dijitTabContainerRight-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+}
+.nihilo .dijitTabContainerRight .dijitTabListWrapper {
+	padding-right: 3px;
+}
+.nihilo .dijitTabContainerRight-container {
+	border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+	border-bottom: none;
+	border-left: 1px solid #ccc;
+	border-bottom: 1px solid #dedede !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabInnerDiv {
+	border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+	border-left-color: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabChecked {
+	background: url("../images/tabRightChecked.gif") no-repeat left top !important;
+}
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerRight-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #efefef 1px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+	background: url("../images/tabContainerSprite.gif") no-repeat left -350px;
+}
+.nihilo .dijitTabContainerRight-tabs .dijitTabHover .dijitTab {
+	background: url("../images/tabContainerSprite.gif") no-repeat left -200px;
+}
+.nihilo .dijitTabContainerRightStrip {
+	padding-right: 2px;
+	border: 1px solid #ccc;
+	border-left: none;
+	background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+	border-color: #ccc;
+	padding-top: 3px;
+}
+.nihilo .dijitTabContainerLeft-container {
+	border-left: none;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab {
+	border-right: 1px solid #ccc;
+	border-bottom: 1px solid #dedede;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked {
+	border-right: 1px solid #f8f8f8;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -350px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabHover .dijitTabInnerDiv {
+	background: url("../images/tabContainerSprite.gif") no-repeat right -200px;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	background: url("../images/tabLeftChecked.gif") no-repeat right top;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabChecked .dijitTabInnerDiv,
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabCheckedHover .dijitTabInnerDiv {
+	border-bottom: solid #efefef 1px;
+}
+.dj_ie .nihilo .dijitTabContainerLeft-tabs .dijitTabInnerDiv {
+	border-bottom: solid #fff 1px;
+}
+.nihilo .dijitTabContainerLeftStrip {
+	padding-left: 2px;
+	border: 1px solid #ccc;
+	border-right: none;
+}
+.nihilo .dijitTabContainerLeftStrip {
+	background: #f2f2f2;
+}
+.nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.nihilo .dijitTabContainerRight-tabs .dijitTab {
+	margin-right:auto;
+	margin-bottom:2px;	
+}
+.nihilo .dijitTabContainerLeft-spacer,
+.nihilo .dijitTabContainerRight-spacer {
+	width: 2px;
+	border: 1px solid #ccc;
+	background: #f8f8f8;
+}
+.nihilo .dijitTabContainerRight-spacer {
+	border-right: none;
+}
+.nihilo .dijitTabContainerRight-tabs {
+	padding-top: 3px;
+	height: 100%;
+}
+.nihilo .dijitTabContainerLeft-tabs {
+	height: 100%;
+}
+.nihilo .dijitTabContainerLeft-spacer {
+	border-left: none;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {
+	border-left: 0px solid #ccc;
+	border-top: 0px solid #ccc;
+	border-right: 0px solid #ccc;
+	padding-top: 0px;
+	padding-left: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton {
+	margin-right: 0px;
+}
+.nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding: 5px 0 6px;
+}
+.dj_ie6 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding-bottom: 7px;
+}
+.nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding: 3px 0 5px;
+}
+.dj_ie6 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_ie7 .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent,
+.dj_opera .nihilo .tabStrip-disabled .tabStripButton .dijitTabInnerDiv .dijitTabContent {
+	padding-top: 4px;
+}
+.nihilo .dijitTabStripIcon {
+	height: 14px;
+	width: 14px;
+	background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top;
+}
+.dj_ie6 .nihilo .dijitTabStripIcon {
+	background-image: url(../images/spriteRoundedIconsSmall.gif);
+}
+.nihilo .dijitTabStripSlideRightIcon {
+	background-position: -30px top;
+}
+.nihilo .dijitTabStripMenuIcon {
+	background-position: -15px top;
+}
+.nihilo .dijitTabContainerTopNone {
+	padding-top: 0px;
+}
+.nihilo .dijitTabContainer .tabStripButton-top {
+	margin-top: 1px;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom {
+	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll left bottom;
+	border-bottom: medium none;
+	border-top: 1px solid #CCCCCC;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabInnerDiv {
+	background: transparent url(../images/tabBottomEnabledSpriteLR.gif) no-repeat scroll right bottom;
+}
+.nihilo .dijitTabContainer .tabStripButton-bottom .dijitTabContent {
+	background: transparent;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/layout/TabContainer_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/layout/TabContainer_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/layout/TabContainer_rtl.css	(revision 9)
@@ -0,0 +1,34 @@
+.dijitRtl .nihilo .dijitTab {
+	margin-right:0;
+	margin-left:2px;		
+}
+.dijitRtl .nihilo .dijitTabContainer .tabStripButton {
+	margin-left: 0;
+}
+.dijitRtl .nihilo .dijitTabContainerTopStrip,
+.dijitRtl .nihilo .dijitTabContainerBottomStrip,
+.dijitRtl .nihilo .dijitTabContainerTop-tabs,
+.dijitRtl .nihilo .dijitTabContainerBottom-tabs {
+	padding-left: 0;
+	padding-right: 3px;
+}
+.dijitRtl .nihilo .dijitTabInnerDiv {
+	padding-left: 3px;
+	padding-right: 4px;
+}
+.dijitRtl .nihilo .dijitTabPaneWrapper {
+	#zoom: 1;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerLeft-tabs {
+	margin-left: 0px !important;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerRight-tabs {
+	margin-right: 0px !important;
+}
+.dijitRtl .nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .nihilo .dijitTabContainerRight-tabs .dijitTab {
+	margin-left:0px;
+}
+.dj_ie-rtl .nihilo .dijitTab .dijitTabInnerDiv{
+	width : 1%;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/layout/ContentPane.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/layout/ContentPane.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/layout/ContentPane.css	(revision 9)
@@ -0,0 +1,17 @@
+
+.nihilo .dijitContentPane {
+    padding: 0px;
+}
+.nihilo .dijitTabContainerTop-dijitContentPane,
+.nihilo .dijitTabContainerLeft-dijitContentPane,
+.nihilo .dijitTabContainerRight-dijitContentPane,
+.nihilo .dijitTabContainerBottom-dijitContentPane,
+.nihilo .dijitAccordionContainer-dijitContentPane {
+    background-color: #fff;
+    padding: 5px;
+}
+.nihilo .dijitSplitContainer-dijitContentPane,
+.nihilo .dijitBorderContainer-dijitContentPane {
+    background-color: #fff;		
+    padding: 5px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/layout/SplitContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/layout/SplitContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/layout/SplitContainer.css	(revision 9)
@@ -0,0 +1,27 @@
+
+.nihilo .dijitSplitContainerSizerH {
+	background:url("../images/splitContainerSizerV.png") repeat-y #fff;
+	border:0;
+	border-left:0px solid #d3d3d3;
+	border-right:0px solid #d3d3d3;
+	width:5px;
+}
+.nihilo .dijitSplitContainerSizerH .thumb {
+	background:url("../images/splitContainerSizerV-thumb.png") no-repeat;
+	left:1px;
+	width:2px;
+	height:19px;
+}
+.nihilo .dijitSplitContainerSizerV {
+	background:url("../images/splitContainerSizerH.png") repeat-x #fff;
+	border:0;
+	border-top:0px solid #d3d3d3;
+	border-bottom:0px solid #d3d3d3;
+	height:2px;
+}
+.nihilo .dijitSplitContainerSizerV .thumb {
+	background:url("../images/splitContainerSizerH-thumb.png") no-repeat;
+	top:1px;
+	width:19px;
+	height:5px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/layout/BorderContainer.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/layout/BorderContainer.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/layout/BorderContainer.css	(revision 9)
@@ -0,0 +1,59 @@
+
+.nihilo .dijitBorderContainer {
+	background-color: #fcfcfc;
+	padding: 5px;
+}
+.nihilo .dijitSplitContainer-child,
+.nihilo .dijitBorderContainer-child {
+	
+    border: 1px #ccc solid;
+}
+.nihilo .dijitBorderContainer-dijitTabContainerTop,
+.nihilo .dijitBorderContainer-dijitTabContainerBottom,
+.nihilo .dijitBorderContainer-dijitTabContainerLeft,
+.nihilo .dijitBorderContainer-dijitTabContainerRight {
+	
+	 border: none;
+}
+.nihilo .dijitBorderContainer-dijitBorderContainer {
+	
+	border: none;
+	padding: 0px;
+}
+.nihilo .dijitSplitterH,
+.nihilo .dijitGutterH {
+	background:#FCFCFC;
+	border:0;
+	border-left:0px solid #d3d3d3;
+	border-right:0px solid #d3d3d3;
+	height:5px;
+}
+.nihilo .dijitSplitterH .dijitSplitterThumb {
+	background:#8BA0BD none;
+	height:1px;
+	top:2px;
+	width:19px;
+}
+.nihilo .dijitSplitterV,
+.nihilo .dijitGutterV {
+	background:#FCFCFC;
+	border:0;
+	border-top:0px solid #d3d3d3;
+	border-bottom:0px solid #d3d3d3;
+	width:5px;
+}
+.nihilo .dijitSplitterV .dijitSplitterThumb {
+	background:#8BA0BD none;
+	height:19px;
+	left:2px;
+	width:1px;
+}
+.nihilo .dijitSplitterActive {
+	font-size: 1px;
+	background-image: none;
+	background-color: #aaa;
+	-moz-opacity: 0.6;
+	opacity: 0.6;
+	filter: Alpha(Opacity=60);
+	margin: 0;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Common.css	(revision 9)
@@ -0,0 +1,19 @@
+
+.nihilo .dojoDndItemBefore {
+	border-top: 2px solid #369;
+}
+.nihilo .dojoDndItemAfter {
+	border-bottom: 2px solid #369;
+}
+.nihilo .dojoDndItemOver {
+	cursor:pointer;
+}
+.nihilo table.dojoDndAvatar { -moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}
+.nihilo .dojoDndAvatar td	{ border: none; }
+.nihilo .dojoDndAvatar tr	{ border: none; }
+.nihilo .dojoDndAvatarHeader td	{ height: 20px; padding: 0 0 0 21px; }
+.nihilo .dojoDndAvatarItem td { padding: 2px;}
+.nihilo.dojoDndMove .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarHeader	{background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}
+.nihilo.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader	{background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}
Index: trunk/web/dojo/dijit/themes/nihilo/ProgressBar.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/ProgressBar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/ProgressBar.css	(revision 9)
@@ -0,0 +1,24 @@
+
+.nihilo .dijitProgressBar {
+	margin:2px 0px 2px 0px;
+}
+.nihilo .dijitProgressBarEmpty{
+	
+	background:#fff url("images/progressBarEmpty.png") repeat-x center center;
+	border-color: #f8d582 #f8d582 #f8d582 #f8d582;
+}
+.nihilo .dijitProgressBarTile{
+	
+	background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;
+}
+.nihilo .dijitProgressBarFull {
+	border-right:1px solid #f8d582;
+}
+.nihilo .dijitProgressBarLabel {
+	
+	color:#293a4b;
+}
+.nihilo .dijitProgressBarIndeterminate .dijitProgressBarTile {
+	
+	background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Calendar_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Calendar_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Calendar_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+
+.dijitRtl .nihilo .dijitCalendarDecrease {
+	background-position: -30px top;
+}
+.dijitRtl .nihilo .dijitCalendarIncrease {
+	background-position: 0px top;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/TimePicker.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/TimePicker.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/TimePicker.css	(revision 9)
@@ -0,0 +1,42 @@
+
+.nihilo .dijitTimePickerTick,
+.nihilo .dijitTimePickerMarker {
+	border-color: #eeeeee;
+}
+.nihilo .dijitTimePickerTick {
+	color:white;
+}
+.nihilo .dijitTimePickerMarker {
+	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+	color:#293a4b;
+	font-weight: bold;
+}
+.nihilo .dijitTimePickerItemSelected {
+	color: black;
+	background: #ffe284 none;
+}
+.nihilo .dijitTimePickerItemHover {
+	background: #d6d6dd none;
+	color:black;
+}
+.nihilo .dijitTimePickerItemHover,
+.nihilo .dijitTimePickerItemSelected {
+	position: relative;
+	z-index: 10;
+}
+.nihilo .dijitTimePickerTick .dijitTimePickerItemInner {
+	font-size:0.4em;
+}
+.nihilo .dijitTimePickerItemHover .dijitTimePickerItemInner,
+.nihilo .dijitTimePickerItemSelected .dijitTimePickerItemInner {
+	font-size:1em;
+}
+.nihilo .dijitTimePickerMarkerHover {
+	border-top: 1px solid #eeeeee;
+}
+.nihilo .dijitTimePickerTickHover,
+.nihilo .dijitTimePickerTickSelected {
+	margin-top:-0.3em;
+	margin-bottom:-0.3em;
+	border-bottom: none;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/ColorPalette.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/ColorPalette.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/ColorPalette.css	(revision 9)
@@ -0,0 +1,5 @@
+.dijitColorPalette {
+	border:1px solid #d3d3d3;
+	background:#fff;
+	-moz-border-radius: 0px !important;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Tree.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Tree.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Tree.css	(revision 9)
@@ -0,0 +1,75 @@
+
+.nihilo .dijitTreeNode {
+    background : url('images/treeI.gif') no-repeat;
+    background-position : top left;
+    background-repeat : repeat-y;
+    zoom: 1;	
+}
+.nihilo .dijitTreeIsLast {
+    background: url('images/treeI_half.gif') no-repeat;
+}
+.nihilo .dijitTreeRowHover {
+	
+	background-image: url(images/treeHover.png);
+	background-repeat: repeat;
+	background-color: transparent !important;
+}
+.nihilo .dijitTreeLabel {
+	font-weight: normal;
+	margin-left: 3px;
+}
+.nihilo .dijitTreeIsRoot {
+    margin-left: 0;
+    background-image: none;
+}
+.nihilo .dijitTreeExpando {
+    width: 18px;
+    height: 18px;
+}
+.nihilo .dijitTreeRow {
+	
+	padding-bottom: 2px;
+}
+.nihilo .dijitTreeContent {
+    min-height: 18px;
+    min-width: 18px;
+    padding-left:1px;
+}
+.nihilo .dijitTreeExpandoOpened {
+	background: url('images/spriteTree.gif') no-repeat -18px top;
+}
+.nihilo .dijitTreeExpandoClosed {
+	background-image: url('images/spriteTree.gif');
+}
+.nihilo .dijitTreeExpandoLeaf {
+	background: url('images/spriteTree.gif') no-repeat -36px top;
+}
+.nihilo .dijitTreeExpandoLoading {
+	background-image: url('images/treeExpand_loading.gif');
+}
+.nihilo .dijitTreeIcon {
+	width: 16px;
+	height: 16px;
+}
+.nihilo .dijitFolderOpened {
+	background: url('images/spriteDivIcons.gif') no-repeat -16px top;
+}
+.nihilo .dijitFolderClosed {
+	background: url('images/spriteDivIcons.gif') no-repeat top left;
+}
+.nihilo .dijitLeaf {
+	background: url('images/spriteDivIcons.gif') no-repeat -32px top;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore,
+.nihilo .dijitTreeNode .dojoDndItemAfter {
+	border-bottom: none;
+	border-top: none;
+}
+.nihilo .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {
+	
+	border-top: 2px solid #369;
+}
+.nihilo .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {
+	
+	border-bottom: 2px solid #369;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Dialog.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Dialog.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Dialog.css	(revision 9)
@@ -0,0 +1,128 @@
+
+.nihilo .dijitDialog {
+	background: #eee;
+	border: 1px solid #d3d3d3;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+	padding: 0px;
+}
+.nihilo .dijitDialog .dijitDialogTitle {
+	
+	font-size: 0.9em;
+	color: #3243C5F;
+	font-weight: bold;
+	padding: 0px 4px;
+}
+.nihilo .dijitDialog .dijitDialogPaneContent {
+	background: #ffffff;
+	border-top: 1px solid #d3d3d3;
+	padding:10px;
+}
+.nihilo .dijitDialogTitleBar {
+	
+	background: #fafafa url("images/titleBar.png") repeat-x top left;
+	padding: 5px 6px 3px 6px;
+	outline:0; 
+}
+.nihilo .dijitDialogCloseIcon {
+	
+	background-image: url("images/spriteRoundedIconsSmall.png");
+	background-repeat: no-repeat;
+	background-position: -60px 0px;
+	position: absolute;
+	vertical-align: middle;
+	right: 6px;
+	top: 4px;
+	height: 15px;
+	width: 15px;
+}
+.dj_ie6 .nihilo .dijitDialogCloseIcon {
+	background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.nihilo .dijitDialogCloseIconHover {
+	background-position: -60px -15px;
+}
+.nihilo .dijitTooltip,
+.nihilo .dijitTooltipDialog {
+	
+	background: transparent;	
+}
+.dijitTooltipBelow {
+	
+	padding-top: 10px;
+}
+.dijitTooltipAbove {
+	
+	padding-bottom: 10px;
+}
+.nihilo .dijitTooltipContainer {
+	
+	background-color: #fff;
+	border:1px solid #d3d3d3;
+	padding:0.45em;
+}
+.nihilo .dijitTooltipConnector {
+	
+	border:0px;
+	z-index: 2;
+}
+.nihilo .dijitTooltipABRight .dijitTooltipConnector {
+	
+	left: auto !important;
+	right: 6px;
+}
+.nihilo .dijitTooltipBelow .dijitTooltipConnector {
+	
+	top: 0px;
+	left: 6px;
+	background:url("images/tooltipConnectorUp.png") no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .nihilo .dijitTooltipBelow .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorUp.gif");
+}
+.nihilo .dijitTooltipAbove .dijitTooltipConnector {
+	
+	bottom: 0px;
+	left: 6px;
+	background:url("images/tooltipConnectorDown.png") no-repeat top left;
+	width:17px;
+	height:11px;
+}
+.dj_ie .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorDown.gif");
+}
+.dj_ie6 .nihilo .dijitTooltipAbove .dijitTooltipConnector {
+	bottom: -5px;
+}
+.nihilo .dijitTooltipLeft {
+	padding-right: 10px;
+}
+.dj_ie6 .nihilo .dijitTooltipLeft {
+	padding-left: 11px;
+}
+.nihilo .dijitTooltipLeft .dijitTooltipConnector {
+	
+	right: 0px;
+	bottom: 3px;
+	background:url("images/tooltipConnectorRight.png") no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .nihilo .dijitTooltipLeft .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorRight.gif");
+}
+.nihilo .dijitTooltipRight {
+	padding-left: 10px;
+}
+.nihilo .dijitTooltipRight .dijitTooltipConnector {
+	
+	left: 0px;
+	bottom: 3px;
+	background:url("images/tooltipConnectorLeft.png") no-repeat top left;
+	width:11px;
+	height:17px;
+}
+.dj_ie .nihilo .dijitTooltipRight .dijitTooltipConnector {
+	background-image: url("images/tooltipConnectorLeft.gif");
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Toolbar.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Toolbar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Toolbar.css	(revision 9)
@@ -0,0 +1,56 @@
+.nihilo .dijitToolbar {
+	border-bottom: 1px solid #ccc;
+	background:#eaeaea url("images/titleBar.png") repeat-x top left;
+}
+.dj_ie6 .nihilo .dijitToolbar {
+	height: 10px;
+}
+.nihilo .dijitToolbar .dijitButtonNode,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	margin: 0px;
+	padding: 0px;
+	border: none;
+	font-size: 12px;
+}
+.nihilo .dijitToolbar .dijitButton,
+.nihilo .dijitToolbar .dijitToggleButton,
+.nihilo .dijitToolbar .dijitDropDownButton,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContents,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButton {
+	background: none;
+	padding: 1px;	
+}
+.nihilo .dijitToolbar .dijitButtonChecked,
+.nihilo .dijitToolbar .dijitToggleButtonChecked {
+	background-color:#ffeeb9;
+	border:1px solid #f7c95c;
+	padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonCheckedHover,
+.nihilo .dijitToolbar .dijitToggleButtonCheckedHover
+ {
+	background-color:#ffe284;
+	border:1px solid #f7c95c;
+	padding: 0;
+}
+.nihilo .dijitToolbar .dijitButtonHover,
+.nihilo .dijitToolbar .dijitToggleButtonHover,
+.nihilo .dijitToolbar .dijitDropDownButtonHover,
+.nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsHover,
+.nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {
+	
+	border: 1px solid #f7c95c;
+	padding: 0;
+	background-color:#ffe284;
+}
+.nihilo .dijitToolbar label {
+	padding: 3px 3px 0 6px;
+}
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,
+.dj_ie .nihilo .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {
+	
+	border: 1px #555 dotted !important;
+	padding: 0px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/nihilo_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/nihilo_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/nihilo_rtl.css	(revision 9)
@@ -0,0 +1,224 @@
+
+.dijitRtl .dijitPlaceHolder {
+	left: auto;
+	right: 0;
+}
+.dijitMenuItemRtl {
+	text-align: right;
+}
+.dj_iequirks .dijitComboButtonRtl BUTTON {
+	
+	float:left;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitComboBoxRtl .dijitArrowButtonContainer {
+	
+	border-right-width: 1px !important;
+	border-right-style: solid !important;
+	border-left-width: 0px !important;
+	border-left-style: none !important;
+}
+.dijit_a11y .dijitTextBoxRtl .dijitValidationContainer,
+.dijit_a11y .dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijit_a11y .dijitComboBoxRtl .dijitArrowButtonContainer {
+	border-right: 1px solid black !important;
+	border-left: 0px none black !important;
+}
+.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {
+	right: 0;
+	left: auto;
+}
+.dijitTextBoxRtl .dijitSpinnerButtonContainer,
+.dijitTextBoxRtl .dijitValidationContainer,
+.dijitTextBoxRtl .dijitArrowButtonContainer {
+	float: left;
+}
+.dijitCalendarRtl .dijitCalendarNextYear {
+	margin:0 0.55em 0 0;
+}
+.dijitCalendarRtl .dijitCalendarPreviousYear {
+	margin:0 0 0 0.55em;
+}
+.dijitSliderRtl .dijitSliderImageHandleV {
+	left:auto;
+}
+.dijitSliderRtl .dijitSliderImageHandleH {
+	left:-50%;
+}
+.dijitSliderRtl .dijitSliderMoveableH {
+	right:auto;
+	left:0;
+}
+.dijitSliderRtl .dijitRuleContainerV {
+	float:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleContainerV {
+	text-align:right;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelV {
+	text-align:left;
+}
+.dj_ie .dijitSliderRtl .dijitRuleLabelH {
+	zoom:1;
+}
+.dijitSliderRtl .dijitSliderProgressBarH {
+	
+	float:right;
+	right:0;
+	left:auto;
+}
+.dijitRtl .dijitContentPaneLoading, .dijitRtl .dijitContentPaneError {
+	background-position:right;
+	padding-right:25px;
+}
+.dijitTabRtl .dijitTabCloseButton {
+	margin-left: 0px;
+	margin-right: 1em;
+}
+.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {
+	width:100%;
+}
+.dijitColorPaletteRtl .dijitColorPaletteUnder {
+	
+	left: auto;
+	right: 0;
+}
+.dijitSelectRtl .dijitButtonContents {
+	text-align: right;
+}
+.dijitRtl .nihilo .dijitTab {
+	margin-right:0;
+	margin-left:2px;		
+}
+.dijitRtl .nihilo .dijitTabContainer .tabStripButton {
+	margin-left: 0;
+}
+.dijitRtl .nihilo .dijitTabContainerTopStrip,
+.dijitRtl .nihilo .dijitTabContainerBottomStrip,
+.dijitRtl .nihilo .dijitTabContainerTop-tabs,
+.dijitRtl .nihilo .dijitTabContainerBottom-tabs {
+	padding-left: 0;
+	padding-right: 3px;
+}
+.dijitRtl .nihilo .dijitTabInnerDiv {
+	padding-left: 3px;
+	padding-right: 4px;
+}
+.dijitRtl .nihilo .dijitTabPaneWrapper {
+	#zoom: 1;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerLeft-tabs {
+	margin-left: 0px !important;
+}
+.dj_ie-rtl .nihilo .dijitTabContainerRight-tabs {
+	margin-right: 0px !important;
+}
+.dijitRtl .nihilo .dijitTabContainerLeft-tabs .dijitTab,
+.dijitRtl .nihilo .dijitTabContainerRight-tabs .dijitTab {
+	margin-left:0px;
+}
+.dj_ie-rtl .nihilo .dijitTab .dijitTabInnerDiv{
+	width : 1%;
+}
+.dijitRtl .nihilo .dijitAccordionArrow {
+	background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitAccordionTitleSelected .dijitAccordionArrow {
+	
+	background-position: -15px top;
+}
+.dijitRtl .nihilo .dijitSliderProgressBarH,
+.dijitRtl .nihilo .dijitSliderRemainingBarH,
+.dijitRtl .nihilo .dijitSliderLeftBumper,
+.dijitRtl .nihilo .dijitSliderRightBumper,
+.dijitRtl .nihilo .dijitSliderTopBumper {
+	background-position: top right;
+}
+.dijitRtl .nihilo .dijitSliderProgressBarV,
+.dijitRtl .nihilo .dijitSliderRemainingBarV,
+.dijitRtl .nihilo .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.dijitRtl .nihilo .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.dijitRtl .nihilo .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.dijitRtl .nihilo .dijitSliderIncrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat left top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat left top;
+}
+.dijitRtl .nihilo .dijitSliderDecrementIconH {
+	background:url(images/spriteRoundedIconsSmall.png) no-repeat -30px top;
+	#background:url(images/spriteRoundedIconsSmall.gif) no-repeat -30px top;
+}
+.dijitRtl .nihilo .dijitComboBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.dijitRtl .nihilo .dijitSelect .dijitButtonContents {
+	border-left: none;
+	border-right-width: 1px;
+}
+.dijitRtl .nihilo .dijitTreeNode,
+.dijitRtl .nihilo .dijitTreeExpandoLeaf {
+	
+    background-image: none;
+}
+.dijitRtl .nihilo .dijitTreeContent {
+    padding-left: 0px;
+    padding-right: 1px;
+}
+.dijitRtl .nihilo .dijitTreeExpandoOpened {
+	
+	background: url(images/spriteTree_rtl.gif) no-repeat -18px top;
+}
+.dijitRtl .nihilo .dijitTreeExpandoClosed {
+	
+	background-image: url(images/spriteTree_rtl.gif);
+}
+.dijitRtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
+.dj_ie6-rtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitCalendarDecrease {
+	background-position: -30px top;
+}
+.dijitRtl .nihilo .dijitCalendarIncrease {
+	background-position: 0px top;
+}
+.dj_ie6-rtl .nihilo .dijitTimePickerMarkerHover,
+.dj_ie7-rtl .nihilo .dijitTimePickerMarkerHover {
+        border-top: 0px; 
+}
+.dijitRtl .nihilo .dijitDialogTitleBar .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuItemIcon {
+	padding-left: 3px;
+	padding-right: 0px;
+}
+.dijitRtl .nihilo .dijitMenuItem .dijitMenuExpand {
+	background-position: 0px top;
+}
+.dijitRtl .nihilo .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitRtl .nihilo .dijitDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitEditorRtl .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png); 
+}
+.dijitEditorRtlDisabled .dijitEditorIcon {
+	background-image: url(../../icons/images/editorIconsDisabled_rtl.png); 
+}
+.dijitToolbarRtl .dijitToolbarSeparator {
+	background-image: url(../../icons/images/editorIconsEnabled_rtl.png);
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Menu.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Menu.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Menu.css	(revision 9)
@@ -0,0 +1,62 @@
+
+.nihilo .dijitMenu,
+.nihilo .dijitMenuBar {
+	border: 1px solid #d3d3d3;
+	margin: 0px;
+	padding: 0px;
+	background-color: #fff;
+}
+.nihilo .dijitBorderContainer .dijitMenuBar {
+	border: 1px #ccc solid;
+}
+.nihilo .dijitMenuItem {
+	font-family: sans-serif;
+	margin: 0px;
+	color: #243C5F;
+}
+.nihilo .dijitMenuBar .dijitMenuItem {
+	padding: 4px 5px;
+}
+.nihilo .dijitMenuPreviousButton, .nihilo .dijitMenuNextButton {
+	font-style: italic;
+}
+.nihilo .dijitMenuItem TD {
+	padding:1px;
+}
+.nihilo .dijitMenuPassive .dijitMenuItemHover,
+.nihilo .dijitMenuItemSelected {
+	background-color: #ffe284; 
+	color: #243C5F;
+}
+.nihilo .dijitMenuItemIcon {
+	width: 15px;
+	height: 15px;
+}
+.nihilo .dijitMenuExpand {
+	width:15px;
+	height:15px;
+	background-image: url('images/spriteRoundedIconsSmall.png');
+	background-position: -30px top;
+}
+.dj_ie6 .nihilo .dijitMenuExpand {
+	background-image:url('images/spriteRoundedIconsSmall.gif');
+}
+.nihilo .dijitMenuSeparator {
+	height: 1px;
+}
+.nihilo .dijitMenuSeparatorTop {
+	border-bottom: 1px solid #fff; 
+}
+.nihilo .dijitMenuSeparatorBottom {
+	border-top: 1px solid #d3d3d3;
+}
+.nihilo .dijitCheckedMenuItemIconChar {
+	display: none;
+}
+.nihilo .dijitCheckedMenuItemIcon {
+	background-image: url('images/spriteCheckbox.gif');
+	background-position: -80px;
+}
+.nihilo .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/TitlePane_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/TitlePane_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/TitlePane_rtl.css	(revision 9)
@@ -0,0 +1,6 @@
+.dijitRtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
+.dj_ie6-rtl .nihilo .dijitTitlePane .dijitClosed .dijitArrowNode {
+	background-position: 0px top;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Editor_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Editor_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Editor_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+
+.dijitRtl .nihilo .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsEnabled_rtl.png'); 
+}
+.dijitRtl .nihilo .dijitDisabled .dijitEditorIcon {
+	background-image: url('../../icons/images/editorIconsDisabled_rtl.png'); 
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Calendar.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Calendar.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Calendar.css	(revision 9)
@@ -0,0 +1,117 @@
+
+.nihilo .dijitCalendarIncrementControl {
+	
+	width:15px;
+	height:15px;
+	background-image: url("images/spriteRoundedIconsSmall.png");
+	background-repeat: no-repeat
+}
+.dj_ie6 .nihilo .dijitCalendarIncrementControl {
+	font-size:.1em;
+	background-image: url("images/spriteRoundedIconsSmall.gif");
+}
+.nihilo .dijitA11ySideArrow {
+	display: none;
+}
+.nihilo .dijitCalendarDecrease {
+	background-position: top left;
+}
+.nihilo .dijitCalendarIncrease {
+	background-position: -30px top;
+}
+.nihilo table.dijitCalendarContainer {
+	font-size: 100%;
+	border-spacing: 0;
+	border-collapse: separate;
+	border: 1px solid #ccc;
+	margin: 0;
+}
+.nihilo .dijitCalendarMonthContainer th {
+	
+	background:#d3d3d3 url("images/titleBar.png") repeat-x top;
+	padding-top:.3em;
+	padding-bottom:.2em;
+	text-align:center;
+}
+.dj_ie6 .nihilo .dijitCalendarMonthContainer th {
+	padding-top:.2em;
+	padding-bottom:.1em;
+}
+.nihilo .dijitCalendarDayLabelTemplate {
+	
+	background:#fefefe;
+	font-weight:normal;
+	padding-top:.15em;
+	padding-bottom:.2em;
+	border-bottom: 1px solid #eeeeee;
+	color:#293a4b;
+	text-align:center;
+}
+.nihilo .dijitCalendarBodyContainer {
+	border-bottom: 1px solid #eeeeee;
+}
+.nihilo .dijitCalendarMonthLabel {
+	color:#293a4b;
+	font-weight: bold;
+}
+.nihilo .dijitCalendarDateTemplate {
+	
+	font-size: 0.9em;
+	font-weight: bold;
+	text-align: center;
+	padding: 0.3em 0.3em 0.05em 0.3em;
+	letter-spacing: 1px;
+	background-color: #fdfdfd;
+	border:#fdfdfd solid 1px !important;
+}
+.dj_ie .nihilo .dijitCalendarDateTemplate {
+	padding: 0.1em .33em 0.02em .33em;
+}
+.nihilo .dijitCalendarPreviousMonth,
+.nihilo .dijitCalendarNextMonth 		{
+	
+	color:#999999;
+	background-color:#f5f5f5 !important;
+	border:#f5f5f5 solid 1px !important;
+}
+.nihilo .dijitCalendarCurrentMonth {
+	
+}
+.nihilo .dijitCalendarDisabledDate {
+	text-decoration:line-through !important;
+}
+.nihilo .dijitCalendarCurrentDate {
+	
+	text-decoration:underline;
+	font-weight:bold;
+}
+.nihilo .dijitCalendarSelectedDate {
+	
+	background-color:#ffe284 !important;
+	color:black !important;
+	border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarYearContainer {
+	
+	background:white url("images/titleBar.png") repeat-x top;
+}
+.nihilo .dijitCalendarYearLabel {
+	
+	margin:0;
+	padding:0.4em 0 0.25em 0;
+	text-align:center;
+}
+.nihilo .dijitCalendarSelectedYear {
+	
+	color:black;
+	padding:0.2em;
+	padding-bottom:0.1em;
+	background-color:#ffe284 !important;
+	border:#f7c95c solid 1px !important;
+}
+.nihilo .dijitCalendarNextYear,
+.nihilo .dijitCalendarPreviousYear {
+	
+	color:black !important;
+	font-weight:normal;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/Checkbox.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/Checkbox.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/Checkbox.css	(revision 9)
@@ -0,0 +1,40 @@
+
+.nihilo .dijitToggleButton .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+	background-image: url('../images/spriteCheckbox.gif');
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitCheckBoxIcon {		
+	background-image: url('../images/spriteCheckbox.gif'); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.nihilo .dijitCheckBox,
+.nihilo .dijitToggleButton .dijitCheckBoxIcon {
+	
+	background-position: -16px;
+}
+.nihilo .dijitCheckBoxChecked,
+.nihilo .dijitToggleButtonChecked .dijitCheckBoxIcon {
+	
+	background-position: 0px;
+}
+.nihilo .dijitCheckBoxDisabled {
+	
+	background-position: -48px;
+}
+.nihilo .dijitCheckBoxCheckedDisabled {
+	
+	background-position: -32px;
+}
+.nihilo .dijitCheckBoxHover {
+	
+	background-position: -80px;
+}
+.nihilo .dijitCheckBoxCheckedHover {
+	
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/Common.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/Common.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/Common.css	(revision 9)
@@ -0,0 +1,51 @@
+
+.nihilo .dijitInputContainer INPUT,
+.nihilo .dijitTextBox {
+	margin: 0em 0.1em;
+}
+.nihilo .dijitTextBox,
+.nihilo .dijitTextArea {
+	
+	background:#fff url("../images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #d3d3d3;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+	padding: 0 0.2em !important;
+}
+.nihilo .dijitTextBox .dijitButtonNode {
+	
+	border-color: #d3d3d3;
+}
+.nihilo .dijitTextBoxFocused,
+.nihilo .dijitTextAreaFocused {
+	
+	border-color:#b3b3b3;
+}
+.nihilo .dijitTextBoxFocused .dijitButtonNode,
+.nihilo .dijitSpinner .dijitUpArrowButtonActive,
+.nihilo .dijitSpinner .dijitDownArrowButtonActive {
+	border-left-color:#d3d3d3;
+}
+.nihilo .dijitSpinnerFocused .dijitDownArrowButton,
+.nihilo .dijitSpinner .dijitUpArrowButtonActive,
+.nihilo .dijitSpinner .dijitDownArrowButtonActive {
+	border-top-color:#d3d3d3;
+}
+.nihilo .dijitError {
+	border-color:#b3b3b3;
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.nihilo .dijitErrorFocused {
+	background-color:#ff6;
+	background-image:none;
+}
+.nihilo .dijitValidationIcon {
+	
+	width: 16px;
+	background: transparent url('../images/warning.png') no-repeat center center;
+}
+.nihilo .dijitComboBoxHighlightMatch {
+	background-color:#d3d3d3;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/RadioButton.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/RadioButton.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/RadioButton.css	(revision 9)
@@ -0,0 +1,40 @@
+
+.nihilo .dijitToggleButton .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+	background-image: url('../images/spriteRadio.gif');
+}
+.nihilo .dijitRadio,
+.nihilo .dijitRadioIcon	{		
+	background-image: url('../images/spriteRadio.gif'); 
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	margin: 0;
+	padding: 0;
+}
+.nihilo .dijitRadio,
+.nihilo .dijitToggleButton .dijitRadioIcon {
+	
+	background-position: -16px;
+}
+.nihilo .dijitRadioChecked,
+.nihilo .dijitToggleButtonChecked .dijitRadioIcon {
+	
+	background-position: 0px;
+}
+.nihilo .dijitRadioDisabled {
+	
+	background-position: -48px;
+}
+.nihilo .dijitRadioCheckedDisabled {
+	
+	background-position: -32px;
+}
+.nihilo .dijitRadioHover {
+	
+	background-position: -80px;
+}
+.nihilo .dijitRadioCheckedHover {
+	
+	background-position: -64px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/Button.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/Button.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/Button.css	(revision 9)
@@ -0,0 +1,108 @@
+
+.nihilo .dijitButtonNode {
+	
+	
+	border:1px solid #dedede;
+	border-bottom:1px solid #dedede;
+	padding: 0.1em 0.2em 0.2em 0.2em;
+	background: #fff url("../images/buttonEnabled.png") repeat-x top left;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+	border-right: none;
+}
+.nihilo .dijitButtonText {
+	text-align: center;
+	padding: 0 0.3em;
+}
+.nihilo .dijitComboBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.nihilo .dijitArrowButton {
+	color: #111;
+}
+.nihilo .dijitComboButton .dijitDownArrowButton {
+	padding-right:4px;
+}
+.nihilo .dijitComboBoxReadOnly,
+.nihilo .dijitSpinnerReadOnly,
+.nihilo .dijitSpinnerReadOnly .dijitButtonNode,
+.nihilo .dijitButtonDisabled .dijitButtonNode,
+.nihilo .dijitToggleButtonDisabled .dijitButtonNode,
+.nihilo .dijitDropDownButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboButtonDisabled .dijitButtonNode,
+.nihilo .dijitComboBoxDisabled,
+.nihilo .dijitSpinnerDisabled,
+.nihilo .dijitSpinnerDisabled .dijitButtonNode {
+	
+	border-color: #dedede;
+	background:#fafafa url("../images/buttonDisabled.png") top repeat-x;
+	opacity: 0.60;
+}
+.dj_ie6 .nihilo .dijitReadOnly INPUT,
+.dj_ie7 .nihilo .dijitReadOnly INPUT,
+.dj_ie6 .nihilo .dijitComboButtonDisabled .dijitButtonText,
+.dj_ie7 .nihilo .dijitComboButtonDisabled .dijitButtonText {
+	
+	color: #aaa;
+}
+.nihilo .dijitButtonHover .dijitButtonNode,
+.nihilo .dijitButtonNodeHover,
+.nihilo .dijitToggleButtonHover .dijitButtonNode,
+.nihilo .dijitDropDownButtonHover .dijitButtonNode,
+.nihilo .dijitButtonContentsHover,
+.nihilo .dijitDownArrowButtonHover,
+.nihilo .dijitUpArrowButtonHover {
+	
+	
+	color:#243C5F;
+	background:#fcfcfc url("../images/buttonHover.png") repeat-x top left;
+}
+.nihilo .dijitUpArrowButtonActive,
+.nihilo .dijitDownArrowButtonActive,
+.nihilo .dijitButtonActive .dijitButtonNode,
+.nihilo .dijitToggleButtonActive .dijitButtonNode,
+.nihilo .dijitDropDownButtonActive .dijitButtonNode,
+.nihilo .dijitComboButton .dijitButtonContentsActive,
+.nihilo .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+	
+	border-color:#dedede;
+	background: #f5f5f5 url("../images/buttonActive.png") top left repeat-x;
+}
+.nihilo .dijitArrowButtonInner {
+	background-image: url("../images/spriteArrows.png");
+	background-repeat: no-repeat;
+	background-position: 0px center;
+	width: 11px;
+	height: 11px;
+}
+.nihilo .dijitLeftArrowButton .dijitArrowButtonInner {
+	background-position: -11px center;
+}
+.nihilo .dijitUpArrowButton .dijitArrowButtonInner {
+	background-position: -22px center;
+}
+.nihilo .dijitRightArrowButton .dijitArrowButtonInner {
+	background-position: -33px center;
+}
+.dj_ie6 .nihilo .dijitArrowButtonInner {
+	background-image: url("../images/spriteArrows.gif");
+}
+.dj_webkit .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: -1px; 
+}
+.dj_ie .nihilo .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {
+	margin-top: 1px; 
+}
+.nihilo .dijitSpinnerButtonContainer {
+	width: auto;
+	padding: 0;
+}
+.nihilo .dijitSpinner .dijitArrowButton {
+	width: 15px;
+}
+.nihilo .dijitSpinner .dijitSpinnerButtonInner {
+	width: 15px;
+}
+.nihilo .dijitSpinner .dijitArrowButtonInner .dijitInputField {
+	padding: 0;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/Button_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/Button_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/Button_rtl.css	(revision 9)
@@ -0,0 +1,7 @@
+.dijitRtl .nihilo .dijitComboBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.dijitRtl .nihilo .dijitSelect .dijitButtonContents {
+	border-left: none;
+	border-right-width: 1px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/TimeTextBox.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/TimeTextBox.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/TimeTextBox.css	(revision 9)
@@ -0,0 +1 @@
+@CHARSET "UTF-8";
Index: trunk/web/dojo/dijit/themes/nihilo/form/Select.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/Select.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/Select.css	(revision 9)
@@ -0,0 +1,44 @@
+.nihilo .dijitSelect .dijitButtonNode {
+	padding: 0px;
+}
+.nihilo .dijitSelect .dijitButtonContents {
+	padding-top: 1px;
+    background:#fff url("../images/validationInputBg.png") repeat-x top left;
+    #background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+}
+.nihilo .dijitSelectHover .dijitButtonContents,
+.nihilo .dijitSelectActive .dijitButtonContents,
+.nihilo .dijitSelectOpened .dijitButtonContents,
+.nihilo .dijitSelectDisabled .dijitButtonContents,
+.nihilo .dijitSelectReadOnly .dijitButtonContents{
+	background: transparent none;
+}
+.dj_ie .nihilo .dijitSelect .dijitButtonContents {
+	padding-top: 0px;
+}
+.nihilo .dijitSelect .dijitArrowButton {
+	padding: 0px 2px;
+}
+.nihilo .dijitSelectDisabled .dijitButtonNode {
+    border-color: #dedede;
+    background:#fafafa url("../images/buttonDisabled.png") top repeat-x;
+}
+.dj_ie .nihilo .dijitSelectDisabled  .dijitButtonNode * {
+	filter: gray() alpha(opacity=50);
+}
+.nihilo .dijitSelectHover .dijitButtonNode {
+    color:#000;
+    background:#fcfcfc url("../images/buttonHover.png") repeat-x top left;
+}
+.nihilo .dijitSelectActive .dijitButtonNode,
+.nihilo .dijitSelectOpened .dijitButtonNode {
+    border-color:#dedede;
+    background: #f5f5f5 url("../images/buttonActive.png") top left repeat-x;
+}
+.nihilo .dijitSelectMenu td {
+	padding: 0em;
+}
+.nihilo .dijitSelectMenu .dijitMenuItemLabel,
+.nihilo .dijitSelectMenu .dijitMenuArrowCell {
+	padding: 0.1em 0.2em;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/Slider.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/Slider.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/Slider.css	(revision 9)
@@ -0,0 +1,120 @@
+
+.nihilo .dijitSliderProgressBarH {
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.nihilo .dijitSliderProgressBarV {
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarH,
+.nihilo .dijitSliderFocused .dijitSliderLeftBumper {
+	background-image:url("../images/sliderFullFocus.png");
+}
+.nihilo .dijitSliderFocused .dijitSliderProgressBarV,
+.nihilo .dijitSliderFocused .dijitSliderBottomBumper {
+	background-image:url("../images/sliderFullVerticalFocus.png");
+}
+.nihilo .dijitSliderRemainingBarV {
+	border-color: #b4b4b4;
+	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;
+}
+.nihilo .dijitSliderRemainingBarH {
+	border-color: #b4b4b4;
+	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+}
+.nihilo .dijitSliderBar {
+	border-style: solid;
+	outline:1px;
+	
+}
+.nihilo .dijitSliderFocused .dijitSliderBar {
+	border-color:#727272;
+}
+.nihilo .dijitSliderImageHandleH {
+	border:0px;
+	width:15px;
+	height:18px;
+	background:url("../images/preciseSliderThumb.png") no-repeat center top;
+	#background:url("../images/preciseSliderThumb.gif") no-repeat center top;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleH {
+	background-image:url("../images/preciseSliderThumbFocus.png");
+	#background-image:url("../images/preciseSliderThumbFocus.gif");
+}
+.nihilo .dijitSliderLeftBumper {
+	border-left-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;
+}
+.nihilo .dijitSliderRightBumper {
+	background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;
+	border-color: #b4b4b4;
+	border-right-width: 1px;
+}
+.nihilo .dijitSliderImageHandleV {
+	border:0px;
+	width:20px;
+	height:15px;
+	background:url("../images/sliderThumb.png") no-repeat center center;
+	#background:url("../images/sliderThumb.gif") no-repeat center center;
+}
+.nihilo .dijitSliderFocused .dijitSliderImageHandleV {
+	background-image:url("../images/sliderThumbFocus.png");
+	#background-image:url("../images/sliderThumbFocus.gif");
+}
+.nihilo .dijitSliderBottomBumper {
+	border-bottom-width: 1px;
+	border-color: #aab0bb;
+	background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;
+}
+.nihilo .dijitSliderTopBumper {
+	background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left;
+	border-color: #b4b4b4;
+	border-top-width: 1px;
+}
+.nihilo .dijitSliderIncrementIconH,
+.nihilo .dijitSliderIncrementIconV {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -45px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -45px top;
+	width:15px; height:15px;
+}
+.nihilo .dijitSliderIncrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
+.nihilo .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDecrementIconV {
+	width:15px;
+	height:15px;
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -15px top;
+}
+.nihilo .dijitSliderDecrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat 0px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat 0px top;
+}
+.nihilo .dijitSliderButtonInner {
+	visibility:hidden;
+}
+.nihilo .dijitSliderReadOnly *,
+.nihilo .dijitSliderDisabled * {
+	border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5;
+	color: #bdbdbd;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconH {
+	background-position: 0px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconH,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconH {
+	background-position: -30px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderDecrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderDecrementIconV {
+	background-position: -15px -15px;
+}
+.nihilo .dijitSliderReadOnly .dijitSliderIncrementIconV,
+.nihilo .dijitSliderDisabled .dijitSliderIncrementIconV {
+	background-position: -45px -15px;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/form/Slider_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/form/Slider_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/form/Slider_rtl.css	(revision 9)
@@ -0,0 +1,29 @@
+
+.dijitRtl .nihilo .dijitSliderProgressBarH,
+.dijitRtl .nihilo .dijitSliderRemainingBarH,
+.dijitRtl .nihilo .dijitSliderLeftBumper,
+.dijitRtl .nihilo .dijitSliderRightBumper,
+.dijitRtl .nihilo .dijitSliderTopBumper {
+	background-position: top right;
+}
+.dijitRtl .nihilo .dijitSliderProgressBarV,
+.dijitRtl .nihilo .dijitSliderRemainingBarV,
+.dijitRtl .nihilo .dijitSliderBottomBumper {
+	background-position: bottom right;
+}
+.dijitRtl .nihilo .dijitSliderLeftBumper {
+	border-left-width: 0px;
+	border-right-width: 1px;
+}
+.dijitRtl .nihilo .dijitSliderRightBumper {
+	border-left-width: 1px;
+	border-right-width: 0px;
+}
+.dijitRtl .nihilo .dijitSliderIncrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat left top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat left top;
+}
+.dijitRtl .nihilo .dijitSliderDecrementIconH {
+	background:url('../images/spriteRoundedIconsSmall.png') no-repeat -30px top;
+	#background:url('../images/spriteRoundedIconsSmall.gif') no-repeat -30px top;
+}
Index: trunk/web/dojo/dijit/themes/nihilo/TimePicker_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/TimePicker_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/TimePicker_rtl.css	(revision 9)
@@ -0,0 +1,4 @@
+.dj_ie6-rtl .nihilo .dijitTimePickerMarkerHover,
+.dj_ie7-rtl .nihilo .dijitTimePickerMarkerHover {
+        border-top: 0px; 
+}
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVertical.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVertical.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVertical.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVertical.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVertical.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndCopy.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/dndCopy.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/dndCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/dndCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/titleBarActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/titleBarActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/titleBarActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/titleBarActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/titleBarActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverSpriteLR.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/buttonActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/buttonActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/buttonActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/treeI_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/treeI_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/treeI_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripe.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripe.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabStripe.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabStripe.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabStripe.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/buttonHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/buttonHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/buttonHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteArrows.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteDivIcons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeLeft.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeLeft.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabStripeLeft.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabStripeLeft.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeLeft.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeHover.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeHover.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/treeHover.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/treeHover.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/treeHover.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonDisabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/buttonDisabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/buttonDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/buttonDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeBottom.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeBottom.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabStripeBottom.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabStripeBottom.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeBottom.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI_half_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI_half_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/treeI_half_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/treeI_half_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/treeI_half_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/warning.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/warning.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/warning.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/warning.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/warning.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeRight.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeRight.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabStripeRight.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabStripeRight.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabStripeRight.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabContainerSprite.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabContainerSprite.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabContainerSprite.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabContainerSprite.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabContainerSprite.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/treeI.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/treeI.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/treeI.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorUp.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabRightChecked.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabRightChecked.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabRightChecked.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabRightChecked.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabRightChecked.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteCheckbox.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVerticalFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVerticalFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVerticalFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVerticalFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullVerticalFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderEmpty.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderEmpty.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderEmpty.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderEmpty.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderEmpty.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFull.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFull.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderFull.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderFull.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderFull.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderFullFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderFullFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderFullFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/titleBar.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/titleBar.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/titleBar.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/titleBar.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/titleBar.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/progressBarEmpty.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/progressBarEmpty.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/progressBarEmpty.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/progressBarEmpty.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/progressBarEmpty.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveC.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveC.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveC.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveC.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveC.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledSpriteLR.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI_half.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeI_half.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/treeI_half.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/treeI_half.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/treeI_half.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverC.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverC.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverC.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverC.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomHoverC.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/buttonEnabled.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/buttonEnabled.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/buttonEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/buttonEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree_rtl.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerH-thumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorLeft.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderThumbFocus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/validationInputBg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteRadio.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabLeftChecked.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabLeftChecked.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabLeftChecked.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabLeftChecked.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabLeftChecked.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/progressBarFull.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/progressBarFull.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/progressBarFull.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/progressBarFull.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/progressBarFull.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/accordionItemActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/accordionItemActive.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/accordionItemActive.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/accordionItemActive.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/accordionItemActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeExpand_loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/treeExpand_loading.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/treeExpand_loading.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/treeExpand_loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/treeExpand_loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/splitContainerSizerV-thumb.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumb.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/preciseSliderThumbFocus.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/progressBarAnim.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/progressBarAnim.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/progressBarAnim.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/progressBarAnim.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/progressBarAnim.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorRight.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteTree.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndNoMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndNoMove.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/dndNoMove.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/dndNoMove.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/dndNoMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledC.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledC.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledC.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledC.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomEnabledC.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderEmptyVertical.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/sliderEmptyVertical.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/sliderEmptyVertical.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/sliderEmptyVertical.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/sliderEmptyVertical.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndMove.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndMove.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/dndMove.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/dndMove.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/dndMove.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tabBottomActiveSpriteLR.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndNoCopy.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/dndNoCopy.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/dndNoCopy.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/dndNoCopy.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/dndNoCopy.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.png
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.png	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.png	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/tooltipConnectorDown.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/images/no.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dijit/themes/nihilo/images/no.gif
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/images/no.gif	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/images/no.gif	(revision 9)

Property changes on: trunk/web/dojo/dijit/themes/nihilo/images/no.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dijit/themes/nihilo/Tree_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Tree_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Tree_rtl.css	(revision 9)
@@ -0,0 +1,18 @@
+
+.dijitRtl .nihilo .dijitTreeNode,
+.dijitRtl .nihilo .dijitTreeExpandoLeaf {
+	
+    background-image: none;
+}
+.dijitRtl .nihilo .dijitTreeContent {
+    padding-left: 0px;
+    padding-right: 1px;
+}
+.dijitRtl .nihilo .dijitTreeExpandoOpened {
+	
+	background: url('images/spriteTree_rtl.gif') no-repeat -18px top;
+}
+.dijitRtl .nihilo .dijitTreeExpandoClosed {
+	
+	background-image: url('images/spriteTree_rtl.gif');
+}
Index: trunk/web/dojo/dijit/themes/nihilo/Dialog_rtl.css
===================================================================
--- trunk/web/dojo/dijit/themes/nihilo/Dialog_rtl.css	(revision 0)
+++ trunk/web/dojo/dijit/themes/nihilo/Dialog_rtl.css	(revision 9)
@@ -0,0 +1,5 @@
+
+.dijitRtl .nihilo .dijitDialogTitleBar .dijitDialogCloseIcon {
+	right: auto;
+	left: 5px;
+}
Index: trunk/web/dojo/dijit/_Container.js
===================================================================
--- trunk/web/dojo/dijit/_Container.js	(revision 0)
+++ trunk/web/dojo/dijit/_Container.js	(revision 9)
@@ -0,0 +1,62 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit._Container"]){
+dojo._hasResource["dijit._Container"]=true;
+dojo.provide("dijit._Container");
+dojo.declare("dijit._Container",null,{isContainer:true,buildRendering:function(){
+this.inherited(arguments);
+if(!this.containerNode){
+this.containerNode=this.domNode;
+}
+},addChild:function(_1,_2){
+var _3=this.containerNode;
+if(_2&&typeof _2=="number"){
+var _4=this.getChildren();
+if(_4&&_4.length>=_2){
+_3=_4[_2-1].domNode;
+_2="after";
+}
+}
+dojo.place(_1.domNode,_3,_2);
+if(this._started&&!_1._started){
+_1.startup();
+}
+},removeChild:function(_5){
+if(typeof _5=="number"&&_5>0){
+_5=this.getChildren()[_5];
+}
+if(_5){
+var _6=_5.domNode;
+if(_6&&_6.parentNode){
+_6.parentNode.removeChild(_6);
+}
+}
+},hasChildren:function(){
+return this.getChildren().length>0;
+},destroyDescendants:function(_7){
+dojo.forEach(this.getChildren(),function(_8){
+_8.destroyRecursive(_7);
+});
+},_getSiblingOfChild:function(_9,_a){
+var _b=_9.domNode,_c=(_a>0?"nextSibling":"previousSibling");
+do{
+_b=_b[_c];
+}while(_b&&(_b.nodeType!=1||!dijit.byNode(_b)));
+return _b&&dijit.byNode(_b);
+},getIndexOfChild:function(_d){
+return dojo.indexOf(this.getChildren(),_d);
+},startup:function(){
+if(this._started){
+return;
+}
+dojo.forEach(this.getChildren(),function(_e){
+_e.startup();
+});
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/nls/ko/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/ko/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ko/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ko/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/ko/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ko/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/sk/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/sk/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/sk/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/sk/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/sk/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/sk/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Zavádzanie...","errorState":"Nastala chyba"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_nl.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_nl.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_nl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl");dojo.nls.colors.nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl");dijit.nls.loading.nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl");dijit.nls.common.nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.nl");dijit._editor.nls.commands.nl={"removeFormat":"Opmaak verwijderen","copy":"Kopiëren","paste":"Plakken","selectAll":"Alles selecteren","insertOrderedList":"Genummerde lijst","insertTable":"Tabel invoegen/bewerken","print":"Afdrukken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","newPage":"Nieuwe pagina","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","fullScreen":"Volledig scherm in-/uitschakelen","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","viewSource":"HTML-bron bekijken","fontSize":"Lettergrootte","systemShortcut":"De actie \"${0}\" is alleen beschikbaar in uw browser via een sneltoetscombinatie. Gebruik ${1}.","indent":"Inspringen","redo":"Opnieuw","strikethrough":"Doorhalen","justifyFull":"Uitvullen","justifyCenter":"Centreren","hiliteColor":"Achtergrondkleur","deleteTable":"Tabel wissen","outdent":"Uitspringen","cut":"Knippen","plainFormatBlock":"Alineastijl","toggleDir":"Schrijfrichting wijzigen","bold":"Vet","tabIndent":"Inspringen","justifyRight":"Rechts uitlijnen","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl");dijit.form.nls.validate.nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl");dijit.form.nls.ComboBox.nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.nl");dijit._editor.nls.FontChoice.nl={"1":"xx-klein","2":"x-klein","formatBlock":"Opmaak","3":"klein","4":"gemiddeld","5":"groot","6":"x-groot","7":"xx-groot","fantasy":"fantasy","serif":"serif","p":"Alinea","pre":"Vooraf opgemaakt","sans-serif":"sans-serif","fontName":"Lettertype","h1":"Kop","h2":"Subkop","h3":"Sub-subkop","monospace":"monospace","fontSize":"Grootte","cursive":"cursief","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.nl");dijit._editor.nls.LinkDialog.nl={"text":"Beschrijving:","insertImageTitle":"Afbeeldingseigenschappen","set":"Instellen","newWindow":"Nieuw venster","topWindow":"Bovenste venster","target":"Doel:","createLinkTitle":"Linkeigenschappen","parentWindow":"Hoofdvenster","currentWindow":"Huidig venster","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl");dojo.cldr.nls.number.nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.nl");dojo.cldr.nls.currency.nl={"HKD_displayName":"Hongkongse dollar","CHF_displayName":"Zwitserse franc","CAD_displayName":"Canadese dollar","CNY_displayName":"Chinese yuan renminbi","AUD_displayName":"Australische dollar","JPY_displayName":"Japanse yen","USD_displayName":"Amerikaanse dollar","GBP_displayName":"Brits pond sterling","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.nl");dojo.cldr.nls.gregorian.nl={"dateFormatItem-yM":"M-y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"PM","field-minute":"Minuut","eraNames":["Voor Christus","na Christus"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"gisteren","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"eergisteren","dateFormatItem-MMdd":"dd-MM","field-day-relative+-3":"eereergisteren","days-standAlone-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"Tijdperk","field-hour":"Uur","dayPeriods-format-wide-am":"AM","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"vandaag","field-day-relative+1":"morgen","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"field-day-relative+2":"overmorgen","field-day-relative+3":"overovermorgen","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d-MM","dateFormat-medium":"d MMM y","dateFormatItem-yyMM":"MM-yy","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-ms":"mm:ss","field-year":"Jaar","field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-MMMd":"d-MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH:mm","field-month":"Maand","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormatItem-M":"L","days-format-narrow":["Z","M","D","W","D","V","Z"],"field-second":"Seconde","field-day":"Dag","dateFormatItem-MEd":"E d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"days-standAlone-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormat-short":"dd-MM-yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d-M","dateFormatItem-yMEd":"EEE d-M-y","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"eraNarrow":["v. Chr.","n. Chr."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/sl/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/sl/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/sl/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/sl/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/sl/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/sl/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_pl.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_pl.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_pl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_pl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pl");dojo.nls.colors.pl={"lightsteelblue":"jasny stalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"ciemnogranatowy","cadetblue":"niebieskoszary","seashell":"muszla","slategrey":"łupkowy szary","coral":"koralowy","darkturquoise":"ciemnoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"bladoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przytłumiony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"błękit królewski","deeppink":"głęboki różowy","lime":"limetkowy","oldlace":"bladopomarańczowy","chartreuse":"jaskrawozielony","darkcyan":"ciemny cyjan","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"kawowy","darkviolet":"ciemnofioletowy","lightslategrey":"jasny łupkowy szary","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"wodny","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni łupkowy niebieski","magenta":"magenta","lightseagreen":"jasna morska zieleń","cyan":"cyjan","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemnogliniany","slateblue":"łupkowy niebieski","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia morska zieleń","maroon":"bordowy","darkslategray":"ciemny łupkowy szary","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fioletowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowy brąz","pink":"różowy","firebrick":"ceglasty","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"cytrynowy","teal":"cyrankowy","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"purpurowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"melon","darkseagreen":"ciemna morska zieleń","lightcoral":"jasnokoralowy","palevioletred":"blady fioletowoczerwony","mediumpurple":"średnia purpura","saddlebrown":"skórzany brązowy","darkmagenta":"ciemna magenta","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fioletowy","lightskyblue":"jasny błękit nieba","goldenrod":"gliniany","mediumblue":"średni niebieski","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny łupkowy szary","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnogliniana żółć","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"łupkowy szary","palegoldenrod":"bladogliniany","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasny cyjan","powderblue":"pudrowy niebieski","blueviolet":"niebieskofioletowy","orchid":"orchidea","dimgray":"przytłumiony szary","beige":"beżowy","fuchsia":"fuksja","lavenderblush":"lawendoworóżowy","hotpink":"intensywny różowy","steelblue":"stalowy niebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"limetkowozielony","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny łupkowy szary","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"morska zieleń","darkslateblue":"ciemny łupkowy niebieski","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazur","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pl");dijit.nls.loading.pl={"loadingState":"Ładowanie...","errorState":"Niestety, wystąpił błąd"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pl");dijit.nls.common.pl={"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pl");dijit._editor.nls.commands.pl={"removeFormat":"Usuń formatowanie","copy":"Kopiuj","paste":"Wklej","selectAll":"Wybierz wszystko","insertOrderedList":"Lista numerowana","insertTable":"Wstaw/edytuj tabelę","print":"Drukuj","underline":"Podkreślenie","foreColor":"Kolor pierwszego planu","htmlToggle":"Źródło HTML","formatBlock":"Styl akapitu","newPage":"Nowa strona","insertHorizontalRule":"Linia pozioma","delete":"Usuń","insertUnorderedList":"Lista wypunktowana","tableProp":"Właściwość tabeli","insertImage":"Wstaw obraz","superscript":"Indeks górny","subscript":"Indeks dolny","createLink":"Utwórz odsyłacz","undo":"Cofnij","fullScreen":"Przełącz pełny ekran","italic":"Kursywa","fontName":"Nazwa czcionki","justifyLeft":"Wyrównaj do lewej","unlink":"Usuń odsyłacz","toggleTableBorder":"Przełącz ramkę tabeli","viewSource":"Wyświetl kod źródłowy HTML","ctrlKey":"Ctrl+${0}","fontSize":"Wielkość czcionki","systemShortcut":"Działanie ${0} jest dostępne w tej przeglądarce wyłącznie przy użyciu skrótu klawiaturowego. Należy użyć klawiszy ${1}.","indent":"Wcięcie","redo":"Ponów","strikethrough":"Przekreślenie","justifyFull":"Wyrównaj do lewej i prawej","justifyCenter":"Wyrównaj do środka","hiliteColor":"Kolor tła","deleteTable":"Usuń tabelę","outdent":"Usuń wcięcie","cut":"Wytnij","plainFormatBlock":"Styl akapitu","toggleDir":"Przełącz kierunek","bold":"Pogrubienie","tabIndent":"Wcięcie o tabulator","justifyRight":"Wyrównaj do prawej","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pl");dijit.form.nls.validate.pl={"rangeMessage":"Ta wartość jest spoza zakresu.","invalidMessage":"Wprowadzona wartość jest niepoprawna.","missingMessage":"Ta wartość jest wymagana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pl");dijit.form.nls.ComboBox.pl={"previousMessage":"Poprzednie wybory","nextMessage":"Więcej wyborów"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pl");dijit._editor.nls.FontChoice.pl={"1":"najmniejsza","2":"mniejsza","formatBlock":"Format","3":"mała","4":"średnia","5":"duża","6":"większa","7":"największa","fantasy":"fantazyjna","serif":"szeryfowa","p":"Akapit","pre":"Wstępnie sformatowane","sans-serif":"bezszeryfowa","fontName":"Czcionka","h1":"Nagłówek","h2":"Nagłówek 2-go poziomu","h3":"Nagłówek 3-go poziomu","monospace":"czcionka o stałej szerokości","fontSize":"Wielkość","cursive":"kursywa","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pl");dijit._editor.nls.LinkDialog.pl={"text":"Opis:","insertImageTitle":"Właściwości obrazu","set":"Ustaw","newWindow":"Nowe okno","topWindow":"Okno najwyższego poziomu","target":"Cel:","createLinkTitle":"Właściwości odsyłacza","parentWindow":"Okno macierzyste","currentWindow":"Bieżące okno","url":"Adres URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pl");dojo.cldr.nls.currency.pl={"HKD_displayName":"dolar hongkoński","CHF_displayName":"frank szwajcarski","CAD_displayName":"dolar kanadyjski","CNY_displayName":"juan renminbi","AUD_displayName":"dolar australijski","JPY_displayName":"jen japoński","USD_displayName":"dolar amerykański ","GBP_displayName":"funt szterling","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pl");dojo.cldr.nls.gregorian.pl={"months-format-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"field-weekday":"Dzień tygodnia","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d-M-y","dateFormatItem-MMMEd":"d MMM E","eraNarrow":["p.n.e.","n.e."],"dayPeriods-format-wide-earlyMorning":"nad ranem","dayPeriods-format-wide-morning":"rano","dateFormat-long":"d MMMM y","months-format-wide":["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia"],"dayPeriods-format-wide-evening":"wieczorem","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d-M","dayPeriods-format-wide-noon":"w południe","field-era":"Era","dateFormatItem-yM":"M-y","months-standAlone-wide":["styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],"timeFormat-short":"HH:mm","quarters-format-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"timeFormat-long":"HH:mm:ss z","field-year":"Rok","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"Godzina","dateFormatItem-MMdd":"dd-MM","months-format-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"Dzisiaj","field-day-relative+1":"Jutro","field-day-relative+2":"Pojutrze","field-day-relative+3":"Za trzy dni","months-standAlone-abbr":["sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["I kwartał","II kwartał","III kwartał","IV kwartał"],"dateFormatItem-M":"L","days-standAlone-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1 kw.","2 kw.","3 kw.","4 kw."],"eraAbbr":["p.n.e.","n.e."],"field-minute":"Minuta","field-dayperiod":"Dayperiod","days-standAlone-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"dayPeriods-format-wide-night":"w nocy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Wczoraj","dateFormatItem-h":"hh a","field-day-relative+-2":"Przedwczoraj","field-day-relative+-3":"Trzy dni temu","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d-M","dayPeriods-format-wide-lateMorning":"przed południem","dateFormatItem-yMMMM":"LLLL y","field-day":"Dzień","days-format-wide":["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],"field-zone":"Strefa","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["s","l","m","k","m","c","l","s","w","p","l","g"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["niedz.","pon.","wt.","śr.","czw.","pt.","sob."],"eraNames":["p.n.e.","n.e."],"days-format-narrow":["N","P","W","Ś","C","P","S"],"field-month":"Miesiąc","days-standAlone-narrow":["N","P","W","Ś","C","P","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd-MM-yyyy","dayPeriods-format-wide-afternoon":"po południu","field-second":"Sekunda","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"Tydzień","dateFormat-medium":"dd-MM-yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yMMM":"y MMM","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_th.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_th.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_th.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_th");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.th");dojo.nls.colors.th={"lightsteelblue":"light steel blue","orangered":"ส้มแกมแดง","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"เทาเข้ม","ivory":"งาช้าง","greenyellow":"เขียวแกมเหลือง","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"เงิน","dimgrey":"dim gray","orange":"ส้ม","white":"ขาว","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"ชมพูเข้ม","lime":"เหลืองมะนาว","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"เขียวแกมน้ำเงินเข้ม","yellow":"เหลือง","linen":"linen","olive":"โอลีฟ","gold":"ทอง","lawngreen":"lawn green","lightyellow":"เหลืองอ่อน","tan":"tan","darkviolet":"ม่วงเข้ม","lightslategrey":"light slate gray","grey":"เทา","darkkhaki":"dark khaki","green":"เขียว","deepskyblue":"deep sky blue","aqua":"ฟ้าน้ำทะเล","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"แดงแกมม่วง","lightseagreen":"light sea green","cyan":"เขียวแกมน้ำเงิน","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"ม่วงลาเวนเดอร์","mediumseagreen":"medium sea green","maroon":"น้ำตาลแดง","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"น้ำเงินเข้ม","mediumvioletred":"medium violet-red","brown":"น้ำตาล","lightgray":"เทาอ่อน","sandybrown":"sandy brown","pink":"ชมพู","firebrick":"สีอิฐ","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"ช็อกโกแลต","springgreen":"spring green","moccasin":"ม็อคค่า","navy":"น้ำเงินเข้ม","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"ม่วง","gainsboro":"gainsboro","plum":"plum","red":"แดง","blue":"น้ำเงิน","forestgreen":"forest green","darkgreen":"เขียวเข้ม","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"แดงแกมม่วงเข้ม","thistle":"thistle","whitesmoke":"ขาวควัน","wheat":"wheat","violet":"ม่วง","lightskyblue":"ฟ้าอ่อน","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"แดงเลือดหมู","darksalmon":"dark salmon","darkred":"แดงเข้ม","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"เทาอ่อน","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"ส้มเข้ม","aquamarine":"aquamarine","lightgreen":"เขียวอ่อน","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"เทาเข้ม","lightcyan":"เขียวแกมน้ำเงินอ่อน","powderblue":"powder blue","blueviolet":"น้ำเงินม่วง","orchid":"orchid","dimgray":"dim gray","beige":"น้ำตาลเบจ","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"ชมพูอ่อน","limegreen":"เขียวมะนาว","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"เทา","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"ดำ","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"น้ำเงินอ่อน","palegreen":"pale green","azure":"น้ำเงินฟ้า","peachpuff":"peach puff","darkolivegreen":"เขียวโอลีฟเข้ม","yellowgreen":"เหลืองแกมเขียว"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.th");dijit.nls.loading.th={"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.th");dijit.nls.common.th={"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.th");dijit._editor.nls.commands.th={"removeFormat":"ลบรูปแบบออก","copy":"คัดลอก","paste":"วาง","selectAll":"เลือกทั้งหมด","insertOrderedList":"ลำดับเลข","insertTable":"แทรก/แก้ไขตาราง","print":"พิมพ์","underline":"ขีดเส้นใต้","foreColor":"สีพื้นหน้า","htmlToggle":"ซอร์ส HTML","formatBlock":"ลักษณะย่อหน้า","newPage":"หน้าใหม่","insertHorizontalRule":"ไม้บรรทัดแนวนอน","delete":"ลบ","insertUnorderedList":"หัวข้อย่อย","tableProp":"คุณสมบัติตาราง","insertImage":"แทรกอิมเมจ","superscript":"ตัวยก","subscript":"ตัวห้อย","createLink":"สร้างลิงก์","undo":"เลิกทำ","fullScreen":"สลับจอภาพแบบเต็ม","italic":"ตัวเอียง","fontName":"ชื่อฟอนต์","justifyLeft":"จัดชิดซ้าย","unlink":"ลบลิงก์ออก","toggleTableBorder":"สลับเส้นขอบตาราง","viewSource":"ดูซอร์ส HTML","fontSize":"ขนาดฟอนต์","systemShortcut":"การดำเนินการ\"${0}\" ใช้งานได้เฉพาะกับเบราว์เซอร์ของคุณโดยใช้แป้นพิมพ์ลัด ใช้ ${1}","indent":"เพิ่มการเยื้อง","redo":"ทำซ้ำ","strikethrough":"ขีดทับ","justifyFull":"จัดชิดขอบ","justifyCenter":"จัดกึ่งกลาง","hiliteColor":"สีพื้นหลัง","deleteTable":"ลบตาราง","outdent":"ลดการเยื้อง","cut":"ตัด","plainFormatBlock":"ลักษณะย่อหน้า","toggleDir":"สลับทิศทาง","bold":"ตัวหนา","tabIndent":"เยื้องแท็บ","justifyRight":"จัดชิดขวา","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.th");dijit.form.nls.validate.th={"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.th");dijit.form.nls.ComboBox.th={"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.th");dijit._editor.nls.FontChoice.th={"1":"xx-small","2":"x-small","formatBlock":"รูปแบบ","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"ย่อหน้า","pre":"การกำหนดรูปแบบล่วงหน้า","sans-serif":"sans-serif","fontName":"ฟอนต์","h1":"ส่วนหัว","h2":"ส่วนหัวย่อย","h3":"ส่วนย่อยของส่วนหัวย่อย","monospace":"monospace","fontSize":"ขนาด","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.th");dijit._editor.nls.LinkDialog.th={"text":"รายละเอียด","insertImageTitle":"คุณสมบัติอิมเมจ","set":"ตั้งค่า","newWindow":"หน้าต่างใหม่","topWindow":"หน้าต่างบนสุด","target":"เป้าหมาย:","createLinkTitle":"คุณสมบัติลิงก์","parentWindow":"หน้าต่างหลัก","currentWindow":"หน้าต่างปัจจุบัน","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.th");dojo.cldr.nls.number.th={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;¤-#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.th");dojo.cldr.nls.currency.th={"HKD_displayName":"ดอลลาร์ฮ่องกง","CHF_displayName":"ฟรังก์สวิส","JPY_symbol":"¥","CAD_displayName":"ดอลลาร์แคนาดา","CNY_displayName":"หยวนเหรินหมินปี้ (สาธารณรัฐประชาชนจีน)","AUD_displayName":"ดอลลาร์ออสเตรเลีย","JPY_displayName":"เยนญี่ปุ่น","USD_displayName":"ดอลลาร์สหรัฐ","GBP_displayName":"ปอนด์สเตอร์ลิง (สหราชอาณาจักร)","EUR_displayName":"ยูโร","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.th");dojo.cldr.nls.gregorian.th={"months-format-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"field-weekday":"วันในสัปดาห์","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["ก่อน ค.ศ.","ค.ศ."],"dateFormat-long":"d MMMM y","months-format-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"dateTimeFormat-medium":"{1}, {0}","dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"หลังเที่ยง","dateFormat-full":"EEEEที่ d MMMM G y","dateFormatItem-Md":"d/M","field-era":"สมัย","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],"timeFormat-short":"H:mm","quarters-format-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"timeFormat-long":"H นาฬิกา m นาที ss วินาที z","field-year":"ปี","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ชั่วโมง","months-format-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"H นาฬิกา m นาที ss วินาที zzzz","field-day-relative+0":"วันนี้","field-day-relative+1":"พรุ่งนี้","field-day-relative+2":"มะรืนนี้","dateFormatItem-H":"H","field-day-relative+3":"สามวันต่อจากนี้","months-standAlone-abbr":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["ไตรมาส 1","ไตรมาส 2","ไตรมาส 3","ไตรมาส 4"],"dateFormatItem-M":"L","days-standAlone-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"dateFormatItem-MMMMd":"d MMMM","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["ปีก่อน ค.ศ.","ค.ศ."],"field-minute":"นาที","field-dayperiod":"ช่วงวัน","days-standAlone-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"เมื่อวาน","dateTimeFormat-long":"{1}, {0}","field-day-relative+-2":"เมื่อวานซืน","field-day-relative+-3":"สามวันก่อน","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateTimeFormat-full":"{1}, {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"วัน","days-format-wide":["วันอาทิตย์","วันจันทร์","วันอังคาร","วันพุธ","วันพฤหัสบดี","วันศุกร์","วันเสาร์"],"field-zone":"เขต","dateFormatItem-y":"y","months-standAlone-narrow":["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],"days-format-abbr":["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],"eraNames":["ปีก่อนคริสต์ศักราช","คริสต์ศักราช"],"days-format-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"field-month":"เดือน","days-standAlone-narrow":["อ","จ","อ","พ","พ","ศ","ส"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"ก่อนเที่ยง","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"d/M/yyyy","field-second":"วินาที","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"สัปดาห์","dateFormat-medium":"d MMM y","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1}, {0}","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_it.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_it.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_it.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it");dojo.nls.colors.it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it");dijit.nls.loading.it={"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it");dijit._editor.nls.commands.it={"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolinea","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Attiva/Disattiva bordo tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"La azione \"${0}\" è disponibile solo nel browser tramite un tasto di scelta rapida. Utilizzare ${1}.","indent":"Rientro","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Annulla rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Attiva/Disattiva direzione","bold":"Grassetto","tabIndent":"Rientro tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it");dijit.form.nls.validate.it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it");dijit.form.nls.ComboBox.it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.it");dijit._editor.nls.FontChoice.it={"1":"xx-small","2":"x-small","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragrafo","pre":"Preformattato","sans-serif":"sans-serif","fontName":"Carattere","h1":"Intestazione","h2":"Sottointestazione","h3":"Sottointestazione secondaria","monospace":"spaziatura fissa","fontSize":"Dimensione","cursive":"corsivo","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.it");dijit._editor.nls.LinkDialog.it={"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra superiore","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra padre","currentWindow":"Finestra corrente","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it");dojo.cldr.nls.currency.it={"HKD_displayName":"Dollaro di Hong Kong","CHF_displayName":"Franco Svizzero","CAD_displayName":"Dollaro Canadese","CNY_displayName":"Renmimbi Cinese","AUD_displayName":"Dollaro Australiano","JPY_displayName":"Yen Giapponese","USD_displayName":"Dollaro Statunitense","GBP_displayName":"Sterlina Inglese","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it");dojo.cldr.nls.gregorian.it={"months-format-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"field-weekday":"giorno della settimana","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-MMMEd":"EEE d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"dd MMMM y","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"dayPeriods-format-wide-pm":"p.","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"anno","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q-yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"oggi","field-day-relative+1":"domani","field-day-relative+2":"dopodomani","field-day-relative+3":"tra tre giorni","months-standAlone-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["aC","dC"],"field-minute":"minuto","field-dayperiod":"periodo del giorno","days-standAlone-abbr":["dom","lun","mar","mer","gio","ven","sab"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ieri","dateFormatItem-h":"hh a","field-day-relative+-2":"l'altro ieri","field-day-relative+-3":"tre giorni fa","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"giorno","days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"field-zone":"zona","dateFormatItem-y":"y","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"eraNames":["a.C.","d.C"],"days-format-narrow":["D","L","M","M","G","V","S"],"field-month":"mese","days-standAlone-narrow":["D","L","M","M","G","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"m.","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yy","field-second":"secondo","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"settimana","dateFormat-medium":"dd/MMM/y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_es-es.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_es-es.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_es-es.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_es-es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es_es");dojo.nls.colors.es_es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es_es");dijit.nls.loading.es_es={"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es_es");dijit._editor.nls.commands.es_es={"removeFormat":"Eliminar formato","copy":"Copiar","paste":"Pegar","selectAll":"Seleccionar todo","insertOrderedList":"Lista numerada","insertTable":"Insertar/Editar tabla","print":"Imprimir","underline":"Subrayado","foreColor":"Color de primer plano","htmlToggle":"Fuente HTML","formatBlock":"Estilo de párrafo","newPage":"Nueva página","insertHorizontalRule":"Regla horizontal","delete":"Suprimir","insertUnorderedList":"Lista con viñetas","tableProp":"Propiedad de tabla","insertImage":"Insertar imagen","superscript":"Superíndice","subscript":"Subíndice","createLink":"Crear enlace","undo":"Deshacer","fullScreen":"Conmutar pantalla completa","italic":"Cursiva","fontName":"Nombre de font","justifyLeft":"Alinear izquierda","unlink":"Eliminar enlace","toggleTableBorder":"Conmutar borde de tabla","viewSource":"Ver fuente HTML","ctrlKey":"control+${0}","fontSize":"Tamaño de font","systemShortcut":"La acción \"${0}\" sólo está disponible en su navegador mediante un atajo de teclado. Utilice ${1}.","indent":"Sangría","redo":"Rehacer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinear centro","hiliteColor":"Color de segundo plano","deleteTable":"Suprimir tabla","outdent":"Anular sangría","cut":"Cortar","plainFormatBlock":"Estilo de párrafo","toggleDir":"Conmutar dirección","bold":"Negrita","tabIndent":"Sangría de tabulador","justifyRight":"Alinear derecha","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es_es");dijit.form.nls.validate.es_es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es_es");dijit.form.nls.ComboBox.es_es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.es_es");dijit._editor.nls.FontChoice.es_es={"1":"xx-pequeño","2":"x-pequeño","formatBlock":"Formato","3":"pequeño","4":"medio","5":"grande","6":"x-grande","7":"xx-grande","fantasy":"fantasía","serif":"serif","p":"Párrafo","pre":"Preformateado","sans-serif":"sans-serif","fontName":"Font","h1":"Cabecera","h2":"Subcabecera","h3":"Sub-subcabecera","monospace":"espacio sencillo","fontSize":"Tamaño","cursive":"cursiva","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.es_es");dijit._editor.nls.LinkDialog.es_es={"text":"Descripción: ","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino: ","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es_es");dojo.cldr.nls.currency.es_es={"HKD_displayName":"dólar de Hong Kong","CHF_displayName":"franco suizo","CAD_displayName":"dólar canadiense","CNY_displayName":"yuan renminbi chino","AUD_displayName":"dólar australiano","JPY_displayName":"yen japonés","USD_displayName":"dólar estadounidense","GBP_displayName":"libra esterlina británica","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es_es");dojo.cldr.nls.gregorian.es_es={"months-format-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"día de la semana","dateFormatItem-yyQQQQ":"QQQQ 'de' yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["a.C.","d.C."],"dateFormatItem-MMMdd":"dd-MMM","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"año","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","field-hour":"hora","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"hoy","field-day-relative+1":"mañana","field-day-relative+2":"pasado mañana","field-day-relative+3":"Dentro de tres días","months-standAlone-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormatItem-MMMMd":"d 'de' MMMM","dateFormatItem-yyMMM":"MMM-yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"minuto","field-dayperiod":"periodo del día","days-standAlone-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ayer","dateFormatItem-h":"hh a","field-day-relative+-2":"antes de ayer","field-day-relative+-3":"Hace tres días","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"MMMM 'de' y","field-day":"día","days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"eraNames":["antes de Cristo","anno Dómini"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mes","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","field-second":"segundo","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"semana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_sl.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_sl.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_sl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_sl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sl");dojo.nls.colors.sl={"lightsteelblue":"svetlo jeklena modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"zelenkasto modra","seashell":"morska školjka","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"umazano siva","orange":"oranžna","white":"bela","navajowhite":"navajsko bela","royalblue":"kraljevsko modra","deeppink":"temno roza","lime":"rumeno zelena","oldlace":"stara čipka","chartreuse":"svetlo rumena zelena","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travnato zelena","lightyellow":"svetlo rumena","tan":"kožno rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno rumenkasto rjava","green":"zelena","deepskyblue":"temno nebesno modra","aqua":"akva","sienna":"siena","mintcream":"mentolno smetanasta","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"olivno sivo rjava","darkgoldenrod":"temno zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednje akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"prosojno bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično-rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"roza","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejna","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarsko modra","lemonchiffon":"limonina","teal":"zeleno modra","floralwhite":"cvetno bela","cornflowerblue":"plavično modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"pepelnato siva","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temno magenta","thistle":"osatna","whitesmoke":"umazano bela","wheat":"žitna","violet":"vijolična","lightskyblue":"svetlo nebesno modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebesno modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"mandljeva","aliceblue":"alice modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"grčav les","dodgerblue":"koruzno modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"smodniško modra","blueviolet":"modro vijolična","orchid":"orhidejna","dimgray":"umazano siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"bleščeča sivka","hotpink":"živo roza","steelblue":"jekleno modra","tomato":"paradižnikova","lightpink":"svetlo roza","limegreen":"citronsko zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejna","cornsilk":"koruzni laski","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"rumenkasto rjava","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurna","peachpuff":"breskova","darkolivegreen":"temno olivno zelena","yellowgreen":"rumeno zelena"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sl");dijit.nls.loading.sl={"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sl");dijit.nls.common.sl={"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.sl");dijit._editor.nls.commands.sl={"removeFormat":"Odstrani obliko zapisa","copy":"Prekopiraj","paste":"Prilepi","selectAll":"Izberi vse","insertOrderedList":"Oštevilčen seznam","insertTable":"Vstavi/uredi tabelo","print":"Natisni","underline":"Podčrtano","foreColor":"Barva ospredja","htmlToggle":"Izvorna koda HTML","formatBlock":"Slog odstavka","newPage":"Nova stran","insertHorizontalRule":"Vodoravno ravnilo","delete":"Izbriši","insertUnorderedList":"Naštevni seznam","tableProp":"Lastnost tabele","insertImage":"Vstavi sliko","superscript":"Nadpisano","subscript":"Podpisano","createLink":"Ustvari povezavo","undo":"Razveljavi","fullScreen":"Preklopi na celozaslonski način","italic":"Ležeče","fontName":"Ime pisave","justifyLeft":"Poravnaj levo","unlink":"Odstrani povezavo","toggleTableBorder":"Preklopi na rob tabele","viewSource":"Prikaži izvorno kodo HTML","fontSize":"Velikost pisave","systemShortcut":"Dejanje \"${0}\" lahko v vašem brskalniku uporabite samo z bližnjico na tipkovnici. Uporabite ${1}.","indent":"Zamik","redo":"Znova uveljavi","strikethrough":"Prečrtano","justifyFull":"Obojestranska poravnava","justifyCenter":"Poravnaj na sredino","hiliteColor":"Barva ozadja","deleteTable":"Izbriši tabelo","outdent":"Viseč odstavek","cut":"Izreži","plainFormatBlock":"Slog odstavka","toggleDir":"Preklopi na usmeritev","bold":"Krepko","tabIndent":"Zamik tabulatorja","justifyRight":"Poravnaj desno","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sl");dijit.form.nls.validate.sl={"rangeMessage":"Ta vrednost je zunaj obsega. ","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sl");dijit.form.nls.ComboBox.sl={"previousMessage":"Prejšnje možnosti","nextMessage":"Dodatne možnosti"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.sl");dijit._editor.nls.FontChoice.sl={"1":"xx-majhno","2":"x-majhno","formatBlock":"Oblika","3":"majhno","4":"srednje","5":"veliko","6":"x-veliko","7":"xx-veliko","fantasy":"fantasy","serif":"serif","p":"Odstavek","pre":"Vnaprej oblikovano","sans-serif":"sans-serif","fontName":"Pisava","h1":"Naslov","h2":"Podnaslov","h3":"Pod podnaslov","monospace":"monospace","fontSize":"Velikost","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.sl");dijit._editor.nls.LinkDialog.sl={"text":"Opis:","insertImageTitle":"Lastnosti slike","set":"Nastavi","newWindow":"Novo okno","topWindow":"Najvišje okno","target":"Cilj:","createLinkTitle":"Lastnosti povezave","parentWindow":"Nadrejeno okno","currentWindow":"Trenutno okno","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sl");dojo.cldr.nls.number.sl={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.sl");dojo.cldr.nls.currency.sl={"HKD_displayName":"hongkonški dolar","CHF_displayName":"švicarski frank","JPY_symbol":"¥","CAD_displayName":"kanadski dolar","CNY_displayName":"kitajski juan renminbi","USD_symbol":"$","AUD_displayName":"avstralski dolar","JPY_displayName":"japonski jen","USD_displayName":"ameriški dolar","GBP_displayName":"britanski funt","EUR_displayName":"evro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.sl");dojo.cldr.nls.gregorian.sl={"field-dayperiod":"Čas dneva","dayPeriods-format-wide-pm":"pop.","field-minute":"Minuta","eraNames":["pred našim štetjem","naše štetje"],"field-day-relative+-1":"Včeraj","field-weekday":"Dan v tednu","field-day-relative+-2":"Predvčerajšnjim","field-day-relative+-3":"Pred tremi dnevi","days-standAlone-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Doba","field-hour":"Ura","dayPeriods-format-wide-am":"dop.","dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"field-day-relative+0":"Danes","field-day-relative+1":"Jutri","days-standAlone-narrow":["n","p","t","s","č","p","s"],"eraAbbr":["pr. n. št.","po Kr."],"field-day-relative+2":"Pojutrišnjem","field-day-relative+3":"Čez tri dni","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"dd. MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Območje","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d. MMM. yyyy","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"dateFormatItem-ms":"mm:ss","field-year":"Leto","months-standAlone-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"field-week":"Teden","dateFormatItem-yyQ":"Q/yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","avg","sep","okt","nov","dec"],"timeFormat-short":"HH:mm","field-month":"Mesec","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormatItem-MMMMdd":"dd. MMMM","dateFormatItem-mmss":"mm:ss","days-format-narrow":["n","p","t","s","č","p","s"],"field-second":"Sekunda","field-day":"Dan","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"days-standAlone-abbr":["ned","pon","tor","sre","čet","pet","sob"],"dateFormat-short":"d. MM. yy","dateFormatItem-yyyyM":"M/yyyy","dateFormat-full":"EEEE, dd. MMMM y","dateFormatItem-Md":"d. M.","months-format-wide":["januar","februar","marec","april","maj","junij","julij","avgust","september","oktober","november","december"],"quarters-format-wide":["1. četrtletje","2. četrtletje","3. četrtletje","4. četrtletje"],"days-format-wide":["nedelja","ponedeljek","torek","sreda","četrtek","petek","sobota"],"eraNarrow":["pr. n. št.","po Kr."],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"dateFormatItem-d":"d","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/da/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/da/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/da/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/da/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/da/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/da/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_nl-nl.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_nl-nl.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_nl-nl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_nl-nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl_nl");dojo.nls.colors.nl_nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl_nl");dijit.nls.loading.nl_nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl_nl");dijit.nls.common.nl_nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.nl_nl");dijit._editor.nls.commands.nl_nl={"removeFormat":"Opmaak verwijderen","copy":"Kopiëren","paste":"Plakken","selectAll":"Alles selecteren","insertOrderedList":"Genummerde lijst","insertTable":"Tabel invoegen/bewerken","print":"Afdrukken","underline":"Onderstrepen","foreColor":"Voorgrondkleur","htmlToggle":"HTML-bron","formatBlock":"Alineastijl","newPage":"Nieuwe pagina","insertHorizontalRule":"Horizontale liniaal","delete":"Wissen","insertUnorderedList":"Lijst met opsommingstekens","tableProp":"Tabeleigenschap","insertImage":"Afbeelding invoegen","superscript":"Superscript","subscript":"Subscript","createLink":"Link maken","undo":"Ongedaan maken","fullScreen":"Volledig scherm in-/uitschakelen","italic":"Cursief","fontName":"Lettertype","justifyLeft":"Links uitlijnen","unlink":"Link verwijderen","toggleTableBorder":"Tabelkader wijzigen","viewSource":"HTML-bron bekijken","fontSize":"Lettergrootte","systemShortcut":"De actie \"${0}\" is alleen beschikbaar in uw browser via een sneltoetscombinatie. Gebruik ${1}.","indent":"Inspringen","redo":"Opnieuw","strikethrough":"Doorhalen","justifyFull":"Uitvullen","justifyCenter":"Centreren","hiliteColor":"Achtergrondkleur","deleteTable":"Tabel wissen","outdent":"Uitspringen","cut":"Knippen","plainFormatBlock":"Alineastijl","toggleDir":"Schrijfrichting wijzigen","bold":"Vet","tabIndent":"Inspringen","justifyRight":"Rechts uitlijnen","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl_nl");dijit.form.nls.validate.nl_nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl_nl");dijit.form.nls.ComboBox.nl_nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.nl_nl");dijit._editor.nls.FontChoice.nl_nl={"1":"xx-klein","2":"x-klein","formatBlock":"Opmaak","3":"klein","4":"gemiddeld","5":"groot","6":"x-groot","7":"xx-groot","fantasy":"fantasy","serif":"serif","p":"Alinea","pre":"Vooraf opgemaakt","sans-serif":"sans-serif","fontName":"Lettertype","h1":"Kop","h2":"Subkop","h3":"Sub-subkop","monospace":"monospace","fontSize":"Grootte","cursive":"cursief","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.nl_nl");dijit._editor.nls.LinkDialog.nl_nl={"text":"Beschrijving:","insertImageTitle":"Afbeeldingseigenschappen","set":"Instellen","newWindow":"Nieuw venster","topWindow":"Bovenste venster","target":"Doel:","createLinkTitle":"Linkeigenschappen","parentWindow":"Hoofdvenster","currentWindow":"Huidig venster","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl_nl");dojo.cldr.nls.number.nl_nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.nl_nl");dojo.cldr.nls.currency.nl_nl={"HKD_displayName":"Hongkongse dollar","CHF_displayName":"Zwitserse franc","CAD_displayName":"Canadese dollar","CNY_displayName":"Chinese yuan renminbi","AUD_displayName":"Australische dollar","JPY_displayName":"Japanse yen","USD_displayName":"Amerikaanse dollar","GBP_displayName":"Brits pond sterling","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.nl_nl");dojo.cldr.nls.gregorian.nl_nl={"dateFormatItem-yM":"M-y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"PM","field-minute":"Minuut","eraNames":["Voor Christus","na Christus"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"gisteren","field-weekday":"Dag van de week","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"eergisteren","dateFormatItem-MMdd":"dd-MM","field-day-relative+-3":"eereergisteren","days-standAlone-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-era":"Tijdperk","field-hour":"Uur","dayPeriods-format-wide-am":"AM","quarters-standAlone-abbr":["K1","K2","K3","K4"],"dateFormatItem-y":"y","timeFormat-full":"HH:mm:ss zzzz","months-standAlone-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"vandaag","field-day-relative+1":"morgen","days-standAlone-narrow":["Z","M","D","W","D","V","Z"],"eraAbbr":["v. Chr.","n. Chr."],"field-day-relative+2":"overmorgen","field-day-relative+3":"overovermorgen","dateFormatItem-yyyyMMMM":"MMMM y","dateFormat-long":"d MMMM y","timeFormat-medium":"HH:mm:ss","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-MMd":"d-MM","dateFormat-medium":"d MMM y","dateFormatItem-yyMM":"MM-yy","dateFormatItem-yyMMM":"MMM yy","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"dateFormatItem-ms":"mm:ss","field-year":"Jaar","field-week":"Week","months-standAlone-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-MMMd":"d-MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"HH:mm:ss z","months-format-abbr":["jan.","feb.","mrt.","apr.","mei","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"timeFormat-short":"HH:mm","field-month":"Maand","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["K1","K2","K3","K4"],"days-format-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormatItem-M":"L","days-format-narrow":["Z","M","D","W","D","V","Z"],"field-second":"Seconde","field-day":"Dag","dateFormatItem-MEd":"E d-M","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"days-standAlone-abbr":["zo","ma","di","wo","do","vr","za"],"dateFormat-short":"dd-MM-yy","dateFormatItem-yMMMEd":"EEE d MMM y","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d-M","dateFormatItem-yMEd":"EEE d-M-y","months-format-wide":["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["1e kwartaal","2e kwartaal","3e kwartaal","4e kwartaal"],"days-format-wide":["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],"eraNarrow":["v. Chr.","n. Chr."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_zh.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_zh.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_zh.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_zh");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh");dojo.nls.colors.zh={"lightsteelblue":"浅钢蓝色","orangered":"橙红色","midnightblue":"深蓝色","cadetblue":"灰蓝色","seashell":"海贝色","slategrey":"灰石色","coral":"珊瑚色","darkturquoise":"深粉蓝","antiquewhite":"古董白","mediumspringgreen":"间春绿色","salmon":"橙红","darkgrey":"深灰色","ivory":"象牙色","greenyellow":"绿黄色","mistyrose":"浅玫瑰色","lightsalmon":"淡橙色","silver":"银白色","dimgrey":"暗灰色","orange":"橙色","white":"白色","navajowhite":"纳瓦白","royalblue":"品蓝","deeppink":"深粉红色","lime":"淡黄绿色","oldlace":"老白色","chartreuse":"黄绿色","darkcyan":"深青绿","yellow":"黄色","linen":"亚麻色","olive":"橄榄绿","gold":"金黄色","lawngreen":"草绿色","lightyellow":"浅黄色","tan":"棕褐色","darkviolet":"深紫色","lightslategrey":"浅青灰","grey":"灰色","darkkhaki":"深卡其色","green":"绿色","deepskyblue":"深天蓝色","aqua":"浅绿色","sienna":"赭色","mintcream":"薄荷色","rosybrown":"褐玫瑰红","mediumslateblue":"间暗蓝色","magenta":"洋红色","lightseagreen":"浅海藻绿","cyan":"青蓝色","olivedrab":"草绿色","darkgoldenrod":"深金黄","slateblue":"石蓝色","mediumaquamarine":"间绿色","lavender":"淡紫色","mediumseagreen":"间海蓝色","maroon":"栗色","darkslategray":"深青灰","mediumturquoise":"间绿宝石色","ghostwhite":"苍白","darkblue":"深蓝","mediumvioletred":"间紫罗兰色","brown":"棕色","lightgray":"浅灰色","sandybrown":"沙褐色","pink":"粉红色","firebrick":"砖红","indigo":"靛青","snow":"雪白色","darkorchid":"深紫色","turquoise":"绿宝石色","chocolate":"巧克力色","springgreen":"春绿色","moccasin":"鹿皮色","navy":"藏青色","lemonchiffon":"柠檬绸色","teal":"水鸭色","floralwhite":"花白色","cornflowerblue":"浅蓝色","paleturquoise":"苍绿色","purple":"紫色","gainsboro":"淡灰色","plum":"杨李色","red":"红色","blue":"蓝色","forestgreen":"森林绿","darkgreen":"深绿色","honeydew":"蜜汁色","darkseagreen":"深海藻绿","lightcoral":"浅珊瑚色","palevioletred":"苍紫罗兰色","mediumpurple":"间紫色","saddlebrown":"重褐色","darkmagenta":"深洋红色","thistle":"蓟色","whitesmoke":"烟白色","wheat":"浅黄色","violet":"紫色","lightskyblue":"浅天蓝色","goldenrod":"金麒麟色","mediumblue":"间蓝色","skyblue":"天蓝色","crimson":"绯红色","darksalmon":"深橙红","darkred":"深红色","darkslategrey":"深青灰","peru":"秘鲁色","lightgrey":"浅灰色","lightgoldenrodyellow":"浅金黄色","blanchedalmond":"白杏色","aliceblue":"爱丽丝蓝","bisque":"桔黄色","slategray":"灰石色","palegoldenrod":"淡金黄色","darkorange":"深橙色","aquamarine":"碧绿色","lightgreen":"浅绿色","burlywood":"实木色","dodgerblue":"闪蓝色","darkgray":"深灰色","lightcyan":"浅青色","powderblue":"铁蓝","blueviolet":"蓝紫色","orchid":"紫色","dimgray":"暗灰色","beige":"米色","fuchsia":"紫红色","lavenderblush":"淡紫红","hotpink":"深粉红","steelblue":"钢蓝色","tomato":"西红柿色","lightpink":"浅粉红色","limegreen":"橙绿色","indianred":"印度红","papayawhip":"木瓜色","lightslategray":"浅青灰","gray":"灰色","mediumorchid":"间紫色","cornsilk":"米绸色","black":"黑色","seagreen":"海绿色","darkslateblue":"深青蓝","khaki":"卡其色","lightblue":"淡蓝色","palegreen":"淡绿色","azure":"天蓝色","peachpuff":"桃色","darkolivegreen":"深橄榄绿","yellowgreen":"黄绿色"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh");dijit.nls.loading.zh={"loadingState":"正在加载...","errorState":"对不起，发生了错误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh");dijit._editor.nls.commands.zh={"removeFormat":"除去格式","copy":"复制","paste":"粘贴","selectAll":"全选","insertOrderedList":"编号列表","insertTable":"插入/编辑表","print":"打印","underline":"下划线","foreColor":"前景色","htmlToggle":"HTML 源代码","formatBlock":"段落样式","newPage":"新建页面","insertHorizontalRule":"水平线","delete":"删除","insertUnorderedList":"符号列表","tableProp":"表属性","insertImage":"插入图像","superscript":"上标","subscript":"下标","createLink":"创建链接","undo":"撤销","fullScreen":"切换全屏幕","italic":"斜体","fontName":"字体名称","justifyLeft":"左对齐","unlink":"除去链接","toggleTableBorder":"切换表边框","viewSource":"查看 HTML 源代码","fontSize":"字体大小","systemShortcut":"只能在浏览器中通过键盘快捷方式执行“${0}”操作。使用 ${1}。","indent":"增加缩进","redo":"重做","strikethrough":"删除线","justifyFull":"对齐","justifyCenter":"居中","hiliteColor":"背景色","deleteTable":"删除表","outdent":"减少缩进","cut":"剪切","plainFormatBlock":"段落样式","toggleDir":"固定方向","bold":"粗体","tabIndent":"制表符缩进","justifyRight":"右对齐","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh");dijit.form.nls.validate.zh={"rangeMessage":"此值超出范围。","invalidMessage":"输入的值无效。","missingMessage":"此值是必需值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh");dijit.form.nls.ComboBox.zh={"previousMessage":"先前选项","nextMessage":"更多选项"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.zh");dijit._editor.nls.FontChoice.zh={"1":"XXS 号","2":"XS 号","formatBlock":"格式","3":"S 号","4":"M 号","5":"L 号","6":"XL 号","7":"XXL 号","fantasy":"虚线","serif":"有衬线","p":"段落","pre":"预设有格式的","sans-serif":"无衬线","fontName":"字体","h1":"标题","h2":"子标题","h3":"二级子标题","monospace":"等宽字体","fontSize":"大小","cursive":"草书","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.zh");dijit._editor.nls.LinkDialog.zh={"text":"描述：","insertImageTitle":"图像属性","set":"设置","newWindow":"新窗口","topWindow":"最顶部窗口","target":"目标：","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL："};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh");dojo.cldr.nls.currency.zh={"HKD_displayName":"港元","CHF_displayName":"瑞士法郎","CAD_displayName":"加拿大元","CNY_displayName":"人民币","AUD_displayName":"澳大利亚元","JPY_displayName":"日元","USD_displayName":"美元","CNY_symbol":"￥","GBP_displayName":"英镑","EUR_displayName":"欧元","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh");dojo.cldr.nls.gregorian.zh={"months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-weekday":"周天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"y年M月d日，E","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M-d","field-era":"时期","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季度","第2季度","第3季度","第4季度"],"timeFormat-long":"zah时mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年MMM","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","field-hour":"小时","dateFormatItem-MMdd":"MM-dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah时mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"后天","dateFormatItem-H":"H时","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季度","第2季度","第3季度","第4季度"],"dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1季","2季","3季","4季"],"eraAbbr":["公元前","公元"],"field-minute":"分钟","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateFormatItem-MEd":"M-dE","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"区域","dateFormatItem-y":"y年","months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["公元前","公元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dateFormat-short":"yy-M-d","dayPeriods-format-wide-afternoon":"下午","field-second":"秒钟","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-Ed":"d日E","field-week":"周","dateFormat-medium":"yyyy-M-d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_ROOT.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ROOT.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ROOT.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ROOT");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ROOT");dojo.nls.colors.ROOT={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ROOT");dijit.nls.loading.ROOT={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ROOT");dijit._editor.nls.commands.ROOT={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ROOT");dijit.form.nls.validate.ROOT={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ROOT");dijit.form.nls.ComboBox.ROOT={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ROOT");dijit._editor.nls.FontChoice.ROOT={"noFormat":"None","1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ROOT");dijit._editor.nls.LinkDialog.ROOT={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ROOT");dojo.cldr.nls.number.ROOT={"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ROOT");dojo.cldr.nls.currency.ROOT={"USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ROOT");dojo.cldr.nls.gregorian.ROOT={"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Day of the Week","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["BCE","CE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BCE","CE"],"field-minute":"Minute","field-dayperiod":"Dayperiod","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"field-day-relative+-1":"Yesterday","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","field-day":"Day","days-format-wide":["1","2","3","4","5","6","7"],"field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["BCE","CE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dateFormat-medium":"y MMM d","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_pt.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_pt.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_pt.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt");dijit.nls.loading.pt={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt");dijit._editor.nls.commands.pt={"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Impressão","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar pela Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho do teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor de segundo plano","deleteTable":"Excluir Tabela","outdent":"Não-chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar pela Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt");dijit.form.nls.validate.pt={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt");dijit.form.nls.ComboBox.pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pt");dijit._editor.nls.FontChoice.pt={"1":"extra-extra-pequeno","2":"extra-pequeno","formatBlock":"Formatar","3":"pequena","4":"médio","5":"grande","6":"extra-grande","7":"extra-extra-grande","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Fonte","h1":"Título","h2":"Subtítulo","h3":"Sub-subtítulo","monospace":"espaço simples","fontSize":"Tamanho","cursive":"cursiva","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pt");dijit._editor.nls.LinkDialog.pt={"text":"Descrição:","insertImageTitle":"Propriedades de Imagem","set":"Definir","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","createLinkTitle":"Propriedades de Link","parentWindow":"Janela Pai","currentWindow":"Janela Atual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt");dojo.cldr.nls.currency.pt={"HKD_displayName":"Dólar de Hong Kong","CHF_displayName":"Franco suíço","CAD_displayName":"Dólar canadense","CNY_displayName":"Yuan Renminbi chinês","AUD_displayName":"Dólar australiano","JPY_displayName":"Iene japonês","USD_displayName":"Dólar norte-americano","GBP_displayName":"Libra esterlina britânica","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt");dojo.cldr.nls.gregorian.pt={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","field-era":"Era","dateFormatItem-yM":"MM/yyyy","months-standAlone-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"timeFormat-short":"HH:mm","quarters-format-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","dateFormatItem-yQ":"yyyy Q","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH'h'mm'min'ss's' zzzz","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","months-standAlone-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"dateFormatItem-HHmmss":"HH'h'mm'min'ss's'","dateFormatItem-M":"L","days-standAlone-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","days-standAlone-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"field-zone":"Fuso","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"eraNames":["Antes de Cristo","Ano do Senhor"],"days-format-narrow":["D","S","T","Q","Q","S","S"],"field-month":"Mês","days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH'h'mm","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_pt-br.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_pt-br.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_pt-br.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_pt-br");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_br");dojo.nls.colors.pt_br={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_br");dijit.nls.loading.pt_br={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt_br");dijit._editor.nls.commands.pt_br={"removeFormat":"Remover Formato","copy":"Copiar","paste":"Colar","selectAll":"Selecionar Todos","insertOrderedList":"Lista Numerada","insertTable":"Inserir/Editar Tabela","print":"Impressão","underline":"Sublinhado","foreColor":"Cor do Primeiro Plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de Parágrafo","newPage":"Nova Página","insertHorizontalRule":"Régua Horizontal","delete":"Excluir","insertUnorderedList":"Lista com Marcadores","tableProp":"Propriedade da Tabela","insertImage":"Inserir Imagem","superscript":"Sobrescrito","subscript":"Subscrito","createLink":"Criar Link","undo":"Desfazer","fullScreen":"Comutar Tela Cheia","italic":"Itálico","fontName":"Nome da Fonte","justifyLeft":"Alinhar pela Esquerda","unlink":"Remover Link","toggleTableBorder":"Alternar Moldura da Tabela","viewSource":"Visualizar Origem HTML","fontSize":"Tamanho da Fonte","systemShortcut":"A ação \"${0}\" está disponível em seu navegador apenas usando um atalho do teclado. Use ${1}.","indent":"Recuar","redo":"Refazer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinhar pelo Centro","hiliteColor":"Cor de segundo plano","deleteTable":"Excluir Tabela","outdent":"Não-chanfrado","cut":"Recortar","plainFormatBlock":"Estilo de Parágrafo","toggleDir":"Comutar Direção","bold":"Negrito","tabIndent":"Recuo de Guia","justifyRight":"Alinhar pela Direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_br");dijit.form.nls.validate.pt_br={"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_br");dijit.form.nls.ComboBox.pt_br={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pt_br");dijit._editor.nls.FontChoice.pt_br={"1":"extra-extra-pequeno","2":"extra-pequeno","formatBlock":"Formatar","3":"pequena","4":"médio","5":"grande","6":"extra-grande","7":"extra-extra-grande","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Fonte","h1":"Título","h2":"Subtítulo","h3":"Sub-subtítulo","monospace":"espaço simples","fontSize":"Tamanho","cursive":"cursiva","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pt_br");dijit._editor.nls.LinkDialog.pt_br={"text":"Descrição:","insertImageTitle":"Propriedades de Imagem","set":"Definir","newWindow":"Nova Janela","topWindow":"Primeira Janela","target":"Destino:","createLinkTitle":"Propriedades de Link","parentWindow":"Janela Pai","currentWindow":"Janela Atual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt_br");dojo.cldr.nls.currency.pt_br={"HKD_displayName":"Dólar de Hong Kong","CHF_displayName":"Franco suíço","CAD_displayName":"Dólar canadense","CNY_displayName":"Yuan Renminbi chinês","AUD_displayName":"Dólar australiano","JPY_displayName":"Iene japonês","USD_displayName":"Dólar norte-americano","GBP_displayName":"Libra esterlina britânica","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt_br");dojo.cldr.nls.gregorian.pt_br={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","field-era":"Era","dateFormatItem-yM":"MM/yyyy","months-standAlone-wide":["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"],"timeFormat-short":"HH:mm","quarters-format-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","dateFormatItem-yQ":"yyyy Q","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH'h'mm'min'ss's' zzzz","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","months-standAlone-abbr":["jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1º trimestre","2º trimestre","3º trimestre","4º trimestre"],"dateFormatItem-HHmmss":"HH'h'mm'min'ss's'","dateFormatItem-M":"L","days-standAlone-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","days-standAlone-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","days-format-wide":["domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado"],"field-zone":"Fuso","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dom","seg","ter","qua","qui","sex","sáb"],"eraNames":["Antes de Cristo","Ano do Senhor"],"days-format-narrow":["D","S","T","Q","Q","S","S"],"field-month":"Mês","days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH'h'mm","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Loading...","errorState":"Sorry, an error occurred"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/de/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/de/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/de/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/de/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/de/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/de/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/sv/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/sv/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/sv/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/sv/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/sv/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/sv/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Läser in...","errorState":"Det uppstod ett fel."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/he/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/he/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/he/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/he/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/he/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/he/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_fi-fi.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_fi-fi.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_fi-fi.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_fi-fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi_fi");dojo.nls.colors.fi_fi={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi_fi");dijit.nls.loading.fi_fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi_fi");dijit.nls.common.fi_fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fi_fi");dijit._editor.nls.commands.fi_fi={"removeFormat":"Poista muotoilu","copy":"Kopioi","paste":"Liitä","selectAll":"Valitse kaikki","insertOrderedList":"Numeroitu luettelo","insertTable":"Lisää taulukko/muokkaa taulukkoa","print":"Tulosta","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","newPage":"Uusi sivu","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Yläindeksi","subscript":"Alaindeksi","createLink":"Luo linkki","undo":"Kumoa","fullScreen":"Vaihda koko näyttö","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","viewSource":"Näytä HTML-lähde","fontSize":"Fontin koko","systemShortcut":"Toiminto \"${0}\" on käytettävissä selaimessa vain näppäimistön pikatoiminnolla. Käytä seuraavaa: ${1}.","indent":"Sisennä","redo":"Tee uudelleen","strikethrough":"Yliviivaus","justifyFull":"Tasaus","justifyCenter":"Tasaus keskelle","hiliteColor":"Taustaväri","deleteTable":"Poista taulukko","outdent":"Ulonna","cut":"Leikkaa","plainFormatBlock":"Kappaletyyli","toggleDir":"Vaihda suuntaa","bold":"Lihavointi","tabIndent":"Sarkainsisennys","justifyRight":"Tasaus oikealle","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi_fi");dijit.form.nls.validate.fi_fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi_fi");dijit.form.nls.ComboBox.fi_fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fi_fi");dijit._editor.nls.FontChoice.fi_fi={"1":"xx-small","2":"x-small","formatBlock":"Muoto","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Kappale","pre":"Esimuotoiltu","sans-serif":"sans-serif","fontName":"Fontti","h1":"Otsikko","h2":"Alatason otsikko","h3":"Alimman tason otsikko","monospace":"monospace","fontSize":"Koko","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fi_fi");dijit._editor.nls.LinkDialog.fi_fi={"text":"Kuvaus:","insertImageTitle":"Kuvan ominaisuudet","set":"Aseta","newWindow":"Uusi ikkuna","topWindow":"Päällimmäinen ikkuna","target":"Kohde:","createLinkTitle":"Linkin ominaisuudet","parentWindow":"Pääikkuna","currentWindow":"Nykyinen ikkuna","url":"URL-osoite:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi_fi");dojo.cldr.nls.number.fi_fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fi_fi");dojo.cldr.nls.currency.fi_fi={"HKD_displayName":"Hongkongin dollari","CHF_displayName":"Sveitsin frangi","CHF_symbol":"CHF","JPY_symbol":"¥","HKD_symbol":"HKD","CAD_displayName":"Kanadan dollari","CNY_displayName":"Kiinan yuan","USD_symbol":"$","AUD_displayName":"Australian dollari","JPY_displayName":"Japanin jeni","CAD_symbol":"CAD","USD_displayName":"Yhdysvaltain dollari","CNY_symbol":"CNY","GBP_displayName":"Englannin punta","AUD_symbol":"AUD","EUR_displayName":"euro","GBP_symbol":"£","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fi_fi");dojo.cldr.nls.gregorian.fi_fi={"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"field-weekday":"viikonpäivä","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["eKr.","jKr."],"dateFormat-long":"d. MMMM y","months-format-wide":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-EEEd":"EEE d.","dayPeriods-format-wide-pm":"ip.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dayPeriods-standAlone-wide-pm":"ip.","dayPeriods-format-abbr-am":"ap.","field-era":"aikakausi","dateFormatItem-yM":"L.yyyy","months-standAlone-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"timeFormat-short":"H.mm","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"timeFormat-long":"H.mm.ss z","field-year":"vuosi","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q/yyyy","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"tunti","months-format-abbr":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-yyQ":"Q/yy","timeFormat-full":"H.mm.ss zzzz","dateFormatItem-yyyyMEEEd":"EEE d.M.yyyy","field-day-relative+0":"tänään","field-day-relative+1":"huomenna","field-day-relative+2":"ylihuomenna","dateFormatItem-H":"H","months-standAlone-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"quarters-standAlone-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"dateFormatItem-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-yyMMM":"LLLL yy","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"eraAbbr":["eKr.","jKr."],"field-minute":"minuutti","field-dayperiod":"ap./ip.","days-standAlone-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"eilen","field-day-relative+-2":"toissapäivänä","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","field-day":"päivä","dateFormatItem-yMMMMccccd":"cccc, d. MMMM y","days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"field-zone":"aikavyöhyke","dateFormatItem-y":"y","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"dateFormatItem-yyMM":"M/yy","dateFormatItem-hm":"h.mm a","dayPeriods-format-abbr-pm":"ip.","days-format-abbr":["su","ma","ti","ke","to","pe","la"],"eraNames":["ennen Kristuksen syntymää","jälkeen Kristuksen syntymän"],"days-format-narrow":["S","M","T","K","T","P","L"],"field-month":"kuukausi","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"ap.","dayPeriods-standAlone-wide-am":"ap.","dateFormat-short":"d.M.yyyy","field-second":"sekunti","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"viikko","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"H.mm.ss","dateFormatItem-hms":"h.mm.ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_xx.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_xx.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_xx.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_xx");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.xx");dojo.nls.colors.xx={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.xx");dijit.nls.loading.xx={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.xx");dijit._editor.nls.commands.xx={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.xx");dijit.form.nls.validate.xx={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.xx");dijit.form.nls.ComboBox.xx={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.xx");dijit._editor.nls.FontChoice.xx={"noFormat":"None","1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.xx");dijit._editor.nls.LinkDialog.xx={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.xx");dojo.cldr.nls.number.xx={"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.xx");dojo.cldr.nls.currency.xx={"USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.xx");dojo.cldr.nls.gregorian.xx={"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Day of the Week","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["BCE","CE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"y MMMM d","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BCE","CE"],"field-minute":"Minute","field-dayperiod":"Dayperiod","days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"field-day-relative+-1":"Yesterday","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","field-day":"Day","days-format-wide":["1","2","3","4","5","6","7"],"field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["BCE","CE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"yyyy-MM-dd","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dateFormat-medium":"y MMM d","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_cs.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_cs.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_cs.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_cs");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.cs");dojo.nls.colors.cs={"lightsteelblue":"světlá ocelová modrá","orangered":"oranžovočervená","midnightblue":"temně modrá","cadetblue":"šedomodrá","seashell":"lasturová","slategrey":"břidlicová šedá","coral":"korálová červená","darkturquoise":"tmavě tyrkysová","antiquewhite":"krémově bílá","mediumspringgreen":"střední jarní zelená","salmon":"lososová","darkgrey":"tmavě šedá","ivory":"slonovinová","greenyellow":"zelenožlutá","mistyrose":"růžovobílá","lightsalmon":"světle lososová","silver":"stříbrná","dimgrey":"kouřově šedá","orange":"oranžová","white":"bílá","navajowhite":"světle krémová","royalblue":"královská modrá","deeppink":"sytě růžová","lime":"limetková","oldlace":"světle béžová","chartreuse":"chartreuska","darkcyan":"tmavě azurová","yellow":"žlutá","linen":"bledě šedobéžová","olive":"olivová","gold":"zlatá","lawngreen":"jasně zelená","lightyellow":"bledě žlutá","tan":"šedobéžová","darkviolet":"tmavě fialová","lightslategrey":"světlá břidlicová šedá","grey":"šedá","darkkhaki":"pískově hnědá","green":"zelená","deepskyblue":"sytá nebeská modrá","aqua":"azurová","sienna":"siena","mintcream":"mentolová","rosybrown":"růžovohnědá","mediumslateblue":"střední břidlicová modrá","magenta":"purpurová","lightseagreen":"světlá mořská zelená","cyan":"azurová","olivedrab":"khaki","darkgoldenrod":"tmavě béžová","slateblue":"břidlicová modrá","mediumaquamarine":"střední akvamarínová","lavender":"levandulová","mediumseagreen":"střední mořská zelená","maroon":"kaštanová","darkslategray":"tmavá břidlicová šedá","mediumturquoise":"středně tyrkysová","ghostwhite":"modravě bílá","darkblue":"tmavě modrá","mediumvioletred":"středně fialovočervená","brown":"červenohnědá","lightgray":"světle šedá","sandybrown":"oranžovohnědá","pink":"růžová","firebrick":"cihlová","indigo":"indigově modrá","snow":"sněhobílá","darkorchid":"tmavě orchidejová","turquoise":"tyrkysová","chocolate":"hnědobéžová","springgreen":"jarní zelená","moccasin":"bledě krémová","navy":"námořnická modrá","lemonchiffon":"světle citrónová","teal":"šedozelená","floralwhite":"květinově bílá","cornflowerblue":"chrpově modrá","paleturquoise":"bledě tyrkysová","purple":"nachová","gainsboro":"bledě šedá","plum":"švestková","red":"červená","blue":"modrá","forestgreen":"lesní zelená","darkgreen":"tmavě zelená","honeydew":"nazelenalá","darkseagreen":"tmavá mořská zelená","lightcoral":"světle korálová","palevioletred":"bledě fialovočervená","mediumpurple":"středně nachová","saddlebrown":"hnědá","darkmagenta":"tmavě purpurová","thistle":"bodláková","whitesmoke":"kouřově bílá","wheat":"zlatohnědá","violet":"fialová","lightskyblue":"světlá nebeská modrá","goldenrod":"béžová","mediumblue":"středně modrá","skyblue":"nebeská modrá","crimson":"karmínová","darksalmon":"tmavě lososová","darkred":"tmavě červená","darkslategrey":"tmavá břidlicová šedá","peru":"karamelová","lightgrey":"světle šedá","lightgoldenrodyellow":"světle žlutá","blanchedalmond":"mandlová","aliceblue":"modravá","bisque":"bledě oranžová","slategray":"břidlicová šedá","palegoldenrod":"bledě písková","darkorange":"tmavě oranžová","aquamarine":"akvamarínová","lightgreen":"světle zelená","burlywood":"krémová","dodgerblue":"jasně modrá","darkgray":"tmavě šedá","lightcyan":"světle azurová","powderblue":"bledě modrá","blueviolet":"modrofialová","orchid":"orchidejová","dimgray":"kouřově šedá","beige":"bledě béžová","fuchsia":"fuchsiová","lavenderblush":"levandulová růžová","hotpink":"jasně růžová","steelblue":"ocelová modrá","tomato":"tomatová","lightpink":"světle růžová","limegreen":"limetkově zelená","indianred":"indiánská červená","papayawhip":"papájová","lightslategray":"světlá břidlicová šedá","gray":"šedá","mediumorchid":"středně orchidejová","cornsilk":"režná","black":"černá","seagreen":"mořská zelená","darkslateblue":"tmavá břidlicová modrá","khaki":"písková","lightblue":"světle modrá","palegreen":"bledě zelená","azure":"bledě azurová","peachpuff":"broskvová","darkolivegreen":"tmavě olivová","yellowgreen":"žlutozelená"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.cs");dijit.nls.loading.cs={"loadingState":"Probíhá načítání...","errorState":"Omlouváme se, došlo k chybě"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.cs");dijit.nls.common.cs={"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.cs");dijit._editor.nls.commands.cs={"removeFormat":"Odebrat formát","copy":"Kopírovat","paste":"Vložit","selectAll":"Vybrat vše","insertOrderedList":"Číslovaný seznam","insertTable":"Vložit/upravit tabulku","print":"Tisk","underline":"Podtržení","foreColor":"Barva popředí","htmlToggle":"Zdroj HTML","formatBlock":"Styl odstavce","newPage":"Nová stránka","insertHorizontalRule":"Vodorovná čára","delete":"Odstranit","insertUnorderedList":"Seznam s odrážkami","tableProp":"Vlastnost tabulky","insertImage":"Vložit obrázek","superscript":"Horní index","subscript":"Dolní index","createLink":"Vytvořit odkaz","undo":"Zpět","fullScreen":"Přepnout režim celé obrazovky","italic":"Kurzíva","fontName":"Název písma","justifyLeft":"Zarovnat vlevo","unlink":"Odebrat odkaz","toggleTableBorder":"Přepnout ohraničení tabulky","viewSource":"Zobrazit zdroj ve formátu HTML","fontSize":"Velikost písma","systemShortcut":"Akce \"${0}\" je v prohlížeči dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesovou zkratku ${1}.","indent":"Odsadit","redo":"Opakovat","strikethrough":"Přeškrtnutí","justifyFull":"Do bloku","justifyCenter":"Zarovnat na střed","hiliteColor":"Barva pozadí","deleteTable":"Odstranit tabulku","outdent":"Předsadit","cut":"Vyjmout","plainFormatBlock":"Styl odstavce","toggleDir":"Přepnout směr","bold":"Tučné","tabIndent":"Odsazení tabulátoru","justifyRight":"Zarovnat vpravo","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.cs");dijit.form.nls.validate.cs={"rangeMessage":"Tato hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota není platná.","missingMessage":"Tato hodnota je vyžadována."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.cs");dijit.form.nls.ComboBox.cs={"previousMessage":"Předchozí volby","nextMessage":"Další volby"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.cs");dijit._editor.nls.FontChoice.cs={"1":"extra malé","2":"velmi malé","formatBlock":"Formát","3":"malé","4":"střední","5":"velké","6":"velmi velké","7":"extra velké","fantasy":"fantasy","serif":"serif","p":"Odstavec","pre":"Předformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Nadpis","h2":"Podnadpis","h3":"Podnadpis 2","monospace":"monospace","fontSize":"Velikost","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.cs");dijit._editor.nls.LinkDialog.cs={"text":"Popis:","insertImageTitle":"Vlastnosti obrázku","set":"Nastavit","newWindow":"Nové okno","topWindow":"Okno nejvyšší úrovně","target":"Cíl:","createLinkTitle":"Vlastnosti odkazu","parentWindow":"Nadřízené okno","currentWindow":"Aktuální okno","url":"Adresa URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.cs");dojo.cldr.nls.currency.cs={"HKD_displayName":"Dolar hongkongský","CHF_displayName":"Frank švýcarský","CAD_displayName":"Dolar kanadský","CNY_displayName":"Juan renminbi","AUD_displayName":"Dolar australský","JPY_displayName":"Jen","USD_displayName":"Dolar americký","GBP_displayName":"Libra šterlinků","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.cs");dojo.cldr.nls.gregorian.cs={"dayPeriods-format-wide-pm":"odp.","eraNames":["př.Kr.","po Kr."],"field-day-relative+-1":"Včera","field-day-relative+-2":"Předevčírem","days-standAlone-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"months-standAlone-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"dayPeriods-format-wide-am":"dop.","quarters-standAlone-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["1.","2.","3.","4.","5.","6.","7.","8.","9.","10.","11.","12."],"field-day-relative+0":"Dnes","field-day-relative+1":"Zítra","days-standAlone-narrow":["N","P","Ú","S","Č","P","S"],"eraAbbr":["př.Kr.","po Kr."],"field-day-relative+2":"Pozítří","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"months-standAlone-wide":["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],"timeFormat-long":"H:mm:ss z","months-format-abbr":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"timeFormat-short":"H:mm","dateFormatItem-H":"H","quarters-format-abbr":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-abbr":["ne","po","út","st","čt","pá","so"],"days-format-narrow":["N","P","Ú","S","Č","P","S"],"months-format-narrow":["l","ú","b","d","k","č","č","s","z","ř","l","p"],"days-standAlone-abbr":["ne","po","út","st","čt","pá","so"],"dateFormat-short":"d.M.yy","dateFormat-full":"EEEE, d. MMMM y","months-format-wide":["ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince"],"quarters-format-wide":["1. čtvrtletí","2. čtvrtletí","3. čtvrtletí","4. čtvrtletí"],"days-format-wide":["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],"eraNarrow":["př.Kr.","po Kr."],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"Day of the Week","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","field-era":"Era","dateFormatItem-yM":"y-M","field-year":"Year","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","field-hour":"Hour","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","field-minute":"Minute","field-dayperiod":"Dayperiod","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","field-day":"Day","field-zone":"Zone","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","field-month":"Month","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","field-second":"Second","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","field-week":"Week","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/pl/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/pl/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/pl/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/pl/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/pl/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/pl/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Ładowanie...","errorState":"Niestety, wystąpił błąd"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_es.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_es.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_es.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es");dojo.nls.colors.es={"lightsteelblue":"azul acero claro","orangered":"rojo anaranjado","midnightblue":"azul medianoche","cadetblue":"azul cadete","seashell":"blanco marfil","slategrey":"gris pizarra","coral":"coral","darkturquoise":"turquesa oscuro","antiquewhite":"blanco antiguo","mediumspringgreen":"verde primavera medio","salmon":"salmón","darkgrey":"gris oscuro","ivory":"marfil","greenyellow":"amarillo verdoso","mistyrose":"rosa difuminado","lightsalmon":"salmón claro","silver":"plateado","dimgrey":"gris marengo","orange":"naranja","white":"blanco","navajowhite":"blanco navajo","royalblue":"azul real","deeppink":"rosa fuerte","lime":"lima","oldlace":"encaje antiguo","chartreuse":"verde pálido 2","darkcyan":"cian oscuro","yellow":"amarillo","linen":"blanco arena","olive":"verde oliva","gold":"oro","lawngreen":"verde césped","lightyellow":"amarillo claro","tan":"canela","darkviolet":"violeta oscuro","lightslategrey":"gris pizarra claro","grey":"gris","darkkhaki":"caqui oscuro","green":"verde","deepskyblue":"azul cielo fuerte","aqua":"aguamarina","sienna":"siena","mintcream":"crema menta","rosybrown":"marrón rosáceo","mediumslateblue":"azul pizarra medio","magenta":"magenta","lightseagreen":"verde mar claro","cyan":"cian","olivedrab":"verde oliva pardusco","darkgoldenrod":"ocre oscuro","slateblue":"azul pizarra","mediumaquamarine":"aguamarina medio","lavender":"lavanda","mediumseagreen":"verde mar medio","maroon":"granate","darkslategray":"gris pizarra oscuro","mediumturquoise":"turquesa medio","ghostwhite":"blanco ligero","darkblue":"azul oscuro","mediumvioletred":"rojo violáceo medio","brown":"marrón","lightgray":"gris claro","sandybrown":"marrón arcilla","pink":"rosa","firebrick":"teja","indigo":"añil","snow":"nieve","darkorchid":"orquídea oscuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde fuerte","moccasin":"arena","navy":"azul marino","lemonchiffon":"amarillo pastel","teal":"verde azulado","floralwhite":"blanco manteca","cornflowerblue":"azul aciano","paleturquoise":"turquesa pálido","purple":"púrpura","gainsboro":"azul gainsboro","plum":"ciruela","red":"rojo","blue":"azul","forestgreen":"verde pino","darkgreen":"verde oscuro","honeydew":"flor de rocío","darkseagreen":"verde mar oscuro","lightcoral":"coral claro","palevioletred":"rojo violáceo pálido","mediumpurple":"púrpura medio","saddlebrown":"cuero","darkmagenta":"magenta oscuro","thistle":"cardo","whitesmoke":"blanco ahumado","wheat":"trigo","violet":"violeta","lightskyblue":"azul cielo claro","goldenrod":"ocre","mediumblue":"azul medio","skyblue":"azul cielo","crimson":"carmesí","darksalmon":"salmón oscuro","darkred":"rojo oscuro","darkslategrey":"gris pizarra oscuro","peru":"perú","lightgrey":"gris claro","lightgoldenrodyellow":"ocre claro","blanchedalmond":"almendra pálido","aliceblue":"blanco azulado","bisque":"miel","slategray":"gris pizarra","palegoldenrod":"ocre pálido","darkorange":"naranja oscuro","aquamarine":"aguamarina 2","lightgreen":"verde claro","burlywood":"madera","dodgerblue":"azul fuerte","darkgray":"gris oscuro","lightcyan":"cian claro","powderblue":"azul suave","blueviolet":"azul violáceo","orchid":"orquídea","dimgray":"gris marengo","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosácea","hotpink":"rosa oscuro","steelblue":"azul acero","tomato":"tomate","lightpink":"rosa claro","limegreen":"lima limón","indianred":"rojo teja","papayawhip":"papaya claro","lightslategray":"gris pizarra claro","gray":"gris","mediumorchid":"orquídea medio","cornsilk":"crudo","black":"negro","seagreen":"verde mar","darkslateblue":"azul pizarra oscuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"blanco cielo","peachpuff":"melocotón","darkolivegreen":"verde oliva oscuro","yellowgreen":"verde amarillento"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es");dijit.nls.loading.es={"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es");dijit._editor.nls.commands.es={"removeFormat":"Eliminar formato","copy":"Copiar","paste":"Pegar","selectAll":"Seleccionar todo","insertOrderedList":"Lista numerada","insertTable":"Insertar/Editar tabla","print":"Imprimir","underline":"Subrayado","foreColor":"Color de primer plano","htmlToggle":"Fuente HTML","formatBlock":"Estilo de párrafo","newPage":"Nueva página","insertHorizontalRule":"Regla horizontal","delete":"Suprimir","insertUnorderedList":"Lista con viñetas","tableProp":"Propiedad de tabla","insertImage":"Insertar imagen","superscript":"Superíndice","subscript":"Subíndice","createLink":"Crear enlace","undo":"Deshacer","fullScreen":"Conmutar pantalla completa","italic":"Cursiva","fontName":"Nombre de font","justifyLeft":"Alinear izquierda","unlink":"Eliminar enlace","toggleTableBorder":"Conmutar borde de tabla","viewSource":"Ver fuente HTML","ctrlKey":"control+${0}","fontSize":"Tamaño de font","systemShortcut":"La acción \"${0}\" sólo está disponible en su navegador mediante un atajo de teclado. Utilice ${1}.","indent":"Sangría","redo":"Rehacer","strikethrough":"Tachado","justifyFull":"Justificar","justifyCenter":"Alinear centro","hiliteColor":"Color de segundo plano","deleteTable":"Suprimir tabla","outdent":"Anular sangría","cut":"Cortar","plainFormatBlock":"Estilo de párrafo","toggleDir":"Conmutar dirección","bold":"Negrita","tabIndent":"Sangría de tabulador","justifyRight":"Alinear derecha","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es");dijit.form.nls.validate.es={"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es");dijit.form.nls.ComboBox.es={"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.es");dijit._editor.nls.FontChoice.es={"1":"xx-pequeño","2":"x-pequeño","formatBlock":"Formato","3":"pequeño","4":"medio","5":"grande","6":"x-grande","7":"xx-grande","fantasy":"fantasía","serif":"serif","p":"Párrafo","pre":"Preformateado","sans-serif":"sans-serif","fontName":"Font","h1":"Cabecera","h2":"Subcabecera","h3":"Sub-subcabecera","monospace":"espacio sencillo","fontSize":"Tamaño","cursive":"cursiva","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.es");dijit._editor.nls.LinkDialog.es={"text":"Descripción: ","insertImageTitle":"Propiedades de la imagen","set":"Establecer","newWindow":"Nueva ventana","topWindow":"Ventana superior","target":"Destino: ","createLinkTitle":"Propiedades del enlace","parentWindow":"Ventana padre","currentWindow":"Ventana actual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es");dojo.cldr.nls.currency.es={"HKD_displayName":"dólar de Hong Kong","CHF_displayName":"franco suizo","CAD_displayName":"dólar canadiense","CNY_displayName":"yuan renminbi chino","AUD_displayName":"dólar australiano","JPY_displayName":"yen japonés","USD_displayName":"dólar estadounidense","GBP_displayName":"libra esterlina británica","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es");dojo.cldr.nls.gregorian.es={"months-format-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"día de la semana","dateFormatItem-yyQQQQ":"QQQQ 'de' yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["a.C.","d.C."],"dateFormatItem-MMMdd":"dd-MMM","dateFormat-long":"d 'de' MMMM 'de' y","months-format-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"año","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","field-hour":"hora","months-format-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"hoy","field-day-relative+1":"mañana","field-day-relative+2":"pasado mañana","field-day-relative+3":"Dentro de tres días","months-standAlone-abbr":["ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2º trimestre","3er trimestre","4º trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"dateFormatItem-MMMMd":"d 'de' MMMM","dateFormatItem-yyMMM":"MMM-yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["a.C.","d.C."],"field-minute":"minuto","field-dayperiod":"periodo del día","days-standAlone-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ayer","dateFormatItem-h":"hh a","field-day-relative+-2":"antes de ayer","field-day-relative+-3":"Hace tres días","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"MMMM 'de' y","field-day":"día","days-format-wide":["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["E","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mié","jue","vie","sáb"],"eraNames":["antes de Cristo","anno Dómini"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mes","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","field-second":"segundo","dateFormatItem-yMMMEd":"EEE, d MMM y","field-week":"semana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/th/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/th/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/th/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/th/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/th/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/th/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/hu/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/hu/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/hu/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Betöltés...","errorState":"Sajnálom, hiba történt"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/hu/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/hu/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/hu/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_ko.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ko.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ko.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ko");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko");dojo.nls.colors.ko={"lightsteelblue":"라이트 스틸 블루(light steel blue)","orangered":"오렌지 레드(orange red)","midnightblue":"미드나잇 블루(midnight blue)","cadetblue":"카뎃 블루(cadet blue)","seashell":"씨쉘(seashell)","slategrey":"슬레이트 그레이(slate gray)","coral":"코랄(coral)","darkturquoise":"다크 터콰즈(dark turquoise)","antiquewhite":"앤틱 화이트(antique white)","mediumspringgreen":"미디엄 스프링 그린(medium spring green)","salmon":"샐몬(salmon)","darkgrey":"다크 그레이(dark gray)","ivory":"아이보리(ivory)","greenyellow":"그린 옐로우(green-yellow)","mistyrose":"미스티 로즈(misty rose)","lightsalmon":"라이트 샐몬(light salmon)","silver":"실버(silver)","dimgrey":"딤 그레이(dim gray)","orange":"오렌지(orange)","white":"화이트(white)","navajowhite":"나바호 화이트(navajo white)","royalblue":"로얄 블루(royal blue)","deeppink":"딥 핑크(deep pink)","lime":"라임(lime)","oldlace":"올드 레이스(old lace)","chartreuse":"샤르트뢰즈(chartreuse)","darkcyan":"다크 시안(dark cyan)","yellow":"옐로우(yellow)","linen":"리넨(linen)","olive":"올리브(olive)","gold":"골드(gold)","lawngreen":"론 그린(lawn green)","lightyellow":"라이트 옐로우(light yellow)","tan":"탠(tan)","darkviolet":"다크 바이올렛(dark violet)","lightslategrey":"라이트 슬레이트 그레이(light slate gray)","grey":"그레이(gray)","darkkhaki":"다크 카키(dark khaki)","green":"그린(green)","deepskyblue":"딥 스카이 블루(deep sky blue)","aqua":"아쿠아(aqua)","sienna":"시에나(sienna)","mintcream":"민트 크림(mint cream)","rosybrown":"로지 브라운(rosy brown)","mediumslateblue":"미디엄 슬레이트 블루(medium slate blue)","magenta":"마젠타(magenta)","lightseagreen":"라이트 씨 그린(light sea green)","cyan":"시안(cyan)","olivedrab":"올리브 드랩(olive drab)","darkgoldenrod":"다크 골든로드(dark goldenrod)","slateblue":"슬레이트 블루(slate blue)","mediumaquamarine":"미디엄 아쿠아마린(medium aquamarine)","lavender":"라벤더(lavender)","mediumseagreen":"미디엄 씨 그린(medium sea green)","maroon":"마룬(maroon)","darkslategray":"다크 슬레이트 그레이(dark slate gray)","mediumturquoise":"미디엄 터콰즈(medium turquoise)","ghostwhite":"고스트 화이트(ghost white)","darkblue":"다크 블루(dark blue)","mediumvioletred":"미디엄 바이올렛 레드(medium violet-red)","brown":"브라운(brown)","lightgray":"라이트 그레이(light gray)","sandybrown":"샌디 브라운(sandy brown)","pink":"핑크(pink)","firebrick":"파이어 브릭(fire brick)","indigo":"인디고(indigo)","snow":"스노우(snow)","darkorchid":"다크 오키드(dark orchid)","turquoise":"터콰즈(turquoise)","chocolate":"초콜렛(chocolate)","springgreen":"스프링 그린(spring green)","moccasin":"모카신(moccasin)","navy":"네이비(navy)","lemonchiffon":"레몬 쉬폰(lemon chiffon)","teal":"틸(teal)","floralwhite":"플로랄 화이트(floral white)","cornflowerblue":"콘플라워 블루(cornflower blue)","paleturquoise":"페일 터콰즈(pale turquoise)","purple":"퍼플(purple)","gainsboro":"게인스브로(gainsboro)","plum":"플럼(plum)","red":"레드(red)","blue":"블루(blue)","forestgreen":"포레스트 그린(forest green)","darkgreen":"다크 그린(dark green)","honeydew":"허니듀(honeydew)","darkseagreen":"다크 씨 그린(dark sea green)","lightcoral":"라이트 코랄(light coral)","palevioletred":"페일 바이올렛 레드(pale violet-red)","mediumpurple":"미디엄 퍼플(medium purple)","saddlebrown":"새들 브라운(saddle brown)","darkmagenta":"다크 마젠타(dark magenta)","thistle":"시슬(thistle)","whitesmoke":"화이트 스모크(white smoke)","wheat":"휘트(wheat)","violet":"바이올렛(violet)","lightskyblue":"라이트 스카이 블루(light sky blue)","goldenrod":"골든로드(goldenrod)","mediumblue":"미디엄 블루(medium blue)","skyblue":"스카이 블루(sky blue)","crimson":"크림슨(crimson)","darksalmon":"다크 샐몬(dark salmon)","darkred":"다크 레드(dark red)","darkslategrey":"다크 슬레이트 그레이(dark slate gray)","peru":"페루(peru)","lightgrey":"라이트 그레이(light gray)","lightgoldenrodyellow":"라이트 골든로드 옐로우(light goldenrod yellow)","blanchedalmond":"블랜치 아몬드(blanched almond)","aliceblue":"앨리스 블루(alice blue)","bisque":"비스크(bisque)","slategray":"슬레이트 그레이(slate gray)","palegoldenrod":"페일 골든로드(pale goldenrod)","darkorange":"다크 오렌지(dark orange)","aquamarine":"아쿠아마린(aquamarine)","lightgreen":"라이트 그린(light green)","burlywood":"벌리우드(burlywood)","dodgerblue":"다저 블루(dodger blue)","darkgray":"다크 그레이(dark gray)","lightcyan":"라이트 시안(light cyan)","powderblue":"파우더 블루(powder blue)","blueviolet":"블루 바이올렛(blue-violet)","orchid":"오키드(orchid)","dimgray":"딤 그레이(dim gray)","beige":"베이지(beige)","fuchsia":"후크샤(fuchsia)","lavenderblush":"라벤더 블러쉬(lavender blush)","hotpink":"핫 핑크(hot pink)","steelblue":"스틸 블루(steel blue)","tomato":"토마토(tomato)","lightpink":"라이트 핑크(light pink)","limegreen":"라임 그린(lime green)","indianred":"인디안 레드(indian red)","papayawhip":"파파야 휩(papaya whip)","lightslategray":"라이트 슬레이트 그레이(light slate gray)","gray":"그레이(gray)","mediumorchid":"미디엄 오키드(medium orchid)","cornsilk":"콘실크(cornsilk)","black":"블랙(black)","seagreen":"씨 그린(sea green)","darkslateblue":"다크 슬레이트 블루(dark slate blue)","khaki":"카키(khaki)","lightblue":"라이트 블루(light blue)","palegreen":"페일 그린(pale green)","azure":"애쥬어(azure)","peachpuff":"피치 퍼프(peach puff)","darkolivegreen":"다크 올리브 그린(dark olive green)","yellowgreen":"옐로우 그린(yellow green)"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko");dijit.nls.loading.ko={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko");dijit._editor.nls.commands.ko={"removeFormat":"형식 제거","copy":"복사","paste":"붙여넣기","selectAll":"모두 선택","insertOrderedList":"번호 목록","insertTable":"테이블 삽입/편집","print":"인쇄","underline":"밑줄","foreColor":"전경색","htmlToggle":"HTML 소스","formatBlock":"단락 스타일","newPage":"새 페이지","insertHorizontalRule":"수평 자","delete":"삭제","insertUnorderedList":"글머리표 목록","tableProp":"테이블 특성","insertImage":"이미지 삽입","superscript":"위첨자","subscript":"아래첨자","createLink":"링크 작성","undo":"실행 취소","fullScreen":"토글 전체 화면","italic":"기울임체","fontName":"글꼴 이름","justifyLeft":"왼쪽 맞춤","unlink":"링크 제거","toggleTableBorder":"토글 테이블 테두리","viewSource":"HTML 소스 보기","fontSize":"글꼴 크기","systemShortcut":"\"${0}\" 조치는 브라우저에서 키보드 단축키를 이용해서만 사용할 수 있습니다. ${1}을(를) 사용하십시오.","indent":"들여쓰기","redo":"다시 실행","strikethrough":"취소선","justifyFull":"양쪽 맞춤","justifyCenter":"가운데 맞춤","hiliteColor":"배경색","deleteTable":"테이블 삭제","outdent":"내어쓰기","cut":"잘라내기","plainFormatBlock":"단락 스타일","toggleDir":"토글 방향","bold":"굵은체","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko");dijit.form.nls.validate.ko={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko");dijit.form.nls.ComboBox.ko={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ko");dijit._editor.nls.FontChoice.ko={"1":"가장 작게","2":"조금 작게","formatBlock":"서식","3":"작게","4":"중간","5":"크게","6":"조금 크게","7":"가장 크게","fantasy":"fantasy","serif":"serif","p":"단락","pre":"서식이 지정됨","sans-serif":"sans-serif","fontName":"글꼴","h1":"제목","h2":"부제목","h3":"하위 부제목","monospace":"monospace","fontSize":"크기","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ko");dijit._editor.nls.LinkDialog.ko={"text":"설명:","insertImageTitle":"이미지 특성","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상:","createLinkTitle":"링크 특성","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko");dojo.cldr.nls.currency.ko={"HKD_displayName":"홍콩 달러","CHF_displayName":"스위스 프랑","CAD_displayName":"캐나다 달러","CNY_displayName":"중국 위안 인민폐","AUD_displayName":"호주 달러","JPY_displayName":"일본 엔화","USD_displayName":"미국 달러","GBP_displayName":"영국령 파운드 스털링","EUR_displayName":"유로화","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko");dojo.cldr.nls.gregorian.ko={"months-format-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"field-weekday":"요일","dateFormatItem-yQQQ":"y년 QQQ","dateFormatItem-yMEd":"yyyy. M. d. EEE","dateFormatItem-MMMEd":"MMM d일 (E)","eraNarrow":["기원전","서기"],"dateFormat-long":"y년 M월 d일","months-format-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d일 EEE","dayPeriods-format-wide-pm":"오후","dateFormat-full":"y년 M월 d일 EEEE","dateFormatItem-Md":"M. d.","field-era":"연호","dateFormatItem-yM":"yyyy. M.","months-standAlone-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"timeFormat-short":"a h:mm","quarters-format-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"timeFormat-long":"a h시 m분 s초 z","field-year":"년","dateFormatItem-yMMM":"y년 MMM","dateFormatItem-yQ":"y년 Q분기","field-hour":"시","dateFormatItem-MMdd":"MM. dd","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyQ":"yy년 Q분기","timeFormat-full":"a h시 m분 s초 zzzz","field-day-relative+0":"오늘","field-day-relative+1":"내일","field-day-relative+2":"모레","field-day-relative+3":"3일후","months-standAlone-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"quarters-format-abbr":["1분기","2분기","3분기","4분기"],"quarters-standAlone-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"dateFormatItem-yyMMM":"yy년 MMM","timeFormat-medium":"a h:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1분기","2분기","3분기","4분기"],"eraAbbr":["기원전","서기"],"field-minute":"분","field-dayperiod":"오전/오후","days-standAlone-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"어제","dateFormatItem-h":"a h","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"그저께","field-day-relative+-3":"그끄제","dateFormatItem-MMMd":"MMM d일","dateFormatItem-MEd":"M. d. (E)","dateTimeFormat-full":"{1} {0}","field-day":"일","days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-zone":"시간대","dateFormatItem-yyyyMM":"yyyy. MM","dateFormatItem-y":"y","months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyMM":"YY. M.","dateFormatItem-hm":"a h:mm","days-format-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-yMMMd":"y년 MMM d일","eraNames":["서력기원전","서력기원"],"days-format-narrow":["일","월","화","수","목","금","토"],"field-month":"월","days-standAlone-narrow":["일","월","화","수","목","금","토"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"오전","dateFormat-short":"yy. M. d.","field-second":"초","dateFormatItem-yMMMEd":"y년 MMM d일 EEE","dateFormatItem-Ed":"d일 (E)","field-week":"주","dateFormat-medium":"yyyy. M. d.","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H시 m분 s초","dateFormatItem-hms":"a h:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_sk.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_sk.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_sk.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_sk");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sk");dojo.nls.colors.sk={"lightsteelblue":"oceľovo modrá svetlá","orangered":"oranžovo červená","midnightblue":"nočná modrá","cadetblue":"sivomodrá","seashell":"lastúrová","slategrey":"bridlicová sivá","coral":"koralová","darkturquoise":"tyrkysová tmavá","antiquewhite":"antická biela","mediumspringgreen":"jarná zelená stredná","salmon":"lososovo ružová","darkgrey":"tmavosivá","ivory":"slonovinová","greenyellow":"žltozelená","mistyrose":"zahmlená ruža","lightsalmon":"lososovo ružová svetlá","silver":"strieborná","dimgrey":"sivá matná","orange":"oranžová","white":"biela","navajowhite":"navajská biela","royalblue":"kráľovská modrá","deeppink":"hlboká ružová","lime":"lipová","oldlace":"stará čipka","chartreuse":"kartúza","darkcyan":"tmavozelenomodrá","yellow":"žltá","linen":"ľan","olive":"olivovo zelená","gold":"zlatá","lawngreen":"zelená tráva","lightyellow":"svetložltá","tan":"žltohnedá","darkviolet":"tmavofialová","lightslategrey":"bridlicová sivá svetlá","grey":"sivá","darkkhaki":"žltohnedá tmavá","green":"zelená","deepskyblue":"hlboká blankytná modrá","aqua":"svetlá zelenomodrá","sienna":"sienská","mintcream":"mätová krémová","rosybrown":"ružovo hnedá","mediumslateblue":"bridlicová modrá stredná","magenta":"purpurová","lightseagreen":"morská zelená svetlá","cyan":"zelenomodrá","olivedrab":"olivovo zelená fádna","darkgoldenrod":"zlatobyľová tmavá","slateblue":"bridlicová modrá","mediumaquamarine":"akvamarínová stredná","lavender":"levanduľová","mediumseagreen":"morská zelená stredná","maroon":"gaštanovo hnedá","darkslategray":"bridlicová sivá tmavá","mediumturquoise":"tyrkysová stredná","ghostwhite":"biely tieň","darkblue":"tmavomodrá","mediumvioletred":"fialovočervená stredná","brown":"hnedá","lightgray":"svetlosivá","sandybrown":"pieskovo hnedá","pink":"ružová","firebrick":"pálená tehla","indigo":"fialovo modrá","snow":"snehobiela","darkorchid":"orchideovo ružová tmavá","turquoise":"tyrkysová","chocolate":"čokoládovo hnedá","springgreen":"jarná zelená","moccasin":"črievičníková","navy":"vojenská zelená","lemonchiffon":"citrónový šifón","teal":"tyrkysová","floralwhite":"kvetinová biela","cornflowerblue":"nevädzovo modrá","paleturquoise":"bledo tyrkysová","purple":"purpurová","gainsboro":"sivomodrá svetlá","plum":"slivková","red":"červená","blue":"modrá","forestgreen":"lesná zelená","darkgreen":"tmavozelená","honeydew":"ambrózia","darkseagreen":"morská zelená tmavá","lightcoral":"koralová svetlá","palevioletred":"bledá fialovo červená","mediumpurple":"purpurová stredná","saddlebrown":"sedlová hnedá","darkmagenta":"tmavopurpurová","thistle":"bodliaková fialová","whitesmoke":"biely dym","wheat":"pšeničná","violet":"fialová","lightskyblue":"blankytná modrá svetlá","goldenrod":"zlatobyľ","mediumblue":"stredne modrá","skyblue":"blankytná modrá","crimson":"karmínová","darksalmon":"lososovo ružová tmavá","darkred":"tmavočervená","darkslategrey":"bridlicová sivá tmavá","peru":"peru","lightgrey":"svetlosivá","lightgoldenrodyellow":"zlatobyľová svetlá","blanchedalmond":"lúpané mandle","aliceblue":"modrá alice","bisque":"biskvitová","slategray":"bridlicová sivá","palegoldenrod":"bledá zlatobyľová","darkorange":"tmavooranžová","aquamarine":"akvamarínová","lightgreen":"svetlozelená","burlywood":"pieskovo hnedá","dodgerblue":"modrá dodger","darkgray":"tmavosivá","lightcyan":"zelenomodrá svetlá","powderblue":"prášková modrá","blueviolet":"modrofialová","orchid":"orchideovo ružová","dimgray":"sivá matná","beige":"béžová","fuchsia":"purpurová","lavenderblush":"levanduľový rumenec","hotpink":"teplá ružová","steelblue":"oceľovo modrá","tomato":"paradajková červená","lightpink":"svetloružová","limegreen":"lipová zelená","indianred":"indická červená","papayawhip":"papájový krém","lightslategray":"bridlicová sivá svetlá","gray":"sivá","mediumorchid":"orchideovo ružová stredná","cornsilk":"hodvábna žltá","black":"čierna","seagreen":"morská zelená","darkslateblue":"bridlicová modrá tmavá","khaki":"khaki","lightblue":"svetlomodrá","palegreen":"bledozelená","azure":"azúrová","peachpuff":"broskyňová pena","darkolivegreen":"olivovozelená tmavá","yellowgreen":"žltozelená"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sk");dijit.nls.loading.sk={"loadingState":"Zavádzanie...","errorState":"Nastala chyba"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sk");dijit.nls.common.sk={"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.sk");dijit._editor.nls.commands.sk={"removeFormat":"Odstrániť formát","copy":"Kopírovať","paste":"Nalepiť","selectAll":"Vybrať všetko","insertOrderedList":"Číslovaný zoznam","insertTable":"Vložiť/upraviť tabuľku","print":"Tlačiť","underline":"Podčiarknuť","foreColor":"Farba popredia","htmlToggle":"Zdroj HTML","formatBlock":"Štýl odseku","newPage":"Nová stránka ","insertHorizontalRule":"Horizontálna čiara","delete":"Vymazať","insertUnorderedList":"Zoznam s odrážkami","tableProp":"Vlastnosť tabuľky","insertImage":"Vložiť obrázok","superscript":"Horný index","subscript":"Dolný index","createLink":"Vytvoriť prepojenie","undo":"Vrátiť späť","fullScreen":"Zobraziť na celú obrazovku","italic":"Kurzíva","fontName":"Názov písma","justifyLeft":"Zarovnať doľava","unlink":"Odstrániť prepojenie","toggleTableBorder":"Prepnúť rámček tabuľky","viewSource":"Zobraziť zdrojový kód HTML ","fontSize":"Veľkosť písma","systemShortcut":"Akcia \"${0}\" je vo vašom prehliadači dostupná len s použitím klávesovej skratky. Použite ${1}.","indent":"Odsadiť","redo":"Znova vykonať","strikethrough":"Prečiarknuť","justifyFull":"Zarovnať podľa okraja","justifyCenter":"Zarovnať na stred","hiliteColor":"Farba pozadia","deleteTable":"Vymazať tabuľku","outdent":"Predsadiť","cut":"Vystrihnúť","plainFormatBlock":"Štýl odseku","toggleDir":"Prepnúť smer","bold":"Tučné písmo","tabIndent":"Odsadenie tabulátora","justifyRight":"Zarovnať doprava","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sk");dijit.form.nls.validate.sk={"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sk");dijit.form.nls.ComboBox.sk={"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.sk");dijit._editor.nls.FontChoice.sk={"1":"xx-small","2":"x-small","formatBlock":"Formát","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Odsek","pre":"Predformátované","sans-serif":"sans-serif","fontName":"Písmo","h1":"Hlavička","h2":"Podhlavička","h3":"Pod-podhlavička","monospace":"monospace","fontSize":"Veľkosť","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.sk");dijit._editor.nls.LinkDialog.sk={"text":"Opis:","insertImageTitle":"Vlastnosti obrázka ","set":"Nastaviť","newWindow":"Nové okno ","topWindow":"Najvrchnejšie okno ","target":"Cieľ:","createLinkTitle":"Pripojiť vlastnosti","parentWindow":"Rodičovské okno ","currentWindow":"Aktuálne okno ","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sk");dojo.cldr.nls.number.sk={"currencyFormat":"#,##0.00 ¤","group":" ","decimal":",","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","percentFormat":"#,##0%","decimalFormat":"#,##0.###","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.sk");dojo.cldr.nls.currency.sk={"HKD_displayName":"Hong Kongský dolár","CHF_displayName":"Švajčiarský frank","CAD_displayName":"Kanadský dolár","CNY_displayName":"Čínsky Yuan Renminbi","AUD_displayName":"Austrálsky dolár","JPY_displayName":"Japonský yen","USD_displayName":"US dolár","GBP_displayName":"Britská libra","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.sk");dojo.cldr.nls.gregorian.sk={"field-dayperiod":"Časť dňa","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"popoludní","field-minute":"Minúta","eraNames":["pred n.l.","n.l."],"dateFormatItem-MMMEd":"E, d. MMM","field-day-relative+-1":"Včera","field-weekday":"Deň v týždni","dateFormatItem-yQQQ":"QQQ y","field-day-relative+-2":"Predvčerom","field-day-relative+-3":"Pred tromi dňami","days-standAlone-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"months-standAlone-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"field-era":"Éra","field-hour":"Hodina","dayPeriods-format-wide-am":"dopoludnia","timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Dnes","field-day-relative+1":"Zajtra","days-standAlone-narrow":["N","P","U","S","Š","P","S"],"eraAbbr":["pred n.l.","n.l."],"field-day-relative+2":"Pozajtra","field-day-relative+3":"O tri dni","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d. MMMM y","timeFormat-medium":"H:mm:ss","dateFormatItem-EEEd":"EEE, d.","field-zone":"Pásmo","dateFormatItem-Hm":"H:mm","dateFormat-medium":"d.M.yyyy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyQQQQ":"QQQQ yy","quarters-standAlone-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"dateFormatItem-yMMMM":"LLLL y","dateFormatItem-ms":"mm:ss","field-year":"Rok","months-standAlone-wide":["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],"field-week":"Týždeň","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormatItem-MMMd":"d. MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["jan","feb","mar","apr","máj","jún","júl","aug","sep","okt","nov","dec"],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"Mesiac","dateFormatItem-MMMMd":"d. MMMM","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["ne","po","ut","st","št","pi","so"],"dateFormatItem-mmss":"mm:ss","days-format-narrow":["N","P","U","S","Š","P","S"],"field-second":"Sekunda","field-day":"Deň","dateFormatItem-MEd":"E, d.M.","months-format-narrow":["j","f","m","a","m","j","j","a","s","o","n","d"],"days-standAlone-abbr":["ne","po","ut","st","št","pi","so"],"dateFormat-short":"d.M.yyyy","dateFormatItem-yyyyM":"M.yyyy","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yMEd":"EEE, d.M.yyyy","months-format-wide":["januára","februára","marca","apríla","mája","júna","júla","augusta","septembra","októbra","novembra","decembra"],"dateFormatItem-d":"d.","quarters-format-wide":["1. štvrťrok","2. štvrťrok","3. štvrťrok","4. štvrťrok"],"days-format-wide":["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],"eraNarrow":["pred n.l.","n.l."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-M":"L","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/pt/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/pt/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/pt/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/pt/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/pt/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/pt/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/tr/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/tr/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/tr/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/tr/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/tr/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/tr/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_it-it.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_it-it.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_it-it.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_it-it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it_it");dojo.nls.colors.it_it={"lightsteelblue":"blu acciao chiaro","orangered":"vermiglio","midnightblue":"blu melanzana scuro","cadetblue":"verde acqua","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"bianco antico","mediumspringgreen":"verde primavera medio","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"giallo verde","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"grigio 25%","dimgrey":"grigio 80%","orange":"arancione","white":"bianco","navajowhite":"pesca chiaro","royalblue":"blu reale","deeppink":"ciclamino","lime":"verde fluorescente","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"ciano scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde prato","lightyellow":"giallo chiaro","tan":"grigio bruno","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"kaki scuro","green":"verde","deepskyblue":"azzurro cielo scuro","aqua":"acqua","sienna":"cuoio","mintcream":"bianco nuvola","rosybrown":"marrone rosato","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde mare chiaro","cyan":"ciano","olivedrab":"marrone oliva","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde mare medio","maroon":"scarlatto","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"vinaccia","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"marrone sabbia","pink":"rosa","firebrick":"rosso mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde primavera","moccasin":"mocassino","navy":"blu notte","lemonchiffon":"caffelatte chiaro","teal":"verde turchese","floralwhite":"bianco giglio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"porpora","gainsboro":"grigio 10%","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde foresta","darkgreen":"verde scuro","honeydew":"bianco germoglio","darkseagreen":"verde mare scuro","lightcoral":"rosa corallo","palevioletred":"vinaccia chiaro","mediumpurple":"porpora medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"sabbia","violet":"viola","lightskyblue":"azzurro cielo chiaro","goldenrod":"ocra gialla","mediumblue":"blu medio","skyblue":"azzurro cielo","crimson":"cremisi","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"marrone terra bruciata","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo tenue","blanchedalmond":"mandorla chiaro","aliceblue":"blu alice","bisque":"incarnato","slategray":"grigio ardesia","palegoldenrod":"giallo zolfo chiaro","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"tabacco","dodgerblue":"blu d'oriente","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"blu violetto","orchid":"orchidea","dimgray":"grigio 80%","beige":"beige","fuchsia":"fucsia","lavenderblush":"bianco rosato","hotpink":"rosa acceso","steelblue":"blu acciao","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"cipria","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde mare","darkslateblue":"blu ardesia scuro","khaki":"kaki","lightblue":"azzurro","palegreen":"verde pallido","azure":"azzurro ghiaccio","peachpuff":"pesca","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it_it");dijit.nls.loading.it_it={"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it_it");dijit._editor.nls.commands.it_it={"removeFormat":"Rimuovi formato","copy":"Copia","paste":"Incolla","selectAll":"Seleziona tutto","insertOrderedList":"Elenco numerato","insertTable":"Inserisci/Modifica tabella","print":"Stampa","underline":"Sottolinea","foreColor":"Colore primo piano","htmlToggle":"Origine HTML","formatBlock":"Stile paragrafo","newPage":"Nuova pagina","insertHorizontalRule":"Righello orizzontale","delete":"Elimina","insertUnorderedList":"Elenco puntato","tableProp":"Proprietà tabella","insertImage":"Inserisci immagine","superscript":"Apice","subscript":"Pedice","createLink":"Crea collegamento","undo":"Annulla","fullScreen":"Attiva/Disattiva schermo intero","italic":"Corsivo","fontName":"Nome carattere","justifyLeft":"Allinea a sinistra","unlink":"Rimuovi collegamento","toggleTableBorder":"Attiva/Disattiva bordo tabella","viewSource":"Visualizza origine HTML","fontSize":"Dimensione carattere","systemShortcut":"La azione \"${0}\" è disponibile solo nel browser tramite un tasto di scelta rapida. Utilizzare ${1}.","indent":"Rientro","redo":"Ripristina","strikethrough":"Barrato","justifyFull":"Giustifica","justifyCenter":"Allinea al centro","hiliteColor":"Colore sfondo","deleteTable":"Elimina tabella","outdent":"Annulla rientro","cut":"Taglia","plainFormatBlock":"Stile paragrafo","toggleDir":"Attiva/Disattiva direzione","bold":"Grassetto","tabIndent":"Rientro tabulazione","justifyRight":"Allinea a destra","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it_it");dijit.form.nls.validate.it_it={"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it_it");dijit.form.nls.ComboBox.it_it={"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.it_it");dijit._editor.nls.FontChoice.it_it={"1":"xx-small","2":"x-small","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragrafo","pre":"Preformattato","sans-serif":"sans-serif","fontName":"Carattere","h1":"Intestazione","h2":"Sottointestazione","h3":"Sottointestazione secondaria","monospace":"spaziatura fissa","fontSize":"Dimensione","cursive":"corsivo","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.it_it");dijit._editor.nls.LinkDialog.it_it={"text":"Descrizione:","insertImageTitle":"Proprietà immagine","set":"Imposta","newWindow":"Nuova finestra","topWindow":"Finestra superiore","target":"Destinazione:","createLinkTitle":"Proprietà collegamento","parentWindow":"Finestra padre","currentWindow":"Finestra corrente","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it_it");dojo.cldr.nls.currency.it_it={"HKD_displayName":"Dollaro di Hong Kong","CHF_displayName":"Franco Svizzero","CAD_displayName":"Dollaro Canadese","CNY_displayName":"Renmimbi Cinese","AUD_displayName":"Dollaro Australiano","JPY_displayName":"Yen Giapponese","USD_displayName":"Dollaro Statunitense","GBP_displayName":"Sterlina Inglese","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it_it");dojo.cldr.nls.gregorian.it_it={"months-format-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"field-weekday":"giorno della settimana","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d/M/y","dateFormatItem-MMMEd":"EEE d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"dd MMMM y","months-format-wide":["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],"dayPeriods-format-wide-pm":"p.","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/y","months-standAlone-wide":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"anno","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q-yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"ora","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"oggi","field-day-relative+1":"domani","field-day-relative+2":"dopodomani","field-day-relative+3":"tra tre giorni","months-standAlone-abbr":["gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1o trimestre","2o trimestre","3o trimestre","4o trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["aC","dC"],"field-minute":"minuto","field-dayperiod":"periodo del giorno","days-standAlone-abbr":["dom","lun","mar","mer","gio","ven","sab"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ieri","dateFormatItem-h":"hh a","field-day-relative+-2":"l'altro ieri","field-day-relative+-3":"tre giorni fa","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"giorno","days-format-wide":["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],"field-zone":"zona","dateFormatItem-y":"y","months-standAlone-narrow":["G","F","M","A","M","G","L","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"hh:mm a","days-format-abbr":["dom","lun","mar","mer","gio","ven","sab"],"eraNames":["a.C.","d.C"],"days-format-narrow":["D","L","M","M","G","V","S"],"field-month":"mese","days-standAlone-narrow":["D","L","M","M","G","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"m.","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"dd/MM/yy","field-second":"secondo","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"settimana","dateFormat-medium":"dd/MMM/y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"hh:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/el/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/el/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/el/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/el/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/el/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/el/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ar/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/ar/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ar/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ar/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/ar/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ar/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_nb.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_nb.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_nb.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_nb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nb");dojo.nls.colors.nb={"lightsteelblue":"lys stålblå","orangered":"rødoransje","midnightblue":"midnattsblå","cadetblue":"mørk grønnblå","seashell":"skjellhvit","slategrey":"skifergrå","coral":"korall","darkturquoise":"mørk turkis","antiquewhite":"antikk hvit","mediumspringgreen":"middels vårgrønn","salmon":"lakserosa","darkgrey":"mørk grå","ivory":"elfenbenshvit","greenyellow":"gulgrønn","mistyrose":"lys rosenrød","lightsalmon":"lys lakserosa","silver":"sølvfarget","dimgrey":"mørk mørkegrå","orange":"oransje","white":"hvit","navajowhite":"gulbrun","royalblue":"kongeblå","deeppink":"dyp rosa","lime":"lime","oldlace":"kniplingshvit","chartreuse":"løvgrønn","darkcyan":"mørk cyan","yellow":"gul","linen":"lin","olive":"oliven","gold":"gull","lawngreen":"plengrønn","lightyellow":"lys gul","tan":"matt mellombrun","darkviolet":"mørk fiolett","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grønn","deepskyblue":"dyp himmelblå","aqua":"akva","sienna":"nøttebrun","mintcream":"mintkrem","rosybrown":"brunlilla","mediumslateblue":"middels skiferblå","magenta":"magenta","lightseagreen":"lys sjøgrønn","cyan":"cyan","olivedrab":"middels olivengrønn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"middels akvamarin","lavender":"lavendel","mediumseagreen":"middels sjøgrønn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"middels turkis","ghostwhite":"egghvit","darkblue":"mørk blå","mediumvioletred":"middels fiolettrød","brown":"brun","lightgray":"lys grå","sandybrown":"sandbrun","pink":"rosa","firebrick":"mursteinsrød","indigo":"indigo","snow":"snøhvit","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"sjokolade","springgreen":"vårgrønn","moccasin":"lys gulbrun","navy":"marineblå","lemonchiffon":"ferskenfarget","teal":"mørk grønnblå","floralwhite":"blomsterhvit","cornflowerblue":"kornblå","paleturquoise":"svak turkis","purple":"purpur","gainsboro":"lys lys grå","plum":"plommefarget","red":"rød","blue":"blå","forestgreen":"skoggrønn","darkgreen":"mørk grønn","honeydew":"grønnhvit","darkseagreen":"mørk sjøgrønn","lightcoral":"lys korall","palevioletred":"svak fiolettrød","mediumpurple":"middels purpur","saddlebrown":"mørk nøttebrun","darkmagenta":"mørk magenta","thistle":"lys grålilla","whitesmoke":"røykhvit","wheat":"varm sienna","violet":"fiolett","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellomblå","skyblue":"himmelblå","crimson":"karmosinrødt","darksalmon":"mørk lakserosa","darkred":"mørk rød","darkslategrey":"mørk skifergrå","peru":"lys nøttebrun","lightgrey":"lys grå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"lys mandel","aliceblue":"blåhvit","bisque":"gulrosa","slategray":"skifergrå","palegoldenrod":"svak gyldenris","darkorange":"mørk oransje","aquamarine":"akvamarin","lightgreen":"lys grønn","burlywood":"matt mellombrun","dodgerblue":"lys havblå","darkgray":"mørk grå","lightcyan":"lys cyan","powderblue":"lys grønnblå","blueviolet":"blåfiolett","orchid":"orkide","dimgray":"mørk mørkegrå","beige":"beige","fuchsia":"fuksia","lavenderblush":"lillahvit","hotpink":"halvmørk rosa","steelblue":"stålblå","tomato":"tomatrød","lightpink":"lys rosa","limegreen":"limegrønn","indianred":"rustrød","papayawhip":"lys papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"middels orkide","cornsilk":"cornsilk","black":"svart","seagreen":"sjøgrønn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lys blå","palegreen":"svak grønn","azure":"asur","peachpuff":"brunrosa","darkolivegreen":"mørk olivengrønn","yellowgreen":"gulgrønn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nb");dijit.nls.loading.nb={"loadingState":"Laster inn...","errorState":"Det oppsto en feil"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nb");dijit.nls.common.nb={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.nb");dijit._editor.nls.commands.nb={"removeFormat":"Fjern format","copy":"Kopier","paste":"Lim inn","selectAll":"Velg alle","insertOrderedList":"Nummerert liste","insertTable":"Sett inn/rediger tabell","print":"Skriv ut","underline":"Understreking","foreColor":"Forgrunnsfarge","htmlToggle":"HTML-kilde","formatBlock":"Avsnittsstil","newPage":"Ny side","insertHorizontalRule":"Vannrett strek","delete":"Slett","insertUnorderedList":"Punktliste","tableProp":"Tabellegenskap","insertImage":"Sett inn bilde","superscript":"Hevet skrift","subscript":"Senket skrift","createLink":"Opprett kobling","undo":"Angre","fullScreen":"Slå på/av full skjerm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejuster","unlink":"Fjern kobling","toggleTableBorder":"Bytt tabellkant","viewSource":"Vis HTML-kilde","fontSize":"Skriftstørrelse","systemShortcut":"Handlingen \"${0}\" er bare tilgjengelig i nettleseren ved hjelp av en tastatursnarvei. Bruk ${1}.","indent":"Innrykk","redo":"Gjør om","strikethrough":"Gjennomstreking","justifyFull":"Juster","justifyCenter":"Midtstill","hiliteColor":"Bakgrunnsfarge","deleteTable":"Slett tabell","outdent":"Fjern innrykk","cut":"Klipp ut","plainFormatBlock":"Avsnittsstil","toggleDir":"Bytt retning","bold":"Fet","tabIndent":"Tabulatorinnrykk","justifyRight":"Høyrejuster","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nb");dijit.form.nls.validate.nb={"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nb");dijit.form.nls.ComboBox.nb={"previousMessage":"Tidligere valg","nextMessage":"Flere valg"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.nb");dijit._editor.nls.FontChoice.nb={"1":"xx-liten","2":"x-liten","formatBlock":"Format","3":"liten","4":"middels","5":"stor","6":"x-stor","7":"xx-stor","fantasy":"fantasi","serif":"serif","p":"Avsnitt","pre":"Forhåndsformatert","sans-serif":"sans-serif","fontName":"Skrift","h1":"Overskrift","h2":"Undertittel","h3":"Under-undertittel","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.nb");dijit._editor.nls.LinkDialog.nb={"text":"Beskrivelse:","insertImageTitle":"Bildeegenskaper","set":"Definer","newWindow":"Nytt vindu","topWindow":"Øverste vindu","target":"Mål:","createLinkTitle":"Koblingsegenskaper","parentWindow":"Overordnet vindu","currentWindow":"Gjeldende vindu","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nb");dojo.cldr.nls.number.nb={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.nb");dojo.cldr.nls.currency.nb={"HKD_displayName":"Hongkong-dollar","CHF_displayName":"sveitsiske franc","CHF_symbol":"CHF","JPY_symbol":"JPY","CAD_displayName":"kanadiske dollar","CNY_displayName":"kinesiske yuan renminbi","USD_symbol":"USD","AUD_displayName":"australske dollar","JPY_displayName":"japanske yen","CAD_symbol":"CAD","USD_displayName":"amerikanske dollar","EUR_symbol":"EUR","CNY_symbol":"CNY","GBP_displayName":"britiske pund sterling","GBP_symbol":"GBP","AUD_symbol":"AUD","EUR_displayName":"euro","HKD_symbol":"HK$"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.nb");dojo.cldr.nls.gregorian.nb={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ukedag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMMM y","months-format-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","field-era":"tidsalder","dateFormatItem-yM":"M y","months-standAlone-wide":["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH:mm:ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"time","dateFormatItem-MMdd":"dd.MM","months-format-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH:mm:ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","field-day-relative+3":"i overovermorgen","months-standAlone-abbr":["jan.","feb.","mars","apr.","mai","juni","juli","aug.","sep.","okt.","nov.","des."],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"L","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minutt","field-dayperiod":"AM/PM","days-standAlone-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"sone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["søn.","man.","tir.","ons.","tor.","fre.","lør."],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormat-short":"dd.MM.yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"uke","dateFormat-medium":"d. MMM y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/pt-pt/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/pt-pt/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/pt-pt/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/pt-pt/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/pt-pt/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/pt-pt/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_ja-jp.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ja-jp.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ja-jp.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ja-jp");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja_jp");dojo.nls.colors.ja_jp={"lightsteelblue":"ライト・スチール・ブルー","orangered":"オレンジ・レッド","midnightblue":"ミッドナイト・ブルー","cadetblue":"くすんだ青","seashell":"シーシェル","slategrey":"スレート・グレイ","coral":"珊瑚","darkturquoise":"ダーク・ターコイズ","antiquewhite":"アンティーク・ホワイト","mediumspringgreen":"ミディアム・スプリング・グリーン","salmon":"サーモン","darkgrey":"ダーク・グレイ","ivory":"アイボリー","greenyellow":"緑黄色","mistyrose":"ミスティ・ローズ","lightsalmon":"ライト・サーモン","silver":"銀","dimgrey":"くすんだグレイ","orange":"オレンジ","white":"白","navajowhite":"ナバホ・ホワイト","royalblue":"藤色","deeppink":"濃いピンク","lime":"ライム","oldlace":"オールド・レイス","chartreuse":"淡黄緑","darkcyan":"ダーク・シアン・ブルー","yellow":"黄","linen":"亜麻色","olive":"オリーブ","gold":"金","lawngreen":"ローン・グリーン","lightyellow":"ライト・イエロー","tan":"茶褐色","darkviolet":"ダーク・バイオレット","lightslategrey":"ライト・スレート・グレイ","grey":"グレイ","darkkhaki":"ダーク・カーキー","green":"緑","deepskyblue":"濃い空色","aqua":"アクア","sienna":"黄褐色","mintcream":"ミント・クリーム","rosybrown":"ロージー・ブラウン","mediumslateblue":"ミディアム・スレート・ブルー","magenta":"赤紫","lightseagreen":"ライト・シー・グリーン","cyan":"シアン・ブルー","olivedrab":"濃黄緑","darkgoldenrod":"ダーク・ゴールデン・ロッド","slateblue":"スレート・ブルー","mediumaquamarine":"ミディアム・アクアマリーン","lavender":"ラベンダー","mediumseagreen":"ミディアム・シー・グリーン","maroon":"えび茶","darkslategray":"ダーク・スレート・グレイ","mediumturquoise":"ミディアム・ターコイズ","ghostwhite":"ゴースト・ホワイト","darkblue":"ダーク・ブルー","mediumvioletred":"ミディアム・バイオレット・レッド","brown":"茶","lightgray":"ライト・グレイ","sandybrown":"砂褐色","pink":"ピンク","firebrick":"赤煉瓦色","indigo":"藍色","snow":"雪色","darkorchid":"ダーク・オーキッド","turquoise":"ターコイズ","chocolate":"チョコレート","springgreen":"スプリング・グリーン","moccasin":"モカシン","navy":"濃紺","lemonchiffon":"レモン・シフォン","teal":"ティール","floralwhite":"フローラル・ホワイト","cornflowerblue":"コーンフラワー・ブルー","paleturquoise":"ペイル・ターコイズ","purple":"紫","gainsboro":"ゲインズボーロ","plum":"深紫","red":"赤","blue":"青","forestgreen":"フォレスト・グリーン","darkgreen":"ダーク・グリーン","honeydew":"ハニーデュー","darkseagreen":"ダーク・シー・グリーン","lightcoral":"ライト・コーラル","palevioletred":"ペイル・バイオレット・レッド","mediumpurple":"ミディアム・パープル","saddlebrown":"サドル・ブラウン","darkmagenta":"ダーク・マジェンタ","thistle":"シスル","whitesmoke":"ホワイト・スモーク","wheat":"小麦色","violet":"すみれ色","lightskyblue":"ライト・スカイ・ブルー","goldenrod":"ゴールデン・ロッド","mediumblue":"ミディアム・ブルー","skyblue":"スカイ・ブルー","crimson":"深紅","darksalmon":"ダーク・サーモン","darkred":"ダーク・レッド","darkslategrey":"ダーク・スレート・グレイ","peru":"ペルー","lightgrey":"ライト・グレイ","lightgoldenrodyellow":"ライト・ゴールデン・ロッド・イエロー","blanchedalmond":"皮なしアーモンド","aliceblue":"アリス・ブルー","bisque":"ビスク","slategray":"スレート・グレイ","palegoldenrod":"ペイル・ゴールデン・ロッド","darkorange":"ダーク・オレンジ","aquamarine":"碧緑","lightgreen":"ライト・グリーン","burlywood":"バーリーウッド","dodgerblue":"ドッジャー・ブルー","darkgray":"ダーク・グレイ","lightcyan":"ライト・シアン","powderblue":"淡青","blueviolet":"青紫","orchid":"薄紫","dimgray":"くすんだグレイ","beige":"ベージュ","fuchsia":"紫紅色","lavenderblush":"ラベンダー・ブラッシ","hotpink":"ホット・ピンク","steelblue":"鋼色","tomato":"トマト色","lightpink":"ライト・ピンク","limegreen":"ライム・グリーン","indianred":"インディアン・レッド","papayawhip":"パパイア・ホイップ","lightslategray":"ライト・スレート・グレイ","gray":"グレイ","mediumorchid":"ミディアム・オーキッド","cornsilk":"コーンシルク","black":"黒","seagreen":"シー・グリーン","darkslateblue":"ダーク・スレート・ブルー","khaki":"カーキー","lightblue":"ライト・ブルー","palegreen":"ペイル・グリーン","azure":"薄い空色","peachpuff":"ピーチ・パフ","darkolivegreen":"ダーク・オリーブ・グリーン","yellowgreen":"黄緑"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja_jp");dijit.nls.loading.ja_jp={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja_jp");dijit._editor.nls.commands.ja_jp={"removeFormat":"形式の除去","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"新しいページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブルプロパティ","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"全画面表示に切り替え","italic":"斜体","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの削除","toggleTableBorder":"テーブルボーダーの切り替え","viewSource":"HTML ソースの表示","fontSize":"フォントサイズ","systemShortcut":"\"${0}\" アクションを使用できるのは、ブラウザーでキーボードショートカットを使用する場合のみです。 ${1} を使用してください。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"背景色","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブインデント","justifyRight":"右揃え","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja_jp");dijit.form.nls.validate.ja_jp={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja_jp");dijit.form.nls.ComboBox.ja_jp={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ja_jp");dijit._editor.nls.FontChoice.ja_jp={"1":"超極小","2":"極小","formatBlock":"フォーマット","3":"小","4":"標準","5":"大","6":"特大","7":"超特大","fantasy":"fantasy","serif":"serif","p":"段落","pre":"事前フォーマット済み","sans-serif":"sans-serif","fontName":"フォント","h1":"見出し","h2":"副見出し","h3":"副見出しの副見出し","monospace":"monospace","fontSize":"サイズ","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ja_jp");dijit._editor.nls.LinkDialog.ja_jp={"text":"説明:","insertImageTitle":"イメージ・プロパティー","set":"設定","newWindow":"新規ウィンドウ","topWindow":"最上位ウィンドウ","target":"ターゲット:","createLinkTitle":"リンク・プロパティー","parentWindow":"親ウィンドウ","currentWindow":"現行ウィンドウ","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja_jp");dojo.cldr.nls.currency.ja_jp={"HKD_displayName":"香港ドル","CHF_displayName":"スイス フラン","JPY_symbol":"￥","CAD_displayName":"カナダ ドル","CNY_displayName":"中国人民元","USD_symbol":"$","AUD_displayName":"オーストラリア ドル","JPY_displayName":"日本円","USD_displayName":"米ドル","CNY_symbol":"元","GBP_displayName":"英国ポンド","EUR_displayName":"ユーロ","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja_jp");dojo.cldr.nls.gregorian.ja_jp={"field-weekday":"曜日","dateFormatItem-yQQQ":"yQQQ","dateFormatItem-yMEd":"y/M/d(EEE)","dateFormatItem-MMMEd":"M月d日(E)","eraNarrow":["BC","AD"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"午後","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMd":"y/M/d","field-era":"時代","dateFormatItem-yM":"y/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"H:mm","quarters-format-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"timeFormat-long":"H:mm:ss z","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y/Q","field-hour":"時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy/Q","timeFormat-full":"H時mm分ss秒 zzzz","field-day-relative+0":"今日","field-day-relative+1":"明日","field-day-relative+2":"明後日","dateFormatItem-H":"H時","field-day-relative+3":"3日後","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"dateFormatItem-M":"L","days-standAlone-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"dateFormatItem-yyMMM":"y年M月","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["BC","AD"],"field-minute":"分","field-dayperiod":"午前/午後","days-standAlone-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨日","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"一昨日","field-day-relative+-3":"3日前","dateFormatItem-MMMd":"M月d日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-zone":"タイムゾーン","dateFormatItem-yyyyMM":"yyyy/MM","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"ah:mm","dateFormatItem-GGGGyMd":"GGGGy年M月d日","days-format-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-yMMMd":"y年M月d日","eraNames":["紀元前","西暦"],"days-format-narrow":["日","月","火","水","木","金","土"],"field-month":"月","days-standAlone-narrow":["日","月","火","水","木","金","土"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"午前","dateFormat-short":"yy/MM/dd","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日(EEE)","dateFormatItem-Ed":"d日(EEE)","field-week":"週","dateFormat-medium":"yyyy/MM/dd","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_en.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_en.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_en.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_en");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en");dojo.nls.colors.en={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en");dijit.nls.loading.en={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en");dijit._editor.nls.commands.en={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en");dijit.form.nls.validate.en={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en");dijit.form.nls.ComboBox.en={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.en");dijit._editor.nls.FontChoice.en={"noFormat":"None","1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.en");dijit._editor.nls.LinkDialog.en={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en");dojo.cldr.nls.currency.en={"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en");dojo.cldr.nls.gregorian.en={"dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateFormatItem-MMMEd":"E, MMM d","dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormat-long":"MMMM d, y","timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"MMM d, y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","timeFormat-short":"h:mm a","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","dateFormatItem-MEd":"E, M/d","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormat-short":"M/d/yy","dateFormatItem-yMMMEd":"EEE, MMM d, y","dateFormat-full":"EEEE, MMMM d, y","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"EEE, M/d/y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_ar.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ar.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ar.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ar");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ar");dojo.nls.colors.ar={"lightsteelblue":"أزرق معدني فاتح","orangered":"أحمر مائل للبرتقالي","midnightblue":"أزرق بحري","cadetblue":"أزرق ملون بالرمادي","seashell":"أبيض مائل للأصفر فاتح","slategrey":"رمادي اردوازي","coral":"مرجاني","darkturquoise":"تركواز داكن","antiquewhite":"أبيض عتيق","mediumspringgreen":"أخضر ربيعي متوسط","salmon":"برتقالي وردي شاحب","darkgrey":"رمادي داكن","ivory":"عاجي","greenyellow":"أخضر مائل للأصفر","mistyrose":"وردي","lightsalmon":"فضي فاتح","silver":"فضي","dimgrey":"رمادي شاحب","orange":"برتقالي","white":"أبيض","navajowhite":"أبيض ملاحي","royalblue":"أزرق ملكي","deeppink":"أحمر وردي غامق","lime":"ليموني","oldlace":"برتقالي مائل للأصفر شاحب","chartreuse":"أخضر مائل للصفرة","darkcyan":"أزرق سماوي داكن","yellow":"أصفر","linen":"كتاني","olive":"أخضر زيتوني داكن","gold":"ذهبي","lawngreen":"أخضر بلون العشب","lightyellow":"أصفر فاتح","tan":"خمري","darkviolet":"بنفسجي داكن","lightslategrey":"رمادي اردوازي فاتح","grey":"رمادي","darkkhaki":"كاكي داكن","green":"أخضر","deepskyblue":"أزرق سماوي غامق","aqua":"أزرق مائي","sienna":"بني محروق","mintcream":"أصفر شاحب مائل للأخضر الزرعي","rosybrown":"بني وردي","mediumslateblue":"أزرق اردوازي متوسط","magenta":"أحمر قرمزي","lightseagreen":"أخضر مائل للأزرق فاتح","cyan":"أزرق سماوي","olivedrab":"أسود فاتح","darkgoldenrod":"أصفر ذهبي داكن","slateblue":"أزرق اردوازي","mediumaquamarine":"أزرق مائل للأخضر (زبرجد) متوسط","lavender":"أرجواني شاحب","mediumseagreen":"أخضر مائل للأزرق متوسط","maroon":"أحمر داكن","darkslategray":"رمادي اردوازي داكن","mediumturquoise":"تركواز متوسط","ghostwhite":"أبيض شفاف","darkblue":"أزرق داكن","mediumvioletred":"أحمر-بنفسجي متوسط","brown":"بني","lightgray":"رمادي فاتح","sandybrown":"بني مائل للصفرة","pink":"وردي","firebrick":"أصفر زاهي","indigo":"نيلي","snow":"أبيض ثلجي","darkorchid":"أرجواني داكن","turquoise":"تركواز","chocolate":"بني غامق","springgreen":"أخضر ربيعي","moccasin":"نحاسي أحمر","navy":"أزرق داكن","lemonchiffon":"أصفر شفاف","teal":"بترولي","floralwhite":"أبيض زهري","cornflowerblue":"أزرق عنبري","paleturquoise":"تركواز شاحب","purple":"ارجواني","gainsboro":"رمادي مائل للأزرق فاتح","plum":"أرجواني داكن","red":"أحمر","blue":"أزرق","forestgreen":"أخضر بلون أشجار الغابات","darkgreen":"أخضر داكن","honeydew":"أبيض مائل للأخضر","darkseagreen":"أخضر مائل للأزرق داكن","lightcoral":"مرجاني فاتح","palevioletred":"أحمر-بنفسجي شاحب","mediumpurple":"قرمزي متوسط","saddlebrown":"بني فاتح","darkmagenta":"قرمزي داكن","thistle":"ارجواني شاحب","whitesmoke":"دخان أبيض","wheat":"أخضر قمحي","violet":"بنفسجي","lightskyblue":"أزرق سماوي فاتح","goldenrod":"أصفر ذهبي","mediumblue":"أزرق متوسط","skyblue":"أزرق سماوي","crimson":"قرمزي","darksalmon":"فضي داكن","darkred":"أحمر داكن","darkslategrey":"رمادي اردوازي داكن","peru":"بني جملي","lightgrey":"رمادي فاتح","lightgoldenrodyellow":"أصفر ذهبي فاتح","blanchedalmond":"أخضر مائل للبياض","aliceblue":"أزرق فاتح","bisque":"أصفر برتقالي الى رمادي مصفر","slategray":"رمادي اردوازي","palegoldenrod":"أصفر ذهبي شاحب","darkorange":"برتقالي داكن","aquamarine":"أزرق مائل للأخضر (زبرجد)","lightgreen":"أخضر فاتح","burlywood":"خشبي","dodgerblue":"أزرق عنبري","darkgray":"رمادي داكن","lightcyan":"سماوي فاتح","powderblue":"أزرق مائل للأصفر","blueviolet":"أزرق-بنفسجي","orchid":"أرجواني فاتح","dimgray":"رمادي شاحب","beige":"بيج","fuchsia":"فوشيا","lavenderblush":"أحمر أرجواني","hotpink":"أحمر وردي زاهي","steelblue":"أزرق معدني","tomato":"أحمر مائل للأصفر","lightpink":"وردي فاتح","limegreen":"أخضر ليموني","indianred":"أحمر هندي","papayawhip":"خوخي فاتح","lightslategray":"رمادي اردوازي فاتح","gray":"رمادي","mediumorchid":"أرجواني متوسط","cornsilk":"حريري","black":"أسود","seagreen":"أخضر مائل للأزرق","darkslateblue":"أزرق اردوازي داكن","khaki":"كاكي","lightblue":"أزرق فاتح","palegreen":"أخضر شاحب","azure":"أزرق سماوي","peachpuff":"خوخي مائل للأصفر","darkolivegreen":"أخضر زيتوني داكن","yellowgreen":"أخضر مائل للأصفر"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ar");dijit.nls.loading.ar={"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ar");dijit.nls.common.ar={"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ar");dijit._editor.nls.commands.ar={"removeFormat":"ازالة النسق","copy":"نسخ","paste":"لصق","selectAll":"اختيار كل","insertOrderedList":"‏كشف مرقم‏","insertTable":"ادراج/تحرير جدول","print":"‏طباعة‏","underline":"~تسطير","foreColor":"لون الواجهة الأمامية","htmlToggle":"مصدر HTML","formatBlock":"نمط الفقرة","newPage":"صفحة جديدة","insertHorizontalRule":"مسطرة أفقية","delete":"حذف","insertUnorderedList":"كشف نقطي","tableProp":"خصائص الجدول","insertImage":"ادراج صورة","superscript":"رمز علوي","subscript":"رمز سفلي","createLink":"تكوين وصلة","undo":"تراجع","fullScreen":"تبديل الشاشة الكاملة","italic":"~مائل","fontName":"اسم طاقم الطباعة","justifyLeft":"محاذاة الى اليسار","unlink":"ازالة وصلة","toggleTableBorder":"تبديل حدود الجدول","viewSource":"‫مشاهدة مصدر HTML‬","ctrlKey":"ctrl+${0}","fontSize":"حجم طاقم الطباعة","systemShortcut":"التصرف \"${0}\" يكون متاحا فقط في برنامج الاستعراض الخاص بك باستخدام المسار المختصر للوحة المفاتيح. استخدم ${1}.","indent":"‏ازاحة للداخل‏","redo":"‏اعادة‏","strikethrough":"تشطيب","justifyFull":"ضبط","justifyCenter":"محاذاة في الوسط","hiliteColor":"‏لون الخلفية‏","deleteTable":"حذف جدول","outdent":"ازاحة للخارج","cut":"قص","plainFormatBlock":"نمط الفقرة","toggleDir":"تبديل الاتجاه","bold":"عري~ض","tabIndent":"ازاحة للداخل باستخدام Tab","justifyRight":"محاذاة الى اليمين","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ar");dijit.form.nls.validate.ar={"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ar");dijit.form.nls.ComboBox.ar={"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ar");dijit._editor.nls.FontChoice.ar={"1":"صغير جدا جدا","2":"صغير جدا","formatBlock":"النسق","3":"صغير","4":"متوسط","5":"كبير","6":"كبير جدا","7":"كبير جدا جدا","fantasy":"خيالي","serif":"serif","p":"فقرة","pre":"منسق بصفة مسبقة","sans-serif":"sans-serif","fontName":"طاقم طباعة","h1":"عنوان","h2":"عنوان فرعي","h3":"فرعي-عنوان فرعي","monospace":"أحادي المسافة","fontSize":"الحجم","cursive":"كتابة بحروف متصلة","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ar");dijit._editor.nls.LinkDialog.ar={"text":"الوصف:","insertImageTitle":"خصائص الصورة","set":"تحديد","newWindow":"نافذة جديدة","topWindow":"النافذة العلوية","target":"الهدف: ","createLinkTitle":"خصائص الوصلة","parentWindow":"النافذة الرئيسية","currentWindow":"النافذة الحالية","url":"عنوان URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ar");dojo.cldr.nls.number.ar={"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":"٫","nan":"ليس رقم","nativeZeroDigit":"٠","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ar");dojo.cldr.nls.currency.ar={"HKD_displayName":"دولار هونج كونج","CHF_displayName":"فرنك سويسري","CAD_displayName":"دولار كندي","CNY_displayName":"يوان صيني","AUD_displayName":"دولار أسترالي","JPY_displayName":"ين ياباني","USD_displayName":"دولار أمريكي","CNY_symbol":"ي.ص","GBP_displayName":"جنيه إسترليني","EUR_displayName":"يورو","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ar");dojo.cldr.nls.gregorian.ar={"dateFormatItem-yM":"M‏/yyyy","field-dayperiod":"ص/م","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"أمس","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd‏/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","dayPeriods-format-wide-am":"ص","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"اليوم","field-day-relative+1":"غدًا","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"field-day-relative+2":"بعد الغد","dateFormatItem-yyyyMM":"MM‏/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd‏/MM‏/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١","٢","٣","٤"],"field-week":"الأسبوع","months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"dateFormatItem-yyQ":"Q yy","timeFormat-long":"z h:mm:ss a","months-format-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"timeFormat-short":"h:mm a","field-month":"الشهر","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"days-standAlone-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormat-short":"d‏/M‏/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/‏M","dateFormatItem-yMEd":"EEE، d/‏M/‏yyyy","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"eraNarrow":["ق.م","م"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/es/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/es/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/es/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/es/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/es/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/es/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/zh-tw/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/zh-tw/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/zh-tw/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/zh-tw/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/zh-tw/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/zh-tw/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"載入中...","errorState":"抱歉，發生錯誤"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_fr.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_fr.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_fr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr");dojo.nls.colors.fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr");dijit.nls.loading.fr={"loadingState":"Chargement...","errorState":"Une erreur est survenue"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr");dijit._editor.nls.commands.fr={"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer vers le mode plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"Action \"${0}\" uniquement disponible dans votre navigateur via un raccourci clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr");dijit.form.nls.validate.fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr");dijit.form.nls.ComboBox.fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fr");dijit._editor.nls.FontChoice.fr={"1":"xxs","2":"xs","formatBlock":"Mise en forme","3":"s","4":"m","5":"l","6":"xl","7":"xxl","fantasy":"fantaisie","serif":"serif","p":"Paragraphe","pre":"Pré-mise en forme","sans-serif":"sans serif","fontName":"Police","h1":"En-tête","h2":"Sous-en-tête","h3":"Sous-sous-en-tête","monospace":"espacement fixe","fontSize":"Taille","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fr");dijit._editor.nls.LinkDialog.fr={"text":"Description :","insertImageTitle":"Propriétés des images","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Première fenêtre","target":"Cible :","createLinkTitle":"Propriétés des liens","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre en cours","url":"URL :"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr");dojo.cldr.nls.currency.fr={"HKD_displayName":"dollar de Hong Kong","CHF_displayName":"franc suisse","CHF_symbol":"CHF","JPY_symbol":"¥JP","HKD_symbol":"$HK","CAD_displayName":"dollar canadien","CNY_displayName":"yuan renminbi chinois","USD_symbol":"$US","AUD_displayName":"dollar australien","JPY_displayName":"yen japonais","CAD_symbol":"$CA","USD_displayName":"dollar des États-Unis","CNY_symbol":"Ұ","GBP_displayName":"livre sterling","GBP_symbol":"£UK","AUD_symbol":"$AU","EUR_displayName":"euro","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr");dojo.cldr.nls.gregorian.fr={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/it/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/it/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/it/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/it/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/it/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/it/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_zh-tw.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_zh-tw.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_zh-tw.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_zh-tw");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_tw");dojo.nls.colors.zh_tw={"lightsteelblue":"淡鐵藍色","orangered":"橙紅色","midnightblue":"午夜藍","cadetblue":"軍服藍","seashell":"海貝色","slategrey":"岩灰色","coral":"珊瑚紅","darkturquoise":"暗松石綠","antiquewhite":"米白色","mediumspringgreen":"中春綠色","salmon":"鮭紅色","darkgrey":"暗灰色","ivory":"象牙色","greenyellow":"綠黃色","mistyrose":"霧玫瑰色","lightsalmon":"淡鮭紅","silver":"銀色","dimgrey":"昏灰色","orange":"橙色","white":"白色","navajowhite":"印地安黃色","royalblue":"品藍色","deeppink":"深粉紅色","lime":"檸檬色","oldlace":"舊蕾絲色","chartreuse":"淡黃綠色","darkcyan":"暗青色","yellow":"黃色","linen":"亞麻色","olive":"橄欖色","gold":"金色","lawngreen":"草綠色","lightyellow":"淡黃色","tan":"皮革色","darkviolet":"暗紫羅蘭色","lightslategrey":"淡岩灰色","grey":"灰色","darkkhaki":"暗卡其色","green":"綠色","deepskyblue":"深天藍色","aqua":"水色","sienna":"黃土赭色","mintcream":"薄荷乳白色","rosybrown":"玫瑰褐","mediumslateblue":"中岩藍色","magenta":"紫紅色","lightseagreen":"淡海綠色","cyan":"青色","olivedrab":"橄欖綠","darkgoldenrod":"暗金菊色","slateblue":"岩藍色","mediumaquamarine":"中碧綠色","lavender":"薰衣草紫","mediumseagreen":"中海綠色","maroon":"栗色","darkslategray":"暗岩灰色","mediumturquoise":"中松石綠","ghostwhite":"幽靈色","darkblue":"暗藍色","mediumvioletred":"中紫羅蘭紅","brown":"褐色","lightgray":"淡灰色","sandybrown":"沙褐色","pink":"粉紅色","firebrick":"紅磚色","indigo":"靛藍色","snow":"雪白色","darkorchid":"暗蘭花色","turquoise":"松石綠","chocolate":"巧克力色","springgreen":"春綠色","moccasin":"鹿皮黃色","navy":"海軍藍","lemonchiffon":"奶油黃","teal":"深藍綠色","floralwhite":"花卉白","cornflowerblue":"矢車菊藍","paleturquoise":"灰松石綠","purple":"紫色","gainsboro":"石板灰","plum":"李紫色","red":"紅色","blue":"藍色","forestgreen":"森綠色","darkgreen":"暗綠色","honeydew":"密瓜色","darkseagreen":"暗海綠色","lightcoral":"淡珊瑚紅","palevioletred":"灰紫羅蘭紅","mediumpurple":"中紫色","saddlebrown":"鞍褐色","darkmagenta":"暗紫紅色","thistle":"薊色","whitesmoke":"白煙色","wheat":"小麥色","violet":"紫羅蘭色","lightskyblue":"淡天藍色","goldenrod":"金菊色","mediumblue":"中藍色","skyblue":"天藍色","crimson":"暗深紅色","darksalmon":"暗鮭紅","darkred":"暗紅色","darkslategrey":"暗岩灰色","peru":"祕魯色","lightgrey":"淡灰色","lightgoldenrodyellow":"淡金菊黃","blanchedalmond":"杏仁白","aliceblue":"愛麗絲藍","bisque":"橘黃色","slategray":"岩灰色","palegoldenrod":"灰金菊色","darkorange":"暗橙色","aquamarine":"碧綠色","lightgreen":"淡綠色","burlywood":"實木色","dodgerblue":"道奇藍","darkgray":"暗灰色","lightcyan":"淡青色","powderblue":"粉藍色","blueviolet":"藍紫色","orchid":"蘭花色","dimgray":"昏灰色","beige":"灰棕色","fuchsia":"海棠紅","lavenderblush":"薰衣草紫紅","hotpink":"暖粉紅色","steelblue":"鐵藍色","tomato":"蕃茄紅","lightpink":"淡粉紅色","limegreen":"檸檬綠","indianred":"印度紅","papayawhip":"番木瓜色","lightslategray":"淡岩灰色","gray":"灰色","mediumorchid":"中蘭紫色","cornsilk":"玉米黃","black":"黑色","seagreen":"海綠色","darkslateblue":"暗岩藍色","khaki":"卡其色","lightblue":"淡藍色","palegreen":"灰綠色","azure":"天藍色","peachpuff":"粉撲桃色","darkolivegreen":"暗橄欖綠","yellowgreen":"黃綠色"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_tw");dijit.nls.loading.zh_tw={"loadingState":"載入中...","errorState":"抱歉，發生錯誤"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_tw");dijit._editor.nls.commands.zh_tw={"removeFormat":"移除格式","copy":"複製","paste":"貼上","selectAll":"全選","insertOrderedList":"編號清單","insertTable":"插入/編輯表格","print":"列印","underline":"底線","foreColor":"前景顏色","htmlToggle":"HTML 原始檔","formatBlock":"段落樣式","newPage":"新建頁面","insertHorizontalRule":"水平尺規","delete":"刪除","insertUnorderedList":"項目符號清單","tableProp":"表格內容","insertImage":"插入影像","superscript":"上標","subscript":"下標","createLink":"建立鏈結","undo":"復原","fullScreen":"切換全螢幕","italic":"斜體","fontName":"字型名稱","justifyLeft":"靠左對齊","unlink":"移除鏈結","toggleTableBorder":"切換表格邊框","viewSource":"檢視 HTML 原始檔","fontSize":"字型大小","systemShortcut":"\"${0}\" 動作只能在瀏覽器中透過使用鍵盤快速鍵來使用。請使用 ${1}。","indent":"縮排","redo":"重做","strikethrough":"加刪除線","justifyFull":"對齊","justifyCenter":"置中對齊","hiliteColor":"背景顏色","deleteTable":"刪除表格","outdent":"凸排","cut":"剪下","plainFormatBlock":"段落樣式","toggleDir":"切換方向","bold":"粗體","tabIndent":"定位點縮排","justifyRight":"靠右對齊","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_tw");dijit.form.nls.validate.zh_tw={"rangeMessage":"此值超出範圍。","invalidMessage":"輸入的值無效。","missingMessage":"必須提供此值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_tw");dijit.form.nls.ComboBox.zh_tw={"previousMessage":"前一個選擇項","nextMessage":"其他選擇項"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.zh_tw");dijit._editor.nls.FontChoice.zh_tw={"1":"最小","2":"較小","formatBlock":"格式","3":"小","4":"中","5":"大","6":"較大","7":"最大","fantasy":"Fantasy","serif":"新細明體","p":"段落","pre":"預先格式化","sans-serif":"新細明體","fontName":"字型","h1":"標題","h2":"子標題","h3":"次子標題","monospace":"等寬","fontSize":"大小","cursive":"Cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.zh_tw");dijit._editor.nls.LinkDialog.zh_tw={"text":"說明：","insertImageTitle":"影像內容","set":"設定","newWindow":"新視窗","topWindow":"最上面的視窗","target":"目標：","createLinkTitle":"鏈結內容","parentWindow":"上層視窗","currentWindow":"現行視窗","url":"URL："};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_tw");dojo.cldr.nls.currency.zh_tw={"BRE_displayName":"巴西克魯賽羅 (1990-1993)","DEM_displayName":"德國馬克","KGS_symbol":"som","CUP_displayName":"古巴披索","HUF_symbol":"Ft","BDT_symbol":"Tk","LSL_symbol":"M","VEF_symbol":"BsF","MDL_displayName":"摩杜雲列伊","DOP_displayName":"多明尼加披索","MTL_symbol":"Lm","NGN_displayName":"奈及利亞奈拉","KZT_displayName":"卡扎克斯坦坦吉","BGL_symbol":"lev","LTT_displayName":"立陶宛特羅","LAK_displayName":"寮國基普","LKR_displayName":"斯里蘭卡盧布","AOR_displayName":"安哥拉新寬扎 Reajustado (1995-1999)","XEU_displayName":"歐洲貨幣單位 XEU","SYP_symbol":"LS","USS_displayName":"美元 (同一天)","MNT_displayName":"蒙古圖格里克","AMD_symbol":"dram","MOP_displayName":"澳門元","TJR_displayName":"塔吉克斯坦盧布","LUC_displayName":"盧森堡可兌換法郎","LUL_displayName":"盧森堡金融法郎","MRO_symbol":"UM","AON_displayName":"安哥拉新寬扎 (1990-2000)","BEF_displayName":"比利時法郎","IEP_displayName":"愛爾蘭鎊","SBD_displayName":"索羅門群島元","GRD_displayName":"希臘德拉克馬","AZM_displayName":"阿塞拜彊馬特納","MTP_displayName":"馬爾他鎊","UGX_symbol":"U Sh","ARS_symbol":"Arg$","LVR_displayName":"拉脫維亞盧布","GNF_displayName":"幾內亞法郎","GIP_displayName":"直布羅陀鎊","SRG_displayName":"蘇里南盾","BAD_displayName":"波士尼亞-黑塞哥維那第納爾","FJD_displayName":"斐濟元","BAM_displayName":"波士尼亞-黑塞哥維那可轉換馬克","XBB_displayName":"歐洲貨幣單位 XBB","CDF_displayName":"剛果法郎","HRD_displayName":"克羅地亞第納爾","EQE_displayName":"埃奎維勒","BZD_displayName":"伯利茲元","MLF_displayName":"馬里法郎","VEB_symbol":"Be","EGP_displayName":"埃及鎊","MVR_displayName":"馬爾地夫海島盧非亞","KWD_symbol":"KD","TRL_symbol":"TL","ALL_symbol":"lek","SDP_displayName":"蘇丹鎊","NPR_displayName":"尼泊爾盧布","PHP_displayName":"菲律賓披索","DJF_symbol":"DF","WST_displayName":"西薩摩亞塔拉","JPY_displayName":"日圓","TMM_displayName":"土庫曼馬納特","STD_symbol":"Db","BGN_displayName":"保加利亞新列弗","KYD_displayName":"開曼群島美元","VUV_displayName":"萬那杜萬杜","IRR_displayName":"伊朗里亞爾","DJF_displayName":"吉布地法郎","BTN_symbol":"Nu","XDR_displayName":"特殊提款權","ECS_displayName":"厄瓜多蘇克雷","LSM_displayName":"馬洛蒂","MNT_symbol":"Tug","NLG_displayName":"荷蘭盾","MWK_displayName":"馬拉維克瓦查","IRR_symbol":"RI","OMR_symbol":"RO","JMD_symbol":"J$","PES_displayName":"秘魯太陽幣","SRG_symbol":"Sf","LYD_displayName":"利比亞第納爾","BRR_displayName":"巴西克魯賽羅","ETB_symbol":"Br","KMF_symbol":"CF","DKK_symbol":"DKr","XXX_displayName":"XXX","IDR_displayName":"印尼 - 盧布","DZD_symbol":"DA","TZS_symbol":"T Sh","SGD_symbol":"SGD","KGS_displayName":"吉爾吉斯索馬","BRN_displayName":"巴西克如爾達農瓦","AFN_symbol":"Af","ISK_displayName":"冰島克朗","LUF_displayName":"盧森堡法郎","MXN_symbol":"MEX$","GYD_symbol":"G$","TOP_symbol":"T$","SVC_displayName":"薩爾瓦多科郎","ZMK_displayName":"尚比亞克瓦查","TOP_displayName":"東加潘加","ITL_displayName":"義大利里拉","USN_displayName":"美元 (第二天)","KWD_displayName":"科威特第納爾","GEL_symbol":"lari","KMF_displayName":"科摩羅法郎","COP_symbol":"Col$","MYR_displayName":"馬來西亞 - 林吉特","XFU_displayName":"法國 UIC 法郎","GMD_displayName":"甘比亞達拉西","LVL_displayName":"拉脫維亞拉特銀幣","AUD_displayName":"澳幣","XPF_displayName":"CFP 法郎","LBP_displayName":"黎巴嫩鎊","SKK_symbol":"Sk","BYB_displayName":"白俄羅斯新盧布 (1994-1999)","MKD_displayName":"馬其頓第納爾","GWP_displayName":"幾內亞披索披索","CNY_displayName":"人民幣","HNL_symbol":"L","BOB_symbol":"Bs","JOD_displayName":"約旦第納爾","OMR_displayName":"阿曼里奧","BOV_displayName":"玻利維亞幕多","XPT_displayName":"白金","AUD_symbol":"AU$","NOK_displayName":"挪威克羅納","SCR_displayName":"塞舌爾群島盧布","XBA_displayName":"歐洲綜合單位","CSK_displayName":"捷克斯洛伐克硬克朗","PLZ_displayName":"波蘭茲羅提 (1950-1995)","UAK_displayName":"烏克蘭卡本瓦那茲","MGF_displayName":"馬達加斯加法郎","GNS_displayName":"幾內亞西里","YUN_displayName":"南斯拉夫 可轉換第納爾","UYU_symbol":"Ur$","GYD_displayName":"圭亞那元","QAR_displayName":"卡達爾里亞爾","BZD_symbol":"BZ$","JOD_symbol":"JD","ALL_displayName":"阿爾巴尼亞列克","BBD_displayName":"巴貝多元","RON_displayName":"羅馬尼亞列伊","XCD_symbol":"EC$","AMD_displayName":"亞美尼亞德拉姆","CYP_displayName":"賽浦路斯鎊","GBP_symbol":"£","SEK_displayName":"瑞典克羅納","MZN_symbol":"MTn","MMK_displayName":"緬甸元","ZAR_displayName":"南非蘭特","ECV_displayName":"厄瓜多爾由里達瓦康斯坦 (UVC)","LYD_symbol":"LD","VUV_symbol":"VT","AWG_displayName":"阿魯巴盾","CVE_symbol":"CVEsc","STD_displayName":"聖多美島和普林西比島多布拉","CAD_displayName":"加幣","ADP_displayName":"安道爾陪士特","MRO_displayName":"茅利塔尼亞烏吉亞","LSL_displayName":"賴索托羅蒂","TND_displayName":"突尼西亞第納爾","USD_symbol":"$","BMD_symbol":"Ber$","BAM_symbol":"KM","BRC_displayName":"巴西克魯賽羅 (1986-1989)","BMD_displayName":"百慕達幣","BRL_displayName":"巴西里拉","JMD_displayName":"牙買加元","SOS_displayName":"索馬利亞先令","SAR_displayName":"沙烏地里雅","PEI_displayName":"祕魯因蒂","ESP_displayName":"西班牙陪士特","HKD_displayName":"港幣","ESP_symbol":"₧","BWP_displayName":"波札那 - 普拉","TTD_displayName":"千里達及托巴哥元","BSD_displayName":"巴哈馬元","BIF_displayName":"蒲隆地法郎","FRF_displayName":"法國法郎","DKK_displayName":"丹麥克羅納","AED_displayName":"阿拉伯聯合大公國迪爾汗","GHS_symbol":"GH¢","AOK_displayName":"安哥拉寬扎(1977-1990)","ATS_displayName":"奧地利先令","PEN_displayName":"秘魯新太陽幣","CRC_displayName":"哥斯大黎加科郎","PAB_displayName":"巴拿馬巴波亞","CHE_displayName":"WIR 歐元","GQE_displayName":"赤道幾內亞埃奎勒","DZD_displayName":"阿爾及利亞第納爾","EEK_displayName":"愛沙尼亞克朗","YDD_displayName":"葉門第納爾","GHC_displayName":"迦納仙蔕","YER_symbol":"YRl","PLN_symbol":"Zl","NPR_symbol":"Nrs","MXP_displayName":"墨西哥銀披索 (1861-1992)","XAG_displayName":"XAG","XFO_displayName":"法國金法郎","GWE_displayName":"葡屬幾內亞埃斯庫多","BOB_displayName":"玻利維亞貨幣單位","CAD_symbol":"CA$","ZWD_displayName":"辛巴威元","SRD_displayName":"蘇利南元","ZRN_displayName":"薩伊新扎伊爾","XAU_displayName":"黃金","GTQ_symbol":"Q","KRW_symbol":"KRW","BOP_displayName":"玻利維亞披索","LBP_symbol":"LL","XBD_displayName":"歐洲會計單位(XBD)","TZS_displayName":"坦尚尼亞先令","XPF_symbol":"CFPF","TTD_symbol":"TT$","LRD_displayName":"賴比瑞亞元","KRW_displayName":"韓國圜","SHP_displayName":"聖赫勒拿鎊","NAD_symbol":"N$","MZE_displayName":"莫桑比克埃斯庫多","SDD_displayName":"蘇丹第納爾","HRK_displayName":"克羅地亞庫納","FKP_displayName":"福克蘭群島鎊","COP_displayName":"哥倫比亞披索","YUD_displayName":"南斯拉夫第納爾硬幣","YUM_displayName":"南斯拉夫挪威亞第納爾","BYR_symbol":"Rbl","THB_displayName":"泰銖","MGA_displayName":"馬達加斯加艾瑞爾","TWD_displayName":"新臺幣","UGS_displayName":"烏干達先令 (1966-1987)","SBD_symbol":"SI$","ZAL_displayName":"南非 - 蘭特 (金融)","GEL_displayName":"喬治拉里","ILP_displayName":"以色列鎊","MKD_symbol":"MDen","KES_displayName":"肯尼亞先令","CZK_displayName":"捷克克朗","UGX_displayName":"烏干達先令","KZT_symbol":"T","BGL_displayName":"保加利亞硬列弗","ARP_displayName":"阿根廷披索(1983-1985)","BBD_symbol":"BDS$","MYR_symbol":"RM","RUR_displayName":"俄羅斯盧布 (1991-1998)","ERN_displayName":"厄立特里亞納克法","BEF_symbol":"BF","CLF_displayName":"卡林油達佛曼跎","BRB_displayName":"巴西克魯薩多農瓦（1967-1986）","IDR_symbol":"Rp","IEP_symbol":"IR£","BHD_displayName":"巴林第納爾","SYP_displayName":"敘利亞鎊","BIF_symbol":"Fbu","SZL_displayName":"史瓦濟蘭里朗吉尼","INR_displayName":"印度盧布","PTE_displayName":"葡萄牙埃斯庫多","KPW_displayName":"北朝鮮幣","XOF_displayName":"西非法郎 BCEAO","DOP_symbol":"RD$","MXN_displayName":"墨西哥 - 披索","RWF_displayName":"盧安達法郎","ETB_displayName":"衣索比亞比爾","LTL_displayName":"立陶宛里塔","SZL_symbol":"E","QAR_symbol":"QR","SOS_symbol":"Sh.","BND_displayName":"汶萊元","SUR_displayName":"蘇聯盧布","AOA_displayName":"安哥拉寬扎","FJD_symbol":"F$","CVE_displayName":"維德角埃斯庫多","XTS_displayName":"XTS","CLP_displayName":"智利披索","HUF_displayName":"匈牙利 - 福林","LKR_symbol":"SL Re","SCR_symbol":"SR","TJS_displayName":"塔吉克索莫尼","MWK_symbol":"MK","GBP_displayName":"英鎊","TPE_displayName":"帝汶埃斯庫多","GNF_symbol":"GF","SGD_displayName":"新加坡幣","SLL_displayName":"獅子山利昂","MZM_symbol":"Mt","PHP_symbol":"Php","CYP_symbol":"£C","XAF_displayName":"西非法郎 BEAC","MTL_displayName":"馬爾他里拉","KHR_displayName":"柬埔寨瑞爾","ZRZ_displayName":"扎伊爾扎伊爾","KES_symbol":"K Sh","PKR_symbol":"Pra","IQD_symbol":"ID","BEC_displayName":"比利時法郎 （可轉換）","BEL_displayName":"比利時法郎 （金融）","AZN_displayName":"亞塞拜然蒙納特","FIM_displayName":"芬蘭馬克","PKR_displayName":"巴基斯坦盧布","UYP_displayName":"烏拉圭披索 (1975-1993)","ANG_symbol":"NA f.","CHW_displayName":"WIR 法郎","PLN_displayName":"波蘭茲羅提","RON_symbol":"0≤lei|1≤leu|1","BTN_displayName":"不丹那特倫","UAH_displayName":"烏克蘭格里夫那","YER_displayName":"也門里亞爾","UYU_displayName":"烏拉圭披索","CRC_symbol":"C","PGK_displayName":"巴布亞紐幾內亞基那","XBC_displayName":"歐洲會計單位(XBC)","EUR_displayName":"歐元","MUR_displayName":"模里西斯盧布","BYR_displayName":"白俄羅斯盧布","SEK_symbol":"SKr","BHD_symbol":"BD","IQD_displayName":"伊拉克第納爾","VEB_displayName":"委內瑞拉博利瓦","CLP_symbol":"Ch$","MZM_displayName":"莫三比克梅蒂卡爾","NZD_symbol":"$NZ","CHF_symbol":"Fr.","SIT_displayName":"斯洛維尼亞托勒","NOK_symbol":"NKr","XCD_displayName":"格瑞那達元","RUB_displayName":"俄羅斯盧布","BUK_displayName":"緬甸元 BUK","ILS_displayName":"以色列新謝克爾","KHR_symbol":"CR","NAD_displayName":"納米比亞元","HNL_displayName":"洪都拉斯倫皮拉","GTQ_displayName":"瓜地馬拉格查爾","EUR_symbol":"€","NZD_displayName":"紐西蘭幣","ARA_displayName":"阿根廷奧斯特納爾","ARS_displayName":"阿根廷披索","ANG_displayName":"荷屬安地列斯盾","MOP_symbol":"MOP","ZWD_symbol":"Z$","ITL_symbol":"₤","ZAR_symbol":"R","CHF_displayName":"瑞士法郎","USD_displayName":"美元","CNY_symbol":"￥","HKD_symbol":"HK$","JPY_symbol":"JP¥"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_tw");dojo.cldr.nls.gregorian.zh_tw={"dateFormatItem-yM":"yyyy/M","field-minute":"分鐘","eraNames":["西元前","西元"],"field-weekday":"週天","dateFormatItem-MMdd":"MM/dd","field-day-relative+-3":"大前天","field-relative-day":"大後天","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"field-era":"年代","field-hour":"小時","quarters-standAlone-abbr":["第1季","第2季","第3季","第4季"],"timeFormat-full":"zzzzah時mm分ss秒","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-Ed":"d日(E)","dateFormatItem-yMMM":"y年M月","eraAbbr":["西元前","西元"],"field-day-relative+2":"後天","field-day-relative+3":"大後天","timeFormat-medium":"ah:mm:ss","field-zone":"區域","dateFormatItem-yyMM":"yy-MM","dateFormat-medium":"yyyy/M/d","quarters-standAlone-wide":["第1季","第2季","第3季","第4季"],"dateFormatItem-yMMMM":"y年M月","dateFormatItem-HHmmss":"H:mm:ss","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-week":"週","dateFormatItem-HHmm":"H:mm","timeFormat-long":"zah時mm分ss秒","dateFormatItem-H":"H時","quarters-format-abbr":["第1季","第2季","第3季","第4季"],"days-format-abbr":["週日","週一","週二","週三","週四","週五","週六"],"field-second":"秒","dateFormatItem-MEd":"M/d（E）","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"days-standAlone-abbr":["週日","週一","週二","週三","週四","週五","週六"],"dateFormat-short":"yy/M/d","dateFormatItem-yMMMEd":"y年M月d日EEE","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"yyyy/M/d（EEE）","dateTimeAvailableFormats":["d日（E）","H:mm","H:mm:ss","M-d（E）","MM/dd","M/d","yyyy/M","yyyy/M/d（EEE）","yyyy年M月","yyyy年M月","yyyy/MM","MMMMdd日","MMMd日","MM-dd","M-d","d日","mm:ss","mm:ss","yyyy年","yyyy-M","yyyy年M月d日，E","yyyy年MMM","yyyy年MMMd日EEE","yyyy年MMMM","yyyy年QQQ","y年QQQ","yy-MM","yy年MMM","yy年第Q季度","yyyy年","yyyy年M月","yyyy年MMMM"],"quarters-format-wide":["第1季","第2季","第3季","第4季"],"eraNarrow":["西元前","西元"],"dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-MMMEd":"MMMd日E","dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","timeFormat-short":"ah:mm","field-year":"年","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","field-day-relative+0":"今天","field-day-relative+1":"明天","dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","dateFormatItem-Hm":"H:mm","field-dayperiod":"上午/下午","dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-y":"y年","dateFormatItem-hm":"ah:mm","dateFormatItem-yMMMd":"y年MMMd日","days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dayPeriods-format-wide-afternoon":"下午","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_fr-fr.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_fr-fr.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_fr-fr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_fr-fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr_fr");dojo.nls.colors.fr_fr={"lightsteelblue":"bleu acier clair","orangered":"rouge orangé","midnightblue":"bleu nuit","cadetblue":"bleu pétrole","seashell":"coquillage","slategrey":"gris ardoise","coral":"corail","darkturquoise":"turquoise foncé","antiquewhite":"blanc antique","mediumspringgreen":"vert printemps moyen","salmon":"saumon","darkgrey":"gris foncé","ivory":"ivoire","greenyellow":"vert-jaune","mistyrose":"rose pâle","lightsalmon":"saumon clair","silver":"argent","dimgrey":"gris soutenu","orange":"orange","white":"blanc","navajowhite":"chair","royalblue":"bleu roi","deeppink":"rose soutenu","lime":"vert citron","oldlace":"blanc cassé","chartreuse":"vert vif","darkcyan":"cyan foncé","yellow":"jaune","linen":"écru","olive":"olive","gold":"or","lawngreen":"vert prairie","lightyellow":"jaune clair","tan":"grège","darkviolet":"violet foncé","lightslategrey":"gris ardoise clair","grey":"gris","darkkhaki":"kaki foncé","green":"vert","deepskyblue":"bleu ciel soutenu","aqua":"bleu-vert","sienna":"terre de sienne","mintcream":"crème de menthe","rosybrown":"vieux rose","mediumslateblue":"bleu ardoise moyen","magenta":"magenta","lightseagreen":"vert d'eau clair","cyan":"cyan","olivedrab":"brun verdâtre","darkgoldenrod":"jaune paille foncé","slateblue":"bleu ardoise","mediumaquamarine":"aigue-marine moyen","lavender":"lavande","mediumseagreen":"vert d'eau moyen","maroon":"marron","darkslategray":"gris ardoise foncé","mediumturquoise":"turquoise moyen","ghostwhite":"blanc laiteux","darkblue":"bleu foncé","mediumvioletred":"rouge violacé moyen","brown":"brun","lightgray":"gris clair","sandybrown":"sable","pink":"rose","firebrick":"rouge brique","indigo":"indigo","snow":"neige","darkorchid":"lilas foncé","turquoise":"turquoise","chocolate":"chocolat","springgreen":"vert printemps","moccasin":"chamois","navy":"bleu marine","lemonchiffon":"mousse de citron","teal":"sarcelle","floralwhite":"lys","cornflowerblue":"bleuet","paleturquoise":"turquoise pâle","purple":"pourpre","gainsboro":"gris souris","plum":"prune","red":"rouge","blue":"bleu","forestgreen":"vert sapin","darkgreen":"vert foncé","honeydew":"opalin","darkseagreen":"vert d'eau foncé","lightcoral":"corail clair","palevioletred":"rouge violacé pâle","mediumpurple":"pourpre moyen","saddlebrown":"brun cuir","darkmagenta":"magenta foncé","thistle":"chardon","whitesmoke":"blanc cendré","wheat":"blé","violet":"violet","lightskyblue":"bleu ciel clair","goldenrod":"jaune paille","mediumblue":"bleu moyen","skyblue":"bleu ciel","crimson":"cramoisi","darksalmon":"saumon foncé","darkred":"rouge foncé","darkslategrey":"gris ardoise foncé","peru":"caramel","lightgrey":"gris clair","lightgoldenrodyellow":"jaune paille clair","blanchedalmond":"coquille d'oeuf","aliceblue":"bleu gris","bisque":"beige rosé","slategray":"gris ardoise","palegoldenrod":"jaune paille pâle","darkorange":"orange foncé","aquamarine":"aigue-marine","lightgreen":"vert clair","burlywood":"bois précieux","dodgerblue":"bleu France","darkgray":"gris foncé","lightcyan":"cyan clair","powderblue":"bleu de smalt","blueviolet":"bleu-violet","orchid":"lilas","dimgray":"gris soutenu","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavandin","hotpink":"rose intense","steelblue":"bleu acier","tomato":"tomate","lightpink":"rose clair","limegreen":"citron vert","indianred":"rose indien","papayawhip":"crème de papaye","lightslategray":"gris ardoise clair","gray":"gris","mediumorchid":"lilas moyen","cornsilk":"vanille","black":"noir","seagreen":"vert d'eau","darkslateblue":"bleu ardoise foncé","khaki":"kaki","lightblue":"bleu clair","palegreen":"vert pâle","azure":"bleu azur","peachpuff":"pêche","darkolivegreen":"olive foncé","yellowgreen":"vert jaunâtre"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr_fr");dijit.nls.loading.fr_fr={"loadingState":"Chargement...","errorState":"Une erreur est survenue"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr_fr");dijit._editor.nls.commands.fr_fr={"removeFormat":"Supprimer la mise en forme","copy":"Copier","paste":"Coller","selectAll":"Sélectionner tout","insertOrderedList":"Liste numérotée","insertTable":"Insérer/Modifier un tableau","print":"Imprimer","underline":"Souligner","foreColor":"Couleur avant-plan","htmlToggle":"Source HTML","formatBlock":"Style de paragraphe","newPage":"Nouvelle page","insertHorizontalRule":"Règle horizontale","delete":"Supprimer","insertUnorderedList":"Liste à puces","tableProp":"Propriété du tableau","insertImage":"Insérer une image","superscript":"Exposant","subscript":"Indice","createLink":"Créer un lien","undo":"Annuler","fullScreen":"Basculer vers le mode plein écran","italic":"Italique","fontName":"Nom de police","justifyLeft":"Aligner à gauche","unlink":"Supprimer le lien","toggleTableBorder":"Afficher/Masquer la bordure du tableau","viewSource":"Afficher la source HTML","fontSize":"Taille de police","systemShortcut":"Action \"${0}\" uniquement disponible dans votre navigateur via un raccourci clavier. Utilisez ${1}.","indent":"Retrait","redo":"Rétablir","strikethrough":"Barrer","justifyFull":"Justifier","justifyCenter":"Aligner au centre","hiliteColor":"Couleur arrière-plan","deleteTable":"Supprimer le tableau","outdent":"Retrait négatif","cut":"Couper","plainFormatBlock":"Style de paragraphe","toggleDir":"Changer de sens","bold":"Gras","tabIndent":"Retrait de tabulation","justifyRight":"Aligner à droite","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr_fr");dijit.form.nls.validate.fr_fr={"rangeMessage":"Cette valeur n'est pas comprise dans la plage autorisée.","invalidMessage":"La valeur indiquée n'est pas correcte.","missingMessage":"Cette valeur est requise."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr_fr");dijit.form.nls.ComboBox.fr_fr={"previousMessage":"Choix précédents","nextMessage":"Plus de choix"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fr_fr");dijit._editor.nls.FontChoice.fr_fr={"1":"xxs","2":"xs","formatBlock":"Mise en forme","3":"s","4":"m","5":"l","6":"xl","7":"xxl","fantasy":"fantaisie","serif":"serif","p":"Paragraphe","pre":"Pré-mise en forme","sans-serif":"sans serif","fontName":"Police","h1":"En-tête","h2":"Sous-en-tête","h3":"Sous-sous-en-tête","monospace":"espacement fixe","fontSize":"Taille","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fr_fr");dijit._editor.nls.LinkDialog.fr_fr={"text":"Description :","insertImageTitle":"Propriétés des images","set":"Définir","newWindow":"Nouvelle fenêtre","topWindow":"Première fenêtre","target":"Cible :","createLinkTitle":"Propriétés des liens","parentWindow":"Fenêtre parent","currentWindow":"Fenêtre en cours","url":"URL :"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr_fr");dojo.cldr.nls.currency.fr_fr={"HKD_displayName":"dollar de Hong Kong","CHF_displayName":"franc suisse","CHF_symbol":"CHF","JPY_symbol":"¥JP","HKD_symbol":"$HK","CAD_displayName":"dollar canadien","CNY_displayName":"yuan renminbi chinois","USD_symbol":"$US","AUD_displayName":"dollar australien","JPY_displayName":"yen japonais","CAD_symbol":"$CA","USD_displayName":"dollar des États-Unis","CNY_symbol":"Ұ","GBP_displayName":"livre sterling","GBP_symbol":"£UK","AUD_symbol":"$AU","EUR_displayName":"euro","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr_fr");dojo.cldr.nls.gregorian.fr_fr={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"jour de la semaine","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["av. J.-C.","ap. J.-C."],"dayPeriods-format-wide-morning":"matin","dateFormatItem-MMMdd":"dd MMM","dateFormat-long":"d MMMM y","months-format-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE d MMMM y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"midi","field-era":"ère","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"timeFormat-short":"HH:mm","quarters-format-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"timeFormat-long":"HH:mm:ss z","field-year":"année","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"'T'Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"heure","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"dateFormatItem-yyQ":"'T'Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"aujourd’hui","field-day-relative+1":"demain","field-day-relative+2":"après-demain","field-day-relative+3":"après-après-demain","months-standAlone-abbr":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"quarters-format-abbr":["T1","T2","T3","T4"],"quarters-standAlone-wide":["1er trimestre","2e trimestre","3e trimestre","4e trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"dateFormatItem-yyMMMEEEd":"EEE d MMM yy","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["T1","T2","T3","T4"],"eraAbbr":["av. J.-C.","ap. J.-C."],"field-minute":"minute","field-dayperiod":"cadran","days-standAlone-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"dayPeriods-format-wide-night":"soir","dateFormatItem-yyMMMd":"d MMM yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["T1","T2","T3","T4"],"field-day-relative+-1":"hier","field-day-relative+-2":"avant-hier","field-day-relative+-3":"avant-avant-hier","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"EEE d/M","field-day":"jour","days-format-wide":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"field-zone":"fuseau horaire","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"eraNames":["avant Jésus-Christ","après Jésus-Christ"],"days-format-narrow":["D","L","M","M","J","V","S"],"field-month":"mois","days-standAlone-narrow":["D","L","M","M","J","V","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"EEE d MMMM","dateFormat-short":"dd/MM/yy","dateFormatItem-MMd":"d/MM","dayPeriods-format-wide-afternoon":"après-midi","field-second":"seconde","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"semaine","dateFormat-medium":"d MMM y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_de-de.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_de-de.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_de-de.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_de-de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de_de");dojo.nls.colors.de_de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de_de");dijit.nls.loading.de_de={"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de_de");dijit._editor.nls.commands.de_de={"removeFormat":"Formatierung entfernen","copy":"Kopieren","paste":"Einfügen","selectAll":"Alles auswählen","insertOrderedList":"Nummerierung","insertTable":"Tabelle einfügen/bearbeiten","print":"Drucken","underline":"Unterstrichen","foreColor":"Vordergrundfarbe","htmlToggle":"HTML-Quelltext","formatBlock":"Absatzstil","newPage":"Neue Seite","insertHorizontalRule":"Horizontaler Strich","delete":"Löschen","insertUnorderedList":"Aufzählungszeichen","tableProp":"Tabelleneigenschaft","insertImage":"Grafik einfügen","superscript":"Hochgestellt","subscript":"Tiefgestellt","createLink":"Link erstellen","undo":"Rückgängig","fullScreen":"Gesamtanzeige","italic":"Kursiv","fontName":"Schriftartname","justifyLeft":"Linksbündig","unlink":"Link entfernen","toggleTableBorder":"Tabellenumrandung ein-/ausschalten","viewSource":"HTML-Quelle","ctrlKey":"Strg+${0}","fontSize":"Schriftgröße","systemShortcut":"Die Aktion \"${0}\" ist nur über einen Direktaufruf in Ihrem Browser verfügbar. Verwenden Sie ${1}.","indent":"Einrücken","redo":"Wiederherstellen","strikethrough":"Durchgestrichen","justifyFull":"Blocksatz","justifyCenter":"Zentriert","hiliteColor":"Hintergrundfarbe","deleteTable":"Tabelle löschen","outdent":"Ausrücken","cut":"Ausschneiden","plainFormatBlock":"Absatzstil","toggleDir":"Wechselrichtung","bold":"Fett","tabIndent":"Tabulatoreinrückung","justifyRight":"Rechtsbündig","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de_de");dijit.form.nls.validate.de_de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de_de");dijit.form.nls.ComboBox.de_de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.de_de");dijit._editor.nls.FontChoice.de_de={"1":"XXS","2":"XS","formatBlock":"Format","3":"S","4":"M","5":"L","6":"XL","7":"XXL","fantasy":"Fantasie","serif":"Serife","p":"Absatz","pre":"Vorformatiert","sans-serif":"Serifenlos","fontName":"Schriftart","h1":"Überschrift","h2":"Unterüberschrift","h3":"Unterunterüberschrift","monospace":"Monospaceschrift","fontSize":"Größe","cursive":"Kursiv","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.de_de");dijit._editor.nls.LinkDialog.de_de={"text":"Beschreibung:","insertImageTitle":"Grafikeigenschaften","set":"Festlegen","newWindow":"Neues Fenster","topWindow":"Aktives Fenster","target":"Ziel:","createLinkTitle":"Linkeigenschaften","parentWindow":"Übergeordnetes Fenster","currentWindow":"Aktuelles Fenster","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de_de");dojo.cldr.nls.currency.de_de={"HKD_displayName":"Hongkong-Dollar","CHF_displayName":"Schweizer Franken","JPY_symbol":"¥","CAD_displayName":"Kanadischer Dollar","CNY_displayName":"Renminbi Yuan","USD_symbol":"$","AUD_displayName":"Australischer Dollar","JPY_displayName":"Yen","USD_displayName":"US-Dollar","GBP_displayName":"Pfund Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de_de");dojo.cldr.nls.gregorian.de_de={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Wochentag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d.M.y","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["v. Chr.","n. Chr."],"dayPeriods-format-wide-earlyMorning":"morgens","dayPeriods-format-wide-morning":"vormittags","dateFormat-long":"d. MMMM y","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dayPeriods-format-wide-evening":"abends","dateFormatItem-EEEd":"d. EEE","dayPeriods-format-wide-pm":"nachm.","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yyMMdd":"dd.MM.yy","dayPeriods-format-wide-noon":"Mittag","field-era":"Epoche","dateFormatItem-yM":"M.y","months-standAlone-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jahr","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Stunde","dateFormatItem-MMdd":"dd.MM.","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"heute","field-day-relative+1":"morgen","field-day-relative+2":"übermorgen","dateFormatItem-H":"HH","field-day-relative+3":"überübermorgen","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"dateFormatItem-M":"L","days-standAlone-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minute","field-dayperiod":"Tageshälfte","days-standAlone-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayPeriods-format-wide-night":"nachts","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gestern","field-day-relative+-2":"vorgestern","field-day-relative+-3":"vorvorgestern","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E, d.M.","field-day":"Tag","days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"field-zone":"Zone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","days-format-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"eraNames":["v. Chr.","n. Chr."],"days-format-narrow":["S","M","D","M","D","F","S"],"field-month":"Monat","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"vorm.","dateFormatItem-MMMMdd":"dd. MMMM","dateFormat-short":"dd.MM.yy","dateFormatItem-MMd":"d.MM.","dayPeriods-format-wide-afternoon":"nachmittags","field-second":"Sekunde","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormatItem-Ed":"E d.","field-week":"Woche","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_zh-cn.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_zh-cn.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_zh-cn.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_zh-cn");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_cn");dojo.nls.colors.zh_cn={"lightsteelblue":"浅钢蓝色","orangered":"橙红色","midnightblue":"深蓝色","cadetblue":"灰蓝色","seashell":"海贝色","slategrey":"灰石色","coral":"珊瑚色","darkturquoise":"深粉蓝","antiquewhite":"古董白","mediumspringgreen":"间春绿色","salmon":"橙红","darkgrey":"深灰色","ivory":"象牙色","greenyellow":"绿黄色","mistyrose":"浅玫瑰色","lightsalmon":"淡橙色","silver":"银白色","dimgrey":"暗灰色","orange":"橙色","white":"白色","navajowhite":"纳瓦白","royalblue":"品蓝","deeppink":"深粉红色","lime":"淡黄绿色","oldlace":"老白色","chartreuse":"黄绿色","darkcyan":"深青绿","yellow":"黄色","linen":"亚麻色","olive":"橄榄绿","gold":"金黄色","lawngreen":"草绿色","lightyellow":"浅黄色","tan":"棕褐色","darkviolet":"深紫色","lightslategrey":"浅青灰","grey":"灰色","darkkhaki":"深卡其色","green":"绿色","deepskyblue":"深天蓝色","aqua":"浅绿色","sienna":"赭色","mintcream":"薄荷色","rosybrown":"褐玫瑰红","mediumslateblue":"间暗蓝色","magenta":"洋红色","lightseagreen":"浅海藻绿","cyan":"青蓝色","olivedrab":"草绿色","darkgoldenrod":"深金黄","slateblue":"石蓝色","mediumaquamarine":"间绿色","lavender":"淡紫色","mediumseagreen":"间海蓝色","maroon":"栗色","darkslategray":"深青灰","mediumturquoise":"间绿宝石色","ghostwhite":"苍白","darkblue":"深蓝","mediumvioletred":"间紫罗兰色","brown":"棕色","lightgray":"浅灰色","sandybrown":"沙褐色","pink":"粉红色","firebrick":"砖红","indigo":"靛青","snow":"雪白色","darkorchid":"深紫色","turquoise":"绿宝石色","chocolate":"巧克力色","springgreen":"春绿色","moccasin":"鹿皮色","navy":"藏青色","lemonchiffon":"柠檬绸色","teal":"水鸭色","floralwhite":"花白色","cornflowerblue":"浅蓝色","paleturquoise":"苍绿色","purple":"紫色","gainsboro":"淡灰色","plum":"杨李色","red":"红色","blue":"蓝色","forestgreen":"森林绿","darkgreen":"深绿色","honeydew":"蜜汁色","darkseagreen":"深海藻绿","lightcoral":"浅珊瑚色","palevioletred":"苍紫罗兰色","mediumpurple":"间紫色","saddlebrown":"重褐色","darkmagenta":"深洋红色","thistle":"蓟色","whitesmoke":"烟白色","wheat":"浅黄色","violet":"紫色","lightskyblue":"浅天蓝色","goldenrod":"金麒麟色","mediumblue":"间蓝色","skyblue":"天蓝色","crimson":"绯红色","darksalmon":"深橙红","darkred":"深红色","darkslategrey":"深青灰","peru":"秘鲁色","lightgrey":"浅灰色","lightgoldenrodyellow":"浅金黄色","blanchedalmond":"白杏色","aliceblue":"爱丽丝蓝","bisque":"桔黄色","slategray":"灰石色","palegoldenrod":"淡金黄色","darkorange":"深橙色","aquamarine":"碧绿色","lightgreen":"浅绿色","burlywood":"实木色","dodgerblue":"闪蓝色","darkgray":"深灰色","lightcyan":"浅青色","powderblue":"铁蓝","blueviolet":"蓝紫色","orchid":"紫色","dimgray":"暗灰色","beige":"米色","fuchsia":"紫红色","lavenderblush":"淡紫红","hotpink":"深粉红","steelblue":"钢蓝色","tomato":"西红柿色","lightpink":"浅粉红色","limegreen":"橙绿色","indianred":"印度红","papayawhip":"木瓜色","lightslategray":"浅青灰","gray":"灰色","mediumorchid":"间紫色","cornsilk":"米绸色","black":"黑色","seagreen":"海绿色","darkslateblue":"深青蓝","khaki":"卡其色","lightblue":"淡蓝色","palegreen":"淡绿色","azure":"天蓝色","peachpuff":"桃色","darkolivegreen":"深橄榄绿","yellowgreen":"黄绿色"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_cn");dijit.nls.loading.zh_cn={"loadingState":"正在加载...","errorState":"对不起，发生了错误"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_cn");dijit._editor.nls.commands.zh_cn={"removeFormat":"除去格式","copy":"复制","paste":"粘贴","selectAll":"全选","insertOrderedList":"编号列表","insertTable":"插入/编辑表","print":"打印","underline":"下划线","foreColor":"前景色","htmlToggle":"HTML 源代码","formatBlock":"段落样式","newPage":"新建页面","insertHorizontalRule":"水平线","delete":"删除","insertUnorderedList":"符号列表","tableProp":"表属性","insertImage":"插入图像","superscript":"上标","subscript":"下标","createLink":"创建链接","undo":"撤销","fullScreen":"切换全屏幕","italic":"斜体","fontName":"字体名称","justifyLeft":"左对齐","unlink":"除去链接","toggleTableBorder":"切换表边框","viewSource":"查看 HTML 源代码","fontSize":"字体大小","systemShortcut":"只能在浏览器中通过键盘快捷方式执行“${0}”操作。使用 ${1}。","indent":"增加缩进","redo":"重做","strikethrough":"删除线","justifyFull":"对齐","justifyCenter":"居中","hiliteColor":"背景色","deleteTable":"删除表","outdent":"减少缩进","cut":"剪切","plainFormatBlock":"段落样式","toggleDir":"固定方向","bold":"粗体","tabIndent":"制表符缩进","justifyRight":"右对齐","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_cn");dijit.form.nls.validate.zh_cn={"rangeMessage":"此值超出范围。","invalidMessage":"输入的值无效。","missingMessage":"此值是必需值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_cn");dijit.form.nls.ComboBox.zh_cn={"previousMessage":"先前选项","nextMessage":"更多选项"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.zh_cn");dijit._editor.nls.FontChoice.zh_cn={"1":"XXS 号","2":"XS 号","formatBlock":"格式","3":"S 号","4":"M 号","5":"L 号","6":"XL 号","7":"XXL 号","fantasy":"虚线","serif":"有衬线","p":"段落","pre":"预设有格式的","sans-serif":"无衬线","fontName":"字体","h1":"标题","h2":"子标题","h3":"二级子标题","monospace":"等宽字体","fontSize":"大小","cursive":"草书","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.zh_cn");dijit._editor.nls.LinkDialog.zh_cn={"text":"描述：","insertImageTitle":"图像属性","set":"设置","newWindow":"新窗口","topWindow":"最顶部窗口","target":"目标：","createLinkTitle":"链接属性","parentWindow":"父窗口","currentWindow":"当前窗口","url":"URL："};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_cn");dojo.cldr.nls.currency.zh_cn={"HKD_displayName":"港元","CHF_displayName":"瑞士法郎","CAD_displayName":"加拿大元","CNY_displayName":"人民币","AUD_displayName":"澳大利亚元","JPY_displayName":"日元","USD_displayName":"美元","CNY_symbol":"￥","GBP_displayName":"英镑","EUR_displayName":"欧元","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_cn");dojo.cldr.nls.gregorian.zh_cn={"months-format-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"field-weekday":"周天","dateFormatItem-yQQQ":"y年QQQ","dateFormatItem-yMEd":"y年M月d日，E","dateFormatItem-MMMEd":"MMMd日E","eraNarrow":["公元前","公元"],"dayPeriods-format-wide-earlyMorning":"清晨","dayPeriods-format-wide-morning":"上午","dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"下午","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M-d","field-era":"时期","dateFormatItem-yM":"yyyy-M","months-standAlone-wide":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"timeFormat-short":"ah:mm","quarters-format-wide":["第1季度","第2季度","第3季度","第4季度"],"timeFormat-long":"zah时mm分ss秒","field-year":"年","dateFormatItem-yMMM":"y年MMM","dateFormatItem-yQ":"y年QQQ","dateFormatItem-yyyyMMMM":"y年MMMM","field-hour":"小时","dateFormatItem-MMdd":"MM-dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy年第Q季度","timeFormat-full":"zzzzah时mm分ss秒","field-day-relative+0":"今天","field-day-relative+1":"明天","field-day-relative+2":"后天","dateFormatItem-H":"H时","months-standAlone-abbr":["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],"quarters-format-abbr":["1季","2季","3季","4季"],"quarters-standAlone-wide":["第1季度","第2季度","第3季度","第4季度"],"dateFormatItem-M":"L","days-standAlone-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"dateFormatItem-yyMMM":"yy年MMM","timeFormat-medium":"ah:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1季","2季","3季","4季"],"eraAbbr":["公元前","公元"],"field-minute":"分钟","field-dayperiod":"上午/下午","days-standAlone-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dayPeriods-format-wide-night":"晚上","dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨天","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"前天","dateFormatItem-MMMd":"MMMd日","dayPeriods-format-wide-midDay":"中午","dateFormatItem-MEd":"M-dE","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],"field-zone":"区域","dateFormatItem-y":"y年","months-standAlone-narrow":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"ah:mm","days-format-abbr":["周日","周一","周二","周三","周四","周五","周六"],"dateFormatItem-yMMMd":"y年MMMd日","eraNames":["公元前","公元"],"days-format-narrow":["日","一","二","三","四","五","六"],"field-month":"月","days-standAlone-narrow":["日","一","二","三","四","五","六"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"上午","dateFormatItem-MMMMdd":"MMMMdd日","dayPeriods-format-wide-weeHours":"凌晨","dateFormat-short":"yy-M-d","dayPeriods-format-wide-afternoon":"下午","field-second":"秒钟","dateFormatItem-yMMMEd":"y年MMMd日EEE","dateFormatItem-Ed":"d日E","field-week":"周","dateFormat-medium":"yyyy-M-d","dateFormatItem-yyyyM":"y年M月","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_ca.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ca.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ca.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ca");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ca");dojo.nls.colors.ca={"lightsteelblue":"blau acer clar","orangered":"taronja vermellós","midnightblue":"blau mitjanit","cadetblue":"blau marí","seashell":"petxina marina","slategrey":"gris pissarra","coral":"corall","darkturquoise":"turquesa fosc","antiquewhite":"blanc antic","mediumspringgreen":"verd primavera mitjà","salmon":"salmó","darkgrey":"gris fosc","ivory":"marbre","greenyellow":"verd grogós","mistyrose":"rosa dens","lightsalmon":"salmó clar","silver":"argent","dimgrey":"gris fosc","orange":"taronja","white":"blanc","navajowhite":"blanc Navajo","royalblue":"blau marí intens","deeppink":"rosa profund","lime":"verd llimona","oldlace":"rosa cremós","chartreuse":"Llimona pàl·lid","darkcyan":"cian fosc","yellow":"groc","linen":"lli","olive":"oliva","gold":"daurat","lawngreen":"verd gespa","lightyellow":"groc clar","tan":"tan","darkviolet":"violeta fosc","lightslategrey":"gris pissarra clar","grey":"gris","darkkhaki":"caqui fosc","green":"verd","deepskyblue":"blau cel profund","aqua":"aigua","sienna":"siena","mintcream":"menta pàl·lid","rosybrown":"marró rosat","mediumslateblue":"blau pissarra mitjà","magenta":"magenta","lightseagreen":"verd marí clar","cyan":"cian","olivedrab":"gris oliva","darkgoldenrod":"ocre fosc","slateblue":"blau pissarra","mediumaquamarine":"aiguamarina mitjana","lavender":"lavanda","mediumseagreen":"verd marí mitjà","maroon":"marró vermellós","darkslategray":"gris pissarra fosc","mediumturquoise":"turquesa mitjana","ghostwhite":"blanc fantasma","darkblue":"blau fosc","mediumvioletred":"vermell violeta mitjà","brown":"marró","lightgray":"gris clar","sandybrown":"marró arenós","pink":"rosa","firebrick":"maó refractari","indigo":"índigo","snow":"neu","darkorchid":"orquídia fosc","turquoise":"turquesa","chocolate":"xocolata","springgreen":"verd de primavera","moccasin":"mocassí","navy":"blau marí","lemonchiffon":"groc brisa","teal":"verd blavós","floralwhite":"blanc floral","cornflowerblue":"blau blauet","paleturquoise":"turquesa pàl·lid","purple":"porpra","gainsboro":"gainsboro","plum":"pruna","red":"vermell","blue":"blau","forestgreen":"verd bosc","darkgreen":"verd fosc","honeydew":"rosada de mel","darkseagreen":"verd marí fosc","lightcoral":"corall clar","palevioletred":"vermell porpra pàl·lid","mediumpurple":"porpra mitjana","saddlebrown":"marró mitjà","darkmagenta":"magenta fosc","thistle":"card","whitesmoke":"blanc fumat","wheat":"blat","violet":"violeta","lightskyblue":"blau cel clar","goldenrod":"ocre","mediumblue":"blau mitjà","skyblue":"blau cel","crimson":"carmesí","darksalmon":"salmó fosc","darkred":"vermell fosc","darkslategrey":"gris pissarra fosc","peru":"Perú","lightgrey":"gris clar","lightgoldenrodyellow":"groc ocre clar","blanchedalmond":"ametlla pàl·lid","aliceblue":"blau cian clar","bisque":"crema","slategray":"gris pissarra","palegoldenrod":"ocre pàl·lid","darkorange":"taronja fosc","aquamarine":"aiguamarina","lightgreen":"verd clar","burlywood":"marró arenós","dodgerblue":"blau Dodger","darkgray":"gris fosc","lightcyan":"cian clar","powderblue":"blau grisós","blueviolet":"blau violeta","orchid":"orquídia","dimgray":"gris fosc","beige":"beix","fuchsia":"fúcsia","lavenderblush":"lavanda vermellosa","hotpink":"rosa fúcsia","steelblue":"blau acer","tomato":"tomàquet","lightpink":"rosa clar","limegreen":"verd llimona verda","indianred":"vermell indi","papayawhip":"préssec pastel","lightslategray":"gris pissarra clar","gray":"gris","mediumorchid":"orquídia mitjana","cornsilk":"cru","black":"negre","seagreen":"verd marí","darkslateblue":"blau pissarra fosc","khaki":"caqui","lightblue":"blau clar","palegreen":"verd pàl·lid","azure":"atzur","peachpuff":"préssec","darkolivegreen":"verd oliva fosc","yellowgreen":"verd grogós"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ca");dijit.nls.loading.ca={"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ca");dijit.nls.common.ca={"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ca");dijit._editor.nls.commands.ca={"removeFormat":"Elimina el format","copy":"Copia","paste":"Enganxa","selectAll":"Selecciona-ho tot","insertOrderedList":"Llista numerada","insertTable":"Insereix/edita la taula","print":"Imprimeix","underline":"Subratllat","foreColor":"Color de primer pla","htmlToggle":"Font HTML","formatBlock":"Estil de paràgraf","newPage":"Pàgina nova","insertHorizontalRule":"Regle horitzontal","delete":"Suprimeix","insertUnorderedList":"Llista de vinyetes","tableProp":"Propietat de taula","insertImage":"Insereix imatge","superscript":"Superíndex","subscript":"Subíndex","createLink":"Crea un enllaç","undo":"Desfés","fullScreen":"Commuta pantalla completa","italic":"Cursiva","fontName":"Nom del tipus de lletra","justifyLeft":"Alinea a la esquerra","unlink":"Elimina l'enllaç","toggleTableBorder":"Inverteix els contorns de taula","viewSource":"Visualitza font HTML","ctrlKey":"control+${0}","fontSize":"Cos de la lletra","systemShortcut":"L'acció \"${0}\" és l'única disponible al navegador utilitzant una drecera del teclat. Utilitzeu ${1}.","indent":"Sagnat","redo":"Refés","strikethrough":"Ratllat","justifyFull":"Justifica","justifyCenter":"Centra","hiliteColor":"Color de fons","deleteTable":"Suprimeix la taula","outdent":"Sagna a l'esquerra","cut":"Retalla","plainFormatBlock":"Estil de paràgraf","toggleDir":"Inverteix la direcció","bold":"Negreta","tabIndent":"Sagnat","justifyRight":"Alinea a la dreta","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ca");dijit.form.nls.validate.ca={"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ca");dijit.form.nls.ComboBox.ca={"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ca");dijit._editor.nls.FontChoice.ca={"1":"xx-petit","2":"x-petit","formatBlock":"Format","3":"petit","4":"mitjà","5":"gran","6":"x-gran","7":"xx-gran","fantasy":"Fantasia","serif":"serif","p":"Paràgraf","pre":"Format previ","sans-serif":"sans-serif","fontName":"Tipus de lletra","h1":"Títol","h2":"Subtítol","h3":"Subsubtítol","monospace":"monoespai","fontSize":"Mida","cursive":"Cursiva","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ca");dijit._editor.nls.LinkDialog.ca={"text":"Descipció:","insertImageTitle":"Propietats de la imatge","set":"Defineix","newWindow":"Finestra nova","topWindow":"Finestra superior","target":"Destinació:","createLinkTitle":"Propietats de l'enllaç","parentWindow":"Finestra pare","currentWindow":"Finestra actual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ca");dojo.cldr.nls.number.ca={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ca");dojo.cldr.nls.currency.ca={"HKD_displayName":"dòlar de Hong Kong","CHF_displayName":"franc suís","CAD_displayName":"dòlar canadenc","CNY_displayName":"iuan renmimbi xinès","AUD_displayName":"dòlar australià","JPY_displayName":"ien japonès","USD_displayName":"dòlar dels Estats Units","GBP_displayName":"lliura esterlina britànica","EUR_displayName":"euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ca");dojo.cldr.nls.gregorian.ca={"months-format-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"field-weekday":"dia de la setmana","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"E d/M/yyyy","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["aC","dC"],"dateFormat-long":"d MMMM 'de' y","months-format-wide":["de gener","de febrer","de març","d’abril","de maig","de juny","de juliol","d’agost","de setembre","d’octubre","de novembre","de desembre"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"p.m.","dateFormat-full":"EEEE d MMMM 'de' y","dateFormatItem-Md":"d/M","field-era":"era","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"timeFormat-short":"H:mm","quarters-format-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"timeFormat-long":"H:mm:ss z","field-year":"any","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q yyyy","field-hour":"hora","months-format-abbr":["de gen.","de febr.","de març","d’abr.","de maig","de juny","de jul.","d’ag.","de set.","d’oct.","de nov.","de des."],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"H:mm:ss zzzz","field-day-relative+0":"avui","field-day-relative+1":"demà","field-day-relative+2":"demà passat","dateFormatItem-H":"H","field-day-relative+3":"d'aquí a tres dies","months-standAlone-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"quarters-format-abbr":["1T","2T","3T","4T"],"quarters-standAlone-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"dateFormatItem-M":"L","days-standAlone-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"dateFormatItem-MMMMd":"d MMMM","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","quarters-standAlone-abbr":["1T","2T","3T","4T"],"eraAbbr":["aC","dC"],"field-minute":"minut","field-dayperiod":"a.m./p.m.","days-standAlone-abbr":["dg","dl","dt","dc","dj","dv","ds"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"ahir","field-day-relative+-2":"abans d'ahir","field-day-relative+-3":"fa tres dies","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","dateFormatItem-yMMMM":"LLLL 'del' y","field-day":"dia","days-format-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"field-zone":"zona","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"dateFormatItem-hm":"h:mm a","days-format-abbr":["dg.","dl.","dt.","dc.","dj.","dv.","ds."],"eraNames":["aC","dC"],"days-format-narrow":["g","l","t","c","j","v","s"],"field-month":"mes","days-standAlone-narrow":["g","l","t","c","j","v","s"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"a.m.","dateFormatItem-MMMMEd":"E d MMMM","dateFormat-short":"dd/MM/yy","field-second":"segon","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"setmana","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"h:mm:ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_da.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_da.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_da.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_da");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.da");dojo.nls.colors.da={"lightsteelblue":"lys stålblå","orangered":"orangerød","midnightblue":"midnatsblå","cadetblue":"kadetblå","seashell":"muslingeskal","slategrey":"skifergrå","coral":"koralrød","darkturquoise":"mørk turkis","antiquewhite":"antikhvid","mediumspringgreen":"mellemforårsgrøn","salmon":"laksefarvet","darkgrey":"mørkegrå","ivory":"elfenben","greenyellow":"grøngul","mistyrose":"blegrosa","lightsalmon":"lys laksefarvet","silver":"sølv","dimgrey":"svag grå","orange":"orange","white":"hvid","navajowhite":"navajo-hvid","royalblue":"kongeblå","deeppink":"dyb pink","lime":"lime","oldlace":"kniplingshvid","chartreuse":"chartreuse","darkcyan":"mørk cyan","yellow":"gul","linen":"lærred","olive":"olivengrøn","gold":"guld","lawngreen":"græsgrøn","lightyellow":"lysegul","tan":"tan","darkviolet":"mørkelilla","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grøn","deepskyblue":"dyb himmelblå","aqua":"akvablå","sienna":"sienna","mintcream":"pebermyntecreme","rosybrown":"rosabrun","mediumslateblue":"mellemskiferblå","magenta":"magenta","lightseagreen":"lys havgrøn","cyan":"cyan","olivedrab":"brungrøn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"mellem akvamarin","lavender":"lysviolet","mediumseagreen":"mellemhavgrøn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"mellemturkis","ghostwhite":"spøgelseshvid","darkblue":"mørkeblå","mediumvioletred":"mellemviolet","brown":"brun","lightgray":"lysegrå","sandybrown":"sandbrun","pink":"pink","firebrick":"chamottesten","indigo":"indigo","snow":"sne","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"rust","springgreen":"forårsgrøn","moccasin":"fruesko","navy":"marineblå","lemonchiffon":"citronfromage","teal":"blågrøn","floralwhite":"blomsterhvid","cornflowerblue":"kornblomstblå","paleturquoise":"bleg turkis","purple":"lilla","gainsboro":"gainsboro","plum":"blomme","red":"rød","blue":"blå","forestgreen":"skovgrøn","darkgreen":"mørkegrøn","honeydew":"honningdug","darkseagreen":"mørk havgrøn","lightcoral":"lys koralrød","palevioletred":"blegviolet","mediumpurple":"mellemlilla","saddlebrown":"saddelbrun","darkmagenta":"mørk magenta","thistle":"tidsel","whitesmoke":"hvid røg","wheat":"korngul","violet":"lilla","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellemblå","skyblue":"himmelblå","crimson":"blodrød","darksalmon":"mørk laksefarvet","darkred":"mørkerød","darkslategrey":"mørk skifergrå","peru":"peru","lightgrey":"lysegrå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"blanceret mandel","aliceblue":"babyblå","bisque":"gulgrå","slategray":"skifergrå","palegoldenrod":"bleg gyldenris","darkorange":"mørk orange","aquamarine":"akvamarin","lightgreen":"lysegrøn","burlywood":"tobak","dodgerblue":"dodgerblå","darkgray":"mørkegrå","lightcyan":"lys cyan","powderblue":"pudderblå","blueviolet":"blåviolet","orchid":"orkide","dimgray":"svag grå","beige":"beige","fuchsia":"lyslilla","lavenderblush":"lavendelrød","hotpink":"mørk rosa","steelblue":"metalblå","tomato":"tomat","lightpink":"lys pink","limegreen":"limegrøn","indianred":"lys rødbrun","papayawhip":"papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"mellem orkide","cornsilk":"majs","black":"sort","seagreen":"havgrøn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lyseblå","palegreen":"bleggrøn","azure":"azurblå","peachpuff":"fersken","darkolivegreen":"mørk olivengrøn","yellowgreen":"gulgrøn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.da");dijit.nls.loading.da={"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.da");dijit.nls.common.da={"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.da");dijit._editor.nls.commands.da={"removeFormat":"Fjern format","copy":"Kopiér","paste":"Sæt ind","selectAll":"Markér alle","insertOrderedList":"Nummereret liste","insertTable":"Indsæt/redigér tabel","print":"Udskriv","underline":"Understreget","foreColor":"Forgrundsfarve","htmlToggle":"HTML-kilde","formatBlock":"Afsnitstypografi","newPage":"Ny side","insertHorizontalRule":"Vandret linje","delete":"Slet","insertUnorderedList":"Punktliste","tableProp":"Tabelegenskab","insertImage":"Indsæt billede","superscript":"Hævet skrift","subscript":"Sænket skrift","createLink":"Opret link","undo":"Fortryd","fullScreen":"Aktivér/deaktivér fuldskærm","italic":"Kursiv","fontName":"Skriftnavn","justifyLeft":"Venstrejusteret","unlink":"Fjern link","toggleTableBorder":"Skift tabelramme","viewSource":"Vis HTML-kilde","ctrlKey":"Ctrl+${0}","fontSize":"Skriftstørrelse","systemShortcut":"Funktionen \"${0}\" kan kun bruges i din browser med en tastaturgenvej. Brug ${1}.","indent":"Indrykning","redo":"Annullér Fortryd","strikethrough":"Gennemstreget","justifyFull":"Lige margener","justifyCenter":"Centreret","hiliteColor":"Baggrundsfarve","deleteTable":"Slet tabel","outdent":"Udrykning","cut":"Klip","plainFormatBlock":"Afsnitstypografi","toggleDir":"Skift retning","bold":"Fed","tabIndent":"Indrykning med tabulator","justifyRight":"Højrejusteret","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.da");dijit.form.nls.validate.da={"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ugyldig.","missingMessage":"Værdien er påkrævet."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.da");dijit.form.nls.ComboBox.da={"previousMessage":"Forrige valg","nextMessage":"Flere valg"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.da");dijit._editor.nls.FontChoice.da={"1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Afsnit","pre":"Forudformateret","sans-serif":"sans-serif","fontName":"Skrifttype","h1":"Overskrift","h2":"Underoverskrift","h3":"Underunderoverskrift","monospace":"monospace","fontSize":"Størrelse","cursive":"kursiv","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.da");dijit._editor.nls.LinkDialog.da={"text":"Beskrivelse:","insertImageTitle":"Billedegenskaber","set":"Definér","newWindow":"Nyt vindue","topWindow":"Øverste vindue","target":"Mål:","createLinkTitle":"Linkegenskaber","parentWindow":"Overordnet vindue","currentWindow":"Aktuelt vindue","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.da");dojo.cldr.nls.number.da={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.da");dojo.cldr.nls.currency.da={"HKD_displayName":"Hongkong dollar","CHF_displayName":"Schweizisk franc","CAD_displayName":"Canadisk dollar","CNY_displayName":"Kinesisk yuan renminbi","USD_symbol":"$","AUD_displayName":"Australsk dollar","JPY_displayName":"Japansk yen","USD_displayName":"Amerikansk dollar","GBP_displayName":"Britisk pund","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.da");dojo.cldr.nls.gregorian.da={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"ugedag","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE. d/M/y","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d. MMM y","months-format-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"dayPeriods-format-wide-pm":"e.m.","dateFormat-full":"EEEE 'den' d. MMMM y","dateFormatItem-Md":"d/M","field-era":"æra","dateFormatItem-yM":"M/y","months-standAlone-wide":["januar","februar","marts","april","maj","juni","juli","august","september","oktober","november","december"],"timeFormat-short":"HH.mm","quarters-format-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"timeFormat-long":"HH.mm.ss z","field-year":"år","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"time","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan.","feb.","mar.","apr.","maj","jun.","jul.","aug.","sep.","okt.","nov.","dec."],"dateFormatItem-yyQ":"Q. 'kvartal' yy","timeFormat-full":"HH.mm.ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgen","field-day-relative+2":"i overmorgen","dateFormatItem-H":"HH","field-day-relative+3":"i overovermorgen","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1. kvartal","2. kvartal","3. kvartal","4. kvartal"],"dateFormatItem-M":"M","days-standAlone-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH.mm.ss","dateFormatItem-Hm":"HH.mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"dagtid","days-standAlone-abbr":["søn","man","tir","ons","tor","fre","lør"],"dateFormatItem-d":"d.","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"i går","field-day-relative+-2":"i forgårs","field-day-relative+-3":"i forforgårs","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E. d/M","field-day":"dag","days-format-wide":["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],"field-zone":"zone","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h.mm a","days-format-abbr":["søn","man","tir","ons","tor","fre","lør"],"eraNames":["f.Kr.","e.Kr."],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"måned","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"MMM","dayPeriods-format-wide-am":"f.m.","dateFormatItem-MMMMEd":"E, d. MMMM","dateFormat-short":"dd/MM/yy","field-second":"sekund","dateFormatItem-yMMMEd":"EEE. d. MMM y","field-week":"uge","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-Hms":"HH.mm.ss","dateFormatItem-hms":"h.mm.ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_tr.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_tr.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_tr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_tr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.tr");dojo.nls.colors.tr={"lightsteelblue":"açık metalik mavi","orangered":"turuncu kırmızı","midnightblue":"gece mavisi","cadetblue":"denizci mavisi","seashell":"deniz kabuğu","slategrey":"arduvaz grisi","coral":"mercan","darkturquoise":"koyu turkuaz","antiquewhite":"antik beyaz","mediumspringgreen":"orta bahar yeşili","salmon":"somon","darkgrey":"koyu gri","ivory":"fildişi","greenyellow":"yeşil-sarı","mistyrose":"gülkurusu","lightsalmon":"açık somon","silver":"gümüş","dimgrey":"soluk gri","orange":"turuncu","white":"beyaz","navajowhite":"navajo beyazı","royalblue":"parlak koyu mavi","deeppink":"koyu pembe","lime":"limon yeşili","oldlace":"eski dantel","chartreuse":"chartreuse","darkcyan":"koyu camgöbeği","yellow":"sarı","linen":"keten","olive":"zeytin","gold":"altın","lawngreen":"çimen yeşili","lightyellow":"açık sarı","tan":"güneş yanığı","darkviolet":"koyu eflatun","lightslategrey":"açık arduvaz grisi","grey":"gri","darkkhaki":"koyu haki","green":"yeşil","deepskyblue":"koyu gök mavisi","aqua":"deniz mavisi","sienna":"koyu kahve","mintcream":"naneli krem","rosybrown":"pembemsi kahverengi","mediumslateblue":"orta arduvaz mavisi","magenta":"macenta","lightseagreen":"açık deniz yeşili","cyan":"camgöbeği","olivedrab":"asker yeşili","darkgoldenrod":"koyu sarı","slateblue":"arduvaz mavisi","mediumaquamarine":"orta akuamarin","lavender":"lavanta","mediumseagreen":"orta deniz yeşili","maroon":"kestane","darkslategray":"koyu arduvaz grisi","mediumturquoise":"orta turkuaz","ghostwhite":"silik beyaz","darkblue":"koyu mavi","mediumvioletred":"orta menekşe kırmızısı","brown":"kahverengi","lightgray":"açık gri","sandybrown":"kum rengi","pink":"pembe","firebrick":"canlı kiremit","indigo":"çivit mavisi","snow":"kar","darkorchid":"koyu orkide","turquoise":"turkuaz","chocolate":"çikolata","springgreen":"bahar yeşili","moccasin":"mokosen","navy":"lacivert","lemonchiffon":"limoni","teal":"Teal mavi","floralwhite":"çiçek beyazı","cornflowerblue":"peygamber çiçeği mavisi","paleturquoise":"soluk turkuaz","purple":"mor","gainsboro":"gainsboro","plum":"erik","red":"kırmızı","blue":"mavi","forestgreen":"koyu deniz yeşili","darkgreen":"koyu yeşil","honeydew":"çam sakızı","darkseagreen":"koyu deniz yeşili","lightcoral":"açık mercan","palevioletred":"soluk menekşe kırmızısı","mediumpurple":"orta mor","saddlebrown":"açık kahve","darkmagenta":"koyu mor","thistle":"devedikeni","whitesmoke":"beyaz duman","wheat":"buğday","violet":"eflatun","lightskyblue":"açık gök mavisi","goldenrod":"sarısabır","mediumblue":"orta mavi","skyblue":"gök mavisi","crimson":"crimson","darksalmon":"koyu somon","darkred":"koyu kırmızı","darkslategrey":"koyu arduvaz grisi","peru":"peru","lightgrey":"açık gri","lightgoldenrodyellow":"açık sarısabır","blanchedalmond":"soluk badem","aliceblue":"alice mavisi","bisque":"bisküvi","slategray":"arduvaz grisi","palegoldenrod":"soluk sarısabır","darkorange":"koyu turuncu","aquamarine":"akuamarin","lightgreen":"açık yeşil","burlywood":"sarımsı kahverengi","dodgerblue":"toz mavisi","darkgray":"koyu gri","lightcyan":"açık camgöbeği","powderblue":"pudra mavisi","blueviolet":"mavi-mor","orchid":"orkide","dimgray":"soluk gri","beige":"bej","fuchsia":"fuşya","lavenderblush":"lavanta pembesi","hotpink":"sıcak pembe","steelblue":"metalik mavi","tomato":"domates","lightpink":"açık pembe","limegreen":"küf yeşili","indianred":"kızılderili kırmızısı","papayawhip":"papaya sapı","lightslategray":"açık arduvaz grisi","gray":"gri","mediumorchid":"orta orkide","cornsilk":"mısır rengi","black":"siyah","seagreen":"deniz yeşili","darkslateblue":"koyu arduvaz mavisi","khaki":"haki","lightblue":"açık mavi","palegreen":"soluk yeşil","azure":"azur mavisi","peachpuff":"açık şeftali","darkolivegreen":"koyu zeytin yeşili","yellowgreen":"sarı yeşil"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.tr");dijit.nls.loading.tr={"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.tr");dijit.nls.common.tr={"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.tr");dijit._editor.nls.commands.tr={"removeFormat":"Biçimi Kaldır","copy":"Kopyala","paste":"Yapıştır","selectAll":"Tümünü Seç","insertOrderedList":"Numaralı Liste","insertTable":"Tablo Ekle/Düzenle","print":"Yazdır","underline":"Altı Çizili","foreColor":"Ön Plan Rengi","htmlToggle":"HTML Kaynağı","formatBlock":"Paragraf Stili","newPage":"Yeni Sayfa","insertHorizontalRule":"Yatay Kural","delete":"Sil","insertUnorderedList":"Madde İşaretli Liste","tableProp":"Tablo Özelliği","insertImage":"Resim Ekle","superscript":"Üst Simge","subscript":"Alt Simge","createLink":"Bağlantı Oluştur","undo":"Geri Al","fullScreen":"Tam Ekranı Aç/Kapat","italic":"İtalik","fontName":"Yazı Tipi Adı","justifyLeft":"Sola Hizala","unlink":"Bağlantıyı Kaldır","toggleTableBorder":"Tablo Kenarlığını Göster/Gizle","viewSource":"HTML Kaynağını Görüntüle","fontSize":"Yazı Tipi Boyutu","systemShortcut":"\"${0}\" işlemi yalnızca tarayıcınızda bir klavye kısayoluyla birlikte kullanılabilir. Şunu kullanın: ${1}.","indent":"Girinti","redo":"Yinele","strikethrough":"Üstü Çizili","justifyFull":"Yasla","justifyCenter":"Ortaya Hizala","hiliteColor":"Arka Plan Rengi","deleteTable":"Tabloyu Sil","outdent":"Çıkıntı","cut":"Kes","plainFormatBlock":"Paragraf Stili","toggleDir":"Yönü Değiştir","bold":"Kalın","tabIndent":"Sekme Girintisi","justifyRight":"Sağa Hizala","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.tr");dijit.form.nls.validate.tr={"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.tr");dijit.form.nls.ComboBox.tr={"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.tr");dijit._editor.nls.FontChoice.tr={"1":"xx-küçük","2":"x-küçük","formatBlock":"Biçim","3":"küçük","4":"orta","5":"büyük","6":"x-büyük","7":"xx-büyük","fantasy":"fantazi","serif":"serif","p":"Paragraf","pre":"Önceden Biçimlendirilmiş","sans-serif":"sans-serif","fontName":"Yazı Tipi","h1":"Başlık","h2":"Alt Başlık","h3":"Alt Alt Başlık","monospace":"tek aralıklı","fontSize":"Boyut","cursive":"el yazısı","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.tr");dijit._editor.nls.LinkDialog.tr={"text":"Açıklama:","insertImageTitle":"Resim Özellikleri","set":"Ayarla","newWindow":"Yeni Pencere","topWindow":"En Üst Pencere","target":"Hedef:","createLinkTitle":"Bağlantı Özellikleri","parentWindow":"Üst Pencere","currentWindow":"Geçerli Pencere","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.tr");dojo.cldr.nls.number.tr={"group":".","percentSign":"%","exponential":"E","percentFormat":"% #,##0","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.tr");dojo.cldr.nls.currency.tr={"HKD_displayName":"Hong Kong Doları","CHF_displayName":"İsviçre Frangı","JPY_symbol":"¥","CAD_displayName":"Kanada Doları","CNY_displayName":"Çin Yuanı Renminbi","USD_symbol":"$","AUD_displayName":"Avustralya Doları","JPY_displayName":"Japon Yeni","USD_displayName":"ABD Doları","GBP_displayName":"İngiliz Sterlini","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.tr");dojo.cldr.nls.gregorian.tr={"months-format-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"field-weekday":"Haftanın Günü","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"dd.MM.yyyy EEE","dateFormatItem-MMMEd":"dd MMM E","eraNarrow":["MÖ","MS"],"dateFormat-long":"dd MMMM y","months-format-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"dd MMMM y EEEE","dateFormatItem-Md":"dd/MM","field-era":"Miladi Dönem","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"timeFormat-long":"HH:mm:ss z","field-year":"Yıl","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","field-hour":"Saat","months-format-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"Bugün","field-day-relative+1":"Yarın","field-day-relative+2":"Yarından sonraki gün","dateFormatItem-H":"HH","field-day-relative+3":"Üç gün sonra","months-standAlone-abbr":["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],"quarters-format-abbr":["Ç1","Ç2","Ç3","Ç4"],"quarters-standAlone-wide":["1. çeyrek","2. çeyrek","3. çeyrek","4. çeyrek"],"dateFormatItem-M":"L","days-standAlone-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"dateFormatItem-MMMMd":"dd MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Ç1","Ç2","Ç3","Ç4"],"eraAbbr":["MÖ","MS"],"field-minute":"Dakika","field-dayperiod":"AM/PM","days-standAlone-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Dün","field-day-relative+-2":"Evvelsi gün","field-day-relative+-3":"Üç gün önce","dateFormatItem-MMMd":"dd MMM","dateFormatItem-MEd":"dd/MM E","dateFormatItem-yMMMM":"MMMM y","field-day":"Gün","days-format-wide":["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],"field-zone":"Saat Dilimi","dateFormatItem-y":"y","months-standAlone-narrow":["O","Ş","M","N","M","H","T","A","E","E","K","A"],"dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["Paz","Pzt","Sal","Çar","Per","Cum","Cmt"],"eraNames":["Milattan Önce","Milattan Sonra"],"days-format-narrow":["P","P","S","Ç","P","C","C"],"field-month":"Ay","days-standAlone-narrow":["P","P","S","Ç","P","C","C"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"AM","dateFormatItem-MMMMEd":"dd MMMM E","dateFormat-short":"dd.MM.yyyy","field-second":"Saniye","dateFormatItem-yMMMEd":"dd MMM y EEE","dateFormatItem-Ed":"d E","field-week":"Hafta","dateFormat-medium":"dd MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/ja/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/ja/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ja/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ja/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/ja/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ja/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"ロード中...","errorState":"エラーが発生しました。"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_en-us.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_en-us.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_en-us.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_en-us");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_us");dojo.nls.colors.en_us={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_us");dijit.nls.loading.en_us={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_us");dijit._editor.nls.commands.en_us={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_us");dijit.form.nls.validate.en_us={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_us");dijit.form.nls.ComboBox.en_us={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.en_us");dijit._editor.nls.FontChoice.en_us={"noFormat":"None","1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.en_us");dijit._editor.nls.LinkDialog.en_us={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_us");dojo.cldr.nls.currency.en_us={"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_us");dojo.cldr.nls.gregorian.en_us={"dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateFormatItem-MMMEd":"E, MMM d","dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormat-long":"MMMM d, y","timeFormat-medium":"h:mm:ss a","dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"MMM d, y","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","timeFormat-long":"h:mm:ss a z","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","timeFormat-short":"h:mm a","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","dateFormatItem-MEd":"E, M/d","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormat-short":"M/d/yy","dateFormatItem-yMMMEd":"EEE, MMM d, y","dateFormat-full":"EEEE, MMMM d, y","dateFormatItem-Md":"M/d","dateFormatItem-yMEd":"EEE, M/d/y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_de.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_de.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_de.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de");dojo.nls.colors.de={"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","salmon":"Lachs","darkgrey":"Dunkelgrau","ivory":"Elfenbein","greenyellow":"Grüngelb","mistyrose":"Blassrose","lightsalmon":"Helllachs","silver":"Silbergrau","dimgrey":"Blassgrau","orange":"Orange","white":"Weiß","navajowhite":"Navajo-weiß","royalblue":"Königsblau","deeppink":"Tiefrosa","lime":"Limone","oldlace":"Alte Spitze","chartreuse":"Helles Gelbgrün","darkcyan":"Dunkelzyan","yellow":"Gelb","linen":"Leinen","olive":"Oliv","gold":"Gold","lawngreen":"Grasgrün","lightyellow":"Hellgelb","tan":"Hautfarben","darkviolet":"Dunkelviolett","lightslategrey":"Helles Schiefergrau","grey":"Grau","darkkhaki":"Dunkelkhaki","green":"Grün","deepskyblue":"Dunkles Himmelblau","aqua":"Wasserblau","sienna":"Sienna","mintcream":"Mintcreme","rosybrown":"Rosigbraun","mediumslateblue":"Mittelschieferblau ","magenta":"Magenta","lightseagreen":"Helles Meergrün","cyan":"Zyan","olivedrab":"Olivgrau","darkgoldenrod":"Dunkelgoldgelb","slateblue":"Schieferblau","mediumaquamarine":"Mittelaquamarin","lavender":"Lavendelblau","mediumseagreen":"Mittelmeeresgrün","maroon":"Kastanienbraun","darkslategray":"Dunkelschiefergrau","mediumturquoise":"Mitteltürkis ","ghostwhite":"Geisterweiß","darkblue":"Dunkelblau","mediumvioletred":"Mittelviolettrot ","brown":"Braun","lightgray":"Hellgrau","sandybrown":"Sandbraun","pink":"Rosa","firebrick":"Schamottestein","indigo":"Indigoblau","snow":"Schneeweiß","darkorchid":"Dunkelorchidee","turquoise":"Türkis","chocolate":"Schokoladenbraun","springgreen":"Frühlingsgrün","moccasin":"Mokassin","navy":"Marineblau","lemonchiffon":"Zitronenchiffon","teal":"Smaragdgrün","floralwhite":"Blütenweiß","cornflowerblue":"Kornblumenblau","paleturquoise":"Blasstürkis","purple":"Purpurrot","gainsboro":"Gainsboro","plum":"Pflaume","red":"Rot","blue":"Blau","forestgreen":"Forstgrün","darkgreen":"Dunkelgrün","honeydew":"Honigtau","darkseagreen":"Dunkles Meergrün","lightcoral":"Hellkoralle","palevioletred":"Blassviolettrot ","mediumpurple":"Mittelpurpur","saddlebrown":"Sattelbraun","darkmagenta":"Dunkelmagenta","thistle":"Distel","whitesmoke":"Rauchweiß","wheat":"Weizen","violet":"Violett","lightskyblue":"Helles Himmelblau","goldenrod":"Goldgelb","mediumblue":"Mittelblau","skyblue":"Himmelblau","crimson":"Karmesinrot","darksalmon":"Dunkellachs","darkred":"Dunkelrot","darkslategrey":"Dunkelschiefergrau","peru":"Peru","lightgrey":"Hellgrau","lightgoldenrodyellow":"Hellgoldgelb","blanchedalmond":"Mandelweiß","aliceblue":"Alice-blau","bisque":"Bisquit","slategray":"Schiefergrau","palegoldenrod":"Blassgoldgelb","darkorange":"Dunkelorange","aquamarine":"Aquamarin","lightgreen":"Hellgrün","burlywood":"Burlywood","dodgerblue":"Dodger-blau","darkgray":"Dunkelgrau","lightcyan":"Hellzyan","powderblue":"Pulverblau","blueviolet":"Blauviolett","orchid":"Orchidee","dimgray":"Blassgrau","beige":"Beige","fuchsia":"Fuchsia","lavenderblush":"Lavendelhauch","hotpink":"Knallrosa","steelblue":"Stahlblau","tomato":"Tomatenrot","lightpink":"Hellrosa","limegreen":"Limonengrün","indianred":"Indischrot","papayawhip":"Papayacreme","lightslategray":"Helles Schiefergrau","gray":"Grau","mediumorchid":"Mittelorchidee","cornsilk":"Kornseide","black":"Schwarz","seagreen":"Meeresgrün","darkslateblue":"Dunkelschieferblau","khaki":"Khaki","lightblue":"Hellblau","palegreen":"Blassgrün","azure":"Azur","peachpuff":"Pfirsich","darkolivegreen":"Dunkelolivgrün","yellowgreen":"Gelbgrün"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de");dijit.nls.loading.de={"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de");dijit._editor.nls.commands.de={"removeFormat":"Formatierung entfernen","copy":"Kopieren","paste":"Einfügen","selectAll":"Alles auswählen","insertOrderedList":"Nummerierung","insertTable":"Tabelle einfügen/bearbeiten","print":"Drucken","underline":"Unterstrichen","foreColor":"Vordergrundfarbe","htmlToggle":"HTML-Quelltext","formatBlock":"Absatzstil","newPage":"Neue Seite","insertHorizontalRule":"Horizontaler Strich","delete":"Löschen","insertUnorderedList":"Aufzählungszeichen","tableProp":"Tabelleneigenschaft","insertImage":"Grafik einfügen","superscript":"Hochgestellt","subscript":"Tiefgestellt","createLink":"Link erstellen","undo":"Rückgängig","fullScreen":"Gesamtanzeige","italic":"Kursiv","fontName":"Schriftartname","justifyLeft":"Linksbündig","unlink":"Link entfernen","toggleTableBorder":"Tabellenumrandung ein-/ausschalten","viewSource":"HTML-Quelle","ctrlKey":"Strg+${0}","fontSize":"Schriftgröße","systemShortcut":"Die Aktion \"${0}\" ist nur über einen Direktaufruf in Ihrem Browser verfügbar. Verwenden Sie ${1}.","indent":"Einrücken","redo":"Wiederherstellen","strikethrough":"Durchgestrichen","justifyFull":"Blocksatz","justifyCenter":"Zentriert","hiliteColor":"Hintergrundfarbe","deleteTable":"Tabelle löschen","outdent":"Ausrücken","cut":"Ausschneiden","plainFormatBlock":"Absatzstil","toggleDir":"Wechselrichtung","bold":"Fett","tabIndent":"Tabulatoreinrückung","justifyRight":"Rechtsbündig","appleKey":"⌘${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de");dijit.form.nls.validate.de={"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de");dijit.form.nls.ComboBox.de={"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.de");dijit._editor.nls.FontChoice.de={"1":"XXS","2":"XS","formatBlock":"Format","3":"S","4":"M","5":"L","6":"XL","7":"XXL","fantasy":"Fantasie","serif":"Serife","p":"Absatz","pre":"Vorformatiert","sans-serif":"Serifenlos","fontName":"Schriftart","h1":"Überschrift","h2":"Unterüberschrift","h3":"Unterunterüberschrift","monospace":"Monospaceschrift","fontSize":"Größe","cursive":"Kursiv","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.de");dijit._editor.nls.LinkDialog.de={"text":"Beschreibung:","insertImageTitle":"Grafikeigenschaften","set":"Festlegen","newWindow":"Neues Fenster","topWindow":"Aktives Fenster","target":"Ziel:","createLinkTitle":"Linkeigenschaften","parentWindow":"Übergeordnetes Fenster","currentWindow":"Aktuelles Fenster","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de");dojo.cldr.nls.currency.de={"HKD_displayName":"Hongkong-Dollar","CHF_displayName":"Schweizer Franken","JPY_symbol":"¥","CAD_displayName":"Kanadischer Dollar","CNY_displayName":"Renminbi Yuan","USD_symbol":"$","AUD_displayName":"Australischer Dollar","JPY_displayName":"Yen","USD_displayName":"US-Dollar","GBP_displayName":"Pfund Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de");dojo.cldr.nls.gregorian.de={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Wochentag","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE, d.M.y","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["v. Chr.","n. Chr."],"dayPeriods-format-wide-earlyMorning":"morgens","dayPeriods-format-wide-morning":"vormittags","dateFormat-long":"d. MMMM y","months-format-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"dayPeriods-format-wide-evening":"abends","dateFormatItem-EEEd":"d. EEE","dayPeriods-format-wide-pm":"nachm.","dateFormat-full":"EEEE, d. MMMM y","dateFormatItem-Md":"d.M.","dateFormatItem-yyMMdd":"dd.MM.yy","dayPeriods-format-wide-noon":"Mittag","field-era":"Epoche","dateFormatItem-yM":"M.y","months-standAlone-wide":["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],"timeFormat-short":"HH:mm","quarters-format-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"timeFormat-long":"HH:mm:ss z","field-year":"Jahr","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q y","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Stunde","dateFormatItem-MMdd":"dd.MM.","months-format-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"heute","field-day-relative+1":"morgen","field-day-relative+2":"übermorgen","dateFormatItem-H":"HH","field-day-relative+3":"überübermorgen","months-standAlone-abbr":["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["1. Quartal","2. Quartal","3. Quartal","4. Quartal"],"dateFormatItem-M":"L","days-standAlone-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","eraAbbr":["v. Chr.","n. Chr."],"field-minute":"Minute","field-dayperiod":"Tageshälfte","days-standAlone-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"dayPeriods-format-wide-night":"nachts","dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"gestern","field-day-relative+-2":"vorgestern","field-day-relative+-3":"vorvorgestern","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E, d.M.","field-day":"Tag","days-format-wide":["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],"field-zone":"Zone","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM.yy","days-format-abbr":["So.","Mo.","Di.","Mi.","Do.","Fr.","Sa."],"eraNames":["v. Chr.","n. Chr."],"days-format-narrow":["S","M","D","M","D","F","S"],"field-month":"Monat","days-standAlone-narrow":["S","M","D","M","D","F","S"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"vorm.","dateFormatItem-MMMMdd":"dd. MMMM","dateFormat-short":"dd.MM.yy","dateFormatItem-MMd":"d.MM.","dayPeriods-format-wide-afternoon":"nachmittags","field-second":"Sekunde","dateFormatItem-yMMMEd":"EEE, d. MMM y","dateFormatItem-Ed":"E d.","field-week":"Woche","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_en-gb.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_en-gb.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_en-gb.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_en-gb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_gb");dojo.nls.colors.en_gb={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_gb");dijit.nls.loading.en_gb={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_gb");dijit._editor.nls.commands.en_gb={"removeFormat":"Remove Format","copy":"Copy","paste":"Paste","selectAll":"Select All","insertOrderedList":"Numbered List","insertTable":"Insert/Edit Table","print":"Print","underline":"Underline","foreColor":"Foreground Color","htmlToggle":"HTML Source","formatBlock":"Paragraph Style","newPage":"New Page","insertHorizontalRule":"Horizontal Rule","delete":"Delete","appleKey":"⌘${0}","insertUnorderedList":"Bullet List","tableProp":"Table Property","insertImage":"Insert Image","superscript":"Superscript","subscript":"Subscript","createLink":"Create Link","undo":"Undo","fullScreen":"Toggle Full Screen","italic":"Italic","fontName":"Font Name","justifyLeft":"Align Left","unlink":"Remove Link","toggleTableBorder":"Toggle Table Border","viewSource":"View HTML Source","ctrlKey":"ctrl+${0}","fontSize":"Font Size","systemShortcut":"The \"${0}\" action is only available in your browser using a keyboard shortcut. Use ${1}.","indent":"Indent","redo":"Redo","strikethrough":"Strikethrough","justifyFull":"Justify","justifyCenter":"Align Center","hiliteColor":"Background Color","deleteTable":"Delete Table","outdent":"Outdent","cut":"Cut","plainFormatBlock":"Paragraph Style","toggleDir":"Toggle Direction","bold":"Bold","tabIndent":"Tab Indent","justifyRight":"Align Right"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_gb");dijit.form.nls.validate.en_gb={"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_gb");dijit.form.nls.ComboBox.en_gb={"previousMessage":"Previous choices","nextMessage":"More choices"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.en_gb");dijit._editor.nls.FontChoice.en_gb={"noFormat":"None","1":"xx-small","2":"x-small","formatBlock":"Format","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Paragraph","pre":"Pre-formatted","sans-serif":"sans-serif","fontName":"Font","h1":"Heading","h2":"Subheading","h3":"Sub-subheading","monospace":"monospace","fontSize":"Size","cursive":"cursive"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.en_gb");dijit._editor.nls.LinkDialog.en_gb={"text":"Description:","insertImageTitle":"Image Properties","set":"Set","newWindow":"New Window","topWindow":"Topmost Window","target":"Target:","createLinkTitle":"Link Properties","parentWindow":"Parent Window","currentWindow":"Current Window","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_gb");dojo.cldr.nls.currency.en_gb={"HKD_displayName":"Hong Kong Dollar","CHF_displayName":"Swiss Franc","JPY_symbol":"¥","CAD_displayName":"Canadian Dollar","CNY_displayName":"Chinese Yuan Renminbi","USD_symbol":"$","AUD_displayName":"Australian Dollar","JPY_displayName":"Japanese Yen","USD_displayName":"US Dollar","GBP_displayName":"British Pound Sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_gb");dojo.cldr.nls.gregorian.en_gb={"dateFormatItem-yyMMM":"MMM yy","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-yyyyMMMM":"MMMM y","timeFormat-full":"HH:mm:ss zzzz","timeFormat-medium":"HH:mm:ss","dateFormatItem-MEd":"E, d/M","dateFormat-medium":"d MMM y","dateFormatItem-MMdd":"dd/MM","dateFormatItem-yyyyMM":"MM/yyyy","dateFormat-full":"EEEE, d MMMM y","timeFormat-long":"HH:mm:ss z","timeFormat-short":"HH:mm","dateFormat-short":"dd/MM/yyyy","dateFormatItem-MMMMd":"d MMMM","dateFormat-long":"d MMMM y","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yM":"M/y","field-dayperiod":"AM/PM","dateFormatItem-yQ":"Q y","dayPeriods-format-wide-pm":"PM","field-minute":"Minute","eraNames":["Before Christ","Anno Domini"],"dateTimeFormat-full":"{1} {0}","field-day-relative+-1":"Yesterday","field-weekday":"Day of the Week","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateTimeFormat-short":"{1} {0}","field-era":"Era","field-hour":"Hour","dayPeriods-format-wide-am":"AM","dateTimeFormat-medium":"{1} {0}","dateFormatItem-y":"y","months-standAlone-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dateFormatItem-yMMM":"MMM y","field-day-relative+0":"Today","field-day-relative+1":"Tomorrow","days-standAlone-narrow":["S","M","T","W","T","F","S"],"eraAbbr":["BC","AD"],"dateFormatItem-EEEd":"d EEE","field-zone":"Zone","dateFormatItem-Hm":"HH:mm","dateFormatItem-Hms":"HH:mm:ss","quarters-standAlone-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"dateFormatItem-ms":"mm:ss","field-year":"Year","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormat-long":"{1} {0}","field-week":"Week","months-standAlone-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-MMMd":"MMM d","months-format-abbr":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"dayPeriods-format-wide-noon":"noon","field-month":"Month","quarters-format-abbr":["Q1","Q2","Q3","Q4"],"days-format-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-M":"L","days-format-narrow":["S","M","T","W","T","F","S"],"field-second":"Second","field-day":"Day","months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dateFormatItem-yMMMEd":"EEE, MMM d, y","months-format-wide":["January","February","March","April","May","June","July","August","September","October","November","December"],"dateFormatItem-d":"d","quarters-format-wide":["1st quarter","2nd quarter","3rd quarter","4th quarter"],"days-format-wide":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"eraNarrow":["B","A"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_sv.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_sv.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_sv.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_sv");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sv");dojo.nls.colors.sv={"lightsteelblue":"ljust stålblått","orangered":"orangerött","midnightblue":"midnattsblått","cadetblue":"kadettblått","seashell":"snäckskal","slategrey":"skiffergrått","coral":"korall","darkturquoise":"mörkturkost","antiquewhite":"antikvitt","mediumspringgreen":"mellanvårgrönt","salmon":"laxfärgat","darkgrey":"mörkgrått","ivory":"elfenbensvitt","greenyellow":"gröngult","mistyrose":"dunkelrosa","lightsalmon":"ljust laxfärgat","silver":"silver","dimgrey":"smutsgrått","orange":"orange","white":"vitt","navajowhite":"navajovitt","royalblue":"kungligt blått","deeppink":"djuprosa","lime":"lime","oldlace":"spetsvitt","chartreuse":"chartreuse","darkcyan":"mörkt cyan","yellow":"gult","linen":"linne","olive":"olivfärgat","gold":"guld","lawngreen":"gräsmattegrönt","lightyellow":"ljusgult","tan":"mellanbrunt","darkviolet":"mörkviolett","lightslategrey":"ljust skiffergrått","grey":"grått","darkkhaki":"mörkt kaki","green":"grönt","deepskyblue":"mörkt himmelsblått","aqua":"akvamarin","sienna":"sienna","mintcream":"mintgrädde","rosybrown":"rosenbrunt","mediumslateblue":"mellanskifferblått","magenta":"magenta","lightseagreen":"ljust havsgrönt","cyan":"cyan","olivedrab":"olivsmutsgult","darkgoldenrod":"mörkt gullris","slateblue":"skifferblått","mediumaquamarine":"mellanakvamarin","lavender":"lavendel","mediumseagreen":"mellanhavsgrönt","maroon":"rödbrunt","darkslategray":"mörkt skiffergrått","mediumturquoise":"mellanturkost","ghostwhite":"spökvitt","darkblue":"mörkblått","mediumvioletred":"mellanviolettrött","brown":"brunt","lightgray":"ljusgrått","sandybrown":"sandbrunt","pink":"rosa","firebrick":"tegelstensrött","indigo":"indigo","snow":"snö","darkorchid":"mörkt orkidé","turquoise":"turkost","chocolate":"choklad","springgreen":"vårgrönt","moccasin":"mockasin","navy":"marinblått","lemonchiffon":"citronchiffong","teal":"blågrönt","floralwhite":"blomvitt","cornflowerblue":"kornblått","paleturquoise":"blekturkost","purple":"lila","gainsboro":"gainsboro","plum":"plommon","red":"rött","blue":"blått","forestgreen":"skogsgrönt","darkgreen":"mörkgrönt","honeydew":"honungsdagg","darkseagreen":"mörkt havsgrönt","lightcoral":"ljuskorall","palevioletred":"blekviolettrött","mediumpurple":"mellanlila","saddlebrown":"sadelbrunt","darkmagenta":"mörk magenta","thistle":"tistel","whitesmoke":"vit rök","wheat":"vete","violet":"violett","lightskyblue":"ljust himmelsblått","goldenrod":"gullris","mediumblue":"mellanblått","skyblue":"himmelsblått","crimson":"karmosinrött","darksalmon":"mörkt laxfärgat","darkred":"mörkrött","darkslategrey":"mörkt skiffergrått","peru":"peru","lightgrey":"ljusgrått","lightgoldenrodyellow":"ljust gullrisgult","blanchedalmond":"skållad mandel","aliceblue":"aliceblå","bisque":"biskvi","slategray":"skiffergrått","palegoldenrod":"blekt gullris","darkorange":"mörkorange","aquamarine":"akvamarin","lightgreen":"ljusgrönt","burlywood":"träfärgat","dodgerblue":"dodgerblått","darkgray":"mörkgrått","lightcyan":"ljust cyan","powderblue":"pulverblått","blueviolet":"blåviolett","orchid":"orkidé","dimgray":"smutsgrått","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelskimrande","hotpink":"varmrosa","steelblue":"stålblått","tomato":"tomatrött","lightpink":"ljusrosa","limegreen":"limegrönt","indianred":"indianrött","papayawhip":"papayaröra","lightslategray":"ljust skiffergrått","gray":"grått","mediumorchid":"mellanorkidé","cornsilk":"gulvitt","black":"svart","seagreen":"havsgrönt","darkslateblue":"mörkt skifferblått","khaki":"kaki","lightblue":"ljusblått","palegreen":"blekgrönt","azure":"azurblått","peachpuff":"persika","darkolivegreen":"mörkt olivgrönt","yellowgreen":"gulgrönt"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sv");dijit.nls.loading.sv={"loadingState":"Läser in...","errorState":"Det uppstod ett fel."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sv");dijit.nls.common.sv={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.sv");dijit._editor.nls.commands.sv={"removeFormat":"Ta bort format","copy":"Kopiera","paste":"Klistra in","selectAll":"Markera allt","insertOrderedList":"Numrerad lista","insertTable":"Infoga/redigera tabell","print":"Skriv ut","underline":"Understrykning","foreColor":"Förgrundsfärg","htmlToggle":"HTML-källkod","formatBlock":"Styckeformat","newPage":"Ny sida","insertHorizontalRule":"Horisontell linjal","delete":"Ta bort","appleKey":"⌘+${0}","insertUnorderedList":"Punktlista","tableProp":"Tabellegenskap","insertImage":"Infoga bild","superscript":"Upphöjt","subscript":"Nedsänkt","createLink":"Skapa länk","undo":"Ångra","fullScreen":"Växla helskärm","italic":"Kursiv","fontName":"Teckensnittsnamn","justifyLeft":"Vänsterjustera","unlink":"Ta bort länk","toggleTableBorder":"Aktivera/avaktivera tabellram","viewSource":"Visa HTML-kod","ctrlKey":"Ctrl+${0}","fontSize":"Teckenstorlek","systemShortcut":"Åtgärden \"${0}\" är endast tillgänglig i webbläsaren med hjälp av ett kortkommando. Använd ${1}.","indent":"Indrag","redo":"Gör om","strikethrough":"Genomstruken","justifyFull":"Marginaljustera","justifyCenter":"Centrera","hiliteColor":"Bakgrundsfärg","deleteTable":"Ta bort tabell","outdent":"Utdrag","cut":"Klipp ut","plainFormatBlock":"Styckeformat","toggleDir":"Växla riktning","bold":"Fetstil","tabIndent":"Tabbindrag","justifyRight":"Högerjustera"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sv");dijit.form.nls.validate.sv={"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sv");dijit.form.nls.ComboBox.sv={"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.sv");dijit._editor.nls.FontChoice.sv={"1":"mycket, mycket litet","2":"mycket litet","formatBlock":"Format","3":"litet","4":"medelstort","5":"stort","6":"extra stort","7":"extra extra stort","fantasy":"fantasy","serif":"serif","p":"Stycke","pre":"Förformaterat","sans-serif":"sans-serif","fontName":"Teckensnitt","h1":"Rubrik","h2":"Underrubrik","h3":"Underunderrubrik","monospace":"monospace","fontSize":"Storlek","cursive":"kursivt","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.sv");dijit._editor.nls.LinkDialog.sv={"text":"Beskrivning:","insertImageTitle":"Bildegenskaper","set":"Ange","newWindow":"nytt fönster","topWindow":"översta fönstret","target":"Mål:","createLinkTitle":"Länkegenskaper","parentWindow":"överordnat fönster","currentWindow":"aktuellt fönster","url":"URL-adress:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sv");dojo.cldr.nls.number.sv={"group":" ","percentSign":"%","exponential":"×10^","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"−","decimal":",","nan":"¤¤¤","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.sv");dojo.cldr.nls.currency.sv={"HKD_displayName":"Hongkong-dollar","CHF_displayName":"schweizisk franc","CHF_symbol":"CHF","CAD_displayName":"kanadensisk dollar","CNY_displayName":"kinesisk yuan renminbi","AUD_displayName":"australisk dollar","JPY_displayName":"japansk yen","CAD_symbol":"CAD","USD_displayName":"US-dollar","CNY_symbol":"CNY","GBP_displayName":"brittiskt pund sterling","EUR_displayName":"euro","USD_symbol":"US$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.sv");dojo.cldr.nls.gregorian.sv={"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"quarters-standAlone-narrow":["1","2","3","4"],"field-weekday":"veckodag","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, yyyy-MM-dd","dateFormatItem-MMMEd":"E d MMM","eraNarrow":["f.Kr.","e.Kr."],"dateFormat-long":"d MMMM y","months-format-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"em","dateFormat-full":"EEEE'en' 'den' d:'e' MMMM y","dateFormatItem-Md":"d/M","dateFormatItem-MMMMEEEd":"EEE d MMMM","field-era":"era","dateFormatItem-yM":"yyyy-MM","months-standAlone-wide":["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],"timeFormat-short":"HH:mm","quarters-format-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"timeFormat-long":"HH:mm:ss z","field-year":"år","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"yyyy Q","field-hour":"timme","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"'kl'. HH:mm:ss zzzz","field-day-relative+0":"i dag","field-day-relative+1":"i morgon","field-day-relative+2":"i övermorgon","field-day-relative+3":"i överövermorgon","months-standAlone-abbr":["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],"quarters-format-abbr":["K1","K2","K3","K4"],"quarters-standAlone-wide":["1:a kvartalet","2:a kvartalet","3:e kvartalet","4:e kvartalet"],"dateFormatItem-M":"L","days-standAlone-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"dateFormatItem-yyyyMMM":"MMM y","dateFormatItem-MMMMd":"d:'e' MMMM","dateFormatItem-yyMMM":"MMM -yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["K1","K2","K3","K4"],"eraAbbr":["f.Kr.","e.Kr."],"field-minute":"minut","field-dayperiod":"fm/em","days-standAlone-abbr":["sön","mån","tis","ons","tors","fre","lör"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"i går","field-day-relative+-2":"i förrgår","field-day-relative+-3":"i förrförrgår","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E d/M","field-day":"dag","days-format-wide":["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],"field-zone":"tidszon","dateFormatItem-yyyyMM":"yyyy-MM","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"yy-MM","dateFormatItem-hm":"h:mm a","days-format-abbr":["sön","mån","tis","ons","tors","fre","lör"],"eraNames":["före Kristus","efter Kristus"],"days-format-narrow":["S","M","T","O","T","F","L"],"field-month":"månad","days-standAlone-narrow":["S","M","T","O","T","F","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"fm","dateFormatItem-MMMMEd":"E d:'e' MMMM","dateFormat-short":"yyyy-MM-dd","dateFormatItem-MMd":"d/M","field-second":"sekund","dateFormatItem-yMMMEd":"EEE d MMM y","field-week":"vecka","dateFormat-medium":"d MMM y","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_ja.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ja.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ja.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ja");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja");dojo.nls.colors.ja={"lightsteelblue":"ライト・スチール・ブルー","orangered":"オレンジ・レッド","midnightblue":"ミッドナイト・ブルー","cadetblue":"くすんだ青","seashell":"シーシェル","slategrey":"スレート・グレイ","coral":"珊瑚","darkturquoise":"ダーク・ターコイズ","antiquewhite":"アンティーク・ホワイト","mediumspringgreen":"ミディアム・スプリング・グリーン","salmon":"サーモン","darkgrey":"ダーク・グレイ","ivory":"アイボリー","greenyellow":"緑黄色","mistyrose":"ミスティ・ローズ","lightsalmon":"ライト・サーモン","silver":"銀","dimgrey":"くすんだグレイ","orange":"オレンジ","white":"白","navajowhite":"ナバホ・ホワイト","royalblue":"藤色","deeppink":"濃いピンク","lime":"ライム","oldlace":"オールド・レイス","chartreuse":"淡黄緑","darkcyan":"ダーク・シアン・ブルー","yellow":"黄","linen":"亜麻色","olive":"オリーブ","gold":"金","lawngreen":"ローン・グリーン","lightyellow":"ライト・イエロー","tan":"茶褐色","darkviolet":"ダーク・バイオレット","lightslategrey":"ライト・スレート・グレイ","grey":"グレイ","darkkhaki":"ダーク・カーキー","green":"緑","deepskyblue":"濃い空色","aqua":"アクア","sienna":"黄褐色","mintcream":"ミント・クリーム","rosybrown":"ロージー・ブラウン","mediumslateblue":"ミディアム・スレート・ブルー","magenta":"赤紫","lightseagreen":"ライト・シー・グリーン","cyan":"シアン・ブルー","olivedrab":"濃黄緑","darkgoldenrod":"ダーク・ゴールデン・ロッド","slateblue":"スレート・ブルー","mediumaquamarine":"ミディアム・アクアマリーン","lavender":"ラベンダー","mediumseagreen":"ミディアム・シー・グリーン","maroon":"えび茶","darkslategray":"ダーク・スレート・グレイ","mediumturquoise":"ミディアム・ターコイズ","ghostwhite":"ゴースト・ホワイト","darkblue":"ダーク・ブルー","mediumvioletred":"ミディアム・バイオレット・レッド","brown":"茶","lightgray":"ライト・グレイ","sandybrown":"砂褐色","pink":"ピンク","firebrick":"赤煉瓦色","indigo":"藍色","snow":"雪色","darkorchid":"ダーク・オーキッド","turquoise":"ターコイズ","chocolate":"チョコレート","springgreen":"スプリング・グリーン","moccasin":"モカシン","navy":"濃紺","lemonchiffon":"レモン・シフォン","teal":"ティール","floralwhite":"フローラル・ホワイト","cornflowerblue":"コーンフラワー・ブルー","paleturquoise":"ペイル・ターコイズ","purple":"紫","gainsboro":"ゲインズボーロ","plum":"深紫","red":"赤","blue":"青","forestgreen":"フォレスト・グリーン","darkgreen":"ダーク・グリーン","honeydew":"ハニーデュー","darkseagreen":"ダーク・シー・グリーン","lightcoral":"ライト・コーラル","palevioletred":"ペイル・バイオレット・レッド","mediumpurple":"ミディアム・パープル","saddlebrown":"サドル・ブラウン","darkmagenta":"ダーク・マジェンタ","thistle":"シスル","whitesmoke":"ホワイト・スモーク","wheat":"小麦色","violet":"すみれ色","lightskyblue":"ライト・スカイ・ブルー","goldenrod":"ゴールデン・ロッド","mediumblue":"ミディアム・ブルー","skyblue":"スカイ・ブルー","crimson":"深紅","darksalmon":"ダーク・サーモン","darkred":"ダーク・レッド","darkslategrey":"ダーク・スレート・グレイ","peru":"ペルー","lightgrey":"ライト・グレイ","lightgoldenrodyellow":"ライト・ゴールデン・ロッド・イエロー","blanchedalmond":"皮なしアーモンド","aliceblue":"アリス・ブルー","bisque":"ビスク","slategray":"スレート・グレイ","palegoldenrod":"ペイル・ゴールデン・ロッド","darkorange":"ダーク・オレンジ","aquamarine":"碧緑","lightgreen":"ライト・グリーン","burlywood":"バーリーウッド","dodgerblue":"ドッジャー・ブルー","darkgray":"ダーク・グレイ","lightcyan":"ライト・シアン","powderblue":"淡青","blueviolet":"青紫","orchid":"薄紫","dimgray":"くすんだグレイ","beige":"ベージュ","fuchsia":"紫紅色","lavenderblush":"ラベンダー・ブラッシ","hotpink":"ホット・ピンク","steelblue":"鋼色","tomato":"トマト色","lightpink":"ライト・ピンク","limegreen":"ライム・グリーン","indianred":"インディアン・レッド","papayawhip":"パパイア・ホイップ","lightslategray":"ライト・スレート・グレイ","gray":"グレイ","mediumorchid":"ミディアム・オーキッド","cornsilk":"コーンシルク","black":"黒","seagreen":"シー・グリーン","darkslateblue":"ダーク・スレート・ブルー","khaki":"カーキー","lightblue":"ライト・ブルー","palegreen":"ペイル・グリーン","azure":"薄い空色","peachpuff":"ピーチ・パフ","darkolivegreen":"ダーク・オリーブ・グリーン","yellowgreen":"黄緑"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja");dijit.nls.loading.ja={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja");dijit._editor.nls.commands.ja={"removeFormat":"形式の除去","copy":"コピー","paste":"貼り付け","selectAll":"すべて選択","insertOrderedList":"番号付きリスト","insertTable":"テーブルの挿入/編集","print":"印刷","underline":"下線","foreColor":"前景色","htmlToggle":"HTML ソース","formatBlock":"段落スタイル","newPage":"新しいページ","insertHorizontalRule":"水平罫線","delete":"削除","insertUnorderedList":"黒丸付きリスト","tableProp":"テーブルプロパティ","insertImage":"イメージの挿入","superscript":"上付き文字","subscript":"下付き文字","createLink":"リンクの作成","undo":"元に戻す","fullScreen":"全画面表示に切り替え","italic":"斜体","fontName":"フォント名","justifyLeft":"左揃え","unlink":"リンクの削除","toggleTableBorder":"テーブルボーダーの切り替え","viewSource":"HTML ソースの表示","fontSize":"フォントサイズ","systemShortcut":"\"${0}\" アクションを使用できるのは、ブラウザーでキーボードショートカットを使用する場合のみです。 ${1} を使用してください。","indent":"インデント","redo":"やり直し","strikethrough":"取り消し線","justifyFull":"両端揃え","justifyCenter":"中央揃え","hiliteColor":"背景色","deleteTable":"テーブルの削除","outdent":"アウトデント","cut":"切り取り","plainFormatBlock":"段落スタイル","toggleDir":"方向の切り替え","bold":"太字","tabIndent":"タブインデント","justifyRight":"右揃え","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja");dijit.form.nls.validate.ja={"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja");dijit.form.nls.ComboBox.ja={"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ja");dijit._editor.nls.FontChoice.ja={"1":"超極小","2":"極小","formatBlock":"フォーマット","3":"小","4":"標準","5":"大","6":"特大","7":"超特大","fantasy":"fantasy","serif":"serif","p":"段落","pre":"事前フォーマット済み","sans-serif":"sans-serif","fontName":"フォント","h1":"見出し","h2":"副見出し","h3":"副見出しの副見出し","monospace":"monospace","fontSize":"サイズ","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ja");dijit._editor.nls.LinkDialog.ja={"text":"説明:","insertImageTitle":"イメージ・プロパティー","set":"設定","newWindow":"新規ウィンドウ","topWindow":"最上位ウィンドウ","target":"ターゲット:","createLinkTitle":"リンク・プロパティー","parentWindow":"親ウィンドウ","currentWindow":"現行ウィンドウ","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja");dojo.cldr.nls.currency.ja={"HKD_displayName":"香港ドル","CHF_displayName":"スイス フラン","JPY_symbol":"￥","CAD_displayName":"カナダ ドル","CNY_displayName":"中国人民元","USD_symbol":"$","AUD_displayName":"オーストラリア ドル","JPY_displayName":"日本円","USD_displayName":"米ドル","CNY_symbol":"元","GBP_displayName":"英国ポンド","EUR_displayName":"ユーロ","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja");dojo.cldr.nls.gregorian.ja={"field-weekday":"曜日","dateFormatItem-yQQQ":"yQQQ","dateFormatItem-yMEd":"y/M/d(EEE)","dateFormatItem-MMMEd":"M月d日(E)","eraNarrow":["BC","AD"],"dateFormat-long":"y年M月d日","months-format-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"午後","dateFormat-full":"y年M月d日EEEE","dateFormatItem-Md":"M/d","dateFormatItem-yMd":"y/M/d","field-era":"時代","dateFormatItem-yM":"y/M","months-standAlone-wide":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"timeFormat-short":"H:mm","quarters-format-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"timeFormat-long":"H:mm:ss z","field-year":"年","dateFormatItem-yMMM":"y年M月","dateFormatItem-yQ":"y/Q","field-hour":"時","dateFormatItem-MMdd":"MM/dd","months-format-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"dateFormatItem-yyQ":"yy/Q","timeFormat-full":"H時mm分ss秒 zzzz","field-day-relative+0":"今日","field-day-relative+1":"明日","field-day-relative+2":"明後日","dateFormatItem-H":"H時","field-day-relative+3":"3日後","months-standAlone-abbr":["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["第1四半期","第2四半期","第3四半期","第4四半期"],"dateFormatItem-M":"L","days-standAlone-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"dateFormatItem-yyMMM":"y年M月","timeFormat-medium":"H:mm:ss","dateFormatItem-Hm":"H:mm","eraAbbr":["BC","AD"],"field-minute":"分","field-dayperiod":"午前/午後","days-standAlone-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-d":"d日","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"昨日","dateFormatItem-h":"ah","dateTimeFormat-long":"{1}{0}","field-day-relative+-2":"一昨日","field-day-relative+-3":"3日前","dateFormatItem-MMMd":"M月d日","dateFormatItem-MEd":"M/d(E)","dateTimeFormat-full":"{1}{0}","field-day":"日","days-format-wide":["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],"field-zone":"タイムゾーン","dateFormatItem-yyyyMM":"yyyy/MM","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"ah:mm","dateFormatItem-GGGGyMd":"GGGGy年M月d日","days-format-abbr":["日","月","火","水","木","金","土"],"dateFormatItem-yMMMd":"y年M月d日","eraNames":["紀元前","西暦"],"days-format-narrow":["日","月","火","水","木","金","土"],"field-month":"月","days-standAlone-narrow":["日","月","火","水","木","金","土"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"午前","dateFormat-short":"yy/MM/dd","field-second":"秒","dateFormatItem-yMMMEd":"y年M月d日(EEE)","dateFormatItem-Ed":"d日(EEE)","field-week":"週","dateFormat-medium":"yyyy/MM/dd","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-hms":"ah:mm:ss","dateFormatItem-yyyy":"y年","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/fi/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/fi/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/fi/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/fi/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/fi/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/fi/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/nb/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/nb/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/nb/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/nb/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/nb/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/nb/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Laster inn...","errorState":"Det oppsto en feil"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_he.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_he.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_he.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_he");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he");dojo.nls.colors.he={"lightsteelblue":"כחול פלדה בהיר","orangered":"כתום אדום","midnightblue":"כחול כהה","cadetblue":"כחול ים","seashell":"צדף","slategrey":"אפור צפחה","coral":"אלמוג","darkturquoise":"טורקיז כהה","antiquewhite":"לבן עתיק","mediumspringgreen":"ירוק אביב בינוני","salmon":"סלמון","darkgrey":"אפור כהה","ivory":"שנהב","greenyellow":"ירוק-צהוב","mistyrose":"ורוד מעורפל","lightsalmon":"סלמון בהיר","silver":"כסף","dimgrey":"אפור עמום","orange":"כתום","white":"לבן","navajowhite":"לבן נוואחו","royalblue":"כחול מלכותי","deeppink":"ורוד עמוק","lime":"לימון","oldlace":"תחרה עתיקה","chartreuse":"ירוק-צהוב","darkcyan":"טורקיז כהה","yellow":"צהוב","linen":"פשתן","olive":"זית","gold":"זהב","lawngreen":"ירוק דשא","lightyellow":"צהוב בהיר","tan":"חום אדמדם","darkviolet":"סגול כהה","lightslategrey":"אפור צפחה בהיר","grey":"אפור","darkkhaki":"חאקי כהה","green":"ירוק","deepskyblue":"כחול שמיים עמוק","aqua":"אקווה","sienna":"סיינה","mintcream":"קרם מנטה","rosybrown":"חום ורדרד","mediumslateblue":"כחול צפחה בינוני","magenta":"בורדו","lightseagreen":"ירוק ים בהיר","cyan":"טורקיז","olivedrab":"זית עמום","darkgoldenrod":"זהוב כהה","slateblue":"כחול צפחה","mediumaquamarine":"כחול בינוני","lavender":"לבנדר","mediumseagreen":"ירוק ים בינוני","maroon":"חום אדמדם","darkslategray":"אפור צפחה כהה","mediumturquoise":"טורקיז בינוני","ghostwhite":"לבן רפאים","darkblue":"כחול כהה","mediumvioletred":"סגול-אדום בינוני","brown":"חום","lightgray":"אפור בהיר","sandybrown":"חום חולי","pink":"ורוד","firebrick":"לבנה שרופה","indigo":"אינדיגו","snow":"שלג","darkorchid":"סחלב כהה","turquoise":"טורקיז","chocolate":"שוקולד","springgreen":"ירוק אביב","moccasin":"מוקסין","navy":"כחול כהה","lemonchiffon":"ירוק לימון","teal":"כחול-ירוק כהה","floralwhite":"לבן פרחוני","cornflowerblue":"כחול דרדר","paleturquoise":"טורקיז בהיר","purple":"סגול","gainsboro":"גיינסבורו","plum":"שזיף","red":"אדום","blue":"כחול","forestgreen":"ירוק יער","darkgreen":"ירוק כהה","honeydew":"ירקרק","darkseagreen":"ירוק ים כהה","lightcoral":"אלמוג בהיר","palevioletred":"סגול-אדום בהיר","mediumpurple":"סגול בינוני","saddlebrown":"חום דהוי","darkmagenta":"בורדו כהה","thistle":"דרדר","whitesmoke":"עשן לבן","wheat":"חיוט","violet":"סגול","lightskyblue":"כחול שמיים בהיר","goldenrod":"זהוב","mediumblue":"תכלת בינוני","skyblue":"כחול שמיים","crimson":"ארגמן","darksalmon":"סלמון כהה","darkred":"אדום כהה","darkslategrey":"אפור צפחה כהה","peru":"פרו","lightgrey":"אפור בהיר","lightgoldenrodyellow":"צהוב בהיר","blanchedalmond":"שקד","aliceblue":"כחול פלדה","bisque":"לבן שקד","slategray":"אפור צפחה","palegoldenrod":"זהוב בהיר","darkorange":"כתום כהה","aquamarine":"אקוומארין","lightgreen":"ירוק בהיר","burlywood":"חום דהוי","dodgerblue":"כחול","darkgray":"אפור כהה","lightcyan":"טורקיז בהיר","powderblue":"כחול חיוור","blueviolet":"כחול-סגול","orchid":"סחלב","dimgray":"אפור עמום","beige":"בז'","fuchsia":"ורוד בהיר","lavenderblush":"סומק לבנדר","hotpink":"ורוד לוהט","steelblue":"כחול פלדה","tomato":"עגבניה","lightpink":"ורוד בהיר","limegreen":"ירוק לימוני","indianred":"אדום דהוי","papayawhip":"פפאיה","lightslategray":"אפור צפחה בהיר","gray":"אפור","mediumorchid":"סחלב בינוני","cornsilk":"צהבהב","black":"שחור","seagreen":"ירוק ים","darkslateblue":"כחול צפחה כהה","khaki":"חאקי","lightblue":"תכלת","palegreen":"ירוק בהיר","azure":"תכלת עז","peachpuff":"קציפת אפרסק","darkolivegreen":"ירוק זית כהה","yellowgreen":"ירוק צהוב"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he");dijit.nls.loading.he={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he");dijit.nls.common.he={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.he");dijit._editor.nls.commands.he={"removeFormat":"סילוק עיצוב","copy":"עותק","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","print":"הדפסה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","newPage":"דף חדש ","insertHorizontalRule":"קו אופקי","delete":"מחיקה","appleKey":"⌘${0}‎","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","fullScreen":"מיתוג מסך מלא ","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","viewSource":"הצגת מקור HTML ","ctrlKey":"ctrl+${0}‎","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he");dijit.form.nls.validate.he={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he");dijit.form.nls.ComboBox.he={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.he");dijit._editor.nls.FontChoice.he={"1":"קטן ביות","2":"קטן מאוד","formatBlock":"עיצוב","3":"קטן","4":"בינוני","5":"גדול","6":"גדול מאוד","7":"גדול ביותר","fantasy":"fantasy","serif":"serif","p":"פיסקה","pre":"מעוצב מראש","sans-serif":"sans-serif","fontName":"גופן","h1":"כותרת","h2":"תת-כותרת","h3":"תת-תת-כותרת","monospace":"monospace","fontSize":"גודל","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.he");dijit._editor.nls.LinkDialog.he={"text":"תיאור:","insertImageTitle":"תכונות תמונה","set":"הגדרה","newWindow":"חלון חדש","topWindow":"חלון עליון ","target":"יעד:","createLinkTitle":"תכונות קישור","parentWindow":"חלון אב","currentWindow":"חלון נוכחי ","url":"URL:‏"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he");dojo.cldr.nls.number.he={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.he");dojo.cldr.nls.currency.he={"HKD_displayName":"דולר הונג קונגי","CHF_displayName":"פרנק שוויצרי","CAD_displayName":"דולר קנדי","CNY_displayName":"יואן רנמינבי סיני","AUD_displayName":"דולר אוסטרלי","JPY_displayName":"ין יפני","USD_displayName":"דולר אמריקאי","GBP_displayName":"לירה שטרלינג","EUR_displayName":"אירו","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.he");dojo.cldr.nls.gregorian.he={"field-weekday":"יום בשבוע","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d.M.yyyy","dateFormatItem-MMMEd":"E, d בMMM","eraNarrow":["לפנה״ס","לסה״נ"],"dateFormat-long":"d בMMMM y","months-format-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateFormatItem-EEEd":"EEE ה-d","dayPeriods-format-wide-pm":"אחה״צ","dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-Md":"d/M","field-era":"תקופה","dateFormatItem-yM":"M.yyyy","months-standAlone-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"timeFormat-short":"HH:mm","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"timeFormat-long":"HH:mm:ss z","field-year":"שנה","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"שעה","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"היום","field-day-relative+1":"מחר","field-day-relative+2":"מחרתיים","dateFormatItem-H":"HH","field-day-relative+3":"בעוד שלושה ימים","months-standAlone-abbr":["ינו׳","פבר׳","מרס","אפר׳","מאי","יונ׳","יול׳","אוג׳","ספט׳","אוק׳","נוב׳","דצמ׳"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yyyy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"לפה״צ/אחה״צ","days-standAlone-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"אתמול","field-day-relative+-2":"שלשום","field-day-relative+-3":"לפני שלושה ימים","dateFormatItem-MMMd":"d בMMM","dateFormatItem-MEd":"E, M-d","dateFormatItem-yMMMM":"MMMM y","field-day":"יום","days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"field-zone":"אזור","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"לפנה״צ","dateFormatItem-MMMMEd":"E, d בMMMM","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, d בMMM y","dateFormatItem-Ed":"E ה-d","field-week":"שבוע","dateFormat-medium":"d בMMM yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_fi.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_fi.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_fi.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi");dojo.nls.colors.fi={"lightsteelblue":"light steel blue","orangered":"orange red","midnightblue":"midnight blue","cadetblue":"cadet blue","seashell":"seashell","slategrey":"slate gray","coral":"coral","darkturquoise":"dark turquoise","antiquewhite":"antique white","mediumspringgreen":"medium spring green","salmon":"salmon","darkgrey":"dark gray","ivory":"ivory","greenyellow":"green-yellow","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"silver","dimgrey":"dim gray","orange":"orange","white":"white","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"deep pink","lime":"lime","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"dark cyan","yellow":"yellow","linen":"linen","olive":"olive","gold":"gold","lawngreen":"lawn green","lightyellow":"light yellow","tan":"tan","darkviolet":"dark violet","lightslategrey":"light slate gray","grey":"gray","darkkhaki":"dark khaki","green":"green","deepskyblue":"deep sky blue","aqua":"aqua","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"magenta","lightseagreen":"light sea green","cyan":"cyan","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"lavender","mediumseagreen":"medium sea green","maroon":"maroon","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"dark blue","mediumvioletred":"medium violet-red","brown":"brown","lightgray":"light gray","sandybrown":"sandy brown","pink":"pink","firebrick":"fire brick","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"chocolate","springgreen":"spring green","moccasin":"moccasin","navy":"navy","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"purple","gainsboro":"gainsboro","plum":"plum","red":"red","blue":"blue","forestgreen":"forest green","darkgreen":"dark green","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"dark magenta","thistle":"thistle","whitesmoke":"white smoke","wheat":"wheat","violet":"violet","lightskyblue":"light sky blue","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"crimson","darksalmon":"dark salmon","darkred":"dark red","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"light gray","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"dark orange","aquamarine":"aquamarine","lightgreen":"light green","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"dark gray","lightcyan":"light cyan","powderblue":"powder blue","blueviolet":"blue-violet","orchid":"orchid","dimgray":"dim gray","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"light pink","limegreen":"lime green","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"gray","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"black","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"light blue","palegreen":"pale green","azure":"azure","peachpuff":"peach puff","darkolivegreen":"dark olive green","yellowgreen":"yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi");dijit.nls.loading.fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi");dijit.nls.common.fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fi");dijit._editor.nls.commands.fi={"removeFormat":"Poista muotoilu","copy":"Kopioi","paste":"Liitä","selectAll":"Valitse kaikki","insertOrderedList":"Numeroitu luettelo","insertTable":"Lisää taulukko/muokkaa taulukkoa","print":"Tulosta","underline":"Alleviivaus","foreColor":"Edustaväri","htmlToggle":"HTML-lähde","formatBlock":"Kappaletyyli","newPage":"Uusi sivu","insertHorizontalRule":"Vaakasuuntainen viiva","delete":"Poista","insertUnorderedList":"Numeroimaton luettelo","tableProp":"Taulukon ominaisuudet","insertImage":"Lisää kuva","superscript":"Yläindeksi","subscript":"Alaindeksi","createLink":"Luo linkki","undo":"Kumoa","fullScreen":"Vaihda koko näyttö","italic":"Kursivointi","fontName":"Fontin nimi","justifyLeft":"Tasaus vasemmalle","unlink":"Poista linkki","toggleTableBorder":"Ota taulukon kehys käyttöön/poista kehys käytöstä","viewSource":"Näytä HTML-lähde","fontSize":"Fontin koko","systemShortcut":"Toiminto \"${0}\" on käytettävissä selaimessa vain näppäimistön pikatoiminnolla. Käytä seuraavaa: ${1}.","indent":"Sisennä","redo":"Tee uudelleen","strikethrough":"Yliviivaus","justifyFull":"Tasaus","justifyCenter":"Tasaus keskelle","hiliteColor":"Taustaväri","deleteTable":"Poista taulukko","outdent":"Ulonna","cut":"Leikkaa","plainFormatBlock":"Kappaletyyli","toggleDir":"Vaihda suuntaa","bold":"Lihavointi","tabIndent":"Sarkainsisennys","justifyRight":"Tasaus oikealle","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi");dijit.form.nls.validate.fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi");dijit.form.nls.ComboBox.fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.fi");dijit._editor.nls.FontChoice.fi={"1":"xx-small","2":"x-small","formatBlock":"Muoto","3":"small","4":"medium","5":"large","6":"x-large","7":"xx-large","fantasy":"fantasy","serif":"serif","p":"Kappale","pre":"Esimuotoiltu","sans-serif":"sans-serif","fontName":"Fontti","h1":"Otsikko","h2":"Alatason otsikko","h3":"Alimman tason otsikko","monospace":"monospace","fontSize":"Koko","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.fi");dijit._editor.nls.LinkDialog.fi={"text":"Kuvaus:","insertImageTitle":"Kuvan ominaisuudet","set":"Aseta","newWindow":"Uusi ikkuna","topWindow":"Päällimmäinen ikkuna","target":"Kohde:","createLinkTitle":"Linkin ominaisuudet","parentWindow":"Pääikkuna","currentWindow":"Nykyinen ikkuna","url":"URL-osoite:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi");dojo.cldr.nls.number.fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fi");dojo.cldr.nls.currency.fi={"HKD_displayName":"Hongkongin dollari","CHF_displayName":"Sveitsin frangi","CHF_symbol":"CHF","JPY_symbol":"¥","HKD_symbol":"HKD","CAD_displayName":"Kanadan dollari","CNY_displayName":"Kiinan yuan","USD_symbol":"$","AUD_displayName":"Australian dollari","JPY_displayName":"Japanin jeni","CAD_symbol":"CAD","USD_displayName":"Yhdysvaltain dollari","CNY_symbol":"CNY","GBP_displayName":"Englannin punta","AUD_symbol":"AUD","EUR_displayName":"euro","GBP_symbol":"£","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fi");dojo.cldr.nls.gregorian.fi={"months-format-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"field-weekday":"viikonpäivä","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"EEE d.M.yyyy","dateFormatItem-MMMEd":"E d. MMM","eraNarrow":["eKr.","jKr."],"dateFormat-long":"d. MMMM y","months-format-wide":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-EEEd":"EEE d.","dayPeriods-format-wide-pm":"ip.","dateFormat-full":"EEEE d. MMMM y","dateFormatItem-Md":"d.M.","dayPeriods-standAlone-wide-pm":"ip.","dayPeriods-format-abbr-am":"ap.","field-era":"aikakausi","dateFormatItem-yM":"L.yyyy","months-standAlone-wide":["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"timeFormat-short":"H.mm","quarters-format-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"timeFormat-long":"H.mm.ss z","field-year":"vuosi","dateFormatItem-yMMM":"LLL y","dateFormatItem-yQ":"Q/yyyy","dateFormatItem-yyyyMMMM":"LLLL y","field-hour":"tunti","months-format-abbr":["tammikuuta","helmikuuta","maaliskuuta","huhtikuuta","toukokuuta","kesäkuuta","heinäkuuta","elokuuta","syyskuuta","lokakuuta","marraskuuta","joulukuuta"],"dateFormatItem-yyQ":"Q/yy","timeFormat-full":"H.mm.ss zzzz","dateFormatItem-yyyyMEEEd":"EEE d.M.yyyy","field-day-relative+0":"tänään","field-day-relative+1":"huomenna","field-day-relative+2":"ylihuomenna","dateFormatItem-H":"H","months-standAlone-abbr":["tammi","helmi","maalis","huhti","touko","kesä","heinä","elo","syys","loka","marras","joulu"],"quarters-format-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"quarters-standAlone-wide":["1. neljännes","2. neljännes","3. neljännes","4. neljännes"],"dateFormatItem-M":"L","days-standAlone-wide":["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],"dateFormatItem-yyMMM":"LLLL yy","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"H.mm","quarters-standAlone-abbr":["1. nelj.","2. nelj.","3. nelj.","4. nelj."],"eraAbbr":["eKr.","jKr."],"field-minute":"minuutti","field-dayperiod":"ap./ip.","days-standAlone-abbr":["su","ma","ti","ke","to","pe","la"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm.ss","field-day-relative+-1":"eilen","field-day-relative+-2":"toissapäivänä","dateFormatItem-MMMd":"d. MMM","dateFormatItem-MEd":"E d.M.","field-day":"päivä","dateFormatItem-yMMMMccccd":"cccc, d. MMMM y","days-format-wide":["sunnuntaina","maanantaina","tiistaina","keskiviikkona","torstaina","perjantaina","lauantaina"],"field-zone":"aikavyöhyke","dateFormatItem-y":"y","months-standAlone-narrow":["T","H","M","H","T","K","H","E","S","L","M","J"],"dateFormatItem-yyMM":"M/yy","dateFormatItem-hm":"h.mm a","dayPeriods-format-abbr-pm":"ip.","days-format-abbr":["su","ma","ti","ke","to","pe","la"],"eraNames":["ennen Kristuksen syntymää","jälkeen Kristuksen syntymän"],"days-format-narrow":["S","M","T","K","T","P","L"],"field-month":"kuukausi","days-standAlone-narrow":["S","M","T","K","T","P","L"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"ap.","dayPeriods-standAlone-wide-am":"ap.","dateFormat-short":"d.M.yyyy","field-second":"sekunti","dateFormatItem-yMMMEd":"EEE d. MMM y","field-week":"viikko","dateFormat-medium":"d.M.yyyy","dateFormatItem-yyyyM":"M/yyyy","dateFormatItem-yyyyQQQQ":"QQQQ y","dateFormatItem-Hms":"H.mm.ss","dateFormatItem-hms":"h.mm.ss a","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/fr/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/fr/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/fr/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/fr/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/fr/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/fr/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Chargement...","errorState":"Une erreur est survenue"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_pt-pt.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_pt-pt.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_pt-pt.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_pt-pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_pt");dojo.nls.colors.pt_pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento escuro","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento escuro","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_pt");dijit.nls.loading.pt_pt={"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_pt");dijit.nls.common.pt_pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt_pt");dijit._editor.nls.commands.pt_pt={"removeFormat":"Remover formato","copy":"Copiar","paste":"Colar","selectAll":"Seleccionar tudo","insertOrderedList":"Lista numerada","insertTable":"Inserir/Editar tabela","print":"Imprimir","underline":"Sublinhado","foreColor":"Cor de primeiro plano","htmlToggle":"Origem HTML","formatBlock":"Estilo de parágrafo","newPage":"Nova página","insertHorizontalRule":"Régua horizontal","delete":"Eliminar","insertUnorderedList":"Lista marcada","tableProp":"Propriedades da tabela","insertImage":"Inserir imagem","superscript":"Superior à linha","subscript":"Inferior à linha","createLink":"Criar ligação","undo":"Anular","fullScreen":"Alternar ecrã completo","italic":"Itálico","fontName":"Nome do tipo de letra","justifyLeft":"Alinhar à esquerda","unlink":"Remover ligação","toggleTableBorder":"Alternar contorno da tabela","viewSource":"Ver origem HTML","fontSize":"Tamanho do tipo de letra","systemShortcut":"A acção \"${0}\" apenas está disponível no navegador utilizando um atalho de teclado. Utilize ${1}.","indent":"Indentar","redo":"Repetir","strikethrough":"Rasurado","justifyFull":"Justificar","justifyCenter":"Alinhar ao centro","hiliteColor":"Cor de segundo plano","deleteTable":"Eliminar tabela","outdent":"Recuar","cut":"Cortar","plainFormatBlock":"Estilo de parágrafo","toggleDir":"Alternar direcção","bold":"Negrito","tabIndent":"Indentar com a tecla Tab","justifyRight":"Alinhar à direita","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_pt");dijit.form.nls.validate.pt_pt={"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_pt");dijit.form.nls.ComboBox.pt_pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.pt_pt");dijit._editor.nls.FontChoice.pt_pt={"1":"xxs","2":"xs","formatBlock":"Formato","3":"small","4":"medium","5":"large","6":"xl","7":"xxl","fantasy":"fantasy","serif":"serif","p":"Parágrafo","pre":"Pré-formatado","sans-serif":"sans-serif","fontName":"Tipo de letra","h1":"Título","h2":"Sub-título","h3":"Sub-subtítulo","monospace":"monospace","fontSize":"Tamanho","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.pt_pt");dijit._editor.nls.LinkDialog.pt_pt={"text":"Descrição:","insertImageTitle":"Propriedades da imagem","set":"Definir","newWindow":"Nova janela","topWindow":"Janela superior","target":"Destino:","createLinkTitle":"Propriedades da ligação","parentWindow":"Janela ascendente","currentWindow":"Janela actual","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_pt");dojo.cldr.nls.number.pt_pt={"currencyFormat":"#,##0.00 ¤","group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt_pt");dojo.cldr.nls.currency.pt_pt={"HKD_displayName":"Dólar de Hong Kong","CHF_displayName":"Franco suíço","CAD_displayName":"Dólar canadense","CNY_displayName":"Yuan Renminbi chinês","AUD_displayName":"Dólar australiano","JPY_displayName":"Iene japonês","USD_displayName":"Dólar norte-americano","GBP_displayName":"Libra esterlina britânica","EUR_displayName":"Euro","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt_pt");dojo.cldr.nls.gregorian.pt_pt={"quarters-standAlone-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"quarters-format-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-am":"a.m.","dateFormat-medium":"d 'de' MMM 'de' yyyy","quarters-standAlone-abbr":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-abbr-pm":"p.m.","dateFormatItem-hm":"h:mm","months-standAlone-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"dayPeriods-standAlone-abbr-am":"a.m.","dayPeriods-format-wide-pm":"Depois do meio-dia","months-standAlone-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"dateFormatItem-yQQQ":"QQQ 'de' y","dayPeriods-format-wide-am":"Antes do meio-dia","dayPeriods-format-abbr-pm":"p.m.","dateFormatItem-yyQ":"QQQ 'de' yy","dayPeriods-format-abbr-am":"a.m.","months-format-wide":["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],"days-standAlone-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-abbr":["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],"days-standAlone-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"days-format-wide":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"dateFormatItem-yQ":"QQQ 'de' yyyy","dateFormatItem-hms":"h:mm:ss","quarters-format-wide":["1.º trimestre","2.º trimestre","3.º trimestre","4.º trimestre"],"dayPeriods-standAlone-wide-pm":"p.m.","days-format-abbr":["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],"months-format-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"field-weekday":"Dia da semana","dateFormatItem-yMEd":"EEE, dd/MM/yyyy","dateFormatItem-MMMEd":"EEE, d 'de' MMM","eraNarrow":["a.C.","d.C."],"dayPeriods-format-wide-morning":"manhã","dateFormat-long":"d 'de' MMMM 'de' y","dateFormatItem-EEEd":"EEE, d","dateFormat-full":"EEEE, d 'de' MMMM 'de' y","dateFormatItem-Md":"d/M","dayPeriods-format-wide-noon":"meio-dia","field-era":"Era","dateFormatItem-yM":"MM/yyyy","timeFormat-short":"HH:mm","timeFormat-long":"HH'h'mm'min'ss's' z","field-year":"Ano","dateFormatItem-yMMM":"MMM 'de' y","field-hour":"Hora","dateFormatItem-MMdd":"dd/MM","timeFormat-full":"HH'h'mm'min'ss's' zzzz","field-day-relative+0":"Hoje","field-day-relative+1":"Amanhã","field-day-relative+2":"Depois de amanhã","field-day-relative+3":"Daqui a três dias","dateFormatItem-HHmmss":"HH'h'mm'min'ss's'","dateFormatItem-M":"L","dateFormatItem-yyyyMMM":"MMM 'de' y","dateFormatItem-yyMMMEEEd":"EEE, d 'de' MMM 'de' yy","dateFormatItem-yyMMM":"MMM 'de' yy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH'h'mm","eraAbbr":["a.C.","d.C."],"field-minute":"Minuto","field-dayperiod":"Período do dia","dayPeriods-format-wide-night":"noite","dateFormatItem-yyMMMd":"d 'de' MMM 'de' yy","dateFormatItem-d":"d","dateFormatItem-ms":"mm'min'ss's'","field-day-relative+-1":"Ontem","field-day-relative+-2":"Anteontem","field-day-relative+-3":"Há três dias","dateFormatItem-MMMd":"d 'de' MMM","dateFormatItem-MEd":"EEE, dd/MM","field-day":"Dia","field-zone":"Fuso","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["J","F","M","A","M","J","J","A","S","O","N","D"],"dateFormatItem-yyMM":"MM/yy","eraNames":["Antes de Cristo","Ano do Senhor"],"days-format-narrow":["D","S","T","Q","Q","S","S"],"field-month":"Mês","days-standAlone-narrow":["D","S","T","Q","Q","S","S"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH'h'mm","dateFormat-short":"dd/MM/yy","dayPeriods-format-wide-afternoon":"tarde","field-second":"Segundo","dateFormatItem-yMMMEd":"EEE, d 'de' MMM 'de' y","field-week":"Semana","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss"};
Index: trunk/web/dojo/dijit/nls/nl/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/nl/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/nl/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/nl/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/nl/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/nl/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_hu.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_hu.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_hu.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_hu");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.hu");dojo.nls.colors.hu={"lightsteelblue":"világos acélkék","orangered":"narancsvörös","midnightblue":"éjkék","cadetblue":"kadétkék","seashell":"kagyló","slategrey":"palaszürke","coral":"korall","darkturquoise":"sötét türkizkék","antiquewhite":"antik fehér","mediumspringgreen":"közepes tavaszzöld","salmon":"lazacszín","darkgrey":"sötétszürke","ivory":"elefántcsont","greenyellow":"zöldessárga","mistyrose":"halvány rózsaszín","lightsalmon":"világos lazacszín","silver":"ezüst","dimgrey":"halványszürke","orange":"narancssárga","white":"fehér","navajowhite":"navajo fehér","royalblue":"királykék","deeppink":"sötétrózsaszín","lime":"lime","oldlace":"régi csipke","chartreuse":"chartreuse","darkcyan":"sötét ciánkék","yellow":"sárga","linen":"vászonfehér","olive":"olajzöld","gold":"arany","lawngreen":"fűzöld","lightyellow":"világossárga","tan":"rozsdabarna","darkviolet":"sötét ibolyaszín","lightslategrey":"világos palaszürke","grey":"szürke","darkkhaki":"sötét khakiszín","green":"zöld","deepskyblue":"sötét égszínkék","aqua":"vízszín","sienna":"vörösesbarna","mintcream":"mentaszósz","rosybrown":"barnásrózsaszín","mediumslateblue":"közepes palakék","magenta":"bíbor","lightseagreen":"világos tengerzöld","cyan":"ciánkék","olivedrab":"olajzöld drapp","darkgoldenrod":"sötét aranyvessző","slateblue":"palakék","mediumaquamarine":"közepes akvamarin","lavender":"levendula","mediumseagreen":"közepes tengerzöld","maroon":"gesztenyebarna","darkslategray":"sötét palaszürke","mediumturquoise":"közepes türkizkék","ghostwhite":"szellemfehér","darkblue":"sötétkék","mediumvioletred":"közepes ibolyavörös","brown":"barna","lightgray":"világosszürke","sandybrown":"homokbarna","pink":"rózsaszín","firebrick":"téglavörös","indigo":"indigó","snow":"hó","darkorchid":"sötét orchidea","turquoise":"türkizkék","chocolate":"csokoládé","springgreen":"tavaszzöld","moccasin":"mokkaszín","navy":"tengerészkék","lemonchiffon":"sárga műselyem","teal":"pávakék","floralwhite":"virágfehér","cornflowerblue":"búzavirágkék","paleturquoise":"halvány türkizkék","purple":"lila","gainsboro":"gainsboro","plum":"szilvakék","red":"vörös","blue":"kék","forestgreen":"erdőzöld","darkgreen":"sötétzöld","honeydew":"mézharmat","darkseagreen":"sötét tengerzöld","lightcoral":"világos korall","palevioletred":"halvány ibolyavörös","mediumpurple":"közepes lila","saddlebrown":"nyeregbarna","darkmagenta":"sötétbíbor","thistle":"bogáncs","whitesmoke":"fehér füst","wheat":"búza","violet":"ibolyaszín","lightskyblue":"világos égszínkék","goldenrod":"aranyvessző","mediumblue":"közepes kék","skyblue":"égszínkék","crimson":"karmazsinvörös","darksalmon":"sötét lazacszín","darkred":"sötétvörös","darkslategrey":"sötét palaszürke","peru":"peru","lightgrey":"világosszürke","lightgoldenrodyellow":"világos aranyvessző sárga","blanchedalmond":"hámozott mandula","aliceblue":"Alice kék","bisque":"porcelán","slategray":"palaszürke","palegoldenrod":"halvány aranyvessző","darkorange":"sötét narancssárga","aquamarine":"akvamarin","lightgreen":"világoszöld","burlywood":"nyersfa","dodgerblue":"dodger kék","darkgray":"sötétszürke","lightcyan":"világos ciánkék","powderblue":"púderkék","blueviolet":"ibolyakék","orchid":"orchidea","dimgray":"halványszürke","beige":"bézs","fuchsia":"fukszia","lavenderblush":"pirosas levendula","hotpink":"meleg rózsaszín","steelblue":"acélkék","tomato":"paradicsom","lightpink":"világos rózsaszín","limegreen":"limezöld","indianred":"indiánvörös","papayawhip":"papayahab","lightslategray":"világos palaszürke","gray":"szürke","mediumorchid":"közepes orchidea","cornsilk":"kukoricahaj","black":"fekete","seagreen":"tengerzöld","darkslateblue":"sötét palakék","khaki":"khakiszín","lightblue":"világoskék","palegreen":"halványzöld","azure":"azúrkék","peachpuff":"barackszín","darkolivegreen":"sötét olajzöld","yellowgreen":"sárgászöld"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.hu");dijit.nls.loading.hu={"loadingState":"Betöltés...","errorState":"Sajnálom, hiba történt"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.hu");dijit.nls.common.hu={"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.hu");dijit._editor.nls.commands.hu={"removeFormat":"Formázás eltávolítása","copy":"Másolás","paste":"Beillesztés","selectAll":"Összes kijelölése","insertOrderedList":"Számozott lista","insertTable":"Táblázat beszúrása/szerkesztése","print":"Nyomtatás","underline":"Aláhúzott","foreColor":"Előtérszín","htmlToggle":"HTML forrás","formatBlock":"Bekezdés stílusa","newPage":"Új oldal","insertHorizontalRule":"Vízszintes vonalzó","delete":"Törlés","insertUnorderedList":"Felsorolásjeles lista","tableProp":"Táblázat tulajdonságai","insertImage":"Kép beszúrása","superscript":"Felső index","subscript":"Alsó index","createLink":"Hivatkozás létrehozása","undo":"Visszavonás","fullScreen":"Váltás teljes képernyőre","italic":"Dőlt","fontName":"Betűtípus","justifyLeft":"Balra igazítás","unlink":"Hivatkozás eltávolítása","toggleTableBorder":"Táblázatszegély ki-/bekapcsolása","viewSource":"HTML forrás megjelenítése","fontSize":"Betűméret","systemShortcut":"A(z) \"${0}\" művelet a böngészőben csak billentyűparancs használatával érhető el. Használja a következőt: ${1}.","indent":"Behúzás","redo":"Újra","strikethrough":"Áthúzott","justifyFull":"Sorkizárás","justifyCenter":"Középre igazítás","hiliteColor":"Háttérszín","deleteTable":"Táblázat törlése","outdent":"Negatív behúzás","cut":"Kivágás","plainFormatBlock":"Bekezdés stílusa","toggleDir":"Irány váltókapcsoló","bold":"Félkövér","tabIndent":"Tab behúzás","justifyRight":"Jobbra igazítás","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.hu");dijit.form.nls.validate.hu={"rangeMessage":"Az érték kívül van a megengedett tartományon.","invalidMessage":"A megadott érték érvénytelen.","missingMessage":"Meg kell adni egy értéket."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.hu");dijit.form.nls.ComboBox.hu={"previousMessage":"Előző menüpontok","nextMessage":"További menüpontok"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.hu");dijit._editor.nls.FontChoice.hu={"1":"xx-kicsi","2":"x-kicsi","formatBlock":"Formátum","3":"kicsi","4":"közepes","5":"nagy","6":"x-nagy","7":"xx-nagy","fantasy":"fantázia","serif":"talpas","p":"Bekezdés","pre":"Előformázott","sans-serif":"talpatlan","fontName":"Betűtípus","h1":"Címsor","h2":"Alcím","h3":"Al-alcím","monospace":"rögzített szélességű","fontSize":"Méret","cursive":"kurzív","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.hu");dijit._editor.nls.LinkDialog.hu={"text":"Leírás:","insertImageTitle":"Kép tulajdonságai","set":"Beállítás","newWindow":"Új ablak","topWindow":"Legfelső szintű ablak","target":"Cél:","createLinkTitle":"Hivatkozás tulajdonságai","parentWindow":"Szülő ablak","currentWindow":"Aktuális ablak","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"group":" ","percentSign":"%","exponential":"E","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.hu");dojo.cldr.nls.currency.hu={"HKD_displayName":"Hongkongi dollár","CHF_displayName":"Svájci frank","JPY_symbol":"¥","CAD_displayName":"Kanadai dollár","CNY_displayName":"Kínai jüan renminbi","USD_symbol":"$","AUD_displayName":"Ausztrál dollár","JPY_displayName":"Japán jen","USD_displayName":"USA dollár","GBP_displayName":"Brit font sterling","EUR_displayName":"Euro","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.hu");dojo.cldr.nls.gregorian.hu={"field-dayperiod":"napszak","dayPeriods-format-wide-pm":"du.","field-minute":"perc","eraNames":["időszámításunk előtt","időszámításunk szerint"],"field-day-relative+-1":"tegnap","field-weekday":"hét napja","field-day-relative+-2":"tegnapelőtt","dateFormatItem-MMdd":"MM.dd.","field-day-relative+-3":"három nappal ezelőtt","days-standAlone-wide":["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["J","F","M","Á","M","J","J","A","Sz","O","N","D"],"field-era":"éra","field-hour":"óra","dayPeriods-format-wide-am":"de.","quarters-standAlone-abbr":["N1","N2","N3","N4"],"timeFormat-full":"H:mm:ss zzzz","months-standAlone-abbr":["jan.","febr.","márc.","ápr.","máj.","jún.","júl.","aug.","szept.","okt.","nov.","dec."],"field-day-relative+0":"ma","field-day-relative+1":"holnap","days-standAlone-narrow":["V","H","K","Sz","Cs","P","Sz"],"eraAbbr":["i. e.","i. sz."],"field-day-relative+2":"holnapután","field-day-relative+3":"három nap múlva","dateFormatItem-yyyyMM":"yyyy.MM","dateFormatItem-yyyyMMMM":"y. MMMM","dateFormat-long":"y. MMMM d.","timeFormat-medium":"H:mm:ss","field-zone":"zóna","dateFormatItem-Hm":"H:mm","dateFormat-medium":"yyyy.MM.dd.","dateFormatItem-Hms":"H:mm:ss","quarters-standAlone-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"field-year":"év","field-week":"hét","months-standAlone-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"dateFormatItem-MMMd":"MMM d.","dateFormatItem-yyQ":"yy/Q","timeFormat-long":"H:mm:ss z","months-format-abbr":["jan.","febr.","márc.","ápr.","máj.","jún.","júl.","aug.","szept.","okt.","nov.","dec."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"hónap","dateFormatItem-MMMMd":"MMMM d.","quarters-format-abbr":["N1","N2","N3","N4"],"days-format-abbr":["V","H","K","Sze","Cs","P","Szo"],"dateFormatItem-mmss":"mm:ss","dateFormatItem-M":"L","days-format-narrow":["V","H","K","Sz","Cs","P","Sz"],"field-second":"másodperc","field-day":"nap","dateFormatItem-MEd":"M. d., E","months-format-narrow":["J","F","M","Á","M","J","J","A","Sz","O","N","D"],"days-standAlone-abbr":["V","H","K","Sze","Cs","P","Szo"],"dateFormat-short":"yyyy.MM.dd.","dateFormat-full":"y. MMMM d., EEEE","dateFormatItem-Md":"M. d.","months-format-wide":["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],"dateFormatItem-d":"d","quarters-format-wide":["I. negyedév","II. negyedév","III. negyedév","IV. negyedév"],"days-format-wide":["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],"eraNarrow":["i. e.","i. sz."],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/ro/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/ro/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ro/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Încărcare...","errorState":"Ne pare rău, a apărut o eroare "})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ro/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/ro/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ro/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Anulare","buttonSave":"Salvare","itemClose":"Închidere"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/zh/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/zh/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/zh/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/zh/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/zh/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/zh/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"正在加载...","errorState":"对不起，发生了错误"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ca/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/ca/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ca/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ca/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/ca/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ca/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ru/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/ru/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ru/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/ru/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/ru/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/ru/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/dijit-all_ko-kr.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ko-kr.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ko-kr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ko-kr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko_kr");dojo.nls.colors.ko_kr={"lightsteelblue":"라이트 스틸 블루(light steel blue)","orangered":"오렌지 레드(orange red)","midnightblue":"미드나잇 블루(midnight blue)","cadetblue":"카뎃 블루(cadet blue)","seashell":"씨쉘(seashell)","slategrey":"슬레이트 그레이(slate gray)","coral":"코랄(coral)","darkturquoise":"다크 터콰즈(dark turquoise)","antiquewhite":"앤틱 화이트(antique white)","mediumspringgreen":"미디엄 스프링 그린(medium spring green)","salmon":"샐몬(salmon)","darkgrey":"다크 그레이(dark gray)","ivory":"아이보리(ivory)","greenyellow":"그린 옐로우(green-yellow)","mistyrose":"미스티 로즈(misty rose)","lightsalmon":"라이트 샐몬(light salmon)","silver":"실버(silver)","dimgrey":"딤 그레이(dim gray)","orange":"오렌지(orange)","white":"화이트(white)","navajowhite":"나바호 화이트(navajo white)","royalblue":"로얄 블루(royal blue)","deeppink":"딥 핑크(deep pink)","lime":"라임(lime)","oldlace":"올드 레이스(old lace)","chartreuse":"샤르트뢰즈(chartreuse)","darkcyan":"다크 시안(dark cyan)","yellow":"옐로우(yellow)","linen":"리넨(linen)","olive":"올리브(olive)","gold":"골드(gold)","lawngreen":"론 그린(lawn green)","lightyellow":"라이트 옐로우(light yellow)","tan":"탠(tan)","darkviolet":"다크 바이올렛(dark violet)","lightslategrey":"라이트 슬레이트 그레이(light slate gray)","grey":"그레이(gray)","darkkhaki":"다크 카키(dark khaki)","green":"그린(green)","deepskyblue":"딥 스카이 블루(deep sky blue)","aqua":"아쿠아(aqua)","sienna":"시에나(sienna)","mintcream":"민트 크림(mint cream)","rosybrown":"로지 브라운(rosy brown)","mediumslateblue":"미디엄 슬레이트 블루(medium slate blue)","magenta":"마젠타(magenta)","lightseagreen":"라이트 씨 그린(light sea green)","cyan":"시안(cyan)","olivedrab":"올리브 드랩(olive drab)","darkgoldenrod":"다크 골든로드(dark goldenrod)","slateblue":"슬레이트 블루(slate blue)","mediumaquamarine":"미디엄 아쿠아마린(medium aquamarine)","lavender":"라벤더(lavender)","mediumseagreen":"미디엄 씨 그린(medium sea green)","maroon":"마룬(maroon)","darkslategray":"다크 슬레이트 그레이(dark slate gray)","mediumturquoise":"미디엄 터콰즈(medium turquoise)","ghostwhite":"고스트 화이트(ghost white)","darkblue":"다크 블루(dark blue)","mediumvioletred":"미디엄 바이올렛 레드(medium violet-red)","brown":"브라운(brown)","lightgray":"라이트 그레이(light gray)","sandybrown":"샌디 브라운(sandy brown)","pink":"핑크(pink)","firebrick":"파이어 브릭(fire brick)","indigo":"인디고(indigo)","snow":"스노우(snow)","darkorchid":"다크 오키드(dark orchid)","turquoise":"터콰즈(turquoise)","chocolate":"초콜렛(chocolate)","springgreen":"스프링 그린(spring green)","moccasin":"모카신(moccasin)","navy":"네이비(navy)","lemonchiffon":"레몬 쉬폰(lemon chiffon)","teal":"틸(teal)","floralwhite":"플로랄 화이트(floral white)","cornflowerblue":"콘플라워 블루(cornflower blue)","paleturquoise":"페일 터콰즈(pale turquoise)","purple":"퍼플(purple)","gainsboro":"게인스브로(gainsboro)","plum":"플럼(plum)","red":"레드(red)","blue":"블루(blue)","forestgreen":"포레스트 그린(forest green)","darkgreen":"다크 그린(dark green)","honeydew":"허니듀(honeydew)","darkseagreen":"다크 씨 그린(dark sea green)","lightcoral":"라이트 코랄(light coral)","palevioletred":"페일 바이올렛 레드(pale violet-red)","mediumpurple":"미디엄 퍼플(medium purple)","saddlebrown":"새들 브라운(saddle brown)","darkmagenta":"다크 마젠타(dark magenta)","thistle":"시슬(thistle)","whitesmoke":"화이트 스모크(white smoke)","wheat":"휘트(wheat)","violet":"바이올렛(violet)","lightskyblue":"라이트 스카이 블루(light sky blue)","goldenrod":"골든로드(goldenrod)","mediumblue":"미디엄 블루(medium blue)","skyblue":"스카이 블루(sky blue)","crimson":"크림슨(crimson)","darksalmon":"다크 샐몬(dark salmon)","darkred":"다크 레드(dark red)","darkslategrey":"다크 슬레이트 그레이(dark slate gray)","peru":"페루(peru)","lightgrey":"라이트 그레이(light gray)","lightgoldenrodyellow":"라이트 골든로드 옐로우(light goldenrod yellow)","blanchedalmond":"블랜치 아몬드(blanched almond)","aliceblue":"앨리스 블루(alice blue)","bisque":"비스크(bisque)","slategray":"슬레이트 그레이(slate gray)","palegoldenrod":"페일 골든로드(pale goldenrod)","darkorange":"다크 오렌지(dark orange)","aquamarine":"아쿠아마린(aquamarine)","lightgreen":"라이트 그린(light green)","burlywood":"벌리우드(burlywood)","dodgerblue":"다저 블루(dodger blue)","darkgray":"다크 그레이(dark gray)","lightcyan":"라이트 시안(light cyan)","powderblue":"파우더 블루(powder blue)","blueviolet":"블루 바이올렛(blue-violet)","orchid":"오키드(orchid)","dimgray":"딤 그레이(dim gray)","beige":"베이지(beige)","fuchsia":"후크샤(fuchsia)","lavenderblush":"라벤더 블러쉬(lavender blush)","hotpink":"핫 핑크(hot pink)","steelblue":"스틸 블루(steel blue)","tomato":"토마토(tomato)","lightpink":"라이트 핑크(light pink)","limegreen":"라임 그린(lime green)","indianred":"인디안 레드(indian red)","papayawhip":"파파야 휩(papaya whip)","lightslategray":"라이트 슬레이트 그레이(light slate gray)","gray":"그레이(gray)","mediumorchid":"미디엄 오키드(medium orchid)","cornsilk":"콘실크(cornsilk)","black":"블랙(black)","seagreen":"씨 그린(sea green)","darkslateblue":"다크 슬레이트 블루(dark slate blue)","khaki":"카키(khaki)","lightblue":"라이트 블루(light blue)","palegreen":"페일 그린(pale green)","azure":"애쥬어(azure)","peachpuff":"피치 퍼프(peach puff)","darkolivegreen":"다크 올리브 그린(dark olive green)","yellowgreen":"옐로우 그린(yellow green)"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko_kr");dijit.nls.loading.ko_kr={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko_kr");dijit._editor.nls.commands.ko_kr={"removeFormat":"형식 제거","copy":"복사","paste":"붙여넣기","selectAll":"모두 선택","insertOrderedList":"번호 목록","insertTable":"테이블 삽입/편집","print":"인쇄","underline":"밑줄","foreColor":"전경색","htmlToggle":"HTML 소스","formatBlock":"단락 스타일","newPage":"새 페이지","insertHorizontalRule":"수평 자","delete":"삭제","insertUnorderedList":"글머리표 목록","tableProp":"테이블 특성","insertImage":"이미지 삽입","superscript":"위첨자","subscript":"아래첨자","createLink":"링크 작성","undo":"실행 취소","fullScreen":"토글 전체 화면","italic":"기울임체","fontName":"글꼴 이름","justifyLeft":"왼쪽 맞춤","unlink":"링크 제거","toggleTableBorder":"토글 테이블 테두리","viewSource":"HTML 소스 보기","fontSize":"글꼴 크기","systemShortcut":"\"${0}\" 조치는 브라우저에서 키보드 단축키를 이용해서만 사용할 수 있습니다. ${1}을(를) 사용하십시오.","indent":"들여쓰기","redo":"다시 실행","strikethrough":"취소선","justifyFull":"양쪽 맞춤","justifyCenter":"가운데 맞춤","hiliteColor":"배경색","deleteTable":"테이블 삭제","outdent":"내어쓰기","cut":"잘라내기","plainFormatBlock":"단락 스타일","toggleDir":"토글 방향","bold":"굵은체","tabIndent":"탭 들여쓰기","justifyRight":"오른쪽 맞춤","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko_kr");dijit.form.nls.validate.ko_kr={"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko_kr");dijit.form.nls.ComboBox.ko_kr={"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ko_kr");dijit._editor.nls.FontChoice.ko_kr={"1":"가장 작게","2":"조금 작게","formatBlock":"서식","3":"작게","4":"중간","5":"크게","6":"조금 크게","7":"가장 크게","fantasy":"fantasy","serif":"serif","p":"단락","pre":"서식이 지정됨","sans-serif":"sans-serif","fontName":"글꼴","h1":"제목","h2":"부제목","h3":"하위 부제목","monospace":"monospace","fontSize":"크기","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ko_kr");dijit._editor.nls.LinkDialog.ko_kr={"text":"설명:","insertImageTitle":"이미지 특성","set":"설정","newWindow":"새 창","topWindow":"최상위 창","target":"대상:","createLinkTitle":"링크 특성","parentWindow":"상위 창","currentWindow":"현재 창","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko_kr");dojo.cldr.nls.currency.ko_kr={"HKD_displayName":"홍콩 달러","CHF_displayName":"스위스 프랑","CAD_displayName":"캐나다 달러","CNY_displayName":"중국 위안 인민폐","AUD_displayName":"호주 달러","JPY_displayName":"일본 엔화","USD_displayName":"미국 달러","GBP_displayName":"영국령 파운드 스털링","EUR_displayName":"유로화","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko_kr");dojo.cldr.nls.gregorian.ko_kr={"months-format-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"field-weekday":"요일","dateFormatItem-yQQQ":"y년 QQQ","dateFormatItem-yMEd":"yyyy. M. d. EEE","dateFormatItem-MMMEd":"MMM d일 (E)","eraNarrow":["기원전","서기"],"dateFormat-long":"y년 M월 d일","months-format-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d일 EEE","dayPeriods-format-wide-pm":"오후","dateFormat-full":"y년 M월 d일 EEEE","dateFormatItem-Md":"M. d.","field-era":"연호","dateFormatItem-yM":"yyyy. M.","months-standAlone-wide":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"timeFormat-short":"a h:mm","quarters-format-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"timeFormat-long":"a h시 m분 s초 z","field-year":"년","dateFormatItem-yMMM":"y년 MMM","dateFormatItem-yQ":"y년 Q분기","field-hour":"시","dateFormatItem-MMdd":"MM. dd","months-format-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyQ":"yy년 Q분기","timeFormat-full":"a h시 m분 s초 zzzz","field-day-relative+0":"오늘","field-day-relative+1":"내일","field-day-relative+2":"모레","field-day-relative+3":"3일후","months-standAlone-abbr":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"quarters-format-abbr":["1분기","2분기","3분기","4분기"],"quarters-standAlone-wide":["제 1/4분기","제 2/4분기","제 3/4분기","제 4/4분기"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"dateFormatItem-yyMMM":"yy년 MMM","timeFormat-medium":"a h:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["1분기","2분기","3분기","4분기"],"eraAbbr":["기원전","서기"],"field-minute":"분","field-dayperiod":"오전/오후","days-standAlone-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"어제","dateFormatItem-h":"a h","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"그저께","field-day-relative+-3":"그끄제","dateFormatItem-MMMd":"MMM d일","dateFormatItem-MEd":"M. d. (E)","dateTimeFormat-full":"{1} {0}","field-day":"일","days-format-wide":["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],"field-zone":"시간대","dateFormatItem-yyyyMM":"yyyy. MM","dateFormatItem-y":"y","months-standAlone-narrow":["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],"dateFormatItem-yyMM":"YY. M.","dateFormatItem-hm":"a h:mm","days-format-abbr":["일","월","화","수","목","금","토"],"dateFormatItem-yMMMd":"y년 MMM d일","eraNames":["서력기원전","서력기원"],"days-format-narrow":["일","월","화","수","목","금","토"],"field-month":"월","days-standAlone-narrow":["일","월","화","수","목","금","토"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"오전","dateFormat-short":"yy. M. d.","field-second":"초","dateFormatItem-yMMMEd":"y년 MMM d일 EEE","dateFormatItem-Ed":"d일 (E)","field-week":"주","dateFormat-medium":"yyyy. M. d.","dateFormatItem-mmss":"mm:ss","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"H시 m분 s초","dateFormatItem-hms":"a h:mm:ss","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","quarters-format-narrow":["1","2","3","4"],"dayPeriods-format-narrow-am":"AM","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM"};
Index: trunk/web/dojo/dijit/nls/dijit-all_ru.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_ru.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_ru.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_ru");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ru");dojo.nls.colors.ru={"lightsteelblue":"светлый стальной","orangered":"оранжево-красный","midnightblue":"полуночно-синий","cadetblue":"серо-синий","seashell":"морская раковина","slategrey":"грифельно-серый","coral":"коралловый","darkturquoise":"темный бирюзовый","antiquewhite":"белый антик","mediumspringgreen":"нейтральный весенне-зеленый","salmon":"лососевый","darkgrey":"темно-серый","ivory":"слоновой кости","greenyellow":"зелено-желтый","mistyrose":"блекло-розовый","lightsalmon":"светло-лососевый","silver":"серебристый","dimgrey":"тускло-серый","orange":"оранжевый","white":"белый","navajowhite":"белый навахо","royalblue":"королевский голубой","deeppink":"темно-розовый","lime":"лайм","oldlace":"матово-белый","chartreuse":"желто-салатный","darkcyan":"темный циан","yellow":"желтый","linen":"хлопковый","olive":"оливковый","gold":"золотой","lawngreen":"зеленая лужайка","lightyellow":"светло-желтый","tan":"рыжевато-коричневый","darkviolet":"темно-фиолетовый","lightslategrey":"светлый грифельно-серый","grey":"серый","darkkhaki":"темный хаки","green":"зеленый","deepskyblue":"темный небесно-голубой","aqua":"зеленовато-голубой","sienna":"охра","mintcream":"мятно-кремовый","rosybrown":"розово-коричневый","mediumslateblue":"нейтральный грифельно-синий","magenta":"пурпурный","lightseagreen":"светлый морской волны","cyan":"циан","olivedrab":"желтовато-серый","darkgoldenrod":"темно-золотистый","slateblue":"грифельно-синий","mediumaquamarine":"нейтральный аквамарин","lavender":"бледно-лиловый","mediumseagreen":"нейтральный морской волны","maroon":"темно-бордовый","darkslategray":"темный грифельно-серый","mediumturquoise":"нейтральный бирюзовый","ghostwhite":"призрачно-белый","darkblue":"темно-синий","mediumvioletred":"нейтральный фиолетово-красный","brown":"коричневый","lightgray":"светло-серый","sandybrown":"коричнево-песчаный","pink":"розовый","firebrick":"кирпичный","indigo":"индиго","snow":"белоснежный","darkorchid":"темный орсель","turquoise":"бирюзовый","chocolate":"шоколадный","springgreen":"весенний зеленый","moccasin":"мокасин","navy":"темно-синий","lemonchiffon":"бледно-лимонный","teal":"чирок","floralwhite":"цветочно-белый","cornflowerblue":"фиолетово-синий","paleturquoise":"бледно-бирюзовый","purple":"фиолетовый","gainsboro":"бледно-серый","plum":"сливовый","red":"красный","blue":"синий","forestgreen":"зеленый лесной","darkgreen":"темно-зеленый","honeydew":"медовый","darkseagreen":"темный морской волны","lightcoral":"светло-коралловый","palevioletred":"бледный фиолетово-красный","mediumpurple":"нейтральный фиолетовый","saddlebrown":"кожано-коричневый","darkmagenta":"темно-пурпурный","thistle":"чертополох","whitesmoke":"дымчато-белый","wheat":"пшеница","violet":"фиолетовый","lightskyblue":"светлый небесно-голубой","goldenrod":"золотистый","mediumblue":"нейтральный синий","skyblue":"небесно-голубой","crimson":"малиновый","darksalmon":"темно-лососевый","darkred":"темно-красный","darkslategrey":"темный грифельно-серый","peru":"перу","lightgrey":"светло-серый","lightgoldenrodyellow":"светло-золотистый","blanchedalmond":"светло-миндальный","aliceblue":"серо-голубой","bisque":"бисквитный","slategray":"грифельно-серый","palegoldenrod":"бледно-золотистый","darkorange":"темно-оранжевый","aquamarine":"аквамарин","lightgreen":"светло-зеленый","burlywood":"светло-коричневый","dodgerblue":"бледно-синий","darkgray":"темно-серый","lightcyan":"светлый циан","powderblue":"пороховой","blueviolet":"сине-фиолетовый","orchid":"орсель","dimgray":"тускло-серый","beige":"бежевый","fuchsia":"фуксин","lavenderblush":"розовато-лиловый","hotpink":"красно-розовый","steelblue":"стальной","tomato":"помидор","lightpink":"светло-розовый","limegreen":"зеленый лайм","indianred":"индийский красный","papayawhip":"черенок папайи","lightslategray":"светлый грифельно-серый","gray":"серый","mediumorchid":"нейтральный орсель","cornsilk":"шелковый оттенок","black":"черный","seagreen":"морской волны","darkslateblue":"темный грифельно-синий","khaki":"хаки","lightblue":"светло-синий","palegreen":"бледно-зеленый","azure":"лазурный","peachpuff":"персиковый","darkolivegreen":"темно-оливковый","yellowgreen":"желто-зеленый"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ru");dijit.nls.loading.ru={"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ru");dijit.nls.common.ru={"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ru");dijit._editor.nls.commands.ru={"removeFormat":"Удалить формат","copy":"Копировать","paste":"Вставить","selectAll":"Выбрать все","insertOrderedList":"Нумерованный список","insertTable":"Вставить/изменить таблицу","print":"Печать","underline":"Подчеркивание","foreColor":"Цвет текста","htmlToggle":"Код HTML","formatBlock":"Стиль абзаца","newPage":"Создать страницу","insertHorizontalRule":"Горизонтальная линейка","delete":"Удалить","insertUnorderedList":"Список с маркерами","tableProp":"Свойства таблицы","insertImage":"Вставить изображение","superscript":"Верхний индекс","subscript":"Нижний индекс","createLink":"Создать ссылку","undo":"Отменить","fullScreen":"Переключить полноэкранный режим","italic":"Курсив","fontName":"Название шрифта","justifyLeft":"По левому краю","unlink":"Удалить ссылку","toggleTableBorder":"Переключить рамку таблицы","viewSource":"Показать исходный код HTML","fontSize":"Размер шрифта","systemShortcut":"Действие \"${0}\" можно выполнить в браузере только путем нажатия клавиш ${1}.","indent":"Отступ","redo":"Повторить","strikethrough":"Перечеркивание","justifyFull":"По ширине","justifyCenter":"По центру","hiliteColor":"Цвет фона","deleteTable":"Удалить таблицу","outdent":"Втяжка","cut":"Вырезать","plainFormatBlock":"Стиль абзаца","toggleDir":"Изменить направление","bold":"Полужирный","tabIndent":"Табуляция","justifyRight":"По правому краю","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ru");dijit.form.nls.validate.ru={"rangeMessage":"Это значение вне диапазона.","invalidMessage":"Указано недопустимое значение.","missingMessage":"Это обязательное значение."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ru");dijit.form.nls.ComboBox.ru={"previousMessage":"Предыдущие варианты","nextMessage":"Следующие варианты"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.ru");dijit._editor.nls.FontChoice.ru={"1":"самый маленький","2":"очень маленький","formatBlock":"Формат","3":"маленький","4":"средний","5":"большой","6":"очень большой","7":"самый большой","fantasy":"артистический","serif":"с засечками","p":"Абзац","pre":"Заранее отформатированный","sans-serif":"без засечек","fontName":"Шрифт","h1":"Заголовок","h2":"Подзаголовок","h3":"Вложенный подзаголовок","monospace":"непропорциональный","fontSize":"Размер","cursive":"курсив","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.ru");dijit._editor.nls.LinkDialog.ru={"text":"Описание:","insertImageTitle":"Свойства изображения","set":"Задать","newWindow":"Новое окно","topWindow":"Окно верхнего уровня","target":"Целевой объект:","createLinkTitle":"Свойства ссылки","parentWindow":"Родительское окно","currentWindow":"Текущее окно","url":"URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ru");dojo.cldr.nls.currency.ru={"HKD_displayName":"Гонконгский доллар","CHF_displayName":"Швейцарский франк","CAD_displayName":"Канадский доллар","CNY_displayName":"Юань Ренминби","USD_symbol":"$","AUD_displayName":"Австралийский доллар","JPY_displayName":"Японская иена","USD_displayName":"Доллар США","GBP_displayName":"Английский фунт стерлингов","EUR_displayName":"Евро","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ru");dojo.cldr.nls.gregorian.ru={"dateFormatItem-yM":"M.y","field-dayperiod":"AM/PM","field-minute":"Минута","eraNames":["до н.э.","н.э."],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"Вчера","field-weekday":"День недели","dateFormatItem-yQQQ":"y QQQ","field-day-relative+-2":"Позавчера","dateFormatItem-MMdd":"dd.MM","days-standAlone-wide":["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"field-era":"Эра","field-hour":"Час","quarters-standAlone-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"dateFormatItem-yyMMMEEEd":"EEE, d MMM yy","dateFormatItem-y":"y","timeFormat-full":"H:mm:ss zzzz","dateFormatItem-yyyy":"y","months-standAlone-abbr":["янв.","февр.","март","апр.","май","июнь","июль","авг.","сент.","окт.","нояб.","дек."],"dateFormatItem-Ed":"E d","dateFormatItem-yMMM":"LLL y","field-day-relative+0":"Сегодня","dateFormatItem-yyyyLLLL":"LLLL y","field-day-relative+1":"Завтра","days-standAlone-narrow":["В","П","В","С","Ч","П","С"],"eraAbbr":["до н.э.","н.э."],"field-day-relative+2":"Послезавтра","dateFormatItem-yyyyMM":"MM.yyyy","dateFormatItem-yyyyMMMM":"LLLL y","dateFormat-long":"d MMMM y 'г'.","timeFormat-medium":"H:mm:ss","field-zone":"Часовой пояс","dateFormatItem-Hm":"H:mm","dateFormat-medium":"dd.MM.yyyy","dateFormatItem-yyMM":"MM.yy","dateFormatItem-Hms":"H:mm:ss","dateFormatItem-yyMMM":"LLL yy","quarters-standAlone-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"dateFormatItem-ms":"mm:ss","dateFormatItem-yyyyQQQQ":"QQQQ y 'г'.","field-year":"Год","months-standAlone-wide":["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],"field-week":"Неделя","dateFormatItem-MMMd":"d MMM","dateFormatItem-yyQ":"Q yy","timeFormat-long":"H:mm:ss z","months-format-abbr":["янв.","февр.","марта","апр.","мая","июня","июля","авг.","сент.","окт.","нояб.","дек."],"timeFormat-short":"H:mm","dateFormatItem-H":"H","field-month":"Месяц","quarters-format-abbr":["1-й кв.","2-й кв.","3-й кв.","4-й кв."],"days-format-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormatItem-M":"L","days-format-narrow":["В","П","В","С","Ч","П","С"],"field-second":"Секунда","field-day":"День","dateFormatItem-MEd":"E, d.M","months-format-narrow":["Я","Ф","М","А","М","И","И","А","С","О","Н","Д"],"days-standAlone-abbr":["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],"dateFormat-short":"dd.MM.yy","dateFormatItem-yMMMEd":"E, d MMM y","dateFormat-full":"EEEE, d MMMM y 'г'.","dateFormatItem-Md":"d.M","dateFormatItem-yMEd":"EEE, d.M.y","months-format-wide":["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],"dateFormatItem-d":"d","quarters-format-wide":["1-й квартал","2-й квартал","3-й квартал","4-й квартал"],"days-format-wide":["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],"eraNarrow":["до н.э.","н.э."],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/dijit-all_he-il.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_he-il.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_he-il.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_he-il");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he_il");dojo.nls.colors.he_il={"lightsteelblue":"כחול פלדה בהיר","orangered":"כתום אדום","midnightblue":"כחול כהה","cadetblue":"כחול ים","seashell":"צדף","slategrey":"אפור צפחה","coral":"אלמוג","darkturquoise":"טורקיז כהה","antiquewhite":"לבן עתיק","mediumspringgreen":"ירוק אביב בינוני","salmon":"סלמון","darkgrey":"אפור כהה","ivory":"שנהב","greenyellow":"ירוק-צהוב","mistyrose":"ורוד מעורפל","lightsalmon":"סלמון בהיר","silver":"כסף","dimgrey":"אפור עמום","orange":"כתום","white":"לבן","navajowhite":"לבן נוואחו","royalblue":"כחול מלכותי","deeppink":"ורוד עמוק","lime":"לימון","oldlace":"תחרה עתיקה","chartreuse":"ירוק-צהוב","darkcyan":"טורקיז כהה","yellow":"צהוב","linen":"פשתן","olive":"זית","gold":"זהב","lawngreen":"ירוק דשא","lightyellow":"צהוב בהיר","tan":"חום אדמדם","darkviolet":"סגול כהה","lightslategrey":"אפור צפחה בהיר","grey":"אפור","darkkhaki":"חאקי כהה","green":"ירוק","deepskyblue":"כחול שמיים עמוק","aqua":"אקווה","sienna":"סיינה","mintcream":"קרם מנטה","rosybrown":"חום ורדרד","mediumslateblue":"כחול צפחה בינוני","magenta":"בורדו","lightseagreen":"ירוק ים בהיר","cyan":"טורקיז","olivedrab":"זית עמום","darkgoldenrod":"זהוב כהה","slateblue":"כחול צפחה","mediumaquamarine":"כחול בינוני","lavender":"לבנדר","mediumseagreen":"ירוק ים בינוני","maroon":"חום אדמדם","darkslategray":"אפור צפחה כהה","mediumturquoise":"טורקיז בינוני","ghostwhite":"לבן רפאים","darkblue":"כחול כהה","mediumvioletred":"סגול-אדום בינוני","brown":"חום","lightgray":"אפור בהיר","sandybrown":"חום חולי","pink":"ורוד","firebrick":"לבנה שרופה","indigo":"אינדיגו","snow":"שלג","darkorchid":"סחלב כהה","turquoise":"טורקיז","chocolate":"שוקולד","springgreen":"ירוק אביב","moccasin":"מוקסין","navy":"כחול כהה","lemonchiffon":"ירוק לימון","teal":"כחול-ירוק כהה","floralwhite":"לבן פרחוני","cornflowerblue":"כחול דרדר","paleturquoise":"טורקיז בהיר","purple":"סגול","gainsboro":"גיינסבורו","plum":"שזיף","red":"אדום","blue":"כחול","forestgreen":"ירוק יער","darkgreen":"ירוק כהה","honeydew":"ירקרק","darkseagreen":"ירוק ים כהה","lightcoral":"אלמוג בהיר","palevioletred":"סגול-אדום בהיר","mediumpurple":"סגול בינוני","saddlebrown":"חום דהוי","darkmagenta":"בורדו כהה","thistle":"דרדר","whitesmoke":"עשן לבן","wheat":"חיוט","violet":"סגול","lightskyblue":"כחול שמיים בהיר","goldenrod":"זהוב","mediumblue":"תכלת בינוני","skyblue":"כחול שמיים","crimson":"ארגמן","darksalmon":"סלמון כהה","darkred":"אדום כהה","darkslategrey":"אפור צפחה כהה","peru":"פרו","lightgrey":"אפור בהיר","lightgoldenrodyellow":"צהוב בהיר","blanchedalmond":"שקד","aliceblue":"כחול פלדה","bisque":"לבן שקד","slategray":"אפור צפחה","palegoldenrod":"זהוב בהיר","darkorange":"כתום כהה","aquamarine":"אקוומארין","lightgreen":"ירוק בהיר","burlywood":"חום דהוי","dodgerblue":"כחול","darkgray":"אפור כהה","lightcyan":"טורקיז בהיר","powderblue":"כחול חיוור","blueviolet":"כחול-סגול","orchid":"סחלב","dimgray":"אפור עמום","beige":"בז'","fuchsia":"ורוד בהיר","lavenderblush":"סומק לבנדר","hotpink":"ורוד לוהט","steelblue":"כחול פלדה","tomato":"עגבניה","lightpink":"ורוד בהיר","limegreen":"ירוק לימוני","indianred":"אדום דהוי","papayawhip":"פפאיה","lightslategray":"אפור צפחה בהיר","gray":"אפור","mediumorchid":"סחלב בינוני","cornsilk":"צהבהב","black":"שחור","seagreen":"ירוק ים","darkslateblue":"כחול צפחה כהה","khaki":"חאקי","lightblue":"תכלת","palegreen":"ירוק בהיר","azure":"תכלת עז","peachpuff":"קציפת אפרסק","darkolivegreen":"ירוק זית כהה","yellowgreen":"ירוק צהוב"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he_il");dijit.nls.loading.he_il={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he_il");dijit.nls.common.he_il={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.he_il");dijit._editor.nls.commands.he_il={"removeFormat":"סילוק עיצוב","copy":"עותק","paste":"הדבקה","selectAll":"בחירת הכל","insertOrderedList":"רשימה ממוספרת","insertTable":"הוספת/עריכת טבלה","print":"הדפסה","underline":"קו תחתי","foreColor":"צבע חזית","htmlToggle":"מקור HTML","formatBlock":"סגנון פיסקה","newPage":"דף חדש ","insertHorizontalRule":"קו אופקי","delete":"מחיקה","appleKey":"⌘${0}‎","insertUnorderedList":"רשימה עם תבליטים","tableProp":"תכונת טבלה","insertImage":"הוספת תמונה","superscript":"כתב עילי","subscript":"כתב תחתי","createLink":"יצירת קישור","undo":"ביטול פעולה","fullScreen":"מיתוג מסך מלא ","italic":"נטוי","fontName":"שם גופן","justifyLeft":"יישור לשמאל","unlink":"סילוק הקישור","toggleTableBorder":"מיתוג גבול טבלה","viewSource":"הצגת מקור HTML ","ctrlKey":"ctrl+${0}‎","fontSize":"גופן יחסי","systemShortcut":"הפעולה \"${0}\" זמינה בדפדפן רק באמצעות קיצור דרך במקלדת. השתמשו בקיצור ${1}.","indent":"הגדלת כניסה","redo":"שחזור פעולה","strikethrough":"קו חוצה","justifyFull":"יישור דו-צדדי","justifyCenter":"יישור למרכז","hiliteColor":"צבע רקע","deleteTable":"מחיקת טבלה","outdent":"הקטנת כניסה","cut":"גזירה","plainFormatBlock":"סגנון פיסקה","toggleDir":"מיתוג כיוון","bold":"מודגש","tabIndent":"כניסת טאב","justifyRight":"יישור לימין"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he_il");dijit.form.nls.validate.he_il={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he_il");dijit.form.nls.ComboBox.he_il={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.he_il");dijit._editor.nls.FontChoice.he_il={"1":"קטן ביות","2":"קטן מאוד","formatBlock":"עיצוב","3":"קטן","4":"בינוני","5":"גדול","6":"גדול מאוד","7":"גדול ביותר","fantasy":"fantasy","serif":"serif","p":"פיסקה","pre":"מעוצב מראש","sans-serif":"sans-serif","fontName":"גופן","h1":"כותרת","h2":"תת-כותרת","h3":"תת-תת-כותרת","monospace":"monospace","fontSize":"גודל","cursive":"cursive","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.he_il");dijit._editor.nls.LinkDialog.he_il={"text":"תיאור:","insertImageTitle":"תכונות תמונה","set":"הגדרה","newWindow":"חלון חדש","topWindow":"חלון עליון ","target":"יעד:","createLinkTitle":"תכונות קישור","parentWindow":"חלון אב","currentWindow":"חלון נוכחי ","url":"URL:‏"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he_il");dojo.cldr.nls.number.he_il={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.he_il");dojo.cldr.nls.currency.he_il={"HKD_displayName":"דולר הונג קונגי","CHF_displayName":"פרנק שוויצרי","CAD_displayName":"דולר קנדי","CNY_displayName":"יואן רנמינבי סיני","AUD_displayName":"דולר אוסטרלי","JPY_displayName":"ין יפני","USD_displayName":"דולר אמריקאי","GBP_displayName":"לירה שטרלינג","EUR_displayName":"אירו","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.he_il");dojo.cldr.nls.gregorian.he_il={"field-weekday":"יום בשבוע","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d.M.yyyy","dateFormatItem-MMMEd":"E, d בMMM","eraNarrow":["לפנה״ס","לסה״נ"],"dateFormat-long":"d בMMMM y","months-format-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"dateFormatItem-EEEd":"EEE ה-d","dayPeriods-format-wide-pm":"אחה״צ","dateFormat-full":"EEEE, d בMMMM y","dateFormatItem-Md":"d/M","field-era":"תקופה","dateFormatItem-yM":"M.yyyy","months-standAlone-wide":["ינואר","פברואר","מרס","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],"timeFormat-short":"HH:mm","quarters-format-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"timeFormat-long":"HH:mm:ss z","field-year":"שנה","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"yyyy Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"שעה","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["ינו","פבר","מרס","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"HH:mm:ss zzzz","field-day-relative+0":"היום","field-day-relative+1":"מחר","field-day-relative+2":"מחרתיים","dateFormatItem-H":"HH","field-day-relative+3":"בעוד שלושה ימים","months-standAlone-abbr":["ינו׳","פבר׳","מרס","אפר׳","מאי","יונ׳","יול׳","אוג׳","ספט׳","אוק׳","נוב׳","דצמ׳"],"quarters-format-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"quarters-standAlone-wide":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"dateFormatItem-M":"L","days-standAlone-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"dateFormatItem-MMMMd":"d בMMMM","dateFormatItem-yyMMM":"MMM yyyy","timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["רבעון 1","רבעון 2","רבעון 3","רבעון 4"],"eraAbbr":["לפנה״ס","לסה״נ"],"field-minute":"דקה","field-dayperiod":"לפה״צ/אחה״צ","days-standAlone-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"אתמול","field-day-relative+-2":"שלשום","field-day-relative+-3":"לפני שלושה ימים","dateFormatItem-MMMd":"d בMMM","dateFormatItem-MEd":"E, M-d","dateFormatItem-yMMMM":"MMMM y","field-day":"יום","days-format-wide":["יום ראשון","יום שני","יום שלישי","יום רביעי","יום חמישי","יום שישי","יום שבת"],"field-zone":"אזור","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","dateFormatItem-yyMM":"MM/yy","dateFormatItem-hm":"h:mm a","days-format-abbr":["יום א׳","יום ב׳","יום ג׳","יום ד׳","יום ה׳","יום ו׳","שבת"],"eraNames":["לפני הספירה","לספירה"],"days-format-narrow":["א","ב","ג","ד","ה","ו","ש"],"field-month":"חודש","days-standAlone-narrow":["א","ב","ג","ד","ה","ו","ש"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":"לפנה״צ","dateFormatItem-MMMMEd":"E, d בMMMM","dateFormat-short":"dd/MM/yy","field-second":"שנייה","dateFormatItem-yMMMEd":"EEE, d בMMM y","dateFormatItem-Ed":"E ה-d","field-week":"שבוע","dateFormat-medium":"d בMMM yyyy","dateFormatItem-mmss":"mm:ss","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yyyy":"y","months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}"};
Index: trunk/web/dojo/dijit/nls/dijit-all_el.js
===================================================================
--- trunk/web/dojo/dijit/nls/dijit-all_el.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/dijit-all_el.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dijit.nls.dijit-all_el");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.el");dojo.nls.colors.el={"lightsteelblue":"ανοιχτό μπλε ατσαλιού","orangered":"πορτοκαλοκόκκινο","midnightblue":"πολύ σκούρο μπλε","cadetblue":"μπλε του στρατού","seashell":"κοχύλι","slategrey":"μεταλλικό γκρι","coral":"κοραλί","darkturquoise":"σκούρο τυρκουάζ","antiquewhite":"ξεθωριασμένο λευκό","mediumspringgreen":"μεσαίο πράσινο της άνοιξης","salmon":"σομόν","darkgrey":"σκούρο γκρι","ivory":"ιβουάρ","greenyellow":"πρασινοκίτρινο","mistyrose":"τριανταφυλλί","lightsalmon":"ανοιχτό σομόν","silver":"ασημί","dimgrey":"αχνό γκρι","orange":"πορτοκαλί","white":"λευκό","navajowhite":"άσπρο Ναβάχο","royalblue":"έντονο μπλε","deeppink":"βαθύ ροζ","lime":"λαχανί","oldlace":"εκρού","chartreuse":"φωτεινό κιτρινοπράσινο","darkcyan":"σκούρο κυανό","yellow":"κίτρινο","linen":"σπαγγί","olive":"πράσινο λαδί","gold":"χρυσαφί","lawngreen":"σκούρο πράσινο","lightyellow":"ανοιχτό κίτρινο","tan":"ώχρα","darkviolet":"σκούρο βιολετί","lightslategrey":"ανοιχτό μεταλλικό γκρι","grey":"γκρι","darkkhaki":"σκούρο χακί","green":"πράσινο","deepskyblue":"βαθύ μπλε το ουρανού","aqua":"γαλάζιο","sienna":"καφεκίτρινο","mintcream":"βεραμάν","rosybrown":"καστανό","mediumslateblue":"μεσαίο μεταλλικό μπλε","magenta":"ματζέντα","lightseagreen":"ανοιχτό πράσινο της θάλασσας","cyan":"κυανό","olivedrab":"λαδί","darkgoldenrod":"σκούρο χρυσοκίτρινο","slateblue":"μεταλλικό μπλε","mediumaquamarine":"μεσαίο γαλαζοπράσινο","lavender":"λίλα","mediumseagreen":"μεσαίο πράσινο της θάλασσας","maroon":"βυσσινί","darkslategray":"σκούρο μεταλλικό γκρι","mediumturquoise":"μεσαίο τυρκουάζ","ghostwhite":"άσπρο","darkblue":"σκούρο μπλε","mediumvioletred":"μεσαίο κόκκινο βιολετί","brown":"καφέ","lightgray":"ανοιχτό γκρι","sandybrown":"μπεζ της άμμου","pink":"ροζ","firebrick":"κεραμιδί","indigo":"λουλακί","snow":"χιονί","darkorchid":"σκούρα ορχιδέα","turquoise":"τυρκουάζ","chocolate":"σοκολατί","springgreen":"πράσινο της άνοιξης","moccasin":"μόκα","navy":"μπλε του ναυτικού","lemonchiffon":"λεμονί","teal":"πετρόλ","floralwhite":"λευκό των ανθών","cornflowerblue":"μεσαίο μπλε","paleturquoise":"αχνό τυρκουάζ","purple":"μωβ","gainsboro":"γκρι σιέλ","plum":"δαμασκηνί","red":"κόκκινο","blue":"μπλε","forestgreen":"πράσινο του δάσους","darkgreen":"σκούρο πράσινο","honeydew":"μελί","darkseagreen":"σκούρο πράσινο της θάλασσας","lightcoral":"ανοιχτό κοραλί","palevioletred":"αχνό κόκκινο βιολετί","mediumpurple":"μεσαίο μωβ","saddlebrown":"βαθύ καφέ","darkmagenta":"σκούρο ματζέντα","thistle":"μωβ βιολετί","whitesmoke":"λευκός καπνός","wheat":"σταρένιο","violet":"βιολετί","lightskyblue":"ανοιχτό μπλε το ουρανού","goldenrod":"χρυσοκίτρινο","mediumblue":"μεσαίο μπλε","skyblue":"μπλε του ουρανού","crimson":"βαθύ κόκκινο","darksalmon":"σκούρο σομόν","darkred":"σκούρο κόκκινο","darkslategrey":"σκούρο μεταλλικό γκρι","peru":"περού","lightgrey":"ανοιχτό γκρι","lightgoldenrodyellow":"ανοιχτό χρυσοκίτρινο","blanchedalmond":"ζαχαρί","aliceblue":"σιέλ","bisque":"σκούρο κρεμ","slategray":"μεταλλικό γκρι","palegoldenrod":"αχνό χρυσοκίτρινο","darkorange":"σκούρο πορτοκαλί","aquamarine":"γαλαζοπράσινο","lightgreen":"ανοιχτό πράσινο","burlywood":"καφέ του ξύλου","dodgerblue":"σκούρο ελεκτρίκ","darkgray":"σκούρο γκρι","lightcyan":"ανοιχτό κυανό","powderblue":"αχνό μπλε","blueviolet":"βιολετί","orchid":"ορχιδέα","dimgray":"αχνό γκρι","beige":"μπεζ","fuchsia":"φούξια","lavenderblush":"μωβ λεβάντας","hotpink":"έντονο ροζ","steelblue":"μπλε ατσαλιού","tomato":"κόκκινο της ντομάτας","lightpink":"ανοιχτό ροζ","limegreen":"πράσινο λαχανί","indianred":"ινδικό κόκκινο","papayawhip":"αχνό ροζ","lightslategray":"ανοιχτό μεταλλικό γκρι","gray":"γκρι","mediumorchid":"μεσαία ορχιδέα","cornsilk":"ασημί του καλαμποκιού","black":"μαύρο","seagreen":"πράσινο της θάλασσας","darkslateblue":"σκούρο μεταλλικό μπλε","khaki":"χακί","lightblue":"ανοιχτό μπλε","palegreen":"αχνό πράσινο","azure":"μπλε του ουρανού","peachpuff":"ροδακινί","darkolivegreen":"σκούρο πράσινο λαδί","yellowgreen":"κιτρινοπράσινο"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.el");dijit.nls.loading.el={"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.el");dijit.nls.common.el={"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.el");dijit._editor.nls.commands.el={"removeFormat":"Αφαίρεση μορφοποίησης","copy":"Αντιγραφή","paste":"Επικόλληση","selectAll":"Επιλογή όλων","insertOrderedList":"Αριθμημένη λίστα","insertTable":"Εισαγωγή/Τροποποίηση πίνακα","print":"Εκτύπωση","underline":"Υπογράμμιση","foreColor":"Χρώμα προσκηνίου","htmlToggle":"Πρωτογενής κώδικας HTML","formatBlock":"Στυλ παραγράφου","newPage":"Νέα σελίδα","insertHorizontalRule":"Οριζόντια γραμμή","delete":"Διαγραφή","insertUnorderedList":"Λίστα με κουκίδες","tableProp":"Ιδιότητα πίνακα","insertImage":"Εισαγωγή εικόνας","superscript":"Εκθέτης","subscript":"Δείκτης","createLink":"Δημιουργία σύνδεσης","undo":"Αναίρεση","fullScreen":"Εναλλαγή κατάστασης πλήρους οθόνης","italic":"Πλάγια","fontName":"Όνομα γραμματοσειράς","justifyLeft":"Στοίχιση αριστερά","unlink":"Αφαίρεση σύνδεσης","toggleTableBorder":"Εναλλαγή εμφάνισης περιγράμματος πίνακα","viewSource":"Προβολή προέλευσης HTML","fontSize":"Μέγεθος γραμματοσειράς","systemShortcut":"Σε αυτό το πρόγραμμα πλοήγησης, η ενέργεια \"${0}\" είναι διαθέσιμη μόνο με τη χρήση μιας συντόμευσης πληκτρολογίου. Χρησιμοποιήστε τη συντόμευση ${1}.","indent":"Εσοχή","redo":"Ακύρωση αναίρεσης","strikethrough":"Διαγράμμιση","justifyFull":"Πλήρης στοίχιση","justifyCenter":"Στοίχιση στο κέντρο","hiliteColor":"Χρώμα φόντου","deleteTable":"Διαγραφή πίνακα","outdent":"Μείωση περιθωρίου","cut":"Αποκοπή","plainFormatBlock":"Στυλ παραγράφου","toggleDir":"Εναλλαγή κατεύθυνσης","bold":"Έντονα","tabIndent":"Εσοχή με το πλήκτρο Tab","justifyRight":"Στοίχιση δεξιά","appleKey":"⌘${0}","ctrlKey":"ctrl+${0}"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.el");dijit.form.nls.validate.el={"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.el");dijit.form.nls.ComboBox.el={"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"};dojo.provide("dijit._editor.nls.FontChoice");dijit._editor.nls.FontChoice._built=true;dojo.provide("dijit._editor.nls.FontChoice.el");dijit._editor.nls.FontChoice.el={"1":"xx-μικρά","2":"x-μικρά","formatBlock":"Μορφή","3":"μικρά","4":"μεσαία","5":"μεγάλα","6":"x-μεγάλα","7":"xx-μεγάλα","fantasy":"φαντασίας","serif":"με πατούρες (serif)","p":"Παράγραφος","pre":"Προ-μορφοποιημένο","sans-serif":"χωρίς πατούρες (sans-serif)","fontName":"Γραμματοσειρά","h1":"Επικεφαλίδα","h2":"Δευτερεύουσα επικεφαλίδα","h3":"Δευτερεύουσα επικεφαλίδα τρίτου επιπέδου","monospace":"σταθερού πλάτους","fontSize":"Μέγεθος","cursive":"πλάγιοι","noFormat":"None"};dojo.provide("dijit._editor.nls.LinkDialog");dijit._editor.nls.LinkDialog._built=true;dojo.provide("dijit._editor.nls.LinkDialog.el");dijit._editor.nls.LinkDialog.el={"text":"Περιγραφή:","insertImageTitle":"Ιδιότητες εικόνας","set":"Ορισμός","newWindow":"Νέο παράθυρο","topWindow":"Παράθυρο σε πρώτο πλάνο","target":"Προορισμός:","createLinkTitle":"Ιδιότητες σύνδεσης","parentWindow":"Γονικό παράθυρο","currentWindow":"Τρέχον παράθυρο","url":"Διεύθυνση URL:"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.el");dojo.cldr.nls.number.el={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","currencyFormat":"#,##0.00 ¤","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.el");dojo.cldr.nls.currency.el={"HKD_displayName":"Δολάριο Χονγκ Κονγκ","CHF_displayName":"Φράγκο Ελβετίας","CAD_displayName":"Δολάριο Καναδά","CNY_displayName":"Γιουάν Ρενμίμπι Κίνας","AUD_displayName":"Δολάριο Αυστραλίας","JPY_displayName":"Γιεν Ιαπωνίας","USD_displayName":"Δολάριο ΗΠΑ","GBP_displayName":"Λίρα Στερλίνα Βρετανίας","EUR_displayName":"Ευρώ","USD_symbol":"US$","CAD_symbol":"CA$","GBP_symbol":"£","HKD_symbol":"HK$","JPY_symbol":"JP¥","AUD_symbol":"AU$","CNY_symbol":"CN¥","EUR_symbol":"€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.el");dojo.cldr.nls.gregorian.el={"months-format-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"field-weekday":"Ημέρα εβδομάδας","dateFormatItem-yyQQQQ":"QQQQ yy","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, d/M/yyyy","dateFormatItem-MMMEd":"E, d MMM","eraNarrow":["π.Χ.","μ.Χ."],"dateFormat-long":"d MMMM y","months-format-wide":["Ιανουαρίου","Φεβρουαρίου","Μαρτίου","Απριλίου","Μαΐου","Ιουνίου","Ιουλίου","Αυγούστου","Σεπτεμβρίου","Οκτωβρίου","Νοεμβρίου","Δεκεμβρίου"],"dateFormatItem-EEEd":"EEE d","dayPeriods-format-wide-pm":"μ.μ.","dateFormat-full":"EEEE, d MMMM y","dateFormatItem-Md":"d/M","field-era":"Περίοδος","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],"timeFormat-short":"h:mm a","quarters-format-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"timeFormat-long":"h:mm:ss a z","field-year":"Έτος","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"y Q","dateFormatItem-yyyyMMMM":"MMMM y","field-hour":"Ώρα","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"h:mm:ss a zzzz","field-day-relative+0":"Σήμερα","field-day-relative+1":"Αύριο","field-day-relative+2":"Μεθαύριο","dateFormatItem-H":"HH","field-day-relative+3":"Σε τρεις ημέρες από τώρα","months-standAlone-abbr":["Ιαν","Φεβ","Μαρ","Απρ","Μαϊ","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],"quarters-format-abbr":["Τ1","Τ2","Τ3","Τ4"],"quarters-standAlone-wide":["1ο τρίμηνο","2ο τρίμηνο","3ο τρίμηνο","4ο τρίμηνο"],"dateFormatItem-HHmmss":"HH:mm:ss","dateFormatItem-M":"L","days-standAlone-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"dateFormatItem-MMMMd":"d MMMM","dateFormatItem-yyMMM":"MMM yy","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Τ1","Τ2","Τ3","Τ4"],"eraAbbr":["π.Χ.","μ.Χ."],"field-minute":"Λεπτό","field-dayperiod":"π.μ./μ.μ.","days-standAlone-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","field-day-relative+-1":"Χθες","field-day-relative+-2":"Προχθές","field-day-relative+-3":"Πριν από τρεις ημέρες","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E, d/M","dateFormatItem-yMMMM":"LLLL y","field-day":"Ημέρα","days-format-wide":["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],"field-zone":"Ζώνη","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["Ι","Φ","Μ","Α","Μ","Ι","Ι","Α","Σ","Ο","Ν","Δ"],"dateFormatItem-yyMM":"MM/yy","days-format-abbr":["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],"eraNames":["π.Χ.","μ.Χ."],"days-format-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"field-month":"Μήνας","days-standAlone-narrow":["Κ","Δ","Τ","Τ","Π","Π","Σ"],"dateFormatItem-MMM":"LLL","dateFormatItem-HHmm":"HH:mm","dayPeriods-format-wide-am":"π.μ.","dateFormatItem-MMMMEd":"E, d MMMM","dateFormatItem-MMMMdd":"dd MMMM","dateFormat-short":"d/M/yy","field-second":"Δευτερόλεπτο","dateFormatItem-yMMMEd":"EEE, d MMM y","dateFormatItem-Ed":"E d","field-week":"Εβδομάδα","dateFormat-medium":"d MMM y","dateFormatItem-mmss":"mm:ss","dateFormatItem-yyyy":"y","quarters-standAlone-narrow":["1","2","3","4"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateTimeFormat-medium":"{1} {0}","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateTimeFormats-appendItem-Era":"{0} {1}","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateTimeFormat-full":"{1} {0}","dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateTimeFormats-appendItem-Timezone":"{0} {1}","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"};
Index: trunk/web/dojo/dijit/nls/cs/loading.js
===================================================================
--- trunk/web/dojo/dijit/nls/cs/loading.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/cs/loading.js	(revision 9)
@@ -0,0 +1 @@
+({"loadingState":"Probíhá načítání...","errorState":"Omlouváme se, došlo k chybě"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/nls/cs/common.js
===================================================================
--- trunk/web/dojo/dijit/nls/cs/common.js	(revision 0)
+++ trunk/web/dojo/dijit/nls/cs/common.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"})
\ No newline at end of file
Index: trunk/web/dojo/dijit/MenuItem.js
===================================================================
--- trunk/web/dojo/dijit/MenuItem.js	(revision 0)
+++ trunk/web/dojo/dijit/MenuItem.js	(revision 9)
@@ -0,0 +1,69 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuItem"]){
+dojo._hasResource["dijit.MenuItem"]=true;
+dojo.provide("dijit.MenuItem");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.require("dijit._CssStateMixin");
+dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_1){
+if(_1&&!("label" in this.params)){
+this.set("label",_1.innerHTML);
+}
+},postCreate:function(){
+this.inherited(arguments);
+dojo.setSelectable(this.domNode,false);
+var _2=this.id+"_text";
+dojo.attr(this.containerNode,"id",_2);
+if(this.accelKeyNode){
+dojo.attr(this.accelKeyNode,"id",this.id+"_accel");
+_2+=" "+this.id+"_accel";
+}
+dijit.setWaiState(this.domNode,"labelledby",_2);
+},_onHover:function(){
+this.getParent().onItemHover(this);
+},_onUnhover:function(){
+this.getParent().onItemUnhover(this);
+this._hovering=false;
+this._setStateClass();
+},_onClick:function(_3){
+this.getParent().onItemClick(this,_3);
+dojo.stopEvent(_3);
+},onClick:function(_4){
+},focus:function(){
+try{
+if(dojo.isIE==8){
+this.containerNode.focus();
+}
+dijit.focus(this.focusNode);
+}
+catch(e){
+}
+},_onFocus:function(){
+this._setSelected(true);
+this.getParent()._onItemFocus(this);
+this.inherited(arguments);
+},_setSelected:function(_5){
+dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_5);
+},setLabel:function(_6){
+dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");
+this.set("label",_6);
+},setDisabled:function(_7){
+dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");
+this.set("disabled",_7);
+},_setDisabledAttr:function(_8){
+this.disabled=_8;
+dijit.setWaiState(this.focusNode,"disabled",_8?"true":"false");
+},_setAccelKeyAttr:function(_9){
+this.accelKey=_9;
+this.accelKeyNode.style.display=_9?"":"none";
+this.accelKeyNode.innerHTML=_9;
+dojo.attr(this.containerNode,"colSpan",_9?"1":"2");
+}});
+}
Index: trunk/web/dojo/dijit/dijit.js.uncompressed.js
===================================================================
--- trunk/web/dojo/dijit/dijit.js.uncompressed.js	(revision 0)
+++ trunk/web/dojo/dijit/dijit.js.uncompressed.js	(revision 9)
@@ -0,0 +1,5961 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.window"] = true;
+dojo.provide("dojo.window");
+
+dojo.window.getBox = function(){
+	// summary:
+	//		Returns the dimensions and scroll position of the viewable area of a browser window
+
+	var scrollRoot = (dojo.doc.compatMode == 'BackCompat') ? dojo.body() : dojo.doc.documentElement;
+
+	// get scroll position
+	var scroll = dojo._docScroll(); // scrollRoot.scrollTop/Left should work
+	return { w: scrollRoot.clientWidth, h: scrollRoot.clientHeight, l: scroll.x, t: scroll.y };
+};
+
+dojo.window.get = function(doc){
+	// summary:
+	// 		Get window object associated with document doc
+
+	// In some IE versions (at least 6.0), document.parentWindow does not return a
+	// reference to the real window object (maybe a copy), so we must fix it as well
+	// We use IE specific execScript to attach the real window reference to
+	// document._parentWindow for later use
+	if(dojo.isIE && window !== document.parentWindow){
+		/*
+		In IE 6, only the variable "window" can be used to connect events (others
+		may be only copies).
+		*/
+		doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
+		//to prevent memory leak, unset it after use
+		//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
+		var win = doc._parentWindow;
+		doc._parentWindow = null;
+		return win;	//	Window
+	}
+
+	return doc.parentWindow || doc.defaultView;	//	Window
+};
+
+dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+	// summary:
+	//		Scroll the passed node into view, if it is not already.
+	
+	// don't rely on node.scrollIntoView working just because the function is there
+
+	try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method
+		node = dojo.byId(node);
+		var doc = node.ownerDocument || dojo.doc,
+			body = doc.body || dojo.body(),
+			html = doc.documentElement || body.parentNode,
+			isIE = dojo.isIE, isWK = dojo.isWebKit;
+		// if an untested browser, then use the native method
+		if((!(dojo.isMoz || isIE || isWK || dojo.isOpera) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){
+			node.scrollIntoView(false); // short-circuit to native if possible
+			return;
+		}
+		var backCompat = doc.compatMode == 'BackCompat',
+			clientAreaRoot = backCompat? body : html,
+			scrollRoot = isWK ? body : clientAreaRoot,
+			rootWidth = clientAreaRoot.clientWidth,
+			rootHeight = clientAreaRoot.clientHeight,
+			rtl = !dojo._isBodyLtr(),
+			nodePos = pos || dojo.position(node),
+			el = node.parentNode,
+			isFixed = function(el){
+				return ((isIE <= 6 || (isIE && backCompat))? false : (dojo.style(el, 'position').toLowerCase() == "fixed"));
+			};
+		if(isFixed(node)){ return; } // nothing to do
+
+		while(el){
+			if(el == body){ el = scrollRoot; }
+			var elPos = dojo.position(el),
+				fixedPos = isFixed(el);
+	
+			if(el == scrollRoot){
+				elPos.w = rootWidth; elPos.h = rootHeight;
+				if(scrollRoot == html && isIE && rtl){ elPos.x += scrollRoot.offsetWidth-elPos.w; } // IE workaround where scrollbar causes negative x
+				if(elPos.x < 0 || !isIE){ elPos.x = 0; } // IE can have values > 0
+				if(elPos.y < 0 || !isIE){ elPos.y = 0; }
+			}else{
+				var pb = dojo._getPadBorderExtents(el);
+				elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t;
+			}
+	
+			if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
+				var clientSize = el.clientWidth,
+					scrollBarSize = elPos.w - clientSize;
+				if(clientSize > 0 && scrollBarSize > 0){
+					elPos.w = clientSize;
+					if(isIE && rtl){ elPos.x += scrollBarSize; }
+				}
+				clientSize = el.clientHeight;
+				scrollBarSize = elPos.h - clientSize;
+				if(clientSize > 0 && scrollBarSize > 0){
+					elPos.h = clientSize;
+				}
+			}
+			if(fixedPos){ // bounded by viewport, not parents
+				if(elPos.y < 0){
+					elPos.h += elPos.y; elPos.y = 0;
+				}
+				if(elPos.x < 0){
+					elPos.w += elPos.x; elPos.x = 0;
+				}
+				if(elPos.y + elPos.h > rootHeight){
+					elPos.h = rootHeight - elPos.y;
+				}
+				if(elPos.x + elPos.w > rootWidth){
+					elPos.w = rootWidth - elPos.x;
+				}
+			}
+			// calculate overflow in all 4 directions
+			var l = nodePos.x - elPos.x, // beyond left: < 0
+				t = nodePos.y - Math.max(elPos.y, 0), // beyond top: < 0
+				r = l + nodePos.w - elPos.w, // beyond right: > 0
+				bot = t + nodePos.h - elPos.h; // beyond bottom: > 0
+			if(r * l > 0){
+				var s = Math[l < 0? "max" : "min"](l, r);
+				nodePos.x += el.scrollLeft;
+				el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
+				nodePos.x -= el.scrollLeft;
+			}
+			if(bot * t > 0){
+				nodePos.y += el.scrollTop;
+				el.scrollTop += Math[t < 0? "max" : "min"](t, bot);
+				nodePos.y -= el.scrollTop;
+			}
+			el = (el != scrollRoot) && !fixedPos && el.parentNode;
+		}	
+	}catch(error){
+		console.error('scrollIntoView: ' + error);
+		node.scrollIntoView(false);
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.manager"] = true;
+dojo.provide("dijit._base.manager");
+
+dojo.declare("dijit.WidgetSet", null, {
+	// summary:
+	//		A set of widgets indexed by id. A default instance of this class is
+	//		available as `dijit.registry`
+	//
+	// example:
+	//		Create a small list of widgets:
+	//		|	var ws = new dijit.WidgetSet();
+	//		|	ws.add(dijit.byId("one"));
+	//		| 	ws.add(dijit.byId("two"));
+	//		|	// destroy both:
+	//		|	ws.forEach(function(w){ w.destroy(); });
+	//
+	// example:
+	//		Using dijit.registry:
+	//		|	dijit.registry.forEach(function(w){ /* do something */ });
+
+	constructor: function(){
+		this._hash = {};
+		this.length = 0;
+	},
+
+	add: function(/*dijit._Widget*/ widget){
+		// summary:
+		//		Add a widget to this list. If a duplicate ID is detected, a error is thrown.
+		//
+		// widget: dijit._Widget
+		//		Any dijit._Widget subclass.
+		if(this._hash[widget.id]){
+			throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
+		}
+		this._hash[widget.id] = widget;
+		this.length++;
+	},
+
+	remove: function(/*String*/ id){
+		// summary:
+		//		Remove a widget from this WidgetSet. Does not destroy the widget; simply
+		//		removes the reference.
+		if(this._hash[id]){
+			delete this._hash[id];
+			this.length--;
+		}
+	},
+
+	forEach: function(/*Function*/ func, /* Object? */thisObj){
+		// summary:
+		//		Call specified function for each widget in this set.
+		//
+		// func:
+		//		A callback function to run for each item. Is passed the widget, the index
+		//		in the iteration, and the full hash, similar to `dojo.forEach`.
+		//
+		// thisObj:
+		//		An optional scope parameter
+		//
+		// example:
+		//		Using the default `dijit.registry` instance:
+		//		|	dijit.registry.forEach(function(widget){
+		//		|		console.log(widget.declaredClass);
+		//		|	});
+		//
+		// returns:
+		//		Returns self, in order to allow for further chaining.
+
+		thisObj = thisObj || dojo.global;
+		var i = 0, id;
+		for(id in this._hash){
+			func.call(thisObj, this._hash[id], i++, this._hash);
+		}
+		return this;	// dijit.WidgetSet
+	},
+
+	filter: function(/*Function*/ filter, /* Object? */thisObj){
+		// summary:
+		//		Filter down this WidgetSet to a smaller new WidgetSet
+		//		Works the same as `dojo.filter` and `dojo.NodeList.filter`
+		//
+		// filter:
+		//		Callback function to test truthiness. Is passed the widget
+		//		reference and the pseudo-index in the object.
+		//
+		// thisObj: Object?
+		//		Option scope to use for the filter function.
+		//
+		// example:
+		//		Arbitrary: select the odd widgets in this list
+		//		|	dijit.registry.filter(function(w, i){
+		//		|		return i % 2 == 0;
+		//		|	}).forEach(function(w){ /* odd ones */ });
+
+		thisObj = thisObj || dojo.global;
+		var res = new dijit.WidgetSet(), i = 0, id;
+		for(id in this._hash){
+			var w = this._hash[id];
+			if(filter.call(thisObj, w, i++, this._hash)){
+				res.add(w);
+			}
+		}
+		return res; // dijit.WidgetSet
+	},
+
+	byId: function(/*String*/ id){
+		// summary:
+		//		Find a widget in this list by it's id.
+		// example:
+		//		Test if an id is in a particular WidgetSet
+		//		| var ws = new dijit.WidgetSet();
+		//		| ws.add(dijit.byId("bar"));
+		//		| var t = ws.byId("bar") // returns a widget
+		//		| var x = ws.byId("foo"); // returns undefined
+
+		return this._hash[id];	// dijit._Widget
+	},
+
+	byClass: function(/*String*/ cls){
+		// summary:
+		//		Reduce this widgetset to a new WidgetSet of a particular `declaredClass`
+		//
+		// cls: String
+		//		The Class to scan for. Full dot-notated string.
+		//
+		// example:
+		//		Find all `dijit.TitlePane`s in a page:
+		//		|	dijit.registry.byClass("dijit.TitlePane").forEach(function(tp){ tp.close(); });
+
+		var res = new dijit.WidgetSet(), id, widget;
+		for(id in this._hash){
+			widget = this._hash[id];
+			if(widget.declaredClass == cls){
+				res.add(widget);
+			}
+		 }
+		 return res; // dijit.WidgetSet
+},
+
+	toArray: function(){
+		// summary:
+		//		Convert this WidgetSet into a true Array
+		//
+		// example:
+		//		Work with the widget .domNodes in a real Array
+		//		|	dojo.map(dijit.registry.toArray(), function(w){ return w.domNode; });
+
+		var ar = [];
+		for(var id in this._hash){
+			ar.push(this._hash[id]);
+		}
+		return ar;	// dijit._Widget[]
+},
+
+	map: function(/* Function */func, /* Object? */thisObj){
+		// summary:
+		//		Create a new Array from this WidgetSet, following the same rules as `dojo.map`
+		// example:
+		//		|	var nodes = dijit.registry.map(function(w){ return w.domNode; });
+		//
+		// returns:
+		//		A new array of the returned values.
+		return dojo.map(this.toArray(), func, thisObj); // Array
+	},
+
+	every: function(func, thisObj){
+		// summary:
+		// 		A synthetic clone of `dojo.every` acting explicitly on this WidgetSet
+		//
+		// func: Function
+		//		A callback function run for every widget in this list. Exits loop
+		//		when the first false return is encountered.
+		//
+		// thisObj: Object?
+		//		Optional scope parameter to use for the callback
+
+		thisObj = thisObj || dojo.global;
+		var x = 0, i;
+		for(i in this._hash){
+			if(!func.call(thisObj, this._hash[i], x++, this._hash)){
+				return false; // Boolean
+			}
+		}
+		return true; // Boolean
+	},
+
+	some: function(func, thisObj){
+		// summary:
+		// 		A synthetic clone of `dojo.some` acting explictly on this WidgetSet
+		//
+		// func: Function
+		//		A callback function run for every widget in this list. Exits loop
+		//		when the first true return is encountered.
+		//
+		// thisObj: Object?
+		//		Optional scope parameter to use for the callback
+
+		thisObj = thisObj || dojo.global;
+		var x = 0, i;
+		for(i in this._hash){
+			if(func.call(thisObj, this._hash[i], x++, this._hash)){
+				return true; // Boolean
+			}
+		}
+		return false; // Boolean
+	}
+
+});
+
+(function(){
+
+	/*=====
+	dijit.registry = {
+		// summary:
+		//		A list of widgets on a page.
+		// description:
+		//		Is an instance of `dijit.WidgetSet`
+	};
+	=====*/
+	dijit.registry = new dijit.WidgetSet();
+
+	var hash = dijit.registry._hash,
+		attr = dojo.attr,
+		hasAttr = dojo.hasAttr,
+		style = dojo.style;
+
+	dijit.byId = function(/*String|dijit._Widget*/ id){
+		// summary:
+		//		Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
+		return typeof id == "string" ? hash[id] : id; // dijit._Widget
+	};
+
+	var _widgetTypeCtr = {};
+	dijit.getUniqueId = function(/*String*/widgetType){
+		// summary:
+		//		Generates a unique id for a given widgetType
+	
+		var id;
+		do{
+			id = widgetType + "_" +
+				(widgetType in _widgetTypeCtr ?
+					++_widgetTypeCtr[widgetType] : _widgetTypeCtr[widgetType] = 0);
+		}while(hash[id]);
+		return dijit._scopeName == "dijit" ? id : dijit._scopeName + "_" + id; // String
+	};
+	
+	dijit.findWidgets = function(/*DomNode*/ root){
+		// summary:
+		//		Search subtree under root returning widgets found.
+		//		Doesn't search for nested widgets (ie, widgets inside other widgets).
+	
+		var outAry = [];
+	
+		function getChildrenHelper(root){
+			for(var node = root.firstChild; node; node = node.nextSibling){
+				if(node.nodeType == 1){
+					var widgetId = node.getAttribute("widgetId");
+					if(widgetId){
+						outAry.push(hash[widgetId]);
+					}else{
+						getChildrenHelper(node);
+					}
+				}
+			}
+		}
+	
+		getChildrenHelper(root);
+		return outAry;
+	};
+	
+	dijit._destroyAll = function(){
+		// summary:
+		//		Code to destroy all widgets and do other cleanup on page unload
+	
+		// Clean up focus manager lingering references to widgets and nodes
+		dijit._curFocus = null;
+		dijit._prevFocus = null;
+		dijit._activeStack = [];
+	
+		// Destroy all the widgets, top down
+		dojo.forEach(dijit.findWidgets(dojo.body()), function(widget){
+			// Avoid double destroy of widgets like Menu that are attached to <body>
+			// even though they are logically children of other widgets.
+			if(!widget._destroyed){
+				if(widget.destroyRecursive){
+					widget.destroyRecursive();
+				}else if(widget.destroy){
+					widget.destroy();
+				}
+			}
+		});
+	};
+	
+	if(dojo.isIE){
+		// Only run _destroyAll() for IE because we think it's only necessary in that case,
+		// and because it causes problems on FF.  See bug #3531 for details.
+		dojo.addOnWindowUnload(function(){
+			dijit._destroyAll();
+		});
+	}
+	
+	dijit.byNode = function(/*DOMNode*/ node){
+		// summary:
+		//		Returns the widget corresponding to the given DOMNode
+		return hash[node.getAttribute("widgetId")]; // dijit._Widget
+	};
+	
+	dijit.getEnclosingWidget = function(/*DOMNode*/ node){
+		// summary:
+		//		Returns the widget whose DOM tree contains the specified DOMNode, or null if
+		//		the node is not contained within the DOM tree of any widget
+		while(node){
+			var id = node.getAttribute && node.getAttribute("widgetId");
+			if(id){
+				return hash[id];
+			}
+			node = node.parentNode;
+		}
+		return null;
+	};
+
+	var shown = (dijit._isElementShown = function(/*Element*/ elem){
+		var s = style(elem);
+		return (s.visibility != "hidden")
+			&& (s.visibility != "collapsed")
+			&& (s.display != "none")
+			&& (attr(elem, "type") != "hidden");
+	});
+	
+	dijit.hasDefaultTabStop = function(/*Element*/ elem){
+		// summary:
+		//		Tests if element is tab-navigable even without an explicit tabIndex setting
+	
+		// No explicit tabIndex setting, need to investigate node type
+		switch(elem.nodeName.toLowerCase()){
+			case "a":
+				// An <a> w/out a tabindex is only navigable if it has an href
+				return hasAttr(elem, "href");
+			case "area":
+			case "button":
+			case "input":
+			case "object":
+			case "select":
+			case "textarea":
+				// These are navigable by default
+				return true;
+			case "iframe":
+				// If it's an editor <iframe> then it's tab navigable.
+				//TODO: feature detect "designMode" in elem.contentDocument?
+				if(dojo.isMoz){
+					try{
+						return elem.contentDocument.designMode == "on";
+					}catch(err){
+						return false;
+					}
+				}else if(dojo.isWebKit){
+					var doc = elem.contentDocument,
+						body = doc && doc.body;
+					return body && body.contentEditable == 'true';
+				}else{
+					// contentWindow.document isn't accessible within IE7/8
+					// if the iframe.src points to a foreign url and this
+					// page contains an element, that could get focus
+					try{
+						doc = elem.contentWindow.document;
+						body = doc && doc.body;
+						return body && body.firstChild && body.firstChild.contentEditable == 'true';
+					}catch(e){
+						return false;
+					}
+				}
+			default:
+				return elem.contentEditable == 'true';
+		}
+	};
+	
+	var isTabNavigable = (dijit.isTabNavigable = function(/*Element*/ elem){
+		// summary:
+		//		Tests if an element is tab-navigable
+	
+		// TODO: convert (and rename method) to return effective tabIndex; will save time in _getTabNavigable()
+		if(attr(elem, "disabled")){
+			return false;
+		}else if(hasAttr(elem, "tabIndex")){
+			// Explicit tab index setting
+			return attr(elem, "tabIndex") >= 0; // boolean
+		}else{
+			// No explicit tabIndex setting, so depends on node type
+			return dijit.hasDefaultTabStop(elem);
+		}
+	});
+
+	dijit._getTabNavigable = function(/*DOMNode*/ root){
+		// summary:
+		//		Finds descendants of the specified root node.
+		//
+		// description:
+		//		Finds the following descendants of the specified root node:
+		//		* the first tab-navigable element in document order
+		//		  without a tabIndex or with tabIndex="0"
+		//		* the last tab-navigable element in document order
+		//		  without a tabIndex or with tabIndex="0"
+		//		* the first element in document order with the lowest
+		//		  positive tabIndex value
+		//		* the last element in document order with the highest
+		//		  positive tabIndex value
+		var first, last, lowest, lowestTabindex, highest, highestTabindex;
+		var walkTree = function(/*DOMNode*/parent){
+			dojo.query("> *", parent).forEach(function(child){
+				// Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE,
+				// since show() invokes getAttribute("type"), which crash on VML nodes in IE.
+				if((dojo.isIE && child.scopeName!=="HTML") || !shown(child)){
+					return;
+				}
+
+				if(isTabNavigable(child)){
+					var tabindex = attr(child, "tabIndex");
+					if(!hasAttr(child, "tabIndex") || tabindex == 0){
+						if(!first){ first = child; }
+						last = child;
+					}else if(tabindex > 0){
+						if(!lowest || tabindex < lowestTabindex){
+							lowestTabindex = tabindex;
+							lowest = child;
+						}
+						if(!highest || tabindex >= highestTabindex){
+							highestTabindex = tabindex;
+							highest = child;
+						}
+					}
+				}
+				if(child.nodeName.toUpperCase() != 'SELECT'){
+					walkTree(child);
+				}
+			});
+		};
+		if(shown(root)){ walkTree(root) }
+		return { first: first, last: last, lowest: lowest, highest: highest };
+	}
+	dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/ root){
+		// summary:
+		//		Finds the descendant of the specified root node
+		//		that is first in the tabbing order
+		var elems = dijit._getTabNavigable(dojo.byId(root));
+		return elems.lowest ? elems.lowest : elems.first; // DomNode
+	};
+	
+	dijit.getLastInTabbingOrder = function(/*String|DOMNode*/ root){
+		// summary:
+		//		Finds the descendant of the specified root node
+		//		that is last in the tabbing order
+		var elems = dijit._getTabNavigable(dojo.byId(root));
+		return elems.last ? elems.last : elems.highest; // DomNode
+	};
+	
+	/*=====
+	dojo.mixin(dijit, {
+		// defaultDuration: Integer
+		//		The default animation speed (in ms) to use for all Dijit
+		//		transitional animations, unless otherwise specified
+		//		on a per-instance basis. Defaults to 200, overrided by
+		//		`djConfig.defaultDuration`
+		defaultDuration: 200
+	});
+	=====*/
+	
+	dijit.defaultDuration = dojo.config["defaultDuration"] || 200;
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.focus"] = true;
+dojo.provide("dijit._base.focus");
+
+
+	// for dijit.isTabNavigable()
+
+// summary:
+//		These functions are used to query or set the focus and selection.
+//
+//		Also, they trace when widgets become activated/deactivated,
+//		so that the widget can fire _onFocus/_onBlur events.
+//		"Active" here means something similar to "focused", but
+//		"focus" isn't quite the right word because we keep track of
+//		a whole stack of "active" widgets.  Example: ComboButton --> Menu -->
+//		MenuItem.  The onBlur event for ComboButton doesn't fire due to focusing
+//		on the Menu or a MenuItem, since they are considered part of the
+//		ComboButton widget.  It only happens when focus is shifted
+//		somewhere completely different.
+
+dojo.mixin(dijit, {
+	// _curFocus: DomNode
+	//		Currently focused item on screen
+	_curFocus: null,
+
+	// _prevFocus: DomNode
+	//		Previously focused item on screen
+	_prevFocus: null,
+
+	isCollapsed: function(){
+		// summary:
+		//		Returns true if there is no text selected
+		return dijit.getBookmark().isCollapsed;
+	},
+
+	getBookmark: function(){
+		// summary:
+		//		Retrieves a bookmark that can be used with moveToBookmark to return to the same range
+		var bm, rg, tg, sel = dojo.doc.selection, cf = dijit._curFocus;
+
+		if(dojo.global.getSelection){
+			//W3C Range API for selections.
+			sel = dojo.global.getSelection();
+			if(sel){
+				if(sel.isCollapsed){
+					tg = cf? cf.tagName : "";
+					if(tg){
+						//Create a fake rangelike item to restore selections.
+						tg = tg.toLowerCase();
+						if(tg == "textarea" ||
+								(tg == "input" && (!cf.type || cf.type.toLowerCase() == "text"))){
+							sel = {
+								start: cf.selectionStart,
+								end: cf.selectionEnd,
+								node: cf,
+								pRange: true
+							};
+							return {isCollapsed: (sel.end <= sel.start), mark: sel}; //Object.
+						}
+					}
+					bm = {isCollapsed:true};
+				}else{
+					rg = sel.getRangeAt(0);
+					bm = {isCollapsed: false, mark: rg.cloneRange()};
+				}
+			}
+		}else if(sel){
+			// If the current focus was a input of some sort and no selection, don't bother saving
+			// a native bookmark.  This is because it causes issues with dialog/page selection restore.
+			// So, we need to create psuedo bookmarks to work with.
+			tg = cf ? cf.tagName : "";
+			tg = tg.toLowerCase();
+			if(cf && tg && (tg == "button" || tg == "textarea" || tg == "input")){
+				if(sel.type && sel.type.toLowerCase() == "none"){
+					return {
+						isCollapsed: true,
+						mark: null
+					}
+				}else{
+					rg = sel.createRange();
+					return {
+						isCollapsed: rg.text && rg.text.length?false:true,
+						mark: {
+							range: rg,
+							pRange: true
+						}
+					};
+				}
+			}
+			bm = {};
+
+			//'IE' way for selections.
+			try{
+				// createRange() throws exception when dojo in iframe
+				//and nothing selected, see #9632
+				rg = sel.createRange();
+				bm.isCollapsed = !(sel.type == 'Text' ? rg.htmlText.length : rg.length);
+			}catch(e){
+				bm.isCollapsed = true;
+				return bm;
+			}
+			if(sel.type.toUpperCase() == 'CONTROL'){
+				if(rg.length){
+					bm.mark=[];
+					var i=0,len=rg.length;
+					while(i<len){
+						bm.mark.push(rg.item(i++));
+					}
+				}else{
+					bm.isCollapsed = true;
+					bm.mark = null;
+				}
+			}else{
+				bm.mark = rg.getBookmark();
+			}
+		}else{
+			console.warn("No idea how to store the current selection for this browser!");
+		}
+		return bm; // Object
+	},
+
+	moveToBookmark: function(/*Object*/bookmark){
+		// summary:
+		//		Moves current selection to a bookmark
+		// bookmark:
+		//		This should be a returned object from dijit.getBookmark()
+
+		var _doc = dojo.doc,
+			mark = bookmark.mark;
+		if(mark){
+			if(dojo.global.getSelection){
+				//W3C Rangi API (FF, WebKit, Opera, etc)
+				var sel = dojo.global.getSelection();
+				if(sel && sel.removeAllRanges){
+					if(mark.pRange){
+						var r = mark;
+						var n = r.node;
+						n.selectionStart = r.start;
+						n.selectionEnd = r.end;
+					}else{
+						sel.removeAllRanges();
+						sel.addRange(mark);
+					}
+				}else{
+					console.warn("No idea how to restore selection for this browser!");
+				}
+			}else if(_doc.selection && mark){
+				//'IE' way.
+				var rg;
+				if(mark.pRange){
+					rg = mark.range;
+				}else if(dojo.isArray(mark)){
+					rg = _doc.body.createControlRange();
+					//rg.addElement does not have call/apply method, so can not call it directly
+					//rg is not available in "range.addElement(item)", so can't use that either
+					dojo.forEach(mark, function(n){
+						rg.addElement(n);
+					});
+				}else{
+					rg = _doc.body.createTextRange();
+					rg.moveToBookmark(mark);
+				}
+				rg.select();
+			}
+		}
+	},
+
+	getFocus: function(/*Widget?*/ menu, /*Window?*/ openedForWindow){
+		// summary:
+		//		Called as getFocus(), this returns an Object showing the current focus
+		//		and selected text.
+		//
+		//		Called as getFocus(widget), where widget is a (widget representing) a button
+		//		that was just pressed, it returns where focus was before that button
+		//		was pressed.   (Pressing the button may have either shifted focus to the button,
+		//		or removed focus altogether.)   In this case the selected text is not returned,
+		//		since it can't be accurately determined.
+		//
+		// menu: dijit._Widget or {domNode: DomNode} structure
+		//		The button that was just pressed.  If focus has disappeared or moved
+		//		to this button, returns the previous focus.  In this case the bookmark
+		//		information is already lost, and null is returned.
+		//
+		// openedForWindow:
+		//		iframe in which menu was opened
+		//
+		// returns:
+		//		A handle to restore focus/selection, to be passed to `dijit.focus`
+		var node = !dijit._curFocus || (menu && dojo.isDescendant(dijit._curFocus, menu.domNode)) ? dijit._prevFocus : dijit._curFocus;
+		return {
+			node: node,
+			bookmark: (node == dijit._curFocus) && dojo.withGlobal(openedForWindow || dojo.global, dijit.getBookmark),
+			openedForWindow: openedForWindow
+		}; // Object
+	},
+
+	focus: function(/*Object || DomNode */ handle){
+		// summary:
+		//		Sets the focused node and the selection according to argument.
+		//		To set focus to an iframe's content, pass in the iframe itself.
+		// handle:
+		//		object returned by get(), or a DomNode
+
+		if(!handle){ return; }
+
+		var node = "node" in handle ? handle.node : handle,		// because handle is either DomNode or a composite object
+			bookmark = handle.bookmark,
+			openedForWindow = handle.openedForWindow,
+			collapsed = bookmark ? bookmark.isCollapsed : false;
+
+		// Set the focus
+		// Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
+		// but we need to set focus to iframe.contentWindow
+		if(node){
+			var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node;
+			if(focusNode && focusNode.focus){
+				try{
+					// Gecko throws sometimes if setting focus is impossible,
+					// node not displayed or something like that
+					focusNode.focus();
+				}catch(e){/*quiet*/}
+			}
+			dijit._onFocusNode(node);
+		}
+
+		// set the selection
+		// do not need to restore if current selection is not empty
+		// (use keyboard to select a menu item) or if previous selection was collapsed
+		// as it may cause focus shift (Esp in IE).
+		if(bookmark && dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed) && !collapsed){
+			if(openedForWindow){
+				openedForWindow.focus();
+			}
+			try{
+				dojo.withGlobal(openedForWindow || dojo.global, dijit.moveToBookmark, null, [bookmark]);
+			}catch(e2){
+				/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
+			}
+		}
+	},
+
+	// _activeStack: dijit._Widget[]
+	//		List of currently active widgets (focused widget and it's ancestors)
+	_activeStack: [],
+
+	registerIframe: function(/*DomNode*/ iframe){
+		// summary:
+		//		Registers listeners on the specified iframe so that any click
+		//		or focus event on that iframe (or anything in it) is reported
+		//		as a focus/click event on the <iframe> itself.
+		// description:
+		//		Currently only used by editor.
+		// returns:
+		//		Handle to pass to unregisterIframe()
+		return dijit.registerWin(iframe.contentWindow, iframe);
+	},
+
+	unregisterIframe: function(/*Object*/ handle){
+		// summary:
+		//		Unregisters listeners on the specified iframe created by registerIframe.
+		//		After calling be sure to delete or null out the handle itself.
+		// handle:
+		//		Handle returned by registerIframe()
+
+		dijit.unregisterWin(handle);
+	},
+
+	registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){
+		// summary:
+		//		Registers listeners on the specified window (either the main
+		//		window or an iframe's window) to detect when the user has clicked somewhere
+		//		or focused somewhere.
+		// description:
+		//		Users should call registerIframe() instead of this method.
+		// targetWindow:
+		//		If specified this is the window associated with the iframe,
+		//		i.e. iframe.contentWindow.
+		// effectiveNode:
+		//		If specified, report any focus events inside targetWindow as
+		//		an event on effectiveNode, rather than on evt.target.
+		// returns:
+		//		Handle to pass to unregisterWin()
+
+		// TODO: make this function private in 2.0; Editor/users should call registerIframe(),
+
+		var mousedownListener = function(evt){
+			dijit._justMouseDowned = true;
+			setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
+			
+			// workaround weird IE bug where the click is on an orphaned node
+			// (first time clicking a Select/DropDownButton inside a TooltipDialog)
+			if(dojo.isIE && evt && evt.srcElement && evt.srcElement.parentNode == null){
+				return;
+			}
+
+			dijit._onTouchNode(effectiveNode || evt.target || evt.srcElement, "mouse");
+		};
+		//dojo.connect(targetWindow, "onscroll", ???);
+
+		// Listen for blur and focus events on targetWindow's document.
+		// IIRC, I'm using attachEvent() rather than dojo.connect() because focus/blur events don't bubble
+		// through dojo.connect(), and also maybe to catch the focus events early, before onfocus handlers
+		// fire.
+		// Connect to <html> (rather than document) on IE to avoid memory leaks, but document on other browsers because
+		// (at least for FF) the focus event doesn't fire on <html> or <body>.
+		var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document;
+		if(doc){
+			if(dojo.isIE){
+				doc.attachEvent('onmousedown', mousedownListener);
+				var activateListener = function(evt){
+					// IE reports that nodes like <body> have gotten focus, even though they have tabIndex=-1,
+					// Should consider those more like a mouse-click than a focus....
+					if(evt.srcElement.tagName.toLowerCase() != "#document" &&
+						dijit.isTabNavigable(evt.srcElement)){
+						dijit._onFocusNode(effectiveNode || evt.srcElement);
+					}else{
+						dijit._onTouchNode(effectiveNode || evt.srcElement);
+					}
+				};
+				doc.attachEvent('onactivate', activateListener);
+				var deactivateListener =  function(evt){
+					dijit._onBlurNode(effectiveNode || evt.srcElement);
+				};
+				doc.attachEvent('ondeactivate', deactivateListener);
+
+				return function(){
+					doc.detachEvent('onmousedown', mousedownListener);
+					doc.detachEvent('onactivate', activateListener);
+					doc.detachEvent('ondeactivate', deactivateListener);
+					doc = null;	// prevent memory leak (apparent circular reference via closure)
+				};
+			}else{
+				doc.addEventListener('mousedown', mousedownListener, true);
+				var focusListener = function(evt){
+					dijit._onFocusNode(effectiveNode || evt.target);
+				};
+				doc.addEventListener('focus', focusListener, true);
+				var blurListener = function(evt){
+					dijit._onBlurNode(effectiveNode || evt.target);
+				};
+				doc.addEventListener('blur', blurListener, true);
+
+				return function(){
+					doc.removeEventListener('mousedown', mousedownListener, true);
+					doc.removeEventListener('focus', focusListener, true);
+					doc.removeEventListener('blur', blurListener, true);
+					doc = null;	// prevent memory leak (apparent circular reference via closure)
+				};
+			}
+		}
+	},
+
+	unregisterWin: function(/*Handle*/ handle){
+		// summary:
+		//		Unregisters listeners on the specified window (either the main
+		//		window or an iframe's window) according to handle returned from registerWin().
+		//		After calling be sure to delete or null out the handle itself.
+
+		// Currently our handle is actually a function
+		handle && handle();
+	},
+
+	_onBlurNode: function(/*DomNode*/ node){
+		// summary:
+		// 		Called when focus leaves a node.
+		//		Usually ignored, _unless_ it *isn't* follwed by touching another node,
+		//		which indicates that we tabbed off the last field on the page,
+		//		in which case every widget is marked inactive
+		dijit._prevFocus = dijit._curFocus;
+		dijit._curFocus = null;
+
+		if(dijit._justMouseDowned){
+			// the mouse down caused a new widget to be marked as active; this blur event
+			// is coming late, so ignore it.
+			return;
+		}
+
+		// if the blur event isn't followed by a focus event then mark all widgets as inactive.
+		if(dijit._clearActiveWidgetsTimer){
+			clearTimeout(dijit._clearActiveWidgetsTimer);
+		}
+		dijit._clearActiveWidgetsTimer = setTimeout(function(){
+			delete dijit._clearActiveWidgetsTimer;
+			dijit._setStack([]);
+			dijit._prevFocus = null;
+		}, 100);
+	},
+
+	_onTouchNode: function(/*DomNode*/ node, /*String*/ by){
+		// summary:
+		//		Callback when node is focused or mouse-downed
+		// node:
+		//		The node that was touched.
+		// by:
+		//		"mouse" if the focus/touch was caused by a mouse down event
+
+		// ignore the recent blurNode event
+		if(dijit._clearActiveWidgetsTimer){
+			clearTimeout(dijit._clearActiveWidgetsTimer);
+			delete dijit._clearActiveWidgetsTimer;
+		}
+
+		// compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
+		var newStack=[];
+		try{
+			while(node){
+				var popupParent = dojo.attr(node, "dijitPopupParent");
+				if(popupParent){
+					node=dijit.byId(popupParent).domNode;
+				}else if(node.tagName && node.tagName.toLowerCase() == "body"){
+					// is this the root of the document or just the root of an iframe?
+					if(node === dojo.body()){
+						// node is the root of the main document
+						break;
+					}
+					// otherwise, find the iframe this node refers to (can't access it via parentNode,
+					// need to do this trick instead). window.frameElement is supported in IE/FF/Webkit
+					node=dojo.window.get(node.ownerDocument).frameElement;
+				}else{
+					// if this node is the root node of a widget, then add widget id to stack,
+					// except ignore clicks on disabled widgets (actually focusing a disabled widget still works,
+					// to support MenuItem)
+					var id = node.getAttribute && node.getAttribute("widgetId"),
+						widget = id && dijit.byId(id);
+					if(widget && !(by == "mouse" && widget.get("disabled"))){
+						newStack.unshift(id);
+					}
+					node=node.parentNode;
+				}
+			}
+		}catch(e){ /* squelch */ }
+
+		dijit._setStack(newStack, by);
+	},
+
+	_onFocusNode: function(/*DomNode*/ node){
+		// summary:
+		//		Callback when node is focused
+
+		if(!node){
+			return;
+		}
+
+		if(node.nodeType == 9){
+			// Ignore focus events on the document itself.  This is here so that
+			// (for example) clicking the up/down arrows of a spinner
+			// (which don't get focus) won't cause that widget to blur. (FF issue)
+			return;
+		}
+
+		dijit._onTouchNode(node);
+
+		if(node == dijit._curFocus){ return; }
+		if(dijit._curFocus){
+			dijit._prevFocus = dijit._curFocus;
+		}
+		dijit._curFocus = node;
+		dojo.publish("focusNode", [node]);
+	},
+
+	_setStack: function(/*String[]*/ newStack, /*String*/ by){
+		// summary:
+		//		The stack of active widgets has changed.  Send out appropriate events and records new stack.
+		// newStack:
+		//		array of widget id's, starting from the top (outermost) widget
+		// by:
+		//		"mouse" if the focus/touch was caused by a mouse down event
+
+		var oldStack = dijit._activeStack;
+		dijit._activeStack = newStack;
+
+		// compare old stack to new stack to see how many elements they have in common
+		for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
+			if(oldStack[nCommon] != newStack[nCommon]){
+				break;
+			}
+		}
+
+		var widget;
+		// for all elements that have gone out of focus, send blur event
+		for(var i=oldStack.length-1; i>=nCommon; i--){
+			widget = dijit.byId(oldStack[i]);
+			if(widget){
+				widget._focused = false;
+				widget._hasBeenBlurred = true;
+				if(widget._onBlur){
+					widget._onBlur(by);
+				}
+				dojo.publish("widgetBlur", [widget, by]);
+			}
+		}
+
+		// for all element that have come into focus, send focus event
+		for(i=nCommon; i<newStack.length; i++){
+			widget = dijit.byId(newStack[i]);
+			if(widget){
+				widget._focused = true;
+				if(widget._onFocus){
+					widget._onFocus(by);
+				}
+				dojo.publish("widgetFocus", [widget, by]);
+			}
+		}
+	}
+});
+
+// register top window and all the iframes it contains
+dojo.addOnLoad(function(){
+	var handle = dijit.registerWin(window);
+	if(dojo.isIE){
+		dojo.addOnWindowUnload(function(){
+			dijit.unregisterWin(handle);
+			handle = null;
+		})
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.AdapterRegistry"] = true;
+dojo.provide("dojo.AdapterRegistry");
+
+dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
+	//	summary:
+	//		A registry to make contextual calling/searching easier.
+	//	description:
+	//		Objects of this class keep list of arrays in the form [name, check,
+	//		wrap, directReturn] that are used to determine what the contextual
+	//		result of a set of checked arguments is. All check/wrap functions
+	//		in this registry should be of the same arity.
+	//	example:
+	//	|	// create a new registry
+	//	|	var reg = new dojo.AdapterRegistry();
+	//	|	reg.register("handleString",
+	//	|		dojo.isString,
+	//	|		function(str){
+	//	|			// do something with the string here
+	//	|		}
+	//	|	);
+	//	|	reg.register("handleArr",
+	//	|		dojo.isArray,
+	//	|		function(arr){
+	//	|			// do something with the array here
+	//	|		}
+	//	|	);
+	//	|
+	//	|	// now we can pass reg.match() *either* an array or a string and
+	//	|	// the value we pass will get handled by the right function
+	//	|	reg.match("someValue"); // will call the first function
+	//	|	reg.match(["someValue"]); // will call the second
+
+	this.pairs = [];
+	this.returnWrappers = returnWrappers || false; // Boolean
+}
+
+dojo.extend(dojo.AdapterRegistry, {
+	register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
+		//	summary: 
+		//		register a check function to determine if the wrap function or
+		//		object gets selected
+		//	name:
+		//		a way to identify this matcher.
+		//	check:
+		//		a function that arguments are passed to from the adapter's
+		//		match() function.  The check function should return true if the
+		//		given arguments are appropriate for the wrap function.
+		//	directReturn:
+		//		If directReturn is true, the value passed in for wrap will be
+		//		returned instead of being called. Alternately, the
+		//		AdapterRegistry can be set globally to "return not call" using
+		//		the returnWrappers property. Either way, this behavior allows
+		//		the registry to act as a "search" function instead of a
+		//		function interception library.
+		//	override:
+		//		If override is given and true, the check function will be given
+		//		highest priority. Otherwise, it will be the lowest priority
+		//		adapter.
+		this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]);
+	},
+
+	match: function(/* ... */){
+		// summary:
+		//		Find an adapter for the given arguments. If no suitable adapter
+		//		is found, throws an exception. match() accepts any number of
+		//		arguments, all of which are passed to all matching functions
+		//		from the registered pairs.
+		for(var i = 0; i < this.pairs.length; i++){
+			var pair = this.pairs[i];
+			if(pair[1].apply(this, arguments)){
+				if((pair[3])||(this.returnWrappers)){
+					return pair[2];
+				}else{
+					return pair[2].apply(this, arguments);
+				}
+			}
+		}
+		throw new Error("No match found");
+	},
+
+	unregister: function(name){
+		// summary: Remove a named adapter from the registry
+
+		// FIXME: this is kind of a dumb way to handle this. On a large
+		// registry this will be slow-ish and we can use the name as a lookup
+		// should we choose to trade memory for speed.
+		for(var i = 0; i < this.pairs.length; i++){
+			var pair = this.pairs[i];
+			if(pair[0] == name){
+				this.pairs.splice(i, 1);
+				return true;
+			}
+		}
+		return false;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.place"] = true;
+dojo.provide("dijit._base.place");
+
+
+
+
+
+dijit.getViewport = function(){
+	// summary:
+	//		Returns the dimensions and scroll position of the viewable area of a browser window
+
+	return dojo.window.getBox();
+};
+
+/*=====
+dijit.__Position = function(){
+	// x: Integer
+	//		horizontal coordinate in pixels, relative to document body
+	// y: Integer
+	//		vertical coordinate in pixels, relative to document body
+
+	thix.x = x;
+	this.y = y;
+}
+=====*/
+
+
+dijit.placeOnScreen = function(
+	/* DomNode */			node,
+	/* dijit.__Position */	pos,
+	/* String[] */			corners,
+	/* dijit.__Position? */	padding){
+	// summary:
+	//		Positions one of the node's corners at specified position
+	//		such that node is fully visible in viewport.
+	// description:
+	//		NOTE: node is assumed to be absolutely or relatively positioned.
+	//	pos:
+	//		Object like {x: 10, y: 20}
+	//	corners:
+	//		Array of Strings representing order to try corners in, like ["TR", "BL"].
+	//		Possible values are:
+	//			* "BL" - bottom left
+	//			* "BR" - bottom right
+	//			* "TL" - top left
+	//			* "TR" - top right
+	//	padding:
+	//		set padding to put some buffer around the element you want to position.
+	// example:
+	//		Try to place node's top right corner at (10,20).
+	//		If that makes node go (partially) off screen, then try placing
+	//		bottom left corner at (10,20).
+	//	|	placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
+
+	var choices = dojo.map(corners, function(corner){
+		var c = { corner: corner, pos: {x:pos.x,y:pos.y} };
+		if(padding){
+			c.pos.x += corner.charAt(1) == 'L' ? padding.x : -padding.x;
+			c.pos.y += corner.charAt(0) == 'T' ? padding.y : -padding.y;
+		}
+		return c;
+	});
+
+	return dijit._place(node, choices);
+}
+
+dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
+	// summary:
+	//		Given a list of spots to put node, put it at the first spot where it fits,
+	//		of if it doesn't fit anywhere then the place with the least overflow
+	// choices: Array
+	//		Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
+	//		Above example says to put the top-left corner of the node at (10,20)
+	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+	//		for things like tooltip, they are displayed differently (and have different dimensions)
+	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
+
+	// get {x: 10, y: 10, w: 100, h:100} type obj representing position of
+	// viewport over document
+	var view = dojo.window.getBox();
+
+	// This won't work if the node is inside a <div style="position: relative">,
+	// so reattach it to dojo.doc.body.   (Otherwise, the positioning will be wrong
+	// and also it might get cutoff)
+	if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
+		dojo.body().appendChild(node);
+	}
+
+	var best = null;
+	dojo.some(choices, function(choice){
+		var corner = choice.corner;
+		var pos = choice.pos;
+
+		// configure node to be displayed in given position relative to button
+		// (need to do this in order to get an accurate size for the node, because
+		// a tooltips size changes based on position, due to triangle)
+		if(layoutNode){
+			layoutNode(node, choice.aroundCorner, corner);
+		}
+
+		// get node's size
+		var style = node.style;
+		var oldDisplay = style.display;
+		var oldVis = style.visibility;
+		style.visibility = "hidden";
+		style.display = "";
+		var mb = dojo.marginBox(node);
+		style.display = oldDisplay;
+		style.visibility = oldVis;
+
+		// coordinates and size of node with specified corner placed at pos,
+		// and clipped by viewport
+		var startX = Math.max(view.l, corner.charAt(1) == 'L' ? pos.x : (pos.x - mb.w)),
+			startY = Math.max(view.t, corner.charAt(0) == 'T' ? pos.y : (pos.y - mb.h)),
+			endX = Math.min(view.l + view.w, corner.charAt(1) == 'L' ? (startX + mb.w) : pos.x),
+			endY = Math.min(view.t + view.h, corner.charAt(0) == 'T' ? (startY + mb.h) : pos.y),
+			width = endX - startX,
+			height = endY - startY,
+			overflow = (mb.w - width) + (mb.h - height);
+
+		if(best == null || overflow < best.overflow){
+			best = {
+				corner: corner,
+				aroundCorner: choice.aroundCorner,
+				x: startX,
+				y: startY,
+				w: width,
+				h: height,
+				overflow: overflow
+			};
+		}
+		return !overflow;
+	});
+
+	node.style.left = best.x + "px";
+	node.style.top = best.y + "px";
+	if(best.overflow && layoutNode){
+		layoutNode(node, best.aroundCorner, best.corner);
+	}
+	return best;
+}
+
+dijit.placeOnScreenAroundNode = function(
+	/* DomNode */		node,
+	/* DomNode */		aroundNode,
+	/* Object */		aroundCorners,
+	/* Function? */		layoutNode){
+
+	// summary:
+	//		Position node adjacent or kitty-corner to aroundNode
+	//		such that it's fully visible in viewport.
+	//
+	// description:
+	//		Place node such that corner of node touches a corner of
+	//		aroundNode, and that node is fully visible.
+	//
+	// aroundCorners:
+	//		Ordered list of pairs of corners to try matching up.
+	//		Each pair of corners is represented as a key/value in the hash,
+	//		where the key corresponds to the aroundNode's corner, and
+	//		the value corresponds to the node's corner:
+	//
+	//	|	{ aroundNodeCorner1: nodeCorner1, aroundNodeCorner2: nodeCorner2, ...}
+	//
+	//		The following strings are used to represent the four corners:
+	//			* "BL" - bottom left
+	//			* "BR" - bottom right
+	//			* "TL" - top left
+	//			* "TR" - top right
+	//
+	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+	//		For things like tooltip, they are displayed differently (and have different dimensions)
+	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
+	//
+	// example:
+	//	|	dijit.placeOnScreenAroundNode(node, aroundNode, {'BL':'TL', 'TR':'BR'});
+	//		This will try to position node such that node's top-left corner is at the same position
+	//		as the bottom left corner of the aroundNode (ie, put node below
+	//		aroundNode, with left edges aligned).  If that fails it will try to put
+	// 		the bottom-right corner of node where the top right corner of aroundNode is
+	//		(ie, put node above aroundNode, with right edges aligned)
+	//
+
+	// get coordinates of aroundNode
+	aroundNode = dojo.byId(aroundNode);
+	var oldDisplay = aroundNode.style.display;
+	aroundNode.style.display="";
+	// #3172: use the slightly tighter border box instead of marginBox
+	var aroundNodePos = dojo.position(aroundNode, true);
+	aroundNode.style.display=oldDisplay;
+
+	// place the node around the calculated rectangle
+	return dijit._placeOnScreenAroundRect(node,
+		aroundNodePos.x, aroundNodePos.y, aroundNodePos.w, aroundNodePos.h,	// rectangle
+		aroundCorners, layoutNode);
+};
+
+/*=====
+dijit.__Rectangle = function(){
+	// x: Integer
+	//		horizontal offset in pixels, relative to document body
+	// y: Integer
+	//		vertical offset in pixels, relative to document body
+	// width: Integer
+	//		width in pixels
+	// height: Integer
+	//		height in pixels
+
+	this.x = x;
+	this.y = y;
+	this.width = width;
+	this.height = height;
+}
+=====*/
+
+
+dijit.placeOnScreenAroundRectangle = function(
+	/* DomNode */			node,
+	/* dijit.__Rectangle */	aroundRect,
+	/* Object */			aroundCorners,
+	/* Function */			layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except that the "around"
+	//		parameter is an arbitrary rectangle on the screen (x, y, width, height)
+	//		instead of a dom node.
+
+	return dijit._placeOnScreenAroundRect(node,
+		aroundRect.x, aroundRect.y, aroundRect.width, aroundRect.height,	// rectangle
+		aroundCorners, layoutNode);
+};
+
+dijit._placeOnScreenAroundRect = function(
+	/* DomNode */		node,
+	/* Number */		x,
+	/* Number */		y,
+	/* Number */		width,
+	/* Number */		height,
+	/* Object */		aroundCorners,
+	/* Function */		layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except it accepts coordinates
+	//		of a rectangle to place node adjacent to.
+
+	// TODO: combine with placeOnScreenAroundRectangle()
+
+	// Generate list of possible positions for node
+	var choices = [];
+	for(var nodeCorner in aroundCorners){
+		choices.push( {
+			aroundCorner: nodeCorner,
+			corner: aroundCorners[nodeCorner],
+			pos: {
+				x: x + (nodeCorner.charAt(1) == 'L' ? 0 : width),
+				y: y + (nodeCorner.charAt(0) == 'T' ? 0 : height)
+			}
+		});
+	}
+
+	return dijit._place(node, choices, layoutNode);
+};
+
+dijit.placementRegistry= new dojo.AdapterRegistry();
+dijit.placementRegistry.register("node",
+	function(n, x){
+		return typeof x == "object" &&
+			typeof x.offsetWidth != "undefined" && typeof x.offsetHeight != "undefined";
+	},
+	dijit.placeOnScreenAroundNode);
+dijit.placementRegistry.register("rect",
+	function(n, x){
+		return typeof x == "object" &&
+			"x" in x && "y" in x && "width" in x && "height" in x;
+	},
+	dijit.placeOnScreenAroundRectangle);
+
+dijit.placeOnScreenAroundElement = function(
+	/* DomNode */		node,
+	/* Object */		aroundElement,
+	/* Object */		aroundCorners,
+	/* Function */		layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
+	//		for the "around" argument and finds a proper processor to place a node.
+
+	return dijit.placementRegistry.match.apply(dijit.placementRegistry, arguments);
+};
+
+dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
+	// summary:
+	//		Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
+	//
+	// position: String[]
+	//		This variable controls the position of the drop down.
+	//		It's an array of strings with the following values:
+	//
+	//			* before: places drop down to the left of the target node/widget, or to the right in
+	//			  the case of RTL scripts like Hebrew and Arabic
+	//			* after: places drop down to the right of the target node/widget, or to the left in
+	//			  the case of RTL scripts like Hebrew and Arabic
+	//			* above: drop down goes above target node
+	//			* below: drop down goes below target node
+	//
+	//		The list is positions is tried, in order, until a position is found where the drop down fits
+	//		within the viewport.
+	//
+	// leftToRight: Boolean
+	//		Whether the popup will be displaying in leftToRight mode.
+	//
+	var align = {};
+	dojo.forEach(position, function(pos){
+		switch(pos){
+			case "after":
+				align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
+				break;
+			case "before":
+				align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
+				break;
+			case "below":
+				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
+				align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
+				align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
+				break;
+			case "above":
+			default:
+				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
+				align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
+				align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
+				break;
+		}
+	});
+	return align;
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.window"] = true;
+dojo.provide("dijit._base.window");
+
+
+
+dijit.getDocumentWindow = function(doc){
+	return dojo.window.get(doc);
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.popup"] = true;
+dojo.provide("dijit._base.popup");
+
+
+
+
+
+/*=====
+dijit.popup.__OpenArgs = function(){
+	// popup: Widget
+	//		widget to display
+	// parent: Widget
+	//		the button etc. that is displaying this popup
+	// around: DomNode
+	//		DOM node (typically a button); place popup relative to this node.  (Specify this *or* "x" and "y" parameters.)
+	// x: Integer
+	//		Absolute horizontal position (in pixels) to place node at.  (Specify this *or* "around" parameter.)
+	// y: Integer
+	//		Absolute vertical position (in pixels) to place node at.  (Specify this *or* "around" parameter.)
+	// orient: Object|String
+	//		When the around parameter is specified, orient should be an
+	//		ordered list of tuples of the form (around-node-corner, popup-node-corner).
+	//		dijit.popup.open() tries to position the popup according to each tuple in the list, in order,
+	//		until the popup appears fully within the viewport.
+	//
+	//		The default value is {BL:'TL', TL:'BL'}, which represents a list of two tuples:
+	//			1. (BL, TL)
+	//			2. (TL, BL)
+	//		where BL means "bottom left" and "TL" means "top left".
+	//		So by default, it first tries putting the popup below the around node, left-aligning them,
+	//		and then tries to put it above the around node, still left-aligning them.   Note that the
+	//		default is horizontally reversed when in RTL mode.
+	//
+	//		When an (x,y) position is specified rather than an around node, orient is either
+	//		"R" or "L".  R (for right) means that it tries to put the popup to the right of the mouse,
+	//		specifically positioning the popup's top-right corner at the mouse position, and if that doesn't
+	//		fit in the viewport, then it tries, in order, the bottom-right corner, the top left corner,
+	//		and the top-right corner.
+	// onCancel: Function
+	//		callback when user has canceled the popup by
+	//			1. hitting ESC or
+	//			2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
+	//			   i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
+	// onClose: Function
+	//		callback whenever this popup is closed
+	// onExecute: Function
+	//		callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
+	// padding: dijit.__Position
+	//		adding a buffer around the opening position. This is only useful when around is not set.
+	this.popup = popup;
+	this.parent = parent;
+	this.around = around;
+	this.x = x;
+	this.y = y;
+	this.orient = orient;
+	this.onCancel = onCancel;
+	this.onClose = onClose;
+	this.onExecute = onExecute;
+	this.padding = padding;
+}
+=====*/
+
+dijit.popup = {
+	// summary:
+	//		This singleton is used to show/hide widgets as popups.
+
+	// _stack: dijit._Widget[]
+	//		Stack of currently popped up widgets.
+	//		(someone opened _stack[0], and then it opened _stack[1], etc.)
+	_stack: [],
+	
+	// _beginZIndex: Number
+	//		Z-index of the first popup.   (If first popup opens other
+	//		popups they get a higher z-index.)
+	_beginZIndex: 1000,
+
+	_idGen: 1,
+
+	moveOffScreen: function(/*DomNode*/ node){
+		// summary:
+		//		Initialization for nodes that will be used as popups
+		//
+		// description:
+		//		Puts node inside a wrapper <div>, and
+		//		positions wrapper div off screen, but not display:none, so that
+		//		the widget doesn't appear in the page flow and/or cause a blank
+		//		area at the bottom of the viewport (making scrollbar longer), but
+		//		initialization of contained widgets works correctly
+
+		var wrapper = node.parentNode;
+
+		// Create a wrapper widget for when this node (in the future) will be used as a popup.
+		// This is done early because of IE bugs where creating/moving DOM nodes causes focus
+		// to go wonky, see tests/robot/Toolbar.html to reproduce
+		if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
+			wrapper = dojo.create("div",{
+				"class":"dijitPopup",
+				style:{
+					visibility:"hidden",
+					top: "-9999px"
+				}
+			}, dojo.body());
+			dijit.setWaiRole(wrapper, "presentation");
+			wrapper.appendChild(node);
+		}
+
+
+		var s = node.style;
+		s.display = "";
+		s.visibility = "";
+		s.position = "";
+		s.top = "0px";
+
+		dojo.style(wrapper, {
+			visibility: "hidden",
+			// prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
+			top: "-9999px"
+		});
+	},
+
+	getTopPopup: function(){
+		// summary:
+		//		Compute the closest ancestor popup that's *not* a child of another popup.
+		//		Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
+		var stack = this._stack;
+		for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){
+			/* do nothing, just trying to get right value for pi */
+		}
+		return stack[pi];
+	},
+
+	open: function(/*dijit.popup.__OpenArgs*/ args){
+		// summary:
+		//		Popup the widget at the specified position
+		//
+		// example:
+		//		opening at the mouse position
+		//		|		dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
+		//
+		// example:
+		//		opening the widget as a dropdown
+		//		|		dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}});
+		//
+		//		Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback
+		//		(fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
+
+		var stack = this._stack,
+			widget = args.popup,
+			orient = args.orient || (
+				(args.parent ? args.parent.isLeftToRight() : dojo._isBodyLtr()) ?
+				{'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'} :
+				{'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'}
+			),
+			around = args.around,
+			id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+this._idGen++);
+
+
+		// The wrapper may have already been created, but in case it wasn't, create here
+		var wrapper = widget.domNode.parentNode;
+		if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
+			this.moveOffScreen(widget.domNode);
+			wrapper = widget.domNode.parentNode;
+		}
+
+		dojo.attr(wrapper, {
+			id: id,
+			style: {
+				zIndex: this._beginZIndex + stack.length
+			},
+			"class": "dijitPopup " + (widget.baseClass || widget["class"] || "").split(" ")[0] +"Popup",
+			dijitPopupParent: args.parent ? args.parent.id : ""
+		});
+
+		if(dojo.isIE || dojo.isMoz){
+			var iframe = wrapper.childNodes[1];
+			if(!iframe){
+				iframe = new dijit.BackgroundIframe(wrapper);
+			}
+		}
+
+		// position the wrapper node and make it visible
+		var best = around ?
+			dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
+			dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR'], args.padding);
+
+		wrapper.style.visibility = "visible";
+		widget.domNode.style.visibility = "visible";	// counteract effects from _HasDropDown
+
+		var handlers = [];
+
+		// provide default escape and tab key handling
+		// (this will work for any widget, not just menu)
+		handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
+			if(evt.charOrCode == dojo.keys.ESCAPE && args.onCancel){
+				dojo.stopEvent(evt);
+				args.onCancel();
+			}else if(evt.charOrCode === dojo.keys.TAB){
+				dojo.stopEvent(evt);
+				var topPopup = this.getTopPopup();
+				if(topPopup && topPopup.onCancel){
+					topPopup.onCancel();
+				}
+			}
+		}));
+
+		// watch for cancel/execute events on the popup and notify the caller
+		// (for a menu, "execute" means clicking an item)
+		if(widget.onCancel){
+			handlers.push(dojo.connect(widget, "onCancel", args.onCancel));
+		}
+
+		handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", this, function(){
+			var topPopup = this.getTopPopup();
+			if(topPopup && topPopup.onExecute){
+				topPopup.onExecute();
+			}
+		}));
+
+		stack.push({
+			wrapper: wrapper,
+			iframe: iframe,
+			widget: widget,
+			parent: args.parent,
+			onExecute: args.onExecute,
+			onCancel: args.onCancel,
+ 			onClose: args.onClose,
+			handlers: handlers
+		});
+
+		if(widget.onOpen){
+			// TODO: in 2.0 standardize onShow() (used by StackContainer) and onOpen() (used here)
+			widget.onOpen(best);
+		}
+
+		return best;
+	},
+
+	close: function(/*dijit._Widget*/ popup){
+		// summary:
+		//		Close specified popup and any popups that it parented
+
+		var stack = this._stack;
+
+		// Basically work backwards from the top of the stack closing popups
+		// until we hit the specified popup, but IIRC there was some issue where closing
+		// a popup would cause others to close too.  Thus if we are trying to close B in [A,B,C]
+		// closing C might close B indirectly and then the while() condition will run where stack==[A]...
+		// so the while condition is constructed defensively.
+		while(dojo.some(stack, function(elem){return elem.widget == popup;})){
+			var top = stack.pop(),
+				wrapper = top.wrapper,
+				iframe = top.iframe,
+				widget = top.widget,
+				onClose = top.onClose;
+
+			if(widget.onClose){
+				// TODO: in 2.0 standardize onHide() (used by StackContainer) and onClose() (used here)
+				widget.onClose();
+			}
+			dojo.forEach(top.handlers, dojo.disconnect);
+
+			// Move the widget plus it's wrapper off screen, unless it has already been destroyed in above onClose() etc.
+			if(widget && widget.domNode){
+				this.moveOffScreen(widget.domNode);
+			}else{
+				dojo.destroy(wrapper);
+			}
+                        
+			if(onClose){
+				onClose();
+			}
+		}
+	}
+};
+
+dijit._frames = new function(){
+	// summary:
+	//		cache of iframes
+	var queue = [];
+
+	this.pop = function(){
+		var iframe;
+		if(queue.length){
+			iframe = queue.pop();
+			iframe.style.display="";
+		}else{
+			if(dojo.isIE){
+				var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\"";
+				var html="<iframe src='" + burl + "'"
+					+ " style='position: absolute; left: 0px; top: 0px;"
+					+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
+				iframe = dojo.doc.createElement(html);
+			}else{
+			 	iframe = dojo.create("iframe");
+				iframe.src = 'javascript:""';
+				iframe.className = "dijitBackgroundIframe";
+				dojo.style(iframe, "opacity", 0.1);
+			}
+			iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
+			dijit.setWaiRole(iframe,"presentation");
+		}
+		return iframe;
+	};
+
+	this.push = function(iframe){
+		iframe.style.display="none";
+		queue.push(iframe);
+	}
+}();
+
+
+dijit.BackgroundIframe = function(/* DomNode */node){
+	// summary:
+	//		For IE/FF z-index schenanigans. id attribute is required.
+	//
+	// description:
+	//		new dijit.BackgroundIframe(node)
+	//			Makes a background iframe as a child of node, that fills
+	//			area (and position) of node
+
+	if(!node.id){ throw new Error("no id"); }
+	if(dojo.isIE || dojo.isMoz){
+		var iframe = dijit._frames.pop();
+		node.appendChild(iframe);
+		if(dojo.isIE<7){
+			this.resize(node);
+			this._conn = dojo.connect(node, 'onresize', this, function(){
+				this.resize(node);
+			});
+		}else{
+			dojo.style(iframe, {
+				width: '100%',
+				height: '100%'
+			});
+		}
+		this.iframe = iframe;
+	}
+};
+
+dojo.extend(dijit.BackgroundIframe, {
+	resize: function(node){
+		// summary:
+		// 		resize the iframe so its the same size as node
+		// description:
+		//		this function is a no-op in all browsers except
+		//		IE6, which does not support 100% width/height 
+		//		of absolute positioned iframes
+		if(this.iframe && dojo.isIE<7){
+			dojo.style(this.iframe, {
+				width: node.offsetWidth + 'px',
+				height: node.offsetHeight + 'px'
+			});
+		}
+	},
+	destroy: function(){
+		// summary:
+		//		destroy the iframe
+		if(this._conn){
+			dojo.disconnect(this._conn);
+			this._conn = null;
+		}
+		if(this.iframe){
+			dijit._frames.push(this.iframe);
+			delete this.iframe;
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.scroll"] = true;
+dojo.provide("dijit._base.scroll");
+
+
+
+dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+	// summary:
+	//		Scroll the passed node into view, if it is not already.
+	//		Deprecated, use `dojo.window.scrollIntoView` instead.
+	
+	dojo.window.scrollIntoView(node, pos);
+};
+
+}
+
+if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.uacss"] = true;
+dojo.provide("dojo.uacss");
+
+(function(){
+	// summary:
+	//		Applies pre-set CSS classes to the top-level HTML node, based on:
+	// 			- browser (ex: dj_ie)
+	//			- browser version (ex: dj_ie6)
+	//			- box model (ex: dj_contentBox)
+	//			- text direction (ex: dijitRtl)
+	//
+	//		In addition, browser, browser version, and box model are
+	//		combined with an RTL flag when browser text is RTL.  ex: dj_ie-rtl.
+
+	var d = dojo,
+		html = d.doc.documentElement,
+		ie = d.isIE,
+		opera = d.isOpera,
+		maj = Math.floor,
+		ff = d.isFF,
+		boxModel = d.boxModel.replace(/-/,''),
+
+		classes = {
+			dj_ie: ie,
+			dj_ie6: maj(ie) == 6,
+			dj_ie7: maj(ie) == 7,
+			dj_ie8: maj(ie) == 8,
+			dj_quirks: d.isQuirks,
+			dj_iequirks: ie && d.isQuirks,
+
+			// NOTE: Opera not supported by dijit
+			dj_opera: opera,
+
+			dj_khtml: d.isKhtml,
+
+			dj_webkit: d.isWebKit,
+			dj_safari: d.isSafari,
+			dj_chrome: d.isChrome,
+
+			dj_gecko: d.isMozilla,
+			dj_ff3: maj(ff) == 3
+		}; // no dojo unsupported browsers
+
+	classes["dj_" + boxModel] = true;
+
+	// apply browser, browser version, and box model class names
+	var classStr = "";
+	for(var clz in classes){
+		if(classes[clz]){
+			classStr += clz + " ";
+		}
+	}
+	html.className = d.trim(html.className + " " + classStr);
+
+	// If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension.
+	// We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).  
+	// Unshift() is to run sniff code before the parser.
+	dojo._loaders.unshift(function(){
+		if(!dojo._isBodyLtr()){
+			var rtlClassStr = "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl ")
+			html.className = d.trim(html.className + " " + rtlClassStr);
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.sniff"] = true;
+// summary:
+//		Applies pre-set CSS classes to the top-level HTML node, see
+//		`dojo.uacss` for details.
+//
+//		Simply doing a require on this module will
+//		establish this CSS.  Modified version of Morris' CSS hack.
+
+dojo.provide("dijit._base.sniff");
+
+
+
+}
+
+if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.typematic"] = true;
+dojo.provide("dijit._base.typematic");
+
+dijit.typematic = {
+	// summary:
+	//		These functions are used to repetitively call a user specified callback
+	//		method when a specific key or mouse click over a specific DOM node is
+	//		held down for a specific amount of time.
+	//		Only 1 such event is allowed to occur on the browser page at 1 time.
+
+	_fireEventAndReload: function(){
+		this._timer = null;
+		this._callback(++this._count, this._node, this._evt);
+		
+		// Schedule next event, timer is at most minDelay (default 10ms) to avoid
+		// browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup)
+		this._currentTimeout = Math.max(
+			this._currentTimeout < 0 ? this._initialDelay :
+				(this._subsequentDelay > 1 ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay)),
+			this._minDelay);
+		this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
+	},
+
+	trigger: function(/*Event*/ evt, /*Object*/ _this, /*DOMNode*/ node, /*Function*/ callback, /*Object*/ obj, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start a timed, repeating callback sequence.
+		//		If already started, the function call is ignored.
+		//		This method is not normally called by the user but can be
+		//		when the normal listener code is insufficient.
+		// evt:
+		//		key or mouse event object to pass to the user callback
+		// _this:
+		//		pointer to the user's widget space.
+		// node:
+		//		the DOM node object to pass the the callback function
+		// callback:
+		//		function to call until the sequence is stopped called with 3 parameters:
+		// count:
+		//		integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
+		// node:
+		//		the DOM node object passed in
+		// evt:
+		//		key or mouse event object
+		// obj:
+		//		user space object used to uniquely identify each typematic sequence
+		// subsequentDelay (optional):
+		//		if > 1, the number of milliseconds until the 3->n events occur
+		//		or else the fractional time multiplier for the next event's delay, default=0.9
+		// initialDelay (optional):
+		//		the number of milliseconds until the 2nd event occurs, default=500ms
+		// minDelay (optional):
+		//		the maximum delay in milliseconds for event to fire, default=10ms
+		if(obj != this._obj){
+			this.stop();
+			this._initialDelay = initialDelay || 500;
+			this._subsequentDelay = subsequentDelay || 0.90;
+			this._minDelay = minDelay || 10;
+			this._obj = obj;
+			this._evt = evt;
+			this._node = node;
+			this._currentTimeout = -1;
+			this._count = -1;
+			this._callback = dojo.hitch(_this, callback);
+			this._fireEventAndReload();
+			this._evt = dojo.mixin({faux: true}, evt);
+		}
+	},
+
+	stop: function(){
+		// summary:
+		//		Stop an ongoing timed, repeating callback sequence.
+		if(this._timer){
+			clearTimeout(this._timer);
+			this._timer = null;
+		}
+		if(this._obj){
+			this._callback(-1, this._node, this._evt);
+			this._obj = null;
+		}
+	},
+
+	addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a specific typematic key.
+		//		See also the trigger method for other parameters.
+		// keyObject:
+		//		an object defining the key to listen for:
+		// 		charOrCode:
+		//			the printable character (string) or keyCode (number) to listen for.
+		// 		keyCode:
+		//			(deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0).
+		// 		charCode:
+		//			(deprecated - use charOrCode) the charCode (number) to listen for.
+		// 		ctrlKey:
+		//			desired ctrl key state to initiate the callback sequence:
+		//			- pressed (true)
+		//			- released (false)
+		//			- either (unspecified)
+		// 		altKey:
+		//			same as ctrlKey but for the alt key
+		// 		shiftKey:
+		//			same as ctrlKey but for the shift key
+		// returns:
+		//		an array of dojo.connect handles
+		if(keyObject.keyCode){
+			keyObject.charOrCode = keyObject.keyCode;
+			dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+		}else if(keyObject.charCode){
+			keyObject.charOrCode = String.fromCharCode(keyObject.charCode);
+			dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+		}
+		return [
+			dojo.connect(node, "onkeypress", this, function(evt){
+				if(evt.charOrCode == keyObject.charOrCode &&
+				(keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
+				(keyObject.altKey === undefined || keyObject.altKey == evt.altKey) &&
+				(keyObject.metaKey === undefined || keyObject.metaKey == (evt.metaKey || false)) && // IE doesn't even set metaKey
+				(keyObject.shiftKey === undefined || keyObject.shiftKey == evt.shiftKey)){
+					dojo.stopEvent(evt);
+					dijit.typematic.trigger(evt, _this, node, callback, keyObject, subsequentDelay, initialDelay, minDelay);
+				}else if(dijit.typematic._obj == keyObject){
+					dijit.typematic.stop();
+				}
+			}),
+			dojo.connect(node, "onkeyup", this, function(evt){
+				if(dijit.typematic._obj == keyObject){
+					dijit.typematic.stop();
+				}
+			})
+		];
+	},
+
+	addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a typematic mouse click.
+		//		See the trigger method for other parameters.
+		// returns:
+		//		an array of dojo.connect handles
+		var dc = dojo.connect;
+		return [
+			dc(node, "mousedown", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
+			}),
+			dc(node, "mouseup", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.stop();
+			}),
+			dc(node, "mouseout", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.stop();
+			}),
+			dc(node, "mousemove", this, function(evt){
+				evt.preventDefault();
+			}),
+			dc(node, "dblclick", this, function(evt){
+				dojo.stopEvent(evt);
+				if(dojo.isIE){
+					dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
+					setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
+				}
+			})
+		];
+	},
+
+	addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a specific typematic key and mouseclick.
+		//		This is a thin wrapper to addKeyListener and addMouseListener.
+		//		See the addMouseListener and addKeyListener methods for other parameters.
+		// mouseNode:
+		//		the DOM node object to listen on for mouse events.
+		// keyNode:
+		//		the DOM node object to listen on for key events.
+		// returns:
+		//		an array of dojo.connect handles
+		return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay, minDelay).concat(
+			this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay, minDelay));
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.wai"] = true;
+dojo.provide("dijit._base.wai");
+
+dijit.wai = {
+	onload: function(){
+		// summary:
+		//		Detects if we are in high-contrast mode or not
+
+		// This must be a named function and not an anonymous
+		// function, so that the widget parsing code can make sure it
+		// registers its onload function after this function.
+		// DO NOT USE "this" within this function.
+
+		// create div for testing if high contrast mode is on or images are turned off
+		var div = dojo.create("div",{
+			id: "a11yTestNode",
+			style:{
+				cssText:'border: 1px solid;'
+					+ 'border-color:red green;'
+					+ 'position: absolute;'
+					+ 'height: 5px;'
+					+ 'top: -999px;'
+					+ 'background-image: url("' + (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")) + '");'
+			}
+		}, dojo.body());
+
+		// test it
+		var cs = dojo.getComputedStyle(div);
+		if(cs){
+			var bkImg = cs.backgroundImage;
+			var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
+			dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
+			if(dojo.isIE){
+				div.outerHTML = "";		// prevent mixed-content warning, see http://support.microsoft.com/kb/925014
+			}else{
+				dojo.body().removeChild(div);
+			}
+		}
+	}
+};
+
+// Test if computer is in high contrast mode.
+// Make sure the a11y test runs first, before widgets are instantiated.
+if(dojo.isIE || dojo.isMoz){	// NOTE: checking in Safari messes things up
+	dojo._loaders.unshift(dijit.wai.onload);
+}
+
+dojo.mixin(dijit, {
+	_XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,
+
+	hasWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Determines if an element has a particular non-XHTML role.
+		// returns:
+		//		True if elem has the specific non-XHTML role attribute and false if not.
+		// 		For backwards compatibility if role parameter not provided,
+		// 		returns true if has non XHTML role
+		var waiRole = this.getWaiRole(elem);
+		return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
+	},
+
+	getWaiRole: function(/*Element*/ elem){
+		// summary:
+		//		Gets the non-XHTML role for an element (which should be a wai role).
+		// returns:
+		//		The non-XHTML role of elem or an empty string if elem
+		//		does not have a role.
+		 return dojo.trim((dojo.attr(elem, "role") || "").replace(this._XhtmlRoles,"").replace("wairole:",""));
+	},
+
+	setWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Sets the role on an element.
+		// description:
+		//		Replace existing role attribute with new role.
+		//		If elem already has an XHTML role, append this role to XHTML role
+		//		and remove other ARIA roles.
+
+		var curRole = dojo.attr(elem, "role") || "";
+		if(!this._XhtmlRoles.test(curRole)){
+			dojo.attr(elem, "role", role);
+		}else{
+			if((" "+ curRole +" ").indexOf(" " + role + " ") < 0){
+				var clearXhtml = dojo.trim(curRole.replace(this._XhtmlRoles, ""));
+				var cleanRole = dojo.trim(curRole.replace(clearXhtml, ""));
+				dojo.attr(elem, "role", cleanRole + (cleanRole ? ' ' : '') + role);
+			}
+		}
+	},
+
+	removeWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Removes the specified non-XHTML role from an element.
+		// 		Removes role attribute if no specific role provided (for backwards compat.)
+
+		var roleValue = dojo.attr(elem, "role");
+		if(!roleValue){ return; }
+		if(role){
+			var t = dojo.trim((" " + roleValue + " ").replace(" " + role + " ", " "));
+			dojo.attr(elem, "role", t);
+		}else{
+			elem.removeAttribute("role");
+		}
+	},
+
+	hasWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Determines if an element has a given state.
+		// description:
+		//		Checks for an attribute called "aria-"+state.
+		// returns:
+		//		true if elem has a value for the given state and
+		//		false if it does not.
+
+		return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
+	},
+
+	getWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Gets the value of a state on an element.
+		// description:
+		//		Checks for an attribute called "aria-"+state.
+		// returns:
+		//		The value of the requested state on elem
+		//		or an empty string if elem has no value for state.
+
+		return elem.getAttribute("aria-"+state) || "";
+	},
+
+	setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
+		// summary:
+		//		Sets a state on an element.
+		// description:
+		//		Sets an attribute called "aria-"+state.
+
+		elem.setAttribute("aria-"+state, value);
+	},
+
+	removeWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Removes a state from an element.
+		// description:
+		//		Sets an attribute called "aria-"+state.
+
+		elem.removeAttribute("aria-"+state);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base"] = true;
+dojo.provide("dijit._base");
+
+
+
+
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date.stamp"] = true;
+dojo.provide("dojo.date.stamp");
+
+// Methods to convert dates to or from a wire (string) format using well-known conventions
+
+dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
+	//	summary:
+	//		Returns a Date object given a string formatted according to a subset of the ISO-8601 standard.
+	//
+	//	description:
+	//		Accepts a string formatted according to a profile of ISO8601 as defined by
+	//		[RFC3339](http://www.ietf.org/rfc/rfc3339.txt), except that partial input is allowed.
+	//		Can also process dates as specified [by the W3C](http://www.w3.org/TR/NOTE-datetime)
+	//		The following combinations are valid:
+	//
+	//			* dates only
+	//			|	* yyyy
+	//			|	* yyyy-MM
+	//			|	* yyyy-MM-dd
+	// 			* times only, with an optional time zone appended
+	//			|	* THH:mm
+	//			|	* THH:mm:ss
+	//			|	* THH:mm:ss.SSS
+	// 			* and "datetimes" which could be any combination of the above
+	//
+	//		timezones may be specified as Z (for UTC) or +/- followed by a time expression HH:mm
+	//		Assumes the local time zone if not specified.  Does not validate.  Improperly formatted
+	//		input may return null.  Arguments which are out of bounds will be handled
+	// 		by the Date constructor (e.g. January 32nd typically gets resolved to February 1st)
+	//		Only years between 100 and 9999 are supported.
+	//
+  	//	formattedString:
+	//		A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00
+	//
+	//	defaultTime:
+	//		Used for defaults for fields omitted in the formattedString.
+	//		Uses 1970-01-01T00:00:00.0Z by default.
+
+	if(!dojo.date.stamp._isoRegExp){
+		dojo.date.stamp._isoRegExp =
+//TODO: could be more restrictive and check for 00-59, etc.
+			/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
+	}
+
+	var match = dojo.date.stamp._isoRegExp.exec(formattedString),
+		result = null;
+
+	if(match){
+		match.shift();
+		if(match[1]){match[1]--;} // Javascript Date months are 0-based
+		if(match[6]){match[6] *= 1000;} // Javascript Date expects fractional seconds as milliseconds
+
+		if(defaultTime){
+			// mix in defaultTime.  Relatively expensive, so use || operators for the fast path of defaultTime === 0
+			defaultTime = new Date(defaultTime);
+			dojo.forEach(dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){
+				return defaultTime["get" + prop]();
+			}), function(value, index){
+				match[index] = match[index] || value;
+			});
+		}
+		result = new Date(match[0]||1970, match[1]||0, match[2]||1, match[3]||0, match[4]||0, match[5]||0, match[6]||0); //TODO: UTC defaults
+		if(match[0] < 100){
+			result.setFullYear(match[0] || 1970);
+		}
+
+		var offset = 0,
+			zoneSign = match[7] && match[7].charAt(0);
+		if(zoneSign != 'Z'){
+			offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
+			if(zoneSign != '-'){ offset *= -1; }
+		}
+		if(zoneSign){
+			offset -= result.getTimezoneOffset();
+		}
+		if(offset){
+			result.setTime(result.getTime() + offset * 60000);
+		}
+	}
+
+	return result; // Date or null
+}
+
+/*=====
+	dojo.date.stamp.__Options = function(){
+		//	selector: String
+		//		"date" or "time" for partial formatting of the Date object.
+		//		Both date and time will be formatted by default.
+		//	zulu: Boolean
+		//		if true, UTC/GMT is used for a timezone
+		//	milliseconds: Boolean
+		//		if true, output milliseconds
+		this.selector = selector;
+		this.zulu = zulu;
+		this.milliseconds = milliseconds;
+	}
+=====*/
+
+dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){
+	//	summary:
+	//		Format a Date object as a string according a subset of the ISO-8601 standard
+	//
+	//	description:
+	//		When options.selector is omitted, output follows [RFC3339](http://www.ietf.org/rfc/rfc3339.txt)
+	//		The local time zone is included as an offset from GMT, except when selector=='time' (time without a date)
+	//		Does not check bounds.  Only years between 100 and 9999 are supported.
+	//
+	//	dateObject:
+	//		A Date object
+
+	var _ = function(n){ return (n < 10) ? "0" + n : n; };
+	options = options || {};
+	var formattedDate = [],
+		getter = options.zulu ? "getUTC" : "get",
+		date = "";
+	if(options.selector != "time"){
+		var year = dateObject[getter+"FullYear"]();
+		date = ["0000".substr((year+"").length)+year, _(dateObject[getter+"Month"]()+1), _(dateObject[getter+"Date"]())].join('-');
+	}
+	formattedDate.push(date);
+	if(options.selector != "date"){
+		var time = [_(dateObject[getter+"Hours"]()), _(dateObject[getter+"Minutes"]()), _(dateObject[getter+"Seconds"]())].join(':');
+		var millis = dateObject[getter+"Milliseconds"]();
+		if(options.milliseconds){
+			time += "."+ (millis < 100 ? "0" : "") + _(millis);
+		}
+		if(options.zulu){
+			time += "Z";
+		}else if(options.selector != "time"){
+			var timezoneOffset = dateObject.getTimezoneOffset();
+			var absOffset = Math.abs(timezoneOffset);
+			time += (timezoneOffset > 0 ? "-" : "+") + 
+				_(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
+		}
+		formattedDate.push(time);
+	}
+	return formattedDate.join('T'); // String
+}
+
+}
+
+if(!dojo._hasResource["dojo.parser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.parser"] = true;
+dojo.provide("dojo.parser");
+
+
+new Date("X"); // workaround for #11279, new Date("") == NaN
+
+dojo.parser = new function(){
+	// summary: The Dom/Widget parsing package
+
+	var d = dojo;
+	this._attrName = d._scopeName + "Type";
+	this._query = "[" + this._attrName + "]";
+
+	function val2type(/*Object*/ value){
+		// summary:
+		//		Returns name of type of given value.
+
+		if(d.isString(value)){ return "string"; }
+		if(typeof value == "number"){ return "number"; }
+		if(typeof value == "boolean"){ return "boolean"; }
+		if(d.isFunction(value)){ return "function"; }
+		if(d.isArray(value)){ return "array"; } // typeof [] == "object"
+		if(value instanceof Date) { return "date"; } // assume timestamp
+		if(value instanceof d._Url){ return "url"; }
+		return "object";
+	}
+
+	function str2obj(/*String*/ value, /*String*/ type){
+		// summary:
+		//		Convert given string value to given type
+		switch(type){
+			case "string":
+				return value;
+			case "number":
+				return value.length ? Number(value) : NaN;
+			case "boolean":
+				// for checked/disabled value might be "" or "checked".  interpret as true.
+				return typeof value == "boolean" ? value : !(value.toLowerCase()=="false");
+			case "function":
+				if(d.isFunction(value)){
+					// IE gives us a function, even when we say something like onClick="foo"
+					// (in which case it gives us an invalid function "function(){ foo }"). 
+					//  Therefore, convert to string
+					value=value.toString();
+					value=d.trim(value.substring(value.indexOf('{')+1, value.length-1));
+				}
+				try{
+					if(value === "" || value.search(/[^\w\.]+/i) != -1){
+						// The user has specified some text for a function like "return x+5"
+						return new Function(value);
+					}else{
+						// The user has specified the name of a function like "myOnClick"
+						// or a single word function "return"
+						return d.getObject(value, false) || new Function(value);
+					}
+				}catch(e){ return new Function(); }
+			case "array":
+				return value ? value.split(/\s*,\s*/) : [];
+			case "date":
+				switch(value){
+					case "": return new Date("");	// the NaN of dates
+					case "now": return new Date();	// current date
+					default: return d.date.stamp.fromISOString(value);
+				}
+			case "url":
+				return d.baseUrl + value;
+			default:
+				return d.fromJson(value);
+		}
+	}
+
+	var instanceClasses = {
+		// map from fully qualified name (like "dijit.Button") to structure like
+		// { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
+	};
+
+	// Widgets like BorderContainer add properties to _Widget via dojo.extend().
+	// If BorderContainer is loaded after _Widget's parameter list has been cached,
+	// we need to refresh that parameter list (for _Widget and all widgets that extend _Widget).
+	dojo.connect(dojo, "extend", function(){
+		instanceClasses = {};
+	});
+
+	function getClassInfo(/*String*/ className){
+		// className:
+		//		fully qualified name (like "dijit.form.Button")
+		// returns:
+		//		structure like
+		//			{ 
+		//				cls: dijit.Button, 
+		//				params: { label: "string", disabled: "boolean"}
+		//			}
+
+		if(!instanceClasses[className]){
+			// get pointer to widget class
+			var cls = d.getObject(className);
+			if(!cls){ return null; }		// class not defined [yet]
+
+			var proto = cls.prototype;
+	
+			// get table of parameter names & types
+			var params = {}, dummyClass = {};
+			for(var name in proto){
+				if(name.charAt(0)=="_"){ continue; } 	// skip internal properties
+				if(name in dummyClass){ continue; }		// skip "constructor" and "toString"
+				var defVal = proto[name];
+				params[name]=val2type(defVal);
+			}
+
+			instanceClasses[className] = { cls: cls, params: params };
+		}
+		return instanceClasses[className];
+	}
+
+	this._functionFromScript = function(script){
+		var preamble = "";
+		var suffix = "";
+		var argsStr = script.getAttribute("args");
+		if(argsStr){
+			d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
+				preamble += "var "+part+" = arguments["+idx+"]; ";
+			});
+		}
+		var withStr = script.getAttribute("with");
+		if(withStr && withStr.length){
+			d.forEach(withStr.split(/\s*,\s*/), function(part){
+				preamble += "with("+part+"){";
+				suffix += "}";
+			});
+		}
+		return new Function(preamble+script.innerHTML+suffix);
+	}
+
+	this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){
+		// summary:
+		//		Takes array of nodes, and turns them into class instances and
+		//		potentially calls a startup method to allow them to connect with
+		//		any children.
+		// nodes: Array
+		//		Array of nodes or objects like
+		//	|		{
+		//	|			type: "dijit.form.Button",
+		//	|			node: DOMNode,
+		//	|			scripts: [ ... ],	// array of <script type="dojo/..."> children of node
+		//	|			inherited: { ... }	// settings inherited from ancestors like dir, theme, etc.
+		//	|		}
+		// mixin: Object?
+		//		An object that will be mixed in with each node in the array.
+		//		Values in the mixin will override values in the node, if they
+		//		exist.
+		// args: Object?
+		//		An object used to hold kwArgs for instantiation.
+		//		Supports 'noStart' and inherited.
+		var thelist = [], dp = dojo.parser;
+		mixin = mixin||{};
+		args = args||{};
+		
+		d.forEach(nodes, function(obj){
+			if(!obj){ return; }
+
+			// Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s
+			var node, type, clsInfo, clazz, scripts;
+			if(obj.node){
+				// new format of nodes[] array, object w/lots of properties pre-computed for me
+				node = obj.node;
+				type = obj.type;
+				clsInfo = obj.clsInfo || (type && getClassInfo(type));
+				clazz = clsInfo && clsInfo.cls;
+				scripts = obj.scripts;
+			}else{
+				// old (backwards compatible) format of nodes[] array, simple array of DOMNodes
+				node = obj;
+				type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName);
+				clsInfo = type && getClassInfo(type);
+				clazz = clsInfo && clsInfo.cls;
+				scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : 
+							d.query("> script[type^='dojo/']", node));
+			}
+			if(!clsInfo){
+				throw new Error("Could not load class '" + type);
+			}
+
+			// Setup hash to hold parameter settings for this widget.   Start with the parameter
+			// settings inherited from ancestors ("dir" and "lang").
+			// Inherited setting may later be overridden by explicit settings on node itself.
+			var params = {},
+				attributes = node.attributes;
+			if(args.defaults){
+				// settings for the document itself (or whatever subtree is being parsed)
+				dojo.mixin(params, args.defaults);
+			}
+			if(obj.inherited){
+				// settings from dir=rtl or lang=... on a node above this node
+				dojo.mixin(params, obj.inherited);
+			}
+
+			// read parameters (ie, attributes) specified on DOMNode
+			// clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
+			for(var name in clsInfo.params){
+				var item = name in mixin?{value:mixin[name],specified:true}:attributes.getNamedItem(name);
+				if(!item || (!item.specified && (!dojo.isIE || name.toLowerCase()!="value"))){ continue; }
+				var value = item.value;
+				// Deal with IE quirks for 'class' and 'style'
+				switch(name){
+				case "class":
+					value = "className" in mixin?mixin.className:node.className;
+					break;
+				case "style":
+					value = "style" in mixin?mixin.style:(node.style && node.style.cssText); // FIXME: Opera?
+				}
+				var _type = clsInfo.params[name];
+				if(typeof value == "string"){
+					params[name] = str2obj(value, _type);
+				}else{
+					params[name] = value;
+				}
+			}
+
+			// Process <script type="dojo/*"> script tags
+			// <script type="dojo/method" event="foo"> tags are added to params, and passed to
+			// the widget on instantiation.
+			// <script type="dojo/method"> tags (with no event) are executed after instantiation
+			// <script type="dojo/connect" event="foo"> tags are dojo.connected after instantiation
+			// note: dojo/* script tags cannot exist in self closing widgets, like <input />
+			var connects = [],	// functions to connect after instantiation
+				calls = [];		// functions to call after instantiation
+
+			d.forEach(scripts, function(script){
+				node.removeChild(script);
+				var event = script.getAttribute("event"),
+					type = script.getAttribute("type"),
+					nf = d.parser._functionFromScript(script);
+				if(event){
+					if(type == "dojo/connect"){
+						connects.push({event: event, func: nf});
+					}else{
+						params[event] = nf;
+					}
+				}else{
+					calls.push(nf);
+				}
+			});
+
+			var markupFactory = clazz.markupFactory || clazz.prototype && clazz.prototype.markupFactory;
+			// create the instance
+			var instance = markupFactory ? markupFactory(params, node, clazz) : new clazz(params, node);
+			thelist.push(instance);
+
+			// map it to the JS namespace if that makes sense
+			var jsname = node.getAttribute("jsId");
+			if(jsname){
+				d.setObject(jsname, instance);
+			}
+
+			// process connections and startup functions
+			d.forEach(connects, function(connect){
+				d.connect(instance, connect.event, null, connect.func);
+			});
+			d.forEach(calls, function(func){
+				func.call(instance);
+			});
+		});
+
+		// Call startup on each top level instance if it makes sense (as for
+		// widgets).  Parent widgets will recursively call startup on their
+		// (non-top level) children
+		if(!mixin._started){
+			// TODO: for 2.0, when old instantiate() API is desupported, store parent-child
+			// relationships in the nodes[] array so that no getParent() call is needed.
+			// Note that will  require a parse() call from ContentPane setting a param that the
+			// ContentPane is the parent widget (so that the parse doesn't call startup() on the
+			// ContentPane's children)
+			d.forEach(thelist, function(instance){
+				if(	!args.noStart && instance  && 
+					instance.startup &&
+					!instance._started && 
+					(!instance.getParent || !instance.getParent())
+				){
+					instance.startup();
+				}
+			});
+		}
+		return thelist;
+	};
+
+	this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){
+		// summary:
+		//		Scan the DOM for class instances, and instantiate them.
+		//
+		// description:
+		//		Search specified node (or root node) recursively for class instances,
+		//		and instantiate them Searches for
+		//		dojoType="qualified.class.name"
+		//
+		// rootNode: DomNode?
+		//		A default starting root node from which to start the parsing. Can be
+		//		omitted, defaulting to the entire document. If omitted, the `args`
+		//		object can be passed in this place. If the `args` object has a 
+		//		`rootNode` member, that is used.
+		//
+		// args:
+		//		a kwArgs object passed along to instantiate()
+		//		
+		//			* noStart: Boolean?
+		//				when set will prevent the parser from calling .startup()
+		//				when locating the nodes. 
+		//			* rootNode: DomNode?
+		//				identical to the function's `rootNode` argument, though
+		//				allowed to be passed in via this `args object. 
+		//			* inherited: Object
+		//				Hash possibly containing dir and lang settings to be applied to
+		//				parsed widgets, unless there's another setting on a sub-node that overrides
+		//
+		//
+		// example:
+		//		Parse all widgets on a page:
+		//	|		dojo.parser.parse();
+		//
+		// example:
+		//		Parse all classes within the node with id="foo"
+		//	|		dojo.parser.parse(dojo.byId(foo));
+		//
+		// example:
+		//		Parse all classes in a page, but do not call .startup() on any 
+		//		child
+		//	|		dojo.parser.parse({ noStart: true })
+		//
+		// example:
+		//		Parse all classes in a node, but do not call .startup()
+		//	|		dojo.parser.parse(someNode, { noStart:true });
+		//	|		// or
+		// 	|		dojo.parser.parse({ noStart:true, rootNode: someNode });
+
+		// determine the root node based on the passed arguments.
+		var root;
+		if(!args && rootNode && rootNode.rootNode){
+			args = rootNode;
+			root = args.rootNode;
+		}else{
+			root = rootNode;
+		}
+
+		var attrName = this._attrName;
+		function scan(parent, list){
+			// summary:
+			//		Parent is an Object representing a DOMNode, with or without a dojoType specified.
+			//		Scan parent's children looking for nodes with dojoType specified, storing in list[].
+			//		If parent has a dojoType, also collects <script type=dojo/*> children and stores in parent.scripts[].
+			// parent: Object
+			//		Object representing the parent node, like
+			//	|	{
+			//	|		node: DomNode, 			// scan children of this node
+			//	|		inherited: {dir: "rtl"},	// dir/lang setting inherited from above node
+			//	|
+			//	|		// attributes only set if node has dojoType specified
+			//	|		scripts: [],			// empty array, put <script type=dojo/*> in here
+			//	|		clsInfo: { cls: dijit.form.Button, ...}
+			//	|	}
+			// list: DomNode[]
+			//		Output array of objects (same format as parent) representing nodes to be turned into widgets
+
+			// Effective dir and lang settings on parent node, either set directly or inherited from grandparent
+			var inherited = dojo.clone(parent.inherited);
+			dojo.forEach(["dir", "lang"], function(name){
+				var val = parent.node.getAttribute(name);
+				if(val){
+					inherited[name] = val;
+				}
+			});
+
+			// if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[].
+			var scripts = parent.scripts;
+
+			// unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively
+			var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser;
+
+			// scan parent's children looking for dojoType and <script type=dojo/*>
+			for(var child = parent.node.firstChild; child; child = child.nextSibling){
+				if(child.nodeType == 1){
+					var type = recurse && child.getAttribute(attrName);
+					if(type){
+						// if dojoType specified, add to output array of nodes to instantiate
+						var params = {
+							"type": type,
+							clsInfo: getClassInfo(type),	// note: won't find classes declared via dojo.Declaration
+							node: child,
+							scripts: [], // <script> nodes that are parent's children
+							inherited: inherited // dir & lang attributes inherited from parent
+						};
+						list.push(params);
+
+						// Recurse, collecting <script type="dojo/..."> children, and also looking for
+						// descendant nodes with dojoType specified (unless the widget has the stopParser flag),
+						scan(params, list);
+					}else if(scripts && child.nodeName.toLowerCase() == "script"){
+						// if <script type="dojo/...">, save in scripts[]
+						type = child.getAttribute("type");
+						if (type && /^dojo\//i.test(type)) {
+							scripts.push(child);
+						}
+					}else if(recurse){
+						// Recurse, looking for grandchild nodes with dojoType specified
+						scan({
+							node: child,
+							inherited: inherited
+						}, list);
+					}
+				}
+			}
+		}
+
+		// Make list of all nodes on page w/dojoType specified
+		var list = [];
+		scan({
+			node: root ? dojo.byId(root) : dojo.body(),
+			inherited: (args && args.inherited) || {
+				dir: dojo._isBodyLtr() ? "ltr" : "rtl"
+			}
+		}, list);
+
+		// go build the object instances
+		return this.instantiate(list, null, args); // Array
+	};
+}();
+
+//Register the parser callback. It should be the first callback
+//after the a11y test.
+
+(function(){
+	var parseRunner = function(){ 
+		if(dojo.config.parseOnLoad){
+			dojo.parser.parse(); 
+		}
+	};
+
+	// FIXME: need to clobber cross-dependency!!
+	if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
+		dojo._loaders.splice(1, 0, parseRunner);
+	}else{
+		dojo._loaders.unshift(parseRunner);
+	}
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Widget"] = true;
+dojo.provide("dijit._Widget");
+
+dojo.require( "dijit._base" );
+
+
+// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets'
+// DOM nodes) until someone actually needs to monitor that event.
+dojo.connect(dojo, "_connect",
+	function(/*dijit._Widget*/ widget, /*String*/ event){
+		if(widget && dojo.isFunction(widget._onConnect)){
+			widget._onConnect(event);
+		}
+	});
+
+dijit._connectOnUseEventHandler = function(/*Event*/ event){};
+
+// Keep track of where the last keydown event was, to help avoid generating
+// spurious ondijitclick events when:
+// 1. focus is on a <button> or <a>
+// 2. user presses then releases the ENTER key
+// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler
+// 4. onkeyup event fires, causing the ondijitclick handler to fire
+dijit._lastKeyDownNode = null;
+if(dojo.isIE){
+	(function(){
+		var keydownCallback = function(evt){
+			dijit._lastKeyDownNode = evt.srcElement;
+		};
+		dojo.doc.attachEvent('onkeydown', keydownCallback);
+		dojo.addOnWindowUnload(function(){
+			dojo.doc.detachEvent('onkeydown', keydownCallback);
+		});
+	})();
+}else{
+	dojo.doc.addEventListener('keydown', function(evt){
+		dijit._lastKeyDownNode = evt.target;
+	}, true);
+}
+
+(function(){
+
+var _attrReg = {},	// cached results from getSetterAttributes
+	getSetterAttributes = function(widget){
+		// summary:
+		//		Returns list of attributes with custom setters for specified widget
+		var dc = widget.declaredClass;
+		if(!_attrReg[dc]){
+			var r = [],
+				attrs,
+				proto = widget.constructor.prototype;
+			for(var fxName in proto){
+				if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){
+					r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1));
+				}
+			}
+			_attrReg[dc] = r;
+		}
+		return _attrReg[dc] || [];	// String[]
+	};
+
+dojo.declare("dijit._Widget", null, {
+	// summary:
+	//		Base class for all Dijit widgets.
+
+	// id: [const] String
+	//		A unique, opaque ID string that can be assigned by users or by the
+	//		system. If the developer passes an ID which is known not to be
+	//		unique, the specified ID is ignored and the system-generated ID is
+	//		used instead.
+	id: "",
+
+	// lang: [const] String
+	//		Rarely used.  Overrides the default Dojo locale used to render this widget,
+	//		as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
+	//		Value must be among the list of locales specified during by the Dojo bootstrap,
+	//		formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
+	lang: "",
+
+	// dir: [const] String
+	//		Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
+	//		attribute. Either left-to-right "ltr" or right-to-left "rtl".  If undefined, widgets renders in page's
+	//		default direction.
+	dir: "",
+
+	// class: String
+	//		HTML class attribute
+	"class": "",
+
+	// style: String||Object
+	//		HTML style attributes as cssText string or name/value hash
+	style: "",
+
+	// title: String
+	//		HTML title attribute.
+	//
+	//		For form widgets this specifies a tooltip to display when hovering over
+	//		the widget (just like the native HTML title attribute).
+	//
+	//		For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
+	//		etc., it's used to specify the tab label, accordion pane title, etc.
+	title: "",
+
+	// tooltip: String
+	//		When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
+	//		this specifies the tooltip to appear when the mouse is hovered over that text.
+	tooltip: "",
+
+	// baseClass: [protected] String
+	//		Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate
+	//		widget state.
+	baseClass: "",
+
+	// srcNodeRef: [readonly] DomNode
+	//		pointer to original DOM node
+	srcNodeRef: null,
+
+	// domNode: [readonly] DomNode
+	//		This is our visible representation of the widget! Other DOM
+	//		Nodes may by assigned to other properties, usually through the
+	//		template system's dojoAttachPoint syntax, but the domNode
+	//		property is the canonical "top level" node in widget UI.
+	domNode: null,
+
+	// containerNode: [readonly] DomNode
+	//		Designates where children of the source DOM node will be placed.
+	//		"Children" in this case refers to both DOM nodes and widgets.
+	//		For example, for myWidget:
+	//
+	//		|	<div dojoType=myWidget>
+	//		|		<b> here's a plain DOM node
+	//		|		<span dojoType=subWidget>and a widget</span>
+	//		|		<i> and another plain DOM node </i>
+	//		|	</div>
+	//
+	//		containerNode would point to:
+	//
+	//		|		<b> here's a plain DOM node
+	//		|		<span dojoType=subWidget>and a widget</span>
+	//		|		<i> and another plain DOM node </i>
+	//
+	//		In templated widgets, "containerNode" is set via a
+	//		dojoAttachPoint assignment.
+	//
+	//		containerNode must be defined for any widget that accepts innerHTML
+	//		(like ContentPane or BorderContainer or even Button), and conversely
+	//		is null for widgets that don't, like TextBox.
+	containerNode: null,
+
+/*=====
+	// _started: Boolean
+	//		startup() has completed.
+	_started: false,
+=====*/
+
+	// attributeMap: [protected] Object
+	//		attributeMap sets up a "binding" between attributes (aka properties)
+	//		of the widget and the widget's DOM.
+	//		Changes to widget attributes listed in attributeMap will be
+	//		reflected into the DOM.
+	//
+	//		For example, calling attr('title', 'hello')
+	//		on a TitlePane will automatically cause the TitlePane's DOM to update
+	//		with the new title.
+	//
+	//		attributeMap is a hash where the key is an attribute of the widget,
+	//		and the value reflects a binding to a:
+	//
+	//		- DOM node attribute
+	// |		focus: {node: "focusNode", type: "attribute"}
+	// 		Maps this.focus to this.focusNode.focus
+	//
+	//		- DOM node innerHTML
+	//	|		title: { node: "titleNode", type: "innerHTML" }
+	//		Maps this.title to this.titleNode.innerHTML
+	//
+	//		- DOM node innerText
+	//	|		title: { node: "titleNode", type: "innerText" }
+	//		Maps this.title to this.titleNode.innerText
+	//
+	//		- DOM node CSS class
+	// |		myClass: { node: "domNode", type: "class" }
+	//		Maps this.myClass to this.domNode.className
+	//
+	//		If the value is an array, then each element in the array matches one of the
+	//		formats of the above list.
+	//
+	//		There are also some shorthands for backwards compatibility:
+	//		- string --> { node: string, type: "attribute" }, for example:
+	//	|	"focusNode" ---> { node: "focusNode", type: "attribute" }
+	//		- "" --> { node: "domNode", type: "attribute" }
+	attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""},
+
+	// _deferredConnects: [protected] Object
+	//		attributeMap addendum for event handlers that should be connected only on first use
+	_deferredConnects: {
+		onClick: "",
+		onDblClick: "",
+		onKeyDown: "",
+		onKeyPress: "",
+		onKeyUp: "",
+		onMouseMove: "",
+		onMouseDown: "",
+		onMouseOut: "",
+		onMouseOver: "",
+		onMouseLeave: "",
+		onMouseEnter: "",
+		onMouseUp: ""
+	},
+
+	onClick: dijit._connectOnUseEventHandler,
+	/*=====
+	onClick: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of mouse click events.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onDblClick: dijit._connectOnUseEventHandler,
+	/*=====
+	onDblClick: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of mouse double click events.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyDown: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyDown: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of keys being pressed down.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyPress: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyPress: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of printable keys being typed.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyUp: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyUp: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of keys being released.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseDown: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseDown: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse button is pressed down.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseMove: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseMove: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseOut: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseOut: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseOver: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseOver: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseLeave: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseLeave: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves off of this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseEnter: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseEnter: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves onto this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseUp: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseUp: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse button is released.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+
+	// Constants used in templates
+
+	// _blankGif: [protected] String
+	//		Path to a blank 1x1 image.
+	//		Used by <img> nodes in templates that really get their image via CSS background-image.
+	_blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(),
+
+	//////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+	postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){
+		// summary:
+		//		Kicks off widget instantiation.  See create() for details.
+		// tags:
+		//		private
+		this.create(params, srcNodeRef);
+	},
+
+	create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
+		// summary:
+		//		Kick off the life-cycle of a widget
+		// params:
+		//		Hash of initialization parameters for widget, including
+		//		scalar values (like title, duration etc.) and functions,
+		//		typically callbacks like onClick.
+		// srcNodeRef:
+		//		If a srcNodeRef (DOM node) is specified:
+		//			- use srcNodeRef.innerHTML as my contents
+		//			- if this is a behavioral widget then apply behavior
+		//			  to that srcNodeRef
+		//			- otherwise, replace srcNodeRef with my generated DOM
+		//			  tree
+		// description:
+		//		Create calls a number of widget methods (postMixInProperties, buildRendering, postCreate,
+		//		etc.), some of which of you'll want to override. See http://docs.dojocampus.org/dijit/_Widget
+		//		for a discussion of the widget creation lifecycle.
+		//
+		//		Of course, adventurous developers could override create entirely, but this should
+		//		only be done as a last resort.
+		// tags:
+		//		private
+
+		// store pointer to original DOM tree
+		this.srcNodeRef = dojo.byId(srcNodeRef);
+
+		// For garbage collection.  An array of handles returned by Widget.connect()
+		// Each handle returned from Widget.connect() is an array of handles from dojo.connect()
+		this._connects = [];
+
+		// For garbage collection.  An array of handles returned by Widget.subscribe()
+		// The handle returned from Widget.subscribe() is the handle returned from dojo.subscribe()
+		this._subscribes = [];
+
+		// To avoid double-connects, remove entries from _deferredConnects
+		// that have been setup manually by a subclass (ex, by dojoAttachEvent).
+		// If a subclass has redefined a callback (ex: onClick) then assume it's being
+		// connected to manually.
+		this._deferredConnects = dojo.clone(this._deferredConnects);
+		for(var attr in this.attributeMap){
+			delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects
+		}
+		for(attr in this._deferredConnects){
+			if(this[attr] !== dijit._connectOnUseEventHandler){
+				delete this._deferredConnects[attr];	// redefined, probably dojoAttachEvent exists
+			}
+		}
+
+		//mixin our passed parameters
+		if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
+		if(params){
+			this.params = params;
+			dojo.mixin(this,params);
+		}
+		this.postMixInProperties();
+
+		// generate an id for the widget if one wasn't specified
+		// (be sure to do this before buildRendering() because that function might
+		// expect the id to be there.)
+		if(!this.id){
+			this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+		}
+		dijit.registry.add(this);
+
+		this.buildRendering();
+
+		if(this.domNode){
+			// Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
+			this._applyAttributes();
+
+			var source = this.srcNodeRef;
+			if(source && source.parentNode){
+				source.parentNode.replaceChild(this.domNode, source);
+			}
+
+			// If the developer has specified a handler as a widget parameter
+			// (ex: new Button({onClick: ...})
+			// then naturally need to connect from DOM node to that handler immediately,
+			for(attr in this.params){
+				this._onConnect(attr);
+			}
+		}
+
+		if(this.domNode){
+			this.domNode.setAttribute("widgetId", this.id);
+		}
+		this.postCreate();
+
+		// If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
+		if(this.srcNodeRef && !this.srcNodeRef.parentNode){
+			delete this.srcNodeRef;
+		}
+
+		this._created = true;
+	},
+
+	_applyAttributes: function(){
+		// summary:
+		//		Step during widget creation to copy all widget attributes to the
+		//		DOM as per attributeMap and _setXXXAttr functions.
+		// description:
+		//		Skips over blank/false attribute values, unless they were explicitly specified
+		//		as parameters to the widget, since those are the default anyway,
+		//		and setting tabIndex="" is different than not setting tabIndex at all.
+		//
+		//		It processes the attributes in the attribute map first, and then
+		//		it goes through and processes the attributes for the _setXXXAttr
+		//		functions that have been specified
+		// tags:
+		//		private
+		var condAttrApply = function(attr, scope){
+			if((scope.params && attr in scope.params) || scope[attr]){
+				scope.set(attr, scope[attr]);
+			}
+		};
+
+		// Do the attributes in attributeMap
+		for(var attr in this.attributeMap){
+			condAttrApply(attr, this);
+		}
+
+		// And also any attributes with custom setters
+		dojo.forEach(getSetterAttributes(this), function(a){
+			if(!(a in this.attributeMap)){
+				condAttrApply(a, this);
+			}
+		}, this);
+	},
+
+	postMixInProperties: function(){
+		// summary:
+		//		Called after the parameters to the widget have been read-in,
+		//		but before the widget template is instantiated. Especially
+		//		useful to set properties that are referenced in the widget
+		//		template.
+		// tags:
+		//		protected
+	},
+
+	buildRendering: function(){
+		// summary:
+		//		Construct the UI for this widget, setting this.domNode
+		// description:
+		//		Most widgets will mixin `dijit._Templated`, which implements this
+		//		method.
+		// tags:
+		//		protected
+		this.domNode = this.srcNodeRef || dojo.create('div');
+	},
+
+	postCreate: function(){
+		// summary:
+		//		Processing after the DOM fragment is created
+		// description:
+		//		Called after the DOM fragment has been created, but not necessarily
+		//		added to the document.  Do not include any operations which rely on
+		//		node dimensions or placement.
+		// tags:
+		//		protected
+
+		// baseClass is a single class name or occasionally a space-separated list of names.
+		// Add those classes to the DOMNod.  If RTL mode then also add with Rtl suffix.		
+		if(this.baseClass){
+			var classes = this.baseClass.split(" ");
+			if(!this.isLeftToRight()){
+				classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; }));
+			}
+			dojo.addClass(this.domNode, classes);
+		}
+	},
+
+	startup: function(){
+		// summary:
+		//		Processing after the DOM fragment is added to the document
+		// description:
+		//		Called after a widget and its children have been created and added to the page,
+		//		and all related widgets have finished their create() cycle, up through postCreate().
+		//		This is useful for composite widgets that need to control or layout sub-widgets.
+		//		Many layout widgets can use this as a wiring phase.
+		this._started = true;
+	},
+
+	//////////// DESTROY FUNCTIONS ////////////////////////////////
+
+	destroyRecursive: function(/*Boolean?*/ preserveDom){
+		// summary:
+		// 		Destroy this widget and its descendants
+		// description:
+		//		This is the generic "destructor" function that all widget users
+		// 		should call to cleanly discard with a widget. Once a widget is
+		// 		destroyed, it is removed from the manager object.
+		// preserveDom:
+		//		If true, this method will leave the original DOM structure
+		//		alone of descendant Widgets. Note: This will NOT work with
+		//		dijit._Templated widgets.
+
+		this._beingDestroyed = true;
+		this.destroyDescendants(preserveDom);
+		this.destroy(preserveDom);
+	},
+
+	destroy: function(/*Boolean*/ preserveDom){
+		// summary:
+		// 		Destroy this widget, but not its descendants.
+		//		This method will, however, destroy internal widgets such as those used within a template.
+		// preserveDom: Boolean
+		//		If true, this method will leave the original DOM structure alone.
+		//		Note: This will not yet work with _Templated widgets
+
+		this._beingDestroyed = true;
+		this.uninitialize();
+		var d = dojo,
+			dfe = d.forEach,
+			dun = d.unsubscribe;
+		dfe(this._connects, function(array){
+			dfe(array, d.disconnect);
+		});
+		dfe(this._subscribes, function(handle){
+			dun(handle);
+		});
+
+		// destroy widgets created as part of template, etc.
+		dfe(this._supportingWidgets || [], function(w){
+			if(w.destroyRecursive){
+				w.destroyRecursive();
+			}else if(w.destroy){
+				w.destroy();
+			}
+		});
+
+		this.destroyRendering(preserveDom);
+		dijit.registry.remove(this.id);
+		this._destroyed = true;
+	},
+
+	destroyRendering: function(/*Boolean?*/ preserveDom){
+		// summary:
+		//		Destroys the DOM nodes associated with this widget
+		// preserveDom:
+		//		If true, this method will leave the original DOM structure alone
+		//		during tear-down. Note: this will not work with _Templated
+		//		widgets yet.
+		// tags:
+		//		protected
+
+		if(this.bgIframe){
+			this.bgIframe.destroy(preserveDom);
+			delete this.bgIframe;
+		}
+
+		if(this.domNode){
+			if(preserveDom){
+				dojo.removeAttr(this.domNode, "widgetId");
+			}else{
+				dojo.destroy(this.domNode);
+			}
+			delete this.domNode;
+		}
+
+		if(this.srcNodeRef){
+			if(!preserveDom){
+				dojo.destroy(this.srcNodeRef);
+			}
+			delete this.srcNodeRef;
+		}
+	},
+
+	destroyDescendants: function(/*Boolean?*/ preserveDom){
+		// summary:
+		//		Recursively destroy the children of this widget and their
+		//		descendants.
+		// preserveDom:
+		//		If true, the preserveDom attribute is passed to all descendant
+		//		widget's .destroy() method. Not for use with _Templated
+		//		widgets.
+
+		// get all direct descendants and destroy them recursively
+		dojo.forEach(this.getChildren(), function(widget){
+			if(widget.destroyRecursive){
+				widget.destroyRecursive(preserveDom);
+			}
+		});
+	},
+
+
+	uninitialize: function(){
+		// summary:
+		//		Stub function. Override to implement custom widget tear-down
+		//		behavior.
+		// tags:
+		//		protected
+		return false;
+	},
+
+	////////////////// MISCELLANEOUS METHODS ///////////////////
+
+	onFocus: function(){
+		// summary:
+		//		Called when the widget becomes "active" because
+		//		it or a widget inside of it either has focus, or has recently
+		//		been clicked.
+		// tags:
+		//		callback
+	},
+
+	onBlur: function(){
+		// summary:
+		//		Called when the widget stops being "active" because
+		//		focus moved to something outside of it, or the user
+		//		clicked somewhere outside of it, or the widget was
+		//		hidden.
+		// tags:
+		//		callback
+	},
+
+	_onFocus: function(e){
+		// summary:
+		//		This is where widgets do processing for when they are active,
+		//		such as changing CSS classes.  See onFocus() for more details.
+		// tags:
+		//		protected
+		this.onFocus();
+	},
+
+	_onBlur: function(){
+		// summary:
+		//		This is where widgets do processing for when they stop being active,
+		//		such as changing CSS classes.  See onBlur() for more details.
+		// tags:
+		//		protected
+		this.onBlur();
+	},
+
+	_onConnect: function(/*String*/ event){
+		// summary:
+		//		Called when someone connects to one of my handlers.
+		//		"Turn on" that handler if it isn't active yet.
+		//
+		//		This is also called for every single initialization parameter
+		//		so need to do nothing for parameters like "id".
+		// tags:
+		//		private
+		if(event in this._deferredConnects){
+			var mapNode = this[this._deferredConnects[event] || 'domNode'];
+			this.connect(mapNode, event.toLowerCase(), event);
+			delete this._deferredConnects[event];
+		}
+	},
+
+	_setClassAttr: function(/*String*/ value){
+		// summary:
+		//		Custom setter for the CSS "class" attribute
+		// tags:
+		//		protected
+		var mapNode = this[this.attributeMap["class"] || 'domNode'];
+		dojo.removeClass(mapNode, this["class"])
+		this["class"] = value;
+		dojo.addClass(mapNode, value);
+	},
+
+	_setStyleAttr: function(/*String||Object*/ value){
+		// summary:
+		//		Sets the style attribut of the widget according to value,
+		//		which is either a hash like {height: "5px", width: "3px"}
+		//		or a plain string
+		// description:
+		//		Determines which node to set the style on based on style setting
+		//		in attributeMap.
+		// tags:
+		//		protected
+
+		var mapNode = this[this.attributeMap.style || 'domNode'];
+
+		// Note: technically we should revert any style setting made in a previous call
+		// to his method, but that's difficult to keep track of.
+
+		if(dojo.isObject(value)){
+			dojo.style(mapNode, value);
+		}else{
+			if(mapNode.style.cssText){
+				mapNode.style.cssText += "; " + value;
+			}else{
+				mapNode.style.cssText = value;
+			}
+		}
+
+		this.style = value;
+	},
+
+	setAttribute: function(/*String*/ attr, /*anything*/ value){
+		// summary:
+		//		Deprecated.  Use set() instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0");
+		this.set(attr, value);
+	},
+
+	_attrToDom: function(/*String*/ attr, /*String*/ value){
+		// summary:
+		//		Reflect a widget attribute (title, tabIndex, duration etc.) to
+		//		the widget DOM, as specified in attributeMap.
+		//
+		// description:
+		//		Also sets this["attr"] to the new value.
+		//		Note some attributes like "type"
+		//		cannot be processed this way as they are not mutable.
+		//
+		// tags:
+		//		private
+
+		var commands = this.attributeMap[attr];
+		dojo.forEach(dojo.isArray(commands) ? commands : [commands], function(command){
+
+			// Get target node and what we are doing to that node
+			var mapNode = this[command.node || command || "domNode"];	// DOM node
+			var type = command.type || "attribute";	// class, innerHTML, innerText, or attribute
+
+			switch(type){
+				case "attribute":
+					if(dojo.isFunction(value)){ // functions execute in the context of the widget
+						value = dojo.hitch(this, value);
+					}
+
+					// Get the name of the DOM node attribute; usually it's the same
+					// as the name of the attribute in the widget (attr), but can be overridden.
+					// Also maps handler names to lowercase, like onSubmit --> onsubmit
+					var attrName = command.attribute ? command.attribute :
+						(/^on[A-Z][a-zA-Z]*$/.test(attr) ? attr.toLowerCase() : attr);
+
+					dojo.attr(mapNode, attrName, value);
+					break;
+				case "innerText":
+					mapNode.innerHTML = "";
+					mapNode.appendChild(dojo.doc.createTextNode(value));
+					break;
+				case "innerHTML":
+					mapNode.innerHTML = value;
+					break;
+				case "class":
+					dojo.removeClass(mapNode, this[attr]);
+					dojo.addClass(mapNode, value);
+					break;
+			}
+		}, this);
+		this[attr] = value;
+	},
+
+	attr: function(/*String|Object*/name, /*Object?*/value){
+		// summary:
+		//		Set or get properties on a widget instance.
+		//	name:
+		//		The property to get or set. If an object is passed here and not
+		//		a string, its keys are used as names of attributes to be set
+		//		and the value of the object as values to set in the widget.
+		//	value:
+		//		Optional. If provided, attr() operates as a setter. If omitted,
+		//		the current value of the named property is returned.
+		// description:
+		//		This method is deprecated, use get() or set() directly.
+
+		// Print deprecation warning but only once per calling function
+		if(dojo.config.isDebug){
+			var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}),
+				caller = (arguments.callee.caller || "unknown caller").toString();
+			if(!alreadyCalledHash[caller]){
+				dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " +
+				caller, "", "2.0");
+				alreadyCalledHash[caller] = true;
+			}
+		}
+
+		var args = arguments.length;
+		if(args >= 2 || typeof name === "object"){ // setter
+			return this.set.apply(this, arguments);
+		}else{ // getter
+			return this.get(name);
+		}
+	},
+	
+	get: function(name){
+		// summary:
+		//		Get a property from a widget.
+		//	name:
+		//		The property to get.
+		// description:
+		//		Get a named property from a widget. The property may
+		//		potentially be retrieved via a getter method. If no getter is defined, this
+		// 		just retrieves the object's property.  
+		// 		For example, if the widget has a properties "foo"
+		//		and "bar" and a method named "_getFooAttr", calling:
+		//	|	myWidget.get("foo");
+		//		would be equivalent to writing:
+		//	|	widget._getFooAttr();
+		//		and:
+		//	|	myWidget.get("bar");
+		//		would be equivalent to writing:
+		//	|	widget.bar;
+		var names = this._getAttrNames(name);
+		return this[names.g] ? this[names.g]() : this[name];
+	},
+	
+	set: function(name, value){
+		// summary:
+		//		Set a property on a widget
+		//	name:
+		//		The property to set. 
+		//	value:
+		//		The value to set in the property.
+		// description:
+		//		Sets named properties on a widget which may potentially be handled by a 
+		// 		setter in the widget.
+		// 		For example, if the widget has a properties "foo"
+		//		and "bar" and a method named "_setFooAttr", calling:
+		//	|	myWidget.set("foo", "Howdy!");
+		//		would be equivalent to writing:
+		//	|	widget._setFooAttr("Howdy!");
+		//		and:
+		//	|	myWidget.set("bar", 3);
+		//		would be equivalent to writing:
+		//	|	widget.bar = 3;
+		//
+		//	set() may also be called with a hash of name/value pairs, ex:
+		//	|	myWidget.set({
+		//	|		foo: "Howdy",
+		//	|		bar: 3
+		//	|	})
+		//	This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
+
+		if(typeof name === "object"){
+			for(var x in name){
+				this.set(x, name[x]); 
+			}
+			return this;
+		}
+		var names = this._getAttrNames(name);
+		if(this[names.s]){
+			// use the explicit setter
+			var result = this[names.s].apply(this, Array.prototype.slice.call(arguments, 1));
+		}else{
+			// if param is specified as DOM node attribute, copy it
+			if(name in this.attributeMap){
+				this._attrToDom(name, value);
+			}
+			var oldValue = this[name];
+			// FIXME: what about function assignments? Any way to connect() here?
+			this[name] = value;
+		}
+		return result || this;
+	},
+	
+	_attrPairNames: {},		// shared between all widgets
+	_getAttrNames: function(name){
+		// summary:
+		//		Helper function for get() and set().
+		//		Caches attribute name values so we don't do the string ops every time.
+		// tags:
+		//		private
+
+		var apn = this._attrPairNames;
+		if(apn[name]){ return apn[name]; }
+		var uc = name.charAt(0).toUpperCase() + name.substr(1);
+		return (apn[name] = {
+			n: name+"Node",
+			s: "_set"+uc+"Attr",
+			g: "_get"+uc+"Attr"
+		});
+	},
+
+	toString: function(){
+		// summary:
+		//		Returns a string that represents the widget
+		// description:
+		//		When a widget is cast to a string, this method will be used to generate the
+		//		output. Currently, it does not implement any sort of reversible
+		//		serialization.
+		return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
+	},
+
+	getDescendants: function(){
+		// summary:
+		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+		//		This method should generally be avoided as it returns widgets declared in templates, which are
+		//		supposed to be internal/hidden, but it's left here for back-compat reasons.
+
+		return this.containerNode ? dojo.query('[widgetId]', this.containerNode).map(dijit.byNode) : []; // dijit._Widget[]
+	},
+
+	getChildren: function(){
+		// summary:
+		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+		//		Does not return nested widgets, nor widgets that are part of this widget's template.
+		return this.containerNode ? dijit.findWidgets(this.containerNode) : []; // dijit._Widget[]
+	},
+
+	// nodesWithKeyClick: [private] String[]
+	//		List of nodes that correctly handle click events via native browser support,
+	//		and don't need dijit's help
+	nodesWithKeyClick: ["input", "button"],
+
+	connect: function(
+			/*Object|null*/ obj,
+			/*String|Function*/ event,
+			/*String|Function*/ method){
+		// summary:
+		//		Connects specified obj/event to specified method of this object
+		//		and registers for disconnect() on widget destroy.
+		// description:
+		//		Provide widget-specific analog to dojo.connect, except with the
+		//		implicit use of this widget as the target object.
+		//		This version of connect also provides a special "ondijitclick"
+		//		event which triggers on a click or space or enter keyup
+		// returns:
+		//		A handle that can be passed to `disconnect` in order to disconnect before
+		//		the widget is destroyed.
+		// example:
+		//	|	var btn = new dijit.form.Button();
+		//	|	// when foo.bar() is called, call the listener we're going to
+		//	|	// provide in the scope of btn
+		//	|	btn.connect(foo, "bar", function(){
+		//	|		console.debug(this.toString());
+		//	|	});
+		// tags:
+		//		protected
+
+		var d = dojo,
+			dc = d._connect,
+			handles = [];
+		if(event == "ondijitclick"){
+			// add key based click activation for unsupported nodes.
+			// do all processing onkey up to prevent spurious clicks
+			// for details see comments at top of this file where _lastKeyDownNode is defined
+			if(dojo.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button
+				var m = d.hitch(this, method);
+				handles.push(
+					dc(obj, "onkeydown", this, function(e){
+						//console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+						if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+							// needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work
+							dijit._lastKeyDownNode = e.target;
+							e.preventDefault();		// stop event to prevent scrolling on space key in IE
+						}
+			 		}),
+					dc(obj, "onkeyup", this, function(e){
+						//console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+						if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+							e.target === dijit._lastKeyDownNode &&
+							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+								//need reset here or have problems in FF when focus returns to trigger element after closing popup/alert
+								dijit._lastKeyDownNode = null;
+								return m(e);
+						}
+					})
+				);
+			}
+			event = "onclick";
+		}
+		handles.push(dc(obj, event, this, method));
+
+		this._connects.push(handles);
+		return handles;		// _Widget.Handle
+	},
+
+	disconnect: function(/* _Widget.Handle */ handles){
+		// summary:
+		//		Disconnects handle created by `connect`.
+		//		Also removes handle from this widget's list of connects.
+		// tags:
+		//		protected
+		for(var i=0; i<this._connects.length; i++){
+			if(this._connects[i] == handles){
+				dojo.forEach(handles, dojo.disconnect);
+				this._connects.splice(i, 1);
+				return;
+			}
+		}
+	},
+
+	subscribe: function(
+			/*String*/ topic,
+			/*String|Function*/ method){
+		// summary:
+		//		Subscribes to the specified topic and calls the specified method
+		//		of this object and registers for unsubscribe() on widget destroy.
+		// description:
+		//		Provide widget-specific analog to dojo.subscribe, except with the
+		//		implicit use of this widget as the target object.
+		// example:
+		//	|	var btn = new dijit.form.Button();
+		//	|	// when /my/topic is published, this button changes its label to
+		//	|   // be the parameter of the topic.
+		//	|	btn.subscribe("/my/topic", function(v){
+		//	|		this.set("label", v);
+		//	|	});
+		var d = dojo,
+			handle = d.subscribe(topic, this, method);
+
+		// return handles for Any widget that may need them
+		this._subscribes.push(handle);
+		return handle;
+	},
+
+	unsubscribe: function(/*Object*/ handle){
+		// summary:
+		//		Unsubscribes handle created by this.subscribe.
+		//		Also removes handle from this widget's list of subscriptions
+		for(var i=0; i<this._subscribes.length; i++){
+			if(this._subscribes[i] == handle){
+				dojo.unsubscribe(handle);
+				this._subscribes.splice(i, 1);
+				return;
+			}
+		}
+	},
+
+	isLeftToRight: function(){
+		// summary:
+		//		Return this widget's explicit or implicit orientation (true for LTR, false for RTL)
+		// tags:
+		//		protected
+		return this.dir ? (this.dir == "ltr") : dojo._isBodyLtr(); //Boolean
+	},
+
+	isFocusable: function(){
+		// summary:
+		//		Return true if this widget can currently be focused
+		//		and false if not
+		return this.focus && (dojo.style(this.domNode, "display") != "none");
+	},
+
+	placeAt: function(/* String|DomNode|_Widget */reference, /* String?|Int? */position){
+		// summary:
+		//		Place this widget's domNode reference somewhere in the DOM based
+		//		on standard dojo.place conventions, or passing a Widget reference that
+		//		contains and addChild member.
+		//
+		// description:
+		//		A convenience function provided in all _Widgets, providing a simple
+		//		shorthand mechanism to put an existing (or newly created) Widget
+		//		somewhere in the dom, and allow chaining.
+		//
+		// reference:
+		//		The String id of a domNode, a domNode reference, or a reference to a Widget posessing
+		//		an addChild method.
+		//
+		// position:
+		//		If passed a string or domNode reference, the position argument
+		//		accepts a string just as dojo.place does, one of: "first", "last",
+		//		"before", or "after".
+		//
+		//		If passed a _Widget reference, and that widget reference has an ".addChild" method,
+		//		it will be called passing this widget instance into that method, supplying the optional
+		//		position index passed.
+		//
+		// returns:
+		//		dijit._Widget
+		//		Provides a useful return of the newly created dijit._Widget instance so you
+		//		can "chain" this function by instantiating, placing, then saving the return value
+		//		to a variable.
+		//
+		// example:
+		// | 	// create a Button with no srcNodeRef, and place it in the body:
+		// | 	var button = new dijit.form.Button({ label:"click" }).placeAt(dojo.body());
+		// | 	// now, 'button' is still the widget reference to the newly created button
+		// | 	dojo.connect(button, "onClick", function(e){ console.log('click'); });
+		//
+		// example:
+		// |	// create a button out of a node with id="src" and append it to id="wrapper":
+		// | 	var button = new dijit.form.Button({},"src").placeAt("wrapper");
+		//
+		// example:
+		// |	// place a new button as the first element of some div
+		// |	var button = new dijit.form.Button({ label:"click" }).placeAt("wrapper","first");
+		//
+		// example:
+		// |	// create a contentpane and add it to a TabContainer
+		// |	var tc = dijit.byId("myTabs");
+		// |	new dijit.layout.ContentPane({ href:"foo.html", title:"Wow!" }).placeAt(tc)
+
+		if(reference.declaredClass && reference.addChild){
+			reference.addChild(this, position);
+		}else{
+			dojo.place(this.domNode, reference, position);
+		}
+		return this;
+	},
+
+	_onShow: function(){
+		// summary:
+		//		Internal method called when this widget is made visible.
+		//		See `onShow` for details.
+		this.onShow();
+	},
+
+	onShow: function(){
+		// summary:
+		//		Called when this widget becomes the selected pane in a
+		//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+		//		`dijit.layout.AccordionContainer`, etc.
+		//
+		//		Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+		// tags:
+		//		callback
+	},
+
+	onHide: function(){
+		// summary:
+			//		Called when another widget becomes the selected pane in a
+			//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+			//		`dijit.layout.AccordionContainer`, etc.
+			//
+			//		Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+			// tags:
+			//		callback
+	},
+
+	onClose: function(){
+		// summary:
+		//		Called when this widget is being displayed as a popup (ex: a Calendar popped
+		//		up from a DateTextBox), and it is hidden.
+		//		This is called from the dijit.popup code, and should not be called directly.
+		//
+		//		Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses.
+		//		Callback if a user tries to close the child.   Child will be closed if this function returns true.
+		// tags:
+		//		extension
+
+		return true;		// Boolean
+	}
+});
+
+})();
+
+}
+
+if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.string"] = true;
+dojo.provide("dojo.string");
+
+/*=====
+dojo.string = { 
+	// summary: String utilities for Dojo
+};
+=====*/
+
+dojo.string.rep = function(/*String*/str, /*Integer*/num){
+	//	summary:
+	//		Efficiently replicate a string `n` times.
+	//	str:
+	//		the string to replicate
+	//	num:
+	//		number of times to replicate the string
+	
+	if(num <= 0 || !str){ return ""; }
+	
+	var buf = [];
+	for(;;){
+		if(num & 1){
+			buf.push(str);
+		}
+		if(!(num >>= 1)){ break; }
+		str += str;
+	}
+	return buf.join("");	// String
+};
+
+dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){
+	//	summary:
+	//		Pad a string to guarantee that it is at least `size` length by
+	//		filling with the character `ch` at either the start or end of the
+	//		string. Pads at the start, by default.
+	//	text:
+	//		the string to pad
+	//	size:
+	//		length to provide padding
+	//	ch:
+	//		character to pad, defaults to '0'
+	//	end:
+	//		adds padding at the end if true, otherwise pads at start
+	//	example:
+	//	|	// Fill the string to length 10 with "+" characters on the right.  Yields "Dojo++++++".
+	//	|	dojo.string.pad("Dojo", 10, "+", true);
+
+	if(!ch){
+		ch = '0';
+	}
+	var out = String(text),
+		pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length));
+	return end ? out + pad : pad + out;	// String
+};
+
+dojo.string.substitute = function(	/*String*/		template, 
+									/*Object|Array*/map, 
+									/*Function?*/	transform, 
+									/*Object?*/		thisObject){
+	//	summary:
+	//		Performs parameterized substitutions on a string. Throws an
+	//		exception if any parameter is unmatched.
+	//	template: 
+	//		a string with expressions in the form `${key}` to be replaced or
+	//		`${key:format}` which specifies a format function. keys are case-sensitive. 
+	//	map:
+	//		hash to search for substitutions
+	//	transform: 
+	//		a function to process all parameters before substitution takes
+	//		place, e.g. mylib.encodeXML
+	//	thisObject: 
+	//		where to look for optional format function; default to the global
+	//		namespace
+	//	example:
+	//		Substitutes two expressions in a string from an Array or Object
+	//	|	// returns "File 'foo.html' is not found in directory '/temp'."
+	//	|	// by providing substitution data in an Array
+	//	|	dojo.string.substitute(
+	//	|		"File '${0}' is not found in directory '${1}'.",
+	//	|		["foo.html","/temp"]
+	//	|	);
+	//	|
+	//	|	// also returns "File 'foo.html' is not found in directory '/temp'."
+	//	|	// but provides substitution data in an Object structure.  Dotted
+	//	|	// notation may be used to traverse the structure.
+	//	|	dojo.string.substitute(
+	//	|		"File '${name}' is not found in directory '${info.dir}'.",
+	//	|		{ name: "foo.html", info: { dir: "/temp" } }
+	//	|	);
+	//	example:
+	//		Use a transform function to modify the values:
+	//	|	// returns "file 'foo.html' is not found in directory '/temp'."
+	//	|	dojo.string.substitute(
+	//	|		"${0} is not found in ${1}.",
+	//	|		["foo.html","/temp"],
+	//	|		function(str){
+	//	|			// try to figure out the type
+	//	|			var prefix = (str.charAt(0) == "/") ? "directory": "file";
+	//	|			return prefix + " '" + str + "'";
+	//	|		}
+	//	|	);
+	//	example:
+	//		Use a formatter
+	//	|	// returns "thinger -- howdy"
+	//	|	dojo.string.substitute(
+	//	|		"${0:postfix}", ["thinger"], null, {
+	//	|			postfix: function(value, key){
+	//	|				return value + " -- howdy";
+	//	|			}
+	//	|		}
+	//	|	);
+
+	thisObject = thisObject || dojo.global;
+	transform = transform ? 
+		dojo.hitch(thisObject, transform) : function(v){ return v; };
+
+	return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
+		function(match, key, format){
+			var value = dojo.getObject(key, false, map);
+			if(format){
+				value = dojo.getObject(format, false, thisObject).call(thisObject, value, key);
+			}
+			return transform(value, key).toString();
+		}); // String
+};
+
+/*=====
+dojo.string.trim = function(str){
+	//	summary:
+	//		Trims whitespace from both sides of the string
+	//	str: String
+	//		String to be trimmed
+	//	returns: String
+	//		Returns the trimmed string
+	//	description:
+	//		This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript).
+	//		The short yet performant version of this function is dojo.trim(),
+	//		which is part of Dojo base.  Uses String.prototype.trim instead, if available.
+	return "";	// String
+}
+=====*/
+
+dojo.string.trim = String.prototype.trim ?
+	dojo.trim : // aliasing to the native function
+	function(str){
+		str = str.replace(/^\s+/, '');
+		for(var i = str.length - 1; i >= 0; i--){
+			if(/\S/.test(str.charAt(i))){
+				str = str.substring(0, i + 1);
+				break;
+			}
+		}
+		return str;
+	};
+
+}
+
+if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cache"] = true;
+dojo.provide("dojo.cache");
+
+/*=====
+dojo.cache = { 
+	// summary:
+	// 		A way to cache string content that is fetchable via `dojo.moduleUrl`.
+};
+=====*/
+
+(function(){
+	var cache = {};
+	dojo.cache = function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){
+		// summary:
+		// 		A getter and setter for storing the string content associated with the
+		// 		module and url arguments.
+		// description:
+		// 		module and url are used to call `dojo.moduleUrl()` to generate a module URL.
+		// 		If value is specified, the cache value for the moduleUrl will be set to
+		// 		that value. Otherwise, dojo.cache will fetch the moduleUrl and store it
+		// 		in its internal cache and return that cached value for the URL. To clear
+		// 		a cache value pass null for value. Since XMLHttpRequest (XHR) is used to fetch the
+		// 		the URL contents, only modules on the same domain of the page can use this capability.
+		// 		The build system can inline the cache values though, to allow for xdomain hosting.
+		// module: String||Object
+		// 		If a String, the module name to use for the base part of the URL, similar to module argument
+		// 		to `dojo.moduleUrl`. If an Object, something that has a .toString() method that
+		// 		generates a valid path for the cache item. For example, a dojo._Url object.
+		// url: String
+		// 		The rest of the path to append to the path derived from the module argument. If
+		// 		module is an object, then this second argument should be the "value" argument instead.
+		// value: String||Object?
+		// 		If a String, the value to use in the cache for the module/url combination.
+		// 		If an Object, it can have two properties: value and sanitize. The value property
+		// 		should be the value to use in the cache, and sanitize can be set to true or false,
+		// 		to indicate if XML declarations should be removed from the value and if the HTML
+		// 		inside a body tag in the value should be extracted as the real value. The value argument
+		// 		or the value property on the value argument are usually only used by the build system
+		// 		as it inlines cache content.
+		//	example:
+		//		To ask dojo.cache to fetch content and store it in the cache (the dojo["cache"] style
+		// 		of call is used to avoid an issue with the build system erroneously trying to intern
+		// 		this example. To get the build system to intern your dojo.cache calls, use the
+		// 		"dojo.cache" style of call):
+		// 		|	//If template.html contains "<h1>Hello</h1>" that will be
+		// 		|	//the value for the text variable.
+		//		|	var text = dojo["cache"]("my.module", "template.html");
+		//	example:
+		//		To ask dojo.cache to fetch content and store it in the cache, and sanitize the input
+		// 		 (the dojo["cache"] style of call is used to avoid an issue with the build system 
+		// 		erroneously trying to intern this example. To get the build system to intern your
+		// 		dojo.cache calls, use the "dojo.cache" style of call):
+		// 		|	//If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+		// 		|	//text variable will contain just "<h1>Hello</h1>".
+		//		|	var text = dojo["cache"]("my.module", "template.html", {sanitize: true});
+		//	example:
+		//		Same example as previous, but demostrates how an object can be passed in as
+		//		the first argument, then the value argument can then be the second argument.
+		// 		|	//If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+		// 		|	//text variable will contain just "<h1>Hello</h1>".
+		//		|	var text = dojo["cache"](new dojo._Url("my/module/template.html"), {sanitize: true});
+
+		//Module could be a string, or an object that has a toString() method
+		//that will return a useful path. If it is an object, then the "url" argument
+		//will actually be the value argument.
+		if(typeof module == "string"){
+			var pathObj = dojo.moduleUrl(module, url);
+		}else{
+			pathObj = module;
+			value = url;
+		}
+		var key = pathObj.toString();
+
+		var val = value;
+		if(value != undefined && !dojo.isString(value)){
+			val = ("value" in value ? value.value : undefined);
+		}
+
+		var sanitize = value && value.sanitize ? true : false;
+
+		if(typeof val == "string"){
+			//We have a string, set cache value
+			val = cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+		}else if(val === null){
+			//Remove cached value
+			delete cache[key];
+		}else{
+			//Allow cache values to be empty strings. If key property does
+			//not exist, fetch it.
+			if(!(key in cache)){
+				val = dojo._getText(key);
+				cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+			}
+			val = cache[key];
+		}
+		return val; //String
+	};
+
+	dojo.cache._sanitize = function(/*String*/val){
+		// summary: 
+		//		Strips <?xml ...?> declarations so that external SVG and XML
+		// 		documents can be added to a document without worry. Also, if the string
+		//		is an HTML document, only the part inside the body tag is returned.
+		// description:
+		// 		Copied from dijit._Templated._sanitizeTemplateString.
+		if(val){
+			val = val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
+			var matches = val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+			if(matches){
+				val = matches[1];
+			}
+		}else{
+			val = "";
+		}
+		return val; //String
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Templated"] = true;
+dojo.provide("dijit._Templated");
+
+
+
+
+
+
+dojo.declare("dijit._Templated",
+	null,
+	{
+		// summary:
+		//		Mixin for widgets that are instantiated from a template
+
+		// templateString: [protected] String
+		//		A string that represents the widget template. Pre-empts the
+		//		templatePath. In builds that have their strings "interned", the
+		//		templatePath is converted to an inline templateString, thereby
+		//		preventing a synchronous network call.
+		//
+		//		Use in conjunction with dojo.cache() to load from a file.
+		templateString: null,
+
+		// templatePath: [protected deprecated] String
+		//		Path to template (HTML file) for this widget relative to dojo.baseUrl.
+		//		Deprecated: use templateString with dojo.cache() instead.
+		templatePath: null,
+
+		// widgetsInTemplate: [protected] Boolean
+		//		Should we parse the template to find widgets that might be
+		//		declared in markup inside it?  False by default.
+		widgetsInTemplate: false,
+
+		// skipNodeCache: [protected] Boolean
+		//		If using a cached widget template node poses issues for a
+		//		particular widget class, it can set this property to ensure
+		//		that its template is always re-built from a string
+		_skipNodeCache: false,
+
+		// _earlyTemplatedStartup: Boolean
+		//		A fallback to preserve the 1.0 - 1.3 behavior of children in
+		//		templates having their startup called before the parent widget
+		//		fires postCreate. Defaults to 'false', causing child widgets to
+		//		have their .startup() called immediately before a parent widget
+		//		.startup(), but always after the parent .postCreate(). Set to
+		//		'true' to re-enable to previous, arguably broken, behavior.
+		_earlyTemplatedStartup: false,
+
+		// _attachPoints: [private] String[]
+		//		List of widget attribute names associated with dojoAttachPoint=... in the
+		//		template, ex: ["containerNode", "labelNode"]
+/*=====
+ 		_attachPoints: [],
+ =====*/
+
+		constructor: function(){
+			this._attachPoints = [];
+		},
+
+		_stringRepl: function(tmpl){
+			// summary:
+			//		Does substitution of ${foo} type properties in template string
+			// tags:
+			//		private
+			var className = this.declaredClass, _this = this;
+			// Cache contains a string because we need to do property replacement
+			// do the property replacement
+			return dojo.string.substitute(tmpl, this, function(value, key){
+				if(key.charAt(0) == '!'){ value = dojo.getObject(key.substr(1), false, _this); }
+				if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
+				if(value == null){ return ""; }
+
+				// Substitution keys beginning with ! will skip the transform step,
+				// in case a user wishes to insert unescaped markup, e.g. ${!foo}
+				return key.charAt(0) == "!" ? value :
+					// Safer substitution, see heading "Attribute values" in
+					// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+					value.toString().replace(/"/g,"&quot;"); //TODO: add &amp? use encodeXML method?
+			}, this);
+		},
+
+		// method over-ride
+		buildRendering: function(){
+			// summary:
+			//		Construct the UI for this widget from a template, setting this.domNode.
+			// tags:
+			//		protected
+
+			// Lookup cached version of template, and download to cache if it
+			// isn't there already.  Returns either a DomNode or a string, depending on
+			// whether or not the template contains ${foo} replacement parameters.
+			var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
+
+			var node;
+			if(dojo.isString(cached)){
+				node = dojo._toDom(this._stringRepl(cached));
+				if(node.nodeType != 1){
+					// Flag common problems such as templates with multiple top level nodes (nodeType == 11)
+					throw new Error("Invalid template: " + cached);
+				}
+			}else{
+				// if it's a node, all we have to do is clone it
+				node = cached.cloneNode(true);
+			}
+
+			this.domNode = node;
+
+			// recurse through the node, looking for, and attaching to, our
+			// attachment points and events, which should be defined on the template node.
+			this._attachTemplateNodes(node);
+
+			if(this.widgetsInTemplate){
+				// Make sure dojoType is used for parsing widgets in template.
+				// The dojo.parser.query could be changed from multiversion support.
+				var parser = dojo.parser, qry, attr;
+				if(parser._query != "[dojoType]"){
+					qry = parser._query;
+					attr = parser._attrName;
+					parser._query = "[dojoType]";
+					parser._attrName = "dojoType";
+				}
+
+				// Store widgets that we need to start at a later point in time
+				var cw = (this._startupWidgets = dojo.parser.parse(node, {
+					noStart: !this._earlyTemplatedStartup,
+					inherited: {dir: this.dir, lang: this.lang}
+				}));
+
+				// Restore the query.
+				if(qry){
+					parser._query = qry;
+					parser._attrName = attr;
+				}
+
+				this._supportingWidgets = dijit.findWidgets(node);
+
+				this._attachTemplateNodes(cw, function(n,p){
+					return n[p];
+				});
+			}
+
+			this._fillContent(this.srcNodeRef);
+		},
+
+		_fillContent: function(/*DomNode*/ source){
+			// summary:
+			//		Relocate source contents to templated container node.
+			//		this.containerNode must be able to receive children, or exceptions will be thrown.
+			// tags:
+			//		protected
+			var dest = this.containerNode;
+			if(source && dest){
+				while(source.hasChildNodes()){
+					dest.appendChild(source.firstChild);
+				}
+			}
+		},
+
+		_attachTemplateNodes: function(rootNode, getAttrFunc){
+			// summary:
+			//		Iterate through the template and attach functions and nodes accordingly.
+			// description:
+			//		Map widget properties and functions to the handlers specified in
+			//		the dom node and it's descendants. This function iterates over all
+			//		nodes and looks for these properties:
+			//			* dojoAttachPoint
+			//			* dojoAttachEvent
+			//			* waiRole
+			//			* waiState
+			// rootNode: DomNode|Array[Widgets]
+			//		the node to search for properties. All children will be searched.
+			// getAttrFunc: Function?
+			//		a function which will be used to obtain property for a given
+			//		DomNode/Widget
+			// tags:
+			//		private
+
+			getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
+
+			var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
+			var x = dojo.isArray(rootNode) ? 0 : -1;
+			for(; x<nodes.length; x++){
+				var baseNode = (x == -1) ? rootNode : nodes[x];
+				if(this.widgetsInTemplate && getAttrFunc(baseNode, "dojoType")){
+					continue;
+				}
+				// Process dojoAttachPoint
+				var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
+				if(attachPoint){
+					var point, points = attachPoint.split(/\s*,\s*/);
+					while((point = points.shift())){
+						if(dojo.isArray(this[point])){
+							this[point].push(baseNode);
+						}else{
+							this[point]=baseNode;
+						}
+						this._attachPoints.push(point);
+					}
+				}
+
+				// Process dojoAttachEvent
+				var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
+				if(attachEvent){
+					// NOTE: we want to support attributes that have the form
+					// "domEvent: nativeEvent; ..."
+					var event, events = attachEvent.split(/\s*,\s*/);
+					var trim = dojo.trim;
+					while((event = events.shift())){
+						if(event){
+							var thisFunc = null;
+							if(event.indexOf(":") != -1){
+								// oh, if only JS had tuple assignment
+								var funcNameArr = event.split(":");
+								event = trim(funcNameArr[0]);
+								thisFunc = trim(funcNameArr[1]);
+							}else{
+								event = trim(event);
+							}
+							if(!thisFunc){
+								thisFunc = event;
+							}
+							this.connect(baseNode, event, thisFunc);
+						}
+					}
+				}
+
+				// waiRole, waiState
+				var role = getAttrFunc(baseNode, "waiRole");
+				if(role){
+					dijit.setWaiRole(baseNode, role);
+				}
+				var values = getAttrFunc(baseNode, "waiState");
+				if(values){
+					dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
+						if(stateValue.indexOf('-') != -1){
+							var pair = stateValue.split('-');
+							dijit.setWaiState(baseNode, pair[0], pair[1]);
+						}
+					});
+				}
+			}
+		},
+
+		startup: function(){
+			dojo.forEach(this._startupWidgets, function(w){
+				if(w && !w._started && w.startup){
+					w.startup();
+				}
+			});
+			this.inherited(arguments);
+		},
+
+		destroyRendering: function(){
+			// Delete all attach points to prevent IE6 memory leaks.
+			dojo.forEach(this._attachPoints, function(point){
+				delete this[point];
+			}, this);
+			this._attachPoints = [];
+
+			this.inherited(arguments);
+		}
+	}
+);
+
+// key is either templatePath or templateString; object is either string or DOM tree
+dijit._Templated._templateCache = {};
+
+dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
+	// summary:
+	//		Static method to get a template based on the templatePath or
+	//		templateString key
+	// templatePath: String||dojo.uri.Uri
+	//		The URL to get the template from.
+	// templateString: String?
+	//		a string to use in lieu of fetching the template from a URL. Takes precedence
+	//		over templatePath
+	// returns: Mixed
+	//		Either string (if there are ${} variables that need to be replaced) or just
+	//		a DOM tree (if the node can be cloned directly)
+
+	// is it already cached?
+	var tmplts = dijit._Templated._templateCache;
+	var key = templateString || templatePath;
+	var cached = tmplts[key];
+	if(cached){
+		try{
+			// if the cached value is an innerHTML string (no ownerDocument) or a DOM tree created within the current document, then use the current cached value
+			if(!cached.ownerDocument || cached.ownerDocument == dojo.doc){
+				// string or node of the same document
+				return cached;
+			}
+		}catch(e){ /* squelch */ } // IE can throw an exception if cached.ownerDocument was reloaded
+		dojo.destroy(cached);
+	}
+
+	// If necessary, load template string from template path
+	if(!templateString){
+		templateString = dojo.cache(templatePath, {sanitize: true});
+	}
+	templateString = dojo.string.trim(templateString);
+
+	if(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)){
+		// there are variables in the template so all we can do is cache the string
+		return (tmplts[key] = templateString); //String
+	}else{
+		// there are no variables in the template so we can cache the DOM tree
+		var node = dojo._toDom(templateString);
+		if(node.nodeType != 1){
+			throw new Error("Invalid template: " + templateString);
+		}
+		return (tmplts[key] = node); //Node
+	}
+};
+
+if(dojo.isIE){
+	dojo.addOnWindowUnload(function(){
+		var cache = dijit._Templated._templateCache;
+		for(var key in cache){
+			var value = cache[key];
+			if(typeof value == "object"){ // value is either a string or a DOM node template
+				dojo.destroy(value);
+			}
+			delete cache[key];
+		}
+	});
+}
+
+// These arguments can be specified for widgets which are used in templates.
+// Since any widget can be specified as sub widgets in template, mix it
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget,{
+	dojoAttachEvent: "",
+	dojoAttachPoint: "",
+	waiRole: "",
+	waiState:""
+});
+
+}
+
+if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Container"] = true;
+dojo.provide("dijit._Container");
+
+dojo.declare("dijit._Container",
+	null,
+	{
+		// summary:
+		//		Mixin for widgets that contain a set of widget children.
+		// description:
+		//		Use this mixin for widgets that needs to know about and
+		//		keep track of their widget children. Suitable for widgets like BorderContainer
+		//		and TabContainer which contain (only) a set of child widgets.
+		//
+		//		It's not suitable for widgets like ContentPane
+		//		which contains mixed HTML (plain DOM nodes in addition to widgets),
+		//		and where contained widgets are not necessarily directly below
+		//		this.containerNode.   In that case calls like addChild(node, position)
+		//		wouldn't make sense.
+
+		// isContainer: [protected] Boolean
+		//		Indicates that this widget acts as a "parent" to the descendant widgets.
+		//		When the parent is started it will call startup() on the child widgets.
+		//		See also `isLayoutContainer`.
+		isContainer: true,
+
+		buildRendering: function(){
+			this.inherited(arguments);
+			if(!this.containerNode){
+				// all widgets with descendants must set containerNode
+	 				this.containerNode = this.domNode;
+			}
+		},
+
+		addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
+			// summary:
+			//		Makes the given widget a child of this widget.
+			// description:
+			//		Inserts specified child widget's dom node as a child of this widget's
+			//		container node, and possibly does other processing (such as layout).
+
+			var refNode = this.containerNode;
+			if(insertIndex && typeof insertIndex == "number"){
+				var children = this.getChildren();
+				if(children && children.length >= insertIndex){
+					refNode = children[insertIndex-1].domNode;
+					insertIndex = "after";
+				}
+			}
+			dojo.place(widget.domNode, refNode, insertIndex);
+
+			// If I've been started but the child widget hasn't been started,
+			// start it now.  Make sure to do this after widget has been
+			// inserted into the DOM tree, so it can see that it's being controlled by me,
+			// so it doesn't try to size itself.
+			if(this._started && !widget._started){
+				widget.startup();
+			}
+		},
+
+		removeChild: function(/*Widget or int*/ widget){
+			// summary:
+			//		Removes the passed widget instance from this widget but does
+			//		not destroy it.  You can also pass in an integer indicating
+			//		the index within the container to remove
+
+			if(typeof widget == "number" && widget > 0){
+				widget = this.getChildren()[widget];
+			}
+
+			if(widget){
+				var node = widget.domNode;
+				if(node && node.parentNode){
+					node.parentNode.removeChild(node); // detach but don't destroy
+				}
+			}
+		},
+
+		hasChildren: function(){
+			// summary:
+			//		Returns true if widget has children, i.e. if this.containerNode contains something.
+			return this.getChildren().length > 0;	// Boolean
+		},
+
+		destroyDescendants: function(/*Boolean*/ preserveDom){
+			// summary:
+			//      Destroys all the widgets inside this.containerNode,
+			//      but not this widget itself
+			dojo.forEach(this.getChildren(), function(child){ child.destroyRecursive(preserveDom); });
+		},
+
+		_getSiblingOfChild: function(/*dijit._Widget*/ child, /*int*/ dir){
+			// summary:
+			//		Get the next or previous widget sibling of child
+			// dir:
+			//		if 1, get the next sibling
+			//		if -1, get the previous sibling
+			// tags:
+			//      private
+			var node = child.domNode,
+				which = (dir>0 ? "nextSibling" : "previousSibling");
+			do{
+				node = node[which];
+			}while(node && (node.nodeType != 1 || !dijit.byNode(node)));
+			return node && dijit.byNode(node);	// dijit._Widget
+		},
+
+		getIndexOfChild: function(/*dijit._Widget*/ child){
+			// summary:
+			//		Gets the index of the child in this container or -1 if not found
+			return dojo.indexOf(this.getChildren(), child);	// int
+		},
+
+		startup: function(){
+			// summary:
+			//		Called after all the widgets have been instantiated and their
+			//		dom nodes have been inserted somewhere under dojo.doc.body.
+			//
+			//		Widgets should override this method to do any initialization
+			//		dependent on other widgets existing, and then call
+			//		this superclass method to finish things off.
+			//
+			//		startup() in subclasses shouldn't do anything
+			//		size related because the size of the widget hasn't been set yet.
+
+			if(this._started){ return; }
+
+			// Startup all children of this widget
+			dojo.forEach(this.getChildren(), function(child){ child.startup(); });
+
+			this.inherited(arguments);
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit._Contained"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Contained"] = true;
+dojo.provide("dijit._Contained");
+
+dojo.declare("dijit._Contained",
+		null,
+		{
+			// summary:
+			//		Mixin for widgets that are children of a container widget
+			//
+			// example:
+			// | 	// make a basic custom widget that knows about it's parents
+			// |	dojo.declare("my.customClass",[dijit._Widget,dijit._Contained],{});
+
+			getParent: function(){
+				// summary:
+				//		Returns the parent widget of this widget, assuming the parent
+				//		specifies isContainer
+				var parent = dijit.getEnclosingWidget(this.domNode.parentNode);
+				return parent && parent.isContainer ? parent : null;
+			},
+
+			_getSibling: function(/*String*/ which){
+				// summary:
+				//      Returns next or previous sibling
+				// which:
+				//      Either "next" or "previous"
+				// tags:
+				//      private
+				var node = this.domNode;
+				do{
+					node = node[which+"Sibling"];
+				}while(node && node.nodeType != 1);
+				return node && dijit.byNode(node);	// dijit._Widget
+			},
+
+			getPreviousSibling: function(){
+				// summary:
+				//		Returns null if this is the first child of the parent,
+				//		otherwise returns the next element sibling to the "left".
+
+				return this._getSibling("previous"); // dijit._Widget
+			},
+
+			getNextSibling: function(){
+				// summary:
+				//		Returns null if this is the last child of the parent,
+				//		otherwise returns the next element sibling to the "right".
+
+				return this._getSibling("next"); // dijit._Widget
+			},
+
+			getIndexInParent: function(){
+				// summary:
+				//		Returns the index of this widget within its container parent.
+				//		It returns -1 if the parent does not exist, or if the parent
+				//		is not a dijit._Container
+
+				var p = this.getParent();
+				if(!p || !p.getIndexOfChild){
+					return -1; // int
+				}
+				return p.getIndexOfChild(this); // int
+			}
+		}
+	);
+
+
+}
+
+if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout._LayoutWidget"] = true;
+dojo.provide("dijit.layout._LayoutWidget");
+
+
+
+
+
+dojo.declare("dijit.layout._LayoutWidget",
+	[dijit._Widget, dijit._Container, dijit._Contained],
+	{
+		// summary:
+		//		Base class for a _Container widget which is responsible for laying out its children.
+		//		Widgets which mixin this code must define layout() to manage placement and sizing of the children.
+
+		// baseClass: [protected extension] String
+		//		This class name is applied to the widget's domNode
+		//		and also may be used to generate names for sub nodes,
+		//		for example dijitTabContainer-content.
+		baseClass: "dijitLayoutContainer",
+
+		// isLayoutContainer: [protected] Boolean
+		//		Indicates that this widget is going to call resize() on its
+		//		children widgets, setting their size, when they become visible.
+		isLayoutContainer: true,
+
+		postCreate: function(){
+			dojo.addClass(this.domNode, "dijitContainer");
+
+			this.inherited(arguments);
+		},
+
+		startup: function(){
+			// summary:
+			//		Called after all the widgets have been instantiated and their
+			//		dom nodes have been inserted somewhere under dojo.doc.body.
+			//
+			//		Widgets should override this method to do any initialization
+			//		dependent on other widgets existing, and then call
+			//		this superclass method to finish things off.
+			//
+			//		startup() in subclasses shouldn't do anything
+			//		size related because the size of the widget hasn't been set yet.
+
+			if(this._started){ return; }
+
+			// Need to call inherited first - so that child widgets get started
+			// up correctly
+			this.inherited(arguments);
+
+			// If I am a not being controlled by a parent layout widget...
+			var parent = this.getParent && this.getParent()
+			if(!(parent && parent.isLayoutContainer)){
+				// Do recursive sizing and layout of all my descendants
+				// (passing in no argument to resize means that it has to glean the size itself)
+				this.resize();
+
+				// Since my parent isn't a layout container, and my style *may be* width=height=100%
+				// or something similar (either set directly or via a CSS class),
+				// monitor when my size changes so that I can re-layout.
+				// For browsers where I can't directly monitor when my size changes,
+				// monitor when the viewport changes size, which *may* indicate a size change for me.
+				this.connect(dojo.isIE ? this.domNode : dojo.global, 'onresize', function(){
+					// Using function(){} closure to ensure no arguments to resize.
+					this.resize();
+				});
+			}
+		},
+
+		resize: function(changeSize, resultSize){
+			// summary:
+			//		Call this to resize a widget, or after its size has changed.
+			// description:
+			//		Change size mode:
+			//			When changeSize is specified, changes the marginBox of this widget
+			//			and forces it to relayout its contents accordingly.
+			//			changeSize may specify height, width, or both.
+			//
+			//			If resultSize is specified it indicates the size the widget will
+			//			become after changeSize has been applied.
+			//
+			//		Notification mode:
+			//			When changeSize is null, indicates that the caller has already changed
+			//			the size of the widget, or perhaps it changed because the browser
+			//			window was resized.  Tells widget to relayout its contents accordingly.
+			//
+			//			If resultSize is also specified it indicates the size the widget has
+			//			become.
+			//
+			//		In either mode, this method also:
+			//			1. Sets this._borderBox and this._contentBox to the new size of
+			//				the widget.  Queries the current domNode size if necessary.
+			//			2. Calls layout() to resize contents (and maybe adjust child widgets).
+			//
+			// changeSize: Object?
+			//		Sets the widget to this margin-box size and position.
+			//		May include any/all of the following properties:
+			//	|	{w: int, h: int, l: int, t: int}
+			//
+			// resultSize: Object?
+			//		The margin-box size of this widget after applying changeSize (if
+			//		changeSize is specified).  If caller knows this size and
+			//		passes it in, we don't need to query the browser to get the size.
+			//	|	{w: int, h: int}
+
+			var node = this.domNode;
+
+			// set margin box size, unless it wasn't specified, in which case use current size
+			if(changeSize){
+				dojo.marginBox(node, changeSize);
+
+				// set offset of the node
+				if(changeSize.t){ node.style.top = changeSize.t + "px"; }
+				if(changeSize.l){ node.style.left = changeSize.l + "px"; }
+			}
+
+			// If either height or width wasn't specified by the user, then query node for it.
+			// But note that setting the margin box and then immediately querying dimensions may return
+			// inaccurate results, so try not to depend on it.
+			var mb = resultSize || {};
+			dojo.mixin(mb, changeSize || {});	// changeSize overrides resultSize
+			if( !("h" in mb) || !("w" in mb) ){
+				mb = dojo.mixin(dojo.marginBox(node), mb);	// just use dojo.marginBox() to fill in missing values
+			}
+
+			// Compute and save the size of my border box and content box
+			// (w/out calling dojo.contentBox() since that may fail if size was recently set)
+			var cs = dojo.getComputedStyle(node);
+			var me = dojo._getMarginExtents(node, cs);
+			var be = dojo._getBorderExtents(node, cs);
+			var bb = (this._borderBox = {
+				w: mb.w - (me.w + be.w),
+				h: mb.h - (me.h + be.h)
+			});
+			var pe = dojo._getPadExtents(node, cs);
+			this._contentBox = {
+				l: dojo._toPixelValue(node, cs.paddingLeft),
+				t: dojo._toPixelValue(node, cs.paddingTop),
+				w: bb.w - pe.w,
+				h: bb.h - pe.h
+			};
+
+			// Callback for widget to adjust size of its children
+			this.layout();
+		},
+
+		layout: function(){
+			// summary:
+			//		Widgets override this method to size and position their contents/children.
+			//		When this is called this._contentBox is guaranteed to be set (see resize()).
+			//
+			//		This is called after startup(), and also when the widget's size has been
+			//		changed.
+			// tags:
+			//		protected extension
+		},
+
+		_setupChild: function(/*dijit._Widget*/child){
+			// summary:
+			//		Common setup for initial children and children which are added after startup
+			// tags:
+			//		protected extension
+
+			dojo.addClass(child.domNode, this.baseClass+"-child");
+			if(child.baseClass){
+				dojo.addClass(child.domNode, this.baseClass+"-"+child.baseClass);
+			}
+		},
+
+		addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+			// Overrides _Container.addChild() to call _setupChild()
+			this.inherited(arguments);
+			if(this._started){
+				this._setupChild(child);
+			}
+		},
+
+		removeChild: function(/*dijit._Widget*/ child){
+			// Overrides _Container.removeChild() to remove class added by _setupChild()
+			dojo.removeClass(child.domNode, this.baseClass+"-child");
+			if(child.baseClass){
+				dojo.removeClass(child.domNode, this.baseClass+"-"+child.baseClass);
+			}
+			this.inherited(arguments);
+		}
+	}
+);
+
+dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
+	// summary:
+	//		Given the margin-box size of a node, return its content box size.
+	//		Functions like dojo.contentBox() but is more reliable since it doesn't have
+	//		to wait for the browser to compute sizes.
+	var cs = dojo.getComputedStyle(node);
+	var me = dojo._getMarginExtents(node, cs);
+	var pb = dojo._getPadBorderExtents(node, cs);
+	return {
+		l: dojo._toPixelValue(node, cs.paddingLeft),
+		t: dojo._toPixelValue(node, cs.paddingTop),
+		w: mb.w - (me.w + pb.w),
+		h: mb.h - (me.h + pb.h)
+	};
+};
+
+(function(){
+	var capitalize = function(word){
+		return word.substring(0,1).toUpperCase() + word.substring(1);
+	};
+
+	var size = function(widget, dim){
+		// size the child
+		widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
+
+		// record child's size, but favor our own numbers when we have them.
+		// the browser lies sometimes
+		dojo.mixin(widget, dojo.marginBox(widget.domNode));
+		dojo.mixin(widget, dim);
+	};
+
+	dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){
+		// summary
+		//		Layout a bunch of child dom nodes within a parent dom node
+		// container:
+		//		parent node
+		// dim:
+		//		{l, t, w, h} object specifying dimensions of container into which to place children
+		// children:
+		//		an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ]
+
+		// copy dim because we are going to modify it
+		dim = dojo.mixin({}, dim);
+
+		dojo.addClass(container, "dijitLayoutContainer");
+
+		// Move "client" elements to the end of the array for layout.  a11y dictates that the author
+		// needs to be able to put them in the document in tab-order, but this algorithm requires that
+		// client be last.
+		children = dojo.filter(children, function(item){ return item.layoutAlign != "client"; })
+			.concat(dojo.filter(children, function(item){ return item.layoutAlign == "client"; }));
+
+		// set positions/sizes
+		dojo.forEach(children, function(child){
+			var elm = child.domNode,
+				pos = child.layoutAlign;
+
+			// set elem to upper left corner of unused space; may move it later
+			var elmStyle = elm.style;
+			elmStyle.left = dim.l+"px";
+			elmStyle.top = dim.t+"px";
+			elmStyle.bottom = elmStyle.right = "auto";
+
+			dojo.addClass(elm, "dijitAlign" + capitalize(pos));
+
+			// set size && adjust record of remaining space.
+			// note that setting the width of a <div> may affect its height.
+			if(pos == "top" || pos == "bottom"){
+				size(child, { w: dim.w });
+				dim.h -= child.h;
+				if(pos == "top"){
+					dim.t += child.h;
+				}else{
+					elmStyle.top = dim.t + dim.h + "px";
+				}
+			}else if(pos == "left" || pos == "right"){
+				size(child, { h: dim.h });
+				dim.w -= child.w;
+				if(pos == "left"){
+					dim.l += child.w;
+				}else{
+					elmStyle.left = dim.l + dim.w + "px";
+				}
+			}else if(pos == "client"){
+				size(child, dim);
+			}
+		});
+	};
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit._CssStateMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._CssStateMixin"] = true;
+dojo.provide("dijit._CssStateMixin");
+
+
+dojo.declare("dijit._CssStateMixin", [], {
+	// summary:
+	//		Mixin for widgets to set CSS classes on the widget DOM nodes depending on hover/mouse press/focus
+	//		state changes, and also higher-level state changes such becoming disabled or selected.
+	//
+	// description:
+	//		By mixing this class into your widget, and setting the this.baseClass attribute, it will automatically
+	//		maintain CSS classes on the widget root node (this.domNode) depending on hover,
+	//		active, focus, etc. state.   Ex: with a baseClass of dijitButton, it will apply the classes
+	//		dijitButtonHovered and dijitButtonActive, as the user moves the mouse over the widget and clicks it.
+	//
+	//		It also sets CSS like dijitButtonDisabled based on widget semantic state.
+	//
+	//		By setting the cssStateNodes attribute, a widget can also track events on subnodes (like buttons
+	//		within the widget).
+
+	// cssStateNodes: [protected] Object
+	//		List of sub-nodes within the widget that need CSS classes applied on mouse hover/press and focus
+	//.
+	//		Each entry in the hash is a an attachpoint names (like "upArrowButton") mapped to a CSS class names
+	//		(like "dijitUpArrowButton"). Example:
+	//	|		{
+	//	|			"upArrowButton": "dijitUpArrowButton",
+	//	|			"downArrowButton": "dijitDownArrowButton"
+	//	|		}
+	//		The above will set the CSS class dijitUpArrowButton to the this.upArrowButton DOMNode when it
+	//		is hovered, etc.
+	cssStateNodes: {},
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		// Automatically monitor mouse events (essentially :hover and :active) on this.domNode
+		dojo.forEach(["onmouseenter", "onmouseleave", "onmousedown"], function(e){
+			this.connect(this.domNode, e, "_cssMouseEvent");
+		}, this);
+		
+		// Monitoring changes to disabled, readonly, etc. state, and update CSS class of root node
+		this.connect(this, "set", function(name, value){
+			if(arguments.length >= 2 && {disabled: true, readOnly: true, checked:true, selected:true}[name]){
+				this._setStateClass();
+			}
+		});
+
+		// The widget coming in/out of the focus change affects it's state
+		dojo.forEach(["_onFocus", "_onBlur"], function(ap){
+			this.connect(this, ap, "_setStateClass");
+		}, this);
+
+		// Events on sub nodes within the widget
+		for(var ap in this.cssStateNodes){
+			this._trackMouseState(this[ap], this.cssStateNodes[ap]);
+		}
+		// Set state initially; there's probably no hover/active/focus state but widget might be
+		// disabled/readonly so we want to set CSS classes for those conditions.
+		this._setStateClass();
+	},
+
+	_cssMouseEvent: function(/*Event*/ event){
+		// summary:
+		//	Sets _hovering and _active properties depending on mouse state,
+		//	then calls _setStateClass() to set appropriate CSS classes for this.domNode.
+
+		if(!this.disabled){
+			switch(event.type){
+				case "mouseenter":
+				case "mouseover":	// generated on non-IE browsers even though we connected to mouseenter
+					this._hovering = true;
+					this._active = this._mouseDown;
+					break;
+
+				case "mouseleave":
+				case "mouseout":	// generated on non-IE browsers even though we connected to mouseleave
+					this._hovering = false;
+					this._active = false;
+					break;
+
+				case "mousedown" :
+					this._active = true;
+					this._mouseDown = true;
+					// Set a global event to handle mouseup, so it fires properly
+					// even if the cursor leaves this.domNode before the mouse up event.
+					// Alternately could set active=false on mouseout.
+					var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
+						this._active = false;
+						this._mouseDown = false;
+						this._setStateClass();
+						this.disconnect(mouseUpConnector);
+					});
+					break;
+			}
+			this._setStateClass();
+		}
+	},
+
+	_setStateClass: function(){
+		// summary:
+		//		Update the visual state of the widget by setting the css classes on this.domNode
+		//		(or this.stateNode if defined) by combining this.baseClass with
+		//		various suffixes that represent the current widget state(s).
+		//
+		// description:
+		//		In the case where a widget has multiple
+		//		states, it sets the class based on all possible
+		//	 	combinations.  For example, an invalid form widget that is being hovered
+		//		will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover".
+		//
+		//		The widget may have one or more of the following states, determined
+		//		by this.state, this.checked, this.valid, and this.selected:
+		//			- Error - ValidationTextBox sets this.state to "Error" if the current input value is invalid
+		//			- Checked - ex: a checkmark or a ToggleButton in a checked state, will have this.checked==true
+		//			- Selected - ex: currently selected tab will have this.selected==true
+		//
+		//		In addition, it may have one or more of the following states,
+		//		based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused):
+		//			- Disabled	- if the widget is disabled
+		//			- Active		- if the mouse (or space/enter key?) is being pressed down
+		//			- Focused		- if the widget has focus
+		//			- Hover		- if the mouse is over the widget
+
+		// Compute new set of classes
+		var newStateClasses = this.baseClass.split(" ");
+
+		function multiply(modifier){
+			newStateClasses = newStateClasses.concat(dojo.map(newStateClasses, function(c){ return c+modifier; }), "dijit"+modifier);
+		}
+
+		if(!this.isLeftToRight()){
+			// For RTL mode we need to set an addition class like dijitTextBoxRtl.
+			multiply("Rtl");
+		}
+
+		if(this.checked){
+			multiply("Checked");
+		}
+		if(this.state){
+			multiply(this.state);
+		}
+		if(this.selected){
+			multiply("Selected");
+		}
+
+		if(this.disabled){
+			multiply("Disabled");
+		}else if(this.readOnly){
+			multiply("ReadOnly");
+		}else{
+			if(this._active){
+				multiply("Active");
+			}else if(this._hovering){
+				multiply("Hover");
+			}
+		}
+
+		if(this._focused){
+			multiply("Focused");
+		}
+
+		// Remove old state classes and add new ones.
+		// For performance concerns we only write into domNode.className once.
+		var tn = this.stateNode || this.domNode,
+			classHash = {};	// set of all classes (state and otherwise) for node
+
+		dojo.forEach(tn.className.split(" "), function(c){ classHash[c] = true; });
+
+		if("_stateClasses" in this){
+			dojo.forEach(this._stateClasses, function(c){ delete classHash[c]; });
+		}
+
+		dojo.forEach(newStateClasses, function(c){ classHash[c] = true; });
+
+		var newClasses = [];
+		for(var c in classHash){
+			newClasses.push(c);
+		}
+		tn.className = newClasses.join(" ");
+
+		this._stateClasses = newStateClasses;
+	},
+
+	_trackMouseState: function(/*DomNode*/ node, /*String*/ clazz){
+		// summary:
+		//		Track mouse/focus events on specified node and set CSS class on that node to indicate
+		//		current state.   Usually not called directly, but via cssStateNodes attribute.
+		// description:
+		//		Given class=foo, will set the following CSS class on the node
+		//			- fooActive: if the user is currently pressing down the mouse button while over the node
+		//			- fooHover: if the user is hovering the mouse over the node, but not pressing down a button
+		//			- fooFocus: if the node is focused
+		//
+		//		Note that it won't set any classes if the widget is disabled.
+		// node: DomNode
+		//		Should be a sub-node of the widget, not the top node (this.domNode), since the top node
+		//		is handled specially and automatically just by mixing in this class.
+		// clazz: String
+		//		CSS class name (ex: dijitSliderUpArrow).
+
+		// Current state of node (initially false)
+		// NB: setting specifically to false because dojo.toggleClass() needs true boolean as third arg
+		var hovering=false, active=false, focused=false;
+
+		var self = this,
+			cn = dojo.hitch(this, "connect", node);
+
+		function setClass(){
+			var disabled = ("disabled" in self && self.disabled) || ("readonly" in self && self.readonly);
+			dojo.toggleClass(node, clazz+"Hover", hovering && !active && !disabled);
+			dojo.toggleClass(node, clazz+"Active", active && !disabled);
+			dojo.toggleClass(node, clazz+"Focused", focused && !disabled);
+		}
+
+		// Mouse
+		cn("onmouseenter", function(){
+			hovering = true;
+			setClass();
+		});
+		cn("onmouseleave", function(){
+			hovering = false;
+			active = false;
+			setClass();
+		});
+		cn("onmousedown", function(){
+			active = true;
+			setClass();
+		});
+		cn("onmouseup", function(){
+			active = false;
+			setClass();
+		});
+
+		// Focus
+		cn("onfocus", function(){
+			focused = true;
+			setClass();
+		});
+		cn("onblur", function(){
+			focused = false;
+			setClass();
+		});
+
+		// Just in case widget is enabled/disabled while it has focus/hover/active state.
+		// Maybe this is overkill.
+		this.connect(this, "set", function(name, value){
+			if(name == "disabled" || name == "readOnly"){
+				setClass();
+			}
+		});
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form._FormWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._FormWidget"] = true;
+dojo.provide("dijit.form._FormWidget");
+
+
+
+
+
+
+
+dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+	{
+	// summary:
+	//		Base class for widgets corresponding to native HTML elements such as <checkbox> or <button>,
+	//		which can be children of a <form> node or a `dijit.form.Form` widget.
+	//
+	// description:
+	//		Represents a single HTML element.
+	//		All these widgets should have these attributes just like native HTML input elements.
+	//		You can set them during widget construction or afterwards, via `dijit._Widget.attr`.
+	//
+	//		They also share some common methods.
+
+	// name: String
+	//		Name used when submitting form; same as "name" attribute or plain HTML elements
+	name: "",
+
+	// alt: String
+	//		Corresponds to the native HTML <input> element's attribute.
+	alt: "",
+
+	// value: String
+	//		Corresponds to the native HTML <input> element's attribute.
+	value: "",
+
+	// type: String
+	//		Corresponds to the native HTML <input> element's attribute.
+	type: "text",
+
+	// tabIndex: Integer
+	//		Order fields are traversed when user hits the tab key
+	tabIndex: "0",
+
+	// disabled: Boolean
+	//		Should this widget respond to user input?
+	//		In markup, this is specified as "disabled='disabled'", or just "disabled".
+	disabled: false,
+
+	// intermediateChanges: Boolean
+	//		Fires onChange for each value change or only on demand
+	intermediateChanges: false,
+
+	// scrollOnFocus: Boolean
+	//		On focus, should this widget scroll into view?
+	scrollOnFocus: true,
+
+	// These mixins assume that the focus node is an INPUT, as many but not all _FormWidgets are.
+	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+		value: "focusNode",
+		id: "focusNode",
+		tabIndex: "focusNode",
+		alt: "focusNode",
+		title: "focusNode"
+	}),
+
+	postMixInProperties: function(){
+		// Setup name=foo string to be referenced from the template (but only if a name has been specified)
+		// Unfortunately we can't use attributeMap to set the name due to IE limitations, see #8660
+		// Regarding escaping, see heading "Attribute values" in
+		// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+		this.nameAttrSetting = this.name ? ('name="' + this.name.replace(/'/g, "&quot;") + '"') : '';
+		this.inherited(arguments);
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		this.connect(this.domNode, "onmousedown", "_onMouseDown");
+	},
+
+	_setDisabledAttr: function(/*Boolean*/ value){
+		this.disabled = value;
+		dojo.attr(this.focusNode, 'disabled', value);
+		if(this.valueNode){
+			dojo.attr(this.valueNode, 'disabled', value);
+		}
+		dijit.setWaiState(this.focusNode, "disabled", value);
+
+		if(value){
+			// reset these, because after the domNode is disabled, we can no longer receive
+			// mouse related events, see #4200
+			this._hovering = false;
+			this._active = false;
+
+			// clear tab stop(s) on this widget's focusable node(s)  (ComboBox has two focusable nodes)
+			var attachPointNames = "tabIndex" in this.attributeMap ? this.attributeMap.tabIndex : "focusNode";
+			dojo.forEach(dojo.isArray(attachPointNames) ? attachPointNames : [attachPointNames], function(attachPointName){
+				var node = this[attachPointName];
+				// complex code because tabIndex=-1 on a <div> doesn't work on FF
+				if(dojo.isWebKit || dijit.hasDefaultTabStop(node)){	// see #11064 about webkit bug
+					node.setAttribute('tabIndex', "-1");
+				}else{
+					node.removeAttribute('tabIndex');				
+				}
+			}, this);
+		}else{
+			this.focusNode.setAttribute('tabIndex', this.tabIndex);
+		}
+	},
+
+	setDisabled: function(/*Boolean*/ disabled){
+		// summary:
+		//		Deprecated.   Use set('disabled', ...) instead.
+		dojo.deprecated("setDisabled("+disabled+") is deprecated. Use set('disabled',"+disabled+") instead.", "", "2.0");
+		this.set('disabled', disabled);
+	},
+
+	_onFocus: function(e){
+		if(this.scrollOnFocus){
+			dojo.window.scrollIntoView(this.domNode);
+		}
+		this.inherited(arguments);
+	},
+
+	isFocusable: function(){
+		// summary:
+		//		Tells if this widget is focusable or not.   Used internally by dijit.
+		// tags:
+		//		protected
+		return !this.disabled && !this.readOnly && this.focusNode && (dojo.style(this.domNode, "display") != "none");
+	},
+
+	focus: function(){
+		// summary:
+		//		Put focus on this widget
+		dijit.focus(this.focusNode);
+	},
+
+	compare: function(/*anything*/val1, /*anything*/val2){
+		// summary:
+		//		Compare 2 values (as returned by attr('value') for this widget).
+		// tags:
+		//		protected
+		if(typeof val1 == "number" && typeof val2 == "number"){
+			return (isNaN(val1) && isNaN(val2)) ? 0 : val1 - val2;
+		}else if(val1 > val2){
+			return 1;
+		}else if(val1 < val2){
+			return -1;
+		}else{
+			return 0;
+		}
+	},
+
+	onChange: function(newValue){
+		// summary:
+		//		Callback when this widget's value is changed.
+		// tags:
+		//		callback
+	},
+
+	// _onChangeActive: [private] Boolean
+	//		Indicates that changes to the value should call onChange() callback.
+	//		This is false during widget initialization, to avoid calling onChange()
+	//		when the initial value is set.
+	_onChangeActive: false,
+
+	_handleOnChange: function(/*anything*/ newValue, /* Boolean? */ priorityChange){
+		// summary:
+		//		Called when the value of the widget is set.  Calls onChange() if appropriate
+		// newValue:
+		//		the new value
+		// priorityChange:
+		//		For a slider, for example, dragging the slider is priorityChange==false,
+		//		but on mouse up, it's priorityChange==true.  If intermediateChanges==true,
+		//		onChange is only called form priorityChange=true events.
+		// tags:
+		//		private
+		this._lastValue = newValue;
+		if(this._lastValueReported == undefined && (priorityChange === null || !this._onChangeActive)){
+			// this block executes not for a change, but during initialization,
+			// and is used to store away the original value (or for ToggleButton, the original checked state)
+			this._resetValue = this._lastValueReported = newValue;
+		}
+		if((this.intermediateChanges || priorityChange || priorityChange === undefined) &&
+			((typeof newValue != typeof this._lastValueReported) ||
+				this.compare(newValue, this._lastValueReported) != 0)){
+			this._lastValueReported = newValue;
+			if(this._onChangeActive){
+				if(this._onChangeHandle){
+					clearTimeout(this._onChangeHandle);
+				}
+				// setTimout allows hidden value processing to run and
+				// also the onChange handler can safely adjust focus, etc
+				this._onChangeHandle = setTimeout(dojo.hitch(this,
+					function(){
+						this._onChangeHandle = null;
+						this.onChange(newValue);
+					}), 0); // try to collapse multiple onChange's fired faster than can be processed
+			}
+		}
+	},
+
+	create: function(){
+		// Overrides _Widget.create()
+		this.inherited(arguments);
+		this._onChangeActive = true;
+	},
+
+	destroy: function(){
+		if(this._onChangeHandle){ // destroy called before last onChange has fired
+			clearTimeout(this._onChangeHandle);
+			this.onChange(this._lastValueReported);
+		}
+		this.inherited(arguments);
+	},
+
+	setValue: function(/*String*/ value){
+		// summary:
+		//		Deprecated.   Use set('value', ...) instead.
+		dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated.  Use set('value',"+value+") instead.", "", "2.0");
+		this.set('value', value);
+	},
+
+	getValue: function(){
+		// summary:
+		//		Deprecated.   Use get('value') instead.
+		dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.", "", "2.0");
+		return this.get('value');
+	},
+	
+	_onMouseDown: function(e){
+		// If user clicks on the button, even if the mouse is released outside of it,
+		// this button should get focus (to mimics native browser buttons).
+		// This is also needed on chrome because otherwise buttons won't get focus at all,
+		// which leads to bizarre focus restore on Dialog close etc.
+		if(!e.ctrlKey && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac
+			// Set a global event to handle mouseup, so it fires properly
+			// even if the cursor leaves this.domNode before the mouse up event.
+			var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
+				if (this.isFocusable()) {
+					this.focus();
+				}
+				this.disconnect(mouseUpConnector);
+			});
+		}
+	}
+});
+
+dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget,
+{
+	// summary:
+	//		Base class for widgets corresponding to native HTML elements such as <input> or <select> that have user changeable values.
+	// description:
+	//		Each _FormValueWidget represents a single input value, and has a (possibly hidden) <input> element,
+	//		to which it serializes it's input value, so that form submission (either normal submission or via FormBind?)
+	//		works as expected.
+
+	// Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared
+	// directly in the template as read by the parser in order to function. IE is known to specifically
+	// require the 'name' attribute at element creation time.   See #8484, #8660.
+	// TODO: unclear what that {value: ""} is for; FormWidget.attributeMap copies value to focusNode,
+	// so maybe {value: ""} is so the value *doesn't* get copied to focusNode?
+	// Seems like we really want value removed from attributeMap altogether
+	// (although there's no easy way to do that now)
+
+	// readOnly: Boolean
+	//		Should this widget respond to user input?
+	//		In markup, this is specified as "readOnly".
+	//		Similar to disabled except readOnly form values are submitted.
+	readOnly: false,
+
+	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+		value: "",
+		readOnly: "focusNode"
+	}),
+
+	_setReadOnlyAttr: function(/*Boolean*/ value){
+		this.readOnly = value;
+		dojo.attr(this.focusNode, 'readOnly', value);
+		dijit.setWaiState(this.focusNode, "readonly", value);
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		if(dojo.isIE){ // IE won't stop the event with keypress
+			this.connect(this.focusNode || this.domNode, "onkeydown", this._onKeyDown);
+		}
+		// Update our reset value if it hasn't yet been set (because this.set()
+		// is only called when there *is* a value)
+		if(this._resetValue === undefined){
+			this._resetValue = this.value;
+		}
+	},
+
+	_setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
+		// summary:
+		//		Hook so attr('value', value) works.
+		// description:
+		//		Sets the value of the widget.
+		//		If the value has changed, then fire onChange event, unless priorityChange
+		//		is specified as null (or false?)
+		this.value = newValue;
+		this._handleOnChange(newValue, priorityChange);
+	},
+
+	_getValueAttr: function(){
+		// summary:
+		//		Hook so attr('value') works.
+		return this._lastValue;
+	},
+
+	undo: function(){
+		// summary:
+		//		Restore the value to the last value passed to onChange
+		this._setValueAttr(this._lastValueReported, false);
+	},
+
+	reset: function(){
+		// summary:
+		//		Reset the widget's value to what it was at initialization time
+		this._hasBeenBlurred = false;
+		this._setValueAttr(this._resetValue, true);
+	},
+
+	_onKeyDown: function(e){
+		if(e.keyCode == dojo.keys.ESCAPE && !(e.ctrlKey || e.altKey || e.metaKey)){
+			var te;
+			if(dojo.isIE){
+				e.preventDefault(); // default behavior needs to be stopped here since keypress is too late
+				te = document.createEventObject();
+				te.keyCode = dojo.keys.ESCAPE;
+				te.shiftKey = e.shiftKey;
+				e.srcElement.fireEvent('onkeypress', te);
+			}
+		}
+	},
+
+	_layoutHackIE7: function(){
+		// summary:
+		//		Work around table sizing bugs on IE7 by forcing redraw
+
+		if(dojo.isIE == 7){ // fix IE7 layout bug when the widget is scrolled out of sight
+			var domNode = this.domNode;
+			var parent = domNode.parentNode;
+			var pingNode = domNode.firstChild || domNode; // target node most unlikely to have a custom filter
+			var origFilter = pingNode.style.filter; // save custom filter, most likely nothing
+			var _this = this;
+			while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet
+				(function ping(){
+					var disconnectHandle = _this.connect(parent, "onscroll",
+						function(e){
+							_this.disconnect(disconnectHandle); // only call once
+							pingNode.style.filter = (new Date()).getMilliseconds(); // set to anything that's unique
+							setTimeout(function(){ pingNode.style.filter = origFilter }, 0); // restore custom filter, if any
+						}
+					);
+				})();
+				parent = parent.parentNode;
+			}
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.dijit"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.dijit"] = true;
+dojo.provide("dijit.dijit");
+
+/*=====
+dijit.dijit = {
+	// summary:
+	//		A roll-up for common dijit methods
+	// description:
+	//	A rollup file for the build system including the core and common
+	//	dijit files.
+	//
+	// example:
+	// | <script type="text/javascript" src="js/dojo/dijit/dijit.js"></script>
+	//
+};
+=====*/
+
+// All the stuff in _base (these are the function that are guaranteed available without an explicit dojo.require)
+
+
+// And some other stuff that we tend to pull in all the time anyway
+
+
+
+
+
+
+
+}
+
Index: trunk/web/dojo/dijit/tree/ForestStoreModel.js
===================================================================
--- trunk/web/dojo/dijit/tree/ForestStoreModel.js	(revision 0)
+++ trunk/web/dojo/dijit/tree/ForestStoreModel.js	(revision 9)
@@ -0,0 +1,83 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){
+dojo._hasResource["dijit.tree.ForestStoreModel"]=true;
+dojo.provide("dijit.tree.ForestStoreModel");
+dojo.require("dijit.tree.TreeStoreModel");
+dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_1){
+this.root={store:this,root:true,id:_1.rootId,label:_1.rootLabel,children:_1.rootChildren};
+},mayHaveChildren:function(_2){
+return _2===this.root||this.inherited(arguments);
+},getChildren:function(_3,_4,_5){
+if(_3===this.root){
+if(this.root.children){
+_4(this.root.children);
+}else{
+this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_6){
+this.root.children=_6;
+_4(_6);
+}),onError:_5});
+}
+}else{
+this.inherited(arguments);
+}
+},isItem:function(_7){
+return (_7===this.root)?true:this.inherited(arguments);
+},fetchItemByIdentity:function(_8){
+if(_8.identity==this.root.id){
+var _9=_8.scope?_8.scope:dojo.global;
+if(_8.onItem){
+_8.onItem.call(_9,this.root);
+}
+}else{
+this.inherited(arguments);
+}
+},getIdentity:function(_a){
+return (_a===this.root)?this.root.id:this.inherited(arguments);
+},getLabel:function(_b){
+return (_b===this.root)?this.root.label:this.inherited(arguments);
+},newItem:function(_c,_d,_e){
+if(_d===this.root){
+this.onNewRootItem(_c);
+return this.store.newItem(_c);
+}else{
+return this.inherited(arguments);
+}
+},onNewRootItem:function(_f){
+},pasteItem:function(_10,_11,_12,_13,_14){
+if(_11===this.root){
+if(!_13){
+this.onLeaveRoot(_10);
+}
+}
+dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_10,_11===this.root?null:_11,_12===this.root?null:_12,_13,_14);
+if(_12===this.root){
+this.onAddToRoot(_10);
+}
+},onAddToRoot:function(_15){
+},onLeaveRoot:function(_16){
+},_requeryTop:function(){
+var _17=this.root.children||[];
+this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_18){
+this.root.children=_18;
+if(_17.length!=_18.length||dojo.some(_17,function(_19,idx){
+return _18[idx]!=_19;
+})){
+this.onChildrenChange(this.root,_18);
+}
+})});
+},onNewItem:function(_1a,_1b){
+this._requeryTop();
+this.inherited(arguments);
+},onDeleteItem:function(_1c){
+if(dojo.indexOf(this.root.children,_1c)!=-1){
+this._requeryTop();
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dijit/tree/model.js
===================================================================
--- trunk/web/dojo/dijit/tree/model.js	(revision 0)
+++ trunk/web/dojo/dijit/tree/model.js	(revision 9)
@@ -0,0 +1,20 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo.declare("dijit.tree.model",null,{destroy:function(){
+},getRoot:function(_1){
+},mayHaveChildren:function(_2){
+},getChildren:function(_3,_4){
+},isItem:function(_5){
+},fetchItemByIdentity:function(_6){
+},getIdentity:function(_7){
+},getLabel:function(_8){
+},newItem:function(_9,_a,_b){
+},pasteItem:function(_c,_d,_e,_f){
+},onChange:function(_10){
+},onChildrenChange:function(_11,_12){
+}});
Index: trunk/web/dojo/dijit/tree/_dndSelector.js
===================================================================
--- trunk/web/dojo/dijit/tree/_dndSelector.js	(revision 0)
+++ trunk/web/dojo/dijit/tree/_dndSelector.js	(revision 9)
@@ -0,0 +1,125 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree._dndSelector"]){
+dojo._hasResource["dijit.tree._dndSelector"]=true;
+dojo.provide("dijit.tree._dndSelector");
+dojo.require("dojo.dnd.common");
+dojo.require("dijit.tree._dndContainer");
+dojo.declare("dijit.tree._dndSelector",dijit.tree._dndContainer,{constructor:function(_1,_2){
+this.selection={};
+this.anchor=null;
+this.simpleSelection=false;
+this.events.push(dojo.connect(this.tree.domNode,"onmousedown",this,"onMouseDown"),dojo.connect(this.tree.domNode,"onmouseup",this,"onMouseUp"),dojo.connect(this.tree.domNode,"onmousemove",this,"onMouseMove"));
+},singular:false,getSelectedNodes:function(){
+return this.selection;
+},selectNone:function(){
+return this._removeSelection()._removeAnchor();
+},destroy:function(){
+this.inherited(arguments);
+this.selection=this.anchor=null;
+},onMouseDown:function(e){
+if(!this.current){
+return;
+}
+if(e.button==dojo.mouseButtons.RIGHT){
+return;
+}
+var _3=dijit.getEnclosingWidget(this.current),id=_3.id+"-dnd";
+if(!dojo.hasAttr(this.current,"id")){
+dojo.attr(this.current,"id",id);
+}
+if(!this.singular&&!dojo.isCopyKey(e)&&!e.shiftKey&&(this.current.id in this.selection)){
+this.simpleSelection=true;
+dojo.stopEvent(e);
+return;
+}
+if(this.singular){
+if(this.anchor==this.current){
+if(dojo.isCopyKey(e)){
+this.selectNone();
+}
+}else{
+this.selectNone();
+this.anchor=this.current;
+this._addItemClass(this.anchor,"Anchor");
+this.selection[this.current.id]=this.current;
+}
+}else{
+if(!this.singular&&e.shiftKey){
+if(dojo.isCopyKey(e)){
+}else{
+}
+}else{
+if(dojo.isCopyKey(e)){
+if(this.anchor==this.current){
+delete this.selection[this.anchor.id];
+this._removeAnchor();
+}else{
+if(this.current.id in this.selection){
+this._removeItemClass(this.current,"Selected");
+delete this.selection[this.current.id];
+}else{
+if(this.anchor){
+this._removeItemClass(this.anchor,"Anchor");
+this._addItemClass(this.anchor,"Selected");
+}
+this.anchor=this.current;
+this._addItemClass(this.current,"Anchor");
+this.selection[this.current.id]=this.current;
+}
+}
+}else{
+if(!(id in this.selection)){
+this.selectNone();
+this.anchor=this.current;
+this._addItemClass(this.current,"Anchor");
+this.selection[id]=this.current;
+}
+}
+}
+}
+dojo.stopEvent(e);
+},onMouseUp:function(e){
+if(!this.simpleSelection){
+return;
+}
+this.simpleSelection=false;
+this.selectNone();
+if(this.current){
+this.anchor=this.current;
+this._addItemClass(this.anchor,"Anchor");
+this.selection[this.current.id]=this.current;
+}
+},onMouseMove:function(e){
+this.simpleSelection=false;
+},_removeSelection:function(){
+var e=dojo.dnd._empty;
+for(var i in this.selection){
+if(i in e){
+continue;
+}
+var _4=dojo.byId(i);
+if(_4){
+this._removeItemClass(_4,"Selected");
+}
+}
+this.selection={};
+return this;
+},_removeAnchor:function(){
+if(this.anchor){
+this._removeItemClass(this.anchor,"Anchor");
+this.anchor=null;
+}
+return this;
+},forInSelectedItems:function(f,o){
+o=o||dojo.global;
+for(var id in this.selection){
+f.call(o,this.getItem(id),id,this);
+}
+}});
+}
Index: trunk/web/dojo/dijit/tree/dndSource.js
===================================================================
--- trunk/web/dojo/dijit/tree/dndSource.js	(revision 0)
+++ trunk/web/dojo/dijit/tree/dndSource.js	(revision 9)
@@ -0,0 +1,240 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree.dndSource"]){
+dojo._hasResource["dijit.tree.dndSource"]=true;
+dojo.provide("dijit.tree.dndSource");
+dojo.require("dijit.tree._dndSelector");
+dojo.require("dojo.dnd.Manager");
+dojo.declare("dijit.tree.dndSource",dijit.tree._dndSelector,{isSource:true,accept:["text","treeNode"],copyOnly:false,dragThreshold:5,betweenThreshold:0,constructor:function(_1,_2){
+if(!_2){
+_2={};
+}
+dojo.mixin(this,_2);
+this.isSource=typeof _2.isSource=="undefined"?true:_2.isSource;
+var _3=_2.accept instanceof Array?_2.accept:["text","treeNode"];
+this.accept=null;
+if(_3.length){
+this.accept={};
+for(var i=0;i<_3.length;++i){
+this.accept[_3[i]]=1;
+}
+}
+this.isDragging=false;
+this.mouseDown=false;
+this.targetAnchor=null;
+this.targetBox=null;
+this.dropPosition="";
+this._lastX=0;
+this._lastY=0;
+this.sourceState="";
+if(this.isSource){
+dojo.addClass(this.node,"dojoDndSource");
+}
+this.targetState="";
+if(this.accept){
+dojo.addClass(this.node,"dojoDndTarget");
+}
+this.topics=[dojo.subscribe("/dnd/source/over",this,"onDndSourceOver"),dojo.subscribe("/dnd/start",this,"onDndStart"),dojo.subscribe("/dnd/drop",this,"onDndDrop"),dojo.subscribe("/dnd/cancel",this,"onDndCancel")];
+},checkAcceptance:function(_4,_5){
+return true;
+},copyState:function(_6){
+return this.copyOnly||_6;
+},destroy:function(){
+this.inherited("destroy",arguments);
+dojo.forEach(this.topics,dojo.unsubscribe);
+this.targetAnchor=null;
+},_onDragMouse:function(e){
+var m=dojo.dnd.manager(),_7=this.targetAnchor,_8=this.current,_9=this.currentWidget,_a=this.dropPosition;
+var _b="Over";
+if(_8&&this.betweenThreshold>0){
+if(!this.targetBox||_7!=_8){
+this.targetBox=dojo.position(_8,true);
+}
+if((e.pageY-this.targetBox.y)<=this.betweenThreshold){
+_b="Before";
+}else{
+if((e.pageY-this.targetBox.y)>=(this.targetBox.h-this.betweenThreshold)){
+_b="After";
+}
+}
+}
+if(_8!=_7||_b!=_a){
+if(_7){
+this._removeItemClass(_7,_a);
+}
+if(_8){
+this._addItemClass(_8,_b);
+}
+if(!_8){
+m.canDrop(false);
+}else{
+if(_9==this.tree.rootNode&&_b!="Over"){
+m.canDrop(false);
+}else{
+if(m.source==this&&(_8.id in this.selection)){
+m.canDrop(false);
+}else{
+if(this.checkItemAcceptance(_8,m.source,_b.toLowerCase())&&!this._isParentChildDrop(m.source,_8)){
+m.canDrop(true);
+}else{
+m.canDrop(false);
+}
+}
+}
+}
+this.targetAnchor=_8;
+this.dropPosition=_b;
+}
+},onMouseMove:function(e){
+if(this.isDragging&&this.targetState=="Disabled"){
+return;
+}
+this.inherited(arguments);
+var m=dojo.dnd.manager();
+if(this.isDragging){
+this._onDragMouse(e);
+}else{
+if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>=this.dragThreshold||Math.abs(e.pageY-this._lastY)>=this.dragThreshold)){
+var n=this.getSelectedNodes();
+var _c=[];
+for(var i in n){
+_c.push(n[i]);
+}
+if(_c.length){
+m.startDrag(this,_c,this.copyState(dojo.isCopyKey(e)));
+}
+}
+}
+},onMouseDown:function(e){
+this.mouseDown=true;
+this.mouseButton=e.button;
+this._lastX=e.pageX;
+this._lastY=e.pageY;
+this.inherited("onMouseDown",arguments);
+},onMouseUp:function(e){
+if(this.mouseDown){
+this.mouseDown=false;
+this.inherited("onMouseUp",arguments);
+}
+},onMouseOut:function(){
+this.inherited(arguments);
+this._unmarkTargetAnchor();
+},checkItemAcceptance:function(_d,_e,_f){
+return true;
+},onDndSourceOver:function(_10){
+if(this!=_10){
+this.mouseDown=false;
+this._unmarkTargetAnchor();
+}else{
+if(this.isDragging){
+var m=dojo.dnd.manager();
+m.canDrop(false);
+}
+}
+},onDndStart:function(_11,_12,_13){
+if(this.isSource){
+this._changeState("Source",this==_11?(_13?"Copied":"Moved"):"");
+}
+var _14=this.checkAcceptance(_11,_12);
+this._changeState("Target",_14?"":"Disabled");
+if(this==_11){
+dojo.dnd.manager().overSource(this);
+}
+this.isDragging=true;
+},itemCreator:function(_15,_16,_17){
+return dojo.map(_15,function(_18){
+return {"id":_18.id,"name":_18.textContent||_18.innerText||""};
+});
+},onDndDrop:function(_19,_1a,_1b){
+if(this.containerState=="Over"){
+var _1c=this.tree,_1d=_1c.model,_1e=this.targetAnchor,_1f=false;
+this.isDragging=false;
+var _20=dijit.getEnclosingWidget(_1e);
+var _21;
+var _22;
+_21=(_20&&_20.item)||_1c.item;
+if(this.dropPosition=="Before"||this.dropPosition=="After"){
+_21=(_20.getParent()&&_20.getParent().item)||_1c.item;
+_22=_20.getIndexInParent();
+if(this.dropPosition=="After"){
+_22=_20.getIndexInParent()+1;
+}
+}else{
+_21=(_20&&_20.item)||_1c.item;
+}
+var _23;
+dojo.forEach(_1a,function(_24,idx){
+var _25=_19.getItem(_24.id);
+if(dojo.indexOf(_25.type,"treeNode")!=-1){
+var _26=_25.data,_27=_26.item,_28=_26.getParent().item;
+}
+if(_19==this){
+if(typeof _22=="number"){
+if(_21==_28&&_26.getIndexInParent()<_22){
+_22-=1;
+}
+}
+_1d.pasteItem(_27,_28,_21,_1b,_22);
+}else{
+if(_1d.isItem(_27)){
+_1d.pasteItem(_27,_28,_21,_1b,_22);
+}else{
+if(!_23){
+_23=this.itemCreator(_1a,_1e,_19);
+}
+_1d.newItem(_23[idx],_21,_22);
+}
+}
+},this);
+this.tree._expandNode(_20);
+}
+this.onDndCancel();
+},onDndCancel:function(){
+this._unmarkTargetAnchor();
+this.isDragging=false;
+this.mouseDown=false;
+delete this.mouseButton;
+this._changeState("Source","");
+this._changeState("Target","");
+},onOverEvent:function(){
+this.inherited(arguments);
+dojo.dnd.manager().overSource(this);
+},onOutEvent:function(){
+this._unmarkTargetAnchor();
+var m=dojo.dnd.manager();
+if(this.isDragging){
+m.canDrop(false);
+}
+m.outSource(this);
+this.inherited(arguments);
+},_isParentChildDrop:function(_29,_2a){
+if(!_29.tree||_29.tree!=this.tree){
+return false;
+}
+var _2b=_29.tree.domNode;
+var ids={};
+for(var x in _29.selection){
+ids[_29.selection[x].parentNode.id]=true;
+}
+var _2c=_2a.parentNode;
+while(_2c!=_2b&&(!_2c.id||!ids[_2c.id])){
+_2c=_2c.parentNode;
+}
+return _2c.id&&ids[_2c.id];
+},_unmarkTargetAnchor:function(){
+if(!this.targetAnchor){
+return;
+}
+this._removeItemClass(this.targetAnchor,this.dropPosition);
+this.targetAnchor=null;
+this.targetBox=null;
+this.dropPosition=null;
+},_markDndStatus:function(_2d){
+this._changeState("Source",_2d?"Copied":"Moved");
+}});
+}
Index: trunk/web/dojo/dijit/tree/_dndContainer.js
===================================================================
--- trunk/web/dojo/dijit/tree/_dndContainer.js	(revision 0)
+++ trunk/web/dojo/dijit/tree/_dndContainer.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree._dndContainer"]){
+dojo._hasResource["dijit.tree._dndContainer"]=true;
+dojo.provide("dijit.tree._dndContainer");
+dojo.require("dojo.dnd.common");
+dojo.require("dojo.dnd.Container");
+dojo.declare("dijit.tree._dndContainer",null,{constructor:function(_1,_2){
+this.tree=_1;
+this.node=_1.domNode;
+dojo.mixin(this,_2);
+this.map={};
+this.current=null;
+this.containerState="";
+dojo.addClass(this.node,"dojoDndContainer");
+this.events=[dojo.connect(this.node,"onmouseenter",this,"onOverEvent"),dojo.connect(this.node,"onmouseleave",this,"onOutEvent"),dojo.connect(this.tree,"_onNodeMouseEnter",this,"onMouseOver"),dojo.connect(this.tree,"_onNodeMouseLeave",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",dojo,"stopEvent"),dojo.connect(this.node,"onselectstart",dojo,"stopEvent")];
+},getItem:function(_3){
+var _4=this.selection[_3],_5={data:dijit.getEnclosingWidget(_4),type:["treeNode"]};
+return _5;
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+this.node=this.parent=null;
+},onMouseOver:function(_6,_7){
+this.current=_6.rowNode;
+this.currentWidget=_6;
+},onMouseOut:function(_8,_9){
+this.current=null;
+this.currentWidget=null;
+},_changeState:function(_a,_b){
+var _c="dojoDnd"+_a;
+var _d=_a.toLowerCase()+"State";
+dojo.removeClass(this.node,_c+this[_d]);
+dojo.addClass(this.node,_c+_b);
+this[_d]=_b;
+},_addItemClass:function(_e,_f){
+dojo.addClass(_e,"dojoDndItem"+_f);
+},_removeItemClass:function(_10,_11){
+dojo.removeClass(_10,"dojoDndItem"+_11);
+},onOverEvent:function(){
+this._changeState("Container","Over");
+},onOutEvent:function(){
+this._changeState("Container","");
+}});
+}
Index: trunk/web/dojo/dijit/tree/TreeStoreModel.js
===================================================================
--- trunk/web/dojo/dijit/tree/TreeStoreModel.js	(revision 0)
+++ trunk/web/dojo/dijit/tree/TreeStoreModel.js	(revision 9)
@@ -0,0 +1,145 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){
+dojo._hasResource["dijit.tree.TreeStoreModel"]=true;
+dojo.provide("dijit.tree.TreeStoreModel");
+dojo.declare("dijit.tree.TreeStoreModel",null,{store:null,childrenAttrs:["children"],newItemIdAttr:"id",labelAttr:"",root:null,query:null,deferItemLoadingUntilExpand:false,constructor:function(_1){
+dojo.mixin(this,_1);
+this.connects=[];
+var _2=this.store;
+if(!_2.getFeatures()["dojo.data.api.Identity"]){
+throw new Error("dijit.Tree: store must support dojo.data.Identity");
+}
+if(_2.getFeatures()["dojo.data.api.Notification"]){
+this.connects=this.connects.concat([dojo.connect(_2,"onNew",this,"onNewItem"),dojo.connect(_2,"onDelete",this,"onDeleteItem"),dojo.connect(_2,"onSet",this,"onSetItem")]);
+}
+},destroy:function(){
+dojo.forEach(this.connects,dojo.disconnect);
+},getRoot:function(_3,_4){
+if(this.root){
+_3(this.root);
+}else{
+this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_5){
+if(_5.length!=1){
+throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_5.length+" items, but must return exactly one item");
+}
+this.root=_5[0];
+_3(this.root);
+}),onError:_4});
+}
+},mayHaveChildren:function(_6){
+return dojo.some(this.childrenAttrs,function(_7){
+return this.store.hasAttribute(_6,_7);
+},this);
+},getChildren:function(_8,_9,_a){
+var _b=this.store;
+if(!_b.isItemLoaded(_8)){
+var _c=dojo.hitch(this,arguments.callee);
+_b.loadItem({item:_8,onItem:function(_d){
+_c(_d,_9,_a);
+},onError:_a});
+return;
+}
+var _e=[];
+for(var i=0;i<this.childrenAttrs.length;i++){
+var _f=_b.getValues(_8,this.childrenAttrs[i]);
+_e=_e.concat(_f);
+}
+var _10=0;
+if(!this.deferItemLoadingUntilExpand){
+dojo.forEach(_e,function(_11){
+if(!_b.isItemLoaded(_11)){
+_10++;
+}
+});
+}
+if(_10==0){
+_9(_e);
+}else{
+dojo.forEach(_e,function(_12,idx){
+if(!_b.isItemLoaded(_12)){
+_b.loadItem({item:_12,onItem:function(_13){
+_e[idx]=_13;
+if(--_10==0){
+_9(_e);
+}
+},onError:_a});
+}
+});
+}
+},isItem:function(_14){
+return this.store.isItem(_14);
+},fetchItemByIdentity:function(_15){
+this.store.fetchItemByIdentity(_15);
+},getIdentity:function(_16){
+return this.store.getIdentity(_16);
+},getLabel:function(_17){
+if(this.labelAttr){
+return this.store.getValue(_17,this.labelAttr);
+}else{
+return this.store.getLabel(_17);
+}
+},newItem:function(_18,_19,_1a){
+var _1b={parent:_19,attribute:this.childrenAttrs[0],insertIndex:_1a};
+if(this.newItemIdAttr&&_18[this.newItemIdAttr]){
+this.fetchItemByIdentity({identity:_18[this.newItemIdAttr],scope:this,onItem:function(_1c){
+if(_1c){
+this.pasteItem(_1c,null,_19,true,_1a);
+}else{
+this.store.newItem(_18,_1b);
+}
+}});
+}else{
+this.store.newItem(_18,_1b);
+}
+},pasteItem:function(_1d,_1e,_1f,_20,_21){
+var _22=this.store,_23=this.childrenAttrs[0];
+if(_1e){
+dojo.forEach(this.childrenAttrs,function(_24){
+if(_22.containsValue(_1e,_24,_1d)){
+if(!_20){
+var _25=dojo.filter(_22.getValues(_1e,_24),function(x){
+return x!=_1d;
+});
+_22.setValues(_1e,_24,_25);
+}
+_23=_24;
+}
+});
+}
+if(_1f){
+if(typeof _21=="number"){
+var _26=_22.getValues(_1f,_23).slice();
+_26.splice(_21,0,_1d);
+_22.setValues(_1f,_23,_26);
+}else{
+_22.setValues(_1f,_23,_22.getValues(_1f,_23).concat(_1d));
+}
+}
+},onChange:function(_27){
+},onChildrenChange:function(_28,_29){
+},onDelete:function(_2a,_2b){
+},onNewItem:function(_2c,_2d){
+if(!_2d){
+return;
+}
+this.getChildren(_2d.item,dojo.hitch(this,function(_2e){
+this.onChildrenChange(_2d.item,_2e);
+}));
+},onDeleteItem:function(_2f){
+this.onDelete(_2f);
+},onSetItem:function(_30,_31,_32,_33){
+if(dojo.indexOf(this.childrenAttrs,_31)!=-1){
+this.getChildren(_30,dojo.hitch(this,function(_34){
+this.onChildrenChange(_30,_34);
+}));
+}else{
+this.onChange(_30);
+}
+}});
+}
Index: trunk/web/dojo/dijit/MenuSeparator.js
===================================================================
--- trunk/web/dojo/dijit/MenuSeparator.js	(revision 0)
+++ trunk/web/dojo/dijit/MenuSeparator.js	(revision 9)
@@ -0,0 +1,19 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dijit.MenuSeparator"]){
+dojo._hasResource["dijit.MenuSeparator"]=true;
+dojo.provide("dijit.MenuSeparator");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuSeparator.html","<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+},isFocusable:function(){
+return false;
+}});
+}
Index: trunk/web/dojo/dojox/cometd.js
===================================================================
--- trunk/web/dojo/dojox/cometd.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd"]){
+dojo._hasResource["dojox.cometd"]=true;
+dojo.provide("dojox.cometd");
+dojo.require("dojox.cometd._base");
+dojo.require("dojox.cometd.longPollTransport");
+dojo.require("dojox.cometd.callbackPollTransport");
+}
Index: trunk/web/dojo/dojox/encoding/compression/splay.js
===================================================================
--- trunk/web/dojo/dojox/encoding/compression/splay.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/compression/splay.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.compression.splay"]){
+dojo._hasResource["dojox.encoding.compression.splay"]=true;
+dojo.provide("dojox.encoding.compression.splay");
+dojo.require("dojox.encoding.bits");
+dojox.encoding.compression.Splay=function(n){
+this.up=new Array(2*n+1);
+this.left=new Array(n);
+this.right=new Array(n);
+this.reset();
+};
+dojo.extend(dojox.encoding.compression.Splay,{reset:function(){
+for(var i=1;i<this.up.length;this.up[i]=Math.floor((i-1)/2),++i){
+}
+for(var i=0;i<this.left.length;this.left[i]=2*i+1,this.right[i]=2*i+2,++i){
+}
+},splay:function(i){
+var a=i+this.left.length;
+do{
+var c=this.up[a];
+if(c){
+var d=this.up[c];
+var b=this.left[d];
+if(c==b){
+b=this.right[d];
+this.right[d]=a;
+}else{
+this.left[d]=a;
+}
+this[a==this.left[c]?"left":"right"][c]=b;
+this.up[a]=d;
+this.up[b]=c;
+a=d;
+}else{
+a=c;
+}
+}while(a);
+},encode:function(_1,_2){
+var s=[],a=_1+this.left.length;
+do{
+s.push(this.right[this.up[a]]==a);
+a=this.up[a];
+}while(a);
+this.splay(_1);
+var l=s.length;
+while(s.length){
+_2.putBits(s.pop()?1:0,1);
+}
+return l;
+},decode:function(_3){
+var a=0;
+do{
+a=this[_3.getBits(1)?"right":"left"][a];
+}while(a<this.left.length);
+a-=this.left.length;
+this.splay(a);
+return a;
+}});
+}
Index: trunk/web/dojo/dojox/encoding/compression/lzw.js
===================================================================
--- trunk/web/dojo/dojox/encoding/compression/lzw.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/compression/lzw.js	(revision 9)
@@ -0,0 +1,83 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.compression.lzw"]){
+dojo._hasResource["dojox.encoding.compression.lzw"]=true;
+dojo.provide("dojox.encoding.compression.lzw");
+dojo.require("dojox.encoding.bits");
+(function(){
+var _1=function(x){
+var w=1;
+for(var v=2;x>=v;v<<=1,++w){
+}
+return w;
+};
+dojox.encoding.compression.lzw.Encoder=function(n){
+this.size=n;
+this.init();
+};
+dojo.extend(dojox.encoding.compression.lzw.Encoder,{init:function(){
+this.dict={};
+for(var i=0;i<this.size;++i){
+this.dict[String.fromCharCode(i)]=i;
+}
+this.width=_1(this.code=this.size);
+this.p="";
+},encode:function(_2,_3){
+var c=String.fromCharCode(_2),p=this.p+c,r=0;
+if(p in this.dict){
+this.p=p;
+return r;
+}
+_3.putBits(this.dict[this.p],this.width);
+if((this.code&(this.code+1))==0){
+_3.putBits(this.code++,r=this.width++);
+}
+this.dict[p]=this.code++;
+this.p=c;
+return r+this.width;
+},flush:function(_4){
+if(this.p.length==0){
+return 0;
+}
+_4.putBits(this.dict[this.p],this.width);
+this.p="";
+return this.width;
+}});
+dojox.encoding.compression.lzw.Decoder=function(n){
+this.size=n;
+this.init();
+};
+dojo.extend(dojox.encoding.compression.lzw.Decoder,{init:function(){
+this.codes=new Array(this.size);
+for(var i=0;i<this.size;++i){
+this.codes[i]=String.fromCharCode(i);
+}
+this.width=_1(this.size);
+this.p=-1;
+},decode:function(_5){
+var c=_5.getBits(this.width),v;
+if(c<this.codes.length){
+v=this.codes[c];
+if(this.p>=0){
+this.codes.push(this.codes[this.p]+v.substr(0,1));
+}
+}else{
+if((c&(c+1))==0){
+this.codes.push("");
+++this.width;
+return "";
+}
+var x=this.codes[this.p];
+v=x+x.substr(0,1);
+this.codes.push(v);
+}
+this.p=c;
+return v;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/encoding/LICENSE
===================================================================
--- trunk/web/dojo/dojox/encoding/LICENSE	(revision 0)
+++ trunk/web/dojo/dojox/encoding/LICENSE	(revision 9)
@@ -0,0 +1,14 @@
+License Disclaimer:
+
+All contents of this directory are Copyright (c) the Dojo Foundation, with the
+following exceptions:
+-------------------------------------------------------------------------------
+
+MD5.js, SHA1.js:
+	* Copyright 1998-2005, Paul Johnstone
+	  Distributed under the terms of the BSD License
+
+SimpleAES.js
+	* Original version by Chris Veness (CLA signed with permission
+	  given under the terms of the BSD license)
+	  http://www.movable-type.co.uk/scripts/aes.html
Index: trunk/web/dojo/dojox/encoding/digests/_base.js
===================================================================
--- trunk/web/dojo/dojox/encoding/digests/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/digests/_base.js	(revision 9)
@@ -0,0 +1,57 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.digests._base"]){
+dojo._hasResource["dojox.encoding.digests._base"]=true;
+dojo.provide("dojox.encoding.digests._base");
+(function(){
+var d=dojox.encoding.digests;
+d.outputTypes={Base64:0,Hex:1,String:2,Raw:3};
+d.addWords=function(a,b){
+var l=(a&65535)+(b&65535);
+var m=(a>>16)+(b>>16)+(l>>16);
+return (m<<16)|(l&65535);
+};
+var _1=8;
+var _2=(1<<_1)-1;
+d.stringToWord=function(s){
+var wa=[];
+for(var i=0,l=s.length*_1;i<l;i+=_1){
+wa[i>>5]|=(s.charCodeAt(i/_1)&_2)<<(i%32);
+}
+return wa;
+};
+d.wordToString=function(wa){
+var s=[];
+for(var i=0,l=wa.length*32;i<l;i+=_1){
+s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&_2));
+}
+return s.join("");
+};
+d.wordToHex=function(wa){
+var h="0123456789abcdef",s=[];
+for(var i=0,l=wa.length*4;i<l;i++){
+s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&15)+h.charAt((wa[i>>2]>>((i%4)*8))&15));
+}
+return s.join("");
+};
+d.wordToBase64=function(wa){
+var p="=",_3="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=[];
+for(var i=0,l=wa.length*4;i<l;i+=3){
+var t=(((wa[i>>2]>>8*(i%4))&255)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&255)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&255);
+for(var j=0;j<4;j++){
+if(i*8+j*6>wa.length*32){
+s.push(p);
+}else{
+s.push(_3.charAt((t>>6*(3-j))&63));
+}
+}
+}
+return s.join("");
+};
+})();
+}
Index: trunk/web/dojo/dojox/encoding/digests/SHA1.js
===================================================================
--- trunk/web/dojo/dojox/encoding/digests/SHA1.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/digests/SHA1.js	(revision 9)
@@ -0,0 +1,137 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.digests.SHA1"]){
+dojo._hasResource["dojox.encoding.digests.SHA1"]=true;
+dojo.provide("dojox.encoding.digests.SHA1");
+dojo.require("dojox.encoding.digests._base");
+(function(){
+var _1=dojox.encoding.digests;
+var _2=8,_3=(1<<_2)-1;
+function R(n,c){
+return (n<<c)|(n>>>(32-c));
+};
+function FT(t,b,c,d){
+if(t<20){
+return (b&c)|((~b)&d);
+}
+if(t<40){
+return b^c^d;
+}
+if(t<60){
+return (b&c)|(b&d)|(c&d);
+}
+return b^c^d;
+};
+function KT(t){
+return (t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;
+};
+function _4(x,_5){
+x[_5>>5]|=128<<(24-_5%32);
+x[((_5+64>>9)<<4)+15]=_5;
+var w=new Array(80),a=1732584193,b=-271733879,c=-1732584194,d=271733878,e=-1009589776;
+for(var i=0;i<x.length;i+=16){
+var _6=a,_7=b,_8=c,_9=d,_a=e;
+for(var j=0;j<80;j++){
+if(j<16){
+w[j]=x[i+j];
+}else{
+w[j]=R(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
+}
+var t=_1.addWords(_1.addWords(R(a,5),FT(j,b,c,d)),_1.addWords(_1.addWords(e,w[j]),KT(j)));
+e=d;
+d=c;
+c=R(b,30);
+b=a;
+a=t;
+}
+a=_1.addWords(a,_6);
+b=_1.addWords(b,_7);
+c=_1.addWords(c,_8);
+d=_1.addWords(d,_9);
+e=_1.addWords(e,_a);
+}
+return [a,b,c,d,e];
+};
+function _b(_c,_d){
+var wa=_e(_d);
+if(wa.length>16){
+wa=_4(wa,_d.length*_2);
+}
+var _f=new Array(16),_10=new Array(16);
+for(var i=0;i<16;i++){
+_f[i]=wa[i]^909522486;
+_10[i]=wa[i]^1549556828;
+}
+var _11=_4(_f.concat(_e(_c)),512+_c.length*_2);
+return _4(_10.concat(_11),512+160);
+};
+function _e(s){
+var wa=[];
+for(var i=0,l=s.length*_2;i<l;i+=_2){
+wa[i>>5]|=(s.charCodeAt(i/_2)&_3)<<(32-_2-i%32);
+}
+return wa;
+};
+function _12(wa){
+var h="0123456789abcdef",s=[];
+for(var i=0,l=wa.length*4;i<l;i++){
+s.push(h.charAt((wa[i>>2]>>((3-i%4)*8+4))&15),h.charAt((wa[i>>2]>>((3-i%4)*8))&15));
+}
+return s.join("");
+};
+function _13(wa){
+var s=[];
+for(var i=0,l=wa.length*32;i<l;i+=_2){
+s.push(String.fromCharCode((wa[i>>5]>>>(32-_2-i%32))&_3));
+}
+return s.join("");
+};
+function _14(wa){
+var p="=",tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=[];
+for(var i=0,l=wa.length*4;i<l;i+=3){
+var t=(((wa[i>>2]>>8*(3-i%4))&255)<<16)|(((wa[i+1>>2]>>8*(3-(i+1)%4))&255)<<8)|((wa[i+2>>2]>>8*(3-(i+2)%4))&255);
+for(var j=0;j<4;j++){
+if(i*8+j*6>wa.length*32){
+s.push(p);
+}else{
+s.push(tab.charAt((t>>6*(3-j))&63));
+}
+}
+}
+return s.join("");
+};
+_1.SHA1=function(_15,_16){
+var out=_16||_1.outputTypes.Base64;
+var wa=_4(_e(_15),_15.length*_2);
+switch(out){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _12(wa);
+case _1.outputTypes.String:
+return _13(wa);
+default:
+return _14(wa);
+}
+};
+_1.SHA1._hmac=function(_17,key,_18){
+var out=_18||_1.outputTypes.Base64;
+var wa=_b(_17,key);
+switch(out){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _12(wa);
+case _1.outputTypes.String:
+return _13(wa);
+default:
+return _14(wa);
+}
+};
+})();
+}
Index: trunk/web/dojo/dojox/encoding/digests/MD5.js
===================================================================
--- trunk/web/dojo/dojox/encoding/digests/MD5.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/digests/MD5.js	(revision 9)
@@ -0,0 +1,158 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.digests.MD5"]){
+dojo._hasResource["dojox.encoding.digests.MD5"]=true;
+dojo.provide("dojox.encoding.digests.MD5");
+dojo.require("dojox.encoding.digests._base");
+(function(){
+var _1=dojox.encoding.digests;
+var _2=8;
+function R(n,c){
+return (n<<c)|(n>>>(32-c));
+};
+function C(q,a,b,x,s,t){
+return _1.addWords(R(_1.addWords(_1.addWords(a,q),_1.addWords(x,t)),s),b);
+};
+function FF(a,b,c,d,x,s,t){
+return C((b&c)|((~b)&d),a,b,x,s,t);
+};
+function GG(a,b,c,d,x,s,t){
+return C((b&d)|(c&(~d)),a,b,x,s,t);
+};
+function HH(a,b,c,d,x,s,t){
+return C(b^c^d,a,b,x,s,t);
+};
+function II(a,b,c,d,x,s,t){
+return C(c^(b|(~d)),a,b,x,s,t);
+};
+function _3(x,_4){
+x[_4>>5]|=128<<((_4)%32);
+x[(((_4+64)>>>9)<<4)+14]=_4;
+var a=1732584193;
+var b=-271733879;
+var c=-1732584194;
+var d=271733878;
+for(var i=0;i<x.length;i+=16){
+var _5=a;
+var _6=b;
+var _7=c;
+var _8=d;
+a=FF(a,b,c,d,x[i+0],7,-680876936);
+d=FF(d,a,b,c,x[i+1],12,-389564586);
+c=FF(c,d,a,b,x[i+2],17,606105819);
+b=FF(b,c,d,a,x[i+3],22,-1044525330);
+a=FF(a,b,c,d,x[i+4],7,-176418897);
+d=FF(d,a,b,c,x[i+5],12,1200080426);
+c=FF(c,d,a,b,x[i+6],17,-1473231341);
+b=FF(b,c,d,a,x[i+7],22,-45705983);
+a=FF(a,b,c,d,x[i+8],7,1770035416);
+d=FF(d,a,b,c,x[i+9],12,-1958414417);
+c=FF(c,d,a,b,x[i+10],17,-42063);
+b=FF(b,c,d,a,x[i+11],22,-1990404162);
+a=FF(a,b,c,d,x[i+12],7,1804603682);
+d=FF(d,a,b,c,x[i+13],12,-40341101);
+c=FF(c,d,a,b,x[i+14],17,-1502002290);
+b=FF(b,c,d,a,x[i+15],22,1236535329);
+a=GG(a,b,c,d,x[i+1],5,-165796510);
+d=GG(d,a,b,c,x[i+6],9,-1069501632);
+c=GG(c,d,a,b,x[i+11],14,643717713);
+b=GG(b,c,d,a,x[i+0],20,-373897302);
+a=GG(a,b,c,d,x[i+5],5,-701558691);
+d=GG(d,a,b,c,x[i+10],9,38016083);
+c=GG(c,d,a,b,x[i+15],14,-660478335);
+b=GG(b,c,d,a,x[i+4],20,-405537848);
+a=GG(a,b,c,d,x[i+9],5,568446438);
+d=GG(d,a,b,c,x[i+14],9,-1019803690);
+c=GG(c,d,a,b,x[i+3],14,-187363961);
+b=GG(b,c,d,a,x[i+8],20,1163531501);
+a=GG(a,b,c,d,x[i+13],5,-1444681467);
+d=GG(d,a,b,c,x[i+2],9,-51403784);
+c=GG(c,d,a,b,x[i+7],14,1735328473);
+b=GG(b,c,d,a,x[i+12],20,-1926607734);
+a=HH(a,b,c,d,x[i+5],4,-378558);
+d=HH(d,a,b,c,x[i+8],11,-2022574463);
+c=HH(c,d,a,b,x[i+11],16,1839030562);
+b=HH(b,c,d,a,x[i+14],23,-35309556);
+a=HH(a,b,c,d,x[i+1],4,-1530992060);
+d=HH(d,a,b,c,x[i+4],11,1272893353);
+c=HH(c,d,a,b,x[i+7],16,-155497632);
+b=HH(b,c,d,a,x[i+10],23,-1094730640);
+a=HH(a,b,c,d,x[i+13],4,681279174);
+d=HH(d,a,b,c,x[i+0],11,-358537222);
+c=HH(c,d,a,b,x[i+3],16,-722521979);
+b=HH(b,c,d,a,x[i+6],23,76029189);
+a=HH(a,b,c,d,x[i+9],4,-640364487);
+d=HH(d,a,b,c,x[i+12],11,-421815835);
+c=HH(c,d,a,b,x[i+15],16,530742520);
+b=HH(b,c,d,a,x[i+2],23,-995338651);
+a=II(a,b,c,d,x[i+0],6,-198630844);
+d=II(d,a,b,c,x[i+7],10,1126891415);
+c=II(c,d,a,b,x[i+14],15,-1416354905);
+b=II(b,c,d,a,x[i+5],21,-57434055);
+a=II(a,b,c,d,x[i+12],6,1700485571);
+d=II(d,a,b,c,x[i+3],10,-1894986606);
+c=II(c,d,a,b,x[i+10],15,-1051523);
+b=II(b,c,d,a,x[i+1],21,-2054922799);
+a=II(a,b,c,d,x[i+8],6,1873313359);
+d=II(d,a,b,c,x[i+15],10,-30611744);
+c=II(c,d,a,b,x[i+6],15,-1560198380);
+b=II(b,c,d,a,x[i+13],21,1309151649);
+a=II(a,b,c,d,x[i+4],6,-145523070);
+d=II(d,a,b,c,x[i+11],10,-1120210379);
+c=II(c,d,a,b,x[i+2],15,718787259);
+b=II(b,c,d,a,x[i+9],21,-343485551);
+a=_1.addWords(a,_5);
+b=_1.addWords(b,_6);
+c=_1.addWords(c,_7);
+d=_1.addWords(d,_8);
+}
+return [a,b,c,d];
+};
+function _9(_a,_b){
+var wa=_1.stringToWord(_b);
+if(wa.length>16){
+wa=_3(wa,_b.length*_2);
+}
+var l=[],r=[];
+for(var i=0;i<16;i++){
+l[i]=wa[i]^909522486;
+r[i]=wa[i]^1549556828;
+}
+var h=_3(l.concat(_1.stringToWord(_a)),512+_a.length*_2);
+return _3(r.concat(h),640);
+};
+_1.MD5=function(_c,_d){
+var _e=_d||_1.outputTypes.Base64;
+var wa=_3(_1.stringToWord(_c),_c.length*_2);
+switch(_e){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _1.wordToHex(wa);
+case _1.outputTypes.String:
+return _1.wordToString(wa);
+default:
+return _1.wordToBase64(wa);
+}
+};
+_1.MD5._hmac=function(_f,key,_10){
+var out=_10||_1.outputTypes.Base64;
+var wa=_9(_f,key);
+switch(out){
+case _1.outputTypes.Raw:
+return wa;
+case _1.outputTypes.Hex:
+return _1.wordToHex(wa);
+case _1.outputTypes.String:
+return _1.wordToString(wa);
+default:
+return _1.wordToBase64(wa);
+}
+};
+})();
+}
Index: trunk/web/dojo/dojox/encoding/_base.js
===================================================================
--- trunk/web/dojo/dojox/encoding/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/_base.js	(revision 9)
@@ -0,0 +1,11 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding._base"]){
+dojo._hasResource["dojox.encoding._base"]=true;
+dojo.provide("dojox.encoding._base");
+}
Index: trunk/web/dojo/dojox/encoding/easy64.js
===================================================================
--- trunk/web/dojo/dojox/encoding/easy64.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/easy64.js	(revision 9)
@@ -0,0 +1,47 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.easy64"]){
+dojo._hasResource["dojox.encoding.easy64"]=true;
+dojo.provide("dojox.encoding.easy64");
+(function(){
+var c=function(_1,_2,_3){
+for(var i=0;i<_2;i+=3){
+_3.push(String.fromCharCode((_1[i]>>>2)+33),String.fromCharCode(((_1[i]&3)<<4)+(_1[i+1]>>>4)+33),String.fromCharCode(((_1[i+1]&15)<<2)+(_1[i+2]>>>6)+33),String.fromCharCode((_1[i+2]&63)+33));
+}
+};
+dojox.encoding.easy64.encode=function(_4){
+var _5=[],_6=_4.length%3,_7=_4.length-_6;
+c(_4,_7,_5);
+if(_6){
+var t=_4.slice(_7);
+while(t.length<3){
+t.push(0);
+}
+c(t,3,_5);
+for(var i=3;i>_6;_5.pop(),--i){
+}
+}
+return _5.join("");
+};
+dojox.encoding.easy64.decode=function(_8){
+var n=_8.length,r=[],b=[0,0,0,0],i,j,d;
+for(i=0;i<n;i+=4){
+for(j=0;j<4;++j){
+b[j]=_8.charCodeAt(i+j)-33;
+}
+d=n-i;
+for(j=d;j<4;b[++j]=0){
+}
+r.push((b[0]<<2)+(b[1]>>>4),((b[1]&15)<<4)+(b[2]>>>2),((b[2]&3)<<6)+b[3]);
+for(j=d;j<4;++j,r.pop()){
+}
+}
+return r;
+};
+})();
+}
Index: trunk/web/dojo/dojox/encoding/bits.js
===================================================================
--- trunk/web/dojo/dojox/encoding/bits.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/bits.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.bits"]){
+dojo._hasResource["dojox.encoding.bits"]=true;
+dojo.provide("dojox.encoding.bits");
+dojox.encoding.bits.OutputStream=function(){
+this.reset();
+};
+dojo.extend(dojox.encoding.bits.OutputStream,{reset:function(){
+this.buffer=[];
+this.accumulator=0;
+this.available=8;
+},putBits:function(_1,_2){
+while(_2){
+var w=Math.min(_2,this.available);
+var v=(w<=_2?_1>>>(_2-w):_1)<<(this.available-w);
+this.accumulator|=v&(255>>>(8-this.available));
+this.available-=w;
+if(!this.available){
+this.buffer.push(this.accumulator);
+this.accumulator=0;
+this.available=8;
+}
+_2-=w;
+}
+},getWidth:function(){
+return this.buffer.length*8+(8-this.available);
+},getBuffer:function(){
+var b=this.buffer;
+if(this.available<8){
+b.push(this.accumulator&(255<<this.available));
+}
+this.reset();
+return b;
+}});
+dojox.encoding.bits.InputStream=function(_3,_4){
+this.buffer=_3;
+this.width=_4;
+this.bbyte=this.bit=0;
+};
+dojo.extend(dojox.encoding.bits.InputStream,{getBits:function(_5){
+var r=0;
+while(_5){
+var w=Math.min(_5,8-this.bit);
+var v=this.buffer[this.bbyte]>>>(8-this.bit-w);
+r<<=w;
+r|=v&~(~0<<w);
+this.bit+=w;
+if(this.bit==8){
+++this.bbyte;
+this.bit=0;
+}
+_5-=w;
+}
+return r;
+},getWidth:function(){
+return this.width-this.bbyte*8-this.bit;
+}});
+}
Index: trunk/web/dojo/dojox/encoding/README
===================================================================
--- trunk/web/dojo/dojox/encoding/README	(revision 0)
+++ trunk/web/dojo/dojox/encoding/README	(revision 9)
@@ -0,0 +1,35 @@
+-------------------------------------------------------------------------------
+DojoX Encoding
+-------------------------------------------------------------------------------
+Version 0.1.0
+Release date: 7/30/2007
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Eugene Lazutkin
+	Tom Trenka
+-------------------------------------------------------------------------------
+Project description
+
+DojoX Encoding provides a set of routines for common encoding algorithms.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Encoding only depends on the Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+See the API documentation for details.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojox/trunk/encoding/*
+
+Install into the following directory structure:
+/dojox/encoding/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/encoding/base64.js
===================================================================
--- trunk/web/dojo/dojox/encoding/base64.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/base64.js	(revision 9)
@@ -0,0 +1,70 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.base64"]){
+dojo._hasResource["dojox.encoding.base64"]=true;
+dojo.provide("dojox.encoding.base64");
+(function(){
+var p="=";
+var _1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+var _2=dojox.encoding;
+_2.base64.encode=function(ba){
+var s=[],l=ba.length;
+var rm=l%3;
+var x=l-rm;
+for(var i=0;i<x;){
+var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
+s.push(_1.charAt((t>>>18)&63));
+s.push(_1.charAt((t>>>12)&63));
+s.push(_1.charAt((t>>>6)&63));
+s.push(_1.charAt(t&63));
+}
+switch(rm){
+case 2:
+var t=ba[i++]<<16|ba[i++]<<8;
+s.push(_1.charAt((t>>>18)&63));
+s.push(_1.charAt((t>>>12)&63));
+s.push(_1.charAt((t>>>6)&63));
+s.push(p);
+break;
+case 1:
+var t=ba[i++]<<16;
+s.push(_1.charAt((t>>>18)&63));
+s.push(_1.charAt((t>>>12)&63));
+s.push(p);
+s.push(p);
+break;
+}
+return s.join("");
+};
+_2.base64.decode=function(_3){
+var s=_3.split(""),_4=[];
+var l=s.length;
+while(s[--l]==p){
+}
+for(var i=0;i<l;){
+var t=_1.indexOf(s[i++])<<18;
+if(i<=l){
+t|=_1.indexOf(s[i++])<<12;
+}
+if(i<=l){
+t|=_1.indexOf(s[i++])<<6;
+}
+if(i<=l){
+t|=_1.indexOf(s[i++]);
+}
+_4.push((t>>>16)&255);
+_4.push((t>>>8)&255);
+_4.push(t&255);
+}
+while(_4[_4.length-1]==0){
+_4.pop();
+}
+return _4;
+};
+})();
+}
Index: trunk/web/dojo/dojox/encoding/ascii85.js
===================================================================
--- trunk/web/dojo/dojox/encoding/ascii85.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/ascii85.js	(revision 9)
@@ -0,0 +1,71 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.ascii85"]){
+dojo._hasResource["dojox.encoding.ascii85"]=true;
+dojo.provide("dojox.encoding.ascii85");
+(function(){
+var c=function(_1,_2,_3){
+var i,j,n,b=[0,0,0,0,0];
+for(i=0;i<_2;i+=4){
+n=((_1[i]*256+_1[i+1])*256+_1[i+2])*256+_1[i+3];
+if(!n){
+_3.push("z");
+}else{
+for(j=0;j<5;b[j++]=n%85+33,n=Math.floor(n/85)){
+}
+}
+_3.push(String.fromCharCode(b[4],b[3],b[2],b[1],b[0]));
+}
+};
+dojox.encoding.ascii85.encode=function(_4){
+var _5=[],_6=_4.length%4,_7=_4.length-_6;
+c(_4,_7,_5);
+if(_6){
+var t=_4.slice(_7);
+while(t.length<4){
+t.push(0);
+}
+c(t,4,_5);
+var x=_5.pop();
+if(x=="z"){
+x="!!!!!";
+}
+_5.push(x.substr(0,_6+1));
+}
+return _5.join("");
+};
+dojox.encoding.ascii85.decode=function(_8){
+var n=_8.length,r=[],b=[0,0,0,0,0],i,j,t,x,y,d;
+for(i=0;i<n;++i){
+if(_8.charAt(i)=="z"){
+r.push(0,0,0,0);
+continue;
+}
+for(j=0;j<5;++j){
+b[j]=_8.charCodeAt(i+j)-33;
+}
+d=n-i;
+if(d<5){
+for(j=d;j<4;b[++j]=0){
+}
+b[d]=85;
+}
+t=(((b[0]*85+b[1])*85+b[2])*85+b[3])*85+b[4];
+x=t&255;
+t>>>=8;
+y=t&255;
+t>>>=8;
+r.push(t>>>8,t&255,y,x);
+for(j=d;j<5;++j,r.pop()){
+}
+i+=4;
+}
+return r;
+};
+})();
+}
Index: trunk/web/dojo/dojox/encoding/crypto/RSAKey-ext.js
===================================================================
--- trunk/web/dojo/dojox/encoding/crypto/RSAKey-ext.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/crypto/RSAKey-ext.js	(revision 9)
@@ -0,0 +1,107 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.RSAKey-ext"]){
+dojo._hasResource["dojox.encoding.crypto.RSAKey-ext"]=true;
+dojo.provide("dojox.encoding.crypto.RSAKey-ext");
+dojo.experimental("dojox.encoding.crypto.RSAKey-ext");
+dojo.require("dojox.encoding.crypto.RSAKey");
+dojo.require("dojox.math.BigInteger-ext");
+(function(){
+var _1=dojox.math.BigInteger;
+function _2(d,n){
+var b=d.toByteArray();
+for(var i=0,_3=b.length;i<_3&&!b[i];++i){
+}
+if(b.length-i!==n-1||b[i]!==2){
+return null;
+}
+for(++i;b[i];){
+if(++i>=_3){
+return null;
+}
+}
+var _4="";
+while(++i<_3){
+_4+=String.fromCharCode(b[i]);
+}
+return _4;
+};
+dojo.extend(dojox.encoding.crypto.RSAKey,{setPrivate:function(N,E,D){
+if(N&&E&&N.length&&E.length){
+this.n=new _1(N,16);
+this.e=parseInt(E,16);
+this.d=new _1(D,16);
+}else{
+throw new Error("Invalid RSA private key");
+}
+},setPrivateEx:function(N,E,D,P,Q,DP,DQ,C){
+if(N&&E&&N.length&&E.length){
+this.n=new _1(N,16);
+this.e=parseInt(E,16);
+this.d=new _1(D,16);
+this.p=new _1(P,16);
+this.q=new _1(Q,16);
+this.dmp1=new _1(DP,16);
+this.dmq1=new _1(DQ,16);
+this.coeff=new _1(C,16);
+}else{
+throw new Error("Invalid RSA private key");
+}
+},generate:function(B,E){
+var _5=this.rngf(),qs=B>>1;
+this.e=parseInt(E,16);
+var ee=new _1(E,16);
+for(;;){
+for(;;){
+this.p=new _1(B-qs,1,_5);
+if(!this.p.subtract(_1.ONE).gcd(ee).compareTo(_1.ONE)&&this.p.isProbablePrime(10)){
+break;
+}
+}
+for(;;){
+this.q=new _1(qs,1,_5);
+if(!this.q.subtract(_1.ONE).gcd(ee).compareTo(_1.ONE)&&this.q.isProbablePrime(10)){
+break;
+}
+}
+if(this.p.compareTo(this.q)<=0){
+var t=this.p;
+this.p=this.q;
+this.q=t;
+}
+var p1=this.p.subtract(_1.ONE);
+var q1=this.q.subtract(_1.ONE);
+var _6=p1.multiply(q1);
+if(!_6.gcd(ee).compareTo(_1.ONE)){
+this.n=this.p.multiply(this.q);
+this.d=ee.modInverse(_6);
+this.dmp1=this.d.mod(p1);
+this.dmq1=this.d.mod(q1);
+this.coeff=this.q.modInverse(this.p);
+break;
+}
+}
+_5.destroy();
+},decrypt:function(_7){
+var c=new _1(_7,16),m;
+if(!this.p||!this.q){
+m=c.modPow(this.d,this.n);
+}else{
+var cp=c.mod(this.p).modPow(this.dmp1,this.p),cq=c.mod(this.q).modPow(this.dmq1,this.q);
+while(cp.compareTo(cq)<0){
+cp=cp.add(this.p);
+}
+m=cp.subtract(cq).multiply(this.coeff).mod(this.p).multiply(this.q).add(cq);
+}
+if(!m){
+return null;
+}
+return _2(m,(this.n.bitLength()+7)>>3);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/encoding/crypto/Blowfish.js
===================================================================
--- trunk/web/dojo/dojox/encoding/crypto/Blowfish.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/crypto/Blowfish.js	(revision 9)
@@ -0,0 +1,275 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.Blowfish"]){
+dojo._hasResource["dojox.encoding.crypto.Blowfish"]=true;
+dojo.provide("dojox.encoding.crypto.Blowfish");
+dojo.require("dojox.encoding.base64");
+dojo.require("dojox.encoding.crypto._base");
+dojox.encoding.crypto.Blowfish=new function(){
+var _1=Math.pow(2,2);
+var _2=Math.pow(2,3);
+var _3=Math.pow(2,4);
+var _4=Math.pow(2,8);
+var _5=Math.pow(2,16);
+var _6=Math.pow(2,24);
+var iv=null;
+var _7={p:[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s0:[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],s1:[1266315497,3048417604,3681880366,3289982499,2909710000,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],s2:[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],s3:[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409000,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]};
+function _8(x,y){
+return (((x>>16)+(y>>16)+(((x&65535)+(y&65535))>>16))<<16)|(((x&65535)+(y&65535))&65535);
+};
+function _9(x,y){
+return (((x>>16)^(y>>16))<<16)|(((x&65535)^(y&65535))&65535);
+};
+function $(v,_a){
+var d=_a.s3[v&255];
+v>>=8;
+var c=_a.s2[v&255];
+v>>=8;
+var b=_a.s1[v&255];
+v>>=8;
+var a=_a.s0[v&255];
+var r=(((a>>16)+(b>>16)+(((a&65535)+(b&65535))>>16))<<16)|(((a&65535)+(b&65535))&65535);
+r=(((r>>16)^(c>>16))<<16)|(((r&65535)^(c&65535))&65535);
+return (((r>>16)+(d>>16)+(((r&65535)+(d&65535))>>16))<<16)|(((r&65535)+(d&65535))&65535);
+};
+function eb(o,_b){
+var l=o.left;
+var r=o.right;
+l=_9(l,_b.p[0]);
+r=_9(r,_9($(l,_b),_b.p[1]));
+l=_9(l,_9($(r,_b),_b.p[2]));
+r=_9(r,_9($(l,_b),_b.p[3]));
+l=_9(l,_9($(r,_b),_b.p[4]));
+r=_9(r,_9($(l,_b),_b.p[5]));
+l=_9(l,_9($(r,_b),_b.p[6]));
+r=_9(r,_9($(l,_b),_b.p[7]));
+l=_9(l,_9($(r,_b),_b.p[8]));
+r=_9(r,_9($(l,_b),_b.p[9]));
+l=_9(l,_9($(r,_b),_b.p[10]));
+r=_9(r,_9($(l,_b),_b.p[11]));
+l=_9(l,_9($(r,_b),_b.p[12]));
+r=_9(r,_9($(l,_b),_b.p[13]));
+l=_9(l,_9($(r,_b),_b.p[14]));
+r=_9(r,_9($(l,_b),_b.p[15]));
+l=_9(l,_9($(r,_b),_b.p[16]));
+o.right=l;
+o.left=_9(r,_b.p[17]);
+};
+function db(o,_c){
+var l=o.left;
+var r=o.right;
+l=_9(l,_c.p[17]);
+r=_9(r,_9($(l,_c),_c.p[16]));
+l=_9(l,_9($(r,_c),_c.p[15]));
+r=_9(r,_9($(l,_c),_c.p[14]));
+l=_9(l,_9($(r,_c),_c.p[13]));
+r=_9(r,_9($(l,_c),_c.p[12]));
+l=_9(l,_9($(r,_c),_c.p[11]));
+r=_9(r,_9($(l,_c),_c.p[10]));
+l=_9(l,_9($(r,_c),_c.p[9]));
+r=_9(r,_9($(l,_c),_c.p[8]));
+l=_9(l,_9($(r,_c),_c.p[7]));
+r=_9(r,_9($(l,_c),_c.p[6]));
+l=_9(l,_9($(r,_c),_c.p[5]));
+r=_9(r,_9($(l,_c),_c.p[4]));
+l=_9(l,_9($(r,_c),_c.p[3]));
+r=_9(r,_9($(l,_c),_c.p[2]));
+l=_9(l,_9($(r,_c),_c.p[1]));
+o.right=l;
+o.left=_9(r,_c.p[0]);
+};
+function _d(_e){
+var k=_e;
+if(dojo.isString(k)){
+k=dojo.map(k.split(""),function(_f){
+return _f.charCodeAt(0)&255;
+});
+}
+var pos=0,_10=0,res={left:0,right:0},i,j,l;
+var box={p:dojo.map(_7.p.slice(0),function(_11){
+var l=k.length,j;
+for(j=0;j<4;j++){
+_10=(_10*_4)|k[pos++%l];
+}
+return (((_11>>16)^(_10>>16))<<16)|(((_11&65535)^(_10&65535))&65535);
+}),s0:_7.s0.slice(0),s1:_7.s1.slice(0),s2:_7.s2.slice(0),s3:_7.s3.slice(0)};
+for(i=0,l=box.p.length;i<l;){
+eb(res,box);
+box.p[i++]=res.left,box.p[i++]=res.right;
+}
+for(i=0;i<4;i++){
+for(j=0,l=box["s"+i].length;j<l;){
+eb(res,box);
+box["s"+i][j++]=res.left,box["s"+i][j++]=res.right;
+}
+}
+return box;
+};
+this.getIV=function(_12){
+var out=_12||dojox.encoding.crypto.outputTypes.Base64;
+switch(out){
+case dojox.encoding.crypto.outputTypes.Hex:
+return dojo.map(iv,function(_13){
+return (_13<=15?"0":"")+_13.toString(16);
+}).join("");
+case dojox.encoding.crypto.outputTypes.String:
+return iv.join("");
+case dojox.encoding.crypto.outputTypes.Raw:
+return iv;
+default:
+return dojox.encoding.base64.encode(iv);
+}
+};
+this.setIV=function(_14,_15){
+var ip=_15||dojox.encoding.crypto.outputTypes.Base64;
+var ba=null;
+switch(ip){
+case dojox.encoding.crypto.outputTypes.String:
+ba=dojo.map(_14.split(""),function(_16){
+return _16.charCodeAt(0);
+});
+break;
+case dojox.encoding.crypto.outputTypes.Hex:
+ba=[];
+for(var i=0,l=_14.length-1;i<l;i+=2){
+ba.push(parseInt(_14.substr(i,2),16));
+}
+break;
+case dojox.encoding.crypto.outputTypes.Raw:
+ba=_14;
+break;
+default:
+ba=dojox.encoding.base64.decode(_14);
+break;
+}
+iv={};
+iv.left=ba[0]*_6|ba[1]*_5|ba[2]*_4|ba[3];
+iv.right=ba[4]*_6|ba[5]*_5|ba[6]*_4|ba[7];
+};
+this.encrypt=function(_17,key,ao){
+var out=dojox.encoding.crypto.outputTypes.Base64;
+var _18=dojox.encoding.crypto.cipherModes.ECB;
+if(ao){
+if(ao.outputType){
+out=ao.outputType;
+}
+if(ao.cipherMode){
+_18=ao.cipherMode;
+}
+}
+var bx=_d(key),_19=8-(_17.length&7);
+for(var i=0;i<_19;i++){
+_17+=String.fromCharCode(_19);
+}
+var _1a=[],_1b=_17.length>>3,pos=0,o={},_1c=(_18==dojox.encoding.crypto.cipherModes.CBC);
+var _1d={left:iv.left||null,right:iv.right||null};
+for(var i=0;i<_1b;i++){
+o.left=_17.charCodeAt(pos)*_6|_17.charCodeAt(pos+1)*_5|_17.charCodeAt(pos+2)*_4|_17.charCodeAt(pos+3);
+o.right=_17.charCodeAt(pos+4)*_6|_17.charCodeAt(pos+5)*_5|_17.charCodeAt(pos+6)*_4|_17.charCodeAt(pos+7);
+if(_1c){
+o.left=(((o.left>>16)^(_1d.left>>16))<<16)|(((o.left&65535)^(_1d.left&65535))&65535);
+o.right=(((o.right>>16)^(_1d.right>>16))<<16)|(((o.right&65535)^(_1d.right&65535))&65535);
+}
+eb(o,bx);
+if(_1c){
+_1d.left=o.left;
+_1d.right=o.right;
+}
+_1a.push((o.left>>24)&255);
+_1a.push((o.left>>16)&255);
+_1a.push((o.left>>8)&255);
+_1a.push(o.left&255);
+_1a.push((o.right>>24)&255);
+_1a.push((o.right>>16)&255);
+_1a.push((o.right>>8)&255);
+_1a.push(o.right&255);
+pos+=8;
+}
+switch(out){
+case dojox.encoding.crypto.outputTypes.Hex:
+return dojo.map(_1a,function(_1e){
+return (_1e<=15?"0":"")+_1e.toString(16);
+}).join("");
+case dojox.encoding.crypto.outputTypes.String:
+return _1a.join("");
+case dojox.encoding.crypto.outputTypes.Raw:
+return _1a;
+default:
+return dojox.encoding.base64.encode(_1a);
+}
+};
+this.decrypt=function(_1f,key,ao){
+var ip=dojox.encoding.crypto.outputTypes.Base64;
+var _20=dojox.encoding.crypto.cipherModes.ECB;
+if(ao){
+if(ao.outputType){
+ip=ao.outputType;
+}
+if(ao.cipherMode){
+_20=ao.cipherMode;
+}
+}
+var bx=_d(key);
+var pt=[];
+var c=null;
+switch(ip){
+case dojox.encoding.crypto.outputTypes.Hex:
+c=[];
+for(var i=0,l=_1f.length-1;i<l;i+=2){
+c.push(parseInt(_1f.substr(i,2),16));
+}
+break;
+case dojox.encoding.crypto.outputTypes.String:
+c=dojo.map(_1f.split(""),function(_21){
+return _21.charCodeAt(0);
+});
+break;
+case dojox.encoding.crypto.outputTypes.Raw:
+c=_1f;
+break;
+default:
+c=dojox.encoding.base64.decode(_1f);
+break;
+}
+var _22=c.length>>3,pos=0,o={},_23=(_20==dojox.encoding.crypto.cipherModes.CBC);
+var _24={left:iv.left||null,right:iv.right||null};
+for(var i=0;i<_22;i++){
+o.left=c[pos]*_6|c[pos+1]*_5|c[pos+2]*_4|c[pos+3];
+o.right=c[pos+4]*_6|c[pos+5]*_5|c[pos+6]*_4|c[pos+7];
+if(_23){
+var _25=o.left;
+var _26=o.right;
+}
+db(o,bx);
+if(_23){
+o.left=(((o.left>>16)^(_24.left>>16))<<16)|(((o.left&65535)^(_24.left&65535))&65535);
+o.right=(((o.right>>16)^(_24.right>>16))<<16)|(((o.right&65535)^(_24.right&65535))&65535);
+_24.left=_25;
+_24.right=_26;
+}
+pt.push((o.left>>24)&255);
+pt.push((o.left>>16)&255);
+pt.push((o.left>>8)&255);
+pt.push(o.left&255);
+pt.push((o.right>>24)&255);
+pt.push((o.right>>16)&255);
+pt.push((o.right>>8)&255);
+pt.push(o.right&255);
+pos+=8;
+}
+if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==1){
+var n=pt[pt.length-1];
+pt.splice(pt.length-n,n);
+}
+return dojo.map(pt,function(_27){
+return String.fromCharCode(_27);
+}).join("");
+};
+this.setIV("0000000000000000",dojox.encoding.crypto.outputTypes.Hex);
+}();
+}
Index: trunk/web/dojo/dojox/encoding/crypto/RSAKey.js
===================================================================
--- trunk/web/dojo/dojox/encoding/crypto/RSAKey.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/crypto/RSAKey.js	(revision 9)
@@ -0,0 +1,66 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.RSAKey"]){
+dojo._hasResource["dojox.encoding.crypto.RSAKey"]=true;
+dojo.provide("dojox.encoding.crypto.RSAKey");
+dojo.experimental("dojox.encoding.crypto.RSAKey");
+dojo.require("dojox.math.BigInteger");
+dojo.require("dojox.math.random.Simple");
+(function(){
+var dm=dojox.math,_1=dm.BigInteger,_2=dm.random.Simple,_3=function(){
+return new _2();
+};
+function _4(s,n,_5){
+if(n<s.length+11){
+throw new Error("Message too long for RSA");
+}
+var ba=new Array(n);
+var i=s.length;
+while(i&&n){
+ba[--n]=s.charCodeAt(--i);
+}
+ba[--n]=0;
+var _6=_5();
+var x=[0];
+while(n>2){
+x[0]=0;
+while(x[0]==0){
+_6.nextBytes(x);
+}
+ba[--n]=x[0];
+}
+ba[--n]=2;
+ba[--n]=0;
+_6.destroy();
+return new _1(ba);
+};
+dojo.declare("dojox.encoding.crypto.RSAKey",null,{constructor:function(_7){
+this.rngf=_7||_3;
+this.e=0;
+this.n=this.d=this.p=this.q=this.dmp1=this.dmq1=this.coeff=null;
+},setPublic:function(N,E){
+if(N&&E&&N.length&&E.length){
+this.n=new _1(N,16);
+this.e=parseInt(E,16);
+}else{
+throw new Error("Invalid RSA public key");
+}
+},encrypt:function(_8){
+var m=_4(_8,(this.n.bitLength()+7)>>3,this.rngf);
+if(!m){
+return null;
+}
+var c=m.modPowInt(this.e,this.n);
+if(!c){
+return null;
+}
+var h=c.toString(16);
+return h.length%2?"0"+h:h;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/encoding/crypto/SimpleAES.js
===================================================================
--- trunk/web/dojo/dojox/encoding/crypto/SimpleAES.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/crypto/SimpleAES.js	(revision 9)
@@ -0,0 +1,236 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto.SimpleAES"]){
+dojo._hasResource["dojox.encoding.crypto.SimpleAES"]=true;
+dojo.provide("dojox.encoding.crypto.SimpleAES");
+dojo.require("dojox.encoding.base64");
+dojo.require("dojox.encoding.crypto._base");
+(function(){
+var _1=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22];
+var _2=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]];
+function _3(_4,w){
+var Nb=4;
+var Nr=w.length/Nb-1;
+var _5=[[],[],[],[]];
+for(var i=0;i<4*Nb;i++){
+_5[i%4][Math.floor(i/4)]=_4[i];
+}
+_5=_6(_5,w,0,Nb);
+for(var _7=1;_7<Nr;_7++){
+_5=_8(_5,Nb);
+_5=_9(_5,Nb);
+_5=_a(_5,Nb);
+_5=_6(_5,w,_7,Nb);
+}
+_5=_8(_5,Nb);
+_5=_9(_5,Nb);
+_5=_6(_5,w,Nr,Nb);
+var _b=new Array(4*Nb);
+for(var i=0;i<4*Nb;i++){
+_b[i]=_5[i%4][Math.floor(i/4)];
+}
+return _b;
+};
+function _8(s,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+s[r][c]=_1[s[r][c]];
+}
+}
+return s;
+};
+function _9(s,Nb){
+var t=new Array(4);
+for(var r=1;r<4;r++){
+for(var c=0;c<4;c++){
+t[c]=s[r][(c+r)%Nb];
+}
+for(var c=0;c<4;c++){
+s[r][c]=t[c];
+}
+}
+return s;
+};
+function _a(s,Nb){
+for(var c=0;c<4;c++){
+var a=new Array(4);
+var b=new Array(4);
+for(var i=0;i<4;i++){
+a[i]=s[i][c];
+b[i]=s[i][c]&128?s[i][c]<<1^283:s[i][c]<<1;
+}
+s[0][c]=b[0]^a[1]^b[1]^a[2]^a[3];
+s[1][c]=a[0]^b[1]^a[2]^b[2]^a[3];
+s[2][c]=a[0]^a[1]^b[2]^a[3]^b[3];
+s[3][c]=a[0]^b[0]^a[1]^a[2]^b[3];
+}
+return s;
+};
+function _6(_c,w,_d,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+_c[r][c]^=w[_d*4+c][r];
+}
+}
+return _c;
+};
+function _e(_f){
+var Nb=4;
+var Nk=_f.length/4;
+var Nr=Nk+6;
+var w=new Array(Nb*(Nr+1));
+var _10=new Array(4);
+for(var i=0;i<Nk;i++){
+var r=[_f[4*i],_f[4*i+1],_f[4*i+2],_f[4*i+3]];
+w[i]=r;
+}
+for(var i=Nk;i<(Nb*(Nr+1));i++){
+w[i]=new Array(4);
+for(var t=0;t<4;t++){
+_10[t]=w[i-1][t];
+}
+if(i%Nk==0){
+_10=_11(_12(_10));
+for(var t=0;t<4;t++){
+_10[t]^=_2[i/Nk][t];
+}
+}else{
+if(Nk>6&&i%Nk==4){
+_10=_11(_10);
+}
+}
+for(var t=0;t<4;t++){
+w[i][t]=w[i-Nk][t]^_10[t];
+}
+}
+return w;
+};
+function _11(w){
+for(var i=0;i<4;i++){
+w[i]=_1[w[i]];
+}
+return w;
+};
+function _12(w){
+w[4]=w[0];
+for(var i=0;i<4;i++){
+w[i]=w[i+1];
+}
+return w;
+};
+function _13(_14,_15,_16){
+if(!(_16==128||_16==192||_16==256)){
+return "";
+}
+var _17=_16/8;
+var _18=new Array(_17);
+for(var i=0;i<_17;i++){
+_18[i]=_15.charCodeAt(i)&255;
+}
+var key=_3(_18,_e(_18));
+key=key.concat(key.slice(0,_17-16));
+var _19=16;
+var _1a=new Array(_19);
+var _1b=(new Date()).getTime();
+for(var i=0;i<4;i++){
+_1a[i]=(_1b>>>i*8)&255;
+}
+for(var i=0;i<4;i++){
+_1a[i+4]=(_1b/4294967296>>>i*8)&255;
+}
+var _1c=_e(key);
+var _1d=Math.ceil(_14.length/_19);
+var _1e=new Array(_1d);
+for(var b=0;b<_1d;b++){
+for(var c=0;c<4;c++){
+_1a[15-c]=(b>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_1a[15-c-4]=(b/4294967296>>>c*8);
+}
+var _1f=_3(_1a,_1c);
+var _20=b<_1d-1?_19:(_14.length-1)%_19+1;
+var ct="";
+for(var i=0;i<_20;i++){
+var _21=_14.charCodeAt(b*_19+i);
+var _22=_21^_1f[i];
+ct+=((_22<16)?"0":"")+_22.toString(16);
+}
+_1e[b]=ct;
+}
+var _23="";
+for(var i=0;i<8;i++){
+_23+=((_1a[i]<16)?"0":"")+_1a[i].toString(16);
+}
+return _23+" "+_1e.join(" ");
+};
+function _24(s){
+var ret=[];
+s.replace(/(..)/g,function(str){
+ret.push(parseInt(str,16));
+});
+return ret;
+};
+function _25(_26,_27,_28){
+if(!(_28==128||_28==192||_28==256)){
+return "";
+}
+var _29=_28/8;
+var _2a=new Array(_29);
+for(var i=0;i<_29;i++){
+_2a[i]=_27.charCodeAt(i)&255;
+}
+var _2b=_e(_2a);
+var key=_3(_2a,_2b);
+key=key.concat(key.slice(0,_29-16));
+var _2c=_e(key);
+_26=_26.split(" ");
+var _2d=16;
+var _2e=new Array(_2d);
+var _2f=_26[0];
+_2e=_24(_2f);
+var _30=new Array(_26.length-1);
+for(var b=1;b<_26.length;b++){
+for(var c=0;c<4;c++){
+_2e[15-c]=((b-1)>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_2e[15-c-4]=((b/4294967296-1)>>>c*8)&255;
+}
+var _31=_3(_2e,_2c);
+var pt="";
+var tmp=_24(_26[b]);
+for(var i=0;i<tmp.length;i++){
+var _32=_26[b].charCodeAt(i);
+var _33=tmp[i]^_31[i];
+pt+=String.fromCharCode(_33);
+}
+_30[b-1]=pt;
+}
+return _30.join("");
+};
+function _34(str){
+return str.replace(/[\0\t\n\v\f\r\xa0!-]/g,function(c){
+return "!"+c.charCodeAt(0)+"!";
+});
+};
+function _35(str){
+return str.replace(/!\d\d?\d?!/g,function(c){
+return String.fromCharCode(c.slice(1,-1));
+});
+};
+dojox.encoding.crypto.SimpleAES=new (function(){
+this.encrypt=function(_36,key){
+return _13(_36,key,256);
+};
+this.decrypt=function(_37,key){
+return _25(_37,key,256);
+};
+})();
+})();
+}
Index: trunk/web/dojo/dojox/encoding/crypto/_base.js
===================================================================
--- trunk/web/dojo/dojox/encoding/crypto/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/encoding/crypto/_base.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.encoding.crypto._base"]){
+dojo._hasResource["dojox.encoding.crypto._base"]=true;
+dojo.provide("dojox.encoding.crypto._base");
+(function(){
+var c=dojox.encoding.crypto;
+c.cipherModes={ECB:0,CBC:1,PCBC:2,CFB:3,OFB:4,CTR:5};
+c.outputTypes={Base64:0,Hex:1,String:2,Raw:3};
+})();
+}
Index: trunk/web/dojo/dojox/secure/README
===================================================================
--- trunk/web/dojo/dojox/secure/README	(revision 0)
+++ trunk/web/dojo/dojox/secure/README	(revision 9)
@@ -0,0 +1,50 @@
+-------------------------------------------------------------------------------
+DojoX Secure
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 07/04/2008
+-------------------------------------------------------------------------------
+Project state:
+alpha
+-------------------------------------------------------------------------------
+Project authors
+	Kris Zyp (kris@sitepen.com)
+-------------------------------------------------------------------------------
+Project description
+
+DojoX Secure is a collection of tools for security, in particular for working with
+untrusted data and code. The following tools are a part of DojoX Secure:
+
+dojox.secure.capability - Object-capability JavaScript validation. This is 
+a validator to run before eval to ensure that a script can't access or modify
+any objects outside of those specifically provided to it.
+
+dojox.secure.sandbox - Provides support for loading web pages, JSON, and scripts 
+from other domains using XHR (and XHR plugins) with a safe subset library and 
+sandboxed access to the DOM.
+
+dojox.secure.DOM - Provides a DOM facade that restricts access to
+a specified subtree of the DOM. The DOM facade uses getters/setters
+and lettables to emulate the DOM API.
+
+dojox.secure.OAuth - Future project to provide an implementation of OAuth.
+
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader).
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/secure/*
+
+Install into the following directory structure:
+/dojox/secure/
+
+...which should be at the same level as your Dojo checkout.
+
Index: trunk/web/dojo/dojox/secure/sandbox.js
===================================================================
--- trunk/web/dojo/dojox/secure/sandbox.js	(revision 0)
+++ trunk/web/dojo/dojox/secure/sandbox.js	(revision 9)
@@ -0,0 +1,231 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.secure.sandbox"]){
+dojo._hasResource["dojox.secure.sandbox"]=true;
+dojo.provide("dojox.secure.sandbox");
+dojo.require("dojox.secure.DOM");
+dojo.require("dojox.secure.capability");
+dojo.require("dojo.NodeList-fx");
+(function(){
+var _1=setTimeout;
+var _2=setInterval;
+if({}.__proto__){
+var _3=function(_4){
+var _5=Array.prototype[_4];
+if(_5&&!_5.fixed){
+(Array.prototype[_4]=function(){
+if(this==window){
+throw new TypeError("Called with wrong this");
+}
+return _5.apply(this,arguments);
+}).fixed=true;
+}
+};
+_3("concat");
+_3("reverse");
+_3("sort");
+_3("slice");
+_3("forEach");
+_3("filter");
+_3("reduce");
+_3("reduceRight");
+_3("every");
+_3("map");
+_3("some");
+}
+var _6=function(){
+return dojo.xhrGet.apply(dojo,arguments);
+};
+dojox.secure.sandbox=function(_7){
+var _8=dojox.secure.DOM(_7);
+_7=_8(_7);
+var _9=_7.ownerDocument;
+var _a,_b=dojox.secure._safeDojoFunctions(_7,_8);
+var _c=[];
+var _d=["isNaN","isFinite","parseInt","parseFloat","escape","unescape","encodeURI","encodeURIComponent","decodeURI","decodeURIComponent","alert","confirm","prompt","Error","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","Date","RegExp","Number","Object","Array","String","Math","setTimeout","setInterval","clearTimeout","clearInterval","dojo","get","set","forEach","load","evaluate"];
+for(var i in _b){
+_d.push(i);
+_c.push("var "+i+"=dojo."+i);
+}
+eval(_c.join(";"));
+function _e(_f,_10){
+_10=""+_10;
+if(dojox.secure.badProps.test(_10)){
+throw new Error("bad property access");
+}
+if(_f.__get__){
+return _f.__get__(_10);
+}
+return _f[_10];
+};
+function set(obj,_11,_12){
+_11=""+_11;
+_e(obj,_11);
+if(obj.__set){
+return obj.__set(_11);
+}
+obj[_11]=_12;
+return _12;
+};
+function _13(obj,fun){
+if(typeof fun!="function"){
+throw new TypeError();
+}
+if("length" in obj){
+if(obj.__get__){
+var len=obj.__get__("length");
+for(var i=0;i<len;i++){
+if(i in obj){
+fun.call(obj,obj.__get__(i),i,obj);
+}
+}
+}else{
+len=obj.length;
+for(i=0;i<len;i++){
+if(i in obj){
+fun.call(obj,obj[i],i,obj);
+}
+}
+}
+}else{
+for(i in obj){
+fun.call(obj,_e(obj,i),i,obj);
+}
+}
+};
+function _14(_15,_16,_17){
+var _18,_19,_1a;
+var arg;
+for(var i=0,l=arguments.length;typeof (arg=arguments[i])=="function"&&i<l;i++){
+if(_18){
+_a(_18,arg.prototype);
+}else{
+_19=arg;
+var F=function(){
+};
+F.prototype=arg.prototype;
+_18=new F;
+}
+}
+if(arg){
+for(var j in arg){
+var _1b=arg[j];
+if(typeof _1b=="function"){
+arg[j]=function(){
+if(this instanceof _14){
+return arguments.callee.__rawMethod__.apply(this,arguments);
+}
+throw new Error("Method called on wrong object");
+};
+arg[j].__rawMethod__=_1b;
+}
+}
+if(arg.hasOwnProperty("constructor")){
+_1a=arg.constructor;
+}
+}
+_18=_18?_a(_18,arg):arg;
+function _14(){
+if(_19){
+_19.apply(this,arguments);
+}
+if(_1a){
+_1a.apply(this,arguments);
+}
+};
+_a(_14,arguments[i]);
+_18.constructor=_14;
+_14.prototype=_18;
+return _14;
+};
+function _1c(_1d){
+if(typeof _1d!="function"){
+throw new Error("String is not allowed in setTimeout/setInterval");
+}
+};
+function _1e(_1f,_20){
+_1c(_1f);
+return _1(_1f,_20);
+};
+function _21(_22,_23){
+_1c(_22);
+return _2(_22,_23);
+};
+function _24(_25){
+return _8.evaluate(_25);
+};
+var _26=_8.load=function(url){
+if(url.match(/^[\w\s]*:/)){
+throw new Error("Access denied to cross-site requests");
+}
+return _6({url:(new _b._Url(_8.rootUrl,url))+"",secure:true});
+};
+_8.evaluate=function(_27){
+dojox.secure.capability.validate(_27,_d,{document:1,element:1});
+if(_27.match(/^\s*[\[\{]/)){
+var _28=eval("("+_27+")");
+}else{
+eval(_27);
+}
+};
+return {loadJS:function(url){
+_8.rootUrl=url;
+return _6({url:url,secure:true}).addCallback(function(_29){
+_24(_29,_7);
+});
+},loadHTML:function(url){
+_8.rootUrl=url;
+return _6({url:url,secure:true}).addCallback(function(_2a){
+_7.innerHTML=_2a;
+});
+},evaluate:function(_2b){
+return _8.evaluate(_2b);
+}};
+};
+})();
+dojox.secure._safeDojoFunctions=function(_2c,_2d){
+var _2e=["mixin","require","isString","isArray","isFunction","isObject","isArrayLike","isAlien","hitch","delegate","partial","trim","disconnect","subscribe","unsubscribe","Deferred","toJson","style","attr"];
+var doc=_2c.ownerDocument;
+var _2f=dojox.secure.unwrap;
+dojo.NodeList.prototype.addContent.safetyCheck=function(_30){
+_2d.safeHTML(_30);
+};
+dojo.NodeList.prototype.style.safetyCheck=function(_31,_32){
+if(_31=="behavior"){
+throw new Error("Can not set behavior");
+}
+_2d.safeCSS(_32);
+};
+dojo.NodeList.prototype.attr.safetyCheck=function(_33,_34){
+if(_34&&(_33=="src"||_33=="href"||_33=="style")){
+throw new Error("Illegal to set "+_33);
+}
+};
+var _35={query:function(_36,_37){
+return _2d(dojo.query(_36,_2f(_37||_2c)));
+},connect:function(el,_38){
+var obj=el;
+arguments[0]=_2f(el);
+if(obj!=arguments[0]&&_38.substring(0,2)!="on"){
+throw new Error("Invalid event name for element");
+}
+return dojo.connect.apply(dojo,arguments);
+},body:function(){
+return _2c;
+},byId:function(id){
+return _2c.ownerDocument.getElementById(id);
+},fromJson:function(str){
+dojox.secure.capability.validate(str,[],{});
+return dojo.fromJson(str);
+}};
+for(var i=0;i<_2e.length;i++){
+_35[_2e[i]]=dojo[_2e[i]];
+}
+return _35;
+};
+}
Index: trunk/web/dojo/dojox/secure/DOM.js
===================================================================
--- trunk/web/dojo/dojox/secure/DOM.js	(revision 0)
+++ trunk/web/dojo/dojox/secure/DOM.js	(revision 9)
@@ -0,0 +1,234 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.secure.DOM"]){
+dojo._hasResource["dojox.secure.DOM"]=true;
+dojo.provide("dojox.secure.DOM");
+dojo.require("dojox.lang.observable");
+dojox.secure.DOM=function(_1){
+function _2(_3){
+if(!_3){
+return _3;
+}
+var _4=_3;
+do{
+if(_4==_1){
+return _5(_3);
+}
+}while((_4=_4.parentNode));
+return null;
+};
+function _5(_6){
+if(_6){
+if(_6.nodeType){
+var _7=_8(_6);
+if(_6.nodeType==1&&typeof _7.style=="function"){
+_7.style=_9(_6.style);
+_7.ownerDocument=_a;
+_7.childNodes={__get__:function(i){
+return _5(_6.childNodes[i]);
+},length:0};
+}
+return _7;
+}
+if(_6&&typeof _6=="object"){
+if(_6.__observable){
+return _6.__observable;
+}
+_7=_6 instanceof Array?[]:{};
+_6.__observable=_7;
+for(var i in _6){
+if(i!="__observable"){
+_7[i]=_5(_6[i]);
+}
+}
+_7.data__=_6;
+return _7;
+}
+if(typeof _6=="function"){
+var _b=function(_c){
+if(typeof _c=="function"){
+return function(){
+for(var i=0;i<arguments.length;i++){
+arguments[i]=_5(arguments[i]);
+}
+return _b(_c.apply(_5(this),arguments));
+};
+}
+return dojox.secure.unwrap(_c);
+};
+return function(){
+if(_6.safetyCheck){
+_6.safetyCheck.apply(_b(this),arguments);
+}
+for(var i=0;i<arguments.length;i++){
+arguments[i]=_b(arguments[i]);
+}
+return _5(_6.apply(_b(this),arguments));
+};
+}
+}
+return _6;
+};
+unwrap=dojox.secure.unwrap;
+function _d(_e){
+_e+="";
+if(_e.match(/behavior:|content:|javascript:|binding|expression|\@import/)){
+throw new Error("Illegal CSS");
+}
+var id=_1.id||(_1.id="safe"+(""+Math.random()).substring(2));
+return _e.replace(/(\}|^)\s*([^\{]*\{)/g,function(t,a,b){
+return a+" #"+id+" "+b;
+});
+};
+function _f(url){
+if(url.match(/:/)&&!url.match(/^(http|ftp|mailto)/)){
+throw new Error("Unsafe URL "+url);
+}
+};
+function _10(el){
+if(el&&el.nodeType==1){
+if(el.tagName.match(/script/i)){
+var src=el.src;
+if(src&&src!=""){
+el.parentNode.removeChild(el);
+dojo.xhrGet({url:src,secure:true}).addCallback(function(_11){
+_a.evaluate(_11);
+});
+}else{
+var _12=el.innerHTML;
+el.parentNode.removeChild(el);
+_5.evaluate(_12);
+}
+}
+if(el.tagName.match(/link/i)){
+throw new Error("illegal tag");
+}
+if(el.tagName.match(/style/i)){
+var _13=function(_14){
+if(el.styleSheet){
+el.styleSheet.cssText=_14;
+}else{
+var _15=doc.createTextNode(_14);
+if(el.childNodes[0]){
+el.replaceChild(_15,el.childNodes[0]);
+}else{
+el.appendChild(_15);
+}
+}
+};
+src=el.src;
+if(src&&src!=""){
+alert("src"+src);
+el.src=null;
+dojo.xhrGet({url:src,secure:true}).addCallback(function(_16){
+_13(_d(_16));
+});
+}
+_13(_d(el.innerHTML));
+}
+if(el.style){
+_d(el.style.cssText);
+}
+if(el.href){
+_f(el.href);
+}
+if(el.src){
+_f(el.src);
+}
+var _17,i=0;
+while((_17=el.attributes[i++])){
+if(_17.name.substring(0,2)=="on"&&_17.value!="null"&&_17.value!=""){
+throw new Error("event handlers not allowed in the HTML, they must be set with element.addEventListener");
+}
+}
+var _18=el.childNodes;
+for(var i=0,l=_18.length;i<l;i++){
+_10(_18[i]);
+}
+}
+};
+function _19(_1a){
+var div=document.createElement("div");
+if(_1a.match(/<object/i)){
+throw new Error("The object tag is not allowed");
+}
+div.innerHTML=_1a;
+_10(div);
+return div;
+};
+var doc=_1.ownerDocument;
+var _a={getElementById:function(id){
+return _2(doc.getElementById(id));
+},createElement:function(_1b){
+return _5(doc.createElement(_1b));
+},createTextNode:function(_1c){
+return _5(doc.createTextNode(_1c));
+},write:function(str){
+var div=_19(str);
+while(div.childNodes.length){
+_1.appendChild(div.childNodes[0]);
+}
+}};
+_a.open=_a.close=function(){
+};
+var _1d={innerHTML:function(_1e,_1f){
+_1e.innerHTML=_19(_1f).innerHTML;
+}};
+_1d.outerHTML=function(_20,_21){
+throw new Error("Can not set this property");
+};
+function _22(_23,_24){
+return function(_25,_26){
+_10(_26[_24]);
+return _25[_23](_26[0]);
+};
+};
+var _27={appendChild:_22("appendChild",0),insertBefore:_22("insertBefore",0),replaceChild:_22("replaceChild",1),cloneNode:function(_28,_29){
+return _28.cloneNode(_29[0]);
+},addEventListener:function(_2a,_2b){
+dojo.connect(_2a,"on"+_2b[0],this,function(_2c){
+_2c=_8(_2c||window.event);
+_2b[1].call(this,_2c);
+});
+}};
+_27.childNodes=_27.style=_27.ownerDocument=function(){
+};
+function _2d(_2e){
+return dojox.lang.makeObservable(function(_2f,_30){
+var _31;
+return _2f[_30];
+},_2e,function(_32,_33,_34,_35){
+for(var i=0;i<_35.length;i++){
+_35[i]=unwrap(_35[i]);
+}
+if(_27[_34]){
+return _5(_27[_34].call(_32,_33,_35));
+}
+return _5(_33[_34].apply(_33,_35));
+},_27);
+};
+var _8=_2d(function(_36,_37,_38){
+if(_1d[_37]){
+_1d[_37](_36,_38);
+}
+_36[_37]=_38;
+});
+var _39={behavior:1,MozBinding:1};
+var _9=_2d(function(_3a,_3b,_3c){
+if(!_39[_3b]){
+_3a[_3b]=_d(_3c);
+}
+});
+_5.safeHTML=_19;
+_5.safeCSS=_d;
+return _5;
+};
+dojox.secure.unwrap=function unwrap(_3d){
+return (_3d&&_3d.data__)||_3d;
+};
+}
Index: trunk/web/dojo/dojox/secure/capability.js
===================================================================
--- trunk/web/dojo/dojox/secure/capability.js	(revision 0)
+++ trunk/web/dojo/dojox/secure/capability.js	(revision 9)
@@ -0,0 +1,102 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.secure.capability"]){
+dojo._hasResource["dojox.secure.capability"]=true;
+dojo.provide("dojox.secure.capability");
+dojox.secure.badProps=/^__|^(apply|call|callee|caller|constructor|eval|prototype|this|unwatch|valueOf|watch)$|__$/;
+dojox.secure.capability={keywords:["break","case","catch","const","continue","debugger","default","delete","do","else","enum","false","finally","for","function","if","in","instanceof","new","null","yield","return","switch","throw","true","try","typeof","var","void","while"],validate:function(_1,_2,_3){
+var _4=this.keywords;
+for(var i=0;i<_4.length;i++){
+_3[_4[i]]=true;
+}
+var _5="|this| keyword in object literal without a Class call";
+var _6=[];
+if(_1.match(/[\u200c-\u200f\u202a-\u202e\u206a-\u206f\uff00-\uffff]/)){
+throw new Error("Illegal unicode characters detected");
+}
+if(_1.match(/\/\*@cc_on/)){
+throw new Error("Conditional compilation token is not allowed");
+}
+_1=_1.replace(/\\["'\\\/bfnrtu]/g,"@").replace(/\/\/.*|\/\*[\w\W]*?\*\/|\/(\\[\/\\]|[^*\/])(\\.|[^\/\n\\])*\/[gim]*|("[^"]*")|('[^']*')/g,function(t){
+return t.match(/^\/\/|^\/\*/)?" ":"0";
+}).replace(/\.\s*([a-z\$_A-Z][\w\$_]*)|([;,{])\s*([a-z\$_A-Z][\w\$_]*\s*):/g,function(t,_7,_8,_9){
+_7=_7||_9;
+if(/^__|^(apply|call|callee|caller|constructor|eval|prototype|this|unwatch|valueOf|watch)$|__$/.test(_7)){
+throw new Error("Illegal property name "+_7);
+}
+return (_8&&(_8+"0:"))||"~";
+});
+_1.replace(/([^\[][\]\}]\s*=)|((\Wreturn|\S)\s*\[\s*\+?)|([^=!][=!]=[^=])/g,function(_a){
+if(!_a.match(/((\Wreturn|[=\&\|\:\?\,])\s*\[)|\[\s*\+$/)){
+throw new Error("Illegal operator "+_a.substring(1));
+}
+});
+_1=_1.replace(new RegExp("("+_2.join("|")+")[\\s~]*\\(","g"),function(_b){
+return "new(";
+});
+function _c(_d,_e){
+var _f={};
+_d.replace(/#\d+/g,function(b){
+var _10=_6[b.substring(1)];
+for(var i in _10){
+if(i==_5){
+throw i;
+}
+if(i=="this"&&_10[":method"]&&_10["this"]==1){
+i=_5;
+}
+if(i!=":method"){
+_f[i]=2;
+}
+}
+});
+_d.replace(/(\W|^)([a-z_\$A-Z][\w_\$]*)/g,function(t,a,_11){
+if(_11.charAt(0)=="_"){
+throw new Error("Names may not start with _");
+}
+_f[_11]=1;
+});
+return _f;
+};
+var _12,_13;
+function _14(t,_15,a,b,_16,_17){
+_17.replace(/(^|,)0:\s*function#(\d+)/g,function(t,a,b){
+var _18=_6[b];
+_18[":method"]=1;
+});
+_17=_17.replace(/(^|[^_\w\$])Class\s*\(\s*([_\w\$]+\s*,\s*)*#(\d+)/g,function(t,p,a,b){
+var _19=_6[b];
+delete _19[_5];
+return (p||"")+(a||"")+"#"+b;
+});
+_13=_c(_17,_15);
+function _1a(t,a,b,_1b){
+_1b.replace(/,?([a-z\$A-Z][_\w\$]*)/g,function(t,_1c){
+if(_1c=="Class"){
+throw new Error("Class is reserved");
+}
+delete _13[_1c];
+});
+};
+if(_15){
+_1a(t,a,a,_16);
+}
+_17.replace(/(\W|^)(var) ([ \t,_\w\$]+)/g,_1a);
+return (a||"")+(b||"")+"#"+(_6.push(_13)-1);
+};
+do{
+_12=_1.replace(/((function|catch)(\s+[_\w\$]+)?\s*\(([^\)]*)\)\s*)?{([^{}]*)}/g,_14);
+}while(_12!=_1&&(_1=_12));
+_14(0,0,0,0,0,_1);
+for(i in _13){
+if(!(i in _3)){
+throw new Error("Illegal reference to "+i);
+}
+}
+}};
+}
Index: trunk/web/dojo/dojox/validate/isbn.js
===================================================================
--- trunk/web/dojo/dojox/validate/isbn.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/isbn.js	(revision 9)
@@ -0,0 +1,40 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.isbn"]){
+dojo._hasResource["dojox.validate.isbn"]=true;
+dojo.provide("dojox.validate.isbn");
+dojox.validate.isValidIsbn=function(_1){
+var _2,_3=0,_4;
+if(!dojo.isString(_1)){
+_1=String(_1);
+}
+_1=_1.replace(/[- ]/g,"");
+_2=_1.length;
+switch(_2){
+case 10:
+_4=_2;
+for(var i=0;i<9;i++){
+_3+=parseInt(_1.charAt(i))*_4;
+_4--;
+}
+var t=_1.charAt(9).toUpperCase();
+_3+=t=="X"?10:parseInt(t);
+return _3%11==0;
+break;
+case 13:
+_4=-1;
+for(var i=0;i<_2;i++){
+_3+=parseInt(_1.charAt(i))*(2+_4);
+_4*=-1;
+}
+return _3%10==0;
+break;
+}
+return false;
+};
+}
Index: trunk/web/dojo/dojox/validate/check.js
===================================================================
--- trunk/web/dojo/dojox/validate/check.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/check.js	(revision 9)
@@ -0,0 +1,230 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.check"]){
+dojo._hasResource["dojox.validate.check"]=true;
+dojo.provide("dojox.validate.check");
+dojo.experimental;
+dojo.require("dojox.validate._base");
+dojox.validate.check=function(_1,_2){
+var _3=[];
+var _4=[];
+var _5={isSuccessful:function(){
+return (!this.hasInvalid()&&!this.hasMissing());
+},hasMissing:function(){
+return (_3.length>0);
+},getMissing:function(){
+return _3;
+},isMissing:function(_6){
+for(var i=0;i<_3.length;i++){
+if(_6==_3[i]){
+return true;
+}
+}
+return false;
+},hasInvalid:function(){
+return (_4.length>0);
+},getInvalid:function(){
+return _4;
+},isInvalid:function(_7){
+for(var i=0;i<_4.length;i++){
+if(_7==_4[i]){
+return true;
+}
+}
+return false;
+}};
+var _8=function(_9,_a){
+return (typeof _a[_9]=="undefined");
+};
+if(_2.trim instanceof Array){
+for(var i=0;i<_2.trim.length;i++){
+var _b=_1[_2.trim[i]];
+if(_8("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
+continue;
+}
+_b.value=_b.value.replace(/(^\s*|\s*$)/g,"");
+}
+}
+if(_2.uppercase instanceof Array){
+for(var i=0;i<_2.uppercase.length;i++){
+var _b=_1[_2.uppercase[i]];
+if(_8("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
+continue;
+}
+_b.value=_b.value.toUpperCase();
+}
+}
+if(_2.lowercase instanceof Array){
+for(var i=0;i<_2.lowercase.length;i++){
+var _b=_1[_2.lowercase[i]];
+if(_8("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
+continue;
+}
+_b.value=_b.value.toLowerCase();
+}
+}
+if(_2.ucfirst instanceof Array){
+for(var i=0;i<_2.ucfirst.length;i++){
+var _b=_1[_2.ucfirst[i]];
+if(_8("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
+continue;
+}
+_b.value=_b.value.replace(/\b\w+\b/g,function(_c){
+return _c.substring(0,1).toUpperCase()+_c.substring(1).toLowerCase();
+});
+}
+}
+if(_2.digit instanceof Array){
+for(var i=0;i<_2.digit.length;i++){
+var _b=_1[_2.digit[i]];
+if(_8("type",_b)||_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
+continue;
+}
+_b.value=_b.value.replace(/\D/g,"");
+}
+}
+if(_2.required instanceof Array){
+for(var i=0;i<_2.required.length;i++){
+if(!dojo.isString(_2.required[i])){
+continue;
+}
+var _b=_1[_2.required[i]];
+if(!_8("type",_b)&&(_b.type=="text"||_b.type=="textarea"||_b.type=="password"||_b.type=="file")&&/^\s*$/.test(_b.value)){
+_3[_3.length]=_b.name;
+}else{
+if(!_8("type",_b)&&(_b.type=="select-one"||_b.type=="select-multiple")&&(_b.selectedIndex==-1||/^\s*$/.test(_b.options[_b.selectedIndex].value))){
+_3[_3.length]=_b.name;
+}else{
+if(_b instanceof Array){
+var _d=false;
+for(var j=0;j<_b.length;j++){
+if(_b[j].checked){
+_d=true;
+}
+}
+if(!_d){
+_3[_3.length]=_b[0].name;
+}
+}
+}
+}
+}
+}
+if(_2.required instanceof Array){
+for(var i=0;i<_2.required.length;i++){
+if(!dojo.isObject(_2.required[i])){
+continue;
+}
+var _b,_e;
+for(var _f in _2.required[i]){
+_b=_1[_f];
+_e=_2.required[i][_f];
+}
+if(_b instanceof Array){
+var _d=0;
+for(var j=0;j<_b.length;j++){
+if(_b[j].checked){
+_d++;
+}
+}
+if(_d<_e){
+_3[_3.length]=_b[0].name;
+}
+}else{
+if(!_8("type",_b)&&_b.type=="select-multiple"){
+var _10=0;
+for(var j=0;j<_b.options.length;j++){
+if(_b.options[j].selected&&!/^\s*$/.test(_b.options[j].value)){
+_10++;
+}
+}
+if(_10<_e){
+_3[_3.length]=_b.name;
+}
+}
+}
+}
+}
+if(dojo.isObject(_2.dependencies)){
+for(_f in _2.dependencies){
+var _b=_1[_f];
+if(_8("type",_b)){
+continue;
+}
+if(_b.type!="text"&&_b.type!="textarea"&&_b.type!="password"){
+continue;
+}
+if(/\S+/.test(_b.value)){
+continue;
+}
+if(_5.isMissing(_b.name)){
+continue;
+}
+var _11=_1[_2.dependencies[_f]];
+if(_11.type!="text"&&_11.type!="textarea"&&_11.type!="password"){
+continue;
+}
+if(/^\s*$/.test(_11.value)){
+continue;
+}
+_3[_3.length]=_b.name;
+}
+}
+if(dojo.isObject(_2.constraints)){
+for(_f in _2.constraints){
+var _b=_1[_f];
+if(!_b){
+continue;
+}
+if(!_8("tagName",_b)&&(_b.tagName.toLowerCase().indexOf("input")>=0||_b.tagName.toLowerCase().indexOf("textarea")>=0)&&/^\s*$/.test(_b.value)){
+continue;
+}
+var _12=true;
+if(dojo.isFunction(_2.constraints[_f])){
+_12=_2.constraints[_f](_b.value);
+}else{
+if(dojo.isArray(_2.constraints[_f])){
+if(dojo.isArray(_2.constraints[_f][0])){
+for(var i=0;i<_2.constraints[_f].length;i++){
+_12=dojox.validate.evaluateConstraint(_2,_2.constraints[_f][i],_f,_b);
+if(!_12){
+break;
+}
+}
+}else{
+_12=dojox.validate.evaluateConstraint(_2,_2.constraints[_f],_f,_b);
+}
+}
+}
+if(!_12){
+_4[_4.length]=_b.name;
+}
+}
+}
+if(dojo.isObject(_2.confirm)){
+for(_f in _2.confirm){
+var _b=_1[_f];
+var _11=_1[_2.confirm[_f]];
+if(_8("type",_b)||_8("type",_11)||(_b.type!="text"&&_b.type!="textarea"&&_b.type!="password")||(_11.type!=_b.type)||(_11.value==_b.value)||(_5.isInvalid(_b.name))||(/^\s*$/.test(_11.value))){
+continue;
+}
+_4[_4.length]=_b.name;
+}
+}
+return _5;
+};
+dojox.validate.evaluateConstraint=function(_13,_14,_15,_16){
+var _17=_14[0];
+var _18=_14.slice(1);
+_18.unshift(_16.value);
+if(typeof _17!="undefined"){
+return _17.apply(null,_18);
+}
+return false;
+};
+}
Index: trunk/web/dojo/dojox/validate/web.js
===================================================================
--- trunk/web/dojo/dojox/validate/web.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/web.js	(revision 9)
@@ -0,0 +1,40 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.web"]){
+dojo._hasResource["dojox.validate.web"]=true;
+dojo.provide("dojox.validate.web");
+dojo.require("dojox.validate._base");
+dojox.validate.isIpAddress=function(_1,_2){
+var re=new RegExp("^"+dojox.validate.regexp.ipAddress(_2)+"$","i");
+return re.test(_1);
+};
+dojox.validate.isUrl=function(_3,_4){
+var re=new RegExp("^"+dojox.validate.regexp.url(_4)+"$","i");
+return re.test(_3);
+};
+dojox.validate.isEmailAddress=function(_5,_6){
+var re=new RegExp("^"+dojox.validate.regexp.emailAddress(_6)+"$","i");
+return re.test(_5);
+};
+dojox.validate.isEmailAddressList=function(_7,_8){
+var re=new RegExp("^"+dojox.validate.regexp.emailAddressList(_8)+"$","i");
+return re.test(_7);
+};
+dojox.validate.getEmailAddressList=function(_9,_a){
+if(!_a){
+_a={};
+}
+if(!_a.listSeparator){
+_a.listSeparator="\\s;,";
+}
+if(dojox.validate.isEmailAddressList(_9,_a)){
+return _9.split(new RegExp("\\s*["+_a.listSeparator+"]\\s*"));
+}
+return [];
+};
+}
Index: trunk/web/dojo/dojox/validate/README
===================================================================
--- trunk/web/dojo/dojox/validate/README	(revision 0)
+++ trunk/web/dojo/dojox/validate/README	(revision 9)
@@ -0,0 +1,62 @@
+-------------------------------------------------------------------------------
+dojox.validate
+-------------------------------------------------------------------------------
+Version 0.02
+Release date: 07/12/2007
+-------------------------------------------------------------------------------
+Project state: experimental / beta
+-------------------------------------------------------------------------------
+Credits
+	port: Peter Higgins (dante)
+	contributions: Kun Xi (bookstack at gmail com), Jared Jurkiewicz
+-------------------------------------------------------------------------------
+Project description
+
+	Provides a set of validation functions to match
+	values against known constants for use in form
+	validation, such as email address, TLD, ipAddress,
+	country-specific phone numbers and SSN, among
+	others.. 
+
+	It is broken into many parts. dojox.validate._base
+	is required by most named modules in this project.
+	
+	ca.js provides Canadian specific functionality
+	
+	check.js provides an experimental form-management utility,
+		which will likely be deprecated in favor 
+
+	creditCard.js provides validation functions for most standard
+		credit card types. 
+		
+	isbn.js validates ISBN numbers
+	
+	regexp.js provides a strange place to put regular expressions
+		related to validation. It was formerly polluting namespaces
+		and created in `dojox.regexp`. This is now `dojox.validate.regexp`
+		to confine values to the dojox.validate project.
+		
+	us.js provides US-Specific validation. Zip, Social, etc.
+	
+	web.js provides url and email address validation, as well as a number
+		of web/network related validation functions. 
+
+	br.js provides Brazil specific validators for CNPJ and CPF numbers.
+		
+-------------------------------------------------------------------------------
+Dependencies:
+
+	Requires Base Dojo and dojo.regexp.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+
+http://svn.dojotoolkit.org/src/dojox/trunk/validate.js
+http://svn.dojotoolkit.org/src/dojox/trunk/validate
+
+Install into the following directory structure:
+/dojox/validate/
+
+...which should be at the same level as your Dojo checkout.
Index: trunk/web/dojo/dojox/validate/br.js
===================================================================
--- trunk/web/dojo/dojox/validate/br.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/br.js	(revision 9)
@@ -0,0 +1,203 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.br"]){
+dojo._hasResource["dojox.validate.br"]=true;
+dojo.provide("dojox.validate.br");
+dojo.require("dojox.validate._base");
+dojox.validate.br.isValidCnpj=function(_1){
+if(!dojo.isString(_1)){
+if(!_1){
+return false;
+}
+_1=_1+"";
+while(_1.length<14){
+_1="0"+_1;
+}
+}
+var _2={format:["##.###.###/####-##","########/####-##","############-##","##############"]};
+if(dojox.validate.isNumberFormat(_1,_2)){
+_1=_1.replace("/","").replace(/\./g,"").replace("-","");
+var _3=[];
+var dv=[];
+var i,j,_4;
+for(i=0;i<10;i++){
+_4="";
+for(j=0;j<_1.length;j++){
+_4+=""+i;
+}
+if(_1===_4){
+return false;
+}
+}
+for(i=0;i<12;i++){
+_3.push(parseInt(_1.charAt(i),10));
+}
+for(i=12;i<14;i++){
+dv.push(parseInt(_1.charAt(i),10));
+}
+var _5=[9,8,7,6,5,4,3,2,9,8,7,6].reverse();
+var _6=0;
+for(i=0;i<_3.length;i++){
+_6+=_3[i]*_5[i];
+}
+var _7=_6%11;
+if(_7==dv[0]){
+_6=0;
+_5=[9,8,7,6,5,4,3,2,9,8,7,6,5].reverse();
+_3.push(_7);
+for(i=0;i<_3.length;i++){
+_6+=_3[i]*_5[i];
+}
+var _8=_6%11;
+if(_8===dv[1]){
+return true;
+}
+}
+}
+return false;
+};
+dojox.validate.br.computeCnpjDv=function(_9){
+if(!dojo.isString(_9)){
+if(!_9){
+return "";
+}
+_9=_9+"";
+while(_9.length<12){
+_9="0"+_9;
+}
+}
+var _a={format:["##.###.###/####","########/####","############"]};
+if(dojox.validate.isNumberFormat(_9,_a)){
+_9=_9.replace("/","").replace(/\./g,"");
+var _b=[];
+var i,j,_c;
+for(i=0;i<10;i++){
+_c="";
+for(j=0;j<_9.length;j++){
+_c+=""+i;
+}
+if(_9===_c){
+return "";
+}
+}
+for(i=0;i<_9.length;i++){
+_b.push(parseInt(_9.charAt(i),10));
+}
+var _d=[9,8,7,6,5,4,3,2,9,8,7,6].reverse();
+var _e=0;
+for(i=0;i<_b.length;i++){
+_e+=_b[i]*_d[i];
+}
+var _f=_e%11;
+_e=0;
+_d=[9,8,7,6,5,4,3,2,9,8,7,6,5].reverse();
+_b.push(_f);
+for(i=0;i<_b.length;i++){
+_e+=_b[i]*_d[i];
+}
+var dv1=_e%11;
+return (""+_f)+dv1;
+}
+return "";
+};
+dojox.validate.br.isValidCpf=function(_10){
+if(!dojo.isString(_10)){
+if(!_10){
+return false;
+}
+_10=_10+"";
+while(_10.length<11){
+_10="0"+_10;
+}
+}
+var _11={format:["###.###.###-##","#########-##","###########"]};
+if(dojox.validate.isNumberFormat(_10,_11)){
+_10=_10.replace("-","").replace(/\./g,"");
+var cpf=[];
+var dv=[];
+var i,j,tmp;
+for(i=0;i<10;i++){
+tmp="";
+for(j=0;j<_10.length;j++){
+tmp+=""+i;
+}
+if(_10===tmp){
+return false;
+}
+}
+for(i=0;i<9;i++){
+cpf.push(parseInt(_10.charAt(i),10));
+}
+for(i=9;i<12;i++){
+dv.push(parseInt(_10.charAt(i),10));
+}
+var _12=[9,8,7,6,5,4,3,2,1].reverse();
+var sum=0;
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_12[i];
+}
+var dv0=sum%11;
+if(dv0==dv[0]){
+sum=0;
+_12=[9,8,7,6,5,4,3,2,1,0].reverse();
+cpf.push(dv0);
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_12[i];
+}
+var dv1=sum%11;
+if(dv1===dv[1]){
+return true;
+}
+}
+}
+return false;
+};
+dojox.validate.br.computeCpfDv=function(_13){
+if(!dojo.isString(_13)){
+if(!_13){
+return "";
+}
+_13=_13+"";
+while(_13.length<9){
+_13="0"+_13;
+}
+}
+var _14={format:["###.###.###","#########"]};
+if(dojox.validate.isNumberFormat(_13,_14)){
+_13=_13.replace(/\./g,"");
+var cpf=[];
+for(i=0;i<10;i++){
+tmp="";
+for(j=0;j<_13.length;j++){
+tmp+=""+i;
+}
+if(_13===tmp){
+return "";
+}
+}
+for(i=0;i<_13.length;i++){
+cpf.push(parseInt(_13.charAt(i),10));
+}
+var _15=[9,8,7,6,5,4,3,2,1].reverse();
+var sum=0;
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_15[i];
+}
+var dv0=sum%11;
+sum=0;
+_15=[9,8,7,6,5,4,3,2,1,0].reverse();
+cpf.push(dv0);
+for(i=0;i<cpf.length;i++){
+sum+=cpf[i]*_15[i];
+}
+var dv1=sum%11;
+return (""+dv0)+dv1;
+}
+return "";
+};
+}
Index: trunk/web/dojo/dojox/validate/ca.js
===================================================================
--- trunk/web/dojo/dojox/validate/ca.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/ca.js	(revision 9)
@@ -0,0 +1,24 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.ca"]){
+dojo._hasResource["dojox.validate.ca"]=true;
+dojo.provide("dojox.validate.ca");
+dojo.require("dojox.validate._base");
+dojo.mixin(dojox.validate.ca,{isPhoneNumber:function(_1){
+return dojox.validate.us.isPhoneNumber(_1);
+},isProvince:function(_2){
+var re=new RegExp("^"+dojox.validate.regexp.ca.province()+"$","i");
+return re.test(_2);
+},isSocialInsuranceNumber:function(_3){
+var _4={format:["###-###-###","### ### ###","#########"]};
+return dojox.validate.isNumberFormat(_3,_4);
+},isPostalCode:function(_5){
+var re=new RegExp("^"+dojox.validate.regexp.ca.postalCode()+"$","i");
+return re.test(_5);
+}});
+}
Index: trunk/web/dojo/dojox/validate/creditCard.js
===================================================================
--- trunk/web/dojo/dojox/validate/creditCard.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/creditCard.js	(revision 9)
@@ -0,0 +1,48 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.creditCard"]){
+dojo._hasResource["dojox.validate.creditCard"]=true;
+dojo.provide("dojox.validate.creditCard");
+dojo.require("dojox.validate._base");
+dojox.validate._cardInfo={"mc":"5[1-5][0-9]{14}","ec":"5[1-5][0-9]{14}","vi":"4(?:[0-9]{12}|[0-9]{15})","ax":"3[47][0-9]{13}","dc":"3(?:0[0-5][0-9]{11}|[68][0-9]{12})","bl":"3(?:0[0-5][0-9]{11}|[68][0-9]{12})","di":"6011[0-9]{12}","jcb":"(?:3[0-9]{15}|(2131|1800)[0-9]{11})","er":"2(?:014|149)[0-9]{11}"};
+dojox.validate.isValidCreditCard=function(_1,_2){
+return ((_2.toLowerCase()=="er"||dojox.validate.isValidLuhn(_1))&&dojox.validate.isValidCreditCardNumber(_1,_2.toLowerCase()));
+};
+dojox.validate.isValidCreditCardNumber=function(_3,_4){
+_3=String(_3).replace(/[- ]/g,"");
+var _5=dojox.validate._cardInfo,_6=[];
+if(_4){
+var _7="^"+_5[_4.toLowerCase()]+"$";
+return _7?!!_3.match(_7):false;
+}
+for(var p in _5){
+if(_3.match("^"+_5[p]+"$")){
+_6.push(p);
+}
+}
+return _6.length?_6.join("|"):false;
+};
+dojox.validate.isValidCvv=function(_8,_9){
+if(!dojo.isString(_8)){
+_8=String(_8);
+}
+var _a;
+switch(_9.toLowerCase()){
+case "mc":
+case "ec":
+case "vi":
+case "di":
+_a="###";
+break;
+case "ax":
+_a="####";
+break;
+}
+return !!_a&&_8.length&&dojox.validate.isNumberFormat(_8,{format:_a});
+};
+}
Index: trunk/web/dojo/dojox/validate/us.js
===================================================================
--- trunk/web/dojo/dojox/validate/us.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/us.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.us"]){
+dojo._hasResource["dojox.validate.us"]=true;
+dojo.provide("dojox.validate.us");
+dojo.require("dojox.validate._base");
+dojox.validate.us.isState=function(_1,_2){
+var re=new RegExp("^"+dojox.validate.regexp.us.state(_2)+"$","i");
+return re.test(_1);
+};
+dojox.validate.us.isPhoneNumber=function(_3){
+var _4={format:["###-###-####","(###) ###-####","(###) ### ####","###.###.####","###/###-####","### ### ####","###-###-#### x#???","(###) ###-#### x#???","(###) ### #### x#???","###.###.#### x#???","###/###-#### x#???","### ### #### x#???","##########"]};
+return dojox.validate.isNumberFormat(_3,_4);
+};
+dojox.validate.us.isSocialSecurityNumber=function(_5){
+var _6={format:["###-##-####","### ## ####","#########"]};
+return dojox.validate.isNumberFormat(_5,_6);
+};
+dojox.validate.us.isZipCode=function(_7){
+var _8={format:["#####-####","##### ####","#########","#####"]};
+return dojox.validate.isNumberFormat(_7,_8);
+};
+}
Index: trunk/web/dojo/dojox/validate/_base.js
===================================================================
--- trunk/web/dojo/dojox/validate/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/_base.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate._base"]){
+dojo._hasResource["dojox.validate._base"]=true;
+dojo.provide("dojox.validate._base");
+dojo.experimental("dojox.validate");
+dojo.require("dojo.regexp");
+dojo.require("dojo.number");
+dojo.require("dojox.validate.regexp");
+dojox.validate.isText=function(_1,_2){
+_2=(typeof _2=="object")?_2:{};
+if(/^\s*$/.test(_1)){
+return false;
+}
+if(typeof _2.length=="number"&&_2.length!=_1.length){
+return false;
+}
+if(typeof _2.minlength=="number"&&_2.minlength>_1.length){
+return false;
+}
+if(typeof _2.maxlength=="number"&&_2.maxlength<_1.length){
+return false;
+}
+return true;
+};
+dojox.validate._isInRangeCache={};
+dojox.validate.isInRange=function(_3,_4){
+_3=dojo.number.parse(_3,_4);
+if(isNaN(_3)){
+return false;
+}
+_4=(typeof _4=="object")?_4:{};
+var _5=(typeof _4.max=="number")?_4.max:Infinity,_6=(typeof _4.min=="number")?_4.min:-Infinity,_7=(typeof _4.decimal=="string")?_4.decimal:".",_8=dojox.validate._isInRangeCache,_9=_3+"max"+_5+"min"+_6+"dec"+_7;
+if(typeof _8[_9]!="undefined"){
+return _8[_9];
+}
+_8[_9]=!(_3<_6||_3>_5);
+return _8[_9];
+};
+dojox.validate.isNumberFormat=function(_a,_b){
+var re=new RegExp("^"+dojox.validate.regexp.numberFormat(_b)+"$","i");
+return re.test(_a);
+};
+dojox.validate.isValidLuhn=function(_c){
+var _d=0,_e,_f;
+if(!dojo.isString(_c)){
+_c=String(_c);
+}
+_c=_c.replace(/[- ]/g,"");
+_e=_c.length%2;
+for(var i=0;i<_c.length;i++){
+_f=parseInt(_c.charAt(i));
+if(i%2==_e){
+_f*=2;
+}
+if(_f>9){
+_f-=9;
+}
+_d+=_f;
+}
+return !(_d%10);
+};
+}
Index: trunk/web/dojo/dojox/validate/regexp.js
===================================================================
--- trunk/web/dojo/dojox/validate/regexp.js	(revision 0)
+++ trunk/web/dojo/dojox/validate/regexp.js	(revision 9)
@@ -0,0 +1,164 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate.regexp"]){
+dojo._hasResource["dojox.validate.regexp"]=true;
+dojo.provide("dojox.validate.regexp");
+dojo.require("dojo.regexp");
+dojo.mixin(dojox.validate.regexp,{ipAddress:function(_1){
+_1=(typeof _1=="object")?_1:{};
+if(typeof _1.allowDottedDecimal!="boolean"){
+_1.allowDottedDecimal=true;
+}
+if(typeof _1.allowDottedHex!="boolean"){
+_1.allowDottedHex=true;
+}
+if(typeof _1.allowDottedOctal!="boolean"){
+_1.allowDottedOctal=true;
+}
+if(typeof _1.allowDecimal!="boolean"){
+_1.allowDecimal=true;
+}
+if(typeof _1.allowHex!="boolean"){
+_1.allowHex=true;
+}
+if(typeof _1.allowIPv6!="boolean"){
+_1.allowIPv6=true;
+}
+if(typeof _1.allowHybrid!="boolean"){
+_1.allowHybrid=true;
+}
+var _2="((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
+var _3="(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]";
+var _4="(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]";
+var _5="(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|"+"4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])";
+var _6="0[xX]0*[\\da-fA-F]{1,8}";
+var _7="([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}";
+var _8="([\\da-fA-F]{1,4}\\:){6}"+"((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])";
+var a=[];
+if(_1.allowDottedDecimal){
+a.push(_2);
+}
+if(_1.allowDottedHex){
+a.push(_3);
+}
+if(_1.allowDottedOctal){
+a.push(_4);
+}
+if(_1.allowDecimal){
+a.push(_5);
+}
+if(_1.allowHex){
+a.push(_6);
+}
+if(_1.allowIPv6){
+a.push(_7);
+}
+if(_1.allowHybrid){
+a.push(_8);
+}
+var _9="";
+if(a.length>0){
+_9="("+a.join("|")+")";
+}
+return _9;
+},host:function(_a){
+_a=(typeof _a=="object")?_a:{};
+if(typeof _a.allowIP!="boolean"){
+_a.allowIP=true;
+}
+if(typeof _a.allowLocal!="boolean"){
+_a.allowLocal=false;
+}
+if(typeof _a.allowPort!="boolean"){
+_a.allowPort=true;
+}
+if(typeof _a.allowNamed!="boolean"){
+_a.allowNamed=false;
+}
+var _b="(?:[\\da-zA-Z](?:[-\\da-zA-Z]{0,61}[\\da-zA-Z])?)";
+var _c="(?:[a-zA-Z](?:[-\\da-zA-Z]{0,6}[\\da-zA-Z])?)";
+var _d=_a.allowPort?"(\\:\\d+)?":"";
+var _e="((?:"+_b+"\\.)+"+_c+"\\.?)";
+if(_a.allowIP){
+_e+="|"+dojox.validate.regexp.ipAddress(_a);
+}
+if(_a.allowLocal){
+_e+="|localhost";
+}
+if(_a.allowNamed){
+_e+="|^[^-][a-zA-Z0-9_-]*";
+}
+return "("+_e+")"+_d;
+},url:function(_f){
+_f=(typeof _f=="object")?_f:{};
+if(!("scheme" in _f)){
+_f.scheme=[true,false];
+}
+var _10=dojo.regexp.buildGroupRE(_f.scheme,function(q){
+if(q){
+return "(https?|ftps?)\\://";
+}
+return "";
+});
+var _11="(/(?:[^?#\\s/]+/)*(?:[^?#\\s/]+(?:\\?[^?#\\s/]*)?(?:#[A-Za-z][\\w.:-]*)?)?)?";
+return _10+dojox.validate.regexp.host(_f)+_11;
+},emailAddress:function(_12){
+_12=(typeof _12=="object")?_12:{};
+if(typeof _12.allowCruft!="boolean"){
+_12.allowCruft=false;
+}
+_12.allowPort=false;
+var _13="([!#-'*+\\-\\/-9=?A-Z^-~]+[.])*[!#-'*+\\-\\/-9=?A-Z^-~]+";
+var _14=_13+"@"+dojox.validate.regexp.host(_12);
+if(_12.allowCruft){
+_14="<?(mailto\\:)?"+_14+">?";
+}
+return _14;
+},emailAddressList:function(_15){
+_15=(typeof _15=="object")?_15:{};
+if(typeof _15.listSeparator!="string"){
+_15.listSeparator="\\s;,";
+}
+var _16=dojox.validate.regexp.emailAddress(_15);
+var _17="("+_16+"\\s*["+_15.listSeparator+"]\\s*)*"+_16+"\\s*["+_15.listSeparator+"]?\\s*";
+return _17;
+},numberFormat:function(_18){
+_18=(typeof _18=="object")?_18:{};
+if(typeof _18.format=="undefined"){
+_18.format="###-###-####";
+}
+var _19=function(_1a){
+return dojo.regexp.escapeString(_1a,"?").replace(/\?/g,"\\d?").replace(/#/g,"\\d");
+};
+return dojo.regexp.buildGroupRE(_18.format,_19);
+}});
+dojox.validate.regexp.ca={postalCode:function(){
+return "([A-Z][0-9][A-Z] [0-9][A-Z][0-9])";
+},province:function(){
+return "(AB|BC|MB|NB|NL|NS|NT|NU|ON|PE|QC|SK|YT)";
+}};
+dojox.validate.regexp.us={state:function(_1b){
+_1b=(typeof _1b=="object")?_1b:{};
+if(typeof _1b.allowTerritories!="boolean"){
+_1b.allowTerritories=true;
+}
+if(typeof _1b.allowMilitary!="boolean"){
+_1b.allowMilitary=true;
+}
+var _1c="AL|AK|AZ|AR|CA|CO|CT|DE|DC|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|"+"NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY";
+var _1d="AS|FM|GU|MH|MP|PW|PR|VI";
+var _1e="AA|AE|AP";
+if(_1b.allowTerritories){
+_1c+="|"+_1d;
+}
+if(_1b.allowMilitary){
+_1c+="|"+_1e;
+}
+return "("+_1c+")";
+}};
+}
Index: trunk/web/dojo/dojox/color.js
===================================================================
--- trunk/web/dojo/dojox/color.js	(revision 0)
+++ trunk/web/dojo/dojox/color.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.color"]){
+dojo._hasResource["dojox.color"]=true;
+dojo.provide("dojox.color");
+dojo.require("dojox.color._base");
+}
Index: trunk/web/dojo/dojox/drawing/manager/Canvas.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/Canvas.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/Canvas.js	(revision 9)
@@ -0,0 +1,88 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Canvas"]){
+dojo._hasResource["dojox.drawing.manager.Canvas"]=true;
+dojo.provide("dojox.drawing.manager.Canvas");
+(function(){
+dojox.drawing.manager.Canvas=dojox.drawing.util.oo.declare(function(_1){
+dojo.mixin(this,_1);
+var _2=dojo.contentBox(this.srcRefNode);
+this.height=this.parentHeight=_2.h;
+this.width=this.parentWidth=_2.w;
+this.domNode=dojo.create("div",{id:"canvasNode"},this.srcRefNode);
+dojo.style(this.domNode,{width:this.width,height:"auto"});
+dojo.setSelectable(this.domNode,false);
+this.id=this.id||this.util.uid("surface");
+this.gfxSurface=dojox.gfx.createSurface(this.domNode,this.width,this.height);
+this.gfxSurface.whenLoaded(this,function(){
+setTimeout(dojo.hitch(this,function(){
+this.surfaceReady=true;
+if(dojo.isIE){
+}else{
+if(dojox.gfx.renderer=="silverlight"){
+this.id=this.domNode.firstChild.id;
+}else{
+}
+}
+this.underlay=this.gfxSurface.createGroup();
+this.surface=this.gfxSurface.createGroup();
+this.overlay=this.gfxSurface.createGroup();
+this.surface.setTransform({dx:0,dy:0,xx:1,yy:1});
+this.gfxSurface.getDimensions=dojo.hitch(this.gfxSurface,"getDimensions");
+if(_1.callback){
+_1.callback(this.domNode);
+}
+}),500);
+});
+this._mouseHandle=this.mouse.register(this);
+},{zoom:1,useScrollbars:true,baseClass:"drawingCanvas",resize:function(_3,_4){
+this.parentWidth=_3;
+this.parentHeight=_4;
+this.setDimensions(_3,_4);
+},setDimensions:function(_5,_6,_7,_8){
+var sw=this.getScrollWidth();
+this.width=Math.max(_5,this.parentWidth);
+this.height=Math.max(_6,this.parentHeight);
+if(this.height>this.parentHeight){
+this.width-=sw;
+}
+if(this.width>this.parentWidth){
+this.height-=sw;
+}
+this.mouse.resize(this.width,this.height);
+this.gfxSurface.setDimensions(this.width,this.height);
+this.domNode.parentNode.scrollTop=_8||0;
+this.domNode.parentNode.scrollLeft=_7||0;
+if(this.useScrollbars){
+dojo.style(this.domNode.parentNode,{overflowY:this.height>this.parentHeight?"scroll":"hidden",overflowX:this.width>this.parentWidth?"scroll":"hidden"});
+}else{
+dojo.style(this.domNode.parentNode,{overflowY:"hidden",overflowX:"hidden"});
+}
+},setZoom:function(_9){
+this.zoom=_9;
+this.surface.setTransform({xx:_9,yy:_9});
+this.setDimensions(this.width*_9,this.height*_9);
+},onScroll:function(){
+},getScrollOffset:function(){
+return {top:this.domNode.parentNode.scrollTop,left:this.domNode.parentNode.scrollLeft};
+},getScrollWidth:function(){
+var p=dojo.create("div");
+p.innerHTML="<div style=\"width:50px;height:50px;overflow:hidden;position:absolute;top:0;left:-1000px;\"><div style=\"height:100px;\"></div>";
+var _a=p.firstChild;
+dojo.body().appendChild(_a);
+var _b=dojo.contentBox(_a).h;
+dojo.style(_a,"overflow","scroll");
+var _c=_b-dojo.contentBox(_a).h;
+dojo.destroy(_a);
+this.getScrollWidth=function(){
+return _c;
+};
+return _c;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/drawing/manager/keys.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/keys.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/keys.js	(revision 9)
@@ -0,0 +1,154 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.keys"]){
+dojo._hasResource["dojox.drawing.manager.keys"]=true;
+dojo.provide("dojox.drawing.manager.keys");
+(function(){
+var _1=false;
+var _2=true;
+var _3="abcdefghijklmnopqrstuvwxyz";
+dojox.drawing.manager.keys={arrowIncrement:1,arrowShiftIncrement:10,shift:false,ctrl:false,alt:false,cmmd:false,meta:false,onDelete:function(_4){
+},onEsc:function(_5){
+},onEnter:function(_6){
+},onArrow:function(_7){
+},onKeyDown:function(_8){
+},onKeyUp:function(_9){
+},listeners:[],register:function(_a){
+var _b=dojox.drawing.util.uid("listener");
+this.listeners.push({handle:_b,scope:_a.scope||window,callback:_a.callback,keyCode:_a.keyCode});
+},_getLetter:function(_c){
+if(!_c.meta&&_c.keyCode>=65&&_c.keyCode<=90){
+return _3.charAt(_c.keyCode-65);
+}
+return null;
+},_mixin:function(_d){
+_d.meta=this.meta;
+_d.shift=this.shift;
+_d.alt=this.alt;
+_d.cmmd=this.cmmd;
+_d.letter=this._getLetter(_d);
+return _d;
+},editMode:function(_e){
+_1=_e;
+},enable:function(_f){
+_2=_f;
+},scanForFields:function(){
+if(this._fieldCons){
+dojo.forEach(this._fieldCons,dojo.disconnect,dojo);
+}
+this._fieldCons=[];
+dojo.query("input").forEach(function(n){
+var a=dojo.connect(n,"focus",this,function(evt){
+this.enable(false);
+});
+var b=dojo.connect(n,"blur",this,function(evt){
+this.enable(true);
+});
+this._fieldCons.push(a);
+this._fieldCons.push(b);
+},this);
+},init:function(){
+setTimeout(dojo.hitch(this,"scanForFields"),500);
+dojo.connect(document,"blur",this,function(evt){
+this.meta=this.shift=this.ctrl=this.cmmd=this.alt=false;
+});
+dojo.connect(document,"keydown",this,function(evt){
+if(!_2){
+return;
+}
+if(evt.keyCode==16){
+this.shift=true;
+}
+if(evt.keyCode==17){
+this.ctrl=true;
+}
+if(evt.keyCode==18){
+this.alt=true;
+}
+if(evt.keyCode==224){
+this.cmmd=true;
+}
+this.meta=this.shift||this.ctrl||this.cmmd||this.alt;
+if(!_1){
+this.onKeyDown(this._mixin(evt));
+if(evt.keyCode==8||evt.keyCode==46){
+dojo.stopEvent(evt);
+}
+}
+});
+dojo.connect(document,"keyup",this,function(evt){
+if(!_2){
+return;
+}
+var _10=false;
+if(evt.keyCode==16){
+this.shift=false;
+}
+if(evt.keyCode==17){
+this.ctrl=false;
+}
+if(evt.keyCode==18){
+this.alt=false;
+}
+if(evt.keyCode==224){
+this.cmmd=false;
+}
+this.meta=this.shift||this.ctrl||this.cmmd||this.alt;
+!_1&&this.onKeyUp(this._mixin(evt));
+if(evt.keyCode==13){
+console.warn("KEY ENTER");
+this.onEnter(evt);
+_10=true;
+}
+if(evt.keyCode==27){
+this.onEsc(evt);
+_10=true;
+}
+if(evt.keyCode==8||evt.keyCode==46){
+this.onDelete(evt);
+_10=true;
+}
+if(_10&&!_1){
+dojo.stopEvent(evt);
+}
+});
+dojo.connect(document,"keypress",this,function(evt){
+if(!_2){
+return;
+}
+var inc=this.shift?this.arrowIncrement*this.arrowShiftIncrement:this.arrowIncrement;
+var x=0,y=0;
+if(evt.keyCode==32&&!_1){
+dojo.stopEvent(evt);
+}
+if(evt.keyCode==37){
+x=-inc;
+}
+if(evt.keyCode==38){
+y=-inc;
+}
+if(evt.keyCode==39){
+x=inc;
+}
+if(evt.keyCode==40){
+y=inc;
+}
+if(x||y){
+evt.x=x;
+evt.y=y;
+evt.shift=this.shift;
+this.onArrow(evt);
+if(!_1){
+dojo.stopEvent(evt);
+}
+}
+});
+}};
+dojo.addOnLoad(dojox.drawing.manager.keys,"init");
+})();
+}
Index: trunk/web/dojo/dojox/drawing/manager/Anchors.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/Anchors.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/Anchors.js	(revision 9)
@@ -0,0 +1,241 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Anchors"]){
+dojo._hasResource["dojox.drawing.manager.Anchors"]=true;
+dojo.provide("dojox.drawing.manager.Anchors");
+dojox.drawing.manager.Anchors=dojox.drawing.util.oo.declare(function(_1){
+this.mouse=_1.mouse;
+this.undo=_1.undo;
+this.util=_1.util;
+this.drawing=_1.drawing;
+this.items={};
+},{onAddAnchor:function(_2){
+},onReset:function(_3){
+var st=this.util.byId("drawing").stencils;
+st.onDeselect(_3);
+st.onSelect(_3);
+},onRenderStencil:function(){
+for(var nm in this.items){
+dojo.forEach(this.items[nm].anchors,function(a){
+a.shape.moveToFront();
+});
+}
+},onTransformPoint:function(_4){
+var _5=this.items[_4.stencil.id].anchors;
+var _6=this.items[_4.stencil.id].item;
+var _7=[];
+dojo.forEach(_5,function(a,i){
+if(_4.id==a.id||_4.stencil.anchorType!="group"){
+}else{
+if(_4.org.y==a.org.y){
+a.setPoint({dx:0,dy:_4.shape.getTransform().dy-a.shape.getTransform().dy});
+}else{
+if(_4.org.x==a.org.x){
+a.setPoint({dx:_4.shape.getTransform().dx-a.shape.getTransform().dx,dy:0});
+}
+}
+a.shape.moveToFront();
+}
+var mx=a.shape.getTransform();
+_7.push({x:mx.dx+a.org.x,y:mx.dy+a.org.y});
+if(a.point.t){
+_7[_7.length-1].t=a.point.t;
+}
+},this);
+_6.setPoints(_7);
+_6.onTransform(_4);
+this.onRenderStencil();
+},onAnchorUp:function(_8){
+},onAnchorDown:function(_9){
+},onAnchorDrag:function(_a){
+},onChangeStyle:function(_b){
+for(var nm in this.items){
+dojo.forEach(this.items[nm].anchors,function(a){
+a.shape.moveToFront();
+});
+}
+},add:function(_c){
+this.items[_c.id]={item:_c,anchors:[]};
+if(_c.anchorType=="none"){
+return;
+}
+var _d=_c.points;
+dojo.forEach(_d,function(p,i){
+if(p.noAnchor){
+return;
+}
+if(i==0||i==_c.points.length-1){
+}
+var a=new dojox.drawing.manager.Anchor({stencil:_c,point:p,pointIdx:i,mouse:this.mouse,util:this.util});
+this.items[_c.id]._cons=[dojo.connect(a,"onRenderStencil",this,"onRenderStencil"),dojo.connect(a,"reset",this,"onReset"),dojo.connect(a,"onAnchorUp",this,"onAnchorUp"),dojo.connect(a,"onAnchorDown",this,"onAnchorDown"),dojo.connect(a,"onAnchorDrag",this,"onAnchorDrag"),dojo.connect(a,"onTransformPoint",this,"onTransformPoint"),dojo.connect(_c,"onChangeStyle",this,"onChangeStyle")];
+this.items[_c.id].anchors.push(a);
+this.onAddAnchor(a);
+},this);
+if(_c.shortType=="path"){
+var f=_d[0],l=_d[_d.length-1],a=this.items[_c.id].anchors;
+if(f.x==l.x&&f.y==l.y){
+console.warn("LINK ANVHROS",a[0],a[a.length-1]);
+a[0].linkedAnchor=a[a.length-1];
+a[a.length-1].linkedAnchor=a[0];
+}
+}
+if(_c.anchorType=="group"){
+dojo.forEach(this.items[_c.id].anchors,function(_e){
+dojo.forEach(this.items[_c.id].anchors,function(a){
+if(_e.id!=a.id){
+if(_e.org.y==a.org.y){
+_e.x_anchor=a;
+}else{
+if(_e.org.x==a.org.x){
+_e.y_anchor=a;
+}
+}
+}
+},this);
+},this);
+}
+},remove:function(_f){
+if(!this.items[_f.id]){
+return;
+}
+dojo.forEach(this.items[_f.id].anchors,function(a){
+a.destroy();
+});
+dojo.forEach(this.items[_f.id]._cons,dojo.disconnect,dojo);
+this.items[_f.id].anchors=null;
+delete this.items[_f.id];
+}});
+dojox.drawing.manager.Anchor=dojox.drawing.util.oo.declare(function(_10){
+this.defaults=dojox.drawing.defaults.copy();
+this.mouse=_10.mouse;
+this.point=_10.point;
+this.pointIdx=_10.pointIdx;
+this.util=_10.util;
+this.id=_10.id||this.util.uid("anchor");
+this.org=dojo.mixin({},this.point);
+this.stencil=_10.stencil;
+if(this.stencil.anchorPositionCheck){
+this.anchorPositionCheck=dojo.hitch(this.stencil,this.stencil.anchorPositionCheck);
+}
+if(this.stencil.anchorConstrain){
+this.anchorConstrain=dojo.hitch(this.stencil,this.stencil.anchorConstrain);
+}
+this._zCon=dojo.connect(this.mouse,"setZoom",this,"render");
+this.render();
+this.connectMouse();
+},{y_anchor:null,x_anchor:null,render:function(){
+this.shape&&this.shape.removeShape();
+var d=this.defaults.anchors,z=this.mouse.zoom,b=d.width*z,s=d.size*z,p=s/2,_11={width:b,style:d.style,color:d.color,cap:d.cap};
+var _12={x:this.point.x-p,y:this.point.y-p,width:s,height:s};
+this.shape=this.stencil.container.createRect(_12).setStroke(_11).setFill(d.fill);
+this.shape.setTransform({dx:0,dy:0});
+this.util.attr(this,"drawingType","anchor");
+this.util.attr(this,"id",this.id);
+},onRenderStencil:function(_13){
+},onTransformPoint:function(_14){
+},onAnchorDown:function(obj){
+this.selected=obj.id==this.id;
+},onAnchorUp:function(obj){
+this.selected=false;
+this.stencil.onTransformEnd(this);
+},onAnchorDrag:function(obj){
+if(this.selected){
+var mx=this.shape.getTransform();
+var pmx=this.shape.getParent().getParent().getTransform();
+var _15=this.defaults.anchors.marginZero;
+var _16=pmx.dx+this.org.x,_17=pmx.dy+this.org.y,x=obj.x-_16,y=obj.y-_17,s=this.defaults.anchors.minSize;
+var _18,_19,_1a,_1b;
+var chk=this.anchorPositionCheck(x,y,this);
+if(chk.x<0){
+console.warn("X<0 Shift");
+while(this.anchorPositionCheck(x,y,this).x<0){
+this.shape.getParent().getParent().applyTransform({dx:2,dy:0});
+}
+}
+if(chk.y<0){
+console.warn("Y<0 Shift");
+while(this.anchorPositionCheck(x,y,this).y<0){
+this.shape.getParent().getParent().applyTransform({dx:0,dy:2});
+}
+}
+if(this.y_anchor){
+if(this.org.y>this.y_anchor.org.y){
+_1a=this.y_anchor.point.y+s-this.org.y;
+_1b=Infinity;
+if(y<_1a){
+y=_1a;
+}
+}else{
+_1a=-_17+_15;
+_1b=this.y_anchor.point.y-s-this.org.y;
+if(y<_1a){
+y=_1a;
+}else{
+if(y>_1b){
+y=_1b;
+}
+}
+}
+}else{
+_1a=-_17+_15;
+if(y<_1a){
+y=_1a;
+}
+}
+if(this.x_anchor){
+if(this.org.x>this.x_anchor.org.x){
+_18=this.x_anchor.point.x+s-this.org.x;
+_19=Infinity;
+if(x<_18){
+x=_18;
+}
+}else{
+_18=-_16+_15;
+_19=this.x_anchor.point.x-s-this.org.x;
+if(x<_18){
+x=_18;
+}else{
+if(x>_19){
+x=_19;
+}
+}
+}
+}else{
+_18=-_16+_15;
+if(x<_18){
+x=_18;
+}
+}
+var _1c=this.anchorConstrain(x,y);
+if(_1c!=null){
+x=_1c.x;
+y=_1c.y;
+}
+this.shape.setTransform({dx:x,dy:y});
+if(this.linkedAnchor){
+this.linkedAnchor.shape.setTransform({dx:x,dy:y});
+}
+this.onTransformPoint(this);
+}
+},anchorConstrain:function(x,y){
+return null;
+},anchorPositionCheck:function(x,y,_1d){
+return {x:1,y:1};
+},setPoint:function(mx){
+this.shape.applyTransform(mx);
+},connectMouse:function(){
+this._mouseHandle=this.mouse.register(this);
+},disconnectMouse:function(){
+this.mouse.unregister(this._mouseHandle);
+},reset:function(_1e){
+},destroy:function(){
+dojo.disconnect(this._zCon);
+this.disconnectMouse();
+this.shape.removeShape();
+}});
+}
Index: trunk/web/dojo/dojox/drawing/manager/StencilUI.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/StencilUI.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/StencilUI.js	(revision 9)
@@ -0,0 +1,48 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.StencilUI"]){
+dojo._hasResource["dojox.drawing.manager.StencilUI"]=true;
+dojo.provide("dojox.drawing.manager.StencilUI");
+(function(){
+var _1,_2;
+dojox.drawing.manager.StencilUI=dojox.drawing.util.oo.declare(function(_3){
+_1=_3.surface;
+this.canvas=_3.canvas;
+this.defaults=dojox.drawing.defaults.copy();
+this.mouse=_3.mouse;
+this.keys=_3.keys;
+this._mouseHandle=this.mouse.register(this);
+this.stencils={};
+},{register:function(_4){
+this.stencils[_4.id]=_4;
+return _4;
+},onUiDown:function(_5){
+if(!this._isStencil(_5)){
+return;
+}
+this.stencils[_5.id].onDown(_5);
+},onUiUp:function(_6){
+if(!this._isStencil(_6)){
+return;
+}
+this.stencils[_6.id].onUp(_6);
+},onOver:function(_7){
+if(!this._isStencil(_7)){
+return;
+}
+this.stencils[_7.id].onOver(_7);
+},onOut:function(_8){
+if(!this._isStencil(_8)){
+return;
+}
+this.stencils[_8.id].onOut(_8);
+},_isStencil:function(_9){
+return !!_9.id&&!!this.stencils[_9.id]&&this.stencils[_9.id].type=="drawing.library.UI.Button";
+}});
+})();
+}
Index: trunk/web/dojo/dojox/drawing/manager/Stencil.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/Stencil.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/Stencil.js	(revision 9)
@@ -0,0 +1,317 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Stencil"]){
+dojo._hasResource["dojox.drawing.manager.Stencil"]=true;
+dojo.provide("dojox.drawing.manager.Stencil");
+(function(){
+var _1,_2;
+dojox.drawing.manager.Stencil=dojox.drawing.util.oo.declare(function(_3){
+_1=_3.surface;
+this.canvas=_3.canvas;
+this.defaults=dojox.drawing.defaults.copy();
+this.undo=_3.undo;
+this.mouse=_3.mouse;
+this.keys=_3.keys;
+this.anchors=_3.anchors;
+this.stencils={};
+this.selectedStencils={};
+this._mouseHandle=this.mouse.register(this);
+dojo.connect(this.keys,"onArrow",this,"onArrow");
+dojo.connect(this.keys,"onEsc",this,"deselect");
+dojo.connect(this.keys,"onDelete",this,"onDelete");
+},{_dragBegun:false,_wasDragged:false,_secondClick:false,_isBusy:false,register:function(_4){
+if(_4.isText&&!_4.editMode&&_4.deleteEmptyCreate&&!_4.getText()){
+console.warn("EMPTY CREATE DELETE",_4);
+_4.destroy();
+return false;
+}
+this.stencils[_4.id]=_4;
+if(_4.execText){
+if(_4._text&&!_4.editMode){
+this.selectItem(_4);
+}
+_4.connect("execText",this,function(){
+if(_4.isText&&_4.deleteEmptyModify&&!_4.getText()){
+console.warn("EMPTY MOD DELETE",_4);
+this.deleteItem(_4);
+}else{
+if(_4.selectOnExec){
+this.selectItem(_4);
+}
+}
+});
+}
+_4.connect("deselect",this,function(){
+if(!this._isBusy&&this.isSelected(_4)){
+this.deselectItem(_4);
+}
+});
+_4.connect("select",this,function(){
+if(!this._isBusy&&!this.isSelected(_4)){
+this.selectItem(_4);
+}
+});
+return _4;
+},unregister:function(_5){
+if(_5){
+_5.selected&&this.onDeselect(_5);
+delete this.stencils[_5.id];
+}
+},onArrow:function(_6){
+if(this.hasSelected()){
+this.saveThrottledState();
+this.group.applyTransform({dx:_6.x,dy:_6.y});
+}
+},_throttleVrl:null,_throttle:false,throttleTime:400,_lastmxx:-1,_lastmxy:-1,saveMoveState:function(){
+var mx=this.group.getTransform();
+if(mx.dx==this._lastmxx&&mx.dy==this._lastmxy){
+return;
+}
+this._lastmxx=mx.dx;
+this._lastmxy=mx.dy;
+this.undo.add({before:dojo.hitch(this.group,"setTransform",mx)});
+},saveThrottledState:function(){
+clearTimeout(this._throttleVrl);
+clearInterval(this._throttleVrl);
+this._throttleVrl=setTimeout(dojo.hitch(this,function(){
+this._throttle=false;
+this.saveMoveState();
+}),this.throttleTime);
+if(this._throttle){
+return;
+}
+this._throttle=true;
+this.saveMoveState();
+},unDelete:function(_7){
+for(var s in _7){
+_7[s].render();
+this.onSelect(_7[s]);
+}
+},onDelete:function(_8){
+if(_8!==true){
+this.undo.add({before:dojo.hitch(this,"unDelete",this.selectedStencils),after:dojo.hitch(this,"onDelete",true)});
+}
+this.withSelected(function(m){
+this.anchors.remove(m);
+var id=m.id;
+m.destroy();
+delete this.stencils[id];
+});
+this.selectedStencils={};
+},deleteItem:function(_9){
+if(this.hasSelected()){
+var _a=[];
+for(var m in this.selectedStencils){
+if(this.selectedStencils.id==_9.id){
+if(this.hasSelected()==1){
+this.onDelete();
+return;
+}
+}else{
+_a.push(this.selectedStencils.id);
+}
+}
+this.deselect();
+this.selectItem(_9);
+this.onDelete();
+dojo.forEach(_a,function(id){
+this.selectItem(id);
+},this);
+}else{
+this.selectItem(_9);
+this.onDelete();
+}
+},removeAll:function(){
+this.selectAll();
+this._isBusy=true;
+this.onDelete();
+this.stencils={};
+this._isBusy=false;
+},setSelectionGroup:function(){
+this.withSelected(function(m){
+this.onDeselect(m,true);
+});
+if(this.group){
+_1.remove(this.group);
+this.group.removeShape();
+}
+this.group=_1.createGroup();
+this.group.setTransform({dx:0,dy:0});
+this.withSelected(function(m){
+this.group.add(m.container);
+m.select();
+});
+},setConstraint:function(){
+var t=Infinity,l=Infinity;
+this.withSelected(function(m){
+var o=m.getBounds();
+t=Math.min(o.y1,t);
+l=Math.min(o.x1,l);
+});
+this.constrain={l:-l,t:-t};
+},onDeselect:function(_b,_c){
+if(!_c){
+delete this.selectedStencils[_b.id];
+}
+this.anchors.remove(_b);
+_1.add(_b.container);
+_b.selected&&_b.deselect();
+_b.applyTransform(this.group.getTransform());
+},deselectItem:function(_d){
+this.onDeselect(_d);
+},deselect:function(){
+this.withSelected(function(m){
+this.onDeselect(m);
+});
+this._dragBegun=false;
+this._wasDragged=false;
+},onSelect:function(_e){
+if(!_e){
+console.error("null stencil is not selected:",this.stencils);
+}
+if(this.selectedStencils[_e.id]){
+return;
+}
+this.selectedStencils[_e.id]=_e;
+this.group.add(_e.container);
+_e.select();
+if(this.hasSelected()==1){
+this.anchors.add(_e,this.group);
+}
+},selectAll:function(){
+this._isBusy=true;
+for(var m in this.stencils){
+this.selectItem(m);
+}
+this._isBusy=false;
+},selectItem:function(_f){
+var id=typeof (_f)=="string"?_f:_f.id;
+var _10=this.stencils[id];
+this.setSelectionGroup();
+this.onSelect(_10);
+this.group.moveToFront();
+this.setConstraint();
+},onStencilDoubleClick:function(obj){
+if(this.selectedStencils[obj.id]){
+if(this.selectedStencils[obj.id].edit){
+var m=this.selectedStencils[obj.id];
+m.editMode=true;
+this.deselect();
+m.edit();
+}
+}
+},onAnchorUp:function(){
+this.setConstraint();
+},onStencilDown:function(obj,evt){
+if(!this.stencils[obj.id]){
+return;
+}
+this._isBusy=true;
+if(this.selectedStencils[obj.id]&&this.keys.meta){
+if(dojo.isMac&&this.keys.cmmd){
+}
+this.onDeselect(this.selectedStencils[obj.id]);
+if(this.hasSelected()==1){
+this.withSelected(function(m){
+this.anchors.add(m,this.group);
+});
+}
+this.group.moveToFront();
+this.setConstraint();
+return;
+}else{
+if(this.selectedStencils[obj.id]){
+var mx=this.group.getTransform();
+this._offx=obj.x-mx.dx;
+this._offy=obj.y-mx.dy;
+return;
+}else{
+if(!this.keys.meta){
+this.deselect();
+}else{
+}
+}
+}
+this.selectItem(obj.id);
+mx=this.group.getTransform();
+this._offx=obj.x-mx.dx;
+this._offy=obj.y-mx.dx;
+this.orgx=obj.x;
+this.orgy=obj.y;
+this._isBusy=false;
+this.undo.add({before:function(){
+},after:function(){
+}});
+},onStencilUp:function(obj){
+},onStencilDrag:function(obj){
+if(!this._dragBegun){
+this.onBeginDrag(obj);
+this._dragBegun=true;
+}else{
+this.saveThrottledState();
+var x=obj.x-obj.last.x,y=obj.y-obj.last.y,c=this.constrain,mz=this.defaults.anchors.marginZero;
+x=obj.x-this._offx;
+y=obj.y-this._offy;
+if(x<c.l+mz){
+x=c.l+mz;
+}
+if(y<c.t+mz){
+y=c.t+mz;
+}
+this.group.setTransform({dx:x,dy:y});
+}
+},onDragEnd:function(obj){
+this._dragBegun=false;
+},onBeginDrag:function(obj){
+this._wasDragged=true;
+},onDown:function(obj){
+this.deselect();
+},onStencilOver:function(obj){
+dojo.style(obj.id,"cursor","move");
+},onStencilOut:function(obj){
+dojo.style(obj.id,"cursor","crosshair");
+},exporter:function(){
+var _11=[];
+for(var m in this.stencils){
+this.stencils[m].enabled&&_11.push(this.stencils[m].exporter());
+}
+return _11;
+},listStencils:function(){
+return this.stencils;
+},toSelected:function(_12){
+var _13=Array.prototype.slice.call(arguments).splice(1);
+for(var m in this.selectedStencils){
+var _14=this.selectedStencils[m];
+_14[_12].apply(_14,_13);
+}
+},withSelected:function(_15){
+var f=dojo.hitch(this,_15);
+for(var m in this.selectedStencils){
+f(this.selectedStencils[m]);
+}
+},withUnselected:function(_16){
+var f=dojo.hitch(this,_16);
+for(var m in this.stencils){
+!this.stencils[m].selected&&f(this.stencils[m]);
+}
+},withStencils:function(_17){
+var f=dojo.hitch(this,_17);
+for(var m in this.stencils){
+f(this.stencils[m]);
+}
+},hasSelected:function(){
+var ln=0;
+for(var m in this.selectedStencils){
+ln++;
+}
+return ln;
+},isSelected:function(_18){
+return !!this.selectedStencils[_18.id];
+}});
+})();
+}
Index: trunk/web/dojo/dojox/drawing/manager/Undo.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/Undo.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/Undo.js	(revision 9)
@@ -0,0 +1,51 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Undo"]){
+dojo._hasResource["dojox.drawing.manager.Undo"]=true;
+dojo.provide("dojox.drawing.manager.Undo");
+dojox.drawing.manager.Undo=dojox.drawing.util.oo.declare(function(_1){
+this.keys=_1.keys;
+this.undostack=[];
+this.redostack=[];
+dojo.connect(this.keys,"onKeyDown",this,"onKeyDown");
+},{onKeyDown:function(_2){
+if(!_2.cmmd){
+return;
+}
+if(_2.keyCode==90&&!_2.shift){
+this.undo();
+}else{
+if((_2.keyCode==90&&_2.shift)||_2.keyCode==89){
+this.redo();
+}
+}
+},add:function(_3){
+_3.args=dojo.mixin({},_3.args);
+this.undostack.push(_3);
+},apply:function(_4,_5,_6){
+dojo.hitch(_4,_5)(_6);
+},undo:function(){
+var o=this.undostack.pop();
+if(!o){
+return;
+}
+o.before();
+this.redostack.push(o);
+},redo:function(){
+var o=this.redostack.pop();
+if(!o){
+return;
+}
+if(o.after){
+o.after();
+}else{
+o.before();
+}
+this.undostack.push(o);
+}});
+}
Index: trunk/web/dojo/dojox/drawing/manager/_registry.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/_registry.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/_registry.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager._registry"]){
+dojo._hasResource["dojox.drawing.manager._registry"]=true;
+dojo.provide("dojox.drawing.manager._registry");
+(function(){
+var _1={tool:{},stencil:{},drawing:{},plugin:{},button:{}};
+dojox.drawing.register=function(_2,_3){
+if(_3=="drawing"){
+_1.drawing[_2.id]=_2;
+}else{
+if(_3=="tool"){
+_1.tool[_2.name]=_2;
+}else{
+if(_3=="stencil"){
+_1.stencil[_2.name]=_2;
+}else{
+if(_3=="plugin"){
+_1.plugin[_2.name]=_2;
+}else{
+if(_3=="button"){
+_1.button[_2.toolType]=_2;
+}
+}
+}
+}
+}
+};
+dojox.drawing.getRegistered=function(_4,id){
+return id?_1[_4][id]:_1[_4];
+};
+})();
+}
Index: trunk/web/dojo/dojox/drawing/manager/Mouse.js
===================================================================
--- trunk/web/dojo/dojox/drawing/manager/Mouse.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/manager/Mouse.js	(revision 9)
@@ -0,0 +1,213 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.manager.Mouse"]){
+dojo._hasResource["dojox.drawing.manager.Mouse"]=true;
+dojo.provide("dojox.drawing.manager.Mouse");
+dojox.drawing.manager.Mouse=dojox.drawing.util.oo.declare(function(_1){
+this.util=_1.util;
+this.keys=_1.keys;
+this.id=_1.id||this.util.uid("mouse");
+this.currentNodeId="";
+this.registered={};
+},{doublClickSpeed:400,_lastx:0,_lasty:0,__reg:0,_downOnCanvas:false,init:function(_2){
+this.container=_2;
+this.setCanvas();
+var c;
+var _3=false;
+dojo.connect(this.container,"rightclick",this,function(_4){
+console.warn("RIGHTCLICK");
+});
+dojo.connect(document.body,"mousedown",this,function(_5){
+});
+dojo.connect(this.container,"mousedown",this,function(_6){
+this.down(_6);
+_3=true;
+c=dojo.connect(document,"mousemove",this,"drag");
+});
+dojo.connect(document,"mouseup",this,function(_7){
+dojo.disconnect(c);
+_3=false;
+this.up(_7);
+});
+dojo.connect(document,"mousemove",this,function(_8){
+if(!_3){
+this.move(_8);
+}
+});
+dojo.connect(this.keys,"onEsc",this,function(_9){
+this._dragged=false;
+});
+},setCanvas:function(){
+var _a=dojo.coords(this.container.parentNode);
+this.origin=dojo.clone(_a);
+},scrollOffset:function(){
+return {top:this.container.parentNode.scrollTop,left:this.container.parentNode.scrollLeft};
+},resize:function(_b,_c){
+if(this.origin){
+this.origin.w=_b;
+this.origin.h=_c;
+}
+},register:function(_d){
+var _e=_d.id||"reg_"+(this.__reg++);
+if(!this.registered[_e]){
+this.registered[_e]=_d;
+}
+return _e;
+},unregister:function(_f){
+if(!this.registered[_f]){
+return;
+}
+delete this.registered[_f];
+},_broadcastEvent:function(_10,obj){
+for(var nm in this.registered){
+if(this.registered[nm][_10]){
+this.registered[nm][_10](obj);
+}
+}
+},onDown:function(obj){
+this._broadcastEvent(this.eventName("down"),obj);
+},onDrag:function(obj){
+var nm=this.eventName("drag");
+if(this._selected&&nm=="onDrag"){
+nm="onStencilDrag";
+}
+this._broadcastEvent(nm,obj);
+},onMove:function(obj){
+this._broadcastEvent("onMove",obj);
+},overName:function(obj,evt){
+var nm=obj.id.split(".");
+evt=evt.charAt(0).toUpperCase()+evt.substring(1);
+if(nm[0]=="dojox"&&(dojox.drawing.defaults.clickable||!dojox.drawing.defaults.clickMode)){
+return "onStencil"+evt;
+}else{
+return "on"+evt;
+}
+},onOver:function(obj){
+this._broadcastEvent(this.overName(obj,"over"),obj);
+},onOut:function(obj){
+this._broadcastEvent(this.overName(obj,"out"),obj);
+},onUp:function(obj){
+var nm=this.eventName("up");
+if(nm=="onStencilUp"){
+this._selected=true;
+}else{
+if(this._selected&&nm=="onUp"){
+nm="onStencilUp";
+this._selected=false;
+}
+}
+this._broadcastEvent(nm,obj);
+if(dojox.gfx.renderer=="silverlight"){
+return;
+}
+this._clickTime=new Date().getTime();
+if(this._lastClickTime){
+if(this._clickTime-this._lastClickTime<this.doublClickSpeed){
+var dnm=this.eventName("doubleClick");
+console.warn("DOUBLE CLICK",dnm,obj);
+this._broadcastEvent(dnm,obj);
+}else{
+}
+}
+this._lastClickTime=this._clickTime;
+},zoom:1,setZoom:function(_11){
+this.zoom=1/_11;
+},setEventMode:function(_12){
+this.mode=_12?"on"+_12.charAt(0).toUpperCase()+_12.substring(1):"";
+},eventName:function(_13){
+_13=_13.charAt(0).toUpperCase()+_13.substring(1);
+if(this.mode){
+if(this.mode=="onPathEdit"){
+return "on"+_13;
+}
+if(this.mode=="onUI"){
+}
+return this.mode+_13;
+}else{
+if(!dojox.drawing.defaults.clickable&&dojox.drawing.defaults.clickMode){
+return "on"+_13;
+}
+var dt=!this.drawingType||this.drawingType=="surface"||this.drawingType=="canvas"?"":this.drawingType;
+var t=!dt?"":dt.charAt(0).toUpperCase()+dt.substring(1);
+return "on"+t+_13;
+}
+},up:function(evt){
+this.onUp(this.create(evt));
+},down:function(evt){
+evt.preventDefault();
+dojo.stopEvent(evt);
+this._downOnCanvas=true;
+var sc=this.scrollOffset();
+var dim=this._getXY(evt);
+this._lastpagex=dim.x;
+this._lastpagey=dim.y;
+var o=this.origin;
+var x=dim.x-o.x+sc.left;
+var y=dim.y-o.y+sc.top;
+var _14=x>=0&&y>=0&&x<=o.w&&y<=o.h;
+x*=this.zoom;
+y*=this.zoom;
+o.startx=x;
+o.starty=y;
+this._lastx=x;
+this._lasty=y;
+this.drawingType=this.util.attr(evt,"drawingType")||"";
+var id=this._getId(evt);
+this.onDown({mid:this.id,x:x,y:y,pageX:dim.x,pageY:dim.y,withinCanvas:_14,id:id});
+},over:function(obj){
+this.onOver(obj);
+},out:function(obj){
+this.onOut(obj);
+},move:function(evt){
+var obj=this.create(evt);
+if(this.id=="MUI"){
+}
+if(obj.id!=this.currentNodeId){
+var _15={};
+for(var nm in obj){
+_15[nm]=obj[nm];
+}
+_15.id=this.currentNodeId;
+this.currentNodeId&&this.out(_15);
+obj.id&&this.over(obj);
+this.currentNodeId=obj.id;
+}
+this.onMove(obj);
+},drag:function(evt){
+this.onDrag(this.create(evt,true));
+},create:function(evt,_16){
+var sc=this.scrollOffset();
+var dim=this._getXY(evt);
+var _17=dim.x;
+var _18=dim.y;
+var o=this.origin;
+var x=dim.x-o.x+sc.left;
+var y=dim.y-o.y+sc.top;
+var _19=x>=0&&y>=0&&x<=o.w&&y<=o.h;
+x*=this.zoom;
+y*=this.zoom;
+var id=_19?this._getId(evt,_16):"";
+var ret={mid:this.id,x:x,y:y,pageX:dim.x,pageY:dim.y,page:{x:dim.x,y:dim.y},orgX:o.x,orgY:o.y,last:{x:this._lastx,y:this._lasty},start:{x:this.origin.startx,y:this.origin.starty},move:{x:_17-this._lastpagex,y:_18-this._lastpagey},scroll:sc,id:id,withinCanvas:_19};
+this._lastx=x;
+this._lasty=y;
+this._lastpagex=_17;
+this._lastpagey=_18;
+dojo.stopEvent(evt);
+return ret;
+},_getId:function(evt,_1a){
+return this.util.attr(evt,"id",null,_1a);
+},_getXY:function(evt){
+return {x:evt.pageX,y:evt.pageY};
+},setCursor:function(_1b,_1c){
+if(!_1c){
+dojo.style(this.container,"cursor",_1b);
+}else{
+dojo.style(_1c,"cursor",_1b);
+}
+}});
+}
Index: trunk/web/dojo/dojox/drawing/resources/drawing.css
===================================================================
--- trunk/web/dojo/dojox/drawing/resources/drawing.css	(revision 0)
+++ trunk/web/dojo/dojox/drawing/resources/drawing.css	(revision 9)
@@ -0,0 +1,36 @@
+html, body{
+	width:100%;
+	height:100%;
+	font-family:sans-serif;
+}
+.textAnnotation{
+	position:absolute;
+	border:1px solid #ccc;
+	background-color:#ffff00;
+	color:#0000ff;
+	padding:3px;
+	font-family:sans-serif;
+	font-size:12px;
+	margin-top:-10px;
+	z-index:501;
+}
+#conEdit{
+	border:0;
+	
+	padding:3px;
+	margin:0;
+}
+.drawingTooltip{
+	font-family:sans-serif;
+	font-family:sans-serif;
+	font-weight:normal;
+	padding:5px;
+}
+.drawingTipTitle{
+	font-size:12px;
+	font-weight:bold;
+}
+.drawingTipDesc{
+	font-size:11px;
+	padding-left:10px;
+}
Index: trunk/web/dojo/dojox/drawing/resources/images/tool_sprites.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/drawing/resources/images/tool_sprites.png
===================================================================
--- trunk/web/dojo/dojox/drawing/resources/images/tool_sprites.png	(revision 0)
+++ trunk/web/dojo/dojox/drawing/resources/images/tool_sprites.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/drawing/resources/images/tool_sprites.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/drawing/resources/images/tool_icons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/drawing/resources/images/tool_icons.png
===================================================================
--- trunk/web/dojo/dojox/drawing/resources/images/tool_icons.png	(revision 0)
+++ trunk/web/dojo/dojox/drawing/resources/images/tool_icons.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/drawing/resources/images/tool_icons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/drawing/resources/toolbar.css
===================================================================
--- trunk/web/dojo/dojox/drawing/resources/toolbar.css	(revision 0)
+++ trunk/web/dojo/dojox/drawing/resources/toolbar.css	(revision 9)
@@ -0,0 +1,179 @@
+
+.horizontal.drawingToolbar{
+	position:relative;
+	width:auto;
+	height:32px;
+	padding:5px;
+	left:5px;
+}
+.vertical.drawingToolbar{
+	width:32px;
+	padding:5px;
+	position:absolute;
+	left:5px;
+	margin-top:5px;
+	background:#fff;
+}
+.drawingToolbar .drawingButton{
+	position:relative;
+	padding:0;
+	width:32px;
+	height:32px;
+	background-image:url("images/tool_sprites.png");
+	background-position:0px 0px;
+	border:0;
+	cursor:pointer;
+}
+.horizontal.drawingToolbar .drawingButton{
+	float:left;
+	margin-right:5px;
+}
+.dj_ie6 .drawingToolbar .drawingButton {
+	filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='images/tool_sprites.png');	
+}
+.vertical.drawingToolbar .drawingButton{
+	margin-bottom:5px;
+	margin-right:0px;
+}
+.drawingToolbar .drawingButton.hover{
+	background-position:-32px 0px;
+}
+.drawingToolbar .drawingButton.active{
+	background-position:-64px 0px;
+}
+.drawingToolbar .drawingButton.selected{
+	background-position:-96px 0px;
+}
+.drawingToolbar .drawingButton.selected:hover{}
+.drawingToolbar.vertical{}
+.drawingToolbar .drawingButton .icon{
+	background-image:url("images/tool_icons.png");
+	width:32px;
+	height:64px;
+	position:absolute;
+	left:0px;
+	top:0px;
+	margin:0;
+	padding:0;
+	clip: rect(0px 32px 32px 0px);
+}
+.drawingToolbar .drawingButton.selected .icon{
+	
+	top:-32px;
+	clip: rect(32px 32px 64px 0px);
+}
+.drawingToolbar .drawingButton .icon.iconLine{
+	background-position:-64px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconRect{
+	background-position: 0px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconEllipse{
+	background-position:-32px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconText{
+	background-position:-224px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconArrow{
+	background-position:-96px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconVector{
+	background-position:-128px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconAxes{
+	background-position:-160px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconPan{
+	background-position:-192px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconEq{
+	background-position:-351px 0px;
+}
+.dj_ie6 .drawingToolbar .drawingButton .icon {
+	
+	filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='images/tool_icons.png');
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboTop{
+	background-position:-128px 0px;
+	margin:0;
+	margin-top:10px;
+	border-bottom:1px solid #d6d6d6;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboTop.hover{
+	background-position:-160px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboTop.active{
+	background-position:-192px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboMid{
+	background-position:-384px 0px;
+	border-style:solid;
+	border-width:1px;
+	border-color:#fff #cccccc #d6d6d6 #cccccc;
+	height:24px;
+	width:30px;
+	margin:0;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboMid.hover,
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboMid.hover{
+	background-position:-416px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboMid.active,
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboMid.active{
+	background-position:-448px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboBot{
+	background-position:-256px 0px;
+	border-top:1px solid #fff;
+	margin:0;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboBot.hover{
+	background-position:-288px 0px;
+}
+.drawingToolbar.vertical .toolCombo .drawingButton.toolComboBot.active{
+	background-position:-320px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboTop{
+	background-position:-512px 0px;
+	margin:0;
+	margin-left:10px;
+	border:0px;
+	border-right:1px solid #d6d6d6;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboTop.hover{
+	background-position:-544px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboTop.active{
+	background-position:-576px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboMid{
+	background-position:-384px 0px;
+	border-style:solid;
+	border-width:1px;
+	border-color:#cccccc #d6d6d6 #cccccc #fff;
+	height:30px;
+	width:31px;
+	margin:0;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboBot{
+	background-position:-640px 0px;
+	border-left:1px solid #fff;
+	margin:0;
+	margin-top:-1px;
+	margin-right:-1px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboBot.hover{
+	background-position:-673px 0px;
+}
+.drawingToolbar.horizontal .toolCombo .drawingButton.toolComboBot.active{
+	background-position:-704px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconZoomIn{
+	background-position:-256px 0px;
+}
+.drawingToolbar .drawingButton .icon.iconZoom100{
+	background-position:-320px -4px;
+}
+.drawingToolbar .drawingButton .icon.iconZoomOut{
+	background-position:-288px 0px;
+}
Index: trunk/web/dojo/dojox/drawing/resources/CrazyTruck.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/drawing/resources/CrazyTruck.jpg
===================================================================
--- trunk/web/dojo/dojox/drawing/resources/CrazyTruck.jpg	(revision 0)
+++ trunk/web/dojo/dojox/drawing/resources/CrazyTruck.jpg	(revision 9)

Property changes on: trunk/web/dojo/dojox/drawing/resources/CrazyTruck.jpg
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/drawing/README
===================================================================
--- trunk/web/dojo/dojox/drawing/README	(revision 0)
+++ trunk/web/dojo/dojox/drawing/README	(revision 9)
@@ -0,0 +1,36 @@
+-------------------------------------------------------------------------------
+Drawing
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: August 22, 2009
+-------------------------------------------------------------------------------
+Project state: alpha
+	The code is very well tested with relatively few bugs. But it is also in a
+	state where APIs and methods can still change.
+-------------------------------------------------------------------------------
+Project author
+	Mike Wilcox anm8tr AT yahoo.com
+-------------------------------------------------------------------------------
+Project description
+
+Drawing is a project that sits on top of DojoX GFX and uses SVG and VML vector
+graphics to draw and display.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo.gfx
+-------------------------------------------------------------------------------
+Documentation
+
+http://docs.dojocampus.org/dojox/drawing
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/dojo/dojox/trunk/drawing.js
+http://svn.dojotoolkit.org/dojo/dojox/trunk/drawing/*
+
+Install into the following directory structure:
+/dojox/drawing/
+
+...which should be at the same level as your Dojo checkout.
Index: trunk/web/dojo/dojox/drawing/annotations/Angle.js
===================================================================
--- trunk/web/dojo/dojox/drawing/annotations/Angle.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/annotations/Angle.js	(revision 9)
@@ -0,0 +1,61 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.Angle"]){
+dojo._hasResource["dojox.drawing.annotations.Angle"]=true;
+dojo.provide("dojox.drawing.annotations.Angle");
+dojox.drawing.annotations.Angle=dojox.drawing.util.oo.declare(function(_1){
+this.stencil=_1.stencil;
+this.util=_1.stencil.util;
+this.mouse=_1.stencil.mouse;
+this.stencil.connectMult([["onDrag",this,"showAngle"],["onUp",this,"hideAngle"],["onTransformBegin",this,"showAngle"],["onTransform",this,"showAngle"],["onTransformEnd",this,"hideAngle"]]);
+},{type:"dojox.drawing.tools.custom",angle:0,showAngle:function(){
+if(!this.stencil.selected&&this.stencil.created){
+return;
+}
+if(this.stencil.getRadius()<this.stencil.minimumSize){
+this.hideAngle();
+return;
+}
+var _2=this.getAngleNode();
+var d=this.stencil.pointsToData();
+var pt=dojox.drawing.util.positioning.angle({x:d.x1,y:d.y1},{x:d.x2,y:d.y2});
+var sc=this.mouse.scrollOffset();
+var mx=this.stencil.getTransform();
+var dx=mx.dx/this.mouse.zoom;
+var dy=mx.dy/this.mouse.zoom;
+pt.x/=this.mouse.zoom;
+pt.y/=this.mouse.zoom;
+var x=this.stencil._offX+pt.x-sc.left+dx;
+var y=this.stencil._offY+pt.y-sc.top+dy;
+dojo.style(_2,{left:x+"px",top:y+"px",align:pt.align});
+var _3=this.stencil.getAngle();
+if(this.stencil.style.zAxis&&this.stencil.shortType=="vector"){
+_2.innerHTML=this.stencil.data.cosphi>0?"out of":"into";
+}else{
+if(this.stencil.shortType=="line"){
+_2.innerHTML=this.stencil.style.zAxis?"out of":Math.ceil(_3%180);
+}else{
+_2.innerHTML=Math.ceil(_3);
+}
+}
+},getAngleNode:function(){
+if(!this._angleNode){
+this._angleNode=dojo.create("span",null,dojo.body());
+dojo.addClass(this._angleNode,"textAnnotation");
+dojo.style(this._angleNode,"opacity",1);
+}
+return this._angleNode;
+},hideAngle:function(){
+if(this._angleNode&&dojo.style(this._angleNode,"opacity")>0.9){
+dojo.fadeOut({node:this._angleNode,duration:500,onEnd:function(_4){
+dojo.destroy(_4);
+}}).play();
+this._angleNode=null;
+}
+}});
+}
Index: trunk/web/dojo/dojox/drawing/annotations/Arrow.js
===================================================================
--- trunk/web/dojo/dojox/drawing/annotations/Arrow.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/annotations/Arrow.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.Arrow"]){
+dojo._hasResource["dojox.drawing.annotations.Arrow"]=true;
+dojo.provide("dojox.drawing.annotations.Arrow");
+dojo.require("dojox.drawing.stencil.Path");
+dojox.drawing.annotations.Arrow=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(_1){
+this.stencil.connectMult([[this.stencil,"select",this,"select"],[this.stencil,"deselect",this,"deselect"],[this.stencil,"render",this,"render"],[this.stencil,"onDelete",this,"destroy"]]);
+this.connect("onBeforeRender",this,function(){
+var o=this.stencil.points[this.idx1];
+var c=this.stencil.points[this.idx2];
+if(this.stencil.getRadius()>=this.minimumSize){
+this.points=this.arrowHead(c.x,c.y,o.x,o.y,this.style);
+}else{
+this.points=[];
+}
+});
+},{idx1:0,idx2:1,subShape:true,minimumSize:30,arrowHead:function(x1,y1,x2,y2,_2){
+var _3={start:{x:x1,y:y1},x:x2,y:y2};
+var _4=this.util.angle(_3);
+var _5=this.util.length(_3);
+var al=_2.arrows.length;
+var aw=_2.arrows.width/2;
+if(_5<al){
+al=_5/2;
+}
+var p1=this.util.pointOnCircle(x2,y2,-al,_4-aw);
+var p2=this.util.pointOnCircle(x2,y2,-al,_4+aw);
+return [{x:x2,y:y2},p1,p2];
+}});
+}
Index: trunk/web/dojo/dojox/drawing/annotations/BoxShadow.js
===================================================================
--- trunk/web/dojo/dojox/drawing/annotations/BoxShadow.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/annotations/BoxShadow.js	(revision 9)
@@ -0,0 +1,185 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.BoxShadow"]){
+dojo._hasResource["dojox.drawing.annotations.BoxShadow"]=true;
+dojo.provide("dojox.drawing.annotations.BoxShadow");
+dojox.drawing.annotations.BoxShadow=dojox.drawing.util.oo.declare(function(_1){
+this.stencil=_1.stencil;
+this.util=_1.stencil.util;
+this.mouse=_1.stencil.mouse;
+this.style=_1.stencil.style;
+var _2={size:6,mult:4,alpha:0.05,place:"BR",color:"#646464"};
+delete _1.stencil;
+this.options=dojo.mixin(_2,_1);
+this.options.color=new dojo.Color(this.options.color);
+this.options.color.a=this.options.alpha;
+switch(this.stencil.shortType){
+case "image":
+case "rect":
+this.method="createForRect";
+break;
+case "ellipse":
+this.method="createForEllipse";
+break;
+case "line":
+this.method="createForLine";
+break;
+case "path":
+this.method="createForPath";
+break;
+case "vector":
+this.method="createForZArrow";
+break;
+default:
+console.warn("A shadow cannot be made for Stencil type ",this.stencil.type);
+}
+if(this.method){
+this.render();
+this.stencil.connectMult([[this.stencil,"onTransform",this,"onTransform"],this.method=="createForZArrow"?[this.stencil,"render",this,"render"]:[this.stencil,"render",this,"onRender"],[this.stencil,"onDelete",this,"destroy"]]);
+}
+},{showing:true,render:function(){
+if(this.container){
+this.container.removeShape();
+}
+this.container=this.stencil.container.createGroup();
+this.container.moveToBack();
+var o=this.options,_3=o.size,_4=o.mult,d=this.method=="createForPath"?this.stencil.points:this.stencil.data,r=d.r||1,p=o.place,c=o.color;
+this[this.method](o,_3,_4,d,r,p,c);
+},hide:function(){
+if(this.showing){
+this.showing=false;
+this.container.removeShape();
+}
+},show:function(){
+if(!this.showing){
+this.showing=true;
+this.stencil.container.add(this.container);
+}
+},createForPath:function(o,_5,_6,_7,r,p,c){
+var sh=_5*_6/4,_8=/B/.test(p)?sh:/T/.test(p)?sh*-1:0,_9=/R/.test(p)?sh:/L/.test(p)?sh*-1:0;
+var _a=true;
+for(var i=1;i<=_5;i++){
+var _b=i*_6;
+if(dojox.gfx.renderer=="svg"){
+var _c=[];
+dojo.forEach(_7,function(o,i){
+if(i==0){
+_c.push("M "+(o.x+_9)+" "+(o.y+_8));
+}else{
+var _d=o.t||"L ";
+_c.push(_d+(o.x+_9)+" "+(o.y+_8));
+}
+},this);
+if(_a){
+_c.push("Z");
+}
+this.container.createPath(_c.join(", ")).setStroke({width:_b,color:c,cap:"round"});
+}else{
+var _e=this.container.createPath({}).setStroke({width:_b,color:c,cap:"round"});
+dojo.forEach(this.points,function(o,i){
+if(i==0||o.t=="M"){
+_e.moveTo(o.x+_9,o.y+_8);
+}else{
+if(o.t=="Z"){
+_a&&_e.closePath();
+}else{
+_e.lineTo(o.x+_9,o.y+_8);
+}
+}
+},this);
+_a&&_e.closePath();
+}
+}
+},createForLine:function(o,_f,_10,d,r,p,c){
+var sh=_f*_10/4,shy=/B/.test(p)?sh:/T/.test(p)?sh*-1:0,shx=/R/.test(p)?sh:/L/.test(p)?sh*-1:0;
+for(var i=1;i<=_f;i++){
+var _11=i*_10;
+this.container.createLine({x1:d.x1+shx,y1:d.y1+shy,x2:d.x2+shx,y2:d.y2+shy}).setStroke({width:_11,color:c,cap:"round"});
+}
+},createForEllipse:function(o,_12,_13,d,r,p,c){
+var sh=_12*_13/8,shy=/B/.test(p)?sh:/T/.test(p)?sh*-1:0,shx=/R/.test(p)?sh*0.8:/L/.test(p)?sh*-0.8:0;
+for(var i=1;i<=_12;i++){
+var _14=i*_13;
+this.container.createEllipse({cx:d.cx+shx,cy:d.cy+shy,rx:d.rx-sh,ry:d.ry-sh,r:r}).setStroke({width:_14,color:c});
+}
+},createForRect:function(o,_15,_16,d,r,p,c){
+var sh=_15*_16/2,shy=/B/.test(p)?sh:/T/.test(p)?0:sh/2,shx=/R/.test(p)?sh:/L/.test(p)?0:sh/2;
+for(var i=1;i<=_15;i++){
+var _17=i*_16;
+this.container.createRect({x:d.x+shx,y:d.y+shy,width:d.width-sh,height:d.height-sh,r:r}).setStroke({width:_17,color:c});
+}
+},arrowPoints:function(){
+var d=this.stencil.data;
+var _18=this.stencil.getRadius();
+var _19=this.style.zAngle+30;
+var pt=this.util.pointOnCircle(d.x1,d.y1,_18*0.75,_19);
+var obj={start:{x:d.x1,y:d.y1},x:pt.x,y:pt.y};
+var _19=this.util.angle(obj);
+var _1a=this.util.length(obj);
+var al=this.style.arrows.length;
+var aw=this.style.arrows.width/3;
+if(_1a<al){
+al=_1a/2;
+}
+var p1=this.util.pointOnCircle(obj.x,obj.y,-al,_19-aw);
+var p2=this.util.pointOnCircle(obj.x,obj.y,-al,_19+aw);
+return [{x:obj.x,y:obj.y},p1,p2];
+},createForZArrow:function(o,_1b,_1c,pts,r,p,c){
+if(this.stencil.data.cosphi<1||!this.stencil.points[0]){
+return;
+}
+var sh=_1b*_1c/4,shy=/B/.test(p)?sh:/T/.test(p)?sh*-1:0,shx=/R/.test(p)?sh:/L/.test(p)?sh*-1:0;
+var _1d=true;
+for(var i=1;i<=_1b;i++){
+var _1e=i*_1c;
+pts=this.arrowPoints();
+if(!pts){
+return;
+}
+if(dojox.gfx.renderer=="svg"){
+var _1f=[];
+dojo.forEach(pts,function(o,i){
+if(i==0){
+_1f.push("M "+(o.x+shx)+" "+(o.y+shy));
+}else{
+var cmd=o.t||"L ";
+_1f.push(cmd+(o.x+shx)+" "+(o.y+shy));
+}
+},this);
+if(_1d){
+_1f.push("Z");
+}
+this.container.createPath(_1f.join(", ")).setStroke({width:_1e,color:c,cap:"round"}).setFill(c);
+}else{
+var pth=this.container.createPath({}).setStroke({width:_1e,color:c,cap:"round"});
+dojo.forEach(pts,function(o,i){
+if(i==0||o.t=="M"){
+pth.moveTo(o.x+shx,o.y+shy);
+}else{
+if(o.t=="Z"){
+_1d&&pth.closePath();
+}else{
+pth.lineTo(o.x+shx,o.y+shy);
+}
+}
+},this);
+_1d&&pth.closePath();
+}
+var sp=this.stencil.points;
+this.container.createLine({x1:sp[0].x,y1:sp[0].y,x2:pts[0].x,y2:pts[0].y}).setStroke({width:_1e,color:c,cap:"round"});
+}
+},onTransform:function(){
+this.render();
+},onRender:function(){
+this.container.moveToBack();
+},destroy:function(){
+if(this.container){
+this.container.removeShape();
+}
+}});
+}
Index: trunk/web/dojo/dojox/drawing/annotations/Label.js
===================================================================
--- trunk/web/dojo/dojox/drawing/annotations/Label.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/annotations/Label.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.annotations.Label"]){
+dojo._hasResource["dojox.drawing.annotations.Label"]=true;
+dojo.provide("dojox.drawing.annotations.Label");
+dojo.require("dojox.drawing.stencil.Text");
+dojox.drawing.annotations.Label=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Text,function(_1){
+this.master=_1.stencil;
+this.labelPosition=_1.labelPosition||"BR";
+if(dojo.isFunction(this.labelPosition)){
+this.setLabel=this.setLabelCustom;
+}
+this.setLabel(_1.text||"");
+this.connect(this.master,"onTransform",this,"setLabel");
+this.connect(this.master,"destroy",this,"destroy");
+if(this.style.labelSameColor){
+this.connect(this.master,"attr",this,"beforeAttr");
+}
+},{_align:"start",setLabelCustom:function(_2){
+var d=dojo.hitch(this.master,this.labelPosition)();
+this.setData({x:d.x,y:d.y,width:d.w||this.style.text.minWidth,height:d.h||this._lineHeight});
+if(_2&&!_2.split){
+_2=null;
+}
+this.render(this.typesetter(_2));
+},setLabel:function(_3){
+var x,y,_4=this.master.getBounds();
+if(/B/.test(this.labelPosition)){
+y=_4.y2-this._lineHeight;
+}else{
+y=_4.y1;
+}
+if(/R/.test(this.labelPosition)){
+x=_4.x2;
+}else{
+y=_4.y1;
+this._align="end";
+}
+if(!this.labelWidth||(_3&&_3.split&&_3!=this.getText())){
+this.setData({x:x,y:y,height:this._lineHeight,width:this.style.text.minWidth});
+this.labelWidth=this.style.text.minWidth;
+this.render(this.typesetter(_3));
+}else{
+this.setData({x:x,y:y,height:this.data.height,width:this.data.width});
+this.render();
+}
+},beforeAttr:function(_5,_6){
+if(_6!==undefined){
+var k=_5;
+_5={};
+_5[k]=_6;
+}
+delete _5.x;
+delete _5.y;
+delete _5.width;
+delete _5.height;
+this.attr(_5);
+!this.created&&this.render();
+}});
+}
Index: trunk/web/dojo/dojox/drawing/ui/Tooltip.js
===================================================================
--- trunk/web/dojo/dojox/drawing/ui/Tooltip.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/ui/Tooltip.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.Tooltip"]){
+dojo._hasResource["dojox.drawing.ui.Tooltip"]=true;
+dojo.provide("dojox.drawing.ui.Tooltip");
+dojo.require("dojox.drawing.plugins._Plugin");
+(function(){
+var _1=null;
+var _2=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_3){
+this.createDom();
+},{show:function(_4,_5){
+this.domNode.innerHTML=_5;
+var dx=30;
+var px=_4.data.x+_4.data.width;
+var py=_4.data.y+_4.data.height;
+var x=px+this.mouse.origin.x+dx;
+var y=py+this.mouse.origin.y+dx;
+dojo.style(this.domNode,{display:"inline",left:x+"px",top:y+"px"});
+var _6=dojo.marginBox(this.domNode);
+this.createShape(x-this.mouse.origin.x,y-this.mouse.origin.y,_6.w,_6.h);
+},createShape:function(x,y,w,h){
+this.balloon&&this.balloon.destroy();
+var r=5,x2=x+w,y2=y+h,_7=[];
+var _8=function(){
+for(var i=0;i<arguments.length;i++){
+_7.push(arguments[i]);
+}
+};
+_8({x:x,y:y+5},{t:"Q",x:x,y:y},{x:x+r,y:y});
+_8({t:"L",x:x2-r,y:y});
+_8({t:"Q",x:x2,y:y},{x:x2,y:y+r});
+_8({t:"L",x:x2,y:y2-r});
+_8({t:"Q",x:x2,y:y2},{x:x2-r,y:y2});
+_8({t:"L",x:x+r,y:y2});
+_8({t:"Q",x:x,y:y2},{x:x,y:y2-r});
+_8({t:"L",x:x,y:y+r});
+this.balloon=this.drawing.addUI("path",{points:_7});
+},createDom:function(){
+this.domNode=dojo.create("span",{"class":"drawingTooltip"},document.body);
+dojo.style(this.domNode,{display:"none",position:"absolute"});
+}});
+dojox.drawing.ui.Tooltip=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_9){
+if(!_1){
+_1=new _2(_9);
+}
+if(_9.stencil){
+}else{
+if(this.button){
+this.connect(this.button,"onOver",this,"onOver");
+this.connect(this.button,"onOut",this,"onOut");
+}
+}
+},{width:300,height:200,onOver:function(){
+_1.show(this.button,this.data.text);
+},onOut:function(){
+}});
+dojox.drawing.register({name:"dojox.drawing.ui.Tooltip"},"stencil");
+})();
+}
Index: trunk/web/dojo/dojox/drawing/ui/Button.js
===================================================================
--- trunk/web/dojo/dojox/drawing/ui/Button.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/ui/Button.js	(revision 9)
@@ -0,0 +1,173 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.Button"]){
+dojo._hasResource["dojox.drawing.ui.Button"]=true;
+dojo.provide("dojox.drawing.ui.Button");
+dojox.drawing.ui.Button=dojox.drawing.util.oo.declare(function(_1){
+_1.subShape=true;
+dojo.mixin(this,_1);
+this.width=_1.data.width||_1.data.rx*2;
+this.height=_1.data.height||_1.data.ry*2;
+this.y=_1.data.y||_1.data.cy-_1.data.ry;
+this.id=this.id||this.util.uid(this.type);
+this.util.attr(this.container,"id",this.id);
+if(this.callback){
+this.hitched=dojo.hitch(this.scope||window,this.callback,this);
+}
+_1.drawingType="ui";
+if(_1.data.width&&_1.data.height){
+this.shape=new dojox.drawing.stencil.Rect(_1);
+}else{
+this.shape=new dojox.drawing.stencil.Ellipse(_1);
+}
+var _2=function(s,p,v){
+dojo.forEach(["norm","over","down","selected"],function(nm){
+s[nm].fill[p]=v;
+});
+};
+_2(this.style.button,"y2",this.height+this.y);
+_2(this.style.button,"y1",this.y);
+if(_1.icon&&!_1.icon.text){
+var _3=this.drawing.getConstructor(_1.icon.type);
+var o=this.makeOptions(_1.icon);
+o.data=dojo.mixin(o.data,this.style.button.icon.norm);
+if(o.data&&o.data.borderWidth===0){
+o.data.fill=this.style.button.icon.norm.fill=o.data.color;
+}else{
+if(_1.icon.type=="line"||(_1.icon.type=="path"&&!_1.icon.closePath)){
+this.style.button.icon.selected.color=this.style.button.icon.selected.fill;
+}else{
+}
+}
+this.icon=new _3(o);
+}else{
+if(_1.text||(_1.icon&&_1.icon.text)){
+o=this.makeOptions(_1.text||_1.icon.text);
+o.data.color=this.style.button.icon.norm.color;
+this.style.button.icon.selected.color=this.style.button.icon.selected.fill;
+this.icon=new dojox.drawing.stencil.Text(o);
+this.icon.attr({height:this.icon._lineHeight,y:((this.height-this.icon._lineHeight)/2)+this.y});
+}
+}
+var c=this.drawing.getConstructor(this.toolType);
+if(c){
+this.drawing.addUI("tooltip",{data:{text:c.setup.tooltip},button:this});
+}
+this.onOut();
+},{callback:null,scope:null,hitched:null,toolType:"",onClick:function(_4){
+},makeOptions:function(d,s){
+s=s||1;
+d=dojo.clone(d);
+var o={util:this.util,mouse:this.mouse,container:this.container,subShape:true};
+if(typeof (d)=="string"){
+o.data={x:this.data.x-5,y:this.data.y+2,width:this.data.width,height:this.data.height,text:d,makeFit:true};
+}else{
+if(d.points){
+dojo.forEach(d.points,function(pt){
+pt.x=pt.x*this.data.width*0.01*s+this.data.x;
+pt.y=pt.y*this.data.height*0.01*s+this.data.y;
+},this);
+o.data={};
+for(var n in d){
+if(n!="points"){
+o.data[n]=d[n];
+}
+}
+o.points=d.points;
+}else{
+for(n in d){
+if(/x|width/.test(n)){
+d[n]=d[n]*this.data.width*0.01*s;
+}else{
+if(/y|height/.test(n)){
+d[n]=d[n]*this.data.height*0.01*s;
+}
+}
+if(/x/.test(n)&&!/r/.test(n)){
+d[n]+=this.data.x;
+}else{
+if(/y/.test(n)&&!/r/.test(n)){
+d[n]+=this.data.y;
+}
+}
+}
+delete d.type;
+o.data=d;
+}
+}
+o.drawingType="ui";
+return o;
+if(d.borderWidth!==undefined){
+o.data.borderWidth=d.borderWidth;
+}
+return o;
+},enabled:true,selected:false,type:"drawing.library.UI.Button",select:function(){
+this.selected=true;
+if(this.icon){
+this.icon.attr(this.style.button.icon.selected);
+}
+this._change(this.style.button.selected);
+this.shape.shadow&&this.shape.shadow.hide();
+},deselect:function(){
+this.selected=false;
+if(this.icon){
+this.icon.attr(this.style.button.icon.norm);
+}
+this.shape.shadow&&this.shape.shadow.show();
+this._change(this.style.button.norm);
+},disable:function(){
+if(!this.enabled){
+return;
+}
+this.enabled=false;
+this._change(this.style.button.disabled);
+this.icon.attr({color:this.style.button.norm.color});
+},enable:function(){
+if(this.enabled){
+return;
+}
+this.enabled=true;
+this._change(this.style.button.norm);
+this.icon.attr({color:this.style.button.icon.norm.color});
+},_change:function(_5){
+this.shape.attr(_5);
+this.shape.shadow&&this.shape.shadow.container.moveToBack();
+if(this.icon){
+this.icon.shape.moveToFront();
+}
+},onOver:function(){
+if(this.selected||!this.enabled){
+return;
+}
+this._change(this.style.button.over);
+},onOut:function(){
+if(this.selected){
+return;
+}
+this._change(this.style.button.norm);
+},onDown:function(){
+if(this.selected||!this.enabled){
+return;
+}
+this._change(this.style.button.selected);
+},onUp:function(){
+if(!this.enabled){
+return;
+}
+this._change(this.style.button.over);
+if(this.hitched){
+this.hitched();
+}
+this.onClick(this);
+},attr:function(_6){
+if(this.icon){
+this.icon.attr(_6);
+}
+}});
+dojox.drawing.register({name:"dojox.drawing.ui.Button"},"stencil");
+}
Index: trunk/web/dojo/dojox/drawing/ui/Toolbar.js
===================================================================
--- trunk/web/dojo/dojox/drawing/ui/Toolbar.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/ui/Toolbar.js	(revision 9)
@@ -0,0 +1,189 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.Toolbar"]){
+dojo._hasResource["dojox.drawing.ui.Toolbar"]=true;
+dojo.provide("dojox.drawing.ui.Toolbar");
+dojo.require("dojox.drawing.library.icons");
+dojo.declare("dojox.drawing.ui.Toolbar",[],{constructor:function(_1,_2){
+this.util=dojox.drawing.util.common;
+if(_1.drawing){
+this.toolDrawing=_1.drawing;
+this.drawing=this.toolDrawing;
+this.width=this.toolDrawing.width;
+this.height=this.toolDrawing.height;
+this.strSelected=_1.selected;
+this.strTools=_1.tools;
+this.strPlugs=_1.plugs;
+this._mixprops(["padding","margin","size","radius"],_1);
+this.addBack();
+}else{
+var _3=dojo.marginBox(_2);
+this.width=_3.w;
+this.height=_3.h;
+this.strSelected=dojo.attr(_2,"selected");
+this.strTools=dojo.attr(_2,"tools");
+this.strPlugs=dojo.attr(_2,"plugs");
+this._mixprops(["padding","margin","size","radius"],_2);
+this.toolDrawing=new dojox.drawing.Drawing({mode:"ui"},_2);
+}
+this.horizontal=this.width>this.height;
+if(this.toolDrawing.ready){
+this.makeButtons();
+if(!this.strSelected&&this.drawing.defaults.clickMode){
+this.drawing.mouse.setCursor("default");
+}
+}else{
+var c=dojo.connect(this.toolDrawing,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.drawing=dojox.drawing.getRegistered("drawing",dojo.attr(_2,"drawingId"));
+this.makeButtons();
+if(!this.strSelected&&this.drawing.defaults.clickMode){
+var c=dojo.connect(this.drawing,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.drawing.mouse.setCursor("default");
+});
+}
+});
+}
+},padding:10,margin:5,size:30,radius:3,toolPlugGap:20,strSelected:"",strTools:"",strPlugs:"",makeButtons:function(){
+this.buttons=[];
+this.plugins=[];
+var x=this.padding,y=this.padding,w=this.size,h=this.size,r=this.radius,g=this.margin,_4=dojox.drawing.library.icons,s={place:"BR",size:2,mult:4};
+if(this.strTools){
+var _5=[];
+var _6=dojox.drawing.getRegistered("tool");
+var _7={};
+for(var nm in _6){
+var _8=this.util.abbr(nm);
+_7[_8]=_6[nm];
+if(this.strTools=="all"){
+_5.push(_8);
+var _9=dojox.drawing.getRegistered("tool",nm);
+if(_9.secondary){
+_5.push(_9.secondary.name);
+}
+}
+}
+if(this.strTools!="all"){
+var _a=this.strTools.split(",");
+dojo.forEach(_a,function(_b){
+_b=dojo.trim(_b);
+_5.push(_b);
+var _c=dojox.drawing.getRegistered("tool",_7[_b].name);
+if(_c.secondary){
+_5.push(_c.secondary.name);
+}
+},this);
+}
+dojo.forEach(_5,function(t){
+t=dojo.trim(t);
+var _d=false;
+if(t.indexOf("Secondary")>-1){
+var _e=t.substring(0,t.indexOf("Secondary"));
+var _f=dojox.drawing.getRegistered("tool",_7[_e].name).secondary;
+var _10=_f.label;
+this[t]=_f.funct;
+if(_f.setup){
+dojo.hitch(this,_f.setup)();
+}
+var btn=this.toolDrawing.addUI("button",{data:{x:x,y:y,width:w,height:h/2,r:r},toolType:t,secondary:true,text:_10,shadow:s,scope:this,callback:this[t]});
+if(_f.postSetup){
+dojo.hitch(this,_f.postSetup,btn)();
+}
+_d=true;
+}else{
+var btn=this.toolDrawing.addUI("button",{data:{x:x,y:y,width:w,height:h,r:r},toolType:t,icon:_4[t],shadow:s,scope:this,callback:"onToolClick"});
+}
+dojox.drawing.register(btn,"button");
+this.buttons.push(btn);
+if(this.strSelected==t){
+btn.select();
+this.selected=btn;
+this.drawing.setTool(btn.toolType);
+}
+if(this.horizontal){
+var _11=_d?h/2+g:h+g;
+y+=_11;
+}else{
+var _11=_d?h/2+g:h+g;
+y+=_11;
+}
+},this);
+}
+if(this.horizontal){
+y+=this.toolPlugGap;
+}else{
+y+=this.toolPlugGap;
+}
+if(this.strPlugs){
+var _12=[];
+var _13=dojox.drawing.getRegistered("plugin");
+var _14={};
+for(var nm in _13){
+var _15=this.util.abbr(nm);
+_14[_15]=_13[nm];
+if(this.strPlugs=="all"){
+_12.push(_15);
+}
+}
+if(this.strPlugs!="all"){
+_12=this.strPlugs.split(",");
+dojo.map(_12,function(p){
+return dojo.trim(p);
+});
+}
+dojo.forEach(_12,function(p){
+var t=dojo.trim(p);
+if(_14[p].button!=false){
+var btn=this.toolDrawing.addUI("button",{data:{x:x,y:y,width:w,height:h,r:r},toolType:t,icon:_4[t],shadow:s,scope:this,callback:"onPlugClick"});
+dojox.drawing.register(btn,"button");
+this.plugins.push(btn);
+if(this.horizontal){
+y+=h+g;
+}else{
+y+=h+g;
+}
+}
+var _16={};
+_14[p].button==false?_16={name:this.drawing.stencilTypeMap[p]}:_16={name:this.drawing.stencilTypeMap[p],options:{button:btn}};
+this.drawing.addPlugin(_16);
+},this);
+}
+dojo.connect(this.drawing,"onRenderStencil",this,"onRenderStencil");
+},onRenderStencil:function(_17){
+if(this.drawing.defaults.clickMode){
+this.drawing.mouse.setCursor("default");
+this.selected&&this.selected.deselect();
+this.selected=null;
+}
+},addTool:function(){
+},addPlugin:function(){
+},addBack:function(){
+this.toolDrawing.addUI("rect",{data:{x:0,y:0,width:this.width,height:this.size+(this.padding*2),fill:"#ffffff",borderWidth:0}});
+},onToolClick:function(_18){
+if(this.drawing.defaults.clickMode){
+this.drawing.mouse.setCursor("crosshair");
+}
+dojo.forEach(this.buttons,function(b){
+if(b.id==_18.id){
+b.select();
+this.selected=b;
+this.drawing.setTool(_18.toolType);
+}else{
+if(!b.secondary){
+b.deselect();
+}
+}
+},this);
+},onPlugClick:function(_19){
+},_mixprops:function(_1a,_1b){
+dojo.forEach(_1a,function(p){
+this[p]=_1b.tagName?dojo.attr(_1b,p)===null?this[p]:dojo.attr(_1b,p):_1b[p]===undefined?this[p]:_1b[p];
+},this);
+}});
+}
Index: trunk/web/dojo/dojox/drawing/ui/dom/Toolbar.js
===================================================================
--- trunk/web/dojo/dojox/drawing/ui/dom/Toolbar.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/ui/dom/Toolbar.js	(revision 9)
@@ -0,0 +1,114 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.dom.Toolbar"]){
+dojo._hasResource["dojox.drawing.ui.dom.Toolbar"]=true;
+dojo.provide("dojox.drawing.ui.dom.Toolbar");
+dojo.deprecated("dojox.drawing.ui.dom.Toolbar","It may not even make it to the 1.4 release.",1.4);
+(function(){
+dojo.declare("dojox.drawing.ui.dom.Toolbar",[],{baseClass:"drawingToolbar",buttonClass:"drawingButton",iconClass:"icon",constructor:function(_1,_2){
+dojo.addOnLoad(this,function(){
+this.domNode=dojo.byId(_2);
+dojo.addClass(this.domNode,this.baseClass);
+this.parse();
+});
+},createIcon:function(_3,_4){
+var _5=_4&&_4.setup?_4.setup:{};
+if(_5.iconClass){
+var _6=_5.iconClass?_5.iconClass:"iconNone";
+var _7=_5.tooltip?_5.tooltip:"Tool";
+var _8=dojo.create("div",{title:_7},_3);
+dojo.addClass(_8,this.iconClass);
+dojo.addClass(_8,_6);
+dojo.connect(_3,"mouseup",function(_9){
+dojo.stopEvent(_9);
+dojo.removeClass(_3,"active");
+});
+dojo.connect(_3,"mouseover",function(_a){
+dojo.stopEvent(_a);
+dojo.addClass(_3,"hover");
+});
+dojo.connect(_3,"mousedown",this,function(_b){
+dojo.stopEvent(_b);
+dojo.addClass(_3,"active");
+});
+dojo.connect(_3,"mouseout",this,function(_c){
+dojo.stopEvent(_c);
+dojo.removeClass(_3,"hover");
+});
+}
+},createTool:function(_d){
+_d.innerHTML="";
+var _e=dojo.attr(_d,"tool");
+this.toolNodes[_e]=_d;
+dojo.attr(_d,"tabIndex",1);
+var _f=dojo.getObject(_e);
+this.createIcon(_d,_f);
+this.drawing.registerTool(_e,_f);
+dojo.connect(_d,"mouseup",this,function(evt){
+dojo.stopEvent(evt);
+dojo.removeClass(_d,"active");
+this.onClick(_e);
+});
+dojo.connect(_d,"mouseover",function(evt){
+dojo.stopEvent(evt);
+dojo.addClass(_d,"hover");
+});
+dojo.connect(_d,"mousedown",this,function(evt){
+dojo.stopEvent(evt);
+dojo.addClass(_d,"active");
+});
+dojo.connect(_d,"mouseout",this,function(evt){
+dojo.stopEvent(evt);
+dojo.removeClass(_d,"hover");
+});
+},parse:function(){
+var _10=dojo.attr(this.domNode,"drawingId");
+this.drawing=dojox.drawing.util.common.byId(_10);
+!this.drawing&&console.error("Drawing not found based on 'drawingId' in Toolbar. ");
+this.toolNodes={};
+var _11;
+dojo.query(">",this.domNode).forEach(function(_12,i){
+_12.className=this.buttonClass;
+var _13=dojo.attr(_12,"tool");
+var _14=dojo.attr(_12,"action");
+var _15=dojo.attr(_12,"plugin");
+if(_13){
+if(i==0||dojo.attr(_12,"selected")=="true"){
+_11=_13;
+}
+this.createTool(_12);
+}else{
+if(_15){
+var p={name:_15,options:{}},opt=dojo.attr(_12,"options");
+if(opt){
+p.options=eval("("+opt+")");
+}
+p.options.node=_12;
+_12.innerHTML="";
+this.drawing.addPlugin(p);
+this.createIcon(_12,dojo.getObject(dojo.attr(_12,"plugin")));
+}
+}
+},this);
+this.drawing.initPlugins();
+dojo.connect(this.drawing,"setTool",this,"onSetTool");
+this.drawing.setTool(_11);
+},onClick:function(_16){
+this.drawing.setTool(_16);
+},onSetTool:function(_17){
+for(var n in this.toolNodes){
+if(n==_17){
+dojo.addClass(this.toolNodes[_17],"selected");
+this.toolNodes[_17].blur();
+}else{
+dojo.removeClass(this.toolNodes[n],"selected");
+}
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojox/drawing/ui/dom/Zoom.js
===================================================================
--- trunk/web/dojo/dojox/drawing/ui/dom/Zoom.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/ui/dom/Zoom.js	(revision 9)
@@ -0,0 +1,57 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.dom.Zoom"]){
+dojo._hasResource["dojox.drawing.ui.dom.Zoom"]=true;
+dojo.provide("dojox.drawing.ui.dom.Zoom");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.ui.dom.Zoom=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+var _2=_1.node.className;
+var _3=_1.node.innerHTML;
+this.domNode=dojo.create("div",{id:"btnZoom","class":"toolCombo"},_1.node,"replace");
+this.makeButton("ZoomIn",this.topClass);
+this.makeButton("Zoom100",this.midClass);
+this.makeButton("ZoomOut",this.botClass);
+},{type:"dojox.drawing.ui.dom.Zoom",zoomInc:0.1,maxZoom:10,minZoom:0.1,zoomFactor:1,baseClass:"drawingButton",topClass:"toolComboTop",midClass:"toolComboMid",botClass:"toolComboBot",makeButton:function(_4,_5){
+var _6=dojo.create("div",{id:"btn"+_4,"class":this.baseClass+" "+_5,innerHTML:"<div title=\"Zoom In\" class=\"icon icon"+_4+"\"></div>"},this.domNode);
+dojo.connect(document,"mouseup",function(_7){
+dojo.stopEvent(_7);
+dojo.removeClass(_6,"active");
+});
+dojo.connect(_6,"mouseup",this,function(_8){
+dojo.stopEvent(_8);
+dojo.removeClass(_6,"active");
+this["on"+_4]();
+});
+dojo.connect(_6,"mouseover",function(_9){
+dojo.stopEvent(_9);
+dojo.addClass(_6,"hover");
+});
+dojo.connect(_6,"mousedown",this,function(_a){
+dojo.stopEvent(_a);
+dojo.addClass(_6,"active");
+});
+dojo.connect(_6,"mouseout",this,function(_b){
+dojo.stopEvent(_b);
+dojo.removeClass(_6,"hover");
+});
+},onZoomIn:function(_c){
+this.zoomFactor+=this.zoomInc;
+this.zoomFactor=Math.min(this.zoomFactor,this.maxZoom);
+this.canvas.setZoom(this.zoomFactor);
+this.mouse.setZoom(this.zoomFactor);
+},onZoom100:function(_d){
+this.zoomFactor=1;
+this.canvas.setZoom(this.zoomFactor);
+this.mouse.setZoom(this.zoomFactor);
+},onZoomOut:function(_e){
+this.zoomFactor-=this.zoomInc;
+this.zoomFactor=Math.max(this.zoomFactor,this.minZoom);
+this.canvas.setZoom(this.zoomFactor);
+this.mouse.setZoom(this.zoomFactor);
+}});
+}
Index: trunk/web/dojo/dojox/drawing/ui/dom/Pan.js
===================================================================
--- trunk/web/dojo/dojox/drawing/ui/dom/Pan.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/ui/dom/Pan.js	(revision 9)
@@ -0,0 +1,118 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.ui.dom.Pan"]){
+dojo._hasResource["dojox.drawing.ui.dom.Pan"]=true;
+dojo.provide("dojox.drawing.ui.dom.Pan");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojo.deprecated("dojox.drawing.ui.dom.Pan","It may not even make it to the 1.4 release.",1.4);
+dojox.drawing.ui.dom.Pan=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+this.domNode=_1.node;
+var _2;
+dojo.connect(this.domNode,"click",this,"onSetPan");
+dojo.connect(this.keys,"onKeyUp",this,"onKeyUp");
+dojo.connect(this.keys,"onKeyDown",this,"onKeyDown");
+dojo.connect(this.anchors,"onAnchorUp",this,"checkBounds");
+dojo.connect(this.stencils,"register",this,"checkBounds");
+dojo.connect(this.canvas,"resize",this,"checkBounds");
+dojo.connect(this.canvas,"setZoom",this,"checkBounds");
+dojo.connect(this.canvas,"onScroll",this,function(){
+if(this._blockScroll){
+this._blockScroll=false;
+return;
+}
+_2&&clearTimeout(_2);
+_2=setTimeout(dojo.hitch(this,"checkBounds"),200);
+});
+this._mouseHandle=this.mouse.register(this);
+},{selected:false,type:"dojox.drawing.ui.dom.Pan",onKeyUp:function(_3){
+if(_3.keyCode==32){
+this.onSetPan(false);
+}
+},onKeyDown:function(_4){
+if(_4.keyCode==32){
+this.onSetPan(true);
+}
+},onSetPan:function(_5){
+if(_5===true||_5===false){
+this.selected=!_5;
+}
+if(this.selected){
+this.selected=false;
+dojo.removeClass(this.domNode,"selected");
+}else{
+this.selected=true;
+dojo.addClass(this.domNode,"selected");
+}
+this.mouse.setEventMode(this.selected?"pan":"");
+},onPanDrag:function(_6){
+var x=_6.x-_6.last.x;
+var y=_6.y-_6.last.y;
+this.canvas.domNode.parentNode.scrollTop-=_6.move.y;
+this.canvas.domNode.parentNode.scrollLeft-=_6.move.x;
+this.canvas.onScroll();
+},onStencilUp:function(_7){
+this.checkBounds();
+},onStencilDrag:function(_8){
+},checkBounds:function(){
+var _9=function(){
+};
+var _a=function(){
+};
+var t=Infinity,r=-Infinity,b=-Infinity,l=Infinity,sx=0,sy=0,dy=0,dx=0,mx=this.stencils.group?this.stencils.group.getTransform():{dx:0,dy:0},sc=this.mouse.scrollOffset(),_b=sc.left?10:0,_c=sc.top?10:0,ch=this.canvas.height,cw=this.canvas.width,z=this.canvas.zoom,_d=this.canvas.parentHeight,_e=this.canvas.parentWidth;
+this.stencils.withSelected(function(m){
+var o=m.getBounds();
+_a("SEL BOUNDS:",o);
+t=Math.min(o.y1+mx.dy,t);
+r=Math.max(o.x2+mx.dx,r);
+b=Math.max(o.y2+mx.dy,b);
+l=Math.min(o.x1+mx.dx,l);
+});
+this.stencils.withUnselected(function(m){
+var o=m.getBounds();
+_a("UN BOUNDS:",o);
+t=Math.min(o.y1,t);
+r=Math.max(o.x2,r);
+b=Math.max(o.y2,b);
+l=Math.min(o.x1,l);
+});
+b*=z;
+var _f=0,_10=0;
+_9("Bottom test","b:",b,"z:",z,"ch:",ch,"pch:",_d,"top:",sc.top,"sy:",sy);
+if(b>_d||sc.top){
+_9("*bottom scroll*");
+ch=Math.max(b,_d+sc.top);
+sy=sc.top;
+_f+=this.canvas.getScrollWidth();
+}else{
+if(!sy&&ch>_d){
+_9("*bottom remove*");
+ch=_d;
+}
+}
+r*=z;
+if(r>_e||sc.left){
+cw=Math.max(r,_e+sc.left);
+sx=sc.left;
+_10+=this.canvas.getScrollWidth();
+}else{
+if(!sx&&cw>_e){
+cw=_e;
+}
+}
+cw+=_f*2;
+ch+=_10*2;
+this._blockScroll=true;
+this.stencils.group&&this.stencils.group.applyTransform({dx:dx,dy:dy});
+this.stencils.withUnselected(function(m){
+m.transformPoints({dx:dx,dy:dy});
+});
+this.canvas.setDimensions(cw,ch,sx,sy);
+}});
+dojox.drawing.ui.dom.Pan.setup={name:"dojox.drawing.ui.dom.Pan",tooltip:"Pan Tool",iconClass:"iconPan"};
+dojox.drawing.register(dojox.drawing.ui.dom.Pan.setup,"plugin");
+}
Index: trunk/web/dojo/dojox/drawing/util/oo.js
===================================================================
--- trunk/web/dojo/dojox/drawing/util/oo.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/util/oo.js	(revision 9)
@@ -0,0 +1,54 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.util.oo"]){
+dojo._hasResource["dojox.drawing.util.oo"]=true;
+dojo.provide("dojox.drawing.util.oo");
+dojox.drawing.util.oo={declare:function(){
+var f,o,_1=0,a=arguments;
+if(a.length<2){
+console.error("gfx.oo.declare; not enough arguments");
+}
+if(a.length==2){
+f=a[0];
+o=a[1];
+}else{
+a=Array.prototype.slice.call(arguments);
+o=a.pop();
+f=a.pop();
+_1=1;
+}
+for(var n in o){
+f.prototype[n]=o[n];
+}
+if(_1){
+a.unshift(f);
+f=this.extend.apply(this,a);
+}
+return f;
+},extend:function(){
+var a=arguments,_2=a[0];
+if(a.length<2){
+console.error("gfx.oo.extend; not enough arguments");
+}
+var f=function(){
+for(var i=1;i<a.length;i++){
+a[i].prototype.constructor.apply(this,arguments);
+}
+_2.prototype.constructor.apply(this,arguments);
+};
+for(var i=1;i<a.length;i++){
+for(var n in a[i].prototype){
+f.prototype[n]=a[i].prototype[n];
+}
+}
+for(n in _2.prototype){
+f.prototype[n]=_2.prototype[n];
+}
+return f;
+}};
+}
Index: trunk/web/dojo/dojox/drawing/util/positioning.js
===================================================================
--- trunk/web/dojo/dojox/drawing/util/positioning.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/util/positioning.js	(revision 9)
@@ -0,0 +1,45 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.util.positioning"]){
+dojo._hasResource["dojox.drawing.util.positioning"]=true;
+dojo.provide("dojox.drawing.util.positioning");
+(function(){
+var _1=4;
+var _2=20;
+dojox.drawing.util.positioning.label=function(_3,_4){
+var x=0.5*(_3.x+_4.x);
+var y=0.5*(_3.y+_4.y);
+var _5=dojox.drawing.util.common.slope(_3,_4);
+var _6=_1/Math.sqrt(1+_5*_5);
+if(_4.y>_3.y){
+_6=-_6;
+}
+x+=-_6*_5;
+y+=_6;
+var _7=_4.x<_3.x?"end":"start";
+if(_4.y>_3.y){
+y-=_2;
+}
+return {x:x,y:y,foo:"bar",align:_7};
+};
+dojox.drawing.util.positioning.angle=function(_8,_9){
+var x=0.7*_8.x+0.3*_9.x;
+var y=0.7*_8.y+0.3*_9.y;
+var _a=dojox.drawing.util.common.slope(_8,_9);
+var _b=_1/Math.sqrt(1+_a*_a);
+if(_9.x<_8.x){
+_b=-_b;
+}
+x+=-_b*_a;
+y+=_b;
+var _c=_9.y>_8.y?"end":"start";
+y+=_9.x>_8.x?0.5*_2:-0.5*_2;
+return {x:x,y:y,align:_c};
+};
+})();
+}
Index: trunk/web/dojo/dojox/drawing/util/common.js
===================================================================
--- trunk/web/dojo/dojox/drawing/util/common.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/util/common.js	(revision 9)
@@ -0,0 +1,113 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.util.common"]){
+dojo._hasResource["dojox.drawing.util.common"]=true;
+dojo.provide("dojox.drawing.util.common");
+dojo.require("dojox.math.round");
+(function(){
+var _1={};
+var _2=0;
+dojox.drawing.util.common={radToDeg:function(n){
+return (n*180)/Math.PI;
+},degToRad:function(n){
+return (n*Math.PI)/180;
+},angle:function(_3,_4){
+if(_4){
+_4=_4/180;
+var _5=this.radians(_3),_6=Math.PI*_4,_7=dojox.math.round(_5/_6),_8=_7*_6;
+return dojox.math.round(this.radToDeg(_8));
+}else{
+return this.radToDeg(this.radians(_3));
+}
+},oppAngle:function(_9){
+(_9+=180)>360?_9=_9-360:_9;
+return _9;
+},radians:function(o){
+return Math.atan2(o.start.y-o.y,o.x-o.start.x);
+},length:function(o){
+return Math.sqrt(Math.pow(o.start.x-o.x,2)+Math.pow(o.start.y-o.y,2));
+},lineSub:function(x1,y1,x2,y2,_a){
+var _b=this.distance(this.argsToObj.apply(this,arguments));
+_b=_b<_a?_a:_b;
+var pc=(_b-_a)/_b;
+var x=x1-(x1-x2)*pc;
+var y=y1-(y1-y2)*pc;
+return {x:x,y:y};
+},argsToObj:function(){
+var a=arguments;
+if(a.length<4){
+return a[0];
+}
+return {start:{x:a[0],y:a[1]},x:a[2],y:a[3]};
+},distance:function(){
+var o=this.argsToObj.apply(this,arguments);
+return Math.abs(Math.sqrt(Math.pow(o.start.x-o.x,2)+Math.pow(o.start.y-o.y,2)));
+},slope:function(p1,p2){
+if(!(p1.x-p2.x)){
+return 0;
+}
+return ((p1.y-p2.y)/(p1.x-p2.x));
+},pointOnCircle:function(cx,cy,_c,_d){
+var _e=_d*Math.PI/180;
+var x=_c*Math.cos(_e);
+var y=_c*Math.sin(_e);
+return {x:cx+x,y:cy-y};
+},constrainAngle:function(_f,min,max){
+var _10=this.angle(_f);
+if(_10>=min&&_10<=max){
+return _f;
+}
+var _11=this.length(_f);
+var _12=_10>max?max:min-_10<100?min:max;
+return this.pointOnCircle(_f.start.x,_f.start.y,_11,_12);
+},snapAngle:function(obj,ca){
+var _13=this.radians(obj),_14=this.length(obj),seg=Math.PI*ca,rnd=Math.round(_13/seg),_15=rnd*seg,_16=this.radToDeg(_15),pt=this.pointOnCircle(obj.start.x,obj.start.y,_14,_16);
+return pt;
+},idSetStart:function(num){
+_2=num;
+},uid:function(str){
+str=str||"shape";
+_1[str]=_1[str]===undefined?_2:_1[str]+1;
+return str+_1[str];
+},abbr:function(_17){
+return _17.substring(_17.lastIndexOf(".")+1).charAt(0).toLowerCase()+_17.substring(_17.lastIndexOf(".")+2);
+},mixin:function(o1,o2){
+},objects:{},register:function(obj){
+this.objects[obj.id]=obj;
+},byId:function(id){
+return this.objects[id];
+},attr:function(_18,_19,_1a,_1b){
+if(!_18){
+return false;
+}
+try{
+if(_18.shape&&_18.util){
+_18=_18.shape;
+}
+if(!_1a&&_19=="id"&&_18.target){
+var n=_18.target;
+while(!dojo.attr(n,"id")){
+n=n.parentNode;
+}
+return dojo.attr(n,"id");
+}
+if(_18.rawNode||_18.target){
+var _1c=Array.prototype.slice.call(arguments);
+_1c[0]=_18.rawNode||_18.target;
+return dojo.attr.apply(dojo,_1c);
+}
+return dojo.attr(_18,"id");
+}
+catch(e){
+if(!_1b){
+}
+return false;
+}
+}};
+})();
+}
Index: trunk/web/dojo/dojox/drawing/tools/Path.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/Path.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/Path.js	(revision 9)
@@ -0,0 +1,152 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Path"]){
+dojo._hasResource["dojox.drawing.tools.Path"]=true;
+dojo.provide("dojox.drawing.tools.Path");
+dojox.drawing.tools.Path=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(){
+this.pathMode="";
+this.currentPathMode="";
+this._started=false;
+this.oddEvenClicks=0;
+},{draws:true,onDown:function(_1){
+if(!this._started){
+this.onStartPath(_1);
+}
+},makeSubPath:function(_2){
+if(_2){
+if(this.currentPathMode=="Q"){
+this.points.push({x:this.points[0].x,y:this.points[0].y});
+}
+this.points.push({t:"Z"});
+this.render();
+}
+this.currentPathMode="";
+this.pathMode="M";
+},onStartPath:function(_3){
+this._started=true;
+this.revertRenderHit=this.renderHit;
+this.renderHit=false;
+this.closePath=false;
+this.mouse.setEventMode("PathEdit");
+this.closePoint={x:_3.x,y:_3.y};
+this._kc1=this.connect(this.keys,"onEsc",this,function(){
+this.onCompletePath(false);
+});
+this._kc2=this.connect(this.keys,"onKeyUp",this,function(_4){
+switch(_4.letter){
+case "c":
+this.onCompletePath(true);
+break;
+case "l":
+this.pathMode="L";
+break;
+case "m":
+this.makeSubPath(false);
+break;
+case "q":
+this.pathMode="Q";
+break;
+case "s":
+this.pathMode="S";
+break;
+case "z":
+this.makeSubPath(true);
+break;
+}
+});
+},onCompletePath:function(_5){
+this.remove(this.closeGuide,this.guide);
+var _6=this.getBounds();
+if(_6.w<this.minimumSize&&_6.h<this.minimumSize){
+this.remove(this.hit,this.shape,this.closeGuide);
+this._started=false;
+this.mouse.setEventMode("");
+this.setPoints([]);
+return;
+}
+if(_5){
+if(this.currentPathMode=="Q"){
+this.points.push({x:this.points[0].x,y:this.points[0].y});
+}
+this.closePath=true;
+}
+this.renderHit=this.revertRenderHit;
+this.renderedOnce=true;
+this.onRender(this);
+this.disconnect([this._kc1,this._kc2]);
+this.mouse.setEventMode("");
+this.render();
+},onUp:function(_7){
+if(!this._started||!_7.withinCanvas){
+return;
+}
+if(this.points.length>2&&this.closeRadius>this.util.distance(_7.x,_7.y,this.closePoint.x,this.closePoint.y)){
+this.onCompletePath(true);
+}else{
+var p={x:_7.x,y:_7.y};
+this.oddEvenClicks++;
+if(this.currentPathMode!=this.pathMode){
+if(this.pathMode=="Q"){
+p.t="Q";
+this.oddEvenClicks=0;
+}else{
+if(this.pathMode=="L"){
+p.t="L";
+}else{
+if(this.pathMode=="M"){
+p.t="M";
+this.closePoint={x:_7.x,y:_7.y};
+}
+}
+}
+this.currentPathMode=this.pathMode;
+}
+this.points.push(p);
+if(this.points.length>1){
+this.remove(this.guide);
+this.render();
+}
+}
+},createGuide:function(_8){
+if(!this.points.length){
+return;
+}
+var _9=[].concat(this.points);
+var pt={x:_8.x,y:_8.y};
+if(this.currentPathMode=="Q"&&this.oddEvenClicks%2){
+pt.t="L";
+}
+this.points.push(pt);
+this.render();
+this.points=_9;
+var _a=this.util.distance(_8.x,_8.y,this.closePoint.x,this.closePoint.y);
+if(this.points.length>1){
+if(_a<this.closeRadius&&!this.closeGuide){
+var c={cx:this.closePoint.x,cy:this.closePoint.y,rx:this.closeRadius,ry:this.closeRadius};
+this.closeGuide=this.container.createEllipse(c).setFill(this.closeColor);
+}else{
+if(_a>this.closeRadius&&this.closeGuide){
+this.remove(this.closeGuide);
+this.closeGuide=null;
+}
+}
+}
+},onMove:function(_b){
+if(!this._started){
+return;
+}
+this.createGuide(_b);
+},onDrag:function(_c){
+if(!this._started){
+return;
+}
+this.createGuide(_c);
+}});
+dojox.drawing.tools.Path.setup={name:"dojox.drawing.tools.Path",tooltip:"Path Tool",iconClass:"iconLine"};
+dojox.drawing.register(dojox.drawing.tools.Path.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/Ellipse.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/Ellipse.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/Ellipse.js	(revision 9)
@@ -0,0 +1,54 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Ellipse"]){
+dojo._hasResource["dojox.drawing.tools.Ellipse"]=true;
+dojo.provide("dojox.drawing.tools.Ellipse");
+dojox.drawing.tools.Ellipse=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Ellipse,function(){
+},{draws:true,onDrag:function(_1){
+var s=_1.start,e=_1;
+var x=s.x<e.x?s.x:e.x,y=s.y<e.y?s.y:e.y,w=s.x<e.x?e.x-s.x:s.x-e.x,h=s.y<e.y?e.y-s.y:s.y-e.y;
+if(this.keys.shift){
+w=h=Math.max(w,h);
+}
+if(!this.keys.alt){
+x+=w/2;
+y+=h/2;
+w/=2;
+h/=2;
+}else{
+if(y-h<0){
+h=y;
+}
+if(x-w<0){
+w=x;
+}
+}
+this.points=[{x:x-w,y:y-h},{x:x+w,y:y-h},{x:x+w,y:y+h},{x:x-w,y:y+h}];
+this.render();
+},onUp:function(_2){
+if(this.created||!this._downOnCanvas){
+return;
+}
+this._downOnCanvas=false;
+if(!this.shape){
+var s=_2.start,e=this.minimumSize*2;
+this.data={cx:s.x+e,cy:s.y+e,rx:e,ry:e};
+this.dataToPoints();
+this.render();
+}else{
+var o=this.pointsToData();
+if(o.rx*2<this.minimumSize&&o.ry*2<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+}
+this.onRender(this);
+}});
+dojox.drawing.tools.Ellipse.setup={name:"dojox.drawing.tools.Ellipse",tooltip:"Ellipse Tool",iconClass:"iconEllipse"};
+dojox.drawing.register(dojox.drawing.tools.Ellipse.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/Rect.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/Rect.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/Rect.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Rect"]){
+dojo._hasResource["dojox.drawing.tools.Rect"]=true;
+dojo.provide("dojox.drawing.tools.Rect");
+dojox.drawing.tools.Rect=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Rect,function(){
+},{draws:true,onDrag:function(_1){
+var s=_1.start,e=_1;
+var x=s.x<e.x?s.x:e.x,y=s.y<e.y?s.y:e.y,w=s.x<e.x?e.x-s.x:s.x-e.x,h=s.y<e.y?e.y-s.y:s.y-e.y;
+if(this.keys.shift){
+w=h=Math.max(w,h);
+}
+if(this.keys.alt){
+x-=w;
+y-=h;
+w*=2;
+h*=2;
+x=Math.max(x,0);
+y=Math.max(y,0);
+}
+this.setPoints([{x:x,y:y},{x:x+w,y:y},{x:x+w,y:y+h},{x:x,y:y+h}]);
+this.render();
+},onUp:function(_2){
+if(this.created||!this._downOnCanvas){
+return;
+}
+this._downOnCanvas=false;
+if(!this.shape){
+var s=_2.start;
+var e=this.minimumSize*4;
+this.setPoints([{x:s.x,y:s.y},{x:s.x+e,y:s.y},{x:s.x+e,y:s.y+e},{x:s.x,y:s.y+e}]);
+this.render();
+}else{
+var o=this.data;
+if(o.width<this.minimumSize&&o.height<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+}
+this.onRender(this);
+}});
+dojox.drawing.tools.Rect.setup={name:"dojox.drawing.tools.Rect",tooltip:"<span class=\"drawingTipTitle\">Rectangle Tool</span><br/>"+"<span class=\"drawingTipDesc\">SHIFT - constrain to square</span>",iconClass:"iconRect"};
+dojox.drawing.register(dojox.drawing.tools.Rect.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/TextBlock.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/TextBlock.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/TextBlock.js	(revision 9)
@@ -0,0 +1,388 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.TextBlock"]){
+dojo._hasResource["dojox.drawing.tools.TextBlock"]=true;
+dojo.provide("dojox.drawing.tools.TextBlock");
+dojo.require("dojox.drawing.stencil.Text");
+(function(){
+var _1;
+dojo.addOnLoad(function(){
+_1=dojo.byId("conEdit");
+if(!_1){
+console.error("A contenteditable div is missing from the main document. See 'dojox.drawing.tools.TextBlock'");
+}else{
+_1.parentNode.removeChild(_1);
+}
+});
+dojox.drawing.tools.TextBlock=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Text,function(_2){
+if(_2.data){
+var d=_2.data;
+var _3=d.text;
+var w=!d.width?this.style.text.minWidth:d.width=="auto"?"auto":Math.max(d.width,this.style.text.minWidth);
+var h=this._lineHeight;
+_3=this.typesetter(_3);
+if(_3&&w=="auto"){
+var o=this.measureText(this.cleanText(_3,false),w);
+w=o.w;
+h=o.h;
+}else{
+this._text="";
+}
+this.points=[{x:d.x,y:d.y},{x:d.x+w,y:d.y},{x:d.x+w,y:d.y+h},{x:d.x,y:d.y+h}];
+if(d.showEmpty||_3){
+this.editMode=true;
+dojo.disconnect(this._postRenderCon);
+this._postRenderCon=null;
+this.connect(this,"render",this,"onRender",true);
+if(d.showEmpty){
+this._text=_3||"";
+this.edit();
+}else{
+if(_3&&d.editMode){
+this._text="";
+this.edit();
+}else{
+if(_3){
+this.render(_3);
+}
+}
+}
+setTimeout(dojo.hitch(this,function(){
+this.editMode=false;
+}),100);
+}
+}else{
+this.connectMouse();
+this._postRenderCon=dojo.connect(this,"render",this,"_onPostRender");
+}
+},{draws:true,baseRender:false,type:"dojox.drawing.tools.TextBlock",selectOnExec:true,showEmpty:false,onDrag:function(_4){
+if(!this.parentNode){
+this.showParent(_4);
+}
+var s=this._startdrag,e=_4.page;
+this._box.left=(s.x<e.x?s.x:e.x);
+this._box.top=s.y;
+this._box.width=(s.x<e.x?e.x-s.x:s.x-e.x)+this.style.text.pad;
+dojo.style(this.parentNode,this._box.toPx());
+},onUp:function(_5){
+if(!this._downOnCanvas){
+return;
+}
+this._downOnCanvas=false;
+var c=dojo.connect(this,"render",this,function(){
+dojo.disconnect(c);
+this.onRender(this);
+});
+this.editMode=true;
+this.showParent(_5);
+this.created=true;
+this.createTextField();
+this.connectTextField();
+},showParent:function(_6){
+if(this.parentNode){
+return;
+}
+var x=_6.pageX||10;
+var y=_6.pageY||10;
+this.parentNode=dojo.doc.createElement("div");
+this.parentNode.id=this.id;
+var d=this.style.textMode.create;
+this._box={left:x,top:y,width:_6.width||1,height:_6.height&&_6.height>8?_6.height:this._lineHeight,border:d.width+"px "+d.style+" "+d.color,position:"absolute",zIndex:500,toPx:function(){
+var o={};
+for(var nm in this){
+o[nm]=typeof (this[nm])=="number"&&nm!="zIndex"?this[nm]+"px":this[nm];
+}
+return o;
+}};
+dojo.style(this.parentNode,this._box);
+document.body.appendChild(this.parentNode);
+},createTextField:function(_7){
+var d=this.style.textMode.edit;
+this._box.border=d.width+"px "+d.style+" "+d.color;
+this._box.height="auto";
+this._box.width=Math.max(this._box.width,this.style.text.minWidth*this.mouse.zoom);
+dojo.style(this.parentNode,this._box.toPx());
+this.parentNode.appendChild(_1);
+dojo.style(_1,{height:_7?"auto":this._lineHeight+"px",fontSize:(this.textSize/this.mouse.zoom)+"px",fontFamily:this.style.text.family});
+_1.innerHTML=_7||"";
+return _1;
+},connectTextField:function(){
+if(this._textConnected){
+return;
+}
+this._textConnected=true;
+this.mouse.setEventMode("TEXT");
+this.keys.editMode(true);
+var _8,_9,_a,_b,_c=this,_d=false,_e=function(){
+dojo.forEach([_8,_9,_a,_b],function(c){
+dojo.disconnect(c);
+});
+_c._textConnected=false;
+_c.keys.editMode(false);
+_c.mouse.setEventMode();
+_c.execText();
+};
+_8=dojo.connect(_1,"keyup",this,function(_f){
+if(dojo.trim(_1.innerHTML)&&!_d){
+dojo.style(_1,"height","auto");
+_d=true;
+}else{
+if(dojo.trim(_1.innerHTML).length<2&&_d){
+dojo.style(_1,"height",this._lineHeight+"px");
+_d=false;
+}
+}
+if(_f.keyCode==13||_f.keyCode==27){
+dojo.stopEvent(_f);
+_e();
+}
+});
+_9=dojo.connect(_1,"keydown",this,function(evt){
+if(evt.keyCode==13||evt.keyCode==27){
+dojo.stopEvent(evt);
+}
+});
+_a=dojo.connect(document,"mouseup",this,function(evt){
+if(!this._onAnchor&&evt.target.id!="conEdit"){
+dojo.stopEvent(evt);
+_e();
+}else{
+_1.blur();
+setTimeout(function(){
+_1.focus();
+},200);
+}
+});
+this.createAnchors();
+_b=dojo.connect(this.mouse,"setZoom",this,function(evt){
+_e();
+});
+_1.focus();
+this.onDown=function(){
+};
+this.onDrag=function(){
+};
+setTimeout(dojo.hitch(this,function(){
+_1.focus();
+this.onUp=function(){
+if(!_c._onAnchor&&this.parentNode){
+_c.disconnectMouse();
+_e();
+_c.onUp=function(){
+};
+}
+};
+}),500);
+},execText:function(){
+var d=dojo.marginBox(this.parentNode);
+var w=Math.max(d.w,this.style.text.minWidth);
+var txt=this.cleanText(_1.innerHTML,true);
+_1.innerHTML="";
+_1.blur();
+this.destroyAnchors();
+txt=this.typesetter(txt);
+var o=this.measureText(txt,w);
+var sc=this.mouse.scrollOffset();
+var org=this.mouse.origin;
+var x=this._box.left+sc.left-org.x;
+var y=this._box.top+sc.top-org.y;
+x*=this.mouse.zoom;
+y*=this.mouse.zoom;
+w*=this.mouse.zoom;
+o.h*=this.mouse.zoom;
+this.points=[{x:x,y:y},{x:x+w,y:y},{x:x+w,y:y+o.h},{x:x,y:y+o.h}];
+this.editMode=false;
+if(!o.text){
+this._text="";
+this._textArray=[];
+}
+this.render(o.text);
+this.onChangeText(this.getText());
+},edit:function(){
+this.editMode=true;
+var _10=this.getText()||"";
+if(this.parentNode||!this.points){
+return;
+}
+var d=this.pointsToData();
+var sc=this.mouse.scrollOffset();
+var org=this.mouse.origin;
+var obj={pageX:(d.x)/this.mouse.zoom-sc.left+org.x,pageY:(d.y)/this.mouse.zoom-sc.top+org.y,width:d.width/this.mouse.zoom,height:d.height/this.mouse.zoom};
+this.remove(this.shape,this.hit);
+this.showParent(obj);
+this.createTextField(_10.replace("/n"," "));
+this.connectTextField();
+if(_10){
+this.setSelection(_1,"end");
+}
+},cleanText:function(txt,_11){
+var _12=function(str){
+var _13={"&lt;":"<","&gt;":">","&amp;":"&"};
+for(var nm in _13){
+str=str.replace(new RegExp(nm,"gi"),_13[nm]);
+}
+return str;
+};
+if(_11){
+dojo.forEach(["<br>","<br/>","<br />","\\n","\\r"],function(br){
+txt=txt.replace(new RegExp(br,"gi")," ");
+});
+}
+txt=txt.replace(/&nbsp;/g," ");
+txt=_12(txt);
+txt=dojo.trim(txt);
+txt=txt.replace(/\s{2,}/g," ");
+return txt;
+},measureText:function(str,_14){
+var r="(<br\\s*/*>)|(\\n)|(\\r)";
+this.showParent({width:_14||"auto",height:"auto"});
+this.createTextField(str);
+var txt="";
+var el=_1;
+el.innerHTML="X";
+var h=dojo.marginBox(el).h;
+el.innerHTML=str;
+if(!_14||new RegExp(r,"gi").test(str)){
+txt=str.replace(new RegExp(r,"gi"),"\n");
+el.innerHTML=str.replace(new RegExp(r,"gi"),"<br/>");
+}else{
+if(dojo.marginBox(el).h==h){
+txt=str;
+}else{
+var ar=str.split(" ");
+var _15=[[]];
+var _16=0;
+el.innerHTML="";
+while(ar.length){
+var _17=ar.shift();
+el.innerHTML+=_17+" ";
+if(dojo.marginBox(el).h>h){
+_16++;
+_15[_16]=[];
+el.innerHTML=_17+" ";
+}
+_15[_16].push(_17);
+}
+dojo.forEach(_15,function(ar,i){
+_15[i]=ar.join(" ");
+});
+txt=_15.join("\n");
+el.innerHTML=txt.replace("\n","<br/>");
+}
+}
+var dim=dojo.marginBox(el);
+_1.parentNode.removeChild(_1);
+dojo.destroy(this.parentNode);
+this.parentNode=null;
+return {h:dim.h,w:dim.w,text:txt};
+},_downOnCanvas:false,onDown:function(obj){
+this._startdrag={x:obj.pageX,y:obj.pageY};
+dojo.disconnect(this._postRenderCon);
+this._postRenderCon=null;
+this._downOnCanvas=true;
+},createAnchors:function(){
+this._anchors={};
+var _18=this;
+var d=this.style.anchors,b=d.width,w=d.size-b*2,h=d.size-b*2,p=(d.size)/2*-1+"px";
+var s={position:"absolute",width:w+"px",height:h+"px",backgroundColor:d.fill,border:b+"px "+d.style+" "+d.color};
+if(dojo.isIE){
+s.paddingLeft=w+"px";
+s.fontSize=w+"px";
+}
+var ss=[{top:p,left:p},{top:p,right:p},{bottom:p,right:p},{bottom:p,left:p}];
+for(var i=0;i<4;i++){
+var _19=(i==0)||(i==3);
+var id=this.util.uid(_19?"left_anchor":"right_anchor");
+var a=dojo.create("div",{id:id},this.parentNode);
+dojo.style(a,dojo.mixin(dojo.clone(s),ss[i]));
+var md,mm,mu;
+var md=dojo.connect(a,"mousedown",this,function(evt){
+_19=evt.target.id.indexOf("left")>-1;
+_18._onAnchor=true;
+var _1a=evt.pageX;
+var _1b=this._box.width;
+dojo.stopEvent(evt);
+mm=dojo.connect(document,"mousemove",this,function(evt){
+var x=evt.pageX;
+if(_19){
+this._box.left=x;
+this._box.width=_1b+_1a-x;
+}else{
+this._box.width=x+_1b-_1a;
+}
+dojo.style(this.parentNode,this._box.toPx());
+});
+mu=dojo.connect(document,"mouseup",this,function(evt){
+_1a=this._box.left;
+_1b=this._box.width;
+dojo.disconnect(mm);
+dojo.disconnect(mu);
+_18._onAnchor=false;
+_1.focus();
+dojo.stopEvent(evt);
+});
+});
+this._anchors[id]={a:a,cons:[md]};
+}
+},destroyAnchors:function(){
+for(var n in this._anchors){
+dojo.forEach(this._anchors[n].con,dojo.disconnect,dojo);
+dojo.destroy(this._anchors[n].a);
+}
+},setSelection:function(_1c,_1d){
+console.warn("setSelection:");
+if(dojo.doc.selection){
+var r=dojo.body().createTextRange();
+r.moveToElementText(_1c);
+r.collapse(false);
+r.select();
+}else{
+var _1e=function(_1f,_20){
+_20=_20||[];
+for(var i=0;i<_1f.childNodes.length;i++){
+var n=_1f.childNodes[i];
+if(n.nodeType==3){
+_20.push(n);
+}else{
+if(n.tagName&&n.tagName.toLowerCase()=="img"){
+_20.push(n);
+}
+}
+if(n.childNodes&&n.childNodes.length){
+_1e(n,_20);
+}
+}
+return _20;
+};
+_1c.focus();
+var _21=dojo.global.getSelection();
+_21.removeAllRanges();
+r=dojo.doc.createRange();
+r.selectNodeContents(_1c);
+var _22=_1e(_1c);
+if(_1d=="end"){
+r.setStart(_22[_22.length-1],_22[_22.length-1].textContent.length);
+r.setEnd(_22[_22.length-1],_22[_22.length-1].textContent.length);
+}else{
+if(_1d=="beg"||_1d=="start"){
+r.setStart(_22[0],0);
+r.setEnd(_22[0],0);
+}else{
+if(_1d=="all"){
+r.setStart(_22[0],0);
+r.setEnd(_22[_22.length-1],_22[_22.length-1].textContent.length);
+}
+}
+}
+_21.addRange(r);
+}
+}});
+dojox.drawing.tools.TextBlock.setup={name:"dojox.drawing.tools.TextBlock",tooltip:"Text Tool",iconClass:"iconText"};
+dojox.drawing.register(dojox.drawing.tools.TextBlock.setup,"tool");
+})();
+}
Index: trunk/web/dojo/dojox/drawing/tools/custom/Axes.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/custom/Axes.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/custom/Axes.js	(revision 9)
@@ -0,0 +1,326 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.custom.Axes"]){
+dojo._hasResource["dojox.drawing.tools.custom.Axes"]=true;
+dojo.provide("dojox.drawing.tools.custom.Axes");
+dojo.require("dojox.drawing.stencil.Path");
+dojox.drawing.tools.custom.Axes=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(_1){
+this.closePath=false;
+this.xArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:0,idx2:1});
+this.yArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:2,idx2:1});
+if(_1.data){
+this.style.zAxisEnabled=_1.data.cosphi==1?true:false;
+this.setData(_1.data);
+}
+if(this.style.zAxisEnabled){
+this.data.cosphi=1;
+var _2={};
+dojo.mixin(_2,_1);
+dojo.mixin(_2,{container:this.container.createGroup(),style:this.style,showAngle:false,label:null});
+if(_1.data&&(!_2.data.radius||!_2.data.angle)){
+_2.data.x2=_2.data.x4;
+_2.data.y2=_2.data.y4;
+}
+_2.style.zAxis=true;
+this.zAxis=new dojox.drawing.tools.custom.Vector(_2);
+this.zAxis.minimumSize=5;
+this.connectMult([[this,"onChangeStyle",this.zAxis,"onChangeStyle"],[this,"select",this.zAxis,"select"],[this,"deselect",this.zAxis,"deselect"],[this,"onDelete",this.zAxis,"destroy"],[this,"onDrag",this,"zSet"],[this,"onTransform",this,"zSet"],[this.zAxis,"onBeforeRender",this,"zSet"],[this,"_onPostRender",this.zAxis,"render"]]);
+}
+if(this.points&&this.points.length){
+this.setPoints=this._postSetPoints;
+this.render();
+_1.label&&this.setLabel(_1.label);
+_1.shadow&&this.addShadow(_1.shadow);
+}
+},{draws:true,type:"dojox.drawing.tools.custom.Axes",minimumSize:30,showAngle:true,closePath:false,baseRender:false,zScale:0.5,zPoint:function(_3){
+_3.radius=this.util.length(_3);
+var pt=this.util.pointOnCircle(_3.start.x,_3.start.y,_3.radius*this.zScale,this.style.zAngle);
+return {x:pt.x,y:pt.y,skip:true,noAnchor:true};
+},zSet:function(){
+if(!this.zAxis){
+return;
+}
+var c=this.points[1];
+var z=this.points[3];
+var p=[{x:c.x,y:c.y},{x:z.x,y:z.y}];
+var _4=this.util.length({start:{x:c.x,y:c.y},x:z.x,y:z.y});
+_4>this.zAxis.minimumSize?this.zAxis.setPoints(p):false;
+this.zAxis.cosphi=1;
+},createLabels:function(){
+var _5={align:"middle",valign:"middle",util:this.util,annotation:true,container:this.container,mouse:this.mouse,stencil:this};
+this.labelX=new dojox.drawing.annotations.Label(dojo.mixin(_5,{labelPosition:this.setLabelX}));
+this.labelY=new dojox.drawing.annotations.Label(dojo.mixin(_5,{labelPosition:this.setLabelY}));
+if(this.style.zAxisEnabled){
+this.labelZ=new dojox.drawing.annotations.Label(dojo.mixin(_5,{labelPosition:this.setLabelZ}));
+}
+},setLabelX:function(){
+var ax=this.points[0];
+var c=this.points[1];
+var _6=40;
+var _7=20;
+var pt,px,py,_8;
+pt=this.util.lineSub(c.x,c.y,ax.x,ax.y,_6);
+px=pt.x+(pt.y-ax.y);
+py=pt.y+(ax.x-pt.x);
+_8=this.util.lineSub(pt.x,pt.y,px,py,(_6-_7));
+return {x:_8.x,y:_8.y,width:20};
+},setLabelY:function(){
+var c=this.points[1];
+var ay=this.points[2];
+var _9=40;
+var _a=20;
+var pt,px,py,_b;
+pt=this.util.lineSub(c.x,c.y,ay.x,ay.y,_9);
+px=pt.x+(ay.y-pt.y);
+py=pt.y+(pt.x-ay.x);
+_b=this.util.lineSub(pt.x,pt.y,px,py,(_9-_a));
+return {x:_b.x,y:_b.y,width:20};
+},setLabelZ:function(){
+var c=this.points[1];
+var z=this.points[3];
+var _c=40;
+var _d=20;
+var pt,px,py,_e;
+pt=this.util.lineSub(c.x,c.y,z.x,z.y,_c);
+px=pt.x+(pt.y-z.y);
+py=pt.y+(z.x-pt.x);
+_e=this.util.lineSub(pt.x,pt.y,px,py,(_c-_d));
+return {x:_e.x,y:_e.y,width:20};
+},setLabel:function(_f){
+if(this._labelsCreated){
+return;
+}
+!this.labelX&&this.createLabels();
+var x="x";
+var y="y";
+var z="z";
+if(_f){
+if(this.labelZ){
+var _10=_f.match(/(.*?)(and|&)(.*?)(and|&)(.*)/i);
+if(_10.length>4){
+x=_10[1].replace(/^\s+/,"").replace(/\s+$/,"");
+y=_10[3].replace(/^\s+/,"").replace(/\s+$/,"");
+z=_10[5].replace(/^\s+/,"").replace(/\s+$/,"");
+}
+}else{
+var _10=_f.match(/(.*?)(and|&)(.*)/i);
+if(_10.length>2){
+x=_10[1].replace(/^\s+/,"").replace(/\s+$/,"");
+y=_10[3].replace(/^\s+/,"").replace(/\s+$/,"");
+}
+}
+}
+this.labelX.setLabel(x);
+this.labelY.setLabel(y);
+if(this.labelZ){
+this.labelZ.setLabel(z);
+}
+this._labelsCreated=true;
+},getLabel:function(){
+if(!this.labelX){
+return null;
+}
+return {x:this.labelX.getText(),y:this.labelY.getText(),z:this.labelZ?this.labelZ.getText():null};
+},anchorPositionCheck:function(x,y,_11){
+var pm=this.container.getParent().getTransform();
+var am=_11.shape.getTransform();
+var p=this.points;
+var o={x:am.dx+_11.org.x+pm.dx,y:am.dy+_11.org.y+pm.dy};
+var c={x:p[1].x+pm.dx,y:p[1].y+pm.dy};
+var ox=c.x-(c.y-o.y);
+var oy=c.y-(o.x-c.x);
+return {x:ox,y:oy};
+},onTransformBegin:function(_12){
+this._isBeingModified=true;
+},onTransformEnd:function(_13){
+if(!_13){
+return;
+}
+this._isBeingModified=false;
+this._toggleSelected();
+var o=this.points[0];
+var c=this.points[1];
+var obj={start:{x:c.x,y:c.y},x:o.x,y:o.y};
+var pt=this.util.constrainAngle(obj,0,89);
+var zpt=this.style.zAxisEnabled?this.zPoint(obj):null;
+if(pt.x==o.x&&pt.y==o.y){
+pt=this.util.snapAngle(obj,this.angleSnap/180);
+obj.x=pt.x;
+obj.y=pt.y;
+var ox=obj.start.x-(obj.start.y-obj.y);
+var oy=obj.start.y-(obj.x-obj.start.x);
+if(ox<0||oy<0){
+console.warn("AXES ERROR LESS THAN ZERO - ABORT");
+return;
+}
+this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
+this.points.push({x:ox,y:oy,noAnchor:true});
+if(zpt){
+this.points.push(zpt);
+}
+this.setPoints(this.points);
+this.onModify(this);
+return;
+}
+this.points[0].x=pt.x;
+this.points[0].y=pt.y;
+o=this.points[0];
+var ox=c.x-(c.y-o.y);
+var oy=c.y-(o.x-c.x);
+this.points[2]={x:ox,y:oy,noAnchor:true};
+if(zpt){
+this.points.push(zpt);
+}
+this.setPoints(this.points);
+this.labelX.setLabel();
+this.labelY.setLabel();
+if(this.labelZ){
+this.labelZ.setLabel();
+}
+this.onModify(this);
+},getBounds:function(_14){
+var px=this.points[0],pc=this.points[1],py=this.points[2];
+if(this.style.zAxisEnabled){
+var pz=this.points[3];
+}
+if(_14){
+var _15={x:pc.x,y:pc.y,x1:pc.x,y1:pc.y,x2:px.x,y2:px.y,x3:py.x,y3:py.y};
+if(this.style.zAxisEnabled){
+_15.x4=pz.x;
+_15.y4=pz.y;
+}
+return _15;
+}
+var x1=this.style.zAxisEnabled?(py.x<pz.x?py.x:pz.x):py.x;
+y1=py.y<px.y?py.y:px.y,x2=px.x,y2=this.style.zAxisEnabled?pz.y:pc.y;
+return {x1:x1,y1:y1,x2:x2,y2:y2,x:x1,y:y1,w:x2-x1,h:y2-y1};
+},_postSetPoints:function(pts){
+this.points[0]=pts[0];
+if(this.pointsToData){
+this.data=this.pointsToData();
+}
+},onTransform:function(_16){
+var o=this.points[0];
+var c=this.points[1];
+var ox=c.x-(c.y-o.y);
+var oy=c.y-(o.x-c.x);
+this.points[2]={x:ox,y:oy,noAnchor:true};
+if(this.style.zAxisEnabled){
+this.points[3]=this.zPoint({start:{x:c.x,y:c.y},x:o.x,y:o.y});
+}
+this.setPoints(this.points);
+if(!this._isBeingModified){
+this.onTransformBegin();
+}
+this.render();
+},pointsToData:function(){
+var p=this.points;
+var d={x1:p[1].x,y1:p[1].y,x2:p[0].x,y2:p[0].y,x3:p[2].x,y3:p[2].y};
+if(this.style.zAxisEnabled){
+d.x4=p[3].x;
+d.y4=p[3].y;
+d.cosphi=1;
+}
+return d;
+},getRadius:function(){
+var p=this.points;
+var _17={start:{x:p[1].x,y:p[1].y},x:p[0].x,y:p[0].y};
+return this.util.length(_17);
+},dataToPoints:function(o){
+o=o||this.data;
+if(o.radius||o.angle){
+var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle),zpt;
+var ox=o.x-(o.y-pt.y);
+var oy=o.y-(pt.x-o.x);
+if((o.cosphi&&o.cosphi==1)||this.style.zAxisEnabled){
+this.style.zAxisEnabled=true;
+zpt=this.util.pointOnCircle(o.x,o.y,o.radius*this.zScale,this.style.zAngle);
+}
+this.data=o={x1:o.x,y1:o.y,x2:pt.x,y2:pt.y,x3:ox,y3:oy};
+if(this.style.zAxisEnabled){
+this.data.x4=o.x4=zpt.x;
+this.data.y4=o.y4=zpt.y;
+this.data.cosphi=1;
+}
+}
+this.points=[{x:o.x2,y:o.y2},{x:o.x1,y:o.y1,noAnchor:true},{x:o.x3,y:o.y3,noAnchor:true}];
+if(this.style.zAxisEnabled){
+this.points.push({x:o.x4,y:o.y4,skip:true,noAnchor:true});
+}
+return this.points;
+},onDrag:function(obj){
+var pt=this.util.constrainAngle(obj,0,89);
+obj.x=pt.x;
+obj.y=pt.y;
+var ox=obj.start.x-(obj.start.y-obj.y);
+var oy=obj.start.y-(obj.x-obj.start.x);
+if(ox<0||oy<0){
+return;
+}
+this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
+this.points.push({x:ox,y:oy,noAnchor:true});
+if(this.style.zAxisEnabled){
+var zpt=this.zPoint(obj);
+this.points.push(zpt);
+}
+this.render();
+},onUp:function(obj){
+if(!this._downOnCanvas){
+return;
+}
+this._downOnCanvas=false;
+var p=this.points;
+if(!p.length){
+var s=obj.start,d=100;
+this.points=[{x:s.x+d,y:s.y+d},{x:s.x,y:s.y+d,noAnchor:true},{x:s.x,y:s.y,noAnchor:true}];
+if(this.style.zAxisEnabled){
+var zpt=this.zPoint({start:{x:s.x,y:s.y+d},x:s.x+d,y:s.y+d});
+this.points.push(zpt);
+}
+this.setPoints=this._postSetPoints;
+this.pointsToData();
+this.render();
+this.onRender(this);
+return;
+}
+var len=this.util.distance(p[1].x,p[1].y,p[0].x,p[0].y);
+if(!p||!p.length){
+return;
+}else{
+if(len<this.minimumSize){
+this.remove(this.shape,this.hit);
+this.xArrow.remove(this.xArrow.shape,this.xArrow.hit);
+this.yArrow.remove(this.yArrow.shape,this.yArrow.hit);
+if(this.zArrow){
+this.zArrow.remove(this.zArrow.shape,this.zArrow.hit);
+}
+return;
+}
+}
+var o=p[0];
+var c=p[1];
+obj={start:{x:c.x,y:c.y},x:o.x,y:o.y};
+var pt=this.util.snapAngle(obj,this.angleSnap/180);
+obj.x=pt.x;
+obj.y=pt.y;
+var ox=obj.start.x-(obj.start.y-obj.y);
+var oy=obj.start.y-(obj.x-obj.start.x);
+if(ox<0||oy<0){
+return;
+}
+this.points=[{x:obj.x,y:obj.y},{x:obj.start.x,y:obj.start.y,noAnchor:true}];
+this.points.push({x:ox,y:oy,noAnchor:true});
+if(this.style.zAxisEnabled){
+this.points.push(this.zPoint(obj));
+}
+this.onRender(this);
+this.setPoints=this._postSetPoints;
+}});
+dojox.drawing.tools.custom.Axes.setup={name:"dojox.drawing.tools.custom.Axes",tooltip:"Axes Tool",iconClass:"iconAxes"};
+dojox.drawing.register(dojox.drawing.tools.custom.Axes.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/custom/Vector.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/custom/Vector.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/custom/Vector.js	(revision 9)
@@ -0,0 +1,232 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.custom.Vector"]){
+dojo._hasResource["dojox.drawing.tools.custom.Vector"]=true;
+dojo.provide("dojox.drawing.tools.custom.Vector");
+dojo.require("dojox.drawing.tools.Arrow");
+dojo.require("dojox.drawing.util.positioning");
+dojox.drawing.tools.custom.Vector=dojox.drawing.util.oo.declare(dojox.drawing.tools.Arrow,function(_1){
+this.minimumSize=this.style.arrows.length;
+this.addShadow({size:3,mult:2});
+},{draws:true,type:"dojox.drawing.tools.custom.Vector",minimumSize:30,showAngle:true,labelPosition:function(){
+var d=this.data;
+var pt=dojox.drawing.util.positioning.label({x:d.x1,y:d.y1},{x:d.x2,y:d.y2});
+return {x:pt.x,y:pt.y};
+},changeAxis:function(_2){
+_2=_2!==undefined?_2:this.style.zAxis?0:1;
+if(_2==0){
+this.style.zAxis=false;
+this.data.cosphi=0;
+}else{
+this.style.zAxis=true;
+var p=this.points;
+var pt=this.zPoint();
+this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
+}
+this.render();
+},_createZeroVector:function(_3,d,_4){
+var s=_3=="hit"?this.minimumSize:this.minimumSize/6;
+var f=_3=="hit"?_4.fill:null;
+d={cx:this.data.x1,cy:this.data.y1,rx:s,ry:s};
+this.remove(this[_3]);
+this[_3]=this.container.createEllipse(d).setStroke(_4).setFill(f);
+this.util.attr(this[_3],"drawingType","stencil");
+},_create:function(_5,d,_6){
+this.remove(this[_5]);
+this[_5]=this.container.createLine(d).setStroke(_6);
+this._setNodeAtts(this[_5]);
+},onDrag:function(_7){
+if(this.created){
+return;
+}
+var x1=_7.start.x,y1=_7.start.y,x2=_7.x,y2=_7.y;
+if(this.keys.shift&&!this.style.zAxis){
+var pt=this.util.snapAngle(_7,45/180);
+x2=pt.x;
+y2=pt.y;
+}
+if(this.keys.alt){
+var dx=x2>x1?((x2-x1)/2):((x1-x2)/-2);
+var dy=y2>y1?((y2-y1)/2):((y1-y2)/-2);
+x1-=dx;
+x2-=dx;
+y1-=dy;
+y2-=dy;
+}
+if(this.style.zAxis){
+var _8=this.zPoint(_7);
+x2=_8.x;
+y2=_8.y;
+}
+this.setPoints([{x:x1,y:y1},{x:x2,y:y2}]);
+this.render();
+},onTransform:function(_9){
+if(!this._isBeingModified){
+this.onTransformBegin();
+}
+this.setPoints(this.points);
+this.render();
+},anchorConstrain:function(x,y){
+if(!this.style.zAxis){
+return null;
+}
+var _a=this.style.zAngle*Math.PI/180;
+var _b=x<0?x>-y:x<-y;
+var dx=_b?x:-y/Math.tan(_a);
+var dy=!_b?y:-Math.tan(_a)*x;
+return {x:dx,y:dy};
+},zPoint:function(_c){
+if(_c===undefined){
+if(!this.points[0]){
+return null;
+}
+var d=this.pointsToData();
+_c={start:{x:d.x1,y:d.y1},x:d.x2,y:d.y2};
+}
+var _d=this.util.length(_c);
+var _e=this.util.angle(_c);
+_e<0?_e=360+_e:_e;
+_e=_e>135&&_e<315?this.style.zAngle:this.util.oppAngle(this.style.zAngle);
+return this.util.pointOnCircle(_c.start.x,_c.start.y,_d,_e);
+},pointsToData:function(p){
+p=p||this.points;
+var _f=0;
+var obj={start:{x:p[0].x,y:p[0].y},x:p[1].x,y:p[1].y};
+if(this.style.zAxis&&(this.util.length(obj)>this.minimumSize)){
+var _10=this.util.angle(obj);
+_10<0?_10=360+_10:_10;
+_f=_10>135&&_10<315?1:-1;
+}
+this.data={x1:p[0].x,y1:p[0].y,x2:p[1].x,y2:p[1].y,cosphi:_f};
+return this.data;
+},dataToPoints:function(o){
+o=o||this.data;
+if(o.radius||o.angle){
+var _11=0;
+var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle);
+if(this.style.zAxis||(o.cosphi&&o.cosphi!=0)){
+this.style.zAxis=true;
+_11=o.angle>135&&o.angle<315?1:-1;
+}
+this.data=o={x1:o.x,y1:o.y,x2:pt.x,y2:pt.y,cosphi:_11};
+}
+this.points=[{x:o.x1,y:o.y1},{x:o.x2,y:o.y2}];
+return this.points;
+},render:function(){
+this.onBeforeRender(this);
+if(this.getRadius()>=this.minimumSize){
+this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}else{
+this.data.cosphi=0;
+this._createZeroVector("hit",this.data,this.style.currentHit);
+this._createZeroVector("shape",this.data,this.style.current);
+}
+},onUp:function(obj){
+if(this.created||!this._downOnCanvas){
+return;
+}
+this._downOnCanvas=false;
+if(!this.shape){
+var d=100;
+obj.start.x=this.style.zAxis?obj.start.x+d:obj.start.x;
+obj.y=obj.y+d;
+this.setPoints([{x:obj.start.x,y:obj.start.y},{x:obj.x,y:obj.y}]);
+this.render();
+}
+if(this.getRadius()<this.minimumSize){
+var p=this.points;
+this.setPoints([{x:p[0].x,y:p[0].y},{x:p[0].x,y:p[0].y}]);
+}else{
+var p=this.points;
+var pt=this.style.zAxis?this.zPoint(obj):this.util.snapAngle(obj,this.angleSnap/180);
+this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
+}
+this.renderedOnce=true;
+this.onRender(this);
+}});
+dojox.drawing.tools.custom.Vector.setup={name:"dojox.drawing.tools.custom.Vector",tooltip:"Vector Tool",iconClass:"iconVector"};
+if(dojox.drawing.defaults.zAxisEnabled){
+dojox.drawing.tools.custom.Vector.setup.secondary={name:"vectorSecondary",label:"z-axis",funct:function(_12){
+_12.selected?this.zDeselect(_12):this.zSelect(_12);
+var _13=this.drawing.stencils.selectedStencils;
+for(var nm in _13){
+if(_13[nm].shortType=="vector"&&(_13[nm].style.zAxis!=dojox.drawing.defaults.zAxis)){
+var s=_13[nm];
+s.changeAxis();
+if(s.style.zAxis){
+s.deselect();
+s.select();
+}
+}
+}
+},setup:function(){
+var _14=dojox.drawing.defaults.zAxis;
+this.zSelect=function(_15){
+if(!_15.enabled){
+return;
+}
+_14=true;
+dojox.drawing.defaults.zAxis=true;
+_15.select();
+this.vectorTest();
+this.zSelected=_15;
+};
+this.zDeselect=function(_16){
+if(!_16.enabled){
+return;
+}
+_14=false;
+dojox.drawing.defaults.zAxis=false;
+_16.deselect();
+this.vectorTest();
+this.zSelected=null;
+};
+this.vectorTest=function(){
+dojo.forEach(this.buttons,function(b){
+if(b.toolType=="vector"&&b.selected){
+this.drawing.currentStencil.style.zAxis=_14;
+}
+},this);
+};
+dojo.connect(this,"onRenderStencil",this,function(){
+if(this.zSelected){
+this.zDeselect(this.zSelected);
+}
+});
+var c=dojo.connect(this.drawing,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+dojo.connect(this.drawing.stencils,"onSelect",this,function(_17){
+if(_17.shortType=="vector"){
+if(_17.style.zAxis){
+dojo.forEach(this.buttons,function(b){
+if(b.toolType=="vectorSecondary"){
+this.zSelect(b);
+}
+},this);
+}else{
+dojo.forEach(this.buttons,function(b){
+if(b.toolType=="vectorSecondary"){
+this.zDeselect(b);
+}
+},this);
+}
+}
+});
+});
+},postSetup:function(btn){
+dojo.connect(btn,"enable",function(){
+dojox.drawing.defaults.zAxisEnabled=true;
+});
+dojo.connect(btn,"disable",function(){
+dojox.drawing.defaults.zAxisEnabled=false;
+});
+}};
+}
+dojox.drawing.register(dojox.drawing.tools.custom.Vector.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/custom/Equation.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/custom/Equation.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/custom/Equation.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.custom.Equation"]){
+dojo._hasResource["dojox.drawing.tools.custom.Equation"]=true;
+dojo.provide("dojox.drawing.tools.custom.Equation");
+dojo.require("dojox.drawing.tools.TextBlock");
+dojox.drawing.tools.custom.Equation=dojox.drawing.util.oo.declare(dojox.drawing.tools.TextBlock,function(_1){
+},{customType:"equation"});
+dojox.drawing.tools.custom.Equation.setup={name:"dojox.drawing.tools.custom.Equation",tooltip:"Equation Tool",iconClass:"iconEq"};
+dojox.drawing.register(dojox.drawing.tools.custom.Equation.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/Line.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/Line.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/Line.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Line"]){
+dojo._hasResource["dojox.drawing.tools.Line"]=true;
+dojo.provide("dojox.drawing.tools.Line");
+dojox.drawing.tools.Line=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Line,function(){
+},{draws:true,showAngle:true,onTransformEnd:function(_1){
+this._toggleSelected();
+if(this.getRadius()<this.minimumSize){
+var p=this.points;
+this.setPoints([{x:p[0].x,y:p[0].y},{x:p[0].x,y:p[0].y}]);
+}else{
+var d=this.data;
+var _2={start:{x:d.x1,y:d.y1},x:d.x2,y:d.y2};
+var pt=this.util.snapAngle(_2,this.angleSnap/180);
+this.setPoints([{x:d.x1,y:d.y1},{x:pt.x,y:pt.y}]);
+this._isBeingModified=false;
+this.onModify(this);
+}
+},onDrag:function(_3){
+if(this.created){
+return;
+}
+var x1=_3.start.x,y1=_3.start.y,x2=_3.x,y2=_3.y;
+if(this.keys.shift){
+var pt=this.util.snapAngle(_3,45/180);
+x2=pt.x;
+y2=pt.y;
+}
+if(this.keys.alt){
+var dx=x2>x1?((x2-x1)/2):((x1-x2)/-2);
+var dy=y2>y1?((y2-y1)/2):((y1-y2)/-2);
+x1-=dx;
+x2-=dx;
+y1-=dy;
+y2-=dy;
+}
+this.setPoints([{x:x1,y:y1},{x:x2,y:y2}]);
+this.render();
+},onUp:function(_4){
+if(this.created||!this._downOnCanvas){
+return;
+}
+this._downOnCanvas=false;
+if(!this.shape){
+var s=_4.start,e=this.minimumSize*4;
+this.setPoints([{x:s.x,y:s.y+e},{x:s.x,y:s.y}]);
+this.render();
+}else{
+if(this.getRadius()<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+}
+var pt=this.util.snapAngle(_4,this.angleSnap/180);
+var p=this.points;
+this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
+this.renderedOnce=true;
+this.onRender(this);
+}});
+dojox.drawing.tools.Line.setup={name:"dojox.drawing.tools.Line",tooltip:"Line Tool",iconClass:"iconLine"};
+dojox.drawing.register(dojox.drawing.tools.Line.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/Arrow.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/Arrow.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/Arrow.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Arrow"]){
+dojo._hasResource["dojox.drawing.tools.Arrow"]=true;
+dojo.provide("dojox.drawing.tools.Arrow");
+dojox.drawing.tools.Arrow=dojox.drawing.util.oo.declare(dojox.drawing.tools.Line,function(_1){
+if(this.arrowStart){
+this.begArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:0,idx2:1});
+}
+if(this.arrowEnd){
+this.endArrow=new dojox.drawing.annotations.Arrow({stencil:this,idx1:1,idx2:0});
+}
+if(this.points.length){
+this.render();
+}
+},{draws:true,type:"dojox.drawing.tools.Arrow",baseRender:false,arrowStart:false,arrowEnd:true,onUp:function(_2){
+if(this.created||!this.shape){
+return;
+}
+var p=this.points;
+var _3=this.util.distance(p[0].x,p[0].y,p[1].x,p[1].y);
+if(_3<this.minimumSize){
+this.remove(this.shape,this.hit);
+return;
+}
+var pt=this.util.snapAngle(_2,this.angleSnap/180);
+this.setPoints([{x:p[0].x,y:p[0].y},{x:pt.x,y:pt.y}]);
+this.renderedOnce=true;
+this.onRender(this);
+}});
+dojox.drawing.tools.Arrow.setup={name:"dojox.drawing.tools.Arrow",tooltip:"Arrow Tool",iconClass:"iconArrow"};
+dojox.drawing.register(dojox.drawing.tools.Arrow.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/tools/Pencil.js
===================================================================
--- trunk/web/dojo/dojox/drawing/tools/Pencil.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/tools/Pencil.js	(revision 9)
@@ -0,0 +1,56 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.tools.Pencil"]){
+dojo._hasResource["dojox.drawing.tools.Pencil"]=true;
+dojo.provide("dojox.drawing.tools.Pencil");
+dojox.drawing.tools.Pencil=dojox.drawing.util.oo.declare(dojox.drawing.stencil.Path,function(){
+this._started=false;
+},{draws:true,minDist:15,onDown:function(_1){
+this._started=true;
+var p={x:_1.x,y:_1.y};
+this.points=[p];
+this.lastPoint=p;
+this.revertRenderHit=this.renderHit;
+this.renderHit=false;
+this.closePath=false;
+},onDrag:function(_2){
+if(!this._started||this.minDist>this.util.distance(_2.x,_2.y,this.lastPoint.x,this.lastPoint.y)){
+return;
+}
+var p={x:_2.x,y:_2.y};
+this.points.push(p);
+this.render();
+this.checkClosePoint(this.points[0],_2);
+this.lastPoint=p;
+},onUp:function(_3){
+if(!this._started){
+return;
+}
+if(!this.points||this.points.length<2){
+this._started=false;
+this.points=[];
+return;
+}
+var _4=this.getBounds();
+if(_4.w<this.minimumSize&&_4.h<this.minimumSize){
+this.remove(this.hit,this.shape,this.closeGuide);
+this._started=false;
+this.setPoints([]);
+return;
+}
+if(this.checkClosePoint(this.points[0],_3,true)){
+this.closePath=true;
+}
+this.renderHit=this.revertRenderHit;
+this.renderedOnce=true;
+this.render();
+this.onRender(this);
+}});
+dojox.drawing.tools.Pencil.setup={name:"dojox.drawing.tools.Pencil",tooltip:"Pencil Tool",iconClass:"iconLine"};
+dojox.drawing.register(dojox.drawing.tools.Pencil.setup,"tool");
+}
Index: trunk/web/dojo/dojox/drawing/plugins/drawing/Silverlight.js
===================================================================
--- trunk/web/dojo/dojox/drawing/plugins/drawing/Silverlight.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/plugins/drawing/Silverlight.js	(revision 9)
@@ -0,0 +1,138 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.drawing.Silverlight"]){
+dojo._hasResource["dojox.drawing.plugins.drawing.Silverlight"]=true;
+dojo.provide("dojox.drawing.plugins.drawing.Silverlight");
+dojox.drawing.plugins.drawing.Silverlight=dojox.drawing.util.oo.declare(function(_1){
+if(dojox.gfx.renderer!="silverlight"){
+return;
+}
+this.mouse=_1.mouse;
+this.stencils=_1.stencils;
+this.anchors=_1.anchors;
+this.canvas=_1.canvas;
+this.util=_1.util;
+dojo.connect(this.stencils,"register",this,function(_2){
+var c1,c2,c3,c4,c5,_3=this;
+var _4=function(){
+c1=_2.container.connect("onmousedown",function(_5){
+_5.superTarget=_2;
+_3.mouse.down(_5);
+});
+};
+_4();
+c2=dojo.connect(_2,"setTransform",this,function(){
+});
+c3=dojo.connect(_2,"onBeforeRender",function(){
+});
+c4=dojo.connect(_2,"onRender",this,function(){
+});
+c5=dojo.connect(_2,"destroy",this,function(){
+dojo.forEach([c1,c2,c3,c4,c5],dojo.disconnect,dojo);
+});
+});
+dojo.connect(this.anchors,"onAddAnchor",this,function(_6){
+var c1=_6.shape.connect("onmousedown",this.mouse,function(_7){
+_7.superTarget=_6;
+this.down(_7);
+});
+var c2=dojo.connect(_6,"disconnectMouse",this,function(){
+dojo.disconnect(c1);
+dojo.disconnect(c2);
+});
+});
+this.mouse._down=function(_8){
+var _9=this._getXY(_8);
+var x=_9.x-this.origin.x;
+var y=_9.y-this.origin.y;
+x*=this.zoom;
+y*=this.zoom;
+this.origin.startx=x;
+this.origin.starty=y;
+this._lastx=x;
+this._lasty=y;
+this.drawingType=this.util.attr(_8,"drawingType")||"";
+var id=this._getId(_8);
+var _a={x:x,y:y,id:id};
+this.onDown(_a);
+this._clickTime=new Date().getTime();
+if(this._lastClickTime){
+if(this._clickTime-this._lastClickTime<this.doublClickSpeed){
+var _b=this.eventName("doubleClick");
+console.warn("DOUBLE CLICK",_b,_a);
+this._broadcastEvent(_b,_a);
+}else{
+}
+}
+this._lastClickTime=this._clickTime;
+};
+this.mouse.down=function(_c){
+clearTimeout(this.__downInv);
+if(this.util.attr(_c,"drawingType")=="surface"){
+this.__downInv=setTimeout(dojo.hitch(this,function(){
+this._down(_c);
+}),500);
+return;
+}
+this._down(_c);
+};
+this.mouse._getXY=function(_d){
+if(_d.pageX){
+return {x:_d.pageX,y:_d.pageY,cancelBubble:true};
+}
+for(var nm in _d){
+}
+if(_d.x!==undefined){
+return {x:_d.x+this.origin.x,y:_d.y+this.origin.y};
+}else{
+return {x:_d.pageX,y:_d.pageY};
+}
+};
+this.mouse._getId=function(_e){
+return this.util.attr(_e,"id");
+};
+this.util.attr=function(_f,_10,_11,_12){
+if(!_f){
+return false;
+}
+try{
+var t;
+if(_f.superTarget){
+t=_f.superTarget;
+}else{
+if(_f.superClass){
+t=_f.superClass;
+}else{
+if(_f.target){
+t=_f.target;
+}else{
+t=_f;
+}
+}
+}
+if(_11!==undefined){
+_f[_10]=_11;
+return _11;
+}
+if(t.tagName){
+if(_10=="drawingType"&&t.tagName.toLowerCase()=="object"){
+return "surface";
+}
+var r=dojo.attr(t,_10);
+}
+var r=t[_10];
+return r;
+}
+catch(e){
+if(!_12){
+}
+return false;
+}
+};
+},{});
+}
Index: trunk/web/dojo/dojox/drawing/plugins/drawing/Grid.js
===================================================================
--- trunk/web/dojo/dojox/drawing/plugins/drawing/Grid.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/plugins/drawing/Grid.js	(revision 9)
@@ -0,0 +1,54 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.drawing.Grid"]){
+dojo._hasResource["dojox.drawing.plugins.drawing.Grid"]=true;
+dojo.provide("dojox.drawing.plugins.drawing.Grid");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins.drawing.Grid=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+if(_1.gap){
+this.major=_1.gap;
+}
+this.majorColor=_1.majorColor||this.majorColor;
+this.minorColor=_1.minorColor||this.minorColor;
+this.setGrid();
+dojo.connect(this.canvas,"setZoom",this,"setZoom");
+},{type:"dojox.drawing.plugins.drawing.Grid",gap:100,major:100,minor:0,majorColor:"#00ffff",minorColor:"#d7ffff",zoom:1,setZoom:function(_2){
+this.zoom=_2;
+this.setGrid();
+},setGrid:function(_3){
+var _4=Math.floor(this.major*this.zoom);
+var _5=this.minor?Math.floor(this.minor*this.zoom):_4;
+this.grid&&this.grid.removeShape();
+var x1,x2,y1,y2,i,_6,_7;
+var s=this.canvas.underlay.createGroup();
+var w=2000;
+var h=1000;
+var b=1;
+var mj=this.majorColor;
+var mn=this.minorColor;
+var _8=function(x1,y1,x2,y2,c){
+s.createLine({x1:x1,y1:y1,x2:x2,y2:y2}).setStroke({style:"Solid",width:b,cap:"round",color:c});
+};
+for(i=1,_7=h/_5;i<_7;i++){
+x1=0,x2=w;
+y1=_5*i,y2=y1;
+_6=y1%_4?mn:mj;
+_8(x1,y1,x2,y2,_6);
+}
+for(i=1,_7=w/_5;i<_7;i++){
+y1=0,y2=h;
+x1=_5*i,x2=x1;
+_6=x1%_4?mn:mj;
+_8(x1,y1,x2,y2,_6);
+}
+s.moveToBack();
+this.grid=s;
+this.util.attr(s,"id","grid");
+return s;
+}});
+}
Index: trunk/web/dojo/dojox/drawing/plugins/tools/Pan.js
===================================================================
--- trunk/web/dojo/dojox/drawing/plugins/tools/Pan.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/plugins/tools/Pan.js	(revision 9)
@@ -0,0 +1,148 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.tools.Pan"]){
+dojo._hasResource["dojox.drawing.plugins.tools.Pan"]=true;
+dojo.provide("dojox.drawing.plugins.tools.Pan");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins.tools.Pan=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+this.domNode=_1.node;
+var _2;
+this.toolbar=_1.scope;
+this.connect(this.toolbar,"onToolClick",this,function(){
+this.onSetPan(false);
+});
+this.connect(this.keys,"onKeyUp",this,"onKeyUp");
+this.connect(this.keys,"onKeyDown",this,"onKeyDown");
+this.connect(this.keys,"onArrow",this,"onArrow");
+this.connect(this.anchors,"onAnchorUp",this,"checkBounds");
+this.connect(this.stencils,"register",this,"checkBounds");
+this.connect(this.canvas,"resize",this,"checkBounds");
+this.connect(this.canvas,"setZoom",this,"checkBounds");
+this.connect(this.canvas,"onScroll",this,function(){
+if(this._blockScroll){
+this._blockScroll=false;
+return;
+}
+_2&&clearTimeout(_2);
+_2=setTimeout(dojo.hitch(this,"checkBounds"),200);
+});
+this._mouseHandle=this.mouse.register(this);
+},{selected:false,keyScroll:false,type:"dojox.drawing.plugins.tools.Pan",onPanUp:function(_3){
+if(_3.id==this.button.id){
+this.onSetPan(false);
+}
+},onKeyUp:function(_4){
+switch(_4.keyCode){
+case 32:
+this.onSetPan(false);
+break;
+case 39:
+case 37:
+case 38:
+case 40:
+clearInterval(this._timer);
+break;
+}
+},onKeyDown:function(_5){
+if(_5.keyCode==32){
+this.onSetPan(true);
+}
+},interval:20,onArrow:function(_6){
+if(this._timer){
+clearInterval(this._timer);
+}
+this._timer=setInterval(dojo.hitch(this,function(_7){
+this.canvas.domNode.parentNode.scrollLeft+=_7.x*10;
+this.canvas.domNode.parentNode.scrollTop+=_7.y*10;
+},_6),this.interval);
+},onSetPan:function(_8){
+if(_8===true||_8===false){
+this.selected=!_8;
+}
+if(this.selected){
+this.selected=false;
+this.button.deselect();
+}else{
+this.selected=true;
+this.button.select();
+}
+this.mouse.setEventMode(this.selected?"pan":"");
+},onPanDrag:function(_9){
+var x=_9.x-_9.last.x;
+var y=_9.y-_9.last.y;
+this.canvas.domNode.parentNode.scrollTop-=_9.move.y;
+this.canvas.domNode.parentNode.scrollLeft-=_9.move.x;
+this.canvas.onScroll();
+},onUp:function(_a){
+if(_a.withinCanvas){
+this.keyScroll=true;
+}else{
+this.keyScroll=false;
+}
+},onStencilUp:function(_b){
+this.checkBounds();
+},onStencilDrag:function(_c){
+},checkBounds:function(){
+var _d=function(){
+};
+var _e=function(){
+};
+var t=Infinity,r=-Infinity,b=-10000,l=10000,sx=0,sy=0,dy=0,dx=0,mx=this.stencils.group?this.stencils.group.getTransform():{dx:0,dy:0},sc=this.mouse.scrollOffset(),_f=sc.left?10:0,scX=sc.top?10:0,ch=this.canvas.height,cw=this.canvas.width,z=this.canvas.zoom,pch=this.canvas.parentHeight,pcw=this.canvas.parentWidth;
+this.stencils.withSelected(function(m){
+var o=m.getBounds();
+_e("SEL BOUNDS:",o);
+t=Math.min(o.y1+mx.dy,t);
+r=Math.max(o.x2+mx.dx,r);
+b=Math.max(o.y2+mx.dy,b);
+l=Math.min(o.x1+mx.dx,l);
+});
+this.stencils.withUnselected(function(m){
+var o=m.getBounds();
+_e("UN BOUNDS:",o);
+t=Math.min(o.y1,t);
+r=Math.max(o.x2,r);
+b=Math.max(o.y2,b);
+l=Math.min(o.x1,l);
+_d("----------- B:",b,o.y2);
+});
+b*=z;
+var _10=0,_11=0;
+_d("Bottom test","b:",b,"z:",z,"ch:",ch,"pch:",pch,"top:",sc.top,"sy:",sy,"mx.dy:",mx.dy);
+if(b>pch||sc.top){
+_d("*bottom scroll*");
+ch=Math.max(b,pch+sc.top);
+sy=sc.top;
+_10+=this.canvas.getScrollWidth();
+}else{
+if(!sy&&ch>pch){
+_d("*bottom remove*");
+ch=pch;
+}
+}
+r*=z;
+if(r>pcw||sc.left){
+cw=Math.max(r,pcw+sc.left);
+sx=sc.left;
+_11+=this.canvas.getScrollWidth();
+}else{
+if(!sx&&cw>pcw){
+cw=pcw;
+}
+}
+cw+=_10*2;
+ch+=_11*2;
+this._blockScroll=true;
+this.stencils.group&&this.stencils.group.applyTransform({dx:dx,dy:dy});
+this.stencils.withUnselected(function(m){
+m.transformPoints({dx:dx,dy:dy});
+});
+this.canvas.setDimensions(cw,ch,sx,sy);
+}});
+dojox.drawing.plugins.tools.Pan.setup={name:"dojox.drawing.plugins.tools.Pan",tooltip:"Pan Tool",iconClass:"iconPan",button:false};
+dojox.drawing.register(dojox.drawing.plugins.tools.Pan.setup,"plugin");
+}
Index: trunk/web/dojo/dojox/drawing/plugins/tools/Iconize.js
===================================================================
--- trunk/web/dojo/dojox/drawing/plugins/tools/Iconize.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/plugins/tools/Iconize.js	(revision 9)
@@ -0,0 +1,78 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.tools.Iconize"]){
+dojo._hasResource["dojox.drawing.plugins.tools.Iconize"]=true;
+dojo.provide("dojox.drawing.plugins.tools.Iconize");
+dojo.require("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins.tools.Iconize=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_1){
+},{onClick:function(){
+var _2;
+for(var nm in this.stencils.stencils){
+if(this.stencils.stencils[nm].shortType=="path"){
+_2=this.stencils.stencils[nm];
+break;
+}
+}
+if(_2){
+this.makeIcon(_2.points);
+}
+},makeIcon:function(p){
+var _3=function(n){
+return Number(n.toFixed(1));
+};
+var x=10000;
+var y=10000;
+p.forEach(function(pt){
+if(pt.x!==undefined&&!isNaN(pt.x)){
+x=Math.min(x,pt.x);
+y=Math.min(y,pt.y);
+}
+});
+var _4=0;
+var _5=0;
+p.forEach(function(pt){
+if(pt.x!==undefined&&!isNaN(pt.x)){
+pt.x=_3(pt.x-x);
+pt.y=_3(pt.y-y);
+_4=Math.max(_4,pt.x);
+_5=Math.max(_5,pt.y);
+}
+});
+var s=60;
+var m=20;
+p.forEach(function(pt){
+pt.x=_3(pt.x/_4)*s+m;
+pt.y=_3(pt.y/_5)*s+m;
+});
+var _6="[\n";
+dojo.forEach(p,function(pt,i){
+_6+="{\t";
+if(pt.t){
+_6+="t:'"+pt.t+"'";
+}
+if(pt.x!==undefined&&!isNaN(pt.x)){
+if(pt.t){
+_6+=", ";
+}
+_6+="x:"+pt.x+",\t\ty:"+pt.y;
+}
+_6+="\t}";
+if(i!=p.length-1){
+_6+=",";
+}
+_6+="\n";
+});
+_6+="]";
+var n=dojo.byId("data");
+if(n){
+n.value=_6;
+}
+}});
+dojox.drawing.plugins.tools.Iconize.setup={name:"dojox.drawing.plugins.tools.Iconize",tooltip:"Iconize Tool",iconClass:"iconPan"};
+dojox.drawing.register(dojox.drawing.plugins.tools.Iconize.setup,"plugin");
+}
Index: trunk/web/dojo/dojox/drawing/plugins/tools/Zoom.js
===================================================================
--- trunk/web/dojo/dojox/drawing/plugins/tools/Zoom.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/plugins/tools/Zoom.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins.tools.Zoom"]){
+dojo._hasResource["dojox.drawing.plugins.tools.Zoom"]=true;
+dojo.provide("dojox.drawing.plugins.tools.Zoom");
+dojo.require("dojox.drawing.plugins._Plugin");
+(function(){
+var _1=Math.pow(2,0.25),_2=10,_3=0.1,_4=1,dt=dojox.drawing.plugins.tools;
+dt.ZoomIn=dojox.drawing.util.oo.declare(function(_5){
+},{});
+dt.ZoomIn=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_6){
+},{type:"dojox.drawing.plugins.tools.ZoomIn",onZoomIn:function(){
+_4*=_1;
+_4=Math.min(_4,_2);
+this.canvas.setZoom(_4);
+this.mouse.setZoom(_4);
+},onClick:function(){
+this.onZoomIn();
+}});
+dt.Zoom100=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_7){
+},{type:"dojox.drawing.plugins.tools.Zoom100",onZoom100:function(){
+_4=1;
+this.canvas.setZoom(_4);
+this.mouse.setZoom(_4);
+},onClick:function(){
+this.onZoom100();
+}});
+dt.ZoomOut=dojox.drawing.util.oo.declare(dojox.drawing.plugins._Plugin,function(_8){
+},{type:"dojox.drawing.plugins.tools.ZoomOut",onZoomOut:function(){
+_4/=_1;
+_4=Math.max(_4,_3);
+this.canvas.setZoom(_4);
+this.mouse.setZoom(_4);
+},onClick:function(){
+this.onZoomOut();
+}});
+dt.ZoomIn.setup={name:"dojox.drawing.plugins.tools.ZoomIn",tooltip:"Zoom In"};
+dojox.drawing.register(dt.ZoomIn.setup,"plugin");
+dt.Zoom100.setup={name:"dojox.drawing.plugins.tools.Zoom100",tooltip:"Zoom to 100%"};
+dojox.drawing.register(dt.Zoom100.setup,"plugin");
+dt.ZoomOut.setup={name:"dojox.drawing.plugins.tools.ZoomOut",tooltip:"Zoom In"};
+dojox.drawing.register(dt.ZoomOut.setup,"plugin");
+})();
+}
Index: trunk/web/dojo/dojox/drawing/plugins/_Plugin.js
===================================================================
--- trunk/web/dojo/dojox/drawing/plugins/_Plugin.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/plugins/_Plugin.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.plugins._Plugin"]){
+dojo._hasResource["dojox.drawing.plugins._Plugin"]=true;
+dojo.provide("dojox.drawing.plugins._Plugin");
+dojox.drawing.plugins._Plugin=dojox.drawing.util.oo.declare(function(_1){
+this._cons=[];
+dojo.mixin(this,_1);
+if(this.button&&this.onClick){
+this.connect(this.button,"onClick",this,"onClick");
+}
+},{util:null,keys:null,mouse:null,drawing:null,stencils:null,anchors:null,canvas:null,node:null,button:null,type:"dojox.drawing.plugins._Plugin",connect:function(){
+this._cons.push(dojo.connect.apply(dojo,arguments));
+},disconnect:function(_2){
+if(!_2){
+return;
+}
+if(!dojo.isArray(_2)){
+_2=[_2];
+}
+dojo.forEach(_2,dojo.disconnect,dojo);
+}});
+}
Index: trunk/web/dojo/dojox/drawing/stencil/Line.js
===================================================================
--- trunk/web/dojo/dojox/drawing/stencil/Line.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/stencil/Line.js	(revision 9)
@@ -0,0 +1,34 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Line"]){
+dojo._hasResource["dojox.drawing.stencil.Line"]=true;
+dojo.provide("dojox.drawing.stencil.Line");
+dojox.drawing.stencil.Line=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Line",anchorType:"single",baseRender:true,dataToPoints:function(o){
+o=o||this.data;
+if(o.radius||o.angle){
+var pt=this.util.pointOnCircle(o.x,o.y,o.radius,o.angle);
+this.data=o={x1:o.x,y1:o.y,x2:pt.x,y2:pt.y};
+}
+this.points=[{x:o.x1,y:o.y1},{x:o.x2,y:o.y2}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+this.data={x1:p[0].x,y1:p[0].y,x2:p[1].x,y2:p[1].y};
+return this.data;
+},_create:function(_2,d,_3){
+this.remove(this[_2]);
+this[_2]=this.container.createLine(d).setStroke(_3);
+this._setNodeAtts(this[_2]);
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Line"},"stencil");
+}
Index: trunk/web/dojo/dojox/drawing/stencil/_Base.js
===================================================================
--- trunk/web/dojo/dojox/drawing/stencil/_Base.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/stencil/_Base.js	(revision 9)
@@ -0,0 +1,575 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil._Base"]){
+dojo._hasResource["dojox.drawing.stencil._Base"]=true;
+dojo.provide("dojox.drawing.stencil._Base");
+dojo.require("dojo.fx.easing");
+dojox.drawing.stencil._Base=dojox.drawing.util.oo.declare(function(_1){
+dojo.mixin(this,_1);
+this.style=_1.style||dojox.drawing.defaults.copy();
+if(_1.stencil){
+this.stencil=_1.stencil;
+this.util=_1.stencil.util;
+this.mouse=_1.stencil.mouse;
+this.container=_1.stencil.container;
+this.style=_1.stencil.style;
+}
+var _2=/Line|Vector|Axes|Arrow/;
+var _3=/Text/;
+this.shortType=this.util.abbr(this.type);
+this.isText=_3.test(this.type);
+this.isLine=_2.test(this.type);
+this.renderHit=this.style.renderHitLayer;
+if(!this.renderHit&&this.style.renderHitLines&&this.isLine){
+this.renderHit=true;
+}
+if(!this.renderHit&&this.style.useSelectedStyle){
+this.useSelectedStyle=true;
+this.selCopy=dojo.clone(this.style.selected);
+for(var nm in this.style.norm){
+if(this.style.selected[nm]===undefined){
+this.style.selected[nm]=this.style.norm[nm];
+}
+}
+this.textSelected=dojo.clone(this.style.text);
+this.textSelected.color=this.style.selected.fill;
+}
+this.angleSnap=this.style.angleSnap||1;
+this.marginZero=_1.marginZero||this.style.anchors.marginZero;
+this.id=_1.id||this.util.uid(this.type);
+this._cons=[];
+if(!this.annotation&&!this.subShape){
+this.util.attr(this.container,"id",this.id);
+}
+this.connect(this,"onBeforeRender","preventNegativePos");
+this._offX=this.mouse.origin.x;
+this._offY=this.mouse.origin.y;
+if(this.isText){
+this.align=_1.align||this.align;
+this.valign=_1.valign||this.valign;
+if(_1.data&&_1.data.makeFit){
+var _4=this.makeFit(_1.data.text,_1.data.width);
+this.textSize=this.style.text.size=_4.size;
+this._lineHeight=_4.box.h;
+}else{
+this.textSize=parseInt(this.style.text.size,10);
+this._lineHeight=this.textSize*1.4;
+}
+this.deleteEmptyCreate=_1.deleteEmptyCreate!==undefined?_1.deleteEmptyCreate:this.style.text.deleteEmptyCreate;
+this.deleteEmptyModify=_1.deleteEmptyModify!==undefined?_1.deleteEmptyModify:this.style.text.deleteEmptyModify;
+}
+this.attr(_1.data);
+if(this.noBaseRender){
+return;
+}
+if(_1.points){
+if(_1.data&&_1.data.closePath===false){
+this.closePath=false;
+}
+this.setPoints(_1.points);
+this.connect(this,"render",this,"onRender",true);
+this.baseRender&&this.enabled&&this.render();
+_1.label&&this.setLabel(_1.label);
+_1.shadow&&this.addShadow(_1.shadow);
+}else{
+if(_1.data){
+_1.data.width=_1.data.width?_1.data.width:this.style.text.minWidth;
+_1.data.height=_1.data.height?_1.data.height:this._lineHeight;
+this.setData(_1.data);
+this.connect(this,"render",this,"onRender",true);
+this.baseRender&&this.enabled&&this.render(_1.data.text);
+this.baseRender&&_1.label&&this.setLabel(_1.label);
+this.baseRender&&_1.shadow&&this.addShadow(_1.shadow);
+}else{
+if(this.draws){
+this.points=[];
+this.data={};
+this.connectMouse();
+this._postRenderCon=dojo.connect(this,"render",this,"_onPostRender");
+}
+}
+}
+if(this.showAngle){
+this.angleLabel=new dojox.drawing.annotations.Angle({stencil:this});
+}
+if(!this.enabled){
+this.disable();
+this.moveToBack();
+this.render(_1.data.text);
+}
+},{type:"dojox.drawing.stencil",minimumSize:10,enabled:true,drawingType:"stencil",setData:function(_5){
+this.data=_5;
+this.points=this.dataToPoints();
+},setPoints:function(_6){
+this.points=_6;
+if(this.pointsToData){
+this.data=this.pointsToData();
+}
+},onDelete:function(_7){
+},onBeforeRender:function(_8){
+},onModify:function(_9){
+},onChangeData:function(_a){
+},onChangeText:function(_b){
+},onRender:function(_c){
+this._postRenderCon=dojo.connect(this,"render",this,"_onPostRender");
+this.created=true;
+this.disconnectMouse();
+if(this.shape){
+this.shape.superClass=this;
+}else{
+this.container.superClass=this;
+}
+this._setNodeAtts(this);
+},onChangeStyle:function(_d){
+this._isBeingModified=true;
+if(!this.enabled){
+this.style.current=this.style.disabled;
+this.style.currentText=this.style.textDisabled;
+this.style.currentHit=this.style.hitNorm;
+}else{
+this.style.current=this.style.norm;
+this.style.currentHit=this.style.hitNorm;
+this.style.currentText=this.style.text;
+}
+if(this.selected){
+if(this.useSelectedStyle){
+this.style.current=this.style.selected;
+this.style.currentText=this.textSelected;
+}
+this.style.currentHit=this.style.hitSelected;
+}else{
+if(this.highlighted){
+this.style.currentHit=this.style.hitHighlighted;
+}
+}
+this.render();
+},animate:function(_e,_f){
+console.warn("ANIMATE..........................");
+var d=_e.d||_e.duration||1000;
+var ms=_e.ms||20;
+var _10=_e.ease||dojo.fx.easing.linear;
+var _11=_e.steps;
+var ts=new Date().getTime();
+var w=100;
+var cnt=0;
+var _12=true;
+var sp,ep;
+if(dojo.isArray(_e.start)){
+sp=_e.start;
+ep=_e.end;
+}else{
+if(dojo.isObject(_e.start)){
+sp=_e.start;
+ep=_e.end;
+_12=false;
+}else{
+console.warn("No data provided to animate");
+}
+}
+var v=setInterval(dojo.hitch(this,function(){
+var t=new Date().getTime()-ts;
+var p=_10(1-t/d);
+if(t>d||cnt++>100){
+clearInterval(v);
+return;
+}
+if(_12){
+var _13=[];
+dojo.forEach(sp,function(pt,i){
+var o={x:(ep[i].x-sp[i].x)*p+sp[i].x,y:(ep[i].y-sp[i].y)*p+sp[i].y};
+_13.push(o);
+});
+this.setPoints(_13);
+this.render();
+}else{
+var o={};
+for(var nm in sp){
+o[nm]=(ep[nm]-sp[nm])*p+sp[nm];
+}
+this.attr(o);
+}
+}),ms);
+},attr:function(key,_14){
+var n=this.enabled?this.style.norm:this.style.disabled;
+var t=this.enabled?this.style.text:this.style.textDisabled;
+var ts=this.textSelected||{},o,nm,_15,_16=dojo.toJson(n),_17=dojo.toJson(t);
+var _18={x:true,y:true,r:true,height:true,width:true,radius:true,angle:true};
+var _19=false;
+if(typeof (key)!="object"){
+o={};
+o[key]=_14;
+}else{
+o=dojo.clone(key);
+}
+if(o.width){
+_15=o.width;
+delete o.width;
+}
+for(nm in o){
+if(nm in n){
+n[nm]=o[nm];
+}
+if(nm in t){
+t[nm]=o[nm];
+}
+if(nm in ts){
+ts[nm]=o[nm];
+}
+if(nm in _18){
+_18[nm]=o[nm];
+_19=true;
+if(nm=="radius"&&o.angle===undefined){
+o.angle=_18.angle=this.getAngle();
+}else{
+if(nm=="angle"&&o.radius===undefined){
+o.radius=_18.radius=this.getRadius();
+}
+}
+}
+if(nm=="text"){
+this.setText(o.text);
+}
+if(nm=="label"){
+this.setLabel(o.label);
+}
+}
+if(o.borderWidth!==undefined){
+n.width=o.borderWidth;
+}
+if(this.useSelectedStyle){
+for(nm in this.style.norm){
+if(this.selCopy[nm]===undefined){
+this.style.selected[nm]=this.style.norm[nm];
+}
+}
+this.textSelected.color=this.style.selected.color;
+}
+if(!this.created){
+return;
+}
+if(o.x!==undefined||o.y!==undefined){
+var box=this.getBounds(true);
+var mx={dx:0,dy:0};
+for(nm in o){
+if(nm=="x"||nm=="y"||nm=="r"){
+mx["d"+nm]=o[nm]-box[nm];
+}
+}
+this.transformPoints(mx);
+}
+var p=this.points;
+if(o.angle!==undefined){
+this.dataToPoints({x:this.data.x1,y:this.data.y1,angle:o.angle,radius:o.radius});
+}else{
+if(_15!==undefined){
+p[1].x=p[2].x=p[0].x+_15;
+this.pointsToData(p);
+}
+}
+if(o.height!==undefined&&o.angle===undefined){
+p[2].y=p[3].y=p[0].y+o.height;
+this.pointsToData(p);
+}
+if(o.r!==undefined){
+this.data.r=Math.max(0,o.r);
+}
+if(_19||_17!=dojo.toJson(t)||_16!=dojo.toJson(n)){
+this.onChangeStyle(this);
+}
+o.width=_15;
+if(o.cosphi!=undefined){
+!this.data?this.data={cosphi:o.cosphi}:this.data.cosphi=o.cosphi;
+this.style.zAxis=o.cosphi!=0?true:false;
+}
+},exporter:function(){
+var _1a=this.type.substring(this.type.lastIndexOf(".")+1).charAt(0).toLowerCase()+this.type.substring(this.type.lastIndexOf(".")+2);
+var o=dojo.clone(this.style.norm);
+o.borderWidth=o.width;
+delete o.width;
+if(_1a=="path"){
+o.points=this.points;
+}else{
+o=dojo.mixin(o,this.data);
+}
+o.type=_1a;
+if(this.isText){
+o.text=this.getText();
+o=dojo.mixin(o,this.style.text);
+delete o.minWidth;
+delete o.deleteEmptyCreate;
+delete o.deleteEmptyModify;
+}
+var lbl=this.getLabel();
+if(lbl){
+o.label=lbl;
+}
+return o;
+},disable:function(){
+this.enabled=false;
+this.renderHit=false;
+this.onChangeStyle(this);
+},enable:function(){
+this.enabled=true;
+this.renderHit=true;
+this.onChangeStyle(this);
+},select:function(){
+this.selected=true;
+this.onChangeStyle(this);
+},deselect:function(_1b){
+if(_1b){
+setTimeout(dojo.hitch(this,function(){
+this.selected=false;
+this.onChangeStyle(this);
+}),200);
+}else{
+this.selected=false;
+this.onChangeStyle(this);
+}
+},_toggleSelected:function(){
+if(!this.selected){
+return;
+}
+this.deselect();
+setTimeout(dojo.hitch(this,"select"),0);
+},highlight:function(){
+this.highlighted=true;
+this.onChangeStyle(this);
+},unhighlight:function(){
+this.highlighted=false;
+this.onChangeStyle(this);
+},moveToFront:function(){
+this.container&&this.container.moveToFront();
+},moveToBack:function(){
+this.container&&this.container.moveToBack();
+},onTransformBegin:function(_1c){
+this._isBeingModified=true;
+},onTransformEnd:function(_1d){
+this._isBeingModified=false;
+this.onModify(this);
+},onTransform:function(_1e){
+if(!this._isBeingModified){
+this.onTransformBegin();
+}
+this.setPoints(this.points);
+this.render();
+},transformPoints:function(mx){
+if(!mx.dx&&!mx.dy){
+return;
+}
+var _1f=dojo.clone(this.points),_20=false;
+dojo.forEach(this.points,function(o){
+o.x+=mx.dx;
+o.y+=mx.dy;
+if(o.x<this.marginZero||o.y<this.marginZero){
+_20=true;
+}
+});
+if(_20){
+this.points=_1f;
+console.error("Attempt to set object '"+this.id+"' to less than zero.");
+return;
+}
+this.onTransform();
+this.onTransformEnd();
+},applyTransform:function(mx){
+this.transformPoints(mx);
+},setTransform:function(mx){
+this.attr({x:mx.dx,y:mx.dy});
+},getTransform:function(){
+return this.selected?this.container.getParent().getTransform():{dx:0,dy:0};
+},addShadow:function(_21){
+_21=_21===true?{}:_21;
+_21.stencil=this;
+this.shadow=new dojox.drawing.annotations.BoxShadow(_21);
+},removeShadow:function(){
+this.shadow.destroy();
+},setLabel:function(_22){
+if(!this._label){
+this._label=new dojox.drawing.annotations.Label({text:_22,util:this.util,mouse:this.mouse,stencil:this,annotation:true,container:this.container,labelPosition:this.labelPosition});
+}else{
+if(_22){
+this._label.setLabel(_22);
+}
+}
+},getLabel:function(){
+if(this._label){
+return this._label.getText();
+}
+return null;
+},getAngle:function(){
+var d=this.pointsToData();
+var obj={start:{x:d.x1,y:d.y1},x:d.x2,y:d.y2};
+var _23=this.util.angle(obj,this.angleSnap);
+_23<0?_23=360+_23:_23;
+return _23;
+},getRadius:function(){
+var box=this.getBounds(true);
+var _24={start:{x:box.x1,y:box.y1},x:box.x2,y:box.y2};
+return this.util.length(_24);
+},getBounds:function(_25){
+var p=this.points,x1,y1,x2,y2;
+if(p.length==2){
+if(_25){
+x1=p[0].x;
+y1=p[0].y;
+x2=p[1].x;
+y2=p[1].y;
+}else{
+x1=p[0].x<p[1].x?p[0].x:p[1].x;
+y1=p[0].y<p[1].y?p[0].y:p[1].y;
+x2=p[0].x<p[1].x?p[1].x:p[0].x;
+y2=p[0].y<p[1].y?p[1].y:p[0].y;
+}
+return {x1:x1,y1:y1,x2:x2,y2:y2,x:x1,y:y1,w:x2-x1,h:y2-y1};
+}else{
+return {x1:p[0].x,y1:p[0].y,x2:p[2].x,y2:p[2].y,x:p[0].x,y:p[0].y,w:p[2].x-p[0].x,h:p[2].y-p[0].y};
+}
+},preventNegativePos:function(){
+if(this._isBeingModified){
+return;
+}
+if(!this.points||!this.points.length){
+return;
+}
+if(this.type=="dojox.drawing.tools.custom.Axes"){
+var _26=this.marginZero,_27=this.marginZero;
+dojo.forEach(this.points,function(p){
+_26=Math.min(p.y,_26);
+});
+dojo.forEach(this.points,function(p){
+_27=Math.min(p.x,_27);
+});
+if(_26<this.marginZero){
+dojo.forEach(this.points,function(p,i){
+p.y=p.y+(this.marginZero-_26);
+},this);
+}
+if(_27<this.marginZero){
+dojo.forEach(this.points,function(p){
+p.x+=(this.marginZero-_27);
+},this);
+}
+}else{
+dojo.forEach(this.points,function(p){
+p.x=p.x<0?this.marginZero:p.x;
+p.y=p.y<0?this.marginZero:p.y;
+});
+}
+this.setPoints(this.points);
+},_onPostRender:function(_28){
+if(this._isBeingModified){
+this.onModify(this);
+this._isBeingModified=false;
+}else{
+if(!this.created){
+}
+}
+if(!this.editMode&&!this.selected&&this._prevData&&dojo.toJson(this._prevData)!=dojo.toJson(this.data)){
+this.onChangeData(this);
+this._prevData=dojo.clone(this.data);
+}else{
+if(!this._prevData&&(!this.isText||this.getText())){
+this._prevData=dojo.clone(this.data);
+}
+}
+},_setNodeAtts:function(_29){
+var att=this.enabled&&!this.annotation?this.drawingType:"";
+this.util.attr(_29,"drawingType",att);
+},destroy:function(){
+if(this.destroyed){
+return;
+}
+if(this.data||this.points&&this.points.length){
+this.onDelete(this);
+}
+this.disconnectMouse();
+this.disconnect(this._cons);
+dojo.disconnect(this._postRenderCon);
+this.remove(this.shape,this.hit);
+this.destroyed=true;
+},remove:function(){
+var a=arguments;
+if(!a.length){
+if(!this.shape){
+return;
+}
+a=[this.shape];
+}
+for(var i=0;i<a.length;i++){
+if(a[i]){
+a[i].removeShape();
+}
+}
+},connectMult:function(){
+if(arguments.length>1){
+this._cons.push(this.connect.apply(this,arguments));
+}else{
+if(dojo.isArray(arguments[0][0])){
+dojo.forEach(arguments[0],function(ar){
+this._cons.push(this.connect.apply(this,ar));
+},this);
+}else{
+this._cons.push(this.connect.apply(this,arguments[0]));
+}
+}
+},connect:function(o,e,s,m,_2a){
+var c;
+if(typeof (o)!="object"){
+if(s){
+m=s;
+s=e;
+e=o;
+o=this;
+}else{
+m=e;
+e=o;
+o=s=this;
+}
+}else{
+if(!m){
+m=s;
+s=this;
+}else{
+if(_2a){
+c=dojo.connect(o,e,function(evt){
+dojo.hitch(s,m)(evt);
+dojo.disconnect(c);
+});
+this._cons.push(c);
+return c;
+}else{
+}
+}
+}
+c=dojo.connect(o,e,s,m);
+this._cons.push(c);
+return c;
+},disconnect:function(_2b){
+if(!_2b){
+return;
+}
+if(!dojo.isArray(_2b)){
+_2b=[_2b];
+}
+dojo.forEach(_2b,dojo.disconnect,dojo);
+},connectMouse:function(){
+this._mouseHandle=this.mouse.register(this);
+},disconnectMouse:function(){
+this.mouse.unregister(this._mouseHandle);
+},render:function(){
+},dataToPoints:function(_2c){
+},pointsToData:function(_2d){
+},onDown:function(obj){
+this._downOnCanvas=true;
+dojo.disconnect(this._postRenderCon);
+this._postRenderCon=null;
+},onMove:function(obj){
+},onDrag:function(obj){
+},onUp:function(obj){
+}});
+}
Index: trunk/web/dojo/dojox/drawing/stencil/Path.js
===================================================================
--- trunk/web/dojo/dojox/drawing/stencil/Path.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/stencil/Path.js	(revision 9)
@@ -0,0 +1,90 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Path"]){
+dojo._hasResource["dojox.drawing.stencil.Path"]=true;
+dojo.provide("dojox.drawing.stencil.Path");
+dojox.drawing.stencil.Path=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+dojo.disconnect(this._postRenderCon);
+},{type:"dojox.drawing.stencil.Path",closePath:true,baseRender:true,closeRadius:10,closeColor:{r:255,g:255,b:0,a:0.5},_create:function(_2,_3){
+this.remove(this[_2]);
+if(!this.points.length){
+return;
+}
+if(dojox.gfx.renderer=="svg"){
+var _4=[];
+dojo.forEach(this.points,function(o,i){
+if(!o.skip){
+if(i==0){
+_4.push("M "+o.x+" "+o.y);
+}else{
+var _5=(o.t||"")+" ";
+if(o.x===undefined){
+_4.push(_5);
+}else{
+_4.push(_5+o.x+" "+o.y);
+}
+}
+}
+},this);
+if(this.closePath){
+_4.push("Z");
+}
+this.stringPath=_4.join(" ");
+this[_2]=this.container.createPath(_4.join(" ")).setStroke(_3);
+this.closePath&&this[_2].setFill(_3.fill);
+}else{
+this[_2]=this.container.createPath({}).setStroke(_3);
+this.closePath&&this[_2].setFill(_3.fill);
+dojo.forEach(this.points,function(o,i){
+if(!o.skip){
+if(i==0||o.t=="M"){
+this[_2].moveTo(o.x,o.y);
+}else{
+if(o.t=="Z"){
+this.closePath&&this[_2].closePath();
+}else{
+this[_2].lineTo(o.x,o.y);
+}
+}
+}
+},this);
+this.closePath&&this[_2].closePath();
+}
+this._setNodeAtts(this[_2]);
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.style.currentHit);
+this._create("shape",this.style.current);
+},getBounds:function(_6){
+var _7=10000,_8=10000,_9=0,_a=0;
+dojo.forEach(this.points,function(p){
+if(p.x!==undefined&&!isNaN(p.x)){
+_7=Math.min(_7,p.x);
+_8=Math.min(_8,p.y);
+_9=Math.max(_9,p.x);
+_a=Math.max(_a,p.y);
+}
+});
+return {x1:_7,y1:_8,x2:_9,y2:_a,x:_7,y:_8,w:_9-_7,h:_a-_8};
+},checkClosePoint:function(_b,_c,_d){
+var _e=this.util.distance(_b.x,_b.y,_c.x,_c.y);
+if(this.points.length>1){
+if(_e<this.closeRadius&&!this.closeGuide&&!_d){
+var c={cx:_b.x,cy:_b.y,rx:this.closeRadius,ry:this.closeRadius};
+this.closeGuide=this.container.createEllipse(c).setFill(this.closeColor);
+}else{
+if(_d||_e>this.closeRadius&&this.closeGuide){
+this.remove(this.closeGuide);
+this.closeGuide=null;
+}
+}
+}
+return _e<this.closeRadius;
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Path"},"stencil");
+}
Index: trunk/web/dojo/dojox/drawing/stencil/Ellipse.js
===================================================================
--- trunk/web/dojo/dojox/drawing/stencil/Ellipse.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/stencil/Ellipse.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Ellipse"]){
+dojo._hasResource["dojox.drawing.stencil.Ellipse"]=true;
+dojo.provide("dojox.drawing.stencil.Ellipse");
+dojox.drawing.stencil.Ellipse=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Ellipse",anchorType:"group",baseRender:true,dataToPoints:function(o){
+o=o||this.data;
+var x=o.cx-o.rx,y=o.cy-o.ry,w=o.rx*2,h=o.ry*2;
+this.points=[{x:x,y:y},{x:x+w,y:y},{x:x+w,y:y+h},{x:x,y:y+h}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={cx:s.x+(e.x-s.x)/2,cy:s.y+(e.y-s.y)/2,rx:(e.x-s.x)*0.5,ry:(e.y-s.y)*0.5};
+return this.data;
+},_create:function(_2,d,_3){
+this.remove(this[_2]);
+this[_2]=this.container.createEllipse(d).setStroke(_3).setFill(_3.fill);
+this._setNodeAtts(this[_2]);
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Ellipse"},"stencil");
+}
Index: trunk/web/dojo/dojox/drawing/stencil/Rect.js
===================================================================
--- trunk/web/dojo/dojox/drawing/stencil/Rect.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/stencil/Rect.js	(revision 9)
@@ -0,0 +1,34 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Rect"]){
+dojo._hasResource["dojox.drawing.stencil.Rect"]=true;
+dojo.provide("dojox.drawing.stencil.Rect");
+dojox.drawing.stencil.Rect=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+if(this.points.length){
+}
+},{type:"dojox.drawing.stencil.Rect",anchorType:"group",baseRender:true,dataToPoints:function(d){
+d=d||this.data;
+this.points=[{x:d.x,y:d.y},{x:d.x+d.width,y:d.y},{x:d.x+d.width,y:d.y+d.height},{x:d.x,y:d.y+d.height}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={x:s.x,y:s.y,width:e.x-s.x,height:e.y-s.y,r:this.data.r||0};
+return this.data;
+},_create:function(_2,d,_3){
+this.remove(this[_2]);
+this[_2]=this.container.createRect(d).setStroke(_3).setFill(_3.fill);
+this._setNodeAtts(this[_2]);
+},render:function(){
+this.onBeforeRender(this);
+this.renderHit&&this._create("hit",this.data,this.style.currentHit);
+this._create("shape",this.data,this.style.current);
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Rect"},"stencil");
+}
Index: trunk/web/dojo/dojox/drawing/stencil/Image.js
===================================================================
--- trunk/web/dojo/dojox/drawing/stencil/Image.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/stencil/Image.js	(revision 9)
@@ -0,0 +1,62 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Image"]){
+dojo._hasResource["dojox.drawing.stencil.Image"]=true;
+dojo.provide("dojox.drawing.stencil.Image");
+dojox.drawing.stencil.Image=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Image",anchorType:"group",baseRender:true,dataToPoints:function(o){
+o=o||this.data;
+this.points=[{x:o.x,y:o.y},{x:o.x+o.width,y:o.y},{x:o.x+o.width,y:o.y+o.height},{x:o.x,y:o.y+o.height}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={x:s.x,y:s.y,width:e.x-s.x,height:e.y-s.y,src:this.src||this.data.src};
+return this.data;
+},_createHilite:function(){
+this.remove(this.hit);
+this.hit=this.container.createRect(this.data).setStroke(this.style.current).setFill(this.style.current.fill);
+this._setNodeAtts(this.hit);
+},_create:function(_2,d,_3){
+this.remove(this[_2]);
+var s=this.container.getParent();
+this[_2]=s.createImage(d);
+this.container.add(this[_2]);
+this._setNodeAtts(this[_2]);
+},render:function(_4){
+if(this.data.width=="auto"||isNaN(this.data.width)){
+this.getImageSize(true);
+console.warn("Image size not provided. Acquiring...");
+return;
+}
+this.onBeforeRender(this);
+this.renderHit&&this._createHilite();
+this._create("shape",this.data,this.style.current);
+},getImageSize:function(_5){
+if(this._gettingSize){
+return;
+}
+this._gettingSize=true;
+var _6=dojo.create("img",{src:this.data.src},dojo.body());
+var _7=dojo.connect(_6,"error",this,function(){
+dojo.disconnect(c);
+dojo.disconnect(_7);
+console.error("Error loading image:",this.data.src);
+console.warn("Error image:",this.data);
+});
+var c=dojo.connect(_6,"load",this,function(){
+var _8=dojo.marginBox(_6);
+this.setData({x:this.data.x,y:this.data.y,src:this.data.src,width:_8.w,height:_8.h});
+dojo.disconnect(c);
+dojo.destroy(_6);
+_5&&this.render(true);
+});
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Image"},"stencil");
+}
Index: trunk/web/dojo/dojox/drawing/stencil/Text.js
===================================================================
--- trunk/web/dojo/dojox/drawing/stencil/Text.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/stencil/Text.js	(revision 9)
@@ -0,0 +1,99 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.stencil.Text"]){
+dojo._hasResource["dojox.drawing.stencil.Text"]=true;
+dojo.provide("dojox.drawing.stencil.Text");
+dojox.drawing.stencil.Text=dojox.drawing.util.oo.declare(dojox.drawing.stencil._Base,function(_1){
+},{type:"dojox.drawing.stencil.Text",anchorType:"none",baseRender:true,align:"start",valign:"top",_lineHeight:1,typesetter:function(_2){
+if(dojox.drawing.stencil.Text.typeset){
+this._rawText=_2;
+return dojox.drawing.stencil.Text.typeset(_2);
+}
+return _2;
+},setText:function(_3){
+if(this.enabled){
+_3=this.typesetter(_3);
+}
+this._text=_3;
+this._textArray=[];
+this.created&&this.render(_3);
+},getText:function(){
+return this._rawText||this._text;
+},dataToPoints:function(o){
+o=o||this.data;
+var w=o.width=="auto"?1:o.width;
+var h=o.height||this._lineHeight;
+this.points=[{x:o.x,y:o.y},{x:o.x+w,y:o.y},{x:o.x+w,y:o.y+h},{x:o.x,y:o.y+h}];
+return this.points;
+},pointsToData:function(p){
+p=p||this.points;
+var s=p[0];
+var e=p[2];
+this.data={x:s.x,y:s.y,width:e.x-s.x,height:e.y-s.y};
+return this.data;
+},render:function(_4){
+this.remove(this.shape,this.hit);
+!this.annotation&&this.renderHit&&this._renderOutline();
+if(_4){
+this._text=_4;
+this._textArray=this._text.split("\n");
+}
+var d=this.pointsToData();
+var h=this._lineHeight;
+var x=d.x+this.style.text.pad*2;
+var y=d.y+this._lineHeight-(this.textSize*0.4);
+if(this.valign=="middle"){
+y-=h/2;
+}
+this.shape=this.container.createGroup();
+dojo.forEach(this._textArray,function(_5,i){
+var tb=this.shape.createText({x:x,y:y+(h*i),text:unescape(_5),align:this.align}).setFont(this.style.currentText).setFill(this.style.currentText.color);
+this._setNodeAtts(tb);
+},this);
+this._setNodeAtts(this.shape);
+},_renderOutline:function(){
+if(this.annotation){
+return;
+}
+var d=this.pointsToData();
+if(this.align=="middle"){
+d.x-=d.width/2-this.style.text.pad*2;
+}else{
+if(this.align=="start"){
+d.x+=this.style.text.pad;
+}else{
+if(this.align=="end"){
+d.x-=d.width-this.style.text.pad*3;
+}
+}
+}
+if(this.valign=="middle"){
+d.y-=(this._lineHeight)/2-this.style.text.pad;
+}
+this.hit=this.container.createRect(d).setStroke(this.style.currentHit).setFill(this.style.currentHit.fill);
+this._setNodeAtts(this.hit);
+this.hit.moveToBack();
+},makeFit:function(_6,w){
+var _7=dojo.create("span",{innerHTML:_6,id:"foo"},document.body);
+var sz=1;
+dojo.style(_7,"fontSize",sz+"px");
+var _8=30;
+while(dojo.marginBox(_7).w<w){
+sz++;
+dojo.style(_7,"fontSize",sz+"px");
+if(_8--<=0){
+break;
+}
+}
+sz--;
+var _9=dojo.marginBox(_7);
+dojo.destroy(_7);
+return {size:sz,box:_9};
+}});
+dojox.drawing.register({name:"dojox.drawing.stencil.Text"},"stencil");
+}
Index: trunk/web/dojo/dojox/drawing/defaults.js
===================================================================
--- trunk/web/dojo/dojox/drawing/defaults.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/defaults.js	(revision 9)
@@ -0,0 +1,42 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.defaults"]){
+dojo._hasResource["dojox.drawing.defaults"]=true;
+dojo.provide("dojox.drawing.defaults");
+dojox.drawing.defaults={clickMode:true,clickable:true,current:null,currentHit:null,angleSnap:1,zAxis:false,zAxisEnabled:true,zAngle:225,renderHitLines:true,renderHitLayer:true,labelSameColor:false,useSelectedStyle:true,norm:{width:1,color:"#000000",style:"Solid",cap:"round",fill:"#CCCCCC"},selected:{width:6,color:"#00FF00"},highlighted:{width:6,color:"#FF00FF",style:"Solid",cap:"round",fill:"#E11EBB"},disabled:{width:1,color:"#666666",style:"solid",cap:"round",fill:"#cccccc"},hitNorm:{width:6,color:{r:0,g:255,b:255,a:0},style:"Solid",cap:"round",fill:{r:255,g:255,b:255,a:0}},hitSelected:{width:6,color:"#FF9900",style:"Solid",cap:"round",fill:{r:255,g:255,b:255,a:0}},hitHighlighted:{width:6,color:"#FFFF00",style:"Solid",cap:"round",fill:{r:255,g:255,b:255,a:0}},anchors:{size:10,width:2,color:"#999",style:"solid",fill:"#fff",cap:"square",minSize:10,marginZero:5},arrows:{length:30,width:16},text:{minWidth:100,deleteEmptyCreate:true,deleteEmptyModify:true,pad:3,size:"18px",family:"sans-serif",weight:"normal",color:"#000000"},textDisabled:{size:"18px",family:"sans-serif",weight:"normal",color:"#cccccc"},textMode:{create:{width:2,style:"dotted",color:"#666666",fill:null},edit:{width:1,style:"dashed",color:"#666",fill:null}},button:{norm:{"color":"#cccccc","fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0.5,color:"#ffffff"},{offset:1,color:"#e5e5e5"}]}},over:{"fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0.5,color:"#ffffff"},{offset:1,color:"#e1eaf5"}]},"color":"#92a0b3"},down:{"fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0,color:"#e1eaf5"},{offset:1,color:"#ffffff"}]},"color":"#92a0b3"},selected:{"fill":{type:"linear",x1:0,x2:0,y1:0,y2:100,colors:[{offset:0,color:"#97b4bf"},{offset:1,color:"#c8dae1"}]},"color":"#92a0b3"},icon:{norm:{fill:null,color:"#92a0b3"},selected:{fill:"#ffffff",color:"#92a0b3"}}},copy:function(){
+var _1=function(_2){
+if(typeof (_2)!="object"||_2===null||_2===undefined){
+return _2;
+}
+var o;
+if(_2.push){
+o=[];
+for(var i=0;i<_2.length;i++){
+o.push(_1(_2[i]));
+}
+return o;
+}
+o={};
+for(var nm in _2){
+if(nm!="copy"){
+if(typeof (_2[nm])=="object"){
+o[nm]=_1(_2[nm]);
+}else{
+o[nm]=_2[nm];
+}
+}
+}
+return o;
+};
+var o=_1(this);
+o.current=o.norm;
+o.currentHit=o.hitNorm;
+o.currentText=o.text;
+return o;
+}};
+}
Index: trunk/web/dojo/dojox/drawing/_base.js
===================================================================
--- trunk/web/dojo/dojox/drawing/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/_base.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing._base"]){
+dojo._hasResource["dojox.drawing._base"]=true;
+dojo.provide("dojox.drawing._base");
+dojo.experimental("dojox.drawing");
+dojo.require("dojox.drawing.manager._registry");
+dojo.require("dojox.gfx");
+dojo.require("dojox.drawing.Drawing");
+dojo.require("dojox.drawing.util.oo");
+dojo.require("dojox.drawing.util.common");
+dojo.require("dojox.drawing.defaults");
+dojo.require("dojox.drawing.manager.Canvas");
+dojo.require("dojox.drawing.manager.Undo");
+dojo.require("dojox.drawing.manager.keys");
+dojo.require("dojox.drawing.manager.Mouse");
+dojo.require("dojox.drawing.manager.Stencil");
+dojo.require("dojox.drawing.manager.StencilUI");
+dojo.require("dojox.drawing.manager.Anchors");
+dojo.require("dojox.drawing.stencil._Base");
+dojo.require("dojox.drawing.stencil.Line");
+dojo.require("dojox.drawing.stencil.Rect");
+dojo.require("dojox.drawing.stencil.Ellipse");
+dojo.require("dojox.drawing.stencil.Path");
+dojo.require("dojox.drawing.stencil.Text");
+dojo.require("dojox.drawing.stencil.Image");
+dojo.require("dojox.drawing.annotations.Label");
+dojo.require("dojox.drawing.annotations.Angle");
+dojo.require("dojox.drawing.annotations.Arrow");
+dojo.require("dojox.drawing.annotations.BoxShadow");
+}
Index: trunk/web/dojo/dojox/drawing/library/icons.js
===================================================================
--- trunk/web/dojo/dojox/drawing/library/icons.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/library/icons.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.library.icons"]){
+dojo._hasResource["dojox.drawing.library.icons"]=true;
+dojo.provide("dojox.drawing.library.icons");
+dojox.drawing.library.icons={line:{type:"line",borderWidth:1,x1:20,y1:20,x2:80,y2:80},ellipse:{type:"ellipse",borderWidth:1,cx:50,cy:50,rx:35,ry:20},rect:{type:"rect",borderWidth:1,x:10,y:30,width:80,height:40},triangle:{type:"path",borderWidth:1,closePath:true,points:[{x:50,y:10},{x:10,y:90},{x:90,y:90}]},path:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:80},{x:26,y:20},{x:80,y:32},{x:32,y:50},{x:56,y:62}]},arrow:{type:"path",borderWidth:1,closePath:false,points:[{x:20,y:20},{x:80,y:80},{t:"M",x:74,y:56},{x:80,y:80},{x:56,y:74}]},textBlock:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:20},{x:80,y:20},{x:80,y:38},{x:80,y:38},{x:74,y:32},{x:68,y:26},{x:56,y:20},{x:56,y:68},{x:56,y:74},{x:62,y:80},{x:68,y:80},{x:68,y:80},{x:32,y:80},{x:32,y:80},{x:38,y:80},{x:44,y:74},{x:44,y:68},{x:44,y:20},{x:32,y:26},{x:26,y:32},{x:20,y:38},{x:20,y:38}]},equation:{type:"path",borderWidth:2,closePath:false,points:[{x:20,y:60},{x:80,y:60},{t:"M",x:20,y:40},{x:80,y:40}]},axes:{type:"path",borderWidth:1,closePath:false,points:[{x:20,y:32},{x:26,y:20},{x:32,y:32},{t:"M",x:26,y:20},{x:26,y:74},{x:80,y:74},{t:"M",x:68,y:68},{x:80,y:74},{x:68,y:80}]},vector:{type:"path",borderWidth:1,closePath:false,points:[{x:20,y:80},{x:80,y:20},{t:"M",x:62,y:26},{x:80,y:20},{x:73,y:40},{t:"M",x:56,y:56},{x:62,y:68},{x:62,y:74}]},pan:{type:"path",borderWidth:1,closePath:true,points:[{x:38,y:80},{x:26,y:68},{x:20,y:50},{x:26,y:44},{x:26,y:44},{x:38,y:56},{x:32,y:32},{x:32,y:26},{x:38,y:26},{x:44,y:44},{x:44,y:20},{x:50,y:20},{x:56,y:20},{x:56,y:44},{x:56,y:26},{x:62,y:26},{x:68,y:26},{x:68,y:50},{x:68,y:32},{x:74,y:32},{x:80,y:38},{x:80,y:50},{x:74,y:68},{x:68,y:80}]},plus:{type:"path",borderWidth:3,closePath:false,points:[{x:50,y:20},{x:50,y:80},{t:"M",x:20,y:50},{x:80,y:50}]},zoomIn:{type:"path",borderWidth:3,closePath:false,points:[{x:50,y:20},{x:50,y:80},{t:"M",x:20,y:50},{x:80,y:50}]},zoomOut:{type:"path",borderWidth:3,closePath:false,points:[{x:20,y:50},{x:80,y:50}]},zoom100:{type:"text",text:"100%"},iconize:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:38},{x:32,y:26},{x:44,y:26},{x:56,y:38},{x:56,y:50},{x:44,y:62},{x:32,y:62},{x:20,y:56},{t:"Z"},{t:"M",x:38,y:44},{x:68,y:44},{x:68,y:80},{x:38,y:80},{t:"Z"},{t:"M",x:56,y:62},{x:68,y:20},{x:80,y:62}]},pencil:{type:"path",borderWidth:0,closePath:true,points:[{x:20,y:80},{x:26,y:68},{x:68,y:20},{x:80,y:20},{x:80,y:32},{x:38,y:74},{t:"Z"},{t:"M",x:62,y:32},{x:68,y:26},{x:74,y:26},{x:74,y:32},{x:68,y:38},{x:68,y:32},{t:"Z"},{t:"M",x:56,y:38},{x:62,y:38},{x:32,y:68},{x:32,y:68}]}};
+}
Index: trunk/web/dojo/dojox/drawing/Drawing.js
===================================================================
--- trunk/web/dojo/dojox/drawing/Drawing.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing/Drawing.js	(revision 9)
@@ -0,0 +1,244 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing.Drawing"]){
+dojo._hasResource["dojox.drawing.Drawing"]=true;
+dojo.provide("dojox.drawing.Drawing");
+(function(){
+var _1=false;
+dojo.declare("dojox.drawing.Drawing",[],{ready:false,mode:"",width:0,height:0,constructor:function(_2,_3){
+var _4=dojo.attr(_3,"defaults");
+if(_4){
+dojox.drawing.defaults=dojo.getObject(_4);
+}
+this.defaults=dojox.drawing.defaults;
+this.id=_3.id;
+dojox.drawing.register(this,"drawing");
+this.mode=(_2.mode||dojo.attr(_3,"mode")||"").toLowerCase();
+var _5=dojo.contentBox(_3);
+this.width=_5.w;
+this.height=_5.h;
+this.util=dojox.drawing.util.common;
+this.util.register(this);
+this.keys=dojox.drawing.manager.keys;
+this.mouse=new dojox.drawing.manager.Mouse({util:this.util,keys:this.keys,id:this.mode=="ui"?"MUI":"mse"});
+this.mouse.setEventMode(this.mode);
+this.tools={};
+this.stencilTypes={};
+this.stencilTypeMap={};
+this.srcRefNode=_3;
+this.domNode=_3;
+var _6=dojo.attr(_3,"plugins");
+if(_6){
+this.plugins=eval(_6);
+}else{
+this.plugins=[];
+}
+this.widgetId=this.id;
+dojo.attr(this.domNode,"widgetId",this.widgetId);
+if(dijit&&dijit.registry){
+dijit.registry.add(this);
+}else{
+dijit.registry={objs:{},add:function(_7){
+this.objs[_7.id]=_7;
+}};
+dijit.byId=function(id){
+return dijit.registry.objs[id];
+};
+dijit.registry.add(this);
+}
+var _8=dojox.drawing.getRegistered("stencil");
+for(var nm in _8){
+this.registerTool(_8[nm].name);
+}
+var _9=dojox.drawing.getRegistered("tool");
+for(nm in _9){
+this.registerTool(_9[nm].name);
+}
+var _a=dojox.drawing.getRegistered("plugin");
+for(nm in _a){
+this.registerTool(_a[nm].name);
+}
+this._createCanvas();
+},_createCanvas:function(){
+this.canvas=new dojox.drawing.manager.Canvas({srcRefNode:this.domNode,util:this.util,mouse:this.mouse,callback:dojo.hitch(this,"onSurfaceReady")});
+this.initPlugins();
+},resize:function(_b){
+_b&&dojo.style(this.domNode,{width:_b.w+"px",height:_b.h+"px"});
+if(!this.canvas){
+this._createCanvas();
+}else{
+if(_b){
+this.canvas.resize(_b.w,_b.h);
+}
+}
+},startup:function(){
+},getShapeProps:function(_c,_d){
+var _e=_c.stencilType;
+var ui=this.mode=="ui"||_d=="ui";
+return dojo.mixin({container:ui&&!_e?this.canvas.overlay.createGroup():this.canvas.surface.createGroup(),util:this.util,keys:this.keys,mouse:this.mouse,drawing:this,drawingType:ui&&!_e?"ui":"stencil",style:this.defaults.copy()},_c||{});
+},addPlugin:function(_f){
+this.plugins.push(_f);
+if(this.canvas.surfaceReady){
+this.initPlugins();
+}
+},initPlugins:function(){
+if(!this.canvas||!this.canvas.surfaceReady){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.initPlugins();
+});
+return;
+}
+dojo.forEach(this.plugins,function(p,i){
+var _10=dojo.mixin({util:this.util,keys:this.keys,mouse:this.mouse,drawing:this,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas},p.options||{});
+this.registerTool(p.name,dojo.getObject(p.name));
+try{
+this.plugins[i]=new this.tools[p.name](_10);
+}
+catch(e){
+console.error("Failed to initilaize plugin:\t"+p.name+". Did you require it?");
+}
+},this);
+this.plugins=[];
+_1=true;
+this.mouse.setCanvas();
+},onSurfaceReady:function(){
+this.ready=true;
+this.mouse.init(this.canvas.domNode);
+this.undo=new dojox.drawing.manager.Undo({keys:this.keys});
+this.anchors=new dojox.drawing.manager.Anchors({drawing:this,mouse:this.mouse,undo:this.undo,util:this.util});
+if(this.mode=="ui"){
+this.uiStencils=new dojox.drawing.manager.StencilUI({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,keys:this.keys});
+}else{
+this.stencils=new dojox.drawing.manager.Stencil({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,undo:this.undo,keys:this.keys,anchors:this.anchors});
+this.uiStencils=new dojox.drawing.manager.StencilUI({canvas:this.canvas,surface:this.canvas.surface,mouse:this.mouse,keys:this.keys});
+}
+if(dojox.gfx.renderer=="silverlight"){
+try{
+new dojox.drawing.plugins.drawing.Silverlight({util:this.util,mouse:this.mouse,stencils:this.stencils,anchors:this.anchors,canvas:this.canvas});
+}
+catch(e){
+throw new Error("Attempted to install the Silverlight plugin, but it was not found.");
+}
+}
+dojo.forEach(this.plugins,function(p){
+p.onSurfaceReady&&p.onSurfaceReady();
+});
+},addUI:function(_11,_12){
+if(!this.ready){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.addUI(_11,_12);
+});
+return false;
+}
+if(_12&&!_12.data&&!_12.points){
+_12={data:_12};
+}
+if(!this.stencilTypes[_11]){
+if(_11!="tooltip"){
+console.warn("Not registered:",_11);
+}
+return null;
+}
+var s=this.uiStencils.register(new this.stencilTypes[_11](this.getShapeProps(_12,"ui")));
+return s;
+},addStencil:function(_13,_14){
+if(!this.ready){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.addStencil(_13,_14);
+});
+return false;
+}
+if(_14&&!_14.data&&!_14.points){
+_14={data:_14};
+}
+var s=this.stencils.register(new this.stencilTypes[_13](this.getShapeProps(_14)));
+this.currentStencil&&this.currentStencil.moveToFront();
+return s;
+},removeStencil:function(_15){
+this.stencils.unregister(_15);
+_15.destroy();
+},removeAll:function(){
+this.stencils.removeAll();
+},selectAll:function(){
+this.stencils.selectAll();
+},toSelected:function(_16){
+this.stencils.toSelected.apply(this.stencils,arguments);
+},exporter:function(){
+return this.stencils.exporter();
+},importer:function(_17){
+dojo.forEach(_17,function(m){
+this.addStencil(m.type,m);
+},this);
+},changeDefaults:function(_18){
+for(var nm in _18){
+for(var n in _18[nm]){
+this.defaults[nm][n]=_18[nm][n];
+}
+}
+this.unSetTool();
+this.setTool(this.currentType);
+},onRenderStencil:function(_19){
+this.stencils.register(_19);
+this.unSetTool();
+if(!this.defaults.clickMode){
+this.setTool(this.currentType);
+}else{
+if(this.defaults.clickMode){
+this.defaults.clickable=true;
+}
+}
+},onDeleteStencil:function(_1a){
+this.stencils.unregister(_1a);
+},registerTool:function(_1b){
+if(this.tools[_1b]){
+return;
+}
+var _1c=dojo.getObject(_1b);
+this.tools[_1b]=_1c;
+var _1d=this.util.abbr(_1b);
+this.stencilTypes[_1d]=_1c;
+this.stencilTypeMap[_1d]=_1b;
+},getConstructor:function(_1e){
+return this.stencilTypes[_1e];
+},setTool:function(_1f){
+if(this.mode=="ui"){
+return;
+}
+if(!this.canvas||!this.canvas.surface){
+var c=dojo.connect(this,"onSurfaceReady",this,function(){
+dojo.disconnect(c);
+this.setTool(_1f);
+});
+return;
+}
+if(this.currentStencil){
+this.unSetTool();
+}
+this.currentType=this.tools[_1f]?_1f:this.stencilTypeMap[_1f];
+try{
+this.currentStencil=new this.tools[this.currentType]({container:this.canvas.surface.createGroup(),util:this.util,mouse:this.mouse,keys:this.keys});
+if(this.defaults.clickMode){
+this.defaults.clickable=false;
+}
+this.currentStencil.connect(this.currentStencil,"onRender",this,"onRenderStencil");
+this.currentStencil.connect(this.currentStencil,"destroy",this,"onDeleteStencil");
+}
+catch(e){
+console.error("dojox.drawing.setTool Error:",e);
+console.error(this.currentType+" is not a constructor: ",this.tools[this.currentType]);
+}
+},unSetTool:function(){
+if(!this.currentStencil.created){
+this.currentStencil.destroy();
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojox/dtl.js
===================================================================
--- trunk/web/dojo/dojox/dtl.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojox.string.Builder"]){dojo._hasResource["dojox.string.Builder"]=true;dojo.provide("dojox.string.Builder");dojox.string.Builder=function(_1){var b="";this.length=0;this.append=function(s){if(arguments.length>1){var _2="",l=arguments.length;switch(l){case 9:_2=""+arguments[8]+_2;case 8:_2=""+arguments[7]+_2;case 7:_2=""+arguments[6]+_2;case 6:_2=""+arguments[5]+_2;case 5:_2=""+arguments[4]+_2;case 4:_2=""+arguments[3]+_2;case 3:_2=""+arguments[2]+_2;case 2:b+=""+arguments[0]+arguments[1]+_2;break;default:var i=0;while(i<arguments.length){_2+=arguments[i++];}b+=_2;}}else{b+=s;}this.length=b.length;return this;};this.concat=function(s){return this.append.apply(this,arguments);};this.appendArray=function(_3){return this.append.apply(this,_3);};this.clear=function(){b="";this.length=0;return this;};this.replace=function(_4,_5){b=b.replace(_4,_5);this.length=b.length;return this;};this.remove=function(_6,_7){if(_7===undefined){_7=b.length;}if(_7==0){return this;}b=b.substr(0,_6)+b.substr(_6+_7);this.length=b.length;return this;};this.insert=function(_8,_9){if(_8==0){b=_9+b;}else{b=b.slice(0,_8)+_9+b.slice(_8);}this.length=b.length;return this;};this.toString=function(){return b;};if(_1){this.append(_1);}};}if(!dojo._hasResource["dojox.string.tokenize"]){dojo._hasResource["dojox.string.tokenize"]=true;dojo.provide("dojox.string.tokenize");dojox.string.tokenize=function(_a,re,_b,_c){var _d=[];var _e,_f,_10=0;while(_e=re.exec(_a)){_f=_a.slice(_10,re.lastIndex-_e[0].length);if(_f.length){_d.push(_f);}if(_b){if(dojo.isOpera){var _11=_e.slice(0);while(_11.length<_e.length){_11.push(null);}_e=_11;}var _12=_b.apply(_c,_e.slice(1).concat(_d.length));if(typeof _12!="undefined"){_d.push(_12);}}_10=re.lastIndex;}_f=_a.slice(_10);if(_f.length){_d.push(_f);}return _d;};}if(!dojo._hasResource["dojox.dtl._base"]){dojo._hasResource["dojox.dtl._base"]=true;dojo.provide("dojox.dtl._base");dojo.experimental("dojox.dtl");(function(){var dd=dojox.dtl;dd.TOKEN_BLOCK=-1;dd.TOKEN_VAR=-2;dd.TOKEN_COMMENT=-3;dd.TOKEN_TEXT=3;dd._Context=dojo.extend(function(_13){if(_13){dojo._mixin(this,_13);if(_13.get){this._getter=_13.get;delete this.get;}}},{push:function(){var _14=this;var _15=dojo.delegate(this);_15.pop=function(){return _14;};return _15;},pop:function(){throw new Error("pop() called on empty Context");},get:function(key,_16){var n=this._normalize;if(this._getter){var got=this._getter(key);if(typeof got!="undefined"){return n(got);}}if(typeof this[key]!="undefined"){return n(this[key]);}return _16;},_normalize:function(_17){if(_17 instanceof Date){_17.year=_17.getFullYear();_17.month=_17.getMonth()+1;_17.day=_17.getDate();_17.date=_17.year+"-"+("0"+_17.month).slice(-2)+"-"+("0"+_17.day).slice(-2);_17.hour=_17.getHours();_17.minute=_17.getMinutes();_17.second=_17.getSeconds();_17.microsecond=_17.getMilliseconds();}return _17;},update:function(_18){var _19=this.push();if(_18){dojo._mixin(this,_18);}return _19;}});var _1a=/("(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)/g;var _1b=/\s+/g;var _1c=function(_1d,_1e){_1d=_1d||_1b;if(!(_1d instanceof RegExp)){_1d=new RegExp(_1d,"g");}if(!_1d.global){throw new Error("You must use a globally flagged RegExp with split "+_1d);}_1d.exec("");var _1f,_20=[],_21=0,i=0;while(_1f=_1d.exec(this)){_20.push(this.slice(_21,_1d.lastIndex-_1f[0].length));_21=_1d.lastIndex;if(_1e&&(++i>_1e-1)){break;}}_20.push(this.slice(_21));return _20;};dd.Token=function(_22,_23){this.token_type=_22;this.contents=new String(dojo.trim(_23));this.contents.split=_1c;this.split=function(){return String.prototype.split.apply(this.contents,arguments);};};dd.Token.prototype.split_contents=function(_24){var bit,_25=[],i=0;_24=_24||999;while(i++<_24&&(bit=_1a.exec(this.contents))){bit=bit[0];if(bit.charAt(0)=="\""&&bit.slice(-1)=="\""){_25.push("\""+bit.slice(1,-1).replace("\\\"","\"").replace("\\\\","\\")+"\"");}else{if(bit.charAt(0)=="'"&&bit.slice(-1)=="'"){_25.push("'"+bit.slice(1,-1).replace("\\'","'").replace("\\\\","\\")+"'");}else{_25.push(bit);}}}return _25;};var ddt=dd.text={_get:function(_26,_27,_28){var _29=dd.register.get(_26,_27.toLowerCase(),_28);if(!_29){if(!_28){throw new Error("No tag found for "+_27);}return null;}var fn=_29[1];var _2a=_29[2];var _2b;if(fn.indexOf(":")!=-1){_2b=fn.split(":");fn=_2b.pop();}dojo["require"](_2a);var _2c=dojo.getObject(_2a);return _2c[fn||_27]||_2c[_27+"_"]||_2c[fn+"_"];},getTag:function(_2d,_2e){return ddt._get("tag",_2d,_2e);},getFilter:function(_2f,_30){return ddt._get("filter",_2f,_30);},getTemplate:function(_31){return new dd.Template(ddt.getTemplateString(_31));},getTemplateString:function(_32){return dojo._getText(_32.toString())||"";},_resolveLazy:function(_33,_34,_35){if(_34){if(_35){return dojo.fromJson(dojo._getText(_33))||{};}else{return dd.text.getTemplateString(_33);}}else{return dojo.xhrGet({handleAs:(_35)?"json":"text",url:_33});}},_resolveTemplateArg:function(arg,_36){if(ddt._isTemplate(arg)){if(!_36){var d=new dojo.Deferred();d.callback(arg);return d;}return arg;}return ddt._resolveLazy(arg,_36);},_isTemplate:function(arg){return (typeof arg=="undefined")||(typeof arg=="string"&&(arg.match(/^\s*[<{]/)||arg.indexOf(" ")!=-1));},_resolveContextArg:function(arg,_37){if(arg.constructor==Object){if(!_37){var d=new dojo.Deferred;d.callback(arg);return d;}return arg;}return ddt._resolveLazy(arg,_37,true);},_re:/(?:\{\{\s*(.+?)\s*\}\}|\{%\s*(load\s*)?(.+?)\s*%\})/g,tokenize:function(str){return dojox.string.tokenize(str,ddt._re,ddt._parseDelims);},_parseDelims:function(_38,_39,tag){if(_38){return [dd.TOKEN_VAR,_38];}else{if(_39){var _3a=dojo.trim(tag).split(/\s+/g);for(var i=0,_3b;_3b=_3a[i];i++){dojo["require"](_3b);}}else{return [dd.TOKEN_BLOCK,tag];}}}};dd.Template=dojo.extend(function(_3c,_3d){var str=_3d?_3c:ddt._resolveTemplateArg(_3c,true)||"";var _3e=ddt.tokenize(str);var _3f=new dd._Parser(_3e);this.nodelist=_3f.parse();},{update:function(_40,_41){return ddt._resolveContextArg(_41).addCallback(this,function(_42){var _43=this.render(new dd._Context(_42));if(_40.forEach){_40.forEach(function(_44){_44.innerHTML=_43;});}else{dojo.byId(_40).innerHTML=_43;}return this;});},render:function(_45,_46){_46=_46||this.getBuffer();_45=_45||new dd._Context({});return this.nodelist.render(_45,_46)+"";},getBuffer:function(){return new dojox.string.Builder();}});var _47=/\{\{\s*(.+?)\s*\}\}/g;dd.quickFilter=function(str){if(!str){return new dd._NodeList();}if(str.indexOf("{%")==-1){return new dd._QuickNodeList(dojox.string.tokenize(str,_47,function(_48){return new dd._Filter(_48);}));}};dd._QuickNodeList=dojo.extend(function(_49){this.contents=_49;},{render:function(_4a,_4b){for(var i=0,l=this.contents.length;i<l;i++){if(this.contents[i].resolve){_4b=_4b.concat(this.contents[i].resolve(_4a));}else{_4b=_4b.concat(this.contents[i]);}}return _4b;},dummyRender:function(_4c){return this.render(_4c,dd.Template.prototype.getBuffer()).toString();},clone:function(_4d){return this;}});dd._Filter=dojo.extend(function(_4e){if(!_4e){throw new Error("Filter must be called with variable name");}this.contents=_4e;var _4f=this._cache[_4e];if(_4f){this.key=_4f[0];this.filters=_4f[1];}else{this.filters=[];dojox.string.tokenize(_4e,this._re,this._tokenize,this);this._cache[_4e]=[this.key,this.filters];}},{_cache:{},_re:/(?:^_\("([^\\"]*(?:\\.[^\\"])*)"\)|^"([^\\"]*(?:\\.[^\\"]*)*)"|^([a-zA-Z0-9_.]+)|\|(\w+)(?::(?:_\("([^\\"]*(?:\\.[^\\"])*)"\)|"([^\\"]*(?:\\.[^\\"]*)*)"|([a-zA-Z0-9_.]+)|'([^\\']*(?:\\.[^\\']*)*)'))?|^'([^\\']*(?:\\.[^\\']*)*)')/g,_values:{0:"\"",1:"\"",2:"",8:"\""},_args:{4:"\"",5:"\"",6:"",7:"'"},_tokenize:function(){var pos,arg;for(var i=0,has=[];i<arguments.length;i++){has[i]=(typeof arguments[i]!="undefined"&&typeof arguments[i]=="string"&&arguments[i]);}if(!this.key){for(pos in this._values){if(has[pos]){this.key=this._values[pos]+arguments[pos]+this._values[pos];break;}}}else{for(pos in this._args){if(has[pos]){var _50=arguments[pos];if(this._args[pos]=="'"){_50=_50.replace(/\\'/g,"'");}else{if(this._args[pos]=="\""){_50=_50.replace(/\\"/g,"\"");}}arg=[!this._args[pos],_50];break;}}var fn=ddt.getFilter(arguments[3]);if(!dojo.isFunction(fn)){throw new Error(arguments[3]+" is not registered as a filter");}this.filters.push([fn,arg]);}},getExpression:function(){return this.contents;},resolve:function(_51){if(typeof this.key=="undefined"){return "";}var str=this.resolvePath(this.key,_51);for(var i=0,_52;_52=this.filters[i];i++){if(_52[1]){if(_52[1][0]){str=_52[0](str,this.resolvePath(_52[1][1],_51));}else{str=_52[0](str,_52[1][1]);}}else{str=_52[0](str);}}return str;},resolvePath:function(_53,_54){var _55,_56;var _57=_53.charAt(0);var _58=_53.slice(-1);if(!isNaN(parseInt(_57))){_55=(_53.indexOf(".")==-1)?parseInt(_53):parseFloat(_53);}else{if(_57=="\""&&_57==_58){_55=_53.slice(1,-1);}else{if(_53=="true"){return true;}if(_53=="false"){return false;}if(_53=="null"||_53=="None"){return null;}_56=_53.split(".");_55=_54.get(_56[0]);if(dojo.isFunction(_55)){var _59=_54.getThis&&_54.getThis();if(_55.alters_data){_55="";}else{if(_59){_55=_55.call(_59);}else{_55="";}}}for(var i=1;i<_56.length;i++){var _5a=_56[i];if(_55){var _5b=_55;if(dojo.isObject(_55)&&_5a=="items"&&typeof _55[_5a]=="undefined"){var _5c=[];for(var key in _55){_5c.push([key,_55[key]]);}_55=_5c;continue;}if(_55.get&&dojo.isFunction(_55.get)&&_55.get.safe){_55=_55.get(_5a);}else{if(typeof _55[_5a]=="undefined"){_55=_55[_5a];break;}else{_55=_55[_5a];}}if(dojo.isFunction(_55)){if(_55.alters_data){_55="";}else{_55=_55.call(_5b);}}else{if(_55 instanceof Date){_55=dd._Context.prototype._normalize(_55);}}}else{return "";}}}}return _55;}});dd._TextNode=dd._Node=dojo.extend(function(obj){this.contents=obj;},{set:function(_5d){this.contents=_5d;return this;},render:function(_5e,_5f){return _5f.concat(this.contents);},isEmpty:function(){return !dojo.trim(this.contents);},clone:function(){return this;}});dd._NodeList=dojo.extend(function(_60){this.contents=_60||[];this.last="";},{push:function(_61){this.contents.push(_61);return this;},concat:function(_62){this.contents=this.contents.concat(_62);return this;},render:function(_63,_64){for(var i=0;i<this.contents.length;i++){_64=this.contents[i].render(_63,_64);if(!_64){throw new Error("Template must return buffer");}}return _64;},dummyRender:function(_65){return this.render(_65,dd.Template.prototype.getBuffer()).toString();},unrender:function(){return arguments[1];},clone:function(){return this;},rtrim:function(){while(1){i=this.contents.length-1;if(this.contents[i] instanceof dd._TextNode&&this.contents[i].isEmpty()){this.contents.pop();}else{break;}}return this;}});dd._VarNode=dojo.extend(function(str){this.contents=new dd._Filter(str);},{render:function(_66,_67){var str=this.contents.resolve(_66);if(!str.safe){str=dd._base.escape(""+str);}return _67.concat(str);}});dd._noOpNode=new function(){this.render=this.unrender=function(){return arguments[1];};this.clone=function(){return this;};};dd._Parser=dojo.extend(function(_68){this.contents=_68;},{i:0,parse:function(_69){var _6a={},_6b;_69=_69||[];for(var i=0;i<_69.length;i++){_6a[_69[i]]=true;}var _6c=new dd._NodeList();while(this.i<this.contents.length){_6b=this.contents[this.i++];if(typeof _6b=="string"){_6c.push(new dd._TextNode(_6b));}else{var _6d=_6b[0];var _6e=_6b[1];if(_6d==dd.TOKEN_VAR){_6c.push(new dd._VarNode(_6e));}else{if(_6d==dd.TOKEN_BLOCK){if(_6a[_6e]){--this.i;return _6c;}var cmd=_6e.split(/\s+/g);if(cmd.length){cmd=cmd[0];var fn=ddt.getTag(cmd);if(fn){_6c.push(fn(this,new dd.Token(_6d,_6e)));}}}}}}if(_69.length){throw new Error("Could not find closing tag(s): "+_69.toString());}this.contents.length=0;return _6c;},next_token:function(){var _6f=this.contents[this.i++];return new dd.Token(_6f[0],_6f[1]);},delete_first_token:function(){this.i++;},skip_past:function(_70){while(this.i<this.contents.length){var _71=this.contents[this.i++];if(_71[0]==dd.TOKEN_BLOCK&&_71[1]==_70){return;}}throw new Error("Unclosed tag found when looking for "+_70);},create_variable_node:function(_72){return new dd._VarNode(_72);},create_text_node:function(_73){return new dd._TextNode(_73||"");},getTemplate:function(_74){return new dd.Template(_74);}});dd.register={_registry:{attributes:[],tags:[],filters:[]},get:function(_75,_76){var _77=dd.register._registry[_75+"s"];for(var i=0,_78;_78=_77[i];i++){if(typeof _78[0]=="string"){if(_78[0]==_76){return _78;}}else{if(_76.match(_78[0])){return _78;}}}},getAttributeTags:function(){var _79=[];var _7a=dd.register._registry.attributes;for(var i=0,_7b;_7b=_7a[i];i++){if(_7b.length==3){_79.push(_7b);}else{var fn=dojo.getObject(_7b[1]);if(fn&&dojo.isFunction(fn)){_7b.push(fn);_79.push(_7b);}}}return _79;},_any:function(_7c,_7d,_7e){for(var _7f in _7e){for(var i=0,fn;fn=_7e[_7f][i];i++){var key=fn;if(dojo.isArray(fn)){key=fn[0];fn=fn[1];}if(typeof key=="string"){if(key.substr(0,5)=="attr:"){var _80=fn;if(_80.substr(0,5)=="attr:"){_80=_80.slice(5);}dd.register._registry.attributes.push([_80.toLowerCase(),_7d+"."+_7f+"."+_80]);}key=key.toLowerCase();}dd.register._registry[_7c].push([key,fn,_7d+"."+_7f]);}}},tags:function(_81,_82){dd.register._any("tags",_81,_82);},filters:function(_83,_84){dd.register._any("filters",_83,_84);}};var _85=/&/g;var _86=/</g;var _87=/>/g;var _88=/'/g;var _89=/"/g;dd._base.escape=function(_8a){return dd.mark_safe(_8a.replace(_85,"&amp;").replace(_86,"&lt;").replace(_87,"&gt;").replace(_89,"&quot;").replace(_88,"&#39;"));};dd._base.safe=function(_8b){if(typeof _8b=="string"){_8b=new String(_8b);}if(typeof _8b=="object"){_8b.safe=true;}return _8b;};dd.mark_safe=dd._base.safe;dd.register.tags("dojox.dtl.tag",{"date":["now"],"logic":["if","for","ifequal","ifnotequal"],"loader":["extends","block","include","load","ssi"],"misc":["comment","debug","filter","firstof","spaceless","templatetag","widthratio","with"],"loop":["cycle","ifchanged","regroup"]});dd.register.filters("dojox.dtl.filter",{"dates":["date","time","timesince","timeuntil"],"htmlstrings":["linebreaks","linebreaksbr","removetags","striptags"],"integers":["add","get_digit"],"lists":["dictsort","dictsortreversed","first","join","length","length_is","random","slice","unordered_list"],"logic":["default","default_if_none","divisibleby","yesno"],"misc":["filesizeformat","pluralize","phone2numeric","pprint"],"strings":["addslashes","capfirst","center","cut","fix_ampersands","floatformat","iriencode","linenumbers","ljust","lower","make_list","rjust","slugify","stringformat","title","truncatewords","truncatewords_html","upper","urlencode","urlize","urlizetrunc","wordcount","wordwrap"]});dd.register.filters("dojox.dtl",{"_base":["escape","safe"]});})();}if(!dojo._hasResource["dojox.dtl"]){dojo._hasResource["dojox.dtl"]=true;dojo.provide("dojox.dtl");}if(!dojo._hasResource["dojox.dtl.Context"]){dojo._hasResource["dojox.dtl.Context"]=true;dojo.provide("dojox.dtl.Context");dojox.dtl.Context=dojo.extend(function(_8c){this._this={};dojox.dtl._Context.call(this,_8c);},dojox.dtl._Context.prototype,{getKeys:function(){var _8d=[];for(var key in this){if(this.hasOwnProperty(key)&&key!="_this"){_8d.push(key);}}return _8d;},extend:function(obj){return dojo.delegate(this,obj);},filter:function(_8e){var _8f=new dojox.dtl.Context();var _90=[];var i,arg;if(_8e instanceof dojox.dtl.Context){_90=_8e.getKeys();}else{if(typeof _8e=="object"){for(var key in _8e){_90.push(key);}}else{for(i=0;arg=arguments[i];i++){if(typeof arg=="string"){_90.push(arg);}}}}for(i=0,key;key=_90[i];i++){_8f[key]=this[key];}return _8f;},setThis:function(_91){this._this=_91;},getThis:function(){return this._this;},hasKey:function(key){if(this._getter){var got=this._getter(key);if(typeof got!="undefined"){return true;}}if(typeof this[key]!="undefined"){return true;}return false;}});}if(!dojo._hasResource["dojox.dtl.tag.logic"]){dojo._hasResource["dojox.dtl.tag.logic"]=true;dojo.provide("dojox.dtl.tag.logic");(function(){var dd=dojox.dtl;var ddt=dd.text;var _92=dd.tag.logic;_92.IfNode=dojo.extend(function(_93,_94,_95,_96){this.bools=_93;this.trues=_94;this.falses=_95;this.type=_96;},{render:function(_97,_98){var i,_99,_9a,_9b,_9c;if(this.type=="or"){for(i=0;_99=this.bools[i];i++){_9a=_99[0];_9b=_99[1];_9c=_9b.resolve(_97);if((_9c&&!_9a)||(_9a&&!_9c)){if(this.falses){_98=this.falses.unrender(_97,_98);}return (this.trues)?this.trues.render(_97,_98,this):_98;}}if(this.trues){_98=this.trues.unrender(_97,_98);}return (this.falses)?this.falses.render(_97,_98,this):_98;}else{for(i=0;_99=this.bools[i];i++){_9a=_99[0];_9b=_99[1];_9c=_9b.resolve(_97);if(_9c==_9a){if(this.trues){_98=this.trues.unrender(_97,_98);}return (this.falses)?this.falses.render(_97,_98,this):_98;}}if(this.falses){_98=this.falses.unrender(_97,_98);}return (this.trues)?this.trues.render(_97,_98,this):_98;}return _98;},unrender:function(_9d,_9e){_9e=(this.trues)?this.trues.unrender(_9d,_9e):_9e;_9e=(this.falses)?this.falses.unrender(_9d,_9e):_9e;return _9e;},clone:function(_9f){var _a0=(this.trues)?this.trues.clone(_9f):null;var _a1=(this.falses)?this.falses.clone(_9f):null;return new this.constructor(this.bools,_a0,_a1,this.type);}});_92.IfEqualNode=dojo.extend(function(_a2,_a3,_a4,_a5,_a6){this.var1=new dd._Filter(_a2);this.var2=new dd._Filter(_a3);this.trues=_a4;this.falses=_a5;this.negate=_a6;},{render:function(_a7,_a8){var _a9=this.var1.resolve(_a7);var _aa=this.var2.resolve(_a7);_a9=(typeof _a9!="undefined")?_a9:"";_aa=(typeof _a9!="undefined")?_aa:"";if((this.negate&&_a9!=_aa)||(!this.negate&&_a9==_aa)){if(this.falses){_a8=this.falses.unrender(_a7,_a8,this);}return (this.trues)?this.trues.render(_a7,_a8,this):_a8;}if(this.trues){_a8=this.trues.unrender(_a7,_a8,this);}return (this.falses)?this.falses.render(_a7,_a8,this):_a8;},unrender:function(_ab,_ac){return _92.IfNode.prototype.unrender.call(this,_ab,_ac);},clone:function(_ad){var _ae=this.trues?this.trues.clone(_ad):null;var _af=this.falses?this.falses.clone(_ad):null;return new this.constructor(this.var1.getExpression(),this.var2.getExpression(),_ae,_af,this.negate);}});_92.ForNode=dojo.extend(function(_b0,_b1,_b2,_b3){this.assign=_b0;this.loop=new dd._Filter(_b1);this.reversed=_b2;this.nodelist=_b3;this.pool=[];},{render:function(_b4,_b5){var i,j,k;var _b6=false;var _b7=this.assign;for(k=0;k<_b7.length;k++){if(typeof _b4[_b7[k]]!="undefined"){_b6=true;_b4=_b4.push();break;}}if(!_b6&&_b4.forloop){_b6=true;_b4=_b4.push();}var _b8=this.loop.resolve(_b4)||[];for(i=_b8.length;i<this.pool.length;i++){this.pool[i].unrender(_b4,_b5,this);}if(this.reversed){_b8=_b8.slice(0).reverse();}var _b9=dojo.isObject(_b8)&&!dojo.isArrayLike(_b8);var _ba=[];if(_b9){for(var key in _b8){_ba.push(_b8[key]);}}else{_ba=_b8;}var _bb=_b4.forloop={parentloop:_b4.get("forloop",{})};var j=0;for(i=0;i<_ba.length;i++){var _bc=_ba[i];_bb.counter0=j;_bb.counter=j+1;_bb.revcounter0=_ba.length-j-1;_bb.revcounter=_ba.length-j;_bb.first=!j;_bb.last=(j==_ba.length-1);if(_b7.length>1&&dojo.isArrayLike(_bc)){if(!_b6){_b6=true;_b4=_b4.push();}var _bd={};for(k=0;k<_bc.length&&k<_b7.length;k++){_bd[_b7[k]]=_bc[k];}dojo.mixin(_b4,_bd);}else{_b4[_b7[0]]=_bc;}if(j+1>this.pool.length){this.pool.push(this.nodelist.clone(_b5));}_b5=this.pool[j++].render(_b4,_b5,this);}delete _b4.forloop;if(_b6){_b4=_b4.pop();}else{for(k=0;k<_b7.length;k++){delete _b4[_b7[k]];}}return _b5;},unrender:function(_be,_bf){for(var i=0,_c0;_c0=this.pool[i];i++){_bf=_c0.unrender(_be,_bf);}return _bf;},clone:function(_c1){return new this.constructor(this.assign,this.loop.getExpression(),this.reversed,this.nodelist.clone(_c1));}});dojo.mixin(_92,{if_:function(_c2,_c3){var i,_c4,_c5,_c6=[],_c7=_c3.contents.split();_c7.shift();_c3=_c7.join(" ");_c7=_c3.split(" and ");if(_c7.length==1){_c5="or";_c7=_c3.split(" or ");}else{_c5="and";for(i=0;i<_c7.length;i++){if(_c7[i].indexOf(" or ")!=-1){throw new Error("'if' tags can't mix 'and' and 'or'");}}}for(i=0;_c4=_c7[i];i++){var not=false;if(_c4.indexOf("not ")==0){_c4=_c4.slice(4);not=true;}_c6.push([not,new dd._Filter(_c4)]);}var _c8=_c2.parse(["else","endif"]);var _c9=false;var _c3=_c2.next_token();if(_c3.contents=="else"){_c9=_c2.parse(["endif"]);_c2.next_token();}return new _92.IfNode(_c6,_c8,_c9,_c5);},_ifequal:function(_ca,_cb,_cc){var _cd=_cb.split_contents();if(_cd.length!=3){throw new Error(_cd[0]+" takes two arguments");}var end="end"+_cd[0];var _ce=_ca.parse(["else",end]);var _cf=false;var _cb=_ca.next_token();if(_cb.contents=="else"){_cf=_ca.parse([end]);_ca.next_token();}return new _92.IfEqualNode(_cd[1],_cd[2],_ce,_cf,_cc);},ifequal:function(_d0,_d1){return _92._ifequal(_d0,_d1);},ifnotequal:function(_d2,_d3){return _92._ifequal(_d2,_d3,true);},for_:function(_d4,_d5){var _d6=_d5.contents.split();if(_d6.length<4){throw new Error("'for' statements should have at least four words: "+_d5.contents);}var _d7=_d6[_d6.length-1]=="reversed";var _d8=(_d7)?-3:-2;if(_d6[_d6.length+_d8]!="in"){throw new Error("'for' tag received an invalid argument: "+_d5.contents);}var _d9=_d6.slice(1,_d8).join(" ").split(/ *, */);for(var i=0;i<_d9.length;i++){if(!_d9[i]||_d9[i].indexOf(" ")!=-1){throw new Error("'for' tag received an invalid argument: "+_d5.contents);}}var _da=_d4.parse(["endfor"]);_d4.next_token();return new _92.ForNode(_d9,_d6[_d6.length+_d8+1],_d7,_da);}});})();}if(!dojo._hasResource["dojox.dtl.tag.loop"]){dojo._hasResource["dojox.dtl.tag.loop"]=true;dojo.provide("dojox.dtl.tag.loop");(function(){var dd=dojox.dtl;var _db=dd.tag.loop;_db.CycleNode=dojo.extend(function(_dc,_dd,_de,_df){this.cyclevars=_dc;this.name=_dd;this.contents=_de;this.shared=_df||{counter:-1,map:{}};},{render:function(_e0,_e1){if(_e0.forloop&&!_e0.forloop.counter0){this.shared.counter=-1;}++this.shared.counter;var _e2=this.cyclevars[this.shared.counter%this.cyclevars.length];var map=this.shared.map;if(!map[_e2]){map[_e2]=new dd._Filter(_e2);}_e2=map[_e2].resolve(_e0,_e1);if(this.name){_e0[this.name]=_e2;}this.contents.set(_e2);return this.contents.render(_e0,_e1);},unrender:function(_e3,_e4){return this.contents.unrender(_e3,_e4);},clone:function(_e5){return new this.constructor(this.cyclevars,this.name,this.contents.clone(_e5),this.shared);}});_db.IfChangedNode=dojo.extend(function(_e6,_e7,_e8){this.nodes=_e6;this._vars=_e7;this.shared=_e8||{last:null,counter:0};this.vars=dojo.map(_e7,function(_e9){return new dojox.dtl._Filter(_e9);});},{render:function(_ea,_eb){if(_ea.forloop){if(_ea.forloop.counter<=this.shared.counter){this.shared.last=null;}this.shared.counter=_ea.forloop.counter;}var _ec;if(this.vars.length){_ec=dojo.toJson(dojo.map(this.vars,function(_ed){return _ed.resolve(_ea);}));}else{_ec=this.nodes.dummyRender(_ea,_eb);}if(_ec!=this.shared.last){var _ee=(this.shared.last===null);this.shared.last=_ec;_ea=_ea.push();_ea.ifchanged={firstloop:_ee};_eb=this.nodes.render(_ea,_eb);_ea=_ea.pop();}else{_eb=this.nodes.unrender(_ea,_eb);}return _eb;},unrender:function(_ef,_f0){return this.nodes.unrender(_ef,_f0);},clone:function(_f1){return new this.constructor(this.nodes.clone(_f1),this._vars,this.shared);}});_db.RegroupNode=dojo.extend(function(_f2,key,_f3){this._expression=_f2;this.expression=new dd._Filter(_f2);this.key=key;this.alias=_f3;},{_push:function(_f4,_f5,_f6){if(_f6.length){_f4.push({grouper:_f5,list:_f6});}},render:function(_f7,_f8){_f7[this.alias]=[];var _f9=this.expression.resolve(_f7);if(_f9){var _fa=null;var _fb=[];for(var i=0;i<_f9.length;i++){var id=_f9[i][this.key];if(_fa!==id){this._push(_f7[this.alias],_fa,_fb);_fa=id;_fb=[_f9[i]];}else{_fb.push(_f9[i]);}}this._push(_f7[this.alias],_fa,_fb);}return _f8;},unrender:function(_fc,_fd){return _fd;},clone:function(_fe,_ff){return this;}});dojo.mixin(_db,{cycle:function(_100,_101){var args=_101.split_contents();if(args.length<2){throw new Error("'cycle' tag requires at least two arguments");}if(args[1].indexOf(",")!=-1){var vars=args[1].split(",");args=[args[0]];for(var i=0;i<vars.length;i++){args.push("\""+vars[i]+"\"");}}if(args.length==2){var name=args[args.length-1];if(!_100._namedCycleNodes){throw new Error("No named cycles in template: '"+name+"' is not defined");}if(!_100._namedCycleNodes[name]){throw new Error("Named cycle '"+name+"' does not exist");}return _100._namedCycleNodes[name];}if(args.length>4&&args[args.length-2]=="as"){var name=args[args.length-1];var node=new _db.CycleNode(args.slice(1,args.length-2),name,_100.create_text_node());if(!_100._namedCycleNodes){_100._namedCycleNodes={};}_100._namedCycleNodes[name]=node;}else{node=new _db.CycleNode(args.slice(1),null,_100.create_text_node());}return node;},ifchanged:function(_102,_103){var _104=_103.contents.split();var _105=_102.parse(["endifchanged"]);_102.delete_first_token();return new _db.IfChangedNode(_105,_104.slice(1));},regroup:function(_106,_107){var _108=dojox.string.tokenize(_107.contents,/(\s+)/g,function(_109){return _109;});if(_108.length<11||_108[_108.length-3]!="as"||_108[_108.length-7]!="by"){throw new Error("Expected the format: regroup list by key as newList");}var _10a=_108.slice(2,-8).join("");var key=_108[_108.length-5];var _10b=_108[_108.length-1];return new _db.RegroupNode(_10a,key,_10b);}});})();}if(!dojo._hasResource["dojo.date"]){dojo._hasResource["dojo.date"]=true;dojo.provide("dojo.date");dojo.date.getDaysInMonth=function(_10c){var _10d=_10c.getMonth();var days=[31,28,31,30,31,30,31,31,30,31,30,31];if(_10d==1&&dojo.date.isLeapYear(_10c)){return 29;}return days[_10d];};dojo.date.isLeapYear=function(_10e){var year=_10e.getFullYear();return !(year%400)||(!(year%4)&&!!(year%100));};dojo.date.getTimezoneName=function(_10f){var str=_10f.toString();var tz="";var _110;var pos=str.indexOf("(");if(pos>-1){tz=str.substring(++pos,str.indexOf(")"));}else{var pat=/([A-Z\/]+) \d{4}$/;if((_110=str.match(pat))){tz=_110[1];}else{str=_10f.toLocaleString();pat=/ ([A-Z\/]+)$/;if((_110=str.match(pat))){tz=_110[1];}}}return (tz=="AM"||tz=="PM")?"":tz;};dojo.date.compare=function(_111,_112,_113){_111=new Date(+_111);_112=new Date(+(_112||new Date()));if(_113=="date"){_111.setHours(0,0,0,0);_112.setHours(0,0,0,0);}else{if(_113=="time"){_111.setFullYear(0,0,0);_112.setFullYear(0,0,0);}}if(_111>_112){return 1;}if(_111<_112){return -1;}return 0;};dojo.date.add=function(date,_114,_115){var sum=new Date(+date);var _116=false;var _117="Date";switch(_114){case "day":break;case "weekday":var days,_118;var mod=_115%5;if(!mod){days=(_115>0)?5:-5;_118=(_115>0)?((_115-5)/5):((_115+5)/5);}else{days=mod;_118=parseInt(_115/5);}var strt=date.getDay();var adj=0;if(strt==6&&_115>0){adj=1;}else{if(strt==0&&_115<0){adj=-1;}}var trgt=strt+days;if(trgt==0||trgt==6){adj=(_115>0)?2:-2;}_115=(7*_118)+days+adj;break;case "year":_117="FullYear";_116=true;break;case "week":_115*=7;break;case "quarter":_115*=3;case "month":_116=true;_117="Month";break;default:_117="UTC"+_114.charAt(0).toUpperCase()+_114.substring(1)+"s";}if(_117){sum["set"+_117](sum["get"+_117]()+_115);}if(_116&&(sum.getDate()<date.getDate())){sum.setDate(0);}return sum;};dojo.date.difference=function(_119,_11a,_11b){_11a=_11a||new Date();_11b=_11b||"day";var _11c=_11a.getFullYear()-_119.getFullYear();var _11d=1;switch(_11b){case "quarter":var m1=_119.getMonth();var m2=_11a.getMonth();var q1=Math.floor(m1/3)+1;var q2=Math.floor(m2/3)+1;q2+=(_11c*4);_11d=q2-q1;break;case "weekday":var days=Math.round(dojo.date.difference(_119,_11a,"day"));var _11e=parseInt(dojo.date.difference(_119,_11a,"week"));var mod=days%7;if(mod==0){days=_11e*5;}else{var adj=0;var aDay=_119.getDay();var bDay=_11a.getDay();_11e=parseInt(days/7);mod=days%7;var _11f=new Date(_119);_11f.setDate(_11f.getDate()+(_11e*7));var _120=_11f.getDay();if(days>0){switch(true){case aDay==6:adj=-1;break;case aDay==0:adj=0;break;case bDay==6:adj=-1;break;case bDay==0:adj=-2;break;case (_120+mod)>5:adj=-2;}}else{if(days<0){switch(true){case aDay==6:adj=0;break;case aDay==0:adj=1;break;case bDay==6:adj=2;break;case bDay==0:adj=1;break;case (_120+mod)<0:adj=2;}}}days+=adj;days-=(_11e*2);}_11d=days;break;case "year":_11d=_11c;break;case "month":_11d=(_11a.getMonth()-_119.getMonth())+(_11c*12);break;case "week":_11d=parseInt(dojo.date.difference(_119,_11a,"day")/7);break;case "day":_11d/=24;case "hour":_11d/=60;case "minute":_11d/=60;case "second":_11d/=1000;case "millisecond":_11d*=_11a.getTime()-_119.getTime();}return Math.round(_11d);};}if(!dojo._hasResource["dojox.date.php"]){dojo._hasResource["dojox.date.php"]=true;dojo.provide("dojox.date.php");dojox.date.php.format=function(date,_121){var df=new dojox.date.php.DateFormat(_121);return df.format(date);};dojox.date.php.DateFormat=function(_122){if(!this.regex){var keys=[];for(var key in this.constructor.prototype){if(dojo.isString(key)&&key.length==1&&dojo.isFunction(this[key])){keys.push(key);}}this.constructor.prototype.regex=new RegExp("(?:(\\\\.)|(["+keys.join("")+"]))","g");}var _123=[];this.tokens=dojox.string.tokenize(_122,this.regex,function(_124,_125,i){if(_125){_123.push([i,_125]);return _125;}if(_124){return _124.charAt(1);}});this.replacements=_123;};dojo.extend(dojox.date.php.DateFormat,{weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdays_3:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],months_3:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],monthdays:[31,28,31,30,31,30,31,31,30,31,30,31],format:function(date){this.date=date;for(var i=0,_126;_126=this.replacements[i];i++){this.tokens[_126[0]]=this[_126[1]]();}return this.tokens.join("");},d:function(){var j=this.j();return (j.length==1)?"0"+j:j;},D:function(){return this.weekdays_3[this.date.getDay()];},j:function(){return this.date.getDate()+"";},l:function(){return this.weekdays[this.date.getDay()];},N:function(){var w=this.w();return (!w)?7:w;},S:function(){switch(this.date.getDate()){case 11:case 12:case 13:return "th";case 1:case 21:case 31:return "st";case 2:case 22:return "nd";case 3:case 23:return "rd";default:return "th";}},w:function(){return this.date.getDay()+"";},z:function(){var _127=this.date.getTime()-new Date(this.date.getFullYear(),0,1).getTime();return Math.floor(_127/86400000)+"";},W:function(){var week;var _128=new Date(this.date.getFullYear(),0,1).getDay()+1;var w=this.date.getDay()+1;var z=parseInt(this.z());if(z<=(8-_128)&&_128>4){var _129=new Date(this.date.getFullYear()-1,this.date.getMonth(),this.date.getDate());if(_128==5||(_128==6&&dojo.date.isLeapYear(_129))){week=53;}else{week=52;}}else{var i;if(Boolean(this.L())){i=366;}else{i=365;}if((i-z)<(4-w)){week=1;}else{var j=z+(7-w)+(_128-1);week=Math.ceil(j/7);if(_128>4){--week;}}}return week;},F:function(){return this.months[this.date.getMonth()];},m:function(){var n=this.n();return (n.length==1)?"0"+n:n;},M:function(){return this.months_3[this.date.getMonth()];},n:function(){return this.date.getMonth()+1+"";},t:function(){return (Boolean(this.L())&&this.date.getMonth()==1)?29:this.monthdays[this.getMonth()];},L:function(){return (dojo.date.isLeapYear(this.date))?"1":"0";},o:function(){},Y:function(){return this.date.getFullYear()+"";},y:function(){return this.Y().slice(-2);},a:function(){return this.date.getHours()>=12?"pm":"am";},b:function(){return this.a().toUpperCase();},B:function(){var off=this.date.getTimezoneOffset()+60;var secs=(this.date.getHours()*3600)+(this.date.getMinutes()*60)+this.getSeconds()+(off*60);var beat=Math.abs(Math.floor(secs/86.4)%1000)+"";while(beat.length<2){beat="0"+beat;}return beat;},g:function(){return (this.date.getHours()>12)?this.date.getHours()-12+"":this.date.getHours()+"";},G:function(){return this.date.getHours()+"";},h:function(){var g=this.g();return (g.length==1)?"0"+g:g;},H:function(){var G=this.G();return (G.length==1)?"0"+G:G;},i:function(){var mins=this.date.getMinutes()+"";return (mins.length==1)?"0"+mins:mins;},s:function(){var secs=this.date.getSeconds()+"";return (secs.length==1)?"0"+secs:secs;},e:function(){return dojo.date.getTimezoneName(this.date);},I:function(){},O:function(){var off=Math.abs(this.date.getTimezoneOffset());var _12a=Math.floor(off/60)+"";var mins=(off%60)+"";if(_12a.length==1){_12a="0"+_12a;}if(mins.length==1){_12a="0"+mins;}return ((this.date.getTimezoneOffset()<0)?"+":"-")+_12a+mins;},P:function(){var O=this.O();return O.substring(0,2)+":"+O.substring(2,4);},T:function(){return this.e().substring(0,3);},Z:function(){return this.date.getTimezoneOffset()*-60;},c:function(){return this.Y()+"-"+this.m()+"-"+this.d()+"T"+this.h()+":"+this.i()+":"+this.s()+this.P();},r:function(){return this.D()+", "+this.d()+" "+this.M()+" "+this.Y()+" "+this.H()+":"+this.i()+":"+this.s()+" "+this.O();},U:function(){return Math.floor(this.date.getTime()/1000);}});}if(!dojo._hasResource["dojox.dtl.utils.date"]){dojo._hasResource["dojox.dtl.utils.date"]=true;dojo.provide("dojox.dtl.utils.date");dojox.dtl.utils.date.DateFormat=function(_12b){dojox.date.php.DateFormat.call(this,_12b);};dojo.extend(dojox.dtl.utils.date.DateFormat,dojox.date.php.DateFormat.prototype,{f:function(){return (!this.date.getMinutes())?this.g():this.g()+":"+this.i();},N:function(){return dojox.dtl.utils.date._months_ap[this.date.getMonth()];},P:function(){if(!this.date.getMinutes()&&!this.date.getHours()){return "midnight";}if(!this.date.getMinutes()&&this.date.getHours()==12){return "noon";}return this.f()+" "+this.a();}});dojo.mixin(dojox.dtl.utils.date,{format:function(date,_12c){var df=new dojox.dtl.utils.date.DateFormat(_12c);return df.format(date);},timesince:function(d,now){if(!(d instanceof Date)){d=new Date(d.year,d.month,d.day);}if(!now){now=new Date();}var _12d=Math.abs(now.getTime()-d.getTime());for(var i=0,_12e;_12e=dojox.dtl.utils.date._chunks[i];i++){var _12f=Math.floor(_12d/_12e[0]);if(_12f){break;}}return _12f+" "+_12e[1](_12f);},_chunks:[[60*60*24*365*1000,function(n){return (n==1)?"year":"years";}],[60*60*24*30*1000,function(n){return (n==1)?"month":"months";}],[60*60*24*7*1000,function(n){return (n==1)?"week":"weeks";}],[60*60*24*1000,function(n){return (n==1)?"day":"days";}],[60*60*1000,function(n){return (n==1)?"hour":"hours";}],[60*1000,function(n){return (n==1)?"minute":"minutes";}]],_months_ap:["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."]});}if(!dojo._hasResource["dojox.dtl.tag.date"]){dojo._hasResource["dojox.dtl.tag.date"]=true;dojo.provide("dojox.dtl.tag.date");dojox.dtl.tag.date.NowNode=function(_130,node){this._format=_130;this.format=new dojox.dtl.utils.date.DateFormat(_130);this.contents=node;};dojo.extend(dojox.dtl.tag.date.NowNode,{render:function(_131,_132){this.contents.set(this.format.format(new Date()));return this.contents.render(_131,_132);},unrender:function(_133,_134){return this.contents.unrender(_133,_134);},clone:function(_135){return new this.constructor(this._format,this.contents.clone(_135));}});dojox.dtl.tag.date.now=function(_136,_137){var _138=_137.split_contents();if(_138.length!=2){throw new Error("'now' statement takes one argument");}return new dojox.dtl.tag.date.NowNode(_138[1].slice(1,-1),_136.create_text_node());};}if(!dojo._hasResource["dojox.dtl.tag.loader"]){dojo._hasResource["dojox.dtl.tag.loader"]=true;dojo.provide("dojox.dtl.tag.loader");(function(){var dd=dojox.dtl;var ddtl=dd.tag.loader;ddtl.BlockNode=dojo.extend(function(name,_139){this.name=name;this.nodelist=_139;},{"super":function(){if(this.parent){var html=this.parent.nodelist.dummyRender(this.context,null,true);if(typeof html=="string"){html=new String(html);}html.safe=true;return html;}return "";},render:function(_13a,_13b){var name=this.name;var _13c=this.nodelist;var _13d;if(_13b.blocks){var _13e=_13b.blocks[name];if(_13e){_13d=_13e.parent;_13c=_13e.nodelist;_13e.used=true;}}this.rendered=_13c;_13a=_13a.push();this.context=_13a;this.parent=null;if(_13c!=this.nodelist){this.parent=this;}_13a.block=this;if(_13b.getParent){var _13f=_13b.getParent();var _140=dojo.connect(_13b,"onSetParent",function(node,up,root){if(up&&root){_13b.setParent(_13f);}});}_13b=_13c.render(_13a,_13b,this);_140&&dojo.disconnect(_140);_13a=_13a.pop();return _13b;},unrender:function(_141,_142){return this.rendered.unrender(_141,_142);},clone:function(_143){return new this.constructor(this.name,this.nodelist.clone(_143));},toString:function(){return "dojox.dtl.tag.loader.BlockNode";}});ddtl.ExtendsNode=dojo.extend(function(_144,_145,_146,_147,key){this.getTemplate=_144;this.nodelist=_145;this.shared=_146;this.parent=_147;this.key=key;},{parents:{},getParent:function(_148){var _149=this.parent;if(!_149){var _14a;_149=this.parent=_148.get(this.key,false);if(!_149){throw new Error("extends tag used a variable that did not resolve");}if(typeof _149=="object"){var url=_149.url||_149.templatePath;if(_149.shared){this.shared=true;}if(url){_149=this.parent=url.toString();}else{if(_149.templateString){_14a=_149.templateString;_149=this.parent=" ";}else{_149=this.parent=this.parent.toString();}}}if(_149&&_149.indexOf("shared:")===0){this.shared=true;_149=this.parent=_149.substring(7,_149.length);}}if(!_149){throw new Error("Invalid template name in 'extends' tag.");}if(_149.render){return _149;}if(this.parents[_149]){return this.parents[_149];}this.parent=this.getTemplate(_14a||dojox.dtl.text.getTemplateString(_149));if(this.shared){this.parents[_149]=this.parent;}return this.parent;},render:function(_14b,_14c){var _14d=this.getParent(_14b);_14d.blocks=_14d.blocks||{};_14c.blocks=_14c.blocks||{};for(var i=0,node;node=this.nodelist.contents[i];i++){if(node instanceof dojox.dtl.tag.loader.BlockNode){var old=_14d.blocks[node.name];if(old&&old.nodelist!=node.nodelist){_14c=old.nodelist.unrender(_14b,_14c);}_14d.blocks[node.name]=_14c.blocks[node.name]={shared:this.shared,nodelist:node.nodelist,used:false};}}this.rendered=_14d;return _14d.nodelist.render(_14b,_14c,this);},unrender:function(_14e,_14f){return this.rendered.unrender(_14e,_14f,this);},toString:function(){return "dojox.dtl.block.ExtendsNode";}});ddtl.IncludeNode=dojo.extend(function(path,_150,_151,text,_152){this._path=path;this.constant=_150;this.path=(_150)?path:new dd._Filter(path);this.getTemplate=_151;this.text=text;this.parsed=(arguments.length==5)?_152:true;},{_cache:[{},{}],render:function(_153,_154){var _155=((this.constant)?this.path:this.path.resolve(_153)).toString();var _156=Number(this.parsed);var _157=false;if(_155!=this.last){_157=true;if(this.last){_154=this.unrender(_153,_154);}this.last=_155;}var _158=this._cache[_156];if(_156){if(!_158[_155]){_158[_155]=dd.text._resolveTemplateArg(_155,true);}if(_157){var _159=this.getTemplate(_158[_155]);this.rendered=_159.nodelist;}return this.rendered.render(_153,_154,this);}else{if(this.text instanceof dd._TextNode){if(_157){this.rendered=this.text;this.rendered.set(dd.text._resolveTemplateArg(_155,true));}return this.rendered.render(_153,_154);}else{if(!_158[_155]){var _15a=[];var div=document.createElement("div");div.innerHTML=dd.text._resolveTemplateArg(_155,true);var _15b=div.childNodes;while(_15b.length){var _15c=div.removeChild(_15b[0]);_15a.push(_15c);}_158[_155]=_15a;}if(_157){this.nodelist=[];var _15d=true;for(var i=0,_15e;_15e=_158[_155][i];i++){this.nodelist.push(_15e.cloneNode(true));}}for(var i=0,node;node=this.nodelist[i];i++){_154=_154.concat(node);}}}return _154;},unrender:function(_15f,_160){if(this.rendered){_160=this.rendered.unrender(_15f,_160);}if(this.nodelist){for(var i=0,node;node=this.nodelist[i];i++){_160=_160.remove(node);}}return _160;},clone:function(_161){return new this.constructor(this._path,this.constant,this.getTemplate,this.text.clone(_161),this.parsed);}});dojo.mixin(ddtl,{block:function(_162,_163){var _164=_163.contents.split();var name=_164[1];_162._blocks=_162._blocks||{};_162._blocks[name]=_162._blocks[name]||[];_162._blocks[name].push(name);var _165=_162.parse(["endblock","endblock "+name]).rtrim();_162.next_token();return new dojox.dtl.tag.loader.BlockNode(name,_165);},extends_:function(_166,_167){var _168=_167.contents.split();var _169=false;var _16a=null;var key=null;if(_168[1].charAt(0)=="\""||_168[1].charAt(0)=="'"){_16a=_168[1].substring(1,_168[1].length-1);}else{key=_168[1];}if(_16a&&_16a.indexOf("shared:")==0){_169=true;_16a=_16a.substring(7,_16a.length);}var _16b=_166.parse();return new dojox.dtl.tag.loader.ExtendsNode(_166.getTemplate,_16b,_169,_16a,key);},include:function(_16c,_16d){var _16e=_16d.contents.split();if(_16e.length!=2){throw new Error(_16e[0]+" tag takes one argument: the name of the template to be included");}var path=_16e[1];var _16f=false;if((path.charAt(0)=="\""||path.slice(-1)=="'")&&path.charAt(0)==path.slice(-1)){path=path.slice(1,-1);_16f=true;}return new ddtl.IncludeNode(path,_16f,_16c.getTemplate,_16c.create_text_node());},ssi:function(_170,_171){var _172=_171.contents.split();var _173=false;if(_172.length==3){_173=(_172.pop()=="parsed");if(!_173){throw new Error("Second (optional) argument to ssi tag must be 'parsed'");}}var node=ddtl.include(_170,new dd.Token(_171.token_type,_172.join(" ")));node.parsed=_173;return node;}});})();}if(!dojo._hasResource["dojox.dtl.tag.misc"]){dojo._hasResource["dojox.dtl.tag.misc"]=true;dojo.provide("dojox.dtl.tag.misc");(function(){var dd=dojox.dtl;var ddtm=dd.tag.misc;ddtm.DebugNode=dojo.extend(function(text){this.text=text;},{render:function(_174,_175){var keys=_174.getKeys();var _176=[];var only={};for(var i=0,key;key=keys[i];i++){only[key]=_174[key];_176+="["+key+": "+typeof _174[key]+"]\n";}return this.text.set(_176).render(_174,_175,this);},unrender:function(_177,_178){return _178;},clone:function(_179){return new this.constructor(this.text.clone(_179));},toString:function(){return "ddtm.DebugNode";}});ddtm.FilterNode=dojo.extend(function(_17a,_17b){this._varnode=_17a;this._nodelist=_17b;},{render:function(_17c,_17d){var _17e=this._nodelist.render(_17c,new dojox.string.Builder());_17c=_17c.update({"var":_17e.toString()});var _17f=this._varnode.render(_17c,_17d);_17c=_17c.pop();return _17d;},unrender:function(_180,_181){return _181;},clone:function(_182){return new this.constructor(this._expression,this._nodelist.clone(_182));}});ddtm.FirstOfNode=dojo.extend(function(vars,text){this._vars=vars;this.vars=dojo.map(vars,function(item){return new dojox.dtl._Filter(item);});this.contents=text;},{render:function(_183,_184){for(var i=0,item;item=this.vars[i];i++){var _185=item.resolve(_183);if(typeof _185!="undefined"){if(_185===null){_185="null";}this.contents.set(_185);return this.contents.render(_183,_184);}}return this.contents.unrender(_183,_184);},unrender:function(_186,_187){return this.contents.unrender(_186,_187);},clone:function(_188){return new this.constructor(this._vars,this.contents.clone(_188));}});ddtm.SpacelessNode=dojo.extend(function(_189,text){this.nodelist=_189;this.contents=text;},{render:function(_18a,_18b){if(_18b.getParent){var _18c=[dojo.connect(_18b,"onAddNodeComplete",this,"_watch"),dojo.connect(_18b,"onSetParent",this,"_watchParent")];_18b=this.nodelist.render(_18a,_18b);dojo.disconnect(_18c[0]);dojo.disconnect(_18c[1]);}else{var _18d=this.nodelist.dummyRender(_18a);this.contents.set(_18d.replace(/>\s+</g,"><"));_18b=this.contents.render(_18a,_18b);}return _18b;},unrender:function(_18e,_18f){return this.nodelist.unrender(_18e,_18f);},clone:function(_190){return new this.constructor(this.nodelist.clone(_190),this.contents.clone(_190));},_isEmpty:function(node){return (node.nodeType==3&&!node.data.match(/[^\s\n]/));},_watch:function(node){if(this._isEmpty(node)){var _191=false;if(node.parentNode.firstChild==node){node.parentNode.removeChild(node);}}else{var _192=node.parentNode.childNodes;if(node.nodeType==1&&_192.length>2){for(var i=2,_193;_193=_192[i];i++){if(_192[i-2].nodeType==1&&this._isEmpty(_192[i-1])){node.parentNode.removeChild(_192[i-1]);return;}}}}},_watchParent:function(node){var _194=node.childNodes;if(_194.length){while(node.childNodes.length){var last=node.childNodes[node.childNodes.length-1];if(!this._isEmpty(last)){return;}node.removeChild(last);}}}});ddtm.TemplateTagNode=dojo.extend(function(tag,text){this.tag=tag;this.contents=text;},{mapping:{openblock:"{%",closeblock:"%}",openvariable:"{{",closevariable:"}}",openbrace:"{",closebrace:"}",opencomment:"{#",closecomment:"#}"},render:function(_195,_196){this.contents.set(this.mapping[this.tag]);return this.contents.render(_195,_196);},unrender:function(_197,_198){return this.contents.unrender(_197,_198);},clone:function(_199){return new this.constructor(this.tag,this.contents.clone(_199));}});ddtm.WidthRatioNode=dojo.extend(function(_19a,max,_19b,text){this.current=new dd._Filter(_19a);this.max=new dd._Filter(max);this.width=_19b;this.contents=text;},{render:function(_19c,_19d){var _19e=+this.current.resolve(_19c);var max=+this.max.resolve(_19c);if(typeof _19e!="number"||typeof max!="number"||!max){this.contents.set("");}else{this.contents.set(""+Math.round((_19e/max)*this.width));}return this.contents.render(_19c,_19d);},unrender:function(_19f,_1a0){return this.contents.unrender(_19f,_1a0);},clone:function(_1a1){return new this.constructor(this.current.getExpression(),this.max.getExpression(),this.width,this.contents.clone(_1a1));}});ddtm.WithNode=dojo.extend(function(_1a2,_1a3,_1a4){this.target=new dd._Filter(_1a2);this.alias=_1a3;this.nodelist=_1a4;},{render:function(_1a5,_1a6){var _1a7=this.target.resolve(_1a5);_1a5=_1a5.push();_1a5[this.alias]=_1a7;_1a6=this.nodelist.render(_1a5,_1a6);_1a5=_1a5.pop();return _1a6;},unrender:function(_1a8,_1a9){return _1a9;},clone:function(_1aa){return new this.constructor(this.target.getExpression(),this.alias,this.nodelist.clone(_1aa));}});dojo.mixin(ddtm,{comment:function(_1ab,_1ac){_1ab.skip_past("endcomment");return dd._noOpNode;},debug:function(_1ad,_1ae){return new ddtm.DebugNode(_1ad.create_text_node());},filter:function(_1af,_1b0){var rest=_1b0.contents.split(null,1)[1];var _1b1=_1af.create_variable_node("var|"+rest);var _1b2=_1af.parse(["endfilter"]);_1af.next_token();return new ddtm.FilterNode(_1b1,_1b2);},firstof:function(_1b3,_1b4){var _1b5=_1b4.split_contents().slice(1);if(!_1b5.length){throw new Error("'firstof' statement requires at least one argument");}return new ddtm.FirstOfNode(_1b5,_1b3.create_text_node());},spaceless:function(_1b6,_1b7){var _1b8=_1b6.parse(["endspaceless"]);_1b6.delete_first_token();return new ddtm.SpacelessNode(_1b8,_1b6.create_text_node());},templatetag:function(_1b9,_1ba){var _1bb=_1ba.contents.split();if(_1bb.length!=2){throw new Error("'templatetag' statement takes one argument");}var tag=_1bb[1];var _1bc=ddtm.TemplateTagNode.prototype.mapping;if(!_1bc[tag]){var keys=[];for(var key in _1bc){keys.push(key);}throw new Error("Invalid templatetag argument: '"+tag+"'. Must be one of: "+keys.join(", "));}return new ddtm.TemplateTagNode(tag,_1b9.create_text_node());},widthratio:function(_1bd,_1be){var _1bf=_1be.contents.split();if(_1bf.length!=4){throw new Error("widthratio takes three arguments");}var _1c0=+_1bf[3];if(typeof _1c0!="number"){throw new Error("widthratio final argument must be an integer");}return new ddtm.WidthRatioNode(_1bf[1],_1bf[2],_1c0,_1bd.create_text_node());},with_:function(_1c1,_1c2){var _1c3=_1c2.split_contents();if(_1c3.length!=4||_1c3[2]!="as"){throw new Error("do_width expected format as 'with value as name'");}var _1c4=_1c1.parse(["endwith"]);_1c1.next_token();return new ddtm.WithNode(_1c3[1],_1c3[3],_1c4);}});})();}if(!dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]){dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]=true;dojo.provide("dojox.dtl.ext-dojo.NodeList");dojo.extend(dojo.NodeList,{dtl:function(_1c5,_1c6){var d=dojox.dtl;var self=this;var _1c7=function(_1c8,_1c9){var _1ca=_1c8.render(new d._Context(_1c9));self.forEach(function(node){node.innerHTML=_1ca;});};d.text._resolveTemplateArg(_1c5).addCallback(function(_1cb){_1c5=new d.Template(_1cb);d.text._resolveContextArg(_1c6).addCallback(function(_1cc){_1c7(_1c5,_1cc);});});return this;}});}
Index: trunk/web/dojo/dojox/charting/scaler/common.js
===================================================================
--- trunk/web/dojo/dojox/charting/scaler/common.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/scaler/common.js	(revision 9)
@@ -0,0 +1,56 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.scaler.common"]){
+dojo._hasResource["dojox.charting.scaler.common"]=true;
+dojo.provide("dojox.charting.scaler.common");
+(function(){
+var eq=function(a,b){
+return Math.abs(a-b)<=0.000001*(Math.abs(a)+Math.abs(b));
+};
+dojo.mixin(dojox.charting.scaler.common,{findString:function(_1,_2){
+_1=_1.toLowerCase();
+for(var i=0;i<_2.length;++i){
+if(_1==_2[i]){
+return true;
+}
+}
+return false;
+},getNumericLabel:function(_3,_4,_5){
+var _6=_5.fixed?_3.toFixed(_4<0?-_4:0):_3.toString();
+if(_5.labelFunc){
+var r=_5.labelFunc(_6,_3,_4);
+if(r){
+return r;
+}
+}
+if(_5.labels){
+var l=_5.labels,lo=0,hi=l.length;
+while(lo<hi){
+var _7=Math.floor((lo+hi)/2),_8=l[_7].value;
+if(_8<_3){
+lo=_7+1;
+}else{
+hi=_7;
+}
+}
+if(lo<l.length&&eq(l[lo].value,_3)){
+return l[lo].text;
+}
+--lo;
+if(lo>=0&&lo<l.length&&eq(l[lo].value,_3)){
+return l[lo].text;
+}
+lo+=2;
+if(lo<l.length&&eq(l[lo].value,_3)){
+return l[lo].text;
+}
+}
+return _6;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/scaler/primitive.js
===================================================================
--- trunk/web/dojo/dojox/charting/scaler/primitive.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/scaler/primitive.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.scaler.primitive"]){
+dojo._hasResource["dojox.charting.scaler.primitive"]=true;
+dojo.provide("dojox.charting.scaler.primitive");
+dojox.charting.scaler.primitive={buildScaler:function(_1,_2,_3,_4){
+if(_1==_2){
+_1-=0.5;
+_2+=0.5;
+}
+return {bounds:{lower:_1,upper:_2,from:_1,to:_2,scale:_3/(_2-_1),span:_3},scaler:dojox.charting.scaler.primitive};
+},buildTicks:function(_5,_6){
+return {major:[],minor:[],micro:[]};
+},getTransformerFromModel:function(_7){
+var _8=_7.bounds.from,_9=_7.bounds.scale;
+return function(x){
+return (x-_8)*_9;
+};
+},getTransformerFromPlot:function(_a){
+var _b=_a.bounds.from,_c=_a.bounds.scale;
+return function(x){
+return x/_c+_b;
+};
+}};
+}
Index: trunk/web/dojo/dojox/charting/scaler/linear.js
===================================================================
--- trunk/web/dojo/dojox/charting/scaler/linear.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/scaler/linear.js	(revision 9)
@@ -0,0 +1,217 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.scaler.linear"]){
+dojo._hasResource["dojox.charting.scaler.linear"]=true;
+dojo.provide("dojox.charting.scaler.linear");
+dojo.require("dojox.charting.scaler.common");
+(function(){
+var _1=3,dc=dojox.charting,_2=dc.scaler,_3=_2.common,_4=_3.findString,_5=_3.getNumericLabel;
+var _6=function(_7,_8,_9,_a,_b,_c,_d){
+_9=dojo.delegate(_9);
+if(!_a){
+if(_9.fixUpper=="major"){
+_9.fixUpper="minor";
+}
+if(_9.fixLower=="major"){
+_9.fixLower="minor";
+}
+}
+if(!_b){
+if(_9.fixUpper=="minor"){
+_9.fixUpper="micro";
+}
+if(_9.fixLower=="minor"){
+_9.fixLower="micro";
+}
+}
+if(!_c){
+if(_9.fixUpper=="micro"){
+_9.fixUpper="none";
+}
+if(_9.fixLower=="micro"){
+_9.fixLower="none";
+}
+}
+var _e=_4(_9.fixLower,["major"])?Math.floor(_9.min/_a)*_a:_4(_9.fixLower,["minor"])?Math.floor(_9.min/_b)*_b:_4(_9.fixLower,["micro"])?Math.floor(_9.min/_c)*_c:_9.min,_f=_4(_9.fixUpper,["major"])?Math.ceil(_9.max/_a)*_a:_4(_9.fixUpper,["minor"])?Math.ceil(_9.max/_b)*_b:_4(_9.fixUpper,["micro"])?Math.ceil(_9.max/_c)*_c:_9.max;
+if(_9.useMin){
+_7=_e;
+}
+if(_9.useMax){
+_8=_f;
+}
+var _10=(!_a||_9.useMin&&_4(_9.fixLower,["major"]))?_7:Math.ceil(_7/_a)*_a,_11=(!_b||_9.useMin&&_4(_9.fixLower,["major","minor"]))?_7:Math.ceil(_7/_b)*_b,_12=(!_c||_9.useMin&&_4(_9.fixLower,["major","minor","micro"]))?_7:Math.ceil(_7/_c)*_c,_13=!_a?0:(_9.useMax&&_4(_9.fixUpper,["major"])?Math.round((_8-_10)/_a):Math.floor((_8-_10)/_a))+1,_14=!_b?0:(_9.useMax&&_4(_9.fixUpper,["major","minor"])?Math.round((_8-_11)/_b):Math.floor((_8-_11)/_b))+1,_15=!_c?0:(_9.useMax&&_4(_9.fixUpper,["major","minor","micro"])?Math.round((_8-_12)/_c):Math.floor((_8-_12)/_c))+1,_16=_b?Math.round(_a/_b):0,_17=_c?Math.round(_b/_c):0,_18=_a?Math.floor(Math.log(_a)/Math.LN10):0,_19=_b?Math.floor(Math.log(_b)/Math.LN10):0,_1a=_d/(_8-_7);
+if(!isFinite(_1a)){
+_1a=1;
+}
+return {bounds:{lower:_e,upper:_f,from:_7,to:_8,scale:_1a,span:_d},major:{tick:_a,start:_10,count:_13,prec:_18},minor:{tick:_b,start:_11,count:_14,prec:_19},micro:{tick:_c,start:_12,count:_15,prec:0},minorPerMajor:_16,microPerMinor:_17,scaler:_2.linear};
+};
+dojo.mixin(dojox.charting.scaler.linear,{buildScaler:function(min,max,_1b,_1c){
+var h={fixUpper:"none",fixLower:"none",natural:false};
+if(_1c){
+if("fixUpper" in _1c){
+h.fixUpper=String(_1c.fixUpper);
+}
+if("fixLower" in _1c){
+h.fixLower=String(_1c.fixLower);
+}
+if("natural" in _1c){
+h.natural=Boolean(_1c.natural);
+}
+}
+if("min" in _1c){
+min=_1c.min;
+}
+if("max" in _1c){
+max=_1c.max;
+}
+if(_1c.includeZero){
+if(min>0){
+min=0;
+}
+if(max<0){
+max=0;
+}
+}
+h.min=min;
+h.useMin=true;
+h.max=max;
+h.useMax=true;
+if("from" in _1c){
+min=_1c.from;
+h.useMin=false;
+}
+if("to" in _1c){
+max=_1c.to;
+h.useMax=false;
+}
+if(max<=min){
+return _6(min,max,h,0,0,0,_1b);
+}
+var mag=Math.floor(Math.log(max-min)/Math.LN10),_1d=_1c&&("majorTickStep" in _1c)?_1c.majorTickStep:Math.pow(10,mag),_1e=0,_1f=0,_20;
+if(_1c&&("minorTickStep" in _1c)){
+_1e=_1c.minorTickStep;
+}else{
+do{
+_1e=_1d/10;
+if(!h.natural||_1e>0.9){
+_20=_6(min,max,h,_1d,_1e,0,_1b);
+if(_20.bounds.scale*_20.minor.tick>_1){
+break;
+}
+}
+_1e=_1d/5;
+if(!h.natural||_1e>0.9){
+_20=_6(min,max,h,_1d,_1e,0,_1b);
+if(_20.bounds.scale*_20.minor.tick>_1){
+break;
+}
+}
+_1e=_1d/2;
+if(!h.natural||_1e>0.9){
+_20=_6(min,max,h,_1d,_1e,0,_1b);
+if(_20.bounds.scale*_20.minor.tick>_1){
+break;
+}
+}
+return _6(min,max,h,_1d,0,0,_1b);
+}while(false);
+}
+if(_1c&&("microTickStep" in _1c)){
+_1f=_1c.microTickStep;
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+}else{
+do{
+_1f=_1e/10;
+if(!h.natural||_1f>0.9){
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+if(_20.bounds.scale*_20.micro.tick>_1){
+break;
+}
+}
+_1f=_1e/5;
+if(!h.natural||_1f>0.9){
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+if(_20.bounds.scale*_20.micro.tick>_1){
+break;
+}
+}
+_1f=_1e/2;
+if(!h.natural||_1f>0.9){
+_20=_6(min,max,h,_1d,_1e,_1f,_1b);
+if(_20.bounds.scale*_20.micro.tick>_1){
+break;
+}
+}
+_1f=0;
+}while(false);
+}
+return _1f?_20:_6(min,max,h,_1d,_1e,0,_1b);
+},buildTicks:function(_21,_22){
+var _23,_24,_25,_26=_21.major.start,_27=_21.minor.start,_28=_21.micro.start;
+if(_22.microTicks&&_21.micro.tick){
+_23=_21.micro.tick,_24=_28;
+}else{
+if(_22.minorTicks&&_21.minor.tick){
+_23=_21.minor.tick,_24=_27;
+}else{
+if(_21.major.tick){
+_23=_21.major.tick,_24=_26;
+}else{
+return null;
+}
+}
+}
+var _29=1/_21.bounds.scale;
+if(_21.bounds.to<=_21.bounds.from||isNaN(_29)||!isFinite(_29)||_23<=0||isNaN(_23)||!isFinite(_23)){
+return null;
+}
+var _2a=[],_2b=[],_2c=[];
+while(_24<=_21.bounds.to+_29){
+if(Math.abs(_26-_24)<_23/2){
+_25={value:_26};
+if(_22.majorLabels){
+_25.label=_5(_26,_21.major.prec,_22);
+}
+_2a.push(_25);
+_26+=_21.major.tick;
+_27+=_21.minor.tick;
+_28+=_21.micro.tick;
+}else{
+if(Math.abs(_27-_24)<_23/2){
+if(_22.minorTicks){
+_25={value:_27};
+if(_22.minorLabels&&(_21.minMinorStep<=_21.minor.tick*_21.bounds.scale)){
+_25.label=_5(_27,_21.minor.prec,_22);
+}
+_2b.push(_25);
+}
+_27+=_21.minor.tick;
+_28+=_21.micro.tick;
+}else{
+if(_22.microTicks){
+_2c.push({value:_28});
+}
+_28+=_21.micro.tick;
+}
+}
+_24+=_23;
+}
+return {major:_2a,minor:_2b,micro:_2c};
+},getTransformerFromModel:function(_2d){
+var _2e=_2d.bounds.from,_2f=_2d.bounds.scale;
+return function(x){
+return (x-_2e)*_2f;
+};
+},getTransformerFromPlot:function(_30){
+var _31=_30.bounds.from,_32=_30.bounds.scale;
+return function(x){
+return x/_32+_31;
+};
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/axis2d/Default.js
===================================================================
--- trunk/web/dojo/dojox/charting/axis2d/Default.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/axis2d/Default.js	(revision 9)
@@ -0,0 +1,322 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.axis2d.Default"]){
+dojo._hasResource["dojox.charting.axis2d.Default"]=true;
+dojo.provide("dojox.charting.axis2d.Default");
+dojo.require("dojox.charting.axis2d.Invisible");
+dojo.require("dojox.charting.scaler.linear");
+dojo.require("dojox.charting.axis2d.common");
+dojo.require("dojo.colors");
+dojo.require("dojo.string");
+dojo.require("dojox.gfx");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.utils");
+(function(){
+var dc=dojox.charting,du=dojox.lang.utils,g=dojox.gfx,_1=dc.scaler.linear,_2=4,_3=45;
+dojo.declare("dojox.charting.axis2d.Default",dojox.charting.axis2d.Invisible,{defaultParams:{vertical:false,fixUpper:"none",fixLower:"none",natural:false,leftBottom:true,includeZero:false,fixed:true,majorLabels:true,minorTicks:true,minorLabels:true,microTicks:false,rotation:0,htmlLabels:true},optionalParams:{min:0,max:1,from:0,to:1,majorTickStep:4,minorTickStep:2,microTickStep:1,labels:[],labelFunc:null,maxLabelSize:0,stroke:{},majorTick:{},minorTick:{},microTick:{},tick:{},font:"",fontColor:""},constructor:function(_4,_5){
+this.opt=dojo.delegate(this.defaultParams,_5);
+du.updateWithPattern(this.opt,_5,this.optionalParams);
+},getOffsets:function(){
+var s=this.scaler,_6={l:0,r:0,t:0,b:0};
+if(!s){
+return _6;
+}
+var o=this.opt,_7=0,a,b,c,d,gl=dc.scaler.common.getNumericLabel,_8=0,ma=s.major,mi=s.minor,ta=this.chart.theme.axis,_9=o.font||(ta.majorTick&&ta.majorTick.font)||(ta.tick&&ta.tick.font),_a=this.chart.theme.getTick("major",o),_b=this.chart.theme.getTick("minor",o),_c=_9?g.normalizedLength(g.splitFontString(_9).size):0,_d=o.rotation%360,_e=o.leftBottom,_f=Math.abs(Math.cos(_d*Math.PI/180)),_10=Math.abs(Math.sin(_d*Math.PI/180));
+if(_d<0){
+_d+=360;
+}
+if(_c){
+if(o.maxLabelSize){
+_7=o.maxLabelSize;
+}else{
+if(this.labels){
+_7=this._groupLabelWidth(this.labels,_9);
+}else{
+_7=this._groupLabelWidth([gl(ma.start,ma.prec,o),gl(ma.start+ma.count*ma.tick,ma.prec,o),gl(mi.start,mi.prec,o),gl(mi.start+mi.count*mi.tick,mi.prec,o)],_9);
+}
+}
+if(this.vertical){
+var _11=_e?"l":"r";
+switch(_d){
+case 0:
+case 180:
+_6[_11]=_7;
+_6.t=_6.b=_c/2;
+break;
+case 90:
+case 270:
+_6[_11]=_c;
+_6.t=_6.b=_7/2;
+break;
+default:
+if(_d<=_3||(180<_d&&_d<=(180+_3))){
+_6[_11]=_c*_10/2+_7*_f;
+_6[_e?"t":"b"]=_c*_f/2+_7*_10;
+_6[_e?"b":"t"]=_c*_f/2;
+}else{
+if(_d>(360-_3)||(180>_d&&_d>(180-_3))){
+_6[_11]=_c*_10/2+_7*_f;
+_6[_e?"b":"t"]=_c*_f/2+_7*_10;
+_6[_e?"t":"b"]=_c*_f/2;
+}else{
+if(_d<90||(180<_d&&_d<270)){
+_6[_11]=_c*_10+_7*_f;
+_6[_e?"t":"b"]=_c*_f+_7*_10;
+}else{
+_6[_11]=_c*_10+_7*_f;
+_6[_e?"b":"t"]=_c*_f+_7*_10;
+}
+}
+}
+break;
+}
+_6[_11]+=_2+Math.max(_a.length,_b.length);
+}else{
+var _11=_e?"b":"t";
+switch(_d){
+case 0:
+case 180:
+_6[_11]=_c;
+_6.l=_6.r=_7/2;
+break;
+case 90:
+case 270:
+_6[_11]=_7;
+_6.l=_6.r=_c/2;
+break;
+default:
+if((90-_3)<=_d&&_d<=90||(270-_3)<=_d&&_d<=270){
+_6[_11]=_c*_10/2+_7*_f;
+_6[_e?"r":"l"]=_c*_f/2+_7*_10;
+_6[_e?"l":"r"]=_c*_f/2;
+}else{
+if(90<=_d&&_d<=(90+_3)||270<=_d&&_d<=(270+_3)){
+_6[_11]=_c*_10/2+_7*_f;
+_6[_e?"l":"r"]=_c*_f/2+_7*_10;
+_6[_e?"r":"l"]=_c*_f/2;
+}else{
+if(_d<_3||(180<_d&&_d<(180-_3))){
+_6[_11]=_c*_10+_7*_f;
+_6[_e?"r":"l"]=_c*_f+_7*_10;
+}else{
+_6[_11]=_c*_10+_7*_f;
+_6[_e?"l":"r"]=_c*_f+_7*_10;
+}
+}
+}
+break;
+}
+_6[_11]+=_2+Math.max(_a.length,_b.length);
+}
+}
+if(_7){
+this._cachedLabelWidth=_7;
+}
+return _6;
+},render:function(dim,_12){
+if(!this.dirty){
+return this;
+}
+var o=this.opt,ta=this.chart.theme.axis,_13=o.leftBottom,_14=o.rotation%360,_15,_16,_17,_18,_19,_1a,_1b,_1c=o.font||(ta.majorTick&&ta.majorTick.font)||(ta.tick&&ta.tick.font),_1d=o.fontColor||(ta.majorTick&&ta.majorTick.fontColor)||(ta.tick&&ta.tick.fontColor)||"black",_1e=this.chart.theme.getTick("major",o),_1f=this.chart.theme.getTick("minor",o),_20=this.chart.theme.getTick("micro",o),_21=Math.max(_1e.length,_1f.length,_20.length),_22="stroke" in o?o.stroke:ta.stroke,_23=_1c?g.normalizedLength(g.splitFontString(_1c).size):0;
+if(_14<0){
+_14+=360;
+}
+if(this.vertical){
+_15={y:dim.height-_12.b};
+_16={y:_12.t};
+_17={x:0,y:-1};
+_1a={x:0,y:0};
+_18={x:1,y:0};
+_19={x:_2,y:0};
+switch(_14){
+case 0:
+_1b="end";
+_1a.y=_23*0.4;
+break;
+case 90:
+_1b="middle";
+_1a.x=-_23;
+break;
+case 180:
+_1b="start";
+_1a.y=-_23*0.4;
+break;
+case 270:
+_1b="middle";
+break;
+default:
+if(_14<_3){
+_1b="end";
+_1a.y=_23*0.4;
+}else{
+if(_14<90){
+_1b="end";
+_1a.y=_23*0.4;
+}else{
+if(_14<(180-_3)){
+_1b="start";
+}else{
+if(_14<(180+_3)){
+_1b="start";
+_1a.y=-_23*0.4;
+}else{
+if(_14<270){
+_1b="start";
+_1a.x=_13?0:_23*0.4;
+}else{
+if(_14<(360-_3)){
+_1b="end";
+_1a.x=_13?0:_23*0.4;
+}else{
+_1b="end";
+_1a.y=_23*0.4;
+}
+}
+}
+}
+}
+}
+}
+if(_13){
+_15.x=_16.x=_12.l;
+_18.x=-1;
+_19.x=-_19.x;
+}else{
+_15.x=_16.x=dim.width-_12.r;
+switch(_1b){
+case "start":
+_1b="end";
+break;
+case "end":
+_1b="start";
+break;
+case "middle":
+_1a.x+=_23;
+break;
+}
+}
+}else{
+_15={x:_12.l};
+_16={x:dim.width-_12.r};
+_17={x:1,y:0};
+_1a={x:0,y:0};
+_18={x:0,y:1};
+_19={x:0,y:_2};
+switch(_14){
+case 0:
+_1b="middle";
+_1a.y=_23;
+break;
+case 90:
+_1b="start";
+_1a.x=-_23*0.4;
+break;
+case 180:
+_1b="middle";
+break;
+case 270:
+_1b="end";
+_1a.x=_23*0.4;
+break;
+default:
+if(_14<(90-_3)){
+_1b="start";
+_1a.y=_13?_23:0;
+}else{
+if(_14<(90+_3)){
+_1b="start";
+_1a.x=-_23*0.4;
+}else{
+if(_14<180){
+_1b="start";
+_1a.y=_13?0:-_23;
+}else{
+if(_14<(270-_3)){
+_1b="end";
+_1a.y=_13?0:-_23;
+}else{
+if(_14<(270+_3)){
+_1b="end";
+_1a.y=_13?_23*0.4:0;
+}else{
+_1b="end";
+_1a.y=_13?_23:0;
+}
+}
+}
+}
+}
+}
+if(_13){
+_15.y=_16.y=dim.height-_12.b;
+}else{
+_15.y=_16.y=_12.t;
+_18.y=-1;
+_19.y=-_19.y;
+switch(_1b){
+case "start":
+_1b="end";
+break;
+case "end":
+_1b="start";
+break;
+case "middle":
+_1a.y-=_23;
+break;
+}
+}
+}
+this.cleanGroup();
+try{
+var s=this.group,c=this.scaler,t=this.ticks,_24,f=_1.getTransformerFromModel(this.scaler),_25=(dojox.gfx.renderer=="canvas"),_26=_25||!_14&&this.opt.htmlLabels&&!dojo.isIE&&!dojo.isOpera?"html":"gfx",dx=_18.x*_1e.length,dy=_18.y*_1e.length;
+s.createLine({x1:_15.x,y1:_15.y,x2:_16.x,y2:_16.y}).setStroke(_22);
+dojo.forEach(t.major,function(_27){
+var _28=f(_27.value),_29,x=_15.x+_17.x*_28,y=_15.y+_17.y*_28;
+s.createLine({x1:x,y1:y,x2:x+dx,y2:y+dy}).setStroke(_1e);
+if(_27.label){
+_29=dc.axis2d.common.createText[_26](this.chart,s,x+dx+_19.x+(_14?0:_1a.x),y+dy+_19.y+(_14?0:_1a.y),_1b,_27.label,_1c,_1d);
+if(_26=="html"){
+this.htmlElements.push(_29);
+}else{
+if(_14){
+_29.setTransform([{dx:_1a.x,dy:_1a.y},g.matrix.rotategAt(_14,x+dx+_19.x,y+dy+_19.y)]);
+}
+}
+}
+},this);
+dx=_18.x*_1f.length;
+dy=_18.y*_1f.length;
+_24=c.minMinorStep<=c.minor.tick*c.bounds.scale;
+dojo.forEach(t.minor,function(_2a){
+var _2b=f(_2a.value),_2c,x=_15.x+_17.x*_2b,y=_15.y+_17.y*_2b;
+s.createLine({x1:x,y1:y,x2:x+dx,y2:y+dy}).setStroke(_1f);
+if(_24&&_2a.label){
+_2c=dc.axis2d.common.createText[_26](this.chart,s,x+dx+_19.x+(_14?0:_1a.x),y+dy+_19.y+(_14?0:_1a.y),_1b,_2a.label,_1c,_1d);
+if(_26=="html"){
+this.htmlElements.push(_2c);
+}else{
+if(_14){
+_2c.setTransform([{dx:_1a.x,dy:_1a.y},g.matrix.rotategAt(_14,x+dx+_19.x,y+dy+_19.y)]);
+}
+}
+}
+},this);
+dx=_18.x*_20.length;
+dy=_18.y*_20.length;
+dojo.forEach(t.micro,function(_2d){
+var _2e=f(_2d.value),_2f,x=_15.x+_17.x*_2e,y=_15.y+_17.y*_2e;
+s.createLine({x1:x,y1:y,x2:x+dx,y2:y+dy}).setStroke(_20);
+},this);
+}
+catch(e){
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/axis2d/Invisible.js
===================================================================
--- trunk/web/dojo/dojox/charting/axis2d/Invisible.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/axis2d/Invisible.js	(revision 9)
@@ -0,0 +1,135 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.axis2d.Invisible"]){
+dojo._hasResource["dojox.charting.axis2d.Invisible"]=true;
+dojo.provide("dojox.charting.axis2d.Invisible");
+dojo.require("dojox.charting.scaler.linear");
+dojo.require("dojox.charting.axis2d.common");
+dojo.require("dojox.charting.axis2d.Base");
+dojo.require("dojo.string");
+dojo.require("dojox.gfx");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.utils");
+(function(){
+var dc=dojox.charting,df=dojox.lang.functional,du=dojox.lang.utils,g=dojox.gfx,_1=dc.scaler.linear,_2=du.merge,_3=4,_4=45;
+dojo.declare("dojox.charting.axis2d.Invisible",dojox.charting.axis2d.Base,{defaultParams:{vertical:false,fixUpper:"none",fixLower:"none",natural:false,leftBottom:true,includeZero:false,fixed:true,majorLabels:true,minorTicks:true,minorLabels:true,microTicks:false,rotation:0},optionalParams:{min:0,max:1,from:0,to:1,majorTickStep:4,minorTickStep:2,microTickStep:1,labels:[],labelFunc:null,maxLabelSize:0},constructor:function(_5,_6){
+this.opt=dojo.delegate(this.defaultParams,_6);
+du.updateWithPattern(this.opt,_6,this.optionalParams);
+},dependOnData:function(){
+return !("min" in this.opt)||!("max" in this.opt);
+},clear:function(){
+delete this.scaler;
+delete this.ticks;
+this.dirty=true;
+return this;
+},initialized:function(){
+return "scaler" in this&&!(this.dirty&&this.dependOnData());
+},setWindow:function(_7,_8){
+this.scale=_7;
+this.offset=_8;
+return this.clear();
+},getWindowScale:function(){
+return "scale" in this?this.scale:1;
+},getWindowOffset:function(){
+return "offset" in this?this.offset:0;
+},_groupLabelWidth:function(_9,_a){
+if(!_9.length){
+return 0;
+}
+if(dojo.isObject(_9[0])){
+_9=df.map(_9,function(_b){
+return _b.text;
+});
+}
+var s=_9.join("<br>");
+return dojox.gfx._base._getTextBox(s,{font:_a}).w||0;
+},calculate:function(_c,_d,_e,_f){
+if(this.initialized()){
+return this;
+}
+var o=this.opt;
+this.labels="labels" in o?o.labels:_f;
+this.scaler=_1.buildScaler(_c,_d,_e,o);
+var tsb=this.scaler.bounds;
+if("scale" in this){
+o.from=tsb.lower+this.offset;
+o.to=(tsb.upper-tsb.lower)/this.scale+o.from;
+if(!isFinite(o.from)||isNaN(o.from)||!isFinite(o.to)||isNaN(o.to)||o.to-o.from>=tsb.upper-tsb.lower){
+delete o.from;
+delete o.to;
+delete this.scale;
+delete this.offset;
+}else{
+if(o.from<tsb.lower){
+o.to+=tsb.lower-o.from;
+o.from=tsb.lower;
+}else{
+if(o.to>tsb.upper){
+o.from+=tsb.upper-o.to;
+o.to=tsb.upper;
+}
+}
+this.offset=o.from-tsb.lower;
+}
+this.scaler=_1.buildScaler(_c,_d,_e,o);
+tsb=this.scaler.bounds;
+if(this.scale==1&&this.offset==0){
+delete this.scale;
+delete this.offset;
+}
+}
+var ta=this.chart.theme.axis,_10=0,_11=o.rotation%360,_12=o.font||(ta.majorTick&&ta.majorTick.font)||(ta.tick&&ta.tick.font),_13=_12?g.normalizedLength(g.splitFontString(_12).size):0,_14=Math.abs(Math.cos(_11*Math.PI/180)),_15=Math.abs(Math.sin(_11*Math.PI/180));
+if(_11<0){
+_11+=360;
+}
+if(_13){
+if(this.vertical?_11!=0&&_11!=180:_11!=90&&_11!=270){
+if(o.maxLabelSize){
+_10=o.maxLabelSize;
+}else{
+if(this.labels){
+_10=this._groupLabelWidth(this.labels,_12);
+}else{
+var _16=Math.ceil(Math.log(Math.max(Math.abs(tsb.from),Math.abs(tsb.to)))/Math.LN10),t=[];
+if(tsb.from<0||tsb.to<0){
+t.push("-");
+}
+t.push(dojo.string.rep("9",_16));
+var _17=Math.floor(Math.log(tsb.to-tsb.from)/Math.LN10);
+if(_17>0){
+t.push(".");
+t.push(dojo.string.rep("9",_17));
+}
+_10=dojox.gfx._base._getTextBox(t.join(""),{font:_12}).w;
+}
+}
+}else{
+_10=_13;
+}
+switch(_11){
+case 0:
+case 90:
+case 180:
+case 270:
+break;
+default:
+var _18=Math.sqrt(_10*_10+_13*_13),_19=this.vertical?_13*_14+_10*_15:_10*_14+_13*_15;
+_10=Math.min(_18,_19);
+break;
+}
+}
+this.scaler.minMinorStep=_10+_3;
+this.ticks=_1.buildTicks(this.scaler,o);
+return this;
+},getScaler:function(){
+return this.scaler;
+},getTicks:function(){
+return this.ticks;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/axis2d/common.js
===================================================================
--- trunk/web/dojo/dojox/charting/axis2d/common.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/axis2d/common.js	(revision 9)
@@ -0,0 +1,93 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.axis2d.common"]){
+dojo._hasResource["dojox.charting.axis2d.common"]=true;
+dojo.provide("dojox.charting.axis2d.common");
+dojo.require("dojox.gfx");
+(function(){
+var g=dojox.gfx;
+var _1=function(s){
+s.marginLeft="0px";
+s.marginTop="0px";
+s.marginRight="0px";
+s.marginBottom="0px";
+s.paddingLeft="0px";
+s.paddingTop="0px";
+s.paddingRight="0px";
+s.paddingBottom="0px";
+s.borderLeftWidth="0px";
+s.borderTopWidth="0px";
+s.borderRightWidth="0px";
+s.borderBottomWidth="0px";
+};
+var _2=function(n){
+if(n["getBoundingClientRect"]){
+var _3=n.getBoundingClientRect();
+return _3.width||(_3.right-_3.left);
+}else{
+return dojo.marginBox(n).w;
+}
+};
+dojo.mixin(dojox.charting.axis2d.common,{createText:{gfx:function(_4,_5,x,y,_6,_7,_8,_9){
+return _5.createText({x:x,y:y,text:_7,align:_6}).setFont(_8).setFill(_9);
+},html:function(_a,_b,x,y,_c,_d,_e,_f,_10){
+var p=dojo.doc.createElement("div"),s=p.style,_11;
+_1(s);
+s.font=_e;
+p.innerHTML=String(_d).replace(/\s/g,"&nbsp;");
+s.color=_f;
+s.position="absolute";
+s.left="-10000px";
+dojo.body().appendChild(p);
+var _12=g.normalizedLength(g.splitFontString(_e).size);
+if(!_10){
+_11=_2(p);
+}
+dojo.body().removeChild(p);
+s.position="relative";
+if(_10){
+s.width=_10+"px";
+switch(_c){
+case "middle":
+s.textAlign="center";
+s.left=(x-_10/2)+"px";
+break;
+case "end":
+s.textAlign="right";
+s.left=(x-_10)+"px";
+break;
+default:
+s.left=x+"px";
+s.textAlign="left";
+break;
+}
+}else{
+switch(_c){
+case "middle":
+s.left=Math.floor(x-_11/2)+"px";
+break;
+case "end":
+s.left=Math.floor(x-_11)+"px";
+break;
+default:
+s.left=Math.floor(x)+"px";
+break;
+}
+}
+s.top=Math.floor(y-_12)+"px";
+s.whiteSpace="nowrap";
+var _13=dojo.doc.createElement("div"),w=_13.style;
+_1(w);
+w.width="0px";
+w.height="0px";
+_13.appendChild(p);
+_a.node.insertBefore(_13,_a.node.firstChild);
+return _13;
+}}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/axis2d/Base.js
===================================================================
--- trunk/web/dojo/dojox/charting/axis2d/Base.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/axis2d/Base.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.axis2d.Base"]){
+dojo._hasResource["dojox.charting.axis2d.Base"]=true;
+dojo.provide("dojox.charting.axis2d.Base");
+dojo.require("dojox.charting.Element");
+dojo.declare("dojox.charting.axis2d.Base",dojox.charting.Element,{constructor:function(_1,_2){
+this.vertical=_2&&_2.vertical;
+},clear:function(){
+return this;
+},initialized:function(){
+return false;
+},calculate:function(_3,_4,_5){
+return this;
+},getScaler:function(){
+return null;
+},getTicks:function(){
+return null;
+},getOffsets:function(){
+return {l:0,r:0,t:0,b:0};
+},render:function(_6,_7){
+this.dirty=false;
+return this;
+}});
+}
Index: trunk/web/dojo/dojox/charting/README
===================================================================
--- trunk/web/dojo/dojox/charting/README	(revision 0)
+++ trunk/web/dojo/dojox/charting/README	(revision 9)
@@ -0,0 +1,31 @@
+-------------------------------------------------------------------------------
+dojox.charting
+-------------------------------------------------------------------------------
+Version 0.800
+Release date: 10/31/2007
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Tom Trenka (ttrenka@gmail.com)
+	Eugene Lazutkin (eugene.lazutkin@gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+Implementation of simple charting library based on dojox.gfx/dojox.gfx3d.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core, dojox.gfx, dojox.gfx3d, dojox.lang.
+-------------------------------------------------------------------------------
+Documentation
+
+Not ready yet.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/charting/Theme.js
===================================================================
--- trunk/web/dojo/dojox/charting/Theme.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/Theme.js	(revision 9)
@@ -0,0 +1,237 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.Theme"]){
+dojo._hasResource["dojox.charting.Theme"]=true;
+dojo.provide("dojox.charting.Theme");
+dojo.require("dojox.color");
+dojo.require("dojox.color.Palette");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.gfx.gradutils");
+dojo.declare("dojox.charting.Theme",null,{shapeSpaces:{shape:1,shapeX:1,shapeY:1},constructor:function(_1){
+_1=_1||{};
+var _2=dojox.charting.Theme.defaultTheme;
+dojo.forEach(["chart","plotarea","axis","series","marker"],function(_3){
+this[_3]=dojo.delegate(_2[_3],_1[_3]);
+},this);
+if(_1.seriesThemes&&_1.seriesThemes.length){
+this.colors=null;
+this.seriesThemes=_1.seriesThemes.slice(0);
+}else{
+this.seriesThemes=null;
+this.colors=(_1.colors||dojox.charting.Theme.defaultColors).slice(0);
+}
+this.markerThemes=null;
+if(_1.markerThemes&&_1.markerThemes.length){
+this.markerThemes=_1.markerThemes.slice(0);
+}
+this.markers=dojo.delegate(dojox.charting.Theme.defaultMarkers,_1.markers);
+this.noGradConv=_1.noGradConv;
+this.noRadialConv=_1.noRadialConv;
+if(_1.reverseFills){
+this.reverseFills();
+}
+this._current=0;
+this._buildMarkerArray();
+},clone:function(){
+var _4=new dojox.charting.Theme({chart:this.chart,plotarea:this.plotarea,axis:this.axis,series:this.series,marker:this.marker,colors:this.colors,markers:this.markers,seriesThemes:this.seriesThemes,markerThemes:this.markerThemes,noGradConv:this.noGradConv,noRadialConv:this.noRadialConv});
+dojo.forEach(["clone","clear","next","skip","addMixin","post","getTick"],function(_5){
+if(this.hasOwnProperty(_5)){
+_4[_5]=this[_5];
+}
+},this);
+return _4;
+},clear:function(){
+this._current=0;
+},next:function(_6,_7,_8){
+var _9=dojox.lang.utils.merge,_a,_b;
+if(this.colors){
+_a=dojo.delegate(this.series);
+_b=dojo.delegate(this.marker);
+var _c=new dojo.Color(this.colors[this._current%this.colors.length]),_d;
+if(_a.stroke&&_a.stroke.color){
+_a.stroke=dojo.delegate(_a.stroke);
+_d=new dojo.Color(_a.stroke.color);
+_a.stroke.color=new dojo.Color(_c);
+_a.stroke.color.a=_d.a;
+}else{
+_a.stroke={color:_c};
+}
+if(_b.stroke&&_b.stroke.color){
+_b.stroke=dojo.delegate(_b.stroke);
+_d=new dojo.Color(_b.stroke.color);
+_b.stroke.color=new dojo.Color(_c);
+_b.stroke.color.a=_d.a;
+}else{
+_b.stroke={color:_c};
+}
+if(!_a.fill||_a.fill.type){
+_a.fill=_c;
+}else{
+_d=new dojo.Color(_a.fill);
+_a.fill=new dojo.Color(_c);
+_a.fill.a=_d.a;
+}
+if(!_b.fill||_b.fill.type){
+_b.fill=_c;
+}else{
+_d=new dojo.Color(_b.fill);
+_b.fill=new dojo.Color(_c);
+_b.fill.a=_d.a;
+}
+}else{
+_a=this.seriesThemes?_9(this.series,this.seriesThemes[this._current%this.seriesThemes.length]):this.series;
+_b=this.markerThemes?_9(this.marker,this.markerThemes[this._current%this.markerThemes.length]):_a;
+}
+var _e=_b&&_b.symbol||this._markers[this._current%this._markers.length];
+var _f={series:_a,marker:_b,symbol:_e};
+++this._current;
+if(_7){
+_f=this.addMixin(_f,_6,_7);
+}
+if(_8){
+_f=this.post(_f,_6);
+}
+return _f;
+},skip:function(){
+++this._current;
+},addMixin:function(_10,_11,_12,_13){
+if(dojo.isArray(_12)){
+dojo.forEach(_12,function(m){
+_10=this.addMixin(_10,_11,m);
+},this);
+}else{
+var t={};
+if("color" in _12){
+if(_11=="line"||_11=="area"){
+dojo.setObject("series.stroke.color",_12.color,t);
+dojo.setObject("marker.stroke.color",_12.color,t);
+}else{
+dojo.setObject("series.fill",_12.color,t);
+}
+}
+dojo.forEach(["stroke","outline","shadow","fill","font","fontColor"],function(_14){
+var _15="marker"+_14.charAt(0).toUpperCase()+_14.substr(1),b=_15 in _12;
+if(_14 in _12){
+dojo.setObject("series."+_14,_12[_14],t);
+if(!b){
+dojo.setObject("marker."+_14,_12[_14],t);
+}
+}
+if(b){
+dojo.setObject("marker."+_14,_12[_15],t);
+}
+});
+if("marker" in _12){
+t.symbol=_12.marker;
+}
+_10=dojox.lang.utils.merge(_10,t);
+}
+if(_13){
+_10=this.post(_10,_11);
+}
+return _10;
+},post:function(_16,_17){
+var _18=_16.series.fill,t;
+if(!this.noGradConv&&this.shapeSpaces[_18.space]&&_18.type=="linear"){
+if(_17=="bar"){
+t={x1:_18.y1,y1:_18.x1,x2:_18.y2,y2:_18.x2};
+}else{
+if(!this.noRadialConv&&_18.space=="shape"&&(_17=="slice"||_17=="circle")){
+t={type:"radial",cx:0,cy:0,r:100};
+}
+}
+if(t){
+return dojox.lang.utils.merge(_16,{series:{fill:t}});
+}
+}
+return _16;
+},getTick:function(_19,_1a){
+var _1b=this.axis.tick,_1c=_19+"Tick";
+merge=dojox.lang.utils.merge;
+if(_1b){
+if(this.axis[_1c]){
+_1b=merge(_1b,this.axis[_1c]);
+}
+}else{
+_1b=this.axis[_1c];
+}
+if(_1a){
+if(_1b){
+if(_1a[_1c]){
+_1b=merge(_1b,_1a[_1c]);
+}
+}else{
+_1b=_1a[_1c];
+}
+}
+return _1b;
+},inspectObjects:function(f){
+dojo.forEach(["chart","plotarea","axis","series","marker"],function(_1d){
+f(this[_1d]);
+},this);
+if(this.seriesThemes){
+dojo.forEach(this.seriesThemes,f);
+}
+if(this.markerThemes){
+dojo.forEach(this.markerThemes,f);
+}
+},reverseFills:function(){
+this.inspectObjects(function(o){
+if(o&&o.fill){
+o.fill=dojox.gfx.gradutils.reverse(o.fill);
+}
+});
+},addMarker:function(_1e,_1f){
+this.markers[_1e]=_1f;
+this._buildMarkerArray();
+},setMarkers:function(obj){
+this.markers=obj;
+this._buildMarkerArray();
+},_buildMarkerArray:function(){
+this._markers=[];
+for(var p in this.markers){
+this._markers.push(this.markers[p]);
+}
+}});
+dojo.mixin(dojox.charting.Theme,{defaultMarkers:{CIRCLE:"m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0",SQUARE:"m-3,-3 l0,6 6,0 0,-6 z",DIAMOND:"m0,-3 l3,3 -3,3 -3,-3 z",CROSS:"m0,-3 l0,6 m-3,-3 l6,0",X:"m-3,-3 l6,6 m0,-6 l-6,6",TRIANGLE:"m-3,3 l3,-6 3,6 z",TRIANGLE_INVERTED:"m-3,-3 l3,6 3,-6 z"},defaultColors:["#54544c","#858e94","#6e767a","#948585","#474747"],defaultTheme:{chart:{stroke:null,fill:"white",pageStyle:null},plotarea:{stroke:null,fill:"white"},axis:{stroke:{color:"#333",width:1},tick:{color:"#666",position:"center",font:"normal normal normal 7pt Tahoma",fontColor:"#333"},majorTick:{width:1,length:6},minorTick:{width:0.8,length:3},microTick:{width:0.5,length:1}},series:{stroke:{width:1.5,color:"#333"},outline:{width:0.1,color:"#ccc"},shadow:null,fill:"#ccc",font:"normal normal normal 8pt Tahoma",fontColor:"#000"},marker:{stroke:{width:1.5,color:"#333"},outline:{width:0.1,color:"#ccc"},shadow:null,fill:"#ccc",font:"normal normal normal 8pt Tahoma",fontColor:"#000"}},defineColors:function(_20){
+_20=_20||{};
+var c=[],n=_20.num||5;
+if(_20.colors){
+var l=_20.colors.length;
+for(var i=0;i<n;i++){
+c.push(_20.colors[i%l]);
+}
+return c;
+}
+if(_20.hue){
+var s=_20.saturation||100;
+var st=_20.low||30;
+var end=_20.high||90;
+var l=(end+st)/2;
+return dojox.color.Palette.generate(dojox.color.fromHsv(_20.hue,s,l),"monochromatic").colors;
+}
+if(_20.generator){
+return dojox.color.Palette.generate(_20.base,_20.generator).colors;
+}
+return c;
+},generateGradient:function(_21,_22,_23){
+var _24=dojo.delegate(_21);
+_24.colors=[{offset:0,color:_22},{offset:1,color:_23}];
+return _24;
+},generateHslColor:function(_25,_26){
+_25=new dojox.color.Color(_25);
+var hsl=_25.toHsl(),_27=dojox.color.fromHsl(hsl.h,hsl.s,_26);
+_27.a=_25.a;
+return _27;
+},generateHslGradient:function(_28,_29,_2a,_2b){
+_28=new dojox.color.Color(_28);
+var hsl=_28.toHsl(),_2c=dojox.color.fromHsl(hsl.h,hsl.s,_2a),_2d=dojox.color.fromHsl(hsl.h,hsl.s,_2b);
+_2c.a=_2d.a=_28.a;
+return dojox.charting.Theme.generateGradient(_29,_2c,_2d);
+}});
+}
Index: trunk/web/dojo/dojox/charting/DataSeries.js
===================================================================
--- trunk/web/dojo/dojox/charting/DataSeries.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/DataSeries.js	(revision 9)
@@ -0,0 +1,118 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.DataSeries"]){
+dojo._hasResource["dojox.charting.DataSeries"]=true;
+dojo.provide("dojox.charting.DataSeries");
+dojo.require("dojox.lang.functional");
+dojo.declare("dojox.charting.DataSeries",null,{constructor:function(_1,_2,_3){
+this.store=_1;
+this.kwArgs=_2;
+if(_3){
+if(dojo.isFunction(_3)){
+this.value=_3;
+}else{
+if(dojo.isObject(_3)){
+this.value=dojo.hitch(this,"_dictValue",dojox.lang.functional.keys(_3),_3);
+}else{
+this.value=dojo.hitch(this,"_fieldValue",_3);
+}
+}
+}else{
+this.value=dojo.hitch(this,"_defaultValue");
+}
+this.data=[];
+this._events=[];
+if(this.store.getFeatures()["dojo.data.api.Notification"]){
+this._events.push(dojo.connect(this.store,"onNew",this,"_onStoreNew"),dojo.connect(this.store,"onDelete",this,"_onStoreDelete"),dojo.connect(this.store,"onSet",this,"_onStoreSet"));
+}
+this.fetch();
+},destroy:function(){
+dojo.forEach(this._events,dojo.disconnect);
+},setSeriesObject:function(_4){
+this.series=_4;
+},_dictValue:function(_5,_6,_7,_8){
+var o={};
+dojo.forEach(_5,function(_9){
+o[_9]=_7.getValue(_8,_6[_9]);
+});
+return o;
+},_fieldValue:function(_a,_b,_c){
+return _b.getValue(_c,_a);
+},_defaultValue:function(_d,_e){
+return _d.getValue(_e,"value");
+},fetch:function(){
+if(!this._inFlight){
+this._inFlight=true;
+var _f=dojo.delegate(this.kwArgs);
+_f.onComplete=dojo.hitch(this,"_onFetchComplete");
+_f.onError=dojo.hitch(this,"onFetchError");
+this.store.fetch(_f);
+}
+},_onFetchComplete:function(_10,_11){
+this.items=_10;
+this._buildItemMap();
+this.data=dojo.map(this.items,function(_12){
+return this.value(this.store,_12);
+},this);
+this._pushDataChanges();
+this._inFlight=false;
+},onFetchError:function(_13,_14){
+this._inFlight=false;
+},_buildItemMap:function(){
+if(this.store.getFeatures()["dojo.data.api.Identity"]){
+var _15={};
+dojo.forEach(this.items,function(_16,_17){
+_15[this.store.getIdentity(_16)]=_17;
+},this);
+this.itemMap=_15;
+}
+},_pushDataChanges:function(){
+if(this.series){
+this.series.chart.updateSeries(this.series.name,this);
+this.series.chart.delayedRender();
+}
+},_onStoreNew:function(){
+this.fetch();
+},_onStoreDelete:function(_18){
+if(this.items){
+var _19=dojo.some(this.items,function(it,_1a){
+if(it===_18){
+this.items.splice(_1a,1);
+this._buildItemMap();
+this.data.splice(_1a,1);
+return true;
+}
+return false;
+},this);
+if(_19){
+this._pushDataChanges();
+}
+}
+},_onStoreSet:function(_1b){
+if(this.itemMap){
+var id=this.store.getIdentity(_1b),_1c=this.itemMap[id];
+if(typeof _1c=="number"){
+this.data[_1c]=this.value(this.store,this.items[_1c]);
+this._pushDataChanges();
+}
+}else{
+if(this.items){
+var _1d=dojo.some(this.items,function(it,_1e){
+if(it===_1b){
+this.data[_1e]=this.value(this.store,it);
+return true;
+}
+return false;
+},this);
+if(_1d){
+this._pushDataChanges();
+}
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/charting/Chart2D.js
===================================================================
--- trunk/web/dojo/dojox/charting/Chart2D.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/Chart2D.js	(revision 9)
@@ -0,0 +1,559 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.Chart2D"]){
+dojo._hasResource["dojox.charting.Chart2D"]=true;
+dojo.provide("dojox.charting.Chart2D");
+dojo.require("dojox.gfx");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.fold");
+dojo.require("dojox.lang.functional.reversed");
+dojo.require("dojox.charting.Theme");
+dojo.require("dojox.charting.Series");
+dojo.require("dojox.charting.axis2d.Default");
+dojo.require("dojox.charting.axis2d.Invisible");
+dojo.require("dojox.charting.plot2d.Default");
+dojo.require("dojox.charting.plot2d.Lines");
+dojo.require("dojox.charting.plot2d.Areas");
+dojo.require("dojox.charting.plot2d.Markers");
+dojo.require("dojox.charting.plot2d.MarkersOnly");
+dojo.require("dojox.charting.plot2d.Scatter");
+dojo.require("dojox.charting.plot2d.Stacked");
+dojo.require("dojox.charting.plot2d.StackedLines");
+dojo.require("dojox.charting.plot2d.StackedAreas");
+dojo.require("dojox.charting.plot2d.Columns");
+dojo.require("dojox.charting.plot2d.StackedColumns");
+dojo.require("dojox.charting.plot2d.ClusteredColumns");
+dojo.require("dojox.charting.plot2d.Bars");
+dojo.require("dojox.charting.plot2d.StackedBars");
+dojo.require("dojox.charting.plot2d.ClusteredBars");
+dojo.require("dojox.charting.plot2d.Grid");
+dojo.require("dojox.charting.plot2d.Pie");
+dojo.require("dojox.charting.plot2d.Bubble");
+dojo.require("dojox.charting.plot2d.Candlesticks");
+dojo.require("dojox.charting.plot2d.OHLC");
+(function(){
+var df=dojox.lang.functional,dc=dojox.charting,_1=df.lambda("item.clear()"),_2=df.lambda("item.purgeGroup()"),_3=df.lambda("item.destroy()"),_4=df.lambda("item.dirty = false"),_5=df.lambda("item.dirty = true"),_6=df.lambda("item.name");
+dojo.declare("dojox.charting.Chart2D",null,{constructor:function(_7,_8){
+if(!_8){
+_8={};
+}
+this.margins=_8.margins?_8.margins:{l:10,t:10,r:10,b:10};
+this.stroke=_8.stroke;
+this.fill=_8.fill;
+this.delayInMs=_8.delayInMs||200;
+this.theme=null;
+this.axes={};
+this.stack=[];
+this.plots={};
+this.series=[];
+this.runs={};
+this.dirty=true;
+this.coords=null;
+this.node=dojo.byId(_7);
+var _9=dojo.marginBox(_7);
+this.surface=dojox.gfx.createSurface(this.node,_9.w||400,_9.h||300);
+},destroy:function(){
+dojo.forEach(this.series,_3);
+dojo.forEach(this.stack,_3);
+df.forIn(this.axes,_3);
+this.surface.destroy();
+},getCoords:function(){
+if(!this.coords){
+this.coords=dojo.coords(this.node,true);
+}
+return this.coords;
+},setTheme:function(_a){
+this.theme=_a.clone();
+this.dirty=true;
+return this;
+},addAxis:function(_b,_c){
+var _d;
+if(!_c||!("type" in _c)){
+_d=new dc.axis2d.Default(this,_c);
+}else{
+_d=typeof _c.type=="string"?new dc.axis2d[_c.type](this,_c):new _c.type(this,_c);
+}
+_d.name=_b;
+_d.dirty=true;
+if(_b in this.axes){
+this.axes[_b].destroy();
+}
+this.axes[_b]=_d;
+this.dirty=true;
+return this;
+},getAxis:function(_e){
+return this.axes[_e];
+},removeAxis:function(_f){
+if(_f in this.axes){
+this.axes[_f].destroy();
+delete this.axes[_f];
+this.dirty=true;
+}
+return this;
+},addPlot:function(_10,_11){
+var _12;
+if(!_11||!("type" in _11)){
+_12=new dc.plot2d.Default(this,_11);
+}else{
+_12=typeof _11.type=="string"?new dc.plot2d[_11.type](this,_11):new _11.type(this,_11);
+}
+_12.name=_10;
+_12.dirty=true;
+if(_10 in this.plots){
+this.stack[this.plots[_10]].destroy();
+this.stack[this.plots[_10]]=_12;
+}else{
+this.plots[_10]=this.stack.length;
+this.stack.push(_12);
+}
+this.dirty=true;
+return this;
+},removePlot:function(_13){
+if(_13 in this.plots){
+var _14=this.plots[_13];
+delete this.plots[_13];
+this.stack[_14].destroy();
+this.stack.splice(_14,1);
+df.forIn(this.plots,function(idx,_15,_16){
+if(idx>_14){
+_16[_15]=idx-1;
+}
+});
+this.dirty=true;
+}
+return this;
+},getPlotOrder:function(){
+return df.map(this.stack,_6);
+},setPlotOrder:function(_17){
+var _18={},_19=df.filter(_17,function(_1a){
+if(!(_1a in this.plots)||(_1a in _18)){
+return false;
+}
+_18[_1a]=1;
+return true;
+},this);
+if(_19.length<this.stack.length){
+df.forEach(this.stack,function(_1b){
+var _1c=_1b.name;
+if(!(_1c in _18)){
+_19.push(_1c);
+}
+});
+}
+var _1d=df.map(_19,function(_1e){
+return this.stack[this.plots[_1e]];
+},this);
+df.forEach(_1d,function(_1f,i){
+this.plots[_1f.name]=i;
+},this);
+this.stack=_1d;
+this.dirty=true;
+return this;
+},movePlotToFront:function(_20){
+if(_20 in this.plots){
+var _21=this.plots[_20];
+if(_21){
+var _22=this.getPlotOrder();
+_22.splice(_21,1);
+_22.unshift(_20);
+return this.setPlotOrder(_22);
+}
+}
+return this;
+},movePlotToBack:function(_23){
+if(_23 in this.plots){
+var _24=this.plots[_23];
+if(_24<this.stack.length-1){
+var _25=this.getPlotOrder();
+_25.splice(_24,1);
+_25.push(_23);
+return this.setPlotOrder(_25);
+}
+}
+return this;
+},addSeries:function(_26,_27,_28){
+var run=new dc.Series(this,_27,_28);
+run.name=_26;
+if(_26 in this.runs){
+this.series[this.runs[_26]].destroy();
+this.series[this.runs[_26]]=run;
+}else{
+this.runs[_26]=this.series.length;
+this.series.push(run);
+}
+this.dirty=true;
+if(!("ymin" in run)&&"min" in run){
+run.ymin=run.min;
+}
+if(!("ymax" in run)&&"max" in run){
+run.ymax=run.max;
+}
+return this;
+},removeSeries:function(_29){
+if(_29 in this.runs){
+var _2a=this.runs[_29],_2b=this.series[_2a].plot;
+delete this.runs[_29];
+this.series[_2a].destroy();
+this.series.splice(_2a,1);
+df.forIn(this.runs,function(idx,_2c,_2d){
+if(idx>_2a){
+_2d[_2c]=idx-1;
+}
+});
+this.dirty=true;
+}
+return this;
+},updateSeries:function(_2e,_2f){
+if(_2e in this.runs){
+var run=this.series[this.runs[_2e]];
+run.update(_2f);
+this._invalidateDependentPlots(run.plot,false);
+this._invalidateDependentPlots(run.plot,true);
+}
+return this;
+},getSeriesOrder:function(_30){
+return df.map(df.filter(this.series,function(run){
+return run.plot==_30;
+}),_6);
+},setSeriesOrder:function(_31){
+var _32,_33={},_34=df.filter(_31,function(_35){
+if(!(_35 in this.runs)||(_35 in _33)){
+return false;
+}
+var run=this.series[this.runs[_35]];
+if(_32){
+if(run.plot!=_32){
+return false;
+}
+}else{
+_32=run.plot;
+}
+_33[_35]=1;
+return true;
+},this);
+df.forEach(this.series,function(run){
+var _36=run.name;
+if(!(_36 in _33)&&run.plot==_32){
+_34.push(_36);
+}
+});
+var _37=df.map(_34,function(_38){
+return this.series[this.runs[_38]];
+},this);
+this.series=_37.concat(df.filter(this.series,function(run){
+return run.plot!=_32;
+}));
+df.forEach(this.series,function(run,i){
+this.runs[run.name]=i;
+},this);
+this.dirty=true;
+return this;
+},moveSeriesToFront:function(_39){
+if(_39 in this.runs){
+var _3a=this.runs[_39],_3b=this.getSeriesOrder(this.series[_3a].plot);
+if(_39!=_3b[0]){
+_3b.splice(_3a,1);
+_3b.unshift(_39);
+return this.setSeriesOrder(_3b);
+}
+}
+return this;
+},moveSeriesToBack:function(_3c){
+if(_3c in this.runs){
+var _3d=this.runs[_3c],_3e=this.getSeriesOrder(this.series[_3d].plot);
+if(_3c!=_3e[_3e.length-1]){
+_3e.splice(_3d,1);
+_3e.push(_3c);
+return this.setSeriesOrder(_3e);
+}
+}
+return this;
+},resize:function(_3f,_40){
+var box;
+switch(arguments.length){
+case 0:
+box=dojo.marginBox(this.node);
+break;
+case 1:
+box=_3f;
+break;
+default:
+box={w:_3f,h:_40};
+break;
+}
+dojo.marginBox(this.node,box);
+this.surface.setDimensions(box.w,box.h);
+this.dirty=true;
+this.coords=null;
+return this.render();
+},getGeometry:function(){
+var ret={};
+df.forIn(this.axes,function(_41){
+if(_41.initialized()){
+ret[_41.name]={name:_41.name,vertical:_41.vertical,scaler:_41.scaler,ticks:_41.ticks};
+}
+});
+return ret;
+},setAxisWindow:function(_42,_43,_44,_45){
+var _46=this.axes[_42];
+if(_46){
+_46.setWindow(_43,_44);
+dojo.forEach(this.stack,function(_47){
+if(_47.hAxis==_42||_47.vAxis==_42){
+_47.zoom=_45;
+}
+});
+}
+return this;
+},setWindow:function(sx,sy,dx,dy,_48){
+if(!("plotArea" in this)){
+this.calculateGeometry();
+}
+df.forIn(this.axes,function(_49){
+var _4a,_4b,_4c=_49.getScaler().bounds,s=_4c.span/(_4c.upper-_4c.lower);
+if(_49.vertical){
+_4a=sy;
+_4b=dy/s/_4a;
+}else{
+_4a=sx;
+_4b=dx/s/_4a;
+}
+_49.setWindow(_4a,_4b);
+});
+dojo.forEach(this.stack,function(_4d){
+_4d.zoom=_48;
+});
+return this;
+},zoomIn:function(_4e,_4f){
+var _50=this.axes[_4e];
+if(_50){
+var _51,_52,_53=_50.getScaler().bounds;
+var _54=Math.min(_4f[0],_4f[1]);
+var _55=Math.max(_4f[0],_4f[1]);
+_54=_4f[0]<_53.lower?_53.lower:_54;
+_55=_4f[1]>_53.upper?_53.upper:_55;
+_51=(_53.upper-_53.lower)/(_55-_54);
+_52=_54-_53.lower;
+this.setAxisWindow(_4e,_51,_52);
+this.render();
+}
+},calculateGeometry:function(){
+if(this.dirty){
+return this.fullGeometry();
+}
+var _56=dojo.filter(this.stack,function(_57){
+return _57.dirty||(_57.hAxis&&this.axes[_57.hAxis].dirty)||(_57.vAxis&&this.axes[_57.vAxis].dirty);
+},this);
+_58(_56,this.plotArea);
+return this;
+},fullGeometry:function(){
+this._makeDirty();
+dojo.forEach(this.stack,_1);
+if(!this.theme){
+this.setTheme(new dojox.charting.Theme(dojox.charting._def));
+}
+dojo.forEach(this.series,function(run){
+if(!(run.plot in this.plots)){
+var _59=new dc.plot2d.Default(this,{});
+_59.name=run.plot;
+this.plots[run.plot]=this.stack.length;
+this.stack.push(_59);
+}
+this.stack[this.plots[run.plot]].addSeries(run);
+},this);
+dojo.forEach(this.stack,function(_5a){
+if(_5a.hAxis){
+_5a.setAxis(this.axes[_5a.hAxis]);
+}
+if(_5a.vAxis){
+_5a.setAxis(this.axes[_5a.vAxis]);
+}
+},this);
+var dim=this.dim=this.surface.getDimensions();
+dim.width=dojox.gfx.normalizedLength(dim.width);
+dim.height=dojox.gfx.normalizedLength(dim.height);
+df.forIn(this.axes,_1);
+_58(this.stack,dim);
+var _5b=this.offsets={l:0,r:0,t:0,b:0};
+df.forIn(this.axes,function(_5c){
+df.forIn(_5c.getOffsets(),function(o,i){
+_5b[i]+=o;
+});
+});
+df.forIn(this.margins,function(o,i){
+_5b[i]+=o;
+});
+this.plotArea={width:dim.width-_5b.l-_5b.r,height:dim.height-_5b.t-_5b.b};
+df.forIn(this.axes,_1);
+_58(this.stack,this.plotArea);
+return this;
+},render:function(){
+if(this.theme){
+this.theme.clear();
+}
+if(this.dirty){
+return this.fullRender();
+}
+this.calculateGeometry();
+df.forEachRev(this.stack,function(_5d){
+_5d.render(this.dim,this.offsets);
+},this);
+df.forIn(this.axes,function(_5e){
+_5e.render(this.dim,this.offsets);
+},this);
+this._makeClean();
+if(this.surface.render){
+this.surface.render();
+}
+return this;
+},fullRender:function(){
+this.fullGeometry();
+var _5f=this.offsets,dim=this.dim;
+dojo.forEach(this.series,_2);
+df.forIn(this.axes,_2);
+dojo.forEach(this.stack,_2);
+this.surface.clear();
+var t=this.theme,_60=t.plotarea&&t.plotarea.fill,_61=t.plotarea&&t.plotarea.stroke;
+if(_60){
+this.surface.createRect({x:_5f.l-1,y:_5f.t-1,width:dim.width-_5f.l-_5f.r+2,height:dim.height-_5f.t-_5f.b+2}).setFill(_60);
+}
+if(_61){
+this.surface.createRect({x:_5f.l,y:_5f.t,width:dim.width-_5f.l-_5f.r+1,height:dim.height-_5f.t-_5f.b+1}).setStroke(_61);
+}
+df.foldr(this.stack,function(z,_62){
+return _62.render(dim,_5f),0;
+},0);
+_60=this.fill!==undefined?this.fill:(t.chart&&t.chart.fill);
+_61=this.stroke!==undefined?this.stroke:(t.chart&&t.chart.stroke);
+if(_60=="inherit"){
+var _63=this.node,_60=new dojo.Color(dojo.style(_63,"backgroundColor"));
+while(_60.a==0&&_63!=document.documentElement){
+_60=new dojo.Color(dojo.style(_63,"backgroundColor"));
+_63=_63.parentNode;
+}
+}
+if(_60){
+if(_5f.l){
+this.surface.createRect({width:_5f.l,height:dim.height+1}).setFill(_60);
+}
+if(_5f.r){
+this.surface.createRect({x:dim.width-_5f.r,width:_5f.r+1,height:dim.height+2}).setFill(_60);
+}
+if(_5f.t){
+this.surface.createRect({width:dim.width+1,height:_5f.t}).setFill(_60);
+}
+if(_5f.b){
+this.surface.createRect({y:dim.height-_5f.b,width:dim.width+1,height:_5f.b+2}).setFill(_60);
+}
+}
+if(_61){
+this.surface.createRect({width:dim.width-1,height:dim.height-1}).setStroke(_61);
+}
+df.forIn(this.axes,function(_64){
+_64.render(dim,_5f);
+});
+this._makeClean();
+if(this.surface.render){
+this.surface.render();
+}
+return this;
+},delayedRender:function(){
+if(!this._delayedRenderHandle){
+this._delayedRenderHandle=setTimeout(dojo.hitch(this,function(){
+clearTimeout(this._delayedRenderHandle);
+this._delayedRenderHandle=null;
+this.render();
+}),this.delayInMs);
+}
+return this;
+},connectToPlot:function(_65,_66,_67){
+return _65 in this.plots?this.stack[this.plots[_65]].connect(_66,_67):null;
+},fireEvent:function(_68,_69,_6a){
+if(_68 in this.runs){
+var _6b=this.series[this.runs[_68]].plot;
+if(_6b in this.plots){
+var _6c=this.stack[this.plots[_6b]];
+if(_6c){
+_6c.fireEvent(_68,_69,_6a);
+}
+}
+}
+return this;
+},_makeClean:function(){
+dojo.forEach(this.axes,_4);
+dojo.forEach(this.stack,_4);
+dojo.forEach(this.series,_4);
+this.dirty=false;
+},_makeDirty:function(){
+dojo.forEach(this.axes,_5);
+dojo.forEach(this.stack,_5);
+dojo.forEach(this.series,_5);
+this.dirty=true;
+},_invalidateDependentPlots:function(_6d,_6e){
+if(_6d in this.plots){
+var _6f=this.stack[this.plots[_6d]],_70,_71=_6e?"vAxis":"hAxis";
+if(_6f[_71]){
+_70=this.axes[_6f[_71]];
+if(_70&&_70.dependOnData()){
+_70.dirty=true;
+dojo.forEach(this.stack,function(p){
+if(p[_71]&&p[_71]==_6f[_71]){
+p.dirty=true;
+}
+});
+}
+}else{
+_6f.dirty=true;
+}
+}
+}});
+function _72(_73){
+return {min:_73.hmin,max:_73.hmax};
+};
+function _74(_75){
+return {min:_75.vmin,max:_75.vmax};
+};
+function _76(_77,h){
+_77.hmin=h.min;
+_77.hmax=h.max;
+};
+function _78(_79,v){
+_79.vmin=v.min;
+_79.vmax=v.max;
+};
+function _7a(_7b,_7c){
+if(_7b&&_7c){
+_7b.min=Math.min(_7b.min,_7c.min);
+_7b.max=Math.max(_7b.max,_7c.max);
+}
+return _7b||_7c;
+};
+function _58(_7d,_7e){
+var _7f={},_80={};
+dojo.forEach(_7d,function(_81){
+var _82=_7f[_81.name]=_81.getSeriesStats();
+if(_81.hAxis){
+_80[_81.hAxis]=_7a(_80[_81.hAxis],_72(_82));
+}
+if(_81.vAxis){
+_80[_81.vAxis]=_7a(_80[_81.vAxis],_74(_82));
+}
+});
+dojo.forEach(_7d,function(_83){
+var _84=_7f[_83.name];
+if(_83.hAxis){
+_76(_84,_80[_83.hAxis]);
+}
+if(_83.vAxis){
+_78(_84,_80[_83.vAxis]);
+}
+_83.initializeScalers(_7e,_84);
+});
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/Chart3D.js
===================================================================
--- trunk/web/dojo/dojox/charting/Chart3D.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/Chart3D.js	(revision 9)
@@ -0,0 +1,73 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.Chart3D"]){
+dojo._hasResource["dojox.charting.Chart3D"]=true;
+dojo.provide("dojox.charting.Chart3D");
+dojo.require("dojox.gfx3d");
+(function(){
+var _1={x:0,y:0,z:1},v=dojox.gfx3d.vector,n=dojox.gfx.normalizedLength;
+dojo.declare("dojox.charting.Chart3D",null,{constructor:function(_2,_3,_4,_5){
+this.node=dojo.byId(_2);
+this.surface=dojox.gfx.createSurface(this.node,n(this.node.style.width),n(this.node.style.height));
+this.view=this.surface.createViewport();
+this.view.setLights(_3.lights,_3.ambient,_3.specular);
+this.view.setCameraTransform(_4);
+this.theme=_5;
+this.walls=[];
+this.plots=[];
+},generate:function(){
+return this._generateWalls()._generatePlots();
+},invalidate:function(){
+this.view.invalidate();
+return this;
+},render:function(){
+this.view.render();
+return this;
+},addPlot:function(_6){
+return this._add(this.plots,_6);
+},removePlot:function(_7){
+return this._remove(this.plots,_7);
+},addWall:function(_8){
+return this._add(this.walls,_8);
+},removeWall:function(_9){
+return this._remove(this.walls,_9);
+},_add:function(_a,_b){
+if(!dojo.some(_a,function(i){
+return i==_b;
+})){
+_a.push(_b);
+this.view.invalidate();
+}
+return this;
+},_remove:function(_c,_d){
+var a=dojo.filter(_c,function(i){
+return i!=_d;
+});
+return a.length<_c.length?(_c=a,this.invalidate()):this;
+},_generateWalls:function(){
+for(var i=0;i<this.walls.length;++i){
+if(v.dotProduct(_1,this.walls[i].normal)>0){
+this.walls[i].generate(this);
+}
+}
+return this;
+},_generatePlots:function(){
+var _e=0,m=dojox.gfx3d.matrix,i=0;
+for(;i<this.plots.length;++i){
+_e+=this.plots[i].getDepth();
+}
+for(--i;i>=0;--i){
+var _f=this.view.createScene();
+_f.setTransform(m.translate(0,0,-_e));
+this.plots[i].generate(this,_f);
+_e-=this.plots[i].getDepth();
+}
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/action2d/MoveSlice.js
===================================================================
--- trunk/web/dojo/dojox/charting/action2d/MoveSlice.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/action2d/MoveSlice.js	(revision 9)
@@ -0,0 +1,66 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.MoveSlice"]){
+dojo._hasResource["dojox.charting.action2d.MoveSlice"]=true;
+dojo.provide("dojox.charting.action2d.MoveSlice");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.scan");
+dojo.require("dojox.lang.functional.fold");
+(function(){
+var _1=1.05,_2=7,m=dojox.gfx.matrix,gf=dojox.gfx.fx,df=dojox.lang.functional;
+dojo.declare("dojox.charting.action2d.MoveSlice",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,scale:_1,shift:_2},optionalParams:{},constructor:function(_3,_4,_5){
+if(!_5){
+_5={};
+}
+this.scale=typeof _5.scale=="number"?_5.scale:_1;
+this.shift=typeof _5.shift=="number"?_5.shift:_2;
+this.connect();
+},process:function(o){
+if(!o.shape||o.element!="slice"||!(o.type in this.overOutEvents)){
+return;
+}
+if(!this.angles){
+var _6=m._degToRad(o.plot.opt.startAngle);
+if(typeof o.run.data[0]=="number"){
+this.angles=df.map(df.scanl(o.run.data,"+",_6),"* 2 * Math.PI / this",df.foldl(o.run.data,"+",0));
+}else{
+this.angles=df.map(df.scanl(o.run.data,"a + b.y",_6),"* 2 * Math.PI / this",df.foldl(o.run.data,"a + b.y",0));
+}
+}
+var _7=o.index,_8,_9,_a,_b,_c,_d=(this.angles[_7]+this.angles[_7+1])/2,_e=m.rotateAt(-_d,o.cx,o.cy),_f=m.rotateAt(_d,o.cx,o.cy);
+_8=this.anim[_7];
+if(_8){
+_8.action.stop(true);
+}else{
+this.anim[_7]=_8={};
+}
+if(o.type=="onmouseover"){
+_b=0;
+_c=this.shift;
+_9=1;
+_a=this.scale;
+}else{
+_b=this.shift;
+_c=0;
+_9=this.scale;
+_a=1;
+}
+_8.action=dojox.gfx.fx.animateTransform({shape:o.shape,duration:this.duration,easing:this.easing,transform:[_f,{name:"translate",start:[_b,0],end:[_c,0]},{name:"scaleAt",start:[_9,o.cx,o.cy],end:[_a,o.cx,o.cy]},_e]});
+if(o.type=="onmouseout"){
+dojo.connect(_8.action,"onEnd",this,function(){
+delete this.anim[_7];
+});
+}
+_8.action.play();
+},reset:function(){
+delete this.angles;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/action2d/Highlight.js
===================================================================
--- trunk/web/dojo/dojox/charting/action2d/Highlight.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/action2d/Highlight.js	(revision 9)
@@ -0,0 +1,76 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Highlight"]){
+dojo._hasResource["dojox.charting.action2d.Highlight"]=true;
+dojo.provide("dojox.charting.action2d.Highlight");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.color");
+(function(){
+var _1=100,_2=75,_3=50,c=dojox.color,cc=function(_4){
+return function(){
+return _4;
+};
+},hl=function(_5){
+var a=new c.Color(_5),x=a.toHsl();
+if(x.s==0){
+x.l=x.l<50?100:0;
+}else{
+x.s=_1;
+if(x.l<_3){
+x.l=_2;
+}else{
+if(x.l>_2){
+x.l=_3;
+}else{
+x.l=x.l-_3>_2-x.l?_3:_2;
+}
+}
+}
+return c.fromHsl(x);
+};
+dojo.declare("dojox.charting.action2d.Highlight",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut},optionalParams:{highlight:"red"},constructor:function(_6,_7,_8){
+var a=_8&&_8.highlight;
+this.colorFun=a?(dojo.isFunction(a)?a:cc(a)):hl;
+this.connect();
+},process:function(o){
+if(!o.shape||!(o.type in this.overOutEvents)){
+return;
+}
+var _9=o.run.name,_a=o.index,_b,_c,_d;
+if(_9 in this.anim){
+_b=this.anim[_9][_a];
+}else{
+this.anim[_9]={};
+}
+if(_b){
+_b.action.stop(true);
+}else{
+var _e=o.shape.getFill();
+if(!_e||!(_e instanceof dojo.Color)){
+return;
+}
+this.anim[_9][_a]=_b={start:_e,end:this.colorFun(_e)};
+}
+var _f=_b.start,end=_b.end;
+if(o.type=="onmouseout"){
+var t=_f;
+_f=end;
+end=t;
+}
+_b.action=dojox.gfx.fx.animateFill({shape:o.shape,duration:this.duration,easing:this.easing,color:{start:_f,end:end}});
+if(o.type=="onmouseout"){
+dojo.connect(_b.action,"onEnd",this,function(){
+if(this.anim[_9]){
+delete this.anim[_9][_a];
+}
+});
+}
+_b.action.play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/action2d/Base.js
===================================================================
--- trunk/web/dojo/dojox/charting/action2d/Base.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/action2d/Base.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Base"]){
+dojo._hasResource["dojox.charting.action2d.Base"]=true;
+dojo.provide("dojox.charting.action2d.Base");
+dojo.require("dojo.fx.easing");
+dojo.require("dojox.lang.functional.object");
+dojo.require("dojox.gfx.fx");
+(function(){
+var _1=400,_2=dojo.fx.easing.backOut,df=dojox.lang.functional;
+dojo.declare("dojox.charting.action2d.Base",null,{overOutEvents:{onmouseover:1,onmouseout:1},constructor:function(_3,_4,_5){
+this.chart=_3;
+this.plot=_4||"default";
+this.anim={};
+if(!_5){
+_5={};
+}
+this.duration=_5.duration?_5.duration:_1;
+this.easing=_5.easing?_5.easing:_2;
+},connect:function(){
+this.handle=this.chart.connectToPlot(this.plot,this,"process");
+},disconnect:function(){
+if(this.handle){
+dojo.disconnect(this.handle);
+this.handle=null;
+}
+},reset:function(){
+},destroy:function(){
+this.disconnect();
+df.forIn(this.anim,function(o){
+df.forIn(o,function(_6){
+_6.action.stop(true);
+});
+});
+this.anim={};
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/action2d/Magnify.js
===================================================================
--- trunk/web/dojo/dojox/charting/action2d/Magnify.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/action2d/Magnify.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Magnify"]){
+dojo._hasResource["dojox.charting.action2d.Magnify"]=true;
+dojo.provide("dojox.charting.action2d.Magnify");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dojo.fx");
+(function(){
+var _1=2,m=dojox.gfx.matrix,gf=dojox.gfx.fx;
+dojo.declare("dojox.charting.action2d.Magnify",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,scale:_1},optionalParams:{},constructor:function(_2,_3,_4){
+this.scale=_4&&typeof _4.scale=="number"?_4.scale:_1;
+this.connect();
+},process:function(o){
+if(!o.shape||!(o.type in this.overOutEvents)||!("cx" in o)||!("cy" in o)){
+return;
+}
+var _5=o.run.name,_6=o.index,_7=[],_8,_9,_a;
+if(_5 in this.anim){
+_8=this.anim[_5][_6];
+}else{
+this.anim[_5]={};
+}
+if(_8){
+_8.action.stop(true);
+}else{
+this.anim[_5][_6]=_8={};
+}
+if(o.type=="onmouseover"){
+_9=m.identity;
+_a=this.scale;
+}else{
+_9=m.scaleAt(this.scale,o.cx,o.cy);
+_a=1/this.scale;
+}
+var _b={shape:o.shape,duration:this.duration,easing:this.easing,transform:[{name:"scaleAt",start:[1,o.cx,o.cy],end:[_a,o.cx,o.cy]},_9]};
+if(o.shape){
+_7.push(gf.animateTransform(_b));
+}
+if(o.oultine){
+_b.shape=o.outline;
+_7.push(gf.animateTransform(_b));
+}
+if(o.shadow){
+_b.shape=o.shadow;
+_7.push(gf.animateTransform(_b));
+}
+if(!_7.length){
+delete this.anim[_5][_6];
+return;
+}
+_8.action=dojo.fx.combine(_7);
+if(o.type=="onmouseout"){
+dojo.connect(_8.action,"onEnd",this,function(){
+if(this.anim[_5]){
+delete this.anim[_5][_6];
+}
+});
+}
+_8.action.play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/action2d/Tooltip.js
===================================================================
--- trunk/web/dojo/dojox/charting/action2d/Tooltip.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/action2d/Tooltip.js	(revision 9)
@@ -0,0 +1,195 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Tooltip"]){
+dojo._hasResource["dojox.charting.action2d.Tooltip"]=true;
+dojo.provide("dojox.charting.action2d.Tooltip");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dijit.Tooltip");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.scan");
+dojo.require("dojox.lang.functional.fold");
+(function(){
+var _1=function(o){
+var t=o.run&&o.run.data&&o.run.data[o.index];
+if(t&&typeof t!="number"&&(t.tooltip||t.text)){
+return t.tooltip||t.text;
+}
+if(o.element=="candlestick"){
+return "<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\" style=\"font-size:0.9em;\">"+"<tr><td>Open:</td><td align=\"right\"><strong>"+o.data.open+"</strong></td></tr>"+"<tr><td>High:</td><td align=\"right\"><strong>"+o.data.high+"</strong></td></tr>"+"<tr><td>Low:</td><td align=\"right\"><strong>"+o.data.low+"</strong></td></tr>"+"<tr><td>Close:</td><td align=\"right\"><strong>"+o.data.close+"</strong></td></tr>"+(o.data.mid!==undefined?"<tr><td>Mid:</td><td align=\"right\"><strong>"+o.data.mid+"</strong></td></tr>":"")+"</table>";
+}
+return o.element=="bar"?o.x:o.y;
+};
+var df=dojox.lang.functional,m=dojox.gfx.matrix,_2=Math.PI/4,_3=Math.PI/2;
+dojo.declare("dojox.charting.action2d.Tooltip",dojox.charting.action2d.Base,{defaultParams:{text:_1},optionalParams:{},constructor:function(_4,_5,_6){
+this.text=_6&&_6.text?_6.text:_1;
+this.connect();
+},process:function(o){
+if(o.type==="onplotreset"||o.type==="onmouseout"){
+_7(this.aroundRect);
+this.aroundRect=null;
+return;
+}
+if(!o.shape||o.type!=="onmouseover"){
+return;
+}
+var _8={type:"rect"},_9=["after","before"];
+switch(o.element){
+case "marker":
+_8.x=o.cx;
+_8.y=o.cy;
+_8.width=_8.height=1;
+break;
+case "circle":
+_8.x=o.cx-o.cr;
+_8.y=o.cy-o.cr;
+_8.width=_8.height=2*o.cr;
+break;
+case "column":
+_9=["above","below"];
+case "bar":
+_8=dojo.clone(o.shape.getShape());
+break;
+case "candlestick":
+_8.x=o.x;
+_8.y=o.y;
+_8.width=o.width;
+_8.height=o.height;
+break;
+default:
+if(!this.angles){
+if(typeof o.run.data[0]=="number"){
+this.angles=df.map(df.scanl(o.run.data,"+",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"+",0));
+}else{
+this.angles=df.map(df.scanl(o.run.data,"a + b.y",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"a + b.y",0));
+}
+}
+var _a=m._degToRad(o.plot.opt.startAngle),_b=(this.angles[o.index]+this.angles[o.index+1])/2+_a;
+_8.x=o.cx+o.cr*Math.cos(_b);
+_8.y=o.cy+o.cr*Math.sin(_b);
+_8.width=_8.height=1;
+if(_b<_2){
+}else{
+if(_b<_3+_2){
+_9=["below","above"];
+}else{
+if(_b<Math.PI+_2){
+_9=["before","after"];
+}else{
+if(_b<2*Math.PI-_2){
+_9=["above","below"];
+}
+}
+}
+}
+break;
+}
+var lt=dojo.coords(this.chart.node,true);
+_8.x+=lt.x;
+_8.y+=lt.y;
+_8.x=Math.round(_8.x);
+_8.y=Math.round(_8.y);
+_8.width=Math.ceil(_8.width);
+_8.height=Math.ceil(_8.height);
+this.aroundRect=_8;
+_c(this.text(o),this.aroundRect,_9,"center");
+}});
+var _d=dojo.declare(dijit._MasterTooltip,{show:function(_e,_f,_10,_11){
+if(this.aroundNode&&this.aroundNode===_f){
+return;
+}
+if(this.fadeOut.status()=="playing"){
+this._onDeck=arguments;
+return;
+}
+this.containerNode.innerHTML=_e;
+this.domNode.style.top=(this.domNode.offsetTop+1)+"px";
+if(!this.connectorNode){
+this.connectorNode=dojo.query(".dijitTooltipConnector",this.domNode)[0];
+}
+var _12=dojo.coords(this.connectorNode);
+this.arrowWidth=_12.w,this.arrowHeight=_12.h;
+this.place=(_11&&_11=="center")?this.placeChartingTooltip:dijit.placeOnScreenAroundElement,this.place(this.domNode,_f,dijit.getPopupAroundAlignment((_10&&_10.length)?_10:dijit.Tooltip.defaultPosition,this.isLeftToRight()),dojo.hitch(this,"orient"));
+dojo.style(this.domNode,"opacity",0);
+this.fadeIn.play();
+this.isShowingNow=true;
+this.aroundNode=_f;
+},placeChartingTooltip:function(_13,_14,_15,_16){
+return this._placeOnScreenAroundRect(_13,_14.x,_14.y,_14.width,_14.height,_15,_16);
+},_placeOnScreenAroundRect:function(_17,x,y,_18,_19,_1a,_1b){
+var _1c=[];
+for(var _1d in _1a){
+_1c.push({aroundCorner:_1d,corner:_1a[_1d],pos:{x:x+(_1d.charAt(1)=="L"?0:_18),y:y+(_1d.charAt(0)=="T"?0:_19),w:_18,h:_19}});
+}
+return this._place(_17,_1c,_1b);
+},_place:function(_1e,_1f,_20){
+var _21=dijit.getViewport();
+if(!_1e.parentNode||String(_1e.parentNode.tagName).toLowerCase()!="body"){
+dojo.body().appendChild(_1e);
+}
+var _22=null;
+var _23=null,_24=null;
+dojo.some(_1f,function(_25){
+var _26=_25.corner;
+var _27=_25.aroundCorner;
+var pos=_25.pos;
+if(_20){
+_20(_1e,_25.aroundCorner,_26);
+}
+var _28=_1e.style;
+var _29=_28.display;
+var _2a=_28.visibility;
+_28.visibility="hidden";
+_28.display="";
+var mb=dojo.marginBox(_1e);
+_28.display=_29;
+_28.visibility=_2a;
+var _2b,_2c,_2d,_2e,_2f,_30,_31;
+_23=null,_24=null;
+if(_27.charAt(0)==_26.charAt(0)){
+_2b=(_26.charAt(1)=="L"?pos.x:Math.max(_21.l,pos.x-mb.w)),_2c=(_26.charAt(0)=="T"?(pos.y+pos.h/2-mb.h/2):(pos.y-pos.h/2-mb.h/2)),_2d=(_26.charAt(1)=="L"?Math.min(_21.l+_21.w,_2b+mb.w):pos.x),_2e=_2c+mb.h,_2f=_2d-_2b,_30=_2e-_2c,_31=(mb.w-_2f)+(mb.h-_30);
+_24=(mb.h-this.arrowHeight)/2;
+}else{
+_2b=(_26.charAt(1)=="L"?(pos.x+pos.w/2-mb.w/2):(pos.x-pos.w/2-mb.w/2)),_2c=(_26.charAt(0)=="T"?pos.y:Math.max(_21.t,pos.y-mb.h)),_2d=_2b+mb.w,_2e=(_26.charAt(0)=="T"?Math.min(_21.t+_21.h,_2c+mb.h):pos.y),_2f=_2d-_2b,_30=_2e-_2c,_31=(mb.w-_2f)+(mb.h-_30);
+_23=(mb.w-this.arrowWidth)/2;
+}
+if(_22==null||_31<_22.overflow){
+_22={corner:_26,aroundCorner:_25.aroundCorner,x:_2b,y:_2c,w:_2f,h:_30,overflow:_31};
+}
+return !_31;
+},this);
+_1e.style.left=_22.x+"px";
+_1e.style.top=_22.y+"px";
+this.connectorNode.style.top="";
+this.connectorNode.style.left="";
+if(_24){
+this.connectorNode.style.top=_24+"px";
+}
+if(_23){
+this.connectorNode.style.left=_23+"px";
+}
+if(_22.overflow&&_20){
+_20(_1e,_22.aroundCorner,_22.corner);
+}
+return _22;
+}});
+var _32=null;
+function _c(_33,_34,_35,_36){
+if(!_32){
+_32=new _d();
+}
+return _32.show(_33,_34,_35,_36);
+};
+function _7(_37){
+if(!_32){
+_32=new _d();
+}
+return _32.hide(_37);
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/action2d/Shake.js
===================================================================
--- trunk/web/dojo/dojox/charting/action2d/Shake.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/action2d/Shake.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.action2d.Shake"]){
+dojo._hasResource["dojox.charting.action2d.Shake"]=true;
+dojo.provide("dojox.charting.action2d.Shake");
+dojo.require("dojox.charting.action2d.Base");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dojo.fx");
+(function(){
+var _1=3,m=dojox.gfx.matrix,gf=dojox.gfx.fx;
+dojo.declare("dojox.charting.action2d.Shake",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,shiftX:_1,shiftY:_1},optionalParams:{},constructor:function(_2,_3,_4){
+if(!_4){
+_4={};
+}
+this.shiftX=typeof _4.shiftX=="number"?_4.shiftX:_1;
+this.shiftY=typeof _4.shiftY=="number"?_4.shiftY:_1;
+this.connect();
+},process:function(o){
+if(!o.shape||!(o.type in this.overOutEvents)){
+return;
+}
+var _5=o.run.name,_6=o.index,_7=[],_8,_9=o.type=="onmouseover"?this.shiftX:-this.shiftX,_a=o.type=="onmouseover"?this.shiftY:-this.shiftY;
+if(_5 in this.anim){
+_8=this.anim[_5][_6];
+}else{
+this.anim[_5]={};
+}
+if(_8){
+_8.action.stop(true);
+}else{
+this.anim[_5][_6]=_8={};
+}
+var _b={shape:o.shape,duration:this.duration,easing:this.easing,transform:[{name:"translate",start:[this.shiftX,this.shiftY],end:[0,0]},m.identity]};
+if(o.shape){
+_7.push(gf.animateTransform(_b));
+}
+if(o.oultine){
+_b.shape=o.outline;
+_7.push(gf.animateTransform(_b));
+}
+if(o.shadow){
+_b.shape=o.shadow;
+_7.push(gf.animateTransform(_b));
+}
+if(!_7.length){
+delete this.anim[_5][_6];
+return;
+}
+_8.action=dojo.fx.combine(_7);
+if(o.type=="onmouseout"){
+dojo.connect(_8.action,"onEnd",this,function(){
+if(this.anim[_5]){
+delete this.anim[_5][_6];
+}
+});
+}
+_8.action.play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/widget/Legend.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/Legend.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/Legend.js	(revision 9)
@@ -0,0 +1,126 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.widget.Legend"]){
+dojo._hasResource["dojox.charting.widget.Legend"]=true;
+dojo.provide("dojox.charting.widget.Legend");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.lang.functional.array");
+dojo.require("dojox.lang.functional.fold");
+dojo.declare("dojox.charting.widget.Legend",[dijit._Widget,dijit._Templated],{chartRef:"",horizontal:true,swatchSize:18,templateString:"<table dojoAttachPoint='legendNode' class='dojoxLegendNode'><tbody dojoAttachPoint='legendBody'></tbody></table>",legendNode:null,legendBody:null,postCreate:function(){
+if(!this.chart){
+if(!this.chartRef){
+return;
+}
+this.chart=dijit.byId(this.chartRef);
+if(!this.chart){
+var _1=dojo.byId(this.chartRef);
+if(_1){
+this.chart=dijit.byNode(_1);
+}else{
+return;
+}
+}
+this.series=this.chart.chart.series;
+}else{
+this.series=this.chart.series;
+}
+this.refresh();
+},refresh:function(){
+var df=dojox.lang.functional;
+if(this._surfaces){
+dojo.forEach(this._surfaces,function(_2){
+_2.destroy();
+});
+}
+this._surfaces=[];
+while(this.legendBody.lastChild){
+dojo.destroy(this.legendBody.lastChild);
+}
+if(this.horizontal){
+dojo.addClass(this.legendNode,"dojoxLegendHorizontal");
+this._tr=dojo.doc.createElement("tr");
+this.legendBody.appendChild(this._tr);
+this._inrow=0;
+}
+var s=this.series;
+if(s.length==0){
+return;
+}
+if(s[0].chart.stack[0].declaredClass=="dojox.charting.plot2d.Pie"){
+var t=s[0].chart.stack[0];
+if(typeof t.run.data[0]=="number"){
+var _3=df.map(t.run.data,"Math.max(x, 0)");
+if(df.every(_3,"<= 0")){
+return;
+}
+var _4=df.map(_3,"/this",df.foldl(_3,"+",0));
+dojo.forEach(_4,function(x,i){
+this._addLabel(t.dyn[i],t._getLabel(x*100)+"%");
+},this);
+}else{
+dojo.forEach(t.run.data,function(x,i){
+this._addLabel(t.dyn[i],x.legend||x.text||x.y);
+},this);
+}
+}else{
+dojo.forEach(s,function(x){
+this._addLabel(x.dyn,x.legend||x.name);
+},this);
+}
+},_addLabel:function(_5,_6){
+var _7=dojo.doc.createElement("td"),_8=dojo.doc.createElement("td"),_9=dojo.doc.createElement("div");
+dojo.addClass(_7,"dojoxLegendIcon");
+dojo.addClass(_8,"dojoxLegendText");
+_9.style.width=this.swatchSize+"px";
+_9.style.height=this.swatchSize+"px";
+_7.appendChild(_9);
+if(this._tr){
+this._tr.appendChild(_7);
+this._tr.appendChild(_8);
+if(++this._inrow===this.horizontal){
+this._tr=dojo.doc.createElement("tr");
+this.legendBody.appendChild(this._tr);
+this._inrow=0;
+}
+}else{
+var tr=dojo.doc.createElement("tr");
+this.legendBody.appendChild(tr);
+tr.appendChild(_7);
+tr.appendChild(_8);
+}
+this._makeIcon(_9,_5);
+_8.innerHTML=String(_6);
+},_makeIcon:function(_a,_b){
+var mb={h:this.swatchSize,w:this.swatchSize};
+var _c=dojox.gfx.createSurface(_a,mb.w,mb.h);
+this._surfaces.push(_c);
+if(_b.fill){
+_c.createRect({x:2,y:2,width:mb.w-4,height:mb.h-4}).setFill(_b.fill).setStroke(_b.stroke);
+}else{
+if(_b.stroke||_b.marker){
+var _d={x1:0,y1:mb.h/2,x2:mb.w,y2:mb.h/2};
+if(_b.stroke){
+_c.createLine(_d).setStroke(_b.stroke);
+}
+if(_b.marker){
+var c={x:mb.w/2,y:mb.h/2};
+if(_b.stroke){
+_c.createPath({path:"M"+c.x+" "+c.y+" "+_b.marker}).setFill(_b.stroke.color).setStroke(_b.stroke);
+}else{
+_c.createPath({path:"M"+c.x+" "+c.y+" "+_b.marker}).setFill(_b.color).setStroke(_b.color);
+}
+}
+}else{
+_c.createRect({x:2,y:2,width:mb.w-4,height:mb.h-4}).setStroke("black");
+_c.createLine({x1:2,y1:2,x2:mb.w-2,y2:mb.h-2}).setStroke("black");
+_c.createLine({x1:2,y1:mb.h-2,x2:mb.w-2,y2:2}).setStroke("black");
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh-tw.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh-tw.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh-tw.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_zh-tw");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ko.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ko.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ko.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ko");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fr-fr.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fr-fr.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fr-fr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_fr-fr");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_es-es.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_es-es.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_es-es.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_es-es");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_hu.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_hu.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_hu.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_hu");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"group":" ","percentSign":"%","exponential":"E","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sk.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sk.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sk.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_sk");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sk");dojo.cldr.nls.number.sk={"currencyFormat":"#,##0.00 ¤","group":" ","decimal":",","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","percentFormat":"#,##0%","decimalFormat":"#,##0.###","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_de-de.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_de-de.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_de-de.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_de-de");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh-cn.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh-cn.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh-cn.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_zh-cn");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nl-nl.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nl-nl.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nl-nl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_nl-nl");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl_nl");dojo.cldr.nls.number.nl_nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt-br.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt-br.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt-br.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_pt-br");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ru.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ru.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ru.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ru");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en-us.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en-us.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en-us.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_en-us");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en-gb.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en-gb.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en-gb.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_en-gb");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fi-fi.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fi-fi.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fi-fi.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_fi-fi");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi_fi");dojo.cldr.nls.number.fi_fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nb.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nb.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nb.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_nb");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nb");dojo.cldr.nls.number.nb={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_el.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_el.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_el.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_el");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.el");dojo.cldr.nls.number.el={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","currencyFormat":"#,##0.00 ¤","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ar.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ar.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ar.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ar");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ar");dojo.cldr.nls.number.ar={"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":"٫","nan":"ليس رقم","nativeZeroDigit":"٠","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_en.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_en");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt-pt.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt-pt.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt-pt.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_pt-pt");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_pt");dojo.cldr.nls.number.pt_pt={"currencyFormat":"#,##0.00 ¤","group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fr.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fr.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_fr");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nl.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nl.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_nl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_nl");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl");dojo.cldr.nls.number.nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pl.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pl.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_pl");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_th.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_th.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_th.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_th");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.th");dojo.cldr.nls.number.th={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;¤-#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_it.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_it.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_it.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_it");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sl.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sl.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_sl");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sl");dojo.cldr.nls.number.sl={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_zh.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_zh");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ko-kr.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ko-kr.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ko-kr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ko-kr");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ROOT.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ROOT.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ROOT.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ROOT");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ROOT");dojo.cldr.nls.number.ROOT={"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ca.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ca.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ca.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ca");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ca");dojo.cldr.nls.number.ca={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_pt.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_pt");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_da.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_da.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_da.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_da");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.da");dojo.cldr.nls.number.da={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_tr.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_tr.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_tr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_tr");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.tr");dojo.cldr.nls.number.tr={"group":".","percentSign":"%","exponential":"E","percentFormat":"% #,##0","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_it-it.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_it-it.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_it-it.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_it-it");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_de.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_de.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_de.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_de");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sv.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sv.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_sv.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_sv");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sv");dojo.cldr.nls.number.sv={"group":" ","percentSign":"%","exponential":"×10^","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"−","decimal":",","nan":"¤¤¤","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ja.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ja.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ja.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ja");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_he.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_he.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_he.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_he");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he");dojo.cldr.nls.number.he={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fi.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fi.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_fi.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_fi");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi");dojo.cldr.nls.number.fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_he-il.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_he-il.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_he-il.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_he-il");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he_il");dojo.cldr.nls.number.he_il={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_xx.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_xx.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_xx.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_xx");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.xx");dojo.cldr.nls.number.xx={"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ja-jp.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ja-jp.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_ja-jp.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_ja-jp");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_cs.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_cs.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_cs.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_cs");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/nls/Chart2D_es.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/nls/Chart2D_es.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/nls/Chart2D_es.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.charting.widget.nls.Chart2D_es");dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "};
Index: trunk/web/dojo/dojox/charting/widget/Chart2D.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/Chart2D.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/Chart2D.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.window.getBox=function(){var _1=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _2=dojo._docScroll();return {w:_1.clientWidth,h:_1.clientHeight,l:_2.x,t:_2.y};};dojo.window.get=function(_3){if(dojo.isIE&&window!==document.parentWindow){_3.parentWindow.execScript("document._parentWindow = window;","Javascript");var _4=_3._parentWindow;_3._parentWindow=null;return _4;}return _3.parentWindow||_3.defaultView;};dojo.window.scrollIntoView=function(_5,_6){try{_5=dojo.byId(_5);var _7=_5.ownerDocument||dojo.doc,_8=_7.body||dojo.body(),_9=_7.documentElement||_8.parentNode,_a=dojo.isIE,_b=dojo.isWebKit;if((!(dojo.isMoz||_a||_b||dojo.isOpera)||_5==_8||_5==_9)&&(typeof _5.scrollIntoView!="undefined")){_5.scrollIntoView(false);return;}var _c=_7.compatMode=="BackCompat",_d=_c?_8:_9,_e=_b?_8:_d,_f=_d.clientWidth,_10=_d.clientHeight,rtl=!dojo._isBodyLtr(),_11=_6||dojo.position(_5),el=_5.parentNode,_12=function(el){return ((_a<=6||(_a&&_c))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_12(_5)){return;}while(el){if(el==_8){el=_e;}var _13=dojo.position(el),_14=_12(el);if(el==_e){_13.w=_f;_13.h=_10;if(_e==_9&&_a&&rtl){_13.x+=_e.offsetWidth-_13.w;}if(_13.x<0||!_a){_13.x=0;}if(_13.y<0||!_a){_13.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_13.w-=pb.w;_13.h-=pb.h;_13.x+=pb.l;_13.y+=pb.t;}if(el!=_e){var _15=el.clientWidth,_16=_13.w-_15;if(_15>0&&_16>0){_13.w=_15;if(_a&&rtl){_13.x+=_16;}}_15=el.clientHeight;_16=_13.h-_15;if(_15>0&&_16>0){_13.h=_15;}}if(_14){if(_13.y<0){_13.h+=_13.y;_13.y=0;}if(_13.x<0){_13.w+=_13.x;_13.x=0;}if(_13.y+_13.h>_10){_13.h=_10-_13.y;}if(_13.x+_13.w>_f){_13.w=_f-_13.x;}}var l=_11.x-_13.x,t=_11.y-Math.max(_13.y,0),r=l+_11.w-_13.w,bot=t+_11.h-_13.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);_11.x+=el.scrollLeft;el.scrollLeft+=(_a>=8&&!_c&&rtl)?-s:s;_11.x-=el.scrollLeft;}if(bot*t>0){_11.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_11.y-=el.scrollTop;}el=(el!=_e)&&!_14&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_5.scrollIntoView(false);}};}if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};this.length=0;},add:function(_17){if(this._hash[_17.id]){throw new Error("Tried to register widget with id=="+_17.id+" but that id is already registered");}this._hash[_17.id]=_17;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_18,_19){_19=_19||dojo.global;var i=0,id;for(id in this._hash){_18.call(_19,this._hash[id],i++,this._hash);}return this;},filter:function(_1a,_1b){_1b=_1b||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_1a.call(_1b,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_1c;for(id in this._hash){_1c=this._hash[id];if(_1c.declaredClass==cls){res.add(_1c);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_1d,_1e){return dojo.map(this.toArray(),_1d,_1e);},every:function(_1f,_20){_20=_20||dojo.global;var x=0,i;for(i in this._hash){if(!_1f.call(_20,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_21,_22){_22=_22||dojo.global;var x=0,i;for(i in this._hash){if(_21.call(_22,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _23=dijit.registry._hash,_24=dojo.attr,_25=dojo.hasAttr,_26=dojo.style;dijit.byId=function(id){return typeof id=="string"?_23[id]:id;};var _27={};dijit.getUniqueId=function(_28){var id;do{id=_28+"_"+(_28 in _27?++_27[_28]:_27[_28]=0);}while(_23[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_29){var _2a=[];function _2b(_2c){for(var _2d=_2c.firstChild;_2d;_2d=_2d.nextSibling){if(_2d.nodeType==1){var _2e=_2d.getAttribute("widgetId");if(_2e){_2a.push(_23[_2e]);}else{_2b(_2d);}}}};_2b(_29);return _2a;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_2f){if(!_2f._destroyed){if(_2f.destroyRecursive){_2f.destroyRecursive();}else{if(_2f.destroy){_2f.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_30){return _23[_30.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_31){while(_31){var id=_31.getAttribute&&_31.getAttribute("widgetId");if(id){return _23[id];}_31=_31.parentNode;}return null;};var _32=(dijit._isElementShown=function(_33){var s=_26(_33);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_24(_33,"type")!="hidden");});dijit.hasDefaultTabStop=function(_34){switch(_34.nodeName.toLowerCase()){case "a":return _25(_34,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":if(dojo.isMoz){try{return _34.contentDocument.designMode=="on";}catch(err){return false;}}else{if(dojo.isWebKit){var doc=_34.contentDocument,_35=doc&&doc.body;return _35&&_35.contentEditable=="true";}else{try{doc=_34.contentWindow.document;_35=doc&&doc.body;return _35&&_35.firstChild&&_35.firstChild.contentEditable=="true";}catch(e){return false;}}}default:return _34.contentEditable=="true";}};var _36=(dijit.isTabNavigable=function(_37){if(_24(_37,"disabled")){return false;}else{if(_25(_37,"tabIndex")){return _24(_37,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_37);}}});dijit._getTabNavigable=function(_38){var _39,_3a,_3b,_3c,_3d,_3e;var _3f=function(_40){dojo.query("> *",_40).forEach(function(_41){if((dojo.isIE&&_41.scopeName!=="HTML")||!_32(_41)){return;}if(_36(_41)){var _42=_24(_41,"tabIndex");if(!_25(_41,"tabIndex")||_42==0){if(!_39){_39=_41;}_3a=_41;}else{if(_42>0){if(!_3b||_42<_3c){_3c=_42;_3b=_41;}if(!_3d||_42>=_3e){_3e=_42;_3d=_41;}}}}if(_41.nodeName.toUpperCase()!="SELECT"){_3f(_41);}});};if(_32(_38)){_3f(_38);}return {first:_39,last:_3a,lowest:_3b,highest:_3d};};dijit.getFirstInTabbingOrder=function(_43){var _44=dijit._getTabNavigable(dojo.byId(_43));return _44.lowest?_44.lowest:_44.first;};dijit.getLastInTabbingOrder=function(_45){var _46=dijit._getTabNavigable(dojo.byId(_45));return _46.last?_46.last:_46.highest;};dijit.defaultDuration=dojo.config["defaultDuration"]||200;})();}if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){return dijit.getBookmark().isCollapsed;},getBookmark:function(){var bm,rg,tg,sel=dojo.doc.selection,cf=dijit._curFocus;if(dojo.global.getSelection){sel=dojo.global.getSelection();if(sel){if(sel.isCollapsed){tg=cf?cf.tagName:"";if(tg){tg=tg.toLowerCase();if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){sel={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};return {isCollapsed:(sel.end<=sel.start),mark:sel};}}bm={isCollapsed:true};}else{rg=sel.getRangeAt(0);bm={isCollapsed:false,mark:rg.cloneRange()};}}}else{if(sel){tg=cf?cf.tagName:"";tg=tg.toLowerCase();if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){if(sel.type&&sel.type.toLowerCase()=="none"){return {isCollapsed:true,mark:null};}else{rg=sel.createRange();return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};}}bm={};try{rg=sel.createRange();bm.isCollapsed=!(sel.type=="Text"?rg.htmlText.length:rg.length);}catch(e){bm.isCollapsed=true;return bm;}if(sel.type.toUpperCase()=="CONTROL"){if(rg.length){bm.mark=[];var i=0,len=rg.length;while(i<len){bm.mark.push(rg.item(i++));}}else{bm.isCollapsed=true;bm.mark=null;}}else{bm.mark=rg.getBookmark();}}else{console.warn("No idea how to store the current selection for this browser!");}}return bm;},moveToBookmark:function(_47){var _48=dojo.doc,_49=_47.mark;if(_49){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_49.pRange){var r=_49;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_49);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_48.selection&&_49){var rg;if(_49.pRange){rg=_49.range;}else{if(dojo.isArray(_49)){rg=_48.body.createControlRange();dojo.forEach(_49,function(n){rg.addElement(n);});}else{rg=_48.body.createTextRange();rg.moveToBookmark(_49);}}rg.select();}}}},getFocus:function(_4a,_4b){var _4c=!dijit._curFocus||(_4a&&dojo.isDescendant(dijit._curFocus,_4a.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_4c,bookmark:(_4c==dijit._curFocus)&&dojo.withGlobal(_4b||dojo.global,dijit.getBookmark),openedForWindow:_4b};},focus:function(_4d){if(!_4d){return;}var _4e="node" in _4d?_4d.node:_4d,_4f=_4d.bookmark,_50=_4d.openedForWindow,_51=_4f?_4f.isCollapsed:false;if(_4e){var _52=(_4e.tagName.toLowerCase()=="iframe")?_4e.contentWindow:_4e;if(_52&&_52.focus){try{_52.focus();}catch(e){}}dijit._onFocusNode(_4e);}if(_4f&&dojo.withGlobal(_50||dojo.global,dijit.isCollapsed)&&!_51){if(_50){_50.focus();}try{dojo.withGlobal(_50||dojo.global,dijit.moveToBookmark,null,[_4f]);}catch(e2){}}},_activeStack:[],registerIframe:function(_53){return dijit.registerWin(_53.contentWindow,_53);},unregisterIframe:function(_54){dijit.unregisterWin(_54);},registerWin:function(_55,_56){var _57=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_56||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_55.document.documentElement:_55.document;if(doc){if(dojo.isIE){doc.attachEvent("onmousedown",_57);var _58=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_56||evt.srcElement);}else{dijit._onTouchNode(_56||evt.srcElement);}};doc.attachEvent("onactivate",_58);var _59=function(evt){dijit._onBlurNode(_56||evt.srcElement);};doc.attachEvent("ondeactivate",_59);return function(){doc.detachEvent("onmousedown",_57);doc.detachEvent("onactivate",_58);doc.detachEvent("ondeactivate",_59);doc=null;};}else{doc.addEventListener("mousedown",_57,true);var _5a=function(evt){dijit._onFocusNode(_56||evt.target);};doc.addEventListener("focus",_5a,true);var _5b=function(evt){dijit._onBlurNode(_56||evt.target);};doc.addEventListener("blur",_5b,true);return function(){doc.removeEventListener("mousedown",_57,true);doc.removeEventListener("focus",_5a,true);doc.removeEventListener("blur",_5b,true);doc=null;};}}},unregisterWin:function(_5c){_5c&&_5c();},_onBlurNode:function(_5d){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);dijit._prevFocus=null;},100);},_onTouchNode:function(_5e,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _5f=[];try{while(_5e){var _60=dojo.attr(_5e,"dijitPopupParent");if(_60){_5e=dijit.byId(_60).domNode;}else{if(_5e.tagName&&_5e.tagName.toLowerCase()=="body"){if(_5e===dojo.body()){break;}_5e=dojo.window.get(_5e.ownerDocument).frameElement;}else{var id=_5e.getAttribute&&_5e.getAttribute("widgetId"),_61=id&&dijit.byId(id);if(_61&&!(by=="mouse"&&_61.get("disabled"))){_5f.unshift(id);}_5e=_5e.parentNode;}}}}catch(e){}dijit._setStack(_5f,by);},_onFocusNode:function(_62){if(!_62){return;}if(_62.nodeType==9){return;}dijit._onTouchNode(_62);if(_62==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_62;dojo.publish("focusNode",[_62]);},_setStack:function(_63,by){var _64=dijit._activeStack;dijit._activeStack=_63;for(var _65=0;_65<Math.min(_64.length,_63.length);_65++){if(_64[_65]!=_63[_65]){break;}}var _66;for(var i=_64.length-1;i>=_65;i--){_66=dijit.byId(_64[i]);if(_66){_66._focused=false;_66._hasBeenBlurred=true;if(_66._onBlur){_66._onBlur(by);}dojo.publish("widgetBlur",[_66,by]);}}for(i=_65;i<_63.length;i++){_66=dijit.byId(_63[i]);if(_66){_66._focused=true;if(_66._onFocus){_66._onFocus(by);}dojo.publish("widgetFocus",[_66,by]);}}}});dojo.addOnLoad(function(){var _67=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_67);_67=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_68){this.pairs=[];this.returnWrappers=_68||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_69,_6a,_6b,_6c,_6d){this.pairs[((_6d)?"unshift":"push")]([_69,_6a,_6b,_6c]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _6e=this.pairs[i];if(_6e[1].apply(this,arguments)){if((_6e[3])||(this.returnWrappers)){return _6e[2];}else{return _6e[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_6f){for(var i=0;i<this.pairs.length;i++){var _70=this.pairs[i];if(_70[0]==_6f){this.pairs.splice(i,1);return true;}}return false;}});}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){return dojo.window.getBox();};dijit.placeOnScreen=function(_71,pos,_72,_73){var _74=dojo.map(_72,function(_75){var c={corner:_75,pos:{x:pos.x,y:pos.y}};if(_73){c.pos.x+=_75.charAt(1)=="L"?_73.x:-_73.x;c.pos.y+=_75.charAt(0)=="T"?_73.y:-_73.y;}return c;});return dijit._place(_71,_74);};dijit._place=function(_76,_77,_78){var _79=dojo.window.getBox();if(!_76.parentNode||String(_76.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_76);}var _7a=null;dojo.some(_77,function(_7b){var _7c=_7b.corner;var pos=_7b.pos;if(_78){_78(_76,_7b.aroundCorner,_7c);}var _7d=_76.style;var _7e=_7d.display;var _7f=_7d.visibility;_7d.visibility="hidden";_7d.display="";var mb=dojo.marginBox(_76);_7d.display=_7e;_7d.visibility=_7f;var _80=Math.max(_79.l,_7c.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_81=Math.max(_79.t,_7c.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_82=Math.min(_79.l+_79.w,_7c.charAt(1)=="L"?(_80+mb.w):pos.x),_83=Math.min(_79.t+_79.h,_7c.charAt(0)=="T"?(_81+mb.h):pos.y),_84=_82-_80,_85=_83-_81,_86=(mb.w-_84)+(mb.h-_85);if(_7a==null||_86<_7a.overflow){_7a={corner:_7c,aroundCorner:_7b.aroundCorner,x:_80,y:_81,w:_84,h:_85,overflow:_86};}return !_86;});_76.style.left=_7a.x+"px";_76.style.top=_7a.y+"px";if(_7a.overflow&&_78){_78(_76,_7a.aroundCorner,_7a.corner);}return _7a;};dijit.placeOnScreenAroundNode=function(_87,_88,_89,_8a){_88=dojo.byId(_88);var _8b=_88.style.display;_88.style.display="";var _8c=dojo.position(_88,true);_88.style.display=_8b;return dijit._placeOnScreenAroundRect(_87,_8c.x,_8c.y,_8c.w,_8c.h,_89,_8a);};dijit.placeOnScreenAroundRectangle=function(_8d,_8e,_8f,_90){return dijit._placeOnScreenAroundRect(_8d,_8e.x,_8e.y,_8e.width,_8e.height,_8f,_90);};dijit._placeOnScreenAroundRect=function(_91,x,y,_92,_93,_94,_95){var _96=[];for(var _97 in _94){_96.push({aroundCorner:_97,corner:_94[_97],pos:{x:x+(_97.charAt(1)=="L"?0:_92),y:y+(_97.charAt(0)=="T"?0:_93)}});}return dijit._place(_91,_96,_95);};dijit.placementRegistry=new dojo.AdapterRegistry();dijit.placementRegistry.register("node",function(n,x){return typeof x=="object"&&typeof x.offsetWidth!="undefined"&&typeof x.offsetHeight!="undefined";},dijit.placeOnScreenAroundNode);dijit.placementRegistry.register("rect",function(n,x){return typeof x=="object"&&"x" in x&&"y" in x&&"width" in x&&"height" in x;},dijit.placeOnScreenAroundRectangle);dijit.placeOnScreenAroundElement=function(_98,_99,_9a,_9b){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_9c,_9d){var _9e={};dojo.forEach(_9c,function(pos){switch(pos){case "after":_9e[_9d?"BR":"BL"]=_9d?"BL":"BR";break;case "before":_9e[_9d?"BL":"BR"]=_9d?"BR":"BL";break;case "below":_9e[_9d?"BL":"BR"]=_9d?"TL":"TR";_9e[_9d?"BR":"BL"]=_9d?"TR":"TL";break;case "above":default:_9e[_9d?"TL":"TR"]=_9d?"BL":"BR";_9e[_9d?"TR":"TL"]=_9d?"BR":"BL";break;}});return _9e;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_9f){var _a0=_9f.parentNode;if(!_a0||!dojo.hasClass(_a0,"dijitPopup")){_a0=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());dijit.setWaiRole(_a0,"presentation");_a0.appendChild(_9f);}var s=_9f.style;s.display="";s.visibility="";s.position="";s.top="0px";dojo.style(_a0,{visibility:"hidden",top:"-9999px"});},getTopPopup:function(){var _a1=this._stack;for(var pi=_a1.length-1;pi>0&&_a1[pi].parent===_a1[pi-1].widget;pi--){}return _a1[pi];},open:function(_a2){var _a3=this._stack,_a4=_a2.popup,_a5=_a2.orient||((_a2.parent?_a2.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_a6=_a2.around,id=(_a2.around&&_a2.around.id)?(_a2.around.id+"_dropdown"):("popup_"+this._idGen++);var _a7=_a4.domNode.parentNode;if(!_a7||!dojo.hasClass(_a7,"dijitPopup")){this.moveOffScreen(_a4.domNode);_a7=_a4.domNode.parentNode;}dojo.attr(_a7,{id:id,style:{zIndex:this._beginZIndex+_a3.length},"class":"dijitPopup "+(_a4.baseClass||_a4["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_a2.parent?_a2.parent.id:""});if(dojo.isIE||dojo.isMoz){var _a8=_a7.childNodes[1];if(!_a8){_a8=new dijit.BackgroundIframe(_a7);}}var _a9=_a6?dijit.placeOnScreenAroundElement(_a7,_a6,_a5,_a4.orient?dojo.hitch(_a4,"orient"):null):dijit.placeOnScreen(_a7,_a2,_a5=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_a2.padding);_a7.style.visibility="visible";_a4.domNode.style.visibility="visible";var _aa=[];_aa.push(dojo.connect(_a7,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&_a2.onCancel){dojo.stopEvent(evt);_a2.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _ab=this.getTopPopup();if(_ab&&_ab.onCancel){_ab.onCancel();}}}}));if(_a4.onCancel){_aa.push(dojo.connect(_a4,"onCancel",_a2.onCancel));}_aa.push(dojo.connect(_a4,_a4.onExecute?"onExecute":"onChange",this,function(){var _ac=this.getTopPopup();if(_ac&&_ac.onExecute){_ac.onExecute();}}));_a3.push({wrapper:_a7,iframe:_a8,widget:_a4,parent:_a2.parent,onExecute:_a2.onExecute,onCancel:_a2.onCancel,onClose:_a2.onClose,handlers:_aa});if(_a4.onOpen){_a4.onOpen(_a9);}return _a9;},close:function(_ad){var _ae=this._stack;while(dojo.some(_ae,function(_af){return _af.widget==_ad;})){var top=_ae.pop(),_b0=top.wrapper,_b1=top.iframe,_b2=top.widget,_b3=top.onClose;if(_b2.onClose){_b2.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_b2&&_b2.domNode){this.moveOffScreen(_b2.domNode);}else{dojo.destroy(_b0);}if(_b3){_b3();}}}};dijit._frames=new function(){var _b4=[];this.pop=function(){var _b5;if(_b4.length){_b5=_b4.pop();_b5.style.display="";}else{if(dojo.isIE){var _b6=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";var _b7="<iframe src='"+_b6+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_b5=dojo.doc.createElement(_b7);}else{_b5=dojo.create("iframe");_b5.src="javascript:\"\"";_b5.className="dijitBackgroundIframe";dojo.style(_b5,"opacity",0.1);}_b5.tabIndex=-1;dijit.setWaiRole(_b5,"presentation");}return _b5;};this.push=function(_b8){_b8.style.display="none";_b4.push(_b8);};}();dijit.BackgroundIframe=function(_b9){if(!_b9.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _ba=dijit._frames.pop();_b9.appendChild(_ba);if(dojo.isIE<7){this.resize(_b9);this._conn=dojo.connect(_b9,"onresize",this,function(){this.resize(_b9);});}else{dojo.style(_ba,{width:"100%",height:"100%"});}this.iframe=_ba;}};dojo.extend(dijit.BackgroundIframe,{resize:function(_bb){if(this.iframe&&dojo.isIE<7){dojo.style(this.iframe,{width:_bb.offsetWidth+"px",height:_bb.offsetHeight+"px"});}},destroy:function(){if(this._conn){dojo.disconnect(this._conn);this._conn=null;}if(this.iframe){dijit._frames.push(this.iframe);delete this.iframe;}}});}if(!dojo._hasResource["dijit._base.scroll"]){dojo._hasResource["dijit._base.scroll"]=true;dojo.provide("dijit._base.scroll");dijit.scrollIntoView=function(_bc,pos){dojo.window.scrollIntoView(_bc,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,_bd=d.doc.documentElement,ie=d.isIE,_be=d.isOpera,maj=Math.floor,ff=d.isFF,_bf=d.boxModel.replace(/-/,""),_c0={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_be,dj_khtml:d.isKhtml,dj_webkit:d.isWebKit,dj_safari:d.isSafari,dj_chrome:d.isChrome,dj_gecko:d.isMozilla,dj_ff3:maj(ff)==3};_c0["dj_"+_bf]=true;var _c1="";for(var clz in _c0){if(_c0[clz]){_c1+=clz+" ";}}_bd.className=d.trim(_bd.className+" "+_c1);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _c2="dj_rtl dijitRtl "+_c1.replace(/ /g,"-rtl ");_bd.className=d.trim(_bd.className+" "+_c2);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}if(!dojo._hasResource["dijit._base.typematic"]){dojo._hasResource["dijit._base.typematic"]=true;dojo.provide("dijit._base.typematic");dijit.typematic={_fireEventAndReload:function(){this._timer=null;this._callback(++this._count,this._node,this._evt);this._currentTimeout=Math.max(this._currentTimeout<0?this._initialDelay:(this._subsequentDelay>1?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_c3,_c4,_c5,obj,_c6,_c7,_c8){if(obj!=this._obj){this.stop();this._initialDelay=_c7||500;this._subsequentDelay=_c6||0.9;this._minDelay=_c8||10;this._obj=obj;this._evt=evt;this._node=_c4;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_c3,_c5);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(_c9,_ca,_cb,_cc,_cd,_ce,_cf){if(_ca.keyCode){_ca.charOrCode=_ca.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_ca.charCode){_ca.charOrCode=String.fromCharCode(_ca.charCode);dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}}return [dojo.connect(_c9,"onkeypress",this,function(evt){if(evt.charOrCode==_ca.charOrCode&&(_ca.ctrlKey===undefined||_ca.ctrlKey==evt.ctrlKey)&&(_ca.altKey===undefined||_ca.altKey==evt.altKey)&&(_ca.metaKey===undefined||_ca.metaKey==(evt.metaKey||false))&&(_ca.shiftKey===undefined||_ca.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_cb,_c9,_cc,_ca,_cd,_ce,_cf);}else{if(dijit.typematic._obj==_ca){dijit.typematic.stop();}}}),dojo.connect(_c9,"onkeyup",this,function(evt){if(dijit.typematic._obj==_ca){dijit.typematic.stop();}})];},addMouseListener:function(_d0,_d1,_d2,_d3,_d4,_d5){var dc=dojo.connect;return [dc(_d0,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);}),dc(_d0,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mousemove",this,function(evt){evt.preventDefault();}),dc(_d0,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_d6,_d7,_d8,_d9,_da,_db,_dc,_dd){return this.addKeyListener(_d7,_d8,_d9,_da,_db,_dc,_dd).concat(this.addMouseListener(_d6,_d9,_da,_db,_dc,_dd));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.wai={onload:function(){var div=dojo.create("div",{id:"a11yTestNode",style:{cssText:"border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif"))+"\");"}},dojo.body());var cs=dojo.getComputedStyle(div);if(cs){var _de=cs.backgroundImage;var _df=(cs.borderTopColor==cs.borderRightColor)||(_de!=null&&(_de=="none"||_de=="url(invalid-url:)"));dojo[_df?"addClass":"removeClass"](dojo.body(),"dijit_a11y");if(dojo.isIE){div.outerHTML="";}else{dojo.body().removeChild(div);}}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}dojo.mixin(dijit,{_XhtmlRoles:/banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,hasWaiRole:function(_e0,_e1){var _e2=this.getWaiRole(_e0);return _e1?(_e2.indexOf(_e1)>-1):(_e2.length>0);},getWaiRole:function(_e3){return dojo.trim((dojo.attr(_e3,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));},setWaiRole:function(_e4,_e5){var _e6=dojo.attr(_e4,"role")||"";if(!this._XhtmlRoles.test(_e6)){dojo.attr(_e4,"role",_e5);}else{if((" "+_e6+" ").indexOf(" "+_e5+" ")<0){var _e7=dojo.trim(_e6.replace(this._XhtmlRoles,""));var _e8=dojo.trim(_e6.replace(_e7,""));dojo.attr(_e4,"role",_e8+(_e8?" ":"")+_e5);}}},removeWaiRole:function(_e9,_ea){var _eb=dojo.attr(_e9,"role");if(!_eb){return;}if(_ea){var t=dojo.trim((" "+_eb+" ").replace(" "+_ea+" "," "));dojo.attr(_e9,"role",t);}else{_e9.removeAttribute("role");}},hasWaiState:function(_ec,_ed){return _ec.hasAttribute?_ec.hasAttribute("aria-"+_ed):!!_ec.getAttribute("aria-"+_ed);},getWaiState:function(_ee,_ef){return _ee.getAttribute("aria-"+_ef)||"";},setWaiState:function(_f0,_f1,_f2){_f0.setAttribute("aria-"+_f1,_f2);},removeWaiState:function(_f3,_f4){_f3.removeAttribute("aria-"+_f4);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.require("dijit._base");dojo.connect(dojo,"_connect",function(_f5,_f6){if(_f5&&dojo.isFunction(_f5._onConnect)){_f5._onConnect(_f6);}});dijit._connectOnUseEventHandler=function(_f7){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _f8=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_f8);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_f8);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){var _f9={},_fa=function(_fb){var dc=_fb.declaredClass;if(!_f9[dc]){var r=[],_fc,_fd=_fb.constructor.prototype;for(var _fe in _fd){if(dojo.isFunction(_fd[_fe])&&(_fc=_fe.match(/^_set([a-zA-Z]*)Attr$/))&&_fc[1]){r.push(_fc[1].charAt(0).toLowerCase()+_fc[1].substr(1));}}_f9[dc]=r;}return _f9[dc]||[];};dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_ff,_100){this.create(_ff,_100);},create:function(_101,_102){this.srcNodeRef=dojo.byId(_102);this._connects=[];this._subscribes=[];this._deferredConnects=dojo.clone(this._deferredConnects);for(var attr in this.attributeMap){delete this._deferredConnects[attr];}for(attr in this._deferredConnects){if(this[attr]!==dijit._connectOnUseEventHandler){delete this._deferredConnects[attr];}}if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_101){this.params=_101;dojo.mixin(this,_101);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this._applyAttributes();var _103=this.srcNodeRef;if(_103&&_103.parentNode){_103.parentNode.replaceChild(this.domNode,_103);}for(attr in this.params){this._onConnect(attr);}}if(this.domNode){this.domNode.setAttribute("widgetId",this.id);}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}this._created=true;},_applyAttributes:function(){var _104=function(attr,_105){if((_105.params&&attr in _105.params)||_105[attr]){_105.set(attr,_105[attr]);}};for(var attr in this.attributeMap){_104(attr,this);}dojo.forEach(_fa(this),function(a){if(!(a in this.attributeMap)){_104(a,this);}},this);},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.create("div");},postCreate:function(){if(this.baseClass){var _106=this.baseClass.split(" ");if(!this.isLeftToRight()){_106=_106.concat(dojo.map(_106,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_106);}},startup:function(){this._started=true;},destroyRecursive:function(_107){this._beingDestroyed=true;this.destroyDescendants(_107);this.destroy(_107);},destroy:function(_108){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_109){dfe(_109,d.disconnect);});dfe(this._subscribes,function(_10a){dun(_10a);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_108);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_10b){if(this.bgIframe){this.bgIframe.destroy(_10b);delete this.bgIframe;}if(this.domNode){if(_10b){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_10b){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_10c){dojo.forEach(this.getChildren(),function(_10d){if(_10d.destroyRecursive){_10d.destroyRecursive(_10c);}});},uninitialize:function(){return false;},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},_onConnect:function(_10e){if(_10e in this._deferredConnects){var _10f=this[this._deferredConnects[_10e]||"domNode"];this.connect(_10f,_10e.toLowerCase(),_10e);delete this._deferredConnects[_10e];}},_setClassAttr:function(_110){var _111=this[this.attributeMap["class"]||"domNode"];dojo.removeClass(_111,this["class"]);this["class"]=_110;dojo.addClass(_111,_110);},_setStyleAttr:function(_112){var _113=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_112)){dojo.style(_113,_112);}else{if(_113.style.cssText){_113.style.cssText+="; "+_112;}else{_113.style.cssText=_112;}}this.style=_112;},setAttribute:function(attr,_114){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_114);},_attrToDom:function(attr,_115){var _116=this.attributeMap[attr];dojo.forEach(dojo.isArray(_116)?_116:[_116],function(_117){var _118=this[_117.node||_117||"domNode"];var type=_117.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_115)){_115=dojo.hitch(this,_115);}var _119=_117.attribute?_117.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_118,_119,_115);break;case "innerText":_118.innerHTML="";_118.appendChild(dojo.doc.createTextNode(_115));break;case "innerHTML":_118.innerHTML=_115;break;case "class":dojo.removeClass(_118,this[attr]);dojo.addClass(_118,_115);break;}},this);this[attr]=_115;},attr:function(name,_11a){if(dojo.config.isDebug){var _11b=arguments.callee._ach||(arguments.callee._ach={}),_11c=(arguments.callee.caller||"unknown caller").toString();if(!_11b[_11c]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_11c,"","2.0");_11b[_11c]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},get:function(name){var _11d=this._getAttrNames(name);return this[_11d.g]?this[_11d.g]():this[name];},set:function(name,_11e){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _11f=this._getAttrNames(name);if(this[_11f.s]){var _120=this[_11f.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_11e);}var _121=this[name];this[name]=_11e;}return _120||this;},_attrPairNames:{},_getAttrNames:function(name){var apn=this._attrPairNames;if(apn[name]){return apn[name];}var uc=name.charAt(0).toUpperCase()+name.substr(1);return (apn[name]={n:name+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];},getChildren:function(){return this.containerNode?dijit.findWidgets(this.containerNode):[];},nodesWithKeyClick:["input","button"],connect:function(obj,_122,_123){var d=dojo,dc=d._connect,_124=[];if(_122=="ondijitclick"){if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_123);_124.push(dc(obj,"onkeydown",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=e.target;e.preventDefault();}}),dc(obj,"onkeyup",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target===dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=null;return m(e);}}));}_122="onclick";}_124.push(dc(obj,_122,this,_123));this._connects.push(_124);return _124;},disconnect:function(_125){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_125){dojo.forEach(_125,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_126,_127){var d=dojo,_128=d.subscribe(_126,this,_127);this._subscribes.push(_128);return _128;},unsubscribe:function(_129){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_129){dojo.unsubscribe(_129);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},placeAt:function(_12a,_12b){if(_12a.declaredClass&&_12a.addChild){_12a.addChild(this,_12b);}else{dojo.place(this.domNode,_12a,_12b);}return this;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}if(!dojo._hasResource["dojox.gfx.matrix"]){dojo._hasResource["dojox.gfx.matrix"]=true;dojo.provide("dojox.gfx.matrix");(function(){var m=dojox.gfx.matrix;var _12c={};m._degToRad=function(_12d){return _12c[_12d]||(_12c[_12d]=(Math.PI*_12d/180));};m._radToDeg=function(_12e){return _12e/Math.PI*180;};m.Matrix2D=function(arg){if(arg){if(typeof arg=="number"){this.xx=this.yy=arg;}else{if(arg instanceof Array){if(arg.length>0){var _12f=m.normalize(arg[0]);for(var i=1;i<arg.length;++i){var l=_12f,r=dojox.gfx.matrix.normalize(arg[i]);_12f=new m.Matrix2D();_12f.xx=l.xx*r.xx+l.xy*r.yx;_12f.xy=l.xx*r.xy+l.xy*r.yy;_12f.yx=l.yx*r.xx+l.yy*r.yx;_12f.yy=l.yx*r.xy+l.yy*r.yy;_12f.dx=l.xx*r.dx+l.xy*r.dy+l.dx;_12f.dy=l.yx*r.dx+l.yy*r.dy+l.dy;}dojo.mixin(this,_12f);}}else{dojo.mixin(this,arg);}}}};dojo.extend(m.Matrix2D,{xx:1,xy:0,yx:0,yy:1,dx:0,dy:0});dojo.mixin(m,{identity:new m.Matrix2D(),flipX:new m.Matrix2D({xx:-1}),flipY:new m.Matrix2D({yy:-1}),flipXY:new m.Matrix2D({xx:-1,yy:-1}),translate:function(a,b){if(arguments.length>1){return new m.Matrix2D({dx:a,dy:b});}return new m.Matrix2D({dx:a.x,dy:a.y});},scale:function(a,b){if(arguments.length>1){return new m.Matrix2D({xx:a,yy:b});}if(typeof a=="number"){return new m.Matrix2D({xx:a,yy:a});}return new m.Matrix2D({xx:a.x,yy:a.y});},rotate:function(_130){var c=Math.cos(_130);var s=Math.sin(_130);return new m.Matrix2D({xx:c,xy:-s,yx:s,yy:c});},rotateg:function(_131){return m.rotate(m._degToRad(_131));},skewX:function(_132){return new m.Matrix2D({xy:Math.tan(_132)});},skewXg:function(_133){return m.skewX(m._degToRad(_133));},skewY:function(_134){return new m.Matrix2D({yx:Math.tan(_134)});},skewYg:function(_135){return m.skewY(m._degToRad(_135));},reflect:function(a,b){if(arguments.length==1){b=a.y;a=a.x;}var a2=a*a,b2=b*b,n2=a2+b2,xy=2*a*b/n2;return new m.Matrix2D({xx:2*a2/n2-1,xy:xy,yx:xy,yy:2*b2/n2-1});},project:function(a,b){if(arguments.length==1){b=a.y;a=a.x;}var a2=a*a,b2=b*b,n2=a2+b2,xy=a*b/n2;return new m.Matrix2D({xx:a2/n2,xy:xy,yx:xy,yy:b2/n2});},normalize:function(_136){return (_136 instanceof m.Matrix2D)?_136:new m.Matrix2D(_136);},clone:function(_137){var obj=new m.Matrix2D();for(var i in _137){if(typeof (_137[i])=="number"&&typeof (obj[i])=="number"&&obj[i]!=_137[i]){obj[i]=_137[i];}}return obj;},invert:function(_138){var M=m.normalize(_138),D=M.xx*M.yy-M.xy*M.yx,M=new m.Matrix2D({xx:M.yy/D,xy:-M.xy/D,yx:-M.yx/D,yy:M.xx/D,dx:(M.xy*M.dy-M.yy*M.dx)/D,dy:(M.yx*M.dx-M.xx*M.dy)/D});return M;},_multiplyPoint:function(_139,x,y){return {x:_139.xx*x+_139.xy*y+_139.dx,y:_139.yx*x+_139.yy*y+_139.dy};},multiplyPoint:function(_13a,a,b){var M=m.normalize(_13a);if(typeof a=="number"&&typeof b=="number"){return m._multiplyPoint(M,a,b);}return m._multiplyPoint(M,a.x,a.y);},multiply:function(_13b){var M=m.normalize(_13b);for(var i=1;i<arguments.length;++i){var l=M,r=m.normalize(arguments[i]);M=new m.Matrix2D();M.xx=l.xx*r.xx+l.xy*r.yx;M.xy=l.xx*r.xy+l.xy*r.yy;M.yx=l.yx*r.xx+l.yy*r.yx;M.yy=l.yx*r.xy+l.yy*r.yy;M.dx=l.xx*r.dx+l.xy*r.dy+l.dx;M.dy=l.yx*r.dx+l.yy*r.dy+l.dy;}return M;},_sandwich:function(_13c,x,y){return m.multiply(m.translate(x,y),_13c,m.translate(-x,-y));},scaleAt:function(a,b,c,d){switch(arguments.length){case 4:return m._sandwich(m.scale(a,b),c,d);case 3:if(typeof c=="number"){return m._sandwich(m.scale(a),b,c);}return m._sandwich(m.scale(a,b),c.x,c.y);}return m._sandwich(m.scale(a),b.x,b.y);},rotateAt:function(_13d,a,b){if(arguments.length>2){return m._sandwich(m.rotate(_13d),a,b);}return m._sandwich(m.rotate(_13d),a.x,a.y);},rotategAt:function(_13e,a,b){if(arguments.length>2){return m._sandwich(m.rotateg(_13e),a,b);}return m._sandwich(m.rotateg(_13e),a.x,a.y);},skewXAt:function(_13f,a,b){if(arguments.length>2){return m._sandwich(m.skewX(_13f),a,b);}return m._sandwich(m.skewX(_13f),a.x,a.y);},skewXgAt:function(_140,a,b){if(arguments.length>2){return m._sandwich(m.skewXg(_140),a,b);}return m._sandwich(m.skewXg(_140),a.x,a.y);},skewYAt:function(_141,a,b){if(arguments.length>2){return m._sandwich(m.skewY(_141),a,b);}return m._sandwich(m.skewY(_141),a.x,a.y);},skewYgAt:function(_142,a,b){if(arguments.length>2){return m._sandwich(m.skewYg(_142),a,b);}return m._sandwich(m.skewYg(_142),a.x,a.y);}});})();dojox.gfx.Matrix2D=dojox.gfx.matrix.Matrix2D;}if(!dojo._hasResource["dojox.gfx._base"]){dojo._hasResource["dojox.gfx._base"]=true;dojo.provide("dojox.gfx._base");(function(){var g=dojox.gfx,b=g._base;g._hasClass=function(node,_143){var cls=node.getAttribute("className");return cls&&(" "+cls+" ").indexOf(" "+_143+" ")>=0;};g._addClass=function(node,_144){var cls=node.getAttribute("className")||"";if(!cls||(" "+cls+" ").indexOf(" "+_144+" ")<0){node.setAttribute("className",cls+(cls?" ":"")+_144);}};g._removeClass=function(node,_145){var cls=node.getAttribute("className");if(cls){node.setAttribute("className",cls.replace(new RegExp("(^|\\s+)"+_145+"(\\s+|$)"),"$1$2"));}};b._getFontMeasurements=function(){var _146={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};if(dojo.isIE){dojo.doc.documentElement.style.fontSize="100%";}var div=dojo.doc.createElement("div");var s=div.style;s.position="absolute";s.left="-100px";s.top="0px";s.width="30px";s.height="1000em";s.borderWidth="0px";s.margin="0px";s.padding="0px";s.outline="none";s.lineHeight="1";s.overflow="hidden";dojo.body().appendChild(div);for(var p in _146){div.style.fontSize=p;_146[p]=Math.round(div.offsetHeight*12/16)*16/12/1000;}dojo.body().removeChild(div);div=null;return _146;};var _147=null;b._getCachedFontMeasurements=function(_148){if(_148||!_147){_147=b._getFontMeasurements();}return _147;};var _149=null,_14a={};b._getTextBox=function(text,_14b,_14c){var m,s,al=arguments.length;if(!_149){m=_149=dojo.doc.createElement("div");s=m.style;s.position="absolute";s.left="-10000px";s.top="0";dojo.body().appendChild(m);}else{m=_149;s=m.style;}m.className="";s.borderWidth="0";s.margin="0";s.padding="0";s.outline="0";if(al>1&&_14b){for(var i in _14b){if(i in _14a){continue;}s[i]=_14b[i];}}if(al>2&&_14c){m.className=_14c;}m.innerHTML=text;if(m["getBoundingClientRect"]){var bcr=m.getBoundingClientRect();return {l:bcr.left,t:bcr.top,w:bcr.width||(bcr.right-bcr.left),h:bcr.height||(bcr.bottom-bcr.top)};}else{return dojo.marginBox(m);}};var _14d=0;b._getUniqueId=function(){var id;do{id=dojo._scopeName+"Unique"+(++_14d);}while(dojo.byId(id));return id;};})();dojo.mixin(dojox.gfx,{defaultPath:{type:"path",path:""},defaultPolyline:{type:"polyline",points:[]},defaultRect:{type:"rect",x:0,y:0,width:100,height:100,r:0},defaultEllipse:{type:"ellipse",cx:0,cy:0,rx:200,ry:100},defaultCircle:{type:"circle",cx:0,cy:0,r:100},defaultLine:{type:"line",x1:0,y1:0,x2:100,y2:100},defaultImage:{type:"image",x:0,y:0,width:0,height:0,src:""},defaultText:{type:"text",x:0,y:0,text:"",align:"start",decoration:"none",rotated:false,kerning:true},defaultTextPath:{type:"textpath",text:"",align:"start",decoration:"none",rotated:false,kerning:true},defaultStroke:{type:"stroke",color:"black",style:"solid",width:1,cap:"butt",join:4},defaultLinearGradient:{type:"linear",x1:0,y1:0,x2:100,y2:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultRadialGradient:{type:"radial",cx:0,cy:0,r:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultPattern:{type:"pattern",x:0,y:0,width:0,height:0,src:""},defaultFont:{type:"font",style:"normal",variant:"normal",weight:"normal",size:"10pt",family:"serif"},getDefault:(function(){var _14e={};return function(type){var t=_14e[type];if(t){return new t();}t=_14e[type]=new Function;t.prototype=dojox.gfx["default"+type];return new t();};})(),normalizeColor:function(_14f){return (_14f instanceof dojo.Color)?_14f:new dojo.Color(_14f);},normalizeParameters:function(_150,_151){if(_151){var _152={};for(var x in _150){if(x in _151&&!(x in _152)){_150[x]=_151[x];}}}return _150;},makeParameters:function(_153,_154){if(!_154){return dojo.delegate(_153);}var _155={};for(var i in _153){if(!(i in _155)){_155[i]=dojo.clone((i in _154)?_154[i]:_153[i]);}}return _155;},formatNumber:function(x,_156){var val=x.toString();if(val.indexOf("e")>=0){val=x.toFixed(4);}else{var _157=val.indexOf(".");if(_157>=0&&val.length-_157>5){val=x.toFixed(4);}}if(x<0){return val;}return _156?" "+val:val;},makeFontString:function(font){return font.style+" "+font.variant+" "+font.weight+" "+font.size+" "+font.family;},splitFontString:function(str){var font=dojox.gfx.getDefault("Font");var t=str.split(/\s+/);do{if(t.length<5){break;}font.style=t[0];font.variant=t[1];font.weight=t[2];var i=t[3].indexOf("/");font.size=i<0?t[3]:t[3].substring(0,i);var j=4;if(i<0){if(t[4]=="/"){j=6;}else{if(t[4].charAt(0)=="/"){j=5;}}}if(j<t.length){font.family=t.slice(j).join(" ");}}while(false);return font;},cm_in_pt:72/2.54,mm_in_pt:7.2/2.54,px_in_pt:function(){return dojox.gfx._base._getCachedFontMeasurements()["12pt"]/12;},pt2px:function(len){return len*dojox.gfx.px_in_pt();},px2pt:function(len){return len/dojox.gfx.px_in_pt();},normalizedLength:function(len){if(len.length==0){return 0;}if(len.length>2){var _158=dojox.gfx.px_in_pt();var val=parseFloat(len);switch(len.slice(-2)){case "px":return val;case "pt":return val*_158;case "in":return val*72*_158;case "pc":return val*12*_158;case "mm":return val*dojox.gfx.mm_in_pt*_158;case "cm":return val*dojox.gfx.cm_in_pt*_158;}}return parseFloat(len);},pathVmlRegExp:/([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,pathSvgRegExp:/([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,equalSources:function(a,b){return a&&b&&a==b;}});}if(!dojo._hasResource["dojox.gfx"]){dojo._hasResource["dojox.gfx"]=true;dojo.provide("dojox.gfx");dojo.loadInit(function(){var gfx=dojo.getObject("dojox.gfx",true),sl,flag,_159;if(!gfx.renderer){if(dojo.config.forceGfxRenderer){dojox.gfx.renderer=dojo.config.forceGfxRenderer;return;}var _15a=(typeof dojo.config.gfxRenderer=="string"?dojo.config.gfxRenderer:"svg,vml,silverlight,canvas").split(",");var ua=navigator.userAgent,_15b=0,_15c=0;if(dojo.isSafari>=3){if(ua.indexOf("iPhone")>=0||ua.indexOf("iPod")>=0){_159=ua.match(/Version\/(\d(\.\d)?(\.\d)?)\sMobile\/([^\s]*)\s?/);if(_159){_15b=parseInt(_159[4].substr(0,3),16);}}}if(dojo.isWebKit){if(!_15b){_159=ua.match(/Android\s+(\d+\.\d+)/);if(_159){_15c=parseFloat(_159[1]);}}}for(var i=0;i<_15a.length;++i){switch(_15a[i]){case "svg":if(!dojo.isIE&&(!_15b||_15b>=1521)&&!_15c&&!dojo.isAIR){dojox.gfx.renderer="svg";}break;case "vml":if(dojo.isIE){dojox.gfx.renderer="vml";}break;case "silverlight":try{if(dojo.isIE){sl=new ActiveXObject("AgControl.AgControl");if(sl&&sl.IsVersionSupported("1.0")){flag=true;}}else{if(navigator.plugins["Silverlight Plug-In"]){flag=true;}}}catch(e){flag=false;}finally{sl=null;}if(flag){dojox.gfx.renderer="silverlight";}break;case "canvas":if(!dojo.isIE){dojox.gfx.renderer="canvas";}break;}if(dojox.gfx.renderer){break;}}if(dojo.config.isDebug){}}});dojo.requireIf(dojox.gfx.renderer=="svg","dojox.gfx.svg");dojo.requireIf(dojox.gfx.renderer=="vml","dojox.gfx.vml");dojo.requireIf(dojox.gfx.renderer=="silverlight","dojox.gfx.silverlight");dojo.requireIf(dojox.gfx.renderer=="canvas","dojox.gfx.canvas");}if(!dojo._hasResource["dojox.lang.functional.lambda"]){dojo._hasResource["dojox.lang.functional.lambda"]=true;dojo.provide("dojox.lang.functional.lambda");(function(){var df=dojox.lang.functional,_15d={};var _15e="ab".split(/a*/).length>1?String.prototype.split:function(sep){var r=this.split.call(this,sep),m=sep.exec(this);if(m&&m.index==0){r.unshift("");}return r;};var _15f=function(s){var args=[],_160=_15e.call(s,/\s*->\s*/m);if(_160.length>1){while(_160.length){s=_160.pop();args=_160.pop().split(/\s*,\s*|\s+/m);if(_160.length){_160.push("(function("+args+"){return ("+s+")})");}}}else{if(s.match(/\b_\b/)){args=["_"];}else{var l=s.match(/^\s*(?:[+*\/%&|\^\.=<>]|!=)/m),r=s.match(/[+\-*\/%&|\^\.=<>!]\s*$/m);if(l||r){if(l){args.push("$1");s="$1"+s;}if(r){args.push("$2");s=s+"$2";}}else{var vars=s.replace(/(?:\b[A-Z]|\.[a-zA-Z_$])[a-zA-Z_$\d]*|[a-zA-Z_$][a-zA-Z_$\d]*:|this|true|false|null|undefined|typeof|instanceof|in|delete|new|void|arguments|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape|dojo|dijit|dojox|window|document|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/g,"").match(/([a-z_$][a-z_$\d]*)/gi)||[],t={};dojo.forEach(vars,function(v){if(!(v in t)){args.push(v);t[v]=1;}});}}}return {args:args,body:s};};var _161=function(a){return a.length?function(){var i=a.length-1,x=df.lambda(a[i]).apply(this,arguments);for(--i;i>=0;--i){x=df.lambda(a[i]).call(this,x);}return x;}:function(x){return x;};};dojo.mixin(df,{rawLambda:function(s){return _15f(s);},buildLambda:function(s){s=_15f(s);return "function("+s.args.join(",")+"){return ("+s.body+");}";},lambda:function(s){if(typeof s=="function"){return s;}if(s instanceof Array){return _161(s);}if(s in _15d){return _15d[s];}s=_15f(s);return _15d[s]=new Function(s.args,"return ("+s.body+");");},clearLambdaCache:function(){_15d={};}});})();}if(!dojo._hasResource["dojox.lang.functional.array"]){dojo._hasResource["dojox.lang.functional.array"]=true;dojo.provide("dojox.lang.functional.array");(function(){var d=dojo,df=dojox.lang.functional,_162={};d.mixin(df,{filter:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var t=[],v,i,n;if(d.isArray(a)){for(i=0,n=a.length;i<n;++i){v=a[i];if(f.call(o,v,i,a)){t.push(v);}}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){for(i=0;a.hasNext();){v=a.next();if(f.call(o,v,i++,a)){t.push(v);}}}else{for(i in a){if(!(i in _162)){v=a[i];if(f.call(o,v,i,a)){t.push(v);}}}}}return t;},forEach:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var i,n;if(d.isArray(a)){for(i=0,n=a.length;i<n;f.call(o,a[i],i,a),++i){}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){for(i=0;a.hasNext();f.call(o,a.next(),i++,a)){}}else{for(i in a){if(!(i in _162)){f.call(o,a[i],i,a);}}}}return o;},map:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var t,n,i;if(d.isArray(a)){t=new Array(n=a.length);for(i=0;i<n;t[i]=f.call(o,a[i],i,a),++i){}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){t=[];for(i=0;a.hasNext();t.push(f.call(o,a.next(),i++,a))){}}else{t=[];for(i in a){if(!(i in _162)){t.push(f.call(o,a[i],i,a));}}}}return t;},every:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var i,n;if(d.isArray(a)){for(i=0,n=a.length;i<n;++i){if(!f.call(o,a[i],i,a)){return false;}}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){for(i=0;a.hasNext();){if(!f.call(o,a.next(),i++,a)){return false;}}}else{for(i in a){if(!(i in _162)){if(!f.call(o,a[i],i,a)){return false;}}}}}return true;},some:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var i,n;if(d.isArray(a)){for(i=0,n=a.length;i<n;++i){if(f.call(o,a[i],i,a)){return true;}}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){for(i=0;a.hasNext();){if(f.call(o,a.next(),i++,a)){return true;}}}else{for(i in a){if(!(i in _162)){if(f.call(o,a[i],i,a)){return true;}}}}}return false;}});})();}if(!dojo._hasResource["dojox.lang.functional.object"]){dojo._hasResource["dojox.lang.functional.object"]=true;dojo.provide("dojox.lang.functional.object");(function(){var d=dojo,df=dojox.lang.functional,_163={};d.mixin(df,{keys:function(obj){var t=[];for(var i in obj){if(!(i in _163)){t.push(i);}}return t;},values:function(obj){var t=[];for(var i in obj){if(!(i in _163)){t.push(obj[i]);}}return t;},filterIn:function(obj,f,o){o=o||d.global;f=df.lambda(f);var t={},v,i;for(i in obj){if(!(i in _163)){v=obj[i];if(f.call(o,v,i,obj)){t[i]=v;}}}return t;},forIn:function(obj,f,o){o=o||d.global;f=df.lambda(f);for(var i in obj){if(!(i in _163)){f.call(o,obj[i],i,obj);}}return o;},mapIn:function(obj,f,o){o=o||d.global;f=df.lambda(f);var t={},i;for(i in obj){if(!(i in _163)){t[i]=f.call(o,obj[i],i,obj);}}return t;}});})();}if(!dojo._hasResource["dojox.lang.functional"]){dojo._hasResource["dojox.lang.functional"]=true;dojo.provide("dojox.lang.functional");}if(!dojo._hasResource["dojox.lang.functional.fold"]){dojo._hasResource["dojox.lang.functional.fold"]=true;dojo.provide("dojox.lang.functional.fold");(function(){var d=dojo,df=dojox.lang.functional,_164={};d.mixin(df,{foldl:function(a,f,z,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var i,n;if(d.isArray(a)){for(i=0,n=a.length;i<n;z=f.call(o,z,a[i],i,a),++i){}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){for(i=0;a.hasNext();z=f.call(o,z,a.next(),i++,a)){}}else{for(i in a){if(!(i in _164)){z=f.call(o,z,a[i],i,a);}}}}return z;},foldl1:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var z,i,n;if(d.isArray(a)){z=a[0];for(i=1,n=a.length;i<n;z=f.call(o,z,a[i],i,a),++i){}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){if(a.hasNext()){z=a.next();for(i=1;a.hasNext();z=f.call(o,z,a.next(),i++,a)){}}}else{var _165=true;for(i in a){if(!(i in _164)){if(_165){z=a[i];_165=false;}else{z=f.call(o,z,a[i],i,a);}}}}}return z;},foldr:function(a,f,z,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);for(var i=a.length;i>0;--i,z=f.call(o,z,a[i],i,a)){}return z;},foldr1:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var n=a.length,z=a[n-1],i=n-1;for(;i>0;--i,z=f.call(o,z,a[i],i,a)){}return z;},reduce:function(a,f,z){return arguments.length<3?df.foldl1(a,f):df.foldl(a,f,z);},reduceRight:function(a,f,z){return arguments.length<3?df.foldr1(a,f):df.foldr(a,f,z);},unfold:function(pr,f,g,z,o){o=o||d.global;f=df.lambda(f);g=df.lambda(g);pr=df.lambda(pr);var t=[];for(;!pr.call(o,z);t.push(f.call(o,z)),z=g.call(o,z)){}return t;}});})();}if(!dojo._hasResource["dojox.lang.functional.reversed"]){dojo._hasResource["dojox.lang.functional.reversed"]=true;dojo.provide("dojox.lang.functional.reversed");(function(){var d=dojo,df=dojox.lang.functional;d.mixin(df,{filterRev:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var t=[],v,i=a.length-1;for(;i>=0;--i){v=a[i];if(f.call(o,v,i,a)){t.push(v);}}return t;},forEachRev:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);for(var i=a.length-1;i>=0;f.call(o,a[i],i,a),--i){}},mapRev:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var n=a.length,t=new Array(n),i=n-1,j=0;for(;i>=0;t[j++]=f.call(o,a[i],i,a),--i){}return t;},everyRev:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);for(var i=a.length-1;i>=0;--i){if(!f.call(o,a[i],i,a)){return false;}}return true;},someRev:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);for(var i=a.length-1;i>=0;--i){if(f.call(o,a[i],i,a)){return true;}}return false;}});})();}if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");(function(){var _166=function(m1,m2,h){if(h<0){++h;}if(h>1){--h;}var h6=6*h;if(h6<1){return m1+(m2-m1)*h6;}if(2*h<1){return m2;}if(3*h<2){return m1+(m2-m1)*(2/3-h)*6;}return m1;};dojo.colorFromRgb=function(_167,obj){var m=_167.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);if(m){var c=m[2].split(/\s*,\s*/),l=c.length,t=m[1],a;if((t=="rgb"&&l==3)||(t=="rgba"&&l==4)){var r=c[0];if(r.charAt(r.length-1)=="%"){a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}return dojo.colorFromArray(c,obj);}if((t=="hsl"&&l==3)||(t=="hsla"&&l==4)){var H=((parseFloat(c[0])%360)+360)%360/360,S=parseFloat(c[1])/100,L=parseFloat(c[2])/100,m2=L<=0.5?L*(S+1):L+S-L*S,m1=2*L-m2;a=[_166(m1,m2,H+1/3)*256,_166(m1,m2,H)*256,_166(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}}return null;};var _168=function(c,low,high){c=Number(c);return isNaN(c)?high:c<low?low:c>high?high:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_168(t.r,0,255));t.g=Math.round(_168(t.g,0,255));t.b=Math.round(_168(t.b,0,255));t.a=_168(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};dojo.mixin(dojo.Color.named,{aliceblue:[240,248,255],antiquewhite:[250,235,215],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],blanchedalmond:[255,235,205],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],oldlace:[253,245,230],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],thistle:[216,191,216],tomato:[255,99,71],transparent:[0,0,0,0],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],whitesmoke:[245,245,245],yellowgreen:[154,205,50]});}if(!dojo._hasResource["dojox.color._base"]){dojo._hasResource["dojox.color._base"]=true;dojo.provide("dojox.color._base");dojox.color.Color=dojo.Color;dojox.color.blend=dojo.blendColors;dojox.color.fromRgb=dojo.colorFromRgb;dojox.color.fromHex=dojo.colorFromHex;dojox.color.fromArray=dojo.colorFromArray;dojox.color.fromString=dojo.colorFromString;dojox.color.greyscale=dojo.colors.makeGrey;dojo.mixin(dojox.color,{fromCmy:function(cyan,_169,_16a){if(dojo.isArray(cyan)){_169=cyan[1],_16a=cyan[2],cyan=cyan[0];}else{if(dojo.isObject(cyan)){_169=cyan.m,_16a=cyan.y,cyan=cyan.c;}}cyan/=100,_169/=100,_16a/=100;var r=1-cyan,g=1-_169,b=1-_16a;return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});},fromCmyk:function(cyan,_16b,_16c,_16d){if(dojo.isArray(cyan)){_16b=cyan[1],_16c=cyan[2],_16d=cyan[3],cyan=cyan[0];}else{if(dojo.isObject(cyan)){_16b=cyan.m,_16c=cyan.y,_16d=cyan.b,cyan=cyan.c;}}cyan/=100,_16b/=100,_16c/=100,_16d/=100;var r,g,b;r=1-Math.min(1,cyan*(1-_16d)+_16d);g=1-Math.min(1,_16b*(1-_16d)+_16d);b=1-Math.min(1,_16c*(1-_16d)+_16d);return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});},fromHsl:function(hue,_16e,_16f){if(dojo.isArray(hue)){_16e=hue[1],_16f=hue[2],hue=hue[0];}else{if(dojo.isObject(hue)){_16e=hue.s,_16f=hue.l,hue=hue.h;}}_16e/=100;_16f/=100;while(hue<0){hue+=360;}while(hue>=360){hue-=360;}var r,g,b;if(hue<120){r=(120-hue)/60,g=hue/60,b=0;}else{if(hue<240){r=0,g=(240-hue)/60,b=(hue-120)/60;}else{r=(hue-240)/60,g=0,b=(360-hue)/60;}}r=2*_16e*Math.min(r,1)+(1-_16e);g=2*_16e*Math.min(g,1)+(1-_16e);b=2*_16e*Math.min(b,1)+(1-_16e);if(_16f<0.5){r*=_16f,g*=_16f,b*=_16f;}else{r=(1-_16f)*r+2*_16f-1;g=(1-_16f)*g+2*_16f-1;b=(1-_16f)*b+2*_16f-1;}return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});},fromHsv:function(hue,_170,_171){if(dojo.isArray(hue)){_170=hue[1],_171=hue[2],hue=hue[0];}else{if(dojo.isObject(hue)){_170=hue.s,_171=hue.v,hue=hue.h;}}if(hue==360){hue=0;}_170/=100;_171/=100;var r,g,b;if(_170==0){r=_171,b=_171,g=_171;}else{var _172=hue/60,i=Math.floor(_172),f=_172-i;var p=_171*(1-_170);var q=_171*(1-(_170*f));var t=_171*(1-(_170*(1-f)));switch(i){case 0:r=_171,g=t,b=p;break;case 1:r=q,g=_171,b=p;break;case 2:r=p,g=_171,b=t;break;case 3:r=p,g=q,b=_171;break;case 4:r=t,g=p,b=_171;break;case 5:r=_171,g=p,b=q;break;}}return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});}});dojo.extend(dojox.color.Color,{toCmy:function(){var cyan=1-(this.r/255),_173=1-(this.g/255),_174=1-(this.b/255);return {c:Math.round(cyan*100),m:Math.round(_173*100),y:Math.round(_174*100)};},toCmyk:function(){var cyan,_175,_176,_177;var r=this.r/255,g=this.g/255,b=this.b/255;_177=Math.min(1-r,1-g,1-b);cyan=(1-r-_177)/(1-_177);_175=(1-g-_177)/(1-_177);_176=(1-b-_177)/(1-_177);return {c:Math.round(cyan*100),m:Math.round(_175*100),y:Math.round(_176*100),b:Math.round(_177*100)};},toHsl:function(){var r=this.r/255,g=this.g/255,b=this.b/255;var min=Math.min(r,b,g),max=Math.max(r,g,b);var _178=max-min;var h=0,s=0,l=(min+max)/2;if(l>0&&l<1){s=_178/((l<0.5)?(2*l):(2-2*l));}if(_178>0){if(max==r&&max!=g){h+=(g-b)/_178;}if(max==g&&max!=b){h+=(2+(b-r)/_178);}if(max==b&&max!=r){h+=(4+(r-g)/_178);}h*=60;}return {h:h,s:Math.round(s*100),l:Math.round(l*100)};},toHsv:function(){var r=this.r/255,g=this.g/255,b=this.b/255;var min=Math.min(r,b,g),max=Math.max(r,g,b);var _179=max-min;var h=null,s=(max==0)?0:(_179/max);if(s==0){h=0;}else{if(r==max){h=60*(g-b)/_179;}else{if(g==max){h=120+60*(b-r)/_179;}else{h=240+60*(r-g)/_179;}}if(h<0){h+=360;}}return {h:h,s:Math.round(s*100),v:Math.round(max*100)};}});}if(!dojo._hasResource["dojox.color"]){dojo._hasResource["dojox.color"]=true;dojo.provide("dojox.color");}if(!dojo._hasResource["dojox.color.Palette"]){dojo._hasResource["dojox.color.Palette"]=true;dojo.provide("dojox.color.Palette");(function(){var dxc=dojox.color;dxc.Palette=function(base){this.colors=[];if(base instanceof dojox.color.Palette){this.colors=base.colors.slice(0);}else{if(base instanceof dojox.color.Color){this.colors=[null,null,base,null,null];}else{if(dojo.isArray(base)){this.colors=dojo.map(base.slice(0),function(item){if(dojo.isString(item)){return new dojox.color.Color(item);}return item;});}else{if(dojo.isString(base)){this.colors=[null,null,new dojox.color.Color(base),null,null];}}}}};function _17a(p,_17b,val){var ret=new dojox.color.Palette();ret.colors=[];dojo.forEach(p.colors,function(item){var r=(_17b=="dr")?item.r+val:item.r,g=(_17b=="dg")?item.g+val:item.g,b=(_17b=="db")?item.b+val:item.b,a=(_17b=="da")?item.a+val:item.a;ret.colors.push(new dojox.color.Color({r:Math.min(255,Math.max(0,r)),g:Math.min(255,Math.max(0,g)),b:Math.min(255,Math.max(0,b)),a:Math.min(1,Math.max(0,a))}));});return ret;};function tCMY(p,_17c,val){var ret=new dojox.color.Palette();ret.colors=[];dojo.forEach(p.colors,function(item){var o=item.toCmy(),c=(_17c=="dc")?o.c+val:o.c,m=(_17c=="dm")?o.m+val:o.m,y=(_17c=="dy")?o.y+val:o.y;ret.colors.push(dojox.color.fromCmy(Math.min(100,Math.max(0,c)),Math.min(100,Math.max(0,m)),Math.min(100,Math.max(0,y))));});return ret;};function _17d(p,_17e,val){var ret=new dojox.color.Palette();ret.colors=[];dojo.forEach(p.colors,function(item){var o=item.toCmyk(),c=(_17e=="dc")?o.c+val:o.c,m=(_17e=="dm")?o.m+val:o.m,y=(_17e=="dy")?o.y+val:o.y,k=(_17e=="dk")?o.b+val:o.b;ret.colors.push(dojox.color.fromCmyk(Math.min(100,Math.max(0,c)),Math.min(100,Math.max(0,m)),Math.min(100,Math.max(0,y)),Math.min(100,Math.max(0,k))));});return ret;};function tHSL(p,_17f,val){var ret=new dojox.color.Palette();ret.colors=[];dojo.forEach(p.colors,function(item){var o=item.toHsl(),h=(_17f=="dh")?o.h+val:o.h,s=(_17f=="ds")?o.s+val:o.s,l=(_17f=="dl")?o.l+val:o.l;ret.colors.push(dojox.color.fromHsl(h%360,Math.min(100,Math.max(0,s)),Math.min(100,Math.max(0,l))));});return ret;};function tHSV(p,_180,val){var ret=new dojox.color.Palette();ret.colors=[];dojo.forEach(p.colors,function(item){var o=item.toHsv(),h=(_180=="dh")?o.h+val:o.h,s=(_180=="ds")?o.s+val:o.s,v=(_180=="dv")?o.v+val:o.v;ret.colors.push(dojox.color.fromHsv(h%360,Math.min(100,Math.max(0,s)),Math.min(100,Math.max(0,v))));});return ret;};function _181(val,low,high){return high-((high-val)*((high-low)/high));};dojo.extend(dxc.Palette,{transform:function(_182){var fn=_17a;if(_182.use){var use=_182.use.toLowerCase();if(use.indexOf("hs")==0){if(use.charAt(2)=="l"){fn=tHSL;}else{fn=tHSV;}}else{if(use.indexOf("cmy")==0){if(use.charAt(3)=="k"){fn=_17d;}else{fn=tCMY;}}}}else{if("dc" in _182||"dm" in _182||"dy" in _182){if("dk" in _182){fn=_17d;}else{fn=tCMY;}}else{if("dh" in _182||"ds" in _182){if("dv" in _182){fn=tHSV;}else{fn=tHSL;}}}}var _183=this;for(var p in _182){if(p=="use"){continue;}_183=fn(_183,p,_182[p]);}return _183;},clone:function(){return new dxc.Palette(this);}});dojo.mixin(dxc.Palette,{generators:{analogous:function(args){var high=args.high||60,low=args.low||18,base=dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,hsv=base.toHsv();var h=[(hsv.h+low+360)%360,(hsv.h+Math.round(low/2)+360)%360,hsv.h,(hsv.h-Math.round(high/2)+360)%360,(hsv.h-high+360)%360];var s1=Math.max(10,(hsv.s<=95)?hsv.s+5:(100-(hsv.s-95))),s2=(hsv.s>1)?hsv.s-1:21-hsv.s,v1=(hsv.v>=92)?hsv.v-9:Math.max(hsv.v+9,20),v2=(hsv.v<=90)?Math.max(hsv.v+5,20):(95+Math.ceil((hsv.v-90)/2)),s=[s1,s2,hsv.s,s1,s1],v=[v1,v2,hsv.v,v1,v2];return new dxc.Palette(dojo.map(h,function(hue,i){return dojox.color.fromHsv(hue,s[i],v[i]);}));},monochromatic:function(args){var base=dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,hsv=base.toHsv();var s1=(hsv.s-30>9)?hsv.s-30:hsv.s+30,s2=hsv.s,v1=_181(hsv.v,20,100),v2=(hsv.v-20>20)?hsv.v-20:hsv.v+60,v3=(hsv.v-50>20)?hsv.v-50:hsv.v+30;return new dxc.Palette([dojox.color.fromHsv(hsv.h,s1,v1),dojox.color.fromHsv(hsv.h,s2,v3),base,dojox.color.fromHsv(hsv.h,s1,v3),dojox.color.fromHsv(hsv.h,s2,v2)]);},triadic:function(args){var base=dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,hsv=base.toHsv();var h1=(hsv.h+57+360)%360,h2=(hsv.h-157+360)%360,s1=(hsv.s>20)?hsv.s-10:hsv.s+10,s2=(hsv.s>90)?hsv.s-10:hsv.s+10,s3=(hsv.s>95)?hsv.s-5:hsv.s+5,v1=(hsv.v-20>20)?hsv.v-20:hsv.v+20,v2=(hsv.v-30>20)?hsv.v-30:hsv.v+30,v3=(hsv.v-30>70)?hsv.v-30:hsv.v+30;return new dxc.Palette([dojox.color.fromHsv(h1,s1,hsv.v),dojox.color.fromHsv(hsv.h,s2,v2),base,dojox.color.fromHsv(h2,s2,v1),dojox.color.fromHsv(h2,s3,v3)]);},complementary:function(args){var base=dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,hsv=base.toHsv();var h1=((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,s1=Math.max(hsv.s-10,0),s2=_181(hsv.s,10,100),s3=Math.min(100,hsv.s+20),v1=Math.min(100,hsv.v+30),v2=(hsv.v>20)?hsv.v-30:hsv.v+30;return new dxc.Palette([dojox.color.fromHsv(hsv.h,s1,v1),dojox.color.fromHsv(hsv.h,s2,v2),base,dojox.color.fromHsv(h1,s3,v2),dojox.color.fromHsv(h1,hsv.s,hsv.v)]);},splitComplementary:function(args){var base=dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,_184=args.da||30,hsv=base.toHsv();var _185=((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,h1=(_185-_184+360)%360,h2=(_185+_184)%360,s1=Math.max(hsv.s-10,0),s2=_181(hsv.s,10,100),s3=Math.min(100,hsv.s+20),v1=Math.min(100,hsv.v+30),v2=(hsv.v>20)?hsv.v-30:hsv.v+30;return new dxc.Palette([dojox.color.fromHsv(h1,s1,v1),dojox.color.fromHsv(h1,s2,v2),base,dojox.color.fromHsv(h2,s3,v2),dojox.color.fromHsv(h2,hsv.s,hsv.v)]);},compound:function(args){var base=dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,hsv=base.toHsv();var h1=((hsv.h*2)+18<360)?(hsv.h*2)+18:Math.floor(hsv.h/2)-18,h2=((hsv.h*2)+120<360)?(hsv.h*2)+120:Math.floor(hsv.h/2)-120,h3=((hsv.h*2)+99<360)?(hsv.h*2)+99:Math.floor(hsv.h/2)-99,s1=(hsv.s-40>10)?hsv.s-40:hsv.s+40,s2=(hsv.s-10>80)?hsv.s-10:hsv.s+10,s3=(hsv.s-25>10)?hsv.s-25:hsv.s+25,v1=(hsv.v-40>10)?hsv.v-40:hsv.v+40,v2=(hsv.v-20>80)?hsv.v-20:hsv.v+20,v3=Math.max(hsv.v,20);return new dxc.Palette([dojox.color.fromHsv(h1,s1,v1),dojox.color.fromHsv(h1,s2,v2),base,dojox.color.fromHsv(h2,s3,v3),dojox.color.fromHsv(h3,s2,v2)]);},shades:function(args){var base=dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,hsv=base.toHsv();var s=(hsv.s==100&&hsv.v==0)?0:hsv.s,v1=(hsv.v-50>20)?hsv.v-50:hsv.v+30,v2=(hsv.v-25>=20)?hsv.v-25:hsv.v+55,v3=(hsv.v-75>=20)?hsv.v-75:hsv.v+5,v4=Math.max(hsv.v-10,20);return new dxc.Palette([new dojox.color.fromHsv(hsv.h,s,v1),new dojox.color.fromHsv(hsv.h,s,v2),base,new dojox.color.fromHsv(hsv.h,s,v3),new dojox.color.fromHsv(hsv.h,s,v4)]);}},generate:function(base,type){if(dojo.isFunction(type)){return type({base:base});}else{if(dxc.Palette.generators[type]){return dxc.Palette.generators[type]({base:base});}}throw new Error("dojox.color.Palette.generate: the specified generator ('"+type+"') does not exist.");}});})();}if(!dojo._hasResource["dojox.lang.utils"]){dojo._hasResource["dojox.lang.utils"]=true;dojo.provide("dojox.lang.utils");(function(){var _186={},du=dojox.lang.utils,opts=Object.prototype.toString;var _187=function(o){if(o){switch(opts.call(o)){case "[object Array]":return o.slice(0);case "[object Object]":return dojo.delegate(o);}}return o;};dojo.mixin(du,{coerceType:function(_188,_189){switch(typeof _188){case "number":return Number(eval("("+_189+")"));case "string":return String(_189);case "boolean":return Boolean(eval("("+_189+")"));}return eval("("+_189+")");},updateWithObject:function(_18a,_18b,conv){if(!_18b){return _18a;}for(var x in _18a){if(x in _18b&&!(x in _186)){var t=_18a[x];if(t&&typeof t=="object"){du.updateWithObject(t,_18b[x],conv);}else{_18a[x]=conv?du.coerceType(t,_18b[x]):_187(_18b[x]);}}}return _18a;},updateWithPattern:function(_18c,_18d,_18e,conv){if(!_18d||!_18e){return _18c;}for(var x in _18e){if(x in _18d&&!(x in _186)){_18c[x]=conv?du.coerceType(_18e[x],_18d[x]):_187(_18d[x]);}}return _18c;},merge:function(_18f,_190){if(_190){var _191=opts.call(_18f),_192=opts.call(_190),t,i,l,m;switch(_192){case "[object Array]":if(_192==_191){t=new Array(Math.max(_18f.length,_190.length));for(i=0,l=t.length;i<l;++i){t[i]=du.merge(_18f[i],_190[i]);}return t;}return _190.slice(0);case "[object Object]":if(_192==_191&&_18f){t=dojo.delegate(_18f);for(i in _190){if(i in _18f){l=_18f[i];m=_190[i];if(m!==l){t[i]=du.merge(l,m);}}else{t[i]=dojo.clone(_190[i]);}}return t;}return dojo.clone(_190);}}return _190;}});})();}if(!dojo._hasResource["dojox.gfx.gradutils"]){dojo._hasResource["dojox.gfx.gradutils"]=true;dojo.provide("dojox.gfx.gradutils");(function(){var d=dojo,m=dojox.gfx.matrix,C=d.Color;function _193(o,c){if(o<=0){return c[0].color;}var len=c.length;if(o>=1){return c[len-1].color;}for(var i=0;i<len;++i){var stop=c[i];if(stop.offset>=o){if(i){var prev=c[i-1];return d.blendColors(new C(prev.color),new C(stop.color),(o-prev.offset)/(stop.offset-prev.offset));}return stop.color;}}return c[len-1].color;};dojox.gfx.gradutils.getColor=function(fill,pt){var o;if(fill){switch(fill.type){case "linear":var _194=Math.atan2(fill.y2-fill.y1,fill.x2-fill.x1),_195=m.rotate(-_194),_196=m.project(fill.x2-fill.x1,fill.y2-fill.y1),p=m.multiplyPoint(_196,pt),pf1=m.multiplyPoint(_196,fill.x1,fill.y1),pf2=m.multiplyPoint(_196,fill.x2,fill.y2),_197=m.multiplyPoint(_195,pf2.x-pf1.x,pf2.y-pf1.y).x,o=m.multiplyPoint(_195,p.x-pf1.x,p.y-pf1.y).x/_197;break;case "radial":var dx=pt.x-fill.cx,dy=pt.y-fill.cy,o=Math.sqrt(dx*dx+dy*dy)/fill.r;break;}return _193(o,fill.colors);}return new C(fill||[0,0,0,0]);};dojox.gfx.gradutils.reverse=function(fill){if(fill){switch(fill.type){case "linear":case "radial":fill=dojo.delegate(fill);if(fill.colors){var c=fill.colors,l=c.length,i=0,stop,n=fill.colors=new Array(c.length);for(;i<l;++i){stop=c[i];n[i]={offset:1-stop.offset,color:stop.color};}n.sort(function(a,b){return a.offset-b.offset;});}break;}}return fill;};})();}if(!dojo._hasResource["dojox.charting.Theme"]){dojo._hasResource["dojox.charting.Theme"]=true;dojo.provide("dojox.charting.Theme");dojo.declare("dojox.charting.Theme",null,{shapeSpaces:{shape:1,shapeX:1,shapeY:1},constructor:function(_198){_198=_198||{};var def=dojox.charting.Theme.defaultTheme;dojo.forEach(["chart","plotarea","axis","series","marker"],function(name){this[name]=dojo.delegate(def[name],_198[name]);},this);if(_198.seriesThemes&&_198.seriesThemes.length){this.colors=null;this.seriesThemes=_198.seriesThemes.slice(0);}else{this.seriesThemes=null;this.colors=(_198.colors||dojox.charting.Theme.defaultColors).slice(0);}this.markerThemes=null;if(_198.markerThemes&&_198.markerThemes.length){this.markerThemes=_198.markerThemes.slice(0);}this.markers=dojo.delegate(dojox.charting.Theme.defaultMarkers,_198.markers);this.noGradConv=_198.noGradConv;this.noRadialConv=_198.noRadialConv;if(_198.reverseFills){this.reverseFills();}this._current=0;this._buildMarkerArray();},clone:function(){var _199=new dojox.charting.Theme({chart:this.chart,plotarea:this.plotarea,axis:this.axis,series:this.series,marker:this.marker,colors:this.colors,markers:this.markers,seriesThemes:this.seriesThemes,markerThemes:this.markerThemes,noGradConv:this.noGradConv,noRadialConv:this.noRadialConv});dojo.forEach(["clone","clear","next","skip","addMixin","post","getTick"],function(name){if(this.hasOwnProperty(name)){_199[name]=this[name];}},this);return _199;},clear:function(){this._current=0;},next:function(_19a,_19b,_19c){var _19d=dojox.lang.utils.merge,_19e,_19f;if(this.colors){_19e=dojo.delegate(this.series);_19f=dojo.delegate(this.marker);var _1a0=new dojo.Color(this.colors[this._current%this.colors.length]),old;if(_19e.stroke&&_19e.stroke.color){_19e.stroke=dojo.delegate(_19e.stroke);old=new dojo.Color(_19e.stroke.color);_19e.stroke.color=new dojo.Color(_1a0);_19e.stroke.color.a=old.a;}else{_19e.stroke={color:_1a0};}if(_19f.stroke&&_19f.stroke.color){_19f.stroke=dojo.delegate(_19f.stroke);old=new dojo.Color(_19f.stroke.color);_19f.stroke.color=new dojo.Color(_1a0);_19f.stroke.color.a=old.a;}else{_19f.stroke={color:_1a0};}if(!_19e.fill||_19e.fill.type){_19e.fill=_1a0;}else{old=new dojo.Color(_19e.fill);_19e.fill=new dojo.Color(_1a0);_19e.fill.a=old.a;}if(!_19f.fill||_19f.fill.type){_19f.fill=_1a0;}else{old=new dojo.Color(_19f.fill);_19f.fill=new dojo.Color(_1a0);_19f.fill.a=old.a;}}else{_19e=this.seriesThemes?_19d(this.series,this.seriesThemes[this._current%this.seriesThemes.length]):this.series;_19f=this.markerThemes?_19d(this.marker,this.markerThemes[this._current%this.markerThemes.length]):_19e;}var _1a1=_19f&&_19f.symbol||this._markers[this._current%this._markers.length];var _1a2={series:_19e,marker:_19f,symbol:_1a1};++this._current;if(_19b){_1a2=this.addMixin(_1a2,_19a,_19b);}if(_19c){_1a2=this.post(_1a2,_19a);}return _1a2;},skip:function(){++this._current;},addMixin:function(_1a3,_1a4,_1a5,_1a6){if(dojo.isArray(_1a5)){dojo.forEach(_1a5,function(m){_1a3=this.addMixin(_1a3,_1a4,m);},this);}else{var t={};if("color" in _1a5){if(_1a4=="line"||_1a4=="area"){dojo.setObject("series.stroke.color",_1a5.color,t);dojo.setObject("marker.stroke.color",_1a5.color,t);}else{dojo.setObject("series.fill",_1a5.color,t);}}dojo.forEach(["stroke","outline","shadow","fill","font","fontColor"],function(name){var _1a7="marker"+name.charAt(0).toUpperCase()+name.substr(1),b=_1a7 in _1a5;if(name in _1a5){dojo.setObject("series."+name,_1a5[name],t);if(!b){dojo.setObject("marker."+name,_1a5[name],t);}}if(b){dojo.setObject("marker."+name,_1a5[_1a7],t);}});if("marker" in _1a5){t.symbol=_1a5.marker;}_1a3=dojox.lang.utils.merge(_1a3,t);}if(_1a6){_1a3=this.post(_1a3,_1a4);}return _1a3;},post:function(_1a8,_1a9){var fill=_1a8.series.fill,t;if(!this.noGradConv&&this.shapeSpaces[fill.space]&&fill.type=="linear"){if(_1a9=="bar"){t={x1:fill.y1,y1:fill.x1,x2:fill.y2,y2:fill.x2};}else{if(!this.noRadialConv&&fill.space=="shape"&&(_1a9=="slice"||_1a9=="circle")){t={type:"radial",cx:0,cy:0,r:100};}}if(t){return dojox.lang.utils.merge(_1a8,{series:{fill:t}});}}return _1a8;},getTick:function(name,_1aa){var tick=this.axis.tick,_1ab=name+"Tick";merge=dojox.lang.utils.merge;if(tick){if(this.axis[_1ab]){tick=merge(tick,this.axis[_1ab]);}}else{tick=this.axis[_1ab];}if(_1aa){if(tick){if(_1aa[_1ab]){tick=merge(tick,_1aa[_1ab]);}}else{tick=_1aa[_1ab];}}return tick;},inspectObjects:function(f){dojo.forEach(["chart","plotarea","axis","series","marker"],function(name){f(this[name]);},this);if(this.seriesThemes){dojo.forEach(this.seriesThemes,f);}if(this.markerThemes){dojo.forEach(this.markerThemes,f);}},reverseFills:function(){this.inspectObjects(function(o){if(o&&o.fill){o.fill=dojox.gfx.gradutils.reverse(o.fill);}});},addMarker:function(name,_1ac){this.markers[name]=_1ac;this._buildMarkerArray();},setMarkers:function(obj){this.markers=obj;this._buildMarkerArray();},_buildMarkerArray:function(){this._markers=[];for(var p in this.markers){this._markers.push(this.markers[p]);}}});dojo.mixin(dojox.charting.Theme,{defaultMarkers:{CIRCLE:"m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0",SQUARE:"m-3,-3 l0,6 6,0 0,-6 z",DIAMOND:"m0,-3 l3,3 -3,3 -3,-3 z",CROSS:"m0,-3 l0,6 m-3,-3 l6,0",X:"m-3,-3 l6,6 m0,-6 l-6,6",TRIANGLE:"m-3,3 l3,-6 3,6 z",TRIANGLE_INVERTED:"m-3,-3 l3,6 3,-6 z"},defaultColors:["#54544c","#858e94","#6e767a","#948585","#474747"],defaultTheme:{chart:{stroke:null,fill:"white",pageStyle:null},plotarea:{stroke:null,fill:"white"},axis:{stroke:{color:"#333",width:1},tick:{color:"#666",position:"center",font:"normal normal normal 7pt Tahoma",fontColor:"#333"},majorTick:{width:1,length:6},minorTick:{width:0.8,length:3},microTick:{width:0.5,length:1}},series:{stroke:{width:1.5,color:"#333"},outline:{width:0.1,color:"#ccc"},shadow:null,fill:"#ccc",font:"normal normal normal 8pt Tahoma",fontColor:"#000"},marker:{stroke:{width:1.5,color:"#333"},outline:{width:0.1,color:"#ccc"},shadow:null,fill:"#ccc",font:"normal normal normal 8pt Tahoma",fontColor:"#000"}},defineColors:function(_1ad){_1ad=_1ad||{};var c=[],n=_1ad.num||5;if(_1ad.colors){var l=_1ad.colors.length;for(var i=0;i<n;i++){c.push(_1ad.colors[i%l]);}return c;}if(_1ad.hue){var s=_1ad.saturation||100;var st=_1ad.low||30;var end=_1ad.high||90;var l=(end+st)/2;return dojox.color.Palette.generate(dojox.color.fromHsv(_1ad.hue,s,l),"monochromatic").colors;}if(_1ad.generator){return dojox.color.Palette.generate(_1ad.base,_1ad.generator).colors;}return c;},generateGradient:function(_1ae,_1af,_1b0){var fill=dojo.delegate(_1ae);fill.colors=[{offset:0,color:_1af},{offset:1,color:_1b0}];return fill;},generateHslColor:function(_1b1,_1b2){_1b1=new dojox.color.Color(_1b1);var hsl=_1b1.toHsl(),_1b3=dojox.color.fromHsl(hsl.h,hsl.s,_1b2);_1b3.a=_1b1.a;return _1b3;},generateHslGradient:function(_1b4,_1b5,_1b6,_1b7){_1b4=new dojox.color.Color(_1b4);var hsl=_1b4.toHsl(),_1b8=dojox.color.fromHsl(hsl.h,hsl.s,_1b6),_1b9=dojox.color.fromHsl(hsl.h,hsl.s,_1b7);_1b8.a=_1b9.a=_1b4.a;return dojox.charting.Theme.generateGradient(_1b5,_1b8,_1b9);}});}if(!dojo._hasResource["dojox.charting.Element"]){dojo._hasResource["dojox.charting.Element"]=true;dojo.provide("dojox.charting.Element");dojo.declare("dojox.charting.Element",null,{chart:null,group:null,htmlElements:null,dirty:true,constructor:function(_1ba){this.chart=_1ba;this.group=null;this.htmlElements=[];this.dirty=true;},createGroup:function(_1bb){if(!_1bb){_1bb=this.chart.surface;}if(!this.group){this.group=_1bb.createGroup();}return this;},purgeGroup:function(){this.destroyHtmlElements();if(this.group){this.group.clear();this.group.removeShape();this.group=null;}this.dirty=true;return this;},cleanGroup:function(_1bc){this.destroyHtmlElements();if(!_1bc){_1bc=this.chart.surface;}if(this.group){this.group.clear();}else{this.group=_1bc.createGroup();}this.dirty=true;return this;},destroyHtmlElements:function(){if(this.htmlElements.length){dojo.forEach(this.htmlElements,dojo.destroy);this.htmlElements=[];}},destroy:function(){this.purgeGroup();},_plotFill:function(fill,dim,_1bd){if(!fill||!fill.type||!fill.space){return fill;}var _1be=fill.space;switch(fill.type){case "linear":if(_1be==="plot"||_1be==="shapeX"||_1be==="shapeY"){fill=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,fill);fill.space=_1be;if(_1be==="plot"||_1be==="shapeX"){var span=dim.height-_1bd.t-_1bd.b;fill.y1=_1bd.t+span*fill.y1/100;fill.y2=_1bd.t+span*fill.y2/100;}if(_1be==="plot"||_1be==="shapeY"){var span=dim.width-_1bd.l-_1bd.r;fill.x1=_1bd.l+span*fill.x1/100;fill.x2=_1bd.l+span*fill.x2/100;}}break;case "radial":if(_1be==="plot"){fill=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,fill);fill.space=_1be;var _1bf=dim.width-_1bd.l-_1bd.r,_1c0=dim.height-_1bd.t-_1bd.b;fill.cx=_1bd.l+_1bf*fill.cx/100;fill.cy=_1bd.t+_1c0*fill.cy/100;fill.r=fill.r*Math.sqrt(_1bf*_1bf+_1c0*_1c0)/200;}break;case "pattern":if(_1be==="plot"||_1be==="shapeX"||_1be==="shapeY"){fill=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,fill);fill.space=_1be;if(_1be==="plot"||_1be==="shapeX"){var span=dim.height-_1bd.t-_1bd.b;fill.y=_1bd.t+span*fill.y/100;fill.height=span*fill.height/100;}if(_1be==="plot"||_1be==="shapeY"){var span=dim.width-_1bd.l-_1bd.r;fill.x=_1bd.l+span*fill.x/100;fill.width=span*fill.width/100;}}break;}return fill;},_shapeFill:function(fill,bbox){if(!fill||!fill.space){return fill;}var _1c1=fill.space;switch(fill.type){case "linear":if(_1c1==="shape"||_1c1==="shapeX"||_1c1==="shapeY"){fill=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,fill);fill.space=_1c1;if(_1c1==="shape"||_1c1==="shapeX"){var span=bbox.width;fill.x1=bbox.x+span*fill.x1/100;fill.x2=bbox.x+span*fill.x2/100;}if(_1c1==="shape"||_1c1==="shapeY"){var span=bbox.height;fill.y1=bbox.y+span*fill.y1/100;fill.y2=bbox.y+span*fill.y2/100;}}break;case "radial":if(_1c1==="shape"){fill=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,fill);fill.space=_1c1;fill.cx=bbox.x+bbox.width/2;fill.cy=bbox.y+bbox.height/2;fill.r=fill.r*bbox.width/200;}break;case "pattern":if(_1c1==="shape"||_1c1==="shapeX"||_1c1==="shapeY"){fill=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,fill);fill.space=_1c1;if(_1c1==="shape"||_1c1==="shapeX"){var span=bbox.width;fill.x=bbox.x+span*fill.x/100;fill.width=span*fill.width/100;}if(_1c1==="shape"||_1c1==="shapeY"){var span=bbox.height;fill.y=bbox.y+span*fill.y/100;fill.height=span*fill.height/100;}}break;}return fill;},_pseudoRadialFill:function(fill,_1c2,_1c3,_1c4,end){if(!fill||fill.type!=="radial"||fill.space!=="shape"){return fill;}var _1c5=fill.space;fill=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,fill);fill.space=_1c5;if(arguments.length<4){fill.cx=_1c2.x;fill.cy=_1c2.y;fill.r=fill.r*_1c3/100;return fill;}var _1c6=arguments.length<5?_1c4:(end+_1c4)/2;return {type:"linear",x1:_1c2.x,y1:_1c2.y,x2:_1c2.x+fill.r*_1c3*Math.cos(_1c6)/100,y2:_1c2.y+fill.r*_1c3*Math.sin(_1c6)/100,colors:fill.colors};return fill;}});}if(!dojo._hasResource["dojox.charting.Series"]){dojo._hasResource["dojox.charting.Series"]=true;dojo.provide("dojox.charting.Series");dojo.declare("dojox.charting.Series",dojox.charting.Element,{constructor:function(_1c7,data,_1c8){dojo.mixin(this,_1c8);if(typeof this.plot!="string"){this.plot="default";}this.update(data);},clear:function(){this.dyn={};},update:function(data){if(dojo.isArray(data)){this.data=data;}else{this.source=data;this.data=this.source.data;if(this.source.setSeriesObject){this.source.setSeriesObject(this);}}this.dirty=true;this.clear();}});}if(!dojo._hasResource["dojox.charting.scaler.common"]){dojo._hasResource["dojox.charting.scaler.common"]=true;dojo.provide("dojox.charting.scaler.common");(function(){var eq=function(a,b){return Math.abs(a-b)<=0.000001*(Math.abs(a)+Math.abs(b));};dojo.mixin(dojox.charting.scaler.common,{findString:function(val,text){val=val.toLowerCase();for(var i=0;i<text.length;++i){if(val==text[i]){return true;}}return false;},getNumericLabel:function(_1c9,_1ca,_1cb){var def=_1cb.fixed?_1c9.toFixed(_1ca<0?-_1ca:0):_1c9.toString();if(_1cb.labelFunc){var r=_1cb.labelFunc(def,_1c9,_1ca);if(r){return r;}}if(_1cb.labels){var l=_1cb.labels,lo=0,hi=l.length;while(lo<hi){var mid=Math.floor((lo+hi)/2),val=l[mid].value;if(val<_1c9){lo=mid+1;}else{hi=mid;}}if(lo<l.length&&eq(l[lo].value,_1c9)){return l[lo].text;}--lo;if(lo>=0&&lo<l.length&&eq(l[lo].value,_1c9)){return l[lo].text;}lo+=2;if(lo<l.length&&eq(l[lo].value,_1c9)){return l[lo].text;}}return def;}});})();}if(!dojo._hasResource["dojox.charting.scaler.linear"]){dojo._hasResource["dojox.charting.scaler.linear"]=true;dojo.provide("dojox.charting.scaler.linear");(function(){var _1cc=3,dc=dojox.charting,dcs=dc.scaler,dcsc=dcs.common,_1cd=dcsc.findString,_1ce=dcsc.getNumericLabel;var _1cf=function(min,max,_1d0,_1d1,_1d2,_1d3,span){_1d0=dojo.delegate(_1d0);if(!_1d1){if(_1d0.fixUpper=="major"){_1d0.fixUpper="minor";}if(_1d0.fixLower=="major"){_1d0.fixLower="minor";}}if(!_1d2){if(_1d0.fixUpper=="minor"){_1d0.fixUpper="micro";}if(_1d0.fixLower=="minor"){_1d0.fixLower="micro";}}if(!_1d3){if(_1d0.fixUpper=="micro"){_1d0.fixUpper="none";}if(_1d0.fixLower=="micro"){_1d0.fixLower="none";}}var _1d4=_1cd(_1d0.fixLower,["major"])?Math.floor(_1d0.min/_1d1)*_1d1:_1cd(_1d0.fixLower,["minor"])?Math.floor(_1d0.min/_1d2)*_1d2:_1cd(_1d0.fixLower,["micro"])?Math.floor(_1d0.min/_1d3)*_1d3:_1d0.min,_1d5=_1cd(_1d0.fixUpper,["major"])?Math.ceil(_1d0.max/_1d1)*_1d1:_1cd(_1d0.fixUpper,["minor"])?Math.ceil(_1d0.max/_1d2)*_1d2:_1cd(_1d0.fixUpper,["micro"])?Math.ceil(_1d0.max/_1d3)*_1d3:_1d0.max;if(_1d0.useMin){min=_1d4;}if(_1d0.useMax){max=_1d5;}var _1d6=(!_1d1||_1d0.useMin&&_1cd(_1d0.fixLower,["major"]))?min:Math.ceil(min/_1d1)*_1d1,_1d7=(!_1d2||_1d0.useMin&&_1cd(_1d0.fixLower,["major","minor"]))?min:Math.ceil(min/_1d2)*_1d2,_1d8=(!_1d3||_1d0.useMin&&_1cd(_1d0.fixLower,["major","minor","micro"]))?min:Math.ceil(min/_1d3)*_1d3,_1d9=!_1d1?0:(_1d0.useMax&&_1cd(_1d0.fixUpper,["major"])?Math.round((max-_1d6)/_1d1):Math.floor((max-_1d6)/_1d1))+1,_1da=!_1d2?0:(_1d0.useMax&&_1cd(_1d0.fixUpper,["major","minor"])?Math.round((max-_1d7)/_1d2):Math.floor((max-_1d7)/_1d2))+1,_1db=!_1d3?0:(_1d0.useMax&&_1cd(_1d0.fixUpper,["major","minor","micro"])?Math.round((max-_1d8)/_1d3):Math.floor((max-_1d8)/_1d3))+1,_1dc=_1d2?Math.round(_1d1/_1d2):0,_1dd=_1d3?Math.round(_1d2/_1d3):0,_1de=_1d1?Math.floor(Math.log(_1d1)/Math.LN10):0,_1df=_1d2?Math.floor(Math.log(_1d2)/Math.LN10):0,_1e0=span/(max-min);if(!isFinite(_1e0)){_1e0=1;}return {bounds:{lower:_1d4,upper:_1d5,from:min,to:max,scale:_1e0,span:span},major:{tick:_1d1,start:_1d6,count:_1d9,prec:_1de},minor:{tick:_1d2,start:_1d7,count:_1da,prec:_1df},micro:{tick:_1d3,start:_1d8,count:_1db,prec:0},minorPerMajor:_1dc,microPerMinor:_1dd,scaler:dcs.linear};};dojo.mixin(dojox.charting.scaler.linear,{buildScaler:function(min,max,span,_1e1){var h={fixUpper:"none",fixLower:"none",natural:false};if(_1e1){if("fixUpper" in _1e1){h.fixUpper=String(_1e1.fixUpper);}if("fixLower" in _1e1){h.fixLower=String(_1e1.fixLower);}if("natural" in _1e1){h.natural=Boolean(_1e1.natural);}}if("min" in _1e1){min=_1e1.min;}if("max" in _1e1){max=_1e1.max;}if(_1e1.includeZero){if(min>0){min=0;}if(max<0){max=0;}}h.min=min;h.useMin=true;h.max=max;h.useMax=true;if("from" in _1e1){min=_1e1.from;h.useMin=false;}if("to" in _1e1){max=_1e1.to;h.useMax=false;}if(max<=min){return _1cf(min,max,h,0,0,0,span);}var mag=Math.floor(Math.log(max-min)/Math.LN10),_1e2=_1e1&&("majorTickStep" in _1e1)?_1e1.majorTickStep:Math.pow(10,mag),_1e3=0,_1e4=0,_1e5;if(_1e1&&("minorTickStep" in _1e1)){_1e3=_1e1.minorTickStep;}else{do{_1e3=_1e2/10;if(!h.natural||_1e3>0.9){_1e5=_1cf(min,max,h,_1e2,_1e3,0,span);if(_1e5.bounds.scale*_1e5.minor.tick>_1cc){break;}}_1e3=_1e2/5;if(!h.natural||_1e3>0.9){_1e5=_1cf(min,max,h,_1e2,_1e3,0,span);if(_1e5.bounds.scale*_1e5.minor.tick>_1cc){break;}}_1e3=_1e2/2;if(!h.natural||_1e3>0.9){_1e5=_1cf(min,max,h,_1e2,_1e3,0,span);if(_1e5.bounds.scale*_1e5.minor.tick>_1cc){break;}}return _1cf(min,max,h,_1e2,0,0,span);}while(false);}if(_1e1&&("microTickStep" in _1e1)){_1e4=_1e1.microTickStep;_1e5=_1cf(min,max,h,_1e2,_1e3,_1e4,span);}else{do{_1e4=_1e3/10;if(!h.natural||_1e4>0.9){_1e5=_1cf(min,max,h,_1e2,_1e3,_1e4,span);if(_1e5.bounds.scale*_1e5.micro.tick>_1cc){break;}}_1e4=_1e3/5;if(!h.natural||_1e4>0.9){_1e5=_1cf(min,max,h,_1e2,_1e3,_1e4,span);if(_1e5.bounds.scale*_1e5.micro.tick>_1cc){break;}}_1e4=_1e3/2;if(!h.natural||_1e4>0.9){_1e5=_1cf(min,max,h,_1e2,_1e3,_1e4,span);if(_1e5.bounds.scale*_1e5.micro.tick>_1cc){break;}}_1e4=0;}while(false);}return _1e4?_1e5:_1cf(min,max,h,_1e2,_1e3,0,span);},buildTicks:function(_1e6,_1e7){var step,next,tick,_1e8=_1e6.major.start,_1e9=_1e6.minor.start,_1ea=_1e6.micro.start;if(_1e7.microTicks&&_1e6.micro.tick){step=_1e6.micro.tick,next=_1ea;}else{if(_1e7.minorTicks&&_1e6.minor.tick){step=_1e6.minor.tick,next=_1e9;}else{if(_1e6.major.tick){step=_1e6.major.tick,next=_1e8;}else{return null;}}}var _1eb=1/_1e6.bounds.scale;if(_1e6.bounds.to<=_1e6.bounds.from||isNaN(_1eb)||!isFinite(_1eb)||step<=0||isNaN(step)||!isFinite(step)){return null;}var _1ec=[],_1ed=[],_1ee=[];while(next<=_1e6.bounds.to+_1eb){if(Math.abs(_1e8-next)<step/2){tick={value:_1e8};if(_1e7.majorLabels){tick.label=_1ce(_1e8,_1e6.major.prec,_1e7);}_1ec.push(tick);_1e8+=_1e6.major.tick;_1e9+=_1e6.minor.tick;_1ea+=_1e6.micro.tick;}else{if(Math.abs(_1e9-next)<step/2){if(_1e7.minorTicks){tick={value:_1e9};if(_1e7.minorLabels&&(_1e6.minMinorStep<=_1e6.minor.tick*_1e6.bounds.scale)){tick.label=_1ce(_1e9,_1e6.minor.prec,_1e7);}_1ed.push(tick);}_1e9+=_1e6.minor.tick;_1ea+=_1e6.micro.tick;}else{if(_1e7.microTicks){_1ee.push({value:_1ea});}_1ea+=_1e6.micro.tick;}}next+=step;}return {major:_1ec,minor:_1ed,micro:_1ee};},getTransformerFromModel:function(_1ef){var _1f0=_1ef.bounds.from,_1f1=_1ef.bounds.scale;return function(x){return (x-_1f0)*_1f1;};},getTransformerFromPlot:function(_1f2){var _1f3=_1f2.bounds.from,_1f4=_1f2.bounds.scale;return function(x){return x/_1f4+_1f3;};}});})();}if(!dojo._hasResource["dojox.charting.axis2d.common"]){dojo._hasResource["dojox.charting.axis2d.common"]=true;dojo.provide("dojox.charting.axis2d.common");(function(){var g=dojox.gfx;var _1f5=function(s){s.marginLeft="0px";s.marginTop="0px";s.marginRight="0px";s.marginBottom="0px";s.paddingLeft="0px";s.paddingTop="0px";s.paddingRight="0px";s.paddingBottom="0px";s.borderLeftWidth="0px";s.borderTopWidth="0px";s.borderRightWidth="0px";s.borderBottomWidth="0px";};var _1f6=function(n){if(n["getBoundingClientRect"]){var bcr=n.getBoundingClientRect();return bcr.width||(bcr.right-bcr.left);}else{return dojo.marginBox(n).w;}};dojo.mixin(dojox.charting.axis2d.common,{createText:{gfx:function(_1f7,_1f8,x,y,_1f9,text,font,_1fa){return _1f8.createText({x:x,y:y,text:text,align:_1f9}).setFont(font).setFill(_1fa);},html:function(_1fb,_1fc,x,y,_1fd,text,font,_1fe,_1ff){var p=dojo.doc.createElement("div"),s=p.style,_200;_1f5(s);s.font=font;p.innerHTML=String(text).replace(/\s/g,"&nbsp;");s.color=_1fe;s.position="absolute";s.left="-10000px";dojo.body().appendChild(p);var size=g.normalizedLength(g.splitFontString(font).size);if(!_1ff){_200=_1f6(p);}dojo.body().removeChild(p);s.position="relative";if(_1ff){s.width=_1ff+"px";switch(_1fd){case "middle":s.textAlign="center";s.left=(x-_1ff/2)+"px";break;case "end":s.textAlign="right";s.left=(x-_1ff)+"px";break;default:s.left=x+"px";s.textAlign="left";break;}}else{switch(_1fd){case "middle":s.left=Math.floor(x-_200/2)+"px";break;case "end":s.left=Math.floor(x-_200)+"px";break;default:s.left=Math.floor(x)+"px";break;}}s.top=Math.floor(y-size)+"px";s.whiteSpace="nowrap";var wrap=dojo.doc.createElement("div"),w=wrap.style;_1f5(w);w.width="0px";w.height="0px";wrap.appendChild(p);_1fb.node.insertBefore(wrap,_1fb.node.firstChild);return wrap;}}});})();}if(!dojo._hasResource["dojox.charting.axis2d.Base"]){dojo._hasResource["dojox.charting.axis2d.Base"]=true;dojo.provide("dojox.charting.axis2d.Base");dojo.declare("dojox.charting.axis2d.Base",dojox.charting.Element,{constructor:function(_201,_202){this.vertical=_202&&_202.vertical;},clear:function(){return this;},initialized:function(){return false;},calculate:function(min,max,span){return this;},getScaler:function(){return null;},getTicks:function(){return null;},getOffsets:function(){return {l:0,r:0,t:0,b:0};},render:function(dim,_203){this.dirty=false;return this;}});}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.string.rep=function(str,num){if(num<=0||!str){return "";}var buf=[];for(;;){if(num&1){buf.push(str);}if(!(num>>=1)){break;}str+=str;}return buf.join("");};dojo.string.pad=function(text,size,ch,end){if(!ch){ch="0";}var out=String(text),pad=dojo.string.rep(ch,Math.ceil((size-out.length)/ch.length));return end?out+pad:pad+out;};dojo.string.substitute=function(_204,map,_205,_206){_206=_206||dojo.global;_205=_205?dojo.hitch(_206,_205):function(v){return v;};return _204.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_207,key,_208){var _209=dojo.getObject(key,false,map);if(_208){_209=dojo.getObject(_208,false,_206).call(_206,_209,key);}return _205(_209,key).toString();});};dojo.string.trim=String.prototype.trim?dojo.trim:function(str){str=str.replace(/^\s+/,"");for(var i=str.length-1;i>=0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}return str;};}if(!dojo._hasResource["dojox.charting.axis2d.Invisible"]){dojo._hasResource["dojox.charting.axis2d.Invisible"]=true;dojo.provide("dojox.charting.axis2d.Invisible");(function(){var dc=dojox.charting,df=dojox.lang.functional,du=dojox.lang.utils,g=dojox.gfx,lin=dc.scaler.linear,_20a=du.merge,_20b=4,_20c=45;dojo.declare("dojox.charting.axis2d.Invisible",dojox.charting.axis2d.Base,{defaultParams:{vertical:false,fixUpper:"none",fixLower:"none",natural:false,leftBottom:true,includeZero:false,fixed:true,majorLabels:true,minorTicks:true,minorLabels:true,microTicks:false,rotation:0},optionalParams:{min:0,max:1,from:0,to:1,majorTickStep:4,minorTickStep:2,microTickStep:1,labels:[],labelFunc:null,maxLabelSize:0},constructor:function(_20d,_20e){this.opt=dojo.delegate(this.defaultParams,_20e);du.updateWithPattern(this.opt,_20e,this.optionalParams);},dependOnData:function(){return !("min" in this.opt)||!("max" in this.opt);},clear:function(){delete this.scaler;delete this.ticks;this.dirty=true;return this;},initialized:function(){return "scaler" in this&&!(this.dirty&&this.dependOnData());},setWindow:function(_20f,_210){this.scale=_20f;this.offset=_210;return this.clear();},getWindowScale:function(){return "scale" in this?this.scale:1;},getWindowOffset:function(){return "offset" in this?this.offset:0;},_groupLabelWidth:function(_211,font){if(!_211.length){return 0;}if(dojo.isObject(_211[0])){_211=df.map(_211,function(_212){return _212.text;});}var s=_211.join("<br>");return dojox.gfx._base._getTextBox(s,{font:font}).w||0;},calculate:function(min,max,span,_213){if(this.initialized()){return this;}var o=this.opt;this.labels="labels" in o?o.labels:_213;this.scaler=lin.buildScaler(min,max,span,o);var tsb=this.scaler.bounds;if("scale" in this){o.from=tsb.lower+this.offset;o.to=(tsb.upper-tsb.lower)/this.scale+o.from;if(!isFinite(o.from)||isNaN(o.from)||!isFinite(o.to)||isNaN(o.to)||o.to-o.from>=tsb.upper-tsb.lower){delete o.from;delete o.to;delete this.scale;delete this.offset;}else{if(o.from<tsb.lower){o.to+=tsb.lower-o.from;o.from=tsb.lower;}else{if(o.to>tsb.upper){o.from+=tsb.upper-o.to;o.to=tsb.upper;}}this.offset=o.from-tsb.lower;}this.scaler=lin.buildScaler(min,max,span,o);tsb=this.scaler.bounds;if(this.scale==1&&this.offset==0){delete this.scale;delete this.offset;}}var ta=this.chart.theme.axis,_214=0,_215=o.rotation%360,_216=o.font||(ta.majorTick&&ta.majorTick.font)||(ta.tick&&ta.tick.font),size=_216?g.normalizedLength(g.splitFontString(_216).size):0,cosr=Math.abs(Math.cos(_215*Math.PI/180)),sinr=Math.abs(Math.sin(_215*Math.PI/180));if(_215<0){_215+=360;}if(size){if(this.vertical?_215!=0&&_215!=180:_215!=90&&_215!=270){if(o.maxLabelSize){_214=o.maxLabelSize;}else{if(this.labels){_214=this._groupLabelWidth(this.labels,_216);}else{var _217=Math.ceil(Math.log(Math.max(Math.abs(tsb.from),Math.abs(tsb.to)))/Math.LN10),t=[];if(tsb.from<0||tsb.to<0){t.push("-");}t.push(dojo.string.rep("9",_217));var _218=Math.floor(Math.log(tsb.to-tsb.from)/Math.LN10);if(_218>0){t.push(".");t.push(dojo.string.rep("9",_218));}_214=dojox.gfx._base._getTextBox(t.join(""),{font:_216}).w;}}}else{_214=size;}switch(_215){case 0:case 90:case 180:case 270:break;default:var gap1=Math.sqrt(_214*_214+size*size),gap2=this.vertical?size*cosr+_214*sinr:_214*cosr+size*sinr;_214=Math.min(gap1,gap2);break;}}this.scaler.minMinorStep=_214+_20b;this.ticks=lin.buildTicks(this.scaler,o);return this;},getScaler:function(){return this.scaler;},getTicks:function(){return this.ticks;}});})();}if(!dojo._hasResource["dojox.charting.axis2d.Default"]){dojo._hasResource["dojox.charting.axis2d.Default"]=true;dojo.provide("dojox.charting.axis2d.Default");(function(){var dc=dojox.charting,du=dojox.lang.utils,g=dojox.gfx,lin=dc.scaler.linear,_219=4,_21a=45;dojo.declare("dojox.charting.axis2d.Default",dojox.charting.axis2d.Invisible,{defaultParams:{vertical:false,fixUpper:"none",fixLower:"none",natural:false,leftBottom:true,includeZero:false,fixed:true,majorLabels:true,minorTicks:true,minorLabels:true,microTicks:false,rotation:0,htmlLabels:true},optionalParams:{min:0,max:1,from:0,to:1,majorTickStep:4,minorTickStep:2,microTickStep:1,labels:[],labelFunc:null,maxLabelSize:0,stroke:{},majorTick:{},minorTick:{},microTick:{},tick:{},font:"",fontColor:""},constructor:function(_21b,_21c){this.opt=dojo.delegate(this.defaultParams,_21c);du.updateWithPattern(this.opt,_21c,this.optionalParams);},getOffsets:function(){var s=this.scaler,_21d={l:0,r:0,t:0,b:0};if(!s){return _21d;}var o=this.opt,_21e=0,a,b,c,d,gl=dc.scaler.common.getNumericLabel,_21f=0,ma=s.major,mi=s.minor,ta=this.chart.theme.axis,_220=o.font||(ta.majorTick&&ta.majorTick.font)||(ta.tick&&ta.tick.font),_221=this.chart.theme.getTick("major",o),_222=this.chart.theme.getTick("minor",o),size=_220?g.normalizedLength(g.splitFontString(_220).size):0,_223=o.rotation%360,_224=o.leftBottom,cosr=Math.abs(Math.cos(_223*Math.PI/180)),sinr=Math.abs(Math.sin(_223*Math.PI/180));if(_223<0){_223+=360;}if(size){if(o.maxLabelSize){_21e=o.maxLabelSize;}else{if(this.labels){_21e=this._groupLabelWidth(this.labels,_220);}else{_21e=this._groupLabelWidth([gl(ma.start,ma.prec,o),gl(ma.start+ma.count*ma.tick,ma.prec,o),gl(mi.start,mi.prec,o),gl(mi.start+mi.count*mi.tick,mi.prec,o)],_220);}}if(this.vertical){var side=_224?"l":"r";switch(_223){case 0:case 180:_21d[side]=_21e;_21d.t=_21d.b=size/2;break;case 90:case 270:_21d[side]=size;_21d.t=_21d.b=_21e/2;break;default:if(_223<=_21a||(180<_223&&_223<=(180+_21a))){_21d[side]=size*sinr/2+_21e*cosr;_21d[_224?"t":"b"]=size*cosr/2+_21e*sinr;_21d[_224?"b":"t"]=size*cosr/2;}else{if(_223>(360-_21a)||(180>_223&&_223>(180-_21a))){_21d[side]=size*sinr/2+_21e*cosr;_21d[_224?"b":"t"]=size*cosr/2+_21e*sinr;_21d[_224?"t":"b"]=size*cosr/2;}else{if(_223<90||(180<_223&&_223<270)){_21d[side]=size*sinr+_21e*cosr;_21d[_224?"t":"b"]=size*cosr+_21e*sinr;}else{_21d[side]=size*sinr+_21e*cosr;_21d[_224?"b":"t"]=size*cosr+_21e*sinr;}}}break;}_21d[side]+=_219+Math.max(_221.length,_222.length);}else{var side=_224?"b":"t";switch(_223){case 0:case 180:_21d[side]=size;_21d.l=_21d.r=_21e/2;break;case 90:case 270:_21d[side]=_21e;_21d.l=_21d.r=size/2;break;default:if((90-_21a)<=_223&&_223<=90||(270-_21a)<=_223&&_223<=270){_21d[side]=size*sinr/2+_21e*cosr;_21d[_224?"r":"l"]=size*cosr/2+_21e*sinr;_21d[_224?"l":"r"]=size*cosr/2;}else{if(90<=_223&&_223<=(90+_21a)||270<=_223&&_223<=(270+_21a)){_21d[side]=size*sinr/2+_21e*cosr;_21d[_224?"l":"r"]=size*cosr/2+_21e*sinr;_21d[_224?"r":"l"]=size*cosr/2;}else{if(_223<_21a||(180<_223&&_223<(180-_21a))){_21d[side]=size*sinr+_21e*cosr;_21d[_224?"r":"l"]=size*cosr+_21e*sinr;}else{_21d[side]=size*sinr+_21e*cosr;_21d[_224?"l":"r"]=size*cosr+_21e*sinr;}}}break;}_21d[side]+=_219+Math.max(_221.length,_222.length);}}if(_21e){this._cachedLabelWidth=_21e;}return _21d;},render:function(dim,_225){if(!this.dirty){return this;}var o=this.opt,ta=this.chart.theme.axis,_226=o.leftBottom,_227=o.rotation%360,_228,stop,_229,_22a,_22b,_22c,_22d,_22e=o.font||(ta.majorTick&&ta.majorTick.font)||(ta.tick&&ta.tick.font),_22f=o.fontColor||(ta.majorTick&&ta.majorTick.fontColor)||(ta.tick&&ta.tick.fontColor)||"black",_230=this.chart.theme.getTick("major",o),_231=this.chart.theme.getTick("minor",o),_232=this.chart.theme.getTick("micro",o),_233=Math.max(_230.length,_231.length,_232.length),_234="stroke" in o?o.stroke:ta.stroke,size=_22e?g.normalizedLength(g.splitFontString(_22e).size):0;if(_227<0){_227+=360;}if(this.vertical){_228={y:dim.height-_225.b};stop={y:_225.t};_229={x:0,y:-1};_22c={x:0,y:0};_22a={x:1,y:0};_22b={x:_219,y:0};switch(_227){case 0:_22d="end";_22c.y=size*0.4;break;case 90:_22d="middle";_22c.x=-size;break;case 180:_22d="start";_22c.y=-size*0.4;break;case 270:_22d="middle";break;default:if(_227<_21a){_22d="end";_22c.y=size*0.4;}else{if(_227<90){_22d="end";_22c.y=size*0.4;}else{if(_227<(180-_21a)){_22d="start";}else{if(_227<(180+_21a)){_22d="start";_22c.y=-size*0.4;}else{if(_227<270){_22d="start";_22c.x=_226?0:size*0.4;}else{if(_227<(360-_21a)){_22d="end";_22c.x=_226?0:size*0.4;}else{_22d="end";_22c.y=size*0.4;}}}}}}}if(_226){_228.x=stop.x=_225.l;_22a.x=-1;_22b.x=-_22b.x;}else{_228.x=stop.x=dim.width-_225.r;switch(_22d){case "start":_22d="end";break;case "end":_22d="start";break;case "middle":_22c.x+=size;break;}}}else{_228={x:_225.l};stop={x:dim.width-_225.r};_229={x:1,y:0};_22c={x:0,y:0};_22a={x:0,y:1};_22b={x:0,y:_219};switch(_227){case 0:_22d="middle";_22c.y=size;break;case 90:_22d="start";_22c.x=-size*0.4;break;case 180:_22d="middle";break;case 270:_22d="end";_22c.x=size*0.4;break;default:if(_227<(90-_21a)){_22d="start";_22c.y=_226?size:0;}else{if(_227<(90+_21a)){_22d="start";_22c.x=-size*0.4;}else{if(_227<180){_22d="start";_22c.y=_226?0:-size;}else{if(_227<(270-_21a)){_22d="end";_22c.y=_226?0:-size;}else{if(_227<(270+_21a)){_22d="end";_22c.y=_226?size*0.4:0;}else{_22d="end";_22c.y=_226?size:0;}}}}}}if(_226){_228.y=stop.y=dim.height-_225.b;}else{_228.y=stop.y=_225.t;_22a.y=-1;_22b.y=-_22b.y;switch(_22d){case "start":_22d="end";break;case "end":_22d="start";break;case "middle":_22c.y-=size;break;}}}this.cleanGroup();try{var s=this.group,c=this.scaler,t=this.ticks,_235,f=lin.getTransformerFromModel(this.scaler),_236=(dojox.gfx.renderer=="canvas"),_237=_236||!_227&&this.opt.htmlLabels&&!dojo.isIE&&!dojo.isOpera?"html":"gfx",dx=_22a.x*_230.length,dy=_22a.y*_230.length;s.createLine({x1:_228.x,y1:_228.y,x2:stop.x,y2:stop.y}).setStroke(_234);dojo.forEach(t.major,function(tick){var _238=f(tick.value),elem,x=_228.x+_229.x*_238,y=_228.y+_229.y*_238;s.createLine({x1:x,y1:y,x2:x+dx,y2:y+dy}).setStroke(_230);if(tick.label){elem=dc.axis2d.common.createText[_237](this.chart,s,x+dx+_22b.x+(_227?0:_22c.x),y+dy+_22b.y+(_227?0:_22c.y),_22d,tick.label,_22e,_22f);if(_237=="html"){this.htmlElements.push(elem);}else{if(_227){elem.setTransform([{dx:_22c.x,dy:_22c.y},g.matrix.rotategAt(_227,x+dx+_22b.x,y+dy+_22b.y)]);}}}},this);dx=_22a.x*_231.length;dy=_22a.y*_231.length;_235=c.minMinorStep<=c.minor.tick*c.bounds.scale;dojo.forEach(t.minor,function(tick){var _239=f(tick.value),elem,x=_228.x+_229.x*_239,y=_228.y+_229.y*_239;s.createLine({x1:x,y1:y,x2:x+dx,y2:y+dy}).setStroke(_231);if(_235&&tick.label){elem=dc.axis2d.common.createText[_237](this.chart,s,x+dx+_22b.x+(_227?0:_22c.x),y+dy+_22b.y+(_227?0:_22c.y),_22d,tick.label,_22e,_22f);if(_237=="html"){this.htmlElements.push(elem);}else{if(_227){elem.setTransform([{dx:_22c.x,dy:_22c.y},g.matrix.rotategAt(_227,x+dx+_22b.x,y+dy+_22b.y)]);}}}},this);dx=_22a.x*_232.length;dy=_22a.y*_232.length;dojo.forEach(t.micro,function(tick){var _23a=f(tick.value),elem,x=_228.x+_229.x*_23a,y=_228.y+_229.y*_23a;s.createLine({x1:x,y1:y,x2:x+dx,y2:y+dy}).setStroke(_232);},this);}catch(e){}this.dirty=false;return this;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.common"]){dojo._hasResource["dojox.charting.plot2d.common"]=true;dojo.provide("dojox.charting.plot2d.common");(function(){var df=dojox.lang.functional,dc=dojox.charting.plot2d.common;dojo.mixin(dojox.charting.plot2d.common,{makeStroke:function(_23b){if(!_23b){return _23b;}if(typeof _23b=="string"||_23b instanceof dojo.Color){_23b={color:_23b};}return dojox.gfx.makeParameters(dojox.gfx.defaultStroke,_23b);},augmentColor:function(_23c,_23d){var t=new dojo.Color(_23c),c=new dojo.Color(_23d);c.a=t.a;return c;},augmentStroke:function(_23e,_23f){var s=dc.makeStroke(_23e);if(s){s.color=dc.augmentColor(s.color,_23f);}return s;},augmentFill:function(fill,_240){var fc,c=new dojo.Color(_240);if(typeof fill=="string"||fill instanceof dojo.Color){return dc.augmentColor(fill,_240);}return fill;},defaultStats:{hmin:Number.POSITIVE_INFINITY,hmax:Number.NEGATIVE_INFINITY,vmin:Number.POSITIVE_INFINITY,vmax:Number.NEGATIVE_INFINITY},collectSimpleStats:function(_241){var _242=dojo.delegate(dc.defaultStats);for(var i=0;i<_241.length;++i){var run=_241[i];for(var j=0;j<run.data.length;j++){if(run.data[j]!==null){if(typeof run.data[j]=="number"){var _243=_242.vmin,_244=_242.vmax;if(!("ymin" in run)||!("ymax" in run)){dojo.forEach(run.data,function(val,i){if(val!==null){var x=i+1,y=val;if(isNaN(y)){y=0;}_242.hmin=Math.min(_242.hmin,x);_242.hmax=Math.max(_242.hmax,x);_242.vmin=Math.min(_242.vmin,y);_242.vmax=Math.max(_242.vmax,y);}});}if("ymin" in run){_242.vmin=Math.min(_243,run.ymin);}if("ymax" in run){_242.vmax=Math.max(_244,run.ymax);}}else{var _245=_242.hmin,_246=_242.hmax,_243=_242.vmin,_244=_242.vmax;if(!("xmin" in run)||!("xmax" in run)||!("ymin" in run)||!("ymax" in run)){dojo.forEach(run.data,function(val,i){if(val!==null){var x="x" in val?val.x:i+1,y=val.y;if(isNaN(x)){x=0;}if(isNaN(y)){y=0;}_242.hmin=Math.min(_242.hmin,x);_242.hmax=Math.max(_242.hmax,x);_242.vmin=Math.min(_242.vmin,y);_242.vmax=Math.max(_242.vmax,y);}});}if("xmin" in run){_242.hmin=Math.min(_245,run.xmin);}if("xmax" in run){_242.hmax=Math.max(_246,run.xmax);}if("ymin" in run){_242.vmin=Math.min(_243,run.ymin);}if("ymax" in run){_242.vmax=Math.max(_244,run.ymax);}}break;}}}return _242;},calculateBarSize:function(_247,opt,_248){if(!_248){_248=1;}var gap=opt.gap,size=(_247-2*gap)/_248;if("minBarSize" in opt){size=Math.max(size,opt.minBarSize);}if("maxBarSize" in opt){size=Math.min(size,opt.maxBarSize);}size=Math.max(size,1);gap=(_247-size*_248)/2;return {size:size,gap:gap};},collectStackedStats:function(_249){var _24a=dojo.clone(dc.defaultStats);if(_249.length){_24a.hmin=Math.min(_24a.hmin,1);_24a.hmax=df.foldl(_249,"seed, run -> Math.max(seed, run.data.length)",_24a.hmax);for(var i=0;i<_24a.hmax;++i){var v=_249[0].data[i];if(isNaN(v)){v=0;}_24a.vmin=Math.min(_24a.vmin,v);for(var j=1;j<_249.length;++j){var t=_249[j].data[i];if(isNaN(t)){t=0;}v+=t;}_24a.vmax=Math.max(_24a.vmax,v);}}return _24a;},curve:function(a,_24b){var arr=a.slice(0);if(_24b=="x"){arr[arr.length]=arr[0];}var p=dojo.map(arr,function(item,i){if(i==0){return "M"+item.x+","+item.y;}if(!isNaN(_24b)){var dx=item.x-arr[i-1].x,dy=arr[i-1].y;return "C"+(item.x-(_24b-1)*(dx/_24b))+","+dy+" "+(item.x-(dx/_24b))+","+item.y+" "+item.x+","+item.y;}else{if(_24b=="X"||_24b=="x"||_24b=="S"){var p0,p1=arr[i-1],p2=arr[i],p3;var bz1x,bz1y,bz2x,bz2y;var f=1/6;if(i==1){if(_24b=="x"){p0=arr[arr.length-2];}else{p0=p1;}f=1/3;}else{p0=arr[i-2];}if(i==(arr.length-1)){if(_24b=="x"){p3=arr[1];}else{p3=p2;}f=1/3;}else{p3=arr[i+1];}var p1p2=Math.sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));var p0p2=Math.sqrt((p2.x-p0.x)*(p2.x-p0.x)+(p2.y-p0.y)*(p2.y-p0.y));var p1p3=Math.sqrt((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y));var _24c=p0p2*f;var _24d=p1p3*f;if(_24c>p1p2/2&&_24d>p1p2/2){_24c=p1p2/2;_24d=p1p2/2;}else{if(_24c>p1p2/2){_24c=p1p2/2;_24d=p1p2/2*p1p3/p0p2;}else{if(_24d>p1p2/2){_24d=p1p2/2;_24c=p1p2/2*p0p2/p1p3;}}}if(_24b=="S"){if(p0==p1){_24c=0;}if(p2==p3){_24d=0;}}bz1x=p1.x+_24c*(p2.x-p0.x)/p0p2;bz1y=p1.y+_24c*(p2.y-p0.y)/p0p2;bz2x=p2.x-_24d*(p3.x-p1.x)/p1p3;bz2y=p2.y-_24d*(p3.y-p1.y)/p1p3;}}return "C"+(bz1x+","+bz1y+" "+bz2x+","+bz2y+" "+p2.x+","+p2.y);});return p.join(" ");}});})();}if(!dojo._hasResource["dojox.charting.scaler.primitive"]){dojo._hasResource["dojox.charting.scaler.primitive"]=true;dojo.provide("dojox.charting.scaler.primitive");dojox.charting.scaler.primitive={buildScaler:function(min,max,span,_24e){if(min==max){min-=0.5;max+=0.5;}return {bounds:{lower:min,upper:max,from:min,to:max,scale:span/(max-min),span:span},scaler:dojox.charting.scaler.primitive};},buildTicks:function(_24f,_250){return {major:[],minor:[],micro:[]};},getTransformerFromModel:function(_251){var _252=_251.bounds.from,_253=_251.bounds.scale;return function(x){return (x-_252)*_253;};},getTransformerFromPlot:function(_254){var _255=_254.bounds.from,_256=_254.bounds.scale;return function(x){return x/_256+_255;};}};}if(!dojo._hasResource["dojox.charting.plot2d._PlotEvents"]){dojo._hasResource["dojox.charting.plot2d._PlotEvents"]=true;dojo.provide("dojox.charting.plot2d._PlotEvents");dojo.declare("dojox.charting.plot2d._PlotEvents",null,{constructor:function(){this._shapeEvents=[];this._eventSeries={};},destroy:function(){this.resetEvents();this.inherited(arguments);},plotEvent:function(o){},raiseEvent:function(o){this.plotEvent(o);var t=dojo.delegate(o);t.originalEvent=o.type;t.originalPlot=o.plot;t.type="onindirect";dojo.forEach(this.chart.stack,function(plot){if(plot!==this&&plot.plotEvent){t.plot=plot;plot.plotEvent(t);}},this);},connect:function(_257,_258){this.dirty=true;return dojo.connect(this,"plotEvent",_257,_258);},events:function(){var ls=this.plotEvent._listeners;if(!ls||!ls.length){return false;}for(var i in ls){if(!(i in Array.prototype)){return true;}}return false;},resetEvents:function(){if(this._shapeEvents.length){dojo.forEach(this._shapeEvents,function(item){item.shape.disconnect(item.handle);});this._shapeEvents=[];}this.raiseEvent({type:"onplotreset",plot:this});},_connectSingleEvent:function(o,_259){this._shapeEvents.push({shape:o.eventMask,handle:o.eventMask.connect(_259,this,function(e){o.type=_259;o.event=e;this.raiseEvent(o);o.event=null;})});},_connectEvents:function(o){o.chart=this.chart;o.plot=this;o.hAxis=this.hAxis||null;o.vAxis=this.vAxis||null;o.eventMask=o.eventMask||o.shape;this._connectSingleEvent(o,"onmouseover");this._connectSingleEvent(o,"onmouseout");this._connectSingleEvent(o,"onclick");},_reconnectEvents:function(_25a){var a=this._eventSeries[_25a];if(a){dojo.forEach(a,this._connectEvents,this);}},fireEvent:function(_25b,_25c,_25d,_25e){var s=this._eventSeries[_25b];if(s&&s.length&&_25d<s.length){var o=s[_25d];o.type=_25c;o.event=_25e||null;this.raiseEvent(o);o.event=null;}}});}if(!dojo._hasResource["dojox.charting.plot2d.Base"]){dojo._hasResource["dojox.charting.plot2d.Base"]=true;dojo.provide("dojox.charting.plot2d.Base");dojo.declare("dojox.charting.plot2d.Base",[dojox.charting.Element,dojox.charting.plot2d._PlotEvents],{constructor:function(_25f,_260){this.zoom=null,this.zoomQueue=[];this.lastWindow={vscale:1,hscale:1,xoffset:0,yoffset:0};},clear:function(){this.series=[];this._hAxis=null;this._vAxis=null;this.dirty=true;return this;},setAxis:function(axis){if(axis){this[axis.vertical?"_vAxis":"_hAxis"]=axis;}return this;},addSeries:function(run){this.series.push(run);return this;},getSeriesStats:function(){return dojox.charting.plot2d.common.collectSimpleStats(this.series);},calculateAxes:function(dim){this.initializeScalers(dim,this.getSeriesStats());return this;},isDirty:function(){return this.dirty||this._hAxis&&this._hAxis.dirty||this._vAxis&&this._vAxis.dirty;},isDataDirty:function(){return dojo.some(this.series,function(item){return item.dirty;});},performZoom:function(dim,_261){var vs=this._vAxis.scale||1,hs=this._hAxis.scale||1,_262=dim.height-_261.b,_263=this._hScaler.bounds,_264=(_263.from-_263.lower)*_263.scale,_265=this._vScaler.bounds,_266=(_265.from-_265.lower)*_265.scale;rVScale=vs/this.lastWindow.vscale,rHScale=hs/this.lastWindow.hscale,rXOffset=(this.lastWindow.xoffset-_264)/((this.lastWindow.hscale==1)?hs:this.lastWindow.hscale),rYOffset=(_266-this.lastWindow.yoffset)/((this.lastWindow.vscale==1)?vs:this.lastWindow.vscale),shape=this.group,anim=dojox.gfx.fx.animateTransform(dojo.delegate({shape:shape,duration:1200,transform:[{name:"translate",start:[0,0],end:[_261.l*(1-rHScale),_262*(1-rVScale)]},{name:"scale",start:[1,1],end:[rHScale,rVScale]},{name:"original"},{name:"translate",start:[0,0],end:[rXOffset,rYOffset]}]},this.zoom));dojo.mixin(this.lastWindow,{vscale:vs,hscale:hs,xoffset:_264,yoffset:_266});this.zoomQueue.push(anim);dojo.connect(anim,"onEnd",this,function(){this.zoom=null;this.zoomQueue.shift();if(this.zoomQueue.length>0){this.zoomQueue[0].play();}});if(this.zoomQueue.length==1){this.zoomQueue[0].play();}return this;},render:function(dim,_267){return this;},getRequiredColors:function(){return this.series.length;},initializeScalers:function(dim,_268){if(this._hAxis){if(!this._hAxis.initialized()){this._hAxis.calculate(_268.hmin,_268.hmax,dim.width);}this._hScaler=this._hAxis.getScaler();}else{this._hScaler=dojox.charting.scaler.primitive.buildScaler(_268.hmin,_268.hmax,dim.width);}if(this._vAxis){if(!this._vAxis.initialized()){this._vAxis.calculate(_268.vmin,_268.vmax,dim.height);}this._vScaler=this._vAxis.getScaler();}else{this._vScaler=dojox.charting.scaler.primitive.buildScaler(_268.vmin,_268.vmax,dim.height);}return this;}});}if(!dojo._hasResource["dojox.gfx.fx"]){dojo._hasResource["dojox.gfx.fx"]=true;dojo.provide("dojox.gfx.fx");(function(){var d=dojo,g=dojox.gfx,m=g.matrix;var _269=function(_26a,end){this.start=_26a,this.end=end;};d.extend(_269,{getValue:function(r){return (this.end-this.start)*r+this.start;}});var _26b=function(_26c,end,_26d){this.start=_26c,this.end=end;this.units=_26d;};d.extend(_26b,{getValue:function(r){return (this.end-this.start)*r+this.start+this.units;}});var _26e=function(_26f,end){this.start=_26f,this.end=end;this.temp=new dojo.Color();};d.extend(_26e,{getValue:function(r){return d.blendColors(this.start,this.end,r,this.temp);}});var _270=function(_271){this.values=_271;this.length=_271.length;};d.extend(_270,{getValue:function(r){return this.values[Math.min(Math.floor(r*this.length),this.length-1)];}});var _272=function(_273,def){this.values=_273;this.def=def?def:{};};d.extend(_272,{getValue:function(r){var ret=dojo.clone(this.def);for(var i in this.values){ret[i]=this.values[i].getValue(r);}return ret;}});var _274=function(_275,_276){this.stack=_275;this.original=_276;};d.extend(_274,{getValue:function(r){var ret=[];dojo.forEach(this.stack,function(t){if(t instanceof m.Matrix2D){ret.push(t);return;}if(t.name=="original"&&this.original){ret.push(this.original);return;}if(!(t.name in m)){return;}var f=m[t.name];if(typeof f!="function"){ret.push(f);return;}var val=dojo.map(t.start,function(v,i){return (t.end[i]-v)*r+v;}),_277=f.apply(m,val);if(_277 instanceof m.Matrix2D){ret.push(_277);}},this);return ret;}});var _278=new d.Color(0,0,0,0);var _279=function(prop,obj,name,def){if(prop.values){return new _270(prop.values);}var _27a,_27b,end;if(prop.start){_27b=g.normalizeColor(prop.start);}else{_27b=_27a=obj?(name?obj[name]:obj):def;}if(prop.end){end=g.normalizeColor(prop.end);}else{if(!_27a){_27a=obj?(name?obj[name]:obj):def;}end=_27a;}return new _26e(_27b,end);};var _27c=function(prop,obj,name,def){if(prop.values){return new _270(prop.values);}var _27d,_27e,end;if(prop.start){_27e=prop.start;}else{_27e=_27d=obj?obj[name]:def;}if(prop.end){end=prop.end;}else{if(typeof _27d!="number"){_27d=obj?obj[name]:def;}end=_27d;}return new _269(_27e,end);};g.fx.animateStroke=function(args){if(!args.easing){args.easing=d._defaultEasing;}var anim=new d.Animation(args),_27f=args.shape,_280;d.connect(anim,"beforeBegin",anim,function(){_280=_27f.getStroke();var prop=args.color,_281={},_282,_283,end;if(prop){_281.color=_279(prop,_280,"color",_278);}prop=args.style;if(prop&&prop.values){_281.style=new _270(prop.values);}prop=args.width;if(prop){_281.width=_27c(prop,_280,"width",1);}prop=args.cap;if(prop&&prop.values){_281.cap=new _270(prop.values);}prop=args.join;if(prop){if(prop.values){_281.join=new _270(prop.values);}else{_283=prop.start?prop.start:(_280&&_280.join||0);end=prop.end?prop.end:(_280&&_280.join||0);if(typeof _283=="number"&&typeof end=="number"){_281.join=new _269(_283,end);}}}this.curve=new _272(_281,_280);});d.connect(anim,"onAnimate",_27f,"setStroke");return anim;};g.fx.animateFill=function(args){if(!args.easing){args.easing=d._defaultEasing;}var anim=new d.Animation(args),_284=args.shape,fill;d.connect(anim,"beforeBegin",anim,function(){fill=_284.getFill();var prop=args.color,_285={};if(prop){this.curve=_279(prop,fill,"",_278);}});d.connect(anim,"onAnimate",_284,"setFill");return anim;};g.fx.animateFont=function(args){if(!args.easing){args.easing=d._defaultEasing;}var anim=new d.Animation(args),_286=args.shape,font;d.connect(anim,"beforeBegin",anim,function(){font=_286.getFont();var prop=args.style,_287={},_288,_289,end;if(prop&&prop.values){_287.style=new _270(prop.values);}prop=args.variant;if(prop&&prop.values){_287.variant=new _270(prop.values);}prop=args.weight;if(prop&&prop.values){_287.weight=new _270(prop.values);}prop=args.family;if(prop&&prop.values){_287.family=new _270(prop.values);}prop=args.size;if(prop&&prop.units){_289=parseFloat(prop.start?prop.start:(_286.font&&_286.font.size||"0"));end=parseFloat(prop.end?prop.end:(_286.font&&_286.font.size||"0"));_287.size=new _26b(_289,end,prop.units);}this.curve=new _272(_287,font);});d.connect(anim,"onAnimate",_286,"setFont");return anim;};g.fx.animateTransform=function(args){if(!args.easing){args.easing=d._defaultEasing;}var anim=new d.Animation(args),_28a=args.shape,_28b;d.connect(anim,"beforeBegin",anim,function(){_28b=_28a.getTransform();this.curve=new _274(args.transform,_28b);});d.connect(anim,"onAnimate",_28a,"setTransform");return anim;};})();}if(!dojo._hasResource["dojox.charting.plot2d.Default"]){dojo._hasResource["dojox.charting.plot2d.Default"]=true;dojo.provide("dojox.charting.plot2d.Default");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_28c=df.lambda("item.purgeGroup()");var _28d=1200;dojo.declare("dojox.charting.plot2d.Default",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",lines:true,areas:false,markers:false,tension:"",animate:false},optionalParams:{stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:"",markerStroke:{},markerOutline:{},markerShadow:{},markerFill:{},markerFont:"",markerFontColor:""},constructor:function(_28e,_28f){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_28f);this.series=[];this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.animate=this.opt.animate;},render:function(dim,_290){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_290);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_28c);this._eventSeries={};this.cleanGroup();this.group.setTransform(null);var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,_291,_292,_293,_294=this.events();for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();if(!run.data.length){run.dirty=false;t.skip();continue;}var _295=t.next(this.opt.areas?"area":"line",[this.opt,run],true),s=run.group,_296=[],_297=[],rseg=null,_298,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_299=this._eventSeries[run.name]=new Array(run.data.length);for(var j=0;j<run.data.length;j++){if(run.data[j]!=null){if(!rseg){rseg=[];_297.push(j);_296.push(rseg);}rseg.push(run.data[j]);}else{rseg=null;}}for(var seg=0;seg<_296.length;seg++){if(typeof _296[seg][0]=="number"){_298=dojo.map(_296[seg],function(v,i){return {x:ht(i+_297[seg]+1)+_290.l,y:dim.height-_290.b-vt(v)};},this);}else{_298=dojo.map(_296[seg],function(v,i){return {x:ht(v.x)+_290.l,y:dim.height-_290.b-vt(v.y)};},this);}var _29a=this.opt.tension?dc.curve(_298,this.opt.tension):"";if(this.opt.areas&&_298.length>1){var fill=_295.series.fill;var _29b=dojo.clone(_298);if(this.opt.tension){var _29c="L"+_29b[_29b.length-1].x+","+(dim.height-_290.b)+" L"+_29b[0].x+","+(dim.height-_290.b)+" L"+_29b[0].x+","+_29b[0].y;run.dyn.fill=s.createPath(_29a+" "+_29c).setFill(fill).getFill();}else{_29b.push({x:_298[_298.length-1].x,y:dim.height-_290.b});_29b.push({x:_298[0].x,y:dim.height-_290.b});_29b.push(_298[0]);run.dyn.fill=s.createPolyline(_29b).setFill(fill).getFill();}}if(this.opt.lines||this.opt.markers){_291=_295.series.stroke;if(_295.series.outline){_292=run.dyn.outline=dc.makeStroke(_295.series.outline);_292.width=2*_292.width+_291.width;}}if(this.opt.markers){run.dyn.marker=_295.symbol;}var _29d=null,_29e=null,_29f=null;if(_291&&_295.series.shadow&&_298.length>1){var _2a0=_295.series.shadow,_2a1=dojo.map(_298,function(c){return {x:c.x+_2a0.dx,y:c.y+_2a0.dy};});if(this.opt.lines){if(this.opt.tension){run.dyn.shadow=s.createPath(dc.curve(_2a1,this.opt.tension)).setStroke(_2a0).getStroke();}else{run.dyn.shadow=s.createPolyline(_2a1).setStroke(_2a0).getStroke();}}if(this.opt.markers&&_295.marker.shadow){_2a0=_295.marker.shadow;_29f=dojo.map(_2a1,function(c){return s.createPath("M"+c.x+" "+c.y+" "+_295.symbol).setStroke(_2a0).setFill(_2a0.color);},this);}}if(this.opt.lines&&_298.length>1){if(_292){if(this.opt.tension){run.dyn.outline=s.createPath(_29a).setStroke(_292).getStroke();}else{run.dyn.outline=s.createPolyline(_298).setStroke(_292).getStroke();}}if(this.opt.tension){run.dyn.stroke=s.createPath(_29a).setStroke(_291).getStroke();}else{run.dyn.stroke=s.createPolyline(_298).setStroke(_291).getStroke();}}if(this.opt.markers){_29d=new Array(_298.length);_29e=new Array(_298.length);_292=null;if(_295.marker.outline){_292=dc.makeStroke(_295.marker.outline);_292.width=2*_292.width+(_295.marker.stroke?_295.marker.stroke.width:0);}dojo.forEach(_298,function(c,i){var path="M"+c.x+" "+c.y+" "+_295.symbol;if(_292){_29e[i]=s.createPath(path).setStroke(_292);}_29d[i]=s.createPath(path).setStroke(_295.marker.stroke).setFill(_295.marker.fill);},this);if(_294){dojo.forEach(_29d,function(s,i){var o={element:"marker",index:i+_297[seg],run:run,shape:s,outline:_29e[i]||null,shadow:_29f&&_29f[i]||null,cx:_298[i].x,cy:_298[i].y};if(typeof _296[seg][0]=="number"){o.x=i+_297[seg]+1;o.y=_296[seg][i];}else{o.x=_296[seg][i].x;o.y=_296[seg][i].y;}this._connectEvents(o);_299[i+_297[seg]]=o;},this);}else{delete this._eventSeries[run.name];}}}run.dirty=false;}if(this.animate){var _2a2=this.group;dojox.gfx.fx.animateTransform(dojo.delegate({shape:_2a2,duration:_28d,transform:[{name:"translate",start:[0,dim.height-_290.b],end:[0,0]},{name:"scale",start:[1,0],end:[1,1]},{name:"original"}]},this.animate)).play();}this.dirty=false;return this;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.Lines"]){dojo._hasResource["dojox.charting.plot2d.Lines"]=true;dojo.provide("dojox.charting.plot2d.Lines");dojo.declare("dojox.charting.plot2d.Lines",dojox.charting.plot2d.Default,{constructor:function(){this.opt.lines=true;}});}if(!dojo._hasResource["dojox.charting.plot2d.Areas"]){dojo._hasResource["dojox.charting.plot2d.Areas"]=true;dojo.provide("dojox.charting.plot2d.Areas");dojo.declare("dojox.charting.plot2d.Areas",dojox.charting.plot2d.Default,{constructor:function(){this.opt.lines=true;this.opt.areas=true;}});}if(!dojo._hasResource["dojox.charting.plot2d.Markers"]){dojo._hasResource["dojox.charting.plot2d.Markers"]=true;dojo.provide("dojox.charting.plot2d.Markers");dojo.declare("dojox.charting.plot2d.Markers",dojox.charting.plot2d.Default,{constructor:function(){this.opt.markers=true;}});}if(!dojo._hasResource["dojox.charting.plot2d.MarkersOnly"]){dojo._hasResource["dojox.charting.plot2d.MarkersOnly"]=true;dojo.provide("dojox.charting.plot2d.MarkersOnly");dojo.declare("dojox.charting.plot2d.MarkersOnly",dojox.charting.plot2d.Default,{constructor:function(){this.opt.lines=false;this.opt.markers=true;}});}if(!dojo._hasResource["dojox.charting.plot2d.Scatter"]){dojo._hasResource["dojox.charting.plot2d.Scatter"]=true;dojo.provide("dojox.charting.plot2d.Scatter");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_2a3=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.Scatter",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",shadows:null,animate:null},optionalParams:{markerStroke:{},markerOutline:{},markerShadow:{},markerFill:{},markerFont:"",markerFontColor:""},constructor:function(_2a4,_2a5){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_2a5);this.series=[];this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.animate=this.opt.animate;},render:function(dim,_2a6){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_2a6);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_2a3);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,_2a7=this.events();for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();if(!run.data.length){run.dirty=false;t.skip();continue;}var _2a8=t.next("marker",[this.opt,run]),s=run.group,_2a9,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler);if(typeof run.data[0]=="number"){_2a9=dojo.map(run.data,function(v,i){return {x:ht(i+1)+_2a6.l,y:dim.height-_2a6.b-vt(v)};},this);}else{_2a9=dojo.map(run.data,function(v,i){return {x:ht(v.x)+_2a6.l,y:dim.height-_2a6.b-vt(v.y)};},this);}var _2aa=new Array(_2a9.length),_2ab=new Array(_2a9.length),_2ac=new Array(_2a9.length);dojo.forEach(_2a9,function(c,i){var _2ad=typeof run.data[i]=="number"?t.post(_2a8,"marker"):t.addMixin(_2a8,"marker",run.data[i],true),path="M"+c.x+" "+c.y+" "+_2ad.symbol;if(_2ad.marker.shadow){_2aa[i]=s.createPath("M"+(c.x+_2ad.marker.shadow.dx)+" "+(c.y+_2ad.marker.shadow.dy)+" "+_2ad.symbol).setStroke(_2ad.marker.shadow).setFill(_2ad.marker.shadow.color);if(this.animate){this._animateScatter(_2aa[i],dim.height-_2a6.b);}}if(_2ad.marker.outline){var _2ae=dc.makeStroke(_2ad.marker.outline);_2ae.width=2*_2ae.width+_2ad.marker.stroke.width;_2ac[i]=s.createPath(path).setStroke(_2ae);if(this.animate){this._animateScatter(_2ac[i],dim.height-_2a6.b);}}var _2af=dc.makeStroke(_2ad.marker.stroke),fill=this._plotFill(_2ad.marker.fill,dim,_2a6);if(fill&&(fill.type==="linear"||fill.type=="radial")){var _2b0=dojox.gfx.gradutils.getColor(fill,{x:c.x,y:c.y});if(_2af){_2af.color=_2b0;}_2ab[i]=s.createPath(path).setStroke(_2af).setFill(_2b0);}else{_2ab[i]=s.createPath(path).setStroke(_2af).setFill(fill);}if(this.animate){this._animateScatter(_2ab[i],dim.height-_2a6.b);}},this);if(_2ab.length){run.dyn.stroke=_2ab[_2ab.length-1].getStroke();run.dyn.fill=_2ab[_2ab.length-1].getFill();}if(_2a7){var _2b1=new Array(_2ab.length);dojo.forEach(_2ab,function(s,i){var o={element:"marker",index:i,run:run,shape:s,outline:_2ac&&_2ac[i]||null,shadow:_2aa&&_2aa[i]||null,cx:_2a9[i].x,cy:_2a9[i].y};if(typeof run.data[0]=="number"){o.x=i+1;o.y=run.data[i];}else{o.x=run.data[i].x;o.y=run.data[i].y;}this._connectEvents(o);_2b1[i]=o;},this);this._eventSeries[run.name]=_2b1;}else{delete this._eventSeries[run.name];}run.dirty=false;}this.dirty=false;return this;},_animateScatter:function(_2b2,_2b3){dojox.gfx.fx.animateTransform(dojo.delegate({shape:_2b2,duration:1200,transform:[{name:"translate",start:[0,_2b3],end:[0,0]},{name:"scale",start:[0,0],end:[1,1]},{name:"original"}]},this.animate)).play();}});})();}if(!dojo._hasResource["dojox.lang.functional.sequence"]){dojo._hasResource["dojox.lang.functional.sequence"]=true;dojo.provide("dojox.lang.functional.sequence");(function(){var d=dojo,df=dojox.lang.functional;d.mixin(df,{repeat:function(n,f,z,o){o=o||d.global;f=df.lambda(f);var t=new Array(n),i=1;t[0]=z;for(;i<n;t[i]=z=f.call(o,z),++i){}return t;},until:function(pr,f,z,o){o=o||d.global;f=df.lambda(f);pr=df.lambda(pr);var t=[];for(;!pr.call(o,z);t.push(z),z=f.call(o,z)){}return t;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.Stacked"]){dojo._hasResource["dojox.charting.plot2d.Stacked"]=true;dojo.provide("dojox.charting.plot2d.Stacked");(function(){var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_2b4=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.Stacked",dojox.charting.plot2d.Default,{getSeriesStats:function(){var _2b5=dc.collectStackedStats(this.series);this._maxRunLength=_2b5.hmax;return _2b5;},render:function(dim,_2b6){if(this._maxRunLength<=0){return this;}var acc=df.repeat(this._maxRunLength,"-> 0",0);for(var i=0;i<this.series.length;++i){var run=this.series[i];for(var j=0;j<run.data.length;++j){var v=run.data[j];if(v!==null){if(isNaN(v)){v=0;}acc[j]+=v;}}}if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_2b6);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_2b4);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,_2b7=this.events(),ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler);for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _2b8=t.next(this.opt.areas?"area":"line",[this.opt,run],true),s=run.group,_2b9,_2ba=dojo.map(acc,function(v,i){return {x:ht(i+1)+_2b6.l,y:dim.height-_2b6.b-vt(v)};},this);var _2bb=this.opt.tension?dc.curve(_2ba,this.opt.tension):"";if(this.opt.areas){var _2bc=dojo.clone(_2ba);if(this.opt.tension){var p=dc.curve(_2bc,this.opt.tension);p+=" L"+_2ba[_2ba.length-1].x+","+(dim.height-_2b6.b)+" L"+_2ba[0].x+","+(dim.height-_2b6.b)+" L"+_2ba[0].x+","+_2ba[0].y;run.dyn.fill=s.createPath(p).setFill(_2b8.series.fill).getFill();}else{_2bc.push({x:_2ba[_2ba.length-1].x,y:dim.height-_2b6.b});_2bc.push({x:_2ba[0].x,y:dim.height-_2b6.b});_2bc.push(_2ba[0]);run.dyn.fill=s.createPolyline(_2bc).setFill(_2b8.series.fill).getFill();}}if(this.opt.lines||this.opt.markers){if(_2b8.series.outline){_2b9=dc.makeStroke(_2b8.series.outline);_2b9.width=2*_2b9.width+_2b8.series.stroke.width;}}if(this.opt.markers){run.dyn.marker=_2b8.symbol;}var _2bd,_2be,_2bf;if(_2b8.series.shadow&&_2b8.series.stroke){var _2c0=_2b8.series.shadow,_2c1=dojo.map(_2ba,function(c){return {x:c.x+_2c0.dx,y:c.y+_2c0.dy};});if(this.opt.lines){if(this.opt.tension){run.dyn.shadow=s.createPath(dc.curve(_2c1,this.opt.tension)).setStroke(_2c0).getStroke();}else{run.dyn.shadow=s.createPolyline(_2c1).setStroke(_2c0).getStroke();}}if(this.opt.markers){_2c0=_2b8.marker.shadow;_2bf=dojo.map(_2c1,function(c){return s.createPath("M"+c.x+" "+c.y+" "+_2b8.symbol).setStroke(_2c0).setFill(_2c0.color);},this);}}if(this.opt.lines){if(_2b9){if(this.opt.tension){run.dyn.outline=s.createPath(_2bb).setStroke(_2b9).getStroke();}else{run.dyn.outline=s.createPolyline(_2ba).setStroke(_2b9).getStroke();}}if(this.opt.tension){run.dyn.stroke=s.createPath(_2bb).setStroke(_2b8.series.stroke).getStroke();}else{run.dyn.stroke=s.createPolyline(_2ba).setStroke(_2b8.series.stroke).getStroke();}}if(this.opt.markers){_2bd=new Array(_2ba.length);_2be=new Array(_2ba.length);_2b9=null;if(_2b8.marker.outline){_2b9=dc.makeStroke(_2b8.marker.outline);_2b9.width=2*_2b9.width+(_2b8.marker.stroke?_2b8.marker.stroke.width:0);}dojo.forEach(_2ba,function(c,i){var path="M"+c.x+" "+c.y+" "+_2b8.symbol;if(_2b9){_2be[i]=s.createPath(path).setStroke(_2b9);}_2bd[i]=s.createPath(path).setStroke(_2b8.marker.stroke).setFill(_2b8.marker.fill);},this);if(_2b7){var _2c2=new Array(_2bd.length);dojo.forEach(_2bd,function(s,i){var o={element:"marker",index:i,run:run,shape:s,outline:_2be[i]||null,shadow:_2bf&&_2bf[i]||null,cx:_2ba[i].x,cy:_2ba[i].y,x:i+1,y:run.data[i]};this._connectEvents(o);_2c2[i]=o;},this);this._eventSeries[run.name]=_2c2;}else{delete this._eventSeries[run.name];}}run.dirty=false;for(var j=0;j<run.data.length;++j){var v=run.data[j];if(v!==null){if(isNaN(v)){v=0;}acc[j]-=v;}}}this.dirty=false;return this;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.StackedLines"]){dojo._hasResource["dojox.charting.plot2d.StackedLines"]=true;dojo.provide("dojox.charting.plot2d.StackedLines");dojo.declare("dojox.charting.plot2d.StackedLines",dojox.charting.plot2d.Stacked,{constructor:function(){this.opt.lines=true;}});}if(!dojo._hasResource["dojox.charting.plot2d.StackedAreas"]){dojo._hasResource["dojox.charting.plot2d.StackedAreas"]=true;dojo.provide("dojox.charting.plot2d.StackedAreas");dojo.declare("dojox.charting.plot2d.StackedAreas",dojox.charting.plot2d.Stacked,{constructor:function(){this.opt.lines=true;this.opt.areas=true;}});}if(!dojo._hasResource["dojox.charting.plot2d.Columns"]){dojo._hasResource["dojox.charting.plot2d.Columns"]=true;dojo.provide("dojox.charting.plot2d.Columns");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_2c3=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.Columns",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:0,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2c4,_2c5){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_2c5);du.updateWithPattern(this.opt,_2c5,this.optionalParams);this.series=[];this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.animate=this.opt.animate;},getSeriesStats:function(){var _2c6=dc.collectSimpleStats(this.series);_2c6.hmin-=0.5;_2c6.hmax+=0.5;return _2c6;},render:function(dim,_2c7){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_2c7);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_2c3);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_2c8,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_2c9=Math.max(0,this._vScaler.bounds.lower),_2ca=vt(_2c9),_2cb=this.events();f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);gap=f.gap;_2c8=f.size;for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _2cc=t.next("column",[this.opt,run]),s=run.group,_2cd=new Array(run.data.length);for(var j=0;j<run.data.length;++j){var _2ce=run.data[j];if(_2ce!==null){var v=typeof _2ce=="number"?_2ce:_2ce.y,vv=vt(v),_2cf=vv-_2ca,h=Math.abs(_2cf),_2d0=typeof _2ce!="number"?t.addMixin(_2cc,"column",_2ce,true):t.post(_2cc,"column");if(_2c8>=1&&h>=1){var rect={x:_2c7.l+ht(j+0.5)+gap,y:dim.height-_2c7.b-(v>_2c9?vv:_2ca),width:_2c8,height:h};var _2d1=this._plotFill(_2d0.series.fill,dim,_2c7);_2d1=this._shapeFill(_2d1,rect);var _2d2=s.createRect(rect).setFill(_2d1).setStroke(_2d0.series.stroke);run.dyn.fill=_2d2.getFill();run.dyn.stroke=_2d2.getStroke();if(_2cb){var o={element:"column",index:j,run:run,shape:_2d2,x:j+0.5,y:v};this._connectEvents(o);_2cd[j]=o;}if(this.animate){this._animateColumn(_2d2,dim.height-_2c7.b-_2ca,h);}}}}this._eventSeries[run.name]=_2cd;run.dirty=false;}this.dirty=false;return this;},_animateColumn:function(_2d3,_2d4,_2d5){dojox.gfx.fx.animateTransform(dojo.delegate({shape:_2d3,duration:1200,transform:[{name:"translate",start:[0,_2d4-(_2d4/_2d5)],end:[0,0]},{name:"scale",start:[1,1/_2d5],end:[1,1]},{name:"original"}]},this.animate)).play();}});})();}if(!dojo._hasResource["dojox.charting.plot2d.StackedColumns"]){dojo._hasResource["dojox.charting.plot2d.StackedColumns"]=true;dojo.provide("dojox.charting.plot2d.StackedColumns");(function(){var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_2d6=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.StackedColumns",dojox.charting.plot2d.Columns,{getSeriesStats:function(){var _2d7=dc.collectStackedStats(this.series);this._maxRunLength=_2d7.hmax;_2d7.hmin-=0.5;_2d7.hmax+=0.5;return _2d7;},render:function(dim,_2d8){if(this._maxRunLength<=0){return this;}var acc=df.repeat(this._maxRunLength,"-> 0",0);for(var i=0;i<this.series.length;++i){var run=this.series[i];for(var j=0;j<run.data.length;++j){var _2d9=run.data[j];if(_2d9!==null){var v=typeof _2d9=="number"?_2d9:_2d9.y;if(isNaN(v)){v=0;}acc[j]+=v;}}}if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_2d8);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_2d6);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_2da,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_2db=this.events();f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);gap=f.gap;_2da=f.size;for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _2dc=t.next("column",[this.opt,run]),s=run.group,_2dd=new Array(acc.length);for(var j=0;j<acc.length;++j){var _2d9=run.data[j];if(_2d9!==null){var v=acc[j],_2de=vt(v),_2df=typeof _2d9!="number"?t.addMixin(_2dc,"column",_2d9,true):t.post(_2dc,"column");if(_2da>=1&&_2de>=1){var rect={x:_2d8.l+ht(j+0.5)+gap,y:dim.height-_2d8.b-vt(v),width:_2da,height:_2de};var _2e0=this._plotFill(_2df.series.fill,dim,_2d8);_2e0=this._shapeFill(_2e0,rect);var _2e1=s.createRect(rect).setFill(_2e0).setStroke(_2df.series.stroke);run.dyn.fill=_2e1.getFill();run.dyn.stroke=_2e1.getStroke();if(_2db){var o={element:"column",index:j,run:run,shape:_2e1,x:j+0.5,y:v};this._connectEvents(o);_2dd[j]=o;}if(this.animate){this._animateColumn(_2e1,dim.height-_2d8.b,_2de);}}}}this._eventSeries[run.name]=_2dd;run.dirty=false;for(var j=0;j<run.data.length;++j){var _2d9=run.data[j];if(_2d9!==null){var v=typeof _2d9=="number"?_2d9:_2d9.y;if(isNaN(v)){v=0;}acc[j]-=v;}}}this.dirty=false;return this;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"]){dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"]=true;dojo.provide("dojox.charting.plot2d.ClusteredColumns");(function(){var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_2e2=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.ClusteredColumns",dojox.charting.plot2d.Columns,{render:function(dim,_2e3){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_2e3);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_2e2);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_2e4,_2e5,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_2e6=Math.max(0,this._vScaler.bounds.lower),_2e7=vt(_2e6),_2e8=this.events();f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt,this.series.length);gap=f.gap;_2e4=_2e5=f.size;for(var i=0;i<this.series.length;++i){var run=this.series[i],_2e9=_2e5*i;if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _2ea=t.next("column",[this.opt,run]),s=run.group,_2eb=new Array(run.data.length);for(var j=0;j<run.data.length;++j){var _2ec=run.data[j];if(_2ec!==null){var v=typeof _2ec=="number"?_2ec:_2ec.y,vv=vt(v),_2ed=vv-_2e7,h=Math.abs(_2ed),_2ee=typeof _2ec!="number"?t.addMixin(_2ea,"column",_2ec,true):t.post(_2ea,"column");if(_2e4>=1&&h>=1){var rect={x:_2e3.l+ht(j+0.5)+gap+_2e9,y:dim.height-_2e3.b-(v>_2e6?vv:_2e7),width:_2e4,height:h};var _2ef=this._plotFill(_2ee.series.fill,dim,_2e3);_2ef=this._shapeFill(_2ef,rect);var _2f0=s.createRect(rect).setFill(_2ef).setStroke(_2ee.series.stroke);run.dyn.fill=_2f0.getFill();run.dyn.stroke=_2f0.getStroke();if(_2e8){var o={element:"column",index:j,run:run,shape:_2f0,x:j+0.5,y:v};this._connectEvents(o);_2eb[j]=o;}if(this.animate){this._animateColumn(_2f0,dim.height-_2e3.b-_2e7,h);}}}}this._eventSeries[run.name]=_2eb;run.dirty=false;}this.dirty=false;return this;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.Bars"]){dojo._hasResource["dojox.charting.plot2d.Bars"]=true;dojo.provide("dojox.charting.plot2d.Bars");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_2f1=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.Bars",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:0,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2f2,_2f3){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_2f3);du.updateWithPattern(this.opt,_2f3,this.optionalParams);this.series=[];this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.animate=this.opt.animate;},getSeriesStats:function(){var _2f4=dc.collectSimpleStats(this.series),t;_2f4.hmin-=0.5;_2f4.hmax+=0.5;t=_2f4.hmin,_2f4.hmin=_2f4.vmin,_2f4.vmin=t;t=_2f4.hmax,_2f4.hmax=_2f4.vmax,_2f4.vmax=t;return _2f4;},render:function(dim,_2f5){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_2f5);}this.dirty=this.isDirty();this.resetEvents();if(this.dirty){dojo.forEach(this.series,_2f1);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_2f6,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_2f7=Math.max(0,this._hScaler.bounds.lower),_2f8=ht(_2f7),_2f9=this.events();f=dc.calculateBarSize(this._vScaler.bounds.scale,this.opt);gap=f.gap;_2f6=f.size;for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _2fa=t.next("bar",[this.opt,run]),s=run.group,_2fb=new Array(run.data.length);for(var j=0;j<run.data.length;++j){var _2fc=run.data[j];if(_2fc!==null){var v=typeof _2fc=="number"?_2fc:_2fc.y,hv=ht(v),_2fd=hv-_2f8,w=Math.abs(_2fd),_2fe=typeof _2fc!="number"?t.addMixin(_2fa,"bar",_2fc,true):t.post(_2fa,"bar");if(w>=1&&_2f6>=1){var rect={x:_2f5.l+(v<_2f7?hv:_2f8),y:dim.height-_2f5.b-vt(j+1.5)+gap,width:w,height:_2f6};var _2ff=this._plotFill(_2fe.series.fill,dim,_2f5);_2ff=this._shapeFill(_2ff,rect);var _300=s.createRect(rect).setFill(_2ff).setStroke(_2fe.series.stroke);run.dyn.fill=_300.getFill();run.dyn.stroke=_300.getStroke();if(_2f9){var o={element:"bar",index:j,run:run,shape:_300,x:v,y:j+1.5};this._connectEvents(o);_2fb[j]=o;}if(this.animate){this._animateBar(_300,_2f5.l+_2f8,-w);}}}}this._eventSeries[run.name]=_2fb;run.dirty=false;}this.dirty=false;return this;},_animateBar:function(_301,_302,_303){dojox.gfx.fx.animateTransform(dojo.delegate({shape:_301,duration:1200,transform:[{name:"translate",start:[_302-(_302/_303),0],end:[0,0]},{name:"scale",start:[1/_303,1],end:[1,1]},{name:"original"}]},this.animate)).play();}});})();}if(!dojo._hasResource["dojox.charting.plot2d.StackedBars"]){dojo._hasResource["dojox.charting.plot2d.StackedBars"]=true;dojo.provide("dojox.charting.plot2d.StackedBars");(function(){var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_304=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.StackedBars",dojox.charting.plot2d.Bars,{getSeriesStats:function(){var _305=dc.collectStackedStats(this.series),t;this._maxRunLength=_305.hmax;_305.hmin-=0.5;_305.hmax+=0.5;t=_305.hmin,_305.hmin=_305.vmin,_305.vmin=t;t=_305.hmax,_305.hmax=_305.vmax,_305.vmax=t;return _305;},render:function(dim,_306){if(this._maxRunLength<=0){return this;}var acc=df.repeat(this._maxRunLength,"-> 0",0);for(var i=0;i<this.series.length;++i){var run=this.series[i];for(var j=0;j<run.data.length;++j){var _307=run.data[j];if(_307!==null){var v=typeof _307=="number"?_307:_307.y;if(isNaN(v)){v=0;}acc[j]+=v;}}}if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_306);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_304);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_308,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_309=this.events();f=dc.calculateBarSize(this._vScaler.bounds.scale,this.opt);gap=f.gap;_308=f.size;for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _30a=t.next("bar",[this.opt,run]),s=run.group,_30b=new Array(acc.length);for(var j=0;j<acc.length;++j){var _307=run.data[j];if(_307!==null){var v=acc[j],_30c=ht(v),_30d=typeof _307!="number"?t.addMixin(_30a,"bar",_307,true):t.post(_30a,"bar");if(_30c>=1&&_308>=1){var rect={x:_306.l,y:dim.height-_306.b-vt(j+1.5)+gap,width:_30c,height:_308};var _30e=this._plotFill(_30d.series.fill,dim,_306);_30e=this._shapeFill(_30e,rect);var _30f=s.createRect(rect).setFill(_30e).setStroke(_30d.series.stroke);run.dyn.fill=_30f.getFill();run.dyn.stroke=_30f.getStroke();if(_309){var o={element:"bar",index:j,run:run,shape:_30f,x:v,y:j+1.5};this._connectEvents(o);_30b[j]=o;}if(this.animate){this._animateBar(_30f,_306.l,-_30c);}}}}this._eventSeries[run.name]=_30b;run.dirty=false;for(var j=0;j<run.data.length;++j){var _307=run.data[j];if(_307!==null){var v=typeof _307=="number"?_307:_307.y;if(isNaN(v)){v=0;}acc[j]-=v;}}}this.dirty=false;return this;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.ClusteredBars"]){dojo._hasResource["dojox.charting.plot2d.ClusteredBars"]=true;dojo.provide("dojox.charting.plot2d.ClusteredBars");(function(){var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_310=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.ClusteredBars",dojox.charting.plot2d.Bars,{render:function(dim,_311){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_311);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_310);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_312,_313,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_314=Math.max(0,this._hScaler.bounds.lower),_315=ht(_314),_316=this.events();f=dc.calculateBarSize(this._vScaler.bounds.scale,this.opt,this.series.length);gap=f.gap;_312=_313=f.size;for(var i=this.series.length-1;i>=0;--i){var run=this.series[i],_317=_313*(this.series.length-i-1);if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _318=t.next("bar",[this.opt,run]),s=run.group,_319=new Array(run.data.length);for(var j=0;j<run.data.length;++j){var _31a=run.data[j];if(_31a!==null){var v=typeof _31a=="number"?_31a:_31a.y,hv=ht(v),_31b=hv-_315,w=Math.abs(_31b),_31c=typeof _31a!="number"?t.addMixin(_318,"bar",_31a,true):t.post(_318,"bar");if(w>=1&&_312>=1){var rect={x:_311.l+(v<_314?hv:_315),y:dim.height-_311.b-vt(j+1.5)+gap+_317,width:w,height:_312};var _31d=this._plotFill(_31c.series.fill,dim,_311);_31d=this._shapeFill(_31d,rect);var _31e=s.createRect(rect).setFill(_31d).setStroke(_31c.series.stroke);run.dyn.fill=_31e.getFill();run.dyn.stroke=_31e.getStroke();if(_316){var o={element:"bar",index:j,run:run,shape:_31e,x:v,y:j+1.5};this._connectEvents(o);_319[j]=o;}if(this.animate){this._animateBar(_31e,_311.l+_315,-_31b);}}}}this._eventSeries[run.name]=_319;run.dirty=false;}this.dirty=false;return this;}});})();}if(!dojo._hasResource["dojox.charting.plot2d.Grid"]){dojo._hasResource["dojox.charting.plot2d.Grid"]=true;dojo.provide("dojox.charting.plot2d.Grid");(function(){var du=dojox.lang.utils,dc=dojox.charting.plot2d.common;dojo.declare("dojox.charting.plot2d.Grid",dojox.charting.Element,{defaultParams:{hAxis:"x",vAxis:"y",hMajorLines:true,hMinorLines:false,vMajorLines:true,vMinorLines:false,hStripes:"none",vStripes:"none",animate:null},optionalParams:{},constructor:function(_31f,_320){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_320);this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.dirty=true;this.animate=this.opt.animate;this.zoom=null,this.zoomQueue=[];this.lastWindow={vscale:1,hscale:1,xoffset:0,yoffset:0};},clear:function(){this._hAxis=null;this._vAxis=null;this.dirty=true;return this;},setAxis:function(axis){if(axis){this[axis.vertical?"_vAxis":"_hAxis"]=axis;}return this;},addSeries:function(run){return this;},getSeriesStats:function(){return dojo.delegate(dc.defaultStats);},initializeScalers:function(){return this;},isDirty:function(){return this.dirty||this._hAxis&&this._hAxis.dirty||this._vAxis&&this._vAxis.dirty;},performZoom:function(dim,_321){var vs=this._vAxis.scale||1,hs=this._hAxis.scale||1,_322=dim.height-_321.b,_323=this._hAxis.getScaler().bounds,_324=(_323.from-_323.lower)*_323.scale,_325=this._vAxis.getScaler().bounds,_326=(_325.from-_325.lower)*_325.scale;rVScale=vs/this.lastWindow.vscale,rHScale=hs/this.lastWindow.hscale,rXOffset=(this.lastWindow.xoffset-_324)/((this.lastWindow.hscale==1)?hs:this.lastWindow.hscale),rYOffset=(_326-this.lastWindow.yoffset)/((this.lastWindow.vscale==1)?vs:this.lastWindow.vscale),shape=this.group,anim=dojox.gfx.fx.animateTransform(dojo.delegate({shape:shape,duration:1200,transform:[{name:"translate",start:[0,0],end:[_321.l*(1-rHScale),_322*(1-rVScale)]},{name:"scale",start:[1,1],end:[rHScale,rVScale]},{name:"original"},{name:"translate",start:[0,0],end:[rXOffset,rYOffset]}]},this.zoom));dojo.mixin(this.lastWindow,{vscale:vs,hscale:hs,xoffset:_324,yoffset:_326});this.zoomQueue.push(anim);dojo.connect(anim,"onEnd",this,function(){this.zoom=null;this.zoomQueue.shift();if(this.zoomQueue.length>0){this.zoomQueue[0].play();}});if(this.zoomQueue.length==1){this.zoomQueue[0].play();}return this;},getRequiredColors:function(){return 0;},render:function(dim,_327){if(this.zoom){return this.performZoom(dim,_327);}this.dirty=this.isDirty();if(!this.dirty){return this;}this.cleanGroup();var s=this.group,ta=this.chart.theme.axis;try{var _328=this._vAxis.getScaler(),vt=_328.scaler.getTransformerFromModel(_328),_329=this._vAxis.getTicks();if(this.opt.hMinorLines){dojo.forEach(_329.minor,function(tick){var y=dim.height-_327.b-vt(tick.value);var _32a=s.createLine({x1:_327.l,y1:y,x2:dim.width-_327.r,y2:y}).setStroke(ta.minorTick);if(this.animate){this._animateGrid(_32a,"h",_327.l,_327.r+_327.l-dim.width);}},this);}if(this.opt.hMajorLines){dojo.forEach(_329.major,function(tick){var y=dim.height-_327.b-vt(tick.value);var _32b=s.createLine({x1:_327.l,y1:y,x2:dim.width-_327.r,y2:y}).setStroke(ta.majorTick);if(this.animate){this._animateGrid(_32b,"h",_327.l,_327.r+_327.l-dim.width);}},this);}}catch(e){}try{var _32c=this._hAxis.getScaler(),ht=_32c.scaler.getTransformerFromModel(_32c),_329=this._hAxis.getTicks();if(_329&&this.opt.vMinorLines){dojo.forEach(_329.minor,function(tick){var x=_327.l+ht(tick.value);var _32d=s.createLine({x1:x,y1:_327.t,x2:x,y2:dim.height-_327.b}).setStroke(ta.minorTick);if(this.animate){this._animateGrid(_32d,"v",dim.height-_327.b,dim.height-_327.b-_327.t);}},this);}if(_329&&this.opt.vMajorLines){dojo.forEach(_329.major,function(tick){var x=_327.l+ht(tick.value);var _32e=s.createLine({x1:x,y1:_327.t,x2:x,y2:dim.height-_327.b}).setStroke(ta.majorTick);if(this.animate){this._animateGrid(_32e,"v",dim.height-_327.b,dim.height-_327.b-_327.t);}},this);}}catch(e){}this.dirty=false;return this;},_animateGrid:function(_32f,type,_330,size){var _331=type=="h"?[_330,0]:[0,_330];var _332=type=="h"?[1/size,1]:[1,1/size];dojox.gfx.fx.animateTransform(dojo.delegate({shape:_32f,duration:1200,transform:[{name:"translate",start:_331,end:[0,0]},{name:"scale",start:_332,end:[1,1]},{name:"original"}]},this.animate)).play();}});})();}if(!dojo._hasResource["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_333,_334,_335){_335=dojo.i18n.normalizeLocale(_335);var _336=_335.split("-");var _337=[_333,"nls",_334].join(".");var _338=dojo._loadedModules[_337];if(_338){var _339;for(var i=_336.length;i>0;i--){var loc=_336.slice(0,i).join("_");if(_338[loc]){_339=_338[loc];break;}}if(!_339){_339=_338.ROOT;}if(_339){var _33a=function(){};_33a.prototype=_339;return new _33a();}}throw new Error("Bundle not found: "+_334+" in "+_333+" , locale="+_335);};dojo.i18n.normalizeLocale=function(_33b){var _33c=_33b?_33b.toLowerCase():dojo.locale;if(_33c=="root"){_33c="ROOT";}return _33c;};dojo.i18n._requireLocalization=function(_33d,_33e,_33f,_340){var _341=dojo.i18n.normalizeLocale(_33f);var _342=[_33d,"nls",_33e].join(".");var _343="";if(_340){var _344=_340.split(",");for(var i=0;i<_344.length;i++){if(_341["indexOf"](_344[i])==0){if(_344[i].length>_343.length){_343=_344[i];}}}if(!_343){_343="ROOT";}}var _345=_340?_343:_341;var _346=dojo._loadedModules[_342];var _347=null;if(_346){if(dojo.config.localizationComplete&&_346._built){return;}var _348=_345.replace(/-/g,"_");var _349=_342+"."+_348;_347=dojo._loadedModules[_349];}if(!_347){_346=dojo["provide"](_342);var syms=dojo._getModuleSymbols(_33d);var _34a=syms.concat("nls").join("/");var _34b;dojo.i18n._searchLocalePath(_345,_340,function(loc){var _34c=loc.replace(/-/g,"_");var _34d=_342+"."+_34c;var _34e=false;if(!dojo._loadedModules[_34d]){dojo["provide"](_34d);var _34f=[_34a];if(loc!="ROOT"){_34f.push(loc);}_34f.push(_33e);var _350=_34f.join("/")+".js";_34e=dojo._loadPath(_350,null,function(hash){var _351=function(){};_351.prototype=_34b;_346[_34c]=new _351();for(var j in hash){_346[_34c][j]=hash[j];}});}else{_34e=true;}if(_34e&&_346[_34c]){_34b=_346[_34c];}else{_346[_34c]=_34b;}if(_340){return true;}});}if(_340&&_341!=_343){_346[_341.replace(/-/g,"_")]=_346[_343.replace(/-/g,"_")];}};(function(){var _352=dojo.config.extraLocale;if(_352){if(!_352 instanceof Array){_352=[_352];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_353,_354){req(m,b,_353,_354);if(_353){return;}for(var i=0;i<_352.length;i++){req(m,b,_352[i],_354);}};}})();dojo.i18n._searchLocalePath=function(_355,down,_356){_355=dojo.i18n.normalizeLocale(_355);var _357=_355.split("-");var _358=[];for(var i=_357.length;i>0;i--){_358.push(_357.slice(0,i).join("-"));}_358.push(false);if(down){_358.reverse();}for(var j=_358.length-1;j>=0;j--){var loc=_358[j]||"ROOT";var stop=_356(loc);if(stop){break;}}};dojo.i18n._preloadLocalizations=function(_359,_35a){function _35b(_35c){_35c=dojo.i18n.normalizeLocale(_35c);dojo.i18n._searchLocalePath(_35c,true,function(loc){for(var i=0;i<_35a.length;i++){if(_35a[i]==loc){dojo["require"](_359+"_"+loc);return true;}}return false;});};_35b();var _35d=dojo.config.extraLocale||[];for(var i=0;i<_35d.length;i++){_35b(_35d[i]);}};}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.regexp.escapeString=function(str,_35e){return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){if(_35e&&_35e.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_35f){if(!(arr instanceof Array)){return re(arr);}var b=[];for(var i=0;i<arr.length;i++){b.push(re(arr[i]));}return dojo.regexp.group(b.join("|"),_35f);};dojo.regexp.group=function(_360,_361){return "("+(_361?"?:":"")+_360+")";};}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.number.format=function(_362,_363){_363=dojo.mixin({},_363||{});var _364=dojo.i18n.normalizeLocale(_363.locale),_365=dojo.i18n.getLocalization("dojo.cldr","number",_364);_363.customs=_365;var _366=_363.pattern||_365[(_363.type||"decimal")+"Format"];if(isNaN(_362)||Math.abs(_362)==Infinity){return null;}return dojo.number._applyPattern(_362,_366,_363);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_367,_368,_369){_369=_369||{};var _36a=_369.customs.group,_36b=_369.customs.decimal,_36c=_368.split(";"),_36d=_36c[0];_368=_36c[(_367<0)?1:0]||("-"+_36d);if(_368.indexOf("%")!=-1){_367*=100;}else{if(_368.indexOf("‰")!=-1){_367*=1000;}else{if(_368.indexOf("¤")!=-1){_36a=_369.customs.currencyGroup||_36a;_36b=_369.customs.currencyDecimal||_36b;_368=_368.replace(/\u00a4{1,3}/,function(_36e){var prop=["symbol","currency","displayName"][_36e.length-1];return _369[prop]||_369.currency||"";});}else{if(_368.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _36f=dojo.number._numberPatternRE;var _370=_36d.match(_36f);if(!_370){throw new Error("unable to find a number expression in pattern: "+_368);}if(_369.fractional===false){_369.places=0;}return _368.replace(_36f,dojo.number._formatAbsolute(_367,_370[0],{decimal:_36b,group:_36a,places:_369.places,round:_369.round}));};dojo.number.round=function(_371,_372,_373){var _374=10/(_373||10);return (_374*+_371).toFixed(_372)/_374;};if((0.9).toFixed()==0){(function(){var _375=dojo.number.round;dojo.number.round=function(v,p,m){var d=Math.pow(10,-p||0),a=Math.abs(v);if(!v||a>=d||a*Math.pow(10,p+1)<5){d=0;}return _375(v,p,m)+(v>0?d:-d);};})();}dojo.number._formatAbsolute=function(_376,_377,_378){_378=_378||{};if(_378.places===true){_378.places=0;}if(_378.places===Infinity){_378.places=6;}var _379=_377.split("."),_37a=typeof _378.places=="string"&&_378.places.indexOf(","),_37b=_378.places;if(_37a){_37b=_378.places.substring(_37a+1);}else{if(!(_37b>=0)){_37b=(_379[1]||[]).length;}}if(!(_378.round<0)){_376=dojo.number.round(_376,_37b,_378.round);}var _37c=String(Math.abs(_376)).split("."),_37d=_37c[1]||"";if(_379[1]||_378.places){if(_37a){_378.places=_378.places.substring(0,_37a);}var pad=_378.places!==undefined?_378.places:(_379[1]&&_379[1].lastIndexOf("0")+1);if(pad>_37d.length){_37c[1]=dojo.string.pad(_37d,pad,"0",true);}if(_37b<_37d.length){_37c[1]=_37d.substr(0,_37b);}}else{if(_37c[1]){_37c.pop();}}var _37e=_379[0].replace(",","");pad=_37e.indexOf("0");if(pad!=-1){pad=_37e.length-pad;if(pad>_37c[0].length){_37c[0]=dojo.string.pad(_37c[0],pad);}if(_37e.indexOf("#")==-1){_37c[0]=_37c[0].substr(_37c[0].length-pad);}}var _37f=_379[0].lastIndexOf(","),_380,_381;if(_37f!=-1){_380=_379[0].length-_37f-1;var _382=_379[0].substr(0,_37f);_37f=_382.lastIndexOf(",");if(_37f!=-1){_381=_382.length-_37f-1;}}var _383=[];for(var _384=_37c[0];_384;){var off=_384.length-_380;_383.push((off>0)?_384.substr(off):_384);_384=(off>0)?_384.slice(0,off):"";if(_381){_380=_381;delete _381;}}_37c[0]=_383.reverse().join(_378.group||",");return _37c.join(_378.decimal||".");};dojo.number.regexp=function(_385){return dojo.number._parseInfo(_385).regexp;};dojo.number._parseInfo=function(_386){_386=_386||{};var _387=dojo.i18n.normalizeLocale(_386.locale),_388=dojo.i18n.getLocalization("dojo.cldr","number",_387),_389=_386.pattern||_388[(_386.type||"decimal")+"Format"],_38a=_388.group,_38b=_388.decimal,_38c=1;if(_389.indexOf("%")!=-1){_38c/=100;}else{if(_389.indexOf("‰")!=-1){_38c/=1000;}else{var _38d=_389.indexOf("¤")!=-1;if(_38d){_38a=_388.currencyGroup||_38a;_38b=_388.currencyDecimal||_38b;}}}var _38e=_389.split(";");if(_38e.length==1){_38e.push("-"+_38e[0]);}var re=dojo.regexp.buildGroupRE(_38e,function(_38f){_38f="(?:"+dojo.regexp.escapeString(_38f,".")+")";return _38f.replace(dojo.number._numberPatternRE,function(_390){var _391={signed:false,separator:_386.strict?_38a:[_38a,""],fractional:_386.fractional,decimal:_38b,exponent:false},_392=_390.split("."),_393=_386.places;if(_392.length==1&&_38c!=1){_392[1]="###";}if(_392.length==1||_393===0){_391.fractional=false;}else{if(_393===undefined){_393=_386.pattern?_392[1].lastIndexOf("0")+1:Infinity;}if(_393&&_386.fractional==undefined){_391.fractional=true;}if(!_386.places&&(_393<_392[1].length)){_393+=","+_392[1].length;}_391.places=_393;}var _394=_392[0].split(",");if(_394.length>1){_391.groupSize=_394.pop().length;if(_394.length>1){_391.groupSize2=_394.pop().length;}}return "("+dojo.number._realNumberRegexp(_391)+")";});},true);if(_38d){re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_395,_396,_397,_398){var prop=["symbol","currency","displayName"][_397.length-1],_399=dojo.regexp.escapeString(_386[prop]||_386.currency||"");_396=_396?"[\\s\\xa0]":"";_398=_398?"[\\s\\xa0]":"";if(!_386.strict){if(_396){_396+="*";}if(_398){_398+="*";}return "(?:"+_396+_399+_398+")?";}return _396+_399+_398;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_38a,decimal:_38b,factor:_38c};};dojo.number.parse=function(_39a,_39b){var info=dojo.number._parseInfo(_39b),_39c=(new RegExp("^"+info.regexp+"$")).exec(_39a);if(!_39c){return NaN;}var _39d=_39c[1];if(!_39c[1]){if(!_39c[2]){return NaN;}_39d=_39c[2];info.factor*=-1;}_39d=_39d.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return _39d*info.factor;};dojo.number._realNumberRegexp=function(_39e){_39e=_39e||{};if(!("places" in _39e)){_39e.places=Infinity;}if(typeof _39e.decimal!="string"){_39e.decimal=".";}if(!("fractional" in _39e)||/^0/.test(_39e.places)){_39e.fractional=[true,false];}if(!("exponent" in _39e)){_39e.exponent=[true,false];}if(!("eSigned" in _39e)){_39e.eSigned=[true,false];}var _39f=dojo.number._integerRegexp(_39e),_3a0=dojo.regexp.buildGroupRE(_39e.fractional,function(q){var re="";if(q&&(_39e.places!==0)){re="\\"+_39e.decimal;if(_39e.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_39e.places+"}";}}return re;},true);var _3a1=dojo.regexp.buildGroupRE(_39e.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_39e.eSigned})+")";}return "";});var _3a2=_39f+_3a0;if(_3a0){_3a2="(?:(?:"+_3a2+")|(?:"+_3a0+"))";}return _3a2+_3a1;};dojo.number._integerRegexp=function(_3a3){_3a3=_3a3||{};if(!("signed" in _3a3)){_3a3.signed=[true,false];}if(!("separator" in _3a3)){_3a3.separator="";}else{if(!("groupSize" in _3a3)){_3a3.groupSize=3;}}var _3a4=dojo.regexp.buildGroupRE(_3a3.signed,function(q){return q?"[-+]":"";},true);var _3a5=dojo.regexp.buildGroupRE(_3a3.separator,function(sep){if(!sep){return "(?:\\d+)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_3a3.groupSize,grp2=_3a3.groupSize2;if(grp2){var _3a6="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_3a6+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_3a6;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _3a4+_3a5;};}if(!dojo._hasResource["dojox.charting.plot2d.Pie"]){dojo._hasResource["dojox.charting.plot2d.Pie"]=true;dojo.provide("dojox.charting.plot2d.Pie");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,da=dojox.charting.axis2d.common,g=dojox.gfx,m=g.matrix,_3a7=0.2;dojo.declare("dojox.charting.plot2d.Pie",[dojox.charting.Element,dojox.charting.plot2d._PlotEvents],{defaultParams:{labels:true,ticks:false,fixed:true,precision:1,labelOffset:20,labelStyle:"default",htmlLabels:true,radGrad:"native",fanSize:5,startAngle:0},optionalParams:{radius:0,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_3a8,_3a9){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_3a9);du.updateWithPattern(this.opt,_3a9,this.optionalParams);this.run=null;this.dyn=[];},clear:function(){this.dirty=true;this.dyn=[];this.run=null;return this;},setAxis:function(axis){return this;},addSeries:function(run){this.run=run;return this;},getSeriesStats:function(){return dojo.delegate(dc.defaultStats);},initializeScalers:function(){return this;},getRequiredColors:function(){return this.run?this.run.data.length:0;},render:function(dim,_3aa){if(!this.dirty){return this;}this.resetEvents();this.dirty=false;this._eventSeries={};this.cleanGroup();var s=this.group,t=this.chart.theme;if(!this.run||!this.run.data.length){return this;}var rx=(dim.width-_3aa.l-_3aa.r)/2,ry=(dim.height-_3aa.t-_3aa.b)/2,r=Math.min(rx,ry),_3ab="font" in this.opt?this.opt.font:t.axis.font,size=_3ab?g.normalizedLength(g.splitFontString(_3ab).size):0,_3ac="fontColor" in this.opt?this.opt.fontColor:t.axis.fontColor,_3ad=m._degToRad(this.opt.startAngle),_3ae=_3ad,step,_3af,_3b0,_3b1,_3b2,_3b3,run=this.run.data,_3b4=this.events();if(typeof run[0]=="number"){_3af=df.map(run,"x ? Math.max(x, 0) : 0");if(df.every(_3af,"<= 0")){return this;}_3b0=df.map(_3af,"/this",df.foldl(_3af,"+",0));if(this.opt.labels){_3b1=dojo.map(_3b0,function(x){return x>0?this._getLabel(x*100)+"%":"";},this);}}else{_3af=df.map(run,"x ? Math.max(x.y, 0) : 0");if(df.every(_3af,"<= 0")){return this;}_3b0=df.map(_3af,"/this",df.foldl(_3af,"+",0));if(this.opt.labels){_3b1=dojo.map(_3b0,function(x,i){if(x<=0){return "";}var v=run[i];return "text" in v?v.text:this._getLabel(x*100)+"%";},this);}}var _3b5=df.map(run,function(v,i){if(v===null||typeof v=="number"){return t.next("slice",[this.opt,this.run],true);}return t.next("slice",[this.opt,this.run,v],true);},this);if(this.opt.labels){_3b2=df.foldl1(df.map(_3b1,function(_3b6,i){var font=_3b5[i].series.font;return dojox.gfx._base._getTextBox(_3b6,{font:font}).w;},this),"Math.max(a, b)")/2;if(this.opt.labelOffset<0){r=Math.min(rx-2*_3b2,ry-size)+this.opt.labelOffset;}_3b3=r-this.opt.labelOffset;}if("radius" in this.opt){r=this.opt.radius;_3b3=r-this.opt.labelOffset;}var _3b7={cx:_3aa.l+rx,cy:_3aa.t+ry,r:r};this.dyn=[];var _3b8=new Array(_3b0.length);dojo.some(_3b0,function(_3b9,i){if(_3b9<=0){return false;}var v=run[i],_3ba=_3b5[i],_3bb;if(_3b9>=1){_3bb=this._plotFill(_3ba.series.fill,dim,_3aa);_3bb=this._shapeFill(_3bb,{x:_3b7.cx-_3b7.r,y:_3b7.cy-_3b7.r,width:2*_3b7.r,height:2*_3b7.r});_3bb=this._pseudoRadialFill(_3bb,{x:_3b7.cx,y:_3b7.cy},_3b7.r);var _3bc=s.createCircle(_3b7).setFill(_3bb).setStroke(_3ba.series.stroke);this.dyn.push({fill:_3bb,stroke:_3ba.series.stroke});if(_3b4){var o={element:"slice",index:i,run:this.run,shape:_3bc,x:i,y:typeof v=="number"?v:v.y,cx:_3b7.cx,cy:_3b7.cy,cr:r};this._connectEvents(o);_3b8[i]=o;}return true;}var end=_3ae+_3b9*2*Math.PI;if(i+1==_3b0.length){end=_3ad+2*Math.PI;}var step=end-_3ae,x1=_3b7.cx+r*Math.cos(_3ae),y1=_3b7.cy+r*Math.sin(_3ae),x2=_3b7.cx+r*Math.cos(end),y2=_3b7.cy+r*Math.sin(end);var _3bd=m._degToRad(this.opt.fanSize);if(_3ba.series.fill&&_3ba.series.fill.type==="radial"&&this.opt.radGrad==="fan"&&step>_3bd){var _3be=s.createGroup(),_3bf=Math.ceil(step/_3bd),_3c0=step/_3bf;_3bb=this._shapeFill(_3ba.series.fill,{x:_3b7.cx-_3b7.r,y:_3b7.cy-_3b7.r,width:2*_3b7.r,height:2*_3b7.r});for(var j=0;j<_3bf;++j){var _3c1=j==0?x1:_3b7.cx+r*Math.cos(_3ae+(j-_3a7)*_3c0),_3c2=j==0?y1:_3b7.cy+r*Math.sin(_3ae+(j-_3a7)*_3c0),_3c3=j==_3bf-1?x2:_3b7.cx+r*Math.cos(_3ae+(j+1+_3a7)*_3c0),_3c4=j==_3bf-1?y2:_3b7.cy+r*Math.sin(_3ae+(j+1+_3a7)*_3c0),fan=_3be.createPath({}).moveTo(_3b7.cx,_3b7.cy).lineTo(_3c1,_3c2).arcTo(r,r,0,_3c0>Math.PI,true,_3c3,_3c4).lineTo(_3b7.cx,_3b7.cy).closePath().setFill(this._pseudoRadialFill(_3bb,{x:_3b7.cx,y:_3b7.cy},r,_3ae+(j+0.5)*_3c0,_3ae+(j+0.5)*_3c0));}_3be.createPath({}).moveTo(_3b7.cx,_3b7.cy).lineTo(x1,y1).arcTo(r,r,0,step>Math.PI,true,x2,y2).lineTo(_3b7.cx,_3b7.cy).closePath().setStroke(_3ba.series.stroke);_3bc=_3be;}else{_3bc=s.createPath({}).moveTo(_3b7.cx,_3b7.cy).lineTo(x1,y1).arcTo(r,r,0,step>Math.PI,true,x2,y2).lineTo(_3b7.cx,_3b7.cy).closePath().setStroke(_3ba.series.stroke);var _3bb=_3ba.series.fill;if(_3bb&&_3bb.type==="radial"){_3bb=this._shapeFill(_3bb,{x:_3b7.cx-_3b7.r,y:_3b7.cy-_3b7.r,width:2*_3b7.r,height:2*_3b7.r});if(this.opt.radGrad==="linear"){_3bb=this._pseudoRadialFill(_3bb,{x:_3b7.cx,y:_3b7.cy},r,_3ae,end);}}else{if(_3bb&&_3bb.type==="linear"){_3bb=this._plotFill(_3bb,dim,_3aa);_3bb=this._shapeFill(_3bb,_3bc.getBoundingBox());}}_3bc.setFill(_3bb);}this.dyn.push({fill:_3bb,stroke:_3ba.series.stroke});if(_3b4){var o={element:"slice",index:i,run:this.run,shape:_3bc,x:i,y:typeof v=="number"?v:v.y,cx:_3b7.cx,cy:_3b7.cy,cr:r};this._connectEvents(o);_3b8[i]=o;}_3ae=end;return false;},this);if(this.opt.labels){_3ae=_3ad;dojo.some(_3b0,function(_3c5,i){if(_3c5<=0){return false;}var _3c6=_3b5[i];if(_3c5>=1){var v=run[i],elem=da.createText[this.opt.htmlLabels&&dojox.gfx.renderer!="vml"?"html":"gfx"](this.chart,s,_3b7.cx,_3b7.cy+size/2,"middle",_3b1[i],_3c6.series.font,_3c6.series.fontColor);if(this.opt.htmlLabels){this.htmlElements.push(elem);}return true;}var end=_3ae+_3c5*2*Math.PI,v=run[i];if(i+1==_3b0.length){end=_3ad+2*Math.PI;}var _3c7=(_3ae+end)/2,x=_3b7.cx+_3b3*Math.cos(_3c7),y=_3b7.cy+_3b3*Math.sin(_3c7)+size/2;var elem=da.createText[this.opt.htmlLabels&&dojox.gfx.renderer!="vml"?"html":"gfx"](this.chart,s,x,y,"middle",_3b1[i],_3c6.series.font,_3c6.series.fontColor);if(this.opt.htmlLabels){this.htmlElements.push(elem);}_3ae=end;return false;},this);}var esi=0;this._eventSeries[this.run.name]=df.map(run,function(v){return v<=0?null:_3b8[esi++];});return this;},_getLabel:function(_3c8){return this.opt.fixed?dojo.number.format(_3c8,{places:this.opt.precision}):_3c8.toString();}});})();}if(!dojo._hasResource["dojox.charting.plot2d.Bubble"]){dojo._hasResource["dojox.charting.plot2d.Bubble"]=true;dojo.provide("dojox.charting.plot2d.Bubble");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_3c9=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.Bubble",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",animate:null},optionalParams:{stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_3ca,_3cb){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_3cb);this.series=[];this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.animate=this.opt.animate;},render:function(dim,_3cc){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_3cc);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_3c9);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_3cd=this.events();for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();if(!run.data.length){run.dirty=false;t.skip();continue;}if(typeof run.data[0]=="number"){console.warn("dojox.charting.plot2d.Bubble: the data in the following series cannot be rendered as a bubble chart; ",run);continue;}var _3ce=t.next("circle",[this.opt,run]),s=run.group,_3cf=dojo.map(run.data,function(v,i){return v?{x:ht(v.x)+_3cc.l,y:dim.height-_3cc.b-vt(v.y),radius:this._vScaler.bounds.scale*(v.size/2)}:null;},this);var _3d0=null,_3d1=null,_3d2=null;if(_3ce.series.shadow){_3d2=dojo.map(_3cf,function(item){if(item!==null){var _3d3=t.addMixin(_3ce,"circle",item,true),_3d4=_3d3.series.shadow;var _3d5=s.createCircle({cx:item.x+_3d4.dx,cy:item.y+_3d4.dy,r:item.radius}).setStroke(_3d4).setFill(_3d4.color);if(this.animate){this._animateBubble(_3d5,dim.height-_3cc.b,item.radius);}return _3d5;}return null;},this);if(_3d2.length){run.dyn.shadow=_3d2[_3d2.length-1].getStroke();}}if(_3ce.series.outline){_3d1=dojo.map(_3cf,function(item){if(item!==null){var _3d6=t.addMixin(_3ce,"circle",item,true),_3d7=dc.makeStroke(_3d6.series.outline);_3d7.width=2*_3d7.width+_3ce.series.stroke.width;var _3d8=s.createCircle({cx:item.x,cy:item.y,r:item.radius}).setStroke(_3d7);if(this.animate){this._animateBubble(_3d8,dim.height-_3cc.b,item.radius);}return _3d8;}return null;},this);if(_3d1.length){run.dyn.outline=_3d1[_3d1.length-1].getStroke();}}_3d0=dojo.map(_3cf,function(item){if(item!==null){var _3d9=t.addMixin(_3ce,"circle",item,true),rect={x:item.x-item.radius,y:item.y-item.radius,width:2*item.radius,height:2*item.radius};var _3da=this._plotFill(_3d9.series.fill,dim,_3cc);_3da=this._shapeFill(_3da,rect);var _3db=s.createCircle({cx:item.x,cy:item.y,r:item.radius}).setFill(_3da).setStroke(_3d9.series.stroke);if(this.animate){this._animateBubble(_3db,dim.height-_3cc.b,item.radius);}return _3db;}return null;},this);if(_3d0.length){run.dyn.fill=_3d0[_3d0.length-1].getFill();run.dyn.stroke=_3d0[_3d0.length-1].getStroke();}if(_3cd){var _3dc=new Array(_3d0.length);dojo.forEach(_3d0,function(s,i){if(s!==null){var o={element:"circle",index:i,run:run,shape:s,outline:_3d1&&_3d1[i]||null,shadow:_3d2&&_3d2[i]||null,x:run.data[i].x,y:run.data[i].y,r:run.data[i].size/2,cx:_3cf[i].x,cy:_3cf[i].y,cr:_3cf[i].radius};this._connectEvents(o);_3dc[i]=o;}},this);this._eventSeries[run.name]=_3dc;}else{delete this._eventSeries[run.name];}run.dirty=false;}this.dirty=false;return this;},_animateBubble:function(_3dd,_3de,size){dojox.gfx.fx.animateTransform(dojo.delegate({shape:_3dd,duration:1200,transform:[{name:"translate",start:[0,_3de],end:[0,0]},{name:"scale",start:[0,1/size],end:[1,1]},{name:"original"}]},this.animate)).play();}});})();}if(!dojo._hasResource["dojox.charting.plot2d.Candlesticks"]){dojo._hasResource["dojox.charting.plot2d.Candlesticks"]=true;dojo.provide("dojox.charting.plot2d.Candlesticks");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_3df=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.Candlesticks",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:2,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_3e0,_3e1){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_3e1);du.updateWithPattern(this.opt,_3e1,this.optionalParams);this.series=[];this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.animate=this.opt.animate;},collectStats:function(_3e2){var _3e3=dojo.delegate(dc.defaultStats);for(var i=0;i<_3e2.length;i++){var run=_3e2[i];if(!run.data.length){continue;}var _3e4=_3e3.vmin,_3e5=_3e3.vmax;if(!("ymin" in run)||!("ymax" in run)){dojo.forEach(run.data,function(val,idx){if(val!==null){var x=val.x||idx+1;_3e3.hmin=Math.min(_3e3.hmin,x);_3e3.hmax=Math.max(_3e3.hmax,x);_3e3.vmin=Math.min(_3e3.vmin,val.open,val.close,val.high,val.low);_3e3.vmax=Math.max(_3e3.vmax,val.open,val.close,val.high,val.low);}});}if("ymin" in run){_3e3.vmin=Math.min(_3e4,run.ymin);}if("ymax" in run){_3e3.vmax=Math.max(_3e5,run.ymax);}}return _3e3;},getSeriesStats:function(){var _3e6=this.collectStats(this.series);_3e6.hmin-=0.5;_3e6.hmax+=0.5;return _3e6;},render:function(dim,_3e7){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_3e7);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_3df);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_3e8,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_3e9=Math.max(0,this._vScaler.bounds.lower),_3ea=vt(_3e9),_3eb=this.events();f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);gap=f.gap;_3e8=f.size;for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _3ec=t.next("candlestick",[this.opt,run]),s=run.group,_3ed=new Array(run.data.length);for(var j=0;j<run.data.length;++j){var v=run.data[j];if(v!==null){var _3ee=t.addMixin(_3ec,"candlestick",v,true);var x=ht(v.x||(j+0.5))+_3e7.l+gap,y=dim.height-_3e7.b,open=vt(v.open),_3ef=vt(v.close),high=vt(v.high),low=vt(v.low);if("mid" in v){var mid=vt(v.mid);}if(low>high){var tmp=high;high=low;low=tmp;}if(_3e8>=1){var _3f0=open>_3ef;var line={x1:_3e8/2,x2:_3e8/2,y1:y-high,y2:y-low},rect={x:0,y:y-Math.max(open,_3ef),width:_3e8,height:Math.max(_3f0?open-_3ef:_3ef-open,1)};shape=s.createGroup();shape.setTransform({dx:x,dy:0});var _3f1=shape.createGroup();_3f1.createLine(line).setStroke(_3ee.series.stroke);_3f1.createRect(rect).setStroke(_3ee.series.stroke).setFill(_3f0?_3ee.series.fill:"white");if("mid" in v){_3f1.createLine({x1:(_3ee.series.stroke.width||1),x2:_3e8-(_3ee.series.stroke.width||1),y1:y-mid,y2:y-mid}).setStroke(_3f0?"white":_3ee.series.stroke);}run.dyn.fill=_3ee.series.fill;run.dyn.stroke=_3ee.series.stroke;if(_3eb){var o={element:"candlestick",index:j,run:run,shape:_3f1,x:x,y:y-Math.max(open,_3ef),cx:_3e8/2,cy:(y-Math.max(open,_3ef))+(Math.max(_3f0?open-_3ef:_3ef-open,1)/2),width:_3e8,height:Math.max(_3f0?open-_3ef:_3ef-open,1),data:v};this._connectEvents(o);_3ed[j]=o;}}if(this.animate){this._animateCandlesticks(shape,y-low,high-low);}}}this._eventSeries[run.name]=_3ed;run.dirty=false;}this.dirty=false;return this;},_animateCandlesticks:function(_3f2,_3f3,_3f4){dojox.gfx.fx.animateTransform(dojo.delegate({shape:_3f2,duration:1200,transform:[{name:"translate",start:[0,_3f3-(_3f3/_3f4)],end:[0,0]},{name:"scale",start:[1,1/_3f4],end:[1,1]},{name:"original"}]},this.animate)).play();}});})();}if(!dojo._hasResource["dojox.charting.plot2d.OHLC"]){dojo._hasResource["dojox.charting.plot2d.OHLC"]=true;dojo.provide("dojox.charting.plot2d.OHLC");(function(){var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_3f5=df.lambda("item.purgeGroup()");dojo.declare("dojox.charting.plot2d.OHLC",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:2,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_3f6,_3f7){this.opt=dojo.clone(this.defaultParams);du.updateWithObject(this.opt,_3f7);du.updateWithPattern(this.opt,_3f7,this.optionalParams);this.series=[];this.hAxis=this.opt.hAxis;this.vAxis=this.opt.vAxis;this.animate=this.opt.animate;},collectStats:function(_3f8){var _3f9=dojo.delegate(dc.defaultStats);for(var i=0;i<_3f8.length;i++){var run=_3f8[i];if(!run.data.length){continue;}var _3fa=_3f9.vmin,_3fb=_3f9.vmax;if(!("ymin" in run)||!("ymax" in run)){dojo.forEach(run.data,function(val,idx){if(val!==null){var x=val.x||idx+1;_3f9.hmin=Math.min(_3f9.hmin,x);_3f9.hmax=Math.max(_3f9.hmax,x);_3f9.vmin=Math.min(_3f9.vmin,val.open,val.close,val.high,val.low);_3f9.vmax=Math.max(_3f9.vmax,val.open,val.close,val.high,val.low);}});}if("ymin" in run){_3f9.vmin=Math.min(_3fa,run.ymin);}if("ymax" in run){_3f9.vmax=Math.max(_3fb,run.ymax);}}return _3f9;},getSeriesStats:function(){var _3fc=this.collectStats(this.series);_3fc.hmin-=0.5;_3fc.hmax+=0.5;return _3fc;},render:function(dim,_3fd){if(this.zoom&&!this.isDataDirty()){return this.performZoom(dim,_3fd);}this.resetEvents();this.dirty=this.isDirty();if(this.dirty){dojo.forEach(this.series,_3f5);this._eventSeries={};this.cleanGroup();var s=this.group;df.forEachRev(this.series,function(item){item.cleanGroup(s);});}var t=this.chart.theme,f,gap,_3fe,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_3ff=Math.max(0,this._vScaler.bounds.lower),_400=vt(_3ff),_401=this.events();f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);gap=f.gap;_3fe=f.size;for(var i=this.series.length-1;i>=0;--i){var run=this.series[i];if(!this.dirty&&!run.dirty){t.skip();this._reconnectEvents(run.name);continue;}run.cleanGroup();var _402=t.next("candlestick",[this.opt,run]),s=run.group,_403=new Array(run.data.length);for(var j=0;j<run.data.length;++j){var v=run.data[j];if(v!==null){var _404=t.addMixin(_402,"candlestick",v,true);var x=ht(v.x||(j+0.5))+_3fd.l+gap,y=dim.height-_3fd.b,open=vt(v.open),_405=vt(v.close),high=vt(v.high),low=vt(v.low);if(low>high){var tmp=high;high=low;low=tmp;}if(_3fe>=1){var hl={x1:_3fe/2,x2:_3fe/2,y1:y-high,y2:y-low},op={x1:0,x2:((_3fe/2)+((_404.series.stroke.width||1)/2)),y1:y-open,y2:y-open},cl={x1:((_3fe/2)-((_404.series.stroke.width||1)/2)),x2:_3fe,y1:y-_405,y2:y-_405};shape=s.createGroup();shape.setTransform({dx:x,dy:0});var _406=shape.createGroup();_406.createLine(hl).setStroke(_404.series.stroke);_406.createLine(op).setStroke(_404.series.stroke);_406.createLine(cl).setStroke(_404.series.stroke);run.dyn.stroke=_404.series.stroke;if(_401){var o={element:"candlestick",index:j,run:run,shape:_406,x:x,y:y-Math.max(open,_405),cx:_3fe/2,cy:(y-Math.max(open,_405))+(Math.max(open>_405?open-_405:_405-open,1)/2),width:_3fe,height:Math.max(open>_405?open-_405:_405-open,1),data:v};this._connectEvents(o);_403[j]=o;}}if(this.animate){this._animateOHLC(shape,y-low,high-low);}}}this._eventSeries[run.name]=_403;run.dirty=false;}this.dirty=false;return this;},_animateOHLC:function(_407,_408,_409){dojox.gfx.fx.animateTransform(dojo.delegate({shape:_407,duration:1200,transform:[{name:"translate",start:[0,_408-(_408/_409)],end:[0,0]},{name:"scale",start:[1,1/_409],end:[1,1]},{name:"original"}]},this.animate)).play();}});})();}if(!dojo._hasResource["dojox.charting.Chart2D"]){dojo._hasResource["dojox.charting.Chart2D"]=true;dojo.provide("dojox.charting.Chart2D");(function(){var df=dojox.lang.functional,dc=dojox.charting,_40a=df.lambda("item.clear()"),_40b=df.lambda("item.purgeGroup()"),_40c=df.lambda("item.destroy()"),_40d=df.lambda("item.dirty = false"),_40e=df.lambda("item.dirty = true"),_40f=df.lambda("item.name");dojo.declare("dojox.charting.Chart2D",null,{constructor:function(node,_410){if(!_410){_410={};}this.margins=_410.margins?_410.margins:{l:10,t:10,r:10,b:10};this.stroke=_410.stroke;this.fill=_410.fill;this.delayInMs=_410.delayInMs||200;this.theme=null;this.axes={};this.stack=[];this.plots={};this.series=[];this.runs={};this.dirty=true;this.coords=null;this.node=dojo.byId(node);var box=dojo.marginBox(node);this.surface=dojox.gfx.createSurface(this.node,box.w||400,box.h||300);},destroy:function(){dojo.forEach(this.series,_40c);dojo.forEach(this.stack,_40c);df.forIn(this.axes,_40c);this.surface.destroy();},getCoords:function(){if(!this.coords){this.coords=dojo.coords(this.node,true);}return this.coords;},setTheme:function(_411){this.theme=_411.clone();this.dirty=true;return this;},addAxis:function(name,_412){var axis;if(!_412||!("type" in _412)){axis=new dc.axis2d.Default(this,_412);}else{axis=typeof _412.type=="string"?new dc.axis2d[_412.type](this,_412):new _412.type(this,_412);}axis.name=name;axis.dirty=true;if(name in this.axes){this.axes[name].destroy();}this.axes[name]=axis;this.dirty=true;return this;},getAxis:function(name){return this.axes[name];},removeAxis:function(name){if(name in this.axes){this.axes[name].destroy();delete this.axes[name];this.dirty=true;}return this;},addPlot:function(name,_413){var plot;if(!_413||!("type" in _413)){plot=new dc.plot2d.Default(this,_413);}else{plot=typeof _413.type=="string"?new dc.plot2d[_413.type](this,_413):new _413.type(this,_413);}plot.name=name;plot.dirty=true;if(name in this.plots){this.stack[this.plots[name]].destroy();this.stack[this.plots[name]]=plot;}else{this.plots[name]=this.stack.length;this.stack.push(plot);}this.dirty=true;return this;},removePlot:function(name){if(name in this.plots){var _414=this.plots[name];delete this.plots[name];this.stack[_414].destroy();this.stack.splice(_414,1);df.forIn(this.plots,function(idx,name,_415){if(idx>_414){_415[name]=idx-1;}});this.dirty=true;}return this;},getPlotOrder:function(){return df.map(this.stack,_40f);},setPlotOrder:function(_416){var _417={},_418=df.filter(_416,function(name){if(!(name in this.plots)||(name in _417)){return false;}_417[name]=1;return true;},this);if(_418.length<this.stack.length){df.forEach(this.stack,function(plot){var name=plot.name;if(!(name in _417)){_418.push(name);}});}var _419=df.map(_418,function(name){return this.stack[this.plots[name]];},this);df.forEach(_419,function(plot,i){this.plots[plot.name]=i;},this);this.stack=_419;this.dirty=true;return this;},movePlotToFront:function(name){if(name in this.plots){var _41a=this.plots[name];if(_41a){var _41b=this.getPlotOrder();_41b.splice(_41a,1);_41b.unshift(name);return this.setPlotOrder(_41b);}}return this;},movePlotToBack:function(name){if(name in this.plots){var _41c=this.plots[name];if(_41c<this.stack.length-1){var _41d=this.getPlotOrder();_41d.splice(_41c,1);_41d.push(name);return this.setPlotOrder(_41d);}}return this;},addSeries:function(name,data,_41e){var run=new dc.Series(this,data,_41e);run.name=name;if(name in this.runs){this.series[this.runs[name]].destroy();this.series[this.runs[name]]=run;}else{this.runs[name]=this.series.length;this.series.push(run);}this.dirty=true;if(!("ymin" in run)&&"min" in run){run.ymin=run.min;}if(!("ymax" in run)&&"max" in run){run.ymax=run.max;}return this;},removeSeries:function(name){if(name in this.runs){var _41f=this.runs[name],_420=this.series[_41f].plot;delete this.runs[name];this.series[_41f].destroy();this.series.splice(_41f,1);df.forIn(this.runs,function(idx,name,runs){if(idx>_41f){runs[name]=idx-1;}});this.dirty=true;}return this;},updateSeries:function(name,data){if(name in this.runs){var run=this.series[this.runs[name]];run.update(data);this._invalidateDependentPlots(run.plot,false);this._invalidateDependentPlots(run.plot,true);}return this;},getSeriesOrder:function(_421){return df.map(df.filter(this.series,function(run){return run.plot==_421;}),_40f);},setSeriesOrder:function(_422){var _423,_424={},_425=df.filter(_422,function(name){if(!(name in this.runs)||(name in _424)){return false;}var run=this.series[this.runs[name]];if(_423){if(run.plot!=_423){return false;}}else{_423=run.plot;}_424[name]=1;return true;},this);df.forEach(this.series,function(run){var name=run.name;if(!(name in _424)&&run.plot==_423){_425.push(name);}});var _426=df.map(_425,function(name){return this.series[this.runs[name]];},this);this.series=_426.concat(df.filter(this.series,function(run){return run.plot!=_423;}));df.forEach(this.series,function(run,i){this.runs[run.name]=i;},this);this.dirty=true;return this;},moveSeriesToFront:function(name){if(name in this.runs){var _427=this.runs[name],_428=this.getSeriesOrder(this.series[_427].plot);if(name!=_428[0]){_428.splice(_427,1);_428.unshift(name);return this.setSeriesOrder(_428);}}return this;},moveSeriesToBack:function(name){if(name in this.runs){var _429=this.runs[name],_42a=this.getSeriesOrder(this.series[_429].plot);if(name!=_42a[_42a.length-1]){_42a.splice(_429,1);_42a.push(name);return this.setSeriesOrder(_42a);}}return this;},resize:function(_42b,_42c){var box;switch(arguments.length){case 0:box=dojo.marginBox(this.node);break;case 1:box=_42b;break;default:box={w:_42b,h:_42c};break;}dojo.marginBox(this.node,box);this.surface.setDimensions(box.w,box.h);this.dirty=true;this.coords=null;return this.render();},getGeometry:function(){var ret={};df.forIn(this.axes,function(axis){if(axis.initialized()){ret[axis.name]={name:axis.name,vertical:axis.vertical,scaler:axis.scaler,ticks:axis.ticks};}});return ret;},setAxisWindow:function(name,_42d,_42e,zoom){var axis=this.axes[name];if(axis){axis.setWindow(_42d,_42e);dojo.forEach(this.stack,function(plot){if(plot.hAxis==name||plot.vAxis==name){plot.zoom=zoom;}});}return this;},setWindow:function(sx,sy,dx,dy,zoom){if(!("plotArea" in this)){this.calculateGeometry();}df.forIn(this.axes,function(axis){var _42f,_430,_431=axis.getScaler().bounds,s=_431.span/(_431.upper-_431.lower);if(axis.vertical){_42f=sy;_430=dy/s/_42f;}else{_42f=sx;_430=dx/s/_42f;}axis.setWindow(_42f,_430);});dojo.forEach(this.stack,function(plot){plot.zoom=zoom;});return this;},zoomIn:function(name,_432){var axis=this.axes[name];if(axis){var _433,_434,_435=axis.getScaler().bounds;var _436=Math.min(_432[0],_432[1]);var _437=Math.max(_432[0],_432[1]);_436=_432[0]<_435.lower?_435.lower:_436;_437=_432[1]>_435.upper?_435.upper:_437;_433=(_435.upper-_435.lower)/(_437-_436);_434=_436-_435.lower;this.setAxisWindow(name,_433,_434);this.render();}},calculateGeometry:function(){if(this.dirty){return this.fullGeometry();}var _438=dojo.filter(this.stack,function(plot){return plot.dirty||(plot.hAxis&&this.axes[plot.hAxis].dirty)||(plot.vAxis&&this.axes[plot.vAxis].dirty);},this);_439(_438,this.plotArea);return this;},fullGeometry:function(){this._makeDirty();dojo.forEach(this.stack,_40a);if(!this.theme){this.setTheme(new dojox.charting.Theme(dojox.charting._def));}dojo.forEach(this.series,function(run){if(!(run.plot in this.plots)){var plot=new dc.plot2d.Default(this,{});plot.name=run.plot;this.plots[run.plot]=this.stack.length;this.stack.push(plot);}this.stack[this.plots[run.plot]].addSeries(run);},this);dojo.forEach(this.stack,function(plot){if(plot.hAxis){plot.setAxis(this.axes[plot.hAxis]);}if(plot.vAxis){plot.setAxis(this.axes[plot.vAxis]);}},this);var dim=this.dim=this.surface.getDimensions();dim.width=dojox.gfx.normalizedLength(dim.width);dim.height=dojox.gfx.normalizedLength(dim.height);df.forIn(this.axes,_40a);_439(this.stack,dim);var _43a=this.offsets={l:0,r:0,t:0,b:0};df.forIn(this.axes,function(axis){df.forIn(axis.getOffsets(),function(o,i){_43a[i]+=o;});});df.forIn(this.margins,function(o,i){_43a[i]+=o;});this.plotArea={width:dim.width-_43a.l-_43a.r,height:dim.height-_43a.t-_43a.b};df.forIn(this.axes,_40a);_439(this.stack,this.plotArea);return this;},render:function(){if(this.theme){this.theme.clear();}if(this.dirty){return this.fullRender();}this.calculateGeometry();df.forEachRev(this.stack,function(plot){plot.render(this.dim,this.offsets);},this);df.forIn(this.axes,function(axis){axis.render(this.dim,this.offsets);},this);this._makeClean();if(this.surface.render){this.surface.render();}return this;},fullRender:function(){this.fullGeometry();var _43b=this.offsets,dim=this.dim;dojo.forEach(this.series,_40b);df.forIn(this.axes,_40b);dojo.forEach(this.stack,_40b);this.surface.clear();var t=this.theme,fill=t.plotarea&&t.plotarea.fill,_43c=t.plotarea&&t.plotarea.stroke;if(fill){this.surface.createRect({x:_43b.l-1,y:_43b.t-1,width:dim.width-_43b.l-_43b.r+2,height:dim.height-_43b.t-_43b.b+2}).setFill(fill);}if(_43c){this.surface.createRect({x:_43b.l,y:_43b.t,width:dim.width-_43b.l-_43b.r+1,height:dim.height-_43b.t-_43b.b+1}).setStroke(_43c);}df.foldr(this.stack,function(z,plot){return plot.render(dim,_43b),0;},0);fill=this.fill!==undefined?this.fill:(t.chart&&t.chart.fill);_43c=this.stroke!==undefined?this.stroke:(t.chart&&t.chart.stroke);if(fill=="inherit"){var node=this.node,fill=new dojo.Color(dojo.style(node,"backgroundColor"));while(fill.a==0&&node!=document.documentElement){fill=new dojo.Color(dojo.style(node,"backgroundColor"));node=node.parentNode;}}if(fill){if(_43b.l){this.surface.createRect({width:_43b.l,height:dim.height+1}).setFill(fill);}if(_43b.r){this.surface.createRect({x:dim.width-_43b.r,width:_43b.r+1,height:dim.height+2}).setFill(fill);}if(_43b.t){this.surface.createRect({width:dim.width+1,height:_43b.t}).setFill(fill);}if(_43b.b){this.surface.createRect({y:dim.height-_43b.b,width:dim.width+1,height:_43b.b+2}).setFill(fill);}}if(_43c){this.surface.createRect({width:dim.width-1,height:dim.height-1}).setStroke(_43c);}df.forIn(this.axes,function(axis){axis.render(dim,_43b);});this._makeClean();if(this.surface.render){this.surface.render();}return this;},delayedRender:function(){if(!this._delayedRenderHandle){this._delayedRenderHandle=setTimeout(dojo.hitch(this,function(){clearTimeout(this._delayedRenderHandle);this._delayedRenderHandle=null;this.render();}),this.delayInMs);}return this;},connectToPlot:function(name,_43d,_43e){return name in this.plots?this.stack[this.plots[name]].connect(_43d,_43e):null;},fireEvent:function(_43f,_440,_441){if(_43f in this.runs){var _442=this.series[this.runs[_43f]].plot;if(_442 in this.plots){var plot=this.stack[this.plots[_442]];if(plot){plot.fireEvent(_43f,_440,_441);}}}return this;},_makeClean:function(){dojo.forEach(this.axes,_40d);dojo.forEach(this.stack,_40d);dojo.forEach(this.series,_40d);this.dirty=false;},_makeDirty:function(){dojo.forEach(this.axes,_40e);dojo.forEach(this.stack,_40e);dojo.forEach(this.series,_40e);this.dirty=true;},_invalidateDependentPlots:function(_443,_444){if(_443 in this.plots){var plot=this.stack[this.plots[_443]],axis,_445=_444?"vAxis":"hAxis";if(plot[_445]){axis=this.axes[plot[_445]];if(axis&&axis.dependOnData()){axis.dirty=true;dojo.forEach(this.stack,function(p){if(p[_445]&&p[_445]==plot[_445]){p.dirty=true;}});}}else{plot.dirty=true;}}}});function _446(_447){return {min:_447.hmin,max:_447.hmax};};function _448(_449){return {min:_449.vmin,max:_449.vmax};};function _44a(_44b,h){_44b.hmin=h.min;_44b.hmax=h.max;};function _44c(_44d,v){_44d.vmin=v.min;_44d.vmax=v.max;};function _44e(_44f,_450){if(_44f&&_450){_44f.min=Math.min(_44f.min,_450.min);_44f.max=Math.max(_44f.max,_450.max);}return _44f||_450;};function _439(_451,_452){var _453={},axes={};dojo.forEach(_451,function(plot){var _454=_453[plot.name]=plot.getSeriesStats();if(plot.hAxis){axes[plot.hAxis]=_44e(axes[plot.hAxis],_446(_454));}if(plot.vAxis){axes[plot.vAxis]=_44e(axes[plot.vAxis],_448(_454));}});dojo.forEach(_451,function(plot){var _455=_453[plot.name];if(plot.hAxis){_44a(_455,axes[plot.hAxis]);}if(plot.vAxis){_44c(_455,axes[plot.vAxis]);}plot.initializeScalers(_452,_455);});};})();}if(!dojo._hasResource["dojo.fx.easing"]){dojo._hasResource["dojo.fx.easing"]=true;dojo.provide("dojo.fx.easing");dojo.fx.easing={linear:function(n){return n;},quadIn:function(n){return Math.pow(n,2);},quadOut:function(n){return n*(n-2)*-1;},quadInOut:function(n){n=n*2;if(n<1){return Math.pow(n,2)/2;}return -1*((--n)*(n-2)-1)/2;},cubicIn:function(n){return Math.pow(n,3);},cubicOut:function(n){return Math.pow(n-1,3)+1;},cubicInOut:function(n){n=n*2;if(n<1){return Math.pow(n,3)/2;}n-=2;return (Math.pow(n,3)+2)/2;},quartIn:function(n){return Math.pow(n,4);},quartOut:function(n){return -1*(Math.pow(n-1,4)-1);},quartInOut:function(n){n=n*2;if(n<1){return Math.pow(n,4)/2;}n-=2;return -1/2*(Math.pow(n,4)-2);},quintIn:function(n){return Math.pow(n,5);},quintOut:function(n){return Math.pow(n-1,5)+1;},quintInOut:function(n){n=n*2;if(n<1){return Math.pow(n,5)/2;}n-=2;return (Math.pow(n,5)+2)/2;},sineIn:function(n){return -1*Math.cos(n*(Math.PI/2))+1;},sineOut:function(n){return Math.sin(n*(Math.PI/2));},sineInOut:function(n){return -1*(Math.cos(Math.PI*n)-1)/2;},expoIn:function(n){return (n==0)?0:Math.pow(2,10*(n-1));},expoOut:function(n){return (n==1)?1:(-1*Math.pow(2,-10*n)+1);},expoInOut:function(n){if(n==0){return 0;}if(n==1){return 1;}n=n*2;if(n<1){return Math.pow(2,10*(n-1))/2;}--n;return (-1*Math.pow(2,-10*n)+2)/2;},circIn:function(n){return -1*(Math.sqrt(1-Math.pow(n,2))-1);},circOut:function(n){n=n-1;return Math.sqrt(1-Math.pow(n,2));},circInOut:function(n){n=n*2;if(n<1){return -1/2*(Math.sqrt(1-Math.pow(n,2))-1);}n-=2;return 1/2*(Math.sqrt(1-Math.pow(n,2))+1);},backIn:function(n){var s=1.70158;return Math.pow(n,2)*((s+1)*n-s);},backOut:function(n){n=n-1;var s=1.70158;return Math.pow(n,2)*((s+1)*n+s)+1;},backInOut:function(n){var s=1.70158*1.525;n=n*2;if(n<1){return (Math.pow(n,2)*((s+1)*n-s))/2;}n-=2;return (Math.pow(n,2)*((s+1)*n+s)+2)/2;},elasticIn:function(n){if(n==0||n==1){return n;}var p=0.3;var s=p/4;n=n-1;return -1*Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p);},elasticOut:function(n){if(n==0||n==1){return n;}var p=0.3;var s=p/4;return Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p)+1;},elasticInOut:function(n){if(n==0){return 0;}n=n*2;if(n==2){return 1;}var p=0.3*1.5;var s=p/4;if(n<1){n-=1;return -0.5*(Math.pow(2,10*n)*Math.sin((n-s)*(2*Math.PI)/p));}n-=1;return 0.5*(Math.pow(2,-10*n)*Math.sin((n-s)*(2*Math.PI)/p))+1;},bounceIn:function(n){return (1-dojo.fx.easing.bounceOut(1-n));},bounceOut:function(n){var s=7.5625;var p=2.75;var l;if(n<(1/p)){l=s*Math.pow(n,2);}else{if(n<(2/p)){n-=(1.5/p);l=s*Math.pow(n,2)+0.75;}else{if(n<(2.5/p)){n-=(2.25/p);l=s*Math.pow(n,2)+0.9375;}else{n-=(2.625/p);l=s*Math.pow(n,2)+0.984375;}}}return l;},bounceInOut:function(n){if(n<0.5){return dojo.fx.easing.bounceIn(n*2)/2;}return (dojo.fx.easing.bounceOut(n*2-1)/2)+0.5;}};}if(!dojo._hasResource["dojox.charting.action2d.Base"]){dojo._hasResource["dojox.charting.action2d.Base"]=true;dojo.provide("dojox.charting.action2d.Base");(function(){var _456=400,_457=dojo.fx.easing.backOut,df=dojox.lang.functional;dojo.declare("dojox.charting.action2d.Base",null,{overOutEvents:{onmouseover:1,onmouseout:1},constructor:function(_458,plot,_459){this.chart=_458;this.plot=plot||"default";this.anim={};if(!_459){_459={};}this.duration=_459.duration?_459.duration:_456;this.easing=_459.easing?_459.easing:_457;},connect:function(){this.handle=this.chart.connectToPlot(this.plot,this,"process");},disconnect:function(){if(this.handle){dojo.disconnect(this.handle);this.handle=null;}},reset:function(){},destroy:function(){this.disconnect();df.forIn(this.anim,function(o){df.forIn(o,function(anim){anim.action.stop(true);});});this.anim={};}});})();}if(!dojo._hasResource["dojox.charting.action2d.Highlight"]){dojo._hasResource["dojox.charting.action2d.Highlight"]=true;dojo.provide("dojox.charting.action2d.Highlight");(function(){var _45a=100,_45b=75,_45c=50,c=dojox.color,cc=function(_45d){return function(){return _45d;};},hl=function(_45e){var a=new c.Color(_45e),x=a.toHsl();if(x.s==0){x.l=x.l<50?100:0;}else{x.s=_45a;if(x.l<_45c){x.l=_45b;}else{if(x.l>_45b){x.l=_45c;}else{x.l=x.l-_45c>_45b-x.l?_45c:_45b;}}}return c.fromHsl(x);};dojo.declare("dojox.charting.action2d.Highlight",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut},optionalParams:{highlight:"red"},constructor:function(_45f,plot,_460){var a=_460&&_460.highlight;this.colorFun=a?(dojo.isFunction(a)?a:cc(a)):hl;this.connect();},process:function(o){if(!o.shape||!(o.type in this.overOutEvents)){return;}var _461=o.run.name,_462=o.index,anim,_463,_464;if(_461 in this.anim){anim=this.anim[_461][_462];}else{this.anim[_461]={};}if(anim){anim.action.stop(true);}else{var _465=o.shape.getFill();if(!_465||!(_465 instanceof dojo.Color)){return;}this.anim[_461][_462]=anim={start:_465,end:this.colorFun(_465)};}var _466=anim.start,end=anim.end;if(o.type=="onmouseout"){var t=_466;_466=end;end=t;}anim.action=dojox.gfx.fx.animateFill({shape:o.shape,duration:this.duration,easing:this.easing,color:{start:_466,end:end}});if(o.type=="onmouseout"){dojo.connect(anim.action,"onEnd",this,function(){if(this.anim[_461]){delete this.anim[_461][_462];}});}anim.action.play();}});})();}if(!dojo._hasResource["dojo.fx.Toggler"]){dojo._hasResource["dojo.fx.Toggler"]=true;dojo.provide("dojo.fx.Toggler");dojo.declare("dojo.fx.Toggler",null,{node:null,showFunc:dojo.fadeIn,hideFunc:dojo.fadeOut,showDuration:200,hideDuration:200,constructor:function(args){var _467=this;dojo.mixin(_467,args);_467.node=args.node;_467._showArgs=dojo.mixin({},args);_467._showArgs.node=_467.node;_467._showArgs.duration=_467.showDuration;_467.showAnim=_467.showFunc(_467._showArgs);_467._hideArgs=dojo.mixin({},args);_467._hideArgs.node=_467.node;_467._hideArgs.duration=_467.hideDuration;_467.hideAnim=_467.hideFunc(_467._hideArgs);dojo.connect(_467.showAnim,"beforeBegin",dojo.hitch(_467.hideAnim,"stop",true));dojo.connect(_467.hideAnim,"beforeBegin",dojo.hitch(_467.showAnim,"stop",true));},show:function(_468){return this.showAnim.play(_468||0);},hide:function(_469){return this.hideAnim.play(_469||0);}});}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");(function(){var d=dojo,_46a={_fire:function(evt,args){if(this[evt]){this[evt].apply(this,args||[]);}return this;}};var _46b=function(_46c){this._index=-1;this._animations=_46c||[];this._current=this._onAnimateCtx=this._onEndCtx=null;this.duration=0;d.forEach(this._animations,function(a){this.duration+=a.duration;if(a.delay){this.duration+=a.delay;}},this);};d.extend(_46b,{_onAnimate:function(){this._fire("onAnimate",arguments);},_onEnd:function(){d.disconnect(this._onAnimateCtx);d.disconnect(this._onEndCtx);this._onAnimateCtx=this._onEndCtx=null;if(this._index+1==this._animations.length){this._fire("onEnd");}else{this._current=this._animations[++this._index];this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play(0,true);}},play:function(_46d,_46e){if(!this._current){this._current=this._animations[this._index=0];}if(!_46e&&this._current.status()=="playing"){return this;}var _46f=d.connect(this._current,"beforeBegin",this,function(){this._fire("beforeBegin");}),_470=d.connect(this._current,"onBegin",this,function(arg){this._fire("onBegin",arguments);}),_471=d.connect(this._current,"onPlay",this,function(arg){this._fire("onPlay",arguments);d.disconnect(_46f);d.disconnect(_470);d.disconnect(_471);});if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");if(this._onEndCtx){d.disconnect(this._onEndCtx);}this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play.apply(this._current,arguments);return this;},pause:function(){if(this._current){var e=d.connect(this._current,"onPause",this,function(arg){this._fire("onPause",arguments);d.disconnect(e);});this._current.pause();}return this;},gotoPercent:function(_472,_473){this.pause();var _474=this.duration*_472;this._current=null;d.some(this._animations,function(a){if(a.duration<=_474){this._current=a;return true;}_474-=a.duration;return false;});if(this._current){this._current.gotoPercent(_474/this._current.duration,_473);}return this;},stop:function(_475){if(this._current){if(_475){for(;this._index+1<this._animations.length;++this._index){this._animations[this._index].stop(true);}this._current=this._animations[this._index];}var e=d.connect(this._current,"onStop",this,function(arg){this._fire("onStop",arguments);d.disconnect(e);});this._current.stop();}return this;},status:function(){return this._current?this._current.status():"stopped";},destroy:function(){if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}if(this._onEndCtx){d.disconnect(this._onEndCtx);}}});d.extend(_46b,_46a);dojo.fx.chain=function(_476){return new _46b(_476);};var _477=function(_478){this._animations=_478||[];this._connects=[];this._finished=0;this.duration=0;d.forEach(_478,function(a){var _479=a.duration;if(a.delay){_479+=a.delay;}if(this.duration<_479){this.duration=_479;}this._connects.push(d.connect(a,"onEnd",this,"_onEnd"));},this);this._pseudoAnimation=new d.Animation({curve:[0,1],duration:this.duration});var self=this;d.forEach(["beforeBegin","onBegin","onPlay","onAnimate","onPause","onStop","onEnd"],function(evt){self._connects.push(d.connect(self._pseudoAnimation,evt,function(){self._fire(evt,arguments);}));});};d.extend(_477,{_doAction:function(_47a,args){d.forEach(this._animations,function(a){a[_47a].apply(a,args);});return this;},_onEnd:function(){if(++this._finished>this._animations.length){this._fire("onEnd");}},_call:function(_47b,args){var t=this._pseudoAnimation;t[_47b].apply(t,args);},play:function(_47c,_47d){this._finished=0;this._doAction("play",arguments);this._call("play",arguments);return this;},pause:function(){this._doAction("pause",arguments);this._call("pause",arguments);return this;},gotoPercent:function(_47e,_47f){var ms=this.duration*_47e;d.forEach(this._animations,function(a){a.gotoPercent(a.duration<ms?1:(ms/a.duration),_47f);});this._call("gotoPercent",arguments);return this;},stop:function(_480){this._doAction("stop",arguments);this._call("stop",arguments);return this;},status:function(){return this._pseudoAnimation.status();},destroy:function(){d.forEach(this._connects,dojo.disconnect);}});d.extend(_477,_46a);dojo.fx.combine=function(_481){return new _477(_481);};dojo.fx.wipeIn=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{start:function(){o=s.overflow;s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _482=d.style(node,"height");return Math.max(_482,1);}},end:function(){return node.scrollHeight;}}}},args));d.connect(anim,"onEnd",function(){s.height="auto";s.overflow=o;});return anim;};dojo.fx.wipeOut=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{end:1}}},args));d.connect(anim,"beforeBegin",function(){o=s.overflow;s.overflow="hidden";s.display="";});d.connect(anim,"onEnd",function(){s.overflow=o;s.height="auto";s.display="none";});return anim;};dojo.fx.slideTo=function(args){var node=args.node=d.byId(args.node),top=null,left=null;var init=(function(n){return function(){var cs=d.getComputedStyle(n);var pos=cs.position;top=(pos=="absolute"?n.offsetTop:parseInt(cs.top)||0);left=(pos=="absolute"?n.offsetLeft:parseInt(cs.left)||0);if(pos!="absolute"&&pos!="relative"){var ret=d.position(n,true);top=ret.y;left=ret.x;n.style.position="absolute";n.style.top=top+"px";n.style.left=left+"px";}};})(node);init();var anim=d.animateProperty(d.mixin({properties:{top:args.top||0,left:args.left||0}},args));d.connect(anim,"beforeBegin",anim,init);return anim;};})();}if(!dojo._hasResource["dojox.charting.action2d.Magnify"]){dojo._hasResource["dojox.charting.action2d.Magnify"]=true;dojo.provide("dojox.charting.action2d.Magnify");(function(){var _483=2,m=dojox.gfx.matrix,gf=dojox.gfx.fx;dojo.declare("dojox.charting.action2d.Magnify",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,scale:_483},optionalParams:{},constructor:function(_484,plot,_485){this.scale=_485&&typeof _485.scale=="number"?_485.scale:_483;this.connect();},process:function(o){if(!o.shape||!(o.type in this.overOutEvents)||!("cx" in o)||!("cy" in o)){return;}var _486=o.run.name,_487=o.index,_488=[],anim,init,_489;if(_486 in this.anim){anim=this.anim[_486][_487];}else{this.anim[_486]={};}if(anim){anim.action.stop(true);}else{this.anim[_486][_487]=anim={};}if(o.type=="onmouseover"){init=m.identity;_489=this.scale;}else{init=m.scaleAt(this.scale,o.cx,o.cy);_489=1/this.scale;}var _48a={shape:o.shape,duration:this.duration,easing:this.easing,transform:[{name:"scaleAt",start:[1,o.cx,o.cy],end:[_489,o.cx,o.cy]},init]};if(o.shape){_488.push(gf.animateTransform(_48a));}if(o.oultine){_48a.shape=o.outline;_488.push(gf.animateTransform(_48a));}if(o.shadow){_48a.shape=o.shadow;_488.push(gf.animateTransform(_48a));}if(!_488.length){delete this.anim[_486][_487];return;}anim.action=dojo.fx.combine(_488);if(o.type=="onmouseout"){dojo.connect(anim.action,"onEnd",this,function(){if(this.anim[_486]){delete this.anim[_486][_487];}});}anim.action.play();}});})();}if(!dojo._hasResource["dojox.lang.functional.scan"]){dojo._hasResource["dojox.lang.functional.scan"]=true;dojo.provide("dojox.lang.functional.scan");(function(){var d=dojo,df=dojox.lang.functional,_48b={};d.mixin(df,{scanl:function(a,f,z,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var t,n,i;if(d.isArray(a)){t=new Array((n=a.length)+1);t[0]=z;for(i=0;i<n;z=f.call(o,z,a[i],i,a),t[++i]=z){}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){t=[z];for(i=0;a.hasNext();t.push(z=f.call(o,z,a.next(),i++,a))){}}else{t=[z];for(i in a){if(!(i in _48b)){t.push(z=f.call(o,z,a[i],i,a));}}}}return t;},scanl1:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var t,n,z,_48c=true;if(d.isArray(a)){t=new Array(n=a.length);t[0]=z=a[0];for(var i=1;i<n;t[i]=z=f.call(o,z,a[i],i,a),++i){}}else{if(typeof a.hasNext=="function"&&typeof a.next=="function"){if(a.hasNext()){t=[z=a.next()];for(var i=1;a.hasNext();t.push(z=f.call(o,z,a.next(),i++,a))){}}}else{for(var i in a){if(!(i in _48b)){if(_48c){t=[z=a[i]];_48c=false;}else{t.push(z=f.call(o,z,a[i],i,a));}}}}}return t;},scanr:function(a,f,z,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var n=a.length,t=new Array(n+1),i=n;t[n]=z;for(;i>0;--i,z=f.call(o,z,a[i],i,a),t[i]=z){}return t;},scanr1:function(a,f,o){if(typeof a=="string"){a=a.split("");}o=o||d.global;f=df.lambda(f);var n=a.length,t=new Array(n),z=a[n-1],i=n-1;t[i]=z;for(;i>0;--i,z=f.call(o,z,a[i],i,a),t[i]=z){}return t;}});})();}if(!dojo._hasResource["dojox.charting.action2d.MoveSlice"]){dojo._hasResource["dojox.charting.action2d.MoveSlice"]=true;dojo.provide("dojox.charting.action2d.MoveSlice");(function(){var _48d=1.05,_48e=7,m=dojox.gfx.matrix,gf=dojox.gfx.fx,df=dojox.lang.functional;dojo.declare("dojox.charting.action2d.MoveSlice",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,scale:_48d,shift:_48e},optionalParams:{},constructor:function(_48f,plot,_490){if(!_490){_490={};}this.scale=typeof _490.scale=="number"?_490.scale:_48d;this.shift=typeof _490.shift=="number"?_490.shift:_48e;this.connect();},process:function(o){if(!o.shape||o.element!="slice"||!(o.type in this.overOutEvents)){return;}if(!this.angles){var _491=m._degToRad(o.plot.opt.startAngle);if(typeof o.run.data[0]=="number"){this.angles=df.map(df.scanl(o.run.data,"+",_491),"* 2 * Math.PI / this",df.foldl(o.run.data,"+",0));}else{this.angles=df.map(df.scanl(o.run.data,"a + b.y",_491),"* 2 * Math.PI / this",df.foldl(o.run.data,"a + b.y",0));}}var _492=o.index,anim,_493,_494,_495,_496,_497=(this.angles[_492]+this.angles[_492+1])/2,_498=m.rotateAt(-_497,o.cx,o.cy),_499=m.rotateAt(_497,o.cx,o.cy);anim=this.anim[_492];if(anim){anim.action.stop(true);}else{this.anim[_492]=anim={};}if(o.type=="onmouseover"){_495=0;_496=this.shift;_493=1;_494=this.scale;}else{_495=this.shift;_496=0;_493=this.scale;_494=1;}anim.action=dojox.gfx.fx.animateTransform({shape:o.shape,duration:this.duration,easing:this.easing,transform:[_499,{name:"translate",start:[_495,0],end:[_496,0]},{name:"scaleAt",start:[_493,o.cx,o.cy],end:[_494,o.cx,o.cy]},_498]});if(o.type=="onmouseout"){dojo.connect(anim.action,"onEnd",this,function(){delete this.anim[_492];});}anim.action.play();},reset:function(){delete this.angles;}});})();}if(!dojo._hasResource["dojox.charting.action2d.Shake"]){dojo._hasResource["dojox.charting.action2d.Shake"]=true;dojo.provide("dojox.charting.action2d.Shake");(function(){var _49a=3,m=dojox.gfx.matrix,gf=dojox.gfx.fx;dojo.declare("dojox.charting.action2d.Shake",dojox.charting.action2d.Base,{defaultParams:{duration:400,easing:dojo.fx.easing.backOut,shiftX:_49a,shiftY:_49a},optionalParams:{},constructor:function(_49b,plot,_49c){if(!_49c){_49c={};}this.shiftX=typeof _49c.shiftX=="number"?_49c.shiftX:_49a;this.shiftY=typeof _49c.shiftY=="number"?_49c.shiftY:_49a;this.connect();},process:function(o){if(!o.shape||!(o.type in this.overOutEvents)){return;}var _49d=o.run.name,_49e=o.index,_49f=[],anim,_4a0=o.type=="onmouseover"?this.shiftX:-this.shiftX,_4a1=o.type=="onmouseover"?this.shiftY:-this.shiftY;if(_49d in this.anim){anim=this.anim[_49d][_49e];}else{this.anim[_49d]={};}if(anim){anim.action.stop(true);}else{this.anim[_49d][_49e]=anim={};}var _4a2={shape:o.shape,duration:this.duration,easing:this.easing,transform:[{name:"translate",start:[this.shiftX,this.shiftY],end:[0,0]},m.identity]};if(o.shape){_49f.push(gf.animateTransform(_4a2));}if(o.oultine){_4a2.shape=o.outline;_49f.push(gf.animateTransform(_4a2));}if(o.shadow){_4a2.shape=o.shadow;_49f.push(gf.animateTransform(_4a2));}if(!_49f.length){delete this.anim[_49d][_49e];return;}anim.action=dojo.fx.combine(_49f);if(o.type=="onmouseout"){dojo.connect(anim.action,"onEnd",this,function(){if(this.anim[_49d]){delete this.anim[_49d][_49e];}});}anim.action.play();}});})();}if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_4a3,_4a4){if(!dojo.date.stamp._isoRegExp){dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;}var _4a5=dojo.date.stamp._isoRegExp.exec(_4a3),_4a6=null;if(_4a5){_4a5.shift();if(_4a5[1]){_4a5[1]--;}if(_4a5[6]){_4a5[6]*=1000;}if(_4a4){_4a4=new Date(_4a4);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(prop){return _4a4["get"+prop]();}),function(_4a7,_4a8){_4a5[_4a8]=_4a5[_4a8]||_4a7;});}_4a6=new Date(_4a5[0]||1970,_4a5[1]||0,_4a5[2]||1,_4a5[3]||0,_4a5[4]||0,_4a5[5]||0,_4a5[6]||0);if(_4a5[0]<100){_4a6.setFullYear(_4a5[0]||1970);}var _4a9=0,_4aa=_4a5[7]&&_4a5[7].charAt(0);if(_4aa!="Z"){_4a9=((_4a5[8]||0)*60)+(Number(_4a5[9])||0);if(_4aa!="-"){_4a9*=-1;}}if(_4aa){_4a9-=_4a6.getTimezoneOffset();}if(_4a9){_4a6.setTime(_4a6.getTime()+_4a9*60000);}}return _4a6;};dojo.date.stamp.toISOString=function(_4ab,_4ac){var _4ad=function(n){return (n<10)?"0"+n:n;};_4ac=_4ac||{};var _4ae=[],_4af=_4ac.zulu?"getUTC":"get",date="";if(_4ac.selector!="time"){var year=_4ab[_4af+"FullYear"]();date=["0000".substr((year+"").length)+year,_4ad(_4ab[_4af+"Month"]()+1),_4ad(_4ab[_4af+"Date"]())].join("-");}_4ae.push(date);if(_4ac.selector!="date"){var time=[_4ad(_4ab[_4af+"Hours"]()),_4ad(_4ab[_4af+"Minutes"]()),_4ad(_4ab[_4af+"Seconds"]())].join(":");var _4b0=_4ab[_4af+"Milliseconds"]();if(_4ac.milliseconds){time+="."+(_4b0<100?"0":"")+_4ad(_4b0);}if(_4ac.zulu){time+="Z";}else{if(_4ac.selector!="time"){var _4b1=_4ab.getTimezoneOffset();var _4b2=Math.abs(_4b1);time+=(_4b1>0?"-":"+")+_4ad(Math.floor(_4b2/60))+":"+_4ad(_4b2%60);}}_4ae.push(time);}return _4ae.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;this._attrName=d._scopeName+"Type";this._query="["+this._attrName+"]";function _4b3(_4b4){if(d.isString(_4b4)){return "string";}if(typeof _4b4=="number"){return "number";}if(typeof _4b4=="boolean"){return "boolean";}if(d.isFunction(_4b4)){return "function";}if(d.isArray(_4b4)){return "array";}if(_4b4 instanceof Date){return "date";}if(_4b4 instanceof d._Url){return "url";}return "object";};function _4b5(_4b6,type){switch(type){case "string":return _4b6;case "number":return _4b6.length?Number(_4b6):NaN;case "boolean":return typeof _4b6=="boolean"?_4b6:!(_4b6.toLowerCase()=="false");case "function":if(d.isFunction(_4b6)){_4b6=_4b6.toString();_4b6=d.trim(_4b6.substring(_4b6.indexOf("{")+1,_4b6.length-1));}try{if(_4b6===""||_4b6.search(/[^\w\.]+/i)!=-1){return new Function(_4b6);}else{return d.getObject(_4b6,false)||new Function(_4b6);}}catch(e){return new Function();}case "array":return _4b6?_4b6.split(/\s*,\s*/):[];case "date":switch(_4b6){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_4b6);}case "url":return d.baseUrl+_4b6;default:return d.fromJson(_4b6);}};var _4b7={};dojo.connect(dojo,"extend",function(){_4b7={};});function _4b8(_4b9){if(!_4b7[_4b9]){var cls=d.getObject(_4b9);if(!cls){return null;}var _4ba=cls.prototype;var _4bb={},_4bc={};for(var name in _4ba){if(name.charAt(0)=="_"){continue;}if(name in _4bc){continue;}var _4bd=_4ba[name];_4bb[name]=_4b3(_4bd);}_4b7[_4b9]={cls:cls,params:_4bb};}return _4b7[_4b9];};this._functionFromScript=function(_4be){var _4bf="";var _4c0="";var _4c1=_4be.getAttribute("args");if(_4c1){d.forEach(_4c1.split(/\s*,\s*/),function(part,idx){_4bf+="var "+part+" = arguments["+idx+"]; ";});}var _4c2=_4be.getAttribute("with");if(_4c2&&_4c2.length){d.forEach(_4c2.split(/\s*,\s*/),function(part){_4bf+="with("+part+"){";_4c0+="}";});}return new Function(_4bf+_4be.innerHTML+_4c0);};this.instantiate=function(_4c3,_4c4,args){var _4c5=[],dp=dojo.parser;_4c4=_4c4||{};args=args||{};d.forEach(_4c3,function(obj){if(!obj){return;}var node,type,_4c6,_4c7,_4c8;if(obj.node){node=obj.node;type=obj.type;_4c6=obj.clsInfo||(type&&_4b8(type));_4c7=_4c6&&_4c6.cls;_4c8=obj.scripts;}else{node=obj;type=dp._attrName in _4c4?_4c4[dp._attrName]:node.getAttribute(dp._attrName);_4c6=type&&_4b8(type);_4c7=_4c6&&_4c6.cls;_4c8=(_4c7&&(_4c7._noScript||_4c7.prototype._noScript)?[]:d.query("> script[type^='dojo/']",node));}if(!_4c6){throw new Error("Could not load class '"+type);}var _4c9={},_4ca=node.attributes;if(args.defaults){dojo.mixin(_4c9,args.defaults);}if(obj.inherited){dojo.mixin(_4c9,obj.inherited);}for(var name in _4c6.params){var item=name in _4c4?{value:_4c4[name],specified:true}:_4ca.getNamedItem(name);if(!item||(!item.specified&&(!dojo.isIE||name.toLowerCase()!="value"))){continue;}var _4cb=item.value;switch(name){case "class":_4cb="className" in _4c4?_4c4.className:node.className;break;case "style":_4cb="style" in _4c4?_4c4.style:(node.style&&node.style.cssText);}var _4cc=_4c6.params[name];if(typeof _4cb=="string"){_4c9[name]=_4b5(_4cb,_4cc);}else{_4c9[name]=_4cb;}}var _4cd=[],_4ce=[];d.forEach(_4c8,function(_4cf){node.removeChild(_4cf);var _4d0=_4cf.getAttribute("event"),type=_4cf.getAttribute("type"),nf=d.parser._functionFromScript(_4cf);if(_4d0){if(type=="dojo/connect"){_4cd.push({event:_4d0,func:nf});}else{_4c9[_4d0]=nf;}}else{_4ce.push(nf);}});var _4d1=_4c7.markupFactory||_4c7.prototype&&_4c7.prototype.markupFactory;var _4d2=_4d1?_4d1(_4c9,node,_4c7):new _4c7(_4c9,node);_4c5.push(_4d2);var _4d3=node.getAttribute("jsId");if(_4d3){d.setObject(_4d3,_4d2);}d.forEach(_4cd,function(_4d4){d.connect(_4d2,_4d4.event,null,_4d4.func);});d.forEach(_4ce,function(func){func.call(_4d2);});});if(!_4c4._started){d.forEach(_4c5,function(_4d5){if(!args.noStart&&_4d5&&_4d5.startup&&!_4d5._started&&(!_4d5.getParent||!_4d5.getParent())){_4d5.startup();}});}return _4c5;};this.parse=function(_4d6,args){var root;if(!args&&_4d6&&_4d6.rootNode){args=_4d6;root=args.rootNode;}else{root=_4d6;}var _4d7=this._attrName;function scan(_4d8,list){var _4d9=dojo.clone(_4d8.inherited);dojo.forEach(["dir","lang"],function(name){var val=_4d8.node.getAttribute(name);if(val){_4d9[name]=val;}});var _4da=_4d8.scripts;var _4db=!_4d8.clsInfo||!_4d8.clsInfo.cls.prototype.stopParser;for(var _4dc=_4d8.node.firstChild;_4dc;_4dc=_4dc.nextSibling){if(_4dc.nodeType==1){var type=_4db&&_4dc.getAttribute(_4d7);if(type){var _4dd={"type":type,clsInfo:_4b8(type),node:_4dc,scripts:[],inherited:_4d9};list.push(_4dd);scan(_4dd,list);}else{if(_4da&&_4dc.nodeName.toLowerCase()=="script"){type=_4dc.getAttribute("type");if(type&&/^dojo\//i.test(type)){_4da.push(_4dc);}}else{if(_4db){scan({node:_4dc,inherited:_4d9},list);}}}}}};var list=[];scan({node:root?dojo.byId(root):dojo.body(),inherited:(args&&args.inherited)||{dir:dojo._isBodyLtr()?"ltr":"rtl"}},list);return this.instantiate(list,null,args);};}();(function(){var _4de=function(){if(dojo.config.parseOnLoad){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_4de);}else{dojo._loaders.unshift(_4de);}})();}if(!dojo._hasResource["dojo.cache"]){dojo._hasResource["dojo.cache"]=true;dojo.provide("dojo.cache");(function(){var _4df={};dojo.cache=function(_4e0,url,_4e1){if(typeof _4e0=="string"){var _4e2=dojo.moduleUrl(_4e0,url);}else{_4e2=_4e0;_4e1=url;}var key=_4e2.toString();var val=_4e1;if(_4e1!=undefined&&!dojo.isString(_4e1)){val=("value" in _4e1?_4e1.value:undefined);}var _4e3=_4e1&&_4e1.sanitize?true:false;if(typeof val=="string"){val=_4df[key]=_4e3?dojo.cache._sanitize(val):val;}else{if(val===null){delete _4df[key];}else{if(!(key in _4df)){val=dojo._getText(key);_4df[key]=_4e3?dojo.cache._sanitize(val):val;}val=_4df[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _4e4=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_4e4){val=_4e4[1];}}else{val="";}return val;};})();}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){this._attachPoints=[];},_stringRepl:function(tmpl){var _4e5=this.declaredClass,_4e6=this;return dojo.string.substitute(tmpl,this,function(_4e7,key){if(key.charAt(0)=="!"){_4e7=dojo.getObject(key.substr(1),false,_4e6);}if(typeof _4e7=="undefined"){throw new Error(_4e5+" template:"+key);}if(_4e7==null){return "";}return key.charAt(0)=="!"?_4e7:_4e7.toString().replace(/"/g,"&quot;");},this);},buildRendering:function(){var _4e8=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_4e8)){node=dojo._toDom(this._stringRepl(_4e8));if(node.nodeType!=1){throw new Error("Invalid template: "+_4e8);}}else{node=_4e8.cloneNode(true);}this.domNode=node;this._attachTemplateNodes(node);if(this.widgetsInTemplate){var _4e9=dojo.parser,qry,attr;if(_4e9._query!="[dojoType]"){qry=_4e9._query;attr=_4e9._attrName;_4e9._query="[dojoType]";_4e9._attrName="dojoType";}var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));if(qry){_4e9._query=qry;_4e9._attrName=attr;}this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_4ea){var dest=this.containerNode;if(_4ea&&dest){while(_4ea.hasChildNodes()){dest.appendChild(_4ea.firstChild);}}},_attachTemplateNodes:function(_4eb,_4ec){_4ec=_4ec||function(n,p){return n.getAttribute(p);};var _4ed=dojo.isArray(_4eb)?_4eb:(_4eb.all||_4eb.getElementsByTagName("*"));var x=dojo.isArray(_4eb)?0:-1;for(;x<_4ed.length;x++){var _4ee=(x==-1)?_4eb:_4ed[x];if(this.widgetsInTemplate&&_4ec(_4ee,"dojoType")){continue;}var _4ef=_4ec(_4ee,"dojoAttachPoint");if(_4ef){var _4f0,_4f1=_4ef.split(/\s*,\s*/);while((_4f0=_4f1.shift())){if(dojo.isArray(this[_4f0])){this[_4f0].push(_4ee);}else{this[_4f0]=_4ee;}this._attachPoints.push(_4f0);}}var _4f2=_4ec(_4ee,"dojoAttachEvent");if(_4f2){var _4f3,_4f4=_4f2.split(/\s*,\s*/);var trim=dojo.trim;while((_4f3=_4f4.shift())){if(_4f3){var _4f5=null;if(_4f3.indexOf(":")!=-1){var _4f6=_4f3.split(":");_4f3=trim(_4f6[0]);_4f5=trim(_4f6[1]);}else{_4f3=trim(_4f3);}if(!_4f5){_4f5=_4f3;}this.connect(_4ee,_4f3,_4f5);}}}var role=_4ec(_4ee,"waiRole");if(role){dijit.setWaiRole(_4ee,role);}var _4f7=_4ec(_4ee,"waiState");if(_4f7){dojo.forEach(_4f7.split(/\s*,\s*/),function(_4f8){if(_4f8.indexOf("-")!=-1){var pair=_4f8.split("-");dijit.setWaiState(_4ee,pair[0],pair[1]);}});}}},startup:function(){dojo.forEach(this._startupWidgets,function(w){if(w&&!w._started&&w.startup){w.startup();}});this.inherited(arguments);},destroyRendering:function(){dojo.forEach(this._attachPoints,function(_4f9){delete this[_4f9];},this);this._attachPoints=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_4fa,_4fb,_4fc){var _4fd=dijit._Templated._templateCache;var key=_4fb||_4fa;var _4fe=_4fd[key];if(_4fe){try{if(!_4fe.ownerDocument||_4fe.ownerDocument==dojo.doc){return _4fe;}}catch(e){}dojo.destroy(_4fe);}if(!_4fb){_4fb=dojo.cache(_4fa,{sanitize:true});}_4fb=dojo.string.trim(_4fb);if(_4fc||_4fb.match(/\$\{([^\}]+)\}/g)){return (_4fd[key]=_4fb);}else{var node=dojo._toDom(_4fb);if(node.nodeType!=1){throw new Error("Invalid template: "+_4fb);}return (_4fd[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _4ff=dijit._Templated._templateCache;for(var key in _4ff){var _500=_4ff[key];if(typeof _500=="object"){dojo.destroy(_500);}delete _4ff[key];}});}dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{duration:dijit.defaultDuration,templateString:dojo.cache("dijit","templates/Tooltip.html","<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n"),postCreate:function(){dojo.body().appendChild(this.domNode);this.bgIframe=new dijit.BackgroundIframe(this.domNode);this.fadeIn=dojo.fadeIn({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onShow")});this.fadeOut=dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onHide")});},show:function(_501,_502,_503,rtl){if(this.aroundNode&&this.aroundNode===_502){return;}if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_501;var pos=dijit.placeOnScreenAroundElement(this.domNode,_502,dijit.getPopupAroundAlignment((_503&&_503.length)?_503:dijit.Tooltip.defaultPosition,!rtl),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_502;},orient:function(node,_504,_505){node.className="dijitTooltip "+{"BL-TL":"dijitTooltipBelow dijitTooltipABLeft","TL-BL":"dijitTooltipAbove dijitTooltipABLeft","BR-TR":"dijitTooltipBelow dijitTooltipABRight","TR-BR":"dijitTooltipAbove dijitTooltipABRight","BR-BL":"dijitTooltipRight","BL-BR":"dijitTooltipLeft"}[_504+"-"+_505];},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_506){if(this._onDeck&&this._onDeck[1]==_506){this._onDeck=null;}else{if(this.aroundNode===_506){this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();}else{}}},_onHide:function(){this.domNode.style.cssText="";this.containerNode.innerHTML="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_507,_508,_509,rtl){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_507,_508,_509,rtl);};dijit.hideTooltip=function(_50a){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_50a);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],constructor:function(){this._nodeConnectionsById={};},_setConnectIdAttr:function(_50b){for(var _50c in this._nodeConnectionsById){this.removeTarget(_50c);}dojo.forEach(dojo.isArrayLike(_50b)?_50b:[_50b],this.addTarget,this);},_getConnectIdAttr:function(){var ary=[];for(var id in this._nodeConnectionsById){ary.push(id);}return ary;},addTarget:function(id){var node=dojo.byId(id);if(!node){return;}if(node.id in this._nodeConnectionsById){return;}this._nodeConnectionsById[node.id]=[this.connect(node,"onmouseenter","_onTargetMouseEnter"),this.connect(node,"onmouseleave","_onTargetMouseLeave"),this.connect(node,"onfocus","_onTargetFocus"),this.connect(node,"onblur","_onTargetBlur")];},removeTarget:function(node){var id=node.id||node;if(id in this._nodeConnectionsById){dojo.forEach(this._nodeConnectionsById[id],this.disconnect,this);delete this._nodeConnectionsById[id];}},postCreate:function(){dojo.addClass(this.domNode,"dijitTooltipData");},startup:function(){this.inherited(arguments);var ids=this.connectId;dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);},_onTargetMouseEnter:function(e){this._onHover(e);},_onTargetMouseLeave:function(e){this._onUnHover(e);},_onTargetFocus:function(e){this._focus=true;this._onHover(e);},_onTargetBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _50d=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_50d);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_50e){if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_50e,this.position,!this.isLeftToRight());this._connectNode=_50e;this.onShow(_50e,this.position);},close:function(){if(this._connectNode){dijit.hideTooltip(this._connectNode);delete this._connectNode;this.onHide();}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},onShow:function(_50f,_510){},onHide:function(){},uninitialize:function(){this.close();this.inherited(arguments);}});dijit.Tooltip.defaultPosition=["after","before"];}if(!dojo._hasResource["dojox.charting.action2d.Tooltip"]){dojo._hasResource["dojox.charting.action2d.Tooltip"]=true;dojo.provide("dojox.charting.action2d.Tooltip");(function(){var _511=function(o){var t=o.run&&o.run.data&&o.run.data[o.index];if(t&&typeof t!="number"&&(t.tooltip||t.text)){return t.tooltip||t.text;}if(o.element=="candlestick"){return "<table cellpadding=\"1\" cellspacing=\"0\" border=\"0\" style=\"font-size:0.9em;\">"+"<tr><td>Open:</td><td align=\"right\"><strong>"+o.data.open+"</strong></td></tr>"+"<tr><td>High:</td><td align=\"right\"><strong>"+o.data.high+"</strong></td></tr>"+"<tr><td>Low:</td><td align=\"right\"><strong>"+o.data.low+"</strong></td></tr>"+"<tr><td>Close:</td><td align=\"right\"><strong>"+o.data.close+"</strong></td></tr>"+(o.data.mid!==undefined?"<tr><td>Mid:</td><td align=\"right\"><strong>"+o.data.mid+"</strong></td></tr>":"")+"</table>";}return o.element=="bar"?o.x:o.y;};var df=dojox.lang.functional,m=dojox.gfx.matrix,pi4=Math.PI/4,pi2=Math.PI/2;dojo.declare("dojox.charting.action2d.Tooltip",dojox.charting.action2d.Base,{defaultParams:{text:_511},optionalParams:{},constructor:function(_512,plot,_513){this.text=_513&&_513.text?_513.text:_511;this.connect();},process:function(o){if(o.type==="onplotreset"||o.type==="onmouseout"){_514(this.aroundRect);this.aroundRect=null;return;}if(!o.shape||o.type!=="onmouseover"){return;}var _515={type:"rect"},_516=["after","before"];switch(o.element){case "marker":_515.x=o.cx;_515.y=o.cy;_515.width=_515.height=1;break;case "circle":_515.x=o.cx-o.cr;_515.y=o.cy-o.cr;_515.width=_515.height=2*o.cr;break;case "column":_516=["above","below"];case "bar":_515=dojo.clone(o.shape.getShape());break;case "candlestick":_515.x=o.x;_515.y=o.y;_515.width=o.width;_515.height=o.height;break;default:if(!this.angles){if(typeof o.run.data[0]=="number"){this.angles=df.map(df.scanl(o.run.data,"+",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"+",0));}else{this.angles=df.map(df.scanl(o.run.data,"a + b.y",0),"* 2 * Math.PI / this",df.foldl(o.run.data,"a + b.y",0));}}var _517=m._degToRad(o.plot.opt.startAngle),_518=(this.angles[o.index]+this.angles[o.index+1])/2+_517;_515.x=o.cx+o.cr*Math.cos(_518);_515.y=o.cy+o.cr*Math.sin(_518);_515.width=_515.height=1;if(_518<pi4){}else{if(_518<pi2+pi4){_516=["below","above"];}else{if(_518<Math.PI+pi4){_516=["before","after"];}else{if(_518<2*Math.PI-pi4){_516=["above","below"];}}}}break;}var lt=dojo.coords(this.chart.node,true);_515.x+=lt.x;_515.y+=lt.y;_515.x=Math.round(_515.x);_515.y=Math.round(_515.y);_515.width=Math.ceil(_515.width);_515.height=Math.ceil(_515.height);this.aroundRect=_515;_519(this.text(o),this.aroundRect,_516,"center");}});var _51a=dojo.declare(dijit._MasterTooltip,{show:function(_51b,_51c,_51d,_51e){if(this.aroundNode&&this.aroundNode===_51c){return;}if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_51b;this.domNode.style.top=(this.domNode.offsetTop+1)+"px";if(!this.connectorNode){this.connectorNode=dojo.query(".dijitTooltipConnector",this.domNode)[0];}var _51f=dojo.coords(this.connectorNode);this.arrowWidth=_51f.w,this.arrowHeight=_51f.h;this.place=(_51e&&_51e=="center")?this.placeChartingTooltip:dijit.placeOnScreenAroundElement,this.place(this.domNode,_51c,dijit.getPopupAroundAlignment((_51d&&_51d.length)?_51d:dijit.Tooltip.defaultPosition,this.isLeftToRight()),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_51c;},placeChartingTooltip:function(node,_520,_521,_522){return this._placeOnScreenAroundRect(node,_520.x,_520.y,_520.width,_520.height,_521,_522);},_placeOnScreenAroundRect:function(node,x,y,_523,_524,_525,_526){var _527=[];for(var _528 in _525){_527.push({aroundCorner:_528,corner:_525[_528],pos:{x:x+(_528.charAt(1)=="L"?0:_523),y:y+(_528.charAt(0)=="T"?0:_524),w:_523,h:_524}});}return this._place(node,_527,_526);},_place:function(node,_529,_52a){var view=dijit.getViewport();if(!node.parentNode||String(node.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(node);}var best=null;var _52b=null,_52c=null;dojo.some(_529,function(_52d){var _52e=_52d.corner;var _52f=_52d.aroundCorner;var pos=_52d.pos;if(_52a){_52a(node,_52d.aroundCorner,_52e);}var _530=node.style;var _531=_530.display;var _532=_530.visibility;_530.visibility="hidden";_530.display="";var mb=dojo.marginBox(node);_530.display=_531;_530.visibility=_532;var _533,_534,endX,endY,_535,_536,_537;_52b=null,_52c=null;if(_52f.charAt(0)==_52e.charAt(0)){_533=(_52e.charAt(1)=="L"?pos.x:Math.max(view.l,pos.x-mb.w)),_534=(_52e.charAt(0)=="T"?(pos.y+pos.h/2-mb.h/2):(pos.y-pos.h/2-mb.h/2)),endX=(_52e.charAt(1)=="L"?Math.min(view.l+view.w,_533+mb.w):pos.x),endY=_534+mb.h,_535=endX-_533,_536=endY-_534,_537=(mb.w-_535)+(mb.h-_536);_52c=(mb.h-this.arrowHeight)/2;}else{_533=(_52e.charAt(1)=="L"?(pos.x+pos.w/2-mb.w/2):(pos.x-pos.w/2-mb.w/2)),_534=(_52e.charAt(0)=="T"?pos.y:Math.max(view.t,pos.y-mb.h)),endX=_533+mb.w,endY=(_52e.charAt(0)=="T"?Math.min(view.t+view.h,_534+mb.h):pos.y),_535=endX-_533,_536=endY-_534,_537=(mb.w-_535)+(mb.h-_536);_52b=(mb.w-this.arrowWidth)/2;}if(best==null||_537<best.overflow){best={corner:_52e,aroundCorner:_52d.aroundCorner,x:_533,y:_534,w:_535,h:_536,overflow:_537};}return !_537;},this);node.style.left=best.x+"px";node.style.top=best.y+"px";this.connectorNode.style.top="";this.connectorNode.style.left="";if(_52c){this.connectorNode.style.top=_52c+"px";}if(_52b){this.connectorNode.style.left=_52b+"px";}if(best.overflow&&_52a){_52a(node,best.aroundCorner,best.corner);}return best;}});var _538=null;function _519(_539,_53a,_53b,_53c){if(!_538){_538=new _51a();}return _538.show(_539,_53a,_53b,_53c);};function _514(_53d){if(!_538){_538=new _51a();}return _538.hide(_53d);};})();}if(!dojo._hasResource["dojox.charting.widget.Chart2D"]){dojo._hasResource["dojox.charting.widget.Chart2D"]=true;dojo.provide("dojox.charting.widget.Chart2D");(function(){var _53e,_53f,_540,_541,_542,_543=function(o){return o;},df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting,d=dojo;dojo.declare("dojox.charting.widget.Chart2D",dijit._Widget,{theme:null,margins:null,stroke:null,fill:null,buildRendering:function(){var n=this.domNode=this.srcNodeRef;var axes=d.query("> .axis",n).map(_53f).filter(_543),_544=d.query("> .plot",n).map(_540).filter(_543),_545=d.query("> .action",n).map(_541).filter(_543),_546=d.query("> .series",n).map(_542).filter(_543);n.innerHTML="";var c=this.chart=new dc.Chart2D(n,{margins:this.margins,stroke:this.stroke,fill:this.fill});if(this.theme){c.setTheme(this.theme);}axes.forEach(function(axis){c.addAxis(axis.name,axis.kwArgs);});_544.forEach(function(plot){c.addPlot(plot.name,plot.kwArgs);});this.actions=_545.map(function(_547){return new _547.action(c,_547.plot,_547.kwArgs);});var _548=df.foldl(_546,function(_549,_54a){if(_54a.type=="data"){c.addSeries(_54a.name,_54a.data,_54a.kwArgs);_549=true;}else{c.addSeries(_54a.name,[0],_54a.kwArgs);var kw={};du.updateWithPattern(kw,_54a.kwArgs,{"query":"","queryOptions":null,"start":0,"count":1},true);if(_54a.kwArgs.sort){kw.sort=dojo.clone(_54a.kwArgs.sort);}d.mixin(kw,{onComplete:function(data){var _54b;if("valueFn" in _54a.kwArgs){var fn=_54a.kwArgs.valueFn;_54b=d.map(data,function(x){return fn(_54a.data.getValue(x,_54a.field,0));});}else{_54b=d.map(data,function(x){return _54a.data.getValue(x,_54a.field,0);});}c.addSeries(_54a.name,_54b,_54a.kwArgs).render();}});_54a.data.fetch(kw);}return _549;},false);if(_548){c.render();}},destroy:function(){this.chart.destroy();this.inherited(arguments);},resize:function(box){if(box.w>0&&box.h>0){dojo.marginBox(this.domNode,box);this.chart.resize();}}});_53e=function(node,type,kw){var dp=eval("("+type+".prototype.defaultParams)");var x,attr;for(x in dp){if(x in kw){continue;}attr=node.getAttribute(x);kw[x]=du.coerceType(dp[x],attr==null||typeof attr=="undefined"?dp[x]:attr);}var op=eval("("+type+".prototype.optionalParams)");for(x in op){if(x in kw){continue;}attr=node.getAttribute(x);if(attr!=null){kw[x]=du.coerceType(op[x],attr);}}};_53f=function(node){var name=node.getAttribute("name"),type=node.getAttribute("type");if(!name){return null;}var o={name:name,kwArgs:{}},kw=o.kwArgs;if(type){if(dc.axis2d[type]){type=dojox._scopeName+".charting.axis2d."+type;}var axis=eval("("+type+")");if(axis){kw.type=axis;}}else{type=dojox._scopeName+".charting.axis2d.Default";}_53e(node,type,kw);if(kw.font||kw.fontColor){if(!kw.tick){kw.tick={};}if(kw.font){kw.tick.font=kw.font;}if(kw.fontColor){kw.tick.fontColor=kw.fontColor;}}return o;};_540=function(node){var name=node.getAttribute("name"),type=node.getAttribute("type");if(!name){return null;}var o={name:name,kwArgs:{}},kw=o.kwArgs;if(type){if(dc.plot2d[type]){type=dojox._scopeName+".charting.plot2d."+type;}var plot=eval("("+type+")");if(plot){kw.type=plot;}}else{type=dojox._scopeName+".charting.plot2d.Default";}_53e(node,type,kw);return o;};_541=function(node){var plot=node.getAttribute("plot"),type=node.getAttribute("type");if(!plot){plot="default";}var o={plot:plot,kwArgs:{}},kw=o.kwArgs;if(type){if(dc.action2d[type]){type=dojox._scopeName+".charting.action2d."+type;}var _54c=eval("("+type+")");if(!_54c){return null;}o.action=_54c;}else{return null;}_53e(node,type,kw);return o;};_542=function(node){var ga=d.partial(d.attr,node);var name=ga("name");if(!name){return null;}var o={name:name,kwArgs:{}},kw=o.kwArgs,t;t=ga("plot");if(t!=null){kw.plot=t;}t=ga("marker");if(t!=null){kw.marker=t;}t=ga("stroke");if(t!=null){kw.stroke=eval("("+t+")");}t=ga("outline");if(t!=null){kw.outline=eval("("+t+")");}t=ga("shadow");if(t!=null){kw.shadow=eval("("+t+")");}t=ga("fill");if(t!=null){kw.fill=eval("("+t+")");}t=ga("font");if(t!=null){kw.font=t;}t=ga("fontColor");if(t!=null){kw.fontColor=eval("("+t+")");}t=ga("legend");if(t!=null){kw.legend=t;}t=ga("data");if(t!=null){o.type="data";o.data=t?dojo.map(String(t).split(","),Number):[];return o;}t=ga("array");if(t!=null){o.type="data";o.data=eval("("+t+")");return o;}t=ga("store");if(t!=null){o.type="store";o.data=eval("("+t+")");t=ga("field");o.field=t!=null?t:"value";t=ga("query");if(!!t){kw.query=t;}t=ga("queryOptions");if(!!t){kw.queryOptions=eval("("+t+")");}t=ga("start");if(!!t){kw.start=Number(t);}t=ga("count");if(!!t){kw.count=Number(t);}t=ga("sort");if(!!t){kw.sort=eval("("+t+")");}t=ga("valueFn");if(!!t){kw.valueFn=df.lambda(t);}return o;}return null;};})();}if(!dojo._hasResource["dojox.charting.themes.ET.greys"]){dojo._hasResource["dojox.charting.themes.ET.greys"]=true;dojo.provide("dojox.charting.themes.ET.greys");dojo.deprecated("dojox.charting.themes.ET.greys","1.3");(function(){var dxc=dojox.charting;dxc.themes.ET.greys=new dxc.Theme({antiAlias:false,chart:{stroke:null,fill:"inherit"},plotarea:{stroke:null,fill:"transparent"},axis:{stroke:{width:0},line:{width:0},majorTick:{color:"#666666",width:1,length:5},minorTick:{color:"black",width:0.5,length:2},font:"normal normal normal 8pt Tahoma",fontColor:"#999999"},series:{outline:{width:0,color:"black"},stroke:{width:1,color:"black"},fill:dojo.colorFromHex("#3b444b"),font:"normal normal normal 7pt Tahoma",fontColor:"#717171"},marker:{stroke:{width:1},fill:"#333",font:"normal normal normal 7pt Tahoma",fontColor:"#000"},colors:[dojo.colorFromHex("#8a8c8f"),dojo.colorFromHex("#4b4b4b"),dojo.colorFromHex("#3b444b"),dojo.colorFromHex("#2e2d30"),dojo.colorFromHex("#000000")]});})();}if(!dojo._hasResource["dojox.charting.widget.Sparkline"]){dojo._hasResource["dojox.charting.widget.Sparkline"]=true;dojo.provide("dojox.charting.widget.Sparkline");(function(){var d=dojo;dojo.declare("dojox.charting.widget.Sparkline",dojox.charting.widget.Chart2D,{theme:dojox.charting.themes.ET.greys,margins:{l:0,r:0,t:0,b:0},type:"Lines",valueFn:"Number(x)",store:"",field:"",query:"",queryOptions:"",start:"0",count:"Infinity",sort:"",data:"",name:"default",buildRendering:function(){var n=this.srcNodeRef;if(!n.childNodes.length||!d.query("> .axis, > .plot, > .action, > .series",n).length){var plot=document.createElement("div");d.attr(plot,{"class":"plot","name":"default","type":this.type});n.appendChild(plot);var _54d=document.createElement("div");d.attr(_54d,{"class":"series",plot:"default",name:this.name,start:this.start,count:this.count,valueFn:this.valueFn});d.forEach(["store","field","query","queryOptions","sort","data"],function(i){if(this[i].length){d.attr(_54d,i,this[i]);}},this);n.appendChild(_54d);}this.inherited(arguments);}});})();}if(!dojo._hasResource["dojox.charting.widget.Legend"]){dojo._hasResource["dojox.charting.widget.Legend"]=true;dojo.provide("dojox.charting.widget.Legend");dojo.declare("dojox.charting.widget.Legend",[dijit._Widget,dijit._Templated],{chartRef:"",horizontal:true,swatchSize:18,templateString:"<table dojoAttachPoint='legendNode' class='dojoxLegendNode'><tbody dojoAttachPoint='legendBody'></tbody></table>",legendNode:null,legendBody:null,postCreate:function(){if(!this.chart){if(!this.chartRef){return;}this.chart=dijit.byId(this.chartRef);if(!this.chart){var node=dojo.byId(this.chartRef);if(node){this.chart=dijit.byNode(node);}else{return;}}this.series=this.chart.chart.series;}else{this.series=this.chart.series;}this.refresh();},refresh:function(){var df=dojox.lang.functional;if(this._surfaces){dojo.forEach(this._surfaces,function(_54e){_54e.destroy();});}this._surfaces=[];while(this.legendBody.lastChild){dojo.destroy(this.legendBody.lastChild);}if(this.horizontal){dojo.addClass(this.legendNode,"dojoxLegendHorizontal");this._tr=dojo.doc.createElement("tr");this.legendBody.appendChild(this._tr);this._inrow=0;}var s=this.series;if(s.length==0){return;}if(s[0].chart.stack[0].declaredClass=="dojox.charting.plot2d.Pie"){var t=s[0].chart.stack[0];if(typeof t.run.data[0]=="number"){var _54f=df.map(t.run.data,"Math.max(x, 0)");if(df.every(_54f,"<= 0")){return;}var _550=df.map(_54f,"/this",df.foldl(_54f,"+",0));dojo.forEach(_550,function(x,i){this._addLabel(t.dyn[i],t._getLabel(x*100)+"%");},this);}else{dojo.forEach(t.run.data,function(x,i){this._addLabel(t.dyn[i],x.legend||x.text||x.y);},this);}}else{dojo.forEach(s,function(x){this._addLabel(x.dyn,x.legend||x.name);},this);}},_addLabel:function(dyn,_551){var icon=dojo.doc.createElement("td"),text=dojo.doc.createElement("td"),div=dojo.doc.createElement("div");dojo.addClass(icon,"dojoxLegendIcon");dojo.addClass(text,"dojoxLegendText");div.style.width=this.swatchSize+"px";div.style.height=this.swatchSize+"px";icon.appendChild(div);if(this._tr){this._tr.appendChild(icon);this._tr.appendChild(text);if(++this._inrow===this.horizontal){this._tr=dojo.doc.createElement("tr");this.legendBody.appendChild(this._tr);this._inrow=0;}}else{var tr=dojo.doc.createElement("tr");this.legendBody.appendChild(tr);tr.appendChild(icon);tr.appendChild(text);}this._makeIcon(div,dyn);text.innerHTML=String(_551);},_makeIcon:function(div,dyn){var mb={h:this.swatchSize,w:this.swatchSize};var _552=dojox.gfx.createSurface(div,mb.w,mb.h);this._surfaces.push(_552);if(dyn.fill){_552.createRect({x:2,y:2,width:mb.w-4,height:mb.h-4}).setFill(dyn.fill).setStroke(dyn.stroke);}else{if(dyn.stroke||dyn.marker){var line={x1:0,y1:mb.h/2,x2:mb.w,y2:mb.h/2};if(dyn.stroke){_552.createLine(line).setStroke(dyn.stroke);}if(dyn.marker){var c={x:mb.w/2,y:mb.h/2};if(dyn.stroke){_552.createPath({path:"M"+c.x+" "+c.y+" "+dyn.marker}).setFill(dyn.stroke.color).setStroke(dyn.stroke);}else{_552.createPath({path:"M"+c.x+" "+c.y+" "+dyn.marker}).setFill(dyn.color).setStroke(dyn.color);}}}else{_552.createRect({x:2,y:2,width:mb.w-4,height:mb.h-4}).setStroke("black");_552.createLine({x1:2,y1:2,x2:mb.w-2,y2:mb.h-2}).setStroke("black");_552.createLine({x1:2,y1:mb.h-2,x2:mb.w-2,y2:2}).setStroke("black");}}}});}dojo.i18n._preloadLocalizations("dojox.charting.widget.nls.Chart2D",["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
Index: trunk/web/dojo/dojox/charting/widget/Chart2D.js.uncompressed.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/Chart2D.js.uncompressed.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/Chart2D.js.uncompressed.js	(revision 9)
@@ -0,0 +1,18567 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.window"] = true;
+dojo.provide("dojo.window");
+
+dojo.window.getBox = function(){
+	// summary:
+	//		Returns the dimensions and scroll position of the viewable area of a browser window
+
+	var scrollRoot = (dojo.doc.compatMode == 'BackCompat') ? dojo.body() : dojo.doc.documentElement;
+
+	// get scroll position
+	var scroll = dojo._docScroll(); // scrollRoot.scrollTop/Left should work
+	return { w: scrollRoot.clientWidth, h: scrollRoot.clientHeight, l: scroll.x, t: scroll.y };
+};
+
+dojo.window.get = function(doc){
+	// summary:
+	// 		Get window object associated with document doc
+
+	// In some IE versions (at least 6.0), document.parentWindow does not return a
+	// reference to the real window object (maybe a copy), so we must fix it as well
+	// We use IE specific execScript to attach the real window reference to
+	// document._parentWindow for later use
+	if(dojo.isIE && window !== document.parentWindow){
+		/*
+		In IE 6, only the variable "window" can be used to connect events (others
+		may be only copies).
+		*/
+		doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
+		//to prevent memory leak, unset it after use
+		//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
+		var win = doc._parentWindow;
+		doc._parentWindow = null;
+		return win;	//	Window
+	}
+
+	return doc.parentWindow || doc.defaultView;	//	Window
+};
+
+dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+	// summary:
+	//		Scroll the passed node into view, if it is not already.
+	
+	// don't rely on node.scrollIntoView working just because the function is there
+
+	try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method
+		node = dojo.byId(node);
+		var doc = node.ownerDocument || dojo.doc,
+			body = doc.body || dojo.body(),
+			html = doc.documentElement || body.parentNode,
+			isIE = dojo.isIE, isWK = dojo.isWebKit;
+		// if an untested browser, then use the native method
+		if((!(dojo.isMoz || isIE || isWK || dojo.isOpera) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){
+			node.scrollIntoView(false); // short-circuit to native if possible
+			return;
+		}
+		var backCompat = doc.compatMode == 'BackCompat',
+			clientAreaRoot = backCompat? body : html,
+			scrollRoot = isWK ? body : clientAreaRoot,
+			rootWidth = clientAreaRoot.clientWidth,
+			rootHeight = clientAreaRoot.clientHeight,
+			rtl = !dojo._isBodyLtr(),
+			nodePos = pos || dojo.position(node),
+			el = node.parentNode,
+			isFixed = function(el){
+				return ((isIE <= 6 || (isIE && backCompat))? false : (dojo.style(el, 'position').toLowerCase() == "fixed"));
+			};
+		if(isFixed(node)){ return; } // nothing to do
+
+		while(el){
+			if(el == body){ el = scrollRoot; }
+			var elPos = dojo.position(el),
+				fixedPos = isFixed(el);
+	
+			if(el == scrollRoot){
+				elPos.w = rootWidth; elPos.h = rootHeight;
+				if(scrollRoot == html && isIE && rtl){ elPos.x += scrollRoot.offsetWidth-elPos.w; } // IE workaround where scrollbar causes negative x
+				if(elPos.x < 0 || !isIE){ elPos.x = 0; } // IE can have values > 0
+				if(elPos.y < 0 || !isIE){ elPos.y = 0; }
+			}else{
+				var pb = dojo._getPadBorderExtents(el);
+				elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t;
+			}
+	
+			if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
+				var clientSize = el.clientWidth,
+					scrollBarSize = elPos.w - clientSize;
+				if(clientSize > 0 && scrollBarSize > 0){
+					elPos.w = clientSize;
+					if(isIE && rtl){ elPos.x += scrollBarSize; }
+				}
+				clientSize = el.clientHeight;
+				scrollBarSize = elPos.h - clientSize;
+				if(clientSize > 0 && scrollBarSize > 0){
+					elPos.h = clientSize;
+				}
+			}
+			if(fixedPos){ // bounded by viewport, not parents
+				if(elPos.y < 0){
+					elPos.h += elPos.y; elPos.y = 0;
+				}
+				if(elPos.x < 0){
+					elPos.w += elPos.x; elPos.x = 0;
+				}
+				if(elPos.y + elPos.h > rootHeight){
+					elPos.h = rootHeight - elPos.y;
+				}
+				if(elPos.x + elPos.w > rootWidth){
+					elPos.w = rootWidth - elPos.x;
+				}
+			}
+			// calculate overflow in all 4 directions
+			var l = nodePos.x - elPos.x, // beyond left: < 0
+				t = nodePos.y - Math.max(elPos.y, 0), // beyond top: < 0
+				r = l + nodePos.w - elPos.w, // beyond right: > 0
+				bot = t + nodePos.h - elPos.h; // beyond bottom: > 0
+			if(r * l > 0){
+				var s = Math[l < 0? "max" : "min"](l, r);
+				nodePos.x += el.scrollLeft;
+				el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
+				nodePos.x -= el.scrollLeft;
+			}
+			if(bot * t > 0){
+				nodePos.y += el.scrollTop;
+				el.scrollTop += Math[t < 0? "max" : "min"](t, bot);
+				nodePos.y -= el.scrollTop;
+			}
+			el = (el != scrollRoot) && !fixedPos && el.parentNode;
+		}	
+	}catch(error){
+		console.error('scrollIntoView: ' + error);
+		node.scrollIntoView(false);
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.manager"] = true;
+dojo.provide("dijit._base.manager");
+
+dojo.declare("dijit.WidgetSet", null, {
+	// summary:
+	//		A set of widgets indexed by id. A default instance of this class is
+	//		available as `dijit.registry`
+	//
+	// example:
+	//		Create a small list of widgets:
+	//		|	var ws = new dijit.WidgetSet();
+	//		|	ws.add(dijit.byId("one"));
+	//		| 	ws.add(dijit.byId("two"));
+	//		|	// destroy both:
+	//		|	ws.forEach(function(w){ w.destroy(); });
+	//
+	// example:
+	//		Using dijit.registry:
+	//		|	dijit.registry.forEach(function(w){ /* do something */ });
+
+	constructor: function(){
+		this._hash = {};
+		this.length = 0;
+	},
+
+	add: function(/*dijit._Widget*/ widget){
+		// summary:
+		//		Add a widget to this list. If a duplicate ID is detected, a error is thrown.
+		//
+		// widget: dijit._Widget
+		//		Any dijit._Widget subclass.
+		if(this._hash[widget.id]){
+			throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
+		}
+		this._hash[widget.id] = widget;
+		this.length++;
+	},
+
+	remove: function(/*String*/ id){
+		// summary:
+		//		Remove a widget from this WidgetSet. Does not destroy the widget; simply
+		//		removes the reference.
+		if(this._hash[id]){
+			delete this._hash[id];
+			this.length--;
+		}
+	},
+
+	forEach: function(/*Function*/ func, /* Object? */thisObj){
+		// summary:
+		//		Call specified function for each widget in this set.
+		//
+		// func:
+		//		A callback function to run for each item. Is passed the widget, the index
+		//		in the iteration, and the full hash, similar to `dojo.forEach`.
+		//
+		// thisObj:
+		//		An optional scope parameter
+		//
+		// example:
+		//		Using the default `dijit.registry` instance:
+		//		|	dijit.registry.forEach(function(widget){
+		//		|		console.log(widget.declaredClass);
+		//		|	});
+		//
+		// returns:
+		//		Returns self, in order to allow for further chaining.
+
+		thisObj = thisObj || dojo.global;
+		var i = 0, id;
+		for(id in this._hash){
+			func.call(thisObj, this._hash[id], i++, this._hash);
+		}
+		return this;	// dijit.WidgetSet
+	},
+
+	filter: function(/*Function*/ filter, /* Object? */thisObj){
+		// summary:
+		//		Filter down this WidgetSet to a smaller new WidgetSet
+		//		Works the same as `dojo.filter` and `dojo.NodeList.filter`
+		//
+		// filter:
+		//		Callback function to test truthiness. Is passed the widget
+		//		reference and the pseudo-index in the object.
+		//
+		// thisObj: Object?
+		//		Option scope to use for the filter function.
+		//
+		// example:
+		//		Arbitrary: select the odd widgets in this list
+		//		|	dijit.registry.filter(function(w, i){
+		//		|		return i % 2 == 0;
+		//		|	}).forEach(function(w){ /* odd ones */ });
+
+		thisObj = thisObj || dojo.global;
+		var res = new dijit.WidgetSet(), i = 0, id;
+		for(id in this._hash){
+			var w = this._hash[id];
+			if(filter.call(thisObj, w, i++, this._hash)){
+				res.add(w);
+			}
+		}
+		return res; // dijit.WidgetSet
+	},
+
+	byId: function(/*String*/ id){
+		// summary:
+		//		Find a widget in this list by it's id.
+		// example:
+		//		Test if an id is in a particular WidgetSet
+		//		| var ws = new dijit.WidgetSet();
+		//		| ws.add(dijit.byId("bar"));
+		//		| var t = ws.byId("bar") // returns a widget
+		//		| var x = ws.byId("foo"); // returns undefined
+
+		return this._hash[id];	// dijit._Widget
+	},
+
+	byClass: function(/*String*/ cls){
+		// summary:
+		//		Reduce this widgetset to a new WidgetSet of a particular `declaredClass`
+		//
+		// cls: String
+		//		The Class to scan for. Full dot-notated string.
+		//
+		// example:
+		//		Find all `dijit.TitlePane`s in a page:
+		//		|	dijit.registry.byClass("dijit.TitlePane").forEach(function(tp){ tp.close(); });
+
+		var res = new dijit.WidgetSet(), id, widget;
+		for(id in this._hash){
+			widget = this._hash[id];
+			if(widget.declaredClass == cls){
+				res.add(widget);
+			}
+		 }
+		 return res; // dijit.WidgetSet
+},
+
+	toArray: function(){
+		// summary:
+		//		Convert this WidgetSet into a true Array
+		//
+		// example:
+		//		Work with the widget .domNodes in a real Array
+		//		|	dojo.map(dijit.registry.toArray(), function(w){ return w.domNode; });
+
+		var ar = [];
+		for(var id in this._hash){
+			ar.push(this._hash[id]);
+		}
+		return ar;	// dijit._Widget[]
+},
+
+	map: function(/* Function */func, /* Object? */thisObj){
+		// summary:
+		//		Create a new Array from this WidgetSet, following the same rules as `dojo.map`
+		// example:
+		//		|	var nodes = dijit.registry.map(function(w){ return w.domNode; });
+		//
+		// returns:
+		//		A new array of the returned values.
+		return dojo.map(this.toArray(), func, thisObj); // Array
+	},
+
+	every: function(func, thisObj){
+		// summary:
+		// 		A synthetic clone of `dojo.every` acting explicitly on this WidgetSet
+		//
+		// func: Function
+		//		A callback function run for every widget in this list. Exits loop
+		//		when the first false return is encountered.
+		//
+		// thisObj: Object?
+		//		Optional scope parameter to use for the callback
+
+		thisObj = thisObj || dojo.global;
+		var x = 0, i;
+		for(i in this._hash){
+			if(!func.call(thisObj, this._hash[i], x++, this._hash)){
+				return false; // Boolean
+			}
+		}
+		return true; // Boolean
+	},
+
+	some: function(func, thisObj){
+		// summary:
+		// 		A synthetic clone of `dojo.some` acting explictly on this WidgetSet
+		//
+		// func: Function
+		//		A callback function run for every widget in this list. Exits loop
+		//		when the first true return is encountered.
+		//
+		// thisObj: Object?
+		//		Optional scope parameter to use for the callback
+
+		thisObj = thisObj || dojo.global;
+		var x = 0, i;
+		for(i in this._hash){
+			if(func.call(thisObj, this._hash[i], x++, this._hash)){
+				return true; // Boolean
+			}
+		}
+		return false; // Boolean
+	}
+
+});
+
+(function(){
+
+	/*=====
+	dijit.registry = {
+		// summary:
+		//		A list of widgets on a page.
+		// description:
+		//		Is an instance of `dijit.WidgetSet`
+	};
+	=====*/
+	dijit.registry = new dijit.WidgetSet();
+
+	var hash = dijit.registry._hash,
+		attr = dojo.attr,
+		hasAttr = dojo.hasAttr,
+		style = dojo.style;
+
+	dijit.byId = function(/*String|dijit._Widget*/ id){
+		// summary:
+		//		Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
+		return typeof id == "string" ? hash[id] : id; // dijit._Widget
+	};
+
+	var _widgetTypeCtr = {};
+	dijit.getUniqueId = function(/*String*/widgetType){
+		// summary:
+		//		Generates a unique id for a given widgetType
+	
+		var id;
+		do{
+			id = widgetType + "_" +
+				(widgetType in _widgetTypeCtr ?
+					++_widgetTypeCtr[widgetType] : _widgetTypeCtr[widgetType] = 0);
+		}while(hash[id]);
+		return dijit._scopeName == "dijit" ? id : dijit._scopeName + "_" + id; // String
+	};
+	
+	dijit.findWidgets = function(/*DomNode*/ root){
+		// summary:
+		//		Search subtree under root returning widgets found.
+		//		Doesn't search for nested widgets (ie, widgets inside other widgets).
+	
+		var outAry = [];
+	
+		function getChildrenHelper(root){
+			for(var node = root.firstChild; node; node = node.nextSibling){
+				if(node.nodeType == 1){
+					var widgetId = node.getAttribute("widgetId");
+					if(widgetId){
+						outAry.push(hash[widgetId]);
+					}else{
+						getChildrenHelper(node);
+					}
+				}
+			}
+		}
+	
+		getChildrenHelper(root);
+		return outAry;
+	};
+	
+	dijit._destroyAll = function(){
+		// summary:
+		//		Code to destroy all widgets and do other cleanup on page unload
+	
+		// Clean up focus manager lingering references to widgets and nodes
+		dijit._curFocus = null;
+		dijit._prevFocus = null;
+		dijit._activeStack = [];
+	
+		// Destroy all the widgets, top down
+		dojo.forEach(dijit.findWidgets(dojo.body()), function(widget){
+			// Avoid double destroy of widgets like Menu that are attached to <body>
+			// even though they are logically children of other widgets.
+			if(!widget._destroyed){
+				if(widget.destroyRecursive){
+					widget.destroyRecursive();
+				}else if(widget.destroy){
+					widget.destroy();
+				}
+			}
+		});
+	};
+	
+	if(dojo.isIE){
+		// Only run _destroyAll() for IE because we think it's only necessary in that case,
+		// and because it causes problems on FF.  See bug #3531 for details.
+		dojo.addOnWindowUnload(function(){
+			dijit._destroyAll();
+		});
+	}
+	
+	dijit.byNode = function(/*DOMNode*/ node){
+		// summary:
+		//		Returns the widget corresponding to the given DOMNode
+		return hash[node.getAttribute("widgetId")]; // dijit._Widget
+	};
+	
+	dijit.getEnclosingWidget = function(/*DOMNode*/ node){
+		// summary:
+		//		Returns the widget whose DOM tree contains the specified DOMNode, or null if
+		//		the node is not contained within the DOM tree of any widget
+		while(node){
+			var id = node.getAttribute && node.getAttribute("widgetId");
+			if(id){
+				return hash[id];
+			}
+			node = node.parentNode;
+		}
+		return null;
+	};
+
+	var shown = (dijit._isElementShown = function(/*Element*/ elem){
+		var s = style(elem);
+		return (s.visibility != "hidden")
+			&& (s.visibility != "collapsed")
+			&& (s.display != "none")
+			&& (attr(elem, "type") != "hidden");
+	});
+	
+	dijit.hasDefaultTabStop = function(/*Element*/ elem){
+		// summary:
+		//		Tests if element is tab-navigable even without an explicit tabIndex setting
+	
+		// No explicit tabIndex setting, need to investigate node type
+		switch(elem.nodeName.toLowerCase()){
+			case "a":
+				// An <a> w/out a tabindex is only navigable if it has an href
+				return hasAttr(elem, "href");
+			case "area":
+			case "button":
+			case "input":
+			case "object":
+			case "select":
+			case "textarea":
+				// These are navigable by default
+				return true;
+			case "iframe":
+				// If it's an editor <iframe> then it's tab navigable.
+				//TODO: feature detect "designMode" in elem.contentDocument?
+				if(dojo.isMoz){
+					try{
+						return elem.contentDocument.designMode == "on";
+					}catch(err){
+						return false;
+					}
+				}else if(dojo.isWebKit){
+					var doc = elem.contentDocument,
+						body = doc && doc.body;
+					return body && body.contentEditable == 'true';
+				}else{
+					// contentWindow.document isn't accessible within IE7/8
+					// if the iframe.src points to a foreign url and this
+					// page contains an element, that could get focus
+					try{
+						doc = elem.contentWindow.document;
+						body = doc && doc.body;
+						return body && body.firstChild && body.firstChild.contentEditable == 'true';
+					}catch(e){
+						return false;
+					}
+				}
+			default:
+				return elem.contentEditable == 'true';
+		}
+	};
+	
+	var isTabNavigable = (dijit.isTabNavigable = function(/*Element*/ elem){
+		// summary:
+		//		Tests if an element is tab-navigable
+	
+		// TODO: convert (and rename method) to return effective tabIndex; will save time in _getTabNavigable()
+		if(attr(elem, "disabled")){
+			return false;
+		}else if(hasAttr(elem, "tabIndex")){
+			// Explicit tab index setting
+			return attr(elem, "tabIndex") >= 0; // boolean
+		}else{
+			// No explicit tabIndex setting, so depends on node type
+			return dijit.hasDefaultTabStop(elem);
+		}
+	});
+
+	dijit._getTabNavigable = function(/*DOMNode*/ root){
+		// summary:
+		//		Finds descendants of the specified root node.
+		//
+		// description:
+		//		Finds the following descendants of the specified root node:
+		//		* the first tab-navigable element in document order
+		//		  without a tabIndex or with tabIndex="0"
+		//		* the last tab-navigable element in document order
+		//		  without a tabIndex or with tabIndex="0"
+		//		* the first element in document order with the lowest
+		//		  positive tabIndex value
+		//		* the last element in document order with the highest
+		//		  positive tabIndex value
+		var first, last, lowest, lowestTabindex, highest, highestTabindex;
+		var walkTree = function(/*DOMNode*/parent){
+			dojo.query("> *", parent).forEach(function(child){
+				// Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE,
+				// since show() invokes getAttribute("type"), which crash on VML nodes in IE.
+				if((dojo.isIE && child.scopeName!=="HTML") || !shown(child)){
+					return;
+				}
+
+				if(isTabNavigable(child)){
+					var tabindex = attr(child, "tabIndex");
+					if(!hasAttr(child, "tabIndex") || tabindex == 0){
+						if(!first){ first = child; }
+						last = child;
+					}else if(tabindex > 0){
+						if(!lowest || tabindex < lowestTabindex){
+							lowestTabindex = tabindex;
+							lowest = child;
+						}
+						if(!highest || tabindex >= highestTabindex){
+							highestTabindex = tabindex;
+							highest = child;
+						}
+					}
+				}
+				if(child.nodeName.toUpperCase() != 'SELECT'){
+					walkTree(child);
+				}
+			});
+		};
+		if(shown(root)){ walkTree(root) }
+		return { first: first, last: last, lowest: lowest, highest: highest };
+	}
+	dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/ root){
+		// summary:
+		//		Finds the descendant of the specified root node
+		//		that is first in the tabbing order
+		var elems = dijit._getTabNavigable(dojo.byId(root));
+		return elems.lowest ? elems.lowest : elems.first; // DomNode
+	};
+	
+	dijit.getLastInTabbingOrder = function(/*String|DOMNode*/ root){
+		// summary:
+		//		Finds the descendant of the specified root node
+		//		that is last in the tabbing order
+		var elems = dijit._getTabNavigable(dojo.byId(root));
+		return elems.last ? elems.last : elems.highest; // DomNode
+	};
+	
+	/*=====
+	dojo.mixin(dijit, {
+		// defaultDuration: Integer
+		//		The default animation speed (in ms) to use for all Dijit
+		//		transitional animations, unless otherwise specified
+		//		on a per-instance basis. Defaults to 200, overrided by
+		//		`djConfig.defaultDuration`
+		defaultDuration: 200
+	});
+	=====*/
+	
+	dijit.defaultDuration = dojo.config["defaultDuration"] || 200;
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.focus"] = true;
+dojo.provide("dijit._base.focus");
+
+
+	// for dijit.isTabNavigable()
+
+// summary:
+//		These functions are used to query or set the focus and selection.
+//
+//		Also, they trace when widgets become activated/deactivated,
+//		so that the widget can fire _onFocus/_onBlur events.
+//		"Active" here means something similar to "focused", but
+//		"focus" isn't quite the right word because we keep track of
+//		a whole stack of "active" widgets.  Example: ComboButton --> Menu -->
+//		MenuItem.  The onBlur event for ComboButton doesn't fire due to focusing
+//		on the Menu or a MenuItem, since they are considered part of the
+//		ComboButton widget.  It only happens when focus is shifted
+//		somewhere completely different.
+
+dojo.mixin(dijit, {
+	// _curFocus: DomNode
+	//		Currently focused item on screen
+	_curFocus: null,
+
+	// _prevFocus: DomNode
+	//		Previously focused item on screen
+	_prevFocus: null,
+
+	isCollapsed: function(){
+		// summary:
+		//		Returns true if there is no text selected
+		return dijit.getBookmark().isCollapsed;
+	},
+
+	getBookmark: function(){
+		// summary:
+		//		Retrieves a bookmark that can be used with moveToBookmark to return to the same range
+		var bm, rg, tg, sel = dojo.doc.selection, cf = dijit._curFocus;
+
+		if(dojo.global.getSelection){
+			//W3C Range API for selections.
+			sel = dojo.global.getSelection();
+			if(sel){
+				if(sel.isCollapsed){
+					tg = cf? cf.tagName : "";
+					if(tg){
+						//Create a fake rangelike item to restore selections.
+						tg = tg.toLowerCase();
+						if(tg == "textarea" ||
+								(tg == "input" && (!cf.type || cf.type.toLowerCase() == "text"))){
+							sel = {
+								start: cf.selectionStart,
+								end: cf.selectionEnd,
+								node: cf,
+								pRange: true
+							};
+							return {isCollapsed: (sel.end <= sel.start), mark: sel}; //Object.
+						}
+					}
+					bm = {isCollapsed:true};
+				}else{
+					rg = sel.getRangeAt(0);
+					bm = {isCollapsed: false, mark: rg.cloneRange()};
+				}
+			}
+		}else if(sel){
+			// If the current focus was a input of some sort and no selection, don't bother saving
+			// a native bookmark.  This is because it causes issues with dialog/page selection restore.
+			// So, we need to create psuedo bookmarks to work with.
+			tg = cf ? cf.tagName : "";
+			tg = tg.toLowerCase();
+			if(cf && tg && (tg == "button" || tg == "textarea" || tg == "input")){
+				if(sel.type && sel.type.toLowerCase() == "none"){
+					return {
+						isCollapsed: true,
+						mark: null
+					}
+				}else{
+					rg = sel.createRange();
+					return {
+						isCollapsed: rg.text && rg.text.length?false:true,
+						mark: {
+							range: rg,
+							pRange: true
+						}
+					};
+				}
+			}
+			bm = {};
+
+			//'IE' way for selections.
+			try{
+				// createRange() throws exception when dojo in iframe
+				//and nothing selected, see #9632
+				rg = sel.createRange();
+				bm.isCollapsed = !(sel.type == 'Text' ? rg.htmlText.length : rg.length);
+			}catch(e){
+				bm.isCollapsed = true;
+				return bm;
+			}
+			if(sel.type.toUpperCase() == 'CONTROL'){
+				if(rg.length){
+					bm.mark=[];
+					var i=0,len=rg.length;
+					while(i<len){
+						bm.mark.push(rg.item(i++));
+					}
+				}else{
+					bm.isCollapsed = true;
+					bm.mark = null;
+				}
+			}else{
+				bm.mark = rg.getBookmark();
+			}
+		}else{
+			console.warn("No idea how to store the current selection for this browser!");
+		}
+		return bm; // Object
+	},
+
+	moveToBookmark: function(/*Object*/bookmark){
+		// summary:
+		//		Moves current selection to a bookmark
+		// bookmark:
+		//		This should be a returned object from dijit.getBookmark()
+
+		var _doc = dojo.doc,
+			mark = bookmark.mark;
+		if(mark){
+			if(dojo.global.getSelection){
+				//W3C Rangi API (FF, WebKit, Opera, etc)
+				var sel = dojo.global.getSelection();
+				if(sel && sel.removeAllRanges){
+					if(mark.pRange){
+						var r = mark;
+						var n = r.node;
+						n.selectionStart = r.start;
+						n.selectionEnd = r.end;
+					}else{
+						sel.removeAllRanges();
+						sel.addRange(mark);
+					}
+				}else{
+					console.warn("No idea how to restore selection for this browser!");
+				}
+			}else if(_doc.selection && mark){
+				//'IE' way.
+				var rg;
+				if(mark.pRange){
+					rg = mark.range;
+				}else if(dojo.isArray(mark)){
+					rg = _doc.body.createControlRange();
+					//rg.addElement does not have call/apply method, so can not call it directly
+					//rg is not available in "range.addElement(item)", so can't use that either
+					dojo.forEach(mark, function(n){
+						rg.addElement(n);
+					});
+				}else{
+					rg = _doc.body.createTextRange();
+					rg.moveToBookmark(mark);
+				}
+				rg.select();
+			}
+		}
+	},
+
+	getFocus: function(/*Widget?*/ menu, /*Window?*/ openedForWindow){
+		// summary:
+		//		Called as getFocus(), this returns an Object showing the current focus
+		//		and selected text.
+		//
+		//		Called as getFocus(widget), where widget is a (widget representing) a button
+		//		that was just pressed, it returns where focus was before that button
+		//		was pressed.   (Pressing the button may have either shifted focus to the button,
+		//		or removed focus altogether.)   In this case the selected text is not returned,
+		//		since it can't be accurately determined.
+		//
+		// menu: dijit._Widget or {domNode: DomNode} structure
+		//		The button that was just pressed.  If focus has disappeared or moved
+		//		to this button, returns the previous focus.  In this case the bookmark
+		//		information is already lost, and null is returned.
+		//
+		// openedForWindow:
+		//		iframe in which menu was opened
+		//
+		// returns:
+		//		A handle to restore focus/selection, to be passed to `dijit.focus`
+		var node = !dijit._curFocus || (menu && dojo.isDescendant(dijit._curFocus, menu.domNode)) ? dijit._prevFocus : dijit._curFocus;
+		return {
+			node: node,
+			bookmark: (node == dijit._curFocus) && dojo.withGlobal(openedForWindow || dojo.global, dijit.getBookmark),
+			openedForWindow: openedForWindow
+		}; // Object
+	},
+
+	focus: function(/*Object || DomNode */ handle){
+		// summary:
+		//		Sets the focused node and the selection according to argument.
+		//		To set focus to an iframe's content, pass in the iframe itself.
+		// handle:
+		//		object returned by get(), or a DomNode
+
+		if(!handle){ return; }
+
+		var node = "node" in handle ? handle.node : handle,		// because handle is either DomNode or a composite object
+			bookmark = handle.bookmark,
+			openedForWindow = handle.openedForWindow,
+			collapsed = bookmark ? bookmark.isCollapsed : false;
+
+		// Set the focus
+		// Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
+		// but we need to set focus to iframe.contentWindow
+		if(node){
+			var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node;
+			if(focusNode && focusNode.focus){
+				try{
+					// Gecko throws sometimes if setting focus is impossible,
+					// node not displayed or something like that
+					focusNode.focus();
+				}catch(e){/*quiet*/}
+			}
+			dijit._onFocusNode(node);
+		}
+
+		// set the selection
+		// do not need to restore if current selection is not empty
+		// (use keyboard to select a menu item) or if previous selection was collapsed
+		// as it may cause focus shift (Esp in IE).
+		if(bookmark && dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed) && !collapsed){
+			if(openedForWindow){
+				openedForWindow.focus();
+			}
+			try{
+				dojo.withGlobal(openedForWindow || dojo.global, dijit.moveToBookmark, null, [bookmark]);
+			}catch(e2){
+				/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
+			}
+		}
+	},
+
+	// _activeStack: dijit._Widget[]
+	//		List of currently active widgets (focused widget and it's ancestors)
+	_activeStack: [],
+
+	registerIframe: function(/*DomNode*/ iframe){
+		// summary:
+		//		Registers listeners on the specified iframe so that any click
+		//		or focus event on that iframe (or anything in it) is reported
+		//		as a focus/click event on the <iframe> itself.
+		// description:
+		//		Currently only used by editor.
+		// returns:
+		//		Handle to pass to unregisterIframe()
+		return dijit.registerWin(iframe.contentWindow, iframe);
+	},
+
+	unregisterIframe: function(/*Object*/ handle){
+		// summary:
+		//		Unregisters listeners on the specified iframe created by registerIframe.
+		//		After calling be sure to delete or null out the handle itself.
+		// handle:
+		//		Handle returned by registerIframe()
+
+		dijit.unregisterWin(handle);
+	},
+
+	registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){
+		// summary:
+		//		Registers listeners on the specified window (either the main
+		//		window or an iframe's window) to detect when the user has clicked somewhere
+		//		or focused somewhere.
+		// description:
+		//		Users should call registerIframe() instead of this method.
+		// targetWindow:
+		//		If specified this is the window associated with the iframe,
+		//		i.e. iframe.contentWindow.
+		// effectiveNode:
+		//		If specified, report any focus events inside targetWindow as
+		//		an event on effectiveNode, rather than on evt.target.
+		// returns:
+		//		Handle to pass to unregisterWin()
+
+		// TODO: make this function private in 2.0; Editor/users should call registerIframe(),
+
+		var mousedownListener = function(evt){
+			dijit._justMouseDowned = true;
+			setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
+			
+			// workaround weird IE bug where the click is on an orphaned node
+			// (first time clicking a Select/DropDownButton inside a TooltipDialog)
+			if(dojo.isIE && evt && evt.srcElement && evt.srcElement.parentNode == null){
+				return;
+			}
+
+			dijit._onTouchNode(effectiveNode || evt.target || evt.srcElement, "mouse");
+		};
+		//dojo.connect(targetWindow, "onscroll", ???);
+
+		// Listen for blur and focus events on targetWindow's document.
+		// IIRC, I'm using attachEvent() rather than dojo.connect() because focus/blur events don't bubble
+		// through dojo.connect(), and also maybe to catch the focus events early, before onfocus handlers
+		// fire.
+		// Connect to <html> (rather than document) on IE to avoid memory leaks, but document on other browsers because
+		// (at least for FF) the focus event doesn't fire on <html> or <body>.
+		var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document;
+		if(doc){
+			if(dojo.isIE){
+				doc.attachEvent('onmousedown', mousedownListener);
+				var activateListener = function(evt){
+					// IE reports that nodes like <body> have gotten focus, even though they have tabIndex=-1,
+					// Should consider those more like a mouse-click than a focus....
+					if(evt.srcElement.tagName.toLowerCase() != "#document" &&
+						dijit.isTabNavigable(evt.srcElement)){
+						dijit._onFocusNode(effectiveNode || evt.srcElement);
+					}else{
+						dijit._onTouchNode(effectiveNode || evt.srcElement);
+					}
+				};
+				doc.attachEvent('onactivate', activateListener);
+				var deactivateListener =  function(evt){
+					dijit._onBlurNode(effectiveNode || evt.srcElement);
+				};
+				doc.attachEvent('ondeactivate', deactivateListener);
+
+				return function(){
+					doc.detachEvent('onmousedown', mousedownListener);
+					doc.detachEvent('onactivate', activateListener);
+					doc.detachEvent('ondeactivate', deactivateListener);
+					doc = null;	// prevent memory leak (apparent circular reference via closure)
+				};
+			}else{
+				doc.addEventListener('mousedown', mousedownListener, true);
+				var focusListener = function(evt){
+					dijit._onFocusNode(effectiveNode || evt.target);
+				};
+				doc.addEventListener('focus', focusListener, true);
+				var blurListener = function(evt){
+					dijit._onBlurNode(effectiveNode || evt.target);
+				};
+				doc.addEventListener('blur', blurListener, true);
+
+				return function(){
+					doc.removeEventListener('mousedown', mousedownListener, true);
+					doc.removeEventListener('focus', focusListener, true);
+					doc.removeEventListener('blur', blurListener, true);
+					doc = null;	// prevent memory leak (apparent circular reference via closure)
+				};
+			}
+		}
+	},
+
+	unregisterWin: function(/*Handle*/ handle){
+		// summary:
+		//		Unregisters listeners on the specified window (either the main
+		//		window or an iframe's window) according to handle returned from registerWin().
+		//		After calling be sure to delete or null out the handle itself.
+
+		// Currently our handle is actually a function
+		handle && handle();
+	},
+
+	_onBlurNode: function(/*DomNode*/ node){
+		// summary:
+		// 		Called when focus leaves a node.
+		//		Usually ignored, _unless_ it *isn't* follwed by touching another node,
+		//		which indicates that we tabbed off the last field on the page,
+		//		in which case every widget is marked inactive
+		dijit._prevFocus = dijit._curFocus;
+		dijit._curFocus = null;
+
+		if(dijit._justMouseDowned){
+			// the mouse down caused a new widget to be marked as active; this blur event
+			// is coming late, so ignore it.
+			return;
+		}
+
+		// if the blur event isn't followed by a focus event then mark all widgets as inactive.
+		if(dijit._clearActiveWidgetsTimer){
+			clearTimeout(dijit._clearActiveWidgetsTimer);
+		}
+		dijit._clearActiveWidgetsTimer = setTimeout(function(){
+			delete dijit._clearActiveWidgetsTimer;
+			dijit._setStack([]);
+			dijit._prevFocus = null;
+		}, 100);
+	},
+
+	_onTouchNode: function(/*DomNode*/ node, /*String*/ by){
+		// summary:
+		//		Callback when node is focused or mouse-downed
+		// node:
+		//		The node that was touched.
+		// by:
+		//		"mouse" if the focus/touch was caused by a mouse down event
+
+		// ignore the recent blurNode event
+		if(dijit._clearActiveWidgetsTimer){
+			clearTimeout(dijit._clearActiveWidgetsTimer);
+			delete dijit._clearActiveWidgetsTimer;
+		}
+
+		// compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
+		var newStack=[];
+		try{
+			while(node){
+				var popupParent = dojo.attr(node, "dijitPopupParent");
+				if(popupParent){
+					node=dijit.byId(popupParent).domNode;
+				}else if(node.tagName && node.tagName.toLowerCase() == "body"){
+					// is this the root of the document or just the root of an iframe?
+					if(node === dojo.body()){
+						// node is the root of the main document
+						break;
+					}
+					// otherwise, find the iframe this node refers to (can't access it via parentNode,
+					// need to do this trick instead). window.frameElement is supported in IE/FF/Webkit
+					node=dojo.window.get(node.ownerDocument).frameElement;
+				}else{
+					// if this node is the root node of a widget, then add widget id to stack,
+					// except ignore clicks on disabled widgets (actually focusing a disabled widget still works,
+					// to support MenuItem)
+					var id = node.getAttribute && node.getAttribute("widgetId"),
+						widget = id && dijit.byId(id);
+					if(widget && !(by == "mouse" && widget.get("disabled"))){
+						newStack.unshift(id);
+					}
+					node=node.parentNode;
+				}
+			}
+		}catch(e){ /* squelch */ }
+
+		dijit._setStack(newStack, by);
+	},
+
+	_onFocusNode: function(/*DomNode*/ node){
+		// summary:
+		//		Callback when node is focused
+
+		if(!node){
+			return;
+		}
+
+		if(node.nodeType == 9){
+			// Ignore focus events on the document itself.  This is here so that
+			// (for example) clicking the up/down arrows of a spinner
+			// (which don't get focus) won't cause that widget to blur. (FF issue)
+			return;
+		}
+
+		dijit._onTouchNode(node);
+
+		if(node == dijit._curFocus){ return; }
+		if(dijit._curFocus){
+			dijit._prevFocus = dijit._curFocus;
+		}
+		dijit._curFocus = node;
+		dojo.publish("focusNode", [node]);
+	},
+
+	_setStack: function(/*String[]*/ newStack, /*String*/ by){
+		// summary:
+		//		The stack of active widgets has changed.  Send out appropriate events and records new stack.
+		// newStack:
+		//		array of widget id's, starting from the top (outermost) widget
+		// by:
+		//		"mouse" if the focus/touch was caused by a mouse down event
+
+		var oldStack = dijit._activeStack;
+		dijit._activeStack = newStack;
+
+		// compare old stack to new stack to see how many elements they have in common
+		for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
+			if(oldStack[nCommon] != newStack[nCommon]){
+				break;
+			}
+		}
+
+		var widget;
+		// for all elements that have gone out of focus, send blur event
+		for(var i=oldStack.length-1; i>=nCommon; i--){
+			widget = dijit.byId(oldStack[i]);
+			if(widget){
+				widget._focused = false;
+				widget._hasBeenBlurred = true;
+				if(widget._onBlur){
+					widget._onBlur(by);
+				}
+				dojo.publish("widgetBlur", [widget, by]);
+			}
+		}
+
+		// for all element that have come into focus, send focus event
+		for(i=nCommon; i<newStack.length; i++){
+			widget = dijit.byId(newStack[i]);
+			if(widget){
+				widget._focused = true;
+				if(widget._onFocus){
+					widget._onFocus(by);
+				}
+				dojo.publish("widgetFocus", [widget, by]);
+			}
+		}
+	}
+});
+
+// register top window and all the iframes it contains
+dojo.addOnLoad(function(){
+	var handle = dijit.registerWin(window);
+	if(dojo.isIE){
+		dojo.addOnWindowUnload(function(){
+			dijit.unregisterWin(handle);
+			handle = null;
+		})
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.AdapterRegistry"] = true;
+dojo.provide("dojo.AdapterRegistry");
+
+dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
+	//	summary:
+	//		A registry to make contextual calling/searching easier.
+	//	description:
+	//		Objects of this class keep list of arrays in the form [name, check,
+	//		wrap, directReturn] that are used to determine what the contextual
+	//		result of a set of checked arguments is. All check/wrap functions
+	//		in this registry should be of the same arity.
+	//	example:
+	//	|	// create a new registry
+	//	|	var reg = new dojo.AdapterRegistry();
+	//	|	reg.register("handleString",
+	//	|		dojo.isString,
+	//	|		function(str){
+	//	|			// do something with the string here
+	//	|		}
+	//	|	);
+	//	|	reg.register("handleArr",
+	//	|		dojo.isArray,
+	//	|		function(arr){
+	//	|			// do something with the array here
+	//	|		}
+	//	|	);
+	//	|
+	//	|	// now we can pass reg.match() *either* an array or a string and
+	//	|	// the value we pass will get handled by the right function
+	//	|	reg.match("someValue"); // will call the first function
+	//	|	reg.match(["someValue"]); // will call the second
+
+	this.pairs = [];
+	this.returnWrappers = returnWrappers || false; // Boolean
+}
+
+dojo.extend(dojo.AdapterRegistry, {
+	register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
+		//	summary: 
+		//		register a check function to determine if the wrap function or
+		//		object gets selected
+		//	name:
+		//		a way to identify this matcher.
+		//	check:
+		//		a function that arguments are passed to from the adapter's
+		//		match() function.  The check function should return true if the
+		//		given arguments are appropriate for the wrap function.
+		//	directReturn:
+		//		If directReturn is true, the value passed in for wrap will be
+		//		returned instead of being called. Alternately, the
+		//		AdapterRegistry can be set globally to "return not call" using
+		//		the returnWrappers property. Either way, this behavior allows
+		//		the registry to act as a "search" function instead of a
+		//		function interception library.
+		//	override:
+		//		If override is given and true, the check function will be given
+		//		highest priority. Otherwise, it will be the lowest priority
+		//		adapter.
+		this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]);
+	},
+
+	match: function(/* ... */){
+		// summary:
+		//		Find an adapter for the given arguments. If no suitable adapter
+		//		is found, throws an exception. match() accepts any number of
+		//		arguments, all of which are passed to all matching functions
+		//		from the registered pairs.
+		for(var i = 0; i < this.pairs.length; i++){
+			var pair = this.pairs[i];
+			if(pair[1].apply(this, arguments)){
+				if((pair[3])||(this.returnWrappers)){
+					return pair[2];
+				}else{
+					return pair[2].apply(this, arguments);
+				}
+			}
+		}
+		throw new Error("No match found");
+	},
+
+	unregister: function(name){
+		// summary: Remove a named adapter from the registry
+
+		// FIXME: this is kind of a dumb way to handle this. On a large
+		// registry this will be slow-ish and we can use the name as a lookup
+		// should we choose to trade memory for speed.
+		for(var i = 0; i < this.pairs.length; i++){
+			var pair = this.pairs[i];
+			if(pair[0] == name){
+				this.pairs.splice(i, 1);
+				return true;
+			}
+		}
+		return false;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.place"] = true;
+dojo.provide("dijit._base.place");
+
+
+
+
+
+dijit.getViewport = function(){
+	// summary:
+	//		Returns the dimensions and scroll position of the viewable area of a browser window
+
+	return dojo.window.getBox();
+};
+
+/*=====
+dijit.__Position = function(){
+	// x: Integer
+	//		horizontal coordinate in pixels, relative to document body
+	// y: Integer
+	//		vertical coordinate in pixels, relative to document body
+
+	thix.x = x;
+	this.y = y;
+}
+=====*/
+
+
+dijit.placeOnScreen = function(
+	/* DomNode */			node,
+	/* dijit.__Position */	pos,
+	/* String[] */			corners,
+	/* dijit.__Position? */	padding){
+	// summary:
+	//		Positions one of the node's corners at specified position
+	//		such that node is fully visible in viewport.
+	// description:
+	//		NOTE: node is assumed to be absolutely or relatively positioned.
+	//	pos:
+	//		Object like {x: 10, y: 20}
+	//	corners:
+	//		Array of Strings representing order to try corners in, like ["TR", "BL"].
+	//		Possible values are:
+	//			* "BL" - bottom left
+	//			* "BR" - bottom right
+	//			* "TL" - top left
+	//			* "TR" - top right
+	//	padding:
+	//		set padding to put some buffer around the element you want to position.
+	// example:
+	//		Try to place node's top right corner at (10,20).
+	//		If that makes node go (partially) off screen, then try placing
+	//		bottom left corner at (10,20).
+	//	|	placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
+
+	var choices = dojo.map(corners, function(corner){
+		var c = { corner: corner, pos: {x:pos.x,y:pos.y} };
+		if(padding){
+			c.pos.x += corner.charAt(1) == 'L' ? padding.x : -padding.x;
+			c.pos.y += corner.charAt(0) == 'T' ? padding.y : -padding.y;
+		}
+		return c;
+	});
+
+	return dijit._place(node, choices);
+}
+
+dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
+	// summary:
+	//		Given a list of spots to put node, put it at the first spot where it fits,
+	//		of if it doesn't fit anywhere then the place with the least overflow
+	// choices: Array
+	//		Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
+	//		Above example says to put the top-left corner of the node at (10,20)
+	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+	//		for things like tooltip, they are displayed differently (and have different dimensions)
+	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
+
+	// get {x: 10, y: 10, w: 100, h:100} type obj representing position of
+	// viewport over document
+	var view = dojo.window.getBox();
+
+	// This won't work if the node is inside a <div style="position: relative">,
+	// so reattach it to dojo.doc.body.   (Otherwise, the positioning will be wrong
+	// and also it might get cutoff)
+	if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
+		dojo.body().appendChild(node);
+	}
+
+	var best = null;
+	dojo.some(choices, function(choice){
+		var corner = choice.corner;
+		var pos = choice.pos;
+
+		// configure node to be displayed in given position relative to button
+		// (need to do this in order to get an accurate size for the node, because
+		// a tooltips size changes based on position, due to triangle)
+		if(layoutNode){
+			layoutNode(node, choice.aroundCorner, corner);
+		}
+
+		// get node's size
+		var style = node.style;
+		var oldDisplay = style.display;
+		var oldVis = style.visibility;
+		style.visibility = "hidden";
+		style.display = "";
+		var mb = dojo.marginBox(node);
+		style.display = oldDisplay;
+		style.visibility = oldVis;
+
+		// coordinates and size of node with specified corner placed at pos,
+		// and clipped by viewport
+		var startX = Math.max(view.l, corner.charAt(1) == 'L' ? pos.x : (pos.x - mb.w)),
+			startY = Math.max(view.t, corner.charAt(0) == 'T' ? pos.y : (pos.y - mb.h)),
+			endX = Math.min(view.l + view.w, corner.charAt(1) == 'L' ? (startX + mb.w) : pos.x),
+			endY = Math.min(view.t + view.h, corner.charAt(0) == 'T' ? (startY + mb.h) : pos.y),
+			width = endX - startX,
+			height = endY - startY,
+			overflow = (mb.w - width) + (mb.h - height);
+
+		if(best == null || overflow < best.overflow){
+			best = {
+				corner: corner,
+				aroundCorner: choice.aroundCorner,
+				x: startX,
+				y: startY,
+				w: width,
+				h: height,
+				overflow: overflow
+			};
+		}
+		return !overflow;
+	});
+
+	node.style.left = best.x + "px";
+	node.style.top = best.y + "px";
+	if(best.overflow && layoutNode){
+		layoutNode(node, best.aroundCorner, best.corner);
+	}
+	return best;
+}
+
+dijit.placeOnScreenAroundNode = function(
+	/* DomNode */		node,
+	/* DomNode */		aroundNode,
+	/* Object */		aroundCorners,
+	/* Function? */		layoutNode){
+
+	// summary:
+	//		Position node adjacent or kitty-corner to aroundNode
+	//		such that it's fully visible in viewport.
+	//
+	// description:
+	//		Place node such that corner of node touches a corner of
+	//		aroundNode, and that node is fully visible.
+	//
+	// aroundCorners:
+	//		Ordered list of pairs of corners to try matching up.
+	//		Each pair of corners is represented as a key/value in the hash,
+	//		where the key corresponds to the aroundNode's corner, and
+	//		the value corresponds to the node's corner:
+	//
+	//	|	{ aroundNodeCorner1: nodeCorner1, aroundNodeCorner2: nodeCorner2, ...}
+	//
+	//		The following strings are used to represent the four corners:
+	//			* "BL" - bottom left
+	//			* "BR" - bottom right
+	//			* "TL" - top left
+	//			* "TR" - top right
+	//
+	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+	//		For things like tooltip, they are displayed differently (and have different dimensions)
+	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
+	//
+	// example:
+	//	|	dijit.placeOnScreenAroundNode(node, aroundNode, {'BL':'TL', 'TR':'BR'});
+	//		This will try to position node such that node's top-left corner is at the same position
+	//		as the bottom left corner of the aroundNode (ie, put node below
+	//		aroundNode, with left edges aligned).  If that fails it will try to put
+	// 		the bottom-right corner of node where the top right corner of aroundNode is
+	//		(ie, put node above aroundNode, with right edges aligned)
+	//
+
+	// get coordinates of aroundNode
+	aroundNode = dojo.byId(aroundNode);
+	var oldDisplay = aroundNode.style.display;
+	aroundNode.style.display="";
+	// #3172: use the slightly tighter border box instead of marginBox
+	var aroundNodePos = dojo.position(aroundNode, true);
+	aroundNode.style.display=oldDisplay;
+
+	// place the node around the calculated rectangle
+	return dijit._placeOnScreenAroundRect(node,
+		aroundNodePos.x, aroundNodePos.y, aroundNodePos.w, aroundNodePos.h,	// rectangle
+		aroundCorners, layoutNode);
+};
+
+/*=====
+dijit.__Rectangle = function(){
+	// x: Integer
+	//		horizontal offset in pixels, relative to document body
+	// y: Integer
+	//		vertical offset in pixels, relative to document body
+	// width: Integer
+	//		width in pixels
+	// height: Integer
+	//		height in pixels
+
+	this.x = x;
+	this.y = y;
+	this.width = width;
+	this.height = height;
+}
+=====*/
+
+
+dijit.placeOnScreenAroundRectangle = function(
+	/* DomNode */			node,
+	/* dijit.__Rectangle */	aroundRect,
+	/* Object */			aroundCorners,
+	/* Function */			layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except that the "around"
+	//		parameter is an arbitrary rectangle on the screen (x, y, width, height)
+	//		instead of a dom node.
+
+	return dijit._placeOnScreenAroundRect(node,
+		aroundRect.x, aroundRect.y, aroundRect.width, aroundRect.height,	// rectangle
+		aroundCorners, layoutNode);
+};
+
+dijit._placeOnScreenAroundRect = function(
+	/* DomNode */		node,
+	/* Number */		x,
+	/* Number */		y,
+	/* Number */		width,
+	/* Number */		height,
+	/* Object */		aroundCorners,
+	/* Function */		layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except it accepts coordinates
+	//		of a rectangle to place node adjacent to.
+
+	// TODO: combine with placeOnScreenAroundRectangle()
+
+	// Generate list of possible positions for node
+	var choices = [];
+	for(var nodeCorner in aroundCorners){
+		choices.push( {
+			aroundCorner: nodeCorner,
+			corner: aroundCorners[nodeCorner],
+			pos: {
+				x: x + (nodeCorner.charAt(1) == 'L' ? 0 : width),
+				y: y + (nodeCorner.charAt(0) == 'T' ? 0 : height)
+			}
+		});
+	}
+
+	return dijit._place(node, choices, layoutNode);
+};
+
+dijit.placementRegistry= new dojo.AdapterRegistry();
+dijit.placementRegistry.register("node",
+	function(n, x){
+		return typeof x == "object" &&
+			typeof x.offsetWidth != "undefined" && typeof x.offsetHeight != "undefined";
+	},
+	dijit.placeOnScreenAroundNode);
+dijit.placementRegistry.register("rect",
+	function(n, x){
+		return typeof x == "object" &&
+			"x" in x && "y" in x && "width" in x && "height" in x;
+	},
+	dijit.placeOnScreenAroundRectangle);
+
+dijit.placeOnScreenAroundElement = function(
+	/* DomNode */		node,
+	/* Object */		aroundElement,
+	/* Object */		aroundCorners,
+	/* Function */		layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
+	//		for the "around" argument and finds a proper processor to place a node.
+
+	return dijit.placementRegistry.match.apply(dijit.placementRegistry, arguments);
+};
+
+dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
+	// summary:
+	//		Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
+	//
+	// position: String[]
+	//		This variable controls the position of the drop down.
+	//		It's an array of strings with the following values:
+	//
+	//			* before: places drop down to the left of the target node/widget, or to the right in
+	//			  the case of RTL scripts like Hebrew and Arabic
+	//			* after: places drop down to the right of the target node/widget, or to the left in
+	//			  the case of RTL scripts like Hebrew and Arabic
+	//			* above: drop down goes above target node
+	//			* below: drop down goes below target node
+	//
+	//		The list is positions is tried, in order, until a position is found where the drop down fits
+	//		within the viewport.
+	//
+	// leftToRight: Boolean
+	//		Whether the popup will be displaying in leftToRight mode.
+	//
+	var align = {};
+	dojo.forEach(position, function(pos){
+		switch(pos){
+			case "after":
+				align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
+				break;
+			case "before":
+				align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
+				break;
+			case "below":
+				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
+				align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
+				align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
+				break;
+			case "above":
+			default:
+				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
+				align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
+				align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
+				break;
+		}
+	});
+	return align;
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.window"] = true;
+dojo.provide("dijit._base.window");
+
+
+
+dijit.getDocumentWindow = function(doc){
+	return dojo.window.get(doc);
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.popup"] = true;
+dojo.provide("dijit._base.popup");
+
+
+
+
+
+/*=====
+dijit.popup.__OpenArgs = function(){
+	// popup: Widget
+	//		widget to display
+	// parent: Widget
+	//		the button etc. that is displaying this popup
+	// around: DomNode
+	//		DOM node (typically a button); place popup relative to this node.  (Specify this *or* "x" and "y" parameters.)
+	// x: Integer
+	//		Absolute horizontal position (in pixels) to place node at.  (Specify this *or* "around" parameter.)
+	// y: Integer
+	//		Absolute vertical position (in pixels) to place node at.  (Specify this *or* "around" parameter.)
+	// orient: Object|String
+	//		When the around parameter is specified, orient should be an
+	//		ordered list of tuples of the form (around-node-corner, popup-node-corner).
+	//		dijit.popup.open() tries to position the popup according to each tuple in the list, in order,
+	//		until the popup appears fully within the viewport.
+	//
+	//		The default value is {BL:'TL', TL:'BL'}, which represents a list of two tuples:
+	//			1. (BL, TL)
+	//			2. (TL, BL)
+	//		where BL means "bottom left" and "TL" means "top left".
+	//		So by default, it first tries putting the popup below the around node, left-aligning them,
+	//		and then tries to put it above the around node, still left-aligning them.   Note that the
+	//		default is horizontally reversed when in RTL mode.
+	//
+	//		When an (x,y) position is specified rather than an around node, orient is either
+	//		"R" or "L".  R (for right) means that it tries to put the popup to the right of the mouse,
+	//		specifically positioning the popup's top-right corner at the mouse position, and if that doesn't
+	//		fit in the viewport, then it tries, in order, the bottom-right corner, the top left corner,
+	//		and the top-right corner.
+	// onCancel: Function
+	//		callback when user has canceled the popup by
+	//			1. hitting ESC or
+	//			2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
+	//			   i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
+	// onClose: Function
+	//		callback whenever this popup is closed
+	// onExecute: Function
+	//		callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
+	// padding: dijit.__Position
+	//		adding a buffer around the opening position. This is only useful when around is not set.
+	this.popup = popup;
+	this.parent = parent;
+	this.around = around;
+	this.x = x;
+	this.y = y;
+	this.orient = orient;
+	this.onCancel = onCancel;
+	this.onClose = onClose;
+	this.onExecute = onExecute;
+	this.padding = padding;
+}
+=====*/
+
+dijit.popup = {
+	// summary:
+	//		This singleton is used to show/hide widgets as popups.
+
+	// _stack: dijit._Widget[]
+	//		Stack of currently popped up widgets.
+	//		(someone opened _stack[0], and then it opened _stack[1], etc.)
+	_stack: [],
+	
+	// _beginZIndex: Number
+	//		Z-index of the first popup.   (If first popup opens other
+	//		popups they get a higher z-index.)
+	_beginZIndex: 1000,
+
+	_idGen: 1,
+
+	moveOffScreen: function(/*DomNode*/ node){
+		// summary:
+		//		Initialization for nodes that will be used as popups
+		//
+		// description:
+		//		Puts node inside a wrapper <div>, and
+		//		positions wrapper div off screen, but not display:none, so that
+		//		the widget doesn't appear in the page flow and/or cause a blank
+		//		area at the bottom of the viewport (making scrollbar longer), but
+		//		initialization of contained widgets works correctly
+
+		var wrapper = node.parentNode;
+
+		// Create a wrapper widget for when this node (in the future) will be used as a popup.
+		// This is done early because of IE bugs where creating/moving DOM nodes causes focus
+		// to go wonky, see tests/robot/Toolbar.html to reproduce
+		if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
+			wrapper = dojo.create("div",{
+				"class":"dijitPopup",
+				style:{
+					visibility:"hidden",
+					top: "-9999px"
+				}
+			}, dojo.body());
+			dijit.setWaiRole(wrapper, "presentation");
+			wrapper.appendChild(node);
+		}
+
+
+		var s = node.style;
+		s.display = "";
+		s.visibility = "";
+		s.position = "";
+		s.top = "0px";
+
+		dojo.style(wrapper, {
+			visibility: "hidden",
+			// prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
+			top: "-9999px"
+		});
+	},
+
+	getTopPopup: function(){
+		// summary:
+		//		Compute the closest ancestor popup that's *not* a child of another popup.
+		//		Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
+		var stack = this._stack;
+		for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){
+			/* do nothing, just trying to get right value for pi */
+		}
+		return stack[pi];
+	},
+
+	open: function(/*dijit.popup.__OpenArgs*/ args){
+		// summary:
+		//		Popup the widget at the specified position
+		//
+		// example:
+		//		opening at the mouse position
+		//		|		dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
+		//
+		// example:
+		//		opening the widget as a dropdown
+		//		|		dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}});
+		//
+		//		Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback
+		//		(fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
+
+		var stack = this._stack,
+			widget = args.popup,
+			orient = args.orient || (
+				(args.parent ? args.parent.isLeftToRight() : dojo._isBodyLtr()) ?
+				{'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'} :
+				{'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'}
+			),
+			around = args.around,
+			id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+this._idGen++);
+
+
+		// The wrapper may have already been created, but in case it wasn't, create here
+		var wrapper = widget.domNode.parentNode;
+		if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
+			this.moveOffScreen(widget.domNode);
+			wrapper = widget.domNode.parentNode;
+		}
+
+		dojo.attr(wrapper, {
+			id: id,
+			style: {
+				zIndex: this._beginZIndex + stack.length
+			},
+			"class": "dijitPopup " + (widget.baseClass || widget["class"] || "").split(" ")[0] +"Popup",
+			dijitPopupParent: args.parent ? args.parent.id : ""
+		});
+
+		if(dojo.isIE || dojo.isMoz){
+			var iframe = wrapper.childNodes[1];
+			if(!iframe){
+				iframe = new dijit.BackgroundIframe(wrapper);
+			}
+		}
+
+		// position the wrapper node and make it visible
+		var best = around ?
+			dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
+			dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR'], args.padding);
+
+		wrapper.style.visibility = "visible";
+		widget.domNode.style.visibility = "visible";	// counteract effects from _HasDropDown
+
+		var handlers = [];
+
+		// provide default escape and tab key handling
+		// (this will work for any widget, not just menu)
+		handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
+			if(evt.charOrCode == dojo.keys.ESCAPE && args.onCancel){
+				dojo.stopEvent(evt);
+				args.onCancel();
+			}else if(evt.charOrCode === dojo.keys.TAB){
+				dojo.stopEvent(evt);
+				var topPopup = this.getTopPopup();
+				if(topPopup && topPopup.onCancel){
+					topPopup.onCancel();
+				}
+			}
+		}));
+
+		// watch for cancel/execute events on the popup and notify the caller
+		// (for a menu, "execute" means clicking an item)
+		if(widget.onCancel){
+			handlers.push(dojo.connect(widget, "onCancel", args.onCancel));
+		}
+
+		handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", this, function(){
+			var topPopup = this.getTopPopup();
+			if(topPopup && topPopup.onExecute){
+				topPopup.onExecute();
+			}
+		}));
+
+		stack.push({
+			wrapper: wrapper,
+			iframe: iframe,
+			widget: widget,
+			parent: args.parent,
+			onExecute: args.onExecute,
+			onCancel: args.onCancel,
+ 			onClose: args.onClose,
+			handlers: handlers
+		});
+
+		if(widget.onOpen){
+			// TODO: in 2.0 standardize onShow() (used by StackContainer) and onOpen() (used here)
+			widget.onOpen(best);
+		}
+
+		return best;
+	},
+
+	close: function(/*dijit._Widget*/ popup){
+		// summary:
+		//		Close specified popup and any popups that it parented
+
+		var stack = this._stack;
+
+		// Basically work backwards from the top of the stack closing popups
+		// until we hit the specified popup, but IIRC there was some issue where closing
+		// a popup would cause others to close too.  Thus if we are trying to close B in [A,B,C]
+		// closing C might close B indirectly and then the while() condition will run where stack==[A]...
+		// so the while condition is constructed defensively.
+		while(dojo.some(stack, function(elem){return elem.widget == popup;})){
+			var top = stack.pop(),
+				wrapper = top.wrapper,
+				iframe = top.iframe,
+				widget = top.widget,
+				onClose = top.onClose;
+
+			if(widget.onClose){
+				// TODO: in 2.0 standardize onHide() (used by StackContainer) and onClose() (used here)
+				widget.onClose();
+			}
+			dojo.forEach(top.handlers, dojo.disconnect);
+
+			// Move the widget plus it's wrapper off screen, unless it has already been destroyed in above onClose() etc.
+			if(widget && widget.domNode){
+				this.moveOffScreen(widget.domNode);
+			}else{
+				dojo.destroy(wrapper);
+			}
+                        
+			if(onClose){
+				onClose();
+			}
+		}
+	}
+};
+
+dijit._frames = new function(){
+	// summary:
+	//		cache of iframes
+	var queue = [];
+
+	this.pop = function(){
+		var iframe;
+		if(queue.length){
+			iframe = queue.pop();
+			iframe.style.display="";
+		}else{
+			if(dojo.isIE){
+				var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\"";
+				var html="<iframe src='" + burl + "'"
+					+ " style='position: absolute; left: 0px; top: 0px;"
+					+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
+				iframe = dojo.doc.createElement(html);
+			}else{
+			 	iframe = dojo.create("iframe");
+				iframe.src = 'javascript:""';
+				iframe.className = "dijitBackgroundIframe";
+				dojo.style(iframe, "opacity", 0.1);
+			}
+			iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
+			dijit.setWaiRole(iframe,"presentation");
+		}
+		return iframe;
+	};
+
+	this.push = function(iframe){
+		iframe.style.display="none";
+		queue.push(iframe);
+	}
+}();
+
+
+dijit.BackgroundIframe = function(/* DomNode */node){
+	// summary:
+	//		For IE/FF z-index schenanigans. id attribute is required.
+	//
+	// description:
+	//		new dijit.BackgroundIframe(node)
+	//			Makes a background iframe as a child of node, that fills
+	//			area (and position) of node
+
+	if(!node.id){ throw new Error("no id"); }
+	if(dojo.isIE || dojo.isMoz){
+		var iframe = dijit._frames.pop();
+		node.appendChild(iframe);
+		if(dojo.isIE<7){
+			this.resize(node);
+			this._conn = dojo.connect(node, 'onresize', this, function(){
+				this.resize(node);
+			});
+		}else{
+			dojo.style(iframe, {
+				width: '100%',
+				height: '100%'
+			});
+		}
+		this.iframe = iframe;
+	}
+};
+
+dojo.extend(dijit.BackgroundIframe, {
+	resize: function(node){
+		// summary:
+		// 		resize the iframe so its the same size as node
+		// description:
+		//		this function is a no-op in all browsers except
+		//		IE6, which does not support 100% width/height 
+		//		of absolute positioned iframes
+		if(this.iframe && dojo.isIE<7){
+			dojo.style(this.iframe, {
+				width: node.offsetWidth + 'px',
+				height: node.offsetHeight + 'px'
+			});
+		}
+	},
+	destroy: function(){
+		// summary:
+		//		destroy the iframe
+		if(this._conn){
+			dojo.disconnect(this._conn);
+			this._conn = null;
+		}
+		if(this.iframe){
+			dijit._frames.push(this.iframe);
+			delete this.iframe;
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.scroll"] = true;
+dojo.provide("dijit._base.scroll");
+
+
+
+dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+	// summary:
+	//		Scroll the passed node into view, if it is not already.
+	//		Deprecated, use `dojo.window.scrollIntoView` instead.
+	
+	dojo.window.scrollIntoView(node, pos);
+};
+
+}
+
+if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.uacss"] = true;
+dojo.provide("dojo.uacss");
+
+(function(){
+	// summary:
+	//		Applies pre-set CSS classes to the top-level HTML node, based on:
+	// 			- browser (ex: dj_ie)
+	//			- browser version (ex: dj_ie6)
+	//			- box model (ex: dj_contentBox)
+	//			- text direction (ex: dijitRtl)
+	//
+	//		In addition, browser, browser version, and box model are
+	//		combined with an RTL flag when browser text is RTL.  ex: dj_ie-rtl.
+
+	var d = dojo,
+		html = d.doc.documentElement,
+		ie = d.isIE,
+		opera = d.isOpera,
+		maj = Math.floor,
+		ff = d.isFF,
+		boxModel = d.boxModel.replace(/-/,''),
+
+		classes = {
+			dj_ie: ie,
+			dj_ie6: maj(ie) == 6,
+			dj_ie7: maj(ie) == 7,
+			dj_ie8: maj(ie) == 8,
+			dj_quirks: d.isQuirks,
+			dj_iequirks: ie && d.isQuirks,
+
+			// NOTE: Opera not supported by dijit
+			dj_opera: opera,
+
+			dj_khtml: d.isKhtml,
+
+			dj_webkit: d.isWebKit,
+			dj_safari: d.isSafari,
+			dj_chrome: d.isChrome,
+
+			dj_gecko: d.isMozilla,
+			dj_ff3: maj(ff) == 3
+		}; // no dojo unsupported browsers
+
+	classes["dj_" + boxModel] = true;
+
+	// apply browser, browser version, and box model class names
+	var classStr = "";
+	for(var clz in classes){
+		if(classes[clz]){
+			classStr += clz + " ";
+		}
+	}
+	html.className = d.trim(html.className + " " + classStr);
+
+	// If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension.
+	// We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).  
+	// Unshift() is to run sniff code before the parser.
+	dojo._loaders.unshift(function(){
+		if(!dojo._isBodyLtr()){
+			var rtlClassStr = "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl ")
+			html.className = d.trim(html.className + " " + rtlClassStr);
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.sniff"] = true;
+// summary:
+//		Applies pre-set CSS classes to the top-level HTML node, see
+//		`dojo.uacss` for details.
+//
+//		Simply doing a require on this module will
+//		establish this CSS.  Modified version of Morris' CSS hack.
+
+dojo.provide("dijit._base.sniff");
+
+
+
+}
+
+if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.typematic"] = true;
+dojo.provide("dijit._base.typematic");
+
+dijit.typematic = {
+	// summary:
+	//		These functions are used to repetitively call a user specified callback
+	//		method when a specific key or mouse click over a specific DOM node is
+	//		held down for a specific amount of time.
+	//		Only 1 such event is allowed to occur on the browser page at 1 time.
+
+	_fireEventAndReload: function(){
+		this._timer = null;
+		this._callback(++this._count, this._node, this._evt);
+		
+		// Schedule next event, timer is at most minDelay (default 10ms) to avoid
+		// browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup)
+		this._currentTimeout = Math.max(
+			this._currentTimeout < 0 ? this._initialDelay :
+				(this._subsequentDelay > 1 ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay)),
+			this._minDelay);
+		this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
+	},
+
+	trigger: function(/*Event*/ evt, /*Object*/ _this, /*DOMNode*/ node, /*Function*/ callback, /*Object*/ obj, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start a timed, repeating callback sequence.
+		//		If already started, the function call is ignored.
+		//		This method is not normally called by the user but can be
+		//		when the normal listener code is insufficient.
+		// evt:
+		//		key or mouse event object to pass to the user callback
+		// _this:
+		//		pointer to the user's widget space.
+		// node:
+		//		the DOM node object to pass the the callback function
+		// callback:
+		//		function to call until the sequence is stopped called with 3 parameters:
+		// count:
+		//		integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
+		// node:
+		//		the DOM node object passed in
+		// evt:
+		//		key or mouse event object
+		// obj:
+		//		user space object used to uniquely identify each typematic sequence
+		// subsequentDelay (optional):
+		//		if > 1, the number of milliseconds until the 3->n events occur
+		//		or else the fractional time multiplier for the next event's delay, default=0.9
+		// initialDelay (optional):
+		//		the number of milliseconds until the 2nd event occurs, default=500ms
+		// minDelay (optional):
+		//		the maximum delay in milliseconds for event to fire, default=10ms
+		if(obj != this._obj){
+			this.stop();
+			this._initialDelay = initialDelay || 500;
+			this._subsequentDelay = subsequentDelay || 0.90;
+			this._minDelay = minDelay || 10;
+			this._obj = obj;
+			this._evt = evt;
+			this._node = node;
+			this._currentTimeout = -1;
+			this._count = -1;
+			this._callback = dojo.hitch(_this, callback);
+			this._fireEventAndReload();
+			this._evt = dojo.mixin({faux: true}, evt);
+		}
+	},
+
+	stop: function(){
+		// summary:
+		//		Stop an ongoing timed, repeating callback sequence.
+		if(this._timer){
+			clearTimeout(this._timer);
+			this._timer = null;
+		}
+		if(this._obj){
+			this._callback(-1, this._node, this._evt);
+			this._obj = null;
+		}
+	},
+
+	addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a specific typematic key.
+		//		See also the trigger method for other parameters.
+		// keyObject:
+		//		an object defining the key to listen for:
+		// 		charOrCode:
+		//			the printable character (string) or keyCode (number) to listen for.
+		// 		keyCode:
+		//			(deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0).
+		// 		charCode:
+		//			(deprecated - use charOrCode) the charCode (number) to listen for.
+		// 		ctrlKey:
+		//			desired ctrl key state to initiate the callback sequence:
+		//			- pressed (true)
+		//			- released (false)
+		//			- either (unspecified)
+		// 		altKey:
+		//			same as ctrlKey but for the alt key
+		// 		shiftKey:
+		//			same as ctrlKey but for the shift key
+		// returns:
+		//		an array of dojo.connect handles
+		if(keyObject.keyCode){
+			keyObject.charOrCode = keyObject.keyCode;
+			dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+		}else if(keyObject.charCode){
+			keyObject.charOrCode = String.fromCharCode(keyObject.charCode);
+			dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+		}
+		return [
+			dojo.connect(node, "onkeypress", this, function(evt){
+				if(evt.charOrCode == keyObject.charOrCode &&
+				(keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
+				(keyObject.altKey === undefined || keyObject.altKey == evt.altKey) &&
+				(keyObject.metaKey === undefined || keyObject.metaKey == (evt.metaKey || false)) && // IE doesn't even set metaKey
+				(keyObject.shiftKey === undefined || keyObject.shiftKey == evt.shiftKey)){
+					dojo.stopEvent(evt);
+					dijit.typematic.trigger(evt, _this, node, callback, keyObject, subsequentDelay, initialDelay, minDelay);
+				}else if(dijit.typematic._obj == keyObject){
+					dijit.typematic.stop();
+				}
+			}),
+			dojo.connect(node, "onkeyup", this, function(evt){
+				if(dijit.typematic._obj == keyObject){
+					dijit.typematic.stop();
+				}
+			})
+		];
+	},
+
+	addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a typematic mouse click.
+		//		See the trigger method for other parameters.
+		// returns:
+		//		an array of dojo.connect handles
+		var dc = dojo.connect;
+		return [
+			dc(node, "mousedown", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
+			}),
+			dc(node, "mouseup", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.stop();
+			}),
+			dc(node, "mouseout", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.stop();
+			}),
+			dc(node, "mousemove", this, function(evt){
+				evt.preventDefault();
+			}),
+			dc(node, "dblclick", this, function(evt){
+				dojo.stopEvent(evt);
+				if(dojo.isIE){
+					dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
+					setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
+				}
+			})
+		];
+	},
+
+	addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a specific typematic key and mouseclick.
+		//		This is a thin wrapper to addKeyListener and addMouseListener.
+		//		See the addMouseListener and addKeyListener methods for other parameters.
+		// mouseNode:
+		//		the DOM node object to listen on for mouse events.
+		// keyNode:
+		//		the DOM node object to listen on for key events.
+		// returns:
+		//		an array of dojo.connect handles
+		return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay, minDelay).concat(
+			this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay, minDelay));
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.wai"] = true;
+dojo.provide("dijit._base.wai");
+
+dijit.wai = {
+	onload: function(){
+		// summary:
+		//		Detects if we are in high-contrast mode or not
+
+		// This must be a named function and not an anonymous
+		// function, so that the widget parsing code can make sure it
+		// registers its onload function after this function.
+		// DO NOT USE "this" within this function.
+
+		// create div for testing if high contrast mode is on or images are turned off
+		var div = dojo.create("div",{
+			id: "a11yTestNode",
+			style:{
+				cssText:'border: 1px solid;'
+					+ 'border-color:red green;'
+					+ 'position: absolute;'
+					+ 'height: 5px;'
+					+ 'top: -999px;'
+					+ 'background-image: url("' + (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")) + '");'
+			}
+		}, dojo.body());
+
+		// test it
+		var cs = dojo.getComputedStyle(div);
+		if(cs){
+			var bkImg = cs.backgroundImage;
+			var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
+			dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
+			if(dojo.isIE){
+				div.outerHTML = "";		// prevent mixed-content warning, see http://support.microsoft.com/kb/925014
+			}else{
+				dojo.body().removeChild(div);
+			}
+		}
+	}
+};
+
+// Test if computer is in high contrast mode.
+// Make sure the a11y test runs first, before widgets are instantiated.
+if(dojo.isIE || dojo.isMoz){	// NOTE: checking in Safari messes things up
+	dojo._loaders.unshift(dijit.wai.onload);
+}
+
+dojo.mixin(dijit, {
+	_XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,
+
+	hasWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Determines if an element has a particular non-XHTML role.
+		// returns:
+		//		True if elem has the specific non-XHTML role attribute and false if not.
+		// 		For backwards compatibility if role parameter not provided,
+		// 		returns true if has non XHTML role
+		var waiRole = this.getWaiRole(elem);
+		return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
+	},
+
+	getWaiRole: function(/*Element*/ elem){
+		// summary:
+		//		Gets the non-XHTML role for an element (which should be a wai role).
+		// returns:
+		//		The non-XHTML role of elem or an empty string if elem
+		//		does not have a role.
+		 return dojo.trim((dojo.attr(elem, "role") || "").replace(this._XhtmlRoles,"").replace("wairole:",""));
+	},
+
+	setWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Sets the role on an element.
+		// description:
+		//		Replace existing role attribute with new role.
+		//		If elem already has an XHTML role, append this role to XHTML role
+		//		and remove other ARIA roles.
+
+		var curRole = dojo.attr(elem, "role") || "";
+		if(!this._XhtmlRoles.test(curRole)){
+			dojo.attr(elem, "role", role);
+		}else{
+			if((" "+ curRole +" ").indexOf(" " + role + " ") < 0){
+				var clearXhtml = dojo.trim(curRole.replace(this._XhtmlRoles, ""));
+				var cleanRole = dojo.trim(curRole.replace(clearXhtml, ""));
+				dojo.attr(elem, "role", cleanRole + (cleanRole ? ' ' : '') + role);
+			}
+		}
+	},
+
+	removeWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Removes the specified non-XHTML role from an element.
+		// 		Removes role attribute if no specific role provided (for backwards compat.)
+
+		var roleValue = dojo.attr(elem, "role");
+		if(!roleValue){ return; }
+		if(role){
+			var t = dojo.trim((" " + roleValue + " ").replace(" " + role + " ", " "));
+			dojo.attr(elem, "role", t);
+		}else{
+			elem.removeAttribute("role");
+		}
+	},
+
+	hasWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Determines if an element has a given state.
+		// description:
+		//		Checks for an attribute called "aria-"+state.
+		// returns:
+		//		true if elem has a value for the given state and
+		//		false if it does not.
+
+		return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
+	},
+
+	getWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Gets the value of a state on an element.
+		// description:
+		//		Checks for an attribute called "aria-"+state.
+		// returns:
+		//		The value of the requested state on elem
+		//		or an empty string if elem has no value for state.
+
+		return elem.getAttribute("aria-"+state) || "";
+	},
+
+	setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
+		// summary:
+		//		Sets a state on an element.
+		// description:
+		//		Sets an attribute called "aria-"+state.
+
+		elem.setAttribute("aria-"+state, value);
+	},
+
+	removeWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Removes a state from an element.
+		// description:
+		//		Sets an attribute called "aria-"+state.
+
+		elem.removeAttribute("aria-"+state);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base"] = true;
+dojo.provide("dijit._base");
+
+
+
+
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Widget"] = true;
+dojo.provide("dijit._Widget");
+
+dojo.require( "dijit._base" );
+
+
+// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets'
+// DOM nodes) until someone actually needs to monitor that event.
+dojo.connect(dojo, "_connect",
+	function(/*dijit._Widget*/ widget, /*String*/ event){
+		if(widget && dojo.isFunction(widget._onConnect)){
+			widget._onConnect(event);
+		}
+	});
+
+dijit._connectOnUseEventHandler = function(/*Event*/ event){};
+
+// Keep track of where the last keydown event was, to help avoid generating
+// spurious ondijitclick events when:
+// 1. focus is on a <button> or <a>
+// 2. user presses then releases the ENTER key
+// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler
+// 4. onkeyup event fires, causing the ondijitclick handler to fire
+dijit._lastKeyDownNode = null;
+if(dojo.isIE){
+	(function(){
+		var keydownCallback = function(evt){
+			dijit._lastKeyDownNode = evt.srcElement;
+		};
+		dojo.doc.attachEvent('onkeydown', keydownCallback);
+		dojo.addOnWindowUnload(function(){
+			dojo.doc.detachEvent('onkeydown', keydownCallback);
+		});
+	})();
+}else{
+	dojo.doc.addEventListener('keydown', function(evt){
+		dijit._lastKeyDownNode = evt.target;
+	}, true);
+}
+
+(function(){
+
+var _attrReg = {},	// cached results from getSetterAttributes
+	getSetterAttributes = function(widget){
+		// summary:
+		//		Returns list of attributes with custom setters for specified widget
+		var dc = widget.declaredClass;
+		if(!_attrReg[dc]){
+			var r = [],
+				attrs,
+				proto = widget.constructor.prototype;
+			for(var fxName in proto){
+				if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){
+					r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1));
+				}
+			}
+			_attrReg[dc] = r;
+		}
+		return _attrReg[dc] || [];	// String[]
+	};
+
+dojo.declare("dijit._Widget", null, {
+	// summary:
+	//		Base class for all Dijit widgets.
+
+	// id: [const] String
+	//		A unique, opaque ID string that can be assigned by users or by the
+	//		system. If the developer passes an ID which is known not to be
+	//		unique, the specified ID is ignored and the system-generated ID is
+	//		used instead.
+	id: "",
+
+	// lang: [const] String
+	//		Rarely used.  Overrides the default Dojo locale used to render this widget,
+	//		as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
+	//		Value must be among the list of locales specified during by the Dojo bootstrap,
+	//		formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
+	lang: "",
+
+	// dir: [const] String
+	//		Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
+	//		attribute. Either left-to-right "ltr" or right-to-left "rtl".  If undefined, widgets renders in page's
+	//		default direction.
+	dir: "",
+
+	// class: String
+	//		HTML class attribute
+	"class": "",
+
+	// style: String||Object
+	//		HTML style attributes as cssText string or name/value hash
+	style: "",
+
+	// title: String
+	//		HTML title attribute.
+	//
+	//		For form widgets this specifies a tooltip to display when hovering over
+	//		the widget (just like the native HTML title attribute).
+	//
+	//		For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
+	//		etc., it's used to specify the tab label, accordion pane title, etc.
+	title: "",
+
+	// tooltip: String
+	//		When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
+	//		this specifies the tooltip to appear when the mouse is hovered over that text.
+	tooltip: "",
+
+	// baseClass: [protected] String
+	//		Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate
+	//		widget state.
+	baseClass: "",
+
+	// srcNodeRef: [readonly] DomNode
+	//		pointer to original DOM node
+	srcNodeRef: null,
+
+	// domNode: [readonly] DomNode
+	//		This is our visible representation of the widget! Other DOM
+	//		Nodes may by assigned to other properties, usually through the
+	//		template system's dojoAttachPoint syntax, but the domNode
+	//		property is the canonical "top level" node in widget UI.
+	domNode: null,
+
+	// containerNode: [readonly] DomNode
+	//		Designates where children of the source DOM node will be placed.
+	//		"Children" in this case refers to both DOM nodes and widgets.
+	//		For example, for myWidget:
+	//
+	//		|	<div dojoType=myWidget>
+	//		|		<b> here's a plain DOM node
+	//		|		<span dojoType=subWidget>and a widget</span>
+	//		|		<i> and another plain DOM node </i>
+	//		|	</div>
+	//
+	//		containerNode would point to:
+	//
+	//		|		<b> here's a plain DOM node
+	//		|		<span dojoType=subWidget>and a widget</span>
+	//		|		<i> and another plain DOM node </i>
+	//
+	//		In templated widgets, "containerNode" is set via a
+	//		dojoAttachPoint assignment.
+	//
+	//		containerNode must be defined for any widget that accepts innerHTML
+	//		(like ContentPane or BorderContainer or even Button), and conversely
+	//		is null for widgets that don't, like TextBox.
+	containerNode: null,
+
+/*=====
+	// _started: Boolean
+	//		startup() has completed.
+	_started: false,
+=====*/
+
+	// attributeMap: [protected] Object
+	//		attributeMap sets up a "binding" between attributes (aka properties)
+	//		of the widget and the widget's DOM.
+	//		Changes to widget attributes listed in attributeMap will be
+	//		reflected into the DOM.
+	//
+	//		For example, calling attr('title', 'hello')
+	//		on a TitlePane will automatically cause the TitlePane's DOM to update
+	//		with the new title.
+	//
+	//		attributeMap is a hash where the key is an attribute of the widget,
+	//		and the value reflects a binding to a:
+	//
+	//		- DOM node attribute
+	// |		focus: {node: "focusNode", type: "attribute"}
+	// 		Maps this.focus to this.focusNode.focus
+	//
+	//		- DOM node innerHTML
+	//	|		title: { node: "titleNode", type: "innerHTML" }
+	//		Maps this.title to this.titleNode.innerHTML
+	//
+	//		- DOM node innerText
+	//	|		title: { node: "titleNode", type: "innerText" }
+	//		Maps this.title to this.titleNode.innerText
+	//
+	//		- DOM node CSS class
+	// |		myClass: { node: "domNode", type: "class" }
+	//		Maps this.myClass to this.domNode.className
+	//
+	//		If the value is an array, then each element in the array matches one of the
+	//		formats of the above list.
+	//
+	//		There are also some shorthands for backwards compatibility:
+	//		- string --> { node: string, type: "attribute" }, for example:
+	//	|	"focusNode" ---> { node: "focusNode", type: "attribute" }
+	//		- "" --> { node: "domNode", type: "attribute" }
+	attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""},
+
+	// _deferredConnects: [protected] Object
+	//		attributeMap addendum for event handlers that should be connected only on first use
+	_deferredConnects: {
+		onClick: "",
+		onDblClick: "",
+		onKeyDown: "",
+		onKeyPress: "",
+		onKeyUp: "",
+		onMouseMove: "",
+		onMouseDown: "",
+		onMouseOut: "",
+		onMouseOver: "",
+		onMouseLeave: "",
+		onMouseEnter: "",
+		onMouseUp: ""
+	},
+
+	onClick: dijit._connectOnUseEventHandler,
+	/*=====
+	onClick: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of mouse click events.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onDblClick: dijit._connectOnUseEventHandler,
+	/*=====
+	onDblClick: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of mouse double click events.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyDown: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyDown: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of keys being pressed down.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyPress: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyPress: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of printable keys being typed.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyUp: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyUp: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of keys being released.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseDown: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseDown: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse button is pressed down.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseMove: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseMove: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseOut: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseOut: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseOver: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseOver: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseLeave: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseLeave: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves off of this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseEnter: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseEnter: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves onto this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseUp: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseUp: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse button is released.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+
+	// Constants used in templates
+
+	// _blankGif: [protected] String
+	//		Path to a blank 1x1 image.
+	//		Used by <img> nodes in templates that really get their image via CSS background-image.
+	_blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(),
+
+	//////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+	postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){
+		// summary:
+		//		Kicks off widget instantiation.  See create() for details.
+		// tags:
+		//		private
+		this.create(params, srcNodeRef);
+	},
+
+	create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
+		// summary:
+		//		Kick off the life-cycle of a widget
+		// params:
+		//		Hash of initialization parameters for widget, including
+		//		scalar values (like title, duration etc.) and functions,
+		//		typically callbacks like onClick.
+		// srcNodeRef:
+		//		If a srcNodeRef (DOM node) is specified:
+		//			- use srcNodeRef.innerHTML as my contents
+		//			- if this is a behavioral widget then apply behavior
+		//			  to that srcNodeRef
+		//			- otherwise, replace srcNodeRef with my generated DOM
+		//			  tree
+		// description:
+		//		Create calls a number of widget methods (postMixInProperties, buildRendering, postCreate,
+		//		etc.), some of which of you'll want to override. See http://docs.dojocampus.org/dijit/_Widget
+		//		for a discussion of the widget creation lifecycle.
+		//
+		//		Of course, adventurous developers could override create entirely, but this should
+		//		only be done as a last resort.
+		// tags:
+		//		private
+
+		// store pointer to original DOM tree
+		this.srcNodeRef = dojo.byId(srcNodeRef);
+
+		// For garbage collection.  An array of handles returned by Widget.connect()
+		// Each handle returned from Widget.connect() is an array of handles from dojo.connect()
+		this._connects = [];
+
+		// For garbage collection.  An array of handles returned by Widget.subscribe()
+		// The handle returned from Widget.subscribe() is the handle returned from dojo.subscribe()
+		this._subscribes = [];
+
+		// To avoid double-connects, remove entries from _deferredConnects
+		// that have been setup manually by a subclass (ex, by dojoAttachEvent).
+		// If a subclass has redefined a callback (ex: onClick) then assume it's being
+		// connected to manually.
+		this._deferredConnects = dojo.clone(this._deferredConnects);
+		for(var attr in this.attributeMap){
+			delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects
+		}
+		for(attr in this._deferredConnects){
+			if(this[attr] !== dijit._connectOnUseEventHandler){
+				delete this._deferredConnects[attr];	// redefined, probably dojoAttachEvent exists
+			}
+		}
+
+		//mixin our passed parameters
+		if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
+		if(params){
+			this.params = params;
+			dojo.mixin(this,params);
+		}
+		this.postMixInProperties();
+
+		// generate an id for the widget if one wasn't specified
+		// (be sure to do this before buildRendering() because that function might
+		// expect the id to be there.)
+		if(!this.id){
+			this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+		}
+		dijit.registry.add(this);
+
+		this.buildRendering();
+
+		if(this.domNode){
+			// Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
+			this._applyAttributes();
+
+			var source = this.srcNodeRef;
+			if(source && source.parentNode){
+				source.parentNode.replaceChild(this.domNode, source);
+			}
+
+			// If the developer has specified a handler as a widget parameter
+			// (ex: new Button({onClick: ...})
+			// then naturally need to connect from DOM node to that handler immediately,
+			for(attr in this.params){
+				this._onConnect(attr);
+			}
+		}
+
+		if(this.domNode){
+			this.domNode.setAttribute("widgetId", this.id);
+		}
+		this.postCreate();
+
+		// If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
+		if(this.srcNodeRef && !this.srcNodeRef.parentNode){
+			delete this.srcNodeRef;
+		}
+
+		this._created = true;
+	},
+
+	_applyAttributes: function(){
+		// summary:
+		//		Step during widget creation to copy all widget attributes to the
+		//		DOM as per attributeMap and _setXXXAttr functions.
+		// description:
+		//		Skips over blank/false attribute values, unless they were explicitly specified
+		//		as parameters to the widget, since those are the default anyway,
+		//		and setting tabIndex="" is different than not setting tabIndex at all.
+		//
+		//		It processes the attributes in the attribute map first, and then
+		//		it goes through and processes the attributes for the _setXXXAttr
+		//		functions that have been specified
+		// tags:
+		//		private
+		var condAttrApply = function(attr, scope){
+			if((scope.params && attr in scope.params) || scope[attr]){
+				scope.set(attr, scope[attr]);
+			}
+		};
+
+		// Do the attributes in attributeMap
+		for(var attr in this.attributeMap){
+			condAttrApply(attr, this);
+		}
+
+		// And also any attributes with custom setters
+		dojo.forEach(getSetterAttributes(this), function(a){
+			if(!(a in this.attributeMap)){
+				condAttrApply(a, this);
+			}
+		}, this);
+	},
+
+	postMixInProperties: function(){
+		// summary:
+		//		Called after the parameters to the widget have been read-in,
+		//		but before the widget template is instantiated. Especially
+		//		useful to set properties that are referenced in the widget
+		//		template.
+		// tags:
+		//		protected
+	},
+
+	buildRendering: function(){
+		// summary:
+		//		Construct the UI for this widget, setting this.domNode
+		// description:
+		//		Most widgets will mixin `dijit._Templated`, which implements this
+		//		method.
+		// tags:
+		//		protected
+		this.domNode = this.srcNodeRef || dojo.create('div');
+	},
+
+	postCreate: function(){
+		// summary:
+		//		Processing after the DOM fragment is created
+		// description:
+		//		Called after the DOM fragment has been created, but not necessarily
+		//		added to the document.  Do not include any operations which rely on
+		//		node dimensions or placement.
+		// tags:
+		//		protected
+
+		// baseClass is a single class name or occasionally a space-separated list of names.
+		// Add those classes to the DOMNod.  If RTL mode then also add with Rtl suffix.		
+		if(this.baseClass){
+			var classes = this.baseClass.split(" ");
+			if(!this.isLeftToRight()){
+				classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; }));
+			}
+			dojo.addClass(this.domNode, classes);
+		}
+	},
+
+	startup: function(){
+		// summary:
+		//		Processing after the DOM fragment is added to the document
+		// description:
+		//		Called after a widget and its children have been created and added to the page,
+		//		and all related widgets have finished their create() cycle, up through postCreate().
+		//		This is useful for composite widgets that need to control or layout sub-widgets.
+		//		Many layout widgets can use this as a wiring phase.
+		this._started = true;
+	},
+
+	//////////// DESTROY FUNCTIONS ////////////////////////////////
+
+	destroyRecursive: function(/*Boolean?*/ preserveDom){
+		// summary:
+		// 		Destroy this widget and its descendants
+		// description:
+		//		This is the generic "destructor" function that all widget users
+		// 		should call to cleanly discard with a widget. Once a widget is
+		// 		destroyed, it is removed from the manager object.
+		// preserveDom:
+		//		If true, this method will leave the original DOM structure
+		//		alone of descendant Widgets. Note: This will NOT work with
+		//		dijit._Templated widgets.
+
+		this._beingDestroyed = true;
+		this.destroyDescendants(preserveDom);
+		this.destroy(preserveDom);
+	},
+
+	destroy: function(/*Boolean*/ preserveDom){
+		// summary:
+		// 		Destroy this widget, but not its descendants.
+		//		This method will, however, destroy internal widgets such as those used within a template.
+		// preserveDom: Boolean
+		//		If true, this method will leave the original DOM structure alone.
+		//		Note: This will not yet work with _Templated widgets
+
+		this._beingDestroyed = true;
+		this.uninitialize();
+		var d = dojo,
+			dfe = d.forEach,
+			dun = d.unsubscribe;
+		dfe(this._connects, function(array){
+			dfe(array, d.disconnect);
+		});
+		dfe(this._subscribes, function(handle){
+			dun(handle);
+		});
+
+		// destroy widgets created as part of template, etc.
+		dfe(this._supportingWidgets || [], function(w){
+			if(w.destroyRecursive){
+				w.destroyRecursive();
+			}else if(w.destroy){
+				w.destroy();
+			}
+		});
+
+		this.destroyRendering(preserveDom);
+		dijit.registry.remove(this.id);
+		this._destroyed = true;
+	},
+
+	destroyRendering: function(/*Boolean?*/ preserveDom){
+		// summary:
+		//		Destroys the DOM nodes associated with this widget
+		// preserveDom:
+		//		If true, this method will leave the original DOM structure alone
+		//		during tear-down. Note: this will not work with _Templated
+		//		widgets yet.
+		// tags:
+		//		protected
+
+		if(this.bgIframe){
+			this.bgIframe.destroy(preserveDom);
+			delete this.bgIframe;
+		}
+
+		if(this.domNode){
+			if(preserveDom){
+				dojo.removeAttr(this.domNode, "widgetId");
+			}else{
+				dojo.destroy(this.domNode);
+			}
+			delete this.domNode;
+		}
+
+		if(this.srcNodeRef){
+			if(!preserveDom){
+				dojo.destroy(this.srcNodeRef);
+			}
+			delete this.srcNodeRef;
+		}
+	},
+
+	destroyDescendants: function(/*Boolean?*/ preserveDom){
+		// summary:
+		//		Recursively destroy the children of this widget and their
+		//		descendants.
+		// preserveDom:
+		//		If true, the preserveDom attribute is passed to all descendant
+		//		widget's .destroy() method. Not for use with _Templated
+		//		widgets.
+
+		// get all direct descendants and destroy them recursively
+		dojo.forEach(this.getChildren(), function(widget){
+			if(widget.destroyRecursive){
+				widget.destroyRecursive(preserveDom);
+			}
+		});
+	},
+
+
+	uninitialize: function(){
+		// summary:
+		//		Stub function. Override to implement custom widget tear-down
+		//		behavior.
+		// tags:
+		//		protected
+		return false;
+	},
+
+	////////////////// MISCELLANEOUS METHODS ///////////////////
+
+	onFocus: function(){
+		// summary:
+		//		Called when the widget becomes "active" because
+		//		it or a widget inside of it either has focus, or has recently
+		//		been clicked.
+		// tags:
+		//		callback
+	},
+
+	onBlur: function(){
+		// summary:
+		//		Called when the widget stops being "active" because
+		//		focus moved to something outside of it, or the user
+		//		clicked somewhere outside of it, or the widget was
+		//		hidden.
+		// tags:
+		//		callback
+	},
+
+	_onFocus: function(e){
+		// summary:
+		//		This is where widgets do processing for when they are active,
+		//		such as changing CSS classes.  See onFocus() for more details.
+		// tags:
+		//		protected
+		this.onFocus();
+	},
+
+	_onBlur: function(){
+		// summary:
+		//		This is where widgets do processing for when they stop being active,
+		//		such as changing CSS classes.  See onBlur() for more details.
+		// tags:
+		//		protected
+		this.onBlur();
+	},
+
+	_onConnect: function(/*String*/ event){
+		// summary:
+		//		Called when someone connects to one of my handlers.
+		//		"Turn on" that handler if it isn't active yet.
+		//
+		//		This is also called for every single initialization parameter
+		//		so need to do nothing for parameters like "id".
+		// tags:
+		//		private
+		if(event in this._deferredConnects){
+			var mapNode = this[this._deferredConnects[event] || 'domNode'];
+			this.connect(mapNode, event.toLowerCase(), event);
+			delete this._deferredConnects[event];
+		}
+	},
+
+	_setClassAttr: function(/*String*/ value){
+		// summary:
+		//		Custom setter for the CSS "class" attribute
+		// tags:
+		//		protected
+		var mapNode = this[this.attributeMap["class"] || 'domNode'];
+		dojo.removeClass(mapNode, this["class"])
+		this["class"] = value;
+		dojo.addClass(mapNode, value);
+	},
+
+	_setStyleAttr: function(/*String||Object*/ value){
+		// summary:
+		//		Sets the style attribut of the widget according to value,
+		//		which is either a hash like {height: "5px", width: "3px"}
+		//		or a plain string
+		// description:
+		//		Determines which node to set the style on based on style setting
+		//		in attributeMap.
+		// tags:
+		//		protected
+
+		var mapNode = this[this.attributeMap.style || 'domNode'];
+
+		// Note: technically we should revert any style setting made in a previous call
+		// to his method, but that's difficult to keep track of.
+
+		if(dojo.isObject(value)){
+			dojo.style(mapNode, value);
+		}else{
+			if(mapNode.style.cssText){
+				mapNode.style.cssText += "; " + value;
+			}else{
+				mapNode.style.cssText = value;
+			}
+		}
+
+		this.style = value;
+	},
+
+	setAttribute: function(/*String*/ attr, /*anything*/ value){
+		// summary:
+		//		Deprecated.  Use set() instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0");
+		this.set(attr, value);
+	},
+
+	_attrToDom: function(/*String*/ attr, /*String*/ value){
+		// summary:
+		//		Reflect a widget attribute (title, tabIndex, duration etc.) to
+		//		the widget DOM, as specified in attributeMap.
+		//
+		// description:
+		//		Also sets this["attr"] to the new value.
+		//		Note some attributes like "type"
+		//		cannot be processed this way as they are not mutable.
+		//
+		// tags:
+		//		private
+
+		var commands = this.attributeMap[attr];
+		dojo.forEach(dojo.isArray(commands) ? commands : [commands], function(command){
+
+			// Get target node and what we are doing to that node
+			var mapNode = this[command.node || command || "domNode"];	// DOM node
+			var type = command.type || "attribute";	// class, innerHTML, innerText, or attribute
+
+			switch(type){
+				case "attribute":
+					if(dojo.isFunction(value)){ // functions execute in the context of the widget
+						value = dojo.hitch(this, value);
+					}
+
+					// Get the name of the DOM node attribute; usually it's the same
+					// as the name of the attribute in the widget (attr), but can be overridden.
+					// Also maps handler names to lowercase, like onSubmit --> onsubmit
+					var attrName = command.attribute ? command.attribute :
+						(/^on[A-Z][a-zA-Z]*$/.test(attr) ? attr.toLowerCase() : attr);
+
+					dojo.attr(mapNode, attrName, value);
+					break;
+				case "innerText":
+					mapNode.innerHTML = "";
+					mapNode.appendChild(dojo.doc.createTextNode(value));
+					break;
+				case "innerHTML":
+					mapNode.innerHTML = value;
+					break;
+				case "class":
+					dojo.removeClass(mapNode, this[attr]);
+					dojo.addClass(mapNode, value);
+					break;
+			}
+		}, this);
+		this[attr] = value;
+	},
+
+	attr: function(/*String|Object*/name, /*Object?*/value){
+		// summary:
+		//		Set or get properties on a widget instance.
+		//	name:
+		//		The property to get or set. If an object is passed here and not
+		//		a string, its keys are used as names of attributes to be set
+		//		and the value of the object as values to set in the widget.
+		//	value:
+		//		Optional. If provided, attr() operates as a setter. If omitted,
+		//		the current value of the named property is returned.
+		// description:
+		//		This method is deprecated, use get() or set() directly.
+
+		// Print deprecation warning but only once per calling function
+		if(dojo.config.isDebug){
+			var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}),
+				caller = (arguments.callee.caller || "unknown caller").toString();
+			if(!alreadyCalledHash[caller]){
+				dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " +
+				caller, "", "2.0");
+				alreadyCalledHash[caller] = true;
+			}
+		}
+
+		var args = arguments.length;
+		if(args >= 2 || typeof name === "object"){ // setter
+			return this.set.apply(this, arguments);
+		}else{ // getter
+			return this.get(name);
+		}
+	},
+	
+	get: function(name){
+		// summary:
+		//		Get a property from a widget.
+		//	name:
+		//		The property to get.
+		// description:
+		//		Get a named property from a widget. The property may
+		//		potentially be retrieved via a getter method. If no getter is defined, this
+		// 		just retrieves the object's property.  
+		// 		For example, if the widget has a properties "foo"
+		//		and "bar" and a method named "_getFooAttr", calling:
+		//	|	myWidget.get("foo");
+		//		would be equivalent to writing:
+		//	|	widget._getFooAttr();
+		//		and:
+		//	|	myWidget.get("bar");
+		//		would be equivalent to writing:
+		//	|	widget.bar;
+		var names = this._getAttrNames(name);
+		return this[names.g] ? this[names.g]() : this[name];
+	},
+	
+	set: function(name, value){
+		// summary:
+		//		Set a property on a widget
+		//	name:
+		//		The property to set. 
+		//	value:
+		//		The value to set in the property.
+		// description:
+		//		Sets named properties on a widget which may potentially be handled by a 
+		// 		setter in the widget.
+		// 		For example, if the widget has a properties "foo"
+		//		and "bar" and a method named "_setFooAttr", calling:
+		//	|	myWidget.set("foo", "Howdy!");
+		//		would be equivalent to writing:
+		//	|	widget._setFooAttr("Howdy!");
+		//		and:
+		//	|	myWidget.set("bar", 3);
+		//		would be equivalent to writing:
+		//	|	widget.bar = 3;
+		//
+		//	set() may also be called with a hash of name/value pairs, ex:
+		//	|	myWidget.set({
+		//	|		foo: "Howdy",
+		//	|		bar: 3
+		//	|	})
+		//	This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
+
+		if(typeof name === "object"){
+			for(var x in name){
+				this.set(x, name[x]); 
+			}
+			return this;
+		}
+		var names = this._getAttrNames(name);
+		if(this[names.s]){
+			// use the explicit setter
+			var result = this[names.s].apply(this, Array.prototype.slice.call(arguments, 1));
+		}else{
+			// if param is specified as DOM node attribute, copy it
+			if(name in this.attributeMap){
+				this._attrToDom(name, value);
+			}
+			var oldValue = this[name];
+			// FIXME: what about function assignments? Any way to connect() here?
+			this[name] = value;
+		}
+		return result || this;
+	},
+	
+	_attrPairNames: {},		// shared between all widgets
+	_getAttrNames: function(name){
+		// summary:
+		//		Helper function for get() and set().
+		//		Caches attribute name values so we don't do the string ops every time.
+		// tags:
+		//		private
+
+		var apn = this._attrPairNames;
+		if(apn[name]){ return apn[name]; }
+		var uc = name.charAt(0).toUpperCase() + name.substr(1);
+		return (apn[name] = {
+			n: name+"Node",
+			s: "_set"+uc+"Attr",
+			g: "_get"+uc+"Attr"
+		});
+	},
+
+	toString: function(){
+		// summary:
+		//		Returns a string that represents the widget
+		// description:
+		//		When a widget is cast to a string, this method will be used to generate the
+		//		output. Currently, it does not implement any sort of reversible
+		//		serialization.
+		return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
+	},
+
+	getDescendants: function(){
+		// summary:
+		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+		//		This method should generally be avoided as it returns widgets declared in templates, which are
+		//		supposed to be internal/hidden, but it's left here for back-compat reasons.
+
+		return this.containerNode ? dojo.query('[widgetId]', this.containerNode).map(dijit.byNode) : []; // dijit._Widget[]
+	},
+
+	getChildren: function(){
+		// summary:
+		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+		//		Does not return nested widgets, nor widgets that are part of this widget's template.
+		return this.containerNode ? dijit.findWidgets(this.containerNode) : []; // dijit._Widget[]
+	},
+
+	// nodesWithKeyClick: [private] String[]
+	//		List of nodes that correctly handle click events via native browser support,
+	//		and don't need dijit's help
+	nodesWithKeyClick: ["input", "button"],
+
+	connect: function(
+			/*Object|null*/ obj,
+			/*String|Function*/ event,
+			/*String|Function*/ method){
+		// summary:
+		//		Connects specified obj/event to specified method of this object
+		//		and registers for disconnect() on widget destroy.
+		// description:
+		//		Provide widget-specific analog to dojo.connect, except with the
+		//		implicit use of this widget as the target object.
+		//		This version of connect also provides a special "ondijitclick"
+		//		event which triggers on a click or space or enter keyup
+		// returns:
+		//		A handle that can be passed to `disconnect` in order to disconnect before
+		//		the widget is destroyed.
+		// example:
+		//	|	var btn = new dijit.form.Button();
+		//	|	// when foo.bar() is called, call the listener we're going to
+		//	|	// provide in the scope of btn
+		//	|	btn.connect(foo, "bar", function(){
+		//	|		console.debug(this.toString());
+		//	|	});
+		// tags:
+		//		protected
+
+		var d = dojo,
+			dc = d._connect,
+			handles = [];
+		if(event == "ondijitclick"){
+			// add key based click activation for unsupported nodes.
+			// do all processing onkey up to prevent spurious clicks
+			// for details see comments at top of this file where _lastKeyDownNode is defined
+			if(dojo.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button
+				var m = d.hitch(this, method);
+				handles.push(
+					dc(obj, "onkeydown", this, function(e){
+						//console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+						if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+							// needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work
+							dijit._lastKeyDownNode = e.target;
+							e.preventDefault();		// stop event to prevent scrolling on space key in IE
+						}
+			 		}),
+					dc(obj, "onkeyup", this, function(e){
+						//console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+						if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+							e.target === dijit._lastKeyDownNode &&
+							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+								//need reset here or have problems in FF when focus returns to trigger element after closing popup/alert
+								dijit._lastKeyDownNode = null;
+								return m(e);
+						}
+					})
+				);
+			}
+			event = "onclick";
+		}
+		handles.push(dc(obj, event, this, method));
+
+		this._connects.push(handles);
+		return handles;		// _Widget.Handle
+	},
+
+	disconnect: function(/* _Widget.Handle */ handles){
+		// summary:
+		//		Disconnects handle created by `connect`.
+		//		Also removes handle from this widget's list of connects.
+		// tags:
+		//		protected
+		for(var i=0; i<this._connects.length; i++){
+			if(this._connects[i] == handles){
+				dojo.forEach(handles, dojo.disconnect);
+				this._connects.splice(i, 1);
+				return;
+			}
+		}
+	},
+
+	subscribe: function(
+			/*String*/ topic,
+			/*String|Function*/ method){
+		// summary:
+		//		Subscribes to the specified topic and calls the specified method
+		//		of this object and registers for unsubscribe() on widget destroy.
+		// description:
+		//		Provide widget-specific analog to dojo.subscribe, except with the
+		//		implicit use of this widget as the target object.
+		// example:
+		//	|	var btn = new dijit.form.Button();
+		//	|	// when /my/topic is published, this button changes its label to
+		//	|   // be the parameter of the topic.
+		//	|	btn.subscribe("/my/topic", function(v){
+		//	|		this.set("label", v);
+		//	|	});
+		var d = dojo,
+			handle = d.subscribe(topic, this, method);
+
+		// return handles for Any widget that may need them
+		this._subscribes.push(handle);
+		return handle;
+	},
+
+	unsubscribe: function(/*Object*/ handle){
+		// summary:
+		//		Unsubscribes handle created by this.subscribe.
+		//		Also removes handle from this widget's list of subscriptions
+		for(var i=0; i<this._subscribes.length; i++){
+			if(this._subscribes[i] == handle){
+				dojo.unsubscribe(handle);
+				this._subscribes.splice(i, 1);
+				return;
+			}
+		}
+	},
+
+	isLeftToRight: function(){
+		// summary:
+		//		Return this widget's explicit or implicit orientation (true for LTR, false for RTL)
+		// tags:
+		//		protected
+		return this.dir ? (this.dir == "ltr") : dojo._isBodyLtr(); //Boolean
+	},
+
+	isFocusable: function(){
+		// summary:
+		//		Return true if this widget can currently be focused
+		//		and false if not
+		return this.focus && (dojo.style(this.domNode, "display") != "none");
+	},
+
+	placeAt: function(/* String|DomNode|_Widget */reference, /* String?|Int? */position){
+		// summary:
+		//		Place this widget's domNode reference somewhere in the DOM based
+		//		on standard dojo.place conventions, or passing a Widget reference that
+		//		contains and addChild member.
+		//
+		// description:
+		//		A convenience function provided in all _Widgets, providing a simple
+		//		shorthand mechanism to put an existing (or newly created) Widget
+		//		somewhere in the dom, and allow chaining.
+		//
+		// reference:
+		//		The String id of a domNode, a domNode reference, or a reference to a Widget posessing
+		//		an addChild method.
+		//
+		// position:
+		//		If passed a string or domNode reference, the position argument
+		//		accepts a string just as dojo.place does, one of: "first", "last",
+		//		"before", or "after".
+		//
+		//		If passed a _Widget reference, and that widget reference has an ".addChild" method,
+		//		it will be called passing this widget instance into that method, supplying the optional
+		//		position index passed.
+		//
+		// returns:
+		//		dijit._Widget
+		//		Provides a useful return of the newly created dijit._Widget instance so you
+		//		can "chain" this function by instantiating, placing, then saving the return value
+		//		to a variable.
+		//
+		// example:
+		// | 	// create a Button with no srcNodeRef, and place it in the body:
+		// | 	var button = new dijit.form.Button({ label:"click" }).placeAt(dojo.body());
+		// | 	// now, 'button' is still the widget reference to the newly created button
+		// | 	dojo.connect(button, "onClick", function(e){ console.log('click'); });
+		//
+		// example:
+		// |	// create a button out of a node with id="src" and append it to id="wrapper":
+		// | 	var button = new dijit.form.Button({},"src").placeAt("wrapper");
+		//
+		// example:
+		// |	// place a new button as the first element of some div
+		// |	var button = new dijit.form.Button({ label:"click" }).placeAt("wrapper","first");
+		//
+		// example:
+		// |	// create a contentpane and add it to a TabContainer
+		// |	var tc = dijit.byId("myTabs");
+		// |	new dijit.layout.ContentPane({ href:"foo.html", title:"Wow!" }).placeAt(tc)
+
+		if(reference.declaredClass && reference.addChild){
+			reference.addChild(this, position);
+		}else{
+			dojo.place(this.domNode, reference, position);
+		}
+		return this;
+	},
+
+	_onShow: function(){
+		// summary:
+		//		Internal method called when this widget is made visible.
+		//		See `onShow` for details.
+		this.onShow();
+	},
+
+	onShow: function(){
+		// summary:
+		//		Called when this widget becomes the selected pane in a
+		//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+		//		`dijit.layout.AccordionContainer`, etc.
+		//
+		//		Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+		// tags:
+		//		callback
+	},
+
+	onHide: function(){
+		// summary:
+			//		Called when another widget becomes the selected pane in a
+			//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+			//		`dijit.layout.AccordionContainer`, etc.
+			//
+			//		Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+			// tags:
+			//		callback
+	},
+
+	onClose: function(){
+		// summary:
+		//		Called when this widget is being displayed as a popup (ex: a Calendar popped
+		//		up from a DateTextBox), and it is hidden.
+		//		This is called from the dijit.popup code, and should not be called directly.
+		//
+		//		Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses.
+		//		Callback if a user tries to close the child.   Child will be closed if this function returns true.
+		// tags:
+		//		extension
+
+		return true;		// Boolean
+	}
+});
+
+})();
+
+}
+
+if(!dojo._hasResource["dojox.gfx.matrix"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.matrix"] = true;
+dojo.provide("dojox.gfx.matrix");
+
+(function(){
+	var m = dojox.gfx.matrix;
+
+	// candidates for dojox.math:
+	var _degToRadCache = {};
+	m._degToRad = function(degree){
+		return _degToRadCache[degree] || (_degToRadCache[degree] = (Math.PI * degree / 180));
+	};
+	m._radToDeg = function(radian){ return radian / Math.PI * 180; };
+
+	m.Matrix2D = function(arg){
+		// summary: a 2D matrix object
+		// description: Normalizes a 2D matrix-like object. If arrays is passed,
+		//		all objects of the array are normalized and multiplied sequentially.
+		// arg: Object
+		//		a 2D matrix-like object, a number, or an array of such objects
+		if(arg){
+			if(typeof arg == "number"){
+				this.xx = this.yy = arg;
+			}else if(arg instanceof Array){
+				if(arg.length > 0){
+					var matrix = m.normalize(arg[0]);
+					// combine matrices
+					for(var i = 1; i < arg.length; ++i){
+						var l = matrix, r = dojox.gfx.matrix.normalize(arg[i]);
+						matrix = new m.Matrix2D();
+						matrix.xx = l.xx * r.xx + l.xy * r.yx;
+						matrix.xy = l.xx * r.xy + l.xy * r.yy;
+						matrix.yx = l.yx * r.xx + l.yy * r.yx;
+						matrix.yy = l.yx * r.xy + l.yy * r.yy;
+						matrix.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+						matrix.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+					}
+					dojo.mixin(this, matrix);
+				}
+			}else{
+				dojo.mixin(this, arg);
+			}
+		}
+	};
+
+	// the default (identity) matrix, which is used to fill in missing values
+	dojo.extend(m.Matrix2D, {xx: 1, xy: 0, yx: 0, yy: 1, dx: 0, dy: 0});
+
+	dojo.mixin(m, {
+		// summary: class constants, and methods of dojox.gfx.matrix
+
+		// matrix constants
+
+		// identity: dojox.gfx.matrix.Matrix2D
+		//		an identity matrix constant: identity * (x, y) == (x, y)
+		identity: new m.Matrix2D(),
+
+		// flipX: dojox.gfx.matrix.Matrix2D
+		//		a matrix, which reflects points at x = 0 line: flipX * (x, y) == (-x, y)
+		flipX:    new m.Matrix2D({xx: -1}),
+
+		// flipY: dojox.gfx.matrix.Matrix2D
+		//		a matrix, which reflects points at y = 0 line: flipY * (x, y) == (x, -y)
+		flipY:    new m.Matrix2D({yy: -1}),
+
+		// flipXY: dojox.gfx.matrix.Matrix2D
+		//		a matrix, which reflects points at the origin of coordinates: flipXY * (x, y) == (-x, -y)
+		flipXY:   new m.Matrix2D({xx: -1, yy: -1}),
+
+		// matrix creators
+
+		translate: function(a, b){
+			// summary: forms a translation matrix
+			// description: The resulting matrix is used to translate (move) points by specified offsets.
+			// a: Number: an x coordinate value
+			// b: Number: a y coordinate value
+			if(arguments.length > 1){
+				return new m.Matrix2D({dx: a, dy: b}); // dojox.gfx.matrix.Matrix2D
+			}
+			// branch
+			// a: dojox.gfx.Point: a point-like object, which specifies offsets for both dimensions
+			// b: null
+			return new m.Matrix2D({dx: a.x, dy: a.y}); // dojox.gfx.matrix.Matrix2D
+		},
+		scale: function(a, b){
+			// summary: forms a scaling matrix
+			// description: The resulting matrix is used to scale (magnify) points by specified offsets.
+			// a: Number: a scaling factor used for the x coordinate
+			// b: Number: a scaling factor used for the y coordinate
+			if(arguments.length > 1){
+				return new m.Matrix2D({xx: a, yy: b}); // dojox.gfx.matrix.Matrix2D
+			}
+			if(typeof a == "number"){
+				// branch
+				// a: Number: a uniform scaling factor used for the both coordinates
+				// b: null
+				return new m.Matrix2D({xx: a, yy: a}); // dojox.gfx.matrix.Matrix2D
+			}
+			// branch
+			// a: dojox.gfx.Point: a point-like object, which specifies scale factors for both dimensions
+			// b: null
+			return new m.Matrix2D({xx: a.x, yy: a.y}); // dojox.gfx.matrix.Matrix2D
+		},
+		rotate: function(angle){
+			// summary: forms a rotating matrix
+			// description: The resulting matrix is used to rotate points
+			//		around the origin of coordinates (0, 0) by specified angle.
+			// angle: Number: an angle of rotation in radians (>0 for CW)
+			var c = Math.cos(angle);
+			var s = Math.sin(angle);
+			return new m.Matrix2D({xx: c, xy: -s, yx: s, yy: c}); // dojox.gfx.matrix.Matrix2D
+		},
+		rotateg: function(degree){
+			// summary: forms a rotating matrix
+			// description: The resulting matrix is used to rotate points
+			//		around the origin of coordinates (0, 0) by specified degree.
+			//		See dojox.gfx.matrix.rotate() for comparison.
+			// degree: Number: an angle of rotation in degrees (>0 for CW)
+			return m.rotate(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+		},
+		skewX: function(angle) {
+			// summary: forms an x skewing matrix
+			// description: The resulting matrix is used to skew points in the x dimension
+			//		around the origin of coordinates (0, 0) by specified angle.
+			// angle: Number: an skewing angle in radians
+			return new m.Matrix2D({xy: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+		},
+		skewXg: function(degree){
+			// summary: forms an x skewing matrix
+			// description: The resulting matrix is used to skew points in the x dimension
+			//		around the origin of coordinates (0, 0) by specified degree.
+			//		See dojox.gfx.matrix.skewX() for comparison.
+			// degree: Number: an skewing angle in degrees
+			return m.skewX(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+		},
+		skewY: function(angle){
+			// summary: forms a y skewing matrix
+			// description: The resulting matrix is used to skew points in the y dimension
+			//		around the origin of coordinates (0, 0) by specified angle.
+			// angle: Number: an skewing angle in radians
+			return new m.Matrix2D({yx: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+		},
+		skewYg: function(degree){
+			// summary: forms a y skewing matrix
+			// description: The resulting matrix is used to skew points in the y dimension
+			//		around the origin of coordinates (0, 0) by specified degree.
+			//		See dojox.gfx.matrix.skewY() for comparison.
+			// degree: Number: an skewing angle in degrees
+			return m.skewY(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+		},
+		reflect: function(a, b){
+			// summary: forms a reflection matrix
+			// description: The resulting matrix is used to reflect points around a vector,
+			//		which goes through the origin.
+			// a: dojox.gfx.Point: a point-like object, which specifies a vector of reflection
+			// b: null
+			if(arguments.length == 1){
+				b = a.y;
+				a = a.x;
+			}
+			// branch
+			// a: Number: an x coordinate value
+			// b: Number: a y coordinate value
+
+			// make a unit vector
+			var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = 2 * a * b / n2;
+			return new m.Matrix2D({xx: 2 * a2 / n2 - 1, xy: xy, yx: xy, yy: 2 * b2 / n2 - 1}); // dojox.gfx.matrix.Matrix2D
+		},
+		project: function(a, b){
+			// summary: forms an orthogonal projection matrix
+			// description: The resulting matrix is used to project points orthogonally on a vector,
+			//		which goes through the origin.
+			// a: dojox.gfx.Point: a point-like object, which specifies a vector of projection
+			// b: null
+			if(arguments.length == 1){
+				b = a.y;
+				a = a.x;
+			}
+			// branch
+			// a: Number: an x coordinate value
+			// b: Number: a y coordinate value
+
+			// make a unit vector
+			var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = a * b / n2;
+			return new m.Matrix2D({xx: a2 / n2, xy: xy, yx: xy, yy: b2 / n2}); // dojox.gfx.matrix.Matrix2D
+		},
+
+		// ensure matrix 2D conformance
+		normalize: function(matrix){
+			// summary: converts an object to a matrix, if necessary
+			// description: Converts any 2D matrix-like object or an array of
+			//		such objects to a valid dojox.gfx.matrix.Matrix2D object.
+			// matrix: Object: an object, which is converted to a matrix, if necessary
+			return (matrix instanceof m.Matrix2D) ? matrix : new m.Matrix2D(matrix); // dojox.gfx.matrix.Matrix2D
+		},
+
+		// common operations
+
+		clone: function(matrix){
+			// summary: creates a copy of a 2D matrix
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be cloned
+			var obj = new m.Matrix2D();
+			for(var i in matrix){
+				if(typeof(matrix[i]) == "number" && typeof(obj[i]) == "number" && obj[i] != matrix[i]) obj[i] = matrix[i];
+			}
+			return obj; // dojox.gfx.matrix.Matrix2D
+		},
+		invert: function(matrix){
+			// summary: inverts a 2D matrix
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be inverted
+			var M = m.normalize(matrix),
+				D = M.xx * M.yy - M.xy * M.yx,
+				M = new m.Matrix2D({
+					xx: M.yy/D, xy: -M.xy/D,
+					yx: -M.yx/D, yy: M.xx/D,
+					dx: (M.xy * M.dy - M.yy * M.dx) / D,
+					dy: (M.yx * M.dx - M.xx * M.dy) / D
+				});
+			return M; // dojox.gfx.matrix.Matrix2D
+		},
+		_multiplyPoint: function(matrix, x, y){
+			// summary: applies a matrix to a point
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+			// x: Number: an x coordinate of a point
+			// y: Number: a y coordinate of a point
+			return {x: matrix.xx * x + matrix.xy * y + matrix.dx, y: matrix.yx * x + matrix.yy * y + matrix.dy}; // dojox.gfx.Point
+		},
+		multiplyPoint: function(matrix, /* Number||Point */ a, /* Number, optional */ b){
+			// summary: applies a matrix to a point
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+			// a: Number: an x coordinate of a point
+			// b: Number: a y coordinate of a point
+			var M = m.normalize(matrix);
+			if(typeof a == "number" && typeof b == "number"){
+				return m._multiplyPoint(M, a, b); // dojox.gfx.Point
+			}
+			// branch
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+			// a: dojox.gfx.Point: a point
+			// b: null
+			return m._multiplyPoint(M, a.x, a.y); // dojox.gfx.Point
+		},
+		multiply: function(matrix){
+			// summary: combines matrices by multiplying them sequentially in the given order
+			// matrix: dojox.gfx.matrix.Matrix2D...: a 2D matrix-like object,
+			//		all subsequent arguments are matrix-like objects too
+			var M = m.normalize(matrix);
+			// combine matrices
+			for(var i = 1; i < arguments.length; ++i){
+				var l = M, r = m.normalize(arguments[i]);
+				M = new m.Matrix2D();
+				M.xx = l.xx * r.xx + l.xy * r.yx;
+				M.xy = l.xx * r.xy + l.xy * r.yy;
+				M.yx = l.yx * r.xx + l.yy * r.yx;
+				M.yy = l.yx * r.xy + l.yy * r.yy;
+				M.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+				M.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+			}
+			return M; // dojox.gfx.matrix.Matrix2D
+		},
+
+		// high level operations
+
+		_sandwich: function(matrix, x, y){
+			// summary: applies a matrix at a centrtal point
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object, which is applied at a central point
+			// x: Number: an x component of the central point
+			// y: Number: a y component of the central point
+			return m.multiply(m.translate(x, y), matrix, m.translate(-x, -y)); // dojox.gfx.matrix.Matrix2D
+		},
+		scaleAt: function(a, b, c, d){
+			// summary: scales a picture using a specified point as a center of scaling
+			// description: Compare with dojox.gfx.matrix.scale().
+			// a: Number: a scaling factor used for the x coordinate
+			// b: Number: a scaling factor used for the y coordinate
+			// c: Number: an x component of a central point
+			// d: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) uniform scale factor, Point
+			//	2) uniform scale factor, x, y
+			//	3) x scale, y scale, Point
+			//	4) x scale, y scale, x, y
+
+			switch(arguments.length){
+				case 4:
+					// a and b are scale factor components, c and d are components of a point
+					return m._sandwich(m.scale(a, b), c, d); // dojox.gfx.matrix.Matrix2D
+				case 3:
+					if(typeof c == "number"){
+						// branch
+						// a: Number: a uniform scaling factor used for both coordinates
+						// b: Number: an x component of a central point
+						// c: Number: a y component of a central point
+						// d: null
+						return m._sandwich(m.scale(a), b, c); // dojox.gfx.matrix.Matrix2D
+					}
+					// branch
+					// a: Number: a scaling factor used for the x coordinate
+					// b: Number: a scaling factor used for the y coordinate
+					// c: dojox.gfx.Point: a central point
+					// d: null
+					return m._sandwich(m.scale(a, b), c.x, c.y); // dojox.gfx.matrix.Matrix2D
+			}
+			// branch
+			// a: Number: a uniform scaling factor used for both coordinates
+			// b: dojox.gfx.Point: a central point
+			// c: null
+			// d: null
+			return m._sandwich(m.scale(a), b.x, b.y); // dojox.gfx.matrix.Matrix2D
+		},
+		rotateAt: function(angle, a, b){
+			// summary: rotates a picture using a specified point as a center of rotation
+			// description: Compare with dojox.gfx.matrix.rotate().
+			// angle: Number: an angle of rotation in radians (>0 for CW)
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) rotation angle in radians, Point
+			//	2) rotation angle in radians, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.rotate(angle), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// angle: Number: an angle of rotation in radians (>0 for CCW)
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.rotate(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		rotategAt: function(degree, a, b){
+			// summary: rotates a picture using a specified point as a center of rotation
+			// description: Compare with dojox.gfx.matrix.rotateg().
+			// degree: Number: an angle of rotation in degrees (>0 for CW)
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) rotation angle in degrees, Point
+			//	2) rotation angle in degrees, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.rotateg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// degree: Number: an angle of rotation in degrees (>0 for CCW)
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.rotateg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewXAt: function(angle, a, b){
+			// summary: skews a picture along the x axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewX().
+			// angle: Number: an skewing angle in radians
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in radians, Point
+			//	2) skew angle in radians, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewX(angle), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// angle: Number: an skewing angle in radians
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewX(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewXgAt: function(degree, a, b){
+			// summary: skews a picture along the x axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewXg().
+			// degree: Number: an skewing angle in degrees
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in degrees, Point
+			//	2) skew angle in degrees, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewXg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// degree: Number: an skewing angle in degrees
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewXg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewYAt: function(angle, a, b){
+			// summary: skews a picture along the y axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewY().
+			// angle: Number: an skewing angle in radians
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in radians, Point
+			//	2) skew angle in radians, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewY(angle), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// angle: Number: an skewing angle in radians
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewY(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewYgAt: function(/* Number */ degree, /* Number||Point */ a, /* Number, optional */ b){
+			// summary: skews a picture along the y axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewYg().
+			// degree: Number: an skewing angle in degrees
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in degrees, Point
+			//	2) skew angle in degrees, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewYg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// degree: Number: an skewing angle in degrees
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewYg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		}
+
+		//TODO: rect-to-rect mapping, scale-to-fit (isotropic and anisotropic versions)
+
+	});
+})();
+
+// propagate Matrix2D up
+dojox.gfx.Matrix2D = dojox.gfx.matrix.Matrix2D;
+
+}
+
+if(!dojo._hasResource["dojox.gfx._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx._base"] = true;
+dojo.provide("dojox.gfx._base");
+
+(function(){
+	var g = dojox.gfx, b = g._base;
+
+	// candidates for dojox.style (work on VML and SVG nodes)
+	g._hasClass = function(/*DomNode*/node, /*String*/classStr){
+		//	summary:
+		//		Returns whether or not the specified classes are a portion of the
+		//		class list currently applied to the node.
+		// return (new RegExp('(^|\\s+)'+classStr+'(\\s+|$)')).test(node.className)	// Boolean
+		var cls = node.getAttribute("className");
+		return cls && (" " + cls + " ").indexOf(" " + classStr + " ") >= 0;  // Boolean
+	}
+	g._addClass = function(/*DomNode*/node, /*String*/classStr){
+		//	summary:
+		//		Adds the specified classes to the end of the class list on the
+		//		passed node.
+		var cls = node.getAttribute("className") || "";
+		if(!cls || (" " + cls + " ").indexOf(" " + classStr + " ") < 0){
+			node.setAttribute("className", cls + (cls ? " " : "") + classStr);
+		}
+	}
+	g._removeClass = function(/*DomNode*/node, /*String*/classStr){
+		//	summary: Removes classes from node.
+		var cls = node.getAttribute("className");
+		if(cls){
+			node.setAttribute(
+				"className", 
+				cls.replace(new RegExp('(^|\\s+)' + classStr + '(\\s+|$)'), "$1$2")
+			);
+		}
+	}
+
+	// candidate for dojox.html.metrics (dynamic font resize handler is not implemented here)
+
+	//	derived from Morris John's emResized measurer
+	b._getFontMeasurements = function(){
+		//	summary:
+		//		Returns an object that has pixel equivilents of standard font
+		//		size values.
+		var heights = {
+			'1em': 0, '1ex': 0, '100%': 0, '12pt': 0, '16px': 0, 'xx-small': 0,
+			'x-small': 0, 'small': 0, 'medium': 0, 'large': 0, 'x-large': 0,
+			'xx-large': 0
+		};
+
+		if(dojo.isIE){
+			//	we do a font-size fix if and only if one isn't applied already.
+			//	NOTE: If someone set the fontSize on the HTML Element, this will kill it.
+			dojo.doc.documentElement.style.fontSize="100%";
+		}
+
+		//	set up the measuring node.
+		var div = dojo.doc.createElement("div");
+		var s = div.style;
+		s.position = "absolute";
+		s.left = "-100px";
+		s.top = "0px";
+		s.width = "30px";
+		s.height = "1000em";
+		s.borderWidth = "0px";
+		s.margin = "0px";
+		s.padding = "0px";
+		s.outline = "none";
+		s.lineHeight = "1";
+		s.overflow = "hidden";
+		dojo.body().appendChild(div);
+
+		//	do the measurements.
+		for(var p in heights){
+			div.style.fontSize = p;
+			heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
+		}
+
+		dojo.body().removeChild(div);
+		div = null;
+		return heights; 	//	object
+	};
+
+	var fontMeasurements = null;
+
+	b._getCachedFontMeasurements = function(recalculate){
+		if(recalculate || !fontMeasurements){
+			fontMeasurements = b._getFontMeasurements();
+		}
+		return fontMeasurements;
+	};
+
+	// candidate for dojox.html.metrics
+
+	var measuringNode = null, empty = {};
+	b._getTextBox = function(	/*String*/ text,
+								/*Object*/ style,
+								/*String?*/ className){
+		var m, s, al = arguments.length;
+		if(!measuringNode){
+			m = measuringNode = dojo.doc.createElement("div");
+			s = m.style;
+			s.position = "absolute";
+			s.left = "-10000px";
+			s.top = "0";
+			dojo.body().appendChild(m);
+		}else{
+			m = measuringNode;
+			s = m.style;
+		}
+		// reset styles
+		m.className = "";
+		s.borderWidth = "0";
+		s.margin = "0";
+		s.padding = "0";
+		s.outline = "0";
+		// set new style
+		if(al > 1 && style){
+			for(var i in style){
+				if(i in empty){ continue; }
+				s[i] = style[i];
+			}
+		}
+		// set classes
+		if(al > 2 && className){
+			m.className = className;
+		}
+		// take a measure
+		m.innerHTML = text;
+
+		if(m["getBoundingClientRect"]){
+			var bcr = m.getBoundingClientRect();
+			return {l: bcr.left, t: bcr.top, w: bcr.width || (bcr.right - bcr.left), h: bcr.height || (bcr.bottom - bcr.top)};
+		}else{
+			return dojo.marginBox(m);
+		}
+	};
+
+	// candidate for dojo.dom
+
+	var uniqueId = 0;
+	b._getUniqueId = function(){
+		// summary: returns a unique string for use with any DOM element
+		var id;
+		do{
+			id = dojo._scopeName + "Unique" + (++uniqueId);
+		}while(dojo.byId(id));
+		return id;
+	};
+})();
+
+dojo.mixin(dojox.gfx, {
+	//	summary:
+	// 		defines constants, prototypes, and utility functions
+
+	// default shapes, which are used to fill in missing parameters
+	defaultPath: {
+		type: "path", path: ""
+	},
+	defaultPolyline: {
+		type: "polyline", points: []
+	},
+	defaultRect: {
+		type: "rect", x: 0, y: 0, width: 100, height: 100, r: 0
+	},
+	defaultEllipse: {
+		type: "ellipse", cx: 0, cy: 0, rx: 200, ry: 100
+	},
+	defaultCircle: {
+		type: "circle", cx: 0, cy: 0, r: 100
+	},
+	defaultLine: {
+		type: "line", x1: 0, y1: 0, x2: 100, y2: 100
+	},
+	defaultImage: {
+		type: "image", x: 0, y: 0, width: 0, height: 0, src: ""
+	},
+	defaultText: {
+		type: "text", x: 0, y: 0, text: "", align: "start",
+		decoration: "none", rotated: false, kerning: true
+	},
+	defaultTextPath: {
+		type: "textpath", text: "", align: "start",
+		decoration: "none", rotated: false, kerning: true
+	},
+
+	// default geometric attributes
+	defaultStroke: {
+		type: "stroke", color: "black", style: "solid", width: 1, 
+		cap: "butt", join: 4
+	},
+	defaultLinearGradient: {
+		type: "linear", x1: 0, y1: 0, x2: 100, y2: 100,
+		colors: [
+			{ offset: 0, color: "black" }, { offset: 1, color: "white" }
+		]
+	},
+	defaultRadialGradient: {
+		type: "radial", cx: 0, cy: 0, r: 100,
+		colors: [
+			{ offset: 0, color: "black" }, { offset: 1, color: "white" }
+		]
+	},
+	defaultPattern: {
+		type: "pattern", x: 0, y: 0, width: 0, height: 0, src: ""
+	},
+	defaultFont: {
+		type: "font", style: "normal", variant: "normal", 
+		weight: "normal", size: "10pt", family: "serif"
+	},
+
+	getDefault: (function(){
+		var typeCtorCache = {};
+		// a memoized delegate()
+		return function(/*String*/ type){
+			var t = typeCtorCache[type];
+			if(t){
+				return new t();
+			}
+			t = typeCtorCache[type] = new Function;
+			t.prototype = dojox.gfx[ "default" + type ];
+			return new t();
+		}
+	})(),
+
+	normalizeColor: function(/*Color*/ color){
+		//	summary:
+		// 		converts any legal color representation to normalized
+		// 		dojo.Color object
+		return (color instanceof dojo.Color) ? color : new dojo.Color(color); // dojo.Color
+	},
+	normalizeParameters: function(existed, update){
+		//	summary:
+		// 		updates an existing object with properties from an "update"
+		// 		object
+		//	existed: Object
+		//		the "target" object to be updated
+		//	update:  Object
+		//		the "update" object, whose properties will be used to update
+		//		the existed object
+		if(update){
+			var empty = {};
+			for(var x in existed){
+				if(x in update && !(x in empty)){
+					existed[x] = update[x];
+				}
+			}
+		}
+		return existed;	// Object
+	},
+	makeParameters: function(defaults, update){
+		//	summary:
+		// 		copies the original object, and all copied properties from the
+		// 		"update" object
+		//	defaults: Object
+		//		the object to be cloned before updating
+		//	update:   Object
+		//		the object, which properties are to be cloned during updating
+		if(!update){
+			// return dojo.clone(defaults);
+			return dojo.delegate(defaults);
+		}
+		var result = {};
+		for(var i in defaults){
+			if(!(i in result)){
+				result[i] = dojo.clone((i in update) ? update[i] : defaults[i]);
+			}
+		}
+		return result; // Object
+	},
+	formatNumber: function(x, addSpace){
+		// summary: converts a number to a string using a fixed notation
+		// x:			Number:		number to be converted
+		// addSpace:	Boolean?:	if it is true, add a space before a positive number
+		var val = x.toString();
+		if(val.indexOf("e") >= 0){
+			val = x.toFixed(4);
+		}else{
+			var point = val.indexOf(".");
+			if(point >= 0 && val.length - point > 5){
+				val = x.toFixed(4);
+			}
+		}
+		if(x < 0){
+			return val; // String
+		}
+		return addSpace ? " " + val : val; // String
+	},
+	// font operations
+	makeFontString: function(font){
+		// summary: converts a font object to a CSS font string
+		// font:	Object:	font object (see dojox.gfx.defaultFont)
+		return font.style + " " + font.variant + " " + font.weight + " " + font.size + " " + font.family; // Object
+	},
+	splitFontString: function(str){
+		// summary:
+		//		converts a CSS font string to a font object
+		// description:
+		//		Converts a CSS font string to a gfx font object. The CSS font
+		//		string components should follow the W3C specified order
+		//		(see http://www.w3.org/TR/CSS2/fonts.html#font-shorthand):
+		//		style, variant, weight, size, optional line height (will be
+		//		ignored), and family.
+		// str: String
+		//		a CSS font string
+		var font = dojox.gfx.getDefault("Font");
+		var t = str.split(/\s+/);
+		do{
+			if(t.length < 5){ break; }
+			font.style   = t[0];
+			font.variant = t[1];
+			font.weight  = t[2];
+			var i = t[3].indexOf("/");
+			font.size = i < 0 ? t[3] : t[3].substring(0, i);
+			var j = 4;
+			if(i < 0){
+				if(t[4] == "/"){
+					j = 6;
+				}else if(t[4].charAt(0) == "/"){
+					j = 5;
+				}
+			}
+			if(j < t.length){
+				font.family = t.slice(j).join(" ");
+			}
+		}while(false);
+		return font;	// Object
+	},
+	// length operations
+	cm_in_pt: 72 / 2.54,	// Number: points per centimeter
+	mm_in_pt: 7.2 / 2.54,	// Number: points per millimeter
+	px_in_pt: function(){
+		// summary: returns a number of pixels per point
+		return dojox.gfx._base._getCachedFontMeasurements()["12pt"] / 12;	// Number
+	},
+	pt2px: function(len){
+		// summary: converts points to pixels
+		// len: Number: a value in points
+		return len * dojox.gfx.px_in_pt();	// Number
+	},
+	px2pt: function(len){
+		// summary: converts pixels to points
+		// len: Number: a value in pixels
+		return len / dojox.gfx.px_in_pt();	// Number
+	},
+	normalizedLength: function(len) {
+		// summary: converts any length value to pixels
+		// len: String: a length, e.g., "12pc"
+		if(len.length == 0) return 0;
+		if(len.length > 2){
+			var px_in_pt = dojox.gfx.px_in_pt();
+			var val = parseFloat(len);
+			switch(len.slice(-2)){
+				case "px": return val;
+				case "pt": return val * px_in_pt;
+				case "in": return val * 72 * px_in_pt;
+				case "pc": return val * 12 * px_in_pt;
+				case "mm": return val * dojox.gfx.mm_in_pt * px_in_pt;
+				case "cm": return val * dojox.gfx.cm_in_pt * px_in_pt;
+			}
+		}
+		return parseFloat(len);	// Number
+	},
+
+	// a constant used to split a SVG/VML path into primitive components
+	pathVmlRegExp: /([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+	pathSvgRegExp: /([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+
+	equalSources: function(a, b){
+		// summary: compares event sources, returns true if they are equal
+		return a && b && a == b;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.gfx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx"] = true;
+dojo.provide("dojox.gfx");
+
+
+
+
+dojo.loadInit(function(){
+	//Since loaderInit can be fired before any dojo.provide/require calls,
+	//make sure the dojox.gfx object exists and only run this logic if dojox.gfx.renderer
+	//has not been defined yet.
+	var gfx = dojo.getObject("dojox.gfx", true), sl, flag, match;
+	if(!gfx.renderer){
+		//Have a way to force a GFX renderer, if so desired.
+		//Useful for being able to serialize GFX data in a particular format.
+		if(dojo.config.forceGfxRenderer){
+			dojox.gfx.renderer = dojo.config.forceGfxRenderer;
+			return;
+		}
+		var renderers = (typeof dojo.config.gfxRenderer == "string" ?
+			dojo.config.gfxRenderer : "svg,vml,silverlight,canvas").split(",");
+
+		// mobile platform detection
+		// TODO: move to the base?
+
+		var ua = navigator.userAgent, iPhoneOsBuild = 0, androidVersion = 0;
+		if(dojo.isSafari >= 3){
+			// detect mobile version of WebKit starting with "version 3"
+
+			//	comprehensive iPhone test.  Have to figure out whether it's SVG or Canvas based on the build.
+			//	iPhone OS build numbers from en.wikipedia.org.
+			if(ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){
+				//	grab the build out of this.  Expression is a little nasty because we want
+				//		to be sure we have the whole version string.
+				match = ua.match(/Version\/(\d(\.\d)?(\.\d)?)\sMobile\/([^\s]*)\s?/);
+				if(match){
+					//	grab the build out of the match.  Only use the first three because of specific builds.
+					iPhoneOsBuild = parseInt(match[4].substr(0,3), 16);
+				}
+			}
+		}
+		if(dojo.isWebKit){
+			// Android detection
+			if(!iPhoneOsBuild){
+				match = ua.match(/Android\s+(\d+\.\d+)/);
+				if(match){
+					androidVersion = parseFloat(match[1]);
+					// Android 1.0-1.1 doesn't support SVG but supports Canvas
+				}
+			}
+		}
+
+		for(var i = 0; i < renderers.length; ++i){
+			switch(renderers[i]){
+				case "svg":
+					//	iPhone OS builds greater than 5F1 should have SVG.
+					if(!dojo.isIE && (!iPhoneOsBuild || iPhoneOsBuild >= 0x5f1) && !androidVersion && !dojo.isAIR){
+						dojox.gfx.renderer = "svg";
+					}
+					break;
+				case "vml":
+					if(dojo.isIE){
+						dojox.gfx.renderer = "vml";
+					}
+					break;
+				case "silverlight":
+					try{
+						if(dojo.isIE){
+							sl = new ActiveXObject("AgControl.AgControl");
+							if(sl && sl.IsVersionSupported("1.0")){
+								flag = true;
+							}
+						}else{
+							if(navigator.plugins["Silverlight Plug-In"]){
+								flag = true;
+							}
+						}
+					}catch(e){
+						flag = false;
+					}finally{
+						sl = null;
+					}
+					if(flag){ dojox.gfx.renderer = "silverlight"; }
+					break;
+				case "canvas":
+					//TODO: need more comprehensive test for Canvas
+					if(!dojo.isIE){
+						dojox.gfx.renderer = "canvas";
+					}
+					break;
+			}
+			if(dojox.gfx.renderer){ break; }
+		}
+		if(dojo.config.isDebug){
+			console.log("gfx renderer = " + dojox.gfx.renderer);
+		}
+	}
+});
+
+// include a renderer conditionally
+dojo.requireIf(dojox.gfx.renderer == "svg", "dojox.gfx.svg");
+dojo.requireIf(dojox.gfx.renderer == "vml", "dojox.gfx.vml");
+dojo.requireIf(dojox.gfx.renderer == "silverlight", "dojox.gfx.silverlight");
+dojo.requireIf(dojox.gfx.renderer == "canvas", "dojox.gfx.canvas");
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.lambda"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.lambda"] = true;
+dojo.provide("dojox.lang.functional.lambda");
+
+// This module adds high-level functions and related constructs:
+//	- anonymous functions built from the string
+
+// Acknoledgements:
+//	- lambda() is based on work by Oliver Steele 
+//		(http://osteele.com/sources/javascript/functional/functional.js)
+//		which was published under MIT License
+
+// Notes:
+//	- lambda() produces functions, which after the compilation step are 
+//		as fast as regular JS functions (at least theoretically).
+
+// Lambda input values:
+//	- returns functions unchanged
+//	- converts strings to functions
+//	- converts arrays to a functional composition
+
+(function(){
+	var df = dojox.lang.functional, lcache = {};
+
+	// split() is augmented on IE6 to ensure the uniform behavior
+	var split = "ab".split(/a*/).length > 1 ? String.prototype.split :
+			function(sep){
+				 var r = this.split.call(this, sep),
+					 m = sep.exec(this);
+				 if(m && m.index == 0){ r.unshift(""); }
+				 return r;
+			};
+			
+	var lambda = function(/*String*/ s){
+		var args = [], sects = split.call(s, /\s*->\s*/m);
+		if(sects.length > 1){
+			while(sects.length){
+				s = sects.pop();
+				args = sects.pop().split(/\s*,\s*|\s+/m);
+				if(sects.length){ sects.push("(function(" + args + "){return (" + s + ")})"); }
+			}
+		}else if(s.match(/\b_\b/)){
+			args = ["_"];
+		}else{
+			var l = s.match(/^\s*(?:[+*\/%&|\^\.=<>]|!=)/m),
+				r = s.match(/[+\-*\/%&|\^\.=<>!]\s*$/m);
+			if(l || r){
+				if(l){
+					args.push("$1");
+					s = "$1" + s;
+				}
+				if(r){
+					args.push("$2");
+					s = s + "$2";
+				}
+			}else{
+				// the point of the long regex below is to exclude all well-known 
+				// lower-case words from the list of potential arguments
+				var vars = s.
+					replace(/(?:\b[A-Z]|\.[a-zA-Z_$])[a-zA-Z_$\d]*|[a-zA-Z_$][a-zA-Z_$\d]*:|this|true|false|null|undefined|typeof|instanceof|in|delete|new|void|arguments|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape|dojo|dijit|dojox|window|document|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/g, "").
+					match(/([a-z_$][a-z_$\d]*)/gi) || [], t = {};
+				dojo.forEach(vars, function(v){
+					if(!(v in t)){
+						args.push(v);
+						t[v] = 1;
+					}
+				});
+			}
+		}
+		return {args: args, body: s};	// Object
+	};
+
+	var compose = function(/*Array*/ a){
+		return a.length ? 
+					function(){
+						var i = a.length - 1, x = df.lambda(a[i]).apply(this, arguments);
+						for(--i; i >= 0; --i){ x = df.lambda(a[i]).call(this, x); }
+						return x;
+					}
+				: 
+					// identity
+					function(x){ return x; };
+	};
+
+	dojo.mixin(df, {
+		// lambda
+		rawLambda: function(/*String*/ s){
+			// summary:
+			//		builds a function from a snippet, or array (composing),
+			//		returns an object describing the function; functions are
+			//		passed through unmodified.
+			// description:
+			//		This method is to normalize a functional representation (a
+			//		text snippet) to an object that contains an array of
+			//		arguments, and a body , which is used to calculate the
+			//		returning value.
+			return lambda(s);	// Object
+		},
+		buildLambda: function(/*String*/ s){
+			// summary:
+			//		builds a function from a snippet, returns a string, which
+			//		represents the function.
+			// description:
+			//		This method returns a textual representation of a function
+			//		built from the snippet. It is meant to be evaled in the
+			//		proper context, so local variables can be pulled from the
+			//		environment.
+			s = lambda(s);
+			return "function(" + s.args.join(",") + "){return (" + s.body + ");}";	// String
+		},
+		lambda: function(/*Function|String|Array*/ s){
+			// summary:
+			//		builds a function from a snippet, or array (composing),
+			//		returns a function object; functions are passed through
+			//		unmodified.
+			// description:
+			//		This method is used to normalize a functional
+			//		representation (a text snippet, an array, or a function) to
+			//		a function object.
+			if(typeof s == "function"){ return s; }
+			if(s instanceof Array){ return compose(s); }
+			if(s in lcache){ return lcache[s]; }
+			s = lambda(s);
+			return lcache[s] = new Function(s.args, "return (" + s.body + ");");	// Function
+		},
+		clearLambdaCache: function(){
+			// summary:
+			//		clears internal cache of lambdas
+			lcache = {};
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.array"] = true;
+dojo.provide("dojox.lang.functional.array");
+
+
+
+// This module adds high-level functions and related constructs:
+//	- array-processing functions similar to standard JS functions
+
+// Notes:
+//	- this module provides JS standard methods similar to high-level functions in dojo/_base/array.js: 
+//		forEach, map, filter, every, some
+
+// Defined methods:
+//	- take any valid lambda argument as the functional argument
+//	- operate on dense arrays
+//	- take a string as the array argument
+//	- take an iterator objects as the array argument
+
+(function(){
+	var d = dojo, df = dojox.lang.functional, empty = {};
+
+	d.mixin(df, {
+		// JS 1.6 standard array functions, which can take a lambda as a parameter.
+		// Consider using dojo._base.array functions, if you don't need the lambda support.
+		filter: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: creates a new array with all elements that pass the test 
+			//	implemented by the provided function.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var t = [], v, i, n;
+			if(d.isArray(a)){
+				// array
+				for(i = 0, n = a.length; i < n; ++i){
+					v = a[i];
+					if(f.call(o, v, i, a)){ t.push(v); }
+				}
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				for(i = 0; a.hasNext();){
+					v = a.next();
+					if(f.call(o, v, i++, a)){ t.push(v); }
+				}
+			}else{
+				// object/dictionary
+				for(i in a){
+					if(!(i in empty)){
+						v = a[i];
+						if(f.call(o, v, i, a)){ t.push(v); }
+					}
+				}
+			}
+			return t;	// Array
+		},
+		forEach: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: executes a provided function once per array element.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var i, n;
+			if(d.isArray(a)){
+				// array
+				for(i = 0, n = a.length; i < n; f.call(o, a[i], i, a), ++i);
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				for(i = 0; a.hasNext(); f.call(o, a.next(), i++, a));
+			}else{
+				// object/dictionary
+				for(i in a){
+					if(!(i in empty)){
+						f.call(o, a[i], i, a);
+					}
+				}
+			}
+			return o;	// Object
+		},
+		map: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: creates a new array with the results of calling 
+			//	a provided function on every element in this array.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var t, n, i;
+			if(d.isArray(a)){
+				// array
+				t = new Array(n = a.length);
+				for(i = 0; i < n; t[i] = f.call(o, a[i], i, a), ++i);
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				t = [];
+				for(i = 0; a.hasNext(); t.push(f.call(o, a.next(), i++, a)));
+			}else{
+				// object/dictionary
+				t = [];
+				for(i in a){
+					if(!(i in empty)){
+						t.push(f.call(o, a[i], i, a));
+					}
+				}
+			}
+			return t;	// Array
+		},
+		every: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: tests whether all elements in the array pass the test 
+			//	implemented by the provided function.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var i, n;
+			if(d.isArray(a)){
+				// array
+				for(i = 0, n = a.length; i < n; ++i){
+					if(!f.call(o, a[i], i, a)){
+						return false;	// Boolean
+					}
+				}
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				for(i = 0; a.hasNext();){
+					if(!f.call(o, a.next(), i++, a)){
+						return false;	// Boolean
+					}
+				}
+			}else{
+				// object/dictionary
+				for(i in a){
+					if(!(i in empty)){
+						if(!f.call(o, a[i], i, a)){
+							return false;	// Boolean
+						}
+					}
+				}
+			}
+			return true;	// Boolean
+		},
+		some: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: tests whether some element in the array passes the test 
+			//	implemented by the provided function.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var i, n;
+			if(d.isArray(a)){
+				// array
+				for(i = 0, n = a.length; i < n; ++i){
+					if(f.call(o, a[i], i, a)){
+						return true;	// Boolean
+					}
+				}
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				for(i = 0; a.hasNext();){
+					if(f.call(o, a.next(), i++, a)){
+						return true;	// Boolean
+					}
+				}
+			}else{
+				// object/dictionary
+				for(i in a){
+					if(!(i in empty)){
+						if(f.call(o, a[i], i, a)){
+							return true;	// Boolean
+						}
+					}
+				}
+			}
+			return false;	// Boolean
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.object"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.object"] = true;
+dojo.provide("dojox.lang.functional.object");
+
+
+
+// This module adds high-level functions and related constructs:
+//	- object/dictionary helpers
+
+// Defined methods:
+//	- take any valid lambda argument as the functional argument
+//	- skip all attributes that are present in the empty object 
+//		(IE and/or 3rd-party libraries).
+
+(function(){
+	var d = dojo, df = dojox.lang.functional, empty = {};
+
+	d.mixin(df, {
+		// object helpers
+		keys: function(/*Object*/ obj){
+			// summary: returns an array of all keys in the object
+			var t = [];
+			for(var i in obj){
+				if(!(i in empty)){
+					t.push(i);
+				}
+			}
+			return	t; // Array
+		},
+		values: function(/*Object*/ obj){
+			// summary: returns an array of all values in the object
+			var t = [];
+			for(var i in obj){
+				if(!(i in empty)){
+					t.push(obj[i]);
+				}
+			}
+			return	t; // Array
+		},
+		filterIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: creates new object with all attributes that pass the test 
+			//	implemented by the provided function.
+			o = o || d.global; f = df.lambda(f);
+			var t = {}, v, i;
+			for(i in obj){
+				if(!(i in empty)){
+					v = obj[i];
+					if(f.call(o, v, i, obj)){ t[i] = v; }
+				}
+			}
+			return t;	// Object
+		},
+		forIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: iterates over all object attributes.
+			o = o || d.global; f = df.lambda(f);
+			for(var i in obj){
+				if(!(i in empty)){
+					f.call(o, obj[i], i, obj);
+				}
+			}
+			return o;	// Object
+		},
+		mapIn: function(/*Object*/ obj, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: creates new object with the results of calling 
+			//	a provided function on every attribute in this object.
+			o = o || d.global; f = df.lambda(f);
+			var t = {}, i;
+			for(i in obj){
+				if(!(i in empty)){
+					t[i] = f.call(o, obj[i], i, obj);
+				}
+			}
+			return t;	// Object
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional"] = true;
+dojo.provide("dojox.lang.functional");
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.fold"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.fold"] = true;
+dojo.provide("dojox.lang.functional.fold");
+
+
+
+// This module adds high-level functions and related constructs:
+//	- "fold" family of functions
+
+// Notes:
+//	- missing high-level functions are provided with the compatible API: 
+//		foldl, foldl1, foldr, foldr1
+//	- missing JS standard functions are provided with the compatible API: 
+//		reduce, reduceRight
+//	- the fold's counterpart: unfold
+
+// Defined methods:
+//	- take any valid lambda argument as the functional argument
+//	- operate on dense arrays
+//	- take a string as the array argument
+//	- take an iterator objects as the array argument (only foldl, foldl1, and reduce)
+
+(function(){
+	var d = dojo, df = dojox.lang.functional, empty = {};
+
+	d.mixin(df, {
+		// classic reduce-class functions
+		foldl: function(/*Array|String|Object*/ a, /*Function*/ f, /*Object*/ z, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from left
+			//	to right using a seed value as a starting point; returns the final
+			//	value.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var i, n;
+			if(d.isArray(a)){
+				// array
+				for(i = 0, n = a.length; i < n; z = f.call(o, z, a[i], i, a), ++i);
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				for(i = 0; a.hasNext(); z = f.call(o, z, a.next(), i++, a));
+			}else{
+				// object/dictionary
+				for(i in a){
+					if(!(i in empty)){
+						z = f.call(o, z, a[i], i, a);
+					}
+				}
+			}
+			return z;	// Object
+		},
+		foldl1: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from left
+			//	to right; returns the final value.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var z, i, n;
+			if(d.isArray(a)){
+				// array
+				z = a[0];
+				for(i = 1, n = a.length; i < n; z = f.call(o, z, a[i], i, a), ++i);
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				if(a.hasNext()){
+					z = a.next();
+					for(i = 1; a.hasNext(); z = f.call(o, z, a.next(), i++, a));
+				}
+			}else{
+				// object/dictionary
+				var first = true;
+				for(i in a){
+					if(!(i in empty)){
+						if(first){
+							z = a[i];
+							first = false;
+						}else{
+							z = f.call(o, z, a[i], i, a);
+						}
+					}
+				}
+			}
+			return z;	// Object
+		},
+		foldr: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from right
+			//	to left using a seed value as a starting point; returns the final 
+			//	value.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			for(var i = a.length; i > 0; --i, z = f.call(o, z, a[i], i, a));
+			return z;	// Object
+		},
+		foldr1: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from right
+			//	to left; returns the final value.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var n = a.length, z = a[n - 1], i = n - 1;
+			for(; i > 0; --i, z = f.call(o, z, a[i], i, a));
+			return z;	// Object
+		},
+		// JS 1.8 standard array functions, which can take a lambda as a parameter.
+		reduce: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ z){
+			// summary: apply a function simultaneously against two values of the array
+			//	(from left-to-right) as to reduce it to a single value.
+			return arguments.length < 3 ? df.foldl1(a, f) : df.foldl(a, f, z);	// Object
+		},
+		reduceRight: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ z){
+			// summary: apply a function simultaneously against two values of the array
+			//	(from right-to-left) as to reduce it to a single value.
+			return arguments.length < 3 ? df.foldr1(a, f) : df.foldr(a, f, z);	// Object
+		},
+		// the fold's counterpart: unfold
+		unfold: function(/*Function|String|Array*/ pr, /*Function|String|Array*/ f,
+						/*Function|String|Array*/ g, /*Object*/ z, /*Object?*/ o){
+			// summary: builds an array by unfolding a value
+			o = o || d.global; f = df.lambda(f); g = df.lambda(g); pr = df.lambda(pr);
+			var t = [];
+			for(; !pr.call(o, z); t.push(f.call(o, z)), z = g.call(o, z));
+			return t;	// Array
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.reversed"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.reversed"] = true;
+dojo.provide("dojox.lang.functional.reversed");
+
+
+
+// This module adds high-level functions and related constructs:
+//	- reversed versions of array-processing functions similar to standard JS functions
+
+// Notes:
+//	- this module provides reversed versions of standard array-processing functions: 
+//		forEachRev, mapRev, filterRev
+
+// Defined methods:
+//	- take any valid lambda argument as the functional argument
+//	- operate on dense arrays
+//	- take a string as the array argument
+
+(function(){
+	var d = dojo, df = dojox.lang.functional;
+
+	d.mixin(df, {
+		// JS 1.6 standard array functions, which can take a lambda as a parameter.
+		// Consider using dojo._base.array functions, if you don't need the lambda support.
+		filterRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: creates a new array with all elements that pass the test 
+			//	implemented by the provided function.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var t = [], v, i = a.length - 1;
+			for(; i >= 0; --i){
+				v = a[i];
+				if(f.call(o, v, i, a)){ t.push(v); }
+			}
+			return t;	// Array
+		},
+		forEachRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: executes a provided function once per array element.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			for(var i = a.length - 1; i >= 0; f.call(o, a[i], i, a), --i);
+		},
+		mapRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: creates a new array with the results of calling 
+			//	a provided function on every element in this array.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var n = a.length, t = new Array(n), i = n - 1, j = 0;
+			for(; i >= 0; t[j++] = f.call(o, a[i], i, a), --i);
+			return t;	// Array
+		},
+		everyRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: tests whether all elements in the array pass the test 
+			//	implemented by the provided function.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			for(var i = a.length - 1; i >= 0; --i){
+				if(!f.call(o, a[i], i, a)){
+					return false;	// Boolean
+				}
+			}
+			return true;	// Boolean
+		},
+		someRev: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: tests whether some element in the array passes the test 
+			//	implemented by the provided function.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			for(var i = a.length - 1; i >= 0; --i){
+				if(f.call(o, a[i], i, a)){
+					return true;	// Boolean
+				}
+			}
+			return false;	// Boolean
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.colors"] = true;
+dojo.provide("dojo.colors");
+
+//TODO: this module appears to break naming conventions
+
+/*=====
+dojo.colors = {
+	// summary: Color utilities
+}
+=====*/
+
+(function(){
+	// this is a standard conversion prescribed by the CSS3 Color Module
+	var hue2rgb = function(m1, m2, h){
+		if(h < 0){ ++h; }
+		if(h > 1){ --h; }
+		var h6 = 6 * h;
+		if(h6 < 1){ return m1 + (m2 - m1) * h6; }
+		if(2 * h < 1){ return m2; }
+		if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; }
+		return m1;
+	};
+	
+	dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
+		// summary:
+		//		get rgb(a) array from css-style color declarations
+		// description:
+		//		this function can handle all 4 CSS3 Color Module formats: rgb,
+		//		rgba, hsl, hsla, including rgb(a) with percentage values.
+		var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);
+		if(m){
+			var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1], a;
+			if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){
+				var r = c[0];
+				if(r.charAt(r.length - 1) == "%"){
+					// 3 rgb percentage values
+					a = dojo.map(c, function(x){
+						return parseFloat(x) * 2.56;
+					});
+					if(l == 4){ a[3] = c[3]; }
+					return dojo.colorFromArray(a, obj);	// dojo.Color
+				}
+				return dojo.colorFromArray(c, obj);	// dojo.Color
+			}
+			if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){
+				// normalize hsl values
+				var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360,
+					S = parseFloat(c[1]) / 100,
+					L = parseFloat(c[2]) / 100,
+					// calculate rgb according to the algorithm 
+					// recommended by the CSS3 Color Module 
+					m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S, 
+					m1 = 2 * L - m2;
+				a = [
+					hue2rgb(m1, m2, H + 1 / 3) * 256,
+					hue2rgb(m1, m2, H) * 256,
+					hue2rgb(m1, m2, H - 1 / 3) * 256,
+					1
+				];
+				if(l == 4){ a[3] = c[3]; }
+				return dojo.colorFromArray(a, obj);	// dojo.Color
+			}
+		}
+		return null;	// dojo.Color
+	};
+	
+	var confine = function(c, low, high){
+		// summary:
+		//		sanitize a color component by making sure it is a number,
+		//		and clamping it to valid values
+		c = Number(c);
+		return isNaN(c) ? high : c < low ? low : c > high ? high : c;	// Number
+	};
+	
+	dojo.Color.prototype.sanitize = function(){
+		// summary: makes sure that the object has correct attributes
+		var t = this;
+		t.r = Math.round(confine(t.r, 0, 255));
+		t.g = Math.round(confine(t.g, 0, 255));
+		t.b = Math.round(confine(t.b, 0, 255));
+		t.a = confine(t.a, 0, 1);
+		return this;	// dojo.Color
+	};
+})();
+
+
+dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){
+	// summary: creates a greyscale color with an optional alpha
+	return dojo.colorFromArray([g, g, g, a]);
+};
+
+// mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings
+dojo.mixin(dojo.Color.named, {
+	aliceblue:	[240,248,255],
+	antiquewhite:	[250,235,215],
+	aquamarine:	[127,255,212],
+	azure:	[240,255,255],
+	beige:	[245,245,220],
+	bisque:	[255,228,196],
+	blanchedalmond:	[255,235,205],
+	blueviolet:	[138,43,226],
+	brown:	[165,42,42],
+	burlywood:	[222,184,135],
+	cadetblue:	[95,158,160],
+	chartreuse:	[127,255,0],
+	chocolate:	[210,105,30],
+	coral:	[255,127,80],
+	cornflowerblue:	[100,149,237],
+	cornsilk:	[255,248,220],
+	crimson:	[220,20,60],
+	cyan:	[0,255,255],
+	darkblue:	[0,0,139],
+	darkcyan:	[0,139,139],
+	darkgoldenrod:	[184,134,11],
+	darkgray:	[169,169,169],
+	darkgreen:	[0,100,0],
+	darkgrey:	[169,169,169],
+	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],
+	darkseagreen:	[143,188,143],
+	darkslateblue:	[72,61,139],
+	darkslategray:	[47,79,79],
+	darkslategrey:	[47,79,79],
+	darkturquoise:	[0,206,209],
+	darkviolet:	[148,0,211],
+	deeppink:	[255,20,147],
+	deepskyblue:	[0,191,255],
+	dimgray:	[105,105,105],
+	dimgrey:	[105,105,105],
+	dodgerblue:	[30,144,255],
+	firebrick:	[178,34,34],
+	floralwhite:	[255,250,240],
+	forestgreen:	[34,139,34],
+	gainsboro:	[220,220,220],
+	ghostwhite:	[248,248,255],
+	gold:	[255,215,0],
+	goldenrod:	[218,165,32],
+	greenyellow:	[173,255,47],
+	grey:	[128,128,128],
+	honeydew:	[240,255,240],
+	hotpink:	[255,105,180],
+	indianred:	[205,92,92],
+	indigo:	[75,0,130],
+	ivory:	[255,255,240],
+	khaki:	[240,230,140],
+	lavender:	[230,230,250],
+	lavenderblush:	[255,240,245],
+	lawngreen:	[124,252,0],
+	lemonchiffon:	[255,250,205],
+	lightblue:	[173,216,230],
+	lightcoral:	[240,128,128],
+	lightcyan:	[224,255,255],
+	lightgoldenrodyellow:	[250,250,210],
+	lightgray:	[211,211,211],
+	lightgreen:	[144,238,144],
+	lightgrey:	[211,211,211],
+	lightpink:	[255,182,193],
+	lightsalmon:	[255,160,122],
+	lightseagreen:	[32,178,170],
+	lightskyblue:	[135,206,250],
+	lightslategray:	[119,136,153],
+	lightslategrey:	[119,136,153],
+	lightsteelblue:	[176,196,222],
+	lightyellow:	[255,255,224],
+	limegreen:	[50,205,50],
+	linen:	[250,240,230],
+	magenta:	[255,0,255],
+	mediumaquamarine:	[102,205,170],
+	mediumblue:	[0,0,205],
+	mediumorchid:	[186,85,211],
+	mediumpurple:	[147,112,219],
+	mediumseagreen:	[60,179,113],
+	mediumslateblue:	[123,104,238],
+	mediumspringgreen:	[0,250,154],
+	mediumturquoise:	[72,209,204],
+	mediumvioletred:	[199,21,133],
+	midnightblue:	[25,25,112],
+	mintcream:	[245,255,250],
+	mistyrose:	[255,228,225],
+	moccasin:	[255,228,181],
+	navajowhite:	[255,222,173],
+	oldlace:	[253,245,230],
+	olivedrab:	[107,142,35],
+	orange:	[255,165,0],
+	orangered:	[255,69,0],
+	orchid:	[218,112,214],
+	palegoldenrod:	[238,232,170],
+	palegreen:	[152,251,152],
+	paleturquoise:	[175,238,238],
+	palevioletred:	[219,112,147],
+	papayawhip:	[255,239,213],
+	peachpuff:	[255,218,185],
+	peru:	[205,133,63],
+	pink:	[255,192,203],
+	plum:	[221,160,221],
+	powderblue:	[176,224,230],
+	rosybrown:	[188,143,143],
+	royalblue:	[65,105,225],
+	saddlebrown:	[139,69,19],
+	salmon:	[250,128,114],
+	sandybrown:	[244,164,96],
+	seagreen:	[46,139,87],
+	seashell:	[255,245,238],
+	sienna:	[160,82,45],
+	skyblue:	[135,206,235],
+	slateblue:	[106,90,205],
+	slategray:	[112,128,144],
+	slategrey:	[112,128,144],
+	snow:	[255,250,250],
+	springgreen:	[0,255,127],
+	steelblue:	[70,130,180],
+	tan:	[210,180,140],
+	thistle:	[216,191,216],
+	tomato:	[255,99,71],
+	transparent: [0, 0, 0, 0],
+	turquoise:	[64,224,208],
+	violet:	[238,130,238],
+	wheat:	[245,222,179],
+	whitesmoke:	[245,245,245],
+	yellowgreen:	[154,205,50]
+});
+
+}
+
+if(!dojo._hasResource["dojox.color._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.color._base"] = true;
+dojo.provide("dojox.color._base");
+
+
+//	alias all the dojo.Color mechanisms
+dojox.color.Color=dojo.Color;
+dojox.color.blend=dojo.blendColors;
+dojox.color.fromRgb=dojo.colorFromRgb;
+dojox.color.fromHex=dojo.colorFromHex;
+dojox.color.fromArray=dojo.colorFromArray;
+dojox.color.fromString=dojo.colorFromString;
+
+//	alias the dojo.colors mechanisms
+dojox.color.greyscale=dojo.colors.makeGrey;
+
+//	static methods
+dojo.mixin(dojox.color, {
+	fromCmy: function(/* Object|Array|int */cyan, /*int*/magenta, /*int*/yellow){
+		//	summary
+		//	Create a dojox.color.Color from a CMY defined color.
+		//	All colors should be expressed as 0-100 (percentage)
+
+		if(dojo.isArray(cyan)){
+			magenta=cyan[1], yellow=cyan[2], cyan=cyan[0];
+		} else if(dojo.isObject(cyan)){
+			magenta=cyan.m, yellow=cyan.y, cyan=cyan.c;
+		}
+		cyan/=100, magenta/=100, yellow/=100;
+
+		var r=1-cyan, g=1-magenta, b=1-yellow;
+		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
+	},
+
+	fromCmyk: function(/* Object|Array|int */cyan, /*int*/magenta, /*int*/yellow, /*int*/black){
+		//	summary
+		//	Create a dojox.color.Color from a CMYK defined color.
+		//	All colors should be expressed as 0-100 (percentage)
+
+		if(dojo.isArray(cyan)){
+			magenta=cyan[1], yellow=cyan[2], black=cyan[3], cyan=cyan[0];
+		} else if(dojo.isObject(cyan)){
+			magenta=cyan.m, yellow=cyan.y, black=cyan.b, cyan=cyan.c;
+		}
+		cyan/=100, magenta/=100, yellow/=100, black/=100;
+		var r,g,b;
+		r = 1-Math.min(1, cyan*(1-black)+black);
+		g = 1-Math.min(1, magenta*(1-black)+black);
+		b = 1-Math.min(1, yellow*(1-black)+black);
+		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
+	},
+	
+	fromHsl: function(/* Object|Array|int */hue, /* int */saturation, /* int */luminosity){
+		//	summary
+		//	Create a dojox.color.Color from an HSL defined color.
+		//	hue from 0-359 (degrees), saturation and luminosity 0-100.
+
+		if(dojo.isArray(hue)){
+			saturation=hue[1], luminosity=hue[2], hue=hue[0];
+		} else if(dojo.isObject(hue)){
+			saturation=hue.s, luminosity=hue.l, hue=hue.h;
+		}
+		saturation/=100;
+		luminosity/=100;
+
+		while(hue<0){ hue+=360; }
+		while(hue>=360){ hue-=360; }
+		
+		var r, g, b;
+		if(hue<120){
+			r=(120-hue)/60, g=hue/60, b=0;
+		} else if (hue<240){
+			r=0, g=(240-hue)/60, b=(hue-120)/60;
+		} else {
+			r=(hue-240)/60, g=0, b=(360-hue)/60;
+		}
+		
+		r=2*saturation*Math.min(r, 1)+(1-saturation);
+		g=2*saturation*Math.min(g, 1)+(1-saturation);
+		b=2*saturation*Math.min(b, 1)+(1-saturation);
+		if(luminosity<0.5){
+			r*=luminosity, g*=luminosity, b*=luminosity;
+		}else{
+			r=(1-luminosity)*r+2*luminosity-1;
+			g=(1-luminosity)*g+2*luminosity-1;
+			b=(1-luminosity)*b+2*luminosity-1;
+		}
+		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
+	},
+	
+	fromHsv: function(/* Object|Array|int */hue, /* int */saturation, /* int */value){
+		//	summary
+		//	Create a dojox.color.Color from an HSV defined color.
+		//	hue from 0-359 (degrees), saturation and value 0-100.
+
+		if(dojo.isArray(hue)){
+			saturation=hue[1], value=hue[2], hue=hue[0];
+		} else if (dojo.isObject(hue)){
+			saturation=hue.s, value=hue.v, hue=hue.h;
+		}
+		
+		if(hue==360){ hue=0; }
+		saturation/=100;
+		value/=100;
+		
+		var r, g, b;
+		if(saturation==0){
+			r=value, b=value, g=value;
+		}else{
+			var hTemp=hue/60, i=Math.floor(hTemp), f=hTemp-i;
+			var p=value*(1-saturation);
+			var q=value*(1-(saturation*f));
+			var t=value*(1-(saturation*(1-f)));
+			switch(i){
+				case 0:{ r=value, g=t, b=p; break; }
+				case 1:{ r=q, g=value, b=p; break; }
+				case 2:{ r=p, g=value, b=t; break; }
+				case 3:{ r=p, g=q, b=value; break; }
+				case 4:{ r=t, g=p, b=value; break; }
+				case 5:{ r=value, g=p, b=q; break; }
+			}
+		}
+		return new dojox.color.Color({ r:Math.round(r*255), g:Math.round(g*255), b:Math.round(b*255) });	//	dojox.color.Color
+	}
+});
+
+//	Conversions directly on dojox.color.Color
+dojo.extend(dojox.color.Color, {
+	toCmy: function(){
+		//	summary
+		//	Convert this Color to a CMY definition.
+		var cyan=1-(this.r/255), magenta=1-(this.g/255), yellow=1-(this.b/255);
+		return { c:Math.round(cyan*100), m:Math.round(magenta*100), y:Math.round(yellow*100) };		//	Object
+	},
+	
+	toCmyk: function(){
+		//	summary
+		//	Convert this Color to a CMYK definition.
+		var cyan, magenta, yellow, black;
+		var r=this.r/255, g=this.g/255, b=this.b/255;
+		black = Math.min(1-r, 1-g, 1-b);
+		cyan = (1-r-black)/(1-black);
+		magenta = (1-g-black)/(1-black);
+		yellow = (1-b-black)/(1-black);
+		return { c:Math.round(cyan*100), m:Math.round(magenta*100), y:Math.round(yellow*100), b:Math.round(black*100) };	//	Object
+	},
+	
+	toHsl: function(){
+		//	summary
+		//	Convert this Color to an HSL definition.
+		var r=this.r/255, g=this.g/255, b=this.b/255;
+		var min = Math.min(r, b, g), max = Math.max(r, g, b);
+		var delta = max-min;
+		var h=0, s=0, l=(min+max)/2;
+		if(l>0 && l<1){
+			s = delta/((l<0.5)?(2*l):(2-2*l));
+		}
+		if(delta>0){
+			if(max==r && max!=g){
+				h+=(g-b)/delta;
+			}
+			if(max==g && max!=b){
+				h+=(2+(b-r)/delta);
+			}
+			if(max==b && max!=r){
+				h+=(4+(r-g)/delta);
+			}
+			h*=60;
+		}
+		return { h:h, s:Math.round(s*100), l:Math.round(l*100) };	//	Object
+	},
+
+	toHsv: function(){
+		//	summary
+		//	Convert this Color to an HSV definition.
+		var r=this.r/255, g=this.g/255, b=this.b/255;
+		var min = Math.min(r, b, g), max = Math.max(r, g, b);
+		var delta = max-min;
+		var h = null, s = (max==0)?0:(delta/max);
+		if(s==0){
+			h = 0;
+		}else{
+			if(r==max){
+				h = 60*(g-b)/delta;
+			}else if(g==max){
+				h = 120 + 60*(b-r)/delta;
+			}else{
+				h = 240 + 60*(r-g)/delta;
+			}
+
+			if(h<0){ h+=360; }
+		}
+		return { h:h, s:Math.round(s*100), v:Math.round(max*100) };	//	Object
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.color"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.color"] = true;
+dojo.provide("dojox.color");
+
+
+}
+
+if(!dojo._hasResource["dojox.color.Palette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.color.Palette"] = true;
+dojo.provide("dojox.color.Palette");
+
+
+(function(){
+	var dxc = dojox.color;
+	/***************************************************************
+	*	dojox.color.Palette
+	*
+	*	The Palette object is loosely based on the color palettes
+	*	at Kuler (http://kuler.adobe.com).  They are 5 color palettes
+	*	with the base color considered to be the third color in the
+	*	palette (for generation purposes).
+	*
+	*	Palettes can be generated from well-known algorithms or they
+	* 	can be manually created by passing an array to the constructor.
+	*
+	*	Palettes can be transformed, using a set of specific params
+	*	similar to the way shapes can be transformed with dojox.gfx.
+	*	However, unlike with transformations in dojox.gfx, transforming
+	* 	a palette will return you a new Palette object, in effect
+	* 	a clone of the original.
+	***************************************************************/
+
+	//	ctor ----------------------------------------------------------------------------
+	dxc.Palette = function(/* String|Array|dojox.color.Color|dojox.color.Palette */base){
+		//	summary:
+		//		An object that represents a palette of colors.
+		//	description:
+		//		A Palette is a representation of a set of colors.  While the standard
+		//		number of colors contained in a palette is 5, it can really handle any
+		//		number of colors.
+		//
+		//		A palette is useful for the ability to transform all the colors in it
+		//		using a simple object-based approach.  In addition, you can generate
+		//		palettes using dojox.color.Palette.generate; these generated palettes
+		//		are based on the palette generators at http://kuler.adobe.com.
+		//
+		//	colors: dojox.color.Color[]
+		//		The actual color references in this palette.
+		this.colors = [];
+		if(base instanceof dojox.color.Palette){
+			this.colors = base.colors.slice(0);
+		}
+		else if(base instanceof dojox.color.Color){
+			this.colors = [ null, null, base, null, null ];
+		}
+		else if(dojo.isArray(base)){
+			this.colors = dojo.map(base.slice(0), function(item){
+				if(dojo.isString(item)){ return new dojox.color.Color(item); }
+				return item;
+			});
+		}
+		else if (dojo.isString(base)){
+			this.colors = [ null, null, new dojox.color.Color(base), null, null ];
+		}
+	}
+
+	//	private functions ---------------------------------------------------------------
+
+	//	transformations
+	function tRGBA(p, param, val){
+		var ret = new dojox.color.Palette();
+		ret.colors = [];
+		dojo.forEach(p.colors, function(item){
+			var r=(param=="dr")?item.r+val:item.r,
+				g=(param=="dg")?item.g+val:item.g,
+				b=(param=="db")?item.b+val:item.b,
+				a=(param=="da")?item.a+val:item.a
+			ret.colors.push(new dojox.color.Color({
+				r: Math.min(255, Math.max(0, r)),
+				g: Math.min(255, Math.max(0, g)),
+				b: Math.min(255, Math.max(0, b)),
+				a: Math.min(1, Math.max(0, a))
+			}));
+		});
+		return ret;
+	}
+
+	function tCMY(p, param, val){
+		var ret = new dojox.color.Palette();
+		ret.colors = [];
+		dojo.forEach(p.colors, function(item){
+			var o=item.toCmy(), 
+				c=(param=="dc")?o.c+val:o.c,
+				m=(param=="dm")?o.m+val:o.m,
+				y=(param=="dy")?o.y+val:o.y;
+			ret.colors.push(dojox.color.fromCmy(
+				Math.min(100, Math.max(0, c)),
+				Math.min(100, Math.max(0, m)),
+				Math.min(100, Math.max(0, y))
+			));
+		});
+		return ret;
+	}
+
+	function tCMYK(p, param, val){
+		var ret = new dojox.color.Palette();
+		ret.colors = [];
+		dojo.forEach(p.colors, function(item){
+			var o=item.toCmyk(), 
+				c=(param=="dc")?o.c+val:o.c,
+				m=(param=="dm")?o.m+val:o.m,
+				y=(param=="dy")?o.y+val:o.y,
+				k=(param=="dk")?o.b+val:o.b;
+			ret.colors.push(dojox.color.fromCmyk(
+				Math.min(100, Math.max(0, c)),
+				Math.min(100, Math.max(0, m)),
+				Math.min(100, Math.max(0, y)),
+				Math.min(100, Math.max(0, k))
+			));
+		});
+		return ret;
+	}
+
+	function tHSL(p, param, val){
+		var ret = new dojox.color.Palette();
+		ret.colors = [];
+		dojo.forEach(p.colors, function(item){
+			var o=item.toHsl(), 
+				h=(param=="dh")?o.h+val:o.h,
+				s=(param=="ds")?o.s+val:o.s,
+				l=(param=="dl")?o.l+val:o.l;
+			ret.colors.push(dojox.color.fromHsl(h%360, Math.min(100, Math.max(0, s)), Math.min(100, Math.max(0, l))));
+		});
+		return ret;
+	}
+
+	function tHSV(p, param, val){
+		var ret = new dojox.color.Palette();
+		ret.colors = [];
+		dojo.forEach(p.colors, function(item){
+			var o=item.toHsv(), 
+				h=(param=="dh")?o.h+val:o.h,
+				s=(param=="ds")?o.s+val:o.s,
+				v=(param=="dv")?o.v+val:o.v;
+			ret.colors.push(dojox.color.fromHsv(h%360, Math.min(100, Math.max(0, s)), Math.min(100, Math.max(0, v))));
+		});
+		return ret;
+	}
+
+	//	helper functions
+	function rangeDiff(val, low, high){
+		//	given the value in a range from 0 to high, find the equiv
+		//		using the range low to high.
+		return high-((high-val)*((high-low)/high));
+	}
+
+	//	object methods ---------------------------------------------------------------
+	dojo.extend(dxc.Palette, {
+		transform: function(/* dojox.color.Palette.__transformArgs */kwArgs){
+			//	summary:
+			//		Transform the palette using a specific transformation function
+			//		and a set of transformation parameters.
+			//	description:
+			//		{palette}.transform is a simple way to uniformly transform
+			//		all of the colors in a palette using any of 5 formulae:
+			//		RGBA, HSL, HSV, CMYK or CMY.
+			//
+			//		Once the forumula to be used is determined, you can pass any
+			//		number of parameters based on the formula "d"[param]; for instance,
+			//		{ use: "rgba", dr: 20, dg: -50 } will take all of the colors in
+			//		palette, add 20 to the R value and subtract 50 from the G value.
+			//
+			//		Unlike other types of transformations, transform does *not* alter
+			//		the original palette but will instead return a new one.
+			var fn=tRGBA;	//	the default transform function.
+			if(kwArgs.use){
+				//	we are being specific about the algo we want to use.
+				var use=kwArgs.use.toLowerCase();
+				if(use.indexOf("hs")==0){
+					if(use.charAt(2)=="l"){ fn=tHSL; }
+					else { fn=tHSV; }
+				}
+				else if(use.indexOf("cmy")==0){
+					if(use.charAt(3)=="k"){ fn=tCMYK; }
+					else { fn=tCMY; }
+				}
+			}
+			//	try to guess the best choice.
+			else if("dc" in kwArgs || "dm" in kwArgs || "dy" in kwArgs){
+				if("dk" in kwArgs){ fn = tCMYK; }
+				else { fn = tCMY; }
+			}
+			else if("dh" in kwArgs || "ds" in kwArgs){
+				if("dv" in kwArgs){ fn = tHSV; }
+				else { fn = tHSL; }
+			}
+
+			var palette = this;
+			for(var p in kwArgs){
+				//	ignore use
+				if(p=="use"){ continue; }
+				palette = fn(palette, p, kwArgs[p]);
+			}
+			return palette;		//	dojox.color.Palette
+		},
+		clone: function(){
+			//	summary:
+			//		Clones the current palette.
+			return new dxc.Palette(this);	//	dojox.color.Palette
+		}
+	});
+
+/*=====
+dojox.color.Palette.__transformArgs = function(use, dr, dg, db, da, dc, dm, dy, dk, dh, ds, dv, dl){
+	//	summary:
+	//		The keywords argument to be passed to the dojox.color.Palette.transform function.  Note that
+	//		while all arguments are optional, *some* arguments must be passed.  The basic concept is that
+	//		you pass a delta value for a specific aspect of a color model (or multiple aspects of the same
+	//		color model); for instance, if you wish to transform a palette based on the HSV color model,
+	//		you would pass one of "dh", "ds", or "dv" as a value.
+	//
+	//	use: String?
+	//		Specify the color model to use for the transformation.  Can be "rgb", "rgba", "hsv", "hsl", "cmy", "cmyk".
+	//	dr: Number?
+	//		The delta to be applied to the red aspect of the RGB/RGBA color model.
+	//	dg: Number?
+	//		The delta to be applied to the green aspect of the RGB/RGBA color model.
+	//	db: Number?
+	//		The delta to be applied to the blue aspect of the RGB/RGBA color model.
+	//	da: Number?
+	//		The delta to be applied to the alpha aspect of the RGBA color model.
+	//	dc: Number?
+	//		The delta to be applied to the cyan aspect of the CMY/CMYK color model.
+	//	dm: Number?
+	//		The delta to be applied to the magenta aspect of the CMY/CMYK color model.
+	//	dy: Number?
+	//		The delta to be applied to the yellow aspect of the CMY/CMYK color model.
+	//	dk: Number?
+	//		The delta to be applied to the black aspect of the CMYK color model.
+	//	dh: Number?
+	//		The delta to be applied to the hue aspect of the HSL/HSV color model.
+	//	ds: Number?
+	//		The delta to be applied to the saturation aspect of the HSL/HSV color model.
+	//	dl: Number?
+	//		The delta to be applied to the luminosity aspect of the HSL color model.
+	//	dv: Number?
+	//		The delta to be applied to the value aspect of the HSV color model.
+	this.use = use;
+	this.dr = dr;
+	this.dg = dg;
+	this.db = db;
+	this.da = da;
+	this.dc = dc;
+	this.dm = dm;
+	this.dy = dy;
+	this.dk = dk;
+	this.dh = dh;
+	this.ds = ds;
+	this.dl = dl;
+	this.dv = dv;
+}
+dojox.color.Palette.__generatorArgs = function(base){
+	//	summary:
+	//		The keyword arguments object used to create a palette based on a base color.
+	//
+	//	base: dojo.Color
+	//		The base color to be used to generate the palette.
+	this.base = base;
+} 
+dojox.color.Palette.__analogousArgs = function(base, high, low){
+	//	summary:
+	//		The keyword arguments object that is used to create a 5 color palette based on the
+	//		analogous rules as implemented at http://kuler.adobe.com, using the HSV color model.
+	//
+	//	base: dojo.Color
+	//		The base color to be used to generate the palette.
+	//	high: Number?
+	//		The difference between the hue of the base color and the highest hue.  In degrees, default is 60.
+	//	low: Number?
+	//		The difference between the hue of the base color and the lowest hue.  In degrees, default is 18.
+	this.base = base;
+	this.high = high;
+	this.low = low;
+} 
+dojox.color.Palette.__splitComplementaryArgs = function(base, da){
+	//	summary:
+	//		The keyword arguments object used to create a palette based on the split complementary rules
+	//		as implemented at http://kuler.adobe.com.
+	//
+	//	base: dojo.Color
+	//		The base color to be used to generate the palette.
+	//	da: Number?
+	//		The delta angle to be used to determine where the split for the complementary rules happen.
+	//		In degrees, the default is 30.
+	this.base = base;
+	this.da = da;
+} 
+=====*/
+	dojo.mixin(dxc.Palette, {
+		generators: {
+			analogous:function(/* dojox.color.Palette.__analogousArgs */args){
+				//	summary:
+				//		Create a 5 color palette based on the analogous rules as implemented at
+				//		http://kuler.adobe.com.
+				var high=args.high||60, 	//	delta between base hue and highest hue (subtracted from base)
+					low=args.low||18,		//	delta between base hue and lowest hue (added to base)
+					base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+					hsv=base.toHsv();
+
+				//	generate our hue angle differences
+				var h=[
+					(hsv.h+low+360)%360,
+					(hsv.h+Math.round(low/2)+360)%360,
+					hsv.h,
+					(hsv.h-Math.round(high/2)+360)%360,
+					(hsv.h-high+360)%360
+				];
+
+				var s1=Math.max(10, (hsv.s<=95)?hsv.s+5:(100-(hsv.s-95))),
+					s2=(hsv.s>1)?hsv.s-1:21-hsv.s,
+					v1=(hsv.v>=92)?hsv.v-9:Math.max(hsv.v+9, 20),
+					v2=(hsv.v<=90)?Math.max(hsv.v+5, 20):(95+Math.ceil((hsv.v-90)/2)),
+					s=[ s1, s2, hsv.s, s1, s1 ],
+					v=[ v1, v2, hsv.v, v1, v2 ]
+
+				return new dxc.Palette(dojo.map(h, function(hue, i){
+					return dojox.color.fromHsv(hue, s[i], v[i]);
+				}));		//	dojox.color.Palette
+			},
+
+			monochromatic: function(/* dojox.color.Palette.__generatorArgs */args){
+				//	summary:
+				//		Create a 5 color palette based on the monochromatic rules as implemented at
+				//		http://kuler.adobe.com.
+				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+					hsv = base.toHsv();
+				
+				//	figure out the saturation and value
+				var s1 = (hsv.s-30>9)?hsv.s-30:hsv.s+30,
+					s2 = hsv.s,
+					v1 = rangeDiff(hsv.v, 20, 100),
+					v2 = (hsv.v-20>20)?hsv.v-20:hsv.v+60,
+					v3 = (hsv.v-50>20)?hsv.v-50:hsv.v+30;
+
+				return new dxc.Palette([
+					dojox.color.fromHsv(hsv.h, s1, v1),
+					dojox.color.fromHsv(hsv.h, s2, v3),
+					base,
+					dojox.color.fromHsv(hsv.h, s1, v3),
+					dojox.color.fromHsv(hsv.h, s2, v2)
+				]);		//	dojox.color.Palette
+			},
+
+			triadic: function(/* dojox.color.Palette.__generatorArgs */args){
+				//	summary:
+				//		Create a 5 color palette based on the triadic rules as implemented at
+				//		http://kuler.adobe.com.
+				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+					hsv = base.toHsv();
+
+				var h1 = (hsv.h+57+360)%360,
+					h2 = (hsv.h-157+360)%360,
+					s1 = (hsv.s>20)?hsv.s-10:hsv.s+10,
+					s2 = (hsv.s>90)?hsv.s-10:hsv.s+10,
+					s3 = (hsv.s>95)?hsv.s-5:hsv.s+5,
+					v1 = (hsv.v-20>20)?hsv.v-20:hsv.v+20,
+					v2 = (hsv.v-30>20)?hsv.v-30:hsv.v+30,
+					v3 = (hsv.v-30>70)?hsv.v-30:hsv.v+30;
+
+				return new dxc.Palette([
+					dojox.color.fromHsv(h1, s1, hsv.v),
+					dojox.color.fromHsv(hsv.h, s2, v2),
+					base,
+					dojox.color.fromHsv(h2, s2, v1),
+					dojox.color.fromHsv(h2, s3, v3)
+				]);		//	dojox.color.Palette
+			},
+
+			complementary: function(/* dojox.color.Palette.__generatorArgs */args){
+				//	summary:
+				//		Create a 5 color palette based on the complementary rules as implemented at
+				//		http://kuler.adobe.com.
+				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+					hsv = base.toHsv();
+
+				var h1 = ((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,
+					s1 = Math.max(hsv.s-10, 0),
+					s2 = rangeDiff(hsv.s, 10, 100),
+					s3 = Math.min(100, hsv.s+20),
+					v1 = Math.min(100, hsv.v+30),
+					v2 = (hsv.v>20)?hsv.v-30:hsv.v+30;
+
+				return new dxc.Palette([
+					dojox.color.fromHsv(hsv.h, s1, v1),
+					dojox.color.fromHsv(hsv.h, s2, v2),
+					base,
+					dojox.color.fromHsv(h1, s3, v2),
+					dojox.color.fromHsv(h1, hsv.s, hsv.v)
+				]);		//	dojox.color.Palette
+			},
+
+			splitComplementary: function(/* dojox.color.Palette.__splitComplementaryArgs */args){
+				//	summary:
+				//		Create a 5 color palette based on the split complementary rules as implemented at
+				//		http://kuler.adobe.com.
+				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+					dangle = args.da || 30,
+					hsv = base.toHsv();
+
+				var baseh = ((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,
+					h1 = (baseh-dangle+360)%360,
+					h2 = (baseh+dangle)%360,
+					s1 = Math.max(hsv.s-10, 0),
+					s2 = rangeDiff(hsv.s, 10, 100),
+					s3 = Math.min(100, hsv.s+20),
+					v1 = Math.min(100, hsv.v+30),
+					v2 = (hsv.v>20)?hsv.v-30:hsv.v+30;
+
+				return new dxc.Palette([
+					dojox.color.fromHsv(h1, s1, v1),
+					dojox.color.fromHsv(h1, s2, v2),
+					base,
+					dojox.color.fromHsv(h2, s3, v2),
+					dojox.color.fromHsv(h2, hsv.s, hsv.v)
+				]);		//	dojox.color.Palette
+			},
+
+			compound: function(/* dojox.color.Palette.__generatorArgs */args){
+				//	summary:
+				//		Create a 5 color palette based on the compound rules as implemented at
+				//		http://kuler.adobe.com.
+				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+					hsv = base.toHsv();
+
+				var h1 = ((hsv.h*2)+18<360)?(hsv.h*2)+18:Math.floor(hsv.h/2)-18,
+					h2 = ((hsv.h*2)+120<360)?(hsv.h*2)+120:Math.floor(hsv.h/2)-120,
+					h3 = ((hsv.h*2)+99<360)?(hsv.h*2)+99:Math.floor(hsv.h/2)-99,
+					s1 = (hsv.s-40>10)?hsv.s-40:hsv.s+40,
+					s2 = (hsv.s-10>80)?hsv.s-10:hsv.s+10,
+					s3 = (hsv.s-25>10)?hsv.s-25:hsv.s+25,
+					v1 = (hsv.v-40>10)?hsv.v-40:hsv.v+40,
+					v2 = (hsv.v-20>80)?hsv.v-20:hsv.v+20,
+					v3 = Math.max(hsv.v, 20);
+
+				return new dxc.Palette([
+					dojox.color.fromHsv(h1, s1, v1),
+					dojox.color.fromHsv(h1, s2, v2),
+					base,
+					dojox.color.fromHsv(h2, s3, v3),
+					dojox.color.fromHsv(h3, s2, v2)
+				]);		//	dojox.color.Palette
+			},
+
+			shades: function(/* dojox.color.Palette.__generatorArgs */args){
+				//	summary:
+				//		Create a 5 color palette based on the shades rules as implemented at
+				//		http://kuler.adobe.com.
+				var base = dojo.isString(args.base)?new dojox.color.Color(args.base):args.base,
+					hsv = base.toHsv();
+
+				var s  = (hsv.s==100 && hsv.v==0)?0:hsv.s,
+					v1 = (hsv.v-50>20)?hsv.v-50:hsv.v+30,
+					v2 = (hsv.v-25>=20)?hsv.v-25:hsv.v+55,
+					v3 = (hsv.v-75>=20)?hsv.v-75:hsv.v+5,
+					v4 = Math.max(hsv.v-10, 20);
+
+				return new dxc.Palette([
+					new dojox.color.fromHsv(hsv.h, s, v1),
+					new dojox.color.fromHsv(hsv.h, s, v2),
+					base,
+					new dojox.color.fromHsv(hsv.h, s, v3),
+					new dojox.color.fromHsv(hsv.h, s, v4)
+				]);		//	dojox.color.Palette
+			}
+		},
+		generate: function(/* String|dojox.color.Color */base, /* Function|String */type){
+			//	summary:
+			//		Generate a new Palette using any of the named functions in
+			//		dojox.color.Palette.generators or an optional function definition.  Current
+			//		generators include "analogous", "monochromatic", "triadic", "complementary",
+			//		"splitComplementary", and "shades".
+			if(dojo.isFunction(type)){
+				return type({ base: base });	//	dojox.color.Palette
+			}
+			else if(dxc.Palette.generators[type]){
+				return dxc.Palette.generators[type]({ base: base });	//	dojox.color.Palette
+			}
+			throw new Error("dojox.color.Palette.generate: the specified generator ('" + type + "') does not exist.");
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.utils"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.utils"] = true;
+dojo.provide("dojox.lang.utils");
+
+(function(){
+	var empty = {}, du = dojox.lang.utils, opts = Object.prototype.toString;
+
+	var clone = function(o){
+		if(o){
+			switch(opts.call(o)){
+				case "[object Array]":
+					return o.slice(0);
+				case "[object Object]":
+					return dojo.delegate(o);
+			}
+		}
+		return o;
+	}
+	
+	dojo.mixin(du, {
+		coerceType: function(target, source){
+			// summary: Coerces one object to the type of another.
+			// target: Object: object, which typeof result is used to coerce "source" object.
+			// source: Object: object, which will be forced to change type.
+			switch(typeof target){
+				case "number":	return Number(eval("(" + source + ")"));
+				case "string":	return String(source);
+				case "boolean":	return Boolean(eval("(" + source + ")"));
+			}
+			return eval("(" + source + ")");
+		},
+		
+		updateWithObject: function(target, source, conv){
+			// summary: Updates an existing object in place with properties from an "source" object.
+			// target: Object: the "target" object to be updated
+			// source: Object: the "source" object, whose properties will be used to source the existed object.
+			// conv: Boolean?: force conversion to the original type
+			if(!source){ return target; }
+			for(var x in target){
+				if(x in source && !(x in empty)){
+					var t = target[x];
+					if(t && typeof t == "object"){
+						du.updateWithObject(t, source[x], conv);
+					}else{
+						target[x] = conv ? du.coerceType(t, source[x]) : clone(source[x]);
+					}
+				}
+			}
+			return target;	// Object
+		},
+	
+		updateWithPattern: function(target, source, pattern, conv){
+			// summary: Updates an existing object in place with properties from an "source" object.
+			// target: Object: the "target" object to be updated
+			// source: Object: the "source" object, whose properties will be used to source the existed object.
+			// pattern: Array: an array of properties to be copied
+			// conv: Boolean?: force conversion to the original type
+			if(!source || !pattern){ return target; }
+			for(var x in pattern){
+				if(x in source && !(x in empty)){
+					target[x] = conv ? du.coerceType(pattern[x], source[x]) : clone(source[x]);
+				}
+			}
+			return target;	// Object
+		},
+		
+		merge: function(object, mixin){
+			// summary: Merge two objects structurally, mixin properties will override object's properties.
+			// object: Object: original object.
+			// mixin: Object: additional object, which properties will override object's properties.
+			if(mixin){
+				var otype = opts.call(object), mtype = opts.call(mixin), t, i, l, m;
+				switch(mtype){
+					case "[object Array]":
+						if(mtype == otype){
+							t = new Array(Math.max(object.length, mixin.length));
+							for(i = 0, l = t.length; i < l; ++i){
+								t[i] = du.merge(object[i], mixin[i]);
+							}
+							return t;
+						}
+						return mixin.slice(0);
+					case "[object Object]":
+						if(mtype == otype && object){
+							t = dojo.delegate(object);
+							for(i in mixin){
+								if(i in object){
+									l = object[i];
+									m = mixin[i];
+									if(m !== l){
+										t[i] = du.merge(l, m);
+									}
+								}else{
+									t[i] = dojo.clone(mixin[i]);
+								}
+							}
+							return t;
+						}
+						return dojo.clone(mixin);
+				}
+			}
+			return mixin;
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.gfx.gradutils"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.gradutils"] = true;
+dojo.provide("dojox.gfx.gradutils");
+
+
+
+// Various generic utilities to deal with a linear gradient
+
+(function(){
+	var d = dojo, m = dojox.gfx.matrix, C = d.Color;
+	
+	function findColor(o, c){
+		if(o <= 0){
+			return c[0].color;
+		}
+		var len = c.length;
+		if(o >= 1){
+			return c[len - 1].color;
+		}
+		//TODO: use binary search
+		for(var i = 0; i < len; ++i){
+			var stop = c[i];
+			if(stop.offset >= o){
+				if(i){
+					var prev = c[i - 1];
+					return d.blendColors(new C(prev.color), new C(stop.color),
+						(o - prev.offset) / (stop.offset - prev.offset));
+				}
+				return stop.color;
+			}
+		}
+		return c[len - 1].color;
+	}
+
+	dojox.gfx.gradutils.getColor = function(fill, pt){
+		// summary:
+		//		sample a color from a gradient using a point
+		// fill: Object:
+		//		fill object
+		// pt: dojox.gfx.Point:
+		//		point where to sample a color
+		var o;
+		if(fill){
+			switch(fill.type){
+				case "linear":
+					var angle = Math.atan2(fill.y2 - fill.y1, fill.x2 - fill.x1),
+						rotation = m.rotate(-angle),
+						projection = m.project(fill.x2 - fill.x1, fill.y2 - fill.y1),
+						p = m.multiplyPoint(projection, pt),
+						pf1 = m.multiplyPoint(projection, fill.x1, fill.y1),
+						pf2 = m.multiplyPoint(projection, fill.x2, fill.y2),
+						scale = m.multiplyPoint(rotation, pf2.x - pf1.x, pf2.y - pf1.y).x,
+						o = m.multiplyPoint(rotation, p.x - pf1.x, p.y - pf1.y).x / scale;
+					break;
+				case "radial":
+					var dx = pt.x - fill.cx, dy = pt.y - fill.cy,
+						o = Math.sqrt(dx * dx + dy * dy) / fill.r;
+					break;
+			}
+			return findColor(o, fill.colors);	// dojo.Color
+		}
+		// simple color
+		return new C(fill || [0, 0, 0, 0]);	// dojo.Color
+	};
+
+	dojox.gfx.gradutils.reverse = function(fill){
+		// summary:
+		//		reverses a gradient
+		// fill: Object:
+		//		fill object
+		if(fill){
+			switch(fill.type){
+				case "linear":
+				case "radial":
+					fill = dojo.delegate(fill);
+					if(fill.colors){
+						var c = fill.colors, l = c.length, i = 0, stop,
+							n = fill.colors = new Array(c.length);
+						for(; i < l; ++i){
+							stop = c[i];
+							n[i] = {
+								offset: 1 - stop.offset,
+								color:  stop.color
+							};
+						}
+						n.sort(function(a, b){ return a.offset - b.offset; });
+					}
+					break;
+			}
+		}
+		return fill;	// Object
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.Theme"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Theme"] = true;
+dojo.provide("dojox.charting.Theme");
+
+
+
+
+
+
+dojo.declare("dojox.charting.Theme", null, {
+	//	summary:
+	//		A Theme is a pre-defined object, primarily JSON-based, that makes up the definitions to
+	//		style a chart.
+	//
+	//	description:
+	//		While you can set up style definitions on a chart directly (usually through the various add methods
+	//		on a dojox.charting.Chart2D object), a Theme simplifies this manual setup by allowing you to
+	//		pre-define all of the various visual parameters of each element in a chart.
+	//
+	//		Most of the properties of a Theme are straight-forward; if something is line-based (such as
+	//		an axis or the ticks on an axis), they will be defined using basic stroke parameters.  Likewise,
+	//		if an element is primarily block-based (such as the background of a chart), it will be primarily
+	//		fill-based.
+	//
+	//		In addition (for convenience), a Theme definition does not have to contain the entire JSON-based
+	//		structure.  Each theme is built on top of a default theme (which serves as the basis for the theme
+	//		"GreySkies"), and is mixed into the default theme object.  This allows you to create a theme based,
+	//		say, solely on colors for data series.
+	//
+	//		Defining a new theme is relatively easy; see any of the themes in dojox.charting.themes for examples
+	//		on how to define your own.
+	//
+	//		When you set a theme on a chart, the theme itself is deep-cloned.  This means that you cannot alter
+	//		the theme itself after setting the theme value on a chart, and expect it to change your chart.  If you
+	//		are looking to make alterations to a theme for a chart, the suggestion would be to create your own
+	//		theme, based on the one you want to use, that makes those alterations before it is applied to a chart.
+	//
+	//		Finally, a Theme contains a number of functions to facilitate rendering operations on a chart--the main
+	//		helper of which is the ~next~ method, in which a chart asks for the information for the next data series
+	//		to be rendered.
+	//
+	//		A note on colors:
+	//		The Theme constructor was on the use of dojox.color.Palette (in general) for creating a visually distinct
+	//		set of colors for usage in a chart.  A palette is usually comprised of 5 different color definitions, and
+	//		no more.  If you have a need to render a chart with more than 5 data elements, you can simply "push"
+	//		new color definitions into the theme's .color array.  Make sure that you do that with the actual
+	//		theme object from a Chart, and not in the theme itself (i.e. either do that before using .setTheme
+	//		on a chart).
+	//
+	//		example:
+	//			The default theme (and structure) looks like so:
+	//	|	// all objects are structs used directly in dojox.gfx
+	//	|	chart:{
+	//	|		stroke: null,
+	//	|		fill: "white",
+	//	|		pageStyle: null // suggested page style as an object suitable for dojo.style()
+	//	|	},
+	//	|	plotarea:{
+	//	|		stroke: null,
+	//	|		fill: "white"
+	//	|	},
+	//	|	axis:{
+	//	|		stroke:	{ // the axis itself
+	//	|			color: "#333",
+	//	|			width: 1
+	//	|		},
+	//	|		tick: {	// used as a foundation for all ticks
+	//	|			color:     "#666",
+	//	|			position:  "center",
+	//	|			font:      "normal normal normal 7pt Tahoma",	// labels on axis
+	//	|			fontColor: "#333"								// color of labels
+	//	|		},
+	//	|		majorTick:	{ // major ticks on axis, and used for major gridlines
+	//	|			width:  1,
+	//	|			length: 6
+	//	|		},
+	//	|		minorTick:	{ // minor ticks on axis, and used for minor gridlines
+	//	|			width:  0.8,
+	//	|			length: 3
+	//	|		},
+	//	|		microTick:	{ // minor ticks on axis, and used for minor gridlines
+	//	|			width:  0.5,
+	//	|			length: 1
+	//	|		}
+	//	|	},
+	//	|	series: {
+	//	|		stroke:  {width: 1.5, color: "#333"},		// line
+	//	|		outline: {width: 0.1, color: "#ccc"},		// outline
+	//	|		//shadow:  {dx: 1, dy: 1, width: 2, color: [0, 0, 0, 0.3]},
+	//	|		shadow: null,								// no shadow
+	//	|		fill:    "#ccc",							// fill, if appropriate
+	//	|		font:    "normal normal normal 8pt Tahoma",	// if there's a label
+	//	|		fontColor: "#000"							// color of labels
+	//	|	},
+	//	|	marker: {	// any markers on a series
+	//	|		symbol:  "m-3,3 l3,-6 3,6 z",				// symbol
+	//	|		stroke:  {width: 1.5, color: "#333"},		// stroke
+	//	|		outline: {width: 0.1, color: "#ccc"},		// outline
+	//	|		shadow: null,								// no shadow
+	//	|		fill:    "#ccc",							// fill if needed
+	//	|		font:    "normal normal normal 8pt Tahoma",	// label
+	//	|		fontColor: "#000"
+	//	|	}
+	//
+	//	example:
+	//		Defining a new theme is pretty simple:
+	//	|	dojox.charting.themes.Grasslands = new dojox.charting.Theme({
+	//	|		colors: [ "#70803a", "#dde574", "#788062", "#b1cc5d", "#eff2c2" ]
+	//	|	});
+	//	|
+	//	|	myChart.setTheme(dojox.charting.themes.Grasslands);
+
+	shapeSpaces: {shape: 1, shapeX: 1, shapeY: 1},
+
+	constructor: function(kwArgs){
+		//	summary:
+		//		Initialize a theme using the keyword arguments.  Note that the arguments
+		//		look like the example (above), and may include a few more parameters.
+		kwArgs = kwArgs || {};
+
+		// populate theme with defaults updating them if needed
+		var def = dojox.charting.Theme.defaultTheme;
+		dojo.forEach(["chart", "plotarea", "axis", "series", "marker"], function(name){
+			this[name] = dojo.delegate(def[name], kwArgs[name]);
+		}, this);
+
+		// personalize theme
+		if(kwArgs.seriesThemes && kwArgs.seriesThemes.length){
+			this.colors  = null;
+			this.seriesThemes = kwArgs.seriesThemes.slice(0);
+		}else{
+			this.seriesThemes = null;
+			this.colors = (kwArgs.colors || dojox.charting.Theme.defaultColors).slice(0);
+		}
+		this.markerThemes = null;
+		if(kwArgs.markerThemes && kwArgs.markerThemes.length){
+			this.markerThemes = kwArgs.markerThemes.slice(0);
+		}
+		this.markers = dojo.delegate(dojox.charting.Theme.defaultMarkers, kwArgs.markers);
+
+		// set flags
+		this.noGradConv = kwArgs.noGradConv;
+		this.noRadialConv = kwArgs.noRadialConv;
+		if(kwArgs.reverseFills){
+			this.reverseFills();
+		}
+
+		//	private housekeeping
+		this._current = 0;
+		this._buildMarkerArray();
+	},
+
+	clone: function(){
+		//	summary:
+		//		Clone the current theme.
+		//	returns: dojox.charting.Theme
+		//		The cloned theme; any alterations made will not affect the original.
+		var theme = new dojox.charting.Theme({
+			// theme components
+			chart: this.chart,
+			plotarea: this.plotarea,
+			axis: this.axis,
+			series: this.series,
+			marker: this.marker,
+			// individual arrays
+			colors: this.colors,
+			markers: this.markers,
+			seriesThemes: this.seriesThemes,
+			markerThemes: this.markerThemes,
+			// flags
+			noGradConv: this.noGradConv,
+			noRadialConv: this.noRadialConv
+		});
+		// copy custom methods
+		dojo.forEach(
+			["clone", "clear", "next", "skip", "addMixin", "post", "getTick"],
+			function(name){
+				if(this.hasOwnProperty(name)){
+					theme[name] = this[name];
+				}
+			},
+			this
+		);
+		return theme;	//	dojox.charting.Theme
+	},
+
+	clear: function(){
+		//	summary:
+		//		Clear and reset the internal pointer to start fresh.
+		this._current = 0;
+	},
+
+	next: function(elementType, mixin, doPost){
+		//	summary:
+		//		Get the next color or series theme.
+		//	elementType: String?
+		//		An optional element type (for use with series themes)
+		//	mixin: Object?
+		//		An optional object to mix into the theme.
+		//	doPost: Boolean?
+		//		A flag to post-process the results.
+		//	returns: Object
+		//		An object of the structure { series, marker, symbol }
+		var merge = dojox.lang.utils.merge, series, marker;
+		if(this.colors){
+			series = dojo.delegate(this.series);
+			marker = dojo.delegate(this.marker);
+			var color = new dojo.Color(this.colors[this._current % this.colors.length]), old;
+			// modify the stroke
+			if(series.stroke && series.stroke.color){
+				series.stroke = dojo.delegate(series.stroke);
+				old = new dojo.Color(series.stroke.color);
+				series.stroke.color = new dojo.Color(color);
+				series.stroke.color.a = old.a;
+			}else{
+				series.stroke = {color: color};
+			}
+			if(marker.stroke && marker.stroke.color){
+				marker.stroke = dojo.delegate(marker.stroke);
+				old = new dojo.Color(marker.stroke.color);
+				marker.stroke.color = new dojo.Color(color);
+				marker.stroke.color.a = old.a;
+			}else{
+				marker.stroke = {color: color};
+			}
+			// modify the fill
+			if(!series.fill || series.fill.type){
+				series.fill = color;
+			}else{
+				old = new dojo.Color(series.fill);
+				series.fill = new dojo.Color(color);
+				series.fill.a = old.a;
+			}
+			if(!marker.fill || marker.fill.type){
+				marker.fill = color;
+			}else{
+				old = new dojo.Color(marker.fill);
+				marker.fill = new dojo.Color(color);
+				marker.fill.a = old.a;
+			}
+		}else{
+			series = this.seriesThemes ?
+				merge(this.series, this.seriesThemes[this._current % this.seriesThemes.length]) :
+				this.series;
+			marker = this.markerThemes ?
+				merge(this.marker, this.markerThemes[this._current % this.markerThemes.length]) :
+				series;
+		}
+
+		var symbol = marker && marker.symbol || this._markers[this._current % this._markers.length];
+
+		var theme = {series: series, marker: marker, symbol: symbol};
+		
+		// advance the counter
+		++this._current;
+
+		if(mixin){
+			theme = this.addMixin(theme, elementType, mixin);
+		}
+		if(doPost){
+			theme = this.post(theme, elementType);
+		}
+
+		return theme;	//	Object
+	},
+
+	skip: function(){
+		//	summary:
+		//		Skip the next internal color.
+		++this._current;
+	},
+
+	addMixin: function(theme, elementType, mixin, doPost){
+		//	summary:
+		//		Add a mixin object to the passed theme and process.
+		//	theme: dojox.charting.Theme
+		//		The theme to mixin to.
+		//	elementType: String
+		//		The type of element in question. Can be "line", "bar" or "circle"
+		//	mixin: Object|Array
+		//		The object or objects to mix into the theme.
+		//	doPost: Boolean
+		//		If true, run the new theme through the post-processor.
+		//	returns: dojox.charting.Theme
+		//		The new theme.
+		if(dojo.isArray(mixin)){
+			dojo.forEach(mixin, function(m){
+				theme = this.addMixin(theme, elementType, m);
+			}, this);
+		}else{
+			var t = {};
+			if("color" in mixin){
+				if(elementType == "line" || elementType == "area"){
+					dojo.setObject("series.stroke.color", mixin.color, t);
+					dojo.setObject("marker.stroke.color", mixin.color, t);
+				}else{
+					dojo.setObject("series.fill", mixin.color, t);
+				}
+			}
+			dojo.forEach(["stroke", "outline", "shadow", "fill", "font", "fontColor"], function(name){
+				var markerName = "marker" + name.charAt(0).toUpperCase() + name.substr(1),
+					b = markerName in mixin;
+				if(name in mixin){
+					dojo.setObject("series." + name, mixin[name], t);
+					if(!b){
+						dojo.setObject("marker." + name, mixin[name], t);
+					}
+				}
+				if(b){
+					dojo.setObject("marker." + name, mixin[markerName], t);
+				}
+			});
+			if("marker" in mixin){
+				t.symbol = mixin.marker;
+			}
+			theme = dojox.lang.utils.merge(theme, t);
+		}
+		if(doPost){
+			theme = this.post(theme, elementType);
+		}
+		return theme;	//	dojox.charting.Theme
+	},
+
+	post: function(theme, elementType){
+		//	summary:
+		//		Process any post-shape fills.
+		//	theme: dojox.charting.Theme
+		//		The theme to post process with.
+		//	elementType: String
+		//		The type of element being filled.  Can be "bar" or "circle".
+		//	returns: dojox.charting.Theme
+		//		The post-processed theme.
+		var fill = theme.series.fill, t;
+		if(!this.noGradConv && this.shapeSpaces[fill.space] && fill.type == "linear"){
+			if(elementType == "bar"){
+				// transpose start and end points
+				t = {
+					x1: fill.y1,
+					y1: fill.x1,
+					x2: fill.y2,
+					y2: fill.x2
+				};
+			}else if(!this.noRadialConv && fill.space == "shape" && (elementType == "slice" || elementType == "circle")){
+				// switch to radial
+				t = {
+					type: "radial",
+					cx: 0,
+					cy: 0,
+					r:  100
+				};
+			}
+			if(t){
+				return dojox.lang.utils.merge(theme, {series: {fill: t}});
+			}
+		}
+		return theme;	//	dojox.charting.Theme
+	},
+
+	getTick: function(name, mixin){
+		//	summary:
+		//		Calculates and merges tick parameters.
+		//	name: String
+		//		Tick name, can be "major", "minor", or "micro".
+		//	mixin: Object?
+		//		Optional object to mix in to the tick.
+		var tick = this.axis.tick, tickName = name + "Tick";
+			merge = dojox.lang.utils.merge;
+		if(tick){
+			if(this.axis[tickName]){
+				tick = merge(tick, this.axis[tickName]);
+			}
+		}else{
+			tick = this.axis[tickName];
+		}
+		if(mixin){
+			if(tick){
+				if(mixin[tickName]){
+					tick = merge(tick, mixin[tickName]);
+				}
+			}else{
+				tick = mixin[tickName];
+			}
+		}
+		return tick;	//	Object
+	},
+
+	inspectObjects: function(f){
+		dojo.forEach(["chart", "plotarea", "axis", "series", "marker"], function(name){
+			f(this[name]);
+		}, this);
+		if(this.seriesThemes){
+			dojo.forEach(this.seriesThemes, f);
+		}
+		if(this.markerThemes){
+			dojo.forEach(this.markerThemes, f);
+		}
+	},
+
+	reverseFills: function(){
+		this.inspectObjects(function(o){
+			if(o && o.fill){
+				o.fill = dojox.gfx.gradutils.reverse(o.fill);
+			}
+		});
+	},
+
+	addMarker:function(/*String*/ name, /*String*/ segment){
+		//	summary:
+		//		Add a custom marker to this theme.
+		//	example:
+		//	|	myTheme.addMarker("Ellipse", foo);
+		this.markers[name] = segment;
+		this._buildMarkerArray();
+	},
+
+	setMarkers:function(/*Object*/ obj){
+		//	summary:
+		//		Set all the markers of this theme at once.  obj should be a
+		//		dictionary of keys and path segments.
+		//
+		//	example:
+		//	|	myTheme.setMarkers({ "CIRCLE": foo });
+		this.markers = obj;
+		this._buildMarkerArray();
+	},
+
+	_buildMarkerArray: function(){
+		this._markers = [];
+		for(var p in this.markers){
+			this._markers.push(this.markers[p]);
+		}
+	}
+});
+
+/*=====
+dojox.charting.Theme.__DefineColorArgs = function(num, colors, hue, saturation, low, high, base, generator){
+	//	summary:
+	//		The arguments object that can be passed to define colors for a theme.
+	//	num: Number?
+	//		The number of colors to generate.  Defaults to 5.
+	//	colors: String[]|dojo.Color[]?
+	//		A pre-defined set of colors; this is passed through to the Theme directly.
+	//	hue: Number?
+	//		A hue to base the generated colors from (a number from 0 - 359).
+	//	saturation: Number?
+	//		If a hue is passed, this is used for the saturation value (0 - 100).
+	//	low: Number?
+	//		An optional value to determine the lowest value used to generate a color (HSV model)
+	//	high: Number?
+	//		An optional value to determine the highest value used to generate a color (HSV model)
+	//	base: String|dojo.Color?
+	//		A base color to use if we are defining colors using dojox.color.Palette
+	//	generator: String?
+	//		The generator function name from dojox.color.Palette.
+	this.num = num;
+	this.colors = colors;
+	this.hue = hue;
+	this.saturation = saturation;
+	this.low = low;
+	this.high = high;
+	this.base = base;
+	this.generator = generator;
+}
+=====*/
+dojo.mixin(dojox.charting.Theme, {
+	defaultMarkers: {
+		CIRCLE:   "m-3,0 c0,-4 6,-4 6,0 m-6,0 c0,4 6,4 6,0",
+		SQUARE:   "m-3,-3 l0,6 6,0 0,-6 z",
+		DIAMOND:  "m0,-3 l3,3 -3,3 -3,-3 z",
+		CROSS:    "m0,-3 l0,6 m-3,-3 l6,0",
+		X:        "m-3,-3 l6,6 m0,-6 l-6,6",
+		TRIANGLE: "m-3,3 l3,-6 3,6 z",
+		TRIANGLE_INVERTED: "m-3,-3 l3,6 3,-6 z"
+	},
+
+	defaultColors:[
+		// gray skies
+		"#54544c", "#858e94", "#6e767a", "#948585", "#474747"
+	],
+
+	defaultTheme: {
+		// all objects are structs used directly in dojox.gfx
+		chart:{
+			stroke: null,
+			fill: "white",
+			pageStyle: null
+		},
+		plotarea:{
+			stroke: null,
+			fill: "white"
+		},
+		// TODO: label rotation on axis
+		axis:{
+			stroke:	{ // the axis itself
+				color: "#333",
+				width: 1
+			},
+			tick: {	// used as a foundation for all ticks
+				color:     "#666",
+				position:  "center",
+				font:      "normal normal normal 7pt Tahoma",	// labels on axis
+				fontColor: "#333"								// color of labels
+			},
+			majorTick:	{ // major ticks on axis, and used for major gridlines
+				width:  1,
+				length: 6
+			},
+			minorTick:	{ // minor ticks on axis, and used for minor gridlines
+				width:  0.8,
+				length: 3
+			},
+			microTick:	{ // minor ticks on axis, and used for minor gridlines
+				width:  0.5,
+				length: 1
+			}
+		},
+		series: {
+			// used as a "main" theme for series, sThemes augment it
+			stroke:  {width: 1.5, color: "#333"},		// line
+			outline: {width: 0.1, color: "#ccc"},		// outline
+			//shadow:  {dx: 1, dy: 1, width: 2, color: [0, 0, 0, 0.3]},
+			shadow: null,								// no shadow
+			fill:    "#ccc",							// fill, if appropriate
+			font:    "normal normal normal 8pt Tahoma",	// if there's a label
+			fontColor: "#000"							// color of labels
+		},
+		marker: {	// any markers on a series
+			stroke:  {width: 1.5, color: "#333"},		// stroke
+			outline: {width: 0.1, color: "#ccc"},		// outline
+			//shadow:  {dx: 1, dy: 1, width: 2, color: [0, 0, 0, 0.3]},
+			shadow: null,								// no shadow
+			fill:    "#ccc",							// fill if needed
+			font:    "normal normal normal 8pt Tahoma",	// label
+			fontColor: "#000"
+		}
+	},
+
+	defineColors: function(kwArgs){
+		//	summary:
+		//		Generate a set of colors for the theme based on keyword
+		//		arguments.
+		//	kwArgs: dojox.charting.Theme.__DefineColorArgs
+		//		The arguments object used to define colors.
+		//	returns: dojo.Color[]
+		//		An array of colors for use in a theme.
+		//
+		//	example:
+		//	|	var colors = dojox.charting.Theme.defineColors({
+		//	|		base: "#369",
+		//	|		generator: "compound"
+		//	|	});
+		//
+		//	example:
+		//	|	var colors = dojox.charting.Theme.defineColors({
+		//	|		hue: 60,
+		//	|		saturation: 90,
+		//	|		low: 30,
+		//	|		high: 80
+		//	|	});
+		kwArgs = kwArgs || {};
+		var c = [], n = kwArgs.num || 5;	// the number of colors to generate
+		if(kwArgs.colors){
+			// we have an array of colors predefined, so fix for the number of series.
+			var l = kwArgs.colors.length;
+			for(var i = 0; i < n; i++){
+				c.push(kwArgs.colors[i % l]);
+			}
+			return c;	//	dojo.Color[]
+		}
+		if(kwArgs.hue){
+			// single hue, generate a set based on brightness
+			var s = kwArgs.saturation || 100;	// saturation
+			var st = kwArgs.low || 30;
+			var end = kwArgs.high || 90;
+			// we'd like it to be a little on the darker side.
+			var l = (end + st) / 2;
+			// alternately, use "shades"
+			return dojox.color.Palette.generate(
+				dojox.color.fromHsv(kwArgs.hue, s, l), "monochromatic"
+			).colors;
+		}
+		if(kwArgs.generator){
+			//	pass a base color and the name of a generator
+			return dojox.color.Palette.generate(kwArgs.base, kwArgs.generator).colors;
+		}
+		return c;	//	dojo.Color[]
+	},
+	
+	generateGradient: function(fillPattern, colorFrom, colorTo){
+		var fill = dojo.delegate(fillPattern);
+		fill.colors = [
+			{offset: 0, color: colorFrom},
+			{offset: 1, color: colorTo}
+		];
+		return fill;
+	},
+	
+	generateHslColor: function(color, luminance){
+		color = new dojox.color.Color(color);
+		var hsl    = color.toHsl(),
+			result = dojox.color.fromHsl(hsl.h, hsl.s, luminance);
+		result.a = color.a;	// add missing opacity
+		return result;
+	},
+
+	generateHslGradient: function(color, fillPattern, lumFrom, lumTo){
+		color = new dojox.color.Color(color);
+		var hsl       = color.toHsl(),
+			colorFrom = dojox.color.fromHsl(hsl.h, hsl.s, lumFrom),
+			colorTo   = dojox.color.fromHsl(hsl.h, hsl.s, lumTo);
+		colorFrom.a = colorTo.a = color.a;	// add missing opacity
+		return dojox.charting.Theme.generateGradient(fillPattern, colorFrom, colorTo);	// Object
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.Element"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Element"] = true;
+dojo.provide("dojox.charting.Element");
+
+
+
+dojo.declare("dojox.charting.Element", null, {
+	//	summary:
+	//		A base class that is used to build other elements of a chart, such as
+	//		a series.
+	//	chart: dojox.charting.Chart2D
+	//		The parent chart for this element.
+	//	group: dojox.gfx.Group
+	//		The visual GFX group representing this element.
+	//	htmlElement: Array
+	//		Any DOMNodes used as a part of this element (such as HTML-based labels).
+	//	dirty: Boolean
+	//		A flag indicating whether or not this element needs to be rendered.
+
+	chart: null,
+	group: null,
+	htmlElements: null,
+	dirty: true,
+
+	constructor: function(chart){
+		//	summary:
+		//		Creates a new charting element.
+		//	chart: dojox.charting.Chart2D
+		//		The chart that this element belongs to.
+		this.chart = chart;
+		this.group = null;
+		this.htmlElements = [];
+		this.dirty = true;
+	},
+	createGroup: function(creator){
+		//	summary:
+		//		Convenience function to create a new dojox.gfx.Group.
+		//	creator: dojox.gfx.Surface?
+		//		An optional surface in which to create this group.
+		//	returns: dojox.charting.Element
+		//		A reference to this object for functional chaining.
+		if(!creator){ creator = this.chart.surface; }
+		if(!this.group){
+			this.group = creator.createGroup();
+		}
+		return this;	//	dojox.charting.Element
+	},
+	purgeGroup: function(){
+		//	summary:
+		//		Clear any elements out of our group, and destroy the group.
+		//	returns: dojox.charting.Element
+		//		A reference to this object for functional chaining.
+		this.destroyHtmlElements();
+		if(this.group){
+			this.group.clear();
+			this.group.removeShape();
+			this.group = null;
+		}
+		this.dirty = true;
+		return this;	//	dojox.charting.Element
+	},
+	cleanGroup: function(creator){
+		//	summary:
+		//		Clean any elements (HTML or GFX-based) out of our group, and create a new one.
+		//	creator: dojox.gfx.Surface?
+		//		An optional surface to work with.
+		//	returns: dojox.charting.Element
+		//		A reference to this object for functional chaining.
+		this.destroyHtmlElements();
+		if(!creator){ creator = this.chart.surface; }
+		if(this.group){
+			this.group.clear();
+		}else{
+			this.group = creator.createGroup();
+		}
+		this.dirty = true;
+		return this;	//	dojox.charting.Element
+	},
+	destroyHtmlElements: function(){
+		//	summary:
+		//		Destroy any DOMNodes that may have been created as a part of this element.
+		if(this.htmlElements.length){
+			dojo.forEach(this.htmlElements, dojo.destroy);
+			this.htmlElements = [];
+		}
+	},
+	destroy: function(){
+		//	summary:
+		//		API addition to conform to the rest of the Dojo Toolkit's standard.
+		this.purgeGroup();
+	},
+	// fill utilities
+	_plotFill: function(fill, dim, offsets){
+		// process a plot-wide fill
+		if(!fill || !fill.type || !fill.space){
+			return fill;
+		}
+		var space = fill.space;
+		switch(fill.type){
+			case "linear":
+				if(space === "plot" || space === "shapeX" || space === "shapeY"){
+					// clone a fill so we can modify properly directly
+					fill = dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient, fill);
+					fill.space = space;
+					// process dimensions
+					if(space === "plot" || space === "shapeX"){
+						// process Y
+						var span = dim.height - offsets.t - offsets.b;
+						fill.y1 = offsets.t + span * fill.y1 / 100;
+						fill.y2 = offsets.t + span * fill.y2 / 100;
+					}
+					if(space === "plot" || space === "shapeY"){
+						// process X
+						var span = dim.width - offsets.l - offsets.r;
+						fill.x1 = offsets.l + span * fill.x1 / 100;
+						fill.x2 = offsets.l + span * fill.x2 / 100;
+					}
+				}
+				break;
+			case "radial":
+				if(space === "plot"){
+					// this one is used exclusively for scatter charts
+					// clone a fill so we can modify properly directly
+					fill = dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient, fill);
+					fill.space = space;
+					// process both dimensions
+					var spanX = dim.width  - offsets.l - offsets.r,
+						spanY = dim.height - offsets.t - offsets.b;
+					fill.cx = offsets.l + spanX * fill.cx / 100;
+					fill.cy = offsets.t + spanY * fill.cy / 100;
+					fill.r  = fill.r * Math.sqrt(spanX * spanX + spanY * spanY) / 200;
+				}
+				break;
+			case "pattern":
+				if(space === "plot" || space === "shapeX" || space === "shapeY"){
+					// clone a fill so we can modify properly directly
+					fill = dojox.gfx.makeParameters(dojox.gfx.defaultPattern, fill);
+					fill.space = space;
+					// process dimensions
+					if(space === "plot" || space === "shapeX"){
+						// process Y
+						var span = dim.height - offsets.t - offsets.b;
+						fill.y = offsets.t + span * fill.y / 100;
+						fill.height = span * fill.height / 100;
+					}
+					if(space === "plot" || space === "shapeY"){
+						// process X
+						var span = dim.width - offsets.l - offsets.r;
+						fill.x = offsets.l + span * fill.x / 100;
+						fill.width = span * fill.width / 100;
+					}
+				}
+				break;
+		}
+		return fill;
+	},
+	_shapeFill: function(fill, bbox){
+		// process shape-specific fill
+		if(!fill || !fill.space){
+			return fill;
+		}
+		var space = fill.space;
+		switch(fill.type){
+			case "linear":
+				if(space === "shape" || space === "shapeX" || space === "shapeY"){
+					// clone a fill so we can modify properly directly
+					fill = dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient, fill);
+					fill.space = space;
+					// process dimensions
+					if(space === "shape" || space === "shapeX"){
+						// process X
+						var span = bbox.width;
+						fill.x1 = bbox.x + span * fill.x1 / 100;
+						fill.x2 = bbox.x + span * fill.x2 / 100;
+					}
+					if(space === "shape" || space === "shapeY"){
+						// process Y
+						var span = bbox.height;
+						fill.y1 = bbox.y + span * fill.y1 / 100;
+						fill.y2 = bbox.y + span * fill.y2 / 100;
+					}
+				}
+				break;
+			case "radial":
+				if(space === "shape"){
+					// this one is used exclusively for bubble charts and pie charts
+					// clone a fill so we can modify properly directly
+					fill = dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient, fill);
+					fill.space = space;
+					// process both dimensions
+					fill.cx = bbox.x + bbox.width  / 2;
+					fill.cy = bbox.y + bbox.height / 2;
+					fill.r  = fill.r * bbox.width  / 200;
+				}
+				break;
+			case "pattern":
+				if(space === "shape" || space === "shapeX" || space === "shapeY"){
+					// clone a fill so we can modify properly directly
+					fill = dojox.gfx.makeParameters(dojox.gfx.defaultPattern, fill);
+					fill.space = space;
+					// process dimensions
+					if(space === "shape" || space === "shapeX"){
+						// process X
+						var span = bbox.width;
+						fill.x = bbox.x + span * fill.x / 100;
+						fill.width = span * fill.width / 100;
+					}
+					if(space === "shape" || space === "shapeY"){
+						// process Y
+						var span = bbox.height;
+						fill.y = bbox.y + span * fill.y / 100;
+						fill.height = span * fill.height / 100;
+					}
+				}
+				break;
+		}
+		return fill;
+	},
+	_pseudoRadialFill: function(fill, center, radius, start, end){
+		// process pseudo-radial fills
+		if(!fill || fill.type !== "radial" || fill.space !== "shape"){
+			return fill;
+		}
+		// clone and normalize fill
+		var space = fill.space;
+		fill = dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient, fill);
+		fill.space = space;
+		if(arguments.length < 4){
+			// process both dimensions
+			fill.cx = center.x;
+			fill.cy = center.y;
+			fill.r  = fill.r * radius / 100;
+			return fill;
+		}
+		// convert to a linear gradient
+		var angle = arguments.length < 5 ? start : (end + start) / 2;
+		return {
+			type: "linear",
+			x1: center.x,
+			y1: center.y,
+			x2: center.x + fill.r * radius * Math.cos(angle) / 100,
+			y2: center.y + fill.r * radius * Math.sin(angle) / 100,
+			colors: fill.colors
+		};
+		return fill;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.Series"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Series"] = true;
+dojo.provide("dojox.charting.Series");
+
+
+/*=====
+dojox.charting.__SeriesCtorArgs = function(plot){
+	//	summary:
+	//		An optional arguments object that can be used in the Series constructor.
+	//	plot: String?
+	//		The plot (by name) that this series belongs to.
+	this.plot = plot;
+} 
+=====*/
+dojo.declare("dojox.charting.Series", dojox.charting.Element, {
+	//	summary:
+	//		An object representing a series of data for plotting on a chart.
+	constructor: function(chart, data, kwArgs){
+		//	summary:
+		//		Create a new data series object for use within charting.
+		//	chart: dojox.charting.Chart2D
+		//		The chart that this series belongs to.
+		//	data: Array|Object:
+		//		The array of data points (either numbers or objects) that
+		//		represents the data to be drawn. Or it can be an object. In
+		//		the latter case, it should have a property "data" (an array),
+		//		destroy(), and setSeriesObject().
+		//	kwArgs: dojox.charting.__SeriesCtorArgs?
+		//		An optional keyword arguments object to set details for this series.
+		dojo.mixin(this, kwArgs);
+		if(typeof this.plot != "string"){ this.plot = "default"; }
+		this.update(data);
+	},
+
+	clear: function(){
+		//	summary:
+		//		Clear the calculated additional parameters set on this series.
+		this.dyn = {};
+	},
+	
+	update: function(data){
+		//	summary:
+		//		Set data and make this object dirty, so it can be redrawn.
+		//	data: Array|Object:
+		//		The array of data points (either numbers or objects) that
+		//		represents the data to be drawn. Or it can be an object. In
+		//		the latter case, it should have a property "data" (an array),
+		//		destroy(), and setSeriesObject().
+		if(dojo.isArray(data)){
+			this.data = data;
+		}else{
+			this.source = data;
+			this.data = this.source.data;
+			if(this.source.setSeriesObject){
+				this.source.setSeriesObject(this);
+			}
+		}
+		this.dirty = true;
+		this.clear();
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.scaler.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.scaler.common"] = true;
+dojo.provide("dojox.charting.scaler.common");
+
+(function(){
+	var eq = function(/*Number*/ a, /*Number*/ b){
+		// summary: compare two FP numbers for equality
+		return Math.abs(a - b) <= 1e-6 * (Math.abs(a) + Math.abs(b));	// Boolean
+	};
+	
+	dojo.mixin(dojox.charting.scaler.common, {
+		findString: function(/*String*/ val, /*Array*/ text){
+			val = val.toLowerCase();
+			for(var i = 0; i < text.length; ++i){
+				if(val == text[i]){ return true; }
+			}
+			return false;
+		},
+		getNumericLabel: function(/*Number*/ number, /*Number*/ precision, /*Object*/ kwArgs){
+			var def = kwArgs.fixed ? 
+						number.toFixed(precision < 0 ? -precision : 0) : 
+						number.toString();
+			if(kwArgs.labelFunc){
+				var r = kwArgs.labelFunc(def, number, precision);
+				if(r){ return r; }
+				// else fall through to the regular labels search
+			}
+			if(kwArgs.labels){
+				// classic binary search
+				var l = kwArgs.labels, lo = 0, hi = l.length;
+				while(lo < hi){
+					var mid = Math.floor((lo + hi) / 2), val = l[mid].value;
+					if(val < number){
+						lo = mid + 1;
+					}else{
+						hi = mid;
+					}
+				}
+				// lets take into account FP errors
+				if(lo < l.length && eq(l[lo].value, number)){
+					return l[lo].text;
+				}
+				--lo;
+				if(lo >= 0 && lo < l.length && eq(l[lo].value, number)){
+					return l[lo].text;
+				}
+				lo += 2;
+				if(lo < l.length && eq(l[lo].value, number)){
+					return l[lo].text;
+				}
+				// otherwise we will produce a number
+			}
+			return def;
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.scaler.linear"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.scaler.linear"] = true;
+dojo.provide("dojox.charting.scaler.linear");
+
+
+(function(){
+	var deltaLimit = 3,	// pixels
+		dc = dojox.charting, dcs = dc.scaler, dcsc = dcs.common,
+		findString = dcsc.findString,
+		getLabel = dcsc.getNumericLabel;
+	
+	var calcTicks = function(min, max, kwArgs, majorTick, minorTick, microTick, span){
+		kwArgs = dojo.delegate(kwArgs);
+		if(!majorTick){
+			if(kwArgs.fixUpper == "major"){ kwArgs.fixUpper = "minor"; }
+			if(kwArgs.fixLower == "major"){ kwArgs.fixLower = "minor"; }
+		}
+		if(!minorTick){
+			if(kwArgs.fixUpper == "minor"){ kwArgs.fixUpper = "micro"; }
+			if(kwArgs.fixLower == "minor"){ kwArgs.fixLower = "micro"; }
+		}
+		if(!microTick){
+			if(kwArgs.fixUpper == "micro"){ kwArgs.fixUpper = "none"; }
+			if(kwArgs.fixLower == "micro"){ kwArgs.fixLower = "none"; }
+		}
+		var lowerBound = findString(kwArgs.fixLower, ["major"]) ?
+				Math.floor(kwArgs.min / majorTick) * majorTick :
+					findString(kwArgs.fixLower, ["minor"]) ?
+						Math.floor(kwArgs.min / minorTick) * minorTick :
+							findString(kwArgs.fixLower, ["micro"]) ?
+								Math.floor(kwArgs.min / microTick) * microTick : kwArgs.min,
+			upperBound = findString(kwArgs.fixUpper, ["major"]) ?
+				Math.ceil(kwArgs.max / majorTick) * majorTick :
+					findString(kwArgs.fixUpper, ["minor"]) ?
+						Math.ceil(kwArgs.max / minorTick) * minorTick :
+							findString(kwArgs.fixUpper, ["micro"]) ?
+								Math.ceil(kwArgs.max / microTick) * microTick : kwArgs.max;
+								
+		if(kwArgs.useMin){ min = lowerBound; }
+		if(kwArgs.useMax){ max = upperBound; }
+		
+		var majorStart = (!majorTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major"])) ?
+				min : Math.ceil(min / majorTick) * majorTick,
+			minorStart = (!minorTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major", "minor"])) ?
+				min : Math.ceil(min / minorTick) * minorTick,
+			microStart = (! microTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major", "minor", "micro"])) ?
+				min : Math.ceil(min / microTick) * microTick,
+			majorCount = !majorTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major"]) ?
+				Math.round((max - majorStart) / majorTick) :
+				Math.floor((max - majorStart) / majorTick)) + 1,
+			minorCount = !minorTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major", "minor"]) ?
+				Math.round((max - minorStart) / minorTick) :
+				Math.floor((max - minorStart) / minorTick)) + 1,
+			microCount = !microTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major", "minor", "micro"]) ?
+				Math.round((max - microStart) / microTick) :
+				Math.floor((max - microStart) / microTick)) + 1,
+			minorPerMajor  = minorTick ? Math.round(majorTick / minorTick) : 0,
+			microPerMinor  = microTick ? Math.round(minorTick / microTick) : 0,
+			majorPrecision = majorTick ? Math.floor(Math.log(majorTick) / Math.LN10) : 0,
+			minorPrecision = minorTick ? Math.floor(Math.log(minorTick) / Math.LN10) : 0,
+			scale = span / (max - min);	
+		if(!isFinite(scale)){ scale = 1; }
+		
+		return {
+			bounds: {
+				lower:	lowerBound,
+				upper:	upperBound,
+				from:	min,
+				to:		max,
+				scale:	scale,
+				span:	span
+			},
+			major: {
+				tick:	majorTick,
+				start:	majorStart,
+				count:	majorCount,
+				prec:	majorPrecision
+			},
+			minor: {
+				tick:	minorTick,
+				start:	minorStart,
+				count:	minorCount,
+				prec:	minorPrecision
+			},
+			micro: {
+				tick:	microTick,
+				start:	microStart,
+				count:	microCount,
+				prec:	0
+			},
+			minorPerMajor:	minorPerMajor,
+			microPerMinor:	microPerMinor,
+			scaler:			dcs.linear
+		};
+	};
+	
+	dojo.mixin(dojox.charting.scaler.linear, {
+		buildScaler: function(/*Number*/ min, /*Number*/ max, /*Number*/ span, /*Object*/ kwArgs){
+			var h = {fixUpper: "none", fixLower: "none", natural: false};
+			if(kwArgs){
+				if("fixUpper" in kwArgs){ h.fixUpper = String(kwArgs.fixUpper); }
+				if("fixLower" in kwArgs){ h.fixLower = String(kwArgs.fixLower); }
+				if("natural"  in kwArgs){ h.natural  = Boolean(kwArgs.natural); }
+			}
+			
+			// update bounds
+			if("min" in kwArgs){ min = kwArgs.min; }
+			if("max" in kwArgs){ max = kwArgs.max; }
+			if(kwArgs.includeZero){
+				if(min > 0){ min = 0; }
+				if(max < 0){ max = 0; }
+			}
+			h.min = min;
+			h.useMin = true;
+			h.max = max;
+			h.useMax = true;
+			
+			if("from" in kwArgs){
+				min = kwArgs.from;
+				h.useMin = false;
+			}
+			if("to" in kwArgs){
+				max = kwArgs.to;
+				h.useMax = false;
+			}
+			
+			// check for erroneous condition
+			if(max <= min){
+				return calcTicks(min, max, h, 0, 0, 0, span);	// Object
+			}
+			
+			var mag = Math.floor(Math.log(max - min) / Math.LN10),
+				major = kwArgs && ("majorTickStep" in kwArgs) ? kwArgs.majorTickStep : Math.pow(10, mag), 
+				minor = 0, micro = 0, ticks;
+				
+			// calculate minor ticks
+			if(kwArgs && ("minorTickStep" in kwArgs)){
+				minor = kwArgs.minorTickStep;
+			}else{
+				do{
+					minor = major / 10;
+					if(!h.natural || minor > 0.9){
+						ticks = calcTicks(min, max, h, major, minor, 0, span);
+						if(ticks.bounds.scale * ticks.minor.tick > deltaLimit){ break; }
+					}
+					minor = major / 5;
+					if(!h.natural || minor > 0.9){
+						ticks = calcTicks(min, max, h, major, minor, 0, span);
+						if(ticks.bounds.scale * ticks.minor.tick > deltaLimit){ break; }
+					}
+					minor = major / 2;
+					if(!h.natural || minor > 0.9){
+						ticks = calcTicks(min, max, h, major, minor, 0, span);
+						if(ticks.bounds.scale * ticks.minor.tick > deltaLimit){ break; }
+					}
+					return calcTicks(min, max, h, major, 0, 0, span);	// Object
+				}while(false);
+			}
+	
+			// calculate micro ticks
+			if(kwArgs && ("microTickStep" in kwArgs)){
+				micro = kwArgs.microTickStep;
+				ticks = calcTicks(min, max, h, major, minor, micro, span);
+			}else{
+				do{
+					micro = minor / 10;
+					if(!h.natural || micro > 0.9){
+						ticks = calcTicks(min, max, h, major, minor, micro, span);
+						if(ticks.bounds.scale * ticks.micro.tick > deltaLimit){ break; }
+					}
+					micro = minor / 5;
+					if(!h.natural || micro > 0.9){
+						ticks = calcTicks(min, max, h, major, minor, micro, span);
+						if(ticks.bounds.scale * ticks.micro.tick > deltaLimit){ break; }
+					}
+					micro = minor / 2;
+					if(!h.natural || micro > 0.9){
+						ticks = calcTicks(min, max, h, major, minor, micro, span);
+						if(ticks.bounds.scale * ticks.micro.tick > deltaLimit){ break; }
+					}
+					micro = 0;
+				}while(false);
+			}
+	
+			return micro ? ticks : calcTicks(min, max, h, major, minor, 0, span);	// Object
+		},
+		buildTicks: function(/*Object*/ scaler, /*Object*/ kwArgs){
+			var step, next, tick,
+				nextMajor = scaler.major.start, 
+				nextMinor = scaler.minor.start, 
+				nextMicro = scaler.micro.start;
+			if(kwArgs.microTicks && scaler.micro.tick){
+				step = scaler.micro.tick, next = nextMicro;
+			}else if(kwArgs.minorTicks && scaler.minor.tick){
+				step = scaler.minor.tick, next = nextMinor;
+			}else if(scaler.major.tick){
+				step = scaler.major.tick, next = nextMajor;
+			}else{
+				// no ticks
+				return null;
+			}
+			// make sure that we have finite bounds
+			var revScale = 1 / scaler.bounds.scale;
+			if(scaler.bounds.to <= scaler.bounds.from || isNaN(revScale) || !isFinite(revScale) ||
+					step <= 0 || isNaN(step) || !isFinite(step)){
+				// no ticks
+				return null;
+			}
+			// loop over all ticks
+			var majorTicks = [], minorTicks = [], microTicks = [];
+			while(next <= scaler.bounds.to + revScale){
+				if(Math.abs(nextMajor - next) < step / 2){
+					// major tick
+					tick = {value: nextMajor};
+					if(kwArgs.majorLabels){
+						tick.label = getLabel(nextMajor, scaler.major.prec, kwArgs);
+					}
+					majorTicks.push(tick);
+					nextMajor += scaler.major.tick;
+					nextMinor += scaler.minor.tick;
+					nextMicro += scaler.micro.tick;
+				}else if(Math.abs(nextMinor - next) < step / 2){
+					// minor tick
+					if(kwArgs.minorTicks){
+						tick = {value: nextMinor};
+						if(kwArgs.minorLabels && (scaler.minMinorStep <= scaler.minor.tick * scaler.bounds.scale)){
+							tick.label = getLabel(nextMinor, scaler.minor.prec, kwArgs);
+						}
+						minorTicks.push(tick);
+					}
+					nextMinor += scaler.minor.tick;
+					nextMicro += scaler.micro.tick;
+				}else{
+					// micro tick
+					if(kwArgs.microTicks){
+						microTicks.push({value: nextMicro});
+					}
+					nextMicro += scaler.micro.tick;
+				}
+				next += step;
+			}
+			return {major: majorTicks, minor: minorTicks, micro: microTicks};	// Object
+		},
+		getTransformerFromModel: function(/*Object*/ scaler){
+			var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+			return function(x){ return (x - offset) * scale; };	// Function
+		},
+		getTransformerFromPlot: function(/*Object*/ scaler){
+			var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+			return function(x){ return x / scale + offset; };	// Function
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.axis2d.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.common"] = true;
+dojo.provide("dojox.charting.axis2d.common");
+
+
+
+(function(){
+	var g = dojox.gfx;
+
+	var clearNode = function(s){
+		s.marginLeft   = "0px";
+		s.marginTop    = "0px";
+		s.marginRight  = "0px";
+		s.marginBottom = "0px";
+		s.paddingLeft   = "0px";
+		s.paddingTop    = "0px";
+		s.paddingRight  = "0px";
+		s.paddingBottom = "0px";
+		s.borderLeftWidth   = "0px";
+		s.borderTopWidth    = "0px";
+		s.borderRightWidth  = "0px";
+		s.borderBottomWidth = "0px";
+	};
+
+	var getBoxWidth = function(n){
+		// marginBox is incredibly slow, so avoid it if we can
+		if(n["getBoundingClientRect"]){
+			var bcr = n.getBoundingClientRect();
+			return bcr.width || (bcr.right - bcr.left);
+		}else{
+			return dojo.marginBox(n).w;
+		}
+	};
+
+	dojo.mixin(dojox.charting.axis2d.common, {
+		//	summary:
+		//		Common methods to be used by any axis.  This is considered "static".
+		createText: {
+			gfx: function(chart, creator, x, y, align, text, font, fontColor){
+				//	summary:
+				//		Use dojox.gfx to create any text.
+				//	chart: dojox.charting.Chart2D
+				//		The chart to create the text into.
+				//	creator: dojox.gfx.Surface
+				//		The graphics surface to use for creating the text.
+				//	x: Number
+				//		Where to create the text along the x axis (CSS left).
+				//	y: Number
+				//		Where to create the text along the y axis (CSS top).
+				//	align: String
+				//		How to align the text.  Can be "left", "right", "center".
+				//	text: String
+				//		The text to render.
+				//	font: String
+				//		The font definition, a la CSS "font".
+				//	fontColor: String|dojo.Color
+				//		The color of the resultant text.
+				//	returns: dojox.gfx.Text
+				//		The resultant GFX object.
+				return creator.createText({
+					x: x, y: y, text: text, align: align
+				}).setFont(font).setFill(fontColor);	//	dojox.gfx.Text
+			},
+			html: function(chart, creator, x, y, align, text, font, fontColor, labelWidth){
+				//	summary:
+				//		Use the HTML DOM to create any text.
+				//	chart: dojox.charting.Chart2D
+				//		The chart to create the text into.
+				//	creator: dojox.gfx.Surface
+				//		The graphics surface to use for creating the text.
+				//	x: Number
+				//		Where to create the text along the x axis (CSS left).
+				//	y: Number
+				//		Where to create the text along the y axis (CSS top).
+				//	align: String
+				//		How to align the text.  Can be "left", "right", "center".
+				//	text: String
+				//		The text to render.
+				//	font: String
+				//		The font definition, a la CSS "font".
+				//	fontColor: String|dojo.Color
+				//		The color of the resultant text.
+				//	labelWidth: Number?
+				//		The maximum width of the resultant DOM node.
+				//	returns: DOMNode
+				//		The resultant DOMNode (a "div" element).
+
+				// setup the text node
+				var p = dojo.doc.createElement("div"), s = p.style, boxWidth;
+				clearNode(s);
+				s.font = font;
+				p.innerHTML = String(text).replace(/\s/g, "&nbsp;");
+				s.color = fontColor;
+				// measure the size
+				s.position = "absolute";
+				s.left = "-10000px";
+				dojo.body().appendChild(p);
+				var size = g.normalizedLength(g.splitFontString(font).size);
+
+				// do we need to calculate the label width?
+				if(!labelWidth){
+					boxWidth = getBoxWidth(p);
+				}
+
+				// new settings for the text node
+				dojo.body().removeChild(p);
+
+				s.position = "relative";
+				if(labelWidth){
+					s.width = labelWidth + "px";
+					// s.border = "1px dotted grey";
+					switch(align){
+						case "middle":
+							s.textAlign = "center";
+							s.left = (x - labelWidth / 2) + "px";
+							break;
+						case "end":
+							s.textAlign = "right";
+							s.left = (x - labelWidth) + "px";
+							break;
+						default:
+							s.left = x + "px";
+							s.textAlign = "left";
+							break;
+					}
+				}else{
+					switch(align){
+						case "middle":
+							s.left = Math.floor(x - boxWidth / 2) + "px";
+							// s.left = Math.floor(x - p.offsetWidth / 2) + "px";
+							break;
+						case "end":
+							s.left = Math.floor(x - boxWidth) + "px";
+							// s.left = Math.floor(x - p.offsetWidth) + "px";
+							break;
+						//case "start":
+						default:
+							s.left = Math.floor(x) + "px";
+							break;
+					}
+				}
+				s.top = Math.floor(y - size) + "px";
+				s.whiteSpace = "nowrap";	// hack for WebKit
+				// setup the wrapper node
+				var wrap = dojo.doc.createElement("div"), w = wrap.style;
+				clearNode(w);
+				w.width = "0px";
+				w.height = "0px";
+				// insert nodes
+				wrap.appendChild(p)
+				chart.node.insertBefore(wrap, chart.node.firstChild);
+				return wrap;	//	DOMNode
+			}
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.axis2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.Base"] = true;
+dojo.provide("dojox.charting.axis2d.Base");
+
+
+
+dojo.declare("dojox.charting.axis2d.Base", dojox.charting.Element, {
+	//	summary:
+	//		The base class for any axis.  This is more of an interface/API
+	//		definition than anything else; see dojox.charting.axis2d.Default
+	//		for more details.
+	constructor: function(chart, kwArgs){
+		//	summary:
+		//		Return a new base axis.
+		//	chart: dojox.charting.Chart2D
+		//		The chart this axis belongs to.
+		//	kwArgs: dojox.charting.axis2d.__AxisCtorArgs?
+		//		An optional arguments object to define the axis parameters.
+		this.vertical = kwArgs && kwArgs.vertical;
+	},
+	clear: function(){
+		//	summary:
+		//		Stub function for clearing the axis.
+		//	returns: dojox.charting.axis2d.Base
+		//		A reference to the axis for functional chaining.
+		return this;	//	dojox.charting.axis2d.Base
+	},
+	initialized: function(){
+		//	summary:
+		//		Return a flag as to whether or not this axis has been initialized.
+		//	returns: Boolean
+		//		If the axis is initialized or not.
+		return false;	//	Boolean
+	},
+	calculate: function(min, max, span){
+		//	summary:
+		//		Stub function to run the calcuations needed for drawing this axis.
+		//	returns: dojox.charting.axis2d.Base
+		//		A reference to the axis for functional chaining.
+		return this;	//	dojox.charting.axis2d.Base
+	},
+	getScaler: function(){
+		//	summary:
+		//		A stub function to return the scaler object created during calculate.
+		//	returns: Object
+		//		The scaler object (see dojox.charting.scaler.linear for more information)
+		return null;	//	Object
+	},
+	getTicks: function(){
+		//	summary:
+		//		A stub function to return the object that helps define how ticks are rendered.
+		//	returns: Object
+		//		The ticks object.
+		return null;	//	Object
+	},
+	getOffsets: function(){
+		//	summary:
+		//		A stub function to return any offsets needed for axis and series rendering.
+		//	returns: Object
+		//		An object of the form { l, r, t, b }.
+		return {l: 0, r: 0, t: 0, b: 0};	//	Object
+	},
+	render: function(dim, offsets){
+		//	summary:
+		//		Stub function to render this axis.
+		//	returns: dojox.charting.axis2d.Base
+		//		A reference to the axis for functional chaining.
+		this.dirty = false;
+		return this;	//	dojox.charting.axis2d.Base
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.string"] = true;
+dojo.provide("dojo.string");
+
+/*=====
+dojo.string = { 
+	// summary: String utilities for Dojo
+};
+=====*/
+
+dojo.string.rep = function(/*String*/str, /*Integer*/num){
+	//	summary:
+	//		Efficiently replicate a string `n` times.
+	//	str:
+	//		the string to replicate
+	//	num:
+	//		number of times to replicate the string
+	
+	if(num <= 0 || !str){ return ""; }
+	
+	var buf = [];
+	for(;;){
+		if(num & 1){
+			buf.push(str);
+		}
+		if(!(num >>= 1)){ break; }
+		str += str;
+	}
+	return buf.join("");	// String
+};
+
+dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){
+	//	summary:
+	//		Pad a string to guarantee that it is at least `size` length by
+	//		filling with the character `ch` at either the start or end of the
+	//		string. Pads at the start, by default.
+	//	text:
+	//		the string to pad
+	//	size:
+	//		length to provide padding
+	//	ch:
+	//		character to pad, defaults to '0'
+	//	end:
+	//		adds padding at the end if true, otherwise pads at start
+	//	example:
+	//	|	// Fill the string to length 10 with "+" characters on the right.  Yields "Dojo++++++".
+	//	|	dojo.string.pad("Dojo", 10, "+", true);
+
+	if(!ch){
+		ch = '0';
+	}
+	var out = String(text),
+		pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length));
+	return end ? out + pad : pad + out;	// String
+};
+
+dojo.string.substitute = function(	/*String*/		template, 
+									/*Object|Array*/map, 
+									/*Function?*/	transform, 
+									/*Object?*/		thisObject){
+	//	summary:
+	//		Performs parameterized substitutions on a string. Throws an
+	//		exception if any parameter is unmatched.
+	//	template: 
+	//		a string with expressions in the form `${key}` to be replaced or
+	//		`${key:format}` which specifies a format function. keys are case-sensitive. 
+	//	map:
+	//		hash to search for substitutions
+	//	transform: 
+	//		a function to process all parameters before substitution takes
+	//		place, e.g. mylib.encodeXML
+	//	thisObject: 
+	//		where to look for optional format function; default to the global
+	//		namespace
+	//	example:
+	//		Substitutes two expressions in a string from an Array or Object
+	//	|	// returns "File 'foo.html' is not found in directory '/temp'."
+	//	|	// by providing substitution data in an Array
+	//	|	dojo.string.substitute(
+	//	|		"File '${0}' is not found in directory '${1}'.",
+	//	|		["foo.html","/temp"]
+	//	|	);
+	//	|
+	//	|	// also returns "File 'foo.html' is not found in directory '/temp'."
+	//	|	// but provides substitution data in an Object structure.  Dotted
+	//	|	// notation may be used to traverse the structure.
+	//	|	dojo.string.substitute(
+	//	|		"File '${name}' is not found in directory '${info.dir}'.",
+	//	|		{ name: "foo.html", info: { dir: "/temp" } }
+	//	|	);
+	//	example:
+	//		Use a transform function to modify the values:
+	//	|	// returns "file 'foo.html' is not found in directory '/temp'."
+	//	|	dojo.string.substitute(
+	//	|		"${0} is not found in ${1}.",
+	//	|		["foo.html","/temp"],
+	//	|		function(str){
+	//	|			// try to figure out the type
+	//	|			var prefix = (str.charAt(0) == "/") ? "directory": "file";
+	//	|			return prefix + " '" + str + "'";
+	//	|		}
+	//	|	);
+	//	example:
+	//		Use a formatter
+	//	|	// returns "thinger -- howdy"
+	//	|	dojo.string.substitute(
+	//	|		"${0:postfix}", ["thinger"], null, {
+	//	|			postfix: function(value, key){
+	//	|				return value + " -- howdy";
+	//	|			}
+	//	|		}
+	//	|	);
+
+	thisObject = thisObject || dojo.global;
+	transform = transform ? 
+		dojo.hitch(thisObject, transform) : function(v){ return v; };
+
+	return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
+		function(match, key, format){
+			var value = dojo.getObject(key, false, map);
+			if(format){
+				value = dojo.getObject(format, false, thisObject).call(thisObject, value, key);
+			}
+			return transform(value, key).toString();
+		}); // String
+};
+
+/*=====
+dojo.string.trim = function(str){
+	//	summary:
+	//		Trims whitespace from both sides of the string
+	//	str: String
+	//		String to be trimmed
+	//	returns: String
+	//		Returns the trimmed string
+	//	description:
+	//		This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript).
+	//		The short yet performant version of this function is dojo.trim(),
+	//		which is part of Dojo base.  Uses String.prototype.trim instead, if available.
+	return "";	// String
+}
+=====*/
+
+dojo.string.trim = String.prototype.trim ?
+	dojo.trim : // aliasing to the native function
+	function(str){
+		str = str.replace(/^\s+/, '');
+		for(var i = str.length - 1; i >= 0; i--){
+			if(/\S/.test(str.charAt(i))){
+				str = str.substring(0, i + 1);
+				break;
+			}
+		}
+		return str;
+	};
+
+}
+
+if(!dojo._hasResource["dojox.charting.axis2d.Invisible"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.Invisible"] = true;
+dojo.provide("dojox.charting.axis2d.Invisible");
+
+
+
+
+
+
+
+
+
+
+(function(){
+	var dc = dojox.charting,
+		df = dojox.lang.functional,
+		du = dojox.lang.utils,
+		g = dojox.gfx,
+		lin = dc.scaler.linear,
+		merge = du.merge,
+		labelGap = 4,			// in pixels
+		centerAnchorLimit = 45;	// in degrees
+
+	dojo.declare("dojox.charting.axis2d.Invisible", dojox.charting.axis2d.Base, {
+		//	summary:
+		//		The default axis object used in dojox.charting.  See dojox.charting.Chart2D.addAxis for details.
+		//
+		//	defaultParams: Object
+		//		The default parameters used to define any axis.
+		//	optionalParams: Object
+		//		Any optional parameters needed to define an axis.
+
+		/*
+		//	TODO: the documentation tools need these to be pre-defined in order to pick them up
+		//	correctly, but the code here is partially predicated on whether or not the properties
+		//	actually exist.  For now, we will leave these undocumented but in the code for later. -- TRT
+
+		//	opt: Object
+		//		The actual options used to define this axis, created at initialization.
+		//	scalar: Object
+		//		The calculated helper object to tell charts how to draw an axis and any data.
+		//	ticks: Object
+		//		The calculated tick object that helps a chart draw the scaling on an axis.
+		//	dirty: Boolean
+		//		The state of the axis (whether it needs to be redrawn or not)
+		//	scale: Number
+		//		The current scale of the axis.
+		//	offset: Number
+		//		The current offset of the axis.
+
+		opt: null,
+		scalar: null,
+		ticks: null,
+		dirty: true,
+		scale: 1,
+		offset: 0,
+		*/
+		defaultParams: {
+			vertical:    false,		// true for vertical axis
+			fixUpper:    "none",	// align the upper on ticks: "major", "minor", "micro", "none"
+			fixLower:    "none",	// align the lower on ticks: "major", "minor", "micro", "none"
+			natural:     false,		// all tick marks should be made on natural numbers
+			leftBottom:  true,		// position of the axis, used with "vertical"
+			includeZero: false,		// 0 should be included
+			fixed:       true,		// all labels are fixed numbers
+			majorLabels: true,		// draw major labels
+			minorTicks:  true,		// draw minor ticks
+			minorLabels: true,		// draw minor labels
+			microTicks:  false,		// draw micro ticks
+			rotation:    0			// label rotation angle in degrees
+		},
+		optionalParams: {
+			min:			0,	// minimal value on this axis
+			max:			1,	// maximal value on this axis
+			from:			0,	// visible from this value
+			to:				1,	// visible to this value
+			majorTickStep:	4,	// major tick step
+			minorTickStep:	2,	// minor tick step
+			microTickStep:	1,	// micro tick step
+			labels:			[],	// array of labels for major ticks
+								// with corresponding numeric values
+								// ordered by values
+			labelFunc:		null, // function to compute label values
+			maxLabelSize:	0	// size in px. For use with labelFunc
+
+			// TODO: add support for minRange!
+			// minRange:		1,	// smallest distance from min allowed on the axis
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		The constructor for an axis.
+			//	chart: dojox.charting.Chart2D
+			//		The chart the axis belongs to.
+			//	kwArgs: dojox.charting.axis2d.__AxisCtorArgs?
+			//		Any optional keyword arguments to be used to define this axis.
+			this.opt = dojo.delegate(this.defaultParams, kwArgs);
+			// du.updateWithObject(this.opt, kwArgs);
+			du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+		},
+		dependOnData: function(){
+			//	summary:
+			//		Find out whether or not the axis options depend on the data in the axis.
+			return !("min" in this.opt) || !("max" in this.opt);	//	Boolean
+		},
+		clear: function(){
+			//	summary:
+			//		Clear out all calculated properties on this axis;
+			//	returns: dojox.charting.axis2d.Default
+			//		The reference to the axis for functional chaining.
+			delete this.scaler;
+			delete this.ticks;
+			this.dirty = true;
+			return this;	//	dojox.charting.axis2d.Default
+		},
+		initialized: function(){
+			//	summary:
+			//		Finds out if this axis has been initialized or not.
+			//	returns: Boolean
+			//		Whether a scaler has been calculated and if the axis is not dirty.
+			return "scaler" in this && !(this.dirty && this.dependOnData());
+		},
+		setWindow: function(scale, offset){
+			//	summary:
+			//		Set the drawing "window" for the axis.
+			//	scale: Number
+			//		The new scale for the axis.
+			//	offset: Number
+			//		The new offset for the axis.
+			//	returns: dojox.charting.axis2d.Default
+			//		The reference to the axis for functional chaining.
+			this.scale  = scale;
+			this.offset = offset;
+			return this.clear();	//	dojox.charting.axis2d.Default
+		},
+		getWindowScale: function(){
+			//	summary:
+			//		Get the current windowing scale of the axis.
+			return "scale" in this ? this.scale : 1;	//	Number
+		},
+		getWindowOffset: function(){
+			//	summary:
+			//		Get the current windowing offset for the axis.
+			return "offset" in this ? this.offset : 0;	//	Number
+		},
+		_groupLabelWidth: function(labels, font){
+			if(!labels.length){
+				return 0;
+			}
+			if(dojo.isObject(labels[0])){
+				labels = df.map(labels, function(label){ return label.text; });
+			}
+			var s = labels.join("<br>");
+			return dojox.gfx._base._getTextBox(s, {font: font}).w || 0;
+		},
+		calculate: function(min, max, span, labels){
+			//	summary:
+			//		Perform all calculations needed to render this axis.
+			//	min: Number
+			//		The smallest value represented on this axis.
+			//	max: Number
+			//		The largest value represented on this axis.
+			//	span: Number
+			//		The span in pixels over which axis calculations are made.
+			//	labels: String[]
+			//		Optional list of labels.
+			//	returns: dojox.charting.axis2d.Default
+			//		The reference to the axis for functional chaining.
+			if(this.initialized()){
+				return this;
+			}
+			var o = this.opt;
+			this.labels = "labels" in o  ? o.labels : labels;
+			this.scaler = lin.buildScaler(min, max, span, o);
+			var tsb = this.scaler.bounds;
+			if("scale" in this){
+				// calculate new range
+				o.from = tsb.lower + this.offset;
+				o.to   = (tsb.upper - tsb.lower) / this.scale + o.from;
+				// make sure that bounds are correct
+				if( !isFinite(o.from) ||
+					isNaN(o.from) ||
+					!isFinite(o.to) ||
+					isNaN(o.to) ||
+					o.to - o.from >= tsb.upper - tsb.lower
+				){
+					// any error --- remove from/to bounds
+					delete o.from;
+					delete o.to;
+					delete this.scale;
+					delete this.offset;
+				}else{
+					// shift the window, if we are out of bounds
+					if(o.from < tsb.lower){
+						o.to += tsb.lower - o.from;
+						o.from = tsb.lower;
+					}else if(o.to > tsb.upper){
+						o.from += tsb.upper - o.to;
+						o.to = tsb.upper;
+					}
+					// update the offset
+					this.offset = o.from - tsb.lower;
+				}
+				// re-calculate the scaler
+				this.scaler = lin.buildScaler(min, max, span, o);
+				tsb = this.scaler.bounds;
+				// cleanup
+				if(this.scale == 1 && this.offset == 0){
+					delete this.scale;
+					delete this.offset;
+				}
+			}
+
+			var ta = this.chart.theme.axis, labelWidth = 0, rotation = o.rotation % 360,
+				// TODO: we use one font --- of major tick, we need to use major and minor fonts
+				taFont = o.font || (ta.majorTick && ta.majorTick.font) || (ta.tick && ta.tick.font),
+				size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0,
+				cosr = Math.abs(Math.cos(rotation * Math.PI / 180)),
+				sinr = Math.abs(Math.sin(rotation * Math.PI / 180));
+
+			if(rotation < 0){
+				rotation += 360;
+			}
+
+			if(size){
+				if(this.vertical ? rotation != 0 && rotation != 180 : rotation != 90 && rotation != 270){
+					// we need width of all labels
+					if(o.maxLabelSize){
+						labelWidth = o.maxLabelSize;
+					}else if(this.labels){
+						labelWidth = this._groupLabelWidth(this.labels, taFont);
+					}else{
+						var labelLength = Math.ceil(
+								Math.log(
+									Math.max(
+										Math.abs(tsb.from),
+										Math.abs(tsb.to)
+									)
+								) / Math.LN10
+							),
+							t = [];
+						if(tsb.from < 0 || tsb.to < 0){
+							t.push("-");
+						}
+						t.push(dojo.string.rep("9", labelLength));
+						var precision = Math.floor(
+							Math.log( tsb.to - tsb.from ) / Math.LN10
+						);
+						if(precision > 0){
+							t.push(".");
+							t.push(dojo.string.rep("9", precision));
+						}
+						labelWidth = dojox.gfx._base._getTextBox(
+							t.join(""),
+							{ font: taFont }
+						).w;
+					}
+				}else{
+					labelWidth = size;
+				}
+				switch(rotation){
+					case 0:
+					case 90:
+					case 180:
+					case 270:
+						// trivial cases: use labelWidth
+						break;
+					default:
+						// rotated labels
+						var gap1 = Math.sqrt(labelWidth * labelWidth + size * size),									// short labels
+							gap2 = this.vertical ? size * cosr + labelWidth * sinr : labelWidth * cosr + size * sinr;	// slanted labels
+						labelWidth = Math.min(gap1, gap2);
+						break;
+				}
+			}
+
+			this.scaler.minMinorStep = labelWidth + labelGap;
+			this.ticks = lin.buildTicks(this.scaler, o);
+			return this;	//	dojox.charting.axis2d.Default
+		},
+		getScaler: function(){
+			//	summary:
+			//		Get the pre-calculated scaler object.
+			return this.scaler;	//	Object
+		},
+		getTicks: function(){
+			//	summary:
+			//		Get the pre-calculated ticks object.
+			return this.ticks;	//	Object
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.axis2d.Default"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.axis2d.Default"] = true;
+dojo.provide("dojox.charting.axis2d.Default");
+
+
+
+
+
+
+
+
+
+
+
+
+/*=====
+	dojox.charting.axis2d.__AxisCtorArgs = function(
+		vertical, fixUpper, fixLower, natural, leftBottom,
+		includeZero, fixed, majorLabels, minorTicks, minorLabels, microTicks, htmlLabels,
+		min, max, from, to, majorTickStep, minorTickStep, microTickStep,
+		labels, labelFunc, maxLabelSize,
+		stroke, majorTick, minorTick, microTick, tick,
+		font, fontColor
+	){
+	//	summary:
+	//		Optional arguments used in the definition of an axis.
+	//
+	//	vertical: Boolean?
+	//		A flag that says whether an axis is vertical (i.e. y axis) or horizontal. Default is false (horizontal).
+	//	fixUpper: String?
+	//		Align the greatest value on the axis with the specified tick level. Options are "major", "minor", "micro", or "none".  Defaults to "none".
+	//	fixLower: String?
+	//		Align the smallest value on the axis with the specified tick level. Options are "major", "minor", "micro", or "none".  Defaults to "none".
+	//	natural: Boolean?
+	//		Ensure tick marks are made on "natural" numbers. Defaults to false.
+	//	leftBottom: Boolean?
+	//		The position of a vertical axis; if true, will be placed against the left-bottom corner of the chart.  Defaults to true.
+	//	includeZero: Boolean?
+	//		Include 0 on the axis rendering.  Default is false.
+	//	fixed: Boolean?
+	//		Force all axis labels to be fixed numbers.  Default is true.
+	//	majorLabels: Boolean?
+	//		Flag to draw all labels at major ticks. Default is true.
+	//	minorTicks: Boolean?
+	//		Flag to draw minor ticks on an axis.  Default is true.
+	//	minorLabels: Boolean?
+	//		Flag to draw labels on minor ticks. Default is true.
+	//	microTicks: Boolean?
+	//		Flag to draw micro ticks on an axis. Default is false.
+	//	htmlLabels: Boolean?
+	//		Flag to use HTML (as opposed to the native vector graphics engine) to draw labels. Default is true.
+	//	min: Number?
+	//		The smallest value on an axis. Default is 0.
+	//	max: Number?
+	//		The largest value on an axis. Default is 1.
+	//	from: Number?
+	//		Force the chart to render data visible from this value. Default is 0.
+	//	to: Number?
+	//		Force the chart to render data visible to this value. Default is 1.
+	//	majorTickStep: Number?
+	//		The amount to skip before a major tick is drawn.  Default is 4.
+	//	minorTickStep: Number?
+	//		The amount to skip before a minor tick is drawn. Default is 2.
+	//	microTickStep: Number?
+	//		The amount to skip before a micro tick is drawn. Default is 1.
+	//	labels: Object[]?
+	//		An array of labels for major ticks, with corresponding numeric values, ordered by value.
+	//	labelFunc: Function?
+	//		An optional function used to compute label values.
+	//	maxLabelSize: Number?
+	//		The maximum size, in pixels, for a label.  To be used with the optional label function.
+	//	stroke: dojox.gfx.Stroke?
+	//		An optional stroke to be used for drawing an axis.
+	//	majorTick: Object?
+	//		An object containing a dojox.gfx.Stroke, and a length (number) for a major tick.
+	//	minorTick: Object?
+	//		An object containing a dojox.gfx.Stroke, and a length (number) for a minor tick.
+	//	microTick: Object?
+	//		An object containing a dojox.gfx.Stroke, and a length (number) for a micro tick.
+	//	tick: Object?
+	//		An object containing a dojox.gfx.Stroke, and a length (number) for a tick.
+	//	font: String?
+	//		An optional font definition (as used in the CSS font property) for labels.
+	//	fontColor: String|dojo.Color?
+	//		An optional color to be used in drawing labels.
+
+	this.vertical = vertical;
+	this.fixUpper = fixUpper;
+	this.fixLower = fixLower;
+	this.natural = natural;
+	this.leftBottom = leftBottom;
+	this.includeZero = includeZero;
+	this.fixed = fixed;
+	this.majorLabels = majorLabels;
+	this.minorTicks = minorTicks;
+	this.minorLabels = minorLabels;
+	this.microTicks = microTicks;
+	this.htmlLabels = htmlLabels;
+	this.min = min;
+	this.max = max;
+	this.from = from;
+	this.to = to;
+	this.majorTickStep = majorTickStep;
+	this.minorTickStep = minorTickStep;
+	this.microTickStep = microTickStep;
+	this.labels = labels;
+	this.labelFunc = labelFunc;
+	this.maxLabelSize = maxLabelSize;
+	this.stroke = stroke;
+	this.majorTick = majorTick;
+	this.minorTick = minorTick;
+	this.microTick = microTick;
+	this.tick = tick;
+	this.font = font;
+	this.fontColor = fontColor;
+}
+=====*/
+(function(){
+	var dc = dojox.charting,
+		du = dojox.lang.utils,
+		g = dojox.gfx,
+		lin = dc.scaler.linear,
+		labelGap = 4,			// in pixels
+		centerAnchorLimit = 45;	// in degrees
+
+	dojo.declare("dojox.charting.axis2d.Default", dojox.charting.axis2d.Invisible, {
+		//	summary:
+		//		The default axis object used in dojox.charting.  See dojox.charting.Chart2D.addAxis for details.
+		//
+		//	defaultParams: Object
+		//		The default parameters used to define any axis.
+		//	optionalParams: Object
+		//		Any optional parameters needed to define an axis.
+
+		/*
+		//	TODO: the documentation tools need these to be pre-defined in order to pick them up
+		//	correctly, but the code here is partially predicated on whether or not the properties
+		//	actually exist.  For now, we will leave these undocumented but in the code for later. -- TRT
+
+		//	opt: Object
+		//		The actual options used to define this axis, created at initialization.
+		//	scalar: Object
+		//		The calculated helper object to tell charts how to draw an axis and any data.
+		//	ticks: Object
+		//		The calculated tick object that helps a chart draw the scaling on an axis.
+		//	dirty: Boolean
+		//		The state of the axis (whether it needs to be redrawn or not)
+		//	scale: Number
+		//		The current scale of the axis.
+		//	offset: Number
+		//		The current offset of the axis.
+
+		opt: null,
+		scalar: null,
+		ticks: null,
+		dirty: true,
+		scale: 1,
+		offset: 0,
+		*/
+		defaultParams: {
+			vertical:    false,		// true for vertical axis
+			fixUpper:    "none",	// align the upper on ticks: "major", "minor", "micro", "none"
+			fixLower:    "none",	// align the lower on ticks: "major", "minor", "micro", "none"
+			natural:     false,		// all tick marks should be made on natural numbers
+			leftBottom:  true,		// position of the axis, used with "vertical"
+			includeZero: false,		// 0 should be included
+			fixed:       true,		// all labels are fixed numbers
+			majorLabels: true,		// draw major labels
+			minorTicks:  true,		// draw minor ticks
+			minorLabels: true,		// draw minor labels
+			microTicks:  false,		// draw micro ticks
+			rotation:    0,			// label rotation angle in degrees
+			htmlLabels:  true		// use HTML to draw labels
+		},
+		optionalParams: {
+			min:			0,	// minimal value on this axis
+			max:			1,	// maximal value on this axis
+			from:			0,	// visible from this value
+			to:				1,	// visible to this value
+			majorTickStep:	4,	// major tick step
+			minorTickStep:	2,	// minor tick step
+			microTickStep:	1,	// micro tick step
+			labels:			[],	// array of labels for major ticks
+								// with corresponding numeric values
+								// ordered by values
+			labelFunc:		null, // function to compute label values
+			maxLabelSize:	0,	// size in px. For use with labelFunc
+
+			// TODO: add support for minRange!
+			// minRange:		1,	// smallest distance from min allowed on the axis
+
+			// theme components
+			stroke:			{},	// stroke for an axis
+			majorTick:		{},	// stroke + length for a tick
+			minorTick:		{},	// stroke + length for a tick
+			microTick:		{},	// stroke + length for a tick
+			tick:           {},	// stroke + length for a tick
+			font:			"",	// font for labels
+			fontColor:		""	// color for labels as a string
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		The constructor for an axis.
+			//	chart: dojox.charting.Chart2D
+			//		The chart the axis belongs to.
+			//	kwArgs: dojox.charting.axis2d.__AxisCtorArgs?
+			//		Any optional keyword arguments to be used to define this axis.
+			this.opt = dojo.delegate(this.defaultParams, kwArgs);
+			// du.updateWithObject(this.opt, kwArgs);
+			du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+		},
+		getOffsets: function(){
+			//	summary:
+			//		Get the physical offset values for this axis (used in drawing data series).
+			//	returns: Object
+			//		The calculated offsets in the form of { l, r, t, b } (left, right, top, bottom).
+			var s = this.scaler, offsets = { l: 0, r: 0, t: 0, b: 0 };
+			if(!s){
+				return offsets;
+			}
+			var o = this.opt, labelWidth = 0, a, b, c, d,
+				gl = dc.scaler.common.getNumericLabel,
+				offset = 0, ma = s.major, mi = s.minor,
+				ta = this.chart.theme.axis,
+				// TODO: we use one font --- of major tick, we need to use major and minor fonts
+				taFont = o.font || (ta.majorTick && ta.majorTick.font) || (ta.tick && ta.tick.font),
+				taMajorTick = this.chart.theme.getTick("major", o),
+				taMinorTick = this.chart.theme.getTick("minor", o),
+				size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0,
+				rotation = o.rotation % 360, leftBottom = o.leftBottom,
+				cosr = Math.abs(Math.cos(rotation * Math.PI / 180)),
+				sinr = Math.abs(Math.sin(rotation * Math.PI / 180));
+			if(rotation < 0){
+				rotation += 360;
+			}
+
+			if(size){
+				// we need width of all labels
+				if(o.maxLabelSize){
+					labelWidth = o.maxLabelSize;
+				}else if(this.labels){
+					labelWidth = this._groupLabelWidth(this.labels, taFont);
+				}else{
+					labelWidth = this._groupLabelWidth([
+						gl(ma.start, ma.prec, o),
+						gl(ma.start + ma.count * ma.tick, ma.prec, o),
+						gl(mi.start, mi.prec, o),
+						gl(mi.start + mi.count * mi.tick, mi.prec, o)
+					], taFont);
+				}
+				if(this.vertical){
+					var side = leftBottom ? "l" : "r";
+					switch(rotation){
+						case 0:
+						case 180:
+							offsets[side] = labelWidth;
+							offsets.t = offsets.b = size / 2;
+							break;
+						case 90:
+						case 270:
+							offsets[side] = size;
+							offsets.t = offsets.b = labelWidth / 2;
+							break;
+						default:
+							if(rotation <= centerAnchorLimit || (180 < rotation && rotation <= (180 + centerAnchorLimit))){
+								offsets[side] = size * sinr / 2 + labelWidth * cosr;
+								offsets[leftBottom ? "t" : "b"] = size * cosr / 2 + labelWidth * sinr;
+								offsets[leftBottom ? "b" : "t"] = size * cosr / 2;
+							}else if(rotation > (360 - centerAnchorLimit) || (180 > rotation && rotation > (180 - centerAnchorLimit))){
+								offsets[side] = size * sinr / 2 + labelWidth * cosr;
+								offsets[leftBottom ? "b" : "t"] = size * cosr / 2 + labelWidth * sinr;
+								offsets[leftBottom ? "t" : "b"] = size * cosr / 2;
+							}else if(rotation < 90 || (180 < rotation && rotation < 270)){
+								offsets[side] = size * sinr + labelWidth * cosr;
+								offsets[leftBottom ? "t" : "b"] = size * cosr + labelWidth * sinr;
+							}else{
+								offsets[side] = size * sinr + labelWidth * cosr;
+								offsets[leftBottom ? "b" : "t"] = size * cosr + labelWidth * sinr;
+							}
+							break;
+					}
+					offsets[side] += labelGap + Math.max(taMajorTick.length, taMinorTick.length);
+				}else{
+					var side = leftBottom ? "b" : "t";
+					switch(rotation){
+						case 0:
+						case 180:
+							offsets[side] = size;
+							offsets.l = offsets.r = labelWidth / 2;
+							break;
+						case 90:
+						case 270:
+							offsets[side] = labelWidth;
+							offsets.l = offsets.r = size / 2;
+							break;
+						default:
+							if((90 - centerAnchorLimit) <= rotation && rotation <= 90 || (270 - centerAnchorLimit) <= rotation && rotation <= 270){
+								offsets[side] = size * sinr / 2 + labelWidth * cosr;
+								offsets[leftBottom ? "r" : "l"] = size * cosr / 2 + labelWidth * sinr;
+								offsets[leftBottom ? "l" : "r"] = size * cosr / 2;
+							}else if(90 <= rotation && rotation <= (90 + centerAnchorLimit) || 270 <= rotation && rotation <= (270 + centerAnchorLimit)){
+								offsets[side] = size * sinr / 2 + labelWidth * cosr;
+								offsets[leftBottom ? "l" : "r"] = size * cosr / 2 + labelWidth * sinr;
+								offsets[leftBottom ? "r" : "l"] = size * cosr / 2;
+							}else if(rotation < centerAnchorLimit || (180 < rotation && rotation < (180 - centerAnchorLimit))){
+								offsets[side] = size * sinr + labelWidth * cosr;
+								offsets[leftBottom ? "r" : "l"] = size * cosr + labelWidth * sinr;
+							}else{
+								offsets[side] = size * sinr + labelWidth * cosr;
+								offsets[leftBottom ? "l" : "r"] = size * cosr + labelWidth * sinr;
+							}
+							break;
+					}
+					offsets[side] += labelGap + Math.max(taMajorTick.length, taMinorTick.length);
+				}
+			}
+			if(labelWidth){
+				this._cachedLabelWidth = labelWidth;
+			}
+			return offsets;	//	Object
+		},
+		render: function(dim, offsets){
+			//	summary:
+			//		Render/draw the axis.
+			//	dim: Object
+			//		An object of the form { width, height}.
+			//	offsets: Object
+			//		An object of the form { l, r, t, b }.
+			//	returns: dojox.charting.axis2d.Default
+			//		The reference to the axis for functional chaining.
+			if(!this.dirty){
+				return this;	//	dojox.charting.axis2d.Default
+			}
+			// prepare variable
+			var o = this.opt, ta = this.chart.theme.axis, leftBottom = o.leftBottom, rotation = o.rotation % 360,
+				start, stop, axisVector, tickVector, anchorOffset, labelOffset, labelAlign,
+
+				// TODO: we use one font --- of major tick, we need to use major and minor fonts
+				taFont = o.font || (ta.majorTick && ta.majorTick.font) || (ta.tick && ta.tick.font),
+				// TODO: we use one font color --- we need to use different colors
+				taFontColor = o.fontColor || (ta.majorTick && ta.majorTick.fontColor) || (ta.tick && ta.tick.fontColor) || "black",
+				taMajorTick = this.chart.theme.getTick("major", o),
+				taMinorTick = this.chart.theme.getTick("minor", o),
+				taMicroTick = this.chart.theme.getTick("micro", o),
+
+				tickSize = Math.max(taMajorTick.length, taMinorTick.length, taMicroTick.length),
+				taStroke = "stroke" in o ? o.stroke : ta.stroke,
+				size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0;
+			if(rotation < 0){
+				rotation += 360;
+			}
+			if(this.vertical){
+				start = {y: dim.height - offsets.b};
+				stop  = {y: offsets.t};
+				axisVector = {x: 0, y: -1};
+				labelOffset = {x: 0, y: 0};
+				tickVector = {x: 1, y: 0};
+				anchorOffset = {x: labelGap, y: 0};
+				switch(rotation){
+					case 0:
+						labelAlign = "end";
+						labelOffset.y = size * 0.4;
+						break;
+					case 90:
+						labelAlign = "middle";
+						labelOffset.x = -size;
+						break;
+					case 180:
+						labelAlign = "start";
+						labelOffset.y = -size * 0.4;
+						break;
+					case 270:
+						labelAlign = "middle";
+						break;
+					default:
+						if(rotation < centerAnchorLimit){
+							labelAlign = "end";
+							labelOffset.y = size * 0.4;
+						}else if(rotation < 90){
+							labelAlign = "end";
+							labelOffset.y = size * 0.4;
+						}else if(rotation < (180 - centerAnchorLimit)){
+							labelAlign = "start";
+						}else if(rotation < (180 + centerAnchorLimit)){
+							labelAlign = "start";
+							labelOffset.y = -size * 0.4;
+						}else if(rotation < 270){
+							labelAlign = "start";
+							labelOffset.x = leftBottom ? 0 : size * 0.4;
+						}else if(rotation < (360 - centerAnchorLimit)){
+							labelAlign = "end";
+							labelOffset.x = leftBottom ? 0 : size * 0.4;
+						}else{
+							labelAlign = "end";
+							labelOffset.y = size * 0.4;
+						}
+				}
+				if(leftBottom){
+					start.x = stop.x = offsets.l;
+					tickVector.x = -1;
+					anchorOffset.x = -anchorOffset.x;
+				}else{
+					start.x = stop.x = dim.width - offsets.r;
+					switch(labelAlign){
+						case "start":
+							labelAlign = "end";
+							break;
+						case "end":
+							labelAlign = "start";
+							break;
+						case "middle":
+							labelOffset.x += size;
+							break;
+					}
+				}
+			}else{
+				start = {x: offsets.l};
+				stop  = {x: dim.width - offsets.r};
+				axisVector = {x: 1, y: 0};
+				labelOffset = {x: 0, y: 0};
+				tickVector = {x: 0, y: 1};
+				anchorOffset = {x: 0, y: labelGap};
+				switch(rotation){
+					case 0:
+						labelAlign = "middle";
+						labelOffset.y = size;
+						break;
+					case 90:
+						labelAlign = "start";
+						labelOffset.x = -size * 0.4;
+						break;
+					case 180:
+						labelAlign = "middle";
+						break;
+					case 270:
+						labelAlign = "end";
+						labelOffset.x = size * 0.4;
+						break;
+					default:
+						if(rotation < (90 - centerAnchorLimit)){
+							labelAlign = "start";
+							labelOffset.y = leftBottom ? size : 0;
+						}else if(rotation < (90 + centerAnchorLimit)){
+							labelAlign = "start";
+							labelOffset.x = -size * 0.4;
+						}else if(rotation < 180){
+							labelAlign = "start";
+							labelOffset.y = leftBottom ? 0 : -size;
+						}else if(rotation < (270 - centerAnchorLimit)){
+							labelAlign = "end";
+							labelOffset.y = leftBottom ? 0 : -size;
+						}else if(rotation < (270 + centerAnchorLimit)){
+							labelAlign = "end";
+							labelOffset.y = leftBottom ? size * 0.4 : 0;
+						}else{
+							labelAlign = "end";
+							labelOffset.y = leftBottom ? size : 0;
+						}
+				}
+				if(leftBottom){
+					start.y = stop.y = dim.height - offsets.b;
+				}else{
+					start.y = stop.y = offsets.t;
+					tickVector.y = -1;
+					anchorOffset.y = -anchorOffset.y;
+					switch(labelAlign){
+						case "start":
+							labelAlign = "end";
+							break;
+						case "end":
+							labelAlign = "start";
+							break;
+						case "middle":
+							labelOffset.y -= size;
+							break;
+					}
+				}
+			}
+
+			// render shapes
+
+			this.cleanGroup();
+
+			try{
+				var s = this.group,
+					c = this.scaler,
+					t = this.ticks,
+					canLabel,
+					f = lin.getTransformerFromModel(this.scaler),
+					forceHtmlLabels = (dojox.gfx.renderer == "canvas"),
+					labelType = forceHtmlLabels || !rotation && this.opt.htmlLabels && !dojo.isIE && !dojo.isOpera ? "html" : "gfx",
+					dx = tickVector.x * taMajorTick.length,
+					dy = tickVector.y * taMajorTick.length;
+
+				s.createLine({
+					x1: start.x,
+					y1: start.y,
+					x2: stop.x,
+					y2: stop.y
+				}).setStroke(taStroke);
+
+				dojo.forEach(t.major, function(tick){
+					var offset = f(tick.value), elem,
+						x = start.x + axisVector.x * offset,
+						y = start.y + axisVector.y * offset;
+						s.createLine({
+							x1: x, y1: y,
+							x2: x + dx,
+							y2: y + dy
+						}).setStroke(taMajorTick);
+						if(tick.label){
+							elem = dc.axis2d.common.createText[labelType](
+								this.chart,
+								s,
+								x + dx + anchorOffset.x + (rotation ? 0 : labelOffset.x),
+								y + dy + anchorOffset.y + (rotation ? 0 : labelOffset.y),
+								labelAlign,
+								tick.label,
+								taFont,
+								taFontColor
+								//this._cachedLabelWidth
+							);
+							if(labelType == "html"){
+								this.htmlElements.push(elem);
+							}else if(rotation){
+								elem.setTransform([
+									{dx: labelOffset.x, dy: labelOffset.y},
+									g.matrix.rotategAt(
+										rotation,
+										x + dx + anchorOffset.x,
+										y + dy + anchorOffset.y
+									)
+								]);
+							}
+						}
+				}, this);
+
+				dx = tickVector.x * taMinorTick.length;
+				dy = tickVector.y * taMinorTick.length;
+				canLabel = c.minMinorStep <= c.minor.tick * c.bounds.scale;
+				dojo.forEach(t.minor, function(tick){
+					var offset = f(tick.value), elem,
+						x = start.x + axisVector.x * offset,
+						y = start.y + axisVector.y * offset;
+						s.createLine({
+							x1: x, y1: y,
+							x2: x + dx,
+							y2: y + dy
+						}).setStroke(taMinorTick);
+						if(canLabel && tick.label){
+							elem = dc.axis2d.common.createText[labelType](
+								this.chart,
+								s,
+								x + dx + anchorOffset.x + (rotation ? 0 : labelOffset.x),
+								y + dy + anchorOffset.y + (rotation ? 0 : labelOffset.y),
+								labelAlign,
+								tick.label,
+								taFont,
+								taFontColor
+								//this._cachedLabelWidth
+							);
+							if(labelType == "html"){
+								this.htmlElements.push(elem);
+							}else if(rotation){
+								elem.setTransform([
+									{dx: labelOffset.x, dy: labelOffset.y},
+									g.matrix.rotategAt(
+										rotation,
+										x + dx + anchorOffset.x,
+										y + dy + anchorOffset.y
+									)
+								]);
+							}
+						}
+				}, this);
+
+				dx = tickVector.x * taMicroTick.length;
+				dy = tickVector.y * taMicroTick.length;
+				dojo.forEach(t.micro, function(tick){
+					var offset = f(tick.value), elem,
+						x = start.x + axisVector.x * offset,
+						y = start.y + axisVector.y * offset;
+						s.createLine({
+							x1: x, y1: y,
+							x2: x + dx,
+							y2: y + dy
+						}).setStroke(taMicroTick);
+				}, this);
+			}catch(e){
+				// squelch
+			}
+
+			this.dirty = false;
+			return this;	//	dojox.charting.axis2d.Default
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.common"] = true;
+dojo.provide("dojox.charting.plot2d.common");
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, dc = dojox.charting.plot2d.common;
+
+	dojo.mixin(dojox.charting.plot2d.common, {
+		makeStroke: function(stroke){
+			if(!stroke){ return stroke; }
+			if(typeof stroke == "string" || stroke instanceof dojo.Color){
+				stroke = {color: stroke};
+			}
+			return dojox.gfx.makeParameters(dojox.gfx.defaultStroke, stroke);
+		},
+		augmentColor: function(target, color){
+			var t = new dojo.Color(target),
+				c = new dojo.Color(color);
+			c.a = t.a;
+			return c;
+		},
+		augmentStroke: function(stroke, color){
+			var s = dc.makeStroke(stroke);
+			if(s){
+				s.color = dc.augmentColor(s.color, color);
+			}
+			return s;
+		},
+		augmentFill: function(fill, color){
+			var fc, c = new dojo.Color(color);
+			if(typeof fill == "string" || fill instanceof dojo.Color){
+				return dc.augmentColor(fill, color);
+			}
+			return fill;
+		},
+
+		defaultStats: {
+			hmin: Number.POSITIVE_INFINITY, hmax: Number.NEGATIVE_INFINITY,
+			vmin: Number.POSITIVE_INFINITY, vmax: Number.NEGATIVE_INFINITY
+		},
+
+		collectSimpleStats: function(series){
+			var stats = dojo.delegate(dc.defaultStats);
+			for(var i = 0; i < series.length; ++i){
+				var run = series[i];
+				for(var j = 0; j < run.data.length; j++){
+					if(run.data[j] !== null){
+						if(typeof run.data[j] == "number"){
+							// 1D case
+							var old_vmin = stats.vmin, old_vmax = stats.vmax;
+							if(!("ymin" in run) || !("ymax" in run)){
+								dojo.forEach(run.data, function(val, i){
+									if(val !== null){
+										var x = i + 1, y = val;
+										if(isNaN(y)){ y = 0; }
+										stats.hmin = Math.min(stats.hmin, x);
+										stats.hmax = Math.max(stats.hmax, x);
+										stats.vmin = Math.min(stats.vmin, y);
+										stats.vmax = Math.max(stats.vmax, y);
+									}
+								});
+							}
+							if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+							if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+						}else{
+							// 2D case
+							var old_hmin = stats.hmin, old_hmax = stats.hmax,
+								old_vmin = stats.vmin, old_vmax = stats.vmax;
+							if(!("xmin" in run) || !("xmax" in run) || !("ymin" in run) || !("ymax" in run)){
+								dojo.forEach(run.data, function(val, i){
+									if(val !== null){
+										var x = "x" in val ? val.x : i + 1, y = val.y;
+										if(isNaN(x)){ x = 0; }
+										if(isNaN(y)){ y = 0; }
+										stats.hmin = Math.min(stats.hmin, x);
+										stats.hmax = Math.max(stats.hmax, x);
+										stats.vmin = Math.min(stats.vmin, y);
+										stats.vmax = Math.max(stats.vmax, y);
+									}
+								});
+							}
+							if("xmin" in run){ stats.hmin = Math.min(old_hmin, run.xmin); }
+							if("xmax" in run){ stats.hmax = Math.max(old_hmax, run.xmax); }
+							if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+							if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+						}
+
+						break;
+					}
+				}
+			}
+			return stats;
+		},
+
+		calculateBarSize: function(/* Number */ availableSize, /* Object */ opt, /* Number? */ clusterSize){
+			if(!clusterSize){
+				clusterSize = 1;
+			}
+			var gap = opt.gap, size = (availableSize - 2 * gap) / clusterSize;
+			if("minBarSize" in opt){
+				size = Math.max(size, opt.minBarSize);
+			}
+			if("maxBarSize" in opt){
+				size = Math.min(size, opt.maxBarSize);
+			}
+			size = Math.max(size, 1);
+			gap = (availableSize - size * clusterSize) / 2;
+			return {size: size, gap: gap};	// Object
+		},
+
+		collectStackedStats: function(series){
+			// collect statistics
+			var stats = dojo.clone(dc.defaultStats);
+			if(series.length){
+				// 1st pass: find the maximal length of runs
+				stats.hmin = Math.min(stats.hmin, 1);
+				stats.hmax = df.foldl(series, "seed, run -> Math.max(seed, run.data.length)", stats.hmax);
+				// 2nd pass: stack values
+				for(var i = 0; i < stats.hmax; ++i){
+					var v = series[0].data[i];
+					if(isNaN(v)){ v = 0; }
+					stats.vmin = Math.min(stats.vmin, v);
+					for(var j = 1; j < series.length; ++j){
+						var t = series[j].data[i];
+						if(isNaN(t)){ t = 0; }
+						v += t;
+					}
+					stats.vmax = Math.max(stats.vmax, v);
+				}
+			}
+			return stats;
+		},
+
+		curve: function(/* Number[] */a, /* Number|String */tension){
+			//	FIX for #7235, submitted by Enzo Michelangeli.
+			//	Emulates the smoothing algorithms used in a famous, unnamed spreadsheet
+			//		program ;)
+			var arr = a.slice(0);
+			if(tension == "x") {
+				arr[arr.length] = arr[0];   // add a last element equal to the first, closing the loop
+			}
+			var p=dojo.map(arr, function(item, i){
+				if(i==0){ return "M" + item.x + "," + item.y; }
+				if(!isNaN(tension)) { // use standard Dojo smoothing in tension is numeric
+					var dx=item.x-arr[i-1].x, dy=arr[i-1].y;
+					return "C"+(item.x-(tension-1)*(dx/tension))+","+dy+" "+(item.x-(dx/tension))+","+item.y+" "+item.x+","+item.y;
+				} else if(tension == "X" || tension == "x" || tension == "S") {
+					// use Excel "line smoothing" algorithm (http://xlrotor.com/resources/files.shtml)
+					var p0, p1 = arr[i-1], p2 = arr[i], p3;
+					var bz1x, bz1y, bz2x, bz2y;
+					var f = 1/6;
+					if(i==1) {
+						if(tension == "x") {
+							p0 = arr[arr.length-2];
+						} else { // "tension == X || tension == "S"
+							p0 = p1;
+						}
+						f = 1/3;
+					} else {
+						p0 = arr[i-2];
+					}
+					if(i==(arr.length-1)) {
+						if(tension == "x") {
+							p3 = arr[1];
+						} else { // "tension == X || tension == "S"
+							p3 = p2;
+						}
+						f = 1/3;
+					} else {
+						p3 = arr[i+1];
+					}
+					var p1p2 = Math.sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
+					var p0p2 = Math.sqrt((p2.x-p0.x)*(p2.x-p0.x)+(p2.y-p0.y)*(p2.y-p0.y));
+					var p1p3 = Math.sqrt((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y));
+
+					var p0p2f = p0p2 * f;
+					var p1p3f = p1p3 * f;
+
+					if(p0p2f > p1p2/2 && p1p3f > p1p2/2) {
+						p0p2f = p1p2/2;
+						p1p3f = p1p2/2;
+					} else if(p0p2f > p1p2/2) {
+						p0p2f = p1p2/2;
+						p1p3f = p1p2/2 * p1p3/p0p2;
+					} else if(p1p3f > p1p2/2) {
+						p1p3f = p1p2/2;
+						p0p2f = p1p2/2 * p0p2/p1p3;
+					}
+
+					if(tension == "S") {
+						if(p0 == p1) { p0p2f = 0; }
+						if(p2 == p3) { p1p3f = 0; }
+					}
+
+					bz1x = p1.x + p0p2f*(p2.x - p0.x)/p0p2;
+					bz1y = p1.y + p0p2f*(p2.y - p0.y)/p0p2;
+					bz2x = p2.x - p1p3f*(p3.x - p1.x)/p1p3;
+					bz2y = p2.y - p1p3f*(p3.y - p1.y)/p1p3;
+				}
+				return "C"+(bz1x+","+bz1y+" "+bz2x+","+bz2y+" "+p2.x+","+p2.y);
+			});
+			return p.join(" ");
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.scaler.primitive"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.scaler.primitive"] = true;
+dojo.provide("dojox.charting.scaler.primitive");
+
+dojox.charting.scaler.primitive = {
+	buildScaler: function(/*Number*/ min, /*Number*/ max, /*Number*/ span, /*Object*/ kwArgs){
+		if(min == max){
+			// artificially extend bounds
+			min -= 0.5;
+			max += 0.5;
+			// now the line will be centered
+		}
+		return {
+			bounds: {
+				lower: min,
+				upper: max,
+				from:  min,
+				to:    max,
+				scale: span / (max - min),
+				span:  span
+			},
+			scaler: dojox.charting.scaler.primitive
+		};
+	},
+	buildTicks: function(/*Object*/ scaler, /*Object*/ kwArgs){
+		return {major: [], minor: [], micro: []};	// Object
+	},
+	getTransformerFromModel: function(/*Object*/ scaler){
+		var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+		return function(x){ return (x - offset) * scale; };	// Function
+	},
+	getTransformerFromPlot: function(/*Object*/ scaler){
+		var offset = scaler.bounds.from, scale = scaler.bounds.scale;
+		return function(x){ return x / scale + offset; };	// Function
+	}
+};
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d._PlotEvents"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d._PlotEvents"] = true;
+dojo.provide("dojox.charting.plot2d._PlotEvents");
+
+dojo.declare("dojox.charting.plot2d._PlotEvents", null, {
+	constructor: function(){
+		this._shapeEvents = [];
+		this._eventSeries = {};
+	},
+	destroy: function(){
+		//	summary:
+		//		Destroy any internal elements and event handlers.
+		this.resetEvents();
+		this.inherited(arguments);
+	},
+	plotEvent: function(o){
+		//	summary:
+		//		Stub function for use by specific plots.
+		//	o: Object
+		//		An object intended to represent event parameters.
+	},
+	raiseEvent: function(o){
+		//	summary:
+		//		Raises events in predefined order
+		//	o: Object
+		//		An object intended to represent event parameters.
+		this.plotEvent(o);
+		var t = dojo.delegate(o);
+		t.originalEvent = o.type;
+		t.originalPlot  = o.plot;
+		t.type = "onindirect";
+		dojo.forEach(this.chart.stack, function(plot){
+			if(plot !== this && plot.plotEvent){
+				t.plot = plot;
+				plot.plotEvent(t);
+			}
+		}, this);
+	},
+	connect: function(object, method){
+		//	summary:
+		//		Helper function to connect any object's method to our plotEvent.
+		//	object: Object
+		//		The object to connect to.
+		//	method: String|Function
+		//		The method to fire when our plotEvent is fired.
+		//	returns: Array
+		//		The handle as returned from dojo.connect (see dojo.connect).
+		this.dirty = true;
+		return dojo.connect(this, "plotEvent", object, method);	//	Array
+	},
+	events: function(){
+		//	summary:
+		//		Find out if any event handlers have been connected to our plotEvent.
+		//	returns: Boolean
+		//		A flag indicating that there are handlers attached.
+		var ls = this.plotEvent._listeners;
+		if(!ls || !ls.length){ return false; }
+		for(var i in ls){
+			if(!(i in Array.prototype)){
+				return true;
+			}
+		}
+		return false;
+	},
+	resetEvents: function(){
+		//	summary:
+		//		Reset all events attached to our plotEvent (i.e. disconnect).
+		if(this._shapeEvents.length){
+			dojo.forEach(this._shapeEvents, function(item){
+				item.shape.disconnect(item.handle);
+			});
+			this._shapeEvents = [];
+		}
+		this.raiseEvent({type: "onplotreset", plot: this});
+	},
+	_connectSingleEvent: function(o, eventName){
+		this._shapeEvents.push({
+			shape:  o.eventMask,
+			handle: o.eventMask.connect(eventName, this, function(e){
+				o.type  = eventName;
+				o.event = e;
+				this.raiseEvent(o);
+				o.event = null;
+			})
+		});
+	},
+	_connectEvents: function(o){
+		o.chart = this.chart;
+		o.plot  = this;
+		o.hAxis = this.hAxis || null;
+		o.vAxis = this.vAxis || null;
+		o.eventMask = o.eventMask || o.shape;
+		this._connectSingleEvent(o, "onmouseover");
+		this._connectSingleEvent(o, "onmouseout");
+		this._connectSingleEvent(o, "onclick");
+	},
+	_reconnectEvents: function(seriesName){
+		var a = this._eventSeries[seriesName];
+		if(a){
+			dojo.forEach(a, this._connectEvents, this);
+		}
+	},
+	fireEvent: function(seriesName, eventName, index, eventObject){
+		//	summary:
+		//		Emulates firing an event for a given data value (specified by
+		//		an index) of a given series.
+		//	seriesName: String:
+		//		Series name.
+		//	eventName: String:
+		//		Event name to emulate.
+		//	index:	Number:
+		//		Valid data value index used to raise an event.
+		//	eventObject: Object?:
+		//		Optional event object. Especially useful for synthetic events.
+		//		Default: null.
+		var s = this._eventSeries[seriesName];
+		if(s && s.length && index < s.length){
+			var o = s[index];
+			o.type  = eventName;
+			o.event = eventObject || null;
+			this.raiseEvent(o);
+			o.event = null;
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Base"] = true;
+dojo.provide("dojox.charting.plot2d.Base");
+
+
+
+
+
+
+/*=====
+dojox.charting.plot2d.__PlotCtorArgs = function(){
+	//	summary:
+	//		The base keyword arguments object for plot constructors.
+	//		Note that the parameters for this may change based on the
+	//		specific plot type (see the corresponding plot type for
+	//		details).
+}
+=====*/
+dojo.declare("dojox.charting.plot2d.Base", [dojox.charting.Element, dojox.charting.plot2d._PlotEvents], {
+	constructor: function(chart, kwArgs){
+		//	summary:
+		//		Create a base plot for charting.
+		//	chart: dojox.chart.Chart2D
+		//		The chart this plot belongs to.
+		//	kwArgs: dojox.charting.plot2d.__PlotCtorArgs?
+		//		An optional arguments object to help define the plot.
+		this.zoom = null,
+		this.zoomQueue = [];	// zooming action task queue
+		this.lastWindow = {vscale: 1, hscale: 1, xoffset: 0, yoffset: 0};
+	},
+	clear: function(){
+		//	summary:
+		//		Clear out all of the information tied to this plot.
+		//	returns: dojox.charting.plot2d.Base
+		//		A reference to this plot for functional chaining.
+		this.series = [];
+		this._hAxis = null;
+		this._vAxis = null;
+		this.dirty = true;
+		return this;	//	dojox.charting.plot2d.Base
+	},
+	setAxis: function(axis){
+		//	summary:
+		//		Set an axis for this plot.
+		//	axis: dojox.charting.axis2d.Base
+		//		The axis to set.
+		//	returns: dojox.charting.plot2d.Base
+		//		A reference to this plot for functional chaining.
+		if(axis){
+			this[axis.vertical ? "_vAxis" : "_hAxis"] = axis;
+		}
+		return this;	//	dojox.charting.plot2d.Base
+	},
+	addSeries: function(run){
+		//	summary:
+		//		Add a data series to this plot.
+		//	run: dojox.charting.Series
+		//		The series to be added.
+		//	returns: dojox.charting.plot2d.Base
+		//		A reference to this plot for functional chaining.
+		this.series.push(run);
+		return this;	//	dojox.charting.plot2d.Base
+	},
+	getSeriesStats: function(){
+		//	summary:
+		//		Calculate the min/max on all attached series in both directions.
+		//	returns: Object
+		//		{hmin, hmax, vmin, vmax} min/max in both directions.
+		return dojox.charting.plot2d.common.collectSimpleStats(this.series);
+	},
+	calculateAxes: function(dim){
+		//	summary:
+		//		Stub function for running the axis calculations (depricated).
+		//	dim: Object
+		//		An object of the form { width, height }
+		//	returns: dojox.charting.plot2d.Base
+		//		A reference to this plot for functional chaining.
+		this.initializeScalers(dim, this.getSeriesStats());
+		return this;	//	dojox.charting.plot2d.Base
+	},
+	isDirty: function(){
+		//	summary:
+		//		Returns whether or not this plot needs to be rendered.
+		//	returns: Boolean
+		//		The state of the plot.
+		return this.dirty || this._hAxis && this._hAxis.dirty || this._vAxis && this._vAxis.dirty;	//	Boolean
+	},
+	isDataDirty: function(){
+		//	summary:
+		//		Returns whether or not any of this plot's data series need to be rendered.
+		//	returns: Boolean
+		//		Flag indicating if any of this plot's series are invalid and need rendering.
+		return dojo.some(this.series, function(item){ return item.dirty; });	//	Boolean
+	},
+	performZoom: function(dim, offsets){
+		//	summary:
+		//		Create/alter any zooming windows on this plot.
+		//	dim: Object
+		//		An object of the form { width, height }.
+		//	offsets: Object
+		//		An object of the form { l, r, t, b }.
+		//	returns: dojox.charting.plot2d.Base
+		//		A reference to this plot for functional chaining.
+
+		// get current zooming various
+		var vs = this._vAxis.scale || 1,
+			hs = this._hAxis.scale || 1,
+			vOffset = dim.height - offsets.b,
+			hBounds = this._hScaler.bounds,
+			xOffset = (hBounds.from - hBounds.lower) * hBounds.scale,
+			vBounds = this._vScaler.bounds,
+			yOffset = (vBounds.from - vBounds.lower) * vBounds.scale;
+			// get incremental zooming various
+			rVScale = vs / this.lastWindow.vscale,
+			rHScale = hs / this.lastWindow.hscale,
+			rXOffset = (this.lastWindow.xoffset - xOffset)/
+				((this.lastWindow.hscale == 1)? hs : this.lastWindow.hscale),
+			rYOffset = (yOffset - this.lastWindow.yoffset)/
+				((this.lastWindow.vscale == 1)? vs : this.lastWindow.vscale),
+
+			shape = this.group,
+			anim = dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform:[
+					{name:"translate", start:[0, 0], end: [offsets.l * (1 - rHScale), vOffset * (1 - rVScale)]},
+					{name:"scale", start:[1, 1], end: [rHScale, rVScale]},
+					{name:"original"},
+					{name:"translate", start: [0, 0], end: [rXOffset, rYOffset]}
+				]}, this.zoom));
+
+		dojo.mixin(this.lastWindow, {vscale: vs, hscale: hs, xoffset: xOffset, yoffset: yOffset});
+		//add anim to zooming action queue,
+		//in order to avoid several zooming action happened at the same time
+		this.zoomQueue.push(anim);
+		//perform each anim one by one in zoomQueue
+		dojo.connect(anim, "onEnd", this, function(){
+			this.zoom = null;
+			this.zoomQueue.shift();
+			if(this.zoomQueue.length > 0){
+				this.zoomQueue[0].play();
+			}
+		});
+		if(this.zoomQueue.length == 1){
+			this.zoomQueue[0].play();
+		}
+		return this;	//	dojox.charting.plot2d.Base
+	},
+	render: function(dim, offsets){
+		//	summary:
+		//		Render the plot on the chart.
+		//	dim: Object
+		//		An object of the form { width, height }.
+		//	offsets: Object
+		//		An object of the form { l, r, t, b }.
+		//	returns: dojox.charting.plot2d.Base
+		//		A reference to this plot for functional chaining.
+		return this;	//	dojox.charting.plot2d.Base
+	},
+	getRequiredColors: function(){
+		//	summary:
+		//		Get how many data series we have, so we know how many colors to use.
+		//	returns: Number
+		//		The number of colors needed.
+		return this.series.length;	//	Number
+	},
+	initializeScalers: function(dim, stats){
+		//	summary:
+		//		Initializes scalers using attached axes.
+		//	dim: Object:
+		//		Size of a plot area in pixels as {width, height}.
+		//	stats: Object:
+		//		Min/max of data in both directions as {hmin, hmax, vmin, vmax}.
+		//	returns: dojox.charting.plot2d.Base
+		//		A reference to this plot for functional chaining.
+		if(this._hAxis){
+			if(!this._hAxis.initialized()){
+				this._hAxis.calculate(stats.hmin, stats.hmax, dim.width);
+			}
+			this._hScaler = this._hAxis.getScaler();
+		}else{
+			this._hScaler = dojox.charting.scaler.primitive.buildScaler(stats.hmin, stats.hmax, dim.width);
+		}
+		if(this._vAxis){
+			if(!this._vAxis.initialized()){
+				this._vAxis.calculate(stats.vmin, stats.vmax, dim.height);
+			}
+			this._vScaler = this._vAxis.getScaler();
+		}else{
+			this._vScaler = dojox.charting.scaler.primitive.buildScaler(stats.vmin, stats.vmax, dim.height);
+		}
+		return this;	//	dojox.charting.plot2d.Base
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.gfx.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.fx"] = true;
+dojo.provide("dojox.gfx.fx");
+
+
+
+(function(){
+	var d = dojo, g = dojox.gfx, m = g.matrix;
+
+	// Generic interpolators. Should they be moved to dojox.fx?
+
+	var InterpolNumber = function(start, end){
+		this.start = start, this.end = end;
+	};
+	d.extend(InterpolNumber, {
+		getValue: function(r){
+			return (this.end - this.start) * r + this.start;
+		}
+	});
+
+	var InterpolUnit = function(start, end, units){
+		this.start = start, this.end = end;
+		this.units = units;
+	};
+	d.extend(InterpolUnit, {
+		getValue: function(r){
+			return (this.end - this.start) * r + this.start + this.units;
+		}
+	});
+
+	var InterpolColor = function(start, end){
+		this.start = start, this.end = end;
+		this.temp = new dojo.Color();
+	};
+	d.extend(InterpolColor, {
+		getValue: function(r){
+			return d.blendColors(this.start, this.end, r, this.temp);
+		}
+	});
+
+	var InterpolValues = function(values){
+		this.values = values;
+		this.length = values.length;
+	};
+	d.extend(InterpolValues, {
+		getValue: function(r){
+			return this.values[Math.min(Math.floor(r * this.length), this.length - 1)];
+		}
+	});
+
+	var InterpolObject = function(values, def){
+		this.values = values;
+		this.def = def ? def : {};
+	};
+	d.extend(InterpolObject, {
+		getValue: function(r){
+			var ret = dojo.clone(this.def);
+			for(var i in this.values){
+				ret[i] = this.values[i].getValue(r);
+			}
+			return ret;
+		}
+	});
+
+	var InterpolTransform = function(stack, original){
+		this.stack = stack;
+		this.original = original;
+	};
+	d.extend(InterpolTransform, {
+		getValue: function(r){
+			var ret = [];
+			dojo.forEach(this.stack, function(t){
+				if(t instanceof m.Matrix2D){
+					ret.push(t);
+					return;
+				}
+				if(t.name == "original" && this.original){
+					ret.push(this.original);
+					return;
+				}
+				if(!(t.name in m)){ return; }
+				var f = m[t.name];
+				if(typeof f != "function"){
+					// constant
+					ret.push(f);
+					return;
+				}
+				var val = dojo.map(t.start, function(v, i){
+								return (t.end[i] - v) * r + v;
+							}),
+					matrix = f.apply(m, val);
+				if(matrix instanceof m.Matrix2D){
+					ret.push(matrix);
+				}
+			}, this);
+			return ret;
+		}
+	});
+
+	var transparent = new d.Color(0, 0, 0, 0);
+
+	var getColorInterpol = function(prop, obj, name, def){
+		if(prop.values){
+			return new InterpolValues(prop.values);
+		}
+		var value, start, end;
+		if(prop.start){
+			start = g.normalizeColor(prop.start);
+		}else{
+			start = value = obj ? (name ? obj[name] : obj) : def;
+		}
+		if(prop.end){
+			end = g.normalizeColor(prop.end);
+		}else{
+			if(!value){
+				value = obj ? (name ? obj[name] : obj) : def;
+			}
+			end = value;
+		}
+		return new InterpolColor(start, end);
+	};
+
+	var getNumberInterpol = function(prop, obj, name, def){
+		if(prop.values){
+			return new InterpolValues(prop.values);
+		}
+		var value, start, end;
+		if(prop.start){
+			start = prop.start;
+		}else{
+			start = value = obj ? obj[name] : def;
+		}
+		if(prop.end){
+			end = prop.end;
+		}else{
+			if(typeof value != "number"){
+				value = obj ? obj[name] : def;
+			}
+			end = value;
+		}
+		return new InterpolNumber(start, end);
+	};
+
+	g.fx.animateStroke = function(/*Object*/ args){
+		// summary:
+		//	Returns an animation which will change stroke properties over time
+		// example:
+		//	|	dojox.gfx.fx.animateStroke{{
+		//	|		shape: shape,
+		//	|		duration: 500,
+		//	|		color: {start: "red", end: "green"},
+		//	|		width: {end: 15},
+		//	|		join:  {values: ["miter", "bevel", "round"]}
+		//	|	}).play();
+		if(!args.easing){ args.easing = d._defaultEasing; }
+		var anim = new d.Animation(args), shape = args.shape, stroke;
+		d.connect(anim, "beforeBegin", anim, function(){
+			stroke = shape.getStroke();
+			var prop = args.color, values = {}, value, start, end;
+			if(prop){
+				values.color = getColorInterpol(prop, stroke, "color", transparent);
+			}
+			prop = args.style;
+			if(prop && prop.values){
+				values.style = new InterpolValues(prop.values);
+			}
+			prop = args.width;
+			if(prop){
+				values.width = getNumberInterpol(prop, stroke, "width", 1);
+			}
+			prop = args.cap;
+			if(prop && prop.values){
+				values.cap = new InterpolValues(prop.values);
+			}
+			prop = args.join;
+			if(prop){
+				if(prop.values){
+					values.join = new InterpolValues(prop.values);
+				}else{
+					start = prop.start ? prop.start : (stroke && stroke.join || 0);
+					end = prop.end ? prop.end : (stroke && stroke.join || 0);
+					if(typeof start == "number" && typeof end == "number"){
+						values.join = new InterpolNumber(start, end);
+					}
+				}
+			}
+			this.curve = new InterpolObject(values, stroke);
+		});
+		d.connect(anim, "onAnimate", shape, "setStroke");
+		return anim; // dojo.Animation
+	};
+
+	g.fx.animateFill = function(/*Object*/ args){
+		// summary:
+		//	Returns an animation which will change fill color over time.
+		//	Only solid fill color is supported at the moment
+		// example:
+		//	|	dojox.gfx.fx.animateFill{{
+		//	|		shape: shape,
+		//	|		duration: 500,
+		//	|		color: {start: "red", end: "green"}
+		//	|	}).play();
+		if(!args.easing){ args.easing = d._defaultEasing; }
+		var anim = new d.Animation(args), shape = args.shape, fill;
+		d.connect(anim, "beforeBegin", anim, function(){
+			fill = shape.getFill();
+			var prop = args.color, values = {};
+			if(prop){
+				this.curve = getColorInterpol(prop, fill, "", transparent);
+			}
+		});
+		d.connect(anim, "onAnimate", shape, "setFill");
+		return anim; // dojo.Animation
+	};
+
+	g.fx.animateFont = function(/*Object*/ args){
+		// summary:
+		//	Returns an animation which will change font properties over time
+		// example:
+		//	|	dojox.gfx.fx.animateFont{{
+		//	|		shape: shape,
+		//	|		duration: 500,
+		//	|		variant: {values: ["normal", "small-caps"]},
+		//	|		size:  {end: 10, units: "pt"}
+		//	|	}).play();
+		if(!args.easing){ args.easing = d._defaultEasing; }
+		var anim = new d.Animation(args), shape = args.shape, font;
+		d.connect(anim, "beforeBegin", anim, function(){
+			font = shape.getFont();
+			var prop = args.style, values = {}, value, start, end;
+			if(prop && prop.values){
+				values.style = new InterpolValues(prop.values);
+			}
+			prop = args.variant;
+			if(prop && prop.values){
+				values.variant = new InterpolValues(prop.values);
+			}
+			prop = args.weight;
+			if(prop && prop.values){
+				values.weight = new InterpolValues(prop.values);
+			}
+			prop = args.family;
+			if(prop && prop.values){
+				values.family = new InterpolValues(prop.values);
+			}
+			prop = args.size;
+			if(prop && prop.units){
+				start = parseFloat(prop.start ? prop.start : (shape.font && shape.font.size || "0"));
+				end = parseFloat(prop.end ? prop.end : (shape.font && shape.font.size || "0"));
+				values.size = new InterpolUnit(start, end, prop.units);
+			}
+			this.curve = new InterpolObject(values, font);
+		});
+		d.connect(anim, "onAnimate", shape, "setFont");
+		return anim; // dojo.Animation
+	};
+
+	g.fx.animateTransform = function(/*Object*/ args){
+		// summary:
+		//	Returns an animation which will change transformation over time
+		// example:
+		//	|	dojox.gfx.fx.animateTransform{{
+		//	|		shape: shape,
+		//	|		duration: 500,
+		//	|		transform: [
+		//	|			{name: "translate", start: [0, 0], end: [200, 200]},
+		//	|			{name: "original"}
+		//	|		]
+		//	|	}).play();
+		if(!args.easing){ args.easing = d._defaultEasing; }
+		var anim = new d.Animation(args), shape = args.shape, original;
+		d.connect(anim, "beforeBegin", anim, function(){
+			original = shape.getTransform();
+			this.curve = new InterpolTransform(args.transform, original);
+		});
+		d.connect(anim, "onAnimate", shape, "setTransform");
+		return anim; // dojo.Animation
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Default"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Default"] = true;
+dojo.provide("dojox.charting.plot2d.Default");
+
+
+
+
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.plot2d.__DefaultCtorArgs", dojox.charting.plot2d.__PlotCtorArgs, {
+	//	summary:
+	//		The arguments used for any/most plots.
+
+	//	hAxis: String?
+	//		The horizontal axis name.
+	hAxis: "x",
+
+	//	vAxis: String?
+	//		The vertical axis name
+	vAxis: "y",
+
+	//	lines: Boolean?
+	//		Whether or not to draw lines on this plot.  Defaults to true.
+	lines:   true,
+
+	//	areas: Boolean?
+	//		Whether or not to draw areas on this plot. Defaults to false.
+	areas:   false,
+
+	//	markers: Boolean?
+	//		Whether or not to draw markers at data points on this plot. Default is false.
+	markers: false,
+
+	//	tension: Number|String?
+	//		Whether or not to apply 'tensioning' to the lines on this chart.
+	//		Options include a number, "X", "x", or "S"; if a number is used, the
+	//		simpler bezier curve calculations are used to draw the lines.  If X, x or S
+	//		is used, the more accurate smoothing algorithm is used.
+	tension: "",
+
+	//	animate: Boolean?
+	//		Whether or not to animate the chart to place.
+	animate: false,
+
+	//	stroke: dojox.gfx.Stroke?
+	//		An optional stroke to use for any series on the plot.
+	stroke:		{},
+
+	//	outline: dojox.gfx.Stroke?
+	//		An optional stroke used to outline any series on the plot.
+	outline:	{},
+
+	//	shadow: dojox.gfx.Stroke?
+	//		An optional stroke to use to draw any shadows for a series on a plot.
+	shadow:		{},
+
+	//	fill: dojox.gfx.Fill?
+	//		Any fill to be used for elements on the plot (such as areas).
+	fill:		{},
+
+	//	font: String?
+	//		A font definition to be used for labels and other text-based elements on the plot.
+	font:		"",
+
+	//	fontColor: String|dojo.Color?
+	//		The color to be used for any text-based elements on the plot.
+	fontColor:	"",
+
+	//	markerStroke: dojo.gfx.Stroke?
+	//		An optional stroke to use for any markers on the plot.
+	markerStroke:		{},
+
+	//	markerOutline: dojo.gfx.Stroke?
+	//		An optional outline to use for any markers on the plot.
+	markerOutline:		{},
+
+	//	markerShadow: dojo.gfx.Stroke?
+	//		An optional shadow to use for any markers on the plot.
+	markerShadow:		{},
+
+	//	markerFill: dojo.gfx.Fill?
+	//		An optional fill to use for any markers on the plot.
+	markerFill:			{},
+
+	//	markerFont: String?
+	//		An optional font definition to use for any markers on the plot.
+	markerFont:			"",
+
+	//	markerFontColor: String|dojo.Color?
+	//		An optional color to use for any marker text on the plot.
+	markerFontColor:	""
+});
+=====*/
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	var DEFAULT_ANIMATION_LENGTH = 1200;	// in ms
+
+	dojo.declare("dojox.charting.plot2d.Default", dojox.charting.plot2d.Base, {
+		defaultParams: {
+			hAxis: "x",		// use a horizontal axis named "x"
+			vAxis: "y",		// use a vertical axis named "y"
+			lines:   true,	// draw lines
+			areas:   false,	// draw areas
+			markers: false,	// draw markers
+			tension: "",	// draw curved lines (tension is "X", "x", or "S")
+			animate: false	// animate chart to place
+		},
+		optionalParams: {
+			// theme component
+			stroke:		{},
+			outline:	{},
+			shadow:		{},
+			fill:		{},
+			font:		"",
+			fontColor:	"",
+			markerStroke:		{},
+			markerOutline:		{},
+			markerShadow:		{},
+			markerFill:			{},
+			markerFont:			"",
+			markerFontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		Return a new plot.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__DefaultCtorArgs?
+			//		An optional arguments object to help define this plot.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			this.series = [];
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+
+			// animation properties
+			this.animate = this.opt.animate;
+		},
+
+		render: function(dim, offsets){
+			//	summary:
+			//		Render/draw everything on this plot.
+			//	dim: Object
+			//		An object of the form { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b }
+			//	returns: dojox.charting.plot2d.Default
+			//		A reference to this plot for functional chaining.
+
+			// make sure all the series is not modified
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				this.group.setTransform(null);
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, stroke, outline, marker, events = this.events();
+
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				if(!run.data.length){
+					run.dirty = false;
+					t.skip();
+					continue;
+				}
+
+				var theme = t.next(this.opt.areas ? "area" : "line", [this.opt, run], true),
+					s = run.group, rsegments = [], startindexes = [], rseg = null, lpoly,
+					ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+					vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+					eventSeries = this._eventSeries[run.name] = new Array(run.data.length);
+
+                // split the run data into dense segments (each containing no nulls)
+                for(var j = 0; j < run.data.length; j++){
+                    if(run.data[j] != null){
+                        if(!rseg){
+                            rseg = [];
+                            startindexes.push(j);
+                            rsegments.push(rseg)
+                        }
+                        rseg.push(run.data[j]);
+                    }else{
+                        rseg = null;
+                    }
+                }
+
+                for(var seg = 0; seg < rsegments.length; seg++){
+					if(typeof rsegments[seg][0] == "number"){
+						lpoly = dojo.map(rsegments[seg], function(v, i){
+							return {
+								x: ht(i + startindexes[seg] + 1) + offsets.l,
+								y: dim.height - offsets.b - vt(v)
+							};
+						}, this);
+					}else{
+						lpoly = dojo.map(rsegments[seg], function(v, i){
+							return {
+								x: ht(v.x) + offsets.l,
+								y: dim.height - offsets.b - vt(v.y)
+							};
+						}, this);
+					}
+
+					var lpath = this.opt.tension ? dc.curve(lpoly, this.opt.tension) : "";
+
+					if(this.opt.areas && lpoly.length > 1){
+						var fill = theme.series.fill;
+						var apoly = dojo.clone(lpoly);
+						if(this.opt.tension){
+							var apath = "L" + apoly[apoly.length-1].x + "," + (dim.height - offsets.b) +
+								" L" + apoly[0].x + "," + (dim.height - offsets.b) +
+								" L" + apoly[0].x + "," + apoly[0].y;
+							run.dyn.fill = s.createPath(lpath + " " + apath).setFill(fill).getFill();
+						} else {
+							apoly.push({x: lpoly[lpoly.length - 1].x, y: dim.height - offsets.b});
+							apoly.push({x: lpoly[0].x, y: dim.height - offsets.b});
+							apoly.push(lpoly[0]);
+							run.dyn.fill = s.createPolyline(apoly).setFill(fill).getFill();
+						}
+					}
+					if(this.opt.lines || this.opt.markers){
+						// need a stroke
+						stroke = theme.series.stroke;
+						if(theme.series.outline){
+							outline = run.dyn.outline = dc.makeStroke(theme.series.outline);
+							outline.width = 2 * outline.width + stroke.width;
+						}
+					}
+					if(this.opt.markers){
+						run.dyn.marker = theme.symbol;
+					}
+					var frontMarkers = null, outlineMarkers = null, shadowMarkers = null;
+					if(stroke && theme.series.shadow && lpoly.length > 1){
+						var shadow = theme.series.shadow,
+							spoly = dojo.map(lpoly, function(c){
+								return {x: c.x + shadow.dx, y: c.y + shadow.dy};
+							});
+						if(this.opt.lines){
+							if(this.opt.tension){
+								run.dyn.shadow = s.createPath(dc.curve(spoly, this.opt.tension)).setStroke(shadow).getStroke();
+							} else {
+								run.dyn.shadow = s.createPolyline(spoly).setStroke(shadow).getStroke();
+							}
+						}
+						if(this.opt.markers && theme.marker.shadow){
+							shadow = theme.marker.shadow;
+							shadowMarkers = dojo.map(spoly, function(c){
+								return s.createPath("M" + c.x + " " + c.y + " " + theme.symbol).
+									setStroke(shadow).setFill(shadow.color);
+							}, this);
+						}
+					}
+					if(this.opt.lines && lpoly.length > 1){
+						if(outline){
+							if(this.opt.tension){
+								run.dyn.outline = s.createPath(lpath).setStroke(outline).getStroke();
+							} else {
+								run.dyn.outline = s.createPolyline(lpoly).setStroke(outline).getStroke();
+							}
+						}
+						if(this.opt.tension){
+							run.dyn.stroke = s.createPath(lpath).setStroke(stroke).getStroke();
+						} else {
+							run.dyn.stroke = s.createPolyline(lpoly).setStroke(stroke).getStroke();
+						}
+					}
+					if(this.opt.markers){
+						frontMarkers = new Array(lpoly.length);
+						outlineMarkers = new Array(lpoly.length);
+						outline = null;
+						if(theme.marker.outline){
+							outline = dc.makeStroke(theme.marker.outline);
+							outline.width = 2 * outline.width + (theme.marker.stroke ? theme.marker.stroke.width : 0);
+						}
+						dojo.forEach(lpoly, function(c, i){
+							var path = "M" + c.x + " " + c.y + " " + theme.symbol;
+							if(outline){
+								outlineMarkers[i] = s.createPath(path).setStroke(outline);
+							}
+							frontMarkers[i] = s.createPath(path).setStroke(theme.marker.stroke).setFill(theme.marker.fill);
+						}, this);
+						if(events){
+							dojo.forEach(frontMarkers, function(s, i){
+								var o = {
+									element: "marker",
+									index:   i + startindexes[seg],
+									run:     run,
+									shape:   s,
+									outline: outlineMarkers[i] || null,
+									shadow:  shadowMarkers && shadowMarkers[i] || null,
+									cx:      lpoly[i].x,
+									cy:      lpoly[i].y
+								};
+								if(typeof rsegments[seg][0] == "number"){
+									o.x = i + startindexes[seg] + 1;
+									o.y = rsegments[seg][i];
+								}else{
+									o.x = rsegments[seg][i].x;
+									o.y = rsegments[seg][i].y;
+								}
+								this._connectEvents(o);
+								eventSeries[i + startindexes[seg]] = o;
+							}, this);
+						}else{
+							delete this._eventSeries[run.name];
+						}
+					}
+                }
+				run.dirty = false;
+			}
+			if(this.animate){
+				// grow from the bottom
+				var plotGroup = this.group;
+				dojox.gfx.fx.animateTransform(dojo.delegate({
+					shape: plotGroup,
+					duration: DEFAULT_ANIMATION_LENGTH,
+					transform:[
+						{name:"translate", start: [0, dim.height - offsets.b], end: [0, 0]},
+						{name:"scale", start: [1, 0], end:[1, 1]},
+						{name:"original"}
+					]
+				}, this.animate)).play();
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Default
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Lines"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Lines"] = true;
+dojo.provide("dojox.charting.plot2d.Lines");
+
+
+
+dojo.declare("dojox.charting.plot2d.Lines", dojox.charting.plot2d.Default, {
+	//	summary:
+	//		A convenience constructor to create a typical line chart.
+	constructor: function(){
+		//	summary:
+		//		Preset our default plot to be line-based.
+		this.opt.lines = true;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Areas"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Areas"] = true;
+dojo.provide("dojox.charting.plot2d.Areas");
+
+
+
+dojo.declare("dojox.charting.plot2d.Areas", dojox.charting.plot2d.Default, {
+	//	summary:
+	//		Represents an area chart.  See dojox.charting.plot2d.Default for details.
+	constructor: function(){
+		this.opt.lines = true;
+		this.opt.areas = true;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Markers"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Markers"] = true;
+dojo.provide("dojox.charting.plot2d.Markers");
+
+
+
+dojo.declare("dojox.charting.plot2d.Markers", dojox.charting.plot2d.Default, {
+	//	summary:
+	//		A convenience plot to draw a line chart with markers.
+	constructor: function(){
+		//	summary:
+		//		Set up the plot for lines and markers.
+		this.opt.markers = true;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.MarkersOnly"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.MarkersOnly"] = true;
+dojo.provide("dojox.charting.plot2d.MarkersOnly");
+
+
+
+dojo.declare("dojox.charting.plot2d.MarkersOnly", dojox.charting.plot2d.Default, {
+	//	summary:
+	//		A convenience object to draw only markers (like a scatter but not quite).
+	constructor: function(){
+		//	summary:
+		//		Set up our default plot to only have markers and no lines.
+		this.opt.lines   = false;
+		this.opt.markers = true;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Scatter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Scatter"] = true;
+dojo.provide("dojox.charting.plot2d.Scatter");
+
+
+
+
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.Scatter", dojox.charting.plot2d.Base, {
+		//	summary:
+		//		A plot object representing a typical scatter chart.
+		defaultParams: {
+			hAxis: "x",		// use a horizontal axis named "x"
+			vAxis: "y",		// use a vertical axis named "y"
+			shadows: null,	// draw shadows
+			animate: null	// animate chart to place
+		},
+		optionalParams: {
+			// theme component
+			markerStroke:		{},
+			markerOutline:		{},
+			markerShadow:		{},
+			markerFill:			{},
+			markerFont:			"",
+			markerFontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		Create the scatter plot.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__DefaultCtorArgs?
+			//		An optional keyword arguments object to help define this plot's parameters.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			this.series = [];
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+			this.animate = this.opt.animate;
+		},
+
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.Scatter
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, events = this.events();
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				if(!run.data.length){
+					run.dirty = false;
+					t.skip();
+					continue;
+				}
+
+				var theme = t.next("marker", [this.opt, run]), s = run.group, lpoly,
+					ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+					vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler);
+				if(typeof run.data[0] == "number"){
+					lpoly = dojo.map(run.data, function(v, i){
+						return {
+							x: ht(i + 1) + offsets.l,
+							y: dim.height - offsets.b - vt(v)
+						};
+					}, this);
+				}else{
+					lpoly = dojo.map(run.data, function(v, i){
+						return {
+							x: ht(v.x) + offsets.l,
+							y: dim.height - offsets.b - vt(v.y)
+						};
+					}, this);
+				}
+
+				var shadowMarkers  = new Array(lpoly.length),
+					frontMarkers   = new Array(lpoly.length),
+					outlineMarkers = new Array(lpoly.length);
+
+				dojo.forEach(lpoly, function(c, i){
+					var finalTheme = typeof run.data[i] == "number" ?
+							t.post(theme, "marker") :
+							t.addMixin(theme, "marker", run.data[i], true),
+						path = "M" + c.x + " " + c.y + " " + finalTheme.symbol;
+					if(finalTheme.marker.shadow){
+						shadowMarkers[i] = s.createPath("M" + (c.x + finalTheme.marker.shadow.dx) + " " +
+							(c.y + finalTheme.marker.shadow.dy) + " " + finalTheme.symbol).
+							setStroke(finalTheme.marker.shadow).setFill(finalTheme.marker.shadow.color);
+						if(this.animate){
+							this._animateScatter(shadowMarkers[i], dim.height - offsets.b);
+						}
+					}
+					if(finalTheme.marker.outline){
+						var outline = dc.makeStroke(finalTheme.marker.outline);
+						outline.width = 2 * outline.width + finalTheme.marker.stroke.width;
+						outlineMarkers[i] = s.createPath(path).setStroke(outline);
+						if(this.animate){
+							this._animateScatter(outlineMarkers[i], dim.height - offsets.b);
+						}
+					}
+					var stroke = dc.makeStroke(finalTheme.marker.stroke),
+						fill = this._plotFill(finalTheme.marker.fill, dim, offsets);
+					if(fill && (fill.type === "linear" || fill.type == "radial")){
+						var color = dojox.gfx.gradutils.getColor(fill, {x: c.x, y: c.y});
+						if(stroke){
+							stroke.color = color;
+						}
+						frontMarkers[i] = s.createPath(path).setStroke(stroke).setFill(color);
+					}else{
+						frontMarkers[i] = s.createPath(path).setStroke(stroke).setFill(fill);
+					}
+					if(this.animate){
+						this._animateScatter(frontMarkers[i], dim.height - offsets.b);
+					}
+				}, this);
+				if(frontMarkers.length){
+					run.dyn.stroke = frontMarkers[frontMarkers.length - 1].getStroke();
+					run.dyn.fill   = frontMarkers[frontMarkers.length - 1].getFill();
+				}
+
+				if(events){
+					var eventSeries = new Array(frontMarkers.length);
+					dojo.forEach(frontMarkers, function(s, i){
+						var o = {
+							element: "marker",
+							index:   i,
+							run:     run,
+							shape:   s,
+							outline: outlineMarkers && outlineMarkers[i] || null,
+							shadow:  shadowMarkers && shadowMarkers[i] || null,
+							cx:      lpoly[i].x,
+							cy:      lpoly[i].y
+						};
+						if(typeof run.data[0] == "number"){
+							o.x = i + 1;
+							o.y = run.data[i];
+						}else{
+							o.x = run.data[i].x;
+							o.y = run.data[i].y;
+						}
+						this._connectEvents(o);
+						eventSeries[i] = o;
+					}, this);
+					this._eventSeries[run.name] = eventSeries;
+				}else{
+					delete this._eventSeries[run.name];
+				}
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Scatter
+		},
+		_animateScatter: function(shape, offset){
+			dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform: [
+					{name: "translate", start: [0, offset], end: [0, 0]},
+					{name: "scale", start: [0, 0], end: [1, 1]},
+					{name: "original"}
+				]
+			}, this.animate)).play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.sequence"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.sequence"] = true;
+dojo.provide("dojox.lang.functional.sequence");
+
+
+
+// This module adds high-level functions and related constructs:
+//	- sequence generators
+
+// If you want more general sequence builders check out listcomp.js and
+// unfold() (in fold.js).
+
+// Defined methods:
+//	- take any valid lambda argument as the functional argument
+
+(function(){
+	var d = dojo, df = dojox.lang.functional;
+
+	d.mixin(df, {
+		// sequence generators
+		repeat: function(/*Number*/ n, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+			// summary: builds an array by repeatedly applying a unary function N times
+			//	with a seed value Z. N should be greater than 0.
+			o = o || d.global; f = df.lambda(f);
+			var t = new Array(n), i = 1;
+			t[0] = z;
+			for(; i < n; t[i] = z = f.call(o, z), ++i);
+			return t;	// Array
+		},
+		until: function(/*Function|String|Array*/ pr, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+			// summary: builds an array by repeatedly applying a unary function with
+			//	a seed value Z until the predicate is satisfied.
+			o = o || d.global; f = df.lambda(f); pr = df.lambda(pr);
+			var t = [];
+			for(; !pr.call(o, z); t.push(z), z = f.call(o, z));
+			return t;	// Array
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Stacked"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Stacked"] = true;
+dojo.provide("dojox.charting.plot2d.Stacked");
+
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.Stacked", dojox.charting.plot2d.Default, {
+		//	summary:
+		//		Like the default plot, Stacked sets up lines, areas and markers
+		//		in a stacked fashion (values on the y axis added to each other)
+		//		as opposed to a direct one.
+		getSeriesStats: function(){
+			//	summary:
+			//		Calculate the min/max on all attached series in both directions.
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			var stats = dc.collectStackedStats(this.series);
+			this._maxRunLength = stats.hmax;
+			return stats;
+		},
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.Stacked
+			//		A reference to this plot for functional chaining.
+			if(this._maxRunLength <= 0){
+				return this;
+			}
+
+			// stack all values
+			var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+			for(var i = 0; i < this.series.length; ++i){
+				var run = this.series[i];
+				for(var j = 0; j < run.data.length; ++j){
+					var v = run.data[j];
+					if(v !== null){
+						if(isNaN(v)){ v = 0; }
+						acc[j] += v;
+					}
+				}
+			}
+			// draw runs in backwards
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+
+			var t = this.chart.theme, events = this.events(),
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler);
+
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next(this.opt.areas ? "area" : "line", [this.opt, run], true),
+					s = run.group, outline,
+					lpoly = dojo.map(acc, function(v, i){
+						return {
+							x: ht(i + 1) + offsets.l,
+							y: dim.height - offsets.b - vt(v)
+						};
+					}, this);
+
+				var lpath = this.opt.tension ? dc.curve(lpoly, this.opt.tension) : "";
+
+				if(this.opt.areas){
+					var apoly = dojo.clone(lpoly);
+					if(this.opt.tension){
+						var p=dc.curve(apoly, this.opt.tension);
+						p += " L" + lpoly[lpoly.length - 1].x + "," + (dim.height - offsets.b) +
+							" L" + lpoly[0].x + "," + (dim.height - offsets.b) +
+							" L" + lpoly[0].x + "," + lpoly[0].y;
+						run.dyn.fill = s.createPath(p).setFill(theme.series.fill).getFill();
+					} else {
+						apoly.push({x: lpoly[lpoly.length - 1].x, y: dim.height - offsets.b});
+						apoly.push({x: lpoly[0].x, y: dim.height - offsets.b});
+						apoly.push(lpoly[0]);
+						run.dyn.fill = s.createPolyline(apoly).setFill(theme.series.fill).getFill();
+					}
+				}
+				if(this.opt.lines || this.opt.markers){
+					if(theme.series.outline){
+						outline = dc.makeStroke(theme.series.outline);
+						outline.width = 2 * outline.width + theme.series.stroke.width;
+					}
+				}
+				if(this.opt.markers){
+					run.dyn.marker = theme.symbol;
+				}
+				var frontMarkers, outlineMarkers, shadowMarkers;
+				if(theme.series.shadow && theme.series.stroke){
+					var shadow = theme.series.shadow,
+						spoly = dojo.map(lpoly, function(c){
+							return {x: c.x + shadow.dx, y: c.y + shadow.dy};
+						});
+					if(this.opt.lines){
+						if(this.opt.tension){
+							run.dyn.shadow = s.createPath(dc.curve(spoly, this.opt.tension)).setStroke(shadow).getStroke();
+						} else {
+							run.dyn.shadow = s.createPolyline(spoly).setStroke(shadow).getStroke();
+						}
+					}
+					if(this.opt.markers){
+						shadow = theme.marker.shadow;
+						shadowMarkers = dojo.map(spoly, function(c){
+							return s.createPath("M" + c.x + " " + c.y + " " + theme.symbol).
+								setStroke(shadow).setFill(shadow.color);
+						}, this);
+					}
+				}
+				if(this.opt.lines){
+					if(outline){
+						if(this.opt.tension){
+							run.dyn.outline = s.createPath(lpath).setStroke(outline).getStroke();
+						} else {
+							run.dyn.outline = s.createPolyline(lpoly).setStroke(outline).getStroke();
+						}
+					}
+					if(this.opt.tension){
+						run.dyn.stroke = s.createPath(lpath).setStroke(theme.series.stroke).getStroke();
+					} else {
+						run.dyn.stroke = s.createPolyline(lpoly).setStroke(theme.series.stroke).getStroke();
+					}
+				}
+				if(this.opt.markers){
+					frontMarkers = new Array(lpoly.length);
+					outlineMarkers = new Array(lpoly.length);
+					outline = null;
+					if(theme.marker.outline){
+						outline = dc.makeStroke(theme.marker.outline);
+						outline.width = 2 * outline.width + (theme.marker.stroke ? theme.marker.stroke.width : 0);
+					}
+					dojo.forEach(lpoly, function(c, i){
+						var path = "M" + c.x + " " + c.y + " " + theme.symbol;
+						if(outline){
+							outlineMarkers[i] = s.createPath(path).setStroke(outline);
+						}
+						frontMarkers[i] = s.createPath(path).setStroke(theme.marker.stroke).setFill(theme.marker.fill);
+					}, this);
+					if(events){
+						var eventSeries = new Array(frontMarkers.length);
+						dojo.forEach(frontMarkers, function(s, i){
+							var o = {
+								element: "marker",
+								index:   i,
+								run:     run,
+								shape:   s,
+								outline: outlineMarkers[i] || null,
+								shadow:  shadowMarkers && shadowMarkers[i] || null,
+								cx:      lpoly[i].x,
+								cy:      lpoly[i].y,
+								x:       i + 1,
+								y:       run.data[i]
+							};
+							this._connectEvents(o);
+							eventSeries[i] = o;
+						}, this);
+						this._eventSeries[run.name] = eventSeries;
+					}else{
+						delete this._eventSeries[run.name];
+					}
+				}
+				run.dirty = false;
+				// update the accumulator
+				for(var j = 0; j < run.data.length; ++j){
+					var v = run.data[j];
+					if(v !== null){
+						if(isNaN(v)){ v = 0; }
+						acc[j] -= v;
+					}
+				}
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Stacked
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedLines"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedLines"] = true;
+dojo.provide("dojox.charting.plot2d.StackedLines");
+
+
+
+dojo.declare("dojox.charting.plot2d.StackedLines", dojox.charting.plot2d.Stacked, {
+	//	summary:
+	//		A convenience object to create a stacked line chart.
+	constructor: function(){
+		//	summary:
+		//		Force our Stacked base to be lines only.
+		this.opt.lines = true;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedAreas"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedAreas"] = true;
+dojo.provide("dojox.charting.plot2d.StackedAreas");
+
+
+
+dojo.declare("dojox.charting.plot2d.StackedAreas", dojox.charting.plot2d.Stacked, {
+	//	summary:
+	//		A convenience object to set up a stacked area plot.
+	constructor: function(){
+		//	summary:
+		//		Force our Stacked plotter to include both lines and areas.
+		this.opt.lines = true;
+		this.opt.areas = true;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Columns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Columns"] = true;
+dojo.provide("dojox.charting.plot2d.Columns");
+
+
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.Columns", dojox.charting.plot2d.Base, {
+		//	summary:
+		//		The plot object representing a column chart (vertical bars).
+		defaultParams: {
+			hAxis: "x",		// use a horizontal axis named "x"
+			vAxis: "y",		// use a vertical axis named "y"
+			gap:	0,		// gap between columns in pixels
+			animate: null   // animate bars into place
+		},
+		optionalParams: {
+			minBarSize:	1,	// minimal column width in pixels
+			maxBarSize:	1,	// maximal column width in pixels
+			// theme component
+			stroke:		{},
+			outline:	{},
+			shadow:		{},
+			fill:		{},
+			font:		"",
+			fontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		The constructor for a columns chart.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__BarCtorArgs?
+			//		An optional keyword arguments object to help define the plot.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+			this.series = [];
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+			this.animate = this.opt.animate;
+		},
+
+		getSeriesStats: function(){
+			//	summary:
+			//		Calculate the min/max on all attached series in both directions.
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			var stats = dc.collectSimpleStats(this.series);
+			stats.hmin -= 0.5;
+			stats.hmax += 0.5;
+			return stats;
+		},
+
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.Columns
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, width,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				baseline = Math.max(0, this._vScaler.bounds.lower),
+				baselineHeight = vt(baseline),
+				events = this.events();
+			f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+			gap = f.gap;
+			width = f.size;
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("column", [this.opt, run]), s = run.group,
+					eventSeries = new Array(run.data.length);
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y,
+							vv = vt(v),
+							height = vv - baselineHeight,
+							h = Math.abs(height),
+							finalTheme = typeof value != "number" ?
+								t.addMixin(theme, "column", value, true) :
+								t.post(theme, "column");
+						if(width >= 1 && h >= 1){
+							var rect = {
+								x: offsets.l + ht(j + 0.5) + gap,
+								y: dim.height - offsets.b - (v > baseline ? vv : baselineHeight),
+								width: width, height: h
+							};
+							var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets);
+							specialFill = this._shapeFill(specialFill, rect);
+							var shape = s.createRect(rect).setFill(specialFill).setStroke(finalTheme.series.stroke);
+							run.dyn.fill   = shape.getFill();
+							run.dyn.stroke = shape.getStroke();
+							if(events){
+								var o = {
+									element: "column",
+									index:   j,
+									run:     run,
+									shape:   shape,
+									x:       j + 0.5,
+									y:       v
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+							if(this.animate){
+								this._animateColumn(shape, dim.height - offsets.b - baselineHeight, h);
+							}
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Columns
+		},
+		_animateColumn: function(shape, voffset, vsize){
+			dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform: [
+					{name: "translate", start: [0, voffset - (voffset/vsize)], end: [0, 0]},
+					{name: "scale", start: [1, 1/vsize], end: [1, 1]},
+					{name: "original"}
+				]
+			}, this.animate)).play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedColumns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedColumns"] = true;
+dojo.provide("dojox.charting.plot2d.StackedColumns");
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.StackedColumns", dojox.charting.plot2d.Columns, {
+		//	summary:
+		//		The plot object representing a stacked column chart (vertical bars).
+		getSeriesStats: function(){
+			//	summary:
+			//		Calculate the min/max on all attached series in both directions.
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			var stats = dc.collectStackedStats(this.series);
+			this._maxRunLength = stats.hmax;
+			stats.hmin -= 0.5;
+			stats.hmax += 0.5;
+			return stats;
+		},
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.StackedColumns
+			//		A reference to this plot for functional chaining.
+			if(this._maxRunLength <= 0){
+				return this;
+			}
+
+			// stack all values
+			var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+			for(var i = 0; i < this.series.length; ++i){
+				var run = this.series[i];
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y;
+						if(isNaN(v)){ v = 0; }
+						acc[j] += v;
+					}
+				}
+			}
+			// draw runs in backwards
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, width,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				events = this.events();
+			f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+			gap = f.gap;
+			width = f.size;
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("column", [this.opt, run]), s = run.group,
+					eventSeries = new Array(acc.length);
+				for(var j = 0; j < acc.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = acc[j],
+							height = vt(v),
+							finalTheme = typeof value != "number" ?
+								t.addMixin(theme, "column", value, true) :
+								t.post(theme, "column");
+						if(width >= 1 && height >= 1){
+							var rect = {
+								x: offsets.l + ht(j + 0.5) + gap,
+								y: dim.height - offsets.b - vt(v),
+								width: width, height: height
+							};
+							var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets);
+							specialFill = this._shapeFill(specialFill, rect);
+							var shape = s.createRect(rect).setFill(specialFill).setStroke(finalTheme.series.stroke);
+							run.dyn.fill   = shape.getFill();
+							run.dyn.stroke = shape.getStroke();
+							if(events){
+								var o = {
+									element: "column",
+									index:   j,
+									run:     run,
+									shape:   shape,
+									x:       j + 0.5,
+									y:       v
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+							if(this.animate){
+								this._animateColumn(shape, dim.height - offsets.b, height);
+							}
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+				// update the accumulator
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y;
+						if(isNaN(v)){ v = 0; }
+						acc[j] -= v;
+					}
+				}
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.StackedColumns
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"] = true;
+dojo.provide("dojox.charting.plot2d.ClusteredColumns");
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.ClusteredColumns", dojox.charting.plot2d.Columns, {
+		//	summary:
+		//		A plot representing grouped or clustered columns (vertical bars).
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.ClusteredColumns
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, width, thickness,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				baseline = Math.max(0, this._vScaler.bounds.lower),
+				baselineHeight = vt(baseline),
+				events = this.events();
+			f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt, this.series.length);
+			gap = f.gap;
+			width = thickness = f.size;
+			for(var i = 0; i < this.series.length; ++i){
+				var run = this.series[i], shift = thickness * i;
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("column", [this.opt, run]), s = run.group,
+					eventSeries = new Array(run.data.length);
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y,
+							vv = vt(v),
+							height = vv - baselineHeight,
+							h = Math.abs(height),
+							finalTheme = typeof value != "number" ?
+								t.addMixin(theme, "column", value, true) :
+								t.post(theme, "column");
+						if(width >= 1 && h >= 1){
+							var rect = {
+								x: offsets.l + ht(j + 0.5) + gap + shift,
+								y: dim.height - offsets.b - (v > baseline ? vv : baselineHeight),
+								width: width, height: h
+							};
+							var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets);
+							specialFill = this._shapeFill(specialFill, rect);
+							var shape = s.createRect(rect).setFill(specialFill).setStroke(finalTheme.series.stroke);
+							run.dyn.fill   = shape.getFill();
+							run.dyn.stroke = shape.getStroke();
+							if(events){
+								var o = {
+									element: "column",
+									index:   j,
+									run:     run,
+									shape:   shape,
+									x:       j + 0.5,
+									y:       v
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+							if(this.animate){
+								this._animateColumn(shape, dim.height - offsets.b - baselineHeight, h);
+							}
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.ClusteredColumns
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Bars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Bars"] = true;
+dojo.provide("dojox.charting.plot2d.Bars");
+
+
+
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.plot2d.__BarCtorArgs", dojox.charting.plot2d.__DefaultCtorArgs, {
+	//	summary:
+	//		Additional keyword arguments for bar charts.
+
+	//	minBarSize: Number?
+	//		The minimum size for a bar in pixels.  Default is 1.
+	minBarSize: 1,
+
+	//	maxBarSize: Number?
+	//		The maximum size for a bar in pixels.  Default is 1.
+	maxBarSize: 1
+});
+=====*/
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.Bars", dojox.charting.plot2d.Base, {
+		//	summary:
+		//		The plot object representing a bar chart (horizontal bars).
+		defaultParams: {
+			hAxis: "x",		// use a horizontal axis named "x"
+			vAxis: "y",		// use a vertical axis named "y"
+			gap:	0,		// gap between columns in pixels
+			animate: null   // animate bars into place
+		},
+		optionalParams: {
+			minBarSize:	1,	// minimal bar width in pixels
+			maxBarSize:	1,	// maximal bar width in pixels
+			// theme component
+			stroke:		{},
+			outline:	{},
+			shadow:		{},
+			fill:		{},
+			font:		"",
+			fontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		The constructor for a bar chart.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__BarCtorArgs?
+			//		An optional keyword arguments object to help define the plot.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+			this.series = [];
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+			this.animate = this.opt.animate;
+		},
+
+		getSeriesStats: function(){
+			//	summary:
+			//		Calculate the min/max on all attached series in both directions.
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			var stats = dc.collectSimpleStats(this.series), t;
+			stats.hmin -= 0.5;
+			stats.hmax += 0.5;
+			t = stats.hmin, stats.hmin = stats.vmin, stats.vmin = t;
+			t = stats.hmax, stats.hmax = stats.vmax, stats.vmax = t;
+			return stats;
+		},
+
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.Bars
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.dirty = this.isDirty();
+			this.resetEvents();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, height,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				baseline = Math.max(0, this._hScaler.bounds.lower),
+				baselineWidth = ht(baseline),
+				events = this.events();
+			f = dc.calculateBarSize(this._vScaler.bounds.scale, this.opt);
+			gap = f.gap;
+			height = f.size;
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("bar", [this.opt, run]), s = run.group,
+					eventSeries = new Array(run.data.length);
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y,
+							hv = ht(v),
+							width = hv - baselineWidth,
+							w = Math.abs(width),
+							finalTheme = typeof value != "number" ?
+								t.addMixin(theme, "bar", value, true) :
+								t.post(theme, "bar");
+						if(w >= 1 && height >= 1){
+							var rect = {
+								x: offsets.l + (v < baseline ? hv : baselineWidth),
+								y: dim.height - offsets.b - vt(j + 1.5) + gap,
+								width: w, height: height
+							};
+							var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets);
+							specialFill = this._shapeFill(specialFill, rect);
+							var shape = s.createRect(rect).setFill(specialFill).setStroke(finalTheme.series.stroke);
+							run.dyn.fill   = shape.getFill();
+							run.dyn.stroke = shape.getStroke();
+							if(events){
+								var o = {
+									element: "bar",
+									index:   j,
+									run:     run,
+									shape:   shape,
+									x:       v,
+									y:       j + 1.5
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+							if(this.animate){
+								this._animateBar(shape, offsets.l + baselineWidth, -w);
+							}
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Bars
+		},
+		_animateBar: function(shape, hoffset, hsize){
+			dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform: [
+					{name: "translate", start: [hoffset - (hoffset/hsize), 0], end: [0, 0]},
+					{name: "scale", start: [1/hsize, 1], end: [1, 1]},
+					{name: "original"}
+				]
+			}, this.animate)).play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedBars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.StackedBars"] = true;
+dojo.provide("dojox.charting.plot2d.StackedBars");
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.StackedBars", dojox.charting.plot2d.Bars, {
+		//	summary:
+		//		The plot object representing a stacked bar chart (horizontal bars).
+		getSeriesStats: function(){
+			//	summary:
+			//		Calculate the min/max on all attached series in both directions.
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			var stats = dc.collectStackedStats(this.series), t;
+			this._maxRunLength = stats.hmax;
+			stats.hmin -= 0.5;
+			stats.hmax += 0.5;
+			t = stats.hmin, stats.hmin = stats.vmin, stats.vmin = t;
+			t = stats.hmax, stats.hmax = stats.vmax, stats.vmax = t;
+			return stats;
+		},
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.StackedBars
+			//		A reference to this plot for functional chaining.
+			if(this._maxRunLength <= 0){
+				return this;
+			}
+
+			// stack all values
+			var acc = df.repeat(this._maxRunLength, "-> 0", 0);
+			for(var i = 0; i < this.series.length; ++i){
+				var run = this.series[i];
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y;
+						if(isNaN(v)){ v = 0; }
+						acc[j] += v;
+					}
+				}
+			}
+			// draw runs in backwards
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, height,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				events = this.events();
+			f = dc.calculateBarSize(this._vScaler.bounds.scale, this.opt);
+			gap = f.gap;
+			height = f.size;
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("bar", [this.opt, run]), s = run.group,
+					eventSeries = new Array(acc.length);
+				for(var j = 0; j < acc.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = acc[j],
+							width = ht(v),
+							finalTheme = typeof value != "number" ?
+								t.addMixin(theme, "bar", value, true) :
+								t.post(theme, "bar");
+						if(width >= 1 && height >= 1){
+							var rect = {
+								x: offsets.l,
+								y: dim.height - offsets.b - vt(j + 1.5) + gap,
+								width: width, height: height
+							};
+							var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets);
+							specialFill = this._shapeFill(specialFill, rect);
+							var shape = s.createRect(rect).setFill(specialFill).setStroke(finalTheme.series.stroke);
+							run.dyn.fill   = shape.getFill();
+							run.dyn.stroke = shape.getStroke();
+							if(events){
+								var o = {
+									element: "bar",
+									index:   j,
+									run:     run,
+									shape:   shape,
+									x:       v,
+									y:       j + 1.5
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+							if(this.animate){
+								this._animateBar(shape, offsets.l, -width);
+							}
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+				// update the accumulator
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y;
+						if(isNaN(v)){ v = 0; }
+						acc[j] -= v;
+					}
+				}
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.StackedBars
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredBars"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.ClusteredBars"] = true;
+dojo.provide("dojox.charting.plot2d.ClusteredBars");
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.ClusteredBars", dojox.charting.plot2d.Bars, {
+		//	summary:
+		//		A plot representing grouped or clustered bars (horizontal bars)
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.ClusteredBars
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, height, thickness,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				baseline = Math.max(0, this._hScaler.bounds.lower),
+				baselineWidth = ht(baseline),
+				events = this.events();
+			f = dc.calculateBarSize(this._vScaler.bounds.scale, this.opt, this.series.length);
+			gap = f.gap;
+			height = thickness = f.size;
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i], shift = thickness * (this.series.length - i - 1);
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("bar", [this.opt, run]), s = run.group,
+					eventSeries = new Array(run.data.length);
+				for(var j = 0; j < run.data.length; ++j){
+					var value = run.data[j];
+					if(value !== null){
+						var v = typeof value == "number" ? value : value.y,
+							hv = ht(v),
+							width = hv - baselineWidth,
+							w = Math.abs(width),
+							finalTheme = typeof value != "number" ?
+								t.addMixin(theme, "bar", value, true) :
+								t.post(theme, "bar");
+						if(w >= 1 && height >= 1){
+							var rect = {
+								x: offsets.l + (v < baseline ? hv : baselineWidth),
+								y: dim.height - offsets.b - vt(j + 1.5) + gap + shift,
+								width: w, height: height
+							};
+							var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets);
+							specialFill = this._shapeFill(specialFill, rect);
+							var shape = s.createRect(rect).setFill(specialFill).setStroke(finalTheme.series.stroke);
+							run.dyn.fill   = shape.getFill();
+							run.dyn.stroke = shape.getStroke();
+							if(events){
+								var o = {
+									element: "bar",
+									index:   j,
+									run:     run,
+									shape:   shape,
+									x:       v,
+									y:       j + 1.5
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+							if(this.animate){
+								this._animateBar(shape, offsets.l + baselineWidth, -width);
+							}
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.ClusteredBars
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Grid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Grid"] = true;
+dojo.provide("dojox.charting.plot2d.Grid");
+
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.plot2d.__GridCtorArgs", dojox.charting.plot2d.__DefaultCtorArgs, {
+	//	summary:
+	//		A special keyword arguments object that is specific to a grid "plot".
+
+	//	hMajorLines: Boolean?
+	//		Whether to show lines at the major ticks along the horizontal axis. Default is true.
+	hMajorLines: true,
+
+	//	hMinorLines: Boolean?
+	//		Whether to show lines at the minor ticks along the horizontal axis. Default is false.
+	hMinorLines: false,
+
+	//	vMajorLines: Boolean?
+	//		Whether to show lines at the major ticks along the vertical axis. Default is true.
+	vMajorLines: true,
+
+	//	vMinorLines: Boolean?
+	//		Whether to show lines at the major ticks along the vertical axis. Default is false.
+	vMinorLines: false,
+
+	//	hStripes: String?
+	//		Whether or not to show stripes (alternating fills) along the horizontal axis. Default is "none".
+	hStripes: "none",
+
+	//	vStripes: String?
+	//		Whether or not to show stripes (alternating fills) along the vertical axis. Default is "none".
+	vStripes: "none"
+});
+=====*/
+(function(){
+	var du = dojox.lang.utils, dc = dojox.charting.plot2d.common;
+
+	dojo.declare("dojox.charting.plot2d.Grid", dojox.charting.Element, {
+		//	summary:
+		//		A "faux" plot that can be placed behind other plots to represent
+		//		a grid against which other plots can be easily measured.
+		defaultParams: {
+			hAxis: "x",			// use a horizontal axis named "x"
+			vAxis: "y",			// use a vertical axis named "y"
+			hMajorLines: true,	// draw horizontal major lines
+			hMinorLines: false,	// draw horizontal minor lines
+			vMajorLines: true,	// draw vertical major lines
+			vMinorLines: false,	// draw vertical minor lines
+			hStripes: "none",	// TBD
+			vStripes: "none",	// TBD
+			animate: null   // animate bars into place
+		},
+		optionalParams: {},	// no optional parameters
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		Create the faux Grid plot.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__GridCtorArgs?
+			//		An optional keyword arguments object to help define the parameters of the underlying grid.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+			this.dirty = true;
+			this.animate = this.opt.animate;
+			this.zoom = null,
+			this.zoomQueue = [];	// zooming action task queue
+			this.lastWindow = {vscale: 1, hscale: 1, xoffset: 0, yoffset: 0};
+		},
+		clear: function(){
+			//	summary:
+			//		Clear out any parameters set on this plot.
+			//	returns: dojox.charting.plot2d.Grid
+			//		The reference to this plot for functional chaining.
+			this._hAxis = null;
+			this._vAxis = null;
+			this.dirty = true;
+			return this;	//	dojox.charting.plot2d.Grid
+		},
+		setAxis: function(axis){
+			//	summary:
+			//		Set an axis for this plot.
+			//	returns: dojox.charting.plot2d.Grid
+			//		The reference to this plot for functional chaining.
+			if(axis){
+				this[axis.vertical ? "_vAxis" : "_hAxis"] = axis;
+			}
+			return this;	//	dojox.charting.plot2d.Grid
+		},
+		addSeries: function(run){
+			//	summary:
+			//		Ignored but included as a dummy method.
+			//	returns: dojox.charting.plot2d.Grid
+			//		The reference to this plot for functional chaining.
+			return this;	//	dojox.charting.plot2d.Grid
+		},
+		getSeriesStats: function(){
+			//	summary:
+			//		Returns default stats (irrelevant for this type of plot).
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			return dojo.delegate(dc.defaultStats);
+		},
+		initializeScalers: function(){
+			//	summary:
+			//		Does nothing (irrelevant for this type of plot).
+			return this;
+		},
+		isDirty: function(){
+			//	summary:
+			//		Return whether or not this plot needs to be redrawn.
+			//	returns: Boolean
+			//		If this plot needs to be rendered, this will return true.
+			return this.dirty || this._hAxis && this._hAxis.dirty || this._vAxis && this._vAxis.dirty;	//	Boolean
+		},
+		performZoom: function(dim, offsets){
+			//	summary:
+			//		Create/alter any zooming windows on this plot.
+			//	dim: Object
+			//		An object of the form { width, height }.
+			//	offsets: Object
+			//		An object of the form { l, r, t, b }.
+			//	returns: dojox.charting.plot2d.Grid
+			//		A reference to this plot for functional chaining.
+
+			// get current zooming various
+			var vs = this._vAxis.scale || 1,
+				hs = this._hAxis.scale || 1,
+				vOffset = dim.height - offsets.b,
+				hBounds = this._hAxis.getScaler().bounds,
+				xOffset = (hBounds.from - hBounds.lower) * hBounds.scale,
+				vBounds = this._vAxis.getScaler().bounds,
+				yOffset = (vBounds.from - vBounds.lower) * vBounds.scale;
+				// get incremental zooming various
+				rVScale = vs / this.lastWindow.vscale,
+				rHScale = hs / this.lastWindow.hscale,
+				rXOffset = (this.lastWindow.xoffset - xOffset)/
+					((this.lastWindow.hscale == 1)? hs : this.lastWindow.hscale),
+				rYOffset = (yOffset - this.lastWindow.yoffset)/
+					((this.lastWindow.vscale == 1)? vs : this.lastWindow.vscale),
+
+				shape = this.group,
+				anim = dojox.gfx.fx.animateTransform(dojo.delegate({
+					shape: shape,
+					duration: 1200,
+					transform:[
+						{name:"translate", start:[0, 0], end: [offsets.l * (1 - rHScale), vOffset * (1 - rVScale)]},
+						{name:"scale", start:[1, 1], end: [rHScale, rVScale]},
+						{name:"original"},
+						{name:"translate", start: [0, 0], end: [rXOffset, rYOffset]}
+					]}, this.zoom));
+
+			dojo.mixin(this.lastWindow, {vscale: vs, hscale: hs, xoffset: xOffset, yoffset: yOffset});
+			//add anim to zooming action queue,
+			//in order to avoid several zooming action happened at the same time
+			this.zoomQueue.push(anim);
+			//perform each anim one by one in zoomQueue
+			dojo.connect(anim, "onEnd", this, function(){
+				this.zoom = null;
+				this.zoomQueue.shift();
+				if(this.zoomQueue.length > 0){
+					this.zoomQueue[0].play();
+				}
+			});
+			if(this.zoomQueue.length == 1){
+				this.zoomQueue[0].play();
+			}
+			return this;	//	dojox.charting.plot2d.Grid
+		},
+		getRequiredColors: function(){
+			//	summary:
+			//		Ignored but included as a dummy method.
+			//	returns: Number
+			//		Returns 0, since there are no series associated with this plot type.
+			return 0;	//	Number
+		},
+		render: function(dim, offsets){
+			//	summary:
+			//		Render the plot on the chart.
+			//	dim: Object
+			//		An object of the form { width, height }.
+			//	offsets: Object
+			//		An object of the form { l, r, t, b }.
+			//	returns: dojox.charting.plot2d.Grid
+			//		A reference to this plot for functional chaining.
+			if(this.zoom){
+				return this.performZoom(dim, offsets);
+			}
+			this.dirty = this.isDirty();
+			if(!this.dirty){ return this; }
+			this.cleanGroup();
+			var s = this.group, ta = this.chart.theme.axis;
+			// draw horizontal stripes and lines
+			try{
+				var vScaler = this._vAxis.getScaler(),
+					vt = vScaler.scaler.getTransformerFromModel(vScaler),
+					ticks = this._vAxis.getTicks();
+				if(this.opt.hMinorLines){
+					dojo.forEach(ticks.minor, function(tick){
+						var y = dim.height - offsets.b - vt(tick.value);
+						var hMinorLine = s.createLine({
+							x1: offsets.l,
+							y1: y,
+							x2: dim.width - offsets.r,
+							y2: y
+						}).setStroke(ta.minorTick);
+						if(this.animate){
+							this._animateGrid(hMinorLine, "h", offsets.l, offsets.r + offsets.l - dim.width);
+						}
+					}, this);
+				}
+				if(this.opt.hMajorLines){
+					dojo.forEach(ticks.major, function(tick){
+						var y = dim.height - offsets.b - vt(tick.value);
+						var hMajorLine = s.createLine({
+							x1: offsets.l,
+							y1: y,
+							x2: dim.width - offsets.r,
+							y2: y
+						}).setStroke(ta.majorTick);
+						if(this.animate){
+							this._animateGrid(hMajorLine, "h", offsets.l, offsets.r + offsets.l - dim.width);
+						}
+					}, this);
+				}
+			}catch(e){
+				// squelch
+			}
+			// draw vertical stripes and lines
+			try{
+				var hScaler = this._hAxis.getScaler(),
+					ht = hScaler.scaler.getTransformerFromModel(hScaler),
+					ticks = this._hAxis.getTicks();
+				if(ticks && this.opt.vMinorLines){
+					dojo.forEach(ticks.minor, function(tick){
+						var x = offsets.l + ht(tick.value);
+						var vMinorLine = s.createLine({
+							x1: x,
+							y1: offsets.t,
+							x2: x,
+							y2: dim.height - offsets.b
+						}).setStroke(ta.minorTick);
+						if(this.animate){
+							this._animateGrid(vMinorLine, "v", dim.height - offsets.b, dim.height - offsets.b - offsets.t);
+						}
+					}, this);
+				}
+				if(ticks && this.opt.vMajorLines){
+					dojo.forEach(ticks.major, function(tick){
+						var x = offsets.l + ht(tick.value);
+						var vMajorLine = s.createLine({
+							x1: x,
+							y1: offsets.t,
+							x2: x,
+							y2: dim.height - offsets.b
+						}).setStroke(ta.majorTick);
+						if(this.animate){
+							this._animateGrid(vMajorLine, "v", dim.height - offsets.b, dim.height - offsets.b - offsets.t);
+						}
+					}, this);
+				}
+			}catch(e){
+				// squelch
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Grid
+		},
+		_animateGrid: function(shape, type, offset, size){
+			var transStart = type == "h" ? [offset, 0] : [0, offset];
+			var scaleStart = type == "h" ? [1/size, 1] : [1, 1/size];
+			dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform: [
+					{name: "translate", start: transStart, end: [0, 0]},
+					{name: "scale", start: scaleStart, end: [1, 1]},
+					{name: "original"}
+				]
+			}, this.animate)).play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.i18n"] = true;
+dojo.provide("dojo.i18n");
+
+/*=====
+dojo.i18n = {
+	// summary: Utility classes to enable loading of resources for internationalization (i18n)
+};
+=====*/
+
+dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
+	//	summary:
+	//		Returns an Object containing the localization for a given resource
+	//		bundle in a package, matching the specified locale.
+	//	description:
+	//		Returns a hash containing name/value pairs in its prototypesuch
+	//		that values can be easily overridden.  Throws an exception if the
+	//		bundle is not found.  Bundle must have already been loaded by
+	//		`dojo.requireLocalization()` or by a build optimization step.  NOTE:
+	//		try not to call this method as part of an object property
+	//		definition (`var foo = { bar: dojo.i18n.getLocalization() }`).  In
+	//		some loading situations, the bundle may not be available in time
+	//		for the object definition.  Instead, call this method inside a
+	//		function that is run after all modules load or the page loads (like
+	//		in `dojo.addOnLoad()`), or in a widget lifecycle method.
+	//	packageName:
+	//		package which is associated with this resource
+	//	bundleName:
+	//		the base filename of the resource bundle (without the ".js" suffix)
+	//	locale:
+	//		the variant to load (optional).  By default, the locale defined by
+	//		the host environment: dojo.locale
+
+	locale = dojo.i18n.normalizeLocale(locale);
+
+	// look for nearest locale match
+	var elements = locale.split('-');
+	var module = [packageName,"nls",bundleName].join('.');
+	var bundle = dojo._loadedModules[module];
+	if(bundle){
+		var localization;
+		for(var i = elements.length; i > 0; i--){
+			var loc = elements.slice(0, i).join('_');
+			if(bundle[loc]){
+				localization = bundle[loc];
+				break;
+			}
+		}
+		if(!localization){
+			localization = bundle.ROOT;
+		}
+
+		// make a singleton prototype so that the caller won't accidentally change the values globally
+		if(localization){
+			var clazz = function(){};
+			clazz.prototype = localization;
+			return new clazz(); // Object
+		}
+	}
+
+	throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
+};
+
+dojo.i18n.normalizeLocale = function(/*String?*/locale){
+	//	summary:
+	//		Returns canonical form of locale, as used by Dojo.
+	//
+	//  description:
+	//		All variants are case-insensitive and are separated by '-' as specified in [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
+	//		If no locale is specified, the dojo.locale is returned.  dojo.locale is defined by
+	//		the user agent's locale unless overridden by djConfig.
+
+	var result = locale ? locale.toLowerCase() : dojo.locale;
+	if(result == "root"){
+		result = "ROOT";
+	}
+	return result; // String
+};
+
+dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
+	//	summary:
+	//		See dojo.requireLocalization()
+	//	description:
+	// 		Called by the bootstrap, but factored out so that it is only
+	// 		included in the build when needed.
+
+	var targetLocale = dojo.i18n.normalizeLocale(locale);
+ 	var bundlePackage = [moduleName, "nls", bundleName].join(".");
+	// NOTE: 
+	//		When loading these resources, the packaging does not match what is
+	//		on disk.  This is an implementation detail, as this is just a
+	//		private data structure to hold the loaded resources.  e.g.
+	//		`tests/hello/nls/en-us/salutations.js` is loaded as the object
+	//		`tests.hello.nls.salutations.en_us={...}` The structure on disk is
+	//		intended to be most convenient for developers and translators, but
+	//		in memory it is more logical and efficient to store in a different
+	//		order.  Locales cannot use dashes, since the resulting path will
+	//		not evaluate as valid JS, so we translate them to underscores.
+	
+	//Find the best-match locale to load if we have available flat locales.
+	var bestLocale = "";
+	if(availableFlatLocales){
+		var flatLocales = availableFlatLocales.split(",");
+		for(var i = 0; i < flatLocales.length; i++){
+			//Locale must match from start of string.
+			//Using ["indexOf"] so customBase builds do not see
+			//this as a dojo._base.array dependency.
+			if(targetLocale["indexOf"](flatLocales[i]) == 0){
+				if(flatLocales[i].length > bestLocale.length){
+					bestLocale = flatLocales[i];
+				}
+			}
+		}
+		if(!bestLocale){
+			bestLocale = "ROOT";
+		}		
+	}
+
+	//See if the desired locale is already loaded.
+	var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
+	var bundle = dojo._loadedModules[bundlePackage];
+	var localizedBundle = null;
+	if(bundle){
+		if(dojo.config.localizationComplete && bundle._built){return;}
+		var jsLoc = tempLocale.replace(/-/g, '_');
+		var translationPackage = bundlePackage+"."+jsLoc;
+		localizedBundle = dojo._loadedModules[translationPackage];
+	}
+
+	if(!localizedBundle){
+		bundle = dojo["provide"](bundlePackage);
+		var syms = dojo._getModuleSymbols(moduleName);
+		var modpath = syms.concat("nls").join("/");
+		var parent;
+
+		dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function(loc){
+			var jsLoc = loc.replace(/-/g, '_');
+			var translationPackage = bundlePackage + "." + jsLoc;
+			var loaded = false;
+			if(!dojo._loadedModules[translationPackage]){
+				// Mark loaded whether it's found or not, so that further load attempts will not be made
+				dojo["provide"](translationPackage);
+				var module = [modpath];
+				if(loc != "ROOT"){module.push(loc);}
+				module.push(bundleName);
+				var filespec = module.join("/") + '.js';
+				loaded = dojo._loadPath(filespec, null, function(hash){
+					// Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
+					var clazz = function(){};
+					clazz.prototype = parent;
+					bundle[jsLoc] = new clazz();
+					for(var j in hash){ bundle[jsLoc][j] = hash[j]; }
+				});
+			}else{
+				loaded = true;
+			}
+			if(loaded && bundle[jsLoc]){
+				parent = bundle[jsLoc];
+			}else{
+				bundle[jsLoc] = parent;
+			}
+			
+			if(availableFlatLocales){
+				//Stop the locale path searching if we know the availableFlatLocales, since
+				//the first call to this function will load the only bundle that is needed.
+				return true;
+			}
+		});
+	}
+
+	//Save the best locale bundle as the target locale bundle when we know the
+	//the available bundles.
+	if(availableFlatLocales && targetLocale != bestLocale){
+		bundle[targetLocale.replace(/-/g, '_')] = bundle[bestLocale.replace(/-/g, '_')];
+	}
+};
+
+(function(){
+	// If other locales are used, dojo.requireLocalization should load them as
+	// well, by default. 
+	// 
+	// Override dojo.requireLocalization to do load the default bundle, then
+	// iterate through the extraLocale list and load those translations as
+	// well, unless a particular locale was requested.
+
+	var extra = dojo.config.extraLocale;
+	if(extra){
+		if(!extra instanceof Array){
+			extra = [extra];
+		}
+
+		var req = dojo.i18n._requireLocalization;
+		dojo.i18n._requireLocalization = function(m, b, locale, availableFlatLocales){
+			req(m,b,locale, availableFlatLocales);
+			if(locale){return;}
+			for(var i=0; i<extra.length; i++){
+				req(m,b,extra[i], availableFlatLocales);
+			}
+		};
+	}
+})();
+
+dojo.i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
+	//	summary:
+	//		A helper method to assist in searching for locale-based resources.
+	//		Will iterate through the variants of a particular locale, either up
+	//		or down, executing a callback function.  For example, "en-us" and
+	//		true will try "en-us" followed by "en" and finally "ROOT".
+
+	locale = dojo.i18n.normalizeLocale(locale);
+
+	var elements = locale.split('-');
+	var searchlist = [];
+	for(var i = elements.length; i > 0; i--){
+		searchlist.push(elements.slice(0, i).join('-'));
+	}
+	searchlist.push(false);
+	if(down){searchlist.reverse();}
+
+	for(var j = searchlist.length - 1; j >= 0; j--){
+		var loc = searchlist[j] || "ROOT";
+		var stop = searchFunc(loc);
+		if(stop){ break; }
+	}
+};
+
+dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){
+	//	summary:
+	//		Load built, flattened resource bundles, if available for all
+	//		locales used in the page. Only called by built layer files.
+
+	function preload(locale){
+		locale = dojo.i18n.normalizeLocale(locale);
+		dojo.i18n._searchLocalePath(locale, true, function(loc){
+			for(var i=0; i<localesGenerated.length;i++){
+				if(localesGenerated[i] == loc){
+					dojo["require"](bundlePrefix+"_"+loc);
+					return true; // Boolean
+				}
+			}
+			return false; // Boolean
+		});
+	}
+	preload();
+	var extra = dojo.config.extraLocale||[];
+	for(var i=0; i<extra.length; i++){
+		preload(extra[i]);
+	}
+};
+
+}
+
+if(!dojo._hasResource["dojo.regexp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.regexp"] = true;
+dojo.provide("dojo.regexp");
+
+/*=====
+dojo.regexp = {
+	// summary: Regular expressions and Builder resources
+};
+=====*/
+
+dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){
+	//	summary:
+	//		Adds escape sequences for special characters in regular expressions
+	// except:
+	//		a String with special characters to be left unescaped
+
+	return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, function(ch){
+		if(except && except.indexOf(ch) != -1){
+			return ch;
+		}
+		return "\\" + ch;
+	}); // String
+}
+
+dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
+	//	summary:
+	//		Builds a regular expression that groups subexpressions
+	//	description:
+	//		A utility function used by some of the RE generators. The
+	//		subexpressions are constructed by the function, re, in the second
+	//		parameter.  re builds one subexpression for each elem in the array
+	//		a, in the first parameter. Returns a string for a regular
+	//		expression that groups all the subexpressions.
+	// arr:
+	//		A single value or an array of values.
+	// re:
+	//		A function. Takes one parameter and converts it to a regular
+	//		expression. 
+	// nonCapture:
+	//		If true, uses non-capturing match, otherwise matches are retained
+	//		by regular expression. Defaults to false
+
+	// case 1: a is a single value.
+	if(!(arr instanceof Array)){
+		return re(arr); // String
+	}
+
+	// case 2: a is an array
+	var b = [];
+	for(var i = 0; i < arr.length; i++){
+		// convert each elem to a RE
+		b.push(re(arr[i]));
+	}
+
+	 // join the REs as alternatives in a RE group.
+	return dojo.regexp.group(b.join("|"), nonCapture); // String
+}
+
+dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
+	// summary:
+	//		adds group match to expression
+	// nonCapture:
+	//		If true, uses non-capturing match, otherwise matches are retained
+	//		by regular expression. 
+	return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
+}
+
+}
+
+if(!dojo._hasResource["dojo.number"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.number"] = true;
+dojo.provide("dojo.number");
+
+
+
+
+
+
+
+/*=====
+dojo.number = {
+	// summary: localized formatting and parsing routines for Number
+}
+
+dojo.number.__FormatOptions = function(){
+	//	pattern: String?
+	//		override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	//		with this string.  Default value is based on locale.  Overriding this property will defeat
+	//		localization.  Literal characters in patterns are not supported.
+	//	type: String?
+	//		choose a format type based on the locale from the following:
+	//		decimal, scientific (not yet supported), percent, currency. decimal by default.
+	//	places: Number?
+	//		fixed number of decimal places to show.  This overrides any
+	//		information in the provided pattern.
+	//	round: Number?
+	//		5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
+	//		means do not round.
+	//	locale: String?
+	//		override the locale used to determine formatting rules
+	//	fractional: Boolean?
+	//		If false, show no decimal places, overriding places and pattern settings.
+	this.pattern = pattern;
+	this.type = type;
+	this.places = places;
+	this.round = round;
+	this.locale = locale;
+	this.fractional = fractional;
+}
+=====*/
+
+dojo.number.format = function(/*Number*/value, /*dojo.number.__FormatOptions?*/options){
+	// summary:
+	//		Format a Number as a String, using locale-specific settings
+	// description:
+	//		Create a string from a Number using a known localized pattern.
+	//		Formatting patterns appropriate to the locale are chosen from the
+	//		[Common Locale Data Repository](http://unicode.org/cldr) as well as the appropriate symbols and
+	//		delimiters.
+	//		If value is Infinity, -Infinity, or is not a valid JavaScript number, return null.
+	// value:
+	//		the number to be formatted
+
+	options = dojo.mixin({}, options || {});
+	var locale = dojo.i18n.normalizeLocale(options.locale),
+		bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale);
+	options.customs = bundle;
+	var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"];
+	if(isNaN(value) || Math.abs(value) == Infinity){ return null; } // null
+	return dojo.number._applyPattern(value, pattern, options); // String
+};
+
+//dojo.number._numberPatternRE = /(?:[#0]*,?)*[#0](?:\.0*#*)?/; // not precise, but good enough
+dojo.number._numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/; // not precise, but good enough
+
+dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatOptions?*/options){
+	// summary:
+	//		Apply pattern to format value as a string using options. Gives no
+	//		consideration to local customs.
+	// value:
+	//		the number to be formatted.
+	// pattern:
+	//		a pattern string as described by
+	//		[unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	// options: dojo.number.__FormatOptions?
+	//		_applyPattern is usually called via `dojo.number.format()` which
+	//		populates an extra property in the options parameter, "customs".
+	//		The customs object specifies group and decimal parameters if set.
+
+	//TODO: support escapes
+	options = options || {};
+	var group = options.customs.group,
+		decimal = options.customs.decimal,
+		patternList = pattern.split(';'),
+		positivePattern = patternList[0];
+	pattern = patternList[(value < 0) ? 1 : 0] || ("-" + positivePattern);
+
+	//TODO: only test against unescaped
+	if(pattern.indexOf('%') != -1){
+		value *= 100;
+	}else if(pattern.indexOf('\u2030') != -1){
+		value *= 1000; // per mille
+	}else if(pattern.indexOf('\u00a4') != -1){
+		group = options.customs.currencyGroup || group;//mixins instead?
+		decimal = options.customs.currencyDecimal || decimal;// Should these be mixins instead?
+		pattern = pattern.replace(/\u00a4{1,3}/, function(match){
+			var prop = ["symbol", "currency", "displayName"][match.length-1];
+			return options[prop] || options.currency || "";
+		});
+	}else if(pattern.indexOf('E') != -1){
+		throw new Error("exponential notation not supported");
+	}
+	
+	//TODO: support @ sig figs?
+	var numberPatternRE = dojo.number._numberPatternRE;
+	var numberPattern = positivePattern.match(numberPatternRE);
+	if(!numberPattern){
+		throw new Error("unable to find a number expression in pattern: "+pattern);
+	}
+	if(options.fractional === false){ options.places = 0; }
+	return pattern.replace(numberPatternRE,
+		dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round}));
+}
+
+dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/increment){
+	//	summary:
+	//		Rounds to the nearest value with the given number of decimal places, away from zero
+	//	description:
+	//		Rounds to the nearest value with the given number of decimal places, away from zero if equal.
+	//		Similar to Number.toFixed(), but compensates for browser quirks. Rounding can be done by
+	//		fractional increments also, such as the nearest quarter.
+	//		NOTE: Subject to floating point errors.  See dojox.math.round for experimental workaround.
+	//	value:
+	//		The number to round
+	//	places:
+	//		The number of decimal places where rounding takes place.  Defaults to 0 for whole rounding.
+	//		Must be non-negative.
+	//	increment:
+	//		Rounds next place to nearest value of increment/10.  10 by default.
+	//	example:
+	//		>>> dojo.number.round(-0.5)
+	//		-1
+	//		>>> dojo.number.round(162.295, 2)
+	//		162.29  // note floating point error.  Should be 162.3
+	//		>>> dojo.number.round(10.71, 0, 2.5)
+	//		10.75
+	var factor = 10 / (increment || 10);
+	return (factor * +value).toFixed(places) / factor; // Number
+}
+
+if((0.9).toFixed() == 0){
+	// (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit
+	// is just after the rounding place and is >=5
+	(function(){
+		var round = dojo.number.round;
+		dojo.number.round = function(v, p, m){
+			var d = Math.pow(10, -p || 0), a = Math.abs(v);
+			if(!v || a >= d || a * Math.pow(10, p + 1) < 5){
+				d = 0;
+			}
+			return round(v, p, m) + (v > 0 ? d : -d);
+		}
+	})();
+}
+
+/*=====
+dojo.number.__FormatAbsoluteOptions = function(){
+	//	decimal: String?
+	//		the decimal separator
+	//	group: String?
+	//		the group separator
+	//	places: Number?|String?
+	//		number of decimal places.  the range "n,m" will format to m places.
+	//	round: Number?
+	//		5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
+	//		means don't round.
+	this.decimal = decimal;
+	this.group = group;
+	this.places = places;
+	this.round = round;
+}
+=====*/
+
+dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){
+	// summary: 
+	//		Apply numeric pattern to absolute value using options. Gives no
+	//		consideration to local customs.
+	// value:
+	//		the number to be formatted, ignores sign
+	// pattern:
+	//		the number portion of a pattern (e.g. `#,##0.00`)
+	options = options || {};
+	if(options.places === true){options.places=0;}
+	if(options.places === Infinity){options.places=6;} // avoid a loop; pick a limit
+
+	var patternParts = pattern.split("."),
+		comma = typeof options.places == "string" && options.places.indexOf(","),
+		maxPlaces = options.places;
+	if(comma){
+		maxPlaces = options.places.substring(comma + 1);
+	}else if(!(maxPlaces >= 0)){
+		maxPlaces = (patternParts[1] || []).length;
+	}
+	if(!(options.round < 0)){
+		value = dojo.number.round(value, maxPlaces, options.round);
+	}
+
+	var valueParts = String(Math.abs(value)).split("."),
+		fractional = valueParts[1] || "";
+	if(patternParts[1] || options.places){
+		if(comma){
+			options.places = options.places.substring(0, comma);
+		}
+		// Pad fractional with trailing zeros
+		var pad = options.places !== undefined ? options.places : (patternParts[1] && patternParts[1].lastIndexOf("0") + 1);
+		if(pad > fractional.length){
+			valueParts[1] = dojo.string.pad(fractional, pad, '0', true);
+		}
+
+		// Truncate fractional
+		if(maxPlaces < fractional.length){
+			valueParts[1] = fractional.substr(0, maxPlaces);
+		}
+	}else{
+		if(valueParts[1]){ valueParts.pop(); }
+	}
+
+	// Pad whole with leading zeros
+	var patternDigits = patternParts[0].replace(',', '');
+	pad = patternDigits.indexOf("0");
+	if(pad != -1){
+		pad = patternDigits.length - pad;
+		if(pad > valueParts[0].length){
+			valueParts[0] = dojo.string.pad(valueParts[0], pad);
+		}
+
+		// Truncate whole
+		if(patternDigits.indexOf("#") == -1){
+			valueParts[0] = valueParts[0].substr(valueParts[0].length - pad);
+		}
+	}
+
+	// Add group separators
+	var index = patternParts[0].lastIndexOf(','),
+		groupSize, groupSize2;
+	if(index != -1){
+		groupSize = patternParts[0].length - index - 1;
+		var remainder = patternParts[0].substr(0, index);
+		index = remainder.lastIndexOf(',');
+		if(index != -1){
+			groupSize2 = remainder.length - index - 1;
+		}
+	}
+	var pieces = [];
+	for(var whole = valueParts[0]; whole;){
+		var off = whole.length - groupSize;
+		pieces.push((off > 0) ? whole.substr(off) : whole);
+		whole = (off > 0) ? whole.slice(0, off) : "";
+		if(groupSize2){
+			groupSize = groupSize2;
+			delete groupSize2;
+		}
+	}
+	valueParts[0] = pieces.reverse().join(options.group || ",");
+
+	return valueParts.join(options.decimal || ".");
+};
+
+/*=====
+dojo.number.__RegexpOptions = function(){
+	//	pattern: String?
+	//		override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	//		with this string.  Default value is based on locale.  Overriding this property will defeat
+	//		localization.
+	//	type: String?
+	//		choose a format type based on the locale from the following:
+	//		decimal, scientific (not yet supported), percent, currency. decimal by default.
+	//	locale: String?
+	//		override the locale used to determine formatting rules
+	//	strict: Boolean?
+	//		strict parsing, false by default.  Strict parsing requires input as produced by the format() method.
+	//		Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators
+	//	places: Number|String?
+	//		number of decimal places to accept: Infinity, a positive number, or
+	//		a range "n,m".  Defined by pattern or Infinity if pattern not provided.
+	this.pattern = pattern;
+	this.type = type;
+	this.locale = locale;
+	this.strict = strict;
+	this.places = places;
+}
+=====*/
+dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){
+	//	summary:
+	//		Builds the regular needed to parse a number
+	//	description:
+	//		Returns regular expression with positive and negative match, group
+	//		and decimal separators
+	return dojo.number._parseInfo(options).regexp; // String
+}
+
+dojo.number._parseInfo = function(/*Object?*/options){
+	options = options || {};
+	var locale = dojo.i18n.normalizeLocale(options.locale),
+		bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale),
+		pattern = options.pattern || bundle[(options.type || "decimal") + "Format"],
+//TODO: memoize?
+		group = bundle.group,
+		decimal = bundle.decimal,
+		factor = 1;
+
+	if(pattern.indexOf('%') != -1){
+		factor /= 100;
+	}else if(pattern.indexOf('\u2030') != -1){
+		factor /= 1000; // per mille
+	}else{
+		var isCurrency = pattern.indexOf('\u00a4') != -1;
+		if(isCurrency){
+			group = bundle.currencyGroup || group;
+			decimal = bundle.currencyDecimal || decimal;
+		}
+	}
+
+	//TODO: handle quoted escapes
+	var patternList = pattern.split(';');
+	if(patternList.length == 1){
+		patternList.push("-" + patternList[0]);
+	}
+
+	var re = dojo.regexp.buildGroupRE(patternList, function(pattern){
+		pattern = "(?:"+dojo.regexp.escapeString(pattern, '.')+")";
+		return pattern.replace(dojo.number._numberPatternRE, function(format){
+			var flags = {
+				signed: false,
+				separator: options.strict ? group : [group,""],
+				fractional: options.fractional,
+				decimal: decimal,
+				exponent: false
+				},
+
+				parts = format.split('.'),
+				places = options.places;
+
+			// special condition for percent (factor != 1)
+			// allow decimal places even if not specified in pattern
+			if(parts.length == 1 && factor != 1){
+			    parts[1] = "###";
+			}
+			if(parts.length == 1 || places === 0){
+				flags.fractional = false;
+			}else{
+				if(places === undefined){ places = options.pattern ? parts[1].lastIndexOf('0') + 1 : Infinity; }
+				if(places && options.fractional == undefined){flags.fractional = true;} // required fractional, unless otherwise specified
+				if(!options.places && (places < parts[1].length)){ places += "," + parts[1].length; }
+				flags.places = places;
+			}
+			var groups = parts[0].split(',');
+			if(groups.length > 1){
+				flags.groupSize = groups.pop().length;
+				if(groups.length > 1){
+					flags.groupSize2 = groups.pop().length;
+				}
+			}
+			return "("+dojo.number._realNumberRegexp(flags)+")";
+		});
+	}, true);
+
+	if(isCurrency){
+		// substitute the currency symbol for the placeholder in the pattern
+		re = re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g, function(match, before, target, after){
+			var prop = ["symbol", "currency", "displayName"][target.length-1],
+				symbol = dojo.regexp.escapeString(options[prop] || options.currency || "");
+			before = before ? "[\\s\\xa0]" : "";
+			after = after ? "[\\s\\xa0]" : "";
+			if(!options.strict){
+				if(before){before += "*";}
+				if(after){after += "*";}
+				return "(?:"+before+symbol+after+")?";
+			}
+			return before+symbol+after;
+		});
+	}
+
+//TODO: substitute localized sign/percent/permille/etc.?
+
+	// normalize whitespace and return
+	return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object
+}
+
+/*=====
+dojo.number.__ParseOptions = function(){
+	//	pattern: String?
+	//		override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+	//		with this string.  Default value is based on locale.  Overriding this property will defeat
+	//		localization.  Literal characters in patterns are not supported.
+	//	type: String?
+	//		choose a format type based on the locale from the following:
+	//		decimal, scientific (not yet supported), percent, currency. decimal by default.
+	//	locale: String?
+	//		override the locale used to determine formatting rules
+	//	strict: Boolean?
+	//		strict parsing, false by default.  Strict parsing requires input as produced by the format() method.
+	//		Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators
+	//	fractional: Boolean?|Array?
+	//		Whether to include the fractional portion, where the number of decimal places are implied by pattern
+	//		or explicit 'places' parameter.  The value [true,false] makes the fractional portion optional.
+	this.pattern = pattern;
+	this.type = type;
+	this.locale = locale;
+	this.strict = strict;
+	this.fractional = fractional;
+}
+=====*/
+dojo.number.parse = function(/*String*/expression, /*dojo.number.__ParseOptions?*/options){
+	// summary:
+	//		Convert a properly formatted string to a primitive Number, using
+	//		locale-specific settings.
+	// description:
+	//		Create a Number from a string using a known localized pattern.
+	//		Formatting patterns are chosen appropriate to the locale
+	//		and follow the syntax described by
+	//		[unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns)
+    	//		Note that literal characters in patterns are not supported.
+	// expression:
+	//		A string representation of a Number
+	var info = dojo.number._parseInfo(options),
+		results = (new RegExp("^"+info.regexp+"$")).exec(expression);
+	if(!results){
+		return NaN; //NaN
+	}
+	var absoluteMatch = results[1]; // match for the positive expression
+	if(!results[1]){
+		if(!results[2]){
+			return NaN; //NaN
+		}
+		// matched the negative pattern
+		absoluteMatch =results[2];
+		info.factor *= -1;
+	}
+
+	// Transform it to something Javascript can parse as a number.  Normalize
+	// decimal point and strip out group separators or alternate forms of whitespace
+	absoluteMatch = absoluteMatch.
+		replace(new RegExp("["+info.group + "\\s\\xa0"+"]", "g"), "").
+		replace(info.decimal, ".");
+	// Adjust for negative sign, percent, etc. as necessary
+	return absoluteMatch * info.factor; //Number
+};
+
+/*=====
+dojo.number.__RealNumberRegexpFlags = function(){
+	//	places: Number?
+	//		The integer number of decimal places or a range given as "n,m".  If
+	//		not given, the decimal part is optional and the number of places is
+	//		unlimited.
+	//	decimal: String?
+	//		A string for the character used as the decimal point.  Default
+	//		is ".".
+	//	fractional: Boolean?|Array?
+	//		Whether decimal places are used.  Can be true, false, or [true,
+	//		false].  Default is [true, false] which means optional.
+	//	exponent: Boolean?|Array?
+	//		Express in exponential notation.  Can be true, false, or [true,
+	//		false]. Default is [true, false], (i.e. will match if the
+	//		exponential part is present are not).
+	//	eSigned: Boolean?|Array?
+	//		The leading plus-or-minus sign on the exponent.  Can be true,
+	//		false, or [true, false].  Default is [true, false], (i.e. will
+	//		match if it is signed or unsigned).  flags in regexp.integer can be
+	//		applied.
+	this.places = places;
+	this.decimal = decimal;
+	this.fractional = fractional;
+	this.exponent = exponent;
+	this.eSigned = eSigned;
+}
+=====*/
+
+dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*/flags){
+	// summary:
+	//		Builds a regular expression to match a real number in exponential
+	//		notation
+
+	// assign default values to missing parameters
+	flags = flags || {};
+	//TODO: use mixin instead?
+	if(!("places" in flags)){ flags.places = Infinity; }
+	if(typeof flags.decimal != "string"){ flags.decimal = "."; }
+	if(!("fractional" in flags) || /^0/.test(flags.places)){ flags.fractional = [true, false]; }
+	if(!("exponent" in flags)){ flags.exponent = [true, false]; }
+	if(!("eSigned" in flags)){ flags.eSigned = [true, false]; }
+
+	var integerRE = dojo.number._integerRegexp(flags),
+		decimalRE = dojo.regexp.buildGroupRE(flags.fractional,
+		function(q){
+			var re = "";
+			if(q && (flags.places!==0)){
+				re = "\\" + flags.decimal;
+				if(flags.places == Infinity){ 
+					re = "(?:" + re + "\\d+)?"; 
+				}else{
+					re += "\\d{" + flags.places + "}"; 
+				}
+			}
+			return re;
+		},
+		true
+	);
+
+	var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
+		function(q){ 
+			if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; }
+			return ""; 
+		}
+	);
+
+	var realRE = integerRE + decimalRE;
+	// allow for decimals without integers, e.g. .25
+	if(decimalRE){realRE = "(?:(?:"+ realRE + ")|(?:" + decimalRE + "))";}
+	return realRE + exponentRE; // String
+};
+
+/*=====
+dojo.number.__IntegerRegexpFlags = function(){
+	//	signed: Boolean?
+	//		The leading plus-or-minus sign. Can be true, false, or `[true,false]`.
+	//		Default is `[true, false]`, (i.e. will match if it is signed
+	//		or unsigned).
+	//	separator: String?
+	//		The character used as the thousands separator. Default is no
+	//		separator. For more than one symbol use an array, e.g. `[",", ""]`,
+	//		makes ',' optional.
+	//	groupSize: Number?
+	//		group size between separators
+	//	groupSize2: Number?
+	//		second grouping, where separators 2..n have a different interval than the first separator (for India)
+	this.signed = signed;
+	this.separator = separator;
+	this.groupSize = groupSize;
+	this.groupSize2 = groupSize2;
+}
+=====*/
+
+dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){
+	// summary: 
+	//		Builds a regular expression that matches an integer
+
+	// assign default values to missing parameters
+	flags = flags || {};
+	if(!("signed" in flags)){ flags.signed = [true, false]; }
+	if(!("separator" in flags)){
+		flags.separator = "";
+	}else if(!("groupSize" in flags)){
+		flags.groupSize = 3;
+	}
+
+	var signRE = dojo.regexp.buildGroupRE(flags.signed,
+		function(q){ return q ? "[-+]" : ""; },
+		true
+	);
+
+	var numberRE = dojo.regexp.buildGroupRE(flags.separator,
+		function(sep){
+			if(!sep){
+				return "(?:\\d+)";
+			}
+
+			sep = dojo.regexp.escapeString(sep);
+			if(sep == " "){ sep = "\\s"; }
+			else if(sep == "\xa0"){ sep = "\\s\\xa0"; }
+
+			var grp = flags.groupSize, grp2 = flags.groupSize2;
+			//TODO: should we continue to enforce that numbers with separators begin with 1-9?  See #6933
+			if(grp2){
+				var grp2RE = "(?:0|[1-9]\\d{0," + (grp2-1) + "}(?:[" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
+				return ((grp-grp2) > 0) ? "(?:" + grp2RE + "|(?:0|[1-9]\\d{0," + (grp-1) + "}))" : grp2RE;
+			}
+			return "(?:0|[1-9]\\d{0," + (grp-1) + "}(?:[" + sep + "]\\d{" + grp + "})*)";
+		},
+		true
+	);
+
+	return signRE + numberRE; // String
+}
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Pie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Pie"] = true;
+dojo.provide("dojox.charting.plot2d.Pie");
+
+
+
+
+
+
+
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.plot2d.__PieCtorArgs", dojox.charting.plot2d.__DefaultCtorArgs, {
+	//	summary:
+	//		Specialized keyword arguments object for use in defining parameters on a Pie chart.
+
+	//	labels: Boolean?
+	//		Whether or not to draw labels within each pie slice.  Default is true.
+	labels:			true,
+
+	//	ticks: Boolean?
+	//		Whether or not to draw ticks to labels within each slice. Default is false.
+	ticks:			false,
+
+	//	fixed: Boolean?
+	//		TODO
+	fixed:			true,
+
+	//	precision: Number?
+	//		The precision at which to sum/add data values. Default is 1.
+	precision:		1,
+
+	//	labelOffset: Number?
+	//		The amount in pixels by which to offset labels.  Default is 20.
+	labelOffset:	20,
+
+	//	labelStyle: String?
+	//		Options as to where to draw labels.  Values include "default", "rows", and "auto". Default is "default".
+	labelStyle:		"default",	// default/rows/auto
+
+	//	htmlLabels: Boolean?
+	//		Whether or not to use HTML to render slice labels. Default is true.
+	htmlLabels:		true,
+
+	//	radGrad: String?
+	//		The type of radial gradient to use in rendering.  Default is "native".
+	radGrad:        "native",
+
+	//	fanSize: Number?
+	//		The amount for a radial gradient.  Default is 5.
+	fanSize:		5,
+
+	//	startAngle: Number?
+	//		Where to being rendering gradients in slices, in degrees.  Default is 0.
+	startAngle:     0,
+
+	//	radius: Number?
+	//		The size of the radial gradient.  Default is 0.
+	radius:		0
+});
+=====*/
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		da = dojox.charting.axis2d.common,
+		g = dojox.gfx, m = g.matrix,
+		FUDGE_FACTOR = 0.2; // use to overlap fans
+
+	dojo.declare("dojox.charting.plot2d.Pie", [dojox.charting.Element, dojox.charting.plot2d._PlotEvents], {
+		//	summary:
+		//		The plot that represents a typical pie chart.
+		defaultParams: {
+			labels:			true,
+			ticks:			false,
+			fixed:			true,
+			precision:		1,
+			labelOffset:	20,
+			labelStyle:		"default",	// default/rows/auto
+			htmlLabels:		true,		// use HTML to draw labels
+			radGrad:        "native",	// or "linear", or "fan"
+			fanSize:		5,			// maximum fan size in degrees
+			startAngle:     0			// start angle for slices in degrees
+		},
+		optionalParams: {
+			radius:		0,
+			// theme components
+			stroke:		{},
+			outline:	{},
+			shadow:		{},
+			fill:		{},
+			font:		"",
+			fontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		Create a pie plot.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+			this.run = null;
+			this.dyn = [];
+		},
+		clear: function(){
+			//	summary:
+			//		Clear out all of the information tied to this plot.
+			//	returns: dojox.charting.plot2d.Pie
+			//		A reference to this plot for functional chaining.
+			this.dirty = true;
+			this.dyn = [];
+			this.run = null;
+			return this;	//	dojox.charting.plot2d.Pie
+		},
+		setAxis: function(axis){
+			//	summary:
+			//		Dummy method, since axes are irrelevant with a Pie chart.
+			//	returns: dojox.charting.plot2d.Pie
+			//		The reference to this plot for functional chaining.
+			return this;	//	dojox.charting.plot2d.Pie
+		},
+		addSeries: function(run){
+			//	summary:
+			//		Add a series of data to this plot.
+			//	returns: dojox.charting.plot2d.Pie
+			//		The reference to this plot for functional chaining.
+			this.run = run;
+			return this;	//	dojox.charting.plot2d.Pie
+		},
+		getSeriesStats: function(){
+			//	summary:
+			//		Returns default stats (irrelevant for this type of plot).
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			return dojo.delegate(dc.defaultStats);
+		},
+		initializeScalers: function(){
+			//	summary:
+			//		Does nothing (irrelevant for this type of plot).
+			return this;
+		},
+		getRequiredColors: function(){
+			//	summary:
+			//		Return the number of colors needed to draw this plot.
+			return this.run ? this.run.data.length : 0;
+		},
+
+		render: function(dim, offsets){
+			//	summary:
+			//		Render the plot on the chart.
+			//	dim: Object
+			//		An object of the form { width, height }.
+			//	offsets: Object
+			//		An object of the form { l, r, t, b }.
+			//	returns: dojox.charting.plot2d.Pie
+			//		A reference to this plot for functional chaining.
+			if(!this.dirty){ return this; }
+			this.resetEvents();
+			this.dirty = false;
+			this._eventSeries = {};
+			this.cleanGroup();
+			var s = this.group, t = this.chart.theme;
+
+			if(!this.run || !this.run.data.length){
+				return this;
+			}
+
+			// calculate the geometry
+			var rx = (dim.width  - offsets.l - offsets.r) / 2,
+				ry = (dim.height - offsets.t - offsets.b) / 2,
+				r  = Math.min(rx, ry),
+				taFont = "font" in this.opt ? this.opt.font : t.axis.font,
+				size = taFont ? g.normalizedLength(g.splitFontString(taFont).size) : 0,
+				taFontColor = "fontColor" in this.opt ? this.opt.fontColor : t.axis.fontColor,
+				startAngle = m._degToRad(this.opt.startAngle),
+				start = startAngle, step, filteredRun, slices, labels, shift, labelR,
+				run = this.run.data,
+				events = this.events();
+			if(typeof run[0] == "number"){
+				filteredRun = df.map(run, "x ? Math.max(x, 0) : 0");
+				if(df.every(filteredRun, "<= 0")){
+					return this;
+				}
+				slices = df.map(filteredRun, "/this", df.foldl(filteredRun, "+", 0));
+				if(this.opt.labels){
+					labels = dojo.map(slices, function(x){
+						return x > 0 ? this._getLabel(x * 100) + "%" : "";
+					}, this);
+				}
+			}else{
+				filteredRun = df.map(run, "x ? Math.max(x.y, 0) : 0");
+				if(df.every(filteredRun, "<= 0")){
+					return this;
+				}
+				slices = df.map(filteredRun, "/this", df.foldl(filteredRun, "+", 0));
+				if(this.opt.labels){
+					labels = dojo.map(slices, function(x, i){
+						if(x <= 0){ return ""; }
+						var v = run[i];
+						return "text" in v ? v.text : this._getLabel(x * 100) + "%";
+					}, this);
+				}
+			}
+			var themes = df.map(run, function(v, i){
+				if(v === null || typeof v == "number"){
+					return t.next("slice", [this.opt, this.run], true);
+				}
+				return t.next("slice", [this.opt, this.run, v], true);
+			}, this);
+			if(this.opt.labels){
+				shift = df.foldl1(df.map(labels, function(label, i){
+					var font = themes[i].series.font;
+					return dojox.gfx._base._getTextBox(label, {font: font}).w;
+				}, this), "Math.max(a, b)") / 2;
+				if(this.opt.labelOffset < 0){
+					r = Math.min(rx - 2 * shift, ry - size) + this.opt.labelOffset;
+				}
+				labelR = r - this.opt.labelOffset;
+			}
+			if("radius" in this.opt){
+				r = this.opt.radius;
+				labelR = r - this.opt.labelOffset;
+			}
+			var	circle = {
+					cx: offsets.l + rx,
+					cy: offsets.t + ry,
+					r:  r
+				};
+
+			this.dyn = [];
+			// draw slices
+			var eventSeries = new Array(slices.length);
+			dojo.some(slices, function(slice, i){
+				if(slice <= 0){
+					// degenerated slice
+					return false;	// continue
+				}
+				var v = run[i], theme = themes[i], specialFill;
+				if(slice >= 1){
+					// whole pie
+					specialFill = this._plotFill(theme.series.fill, dim, offsets);
+					specialFill = this._shapeFill(specialFill,
+						{
+							x: circle.cx - circle.r, y: circle.cy - circle.r,
+							width: 2 * circle.r, height: 2 * circle.r
+						});
+					specialFill = this._pseudoRadialFill(specialFill, {x: circle.cx, y: circle.cy}, circle.r);
+					var shape = s.createCircle(circle).setFill(specialFill).setStroke(theme.series.stroke);
+					this.dyn.push({fill: specialFill, stroke: theme.series.stroke});
+
+					if(events){
+						var o = {
+							element: "slice",
+							index:   i,
+							run:     this.run,
+							shape:   shape,
+							x:       i,
+							y:       typeof v == "number" ? v : v.y,
+							cx:      circle.cx,
+							cy:      circle.cy,
+							cr:      r
+						};
+						this._connectEvents(o);
+						eventSeries[i] = o;
+					}
+
+					return true;	// stop iteration
+				}
+				// calculate the geometry of the slice
+				var end = start + slice * 2 * Math.PI;
+				if(i + 1 == slices.length){
+					end = startAngle + 2 * Math.PI;
+				}
+				var	step = end - start,
+					x1 = circle.cx + r * Math.cos(start),
+					y1 = circle.cy + r * Math.sin(start),
+					x2 = circle.cx + r * Math.cos(end),
+					y2 = circle.cy + r * Math.sin(end);
+				// draw the slice
+				var fanSize = m._degToRad(this.opt.fanSize);
+				if(theme.series.fill && theme.series.fill.type === "radial" && this.opt.radGrad === "fan" && step > fanSize){
+					var group = s.createGroup(), nfans = Math.ceil(step / fanSize), delta = step / nfans;
+					specialFill = this._shapeFill(theme.series.fill,
+						{x: circle.cx - circle.r, y: circle.cy - circle.r, width: 2 * circle.r, height: 2 * circle.r});
+					for(var j = 0; j < nfans; ++j){
+						var fansx = j == 0 ? x1 : circle.cx + r * Math.cos(start + (j - FUDGE_FACTOR) * delta),
+							fansy = j == 0 ? y1 : circle.cy + r * Math.sin(start + (j - FUDGE_FACTOR) * delta),
+							fanex = j == nfans - 1 ? x2 : circle.cx + r * Math.cos(start + (j + 1 + FUDGE_FACTOR) * delta),
+							faney = j == nfans - 1 ? y2 : circle.cy + r * Math.sin(start + (j + 1 + FUDGE_FACTOR) * delta),
+							fan = group.createPath({}).
+								moveTo(circle.cx, circle.cy).
+								lineTo(fansx, fansy).
+								arcTo(r, r, 0, delta > Math.PI, true, fanex, faney).
+								lineTo(circle.cx, circle.cy).
+								closePath().
+								setFill(this._pseudoRadialFill(specialFill, {x: circle.cx, y: circle.cy}, r, start + (j + 0.5) * delta, start + (j + 0.5) * delta));
+					}
+					group.createPath({}).
+						moveTo(circle.cx, circle.cy).
+						lineTo(x1, y1).
+						arcTo(r, r, 0, step > Math.PI, true, x2, y2).
+						lineTo(circle.cx, circle.cy).
+						closePath().
+						setStroke(theme.series.stroke);
+					shape = group;
+				}else{
+					shape = s.createPath({}).
+						moveTo(circle.cx, circle.cy).
+						lineTo(x1, y1).
+						arcTo(r, r, 0, step > Math.PI, true, x2, y2).
+						lineTo(circle.cx, circle.cy).
+						closePath().
+						setStroke(theme.series.stroke);
+					var specialFill = theme.series.fill;
+					if(specialFill && specialFill.type === "radial"){
+						specialFill = this._shapeFill(specialFill, {x: circle.cx - circle.r, y: circle.cy - circle.r, width: 2 * circle.r, height: 2 * circle.r});
+						if(this.opt.radGrad === "linear"){
+							specialFill = this._pseudoRadialFill(specialFill, {x: circle.cx, y: circle.cy}, r, start, end);
+						}
+					}else if(specialFill && specialFill.type === "linear"){
+						specialFill = this._plotFill(specialFill, dim, offsets);
+						specialFill = this._shapeFill(specialFill, shape.getBoundingBox());
+					}
+					shape.setFill(specialFill);
+				}
+				this.dyn.push({fill: specialFill, stroke: theme.series.stroke});
+
+				if(events){
+					var o = {
+						element: "slice",
+						index:   i,
+						run:     this.run,
+						shape:   shape,
+						x:       i,
+						y:       typeof v == "number" ? v : v.y,
+						cx:      circle.cx,
+						cy:      circle.cy,
+						cr:      r
+					};
+					this._connectEvents(o);
+					eventSeries[i] = o;
+				}
+
+				start = end;
+
+				return false;	// continue
+			}, this);
+			// draw labels
+			if(this.opt.labels){
+				start = startAngle;
+				dojo.some(slices, function(slice, i){
+					if(slice <= 0){
+						// degenerated slice
+						return false;	// continue
+					}
+					var theme = themes[i];
+					if(slice >= 1){
+						// whole pie
+						var v = run[i], elem = da.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"](
+								this.chart, s, circle.cx, circle.cy + size / 2, "middle", labels[i],
+								theme.series.font, theme.series.fontColor);
+						if(this.opt.htmlLabels){
+							this.htmlElements.push(elem);
+						}
+						return true;	// stop iteration
+					}
+					// calculate the geometry of the slice
+					var end = start + slice * 2 * Math.PI, v = run[i];
+					if(i + 1 == slices.length){
+						end = startAngle + 2 * Math.PI;
+					}
+					var	labelAngle = (start + end) / 2,
+						x = circle.cx + labelR * Math.cos(labelAngle),
+						y = circle.cy + labelR * Math.sin(labelAngle) + size / 2;
+					// draw the label
+					var elem = da.createText[this.opt.htmlLabels && dojox.gfx.renderer != "vml" ? "html" : "gfx"]
+							(this.chart, s, x, y, "middle", labels[i], theme.series.font, theme.series.fontColor);
+					if(this.opt.htmlLabels){
+						this.htmlElements.push(elem);
+					}
+					start = end;
+					return false;	// continue
+				}, this);
+			}
+			// post-process events to restore the original indexing
+			var esi = 0;
+			this._eventSeries[this.run.name] = df.map(run, function(v){
+				return v <= 0 ? null : eventSeries[esi++];
+			});
+			return this;	//	dojox.charting.plot2d.Pie
+		},
+
+		// utilities
+		_getLabel: function(number){
+			return this.opt.fixed ? dojo.number.format(number, {places: this.opt.precision}) : number.toString();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Bubble"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Bubble"] = true;
+dojo.provide("dojox.charting.plot2d.Bubble");
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	dojo.declare("dojox.charting.plot2d.Bubble", dojox.charting.plot2d.Base, {
+		//	summary:
+		//		A plot representing bubbles.  Note that data for Bubbles requires 3 parameters,
+		//		in the form of:  { x, y, size }, where size determines the size of the bubble.
+		defaultParams: {
+			hAxis: "x",		// use a horizontal axis named "x"
+			vAxis: "y",		// use a vertical axis named "y"
+			animate: null   // animate bars into place
+		},
+		optionalParams: {
+			// theme component
+			stroke:		{},
+			outline:	{},
+			shadow:		{},
+			fill:		{},
+			font:		"",
+			fontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		Create a plot of bubbles.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__DefaultCtorArgs?
+			//		Optional keyword arguments object to help define plot parameters.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			this.series = [];
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+			this.animate = this.opt.animate;
+		},
+
+		//	override the render so that we are plotting only circles.
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.Bubble
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+
+			var t = this.chart.theme,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				events = this.events();
+
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				if(!run.data.length){
+					run.dirty = false;
+					t.skip();
+					continue;
+				}
+
+				if(typeof run.data[0] == "number"){
+					console.warn("dojox.charting.plot2d.Bubble: the data in the following series cannot be rendered as a bubble chart; ", run);
+					continue;
+				}
+
+				var theme = t.next("circle", [this.opt, run]), s = run.group,
+					points = dojo.map(run.data, function(v, i){
+						return v ? {
+							x: ht(v.x) + offsets.l,
+							y: dim.height - offsets.b - vt(v.y),
+							radius: this._vScaler.bounds.scale * (v.size / 2)
+						} : null;
+					}, this);
+
+				var frontCircles = null, outlineCircles = null, shadowCircles = null;
+
+				// make shadows if needed
+				if(theme.series.shadow){
+					shadowCircles = dojo.map(points, function(item){
+						if(item !== null){
+							var finalTheme = t.addMixin(theme, "circle", item, true),
+								shadow = finalTheme.series.shadow;
+							var shape = s.createCircle({
+								cx: item.x + shadow.dx, cy: item.y + shadow.dy, r: item.radius
+							}).setStroke(shadow).setFill(shadow.color);
+							if(this.animate){
+								this._animateBubble(shape, dim.height - offsets.b, item.radius);
+							}
+							return shape;
+						}
+						return null;
+					}, this);
+					if(shadowCircles.length){
+						run.dyn.shadow = shadowCircles[shadowCircles.length - 1].getStroke();
+					}
+				}
+
+				// make outlines if needed
+				if(theme.series.outline){
+					outlineCircles = dojo.map(points, function(item){
+						if(item !== null){
+							var finalTheme = t.addMixin(theme, "circle", item, true),
+								outline = dc.makeStroke(finalTheme.series.outline);
+							outline.width = 2 * outline.width + theme.series.stroke.width;
+							var shape = s.createCircle({
+								cx: item.x, cy: item.y, r: item.radius
+							}).setStroke(outline);
+							if(this.animate){
+								this._animateBubble(shape, dim.height - offsets.b, item.radius);
+							}
+							return shape;
+						}
+						return null;
+					}, this);
+					if(outlineCircles.length){
+						run.dyn.outline = outlineCircles[outlineCircles.length - 1].getStroke();
+					}
+				}
+
+				//	run through the data and add the circles.
+				frontCircles = dojo.map(points, function(item){
+					if(item !== null){
+						var finalTheme = t.addMixin(theme, "circle", item, true),
+							rect = {
+								x: item.x - item.radius,
+								y: item.y - item.radius,
+								width:  2 * item.radius,
+								height: 2 * item.radius
+							};
+						var specialFill = this._plotFill(finalTheme.series.fill, dim, offsets);
+						specialFill = this._shapeFill(specialFill, rect);
+						var shape = s.createCircle({
+							cx: item.x, cy: item.y, r: item.radius
+						}).setFill(specialFill).setStroke(finalTheme.series.stroke);
+						if(this.animate){
+							this._animateBubble(shape, dim.height - offsets.b, item.radius);
+						}
+						return shape;
+					}
+					return null;
+				}, this);
+				if(frontCircles.length){
+					run.dyn.fill   = frontCircles[frontCircles.length - 1].getFill();
+					run.dyn.stroke = frontCircles[frontCircles.length - 1].getStroke();
+				}
+
+				if(events){
+					var eventSeries = new Array(frontCircles.length);
+					dojo.forEach(frontCircles, function(s, i){
+						if(s !== null){
+							var o = {
+								element: "circle",
+								index:   i,
+								run:     run,
+								shape:   s,
+								outline: outlineCircles && outlineCircles[i] || null,
+								shadow:  shadowCircles && shadowCircles[i] || null,
+								x:       run.data[i].x,
+								y:       run.data[i].y,
+								r:       run.data[i].size / 2,
+								cx:      points[i].x,
+								cy:      points[i].y,
+								cr:      points[i].radius
+							};
+							this._connectEvents(o);
+							eventSeries[i] = o;
+						}
+					}, this);
+					this._eventSeries[run.name] = eventSeries;
+				}else{
+					delete this._eventSeries[run.name];
+				}
+
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Bubble
+		},
+		_animateBubble: function(shape, offset, size){
+			dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform: [
+					{name: "translate", start: [0, offset], end: [0, 0]},
+					{name: "scale", start: [0, 1/size], end: [1, 1]},
+					{name: "original"}
+				]
+			}, this.animate)).play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.Candlesticks"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.Candlesticks"] = true;
+dojo.provide("dojox.charting.plot2d.Candlesticks");
+
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	//	Candlesticks are based on the Bars plot type; we expect the following passed
+	//	as values in a series:
+	//	{ x?, open, close, high, low, mid? }
+	//	if x is not provided, the array index is used.
+	//	failing to provide the OHLC values will throw an error.
+	dojo.declare("dojox.charting.plot2d.Candlesticks", dojox.charting.plot2d.Base, {
+		//	summary:
+		//		A plot that represents typical candlesticks (financial reporting, primarily).
+		//		Unlike most charts, the Candlestick expects data points to be represented by
+		//		an object of the form { x?, open, close, high, low, mid? }, where both
+		//		x and mid are optional parameters.  If x is not provided, the index of the
+		//		data array is used.
+		defaultParams: {
+			hAxis: "x",		// use a horizontal axis named "x"
+			vAxis: "y",		// use a vertical axis named "y"
+			gap:	2,		// gap between columns in pixels
+			animate: null   // animate bars into place
+		},
+		optionalParams: {
+			minBarSize:	1,	// minimal candle width in pixels
+			maxBarSize:	1,	// maximal candle width in pixels
+			// theme component
+			stroke:		{},
+			outline:	{},
+			shadow:		{},
+			fill:		{},
+			font:		"",
+			fontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		The constructor for a candlestick chart.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__BarCtorArgs?
+			//		An optional keyword arguments object to help define the plot.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+			this.series = [];
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+			this.animate = this.opt.animate;
+		},
+
+		collectStats: function(series){
+			//	summary:
+			//		Collect all statistics for drawing this chart.  Since the common
+			//		functionality only assumes x and y, Candlesticks must create it's own
+			//		stats (since data has no y value, but open/close/high/low instead).
+			//	series: dojox.charting.Series[]
+			//		The data series array to be drawn on this plot.
+			//	returns: Object
+			//		Returns an object in the form of { hmin, hmax, vmin, vmax }.
+
+			//	we have to roll our own, since we need to use all four passed
+			//	values to figure out our stats, and common only assumes x and y.
+			var stats = dojo.delegate(dc.defaultStats);
+			for(var i=0; i<series.length; i++){
+				var run = series[i];
+				if(!run.data.length){ continue; }
+				var old_vmin = stats.vmin, old_vmax = stats.vmax;
+				if(!("ymin" in run) || !("ymax" in run)){
+					dojo.forEach(run.data, function(val, idx){
+						if(val !== null){
+							var x = val.x || idx + 1;
+							stats.hmin = Math.min(stats.hmin, x);
+							stats.hmax = Math.max(stats.hmax, x);
+							stats.vmin = Math.min(stats.vmin, val.open, val.close, val.high, val.low);
+							stats.vmax = Math.max(stats.vmax, val.open, val.close, val.high, val.low);
+						}
+					});
+				}
+				if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+				if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+			}
+			return stats;	//	Object
+		},
+
+		getSeriesStats: function(){
+			//	summary:
+			//		Calculate the min/max on all attached series in both directions.
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			var stats = this.collectStats(this.series);
+			stats.hmin -= 0.5;
+			stats.hmax += 0.5;
+			return stats;
+		},
+
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.Candlesticks
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, width,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				baseline = Math.max(0, this._vScaler.bounds.lower),
+				baselineHeight = vt(baseline),
+				events = this.events();
+			f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+			gap = f.gap;
+			width = f.size;
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("candlestick", [this.opt, run]), s = run.group,
+					eventSeries = new Array(run.data.length);
+				for(var j = 0; j < run.data.length; ++j){
+					var v = run.data[j];
+					if(v !== null){
+						var finalTheme = t.addMixin(theme, "candlestick", v, true);
+
+						//	calculate the points we need for OHLC
+						var x = ht(v.x || (j+0.5)) + offsets.l + gap,
+							y = dim.height - offsets.b,
+							open = vt(v.open),
+							close = vt(v.close),
+							high = vt(v.high),
+							low = vt(v.low);
+						if("mid" in v){
+							var mid = vt(v.mid);
+						}
+						if(low > high){
+							var tmp = high;
+							high = low;
+							low = tmp;
+						}
+
+						if(width >= 1){
+							//	draw the line and rect, set up as a group and pass that to the events.
+							var doFill = open > close;
+							var line = { x1: width/2, x2: width/2, y1: y - high, y2: y - low },
+								rect = {
+									x: 0, y: y-Math.max(open, close),
+									width: width, height: Math.max(doFill ? open-close : close-open, 1)
+								};
+							shape = s.createGroup();
+							shape.setTransform({dx: x, dy: 0 });
+							var inner = shape.createGroup();
+							inner.createLine(line).setStroke(finalTheme.series.stroke);
+							inner.createRect(rect).setStroke(finalTheme.series.stroke).
+								setFill(doFill ? finalTheme.series.fill : "white");
+							if("mid" in v){
+								//	add the mid line.
+								inner.createLine({
+									x1: (finalTheme.series.stroke.width||1), x2: width - (finalTheme.series.stroke.width || 1),
+									y1: y - mid, y2: y - mid
+								}).setStroke(doFill ? "white" : finalTheme.series.stroke);
+							}
+
+							//	TODO: double check this.
+							run.dyn.fill   = finalTheme.series.fill;
+							run.dyn.stroke = finalTheme.series.stroke;
+							if(events){
+								var o = {
+									element: "candlestick",
+									index:   j,
+									run:     run,
+									shape:   inner,
+									x:       x,
+									y:       y-Math.max(open, close),
+									cx:		 width/2,
+									cy:		 (y-Math.max(open, close)) + (Math.max(doFill ? open-close : close-open, 1)/2),
+									width:	 width,
+									height:  Math.max(doFill ? open-close : close-open, 1),
+									data:	 v
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+						}
+						if(this.animate){
+							this._animateCandlesticks(shape, y - low, high - low);
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.Candlesticks
+		},
+		_animateCandlesticks: function(shape, voffset, vsize){
+			dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform: [
+					{name: "translate", start: [0, voffset - (voffset/vsize)], end: [0, 0]},
+					{name: "scale", start: [1, 1/vsize], end: [1, 1]},
+					{name: "original"}
+				]
+			}, this.animate)).play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.plot2d.OHLC"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.plot2d.OHLC"] = true;
+dojo.provide("dojox.charting.plot2d.OHLC");
+
+
+
+
+
+
+
+
+(function(){
+	var df = dojox.lang.functional, du = dojox.lang.utils,
+		dc = dojox.charting.plot2d.common,
+		purgeGroup = df.lambda("item.purgeGroup()");
+
+	//	Candlesticks are based on the Bars plot type; we expect the following passed
+	//	as values in a series:
+	//	{ x?, open, close, high, low }
+	//	if x is not provided, the array index is used.
+	//	failing to provide the OHLC values will throw an error.
+	dojo.declare("dojox.charting.plot2d.OHLC", dojox.charting.plot2d.Base, {
+		//	summary:
+		//		A plot that represents typical open/high/low/close (financial reporting, primarily).
+		//		Unlike most charts, the Candlestick expects data points to be represented by
+		//		an object of the form { x?, open, close, high, low, mid? }, where both
+		//		x and mid are optional parameters.  If x is not provided, the index of the
+		//		data array is used.
+		defaultParams: {
+			hAxis: "x",		// use a horizontal axis named "x"
+			vAxis: "y",		// use a vertical axis named "y"
+			gap:	2,		// gap between columns in pixels
+			animate: null	// animate chart to place
+		},
+		optionalParams: {
+			minBarSize: 1,	// minimal bar size in pixels
+			maxBarSize: 1,	// maximal bar size in pixels
+			// theme component
+			stroke:		{},
+			outline:	{},
+			shadow:		{},
+			fill:		{},
+			font:		"",
+			fontColor:	""
+		},
+
+		constructor: function(chart, kwArgs){
+			//	summary:
+			//		The constructor for a candlestick chart.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this plot belongs to.
+			//	kwArgs: dojox.charting.plot2d.__BarCtorArgs?
+			//		An optional keyword arguments object to help define the plot.
+			this.opt = dojo.clone(this.defaultParams);
+			du.updateWithObject(this.opt, kwArgs);
+			du.updateWithPattern(this.opt, kwArgs, this.optionalParams);
+			this.series = [];
+			this.hAxis = this.opt.hAxis;
+			this.vAxis = this.opt.vAxis;
+			this.animate = this.opt.animate;
+		},
+
+		collectStats: function(series){
+			//	summary:
+			//		Collect all statistics for drawing this chart.  Since the common
+			//		functionality only assumes x and y, OHLC must create it's own
+			//		stats (since data has no y value, but open/close/high/low instead).
+			//	series: dojox.charting.Series[]
+			//		The data series array to be drawn on this plot.
+			//	returns: Object
+			//		Returns an object in the form of { hmin, hmax, vmin, vmax }.
+
+			//	we have to roll our own, since we need to use all four passed
+			//	values to figure out our stats, and common only assumes x and y.
+			var stats = dojo.delegate(dc.defaultStats);
+			for(var i=0; i<series.length; i++){
+				var run = series[i];
+				if(!run.data.length){ continue; }
+				var old_vmin = stats.vmin, old_vmax = stats.vmax;
+				if(!("ymin" in run) || !("ymax" in run)){
+					dojo.forEach(run.data, function(val, idx){
+						if(val !== null){
+							var x = val.x || idx + 1;
+							stats.hmin = Math.min(stats.hmin, x);
+							stats.hmax = Math.max(stats.hmax, x);
+							stats.vmin = Math.min(stats.vmin, val.open, val.close, val.high, val.low);
+							stats.vmax = Math.max(stats.vmax, val.open, val.close, val.high, val.low);
+						}
+					});
+				}
+				if("ymin" in run){ stats.vmin = Math.min(old_vmin, run.ymin); }
+				if("ymax" in run){ stats.vmax = Math.max(old_vmax, run.ymax); }
+			}
+			return stats;
+		},
+
+		getSeriesStats: function(){
+			//	summary:
+			//		Calculate the min/max on all attached series in both directions.
+			//	returns: Object
+			//		{hmin, hmax, vmin, vmax} min/max in both directions.
+			var stats = this.collectStats(this.series);
+			stats.hmin -= 0.5;
+			stats.hmax += 0.5;
+			return stats;
+		},
+
+		render: function(dim, offsets){
+			//	summary:
+			//		Run the calculations for any axes for this plot.
+			//	dim: Object
+			//		An object in the form of { width, height }
+			//	offsets: Object
+			//		An object of the form { l, r, t, b}.
+			//	returns: dojox.charting.plot2d.OHLC
+			//		A reference to this plot for functional chaining.
+			if(this.zoom && !this.isDataDirty()){
+				return this.performZoom(dim, offsets);
+			}
+			this.resetEvents();
+			this.dirty = this.isDirty();
+			if(this.dirty){
+				dojo.forEach(this.series, purgeGroup);
+				this._eventSeries = {};
+				this.cleanGroup();
+				var s = this.group;
+				df.forEachRev(this.series, function(item){ item.cleanGroup(s); });
+			}
+			var t = this.chart.theme, f, gap, width,
+				ht = this._hScaler.scaler.getTransformerFromModel(this._hScaler),
+				vt = this._vScaler.scaler.getTransformerFromModel(this._vScaler),
+				baseline = Math.max(0, this._vScaler.bounds.lower),
+				baselineHeight = vt(baseline),
+				events = this.events();
+			f = dc.calculateBarSize(this._hScaler.bounds.scale, this.opt);
+			gap = f.gap;
+			width = f.size;
+			for(var i = this.series.length - 1; i >= 0; --i){
+				var run = this.series[i];
+				if(!this.dirty && !run.dirty){
+					t.skip();
+					this._reconnectEvents(run.name);
+					continue;
+				}
+				run.cleanGroup();
+				var theme = t.next("candlestick", [this.opt, run]), s = run.group,
+					eventSeries = new Array(run.data.length);
+				for(var j = 0; j < run.data.length; ++j){
+					var v = run.data[j];
+					if(v !== null){
+						var finalTheme = t.addMixin(theme, "candlestick", v, true);
+
+						//	calculate the points we need for OHLC
+						var x = ht(v.x || (j+0.5)) + offsets.l + gap,
+							y = dim.height - offsets.b,
+							open = vt(v.open),
+							close = vt(v.close),
+							high = vt(v.high),
+							low = vt(v.low);
+						if(low > high){
+							var tmp = high;
+							high = low;
+							low = tmp;
+						}
+
+						if(width >= 1){
+							var hl = {x1: width/2, x2: width/2, y1: y - high, y2: y - low},
+								op = {x1: 0, x2: ((width/2) + ((finalTheme.series.stroke.width||1)/2)), y1: y-open, y2: y-open},
+								cl = {x1: ((width/2) - ((finalTheme.series.stroke.width||1)/2)), x2: width, y1: y-close, y2: y-close};
+							shape = s.createGroup();
+							shape.setTransform({dx: x, dy: 0});
+							var inner = shape.createGroup();
+							inner.createLine(hl).setStroke(finalTheme.series.stroke);
+							inner.createLine(op).setStroke(finalTheme.series.stroke);
+							inner.createLine(cl).setStroke(finalTheme.series.stroke);
+
+							//	TODO: double check this.
+							run.dyn.stroke = finalTheme.series.stroke;
+							if(events){
+								var o = {
+									element: "candlestick",
+									index:   j,
+									run:     run,
+									shape:	 inner,
+									x:       x,
+									y:       y-Math.max(open, close),
+									cx:		 width/2,
+									cy:		 (y-Math.max(open, close)) + (Math.max(open > close ? open-close : close-open, 1)/2),
+									width:	 width,
+									height:  Math.max(open > close ? open-close : close-open, 1),
+									data:	 v
+								};
+								this._connectEvents(o);
+								eventSeries[j] = o;
+							}
+						}
+						if(this.animate){
+							this._animateOHLC(shape, y - low, high - low);
+						}
+					}
+				}
+				this._eventSeries[run.name] = eventSeries;
+				run.dirty = false;
+			}
+			this.dirty = false;
+			return this;	//	dojox.charting.plot2d.OHLC
+		},
+		_animateOHLC: function(shape, voffset, vsize){
+			dojox.gfx.fx.animateTransform(dojo.delegate({
+				shape: shape,
+				duration: 1200,
+				transform: [
+					{name: "translate", start: [0, voffset - (voffset/vsize)], end: [0, 0]},
+					{name: "scale", start: [1, 1/vsize], end: [1, 1]},
+					{name: "original"}
+				]
+			}, this.animate)).play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.Chart2D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.Chart2D"] = true;
+dojo.provide("dojox.charting.Chart2D");
+
+
+
+
+
+
+
+
+
+// require all axes to support references by name
+
+
+
+// require all plots to support references by name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*=====
+dojox.charting.__Chart2DCtorArgs = function(margins, stroke, fill, delayInMs){
+	//	summary:
+	//		The keyword arguments that can be passed in a Chart2D constructor.
+	//
+	//	margins: Object?
+	//		Optional margins for the chart, in the form of { l, t, r, b}.
+	//	stroke: dojox.gfx.Stroke?
+	//		An optional outline/stroke for the chart.
+	//	fill: dojox.gfx.Fill?
+	//		An optional fill for the chart.
+	//	delayInMs: Number
+	//		Delay in ms for delayedRender(). Default: 200.
+	this.margins = margins;
+	this.stroke = stroke;
+	this.fill = fill;
+	this.delayInMs = delayInMs;
+}
+ =====*/
+(function(){
+	var df = dojox.lang.functional, dc = dojox.charting,
+		clear = df.lambda("item.clear()"),
+		purge = df.lambda("item.purgeGroup()"),
+		destroy = df.lambda("item.destroy()"),
+		makeClean = df.lambda("item.dirty = false"),
+		makeDirty = df.lambda("item.dirty = true"),
+		getName = df.lambda("item.name");
+
+	dojo.declare("dojox.charting.Chart2D", null, {
+		//	summary:
+		//		The main chart object in dojox.charting.  This will create a two dimensional
+		//		chart based on dojox.gfx.
+		//
+		//	description:
+		//		dojox.charting.Chart2D is the primary object used for any kind of charts.  It
+		//		is simple to create--just pass it a node reference, which is used as the
+		//		container for the chart--and a set of optional keyword arguments and go.
+		//
+		//		Note that like most of dojox.gfx, most of dojox.charting.Chart2D's methods are
+		//		designed to return a reference to the chart itself, to allow for functional
+		//		chaining.  This makes defining everything on a Chart very easy to do.
+		//
+		//	example:
+		//		Create an area chart, with smoothing.
+		//	|	new dojox.charting.Chart2D(node))
+		//	|		.addPlot("default", { type: "Areas", tension: "X" })
+		//	|		.setTheme(dojox.charting.themes.Shrooms)
+		//	|		.addSeries("Series A", [1, 2, 0.5, 1.5, 1, 2.8, 0.4])
+		//	|		.addSeries("Series B", [2.6, 1.8, 2, 1, 1.4, 0.7, 2])
+		//	|		.addSeries("Series C", [6.3, 1.8, 3, 0.5, 4.4, 2.7, 2])
+		//	|		.render();
+		//
+		//	example:
+		//		The form of data in a data series can take a number of forms: a simple array,
+		//		an array of objects {x,y}, or something custom (as determined by the plot).
+		//		Here's an example of a Candlestick chart, which expects an object of
+		//		{ open, high, low, close }.
+		//	|	new dojox.charting.Chart2D(node))
+		//	|		.addPlot("default", {type: "Candlesticks", gap: 1})
+		//	|		.addAxis("x", {fixLower: "major", fixUpper: "major", includeZero: true})
+		//	|		.addAxis("y", {vertical: true, fixLower: "major", fixUpper: "major", natural: true})
+		//	|		.addSeries("Series A", [
+		//	|				{ open: 20, close: 16, high: 22, low: 8 },
+		//	|				{ open: 16, close: 22, high: 26, low: 6, mid: 18 },
+		//	|				{ open: 22, close: 18, high: 22, low: 11, mid: 21 },
+		//	|				{ open: 18, close: 29, high: 32, low: 14, mid: 27 },
+		//	|				{ open: 29, close: 24, high: 29, low: 13, mid: 27 },
+		//	|				{ open: 24, close: 8, high: 24, low: 5 },
+		//	|				{ open: 8, close: 16, high: 22, low: 2 },
+		//	|				{ open: 16, close: 12, high: 19, low: 7 },
+		//	|				{ open: 12, close: 20, high: 22, low: 8 },
+		//	|				{ open: 20, close: 16, high: 22, low: 8 },
+		//	|				{ open: 16, close: 22, high: 26, low: 6, mid: 18 },
+		//	|				{ open: 22, close: 18, high: 22, low: 11, mid: 21 },
+		//	|				{ open: 18, close: 29, high: 32, low: 14, mid: 27 },
+		//	|				{ open: 29, close: 24, high: 29, low: 13, mid: 27 },
+		//	|				{ open: 24, close: 8, high: 24, low: 5 },
+		//	|				{ open: 8, close: 16, high: 22, low: 2 },
+		//	|				{ open: 16, close: 12, high: 19, low: 7 },
+		//	|				{ open: 12, close: 20, high: 22, low: 8 },
+		//	|				{ open: 20, close: 16, high: 22, low: 8 },
+		//	|				{ open: 16, close: 22, high: 26, low: 6 },
+		//	|				{ open: 22, close: 18, high: 22, low: 11 },
+		//	|				{ open: 18, close: 29, high: 32, low: 14 },
+		//	|				{ open: 29, close: 24, high: 29, low: 13 },
+		//	|				{ open: 24, close: 8, high: 24, low: 5 },
+		//	|				{ open: 8, close: 16, high: 22, low: 2 },
+		//	|				{ open: 16, close: 12, high: 19, low: 7 },
+		//	|				{ open: 12, close: 20, high: 22, low: 8 },
+		//	|				{ open: 20, close: 16, high: 22, low: 8 }
+		//	|			],
+		//	|			{ stroke: { color: "green" }, fill: "lightgreen" }
+		//	|		)
+		//	|		.render();
+		//
+		//	theme: dojox.charting.Theme?
+		//		An optional theme to use for styling the chart.
+		//	axes: dojox.charting.Axis{}?
+		//		A map of axes for use in plotting a chart.
+		//	stack: dojox.charting.plot2d.Base[]
+		//		A stack of plotters.
+		//	plots: dojox.charting.plot2d.Base{}
+		//		A map of plotter indices
+		//	series: dojox.charting.Series[]
+		//		The stack of data runs used to create plots.
+		//	runs: dojox.charting.Series{}
+		//		A map of series indices
+		//	margins: Object?
+		//		The margins around the chart. Default is { l:10, t:10, r:10, b:10 }.
+		//	stroke: dojox.gfx.Stroke?
+		//		The outline of the chart (stroke in vector graphics terms).
+		//	fill: dojox.gfx.Fill?
+		//		The color for the chart.
+		//	node: DOMNode
+		//		The container node passed to the constructor.
+		//	surface: dojox.gfx.Surface
+		//		The main graphics surface upon which a chart is drawn.
+		//	dirty: Boolean
+		//		A boolean flag indicating whether or not the chart needs to be updated/re-rendered.
+		//	coords: Object
+		//		The coordinates on a page of the containing node, as returned from dojo.coords.
+
+		constructor: function(/* DOMNode */node, /* dojox.charting.__Chart2DCtorArgs? */kwArgs){
+			//	summary:
+			//		The constructor for a new Chart2D.  Initializes all parameters used for a chart.
+			//	returns: dojox.charting.Chart2D
+			//		The newly created chart.
+
+			// initialize parameters
+			if(!kwArgs){ kwArgs = {}; }
+			this.margins   = kwArgs.margins ? kwArgs.margins : {l: 10, t: 10, r: 10, b: 10};
+			this.stroke    = kwArgs.stroke;
+			this.fill      = kwArgs.fill;
+			this.delayInMs = kwArgs.delayInMs || 200;
+
+			// default initialization
+			this.theme = null;
+			this.axes = {};		// map of axes
+			this.stack = [];	// stack of plotters
+			this.plots = {};	// map of plotter indices
+			this.series = [];	// stack of data runs
+			this.runs = {};		// map of data run indices
+			this.dirty = true;
+			this.coords = null;
+
+			// create a surface
+			this.node = dojo.byId(node);
+			var box = dojo.marginBox(node);
+			this.surface = dojox.gfx.createSurface(this.node, box.w || 400, box.h || 300);
+		},
+		destroy: function(){
+			//	summary:
+			//		Cleanup when a chart is to be destroyed.
+			//	returns: void
+			dojo.forEach(this.series, destroy);
+			dojo.forEach(this.stack,  destroy);
+			df.forIn(this.axes, destroy);
+			this.surface.destroy();
+		},
+		getCoords: function(){
+			//	summary:
+			//		Get the coordinates and dimensions of the containing DOMNode, as
+			//		returned by dojo.coords.
+			//	returns: Object
+			//		The resulting coordinates of the chart.  See dojo.coords for details.
+			if(!this.coords){
+				this.coords = dojo.coords(this.node, true);
+			}
+			return this.coords;	//	Object
+		},
+		setTheme: function(theme){
+			//	summary:
+			//		Set a theme of the chart.
+			//	theme: dojox.charting.Theme
+			//		The theme to be used for visual rendering.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			this.theme = theme.clone();
+			this.dirty = true;
+			return this;	//	dojox.charting.Chart2D
+		},
+		addAxis: function(name, kwArgs){
+			//	summary:
+			//		Add an axis to the chart, for rendering.
+			//	name: String
+			//		The name of the axis.
+			//	kwArgs: dojox.charting.axis2d.__AxisCtorArgs?
+			//		An optional keyword arguments object for use in defining details of an axis.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			var axis;
+			if(!kwArgs || !("type" in kwArgs)){
+				axis = new dc.axis2d.Default(this, kwArgs);
+			}else{
+				axis = typeof kwArgs.type == "string" ?
+					new dc.axis2d[kwArgs.type](this, kwArgs) :
+					new kwArgs.type(this, kwArgs);
+			}
+			axis.name = name;
+			axis.dirty = true;
+			if(name in this.axes){
+				this.axes[name].destroy();
+			}
+			this.axes[name] = axis;
+			this.dirty = true;
+			return this;	//	dojox.charting.Chart2D
+		},
+		getAxis: function(name){
+			//	summary:
+			//		Get the given axis, by name.
+			//	name: String
+			//		The name the axis was defined by.
+			//	returns: dojox.charting.axis2d.Default
+			//		The axis as stored in the chart's axis map.
+			return this.axes[name];	//	dojox.charting.axis2d.Default
+		},
+		removeAxis: function(name){
+			//	summary:
+			//		Remove the axis that was defined using name.
+			//	name: String
+			//		The axis name, as defined in addAxis.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.axes){
+				// destroy the axis
+				this.axes[name].destroy();
+				delete this.axes[name];
+				// mark the chart as dirty
+				this.dirty = true;
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		addPlot: function(name, kwArgs){
+			//	summary:
+			//		Add a new plot to the chart, defined by name and using the optional keyword arguments object.
+			//		Note that dojox.charting assumes the main plot to be called "default"; if you do not have
+			//		a plot called "default" and attempt to add data series to the chart without specifying the
+			//		plot to be rendered on, you WILL get errors.
+			//	name: String
+			//		The name of the plot to be added to the chart.  If you only plan on using one plot, call it "default".
+			//	kwArgs: dojox.charting.plot2d.__PlotCtorArgs
+			//		An object with optional parameters for the plot in question.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			var plot;
+			if(!kwArgs || !("type" in kwArgs)){
+				plot = new dc.plot2d.Default(this, kwArgs);
+			}else{
+				plot = typeof kwArgs.type == "string" ?
+					new dc.plot2d[kwArgs.type](this, kwArgs) :
+					new kwArgs.type(this, kwArgs);
+			}
+			plot.name = name;
+			plot.dirty = true;
+			if(name in this.plots){
+				this.stack[this.plots[name]].destroy();
+				this.stack[this.plots[name]] = plot;
+			}else{
+				this.plots[name] = this.stack.length;
+				this.stack.push(plot);
+			}
+			this.dirty = true;
+			return this;	//	dojox.charting.Chart2D
+		},
+		removePlot: function(name){
+			//	summary:
+			//		Remove the plot defined using name from the chart's plot stack.
+			//	name: String
+			//		The name of the plot as defined using addPlot.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.plots){
+				// get the index and remove the name
+				var index = this.plots[name];
+				delete this.plots[name];
+				// destroy the plot
+				this.stack[index].destroy();
+				// remove the plot from the stack
+				this.stack.splice(index, 1);
+				// update indices to reflect the shift
+				df.forIn(this.plots, function(idx, name, plots){
+					if(idx > index){
+						plots[name] = idx - 1;
+					}
+				});
+				// mark the chart as dirty
+				this.dirty = true;
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		getPlotOrder: function(){
+			//	summary:
+			//		Returns an array of plot names in the current order
+			//		(the top-most plot is the first).
+			//	returns: Array
+			return df.map(this.stack, getName); // Array
+		},
+		setPlotOrder: function(newOrder){
+			//	summary:
+			//		Sets new order of plots. newOrder cannot add or remove
+			//		plots. Wrong names, or dups are ignored.
+			//	newOrder: Array:
+			//		Array of plot names compatible with getPlotOrder().
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			var names = {},
+				order = df.filter(newOrder, function(name){
+					if(!(name in this.plots) || (name in names)){
+						return false;
+					}
+					names[name] = 1;
+					return true;
+				}, this);
+			if(order.length < this.stack.length){
+				df.forEach(this.stack, function(plot){
+					var name = plot.name;
+					if(!(name in names)){
+						order.push(name);
+					}
+				});
+			}
+			var newStack = df.map(order, function(name){
+					return this.stack[this.plots[name]];
+				}, this);
+			df.forEach(newStack, function(plot, i){
+				this.plots[plot.name] = i;
+			}, this);
+			this.stack = newStack;
+			this.dirty = true;
+			return this;	//	dojox.charting.Chart2D
+		},
+		movePlotToFront: function(name){
+			//	summary:
+			//		Moves a given plot to front.
+			//	name: String:
+			//		Plot's name to move.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.plots){
+				var index = this.plots[name];
+				if(index){
+					var newOrder = this.getPlotOrder();
+					newOrder.splice(index, 1);
+					newOrder.unshift(name);
+					return this.setPlotOrder(newOrder);	//	dojox.charting.Chart2D
+				}
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		movePlotToBack: function(name){
+			//	summary:
+			//		Moves a given plot to back.
+			//	name: String:
+			//		Plot's name to move.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.plots){
+				var index = this.plots[name];
+				if(index < this.stack.length - 1){
+					var newOrder = this.getPlotOrder();
+					newOrder.splice(index, 1);
+					newOrder.push(name);
+					return this.setPlotOrder(newOrder);	//	dojox.charting.Chart2D
+				}
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		addSeries: function(name, data, kwArgs){
+			//	summary:
+			//		Add a data series to the chart for rendering.
+			//	name: String:
+			//		The name of the data series to be plotted.
+			//	data: Array|Object:
+			//		The array of data points (either numbers or objects) that
+			//		represents the data to be drawn. Or it can be an object. In
+			//		the latter case, it should have a property "data" (an array),
+			//		destroy(), and setSeriesObject().
+			//	kwArgs: dojox.charting.__SeriesCtorArgs?:
+			//		An optional keyword arguments object that will be mixed into
+			//		the resultant series object.
+			//	returns: dojox.charting.Chart2D:
+			//		A reference to the current chart for functional chaining.
+			var run = new dc.Series(this, data, kwArgs);
+			run.name = name;
+			if(name in this.runs){
+				this.series[this.runs[name]].destroy();
+				this.series[this.runs[name]] = run;
+			}else{
+				this.runs[name] = this.series.length;
+				this.series.push(run);
+			}
+			this.dirty = true;
+			// fix min/max
+			if(!("ymin" in run) && "min" in run){ run.ymin = run.min; }
+			if(!("ymax" in run) && "max" in run){ run.ymax = run.max; }
+			return this;	//	dojox.charting.Chart2D
+		},
+		removeSeries: function(name){
+			//	summary:
+			//		Remove the series defined by name from the chart.
+			//	name: String
+			//		The name of the series as defined by addSeries.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.runs){
+				// get the index and remove the name
+				var index = this.runs[name],
+					plotName = this.series[index].plot;
+				delete this.runs[name];
+				// destroy the run
+				this.series[index].destroy();
+				// remove the run from the stack of series
+				this.series.splice(index, 1);
+				// update indices to reflect the shift
+				df.forIn(this.runs, function(idx, name, runs){
+					if(idx > index){
+						runs[name] = idx - 1;
+					}
+				});
+				this.dirty = true;
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		updateSeries: function(name, data){
+			//	summary:
+			//		Update the given series with a new set of data points.
+			//	name: String
+			//		The name of the series as defined in addSeries.
+			//	data: Array|Object:
+			//		The array of data points (either numbers or objects) that
+			//		represents the data to be drawn. Or it can be an object. In
+			//		the latter case, it should have a property "data" (an array),
+			//		destroy(), and setSeriesObject().
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.runs){
+				var run = this.series[this.runs[name]];
+				run.update(data);
+				this._invalidateDependentPlots(run.plot, false);
+				this._invalidateDependentPlots(run.plot, true);
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		getSeriesOrder: function(plotName){
+			//	summary:
+			//		Returns an array of series names in the current order
+			//		(the top-most series is the first) within a plot.
+			//	plotName: String:
+			//		Plot's name.
+			//	returns: Array
+			return df.map(df.filter(this.series, function(run){
+					return run.plot == plotName;
+				}), getName);
+		},
+		setSeriesOrder: function(newOrder){
+			//	summary:
+			//		Sets new order of series within a plot. newOrder cannot add
+			//		or remove series. Wrong names, or dups are ignored.
+			//	newOrder: Array:
+			//		Array of series names compatible with getPlotOrder(). All
+			//		series should belong to the same plot.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			var plotName, names = {},
+				order = df.filter(newOrder, function(name){
+					if(!(name in this.runs) || (name in names)){
+						return false;
+					}
+					var run = this.series[this.runs[name]];
+					if(plotName){
+						if(run.plot != plotName){
+							return false;
+						}
+					}else{
+						plotName = run.plot;
+					}
+					names[name] = 1;
+					return true;
+				}, this);
+			df.forEach(this.series, function(run){
+				var name = run.name;
+				if(!(name in names) && run.plot == plotName){
+					order.push(name);
+				}
+			});
+			var newSeries = df.map(order, function(name){
+					return this.series[this.runs[name]];
+				}, this);
+			this.series = newSeries.concat(df.filter(this.series, function(run){
+				return run.plot != plotName;
+			}));
+			df.forEach(this.series, function(run, i){
+				this.runs[run.name] = i;
+			}, this);
+			this.dirty = true;
+			return this;	//	dojox.charting.Chart2D
+		},
+		moveSeriesToFront: function(name){
+			//	summary:
+			//		Moves a given series to front of a plot.
+			//	name: String:
+			//		Series' name to move.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.runs){
+				var index = this.runs[name],
+					newOrder = this.getSeriesOrder(this.series[index].plot);
+				if(name != newOrder[0]){
+					newOrder.splice(index, 1);
+					newOrder.unshift(name);
+					return this.setSeriesOrder(newOrder);	//	dojox.charting.Chart2D
+				}
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		moveSeriesToBack: function(name){
+			//	summary:
+			//		Moves a given series to back of a plot.
+			//	name: String:
+			//		Series' name to move.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(name in this.runs){
+				var index = this.runs[name],
+					newOrder = this.getSeriesOrder(this.series[index].plot);
+				if(name != newOrder[newOrder.length - 1]){
+					newOrder.splice(index, 1);
+					newOrder.push(name);
+					return this.setSeriesOrder(newOrder);	//	dojox.charting.Chart2D
+				}
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		resize: function(width, height){
+			//	summary:
+			//		Resize the chart to the dimensions of width and height.
+			//	width: Number
+			//		The new width of the chart.
+			//	height: Number
+			//		The new height of the chart.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			var box;
+			switch(arguments.length){
+				case 0:
+					box = dojo.marginBox(this.node);
+					break;
+				case 1:
+					box = width;
+					break;
+				default:
+					box = { w: width, h: height };
+					break;
+			}
+			dojo.marginBox(this.node, box);
+			this.surface.setDimensions(box.w, box.h);
+			this.dirty = true;
+			this.coords = null;
+			return this.render();	//	dojox.charting.Chart2D
+		},
+		getGeometry: function(){
+			//	summary:
+			//		Returns a map of information about all axes in a chart and what they represent
+			//		in terms of scaling (see dojox.charting.axis2d.Default.getScaler).
+			//	returns: Object
+			//		An map of geometry objects, a one-to-one mapping of axes.
+			var ret = {};
+			df.forIn(this.axes, function(axis){
+				if(axis.initialized()){
+					ret[axis.name] = {
+						name:		axis.name,
+						vertical:	axis.vertical,
+						scaler:		axis.scaler,
+						ticks:		axis.ticks
+					};
+				}
+			});
+			return ret;	//	Object
+		},
+		setAxisWindow: function(name, scale, offset, zoom){
+			//	summary:
+			//		Zooms an axis and all dependent plots. Can be used to zoom in 1D.
+			//	name: String
+			//		The name of the axis as defined by addAxis.
+			//	scale: Number
+			//		The scale on the target axis.
+			//	offset: Number
+			//		Any offest, as measured by axis tick
+			//	zoom: Boolean|Object?
+			//		The chart zooming animation trigger.  This is null by default,
+			//		e.g. {duration: 1200}, or just set true.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			var axis = this.axes[name];
+			if(axis){
+				axis.setWindow(scale, offset);
+				dojo.forEach(this.stack,function(plot){
+					if(plot.hAxis == name || plot.vAxis == name){
+						plot.zoom = zoom;
+					}
+				})
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		setWindow: function(sx, sy, dx, dy, zoom){
+			//	summary:
+			//		Zooms in or out any plots in two dimensions.
+			//	sx: Number
+			//		The scale for the x axis.
+			//	sy: Number
+			//		The scale for the y axis.
+			//	dx: Number
+			//		The pixel offset on the x axis.
+			//	dy: Number
+			//		The pixel offset on the y axis.
+			//	zoom: Boolean|Object?
+			//		The chart zooming animation trigger.  This is null by default,
+			//		e.g. {duration: 1200}, or just set true.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(!("plotArea" in this)){
+				this.calculateGeometry();
+			}
+			df.forIn(this.axes, function(axis){
+				var scale, offset, bounds = axis.getScaler().bounds,
+					s = bounds.span / (bounds.upper - bounds.lower);
+				if(axis.vertical){
+					scale  = sy;
+					offset = dy / s / scale;
+				}else{
+					scale  = sx;
+					offset = dx / s / scale;
+				}
+				axis.setWindow(scale, offset);
+			});
+			dojo.forEach(this.stack, function(plot){ plot.zoom = zoom; });
+			return this;	//	dojox.charting.Chart2D
+		},
+		zoomIn:	function(name, range){
+			//	summary:
+			//		Zoom the chart to a specific range on one axis.  This calls render()
+			//		directly as a convenience method.
+			//	name: String
+			//		The name of the axis as defined by addAxis.
+			//	range: Array
+			//		The end points of the zoom range, measured in axis ticks.
+			var axis = this.axes[name];
+			if(axis){
+				var scale, offset, bounds = axis.getScaler().bounds;
+				var lower = Math.min(range[0],range[1]);
+				var upper = Math.max(range[0],range[1]);
+				lower = range[0] < bounds.lower ? bounds.lower : lower;
+				upper = range[1] > bounds.upper ? bounds.upper : upper;
+				scale = (bounds.upper - bounds.lower) / (upper - lower);
+				offset = lower - bounds.lower;
+				this.setAxisWindow(name, scale, offset);
+				this.render();
+			}
+		},
+		calculateGeometry: function(){
+			//	summary:
+			//		Calculate the geometry of the chart based on the defined axes of
+			//		a chart.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(this.dirty){
+				return this.fullGeometry();
+			}
+
+			// calculate geometry
+			var dirty = dojo.filter(this.stack, function(plot){
+					return plot.dirty ||
+						(plot.hAxis && this.axes[plot.hAxis].dirty) ||
+						(plot.vAxis && this.axes[plot.vAxis].dirty);
+				}, this);
+			calculateAxes(dirty, this.plotArea);
+
+			return this;	//	dojox.charting.Chart2D
+		},
+		fullGeometry: function(){
+			//	summary:
+			//		Calculate the full geometry of the chart.  This includes passing
+			//		over all major elements of a chart (plots, axes, series, container)
+			//		in order to ensure proper rendering.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			this._makeDirty();
+
+			// clear old values
+			dojo.forEach(this.stack, clear);
+
+			// rebuild new connections, and add defaults
+
+			// set up a theme
+			if(!this.theme){
+				this.setTheme(new dojox.charting.Theme(dojox.charting._def));
+			}
+
+			// assign series
+			dojo.forEach(this.series, function(run){
+				if(!(run.plot in this.plots)){
+					var plot = new dc.plot2d.Default(this, {});
+					plot.name = run.plot;
+					this.plots[run.plot] = this.stack.length;
+					this.stack.push(plot);
+				}
+				this.stack[this.plots[run.plot]].addSeries(run);
+			}, this);
+			// assign axes
+			dojo.forEach(this.stack, function(plot){
+				if(plot.hAxis){
+					plot.setAxis(this.axes[plot.hAxis]);
+				}
+				if(plot.vAxis){
+					plot.setAxis(this.axes[plot.vAxis]);
+				}
+			}, this);
+
+			// calculate geometry
+
+			// 1st pass
+			var dim = this.dim = this.surface.getDimensions();
+			dim.width  = dojox.gfx.normalizedLength(dim.width);
+			dim.height = dojox.gfx.normalizedLength(dim.height);
+			df.forIn(this.axes, clear);
+			calculateAxes(this.stack, dim);
+
+			// assumption: we don't have stacked axes yet
+			var offsets = this.offsets = { l: 0, r: 0, t: 0, b: 0 };
+			df.forIn(this.axes, function(axis){
+				df.forIn(axis.getOffsets(), function(o, i){ offsets[i] += o; });
+			});
+			// add margins
+			df.forIn(this.margins, function(o, i){ offsets[i] += o; });
+
+			// 2nd pass with realistic dimensions
+			this.plotArea = {
+				width: dim.width - offsets.l - offsets.r,
+				height: dim.height - offsets.t - offsets.b
+			};
+			df.forIn(this.axes, clear);
+			calculateAxes(this.stack, this.plotArea);
+
+			return this;	//	dojox.charting.Chart2D
+		},
+		render: function(){
+			//	summary:
+			//		Render the chart according to the current information defined.  This should
+			//		be the last call made when defining/creating a chart, or if data within the
+			//		chart has been changed.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(this.theme){
+				this.theme.clear();
+			}
+
+			if(this.dirty){
+				return this.fullRender();
+			}
+
+			this.calculateGeometry();
+
+			// go over the stack backwards
+			df.forEachRev(this.stack, function(plot){ plot.render(this.dim, this.offsets); }, this);
+
+			// go over axes
+			df.forIn(this.axes, function(axis){ axis.render(this.dim, this.offsets); }, this);
+
+			this._makeClean();
+
+			// BEGIN FOR HTML CANVAS
+			if(this.surface.render){ this.surface.render(); };
+			// END FOR HTML CANVAS
+
+			return this;	//	dojox.charting.Chart2D
+		},
+		fullRender: function(){
+			//	summary:
+			//		Force a full rendering of the chart, including full resets on the chart itself.
+			//		You should not call this method directly unless absolutely necessary.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+
+			// calculate geometry
+			this.fullGeometry();
+			var offsets = this.offsets, dim = this.dim;
+
+			// get required colors
+			//var requiredColors = df.foldl(this.stack, "z + plot.getRequiredColors()", 0);
+			//this.theme.defineColors({num: requiredColors, cache: false});
+
+			// clear old shapes
+			dojo.forEach(this.series, purge);
+			df.forIn(this.axes, purge);
+			dojo.forEach(this.stack,  purge);
+			this.surface.clear();
+
+			// generate shapes
+
+			// draw a plot background
+			var t = this.theme,
+				fill   = t.plotarea && t.plotarea.fill,
+				stroke = t.plotarea && t.plotarea.stroke;
+			if(fill){
+				this.surface.createRect({
+					x: offsets.l - 1, y: offsets.t - 1,
+					width:  dim.width  - offsets.l - offsets.r + 2,
+					height: dim.height - offsets.t - offsets.b + 2
+				}).setFill(fill);
+			}
+			if(stroke){
+				this.surface.createRect({
+					x: offsets.l, y: offsets.t,
+					width:  dim.width  - offsets.l - offsets.r + 1,
+					height: dim.height - offsets.t - offsets.b + 1
+				}).setStroke(stroke);
+			}
+
+			// go over the stack backwards
+			df.foldr(this.stack, function(z, plot){ return plot.render(dim, offsets), 0; }, 0);
+
+			// pseudo-clipping: matting
+			fill   = this.fill   !== undefined ? this.fill   : (t.chart && t.chart.fill);
+			stroke = this.stroke !== undefined ? this.stroke : (t.chart && t.chart.stroke);
+
+			//	TRT: support for "inherit" as a named value in a theme.
+			if(fill == "inherit"){
+				//	find the background color of the nearest ancestor node, and use that explicitly.
+				var node = this.node, fill = new dojo.Color(dojo.style(node, "backgroundColor"));
+				while(fill.a==0 && node!=document.documentElement){
+					fill = new dojo.Color(dojo.style(node, "backgroundColor"));
+					node = node.parentNode;
+				}
+			}
+
+			if(fill){
+				if(offsets.l){	// left
+					this.surface.createRect({
+						width:  offsets.l,
+						height: dim.height + 1
+					}).setFill(fill);
+				}
+				if(offsets.r){	// right
+					this.surface.createRect({
+						x: dim.width - offsets.r,
+						width:  offsets.r + 1,
+						height: dim.height + 2
+					}).setFill(fill);
+				}
+				if(offsets.t){	// top
+					this.surface.createRect({
+						width:  dim.width + 1,
+						height: offsets.t
+					}).setFill(fill);
+				}
+				if(offsets.b){	// bottom
+					this.surface.createRect({
+						y: dim.height - offsets.b,
+						width:  dim.width + 1,
+						height: offsets.b + 2
+					}).setFill(fill);
+				}
+			}
+			if(stroke){
+				this.surface.createRect({
+					width:  dim.width - 1,
+					height: dim.height - 1
+				}).setStroke(stroke);
+			}
+
+			// go over axes
+			df.forIn(this.axes, function(axis){ axis.render(dim, offsets); });
+
+			this._makeClean();
+
+			// BEGIN FOR HTML CANVAS
+			if(this.surface.render){ this.surface.render(); };
+			// END FOR HTML CANVAS
+
+			return this;	//	dojox.charting.Chart2D
+		},
+		delayedRender: function(){
+			//	summary:
+			//		Delayed render, which is used to collect multiple updates
+			//		within a delayInMs time window.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+
+			if(!this._delayedRenderHandle){
+				this._delayedRenderHandle = setTimeout(
+					dojo.hitch(this, function(){
+						clearTimeout(this._delayedRenderHandle);
+						this._delayedRenderHandle = null;
+						this.render();
+					}),
+					this.delayInMs
+				);
+			}
+
+			return this;	//	dojox.charting.Chart2D
+		},
+		connectToPlot: function(name, object, method){
+			//	summary:
+			//		A convenience method to connect a function to a plot.
+			//	name: String
+			//		The name of the plot as defined by addPlot.
+			//	object: Object
+			//		The object to be connected.
+			//	method: Function
+			//		The function to be executed.
+			//	returns: Array
+			//		A handle to the connection, as defined by dojo.connect (see dojo.connect).
+			return name in this.plots ? this.stack[this.plots[name]].connect(object, method) : null;	//	Array
+		},
+		fireEvent: function(seriesName, eventName, index){
+			//	summary:
+			//		Fires a synthetic event for a series item.
+			//	seriesName: String:
+			//		Series name.
+			//	eventName: String:
+			//		Event name to simulate: onmouseover, onmouseout, onclick.
+			//	index: Number:
+			//		Valid data value index for the event.
+			//	returns: dojox.charting.Chart2D
+			//		A reference to the current chart for functional chaining.
+			if(seriesName in this.runs){
+				var plotName = this.series[this.runs[seriesName]].plot;
+				if(plotName in this.plots){
+					var plot = this.stack[this.plots[plotName]];
+					if(plot){
+						plot.fireEvent(seriesName, eventName, index);
+					}
+				}
+			}
+			return this;	//	dojox.charting.Chart2D
+		},
+		_makeClean: function(){
+			// reset dirty flags
+			dojo.forEach(this.axes,   makeClean);
+			dojo.forEach(this.stack,  makeClean);
+			dojo.forEach(this.series, makeClean);
+			this.dirty = false;
+		},
+		_makeDirty: function(){
+			// reset dirty flags
+			dojo.forEach(this.axes,   makeDirty);
+			dojo.forEach(this.stack,  makeDirty);
+			dojo.forEach(this.series, makeDirty);
+			this.dirty = true;
+		},
+		_invalidateDependentPlots: function(plotName, /* Boolean */ verticalAxis){
+			if(plotName in this.plots){
+				var plot = this.stack[this.plots[plotName]], axis,
+					axisName = verticalAxis ? "vAxis" : "hAxis";
+				if(plot[axisName]){
+					axis = this.axes[plot[axisName]];
+					if(axis && axis.dependOnData()){
+						axis.dirty = true;
+						// find all plots and mark them dirty
+						dojo.forEach(this.stack, function(p){
+							if(p[axisName] && p[axisName] == plot[axisName]){
+								p.dirty = true;
+							}
+						});
+					}
+				}else{
+					plot.dirty = true;
+				}
+			}
+		}
+	});
+
+	function hSection(stats){
+		return {min: stats.hmin, max: stats.hmax};
+	}
+
+	function vSection(stats){
+		return {min: stats.vmin, max: stats.vmax};
+	}
+
+	function hReplace(stats, h){
+		stats.hmin = h.min;
+		stats.hmax = h.max;
+	}
+
+	function vReplace(stats, v){
+		stats.vmin = v.min;
+		stats.vmax = v.max;
+	}
+
+	function combineStats(target, source){
+		if(target && source){
+			target.min = Math.min(target.min, source.min);
+			target.max = Math.max(target.max, source.max);
+		}
+		return target || source;
+	}
+
+	function calculateAxes(stack, plotArea){
+		var plots = {}, axes = {};
+		dojo.forEach(stack, function(plot){
+			var stats = plots[plot.name] = plot.getSeriesStats();
+			if(plot.hAxis){
+				axes[plot.hAxis] = combineStats(axes[plot.hAxis], hSection(stats));
+			}
+			if(plot.vAxis){
+				axes[plot.vAxis] = combineStats(axes[plot.vAxis], vSection(stats));
+			}
+		});
+		dojo.forEach(stack, function(plot){
+			var stats = plots[plot.name];
+			if(plot.hAxis){
+				hReplace(stats, axes[plot.hAxis]);
+			}
+			if(plot.vAxis){
+				vReplace(stats, axes[plot.vAxis]);
+			}
+			plot.initializeScalers(plotArea, stats);
+		});
+	}
+})();
+
+}
+
+if(!dojo._hasResource["dojo.fx.easing"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx.easing"] = true;
+dojo.provide("dojo.fx.easing");
+
+dojo.fx.easing = {
+	// summary: 
+	//		Collection of easing functions to use beyond the default 
+	//		`dojo._defaultEasing` function.
+	// 
+	// description:
+	//
+	//		Easing functions are used to manipulate the iteration through
+	//		an `dojo.Animation`s _Line. _Line being the properties of an Animation,
+	//		and the easing function progresses through that Line determing
+	//		how quickly (or slowly) it should go. Or more accurately: modify
+	//		the value of the _Line based on the percentage of animation completed.
+	//	
+	//		All functions follow a simple naming convention of "ease type" + "when".
+	//		If the name of the function ends in Out, the easing described appears
+	//		towards the end of the animation. "In" means during the beginning,
+	//		and InOut means both ranges of the Animation will applied, both
+	//		beginning and end. 
+	//
+	//		One does not call the easing function directly, it must be passed to 
+	//		the `easing` property of an animation.
+	//
+	//	example:
+	//	|	
+	//	|	var anim = dojo.fadeOut({
+	//	|		node: 'node',	
+	//	|		duration: 2000,
+	//	|		//	note there is no () 
+	//	|		easing: dojo.fx.easing.quadIn
+	//	|	}).play();
+	//
+	
+	linear: function(/* Decimal? */n){
+		// summary: A linear easing function
+		return n;
+	},
+
+	quadIn: function(/* Decimal? */n){
+		return Math.pow(n, 2);
+	},
+
+	quadOut: function(/* Decimal? */n){
+		return n * (n - 2) * -1;
+	},
+
+	quadInOut: function(/* Decimal? */n){
+		n = n * 2;
+		if(n < 1){ return Math.pow(n, 2) / 2; }
+		return -1 * ((--n) * (n - 2) - 1) / 2;
+	},
+
+	cubicIn: function(/* Decimal? */n){
+		return Math.pow(n, 3);
+	},
+
+	cubicOut: function(/* Decimal? */n){
+		return Math.pow(n - 1, 3) + 1;
+	},
+
+	cubicInOut: function(/* Decimal? */n){
+		n = n * 2;
+		if(n < 1){ return Math.pow(n, 3) / 2; }
+		n -= 2;
+		return (Math.pow(n, 3) + 2) / 2;
+	},
+
+	quartIn: function(/* Decimal? */n){
+		return Math.pow(n, 4);
+	},
+
+	quartOut: function(/* Decimal? */n){
+		return -1 * (Math.pow(n - 1, 4) - 1);
+	},
+
+	quartInOut: function(/* Decimal? */n){
+		n = n * 2;
+		if(n < 1){ return Math.pow(n, 4) / 2; }
+		n -= 2;
+		return -1 / 2 * (Math.pow(n, 4) - 2);
+	},
+
+	quintIn: function(/* Decimal? */n){
+		return Math.pow(n, 5);
+	},
+
+	quintOut: function(/* Decimal? */n){
+		return Math.pow(n - 1, 5) + 1;
+	},
+
+	quintInOut: function(/* Decimal? */n){
+		n = n * 2;
+		if(n < 1){ return Math.pow(n, 5) / 2; };
+		n -= 2;
+		return (Math.pow(n, 5) + 2) / 2;
+	},
+
+	sineIn: function(/* Decimal? */n){
+		return -1 * Math.cos(n * (Math.PI / 2)) + 1;
+	},
+
+	sineOut: function(/* Decimal? */n){
+		return Math.sin(n * (Math.PI / 2));
+	},
+
+	sineInOut: function(/* Decimal? */n){
+		return -1 * (Math.cos(Math.PI * n) - 1) / 2;
+	},
+
+	expoIn: function(/* Decimal? */n){
+		return (n == 0) ? 0 : Math.pow(2, 10 * (n - 1));
+	},
+
+	expoOut: function(/* Decimal? */n){
+		return (n == 1) ? 1 : (-1 * Math.pow(2, -10 * n) + 1);
+	},
+
+	expoInOut: function(/* Decimal? */n){
+		if(n == 0){ return 0; }
+		if(n == 1){ return 1; }
+		n = n * 2;
+		if(n < 1){ return Math.pow(2, 10 * (n - 1)) / 2; }
+		--n;
+		return (-1 * Math.pow(2, -10 * n) + 2) / 2;
+	},
+
+	circIn: function(/* Decimal? */n){
+		return -1 * (Math.sqrt(1 - Math.pow(n, 2)) - 1);
+	},
+
+	circOut: function(/* Decimal? */n){
+		n = n - 1;
+		return Math.sqrt(1 - Math.pow(n, 2));
+	},
+
+	circInOut: function(/* Decimal? */n){
+		n = n * 2;
+		if(n < 1){ return -1 / 2 * (Math.sqrt(1 - Math.pow(n, 2)) - 1); }
+		n -= 2;
+		return 1 / 2 * (Math.sqrt(1 - Math.pow(n, 2)) + 1);
+	},
+
+	backIn: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function that starts away from the target, 
+		//		and quickly accelerates towards the end value.
+		// 
+		//		Use caution when the easing will cause values to become 
+		//		negative as some properties cannot be set to negative values.
+		var s = 1.70158;
+		return Math.pow(n, 2) * ((s + 1) * n - s);
+	},
+
+	backOut: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function that pops past the range briefly, and slowly comes back. 
+		//
+		// description:
+		//		An easing function that pops past the range briefly, and slowly comes back. 
+		//
+		//		Use caution when the easing will cause values to become negative as some 
+		//		properties cannot be set to negative values.
+		
+		n = n - 1;
+		var s = 1.70158;
+		return Math.pow(n, 2) * ((s + 1) * n + s) + 1;
+	},
+
+	backInOut: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function combining the effects of `backIn` and `backOut`
+		//
+		// description:
+		//		An easing function combining the effects of `backIn` and `backOut`.
+		//		Use caution when the easing will cause values to become negative 
+		//		as some properties cannot be set to negative values.
+		var s = 1.70158 * 1.525;
+		n = n * 2;
+		if(n < 1){ return (Math.pow(n, 2) * ((s + 1) * n - s)) / 2; }
+		n-=2;
+		return (Math.pow(n, 2) * ((s + 1) * n + s) + 2) / 2;
+	},
+
+	elasticIn: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function the elastically snaps from the start value
+		//
+		// description:
+		//		An easing function the elastically snaps from the start value
+		//	
+		//		Use caution when the elasticity will cause values to become negative 
+		//		as some properties cannot be set to negative values.
+		if(n == 0 || n == 1){ return n; }
+		var p = .3;
+		var s = p / 4;
+		n = n - 1;
+		return -1 * Math.pow(2, 10 * n) * Math.sin((n - s) * (2 * Math.PI) / p);
+	},
+
+	elasticOut: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function that elasticly snaps around the target value,
+		//		near the end of the Animation
+		//
+		// description:
+		//		An easing function that elasticly snaps around the target value,
+		//		near the end of the Animation
+		//
+		//		Use caution when the elasticity will cause values to become 
+		//		negative as some properties cannot be set to negative values.
+		if(n==0 || n == 1){ return n; }
+		var p = .3;
+		var s = p / 4;
+		return Math.pow(2, -10 * n) * Math.sin((n - s) * (2 * Math.PI) / p) + 1;
+	},
+
+	elasticInOut: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function that elasticly snaps around the value, near
+		//		the beginning and end of the Animation.
+		//
+		// description:
+		//		An easing function that elasticly snaps around the value, near
+		//		the beginning and end of the Animation.
+		//
+		//		Use caution when the elasticity will cause values to become 
+		//		negative as some properties cannot be set to negative values.
+		if(n == 0) return 0;
+		n = n * 2;
+		if(n == 2) return 1;
+		var p = .3 * 1.5;
+		var s = p / 4;
+		if(n < 1){
+			n -= 1;
+			return -.5 * (Math.pow(2, 10 * n) * Math.sin((n - s) * (2 * Math.PI) / p));
+		}
+		n -= 1;
+		return .5 * (Math.pow(2, -10 * n) * Math.sin((n - s) * (2 * Math.PI) / p)) + 1;
+	},
+
+	bounceIn: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function that 'bounces' near the beginning of an Animation
+		return (1 - dojo.fx.easing.bounceOut(1 - n)); // Decimal
+	},
+
+	bounceOut: function(/* Decimal? */n){
+		// summary:
+		//		An easing function that 'bounces' near the end of an Animation
+		var s = 7.5625;
+		var p = 2.75;
+		var l; 
+		if(n < (1 / p)){
+			l = s * Math.pow(n, 2);
+		}else if(n < (2 / p)){
+			n -= (1.5 / p);
+			l = s * Math.pow(n, 2) + .75;
+		}else if(n < (2.5 / p)){
+			n -= (2.25 / p);
+			l = s * Math.pow(n, 2) + .9375;
+		}else{
+			n -= (2.625 / p);
+			l = s * Math.pow(n, 2) + .984375;
+		}
+		return l;
+	},
+
+	bounceInOut: function(/* Decimal? */n){
+		// summary: 
+		//		An easing function that 'bounces' at the beginning and end of the Animation
+		if(n < 0.5){ return dojo.fx.easing.bounceIn(n * 2) / 2; }
+		return (dojo.fx.easing.bounceOut(n * 2 - 1) / 2) + 0.5; // Decimal
+	}
+};
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Base"] = true;
+dojo.provide("dojox.charting.action2d.Base");
+
+
+
+
+
+/*=====
+dojox.charting.action2d.__BaseCtorArgs = function(duration, easing){
+ 	//	summary:
+	//		The base keyword arguments object for creating an action2d.
+	//	duration: Number?
+	//		The amount of time in milliseconds for an animation to last.  Default is 400.
+	//	easing: dojox.fx.easing.*?
+	//		An easing object (see dojo.fx.easing) for use in an animation.  The
+	//		default is dojox.fx.easing.backOut.
+	this.duration = duration;
+	this.easing = easing;
+}
+=====*/
+(function(){
+	var DEFAULT_DURATION = 400,	// ms
+		DEFAULT_EASING   = dojo.fx.easing.backOut,
+		df = dojox.lang.functional;
+
+	dojo.declare("dojox.charting.action2d.Base", null, {
+
+		overOutEvents: {onmouseover: 1, onmouseout: 1},
+
+		constructor: function(chart, plot, kwargs){
+			//	summary:
+			//		Create a new base Action.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this action applies to.
+			//	plot: String?
+			//		The name of the plot this action belongs to.  If none is passed "default" is assumed.
+			//	kwargs: dojox.charting.action2d.__BaseCtorArgs?
+			//		Optional arguments for the action.
+			this.chart = chart;
+			this.plot = plot || "default";
+			this.anim = {};
+
+			// process common optional named parameters
+			if(!kwargs){ kwargs = {}; }
+			this.duration = kwargs.duration ? kwargs.duration : DEFAULT_DURATION;
+			this.easing   = kwargs.easing   ? kwargs.easing   : DEFAULT_EASING;
+		},
+
+		connect: function(){
+			//	summary:
+			//		Connect this action to the given plot.
+			this.handle = this.chart.connectToPlot(this.plot, this, "process");
+		},
+
+		disconnect: function(){
+			//	summary:
+			//		Disconnect this action from the given plot, if connected.
+			if(this.handle){
+				dojo.disconnect(this.handle);
+				this.handle = null;
+			}
+		},
+
+		reset: function(){
+			//	summary:
+			//		Reset the action.
+		},
+
+		destroy: function(){
+			//	summary:
+			//		Do any cleanup needed when destroying parent elements.
+			this.disconnect();
+			df.forIn(this.anim, function(o){
+				df.forIn(o, function(anim){
+					anim.action.stop(true);
+				});
+			});
+			this.anim = {};
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Highlight"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Highlight"] = true;
+dojo.provide("dojox.charting.action2d.Highlight");
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.action2d.__HighlightCtorArgs", dojox.charting.action2d.__BaseCtorArgs, {
+	//	summary:
+	//		Additional arguments for highlighting actions.
+
+	//	highlight: String|dojo.Color|Function?
+	//		Either a color or a function that creates a color when highlighting happens.
+	highlight: null
+});
+=====*/
+(function(){
+	var DEFAULT_SATURATION  = 100,	// %
+		DEFAULT_LUMINOSITY1 = 75,	// %
+		DEFAULT_LUMINOSITY2 = 50,	// %
+
+		c = dojox.color,
+
+		cc = function(color){
+			return function(){ return color; };
+		},
+
+		hl = function(color){
+			var a = new c.Color(color),
+				x = a.toHsl();
+			if(x.s == 0){
+				x.l = x.l < 50 ? 100 : 0;
+			}else{
+				x.s = DEFAULT_SATURATION;
+				if(x.l < DEFAULT_LUMINOSITY2){
+					x.l = DEFAULT_LUMINOSITY1;
+				}else if(x.l > DEFAULT_LUMINOSITY1){
+					x.l = DEFAULT_LUMINOSITY2;
+				}else{
+					x.l = x.l - DEFAULT_LUMINOSITY2 > DEFAULT_LUMINOSITY1 - x.l ?
+						DEFAULT_LUMINOSITY2 : DEFAULT_LUMINOSITY1;
+				}
+			}
+			return c.fromHsl(x);
+		};
+
+	dojo.declare("dojox.charting.action2d.Highlight", dojox.charting.action2d.Base, {
+		//	summary:
+		//		Creates a highlighting action on a plot, where an element on that plot
+		//		has a highlight on it.
+
+		// the data description block for the widget parser
+		defaultParams: {
+			duration: 400,	// duration of the action in ms
+			easing:   dojo.fx.easing.backOut	// easing for the action
+		},
+		optionalParams: {
+			highlight: "red"	// name for the highlight color
+								// programmatic instantiation can use functions and color objects
+		},
+
+		constructor: function(chart, plot, kwArgs){
+			//	summary:
+			//		Create the highlighting action and connect it to the plot.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this action belongs to.
+			//	plot: String?
+			//		The plot this action is attached to.  If not passed, "default" is assumed.
+			//	kwArgs: dojox.charting.action2d.__HighlightCtorArgs?
+			//		Optional keyword arguments object for setting parameters.
+			var a = kwArgs && kwArgs.highlight;
+			this.colorFun = a ? (dojo.isFunction(a) ? a : cc(a)) : hl;
+
+			this.connect();
+		},
+
+		process: function(o){
+			//	summary:
+			//		Process the action on the given object.
+			//	o: dojox.gfx.Shape
+			//		The object on which to process the highlighting action.
+			if(!o.shape || !(o.type in this.overOutEvents)){ return; }
+
+			var runName = o.run.name, index = o.index, anim, startFill, endFill;
+
+			if(runName in this.anim){
+				anim = this.anim[runName][index];
+			}else{
+				this.anim[runName] = {};
+			}
+
+			if(anim){
+				anim.action.stop(true);
+			}else{
+				var color = o.shape.getFill();
+				if(!color || !(color instanceof dojo.Color)){
+					return;
+				}
+				this.anim[runName][index] = anim = {
+					start: color,
+					end:   this.colorFun(color)
+				};
+			}
+
+			var start = anim.start, end = anim.end;
+			if(o.type == "onmouseout"){
+				// swap colors
+				var t = start;
+				start = end;
+				end = t;
+			}
+
+			anim.action = dojox.gfx.fx.animateFill({
+				shape:    o.shape,
+				duration: this.duration,
+				easing:   this.easing,
+				color:    {start: start, end: end}
+			});
+			if(o.type == "onmouseout"){
+				dojo.connect(anim.action, "onEnd", this, function(){
+					if(this.anim[runName]){
+						delete this.anim[runName][index];
+					}
+				});
+			}
+			anim.action.play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojo.fx.Toggler"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx.Toggler"] = true;
+dojo.provide("dojo.fx.Toggler");
+
+dojo.declare("dojo.fx.Toggler", null, {
+	// summary:
+	//		A simple `dojo.Animation` toggler API.
+	//
+	// description:
+	//		class constructor for an animation toggler. It accepts a packed
+	//		set of arguments about what type of animation to use in each
+	//		direction, duration, etc. All available members are mixed into 
+	//		these animations from the constructor (for example, `node`, 
+	//		`showDuration`, `hideDuration`). 
+	//
+	// example:
+	//	|	var t = new dojo.fx.Toggler({
+	//	|		node: "nodeId",
+	//	|		showDuration: 500,
+	//	|		// hideDuration will default to "200"
+	//	|		showFunc: dojo.fx.wipeIn, 
+	//	|		// hideFunc will default to "fadeOut"
+	//	|	});
+	//	|	t.show(100); // delay showing for 100ms
+	//	|	// ...time passes...
+	//	|	t.hide();
+
+	// node: DomNode
+	//		the node to target for the showing and hiding animations
+	node: null,
+
+	// showFunc: Function
+	//		The function that returns the `dojo.Animation` to show the node
+	showFunc: dojo.fadeIn,
+
+	// hideFunc: Function	
+	//		The function that returns the `dojo.Animation` to hide the node
+	hideFunc: dojo.fadeOut,
+
+	// showDuration:
+	//		Time in milliseconds to run the show Animation
+	showDuration: 200,
+
+	// hideDuration:
+	//		Time in milliseconds to run the hide Animation
+	hideDuration: 200,
+
+	// FIXME: need a policy for where the toggler should "be" the next
+	// time show/hide are called if we're stopped somewhere in the
+	// middle.
+	// FIXME: also would be nice to specify individual showArgs/hideArgs mixed into
+	// each animation individually. 
+	// FIXME: also would be nice to have events from the animations exposed/bridged
+
+	/*=====
+	_showArgs: null,
+	_showAnim: null,
+
+	_hideArgs: null,
+	_hideAnim: null,
+
+	_isShowing: false,
+	_isHiding: false,
+	=====*/
+
+	constructor: function(args){
+		var _t = this;
+
+		dojo.mixin(_t, args);
+		_t.node = args.node;
+		_t._showArgs = dojo.mixin({}, args);
+		_t._showArgs.node = _t.node;
+		_t._showArgs.duration = _t.showDuration;
+		_t.showAnim = _t.showFunc(_t._showArgs);
+
+		_t._hideArgs = dojo.mixin({}, args);
+		_t._hideArgs.node = _t.node;
+		_t._hideArgs.duration = _t.hideDuration;
+		_t.hideAnim = _t.hideFunc(_t._hideArgs);
+
+		dojo.connect(_t.showAnim, "beforeBegin", dojo.hitch(_t.hideAnim, "stop", true));
+		dojo.connect(_t.hideAnim, "beforeBegin", dojo.hitch(_t.showAnim, "stop", true));
+	},
+
+	show: function(delay){
+		// summary: Toggle the node to showing
+		// delay: Integer?
+		//		Ammount of time to stall playing the show animation
+		return this.showAnim.play(delay || 0);
+	},
+
+	hide: function(delay){
+		// summary: Toggle the node to hidden
+		// delay: Integer?
+		//		Ammount of time to stall playing the hide animation
+		return this.hideAnim.play(delay || 0);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.fx"] = true;
+dojo.provide("dojo.fx");
+ // FIXME: remove this back-compat require in 2.0 
+/*=====
+dojo.fx = {
+	// summary: Effects library on top of Base animations
+};
+=====*/
+(function(){
+	
+	var d = dojo, 
+		_baseObj = {
+			_fire: function(evt, args){
+				if(this[evt]){
+					this[evt].apply(this, args||[]);
+				}
+				return this;
+			}
+		};
+
+	var _chain = function(animations){
+		this._index = -1;
+		this._animations = animations||[];
+		this._current = this._onAnimateCtx = this._onEndCtx = null;
+
+		this.duration = 0;
+		d.forEach(this._animations, function(a){
+			this.duration += a.duration;
+			if(a.delay){ this.duration += a.delay; }
+		}, this);
+	};
+	d.extend(_chain, {
+		_onAnimate: function(){
+			this._fire("onAnimate", arguments);
+		},
+		_onEnd: function(){
+			d.disconnect(this._onAnimateCtx);
+			d.disconnect(this._onEndCtx);
+			this._onAnimateCtx = this._onEndCtx = null;
+			if(this._index + 1 == this._animations.length){
+				this._fire("onEnd");
+			}else{
+				// switch animations
+				this._current = this._animations[++this._index];
+				this._onAnimateCtx = d.connect(this._current, "onAnimate", this, "_onAnimate");
+				this._onEndCtx = d.connect(this._current, "onEnd", this, "_onEnd");
+				this._current.play(0, true);
+			}
+		},
+		play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+			if(!this._current){ this._current = this._animations[this._index = 0]; }
+			if(!gotoStart && this._current.status() == "playing"){ return this; }
+			var beforeBegin = d.connect(this._current, "beforeBegin", this, function(){
+					this._fire("beforeBegin");
+				}),
+				onBegin = d.connect(this._current, "onBegin", this, function(arg){
+					this._fire("onBegin", arguments);
+				}),
+				onPlay = d.connect(this._current, "onPlay", this, function(arg){
+					this._fire("onPlay", arguments);
+					d.disconnect(beforeBegin);
+					d.disconnect(onBegin);
+					d.disconnect(onPlay);
+				});
+			if(this._onAnimateCtx){
+				d.disconnect(this._onAnimateCtx);
+			}
+			this._onAnimateCtx = d.connect(this._current, "onAnimate", this, "_onAnimate");
+			if(this._onEndCtx){
+				d.disconnect(this._onEndCtx);
+			}
+			this._onEndCtx = d.connect(this._current, "onEnd", this, "_onEnd");
+			this._current.play.apply(this._current, arguments);
+			return this;
+		},
+		pause: function(){
+			if(this._current){
+				var e = d.connect(this._current, "onPause", this, function(arg){
+						this._fire("onPause", arguments);
+						d.disconnect(e);
+					});
+				this._current.pause();
+			}
+			return this;
+		},
+		gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){
+			this.pause();
+			var offset = this.duration * percent;
+			this._current = null;
+			d.some(this._animations, function(a){
+				if(a.duration <= offset){
+					this._current = a;
+					return true;
+				}
+				offset -= a.duration;
+				return false;
+			});
+			if(this._current){
+				this._current.gotoPercent(offset / this._current.duration, andPlay);
+			}
+			return this;
+		},
+		stop: function(/*boolean?*/ gotoEnd){
+			if(this._current){
+				if(gotoEnd){
+					for(; this._index + 1 < this._animations.length; ++this._index){
+						this._animations[this._index].stop(true);
+					}
+					this._current = this._animations[this._index];
+				}
+				var e = d.connect(this._current, "onStop", this, function(arg){
+						this._fire("onStop", arguments);
+						d.disconnect(e);
+					});
+				this._current.stop();
+			}
+			return this;
+		},
+		status: function(){
+			return this._current ? this._current.status() : "stopped";
+		},
+		destroy: function(){
+			if(this._onAnimateCtx){ d.disconnect(this._onAnimateCtx); }
+			if(this._onEndCtx){ d.disconnect(this._onEndCtx); }
+		}
+	});
+	d.extend(_chain, _baseObj);
+
+	dojo.fx.chain = function(/*dojo.Animation[]*/ animations){
+		// summary: 
+		//		Chain a list of `dojo.Animation`s to run in sequence
+		//
+		// description:
+		//		Return a `dojo.Animation` which will play all passed
+		//		`dojo.Animation` instances in sequence, firing its own
+		//		synthesized events simulating a single animation. (eg:
+		//		onEnd of this animation means the end of the chain, 
+		//		not the individual animations within)
+		//
+		// example:
+		//	Once `node` is faded out, fade in `otherNode`
+		//	|	dojo.fx.chain([
+		//	|		dojo.fadeIn({ node:node }),
+		//	|		dojo.fadeOut({ node:otherNode })
+		//	|	]).play();
+		//
+		return new _chain(animations) // dojo.Animation
+	};
+
+	var _combine = function(animations){
+		this._animations = animations||[];
+		this._connects = [];
+		this._finished = 0;
+
+		this.duration = 0;
+		d.forEach(animations, function(a){
+			var duration = a.duration;
+			if(a.delay){ duration += a.delay; }
+			if(this.duration < duration){ this.duration = duration; }
+			this._connects.push(d.connect(a, "onEnd", this, "_onEnd"));
+		}, this);
+		
+		this._pseudoAnimation = new d.Animation({curve: [0, 1], duration: this.duration});
+		var self = this;
+		d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], 
+			function(evt){
+				self._connects.push(d.connect(self._pseudoAnimation, evt,
+					function(){ self._fire(evt, arguments); }
+				));
+			}
+		);
+	};
+	d.extend(_combine, {
+		_doAction: function(action, args){
+			d.forEach(this._animations, function(a){
+				a[action].apply(a, args);
+			});
+			return this;
+		},
+		_onEnd: function(){
+			if(++this._finished > this._animations.length){
+				this._fire("onEnd");
+			}
+		},
+		_call: function(action, args){
+			var t = this._pseudoAnimation;
+			t[action].apply(t, args);
+		},
+		play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
+			this._finished = 0;
+			this._doAction("play", arguments);
+			this._call("play", arguments);
+			return this;
+		},
+		pause: function(){
+			this._doAction("pause", arguments);
+			this._call("pause", arguments);
+			return this;
+		},
+		gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){
+			var ms = this.duration * percent;
+			d.forEach(this._animations, function(a){
+				a.gotoPercent(a.duration < ms ? 1 : (ms / a.duration), andPlay);
+			});
+			this._call("gotoPercent", arguments);
+			return this;
+		},
+		stop: function(/*boolean?*/ gotoEnd){
+			this._doAction("stop", arguments);
+			this._call("stop", arguments);
+			return this;
+		},
+		status: function(){
+			return this._pseudoAnimation.status();
+		},
+		destroy: function(){
+			d.forEach(this._connects, dojo.disconnect);
+		}
+	});
+	d.extend(_combine, _baseObj);
+
+	dojo.fx.combine = function(/*dojo.Animation[]*/ animations){
+		// summary: 
+		//		Combine a list of `dojo.Animation`s to run in parallel
+		//
+		// description:
+		//		Combine an array of `dojo.Animation`s to run in parallel, 
+		//		providing a new `dojo.Animation` instance encompasing each
+		//		animation, firing standard animation events.
+		//
+		// example:
+		//	Fade out `node` while fading in `otherNode` simultaneously
+		//	|	dojo.fx.combine([
+		//	|		dojo.fadeIn({ node:node }),
+		//	|		dojo.fadeOut({ node:otherNode })
+		//	|	]).play();
+		//
+		// example:
+		//	When the longest animation ends, execute a function:
+		//	|	var anim = dojo.fx.combine([
+		//	|		dojo.fadeIn({ node: n, duration:700 }),
+		//	|		dojo.fadeOut({ node: otherNode, duration: 300 })
+		//	|	]);
+		//	|	dojo.connect(anim, "onEnd", function(){
+		//	|		// overall animation is done.
+		//	|	});
+		//	|	anim.play(); // play the animation
+		//
+		return new _combine(animations); // dojo.Animation
+	};
+
+	dojo.fx.wipeIn = function(/*Object*/ args){
+		// summary:
+		//		Expand a node to it's natural height.
+		//
+		// description:
+		//		Returns an animation that will expand the
+		//		node defined in 'args' object from it's current height to
+		//		it's natural height (with no scrollbar).
+		//		Node must have no margin/border/padding.
+		//
+		// args: Object
+		//		A hash-map of standard `dojo.Animation` constructor properties
+		//		(such as easing: node: duration: and so on)
+		//
+		// example:
+		//	|	dojo.fx.wipeIn({
+		//	|		node:"someId"
+		//	|	}).play()
+		var node = args.node = d.byId(args.node), s = node.style, o;
+
+		var anim = d.animateProperty(d.mixin({
+			properties: {
+				height: {
+					// wrapped in functions so we wait till the last second to query (in case value has changed)
+					start: function(){
+						// start at current [computed] height, but use 1px rather than 0
+						// because 0 causes IE to display the whole panel
+						o = s.overflow;
+						s.overflow = "hidden";
+						if(s.visibility == "hidden" || s.display == "none"){
+							s.height = "1px";
+							s.display = "";
+							s.visibility = "";
+							return 1;
+						}else{
+							var height = d.style(node, "height");
+							return Math.max(height, 1);
+						}
+					},
+					end: function(){
+						return node.scrollHeight;
+					}
+				}
+			}
+		}, args));
+
+		d.connect(anim, "onEnd", function(){ 
+			s.height = "auto";
+			s.overflow = o;
+		});
+
+		return anim; // dojo.Animation
+	}
+
+	dojo.fx.wipeOut = function(/*Object*/ args){
+		// summary:
+		//		Shrink a node to nothing and hide it. 
+		//
+		// description:
+		//		Returns an animation that will shrink node defined in "args"
+		//		from it's current height to 1px, and then hide it.
+		//
+		// args: Object
+		//		A hash-map of standard `dojo.Animation` constructor properties
+		//		(such as easing: node: duration: and so on)
+		// 
+		// example:
+		//	|	dojo.fx.wipeOut({ node:"someId" }).play()
+		
+		var node = args.node = d.byId(args.node), s = node.style, o;
+		
+		var anim = d.animateProperty(d.mixin({
+			properties: {
+				height: {
+					end: 1 // 0 causes IE to display the whole panel
+				}
+			}
+		}, args));
+
+		d.connect(anim, "beforeBegin", function(){
+			o = s.overflow;
+			s.overflow = "hidden";
+			s.display = "";
+		});
+		d.connect(anim, "onEnd", function(){
+			s.overflow = o;
+			s.height = "auto";
+			s.display = "none";
+		});
+
+		return anim; // dojo.Animation
+	}
+
+	dojo.fx.slideTo = function(/*Object*/ args){
+		// summary:
+		//		Slide a node to a new top/left position
+		//
+		// description:
+		//		Returns an animation that will slide "node" 
+		//		defined in args Object from its current position to
+		//		the position defined by (args.left, args.top).
+		//
+		// args: Object
+		//		A hash-map of standard `dojo.Animation` constructor properties
+		//		(such as easing: node: duration: and so on). Special args members
+		//		are `top` and `left`, which indicate the new position to slide to.
+		//
+		// example:
+		//	|	dojo.fx.slideTo({ node: node, left:"40", top:"50", units:"px" }).play()
+
+		var node = args.node = d.byId(args.node), 
+			top = null, left = null;
+
+		var init = (function(n){
+			return function(){
+				var cs = d.getComputedStyle(n);
+				var pos = cs.position;
+				top = (pos == 'absolute' ? n.offsetTop : parseInt(cs.top) || 0);
+				left = (pos == 'absolute' ? n.offsetLeft : parseInt(cs.left) || 0);
+				if(pos != 'absolute' && pos != 'relative'){
+					var ret = d.position(n, true);
+					top = ret.y;
+					left = ret.x;
+					n.style.position="absolute";
+					n.style.top=top+"px";
+					n.style.left=left+"px";
+				}
+			};
+		})(node);
+		init();
+
+		var anim = d.animateProperty(d.mixin({
+			properties: {
+				top: args.top || 0,
+				left: args.left || 0
+			}
+		}, args));
+		d.connect(anim, "beforeBegin", anim, init);
+
+		return anim; // dojo.Animation
+	}
+
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Magnify"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Magnify"] = true;
+dojo.provide("dojox.charting.action2d.Magnify");
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.action2d.__MagnifyCtorArgs", dojox.charting.action2d.__BaseCtorArgs, {
+	//	summary:
+	//		Additional arguments for highlighting actions.
+
+	//	scale: Number?
+	//		The amount to magnify the given object to.  Default is 2.
+	scale: 2
+});
+=====*/
+(function(){
+	var DEFAULT_SCALE = 2,
+		m = dojox.gfx.matrix,
+		gf = dojox.gfx.fx;
+
+	dojo.declare("dojox.charting.action2d.Magnify", dojox.charting.action2d.Base, {
+		//	summary:
+		//		Create an action that magnifies the object the action is applied to.
+
+		// the data description block for the widget parser
+		defaultParams: {
+			duration: 400,	// duration of the action in ms
+			easing:   dojo.fx.easing.backOut,	// easing for the action
+			scale:    DEFAULT_SCALE	// scale of magnification
+		},
+		optionalParams: {},	// no optional parameters
+
+		constructor: function(chart, plot, kwArgs){
+			//	summary:
+			//		Create the magnifying action.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this action belongs to.
+			//	plot: String?
+			//		The plot to apply the action to. If not passed, "default" is assumed.
+			//	kwArgs: dojox.charting.action2d.__MagnifyCtorArgs?
+			//		Optional keyword arguments for this action.
+
+			// process optional named parameters
+			this.scale = kwArgs && typeof kwArgs.scale == "number" ? kwArgs.scale : DEFAULT_SCALE;
+
+			this.connect();
+		},
+
+		process: function(o){
+			//	summary:
+			//		Process the action on the given object.
+			//	o: dojox.gfx.Shape
+			//		The object on which to process the magnifying action.
+			if(!o.shape || !(o.type in this.overOutEvents) ||
+				!("cx" in o) || !("cy" in o)){ return; }
+
+			var runName = o.run.name, index = o.index, vector = [], anim, init, scale;
+
+			if(runName in this.anim){
+				anim = this.anim[runName][index];
+			}else{
+				this.anim[runName] = {};
+			}
+
+			if(anim){
+				anim.action.stop(true);
+			}else{
+				this.anim[runName][index] = anim = {};
+			}
+
+			if(o.type == "onmouseover"){
+				init  = m.identity;
+				scale = this.scale;
+			}else{
+				init  = m.scaleAt(this.scale, o.cx, o.cy);
+				scale = 1 / this.scale;
+			}
+
+			var kwArgs = {
+				shape:    o.shape,
+				duration: this.duration,
+				easing:   this.easing,
+				transform: [
+					{name: "scaleAt", start: [1, o.cx, o.cy], end: [scale, o.cx, o.cy]},
+					init
+				]
+			};
+			if(o.shape){
+				vector.push(gf.animateTransform(kwArgs));
+			}
+			if(o.oultine){
+				kwArgs.shape = o.outline;
+				vector.push(gf.animateTransform(kwArgs));
+			}
+			if(o.shadow){
+				kwArgs.shape = o.shadow;
+				vector.push(gf.animateTransform(kwArgs));
+			}
+
+			if(!vector.length){
+				delete this.anim[runName][index];
+				return;
+			}
+
+			anim.action = dojo.fx.combine(vector);
+			if(o.type == "onmouseout"){
+				dojo.connect(anim.action, "onEnd", this, function(){
+					if(this.anim[runName]){
+						delete this.anim[runName][index];
+					}
+				});
+			}
+			anim.action.play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.lang.functional.scan"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.lang.functional.scan"] = true;
+dojo.provide("dojox.lang.functional.scan");
+
+
+
+// This module adds high-level functions and related constructs:
+//	- "scan" family of functions
+
+// Notes:
+//	- missing high-level functions are provided with the compatible API: 
+//		scanl, scanl1, scanr, scanr1
+
+// Defined methods:
+//	- take any valid lambda argument as the functional argument
+//	- operate on dense arrays
+//	- take a string as the array argument
+//	- take an iterator objects as the array argument (only scanl, and scanl1)
+
+(function(){
+	var d = dojo, df = dojox.lang.functional, empty = {};
+
+	d.mixin(df, {
+		// classic reduce-class functions
+		scanl: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from left 
+			//	to right using a seed value as a starting point; returns an array
+			//	of values produced by foldl() at that point.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var t, n, i;
+			if(d.isArray(a)){
+				// array
+				t = new Array((n = a.length) + 1);
+				t[0] = z;
+				for(i = 0; i < n; z = f.call(o, z, a[i], i, a), t[++i] = z);
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				t = [z];
+				for(i = 0; a.hasNext(); t.push(z = f.call(o, z, a.next(), i++, a)));
+			}else{
+				// object/dictionary
+				t = [z];
+				for(i in a){
+					if(!(i in empty)){
+						t.push(z = f.call(o, z, a[i], i, a));
+					}
+				}
+			}
+			return t;	// Array
+		},
+		scanl1: function(/*Array|String|Object*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from left 
+			//	to right; returns an array of values produced by foldl1() at that 
+			//	point.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var t, n, z, first = true;
+			if(d.isArray(a)){
+				// array
+				t = new Array(n = a.length);
+				t[0] = z = a[0];
+				for(var i = 1; i < n; t[i] = z = f.call(o, z, a[i], i, a), ++i);
+			}else if(typeof a.hasNext == "function" && typeof a.next == "function"){
+				// iterator
+				if(a.hasNext()){
+					t = [z = a.next()];
+					for(var i = 1; a.hasNext(); t.push(z = f.call(o, z, a.next(), i++, a)));
+				}
+			}else{
+				// object/dictionary
+				for(var i in a){
+					if(!(i in empty)){
+						if(first){
+							t = [z = a[i]];
+							first = false;
+						}else{
+							t.push(z = f.call(o, z, a[i], i, a));
+						}
+					}
+				}
+			}
+			return t;	// Array
+		},
+		scanr: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object*/ z, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from right
+			//	to left using a seed value as a starting point; returns an array
+			//	of values produced by foldr() at that point.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var n = a.length, t = new Array(n + 1), i = n;
+			t[n] = z;
+			for(; i > 0; --i, z = f.call(o, z, a[i], i, a), t[i] = z);
+			return t;	// Array
+		},
+		scanr1: function(/*Array|String*/ a, /*Function|String|Array*/ f, /*Object?*/ o){
+			// summary: repeatedly applies a binary function to an array from right
+			//	to left; returns an array of values produced by foldr1() at that 
+			//	point.
+			if(typeof a == "string"){ a = a.split(""); }
+			o = o || d.global; f = df.lambda(f);
+			var n = a.length, t = new Array(n), z = a[n - 1], i = n - 1;
+			t[i] = z;
+			for(; i > 0; --i, z = f.call(o, z, a[i], i, a), t[i] = z);
+			return t;	// Array
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.MoveSlice"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.MoveSlice"] = true;
+dojo.provide("dojox.charting.action2d.MoveSlice");
+
+
+
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.action2d.__MoveSliceCtorArgs", dojox.charting.action2d.__BaseCtorArgs, {
+	//	summary:
+	//		Additional arguments for highlighting actions.
+
+	//	scale: Number?
+	//		The amount to scale the pie slice.  Default is 1.05.
+	scale: 1.05,
+
+	//	shift: Number?
+	//		The amount in pixels to shift the pie slice.  Default is 7.
+	shift: 7
+});
+=====*/
+(function(){
+	var DEFAULT_SCALE = 1.05,
+		DEFAULT_SHIFT = 7,	// px
+		m = dojox.gfx.matrix,
+		gf = dojox.gfx.fx,
+		df = dojox.lang.functional;
+
+	dojo.declare("dojox.charting.action2d.MoveSlice", dojox.charting.action2d.Base, {
+		//	summary:
+		//		Create an action for a pie chart that moves and scales a pie slice.
+
+		// the data description block for the widget parser
+		defaultParams: {
+			duration: 400,	// duration of the action in ms
+			easing:   dojo.fx.easing.backOut,	// easing for the action
+			scale:    DEFAULT_SCALE,	// scale of magnification
+			shift:    DEFAULT_SHIFT		// shift of the slice
+		},
+		optionalParams: {},	// no optional parameters
+
+		constructor: function(chart, plot, kwArgs){
+			//	summary:
+			//		Create the slice moving action and connect it to the plot.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this action belongs to.
+			//	plot: String?
+			//		The plot this action is attached to.  If not passed, "default" is assumed.
+			//	kwArgs: dojox.charting.action2d.__MoveSliceCtorArgs?
+			//		Optional keyword arguments object for setting parameters.
+			if(!kwArgs){ kwArgs = {}; }
+			this.scale = typeof kwArgs.scale == "number" ? kwArgs.scale : DEFAULT_SCALE;
+			this.shift = typeof kwArgs.shift == "number" ? kwArgs.shift : DEFAULT_SHIFT;
+
+			this.connect();
+		},
+
+		process: function(o){
+			//	summary:
+			//		Process the action on the given object.
+			//	o: dojox.gfx.Shape
+			//		The object on which to process the slice moving action.
+			if(!o.shape || o.element != "slice" || !(o.type in this.overOutEvents)){ return; }
+
+			if(!this.angles){
+				// calculate the running total of slice angles
+				var startAngle = m._degToRad(o.plot.opt.startAngle);
+				if(typeof o.run.data[0] == "number"){
+					this.angles = df.map(df.scanl(o.run.data, "+", startAngle),
+						"* 2 * Math.PI / this", df.foldl(o.run.data, "+", 0));
+				}else{
+					this.angles = df.map(df.scanl(o.run.data, "a + b.y", startAngle),
+						"* 2 * Math.PI / this", df.foldl(o.run.data, "a + b.y", 0));
+				}
+			}
+
+			var index = o.index, anim, startScale, endScale, startOffset, endOffset,
+				angle = (this.angles[index] + this.angles[index + 1]) / 2,
+				rotateTo0  = m.rotateAt(-angle, o.cx, o.cy),
+				rotateBack = m.rotateAt( angle, o.cx, o.cy);
+
+			anim = this.anim[index];
+
+			if(anim){
+				anim.action.stop(true);
+			}else{
+				this.anim[index] = anim = {};
+			}
+
+			if(o.type == "onmouseover"){
+				startOffset = 0;
+				endOffset   = this.shift;
+				startScale  = 1;
+				endScale    = this.scale;
+			}else{
+				startOffset = this.shift;
+				endOffset   = 0;
+				startScale  = this.scale;
+				endScale    = 1;
+			}
+
+			anim.action = dojox.gfx.fx.animateTransform({
+				shape:    o.shape,
+				duration: this.duration,
+				easing:   this.easing,
+				transform: [
+					rotateBack,
+					{name: "translate", start: [startOffset, 0], end: [endOffset, 0]},
+					{name: "scaleAt",   start: [startScale, o.cx, o.cy],  end: [endScale, o.cx, o.cy]},
+					rotateTo0
+				]
+			});
+
+			if(o.type == "onmouseout"){
+				dojo.connect(anim.action, "onEnd", this, function(){
+					delete this.anim[index];
+				});
+			}
+			anim.action.play();
+		},
+
+		reset: function(){
+			delete this.angles;
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Shake"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Shake"] = true;
+dojo.provide("dojox.charting.action2d.Shake");
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.action2d.__ShakeCtorArgs", dojox.charting.action2d.__BaseCtorArgs, {
+	//	summary:
+	//		Additional arguments for highlighting actions.
+
+	//	shift: Number?
+	//		The amount in pixels to shift the pie slice.  Default is 3.
+	shift: 3
+});
+=====*/
+(function(){
+	var DEFAULT_SHIFT = 3,
+		m = dojox.gfx.matrix,
+		gf = dojox.gfx.fx;
+
+	dojo.declare("dojox.charting.action2d.Shake", dojox.charting.action2d.Base, {
+		//	summary:
+		//		Create a shaking action for use on an element in a chart.
+
+		// the data description block for the widget parser
+		defaultParams: {
+			duration: 400,	// duration of the action in ms
+			easing:   dojo.fx.easing.backOut,	// easing for the action
+			shiftX:   DEFAULT_SHIFT,	// shift of the element along the X axis
+			shiftY:   DEFAULT_SHIFT		// shift of the element along the Y axis
+		},
+		optionalParams: {},	// no optional parameters
+
+		constructor: function(chart, plot, kwArgs){
+			//	summary:
+			//		Create the shaking action and connect it to the plot.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this action belongs to.
+			//	plot: String?
+			//		The plot this action is attached to.  If not passed, "default" is assumed.
+			//	kwArgs: dojox.charting.action2d.__ShakeCtorArgs?
+			//		Optional keyword arguments object for setting parameters.
+			if(!kwArgs){ kwArgs = {}; }
+			this.shiftX = typeof kwArgs.shiftX == "number" ? kwArgs.shiftX : DEFAULT_SHIFT;
+			this.shiftY = typeof kwArgs.shiftY == "number" ? kwArgs.shiftY : DEFAULT_SHIFT;
+
+			this.connect();
+		},
+
+		process: function(o){
+			//	summary:
+			//		Process the action on the given object.
+			//	o: dojox.gfx.Shape
+			//		The object on which to process the slice moving action.
+			if(!o.shape || !(o.type in this.overOutEvents)){ return; }
+
+			var runName = o.run.name, index = o.index, vector = [], anim,
+				shiftX = o.type == "onmouseover" ? this.shiftX : -this.shiftX,
+				shiftY = o.type == "onmouseover" ? this.shiftY : -this.shiftY;
+
+			if(runName in this.anim){
+				anim = this.anim[runName][index];
+			}else{
+				this.anim[runName] = {};
+			}
+
+			if(anim){
+				anim.action.stop(true);
+			}else{
+				this.anim[runName][index] = anim = {};
+			}
+
+			var kwArgs = {
+				shape:     o.shape,
+				duration:  this.duration,
+				easing:    this.easing,
+				transform: [
+					{name: "translate", start: [this.shiftX, this.shiftY], end: [0, 0]},
+					m.identity
+				]
+			};
+			if(o.shape){
+				vector.push(gf.animateTransform(kwArgs));
+			}
+			if(o.oultine){
+				kwArgs.shape = o.outline;
+				vector.push(gf.animateTransform(kwArgs));
+			}
+			if(o.shadow){
+				kwArgs.shape = o.shadow;
+				vector.push(gf.animateTransform(kwArgs));
+			}
+
+			if(!vector.length){
+				delete this.anim[runName][index];
+				return;
+			}
+
+			anim.action = dojo.fx.combine(vector);
+			if(o.type == "onmouseout"){
+				dojo.connect(anim.action, "onEnd", this, function(){
+					if(this.anim[runName]){
+						delete this.anim[runName][index];
+					}
+				});
+			}
+			anim.action.play();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date.stamp"] = true;
+dojo.provide("dojo.date.stamp");
+
+// Methods to convert dates to or from a wire (string) format using well-known conventions
+
+dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
+	//	summary:
+	//		Returns a Date object given a string formatted according to a subset of the ISO-8601 standard.
+	//
+	//	description:
+	//		Accepts a string formatted according to a profile of ISO8601 as defined by
+	//		[RFC3339](http://www.ietf.org/rfc/rfc3339.txt), except that partial input is allowed.
+	//		Can also process dates as specified [by the W3C](http://www.w3.org/TR/NOTE-datetime)
+	//		The following combinations are valid:
+	//
+	//			* dates only
+	//			|	* yyyy
+	//			|	* yyyy-MM
+	//			|	* yyyy-MM-dd
+	// 			* times only, with an optional time zone appended
+	//			|	* THH:mm
+	//			|	* THH:mm:ss
+	//			|	* THH:mm:ss.SSS
+	// 			* and "datetimes" which could be any combination of the above
+	//
+	//		timezones may be specified as Z (for UTC) or +/- followed by a time expression HH:mm
+	//		Assumes the local time zone if not specified.  Does not validate.  Improperly formatted
+	//		input may return null.  Arguments which are out of bounds will be handled
+	// 		by the Date constructor (e.g. January 32nd typically gets resolved to February 1st)
+	//		Only years between 100 and 9999 are supported.
+	//
+  	//	formattedString:
+	//		A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00
+	//
+	//	defaultTime:
+	//		Used for defaults for fields omitted in the formattedString.
+	//		Uses 1970-01-01T00:00:00.0Z by default.
+
+	if(!dojo.date.stamp._isoRegExp){
+		dojo.date.stamp._isoRegExp =
+//TODO: could be more restrictive and check for 00-59, etc.
+			/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
+	}
+
+	var match = dojo.date.stamp._isoRegExp.exec(formattedString),
+		result = null;
+
+	if(match){
+		match.shift();
+		if(match[1]){match[1]--;} // Javascript Date months are 0-based
+		if(match[6]){match[6] *= 1000;} // Javascript Date expects fractional seconds as milliseconds
+
+		if(defaultTime){
+			// mix in defaultTime.  Relatively expensive, so use || operators for the fast path of defaultTime === 0
+			defaultTime = new Date(defaultTime);
+			dojo.forEach(dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){
+				return defaultTime["get" + prop]();
+			}), function(value, index){
+				match[index] = match[index] || value;
+			});
+		}
+		result = new Date(match[0]||1970, match[1]||0, match[2]||1, match[3]||0, match[4]||0, match[5]||0, match[6]||0); //TODO: UTC defaults
+		if(match[0] < 100){
+			result.setFullYear(match[0] || 1970);
+		}
+
+		var offset = 0,
+			zoneSign = match[7] && match[7].charAt(0);
+		if(zoneSign != 'Z'){
+			offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
+			if(zoneSign != '-'){ offset *= -1; }
+		}
+		if(zoneSign){
+			offset -= result.getTimezoneOffset();
+		}
+		if(offset){
+			result.setTime(result.getTime() + offset * 60000);
+		}
+	}
+
+	return result; // Date or null
+}
+
+/*=====
+	dojo.date.stamp.__Options = function(){
+		//	selector: String
+		//		"date" or "time" for partial formatting of the Date object.
+		//		Both date and time will be formatted by default.
+		//	zulu: Boolean
+		//		if true, UTC/GMT is used for a timezone
+		//	milliseconds: Boolean
+		//		if true, output milliseconds
+		this.selector = selector;
+		this.zulu = zulu;
+		this.milliseconds = milliseconds;
+	}
+=====*/
+
+dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){
+	//	summary:
+	//		Format a Date object as a string according a subset of the ISO-8601 standard
+	//
+	//	description:
+	//		When options.selector is omitted, output follows [RFC3339](http://www.ietf.org/rfc/rfc3339.txt)
+	//		The local time zone is included as an offset from GMT, except when selector=='time' (time without a date)
+	//		Does not check bounds.  Only years between 100 and 9999 are supported.
+	//
+	//	dateObject:
+	//		A Date object
+
+	var _ = function(n){ return (n < 10) ? "0" + n : n; };
+	options = options || {};
+	var formattedDate = [],
+		getter = options.zulu ? "getUTC" : "get",
+		date = "";
+	if(options.selector != "time"){
+		var year = dateObject[getter+"FullYear"]();
+		date = ["0000".substr((year+"").length)+year, _(dateObject[getter+"Month"]()+1), _(dateObject[getter+"Date"]())].join('-');
+	}
+	formattedDate.push(date);
+	if(options.selector != "date"){
+		var time = [_(dateObject[getter+"Hours"]()), _(dateObject[getter+"Minutes"]()), _(dateObject[getter+"Seconds"]())].join(':');
+		var millis = dateObject[getter+"Milliseconds"]();
+		if(options.milliseconds){
+			time += "."+ (millis < 100 ? "0" : "") + _(millis);
+		}
+		if(options.zulu){
+			time += "Z";
+		}else if(options.selector != "time"){
+			var timezoneOffset = dateObject.getTimezoneOffset();
+			var absOffset = Math.abs(timezoneOffset);
+			time += (timezoneOffset > 0 ? "-" : "+") + 
+				_(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
+		}
+		formattedDate.push(time);
+	}
+	return formattedDate.join('T'); // String
+}
+
+}
+
+if(!dojo._hasResource["dojo.parser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.parser"] = true;
+dojo.provide("dojo.parser");
+
+
+new Date("X"); // workaround for #11279, new Date("") == NaN
+
+dojo.parser = new function(){
+	// summary: The Dom/Widget parsing package
+
+	var d = dojo;
+	this._attrName = d._scopeName + "Type";
+	this._query = "[" + this._attrName + "]";
+
+	function val2type(/*Object*/ value){
+		// summary:
+		//		Returns name of type of given value.
+
+		if(d.isString(value)){ return "string"; }
+		if(typeof value == "number"){ return "number"; }
+		if(typeof value == "boolean"){ return "boolean"; }
+		if(d.isFunction(value)){ return "function"; }
+		if(d.isArray(value)){ return "array"; } // typeof [] == "object"
+		if(value instanceof Date) { return "date"; } // assume timestamp
+		if(value instanceof d._Url){ return "url"; }
+		return "object";
+	}
+
+	function str2obj(/*String*/ value, /*String*/ type){
+		// summary:
+		//		Convert given string value to given type
+		switch(type){
+			case "string":
+				return value;
+			case "number":
+				return value.length ? Number(value) : NaN;
+			case "boolean":
+				// for checked/disabled value might be "" or "checked".  interpret as true.
+				return typeof value == "boolean" ? value : !(value.toLowerCase()=="false");
+			case "function":
+				if(d.isFunction(value)){
+					// IE gives us a function, even when we say something like onClick="foo"
+					// (in which case it gives us an invalid function "function(){ foo }"). 
+					//  Therefore, convert to string
+					value=value.toString();
+					value=d.trim(value.substring(value.indexOf('{')+1, value.length-1));
+				}
+				try{
+					if(value === "" || value.search(/[^\w\.]+/i) != -1){
+						// The user has specified some text for a function like "return x+5"
+						return new Function(value);
+					}else{
+						// The user has specified the name of a function like "myOnClick"
+						// or a single word function "return"
+						return d.getObject(value, false) || new Function(value);
+					}
+				}catch(e){ return new Function(); }
+			case "array":
+				return value ? value.split(/\s*,\s*/) : [];
+			case "date":
+				switch(value){
+					case "": return new Date("");	// the NaN of dates
+					case "now": return new Date();	// current date
+					default: return d.date.stamp.fromISOString(value);
+				}
+			case "url":
+				return d.baseUrl + value;
+			default:
+				return d.fromJson(value);
+		}
+	}
+
+	var instanceClasses = {
+		// map from fully qualified name (like "dijit.Button") to structure like
+		// { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
+	};
+
+	// Widgets like BorderContainer add properties to _Widget via dojo.extend().
+	// If BorderContainer is loaded after _Widget's parameter list has been cached,
+	// we need to refresh that parameter list (for _Widget and all widgets that extend _Widget).
+	dojo.connect(dojo, "extend", function(){
+		instanceClasses = {};
+	});
+
+	function getClassInfo(/*String*/ className){
+		// className:
+		//		fully qualified name (like "dijit.form.Button")
+		// returns:
+		//		structure like
+		//			{ 
+		//				cls: dijit.Button, 
+		//				params: { label: "string", disabled: "boolean"}
+		//			}
+
+		if(!instanceClasses[className]){
+			// get pointer to widget class
+			var cls = d.getObject(className);
+			if(!cls){ return null; }		// class not defined [yet]
+
+			var proto = cls.prototype;
+	
+			// get table of parameter names & types
+			var params = {}, dummyClass = {};
+			for(var name in proto){
+				if(name.charAt(0)=="_"){ continue; } 	// skip internal properties
+				if(name in dummyClass){ continue; }		// skip "constructor" and "toString"
+				var defVal = proto[name];
+				params[name]=val2type(defVal);
+			}
+
+			instanceClasses[className] = { cls: cls, params: params };
+		}
+		return instanceClasses[className];
+	}
+
+	this._functionFromScript = function(script){
+		var preamble = "";
+		var suffix = "";
+		var argsStr = script.getAttribute("args");
+		if(argsStr){
+			d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
+				preamble += "var "+part+" = arguments["+idx+"]; ";
+			});
+		}
+		var withStr = script.getAttribute("with");
+		if(withStr && withStr.length){
+			d.forEach(withStr.split(/\s*,\s*/), function(part){
+				preamble += "with("+part+"){";
+				suffix += "}";
+			});
+		}
+		return new Function(preamble+script.innerHTML+suffix);
+	}
+
+	this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){
+		// summary:
+		//		Takes array of nodes, and turns them into class instances and
+		//		potentially calls a startup method to allow them to connect with
+		//		any children.
+		// nodes: Array
+		//		Array of nodes or objects like
+		//	|		{
+		//	|			type: "dijit.form.Button",
+		//	|			node: DOMNode,
+		//	|			scripts: [ ... ],	// array of <script type="dojo/..."> children of node
+		//	|			inherited: { ... }	// settings inherited from ancestors like dir, theme, etc.
+		//	|		}
+		// mixin: Object?
+		//		An object that will be mixed in with each node in the array.
+		//		Values in the mixin will override values in the node, if they
+		//		exist.
+		// args: Object?
+		//		An object used to hold kwArgs for instantiation.
+		//		Supports 'noStart' and inherited.
+		var thelist = [], dp = dojo.parser;
+		mixin = mixin||{};
+		args = args||{};
+		
+		d.forEach(nodes, function(obj){
+			if(!obj){ return; }
+
+			// Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s
+			var node, type, clsInfo, clazz, scripts;
+			if(obj.node){
+				// new format of nodes[] array, object w/lots of properties pre-computed for me
+				node = obj.node;
+				type = obj.type;
+				clsInfo = obj.clsInfo || (type && getClassInfo(type));
+				clazz = clsInfo && clsInfo.cls;
+				scripts = obj.scripts;
+			}else{
+				// old (backwards compatible) format of nodes[] array, simple array of DOMNodes
+				node = obj;
+				type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName);
+				clsInfo = type && getClassInfo(type);
+				clazz = clsInfo && clsInfo.cls;
+				scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : 
+							d.query("> script[type^='dojo/']", node));
+			}
+			if(!clsInfo){
+				throw new Error("Could not load class '" + type);
+			}
+
+			// Setup hash to hold parameter settings for this widget.   Start with the parameter
+			// settings inherited from ancestors ("dir" and "lang").
+			// Inherited setting may later be overridden by explicit settings on node itself.
+			var params = {},
+				attributes = node.attributes;
+			if(args.defaults){
+				// settings for the document itself (or whatever subtree is being parsed)
+				dojo.mixin(params, args.defaults);
+			}
+			if(obj.inherited){
+				// settings from dir=rtl or lang=... on a node above this node
+				dojo.mixin(params, obj.inherited);
+			}
+
+			// read parameters (ie, attributes) specified on DOMNode
+			// clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
+			for(var name in clsInfo.params){
+				var item = name in mixin?{value:mixin[name],specified:true}:attributes.getNamedItem(name);
+				if(!item || (!item.specified && (!dojo.isIE || name.toLowerCase()!="value"))){ continue; }
+				var value = item.value;
+				// Deal with IE quirks for 'class' and 'style'
+				switch(name){
+				case "class":
+					value = "className" in mixin?mixin.className:node.className;
+					break;
+				case "style":
+					value = "style" in mixin?mixin.style:(node.style && node.style.cssText); // FIXME: Opera?
+				}
+				var _type = clsInfo.params[name];
+				if(typeof value == "string"){
+					params[name] = str2obj(value, _type);
+				}else{
+					params[name] = value;
+				}
+			}
+
+			// Process <script type="dojo/*"> script tags
+			// <script type="dojo/method" event="foo"> tags are added to params, and passed to
+			// the widget on instantiation.
+			// <script type="dojo/method"> tags (with no event) are executed after instantiation
+			// <script type="dojo/connect" event="foo"> tags are dojo.connected after instantiation
+			// note: dojo/* script tags cannot exist in self closing widgets, like <input />
+			var connects = [],	// functions to connect after instantiation
+				calls = [];		// functions to call after instantiation
+
+			d.forEach(scripts, function(script){
+				node.removeChild(script);
+				var event = script.getAttribute("event"),
+					type = script.getAttribute("type"),
+					nf = d.parser._functionFromScript(script);
+				if(event){
+					if(type == "dojo/connect"){
+						connects.push({event: event, func: nf});
+					}else{
+						params[event] = nf;
+					}
+				}else{
+					calls.push(nf);
+				}
+			});
+
+			var markupFactory = clazz.markupFactory || clazz.prototype && clazz.prototype.markupFactory;
+			// create the instance
+			var instance = markupFactory ? markupFactory(params, node, clazz) : new clazz(params, node);
+			thelist.push(instance);
+
+			// map it to the JS namespace if that makes sense
+			var jsname = node.getAttribute("jsId");
+			if(jsname){
+				d.setObject(jsname, instance);
+			}
+
+			// process connections and startup functions
+			d.forEach(connects, function(connect){
+				d.connect(instance, connect.event, null, connect.func);
+			});
+			d.forEach(calls, function(func){
+				func.call(instance);
+			});
+		});
+
+		// Call startup on each top level instance if it makes sense (as for
+		// widgets).  Parent widgets will recursively call startup on their
+		// (non-top level) children
+		if(!mixin._started){
+			// TODO: for 2.0, when old instantiate() API is desupported, store parent-child
+			// relationships in the nodes[] array so that no getParent() call is needed.
+			// Note that will  require a parse() call from ContentPane setting a param that the
+			// ContentPane is the parent widget (so that the parse doesn't call startup() on the
+			// ContentPane's children)
+			d.forEach(thelist, function(instance){
+				if(	!args.noStart && instance  && 
+					instance.startup &&
+					!instance._started && 
+					(!instance.getParent || !instance.getParent())
+				){
+					instance.startup();
+				}
+			});
+		}
+		return thelist;
+	};
+
+	this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){
+		// summary:
+		//		Scan the DOM for class instances, and instantiate them.
+		//
+		// description:
+		//		Search specified node (or root node) recursively for class instances,
+		//		and instantiate them Searches for
+		//		dojoType="qualified.class.name"
+		//
+		// rootNode: DomNode?
+		//		A default starting root node from which to start the parsing. Can be
+		//		omitted, defaulting to the entire document. If omitted, the `args`
+		//		object can be passed in this place. If the `args` object has a 
+		//		`rootNode` member, that is used.
+		//
+		// args:
+		//		a kwArgs object passed along to instantiate()
+		//		
+		//			* noStart: Boolean?
+		//				when set will prevent the parser from calling .startup()
+		//				when locating the nodes. 
+		//			* rootNode: DomNode?
+		//				identical to the function's `rootNode` argument, though
+		//				allowed to be passed in via this `args object. 
+		//			* inherited: Object
+		//				Hash possibly containing dir and lang settings to be applied to
+		//				parsed widgets, unless there's another setting on a sub-node that overrides
+		//
+		//
+		// example:
+		//		Parse all widgets on a page:
+		//	|		dojo.parser.parse();
+		//
+		// example:
+		//		Parse all classes within the node with id="foo"
+		//	|		dojo.parser.parse(dojo.byId(foo));
+		//
+		// example:
+		//		Parse all classes in a page, but do not call .startup() on any 
+		//		child
+		//	|		dojo.parser.parse({ noStart: true })
+		//
+		// example:
+		//		Parse all classes in a node, but do not call .startup()
+		//	|		dojo.parser.parse(someNode, { noStart:true });
+		//	|		// or
+		// 	|		dojo.parser.parse({ noStart:true, rootNode: someNode });
+
+		// determine the root node based on the passed arguments.
+		var root;
+		if(!args && rootNode && rootNode.rootNode){
+			args = rootNode;
+			root = args.rootNode;
+		}else{
+			root = rootNode;
+		}
+
+		var attrName = this._attrName;
+		function scan(parent, list){
+			// summary:
+			//		Parent is an Object representing a DOMNode, with or without a dojoType specified.
+			//		Scan parent's children looking for nodes with dojoType specified, storing in list[].
+			//		If parent has a dojoType, also collects <script type=dojo/*> children and stores in parent.scripts[].
+			// parent: Object
+			//		Object representing the parent node, like
+			//	|	{
+			//	|		node: DomNode, 			// scan children of this node
+			//	|		inherited: {dir: "rtl"},	// dir/lang setting inherited from above node
+			//	|
+			//	|		// attributes only set if node has dojoType specified
+			//	|		scripts: [],			// empty array, put <script type=dojo/*> in here
+			//	|		clsInfo: { cls: dijit.form.Button, ...}
+			//	|	}
+			// list: DomNode[]
+			//		Output array of objects (same format as parent) representing nodes to be turned into widgets
+
+			// Effective dir and lang settings on parent node, either set directly or inherited from grandparent
+			var inherited = dojo.clone(parent.inherited);
+			dojo.forEach(["dir", "lang"], function(name){
+				var val = parent.node.getAttribute(name);
+				if(val){
+					inherited[name] = val;
+				}
+			});
+
+			// if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[].
+			var scripts = parent.scripts;
+
+			// unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively
+			var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser;
+
+			// scan parent's children looking for dojoType and <script type=dojo/*>
+			for(var child = parent.node.firstChild; child; child = child.nextSibling){
+				if(child.nodeType == 1){
+					var type = recurse && child.getAttribute(attrName);
+					if(type){
+						// if dojoType specified, add to output array of nodes to instantiate
+						var params = {
+							"type": type,
+							clsInfo: getClassInfo(type),	// note: won't find classes declared via dojo.Declaration
+							node: child,
+							scripts: [], // <script> nodes that are parent's children
+							inherited: inherited // dir & lang attributes inherited from parent
+						};
+						list.push(params);
+
+						// Recurse, collecting <script type="dojo/..."> children, and also looking for
+						// descendant nodes with dojoType specified (unless the widget has the stopParser flag),
+						scan(params, list);
+					}else if(scripts && child.nodeName.toLowerCase() == "script"){
+						// if <script type="dojo/...">, save in scripts[]
+						type = child.getAttribute("type");
+						if (type && /^dojo\//i.test(type)) {
+							scripts.push(child);
+						}
+					}else if(recurse){
+						// Recurse, looking for grandchild nodes with dojoType specified
+						scan({
+							node: child,
+							inherited: inherited
+						}, list);
+					}
+				}
+			}
+		}
+
+		// Make list of all nodes on page w/dojoType specified
+		var list = [];
+		scan({
+			node: root ? dojo.byId(root) : dojo.body(),
+			inherited: (args && args.inherited) || {
+				dir: dojo._isBodyLtr() ? "ltr" : "rtl"
+			}
+		}, list);
+
+		// go build the object instances
+		return this.instantiate(list, null, args); // Array
+	};
+}();
+
+//Register the parser callback. It should be the first callback
+//after the a11y test.
+
+(function(){
+	var parseRunner = function(){ 
+		if(dojo.config.parseOnLoad){
+			dojo.parser.parse(); 
+		}
+	};
+
+	// FIXME: need to clobber cross-dependency!!
+	if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
+		dojo._loaders.splice(1, 0, parseRunner);
+	}else{
+		dojo._loaders.unshift(parseRunner);
+	}
+})();
+
+}
+
+if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cache"] = true;
+dojo.provide("dojo.cache");
+
+/*=====
+dojo.cache = { 
+	// summary:
+	// 		A way to cache string content that is fetchable via `dojo.moduleUrl`.
+};
+=====*/
+
+(function(){
+	var cache = {};
+	dojo.cache = function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){
+		// summary:
+		// 		A getter and setter for storing the string content associated with the
+		// 		module and url arguments.
+		// description:
+		// 		module and url are used to call `dojo.moduleUrl()` to generate a module URL.
+		// 		If value is specified, the cache value for the moduleUrl will be set to
+		// 		that value. Otherwise, dojo.cache will fetch the moduleUrl and store it
+		// 		in its internal cache and return that cached value for the URL. To clear
+		// 		a cache value pass null for value. Since XMLHttpRequest (XHR) is used to fetch the
+		// 		the URL contents, only modules on the same domain of the page can use this capability.
+		// 		The build system can inline the cache values though, to allow for xdomain hosting.
+		// module: String||Object
+		// 		If a String, the module name to use for the base part of the URL, similar to module argument
+		// 		to `dojo.moduleUrl`. If an Object, something that has a .toString() method that
+		// 		generates a valid path for the cache item. For example, a dojo._Url object.
+		// url: String
+		// 		The rest of the path to append to the path derived from the module argument. If
+		// 		module is an object, then this second argument should be the "value" argument instead.
+		// value: String||Object?
+		// 		If a String, the value to use in the cache for the module/url combination.
+		// 		If an Object, it can have two properties: value and sanitize. The value property
+		// 		should be the value to use in the cache, and sanitize can be set to true or false,
+		// 		to indicate if XML declarations should be removed from the value and if the HTML
+		// 		inside a body tag in the value should be extracted as the real value. The value argument
+		// 		or the value property on the value argument are usually only used by the build system
+		// 		as it inlines cache content.
+		//	example:
+		//		To ask dojo.cache to fetch content and store it in the cache (the dojo["cache"] style
+		// 		of call is used to avoid an issue with the build system erroneously trying to intern
+		// 		this example. To get the build system to intern your dojo.cache calls, use the
+		// 		"dojo.cache" style of call):
+		// 		|	//If template.html contains "<h1>Hello</h1>" that will be
+		// 		|	//the value for the text variable.
+		//		|	var text = dojo["cache"]("my.module", "template.html");
+		//	example:
+		//		To ask dojo.cache to fetch content and store it in the cache, and sanitize the input
+		// 		 (the dojo["cache"] style of call is used to avoid an issue with the build system 
+		// 		erroneously trying to intern this example. To get the build system to intern your
+		// 		dojo.cache calls, use the "dojo.cache" style of call):
+		// 		|	//If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+		// 		|	//text variable will contain just "<h1>Hello</h1>".
+		//		|	var text = dojo["cache"]("my.module", "template.html", {sanitize: true});
+		//	example:
+		//		Same example as previous, but demostrates how an object can be passed in as
+		//		the first argument, then the value argument can then be the second argument.
+		// 		|	//If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+		// 		|	//text variable will contain just "<h1>Hello</h1>".
+		//		|	var text = dojo["cache"](new dojo._Url("my/module/template.html"), {sanitize: true});
+
+		//Module could be a string, or an object that has a toString() method
+		//that will return a useful path. If it is an object, then the "url" argument
+		//will actually be the value argument.
+		if(typeof module == "string"){
+			var pathObj = dojo.moduleUrl(module, url);
+		}else{
+			pathObj = module;
+			value = url;
+		}
+		var key = pathObj.toString();
+
+		var val = value;
+		if(value != undefined && !dojo.isString(value)){
+			val = ("value" in value ? value.value : undefined);
+		}
+
+		var sanitize = value && value.sanitize ? true : false;
+
+		if(typeof val == "string"){
+			//We have a string, set cache value
+			val = cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+		}else if(val === null){
+			//Remove cached value
+			delete cache[key];
+		}else{
+			//Allow cache values to be empty strings. If key property does
+			//not exist, fetch it.
+			if(!(key in cache)){
+				val = dojo._getText(key);
+				cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+			}
+			val = cache[key];
+		}
+		return val; //String
+	};
+
+	dojo.cache._sanitize = function(/*String*/val){
+		// summary: 
+		//		Strips <?xml ...?> declarations so that external SVG and XML
+		// 		documents can be added to a document without worry. Also, if the string
+		//		is an HTML document, only the part inside the body tag is returned.
+		// description:
+		// 		Copied from dijit._Templated._sanitizeTemplateString.
+		if(val){
+			val = val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
+			var matches = val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+			if(matches){
+				val = matches[1];
+			}
+		}else{
+			val = "";
+		}
+		return val; //String
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Templated"] = true;
+dojo.provide("dijit._Templated");
+
+
+
+
+
+
+dojo.declare("dijit._Templated",
+	null,
+	{
+		// summary:
+		//		Mixin for widgets that are instantiated from a template
+
+		// templateString: [protected] String
+		//		A string that represents the widget template. Pre-empts the
+		//		templatePath. In builds that have their strings "interned", the
+		//		templatePath is converted to an inline templateString, thereby
+		//		preventing a synchronous network call.
+		//
+		//		Use in conjunction with dojo.cache() to load from a file.
+		templateString: null,
+
+		// templatePath: [protected deprecated] String
+		//		Path to template (HTML file) for this widget relative to dojo.baseUrl.
+		//		Deprecated: use templateString with dojo.cache() instead.
+		templatePath: null,
+
+		// widgetsInTemplate: [protected] Boolean
+		//		Should we parse the template to find widgets that might be
+		//		declared in markup inside it?  False by default.
+		widgetsInTemplate: false,
+
+		// skipNodeCache: [protected] Boolean
+		//		If using a cached widget template node poses issues for a
+		//		particular widget class, it can set this property to ensure
+		//		that its template is always re-built from a string
+		_skipNodeCache: false,
+
+		// _earlyTemplatedStartup: Boolean
+		//		A fallback to preserve the 1.0 - 1.3 behavior of children in
+		//		templates having their startup called before the parent widget
+		//		fires postCreate. Defaults to 'false', causing child widgets to
+		//		have their .startup() called immediately before a parent widget
+		//		.startup(), but always after the parent .postCreate(). Set to
+		//		'true' to re-enable to previous, arguably broken, behavior.
+		_earlyTemplatedStartup: false,
+
+		// _attachPoints: [private] String[]
+		//		List of widget attribute names associated with dojoAttachPoint=... in the
+		//		template, ex: ["containerNode", "labelNode"]
+/*=====
+ 		_attachPoints: [],
+ =====*/
+
+		constructor: function(){
+			this._attachPoints = [];
+		},
+
+		_stringRepl: function(tmpl){
+			// summary:
+			//		Does substitution of ${foo} type properties in template string
+			// tags:
+			//		private
+			var className = this.declaredClass, _this = this;
+			// Cache contains a string because we need to do property replacement
+			// do the property replacement
+			return dojo.string.substitute(tmpl, this, function(value, key){
+				if(key.charAt(0) == '!'){ value = dojo.getObject(key.substr(1), false, _this); }
+				if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
+				if(value == null){ return ""; }
+
+				// Substitution keys beginning with ! will skip the transform step,
+				// in case a user wishes to insert unescaped markup, e.g. ${!foo}
+				return key.charAt(0) == "!" ? value :
+					// Safer substitution, see heading "Attribute values" in
+					// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+					value.toString().replace(/"/g,"&quot;"); //TODO: add &amp? use encodeXML method?
+			}, this);
+		},
+
+		// method over-ride
+		buildRendering: function(){
+			// summary:
+			//		Construct the UI for this widget from a template, setting this.domNode.
+			// tags:
+			//		protected
+
+			// Lookup cached version of template, and download to cache if it
+			// isn't there already.  Returns either a DomNode or a string, depending on
+			// whether or not the template contains ${foo} replacement parameters.
+			var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
+
+			var node;
+			if(dojo.isString(cached)){
+				node = dojo._toDom(this._stringRepl(cached));
+				if(node.nodeType != 1){
+					// Flag common problems such as templates with multiple top level nodes (nodeType == 11)
+					throw new Error("Invalid template: " + cached);
+				}
+			}else{
+				// if it's a node, all we have to do is clone it
+				node = cached.cloneNode(true);
+			}
+
+			this.domNode = node;
+
+			// recurse through the node, looking for, and attaching to, our
+			// attachment points and events, which should be defined on the template node.
+			this._attachTemplateNodes(node);
+
+			if(this.widgetsInTemplate){
+				// Make sure dojoType is used for parsing widgets in template.
+				// The dojo.parser.query could be changed from multiversion support.
+				var parser = dojo.parser, qry, attr;
+				if(parser._query != "[dojoType]"){
+					qry = parser._query;
+					attr = parser._attrName;
+					parser._query = "[dojoType]";
+					parser._attrName = "dojoType";
+				}
+
+				// Store widgets that we need to start at a later point in time
+				var cw = (this._startupWidgets = dojo.parser.parse(node, {
+					noStart: !this._earlyTemplatedStartup,
+					inherited: {dir: this.dir, lang: this.lang}
+				}));
+
+				// Restore the query.
+				if(qry){
+					parser._query = qry;
+					parser._attrName = attr;
+				}
+
+				this._supportingWidgets = dijit.findWidgets(node);
+
+				this._attachTemplateNodes(cw, function(n,p){
+					return n[p];
+				});
+			}
+
+			this._fillContent(this.srcNodeRef);
+		},
+
+		_fillContent: function(/*DomNode*/ source){
+			// summary:
+			//		Relocate source contents to templated container node.
+			//		this.containerNode must be able to receive children, or exceptions will be thrown.
+			// tags:
+			//		protected
+			var dest = this.containerNode;
+			if(source && dest){
+				while(source.hasChildNodes()){
+					dest.appendChild(source.firstChild);
+				}
+			}
+		},
+
+		_attachTemplateNodes: function(rootNode, getAttrFunc){
+			// summary:
+			//		Iterate through the template and attach functions and nodes accordingly.
+			// description:
+			//		Map widget properties and functions to the handlers specified in
+			//		the dom node and it's descendants. This function iterates over all
+			//		nodes and looks for these properties:
+			//			* dojoAttachPoint
+			//			* dojoAttachEvent
+			//			* waiRole
+			//			* waiState
+			// rootNode: DomNode|Array[Widgets]
+			//		the node to search for properties. All children will be searched.
+			// getAttrFunc: Function?
+			//		a function which will be used to obtain property for a given
+			//		DomNode/Widget
+			// tags:
+			//		private
+
+			getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
+
+			var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
+			var x = dojo.isArray(rootNode) ? 0 : -1;
+			for(; x<nodes.length; x++){
+				var baseNode = (x == -1) ? rootNode : nodes[x];
+				if(this.widgetsInTemplate && getAttrFunc(baseNode, "dojoType")){
+					continue;
+				}
+				// Process dojoAttachPoint
+				var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
+				if(attachPoint){
+					var point, points = attachPoint.split(/\s*,\s*/);
+					while((point = points.shift())){
+						if(dojo.isArray(this[point])){
+							this[point].push(baseNode);
+						}else{
+							this[point]=baseNode;
+						}
+						this._attachPoints.push(point);
+					}
+				}
+
+				// Process dojoAttachEvent
+				var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
+				if(attachEvent){
+					// NOTE: we want to support attributes that have the form
+					// "domEvent: nativeEvent; ..."
+					var event, events = attachEvent.split(/\s*,\s*/);
+					var trim = dojo.trim;
+					while((event = events.shift())){
+						if(event){
+							var thisFunc = null;
+							if(event.indexOf(":") != -1){
+								// oh, if only JS had tuple assignment
+								var funcNameArr = event.split(":");
+								event = trim(funcNameArr[0]);
+								thisFunc = trim(funcNameArr[1]);
+							}else{
+								event = trim(event);
+							}
+							if(!thisFunc){
+								thisFunc = event;
+							}
+							this.connect(baseNode, event, thisFunc);
+						}
+					}
+				}
+
+				// waiRole, waiState
+				var role = getAttrFunc(baseNode, "waiRole");
+				if(role){
+					dijit.setWaiRole(baseNode, role);
+				}
+				var values = getAttrFunc(baseNode, "waiState");
+				if(values){
+					dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
+						if(stateValue.indexOf('-') != -1){
+							var pair = stateValue.split('-');
+							dijit.setWaiState(baseNode, pair[0], pair[1]);
+						}
+					});
+				}
+			}
+		},
+
+		startup: function(){
+			dojo.forEach(this._startupWidgets, function(w){
+				if(w && !w._started && w.startup){
+					w.startup();
+				}
+			});
+			this.inherited(arguments);
+		},
+
+		destroyRendering: function(){
+			// Delete all attach points to prevent IE6 memory leaks.
+			dojo.forEach(this._attachPoints, function(point){
+				delete this[point];
+			}, this);
+			this._attachPoints = [];
+
+			this.inherited(arguments);
+		}
+	}
+);
+
+// key is either templatePath or templateString; object is either string or DOM tree
+dijit._Templated._templateCache = {};
+
+dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
+	// summary:
+	//		Static method to get a template based on the templatePath or
+	//		templateString key
+	// templatePath: String||dojo.uri.Uri
+	//		The URL to get the template from.
+	// templateString: String?
+	//		a string to use in lieu of fetching the template from a URL. Takes precedence
+	//		over templatePath
+	// returns: Mixed
+	//		Either string (if there are ${} variables that need to be replaced) or just
+	//		a DOM tree (if the node can be cloned directly)
+
+	// is it already cached?
+	var tmplts = dijit._Templated._templateCache;
+	var key = templateString || templatePath;
+	var cached = tmplts[key];
+	if(cached){
+		try{
+			// if the cached value is an innerHTML string (no ownerDocument) or a DOM tree created within the current document, then use the current cached value
+			if(!cached.ownerDocument || cached.ownerDocument == dojo.doc){
+				// string or node of the same document
+				return cached;
+			}
+		}catch(e){ /* squelch */ } // IE can throw an exception if cached.ownerDocument was reloaded
+		dojo.destroy(cached);
+	}
+
+	// If necessary, load template string from template path
+	if(!templateString){
+		templateString = dojo.cache(templatePath, {sanitize: true});
+	}
+	templateString = dojo.string.trim(templateString);
+
+	if(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)){
+		// there are variables in the template so all we can do is cache the string
+		return (tmplts[key] = templateString); //String
+	}else{
+		// there are no variables in the template so we can cache the DOM tree
+		var node = dojo._toDom(templateString);
+		if(node.nodeType != 1){
+			throw new Error("Invalid template: " + templateString);
+		}
+		return (tmplts[key] = node); //Node
+	}
+};
+
+if(dojo.isIE){
+	dojo.addOnWindowUnload(function(){
+		var cache = dijit._Templated._templateCache;
+		for(var key in cache){
+			var value = cache[key];
+			if(typeof value == "object"){ // value is either a string or a DOM node template
+				dojo.destroy(value);
+			}
+			delete cache[key];
+		}
+	});
+}
+
+// These arguments can be specified for widgets which are used in templates.
+// Since any widget can be specified as sub widgets in template, mix it
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget,{
+	dojoAttachEvent: "",
+	dojoAttachPoint: "",
+	waiRole: "",
+	waiState:""
+});
+
+}
+
+if(!dojo._hasResource["dijit.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Tooltip"] = true;
+dojo.provide("dijit.Tooltip");
+
+
+
+
+dojo.declare(
+	"dijit._MasterTooltip",
+	[dijit._Widget, dijit._Templated],
+	{
+		// summary:
+		//		Internal widget that holds the actual tooltip markup,
+		//		which occurs once per page.
+		//		Called by Tooltip widgets which are just containers to hold
+		//		the markup
+		// tags:
+		//		protected
+
+		// duration: Integer
+		//		Milliseconds to fade in/fade out
+		duration: dijit.defaultDuration,
+
+		templateString: dojo.cache("dijit", "templates/Tooltip.html", "<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n"),
+
+		postCreate: function(){
+			dojo.body().appendChild(this.domNode);
+
+			this.bgIframe = new dijit.BackgroundIframe(this.domNode);
+
+			// Setup fade-in and fade-out functions.
+			this.fadeIn = dojo.fadeIn({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onShow") });
+			this.fadeOut = dojo.fadeOut({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onHide") });
+
+		},
+
+		show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position, /*Boolean*/ rtl){
+			// summary:
+			//		Display tooltip w/specified contents to right of specified node
+			//		(To left if there's no space on the right, or if rtl == true)
+
+			if(this.aroundNode && this.aroundNode === aroundNode){
+				return;
+			}
+
+			if(this.fadeOut.status() == "playing"){
+				// previous tooltip is being hidden; wait until the hide completes then show new one
+				this._onDeck=arguments;
+				return;
+			}
+			this.containerNode.innerHTML=innerHTML;
+
+			var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, dijit.getPopupAroundAlignment((position && position.length) ? position : dijit.Tooltip.defaultPosition, !rtl), dojo.hitch(this, "orient"));
+
+			// show it
+			dojo.style(this.domNode, "opacity", 0);
+			this.fadeIn.play();
+			this.isShowingNow = true;
+			this.aroundNode = aroundNode;
+		},
+
+		orient: function(/* DomNode */ node, /* String */ aroundCorner, /* String */ tooltipCorner){
+			// summary:
+			//		Private function to set CSS for tooltip node based on which position it's in.
+			//		This is called by the dijit popup code.
+			// tags:
+			//		protected
+
+			node.className = "dijitTooltip " +
+				{
+					"BL-TL": "dijitTooltipBelow dijitTooltipABLeft",
+					"TL-BL": "dijitTooltipAbove dijitTooltipABLeft",
+					"BR-TR": "dijitTooltipBelow dijitTooltipABRight",
+					"TR-BR": "dijitTooltipAbove dijitTooltipABRight",
+					"BR-BL": "dijitTooltipRight",
+					"BL-BR": "dijitTooltipLeft"
+				}[aroundCorner + "-" + tooltipCorner];
+		},
+
+		_onShow: function(){
+			// summary:
+			//		Called at end of fade-in operation
+			// tags:
+			//		protected
+			if(dojo.isIE){
+				// the arrow won't show up on a node w/an opacity filter
+				this.domNode.style.filter="";
+			}
+		},
+
+		hide: function(aroundNode){
+			// summary:
+			//		Hide the tooltip
+			if(this._onDeck && this._onDeck[1] == aroundNode){
+				// this hide request is for a show() that hasn't even started yet;
+				// just cancel the pending show()
+				this._onDeck=null;
+			}else if(this.aroundNode === aroundNode){
+				// this hide request is for the currently displayed tooltip
+				this.fadeIn.stop();
+				this.isShowingNow = false;
+				this.aroundNode = null;
+				this.fadeOut.play();
+			}else{
+				// just ignore the call, it's for a tooltip that has already been erased
+			}
+		},
+
+		_onHide: function(){
+			// summary:
+			//		Called at end of fade-out operation
+			// tags:
+			//		protected
+
+			this.domNode.style.cssText="";	// to position offscreen again
+			this.containerNode.innerHTML="";
+			if(this._onDeck){
+				// a show request has been queued up; do it now
+				this.show.apply(this, this._onDeck);
+				this._onDeck=null;
+			}
+		}
+
+	}
+);
+
+dijit.showTooltip = function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position, /*Boolean*/ rtl){
+	// summary:
+	//		Display tooltip w/specified contents in specified position.
+	//		See description of dijit.Tooltip.defaultPosition for details on position parameter.
+	//		If position is not specified then dijit.Tooltip.defaultPosition is used.
+	if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
+	return dijit._masterTT.show(innerHTML, aroundNode, position, rtl);
+};
+
+dijit.hideTooltip = function(aroundNode){
+	// summary:
+	//		Hide the tooltip
+	if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
+	return dijit._masterTT.hide(aroundNode);
+};
+
+dojo.declare(
+	"dijit.Tooltip",
+	dijit._Widget,
+	{
+		// summary:
+		//		Pops up a tooltip (a help message) when you hover over a node.
+
+		// label: String
+		//		Text to display in the tooltip.
+		//		Specified as innerHTML when creating the widget from markup.
+		label: "",
+
+		// showDelay: Integer
+		//		Number of milliseconds to wait after hovering over/focusing on the object, before
+		//		the tooltip is displayed.
+		showDelay: 400,
+
+		// connectId: [const] String[]
+		//		Id's of domNodes to attach the tooltip to.
+		//		When user hovers over any of the specified dom nodes, the tooltip will appear.
+		//
+		//		Note: Currently connectId can only be specified on initialization, it cannot
+		//		be changed via attr('connectId', ...)
+		//
+		//		Note: in 2.0 this will be renamed to connectIds for less confusion.
+		connectId: [],
+
+		// position: String[]
+		//		See description of `dijit.Tooltip.defaultPosition` for details on position parameter.
+		position: [],
+
+		constructor: function(){
+			// Map id's of nodes I'm connected to to a list of the this.connect() handles
+			this._nodeConnectionsById = {};
+		},
+
+		_setConnectIdAttr: function(newIds){
+			for(var oldId in this._nodeConnectionsById){
+				this.removeTarget(oldId);
+			}
+			dojo.forEach(dojo.isArrayLike(newIds) ? newIds : [newIds], this.addTarget, this);
+		},
+
+		_getConnectIdAttr: function(){
+			var ary = [];
+			for(var id in this._nodeConnectionsById){
+				ary.push(id);
+			}
+			return ary;
+		},
+
+		addTarget: function(/*DOMNODE || String*/ id){
+			// summary:
+			//		Attach tooltip to specified node, if it's not already connected
+			var node = dojo.byId(id);
+			if(!node){ return; }
+			if(node.id in this._nodeConnectionsById){ return; }//Already connected
+
+			this._nodeConnectionsById[node.id] = [
+				this.connect(node, "onmouseenter", "_onTargetMouseEnter"),
+				this.connect(node, "onmouseleave", "_onTargetMouseLeave"),
+				this.connect(node, "onfocus", "_onTargetFocus"),
+				this.connect(node, "onblur", "_onTargetBlur")
+			];
+		},
+
+		removeTarget: function(/*DOMNODE || String*/ node){
+			// summary:
+			//		Detach tooltip from specified node
+
+			// map from DOMNode back to plain id string
+			var id = node.id || node;
+
+			if(id in this._nodeConnectionsById){
+				dojo.forEach(this._nodeConnectionsById[id], this.disconnect, this);
+				delete this._nodeConnectionsById[id];
+			}
+		},
+
+		postCreate: function(){
+			dojo.addClass(this.domNode,"dijitTooltipData");
+		},
+
+		startup: function(){
+			this.inherited(arguments);
+
+			// If this tooltip was created in a template, or for some other reason the specified connectId[s]
+			// didn't exist during the widget's initialization, then connect now.
+			var ids = this.connectId;
+			dojo.forEach(dojo.isArrayLike(ids) ? ids : [ids], this.addTarget, this);
+		},
+
+		_onTargetMouseEnter: function(/*Event*/ e){
+			// summary:
+			//		Handler for mouseenter event on the target node
+			// tags:
+			//		private
+			this._onHover(e);
+		},
+
+		_onTargetMouseLeave: function(/*Event*/ e){
+			// summary:
+			//		Handler for mouseleave event on the target node
+			// tags:
+			//		private
+			this._onUnHover(e);
+		},
+
+		_onTargetFocus: function(/*Event*/ e){
+			// summary:
+			//		Handler for focus event on the target node
+			// tags:
+			//		private
+
+			this._focus = true;
+			this._onHover(e);
+		},
+
+		_onTargetBlur: function(/*Event*/ e){
+			// summary:
+			//		Handler for blur event on the target node
+			// tags:
+			//		private
+
+			this._focus = false;
+			this._onUnHover(e);
+		},
+
+		_onHover: function(/*Event*/ e){
+			// summary:
+			//		Despite the name of this method, it actually handles both hover and focus
+			//		events on the target node, setting a timer to show the tooltip.
+			// tags:
+			//		private
+			if(!this._showTimer){
+				var target = e.target;
+				this._showTimer = setTimeout(dojo.hitch(this, function(){this.open(target)}), this.showDelay);
+			}
+		},
+
+		_onUnHover: function(/*Event*/ e){
+			// summary:
+			//		Despite the name of this method, it actually handles both mouseleave and blur
+			//		events on the target node, hiding the tooltip.
+			// tags:
+			//		private
+
+			// keep a tooltip open if the associated element still has focus (even though the
+			// mouse moved away)
+			if(this._focus){ return; }
+
+			if(this._showTimer){
+				clearTimeout(this._showTimer);
+				delete this._showTimer;
+			}
+			this.close();
+		},
+
+		open: function(/*DomNode*/ target){
+ 			// summary:
+			//		Display the tooltip; usually not called directly.
+			// tags:
+			//		private
+
+			if(this._showTimer){
+				clearTimeout(this._showTimer);
+				delete this._showTimer;
+			}
+			dijit.showTooltip(this.label || this.domNode.innerHTML, target, this.position, !this.isLeftToRight());
+
+			this._connectNode = target;
+			this.onShow(target, this.position);
+		},
+
+		close: function(){
+			// summary:
+			//		Hide the tooltip or cancel timer for show of tooltip
+			// tags:
+			//		private
+
+			if(this._connectNode){
+				// if tooltip is currently shown
+				dijit.hideTooltip(this._connectNode);
+				delete this._connectNode;
+				this.onHide();
+			}
+			if(this._showTimer){
+				// if tooltip is scheduled to be shown (after a brief delay)
+				clearTimeout(this._showTimer);
+				delete this._showTimer;
+			}
+		},
+
+		onShow: function(target, position){
+			// summary:
+			//		Called when the tooltip is shown
+			// tags:
+			//		callback
+		},
+
+		onHide: function(){
+			// summary:
+			//		Called when the tooltip is hidden
+			// tags:
+			//		callback
+		},
+
+		uninitialize: function(){
+			this.close();
+			this.inherited(arguments);
+		}
+	}
+);
+
+// dijit.Tooltip.defaultPosition: String[]
+//		This variable controls the position of tooltips, if the position is not specified to
+//		the Tooltip widget or *TextBox widget itself.  It's an array of strings with the following values:
+//
+//			* before: places tooltip to the left of the target node/widget, or to the right in
+//			  the case of RTL scripts like Hebrew and Arabic
+//			* after: places tooltip to the right of the target node/widget, or to the left in
+//			  the case of RTL scripts like Hebrew and Arabic
+//			* above: tooltip goes above target node
+//			* below: tooltip goes below target node
+//
+//		The list is positions is tried, in order, until a position is found where the tooltip fits
+//		within the viewport.
+//
+//		Be careful setting this parameter.  A value of "above" may work fine until the user scrolls
+//		the screen so that there's no room above the target node.   Nodes with drop downs, like
+//		DropDownButton or FilteringSelect, are especially problematic, in that you need to be sure
+//		that the drop down and tooltip don't overlap, even when the viewport is scrolled so that there
+//		is only room below (or above) the target node, but not both.
+dijit.Tooltip.defaultPosition = ["after", "before"];
+
+}
+
+if(!dojo._hasResource["dojox.charting.action2d.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.action2d.Tooltip"] = true;
+dojo.provide("dojox.charting.action2d.Tooltip");
+
+
+
+
+
+
+
+
+
+/*=====
+dojo.declare("dojox.charting.action2d.__TooltipCtorArgs", dojox.charting.action2d.__BaseCtorArgs, {
+	//	summary:
+	//		Additional arguments for tooltip actions.
+
+	//	text: Function?
+	//		The function that produces the text to be shown within a tooltip.  By default this will be 
+	//		set by the plot in question, by returning the value of the element.
+	text: null
+});
+=====*/
+(function(){
+	var DEFAULT_TEXT = function(o){
+		var t = o.run && o.run.data && o.run.data[o.index];
+		if(t && typeof t != "number" && (t.tooltip || t.text)){
+			return t.tooltip || t.text;
+		}
+		if(o.element == "candlestick"){
+			return '<table cellpadding="1" cellspacing="0" border="0" style="font-size:0.9em;">'
+				+ '<tr><td>Open:</td><td align="right"><strong>' + o.data.open + '</strong></td></tr>'
+				+ '<tr><td>High:</td><td align="right"><strong>' + o.data.high + '</strong></td></tr>'
+				+ '<tr><td>Low:</td><td align="right"><strong>' + o.data.low + '</strong></td></tr>'
+				+ '<tr><td>Close:</td><td align="right"><strong>' + o.data.close + '</strong></td></tr>'
+				+ (o.data.mid !== undefined ? '<tr><td>Mid:</td><td align="right"><strong>' + o.data.mid + '</strong></td></tr>' : '')
+				+ '</table>';
+		}
+		return o.element == "bar" ? o.x : o.y;
+	};
+
+	var df = dojox.lang.functional, m = dojox.gfx.matrix, pi4 = Math.PI / 4, pi2 = Math.PI / 2;
+	
+	dojo.declare("dojox.charting.action2d.Tooltip", dojox.charting.action2d.Base, {
+		//	summary:
+		//		Create an action on a plot where a tooltip is shown when hovering over an element.
+
+		// the data description block for the widget parser
+		defaultParams: {
+			text: DEFAULT_TEXT	// the function to produce a tooltip from the object
+		},
+		optionalParams: {},	// no optional parameters
+
+		constructor: function(chart, plot, kwArgs){
+			//	summary:
+			//		Create the tooltip action and connect it to the plot.
+			//	chart: dojox.charting.Chart2D
+			//		The chart this action belongs to.
+			//	plot: String?
+			//		The plot this action is attached to.  If not passed, "default" is assumed.
+			//	kwArgs: dojox.charting.action2d.__TooltipCtorArgs?
+			//		Optional keyword arguments object for setting parameters.
+			this.text = kwArgs && kwArgs.text ? kwArgs.text : DEFAULT_TEXT;
+			
+			this.connect();
+		},
+		
+		process: function(o){
+			//	summary:
+			//		Process the action on the given object.
+			//	o: dojox.gfx.Shape
+			//		The object on which to process the highlighting action.
+			if(o.type === "onplotreset" || o.type === "onmouseout"){
+				hideChartingTooltip(this.aroundRect);
+				this.aroundRect = null;
+				return;
+			}
+			
+			if(!o.shape || o.type !== "onmouseover"){ return; }
+			
+			// calculate relative coordinates and the position
+			var aroundRect = {type: "rect"}, position = ["after", "before"];
+			switch(o.element){
+				case "marker":
+					aroundRect.x = o.cx;
+					aroundRect.y = o.cy;
+					aroundRect.width = aroundRect.height = 1;
+					break;
+				case "circle":
+					aroundRect.x = o.cx - o.cr;
+					aroundRect.y = o.cy - o.cr;
+					aroundRect.width = aroundRect.height = 2 * o.cr;
+					break;
+				case "column":
+					position = ["above", "below"];
+					// intentional fall down
+				case "bar":
+					aroundRect = dojo.clone(o.shape.getShape());
+					break;
+				case "candlestick":
+					aroundRect.x = o.x;
+					aroundRect.y = o.y;
+					aroundRect.width = o.width;
+					aroundRect.height = o.height;
+					break;
+				default:
+				//case "slice":
+					if(!this.angles){
+						// calculate the running total of slice angles
+						if(typeof o.run.data[0] == "number"){
+							this.angles = df.map(df.scanl(o.run.data, "+", 0),
+								"* 2 * Math.PI / this", df.foldl(o.run.data, "+", 0));
+						}else{
+							this.angles = df.map(df.scanl(o.run.data, "a + b.y", 0),
+								"* 2 * Math.PI / this", df.foldl(o.run.data, "a + b.y", 0));
+						}
+					}
+					var startAngle = m._degToRad(o.plot.opt.startAngle),
+						angle = (this.angles[o.index] + this.angles[o.index + 1]) / 2 + startAngle;
+					aroundRect.x = o.cx + o.cr * Math.cos(angle);
+					aroundRect.y = o.cy + o.cr * Math.sin(angle);
+					aroundRect.width = aroundRect.height = 1;
+					// calculate the position
+					if(angle < pi4){
+						// do nothing: the position is right
+					}else if(angle < pi2 + pi4){
+						position = ["below", "above"];
+					}else if(angle < Math.PI + pi4){
+						position = ["before", "after"];
+					}else if(angle < 2 * Math.PI - pi4){
+						position = ["above", "below"];
+					}
+					/*
+					else{
+						// do nothing: the position is right
+					}
+					*/
+					break;
+			}
+			
+			// adjust relative coordinates to absolute, and remove fractions
+			var lt = dojo.coords(this.chart.node, true);
+			aroundRect.x += lt.x;
+			aroundRect.y += lt.y;
+			aroundRect.x = Math.round(aroundRect.x);
+			aroundRect.y = Math.round(aroundRect.y);
+			aroundRect.width = Math.ceil(aroundRect.width);
+			aroundRect.height = Math.ceil(aroundRect.height);
+			this.aroundRect = aroundRect;
+			
+			showChartingTooltip(this.text(o), this.aroundRect, position, "center");
+		}
+	});
+	
+	//TODO: make the charting tooltip a generic one so it can be used with
+	// dojox.gfx shapes without charting.
+	
+	var MasterTooltip = dojo.declare(dijit._MasterTooltip, {
+		
+		show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode, /*String[]?*/ position, /*String*/alignment){
+			// summary:
+			//		Display tooltip w/specified contents to right of specified node
+			//		(To left if there's no space on the right, or if LTR==right)
+			// alignment: String
+			//		"center":   tooltip center alignment
+			//      "default":  tooltip default alignment (left, right, top, bottom)
+
+			if(this.aroundNode && this.aroundNode === aroundNode){
+				return;
+			}
+
+			if(this.fadeOut.status() == "playing"){
+				// previous tooltip is being hidden; wait until the hide completes then show new one
+				this._onDeck=arguments;
+				return;
+			}
+			this.containerNode.innerHTML=innerHTML;
+
+			// Firefox bug. when innerHTML changes to be shorter than previous
+			// one, the node size will not be updated until it moves.
+			this.domNode.style.top = (this.domNode.offsetTop + 1) + "px";
+			
+			if(!this.connectorNode) this.connectorNode = dojo.query(".dijitTooltipConnector", this.domNode)[0];
+			var connectorPos = dojo.coords(this.connectorNode);
+			this.arrowWidth = connectorPos.w, this.arrowHeight = connectorPos.h;
+			this.place = (alignment && alignment == "center") ? this.placeChartingTooltip : dijit.placeOnScreenAroundElement,
+			this.place(
+				this.domNode,
+				aroundNode,
+				dijit.getPopupAroundAlignment(
+					(position && position.length) ? position : dijit.Tooltip.defaultPosition,
+					this.isLeftToRight()
+				),
+				dojo.hitch(this, "orient")
+			);
+
+			// show it
+			dojo.style(this.domNode, "opacity", 0);
+			this.fadeIn.play();
+			this.isShowingNow = true;
+			this.aroundNode = aroundNode;
+		},
+		
+		placeChartingTooltip: function(node, aroundRect, aroundCorners, layoutNode){
+			return this._placeOnScreenAroundRect(node, 
+				aroundRect.x, aroundRect.y, aroundRect.width, aroundRect.height,	// rectangle
+				aroundCorners, layoutNode);
+		},
+		
+		_placeOnScreenAroundRect: function(node, x, y, width, height, aroundCorners, layoutNode){
+			var choices = [];
+		    for (var nodeCorner in aroundCorners) {
+		        choices.push({
+		            aroundCorner: nodeCorner,
+		            corner: aroundCorners[nodeCorner],
+		            pos: {
+		                x: x + (nodeCorner.charAt(1) == 'L' ? 0 : width),
+		                y: y + (nodeCorner.charAt(0) == 'T' ? 0 : height),
+		                w: width,
+		                h: height
+		            }
+		        });
+		    }
+		    return this._place(node, choices, layoutNode);
+		},
+		
+		_place: function(/* DomNode */node, /* Array */ choices, /* Function */ layoutNode){
+		    var view = dijit.getViewport();
+		    
+		    if (!node.parentNode ||
+		    String(node.parentNode.tagName).toLowerCase() != "body") {
+		        dojo.body().appendChild(node);
+		    }
+		    
+		    var best = null;
+		    
+		    var arrowLeft = null, arrowTop = null;
+		    dojo.some(choices, function(choice){
+		        var corner = choice.corner;
+		        var aroundCorner = choice.aroundCorner;
+		        var pos = choice.pos;
+		        
+		        if (layoutNode) {
+		            layoutNode(node, choice.aroundCorner, corner);
+		        }
+		        
+		        // get node's size
+		        var style = node.style;
+		        var oldDisplay = style.display;
+		        var oldVis = style.visibility;
+		        style.visibility = "hidden";
+		        style.display = "";
+		        var mb = dojo.marginBox(node);
+		        style.display = oldDisplay;
+		        style.visibility = oldVis;
+		        
+		        var startX, startY, endX, endY, width, height, overflow;
+		        
+		        arrowLeft = null, arrowTop = null;
+		        if (aroundCorner.charAt(0) == corner.charAt(0)) { //left, right
+		            startX = (corner.charAt(1) == 'L' ? pos.x : Math.max(view.l, pos.x - mb.w)), 
+					startY = (corner.charAt(0) == 'T' ? (pos.y + pos.h / 2 - mb.h / 2) : (pos.y - pos.h / 2 - mb.h / 2)), 
+					endX = (corner.charAt(1) == 'L' ? Math.min(view.l + view.w, startX + mb.w) : pos.x), 
+					endY = startY + mb.h, 
+					width = endX - startX, 
+					height = endY - startY, 
+					overflow = (mb.w - width) + (mb.h - height);
+		            arrowTop = (mb.h - this.arrowHeight) / 2;
+		        }
+		        else { //top, bottom
+		            startX = (corner.charAt(1) == 'L' ? (pos.x + pos.w / 2 - mb.w / 2) : (pos.x - pos.w / 2 - mb.w / 2)), 
+					startY = (corner.charAt(0) == 'T' ? pos.y : Math.max(view.t, pos.y - mb.h)), 
+					endX = startX + mb.w, 
+					endY = (corner.charAt(0) == 'T' ? Math.min(view.t + view.h, startY + mb.h) : pos.y), 
+					width = endX - startX, 
+					height = endY - startY, 
+					overflow = (mb.w - width) + (mb.h - height);
+		            arrowLeft = (mb.w - this.arrowWidth) / 2;
+		        }
+		        
+		        if (best == null || overflow < best.overflow) {
+		            best = {
+		                corner: corner,
+		                aroundCorner: choice.aroundCorner,
+		                x: startX,
+		                y: startY,
+		                w: width,
+		                h: height,
+		                overflow: overflow
+		            };
+		        }
+		        return !overflow;
+		    }, this);
+		    
+		    node.style.left = best.x + "px";
+		    node.style.top = best.y + "px";
+		    
+			this.connectorNode.style.top = "";
+	        this.connectorNode.style.left = "";
+	        if (arrowTop){
+				this.connectorNode.style.top = arrowTop + "px";
+			}
+	        if (arrowLeft){
+				this.connectorNode.style.left = arrowLeft + "px";
+			}
+	        
+		    if (best.overflow && layoutNode) {
+		        layoutNode(node, best.aroundCorner, best.corner);
+		    }
+		    return best;
+		}
+	});
+	
+	var masterTT = null;
+	
+	function showChartingTooltip(innerHTML, aroundNode, position, alignment){
+		if(!masterTT){ masterTT = new MasterTooltip(); }
+		return masterTT.show(innerHTML, aroundNode, position, alignment);
+	}
+	
+	function hideChartingTooltip(aroundNode){
+		if(!masterTT){ masterTT = new MasterTooltip(); }
+		return masterTT.hide(aroundNode);
+	}
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.widget.Chart2D"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Chart2D"] = true;
+dojo.provide("dojox.charting.widget.Chart2D");
+
+
+
+
+
+// require all actions to support references by name
+
+
+
+
+
+
+(function(){
+	var collectParams, collectAxisParams, collectPlotParams,
+		collectActionParams, collectDataParams,
+		notNull = function(o){ return o; },
+		df = dojox.lang.functional,
+		du = dojox.lang.utils,
+		dc = dojox.charting,
+		d = dojo;
+	
+	dojo.declare("dojox.charting.widget.Chart2D", dijit._Widget, {
+		// parameters for the markup
+		
+		// theme for the chart
+		theme: null,
+		
+		// margins for the chart: {l: 10, r: 10, t: 10, b: 10}
+		margins: null,
+		
+		// chart area
+		stroke: null,
+		fill:   null,
+		
+		// methods
+		
+		buildRendering: function(){
+			var n = this.domNode = this.srcNodeRef;
+			
+			// collect chart parameters
+			var axes    = d.query("> .axis", n).map(collectAxisParams).filter(notNull),
+				plots   = d.query("> .plot", n).map(collectPlotParams).filter(notNull),
+				actions = d.query("> .action", n).map(collectActionParams).filter(notNull),
+				series  = d.query("> .series", n).map(collectDataParams).filter(notNull);
+			
+			// build the chart
+			n.innerHTML = "";
+			var c = this.chart = new dc.Chart2D(n, {
+				margins: this.margins, 
+				stroke:  this.stroke,
+				fill:    this.fill
+			});
+			
+			// add collected parameters
+			if(this.theme){
+				c.setTheme(this.theme);
+			}
+			axes.forEach(function(axis){
+				c.addAxis(axis.name, axis.kwArgs);
+			});
+			plots.forEach(function(plot){
+				c.addPlot(plot.name, plot.kwArgs);
+			});
+			
+			this.actions = actions.map(function(action){
+				return new action.action(c, action.plot, action.kwArgs)
+			});
+			
+			var render = df.foldl(series, function(render, series){
+				if(series.type == "data"){
+					c.addSeries(series.name, series.data, series.kwArgs);
+					render = true;
+				}else{
+					c.addSeries(series.name, [0], series.kwArgs);
+					var kw = {};
+					du.updateWithPattern(
+						kw, 
+						series.kwArgs, 
+						{
+							"query": "", 
+							"queryOptions": null, 
+							"start": 0, 
+							"count": 1 //, 
+							// "sort": []
+						}, 
+						true
+					);
+					if(series.kwArgs.sort){
+						// sort is a complex object type and doesn't survive coercian
+						kw.sort = dojo.clone(series.kwArgs.sort);
+					}
+					d.mixin(kw, {
+						onComplete: function(data){
+							var values;
+							if("valueFn" in series.kwArgs){
+								var fn = series.kwArgs.valueFn;
+								values = d.map(data, function(x){
+									return fn(series.data.getValue(x, series.field, 0));
+								});
+							}else{
+								values = d.map(data, function(x){
+									return series.data.getValue(x, series.field, 0);
+								});
+							}
+							c.addSeries(series.name, values, series.kwArgs).render();
+						}
+					});
+					series.data.fetch(kw);
+				}
+				return render;
+			}, false);
+			if(render){ c.render(); }
+		},
+		destroy: function(){
+			// summary: properly destroy the widget
+			this.chart.destroy();
+			this.inherited(arguments);
+		},
+		resize: function(box){
+			// summary: resize the widget
+			if(box.w > 0 && box.h > 0){
+				dojo.marginBox(this.domNode, box);
+				this.chart.resize();
+			}
+		}
+	});
+	
+	collectParams = function(node, type, kw){
+		var dp = eval("(" + type + ".prototype.defaultParams)");
+		var x, attr;
+		for(x in dp){
+			if(x in kw){ continue; }
+			attr = node.getAttribute(x);
+			kw[x] = du.coerceType(dp[x], attr == null || typeof attr == "undefined" ? dp[x] : attr);
+		}
+		var op = eval("(" + type + ".prototype.optionalParams)");
+		for(x in op){
+			if(x in kw){ continue; }
+			attr = node.getAttribute(x);
+			if(attr != null){
+				kw[x] = du.coerceType(op[x], attr);
+			}
+		}
+	};
+	
+	collectAxisParams = function(node){
+		var name = node.getAttribute("name"), type = node.getAttribute("type");
+		if(!name){ return null; }
+		var o = {name: name, kwArgs: {}}, kw = o.kwArgs;
+		if(type){
+			if(dc.axis2d[type]){
+				type = dojox._scopeName + ".charting.axis2d." + type;
+			}
+			var axis = eval("(" + type + ")");
+			if(axis){ kw.type = axis; } 
+		}else{
+			type = dojox._scopeName + ".charting.axis2d.Default";
+		}
+		collectParams(node, type, kw);
+		// compatibility conversions
+		if(kw.font || kw.fontColor){
+			if(!kw.tick){
+				kw.tick = {};
+			}
+			if(kw.font){
+				kw.tick.font = kw.font;
+			}
+			if(kw.fontColor){
+				kw.tick.fontColor = kw.fontColor;
+			}
+		}
+		return o;
+	};
+	
+	collectPlotParams = function(node){
+		// var name = d.attr(node, "name"), type = d.attr(node, "type");
+		var name = node.getAttribute("name"), type = node.getAttribute("type");
+		if(!name){ return null; }
+		var o = {name: name, kwArgs: {}}, kw = o.kwArgs;
+		if(type){
+			if(dc.plot2d[type]){
+				type = dojox._scopeName + ".charting.plot2d." + type;
+			}
+			var plot = eval("(" + type + ")");
+			if(plot){ kw.type = plot; } 
+		}else{
+			type = dojox._scopeName + ".charting.plot2d.Default";
+		}
+		collectParams(node, type, kw);
+		return o;
+	};
+	
+	collectActionParams = function(node){
+		// var plot = d.attr(node, "plot"), type = d.attr(node, "type");
+		var plot = node.getAttribute("plot"), type = node.getAttribute("type");
+		if(!plot){ plot = "default"; }
+		var o = {plot: plot, kwArgs: {}}, kw = o.kwArgs;
+		if(type){
+			if(dc.action2d[type]){
+				type = dojox._scopeName + ".charting.action2d." + type;
+			}
+			var action = eval("(" + type + ")");
+			if(!action){ return null; }
+			o.action = action;
+		}else{
+			return null;
+		}
+		collectParams(node, type, kw);
+		return o;
+	};
+
+	collectDataParams = function(node){
+		var ga = d.partial(d.attr, node);
+		var name = ga("name");
+		if(!name){ return null; }
+		var o = { name: name, kwArgs: {} }, kw = o.kwArgs, t;
+		t = ga("plot");
+		if(t != null){ kw.plot = t; }
+		t = ga("marker");
+		if(t != null){ kw.marker = t; }
+		t = ga("stroke");
+		if(t != null){ kw.stroke = eval("(" + t + ")"); }
+		t = ga("outline");
+		if(t != null){ kw.outline = eval("(" + t + ")"); }
+		t = ga("shadow");
+		if(t != null){ kw.shadow = eval("(" + t + ")"); }
+		t = ga("fill");
+		if(t != null){ kw.fill = eval("(" + t + ")"); }
+		t = ga("font");
+		if(t != null){ kw.font = t; }
+		t = ga("fontColor");
+		if(t != null){ kw.fontColor = eval("(" + t + ")"); }
+		t = ga("legend");
+		if(t != null){ kw.legend = t; }
+		t = ga("data");
+		if(t != null){
+			o.type = "data";
+			o.data = t ? dojo.map(String(t).split(','), Number) : [];
+			return o;
+		}
+		t = ga("array");
+		if(t != null){
+			o.type = "data";
+			o.data = eval("(" + t + ")");
+			return o;
+		}
+		t = ga("store");
+		if(t != null){
+			o.type = "store";
+			o.data = eval("(" + t + ")");
+			t = ga("field");
+			o.field = t != null ? t : "value";
+			t = ga("query");
+			if(!!t){ kw.query = t; }
+			t = ga("queryOptions");
+			if(!!t){ kw.queryOptions = eval("(" + t + ")"); }
+			t = ga("start");
+			if(!!t){ kw.start = Number(t); }
+			t = ga("count");
+			if(!!t){ kw.count = Number(t); }
+			t = ga("sort");
+			if(!!t){ kw.sort = eval("("+t+")"); }
+			t = ga("valueFn");
+			if(!!t){ kw.valueFn = df.lambda(t); }
+			return o;
+		}
+		return null;
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.themes.ET.greys"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.themes.ET.greys"] = true;
+dojo.provide("dojox.charting.themes.ET.greys");
+
+dojo.deprecated("dojox.charting.themes.ET.greys", "1.3");
+
+(function(){
+	var dxc=dojox.charting;
+	dxc.themes.ET.greys = new dxc.Theme({
+		antiAlias: false,
+		chart: {
+			stroke: null,
+			fill: "inherit"
+		},
+		plotarea: {
+			// stroke: { width: 0.2, color: "#666666" },
+			stroke: null,
+			fill: "transparent"
+		},
+		axis:{
+			stroke:{ width:	0 },
+			line:{ width:	0 },
+			majorTick:{ 
+				color:	"#666666", 
+				width:	1,
+				length: 5
+			},
+			minorTick: { 
+				color:	"black", 
+				width:	0.5, 
+				length:	2
+			},
+			font:"normal normal normal 8pt Tahoma",
+			fontColor:"#999999"
+		},
+		series:{
+			outline:{ width: 0, color: "black" },
+			stroke:	{ width: 1, color: "black" },
+			fill:	dojo.colorFromHex("#3b444b"),
+			font: "normal normal normal 7pt Tahoma",	//	label
+			fontColor: "#717171"
+		},
+		marker:{	//	any markers on a series.
+			stroke:{ width:1 },
+			fill:"#333",
+			font:"normal normal normal 7pt Tahoma",	//	label
+			fontColor:"#000"
+		},
+		colors:[
+			dojo.colorFromHex("#8a8c8f"), 
+			dojo.colorFromHex("#4b4b4b"),
+			dojo.colorFromHex("#3b444b"), 
+			dojo.colorFromHex("#2e2d30"),
+			dojo.colorFromHex("#000000") 
+		]
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.widget.Sparkline"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Sparkline"] = true;
+dojo.provide("dojox.charting.widget.Sparkline");
+
+
+
+
+(function(){
+
+	var d = dojo;
+
+	dojo.declare("dojox.charting.widget.Sparkline",
+		dojox.charting.widget.Chart2D,
+		{
+			theme: dojox.charting.themes.ET.greys,
+			margins: { l: 0, r: 0, t: 0, b: 0 },
+			type: "Lines",
+			valueFn: "Number(x)",
+			store: "",
+			field: "",
+			query: "",
+			queryOptions: "",
+			start: "0",
+			count: "Infinity",
+			sort: "",
+			data: "",
+			name: "default",
+			buildRendering: function(){
+				var n = this.srcNodeRef;
+				if(	!n.childNodes.length || // shortcut the query
+					!d.query("> .axis, > .plot, > .action, > .series", n).length){
+					var plot = document.createElement("div");
+					d.attr(plot, {
+						"class": "plot",
+						"name": "default",
+						"type": this.type
+					});
+					n.appendChild(plot);
+
+					var series = document.createElement("div");
+					d.attr(series, {
+						"class": "series",
+						plot: "default",
+						name: this.name,
+						start: this.start,
+						count: this.count,
+						valueFn: this.valueFn
+					});
+					d.forEach(
+						["store", "field", "query", "queryOptions", "sort", "data"],
+						function(i){
+							if(this[i].length){
+								d.attr(series, i, this[i]);
+							}
+						},
+						this
+					);
+					n.appendChild(series);
+				}
+				this.inherited(arguments);
+			}
+		}
+	);
+
+})();
+
+}
+
+if(!dojo._hasResource["dojox.charting.widget.Legend"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.charting.widget.Legend"] = true;
+dojo.provide("dojox.charting.widget.Legend");
+
+
+
+
+
+
+
+dojo.declare("dojox.charting.widget.Legend", [dijit._Widget, dijit._Templated], {
+	// summary: A legend for a chart. A legend contains summary labels for 
+	// each series of data contained in the chart.
+	//
+	// Set the horizontal attribute to boolean false to layout legend labels vertically.
+	// Set the horizontal attribute to a number to layout legend labels in horizontal
+	// rows each containing that number of labels (except possibly the last row).
+	//
+	// (Line or Scatter charts (colored lines with shape symbols) )
+	// -o- Series1		-X- Series2		-v- Series3
+	//
+	// (Area/Bar/Pie charts (letters represent colors))
+	// [a] Series1		[b] Series2		[c] Series3
+	
+	chartRef:   "",
+	horizontal: true,
+	swatchSize: 18,
+	
+	templateString: "<table dojoAttachPoint='legendNode' class='dojoxLegendNode'><tbody dojoAttachPoint='legendBody'></tbody></table>",
+	
+	legendNode: null,
+	legendBody: null,
+	
+	postCreate: function(){
+		if(!this.chart){
+			if(!this.chartRef){ return; }
+			this.chart = dijit.byId(this.chartRef);
+			if(!this.chart){
+				var node = dojo.byId(this.chartRef);
+				if(node){
+					this.chart = dijit.byNode(node);
+				}else{
+					console.log("Could not find chart instance with id: " + this.chartRef);
+					return;
+				}
+			}
+			this.series = this.chart.chart.series;
+		}else{
+			this.series = this.chart.series;
+		}
+		
+		this.refresh();
+	},
+	refresh: function(){
+		// summary: regenerates the legend to reflect changes to the chart
+		
+		var df = dojox.lang.functional;
+
+		// cleanup
+		if(this._surfaces){
+			dojo.forEach(this._surfaces, function(surface){
+				surface.destroy();
+			});
+		}
+		this._surfaces = [];
+		while(this.legendBody.lastChild){
+			dojo.destroy(this.legendBody.lastChild);
+		}
+
+		if(this.horizontal){
+			dojo.addClass(this.legendNode, "dojoxLegendHorizontal");
+			// make a container <tr>
+			this._tr = dojo.doc.createElement("tr");
+			this.legendBody.appendChild(this._tr);
+			this._inrow = 0;
+		}
+		
+		var s = this.series;
+		if(s.length == 0){
+			return;
+		}
+		if(s[0].chart.stack[0].declaredClass == "dojox.charting.plot2d.Pie"){
+			var t = s[0].chart.stack[0];
+			if(typeof t.run.data[0] == "number"){
+				var filteredRun = df.map(t.run.data, "Math.max(x, 0)");
+				if(df.every(filteredRun, "<= 0")){
+					return;
+				}
+				var slices = df.map(filteredRun, "/this", df.foldl(filteredRun, "+", 0));
+				dojo.forEach(slices, function(x, i){
+					this._addLabel(t.dyn[i], t._getLabel(x * 100) + "%");
+				}, this);
+			}else{
+				dojo.forEach(t.run.data, function(x, i){
+					this._addLabel(t.dyn[i], x.legend || x.text || x.y);
+				}, this);
+			}
+		}else{
+			dojo.forEach(s, function(x){
+				this._addLabel(x.dyn, x.legend || x.name);
+			}, this);
+		}
+	},
+	_addLabel: function(dyn, label){
+		// create necessary elements
+		var icon = dojo.doc.createElement("td"),
+			text = dojo.doc.createElement("td"),
+			div  = dojo.doc.createElement("div");
+		dojo.addClass(icon, "dojoxLegendIcon");
+		dojo.addClass(text, "dojoxLegendText");
+		div.style.width  = this.swatchSize + "px";
+		div.style.height = this.swatchSize + "px";
+		icon.appendChild(div);
+		
+		// create a skeleton
+		if(this._tr){
+			// horizontal
+			this._tr.appendChild(icon);
+			this._tr.appendChild(text);
+			if(++this._inrow === this.horizontal){
+				// make a fresh container <tr>
+				this._tr = dojo.doc.createElement("tr");
+				this.legendBody.appendChild(this._tr);
+				this._inrow = 0;
+			}
+		}else{
+			// vertical
+			var tr = dojo.doc.createElement("tr");
+			this.legendBody.appendChild(tr);
+			tr.appendChild(icon);
+			tr.appendChild(text);
+		}
+		
+		// populate the skeleton
+		this._makeIcon(div, dyn);
+		text.innerHTML = String(label);
+	},
+	_makeIcon: function(div, dyn){
+		var mb = { h: this.swatchSize, w: this.swatchSize };
+		var surface = dojox.gfx.createSurface(div, mb.w, mb.h);
+		this._surfaces.push(surface);
+		if(dyn.fill){
+			// regions
+			surface.createRect({x: 2, y: 2, width: mb.w - 4, height: mb.h - 4}).
+				setFill(dyn.fill).setStroke(dyn.stroke);
+		}else if(dyn.stroke || dyn.marker){
+			// draw line
+			var line = {x1: 0, y1: mb.h / 2, x2: mb.w, y2: mb.h / 2};
+			if(dyn.stroke){
+				surface.createLine(line).setStroke(dyn.stroke);
+			}
+			if(dyn.marker){
+				// draw marker on top
+				var c = {x: mb.w / 2, y: mb.h / 2};
+				if(dyn.stroke){
+					surface.createPath({path: "M" + c.x + " " + c.y + " " + dyn.marker}).
+						setFill(dyn.stroke.color).setStroke(dyn.stroke);
+				}else{
+					surface.createPath({path: "M" + c.x + " " + c.y + " " + dyn.marker}).
+						setFill(dyn.color).setStroke(dyn.color);
+				}
+			}
+		}else{
+			// nothing
+			surface.createRect({x: 2, y: 2, width: mb.w - 4, height: mb.h - 4}).
+				setStroke("black");
+			surface.createLine({x1: 2, y1: 2, x2: mb.w - 2, y2: mb.h - 2}).setStroke("black");
+			surface.createLine({x1: 2, y1: mb.h - 2, x2: mb.w - 2, y2: 2}).setStroke("black");
+		}
+	}
+});
+
+}
+
+
+dojo.i18n._preloadLocalizations("dojox.charting.widget.nls.Chart2D", ["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
Index: trunk/web/dojo/dojox/charting/widget/Sparkline.js
===================================================================
--- trunk/web/dojo/dojox/charting/widget/Sparkline.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/widget/Sparkline.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.widget.Sparkline"]){
+dojo._hasResource["dojox.charting.widget.Sparkline"]=true;
+dojo.provide("dojox.charting.widget.Sparkline");
+dojo.require("dojox.charting.widget.Chart2D");
+dojo.require("dojox.charting.themes.ET.greys");
+(function(){
+var d=dojo;
+dojo.declare("dojox.charting.widget.Sparkline",dojox.charting.widget.Chart2D,{theme:dojox.charting.themes.ET.greys,margins:{l:0,r:0,t:0,b:0},type:"Lines",valueFn:"Number(x)",store:"",field:"",query:"",queryOptions:"",start:"0",count:"Infinity",sort:"",data:"",name:"default",buildRendering:function(){
+var n=this.srcNodeRef;
+if(!n.childNodes.length||!d.query("> .axis, > .plot, > .action, > .series",n).length){
+var _1=document.createElement("div");
+d.attr(_1,{"class":"plot","name":"default","type":this.type});
+n.appendChild(_1);
+var _2=document.createElement("div");
+d.attr(_2,{"class":"series",plot:"default",name:this.name,start:this.start,count:this.count,valueFn:this.valueFn});
+d.forEach(["store","field","query","queryOptions","sort","data"],function(i){
+if(this[i].length){
+d.attr(_2,i,this[i]);
+}
+},this);
+n.appendChild(_2);
+}
+this.inherited(arguments);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/Element.js
===================================================================
--- trunk/web/dojo/dojox/charting/Element.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/Element.js	(revision 9)
@@ -0,0 +1,169 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.Element"]){
+dojo._hasResource["dojox.charting.Element"]=true;
+dojo.provide("dojox.charting.Element");
+dojo.require("dojox.gfx");
+dojo.declare("dojox.charting.Element",null,{chart:null,group:null,htmlElements:null,dirty:true,constructor:function(_1){
+this.chart=_1;
+this.group=null;
+this.htmlElements=[];
+this.dirty=true;
+},createGroup:function(_2){
+if(!_2){
+_2=this.chart.surface;
+}
+if(!this.group){
+this.group=_2.createGroup();
+}
+return this;
+},purgeGroup:function(){
+this.destroyHtmlElements();
+if(this.group){
+this.group.clear();
+this.group.removeShape();
+this.group=null;
+}
+this.dirty=true;
+return this;
+},cleanGroup:function(_3){
+this.destroyHtmlElements();
+if(!_3){
+_3=this.chart.surface;
+}
+if(this.group){
+this.group.clear();
+}else{
+this.group=_3.createGroup();
+}
+this.dirty=true;
+return this;
+},destroyHtmlElements:function(){
+if(this.htmlElements.length){
+dojo.forEach(this.htmlElements,dojo.destroy);
+this.htmlElements=[];
+}
+},destroy:function(){
+this.purgeGroup();
+},_plotFill:function(_4,_5,_6){
+if(!_4||!_4.type||!_4.space){
+return _4;
+}
+var _7=_4.space;
+switch(_4.type){
+case "linear":
+if(_7==="plot"||_7==="shapeX"||_7==="shapeY"){
+_4=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,_4);
+_4.space=_7;
+if(_7==="plot"||_7==="shapeX"){
+var _8=_5.height-_6.t-_6.b;
+_4.y1=_6.t+_8*_4.y1/100;
+_4.y2=_6.t+_8*_4.y2/100;
+}
+if(_7==="plot"||_7==="shapeY"){
+var _8=_5.width-_6.l-_6.r;
+_4.x1=_6.l+_8*_4.x1/100;
+_4.x2=_6.l+_8*_4.x2/100;
+}
+}
+break;
+case "radial":
+if(_7==="plot"){
+_4=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_4);
+_4.space=_7;
+var _9=_5.width-_6.l-_6.r,_a=_5.height-_6.t-_6.b;
+_4.cx=_6.l+_9*_4.cx/100;
+_4.cy=_6.t+_a*_4.cy/100;
+_4.r=_4.r*Math.sqrt(_9*_9+_a*_a)/200;
+}
+break;
+case "pattern":
+if(_7==="plot"||_7==="shapeX"||_7==="shapeY"){
+_4=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,_4);
+_4.space=_7;
+if(_7==="plot"||_7==="shapeX"){
+var _8=_5.height-_6.t-_6.b;
+_4.y=_6.t+_8*_4.y/100;
+_4.height=_8*_4.height/100;
+}
+if(_7==="plot"||_7==="shapeY"){
+var _8=_5.width-_6.l-_6.r;
+_4.x=_6.l+_8*_4.x/100;
+_4.width=_8*_4.width/100;
+}
+}
+break;
+}
+return _4;
+},_shapeFill:function(_b,_c){
+if(!_b||!_b.space){
+return _b;
+}
+var _d=_b.space;
+switch(_b.type){
+case "linear":
+if(_d==="shape"||_d==="shapeX"||_d==="shapeY"){
+_b=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,_b);
+_b.space=_d;
+if(_d==="shape"||_d==="shapeX"){
+var _e=_c.width;
+_b.x1=_c.x+_e*_b.x1/100;
+_b.x2=_c.x+_e*_b.x2/100;
+}
+if(_d==="shape"||_d==="shapeY"){
+var _e=_c.height;
+_b.y1=_c.y+_e*_b.y1/100;
+_b.y2=_c.y+_e*_b.y2/100;
+}
+}
+break;
+case "radial":
+if(_d==="shape"){
+_b=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_b);
+_b.space=_d;
+_b.cx=_c.x+_c.width/2;
+_b.cy=_c.y+_c.height/2;
+_b.r=_b.r*_c.width/200;
+}
+break;
+case "pattern":
+if(_d==="shape"||_d==="shapeX"||_d==="shapeY"){
+_b=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,_b);
+_b.space=_d;
+if(_d==="shape"||_d==="shapeX"){
+var _e=_c.width;
+_b.x=_c.x+_e*_b.x/100;
+_b.width=_e*_b.width/100;
+}
+if(_d==="shape"||_d==="shapeY"){
+var _e=_c.height;
+_b.y=_c.y+_e*_b.y/100;
+_b.height=_e*_b.height/100;
+}
+}
+break;
+}
+return _b;
+},_pseudoRadialFill:function(_f,_10,_11,_12,end){
+if(!_f||_f.type!=="radial"||_f.space!=="shape"){
+return _f;
+}
+var _13=_f.space;
+_f=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_f);
+_f.space=_13;
+if(arguments.length<4){
+_f.cx=_10.x;
+_f.cy=_10.y;
+_f.r=_f.r*_11/100;
+return _f;
+}
+var _14=arguments.length<5?_12:(end+_12)/2;
+return {type:"linear",x1:_10.x,y1:_10.y,x2:_10.x+_f.r*_11*Math.cos(_14)/100,y2:_10.y+_f.r*_11*Math.sin(_14)/100,colors:_f.colors};
+return _f;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Markers.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Markers.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Markers.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Markers"]){
+dojo._hasResource["dojox.charting.plot2d.Markers"]=true;
+dojo.provide("dojox.charting.plot2d.Markers");
+dojo.require("dojox.charting.plot2d.Default");
+dojo.declare("dojox.charting.plot2d.Markers",dojox.charting.plot2d.Default,{constructor:function(){
+this.opt.markers=true;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Scatter.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Scatter.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Scatter.js	(revision 9)
@@ -0,0 +1,126 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Scatter"]){
+dojo._hasResource["dojox.charting.plot2d.Scatter"]=true;
+dojo.provide("dojox.charting.plot2d.Scatter");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+dojo.require("dojox.gfx.gradutils");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Scatter",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",shadows:null,animate:null},optionalParams:{markerStroke:{},markerOutline:{},markerShadow:{},markerFill:{},markerFont:"",markerFontColor:""},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.animate=this.opt.animate;
+},render:function(_4,_5){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_4,_5);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_6){
+_6.cleanGroup(s);
+});
+}
+var t=this.chart.theme,_7=this.events();
+for(var i=this.series.length-1;i>=0;--i){
+var _8=this.series[i];
+if(!this.dirty&&!_8.dirty){
+t.skip();
+this._reconnectEvents(_8.name);
+continue;
+}
+_8.cleanGroup();
+if(!_8.data.length){
+_8.dirty=false;
+t.skip();
+continue;
+}
+var _9=t.next("marker",[this.opt,_8]),s=_8.group,_a,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler);
+if(typeof _8.data[0]=="number"){
+_a=dojo.map(_8.data,function(v,i){
+return {x:ht(i+1)+_5.l,y:_4.height-_5.b-vt(v)};
+},this);
+}else{
+_a=dojo.map(_8.data,function(v,i){
+return {x:ht(v.x)+_5.l,y:_4.height-_5.b-vt(v.y)};
+},this);
+}
+var _b=new Array(_a.length),_c=new Array(_a.length),_d=new Array(_a.length);
+dojo.forEach(_a,function(c,i){
+var _e=typeof _8.data[i]=="number"?t.post(_9,"marker"):t.addMixin(_9,"marker",_8.data[i],true),_f="M"+c.x+" "+c.y+" "+_e.symbol;
+if(_e.marker.shadow){
+_b[i]=s.createPath("M"+(c.x+_e.marker.shadow.dx)+" "+(c.y+_e.marker.shadow.dy)+" "+_e.symbol).setStroke(_e.marker.shadow).setFill(_e.marker.shadow.color);
+if(this.animate){
+this._animateScatter(_b[i],_4.height-_5.b);
+}
+}
+if(_e.marker.outline){
+var _10=dc.makeStroke(_e.marker.outline);
+_10.width=2*_10.width+_e.marker.stroke.width;
+_d[i]=s.createPath(_f).setStroke(_10);
+if(this.animate){
+this._animateScatter(_d[i],_4.height-_5.b);
+}
+}
+var _11=dc.makeStroke(_e.marker.stroke),_12=this._plotFill(_e.marker.fill,_4,_5);
+if(_12&&(_12.type==="linear"||_12.type=="radial")){
+var _13=dojox.gfx.gradutils.getColor(_12,{x:c.x,y:c.y});
+if(_11){
+_11.color=_13;
+}
+_c[i]=s.createPath(_f).setStroke(_11).setFill(_13);
+}else{
+_c[i]=s.createPath(_f).setStroke(_11).setFill(_12);
+}
+if(this.animate){
+this._animateScatter(_c[i],_4.height-_5.b);
+}
+},this);
+if(_c.length){
+_8.dyn.stroke=_c[_c.length-1].getStroke();
+_8.dyn.fill=_c[_c.length-1].getFill();
+}
+if(_7){
+var _14=new Array(_c.length);
+dojo.forEach(_c,function(s,i){
+var o={element:"marker",index:i,run:_8,shape:s,outline:_d&&_d[i]||null,shadow:_b&&_b[i]||null,cx:_a[i].x,cy:_a[i].y};
+if(typeof _8.data[0]=="number"){
+o.x=i+1;
+o.y=_8.data[i];
+}else{
+o.x=_8.data[i].x;
+o.y=_8.data[i].y;
+}
+this._connectEvents(o);
+_14[i]=o;
+},this);
+this._eventSeries[_8.name]=_14;
+}else{
+delete this._eventSeries[_8.name];
+}
+_8.dirty=false;
+}
+this.dirty=false;
+return this;
+},_animateScatter:function(_15,_16){
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_15,duration:1200,transform:[{name:"translate",start:[0,_16],end:[0,0]},{name:"scale",start:[0,0],end:[1,1]},{name:"original"}]},this.animate)).play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/MarkersOnly.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/MarkersOnly.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/MarkersOnly.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.MarkersOnly"]){
+dojo._hasResource["dojox.charting.plot2d.MarkersOnly"]=true;
+dojo.provide("dojox.charting.plot2d.MarkersOnly");
+dojo.require("dojox.charting.plot2d.Default");
+dojo.declare("dojox.charting.plot2d.MarkersOnly",dojox.charting.plot2d.Default,{constructor:function(){
+this.opt.lines=false;
+this.opt.markers=true;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Candlesticks.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Candlesticks.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Candlesticks.js	(revision 9)
@@ -0,0 +1,132 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Candlesticks"]){
+dojo._hasResource["dojox.charting.plot2d.Candlesticks"]=true;
+dojo.provide("dojox.charting.plot2d.Candlesticks");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Candlesticks",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:2,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+du.updateWithPattern(this.opt,_3,this.optionalParams);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.animate=this.opt.animate;
+},collectStats:function(_4){
+var _5=dojo.delegate(dc.defaultStats);
+for(var i=0;i<_4.length;i++){
+var _6=_4[i];
+if(!_6.data.length){
+continue;
+}
+var _7=_5.vmin,_8=_5.vmax;
+if(!("ymin" in _6)||!("ymax" in _6)){
+dojo.forEach(_6.data,function(_9,_a){
+if(_9!==null){
+var x=_9.x||_a+1;
+_5.hmin=Math.min(_5.hmin,x);
+_5.hmax=Math.max(_5.hmax,x);
+_5.vmin=Math.min(_5.vmin,_9.open,_9.close,_9.high,_9.low);
+_5.vmax=Math.max(_5.vmax,_9.open,_9.close,_9.high,_9.low);
+}
+});
+}
+if("ymin" in _6){
+_5.vmin=Math.min(_7,_6.ymin);
+}
+if("ymax" in _6){
+_5.vmax=Math.max(_8,_6.ymax);
+}
+}
+return _5;
+},getSeriesStats:function(){
+var _b=this.collectStats(this.series);
+_b.hmin-=0.5;
+_b.hmax+=0.5;
+return _b;
+},render:function(_c,_d){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_c,_d);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_e){
+_e.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_f,_10,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_11=Math.max(0,this._vScaler.bounds.lower),_12=vt(_11),_13=this.events();
+f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);
+_f=f.gap;
+_10=f.size;
+for(var i=this.series.length-1;i>=0;--i){
+var run=this.series[i];
+if(!this.dirty&&!run.dirty){
+t.skip();
+this._reconnectEvents(run.name);
+continue;
+}
+run.cleanGroup();
+var _14=t.next("candlestick",[this.opt,run]),s=run.group,_15=new Array(run.data.length);
+for(var j=0;j<run.data.length;++j){
+var v=run.data[j];
+if(v!==null){
+var _16=t.addMixin(_14,"candlestick",v,true);
+var x=ht(v.x||(j+0.5))+_d.l+_f,y=_c.height-_d.b,_17=vt(v.open),_18=vt(v.close),_19=vt(v.high),low=vt(v.low);
+if("mid" in v){
+var mid=vt(v.mid);
+}
+if(low>_19){
+var tmp=_19;
+_19=low;
+low=tmp;
+}
+if(_10>=1){
+var _1a=_17>_18;
+var _1b={x1:_10/2,x2:_10/2,y1:y-_19,y2:y-low},_1c={x:0,y:y-Math.max(_17,_18),width:_10,height:Math.max(_1a?_17-_18:_18-_17,1)};
+shape=s.createGroup();
+shape.setTransform({dx:x,dy:0});
+var _1d=shape.createGroup();
+_1d.createLine(_1b).setStroke(_16.series.stroke);
+_1d.createRect(_1c).setStroke(_16.series.stroke).setFill(_1a?_16.series.fill:"white");
+if("mid" in v){
+_1d.createLine({x1:(_16.series.stroke.width||1),x2:_10-(_16.series.stroke.width||1),y1:y-mid,y2:y-mid}).setStroke(_1a?"white":_16.series.stroke);
+}
+run.dyn.fill=_16.series.fill;
+run.dyn.stroke=_16.series.stroke;
+if(_13){
+var o={element:"candlestick",index:j,run:run,shape:_1d,x:x,y:y-Math.max(_17,_18),cx:_10/2,cy:(y-Math.max(_17,_18))+(Math.max(_1a?_17-_18:_18-_17,1)/2),width:_10,height:Math.max(_1a?_17-_18:_18-_17,1),data:v};
+this._connectEvents(o);
+_15[j]=o;
+}
+}
+if(this.animate){
+this._animateCandlesticks(shape,y-low,_19-low);
+}
+}
+}
+this._eventSeries[run.name]=_15;
+run.dirty=false;
+}
+this.dirty=false;
+return this;
+},_animateCandlesticks:function(_1e,_1f,_20){
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_1e,duration:1200,transform:[{name:"translate",start:[0,_1f-(_1f/_20)],end:[0,0]},{name:"scale",start:[1,1/_20],end:[1,1]},{name:"original"}]},this.animate)).play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/StackedLines.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/StackedLines.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/StackedLines.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedLines"]){
+dojo._hasResource["dojox.charting.plot2d.StackedLines"]=true;
+dojo.provide("dojox.charting.plot2d.StackedLines");
+dojo.require("dojox.charting.plot2d.Stacked");
+dojo.declare("dojox.charting.plot2d.StackedLines",dojox.charting.plot2d.Stacked,{constructor:function(){
+this.opt.lines=true;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Base.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Base.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Base.js	(revision 9)
@@ -0,0 +1,82 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Base"]){
+dojo._hasResource["dojox.charting.plot2d.Base"]=true;
+dojo.provide("dojox.charting.plot2d.Base");
+dojo.require("dojox.charting.scaler.primitive");
+dojo.require("dojox.charting.Element");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d._PlotEvents");
+dojo.declare("dojox.charting.plot2d.Base",[dojox.charting.Element,dojox.charting.plot2d._PlotEvents],{constructor:function(_1,_2){
+this.zoom=null,this.zoomQueue=[];
+this.lastWindow={vscale:1,hscale:1,xoffset:0,yoffset:0};
+},clear:function(){
+this.series=[];
+this._hAxis=null;
+this._vAxis=null;
+this.dirty=true;
+return this;
+},setAxis:function(_3){
+if(_3){
+this[_3.vertical?"_vAxis":"_hAxis"]=_3;
+}
+return this;
+},addSeries:function(_4){
+this.series.push(_4);
+return this;
+},getSeriesStats:function(){
+return dojox.charting.plot2d.common.collectSimpleStats(this.series);
+},calculateAxes:function(_5){
+this.initializeScalers(_5,this.getSeriesStats());
+return this;
+},isDirty:function(){
+return this.dirty||this._hAxis&&this._hAxis.dirty||this._vAxis&&this._vAxis.dirty;
+},isDataDirty:function(){
+return dojo.some(this.series,function(_6){
+return _6.dirty;
+});
+},performZoom:function(_7,_8){
+var vs=this._vAxis.scale||1,hs=this._hAxis.scale||1,_9=_7.height-_8.b,_a=this._hScaler.bounds,_b=(_a.from-_a.lower)*_a.scale,_c=this._vScaler.bounds,_d=(_c.from-_c.lower)*_c.scale;
+rVScale=vs/this.lastWindow.vscale,rHScale=hs/this.lastWindow.hscale,rXOffset=(this.lastWindow.xoffset-_b)/((this.lastWindow.hscale==1)?hs:this.lastWindow.hscale),rYOffset=(_d-this.lastWindow.yoffset)/((this.lastWindow.vscale==1)?vs:this.lastWindow.vscale),shape=this.group,anim=dojox.gfx.fx.animateTransform(dojo.delegate({shape:shape,duration:1200,transform:[{name:"translate",start:[0,0],end:[_8.l*(1-rHScale),_9*(1-rVScale)]},{name:"scale",start:[1,1],end:[rHScale,rVScale]},{name:"original"},{name:"translate",start:[0,0],end:[rXOffset,rYOffset]}]},this.zoom));
+dojo.mixin(this.lastWindow,{vscale:vs,hscale:hs,xoffset:_b,yoffset:_d});
+this.zoomQueue.push(anim);
+dojo.connect(anim,"onEnd",this,function(){
+this.zoom=null;
+this.zoomQueue.shift();
+if(this.zoomQueue.length>0){
+this.zoomQueue[0].play();
+}
+});
+if(this.zoomQueue.length==1){
+this.zoomQueue[0].play();
+}
+return this;
+},render:function(_e,_f){
+return this;
+},getRequiredColors:function(){
+return this.series.length;
+},initializeScalers:function(dim,_10){
+if(this._hAxis){
+if(!this._hAxis.initialized()){
+this._hAxis.calculate(_10.hmin,_10.hmax,dim.width);
+}
+this._hScaler=this._hAxis.getScaler();
+}else{
+this._hScaler=dojox.charting.scaler.primitive.buildScaler(_10.hmin,_10.hmax,dim.width);
+}
+if(this._vAxis){
+if(!this._vAxis.initialized()){
+this._vAxis.calculate(_10.vmin,_10.vmax,dim.height);
+}
+this._vScaler=this._vAxis.getScaler();
+}else{
+this._vScaler=dojox.charting.scaler.primitive.buildScaler(_10.vmin,_10.vmax,dim.height);
+}
+return this;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Lines.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Lines.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Lines.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Lines"]){
+dojo._hasResource["dojox.charting.plot2d.Lines"]=true;
+dojo.provide("dojox.charting.plot2d.Lines");
+dojo.require("dojox.charting.plot2d.Default");
+dojo.declare("dojox.charting.plot2d.Lines",dojox.charting.plot2d.Default,{constructor:function(){
+this.opt.lines=true;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Pie.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Pie.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Pie.js	(revision 9)
@@ -0,0 +1,199 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Pie"]){
+dojo._hasResource["dojox.charting.plot2d.Pie"]=true;
+dojo.provide("dojox.charting.plot2d.Pie");
+dojo.require("dojox.charting.Element");
+dojo.require("dojox.charting.axis2d.common");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d._PlotEvents");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.gfx");
+dojo.require("dojo.number");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,da=dojox.charting.axis2d.common,g=dojox.gfx,m=g.matrix,_1=0.2;
+dojo.declare("dojox.charting.plot2d.Pie",[dojox.charting.Element,dojox.charting.plot2d._PlotEvents],{defaultParams:{labels:true,ticks:false,fixed:true,precision:1,labelOffset:20,labelStyle:"default",htmlLabels:true,radGrad:"native",fanSize:5,startAngle:0},optionalParams:{radius:0,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+du.updateWithPattern(this.opt,_3,this.optionalParams);
+this.run=null;
+this.dyn=[];
+},clear:function(){
+this.dirty=true;
+this.dyn=[];
+this.run=null;
+return this;
+},setAxis:function(_4){
+return this;
+},addSeries:function(_5){
+this.run=_5;
+return this;
+},getSeriesStats:function(){
+return dojo.delegate(dc.defaultStats);
+},initializeScalers:function(){
+return this;
+},getRequiredColors:function(){
+return this.run?this.run.data.length:0;
+},render:function(_6,_7){
+if(!this.dirty){
+return this;
+}
+this.resetEvents();
+this.dirty=false;
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group,t=this.chart.theme;
+if(!this.run||!this.run.data.length){
+return this;
+}
+var rx=(_6.width-_7.l-_7.r)/2,ry=(_6.height-_7.t-_7.b)/2,r=Math.min(rx,ry),_8="font" in this.opt?this.opt.font:t.axis.font,_9=_8?g.normalizedLength(g.splitFontString(_8).size):0,_a="fontColor" in this.opt?this.opt.fontColor:t.axis.fontColor,_b=m._degToRad(this.opt.startAngle),_c=_b,_d,_e,_f,_10,_11,_12,run=this.run.data,_13=this.events();
+if(typeof run[0]=="number"){
+_e=df.map(run,"x ? Math.max(x, 0) : 0");
+if(df.every(_e,"<= 0")){
+return this;
+}
+_f=df.map(_e,"/this",df.foldl(_e,"+",0));
+if(this.opt.labels){
+_10=dojo.map(_f,function(x){
+return x>0?this._getLabel(x*100)+"%":"";
+},this);
+}
+}else{
+_e=df.map(run,"x ? Math.max(x.y, 0) : 0");
+if(df.every(_e,"<= 0")){
+return this;
+}
+_f=df.map(_e,"/this",df.foldl(_e,"+",0));
+if(this.opt.labels){
+_10=dojo.map(_f,function(x,i){
+if(x<=0){
+return "";
+}
+var v=run[i];
+return "text" in v?v.text:this._getLabel(x*100)+"%";
+},this);
+}
+}
+var _14=df.map(run,function(v,i){
+if(v===null||typeof v=="number"){
+return t.next("slice",[this.opt,this.run],true);
+}
+return t.next("slice",[this.opt,this.run,v],true);
+},this);
+if(this.opt.labels){
+_11=df.foldl1(df.map(_10,function(_15,i){
+var _16=_14[i].series.font;
+return dojox.gfx._base._getTextBox(_15,{font:_16}).w;
+},this),"Math.max(a, b)")/2;
+if(this.opt.labelOffset<0){
+r=Math.min(rx-2*_11,ry-_9)+this.opt.labelOffset;
+}
+_12=r-this.opt.labelOffset;
+}
+if("radius" in this.opt){
+r=this.opt.radius;
+_12=r-this.opt.labelOffset;
+}
+var _17={cx:_7.l+rx,cy:_7.t+ry,r:r};
+this.dyn=[];
+var _18=new Array(_f.length);
+dojo.some(_f,function(_19,i){
+if(_19<=0){
+return false;
+}
+var v=run[i],_1a=_14[i],_1b;
+if(_19>=1){
+_1b=this._plotFill(_1a.series.fill,_6,_7);
+_1b=this._shapeFill(_1b,{x:_17.cx-_17.r,y:_17.cy-_17.r,width:2*_17.r,height:2*_17.r});
+_1b=this._pseudoRadialFill(_1b,{x:_17.cx,y:_17.cy},_17.r);
+var _1c=s.createCircle(_17).setFill(_1b).setStroke(_1a.series.stroke);
+this.dyn.push({fill:_1b,stroke:_1a.series.stroke});
+if(_13){
+var o={element:"slice",index:i,run:this.run,shape:_1c,x:i,y:typeof v=="number"?v:v.y,cx:_17.cx,cy:_17.cy,cr:r};
+this._connectEvents(o);
+_18[i]=o;
+}
+return true;
+}
+var end=_c+_19*2*Math.PI;
+if(i+1==_f.length){
+end=_b+2*Math.PI;
+}
+var _1d=end-_c,x1=_17.cx+r*Math.cos(_c),y1=_17.cy+r*Math.sin(_c),x2=_17.cx+r*Math.cos(end),y2=_17.cy+r*Math.sin(end);
+var _1e=m._degToRad(this.opt.fanSize);
+if(_1a.series.fill&&_1a.series.fill.type==="radial"&&this.opt.radGrad==="fan"&&_1d>_1e){
+var _1f=s.createGroup(),_20=Math.ceil(_1d/_1e),_21=_1d/_20;
+_1b=this._shapeFill(_1a.series.fill,{x:_17.cx-_17.r,y:_17.cy-_17.r,width:2*_17.r,height:2*_17.r});
+for(var j=0;j<_20;++j){
+var _22=j==0?x1:_17.cx+r*Math.cos(_c+(j-_1)*_21),_23=j==0?y1:_17.cy+r*Math.sin(_c+(j-_1)*_21),_24=j==_20-1?x2:_17.cx+r*Math.cos(_c+(j+1+_1)*_21),_25=j==_20-1?y2:_17.cy+r*Math.sin(_c+(j+1+_1)*_21),fan=_1f.createPath({}).moveTo(_17.cx,_17.cy).lineTo(_22,_23).arcTo(r,r,0,_21>Math.PI,true,_24,_25).lineTo(_17.cx,_17.cy).closePath().setFill(this._pseudoRadialFill(_1b,{x:_17.cx,y:_17.cy},r,_c+(j+0.5)*_21,_c+(j+0.5)*_21));
+}
+_1f.createPath({}).moveTo(_17.cx,_17.cy).lineTo(x1,y1).arcTo(r,r,0,_1d>Math.PI,true,x2,y2).lineTo(_17.cx,_17.cy).closePath().setStroke(_1a.series.stroke);
+_1c=_1f;
+}else{
+_1c=s.createPath({}).moveTo(_17.cx,_17.cy).lineTo(x1,y1).arcTo(r,r,0,_1d>Math.PI,true,x2,y2).lineTo(_17.cx,_17.cy).closePath().setStroke(_1a.series.stroke);
+var _1b=_1a.series.fill;
+if(_1b&&_1b.type==="radial"){
+_1b=this._shapeFill(_1b,{x:_17.cx-_17.r,y:_17.cy-_17.r,width:2*_17.r,height:2*_17.r});
+if(this.opt.radGrad==="linear"){
+_1b=this._pseudoRadialFill(_1b,{x:_17.cx,y:_17.cy},r,_c,end);
+}
+}else{
+if(_1b&&_1b.type==="linear"){
+_1b=this._plotFill(_1b,_6,_7);
+_1b=this._shapeFill(_1b,_1c.getBoundingBox());
+}
+}
+_1c.setFill(_1b);
+}
+this.dyn.push({fill:_1b,stroke:_1a.series.stroke});
+if(_13){
+var o={element:"slice",index:i,run:this.run,shape:_1c,x:i,y:typeof v=="number"?v:v.y,cx:_17.cx,cy:_17.cy,cr:r};
+this._connectEvents(o);
+_18[i]=o;
+}
+_c=end;
+return false;
+},this);
+if(this.opt.labels){
+_c=_b;
+dojo.some(_f,function(_26,i){
+if(_26<=0){
+return false;
+}
+var _27=_14[i];
+if(_26>=1){
+var v=run[i],_28=da.createText[this.opt.htmlLabels&&dojox.gfx.renderer!="vml"?"html":"gfx"](this.chart,s,_17.cx,_17.cy+_9/2,"middle",_10[i],_27.series.font,_27.series.fontColor);
+if(this.opt.htmlLabels){
+this.htmlElements.push(_28);
+}
+return true;
+}
+var end=_c+_26*2*Math.PI,v=run[i];
+if(i+1==_f.length){
+end=_b+2*Math.PI;
+}
+var _29=(_c+end)/2,x=_17.cx+_12*Math.cos(_29),y=_17.cy+_12*Math.sin(_29)+_9/2;
+var _28=da.createText[this.opt.htmlLabels&&dojox.gfx.renderer!="vml"?"html":"gfx"](this.chart,s,x,y,"middle",_10[i],_27.series.font,_27.series.fontColor);
+if(this.opt.htmlLabels){
+this.htmlElements.push(_28);
+}
+_c=end;
+return false;
+},this);
+}
+var esi=0;
+this._eventSeries[this.run.name]=df.map(run,function(v){
+return v<=0?null:_18[esi++];
+});
+return this;
+},_getLabel:function(_2a){
+return this.opt.fixed?dojo.number.format(_2a,{places:this.opt.precision}):_2a.toString();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Stacked.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Stacked.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Stacked.js	(revision 9)
@@ -0,0 +1,163 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Stacked"]){
+dojo._hasResource["dojox.charting.plot2d.Stacked"]=true;
+dojo.provide("dojox.charting.plot2d.Stacked");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Default");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.sequence");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Stacked",dojox.charting.plot2d.Default,{getSeriesStats:function(){
+var _2=dc.collectStackedStats(this.series);
+this._maxRunLength=_2.hmax;
+return _2;
+},render:function(_3,_4){
+if(this._maxRunLength<=0){
+return this;
+}
+var _5=df.repeat(this._maxRunLength,"-> 0",0);
+for(var i=0;i<this.series.length;++i){
+var _6=this.series[i];
+for(var j=0;j<_6.data.length;++j){
+var v=_6.data[j];
+if(v!==null){
+if(isNaN(v)){
+v=0;
+}
+_5[j]+=v;
+}
+}
+}
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_3,_4);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_7){
+_7.cleanGroup(s);
+});
+}
+var t=this.chart.theme,_8=this.events(),ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler);
+for(var i=this.series.length-1;i>=0;--i){
+var _6=this.series[i];
+if(!this.dirty&&!_6.dirty){
+t.skip();
+this._reconnectEvents(_6.name);
+continue;
+}
+_6.cleanGroup();
+var _9=t.next(this.opt.areas?"area":"line",[this.opt,_6],true),s=_6.group,_a,_b=dojo.map(_5,function(v,i){
+return {x:ht(i+1)+_4.l,y:_3.height-_4.b-vt(v)};
+},this);
+var _c=this.opt.tension?dc.curve(_b,this.opt.tension):"";
+if(this.opt.areas){
+var _d=dojo.clone(_b);
+if(this.opt.tension){
+var p=dc.curve(_d,this.opt.tension);
+p+=" L"+_b[_b.length-1].x+","+(_3.height-_4.b)+" L"+_b[0].x+","+(_3.height-_4.b)+" L"+_b[0].x+","+_b[0].y;
+_6.dyn.fill=s.createPath(p).setFill(_9.series.fill).getFill();
+}else{
+_d.push({x:_b[_b.length-1].x,y:_3.height-_4.b});
+_d.push({x:_b[0].x,y:_3.height-_4.b});
+_d.push(_b[0]);
+_6.dyn.fill=s.createPolyline(_d).setFill(_9.series.fill).getFill();
+}
+}
+if(this.opt.lines||this.opt.markers){
+if(_9.series.outline){
+_a=dc.makeStroke(_9.series.outline);
+_a.width=2*_a.width+_9.series.stroke.width;
+}
+}
+if(this.opt.markers){
+_6.dyn.marker=_9.symbol;
+}
+var _e,_f,_10;
+if(_9.series.shadow&&_9.series.stroke){
+var _11=_9.series.shadow,_12=dojo.map(_b,function(c){
+return {x:c.x+_11.dx,y:c.y+_11.dy};
+});
+if(this.opt.lines){
+if(this.opt.tension){
+_6.dyn.shadow=s.createPath(dc.curve(_12,this.opt.tension)).setStroke(_11).getStroke();
+}else{
+_6.dyn.shadow=s.createPolyline(_12).setStroke(_11).getStroke();
+}
+}
+if(this.opt.markers){
+_11=_9.marker.shadow;
+_10=dojo.map(_12,function(c){
+return s.createPath("M"+c.x+" "+c.y+" "+_9.symbol).setStroke(_11).setFill(_11.color);
+},this);
+}
+}
+if(this.opt.lines){
+if(_a){
+if(this.opt.tension){
+_6.dyn.outline=s.createPath(_c).setStroke(_a).getStroke();
+}else{
+_6.dyn.outline=s.createPolyline(_b).setStroke(_a).getStroke();
+}
+}
+if(this.opt.tension){
+_6.dyn.stroke=s.createPath(_c).setStroke(_9.series.stroke).getStroke();
+}else{
+_6.dyn.stroke=s.createPolyline(_b).setStroke(_9.series.stroke).getStroke();
+}
+}
+if(this.opt.markers){
+_e=new Array(_b.length);
+_f=new Array(_b.length);
+_a=null;
+if(_9.marker.outline){
+_a=dc.makeStroke(_9.marker.outline);
+_a.width=2*_a.width+(_9.marker.stroke?_9.marker.stroke.width:0);
+}
+dojo.forEach(_b,function(c,i){
+var _13="M"+c.x+" "+c.y+" "+_9.symbol;
+if(_a){
+_f[i]=s.createPath(_13).setStroke(_a);
+}
+_e[i]=s.createPath(_13).setStroke(_9.marker.stroke).setFill(_9.marker.fill);
+},this);
+if(_8){
+var _14=new Array(_e.length);
+dojo.forEach(_e,function(s,i){
+var o={element:"marker",index:i,run:_6,shape:s,outline:_f[i]||null,shadow:_10&&_10[i]||null,cx:_b[i].x,cy:_b[i].y,x:i+1,y:_6.data[i]};
+this._connectEvents(o);
+_14[i]=o;
+},this);
+this._eventSeries[_6.name]=_14;
+}else{
+delete this._eventSeries[_6.name];
+}
+}
+_6.dirty=false;
+for(var j=0;j<_6.data.length;++j){
+var v=_6.data[j];
+if(v!==null){
+if(isNaN(v)){
+v=0;
+}
+_5[j]-=v;
+}
+}
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/StackedColumns.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/StackedColumns.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/StackedColumns.js	(revision 9)
@@ -0,0 +1,107 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedColumns"]){
+dojo._hasResource["dojox.charting.plot2d.StackedColumns"]=true;
+dojo.provide("dojox.charting.plot2d.StackedColumns");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Columns");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.StackedColumns",dojox.charting.plot2d.Columns,{getSeriesStats:function(){
+var _2=dc.collectStackedStats(this.series);
+this._maxRunLength=_2.hmax;
+_2.hmin-=0.5;
+_2.hmax+=0.5;
+return _2;
+},render:function(_3,_4){
+if(this._maxRunLength<=0){
+return this;
+}
+var _5=df.repeat(this._maxRunLength,"-> 0",0);
+for(var i=0;i<this.series.length;++i){
+var _6=this.series[i];
+for(var j=0;j<_6.data.length;++j){
+var _7=_6.data[j];
+if(_7!==null){
+var v=typeof _7=="number"?_7:_7.y;
+if(isNaN(v)){
+v=0;
+}
+_5[j]+=v;
+}
+}
+}
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_3,_4);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_8){
+_8.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_9,_a,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_b=this.events();
+f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);
+_9=f.gap;
+_a=f.size;
+for(var i=this.series.length-1;i>=0;--i){
+var _6=this.series[i];
+if(!this.dirty&&!_6.dirty){
+t.skip();
+this._reconnectEvents(_6.name);
+continue;
+}
+_6.cleanGroup();
+var _c=t.next("column",[this.opt,_6]),s=_6.group,_d=new Array(_5.length);
+for(var j=0;j<_5.length;++j){
+var _7=_6.data[j];
+if(_7!==null){
+var v=_5[j],_e=vt(v),_f=typeof _7!="number"?t.addMixin(_c,"column",_7,true):t.post(_c,"column");
+if(_a>=1&&_e>=1){
+var _10={x:_4.l+ht(j+0.5)+_9,y:_3.height-_4.b-vt(v),width:_a,height:_e};
+var _11=this._plotFill(_f.series.fill,_3,_4);
+_11=this._shapeFill(_11,_10);
+var _12=s.createRect(_10).setFill(_11).setStroke(_f.series.stroke);
+_6.dyn.fill=_12.getFill();
+_6.dyn.stroke=_12.getStroke();
+if(_b){
+var o={element:"column",index:j,run:_6,shape:_12,x:j+0.5,y:v};
+this._connectEvents(o);
+_d[j]=o;
+}
+if(this.animate){
+this._animateColumn(_12,_3.height-_4.b,_e);
+}
+}
+}
+}
+this._eventSeries[_6.name]=_d;
+_6.dirty=false;
+for(var j=0;j<_6.data.length;++j){
+var _7=_6.data[j];
+if(_7!==null){
+var v=typeof _7=="number"?_7:_7.y;
+if(isNaN(v)){
+v=0;
+}
+_5[j]-=v;
+}
+}
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Columns.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Columns.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Columns.js	(revision 9)
@@ -0,0 +1,91 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Columns"]){
+dojo._hasResource["dojox.charting.plot2d.Columns"]=true;
+dojo.provide("dojox.charting.plot2d.Columns");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.gfx.fx");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Columns",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:0,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+du.updateWithPattern(this.opt,_3,this.optionalParams);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.animate=this.opt.animate;
+},getSeriesStats:function(){
+var _4=dc.collectSimpleStats(this.series);
+_4.hmin-=0.5;
+_4.hmax+=0.5;
+return _4;
+},render:function(_5,_6){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_5,_6);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_7){
+_7.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_8,_9,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_a=Math.max(0,this._vScaler.bounds.lower),_b=vt(_a),_c=this.events();
+f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);
+_8=f.gap;
+_9=f.size;
+for(var i=this.series.length-1;i>=0;--i){
+var _d=this.series[i];
+if(!this.dirty&&!_d.dirty){
+t.skip();
+this._reconnectEvents(_d.name);
+continue;
+}
+_d.cleanGroup();
+var _e=t.next("column",[this.opt,_d]),s=_d.group,_f=new Array(_d.data.length);
+for(var j=0;j<_d.data.length;++j){
+var _10=_d.data[j];
+if(_10!==null){
+var v=typeof _10=="number"?_10:_10.y,vv=vt(v),_11=vv-_b,h=Math.abs(_11),_12=typeof _10!="number"?t.addMixin(_e,"column",_10,true):t.post(_e,"column");
+if(_9>=1&&h>=1){
+var _13={x:_6.l+ht(j+0.5)+_8,y:_5.height-_6.b-(v>_a?vv:_b),width:_9,height:h};
+var _14=this._plotFill(_12.series.fill,_5,_6);
+_14=this._shapeFill(_14,_13);
+var _15=s.createRect(_13).setFill(_14).setStroke(_12.series.stroke);
+_d.dyn.fill=_15.getFill();
+_d.dyn.stroke=_15.getStroke();
+if(_c){
+var o={element:"column",index:j,run:_d,shape:_15,x:j+0.5,y:v};
+this._connectEvents(o);
+_f[j]=o;
+}
+if(this.animate){
+this._animateColumn(_15,_5.height-_6.b-_b,h);
+}
+}
+}
+}
+this._eventSeries[_d.name]=_f;
+_d.dirty=false;
+}
+this.dirty=false;
+return this;
+},_animateColumn:function(_16,_17,_18){
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_16,duration:1200,transform:[{name:"translate",start:[0,_17-(_17/_18)],end:[0,0]},{name:"scale",start:[1,1/_18],end:[1,1]},{name:"original"}]},this.animate)).play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Default.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Default.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Default.js	(revision 9)
@@ -0,0 +1,180 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Default"]){
+dojo._hasResource["dojox.charting.plot2d.Default"]=true;
+dojo.provide("dojox.charting.plot2d.Default");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+dojo.require("dojox.gfx.fx");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+var _2=1200;
+dojo.declare("dojox.charting.plot2d.Default",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",lines:true,areas:false,markers:false,tension:"",animate:false},optionalParams:{stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:"",markerStroke:{},markerOutline:{},markerShadow:{},markerFill:{},markerFont:"",markerFontColor:""},constructor:function(_3,_4){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_4);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.animate=this.opt.animate;
+},render:function(_5,_6){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_5,_6);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+this.group.setTransform(null);
+var s=this.group;
+df.forEachRev(this.series,function(_7){
+_7.cleanGroup(s);
+});
+}
+var t=this.chart.theme,_8,_9,_a,_b=this.events();
+for(var i=this.series.length-1;i>=0;--i){
+var _c=this.series[i];
+if(!this.dirty&&!_c.dirty){
+t.skip();
+this._reconnectEvents(_c.name);
+continue;
+}
+_c.cleanGroup();
+if(!_c.data.length){
+_c.dirty=false;
+t.skip();
+continue;
+}
+var _d=t.next(this.opt.areas?"area":"line",[this.opt,_c],true),s=_c.group,_e=[],_f=[],_10=null,_11,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_12=this._eventSeries[_c.name]=new Array(_c.data.length);
+for(var j=0;j<_c.data.length;j++){
+if(_c.data[j]!=null){
+if(!_10){
+_10=[];
+_f.push(j);
+_e.push(_10);
+}
+_10.push(_c.data[j]);
+}else{
+_10=null;
+}
+}
+for(var seg=0;seg<_e.length;seg++){
+if(typeof _e[seg][0]=="number"){
+_11=dojo.map(_e[seg],function(v,i){
+return {x:ht(i+_f[seg]+1)+_6.l,y:_5.height-_6.b-vt(v)};
+},this);
+}else{
+_11=dojo.map(_e[seg],function(v,i){
+return {x:ht(v.x)+_6.l,y:_5.height-_6.b-vt(v.y)};
+},this);
+}
+var _13=this.opt.tension?dc.curve(_11,this.opt.tension):"";
+if(this.opt.areas&&_11.length>1){
+var _14=_d.series.fill;
+var _15=dojo.clone(_11);
+if(this.opt.tension){
+var _16="L"+_15[_15.length-1].x+","+(_5.height-_6.b)+" L"+_15[0].x+","+(_5.height-_6.b)+" L"+_15[0].x+","+_15[0].y;
+_c.dyn.fill=s.createPath(_13+" "+_16).setFill(_14).getFill();
+}else{
+_15.push({x:_11[_11.length-1].x,y:_5.height-_6.b});
+_15.push({x:_11[0].x,y:_5.height-_6.b});
+_15.push(_11[0]);
+_c.dyn.fill=s.createPolyline(_15).setFill(_14).getFill();
+}
+}
+if(this.opt.lines||this.opt.markers){
+_8=_d.series.stroke;
+if(_d.series.outline){
+_9=_c.dyn.outline=dc.makeStroke(_d.series.outline);
+_9.width=2*_9.width+_8.width;
+}
+}
+if(this.opt.markers){
+_c.dyn.marker=_d.symbol;
+}
+var _17=null,_18=null,_19=null;
+if(_8&&_d.series.shadow&&_11.length>1){
+var _1a=_d.series.shadow,_1b=dojo.map(_11,function(c){
+return {x:c.x+_1a.dx,y:c.y+_1a.dy};
+});
+if(this.opt.lines){
+if(this.opt.tension){
+_c.dyn.shadow=s.createPath(dc.curve(_1b,this.opt.tension)).setStroke(_1a).getStroke();
+}else{
+_c.dyn.shadow=s.createPolyline(_1b).setStroke(_1a).getStroke();
+}
+}
+if(this.opt.markers&&_d.marker.shadow){
+_1a=_d.marker.shadow;
+_19=dojo.map(_1b,function(c){
+return s.createPath("M"+c.x+" "+c.y+" "+_d.symbol).setStroke(_1a).setFill(_1a.color);
+},this);
+}
+}
+if(this.opt.lines&&_11.length>1){
+if(_9){
+if(this.opt.tension){
+_c.dyn.outline=s.createPath(_13).setStroke(_9).getStroke();
+}else{
+_c.dyn.outline=s.createPolyline(_11).setStroke(_9).getStroke();
+}
+}
+if(this.opt.tension){
+_c.dyn.stroke=s.createPath(_13).setStroke(_8).getStroke();
+}else{
+_c.dyn.stroke=s.createPolyline(_11).setStroke(_8).getStroke();
+}
+}
+if(this.opt.markers){
+_17=new Array(_11.length);
+_18=new Array(_11.length);
+_9=null;
+if(_d.marker.outline){
+_9=dc.makeStroke(_d.marker.outline);
+_9.width=2*_9.width+(_d.marker.stroke?_d.marker.stroke.width:0);
+}
+dojo.forEach(_11,function(c,i){
+var _1c="M"+c.x+" "+c.y+" "+_d.symbol;
+if(_9){
+_18[i]=s.createPath(_1c).setStroke(_9);
+}
+_17[i]=s.createPath(_1c).setStroke(_d.marker.stroke).setFill(_d.marker.fill);
+},this);
+if(_b){
+dojo.forEach(_17,function(s,i){
+var o={element:"marker",index:i+_f[seg],run:_c,shape:s,outline:_18[i]||null,shadow:_19&&_19[i]||null,cx:_11[i].x,cy:_11[i].y};
+if(typeof _e[seg][0]=="number"){
+o.x=i+_f[seg]+1;
+o.y=_e[seg][i];
+}else{
+o.x=_e[seg][i].x;
+o.y=_e[seg][i].y;
+}
+this._connectEvents(o);
+_12[i+_f[seg]]=o;
+},this);
+}else{
+delete this._eventSeries[_c.name];
+}
+}
+}
+_c.dirty=false;
+}
+if(this.animate){
+var _1d=this.group;
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_1d,duration:_2,transform:[{name:"translate",start:[0,_5.height-_6.b],end:[0,0]},{name:"scale",start:[1,0],end:[1,1]},{name:"original"}]},this.animate)).play();
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/OHLC.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/OHLC.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/OHLC.js	(revision 9)
@@ -0,0 +1,125 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.OHLC"]){
+dojo._hasResource["dojox.charting.plot2d.OHLC"]=true;
+dojo.provide("dojox.charting.plot2d.OHLC");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.OHLC",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:2,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+du.updateWithPattern(this.opt,_3,this.optionalParams);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.animate=this.opt.animate;
+},collectStats:function(_4){
+var _5=dojo.delegate(dc.defaultStats);
+for(var i=0;i<_4.length;i++){
+var _6=_4[i];
+if(!_6.data.length){
+continue;
+}
+var _7=_5.vmin,_8=_5.vmax;
+if(!("ymin" in _6)||!("ymax" in _6)){
+dojo.forEach(_6.data,function(_9,_a){
+if(_9!==null){
+var x=_9.x||_a+1;
+_5.hmin=Math.min(_5.hmin,x);
+_5.hmax=Math.max(_5.hmax,x);
+_5.vmin=Math.min(_5.vmin,_9.open,_9.close,_9.high,_9.low);
+_5.vmax=Math.max(_5.vmax,_9.open,_9.close,_9.high,_9.low);
+}
+});
+}
+if("ymin" in _6){
+_5.vmin=Math.min(_7,_6.ymin);
+}
+if("ymax" in _6){
+_5.vmax=Math.max(_8,_6.ymax);
+}
+}
+return _5;
+},getSeriesStats:function(){
+var _b=this.collectStats(this.series);
+_b.hmin-=0.5;
+_b.hmax+=0.5;
+return _b;
+},render:function(_c,_d){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_c,_d);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_e){
+_e.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_f,_10,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_11=Math.max(0,this._vScaler.bounds.lower),_12=vt(_11),_13=this.events();
+f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt);
+_f=f.gap;
+_10=f.size;
+for(var i=this.series.length-1;i>=0;--i){
+var run=this.series[i];
+if(!this.dirty&&!run.dirty){
+t.skip();
+this._reconnectEvents(run.name);
+continue;
+}
+run.cleanGroup();
+var _14=t.next("candlestick",[this.opt,run]),s=run.group,_15=new Array(run.data.length);
+for(var j=0;j<run.data.length;++j){
+var v=run.data[j];
+if(v!==null){
+var _16=t.addMixin(_14,"candlestick",v,true);
+var x=ht(v.x||(j+0.5))+_d.l+_f,y=_c.height-_d.b,_17=vt(v.open),_18=vt(v.close),_19=vt(v.high),low=vt(v.low);
+if(low>_19){
+var tmp=_19;
+_19=low;
+low=tmp;
+}
+if(_10>=1){
+var hl={x1:_10/2,x2:_10/2,y1:y-_19,y2:y-low},op={x1:0,x2:((_10/2)+((_16.series.stroke.width||1)/2)),y1:y-_17,y2:y-_17},cl={x1:((_10/2)-((_16.series.stroke.width||1)/2)),x2:_10,y1:y-_18,y2:y-_18};
+shape=s.createGroup();
+shape.setTransform({dx:x,dy:0});
+var _1a=shape.createGroup();
+_1a.createLine(hl).setStroke(_16.series.stroke);
+_1a.createLine(op).setStroke(_16.series.stroke);
+_1a.createLine(cl).setStroke(_16.series.stroke);
+run.dyn.stroke=_16.series.stroke;
+if(_13){
+var o={element:"candlestick",index:j,run:run,shape:_1a,x:x,y:y-Math.max(_17,_18),cx:_10/2,cy:(y-Math.max(_17,_18))+(Math.max(_17>_18?_17-_18:_18-_17,1)/2),width:_10,height:Math.max(_17>_18?_17-_18:_18-_17,1),data:v};
+this._connectEvents(o);
+_15[j]=o;
+}
+}
+if(this.animate){
+this._animateOHLC(shape,y-low,_19-low);
+}
+}
+}
+this._eventSeries[run.name]=_15;
+run.dirty=false;
+}
+this.dirty=false;
+return this;
+},_animateOHLC:function(_1b,_1c,_1d){
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_1b,duration:1200,transform:[{name:"translate",start:[0,_1c-(_1c/_1d)],end:[0,0]},{name:"scale",start:[1,1/_1d],end:[1,1]},{name:"original"}]},this.animate)).play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Grid.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Grid.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Grid.js	(revision 9)
@@ -0,0 +1,126 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Grid"]){
+dojo._hasResource["dojox.charting.plot2d.Grid"]=true;
+dojo.provide("dojox.charting.plot2d.Grid");
+dojo.require("dojox.charting.Element");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.utils");
+(function(){
+var du=dojox.lang.utils,dc=dojox.charting.plot2d.common;
+dojo.declare("dojox.charting.plot2d.Grid",dojox.charting.Element,{defaultParams:{hAxis:"x",vAxis:"y",hMajorLines:true,hMinorLines:false,vMajorLines:true,vMinorLines:false,hStripes:"none",vStripes:"none",animate:null},optionalParams:{},constructor:function(_1,_2){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_2);
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.dirty=true;
+this.animate=this.opt.animate;
+this.zoom=null,this.zoomQueue=[];
+this.lastWindow={vscale:1,hscale:1,xoffset:0,yoffset:0};
+},clear:function(){
+this._hAxis=null;
+this._vAxis=null;
+this.dirty=true;
+return this;
+},setAxis:function(_3){
+if(_3){
+this[_3.vertical?"_vAxis":"_hAxis"]=_3;
+}
+return this;
+},addSeries:function(_4){
+return this;
+},getSeriesStats:function(){
+return dojo.delegate(dc.defaultStats);
+},initializeScalers:function(){
+return this;
+},isDirty:function(){
+return this.dirty||this._hAxis&&this._hAxis.dirty||this._vAxis&&this._vAxis.dirty;
+},performZoom:function(_5,_6){
+var vs=this._vAxis.scale||1,hs=this._hAxis.scale||1,_7=_5.height-_6.b,_8=this._hAxis.getScaler().bounds,_9=(_8.from-_8.lower)*_8.scale,_a=this._vAxis.getScaler().bounds,_b=(_a.from-_a.lower)*_a.scale;
+rVScale=vs/this.lastWindow.vscale,rHScale=hs/this.lastWindow.hscale,rXOffset=(this.lastWindow.xoffset-_9)/((this.lastWindow.hscale==1)?hs:this.lastWindow.hscale),rYOffset=(_b-this.lastWindow.yoffset)/((this.lastWindow.vscale==1)?vs:this.lastWindow.vscale),shape=this.group,anim=dojox.gfx.fx.animateTransform(dojo.delegate({shape:shape,duration:1200,transform:[{name:"translate",start:[0,0],end:[_6.l*(1-rHScale),_7*(1-rVScale)]},{name:"scale",start:[1,1],end:[rHScale,rVScale]},{name:"original"},{name:"translate",start:[0,0],end:[rXOffset,rYOffset]}]},this.zoom));
+dojo.mixin(this.lastWindow,{vscale:vs,hscale:hs,xoffset:_9,yoffset:_b});
+this.zoomQueue.push(anim);
+dojo.connect(anim,"onEnd",this,function(){
+this.zoom=null;
+this.zoomQueue.shift();
+if(this.zoomQueue.length>0){
+this.zoomQueue[0].play();
+}
+});
+if(this.zoomQueue.length==1){
+this.zoomQueue[0].play();
+}
+return this;
+},getRequiredColors:function(){
+return 0;
+},render:function(_c,_d){
+if(this.zoom){
+return this.performZoom(_c,_d);
+}
+this.dirty=this.isDirty();
+if(!this.dirty){
+return this;
+}
+this.cleanGroup();
+var s=this.group,ta=this.chart.theme.axis;
+try{
+var _e=this._vAxis.getScaler(),vt=_e.scaler.getTransformerFromModel(_e),_f=this._vAxis.getTicks();
+if(this.opt.hMinorLines){
+dojo.forEach(_f.minor,function(_10){
+var y=_c.height-_d.b-vt(_10.value);
+var _11=s.createLine({x1:_d.l,y1:y,x2:_c.width-_d.r,y2:y}).setStroke(ta.minorTick);
+if(this.animate){
+this._animateGrid(_11,"h",_d.l,_d.r+_d.l-_c.width);
+}
+},this);
+}
+if(this.opt.hMajorLines){
+dojo.forEach(_f.major,function(_12){
+var y=_c.height-_d.b-vt(_12.value);
+var _13=s.createLine({x1:_d.l,y1:y,x2:_c.width-_d.r,y2:y}).setStroke(ta.majorTick);
+if(this.animate){
+this._animateGrid(_13,"h",_d.l,_d.r+_d.l-_c.width);
+}
+},this);
+}
+}
+catch(e){
+}
+try{
+var _14=this._hAxis.getScaler(),ht=_14.scaler.getTransformerFromModel(_14),_f=this._hAxis.getTicks();
+if(_f&&this.opt.vMinorLines){
+dojo.forEach(_f.minor,function(_15){
+var x=_d.l+ht(_15.value);
+var _16=s.createLine({x1:x,y1:_d.t,x2:x,y2:_c.height-_d.b}).setStroke(ta.minorTick);
+if(this.animate){
+this._animateGrid(_16,"v",_c.height-_d.b,_c.height-_d.b-_d.t);
+}
+},this);
+}
+if(_f&&this.opt.vMajorLines){
+dojo.forEach(_f.major,function(_17){
+var x=_d.l+ht(_17.value);
+var _18=s.createLine({x1:x,y1:_d.t,x2:x,y2:_c.height-_d.b}).setStroke(ta.majorTick);
+if(this.animate){
+this._animateGrid(_18,"v",_c.height-_d.b,_c.height-_d.b-_d.t);
+}
+},this);
+}
+}
+catch(e){
+}
+this.dirty=false;
+return this;
+},_animateGrid:function(_19,_1a,_1b,_1c){
+var _1d=_1a=="h"?[_1b,0]:[0,_1b];
+var _1e=_1a=="h"?[1/_1c,1]:[1,1/_1c];
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_19,duration:1200,transform:[{name:"translate",start:_1d,end:[0,0]},{name:"scale",start:_1e,end:[1,1]},{name:"original"}]},this.animate)).play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/StackedBars.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/StackedBars.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/StackedBars.js	(revision 9)
@@ -0,0 +1,109 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedBars"]){
+dojo._hasResource["dojox.charting.plot2d.StackedBars"]=true;
+dojo.provide("dojox.charting.plot2d.StackedBars");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Bars");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.StackedBars",dojox.charting.plot2d.Bars,{getSeriesStats:function(){
+var _2=dc.collectStackedStats(this.series),t;
+this._maxRunLength=_2.hmax;
+_2.hmin-=0.5;
+_2.hmax+=0.5;
+t=_2.hmin,_2.hmin=_2.vmin,_2.vmin=t;
+t=_2.hmax,_2.hmax=_2.vmax,_2.vmax=t;
+return _2;
+},render:function(_3,_4){
+if(this._maxRunLength<=0){
+return this;
+}
+var _5=df.repeat(this._maxRunLength,"-> 0",0);
+for(var i=0;i<this.series.length;++i){
+var _6=this.series[i];
+for(var j=0;j<_6.data.length;++j){
+var _7=_6.data[j];
+if(_7!==null){
+var v=typeof _7=="number"?_7:_7.y;
+if(isNaN(v)){
+v=0;
+}
+_5[j]+=v;
+}
+}
+}
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_3,_4);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_8){
+_8.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_9,_a,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_b=this.events();
+f=dc.calculateBarSize(this._vScaler.bounds.scale,this.opt);
+_9=f.gap;
+_a=f.size;
+for(var i=this.series.length-1;i>=0;--i){
+var _6=this.series[i];
+if(!this.dirty&&!_6.dirty){
+t.skip();
+this._reconnectEvents(_6.name);
+continue;
+}
+_6.cleanGroup();
+var _c=t.next("bar",[this.opt,_6]),s=_6.group,_d=new Array(_5.length);
+for(var j=0;j<_5.length;++j){
+var _7=_6.data[j];
+if(_7!==null){
+var v=_5[j],_e=ht(v),_f=typeof _7!="number"?t.addMixin(_c,"bar",_7,true):t.post(_c,"bar");
+if(_e>=1&&_a>=1){
+var _10={x:_4.l,y:_3.height-_4.b-vt(j+1.5)+_9,width:_e,height:_a};
+var _11=this._plotFill(_f.series.fill,_3,_4);
+_11=this._shapeFill(_11,_10);
+var _12=s.createRect(_10).setFill(_11).setStroke(_f.series.stroke);
+_6.dyn.fill=_12.getFill();
+_6.dyn.stroke=_12.getStroke();
+if(_b){
+var o={element:"bar",index:j,run:_6,shape:_12,x:v,y:j+1.5};
+this._connectEvents(o);
+_d[j]=o;
+}
+if(this.animate){
+this._animateBar(_12,_4.l,-_e);
+}
+}
+}
+}
+this._eventSeries[_6.name]=_d;
+_6.dirty=false;
+for(var j=0;j<_6.data.length;++j){
+var _7=_6.data[j];
+if(_7!==null){
+var v=typeof _7=="number"?_7:_7.y;
+if(isNaN(v)){
+v=0;
+}
+_5[j]-=v;
+}
+}
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Bars.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Bars.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Bars.js	(revision 9)
@@ -0,0 +1,93 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Bars"]){
+dojo._hasResource["dojox.charting.plot2d.Bars"]=true;
+dojo.provide("dojox.charting.plot2d.Bars");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.gfx.fx");
+dojo.require("dojox.lang.utils");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Bars",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",gap:0,animate:null},optionalParams:{minBarSize:1,maxBarSize:1,stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+du.updateWithPattern(this.opt,_3,this.optionalParams);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.animate=this.opt.animate;
+},getSeriesStats:function(){
+var _4=dc.collectSimpleStats(this.series),t;
+_4.hmin-=0.5;
+_4.hmax+=0.5;
+t=_4.hmin,_4.hmin=_4.vmin,_4.vmin=t;
+t=_4.hmax,_4.hmax=_4.vmax,_4.vmax=t;
+return _4;
+},render:function(_5,_6){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_5,_6);
+}
+this.dirty=this.isDirty();
+this.resetEvents();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_7){
+_7.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_8,_9,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_a=Math.max(0,this._hScaler.bounds.lower),_b=ht(_a),_c=this.events();
+f=dc.calculateBarSize(this._vScaler.bounds.scale,this.opt);
+_8=f.gap;
+_9=f.size;
+for(var i=this.series.length-1;i>=0;--i){
+var _d=this.series[i];
+if(!this.dirty&&!_d.dirty){
+t.skip();
+this._reconnectEvents(_d.name);
+continue;
+}
+_d.cleanGroup();
+var _e=t.next("bar",[this.opt,_d]),s=_d.group,_f=new Array(_d.data.length);
+for(var j=0;j<_d.data.length;++j){
+var _10=_d.data[j];
+if(_10!==null){
+var v=typeof _10=="number"?_10:_10.y,hv=ht(v),_11=hv-_b,w=Math.abs(_11),_12=typeof _10!="number"?t.addMixin(_e,"bar",_10,true):t.post(_e,"bar");
+if(w>=1&&_9>=1){
+var _13={x:_6.l+(v<_a?hv:_b),y:_5.height-_6.b-vt(j+1.5)+_8,width:w,height:_9};
+var _14=this._plotFill(_12.series.fill,_5,_6);
+_14=this._shapeFill(_14,_13);
+var _15=s.createRect(_13).setFill(_14).setStroke(_12.series.stroke);
+_d.dyn.fill=_15.getFill();
+_d.dyn.stroke=_15.getStroke();
+if(_c){
+var o={element:"bar",index:j,run:_d,shape:_15,x:v,y:j+1.5};
+this._connectEvents(o);
+_f[j]=o;
+}
+if(this.animate){
+this._animateBar(_15,_6.l+_b,-w);
+}
+}
+}
+}
+this._eventSeries[_d.name]=_f;
+_d.dirty=false;
+}
+this.dirty=false;
+return this;
+},_animateBar:function(_16,_17,_18){
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_16,duration:1200,transform:[{name:"translate",start:[_17-(_17/_18),0],end:[0,0]},{name:"scale",start:[1/_18,1],end:[1,1]},{name:"original"}]},this.animate)).play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/common.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/common.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/common.js	(revision 9)
@@ -0,0 +1,216 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.common"]){
+dojo._hasResource["dojox.charting.plot2d.common"]=true;
+dojo.provide("dojox.charting.plot2d.common");
+dojo.require("dojo.colors");
+dojo.require("dojox.gfx");
+dojo.require("dojox.lang.functional");
+(function(){
+var df=dojox.lang.functional,dc=dojox.charting.plot2d.common;
+dojo.mixin(dojox.charting.plot2d.common,{makeStroke:function(_1){
+if(!_1){
+return _1;
+}
+if(typeof _1=="string"||_1 instanceof dojo.Color){
+_1={color:_1};
+}
+return dojox.gfx.makeParameters(dojox.gfx.defaultStroke,_1);
+},augmentColor:function(_2,_3){
+var t=new dojo.Color(_2),c=new dojo.Color(_3);
+c.a=t.a;
+return c;
+},augmentStroke:function(_4,_5){
+var s=dc.makeStroke(_4);
+if(s){
+s.color=dc.augmentColor(s.color,_5);
+}
+return s;
+},augmentFill:function(_6,_7){
+var fc,c=new dojo.Color(_7);
+if(typeof _6=="string"||_6 instanceof dojo.Color){
+return dc.augmentColor(_6,_7);
+}
+return _6;
+},defaultStats:{hmin:Number.POSITIVE_INFINITY,hmax:Number.NEGATIVE_INFINITY,vmin:Number.POSITIVE_INFINITY,vmax:Number.NEGATIVE_INFINITY},collectSimpleStats:function(_8){
+var _9=dojo.delegate(dc.defaultStats);
+for(var i=0;i<_8.length;++i){
+var _a=_8[i];
+for(var j=0;j<_a.data.length;j++){
+if(_a.data[j]!==null){
+if(typeof _a.data[j]=="number"){
+var _b=_9.vmin,_c=_9.vmax;
+if(!("ymin" in _a)||!("ymax" in _a)){
+dojo.forEach(_a.data,function(_d,i){
+if(_d!==null){
+var x=i+1,y=_d;
+if(isNaN(y)){
+y=0;
+}
+_9.hmin=Math.min(_9.hmin,x);
+_9.hmax=Math.max(_9.hmax,x);
+_9.vmin=Math.min(_9.vmin,y);
+_9.vmax=Math.max(_9.vmax,y);
+}
+});
+}
+if("ymin" in _a){
+_9.vmin=Math.min(_b,_a.ymin);
+}
+if("ymax" in _a){
+_9.vmax=Math.max(_c,_a.ymax);
+}
+}else{
+var _e=_9.hmin,_f=_9.hmax,_b=_9.vmin,_c=_9.vmax;
+if(!("xmin" in _a)||!("xmax" in _a)||!("ymin" in _a)||!("ymax" in _a)){
+dojo.forEach(_a.data,function(val,i){
+if(val!==null){
+var x="x" in val?val.x:i+1,y=val.y;
+if(isNaN(x)){
+x=0;
+}
+if(isNaN(y)){
+y=0;
+}
+_9.hmin=Math.min(_9.hmin,x);
+_9.hmax=Math.max(_9.hmax,x);
+_9.vmin=Math.min(_9.vmin,y);
+_9.vmax=Math.max(_9.vmax,y);
+}
+});
+}
+if("xmin" in _a){
+_9.hmin=Math.min(_e,_a.xmin);
+}
+if("xmax" in _a){
+_9.hmax=Math.max(_f,_a.xmax);
+}
+if("ymin" in _a){
+_9.vmin=Math.min(_b,_a.ymin);
+}
+if("ymax" in _a){
+_9.vmax=Math.max(_c,_a.ymax);
+}
+}
+break;
+}
+}
+}
+return _9;
+},calculateBarSize:function(_10,opt,_11){
+if(!_11){
+_11=1;
+}
+var gap=opt.gap,_12=(_10-2*gap)/_11;
+if("minBarSize" in opt){
+_12=Math.max(_12,opt.minBarSize);
+}
+if("maxBarSize" in opt){
+_12=Math.min(_12,opt.maxBarSize);
+}
+_12=Math.max(_12,1);
+gap=(_10-_12*_11)/2;
+return {size:_12,gap:gap};
+},collectStackedStats:function(_13){
+var _14=dojo.clone(dc.defaultStats);
+if(_13.length){
+_14.hmin=Math.min(_14.hmin,1);
+_14.hmax=df.foldl(_13,"seed, run -> Math.max(seed, run.data.length)",_14.hmax);
+for(var i=0;i<_14.hmax;++i){
+var v=_13[0].data[i];
+if(isNaN(v)){
+v=0;
+}
+_14.vmin=Math.min(_14.vmin,v);
+for(var j=1;j<_13.length;++j){
+var t=_13[j].data[i];
+if(isNaN(t)){
+t=0;
+}
+v+=t;
+}
+_14.vmax=Math.max(_14.vmax,v);
+}
+}
+return _14;
+},curve:function(a,_15){
+var arr=a.slice(0);
+if(_15=="x"){
+arr[arr.length]=arr[0];
+}
+var p=dojo.map(arr,function(_16,i){
+if(i==0){
+return "M"+_16.x+","+_16.y;
+}
+if(!isNaN(_15)){
+var dx=_16.x-arr[i-1].x,dy=arr[i-1].y;
+return "C"+(_16.x-(_15-1)*(dx/_15))+","+dy+" "+(_16.x-(dx/_15))+","+_16.y+" "+_16.x+","+_16.y;
+}else{
+if(_15=="X"||_15=="x"||_15=="S"){
+var p0,p1=arr[i-1],p2=arr[i],p3;
+var _17,_18,_19,_1a;
+var f=1/6;
+if(i==1){
+if(_15=="x"){
+p0=arr[arr.length-2];
+}else{
+p0=p1;
+}
+f=1/3;
+}else{
+p0=arr[i-2];
+}
+if(i==(arr.length-1)){
+if(_15=="x"){
+p3=arr[1];
+}else{
+p3=p2;
+}
+f=1/3;
+}else{
+p3=arr[i+1];
+}
+var _1b=Math.sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
+var _1c=Math.sqrt((p2.x-p0.x)*(p2.x-p0.x)+(p2.y-p0.y)*(p2.y-p0.y));
+var _1d=Math.sqrt((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y));
+var _1e=_1c*f;
+var _1f=_1d*f;
+if(_1e>_1b/2&&_1f>_1b/2){
+_1e=_1b/2;
+_1f=_1b/2;
+}else{
+if(_1e>_1b/2){
+_1e=_1b/2;
+_1f=_1b/2*_1d/_1c;
+}else{
+if(_1f>_1b/2){
+_1f=_1b/2;
+_1e=_1b/2*_1c/_1d;
+}
+}
+}
+if(_15=="S"){
+if(p0==p1){
+_1e=0;
+}
+if(p2==p3){
+_1f=0;
+}
+}
+_17=p1.x+_1e*(p2.x-p0.x)/_1c;
+_18=p1.y+_1e*(p2.y-p0.y)/_1c;
+_19=p2.x-_1f*(p3.x-p1.x)/_1d;
+_1a=p2.y-_1f*(p3.y-p1.y)/_1d;
+}
+}
+return "C"+(_17+","+_18+" "+_19+","+_1a+" "+p2.x+","+p2.y);
+});
+return p.join(" ");
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/StackedAreas.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/StackedAreas.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/StackedAreas.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.StackedAreas"]){
+dojo._hasResource["dojox.charting.plot2d.StackedAreas"]=true;
+dojo.provide("dojox.charting.plot2d.StackedAreas");
+dojo.require("dojox.charting.plot2d.Stacked");
+dojo.declare("dojox.charting.plot2d.StackedAreas",dojox.charting.plot2d.Stacked,{constructor:function(){
+this.opt.lines=true;
+this.opt.areas=true;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Areas.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Areas.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Areas.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Areas"]){
+dojo._hasResource["dojox.charting.plot2d.Areas"]=true;
+dojo.provide("dojox.charting.plot2d.Areas");
+dojo.require("dojox.charting.plot2d.Default");
+dojo.declare("dojox.charting.plot2d.Areas",dojox.charting.plot2d.Default,{constructor:function(){
+this.opt.lines=true;
+this.opt.areas=true;
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/Bubble.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/Bubble.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/Bubble.js	(revision 9)
@@ -0,0 +1,130 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.Bubble"]){
+dojo._hasResource["dojox.charting.plot2d.Bubble"]=true;
+dojo.provide("dojox.charting.plot2d.Bubble");
+dojo.require("dojox.charting.plot2d.Base");
+dojo.require("dojox.lang.functional");
+(function(){
+var df=dojox.lang.functional,du=dojox.lang.utils,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.Bubble",dojox.charting.plot2d.Base,{defaultParams:{hAxis:"x",vAxis:"y",animate:null},optionalParams:{stroke:{},outline:{},shadow:{},fill:{},font:"",fontColor:""},constructor:function(_2,_3){
+this.opt=dojo.clone(this.defaultParams);
+du.updateWithObject(this.opt,_3);
+this.series=[];
+this.hAxis=this.opt.hAxis;
+this.vAxis=this.opt.vAxis;
+this.animate=this.opt.animate;
+},render:function(_4,_5){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_4,_5);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_6){
+_6.cleanGroup(s);
+});
+}
+var t=this.chart.theme,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_7=this.events();
+for(var i=this.series.length-1;i>=0;--i){
+var _8=this.series[i];
+if(!this.dirty&&!_8.dirty){
+t.skip();
+this._reconnectEvents(_8.name);
+continue;
+}
+_8.cleanGroup();
+if(!_8.data.length){
+_8.dirty=false;
+t.skip();
+continue;
+}
+if(typeof _8.data[0]=="number"){
+console.warn("dojox.charting.plot2d.Bubble: the data in the following series cannot be rendered as a bubble chart; ",_8);
+continue;
+}
+var _9=t.next("circle",[this.opt,_8]),s=_8.group,_a=dojo.map(_8.data,function(v,i){
+return v?{x:ht(v.x)+_5.l,y:_4.height-_5.b-vt(v.y),radius:this._vScaler.bounds.scale*(v.size/2)}:null;
+},this);
+var _b=null,_c=null,_d=null;
+if(_9.series.shadow){
+_d=dojo.map(_a,function(_e){
+if(_e!==null){
+var _f=t.addMixin(_9,"circle",_e,true),_10=_f.series.shadow;
+var _11=s.createCircle({cx:_e.x+_10.dx,cy:_e.y+_10.dy,r:_e.radius}).setStroke(_10).setFill(_10.color);
+if(this.animate){
+this._animateBubble(_11,_4.height-_5.b,_e.radius);
+}
+return _11;
+}
+return null;
+},this);
+if(_d.length){
+_8.dyn.shadow=_d[_d.length-1].getStroke();
+}
+}
+if(_9.series.outline){
+_c=dojo.map(_a,function(_12){
+if(_12!==null){
+var _13=t.addMixin(_9,"circle",_12,true),_14=dc.makeStroke(_13.series.outline);
+_14.width=2*_14.width+_9.series.stroke.width;
+var _15=s.createCircle({cx:_12.x,cy:_12.y,r:_12.radius}).setStroke(_14);
+if(this.animate){
+this._animateBubble(_15,_4.height-_5.b,_12.radius);
+}
+return _15;
+}
+return null;
+},this);
+if(_c.length){
+_8.dyn.outline=_c[_c.length-1].getStroke();
+}
+}
+_b=dojo.map(_a,function(_16){
+if(_16!==null){
+var _17=t.addMixin(_9,"circle",_16,true),_18={x:_16.x-_16.radius,y:_16.y-_16.radius,width:2*_16.radius,height:2*_16.radius};
+var _19=this._plotFill(_17.series.fill,_4,_5);
+_19=this._shapeFill(_19,_18);
+var _1a=s.createCircle({cx:_16.x,cy:_16.y,r:_16.radius}).setFill(_19).setStroke(_17.series.stroke);
+if(this.animate){
+this._animateBubble(_1a,_4.height-_5.b,_16.radius);
+}
+return _1a;
+}
+return null;
+},this);
+if(_b.length){
+_8.dyn.fill=_b[_b.length-1].getFill();
+_8.dyn.stroke=_b[_b.length-1].getStroke();
+}
+if(_7){
+var _1b=new Array(_b.length);
+dojo.forEach(_b,function(s,i){
+if(s!==null){
+var o={element:"circle",index:i,run:_8,shape:s,outline:_c&&_c[i]||null,shadow:_d&&_d[i]||null,x:_8.data[i].x,y:_8.data[i].y,r:_8.data[i].size/2,cx:_a[i].x,cy:_a[i].y,cr:_a[i].radius};
+this._connectEvents(o);
+_1b[i]=o;
+}
+},this);
+this._eventSeries[_8.name]=_1b;
+}else{
+delete this._eventSeries[_8.name];
+}
+_8.dirty=false;
+}
+this.dirty=false;
+return this;
+},_animateBubble:function(_1c,_1d,_1e){
+dojox.gfx.fx.animateTransform(dojo.delegate({shape:_1c,duration:1200,transform:[{name:"translate",start:[0,_1d],end:[0,0]},{name:"scale",start:[0,1/_1e],end:[1,1]},{name:"original"}]},this.animate)).play();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/ClusteredColumns.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/ClusteredColumns.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/ClusteredColumns.js	(revision 9)
@@ -0,0 +1,74 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"]){
+dojo._hasResource["dojox.charting.plot2d.ClusteredColumns"]=true;
+dojo.provide("dojox.charting.plot2d.ClusteredColumns");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Columns");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.ClusteredColumns",dojox.charting.plot2d.Columns,{render:function(_2,_3){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_2,_3);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_4){
+_4.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_5,_6,_7,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_8=Math.max(0,this._vScaler.bounds.lower),_9=vt(_8),_a=this.events();
+f=dc.calculateBarSize(this._hScaler.bounds.scale,this.opt,this.series.length);
+_5=f.gap;
+_6=_7=f.size;
+for(var i=0;i<this.series.length;++i){
+var _b=this.series[i],_c=_7*i;
+if(!this.dirty&&!_b.dirty){
+t.skip();
+this._reconnectEvents(_b.name);
+continue;
+}
+_b.cleanGroup();
+var _d=t.next("column",[this.opt,_b]),s=_b.group,_e=new Array(_b.data.length);
+for(var j=0;j<_b.data.length;++j){
+var _f=_b.data[j];
+if(_f!==null){
+var v=typeof _f=="number"?_f:_f.y,vv=vt(v),_10=vv-_9,h=Math.abs(_10),_11=typeof _f!="number"?t.addMixin(_d,"column",_f,true):t.post(_d,"column");
+if(_6>=1&&h>=1){
+var _12={x:_3.l+ht(j+0.5)+_5+_c,y:_2.height-_3.b-(v>_8?vv:_9),width:_6,height:h};
+var _13=this._plotFill(_11.series.fill,_2,_3);
+_13=this._shapeFill(_13,_12);
+var _14=s.createRect(_12).setFill(_13).setStroke(_11.series.stroke);
+_b.dyn.fill=_14.getFill();
+_b.dyn.stroke=_14.getStroke();
+if(_a){
+var o={element:"column",index:j,run:_b,shape:_14,x:j+0.5,y:v};
+this._connectEvents(o);
+_e[j]=o;
+}
+if(this.animate){
+this._animateColumn(_14,_2.height-_3.b-_9,h);
+}
+}
+}
+}
+this._eventSeries[_b.name]=_e;
+_b.dirty=false;
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot2d/_PlotEvents.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/_PlotEvents.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/_PlotEvents.js	(revision 9)
@@ -0,0 +1,83 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d._PlotEvents"]){
+dojo._hasResource["dojox.charting.plot2d._PlotEvents"]=true;
+dojo.provide("dojox.charting.plot2d._PlotEvents");
+dojo.declare("dojox.charting.plot2d._PlotEvents",null,{constructor:function(){
+this._shapeEvents=[];
+this._eventSeries={};
+},destroy:function(){
+this.resetEvents();
+this.inherited(arguments);
+},plotEvent:function(o){
+},raiseEvent:function(o){
+this.plotEvent(o);
+var t=dojo.delegate(o);
+t.originalEvent=o.type;
+t.originalPlot=o.plot;
+t.type="onindirect";
+dojo.forEach(this.chart.stack,function(_1){
+if(_1!==this&&_1.plotEvent){
+t.plot=_1;
+_1.plotEvent(t);
+}
+},this);
+},connect:function(_2,_3){
+this.dirty=true;
+return dojo.connect(this,"plotEvent",_2,_3);
+},events:function(){
+var ls=this.plotEvent._listeners;
+if(!ls||!ls.length){
+return false;
+}
+for(var i in ls){
+if(!(i in Array.prototype)){
+return true;
+}
+}
+return false;
+},resetEvents:function(){
+if(this._shapeEvents.length){
+dojo.forEach(this._shapeEvents,function(_4){
+_4.shape.disconnect(_4.handle);
+});
+this._shapeEvents=[];
+}
+this.raiseEvent({type:"onplotreset",plot:this});
+},_connectSingleEvent:function(o,_5){
+this._shapeEvents.push({shape:o.eventMask,handle:o.eventMask.connect(_5,this,function(e){
+o.type=_5;
+o.event=e;
+this.raiseEvent(o);
+o.event=null;
+})});
+},_connectEvents:function(o){
+o.chart=this.chart;
+o.plot=this;
+o.hAxis=this.hAxis||null;
+o.vAxis=this.vAxis||null;
+o.eventMask=o.eventMask||o.shape;
+this._connectSingleEvent(o,"onmouseover");
+this._connectSingleEvent(o,"onmouseout");
+this._connectSingleEvent(o,"onclick");
+},_reconnectEvents:function(_6){
+var a=this._eventSeries[_6];
+if(a){
+dojo.forEach(a,this._connectEvents,this);
+}
+},fireEvent:function(_7,_8,_9,_a){
+var s=this._eventSeries[_7];
+if(s&&s.length&&_9<s.length){
+var o=s[_9];
+o.type=_8;
+o.event=_a||null;
+this.raiseEvent(o);
+o.event=null;
+}
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot2d/ClusteredBars.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot2d/ClusteredBars.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot2d/ClusteredBars.js	(revision 9)
@@ -0,0 +1,74 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot2d.ClusteredBars"]){
+dojo._hasResource["dojox.charting.plot2d.ClusteredBars"]=true;
+dojo.provide("dojox.charting.plot2d.ClusteredBars");
+dojo.require("dojox.charting.plot2d.common");
+dojo.require("dojox.charting.plot2d.Bars");
+dojo.require("dojox.lang.functional");
+dojo.require("dojox.lang.functional.reversed");
+(function(){
+var df=dojox.lang.functional,dc=dojox.charting.plot2d.common,_1=df.lambda("item.purgeGroup()");
+dojo.declare("dojox.charting.plot2d.ClusteredBars",dojox.charting.plot2d.Bars,{render:function(_2,_3){
+if(this.zoom&&!this.isDataDirty()){
+return this.performZoom(_2,_3);
+}
+this.resetEvents();
+this.dirty=this.isDirty();
+if(this.dirty){
+dojo.forEach(this.series,_1);
+this._eventSeries={};
+this.cleanGroup();
+var s=this.group;
+df.forEachRev(this.series,function(_4){
+_4.cleanGroup(s);
+});
+}
+var t=this.chart.theme,f,_5,_6,_7,ht=this._hScaler.scaler.getTransformerFromModel(this._hScaler),vt=this._vScaler.scaler.getTransformerFromModel(this._vScaler),_8=Math.max(0,this._hScaler.bounds.lower),_9=ht(_8),_a=this.events();
+f=dc.calculateBarSize(this._vScaler.bounds.scale,this.opt,this.series.length);
+_5=f.gap;
+_6=_7=f.size;
+for(var i=this.series.length-1;i>=0;--i){
+var _b=this.series[i],_c=_7*(this.series.length-i-1);
+if(!this.dirty&&!_b.dirty){
+t.skip();
+this._reconnectEvents(_b.name);
+continue;
+}
+_b.cleanGroup();
+var _d=t.next("bar",[this.opt,_b]),s=_b.group,_e=new Array(_b.data.length);
+for(var j=0;j<_b.data.length;++j){
+var _f=_b.data[j];
+if(_f!==null){
+var v=typeof _f=="number"?_f:_f.y,hv=ht(v),_10=hv-_9,w=Math.abs(_10),_11=typeof _f!="number"?t.addMixin(_d,"bar",_f,true):t.post(_d,"bar");
+if(w>=1&&_6>=1){
+var _12={x:_3.l+(v<_8?hv:_9),y:_2.height-_3.b-vt(j+1.5)+_5+_c,width:w,height:_6};
+var _13=this._plotFill(_11.series.fill,_2,_3);
+_13=this._shapeFill(_13,_12);
+var _14=s.createRect(_12).setFill(_13).setStroke(_11.series.stroke);
+_b.dyn.fill=_14.getFill();
+_b.dyn.stroke=_14.getStroke();
+if(_a){
+var o={element:"bar",index:j,run:_b,shape:_14,x:v,y:j+1.5};
+this._connectEvents(o);
+_e[j]=o;
+}
+if(this.animate){
+this._animateBar(_14,_3.l+_9,-_10);
+}
+}
+}
+}
+this._eventSeries[_b.name]=_e;
+_b.dirty=false;
+}
+this.dirty=false;
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/Series.js
===================================================================
--- trunk/web/dojo/dojox/charting/Series.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/Series.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.Series"]){
+dojo._hasResource["dojox.charting.Series"]=true;
+dojo.provide("dojox.charting.Series");
+dojo.require("dojox.charting.Element");
+dojo.declare("dojox.charting.Series",dojox.charting.Element,{constructor:function(_1,_2,_3){
+dojo.mixin(this,_3);
+if(typeof this.plot!="string"){
+this.plot="default";
+}
+this.update(_2);
+},clear:function(){
+this.dyn={};
+},update:function(_4){
+if(dojo.isArray(_4)){
+this.data=_4;
+}else{
+this.source=_4;
+this.data=this.source.data;
+if(this.source.setSeriesObject){
+this.source.setSeriesObject(this);
+}
+}
+this.dirty=true;
+this.clear();
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot3d/Bars.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot3d/Bars.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot3d/Bars.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot3d.Bars"]){
+dojo._hasResource["dojox.charting.plot3d.Bars"]=true;
+dojo.provide("dojox.charting.plot3d.Bars");
+dojo.require("dojox.charting.plot3d.Base");
+(function(){
+var _1=function(a,f,o){
+a=typeof a=="string"?a.split(""):a;
+o=o||dojo.global;
+var z=a[0];
+for(var i=1;i<a.length;z=f.call(o,z,a[i++])){
+}
+return z;
+};
+dojo.declare("dojox.charting.plot3d.Bars",dojox.charting.plot3d.Base,{constructor:function(_2,_3,_4){
+this.depth="auto";
+this.gap=0;
+this.data=[];
+this.material={type:"plastic",finish:"dull",color:"lime"};
+if(_4){
+if("depth" in _4){
+this.depth=_4.depth;
+}
+if("gap" in _4){
+this.gap=_4.gap;
+}
+if("material" in _4){
+var m=_4.material;
+if(typeof m=="string"||m instanceof dojo.Color){
+this.material.color=m;
+}else{
+this.material=m;
+}
+}
+}
+},getDepth:function(){
+if(this.depth=="auto"){
+var w=this.width;
+if(this.data&&this.data.length){
+w=w/this.data.length;
+}
+return w-2*this.gap;
+}
+return this.depth;
+},generate:function(_5,_6){
+if(!this.data){
+return this;
+}
+var _7=this.width/this.data.length,_8=0,_9=this.depth=="auto"?_7-2*this.gap:this.depth,_a=this.height/_1(this.data,Math.max);
+if(!_6){
+_6=_5.view;
+}
+for(var i=0;i<this.data.length;++i,_8+=_7){
+_6.createCube({bottom:{x:_8+this.gap,y:0,z:0},top:{x:_8+_7-this.gap,y:this.data[i]*_a,z:_9}}).setFill(this.material);
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/plot3d/Base.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot3d/Base.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot3d/Base.js	(revision 9)
@@ -0,0 +1,22 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot3d.Base"]){
+dojo._hasResource["dojox.charting.plot3d.Base"]=true;
+dojo.provide("dojox.charting.plot3d.Base");
+dojo.require("dojox.charting.Chart3D");
+dojo.declare("dojox.charting.plot3d.Base",null,{constructor:function(_1,_2,_3){
+this.width=_1;
+this.height=_2;
+},setData:function(_4){
+this.data=_4?_4:[];
+return this;
+},getDepth:function(){
+return this.depth;
+},generate:function(_5,_6){
+}});
+}
Index: trunk/web/dojo/dojox/charting/plot3d/Cylinders.js
===================================================================
--- trunk/web/dojo/dojox/charting/plot3d/Cylinders.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/plot3d/Cylinders.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.plot3d.Cylinders"]){
+dojo._hasResource["dojox.charting.plot3d.Cylinders"]=true;
+dojo.provide("dojox.charting.plot3d.Cylinders");
+dojo.require("dojox.charting.plot3d.Base");
+(function(){
+var _1=function(a,f,o){
+a=typeof a=="string"?a.split(""):a;
+o=o||dojo.global;
+var z=a[0];
+for(var i=1;i<a.length;z=f.call(o,z,a[i++])){
+}
+return z;
+};
+dojo.declare("dojox.charting.plot3d.Cylinders",dojox.charting.plot3d.Base,{constructor:function(_2,_3,_4){
+this.depth="auto";
+this.gap=0;
+this.data=[];
+this.material={type:"plastic",finish:"shiny",color:"lime"};
+this.outline=null;
+if(_4){
+if("depth" in _4){
+this.depth=_4.depth;
+}
+if("gap" in _4){
+this.gap=_4.gap;
+}
+if("material" in _4){
+var m=_4.material;
+if(typeof m=="string"||m instanceof dojo.Color){
+this.material.color=m;
+}else{
+this.material=m;
+}
+}
+if("outline" in _4){
+this.outline=_4.outline;
+}
+}
+},getDepth:function(){
+if(this.depth=="auto"){
+var w=this.width;
+if(this.data&&this.data.length){
+w=w/this.data.length;
+}
+return w-2*this.gap;
+}
+return this.depth;
+},generate:function(_5,_6){
+if(!this.data){
+return this;
+}
+var _7=this.width/this.data.length,_8=0,_9=this.height/_1(this.data,Math.max);
+if(!_6){
+_6=_5.view;
+}
+for(var i=0;i<this.data.length;++i,_8+=_7){
+_6.createCylinder({center:{x:_8+_7/2,y:0,z:0},radius:_7/2-this.gap,height:this.data[i]*_9}).setTransform(dojox.gfx3d.matrix.rotateXg(-90)).setFill(this.material).setStroke(this.outline);
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Renkoo.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Renkoo.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Renkoo.js	(revision 9)
@@ -0,0 +1,39 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Renkoo"]){
+dojo._hasResource["dojox.charting.themes.Renkoo"]=true;
+dojo.provide("dojox.charting.themes.Renkoo");
+dojo.require("dojox.gfx.gradutils");
+dojo.require("dojox.charting.Theme");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=dc.Theme,g=_2.generateGradient,_3={type:"linear",space:"shape",x1:0,y1:0,x2:0,y2:150};
+_1.Renkoo=new dc.Theme({chart:{fill:"#123666",pageStyle:{backgroundColor:"#123666",backgroundImage:"none",color:"#95afdb"}},plotarea:{fill:"#123666"},axis:{stroke:{color:"#95afdb",width:1},tick:{color:"#95afdb",position:"center",font:"normal normal normal 7pt Lucida Grande, Helvetica, Arial, sans-serif",fontColor:"#95afdb"}},series:{stroke:{width:2.5,color:"#123666"},outline:null,font:"normal normal normal 8pt Lucida Grande, Helvetica, Arial, sans-serif",fontColor:"#95afdb"},marker:{stroke:{width:2.5,color:"#ccc"},outline:null,font:"normal normal normal 8pt Lucida Grande, Helvetica, Arial, sans-serif",fontColor:"#95afdb"},seriesThemes:[{fill:g(_3,"#e7e391","#f8f7de")},{fill:g(_3,"#ffb6b6","#ffe8e8")},{fill:g(_3,"#bcda7d","#eef7da")},{fill:g(_3,"#d5d5d5","#f4f4f4")},{fill:g(_3,"#c1e3fd","#e4f3ff")}],markerThemes:[{fill:"#fcfcf3",stroke:{color:"#e7e391"}},{fill:"#fff1f1",stroke:{color:"#ffb6b6"}},{fill:"#fafdf4",stroke:{color:"#bcda7d"}},{fill:"#fbfbfb",stroke:{color:"#d5d5d5"}},{fill:"#f3faff",stroke:{color:"#c1e3fd"}}]});
+_1.Renkoo.next=function(_4,_5,_6){
+if("slice,column,bar".indexOf(_4)==-1){
+var s=this.seriesThemes[this._current%this.seriesThemes.length];
+s.fill.space="plot";
+s.stroke={width:2,color:s.fill.colors[0].color};
+if(_4=="line"||_4=="area"){
+s.stroke.width=4;
+}
+var _7=_2.prototype.next.apply(this,arguments);
+delete s.stroke;
+s.fill.space="shape";
+return _7;
+}
+return _2.prototype.next.apply(this,arguments);
+};
+_1.Renkoo.post=function(_8,_9){
+_8=_2.prototype.post.apply(this,arguments);
+if((_9=="slice"||_9=="circle")&&_8.series.fill&&_8.series.fill.type=="radial"){
+_8.series.fill=dojox.gfx.gradutils.reverse(_8.series.fill);
+}
+return _8;
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/ET/greys.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/ET/greys.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/ET/greys.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.ET.greys"]){
+dojo._hasResource["dojox.charting.themes.ET.greys"]=true;
+dojo.provide("dojox.charting.themes.ET.greys");
+dojo.require("dojox.charting.Theme");
+dojo.deprecated("dojox.charting.themes.ET.greys","1.3");
+(function(){
+var _1=dojox.charting;
+_1.themes.ET.greys=new _1.Theme({antiAlias:false,chart:{stroke:null,fill:"inherit"},plotarea:{stroke:null,fill:"transparent"},axis:{stroke:{width:0},line:{width:0},majorTick:{color:"#666666",width:1,length:5},minorTick:{color:"black",width:0.5,length:2},font:"normal normal normal 8pt Tahoma",fontColor:"#999999"},series:{outline:{width:0,color:"black"},stroke:{width:1,color:"black"},fill:dojo.colorFromHex("#3b444b"),font:"normal normal normal 7pt Tahoma",fontColor:"#717171"},marker:{stroke:{width:1},fill:"#333",font:"normal normal normal 7pt Tahoma",fontColor:"#000"},colors:[dojo.colorFromHex("#8a8c8f"),dojo.colorFromHex("#4b4b4b"),dojo.colorFromHex("#3b444b"),dojo.colorFromHex("#2e2d30"),dojo.colorFromHex("#000000")]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/RoyalPurples.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/RoyalPurples.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/RoyalPurples.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.RoyalPurples"]){
+dojo._hasResource["dojox.charting.themes.RoyalPurples"]=true;
+dojo.provide("dojox.charting.themes.RoyalPurples");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.RoyalPurples=new _1.Theme({colors:["#473980","#685aa7","#7970b3","#231c3f","#7267ae"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Grasslands.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Grasslands.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Grasslands.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Grasslands"]){
+dojo._hasResource["dojox.charting.themes.Grasslands"]=true;
+dojo.provide("dojox.charting.themes.Grasslands");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Grasslands=new _1.Theme({colors:["#70803a","#dde574","#788062","#b1cc5d","#eff2c2"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/gradientGenerator.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/gradientGenerator.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/gradientGenerator.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.gradientGenerator"]){
+dojo._hasResource["dojox.charting.themes.gradientGenerator"]=true;
+dojo.provide("dojox.charting.themes.gradientGenerator");
+dojo.require("dojox.charting.Theme");
+(function(){
+var gg=dojox.charting.themes.gradientGenerator;
+gg.generateFills=function(_1,_2,_3,_4){
+var _5=dojox.charting.Theme;
+return dojo.map(_1,function(c){
+return _5.generateHslGradient(c,_2,_3,_4);
+});
+};
+gg.updateFills=function(_6,_7,_8,_9){
+var _a=dojox.charting.Theme;
+dojo.forEach(_6,function(t){
+if(t.fill&&!t.fill.type){
+t.fill=_a.generateHslGradient(t.fill,_7,_8,_9);
+}
+});
+};
+gg.generateMiniTheme=function(_b,_c,_d,_e,_f){
+var _10=dojox.charting.Theme;
+return dojo.map(_b,function(c){
+c=new dojox.color.Color(c);
+return {fill:_10.generateHslGradient(c,_c,_d,_e),stroke:{color:_10.generateHslColor(c,_f)}};
+});
+};
+gg.generateGradientByIntensity=function(_11,_12){
+_11=new dojo.Color(_11);
+return dojo.map(_12,function(_13){
+var s=_13.i/255;
+return {offset:_13.o,color:new dojo.Color([_11.r*s,_11.g*s,_11.b*s,_11.a])};
+});
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/GreySkies.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/GreySkies.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/GreySkies.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.GreySkies"]){
+dojo._hasResource["dojox.charting.themes.GreySkies"]=true;
+dojo.provide("dojox.charting.themes.GreySkies");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.GreySkies=new _1.Theme(_1.Theme._def);
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Adobebricks.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Adobebricks.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Adobebricks.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Adobebricks"]){
+dojo._hasResource["dojox.charting.themes.Adobebricks"]=true;
+dojo.provide("dojox.charting.themes.Adobebricks");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Adobebricks=new _1.Theme({colors:["#7f2518","#3e170c","#cc3927","#651f0e","#8c271c"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Chris.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Chris.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Chris.js	(revision 9)
@@ -0,0 +1,41 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Chris"]){
+dojo._hasResource["dojox.charting.themes.Chris"]=true;
+dojo.provide("dojox.charting.themes.Chris");
+dojo.require("dojox.gfx.gradutils");
+dojo.require("dojox.charting.Theme");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=dc.Theme,g=_2.generateGradient,_3={type:"linear",space:"shape",x1:0,y1:0,x2:0,y2:100};
+_1.Chris=new dc.Theme({chart:{fill:"#c1c1c1",stroke:{color:"#666"}},plotarea:{fill:"#c1c1c1"},series:{stroke:{width:2,color:"white"},outline:null,fontColor:"#333"},marker:{stroke:{width:2,color:"white"},outline:{width:2,color:"white"},fontColor:"#333"},seriesThemes:[{fill:g(_3,"#01b717","#238c01")},{fill:g(_3,"#d04918","#7c0344")},{fill:g(_3,"#0005ec","#002578")},{fill:g(_3,"#f9e500","#786f00")},{fill:g(_3,"#e27d00","#773e00")},{fill:g(_3,"#00b5b0","#005f5d")},{fill:g(_3,"#ac00cb","#590060")}],markerThemes:[{fill:"#01b717",stroke:{color:"#238c01"}},{fill:"#d04918",stroke:{color:"#7c0344"}},{fill:"#0005ec",stroke:{color:"#002578"}},{fill:"#f9e500",stroke:{color:"#786f00"}},{fill:"#e27d00",stroke:{color:"#773e00"}},{fill:"#00b5b0",stroke:{color:"#005f5d"}},{fill:"#ac00cb",stroke:{color:"#590060"}}]});
+_1.Chris.next=function(_4,_5,_6){
+var _7=_4=="line";
+if(_7||_4=="area"){
+var s=this.seriesThemes[this._current%this.seriesThemes.length];
+s.fill.space="plot";
+if(_7){
+s.stroke={color:s.fill.colors[1].color};
+s.outline={width:2,color:"white"};
+}
+var _8=_2.prototype.next.apply(this,arguments);
+delete s.outline;
+delete s.stroke;
+s.fill.space="shape";
+return _8;
+}
+return _2.prototype.next.apply(this,arguments);
+};
+_1.Chris.post=function(_9,_a){
+_9=_2.prototype.post.apply(this,arguments);
+if((_a=="slice"||_a=="circle")&&_9.series.fill&&_9.series.fill.type=="radial"){
+_9.series.fill=dojox.gfx.gradutils.reverse(_9.series.fill);
+}
+return _9;
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Algae.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Algae.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Algae.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Algae"]){
+dojo._hasResource["dojox.charting.themes.Algae"]=true;
+dojo.provide("dojox.charting.themes.Algae");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Algae=new _1.Theme({colors:["#57808f","#506885","#4f7878","#558f7f","#508567"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/ThreeD.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/ThreeD.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/ThreeD.js	(revision 9)
@@ -0,0 +1,37 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.ThreeD"]){
+dojo._hasResource["dojox.charting.themes.ThreeD"]=true;
+dojo.provide("dojox.charting.themes.ThreeD");
+dojo.require("dojo.colors");
+dojo.require("dojox.charting.Theme");
+dojo.require("dojox.charting.themes.gradientGenerator");
+dojo.require("dojox.charting.themes.PrimaryColors");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=dc.Theme,gi=_1.gradientGenerator.generateGradientByIntensity,_3=["#f00","#0f0","#00f","#ff0","#0ff","#f0f"],_4={type:"linear",space:"shape",x1:0,y1:0,x2:100,y2:0},_5=[{o:0,i:174},{o:0.08,i:231},{o:0.18,i:237},{o:0.3,i:231},{o:0.39,i:221},{o:0.49,i:206},{o:0.58,i:187},{o:0.68,i:165},{o:0.8,i:128},{o:0.9,i:102},{o:1,i:174}],_6=2,_7=100,_8=50,_9=dojo.map(_3,function(c){
+var _a=dojo.delegate(_4),_3=_a.colors=_1.gradientGenerator.generateGradientByIntensity(c,_5),_b=_3[_6].color;
+_b.r+=_7;
+_b.g+=_7;
+_b.b+=_7;
+_b.sanitize();
+return _a;
+});
+_1.ThreeD=_1.PrimaryColors.clone();
+_1.ThreeD.series.shadow={dx:1,dy:1,width:3,color:[0,0,0,0.15]};
+_1.ThreeD.next=function(_c,_d,_e){
+if(_c=="bar"||_c=="column"){
+var _f=this._current%this.seriesThemes.length,s=this.seriesThemes[_f],old=s.fill;
+s.fill=_9[_f];
+var _10=_2.prototype.next.apply(this,arguments);
+s.fill=old;
+return _10;
+}
+return _2.prototype.next.apply(this,arguments);
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/orange.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/orange.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/orange.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.orange"]){
+dojo._hasResource["dojox.charting.themes.PlotKit.orange"]=true;
+dojo.provide("dojox.charting.themes.PlotKit.orange");
+dojo.require("dojox.charting.themes.PlotKit.base");
+(function(){
+var dc=dojox.charting,pk=dc.themes.PlotKit;
+pk.orange=pk.base.clone();
+pk.orange.chart.fill=pk.orange.plotarea.fill="#f5eee6";
+pk.orange.colors=dc.Theme.defineColors({hue:31,saturation:60,low:40,high:88});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/green.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/green.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/green.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.green"]){
+dojo._hasResource["dojox.charting.themes.PlotKit.green"]=true;
+dojo.provide("dojox.charting.themes.PlotKit.green");
+dojo.require("dojox.charting.themes.PlotKit.base");
+(function(){
+var dc=dojox.charting,pk=dc.themes.PlotKit;
+pk.green=pk.base.clone();
+pk.green.chart.fill=pk.green.plotarea.fill="#eff5e6";
+pk.green.colors=dc.Theme.defineColors({hue:82,saturation:60,low:40,high:88});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/README
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/README	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/README	(revision 9)
@@ -0,0 +1,11 @@
+This directory contains a set of themes for the DojoX Charting 
+engine that are based on the visual stylings of the PlotKit
+chart kit, created by Alastair Tse:
+
+http://www.liquidx.net/plotkit/
+
+...whose work we admire.  Consider these themes to not be a 
+ripoff of his fine work, but instead a true homage: his charts
+are beautiful, and we stand in awe.
+
+--trt, 2007-06-08
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/blue.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/blue.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/blue.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.blue"]){
+dojo._hasResource["dojox.charting.themes.PlotKit.blue"]=true;
+dojo.provide("dojox.charting.themes.PlotKit.blue");
+dojo.require("dojox.charting.themes.PlotKit.base");
+(function(){
+var dc=dojox.charting,pk=dc.themes.PlotKit;
+pk.blue=pk.base.clone();
+pk.blue.chart.fill=pk.blue.plotarea.fill="#e7eef6";
+pk.blue.colors=dc.Theme.defineColors({hue:217,saturation:60,low:40,high:88});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/purple.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/purple.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/purple.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.purple"]){
+dojo._hasResource["dojox.charting.themes.PlotKit.purple"]=true;
+dojo.provide("dojox.charting.themes.PlotKit.purple");
+dojo.require("dojox.charting.themes.PlotKit.base");
+(function(){
+var dc=dojox.charting,pk=dc.themes.PlotKit;
+pk.purple=pk.base.clone();
+pk.purple.chart.fill=pk.purple.plotarea.fill="#eee6f5";
+pk.purple.colors=dc.Theme.defineColors({hue:271,saturation:60,low:40,high:88});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/base.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/base.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/base.js	(revision 9)
@@ -0,0 +1,31 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.base"]){
+dojo._hasResource["dojox.charting.themes.PlotKit.base"]=true;
+dojo.provide("dojox.charting.themes.PlotKit.base");
+dojo.require("dojox.charting.Theme");
+(function(){
+var dc=dojox.charting,pk=dc.themes.PlotKit;
+pk.base=new dc.Theme({chart:{stroke:null,fill:"yellow"},plotarea:{stroke:null,fill:"yellow"},axis:{stroke:{color:"#fff",width:1},line:{color:"#fff",width:0.5},majorTick:{color:"#fff",width:0.5,length:6},minorTick:{color:"#fff",width:0.5,length:3},tick:{font:"normal normal normal 7pt Helvetica,Arial,sans-serif",fontColor:"#999"}},series:{stroke:{width:2.5,color:"#fff"},fill:"#666",font:"normal normal normal 7.5pt Helvetica,Arial,sans-serif",fontColor:"#666"},marker:{stroke:{width:2},fill:"#333",font:"normal normal normal 7pt Helvetica,Arial,sans-serif",fontColor:"#666"},colors:["red","green","blue"]});
+pk.base.next=function(_1,_2,_3){
+var _4=dc.Theme.prototype.next.apply(this,arguments);
+if(_1=="line"){
+_4.marker.outline={width:2,color:"#fff"};
+_4.series.stroke.width=3.5;
+_4.marker.stroke.width=2;
+}else{
+if(_1=="candlestick"){
+_4.series.stroke.width=1;
+}else{
+_4.series.stroke.color="#fff";
+}
+}
+return _4;
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/cyan.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/cyan.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/cyan.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.cyan"]){
+dojo._hasResource["dojox.charting.themes.PlotKit.cyan"]=true;
+dojo.provide("dojox.charting.themes.PlotKit.cyan");
+dojo.require("dojox.charting.themes.PlotKit.base");
+(function(){
+var dc=dojox.charting,pk=dc.themes.PlotKit;
+pk.cyan=pk.base.clone();
+pk.cyan.chart.fill=pk.cyan.plotarea.fill="#e6f1f5";
+pk.cyan.colors=dc.Theme.defineColors({hue:194,saturation:60,low:40,high:88});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PlotKit/red.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PlotKit/red.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PlotKit/red.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PlotKit.red"]){
+dojo._hasResource["dojox.charting.themes.PlotKit.red"]=true;
+dojo.provide("dojox.charting.themes.PlotKit.red");
+dojo.require("dojox.charting.themes.PlotKit.base");
+(function(){
+var dc=dojox.charting,pk=dc.themes.PlotKit;
+pk.red=pk.base.clone();
+pk.red.chart.fill=pk.red.plotarea.fill="#f5e6e6";
+pk.red.colors=dc.Theme.defineColors({hue:1,saturation:60,low:40,high:88});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PurpleRain.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PurpleRain.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PurpleRain.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PurpleRain"]){
+dojo._hasResource["dojox.charting.themes.PurpleRain"]=true;
+dojo.provide("dojox.charting.themes.PurpleRain");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.PurpleRain=new _1.Theme({colors:["#4879bc","#ef446f","#3f58a7","#8254a2","#4956a6"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Desert.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Desert.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Desert.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Desert"]){
+dojo._hasResource["dojox.charting.themes.Desert"]=true;
+dojo.provide("dojox.charting.themes.Desert");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Desert=new _1.Theme({colors:["#ffebd5","#806544","#fdc888","#80766b","#cda26e"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/SageToLime.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/SageToLime.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/SageToLime.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.SageToLime"]){
+dojo._hasResource["dojox.charting.themes.SageToLime"]=true;
+dojo.provide("dojox.charting.themes.SageToLime");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.SageToLime=new _1.Theme({colors:["#abdbcb","#435a51","#70998b","#5f8074","#80ccbb","#539e8b","#78a596","#335f54","#8dd1c2","#68c5ad"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/WatersEdge.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/WatersEdge.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/WatersEdge.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.WatersEdge"]){
+dojo._hasResource["dojox.charting.themes.WatersEdge"]=true;
+dojo.provide("dojox.charting.themes.WatersEdge");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.WatersEdge=new _1.Theme({colors:["#437cc0","#6256a5","#4552a3","#43c4f2","#4b66b0"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Electric.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Electric.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Electric.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Electric"]){
+dojo._hasResource["dojox.charting.themes.Electric"]=true;
+dojo.provide("dojox.charting.themes.Electric");
+dojo.require("dojox.gfx.gradutils");
+dojo.require("dojox.charting.Theme");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=dc.Theme,g=_2.generateGradient,_3={type:"linear",space:"shape",x1:0,y1:0,x2:0,y2:75};
+_1.Electric=new dc.Theme({chart:{fill:"#252525",stroke:{color:"#252525"},pageStyle:{backgroundColor:"#252525",backgroundImage:"none",color:"#ccc"}},plotarea:{fill:"#252525"},axis:{stroke:{color:"#aaa",width:1},tick:{color:"#777",position:"center",font:"normal normal normal 7pt Helvetica, Arial, sans-serif",fontColor:"#777"}},series:{stroke:{width:2,color:"#ccc"},outline:null,font:"normal normal normal 8pt Helvetica, Arial, sans-serif",fontColor:"#ccc"},marker:{stroke:{width:3,color:"#ccc"},outline:null,font:"normal normal normal 8pt Helvetica, Arial, sans-serif",fontColor:"#ccc"},seriesThemes:[{fill:g(_3,"#004cbf","#06f")},{fill:g(_3,"#bf004c","#f06")},{fill:g(_3,"#43bf00","#6f0")},{fill:g(_3,"#7300bf","#90f")},{fill:g(_3,"#bf7300","#f90")},{fill:g(_3,"#00bf73","#0f9")}],markerThemes:[{fill:"#06f",stroke:{color:"#06f"}},{fill:"#f06",stroke:{color:"#f06"}},{fill:"#6f0",stroke:{color:"#6f0"}},{fill:"#90f",stroke:{color:"#90f"}},{fill:"#f90",stroke:{color:"#f90"}},{fill:"#0f9",stroke:{color:"#0f9"}}]});
+_1.Electric.next=function(_4,_5,_6){
+var _7=_4=="line";
+if(_7||_4=="area"){
+var s=this.seriesThemes[this._current%this.seriesThemes.length];
+s.fill.space="plot";
+if(_7){
+s.stroke={width:2.5,color:s.fill.colors[1].color};
+}
+if(_4=="area"){
+s.fill.y2=90;
+}
+var _8=_2.prototype.next.apply(this,arguments);
+delete s.stroke;
+s.fill.y2=75;
+s.fill.space="shape";
+return _8;
+}
+return _2.prototype.next.apply(this,arguments);
+};
+_1.Electric.post=function(_9,_a){
+_9=_2.prototype.post.apply(this,arguments);
+if((_a=="slice"||_a=="circle")&&_9.series.fill&&_9.series.fill.type=="radial"){
+_9.series.fill=dojox.gfx.gradutils.reverse(_9.series.fill);
+}
+return _9;
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Shrooms.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Shrooms.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Shrooms.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Shrooms"]){
+dojo._hasResource["dojox.charting.themes.Shrooms"]=true;
+dojo.provide("dojox.charting.themes.Shrooms");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Shrooms=new _1.Theme({colors:["#bf1313","#69bf13","#13bfbf","#6913bf","#bf6913","#13bf13","#1369bf","#bf13bf","#bfbf13","#13bf69","#1313bf","#bf1369"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/MiamiNice.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/MiamiNice.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/MiamiNice.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.MiamiNice"]){
+dojo._hasResource["dojox.charting.themes.MiamiNice"]=true;
+dojo.provide("dojox.charting.themes.MiamiNice");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.MiamiNice=new _1.Theme({colors:["#7f9599","#45b8cc","#8ecfb0","#f8acac","#cc4482"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Grasshopper.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Grasshopper.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Grasshopper.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Grasshopper"]){
+dojo._hasResource["dojox.charting.themes.Grasshopper"]=true;
+dojo.provide("dojox.charting.themes.Grasshopper");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Grasshopper=new _1.Theme({colors:["#208040","#40b657","#78c25e","#14401f","#64bd5f"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Charged.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Charged.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Charged.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Charged"]){
+dojo._hasResource["dojox.charting.themes.Charged"]=true;
+dojo.provide("dojox.charting.themes.Charged");
+dojo.require("dojox.gfx.gradutils");
+dojo.require("dojox.charting.Theme");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=dc.Theme,g=_2.generateGradient,_3={type:"linear",space:"shape",x1:0,y1:0,x2:0,y2:75};
+_1.Charged=new dc.Theme({chart:{fill:"#ededdf",pageStyle:{backgroundColor:"#ededdf",backgroundImage:"none",color:"inherit"}},plotarea:{fill:"transparent"},axis:{stroke:{color:"#808078",width:1},tick:{color:"#b3b3a8",position:"center",font:"normal normal normal 7pt Helvetica, Arial, sans-serif",fontColor:"#808078"}},series:{stroke:{width:2,color:"#595954"},outline:null,font:"normal normal normal 8pt Helvetica, Arial, sans-serif",fontColor:"#808078"},marker:{stroke:{width:3,color:"#595954"},outline:null,font:"normal normal normal 8pt Helvetica, Arial, sans-serif",fontColor:"#808078"},seriesThemes:[{fill:g(_3,"#004cbf","#06f")},{fill:g(_3,"#bf004c","#f06")},{fill:g(_3,"#43bf00","#6f0")},{fill:g(_3,"#7300bf","#90f")},{fill:g(_3,"#bf7300","#f90")},{fill:g(_3,"#00bf73","#0f9")}],markerThemes:[{fill:"#06f",stroke:{color:"#06f"}},{fill:"#f06",stroke:{color:"#f06"}},{fill:"#6f0",stroke:{color:"#6f0"}},{fill:"#90f",stroke:{color:"#90f"}},{fill:"#f90",stroke:{color:"#f90"}},{fill:"#0f9",stroke:{color:"#0f9"}}]});
+_1.Charged.next=function(_4,_5,_6){
+var _7=_4=="line";
+if(_7||_4=="area"){
+var s=this.seriesThemes[this._current%this.seriesThemes.length];
+s.fill.space="plot";
+if(_7){
+s.stroke={width:2.5,color:s.fill.colors[1].color};
+}
+if(_4=="area"){
+s.fill.y2=90;
+}
+var _8=_2.prototype.next.apply(this,arguments);
+delete s.stroke;
+s.fill.y2=75;
+s.fill.space="shape";
+return _8;
+}
+return _2.prototype.next.apply(this,arguments);
+};
+_1.Charged.post=function(_9,_a){
+_9=_2.prototype.post.apply(this,arguments);
+if((_a=="slice"||_a=="circle")&&_9.series.fill&&_9.series.fill.type=="radial"){
+_9.series.fill=dojox.gfx.gradutils.reverse(_9.series.fill);
+}
+return _9;
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Wetland.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Wetland.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Wetland.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Wetland"]){
+dojo._hasResource["dojox.charting.themes.Wetland"]=true;
+dojo.provide("dojox.charting.themes.Wetland");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Wetland=new _1.Theme({colors:["#bfbc64","#737130","#73373b","#7dafca","#8d3c42"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Tom.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Tom.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Tom.js	(revision 9)
@@ -0,0 +1,40 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Tom"]){
+dojo._hasResource["dojox.charting.themes.Tom"]=true;
+dojo.provide("dojox.charting.themes.Tom");
+dojo.require("dojox.gfx.gradutils");
+dojo.require("dojox.charting.Theme");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=dc.Theme,g=_2.generateGradient,_3={type:"linear",space:"shape",x1:0,y1:0,x2:0,y2:100};
+_1.Tom=new dc.Theme({chart:{fill:"#181818",stroke:{color:"#181818"},pageStyle:{backgroundColor:"#181818",backgroundImage:"none",color:"#eaf2cb"}},plotarea:{fill:"#181818"},axis:{stroke:{color:"#a0a68b",width:1},tick:{color:"#888c76",position:"center",font:"normal normal normal 7pt Helvetica, Arial, sans-serif",fontColor:"#888c76"}},series:{stroke:{width:2.5,color:"#eaf2cb"},outline:null,font:"normal normal normal 8pt Helvetica, Arial, sans-serif",fontColor:"#eaf2cb"},marker:{stroke:{width:1.25,color:"#eaf2cb"},outline:{width:1.25,color:"#eaf2cb"},font:"normal normal normal 8pt Helvetica, Arial, sans-serif",fontColor:"#eaf2cb"},seriesThemes:[{fill:g(_3,"#bf9e0a","#ecc20c")},{fill:g(_3,"#73b086","#95e5af")},{fill:g(_3,"#c7212d","#ed2835")},{fill:g(_3,"#87ab41","#b6e557")},{fill:g(_3,"#b86c25","#d37d2a")}],markerThemes:[{fill:"#bf9e0a",stroke:{color:"#ecc20c"}},{fill:"#73b086",stroke:{color:"#95e5af"}},{fill:"#c7212d",stroke:{color:"#ed2835"}},{fill:"#87ab41",stroke:{color:"#b6e557"}},{fill:"#b86c25",stroke:{color:"#d37d2a"}}]});
+_1.Tom.next=function(_4,_5,_6){
+var _7=_4=="line";
+if(_7||_4=="area"){
+var s=this.seriesThemes[this._current%this.seriesThemes.length];
+s.fill.space="plot";
+if(_7){
+s.stroke={width:4,color:s.fill.colors[0].color};
+}
+var _8=_2.prototype.next.apply(this,arguments);
+delete s.outline;
+delete s.stroke;
+s.fill.space="shape";
+return _8;
+}
+return _2.prototype.next.apply(this,arguments);
+};
+_1.Tom.post=function(_9,_a){
+_9=_2.prototype.post.apply(this,arguments);
+if((_a=="slice"||_a=="circle")&&_9.series.fill&&_9.series.fill.type=="radial"){
+_9.series.fill=dojox.gfx.gradutils.reverse(_9.series.fill);
+}
+return _9;
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Minty.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Minty.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Minty.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Minty"]){
+dojo._hasResource["dojox.charting.themes.Minty"]=true;
+dojo.provide("dojox.charting.themes.Minty");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Minty=new _1.Theme({colors:["#80ccbb","#539e8b","#335f54","#8dd1c2","#68c5ad"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Bahamation.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Bahamation.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Bahamation.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Bahamation"]){
+dojo._hasResource["dojox.charting.themes.Bahamation"]=true;
+dojo.provide("dojox.charting.themes.Bahamation");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Bahamation=new _1.Theme({colors:["#3f9998","#3fc0c3","#70c058","#ef446f","#c663a6"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/PrimaryColors.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/PrimaryColors.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/PrimaryColors.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.PrimaryColors"]){
+dojo._hasResource["dojox.charting.themes.PrimaryColors"]=true;
+dojo.provide("dojox.charting.themes.PrimaryColors");
+dojo.require("dojox.charting.Theme");
+dojo.require("dojox.charting.themes.gradientGenerator");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=["#f00","#0f0","#00f","#ff0","#0ff","#f0f"],_3={type:"linear",space:"plot",x1:0,y1:0,x2:0,y2:100};
+_1.PrimaryColors=new dc.Theme({seriesThemes:_1.gradientGenerator.generateMiniTheme(_2,_3,90,40,25)});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Julie.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Julie.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Julie.js	(revision 9)
@@ -0,0 +1,34 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Julie"]){
+dojo._hasResource["dojox.charting.themes.Julie"]=true;
+dojo.provide("dojox.charting.themes.Julie");
+dojo.require("dojox.gfx.gradutils");
+dojo.require("dojox.charting.Theme");
+(function(){
+var dc=dojox.charting,_1=dc.themes,_2=dc.Theme,g=_2.generateGradient,_3={type:"linear",space:"shape",x1:0,y1:0,x2:0,y2:100};
+_1.Julie=new dc.Theme({seriesThemes:[{fill:g(_3,"#59a0bd","#497c91"),stroke:{color:"#22627d"}},{fill:g(_3,"#8d88c7","#6c6d8e"),stroke:{color:"#8a84c5"}},{fill:g(_3,"#85a54a","#768b4e"),stroke:{color:"#5b6d1f"}},{fill:g(_3,"#e8e667","#c6c361"),stroke:{color:"#918e38"}},{fill:g(_3,"#e9c756","#c7a223"),stroke:{color:"#947b30"}},{fill:g(_3,"#a05a5a","#815454"),stroke:{color:"#572828"}},{fill:g(_3,"#b17044","#72543e"),stroke:{color:"#74482e"}},{fill:g(_3,"#a5a5a5","#727272"),stroke:{color:"#535353"}},{fill:g(_3,"#9dc7d9","#59a0bd"),stroke:{color:"#22627d"}},{fill:g(_3,"#b7b3da","#8681b3"),stroke:{color:"#8a84c5"}},{fill:g(_3,"#a8c179","#85a54a"),stroke:{color:"#5b6d1f"}},{fill:g(_3,"#eeea99","#d6d456"),stroke:{color:"#918e38"}},{fill:g(_3,"#ebcf81","#e9c756"),stroke:{color:"#947b30"}},{fill:g(_3,"#c99999","#a05a5a"),stroke:{color:"#572828"}},{fill:g(_3,"#c28b69","#7d5437"),stroke:{color:"#74482e"}},{fill:g(_3,"#bebebe","#8c8c8c"),stroke:{color:"#535353"}},{fill:g(_3,"#c7e0e9","#92baca"),stroke:{color:"#22627d"}},{fill:g(_3,"#c9c6e4","#ada9d6"),stroke:{color:"#8a84c5"}},{fill:g(_3,"#c0d0a0","#98ab74"),stroke:{color:"#5b6d1f"}},{fill:g(_3,"#f0eebb","#dcd87c"),stroke:{color:"#918e38"}},{fill:g(_3,"#efdeb0","#ebcf81"),stroke:{color:"#947b30"}},{fill:g(_3,"#ddc0c0","#c99999"),stroke:{color:"#572828"}},{fill:g(_3,"#cfb09b","#c28b69"),stroke:{color:"#74482e"}},{fill:g(_3,"#d8d8d8","#bebebe"),stroke:{color:"#535353"}},{fill:g(_3,"#ddeff5","#a5c4cd"),stroke:{color:"#22627d"}},{fill:g(_3,"#dedcf0","#b3afd3"),stroke:{color:"#8a84c5"}},{fill:g(_3,"#dfe9ca","#c0d0a0"),stroke:{color:"#5b6d1f"}},{fill:g(_3,"#f8f7db","#e5e28f"),stroke:{color:"#918e38"}},{fill:g(_3,"#f7f0d8","#cfbd88"),stroke:{color:"#947b30"}},{fill:g(_3,"#eedede","#caafaf"),stroke:{color:"#572828"}},{fill:g(_3,"#e3cdbf","#cfb09b"),stroke:{color:"#74482e"}},{fill:g(_3,"#efefef","#cacaca"),stroke:{color:"#535353"}}]});
+_1.Julie.next=function(_4,_5,_6){
+if(_4=="line"||_4=="area"){
+var s=this.seriesThemes[this._current%this.seriesThemes.length];
+s.fill.space="plot";
+var _7=_2.prototype.next.apply(this,arguments);
+s.fill.space="shape";
+return _7;
+}
+return _2.prototype.next.apply(this,arguments);
+};
+_1.Julie.post=function(_8,_9){
+_8=_2.prototype.post.apply(this,arguments);
+if(_9=="slice"&&_8.series.fill&&_8.series.fill.type=="radial"){
+_8.series.fill=dojox.gfx.gradutils.reverse(_8.series.fill);
+}
+return _8;
+};
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Midwest.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Midwest.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Midwest.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Midwest"]){
+dojo._hasResource["dojox.charting.themes.Midwest"]=true;
+dojo.provide("dojox.charting.themes.Midwest");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Midwest=new _1.Theme({colors:["#927b51","#a89166","#80c31c","#bcdd5a","#aebc21"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Harmony.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Harmony.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Harmony.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Harmony"]){
+dojo._hasResource["dojox.charting.themes.Harmony"]=true;
+dojo.provide("dojox.charting.themes.Harmony");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Harmony=new _1.Theme({colors:["#497c91","#59a0bd","#9dc7d9","#c7e0e9","#7b78a4","#8d88c7","#ada9d6","#c9c6e4","#768b4e","#677e13","#a8c179","#c0d0a0","#b7b35c","#e8e667","#eeea99","#f0eebb","#b39c53","#e9c756","#ebcf81","#efdeb0","#956649","#b17044","#c28b69","#cfb09b","#815454","#a05a5a","#c99999","#ddc0c0","#868686","#a5a5a5","#bebebe","#d8d8d8"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Dollar.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Dollar.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Dollar.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Dollar"]){
+dojo._hasResource["dojox.charting.themes.Dollar"]=true;
+dojo.provide("dojox.charting.themes.Dollar");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Dollar=new _1.Theme({colors:["#A4CE67","#739363","#6B824A","#343434","#636563"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Ireland.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Ireland.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Ireland.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Ireland"]){
+dojo._hasResource["dojox.charting.themes.Ireland"]=true;
+dojo.provide("dojox.charting.themes.Ireland");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Ireland=new _1.Theme({colors:["#abdbcb","#435a51","#70998b","#78d596","#5f8074"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/BlueDusk.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/BlueDusk.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/BlueDusk.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.BlueDusk"]){
+dojo._hasResource["dojox.charting.themes.BlueDusk"]=true;
+dojo.provide("dojox.charting.themes.BlueDusk");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.BlueDusk=new _1.Theme({colors:["#292e76","#3e56a6","#10143f","#33449c","#798dcd"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/README
===================================================================
--- trunk/web/dojo/dojox/charting/themes/README	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/README	(revision 9)
@@ -0,0 +1,5 @@
+Theme authors:
+
+GreySkies, Shrooms, PlotKit (all): Tom Trenka (ttrenka AT gmail.com)
+ET (all): Alex Russell (alex AT dojotoolkit.org)
+Ireland, SageToLime, Minty: Damon Dimmick (SitePen, Inc.)
Index: trunk/web/dojo/dojox/charting/themes/IndigoNation.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/IndigoNation.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/IndigoNation.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.IndigoNation"]){
+dojo._hasResource["dojox.charting.themes.IndigoNation"]=true;
+dojo.provide("dojox.charting.themes.IndigoNation");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.IndigoNation=new _1.Theme({colors:["#93a4d0","#3b4152","#687291","#9faed9","#8290b8"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/CubanShirts.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/CubanShirts.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/CubanShirts.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.CubanShirts"]){
+dojo._hasResource["dojox.charting.themes.CubanShirts"]=true;
+dojo.provide("dojox.charting.themes.CubanShirts");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.CubanShirts=new _1.Theme({colors:["#d42d2a","#004f80","#989736","#2085c7","#7f7f33"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Distinctive.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Distinctive.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Distinctive.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Distinctive"]){
+dojo._hasResource["dojox.charting.themes.Distinctive"]=true;
+dojo.provide("dojox.charting.themes.Distinctive");
+dojo.require("dojox.charting.Theme");
+(function(){
+var _1=dojox.charting;
+_1.themes.Distinctive=new _1.Theme({colors:["#497c91","#ada9d6","#768b4e","#eeea99","#b39c53","#c28b69","#815454","#bebebe","#59a0bd","#c9c6e4","#677e13","#f0eebb","#e9c756","#cfb09b","#a05a5a","#d8d8d8","#9dc7d9","#7b78a4","#a8c179","#b7b35c","#ebcf81","#956649","#c99999","#868686","#c7e0e9","#8d88c7","#c0d0a0","#e8e667","#efdeb0","#b17044","#ddc0c0","#a5a5a5"]});
+})();
+}
Index: trunk/web/dojo/dojox/charting/themes/Tufte.js
===================================================================
--- trunk/web/dojo/dojox/charting/themes/Tufte.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/themes/Tufte.js	(revision 9)
@@ -0,0 +1,13 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.themes.Tufte"]){
+dojo._hasResource["dojox.charting.themes.Tufte"]=true;
+dojo.provide("dojox.charting.themes.Tufte");
+dojo.require("dojox.charting.Theme");
+dojox.charting.themes.Tufte=new dojox.charting.Theme({chart:{stroke:null,fill:"inherit"},plotarea:{stroke:null,fill:"transparent"},axis:{stroke:{width:1,color:"#ccc"},majorTick:{color:"black",width:1,length:5},minorTick:{color:"#666",width:1,length:2},font:"normal normal normal 8pt Tahoma",fontColor:"#999"},series:{outline:null,stroke:{width:1,color:"black"},fill:new dojo.Color([59,68,75,0.85]),font:"normal normal normal 7pt Tahoma",fontColor:"#717171"},marker:{stroke:{width:1,color:"black"},fill:"#333",font:"normal normal normal 7pt Tahoma",fontColor:"black"},colors:[dojo.colorFromHex("#8a8c8f"),dojo.colorFromHex("#4b4b4b"),dojo.colorFromHex("#3b444b"),dojo.colorFromHex("#2e2d30"),dojo.colorFromHex("#000000")]});
+}
Index: trunk/web/dojo/dojox/charting/DataChart.js
===================================================================
--- trunk/web/dojo/dojox/charting/DataChart.js	(revision 0)
+++ trunk/web/dojo/dojox/charting/DataChart.js	(revision 9)
@@ -0,0 +1,228 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.charting.DataChart"]){
+dojo._hasResource["dojox.charting.DataChart"]=true;
+dojo.provide("dojox.charting.DataChart");
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.themes.PlotKit.blue");
+dojo.experimental("dojox.charting.DataChart");
+(function(){
+var _1={vertical:true,min:0,max:10,majorTickStep:5,minorTickStep:1,natural:false,stroke:"black",majorTick:{stroke:"black",length:8},minorTick:{stroke:"gray",length:2},majorLabels:true};
+var _2={natural:true,majorLabels:true,includeZero:false,majorTickStep:1,majorTick:{stroke:"black",length:8},fixUpper:"major",stroke:"black",htmlLabels:true,from:1};
+var _3={markers:true,tension:2,gap:2};
+dojo.declare("dojox.charting.DataChart",[dojox.charting.Chart2D],{scroll:true,comparative:false,query:"*",queryOptions:"",fieldName:"value",chartTheme:dojox.charting.themes.PlotKit.blue,displayRange:0,stretchToFit:true,minWidth:200,minHeight:100,showing:true,label:"name",constructor:function(_4,_5){
+this.domNode=dojo.byId(_4);
+dojo.mixin(this,_5);
+this.xaxis=dojo.mixin(dojo.mixin({},_2),_5.xaxis);
+if(this.xaxis.labelFunc=="seriesLabels"){
+this.xaxis.labelFunc=dojo.hitch(this,"seriesLabels");
+}
+this.yaxis=dojo.mixin(dojo.mixin({},_1),_5.yaxis);
+if(this.yaxis.labelFunc=="seriesLabels"){
+this.yaxis.labelFunc=dojo.hitch(this,"seriesLabels");
+}
+this._events=[];
+this.convertLabels(this.yaxis);
+this.convertLabels(this.xaxis);
+this.onSetItems={};
+this.onSetInterval=0;
+this.dataLength=0;
+this.seriesData={};
+this.seriesDataBk={};
+this.firstRun=true;
+this.dataOffset=0;
+this.chartTheme.plotarea.stroke={color:"gray",width:3};
+this.setTheme(this.chartTheme);
+if(this.displayRange){
+this.stretchToFit=false;
+}
+if(!this.stretchToFit){
+this.xaxis.to=this.displayRange;
+}
+this.addAxis("x",this.xaxis);
+this.addAxis("y",this.yaxis);
+_3.type=_5.type||"Markers";
+this.addPlot("default",dojo.mixin(_3,_5.chartPlot));
+this.addPlot("grid",dojo.mixin(_5.grid||{},{type:"Grid",hMinorLines:true}));
+if(this.showing){
+this.render();
+}
+if(_5.store){
+this.setStore(_5.store,_5.query,_5.fieldName,_5.queryOptions);
+}
+},destroy:function(){
+dojo.forEach(this._events,dojo.disconnect);
+this.inherited(arguments);
+},setStore:function(_6,_7,_8,_9){
+this.firstRun=true;
+this.store=_6||this.store;
+this.query=_7||this.query;
+this.fieldName=_8||this.fieldName;
+this.label=this.store.getLabelAttributes();
+this.queryOptions=_9||_9;
+dojo.forEach(this._events,dojo.disconnect);
+this._events=[dojo.connect(this.store,"onSet",this,"onSet"),dojo.connect(this.store,"onError",this,"onError")];
+this.fetch();
+},show:function(){
+if(!this.showing){
+dojo.style(this.domNode,"display","");
+this.showing=true;
+this.render();
+}
+},hide:function(){
+if(this.showing){
+dojo.style(this.domNode,"display","none");
+this.showing=false;
+}
+},onSet:function(_a){
+var nm=this.getProperty(_a,this.label);
+if(nm in this.runs||this.comparative){
+clearTimeout(this.onSetInterval);
+if(!this.onSetItems[nm]){
+this.onSetItems[nm]=_a;
+}
+this.onSetInterval=setTimeout(dojo.hitch(this,function(){
+clearTimeout(this.onSetInterval);
+var _b=[];
+for(var nm in this.onSetItems){
+_b.push(this.onSetItems[nm]);
+}
+this.onData(_b);
+this.onSetItems={};
+}),200);
+}
+},onError:function(_c){
+console.error("DataChart Error:",_c);
+},onDataReceived:function(_d){
+},getProperty:function(_e,_f){
+if(_f==this.label){
+return this.store.getLabel(_e);
+}
+if(_f=="id"){
+return this.store.getIdentity(_e);
+}
+var _10=this.store.getValues(_e,_f);
+if(_10.length<2){
+_10=this.store.getValue(_e,_f);
+}
+return _10;
+},onData:function(_11){
+if(!_11||!_11.length){
+return;
+}
+if(this.items&&this.items.length!=_11.length){
+dojo.forEach(_11,function(m){
+var id=this.getProperty(m,"id");
+dojo.forEach(this.items,function(m2,i){
+if(this.getProperty(m2,"id")==id){
+this.items[i]=m2;
+}
+},this);
+},this);
+_11=this.items;
+}
+if(this.stretchToFit){
+this.displayRange=_11.length;
+}
+this.onDataReceived(_11);
+this.items=_11;
+if(this.comparative){
+var nm="default";
+this.seriesData[nm]=[];
+this.seriesDataBk[nm]=[];
+dojo.forEach(_11,function(m,i){
+var _12=this.getProperty(m,this.fieldName);
+this.seriesData[nm].push(_12);
+},this);
+}else{
+dojo.forEach(_11,function(m,i){
+var nm=this.store.getLabel(m);
+if(!this.seriesData[nm]){
+this.seriesData[nm]=[];
+this.seriesDataBk[nm]=[];
+}
+var _13=this.getProperty(m,this.fieldName);
+if(dojo.isArray(_13)){
+this.seriesData[nm]=_13;
+}else{
+if(!this.scroll){
+var ar=dojo.map(new Array(i+1),function(){
+return 0;
+});
+ar.push(Number(_13));
+this.seriesData[nm]=ar;
+}else{
+if(this.seriesDataBk[nm].length>this.seriesData[nm].length){
+this.seriesData[nm]=this.seriesDataBk[nm];
+}
+this.seriesData[nm].push(Number(_13));
+}
+this.seriesDataBk[nm].push(Number(_13));
+}
+},this);
+}
+var _14;
+if(this.firstRun){
+this.firstRun=false;
+for(nm in this.seriesData){
+this.addSeries(nm,this.seriesData[nm]);
+_14=this.seriesData[nm];
+}
+}else{
+for(nm in this.seriesData){
+_14=this.seriesData[nm];
+if(this.scroll&&_14.length>this.displayRange){
+this.dataOffset=_14.length-this.displayRange-1;
+_14=_14.slice(_14.length-this.displayRange,_14.length);
+}
+this.updateSeries(nm,_14);
+}
+}
+this.dataLength=_14.length;
+if(this.showing){
+this.render();
+}
+},fetch:function(){
+if(!this.store){
+return;
+}
+this.store.fetch({query:this.query,queryOptions:this.queryOptions,start:this.start,count:this.count,sort:this.sort,onComplete:dojo.hitch(this,function(_15){
+setTimeout(dojo.hitch(this,function(){
+this.onData(_15);
+}),0);
+}),onError:dojo.hitch(this,"onError")});
+},convertLabels:function(_16){
+if(!_16.labels||dojo.isObject(_16.labels[0])){
+return null;
+}
+_16.labels=dojo.map(_16.labels,function(ele,i){
+return {value:i,text:ele};
+});
+return null;
+},seriesLabels:function(val){
+val--;
+if(this.series.length<1||(!this.comparative&&val>this.series.length)){
+return "-";
+}
+if(this.comparative){
+return this.store.getLabel(this.items[val]);
+}else{
+for(var i=0;i<this.series.length;i++){
+if(this.series[i].data[val]>0){
+return this.series[i].name;
+}
+}
+}
+return "-";
+},resizeChart:function(dim){
+var w=Math.max(dim.w,this.minWidth);
+var h=Math.max(dim.h,this.minHeight);
+this.resize(w,h);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/jsonPath.js
===================================================================
--- trunk/web/dojo/dojox/jsonPath.js	(revision 0)
+++ trunk/web/dojo/dojox/jsonPath.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.jsonPath"]){
+dojo._hasResource["dojox.jsonPath"]=true;
+dojo.provide("dojox.jsonPath");
+dojo.require("dojox.jsonPath.query");
+}
Index: trunk/web/dojo/dojox/math.js
===================================================================
--- trunk/web/dojo/dojox/math.js	(revision 0)
+++ trunk/web/dojo/dojox/math.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math"]){
+dojo._hasResource["dojox.math"]=true;
+dojo.provide("dojox.math");
+dojo.require("dojox.math._base");
+}
Index: trunk/web/dojo/dojox/drawing.js
===================================================================
--- trunk/web/dojo/dojox/drawing.js	(revision 0)
+++ trunk/web/dojo/dojox/drawing.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.drawing"]){
+dojo._hasResource["dojox.drawing"]=true;
+dojo.provide("dojox.drawing");
+dojo.require("dojox.drawing._base");
+}
Index: trunk/web/dojo/dojox/mobile/parser.js
===================================================================
--- trunk/web/dojo/dojox/mobile/parser.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/parser.js	(revision 9)
@@ -0,0 +1,84 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.parser"]){
+dojo._hasResource["dojox.mobile.parser"]=true;
+dojo.provide("dojox.mobile.parser");
+dojo.provide("dojo.parser");
+dojox.mobile.parser=new function(){
+this.instantiate=function(_1,_2){
+var ws=[];
+if(_1){
+var i,_3;
+_3=_1.length;
+for(i=0;i<_3;i++){
+var _4=_1[i];
+var _5=dojo.getObject(dojo.attr(_4,"dojoType"));
+var _6=_5.prototype;
+var _7={};
+if(_2){
+for(var _8 in _2){
+_7[_8]=_2[_8];
+}
+}
+for(var _9 in _6){
+var _a=dojo.attr(_4,_9);
+if(!_a){
+continue;
+}
+if(typeof _6[_9]=="string"){
+_7[_9]=_a;
+}else{
+if(typeof _6[_9]=="number"){
+_7[_9]=_a-0;
+}else{
+if(typeof _6[_9]=="boolean"){
+_7[_9]=(_a!="false");
+}else{
+if(typeof _6[_9]=="object"){
+_7[_9]=eval("("+_a+")");
+}
+}
+}
+}
+}
+_7["class"]=_4.className;
+_7["style"]=_4.style&&_4.style.cssText;
+ws.push(new _5(_7,_4));
+}
+_3=ws.length;
+for(i=0;i<_3;i++){
+var w=ws[i];
+w.startup&&!w._started&&(!w.getParent||!w.getParent())&&w.startup();
+}
+}
+return ws;
+};
+this.parse=function(_b,_c){
+if(!_b){
+_b=dojo.body();
+}else{
+if(!_c&&_b.rootNode){
+_b=_b.rootNode;
+}
+}
+var _d=_b.getElementsByTagName("*");
+var _e=[];
+for(var i=0,_f=_d.length;i<_f;i++){
+if(_d[i].getAttribute("dojoType")){
+_e.push(_d[i]);
+}
+}
+return this.instantiate(_e,_c);
+};
+};
+dojo._loaders.unshift(function(){
+if(dojo.config.parseOnLoad){
+dojox.mobile.parser.parse();
+}
+});
+}
Index: trunk/web/dojo/dojox/mobile/app.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobileApp"]){
+dojo._hasResource["dojox.mobileApp"]=true;
+dojo.provide("dojox.mobileApp");
+dojo.require("dojox.mobile.app._base");
+}
Index: trunk/web/dojo/dojox/mobile/README
===================================================================
--- trunk/web/dojo/dojox/mobile/README	(revision 0)
+++ trunk/web/dojo/dojox/mobile/README	(revision 9)
@@ -0,0 +1,55 @@
+-------------------------------------------------------------------------------
+Project Name:  dojox.mobile
+-------------------------------------------------------------------------------
+Version 0.01
+Release date: 03/23/2010
+-------------------------------------------------------------------------------
+Project state:
+        experimental
+-------------------------------------------------------------------------------
+[ NO ]	l18n support?
+[ NO ]	a11y support?
+-------------------------------------------------------------------------------
+Credits:
+       Jared Jurkiewicz (jared.jurkiewicz@gmail.com)
+       Yoshiroh Kamiyama (Contributor to Jared of base code).
+
+-------------------------------------------------------------------------------
+Project description
+
+This project tries to solve an area lacking in dojo, namely better 
+support for mobile devices.  This project provides through CSS3 and
+custom styles, interfaces that display and work well on mobile devices 
+such as the Android and iPhone Smart Phones.
+
+The code is deliberately kept as lightweight as possible, using CSS3 animations
+and the like to perform the effects.  There is a compat.js, which will simulate
+most of the effects using dojo.animateProperty and dojox.gfx where possible on
+browsers such as FireFox and IE.  It will not load by default, it has to be
+required in separately.
+-------------------------------------------------------------------------------
+Dependencies:
+        dojo base
+        dijit/_Widget.js
+-------------------------------------------------------------------------------
+Documentation
+        Documentatation will reside at:
+        http://docs.dojocampus.org/dojox/mobile
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojox/trunk/mobile/*
+http://svn.dojotoolkit.org/src/dojox/trunk/mobile.js
+
+Install into the following directory structure:
+/dojox/mobile.js
+/dojox/mobile/*
+
+...which should be at the same level as your Dojo checkout.
+
+then dojo.require("dojox.mobile") in your application to load it.
+
+-------------------------------------------------------------------------------
+
Index: trunk/web/dojo/dojox/mobile/compat.js
===================================================================
--- trunk/web/dojo/dojox/mobile/compat.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/compat.js	(revision 9)
@@ -0,0 +1,251 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.compat"]){
+dojo._hasResource["dojox.mobile.compat"]=true;
+dojo.provide("dojox.mobile.compat");
+dojo.require("dojo._base.fx");
+dojo.require("dojo.fx");
+dojo.require("dojox.fx.flip");
+dojo.extend(dojox.mobile.View,{_doTransition:function(_1,_2,_3,_4){
+var _5;
+this.wakeUp(_2);
+if(!_3||_3=="none"){
+_2.style.display="";
+_1.style.display="none";
+_2.style.left="0px";
+this.invokeCallback();
+}else{
+if(_3=="slide"){
+var w=_1.offsetWidth;
+var s1=dojo.fx.slideTo({node:_1,duration:400,left:-w*_4,top:_1.offsetTop});
+var s2=dojo.fx.slideTo({node:_2,duration:400,left:0});
+_2.style.position="absolute";
+_2.style.left=w*_4+"px";
+_2.style.display="";
+_5=dojo.fx.combine([s1,s2]);
+dojo.connect(_5,"onEnd",this,function(){
+_1.style.display="none";
+_2.style.position="relative";
+this.invokeCallback();
+});
+_5.play();
+}else{
+if(_3=="flip"){
+_5=dojox.fx.flip({node:_1,dir:"right",depth:0.5,duration:400});
+_2.style.position="absolute";
+_2.style.left="0px";
+dojo.connect(_5,"onEnd",this,function(){
+_1.style.display="none";
+_2.style.position="relative";
+_2.style.display="";
+this.invokeCallback();
+});
+_5.play();
+}else{
+if(_3=="fade"){
+_5=dojo.fx.chain([dojo.fadeOut({node:_1,duration:600}),dojo.fadeIn({node:_2,duration:600})]);
+_2.style.position="absolute";
+_2.style.left="0px";
+_2.style.display="";
+dojo.style(_2,"opacity",0);
+dojo.connect(_5,"onEnd",this,function(){
+_1.style.display="none";
+_2.style.position="relative";
+dojo.style(_1,"opacity",1);
+this.invokeCallback();
+});
+_5.play();
+}
+}
+}
+}
+},wakeUp:function(_6){
+if(dojo.isIE&&!_6._wokeup){
+_6._wokeup=true;
+var _7=_6.style.display;
+_6.style.display="";
+var _8=_6.getElementsByTagName("*");
+for(var i=0,_9=_8.length;i<_9;i++){
+var _a=_8[i].style.display;
+_8[i].style.display="none";
+_8[i].style.display="";
+_8[i].style.display=_a;
+}
+_6.style.display=_7;
+}
+}});
+dojo.extend(dojox.mobile.Switch,{buildRendering:function(){
+this.domNode=this.srcNodeRef||dojo.doc.createElement("DIV");
+this.domNode.className="mblSwitch";
+this.domNode.innerHTML="<div class=\"mblSwitchInner\">"+"<div class=\"mblSwitchBg mblSwitchBgLeft\">"+"<div class=\"mblSwitchCorner mblSwitchCorner1T\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner2T\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner3T\"></div>"+"<div class=\"mblSwitchText mblSwitchTextLeft\">"+this.leftLabel+"</div>"+"<div class=\"mblSwitchCorner mblSwitchCorner1B\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner2B\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner3B\"></div>"+"</div>"+"<div class=\"mblSwitchBg mblSwitchBgRight\">"+"<div class=\"mblSwitchCorner mblSwitchCorner1T\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner2T\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner3T\"></div>"+"<div class=\"mblSwitchText mblSwitchTextRight\">"+this.rightLabel+"</div>"+"<div class=\"mblSwitchCorner mblSwitchCorner1B\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner2B\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner3B\"></div>"+"</div>"+"<div class=\"mblSwitchKnobContainer\">"+"<div class=\"mblSwitchCorner mblSwitchCorner1T\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner2T\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner3T\"></div>"+"<div class=\"mblSwitchKnob\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner1B\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner2B\"></div>"+"<div class=\"mblSwitchCorner mblSwitchCorner3B\"></div>"+"</div>"+"</div>";
+var n=this.inner=this.domNode.firstChild;
+this.left=n.childNodes[0];
+this.right=n.childNodes[1];
+this.knob=n.childNodes[2];
+dojo.addClass(this.domNode,(this.value=="on")?"mblSwitchOn":"mblSwitchOff");
+this[this.value=="off"?"left":"right"].style.display="none";
+},_changeState:function(_b){
+if(!this.inner.parentNode||!this.inner.parentNode.tagName){
+dojo.addClass(this.domNode,(_b=="on")?"mblSwitchOn":"mblSwitchOff");
+return;
+}
+var _c;
+if(this.inner.offsetLeft==0){
+if(_b=="on"){
+return;
+}
+_c=-53;
+}else{
+if(_b=="off"){
+return;
+}
+_c=0;
+}
+var a=dojo.fx.slideTo({node:this.inner,duration:500,left:_c});
+var _d=this;
+dojo.connect(a,"onEnd",function(){
+_d[_b=="off"?"left":"right"].style.display="none";
+});
+a.play();
+}});
+if(dojo.isIE){
+dojo.extend(dojox.mobile.RoundRect,{buildRendering:function(){
+dojox.mobile.createRoundRect(this);
+this.domNode.className="mblRoundRect";
+}});
+dojox.mobile.RoundRectList._addChild=dojox.mobile.RoundRectList.prototype.addChild;
+dojo.extend(dojox.mobile.RoundRectList,{buildRendering:function(){
+dojox.mobile.createRoundRect(this,true);
+this.domNode.className="mblRoundRectList";
+},postCreate:function(){
+this.redrawBorders();
+},addChild:function(_e){
+dojox.mobile.RoundRectList._addChild.apply(this,arguments);
+this.redrawBorders();
+if(dojox.mobile.applyPngFilter){
+dojox.mobile.applyPngFilter(_e.domNode);
+}
+},redrawBorders:function(){
+var _f=false;
+for(var i=this.containerNode.childNodes.length-1;i>=0;i--){
+var c=this.containerNode.childNodes[i];
+if(c.tagName=="LI"){
+c.style.borderBottomStyle=_f?"solid":"none";
+_f=true;
+}
+}
+}});
+dojo.extend(dojox.mobile.EdgeToEdgeList,{buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("UL");
+this.domNode.className="mblEdgeToEdgeList";
+}});
+dojox.mobile.IconContainer._addChild=dojox.mobile.IconContainer.prototype.addChild;
+dojo.extend(dojox.mobile.IconContainer,{addChild:function(_10){
+dojox.mobile.IconContainer._addChild.apply(this,arguments);
+if(dojox.mobile.applyPngFilter){
+dojox.mobile.applyPngFilter(_10.domNode);
+}
+}});
+dojo.mixin(dojox.mobile,{createRoundRect:function(_11,_12){
+var i;
+_11.domNode=dojo.doc.createElement("DIV");
+_11.domNode.style.padding="0px";
+_11.domNode.style.backgroundColor="transparent";
+_11.domNode.style.borderStyle="none";
+_11.containerNode=dojo.doc.createElement(_12?"UL":"DIV");
+_11.containerNode.className="mblRoundRectContainer";
+if(_11.srcNodeRef){
+_11.srcNodeRef.parentNode.replaceChild(_11.domNode,_11.srcNodeRef);
+for(i=0,len=_11.srcNodeRef.childNodes.length;i<len;i++){
+_11.containerNode.appendChild(_11.srcNodeRef.removeChild(_11.srcNodeRef.firstChild));
+}
+_11.srcNodeRef=null;
+}
+_11.domNode.appendChild(_11.containerNode);
+for(i=0;i<=5;i++){
+var top=dojo.create("DIV");
+top.className="mblRoundCorner mblRoundCorner"+i+"T";
+_11.domNode.insertBefore(top,_11.containerNode);
+var _13=dojo.create("DIV");
+_13.className="mblRoundCorner mblRoundCorner"+i+"B";
+_11.domNode.appendChild(_13);
+}
+}});
+}
+if(dojo.isIE<=6){
+dojox.mobile.applyPngFilter=function(_14){
+_14=_14||dojo.body();
+var _15=_14.getElementsByTagName("IMG");
+var _16=dojo.moduleUrl("dojo","resources/blank.gif");
+for(var i=0,len=_15.length;i<len;i++){
+var img=_15[i];
+var w=img.offsetWidth;
+var h=img.offsetHeight;
+if(w===0||h===0){
+return;
+}
+var src=img.src;
+if(src.indexOf("resources/blank.gif")!=-1){
+continue;
+}
+img.src=_16;
+img.runtimeStyle.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"')";
+img.style.width=w+"px";
+img.style.height=h+"px";
+}
+};
+}
+dojox.mobile.loadCss=function(_17){
+if(!dojo.global._loadedCss){
+var obj={};
+dojo.forEach(dojo.doc.getElementsByTagName("link"),function(_18){
+obj[_18.href]=true;
+});
+dojo.global._loadedCss=obj;
+}
+if(!dojo.isArray(_17)){
+_17=[_17];
+}
+for(var i=0;i<_17.length;i++){
+var _19=_17[i];
+if(!dojo.global._loadedCss[_19]){
+dojo.global._loadedCss[_19]=true;
+if(dojo.doc.createStyleSheet){
+setTimeout(function(_1a){
+return function(){
+dojo.doc.createStyleSheet(_1a);
+};
+}(_19),0);
+}else{
+var _1b=dojo.doc.createElement("link");
+_1b.href=_19;
+_1b.type="text/css";
+_1b.rel="stylesheet";
+var _1c=dojo.doc.getElementsByTagName("head")[0];
+_1c.appendChild(_1b);
+}
+}
+}
+};
+dojox.mobile.loadCompatCssFiles=function(){
+var _1d=dojo.doc.getElementsByTagName("link");
+for(var i=0,len=_1d.length;i<len;i++){
+var _1e=_1d[i].href;
+if((_1e.indexOf("/mobile/themes/")!=-1||location.href.indexOf("/mobile/tests/")!=-1)&&_1e.substring(_1e.length-4)==".css"){
+var _1f=_1e.substring(0,_1e.length-4)+"-compat.css";
+dojox.mobile.loadCss(_1f);
+}
+}
+};
+dojo.addOnLoad(function(){
+dojox.mobile.loadCompatCssFiles();
+if(dojox.mobile.applyPngFilter){
+dojox.mobile.applyPngFilter();
+}
+});
+}
Index: trunk/web/dojo/dojox/mobile/build/profiles/mobile-all.profile.js
===================================================================
--- trunk/web/dojo/dojox/mobile/build/profiles/mobile-all.profile.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/build/profiles/mobile-all.profile.js	(revision 9)
@@ -0,0 +1,8 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dependencies={stripConsole:"normal",layers:[{name:"dojo.js",customBase:true,dependencies:["dojo._base.declare","dojo._base.lang","dojo._base.array","dojo._base.window","dojo._base.event","dojo._base.connect","dojo._base.html","dijit._Widget","dijit._base.manager","dijit._base.sniff","dojox.mobile.parser","dojox.mobile"]},{name:"../dojox/mobile/compat.js",dependencies:["dojo._base.fx","dojox.mobile.compat"]}],prefixes:[["dijit","../dijit"],["dojox","../dojox"]]};
Index: trunk/web/dojo/dojox/mobile/build/profiles/mobile.profile.js
===================================================================
--- trunk/web/dojo/dojox/mobile/build/profiles/mobile.profile.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/build/profiles/mobile.profile.js	(revision 9)
@@ -0,0 +1,8 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dependencies={stripConsole:"normal",layers:[{name:"dojo.js",dependencies:["dijit._Widget",]},{name:"../dojox/mobile.js",dependencies:["dojox.mobile"]},{name:"../dojox/mobile/app.js",dependencies:["dojox.mobile.app"]},{name:"../dojox/mobile/compat.js",dependencies:["dojox.mobile.compat"]},{name:"../dojox/mobile/app/compat.js",dependencies:["dojox.mobile.app.compat"]}],prefixes:[["dijit","../dijit"],["dojox","../dojox"]]};
Index: trunk/web/dojo/dojox/mobile/build/build.bat
===================================================================
--- trunk/web/dojo/dojox/mobile/build/build.bat	(revision 0)
+++ trunk/web/dojo/dojox/mobile/build/build.bat	(revision 9)
@@ -0,0 +1,47 @@
+@echo off
+
+rem Build script for dojox.mobile
+rem 
+rem Note:
+rem You may need to manually apply the following patch to your build script
+rem in order to completely remove all the unused modules from your build.
+rem The patch disables finding the dojo base modules being used from the
+rem dependent modules with a simple pattern matching, which sometimes
+rem unexpectedly picks up unused modules.
+rem For example, if you see query.js and NodeList.js baked into your build,
+rem while you are not using them, then it is worth trying the patch.
+rem The file to be patched is util/buildscripts/jslib/buildUtil.js.
+rem 
+rem --- buildUtil.js-orig
+rem +++ buildUtil.js
+rem @@ -1506,7 +1506,7 @@
+rem    var addedResources = {};
+rem -  while((matches = buildUtil.baseMappingRegExp.exec(tempContents))){
+rem +  while(false&&(matches = buildUtil.baseMappingRegExp.exec(tempContents))){
+rem        var baseResource = buildUtil.baseMappings[matches[1]];
+rem        //Make sure we do not add the dependency to its source resource.
+
+if "%1"=="separate" goto ok
+if "%1"=="single" goto ok
+echo Usage: build separate^|single [webkit]
+echo   separate  Create mobile.js that includes only dojox.mobile
+echo   single    Create a single dojo.js layer that includes dojox.mobile
+echo   webkit    Enable webkitMobile=true option (Loses PC browser support)
+goto end
+:ok
+
+set optimize=shrinksafe
+set profile=mobile.profile.js
+set dir=release-mobile-separate
+set webkit=
+if "%1"=="single" set profile=mobile-all.profile.js
+if "%1"=="single" set dir=release-mobile-single
+if "%2"=="webkit" set webkit=webkitMobile=true
+
+cd ..\..\..\util\buildscripts
+
+call build profileFile=../../dojox/mobile/build/profiles/%profile% action=release customDijitBase=true optimize=%optimize% layerOptimize=%optimize% cssOptimize=comments releaseDir=../../%dir%/ %webkit%
+
+cd ..\..\dojox\mobile\build
+
+:end
Index: trunk/web/dojo/dojox/mobile/build/build.sh
===================================================================
--- trunk/web/dojo/dojox/mobile/build/build.sh	(revision 0)
+++ trunk/web/dojo/dojox/mobile/build/build.sh	(revision 9)
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# Build script for dojox.mobile
+# 
+# Note:
+# You may need to manually apply the following patch to your build script
+# in order to completely remove all the unused modules from your build.
+# The patch disables finding the dojo base modules being used from the
+# dependent modules with a simple pattern matching, which sometimes
+# unexpectedly picks up unused modules.
+# For example, if you see query.js and NodeList.js baked into your build,
+# while you are not using them, then it is worth trying the patch.
+# The file to be patched is util/buildscripts/jslib/buildUtil.js.
+# 
+# --- buildUtil.js-orig
+# +++ buildUtil.js
+# @@ -1506,7 +1506,7 @@
+#    var addedResources = {};
+# -  while((matches = buildUtil.baseMappingRegExp.exec(tempContents))){
+# +  while(false&&(matches = buildUtil.baseMappingRegExp.exec(tempContents))){
+#        var baseResource = buildUtil.baseMappings[matches[1]];
+#        //Make sure we do not add the dependency to its source resource.
+
+if [ $# -eq 0 ]; then
+  echo 'Usage: build separate|single [webkit]'
+  echo '  separate  Create mobile.js that includes only dojox.mobile'
+  echo '  single    Create a single dojo.js layer that includes dojox.mobile'
+  echo '  webkit    Enable webkitMobile=true option (Loses PC browser support)'
+  exit 1
+fi
+
+optimize=shrinksafe
+profile=mobile.profile.js
+dir=release-mobile-separate
+webkit=
+if [ "$1" == "single" ]; then
+  profile=mobile-all.profile.js
+fi
+if [ "$1" == "single" ]; then
+  dir=release-mobile-single
+fi
+if [ "$2" == "webkit" ]; then
+  webkit=webkitMobile=true
+fi
+
+cd ../../../util/buildscripts
+
+./build.sh profileFile=../../dojox/mobile/build/profiles/$profile action=release customDijitBase=true optimize=$optimize layerOptimize=$optimize cssOptimize=comments releaseDir=../../$dir/ $webkit
+
+cd ../../dojox/mobile/build
Index: trunk/web/dojo/dojox/mobile/app/_FormWidget.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/_FormWidget.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/_FormWidget.js	(revision 9)
@@ -0,0 +1,123 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app._FormWidget"]){
+dojo._hasResource["dojox.mobile.app._FormWidget"]=true;
+dojo.provide("dojox.mobile.app._FormWidget");
+dojo.experimental("dojox.mobile.app._FormWidget");
+dojo.require("dojo.window");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.mobile.app._FormWidget",dijit._Widget,{name:"",alt:"",value:"",type:"text",disabled:false,intermediateChanges:false,scrollOnFocus:false,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{value:"focusNode",id:"focusNode",alt:"focusNode",title:"focusNode"}),postMixInProperties:function(){
+this.nameAttrSetting=this.name?("name=\""+this.name.replace(/'/g,"&quot;")+"\""):"";
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.domNode,"onmousedown","_onMouseDown");
+},_setDisabledAttr:function(_1){
+this.disabled=_1;
+dojo.attr(this.focusNode,"disabled",_1);
+if(this.valueNode){
+dojo.attr(this.valueNode,"disabled",_1);
+}
+if(_1){
+this._hovering=false;
+this._active=false;
+}
+},_onFocus:function(e){
+if(this.scrollOnFocus){
+dojo.window.scrollIntoView(this.domNode);
+}
+this.inherited(arguments);
+},isFocusable:function(){
+return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");
+},focus:function(){
+this.focusNode.focus();
+},compare:function(_2,_3){
+if(typeof _2=="number"&&typeof _3=="number"){
+return (isNaN(_2)&&isNaN(_3))?0:_2-_3;
+}else{
+if(_2>_3){
+return 1;
+}else{
+if(_2<_3){
+return -1;
+}else{
+return 0;
+}
+}
+}
+},onChange:function(_4){
+},_onChangeActive:false,_handleOnChange:function(_5,_6){
+this._lastValue=_5;
+if(this._lastValueReported==undefined&&(_6===null||!this._onChangeActive)){
+this._resetValue=this._lastValueReported=_5;
+}
+if((this.intermediateChanges||_6||_6===undefined)&&((typeof _5!=typeof this._lastValueReported)||this.compare(_5,this._lastValueReported)!=0)){
+this._lastValueReported=_5;
+if(this._onChangeActive){
+if(this._onChangeHandle){
+clearTimeout(this._onChangeHandle);
+}
+this._onChangeHandle=setTimeout(dojo.hitch(this,function(){
+this._onChangeHandle=null;
+this.onChange(_5);
+}),0);
+}
+}
+},create:function(){
+this.inherited(arguments);
+this._onChangeActive=true;
+},destroy:function(){
+if(this._onChangeHandle){
+clearTimeout(this._onChangeHandle);
+this.onChange(this._lastValueReported);
+}
+this.inherited(arguments);
+},_onMouseDown:function(e){
+if(this.isFocusable()){
+var _7=this.connect(dojo.body(),"onmouseup",function(){
+if(this.isFocusable()){
+this.focus();
+}
+this.disconnect(_7);
+});
+}
+},selectInputText:function(_8,_9,_a){
+var _b=dojo.global;
+var _c=dojo.doc;
+_8=dojo.byId(_8);
+if(isNaN(_9)){
+_9=0;
+}
+if(isNaN(_a)){
+_a=_8.value?_8.value.length:0;
+}
+dijit.focus(_8);
+if(_b["getSelection"]&&_8.setSelectionRange){
+_8.setSelectionRange(_9,_a);
+}
+}});
+dojo.declare("dojox.mobile.app._FormValueWidget",dojox.mobile.app._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dojox.mobile.app._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_d){
+this.readOnly=_d;
+dojo.attr(this.focusNode,"readOnly",_d);
+},postCreate:function(){
+this.inherited(arguments);
+if(this._resetValue===undefined){
+this._resetValue=this.value;
+}
+},_setValueAttr:function(_e,_f){
+this.value=_e;
+this._handleOnChange(_e,_f);
+},_getValueAttr:function(){
+return this._lastValue;
+},undo:function(){
+this._setValueAttr(this._lastValueReported,false);
+},reset:function(){
+this._hasBeenBlurred=false;
+this._setValueAttr(this._resetValue,true);
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/AlertDialog.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/AlertDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/AlertDialog.js	(revision 9)
@@ -0,0 +1,79 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.AlertDialog"]){
+dojo._hasResource["dojox.mobile.app.AlertDialog"]=true;
+dojo.provide("dojox.mobile.app.AlertDialog");
+dojo.experimental("dojox.mobile.app.AlertDialog");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.mobile.app.AlertDialog",dijit._Widget,{title:"",text:"",controller:null,buttons:null,defaultButtonLabel:"OK",onChoose:null,constructor:function(){
+this.onClick=dojo.hitch(this,this.onClick);
+this._handleSelect=dojo.hitch(this,this._handleSelect);
+},buildRendering:function(){
+this.domNode=dojo.create("div",{"class":"alertDialog"});
+var _1=dojo.create("div",{"class":"alertDialogBody"},this.domNode);
+dojo.create("div",{"class":"alertTitle",innerHTML:this.title||""},_1);
+dojo.create("div",{"class":"alertText",innerHTML:this.text||""},_1);
+var _2=dojo.create("div",{"class":"alertBtns"},_1);
+if(!this.buttons||this.buttons.length==0){
+this.buttons=[{label:this.defaultButtonLabel,value:"ok","class":"affirmative"}];
+}
+var _3=this;
+dojo.forEach(this.buttons,function(_4){
+var _5=new dojox.mobile.Button({btnClass:_4["class"]||"",label:_4.label});
+_5._dialogValue=_4.value;
+dojo.place(_5.domNode,_2);
+_3.connect(_5,"onClick",_3._handleSelect);
+});
+var _6=this.controller.getWindowSize();
+this.mask=dojo.create("div",{"class":"dialogUnderlayWrapper",innerHTML:"<div class=\"dialogUnderlay\"></div>",style:{width:_6.w+"px",height:_6.h+"px"}},this.controller.assistant.domNode);
+this.connect(this.mask,"onclick",function(){
+_3.onChoose&&_3.onChoose();
+_3.hide();
+});
+},postCreate:function(){
+this.subscribe("/dojox/mobile/app/goback",this._handleSelect);
+},_handleSelect:function(_7){
+var _8;
+if(_7&&_7.target){
+_8=_7.target;
+while(!dijit.byNode(_8)){
+_8-_8.parentNode;
+}
+}
+if(this.onChoose){
+this.onChoose(_8?dijit.byNode(_8)._dialogValue:undefined);
+}
+this.hide();
+},show:function(){
+this._doTransition(1);
+},hide:function(){
+this._doTransition(-1);
+},_doTransition:function(_9){
+var _a;
+var h=dojo.marginBox(this.domNode.firstChild).h;
+var _b=this.controller.getWindowSize().h;
+var _c=_b-h;
+var _d=_b;
+var _e=dojo.fx.slideTo({node:this.domNode,duration:400,top:{start:_9<0?_c:_d,end:_9<0?_d:_c}});
+var _f=dojo[_9<0?"fadeOut":"fadeIn"]({node:this.mask,duration:400});
+var _a=dojo.fx.combine([_e,_f]);
+var _10=this;
+dojo.connect(_a,"onEnd",this,function(){
+if(_9<0){
+_10.domNode.style.display="none";
+dojo.destroy(_10.domNode);
+dojo.destroy(_10.mask);
+}
+});
+_a.play();
+},destroy:function(){
+this.inherited(arguments);
+dojo.destroy(this.mask);
+},onClick:function(){
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/SceneAssistant.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/SceneAssistant.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/SceneAssistant.js	(revision 9)
@@ -0,0 +1,31 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.SceneAssistant"]){
+dojo._hasResource["dojox.mobile.app.SceneAssistant"]=true;
+dojo.provide("dojox.mobile.app.SceneAssistant");
+dojo.experimental("dojox.mobile.app.SceneAssistant");
+dojo.declare("dojox.mobile.app.SceneAssistant",null,{constructor:function(){
+},setup:function(){
+},activate:function(_1){
+},deactivate:function(){
+},destroy:function(){
+var _2=dojo.query("> [widgetId]",this.containerNode).map(dijit.byNode);
+dojo.forEach(_2,function(_3){
+_3.destroyRecursive();
+});
+this.disconnect();
+},connect:function(_4,_5,_6){
+if(!this._connects){
+this._connects=[];
+}
+this._connects.push(dojo.connect(_4,_5,_6));
+},disconnect:function(){
+dojo.forEach(this._connects,dojo.disconnect);
+this._connects=[];
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/StageController.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/StageController.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/StageController.js	(revision 9)
@@ -0,0 +1,78 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.StageController"]){
+dojo._hasResource["dojox.mobile.app.StageController"]=true;
+dojo.provide("dojox.mobile.app.StageController");
+dojo.experimental("dojox.mobile.app.StageController");
+dojo.require("dojox.mobile.app.SceneController");
+dojo.declare("dojox.mobile.app.StageController",null,{scenes:null,effect:"fade",constructor:function(_1){
+this.domNode=_1;
+this.scenes=[];
+if(dojo.config.mobileAnim){
+this.effect=dojo.config.mobileAnim;
+}
+},getActiveSceneController:function(){
+return this.scenes[this.scenes.length-1];
+},pushScene:function(_2,_3){
+if(this._opInProgress){
+return;
+}
+this._opInProgress=true;
+var _4=dojo.create("div",{"class":"scene-wrapper",style:{visibility:"hidden"}},this.domNode);
+var _5=new dojox.mobile.app.SceneController({},_4);
+if(this.scenes.length>0){
+this.scenes[0].assistant.deactivate();
+}
+this.scenes.push(_5);
+var _6=this;
+dojo.forEach(this.scenes,this.setZIndex);
+_5.stageController=this;
+_5.init(_2,_3).addCallback(function(){
+if(_6.scenes.length==1){
+_5.domNode.style.visibility="visible";
+_6.scenes[_6.scenes.length-1].assistant.activate(_3);
+_6._opInProgress=false;
+}else{
+_6.scenes[_6.scenes.length-2].performTransition(_6.scenes[_6.scenes.length-1].domNode,1,_6.effect,null,function(){
+_6.scenes[_6.scenes.length-1].assistant.activate(_3);
+_6._opInProgress=false;
+});
+}
+});
+},setZIndex:function(_7,_8){
+dojo.style(_7.domNode,"zIndex",_8+1);
+},popScene:function(_9){
+if(this._opInProgress){
+return;
+}
+var _a=this;
+if(this.scenes.length>1){
+this._opInProgress=true;
+this.scenes[_a.scenes.length-2].assistant.activate(_9);
+this.scenes[_a.scenes.length-1].performTransition(_a.scenes[this.scenes.length-2].domNode,-1,this.effect,null,function(){
+_a._destroyScene(_a.scenes[_a.scenes.length-1]);
+_a.scenes.splice(_a.scenes.length-1,1);
+_a._opInProgress=false;
+});
+}else{
+}
+},popScenesTo:function(_b,_c){
+if(this._opInProgress){
+return;
+}
+while(this.scenes.length>2&&this.scenes[this.scenes.length-2].sceneName!=_b){
+this._destroyScene(this.scenes[this.scenes.length-2]);
+this.scenes.splice(this.scenes.length-2,1);
+}
+this.popScene(_c);
+},_destroyScene:function(_d){
+_d.assistant.deactivate();
+_d.assistant.destroy();
+_d.destroyRecursive();
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/_base.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/_base.js	(revision 9)
@@ -0,0 +1,127 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app._base"]){
+dojo._hasResource["dojox.mobile.app._base"]=true;
+dojo.provide("dojox.mobile.app._base");
+dojo.experimental("dojox.mobile.app._base");
+dojo.require("dijit._base");
+dojo.require("dijit._Widget");
+dojo.require("dojox.mobile");
+dojo.require("dojox.mobile.parser");
+dojo.require("dojox.mobile.app._event");
+dojo.require("dojox.mobile.app._Widget");
+dojo.require("dojox.mobile.app.StageController");
+dojo.require("dojox.mobile.app.SceneController");
+dojo.require("dojox.mobile.app.SceneAssistant");
+dojo.require("dojox.mobile.app.AlertDialog");
+dojo.require("dojox.mobile.app.List");
+dojo.require("dojox.mobile.app.ListSelector");
+dojo.require("dojox.mobile.app.TextBox");
+dojo.require("dojox.mobile.app.ImageView");
+dojo.require("dojox.mobile.app.ImageThumbView");
+(function(){
+var _1;
+var _2;
+var _3=["dojox.mobile","dojox.mobile.parser"];
+var _4={};
+var _5;
+var _6;
+var _7=[];
+function _8(_9,_a){
+var _b;
+var _c;
+do{
+_b=_9.pop();
+if(_b.source){
+_c=_b.source;
+}else{
+if(_b.module){
+_c=dojo.baseUrl+dojo._getModuleSymbols(_b.module).join("/")+".js";
+}else{
+alert("Error: invalid JavaScript resource "+dojo.toJson(_b));
+return;
+}
+}
+}while(_9.length>0&&_4[_c]);
+if(_9.length<1&&_4[_c]){
+_a();
+return;
+}
+dojo.xhrGet({url:_c,sync:false}).addCallbacks(function(_d){
+dojo["eval"](_d);
+if(_9.length>0){
+_8(_9,_a);
+}else{
+_a();
+}
+},function(){
+alert("Failed to load resource "+_c);
+});
+};
+var _e=function(){
+_1=new dojox.mobile.app.StageController(_6);
+var _f={id:"com.test.app",version:"1.0.0",initialScene:"main"};
+if(window["appInfo"]){
+dojo.mixin(_f,window["appInfo"]);
+}
+_2=dojox.mobile.app.info=_f;
+if(_2.title){
+var _10=dojo.query("head title")[0]||dojo.create("title",{},dojo.query("head")[0]);
+document.title=_2.title;
+}
+_1.pushScene(_2.initialScene);
+};
+dojo.mixin(dojox.mobile.app,{init:function(_11){
+_6=_11||dojo.body();
+dojo.subscribe("/dojox/mobile/app/goback",function(){
+_1.popScene();
+});
+dojo.subscribe("/dojox/mobile/app/alert",function(_12){
+dojox.mobile.app.getActiveSceneController().showAlertDialog(_12);
+});
+dojo.xhrGet({url:"view-resources.json",load:function(_13){
+var _14=[];
+if(_13){
+_7=_13=dojo.fromJson(_13);
+for(var i=0;i<_13.length;i++){
+if(!_13[i].scene){
+_14.push(_13[i]);
+}
+}
+}
+if(_14.length>0){
+_8(_14,_e);
+}else{
+_e();
+}
+},error:_e});
+},getActiveSceneController:function(){
+return _1.getActiveSceneController();
+},getStageController:function(){
+return _1;
+},loadResources:function(_15,_16){
+_8(_15,_16);
+},loadResourcesForScene:function(_17,_18){
+var _19=[];
+for(var i=0;i<_7.length;i++){
+if(_7[i].scene==_17){
+_19.push(_7[i]);
+}
+}
+if(_19.length>0){
+_8(_19,_18);
+}else{
+_18();
+}
+},resolveTemplate:function(_1a){
+return "app/views/"+_1a+"/"+_1a+"-scene.html";
+},resolveAssistant:function(_1b){
+return "app/assistants/"+_1b+"-assistant.js";
+}});
+})();
+}
Index: trunk/web/dojo/dojox/mobile/app/List.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/List.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/List.js	(revision 9)
@@ -0,0 +1,300 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.List"]){
+dojo._hasResource["dojox.mobile.app.List"]=true;
+dojo.provide("dojox.mobile.app.List");
+dojo.experimental("dojox.mobile.app.List");
+dojo.require("dojo.string");
+dojo.require("dijit._Widget");
+(function(){
+var _1={};
+dojo.declare("dojox.mobile.app.List",dijit._Widget,{items:null,itemTemplate:"",emptyTemplate:"",labelDelete:"Delete",labelCancel:"Cancel",controller:null,autoDelete:true,enableDelete:true,_templateLoadCount:0,_mouseDownPos:null,constructor:function(){
+this._checkLoadComplete=dojo.hitch(this,this._checkLoadComplete);
+this._replaceToken=dojo.hitch(this,this._replaceToken);
+this._postDeleteAnim=dojo.hitch(this,this._postDeleteAnim);
+},postCreate:function(){
+var _2=this;
+if(this.emptyTemplate){
+this._templateLoadCount++;
+}
+if(this.itemTemplate){
+this._templateLoadCount++;
+}
+dojo.addClass(this.domNode,"list");
+var _3;
+this.connect(this.domNode,"onmousedown",function(_4){
+var _5=_4;
+if(_4.targetTouches&&_4.targetTouches.length>0){
+_5=_4.targetTouches[0];
+}
+var _6=_2._getRowNode(_4.target);
+if(_6){
+_2._setDataInfo(_6,_4);
+_2._selectRow(_6);
+_2._mouseDownPos={x:_5.pageX,y:_5.pageY};
+_2._dragThreshold=null;
+}else{
+}
+});
+this.connect(this.domNode,"onmouseup",function(_7){
+if(_7.targetTouches&&_7.targetTouches.length>0){
+_7=_7.targetTouches[0];
+}
+var _8=_2._getRowNode(_7.target);
+if(_8){
+_2._setDataInfo(_8,_7);
+if(_2._selectedRow){
+_2.onSelect(_8._data,_8._idx,_8);
+}
+this._deselectRow();
+}
+});
+if(this.enableDelete){
+this.connect(this.domNode,"mousemove",function(_9){
+dojo.stopEvent(_9);
+if(!_2._selectedRow){
+return;
+}
+var _a=_2._getRowNode(_9.target);
+if(_2.enableDelete&&_a&&!_2._deleting){
+_2.handleDrag(_9);
+}
+});
+}
+this.connect(this.domNode,"onclick",function(_b){
+if(_b.touches&&_b.touches.length>0){
+_b=_b.touches[0];
+}
+var _c=_2._getRowNode(_b.target,true);
+if(_c){
+_2._setDataInfo(_c,_b);
+}
+});
+this.connect(this.domNode,"mouseout",function(_d){
+if(_d.touches&&_d.touches.length>0){
+_d=_d.touches[0];
+}
+if(_d.target==_2._selectedRow){
+_2._deselectRow();
+}
+});
+if(!this.itemTemplate){
+throw Error("An item template must be provided to "+this.declaredClass);
+}
+this._loadTemplate(this.itemTemplate,"itemTemplate",this._checkLoadComplete);
+if(this.emptyTemplate){
+this._loadTemplate(this.emptyTemplate,"emptyTemplate",this._checkLoadComplete);
+}
+},handleDrag:function(_e){
+var _f=_e;
+if(_e.targetTouches&&_e.targetTouches.length>0){
+_f=_e.targetTouches[0];
+}
+var _10=_f.pageX-this._mouseDownPos.x;
+var _11=Math.abs(_10);
+if(_11>10&&!this._dragThreshold){
+this._dragThreshold=dojo.marginBox(this._selectedRow).w*0.6;
+if(!this.autoDelete){
+this.createDeleteButtons(this._selectedRow);
+}
+}
+this._selectedRow.style.left=(_11>10?_10:0)+"px";
+if(this._dragThreshold&&this._dragThreshold<_11){
+this.preDelete(_10);
+}
+},handleDragCancel:function(){
+if(this._deleting){
+return;
+}
+dojo.removeClass(this._selectedRow,"hold");
+this._selectedRow.style.left=0;
+this._mouseDownPos=null;
+this._dragThreshold=null;
+this._deleteBtns&&dojo.style(this._deleteBtns,"display","none");
+},preDelete:function(_12){
+var _13=this;
+this._deleting=true;
+dojo.animateProperty({node:this._selectedRow,duration:400,properties:{left:{end:_12+((_12>0?1:-1)*this._dragThreshold*0.8)}},onEnd:dojo.hitch(this,function(){
+if(this.autoDelete){
+this.deleteRow(this._selectedRow);
+}
+})}).play();
+},deleteRow:function(row){
+dojo.style(row,{visibility:"hidden",minHeight:"0px"});
+dojo.removeClass(row,"hold");
+this._deleteAnimConn=this.connect(row,"webkitAnimationEnd",this._postDeleteAnim);
+dojo.addClass(row,"collapsed");
+},_postDeleteAnim:function(_14){
+if(this._deleteAnimConn){
+this.disconnect(this._deleteAnimConn);
+this._deleteAnimConn=null;
+}
+var row=this._selectedRow;
+var _15=row.nextSibling;
+row.parentNode.removeChild(row);
+this.onDelete(row._data,row._idx,this.items);
+while(_15){
+if(_15._idx){
+_15._idx--;
+}
+_15=_15.nextSibling;
+}
+dojo.destroy(row);
+dojo.query("> *:not(.buttons)",this.domNode).forEach(this.applyClass);
+this._deleting=false;
+this._deselectRow();
+},createDeleteButtons:function(_16){
+var mb=dojo.marginBox(_16);
+var pos=dojo._abs(_16,true);
+if(!this._deleteBtns){
+this._deleteBtns=dojo.create("div",{"class":"buttons"},this.domNode);
+this.buttons=[];
+this.buttons.push(new dojox.mobile.Button({btnClass:"mblRedButton",label:this.labelDelete}));
+this.buttons.push(new dojox.mobile.Button({btnClass:"mblBlueButton",label:this.labelCancel}));
+dojo.place(this.buttons[0].domNode,this._deleteBtns);
+dojo.place(this.buttons[1].domNode,this._deleteBtns);
+dojo.addClass(this.buttons[0].domNode,"deleteBtn");
+dojo.addClass(this.buttons[1].domNode,"cancelBtn");
+this._handleButtonClick=dojo.hitch(this._handleButtonClick);
+this.connect(this._deleteBtns,"onclick",this._handleButtonClick);
+}
+dojo.removeClass(this._deleteBtns,"fade out fast");
+dojo.style(this._deleteBtns,{display:"",width:mb.w+"px",height:mb.h+"px",top:(_16.offsetTop)+"px",left:"0px"});
+},onDelete:function(_17,_18,_19){
+_19.splice(_18,1);
+if(_19.length<1){
+this.render();
+}
+},cancelDelete:function(){
+this._deleting=false;
+this.handleDragCancel();
+},_handleButtonClick:function(_1a){
+if(_1a.touches&&_1a.touches.length>0){
+_1a=_1a.touches[0];
+}
+var _1b=_1a.target;
+if(dojo.hasClass(_1b,"deleteBtn")){
+this.deleteRow(this._selectedRow);
+}else{
+if(dojo.hasClass(_1b,"cancelBtn")){
+this.cancelDelete();
+}else{
+return;
+}
+}
+dojo.addClass(this._deleteBtns,"fade out");
+},applyClass:function(_1c,idx,_1d){
+dojo.removeClass(_1c,"first last");
+if(idx==0){
+dojo.addClass(_1c,"first");
+}
+if(idx==_1d.length-1){
+dojo.addClass(_1c,"last");
+}
+},_setDataInfo:function(_1e,_1f){
+_1f.item=_1e._data;
+_1f.index=_1e._idx;
+},onSelect:function(_20,_21,_22){
+},_selectRow:function(row){
+if(this._deleting&&this._selectedRow&&row!=this._selectedRow){
+this.cancelDelete();
+}
+if(!dojo.hasClass(row,"row")){
+return;
+}
+dojo.addClass(row,"hold");
+this._selectedRow=row;
+},_deselectRow:function(){
+if(!this._selectedRow||this._deleting){
+return;
+}
+this.handleDragCancel();
+dojo.removeClass(this._selectedRow,"hold");
+this._selectedRow=null;
+},_getRowNode:function(_23,_24){
+while(_23&&!_23._data&&_23!=this.domNode){
+if(!_24&&dojo.hasClass(_23,"noclick")){
+return null;
+}
+_23=_23.parentNode;
+}
+return _23;
+},render:function(){
+dojo.query("> *:not(.buttons)",this.domNode).forEach(dojo.destroy);
+var _25=[];
+var row,i;
+dojo.addClass(this.domNode,"list");
+for(i=0;i<this.items.length;i++){
+row=dojo._toDom(dojo.string.substitute(this.itemTemplate,this.items[i],this._replaceToken,this));
+_25.push(row);
+}
+for(i=0;i<this.items.length;i++){
+_25[i]._data=this.items[i];
+_25[i]._idx=i;
+this.domNode.appendChild(_25[i]);
+}
+if(this.items.length<1&&this.emptyTemplate){
+dojo.place(dojo._toDom(this.emptyTemplate),this.domNode,"first");
+}
+if(dojo.hasClass(this.domNode.parentNode,"mblRoundRect")){
+dojo.addClass(this.domNode.parentNode,"mblRoundRectList");
+}
+var _26=dojo.query("> div:not(.buttons)",this.domNode);
+_26.addClass("row");
+if(_26.length>0){
+dojo.addClass(_26[0],"first");
+dojo.addClass(_26[_26.length-1],"last");
+}
+},_replaceToken:function(_27,key){
+if(key.charAt(0)=="!"){
+_27=dojo.getObject(key.substr(1),false,_this);
+}
+if(typeof _27=="undefined"){
+return "";
+}
+if(_27==null){
+return "";
+}
+return key.charAt(0)=="!"?_27:_27.toString().replace(/"/g,"&quot;");
+},_checkLoadComplete:function(){
+this._templateLoadCount--;
+if(this._templateLoadCount<1&&this.get("items")){
+this.render();
+}
+},_loadTemplate:function(url,_28,_29){
+if(!url){
+_29();
+return;
+}
+if(_1[url]){
+this.set(_28,_1[url]);
+_29();
+}else{
+var _2a=this;
+dojo.xhrGet({url:url,sync:false,handleAs:"text",load:function(_2b){
+_1[url]=dojo.trim(_2b);
+_2a.set(_28,_1[url]);
+_29();
+}});
+}
+},_setItemsAttr:function(_2c){
+this.items=_2c||[];
+if(this._templateLoadCount<1&&_2c){
+this.render();
+}
+},destroy:function(){
+if(this.buttons){
+dojo.forEach(this.buttons,function(_2d){
+_2d.destroy();
+});
+this.buttons=null;
+}
+this.inherited(arguments);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/mobile/app/ListSelector.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/ListSelector.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/ListSelector.js	(revision 9)
@@ -0,0 +1,110 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.ListSelector"]){
+dojo._hasResource["dojox.mobile.app.ListSelector"]=true;
+dojo.provide("dojox.mobile.app.ListSelector");
+dojo.experimental("dojox.mobile.app.ListSelector");
+dojo.require("dojox.mobile.app._Widget");
+dojo.require("dojo.fx");
+dojo.declare("dojox.mobile.app.ListSelector",dojox.mobile.app._Widget,{data:null,controller:null,onChoose:null,destroyOnHide:false,_setDataAttr:function(_1){
+this.data=_1;
+if(this.data){
+this.render();
+}
+},postCreate:function(){
+dojo.addClass(this.domNode,"listSelector");
+var _2=this;
+this.connect(this.domNode,"onclick",function(_3){
+if(!dojo.hasClass(_3.target,"listSelectorRow")){
+return;
+}
+if(_2.onChoose){
+_2.onChoose(_2.data[_3.target._idx].value);
+}
+_2.hide();
+});
+this.connect(this.domNode,"onmousedown",function(_4){
+if(!dojo.hasClass(_4.target,"listSelectorRow")){
+return;
+}
+dojo.addClass(_4.target,"listSelectorRow-selected");
+});
+this.connect(this.domNode,"onmouseup",function(_5){
+if(!dojo.hasClass(_5.target,"listSelectorRow")){
+return;
+}
+dojo.removeClass(_5.target,"listSelectorRow-selected");
+});
+this.connect(this.domNode,"onmouseout",function(_6){
+if(!dojo.hasClass(_6.target,"listSelectorRow")){
+return;
+}
+dojo.removeClass(_6.target,"listSelectorRow-selected");
+});
+var _7=this.controller.getWindowSize();
+this.mask=dojo.create("div",{"class":"dialogUnderlayWrapper",innerHTML:"<div class=\"dialogUnderlay\"></div>"},this.controller.assistant.domNode);
+this.connect(this.mask,"onclick",function(){
+_2.onChoose&&_2.onChoose();
+_2.hide();
+});
+},show:function(_8){
+var _9;
+var _a=this.controller.getWindowSize();
+var _b;
+if(_8){
+_b=dojo._abs(_8);
+_9=_b;
+}else{
+_9.x=_a.w/2;
+_9.y=200;
+}
+dojo.style(this.domNode,{opacity:0,display:"",width:Math.floor(_a.w*0.8)+"px"});
+var _c=0;
+dojo.query(">",this.domNode).forEach(function(_d){
+dojo.style(_d,{"float":"left"});
+_c=Math.max(_c,dojo.marginBox(_d).w);
+dojo.style(_d,{"float":"none"});
+});
+_c=Math.min(_c,Math.round(_a.w*0.8))+dojo.style(this.domNode,"paddingLeft")+dojo.style(this.domNode,"paddingRight")+1;
+dojo.style(this.domNode,"width",_c+"px");
+var _e=dojo.marginBox(this.domNode).h;
+var _f=this;
+var _10=_b?Math.max(30,_b.y-_e-10):this.getScroll().y+30;
+var _11=dojo.animateProperty({node:this.domNode,duration:400,properties:{width:{start:1,end:_c},height:{start:1,end:_e},top:{start:_9.y,end:_10},left:{start:_9.x,end:(_a.w/2-_c/2)},opacity:{start:0,end:1},fontSize:{start:1}},onEnd:function(){
+dojo.style(_f.domNode,"width","inherit");
+}});
+var _12=dojo.fadeIn({node:this.mask,duration:400});
+dojo.fx.combine([_11,_12]).play();
+},hide:function(){
+var _13=this;
+var _14=dojo.animateProperty({node:this.domNode,duration:500,properties:{width:{end:1},height:{end:1},opacity:{end:0},fontSize:{end:1}},onEnd:function(){
+if(_13.get("destroyOnHide")){
+_13.destroy();
+}
+}});
+var _15=dojo.fadeOut({node:this.mask,duration:400});
+dojo.fx.combine([_14,_15]).play();
+},render:function(){
+dojo.empty(this.domNode);
+dojo.style(this.domNode,"opacity",0);
+var row;
+for(var i=0;i<this.data.length;i++){
+row=dojo.create("div",{"class":"listSelectorRow "+(this.data[i].className||""),innerHTML:this.data[i].label},this.domNode);
+row._idx=i;
+if(i==0){
+dojo.addClass(row,"first");
+}
+if(i==this.data.length-1){
+dojo.addClass(row,"last");
+}
+}
+},destroy:function(){
+this.inherited(arguments);
+dojo.destroy(this.mask);
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/ImageThumbView.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/ImageThumbView.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/ImageThumbView.js	(revision 9)
@@ -0,0 +1,141 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.ImageThumbView"]){
+dojo._hasResource["dojox.mobile.app.ImageThumbView"]=true;
+dojo.provide("dojox.mobile.app.ImageThumbView");
+dojo.experimental("dojox.mobile.app.ImageThumbView");
+dojo.require("dijit._Widget");
+dojo.require("dojo.string");
+dojo.declare("dojox.mobile.app.ImageThumbView",dijit._Widget,{items:null,urlParam:"url",itemTemplate:"<div class=\"mblThumbInner\">"+"<div class=\"mblThumbOverlay\"></div>"+"<div class=\"mblThumbMask\">"+"<div class=\"mblThumbSrc\" style=\"background-image:url(${url})\"></div>"+"</div>"+"</div>",minPadding:5,maxPerRow:3,baseClass:"mblImageThumbView",selectedIndex:-1,cache:null,postCreate:function(){
+this.inherited(arguments);
+var _1=this;
+var _2="mblThumbHover";
+this.addThumb=dojo.hitch(this,this.addThumb);
+this.handleImgLoad=dojo.hitch(this,this.handleImgLoad);
+this._onLoadImages={};
+this.cache=[];
+this.visibleImages=[];
+this.connect(this.domNode,"onclick",function(_3){
+var _4=_1._getItemNodeFromEvent(_3);
+if(_4){
+_1.onSelect(_4._item,_4._index,_1.items);
+dojo.query(".selected",this.domNode).removeClass("selected");
+dojo.addClass(_4,"selected");
+}
+});
+this.resize();
+this.render();
+},onSelect:function(_5,_6,_7){
+},_setItemsAttr:function(_8){
+this.items=_8||[];
+this.render();
+},_getItemNode:function(_9){
+while(_9&&!dojo.hasClass(_9,"mblThumb")&&_9!=this.domNode){
+_9=_9.parentNode;
+}
+return (_9==this.domNode)?null:_9;
+},_getItemNodeFromEvent:function(_a){
+if(_a.touches&&_a.touches.length>0){
+_a=_a.touches[0];
+}
+return this._getItemNode(_a.target);
+},resize:function(){
+this._thumbSize=null;
+this._size=dojo.marginBox(this.domNode);
+this.render();
+},render:function(){
+var i;
+var _b;
+var _c;
+var _d;
+while(this.visibleImages.length>0){
+_d=this.visibleImages.pop();
+this.cache.push(_d);
+dojo.addClass(_d,"hidden");
+_d._cached=true;
+}
+if(!this.items||this.items.length==0){
+return;
+}
+for(i=0;i<this.items.length;i++){
+_c=this.items[i];
+_b=(dojo.isString(_c)?_c:_c[this.urlParam]);
+this.addThumb(_c,_b,i);
+}
+if(!this._thumbSize){
+return;
+}
+var _e=0;
+var _f=-1;
+var _10=this._thumbSize.w+(this.padding*2);
+var _11=this._thumbSize.h+(this.padding*2);
+var _12=this.thumbNodes=dojo.query(".mblThumb",this.domNode);
+var pos=0;
+for(i=0;i<_12.length;i++){
+if(_12[i]._cached){
+continue;
+}
+if(pos%this.maxPerRow==0){
+_f++;
+}
+_e=pos%this.maxPerRow;
+this.place(_12[i],(_e*_10)+this.padding,(_f*_11)+this.padding);
+if(!_12[i]._loading){
+dojo.removeClass(_12[i],"hidden");
+}
+if(pos==this.selectedIndex){
+dojo[pos==this.selectedIndex?"addClass":"removeClass"](_12[i],"selected");
+}
+pos++;
+}
+var _13=Math.ceil(pos/this.maxPerRow);
+if(this._numRows!=_13){
+this._numRows=_13;
+dojo.style(this.domNode,"height",(_13*(this._thumbSize.h+this.padding*2))+"px");
+}
+},addThumb:function(_14,url,_15){
+var _16;
+if(this.cache.length>0){
+_16=this.cache.pop();
+}else{
+_16=dojo.create("div",{"class":"mblThumb hidden",innerHTML:dojo.string.substitute(this.itemTemplate,{url:url},null,this)},this.domNode);
+}
+dojo.addClass(_16,"hidden");
+var _17=dojo.create("img",{});
+_17._thumbDiv=_16;
+_17._conn=dojo.connect(_17,"onload",this.handleImgLoad);
+_17._url=url;
+_16._loading=true;
+this._onLoadImages[url]=_17;
+_17.src=url;
+this.visibleImages.push(_16);
+_16._index=_15;
+_16._item=_14;
+_16._url=url;
+_16._cached=false;
+if(!this._thumbSize){
+this._thumbSize=dojo.marginBox(_16);
+this.calcPadding();
+}
+},handleImgLoad:function(_18){
+var img=_18.target;
+dojo.disconnect(img._conn);
+dojo.removeClass(img._thumbDiv,"hidden");
+img._thumbDiv._loading=false;
+dojo.query(".mblThumbSrc",img._thumbDiv).style("backgroundImage","url("+img._url+")");
+delete this._onLoadImages[img._url];
+},calcPadding:function(){
+var _19=this._size.w;
+var _1a=this._thumbSize.w;
+var _1b=_1a+this.minPadding;
+this.maxPerRow=Math.floor(_19/_1b);
+this.padding=(_19-(_1a*this.maxPerRow))/(this.maxPerRow*2);
+},place:function(_1c,x,y){
+dojo.style(_1c,{"-webkit-transform":"translate("+x+"px,"+y+"px)"});
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/ImageView.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/ImageView.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/ImageView.js	(revision 9)
@@ -0,0 +1,376 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.ImageView"]){
+dojo._hasResource["dojox.mobile.app.ImageView"]=true;
+dojo.provide("dojox.mobile.app.ImageView");
+dojo.experimental("dojox.mobile.app.ImageView");
+dojo.require("dojox.mobile.app._Widget");
+dojo.require("dojo.fx.easing");
+dojo.declare("dojox.mobile.app.ImageView",dojox.mobile.app._Widget,{zoom:1,zoomCenterX:0,zoomCenterY:0,maxZoom:5,autoZoomLevel:3,disableAutoZoom:false,disableSwipe:false,autoZoomEvent:null,_leftImg:null,_centerImg:null,_rightImg:null,_leftSmallImg:null,_centerSmallImg:null,_rightSmallImg:null,constructor:function(){
+this.panX=0;
+this.panY=0;
+this.handleLoad=dojo.hitch(this,this.handleLoad);
+this._updateAnimatedZoom=dojo.hitch(this,this._updateAnimatedZoom);
+this._updateAnimatedPan=dojo.hitch(this,this._updateAnimatedPan);
+this._onAnimPanEnd=dojo.hitch(this,this._onAnimPanEnd);
+},buildRendering:function(){
+this.inherited(arguments);
+this.canvas=dojo.create("canvas",{},this.domNode);
+dojo.addClass(this.domNode,"mblImageView");
+},postCreate:function(){
+this.inherited(arguments);
+this.size=dojo.marginBox(this.domNode);
+dojo.style(this.canvas,{width:this.size.w+"px",height:this.size.h+"px"});
+this.canvas.height=this.size.h;
+this.canvas.width=this.size.w;
+var _1=this;
+this.connect(this.domNode,"onmousedown",function(_2){
+if(_1.isAnimating()){
+return;
+}
+if(_1.panX){
+_1.handleDragEnd();
+}
+_1.downX=_2.targetTouches?_2.targetTouches[0].clientX:_2.clientX;
+_1.downY=_2.targetTouches?_2.targetTouches[0].clientY:_2.clientY;
+});
+this.connect(this.domNode,"onmousemove",function(_3){
+if(_1.isAnimating()){
+return;
+}
+if((!_1.downX&&_1.downX!==0)||(!_1.downY&&_1.downY!==0)){
+return;
+}
+if((!_1.disableSwipe&&_1.zoom==1)||(!_1.disableAutoZoom&&_1.zoom!=1)){
+var x=_3.targetTouches?_3.targetTouches[0].clientX:_3.pageX;
+var y=_3.targetTouches?_3.targetTouches[0].clientY:_3.pageY;
+_1.panX=x-_1.downX;
+_1.panY=y-_1.downY;
+if(_1.zoom==1){
+if(Math.abs(_1.panX)>10){
+_1.render();
+}
+}else{
+if(Math.abs(_1.panX)>10||Math.abs(_1.panY)>10){
+_1.render();
+}
+}
+}
+});
+this.connect(this.domNode,"onmouseout",function(_4){
+if(!_1.isAnimating()&&_1.panX){
+_1.handleDragEnd();
+}
+});
+this.connect(this.domNode,"onmouseover",function(_5){
+_1.downX=_1.downY=null;
+});
+this.connect(this.domNode,"onclick",function(_6){
+if(_1.isAnimating()){
+return;
+}
+if(_1.downX==null||_1.downY==null){
+return;
+}
+var x=(_6.targetTouches?_6.targetTouches[0].clientX:_6.pageX);
+var y=(_6.targetTouches?_6.targetTouches[0].clientY:_6.pageY);
+if(Math.abs(_1.panX)>14||Math.abs(_1.panY)>14){
+_1.downX=_1.downY=null;
+_1.handleDragEnd();
+return;
+}
+_1.downX=_1.downY=null;
+if(!_1.disableAutoZoom){
+if(!_1._centerImg||!_1._centerImg._loaded){
+return;
+}
+if(_1.zoom!=1){
+_1.set("animatedZoom",1);
+return;
+}
+var _7=dojo._abs(_1.domNode);
+var _8=_1.size.w/_1._centerImg.width;
+var _9=_1.size.h/_1._centerImg.height;
+_1.zoomTo(((x-_7.x)/_8)-_1.panX,((y-_7.y)/_9)-_1.panY,_1.autoZoomLevel);
+}
+});
+dojo.connect(this.domNode,"flick",this,"handleFlick");
+},isAnimating:function(){
+return this._anim&&this._anim.status()=="playing";
+},handleDragEnd:function(){
+this.downX=this.downY=null;
+if(this.zoom==1){
+if(!this.panX){
+return;
+}
+var _a=(this._leftImg&&this._leftImg._loaded)||(this._leftSmallImg&&this._leftSmallImg._loaded);
+var _b=(this._rightImg&&this._rightImg._loaded)||(this._rightSmallImg&&this._rightSmallImg._loaded);
+var _c=!(Math.abs(this.panX)<this._centerImg._baseWidth/2)&&((this.panX>0&&_a?1:0)||(this.panX<0&&_b?1:0));
+if(!_c){
+this._animPanTo(0,dojo.fx.easing.expoOut,700);
+}else{
+this.moveTo(this.panX);
+}
+}else{
+if(!this.panX&&!this.panY){
+return;
+}
+this.zoomCenterX-=(this.panX/this.zoom);
+this.zoomCenterY-=(this.panY/this.zoom);
+this.panX=this.panY=0;
+}
+},handleFlick:function(_d){
+if(this.zoom==1&&_d.duration<500){
+if(_d.direction=="ltr"){
+this.moveTo(1);
+}else{
+if(_d.direction=="rtl"){
+this.moveTo(-1);
+}
+}
+this.downX=this.downY=null;
+}
+},moveTo:function(_e){
+_e=_e>0?1:-1;
+var _f;
+if(_e<1){
+if(this._rightImg&&this._rightImg._loaded){
+_f=this._rightImg;
+}else{
+if(this._rightSmallImg&&this._rightSmallImg._loaded){
+_f=this._rightSmallImg;
+}
+}
+}else{
+if(this._leftImg&&this._leftImg._loaded){
+_f=this._leftImg;
+}else{
+if(this._leftSmallImg&&this._leftSmallImg._loaded){
+_f=this._leftSmallImg;
+}
+}
+}
+this._moveDir=_e;
+var _10=this;
+if(_f&&_f._loaded){
+this._animPanTo(this.size.w*_e,null,500,function(){
+_10.panX=0;
+_10.panY=0;
+if(_e<0){
+_10._switchImage("left","right");
+}else{
+_10._switchImage("right","left");
+}
+_10.render();
+_10.onChange(_e*-1);
+});
+}else{
+this._animPanTo(0,dojo.fx.easing.expoOut,700);
+}
+},_switchImage:function(_11,_12){
+var _13="_"+_11+"SmallImg";
+var _14="_"+_11+"Img";
+var _15="_"+_12+"SmallImg";
+var _16="_"+_12+"Img";
+this[_14]=this._centerImg;
+this[_13]=this._centerSmallImg;
+this[_14]._type=_11;
+if(this[_13]){
+this[_13]._type=_11;
+}
+this._centerImg=this[_16];
+this._centerSmallImg=this[_15];
+this._centerImg._type="center";
+if(this._centerSmallImg){
+this._centerSmallImg._type="center";
+}
+this[_16]=this[_15]=null;
+},_animPanTo:function(to,_17,_18,_19){
+this._animCallback=_19;
+this._anim=new dojo.Animation({curve:[this.panX,to],onAnimate:this._updateAnimatedPan,duration:_18||500,easing:_17,onEnd:this._onAnimPanEnd});
+this._anim.play();
+return this._anim;
+},onChange:function(_1a){
+},_updateAnimatedPan:function(_1b){
+this.panX=_1b;
+this.render();
+},_onAnimPanEnd:function(){
+this.panX=this.panY=0;
+if(this._animCallback){
+this._animCallback();
+}
+},zoomTo:function(_1c,_1d,_1e){
+this.set("zoomCenterX",_1c);
+this.set("zoomCenterY",_1d);
+this.set("animatedZoom",_1e);
+},render:function(){
+var cxt=this.canvas.getContext("2d");
+cxt.clearRect(0,0,this.canvas.width,this.canvas.height);
+this._renderImg(this._centerSmallImg,this._centerImg,this.zoom==1?(this.panX<0?1:this.panX>0?-1:0):0);
+if(this.zoom==1&&this.panX!=0){
+if(this.panX>0){
+this._renderImg(this._leftSmallImg,this._leftImg,1);
+}else{
+this._renderImg(this._rightSmallImg,this._rightImg,-1);
+}
+}
+},_renderImg:function(_1f,_20,_21){
+var img=(_20&&_20._loaded)?_20:_1f;
+if(!img||!img._loaded){
+return;
+}
+var cxt=this.canvas.getContext("2d");
+var _22=img._baseWidth;
+var _23=img._baseHeight;
+var _24=_22*this.zoom;
+var _25=_23*this.zoom;
+var _26=Math.min(this.size.w,_24);
+var _27=Math.min(this.size.h,_25);
+var _28=this.dispWidth=img.width*(_26/_24);
+var _29=this.dispHeight=img.height*(_27/_25);
+var _2a=this.zoomCenterX-(this.panX/this.zoom);
+var _2b=this.zoomCenterY-(this.panY/this.zoom);
+var _2c=Math.floor(Math.max(_28/2,Math.min(img.width-_28/2,_2a)));
+var _2d=Math.floor(Math.max(_29/2,Math.min(img.height-_29/2,_2b)));
+var _2e=Math.max(0,Math.round((img.width-_28)/2+(_2c-img._centerX)));
+var _2f=Math.max(0,Math.round((img.height-_29)/2+(_2d-img._centerY)));
+var _30=Math.round(Math.max(0,this.canvas.width-_26)/2);
+var _31=Math.round(Math.max(0,this.canvas.height-_27)/2);
+var _32=_26;
+var _33=_28;
+if(this.zoom==1&&_21&&this.panX){
+if(this.panX<0){
+if(_21>0){
+_26-=Math.abs(this.panX);
+_30=0;
+}else{
+if(_21<0){
+_26=Math.max(1,Math.abs(this.panX)-5);
+_30=this.size.w-_26;
+}
+}
+}else{
+if(_21>0){
+_26=Math.max(1,Math.abs(this.panX)-5);
+_30=0;
+}else{
+if(_21<0){
+_26-=Math.abs(this.panX);
+_30=this.size.w-_26;
+}
+}
+}
+_28=Math.max(1,Math.floor(_28*(_26/_32)));
+if(_21>0){
+_2e=(_2e+_33)-(_28);
+}
+_2e=Math.floor(_2e);
+}
+try{
+cxt.drawImage(img,Math.max(0,_2e),_2f,Math.min(_33,_28),_29,_30,_31,Math.min(_32,_26),_27);
+}
+catch(e){
+}
+},_setZoomAttr:function(_34){
+this.zoom=Math.min(this.maxZoom,Math.max(1,_34));
+if(this.zoom==1&&this._centerImg&&this._centerImg._loaded){
+if(!this.isAnimating()){
+this.zoomCenterX=this._centerImg.width/2;
+this.zoomCenterY=this._centerImg.height/2;
+}
+this.panX=this.panY=0;
+}
+this.render();
+},_setZoomCenterXAttr:function(_35){
+if(_35!=this.zoomCenterX){
+if(this._centerImg&&this._centerImg._loaded){
+_35=Math.min(this._centerImg.width,_35);
+}
+this.zoomCenterX=Math.max(0,Math.round(_35));
+}
+},_setZoomCenterYAttr:function(_36){
+if(_36!=this.zoomCenterY){
+if(this._centerImg&&this._centerImg._loaded){
+_36=Math.min(this._centerImg.height,_36);
+}
+this.zoomCenterY=Math.max(0,Math.round(_36));
+}
+},_setZoomCenterAttr:function(_37){
+if(_37.x!=this.zoomCenterX||_37.y!=this.zoomCenterY){
+this.set("zoomCenterX",_37.x);
+this.set("zoomCenterY",_37.y);
+this.render();
+}
+},_setAnimatedZoomAttr:function(_38){
+if(this._anim&&this._anim.status()=="playing"){
+return;
+}
+this._anim=new dojo.Animation({curve:[this.zoom,_38],onAnimate:this._updateAnimatedZoom,onEnd:this._onAnimEnd});
+this._anim.play();
+},_updateAnimatedZoom:function(_39){
+this._setZoomAttr(_39);
+},_setCenterUrlAttr:function(_3a){
+this._setImage("center",_3a);
+},_setLeftUrlAttr:function(_3b){
+this._setImage("left",_3b);
+},_setRightUrlAttr:function(_3c){
+this._setImage("right",_3c);
+},_setImage:function(_3d,_3e){
+var _3f=null;
+var _40=null;
+if(dojo.isString(_3e)){
+_40=_3e;
+}else{
+_40=_3e.large;
+_3f=_3e.small;
+}
+if(this["_"+_3d+"Img"]&&this["_"+_3d+"Img"]._src==_40){
+return;
+}
+var _41=this["_"+_3d+"Img"]=new Image();
+_41._type=_3d;
+_41._loaded=false;
+_41._src=_40;
+_41._conn=dojo.connect(_41,"onload",this.handleLoad);
+if(_3f){
+var _42=this["_"+_3d+"SmallImg"]=new Image();
+_42._type=_3d;
+_42._loaded=false;
+_42._conn=dojo.connect(_42,"onload",this.handleLoad);
+_42._isSmall=true;
+_42._src=_3f;
+_42.src=_3f;
+}
+_41.src=_40;
+},handleLoad:function(evt){
+var img=evt.target;
+img._loaded=true;
+dojo.disconnect(img._conn);
+var _43=img._type;
+switch(_43){
+case "center":
+this.zoomCenterX=img.width/2;
+this.zoomCenterY=img.height/2;
+break;
+}
+var _44=img.height;
+var _45=img.width;
+if(_45/this.size.w<_44/this.size.h){
+img._baseHeight=this.canvas.height;
+img._baseWidth=_45/(_44/this.size.h);
+}else{
+img._baseWidth=this.canvas.width;
+img._baseHeight=_44/(_45/this.size.w);
+}
+img._centerX=_45/2;
+img._centerY=_44/2;
+this.render();
+this.onLoad(img._type,img._src,img._isSmall);
+},onLoad:function(_46,url,_47){
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/TextBox.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/TextBox.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/TextBox.js	(revision 9)
@@ -0,0 +1,145 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.TextBox"]){
+dojo._hasResource["dojox.mobile.app.TextBox"]=true;
+dojo.provide("dojox.mobile.app.TextBox");
+dojo.experimental("dojox.mobile.app.TextBox");
+dojo.require("dojox.mobile.app._Widget");
+dojo.require("dojox.mobile.app._FormWidget");
+dojo.declare("dojox.mobile.app.TextBox",dojox.mobile.app._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",baseClass:"mblTextBox",attributeMap:dojo.delegate(dojox.mobile.app._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),buildRendering:function(){
+var _1=this.srcNodeRef;
+if(!_1||_1.tagName!="INPUT"){
+_1=dojo.create("input",{});
+}
+dojo.attr(_1,{type:"text",value:dojo.attr(this.srcNodeRef,"value")||"",placeholder:this.placeHolder||null});
+this.domNode=this.textbox=this.focusNode=_1;
+},_setPlaceHolderAttr:function(v){
+this.placeHolder=v;
+if(this.textbox){
+dojo.attr(this.textbox,"placeholder",v);
+}
+},_getValueAttr:function(){
+return this.parse(this.get("displayedValue"),this.constraints);
+},_setValueAttr:function(_2,_3,_4){
+var _5;
+if(_2!==undefined){
+_5=this.filter(_2);
+if(typeof _4!="string"){
+if(_5!==null&&((typeof _5!="number")||!isNaN(_5))){
+_4=this.filter(this.format(_5,this.constraints));
+}else{
+_4="";
+}
+}
+}
+if(_4!=null&&_4!=undefined&&((typeof _4)!="number"||!isNaN(_4))&&this.textbox.value!=_4){
+this.textbox.value=_4;
+}
+this.inherited(arguments,[_5,_3]);
+},displayedValue:"",_getDisplayedValueAttr:function(){
+return this.filter(this.textbox.value);
+},_setDisplayedValueAttr:function(_6){
+if(_6===null||_6===undefined){
+_6="";
+}else{
+if(typeof _6!="string"){
+_6=String(_6);
+}
+}
+this.textbox.value=_6;
+this._setValueAttr(this.get("value"),undefined,_6);
+},format:function(_7,_8){
+return ((_7==null||_7==undefined)?"":(_7.toString?_7.toString():_7));
+},parse:function(_9,_a){
+return _9;
+},_refreshState:function(){
+},_onInput:function(e){
+if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){
+switch(e.keyCode){
+case dojo.keys.SHIFT:
+case dojo.keys.ALT:
+case dojo.keys.CTRL:
+case dojo.keys.TAB:
+return;
+}
+}
+if(this.intermediateChanges){
+var _b=this;
+setTimeout(function(){
+_b._handleOnChange(_b.get("value"),false);
+},0);
+}
+this._refreshState();
+},postCreate:function(){
+this.textbox.setAttribute("value",this.textbox.value);
+this.inherited(arguments);
+if(dojo.isMoz||dojo.isOpera){
+this.connect(this.textbox,"oninput",this._onInput);
+}else{
+this.connect(this.textbox,"onkeydown",this._onInput);
+this.connect(this.textbox,"onkeyup",this._onInput);
+this.connect(this.textbox,"onpaste",this._onInput);
+this.connect(this.textbox,"oncut",this._onInput);
+}
+},_blankValue:"",filter:function(_c){
+if(_c===null){
+return this._blankValue;
+}
+if(typeof _c!="string"){
+return _c;
+}
+if(this.trim){
+_c=dojo.trim(_c);
+}
+if(this.uppercase){
+_c=_c.toUpperCase();
+}
+if(this.lowercase){
+_c=_c.toLowerCase();
+}
+if(this.propercase){
+_c=_c.replace(/[^\s]+/g,function(_d){
+return _d.substring(0,1).toUpperCase()+_d.substring(1);
+});
+}
+return _c;
+},_setBlurValue:function(){
+this._setValueAttr(this.get("value"),true);
+},_onBlur:function(e){
+if(this.disabled){
+return;
+}
+this._setBlurValue();
+this.inherited(arguments);
+if(this._selectOnClickHandle){
+this.disconnect(this._selectOnClickHandle);
+}
+if(this.selectOnClick&&dojo.isMoz){
+this.textbox.selectionStart=this.textbox.selectionEnd=undefined;
+}
+},_onFocus:function(by){
+if(this.disabled||this.readOnly){
+return;
+}
+if(this.selectOnClick&&by=="mouse"){
+this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){
+this.disconnect(this._selectOnClickHandle);
+var _e;
+_e=this.textbox.selectionStart==this.textbox.selectionEnd;
+if(_e){
+this.selectInputText(this.textbox);
+}
+});
+}
+this._refreshState();
+this.inherited(arguments);
+},reset:function(){
+this.textbox.value="";
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/_event.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/_event.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/_event.js	(revision 9)
@@ -0,0 +1,75 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app._event"]){
+dojo._hasResource["dojox.mobile.app._event"]=true;
+dojo.provide("dojox.mobile.app._event");
+dojo.experimental("dojox.mobile.app._event.js");
+dojo.mixin(dojox.mobile.app,{eventMap:{},connectFlick:function(_1,_2,_3){
+var _4;
+var _5;
+var _6=false;
+var _7;
+var _8;
+var _9;
+var _a;
+var _b;
+var _c;
+var _d=dojo.connect("onmousedown",_1,function(_e){
+_6=false;
+_4=_e.targetTouches?_e.targetTouches[0].clientX:_e.clientX;
+_5=_e.targetTouches?_e.targetTouches[0].clientY:_e.clientY;
+_c=(new Date()).getTime();
+_9=dojo.connect(_1,"onmousemove",_f);
+_a=dojo.connect(_1,"onmouseup",_10);
+});
+var _f=function(_11){
+dojo.stopEvent(_11);
+_7=_11.targetTouches?_11.targetTouches[0].clientX:_11.clientX;
+_8=_11.targetTouches?_11.targetTouches[0].clientY:_11.clientY;
+if(Math.abs(Math.abs(_7)-Math.abs(_4))>15){
+_6=true;
+_b=(_7>_4)?"ltr":"rtl";
+}else{
+if(Math.abs(Math.abs(_8)-Math.abs(_5))>15){
+_6=true;
+_b=(_8>_5)?"ttb":"btt";
+}
+}
+};
+var _10=function(_12){
+dojo.stopEvent(_12);
+_9&&dojo.disconnect(_9);
+_a&&dojo.disconnect(_a);
+if(_6){
+var _13={target:_1,direction:_b,duration:(new Date()).getTime()-_c};
+if(_2&&_3){
+_2[_3](_13);
+}else{
+_3(_13);
+}
+}
+};
+}});
+dojox.mobile.app.isIPhone=(dojo.isSafari&&(navigator.userAgent.indexOf("iPhone")>-1||navigator.userAgent.indexOf("iPod")>-1));
+dojox.mobile.app.isWebOS=(navigator.userAgent.indexOf("webOS")>-1);
+if(dojox.mobile.app.isIPhone){
+dojox.mobile.app.eventMap={onmousedown:"ontouchstart",mousedown:"ontouchstart",onmouseup:"ontouchend",mouseup:"ontouchend",onmousemove:"ontouchmove",mousemove:"ontouchmove"};
+}
+dojo._oldConnect=dojo._connect;
+dojo._connect=function(obj,_14,_15,_16,_17){
+_14=dojox.mobile.app.eventMap[_14]||_14;
+if(_14=="flick"||_14=="onflick"){
+if(window["Mojo"]){
+_14=Mojo.Event.flick;
+}else{
+return dojox.mobile.app.connectFlick(obj,_15,_16);
+}
+}
+return dojo._oldConnect(obj,_14,_15,_16,_17);
+};
+}
Index: trunk/web/dojo/dojox/mobile/app/SceneController.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/SceneController.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/SceneController.js	(revision 9)
@@ -0,0 +1,77 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.SceneController"]){
+dojo._hasResource["dojox.mobile.app.SceneController"]=true;
+dojo.provide("dojox.mobile.app.SceneController");
+dojo.experimental("dojox.mobile.app.SceneController");
+dojo.require("dojox.mobile._base");
+(function(){
+var _1=dojox.mobile.app;
+var _2={};
+dojo.declare("dojox.mobile.app.SceneController",dojox.mobile.View,{stageController:null,init:function(_3,_4){
+this.sceneName=_3;
+this.params=_4;
+var _5=_1.resolveTemplate(_3);
+this._deferredInit=new dojo.Deferred();
+dojo.xhrGet({url:_5,handleAs:"text"}).addCallback(dojo.hitch(this,this._setContents));
+return this._deferredInit;
+},_setContents:function(_6){
+_2[this.sceneName]=_6;
+this.domNode.innerHTML="<div>"+_6+"</div>";
+var _7="";
+var _8=this.sceneName.split("-");
+for(var i=0;i<_8.length;i++){
+_7+=_8[i].substring(0,1).toUpperCase()+_8[i].substring(1);
+}
+_7+="Assistant";
+this.sceneAssistantName=_7;
+var _9=this;
+dojox.mobile.app.loadResourcesForScene(this.sceneName,function(){
+var _a;
+if(typeof (window[_7])!="undefined"){
+_9._initAssistant();
+}else{
+var _b=_1.resolveAssistant(_9.sceneName);
+dojo.xhrGet({url:_b,handleAs:"text"}).addCallback(function(_c){
+dojo.eval(_c);
+_9._initAssistant();
+});
+}
+});
+},_initAssistant:function(){
+var _d=dojo.getObject(this.sceneAssistantName);
+if(!_d){
+throw Error("Unable to resolve scene assistant "+this.sceneAssistantName);
+}
+this.assistant=new _d(this.params);
+this.assistant.controller=this;
+this.assistant.domNode=this.domNode.firstChild;
+this.assistant.setup();
+this._deferredInit.callback();
+},query:function(_e,_f){
+return dojo.query(_e,_f||this.domNode);
+},parse:function(_10){
+var _11=this._widgets=dojox.mobile.parser.parse(_10||this.domNode,{controller:this});
+for(var i=0;i<_11.length;i++){
+_11[i].attr("controller",this);
+}
+},getWindowSize:function(){
+return {w:window.innerWidth,h:window.innerHeight};
+},showAlertDialog:function(_12){
+var _13=dojo.marginBox(this.assistant.domNode);
+var _14=new dojox.mobile.app.AlertDialog(dojo.mixin(_12,{controller:this}));
+this.assistant.domNode.appendChild(_14.domNode);
+_14.show();
+},popupSubMenu:function(_15){
+var _16=new dojox.mobile.app.ListSelector({controller:this,destroyOnHide:true,onChoose:_15.onChoose});
+this.assistant.domNode.appendChild(_16.domNode);
+_16.set("data",_15.choices);
+_16.show(_15.fromNode);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/mobile/app/_Widget.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/_Widget.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/_Widget.js	(revision 9)
@@ -0,0 +1,23 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app._Widget"]){
+dojo._hasResource["dojox.mobile.app._Widget"]=true;
+dojo.provide("dojox.mobile.app._Widget");
+dojo.experimental("dojox.mobile.app._Widget");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.mobile.app._Widget",dijit._Widget,{getScroll:function(){
+return {x:window.scrollX,y:window.scrollY};
+},connect:function(_1,_2,fn){
+if(_2.toLowerCase()=="dblclick"||_2.toLowerCase()=="ondblclick"){
+if(window["Mojo"]){
+return this.connect(_1,Mojo.Event.tap,fn);
+}
+}
+return this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/mobile/app/compat.js
===================================================================
--- trunk/web/dojo/dojox/mobile/app/compat.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/app/compat.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile.app.compat"]){
+dojo._hasResource["dojox.mobile.app.compat"]=true;
+dojo.provide("dojox.mobile.app.compat");
+dojo.require("dojox.mobile.compat");
+dojo.extend(dojox.mobile.app.AlertDialog,{_doTransition:function(_1){
+var h=dojo.marginBox(this.domNode.firstChild).h;
+var _2=this.controller.getWindowSize().h;
+var _3=_2-h;
+var _4=_2;
+var _5=dojo.fx.slideTo({node:this.domNode,duration:400,top:{start:_1<0?_3:_4,end:_1<0?_4:_3}});
+var _6=dojo[_1<0?"fadeOut":"fadeIn"]({node:this.mask,duration:400});
+var _7=dojo.fx.combine([_5,_6]);
+var _8=this;
+dojo.connect(_7,"onEnd",this,function(){
+if(_1<0){
+_8.domNode.style.display="none";
+dojo.destroy(_8.domNode);
+dojo.destroy(_8.mask);
+}
+});
+_7.play();
+}});
+dojo.extend(dojox.mobile.app.List,{deleteRow:function(){
+var _9=this._selectedRow;
+dojo.style(_9,{visibility:"hidden",minHeight:"0px"});
+dojo.removeClass(_9,"hold");
+var _a=dojo.contentBox(_9).h;
+dojo.animateProperty({node:_9,duration:800,properties:{height:{start:_a,end:1},paddingTop:{end:0},paddingBottom:{end:0}},onEnd:this._postDeleteAnim}).play();
+}});
+if(dojox.mobile.app.ImageView&&!dojo.create("canvas").getContext){
+dojo.extend(dojox.mobile.app.ImageView,{buildRendering:function(){
+this.domNode.innerHTML="ImageView widget is not supported on this browser."+"Please try again with a modern browser, e.g. "+"Safari, Chrome or Firefox";
+this.canvas={};
+},postCreate:function(){
+}});
+}
+if(dojox.mobile.app.ImageThumbView){
+dojo.extend(dojox.mobile.app.ImageThumbView,{place:function(_b,x,y){
+dojo.style(_b,{top:y+"px",left:x+"px",visibility:"visible"});
+}});
+}
+}
Index: trunk/web/dojo/dojox/mobile/_base.js
===================================================================
--- trunk/web/dojo/dojox/mobile/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile/_base.js	(revision 9)
@@ -0,0 +1,1059 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile._base"]){
+dojo._hasResource["dojox.mobile._base"]=true;
+dojo.provide("dojox.mobile._base");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.mobile.View",dijit._Widget,{selected:false,keepScrollPos:true,_started:false,constructor:function(_1,_2){
+if(_2){
+dojo.byId(_2).style.visibility="hidden";
+}
+},buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("DIV");
+this.domNode.className="mblView";
+this.connect(this.domNode,"webkitAnimationEnd","onAnimationEnd");
+this.connect(this.domNode,"webkitAnimationStart","onAnimationStart");
+var id=location.href.match(/#(\w+)([^\w=]|$)/)?RegExp.$1:null;
+this._visible=this.selected&&!id||this.id==id;
+if(this.selected){
+dojox.mobile._defaultView=this;
+}
+},startup:function(){
+if(this._started){
+return;
+}
+var _3=this;
+setTimeout(function(){
+if(!_3._visible){
+_3.domNode.style.display="none";
+}else{
+dojox.mobile._currentView=_3;
+_3.onStartView();
+}
+_3.domNode.style.visibility="visible";
+},dojo.isIE?100:0);
+this._started=true;
+},onStartView:function(){
+},onBeforeTransitionIn:function(_4,_5,_6,_7,_8){
+},onAfterTransitionIn:function(_9,_a,_b,_c,_d){
+},onBeforeTransitionOut:function(_e,_f,_10,_11,_12){
+},onAfterTransitionOut:function(_13,dir,_14,_15,_16){
+},_saveState:function(_17,dir,_18,_19,_1a){
+this._context=_19;
+this._method=_1a;
+if(_18=="none"||!dojo.isWebKit){
+_18=null;
+}
+this._moveTo=_17;
+this._dir=dir;
+this._transition=_18;
+this._arguments=[];
+var i;
+for(i=0;i<arguments.length;i++){
+this._arguments.push(arguments[i]);
+}
+this._args=[];
+if(_19||_1a){
+for(i=5;i<arguments.length;i++){
+this._args.push(arguments[i]);
+}
+}
+},performTransition:function(_1b,dir,_1c,_1d,_1e){
+if(dojo.hash){
+if(typeof (_1b)=="string"&&_1b.charAt(0)=="#"&&!dojox.mobile._params){
+dojox.mobile._params=[];
+for(var i=0;i<arguments.length;i++){
+dojox.mobile._params.push(arguments[i]);
+}
+dojo.hash(_1b);
+return;
+}
+}
+this._saveState.apply(this,arguments);
+var _1f;
+if(_1b){
+if(typeof (_1b)=="string"){
+_1b.match(/(\w+)/);
+_1f=RegExp.$1;
+}else{
+_1f=_1b;
+}
+}else{
+if(!this._dummyNode){
+this._dummyNode=dojo.doc.createElement("DIV");
+dojo.body().appendChild(this._dummyNode);
+}
+_1f=this._dummyNode;
+}
+var _20=this.domNode;
+_1f=this.toNode=dojo.byId(_1f);
+if(!_1f){
+alert("dojox.mobile.View#performTransition: destination view not found: "+_1f);
+}
+_1f.style.visibility="hidden";
+_1f.style.display="";
+this.onBeforeTransitionOut.apply(this,arguments);
+var _21=dijit.byNode(_1f);
+if(_21&&_21.onBeforeTransitionIn){
+if(this.keepScrollPos&&!dijit.getEnclosingWidget(this.domNode.parentNode)){
+var _22=dojo.body().scrollTop||dojo.doc.documentElement.scrollTop||window.pageYOffset||0;
+if(dir==1){
+_1f.style.top="0px";
+if(_22>1){
+_20.style.top=-_22+"px";
+if(dojo.config["mblHideAddressBar"]!==false){
+setTimeout(function(){
+window.scrollTo(0,1);
+},0);
+}
+}
+}else{
+if(_22>1||_1f.offsetTop!==0){
+var _23=-_1f.offsetTop;
+_1f.style.top="0px";
+_20.style.top=_23-_22+"px";
+if(dojo.config["mblHideAddressBar"]!==false&&_23>0){
+setTimeout(function(){
+window.scrollTo(0,_23+1);
+},0);
+}
+}
+}
+}else{
+_1f.style.top="0px";
+}
+_21.onBeforeTransitionIn.apply(this,arguments);
+}
+_1f.style.display="none";
+_1f.style.visibility="visible";
+this._doTransition(_20,_1f,_1c,dir);
+},_doTransition:function(_24,_25,_26,dir){
+var rev=(dir==-1)?" reverse":"";
+_25.style.display="";
+if(_26){
+dojo.addClass(_24,_26+" out"+rev);
+dojo.addClass(_25,_26+" in"+rev);
+}else{
+this.domNode.style.display="none";
+this.invokeCallback();
+}
+},onAnimationStart:function(e){
+},onAnimationEnd:function(e){
+var _27=false;
+if(dojo.hasClass(this.domNode,"out")){
+_27=true;
+this.domNode.style.display="none";
+dojo.forEach([this._transition,"in","out","reverse"],function(s){
+dojo.removeClass(this.domNode,s);
+},this);
+}
+if(e.animationName.indexOf("shrink")===0){
+var li=e.target;
+li.style.display="none";
+dojo.removeClass(li,"mblCloseContent");
+}
+if(_27){
+this.invokeCallback();
+}
+this.domNode&&(this.domNode.className="mblView");
+},invokeCallback:function(){
+this.onAfterTransitionOut.apply(this,this._arguments);
+var _28=dijit.byNode(this.toNode);
+if(_28&&_28.onAfterTransitionIn){
+_28.onAfterTransitionIn.apply(this,this._arguments);
+}
+if(dojo.hash){
+dojox.mobile._currentView=_28;
+}
+var c=this._context,m=this._method;
+if(!c&&!m){
+return;
+}
+if(!m){
+m=c;
+c=null;
+}
+c=c||dojo.global;
+if(typeof (m)=="string"){
+c[m].apply(c,this._args);
+}else{
+m.apply(c,this._args);
+}
+},addChild:function(_29){
+this.containerNode.appendChild(_29.domNode);
+}});
+dojo.declare("dojox.mobile.Heading",dijit._Widget,{back:"",href:"",moveTo:"",transition:"slide",label:"",buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("H1");
+this.domNode.className="mblHeading";
+this._view=this.domNode.parentNode&&dijit.byNode(this.domNode.parentNode);
+if(this.label){
+this.domNode.innerHTML=this.label;
+}else{
+this.label=this.domNode.innerHTML;
+}
+if(this.back){
+var _2a=dojo.doc.createElement("DIV");
+_2a.className="mblArrowButtonHead";
+var _2b=this._body=dojo.doc.createElement("DIV");
+_2b.className="mblArrowButtonBody mblArrowButtonText";
+_2b.innerHTML=this.back;
+this.connect(_2b,"onclick","onClick");
+var _2c=dojo.doc.createElement("DIV");
+_2c.className="mblArrowButtonNeck";
+this.domNode.appendChild(_2a);
+this.domNode.appendChild(_2b);
+this.domNode.appendChild(_2c);
+this.setLabel(this.label);
+}
+},onClick:function(e){
+var h1=this.domNode;
+dojo.addClass(h1,"mblArrowButtonSelected");
+setTimeout(function(){
+dojo.removeClass(h1,"mblArrowButtonSelected");
+},1000);
+this.goTo(this.moveTo,this.href);
+},setLabel:function(_2d){
+if(_2d!=this.label){
+this.label=_2d;
+this.domNode.firstChild.nodeValue=_2d;
+}
+var s=this.domNode.style;
+if(this.label.length>12){
+var h=this.domNode.cloneNode(true);
+h.style.visibility="hidden";
+dojo.body().appendChild(h);
+var b=h.childNodes[2];
+s.paddingLeft=b.offsetWidth+30+"px";
+s.textAlign="left";
+dojo.body().removeChild(h);
+h=null;
+}else{
+s.paddingLeft="";
+s.textAlign="";
+}
+},goTo:function(_2e,_2f){
+if(!this._view){
+this._view=dijit.byNode(this.domNode.parentNode);
+}
+if(_2f){
+this._view.performTransition(null,-1,this.transition,this,function(){
+location.href=_2f;
+});
+}else{
+if(dojox.mobile.app){
+dojo.publish("/dojox/mobile/app/goback");
+}else{
+this._view.performTransition(_2e,-1,this.transition);
+}
+}
+}});
+dojo.declare("dojox.mobile.RoundRect",dijit._Widget,{shadow:false,buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("DIV");
+this.domNode.className=this.shadow?"mblRoundRect mblShadow":"mblRoundRect";
+}});
+dojo.declare("dojox.mobile.RoundRectCategory",dijit._Widget,{label:"",buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("H2");
+this.domNode.className="mblRoundRectCategory";
+if(this.label){
+this.domNode.innerHTML=this.label;
+}else{
+this.label=this.domNode.innerHTML;
+}
+}});
+dojo.declare("dojox.mobile.EdgeToEdgeCategory",dojox.mobile.RoundRectCategory,{buildRendering:function(){
+this.inherited(arguments);
+this.domNode.className="mblEdgeToEdgeCategory";
+}});
+dojo.declare("dojox.mobile.RoundRectList",dijit._Widget,{transition:"slide",iconBase:"",iconPos:"",buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("UL");
+this.domNode.className="mblRoundRectList";
+},addChild:function(_30){
+this.containerNode.appendChild(_30.domNode);
+_30.inheritParams();
+_30.setIcon();
+}});
+dojo.declare("dojox.mobile.EdgeToEdgeList",dojox.mobile.RoundRectList,{buildRendering:function(){
+this.inherited(arguments);
+this.domNode.className="mblEdgeToEdgeList";
+}});
+dojo.declare("dojox.mobile.AbstractItem",dijit._Widget,{icon:"",iconPos:"",href:"",moveTo:"",clickable:false,url:"",transition:"",callback:null,sync:true,label:"",inheritParams:function(){
+var _31=this.getParentWidget();
+if(_31){
+if(!this.transition){
+this.transition=_31.transition;
+}
+if(!this.icon){
+this.icon=_31.iconBase;
+}
+if(!this.iconPos){
+this.iconPos=_31.iconPos;
+}
+}
+},transitionTo:function(_32,_33,url){
+var n=this.domNode.parentNode;
+var w;
+while(true){
+w=dijit.getEnclosingWidget(n);
+if(!w){
+return;
+}
+if(w.performTransition){
+break;
+}
+n=w.domNode.parentNode;
+}
+if(_33){
+w.performTransition(null,1,this.transition,this,function(){
+location.href=_33;
+});
+return;
+}
+if(url){
+var id;
+if(dojox.mobile._viewMap&&dojox.mobile._viewMap[url]){
+id=dojox.mobile._viewMap[url];
+}else{
+var _34=this._text;
+if(!_34){
+if(this.sync){
+_34=dojo.trim(dojo._getText(url));
+}else{
+var _35=dojox.mobile.ProgressIndicator.getInstance();
+dojo.body().appendChild(_35.domNode);
+_35.start();
+var xhr=dojo.xhrGet({url:url,handleAs:"text"});
+xhr.addCallback(dojo.hitch(this,function(_36,_37){
+_35.stop();
+if(_36){
+this._text=_36;
+this.transitionTo(_32,_33,url);
+}
+}));
+xhr.addErrback(function(_38){
+_35.stop();
+alert("Failed to load "+url+"\n"+(_38.description||_38));
+});
+return;
+}
+}
+this._text=null;
+id=this._parse(_34);
+if(!dojox.mobile._viewMap){
+dojox.mobile._viewMap=[];
+}
+dojox.mobile._viewMap[url]=id;
+}
+_32=id;
+}
+w.performTransition(_32,1,this.transition,this.callback&&this,this.callback);
+},_parse:function(_39){
+var _3a=dojo.create("DIV");
+var _3b;
+if(_39.charAt(0)=="<"){
+_3a.innerHTML=_39;
+_3b=_3a.firstChild;
+if(!_3b&&_3b.nodeType!=1){
+alert("dojox.mobile.AbstractItem#transitionTo: invalid view content");
+return;
+}
+_3b.setAttribute("_started","true");
+_3b.style.visibility="hidden";
+dojo.body().appendChild(_3a);
+(dojox.mobile.parser||dojo.parser).parse(_3a);
+}else{
+if(_39.charAt(0)=="{"){
+dojo.body().appendChild(_3a);
+this._ws=[];
+_3b=this._instantiate(eval("("+_39+")"),_3a);
+for(var i=0;i<this._ws.length;i++){
+var w=this._ws[i];
+w.startup&&!w._started&&(!w.getParent||!w.getParent())&&w.startup();
+}
+this._ws=null;
+}
+}
+_3b.style.display="none";
+_3b.style.visibility="visible";
+var id=_3b.id;
+return dojo.hash?"#"+id:id;
+},_instantiate:function(obj,_3c,_3d){
+var _3e;
+for(var key in obj){
+if(key.charAt(0)=="@"){
+continue;
+}
+var cls=dojo.getObject(key);
+if(!cls){
+continue;
+}
+var _3f={};
+var _40=cls.prototype;
+var _41=dojo.isArray(obj[key])?obj[key]:[obj[key]];
+for(var i=0;i<_41.length;i++){
+for(var _42 in _41[i]){
+if(_42.charAt(0)=="@"){
+var val=_41[i][_42];
+_42=_42.substring(1);
+if(typeof _40[_42]=="string"){
+_3f[_42]=val;
+}else{
+if(typeof _40[_42]=="number"){
+_3f[_42]=val-0;
+}else{
+if(typeof _40[_42]=="boolean"){
+_3f[_42]=(val!="false");
+}else{
+if(typeof _40[_42]=="object"){
+_3f[_42]=eval("("+val+")");
+}
+}
+}
+}
+}
+}
+_3e=new cls(_3f,_3c);
+if(!_3c){
+this._ws.push(_3e);
+}
+if(_3d&&_3d.addChild){
+_3d.addChild(_3e);
+}
+this._instantiate(_41[i],null,_3e);
+}
+}
+return _3e&&_3e.domNode;
+},getParentWidget:function(){
+var ref=this.srcNodeRef||this.domNode;
+return ref&&ref.parentNode?dijit.getEnclosingWidget(ref.parentNode):null;
+}});
+dojo.declare("dojox.mobile.ListItem",dojox.mobile.AbstractItem,{rightText:"",btnClass:"",anchorLabel:false,buildRendering:function(){
+this.inheritParams();
+var a=this.anchorNode=dojo.create("A");
+a.className="mblListItemAnchor";
+var box=dojo.create("DIV");
+box.className="mblListItemTextBox";
+if(this.anchorLabel){
+box.style.cursor="pointer";
+}
+var r=this.srcNodeRef;
+if(r){
+for(var i=0,len=r.childNodes.length;i<len;i++){
+box.appendChild(r.removeChild(r.firstChild));
+}
+}
+if(this.label){
+box.appendChild(dojo.doc.createTextNode(this.label));
+}
+a.appendChild(box);
+if(this.rightText){
+var txt=dojo.create("DIV");
+txt.className="mblRightText";
+txt.innerHTML=this.rightText;
+a.appendChild(txt);
+}
+if(this.moveTo||this.href||this.url||this.clickable){
+var _43=dojo.create("DIV");
+_43.className="mblArrow";
+a.appendChild(_43);
+this.connect(a,"onclick","onClick");
+}else{
+if(this.btnClass){
+var div=this.btnNode=dojo.create("DIV");
+div.className=this.btnClass+" mblRightButton";
+div.appendChild(dojo.create("DIV"));
+div.appendChild(dojo.create("P"));
+var _44=dojo.create("DIV");
+_44.className="mblRightButtonContainer";
+_44.appendChild(div);
+a.appendChild(_44);
+dojo.addClass(a,"mblListItemAnchorHasRightButton");
+setTimeout(function(){
+_44.style.width=div.offsetWidth+"px";
+_44.style.height=div.offsetHeight+"px";
+if(dojo.isIE){
+a.parentNode.style.height=a.parentNode.offsetHeight+"px";
+}
+});
+}
+}
+if(this.anchorLabel){
+box.style.display="inline";
+}
+var li=this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("LI");
+li.className="mblListItem";
+li.appendChild(a);
+this.setIcon();
+},setIcon:function(){
+if(this.iconNode){
+return;
+}
+var a=this.anchorNode;
+if(this.icon&&this.icon!="none"){
+var img=this.iconNode=dojo.create("IMG");
+img.className="mblListItemIcon";
+img.src=this.icon;
+this.domNode.insertBefore(img,a);
+dojox.mobile.setupIcon(this.iconNode,this.iconPos);
+dojo.removeClass(a,"mblListItemAnchorNoIcon");
+}else{
+dojo.addClass(a,"mblListItemAnchorNoIcon");
+}
+},onClick:function(e){
+if(this.anchorLabel){
+for(var p=e.target;p.tagName!="LI";p=p.parentNode){
+if(p.className=="mblListItemTextBox"){
+dojo.addClass(p,"mblListItemTextBoxSelected");
+setTimeout(function(){
+dojo.removeClass(p,"mblListItemTextBoxSelected");
+},1000);
+this.onAnchorLabelClicked(e);
+return;
+}
+}
+}
+var a=e.currentTarget;
+var li=a.parentNode;
+dojo.addClass(li,"mblItemSelected");
+setTimeout(function(){
+dojo.removeClass(li,"mblItemSelected");
+},1000);
+this.transitionTo(this.moveTo,this.href,this.url);
+},onAnchorLabelClicked:function(e){
+}});
+dojo.declare("dojox.mobile.Switch",dijit._Widget,{value:"on",leftLabel:"ON",rightLabel:"OFF",_width:53,buildRendering:function(){
+this.domNode=this.srcNodeRef||dojo.doc.createElement("DIV");
+this.domNode.className="mblSwitch";
+this.domNode.innerHTML="<div class=\"mblSwitchInner\">"+"<div class=\"mblSwitchBg mblSwitchBgLeft\">"+"<div class=\"mblSwitchText mblSwitchTextLeft\">"+this.leftLabel+"</div>"+"</div>"+"<div class=\"mblSwitchBg mblSwitchBgRight\">"+"<div class=\"mblSwitchText mblSwitchTextRight\">"+this.rightLabel+"</div>"+"</div>"+"<div class=\"mblSwitchKnob\"></div>"+"</div>";
+var n=this.inner=this.domNode.firstChild;
+this.left=n.childNodes[0];
+this.right=n.childNodes[1];
+this.knob=n.childNodes[2];
+dojo.addClass(this.domNode,(this.value=="on")?"mblSwitchOn":"mblSwitchOff");
+this[this.value=="off"?"left":"right"].style.display="none";
+},postCreate:function(){
+this.connect(this.knob,"onclick","onClick");
+this.connect(this.knob,"touchstart","onTouchStart");
+this.connect(this.knob,"mousedown","onTouchStart");
+},_changeState:function(_45){
+this.inner.style.left="";
+dojo.addClass(this.domNode,"mblSwitchAnimation");
+dojo.removeClass(this.domNode,(_45=="on")?"mblSwitchOff":"mblSwitchOn");
+dojo.addClass(this.domNode,(_45=="on")?"mblSwitchOn":"mblSwitchOff");
+var _46=this;
+setTimeout(function(){
+_46[_45=="off"?"left":"right"].style.display="none";
+dojo.removeClass(_46.domNode,"mblSwitchAnimation");
+},300);
+},onClick:function(e){
+if(this._moved){
+return;
+}
+this.value=(this.value=="on")?"off":"on";
+this._changeState(this.value);
+this.onStateChanged(this.value);
+},onTouchStart:function(e){
+this._moved=false;
+this.innerStartX=this.inner.offsetLeft;
+if(e.targetTouches){
+this.touchStartX=e.targetTouches[0].clientX;
+this._conn1=dojo.connect(this.inner,"touchmove",this,"onTouchMove");
+this._conn2=dojo.connect(this.inner,"touchend",this,"onTouchEnd");
+}
+this.left.style.display="block";
+this.right.style.display="block";
+return false;
+},onTouchMove:function(e){
+e.preventDefault();
+var dx;
+if(e.targetTouches){
+if(e.targetTouches.length!=1){
+return false;
+}
+dx=e.targetTouches[0].clientX-this.touchStartX;
+}else{
+dx=e.clientX-this.touchStartX;
+}
+var pos=this.innerStartX+dx;
+var d=10;
+if(pos<=-(this._width-d)){
+pos=-this._width;
+}
+if(pos>=-d){
+pos=0;
+}
+this.inner.style.left=pos+"px";
+this._moved=true;
+return true;
+},onTouchEnd:function(e){
+dojo.disconnect(this._conn1);
+dojo.disconnect(this._conn2);
+if(this.innerStartX==this.inner.offsetLeft){
+return;
+}
+var _47=(this.inner.offsetLeft<-(this._width/2))?"off":"on";
+this._changeState(_47);
+if(_47!=this.value){
+this.value=_47;
+this.onStateChanged(this.value);
+}
+},onStateChanged:function(_48){
+}});
+dojo.declare("dojox.mobile.IconContainer",dijit._Widget,{defaultIcon:"",transition:"below",pressedIconOpacity:0.4,iconBase:"",iconPos:"",back:"Home",label:"My Application",single:false,buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("UL");
+this.domNode.className="mblIconContainer";
+var t=this._terminator=dojo.create("LI");
+t.className="mblIconItemTerminator";
+t.innerHTML="&nbsp;";
+this.domNode.appendChild(t);
+},_setupSubNodes:function(ul){
+var len=this.domNode.childNodes.length-1;
+for(i=0;i<len;i++){
+child=this.domNode.childNodes[i];
+if(child.nodeType!=1){
+continue;
+}
+w=dijit.byNode(child);
+if(this.single){
+w.subNode.firstChild.style.display="none";
+}
+ul.appendChild(w.subNode);
+}
+},startup:function(){
+var ul,i,len,_49,w;
+if(this.transition=="below"){
+this._setupSubNodes(this.domNode);
+}else{
+var _4a=new dojox.mobile.View({id:this.id+"_mblApplView"});
+var _4b=this;
+_4a.onAfterTransitionIn=function(_4c,dir,_4d,_4e,_4f){
+_4b._opening._open_1();
+};
+_4a.domNode.style.visibility="hidden";
+var _50=_4a._heading=new dojox.mobile.Heading({back:this.back,label:this.label,moveTo:this.domNode.parentNode.id,transition:this.transition});
+_4a.addChild(_50);
+ul=dojo.doc.createElement("UL");
+ul.className="mblIconContainer";
+ul.style.marginTop="0px";
+this._setupSubNodes(ul);
+_4a.domNode.appendChild(ul);
+dojo.doc.body.appendChild(_4a.domNode);
+}
+},closeAll:function(){
+var len=this.domNode.childNodes.length;
+for(var i=0;i<len;i++){
+child=this.domNode.childNodes[i];
+if(child.nodeType!=1){
+continue;
+}
+if(child==this._terminator){
+break;
+}
+w=dijit.byNode(child);
+w.containerNode.parentNode.style.display="none";
+w.setOpacity(w.iconNode,1);
+}
+},addChild:function(_51){
+this.domNode.insertBefore(_51.domNode,this._terminator);
+_51.transition=this.transition;
+if(this.transition=="below"){
+this.domNode.appendChild(_51.subNode);
+}
+_51.inheritParams();
+_51.setIcon();
+}});
+dojo.declare("dojox.mobile.IconItem",dojox.mobile.AbstractItem,{lazy:false,requires:"",timeout:10,templateString:"<li class=\"mblIconItem\">"+"<div class=\"mblIconArea\" dojoAttachPoint=\"iconDivNode\">"+"<div><img src=\"${icon}\" dojoAttachPoint=\"iconNode\"></div>${label}"+"</div>"+"</li>",templateStringSub:"<li class=\"mblIconItemSub\" lazy=\"${lazy}\" style=\"display:none;\" dojoAttachPoint=\"contentNode\">"+"<h2 class=\"mblIconContentHeading\" dojoAttachPoint=\"closeNode\">"+"<div class=\"mblBlueMinusButton\" style=\"position:absolute;left:4px;top:2px;\" dojoAttachPoint=\"closeIconNode\"><div></div></div>${label}"+"</h2>"+"<div class=\"mblContent\" dojoAttachPoint=\"containerNode\"></div>"+"</li>",createTemplate:function(s){
+dojo.forEach(["lazy","icon","label"],function(v){
+while(s.indexOf("${"+v+"}")!=-1){
+s=s.replace("${"+v+"}",this[v]);
+}
+},this);
+var div=dojo.doc.createElement("DIV");
+div.innerHTML=s;
+var _52=div.getElementsByTagName("*");
+var i,len,s1;
+len=_52.length;
+for(i=0;i<len;i++){
+s1=_52[i].getAttribute("dojoAttachPoint");
+if(s1){
+this[s1]=_52[i];
+}
+}
+var _53=div.removeChild(div.firstChild);
+div=null;
+return _53;
+},buildRendering:function(){
+this.inheritParams();
+this.domNode=this.createTemplate(this.templateString);
+this.subNode=this.createTemplate(this.templateStringSub);
+this.subNode._parentNode=this.domNode;
+if(this.srcNodeRef){
+for(var i=0,len=this.srcNodeRef.childNodes.length;i<len;i++){
+this.containerNode.appendChild(this.srcNodeRef.removeChild(this.srcNodeRef.firstChild));
+}
+this.srcNodeRef.parentNode.replaceChild(this.domNode,this.srcNodeRef);
+this.srcNodeRef=null;
+}
+this.setIcon();
+},setIcon:function(){
+this.iconNode.src=this.icon;
+dojox.mobile.setupIcon(this.iconNode,this.iconPos);
+},postCreate:function(){
+this.connect(this.iconNode,"onmousedown","onMouseDownIcon");
+this.connect(this.iconNode,"onclick","iconClicked");
+this.connect(this.closeIconNode,"onclick","closeIconClicked");
+this.connect(this.iconNode,"onerror","onError");
+},highlight:function(){
+dojo.addClass(this.iconDivNode,"mblVibrate");
+if(this.timeout>0){
+var _54=this;
+setTimeout(function(){
+_54.unhighlight();
+},this.timeout*1000);
+}
+},unhighlight:function(){
+dojo.removeClass(this.iconDivNode,"mblVibrate");
+},setOpacity:function(_55,val){
+_55.style.opacity=val;
+_55.style.mozOpacity=val;
+_55.style.khtmlOpacity=val;
+_55.style.webkitOpacity=val;
+},instantiateWidget:function(e){
+var _56=this.containerNode.getElementsByTagName("*");
+var len=_56.length;
+var s;
+for(var i=0;i<len;i++){
+s=_56[i].getAttribute("dojoType");
+if(s){
+dojo["require"](s);
+}
+}
+if(len>0){
+(dojox.mobile.parser||dojo.parser).parse(this.containerNode);
+}
+this.lazy=false;
+},isOpen:function(e){
+return this.containerNode.style.display!="none";
+},onMouseDownIcon:function(e){
+this.setOpacity(this.iconNode,this.getParentWidget().pressedIconOpacity);
+},iconClicked:function(e){
+if(e){
+setTimeout(dojo.hitch(this,function(d){
+this.iconClicked();
+}),0);
+return;
+}
+if(this.moveTo||this.href||this.url){
+this.transitionTo(this.moveTo,this.href,this.url);
+setTimeout(dojo.hitch(this,function(d){
+this.setOpacity(this.iconNode,1);
+}),1500);
+}else{
+this.open();
+}
+},closeIconClicked:function(e){
+if(e){
+setTimeout(dojo.hitch(this,function(d){
+this.closeIconClicked();
+}),0);
+return;
+}
+this.close();
+},open:function(){
+var _57=this.getParentWidget();
+if(this.transition=="below"){
+if(_57.single){
+_57.closeAll();
+this.setOpacity(this.iconNode,this.getParentWidget().pressedIconOpacity);
+}
+this._open_1();
+}else{
+_57._opening=this;
+if(_57.single){
+_57.closeAll();
+var _58=dijit.byId(_57.id+"_mblApplView");
+_58._heading.setLabel(this.label);
+}
+this.transitionTo(_57.id+"_mblApplView");
+}
+},_open_1:function(){
+this.contentNode.style.display="";
+this.unhighlight();
+if(this.lazy){
+if(this.requires){
+dojo.forEach(this.requires.split(/,/),function(c){
+dojo["require"](c);
+});
+}
+this.instantiateWidget();
+}
+this.contentNode.scrollIntoView();
+this.onOpen();
+},close:function(){
+if(dojo.isWebKit){
+var t=this.domNode.parentNode.offsetWidth/8;
+var y=this.iconNode.offsetLeft;
+var pos=0;
+for(var i=1;i<=3;i++){
+if(t*(2*i-1)<y&&y<=t*(2*(i+1)-1)){
+pos=i;
+break;
+}
+}
+dojo.addClass(this.containerNode.parentNode,"mblCloseContent mblShrink"+pos);
+}else{
+this.containerNode.parentNode.style.display="none";
+}
+this.setOpacity(this.iconNode,1);
+this.onClose();
+},onOpen:function(){
+},onClose:function(){
+},onError:function(){
+this.iconNode.src=this.getParentWidget().defaultIcon;
+}});
+dojo.declare("dojox.mobile.Button",dijit._Widget,{btnClass:"mblBlueButton",duration:1000,label:null,buildRendering:function(){
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("BUTTON");
+this.domNode.className="mblButton "+this.btnClass;
+if(this.label){
+this.domNode.innerHTML=this.label;
+}
+this.connect(this.domNode,"onclick","onClick");
+},onClick:function(e){
+var _59=this.domNode;
+var c="mblButtonSelected "+this.btnClass+"Selected";
+dojo.addClass(_59,c);
+setTimeout(function(){
+dojo.removeClass(_59,c);
+},this.duration);
+}});
+dojo.declare("dojox.mobile.TabContainer",dijit._Widget,{iconBase:"",iconPos:"",buildRendering:function(){
+var _5a=this.domNode=this.srcNodeRef;
+_5a.className="mblTabContainer";
+var _5b=this.tabHeaderNode=dojo.doc.createElement("DIV");
+var _5c=this.containerNode=dojo.doc.createElement("DIV");
+for(var i=0,len=_5a.childNodes.length;i<len;i++){
+_5c.appendChild(_5a.removeChild(_5a.firstChild));
+}
+_5b.className="mblTabPanelHeader";
+_5b.align="center";
+_5a.appendChild(_5b);
+_5c.className="mblTabPanelPane";
+_5a.appendChild(_5c);
+},startup:function(){
+this.createTabButtons();
+this.inherited(arguments);
+},createTabButtons:function(){
+var div=dojo.doc.createElement("DIV");
+div.align="center";
+var tbl=dojo.doc.createElement("TABLE");
+var _5d=tbl.insertRow(-1).insertCell(-1);
+var _5e=this.containerNode.childNodes;
+for(var i=0;i<_5e.length;i++){
+var _5f=_5e[i];
+if(_5f.nodeType!=1){
+continue;
+}
+var _60=dijit.byNode(_5f);
+if(_60.selected||!this._selectedPane){
+this._selectedPane=_60;
+}
+_5f.style.display="none";
+var tab=dojo.doc.createElement("DIV");
+tab.className="mblTabButton";
+if(_60.icon){
+var _61=dojo.create("DIV");
+var img=dojo.create("IMG");
+_61.className="mblTabButtonImgDiv";
+img.src=_60.icon;
+dojox.mobile.setupIcon(img,_60.iconPos);
+_61.appendChild(img);
+tab.appendChild(_61);
+}
+tab.appendChild(dojo.doc.createTextNode(_60.label));
+tab.pane=_60;
+_60.tab=tab;
+this.connect(tab,"onclick","onTabClick");
+_5d.appendChild(tab);
+}
+div.appendChild(tbl);
+this.tabHeaderNode.appendChild(div);
+this.selectTab(this._selectedPane.tab);
+},selectTab:function(tab){
+this._selectedPane.domNode.style.display="none";
+dojo.removeClass(this._selectedPane.tab,"mblTabButtonSelected");
+this._selectedPane=tab.pane;
+this._selectedPane.domNode.style.display="";
+dojo.addClass(tab,"mblTabButtonSelected");
+},onTabClick:function(e){
+var tab=e.currentTarget;
+dojo.addClass(tab,"mblTabButtonHighlighted");
+setTimeout(function(){
+dojo.removeClass(tab,"mblTabButtonHighlighted");
+},200);
+this.selectTab(tab);
+}});
+dojo.declare("dojox.mobile.TabPane",dijit._Widget,{label:"",icon:"",iconPos:"",selected:false,inheritParams:function(){
+var _62=this.getParentWidget();
+if(_62){
+if(!this.icon){
+this.icon=_62.iconBase;
+}
+if(!this.iconPos){
+this.iconPos=_62.iconPos;
+}
+}
+},buildRendering:function(){
+this.inheritParams();
+this.domNode=this.containerNode=this.srcNodeRef||dojo.doc.createElement("DIV");
+this.domNode.className="mblTabPane";
+},getParentWidget:function(){
+var ref=this.srcNodeRef||this.domNode;
+return ref&&ref.parentNode?dijit.getEnclosingWidget(ref.parentNode):null;
+}});
+dojo.declare("dojox.mobile.ProgressIndicator",null,{interval:100,colors:["#C0C0C0","#C0C0C0","#C0C0C0","#C0C0C0","#C0C0C0","#C0C0C0","#B8B9B8","#AEAFAE","#A4A5A4","#9A9A9A","#8E8E8E","#838383"],_bars:[],constructor:function(){
+this.domNode=dojo.create("DIV");
+this.domNode.className="mblProgContainer";
+for(var i=0;i<12;i++){
+var div=dojo.create("DIV");
+div.className="mblProg mblProg"+i;
+this.domNode.appendChild(div);
+this._bars.push(div);
+}
+},start:function(){
+var _63=0;
+var _64=this;
+this.timer=setInterval(function(){
+_63--;
+_63=_63<0?11:_63;
+var c=_64.colors;
+for(var i=0;i<12;i++){
+var idx=(_63+i)%12;
+_64._bars[i].style.backgroundColor=c[idx];
+}
+},this.interval);
+},stop:function(){
+if(this.timer){
+clearInterval(this.timer);
+}
+this.timer=null;
+if(this.domNode.parentNode){
+this.domNode.parentNode.removeChild(this.domNode);
+}
+}});
+dojox.mobile.ProgressIndicator._instance=null;
+dojox.mobile.ProgressIndicator.getInstance=function(){
+if(!dojox.mobile.ProgressIndicator._instance){
+dojox.mobile.ProgressIndicator._instance=new dojox.mobile.ProgressIndicator();
+}
+return dojox.mobile.ProgressIndicator._instance;
+};
+dojox.mobile.addClass=function(){
+var _65=document.getElementsByTagName("link");
+for(var i=0,len=_65.length;i<len;i++){
+if(_65[i].href.match(/dojox\/mobile\/themes\/(\w+)\//)){
+dojox.mobile.theme=RegExp.$1;
+dojo.addClass(dojo.body(),dojox.mobile.theme);
+break;
+}
+}
+};
+dojox.mobile.setupIcon=function(_66,_67){
+if(_66&&_67){
+var arr=dojo.map(_67.split(/[ ,]/),function(_68){
+return _68-0;
+});
+var t=arr[0];
+var r=arr[1]+arr[2];
+var b=arr[0]+arr[3];
+var l=arr[1];
+_66.style.clip="rect("+t+"px "+r+"px "+b+"px "+l+"px)";
+_66.style.top=-t+"px";
+_66.style.left=-l+"px";
+}
+};
+dojo._loaders.unshift(function(){
+var _69=dojo.body().getElementsByTagName("*");
+var i,len,s;
+len=_69.length;
+for(i=0;i<len;i++){
+s=_69[i].getAttribute("dojoType");
+if(s){
+if(_69[i].parentNode.getAttribute("lazy")=="true"){
+_69[i].setAttribute("__dojoType",s);
+_69[i].removeAttribute("dojoType");
+}
+}
+}
+});
+dojo.addOnLoad(function(){
+dojox.mobile.addClass();
+if(dojo.config["mblApplyPageStyles"]!==false){
+dojo.addClass(dojo.doc.documentElement,"mobile");
+}
+if(dojo.config["mblHideAddressBar"]!==false){
+var _6a=function(){
+setTimeout(function(){
+scrollTo(0,1);
+},100);
+};
+_6a();
+}
+var _6b=dojo.body().getElementsByTagName("*");
+var i,len=_6b.length,s;
+for(i=0;i<len;i++){
+s=_6b[i].getAttribute("__dojoType");
+if(s){
+_6b[i].setAttribute("dojoType",s);
+_6b[i].removeAttribute("__dojoType");
+}
+}
+if(dojo.hash){
+var _6c=function(_6d){
+var arr;
+arr=dijit.findWidgets(_6d);
+var _6e=arr;
+for(var i=0;i<_6e.length;i++){
+arr=arr.concat(_6c(_6e[i].containerNode));
+}
+return arr;
+};
+dojo.subscribe("/dojo/hashchange",null,function(_6f){
+var _70=dojox.mobile._currentView;
+if(!_70){
+return;
+}
+var _71=dojox.mobile._params;
+if(!_71){
+var _72=_6f?_6f:dojox.mobile._defaultView.id;
+var _73=_6c(_70.domNode);
+var dir=1,_74="slide";
+for(i=0;i<_73.length;i++){
+var w=_73[i];
+if("#"+_72==w.moveTo){
+_74=w.transition;
+dir=(w instanceof dojox.mobile.Heading)?-1:1;
+break;
+}
+}
+_71=[_72,dir,_74];
+}
+_70.performTransition.apply(_70,_71);
+dojox.mobile._params=null;
+});
+}
+dojo.body().style.visibility="visible";
+});
+dijit.getEnclosingWidget=function(_75){
+while(_75&&_75.tagName!=="BODY"){
+if(_75.getAttribute&&_75.getAttribute("widgetId")){
+return dijit.registry.byId(_75.getAttribute("widgetId"));
+}
+_75=_75._parentNode||_75.parentNode;
+}
+return null;
+};
+}
Index: trunk/web/dojo/dojox/mobile/themes/android/android.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/android.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/android.css	(revision 9)
@@ -0,0 +1,687 @@
+body {
+	visibility: hidden;
+}
+html.mobile, .mobile body {
+	width: 100%;
+	margin: 0px;
+	padding: 0px;
+}
+.mobile body {
+	overflow-x: hidden;
+	-webkit-text-size-adjust: none;
+	background-color: black;
+	font-family: Helvetica;
+	font-size: 17px;
+	min-height: 440px;
+}
+.mblView {
+	position: relative;
+	top: 0px;
+	left: 0px;
+	width: 100%;
+	color: white;
+}
+.mblView.out {
+	position: absolute;
+}
+.mblView.in {
+	position: absolute;
+}
+.slide.out {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideOut;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateX(-100%);
+}
+.slide.in {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideIn;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateX(0px);
+}
+.slide.out.reverse {
+	-webkit-animation-name: slideOutReverse;
+}
+.slide.in.reverse {
+	-webkit-animation-name: slideInReverse;
+}
+@-webkit-keyframes slideOut {
+	from { -webkit-transform: translateX(0px); }
+	to { -webkit-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideIn {
+	from { -webkit-transform: translateX(100%); }
+	to { -webkit-transform: translateX(0px); }
+}
+@-webkit-keyframes slideOutReverse {
+	from { -webkit-transform: translateX(0px); }
+	to { -webkit-transform: translateX(100%); }
+}
+@-webkit-keyframes slideInReverse {
+	from { -webkit-transform: translateX(-100%); }
+	to { -webkit-transform: translateX(0px); }
+}
+.flip.out {
+	-webkit-animation-duration: .6s;
+	-webkit-animation-name: flipOut;
+	-webkit-animation-timing-function: ease-in;
+	-webkit-transform: rotateY(90deg);
+}
+.flip.in {
+	-webkit-animation-duration: .6s;
+	-webkit-animation-name: flipIn;
+	-webkit-animation-timing-function: ease-out;
+}
+@-webkit-keyframes flipOut {
+	0% { -webkit-transform: rotateY(0deg) scale(1); }
+	50% { -webkit-transform: rotateY(90deg) scale(.8); }
+	100% { -webkit-transform: rotateY(90deg) scale(.8); }
+}
+@-webkit-keyframes flipIn {
+	0% { -webkit-transform: rotateY(90deg) scale(.8); }
+	50% { -webkit-transform: rotateY(90deg) scale(.8); }
+	100% { -webkit-transform: rotateY(0deg) scale(1); }
+}
+.fade.out {
+	-webkit-animation-duration: 1s;
+	-webkit-animation-name: fadeOut;
+	-webkit-animation-timing-function: ease-in;
+}
+.fade.in {
+	-webkit-animation-duration: 1s;
+	-webkit-animation-name: fadeIn;
+	-webkit-animation-timing-function: ease-out;
+}
+@-webkit-keyframes fadeOut {
+	from { opacity: 1; }
+	to { opacity: 0; }
+}
+@-webkit-keyframes fadeIn {
+	from { opacity: 0; }
+	to { opacity: 1; }
+}
+.mblHeading {
+	position: relative;
+	height: 25px;
+	margin: 0px;
+	padding: 0px 0px 0px 4px;
+	background-color: #8C8A8C;
+	background: -webkit-gradient(linear, left top, left bottom, from(#9C9E9C), to(#848284));
+	border-top: 1px solid #CDD5DF;
+	border-bottom: 1px solid #2D3642;
+	font-family: Helvetica;
+	font-size: 14px;
+	color: white;
+	text-align: center;
+	line-height: 23px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.dj_webkit .mblArrowButtonHead {
+	position: absolute;
+	top: 5px;
+	left: 9px;
+	width: 19px;
+	height: 16px;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #3F3E3E;
+	-webkit-transform: scale(.8,1) rotate(45deg);
+	background: -webkit-gradient(linear, left top, left bottom, from(#E5E5E5), to(#7F7F7F), color-stop(0.5, #ADADAD), color-stop(0.5, #909090));
+}
+.mblArrowButtonBody {
+	position: absolute;
+	top: 0px;
+	left: 19px;
+	padding: 0px 10px 0px 3px;
+	height: 23px;
+	border-width: 1px 1px 1px 0px;
+	border-style: inset;
+	border-color: #3F3E3E;
+	font-family: Helvetica;
+	font-size: 13px;
+	color: white;
+	line-height: 23px;
+	cursor: pointer;
+	-webkit-border-radius: 5px;
+	background-color: #ADADAD;
+	background: -webkit-gradient(linear, left top, left bottom, from(#E5E5E5), to(#7F7F7F), color-stop(0.5, #ADADAD), color-stop(0.5, #909090));
+	-webkit-tap-highlight-color: transparent;
+}
+.dj_ie .mblArrowButtonBody, .dj_ff3 .mblArrowButtonBody {
+	padding: 0px 10px 0px 10px;
+}
+.dj_webkit .mblArrowButtonNeck {
+	position: absolute;
+	top: 0px;
+	left: 19px;
+	width: 4px;
+	height: 23px;
+	border-width: 1px 0px 1px 0px;
+	border-style: inset;
+	border-color: #3F3E3E;
+	background: -webkit-gradient(linear, left top, left bottom, from(#E5E5E5), to(#7F7F7F), color-stop(0.5, #ADADAD), color-stop(0.5, #909090));
+}
+.mblArrowButtonSelected .mblArrowButtonHead {
+	background: -webkit-gradient(linear, left top, left bottom, from(#AD7500), to(#FFAA00), color-stop(0.06, #FFB200), color-stop(0.5, #FFC700));
+}
+.mblArrowButtonSelected .mblArrowButtonBody, .mblArrowButtonSelected .mblArrowButtonNeck {
+	background-color: #FFC700;
+	background: -webkit-gradient(linear, left top, left bottom, from(#AD7500), to(#FFAA00), color-stop(0.06, #FFB200), color-stop(0.5, #FFC700));
+}
+.mblRoundRect {
+	margin: 7px 9px 16px;
+	padding: 8px;
+	border: 1px solid #ADAAAD;
+	-webkit-border-radius: 8px;
+	-moz-border-radius: 8px;
+	color: white;
+	background-color: black;
+}
+.mblRoundRect.mblShadow {
+	-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
+}
+.mblEdgeToEdgeCategory {
+	position: relative;
+	height: 22px;
+	margin: 0px;
+	padding: 0px 10px;
+	border-bottom: 1px solid #393439;
+	background-color: #212021;
+	font-family: Helvetica;
+	font-size: 16px;
+	color: white;
+	line-height: 22px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblRoundRectCategory {
+	color: white;
+	margin: 18px 0px 0px 20px;
+	font-family: Helvetica;
+	font-size: 16px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblRoundRectList {
+	margin: 7px 9px 16px;
+	padding: 0px;
+	border: 1px solid #ADAAAD;
+	-webkit-border-radius: 8px;
+	-moz-border-radius: 8px;
+	background-color: white;
+	position: relative; 
+}
+.mblEdgeToEdgeList {
+	padding: 0px;
+	background-color: black;
+	position: relative; 
+	margin: 0px; 
+}
+.mblListItem {
+	list-style-type: none;
+	height: 64px;
+	border-bottom: solid 1px #313431;
+	line-height: 64px;
+	font-size: 21px;
+	position: relative;
+	color: white;
+	background-color: black;
+}
+.mblListItemIcon {
+	position: absolute;
+	margin: 18px 0px 0px 7px;
+}
+.mblListItem.mblVariableHeight {
+	line-height: normal;
+	height: auto;
+	padding: 11px 6px 10px 6px;
+}
+.mblItemSelected {
+	background-color: #FFC700;
+	background: -webkit-gradient(linear, left top, left bottom, from(#AD7500), to(#FFAA00), color-stop(0.06, #FFB200), color-stop(0.5, #FFC700));
+}
+li .mblListItemTextBox {
+	padding-right: 28px;
+}
+li .mblListItemTextBoxSelected {
+	background-color: #048BF4;
+}
+.mblRoundRectList .mblListItem:first-child {
+	-webkit-border-top-left-radius: 8px;
+	-webkit-border-top-right-radius: 8px;
+	-moz-border-radius-topleft: 8px;
+	-moz-border-radius-topright: 8px;
+}
+.mblRoundRectList .mblListItem:last-child {
+	border-bottom-width: 0px;
+	-webkit-border-bottom-left-radius: 8px;
+	-webkit-border-bottom-right-radius: 8px;
+	-moz-border-radius-bottomleft: 8px;
+	-moz-border-radius-bottomright: 8px;
+}
+.mblEdgeToEdgeList .mblListItem:last-child {
+	border-bottom-color: #313431;
+}
+.mblListItem a.mblListItemAnchor {
+	background-position: 14px 17px;
+	display: block;
+	padding-left: 53px;
+	text-decoration: none;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblListItem a.mblListItemAnchorNoIcon {
+	padding-left: 14px;
+}
+.mblItemSelected a.mblListItemAnchor {
+	color: black;
+}
+.mblListItem a.mblListItemAnchorHasRightButton {
+	padding-right: 50px;
+}
+.mblListItem .mblArrow {
+	position: absolute;
+	top: 26px;
+	right: 12px;
+	width: 6px;
+	height: 6px;
+	font-size: 1px;
+	-webkit-transform: rotate(45deg);
+	border-width: 3px 3px 0px 0px;
+	border-style: solid;
+	border-color: #808080;
+}
+.mblItemSelected .mblArrow {
+	border-color: white;
+}
+.mblVariableHeight div.mblArrow {
+	top: 50%;
+	margin-top: -4px;
+}
+.mblRightText {
+	position: absolute;
+	top: 20px;
+	right: 30px;
+	color: white;
+	line-height: normal;
+}
+.mblListItem .mblRightButtonContainer {
+	position: absolute;
+	top: 50%;
+	right: 12px;
+}
+.mblListItem .mblRightButton {
+	position: absolute;
+	top: -50%;
+}
+.mblListItemSubText {
+	font-size: 14px;
+	color: gray;
+}
+.mblSwitch {
+	position: relative;
+	width: 94px;
+	height: 27px;
+	overflow: hidden;
+}
+.mblItemSwitch {
+	position: absolute;
+	top: 18px;
+	right: 12px;
+}
+.mblSwitchInner {
+	position: absolute;
+	top: 0px;
+	height: 27px;
+}
+.mblSwitchAnimation .mblSwitchInner {
+	-webkit-transition-property: left;
+	-webkit-transition-duration: .3s;
+}
+.mblSwitchOn .mblSwitchInner {
+	left: 0px;
+}
+.mblSwitchOff .mblSwitchInner {
+	left: -53px;
+}
+.mblSwitchBg {
+	position: absolute;
+	top: 0px;
+	height: 27px;
+	border-width: 1px;
+	border-style: inset;
+	border-color: #9CACC0;
+	font-family: Helvetica;
+	font-size: 16px;
+	font-weight: bold;
+	line-height: 29px;
+	-webkit-border-radius: 2px;
+	-moz-border-radius: 2px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblSwitchBgLeft {
+	left: 0px;
+	width: 94px;
+	color: white;
+	background-color: #00D300;
+	background: -webkit-gradient(linear, left top, left bottom, from(#00A200), to(#00D300), color-stop(0.2, #00BA00), color-stop(0.2, #00BA00));
+}
+.mblSwitchBgRight {
+	left: 53px;
+	width: 94px;
+	color: #7F7F7F;
+	background-color: #EEEEEE;
+	background: -webkit-gradient(linear, left top, left bottom, from(#BDBEBD), to(#F7F3F7));
+}
+.mblSwitchKnob {
+	position: absolute;
+	top: 1px;
+	left: 53px;
+	width: 41px;
+	height: 26px;
+	font-size: 1px;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #EFEFEF #A5A5A5 #969696 #325E9E;
+	line-height: 29px;
+	background-color: #CCCCCC;
+	background: -webkit-gradient(linear, left top, left bottom, from(#9C9A9C), to(#848284));
+	-webkit-border-radius: 2px;
+	-moz-border-radius: 2px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+}
+.mblSwitchText {
+	position: relative;
+	top: 0px;
+	width: 53px;
+	height: 27px;
+	padding: 0px;
+	text-align: center;
+}
+.mblSwitchTextLeft {
+	left: 0px;
+}
+.mblSwitchTextRight {
+	left: 40px;
+}
+.mblIconContainer {
+	padding: 0px;
+	margin: 20px 0px 0px 10px;
+	padding: 0px 0px 40px 0px;
+}
+.mblIconItem {
+	list-style-type: none;
+	float: left;
+}
+.mblIconItemTerminator {
+	list-style-type: none;
+	height: 20px;
+	clear: both;
+}
+.mblIconItemSub {
+	list-style-type: none;
+	margin-left: -10px;
+	background-color: white;
+	color: black;
+}
+.mblIconArea {
+	font-family: Helvetica;
+	font-size: 12px;
+	height: 78px;
+	width: 74px;
+	text-align: center;
+	margin-bottom: 10px;
+	color: white;
+}
+.mblIconArea DIV {
+	position: relative;
+	height: 65px;
+}
+.mblIconArea IMG {
+	position: absolute;
+	top: 0px;
+	left: 6px;
+}
+.mblContent {
+	clear: both;
+	padding-bottom: 20px;
+}
+table.mblClose {
+	clear: both;
+	cursor: pointer;
+}
+.mblVibrate{
+	position: relative;
+	-webkit-animation-duration: .5s;
+	-webkit-animation-timing-function: ease-in-out;
+	-webkit-animation-iteration-count: 20;
+	-webkit-animation-name: vibrate;
+	-webkit-transform: rotate(0deg);
+}
+@-webkit-keyframes vibrate{
+	0%{
+		-webkit-transform: rotate(-2deg);
+		bottom: -1px;
+		left: -1px;
+	}
+	25% {
+		-webkit-transform: rotate(1deg);
+		bottom: 2px;
+		left: 1px;
+	}
+	50% {
+		-webkit-transform: rotate(-1deg);
+		bottom: -2px;
+		left: -1px;
+	}
+	75% {
+		-webkit-transform: rotate(2deg);
+		bottom: 2px;
+		left: 1px;
+	}
+	100% {
+		-webkit-transform: rotate(-2deg);
+		bottom: -1px;
+		left: -1px;
+	}
+}
+.mblCloseContent{
+	-webkit-animation-duration: .3s;
+	-webkit-animation-timing-function: ease-in-out;
+	-webkit-animation-name: shrink;
+	-webkit-transform: scale(0.01);
+}
+.mblCloseContent.mblShrink0{
+	-webkit-animation-name: shrink0;
+}
+.mblCloseContent.mblShrink1{
+	-webkit-animation-name: shrink1;
+}
+.mblCloseContent.mblShrink2{
+	-webkit-animation-name: shrink2;
+}
+.mblCloseContent.mblShrink3{
+	-webkit-animation-name: shrink3;
+}
+@-webkit-keyframes shrink{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: scale(0.01); }
+}
+@-webkit-keyframes shrink0{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(-40%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink1{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(-14%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink2{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(14%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink3{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(40%,-70%) scale(0.01); }
+}
+.mblIconContentHeading {
+	position: relative;
+	clear: both;
+	height: 25px;
+	padding-left: 40px;
+	margin-top: 0px;
+	background: -webkit-gradient(linear, left top, left bottom, from(#E0E4E7), to(#B4BEC6), color-stop(0.5, #C4CCD2), color-stop(0.5, #BFC8CE));
+	border-top: 1px solid #F1F3F4;
+	border-bottom: 1px solid #717D85;
+	font-family: Helvetica;
+	font-size: 14px;
+	color: white;
+	line-height: 26px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblButton {
+	padding: 0px 10px;
+	height: 29px;
+	border-width: 1px 1px 1px 1px;
+	border-style: outset;
+	color: white;
+	font-family: Helvetica;
+	font-size: 13px;
+	line-height: 29px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblBlueButton {
+	border-color: #9CACC0;
+	background-color: #366EDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#7A9DE9), to(#2362DD), color-stop(0.5, #366EDF), color-stop(0.5, #215FDC));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblBlueButtonSelected {
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblTabContainer {
+}
+.mblTabButton {
+	position: relative;
+	float: left;
+	width: 78px;
+	text-align: center;
+	height: 61px;
+	margin-right: 2px;
+	border-width: 0px 1px 0px 1px;
+	border-style: solid;
+	border-color: black #182018 black #393C39;
+	font-family: Helvetica;
+	font-size: 13px;
+	color: white;
+	background-color: #212421;
+	background: -webkit-gradient(linear, left top, left bottom, from(#181818), to(#100C10), color-stop(0.1, #313031));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblTabButtonSelected.mblTabButton {
+	background-color: #8C8E8C;
+	background: -webkit-gradient(linear, left top, left bottom, from(#A59EA5), to(#848284));
+}
+.mblTabButtonHighlighted.mblTabButton {
+	background-color: #FFB600;
+	background: -webkit-gradient(linear, left top, left bottom, from(#FFCB00), to(#FF9A00));
+}
+.mblTabButtonImgDiv {
+	position: relative;
+	margin-left: 24px;
+	height: 40px;
+}
+.mblTabButton IMG {
+	position: absolute;
+	left: 0px;
+	margin-top: 8px;
+}
+.mblTabPanelHeader {
+	position: relative;
+	height: 64px;
+	margin: 0px;
+	padding: 0px 0px 0px 0px;
+	background-color: #000000;
+	border-top: 1px solid #CDD5DF;
+	border-bottom: 2px solid #949694;
+	font-family: Helvetica;
+	font-size: 20px;
+	color: white;
+	text-align: center;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblTabPanelPane {
+}
+.mblTabPane {
+}
+.mblProgContainer {
+	position: absolute;
+	width: 36px;
+	height: 36px;
+	top: 180px;
+	left: 50%;
+	margin: -18px 0px 0px -18px;
+}
+.mblProg {
+	position: absolute;
+	left: 0px;
+	top: 0px;
+	width: 11px;
+	font-size: 1px;
+	height: 4px;
+	overflow: hidden;
+	-webkit-transform-origin: 0 2px;
+	background-color: #C0C0C0;
+	-webkit-border-radius: 2px;
+	-moz-border-radius: 2px;
+}
+.mblProg0 {
+	-webkit-transform: translate(18px,10px) rotate(-90deg);
+}
+.mblProg1 {
+	-webkit-transform: translate(22px,11px) rotate(-60deg);
+}
+.mblProg2 {
+	-webkit-transform: translate(25px,14px) rotate(-30deg);
+}
+.mblProg3 {
+	-webkit-transform: translate(26px,18px) rotate(0deg);
+}
+.mblProg4 {
+	-webkit-transform: translate(25px,22px) rotate(30deg);
+}
+.mblProg5 {
+	-webkit-transform: translate(22px,25px) rotate(60deg);
+}
+.mblProg6 {
+	-webkit-transform: translate(18px,26px) rotate(90deg);
+}
+.mblProg7 {
+	-webkit-transform: translate(14px,25px) rotate(120deg);
+}
+.mblProg8 {
+	-webkit-transform: translate(11px,22px) rotate(150deg);
+}
+.mblProg9 {
+	-webkit-transform: translate(10px,18px) rotate(180deg);
+}
+.mblProg10 {
+	-webkit-transform: translate(11px,14px) rotate(210deg);
+}
+.mblProg11 {
+	-webkit-transform: translate(14px,11px) rotate(240deg);
+}
Index: trunk/web/dojo/dojox/mobile/themes/android/android-compat.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/android-compat.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/android-compat.css	(revision 9)
@@ -0,0 +1,262 @@
+
+.mblHeading {
+	background-image: url(compat/heading-bg.png);
+}
+.mblArrowButtonHead {
+	position: absolute;
+	top: 0px;
+	left: 8px;
+	width: 19px;
+	height: 29px;
+	background-image: url(compat/arrow-button-head.png);
+}
+.mblArrowButtonBody {
+	background-image: url(compat/arrow-button-bg.png);
+}
+.mblRoundCorner {
+	background-color: black;
+	height: 1px;
+	font-size: 1px;
+	overflow: hidden;
+	border-style: solid;
+	border-color: #ADAAAD;
+	border-width: 0px 1px;
+}
+.mblRoundRectContainer {
+	padding: 3px 8px;
+	background-color: black;
+	border-style: solid;
+	border-color: #ADAAAD;
+	border-width: 0px 1px;
+}
+.mblRoundRectList .mblRoundRectContainer {
+	margin: 0px;
+	padding: 0px;
+}
+.mblRoundCorner0T {
+	height: 0px;
+}
+.mblRoundCorner1T {
+	background-color: #ADAAAD;
+	margin: 0px 5px;
+}
+.mblRoundCorner2T {
+	margin: 0px 2px;
+	border-width: 0px 3px;
+}
+.mblRoundCorner3T {
+	margin: 0px 1px;
+	border-width: 0px 2px;
+}
+.mblRoundCorner4T {
+	margin: 0px 1px;
+}
+.mblRoundCorner5T {
+	margin: 0px 1px;
+}
+.mblRoundCorner0B {
+	height: 0px;
+}
+.mblRoundCorner1B {
+	margin: 0px 1px;
+}
+.mblRoundCorner2B {
+	margin: 0px 1px;
+}
+.mblRoundCorner3B {
+	margin: 0px 1px;
+	border-width: 0px 2px;
+}
+.mblRoundCorner4B {
+	margin: 0px 2px;
+	border-width: 0px 3px;
+}
+.mblRoundCorner5B {
+	background-color: #ADAAAD;
+	margin: 0px 5px;
+}
+*html li.mblListItem.mblVariableHeight { 
+	height: 0;
+}
+li.mblListItem .mblArrow {
+	border-style: none;
+	width: 9px;
+	height: 13px;
+	background-image: url(compat/gray-arrow.png);
+}
+li.mblItemSelected .mblArrow {
+	background-image: url(compat/white-arrow.png);
+}
+.mblSwitchInner {
+	width: 100px;
+}
+.mblSwitchBg {
+	border: none;
+}
+.mblSwitchBgLeft {
+	width: 89px;
+	background: none;
+}
+.mblSwitchBgRight {
+	width: 89px;
+	left: 58px;
+	background: none;
+}
+.mblSwitchKnobContainer {
+	position: relative;
+	left: 53px;
+	width: 41px;
+	height: 26px;
+}
+.mblSwitchKnob {
+	position: relative;
+	top: 0px;
+	left: 0px;
+	width: auto;
+	height: 21px;
+	background-image: url(compat/switch-knob-bg.png);
+	border-width: 0px 1px;
+	-moz-border-radius: 0px;
+}
+.mblSwitchCorner {
+	position: relative;
+	height: 1px;
+	font-size: 1px;
+	overflow: hidden;
+	border-style: solid;
+	border-color: #878787;
+}
+.mblSwitchCorner1T {
+	background-color: #848684;
+	margin: 0px 1px;
+	border-width: 0px;
+}
+.mblSwitchCorner2T {
+	background-color: #C0C0C0;
+	margin: 0px 0px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner3T {
+	background-color: #C6C7C6;
+	margin: 0px 0px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner1B {
+	background-color: #FBFBFB;
+	margin: 0px 0px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner2B {
+	background-color: #FBFBFB;
+	margin: 0px 0px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner3B {
+	background-color: #878787;
+	margin: 0px 1px;
+	border-width: 0px;
+}
+.mblSwitchBgLeft .mblSwitchCorner1T {
+	border-width: 0px 2px;
+	background-color: #00A600;
+}
+.mblSwitchBgLeft .mblSwitchCorner2T {
+	background-color: #00A600;
+}
+.mblSwitchBgLeft .mblSwitchCorner3T {
+	background-color: #00A600;
+}
+.mblSwitchBgLeft .mblSwitchCorner1B {
+	background-color: #00D700;
+}
+.mblSwitchBgLeft .mblSwitchCorner2B {
+	background-color: #00D700;
+}
+.mblSwitchBgLeft .mblSwitchCorner3B {
+	background-color: #00D700;
+}
+.mblSwitchText {
+	height: 21px;
+	line-height: 21px;
+}
+.mblSwitchTextLeft {
+	background-image: url(compat/switch-green-bg.png);
+	border-left: 1px solid #848684;
+}
+.mblSwitchTextRight {
+	background-image: url(compat/switch-gray-bg.png);
+	left: 35px;
+	border-right: 1px solid #848684;
+}
+.mblIconContentHeading {
+	background-image: url(compat/icon-content-heading-bg.png);
+}
+.mblBlueButton {
+	background-image: url(compat/blue-button-bg.png);
+}
+.mblBlueButtonSelected {
+	background-image: url(compat/blue-button-sel-bg.png);
+}
+.mblTabPanelHeader {
+	background-image: url(compat/heading-bg.png);
+}
+.mblTabButton {
+	background-image: url(compat/tab-button-bg.png);
+}
+.mblTabButtonSelected {
+	background-image: url(compat/tab-sel-button-bg.png);
+}
+*html .mblTabButton { 
+	behavior: expression(
+		(function(el){
+			if(!el.previousSibling)
+				el.style.borderWidth = "1px";
+			el.style.behavior = "none";
+		})(this)
+	);
+}
+.mblProg {
+	position: absolute;
+	top: 0px;
+	width: 4px;
+	font-size: 1px;
+	height: 36px;
+	overflow: hidden;
+	background-color: #C0C0C0;
+}
+.mblProg0 {
+	left: 0px;
+}
+.mblProg1 {
+	left: 8px;
+}
+.mblProg2 {
+	left: 16px;
+}
+.mblProg3 {
+	left: 24px;
+}
+.mblProg4 {
+	left: 32px;
+}
+.mblProg5 {
+	left: 40px;
+}
+.mblProg6 {
+	left: 48px;
+}
+.mblProg7 {
+	left: 56px;
+}
+.mblProg8 {
+	left: 64px;
+}
+.mblProg9 {
+	left: 72px;
+}
+.mblProg10 {
+	left: 80px;
+}
+.mblProg11 {
+	left: 80px;
+}
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-green-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-green-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/switch-green-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/switch-green-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-green-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/tab-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/tab-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-sel-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-sel-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/tab-sel-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/tab-sel-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-sel-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-sel-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-sel-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-sel-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-sel-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/blue-button-sel-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-gray-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-gray-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/switch-gray-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/switch-gray-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-gray-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/gray-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/gray-arrow.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/gray-arrow.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/gray-arrow.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/gray-arrow.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-blue-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-blue-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/switch-blue-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/switch-blue-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-blue-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-knob-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-knob-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/switch-knob-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/switch-knob-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/switch-knob-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-orange-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-orange-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/tab-orange-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/tab-orange-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/tab-orange-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-head.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-head.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-head.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-head.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/arrow-button-head.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/icon-content-heading-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/android/compat/icon-content-heading-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/android/compat/icon-content-heading-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/android/compat/icon-content-heading-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/android/compat/icon-content-heading-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-sel-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-sel-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-sel-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-sel-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-sel-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-gray-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-gray-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-gray-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-gray-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-gray-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/white-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/white-arrow.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/white-arrow.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/white-arrow.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/white-arrow.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/gray-arrow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/gray-arrow.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/gray-arrow.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/gray-arrow.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/gray-arrow.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/edge-categ-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/edge-categ-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/edge-categ-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/edge-categ-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/edge-categ-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-blue-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-blue-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-blue-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-blue-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-blue-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-knob-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-knob-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-knob-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-knob-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/switch-knob-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-head.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-head.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-head.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-head.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/arrow-button-head.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/icon-content-heading-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/icon-content-heading-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/icon-content-heading-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/icon-content-heading-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/icon-content-heading-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/heading-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/heading-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/heading-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/heading-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/heading-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/blue-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-sel-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-sel-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-sel-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-sel-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/compat/tab-sel-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/images/thumb-overlay.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/iphone/images/thumb-overlay.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/images/thumb-overlay.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/images/thumb-overlay.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/iphone/images/thumb-overlay.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/iphone/iphone-app.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/iphone-app.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/iphone-app.css	(revision 9)
@@ -0,0 +1,939 @@
+body {
+	visibility: hidden;
+}
+html.mobile, .mobile body {
+	width: 100%;
+	margin: 0px;
+	padding: 0px;
+}
+.mobile body {
+	overflow-x: hidden;
+	-webkit-text-size-adjust: none;
+	background-color: rgb(197,204,211);
+	font-family: Helvetica;
+	font-size: 17px;
+	min-height: 416px;
+}
+.mblView {
+	position: relative;
+	top: 0px;
+	left: 0px;
+	width: 100%;
+}
+.mblView.out {
+	position: absolute;
+}
+.mblView.in {
+	position: absolute;
+}
+.slide.out {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideOut;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateX(-100%);
+}
+.slide.in {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideIn;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateX(0px);
+}
+.slide.out.reverse {
+	-webkit-animation-name: slideOutReverse;
+}
+.slide.in.reverse {
+	-webkit-animation-name: slideInReverse;
+}
+@-webkit-keyframes slideOut {
+	from { -webkit-transform: translateX(0px); }
+	to { -webkit-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideIn {
+	from { -webkit-transform: translateX(100%); }
+	to { -webkit-transform: translateX(0px); }
+}
+@-webkit-keyframes slideOutReverse {
+	from { -webkit-transform: translateX(0px); }
+	to { -webkit-transform: translateX(100%); }
+}
+@-webkit-keyframes slideInReverse {
+	from { -webkit-transform: translateX(-100%); }
+	to { -webkit-transform: translateX(0px); }
+}
+.flip.out {
+	-webkit-animation-duration: .6s;
+	-webkit-animation-name: flipOut;
+	-webkit-animation-timing-function: ease-in;
+	-webkit-transform: rotateY(90deg);
+}
+.flip.in {
+	-webkit-animation-duration: .6s;
+	-webkit-animation-name: flipIn;
+	-webkit-animation-timing-function: ease-out;
+}
+@-webkit-keyframes flipOut {
+	0% { -webkit-transform: rotateY(0deg) scale(1); }
+	50% { -webkit-transform: rotateY(90deg) scale(.8); }
+	100% { -webkit-transform: rotateY(90deg) scale(.8); }
+}
+@-webkit-keyframes flipIn {
+	0% { -webkit-transform: rotateY(90deg) scale(.8); }
+	50% { -webkit-transform: rotateY(90deg) scale(.8); }
+	100% { -webkit-transform: rotateY(0deg) scale(1); }
+}
+.fade.out {
+	-webkit-animation-duration: 1s;
+	-webkit-animation-name: fadeOut;
+	-webkit-animation-timing-function: ease-in;
+}
+.fade.out.fast {
+	-webkit-animation-duration: 0.3s;
+}
+.fade.in {
+	-webkit-animation-duration: 1s;
+	-webkit-animation-name: fadeIn;
+	-webkit-animation-timing-function: ease-out;
+}
+@-webkit-keyframes fadeOut {
+	from { opacity: 1; }
+	to { opacity: 0; }
+}
+@-webkit-keyframes fadeIn {
+	from { opacity: 0; }
+	to { opacity: 1; }
+}
+.mblHeading {
+	position: relative;
+	height: 42px;
+	margin: 0px;
+	padding: 0px;
+	background-color: #889BB3;
+	background: -webkit-gradient(linear, left top, left bottom, from(#B0BCCD), to(#6D84A2), color-stop(0.5, #889BB3), color-stop(0.5, #8195AF));
+	border-top: 1px solid #CDD5DF;
+	border-bottom: 1px solid #2D3642;
+	font-family: Helvetica;
+	font-size: 20px;
+	color: white;
+	text-align: center;
+	line-height: 44px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.dj_webkit .mblArrowButtonHead {
+	position: absolute;
+	top: 10px;
+	left: 8px;
+	width: 19px;
+	height: 19px;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #3A4655;
+	-webkit-transform: scale(.8,1) rotate(45deg);
+	background: -webkit-gradient(linear, left top, right bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblArrowButtonBody {
+	position: absolute;
+	top: 5px;
+	left: 19px;
+	padding: 0px 10px 0px 3px;
+	height: 29px;
+	border-width: 1px 1px 1px 0px;
+	border-style: inset;
+	border-color: #9CACC0;
+	font-family: Helvetica;
+	font-size: 13px;
+	color: white;
+	line-height: 29px;
+	cursor: pointer;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	background-color: #5877A2;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+	-webkit-tap-highlight-color: transparent;
+}
+.dj_ie .mblArrowButtonBody, .dj_ff3 .mblArrowButtonBody {
+	padding: 0px 10px 0px 10px;
+}
+.mblArrowButtonNeck {
+	position: absolute;
+	top: 5px;
+	left: 19px;
+	width: 4px;
+	height: 29px;
+	border-width: 1px 0px 1px 0px;
+	border-style: inset;
+	border-color: #9CACC0;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblArrowButtonSelected .mblArrowButtonHead {
+	background: -webkit-gradient(linear, left top, right bottom, from(#7C87A4), to(#263E6C), color-stop(0.5, #394D77), color-stop(0.5, #243B69));
+}
+.mblArrowButtonSelected .mblArrowButtonBody, .mblArrowButtonSelected .mblArrowButtonNeck {
+	background: -webkit-gradient(linear, left top, left bottom, from(#7C87A4), to(#263E6C), color-stop(0.5, #394D77), color-stop(0.5, #243B69));
+}
+.mblRoundRect {
+	margin: 7px 9px 16px;
+	padding: 8px;
+	border: 1px solid #ADAAAD;
+	-webkit-border-radius: 8px;
+	-moz-border-radius: 8px;
+	background-color: white;
+}
+.mblRoundRect.mblShadow {
+	-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
+}
+.mblEdgeToEdgeCategory {
+	position: relative;
+	height: 22px;
+	margin: 0px;
+	padding: 0px 10px;
+	border-top: 1px solid #A4B0B9;
+	border-bottom: 1px solid #979DA3;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8F9EA9), to(#B7C0C7));
+	font-family: Helvetica;
+	font-size: 16px;
+	color: white;
+	line-height: 22px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblRoundRectCategory {
+	color: #4C566C;
+	margin: 18px 0px 0px 20px;
+	text-shadow: rgba(255, 255, 255, 1) 0px 1px 0px;
+	font-family: Helvetica;
+	font-size: 16px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblRoundRectList {
+	margin: 7px 9px 16px;
+	padding: 0px;
+	border: 1px solid #ADAAAD;
+	-webkit-border-radius: 8px;
+	-moz-border-radius: 8px;
+	background-color: white;
+	position: relative; 
+}
+.mblEdgeToEdgeList {
+	padding: 0px;
+	background-color: white;
+	position: relative; 
+	margin: 0px; 
+}
+.mblListItem {
+	list-style-type: none;
+	height: 43px;
+	border-bottom: 1px solid #ADAAAD;
+	line-height: 43px;
+	font-weight: bold;
+	position: relative;
+	color: black;
+	vertical-align: bottom; 
+}
+.mblListItemIcon {
+	position: absolute;
+	margin: 7px 0px 0px 8px;
+}
+.mblListItem.mblVariableHeight {
+	line-height: normal;
+	height: auto;
+	padding: 11px 6px 10px 6px;
+}
+.mblItemSelected {
+	background-color: #048BF4;
+	background: -webkit-gradient(linear, left top, left bottom, from(#048BF4), to(#005CE5));
+}
+li .mblListItemTextBox {
+	padding-right: 28px;
+}
+li .mblListItemTextBoxSelected {
+	background-color: #048BF4;
+}
+.mblRoundRectList .mblListItem:first-child {
+	-webkit-border-top-left-radius: 8px;
+	-webkit-border-top-right-radius: 8px;
+	-moz-border-radius-topleft: 8px;
+	-moz-border-radius-topright: 8px;
+}
+.mblRoundRectList .mblListItem:last-child {
+	border-bottom-width: 0px;
+	-webkit-border-bottom-left-radius: 8px;
+	-webkit-border-bottom-right-radius: 8px;
+	-moz-border-radius-bottomleft: 8px;
+	-moz-border-radius-bottomright: 8px;
+}
+.mblEdgeToEdgeList .mblListItem:last-child {
+	border-bottom-color: #707C84;
+}
+.mblListItem a.mblListItemAnchor {
+	background-position: 9px 7px;
+	display: block;
+	padding-left: 48px;
+	text-decoration: none;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblListItem a.mblListItemAnchorNoIcon {
+	padding-left: 10px;
+}
+.mblItemSelected a.mblListItemAnchor {
+	color: white;
+}
+.mblListItem a.mblListItemAnchorHasRightButton {
+	padding-right: 40px;
+}
+.mblListItem .mblArrow {
+	position: absolute;
+	top: 18px;
+	right: 12px;
+	width: 6px;
+	height: 6px;
+	font-size: 1px;
+	-webkit-transform: rotate(45deg);
+	border-width: 3px 3px 0px 0px;
+	border-style: solid;
+	border-color: #808080;
+}
+.mblItemSelected .mblArrow {
+	border-color: white;
+}
+.mblVariableHeight div.mblArrow {
+	top: 50%;
+	margin-top: -4px;
+}
+.mblRightText {
+	position: absolute;
+	top: 12px;
+	right: 30px;
+	color: #324F85;
+	line-height: normal;
+}
+.mblListItem .mblRightButtonContainer {
+	position: absolute;
+	top: 50%;
+	right: 12px;
+}
+.mblListItem .mblRightButton {
+	position: absolute;
+	top: -50%;
+}
+.mblSwitch {
+	position: relative;
+	width: 94px;
+	height: 27px;
+	overflow: hidden;
+}
+.mblItemSwitch {
+	position: absolute;
+	top: 8px;
+	right: 12px;
+}
+.mblSwitchInner {
+	position: absolute;
+	top: 0px;
+	height: 27px;
+}
+.mblSwitchAnimation .mblSwitchInner {
+	-webkit-transition-property: left;
+	-webkit-transition-duration: .3s;
+}
+.mblSwitchOn .mblSwitchInner {
+	left: 0px;
+}
+.mblSwitchOff .mblSwitchInner {
+	left: -53px;
+}
+.mblSwitchBg {
+	position: absolute;
+	top: 0px;
+	height: 27px;
+	border-width: 1px;
+	border-style: inset;
+	border-color: #9CACC0;
+	font-family: Helvetica;
+	font-size: 16px;
+	font-weight: bold;
+	line-height: 29px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblSwitchBgLeft {
+	left: 0px;
+	width: 94px;
+	color: white;
+	background-color: #3F84EB;
+	background: -webkit-gradient(linear, left top, left bottom, from(#2859B1), to(#75ACFB), color-stop(0.5, #3F84EB), color-stop(0.5, #4C8EEE));
+}
+.mblSwitchBgRight {
+	left: 53px;
+	width: 94px;
+	color: #7F7F7F;
+	background-color: #EEEEEE;
+	background: -webkit-gradient(linear, left top, left bottom, from(#CECECE), to(#FDFDFD), color-stop(0.5, #EEEEEE), color-stop(0.5, #F8F8F8));
+}
+.mblSwitchKnob {
+	position: absolute;
+	top: 1px;
+	left: 53px;
+	width: 41px;
+	height: 26px;
+	font-size: 1px;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #EFEFEF #A5A5A5 #969696 #325E9E;
+	line-height: 29px;
+	background-color: #CCCCCC;
+	background: -webkit-gradient(linear, left top, left bottom, from(#CCCCCC), to(#FAFAFA));
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+}
+.mblSwitchText {
+	position: relative;
+	top: 0px;
+	width: 53px;
+	height: 27px;
+	padding: 0px;
+	text-align: center;
+}
+.mblSwitchTextLeft {
+	left: 0px;
+}
+.mblSwitchTextRight {
+	left: 40px;
+}
+.mblIconContainer {
+	padding: 0px;
+	margin: 20px 0px 0px 10px;
+	padding: 0px 0px 40px 0px;
+}
+.mblIconItem {
+	list-style-type: none;
+	float: left;
+}
+.mblIconItemTerminator {
+	list-style-type: none;
+	height: 20px;
+	clear: both;
+}
+.mblIconItemSub {
+	list-style-type: none;
+	margin-left: -10px;
+	background-color: white;
+}
+.mblIconArea {
+	font-family: Helvetica;
+	font-size: 12px;
+	height: 78px;
+	width: 74px;
+	text-align: center;
+	margin-bottom: 10px;
+}
+.mblIconArea DIV {
+	position: relative;
+	height: 65px;
+}
+.mblIconArea IMG {
+	position: absolute;
+	top: 0px;
+	left: 6px;
+}
+.mblContent {
+	clear: both;
+	padding-bottom: 20px;
+}
+table.mblClose {
+	clear: both;
+	cursor: pointer;
+}
+.mblVibrate{
+	position: relative;
+	-webkit-animation-duration: .5s;
+	-webkit-animation-timing-function: ease-in-out;
+	-webkit-animation-iteration-count: 20;
+	-webkit-animation-name: vibrate;
+	-webkit-transform: rotate(0deg);
+}
+@-webkit-keyframes vibrate{
+	0%{
+		-webkit-transform: rotate(-2deg);
+		bottom: -1px;
+		left: -1px;
+	}
+	25% {
+		-webkit-transform: rotate(1deg);
+		bottom: 2px;
+		left: 1px;
+	}
+	50% {
+		-webkit-transform: rotate(-1deg);
+		bottom: -2px;
+		left: -1px;
+	}
+	75% {
+		-webkit-transform: rotate(2deg);
+		bottom: 2px;
+		left: 1px;
+	}
+	100% {
+		-webkit-transform: rotate(-2deg);
+		bottom: -1px;
+		left: -1px;
+	}
+}
+.mblCloseContent{
+	-webkit-animation-duration: .3s;
+	-webkit-animation-timing-function: ease-in-out;
+	-webkit-animation-name: shrink;
+	-webkit-transform: scale(0.01);
+}
+.mblCloseContent.mblShrink0{
+	-webkit-animation-name: shrink0;
+}
+.mblCloseContent.mblShrink1{
+	-webkit-animation-name: shrink1;
+}
+.mblCloseContent.mblShrink2{
+	-webkit-animation-name: shrink2;
+}
+.mblCloseContent.mblShrink3{
+	-webkit-animation-name: shrink3;
+}
+@-webkit-keyframes shrink{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: scale(0.01); }
+}
+@-webkit-keyframes shrink0{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(-40%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink1{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(-14%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink2{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(14%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink3{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(40%,-70%) scale(0.01); }
+}
+.mblIconContentHeading {
+	position: relative;
+	clear: both;
+	height: 25px;
+	padding-left: 40px;
+	margin-top: 0px;
+	background: -webkit-gradient(linear, left top, left bottom, from(#E0E4E7), to(#B4BEC6), color-stop(0.5, #C4CCD2), color-stop(0.5, #BFC8CE));
+	border-top: 1px solid #F1F3F4;
+	border-bottom: 1px solid #717D85;
+	font-family: Helvetica;
+	font-size: 14px;
+	color: white;
+	line-height: 26px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblButton {
+	padding: 0px 10px;
+	height: 29px;
+	border-width: 1px 1px 1px 1px;
+	border-style: outset;
+	color: white;
+	font-family: Helvetica;
+	font-size: 13px;
+	line-height: 29px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblBlueButton {
+	border-color: #9CACC0;
+	background-color: #366EDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#7A9DE9), to(#2362DD), color-stop(0.5, #366EDF), color-stop(0.5, #215FDC));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblBlueButtonSelected {
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblRedButton {
+	border-color: #9CACC0;
+	background-color: #366EDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#FA9D58), to(#EE4115), color-stop(0.5, #FF4D25), color-stop(0.5, #ED4D15));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblRedButtonSelected {
+	background: -webkit-gradient(linear, left top, left bottom, from(#C1A48E), to(#9B6C4A), color-stop(0.5, #A27758), color-stop(0.5, #996947));
+}
+.mblTabContainer {
+}
+.mblTabButton {
+	float: left;
+	width: 100px;
+	text-align: center;
+	height: 28px;
+	border-width: 1px 1px 1px 0px;
+	border-style: inset;
+	border-color: #9CACC0;
+	border-right-color: #5E708A;
+	font-family: Helvetica;
+	font-size: 13px;
+	color: white;
+	cursor: pointer;
+	line-height: 29px;
+	background-color: #8297AF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#ABB9CA), to(#788DA9), color-stop(0.5, #8297AF), color-stop(0.5, #768BA7));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblTabButton:first-child {
+	-webkit-border-top-left-radius: 5px;
+	-webkit-border-bottom-left-radius: 5px;
+	-moz-border-radius-topleft: 5px;
+	-moz-border-radius-bottomleft: 5px;
+	border-left-width: 1px;
+}
+.mblTabButton:last-child {
+	-webkit-border-top-right-radius: 5px;
+	-webkit-border-bottom-right-radius: 5px;
+	-moz-border-radius-topright: 5px;
+	-moz-border-radius-bottomright: 5px;
+	border-right-color: #9CACC0;
+}
+.mblTabButtonSelected.mblTabButton {
+	background-color: #5877A2;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblTabButtonImgDiv {
+	display: none;
+}
+.mblTabPanelHeader {
+	position: relative;
+	height: 39px;
+	margin: 0px;
+	padding: 3px 0px 0px 0px;
+	background-color: #889BB3;
+	background: -webkit-gradient(linear, left top, left bottom, from(#B0BCCD), to(#6D84A2), color-stop(0.5, #889BB3), color-stop(0.5, #8195AF));
+	border-top: 1px solid #CDD5DF;
+	border-bottom: 1px solid #2D3642;
+	font-family: Helvetica;
+	font-size: 20px;
+	color: white;
+	text-align: center;
+	line-height: 44px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblTabPanelPane {
+}
+.mblTabPane {
+}
+.mblProgContainer {
+	position: absolute;
+	width: 36px;
+	height: 36px;
+	top: 180px;
+	left: 50%;
+	margin: -18px 0px 0px -18px;
+}
+.mblProg {
+	position: absolute;
+	left: 0px;
+	top: 0px;
+	width: 11px;
+	font-size: 1px;
+	height: 4px;
+	overflow: hidden;
+	-webkit-transform-origin: 0 2px;
+	background-color: #C0C0C0;
+	-webkit-border-radius: 2px;
+	-moz-border-radius: 2px;
+}
+.mblProg0 {
+	-webkit-transform: translate(18px,10px) rotate(-90deg);
+}
+.mblProg1 {
+	-webkit-transform: translate(22px,11px) rotate(-60deg);
+}
+.mblProg2 {
+	-webkit-transform: translate(25px,14px) rotate(-30deg);
+}
+.mblProg3 {
+	-webkit-transform: translate(26px,18px) rotate(0deg);
+}
+.mblProg4 {
+	-webkit-transform: translate(25px,22px) rotate(30deg);
+}
+.mblProg5 {
+	-webkit-transform: translate(22px,25px) rotate(60deg);
+}
+.mblProg6 {
+	-webkit-transform: translate(18px,26px) rotate(90deg);
+}
+.mblProg7 {
+	-webkit-transform: translate(14px,25px) rotate(120deg);
+}
+.mblProg8 {
+	-webkit-transform: translate(11px,22px) rotate(150deg);
+}
+.mblProg9 {
+	-webkit-transform: translate(10px,18px) rotate(180deg);
+}
+.mblProg10 {
+	-webkit-transform: translate(11px,14px) rotate(210deg);
+}
+.mblProg11 {
+	-webkit-transform: translate(14px,11px) rotate(240deg);
+}
+.alertDialog {
+	width: 100%;
+	padding-left: 2px;
+	padding-right: 2px;
+	z-index: 1000;
+}
+.alertDialogBody {
+	border: 1px solid #ADAAAD;
+	-webkit-border-radius: 10px;
+	-moz-border-radius: 10px;
+	background-color: white;
+	margin-left: 2px;
+	margin-right: 4px;
+}
+.alertTitle {
+	height: 42px;
+	margin: 0px;
+	padding: 0px;
+	background-color: #889BB3;
+	background: -webkit-gradient(linear, left top, left bottom, from(#B0BCCD), to(#6D84A2), color-stop(0.5, #889BB3), color-stop(0.5, #8195AF));
+	border-top: 1px solid #CDD5DF;
+	border-bottom: 1px solid #2D3642;
+	font-family: Helvetica;
+	font-size: 20px;
+	color: white;
+	text-align: center;
+	line-height: 44px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	text-align: center;
+}
+.alertText {	
+	text-align: center;
+}
+.alertBtns {
+	padding: 5px;
+	text-align: center;
+}
+.alertBtns .mblButton {
+	width: 100%;
+	margin-top: 5px;
+}
+.alertDialog.out {
+	position: absolute;
+}
+.alertDialog.in {
+	position: absolute;
+}
+.slidev.out {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideOut;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateY(-100%);
+}
+.slidev.in {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideIn;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateY(0px);
+}
+.slidev.out.reverse {
+	-webkit-animation-name: slideOutReverse;
+}
+.slidev.in.reverse {
+	-webkit-animation-name: slideInReverse;
+}
+.dialogUnderlayWrapper {
+	position: absolute;
+	left: 0;
+	top: 0;
+	z-index: 998;
+	background: transparent !important;
+	visibility: visible;
+	height: 100%;
+	width: 100%;
+}
+.dialogUnderlay {
+	background-color: #eee;
+	opacity: 0.5;
+	width: 100%;
+	height: 100%;
+}
+.list .row {
+	padding: 10px;
+	border-bottom: 1px solid #444;
+	position: relative;
+	background-color: white;
+	z-index: 6; 
+}
+.list .row.mblListItem {
+	padding: 0px;
+}
+.list .row.last {
+	border-bottom: none;
+}
+.list .row.hold {
+	background-color: #ddd;
+}
+.list .buttons {
+	position: absolute;
+	text-align: center;
+	padding-top: 10px;
+	width: 100%;
+	height: 100%;
+	z-index: 5;
+}
+.list .buttons .mblButton {
+}
+.list .buttons .deleteBtn {
+	background-color: red;
+	
+}
+.list .buttons .cancelBtn {
+	margin-left: 10px;
+	background-color: blue;
+}
+.row.collapsed { 
+	-webkit-animation-name: collapse-vert;
+	-webkit-animation-duration: 0.5s;
+	-webkit-animation-timing-function: linear;
+}
+@-webkit-keyframes collapse-vert {
+	from {
+		height: 100%;
+		padding: 10px;
+	}
+	to {
+		height: 0px;
+		padding: 0px;
+	} 
+}
+.listSelector {
+	position: absolute;
+	-webkit-border-radius: 10px;
+	-moz-border-radius: 10px;
+	border: 1px solid #666;
+	background-color: #ccc;
+	color: #333;
+	z-index: 1000;
+}
+.listSelectorRow {
+	padding: 10px;
+	border-bottom: 1px solid #666;
+	white-space: nowrap;
+}
+.listSelectorRow-selected {
+	background-color: #666;
+	color: #ccc;
+}
+.listSelectorRow.last {
+ 	border-bottom: none;
+}
+.mblImageView, .mblImageView canvas {
+	width: 100%;
+	height: 100%;
+}
+.mblPillar {
+	display: none;
+}
+input {
+	-webkit-text-size-adjust: 140%;
+}
+ 
+ 
+.mblImageThumbView {
+	position: relative;
+}
+.mblImageThumbView .mblThumb {
+	width: 93px;
+	min-height: 100px;
+	display: inline-block;
+	padding: 4px 3px 0px 4px;
+	z-index: 2;
+	position: absolute;
+	-webkit-transition-property: -webkit-transform, opacity;
+	-webkit-transition-duration: 0.5s, 0.5s;
+	-webkit-transition-delay: 0, 0;
+}
+.mblImageThumbView .mblThumb.hidden {
+	z-index: 1;
+	opacity: 0;
+}
+.mblImageThumbView .mblThumbInner {
+	width: 102px;
+	height: 102px;
+	position: relative;
+}
+.mblImageThumbView .mblThumbOverlay {
+	width: 102px;
+	height: 102px;
+	background: url(images/thumb-overlay.png) center top no-repeat;
+	position: absolute;
+	z-index: 20;
+	overflow: hidden;
+}
+.mblImageThumbView .mblThumb.selected .mblThumbOverlay {
+	background: url(images/thumb-overlay.png) center bottom no-repeat;
+}
+.mblImageThumbView .mblThumbInner .mblThumbMask {
+  width: 90px;
+  height: 90px;
+  overflow: hidden;
+  padding-left: 6px;
+  padding-top: 5px;
+  z-index: 10;
+  
+}
+.mblImageThumbView .mblThumbInner .mblThumbMask img {
+  left: 0px;
+  top: 0px;
+  width: 90px;
+  height: 90px;
+}
+.mblImageThumbView .mblThumbInner .mblThumbMask .mblThumbSrc {
+  left: 6px;
+  top: 5px;
+  background-position: center center;
+  background-repeat: no-repeat;
+  overflow: hidden;
+  position: absolute;
+  -webkit-background-size: 100% 100%;
+  -webkit-border-radius: 5px;
+  width: 90px;
+  height: 90px;
+  z-index: 5;
+}
+.mblImageThumbView .mblThumbMask div {
+  left: 0px;
+  top: 0px;
+  width: 90px;
+  height: 90px;
+  background-repeat: no-repeat;
+}
+.mblImageThumbView .mblThumb:hover,
+.mblImageThumbView .mblThumb.selected  {
+	-webkit-transform: scale(1.2);
+}
Index: trunk/web/dojo/dojox/mobile/themes/iphone/iphone-app-compat.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/iphone-app-compat.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/iphone-app-compat.css	(revision 9)
@@ -0,0 +1,285 @@
+
+.mblHeading {
+	background-image: url(compat/heading-bg.png);
+}
+.mblArrowButtonHead {
+	position: absolute;
+	top: 5px;
+	left: 6px;
+	width: 19px;
+	height: 29px;
+	background-image: url(compat/arrow-button-head.png);
+}
+.mblArrowButtonBody {
+	background-image: url(compat/arrow-button-bg.png);
+}
+.mblRoundCorner {
+	background-color: white;
+	height: 1px;
+	font-size: 1px;
+	overflow: hidden;
+	border-style: solid;
+	border-color: #ADAAAD;
+	border-width: 0px 1px;
+}
+.mblRoundRectContainer {
+	margin: 0px;
+	padding: 0px;
+	background-color: white;
+	border-style: solid;
+	border-color: #ADAAAD;
+	border-width: 0px 1px;
+}
+.mblRoundRect .mblRoundRectContainer {
+	padding: 3px 8px;
+}
+.mblRoundCorner0T {
+	height: 0px;
+}
+.mblRoundCorner1T {
+	background-color: #ADAAAD;
+	margin: 0px 5px;
+}
+.mblRoundCorner2T {
+	margin: 0px 2px;
+	border-width: 0px 3px;
+}
+.mblRoundCorner3T {
+	margin: 0px 1px;
+	border-width: 0px 2px;
+}
+.mblRoundCorner4T {
+	margin: 0px 1px;
+}
+.mblRoundCorner5T {
+	margin: 0px 1px;
+}
+.mblRoundCorner0B {
+	height: 0px;
+}
+.mblRoundCorner1B {
+	margin: 0px 1px;
+}
+.mblRoundCorner2B {
+	margin: 0px 1px;
+}
+.mblRoundCorner3B {
+	margin: 0px 1px;
+	border-width: 0px 2px;
+}
+.mblRoundCorner4B {
+	margin: 0px 2px;
+	border-width: 0px 3px;
+}
+.mblRoundCorner5B {
+	background-color: #ADAAAD;
+	margin: 0px 5px;
+}
+.mblEdgeToEdgeCategory {
+	background-image: url(compat/edge-categ-bg.png);
+}
+*html li.mblListItem.mblVariableHeight { 
+	height: 0;
+}
+li.mblListItem .mblArrow, div.mblListItem .mblArrow {
+	border-style: none;
+	top: 16px;
+	width: 9px;
+	height: 13px;
+	background-image: url(compat/gray-arrow.png);
+}
+li.mblItemSelected .mblArrow, div.mblItemSelected .mblArrow {
+	background-image: url(compat/white-arrow.png);
+}
+.mblSwitchInner {
+	width: 100px;
+}
+.mblSwitchBg {
+	border: none;
+}
+.mblSwitchBgLeft {
+	width: 89px;
+	background: none;
+}
+.mblSwitchBgRight {
+	width: 89px;
+	left: 58px;
+	background: none;
+}
+.mblSwitchKnobContainer {
+	position: relative;
+	left: 53px;
+	width: 41px;
+	height: 26px;
+}
+.mblSwitchKnob {
+	position: relative;
+	top: 0px;
+	left: 0px;
+	width: auto;
+	height: 21px;
+	background-image: url(compat/switch-knob-bg.png);
+	border-width: 0px 1px;
+	-moz-border-radius: 0px;
+}
+.mblSwitchCorner {
+	position: relative;
+	height: 1px;
+	font-size: 1px;
+	overflow: hidden;
+	border-style: solid;
+	border-color: #878787;
+}
+.mblSwitchCorner1T {
+	background-color: #848684;
+	margin: 0px 4px;
+	border-width: 0px;
+}
+.mblSwitchCorner2T {
+	background-color: #C0C0C0;
+	margin: 0px 2px;
+	border-width: 0px 2px;
+}
+.mblSwitchCorner3T {
+	background-color: #C6C7C6;
+	margin: 0px 1px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner1B {
+	background-color: #FBFBFB;
+	margin: 0px 1px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner2B {
+	background-color: #FBFBFB;
+	margin: 0px 2px;
+	border-width: 0px 2px;
+}
+.mblSwitchCorner3B {
+	background-color: #878787;
+	margin: 0px 4px;
+	border-width: 0px;
+}
+.mblSwitchBgLeft .mblSwitchCorner1T {
+	border-width: 0px 2px;
+	background-color: #093889;
+}
+.mblSwitchBgLeft .mblSwitchCorner2T {
+	background-color: #285AB2;
+}
+.mblSwitchBgLeft .mblSwitchCorner3T {
+	background-color: #285AB2;
+}
+.mblSwitchBgLeft .mblSwitchCorner1B {
+	background-color: #66A1F6;
+}
+.mblSwitchBgLeft .mblSwitchCorner2B {
+	background-color: #66A1F6;
+}
+.mblSwitchBgLeft .mblSwitchCorner3B {
+	background-color: #5289D7;
+}
+.mblSwitchText {
+	height: 21px;
+	line-height: 21px;
+}
+.mblSwitchTextLeft {
+	background-image: url(compat/switch-blue-bg.png);
+	border-left: 1px solid #848684;
+}
+.mblSwitchTextRight {
+	background-image: url(compat/switch-gray-bg.png);
+	left: 35px;
+	border-right: 1px solid #848684;
+}
+.mblIconContentHeading {
+	background-image: url(compat/icon-content-heading-bg.png);
+}
+.mblBlueButton {
+	background-image: url(compat/blue-button-bg.png);
+}
+.mblBlueButtonSelected {
+	background-image: url(compat/blue-button-sel-bg.png);
+}
+.mblTabPanelHeader {
+	background-image: url(compat/heading-bg.png);
+}
+.mblTabButton {
+	background-image: url(compat/tab-button-bg.png);
+}
+.mblTabButtonSelected {
+	background-image: url(compat/tab-sel-button-bg.png);
+}
+*html .mblTabButton { 
+	behavior: expression(
+		(function(el){
+			if(!el.previousSibling)
+				el.style.borderWidth = "1px";
+			el.style.behavior = "none";
+		})(this)
+	);
+}
+.mblProg {
+	position: absolute;
+	top: 0px;
+	width: 4px;
+	font-size: 1px;
+	height: 36px;
+	overflow: hidden;
+	background-color: #C0C0C0;
+}
+.mblProg0 {
+	left: 0px;
+}
+.mblProg1 {
+	left: 8px;
+}
+.mblProg2 {
+	left: 16px;
+}
+.mblProg3 {
+	left: 24px;
+}
+.mblProg4 {
+	left: 32px;
+}
+.mblProg5 {
+	left: 40px;
+}
+.mblProg6 {
+	left: 48px;
+}
+.mblProg7 {
+	left: 56px;
+}
+.mblProg8 {
+	left: 64px;
+}
+.mblProg9 {
+	left: 72px;
+}
+.mblProg10 {
+	left: 80px;
+}
+.mblProg11 {
+	left: 80px;
+}
+.alertTitle {
+	background-image: url(compat/heading-bg.png);
+}
+.mblImageThumbView .mblThumb {
+	-moz-transition: all 0.5s ease-in-out;
+	-o-transition: all 0.5s ease-in-out;
+}
+.mblImageThumbView .mblThumb:hover {
+	-moz-transform: scale(1.2);
+	-moz-transition: all 0.3s ease-in-out;
+	-o-transform: scale(1.2);
+	-o-transition: all 0.3s ease-in-out;
+}
+.mblImageThumbView .mblThumbInner .mblThumbMask .mblThumbSrc {
+  -moz-background-size: 100% 100%;
+  -moz-border-radius: 5px;
+  -o-background-size: 100% 100%;
+  -o-border-radius: 5px;
+}
Index: trunk/web/dojo/dojox/mobile/themes/iphone/iphone.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/iphone.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/iphone.css	(revision 9)
@@ -0,0 +1,700 @@
+body {
+	visibility: hidden;
+}
+html.mobile, .mobile body {
+	width: 100%;
+	margin: 0px;
+	padding: 0px;
+}
+.mobile body {
+	overflow-x: hidden;
+	-webkit-text-size-adjust: none;
+	background-color: rgb(197,204,211);
+	font-family: Helvetica;
+	font-size: 17px;
+	min-height: 416px;
+}
+.mblView {
+	position: relative;
+	top: 0px;
+	left: 0px;
+	width: 100%;
+}
+.mblView.out {
+	position: absolute;
+}
+.mblView.in {
+	position: absolute;
+}
+.slide.out {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideOut;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateX(-100%);
+}
+.slide.in {
+	-webkit-animation-duration: .4s;
+	-webkit-animation-name: slideIn;
+	-webkit-animation-timing-function: linear;
+	-webkit-transform: translateX(0px);
+}
+.slide.out.reverse {
+	-webkit-animation-name: slideOutReverse;
+}
+.slide.in.reverse {
+	-webkit-animation-name: slideInReverse;
+}
+@-webkit-keyframes slideOut {
+	from { -webkit-transform: translateX(0px); }
+	to { -webkit-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideIn {
+	from { -webkit-transform: translateX(100%); }
+	to { -webkit-transform: translateX(0px); }
+}
+@-webkit-keyframes slideOutReverse {
+	from { -webkit-transform: translateX(0px); }
+	to { -webkit-transform: translateX(100%); }
+}
+@-webkit-keyframes slideInReverse {
+	from { -webkit-transform: translateX(-100%); }
+	to { -webkit-transform: translateX(0px); }
+}
+.flip.out {
+	-webkit-animation-duration: .6s;
+	-webkit-animation-name: flipOut;
+	-webkit-animation-timing-function: ease-in;
+	-webkit-transform: rotateY(90deg);
+}
+.flip.in {
+	-webkit-animation-duration: .6s;
+	-webkit-animation-name: flipIn;
+	-webkit-animation-timing-function: ease-out;
+}
+@-webkit-keyframes flipOut {
+	0% { -webkit-transform: rotateY(0deg) scale(1); }
+	50% { -webkit-transform: rotateY(90deg) scale(.8); }
+	100% { -webkit-transform: rotateY(90deg) scale(.8); }
+}
+@-webkit-keyframes flipIn {
+	0% { -webkit-transform: rotateY(90deg) scale(.8); }
+	50% { -webkit-transform: rotateY(90deg) scale(.8); }
+	100% { -webkit-transform: rotateY(0deg) scale(1); }
+}
+.fade.out {
+	-webkit-animation-duration: 1s;
+	-webkit-animation-name: fadeOut;
+	-webkit-animation-timing-function: ease-in;
+}
+.fade.out.fast {
+	-webkit-animation-duration: 0.3s;
+}
+.fade.in {
+	-webkit-animation-duration: 1s;
+	-webkit-animation-name: fadeIn;
+	-webkit-animation-timing-function: ease-out;
+}
+@-webkit-keyframes fadeOut {
+	from { opacity: 1; }
+	to { opacity: 0; }
+}
+@-webkit-keyframes fadeIn {
+	from { opacity: 0; }
+	to { opacity: 1; }
+}
+.mblHeading {
+	position: relative;
+	height: 42px;
+	margin: 0px;
+	padding: 0px;
+	background-color: #889BB3;
+	background: -webkit-gradient(linear, left top, left bottom, from(#B0BCCD), to(#6D84A2), color-stop(0.5, #889BB3), color-stop(0.5, #8195AF));
+	border-top: 1px solid #CDD5DF;
+	border-bottom: 1px solid #2D3642;
+	font-family: Helvetica;
+	font-size: 20px;
+	color: white;
+	text-align: center;
+	line-height: 44px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.dj_webkit .mblArrowButtonHead {
+	position: absolute;
+	top: 10px;
+	left: 8px;
+	width: 19px;
+	height: 19px;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #3A4655;
+	-webkit-transform: scale(.8,1) rotate(45deg);
+	background: -webkit-gradient(linear, left top, right bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblArrowButtonBody {
+	position: absolute;
+	top: 5px;
+	left: 19px;
+	padding: 0px 10px 0px 3px;
+	height: 29px;
+	border-width: 1px 1px 1px 0px;
+	border-style: inset;
+	border-color: #9CACC0;
+	font-family: Helvetica;
+	font-size: 13px;
+	color: white;
+	line-height: 29px;
+	cursor: pointer;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	background-color: #5877A2;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+	-webkit-tap-highlight-color: transparent;
+}
+.dj_ie .mblArrowButtonBody, .dj_ff3 .mblArrowButtonBody {
+	padding: 0px 10px 0px 10px;
+}
+.mblArrowButtonNeck {
+	position: absolute;
+	top: 5px;
+	left: 19px;
+	width: 4px;
+	height: 29px;
+	border-width: 1px 0px 1px 0px;
+	border-style: inset;
+	border-color: #9CACC0;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblArrowButtonSelected .mblArrowButtonHead {
+	background: -webkit-gradient(linear, left top, right bottom, from(#7C87A4), to(#263E6C), color-stop(0.5, #394D77), color-stop(0.5, #243B69));
+}
+.mblArrowButtonSelected .mblArrowButtonBody, .mblArrowButtonSelected .mblArrowButtonNeck {
+	background: -webkit-gradient(linear, left top, left bottom, from(#7C87A4), to(#263E6C), color-stop(0.5, #394D77), color-stop(0.5, #243B69));
+}
+.mblRoundRect {
+	margin: 7px 9px 16px;
+	padding: 8px;
+	border: 1px solid #ADAAAD;
+	-webkit-border-radius: 8px;
+	-moz-border-radius: 8px;
+	background-color: white;
+}
+.mblRoundRect.mblShadow {
+	-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
+}
+.mblEdgeToEdgeCategory {
+	position: relative;
+	height: 22px;
+	margin: 0px;
+	padding: 0px 10px;
+	border-top: 1px solid #A4B0B9;
+	border-bottom: 1px solid #979DA3;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8F9EA9), to(#B7C0C7));
+	font-family: Helvetica;
+	font-size: 16px;
+	color: white;
+	line-height: 22px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblRoundRectCategory {
+	color: #4C566C;
+	margin: 18px 0px 0px 20px;
+	text-shadow: rgba(255, 255, 255, 1) 0px 1px 0px;
+	font-family: Helvetica;
+	font-size: 16px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblRoundRectList {
+	margin: 7px 9px 16px;
+	padding: 0px;
+	border: 1px solid #ADAAAD;
+	-webkit-border-radius: 8px;
+	-moz-border-radius: 8px;
+	background-color: white;
+	position: relative; 
+}
+.mblEdgeToEdgeList {
+	padding: 0px;
+	background-color: white;
+	position: relative; 
+	margin: 0px; 
+}
+.mblListItem {
+	list-style-type: none;
+	height: 43px;
+	border-bottom: 1px solid #ADAAAD;
+	line-height: 43px;
+	font-weight: bold;
+	position: relative;
+	color: black;
+	vertical-align: bottom; 
+}
+.mblListItemIcon {
+	position: absolute;
+	margin: 7px 0px 0px 8px;
+}
+.mblListItem.mblVariableHeight {
+	line-height: normal;
+	height: auto;
+	padding: 11px 6px 10px 6px;
+}
+.mblItemSelected {
+	background-color: #048BF4;
+	background: -webkit-gradient(linear, left top, left bottom, from(#048BF4), to(#005CE5));
+}
+li .mblListItemTextBox {
+	padding-right: 28px;
+}
+li .mblListItemTextBoxSelected {
+	background-color: #048BF4;
+}
+.mblRoundRectList .mblListItem:first-child {
+	-webkit-border-top-left-radius: 8px;
+	-webkit-border-top-right-radius: 8px;
+	-moz-border-radius-topleft: 8px;
+	-moz-border-radius-topright: 8px;
+}
+.mblRoundRectList .mblListItem:last-child {
+	border-bottom-width: 0px;
+	-webkit-border-bottom-left-radius: 8px;
+	-webkit-border-bottom-right-radius: 8px;
+	-moz-border-radius-bottomleft: 8px;
+	-moz-border-radius-bottomright: 8px;
+}
+.mblEdgeToEdgeList .mblListItem:last-child {
+	border-bottom-color: #707C84;
+}
+.mblListItem a.mblListItemAnchor {
+	background-position: 9px 7px;
+	display: block;
+	padding-left: 48px;
+	text-decoration: none;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblListItem a.mblListItemAnchorNoIcon {
+	padding-left: 10px;
+}
+.mblItemSelected a.mblListItemAnchor {
+	color: white;
+}
+.mblListItem a.mblListItemAnchorHasRightButton {
+	padding-right: 40px;
+}
+.mblListItem .mblArrow {
+	position: absolute;
+	top: 18px;
+	right: 12px;
+	width: 6px;
+	height: 6px;
+	font-size: 1px;
+	-webkit-transform: rotate(45deg);
+	border-width: 3px 3px 0px 0px;
+	border-style: solid;
+	border-color: #808080;
+}
+.mblItemSelected .mblArrow {
+	border-color: white;
+}
+.mblVariableHeight div.mblArrow {
+	top: 50%;
+	margin-top: -4px;
+}
+.mblRightText {
+	position: absolute;
+	top: 12px;
+	right: 30px;
+	color: #324F85;
+	line-height: normal;
+}
+.mblListItem .mblRightButtonContainer {
+	position: absolute;
+	top: 50%;
+	right: 12px;
+}
+.mblListItem .mblRightButton {
+	position: absolute;
+	top: -50%;
+}
+.mblSwitch {
+	position: relative;
+	width: 94px;
+	height: 27px;
+	overflow: hidden;
+}
+.mblItemSwitch {
+	position: absolute;
+	top: 8px;
+	right: 12px;
+}
+.mblSwitchInner {
+	position: absolute;
+	top: 0px;
+	height: 27px;
+}
+.mblSwitchAnimation .mblSwitchInner {
+	-webkit-transition-property: left;
+	-webkit-transition-duration: .3s;
+}
+.mblSwitchOn .mblSwitchInner {
+	left: 0px;
+}
+.mblSwitchOff .mblSwitchInner {
+	left: -53px;
+}
+.mblSwitchBg {
+	position: absolute;
+	top: 0px;
+	height: 27px;
+	border-width: 1px;
+	border-style: inset;
+	border-color: #9CACC0;
+	font-family: Helvetica;
+	font-size: 16px;
+	font-weight: bold;
+	line-height: 29px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblSwitchBgLeft {
+	left: 0px;
+	width: 94px;
+	color: white;
+	background-color: #3F84EB;
+	background: -webkit-gradient(linear, left top, left bottom, from(#2859B1), to(#75ACFB), color-stop(0.5, #3F84EB), color-stop(0.5, #4C8EEE));
+}
+.mblSwitchBgRight {
+	left: 53px;
+	width: 94px;
+	color: #7F7F7F;
+	background-color: #EEEEEE;
+	background: -webkit-gradient(linear, left top, left bottom, from(#CECECE), to(#FDFDFD), color-stop(0.5, #EEEEEE), color-stop(0.5, #F8F8F8));
+}
+.mblSwitchKnob {
+	position: absolute;
+	top: 1px;
+	left: 53px;
+	width: 41px;
+	height: 26px;
+	font-size: 1px;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #EFEFEF #A5A5A5 #969696 #325E9E;
+	line-height: 29px;
+	background-color: #CCCCCC;
+	background: -webkit-gradient(linear, left top, left bottom, from(#CCCCCC), to(#FAFAFA));
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+}
+.mblSwitchText {
+	position: relative;
+	top: 0px;
+	width: 53px;
+	height: 27px;
+	padding: 0px;
+	text-align: center;
+}
+.mblSwitchTextLeft {
+	left: 0px;
+}
+.mblSwitchTextRight {
+	left: 40px;
+}
+.mblIconContainer {
+	padding: 0px;
+	margin: 20px 0px 0px 10px;
+	padding: 0px 0px 40px 0px;
+}
+.mblIconItem {
+	list-style-type: none;
+	float: left;
+}
+.mblIconItemTerminator {
+	list-style-type: none;
+	height: 20px;
+	clear: both;
+}
+.mblIconItemSub {
+	list-style-type: none;
+	margin-left: -10px;
+	background-color: white;
+}
+.mblIconArea {
+	font-family: Helvetica;
+	font-size: 12px;
+	height: 78px;
+	width: 74px;
+	text-align: center;
+	margin-bottom: 10px;
+}
+.mblIconArea DIV {
+	position: relative;
+	height: 65px;
+}
+.mblIconArea IMG {
+	position: absolute;
+	top: 0px;
+	left: 6px;
+}
+.mblContent {
+	clear: both;
+	padding-bottom: 20px;
+}
+table.mblClose {
+	clear: both;
+	cursor: pointer;
+}
+.mblVibrate{
+	position: relative;
+	-webkit-animation-duration: .5s;
+	-webkit-animation-timing-function: ease-in-out;
+	-webkit-animation-iteration-count: 20;
+	-webkit-animation-name: vibrate;
+	-webkit-transform: rotate(0deg);
+}
+@-webkit-keyframes vibrate{
+	0%{
+		-webkit-transform: rotate(-2deg);
+		bottom: -1px;
+		left: -1px;
+	}
+	25% {
+		-webkit-transform: rotate(1deg);
+		bottom: 2px;
+		left: 1px;
+	}
+	50% {
+		-webkit-transform: rotate(-1deg);
+		bottom: -2px;
+		left: -1px;
+	}
+	75% {
+		-webkit-transform: rotate(2deg);
+		bottom: 2px;
+		left: 1px;
+	}
+	100% {
+		-webkit-transform: rotate(-2deg);
+		bottom: -1px;
+		left: -1px;
+	}
+}
+.mblCloseContent{
+	-webkit-animation-duration: .3s;
+	-webkit-animation-timing-function: ease-in-out;
+	-webkit-animation-name: shrink;
+	-webkit-transform: scale(0.01);
+}
+.mblCloseContent.mblShrink0{
+	-webkit-animation-name: shrink0;
+}
+.mblCloseContent.mblShrink1{
+	-webkit-animation-name: shrink1;
+}
+.mblCloseContent.mblShrink2{
+	-webkit-animation-name: shrink2;
+}
+.mblCloseContent.mblShrink3{
+	-webkit-animation-name: shrink3;
+}
+@-webkit-keyframes shrink{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: scale(0.01); }
+}
+@-webkit-keyframes shrink0{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(-40%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink1{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(-14%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink2{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(14%,-70%) scale(0.01); }
+}
+@-webkit-keyframes shrink3{
+	from { -webkit-transform: scale(1); }
+	to { -webkit-transform: translate(40%,-70%) scale(0.01); }
+}
+.mblIconContentHeading {
+	position: relative;
+	clear: both;
+	height: 25px;
+	padding-left: 40px;
+	margin-top: 0px;
+	background: -webkit-gradient(linear, left top, left bottom, from(#E0E4E7), to(#B4BEC6), color-stop(0.5, #C4CCD2), color-stop(0.5, #BFC8CE));
+	border-top: 1px solid #F1F3F4;
+	border-bottom: 1px solid #717D85;
+	font-family: Helvetica;
+	font-size: 14px;
+	color: white;
+	line-height: 26px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblButton {
+	padding: 0px 10px;
+	height: 29px;
+	border-width: 1px 1px 1px 1px;
+	border-style: outset;
+	color: white;
+	font-family: Helvetica;
+	font-size: 13px;
+	line-height: 29px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	-webkit-tap-highlight-color: transparent;
+}
+.mblBlueButton {
+	border-color: #9CACC0;
+	background-color: #366EDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#7A9DE9), to(#2362DD), color-stop(0.5, #366EDF), color-stop(0.5, #215FDC));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblBlueButtonSelected {
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblRedButton {
+	border-color: #9CACC0;
+	background-color: #366EDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#FA9D58), to(#EE4115), color-stop(0.5, #FF4D25), color-stop(0.5, #ED4D15));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblRedButtonSelected {
+	background: -webkit-gradient(linear, left top, left bottom, from(#C1A48E), to(#9B6C4A), color-stop(0.5, #A27758), color-stop(0.5, #996947));
+}
+.mblTabContainer {
+}
+.mblTabButton {
+	float: left;
+	width: 100px;
+	text-align: center;
+	height: 28px;
+	border-width: 1px 1px 1px 0px;
+	border-style: inset;
+	border-color: #9CACC0;
+	border-right-color: #5E708A;
+	font-family: Helvetica;
+	font-size: 13px;
+	color: white;
+	cursor: pointer;
+	line-height: 29px;
+	background-color: #8297AF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#ABB9CA), to(#788DA9), color-stop(0.5, #8297AF), color-stop(0.5, #768BA7));
+	-webkit-tap-highlight-color: transparent;
+}
+.mblTabButton:first-child {
+	-webkit-border-top-left-radius: 5px;
+	-webkit-border-bottom-left-radius: 5px;
+	-moz-border-radius-topleft: 5px;
+	-moz-border-radius-bottomleft: 5px;
+	border-left-width: 1px;
+}
+.mblTabButton:last-child {
+	-webkit-border-top-right-radius: 5px;
+	-webkit-border-bottom-right-radius: 5px;
+	-moz-border-radius-topright: 5px;
+	-moz-border-radius-bottomright: 5px;
+	border-right-color: #9CACC0;
+}
+.mblTabButtonSelected.mblTabButton {
+	background-color: #5877A2;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblTabButtonImgDiv {
+	display: none;
+}
+.mblTabPanelHeader {
+	position: relative;
+	height: 39px;
+	margin: 0px;
+	padding: 3px 0px 0px 0px;
+	background-color: #889BB3;
+	background: -webkit-gradient(linear, left top, left bottom, from(#B0BCCD), to(#6D84A2), color-stop(0.5, #889BB3), color-stop(0.5, #8195AF));
+	border-top: 1px solid #CDD5DF;
+	border-bottom: 1px solid #2D3642;
+	font-family: Helvetica;
+	font-size: 20px;
+	color: white;
+	text-align: center;
+	line-height: 44px;
+	text-shadow: rgba(0,0,0,0.6) 0px -1px 0px;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+}
+.mblTabPanelPane {
+}
+.mblTabPane {
+}
+.mblProgContainer {
+	position: absolute;
+	width: 36px;
+	height: 36px;
+	top: 180px;
+	left: 50%;
+	margin: -18px 0px 0px -18px;
+}
+.mblProg {
+	position: absolute;
+	left: 0px;
+	top: 0px;
+	width: 11px;
+	font-size: 1px;
+	height: 4px;
+	overflow: hidden;
+	-webkit-transform-origin: 0 2px;
+	background-color: #C0C0C0;
+	-webkit-border-radius: 2px;
+	-moz-border-radius: 2px;
+}
+.mblProg0 {
+	-webkit-transform: translate(18px,10px) rotate(-90deg);
+}
+.mblProg1 {
+	-webkit-transform: translate(22px,11px) rotate(-60deg);
+}
+.mblProg2 {
+	-webkit-transform: translate(25px,14px) rotate(-30deg);
+}
+.mblProg3 {
+	-webkit-transform: translate(26px,18px) rotate(0deg);
+}
+.mblProg4 {
+	-webkit-transform: translate(25px,22px) rotate(30deg);
+}
+.mblProg5 {
+	-webkit-transform: translate(22px,25px) rotate(60deg);
+}
+.mblProg6 {
+	-webkit-transform: translate(18px,26px) rotate(90deg);
+}
+.mblProg7 {
+	-webkit-transform: translate(14px,25px) rotate(120deg);
+}
+.mblProg8 {
+	-webkit-transform: translate(11px,22px) rotate(150deg);
+}
+.mblProg9 {
+	-webkit-transform: translate(10px,18px) rotate(180deg);
+}
+.mblProg10 {
+	-webkit-transform: translate(11px,14px) rotate(210deg);
+}
+.mblProg11 {
+	-webkit-transform: translate(14px,11px) rotate(240deg);
+}
Index: trunk/web/dojo/dojox/mobile/themes/iphone/iphone-compat.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/iphone/iphone-compat.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/iphone/iphone-compat.css	(revision 9)
@@ -0,0 +1,266 @@
+
+.mblHeading {
+	background-image: url(compat/heading-bg.png);
+}
+.mblArrowButtonHead {
+	position: absolute;
+	top: 5px;
+	left: 6px;
+	width: 19px;
+	height: 29px;
+	background-image: url(compat/arrow-button-head.png);
+}
+.mblArrowButtonBody {
+	background-image: url(compat/arrow-button-bg.png);
+}
+.mblRoundCorner {
+	background-color: white;
+	height: 1px;
+	font-size: 1px;
+	overflow: hidden;
+	border-style: solid;
+	border-color: #ADAAAD;
+	border-width: 0px 1px;
+}
+.mblRoundRectContainer {
+	margin: 0px;
+	padding: 0px;
+	background-color: white;
+	border-style: solid;
+	border-color: #ADAAAD;
+	border-width: 0px 1px;
+}
+.mblRoundRect .mblRoundRectContainer {
+	padding: 3px 8px;
+}
+.mblRoundCorner0T {
+	height: 0px;
+}
+.mblRoundCorner1T {
+	background-color: #ADAAAD;
+	margin: 0px 5px;
+}
+.mblRoundCorner2T {
+	margin: 0px 2px;
+	border-width: 0px 3px;
+}
+.mblRoundCorner3T {
+	margin: 0px 1px;
+	border-width: 0px 2px;
+}
+.mblRoundCorner4T {
+	margin: 0px 1px;
+}
+.mblRoundCorner5T {
+	margin: 0px 1px;
+}
+.mblRoundCorner0B {
+	height: 0px;
+}
+.mblRoundCorner1B {
+	margin: 0px 1px;
+}
+.mblRoundCorner2B {
+	margin: 0px 1px;
+}
+.mblRoundCorner3B {
+	margin: 0px 1px;
+	border-width: 0px 2px;
+}
+.mblRoundCorner4B {
+	margin: 0px 2px;
+	border-width: 0px 3px;
+}
+.mblRoundCorner5B {
+	background-color: #ADAAAD;
+	margin: 0px 5px;
+}
+.mblEdgeToEdgeCategory {
+	background-image: url(compat/edge-categ-bg.png);
+}
+*html li.mblListItem.mblVariableHeight { 
+	height: 0;
+}
+li.mblListItem .mblArrow, div.mblListItem .mblArrow {
+	border-style: none;
+	top: 16px;
+	width: 9px;
+	height: 13px;
+	background-image: url(compat/gray-arrow.png);
+}
+li.mblItemSelected .mblArrow, div.mblItemSelected .mblArrow {
+	background-image: url(compat/white-arrow.png);
+}
+.mblSwitchInner {
+	width: 100px;
+}
+.mblSwitchBg {
+	border: none;
+}
+.mblSwitchBgLeft {
+	width: 89px;
+	background: none;
+}
+.mblSwitchBgRight {
+	width: 89px;
+	left: 58px;
+	background: none;
+}
+.mblSwitchKnobContainer {
+	position: relative;
+	left: 53px;
+	width: 41px;
+	height: 26px;
+}
+.mblSwitchKnob {
+	position: relative;
+	top: 0px;
+	left: 0px;
+	width: auto;
+	height: 21px;
+	background-image: url(compat/switch-knob-bg.png);
+	border-width: 0px 1px;
+	-moz-border-radius: 0px;
+}
+.mblSwitchCorner {
+	position: relative;
+	height: 1px;
+	font-size: 1px;
+	overflow: hidden;
+	border-style: solid;
+	border-color: #878787;
+}
+.mblSwitchCorner1T {
+	background-color: #848684;
+	margin: 0px 4px;
+	border-width: 0px;
+}
+.mblSwitchCorner2T {
+	background-color: #C0C0C0;
+	margin: 0px 2px;
+	border-width: 0px 2px;
+}
+.mblSwitchCorner3T {
+	background-color: #C6C7C6;
+	margin: 0px 1px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner1B {
+	background-color: #FBFBFB;
+	margin: 0px 1px;
+	border-width: 0px 1px;
+}
+.mblSwitchCorner2B {
+	background-color: #FBFBFB;
+	margin: 0px 2px;
+	border-width: 0px 2px;
+}
+.mblSwitchCorner3B {
+	background-color: #878787;
+	margin: 0px 4px;
+	border-width: 0px;
+}
+.mblSwitchBgLeft .mblSwitchCorner1T {
+	border-width: 0px 2px;
+	background-color: #093889;
+}
+.mblSwitchBgLeft .mblSwitchCorner2T {
+	background-color: #285AB2;
+}
+.mblSwitchBgLeft .mblSwitchCorner3T {
+	background-color: #285AB2;
+}
+.mblSwitchBgLeft .mblSwitchCorner1B {
+	background-color: #66A1F6;
+}
+.mblSwitchBgLeft .mblSwitchCorner2B {
+	background-color: #66A1F6;
+}
+.mblSwitchBgLeft .mblSwitchCorner3B {
+	background-color: #5289D7;
+}
+.mblSwitchText {
+	height: 21px;
+	line-height: 21px;
+}
+.mblSwitchTextLeft {
+	background-image: url(compat/switch-blue-bg.png);
+	border-left: 1px solid #848684;
+}
+.mblSwitchTextRight {
+	background-image: url(compat/switch-gray-bg.png);
+	left: 35px;
+	border-right: 1px solid #848684;
+}
+.mblIconContentHeading {
+	background-image: url(compat/icon-content-heading-bg.png);
+}
+.mblBlueButton {
+	background-image: url(compat/blue-button-bg.png);
+}
+.mblBlueButtonSelected {
+	background-image: url(compat/blue-button-sel-bg.png);
+}
+.mblTabPanelHeader {
+	background-image: url(compat/heading-bg.png);
+}
+.mblTabButton {
+	background-image: url(compat/tab-button-bg.png);
+}
+.mblTabButtonSelected {
+	background-image: url(compat/tab-sel-button-bg.png);
+}
+*html .mblTabButton { 
+	behavior: expression(
+		(function(el){
+			if(!el.previousSibling)
+				el.style.borderWidth = "1px";
+			el.style.behavior = "none";
+		})(this)
+	);
+}
+.mblProg {
+	position: absolute;
+	top: 0px;
+	width: 4px;
+	font-size: 1px;
+	height: 36px;
+	overflow: hidden;
+	background-color: #C0C0C0;
+}
+.mblProg0 {
+	left: 0px;
+}
+.mblProg1 {
+	left: 8px;
+}
+.mblProg2 {
+	left: 16px;
+}
+.mblProg3 {
+	left: 24px;
+}
+.mblProg4 {
+	left: 32px;
+}
+.mblProg5 {
+	left: 40px;
+}
+.mblProg6 {
+	left: 48px;
+}
+.mblProg7 {
+	left: 56px;
+}
+.mblProg8 {
+	left: 64px;
+}
+.mblProg9 {
+	left: 72px;
+}
+.mblProg10 {
+	left: 80px;
+}
+.mblProg11 {
+	left: 80px;
+}
Index: trunk/web/dojo/dojox/mobile/themes/compat/small-blue-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/compat/small-blue-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/compat/small-blue-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/compat/small-blue-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/compat/small-blue-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/compat/check-off-button.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/compat/check-off-button.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/compat/check-off-button.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/compat/check-off-button.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/compat/check-off-button.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/compat/small-darkblue-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/compat/small-darkblue-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/compat/small-darkblue-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/compat/small-darkblue-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/compat/small-darkblue-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/compat/small-red-button-bg.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/compat/small-red-button-bg.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/compat/small-red-button-bg.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/compat/small-red-button-bg.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/compat/small-red-button-bg.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/compat/check-on-button.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/mobile/themes/compat/check-on-button.png
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/compat/check-on-button.png	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/compat/check-on-button.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/mobile/themes/compat/check-on-button.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/mobile/themes/buttons.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/buttons.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/buttons.css	(revision 9)
@@ -0,0 +1,187 @@
+
+.mblBlueMinusButton {
+	position: relative;
+	width: 22px;
+	height: 18px;
+	border-width: 1px 1px 1px 0px;
+	border-style: outset;
+	border-color: #6D89C7;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #366EDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#7A9DE9), to(#2362DD), color-stop(0.5, #366EDF), color-stop(0.5, #215FDC));
+}
+.mblDarkBlueMinusButton {
+	position: relative;
+	width: 22px;
+	height: 18px;
+	border-width: 1px 1px 1px 0px;
+	border-style: outset;
+	border-color: #6D89C7;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #5877A2;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblRedMinusButton {
+	position: relative;
+	width: 22px;
+	height: 18px;
+	border-width: 1px 1px 1px 0px;
+	border-style: outset;
+	border-color: #cc1122;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #C9404B;
+	background: -webkit-gradient(linear, left top, left bottom, from(#D3656D), to(#BC1320), color-stop(0.5, #C9404B), color-stop(0.5, #BC1421));
+}
+.mblBlueMinusButton DIV, .mblDarkBlueMinusButton DIV, .mblRedMinusButton DIV {
+	position: absolute;
+	top: 7px;
+	left: 7px;
+	width: 8px;
+	height: 2px;
+	margin: 0px;
+	font-size: 1px;
+	background-color: white;
+	border-top: 1px solid #4A5A71;
+}
+.mblBluePlusButton {
+	position: relative;
+	width: 22px;
+	height: 18px;
+	border-width: 1px 1px 1px 0px;
+	border-style: outset;
+	border-color: #6D89C7;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #366EDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#7A9DE9), to(#2362DD), color-stop(0.5, #366EDF), color-stop(0.5, #215FDC));
+}
+.mblDarkBluePlusButton {
+	position: relative;
+	width: 22px;
+	height: 18px;
+	border-width: 1px 1px 1px 0px;
+	border-style: outset;
+	border-color: #6D89C7;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #5877A2;
+	background: -webkit-gradient(linear, left top, left bottom, from(#8EA4C1), to(#4A6C9B), color-stop(0.5, #5877A2), color-stop(0.5, #476999));
+}
+.mblRedPlusButton {
+	position: relative;
+	width: 22px;
+	height: 18px;
+	border-width: 1px 1px 1px 0px;
+	border-style: outset;
+	border-color: #6D89C7;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #C9404B;
+	background: -webkit-gradient(linear, left top, left bottom, from(#D3656D), to(#BC1320), color-stop(0.5, #C9404B), color-stop(0.5, #BC1421));
+}
+.mblBluePlusButton DIV, .mblDarkBluePlusButton DIV, .mblRedPlusButton DIV {
+	position: absolute;
+	top: 7px;
+	left: 7px;
+	width: 8px;
+	height: 2px;
+	margin: 0px;
+	font-size: 1px;
+	background-color: white;
+	border-top: 1px solid #4A5A71;
+}
+.mblBluePlusButton P, .mblDarkBluePlusButton P, .mblRedPlusButton P {
+	position: absolute;
+	top: 4px;
+	left: 10px;
+	width: 2px;
+	height: 8px;
+	margin: 0px;
+	font-size: 1px;
+	background-color: white;
+}
+.mblCheckOnButton {
+	position: relative;
+	width: 30px;
+	height: 30px;
+	border-width: 1px;
+	border-style: outset;
+	border-color: #A5A2A5;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #D6D3D6;
+	background: -webkit-gradient(linear, left top, left bottom, from(#EFF3EF), to(#BDBEBD));
+}
+.mblCheckOnButton DIV {
+	position: absolute;
+	top: 15px;
+	left: 3px;
+	width: 14px;
+	height: 4px;
+	margin: 0px;
+	font-size: 1px;
+	background-color: #00CF00;
+	border-top: 1px solid #4A5A71;
+	-webkit-border-radius: 2px;
+	-webkit-transform: rotate(50deg);
+}
+.mblCheckOnButton P {
+	position: absolute;
+	top: 11px;
+	left: 9px;
+	width: 20px;
+	height: 4px;
+	margin: 0px;
+	font-size: 1px;
+	background-color: #00CF00;
+	border-bottom: 1px solid #4A5A71;
+	-webkit-border-radius: 2px;
+	-webkit-transform: rotate(-50deg);
+}
+.mblCheckOffButton {
+	position: relative;
+	width: 30px;
+	height: 30px;
+	border-width: 1px;
+	border-style: outset;
+	border-color: #A5A2A5;
+	color: white;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	background-color: #D6D3D6;
+	background: -webkit-gradient(linear, left top, left bottom, from(#EFF3EF), to(#BDBEBD));
+}
+.mblCheckOffButton DIV {
+	position: absolute;
+	top: 11px;
+	left: 9px;
+	width: 20px;
+	height: 4px;
+	font-size: 1px;
+	background-color: #BDBABD;
+	border-top: 1px solid #8C8E8C;
+	-webkit-border-radius: 2px;
+	-webkit-transform: rotate(-50deg);
+}
+.mblCheckOffButton P {
+	position: absolute;
+	top: 15px;
+	left: 3px;
+	width: 14px;
+	height: 4px;
+	font-size: 1px;
+	background-color: #BDBABD;
+	border-bottom: 1px solid #8C8E8C;
+	-webkit-border-radius: 2px;
+	-webkit-transform: rotate(50deg);
+}
Index: trunk/web/dojo/dojox/mobile/themes/buttons-compat.css
===================================================================
--- trunk/web/dojo/dojox/mobile/themes/buttons-compat.css	(revision 0)
+++ trunk/web/dojo/dojox/mobile/themes/buttons-compat.css	(revision 9)
@@ -0,0 +1,30 @@
+.mblBlueMinusButton {
+	background-image: url(compat/small-blue-button-bg.png);
+}
+.mblDarkBlueMinusButton {
+	background-image: url(compat/small-darkblue-button-bg.png);
+}
+.mblRedMinusButton {
+	background-image: url(compat/small-red-button-bg.png);
+}
+.mblBluePlusButton {
+	background-image: url(compat/small-blue-button-bg.png);
+}
+.mblDarkBluePlusButton {
+	background-image: url(compat/small-darkblue-button-bg.png);
+}
+.mblRedPlusButton {
+	background-image: url(compat/small-red-button-bg.png);
+}
+.mblCheckOnButton {
+	background-image: url(compat/check-on-button.png);
+}
+.mblCheckOnButton DIV, .mblCheckOnButton P {
+	display: none;
+}
+.mblCheckOffButton {
+	background-image: url(compat/check-off-button.png);
+}
+.mblCheckOffButton DIV, .mblCheckOffButton P {
+	display: none;
+}
Index: trunk/web/dojo/dojox/json/query.js
===================================================================
--- trunk/web/dojo/dojox/json/query.js	(revision 0)
+++ trunk/web/dojo/dojox/json/query.js	(revision 9)
@@ -0,0 +1,142 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.json.query"]){
+dojo._hasResource["dojox.json.query"]=true;
+dojo.provide("dojox.json.query");
+(function(){
+dojox.json._slice=function(_1,_2,_3,_4){
+var _5=_1.length,_6=[];
+_3=_3||_5;
+_2=(_2<0)?Math.max(0,_2+_5):Math.min(_5,_2);
+_3=(_3<0)?Math.max(0,_3+_5):Math.min(_5,_3);
+for(var i=_2;i<_3;i+=_4){
+_6.push(_1[i]);
+}
+return _6;
+};
+dojox.json._find=function e(_7,_8){
+var _9=[];
+function _a(_b){
+if(_8){
+if(_8===true&&!(_b instanceof Array)){
+_9.push(_b);
+}else{
+if(_b[_8]){
+_9.push(_b[_8]);
+}
+}
+}
+for(var i in _b){
+var _c=_b[i];
+if(!_8){
+_9.push(_c);
+}else{
+if(_c&&typeof _c=="object"){
+_a(_c);
+}
+}
+}
+};
+if(_8 instanceof Array){
+if(_8.length==1){
+return _7[_8[0]];
+}
+for(var i=0;i<_8.length;i++){
+_9.push(_7[_8[i]]);
+}
+}else{
+_a(_7);
+}
+return _9;
+};
+dojox.json._distinctFilter=function(_d,_e){
+var _f=[];
+var _10={};
+for(var i=0,l=_d.length;i<l;++i){
+var _11=_d[i];
+if(_e(_11,i,_d)){
+if((typeof _11=="object")&&_11){
+if(!_11.__included){
+_11.__included=true;
+_f.push(_11);
+}
+}else{
+if(!_10[_11+typeof _11]){
+_10[_11+typeof _11]=true;
+_f.push(_11);
+}
+}
+}
+}
+for(i=0,l=_f.length;i<l;++i){
+if(_f[i]){
+delete _f[i].__included;
+}
+}
+return _f;
+};
+dojox.json.query=function(_12,obj){
+var _13=0;
+var str=[];
+_12=_12.replace(/"(\\.|[^"\\])*"|'(\\.|[^'\\])*'|[\[\]]/g,function(t){
+_13+=t=="["?1:t=="]"?-1:0;
+return (t=="]"&&_13>0)?"`]":(t.charAt(0)=="\""||t.charAt(0)=="'")?"`"+(str.push(t)-1):t;
+});
+var _14="";
+function _15(_16){
+_14=_16+"("+_14;
+};
+function _17(t,a,b,c,d,e,f,g){
+return str[g].match(/[\*\?]/)||f=="~"?"/^"+str[g].substring(1,str[g].length-1).replace(/\\([btnfr\\"'])|([^\w\*\?])/g,"\\$1$2").replace(/([\*\?])/g,"[\\w\\W]$1")+(f=="~"?"$/i":"$/")+".test("+a+")":t;
+};
+_12.replace(/(\]|\)|push|pop|shift|splice|sort|reverse)\s*\(/,function(){
+throw new Error("Unsafe function call");
+});
+_12=_12.replace(/([^=]=)([^=])/g,"$1=$2").replace(/@|(\.\s*)?[a-zA-Z\$_]+(\s*:)?/g,function(t){
+return t.charAt(0)=="."?t:t=="@"?"$obj":(t.match(/:|^(\$|Math|true|false|null)$/)?"":"$obj.")+t;
+}).replace(/\.?\.?\[(`\]|[^\]])*\]|\?.*|\.\.([\w\$_]+)|\.\*/g,function(t,a,b){
+var _18=t.match(/^\.?\.?(\[\s*\^?\?|\^?\?|\[\s*==)(.*?)\]?$/);
+if(_18){
+var _19="";
+if(t.match(/^\./)){
+_15("dojox.json._find");
+_19=",true)";
+}
+_15(_18[1].match(/\=/)?"dojo.map":_18[1].match(/\^/)?"dojox.json._distinctFilter":"dojo.filter");
+return _19+",function($obj){return "+_18[2]+"})";
+}
+_18=t.match(/^\[\s*([\/\\].*)\]/);
+if(_18){
+return ".concat().sort(function(a,b){"+_18[1].replace(/\s*,?\s*([\/\\])\s*([^,\\\/]+)/g,function(t,a,b){
+return "var av= "+b.replace(/\$obj/,"a")+",bv= "+b.replace(/\$obj/,"b")+";if(av>bv||bv==null){return "+(a=="/"?1:-1)+";}\n"+"if(bv>av||av==null){return "+(a=="/"?-1:1)+";}\n";
+})+"return 0;})";
+}
+_18=t.match(/^\[(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)\]/);
+if(_18){
+_15("dojox.json._slice");
+return ","+(_18[1]||0)+","+(_18[2]||0)+","+(_18[3]||1)+")";
+}
+if(t.match(/^\.\.|\.\*|\[\s*\*\s*\]|,/)){
+_15("dojox.json._find");
+return (t.charAt(1)=="."?",'"+b+"'":t.match(/,/)?","+t:"")+")";
+}
+return t;
+}).replace(/(\$obj\s*((\.\s*[\w_$]+\s*)|(\[\s*`([0-9]+)\s*`\]))*)(==|~)\s*`([0-9]+)/g,_17).replace(/`([0-9]+)\s*(==|~)\s*(\$obj\s*((\.\s*[\w_$]+)|(\[\s*`([0-9]+)\s*`\]))*)/g,function(t,a,b,c,d,e,f,g){
+return _17(t,c,d,e,f,g,b,a);
+});
+_12=_14+(_12.charAt(0)=="$"?"":"$")+_12.replace(/`([0-9]+|\])/g,function(t,a){
+return a=="]"?"]":str[a];
+});
+var _1a=eval("1&&function($,$1,$2,$3,$4,$5,$6,$7,$8,$9){var $obj=$;return "+_12+"}");
+for(var i=0;i<arguments.length-1;i++){
+arguments[i]=arguments[i+1];
+}
+return obj?_1a.apply(this,arguments):_1a;
+};
+})();
+}
Index: trunk/web/dojo/dojox/json/ref.js
===================================================================
--- trunk/web/dojo/dojox/json/ref.js	(revision 0)
+++ trunk/web/dojo/dojox/json/ref.js	(revision 9)
@@ -0,0 +1,251 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.json.ref"]){
+dojo._hasResource["dojox.json.ref"]=true;
+dojo.provide("dojox.json.ref");
+dojo.require("dojo.date.stamp");
+dojox.json.ref={resolveJson:function(_1,_2){
+_2=_2||{};
+var _3=_2.idAttribute||"id";
+var _4=this.refAttribute;
+var _5=_2.idAsRef;
+var _6=_2.idPrefix||"";
+var _7=_2.assignAbsoluteIds;
+var _8=_2.index||{};
+var _9=_2.timeStamps;
+var _a,_b=[];
+var _c=/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/;
+var _d=this._addProp;
+var F=function(){
+};
+function _e(it,_f,_10,_11,_12,_13){
+var i,_14,val,id=_3 in it?it[_3]:_10;
+if(_3 in it||((id!==undefined)&&_11)){
+id=(_6+id).replace(_c,"$2$3");
+}
+var _15=_13||it;
+if(id!==undefined){
+if(_7){
+it.__id=id;
+}
+if(_2.schemas&&(!(it instanceof Array))&&(val=id.match(/^(.+\/)[^\.\[]*$/))){
+_12=_2.schemas[val[1]];
+}
+if(_8[id]&&((it instanceof Array)==(_8[id] instanceof Array))){
+_15=_8[id];
+delete _15.$ref;
+delete _15._loadObject;
+_14=true;
+}else{
+var _16=_12&&_12.prototype;
+if(_16){
+F.prototype=_16;
+_15=new F();
+}
+}
+_8[id]=_15;
+if(_9){
+_9[id]=_2.time;
+}
+}
+while(_12){
+var _17=_12.properties;
+if(_17){
+for(i in it){
+var _18=_17[i];
+if(_18&&_18.format=="date-time"&&typeof it[i]=="string"){
+it[i]=dojo.date.stamp.fromISOString(it[i]);
+}
+}
+}
+_12=_12["extends"];
+}
+var _19=it.length;
+for(i in it){
+if(i==_19){
+break;
+}
+if(it.hasOwnProperty(i)){
+val=it[i];
+if((typeof val=="object")&&val&&!(val instanceof Date)&&i!="__parent"){
+_a=val[_4]||(_5&&val[_3]);
+if(!_a||!val.__parent){
+if(it!=_b){
+val.__parent=_15;
+}
+}
+if(_a){
+delete it[i];
+var _1a=_a.toString().replace(/(#)([^\.\[])/,"$1.$2").match(/(^([^\[]*\/)?[^#\.\[]*)#?([\.\[].*)?/);
+if((_a=(_1a[1]=="$"||_1a[1]=="this"||_1a[1]=="")?_1:_8[(_6+_1a[1]).replace(_c,"$2$3")])){
+if(_1a[3]){
+_1a[3].replace(/(\[([^\]]+)\])|(\.?([^\.\[]+))/g,function(t,a,b,c,d){
+_a=_a&&_a[b?b.replace(/[\"\'\\]/,""):d];
+});
+}
+}
+if(_a){
+val=_a;
+}else{
+if(!_f){
+var _1b;
+if(!_1b){
+_b.push(_15);
+}
+_1b=true;
+val=_e(val,false,val[_4],true,_18);
+val._loadObject=_2.loader;
+}
+}
+}else{
+if(!_f){
+val=_e(val,_b==it,id===undefined?undefined:_d(id,i),false,_18,_15!=it&&typeof _15[i]=="object"&&_15[i]);
+}
+}
+}
+it[i]=val;
+if(_15!=it&&!_15.__isDirty){
+var old=_15[i];
+_15[i]=val;
+if(_14&&val!==old&&!_15._loadObject&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&i!="$ref"&&!(val instanceof Date&&old instanceof Date&&val.getTime()==old.getTime())&&!(typeof val=="function"&&typeof old=="function"&&val.toString()==old.toString())&&_8.onUpdate){
+_8.onUpdate(_15,i,old,val);
+}
+}
+}
+}
+if(_14&&(_3 in it||_15 instanceof Array)){
+for(i in _15){
+if(!_15.__isDirty&&_15.hasOwnProperty(i)&&!it.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&!(_15 instanceof Array&&isNaN(i))){
+if(_8.onUpdate&&i!="_loadObject"&&i!="_idAttr"){
+_8.onUpdate(_15,i,_15[i],undefined);
+}
+delete _15[i];
+while(_15 instanceof Array&&_15.length&&_15[_15.length-1]===undefined){
+_15.length--;
+}
+}
+}
+}else{
+if(_8.onLoad){
+_8.onLoad(_15);
+}
+}
+return _15;
+};
+if(_1&&typeof _1=="object"){
+_1=_e(_1,false,_2.defaultId,true);
+_e(_b,false);
+}
+return _1;
+},fromJson:function(str,_1c){
+function ref(_1d){
+var _1e={};
+_1e[this.refAttribute]=_1d;
+return _1e;
+};
+try{
+var _1f=eval("("+str+")");
+}
+catch(e){
+throw new SyntaxError("Invalid JSON string: "+e.message+" parsing: "+str);
+}
+if(_1f){
+return this.resolveJson(_1f,_1c);
+}
+return _1f;
+},toJson:function(it,_20,_21,_22){
+var _23=this._useRefs;
+var _24=this._addProp;
+var _25=this.refAttribute;
+_21=_21||"";
+var _26={};
+var _27={};
+function _28(it,_29,_2a){
+if(typeof it=="object"&&it){
+var _2b;
+if(it instanceof Date){
+return "\""+dojo.date.stamp.toISOString(it,{zulu:true})+"\"";
+}
+var id=it.__id;
+if(id){
+if(_29!="#"&&((_23&&!id.match(/#/))||_26[id])){
+var ref=id;
+if(id.charAt(0)!="#"){
+if(it.__clientId==id){
+ref="cid:"+id;
+}else{
+if(id.substring(0,_21.length)==_21){
+ref=id.substring(_21.length);
+}else{
+ref=id;
+}
+}
+}
+var _2c={};
+_2c[_25]=ref;
+return _28(_2c,"#");
+}
+_29=id;
+}else{
+it.__id=_29;
+_27[_29]=it;
+}
+_26[_29]=it;
+_2a=_2a||"";
+var _2d=_20?_2a+dojo.toJsonIndentStr:"";
+var _2e=_20?"\n":"";
+var sep=_20?" ":"";
+if(it instanceof Array){
+var res=dojo.map(it,function(obj,i){
+var val=_28(obj,_24(_29,i),_2d);
+if(typeof val!="string"){
+val="undefined";
+}
+return _2e+_2d+val;
+});
+return "["+res.join(","+sep)+_2e+_2a+"]";
+}
+var _2f=[];
+for(var i in it){
+if(it.hasOwnProperty(i)){
+var _30;
+if(typeof i=="number"){
+_30="\""+i+"\"";
+}else{
+if(typeof i=="string"&&(i.charAt(0)!="_"||i.charAt(1)!="_")){
+_30=dojo._escapeString(i);
+}else{
+continue;
+}
+}
+var val=_28(it[i],_24(_29,i),_2d);
+if(typeof val!="string"){
+continue;
+}
+_2f.push(_2e+_2d+_30+":"+sep+val);
+}
+}
+return "{"+_2f.join(","+sep)+_2e+_2a+"}";
+}else{
+if(typeof it=="function"&&dojox.json.ref.serializeFunctions){
+return it.toString();
+}
+}
+return dojo.toJson(it);
+};
+var _31=_28(it,"#","");
+if(!_22){
+for(var i in _27){
+delete _27[i].__id;
+}
+}
+return _31;
+},_addProp:function(id,_32){
+return id+(id.match(/#/)?id.length==1?"":".":"#")+_32;
+},refAttribute:"$ref",_useRefs:false,serializeFunctions:false};
+}
Index: trunk/web/dojo/dojox/json/schema.js
===================================================================
--- trunk/web/dojo/dojox/json/schema.js	(revision 0)
+++ trunk/web/dojo/dojox/json/schema.js	(revision 9)
@@ -0,0 +1,186 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.json.schema"]){
+dojo._hasResource["dojox.json.schema"]=true;
+dojo.provide("dojox.json.schema");
+dojox.json.schema.validate=function(_1,_2){
+return this._validate(_1,_2,false);
+};
+dojox.json.schema.checkPropertyChange=function(_3,_4,_5){
+return this._validate(_3,_4,_5||"property");
+};
+dojox.json.schema.mustBeValid=function(_6){
+if(!_6.valid){
+throw new TypeError(dojo.map(_6.errors,function(_7){
+return "for property "+_7.property+": "+_7.message;
+}).join(", "));
+}
+};
+dojox.json.schema._validate=function(_8,_9,_a){
+var _b=[];
+function _c(_d,_e,_f,i){
+var l;
+_f+=_f?typeof i=="number"?"["+i+"]":typeof i=="undefined"?"":"."+i:i;
+function _10(_11){
+_b.push({property:_f,message:_11});
+};
+if((typeof _e!="object"||_e instanceof Array)&&(_f||typeof _e!="function")){
+if(typeof _e=="function"){
+if(!(Object(_d) instanceof _e)){
+_10("is not an instance of the class/constructor "+_e.name);
+}
+}else{
+if(_e){
+_10("Invalid schema/property definition "+_e);
+}
+}
+return null;
+}
+if(_a&&_e.readonly){
+_10("is a readonly field, it can not be changed");
+}
+if(_e["extends"]){
+_c(_d,_e["extends"],_f,i);
+}
+function _12(_13,_14){
+if(_13){
+if(typeof _13=="string"&&_13!="any"&&(_13=="null"?_14!==null:typeof _14!=_13)&&!(_14 instanceof Array&&_13=="array")&&!(_13=="integer"&&_14%1===0)){
+return [{property:_f,message:(typeof _14)+" value found, but a "+_13+" is required"}];
+}
+if(_13 instanceof Array){
+var _15=[];
+for(var j=0;j<_13.length;j++){
+if(!(_15=_12(_13[j],_14)).length){
+break;
+}
+}
+if(_15.length){
+return _15;
+}
+}else{
+if(typeof _13=="object"){
+var _16=_b;
+_b=[];
+_c(_14,_13,_f);
+var _17=_b;
+_b=_16;
+return _17;
+}
+}
+}
+return [];
+};
+if(_d===undefined){
+if(!_e.optional){
+_10("is missing and it is not optional");
+}
+}else{
+_b=_b.concat(_12(_e.type,_d));
+if(_e.disallow&&!_12(_e.disallow,_d).length){
+_10(" disallowed value was matched");
+}
+if(_d!==null){
+if(_d instanceof Array){
+if(_e.items){
+if(_e.items instanceof Array){
+for(i=0,l=_d.length;i<l;i++){
+_b.concat(_c(_d[i],_e.items[i],_f,i));
+}
+}else{
+for(i=0,l=_d.length;i<l;i++){
+_b.concat(_c(_d[i],_e.items,_f,i));
+}
+}
+}
+if(_e.minItems&&_d.length<_e.minItems){
+_10("There must be a minimum of "+_e.minItems+" in the array");
+}
+if(_e.maxItems&&_d.length>_e.maxItems){
+_10("There must be a maximum of "+_e.maxItems+" in the array");
+}
+}else{
+if(_e.properties){
+_b.concat(_18(_d,_e.properties,_f,_e.additionalProperties));
+}
+}
+if(_e.pattern&&typeof _d=="string"&&!_d.match(_e.pattern)){
+_10("does not match the regex pattern "+_e.pattern);
+}
+if(_e.maxLength&&typeof _d=="string"&&_d.length>_e.maxLength){
+_10("may only be "+_e.maxLength+" characters long");
+}
+if(_e.minLength&&typeof _d=="string"&&_d.length<_e.minLength){
+_10("must be at least "+_e.minLength+" characters long");
+}
+if(typeof _e.minimum!==undefined&&typeof _d==typeof _e.minimum&&_e.minimum>_d){
+_10("must have a minimum value of "+_e.minimum);
+}
+if(typeof _e.maximum!==undefined&&typeof _d==typeof _e.maximum&&_e.maximum<_d){
+_10("must have a maximum value of "+_e.maximum);
+}
+if(_e["enum"]){
+var _19=_e["enum"];
+l=_19.length;
+var _1a;
+for(var j=0;j<l;j++){
+if(_19[j]===_d){
+_1a=1;
+break;
+}
+}
+if(!_1a){
+_10("does not have a value in the enumeration "+_19.join(", "));
+}
+}
+if(typeof _e.maxDecimal=="number"&&(_d.toString().match(new RegExp("\\.[0-9]{"+(_e.maxDecimal+1)+",}")))){
+_10("may only have "+_e.maxDecimal+" digits of decimal places");
+}
+}
+}
+return null;
+};
+function _18(_1b,_1c,_1d,_1e){
+if(typeof _1c=="object"){
+if(typeof _1b!="object"||_1b instanceof Array){
+_b.push({property:_1d,message:"an object is required"});
+}
+for(var i in _1c){
+if(_1c.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")){
+var _1f=_1b[i];
+var _20=_1c[i];
+_c(_1f,_20,_1d,i);
+}
+}
+}
+for(i in _1b){
+if(_1b.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&_1c&&!_1c[i]&&_1e===false){
+_b.push({property:_1d,message:(typeof _1f)+"The property "+i+" is not defined in the schema and the schema does not allow additional properties"});
+}
+var _21=_1c&&_1c[i]&&_1c[i].requires;
+if(_21&&!(_21 in _1b)){
+_b.push({property:_1d,message:"the presence of the property "+i+" requires that "+_21+" also be present"});
+}
+_1f=_1b[i];
+if(_1c&&typeof _1c=="object"&&!(i in _1c)){
+_c(_1f,_1e,_1d,i);
+}
+if(!_a&&_1f&&_1f.$schema){
+_b=_b.concat(_c(_1f,_1f.$schema,_1d,i));
+}
+}
+return _b;
+};
+if(_9){
+_c(_8,_9,"",_a||"");
+}
+if(!_a&&_8&&_8.$schema){
+_c(_8,_8.$schema,"","");
+}
+return {valid:!_b.length,errors:_b};
+};
+}
Index: trunk/web/dojo/dojox/json/README
===================================================================
--- trunk/web/dojo/dojox/json/README	(revision 0)
+++ trunk/web/dojo/dojox/json/README	(revision 9)
@@ -0,0 +1,42 @@
+-------------------------------------------------------------------------------
+DojoX JSON Modules
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 07/06/2008
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Kris Zyp (kris@sitepen.com)
+-------------------------------------------------------------------------------
+Project description
+JSONQuery (dojox.json.query) - A comprehensive object data query tool
+JSON Schema (dojox.json.schema) - An object validation tool based on JSON Schema
+JSON Referencing (dojox.json.ref) - JSON Referencing capable serializer and
+deserializer.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojox.json.ref uses dojo.date.stamp
+-------------------------------------------------------------------------------
+Documentation
+See the Dojo API tool (http://dojotoolkit.org/api)
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/json/*
+
+Install into the following directory structure:
+/dojox/json/
+
+...which should be at the same level as your Dojo checkout.
+
+/dojox/json/*
+
+Require in the dojox.data stores you wish to use.
+-------------------------------------------------------------------------------
+Additional Notes
+
Index: trunk/web/dojo/dojox/jq/README
===================================================================
--- trunk/web/dojo/dojox/jq/README	(revision 0)
+++ trunk/web/dojo/dojox/jq/README	(revision 9)
@@ -0,0 +1,103 @@
+-------------------------------------------------------------------------------
+DojoX jq
+-------------------------------------------------------------------------------
+Version 0.0.1
+Release date: 8/9/2009
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	James Burke
+-------------------------------------------------------------------------------
+Project description
+
+DojoX jq is a compatibility layer that tries to match the jquery 1.3.2 API.
+-------------------------------------------------------------------------------
+Dependencies:
+
+- Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+IF YOU WISH TO WORK ON THIS MODULE, PLEASE DO NOT LOOK AT THE JQUERY SOURCE.
+
+We want CLA-clean code to be put in the Dojo repos. Just refer to the jquery API
+documentation and unit tests. As we get bug reports, we can build up our own test
+suite, and then hopefully contribute those tests back to jquery if their tests
+do not adequately cover an API call.
+
+This module needs a lot of work, it is in the very initial, rough stages. Some
+(all?) of the code is ugly. It is missing some APIs, notably queue/dequeue,
+the FX methods and live/die.
+
+There are also some incompatibilities with how acme and sizzle operate at the moment,
+mentioned in the comments in jq.js
+
+The tests for this module so far have been the jquery 1.3.2 tests. Since those
+tests are not CLA-clean, you will need to download them from here:
+
+http://www.tagneto.org/dojo/jquery132.zip
+
+Place the zip file in the dojox/jq/tests directory and unzip it. Then you can
+run the jquery132/test/index.html file inside there to start the tests.
+
+The tests were changed in a couple ways. For the tests I modified,
+you can look for //JRB changed: to find the original test construction.
+Things that were changed:
+
+1) acme requires spaces between CSS3 selectors, where sizzle does
+not ("div>span" fails in acme, but works in sizzle). There is a
+dtk.org bug on it, and it is allowed by the CSS3 spec to not have
+spaces so hopefully that incompatibility can go away after a while.
+
+2) sizzle supports some psuedos like :last, :first: :odd, :even that
+work on the list of matched elements, not just individual elements or
+their children. This is a more fundamental change to acme, but it is probably
+doable.
+
+3) The XML tests and ajax tests that call out to files fail because of
+some weird timing interaction between the jquery unit test thing and
+our XHR code. I believe since our code has a timer where we check the
+status of the XHR calls instead of using load callbacks directly on
+the XHR callbacks, something is confused in jquery -- the failure case
+is fired before our callbacks work. If only they used deferreds. ;)
+To get those tests to sort of work, I modified qunit/testrunner.js's process()
+method to be like so:
+
+function process() {
+	if(config.queue.length && !config.blocking){
+		setTimeout(function(){
+		if(config.queue.length && !config.blocking){
+			config.queue.shift()();
+			process();
+		}
+		}, 100);
+	}
+}
+
+Change 100 above to tune it depending on your patience and how much
+you want to make sure the tests have enough time to run. With 100, you
+can see some of the ajax tests passing.
+
+From some previous notes (I have not checked more recently), it looks
+like the compat layer fires "ajaxStop" more than jquery, I think due
+to how we do our async in-flight testing, so that messes up some of
+the testing in the ajax calls, but I think that is a detail that is
+fine to go with. I just have to make sure that is really the cause of
+a test failure and not something else. So I will probably need to
+modify the tests more.
+
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojox/trunk/jq.js
+http://svn.dojotoolkit.org/src/dojox/trunk/jq/*
+
+Install into the following directory structure:
+/dojox/jq.js
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/fx/resources/shadowB.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowB.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowB.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowB.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowB.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/resources/shadowR.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowR.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowR.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowR.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowR.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/resources/shadowBR.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowBR.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowBR.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowBR.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowBR.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/resources/shadowT.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowT.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowT.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowT.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowT.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/resources/shadowTR.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowTR.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowTR.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowTR.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowTR.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/resources/shadowL.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowL.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowL.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowL.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowL.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/resources/shadowBL.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowBL.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowBL.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowBL.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowBL.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/resources/shadowTL.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/fx/resources/shadowTL.png
===================================================================
--- trunk/web/dojo/dojox/fx/resources/shadowTL.png	(revision 0)
+++ trunk/web/dojo/dojox/fx/resources/shadowTL.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/fx/resources/shadowTL.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/fx/style.js
===================================================================
--- trunk/web/dojo/dojox/fx/style.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/style.js	(revision 9)
@@ -0,0 +1,69 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.style"]){
+dojo._hasResource["dojox.fx.style"]=true;
+dojo.provide("dojox.fx.style");
+dojo.experimental("dojox.fx.style");
+dojo.require("dojo.fx");
+(function(){
+var d=dojo;
+var _1=function(_2){
+return d.map(dojox.fx._allowedProperties,function(_3){
+return _2[_3];
+});
+};
+var _4=function(_5,_6,_7){
+_5=d.byId(_5);
+var cs=d.getComputedStyle(_5);
+var _8=_1(cs);
+d[(_7?"addClass":"removeClass")](_5,_6);
+var _9=_1(cs);
+d[(_7?"removeClass":"addClass")](_5,_6);
+var _a={},i=0;
+d.forEach(dojox.fx._allowedProperties,function(_b){
+if(_8[i]!=_9[i]){
+_a[_b]=parseInt(_9[i]);
+}
+i++;
+});
+return _a;
+};
+d.mixin(dojox.fx,{addClass:function(_c,_d,_e){
+_c=d.byId(_c);
+var _f=(function(n){
+return function(){
+d.addClass(n,_d);
+n.style.cssText=_10;
+};
+})(_c);
+var _11=_4(_c,_d,true);
+var _10=_c.style.cssText;
+var _12=d.animateProperty(d.mixin({node:_c,properties:_11},_e));
+d.connect(_12,"onEnd",_12,_f);
+return _12;
+},removeClass:function(_13,_14,_15){
+_13=d.byId(_13);
+var _16=(function(n){
+return function(){
+d.removeClass(n,_14);
+n.style.cssText=_17;
+};
+})(_13);
+var _18=_4(_13,_14);
+var _17=_13.style.cssText;
+var _19=d.animateProperty(d.mixin({node:_13,properties:_18},_15));
+d.connect(_19,"onEnd",_19,_16);
+return _19;
+},toggleClass:function(_1a,_1b,_1c,_1d){
+if(typeof _1c=="undefined"){
+_1c=!d.hasClass(_1a,_1b);
+}
+return dojox.fx[(_1c?"addClass":"removeClass")](_1a,_1b,_1d);
+},_allowedProperties:["width","height","left","top","backgroundColor","color","borderBottomWidth","borderTopWidth","borderLeftWidth","borderRightWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginTop","marginRight","marginBottom","lineHeight","letterSpacing","fontSize"]});
+})();
+}
Index: trunk/web/dojo/dojox/fx/README
===================================================================
--- trunk/web/dojo/dojox/fx/README	(revision 0)
+++ trunk/web/dojo/dojox/fx/README	(revision 9)
@@ -0,0 +1,75 @@
+-------------------------------------------------------------------------------
+dojox.fx
+-------------------------------------------------------------------------------
+Version 1.0.0
+Release date: 10/31/2007
+-------------------------------------------------------------------------------
+Project state:
+experimental 
+-------------------------------------------------------------------------------
+Credits
+	Peter Higgins (dante)
+	Jonathan Bond-Caron (jbondc@gmail.com)
+	Shane O'Sullivan (shaneosullivan1@gmail.com)
+	Bryan Forbes (bforbes)
+	Nicola Rizzo (nic)
+
+-------------------------------------------------------------------------------
+Project description
+
+	dojox.fx provides a class of animation effects to use, and
+	other animation and Effects additions to dojo base.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+	dojox.fx requires dojo (core) and the dojo.fx package
+	dojox.fx.easing is deprecated, and exists in dojo.fx.easing. 
+	dojox.fx.flip requires dojo.fx
+	dojox.fx.scroll requires dojox.fx._core and dojo.fx
+
+-------------------------------------------------------------------------------
+Documentation
+
+	existing API surface: 
+
+	dojox.fx._base:
+	- dojox.fx.crossFade - crossfade two nodes easily
+	- dojox.fx.sizeTo - size a node about it's center to a new width/height
+	- dojox.fx.slideBy - slide a node by a t,l offset
+	- dojox.fx.highlight - animates the background color of a node, and returns
+		it to the color it was. 
+
+	(all use standard Animation properties, like duration, easing, node, etc)
+
+	dojox.fx._core:
+	- dojox.fx._Line - a multi-dimensional _Line implementation, backwards compatible with
+		dojo._Line ... you might could safely do something akin to
+		dojo._Line = dojox.fx._Line;
+		and enable this for all dojo Animations?
+
+	dojox.fx.style: - experimental CSS animation via class definitions
+	- dojox.fx.addClass - animate the effects of applying a class to a node
+	- dojox.fx.removeClass - "   "    "    "   removing a class from a node
+	- dojox.fx.toggleClass - wrapper for addClass/removeClass
+
+	dojox.fx.ext-dojo.NodeList - extensions to dojo.NodeList-fx wrapping the
+		relevant dojox.fx animations into dojo.NodeList 
+
+	dojox.fx.Shadow - Class to add drop shadows to a node
+
+	dojox.fx.flip - a Module providing pseudo-3d flip animations for nodes.
+		Currently experimental. 
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/dojo/dojox/trunk/fx.js
+http://svn.dojotoolkit.org/dojo/dojox/trunk/fx/*
+
+Install into the following directory structure:
+/dojox/fx/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/fx/text.js
===================================================================
--- trunk/web/dojo/dojox/fx/text.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/text.js	(revision 9)
@@ -0,0 +1,254 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.text"]){
+dojo._hasResource["dojox.fx.text"]=true;
+dojo.provide("dojox.fx.text");
+dojo.require("dojo.fx");
+dojo.require("dojo.fx.easing");
+dojox.fx.text._split=function(_1){
+var _2=_1.node=dojo.byId(_1.node),s=_2.style,cs=dojo.getComputedStyle(_2),_3=dojo.coords(_2,true);
+_1.duration=_1.duration||1000;
+_1.words=_1.words||false;
+var _4=(_1.text&&typeof (_1.text)=="string")?_1.text:_2.innerHTML,_5=s.height,_6=s.width,_7=[];
+dojo.style(_2,{height:cs.height,width:cs.width});
+var _8=/(<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>)/g;
+var _9=(_1.words?/(<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>)\s*|([^\s<]+\s*)/g:/(<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>)\s*|([^\s<]\s*)/g);
+var _a=(typeof _1.text=="string")?_1.text.match(_9):_2.innerHTML.match(_9);
+var _b="";
+var _c=0;
+var _d=0;
+for(var i=0;i<_a.length;i++){
+var _e=_a[i];
+if(!_e.match(_8)){
+_b+="<span>"+_e+"</span>";
+_c++;
+}else{
+_b+=_e;
+}
+}
+_2.innerHTML=_b;
+function _f(_10){
+var _11=_10.nextSibling;
+if(_10.tagName=="SPAN"&&_10.childNodes.length==1&&_10.firstChild.nodeType==3){
+var _12=dojo.coords(_10,true);
+_d++;
+dojo.style(_10,{padding:0,margin:0,top:(_1.crop?"0px":_12.t+"px"),left:(_1.crop?"0px":_12.l+"px"),display:"inline"});
+var _13=_1.pieceAnimation(_10,_12,_3,_d,_c);
+if(dojo.isArray(_13)){
+_7=_7.concat(_13);
+}else{
+_7[_7.length]=_13;
+}
+}else{
+if(_10.firstChild){
+_f(_10.firstChild);
+}
+}
+if(_11){
+_f(_11);
+}
+};
+_f(_2.firstChild);
+var _14=dojo.fx.combine(_7);
+dojo.connect(_14,"onEnd",_14,function(){
+_2.innerHTML=_4;
+dojo.style(_2,{height:_5,width:_6});
+});
+if(_1.onPlay){
+dojo.connect(_14,"onPlay",_14,_1.onPlay);
+}
+if(_1.onEnd){
+dojo.connect(_14,"onEnd",_14,_1.onEnd);
+}
+return _14;
+};
+dojox.fx.text.explode=function(_15){
+var _16=_15.node=dojo.byId(_15.node);
+var s=_16.style;
+_15.distance=_15.distance||1;
+_15.duration=_15.duration||1000;
+_15.random=_15.random||0;
+if(typeof (_15.fade)=="undefined"){
+_15.fade=true;
+}
+if(typeof (_15.sync)=="undefined"){
+_15.sync=true;
+}
+_15.random=Math.abs(_15.random);
+_15.pieceAnimation=function(_17,_18,_19,_1a,_1b){
+var _1c=_18.h;
+var _1d=_18.w;
+var _1e=_15.distance*2;
+var _1f=_15.duration;
+var _20=parseFloat(_17.style.top);
+var _21=parseFloat(_17.style.left);
+var _22=0;
+var _23=0;
+var _24=0;
+if(_15.random){
+var _25=(Math.random()*_15.random)+Math.max(1-_15.random,0);
+_1e*=_25;
+_1f*=_25;
+_22=((_15.unhide&&_15.sync)||(!_15.unhide&&!_15.sync))?(_15.duration-_1f):0;
+_23=Math.random()-0.5;
+_24=Math.random()-0.5;
+}
+var _26=((_19.h-_1c)/2-(_18.y-_19.y));
+var _27=((_19.w-_1d)/2-(_18.x-_19.x));
+var _28=Math.sqrt(Math.pow(_27,2)+Math.pow(_26,2));
+var _29=_20-_26*_1e+_28*_24;
+var _2a=_21-_27*_1e+_28*_23;
+var _2b=dojo.animateProperty({node:_17,duration:_1f,delay:_22,easing:(_15.easing||(_15.unhide?dojo.fx.easing.sinOut:dojo.fx.easing.circOut)),beforeBegin:(_15.unhide?function(){
+if(_15.fade){
+dojo.style(_17,"opacity",0);
+}
+_17.style.position=_15.crop?"relative":"absolute";
+_17.style.top=_29+"px";
+_17.style.left=_2a+"px";
+}:function(){
+_17.style.position=_15.crop?"relative":"absolute";
+}),properties:{top:(_15.unhide?{start:_29,end:_20}:{start:_20,end:_29}),left:(_15.unhide?{start:_2a,end:_21}:{start:_21,end:_2a})}});
+if(_15.fade){
+var _2c=dojo.animateProperty({node:_17,duration:_1f,delay:_22,easing:(_15.fadeEasing||dojo.fx.easing.quadOut),properties:{opacity:(_15.unhide?{start:0,end:1}:{end:0})}});
+return (_15.unhide?[_2c,_2b]:[_2b,_2c]);
+}else{
+return _2b;
+}
+};
+var _2d=dojox.fx.text._split(_15);
+return _2d;
+};
+dojox.fx.text.converge=function(_2e){
+_2e.unhide=true;
+return dojox.fx.text.explode(_2e);
+};
+dojox.fx.text.disintegrate=function(_2f){
+var _30=_2f.node=dojo.byId(_2f.node);
+var s=_30.style;
+_2f.duration=_2f.duration||1500;
+_2f.distance=_2f.distance||1.5;
+_2f.random=_2f.random||0;
+if(!_2f.fade){
+_2f.fade=true;
+}
+var _31=Math.abs(_2f.random);
+_2f.pieceAnimation=function(_32,_33,_34,_35,_36){
+var _37=_33.h;
+var _38=_33.w;
+var _39=_2f.interval||(_2f.duration/(1.5*_36));
+var _3a=(_2f.duration-_36*_39);
+var _3b=Math.random()*_36*_39;
+var _3c=(_2f.reverseOrder||_2f.distance<0)?(_35*_39):((_36-_35)*_39);
+var _3d=_3b*_31+Math.max(1-_31,0)*_3c;
+var _3e={};
+if(_2f.unhide){
+_3e.top={start:(parseFloat(_32.style.top)-_34.h*_2f.distance),end:parseFloat(_32.style.top)};
+if(_2f.fade){
+_3e.opacity={start:0,end:1};
+}
+}else{
+_3e.top={end:(parseFloat(_32.style.top)+_34.h*_2f.distance)};
+if(_2f.fade){
+_3e.opacity={end:0};
+}
+}
+var _3f=dojo.animateProperty({node:_32,duration:_3a,delay:_3d,easing:(_2f.easing||(_2f.unhide?dojo.fx.easing.sinIn:dojo.fx.easing.circIn)),properties:_3e,beforeBegin:(_2f.unhide?function(){
+if(_2f.fade){
+dojo.style(_32,"opacity",0);
+}
+_32.style.position=_2f.crop?"relative":"absolute";
+_32.style.top=_3e.top.start+"px";
+}:function(){
+_32.style.position=_2f.crop?"relative":"absolute";
+})});
+return _3f;
+};
+var _40=dojox.fx.text._split(_2f);
+return _40;
+};
+dojox.fx.text.build=function(_41){
+_41.unhide=true;
+return dojox.fx.text.disintegrate(_41);
+};
+dojox.fx.text.blockFadeOut=function(_42){
+var _43=_42.node=dojo.byId(_42.node);
+var s=_43.style;
+_42.duration=_42.duration||1000;
+_42.random=_42.random||0;
+var _44=Math.abs(_42.random);
+_42.pieceAnimation=function(_45,_46,_47,_48,_49){
+var _4a=_42.interval||(_42.duration/(1.5*_49));
+var _4b=(_42.duration-_49*_4a);
+var _4c=Math.random()*_49*_4a;
+var _4d=(_42.reverseOrder)?((_49-_48)*_4a):(_48*_4a);
+var _4e=_4c*_44+Math.max(1-_44,0)*_4d;
+var _4f=dojo.animateProperty({node:_45,duration:_4b,delay:_4e,easing:(_42.easing||dojo.fx.easing.sinInOut),properties:{opacity:(_42.unhide?{start:0,end:1}:{end:0})},beforeBegin:(_42.unhide?function(){
+dojo.style(_45,"opacity",0);
+}:undefined)});
+return _4f;
+};
+var _50=dojox.fx.text._split(_42);
+return _50;
+};
+dojox.fx.text.blockFadeIn=function(_51){
+_51.unhide=true;
+return dojox.fx.text.blockFadeOut(_51);
+};
+dojox.fx.text.backspace=function(_52){
+var _53=_52.node=dojo.byId(_52.node);
+var s=_53.style;
+_52.words=false;
+_52.duration=_52.duration||2000;
+_52.random=_52.random||0;
+var _54=Math.abs(_52.random);
+var _55=10;
+_52.pieceAnimation=function(_56,_57,_58,_59,_5a){
+var _5b=_52.interval||(_52.duration/(1.5*_5a)),_5c=("textContent" in _56)?_56.textContent:_56.innerText,_5d=_5c.match(/\s/g);
+if(typeof (_52.wordDelay)=="undefined"){
+_52.wordDelay=_5b*2;
+}
+if(!_52.unhide){
+_55=(_5a-_59-1)*_5b;
+}
+var _5e,_5f;
+if(_52.fixed){
+if(_52.unhide){
+var _5e=function(){
+dojo.style(_56,"opacity",0);
+};
+}
+}else{
+if(_52.unhide){
+var _5e=function(){
+_56.style.display="none";
+};
+var _5f=function(){
+_56.style.display="inline";
+};
+}else{
+var _5f=function(){
+_56.style.display="none";
+};
+}
+}
+var _60=dojo.animateProperty({node:_56,duration:1,delay:_55,easing:(_52.easing||dojo.fx.easing.sinInOut),properties:{opacity:(_52.unhide?{start:0,end:1}:{end:0})},beforeBegin:_5e,onEnd:_5f});
+if(_52.unhide){
+var _61=Math.random()*_5c.length*_5b;
+var _62=_61*_54/2+Math.max(1-_54/2,0)*_52.wordDelay;
+_55+=_61*_54+Math.max(1-_54,0)*_5b*_5c.length+(_62*(_5d&&_5c.lastIndexOf(_5d[_5d.length-1])==_5c.length-1));
+}
+return _60;
+};
+var _63=dojox.fx.text._split(_52);
+return _63;
+};
+dojox.fx.text.type=function(_64){
+_64.unhide=true;
+return dojox.fx.text.backspace(_64);
+};
+}
Index: trunk/web/dojo/dojox/fx/Shadow.js
===================================================================
--- trunk/web/dojo/dojox/fx/Shadow.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/Shadow.js	(revision 9)
@@ -0,0 +1,119 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.Shadow"]){
+dojo._hasResource["dojox.fx.Shadow"]=true;
+dojo.provide("dojox.fx.Shadow");
+dojo.experimental("dojox.fx.Shadow");
+dojo.require("dijit._Widget");
+dojo.require("dojo.NodeList-fx");
+dojo.declare("dojox.fx.Shadow",dijit._Widget,{shadowPng:dojo.moduleUrl("dojox.fx","resources/shadow"),shadowThickness:7,shadowOffset:3,opacity:0.75,animate:false,node:null,startup:function(){
+this.inherited(arguments);
+this.node.style.position="relative";
+this.pieces={};
+var x1=-1*this.shadowThickness;
+var y0=this.shadowOffset;
+var y1=this.shadowOffset+this.shadowThickness;
+this._makePiece("tl","top",y0,"left",x1);
+this._makePiece("l","top",y1,"left",x1,"scale");
+this._makePiece("tr","top",y0,"left",0);
+this._makePiece("r","top",y1,"left",0,"scale");
+this._makePiece("bl","top",0,"left",x1);
+this._makePiece("b","top",0,"left",0,"crop");
+this._makePiece("br","top",0,"left",0);
+this.nodeList=dojo.query(".shadowPiece",this.node);
+this.setOpacity(this.opacity);
+this.resize();
+},_makePiece:function(_1,_2,_3,_4,_5,_6){
+var _7;
+var _8=this.shadowPng+_1.toUpperCase()+".png";
+if(dojo.isIE<7){
+_7=dojo.create("div");
+_7.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+_8+"'"+(_6?", sizingMethod='"+_6+"'":"")+")";
+}else{
+_7=dojo.create("img",{src:_8});
+}
+_7.style.position="absolute";
+_7.style[_2]=_3+"px";
+_7.style[_4]=_5+"px";
+_7.style.width=this.shadowThickness+"px";
+_7.style.height=this.shadowThickness+"px";
+dojo.addClass(_7,"shadowPiece");
+this.pieces[_1]=_7;
+this.node.appendChild(_7);
+},setOpacity:function(n,_9){
+if(dojo.isIE){
+return;
+}
+if(!_9){
+_9={};
+}
+if(this.animate){
+var _a=[];
+this.nodeList.forEach(function(_b){
+_a.push(dojo._fade(dojo.mixin(_9,{node:_b,end:n})));
+});
+dojo.fx.combine(_a).play();
+}else{
+this.nodeList.style("opacity",n);
+}
+},setDisabled:function(_c){
+if(_c){
+if(this.disabled){
+return;
+}
+if(this.animate){
+this.nodeList.fadeOut().play();
+}else{
+this.nodeList.style("visibility","hidden");
+}
+this.disabled=true;
+}else{
+if(!this.disabled){
+return;
+}
+if(this.animate){
+this.nodeList.fadeIn().play();
+}else{
+this.nodeList.style("visibility","visible");
+}
+this.disabled=false;
+}
+},resize:function(_d){
+var x;
+var y;
+if(_d){
+x=_d.x;
+y=_d.y;
+}else{
+var co=dojo._getBorderBox(this.node);
+x=co.w;
+y=co.h;
+}
+var _e=y-(this.shadowOffset+this.shadowThickness);
+if(_e<0){
+_e=0;
+}
+if(y<1){
+y=1;
+}
+if(x<1){
+x=1;
+}
+with(this.pieces){
+l.style.height=_e+"px";
+r.style.height=_e+"px";
+b.style.width=x+"px";
+bl.style.top=y+"px";
+b.style.top=y+"px";
+br.style.top=y+"px";
+tr.style.left=x+"px";
+r.style.left=x+"px";
+br.style.left=x+"px";
+}
+}});
+}
Index: trunk/web/dojo/dojox/fx/Timeline.js
===================================================================
--- trunk/web/dojo/dojox/fx/Timeline.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/Timeline.js	(revision 9)
@@ -0,0 +1,126 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.Timeline"]){
+dojo._hasResource["dojox.fx.Timeline"]=true;
+dojo.provide("dojox.fx.Timeline");
+dojo.require("dojo.fx.easing");
+dojox.fx.animateTimeline=function(_1,_2){
+var _3=new dojox.fx._Timeline(_1.keys);
+var _4=dojo.animateProperty({node:dojo.byId(_2||_1.node),duration:_1.duration||1000,properties:_3._properties,easing:dojo.fx.easing.linear,onAnimate:function(v){
+}});
+dojo.connect(_4,"onEnd",function(_5){
+var _6=_4.curve.getValue(_4.reversed?0:1);
+dojo.style(_5,_6);
+});
+dojo.connect(_4,"beforeBegin",function(){
+if(_4.curve){
+delete _4.curve;
+}
+_4.curve=_3;
+_3.ani=_4;
+});
+return _4;
+};
+dojox.fx._Timeline=function(_7){
+this.keys=dojo.isArray(_7)?this.flatten(_7):_7;
+};
+dojox.fx._Timeline.prototype.flatten=function(_8){
+var _9=function(_a,_b){
+if(_a=="from"){
+return 0;
+}
+if(_a=="to"){
+return 1;
+}
+if(_a===undefined){
+return _b==0?0:_b/(_8.length-1);
+}
+return parseInt(_a,10)*0.01;
+};
+var p={},o={};
+dojo.forEach(_8,function(k,i){
+var _c=_9(k.step,i);
+var _d=dojo.fx.easing[k.ease]||dojo.fx.easing.linear;
+for(var nm in k){
+if(nm=="step"||nm=="ease"||nm=="from"||nm=="to"){
+continue;
+}
+if(!o[nm]){
+o[nm]={steps:[],values:[],eases:[],ease:_d};
+p[nm]={};
+if(!/#/.test(k[nm])){
+p[nm].units=o[nm].units=/\D{1,}/.exec(k[nm]).join("");
+}else{
+p[nm].units=o[nm].units="isColor";
+}
+}
+o[nm].eases.push(dojo.fx.easing[k.ease||"linear"]);
+o[nm].steps.push(_c);
+if(p[nm].units=="isColor"){
+o[nm].values.push(new dojo.Color(k[nm]));
+}else{
+o[nm].values.push(parseInt(/\d{1,}/.exec(k[nm]).join("")));
+}
+if(p[nm].start===undefined){
+p[nm].start=o[nm].values[o[nm].values.length-1];
+}else{
+p[nm].end=o[nm].values[o[nm].values.length-1];
+}
+}
+});
+this._properties=p;
+return o;
+};
+dojox.fx._Timeline.prototype.getValue=function(p){
+p=this.ani._reversed?1-p:p;
+var o={},_e=this;
+var _f=function(nm,i){
+return _e._properties[nm].units!="isColor"?_e.keys[nm].values[i]+_e._properties[nm].units:_e.keys[nm].values[i].toCss();
+};
+for(var nm in this.keys){
+var k=this.keys[nm];
+for(var i=0;i<k.steps.length;i++){
+var _10=k.steps[i];
+var ns=k.steps[i+1];
+var _11=i<k.steps.length?true:false;
+var _12=k.eases[i]||function(n){
+return n;
+};
+if(p==_10){
+o[nm]=_f(nm,i);
+if(!_11||(_11&&this.ani._reversed)){
+break;
+}
+}else{
+if(p>_10){
+if(_11&&p<k.steps[i+1]){
+var end=k.values[i+1];
+var beg=k.values[i];
+var seg=(1/(ns-_10))*(p-_10);
+seg=_12(seg);
+if(beg instanceof dojo.Color){
+o[nm]=dojo.blendColors(beg,end,seg).toCss(false);
+}else{
+var df=end-beg;
+o[nm]=beg+seg*df+this._properties[nm].units;
+}
+break;
+}else{
+o[nm]=_f(nm,i);
+}
+}else{
+if((_11&&!this.ani._reversed)||(!_11&&this.ani._reversed)){
+o[nm]=_f(nm,i);
+}
+}
+}
+}
+}
+return o;
+};
+}
Index: trunk/web/dojo/dojox/fx/easing.js
===================================================================
--- trunk/web/dojo/dojox/fx/easing.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/easing.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.easing"]){
+dojo._hasResource["dojox.fx.easing"]=true;
+dojo.provide("dojox.fx.easing");
+dojo.deprecated("dojox.fx.easing","Upgraded to Core, use dojo.fx.easing instead","2.0");
+dojo.require("dojo.fx.easing");
+dojox.fx.easing=dojo.fx.easing;
+}
Index: trunk/web/dojo/dojox/fx/_core.js
===================================================================
--- trunk/web/dojo/dojox/fx/_core.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/_core.js	(revision 9)
@@ -0,0 +1,32 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx._core"]){
+dojo._hasResource["dojox.fx._core"]=true;
+dojo.provide("dojox.fx._core");
+dojox.fx._Line=function(_1,_2){
+this.start=_1;
+this.end=_2;
+var _3=dojo.isArray(_1),d=(_3?[]:_2-_1);
+if(_3){
+dojo.forEach(this.start,function(s,i){
+d[i]=this.end[i]-s;
+},this);
+this.getValue=function(n){
+var _4=[];
+dojo.forEach(this.start,function(s,i){
+_4[i]=(d[i]*n)+s;
+},this);
+return _4;
+};
+}else{
+this.getValue=function(n){
+return (d*n)+this.start;
+};
+}
+};
+}
Index: trunk/web/dojo/dojox/fx/_arg.js
===================================================================
--- trunk/web/dojo/dojox/fx/_arg.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/_arg.js	(revision 9)
@@ -0,0 +1,19 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx._arg"]){
+dojo._hasResource["dojox.fx._arg"]=true;
+dojo.provide("dojox.fx._arg");
+dojox.fx._arg.StyleArgs=function(_1){
+this.node=_1.node;
+this.cssClass=_1.cssClass;
+};
+dojox.fx._arg.ShadowResizeArgs=function(_2){
+this.x=_2.x;
+this.y=_2.y;
+};
+}
Index: trunk/web/dojo/dojox/fx/_base.js
===================================================================
--- trunk/web/dojo/dojox/fx/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/_base.js	(revision 9)
@@ -0,0 +1,118 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx._base"]){
+dojo._hasResource["dojox.fx._base"]=true;
+dojo.provide("dojox.fx._base");
+dojo.require("dojo.fx");
+dojo.mixin(dojox.fx,{anim:dojo.anim,animateProperty:dojo.animateProperty,fadeTo:dojo._fade,fadeIn:dojo.fadeIn,fadeOut:dojo.fadeOut,combine:dojo.fx.combine,chain:dojo.fx.chain,slideTo:dojo.fx.slideTo,wipeIn:dojo.fx.wipeIn,wipeOut:dojo.fx.wipeOut});
+dojox.fx.sizeTo=function(_1){
+var _2=_1.node=dojo.byId(_1.node),_3="absolute";
+var _4=_1.method||"chain";
+if(!_1.duration){
+_1.duration=500;
+}
+if(_4=="chain"){
+_1.duration=Math.floor(_1.duration/2);
+}
+var _5,_6,_7,_8,_9,_a=null;
+var _b=(function(n){
+return function(){
+var cs=dojo.getComputedStyle(n),_c=cs.position,w=cs.width,h=cs.height;
+_5=(_c==_3?n.offsetTop:parseInt(cs.top)||0);
+_7=(_c==_3?n.offsetLeft:parseInt(cs.left)||0);
+_9=(w=="auto"?0:parseInt(w));
+_a=(h=="auto"?0:parseInt(h));
+_8=_7-Math.floor((_1.width-_9)/2);
+_6=_5-Math.floor((_1.height-_a)/2);
+if(_c!=_3&&_c!="relative"){
+var _d=dojo.coords(n,true);
+_5=_d.y;
+_7=_d.x;
+n.style.position=_3;
+n.style.top=_5+"px";
+n.style.left=_7+"px";
+}
+};
+})(_2);
+var _e=dojo.animateProperty(dojo.mixin({properties:{height:function(){
+_b();
+return {end:_1.height||0,start:_a};
+},top:function(){
+return {start:_5,end:_6};
+}}},_1));
+var _f=dojo.animateProperty(dojo.mixin({properties:{width:function(){
+return {start:_9,end:_1.width||0};
+},left:function(){
+return {start:_7,end:_8};
+}}},_1));
+var _10=dojo.fx[(_1.method=="combine"?"combine":"chain")]([_e,_f]);
+return _10;
+};
+dojox.fx.slideBy=function(_11){
+var _12=_11.node=dojo.byId(_11.node),top,_13;
+var _14=(function(n){
+return function(){
+var cs=dojo.getComputedStyle(n);
+var pos=cs.position;
+top=(pos=="absolute"?n.offsetTop:parseInt(cs.top)||0);
+_13=(pos=="absolute"?n.offsetLeft:parseInt(cs.left)||0);
+if(pos!="absolute"&&pos!="relative"){
+var ret=dojo.coords(n,true);
+top=ret.y;
+_13=ret.x;
+n.style.position="absolute";
+n.style.top=top+"px";
+n.style.left=_13+"px";
+}
+};
+})(_12);
+_14();
+var _15=dojo.animateProperty(dojo.mixin({properties:{top:top+(_11.top||0),left:_13+(_11.left||0)}},_11));
+dojo.connect(_15,"beforeBegin",_15,_14);
+return _15;
+};
+dojox.fx.crossFade=function(_16){
+var _17=_16.nodes[0]=dojo.byId(_16.nodes[0]),op1=dojo.style(_17,"opacity"),_18=_16.nodes[1]=dojo.byId(_16.nodes[1]),op2=dojo.style(_18,"opacity");
+var _19=dojo.fx.combine([dojo[(op1==0?"fadeIn":"fadeOut")](dojo.mixin({node:_17},_16)),dojo[(op1==0?"fadeOut":"fadeIn")](dojo.mixin({node:_18},_16))]);
+return _19;
+};
+dojox.fx.highlight=function(_1a){
+var _1b=_1a.node=dojo.byId(_1a.node);
+_1a.duration=_1a.duration||400;
+var _1c=_1a.color||"#ffff99",_1d=dojo.style(_1b,"backgroundColor");
+if(_1d=="rgba(0, 0, 0, 0)"){
+_1d="transparent";
+}
+var _1e=dojo.animateProperty(dojo.mixin({properties:{backgroundColor:{start:_1c,end:_1d}}},_1a));
+if(_1d=="transparent"){
+dojo.connect(_1e,"onEnd",_1e,function(){
+_1b.style.backgroundColor=_1d;
+});
+}
+return _1e;
+};
+dojox.fx.wipeTo=function(_1f){
+_1f.node=dojo.byId(_1f.node);
+var _20=_1f.node,s=_20.style;
+var dir=(_1f.width?"width":"height"),_21=_1f[dir],_22={};
+_22[dir]={start:function(){
+s.overflow="hidden";
+if(s.visibility=="hidden"||s.display=="none"){
+s[dir]="1px";
+s.display="";
+s.visibility="";
+return 1;
+}else{
+var now=dojo.style(_20,dir);
+return Math.max(now,1);
+}
+},end:_21};
+var _23=dojo.animateProperty(dojo.mixin({properties:_22},_1f));
+return _23;
+};
+}
Index: trunk/web/dojo/dojox/fx/flip.js
===================================================================
--- trunk/web/dojo/dojox/fx/flip.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/flip.js	(revision 9)
@@ -0,0 +1,183 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.flip"]){
+dojo._hasResource["dojox.fx.flip"]=true;
+dojo.provide("dojox.fx.flip");
+dojo.experimental("dojox.fx.flip");
+dojo.require("dojo.fx");
+(function(){
+var _1="border",_2="Width",_3="Height",_4="Top",_5="Right",_6="Left",_7="Bottom";
+dojox.fx.flip=function(_8){
+var _9=dojo.create("div"),_a=_8.node=dojo.byId(_8.node),s=_a.style,_b=null,hs=null,pn=null,_c=_8.lightColor||"#dddddd",_d=_8.darkColor||"#555555",_e=dojo.style(_a,"backgroundColor"),_f=_8.endColor||_e,_10={},_11=[],_12=_8.duration?_8.duration/2:250,dir=_8.dir||"left",_13=0.9,_14="transparent",_15=_8.whichAnim,_16=_8.axis||"center",_17=_8.depth;
+var _18=function(_19){
+return ((new dojo.Color(_19)).toHex()==="#000000")?"#000001":_19;
+};
+if(dojo.isIE<7){
+_f=_18(_f);
+_c=_18(_c);
+_d=_18(_d);
+_e=_18(_e);
+_14="black";
+_9.style.filter="chroma(color='#000000')";
+}
+var _1a=(function(n){
+return function(){
+var ret=dojo.coords(n,true);
+_b={top:ret.y,left:ret.x,width:ret.w,height:ret.h};
+};
+})(_a);
+_1a();
+hs={position:"absolute",top:_b["top"]+"px",left:_b["left"]+"px",height:"0",width:"0",zIndex:_8.zIndex||(s.zIndex||0),border:"0 solid "+_14,fontSize:"0",visibility:"hidden"};
+var _1b=[{},{top:_b["top"],left:_b["left"]}];
+var _1c={left:[_6,_5,_4,_7,_2,_3,"end"+_3+"Min",_6,"end"+_3+"Max"],right:[_5,_6,_4,_7,_2,_3,"end"+_3+"Min",_6,"end"+_3+"Max"],top:[_4,_7,_6,_5,_3,_2,"end"+_2+"Min",_4,"end"+_2+"Max"],bottom:[_7,_4,_6,_5,_3,_2,"end"+_2+"Min",_4,"end"+_2+"Max"]};
+pn=_1c[dir];
+if(typeof _17!="undefined"){
+_17=Math.max(0,Math.min(1,_17))/2;
+_13=0.4+(0.5-_17);
+}else{
+_13=Math.min(0.9,Math.max(0.4,_b[pn[5].toLowerCase()]/_b[pn[4].toLowerCase()]));
+}
+var p0=_1b[0];
+for(var i=4;i<6;i++){
+if(_16=="center"||_16=="cube"){
+_b["end"+pn[i]+"Min"]=_b[pn[i].toLowerCase()]*_13;
+_b["end"+pn[i]+"Max"]=_b[pn[i].toLowerCase()]/_13;
+}else{
+if(_16=="shortside"){
+_b["end"+pn[i]+"Min"]=_b[pn[i].toLowerCase()];
+_b["end"+pn[i]+"Max"]=_b[pn[i].toLowerCase()]/_13;
+}else{
+if(_16=="longside"){
+_b["end"+pn[i]+"Min"]=_b[pn[i].toLowerCase()]*_13;
+_b["end"+pn[i]+"Max"]=_b[pn[i].toLowerCase()];
+}
+}
+}
+}
+if(_16=="center"){
+p0[pn[2].toLowerCase()]=_b[pn[2].toLowerCase()]-(_b[pn[8]]-_b[pn[6]])/4;
+}else{
+if(_16=="shortside"){
+p0[pn[2].toLowerCase()]=_b[pn[2].toLowerCase()]-(_b[pn[8]]-_b[pn[6]])/2;
+}
+}
+_10[pn[5].toLowerCase()]=_b[pn[5].toLowerCase()]+"px";
+_10[pn[4].toLowerCase()]="0";
+_10[_1+pn[1]+_2]=_b[pn[4].toLowerCase()]+"px";
+_10[_1+pn[1]+"Color"]=_e;
+p0[_1+pn[1]+_2]=0;
+p0[_1+pn[1]+"Color"]=_d;
+p0[_1+pn[2]+_2]=p0[_1+pn[3]+_2]=_16!="cube"?(_b["end"+pn[5]+"Max"]-_b["end"+pn[5]+"Min"])/2:_b[pn[6]]/2;
+p0[pn[7].toLowerCase()]=_b[pn[7].toLowerCase()]+_b[pn[4].toLowerCase()]/2+(_8.shift||0);
+p0[pn[5].toLowerCase()]=_b[pn[6]];
+var p1=_1b[1];
+p1[_1+pn[0]+"Color"]={start:_c,end:_f};
+p1[_1+pn[0]+_2]=_b[pn[4].toLowerCase()];
+p1[_1+pn[2]+_2]=0;
+p1[_1+pn[3]+_2]=0;
+p1[pn[5].toLowerCase()]={start:_b[pn[6]],end:_b[pn[5].toLowerCase()]};
+dojo.mixin(hs,_10);
+dojo.style(_9,hs);
+dojo.body().appendChild(_9);
+var _1d=function(){
+dojo.destroy(_9);
+s.backgroundColor=_f;
+s.visibility="visible";
+};
+if(_15=="last"){
+for(i in p0){
+p0[i]={start:p0[i]};
+}
+p0[_1+pn[1]+"Color"]={start:_d,end:_f};
+p1=p0;
+}
+if(!_15||_15=="first"){
+_11.push(dojo.animateProperty({node:_9,duration:_12,properties:p0}));
+}
+if(!_15||_15=="last"){
+_11.push(dojo.animateProperty({node:_9,duration:_12,properties:p1,onEnd:_1d}));
+}
+dojo.connect(_11[0],"play",function(){
+_9.style.visibility="visible";
+s.visibility="hidden";
+});
+return dojo.fx.chain(_11);
+};
+dojox.fx.flipCube=function(_1e){
+var _1f=[],mb=dojo.marginBox(_1e.node),_20=mb.w/2,_21=mb.h/2,_22={top:{pName:"height",args:[{whichAnim:"first",dir:"top",shift:-_21},{whichAnim:"last",dir:"bottom",shift:_21}]},right:{pName:"width",args:[{whichAnim:"first",dir:"right",shift:_20},{whichAnim:"last",dir:"left",shift:-_20}]},bottom:{pName:"height",args:[{whichAnim:"first",dir:"bottom",shift:_21},{whichAnim:"last",dir:"top",shift:-_21}]},left:{pName:"width",args:[{whichAnim:"first",dir:"left",shift:-_20},{whichAnim:"last",dir:"right",shift:_20}]}};
+var d=_22[_1e.dir||"left"],p=d.args;
+_1e.duration=_1e.duration?_1e.duration*2:500;
+_1e.depth=0.8;
+_1e.axis="cube";
+for(var i=p.length-1;i>=0;i--){
+dojo.mixin(_1e,p[i]);
+_1f.push(dojox.fx.flip(_1e));
+}
+return dojo.fx.combine(_1f);
+};
+dojox.fx.flipPage=function(_23){
+var n=_23.node,_24=dojo.coords(n,true),x=_24.x,y=_24.y,w=_24.w,h=_24.h,_25=dojo.style(n,"backgroundColor"),_26=_23.lightColor||"#dddddd",_27=_23.darkColor,_28=dojo.create("div"),_29=[],hn=[],dir=_23.dir||"right",pn={left:["left","right","x","w"],top:["top","bottom","y","h"],right:["left","left","x","w"],bottom:["top","top","y","h"]},_2a={right:[1,-1],left:[-1,1],top:[-1,1],bottom:[1,-1]};
+dojo.style(_28,{position:"absolute",width:w+"px",height:h+"px",top:y+"px",left:x+"px",visibility:"hidden"});
+var hs=[];
+for(var i=0;i<2;i++){
+var r=i%2,d=r?pn[dir][1]:dir,wa=r?"last":"first",_2b=r?_25:_26,_2c=r?_2b:_23.startColor||n.style.backgroundColor;
+hn[i]=dojo.clone(_28);
+var _2d=function(x){
+return function(){
+dojo.destroy(hn[x]);
+};
+}(i);
+dojo.body().appendChild(hn[i]);
+hs[i]={backgroundColor:r?_2c:_25};
+hs[i][pn[dir][0]]=_24[pn[dir][2]]+_2a[dir][0]*i*_24[pn[dir][3]]+"px";
+dojo.style(hn[i],hs[i]);
+_29.push(dojox.fx.flip({node:hn[i],dir:d,axis:"shortside",depth:_23.depth,duration:_23.duration/2,shift:_2a[dir][i]*_24[pn[dir][3]]/2,darkColor:_27,lightColor:_26,whichAnim:wa,endColor:_2b}));
+dojo.connect(_29[i],"onEnd",_2d);
+}
+return dojo.fx.chain(_29);
+};
+dojox.fx.flipGrid=function(_2e){
+var _2f=_2e.rows||4,_30=_2e.cols||4,_31=[],_32=dojo.create("div"),n=_2e.node,_33=dojo.coords(n,true),x=_33.x,y=_33.y,nw=_33.w,nh=_33.h,w=_33.w/_30,h=_33.h/_2f,_34=[];
+dojo.style(_32,{position:"absolute",width:w+"px",height:h+"px",backgroundColor:dojo.style(n,"backgroundColor")});
+for(var i=0;i<_2f;i++){
+var r=i%2,d=r?"right":"left",_35=r?1:-1;
+var cn=dojo.clone(n);
+dojo.style(cn,{position:"absolute",width:nw+"px",height:nh+"px",top:y+"px",left:x+"px",clip:"rect("+i*h+"px,"+nw+"px,"+nh+"px,0)"});
+dojo.body().appendChild(cn);
+_31[i]=[];
+for(var j=0;j<_30;j++){
+var hn=dojo.clone(_32),l=r?j:_30-(j+1);
+var _36=function(xn,_37,_38){
+return function(){
+if(!(_37%2)){
+dojo.style(xn,{clip:"rect("+_37*h+"px,"+(nw-(_38+1)*w)+"px,"+((_37+1)*h)+"px,0px)"});
+}else{
+dojo.style(xn,{clip:"rect("+_37*h+"px,"+nw+"px,"+((_37+1)*h)+"px,"+((_38+1)*w)+"px)"});
+}
+};
+}(cn,i,j);
+dojo.body().appendChild(hn);
+dojo.style(hn,{left:x+l*w+"px",top:y+i*h+"px",visibility:"hidden"});
+var a=dojox.fx.flipPage({node:hn,dir:d,duration:_2e.duration||900,shift:_35*w/2,depth:0.2,darkColor:_2e.darkColor,lightColor:_2e.lightColor,startColor:_2e.startColor||_2e.node.style.backgroundColor}),_39=function(xn){
+return function(){
+dojo.destroy(xn);
+};
+}(hn);
+dojo.connect(a,"play",this,_36);
+dojo.connect(a,"play",this,_39);
+_31[i].push(a);
+}
+_34.push(dojo.fx.chain(_31[i]));
+}
+dojo.connect(_34[0],"play",function(){
+dojo.style(n,{visibility:"hidden"});
+});
+return dojo.fx.combine(_34);
+};
+})();
+}
Index: trunk/web/dojo/dojox/fx/split.js
===================================================================
--- trunk/web/dojo/dojox/fx/split.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/split.js	(revision 9)
@@ -0,0 +1,318 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.split"]){
+dojo._hasResource["dojox.fx.split"]=true;
+dojo.provide("dojox.fx.split");
+dojo.require("dojo.fx");
+dojo.require("dojo.fx.easing");
+dojo.mixin(dojox.fx,{_split:function(_1){
+_1.rows=_1.rows||3;
+_1.columns=_1.columns||3;
+_1.duration=_1.duration||1000;
+var _2=_1.node=dojo.byId(_1.node),_3=_2.parentNode,_4=_3,_5=dojo.body(),_6="position";
+while(_4&&_4!=_5&&dojo.style(_4,_6)=="static"){
+_4=_4.parentNode;
+}
+var _7=_4!=_5?dojo.position(_4,true):{x:0,y:0},_8=dojo.position(_2,true),_9=dojo.style(_2,"height"),_a=dojo.style(_2,"width"),_b=dojo.style(_2,"borderLeftWidth")+dojo.style(_2,"borderRightWidth"),_c=dojo.style(_2,"borderTopWidth")+dojo.style(_2,"borderBottomWidth"),_d=Math.ceil(_9/_1.rows),_e=Math.ceil(_a/_1.columns),_f=dojo.create(_2.tagName,{style:{position:"absolute",padding:0,margin:0,border:"none",top:_8.y-_7.y+"px",left:_8.x-_7.x+"px",height:_9+_c+"px",width:_a+_b+"px",background:"none",overflow:_1.crop?"hidden":"visible",zIndex:dojo.style(_2,"zIndex")}},_2,"after"),_10=[],_11=dojo.create(_2.tagName,{style:{position:"absolute",border:"none",padding:0,margin:0,height:_d+_b+"px",width:_e+_c+"px",overflow:"hidden"}});
+for(var y=0,ly=_1.rows;y<ly;y++){
+for(var x=0,lx=_1.columns;x<lx;x++){
+var _12=dojo.clone(_11),_13=dojo.clone(_2),_14=y*_d,_15=x*_e;
+_13.style.filter="";
+dojo.removeAttr(_13,"id");
+dojo.style(_12,{border:"none",overflow:"hidden",top:_14+"px",left:_15+"px"});
+dojo.style(_13,{position:"static",opacity:"1",marginTop:-_14+"px",marginLeft:-_15+"px"});
+_12.appendChild(_13);
+_f.appendChild(_12);
+var _16=_1.pieceAnimation(_12,x,y,_8);
+if(dojo.isArray(_16)){
+_10=_10.concat(_16);
+}else{
+_10.push(_16);
+}
+}
+}
+var _17=dojo.fx.combine(_10);
+dojo.connect(_17,"onEnd",_17,function(){
+_f.parentNode.removeChild(_f);
+});
+if(_1.onPlay){
+dojo.connect(_17,"onPlay",_17,_1.onPlay);
+}
+if(_1.onEnd){
+dojo.connect(_17,"onEnd",_17,_1.onEnd);
+}
+return _17;
+},explode:function(_18){
+var _19=_18.node=dojo.byId(_18.node);
+_18.rows=_18.rows||3;
+_18.columns=_18.columns||3;
+_18.distance=_18.distance||1;
+_18.duration=_18.duration||1000;
+_18.random=_18.random||0;
+if(!_18.fade){
+_18.fade=true;
+}
+if(typeof _18.sync=="undefined"){
+_18.sync=true;
+}
+_18.random=Math.abs(_18.random);
+_18.pieceAnimation=function(_1a,x,y,_1b){
+var _1c=_1b.h/_18.rows,_1d=_1b.w/_18.columns,_1e=_18.distance*2,_1f=_18.duration,ps=_1a.style,_20=parseInt(ps.top),_21=parseInt(ps.left),_22=0,_23=0,_24=0;
+if(_18.random){
+var _25=(Math.random()*_18.random)+Math.max(1-_18.random,0);
+_1e*=_25;
+_1f*=_25;
+_22=((_18.unhide&&_18.sync)||(!_18.unhide&&!_18.sync))?(_18.duration-_1f):0;
+_23=Math.random()-0.5;
+_24=Math.random()-0.5;
+}
+var _26=((_1b.h-_1c)/2-_1c*y),_27=((_1b.w-_1d)/2-_1d*x),_28=Math.sqrt(Math.pow(_27,2)+Math.pow(_26,2)),_29=parseInt(_20-_26*_1e+_28*_24),_2a=parseInt(_21-_27*_1e+_28*_23);
+var _2b=dojo.animateProperty({node:_1a,duration:_1f,delay:_22,easing:(_18.easing||(_18.unhide?dojo.fx.easing.sinOut:dojo.fx.easing.circOut)),beforeBegin:(_18.unhide?function(){
+if(_18.fade){
+dojo.style(_1a,{opacity:"0"});
+}
+ps.top=_29+"px";
+ps.left=_2a+"px";
+}:undefined),properties:{top:(_18.unhide?{start:_29,end:_20}:{start:_20,end:_29}),left:(_18.unhide?{start:_2a,end:_21}:{start:_21,end:_2a})}});
+if(_18.fade){
+var _2c=dojo.animateProperty({node:_1a,duration:_1f,delay:_22,easing:(_18.fadeEasing||dojo.fx.easing.quadOut),properties:{opacity:(_18.unhide?{start:"0",end:"1"}:{start:"1",end:"0"})}});
+return (_18.unhide?[_2c,_2b]:[_2b,_2c]);
+}else{
+return _2b;
+}
+};
+var _2d=dojox.fx._split(_18);
+if(_18.unhide){
+dojo.connect(_2d,"onEnd",null,function(){
+dojo.style(_19,{opacity:"1"});
+});
+}else{
+dojo.connect(_2d,"onPlay",null,function(){
+dojo.style(_19,{opacity:"0"});
+});
+}
+return _2d;
+},converge:function(_2e){
+_2e.unhide=true;
+return dojox.fx.explode(_2e);
+},disintegrate:function(_2f){
+var _30=_2f.node=dojo.byId(_2f.node);
+_2f.rows=_2f.rows||5;
+_2f.columns=_2f.columns||5;
+_2f.duration=_2f.duration||1500;
+_2f.interval=_2f.interval||_2f.duration/(_2f.rows+_2f.columns*2);
+_2f.distance=_2f.distance||1.5;
+_2f.random=_2f.random||0;
+if(typeof _2f.fade=="undefined"){
+_2f.fade=true;
+}
+var _31=Math.abs(_2f.random),_32=_2f.duration-(_2f.rows+_2f.columns)*_2f.interval;
+_2f.pieceAnimation=function(_33,x,y,_34){
+var _35=Math.random()*(_2f.rows+_2f.columns)*_2f.interval,ps=_33.style,_36=(_2f.reverseOrder||_2f.distance<0)?((x+y)*_2f.interval):(((_2f.rows+_2f.columns)-(x+y))*_2f.interval),_37=_35*_31+Math.max(1-_31,0)*_36,_38={};
+if(_2f.unhide){
+_38.top={start:(parseInt(ps.top)-_34.h*_2f.distance),end:parseInt(ps.top)};
+if(_2f.fade){
+_38.opacity={start:"0",end:"1"};
+}
+}else{
+_38.top={end:(parseInt(ps.top)+_34.h*_2f.distance)};
+if(_2f.fade){
+_38.opacity={end:"0"};
+}
+}
+var _39=dojo.animateProperty({node:_33,duration:_32,delay:_37,easing:(_2f.easing||(_2f.unhide?dojo.fx.easing.sinIn:dojo.fx.easing.circIn)),properties:_38,beforeBegin:(_2f.unhide?function(){
+if(_2f.fade){
+dojo.style(_33,{opacity:"0"});
+}
+ps.top=_38.top.start+"px";
+}:undefined)});
+return _39;
+};
+var _3a=dojox.fx._split(_2f);
+if(_2f.unhide){
+dojo.connect(_3a,"onEnd",_3a,function(){
+dojo.style(_30,{opacity:"1"});
+});
+}else{
+dojo.connect(_3a,"onPlay",_3a,function(){
+dojo.style(_30,{opacity:"0"});
+});
+}
+return _3a;
+},build:function(_3b){
+_3b.unhide=true;
+return dojox.fx.disintegrate(_3b);
+},shear:function(_3c){
+var _3d=_3c.node=dojo.byId(_3c.node);
+_3c.rows=_3c.rows||6;
+_3c.columns=_3c.columns||6;
+_3c.duration=_3c.duration||1000;
+_3c.interval=_3c.interval||0;
+_3c.distance=_3c.distance||1;
+_3c.random=_3c.random||0;
+if(typeof (_3c.fade)=="undefined"){
+_3c.fade=true;
+}
+var _3e=Math.abs(_3c.random),_3f=(_3c.duration-(_3c.rows+_3c.columns)*Math.abs(_3c.interval));
+_3c.pieceAnimation=function(_40,x,y,_41){
+var _42=!(x%2),_43=!(y%2),_44=Math.random()*_3f,_45=(_3c.reverseOrder)?(((_3c.rows+_3c.columns)-(x+y))*_3c.interval):((x+y)*_3c.interval),_46=_44*_3e+Math.max(1-_3e,0)*_45,_47={},ps=_40.style;
+if(_3c.fade){
+_47.opacity=(_3c.unhide?{start:"0",end:"1"}:{end:"0"});
+}
+if(_3c.columns==1){
+_42=_43;
+}else{
+if(_3c.rows==1){
+_43=!_42;
+}
+}
+var _48=parseInt(ps.left),top=parseInt(ps.top),_49=_3c.distance*_41.w,_4a=_3c.distance*_41.h;
+if(_3c.unhide){
+if(_42==_43){
+_47.left=_42?{start:(_48-_49),end:_48}:{start:(_48+_49),end:_48};
+}else{
+_47.top=_42?{start:(top+_4a),end:top}:{start:(top-_4a),end:top};
+}
+}else{
+if(_42==_43){
+_47.left=_42?{end:(_48-_49)}:{end:(_48+_49)};
+}else{
+_47.top=_42?{end:(top+_4a)}:{end:(top-_4a)};
+}
+}
+var _4b=dojo.animateProperty({node:_40,duration:_3f,delay:_46,easing:(_3c.easing||dojo.fx.easing.sinInOut),properties:_47,beforeBegin:(_3c.unhide?function(){
+if(_3c.fade){
+ps.opacity="0";
+}
+if(_42==_43){
+ps.left=_47.left.start+"px";
+}else{
+ps.top=_47.top.start+"px";
+}
+}:undefined)});
+return _4b;
+};
+var _4c=dojox.fx._split(_3c);
+if(_3c.unhide){
+dojo.connect(_4c,"onEnd",_4c,function(){
+dojo.style(_3d,{opacity:"1"});
+});
+}else{
+dojo.connect(_4c,"onPlay",_4c,function(){
+dojo.style(_3d,{opacity:"0"});
+});
+}
+return _4c;
+},unShear:function(_4d){
+_4d.unhide=true;
+return dojox.fx.shear(_4d);
+},pinwheel:function(_4e){
+var _4f=_4e.node=dojo.byId(_4e.node);
+_4e.rows=_4e.rows||4;
+_4e.columns=_4e.columns||4;
+_4e.duration=_4e.duration||1000;
+_4e.interval=_4e.interval||0;
+_4e.distance=_4e.distance||1;
+_4e.random=_4e.random||0;
+if(typeof _4e.fade=="undefined"){
+_4e.fade=true;
+}
+var _50=(_4e.duration-(_4e.rows+_4e.columns)*Math.abs(_4e.interval));
+_4e.pieceAnimation=function(_51,x,y,_52){
+var _53=_52.h/_4e.rows,_54=_52.w/_4e.columns,_55=!(x%2),_56=!(y%2),_57=Math.random()*_50,_58=(_4e.interval<0)?(((_4e.rows+_4e.columns)-(x+y))*_4e.interval*-1):((x+y)*_4e.interval),_59=_57*_4e.random+Math.max(1-_4e.random,0)*_58,_5a={},ps=_51.style;
+if(_4e.fade){
+_5a.opacity=(_4e.unhide?{start:0,end:1}:{end:0});
+}
+if(_4e.columns==1){
+_55=!_56;
+}else{
+if(_4e.rows==1){
+_56=_55;
+}
+}
+var _5b=parseInt(ps.left),top=parseInt(ps.top);
+if(_55){
+if(_56){
+_5a.top=_4e.unhide?{start:top+_53*_4e.distance,end:top}:{start:top,end:top+_53*_4e.distance};
+}else{
+_5a.left=_4e.unhide?{start:_5b+_54*_4e.distance,end:_5b}:{start:_5b,end:_5b+_54*_4e.distance};
+}
+}
+if(_55!=_56){
+_5a.width=_4e.unhide?{start:_54*(1-_4e.distance),end:_54}:{start:_54,end:_54*(1-_4e.distance)};
+}else{
+_5a.height=_4e.unhide?{start:_53*(1-_4e.distance),end:_53}:{start:_53,end:_53*(1-_4e.distance)};
+}
+var _5c=dojo.animateProperty({node:_51,duration:_50,delay:_59,easing:(_4e.easing||dojo.fx.easing.sinInOut),properties:_5a,beforeBegin:(_4e.unhide?function(){
+if(_4e.fade){
+dojo.style(_51,"opacity",0);
+}
+if(_55){
+if(_56){
+ps.top=(top+_53*(1-_4e.distance))+"px";
+}else{
+ps.left=(_5b+_54*(1-_4e.distance))+"px";
+}
+}else{
+ps.left=_5b+"px";
+ps.top=top+"px";
+}
+if(_55!=_56){
+ps.width=(_54*(1-_4e.distance))+"px";
+}else{
+ps.height=(_53*(1-_4e.distance))+"px";
+}
+}:undefined)});
+return _5c;
+};
+var _5d=dojox.fx._split(_4e);
+if(_4e.unhide){
+dojo.connect(_5d,"onEnd",_5d,function(){
+dojo.style(_4f,{opacity:"1"});
+});
+}else{
+dojo.connect(_5d,"play",_5d,function(){
+dojo.style(_4f,{opacity:"0"});
+});
+}
+return _5d;
+},unPinwheel:function(_5e){
+_5e.unhide=true;
+return dojox.fx.pinwheel(_5e);
+},blockFadeOut:function(_5f){
+var _60=_5f.node=dojo.byId(_5f.node);
+_5f.rows=_5f.rows||5;
+_5f.columns=_5f.columns||5;
+_5f.duration=_5f.duration||1000;
+_5f.interval=_5f.interval||_5f.duration/(_5f.rows+_5f.columns*2);
+_5f.random=_5f.random||0;
+var _61=Math.abs(_5f.random),_62=_5f.duration-(_5f.rows+_5f.columns)*_5f.interval;
+_5f.pieceAnimation=function(_63,x,y,_64){
+var _65=Math.random()*_5f.duration,_66=(_5f.reverseOrder)?(((_5f.rows+_5f.columns)-(x+y))*Math.abs(_5f.interval)):((x+y)*_5f.interval),_67=_65*_61+Math.max(1-_61,0)*_66,_68=dojo.animateProperty({node:_63,duration:_62,delay:_67,easing:(_5f.easing||dojo.fx.easing.sinInOut),properties:{opacity:(_5f.unhide?{start:"0",end:"1"}:{start:"1",end:"0"})},beforeBegin:(_5f.unhide?function(){
+dojo.style(_63,{opacity:"0"});
+}:function(){
+_63.style.filter="";
+})});
+return _68;
+};
+var _69=dojox.fx._split(_5f);
+if(_5f.unhide){
+dojo.connect(_69,"onEnd",_69,function(){
+dojo.style(_60,{opacity:"1"});
+});
+}else{
+dojo.connect(_69,"onPlay",_69,function(){
+dojo.style(_60,{opacity:"0"});
+});
+}
+return _69;
+},blockFadeIn:function(_6a){
+_6a.unhide=true;
+return dojox.fx.blockFadeOut(_6a);
+}});
+}
Index: trunk/web/dojo/dojox/fx/ext-dojo/NodeList-style.js
===================================================================
--- trunk/web/dojo/dojox/fx/ext-dojo/NodeList-style.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/ext-dojo/NodeList-style.js	(revision 9)
@@ -0,0 +1,27 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.ext-dojo.NodeList-style"]){
+dojo._hasResource["dojox.fx.ext-dojo.NodeList-style"]=true;
+dojo.provide("dojox.fx.ext-dojo.NodeList-style");
+dojo.experimental("dojox.fx.ext-dojo.NodeList-style");
+dojo.require("dojo.NodeList-fx");
+dojo.require("dojox.fx.style");
+dojo.extend(dojo.NodeList,{addClassFx:function(_1,_2){
+return dojo.fx.combine(this.map(function(n){
+return dojox.fx.addClass(n,_1,_2);
+}));
+},removeClassFx:function(_3,_4){
+return dojo.fx.combine(this.map(function(n){
+return dojox.fx.removeClass(n,_3,_4);
+}));
+},toggleClassFx:function(_5,_6,_7){
+return dojo.fx.combine(this.map(function(n){
+return dojox.fx.toggleClass(n,_5,_6,_7);
+}));
+}});
+}
Index: trunk/web/dojo/dojox/fx/ext-dojo/NodeList.js
===================================================================
--- trunk/web/dojo/dojox/fx/ext-dojo/NodeList.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/ext-dojo/NodeList.js	(revision 9)
@@ -0,0 +1,25 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.ext-dojo.NodeList"]){
+dojo._hasResource["dojox.fx.ext-dojo.NodeList"]=true;
+dojo.provide("dojox.fx.ext-dojo.NodeList");
+dojo.experimental("dojox.fx.ext-dojo.NodeList");
+dojo.require("dojo.NodeList-fx");
+dojo.require("dojox.fx");
+dojo.extend(dojo.NodeList,{sizeTo:function(_1){
+return this._anim(dojox.fx,"sizeTo",_1);
+},slideBy:function(_2){
+return this._anim(dojox.fx,"slideBy",_2);
+},highlight:function(_3){
+return this._anim(dojox.fx,"highlight",_3);
+},fadeTo:function(_4){
+return this._anim(dojo,"_fade",_4);
+},wipeTo:function(_5){
+return this._anim(dojox.fx,"wipeTo",_5);
+}});
+}
Index: trunk/web/dojo/dojox/fx/ext-dojo/complex.js
===================================================================
--- trunk/web/dojo/dojox/fx/ext-dojo/complex.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/ext-dojo/complex.js	(revision 9)
@@ -0,0 +1,100 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.ext-dojo.complex"]){
+dojo._hasResource["dojox.fx.ext-dojo.complex"]=true;
+dojo.provide("dojox.fx.ext-dojo.complex");
+(function(){
+var da=dojo.animateProperty;
+dojo.animateProperty=function(_1){
+var d=dojo;
+var _2=da(_1);
+dojo.connect(_2,"beforeBegin",function(){
+_2.curve.getValue=function(r){
+var _3={};
+for(var p in this._properties){
+var _4=this._properties[p],_5=_4.start;
+if(_5 instanceof d.Color){
+_3[p]=d.blendColors(_5,_4.end,r,_4.tempColor).toCss();
+}else{
+if(_5 instanceof dojox.fx._Complex){
+_3[p]=_5.getValue(r);
+}else{
+if(!d.isArray(_5)){
+_3[p]=((_4.end-_5)*r)+_5+(p!="opacity"?_4.units||"px":0);
+}
+}
+}
+}
+return _3;
+};
+var pm={};
+for(var p in this.properties){
+var o=this.properties[p];
+if(typeof (o.start)=="string"&&/\(/.test(o.start)){
+this.curve._properties[p].start=new dojox.fx._Complex(o);
+}
+}
+});
+return _2;
+};
+})();
+dojo.declare("dojox.fx._Complex",null,{PROP:/\([+-]?[\w|,|#|\.|\s]*\)/g,constructor:function(_6){
+var _7=_6.start.match(this.PROP);
+var _8=_6.end.match(this.PROP);
+var _9=dojo.map(_7,this.getProps,this);
+var _a=dojo.map(_8,this.getProps,this);
+this._properties={};
+this.strProp=_6.start;
+dojo.forEach(_9,function(_b,i){
+dojo.forEach(_b,function(p,j){
+this.strProp=this.strProp.replace(p,"PROP_"+i+""+j);
+this._properties["PROP_"+i+""+j]=this.makePropObject(p,_a[i][j]);
+},this);
+},this);
+},getValue:function(r){
+var _c=this.strProp,u;
+for(var nm in this._properties){
+var v,o=this._properties[nm];
+if(o.units=="isColor"){
+v=dojo.blendColors(o.beg,o.end,r).toCss(false);
+u="";
+}else{
+v=((o.end-o.beg)*r)+o.beg;
+u=o.units;
+}
+_c=_c.replace(nm,v+u);
+}
+return _c;
+},makePropObject:function(_d,_e){
+var b=this.getNumAndUnits(_d);
+var e=this.getNumAndUnits(_e);
+return {beg:b.num,end:e.num,units:b.units};
+},getProps:function(_f){
+_f=_f.substring(1,_f.length-1);
+var s;
+if(/,/.test(_f)){
+_f=_f.replace(/\s/g,"");
+s=_f.split(",");
+}else{
+_f=_f.replace(/\s{2,}/g," ");
+s=_f.split(" ");
+}
+return s;
+},getNumAndUnits:function(_10){
+if(!_10){
+return {};
+}
+if(/#/.test(_10)){
+return {num:new dojo.Color(_10),units:"isColor"};
+}
+var o={num:parseFloat(/-*[\d\.\d|\d]{1,}/.exec(_10).join(""))};
+o.units=/[a-z]{1,}/.exec(_10);
+o.units=o.units&&o.units.length?o.units.join(""):"";
+return o;
+}});
+}
Index: trunk/web/dojo/dojox/fx/ext-dojo/reverse.js
===================================================================
--- trunk/web/dojo/dojox/fx/ext-dojo/reverse.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/ext-dojo/reverse.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.ext-dojo.reverse"]){
+dojo._hasResource["dojox.fx.ext-dojo.reverse"]=true;
+dojo.provide("dojox.fx.ext-dojo.reverse");
+dojo.require("dojo.fx.easing");
+dojo.require("dojo.fx");
+dojo.extend(dojo.Animation,{_reversed:false,reverse:function(_1,_2){
+var _3=this.status()=="playing";
+this.pause();
+this._reversed=!this._reversed;
+var d=this.duration,_4=d*this._percent,_5=d-_4,_6=new Date().valueOf(),cp=this.curve._properties,p=this.properties,nm;
+this._endTime=_6+_4;
+this._startTime=_6-_5;
+if(_3){
+this.gotoPercent(_5/d);
+}
+for(nm in p){
+var _7=p[nm].start;
+p[nm].start=cp[nm].start=p[nm].end;
+p[nm].end=cp[nm].end=_7;
+}
+if(this._reversed){
+if(!this.rEase){
+this.fEase=this.easing;
+if(_2){
+this.rEase=_2;
+}else{
+var de=dojo.fx.easing,_8,_9;
+for(nm in de){
+if(this.easing==de[nm]){
+_8=nm;
+break;
+}
+}
+if(_8){
+if(/InOut/.test(nm)||!/In|Out/i.test(nm)){
+this.rEase=this.easing;
+}else{
+if(/In/.test(nm)){
+_9=nm.replace("In","Out");
+}else{
+_9=nm.replace("Out","In");
+}
+}
+if(_9){
+this.rEase=dojo.fx.easing[_9];
+}
+}else{
+this.rEase=this.easing;
+}
+}
+}
+this.easing=this.rEase;
+}else{
+this.easing=this.fEase;
+}
+if(!_1&&this.status()!="playing"){
+this.play();
+}
+return this;
+}});
+}
Index: trunk/web/dojo/dojox/fx/scroll.js
===================================================================
--- trunk/web/dojo/dojox/fx/scroll.js	(revision 0)
+++ trunk/web/dojo/dojox/fx/scroll.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx.scroll"]){
+dojo._hasResource["dojox.fx.scroll"]=true;
+dojo.provide("dojox.fx.scroll");
+dojo.experimental("dojox.fx.scroll");
+dojo.require("dojox.fx._core");
+dojox.fx.smoothScroll=function(_1){
+if(!_1.target){
+_1.target=dojo.position(_1.node,true);
+}
+var _2=dojo[(dojo.isIE?"isObject":"isFunction")](_1["win"].scrollTo),_3={x:_1.target.x,y:_1.target.y};
+if(!_2){
+var _4=dojo.position(_1.win);
+_3.x-=_4.x;
+_3.y-=_4.y;
+}
+var _5=(_2)?(function(_6){
+_1.win.scrollTo(_6[0],_6[1]);
+}):(function(_7){
+_1.win.scrollLeft=_7[0];
+_1.win.scrollTop=_7[1];
+});
+var _8=new dojo.Animation(dojo.mixin({beforeBegin:function(){
+if(this.curve){
+delete this.curve;
+}
+var _9=_2?dojo._docScroll():{x:_1.win.scrollLeft,y:_1.win.scrollTop};
+_8.curve=new dojox.fx._Line([_9.x,_9.y],[_3.x,_3.y]);
+},onAnimate:_5},_1));
+return _8;
+};
+}
Index: trunk/web/dojo/dojox/gfx.js.uncompressed.js
===================================================================
--- trunk/web/dojo/dojox/gfx.js.uncompressed.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx.js.uncompressed.js	(revision 9)
@@ -0,0 +1,943 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojox.gfx.matrix"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.matrix"] = true;
+dojo.provide("dojox.gfx.matrix");
+
+(function(){
+	var m = dojox.gfx.matrix;
+
+	// candidates for dojox.math:
+	var _degToRadCache = {};
+	m._degToRad = function(degree){
+		return _degToRadCache[degree] || (_degToRadCache[degree] = (Math.PI * degree / 180));
+	};
+	m._radToDeg = function(radian){ return radian / Math.PI * 180; };
+
+	m.Matrix2D = function(arg){
+		// summary: a 2D matrix object
+		// description: Normalizes a 2D matrix-like object. If arrays is passed,
+		//		all objects of the array are normalized and multiplied sequentially.
+		// arg: Object
+		//		a 2D matrix-like object, a number, or an array of such objects
+		if(arg){
+			if(typeof arg == "number"){
+				this.xx = this.yy = arg;
+			}else if(arg instanceof Array){
+				if(arg.length > 0){
+					var matrix = m.normalize(arg[0]);
+					// combine matrices
+					for(var i = 1; i < arg.length; ++i){
+						var l = matrix, r = dojox.gfx.matrix.normalize(arg[i]);
+						matrix = new m.Matrix2D();
+						matrix.xx = l.xx * r.xx + l.xy * r.yx;
+						matrix.xy = l.xx * r.xy + l.xy * r.yy;
+						matrix.yx = l.yx * r.xx + l.yy * r.yx;
+						matrix.yy = l.yx * r.xy + l.yy * r.yy;
+						matrix.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+						matrix.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+					}
+					dojo.mixin(this, matrix);
+				}
+			}else{
+				dojo.mixin(this, arg);
+			}
+		}
+	};
+
+	// the default (identity) matrix, which is used to fill in missing values
+	dojo.extend(m.Matrix2D, {xx: 1, xy: 0, yx: 0, yy: 1, dx: 0, dy: 0});
+
+	dojo.mixin(m, {
+		// summary: class constants, and methods of dojox.gfx.matrix
+
+		// matrix constants
+
+		// identity: dojox.gfx.matrix.Matrix2D
+		//		an identity matrix constant: identity * (x, y) == (x, y)
+		identity: new m.Matrix2D(),
+
+		// flipX: dojox.gfx.matrix.Matrix2D
+		//		a matrix, which reflects points at x = 0 line: flipX * (x, y) == (-x, y)
+		flipX:    new m.Matrix2D({xx: -1}),
+
+		// flipY: dojox.gfx.matrix.Matrix2D
+		//		a matrix, which reflects points at y = 0 line: flipY * (x, y) == (x, -y)
+		flipY:    new m.Matrix2D({yy: -1}),
+
+		// flipXY: dojox.gfx.matrix.Matrix2D
+		//		a matrix, which reflects points at the origin of coordinates: flipXY * (x, y) == (-x, -y)
+		flipXY:   new m.Matrix2D({xx: -1, yy: -1}),
+
+		// matrix creators
+
+		translate: function(a, b){
+			// summary: forms a translation matrix
+			// description: The resulting matrix is used to translate (move) points by specified offsets.
+			// a: Number: an x coordinate value
+			// b: Number: a y coordinate value
+			if(arguments.length > 1){
+				return new m.Matrix2D({dx: a, dy: b}); // dojox.gfx.matrix.Matrix2D
+			}
+			// branch
+			// a: dojox.gfx.Point: a point-like object, which specifies offsets for both dimensions
+			// b: null
+			return new m.Matrix2D({dx: a.x, dy: a.y}); // dojox.gfx.matrix.Matrix2D
+		},
+		scale: function(a, b){
+			// summary: forms a scaling matrix
+			// description: The resulting matrix is used to scale (magnify) points by specified offsets.
+			// a: Number: a scaling factor used for the x coordinate
+			// b: Number: a scaling factor used for the y coordinate
+			if(arguments.length > 1){
+				return new m.Matrix2D({xx: a, yy: b}); // dojox.gfx.matrix.Matrix2D
+			}
+			if(typeof a == "number"){
+				// branch
+				// a: Number: a uniform scaling factor used for the both coordinates
+				// b: null
+				return new m.Matrix2D({xx: a, yy: a}); // dojox.gfx.matrix.Matrix2D
+			}
+			// branch
+			// a: dojox.gfx.Point: a point-like object, which specifies scale factors for both dimensions
+			// b: null
+			return new m.Matrix2D({xx: a.x, yy: a.y}); // dojox.gfx.matrix.Matrix2D
+		},
+		rotate: function(angle){
+			// summary: forms a rotating matrix
+			// description: The resulting matrix is used to rotate points
+			//		around the origin of coordinates (0, 0) by specified angle.
+			// angle: Number: an angle of rotation in radians (>0 for CW)
+			var c = Math.cos(angle);
+			var s = Math.sin(angle);
+			return new m.Matrix2D({xx: c, xy: -s, yx: s, yy: c}); // dojox.gfx.matrix.Matrix2D
+		},
+		rotateg: function(degree){
+			// summary: forms a rotating matrix
+			// description: The resulting matrix is used to rotate points
+			//		around the origin of coordinates (0, 0) by specified degree.
+			//		See dojox.gfx.matrix.rotate() for comparison.
+			// degree: Number: an angle of rotation in degrees (>0 for CW)
+			return m.rotate(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+		},
+		skewX: function(angle) {
+			// summary: forms an x skewing matrix
+			// description: The resulting matrix is used to skew points in the x dimension
+			//		around the origin of coordinates (0, 0) by specified angle.
+			// angle: Number: an skewing angle in radians
+			return new m.Matrix2D({xy: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+		},
+		skewXg: function(degree){
+			// summary: forms an x skewing matrix
+			// description: The resulting matrix is used to skew points in the x dimension
+			//		around the origin of coordinates (0, 0) by specified degree.
+			//		See dojox.gfx.matrix.skewX() for comparison.
+			// degree: Number: an skewing angle in degrees
+			return m.skewX(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+		},
+		skewY: function(angle){
+			// summary: forms a y skewing matrix
+			// description: The resulting matrix is used to skew points in the y dimension
+			//		around the origin of coordinates (0, 0) by specified angle.
+			// angle: Number: an skewing angle in radians
+			return new m.Matrix2D({yx: Math.tan(angle)}); // dojox.gfx.matrix.Matrix2D
+		},
+		skewYg: function(degree){
+			// summary: forms a y skewing matrix
+			// description: The resulting matrix is used to skew points in the y dimension
+			//		around the origin of coordinates (0, 0) by specified degree.
+			//		See dojox.gfx.matrix.skewY() for comparison.
+			// degree: Number: an skewing angle in degrees
+			return m.skewY(m._degToRad(degree)); // dojox.gfx.matrix.Matrix2D
+		},
+		reflect: function(a, b){
+			// summary: forms a reflection matrix
+			// description: The resulting matrix is used to reflect points around a vector,
+			//		which goes through the origin.
+			// a: dojox.gfx.Point: a point-like object, which specifies a vector of reflection
+			// b: null
+			if(arguments.length == 1){
+				b = a.y;
+				a = a.x;
+			}
+			// branch
+			// a: Number: an x coordinate value
+			// b: Number: a y coordinate value
+
+			// make a unit vector
+			var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = 2 * a * b / n2;
+			return new m.Matrix2D({xx: 2 * a2 / n2 - 1, xy: xy, yx: xy, yy: 2 * b2 / n2 - 1}); // dojox.gfx.matrix.Matrix2D
+		},
+		project: function(a, b){
+			// summary: forms an orthogonal projection matrix
+			// description: The resulting matrix is used to project points orthogonally on a vector,
+			//		which goes through the origin.
+			// a: dojox.gfx.Point: a point-like object, which specifies a vector of projection
+			// b: null
+			if(arguments.length == 1){
+				b = a.y;
+				a = a.x;
+			}
+			// branch
+			// a: Number: an x coordinate value
+			// b: Number: a y coordinate value
+
+			// make a unit vector
+			var a2 = a * a, b2 = b * b, n2 = a2 + b2, xy = a * b / n2;
+			return new m.Matrix2D({xx: a2 / n2, xy: xy, yx: xy, yy: b2 / n2}); // dojox.gfx.matrix.Matrix2D
+		},
+
+		// ensure matrix 2D conformance
+		normalize: function(matrix){
+			// summary: converts an object to a matrix, if necessary
+			// description: Converts any 2D matrix-like object or an array of
+			//		such objects to a valid dojox.gfx.matrix.Matrix2D object.
+			// matrix: Object: an object, which is converted to a matrix, if necessary
+			return (matrix instanceof m.Matrix2D) ? matrix : new m.Matrix2D(matrix); // dojox.gfx.matrix.Matrix2D
+		},
+
+		// common operations
+
+		clone: function(matrix){
+			// summary: creates a copy of a 2D matrix
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be cloned
+			var obj = new m.Matrix2D();
+			for(var i in matrix){
+				if(typeof(matrix[i]) == "number" && typeof(obj[i]) == "number" && obj[i] != matrix[i]) obj[i] = matrix[i];
+			}
+			return obj; // dojox.gfx.matrix.Matrix2D
+		},
+		invert: function(matrix){
+			// summary: inverts a 2D matrix
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object to be inverted
+			var M = m.normalize(matrix),
+				D = M.xx * M.yy - M.xy * M.yx,
+				M = new m.Matrix2D({
+					xx: M.yy/D, xy: -M.xy/D,
+					yx: -M.yx/D, yy: M.xx/D,
+					dx: (M.xy * M.dy - M.yy * M.dx) / D,
+					dy: (M.yx * M.dx - M.xx * M.dy) / D
+				});
+			return M; // dojox.gfx.matrix.Matrix2D
+		},
+		_multiplyPoint: function(matrix, x, y){
+			// summary: applies a matrix to a point
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+			// x: Number: an x coordinate of a point
+			// y: Number: a y coordinate of a point
+			return {x: matrix.xx * x + matrix.xy * y + matrix.dx, y: matrix.yx * x + matrix.yy * y + matrix.dy}; // dojox.gfx.Point
+		},
+		multiplyPoint: function(matrix, /* Number||Point */ a, /* Number, optional */ b){
+			// summary: applies a matrix to a point
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+			// a: Number: an x coordinate of a point
+			// b: Number: a y coordinate of a point
+			var M = m.normalize(matrix);
+			if(typeof a == "number" && typeof b == "number"){
+				return m._multiplyPoint(M, a, b); // dojox.gfx.Point
+			}
+			// branch
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix object to be applied
+			// a: dojox.gfx.Point: a point
+			// b: null
+			return m._multiplyPoint(M, a.x, a.y); // dojox.gfx.Point
+		},
+		multiply: function(matrix){
+			// summary: combines matrices by multiplying them sequentially in the given order
+			// matrix: dojox.gfx.matrix.Matrix2D...: a 2D matrix-like object,
+			//		all subsequent arguments are matrix-like objects too
+			var M = m.normalize(matrix);
+			// combine matrices
+			for(var i = 1; i < arguments.length; ++i){
+				var l = M, r = m.normalize(arguments[i]);
+				M = new m.Matrix2D();
+				M.xx = l.xx * r.xx + l.xy * r.yx;
+				M.xy = l.xx * r.xy + l.xy * r.yy;
+				M.yx = l.yx * r.xx + l.yy * r.yx;
+				M.yy = l.yx * r.xy + l.yy * r.yy;
+				M.dx = l.xx * r.dx + l.xy * r.dy + l.dx;
+				M.dy = l.yx * r.dx + l.yy * r.dy + l.dy;
+			}
+			return M; // dojox.gfx.matrix.Matrix2D
+		},
+
+		// high level operations
+
+		_sandwich: function(matrix, x, y){
+			// summary: applies a matrix at a centrtal point
+			// matrix: dojox.gfx.matrix.Matrix2D: a 2D matrix-like object, which is applied at a central point
+			// x: Number: an x component of the central point
+			// y: Number: a y component of the central point
+			return m.multiply(m.translate(x, y), matrix, m.translate(-x, -y)); // dojox.gfx.matrix.Matrix2D
+		},
+		scaleAt: function(a, b, c, d){
+			// summary: scales a picture using a specified point as a center of scaling
+			// description: Compare with dojox.gfx.matrix.scale().
+			// a: Number: a scaling factor used for the x coordinate
+			// b: Number: a scaling factor used for the y coordinate
+			// c: Number: an x component of a central point
+			// d: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) uniform scale factor, Point
+			//	2) uniform scale factor, x, y
+			//	3) x scale, y scale, Point
+			//	4) x scale, y scale, x, y
+
+			switch(arguments.length){
+				case 4:
+					// a and b are scale factor components, c and d are components of a point
+					return m._sandwich(m.scale(a, b), c, d); // dojox.gfx.matrix.Matrix2D
+				case 3:
+					if(typeof c == "number"){
+						// branch
+						// a: Number: a uniform scaling factor used for both coordinates
+						// b: Number: an x component of a central point
+						// c: Number: a y component of a central point
+						// d: null
+						return m._sandwich(m.scale(a), b, c); // dojox.gfx.matrix.Matrix2D
+					}
+					// branch
+					// a: Number: a scaling factor used for the x coordinate
+					// b: Number: a scaling factor used for the y coordinate
+					// c: dojox.gfx.Point: a central point
+					// d: null
+					return m._sandwich(m.scale(a, b), c.x, c.y); // dojox.gfx.matrix.Matrix2D
+			}
+			// branch
+			// a: Number: a uniform scaling factor used for both coordinates
+			// b: dojox.gfx.Point: a central point
+			// c: null
+			// d: null
+			return m._sandwich(m.scale(a), b.x, b.y); // dojox.gfx.matrix.Matrix2D
+		},
+		rotateAt: function(angle, a, b){
+			// summary: rotates a picture using a specified point as a center of rotation
+			// description: Compare with dojox.gfx.matrix.rotate().
+			// angle: Number: an angle of rotation in radians (>0 for CW)
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) rotation angle in radians, Point
+			//	2) rotation angle in radians, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.rotate(angle), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// angle: Number: an angle of rotation in radians (>0 for CCW)
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.rotate(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		rotategAt: function(degree, a, b){
+			// summary: rotates a picture using a specified point as a center of rotation
+			// description: Compare with dojox.gfx.matrix.rotateg().
+			// degree: Number: an angle of rotation in degrees (>0 for CW)
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) rotation angle in degrees, Point
+			//	2) rotation angle in degrees, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.rotateg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// degree: Number: an angle of rotation in degrees (>0 for CCW)
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.rotateg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewXAt: function(angle, a, b){
+			// summary: skews a picture along the x axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewX().
+			// angle: Number: an skewing angle in radians
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in radians, Point
+			//	2) skew angle in radians, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewX(angle), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// angle: Number: an skewing angle in radians
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewX(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewXgAt: function(degree, a, b){
+			// summary: skews a picture along the x axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewXg().
+			// degree: Number: an skewing angle in degrees
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in degrees, Point
+			//	2) skew angle in degrees, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewXg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// degree: Number: an skewing angle in degrees
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewXg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewYAt: function(angle, a, b){
+			// summary: skews a picture along the y axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewY().
+			// angle: Number: an skewing angle in radians
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in radians, Point
+			//	2) skew angle in radians, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewY(angle), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// angle: Number: an skewing angle in radians
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewY(angle), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		},
+		skewYgAt: function(/* Number */ degree, /* Number||Point */ a, /* Number, optional */ b){
+			// summary: skews a picture along the y axis using a specified point as a center of skewing
+			// description: Compare with dojox.gfx.matrix.skewYg().
+			// degree: Number: an skewing angle in degrees
+			// a: Number: an x component of a central point
+			// b: Number: a y component of a central point
+
+			// accepts several signatures:
+			//	1) skew angle in degrees, Point
+			//	2) skew angle in degrees, x, y
+
+			if(arguments.length > 2){
+				return m._sandwich(m.skewYg(degree), a, b); // dojox.gfx.matrix.Matrix2D
+			}
+
+			// branch
+			// degree: Number: an skewing angle in degrees
+			// a: dojox.gfx.Point: a central point
+			// b: null
+			return m._sandwich(m.skewYg(degree), a.x, a.y); // dojox.gfx.matrix.Matrix2D
+		}
+
+		//TODO: rect-to-rect mapping, scale-to-fit (isotropic and anisotropic versions)
+
+	});
+})();
+
+// propagate Matrix2D up
+dojox.gfx.Matrix2D = dojox.gfx.matrix.Matrix2D;
+
+}
+
+if(!dojo._hasResource["dojox.gfx._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx._base"] = true;
+dojo.provide("dojox.gfx._base");
+
+(function(){
+	var g = dojox.gfx, b = g._base;
+
+	// candidates for dojox.style (work on VML and SVG nodes)
+	g._hasClass = function(/*DomNode*/node, /*String*/classStr){
+		//	summary:
+		//		Returns whether or not the specified classes are a portion of the
+		//		class list currently applied to the node.
+		// return (new RegExp('(^|\\s+)'+classStr+'(\\s+|$)')).test(node.className)	// Boolean
+		var cls = node.getAttribute("className");
+		return cls && (" " + cls + " ").indexOf(" " + classStr + " ") >= 0;  // Boolean
+	}
+	g._addClass = function(/*DomNode*/node, /*String*/classStr){
+		//	summary:
+		//		Adds the specified classes to the end of the class list on the
+		//		passed node.
+		var cls = node.getAttribute("className") || "";
+		if(!cls || (" " + cls + " ").indexOf(" " + classStr + " ") < 0){
+			node.setAttribute("className", cls + (cls ? " " : "") + classStr);
+		}
+	}
+	g._removeClass = function(/*DomNode*/node, /*String*/classStr){
+		//	summary: Removes classes from node.
+		var cls = node.getAttribute("className");
+		if(cls){
+			node.setAttribute(
+				"className", 
+				cls.replace(new RegExp('(^|\\s+)' + classStr + '(\\s+|$)'), "$1$2")
+			);
+		}
+	}
+
+	// candidate for dojox.html.metrics (dynamic font resize handler is not implemented here)
+
+	//	derived from Morris John's emResized measurer
+	b._getFontMeasurements = function(){
+		//	summary:
+		//		Returns an object that has pixel equivilents of standard font
+		//		size values.
+		var heights = {
+			'1em': 0, '1ex': 0, '100%': 0, '12pt': 0, '16px': 0, 'xx-small': 0,
+			'x-small': 0, 'small': 0, 'medium': 0, 'large': 0, 'x-large': 0,
+			'xx-large': 0
+		};
+
+		if(dojo.isIE){
+			//	we do a font-size fix if and only if one isn't applied already.
+			//	NOTE: If someone set the fontSize on the HTML Element, this will kill it.
+			dojo.doc.documentElement.style.fontSize="100%";
+		}
+
+		//	set up the measuring node.
+		var div = dojo.doc.createElement("div");
+		var s = div.style;
+		s.position = "absolute";
+		s.left = "-100px";
+		s.top = "0px";
+		s.width = "30px";
+		s.height = "1000em";
+		s.borderWidth = "0px";
+		s.margin = "0px";
+		s.padding = "0px";
+		s.outline = "none";
+		s.lineHeight = "1";
+		s.overflow = "hidden";
+		dojo.body().appendChild(div);
+
+		//	do the measurements.
+		for(var p in heights){
+			div.style.fontSize = p;
+			heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
+		}
+
+		dojo.body().removeChild(div);
+		div = null;
+		return heights; 	//	object
+	};
+
+	var fontMeasurements = null;
+
+	b._getCachedFontMeasurements = function(recalculate){
+		if(recalculate || !fontMeasurements){
+			fontMeasurements = b._getFontMeasurements();
+		}
+		return fontMeasurements;
+	};
+
+	// candidate for dojox.html.metrics
+
+	var measuringNode = null, empty = {};
+	b._getTextBox = function(	/*String*/ text,
+								/*Object*/ style,
+								/*String?*/ className){
+		var m, s, al = arguments.length;
+		if(!measuringNode){
+			m = measuringNode = dojo.doc.createElement("div");
+			s = m.style;
+			s.position = "absolute";
+			s.left = "-10000px";
+			s.top = "0";
+			dojo.body().appendChild(m);
+		}else{
+			m = measuringNode;
+			s = m.style;
+		}
+		// reset styles
+		m.className = "";
+		s.borderWidth = "0";
+		s.margin = "0";
+		s.padding = "0";
+		s.outline = "0";
+		// set new style
+		if(al > 1 && style){
+			for(var i in style){
+				if(i in empty){ continue; }
+				s[i] = style[i];
+			}
+		}
+		// set classes
+		if(al > 2 && className){
+			m.className = className;
+		}
+		// take a measure
+		m.innerHTML = text;
+
+		if(m["getBoundingClientRect"]){
+			var bcr = m.getBoundingClientRect();
+			return {l: bcr.left, t: bcr.top, w: bcr.width || (bcr.right - bcr.left), h: bcr.height || (bcr.bottom - bcr.top)};
+		}else{
+			return dojo.marginBox(m);
+		}
+	};
+
+	// candidate for dojo.dom
+
+	var uniqueId = 0;
+	b._getUniqueId = function(){
+		// summary: returns a unique string for use with any DOM element
+		var id;
+		do{
+			id = dojo._scopeName + "Unique" + (++uniqueId);
+		}while(dojo.byId(id));
+		return id;
+	};
+})();
+
+dojo.mixin(dojox.gfx, {
+	//	summary:
+	// 		defines constants, prototypes, and utility functions
+
+	// default shapes, which are used to fill in missing parameters
+	defaultPath: {
+		type: "path", path: ""
+	},
+	defaultPolyline: {
+		type: "polyline", points: []
+	},
+	defaultRect: {
+		type: "rect", x: 0, y: 0, width: 100, height: 100, r: 0
+	},
+	defaultEllipse: {
+		type: "ellipse", cx: 0, cy: 0, rx: 200, ry: 100
+	},
+	defaultCircle: {
+		type: "circle", cx: 0, cy: 0, r: 100
+	},
+	defaultLine: {
+		type: "line", x1: 0, y1: 0, x2: 100, y2: 100
+	},
+	defaultImage: {
+		type: "image", x: 0, y: 0, width: 0, height: 0, src: ""
+	},
+	defaultText: {
+		type: "text", x: 0, y: 0, text: "", align: "start",
+		decoration: "none", rotated: false, kerning: true
+	},
+	defaultTextPath: {
+		type: "textpath", text: "", align: "start",
+		decoration: "none", rotated: false, kerning: true
+	},
+
+	// default geometric attributes
+	defaultStroke: {
+		type: "stroke", color: "black", style: "solid", width: 1, 
+		cap: "butt", join: 4
+	},
+	defaultLinearGradient: {
+		type: "linear", x1: 0, y1: 0, x2: 100, y2: 100,
+		colors: [
+			{ offset: 0, color: "black" }, { offset: 1, color: "white" }
+		]
+	},
+	defaultRadialGradient: {
+		type: "radial", cx: 0, cy: 0, r: 100,
+		colors: [
+			{ offset: 0, color: "black" }, { offset: 1, color: "white" }
+		]
+	},
+	defaultPattern: {
+		type: "pattern", x: 0, y: 0, width: 0, height: 0, src: ""
+	},
+	defaultFont: {
+		type: "font", style: "normal", variant: "normal", 
+		weight: "normal", size: "10pt", family: "serif"
+	},
+
+	getDefault: (function(){
+		var typeCtorCache = {};
+		// a memoized delegate()
+		return function(/*String*/ type){
+			var t = typeCtorCache[type];
+			if(t){
+				return new t();
+			}
+			t = typeCtorCache[type] = new Function;
+			t.prototype = dojox.gfx[ "default" + type ];
+			return new t();
+		}
+	})(),
+
+	normalizeColor: function(/*Color*/ color){
+		//	summary:
+		// 		converts any legal color representation to normalized
+		// 		dojo.Color object
+		return (color instanceof dojo.Color) ? color : new dojo.Color(color); // dojo.Color
+	},
+	normalizeParameters: function(existed, update){
+		//	summary:
+		// 		updates an existing object with properties from an "update"
+		// 		object
+		//	existed: Object
+		//		the "target" object to be updated
+		//	update:  Object
+		//		the "update" object, whose properties will be used to update
+		//		the existed object
+		if(update){
+			var empty = {};
+			for(var x in existed){
+				if(x in update && !(x in empty)){
+					existed[x] = update[x];
+				}
+			}
+		}
+		return existed;	// Object
+	},
+	makeParameters: function(defaults, update){
+		//	summary:
+		// 		copies the original object, and all copied properties from the
+		// 		"update" object
+		//	defaults: Object
+		//		the object to be cloned before updating
+		//	update:   Object
+		//		the object, which properties are to be cloned during updating
+		if(!update){
+			// return dojo.clone(defaults);
+			return dojo.delegate(defaults);
+		}
+		var result = {};
+		for(var i in defaults){
+			if(!(i in result)){
+				result[i] = dojo.clone((i in update) ? update[i] : defaults[i]);
+			}
+		}
+		return result; // Object
+	},
+	formatNumber: function(x, addSpace){
+		// summary: converts a number to a string using a fixed notation
+		// x:			Number:		number to be converted
+		// addSpace:	Boolean?:	if it is true, add a space before a positive number
+		var val = x.toString();
+		if(val.indexOf("e") >= 0){
+			val = x.toFixed(4);
+		}else{
+			var point = val.indexOf(".");
+			if(point >= 0 && val.length - point > 5){
+				val = x.toFixed(4);
+			}
+		}
+		if(x < 0){
+			return val; // String
+		}
+		return addSpace ? " " + val : val; // String
+	},
+	// font operations
+	makeFontString: function(font){
+		// summary: converts a font object to a CSS font string
+		// font:	Object:	font object (see dojox.gfx.defaultFont)
+		return font.style + " " + font.variant + " " + font.weight + " " + font.size + " " + font.family; // Object
+	},
+	splitFontString: function(str){
+		// summary:
+		//		converts a CSS font string to a font object
+		// description:
+		//		Converts a CSS font string to a gfx font object. The CSS font
+		//		string components should follow the W3C specified order
+		//		(see http://www.w3.org/TR/CSS2/fonts.html#font-shorthand):
+		//		style, variant, weight, size, optional line height (will be
+		//		ignored), and family.
+		// str: String
+		//		a CSS font string
+		var font = dojox.gfx.getDefault("Font");
+		var t = str.split(/\s+/);
+		do{
+			if(t.length < 5){ break; }
+			font.style   = t[0];
+			font.variant = t[1];
+			font.weight  = t[2];
+			var i = t[3].indexOf("/");
+			font.size = i < 0 ? t[3] : t[3].substring(0, i);
+			var j = 4;
+			if(i < 0){
+				if(t[4] == "/"){
+					j = 6;
+				}else if(t[4].charAt(0) == "/"){
+					j = 5;
+				}
+			}
+			if(j < t.length){
+				font.family = t.slice(j).join(" ");
+			}
+		}while(false);
+		return font;	// Object
+	},
+	// length operations
+	cm_in_pt: 72 / 2.54,	// Number: points per centimeter
+	mm_in_pt: 7.2 / 2.54,	// Number: points per millimeter
+	px_in_pt: function(){
+		// summary: returns a number of pixels per point
+		return dojox.gfx._base._getCachedFontMeasurements()["12pt"] / 12;	// Number
+	},
+	pt2px: function(len){
+		// summary: converts points to pixels
+		// len: Number: a value in points
+		return len * dojox.gfx.px_in_pt();	// Number
+	},
+	px2pt: function(len){
+		// summary: converts pixels to points
+		// len: Number: a value in pixels
+		return len / dojox.gfx.px_in_pt();	// Number
+	},
+	normalizedLength: function(len) {
+		// summary: converts any length value to pixels
+		// len: String: a length, e.g., "12pc"
+		if(len.length == 0) return 0;
+		if(len.length > 2){
+			var px_in_pt = dojox.gfx.px_in_pt();
+			var val = parseFloat(len);
+			switch(len.slice(-2)){
+				case "px": return val;
+				case "pt": return val * px_in_pt;
+				case "in": return val * 72 * px_in_pt;
+				case "pc": return val * 12 * px_in_pt;
+				case "mm": return val * dojox.gfx.mm_in_pt * px_in_pt;
+				case "cm": return val * dojox.gfx.cm_in_pt * px_in_pt;
+			}
+		}
+		return parseFloat(len);	// Number
+	},
+
+	// a constant used to split a SVG/VML path into primitive components
+	pathVmlRegExp: /([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+	pathSvgRegExp: /([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,
+
+	equalSources: function(a, b){
+		// summary: compares event sources, returns true if they are equal
+		return a && b && a == b;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.gfx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx"] = true;
+dojo.provide("dojox.gfx");
+
+
+
+
+dojo.loadInit(function(){
+	//Since loaderInit can be fired before any dojo.provide/require calls,
+	//make sure the dojox.gfx object exists and only run this logic if dojox.gfx.renderer
+	//has not been defined yet.
+	var gfx = dojo.getObject("dojox.gfx", true), sl, flag, match;
+	if(!gfx.renderer){
+		//Have a way to force a GFX renderer, if so desired.
+		//Useful for being able to serialize GFX data in a particular format.
+		if(dojo.config.forceGfxRenderer){
+			dojox.gfx.renderer = dojo.config.forceGfxRenderer;
+			return;
+		}
+		var renderers = (typeof dojo.config.gfxRenderer == "string" ?
+			dojo.config.gfxRenderer : "svg,vml,silverlight,canvas").split(",");
+
+		// mobile platform detection
+		// TODO: move to the base?
+
+		var ua = navigator.userAgent, iPhoneOsBuild = 0, androidVersion = 0;
+		if(dojo.isSafari >= 3){
+			// detect mobile version of WebKit starting with "version 3"
+
+			//	comprehensive iPhone test.  Have to figure out whether it's SVG or Canvas based on the build.
+			//	iPhone OS build numbers from en.wikipedia.org.
+			if(ua.indexOf("iPhone") >= 0 || ua.indexOf("iPod") >= 0){
+				//	grab the build out of this.  Expression is a little nasty because we want
+				//		to be sure we have the whole version string.
+				match = ua.match(/Version\/(\d(\.\d)?(\.\d)?)\sMobile\/([^\s]*)\s?/);
+				if(match){
+					//	grab the build out of the match.  Only use the first three because of specific builds.
+					iPhoneOsBuild = parseInt(match[4].substr(0,3), 16);
+				}
+			}
+		}
+		if(dojo.isWebKit){
+			// Android detection
+			if(!iPhoneOsBuild){
+				match = ua.match(/Android\s+(\d+\.\d+)/);
+				if(match){
+					androidVersion = parseFloat(match[1]);
+					// Android 1.0-1.1 doesn't support SVG but supports Canvas
+				}
+			}
+		}
+
+		for(var i = 0; i < renderers.length; ++i){
+			switch(renderers[i]){
+				case "svg":
+					//	iPhone OS builds greater than 5F1 should have SVG.
+					if(!dojo.isIE && (!iPhoneOsBuild || iPhoneOsBuild >= 0x5f1) && !androidVersion && !dojo.isAIR){
+						dojox.gfx.renderer = "svg";
+					}
+					break;
+				case "vml":
+					if(dojo.isIE){
+						dojox.gfx.renderer = "vml";
+					}
+					break;
+				case "silverlight":
+					try{
+						if(dojo.isIE){
+							sl = new ActiveXObject("AgControl.AgControl");
+							if(sl && sl.IsVersionSupported("1.0")){
+								flag = true;
+							}
+						}else{
+							if(navigator.plugins["Silverlight Plug-In"]){
+								flag = true;
+							}
+						}
+					}catch(e){
+						flag = false;
+					}finally{
+						sl = null;
+					}
+					if(flag){ dojox.gfx.renderer = "silverlight"; }
+					break;
+				case "canvas":
+					//TODO: need more comprehensive test for Canvas
+					if(!dojo.isIE){
+						dojox.gfx.renderer = "canvas";
+					}
+					break;
+			}
+			if(dojox.gfx.renderer){ break; }
+		}
+		if(dojo.config.isDebug){
+			console.log("gfx renderer = " + dojox.gfx.renderer);
+		}
+	}
+});
+
+// include a renderer conditionally
+dojo.requireIf(dojox.gfx.renderer == "svg", "dojox.gfx.svg");
+dojo.requireIf(dojox.gfx.renderer == "vml", "dojox.gfx.vml");
+dojo.requireIf(dojox.gfx.renderer == "silverlight", "dojox.gfx.silverlight");
+dojo.requireIf(dojox.gfx.renderer == "canvas", "dojox.gfx.canvas");
+
+}
+
Index: trunk/web/dojo/dojox/lang/aspect.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect.js	(revision 9)
@@ -0,0 +1,212 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect"]){
+dojo._hasResource["dojox.lang.aspect"]=true;
+dojo.provide("dojox.lang.aspect");
+(function(){
+var d=dojo,_1=dojox.lang.aspect,ap=Array.prototype,_2=[],_3;
+var _4=function(){
+this.next_before=this.prev_before=this.next_around=this.prev_around=this.next_afterReturning=this.prev_afterReturning=this.next_afterThrowing=this.prev_afterThrowing=this;
+this.counter=0;
+};
+d.extend(_4,{add:function(_5){
+var _6=d.isFunction(_5),_7={advice:_5,dynamic:_6};
+this._add(_7,"before","",_6,_5);
+this._add(_7,"around","",_6,_5);
+this._add(_7,"after","Returning",_6,_5);
+this._add(_7,"after","Throwing",_6,_5);
+++this.counter;
+return _7;
+},_add:function(_8,_9,_a,_b,_c){
+var _d=_9+_a;
+if(_b||_c[_9]||(_a&&_c[_d])){
+var _e="next_"+_d,_f="prev_"+_d;
+(_8[_f]=this[_f])[_e]=_8;
+(_8[_e]=this)[_f]=_8;
+}
+},remove:function(_10){
+this._remove(_10,"before");
+this._remove(_10,"around");
+this._remove(_10,"afterReturning");
+this._remove(_10,"afterThrowing");
+--this.counter;
+},_remove:function(_11,_12){
+var _13="next_"+_12,_14="prev_"+_12;
+if(_11[_13]){
+_11[_13][_14]=_11[_14];
+_11[_14][_13]=_11[_13];
+}
+},isEmpty:function(){
+return !this.counter;
+}});
+var _15=function(){
+return function(){
+var _16=arguments.callee,_17=_16.advices,ret,i,a,e,t;
+if(_3){
+_2.push(_3);
+}
+_3={instance:this,joinPoint:_16,depth:_2.length,around:_17.prev_around,dynAdvices:[],dynIndex:0};
+try{
+for(i=_17.prev_before;i!=_17;i=i.prev_before){
+if(i.dynamic){
+_3.dynAdvices.push(a=new i.advice(_3));
+if(t=a.before){
+t.apply(a,arguments);
+}
+}else{
+t=i.advice;
+t.before.apply(t,arguments);
+}
+}
+try{
+ret=(_17.prev_around==_17?_16.target:_1.proceed).apply(this,arguments);
+}
+catch(e){
+_3.dynIndex=_3.dynAdvices.length;
+for(i=_17.next_afterThrowing;i!=_17;i=i.next_afterThrowing){
+a=i.dynamic?_3.dynAdvices[--_3.dynIndex]:i.advice;
+if(t=a.afterThrowing){
+t.call(a,e);
+}
+if(t=a.after){
+t.call(a);
+}
+}
+throw e;
+}
+_3.dynIndex=_3.dynAdvices.length;
+for(i=_17.next_afterReturning;i!=_17;i=i.next_afterReturning){
+a=i.dynamic?_3.dynAdvices[--_3.dynIndex]:i.advice;
+if(t=a.afterReturning){
+t.call(a,ret);
+}
+if(t=a.after){
+t.call(a);
+}
+}
+var ls=_16._listeners;
+for(i in ls){
+if(!(i in ap)){
+ls[i].apply(this,arguments);
+}
+}
+}
+finally{
+for(i=0;i<_3.dynAdvices.length;++i){
+a=_3.dynAdvices[i];
+if(a.destroy){
+a.destroy();
+}
+}
+_3=_2.length?_2.pop():null;
+}
+return ret;
+};
+};
+_1.advise=function(obj,_18,_19){
+if(typeof obj!="object"){
+obj=obj.prototype;
+}
+var _1a=[];
+if(!(_18 instanceof Array)){
+_18=[_18];
+}
+for(var j=0;j<_18.length;++j){
+var t=_18[j];
+if(t instanceof RegExp){
+for(var i in obj){
+if(d.isFunction(obj[i])&&t.test(i)){
+_1a.push(i);
+}
+}
+}else{
+if(d.isFunction(obj[t])){
+_1a.push(t);
+}
+}
+}
+if(!d.isArray(_19)){
+_19=[_19];
+}
+return _1.adviseRaw(obj,_1a,_19);
+};
+_1.adviseRaw=function(obj,_1b,_1c){
+if(!_1b.length||!_1c.length){
+return null;
+}
+var m={},al=_1c.length;
+for(var i=_1b.length-1;i>=0;--i){
+var _1d=_1b[i],o=obj[_1d],ao=new Array(al),t=o.advices;
+if(!t){
+var x=obj[_1d]=_15();
+x.target=o.target||o;
+x.targetName=_1d;
+x._listeners=o._listeners||[];
+x.advices=new _4;
+t=x.advices;
+}
+for(var j=0;j<al;++j){
+ao[j]=t.add(_1c[j]);
+}
+m[_1d]=ao;
+}
+return [obj,m];
+};
+_1.unadvise=function(_1e){
+if(!_1e){
+return;
+}
+var obj=_1e[0],_1f=_1e[1];
+for(var _20 in _1f){
+var o=obj[_20],t=o.advices,ao=_1f[_20];
+for(var i=ao.length-1;i>=0;--i){
+t.remove(ao[i]);
+}
+if(t.isEmpty()){
+var _21=true,ls=o._listeners;
+if(ls.length){
+for(i in ls){
+if(!(i in ap)){
+_21=false;
+break;
+}
+}
+}
+if(_21){
+obj[_20]=o.target;
+}else{
+var x=obj[_20]=d._listener.getDispatcher();
+x.target=o.target;
+x._listeners=ls;
+}
+}
+}
+};
+_1.getContext=function(){
+return _3;
+};
+_1.getContextStack=function(){
+return _2;
+};
+_1.proceed=function(){
+var _22=_3.joinPoint,_23=_22.advices;
+for(var c=_3.around;c!=_23;c=_3.around){
+_3.around=c.prev_around;
+if(c.dynamic){
+var a=_3.dynAdvices[_3.dynIndex++],t=a.around;
+if(t){
+return t.apply(a,arguments);
+}
+}else{
+return c.advice.around.apply(c.advice,arguments);
+}
+}
+return _22.target.apply(_3.instance,arguments);
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/utils.js
===================================================================
--- trunk/web/dojo/dojox/lang/utils.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/utils.js	(revision 9)
@@ -0,0 +1,94 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.utils"]){
+dojo._hasResource["dojox.lang.utils"]=true;
+dojo.provide("dojox.lang.utils");
+(function(){
+var _1={},du=dojox.lang.utils,_2=Object.prototype.toString;
+var _3=function(o){
+if(o){
+switch(_2.call(o)){
+case "[object Array]":
+return o.slice(0);
+case "[object Object]":
+return dojo.delegate(o);
+}
+}
+return o;
+};
+dojo.mixin(du,{coerceType:function(_4,_5){
+switch(typeof _4){
+case "number":
+return Number(eval("("+_5+")"));
+case "string":
+return String(_5);
+case "boolean":
+return Boolean(eval("("+_5+")"));
+}
+return eval("("+_5+")");
+},updateWithObject:function(_6,_7,_8){
+if(!_7){
+return _6;
+}
+for(var x in _6){
+if(x in _7&&!(x in _1)){
+var t=_6[x];
+if(t&&typeof t=="object"){
+du.updateWithObject(t,_7[x],_8);
+}else{
+_6[x]=_8?du.coerceType(t,_7[x]):_3(_7[x]);
+}
+}
+}
+return _6;
+},updateWithPattern:function(_9,_a,_b,_c){
+if(!_a||!_b){
+return _9;
+}
+for(var x in _b){
+if(x in _a&&!(x in _1)){
+_9[x]=_c?du.coerceType(_b[x],_a[x]):_3(_a[x]);
+}
+}
+return _9;
+},merge:function(_d,_e){
+if(_e){
+var _f=_2.call(_d),_10=_2.call(_e),t,i,l,m;
+switch(_10){
+case "[object Array]":
+if(_10==_f){
+t=new Array(Math.max(_d.length,_e.length));
+for(i=0,l=t.length;i<l;++i){
+t[i]=du.merge(_d[i],_e[i]);
+}
+return t;
+}
+return _e.slice(0);
+case "[object Object]":
+if(_10==_f&&_d){
+t=dojo.delegate(_d);
+for(i in _e){
+if(i in _d){
+l=_d[i];
+m=_e[i];
+if(m!==l){
+t[i]=du.merge(l,m);
+}
+}else{
+t[i]=dojo.clone(_e[i]);
+}
+}
+return t;
+}
+return dojo.clone(_e);
+}
+}
+return _e;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/README
===================================================================
--- trunk/web/dojo/dojox/lang/README	(revision 0)
+++ trunk/web/dojo/dojox/lang/README	(revision 9)
@@ -0,0 +1,71 @@
+-------------------------------------------------------------------------------
+dojox.lang
+-------------------------------------------------------------------------------
+Version 0.991
+Release date: 07/30/2007
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Eugene Lazutkin (eugene.lazutkin@gmail.com)
+	Kris Zyp (kris@sitepen.com)
+-------------------------------------------------------------------------------
+Project description
+
+dojox.lang.functional - Provides lambda functions, and common functional
+operations.
+
+dojox.lang.aspect - Provides a framework for aspect-oriented programming.
+
+dojox.lang.oo - Provides mixers to support traits and mixins for object-oriented
+programming.
+
+dojox.lang.async - Provides helpers for event-driven programming.
+
+dojox.lang.observable - Provides construction of objects that such that 
+property access and modification can be controlled, i.e. provides a form of
+getters/setters.
+
+dojox.lang.typed - Provides type checking for JavaScript classes, enforcing 
+types on properties and method parameters using JSON Schema definitions.
+
+dojox.lang.docs - Provides schemas on Dojo's classes from the API 
+documentation. This can used for runtime access to class metadata information
+such as descriptions and type information. This can be used in conjunction with
+dojox.lang.typed to enforce typing on Dojo's classes using the API information.
+
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+None.
+-------------------------------------------------------------------------------
+Documentation
+
+For now:
+
+dojox.lang.functional:
+http://lazutkin.com/blog/2008/jan/12/functional-fun-javascript-dojo/
+http://lazutkin.com/blog/2008/jun/30/using-recursion-combinators-javascript/
+
+dojox.lang.aspect:
+http://lazutkin.com/blog/2008/may/18/aop-aspect-javascript-dojo/
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojo/dojox/trunk/lang/*
+
+Install into the following directory structure:
+/dojox/lang/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
+Additional Notes
+
+See tests and the source for more details.
+
+LICENSE in this directory contains the MIT license by Oliver Steele for
+dojox.lang.functional.lambda, which was derived from his original implementation.
Index: trunk/web/dojo/dojox/lang/async/timeout.js
===================================================================
--- trunk/web/dojo/dojox/lang/async/timeout.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/async/timeout.js	(revision 9)
@@ -0,0 +1,44 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.async.timeout"]){
+dojo._hasResource["dojox.lang.async.timeout"]=true;
+dojo.provide("dojox.lang.async.timeout");
+(function(){
+var d=dojo,_1=dojox.lang.async.timeout;
+_1.from=function(ms){
+return function(){
+var h,_2=function(){
+if(h){
+clearTimeout(h);
+h=null;
+}
+},x=new d.Deferred(_2);
+h=setTimeout(function(){
+_2();
+x.callback(ms);
+},ms);
+return x;
+};
+};
+_1.failOn=function(ms){
+return function(){
+var h,_3=function(){
+if(h){
+clearTimeout(h);
+h=null;
+}
+},x=new d.Deferred(_3);
+h=setTimeout(function(){
+_3();
+x.errback(ms);
+},ms);
+return x;
+};
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/async/topic.js
===================================================================
--- trunk/web/dojo/dojox/lang/async/topic.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/async/topic.js	(revision 9)
@@ -0,0 +1,44 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.async.topic"]){
+dojo._hasResource["dojox.lang.async.topic"]=true;
+dojo.provide("dojox.lang.async.topic");
+(function(){
+var d=dojo,_1=dojox.lang.async.topic;
+_1.from=function(_2){
+return function(){
+var h,_3=function(){
+if(h){
+d.unsubscribe(h);
+h=null;
+}
+},x=new d.Deferred(_3);
+h=d.subscribe(_2,function(){
+_3();
+x.callback(arguments);
+});
+return x;
+};
+};
+_1.failOn=function(_4){
+return function(){
+var h,_5=function(){
+if(h){
+d.unsubscribe(h);
+h=null;
+}
+},x=new d.Deferred(_5);
+h=d.subscribe(_4,function(_6){
+_5();
+x.errback(new Error(arguments));
+});
+return x;
+};
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/async/event.js
===================================================================
--- trunk/web/dojo/dojox/lang/async/event.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/async/event.js	(revision 9)
@@ -0,0 +1,44 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.async.event"]){
+dojo._hasResource["dojox.lang.async.event"]=true;
+dojo.provide("dojox.lang.async.event");
+(function(){
+var d=dojo,_1=dojox.lang.async.event;
+_1.from=function(_2,_3){
+return function(){
+var h,_4=function(){
+if(h){
+d.disconnect(h);
+h=null;
+}
+},x=new d.Deferred(_4);
+h=d.connect(_2,_3,function(_5){
+_4();
+x.callback(_5);
+});
+return x;
+};
+};
+_1.failOn=function(_6,_7){
+return function(){
+var h,_8=function(){
+if(h){
+d.disconnect(h);
+h=null;
+}
+},x=new d.Deferred(_8);
+h=d.connect(_6,_7,function(_9){
+_8();
+x.errback(new Error(_9));
+});
+return x;
+};
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional"]){
+dojo._hasResource["dojox.lang.functional"]=true;
+dojo.provide("dojox.lang.functional");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.array");
+dojo.require("dojox.lang.functional.object");
+}
Index: trunk/web/dojo/dojox/lang/oo/general.js
===================================================================
--- trunk/web/dojo/dojox/lang/oo/general.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/oo/general.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.general"]){
+dojo._hasResource["dojox.lang.oo.general"]=true;
+dojo.provide("dojox.lang.oo.general");
+dojo.require("dojox.lang.oo.Decorator");
+(function(){
+var oo=dojox.lang.oo,md=oo.makeDecorator,_1=oo.general,_2=dojo.isFunction;
+_1.augment=md(function(_3,_4,_5){
+return typeof _5=="undefined"?_4:_5;
+});
+_1.override=md(function(_6,_7,_8){
+return typeof _8!="undefined"?_7:_8;
+});
+_1.shuffle=md(function(_9,_a,_b){
+return _2(_b)?function(){
+return _b.apply(this,_a.apply(this,arguments));
+}:_b;
+});
+_1.wrap=md(function(_c,_d,_e){
+return function(){
+return _d.call(this,_e,arguments);
+};
+});
+_1.tap=md(function(_f,_10,_11){
+return function(){
+_10.apply(this,arguments);
+return this;
+};
+});
+_1.before=md(function(_12,_13,_14){
+return _2(_14)?function(){
+_13.apply(this,arguments);
+return _14.apply(this,arguments);
+}:_13;
+});
+_1.after=md(function(_15,_16,_17){
+return _2(_17)?function(){
+_17.apply(this,arguments);
+return _16.apply(this,arguments);
+}:_16;
+});
+})();
+}
Index: trunk/web/dojo/dojox/lang/oo/aop.js
===================================================================
--- trunk/web/dojo/dojox/lang/oo/aop.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/oo/aop.js	(revision 9)
@@ -0,0 +1,54 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.aop"]){
+dojo._hasResource["dojox.lang.oo.aop"]=true;
+dojo.provide("dojox.lang.oo.aop");
+dojo.require("dojox.lang.oo.Decorator");
+dojo.require("dojox.lang.oo.general");
+(function(){
+var oo=dojox.lang.oo,md=oo.makeDecorator,_1=oo.general,_2=oo.aop,_3=dojo.isFunction;
+_2.before=_1.before;
+_2.around=_1.wrap;
+_2.afterReturning=md(function(_4,_5,_6){
+return _3(_6)?function(){
+var _7=_6.apply(this,arguments);
+_5.call(this,_7);
+return _7;
+}:function(){
+_5.call(this);
+};
+});
+_2.afterThrowing=md(function(_8,_9,_a){
+return _3(_a)?function(){
+var _b;
+try{
+_b=_a.apply(this,arguments);
+}
+catch(e){
+_9.call(this,e);
+throw e;
+}
+return _b;
+}:_a;
+});
+_2.after=md(function(_c,_d,_e){
+return _3(_e)?function(){
+var _f;
+try{
+_f=_e.apply(this,arguments);
+}
+finally{
+_d.call(this);
+}
+return _f;
+}:function(){
+_d.call(this);
+};
+});
+})();
+}
Index: trunk/web/dojo/dojox/lang/oo/Decorator.js
===================================================================
--- trunk/web/dojo/dojox/lang/oo/Decorator.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/oo/Decorator.js	(revision 9)
@@ -0,0 +1,24 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.Decorator"]){
+dojo._hasResource["dojox.lang.oo.Decorator"]=true;
+dojo.provide("dojox.lang.oo.Decorator");
+(function(){
+var oo=dojox.lang.oo,D=oo.Decorator=function(_1,_2){
+this.value=_1;
+this.decorator=typeof _2=="object"?function(){
+return _2.exec.apply(_2,arguments);
+}:_2;
+};
+oo.makeDecorator=function(_3){
+return function(_4){
+return new D(_4,_3);
+};
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/oo/mixin.js
===================================================================
--- trunk/web/dojo/dojox/lang/oo/mixin.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/oo/mixin.js	(revision 9)
@@ -0,0 +1,83 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.mixin"]){
+dojo._hasResource["dojox.lang.oo.mixin"]=true;
+dojo.provide("dojox.lang.oo.mixin");
+dojo.experimental("dojox.lang.oo.mixin");
+dojo.require("dojox.lang.oo.Filter");
+dojo.require("dojox.lang.oo.Decorator");
+(function(){
+var oo=dojox.lang.oo,_1=oo.Filter,_2=oo.Decorator,_3={},_4=function(_5){
+return _5;
+},_6=function(_7,_8,_9){
+return _8;
+},_a=function(_b,_c,_d,_e){
+_b[_c]=_d;
+},_f={},_10=dojo._extraNames,_11=_10.length,_12=oo.applyDecorator=function(_13,_14,_15,_16){
+if(_15 instanceof _2){
+var d=_15.decorator;
+_15=_12(_13,_14,_15.value,_16);
+return d(_14,_15,_16);
+}
+return _13(_14,_15,_16);
+};
+oo.__mixin=function(_17,_18,_19,_1a,_1b){
+var _1c,_1d,_1e,_1f,_20,i;
+for(_1c in _18){
+_1e=_18[_1c];
+if(!(_1c in _3)||_3[_1c]!==_1e){
+_1d=_1a(_1c,_17,_18,_1e);
+if(_1d&&(!(_1d in _17)||!(_1d in _3)||_3[_1d]!==_1e)){
+_20=_17[_1d];
+_1f=_12(_19,_1d,_1e,_20);
+if(_20!==_1f){
+_1b(_17,_1d,_1f,_20);
+}
+}
+}
+}
+if(_11){
+for(i=0;i<_11;++i){
+_1c=_10[i];
+_1e=_18[_1c];
+if(!(_1c in _3)||_3[_1c]!==_1e){
+_1d=_1a(_1c,_17,_18,_1e);
+if(_1d&&(!(_1d in _17)||!(_1d in _3)||_3[_1d]!==_1e)){
+_20=_17[_1d];
+_1f=_12(_19,_1d,_1e,_20);
+if(_20!==_1f){
+_1b(_17,_1d,_1f,_20);
+}
+}
+}
+}
+}
+return _17;
+};
+oo.mixin=function(_21,_22){
+var _23,_24,i=1,l=arguments.length;
+for(;i<l;++i){
+_22=arguments[i];
+if(_22 instanceof _1){
+_24=_22.filter;
+_22=_22.bag;
+}else{
+_24=_4;
+}
+if(_22 instanceof _2){
+_23=_22.decorator;
+_22=_22.value;
+}else{
+_23=_6;
+}
+oo.__mixin(_21,_22,_23,_24,_a);
+}
+return _21;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/oo/Filter.js
===================================================================
--- trunk/web/dojo/dojox/lang/oo/Filter.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/oo/Filter.js	(revision 9)
@@ -0,0 +1,27 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.Filter"]){
+dojo._hasResource["dojox.lang.oo.Filter"]=true;
+dojo.provide("dojox.lang.oo.Filter");
+(function(){
+var oo=dojox.lang.oo,F=oo.Filter=function(_1,_2){
+this.bag=_1;
+this.filter=typeof _2=="object"?function(){
+return _2.exec.apply(_2,arguments);
+}:_2;
+},_3=function(_4){
+this.map=_4;
+};
+_3.prototype.exec=function(_5){
+return this.map.hasOwnProperty(_5)?this.map[_5]:_5;
+};
+oo.filter=function(_6,_7){
+return new F(_6,new _3(_7));
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/oo/rearrange.js
===================================================================
--- trunk/web/dojo/dojox/lang/oo/rearrange.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/oo/rearrange.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.oo.rearrange"]){
+dojo._hasResource["dojox.lang.oo.rearrange"]=true;
+dojo.provide("dojox.lang.oo.rearrange");
+(function(){
+var _1=dojo._extraNames,_2=_1.length,_3=Object.prototype.toString,_4={};
+dojox.lang.oo.rearrange=function(_5,_6){
+var _7,_8,_9,i,t;
+for(_7 in _6){
+_8=_6[_7];
+if(!_8||_3.call(_8)=="[object String]"){
+_9=_5[_7];
+if(!(_7 in _4)||_4[_7]!==_9){
+if(!(delete _5[_7])){
+_5[_7]=undefined;
+}
+if(_8){
+_5[_8]=_9;
+}
+}
+}
+}
+if(_2){
+for(i=0;i<_2;++i){
+_7=_1[i];
+_8=_6[_7];
+if(!_8||_3.call(_8)=="[object String]"){
+_9=_5[_7];
+if(!(_7 in _4)||_4[_7]!==_9){
+if(!(delete _5[_7])){
+_5[_7]=undefined;
+}
+if(_8){
+_5[_8]=_9;
+}
+}
+}
+}
+}
+return _5;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/aspect/memoizer.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect/memoizer.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect/memoizer.js	(revision 9)
@@ -0,0 +1,47 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.memoizer"]){
+dojo._hasResource["dojox.lang.aspect.memoizer"]=true;
+dojo.provide("dojox.lang.aspect.memoizer");
+(function(){
+var _1=dojox.lang.aspect;
+var _2={around:function(_3){
+var _4=_1.getContext(),_5=_4.joinPoint,_6=_4.instance,t,u,_7;
+if((t=_6.__memoizerCache)&&(t=t[_5.targetName])&&(_3 in t)){
+return t[_3];
+}
+var _7=_1.proceed.apply(null,arguments);
+if(!(t=_6.__memoizerCache)){
+t=_6.__memoizerCache={};
+}
+if(!(u=t[_5.targetName])){
+u=t[_5.targetName]={};
+}
+return u[_3]=_7;
+}};
+var _8=function(_9){
+return {around:function(){
+var _a=_1.getContext(),_b=_a.joinPoint,_c=_a.instance,t,u,_d,_e=_9.apply(_c,arguments);
+if((t=_c.__memoizerCache)&&(t=t[_b.targetName])&&(_e in t)){
+return t[_e];
+}
+var _d=_1.proceed.apply(null,arguments);
+if(!(t=_c.__memoizerCache)){
+t=_c.__memoizerCache={};
+}
+if(!(u=t[_b.targetName])){
+u=t[_b.targetName]={};
+}
+return u[_e]=_d;
+}};
+};
+_1.memoizer=function(_f){
+return arguments.length==0?_2:_8(_f);
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/aspect/cflow.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect/cflow.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect/cflow.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.cflow"]){
+dojo._hasResource["dojox.lang.aspect.cflow"]=true;
+dojo.provide("dojox.lang.aspect.cflow");
+(function(){
+var _1=dojox.lang.aspect;
+_1.cflow=function(_2,_3){
+if(arguments.length>1&&!(_3 instanceof Array)){
+_3=[_3];
+}
+var _4=_1.getContextStack();
+for(var i=_4.length-1;i>=0;--i){
+var c=_4[i];
+if(_2&&c.instance!=_2){
+continue;
+}
+if(!_3){
+return true;
+}
+var n=c.joinPoint.targetName;
+for(var j=_3.length-1;j>=0;--j){
+var m=_3[j];
+if(m instanceof RegExp){
+if(m.test(n)){
+return true;
+}
+}else{
+if(n==m){
+return true;
+}
+}
+}
+}
+return false;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/aspect/memoizerGuard.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect/memoizerGuard.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect/memoizerGuard.js	(revision 9)
@@ -0,0 +1,35 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.memoizerGuard"]){
+dojo._hasResource["dojox.lang.aspect.memoizerGuard"]=true;
+dojo.provide("dojox.lang.aspect.memoizerGuard");
+(function(){
+var _1=dojox.lang.aspect,_2=function(_3){
+var _4=_1.getContext().instance,t;
+if(!(t=_4.__memoizerCache)){
+return;
+}
+if(arguments.length==0){
+delete _4.__memoizerCache;
+}else{
+if(dojo.isArray(_3)){
+dojo.forEach(_3,function(m){
+delete t[m];
+});
+}else{
+delete t[_3];
+}
+}
+};
+_1.memoizerGuard=function(_5){
+return {after:function(){
+_2(_5);
+}};
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/aspect/counter.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect/counter.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect/counter.js	(revision 9)
@@ -0,0 +1,27 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.counter"]){
+dojo._hasResource["dojox.lang.aspect.counter"]=true;
+dojo.provide("dojox.lang.aspect.counter");
+(function(){
+var _1=dojox.lang.aspect;
+var _2=function(){
+this.reset();
+};
+dojo.extend(_2,{before:function(){
+++this.calls;
+},afterThrowing:function(){
+++this.errors;
+},reset:function(){
+this.calls=this.errors=0;
+}});
+_1.counter=function(){
+return new _2;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/aspect/timer.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect/timer.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect/timer.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.timer"]){
+dojo._hasResource["dojox.lang.aspect.timer"]=true;
+dojo.provide("dojox.lang.aspect.timer");
+(function(){
+var _1=dojox.lang.aspect,_2=0;
+var _3=function(_4){
+this.name=_4||("DojoAopTimer #"+ ++_2);
+this.inCall=0;
+};
+dojo.extend(_3,{before:function(){
+if(!(this.inCall++)){
+}
+},after:function(){
+if(!--this.inCall){
+}
+}});
+_1.timer=function(_5){
+return new _3(_5);
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/aspect/tracer.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect/tracer.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect/tracer.js	(revision 9)
@@ -0,0 +1,34 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.tracer"]){
+dojo._hasResource["dojox.lang.aspect.tracer"]=true;
+dojo.provide("dojox.lang.aspect.tracer");
+(function(){
+var _1=dojox.lang.aspect;
+var _2=function(_3){
+this.method=_3?"group":"log";
+if(_3){
+this.after=this._after;
+}
+};
+dojo.extend(_2,{before:function(){
+var _4=_1.getContext(),_5=_4.joinPoint,_6=Array.prototype.join.call(arguments,", ");
+console[this.method](_4.instance,"=>",_5.targetName+"("+_6+")");
+},afterReturning:function(_7){
+var _8=_1.getContext().joinPoint;
+if(typeof _7!="undefined"){
+}else{
+}
+},afterThrowing:function(_9){
+},_after:function(_a){
+}});
+_1.tracer=function(_b){
+return new _2(_b);
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/aspect/profiler.js
===================================================================
--- trunk/web/dojo/dojox/lang/aspect/profiler.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/aspect/profiler.js	(revision 9)
@@ -0,0 +1,29 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.aspect.profiler"]){
+dojo._hasResource["dojox.lang.aspect.profiler"]=true;
+dojo.provide("dojox.lang.aspect.profiler");
+(function(){
+var _1=dojox.lang.aspect,_2=0;
+var _3=function(_4){
+this.args=_4?[_4]:[];
+this.inCall=0;
+};
+dojo.extend(_3,{before:function(){
+if(!(this.inCall++)){
+console.profile.apply(console,this.args);
+}
+},after:function(){
+if(!--this.inCall){
+}
+}});
+_1.profiler=function(_5){
+return new _3(_5);
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/observable.js
===================================================================
--- trunk/web/dojo/dojox/lang/observable.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/observable.js	(revision 9)
@@ -0,0 +1,150 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.observable"]){
+dojo._hasResource["dojox.lang.observable"]=true;
+dojo.provide("dojox.lang.observable");
+dojo.experimental("dojox.lang.observable");
+dojox.lang.observable=function(_1,_2,_3,_4){
+return dojox.lang.makeObservable(_2,_3,_4)(_1);
+};
+dojox.lang.makeObservable=function(_5,_6,_7,_8){
+_8=_8||{};
+_7=_7||function(_9,_a,_b,_c){
+return _a[_b].apply(_9,_c);
+};
+function _d(_e,_f,i){
+return function(){
+return _7(_e,_f,i,arguments);
+};
+};
+if(dojox.lang.lettableWin){
+var _10=dojox.lang.makeObservable;
+_10.inc=(_10.inc||0)+1;
+var _11="gettable_"+_10.inc;
+dojox.lang.lettableWin[_11]=_5;
+var _12="settable_"+_10.inc;
+dojox.lang.lettableWin[_12]=_6;
+var _13={};
+return function(_14){
+if(_14.__observable){
+return _14.__observable;
+}
+if(_14.data__){
+throw new Error("Can wrap an object that is already wrapped");
+}
+var _15=[],i,l;
+for(i in _8){
+_15.push(i);
+}
+var _16={type:1,event:1};
+for(i in _14){
+if(i.match(/^[a-zA-Z][\w\$_]*$/)&&!(i in _8)&&!(i in _16)){
+_15.push(i);
+}
+}
+var _17=_15.join(",");
+var _18,_19=_13[_17];
+if(!_19){
+var _1a="dj_lettable_"+(_10.inc++);
+var _1b=_1a+"_dj_getter";
+var _1c=["Class "+_1a,"\tPublic data__"];
+for(i=0,l=_15.length;i<l;i++){
+_18=_15[i];
+var _1d=typeof _14[_18];
+if(_1d=="function"||_8[_18]){
+_1c.push("  Public "+_18);
+}else{
+if(_1d!="object"){
+_1c.push("\tPublic Property Let "+_18+"(val)","\t\tCall "+_12+"(me.data__,\""+_18+"\",val)","\tEnd Property","\tPublic Property Get "+_18,"\t\t"+_18+" = "+_11+"(me.data__,\""+_18+"\")","\tEnd Property");
+}
+}
+}
+_1c.push("End Class");
+_1c.push("Function "+_1b+"()","\tDim tmp","\tSet tmp = New "+_1a,"\tSet "+_1b+" = tmp","End Function");
+dojox.lang.lettableWin.vbEval(_1c.join("\n"));
+_13[_17]=_19=function(){
+return dojox.lang.lettableWin.construct(_1b);
+};
+}
+var _1e=_19();
+_1e.data__=_14;
+try{
+_14.__observable=_1e;
+}
+catch(e){
+}
+for(i=0,l=_15.length;i<l;i++){
+_18=_15[i];
+try{
+var val=_14[_18];
+}
+catch(e){
+}
+if(typeof val=="function"||_8[_18]){
+_1e[_18]=_d(_1e,_14,_18);
+}
+}
+return _1e;
+};
+}else{
+return function(_1f){
+if(_1f.__observable){
+return _1f.__observable;
+}
+var _20=_1f instanceof Array?[]:{};
+_20.data__=_1f;
+for(var i in _1f){
+if(i.charAt(0)!="_"){
+if(typeof _1f[i]=="function"){
+_20[i]=_d(_20,_1f,i);
+}else{
+if(typeof _1f[i]!="object"){
+(function(i){
+_20.__defineGetter__(i,function(){
+return _5(_1f,i);
+});
+_20.__defineSetter__(i,function(_21){
+return _6(_1f,i,_21);
+});
+})(i);
+}
+}
+}
+}
+for(i in _8){
+_20[i]=_d(_20,_1f,i);
+}
+_1f.__observable=_20;
+return _20;
+};
+}
+};
+if(!{}.__defineGetter__){
+if(dojo.isIE){
+var frame;
+if(document.body){
+frame=document.createElement("iframe");
+document.body.appendChild(frame);
+}else{
+document.write("<iframe id='dj_vb_eval_frame'></iframe>");
+frame=document.getElementById("dj_vb_eval_frame");
+}
+frame.style.display="none";
+var doc=frame.contentWindow.document;
+dojox.lang.lettableWin=frame.contentWindow;
+doc.write("<html><head><script language=\"VBScript\" type=\"text/VBScript\">"+"Function vb_global_eval(code)"+"ExecuteGlobal(code)"+"End Function"+"</script>"+"<script type=\"text/javascript\">"+"function vbEval(code){ \n"+"return vb_global_eval(code);"+"}"+"function construct(name){ \n"+"return window[name]();"+"}"+"</script>"+"</head><body>vb-eval</body></html>");
+doc.close();
+}else{
+throw new Error("This browser does not support getters and setters");
+}
+}
+dojox.lang.ReadOnlyProxy=dojox.lang.makeObservable(function(obj,i){
+return obj[i];
+},function(obj,i,_22){
+});
+}
Index: trunk/web/dojo/dojox/lang/typed.js
===================================================================
--- trunk/web/dojo/dojox/lang/typed.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/typed.js	(revision 9)
@@ -0,0 +1,146 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.typed"]){
+dojo._hasResource["dojox.lang.typed"]=true;
+(function(){
+var _1,_2=typeof dojo!="undefined";
+if(_2){
+dojo.provide("dojox.lang.typed");
+dojo.require("dojox.json.schema");
+_1=dojox.json.schema;
+}else{
+if(typeof JSONSchema=="undefined"){
+throw new Error("Dojo or JSON Schema library must be present");
+}
+_1=JSONSchema;
+}
+function _3(_4,_5){
+var _6=function(){
+var _7=_5();
+if(_7&&_7.parameters){
+var _8=_7.parameters;
+for(var j=0;j<_8.length;j++){
+arguments[j]=_9(arguments[j],_8[j],j.toString());
+}
+if(_7.additionalParameters){
+for(;j<arguments.length;j++){
+arguments[j]=_9(arguments[j],_7.additionalParameters,j.toString());
+}
+}
+}
+var _a=_4.apply(this,arguments);
+if(_7.returns){
+_9(_a,_7.returns);
+}
+return _a;
+};
+_6.__typedFunction__=true;
+for(var i in _4){
+_6[i]=_4[i];
+}
+return _6;
+};
+function _b(_c){
+return function(){
+return _c;
+};
+};
+function _9(_d,_e,_f){
+if(typeof _d=="function"&&_e&&!_d.__typedFunction__){
+_d=_3(_d,_b(_e));
+}
+var _10=_1._validate(_d,_e,_f);
+if(!_10.valid){
+var _11="";
+var _12=_10.errors;
+for(var i=0;i<_12.length;i++){
+_11+=_12[i].property+" "+_12[i].message+"\n";
+}
+throw new TypeError(_11);
+}
+return _d;
+};
+var _13=_1.__defineGetter__;
+var _14=function(_15){
+if(_15.__typedClass__){
+return _15;
+}
+var _16=function(){
+var i,_17,_18=_16.properties;
+var _19=_16.methods;
+_15.apply(this,arguments);
+this.__props__={};
+for(i in _19){
+_17=this[i];
+if(_17){
+if(!_17.__typedFunction__){
+var _1a=this;
+while(!_1a.hasOwnProperty(i)&&_1a.__proto__){
+_1a=_1a.__proto__;
+}
+(function(i){
+_1a[i]=_3(_17,function(){
+return _19[i];
+});
+})(i);
+}
+}else{
+(function(i){
+this[i]=function(){
+throw new TypeError("The method "+i+" is defined but not implemented");
+};
+})(i);
+}
+}
+if(_13){
+var _1b=this;
+for(i in _18){
+_17=this[i];
+if(this.hasOwnProperty(i)){
+this.__props__[i]=_17;
+}
+(function(i){
+delete _1b[i];
+_1b.__defineGetter__(i,function(){
+return i in this.__props__?this.__props__[i]:this.__proto__[i];
+});
+_1b.__defineSetter__(i,function(_1c){
+_9(_1c,_18[i],i);
+return this.__props__[i]=_1c;
+});
+})(i);
+}
+}
+_9(this,_16);
+};
+_16.prototype=_15.prototype;
+for(var i in _15){
+_16[i]=_15[i];
+}
+if(_15.prototype.declaredClass&&_2){
+dojo.setObject(_15.prototype.declaredClass,_16);
+}
+_16.__typedClass__=true;
+return _16;
+};
+if(_2){
+dojox.lang.typed=_14;
+if(dojo.config.typeCheckAllClasses){
+var _1d=dojo.declare;
+dojo.declare=function(_1e){
+var _1f=_1d.apply(this,arguments);
+_1f=_14(_1f);
+return _1f;
+};
+dojo.mixin(dojo.declare,_1d);
+}
+}else{
+typed=_14;
+}
+})();
+}
Index: trunk/web/dojo/dojox/lang/LICENSE
===================================================================
--- trunk/web/dojo/dojox/lang/LICENSE	(revision 0)
+++ trunk/web/dojo/dojox/lang/LICENSE	(revision 9)
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2007 Oliver Steele
+
+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/web/dojo/dojox/lang/functional/curry.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/curry.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/curry.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.curry"]){
+dojo._hasResource["dojox.lang.functional.curry"]=true;
+dojo.provide("dojox.lang.functional.curry");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var df=dojox.lang.functional,ap=Array.prototype;
+var _1=function(_2){
+return function(){
+var _3=_2.args.concat(ap.slice.call(arguments,0));
+if(arguments.length+_2.args.length<_2.arity){
+return _1({func:_2.func,arity:_2.arity,args:_3});
+}
+return _2.func.apply(this,_3);
+};
+};
+dojo.mixin(df,{curry:function(f,_4){
+f=df.lambda(f);
+_4=typeof _4=="number"?_4:f.length;
+return _1({func:f,arity:_4,args:[]});
+},arg:{},partial:function(f){
+var a=arguments,l=a.length,_5=new Array(l-1),p=[],i=1,t;
+f=df.lambda(f);
+for(;i<l;++i){
+t=a[i];
+_5[i-1]=t;
+if(t===df.arg){
+p.push(i-1);
+}
+}
+return function(){
+var t=ap.slice.call(_5,0),i=0,l=p.length;
+for(;i<l;++i){
+t[p[i]]=arguments[i];
+}
+return f.apply(this,t);
+};
+},mixer:function(f,_6){
+f=df.lambda(f);
+return function(){
+var t=new Array(_6.length),i=0,l=_6.length;
+for(;i<l;++i){
+t[i]=arguments[_6[i]];
+}
+return f.apply(this,t);
+};
+},flip:function(f){
+f=df.lambda(f);
+return function(){
+var a=arguments,l=a.length-1,t=new Array(l+1),i=0;
+for(;i<=l;++i){
+t[l-i]=a[i];
+}
+return f.apply(this,t);
+};
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/object.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/object.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/object.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.object"]){
+dojo._hasResource["dojox.lang.functional.object"]=true;
+dojo.provide("dojox.lang.functional.object");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{keys:function(_2){
+var t=[];
+for(var i in _2){
+if(!(i in _1)){
+t.push(i);
+}
+}
+return t;
+},values:function(_3){
+var t=[];
+for(var i in _3){
+if(!(i in _1)){
+t.push(_3[i]);
+}
+}
+return t;
+},filterIn:function(_4,f,o){
+o=o||d.global;
+f=df.lambda(f);
+var t={},v,i;
+for(i in _4){
+if(!(i in _1)){
+v=_4[i];
+if(f.call(o,v,i,_4)){
+t[i]=v;
+}
+}
+}
+return t;
+},forIn:function(_5,f,o){
+o=o||d.global;
+f=df.lambda(f);
+for(var i in _5){
+if(!(i in _1)){
+f.call(o,_5[i],i,_5);
+}
+}
+return o;
+},mapIn:function(_6,f,o){
+o=o||d.global;
+f=df.lambda(f);
+var t={},i;
+for(i in _6){
+if(!(i in _1)){
+t[i]=f.call(o,_6[i],i,_6);
+}
+}
+return t;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/sequence.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/sequence.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/sequence.js	(revision 9)
@@ -0,0 +1,32 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.sequence"]){
+dojo._hasResource["dojox.lang.functional.sequence"]=true;
+dojo.provide("dojox.lang.functional.sequence");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional;
+d.mixin(df,{repeat:function(n,f,z,o){
+o=o||d.global;
+f=df.lambda(f);
+var t=new Array(n),i=1;
+t[0]=z;
+for(;i<n;t[i]=z=f.call(o,z),++i){
+}
+return t;
+},until:function(pr,f,z,o){
+o=o||d.global;
+f=df.lambda(f);
+pr=df.lambda(pr);
+var t=[];
+for(;!pr.call(o,z);t.push(z),z=f.call(o,z)){
+}
+return t;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/linrec.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/linrec.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/linrec.js	(revision 9)
@@ -0,0 +1,62 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.linrec"]){
+dojo._hasResource["dojox.lang.functional.linrec"]=true;
+dojo.provide("dojox.lang.functional.linrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x",_3=["_r","_y.a"];
+df.linrec=function(_4,_5,_6,_7){
+var c,t,b,a,cs,ts,bs,as,_8={},_9={},_a=function(x){
+_8[x]=1;
+};
+if(typeof _4=="string"){
+cs=_1(_4,_2,_a);
+}else{
+c=df.lambda(_4);
+cs="_c.apply(this, _x)";
+_9["_c=_t.c"]=1;
+}
+if(typeof _5=="string"){
+ts=_1(_5,_2,_a);
+}else{
+t=df.lambda(_5);
+ts="_t.t.apply(this, _x)";
+}
+if(typeof _6=="string"){
+bs=_1(_6,_2,_a);
+}else{
+b=df.lambda(_6);
+bs="_b.apply(this, _x)";
+_9["_b=_t.b"]=1;
+}
+if(typeof _7=="string"){
+as=_1(_7,_3,_a);
+}else{
+a=df.lambda(_7);
+as="_a.call(this, _r, _y.a)";
+_9["_a=_t.a"]=1;
+}
+var _b=df.keys(_8),_c=df.keys(_9),f=new Function([],"var _x=arguments,_y,_r".concat(_b.length?","+_b.join(","):"",_c.length?",_t=_x.callee,"+_c.join(","):t?",_t=_x.callee":"",";for(;!",cs,";_x=",bs,"){_y={p:_y,a:_x}}_r=",ts,";for(;_y;_y=_y.p){_r=",as,"}return _r"));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/util.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/util.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/util.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.util"]){
+dojo._hasResource["dojox.lang.functional.util"]=true;
+dojo.provide("dojox.lang.functional.util");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var df=dojox.lang.functional;
+dojo.mixin(df,{inlineLambda:function(_1,_2,_3){
+var s=df.rawLambda(_1);
+if(_3){
+df.forEach(s.args,_3);
+}
+var ap=typeof _2=="string",n=ap?s.args.length:Math.min(s.args.length,_2.length),a=new Array(4*n+4),i,j=1;
+for(i=0;i<n;++i){
+a[j++]=s.args[i];
+a[j++]="=";
+a[j++]=ap?_2+"["+i+"]":_2[i];
+a[j++]=",";
+}
+a[0]="(";
+a[j++]="(";
+a[j++]=s.body;
+a[j]="))";
+return a.join("");
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/array.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/array.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/array.js	(revision 9)
@@ -0,0 +1,161 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.array"]){
+dojo._hasResource["dojox.lang.functional.array"]=true;
+dojo.provide("dojox.lang.functional.array");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{filter:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t=[],v,i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;++i){
+v=a[i];
+if(f.call(o,v,i,a)){
+t.push(v);
+}
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();){
+v=a.next();
+if(f.call(o,v,i++,a)){
+t.push(v);
+}
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+v=a[i];
+if(f.call(o,v,i,a)){
+t.push(v);
+}
+}
+}
+}
+}
+return t;
+},forEach:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;f.call(o,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();f.call(o,a.next(),i++,a)){
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+f.call(o,a[i],i,a);
+}
+}
+}
+}
+return o;
+},map:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t,n,i;
+if(d.isArray(a)){
+t=new Array(n=a.length);
+for(i=0;i<n;t[i]=f.call(o,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+t=[];
+for(i=0;a.hasNext();t.push(f.call(o,a.next(),i++,a))){
+}
+}else{
+t=[];
+for(i in a){
+if(!(i in _1)){
+t.push(f.call(o,a[i],i,a));
+}
+}
+}
+}
+return t;
+},every:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;++i){
+if(!f.call(o,a[i],i,a)){
+return false;
+}
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();){
+if(!f.call(o,a.next(),i++,a)){
+return false;
+}
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+if(!f.call(o,a[i],i,a)){
+return false;
+}
+}
+}
+}
+}
+return true;
+},some:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;++i){
+if(f.call(o,a[i],i,a)){
+return true;
+}
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();){
+if(f.call(o,a.next(),i++,a)){
+return true;
+}
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+if(f.call(o,a[i],i,a)){
+return true;
+}
+}
+}
+}
+}
+return false;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/reversed.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/reversed.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/reversed.js	(revision 9)
@@ -0,0 +1,72 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.reversed"]){
+dojo._hasResource["dojox.lang.functional.reversed"]=true;
+dojo.provide("dojox.lang.functional.reversed");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional;
+d.mixin(df,{filterRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t=[],v,i=a.length-1;
+for(;i>=0;--i){
+v=a[i];
+if(f.call(o,v,i,a)){
+t.push(v);
+}
+}
+return t;
+},forEachRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length-1;i>=0;f.call(o,a[i],i,a),--i){
+}
+},mapRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,t=new Array(n),i=n-1,j=0;
+for(;i>=0;t[j++]=f.call(o,a[i],i,a),--i){
+}
+return t;
+},everyRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length-1;i>=0;--i){
+if(!f.call(o,a[i],i,a)){
+return false;
+}
+}
+return true;
+},someRev:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length-1;i>=0;--i){
+if(f.call(o,a[i],i,a)){
+return true;
+}
+}
+return false;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/lambda.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/lambda.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/lambda.js	(revision 9)
@@ -0,0 +1,89 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.lambda"]){
+dojo._hasResource["dojox.lang.functional.lambda"]=true;
+dojo.provide("dojox.lang.functional.lambda");
+(function(){
+var df=dojox.lang.functional,_1={};
+var _2="ab".split(/a*/).length>1?String.prototype.split:function(_3){
+var r=this.split.call(this,_3),m=_3.exec(this);
+if(m&&m.index==0){
+r.unshift("");
+}
+return r;
+};
+var _4=function(s){
+var _5=[],_6=_2.call(s,/\s*->\s*/m);
+if(_6.length>1){
+while(_6.length){
+s=_6.pop();
+_5=_6.pop().split(/\s*,\s*|\s+/m);
+if(_6.length){
+_6.push("(function("+_5+"){return ("+s+")})");
+}
+}
+}else{
+if(s.match(/\b_\b/)){
+_5=["_"];
+}else{
+var l=s.match(/^\s*(?:[+*\/%&|\^\.=<>]|!=)/m),r=s.match(/[+\-*\/%&|\^\.=<>!]\s*$/m);
+if(l||r){
+if(l){
+_5.push("$1");
+s="$1"+s;
+}
+if(r){
+_5.push("$2");
+s=s+"$2";
+}
+}else{
+var _7=s.replace(/(?:\b[A-Z]|\.[a-zA-Z_$])[a-zA-Z_$\d]*|[a-zA-Z_$][a-zA-Z_$\d]*:|this|true|false|null|undefined|typeof|instanceof|in|delete|new|void|arguments|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|eval|isFinite|isNaN|parseFloat|parseInt|unescape|dojo|dijit|dojox|window|document|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/g,"").match(/([a-z_$][a-z_$\d]*)/gi)||[],t={};
+dojo.forEach(_7,function(v){
+if(!(v in t)){
+_5.push(v);
+t[v]=1;
+}
+});
+}
+}
+}
+return {args:_5,body:s};
+};
+var _8=function(a){
+return a.length?function(){
+var i=a.length-1,x=df.lambda(a[i]).apply(this,arguments);
+for(--i;i>=0;--i){
+x=df.lambda(a[i]).call(this,x);
+}
+return x;
+}:function(x){
+return x;
+};
+};
+dojo.mixin(df,{rawLambda:function(s){
+return _4(s);
+},buildLambda:function(s){
+s=_4(s);
+return "function("+s.args.join(",")+"){return ("+s.body+");}";
+},lambda:function(s){
+if(typeof s=="function"){
+return s;
+}
+if(s instanceof Array){
+return _8(s);
+}
+if(s in _1){
+return _1[s];
+}
+s=_4(s);
+return _1[s]=new Function(s.args,"return ("+s.body+");");
+},clearLambdaCache:function(){
+_1={};
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/tailrec.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/tailrec.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/tailrec.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.tailrec"]){
+dojo._hasResource["dojox.lang.functional.tailrec"]=true;
+dojo.provide("dojox.lang.functional.tailrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x";
+df.tailrec=function(_3,_4,_5){
+var c,t,b,cs,ts,bs,_6={},_7={},_8=function(x){
+_6[x]=1;
+};
+if(typeof _3=="string"){
+cs=_1(_3,_2,_8);
+}else{
+c=df.lambda(_3);
+cs="_c.apply(this, _x)";
+_7["_c=_t.c"]=1;
+}
+if(typeof _4=="string"){
+ts=_1(_4,_2,_8);
+}else{
+t=df.lambda(_4);
+ts="_t.t.apply(this, _x)";
+}
+if(typeof _5=="string"){
+bs=_1(_5,_2,_8);
+}else{
+b=df.lambda(_5);
+bs="_b.apply(this, _x)";
+_7["_b=_t.b"]=1;
+}
+var _9=df.keys(_6),_a=df.keys(_7),f=new Function([],"var _x=arguments,_t=_x.callee,_c=_t.c,_b=_t.b".concat(_9.length?","+_9.join(","):"",_a.length?",_t=_x.callee,"+_a.join(","):t?",_t=_x.callee":"",";for(;!",cs,";_x=",bs,");return ",ts));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+return f;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/fold.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/fold.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/fold.js	(revision 9)
@@ -0,0 +1,104 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.fold"]){
+dojo._hasResource["dojox.lang.functional.fold"]=true;
+dojo.provide("dojox.lang.functional.fold");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{foldl:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var i,n;
+if(d.isArray(a)){
+for(i=0,n=a.length;i<n;z=f.call(o,z,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+for(i=0;a.hasNext();z=f.call(o,z,a.next(),i++,a)){
+}
+}else{
+for(i in a){
+if(!(i in _1)){
+z=f.call(o,z,a[i],i,a);
+}
+}
+}
+}
+return z;
+},foldl1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var z,i,n;
+if(d.isArray(a)){
+z=a[0];
+for(i=1,n=a.length;i<n;z=f.call(o,z,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+if(a.hasNext()){
+z=a.next();
+for(i=1;a.hasNext();z=f.call(o,z,a.next(),i++,a)){
+}
+}
+}else{
+var _2=true;
+for(i in a){
+if(!(i in _1)){
+if(_2){
+z=a[i];
+_2=false;
+}else{
+z=f.call(o,z,a[i],i,a);
+}
+}
+}
+}
+}
+return z;
+},foldr:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+for(var i=a.length;i>0;--i,z=f.call(o,z,a[i],i,a)){
+}
+return z;
+},foldr1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,z=a[n-1],i=n-1;
+for(;i>0;--i,z=f.call(o,z,a[i],i,a)){
+}
+return z;
+},reduce:function(a,f,z){
+return arguments.length<3?df.foldl1(a,f):df.foldl(a,f,z);
+},reduceRight:function(a,f,z){
+return arguments.length<3?df.foldr1(a,f):df.foldr(a,f,z);
+},unfold:function(pr,f,g,z,o){
+o=o||d.global;
+f=df.lambda(f);
+g=df.lambda(g);
+pr=df.lambda(pr);
+var t=[];
+for(;!pr.call(o,z);t.push(f.call(o,z)),z=g.call(o,z)){
+}
+return t;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/multirec.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/multirec.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/multirec.js	(revision 9)
@@ -0,0 +1,62 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.multirec"]){
+dojo._hasResource["dojox.lang.functional.multirec"]=true;
+dojo.provide("dojox.lang.functional.multirec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x",_3=["_y.r","_y.o"];
+df.multirec=function(_4,_5,_6,_7){
+var c,t,b,a,cs,ts,bs,as,_8={},_9={},_a=function(x){
+_8[x]=1;
+};
+if(typeof _4=="string"){
+cs=_1(_4,_2,_a);
+}else{
+c=df.lambda(_4);
+cs="_c.apply(this, _x)";
+_9["_c=_t.c"]=1;
+}
+if(typeof _5=="string"){
+ts=_1(_5,_2,_a);
+}else{
+t=df.lambda(_5);
+ts="_t.apply(this, _x)";
+}
+if(typeof _6=="string"){
+bs=_1(_6,_2,_a);
+}else{
+b=df.lambda(_6);
+bs="_b.apply(this, _x)";
+_9["_b=_t.b"]=1;
+}
+if(typeof _7=="string"){
+as=_1(_7,_3,_a);
+}else{
+a=df.lambda(_7);
+as="_a.call(this, _y.r, _y.o)";
+_9["_a=_t.a"]=1;
+}
+var _b=df.keys(_8),_c=df.keys(_9),f=new Function([],"var _y={a:arguments},_x,_r,_z,_i".concat(_b.length?","+_b.join(","):"",_c.length?",_t=arguments.callee,"+_c.join(","):"",t?(_c.length?",_t=_t.t":"_t=arguments.callee.t"):"",";for(;;){for(;;){if(_y.o){_r=",as,";break}_x=_y.a;if(",cs,"){_r=",ts,";break}_y.o=_x;_x=",bs,";_y.r=[];_z=_y;for(_i=_x.length-1;_i>=0;--_i){_y={p:_y,a:_x[_i],z:_z}}}if(!(_z=_y.z)){return _r}_z.r.push(_r);_y=_y.p}"));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/scan.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/scan.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/scan.js	(revision 9)
@@ -0,0 +1,98 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.scan"]){
+dojo._hasResource["dojox.lang.functional.scan"]=true;
+dojo.provide("dojox.lang.functional.scan");
+dojo.require("dojox.lang.functional.lambda");
+(function(){
+var d=dojo,df=dojox.lang.functional,_1={};
+d.mixin(df,{scanl:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t,n,i;
+if(d.isArray(a)){
+t=new Array((n=a.length)+1);
+t[0]=z;
+for(i=0;i<n;z=f.call(o,z,a[i],i,a),t[++i]=z){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+t=[z];
+for(i=0;a.hasNext();t.push(z=f.call(o,z,a.next(),i++,a))){
+}
+}else{
+t=[z];
+for(i in a){
+if(!(i in _1)){
+t.push(z=f.call(o,z,a[i],i,a));
+}
+}
+}
+}
+return t;
+},scanl1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var t,n,z,_2=true;
+if(d.isArray(a)){
+t=new Array(n=a.length);
+t[0]=z=a[0];
+for(var i=1;i<n;t[i]=z=f.call(o,z,a[i],i,a),++i){
+}
+}else{
+if(typeof a.hasNext=="function"&&typeof a.next=="function"){
+if(a.hasNext()){
+t=[z=a.next()];
+for(var i=1;a.hasNext();t.push(z=f.call(o,z,a.next(),i++,a))){
+}
+}
+}else{
+for(var i in a){
+if(!(i in _1)){
+if(_2){
+t=[z=a[i]];
+_2=false;
+}else{
+t.push(z=f.call(o,z,a[i],i,a));
+}
+}
+}
+}
+}
+return t;
+},scanr:function(a,f,z,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,t=new Array(n+1),i=n;
+t[n]=z;
+for(;i>0;--i,z=f.call(o,z,a[i],i,a),t[i]=z){
+}
+return t;
+},scanr1:function(a,f,o){
+if(typeof a=="string"){
+a=a.split("");
+}
+o=o||d.global;
+f=df.lambda(f);
+var n=a.length,t=new Array(n),z=a[n-1],i=n-1;
+t[i]=z;
+for(;i>0;--i,z=f.call(o,z,a[i],i,a),t[i]=z){
+}
+return t;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/numrec.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/numrec.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/numrec.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.numrec"]){
+dojo._hasResource["dojox.lang.functional.numrec"]=true;
+dojo.provide("dojox.lang.functional.numrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2=["_r","_i"];
+df.numrec=function(_3,_4){
+var a,as,_5={},_6=function(x){
+_5[x]=1;
+};
+if(typeof _4=="string"){
+as=_1(_4,_2,_6);
+}else{
+a=df.lambda(_4);
+as="_a.call(this, _r, _i)";
+}
+var _7=df.keys(_5),f=new Function(["_x"],"var _t=arguments.callee,_r=_t.t,_i".concat(_7.length?","+_7.join(","):"",a?",_a=_t.a":"",";for(_i=1;_i<=_x;++_i){_r=",as,"}return _r"));
+f.t=_3;
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/listcomp.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/listcomp.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/listcomp.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.listcomp"]){
+dojo._hasResource["dojox.lang.functional.listcomp"]=true;
+dojo.provide("dojox.lang.functional.listcomp");
+(function(){
+var _1=/\bfor\b|\bif\b/gm;
+var _2=function(s){
+var _3=s.split(_1),_4=s.match(_1),_5=["var r = [];"],_6=[],i=0,l=_4.length;
+while(i<l){
+var a=_4[i],f=_3[++i];
+if(a=="for"&&!/^\s*\(\s*(;|var)/.test(f)){
+f=f.replace(/^\s*\(/,"(var ");
+}
+_5.push(a,f,"{");
+_6.push("}");
+}
+return _5.join("")+"r.push("+_3[0]+");"+_6.join("")+"return r;";
+};
+dojo.mixin(dojox.lang.functional,{buildListcomp:function(s){
+return "function(){"+_2(s)+"}";
+},compileListcomp:function(s){
+return new Function([],_2(s));
+},listcomp:function(s){
+return (new Function([],_2(s)))();
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/binrec.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/binrec.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/binrec.js	(revision 9)
@@ -0,0 +1,62 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.binrec"]){
+dojo._hasResource["dojox.lang.functional.binrec"]=true;
+dojo.provide("dojox.lang.functional.binrec");
+dojo.require("dojox.lang.functional.lambda");
+dojo.require("dojox.lang.functional.util");
+(function(){
+var df=dojox.lang.functional,_1=df.inlineLambda,_2="_x",_3=["_z.r","_r","_z.a"];
+df.binrec=function(_4,_5,_6,_7){
+var c,t,b,a,cs,ts,bs,as,_8={},_9={},_a=function(x){
+_8[x]=1;
+};
+if(typeof _4=="string"){
+cs=_1(_4,_2,_a);
+}else{
+c=df.lambda(_4);
+cs="_c.apply(this, _x)";
+_9["_c=_t.c"]=1;
+}
+if(typeof _5=="string"){
+ts=_1(_5,_2,_a);
+}else{
+t=df.lambda(_5);
+ts="_t.apply(this, _x)";
+}
+if(typeof _6=="string"){
+bs=_1(_6,_2,_a);
+}else{
+b=df.lambda(_6);
+bs="_b.apply(this, _x)";
+_9["_b=_t.b"]=1;
+}
+if(typeof _7=="string"){
+as=_1(_7,_3,_a);
+}else{
+a=df.lambda(_7);
+as="_a.call(this, _z.r, _r, _z.a)";
+_9["_a=_t.a"]=1;
+}
+var _b=df.keys(_8),_c=df.keys(_9),f=new Function([],"var _x=arguments,_y,_z,_r".concat(_b.length?","+_b.join(","):"",_c.length?",_t=_x.callee,"+_c.join(","):"",t?(_c.length?",_t=_t.t":"_t=_x.callee.t"):"",";while(!",cs,"){_r=",bs,";_y={p:_y,a:_r[1]};_z={p:_z,a:_x};_x=_r[0]}for(;;){do{_r=",ts,";if(!_z)return _r;while(\"r\" in _z){_r=",as,";if(!(_z=_z.p))return _r}_z.r=_r;_x=_y.a;_y=_y.p}while(",cs,");do{_r=",bs,";_y={p:_y,a:_r[1]};_z={p:_z,a:_x};_x=_r[0]}while(!",cs,")}"));
+if(c){
+f.c=c;
+}
+if(t){
+f.t=t;
+}
+if(b){
+f.b=b;
+}
+if(a){
+f.a=a;
+}
+return f;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/functional/zip.js
===================================================================
--- trunk/web/dojo/dojox/lang/functional/zip.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/functional/zip.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.functional.zip"]){
+dojo._hasResource["dojox.lang.functional.zip"]=true;
+dojo.provide("dojox.lang.functional.zip");
+(function(){
+var df=dojox.lang.functional;
+dojo.mixin(df,{zip:function(){
+var n=arguments[0].length,m=arguments.length,i=1,t=new Array(n),j,p;
+for(;i<m;n=Math.min(n,arguments[i++].length)){
+}
+for(i=0;i<n;++i){
+p=new Array(m);
+for(j=0;j<m;p[j]=arguments[j][i],++j){
+}
+t[i]=p;
+}
+return t;
+},unzip:function(a){
+return df.zip.apply(null,a);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/lang/docs.js
===================================================================
--- trunk/web/dojo/dojox/lang/docs.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/docs.js	(revision 9)
@@ -0,0 +1,192 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.docs"]){
+dojo._hasResource["dojox.lang.docs"]=true;
+dojo.provide("dojox.lang.docs");
+(function(){
+function _1(_2){
+};
+var _3={};
+var _4=[];
+var _5=dojox.lang.docs._loadedDocs={};
+var _6=function(_7,_8){
+_3[_8]=_7;
+};
+var _9=function(_a){
+var _b=_a.type||"";
+var _c,_d=false,_e=false,_f;
+_b=_b.replace(/\?/,function(){
+_d=true;
+return "";
+});
+_b=_b.replace(/\[\]/,function(){
+_e=true;
+return "";
+});
+if(_b.match(/HTML/)){
+_b="string";
+}else{
+if(_b=="String"||_b=="Number"||_b=="Boolean"||_b=="Object"||_b=="Array"||_b=="Integer"||_b=="Function"){
+_b=_b.toLowerCase();
+}else{
+if(_b=="bool"){
+_b="boolean";
+}else{
+if(_b){
+_c=dojo.getObject(_b)||{};
+_f=true;
+}else{
+_c={};
+}
+}
+}
+}
+_c=_c||{type:_b};
+if(_e){
+_c={items:_c,type:"array"};
+_f=false;
+}
+if(!_f){
+if(_d){
+_c.optional=true;
+}
+if(/const/.test(_a.tags)){
+_c.readonly=true;
+}
+}
+return _c;
+};
+var _10=function(_11,_12){
+var _13=_5[_12];
+if(_13){
+_11.description=_13.description;
+_11.properties={};
+_11.methods={};
+if(_13.properties){
+var _14=_13.properties;
+for(var i=0,l=_14.length;i<l;i++){
+if(_14[i].scope=="prototype"){
+var _15=_11.properties[_14[i].name]=_9(_14[i]);
+_15.description=_14[i].summary;
+}
+}
+}
+if(_13.methods){
+var _16=_13.methods;
+for(i=0,l=_16.length;i<l;i++){
+_12=_16[i].name;
+if(_12&&_16[i].scope=="prototype"){
+var _17=_11.methods[_12]={};
+_17.description=_16[i].summary;
+var _18=_16[i].parameters;
+if(_18){
+_17.parameters=[];
+for(var j=0,k=_18.length;j<k;j++){
+var _19=_18[j];
+var _1a=_17.parameters[j]=_9(_19);
+_1a.name=_19.name;
+_1a.optional="optional"==_19.usage;
+}
+}
+var ret=_16[i]["return-types"];
+if(ret&&ret[0]){
+var _1b=_9(ret[0]);
+if(_1b.type){
+_17.returns=_1b;
+}
+}
+}
+}
+}
+var _1c=_13.superclass;
+if(_1c){
+_11["extends"]=dojo.getObject(_1c);
+}
+}
+};
+var _1d=function(_1e){
+_4.push(_1e);
+};
+var _1f=dojo.declare;
+dojo.declare=function(_20){
+var _21=_1f.apply(this,arguments);
+_6(_21,_20);
+return _21;
+};
+dojo.mixin(dojo.declare,_1f);
+var _22;
+var _23=dojo.require;
+dojo.require=function(_24){
+_1d(_24);
+var _25=_23.apply(this,arguments);
+return _25;
+};
+dojox.lang.docs.init=function(_26){
+function _27(){
+dojo.require=_23;
+_4=null;
+try{
+dojo.xhrGet({sync:!_26,url:dojo.baseUrl+"../util/docscripts/api.json",handleAs:"text"}).addCallbacks(function(obj){
+_5=(new Function("return "+obj))();
+obj=null;
+_6=_10;
+for(var i in _3){
+_6(_3[i],i);
+}
+_3=null;
+},_1);
+}
+catch(e){
+_1(e);
+}
+};
+if(_22){
+return null;
+}
+_22=true;
+var _28=function(_29,_2a){
+return dojo.xhrGet({sync:_2a||!_26,url:dojo.baseUrl+"../util/docscripts/api/"+_29+".json",handleAs:"text"}).addCallback(function(obj){
+obj=(new Function("return "+obj))();
+for(var _2b in obj){
+if(!_5[_2b]){
+_5[_2b]=obj[_2b];
+}
+}
+});
+};
+try{
+var _2c=_4.shift();
+_28(_2c,true).addCallbacks(function(){
+_1d=function(_2d){
+if(!_5[_2d]){
+try{
+_28(_2d);
+}
+catch(e){
+_5[_2d]={};
+}
+}
+};
+dojo.forEach(_4,function(mod){
+_1d(mod);
+});
+_4=null;
+_6=_10;
+for(i in _3){
+_6(_3[i],i);
+}
+_3=null;
+},_27);
+}
+catch(e){
+_27();
+}
+return null;
+};
+})();
+}
Index: trunk/web/dojo/dojox/lang/async.js
===================================================================
--- trunk/web/dojo/dojox/lang/async.js	(revision 0)
+++ trunk/web/dojo/dojox/lang/async.js	(revision 9)
@@ -0,0 +1,162 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.lang.async"]){
+dojo._hasResource["dojox.lang.async"]=true;
+dojo.provide("dojox.lang.async");
+(function(){
+var d=dojo,_1=d.Deferred,_2=d.forEach,_3=d.some,_4=dojox.lang.async,_5=Array.prototype.slice,_6=Object.prototype.toString;
+_4.seq=function(x){
+var fs=_6.call(x)=="[object Array]"?x:arguments;
+return function(_7){
+var x=new _1();
+_2(fs,function(f){
+x.addCallback(f);
+});
+x.callback(_7);
+return x;
+};
+};
+_4.par=function(x){
+var fs=_6.call(x)=="[object Array]"?x:arguments;
+return function(_8){
+var _9=new Array(fs.length),_a=function(){
+_2(_9,function(v){
+if(v instanceof _1&&v.fired<0){
+v.cancel();
+}
+});
+},x=new _1(_a),_b=fs.length;
+_2(fs,function(f,i){
+var x;
+try{
+x=f(_8);
+}
+catch(e){
+x=e;
+}
+_9[i]=x;
+});
+var _c=_3(_9,function(v){
+if(v instanceof Error){
+_a();
+x.errback(v);
+return true;
+}
+return false;
+});
+if(!_c){
+_2(_9,function(v,i){
+if(v instanceof _1){
+v.addCallbacks(function(v){
+_9[i]=v;
+if(!--_b){
+x.callback(_9);
+}
+},function(v){
+_a();
+x.errback(v);
+});
+}else{
+--_b;
+}
+});
+}
+if(!_b){
+x.callback(_9);
+}
+return x;
+};
+};
+_4.any=function(x){
+var fs=_6.call(x)=="[object Array]"?x:arguments;
+return function(_d){
+var _e=new Array(fs.length),_f=true;
+cancel=function(_10){
+_2(_e,function(v,i){
+if(i!=_10&&v instanceof _1&&v.fired<0){
+v.cancel();
+}
+});
+},x=new _1(cancel);
+_2(fs,function(f,i){
+var x;
+try{
+x=f(_d);
+}
+catch(e){
+x=e;
+}
+_e[i]=x;
+});
+var _11=_3(_e,function(v,i){
+if(!(v instanceof _1)){
+cancel(i);
+x.callback(v);
+return true;
+}
+return false;
+});
+if(!_11){
+_2(_e,function(v,i){
+v.addBoth(function(v){
+if(_f){
+_f=false;
+cancel(i);
+x.callback(v);
+}
+});
+});
+}
+return x;
+};
+};
+_4.select=function(_12,x){
+var fs=_6.call(x)=="[object Array]"?x:_5.call(arguments,1);
+return function(_13){
+return new _1().addCallback(_12).addCallback(function(v){
+if(typeof v=="number"&&v>=0&&v<fs.length){
+return fs[v](_13);
+}else{
+return new Error("async.select: out of range");
+}
+}).callback(_13);
+};
+};
+_4.ifThen=function(_14,_15,_16){
+return function(_17){
+return new _1().addCallback(_14).addCallback(function(v){
+return (v?_15:_16)(_17);
+}).callback(_17);
+};
+};
+_4.loop=function(_18,_19){
+return function(_1a){
+var x,y=new _1(function(){
+x.cancel();
+});
+function _1b(v){
+y.errback(v);
+};
+function _1c(v){
+if(v){
+x.addCallback(_19).addCallback(_1d);
+}else{
+y.callback(v);
+}
+return v;
+};
+function _1d(_1e){
+x=new _1().addCallback(_18).addCallback(_1c).addErrback(_1b);
+x.callback(_1e);
+};
+_1d(_1a);
+return y;
+};
+};
+})();
+}
Index: trunk/web/dojo/dojox/uuid.js
===================================================================
--- trunk/web/dojo/dojox/uuid.js	(revision 0)
+++ trunk/web/dojo/dojox/uuid.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.uuid"]){
+dojo._hasResource["dojox.uuid"]=true;
+dojo.provide("dojox.uuid");
+dojo.require("dojox.uuid._base");
+}
Index: trunk/web/dojo/dojox/sketch/Anchor.js
===================================================================
--- trunk/web/dojo/dojox/sketch/Anchor.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/Anchor.js	(revision 9)
@@ -0,0 +1,69 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Anchor"]){
+dojo._hasResource["dojox.sketch.Anchor"]=true;
+dojo.provide("dojox.sketch.Anchor");
+dojo.require("dojox.gfx");
+(function(){
+var ta=dojox.sketch;
+ta.Anchor=function(an,id,_1){
+var _2=this;
+var _3=4;
+var _4=null;
+this.type=function(){
+return "Anchor";
+};
+this.annotation=an;
+this.id=id;
+this._key="anchor-"+ta.Anchor.count++;
+this.shape=null;
+this.isControl=(_1!=null)?_1:true;
+this.beginEdit=function(){
+this.annotation.beginEdit(ta.CommandTypes.Modify);
+};
+this.endEdit=function(){
+this.annotation.endEdit();
+};
+this.zoom=function(_5){
+if(this.shape){
+var rs=Math.floor(_3/_5);
+var _6=dojox.gfx.renderer=="vml"?1:1/_5;
+this.shape.setShape({x:an[id].x-rs,y:an[id].y-rs,width:rs*2,height:rs*2}).setStroke({color:"black",width:_6});
+}
+};
+this.setBinding=function(pt){
+an[id]={x:an[id].x+pt.dx,y:an[id].y+pt.dy};
+an.draw();
+an.drawBBox();
+};
+this.setUndo=function(){
+an.setUndo();
+};
+this.enable=function(){
+if(!an.shape){
+return;
+}
+an.figure._add(this);
+_4={x:an[id].x-_3,y:an[id].y-_3,width:_3*2,height:_3*2};
+this.shape=an.shape.createRect(_4).setFill([255,255,255,0.35]);
+this.shape.getEventSource().setAttribute("id",_2._key);
+this.shape.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.zoom(an.figure.zoomFactor);
+};
+this.disable=function(){
+an.figure._remove(this);
+if(an.shape){
+an.shape.remove(this.shape);
+}
+this.shape=null;
+_4=null;
+};
+};
+ta.Anchor.count=0;
+})();
+}
Index: trunk/web/dojo/dojox/sketch/Annotation.js
===================================================================
--- trunk/web/dojo/dojox/sketch/Annotation.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/Annotation.js	(revision 9)
@@ -0,0 +1,249 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Annotation"]){
+dojo._hasResource["dojox.sketch.Annotation"]=true;
+dojo.provide("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+dojo.require("dojox.sketch._Plugin");
+(function(){
+var ta=dojox.sketch;
+dojo.declare("dojox.sketch.AnnotationTool",ta._Plugin,{onMouseDown:function(e){
+this._omd=true;
+},onMouseMove:function(e,_1){
+if(!this._omd){
+return;
+}
+if(this._cshape){
+this._cshape.setShape(_1);
+}else{
+this._cshape=this.figure.surface.createRect(_1).setStroke({color:"#999",width:1,style:"ShortDot"}).setFill([255,255,255,0.7]);
+this._cshape.getEventSource().setAttribute("shape-rendering","crispEdges");
+}
+},onMouseUp:function(e){
+if(!this._omd){
+return;
+}
+this._omd=false;
+var f=this.figure;
+if(this._cshape){
+f.surface.remove(this._cshape);
+delete this._cshape;
+}
+if(!(f._startPoint.x==e.pageX&&f._startPoint.y==e.pageY)){
+var _2=10;
+if(Math.max(_2,Math.abs(f._absEnd.x-f._start.x),Math.abs(f._absEnd.y-f._start.y))>_2){
+this._create(f._start,f._end);
+}
+}
+},_create:function(_3,_4){
+var f=this.figure;
+var _5=f.nextKey();
+var a=new (this.annotation)(f,_5);
+a.transform={dx:f._calCol(_3.x/f.zoomFactor),dy:f._calCol(_3.y/f.zoomFactor)};
+a.end={x:f._calCol(_4.x/f.zoomFactor),y:f._calCol(_4.y/f.zoomFactor)};
+if(a.control){
+a.control={x:f._calCol((_4.x/2)/f.zoomFactor),y:f._calCol((_4.y/2)/f.zoomFactor)};
+}
+f.onBeforeCreateShape(a);
+a.initialize();
+f.select(a);
+f.onCreateShape(a);
+f.history.add(ta.CommandTypes.Create,a);
+}});
+ta.Annotation=function(_6,id){
+this.id=this._key=id;
+this.figure=_6;
+this.mode=ta.Annotation.Modes.View;
+this.shape=null;
+this.boundingBox=null;
+this.hasAnchors=true;
+this.anchors={};
+this._properties={"stroke":{color:"blue",width:2},"font":{family:"Arial",size:16,weight:"bold"},"fill":"blue","label":""};
+if(this.figure){
+this.figure.add(this);
+}
+};
+var p=ta.Annotation.prototype;
+p.constructor=ta.Annotation;
+p.type=function(){
+return "";
+};
+p.getType=function(){
+return ta.Annotation;
+};
+p.onRemove=function(_7){
+this.figure.history.add(ta.CommandTypes.Delete,this,this.serialize());
+};
+p.property=function(_8,_9){
+var r;
+_8=_8.toLowerCase();
+if(this._properties[_8]!==undefined){
+r=this._properties[_8];
+}
+if(arguments.length>1){
+this._properties[_8]=_9;
+if(r!=_9){
+this.onPropertyChange(_8,r);
+}
+}
+return r;
+};
+p.onPropertyChange=function(_a,_b){
+};
+p.onCreate=function(){
+this.figure.history.add(ta.CommandTypes.Create,this);
+};
+p.onDblClick=function(e){
+var l=prompt("Set new text:",this.property("label"));
+if(l!==false){
+this.beginEdit(ta.CommandTypes.Modify);
+this.property("label",l);
+this.draw();
+this.endEdit();
+}
+};
+p.initialize=function(){
+};
+p.destroy=function(){
+};
+p.draw=function(){
+};
+p.apply=function(_c){
+};
+p.serialize=function(){
+};
+p.getBBox=function(){
+};
+p.beginEdit=function(_d){
+if(!this._type){
+this._type=_d||ta.CommandTypes.Move;
+this._prevState=this.serialize();
+}
+};
+p.endEdit=function(){
+if(this._prevState!=this.serialize()){
+this.figure.history.add(this._type,this,this._prevState);
+}
+this._type=this._prevState="";
+};
+p.calculate={slope:function(p1,p2){
+if(!(p1.x-p2.x)){
+return 0;
+}
+return ((p1.y-p2.y)/(p1.x-p2.x));
+},dx:function(p1,p2,dy){
+var s=this.slope(p1,p2);
+if(s==0){
+return s;
+}
+return dy/s;
+},dy:function(p1,p2,dx){
+return this.slope(p1,p2)*dx;
+}};
+p.drawBBox=function(){
+var r=this.getBBox();
+if(!this.boundingBox){
+this.boundingBox=this.shape.createRect(r).moveToBack().setStroke({color:"#999",width:1,style:"Dash"}).setFill([238,238,238,0.3]);
+this.boundingBox.getEventSource().setAttribute("id",this.id+"-boundingBox");
+this.boundingBox.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.figure._add(this);
+}else{
+this.boundingBox.setShape(r);
+}
+};
+p.setBinding=function(pt){
+this.transform.dx+=pt.dx;
+this.transform.dy+=pt.dy;
+this.draw();
+};
+p.getTextBox=function(_e){
+var fp=this.property("font");
+var f={fontFamily:fp.family,fontSize:fp.size,fontWeight:fp.weight};
+if(_e){
+f.fontSize=Math.floor(f.fontSize/_e);
+}
+return dojox.gfx._base._getTextBox(this.property("label"),f);
+};
+p.setMode=function(m){
+if(this.mode==m){
+return;
+}
+this.mode=m;
+var _f="disable";
+if(m==ta.Annotation.Modes.Edit){
+_f="enable";
+}
+if(_f=="enable"){
+this.drawBBox();
+this.figure._add(this);
+}else{
+if(this.boundingBox){
+if(this.shape){
+this.shape.remove(this.boundingBox);
+}
+this.boundingBox=null;
+}
+}
+for(var p in this.anchors){
+this.anchors[p][_f]();
+}
+};
+p.zoom=function(pct){
+pct=pct||this.figure.zoomFactor;
+if(this.labelShape){
+var f=dojo.clone(this.property("font"));
+f.size=Math.ceil(f.size/pct)+"px";
+this.labelShape.setFont(f);
+}
+for(var n in this.anchors){
+this.anchors[n].zoom(pct);
+}
+if(dojox.gfx.renderer=="vml"){
+pct=1;
+}
+if(this.pathShape){
+var s=dojo.clone(this.property("stroke"));
+s.width=pct>1?s.width:Math.ceil(s.width/pct)+"px";
+this.pathShape.setStroke(s);
+}
+};
+p.writeCommonAttrs=function(){
+return "id=\""+this.id+"\" dojoxsketch:type=\""+this.type()+"\""+" transform=\"translate("+this.transform.dx+","+this.transform.dy+")\""+(this.data?(" ><![CDATA[data:"+dojo.toJson(this.data)+"]]"):"");
+};
+p.readCommonAttrs=function(obj){
+var i=0,cs=obj.childNodes,c;
+while((c=cs[i++])){
+if(c.nodeType==4){
+if(c.nodeValue.substr(0,11)=="properties:"){
+this._properties=dojo.fromJson(c.nodeValue.substr(11));
+}else{
+if(c.nodeValue.substr(0,5)=="data:"){
+this.data=dojo.fromJson(c.nodeValue.substr(5));
+}else{
+console.error("unknown CDATA node in node ",obj);
+}
+}
+}
+}
+if(obj.getAttribute("transform")){
+var t=obj.getAttribute("transform").replace("translate(","");
+var pt=t.split(",");
+this.transform.dx=parseFloat(pt[0],10);
+this.transform.dy=parseFloat(pt[1],10);
+}
+};
+ta.Annotation.Modes={View:0,Edit:1};
+ta.Annotation.register=function(_10,_11){
+var cls=ta[_10+"Annotation"];
+ta.registerTool(_10,function(p){
+dojo.mixin(p,{shape:_10,annotation:cls});
+return new (_11||ta.AnnotationTool)(p);
+});
+};
+})();
+}
Index: trunk/web/dojo/dojox/sketch/UndoStack.js
===================================================================
--- trunk/web/dojo/dojox/sketch/UndoStack.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/UndoStack.js	(revision 9)
@@ -0,0 +1,71 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.UndoStack"]){
+dojo._hasResource["dojox.sketch.UndoStack"]=true;
+dojo.provide("dojox.sketch.UndoStack");
+dojo.require("dojox.xml.DomParser");
+(function(){
+var ta=dojox.sketch;
+ta.CommandTypes={Create:"Create",Move:"Move",Modify:"Modify",Delete:"Delete",Convert:"Convert"};
+dojo.declare("dojox.sketch.UndoStack",null,{constructor:function(_1){
+this.figure=_1;
+this._steps=[];
+this._undoedSteps=[];
+},apply:function(_2,_3,to){
+if(!_3&&!to&&_2.fullText){
+this.figure.setValue(_2.fullText);
+return;
+}
+var _4=_3.shapeText;
+var _5=to.shapeText;
+if(_4.length==0&&_5.length==0){
+return;
+}
+if(_4.length==0){
+var o=dojox.xml.DomParser.parse(_5).documentElement;
+var a=this.figure._loadAnnotation(o);
+if(a){
+this.figure._add(a);
+}
+return;
+}
+if(_5.length==0){
+var _6=this.figure.getAnnotator(_3.shapeId);
+this.figure._delete([_6],true);
+return;
+}
+var _7=this.figure.getAnnotator(to.shapeId);
+var no=dojox.xml.DomParser.parse(_5).documentElement;
+_7.draw(no);
+this.figure.select(_7);
+return;
+},add:function(_8,_9,_a){
+var id=_9?_9.id:"";
+var _b=_9?_9.serialize():"";
+if(_8==ta.CommandTypes.Delete){
+_b="";
+}
+var _c={cmdname:_8,before:{shapeId:id,shapeText:_a||""},after:{shapeId:id,shapeText:_b}};
+this._steps.push(_c);
+this._undoedSteps=[];
+},destroy:function(){
+},undo:function(){
+var _d=this._steps.pop();
+if(_d){
+this._undoedSteps.push(_d);
+this.apply(_d,_d.after,_d.before);
+}
+},redo:function(){
+var _e=this._undoedSteps.pop();
+if(_e){
+this._steps.push(_e);
+this.apply(_e,_e.before,_e.after);
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojox/sketch/PreexistingAnnotation.js
===================================================================
--- trunk/web/dojo/dojox/sketch/PreexistingAnnotation.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/PreexistingAnnotation.js	(revision 9)
@@ -0,0 +1,141 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.PreexistingAnnotation"]){
+dojo._hasResource["dojox.sketch.PreexistingAnnotation"]=true;
+dojo.provide("dojox.sketch.PreexistingAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.PreexistingAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.end={x:200,y:200};
+this.radius=8;
+this.textPosition={x:196,y:196};
+this.textOffset=4;
+this.textAlign="end";
+this.rectShape=null;
+this.labelShape=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.PreexistingAnnotation.prototype=new ta.Annotation;
+var p=ta.PreexistingAnnotation.prototype;
+p.constructor=ta.PreexistingAnnotation;
+p.type=function(){
+return "Preexisting";
+};
+p.getType=function(){
+return ta.PreexistingAnnotation;
+};
+p._pos=function(){
+var x=Math.min(this.start.x,this.end.x);
+var y=Math.min(this.start.y,this.end.y);
+var w=Math.max(this.start.x,this.end.x);
+var h=Math.max(this.start.y,this.end.y);
+this.start={x:x,y:y};
+this.end={x:w,y:h};
+this.textPosition={x:this.end.x-this.textOffset,y:this.end.y-this.textOffset};
+};
+p.apply=function(_2){
+if(!_2){
+return;
+}
+if(_2.documentElement){
+_2=_2.documentElement;
+}
+this.readCommonAttrs(_2);
+for(var i=0;i<_2.childNodes.length;i++){
+var c=_2.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="rect"){
+if(c.getAttribute("x")!==null){
+this.start.x=parseFloat(c.getAttribute("x"),10);
+}
+if(c.getAttribute("width")!==null){
+this.end.x=parseFloat(c.getAttribute("width"),10)+parseFloat(c.getAttribute("x"),10);
+}
+if(c.getAttribute("y")!==null){
+this.start.y=parseFloat(c.getAttribute("y"),10);
+}
+if(c.getAttribute("height")!==null){
+this.end.y=parseFloat(c.getAttribute("height"),10)+parseFloat(c.getAttribute("y"),10);
+}
+if(c.getAttribute("r")!==null){
+this.radius=parseFloat(c.getAttribute("r"),10);
+}
+var _3=this.property("stroke");
+var _4=c.getAttribute("style");
+var m=_4.match(/stroke:([^;]+);/);
+if(m){
+_3.color=m[1];
+this.property("fill",m[1]);
+}
+m=_4.match(/stroke-width:([^;]+);/);
+if(m){
+_3.width=m[1];
+}
+this.property("stroke",_3);
+}
+}
+}
+};
+p.initialize=function(_5){
+this.apply(_5);
+this._pos();
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.rectShape=this.shape.createRect({x:this.start.x,y:this.start.y,width:this.end.x-this.start.x,height:this.end.y-this.start.y,r:this.radius}).setFill([255,255,255,0.1]);
+this.rectShape.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign}).setFill(this.property("fill"));
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.shape.remove(this.rectShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.rectShape=this.labelShape=null;
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.end.x);
+var y=Math.min(this.start.y,this.end.y);
+var w=Math.max(this.start.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.end.y)-y;
+return {x:x-2,y:y-2,width:w+4,height:h+4};
+};
+p.draw=function(_6){
+this.apply(_6);
+this._pos();
+this.shape.setTransform(this.transform);
+this.rectShape.setShape({x:this.start.x,y:this.start.y,width:this.end.x-this.start.x,height:this.end.y-this.start.y,r:this.radius}).setFill([255,255,255,0.1]);
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(_7){
+if(this.rectShape){
+_7=_7||this.figure.zoomFactor;
+ta.Annotation.prototype.zoom.call(this,_7);
+_7=dojox.gfx.renderer=="vml"?1:_7;
+this.rectShape.setStroke({color:this.property("fill"),width:1/_7});
+}
+};
+p.serialize=function(){
+var s=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<rect style=\"stroke:"+s.color+";stroke-width:1;fill:none;\" "+"x=\""+this.start.x+"\" "+"width=\""+(this.end.x-this.start.x)+"\" "+"y=\""+this.start.y+"\" "+"height=\""+(this.end.y-this.start.y)+"\" "+"rx=\""+this.radius+"\" "+"ry=\""+this.radius+"\" "+" />"+"<text style=\"fill:"+s.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("Preexisting");
+})();
+}
Index: trunk/web/dojo/dojox/sketch/_Plugin.js
===================================================================
--- trunk/web/dojo/dojox/sketch/_Plugin.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/_Plugin.js	(revision 9)
@@ -0,0 +1,51 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch._Plugin"]){
+dojo._hasResource["dojox.sketch._Plugin"]=true;
+dojo.provide("dojox.sketch._Plugin");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.sketch._Plugin",null,{constructor:function(_1){
+if(_1){
+dojo.mixin(this,_1);
+}
+this._connects=[];
+},figure:null,iconClassPrefix:"dojoxSketchIcon",itemGroup:"toolsGroup",button:null,queryCommand:null,shape:"",useDefaultCommand:true,buttonClass:dijit.form.ToggleButton,_initButton:function(){
+if(this.shape.length){
+var _2=this.iconClassPrefix+" "+this.iconClassPrefix+this.shape.charAt(0).toUpperCase()+this.shape.substr(1);
+if(!this.button){
+var _3={label:this.shape,showLabel:false,iconClass:_2,dropDown:this.dropDown,tabIndex:"-1"};
+this.button=new this.buttonClass(_3);
+this.connect(this.button,"onClick","activate");
+}
+}
+},attr:function(_4,_5){
+return this.button.attr(_4,_5);
+},onActivate:function(){
+},activate:function(e){
+this.onActivate();
+this.figure.setTool(this);
+this.attr("checked",true);
+},onMouseDown:function(e){
+},onMouseMove:function(e){
+},onMouseUp:function(e){
+},destroy:function(f){
+dojo.forEach(this._connects,dojo.disconnect);
+},connect:function(o,f,tf){
+this._connects.push(dojo.connect(o,f,this,tf));
+},setFigure:function(_6){
+this.figure=_6;
+},setToolbar:function(_7){
+this._initButton();
+if(this.button){
+_7.addChild(this.button);
+}
+if(this.itemGroup){
+_7.addGroupItem(this,this.itemGroup);
+}
+}});
+}
Index: trunk/web/dojo/dojox/sketch/resources/images/icons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/sketch/resources/images/icons.gif
===================================================================
--- trunk/web/dojo/dojox/sketch/resources/images/icons.gif	(revision 0)
+++ trunk/web/dojo/dojox/sketch/resources/images/icons.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/sketch/resources/images/icons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/sketch/resources/sketch.css
===================================================================
--- trunk/web/dojo/dojox/sketch/resources/sketch.css	(revision 0)
+++ trunk/web/dojo/dojox/sketch/resources/sketch.css	(revision 9)
@@ -0,0 +1,17 @@
+.dojoxSketchIcon{
+	background-repeat:no-repeat;
+	height:16px;
+	min-width:16px;
+	text-align:center;
+	width:16px;
+}
+.dojoxSketchIcon { background-image:url(images/icons.gif); }
+.ShowCallouts{ background-position:0px 0px; }
+.PreviousCallout{ background-position:0px -16px; }
+.NextCallout{ background-position:0px -32px; }
+.dojoxSketchIconLead{ background-position:0px -48px; }
+.dojoxSketchIconUnderline{ background-position:0px -64px; }
+.dojoxSketchIconSingleArrow{ background-position:0px -80px; }
+.dojoxSketchIconBrace{ background-position:0px -96px; }
+.dojoxSketchIconDoubleArrow{ background-position:0px -112px; }
+.dojoxSketchIconPreexisting{ background-position:0px -128px; }
Index: trunk/web/dojo/dojox/sketch/DoubleArrowAnnotation.js
===================================================================
--- trunk/web/dojo/dojox/sketch/DoubleArrowAnnotation.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/DoubleArrowAnnotation.js	(revision 9)
@@ -0,0 +1,178 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.DoubleArrowAnnotation"]){
+dojo._hasResource["dojox.sketch.DoubleArrowAnnotation"]=true;
+dojo.provide("dojox.sketch.DoubleArrowAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.DoubleArrowAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.control={x:100,y:-50};
+this.end={x:200,y:0};
+this.textPosition={x:0,y:0};
+this.textOffset=6;
+this.textYOffset=10;
+this.textAlign="middle";
+this.startRotation=0;
+this.endRotation=0;
+this.labelShape=null;
+this.pathShape=null;
+this.startArrow=null;
+this.startArrowGroup=null;
+this.endArrow=null;
+this.endArrowGroup=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.control=new ta.Anchor(this,"control");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.DoubleArrowAnnotation.prototype=new ta.Annotation;
+var p=ta.DoubleArrowAnnotation.prototype;
+p.constructor=ta.DoubleArrowAnnotation;
+p.type=function(){
+return "DoubleArrow";
+};
+p.getType=function(){
+return ta.DoubleArrowAnnotation;
+};
+p._rot=function(){
+var _2=this.control.y-this.start.y;
+var _3=this.control.x-this.start.x;
+this.startRotation=Math.atan2(_2,_3);
+_2=this.end.y-this.control.y;
+_3=this.end.x-this.control.x;
+this.endRotation=Math.atan2(_2,_3);
+};
+p._pos=function(){
+var _4=this.textOffset;
+if(this.control.y<this.end.y){
+_4*=-1;
+}else{
+_4+=this.textYOffset;
+}
+var ab={x:((this.control.x-this.start.x)*0.5)+this.start.x,y:((this.control.y-this.start.y)*0.5)+this.start.y};
+var bc={x:((this.end.x-this.control.x)*0.5)+this.control.x,y:((this.end.y-this.control.y)*0.5)+this.control.y};
+this.textPosition={x:((bc.x-ab.x)*0.5)+ab.x,y:(((bc.y-ab.y)*0.5)+ab.y)+_4};
+};
+p.apply=function(_5){
+if(!_5){
+return;
+}
+if(_5.documentElement){
+_5=_5.documentElement;
+}
+this.readCommonAttrs(_5);
+for(var i=0;i<_5.childNodes.length;i++){
+var c=_5.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="path"){
+var d=c.getAttribute("d").split(" ");
+var s=d[0].split(",");
+this.start.x=parseFloat(s[0].substr(1),10);
+this.start.y=parseFloat(s[1],10);
+s=d[1].split(",");
+this.control.x=parseFloat(s[0].substr(1),10);
+this.control.y=parseFloat(s[1],10);
+s=d[2].split(",");
+this.end.x=parseFloat(s[0],10);
+this.end.y=parseFloat(s[1],10);
+var _6=this.property("stroke");
+var _7=c.getAttribute("style");
+var m=_7.match(/stroke:([^;]+);/);
+if(m){
+_6.color=m[1];
+this.property("fill",m[1]);
+}
+m=_7.match(/stroke-width:([^;]+);/);
+if(m){
+_6.width=m[1];
+}
+this.property("stroke",_6);
+}
+}
+}
+};
+p.initialize=function(_8){
+var _9=(ta.Annotation.labelFont)?ta.Annotation.labelFont:{family:"Times",size:"16px"};
+this.apply(_8);
+this._rot();
+this._pos();
+var _a=this.startRotation;
+var _b=dojox.gfx.matrix.rotate(_a);
+_a=this.endRotation;
+var _c=dojox.gfx.matrix.rotateAt(_a,this.end.x,this.end.y);
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.pathShape=this.shape.createPath("M"+this.start.x+" "+this.start.y+"Q"+this.control.x+" "+this.control.y+" "+this.end.x+" "+this.end.y+" l0,0");
+this.startArrowGroup=this.shape.createGroup().setTransform({dx:this.start.x,dy:this.start.y});
+this.startArrowGroup.applyTransform(_b);
+this.startArrow=this.startArrowGroup.createPath();
+this.endArrowGroup=this.shape.createGroup().setTransform(_c);
+this.endArrow=this.endArrowGroup.createPath();
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign}).setFill(this.property("fill"));
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.startArrowGroup.remove(this.startArrow);
+this.endArrowGroup.remove(this.endArrow);
+this.shape.remove(this.startArrowGroup);
+this.shape.remove(this.endArrowGroup);
+this.shape.remove(this.pathShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.pathShape=this.labelShape=this.startArrowGroup=this.startArrow=this.endArrowGroup=this.endArrow=null;
+};
+p.draw=function(_d){
+this.apply(_d);
+this._rot();
+this._pos();
+var _e=this.startRotation;
+var _f=dojox.gfx.matrix.rotate(_e);
+_e=this.endRotation;
+var _10=dojox.gfx.matrix.rotateAt(_e,this.end.x,this.end.y);
+this.shape.setTransform(this.transform);
+this.pathShape.setShape("M"+this.start.x+" "+this.start.y+" Q"+this.control.x+" "+this.control.y+" "+this.end.x+" "+this.end.y+" l0,0");
+this.startArrowGroup.setTransform({dx:this.start.x,dy:this.start.y}).applyTransform(_f);
+this.startArrow.setFill(this.property("fill"));
+this.endArrowGroup.setTransform(_10);
+this.endArrow.setFill(this.property("fill"));
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(pct){
+if(this.startArrow){
+pct=pct||this.figure.zoomFactor;
+ta.Annotation.prototype.zoom.call(this,pct);
+var l=pct>1?20:Math.floor(20/pct),w=pct>1?5:Math.floor(5/pct),h=pct>1?3:Math.floor(3/pct);
+this.startArrow.setShape("M0,0 l"+l+",-"+w+" -"+h+","+w+" "+h+","+w+" Z");
+this.endArrow.setShape("M"+this.end.x+","+this.end.y+" l-"+l+",-"+w+" "+h+","+w+" -"+h+","+w+" Z");
+}
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.control.x,this.end.x);
+var y=Math.min(this.start.y,this.control.y,this.end.y);
+var w=Math.max(this.start.x,this.control.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.control.y,this.end.y)-y;
+return {x:x,y:y,width:w,height:h};
+};
+p.serialize=function(){
+var s=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<path style=\"stroke:"+s.color+";stroke-width:"+s.width+";fill:none;\" d=\""+"M"+this.start.x+","+this.start.y+" "+"Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+"\" />"+"<g transform=\"translate("+this.start.x+","+this.start.y+") "+"rotate("+(Math.round((this.startRotation*(180/Math.PI))*Math.pow(10,4))/Math.pow(10,4))+")\">"+"<path style=\"fill:"+s.color+";\" d=\"M0,0 l20,-5, -3,5, 3,5 Z\" />"+"</g>"+"<g transform=\"rotate("+(Math.round((this.endRotation*(180/Math.PI))*Math.pow(10,4))/Math.pow(10,4))+", "+this.end.x+", "+this.end.y+")\">"+"<path style=\"fill:"+s.color+";\" d=\"M"+this.end.x+","+this.end.y+" l-20,-5, 3,5, -3,5 Z\" />"+"</g>"+"<text style=\"fill:"+s.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("DoubleArrow");
+})();
+}
Index: trunk/web/dojo/dojox/sketch/LeadAnnotation.js
===================================================================
--- trunk/web/dojo/dojox/sketch/LeadAnnotation.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/LeadAnnotation.js	(revision 9)
@@ -0,0 +1,151 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.LeadAnnotation"]){
+dojo._hasResource["dojox.sketch.LeadAnnotation"]=true;
+dojo.provide("dojox.sketch.LeadAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.LeadAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.control={x:100,y:-50};
+this.end={x:200,y:0};
+this.textPosition={x:0,y:0};
+this.textOffset=4;
+this.textYOffset=10;
+this.pathShape=null;
+this.labelShape=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.control=new ta.Anchor(this,"control");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.LeadAnnotation.prototype=new ta.Annotation;
+var p=ta.LeadAnnotation.prototype;
+p.constructor=ta.LeadAnnotation;
+p.type=function(){
+return "Lead";
+};
+p.getType=function(){
+return ta.LeadAnnotation;
+};
+p._pos=function(){
+var _2=this.textOffset,x=0,y=0;
+var _3=this.calculate.slope(this.control,this.end);
+this.textAlign="middle";
+if(Math.abs(_3)>=1){
+x=this.end.x+this.calculate.dx(this.control,this.end,_2);
+if(this.control.y>this.end.y){
+y=this.end.y-_2;
+}else{
+y=this.end.y+_2+this.textYOffset;
+}
+}else{
+if(_3==0){
+x=this.end.x+_2;
+y=this.end.y+this.textYOffset;
+}else{
+if(this.start.x>this.end.x){
+x=this.end.x-_2;
+this.textAlign="end";
+}else{
+x=this.end.x+_2;
+this.textAlign="start";
+}
+if(this.start.y<this.end.y){
+y=this.end.y+this.calculate.dy(this.control,this.end,_2)+this.textYOffset;
+}else{
+y=this.end.y+this.calculate.dy(this.control,this.end,-_2);
+}
+}
+}
+this.textPosition={x:x,y:y};
+};
+p.apply=function(_4){
+if(!_4){
+return;
+}
+if(_4.documentElement){
+_4=_4.documentElement;
+}
+this.readCommonAttrs(_4);
+for(var i=0;i<_4.childNodes.length;i++){
+var c=_4.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="path"){
+var d=c.getAttribute("d").split(" ");
+var s=d[0].split(",");
+this.start.x=parseFloat(s[0].substr(1),10);
+this.start.y=parseFloat(s[1],10);
+s=d[1].split(",");
+this.control.x=parseFloat(s[0].substr(1),10);
+this.control.y=parseFloat(s[1],10);
+s=d[2].split(",");
+this.end.x=parseFloat(s[0],10);
+this.end.y=parseFloat(s[1],10);
+var _5=this.property("stroke");
+var _6=c.getAttribute("style");
+var m=_6.match(/stroke:([^;]+);/);
+if(m){
+_5.color=m[1];
+this.property("fill",m[1]);
+}
+m=_6.match(/stroke-width:([^;]+);/);
+if(m){
+_5.width=m[1];
+}
+this.property("stroke",_5);
+}
+}
+}
+};
+p.initialize=function(_7){
+this.apply(_7);
+this._pos();
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.pathShape=this.shape.createPath("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign});
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.shape.remove(this.pathShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.pathShape=this.labelShape=null;
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.control.x,this.end.x);
+var y=Math.min(this.start.y,this.control.y,this.end.y);
+var w=Math.max(this.start.x,this.control.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.control.y,this.end.y)-y;
+return {x:x,y:y,width:w,height:h};
+};
+p.draw=function(_8){
+this.apply(_8);
+this._pos();
+this.shape.setTransform(this.transform);
+this.pathShape.setShape("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.serialize=function(){
+var _9=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<path style=\"stroke:"+_9.color+";stroke-width:"+_9.width+";fill:none;\" d=\""+"M"+this.start.x+","+this.start.y+" "+"Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+"\" />"+"<text style=\"fill:"+_9.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("Lead");
+})();
+}
Index: trunk/web/dojo/dojox/sketch/UnderlineAnnotation.js
===================================================================
--- trunk/web/dojo/dojox/sketch/UnderlineAnnotation.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/UnderlineAnnotation.js	(revision 9)
@@ -0,0 +1,113 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.UnderlineAnnotation"]){
+dojo._hasResource["dojox.sketch.UnderlineAnnotation"]=true;
+dojo.provide("dojox.sketch.UnderlineAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.UnderlineAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.property("label","#");
+this.labelShape=null;
+this.lineShape=null;
+};
+ta.UnderlineAnnotation.prototype=new ta.Annotation;
+var p=ta.UnderlineAnnotation.prototype;
+p.constructor=ta.UnderlineAnnotation;
+p.type=function(){
+return "Underline";
+};
+p.getType=function(){
+return ta.UnderlineAnnotation;
+};
+p.apply=function(_2){
+if(!_2){
+return;
+}
+if(_2.documentElement){
+_2=_2.documentElement;
+}
+this.readCommonAttrs(_2);
+for(var i=0;i<_2.childNodes.length;i++){
+var c=_2.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes[0].nodeValue);
+var _3=c.getAttribute("style");
+var m=_3.match(/fill:([^;]+);/);
+if(m){
+var _4=this.property("stroke");
+_4.collor=m[1];
+this.property("stroke",_4);
+this.property("fill",_4.collor);
+}
+}
+}
+};
+p.initialize=function(_5){
+this.apply(_5);
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.labelShape=this.shape.createText({x:0,y:0,text:this.property("label"),decoration:"underline",align:"start"});
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.lineShape=this.shape.createLine({x1:1,x2:this.labelShape.getTextWidth(),y1:2,y2:2});
+this.lineShape.getEventSource().setAttribute("shape-rendering","crispEdges");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.shape.remove(this.labelShape);
+this.shape.remove(this.lineShape);
+this.figure.group.remove(this.shape);
+this.shape=this.lineShape=this.labelShape=null;
+};
+p.getBBox=function(){
+var b=this.getTextBox();
+var z=this.figure.zoomFactor;
+return {x:0,y:(b.h*-1+4)/z,width:(b.w+2)/z,height:b.h/z};
+};
+p.draw=function(_6){
+this.apply(_6);
+this.shape.setTransform(this.transform);
+this.labelShape.setShape({x:0,y:0,text:this.property("label")}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(_7){
+if(this.labelShape){
+_7=_7||this.figure.zoomFactor;
+var _8=dojox.gfx.renderer=="vml"?0:2/_7;
+ta.Annotation.prototype.zoom.call(this,_7);
+_7=dojox.gfx.renderer=="vml"?1:_7;
+this.lineShape.setShape({x1:0,x2:this.getBBox().width-_8,y1:2,y2:2}).setStroke({color:this.property("fill"),width:1/_7});
+if(this.mode==ta.Annotation.Modes.Edit){
+this.drawBBox();
+}
+}
+};
+p.serialize=function(){
+var s=this.property("stroke");
+return "<g "+this.writeCommonAttrs()+">"+"<text style=\"fill:"+this.property("fill")+";\" font-weight=\"bold\" text-decoration=\"underline\" "+"x=\"0\" y=\"0\">"+this.property("label")+"</text>"+"</g>";
+};
+dojo.declare("dojox.sketch.UnderlineAnnotationTool",ta.AnnotationTool,{onMouseDown:function(){
+},onMouseUp:function(){
+var f=this.figure;
+if(!f._start){
+return;
+}
+f._end={x:0,y:0};
+this._create(f._start,{x:f._start.x+10,y:f._start.y+10});
+},onMouseMove:function(){
+}});
+ta.Annotation.register("Underline",ta.UnderlineAnnotationTool);
+})();
+}
Index: trunk/web/dojo/dojox/sketch/Figure.js
===================================================================
--- trunk/web/dojo/dojox/sketch/Figure.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/Figure.js	(revision 9)
@@ -0,0 +1,470 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Figure"]){
+dojo._hasResource["dojox.sketch.Figure"]=true;
+dojo.provide("dojox.sketch.Figure");
+dojo.experimental("dojox.sketch");
+dojo.require("dojox.gfx");
+dojo.require("dojox.sketch.UndoStack");
+(function(){
+var ta=dojox.sketch;
+ta.tools={};
+ta.registerTool=function(_1,fn){
+ta.tools[_1]=fn;
+};
+ta.Figure=function(_2){
+var _3=this;
+this.annCounter=1;
+this.shapes=[];
+this.image=null;
+this.imageSrc=null;
+this.size={w:0,h:0};
+this.surface=null;
+this.group=null;
+this.node=null;
+this.zoomFactor=1;
+this.tools=null;
+this.obj={};
+dojo.mixin(this,_2);
+this.selected=[];
+this.hasSelections=function(){
+return this.selected.length>0;
+};
+this.isSelected=function(_4){
+for(var i=0;i<_3.selected.length;i++){
+if(_3.selected[i]==_4){
+return true;
+}
+}
+return false;
+};
+this.select=function(_5){
+if(!_3.isSelected(_5)){
+_3.clearSelections();
+_3.selected=[_5];
+}
+_5.setMode(ta.Annotation.Modes.View);
+_5.setMode(ta.Annotation.Modes.Edit);
+};
+this.deselect=function(_6){
+var _7=-1;
+for(var i=0;i<_3.selected.length;i++){
+if(_3.selected[i]==_6){
+_7=i;
+break;
+}
+}
+if(_7>-1){
+_6.setMode(ta.Annotation.Modes.View);
+_3.selected.splice(_7,1);
+}
+return _6;
+};
+this.clearSelections=function(){
+for(var i=0;i<_3.selected.length;i++){
+_3.selected[i].setMode(ta.Annotation.Modes.View);
+}
+_3.selected=[];
+};
+this.replaceSelection=function(n,o){
+if(!_3.isSelected(o)){
+_3.select(n);
+return;
+}
+var _8=-1;
+for(var i=0;i<_3.selected.length;i++){
+if(_3.selected[i]==o){
+_8=i;
+break;
+}
+}
+if(_8>-1){
+_3.selected.splice(_8,1,n);
+}
+};
+this._c=null;
+this._ctr=null;
+this._lp=null;
+this._action=null;
+this._prevState=null;
+this._startPoint=null;
+this._ctool=null;
+this._start=null;
+this._end=null;
+this._absEnd=null;
+this._cshape=null;
+this._dblclick=function(e){
+var o=_3._fromEvt(e);
+if(o){
+_3.onDblClickShape(o,e);
+}
+};
+this._keydown=function(e){
+var _9=false;
+if(e.ctrlKey){
+if(e.keyCode===90||e.keyCode===122){
+_3.undo();
+_9=true;
+}else{
+if(e.keyCode===89||e.keyCode===121){
+_3.redo();
+_9=true;
+}
+}
+}
+if(e.keyCode===46||e.keyCode===8){
+_3._delete(_3.selected);
+_9=true;
+}
+if(_9){
+dojo.stopEvent(e);
+}
+};
+this._md=function(e){
+if(dojox.gfx.renderer=="vml"){
+_3.node.focus();
+}
+var o=_3._fromEvt(e);
+_3._startPoint={x:e.pageX,y:e.pageY};
+_3._ctr=dojo.position(_3.node);
+var _a={x:_3.node.scrollLeft,y:_3.node.scrollTop};
+_3._ctr={x:_3._ctr.x-_a.x,y:_3._ctr.y-_a.y};
+var X=e.clientX-_3._ctr.x,Y=e.clientY-_3._ctr.y;
+_3._lp={x:X,y:Y};
+_3._start={x:X,y:Y};
+_3._end={x:X,y:Y};
+_3._absEnd={x:X,y:Y};
+if(!o){
+_3.clearSelections();
+_3._ctool.onMouseDown(e);
+}else{
+if(o.type&&o.type()!="Anchor"){
+if(!_3.isSelected(o)){
+_3.select(o);
+_3._sameShapeSelected=false;
+}else{
+_3._sameShapeSelected=true;
+}
+}
+o.beginEdit();
+_3._c=o;
+}
+};
+this._mm=function(e){
+if(!_3._ctr){
+return;
+}
+var x=e.clientX-_3._ctr.x;
+var y=e.clientY-_3._ctr.y;
+var dx=x-_3._lp.x;
+var dy=y-_3._lp.y;
+_3._absEnd={x:x,y:y};
+if(_3._c){
+_3._c.setBinding({dx:dx/_3.zoomFactor,dy:dy/_3.zoomFactor});
+_3._lp={x:x,y:y};
+}else{
+_3._end={x:dx,y:dy};
+var _b={x:Math.min(_3._start.x,_3._absEnd.x),y:Math.min(_3._start.y,_3._absEnd.y),width:Math.abs(_3._start.x-_3._absEnd.x),height:Math.abs(_3._start.y-_3._absEnd.y)};
+if(_b.width&&_b.height){
+_3._ctool.onMouseMove(e,_b);
+}
+}
+};
+this._mu=function(e){
+if(_3._c){
+_3._c.endEdit();
+}else{
+_3._ctool.onMouseUp(e);
+}
+_3._c=_3._ctr=_3._lp=_3._action=_3._prevState=_3._startPoint=null;
+_3._cshape=_3._start=_3._end=_3._absEnd=null;
+};
+this.initUndoStack();
+};
+var p=ta.Figure.prototype;
+p.initUndoStack=function(){
+this.history=new ta.UndoStack(this);
+};
+p.setTool=function(t){
+this._ctool=t;
+};
+p.gridSize=0;
+p._calCol=function(v){
+return this.gridSize?(Math.round(v/this.gridSize)*this.gridSize):v;
+};
+p._delete=function(_c,_d){
+for(var i=0;i<_c.length;i++){
+_c[i].setMode(ta.Annotation.Modes.View);
+_c[i].destroy(_d);
+this.remove(_c[i]);
+this._remove(_c[i]);
+if(!_d){
+_c[i].onRemove();
+}
+}
+_c.splice(0,_c.length);
+};
+p.onDblClickShape=function(_e,e){
+if(_e["onDblClick"]){
+_e.onDblClick(e);
+}
+};
+p.onCreateShape=function(_f){
+};
+p.onBeforeCreateShape=function(_10){
+};
+p.initialize=function(_11){
+this.node=_11;
+this.surface=dojox.gfx.createSurface(_11,this.size.w,this.size.h);
+this.group=this.surface.createGroup();
+this._cons=[];
+var es=this.surface.getEventSource();
+this._cons.push(dojo.connect(es,"ondraggesture",dojo.stopEvent),dojo.connect(es,"ondragenter",dojo.stopEvent),dojo.connect(es,"ondragover",dojo.stopEvent),dojo.connect(es,"ondragexit",dojo.stopEvent),dojo.connect(es,"ondragstart",dojo.stopEvent),dojo.connect(es,"onselectstart",dojo.stopEvent),dojo.connect(es,"onmousedown",this._md),dojo.connect(es,"onmousemove",this._mm),dojo.connect(es,"onmouseup",this._mu),dojo.connect(es,"onclick",this,"onClick"),dojo.connect(es,"ondblclick",this._dblclick),dojo.connect(_11,"onkeydown",this._keydown));
+this.image=this.group.createImage({width:this.imageSize.w,height:this.imageSize.h,src:this.imageSrc});
+};
+p.destroy=function(_12){
+if(!this.node){
+return;
+}
+if(!_12){
+if(this.history){
+this.history.destroy();
+}
+if(this._subscribed){
+dojo.unsubscribe(this._subscribed);
+delete this._subscribed;
+}
+}
+dojo.forEach(this._cons,dojo.disconnect);
+this._cons=[];
+dojo.empty(this.node);
+this.group=this.surface=null;
+this.obj={};
+this.shapes=[];
+};
+p.nextKey=function(){
+return "annotation-"+this.annCounter++;
+};
+p.draw=function(){
+};
+p.zoom=function(pct){
+this.zoomFactor=pct/100;
+var w=this.size.w*this.zoomFactor;
+var h=this.size.h*this.zoomFactor;
+this.surface.setDimensions(w,h);
+this.group.setTransform(dojox.gfx.matrix.scale(this.zoomFactor,this.zoomFactor));
+for(var i=0;i<this.shapes.length;i++){
+this.shapes[i].zoom(this.zoomFactor);
+}
+};
+p.getFit=function(){
+var wF=(this.node.parentNode.offsetWidth-5)/this.size.w;
+var hF=(this.node.parentNode.offsetHeight-5)/this.size.h;
+return Math.min(wF,hF)*100;
+};
+p.unzoom=function(){
+this.zoomFactor=1;
+this.surface.setDimensions(this.size.w,this.size.h);
+this.group.setTransform();
+};
+p._add=function(obj){
+this.obj[obj._key]=obj;
+};
+p._remove=function(obj){
+if(this.obj[obj._key]){
+delete this.obj[obj._key];
+}
+};
+p._get=function(key){
+if(key&&key.indexOf("bounding")>-1){
+key=key.replace("-boundingBox","");
+}else{
+if(key&&key.indexOf("-labelShape")>-1){
+key=key.replace("-labelShape","");
+}
+}
+return this.obj[key];
+};
+p._keyFromEvt=function(e){
+var key=e.target.id+"";
+if(key.length==0){
+var p=e.target.parentNode;
+var _13=this.surface.getEventSource();
+while(p&&p.id.length==0&&p!=_13){
+p=p.parentNode;
+}
+key=p.id;
+}
+return key;
+};
+p._fromEvt=function(e){
+return this._get(this._keyFromEvt(e));
+};
+p.add=function(_14){
+for(var i=0;i<this.shapes.length;i++){
+if(this.shapes[i]==_14){
+return true;
+}
+}
+this.shapes.push(_14);
+return true;
+};
+p.remove=function(_15){
+var idx=-1;
+for(var i=0;i<this.shapes.length;i++){
+if(this.shapes[i]==_15){
+idx=i;
+break;
+}
+}
+if(idx>-1){
+this.shapes.splice(idx,1);
+}
+return _15;
+};
+p.getAnnotator=function(id){
+for(var i=0;i<this.shapes.length;i++){
+if(this.shapes[i].id==id){
+return this.shapes[i];
+}
+}
+return null;
+};
+p.convert=function(ann,t){
+var _16=t+"Annotation";
+if(!ta[_16]){
+return;
+}
+var _17=ann.type(),id=ann.id,_18=ann.label,_19=ann.mode,_1a=ann.tokenId;
+var _1b,end,_1c,_1d;
+switch(_17){
+case "Preexisting":
+case "Lead":
+_1d={dx:ann.transform.dx,dy:ann.transform.dy};
+_1b={x:ann.start.x,y:ann.start.y};
+end={x:ann.end.x,y:ann.end.y};
+var cx=end.x-((end.x-_1b.x)/2);
+var cy=end.y-((end.y-_1b.y)/2);
+_1c={x:cx,y:cy};
+break;
+case "SingleArrow":
+case "DoubleArrow":
+_1d={dx:ann.transform.dx,dy:ann.transform.dy};
+_1b={x:ann.start.x,y:ann.start.y};
+end={x:ann.end.x,y:ann.end.y};
+_1c={x:ann.control.x,y:ann.control.y};
+break;
+case "Underline":
+_1d={dx:ann.transform.dx,dy:ann.transform.dy};
+_1b={x:ann.start.x,y:ann.start.y};
+_1c={x:_1b.x+50,y:_1b.y+50};
+end={x:_1b.x+100,y:_1b.y+100};
+break;
+case "Brace":
+}
+var n=new ta[_16](this,id);
+if(n.type()=="Underline"){
+n.transform={dx:_1d.dx+_1b.x,dy:_1d.dy+_1b.y};
+}else{
+if(n.transform){
+n.transform=_1d;
+}
+if(n.start){
+n.start=_1b;
+}
+}
+if(n.end){
+n.end=end;
+}
+if(n.control){
+n.control=_1c;
+}
+n.label=_18;
+n.token=dojo.lang.shallowCopy(ann.token);
+n.initialize();
+this.replaceSelection(n,ann);
+this._remove(ann);
+this.remove(ann);
+ann.destroy();
+n.setMode(_19);
+};
+p.setValue=function(_1e){
+var obj=dojox.xml.DomParser.parse(_1e);
+var _1f=this.node;
+this.load(obj,_1f);
+};
+p.load=function(obj,n){
+if(this.surface){
+this.destroy(true);
+}
+var _20=obj.documentElement;
+this.size={w:parseFloat(_20.getAttribute("width"),10),h:parseFloat(_20.getAttribute("height"),10)};
+var g=_20.childrenByName("g")[0];
+var img=g.childrenByName("image")[0];
+this.imageSize={w:parseFloat(img.getAttribute("width"),10),h:parseFloat(img.getAttribute("height"),10)};
+this.imageSrc=img.getAttribute("xlink:href");
+this.initialize(n);
+var ann=g.childrenByName("g");
+for(var i=0;i<ann.length;i++){
+this._loadAnnotation(ann[i]);
+}
+if(this._loadDeferred){
+this._loadDeferred.callback(this);
+this._loadDeferred=null;
+}
+this.onLoad();
+};
+p.onLoad=function(){
+};
+p.onClick=function(){
+};
+p._loadAnnotation=function(obj){
+var _21=obj.getAttribute("dojoxsketch:type")+"Annotation";
+if(ta[_21]){
+var a=new ta[_21](this,obj.id);
+a.initialize(obj);
+this.nextKey();
+a.setMode(ta.Annotation.Modes.View);
+this._add(a);
+return a;
+}
+return null;
+};
+p.onUndo=function(){
+};
+p.onBeforeUndo=function(){
+};
+p.onRedo=function(){
+};
+p.onBeforeRedo=function(){
+};
+p.undo=function(){
+if(this.history){
+this.onBeforeUndo();
+this.history.undo();
+this.onUndo();
+}
+};
+p.redo=function(){
+if(this.history){
+this.onBeforeRedo();
+this.history.redo();
+this.onRedo();
+}
+};
+p.serialize=function(){
+var s="<svg xmlns=\"http://www.w3.org/2000/svg\" "+"xmlns:xlink=\"http://www.w3.org/1999/xlink\" "+"xmlns:dojoxsketch=\"http://dojotoolkit.org/dojox/sketch\" "+"width=\""+this.size.w+"\" height=\""+this.size.h+"\">"+"<g>"+"<image xlink:href=\""+this.imageSrc+"\" x=\"0\" y=\"0\" width=\""+this.size.w+"\" height=\""+this.size.h+"\" />";
+for(var i=0;i<this.shapes.length;i++){
+s+=this.shapes[i].serialize();
+}
+s+="</g></svg>";
+return s;
+};
+p.getValue=p.serialize;
+})();
+}
Index: trunk/web/dojo/dojox/sketch/README
===================================================================
--- trunk/web/dojo/dojox/sketch/README	(revision 0)
+++ trunk/web/dojo/dojox/sketch/README	(revision 9)
@@ -0,0 +1,58 @@
+-------------------------------------------------------------------------------
+dojox.sketch
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 28/01/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Contributed by TeamPatent (supported by National Science Foundation grant 638334)
+  Tom Trenka (ttrenka@gmail.com)
+  Heng Liu/LiuCougar (heng@teampatent.com)
+-------------------------------------------------------------------------------
+Project description
+
+A cross-browser drawing editor based on dojox.gfx.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dijit (Toolbar, Button, Slider)
+dojox.gfx
+dojox.xml
+-------------------------------------------------------------------------------
+Documentation
+
+Currently, 5 shapes are supported: line, single arrow line, double arrow line,
+underline text and text. The first 3 shapes can have optinal text associated.
+
+Shapes can be added, deleted, moved and modified. All of these operations can
+be undo-ed or redo-ed.
+
+TODO:
+ * provide UI to change various properties on shapes (fill, stroke, text) and
+allow changing of background image
+ * serialize/unserialize in dojox.gfx to svg (and maybe vml as well?) (or another
+simplier format? such as a json based one, which is easier to parse, and then
+write a convertor to convert the json format to svg or any other format?)
+ * Move mousedown/up/move to each shape (to prepare for the following)
+ * Add shapes for other primitive shapes (needs to decide which primitive 
+dojox.gfx.shapes are useful), and add in support for user to group any 
+shapes/groups to form a single "compound shape" (need to add support to set 
+fill/stroke properties on the entire compound shape, which shallpropagate to 
+all children shapes)
+-------------------------------------------------------------------------------
+Installation instructions
+
+Install dijit, dojox.gfx and dojox.xml first
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/sketch.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/sketch/*
+
+Install into the following directory structure:
+/dojox/sketch/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/sketch/Slider.js
===================================================================
--- trunk/web/dojo/dojox/sketch/Slider.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/Slider.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Slider"]){
+dojo._hasResource["dojox.sketch.Slider"]=true;
+dojo.provide("dojox.sketch.Slider");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.declare("dojox.sketch.Slider",dojox.sketch._Plugin,{_initButton:function(){
+this.slider=new dijit.form.HorizontalSlider({minimum:5,maximum:100,style:"width:100px;float:right"});
+this.slider._movable.node.title="Double Click to \"Zoom to Fit\"";
+this.connect(this.slider,"onChange","_setZoom");
+this.connect(this.slider.sliderHandle,"ondblclick","_zoomToFit");
+},_zoomToFit:function(){
+var r=this.figure.getFit();
+this.slider.attr("value",this.slider.maximum<r?this.slider.maximum:(this.slider.minimum>r?this.slider.minimum:r));
+},_setZoom:function(v){
+if(v&&this.figure){
+this.figure.zoom(v);
+}
+},reset:function(){
+this.slider.attr("value",this.slider.maximum);
+this._zoomToFit();
+},setToolbar:function(t){
+this._initButton();
+t.addChild(this.slider);
+if(!t._reset2Zoom){
+t._reset2Zoom=true;
+this.connect(t,"reset","reset");
+}
+}});
+dojox.sketch.registerTool("Slider",dojox.sketch.Slider);
+}
Index: trunk/web/dojo/dojox/sketch/Toolbar.js
===================================================================
--- trunk/web/dojo/dojox/sketch/Toolbar.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/Toolbar.js	(revision 9)
@@ -0,0 +1,83 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.Toolbar"]){
+dojo._hasResource["dojox.sketch.Toolbar"]=true;
+dojo.provide("dojox.sketch.Toolbar");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.sketch.ButtonGroup",null,{constructor:function(){
+this._childMaps={};
+this._children=[];
+},add:function(_1){
+this._childMaps[_1]=_1.connect(_1,"onActivate",dojo.hitch(this,"_resetGroup",_1));
+this._children.push(_1);
+},_resetGroup:function(p){
+var cs=this._children;
+dojo.forEach(cs,function(c){
+if(p!=c&&c["attr"]){
+c.attr("checked",false);
+}
+});
+}});
+dojo.declare("dojox.sketch.Toolbar",dijit.Toolbar,{figure:null,plugins:null,postCreate:function(){
+this.inherited(arguments);
+this.shapeGroup=new dojox.sketch.ButtonGroup;
+if(!this.plugins){
+this.plugins=["Slider","Lead","SingleArrow","DoubleArrow","Underline","Preexisting"];
+}
+this._plugins=[];
+dojo.forEach(this.plugins,function(_2){
+var _3=dojo.isString(_2)?_2:_2.name;
+var p=new dojox.sketch.tools[_3](_2.args||{});
+this._plugins.push(p);
+p.setToolbar(this);
+if(!this._defaultTool&&p.button){
+this._defaultTool=p;
+}
+},this);
+},setFigure:function(f){
+this.figure=f;
+this.connect(f,"onLoad","reset");
+dojo.forEach(this._plugins,function(p){
+p.setFigure(f);
+});
+},destroy:function(){
+dojo.forEach(this._plugins,function(p){
+p.destroy();
+});
+this.inherited(arguments);
+delete this._defaultTool;
+delete this._plugins;
+},addGroupItem:function(_4,_5){
+if(_5!="toolsGroup"){
+console.error("not supported group "+_5);
+return;
+}
+this.shapeGroup.add(_4);
+},reset:function(){
+this._defaultTool.activate();
+},_setShape:function(s){
+if(!this.figure.surface){
+return;
+}
+if(this.figure.hasSelections()){
+for(var i=0;i<this.figure.selected.length;i++){
+var _6=this.figure.selected[i].serialize();
+this.figure.convert(this.figure.selected[i],s);
+this.figure.history.add(dojox.sketch.CommandTypes.Convert,this.figure.selected[i],_6);
+}
+}
+}});
+dojox.sketch.makeToolbar=function(_7,_8){
+var _9=new dojox.sketch.Toolbar();
+_9.setFigure(_8);
+_7.appendChild(_9.domNode);
+return _9;
+};
+}
Index: trunk/web/dojo/dojox/sketch/SingleArrowAnnotation.js
===================================================================
--- trunk/web/dojo/dojox/sketch/SingleArrowAnnotation.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch/SingleArrowAnnotation.js	(revision 9)
@@ -0,0 +1,185 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch.SingleArrowAnnotation"]){
+dojo._hasResource["dojox.sketch.SingleArrowAnnotation"]=true;
+dojo.provide("dojox.sketch.SingleArrowAnnotation");
+dojo.require("dojox.sketch.Annotation");
+dojo.require("dojox.sketch.Anchor");
+(function(){
+var ta=dojox.sketch;
+ta.SingleArrowAnnotation=function(_1,id){
+ta.Annotation.call(this,_1,id);
+this.transform={dx:0,dy:0};
+this.start={x:0,y:0};
+this.control={x:100,y:-50};
+this.end={x:200,y:0};
+this.textPosition={x:0,y:0};
+this.textOffset=4;
+this.textYOffset=10;
+this.rotation=0;
+this.pathShape=null;
+this.arrowhead=null;
+this.arrowheadGroup=null;
+this.labelShape=null;
+this.anchors.start=new ta.Anchor(this,"start");
+this.anchors.control=new ta.Anchor(this,"control");
+this.anchors.end=new ta.Anchor(this,"end");
+};
+ta.SingleArrowAnnotation.prototype=new ta.Annotation;
+var p=ta.SingleArrowAnnotation.prototype;
+p.constructor=ta.SingleArrowAnnotation;
+p.type=function(){
+return "SingleArrow";
+};
+p.getType=function(){
+return ta.SingleArrowAnnotation;
+};
+p._rot=function(){
+var _2=this.control.y-this.start.y;
+var _3=this.control.x-this.start.x;
+this.rotation=Math.atan2(_2,_3);
+};
+p._pos=function(){
+var _4=this.textOffset,x=0,y=0;
+var _5=this.calculate.slope(this.control,this.end);
+this.textAlign="middle";
+if(Math.abs(_5)>=1){
+x=this.end.x+this.calculate.dx(this.control,this.end,_4);
+if(this.control.y>this.end.y){
+y=this.end.y-_4;
+}else{
+y=this.end.y+_4+this.textYOffset;
+}
+}else{
+if(_5==0){
+x=this.end.x+_4;
+y=this.end.y+this.textYOffset;
+}else{
+if(this.start.x>this.end.x){
+x=this.end.x-_4;
+this.textAlign="end";
+}else{
+x=this.end.x+_4;
+this.textAlign="start";
+}
+if(this.start.y<this.end.y){
+y=this.end.y+this.calculate.dy(this.control,this.end,_4)+this.textYOffset;
+}else{
+y=this.end.y+this.calculate.dy(this.control,this.end,-_4);
+}
+}
+}
+this.textPosition={x:x,y:y};
+};
+p.apply=function(_6){
+if(!_6){
+return;
+}
+if(_6.documentElement){
+_6=_6.documentElement;
+}
+this.readCommonAttrs(_6);
+for(var i=0;i<_6.childNodes.length;i++){
+var c=_6.childNodes[i];
+if(c.localName=="text"){
+this.property("label",c.childNodes.length?c.childNodes[0].nodeValue:"");
+}else{
+if(c.localName=="path"){
+var d=c.getAttribute("d").split(" ");
+var s=d[0].split(",");
+this.start.x=parseFloat(s[0].substr(1),10);
+this.start.y=parseFloat(s[1],10);
+s=d[1].split(",");
+this.control.x=parseFloat(s[0].substr(1),10);
+this.control.y=parseFloat(s[1],10);
+s=d[2].split(",");
+this.end.x=parseFloat(s[0],10);
+this.end.y=parseFloat(s[1],10);
+var _7=this.property("stroke");
+var _8=c.getAttribute("style");
+var m=_8.match(/stroke:([^;]+);/);
+if(m){
+_7.color=m[1];
+this.property("fill",m[1]);
+}
+m=_8.match(/stroke-width:([^;]+);/);
+if(m){
+_7.width=m[1];
+}
+this.property("stroke",_7);
+}
+}
+}
+};
+p.initialize=function(_9){
+var _a=(ta.Annotation.labelFont)?ta.Annotation.labelFont:{family:"Times",size:"16px"};
+this.apply(_9);
+this._rot();
+this._pos();
+var _b=this.rotation;
+var _c=dojox.gfx.matrix.rotate(_b);
+this.shape=this.figure.group.createGroup();
+this.shape.getEventSource().setAttribute("id",this.id);
+this.pathShape=this.shape.createPath("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.arrowheadGroup=this.shape.createGroup();
+this.arrowhead=this.arrowheadGroup.createPath();
+this.labelShape=this.shape.createText({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign});
+this.labelShape.getEventSource().setAttribute("id",this.id+"-labelShape");
+this.draw();
+};
+p.destroy=function(){
+if(!this.shape){
+return;
+}
+this.arrowheadGroup.remove(this.arrowhead);
+this.shape.remove(this.arrowheadGroup);
+this.shape.remove(this.pathShape);
+this.shape.remove(this.labelShape);
+this.figure.group.remove(this.shape);
+this.shape=this.pathShape=this.labelShape=this.arrowheadGroup=this.arrowhead=null;
+};
+p.draw=function(_d){
+this.apply(_d);
+this._rot();
+this._pos();
+var _e=this.rotation;
+var _f=dojox.gfx.matrix.rotate(_e);
+this.shape.setTransform(this.transform);
+this.pathShape.setShape("M"+this.start.x+","+this.start.y+" Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+" l0,0");
+this.arrowheadGroup.setTransform({dx:this.start.x,dy:this.start.y}).applyTransform(_f);
+this.arrowhead.setFill(this.property("fill"));
+this.labelShape.setShape({x:this.textPosition.x,y:this.textPosition.y,text:this.property("label"),align:this.textAlign}).setFill(this.property("fill"));
+this.zoom();
+};
+p.zoom=function(pct){
+if(this.arrowhead){
+pct=pct||this.figure.zoomFactor;
+ta.Annotation.prototype.zoom.call(this,pct);
+if(this._curPct!==pct){
+this._curPct=pct;
+var l=pct>1?20:Math.floor(20/pct),w=pct>1?5:Math.floor(5/pct),h=pct>1?3:Math.floor(3/pct);
+this.arrowhead.setShape("M0,0 l"+l+",-"+w+" -"+h+","+w+" "+h+","+w+" Z");
+}
+}
+};
+p.getBBox=function(){
+var x=Math.min(this.start.x,this.control.x,this.end.x);
+var y=Math.min(this.start.y,this.control.y,this.end.y);
+var w=Math.max(this.start.x,this.control.x,this.end.x)-x;
+var h=Math.max(this.start.y,this.control.y,this.end.y)-y;
+return {x:x,y:y,width:w,height:h};
+};
+p.serialize=function(){
+var s=this.property("stroke");
+var r=this.rotation*(180/Math.PI);
+r=Math.round(r*Math.pow(10,4))/Math.pow(10,4);
+return "<g "+this.writeCommonAttrs()+">"+"<path style=\"stroke:"+s.color+";stroke-width:"+s.width+";fill:none;\" d=\""+"M"+this.start.x+","+this.start.y+" "+"Q"+this.control.x+","+this.control.y+" "+this.end.x+","+this.end.y+"\" />"+"<g transform=\"translate("+this.start.x+","+this.start.y+") "+"rotate("+r+")\">"+"<path style=\"fill:"+s.color+";\" d=\"M0,0 l20,-5, -3,5, 3,5 Z\" />"+"</g>"+"<text style=\"fill:"+s.color+";text-anchor:"+this.textAlign+"\" font-weight=\"bold\" "+"x=\""+this.textPosition.x+"\" "+"y=\""+this.textPosition.y+"\">"+this.property("label")+"</text>"+"</g>";
+};
+ta.Annotation.register("SingleArrow");
+})();
+}
Index: trunk/web/dojo/dojox/LICENSE
===================================================================
--- trunk/web/dojo/dojox/LICENSE	(revision 0)
+++ trunk/web/dojo/dojox/LICENSE	(revision 9)
@@ -0,0 +1,195 @@
+Dojo is available under *either* the terms of the modified BSD license *or* the
+Academic Free License version 2.1. As a recipient of Dojo, you may choose which
+license to receive this code under (except as noted in per-module LICENSE
+files). Some modules may not be the copyright of the Dojo Foundation. These
+modules contain explicit declarations of copyright in both the LICENSE files in
+the directories in which they reside and in the code itself. No external
+contributions are allowed under licenses which are fundamentally incompatible
+with the AFL or BSD licenses that Dojo is distributed under.
+
+The text of the AFL and BSD licenses is reproduced below. 
+
+-------------------------------------------------------------------------------
+The "New" BSD License:
+**********************
+
+Copyright (c) 2005-2010, The Dojo Foundation
+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 Dojo Foundation 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.
+
+-------------------------------------------------------------------------------
+The Academic Free License, v. 2.1:
+**********************************
+
+This Academic Free License (the "License") applies to any original work of
+authorship (the "Original Work") whose owner (the "Licensor") has placed the
+following notice immediately following the copyright notice for the Original
+Work:
+
+Licensed under the Academic Free License version 2.1
+
+1) Grant of Copyright License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license to do the
+following:
+
+a) to reproduce the Original Work in copies;
+
+b) to prepare derivative works ("Derivative Works") based upon the Original
+Work;
+
+c) to distribute copies of the Original Work and Derivative Works to the
+public;
+
+d) to perform the Original Work publicly; and
+
+e) to display the Original Work publicly.
+
+2) Grant of Patent License. Licensor hereby grants You a world-wide,
+royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
+claims owned or controlled by the Licensor that are embodied in the Original
+Work as furnished by the Licensor, to make, use, sell and offer for sale the
+Original Work and Derivative Works.
+
+3) Grant of Source Code License. The term "Source Code" means the preferred
+form of the Original Work for making modifications to it and all available
+documentation describing how to modify the Original Work. Licensor hereby
+agrees to provide a machine-readable copy of the Source Code of the Original
+Work along with each copy of the Original Work that Licensor distributes.
+Licensor reserves the right to satisfy this obligation by placing a
+machine-readable copy of the Source Code in an information repository
+reasonably calculated to permit inexpensive and convenient access by You for as
+long as Licensor continues to distribute the Original Work, and by publishing
+the address of that information repository in a notice immediately following
+the copyright notice that applies to the Original Work.
+
+4) Exclusions From License Grant. Neither the names of Licensor, nor the names
+of any contributors to the Original Work, nor any of their trademarks or
+service marks, may be used to endorse or promote products derived from this
+Original Work without express prior written permission of the Licensor. Nothing
+in this License shall be deemed to grant any rights to trademarks, copyrights,
+patents, trade secrets or any other intellectual property of Licensor except as
+expressly stated herein. No patent license is granted to make, use, sell or
+offer to sell embodiments of any patent claims other than the licensed claims
+defined in Section 2. No right is granted to the trademarks of Licensor even if
+such marks are included in the Original Work. Nothing in this License shall be
+interpreted to prohibit Licensor from licensing under different terms from this
+License any Original Work that Licensor otherwise would have a right to
+license.
+
+5) This section intentionally omitted.
+
+6) Attribution Rights. You must retain, in the Source Code of any Derivative
+Works that You create, all copyright, patent or trademark notices from the
+Source Code of the Original Work, as well as any notices of licensing and any
+descriptive text identified therein as an "Attribution Notice." You must cause
+the Source Code for any Derivative Works that You create to carry a prominent
+Attribution Notice reasonably calculated to inform recipients that You have
+modified the Original Work.
+
+7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
+the copyright in and to the Original Work and the patent rights granted herein
+by Licensor are owned by the Licensor or are sublicensed to You under the terms
+of this License with the permission of the contributor(s) of those copyrights
+and patent rights. Except as expressly stated in the immediately proceeding
+sentence, the Original Work is provided under this License on an "AS IS" BASIS
+and WITHOUT WARRANTY, either express or implied, including, without limitation,
+the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
+This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
+license to Original Work is granted hereunder except under this disclaimer.
+
+8) Limitation of Liability. Under no circumstances and under no legal theory,
+whether in tort (including negligence), contract, or otherwise, shall the
+Licensor be liable to any person for any direct, indirect, special, incidental,
+or consequential damages of any character arising as a result of this License
+or the use of the Original Work including, without limitation, damages for loss
+of goodwill, work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses. This limitation of liability shall not
+apply to liability for death or personal injury resulting from Licensor's
+negligence to the extent applicable law prohibits such limitation. Some
+jurisdictions do not allow the exclusion or limitation of incidental or
+consequential damages, so this exclusion and limitation may not apply to You.
+
+9) Acceptance and Termination. If You distribute copies of the Original Work or
+a Derivative Work, You must make a reasonable effort under the circumstances to
+obtain the express assent of recipients to the terms of this License. Nothing
+else but this License (or another written agreement between Licensor and You)
+grants You permission to create Derivative Works based upon the Original Work
+or to exercise any of the rights granted in Section 1 herein, and any attempt
+to do so except under the terms of this License (or another written agreement
+between Licensor and You) is expressly prohibited by U.S. copyright law, the
+equivalent laws of other countries, and by international treaty. Therefore, by
+exercising any of the rights granted to You in Section 1 herein, You indicate
+Your acceptance of this License and all of its terms and conditions.
+
+10) Termination for Patent Action. This License shall terminate automatically
+and You may no longer exercise any of the rights granted to You by this License
+as of the date You commence an action, including a cross-claim or counterclaim,
+against Licensor or any licensee alleging that the Original Work infringes a
+patent. This termination provision shall not apply for an action alleging
+patent infringement by combinations of the Original Work with other software or
+hardware.
+
+11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
+License may be brought only in the courts of a jurisdiction wherein the
+Licensor resides or in which Licensor conducts its primary business, and under
+the laws of that jurisdiction excluding its conflict-of-law provisions. The
+application of the United Nations Convention on Contracts for the International
+Sale of Goods is expressly excluded. Any use of the Original Work outside the
+scope of this License or after its termination shall be subject to the
+requirements and penalties of the U.S. Copyright Act, 17 U.S.C. Â§ 101 et
+seq., the equivalent laws of other countries, and international treaty. This
+section shall survive the termination of this License.
+
+12) Attorneys Fees. In any action to enforce the terms of this License or
+seeking damages relating thereto, the prevailing party shall be entitled to
+recover its costs and expenses, including, without limitation, reasonable
+attorneys' fees and costs incurred in connection with such action, including
+any appeal of such action. This section shall survive the termination of this
+License.
+
+13) Miscellaneous. This License represents the complete agreement concerning
+the subject matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent necessary to
+make it enforceable.
+
+14) Definition of "You" in This License. "You" throughout this License, whether
+in upper or lower case, means an individual or a legal entity exercising rights
+under, and complying with all of the terms of, this License. For legal
+entities, "You" includes any entity that controls, is controlled by, or is
+under common control with you. For purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (ii) ownership of fifty percent
+(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
+entity.
+
+15) Right to Use. You may use the Original Work in all ways not otherwise
+restricted or conditioned by this License or by law, and Licensor promises not
+to interfere with or be responsible for such uses by You.
+
+This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
+Permission is hereby granted to copy and distribute this license without
+modification. This license may not be modified without the express written
+permission of its copyright owner.
Index: trunk/web/dojo/dojox/mobile.js
===================================================================
--- trunk/web/dojo/dojox/mobile.js	(revision 0)
+++ trunk/web/dojo/dojox/mobile.js	(revision 9)
@@ -0,0 +1,13 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mobile"]){
+dojo._hasResource["dojox.mobile"]=true;
+dojo.provide("dojox.mobile");
+dojo.require("dojox.mobile._base");
+dojo.experimental("dojox.mobile");
+}
Index: trunk/web/dojo/dojox/rails.js
===================================================================
--- trunk/web/dojo/dojox/rails.js	(revision 0)
+++ trunk/web/dojo/dojox/rails.js	(revision 9)
@@ -0,0 +1,114 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rails"]){
+dojo._hasResource["dojox.rails"]=true;
+dojo.provide("dojox.rails");
+dojo.require("dojo.NodeList-traverse");
+dojox.rails.live=function(_1,_2,fn){
+if(dojo.isIE&&_2.match(/^(on)?submit$/i)){
+dojox.rails.live(_1,"click",function(_3){
+var _4=_3.target,_5=_4.tagName.toLowerCase();
+if((_5=="input"||_5=="button")&&dojo.attr(_4,"type").toLowerCase()=="submit"){
+var _6=dojo.query(_4).closest("form");
+if(_6.length){
+var h=dojo.connect(_6[0],"submit",function(_7){
+dojo.disconnect(h);
+fn.call(_7.target,_7);
+});
+}
+}
+});
+}else{
+dojo.connect(dojo.body(),_2,function(_8){
+var nl=dojo.query(_8.target).closest(_1);
+if(nl.length){
+fn.call(nl[0],_8);
+}
+});
+}
+};
+dojo.ready((function(d,dr,dg){
+return function(){
+var q=d.query,_9=dr.live,_a=q("meta[name=csrf-token]").attr("content"),_b=q("meta[name=csrf-param]").attr("content");
+var _c=function(_d,_e){
+var _f="<form style=\"display:none\" method=\"post\" action=\""+_d+"\">"+"<input type=\"hidden\" name=\"_method\" value=\""+_e+"\" />"+"<input type=\"hidden\" name=\""+_b+"\" value=\""+_a+"\" />"+"</form>";
+return dojo.place(_f,dojo.body());
+};
+var _10=function(_11){
+d.forEach(_11,function(_12){
+if(!d.attr(_12,"disabled")){
+var _13=_12.tagName.toLowerCase()=="input"?"value":"innerHTML";
+var _14=d.attr(_12,"data-disable-with");
+var _15=d.attr(_12,_13);
+d.attr(_12,"disabled",true);
+d.attr(_12,"data-original-value",_15);
+d.attr(_12,_13,_14);
+}
+});
+};
+var _16={"text":"text","json":"application/json","json-comment-optional":"text","json-comment-filtered":"text","javascript":"application/javascript","xml":"text/xml"};
+var _17=function(evt){
+var el=evt.target,tag=el.tagName.toLowerCase();
+var _18=tag.toLowerCase()=="form"?d.formToObject(el):{},_19=d.attr(el,"data-type")||"javascript",_1a=(d.attr(el,"method")||d.attr(el,"data-method")||"get").toLowerCase(),url=d.attr(el,"action")||d.attr(el,"href");
+if(tag!="form"&&_1a!="get"){
+el=_c(url,_1a);
+_1a="POST";
+}
+evt.preventDefault();
+d.publish("ajax:before",[el]);
+var _1b=d.xhr(_1a,{url:url,headers:{"Accept":_16[_19]},content:_18,handleAs:_19,load:function(_1c,_1d){
+d.publish("ajax:success",[el,_1c,_1d]);
+},error:function(_1e,_1f){
+d.publish("ajax:failure",[el,_1e,_1f]);
+},handle:function(_20,_21){
+d.publish("ajax:complete",[el,_20,_21]);
+}});
+d.publish("ajax:after",[el]);
+};
+var _22=function(el){
+q("*[data-disable-with][disabled]",el).forEach(function(_23){
+var _24=_23.tagName.toLowerCase()=="input"?"value":"innerHTML";
+var _25=d.attr(_23,"data-original-value");
+d.attr(_23,"disabled",false);
+d.attr(_23,"data-original-value",null);
+d.attr(_23,_24,_25);
+});
+};
+var _26=function(evt){
+var el=evt.target,_27=_c(el.href,dojo.attr(el,"data-method"));
+evt.preventDefault();
+_27.submit();
+};
+var _28=function(evt){
+var el=evt.target,_29=q("*[data-disable-with]",el);
+if(_29.length){
+_10(_29);
+}
+if(d.attr(el,"data-remote")){
+evt.preventDefault();
+_17(evt);
+}
+};
+var _2a=function(evt){
+var _2b=dg.confirm(d.attr(evt.target,"data-confirm"));
+if(!_2b){
+evt.preventDefault();
+}else{
+if(d.attr(evt.target,"data-remote")){
+_17(evt);
+}
+}
+};
+_9("*[data-confirm]","click",_2a);
+d.subscribe("ajax:complete",_22);
+_9("a[data-remote]:not([data-confirm])","click",_17);
+_9("a[data-method]:not([data-remote])","click",_26);
+_9("form","submit",_28);
+};
+})(dojo,dojox.rails,dojo.global));
+}
Index: trunk/web/dojo/dojox/analytics/_base.js
===================================================================
--- trunk/web/dojo/dojox/analytics/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/_base.js	(revision 9)
@@ -0,0 +1,82 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics._base"]){
+dojo._hasResource["dojox.analytics._base"]=true;
+dojo.provide("dojox.analytics._base");
+dojox.analytics=function(){
+this._data=[];
+this._id=1;
+this.sendInterval=dojo.config["sendInterval"]||5000;
+this.inTransitRetry=dojo.config["inTransitRetry"]||200;
+this.dataUrl=dojo.config["analyticsUrl"]||dojo.moduleUrl("dojox.analytics.logger","dojoxAnalytics.php");
+this.sendMethod=dojo.config["sendMethod"]||"xhrPost";
+this.maxRequestSize=dojo.isIE?2000:dojo.config["maxRequestSize"]||4000;
+dojo.addOnLoad(this,"schedulePusher");
+dojo.addOnUnload(this,"pushData",true);
+};
+dojo.extend(dojox.analytics,{schedulePusher:function(_1){
+setTimeout(dojo.hitch(this,"checkData"),_1||this.sendInterval);
+},addData:function(_2,_3){
+if(arguments.length>2){
+var c=[];
+for(var i=1;i<arguments.length;i++){
+c.push(arguments[i]);
+}
+_3=c;
+}
+this._data.push({plugin:_2,data:_3});
+},checkData:function(){
+if(this._inTransit){
+this.schedulePusher(this.inTransitRetry);
+return;
+}
+if(this.pushData()){
+return;
+}
+this.schedulePusher();
+},pushData:function(){
+if(this._data.length){
+this._inTransit=this._data;
+this._data=[];
+var _4;
+switch(this.sendMethod){
+case "script":
+_4=dojo.io.script.get({url:this.getQueryPacket(),preventCache:1,callbackParamName:"callback"});
+break;
+case "xhrPost":
+default:
+_4=dojo.xhrPost({url:this.dataUrl,content:{id:this._id++,data:dojo.toJson(this._inTransit)}});
+break;
+}
+_4.addCallback(this,"onPushComplete");
+return _4;
+}
+return false;
+},getQueryPacket:function(){
+while(true){
+var _5={id:this._id++,data:dojo.toJson(this._inTransit)};
+var _6=this.dataUrl+"?"+dojo.objectToQuery(_5);
+if(_6.length>this.maxRequestSize){
+this._data.unshift(this._inTransit.pop());
+this._split=1;
+}else{
+return _6;
+}
+}
+},onPushComplete:function(_7){
+if(this._inTransit){
+delete this._inTransit;
+}
+if(this._data.length>0){
+this.schedulePusher(this.inTransitRetry);
+}else{
+this.schedulePusher();
+}
+}});
+dojox.analytics=new dojox.analytics();
+}
Index: trunk/web/dojo/dojox/analytics/README
===================================================================
--- trunk/web/dojo/dojox/analytics/README	(revision 0)
+++ trunk/web/dojo/dojox/analytics/README	(revision 9)
@@ -0,0 +1,139 @@
+-------------------------------------------------------------------------------
+dojox.analytics
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 12/17/2007
+-------------------------------------------------------------------------------
+Project state: 
+[base]: alpha
+[Urchin]: alpha
+-------------------------------------------------------------------------------
+Project authors
+	Dustin Machi  (dmachi)
+	Peter Higgins (dante)
+-------------------------------------------------------------------------------
+Project description
+	analytics and client monitoring system.  Including the base analytics
+system and any number of plugins enables logging of different system data
+back to the server.  Plugins included at this time:
+
+	dojo - reports dojo startup  collected information
+	window - reports available window information to the server
+	mouseOver - allows periodic sampling of mouseOver 
+	mouseClick - reports any mouse clicks to the server
+	idle - reports idle/activity 
+	consoleMessages - reports console.* messages to the server	
+
+	Additionally, a Google Analytics (Urchin tracker) helper is included
+	in this project, though is unrelated to the Core dojox.analytics 
+	project code. 
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader).
+-------------------------------------------------------------------------------
+Documentation
+
+Usage:
+
+The primary intended usage will be to create a custom build layer that includes 
+the particular plugins you need for your project.   However in practice you
+can use the system as such:
+
+	<script type="text/javascript" src="../../../dojo/dojo.js"
+                djConfig="parseOnLoad: true, isDebug: false, usePlainJson: true, sendMethod: 'script', sendInterval: 5000"></script>
+
+        <script language="JavaScript" type="text/javascript">
+                // include the analytics system
+                dojo.require("dojox.analytics");
+
+                //tracks mouse clicks on the page
+                dojo.require("dojox.analytics.plugins.mouseClick");
+
+                // this plugin returns the informatin dojo collects when it launches
+                dojo.require("dojox.analytics.plugins.dojo");
+
+                // this plugin return the information the window has when it launches
+                // and it also ties to a few events such as window.option
+                dojo.require("dojox.analytics.plugins.window");
+
+                // this plugin tracks console. message, It logs console.error, warn, and
+                // info messages to the tracker.  It also defines console.rlog() which
+                // can be used to log only to the server.  Note that if isDebug() is disabled
+                // you will still see the console messages on the sever, but not in the actual
+                // browser console.
+                dojo.require("dojox.analytics.plugins.consoleMessages");
+
+                // tracks where a mouse is on a page an what it is over, periodically sampling
+                // and storing this data
+                dojo.require("dojox.analytics.plugins.mouseOver");
+
+                //tracks when the user has gone idle
+                dojo.require("dojox.analytics.plugins.idle");
+
+	</script> 
+
+When done using a build, none of the dojo.require() statement will be requires 
+would already be in the build. 
+
+Most of the plugins and the base itself have a number of configurable params
+that are passed in via the djConfig variable set.  This approach is taken so that
+the parameters can be easily provided in the case of a build or for a custom
+dojo.js build with analytics built in. Examples for different build profiles 
+are in the profiles directory.
+
+Available Configuration Parameters:
+
+	Base Configs
+	sendInterval - Normal send interval. Default 5000 
+	sendMethod - "script" || "xhrPost"
+	inTransitRetry - Delay before retrying an a send if it was in transit
+			or if there is still data to be sent after a post.
+			Default 1000
+	analyticsUrl - url to send logging data to. defaults to the test php 
+			file for now
+	maxRequestSize - Maximum size of GET style requests. Capped at 2000 for 
+			IE, and 4000 otherwise	
+
+	consoleMessages Config:
+
+	consoleLogFuncs - functions from the console object that you will log to 
+			the server. If the console object doesn't exist
+			or a particuarl method doesn't exist it will be
+			created as a remote logging only method. This provides
+			a quick and convient way to automatically define
+			a remote logging funciton that includes the functions
+			name in the log.  The 'rlog' in the default paramerters
+			is an example of this.  Defaults to ["error", "warn", "info", "rlog"]	
+
+	idle Config:
+	
+		idleTime - Number of ms to be idle before being reported to the server as idle
+
+	mouseOver config:
+		targetProps - the properties whose values will be reported for each target from
+				a mouse over sample.  defaults to ["id","className","localName","href", "spellcheck", "lang", "textContent", "value" ]
+
+		sampleDelay - the delay in ms between mouseover samples. Defaults to 2500
+
+	window config:
+		windowConnects - methods on the window objec that will be attached to 
+				have its data passed to the server when called.
+
+	
+Note that the basic usage of this system simply serializes json with toJson() when passed
+to the analytics addData() method.  If data is passed that has circular references
+it will die.  Take care not to do that or be surprised when it doens't work
+in those cases.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/analytics
+
+Install into the following directory structure:
+/dojox/analytics/
+
+...which should be at the same level as your Dojo checkout.
Index: trunk/web/dojo/dojox/analytics/plugins/mouseOver.js
===================================================================
--- trunk/web/dojo/dojox/analytics/plugins/mouseOver.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/plugins/mouseOver.js	(revision 9)
@@ -0,0 +1,77 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.mouseOver"]){
+dojo._hasResource["dojox.analytics.plugins.mouseOver"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.mouseOver");
+dojox.analytics.plugins.mouseOver=new (function(){
+this.watchMouse=dojo.config["watchMouseOver"]||true;
+this.mouseSampleDelay=dojo.config["sampleDelay"]||2500;
+this.addData=dojo.hitch(dojox.analytics,"addData","mouseOver");
+this.targetProps=dojo.config["targetProps"]||["id","className","localName","href","spellcheck","lang","textContent","value"];
+this.toggleWatchMouse=function(){
+if(this._watchingMouse){
+dojo.disconnect(this._watchingMouse);
+delete this._watchingMouse;
+return;
+}
+dojo.connect(dojo.doc,"onmousemove",this,"sampleMouse");
+};
+if(this.watchMouse){
+dojo.connect(dojo.doc,"onmouseover",this,"toggleWatchMouse");
+dojo.connect(dojo.doc,"onmouseout",this,"toggleWatchMouse");
+}
+this.sampleMouse=function(e){
+if(!this._rateLimited){
+this.addData("sample",this.trimMouseEvent(e));
+this._rateLimited=true;
+setTimeout(dojo.hitch(this,function(){
+if(this._rateLimited){
+this.trimMouseEvent(this._lastMouseEvent);
+delete this._lastMouseEvent;
+delete this._rateLimited;
+}
+}),this.mouseSampleDelay);
+}
+this._lastMouseEvent=e;
+return e;
+};
+this.trimMouseEvent=function(e){
+var t={};
+for(var i in e){
+switch(i){
+case "target":
+var _1=this.targetProps;
+t[i]={};
+for(var j=0;j<_1.length;j++){
+if(dojo.isObject(e[i])&&_1[j] in e[i]){
+if(_1[j]=="text"||_1[j]=="textContent"){
+if(e[i]["localName"]&&(e[i]["localName"]!="HTML")&&(e[i]["localName"]!="BODY")){
+t[i][_1[j]]=e[i][_1[j]].substr(0,50);
+}
+}else{
+t[i][_1[j]]=e[i][_1[j]];
+}
+}
+}
+break;
+case "x":
+case "y":
+if(e[i]){
+var _2=e[i];
+t[i]=_2+"";
+}
+break;
+default:
+break;
+}
+}
+return t;
+};
+})();
+}
Index: trunk/web/dojo/dojox/analytics/plugins/window.js
===================================================================
--- trunk/web/dojo/dojox/analytics/plugins/window.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/plugins/window.js	(revision 9)
@@ -0,0 +1,37 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.window"]){
+dojo._hasResource["dojox.analytics.plugins.window"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.window");
+dojox.analytics.plugins.window=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","window");
+this.windowConnects=dojo.config["windowConnects"]||["open","onerror"];
+for(var i=0;i<this.windowConnects.length;i++){
+dojo.connect(window,this.windowConnects[i],dojo.hitch(this,"addData",this.windowConnects[i]));
+}
+dojo.addOnLoad(dojo.hitch(this,function(){
+var _1={};
+for(var i in window){
+if(dojo.isObject(window[i])){
+switch(i){
+case "location":
+case "console":
+_1[i]=window[i];
+break;
+default:
+break;
+}
+}else{
+_1[i]=window[i];
+}
+}
+this.addData(_1);
+}));
+})();
+}
Index: trunk/web/dojo/dojox/analytics/plugins/consoleMessages.js
===================================================================
--- trunk/web/dojo/dojox/analytics/plugins/consoleMessages.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/plugins/consoleMessages.js	(revision 9)
@@ -0,0 +1,26 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.consoleMessages"]){
+dojo._hasResource["dojox.analytics.plugins.consoleMessages"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.consoleMessages");
+dojox.analytics.plugins.consoleMessages=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","consoleMessages");
+var _1=dojo.config["consoleLogFuncs"]||["error","warn","info","rlog"];
+if(!console){
+console={};
+}
+for(var i=0;i<_1.length;i++){
+if(console[_1[i]]){
+dojo.connect(console,_1[i],dojo.hitch(this,"addData",_1[i]));
+}else{
+console[_1[i]]=dojo.hitch(this,"addData",_1[i]);
+}
+}
+})();
+}
Index: trunk/web/dojo/dojox/analytics/plugins/dojo.js
===================================================================
--- trunk/web/dojo/dojox/analytics/plugins/dojo.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/plugins/dojo.js	(revision 9)
@@ -0,0 +1,23 @@
+if(!dojo._hasResource["dojox.analytics.plugins.dojo"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.analytics.plugins.dojo"] = true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.dojo");
+
+dojox.analytics.plugins.dojo = new (function(){
+	// summary:
+	//	plugin to have analyitcs return the base info dojo collects
+	this.addData = dojo.hitch(dojox.analytics, "addData", "dojo");
+	dojo.addOnLoad(dojo.hitch(this, function(){
+		var data = {};
+		for(var i in dojo){
+			if ((i=="version") || ((!dojo.isObject(dojo[i]))&&(i[0]!="_"))){
+				data[i]=dojo[i];
+			}
+		}
+
+		if (dojo.config){data.djConfig=dojo.config}
+		this.addData(data);
+	}));
+})();
+
+}
Index: trunk/web/dojo/dojox/analytics/plugins/idle.js
===================================================================
--- trunk/web/dojo/dojox/analytics/plugins/idle.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/plugins/idle.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.idle"]){
+dojo._hasResource["dojox.analytics.plugins.idle"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.idle");
+dojox.analytics.plugins.idle=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","idle");
+this.idleTime=dojo.config["idleTime"]||60000;
+this.idle=true;
+this.setIdle=function(){
+this.addData("isIdle");
+this.idle=true;
+};
+dojo.addOnLoad(dojo.hitch(this,function(){
+var _1=["onmousemove","onkeydown","onclick","onscroll"];
+for(var i=0;i<_1.length;i++){
+dojo.connect(dojo.doc,_1[i],this,function(e){
+if(this.idle){
+this.idle=false;
+this.addData("isActive");
+this.idleTimer=setTimeout(dojo.hitch(this,"setIdle"),this.idleTime);
+}else{
+clearTimeout(this.idleTimer);
+this.idleTimer=setTimeout(dojo.hitch(this,"setIdle"),this.idleTime);
+}
+});
+}
+}));
+})();
+}
Index: trunk/web/dojo/dojox/analytics/plugins/mouseClick.js
===================================================================
--- trunk/web/dojo/dojox/analytics/plugins/mouseClick.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/plugins/mouseClick.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.plugins.mouseClick"]){
+dojo._hasResource["dojox.analytics.plugins.mouseClick"]=true;
+dojo.require("dojox.analytics._base");
+dojo.provide("dojox.analytics.plugins.mouseClick");
+dojox.analytics.plugins.mouseClick=new (function(){
+this.addData=dojo.hitch(dojox.analytics,"addData","mouseClick");
+this.onClick=function(e){
+this.addData(this.trimEvent(e));
+};
+dojo.connect(dojo.doc,"onclick",this,"onClick");
+this.trimEvent=function(e){
+var t={};
+for(var i in e){
+switch(i){
+case "target":
+case "originalTarget":
+case "explicitOriginalTarget":
+var _1=["id","className","nodeName","localName","href","spellcheck","lang"];
+t[i]={};
+for(var j=0;j<_1.length;j++){
+if(e[i][_1[j]]){
+if(_1[j]=="text"||_1[j]=="textContent"){
+if((e[i]["localName"]!="HTML")&&(e[i]["localName"]!="BODY")){
+t[i][_1[j]]=e[i][_1[j]].substr(0,50);
+}
+}else{
+t[i][_1[j]]=e[i][_1[j]];
+}
+}
+}
+break;
+case "clientX":
+case "clientY":
+case "pageX":
+case "pageY":
+case "screenX":
+case "screenY":
+t[i]=e[i];
+break;
+}
+}
+return t;
+};
+})();
+}
Index: trunk/web/dojo/dojox/analytics/Urchin.js
===================================================================
--- trunk/web/dojo/dojox/analytics/Urchin.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/Urchin.js	(revision 9)
@@ -0,0 +1,31 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics.Urchin"]){
+dojo._hasResource["dojox.analytics.Urchin"]=true;
+dojo.provide("dojox.analytics.Urchin");
+dojo.declare("dojox.analytics.Urchin",null,{acct:"",constructor:function(_1){
+this.tracker=null;
+dojo.mixin(this,_1);
+this.acct=this.acct||dojo.config.urchin;
+var re=/loaded|complete/,_2=("https:"==dojo.doc.location.protocol)?"https://ssl.":"http://www.",h=dojo.doc.getElementsByTagName("head")[0],n=dojo.create("script",{src:_2+"google-analytics.com/ga.js"},h);
+n.onload=n.onreadystatechange=dojo.hitch(this,function(e){
+if(e&&e.type=="load"||re.test(n.readyState)){
+n.onload=n.onreadystatechange=null;
+this._gotGA();
+h.removeChild(n);
+}
+});
+},_gotGA:function(){
+this.tracker=_gat._getTracker(this.acct);
+this.GAonLoad.apply(this,arguments);
+},GAonLoad:function(){
+this.trackPageView();
+},trackPageView:function(_3){
+this.tracker._trackPageview.apply(this,arguments);
+}});
+}
Index: trunk/web/dojo/dojox/analytics/profiles/analytics.profile.js
===================================================================
--- trunk/web/dojo/dojox/analytics/profiles/analytics.profile.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/profiles/analytics.profile.js	(revision 9)
@@ -0,0 +1,8 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dependencies={layers:[{name:"../dojox/analytics.js",dependencies:["dojox.analytics","dojox.analytics.plugins.dojo","dojox.analytics.plugins.window","dojox.analytics.plugins.consoleMessages","dojox.analytics.plugins.mouseOver","dojox.analytics.plugins.mouseClick","dojox.analytics.plugins.idle"]}],prefixes:[["dojox","../dojox"],["dijit","../dijit"]]};
Index: trunk/web/dojo/dojox/analytics/profiles/analyticsInBase.profile.js
===================================================================
--- trunk/web/dojo/dojox/analytics/profiles/analyticsInBase.profile.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics/profiles/analyticsInBase.profile.js	(revision 9)
@@ -0,0 +1,8 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dependencies={layers:[{name:"dojo.js",dependencies:["dojox.analytics","dojox.analytics.plugins.dojo","dojox.analytics.plugins.window","dojox.analytics.plugins.consoleMessages","dojox.analytics.plugins.mouseOver","dojox.analytics.plugins.mouseClick","dojox.analytics.plugins.idle"]}],prefixes:[["dojox","../dojox"],["dijit","../dijit"]]};
Index: trunk/web/dojo/dojox/collections.js
===================================================================
--- trunk/web/dojo/dojox/collections.js	(revision 0)
+++ trunk/web/dojo/dojox/collections.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections"]){
+dojo._hasResource["dojox.collections"]=true;
+dojo.provide("dojox.collections");
+dojo.require("dojox.collections._base");
+}
Index: trunk/web/dojo/dojox/xml/widgetParser.js
===================================================================
--- trunk/web/dojo/dojox/xml/widgetParser.js	(revision 0)
+++ trunk/web/dojo/dojox/xml/widgetParser.js	(revision 9)
@@ -0,0 +1,69 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xml.widgetParser"]){
+dojo._hasResource["dojox.xml.widgetParser"]=true;
+dojo.provide("dojox.xml.widgetParser");
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.parser");
+dojox.xml.widgetParser=new function(){
+var d=dojo;
+this.parseNode=function(_1){
+var _2=[];
+d.query("script[type='text/xml']",_1).forEach(function(_3){
+_2.push.apply(_2,this._processScript(_3));
+},this).orphan();
+return d.parser.instantiate(_2);
+};
+this._processScript=function(_4){
+var _5=_4.src?d._getText(_4.src):_4.innerHTML||_4.firstChild.nodeValue;
+var _6=this.toHTML(dojox.xml.parser.parse(_5).firstChild);
+var _7=d.query("[dojoType]",_6);
+dojo.query(">",_6).place(_4,"before");
+_4.parentNode.removeChild(_4);
+return _7;
+};
+this.toHTML=function(_8){
+var _9;
+var _a=_8.nodeName;
+var dd=dojo.doc;
+var _b=_8.nodeType;
+if(_b>=3){
+return dd.createTextNode((_b==3||_b==4)?_8.nodeValue:"");
+}
+var _c=_8.localName||_a.split(":").pop();
+var _d=_8.namespaceURI||(_8.getNamespaceUri?_8.getNamespaceUri():"");
+if(_d=="html"){
+_9=dd.createElement(_c);
+}else{
+var _e=_d+"."+_c;
+_9=_9||dd.createElement((_e=="dijit.form.ComboBox")?"select":"div");
+_9.setAttribute("dojoType",_e);
+}
+d.forEach(_8.attributes,function(_f){
+var _10=_f.name||_f.nodeName;
+var _11=_f.value||_f.nodeValue;
+if(_10.indexOf("xmlns")!=0){
+if(dojo.isIE&&_10=="style"){
+_9.style.setAttribute("cssText",_11);
+}else{
+_9.setAttribute(_10,_11);
+}
+}
+});
+d.forEach(_8.childNodes,function(cn){
+var _12=this.toHTML(cn);
+if(_c=="script"){
+_9.text+=_12.nodeValue;
+}else{
+_9.appendChild(_12);
+}
+},this);
+return _9;
+};
+}();
+}
Index: trunk/web/dojo/dojox/xml/README
===================================================================
--- trunk/web/dojo/dojox/xml/README	(revision 0)
+++ trunk/web/dojo/dojox/xml/README	(revision 9)
@@ -0,0 +1,40 @@
+-------------------------------------------------------------------------------
+DojoX XML Utilities
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 05/30/2007	
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits 
+	Tom Trenka (ttrenka@gmail.com): DomParser
+	
+-------------------------------------------------------------------------------
+Project description
+
+The goal of DojoX XML Utilities is provide differing XML utilities for use
+in various places.  Currently this includes a native JS DomParser, but will
+most likely be expanded to include things as dealing with x-browser forks
+(like the Sarissa project), various DOM utilites, and more.
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX XML relies only on the Dojo Base package system.
+-------------------------------------------------------------------------------
+Documentation
+
+None at the time of writing.  The only object is dojox.xml.DomParser (a singleton),
+which has one method: parse:
+
+dojox.xml.DomParser.parse(xmlString)
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/xml/*
+
+Install into the following directory structure:
+/dojox/xml/
+
+...which should be at the same level as your Dojo checkout.
Index: trunk/web/dojo/dojox/xml/Script.js
===================================================================
--- trunk/web/dojo/dojox/xml/Script.js	(revision 0)
+++ trunk/web/dojo/dojox/xml/Script.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xml.Script"]){
+dojo._hasResource["dojox.xml.Script"]=true;
+dojo.provide("dojox.xml.Script");
+dojo.require("dojo.parser");
+dojo.require("dojox.xml.widgetParser");
+dojo.declare("dojox.xml.Script",null,{constructor:function(_1,_2){
+dojo.parser.instantiate(dojox.xml.widgetParser._processScript(_2));
+}});
+}
Index: trunk/web/dojo/dojox/xml/DomParser.js
===================================================================
--- trunk/web/dojo/dojox/xml/DomParser.js	(revision 0)
+++ trunk/web/dojo/dojox/xml/DomParser.js	(revision 9)
@@ -0,0 +1,325 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xml.DomParser"]){
+dojo._hasResource["dojox.xml.DomParser"]=true;
+dojo.provide("dojox.xml.DomParser");
+dojox.xml.DomParser=new (function(){
+var _1={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9};
+var _2=/<([^>\/\s+]*)([^>]*)>([^<]*)/g;
+var _3=/([^=]*)=(("([^"]*)")|('([^']*)'))/g;
+var _4=/<!ENTITY\s+([^"]*)\s+"([^"]*)">/g;
+var _5=/<!\[CDATA\[([\u0001-\uFFFF]*?)\]\]>/g;
+var _6=/<!--([\u0001-\uFFFF]*?)-->/g;
+var _7=/^\s+|\s+$/g;
+var _8=/\s+/g;
+var _9=/\&gt;/g;
+var _a=/\&lt;/g;
+var _b=/\&quot;/g;
+var _c=/\&apos;/g;
+var _d=/\&amp;/g;
+var _e="_def_";
+function _f(){
+return new (function(){
+var all={};
+this.nodeType=_1.DOCUMENT;
+this.nodeName="#document";
+this.namespaces={};
+this._nsPaths={};
+this.childNodes=[];
+this.documentElement=null;
+this._add=function(obj){
+if(typeof (obj.id)!="undefined"){
+all[obj.id]=obj;
+}
+};
+this._remove=function(id){
+if(all[id]){
+delete all[id];
+}
+};
+this.byId=this.getElementById=function(id){
+return all[id];
+};
+this.byName=this.getElementsByTagName=_10;
+this.byNameNS=this.getElementsByTagNameNS=_11;
+this.childrenByName=_12;
+this.childrenByNameNS=_13;
+})();
+};
+function _10(_14){
+function _15(_16,_17,arr){
+dojo.forEach(_16.childNodes,function(c){
+if(c.nodeType==_1.ELEMENT){
+if(_17=="*"){
+arr.push(c);
+}else{
+if(c.nodeName==_17){
+arr.push(c);
+}
+}
+_15(c,_17,arr);
+}
+});
+};
+var a=[];
+_15(this,_14,a);
+return a;
+};
+function _11(_18,ns){
+function _19(_1a,_1b,ns,arr){
+dojo.forEach(_1a.childNodes,function(c){
+if(c.nodeType==_1.ELEMENT){
+if(_1b=="*"&&c.ownerDocument._nsPaths[ns]==c.namespace){
+arr.push(c);
+}else{
+if(c.localName==_1b&&c.ownerDocument._nsPaths[ns]==c.namespace){
+arr.push(c);
+}
+}
+_19(c,_1b,ns,arr);
+}
+});
+};
+if(!ns){
+ns=_e;
+}
+var a=[];
+_19(this,_18,ns,a);
+return a;
+};
+function _12(_1c){
+var a=[];
+dojo.forEach(this.childNodes,function(c){
+if(c.nodeType==_1.ELEMENT){
+if(_1c=="*"){
+a.push(c);
+}else{
+if(c.nodeName==_1c){
+a.push(c);
+}
+}
+}
+});
+return a;
+};
+function _13(_1d,ns){
+var a=[];
+dojo.forEach(this.childNodes,function(c){
+if(c.nodeType==_1.ELEMENT){
+if(_1d=="*"&&c.ownerDocument._nsPaths[ns]==c.namespace){
+a.push(c);
+}else{
+if(c.localName==_1d&&c.ownerDocument._nsPaths[ns]==c.namespace){
+a.push(c);
+}
+}
+}
+});
+return a;
+};
+function _1e(v){
+return {nodeType:_1.TEXT,nodeName:"#text",nodeValue:v.replace(_8," ").replace(_9,">").replace(_a,"<").replace(_c,"'").replace(_b,"\"").replace(_d,"&")};
+};
+function _1f(_20){
+for(var i=0;i<this.attributes.length;i++){
+if(this.attributes[i].nodeName==_20){
+return this.attributes[i].nodeValue;
+}
+}
+return null;
+};
+function _21(_22,ns){
+for(var i=0;i<this.attributes.length;i++){
+if(this.ownerDocument._nsPaths[ns]==this.attributes[i].namespace&&this.attributes[i].localName==_22){
+return this.attributes[i].nodeValue;
+}
+}
+return null;
+};
+function _23(_24,val){
+var old=null;
+for(var i=0;i<this.attributes.length;i++){
+if(this.attributes[i].nodeName==_24){
+old=this.attributes[i].nodeValue;
+this.attributes[i].nodeValue=val;
+break;
+}
+}
+if(_24=="id"){
+if(old!=null){
+this.ownerDocument._remove(old);
+}
+this.ownerDocument._add(this);
+}
+};
+function _25(_26,val,ns){
+for(var i=0;i<this.attributes.length;i++){
+if(this.ownerDocument._nsPaths[ns]==this.attributes[i].namespace&&this.attributes[i].localName==_26){
+this.attributes[i].nodeValue=val;
+return;
+}
+}
+};
+function _27(){
+var p=this.parentNode;
+if(p){
+for(var i=0;i<p.childNodes.length;i++){
+if(p.childNodes[i]==this&&i>0){
+return p.childNodes[i-1];
+}
+}
+}
+return null;
+};
+function _28(){
+var p=this.parentNode;
+if(p){
+for(var i=0;i<p.childNodes.length;i++){
+if(p.childNodes[i]==this&&(i+1)<p.childNodes.length){
+return p.childNodes[i+1];
+}
+}
+}
+return null;
+};
+this.parse=function(str){
+var _29=_f();
+if(str==null){
+return _29;
+}
+if(str.length==0){
+return _29;
+}
+if(str.indexOf("<!ENTITY")>0){
+var _2a,eRe=[];
+if(_4.test(str)){
+_4.lastIndex=0;
+while((_2a=_4.exec(str))!=null){
+eRe.push({entity:"&"+_2a[1].replace(_7,"")+";",expression:_2a[2]});
+}
+for(var i=0;i<eRe.length;i++){
+str=str.replace(new RegExp(eRe[i].entity,"g"),eRe[i].expression);
+}
+}
+}
+var _2b=[],_2c;
+while((_2c=_5.exec(str))!=null){
+_2b.push(_2c[1]);
+}
+for(var i=0;i<_2b.length;i++){
+str=str.replace(_2b[i],i);
+}
+var _2d=[],_2e;
+while((_2e=_6.exec(str))!=null){
+_2d.push(_2e[1]);
+}
+for(i=0;i<_2d.length;i++){
+str=str.replace(_2d[i],i);
+}
+var res,obj=_29;
+while((res=_2.exec(str))!=null){
+if(res[2].charAt(0)=="/"&&res[2].replace(_7,"").length>1){
+if(obj.parentNode){
+obj=obj.parentNode;
+}
+var _2f=(res[3]||"").replace(_7,"");
+if(_2f.length>0){
+obj.childNodes.push(_1e(_2f));
+}
+}else{
+if(res[1].length>0){
+if(res[1].charAt(0)=="?"){
+var _30=res[1].substr(1);
+var _31=res[2].substr(0,res[2].length-2);
+obj.childNodes.push({nodeType:_1.PROCESSING_INSTRUCTION,nodeName:_30,nodeValue:_31});
+}else{
+if(res[1].charAt(0)=="!"){
+if(res[1].indexOf("![CDATA[")==0){
+var val=parseInt(res[1].replace("![CDATA[","").replace("]]",""));
+obj.childNodes.push({nodeType:_1.CDATA_SECTION,nodeName:"#cdata-section",nodeValue:_2b[val]});
+}else{
+if(res[1].substr(0,3)=="!--"){
+var val=parseInt(res[1].replace("!--","").replace("--",""));
+obj.childNodes.push({nodeType:_1.COMMENT,nodeName:"#comment",nodeValue:_2d[val]});
+}
+}
+}else{
+var _30=res[1].replace(_7,"");
+var o={nodeType:_1.ELEMENT,nodeName:_30,localName:_30,namespace:_e,ownerDocument:_29,attributes:[],parentNode:null,childNodes:[]};
+if(_30.indexOf(":")>-1){
+var t=_30.split(":");
+o.namespace=t[0];
+o.localName=t[1];
+}
+o.byName=o.getElementsByTagName=_10;
+o.byNameNS=o.getElementsByTagNameNS=_11;
+o.childrenByName=_12;
+o.childrenByNameNS=_13;
+o.getAttribute=_1f;
+o.getAttributeNS=_21;
+o.setAttribute=_23;
+o.setAttributeNS=_25;
+o.previous=o.previousSibling=_27;
+o.next=o.nextSibling=_28;
+var _32;
+while((_32=_3.exec(res[2]))!=null){
+if(_32.length>0){
+var _30=_32[1].replace(_7,"");
+var val=(_32[4]||_32[6]||"").replace(_8," ").replace(_9,">").replace(_a,"<").replace(_c,"'").replace(_b,"\"").replace(_d,"&");
+if(_30.indexOf("xmlns")==0){
+if(_30.indexOf(":")>0){
+var ns=_30.split(":");
+_29.namespaces[ns[1]]=val;
+_29._nsPaths[val]=ns[1];
+}else{
+_29.namespaces[_e]=val;
+_29._nsPaths[val]=_e;
+}
+}else{
+var ln=_30;
+var ns=_e;
+if(_30.indexOf(":")>0){
+var t=_30.split(":");
+ln=t[1];
+ns=t[0];
+}
+o.attributes.push({nodeType:_1.ATTRIBUTE,nodeName:_30,localName:ln,namespace:ns,nodeValue:val});
+if(ln=="id"){
+o.id=val;
+}
+}
+}
+}
+_29._add(o);
+if(obj){
+obj.childNodes.push(o);
+o.parentNode=obj;
+if(res[2].charAt(res[2].length-1)!="/"){
+obj=o;
+}
+}
+var _2f=res[3];
+if(_2f.length>0){
+obj.childNodes.push(_1e(_2f));
+}
+}
+}
+}
+}
+}
+for(var i=0;i<_29.childNodes.length;i++){
+var e=_29.childNodes[i];
+if(e.nodeType==_1.ELEMENT){
+_29.documentElement=e;
+break;
+}
+}
+return _29;
+};
+})();
+}
Index: trunk/web/dojo/dojox/xml/parser.js
===================================================================
--- trunk/web/dojo/dojox/xml/parser.js	(revision 0)
+++ trunk/web/dojo/dojox/xml/parser.js	(revision 9)
@@ -0,0 +1,137 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xml.parser"]){
+dojo._hasResource["dojox.xml.parser"]=true;
+dojo.provide("dojox.xml.parser");
+dojox.xml.parser.parse=function(_1,_2){
+var _3=dojo.doc;
+var _4;
+_2=_2||"text/xml";
+if(_1&&dojo.trim(_1)&&"DOMParser" in dojo.global){
+var _5=new DOMParser();
+_4=_5.parseFromString(_1,_2);
+var de=_4.documentElement;
+var _6="http://www.mozilla.org/newlayout/xml/parsererror.xml";
+if(de.nodeName=="parsererror"&&de.namespaceURI==_6){
+var _7=de.getElementsByTagNameNS(_6,"sourcetext")[0];
+if(_7){
+_7=_7.firstChild.data;
+}
+throw new Error("Error parsing text "+de.firstChild.data+" \n"+_7);
+}
+return _4;
+}else{
+if("ActiveXObject" in dojo.global){
+var ms=function(n){
+return "MSXML"+n+".DOMDocument";
+};
+var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];
+dojo.some(dp,function(p){
+try{
+_4=new ActiveXObject(p);
+}
+catch(e){
+return false;
+}
+return true;
+});
+if(_1&&_4){
+_4.async=false;
+_4.loadXML(_1);
+var pe=_4.parseError;
+if(pe.errorCode!==0){
+throw new Error("Line: "+pe.line+"\n"+"Col: "+pe.linepos+"\n"+"Reason: "+pe.reason+"\n"+"Error Code: "+pe.errorCode+"\n"+"Source: "+pe.srcText);
+}
+}
+if(_4){
+return _4;
+}
+}else{
+if(_3.implementation&&_3.implementation.createDocument){
+if(_1&&dojo.trim(_1)&&_3.createElement){
+var _8=_3.createElement("xml");
+_8.innerHTML=_1;
+var _9=_3.implementation.createDocument("foo","",null);
+dojo.forEach(_8.childNodes,function(_a){
+_9.importNode(_a,true);
+});
+return _9;
+}else{
+return _3.implementation.createDocument("","",null);
+}
+}
+}
+}
+return null;
+};
+dojox.xml.parser.textContent=function(_b,_c){
+if(arguments.length>1){
+var _d=_b.ownerDocument||dojo.doc;
+dojox.xml.parser.replaceChildren(_b,_d.createTextNode(_c));
+return _c;
+}else{
+if(_b.textContent!==undefined){
+return _b.textContent;
+}
+var _e="";
+if(_b){
+dojo.forEach(_b.childNodes,function(_f){
+switch(_f.nodeType){
+case 1:
+case 5:
+_e+=dojox.xml.parser.textContent(_f);
+break;
+case 3:
+case 2:
+case 4:
+_e+=_f.nodeValue;
+}
+});
+}
+return _e;
+}
+};
+dojox.xml.parser.replaceChildren=function(_10,_11){
+var _12=[];
+if(dojo.isIE){
+dojo.forEach(_10.childNodes,function(_13){
+_12.push(_13);
+});
+}
+dojox.xml.parser.removeChildren(_10);
+dojo.forEach(_12,dojo.destroy);
+if(!dojo.isArray(_11)){
+_10.appendChild(_11);
+}else{
+dojo.forEach(_11,function(_14){
+_10.appendChild(_14);
+});
+}
+};
+dojox.xml.parser.removeChildren=function(_15){
+var _16=_15.childNodes.length;
+while(_15.hasChildNodes()){
+_15.removeChild(_15.firstChild);
+}
+return _16;
+};
+dojox.xml.parser.innerXML=function(_17){
+if(_17.innerXML){
+return _17.innerXML;
+}else{
+if(_17.xml){
+return _17.xml;
+}else{
+if(typeof XMLSerializer!="undefined"){
+return (new XMLSerializer()).serializeToString(_17);
+}
+}
+}
+return null;
+};
+}
Index: trunk/web/dojo/dojox/analytics.js
===================================================================
--- trunk/web/dojo/dojox/analytics.js	(revision 0)
+++ trunk/web/dojo/dojox/analytics.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.analytics"]){
+dojo._hasResource["dojox.analytics"]=true;
+dojo.provide("dojox.analytics");
+dojo.require("dojox.analytics._base");
+}
Index: trunk/web/dojo/dojox/dnd/Selector.js
===================================================================
--- trunk/web/dojo/dojox/dnd/Selector.js	(revision 0)
+++ trunk/web/dojo/dojox/dnd/Selector.js	(revision 9)
@@ -0,0 +1,80 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dnd.Selector"]){
+dojo._hasResource["dojox.dnd.Selector"]=true;
+dojo.provide("dojox.dnd.Selector");
+dojo.require("dojo.dnd.Selector");
+dojo.declare("dojox.dnd.Selector",dojo.dnd.Selector,{isSelected:function(_1){
+var id=dojo.isString(_1)?_1:_1.id,_2=this.getItem(id);
+return _2&&this.selected[id];
+},selectNode:function(_3,_4){
+if(!_4){
+this.selectNone();
+}
+var id=dojo.isString(_3)?_3:_3.id,_5=this.getItem(id);
+if(_5){
+this._removeAnchor();
+this.anchor=dojo.byId(_3);
+this._addItemClass(this.anchor,"Anchor");
+this.selection[id]=1;
+this._addItemClass(this.anchor,"Selected");
+}
+return this;
+},deselectNode:function(_6){
+var id=dojo.isString(_6)?_6:_6.id,_7=this.getItem(id);
+if(_7&&this.selection[id]){
+if(this.anchor===dojo.byId(_6)){
+this._removeAnchor();
+}
+delete this.selection[id];
+this._removeItemClass(this.anchor,"Selected");
+}
+return this;
+},selectByBBox:function(_8,_9,_a,_b,_c){
+if(!_c){
+this.selectNone();
+}
+this.forInItems(function(_d,id){
+var _e=dojo.byId(id);
+if(_e&&this._isBoundedByBox(_e,_8,_9,_a,_b)){
+this.selectNode(id,true);
+}
+},this);
+return this;
+},_isBoundedByBox:function(_f,_10,top,_11,_12){
+var c=dojo.coords(_f),t;
+if(_10>_11){
+t=_10;
+_10=_11;
+_11=t;
+}
+if(top>_12){
+t=top;
+top=_12;
+_12=t;
+}
+return c.x>=_10&&c.x+c.w<=_11&&c.y>=top&&c.y+c.h<=_12;
+},shift:function(_13,add){
+var _14=this.getSelectedNodes();
+if(_14&&_14.length){
+this.selectNode(this._getNodeId(_14[_14.length-1].id,_13),add);
+}
+},_getNodeId:function(_15,_16){
+var _17=this.getAllNodes(),_18=_15;
+for(var i=0,l=_17.length;i<l;++i){
+if(_17[i].id==_15){
+var j=Math.min(l-1,Math.max(0,i+(_16?1:-1)));
+if(i!=j){
+_18=_17[j].id;
+}
+break;
+}
+}
+return _18;
+}});
+}
Index: trunk/web/dojo/dojox/dnd/BoundingBoxController.js
===================================================================
--- trunk/web/dojo/dojox/dnd/BoundingBoxController.js	(revision 0)
+++ trunk/web/dojo/dojox/dnd/BoundingBoxController.js	(revision 9)
@@ -0,0 +1,53 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dnd.BoundingBoxController"]){
+dojo._hasResource["dojox.dnd.BoundingBoxController"]=true;
+dojo.provide("dojox.dnd.BoundingBoxController");
+dojo.declare("dojox.dnd.BoundingBoxController",null,{_startX:null,_startY:null,_endX:null,_endY:null,constructor:function(_1,_2){
+this.events=[dojo.connect(dojo.doc,"onmousedown",this,"_onMouseDown"),dojo.connect(dojo.doc,"onmouseup",this,"_onMouseUp"),dojo.connect(dojo.doc,"onscroll",this,"_finishSelecting")];
+this.subscriptions=[dojo.subscribe("/dojox/bounding/cancel",this,"_finishSelecting")];
+dojo.forEach(_1,function(_3){
+if(_3.selectByBBox){
+this.subscriptions.push(dojo.subscribe("/dojox/dnd/bounding",_3,"selectByBBox"));
+}
+},this);
+this.domNode=dojo.byId(_2);
+dojo.style(this.domNode,{position:"absolute",display:"none"});
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+dojo.forEach(this.subscriptions,dojo.unsubscribe);
+this.domNode=null;
+},boundingBoxIsViable:function(){
+return true;
+},_onMouseDown:function(_4){
+if(dojo.mouseButtons.isLeft(_4)){
+if(this._startX===null){
+this._startX=_4.clientX;
+this._startY=_4.clientY;
+}
+this.events.push(dojo.connect(dojo.doc,"onmousemove",this,"_onMouseMove"));
+}
+},_onMouseMove:function(_5){
+this._endX=_5.clientX;
+this._endY=_5.clientY;
+this._drawBoundingBox();
+},_onMouseUp:function(_6){
+if(this._endX!==null&&this.boundingBoxIsViable()){
+dojo.publish("/dojox/dnd/bounding",[this._startX,this._startY,this._endX,this._endY]);
+}
+this._finishSelecting();
+},_finishSelecting:function(){
+if(this._startX!==null){
+dojo.disconnect(this.events.pop());
+dojo.style(this.domNode,"display","none");
+this._startX=this._endX=null;
+}
+},_drawBoundingBox:function(){
+dojo.style(this.domNode,{left:Math.min(this._startX,this._endX)+"px",top:Math.min(this._startY,this._endY)+"px",width:Math.abs(this._startX-this._endX)+"px",height:Math.abs(this._startY-this._endY)+"px",display:""});
+}});
+}
Index: trunk/web/dojo/dojox/dnd/README
===================================================================
--- trunk/web/dojo/dojox/dnd/README	(revision 0)
+++ trunk/web/dojo/dojox/dnd/README	(revision 9)
@@ -0,0 +1,22 @@
+-------------------------------------------------------------------------------
+dojox.dnd Simple extensions to dojo.dnd.
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 2/1/2010
+-------------------------------------------------------------------------------
+Project state: beta
+-------------------------------------------------------------------------------
+Credits
+
+Sean O' Shea
+Arech
+Eugene Lazutkin
+-------------------------------------------------------------------------------
+Project description
+
+Extending and augmenting dojo.dnd, a clearing house for future dojo.dnd
+additions.
+-------------------------------------------------------------------------------
+Dependencies
+
+	require Dojo Core
Index: trunk/web/dojo/dojox/string/tokenize.js
===================================================================
--- trunk/web/dojo/dojox/string/tokenize.js	(revision 0)
+++ trunk/web/dojo/dojox/string/tokenize.js	(revision 9)
@@ -0,0 +1,40 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.string.tokenize"]){
+dojo._hasResource["dojox.string.tokenize"]=true;
+dojo.provide("dojox.string.tokenize");
+dojox.string.tokenize=function(_1,re,_2,_3){
+var _4=[];
+var _5,_6,_7=0;
+while(_5=re.exec(_1)){
+_6=_1.slice(_7,re.lastIndex-_5[0].length);
+if(_6.length){
+_4.push(_6);
+}
+if(_2){
+if(dojo.isOpera){
+var _8=_5.slice(0);
+while(_8.length<_5.length){
+_8.push(null);
+}
+_5=_8;
+}
+var _9=_2.apply(_3,_5.slice(1).concat(_4.length));
+if(typeof _9!="undefined"){
+_4.push(_9);
+}
+}
+_7=re.lastIndex;
+}
+_6=_1.slice(_7);
+if(_6.length){
+_4.push(_6);
+}
+return _4;
+};
+}
Index: trunk/web/dojo/dojox/string/BidiComplex.js
===================================================================
--- trunk/web/dojo/dojox/string/BidiComplex.js	(revision 0)
+++ trunk/web/dojo/dojox/string/BidiComplex.js	(revision 9)
@@ -0,0 +1,246 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.string.BidiComplex"]){
+dojo._hasResource["dojox.string.BidiComplex"]=true;
+dojo.provide("dojox.string.BidiComplex");
+dojo.experimental("dojox.string.BidiComplex");
+(function(){
+var _1=[];
+dojox.string.BidiComplex.attachInput=function(_2,_3){
+_2.alt=_3;
+dojo.connect(_2,"onkeydown",this,"_ceKeyDown");
+dojo.connect(_2,"onkeyup",this,"_ceKeyUp");
+dojo.connect(_2,"oncut",this,"_ceCutText");
+dojo.connect(_2,"oncopy",this,"_ceCopyText");
+_2.value=dojox.string.BidiComplex.createDisplayString(_2.value,_2.alt);
+};
+dojox.string.BidiComplex.createDisplayString=function(_4,_5){
+_4=dojox.string.BidiComplex.stripSpecialCharacters(_4);
+var _6=dojox.string.BidiComplex._parse(_4,_5);
+var _7="‪"+_4;
+var _8=1;
+dojo.forEach(_6,function(n){
+if(n!=null){
+var _9=_7.substring(0,n+_8);
+var _a=_7.substring(n+_8,_7.length);
+_7=_9+"‎"+_a;
+_8++;
+}
+});
+return _7;
+};
+dojox.string.BidiComplex.stripSpecialCharacters=function(_b){
+return _b.replace(/[\u200E\u200F\u202A-\u202E]/g,"");
+};
+dojox.string.BidiComplex._ceKeyDown=function(_c){
+var _d=dojo.isIE?_c.srcElement:_c.target;
+_1=_d.value;
+};
+dojox.string.BidiComplex._ceKeyUp=function(_e){
+var _f="‎";
+var _10=dojo.isIE?_e.srcElement:_e.target;
+var _11=_10.value;
+var _12=_e.keyCode;
+if((_12==dojo.keys.HOME)||(_12==dojo.keys.END)||(_12==dojo.keys.SHIFT)){
+return;
+}
+var _13,_14;
+var _15=dojox.string.BidiComplex._getCaretPos(_e,_10);
+if(_15){
+_13=_15[0];
+_14=_15[1];
+}
+if(dojo.isIE){
+var _16=_13,_17=_14;
+if(_12==dojo.keys.LEFT_ARROW){
+if((_11.charAt(_14-1)==_f)&&(_13==_14)){
+dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1);
+}
+return;
+}
+if(_12==dojo.keys.RIGHT_ARROW){
+if(_11.charAt(_14-1)==_f){
+_17=_14+1;
+if(_13==_14){
+_16=_13+1;
+}
+}
+dojox.string.BidiComplex._setSelectedRange(_10,_16,_17);
+return;
+}
+}else{
+if(_12==dojo.keys.LEFT_ARROW){
+if(_11.charAt(_14-1)==_f){
+dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1);
+}
+return;
+}
+if(_12==dojo.keys.RIGHT_ARROW){
+if(_11.charAt(_14-1)==_f){
+dojox.string.BidiComplex._setSelectedRange(_10,_13+1,_14+1);
+}
+return;
+}
+}
+var _18=dojox.string.BidiComplex.createDisplayString(_11,_10.alt);
+if(_11!=_18){
+window.status=_11+" c="+_14;
+_10.value=_18;
+if((_12==dojo.keys.DELETE)&&(_18.charAt(_14)==_f)){
+_10.value=_18.substring(0,_14)+_18.substring(_14+2,_18.length);
+}
+if(_12==dojo.keys.DELETE){
+dojox.string.BidiComplex._setSelectedRange(_10,_13,_14);
+}else{
+if(_12==dojo.keys.BACKSPACE){
+if((_1.length>=_14)&&(_1.charAt(_14-1)==_f)){
+dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1);
+}else{
+dojox.string.BidiComplex._setSelectedRange(_10,_13,_14);
+}
+}else{
+if(_10.value.charAt(_14)!=_f){
+dojox.string.BidiComplex._setSelectedRange(_10,_13+1,_14+1);
+}
+}
+}
+}
+};
+dojox.string.BidiComplex._processCopy=function(_19,_1a,_1b){
+if(_1a==null){
+if(dojo.isIE){
+var _1c=document.selection.createRange();
+_1a=_1c.text;
+}else{
+_1a=_19.value.substring(_19.selectionStart,_19.selectionEnd);
+}
+}
+var _1d=dojox.string.BidiComplex.stripSpecialCharacters(_1a);
+if(dojo.isIE){
+window.clipboardData.setData("Text",_1d);
+}
+return true;
+};
+dojox.string.BidiComplex._ceCopyText=function(_1e){
+if(dojo.isIE){
+_1e.returnValue=false;
+}
+return dojox.string.BidiComplex._processCopy(_1e,null,false);
+};
+dojox.string.BidiComplex._ceCutText=function(_1f){
+var ret=dojox.string.BidiComplex._processCopy(_1f,null,false);
+if(!ret){
+return false;
+}
+if(dojo.isIE){
+document.selection.clear();
+}else{
+var _20=_1f.selectionStart;
+_1f.value=_1f.value.substring(0,_20)+_1f.value.substring(_1f.selectionEnd);
+_1f.setSelectionRange(_20,_20);
+}
+return true;
+};
+dojox.string.BidiComplex._getCaretPos=function(_21,_22){
+if(dojo.isIE){
+var _23=0,_24=document.selection.createRange().duplicate(),_25=_24.duplicate(),_26=_24.text.length;
+if(_22.type=="textarea"){
+_25.moveToElementText(_22);
+}else{
+_25.expand("textedit");
+}
+while(_24.compareEndPoints("StartToStart",_25)>0){
+_24.moveStart("character",-1);
+++_23;
+}
+return [_23,_23+_26];
+}
+return [_21.target.selectionStart,_21.target.selectionEnd];
+};
+dojox.string.BidiComplex._setSelectedRange=function(_27,_28,_29){
+if(dojo.isIE){
+var _2a=_27.createTextRange();
+if(_2a){
+if(_27.type=="textarea"){
+_2a.moveToElementText(_27);
+}else{
+_2a.expand("textedit");
+}
+_2a.collapse();
+_2a.moveEnd("character",_29);
+_2a.moveStart("character",_28);
+_2a.select();
+}
+}else{
+_27.selectionStart=_28;
+_27.selectionEnd=_29;
+}
+};
+var _2b=function(c){
+return (c>="0"&&c<="9")||(c>"ÿ");
+};
+var _2c=function(c){
+return (c>="A"&&c<="Z")||(c>="a"&&c<="z");
+};
+var _2d=function(_2e,i,_2f){
+while(i>0){
+if(i==_2f){
+return false;
+}
+i--;
+if(_2b(_2e.charAt(i))){
+return true;
+}
+if(_2c(_2e.charAt(i))){
+return false;
+}
+}
+return false;
+};
+dojox.string.BidiComplex._parse=function(str,_30){
+var _31=-1,_32=[];
+var _33={FILE_PATH:"/\\:.",URL:"/:.?=&#",XPATH:"/\\:.<>=[]",EMAIL:"<>@.,;"}[_30];
+switch(_30){
+case "FILE_PATH":
+case "URL":
+case "XPATH":
+dojo.forEach(str,function(ch,i){
+if(_33.indexOf(ch)>=0&&_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+});
+break;
+case "EMAIL":
+var _34=false;
+dojo.forEach(str,function(ch,i){
+if(ch=="\""){
+if(_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+i++;
+var i1=str.indexOf("\"",i);
+if(i1>=i){
+i=i1;
+}
+if(_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+}
+if(_33.indexOf(ch)>=0&&_2d(str,i,_31)){
+_31=i;
+_32.push(i);
+}
+});
+}
+return _32;
+};
+})();
+}
Index: trunk/web/dojo/dojox/string/README
===================================================================
--- trunk/web/dojo/dojox/string/README	(revision 0)
+++ trunk/web/dojo/dojox/string/README	(revision 9)
@@ -0,0 +1,39 @@
+-------------------------------------------------------------------------------
+DojoX String Utilities
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 05/08/2007
+-------------------------------------------------------------------------------
+Project state:
+dojox.string.Builder: production
+dojox.string.sprintf: beta
+dojox.string.tokenize: beta
+-------------------------------------------------------------------------------
+Project authors
+	Ben Lowery
+	Tom Trenka (ttrenka@gmail.com)
+	Neil Roberts
+-------------------------------------------------------------------------------
+Project description
+
+The DojoX String utilties project is a placeholder for miscellaneous string
+utility functions.  At the time of writing, only the Builder object has been
+added; but we anticipate other string utilities may end up living here as well.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader).
+-------------------------------------------------------------------------------
+Documentation
+
+See the Dojo Toolkit API docs (http://dojotookit.org/api), dojo.string.Builder.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/string/*
+
+Install into the following directory structure:
+/dojox/string/
+
+...which should be at the same level as your Dojo checkout.
Index: trunk/web/dojo/dojox/string/sprintf.js
===================================================================
--- trunk/web/dojo/dojox/string/sprintf.js	(revision 0)
+++ trunk/web/dojo/dojox/string/sprintf.js	(revision 9)
@@ -0,0 +1,280 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.string.sprintf"]){
+dojo._hasResource["dojox.string.sprintf"]=true;
+dojo.provide("dojox.string.sprintf");
+dojo.require("dojox.string.tokenize");
+dojox.string.sprintf=function(_1,_2){
+for(var _3=[],i=1;i<arguments.length;i++){
+_3.push(arguments[i]);
+}
+var _4=new dojox.string.sprintf.Formatter(_1);
+return _4.format.apply(_4,_3);
+};
+dojox.string.sprintf.Formatter=function(_5){
+var _6=[];
+this._mapped=false;
+this._format=_5;
+this._tokens=dojox.string.tokenize(_5,this._re,this._parseDelim,this);
+};
+dojo.extend(dojox.string.sprintf.Formatter,{_re:/\%(?:\(([\w_]+)\)|([1-9]\d*)\$)?([0 +\-\#]*)(\*|\d+)?(\.)?(\*|\d+)?[hlL]?([\%scdeEfFgGiouxX])/g,_parseDelim:function(_7,_8,_9,_a,_b,_c,_d){
+if(_7){
+this._mapped=true;
+}
+return {mapping:_7,intmapping:_8,flags:_9,_minWidth:_a,period:_b,_precision:_c,specifier:_d};
+},_specifiers:{b:{base:2,isInt:true},o:{base:8,isInt:true},x:{base:16,isInt:true},X:{extend:["x"],toUpper:true},d:{base:10,isInt:true},i:{extend:["d"]},u:{extend:["d"],isUnsigned:true},c:{setArg:function(_e){
+if(!isNaN(_e.arg)){
+var _f=parseInt(_e.arg);
+if(_f<0||_f>127){
+throw new Error("invalid character code passed to %c in sprintf");
+}
+_e.arg=isNaN(_f)?""+_f:String.fromCharCode(_f);
+}
+}},s:{setMaxWidth:function(_10){
+_10.maxWidth=(_10.period==".")?_10.precision:-1;
+}},e:{isDouble:true,doubleNotation:"e"},E:{extend:["e"],toUpper:true},f:{isDouble:true,doubleNotation:"f"},F:{extend:["f"]},g:{isDouble:true,doubleNotation:"g"},G:{extend:["g"],toUpper:true}},format:function(_11){
+if(this._mapped&&typeof _11!="object"){
+throw new Error("format requires a mapping");
+}
+var str="";
+var _12=0;
+for(var i=0,_13;i<this._tokens.length;i++){
+_13=this._tokens[i];
+if(typeof _13=="string"){
+str+=_13;
+}else{
+if(this._mapped){
+if(typeof _11[_13.mapping]=="undefined"){
+throw new Error("missing key "+_13.mapping);
+}
+_13.arg=_11[_13.mapping];
+}else{
+if(_13.intmapping){
+var _12=parseInt(_13.intmapping)-1;
+}
+if(_12>=arguments.length){
+throw new Error("got "+arguments.length+" printf arguments, insufficient for '"+this._format+"'");
+}
+_13.arg=arguments[_12++];
+}
+if(!_13.compiled){
+_13.compiled=true;
+_13.sign="";
+_13.zeroPad=false;
+_13.rightJustify=false;
+_13.alternative=false;
+var _14={};
+for(var fi=_13.flags.length;fi--;){
+var _15=_13.flags.charAt(fi);
+_14[_15]=true;
+switch(_15){
+case " ":
+_13.sign=" ";
+break;
+case "+":
+_13.sign="+";
+break;
+case "0":
+_13.zeroPad=(_14["-"])?false:true;
+break;
+case "-":
+_13.rightJustify=true;
+_13.zeroPad=false;
+break;
+case "#":
+_13.alternative=true;
+break;
+default:
+throw Error("bad formatting flag '"+_13.flags.charAt(fi)+"'");
+}
+}
+_13.minWidth=(_13._minWidth)?parseInt(_13._minWidth):0;
+_13.maxWidth=-1;
+_13.toUpper=false;
+_13.isUnsigned=false;
+_13.isInt=false;
+_13.isDouble=false;
+_13.precision=1;
+if(_13.period=="."){
+if(_13._precision){
+_13.precision=parseInt(_13._precision);
+}else{
+_13.precision=0;
+}
+}
+var _16=this._specifiers[_13.specifier];
+if(typeof _16=="undefined"){
+throw new Error("unexpected specifier '"+_13.specifier+"'");
+}
+if(_16.extend){
+dojo.mixin(_16,this._specifiers[_16.extend]);
+delete _16.extend;
+}
+dojo.mixin(_13,_16);
+}
+if(typeof _13.setArg=="function"){
+_13.setArg(_13);
+}
+if(typeof _13.setMaxWidth=="function"){
+_13.setMaxWidth(_13);
+}
+if(_13._minWidth=="*"){
+if(this._mapped){
+throw new Error("* width not supported in mapped formats");
+}
+_13.minWidth=parseInt(arguments[_12++]);
+if(isNaN(_13.minWidth)){
+throw new Error("the argument for * width at position "+_12+" is not a number in "+this._format);
+}
+if(_13.minWidth<0){
+_13.rightJustify=true;
+_13.minWidth=-_13.minWidth;
+}
+}
+if(_13._precision=="*"&&_13.period=="."){
+if(this._mapped){
+throw new Error("* precision not supported in mapped formats");
+}
+_13.precision=parseInt(arguments[_12++]);
+if(isNaN(_13.precision)){
+throw Error("the argument for * precision at position "+_12+" is not a number in "+this._format);
+}
+if(_13.precision<0){
+_13.precision=1;
+_13.period="";
+}
+}
+if(_13.isInt){
+if(_13.period=="."){
+_13.zeroPad=false;
+}
+this.formatInt(_13);
+}else{
+if(_13.isDouble){
+if(_13.period!="."){
+_13.precision=6;
+}
+this.formatDouble(_13);
+}
+}
+this.fitField(_13);
+str+=""+_13.arg;
+}
+}
+return str;
+},_zeros10:"0000000000",_spaces10:"          ",formatInt:function(_17){
+var i=parseInt(_17.arg);
+if(!isFinite(i)){
+if(typeof _17.arg!="number"){
+throw new Error("format argument '"+_17.arg+"' not an integer; parseInt returned "+i);
+}
+i=0;
+}
+if(i<0&&(_17.isUnsigned||_17.base!=10)){
+i=4294967295+i+1;
+}
+if(i<0){
+_17.arg=(-i).toString(_17.base);
+this.zeroPad(_17);
+_17.arg="-"+_17.arg;
+}else{
+_17.arg=i.toString(_17.base);
+if(!i&&!_17.precision){
+_17.arg="";
+}else{
+this.zeroPad(_17);
+}
+if(_17.sign){
+_17.arg=_17.sign+_17.arg;
+}
+}
+if(_17.base==16){
+if(_17.alternative){
+_17.arg="0x"+_17.arg;
+}
+_17.arg=_17.toUpper?_17.arg.toUpperCase():_17.arg.toLowerCase();
+}
+if(_17.base==8){
+if(_17.alternative&&_17.arg.charAt(0)!="0"){
+_17.arg="0"+_17.arg;
+}
+}
+},formatDouble:function(_18){
+var f=parseFloat(_18.arg);
+if(!isFinite(f)){
+if(typeof _18.arg!="number"){
+throw new Error("format argument '"+_18.arg+"' not a float; parseFloat returned "+f);
+}
+f=0;
+}
+switch(_18.doubleNotation){
+case "e":
+_18.arg=f.toExponential(_18.precision);
+break;
+case "f":
+_18.arg=f.toFixed(_18.precision);
+break;
+case "g":
+if(Math.abs(f)<0.0001){
+_18.arg=f.toExponential(_18.precision>0?_18.precision-1:_18.precision);
+}else{
+_18.arg=f.toPrecision(_18.precision);
+}
+if(!_18.alternative){
+_18.arg=_18.arg.replace(/(\..*[^0])0*/,"$1");
+_18.arg=_18.arg.replace(/\.0*e/,"e").replace(/\.0$/,"");
+}
+break;
+default:
+throw new Error("unexpected double notation '"+_18.doubleNotation+"'");
+}
+_18.arg=_18.arg.replace(/e\+(\d)$/,"e+0$1").replace(/e\-(\d)$/,"e-0$1");
+if(dojo.isOpera){
+_18.arg=_18.arg.replace(/^\./,"0.");
+}
+if(_18.alternative){
+_18.arg=_18.arg.replace(/^(\d+)$/,"$1.");
+_18.arg=_18.arg.replace(/^(\d+)e/,"$1.e");
+}
+if(f>=0&&_18.sign){
+_18.arg=_18.sign+_18.arg;
+}
+_18.arg=_18.toUpper?_18.arg.toUpperCase():_18.arg.toLowerCase();
+},zeroPad:function(_19,_1a){
+_1a=(arguments.length==2)?_1a:_19.precision;
+if(typeof _19.arg!="string"){
+_19.arg=""+_19.arg;
+}
+var _1b=_1a-10;
+while(_19.arg.length<_1b){
+_19.arg=(_19.rightJustify)?_19.arg+this._zeros10:this._zeros10+_19.arg;
+}
+var pad=_1a-_19.arg.length;
+_19.arg=(_19.rightJustify)?_19.arg+this._zeros10.substring(0,pad):this._zeros10.substring(0,pad)+_19.arg;
+},fitField:function(_1c){
+if(_1c.maxWidth>=0&&_1c.arg.length>_1c.maxWidth){
+return _1c.arg.substring(0,_1c.maxWidth);
+}
+if(_1c.zeroPad){
+this.zeroPad(_1c,_1c.minWidth);
+return;
+}
+this.spacePad(_1c);
+},spacePad:function(_1d,_1e){
+_1e=(arguments.length==2)?_1e:_1d.minWidth;
+if(typeof _1d.arg!="string"){
+_1d.arg=""+_1d.arg;
+}
+var _1f=_1e-10;
+while(_1d.arg.length<_1f){
+_1d.arg=(_1d.rightJustify)?_1d.arg+this._spaces10:this._spaces10+_1d.arg;
+}
+var pad=_1e-_1d.arg.length;
+_1d.arg=(_1d.rightJustify)?_1d.arg+this._spaces10.substring(0,pad):this._spaces10.substring(0,pad)+_1d.arg;
+}});
+}
Index: trunk/web/dojo/dojox/string/Builder.js
===================================================================
--- trunk/web/dojo/dojox/string/Builder.js	(revision 0)
+++ trunk/web/dojo/dojox/string/Builder.js	(revision 9)
@@ -0,0 +1,91 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.string.Builder"]){
+dojo._hasResource["dojox.string.Builder"]=true;
+dojo.provide("dojox.string.Builder");
+dojox.string.Builder=function(_1){
+var b="";
+this.length=0;
+this.append=function(s){
+if(arguments.length>1){
+var _2="",l=arguments.length;
+switch(l){
+case 9:
+_2=""+arguments[8]+_2;
+case 8:
+_2=""+arguments[7]+_2;
+case 7:
+_2=""+arguments[6]+_2;
+case 6:
+_2=""+arguments[5]+_2;
+case 5:
+_2=""+arguments[4]+_2;
+case 4:
+_2=""+arguments[3]+_2;
+case 3:
+_2=""+arguments[2]+_2;
+case 2:
+b+=""+arguments[0]+arguments[1]+_2;
+break;
+default:
+var i=0;
+while(i<arguments.length){
+_2+=arguments[i++];
+}
+b+=_2;
+}
+}else{
+b+=s;
+}
+this.length=b.length;
+return this;
+};
+this.concat=function(s){
+return this.append.apply(this,arguments);
+};
+this.appendArray=function(_3){
+return this.append.apply(this,_3);
+};
+this.clear=function(){
+b="";
+this.length=0;
+return this;
+};
+this.replace=function(_4,_5){
+b=b.replace(_4,_5);
+this.length=b.length;
+return this;
+};
+this.remove=function(_6,_7){
+if(_7===undefined){
+_7=b.length;
+}
+if(_7==0){
+return this;
+}
+b=b.substr(0,_6)+b.substr(_6+_7);
+this.length=b.length;
+return this;
+};
+this.insert=function(_8,_9){
+if(_8==0){
+b=_9+b;
+}else{
+b=b.slice(0,_8)+_9+b.slice(_8);
+}
+this.length=b.length;
+return this;
+};
+this.toString=function(){
+return b;
+};
+if(_1){
+this.append(_1);
+}
+};
+}
Index: trunk/web/dojo/dojox/highlight/_base.js
===================================================================
--- trunk/web/dojo/dojox/highlight/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/_base.js	(revision 9)
@@ -0,0 +1,327 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight._base"]){
+dojo._hasResource["dojox.highlight._base"]=true;
+dojo.provide("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1="\\b(0x[A-Za-z0-9]+|\\d+(\\.\\d+)?)";
+dh.constants={IDENT_RE:"[a-zA-Z][a-zA-Z0-9_]*",UNDERSCORE_IDENT_RE:"[a-zA-Z_][a-zA-Z0-9_]*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:_1,APOS_STRING_MODE:{className:"string",begin:"'",end:"'",illegal:"\\n",contains:["escape"],relevance:0},QUOTE_STRING_MODE:{className:"string",begin:"\"",end:"\"",illegal:"\\n",contains:["escape"],relevance:0},BACKSLASH_ESCAPE:{className:"escape",begin:"\\\\.",end:"^",relevance:0},C_LINE_COMMENT_MODE:{className:"comment",begin:"//",end:"$",relevance:0},C_BLOCK_COMMENT_MODE:{className:"comment",begin:"/\\*",end:"\\*/"},HASH_COMMENT_MODE:{className:"comment",begin:"#",end:"$"},C_NUMBER_MODE:{className:"number",begin:_1,end:"^",relevance:0}};
+function _2(_3){
+return _3.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;");
+};
+function _4(_5){
+return dojo.every(_5.childNodes,function(_6){
+return _6.nodeType==3||String(_6.nodeName).toLowerCase()=="br";
+});
+};
+function _7(_8){
+var _9=[];
+dojo.forEach(_8.childNodes,function(_a){
+if(_a.nodeType==3){
+_9.push(_a.nodeValue);
+}else{
+if(String(_a.nodeName).toLowerCase()=="br"){
+_9.push("\n");
+}else{
+throw "Complex markup";
+}
+}
+});
+return _9.join("");
+};
+function _b(_c){
+if(!_c.keywordGroups){
+for(var _d in _c.keywords){
+var kw=_c.keywords[_d];
+if(kw instanceof Object){
+_c.keywordGroups=_c.keywords;
+}else{
+_c.keywordGroups={keyword:_c.keywords};
+}
+break;
+}
+}
+};
+function _e(_f){
+if(_f.defaultMode&&_f.modes){
+_b(_f.defaultMode);
+dojo.forEach(_f.modes,_b);
+}
+};
+var _10=function(_11,_12){
+this.langName=_11;
+this.lang=dh.languages[_11];
+this.modes=[this.lang.defaultMode];
+this.relevance=0;
+this.keywordCount=0;
+this.result=[];
+if(!this.lang.defaultMode.illegalRe){
+this.buildRes();
+_e(this.lang);
+}
+try{
+this.highlight(_12);
+this.result=this.result.join("");
+}
+catch(e){
+if(e=="Illegal"){
+this.relevance=0;
+this.keywordCount=0;
+this.partialResult=this.result.join("");
+this.result=_2(_12);
+}else{
+throw e;
+}
+}
+};
+dojo.extend(_10,{buildRes:function(){
+dojo.forEach(this.lang.modes,function(_13){
+if(_13.begin){
+_13.beginRe=this.langRe("^"+_13.begin);
+}
+if(_13.end){
+_13.endRe=this.langRe("^"+_13.end);
+}
+if(_13.illegal){
+_13.illegalRe=this.langRe("^(?:"+_13.illegal+")");
+}
+},this);
+this.lang.defaultMode.illegalRe=this.langRe("^(?:"+this.lang.defaultMode.illegal+")");
+},subMode:function(_14){
+var _15=this.modes[this.modes.length-1].contains;
+if(_15){
+var _16=this.lang.modes;
+for(var i=0;i<_15.length;++i){
+var _17=_15[i];
+for(var j=0;j<_16.length;++j){
+var _18=_16[j];
+if(_18.className==_17&&_18.beginRe.test(_14)){
+return _18;
+}
+}
+}
+}
+return null;
+},endOfMode:function(_19){
+for(var i=this.modes.length-1;i>=0;--i){
+var _1a=this.modes[i];
+if(_1a.end&&_1a.endRe.test(_19)){
+return this.modes.length-i;
+}
+if(!_1a.endsWithParent){
+break;
+}
+}
+return 0;
+},isIllegal:function(_1b){
+var _1c=this.modes[this.modes.length-1].illegalRe;
+return _1c&&_1c.test(_1b);
+},langRe:function(_1d,_1e){
+var _1f="m"+(this.lang.case_insensitive?"i":"")+(_1e?"g":"");
+return new RegExp(_1d,_1f);
+},buildTerminators:function(){
+var _20=this.modes[this.modes.length-1],_21={};
+if(_20.contains){
+dojo.forEach(this.lang.modes,function(_22){
+if(dojo.indexOf(_20.contains,_22.className)>=0){
+_21[_22.begin]=1;
+}
+});
+}
+for(var i=this.modes.length-1;i>=0;--i){
+var m=this.modes[i];
+if(m.end){
+_21[m.end]=1;
+}
+if(!m.endsWithParent){
+break;
+}
+}
+if(_20.illegal){
+_21[_20.illegal]=1;
+}
+var t=[];
+for(i in _21){
+t.push(i);
+}
+_20.terminatorsRe=this.langRe("("+t.join("|")+")");
+},eatModeChunk:function(_23,_24){
+var _25=this.modes[this.modes.length-1];
+if(!_25.terminatorsRe){
+this.buildTerminators();
+}
+_23=_23.substr(_24);
+var _26=_25.terminatorsRe.exec(_23);
+if(!_26){
+return {buffer:_23,lexeme:"",end:true};
+}
+return {buffer:_26.index?_23.substr(0,_26.index):"",lexeme:_26[0],end:false};
+},keywordMatch:function(_27,_28){
+var _29=_28[0];
+if(this.lang.case_insensitive){
+_29=_29.toLowerCase();
+}
+for(var _2a in _27.keywordGroups){
+if(_29 in _27.keywordGroups[_2a]){
+return _2a;
+}
+}
+return "";
+},buildLexemes:function(_2b){
+var _2c={};
+dojo.forEach(_2b.lexems,function(_2d){
+_2c[_2d]=1;
+});
+var t=[];
+for(var i in _2c){
+t.push(i);
+}
+_2b.lexemsRe=this.langRe("("+t.join("|")+")",true);
+},processKeywords:function(_2e){
+var _2f=this.modes[this.modes.length-1];
+if(!_2f.keywords||!_2f.lexems){
+return _2(_2e);
+}
+if(!_2f.lexemsRe){
+this.buildLexemes(_2f);
+}
+_2f.lexemsRe.lastIndex=0;
+var _30=[],_31=0,_32=_2f.lexemsRe.exec(_2e);
+while(_32){
+_30.push(_2(_2e.substr(_31,_32.index-_31)));
+var _33=this.keywordMatch(_2f,_32);
+if(_33){
+++this.keywordCount;
+_30.push("<span class=\""+_33+"\">"+_2(_32[0])+"</span>");
+}else{
+_30.push(_2(_32[0]));
+}
+_31=_2f.lexemsRe.lastIndex;
+_32=_2f.lexemsRe.exec(_2e);
+}
+_30.push(_2(_2e.substr(_31,_2e.length-_31)));
+return _30.join("");
+},processModeInfo:function(_34,_35,end){
+var _36=this.modes[this.modes.length-1];
+if(end){
+this.result.push(this.processKeywords(_36.buffer+_34));
+return;
+}
+if(this.isIllegal(_35)){
+throw "Illegal";
+}
+var _37=this.subMode(_35);
+if(_37){
+_36.buffer+=_34;
+this.result.push(this.processKeywords(_36.buffer));
+if(_37.excludeBegin){
+this.result.push(_35+"<span class=\""+_37.className+"\">");
+_37.buffer="";
+}else{
+this.result.push("<span class=\""+_37.className+"\">");
+_37.buffer=_35;
+}
+this.modes.push(_37);
+this.relevance+=typeof _37.relevance=="number"?_37.relevance:1;
+return;
+}
+var _38=this.endOfMode(_35);
+if(_38){
+_36.buffer+=_34;
+if(_36.excludeEnd){
+this.result.push(this.processKeywords(_36.buffer)+"</span>"+_35);
+}else{
+this.result.push(this.processKeywords(_36.buffer+_35)+"</span>");
+}
+while(_38>1){
+this.result.push("</span>");
+--_38;
+this.modes.pop();
+}
+this.modes.pop();
+this.modes[this.modes.length-1].buffer="";
+return;
+}
+},highlight:function(_39){
+var _3a=0;
+this.lang.defaultMode.buffer="";
+do{
+var _3b=this.eatModeChunk(_39,_3a);
+this.processModeInfo(_3b.buffer,_3b.lexeme,_3b.end);
+_3a+=_3b.buffer.length+_3b.lexeme.length;
+}while(!_3b.end);
+if(this.modes.length>1){
+throw "Illegal";
+}
+}});
+function _3c(_3d,_3e,_3f){
+if(String(_3d.tagName).toLowerCase()=="code"&&String(_3d.parentNode.tagName).toLowerCase()=="pre"){
+var _40=document.createElement("div"),_41=_3d.parentNode.parentNode;
+_40.innerHTML="<pre><code class=\""+_3e+"\">"+_3f+"</code></pre>";
+_41.replaceChild(_40.firstChild,_3d.parentNode);
+}else{
+_3d.className=_3e;
+_3d.innerHTML=_3f;
+}
+};
+function _42(_43,str){
+var _44=new _10(_43,str);
+return {result:_44.result,langName:_43,partialResult:_44.partialResult};
+};
+function _45(_46,_47){
+var _48=_42(_47,_7(_46));
+_3c(_46,_46.className,_48.result);
+};
+function _49(str){
+var _4a="",_4b="",_4c=2,_4d=str;
+for(var key in dh.languages){
+if(!dh.languages[key].defaultMode){
+continue;
+}
+var _4e=new _10(key,_4d),_4f=_4e.keywordCount+_4e.relevance,_50=0;
+if(!_4a||_4f>_50){
+_50=_4f;
+_4a=_4e.result;
+_4b=_4e.langName;
+}
+}
+return {result:_4a,langName:_4b};
+};
+function _51(_52){
+var _53=_49(_7(_52));
+if(_53.result){
+_3c(_52,_53.langName,_53.result);
+}
+};
+dojox.highlight.processString=function(str,_54){
+return _54?_42(_54,str):_49(str);
+};
+dojox.highlight.init=function(_55){
+_55=dojo.byId(_55);
+if(dojo.hasClass(_55,"no-highlight")){
+return;
+}
+if(!_4(_55)){
+return;
+}
+var _56=_55.className.split(/\s+/),_57=dojo.some(_56,function(_58){
+if(_58.charAt(0)!="_"&&dh.languages[_58]){
+_45(_55,_58);
+return true;
+}
+return false;
+});
+if(!_57){
+_51(_55);
+}
+};
+dh.Code=function(p,n){
+dh.init(n);
+};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/java.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/java.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/java.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.java"]){
+dojo._hasResource["dojox.highlight.languages.java"]=true;
+dojo.provide("dojox.highlight.languages.java");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+var _2={"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"abstract":1,"assert":1,"const":1,"byte":1,"for":1,"final":1,"finally":1,"implements":1,"import":1,"extends":1,"long":1,"throw":1,"instanceof":2,"static":1,"protected":1,"boolean":1,"interface":2,"native":1,"if":1,"public":1,"new":1,"do":1,"return":1,"goto":1,"package":2,"void":2,"short":1,"else":1,"break":1,"new":1,"strictfp":1,"super":1,"true":1,"class":1,"synchronized":1,"case":1,"this":1,"short":1,"throws":1,"transient":1,"double":1,"volatile":1,"try":1,"this":1,"switch":1,"continue":1};
+dh.languages.java={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],illegal:"</",contains:["comment","string","number","function","block"],keywords:_2},modes:[_1.C_LINE_COMMENT_MODE,_1.C_BLOCK_COMMENT_MODE,_1.C_NUMBER_MODE,_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"function",begin:"\\(",end:"\\)",contains:["comment","number","string","function","block"],keywords:_2},{lexems:[_1.UNDERSCORE_IDENT_RE],className:"block",begin:"\\{",end:"\\}",contains:["comment","string","number","function","block"],keywords:_2}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/python.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/python.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/python.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.python"]){
+dojo._hasResource["dojox.highlight.languages.python"]=true;
+dojo.provide("dojox.highlight.languages.python");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.python={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],illegal:"(</|->)",contains:["comment","string","function","class","number","decorator"],keywords:{"and":1,"elif":1,"is":1,"global":1,"as":1,"in":1,"if":1,"from":1,"raise":1,"for":1,"except":1,"finally":1,"print":1,"import":1,"pass":1,"None":1,"return":1,"exec":1,"else":1,"break":1,"not":1,"with":1,"class":1,"assert":1,"yield":1,"try":1,"while":1,"continue":1,"del":1,"or":1,"def":1,"lambda":1}},modes:[{className:"function",lexems:[_1.UNDERSCORE_IDENT_RE],begin:"\\bdef ",end:":",illegal:"$",keywords:{"def":1},contains:["title","params"],relevance:10},{className:"class",lexems:[_1.UNDERSCORE_IDENT_RE],begin:"\\bclass ",end:":",illegal:"[${]",keywords:{"class":1},contains:["title","params"],relevance:10},{className:"title",begin:_1.UNDERSCORE_IDENT_RE,end:"^"},{className:"params",begin:"\\(",end:"\\)",contains:["string"]},_1.HASH_COMMENT_MODE,_1.C_NUMBER_MODE,{className:"string",begin:"'''",end:"'''",relevance:10},{className:"string",begin:"\"\"\"",end:"\"\"\"",relevance:10},_1.APOS_STRING_MODE,_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"string",begin:"r'",end:"'",relevance:10},{className:"string",begin:"r\"",end:"\"",relevance:10},{className:"string",begin:"u'",end:"(^|[^\\\\])'",relevance:10},{className:"string",begin:"u\"",end:"(^|[^\\\\])\"",relevance:10},{className:"string",begin:"ur'",end:"'",relevance:10},{className:"string",begin:"ur\"",end:"\"",relevance:10},{className:"decorator",begin:"@",end:"$"}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/cpp.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/cpp.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/cpp.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.cpp"]){
+dojo._hasResource["dojox.highlight.languages.cpp"]=true;
+dojo.provide("dojox.highlight.languages.cpp");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.cpp={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],illegal:"</",contains:["comment","string","number","preprocessor"],keywords:{"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"export":1,"virtual":1,"operator":2,"sizeof":2,"dynamic_cast":2,"typedef":2,"const_cast":2,"const":1,"struct":1,"for":1,"static_cast":2,"union":1,"namespace":1,"unsigned":1,"long":1,"throw":1,"volatile":2,"static":1,"protected":1,"bool":1,"template":1,"mutable":1,"if":1,"public":1,"friend":2,"do":1,"return":1,"goto":1,"auto":1,"void":2,"enum":1,"else":1,"break":1,"new":1,"extern":1,"using":1,"true":1,"class":1,"asm":1,"case":1,"typeid":1,"short":1,"reinterpret_cast":2,"default":1,"double":1,"register":1,"explicit":1,"signed":1,"typename":1,"try":1,"this":1,"switch":1,"continue":1,"wchar_t":1,"inline":1,"delete":1}},modes:[_1.C_LINE_COMMENT_MODE,_1.C_BLOCK_COMMENT_MODE,_1.C_NUMBER_MODE,_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"preprocessor",begin:"#",end:"$"}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/_dynamic.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/_dynamic.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/_dynamic.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._dynamic"]){
+dojo._hasResource["dojox.highlight.languages._dynamic"]=true;
+dojo.provide("dojox.highlight.languages._dynamic");
+dojo.require("dojox.highlight.languages.python");
+dojo.require("dojox.highlight.languages.xquery");
+dojo.require("dojox.highlight.languages.groovy");
+}
Index: trunk/web/dojo/dojox/highlight/languages/_www.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/_www.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/_www.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._www"]){
+dojo._hasResource["dojox.highlight.languages._www"]=true;
+dojo.provide("dojox.highlight.languages._www");
+dojo.require("dojox.highlight.languages.xml");
+dojo.require("dojox.highlight.languages.html");
+dojo.require("dojox.highlight.languages.css");
+dojo.require("dojox.highlight.languages.django");
+dojo.require("dojox.highlight.languages.javascript");
+}
Index: trunk/web/dojo/dojox/highlight/languages/groovy.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/groovy.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/groovy.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.groovy"]){
+dojo._hasResource["dojox.highlight.languages.groovy"]=true;
+dojo.provide("dojox.highlight.languages.groovy");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+var _2={"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"abstract":1,"assert":1,"const":1,"byte":1,"for":1,"final":1,"finally":1,"implements":1,"import":1,"extends":1,"long":1,"throw":1,"instanceof":2,"static":1,"protected":1,"boolean":1,"interface":2,"native":1,"if":1,"public":1,"new":1,"do":1,"return":1,"goto":1,"package":2,"void":2,"short":1,"else":1,"break":1,"new":1,"strictfp":1,"super":1,"true":1,"class":1,"synchronized":1,"case":1,"this":1,"short":1,"throws":1,"transient":1,"double":1,"volatile":1,"try":1,"this":1,"switch":1,"continue":1,"def":2};
+dh.languages.groovy={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],illegal:"</",contains:["comment","string","number","function","block"],keywords:_2},modes:[_1.C_LINE_COMMENT_MODE,_1.C_BLOCK_COMMENT_MODE,_1.C_NUMBER_MODE,{className:"string",begin:"\"\"\"",end:"\"\"\"",contains:["escape"],relevance:0},_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"string",begin:"'''",end:"'''",contains:["escape"],relevance:0},_1.APOS_STRING_MODE,{className:"function",begin:"\\(",end:"\\)",contains:["comment","number","string","function","block"],keywords:_2},{lexems:[_1.UNDERSCORE_IDENT_RE],className:"block",begin:"\\{",end:"\\}",contains:["comment","string","number","function","block"],keywords:_2}],GROOVY_KEYWORDS:_2};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/_static.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/_static.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/_static.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._static"]){
+dojo._hasResource["dojox.highlight.languages._static"]=true;
+dojo.provide("dojox.highlight.languages._static");
+dojo.require("dojox.highlight.languages.cpp");
+dojo.require("dojox.highlight.languages.java");
+dojo.require("dojox.highlight.languages.delphi");
+}
Index: trunk/web/dojo/dojox/highlight/languages/css.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/css.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/css.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.css"]){
+dojo._hasResource["dojox.highlight.languages.css"]=true;
+dojo.provide("dojox.highlight.languages.css");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.html");
+(function(){
+var dh=dojox.highlight,_1=dh.constants,_2=dh.languages;
+_2.css={defaultMode:{contains:["id","class","attr_selector","rules","comment"],keywords:_2.html.HTML_TAGS,lexems:[_1.IDENT_RE],illegal:"="},case_insensitive:true,modes:[{className:"id",begin:"\\#[A-Za-z0-9_-]+",end:"^"},{className:"class",begin:"\\.[A-Za-z0-9_-]+",end:"^",relevance:0},{className:"attr_selector",begin:"\\[",end:"\\]",illegal:"$"},{className:"rules",begin:"{",end:"}",lexems:["[A-Za-z-]+"],keywords:{"play-during":1,"counter-reset":1,"counter-increment":1,"min-height":1,"quotes":1,"border-top":1,"pitch":1,"font":1,"pause":1,"list-style-image":1,"border-width":1,"cue":1,"outline-width":1,"border-left":1,"elevation":1,"richness":1,"speech-rate":1,"border-bottom":1,"border-spacing":1,"background":1,"list-style-type":1,"text-align":1,"page-break-inside":1,"orphans":1,"page-break-before":1,"text-transform":1,"line-height":1,"padding-left":1,"font-size":1,"right":1,"word-spacing":1,"padding-top":1,"outline-style":1,"bottom":1,"content":1,"border-right-style":1,"padding-right":1,"border-left-style":1,"voice-family":1,"background-color":1,"border-bottom-color":1,"outline-color":1,"unicode-bidi":1,"max-width":1,"font-family":1,"caption-side":1,"border-right-width":1,"pause-before":1,"border-top-style":1,"color":1,"border-collapse":1,"border-bottom-width":1,"float":1,"height":1,"max-height":1,"margin-right":1,"border-top-width":1,"speak":1,"speak-header":1,"top":1,"cue-before":1,"min-width":1,"width":1,"font-variant":1,"border-top-color":1,"background-position":1,"empty-cells":1,"direction":1,"border-right":1,"visibility":1,"padding":1,"border-style":1,"background-attachment":1,"overflow":1,"border-bottom-style":1,"cursor":1,"margin":1,"display":1,"border-left-width":1,"letter-spacing":1,"vertical-align":1,"clip":1,"border-color":1,"list-style":1,"padding-bottom":1,"pause-after":1,"speak-numeral":1,"margin-left":1,"widows":1,"border":1,"font-style":1,"border-left-color":1,"pitch-range":1,"background-repeat":1,"table-layout":1,"margin-bottom":1,"speak-punctuation":1,"font-weight":1,"border-right-color":1,"page-break-after":1,"position":1,"white-space":1,"text-indent":1,"background-image":1,"volume":1,"stress":1,"outline":1,"clear":1,"z-index":1,"text-decoration":1,"margin-top":1,"azimuth":1,"cue-after":1,"left":1,"list-style-position":1},contains:["comment","value"]},_1.C_BLOCK_COMMENT_MODE,{className:"value",begin:":",end:";",endsWithParent:true,excludeBegin:true,excludeEnd:true}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/pygments/_html.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/pygments/_html.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/pygments/_html.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments._html"]){
+dojo._hasResource["dojox.highlight.languages.pygments._html"]=true;
+dojo.provide("dojox.highlight.languages.pygments._html");
+dojox.highlight.languages.pygments._html.tags={"code":1,"kbd":1,"font":1,"noscript":1,"style":1,"img":1,"title":1,"menu":1,"tt":1,"tr":1,"param":1,"li":1,"tfoot":1,"th":1,"input":1,"td":1,"dl":1,"blockquote":1,"fieldset":1,"big":1,"dd":1,"abbr":1,"optgroup":1,"dt":1,"button":1,"isindex":1,"p":1,"small":1,"div":1,"dir":1,"em":1,"frame":1,"meta":1,"sub":1,"bdo":1,"label":1,"acronym":1,"sup":1,"body":1,"xml":1,"basefont":1,"base":1,"br":1,"address":1,"strong":1,"legend":1,"ol":1,"script":1,"caption":1,"s":1,"col":1,"h2":1,"h3":1,"h1":1,"h6":1,"h4":1,"h5":1,"table":1,"select":1,"noframes":1,"span":1,"area":1,"dfn":1,"strike":1,"cite":1,"thead":1,"head":1,"option":1,"form":1,"hr":1,"var":1,"link":1,"b":1,"colgroup":1,"ul":1,"applet":1,"del":1,"iframe":1,"pre":1,"frameset":1,"ins":1,"tbody":1,"html":1,"samp":1,"map":1,"object":1,"a":1,"xmlns":1,"center":1,"textarea":1,"i":1,"q":1,"u":1};
+}
Index: trunk/web/dojo/dojox/highlight/languages/pygments/_www.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/pygments/_www.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/pygments/_www.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments._www"]){
+dojo._hasResource["dojox.highlight.languages.pygments._www"]=true;
+dojo.provide("dojox.highlight.languages.pygments._www");
+dojo.require("dojox.highlight.languages.pygments.xml");
+dojo.require("dojox.highlight.languages.pygments.html");
+dojo.require("dojox.highlight.languages.pygments.css");
+dojo.require("dojox.highlight.languages.pygments.javascript");
+}
Index: trunk/web/dojo/dojox/highlight/languages/pygments/html.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/pygments/html.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/pygments/html.js	(revision 9)
@@ -0,0 +1,21 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.html"]){
+dojo._hasResource["dojox.highlight.languages.pygments.html"]=true;
+dojo.provide("dojox.highlight.languages.pygments.html");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.pygments._html");
+(function(){
+var dh=dojox.highlight,_1=dh.languages,_2=[],ht=_1.pygments._html.tags;
+for(var _3 in ht){
+_2.push(_3);
+}
+_2="\\b("+_2.join("|")+")\\b";
+_1.html={case_insensitive:true,defaultMode:{contains:["name entity","comment","comment preproc","_script","_style","_tag"]},modes:[{className:"comment",begin:"<!--",end:"-->"},{className:"comment preproc",begin:"\\<\\!\\[CDATA\\[",end:"\\]\\]\\>"},{className:"comment preproc",begin:"\\<\\!",end:"\\>"},{className:"string",begin:"'",end:"'",illegal:"\\n",relevance:0},{className:"string",begin:"\"",end:"\"",illegal:"\\n",relevance:0},{className:"name entity",begin:"\\&[a-z]+;",end:"^"},{className:"name tag",begin:_2,end:"^",relevance:5},{className:"name attribute",begin:"\\b[a-z0-9_\\:\\-]+\\s*=",end:"^",relevance:0},{className:"_script",begin:"\\<script\\b",end:"\\</script\\>",relevance:5},{className:"_style",begin:"\\<style\\b",end:"\\</style\\>",relevance:5},{className:"_tag",begin:"\\<(?!/)",end:"\\>",contains:["name tag","name attribute","string","_value"]},{className:"_tag",begin:"\\</",end:"\\>",contains:["name tag"]},{className:"_value",begin:"[^\\s\\>]+",end:"^"}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/pygments/javascript.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/pygments/javascript.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/pygments/javascript.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.javascript"]){
+dojo._hasResource["dojox.highlight.languages.pygments.javascript"]=true;
+dojo.provide("dojox.highlight.languages.pygments.javascript");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.javascript={defaultMode:{lexems:["\\b[a-zA-Z]+"],keywords:{"keyword":{"for":1,"in":1,"while":1,"do":1,"break":1,"return":1,"continue":1,"if":1,"else":1,"throw":1,"try":1,"catch":1,"var":1,"with":1,"const":1,"label":1,"function":1,"new":1,"typeof":1,"instanceof":1},"keyword constant":{"true":1,"false":1,"null":1,"NaN":1,"Infinity":1,"undefined":1},"name builtin":{"Array":1,"Boolean":1,"Date":1,"Error":1,"Function":1,"Math":1,"netscape":1,"Number":1,"Object":1,"Packages":1,"RegExp":1,"String":1,"sun":1,"decodeURI":1,"decodeURIComponent":1,"encodeURI":1,"encodeURIComponent":1,"Error":1,"eval":1,"isFinite":1,"isNaN":1,"parseFloat":1,"parseInt":1,"document":1,"window":1},"name builtin pseudo":{"this":1}},contains:["comment single","comment multiline","number integer","number oct","number hex","number float","string single","string double","string regex","operator","punctuation","_function"]},modes:[{className:"comment single",begin:"//",end:"$",relevance:0},{className:"comment multiline",begin:"/\\*",end:"\\*/"},{className:"number integer",begin:"0|([1-9][0-9]*)",end:"^",relevance:0},{className:"number oct",begin:"0[0-9]+",end:"^",relevance:0},{className:"number hex",begin:"0x[0-9a-fA-F]+",end:"^",relevance:0},{className:"number float",begin:"([1-9][0-9]*\\.[0-9]*([eE][\\+-]?[0-9]+)?)|(\\.[0-9]+([eE][\\+-]?[0-9]+)?)|([0-9]+[eE][\\+-]?[0-9]+)",end:"^",relevance:0},{className:"string single",begin:"'",end:"'",illegal:"\\n",contains:["string escape"],relevance:0},{className:"string double",begin:"\"",end:"\"",illegal:"\\n",contains:["string escape"],relevance:0},{className:"string escape",begin:"\\\\.",end:"^",relevance:0},{className:"string regex",begin:"/.*?[^\\\\/]/[gim]*",end:"^"},{className:"operator",begin:"\\|\\||&&|\\+\\+|--|-=|\\+=|/=|\\*=|==|[-\\+\\*/=\\?:~\\^]",end:"^",relevance:0},{className:"punctuation",begin:"[{}\\(\\)\\[\\]\\.;]",end:"^",relevance:0},{className:"_function",begin:"function\\b",end:"{",lexems:[_1.UNDERSCORE_IDENT_RE],keywords:{keyword:{"function":1}},contains:["name function","_params"],relevance:5},{className:"name function",begin:_1.UNDERSCORE_IDENT_RE,end:"^"},{className:"_params",begin:"\\(",end:"\\)",contains:["comment single","comment multiline"]}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/pygments/css.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/pygments/css.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/pygments/css.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.css"]){
+dojo._hasResource["dojox.highlight.languages.pygments.css"]=true;
+dojo.provide("dojox.highlight.languages.pygments.css");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.pygments._html");
+(function(){
+var dh=dojox.highlight,_1=dh.languages;
+_1.css={defaultMode:{lexems:["\\b[a-zA-Z0-9]+\\b","\\b@media\b"],keywords:{"keyword":{"@media":1},"name tag":_1.pygments._html.tags},contains:["comment","string single","string double","punctuation","name decorator","name class","name function","_content"]},modes:[{className:"comment",begin:"/\\*",end:"\\*/",relevance:0},{className:"comment preproc",begin:"@[a-z][a-zA-Z]*",end:"^"},{className:"comment preproc",begin:"\\!important\\b",end:"^"},{className:"number",begin:"\\#[a-fA-F0-9]{3}\\b",end:"^",relevance:0},{className:"number",begin:"\\#[a-fA-F0-9]{6}\\b",end:"^",relevance:0},{className:"number",begin:"[\\.\\-]?[0-9]*[\\.]?[0-9]+(em|px|\\%|pt|pc|in|mm|cm|ex)",end:"^",relevance:0},{className:"number",begin:"\\-?[0-9]+",end:"^",relevance:0},{className:"string single",begin:"'",end:"'",illegal:"\\n",relevance:0},{className:"string double",begin:"\"",end:"\"",illegal:"\\n",relevance:0},{className:"operator",begin:"[~\\^\\*!%&\\[\\]\\(\\)<>\\|+=@:;,./?-]",end:"^",relevance:0},{className:"punctuation",begin:"[\\[\\]();]+",end:"^",relevance:0},{className:"name decorator",begin:"\\:[a-zA-Z0-9_\\-]+\\b",end:"^"},{className:"name class",begin:"\\.[a-zA-Z0-9_\\-]+\\b",end:"^"},{className:"name function",begin:"\\#[a-zA-Z0-9_\\-]+\\b",end:"^"},{className:"_content",begin:"\\{",end:"\\}",lexems:["\\b[a-zA-Z\\-]+\\b"],keywords:{"keyword":{"azimuth":1,"background-attachment":1,"background-color":1,"background-image":1,"background-position":1,"background-repeat":1,"background":1,"border-bottom-color":1,"border-bottom-style":1,"border-bottom-width":1,"border-left-color":1,"border-left-style":1,"border-left-width":1,"border-right":1,"border-right-color":1,"border-right-style":1,"border-right-width":1,"border-top-color":1,"border-top-style":1,"border-top-width":1,"border-bottom":1,"border-collapse":1,"border-left":1,"border-width":1,"border-color":1,"border-spacing":1,"border-style":1,"border-top":1,"border":1,"caption-side":1,"clear":1,"clip":1,"color":1,"content":1,"counter-increment":1,"counter-reset":1,"cue-after":1,"cue-before":1,"cue":1,"cursor":1,"direction":1,"display":1,"elevation":1,"empty-cells":1,"float":1,"font-family":1,"font-size":1,"font-size-adjust":1,"font-stretch":1,"font-style":1,"font-variant":1,"font-weight":1,"font":1,"height":1,"letter-spacing":1,"line-height":1,"list-style-type":1,"list-style-image":1,"list-style-position":1,"list-style":1,"margin-bottom":1,"margin-left":1,"margin-right":1,"margin-top":1,"margin":1,"marker-offset":1,"marks":1,"max-height":1,"max-width":1,"min-height":1,"min-width":1,"opacity":1,"orphans":1,"outline":1,"outline-color":1,"outline-style":1,"outline-width":1,"overflow":1,"padding-bottom":1,"padding-left":1,"padding-right":1,"padding-top":1,"padding":1,"page":1,"page-break-after":1,"page-break-before":1,"page-break-inside":1,"pause-after":1,"pause-before":1,"pause":1,"pitch":1,"pitch-range":1,"play-during":1,"position":1,"quotes":1,"richness":1,"right":1,"size":1,"speak-header":1,"speak-numeral":1,"speak-punctuation":1,"speak":1,"speech-rate":1,"stress":1,"table-layout":1,"text-align":1,"text-decoration":1,"text-indent":1,"text-shadow":1,"text-transform":1,"top":1,"unicode-bidi":1,"vertical-align":1,"visibility":1,"voice-family":1,"volume":1,"white-space":1,"widows":1,"width":1,"word-spacing":1,"z-index":1,"bottom":1,"left":1,"above":1,"absolute":1,"always":1,"armenian":1,"aural":1,"auto":1,"avoid":1,"baseline":1,"behind":1,"below":1,"bidi-override":1,"blink":1,"block":1,"bold":1,"bolder":1,"both":1,"capitalize":1,"center-left":1,"center-right":1,"center":1,"circle":1,"cjk-ideographic":1,"close-quote":1,"collapse":1,"condensed":1,"continuous":1,"crop":1,"crosshair":1,"cross":1,"cursive":1,"dashed":1,"decimal-leading-zero":1,"decimal":1,"default":1,"digits":1,"disc":1,"dotted":1,"double":1,"e-resize":1,"embed":1,"extra-condensed":1,"extra-expanded":1,"expanded":1,"fantasy":1,"far-left":1,"far-right":1,"faster":1,"fast":1,"fixed":1,"georgian":1,"groove":1,"hebrew":1,"help":1,"hidden":1,"hide":1,"higher":1,"high":1,"hiragana-iroha":1,"hiragana":1,"icon":1,"inherit":1,"inline-table":1,"inline":1,"inset":1,"inside":1,"invert":1,"italic":1,"justify":1,"katakana-iroha":1,"katakana":1,"landscape":1,"larger":1,"large":1,"left-side":1,"leftwards":1,"level":1,"lighter":1,"line-through":1,"list-item":1,"loud":1,"lower-alpha":1,"lower-greek":1,"lower-roman":1,"lowercase":1,"ltr":1,"lower":1,"low":1,"medium":1,"message-box":1,"middle":1,"mix":1,"monospace":1,"n-resize":1,"narrower":1,"ne-resize":1,"no-close-quote":1,"no-open-quote":1,"no-repeat":1,"none":1,"normal":1,"nowrap":1,"nw-resize":1,"oblique":1,"once":1,"open-quote":1,"outset":1,"outside":1,"overline":1,"pointer":1,"portrait":1,"px":1,"relative":1,"repeat-x":1,"repeat-y":1,"repeat":1,"rgb":1,"ridge":1,"right-side":1,"rightwards":1,"s-resize":1,"sans-serif":1,"scroll":1,"se-resize":1,"semi-condensed":1,"semi-expanded":1,"separate":1,"serif":1,"show":1,"silent":1,"slow":1,"slower":1,"small-caps":1,"small-caption":1,"smaller":1,"soft":1,"solid":1,"spell-out":1,"square":1,"static":1,"status-bar":1,"super":1,"sw-resize":1,"table-caption":1,"table-cell":1,"table-column":1,"table-column-group":1,"table-footer-group":1,"table-header-group":1,"table-row":1,"table-row-group":1,"text":1,"text-bottom":1,"text-top":1,"thick":1,"thin":1,"transparent":1,"ultra-condensed":1,"ultra-expanded":1,"underline":1,"upper-alpha":1,"upper-latin":1,"upper-roman":1,"uppercase":1,"url":1,"visible":1,"w-resize":1,"wait":1,"wider":1,"x-fast":1,"x-high":1,"x-large":1,"x-loud":1,"x-low":1,"x-small":1,"x-soft":1,"xx-large":1,"xx-small":1,"yes":1},"name builtin":{"indigo":1,"gold":1,"firebrick":1,"indianred":1,"yellow":1,"darkolivegreen":1,"darkseagreen":1,"mediumvioletred":1,"mediumorchid":1,"chartreuse":1,"mediumslateblue":1,"black":1,"springgreen":1,"crimson":1,"lightsalmon":1,"brown":1,"turquoise":1,"olivedrab":1,"cyan":1,"silver":1,"skyblue":1,"gray":1,"darkturquoise":1,"goldenrod":1,"darkgreen":1,"darkviolet":1,"darkgray":1,"lightpink":1,"teal":1,"darkmagenta":1,"lightgoldenrodyellow":1,"lavender":1,"yellowgreen":1,"thistle":1,"violet":1,"navy":1,"orchid":1,"blue":1,"ghostwhite":1,"honeydew":1,"cornflowerblue":1,"darkblue":1,"darkkhaki":1,"mediumpurple":1,"cornsilk":1,"red":1,"bisque":1,"slategray":1,"darkcyan":1,"khaki":1,"wheat":1,"deepskyblue":1,"darkred":1,"steelblue":1,"aliceblue":1,"gainsboro":1,"mediumturquoise":1,"floralwhite":1,"coral":1,"purple":1,"lightgrey":1,"lightcyan":1,"darksalmon":1,"beige":1,"azure":1,"lightsteelblue":1,"oldlace":1,"greenyellow":1,"royalblue":1,"lightseagreen":1,"mistyrose":1,"sienna":1,"lightcoral":1,"orangered":1,"navajowhite":1,"lime":1,"palegreen":1,"burlywood":1,"seashell":1,"mediumspringgreen":1,"fuchsia":1,"papayawhip":1,"blanchedalmond":1,"peru":1,"aquamarine":1,"white":1,"darkslategray":1,"ivory":1,"dodgerblue":1,"lemonchiffon":1,"chocolate":1,"orange":1,"forestgreen":1,"slateblue":1,"olive":1,"mintcream":1,"antiquewhite":1,"darkorange":1,"cadetblue":1,"moccasin":1,"limegreen":1,"saddlebrown":1,"darkslateblue":1,"lightskyblue":1,"deeppink":1,"plum":1,"aqua":1,"darkgoldenrod":1,"maroon":1,"sandybrown":1,"magenta":1,"tan":1,"rosybrown":1,"pink":1,"lightblue":1,"palevioletred":1,"mediumseagreen":1,"dimgray":1,"powderblue":1,"seagreen":1,"snow":1,"mediumblue":1,"midnightblue":1,"paleturquoise":1,"palegoldenrod":1,"whitesmoke":1,"darkorchid":1,"salmon":1,"lightslategray":1,"lawngreen":1,"lightgreen":1,"tomato":1,"hotpink":1,"lightyellow":1,"lavenderblush":1,"linen":1,"mediumaquamarine":1,"green":1,"blueviolet":1,"peachpuff":1}},contains:["comment","comment preproc","number","string single","string double","punctuation","name decorator","name class","name function"]}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/pygments/xml.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/pygments/xml.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/pygments/xml.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.pygments.xml"]){
+dojo._hasResource["dojox.highlight.languages.pygments.xml"]=true;
+dojo.provide("dojox.highlight.languages.pygments.xml");
+dojo.require("dojox.highlight._base");
+dojox.highlight.languages.pygments.xml={a:1};
+dojox.highlight.languages.xml={defaultMode:{contains:["name entity","comment","comment preproc","_tag"]},modes:[{className:"comment",begin:"<!--",end:"-->"},{className:"comment preproc",begin:"\\<\\!\\[CDATA\\[",end:"\\]\\]\\>"},{className:"comment preproc",begin:"\\<\\!",end:"\\>"},{className:"comment preproc",begin:"\\<\\?",end:"\\?\\>",relevance:5},{className:"string",begin:"'",end:"'",illegal:"\\n",relevance:0},{className:"string",begin:"\"",end:"\"",illegal:"\\n",relevance:0},{className:"name entity",begin:"\\&[a-z]+;",end:"^"},{className:"name tag",begin:"\\b[a-z0-9_\\:\\-]+\\b",end:"^"},{className:"name attribute",begin:"\\b[a-z0-9_\\:\\-]+=",end:"^",relevance:0},{className:"_tag",begin:"\\<",end:"\\>",contains:["name tag","name attribute","string"]},{className:"_tag",begin:"\\</",end:"\\>",contains:["name tag"]}]};
+}
Index: trunk/web/dojo/dojox/highlight/languages/xquery.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/xquery.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/xquery.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.xquery"]){
+dojo._hasResource["dojox.highlight.languages.xquery"]=true;
+dojo.provide("dojox.highlight.languages.xquery");
+dojo.require("dojox.highlight._base");
+(function(){
+var _1={className:"comment",begin:"\\(\\:",end:"\\:\\)"};
+var _2={"ancestor":1,"ancestor-or-self":1,"and":1,"as":1,"ascending":1,"at":1,"attribute":1,"base-uri":1,"boundary-space":1,"by":1,"case":1,"cast":1,"castable":1,"child":1,"collation":1,"comment":1,"construction":1,"copy-namespaces":1,"declare":1,"default":1,"descendant":1,"descendant-or-self":1,"descending":1,"div":1,"document":1,"document-node":1,"element":1,"else":1,"empty":1,"empty-sequence":1,"encoding":1,"eq":1,"every":1,"except":1,"external":1,"following":1,"following-sibling":1,"for":1,"function":1,"ge":1,"greatest":1,"gt":1,"idiv":1,"if":1,"import":1,"in":1,"inherit":1,"instance":1,"intersect":1,"is":1,"item":1,"lax":1,"le":1,"least":1,"let":1,"lt":1,"mod":1,"module":1,"namespace":1,"ne":1,"node":1,"no-inherit":1,"no-preserve":1,"of":1,"option":1,"or":1,"order":1,"ordered":1,"ordering":1,"parent":1,"preceding":1,"preceding-sibling":1,"preserve":1,"processing-instruction":1,"return":1,"satisfies":1,"schema":1,"schema-attribute":1,"schema-element":1,"self":1,"some":1,"stable":1,"strict":1,"strip":1,"text":1,"then":1,"to":1,"treat":1,"typeswitch":1,"union":1,"unordered":1,"validate":1,"variable":1,"version":1,"where":1,"xquery":1};
+var dh=dojox.highlight,_3=dh.constants;
+dh.languages.xquery={case_insensitive:true,defaultMode:{lexems:[_3.IDENT_RE],contains:["string","number","comment"],keywords:{"keyword":_2}},modes:[_1],XQUERY_COMMENT:_1};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/sql.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/sql.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/sql.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.sql"]){
+dojo._hasResource["dojox.highlight.languages.sql"]=true;
+dojo.provide("dojox.highlight.languages.sql");
+dojo.require("dojox.highlight._base");
+(function(){
+var _1={"all":1,"partial":1,"global":1,"month":1,"current_timestamp":1,"using":1,"go":1,"revoke":1,"smallint":1,"indicator":1,"end-exec":1,"disconnect":1,"zone":1,"with":1,"character":1,"assertion":1,"to":1,"add":1,"current_user":1,"usage":1,"input":1,"local":1,"alter":1,"match":1,"collate":1,"real":1,"then":1,"rollback":1,"get":1,"read":1,"timestamp":1,"session_user":1,"not":1,"integer":1,"bit":1,"unique":1,"day":1,"minute":1,"desc":1,"insert":1,"execute":1,"like":1,"level":1,"decimal":1,"drop":1,"continue":1,"isolation":1,"found":1,"where":1,"constraints":1,"domain":1,"right":1,"national":1,"some":1,"module":1,"transaction":1,"relative":1,"second":1,"connect":1,"escape":1,"close":1,"system_user":1,"for":1,"deferred":1,"section":1,"cast":1,"current":1,"sqlstate":1,"allocate":1,"intersect":1,"deallocate":1,"numeric":1,"public":1,"preserve":1,"full":1,"goto":1,"initially":1,"asc":1,"no":1,"key":1,"output":1,"collation":1,"group":1,"by":1,"union":1,"session":1,"both":1,"last":1,"language":1,"constraint":1,"column":1,"of":1,"space":1,"foreign":1,"deferrable":1,"prior":1,"connection":1,"unknown":1,"action":1,"commit":1,"view":1,"or":1,"first":1,"into":1,"float":1,"year":1,"primary":1,"cascaded":1,"except":1,"restrict":1,"set":1,"references":1,"names":1,"table":1,"outer":1,"open":1,"select":1,"size":1,"are":1,"rows":1,"from":1,"prepare":1,"distinct":1,"leading":1,"create":1,"only":1,"next":1,"inner":1,"authorization":1,"schema":1,"corresponding":1,"option":1,"declare":1,"precision":1,"immediate":1,"else":1,"timezone_minute":1,"external":1,"varying":1,"translation":1,"true":1,"case":1,"exception":1,"join":1,"hour":1,"default":1,"double":1,"scroll":1,"value":1,"cursor":1,"descriptor":1,"values":1,"dec":1,"fetch":1,"procedure":1,"delete":1,"and":1,"false":1,"int":1,"is":1,"describe":1,"char":1,"as":1,"at":1,"in":1,"varchar":1,"null":1,"trailing":1,"any":1,"absolute":1,"current_time":1,"end":1,"grant":1,"privileges":1,"when":1,"cross":1,"check":1,"write":1,"current_date":1,"pad":1,"begin":1,"temporary":1,"exec":1,"time":1,"update":1,"catalog":1,"user":1,"sql":1,"date":1,"on":1,"identity":1,"timezone_hour":1,"natural":1,"whenever":1,"interval":1,"work":1,"order":1,"cascade":1,"diagnostics":1,"nchar":1,"having":1,"left":1};
+var dh=dojox.highlight,_2=dh.constants;
+dh.languages.sql={case_insensitive:true,defaultMode:{lexems:[_2.IDENT_RE],contains:["string","number","comment"],keywords:{"keyword":_1,"aggregate":{"count":1,"sum":1,"min":1,"max":1,"avg":1}}},modes:[_2.C_NUMBER_MODE,_2.C_BLOCK_COMMENT_MODE,{className:"comment",begin:"--",end:"$"},{className:"string",begin:"'",end:"'",contains:["escape","squote"],relevance:0},{className:"squote",begin:"''",end:"^"},{className:"string",begin:"\"",end:"\"",contains:["escape","dquote"],relevance:0},{className:"dquote",begin:"\"\"",end:"^"},{className:"string",begin:"`",end:"`",contains:["escape"]},_2.BACKSLASH_ESCAPE]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/xml.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/xml.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/xml.js	(revision 9)
@@ -0,0 +1,19 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.xml"]){
+dojo._hasResource["dojox.highlight.languages.xml"]=true;
+dojo.provide("dojox.highlight.languages.xml");
+dojo.require("dojox.highlight._base");
+(function(){
+var _1={className:"comment",begin:"<!--",end:"-->"};
+var _2={className:"attribute",begin:" [a-zA-Z-]+=",end:"^",contains:["value"]};
+var _3={className:"value",begin:"\"",end:"\""};
+var dh=dojox.highlight,_4=dh.constants;
+dh.languages.xml={defaultMode:{contains:["pi","comment","cdata","tag"]},case_insensitive:true,modes:[{className:"pi",begin:"<\\?",end:"\\?>",relevance:10},_1,{className:"cdata",begin:"<\\!\\[CDATA\\[",end:"\\]\\]>"},{className:"tag",begin:"</?",end:">",contains:["title","tag_internal"],relevance:1.5},{className:"title",begin:"[A-Za-z:_][A-Za-z0-9\\._:-]+",end:"^",relevance:0},{className:"tag_internal",begin:"^",endsWithParent:true,contains:["attribute"],relevance:0,illegal:"[\\+\\.]"},_2,_3],XML_COMMENT:_1,XML_ATTR:_2,XML_VALUE:_3};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/django.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/django.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/django.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.django"]){
+dojo._hasResource["dojox.highlight.languages.django"]=true;
+dojo.provide("dojox.highlight.languages.django");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.xml");
+dojo.require("dojox.highlight.languages.html");
+(function(){
+var dh=dojox.highlight,_1=dh.constants,_2=dh.languages,x=_2.xml,h=_2.html;
+_2.django={defaultMode:{contains:["tag","comment","doctype","template_comment","template_tag","variable"]},case_insensitive:true,modes:[x.XML_COMMENT,h.HTML_DOCTYPE,{className:"tag",lexems:[_1.IDENT_RE],keywords:h.HTML_TAGS,begin:"<[A-Za-z/]",end:">",contains:["attribute","template_comment","template_tag","variable"]},x.XML_ATTR,h.HTML_ATTR,{className:"value",begin:"\"",end:"\"",contains:["template_comment","template_tag","variable"]},h.HTML_VALUE,{className:"template_comment",begin:"\\{\\%\\s*comment\\s*\\%\\}",end:"\\{\\%\\s*endcomment\\s*\\%\\}"},{className:"template_comment",begin:"\\{#",end:"#\\}"},{className:"template_tag",begin:"\\{\\%",end:"\\%\\}",lexems:[_1.IDENT_RE],keywords:{"comment":1,"endcomment":1,"load":1,"templatetag":1,"ifchanged":1,"endifchanged":1,"if":1,"endif":1,"firstof":1,"for":1,"endfor":1,"in":1,"ifnotequal":1,"endifnotequal":1,"widthratio":1,"extends":1,"include":1,"spaceless":1,"endspaceless":1,"regroup":1,"by":1,"as":1,"ifequal":1,"endifequal":1,"ssi":1,"now":1,"with":1,"cycle":1,"url":1,"filter":1,"endfilter":1,"debug":1,"block":1,"endblock":1,"else":1},contains:["filter"]},{className:"variable",begin:"\\{\\{",end:"\\}\\}",contains:["filter"]},{className:"filter",begin:"\\|[A-Za-z]+\\:?",end:"^",excludeEnd:true,lexems:[_1.IDENT_RE],keywords:{"truncatewords":1,"removetags":1,"linebreaksbr":1,"yesno":1,"get_digit":1,"timesince":1,"random":1,"striptags":1,"filesizeformat":1,"escape":1,"linebreaks":1,"length_is":1,"ljust":1,"rjust":1,"cut":1,"urlize":1,"fix_ampersands":1,"title":1,"floatformat":1,"capfirst":1,"pprint":1,"divisibleby":1,"add":1,"make_list":1,"unordered_list":1,"urlencode":1,"timeuntil":1,"urlizetrunc":1,"wordcount":1,"stringformat":1,"linenumbers":1,"slice":1,"date":1,"dictsort":1,"dictsortreversed":1,"default_if_none":1,"pluralize":1,"lower":1,"join":1,"center":1,"default":1,"truncatewords_html":1,"upper":1,"length":1,"phone2numeric":1,"wordwrap":1,"time":1,"addslashes":1,"slugify":1,"first":1},contains:["argument"]},{className:"argument",begin:"\"",end:"\""}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/html.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/html.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/html.js	(revision 9)
@@ -0,0 +1,21 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.html"]){
+dojo._hasResource["dojox.highlight.languages.html"]=true;
+dojo.provide("dojox.highlight.languages.html");
+dojo.require("dojox.highlight._base");
+dojo.require("dojox.highlight.languages.xml");
+(function(){
+var _1={"code":1,"kbd":1,"font":1,"noscript":1,"style":1,"img":1,"title":1,"menu":1,"tt":1,"tr":1,"param":1,"li":1,"tfoot":1,"th":1,"input":1,"td":1,"dl":1,"blockquote":1,"fieldset":1,"big":1,"dd":1,"abbr":1,"optgroup":1,"dt":1,"button":1,"isindex":1,"p":1,"small":1,"div":1,"dir":1,"em":1,"frame":1,"meta":1,"sub":1,"bdo":1,"label":1,"acronym":1,"sup":1,"body":1,"xml":1,"basefont":1,"base":1,"br":1,"address":1,"strong":1,"legend":1,"ol":1,"script":1,"caption":1,"s":1,"col":1,"h2":1,"h3":1,"h1":1,"h6":1,"h4":1,"h5":1,"table":1,"select":1,"noframes":1,"span":1,"area":1,"dfn":1,"strike":1,"cite":1,"thead":1,"head":1,"option":1,"form":1,"hr":1,"var":1,"link":1,"b":1,"colgroup":1,"ul":1,"applet":1,"del":1,"iframe":1,"pre":1,"frameset":1,"ins":1,"tbody":1,"html":1,"samp":1,"map":1,"object":1,"a":1,"xmlns":1,"center":1,"textarea":1,"i":1,"q":1,"u":1};
+var _2={className:"doctype",begin:"<!DOCTYPE",end:">",relevance:10};
+var _3={className:"attribute",begin:" [a-zA-Z]+",end:"^"};
+var _4={className:"value",begin:"[a-zA-Z0-9]+",end:"^"};
+var dh=dojox.highlight,_5=dh.constants,_6=dh.languages,x=_6.xml;
+_6.html={defaultMode:{contains:["tag","comment","doctype"]},case_insensitive:true,modes:[x.XML_COMMENT,_2,{className:"tag",lexems:[_5.IDENT_RE],keywords:_1,begin:"<[A-Za-z/]",end:">",contains:["attribute"],illegal:"[\\+\\.]"},x.XML_ATTR,_3,x.XML_VALUE,_4],HTML_TAGS:_1,HTML_DOCTYPE:_2,HTML_ATTR:_3,HTML_VALUE:_4};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/delphi.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/delphi.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/delphi.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.delphi"]){
+dojo._hasResource["dojox.highlight.languages.delphi"]=true;
+dojo.provide("dojox.highlight.languages.delphi");
+dojo.require("dojox.highlight._base");
+(function(){
+var _1={"and":1,"safecall":1,"cdecl":1,"then":1,"string":1,"exports":1,"library":1,"not":1,"pascal":1,"set":1,"virtual":1,"file":1,"in":1,"array":1,"label":1,"packed":1,"end.":1,"index":1,"while":1,"const":1,"raise":1,"for":1,"to":1,"implementation":1,"with":1,"except":1,"overload":1,"destructor":1,"downto":1,"finally":1,"program":1,"exit":1,"unit":1,"inherited":1,"override":1,"if":1,"type":1,"until":1,"function":1,"do":1,"begin":1,"repeat":1,"goto":1,"nil":1,"far":1,"initialization":1,"object":1,"else":1,"var":1,"uses":1,"external":1,"resourcestring":1,"interface":1,"end":1,"finalization":1,"class":1,"asm":1,"mod":1,"case":1,"on":1,"shr":1,"shl":1,"of":1,"register":1,"xorwrite":1,"threadvar":1,"try":1,"record":1,"near":1,"stored":1,"constructor":1,"stdcall":1,"inline":1,"div":1,"out":1,"or":1,"procedure":1};
+var _2={"safecall":1,"stdcall":1,"pascal":1,"stored":1,"const":1,"implementation":1,"finalization":1,"except":1,"to":1,"finally":1,"program":1,"inherited":1,"override":1,"then":1,"exports":1,"string":1,"read":1,"not":1,"mod":1,"shr":1,"try":1,"div":1,"shl":1,"set":1,"library":1,"message":1,"packed":1,"index":1,"for":1,"near":1,"overload":1,"label":1,"downto":1,"exit":1,"public":1,"goto":1,"interface":1,"asm":1,"on":1,"of":1,"constructor":1,"or":1,"private":1,"array":1,"unit":1,"raise":1,"destructor":1,"var":1,"type":1,"until":1,"function":1,"else":1,"external":1,"with":1,"case":1,"default":1,"record":1,"while":1,"protected":1,"property":1,"procedure":1,"published":1,"and":1,"cdecl":1,"do":1,"threadvar":1,"file":1,"in":1,"if":1,"end":1,"virtual":1,"write":1,"far":1,"out":1,"begin":1,"repeat":1,"nil":1,"initialization":1,"object":1,"uses":1,"resourcestring":1,"class":1,"register":1,"xorwrite":1,"inline":1};
+var dh=dojox.highlight,_3=dh.constants;
+dh.languages.delphi={defaultMode:{lexems:[_3.IDENT_RE],illegal:"(\"|\\$[G-Zg-z]|\\/\\*|</)",contains:["comment","string","number","function","class"],keywords:_1},case_insensitive:true,modes:[{className:"comment",begin:"{",end:"}"},{className:"comment",begin:"\\(\\*",end:"\\*\\)",relevance:10},_3.C_LINE_COMMENT_MODE,{className:"number",begin:_3.NUMBER_RE,end:"^",relevance:0},{className:"string",begin:"'",end:"'",contains:["quote"],relevance:0},{className:"string",begin:"(#\\d+)+",end:"^"},{className:"quote",begin:"''",end:"^"},{className:"function",begin:"function",end:"[:;]",lexems:[_3.IDENT_RE],keywords:{"function":1},contains:["title","params","comment"],relevance:0},{className:"function",begin:"(procedure|constructor|destructor)",end:";",lexems:[_3.IDENT_RE],keywords:{"constructor":1,"destructor":1,"procedure":1},contains:["title","params","comment"],relevance:10},{className:"title",begin:_3.IDENT_RE,end:"^"},{className:"params",begin:"\\(",end:"\\)",lexems:[_3.IDENT_RE],keywords:_1,contains:["string"]},{className:"class",begin:"=\\s*class",end:"end;",lexems:[_3.IDENT_RE],keywords:_2,contains:["string","comment","function"]}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/javascript.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/javascript.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/javascript.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages.javascript"]){
+dojo._hasResource["dojox.highlight.languages.javascript"]=true;
+dojo.provide("dojox.highlight.languages.javascript");
+dojo.require("dojox.highlight._base");
+(function(){
+var dh=dojox.highlight,_1=dh.constants;
+dh.languages.javascript={defaultMode:{lexems:[_1.UNDERSCORE_IDENT_RE],contains:["string","comment","number","regexp","function"],keywords:{"keyword":{"in":1,"if":1,"for":1,"while":1,"finally":1,"var":1,"new":1,"function":1,"do":1,"return":1,"void":1,"else":1,"break":1,"catch":1,"instanceof":1,"with":1,"throw":1,"case":1,"default":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1},"literal":{"true":1,"false":1,"null":1}}},modes:[_1.C_LINE_COMMENT_MODE,_1.C_BLOCK_COMMENT_MODE,_1.C_NUMBER_MODE,_1.APOS_STRING_MODE,_1.QUOTE_STRING_MODE,_1.BACKSLASH_ESCAPE,{className:"regexp",begin:"/.*?[^\\\\/]/[gim]*",end:"^"},{className:"function",begin:"function\\b",end:"{",lexems:[_1.UNDERSCORE_IDENT_RE],keywords:{"function":1},contains:["title","params"]},{className:"title",begin:_1.UNDERSCORE_IDENT_RE,end:"^"},{className:"params",begin:"\\(",end:"\\)",contains:["string","comment"]}]};
+})();
+}
Index: trunk/web/dojo/dojox/highlight/languages/_all.js
===================================================================
--- trunk/web/dojo/dojox/highlight/languages/_all.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight/languages/_all.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight.languages._all"]){
+dojo._hasResource["dojox.highlight.languages._all"]=true;
+dojo.provide("dojox.highlight.languages._all");
+dojo.require("dojox.highlight.languages._static");
+dojo.require("dojox.highlight.languages._dynamic");
+dojo.require("dojox.highlight.languages._www");
+}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/native.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/native.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/native.css	(revision 9)
@@ -0,0 +1,21 @@
+
+code {background-color: #202020; color: #d0d0d0}
+code .comment {color: #999; font-style: italic}
+code .comment.preproc {color: #cd2828; font-style: normal; font-weight: bold}
+code .comment.special {color: #e50808; font-style: normal; font-weight: bold; background-color: #520000}
+code .keyword {color: #6ab825; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator.word {color: #6ab825; font-weight: bold}
+code .name.builtin {color: #24909d}
+code .name.function {color: #40ffff}
+code .name.class {color: #447fcf; text-decoration: underline}
+code .name.namespace {color: #447fcf; text-decoration: underline}
+code .name.exception {color: #bbb}
+code .name.variable {color: #40ffff}
+code .name.constant {color: #40ffff}
+code .name.attribute {color: #bbb}
+code .name.tag {color: #6ab825; font-weight: bold}
+code .name.decorator {color: #ffa500}
+code .string {color: #ed9d13}
+code .string.other {color: #ffa500}
+code .number {color: #3677a9}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/emacs.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/emacs.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/emacs.css	(revision 9)
@@ -0,0 +1,29 @@
+
+code {background-color: #f8f8f8}
+code .comment {color: #080; font-style: italic}
+code .comment.preproc {font-style: normal}
+code .comment.special {font-style: normal; font-weight: bold}
+code .keyword {color: #a2f; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator {color: #666}
+code .operator.word {color: #a2f; font-weight: bold}
+code .name.builtin {color: #a2f}
+code .name.function {color: #00a000}
+code .name.class {color: #00f}
+code .name.namespace {color: #00f; font-weight: bold}
+code .name.exception {color: #d2413a; font-weight: bold}
+code .name.variable {color: #b8860b}
+code .name.constant {color: #800}
+code .name.label {color: #a0a000}
+code .name.entity {color: #999; font-weight: bold}
+code .name.attribute {color: #b44}
+code .name.tag {color: #008000; font-weight: bold}
+code .name.decorator {color: #a2f}
+code .string {color: #b44}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #b68; font-weight: bold}
+code .string.escape {color: #b62; font-weight: bold}
+code .string.regex {color: #b68}
+code .string.symbol {color: #b8860b}
+code .string.other {color: #008000}
+code .number {color: #666}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/perldoc.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/perldoc.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/perldoc.css	(revision 9)
@@ -0,0 +1,23 @@
+
+code {background-color: #eed}
+code .comment {color: #228b22}
+code .comment.preproc {color: #1e889b}
+code .comment.special {color: #8b008b; font-weight: bold}
+code .keyword {color: #8b008b; font-weight: bold}
+code .keyword.type {color: #a7a7a7}
+code .operator.word {color: #8b008b}
+code .name.builtin {color: #658b00}
+code .name.function {color: #008b45}
+code .name.class {color: #008b45; font-weight: bold}
+code .name.namespace {color: #008b45; text-decoration: underline}
+code .name.exception {color: #008b45; font-weight: bold}
+code .name.variable {color: #00688b}
+code .name.constant {color: #00688b}
+code .name.attribute {color: #658b00}
+code .name.tag {color: #8b008b; font-weight: bold}
+code .name.decorator {color: #707a7c}
+code .string {color: #cd5555}
+code .string.regex {color: #1c7e71}
+code .string.other {color: #cb6c20}
+code .string.heredoc {color: #1c7e71; font-style: italic}
+code .number {color: #b452cd}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/autumn.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/autumn.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/autumn.css	(revision 9)
@@ -0,0 +1,22 @@
+
+code .comment {color: #aaa; font-style: italic}
+code .comment.preproc {color: #4c8317; font-style: normal}
+code .comment.special {color: #00a}
+code .keyword {color: #00a}
+code .keyword.type {color: #0aa}
+code .operator.word {color: #00a}
+code .name.builtin {color: #0aa}
+code .name.function {color: #0a0}
+code .name.class {color: #0a0; text-decoration: underline}
+code .name.namespace {color: #0aa; text-decoration: underline}
+code .name.exception {color: #D2413A; font-weight: bold}
+code .name.variable {color: #a00}
+code .name.constant {color: #a00}
+code .name.entity {color: #800; font-weight: bold}
+code .name.attribute {color: #1e90ff}
+code .name.tag {color: #1e90ff; font-weight: bold}
+code .name.decorator {color: #888}
+code .string {color: #a50}
+code .string.regex {color: #099}
+code .string.symbol {color: #00a}
+code .number {color: #099}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/trac.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/trac.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/trac.css	(revision 9)
@@ -0,0 +1,20 @@
+
+code .comment {color: #998; font-style: italic}
+code .comment.preproc {color: #999; font-style: normal; font-weight: bold}
+code .comment.special {color: #999; font-weight: bold}
+code .keyword {font-weight: bold}
+code .keyword.type {color: #458}
+code .operator {font-weight: bold}
+code .name.builtin {color: #999}
+code .name.function {color: #900; font-weight: bold}
+code .name.class {color: #458; font-weight: bold}
+code .name.namespace {color: #555}
+code .name.exception {color: #900; font-weight: bold}
+code .name.variable {color: #008080}
+code .name.constant {color: #008080}
+code .name.entity {color: #800080}
+code .name.attribute {color: #008080}
+code .name.tag {color: #000080}
+code .string {color: #b84}
+code .string.regex {color: #808000}
+code .number {color: #099}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/friendly.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/friendly.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/friendly.css	(revision 9)
@@ -0,0 +1,29 @@
+
+code {background-color: #f8f8f8}
+code .comment {color: #60a0b0; font-style: italic}
+code .comment.preproc {color: #007020; font-style: normal}
+code .comment.special {background-color: #fff0f0; font-style: normal}
+code .keyword {color: #007020; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator {color: #666}
+code .operator.word {color: #007020; font-weight: bold}
+code .name.builtin {color: #007020}
+code .name.function {color: #06287e}
+code .name.class {color: #0e84b5; font-weight: bold}
+code .name.namespace {color: #0e84b5; font-weight: bold}
+code .name.exception {color: #007020}
+code .name.variable {color: #bb60d5}
+code .name.constant {color: #60add5}
+code .name.label {color: #002070; font-weight: bold}
+code .name.entity {color: #d55537; font-weight: bold}
+code .name.attribute {color: #4070a0}
+code .name.tag {color: #062873; font-weight: bold}
+code .name.decorator {color: #555; font-weight: bold}
+code .string {color: #4070a0}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #70a0d0; font-style: italic}
+code .string.escape {color: #4070a0; font-weight: bold}
+code .string.regex {color: #235388}
+code .string.symbol {color: #517918}
+code .string.other {color: #c65d09}
+code .number {color: #40a070}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/borland.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/borland.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/borland.css	(revision 9)
@@ -0,0 +1,11 @@
+
+code .comment {color: #080; font-style: italic}
+code .comment.preproc {color: #008080; font-style: normal}
+code .comment.special {font-weight: bold; font-style: normal}
+code .keyword {color: #000080; font-weight: bold}
+code .operator.word {font-weight: bold}
+code .name.attribute {color: #f00}
+code .name.tag {color: #000080; font-weight: bold}
+code .string {color: #00f}
+code .string.char {color: #800080}
+code .number {color: #00f}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/fruity.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/fruity.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/fruity.css	(revision 9)
@@ -0,0 +1,14 @@
+
+code {background-color: #111; color: #fff}
+code .comment {color: #080; background-color: #0f140f; font-style: italic}
+code .comment.preproc {color: #ff0007; font-weight: bold}
+code .keyword {color: #fb660a; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .keyword.type {color: #cdcaa9; font-weight: bold}
+code .name.function {color: #ff0086; font-weight: bold}
+code .name.variable {color: #fb660a}
+code .name.constant {color: #0086d2}
+code .name.attribute {color: #ff0086; font-weight: bold}
+code .name.tag {color: #fb660a; font-weight: bold}
+code .string {color: #0086d2}
+code .number {color: #0086f7; font-weight: bold}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/manni.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/manni.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/manni.css	(revision 9)
@@ -0,0 +1,30 @@
+
+code {background-color: #f0f3f3}
+code .comment {color: #09f; font-style: italic}
+code .comment.preproc {color: #099; font-style: normal}
+code .comment.special {font-weight: bold}
+code .keyword {color: #069; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .keyword.type {color: #078}
+code .operator {color: #555}
+code .operator.word {color: #000; font-weight: bold}
+code .name.builtin {color: #366}
+code .name.function {color: #c0f}
+code .name.class {color: #0a8; font-weight: bold}
+code .name.namespace {color: #0cf; font-weight: bold}
+code .name.exception {color: #c00; font-weight: bold}
+code .name.variable {color: #033}
+code .name.constant {color: #360}
+code .name.label {color: #99f}
+code .name.entity {color: #999; font-weight: bold}
+code .name.attribute {color: #309}
+code .name.tag {color: #309; font-weight: bold}
+code .name.decorator {color: #99f}
+code .string {color: #c30}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #a00}
+code .string.escape {color: #c30; font-weight: bold}
+code .string.regex {color: #3aa}
+code .string.symbol {color: #fc3}
+code .string.other {color: #c30}
+code .number {color: #f60}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/default.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/default.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/default.css	(revision 9)
@@ -0,0 +1,28 @@
+
+code {background-color: #f8f8f8}
+code .comment {color: #408080; font-style: italic}
+code .comment.preproc {color: #bc7a00; font-style: normal}
+code .keyword {color: #008000; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .operator {color: #666}
+code .operator.word {color: #a2f}
+code .name.builtin {color: #008000}
+code .name.function {color: #00f}
+code .name.class {color: #00f; font-weight: bold}
+code .name.namespace {color: #00f; font-weight: bold}
+code .name.exception {color: #d2413a; font-weight: bold}
+code .name.variable {color: #19177c}
+code .name.constant {color: #800}
+code .name.label {color: #a0a000}
+code .name.entity {color: #999; font-weight: bold}
+code .name.attribute {color: #7d9029}
+code .name.tag {color: #008000; font-weight: bold}
+code .name.decorator {color: #a2f}
+code .string {color: #ba2121}
+code .string.doc {font-style: italic}
+code .string.interpol {color: #b68; font-weight: bold}
+code .string.escape {color: #b62; font-weight: bold}
+code .string.regex {color: #b68}
+code .string.symbol {color: #19177c}
+code .string.other {color: #008000}
+code .number {color: #666}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/murphy.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/murphy.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/murphy.css	(revision 9)
@@ -0,0 +1,37 @@
+
+code .comment {color: #666; font-style: italic}
+code .comment.preproc {color: #579; font-style: normal}
+code .comment.special {color: #c00; font-weight: bold}
+code .keyword {color: #289; font-weight: bold}
+code .keyword.pseudo {color: #08f}
+code .keyword.type {color: #66f}
+code .operator {color: #333}
+code .operator.word {color: #000; font-weight: bold}
+code .name.builtin {color: #072}
+code .name.function {color: #5ed; font-weight: bold}
+code .name.class {color: #e9e; font-weight: bold}
+code .name.namespace {color: #0e84b5; font-weight: bold}
+code .name.exception {color: #f00; font-weight: bold}
+code .name.variable {color: #036}
+code .name.variable.instance {color: #aaf}
+code .name.variable.class {color: #ccf}
+code .name.variable.global {color: #f84}
+code .name.constant {color: #5ed; font-weight: bold}
+code .name.label {color: #970; font-weight: bold}
+code .name.entity {color: #800}
+code .name.attribute {color: #007}
+code .name.tag {color: #070}
+code .name.decorator {color: #555; font-weight: bold}
+code .string {background-color: #e0e0ff}
+code .string.char {color: #88f; background-color: transparent}
+code .string.doc {color: #d42; background-color: transparent}
+code .string.interpol {background-color: #eee}
+code .string.escape {color: #666; font-weight: bold}
+code .string.regex {color: #000; background-color: #e0e0ff}
+code .string.symbol {color: #fc8; background-color: transparent}
+code .string.other {color: #f88}
+code .number {color: #60e; font-weight: bold}
+code .number.integer {color: #66f; font-weight: bold}
+code .number.float {color: #60e; font-weight: bold}
+code .number.hex {color: #058; font-weight: bold}
+code .number.oct {color: #40e; font-weight: bold}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/colorful.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/colorful.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/colorful.css	(revision 9)
@@ -0,0 +1,37 @@
+
+code .comment {color: #888}
+code .comment.preproc {color: #579}
+code .comment.special {color: #c00; font-weight: bold}
+code .keyword {color: #080; font-weight: bold}
+code .keyword.pseudo {color: #038}
+code .keyword.type {color: #339}
+code .operator {color: #333}
+code .operator.word {color: #000; font-weight: bold}
+code .name.builtin {color: #007020}
+code .name.function {color: #06b; font-weight: bold}
+code .name.class {color: #b06; font-weight: bold}
+code .name.namespace {color: #0e84b5; font-weight: bold}
+code .name.exception {color: #f00; font-weight: bold}
+code .name.variable {color: #963}
+code .name.variable.instance {color: #33b}
+code .name.variable.class {color: #369}
+code .name.variable.global {color: #d70; font-weight: bold}
+code .name.constant {color: #036; font-weight: bold}
+code .name.label {color: #970; font-weight: bold}
+code .name.entity {color: #800; font-weight: bold}
+code .name.attribute {color: #00c}
+code .name.tag {color: #070}
+code .name.decorator {color: #555; font-weight: bold}
+code .string {background-color: #fff0f0}
+code .string.char {color: #04d; background-color: transparent}
+code .string.doc {color: #d42; background-color: transparent}
+code .string.interpol {background-color: #eee}
+code .string.escape {color: #666; font-weight: bold}
+code .string.regex {color: #000; background-color: #fff0f0}
+code .string.symbol {color: #a60; background-color: transparent}
+code .string.other {color: #d20}
+code .number {color: #60e}
+code .number.integer {color: #00d}
+code .number.float {color: #60e}
+code .number.hex {color: #058}
+code .number.oct {color: #40e}
Index: trunk/web/dojo/dojox/highlight/resources/pygments/pastie.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/pygments/pastie.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/pygments/pastie.css	(revision 9)
@@ -0,0 +1,30 @@
+
+code .comment {color: #888}
+code .comment.preproc {color: #c00; font-weight: bold}
+code .comment.special {color: #c00; font-weight: bold; background-color: #fff0f0}
+code .keyword {color: #008800; font-weight: bold}
+code .keyword.pseudo {font-weight: normal}
+code .keyword.type {color: #888}
+code .operator.word {color: #080}
+code .name.builtin {color: #038}
+code .name.function {color: #06b; font-weight: bold}
+code .name.class {color: #b06; font-weight: bold}
+code .name.namespace {color: #b06; font-weight: bold}
+code .name.exception {color: #b06; font-weight: bold}
+code .name.variable {color: #369}
+code .name.variable.class {color: #369}
+code .name.variable.instance {color: #33b}
+code .name.variable.global {color: #d70}
+code .name.constant {color: #036; font-weight: bold}
+code .name.label {color: #369; font-style: italic}
+code .name.attribute {color: #369}
+code .name.tag {color: #b06; font-weight: bold}
+code .name.decorator {color: #555}
+code .name.property {color: #369; font-weight: bold}
+code .string {color: #d20; background-color: #fff0f0}
+code .string.interpol {color: #33b}
+code .string.escape {color: #04d}
+code .string.regex {color: #080; background-color: #fff0f0}
+code .string.symbol {color: #a60}
+code .string.other {color: #2b2; background-color: #f0fff0}
+code .number {color: #00d; font-weight: bold}
Index: trunk/web/dojo/dojox/highlight/resources/highlight.css
===================================================================
--- trunk/web/dojo/dojox/highlight/resources/highlight.css	(revision 0)
+++ trunk/web/dojo/dojox/highlight/resources/highlight.css	(revision 9)
@@ -0,0 +1,51 @@
+
+.string,
+.function .title,
+.class .title, 
+.tag .attribute .value,
+.css .rules .value,
+.preprocessor,
+.ruby .symbol,
+.ruby .instancevar,
+.ruby .class .parent,
+.built_in,
+.sql .aggregate,
+.django .template_tag,
+.django .variable,
+.smalltalk .class {
+	color: #800;
+}
+.comment,
+.java .annotation,
+.template_comment {
+	color: #888;
+}
+.number,
+.regexp,
+.javascript .literal,
+.smalltalk .symbol,
+.smalltalk .char {
+	color: #080;
+}
+.javadoc,
+.ruby .string,
+.python .decorator,
+.django .filter .argument,
+.smalltalk .localvars,
+.smalltalk .array,
+.css .attr_selector,
+.xml .pi {
+	color: #88F;
+}
+.keyword,
+.css .id,
+.phpdoc,
+.function .title,
+.class .title,
+.vbscript .built_in,
+.sql .aggregate,
+.rsl .built_in,
+.smalltalk .class,
+.xml .tag .title {
+	font-weight: bold;
+}
Index: trunk/web/dojo/dojox/highlight/README
===================================================================
--- trunk/web/dojo/dojox/highlight/README	(revision 0)
+++ trunk/web/dojo/dojox/highlight/README	(revision 9)
@@ -0,0 +1,31 @@
+-------------------------------------------------------------------------------
+dojox.highlight
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 11/25/2007
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Ivan Sagalaev (softwaremaniacs.org) Author
+	Peter Higgins (dante) Dojo port
+-------------------------------------------------------------------------------
+Project description
+
+A syntax highlighting engine for the Dojo Toolkit
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo base only.
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+simply get the dojox/highlight folder (and dojox/highlight.js)  from the 
+dojox SVN repository, and include in your page via 
+
+dojo.require("dojox.highlight");
+
Index: trunk/web/dojo/dojox/flash.js
===================================================================
--- trunk/web/dojo/dojox/flash.js	(revision 0)
+++ trunk/web/dojo/dojox/flash.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.flash"]){
+dojo._hasResource["dojox.flash"]=true;
+dojo.provide("dojox.flash");
+dojo.require("dojox.flash._base");
+}
Index: trunk/web/dojo/dojox/resources/_modules.js
===================================================================
--- trunk/web/dojo/dojox/resources/_modules.js	(revision 0)
+++ trunk/web/dojo/dojox/resources/_modules.js	(revision 9)
@@ -0,0 +1,7 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
Index: trunk/web/dojo/dojox/resources/README.template
===================================================================
--- trunk/web/dojo/dojox/resources/README.template	(revision 0)
+++ trunk/web/dojo/dojox/resources/README.template	(revision 9)
@@ -0,0 +1,42 @@
+-------------------------------------------------------------------------------
+Project Name
+-------------------------------------------------------------------------------
+Version X.XXX
+Release date: MM/DD/YYYY
+-------------------------------------------------------------------------------
+Project state:
+[Object1]:	experimental | alpha | beta | production
+[Object2]:	experimental | alpha | beta | production
+-------------------------------------------------------------------------------
+[   ]	l18n support?
+[   ]	a11y support?
+-------------------------------------------------------------------------------
+Credits
+[Object1]:	Author one (author contact info)
+[Object2]:	Author two (author contact info)
+-------------------------------------------------------------------------------
+Project description
+
+Describe the point of the project here.
+-------------------------------------------------------------------------------
+Dependencies:
+
+List any dependencies here.
+-------------------------------------------------------------------------------
+Documentation
+
+Any notes about documentation--such as a link to a page in the Book of Dojo,
+documentation state, etc.--should go here.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Use this to explain in detail what a person needs to do in order to use this
+project.  Include URLs for grabbing source, URLs for any dependencies, etc.
+Also be sure to include any additional information, such as where to place
+CSS files, images, other media, etc.  The goal is that someone reading this
+file can follow your instructions and be using this project within minutes.
+-------------------------------------------------------------------------------
+Additional Notes
+
+Anything else you think is of interest (for example, object hierarchy) should
+be placed here.
Index: trunk/web/dojo/dojox/gfx3d/gradient.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d/gradient.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/gradient.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d.gradient"]){
+dojo._hasResource["dojox.gfx3d.gradient"]=true;
+dojo.provide("dojox.gfx3d.gradient");
+dojo.require("dojox.gfx3d.vector");
+dojo.require("dojox.gfx3d.matrix");
+(function(){
+var _1=function(a,b){
+return Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2));
+};
+var N=32;
+dojox.gfx3d.gradient=function(_2,_3,_4,_5,_6,to,_7){
+var m=dojox.gfx3d.matrix,v=dojox.gfx3d.vector,mx=m.normalize(_7),f=m.multiplyPoint(mx,_5*Math.cos(_6)+_4.x,_5*Math.sin(_6)+_4.y,_4.z),t=m.multiplyPoint(mx,_5*Math.cos(to)+_4.x,_5*Math.sin(to)+_4.y,_4.z),c=m.multiplyPoint(mx,_4.x,_4.y,_4.z),_8=(to-_6)/N,r=_1(f,t)/2,_9=_2[_3.type],_a=_3.finish,_b=_3.color,_c=[{offset:0,color:_9.call(_2,v.substract(f,c),_a,_b)}];
+for(var a=_6+_8;a<to;a+=_8){
+var p=m.multiplyPoint(mx,_5*Math.cos(a)+_4.x,_5*Math.sin(a)+_4.y,_4.z),df=_1(f,p),dt=_1(t,p);
+_c.push({offset:df/(df+dt),color:_9.call(_2,v.substract(p,c),_a,_b)});
+}
+_c.push({offset:1,color:_9.call(_2,v.substract(t,c),_a,_b)});
+return {type:"linear",x1:0,y1:-r,x2:0,y2:r,colors:_c};
+};
+})();
+}
Index: trunk/web/dojo/dojox/gfx3d/scheduler.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d/scheduler.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/scheduler.js	(revision 9)
@@ -0,0 +1,93 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d.scheduler"]){
+dojo._hasResource["dojox.gfx3d.scheduler"]=true;
+dojo.provide("dojox.gfx3d.scheduler");
+dojo.provide("dojox.gfx3d.drawer");
+dojo.require("dojox.gfx3d.vector");
+dojo.mixin(dojox.gfx3d.scheduler,{zOrder:function(_1,_2){
+_2=_2?_2:dojox.gfx3d.scheduler.order;
+_1.sort(function(a,b){
+return _2(b)-_2(a);
+});
+return _1;
+},bsp:function(_3,_4){
+_4=_4?_4:dojox.gfx3d.scheduler.outline;
+var p=new dojox.gfx3d.scheduler.BinarySearchTree(_3[0],_4);
+dojo.forEach(_3.slice(1),function(_5){
+p.add(_5,_4);
+});
+return p.iterate(_4);
+},order:function(it){
+return it.getZOrder();
+},outline:function(it){
+return it.getOutline();
+}});
+dojo.declare("dojox.gfx3d.scheduler.BinarySearchTree",null,{constructor:function(_6,_7){
+this.plus=null;
+this.minus=null;
+this.object=_6;
+var o=_7(_6);
+this.orient=o[0];
+this.normal=dojox.gfx3d.vector.normalize(o);
+},add:function(_8,_9){
+var _a=0.5,o=_9(_8),v=dojox.gfx3d.vector,n=this.normal,a=this.orient,_b=dojox.gfx3d.scheduler.BinarySearchTree;
+if(dojo.every(o,function(_c){
+return Math.floor(_a+v.dotProduct(n,v.substract(_c,a)))<=0;
+})){
+if(this.minus){
+this.minus.add(_8,_9);
+}else{
+this.minus=new _b(_8,_9);
+}
+}else{
+if(dojo.every(o,function(_d){
+return Math.floor(_a+v.dotProduct(n,v.substract(_d,a)))>=0;
+})){
+if(this.plus){
+this.plus.add(_8,_9);
+}else{
+this.plus=new _b(_8,_9);
+}
+}else{
+throw "The case: polygon cross siblings' plate is not implemneted yet";
+}
+}
+},iterate:function(_e){
+var _f=0.5;
+var v=dojox.gfx3d.vector;
+var _10=[];
+var _11=null;
+var _12={x:0,y:0,z:-10000};
+if(Math.floor(_f+v.dotProduct(this.normal,v.substract(_12,this.orient)))<=0){
+_11=[this.plus,this.minus];
+}else{
+_11=[this.minus,this.plus];
+}
+if(_11[0]){
+_10=_10.concat(_11[0].iterate());
+}
+_10.push(this.object);
+if(_11[1]){
+_10=_10.concat(_11[1].iterate());
+}
+return _10;
+}});
+dojo.mixin(dojox.gfx3d.drawer,{conservative:function(_13,_14,_15){
+dojo.forEach(this.objects,function(_16){
+_16.destroy();
+});
+dojo.forEach(_14,function(_17){
+_17.draw(_15.lighting);
+});
+},chart:function(_18,_19,_1a){
+dojo.forEach(this.todos,function(_1b){
+_1b.draw(_1a.lighting);
+});
+}});
+}
Index: trunk/web/dojo/dojox/gfx3d/README
===================================================================
--- trunk/web/dojo/dojox/gfx3d/README	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/README	(revision 9)
@@ -0,0 +1,36 @@
+-------------------------------------------------------------------------------
+dojox.gfx3d
+-------------------------------------------------------------------------------
+Version 0.100
+Release date: 10/31/2007
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Kun Xi (bookstack@gmail.com)
+	Eugene Lazutkin (eugene.lazutkin@gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+Implementation of simple portable 3D graphics library.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core, dojox.gfx.
+-------------------------------------------------------------------------------
+Documentation
+
+Not ready yet.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/gfx3d.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/gfx3d/*
+
+Install into the following directory structure:
+/dojox/gfx3d/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/gfx3d/vector.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d/vector.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/vector.js	(revision 9)
@@ -0,0 +1,61 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d.vector"]){
+dojo._hasResource["dojox.gfx3d.vector"]=true;
+dojo.provide("dojox.gfx3d.vector");
+dojo.mixin(dojox.gfx3d.vector,{sum:function(){
+var v={x:0,y:0,z:0};
+dojo.forEach(arguments,function(_1){
+v.x+=_1.x;
+v.y+=_1.y;
+v.z+=_1.z;
+});
+return v;
+},center:function(){
+var l=arguments.length;
+if(l==0){
+return {x:0,y:0,z:0};
+}
+var v=dojox.gfx3d.vector.sum(arguments);
+return {x:v.x/l,y:v.y/l,z:v.z/l};
+},substract:function(a,b){
+return {x:a.x-b.x,y:a.y-b.y,z:a.z-b.z};
+},_crossProduct:function(x,y,z,u,v,w){
+return {x:y*w-z*v,y:z*u-x*w,z:x*v-y*u};
+},crossProduct:function(a,b,c,d,e,f){
+if(arguments.length==6&&dojo.every(arguments,function(_2){
+return typeof _2=="number";
+})){
+return dojox.gfx3d.vector._crossProduct(a,b,c,d,e,f);
+}
+return dojox.gfx3d.vector._crossProduct(a.x,a.y,a.z,b.x,b.y,b.z);
+},_dotProduct:function(x,y,z,u,v,w){
+return x*u+y*v+z*w;
+},dotProduct:function(a,b,c,d,e,f){
+if(arguments.length==6&&dojo.every(arguments,function(_3){
+return typeof _3=="number";
+})){
+return dojox.gfx3d.vector._dotProduct(a,b,c,d,e,f);
+}
+return dojox.gfx3d.vector._dotProduct(a.x,a.y,a.z,b.x,b.y,b.z);
+},normalize:function(a,b,c){
+var l,m,n;
+if(a instanceof Array){
+l=a[0];
+m=a[1];
+n=a[2];
+}else{
+l=a;
+m=b;
+n=c;
+}
+var u=dojox.gfx3d.vector.substract(m,l);
+var v=dojox.gfx3d.vector.substract(n,l);
+return dojox.gfx3d.vector.crossProduct(u,v);
+}});
+}
Index: trunk/web/dojo/dojox/gfx3d/matrix.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d/matrix.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/matrix.js	(revision 9)
@@ -0,0 +1,158 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d.matrix"]){
+dojo._hasResource["dojox.gfx3d.matrix"]=true;
+dojo.provide("dojox.gfx3d.matrix");
+dojox.gfx3d.matrix._degToRad=function(_1){
+return Math.PI*_1/180;
+};
+dojox.gfx3d.matrix._radToDeg=function(_2){
+return _2/Math.PI*180;
+};
+dojox.gfx3d.matrix.Matrix3D=function(_3){
+if(_3){
+if(typeof _3=="number"){
+this.xx=this.yy=this.zz=_3;
+}else{
+if(_3 instanceof Array){
+if(_3.length>0){
+var m=dojox.gfx3d.matrix.normalize(_3[0]);
+for(var i=1;i<_3.length;++i){
+var l=m;
+var r=dojox.gfx3d.matrix.normalize(_3[i]);
+m=new dojox.gfx3d.matrix.Matrix3D();
+m.xx=l.xx*r.xx+l.xy*r.yx+l.xz*r.zx;
+m.xy=l.xx*r.xy+l.xy*r.yy+l.xz*r.zy;
+m.xz=l.xx*r.xz+l.xy*r.yz+l.xz*r.zz;
+m.yx=l.yx*r.xx+l.yy*r.yx+l.yz*r.zx;
+m.yy=l.yx*r.xy+l.yy*r.yy+l.yz*r.zy;
+m.yz=l.yx*r.xz+l.yy*r.yz+l.yz*r.zz;
+m.zx=l.zx*r.xx+l.zy*r.yx+l.zz*r.zx;
+m.zy=l.zx*r.xy+l.zy*r.yy+l.zz*r.zy;
+m.zz=l.zx*r.xz+l.zy*r.yz+l.zz*r.zz;
+m.dx=l.xx*r.dx+l.xy*r.dy+l.xz*r.dz+l.dx;
+m.dy=l.yx*r.dx+l.yy*r.dy+l.yz*r.dz+l.dy;
+m.dz=l.zx*r.dx+l.zy*r.dy+l.zz*r.dz+l.dz;
+}
+dojo.mixin(this,m);
+}
+}else{
+dojo.mixin(this,_3);
+}
+}
+}
+};
+dojo.extend(dojox.gfx3d.matrix.Matrix3D,{xx:1,xy:0,xz:0,yx:0,yy:1,yz:0,zx:0,zy:0,zz:1,dx:0,dy:0,dz:0});
+dojo.mixin(dojox.gfx3d.matrix,{identity:new dojox.gfx3d.matrix.Matrix3D(),translate:function(a,b,c){
+if(arguments.length>1){
+return new dojox.gfx3d.matrix.Matrix3D({dx:a,dy:b,dz:c});
+}
+return new dojox.gfx3d.matrix.Matrix3D({dx:a.x,dy:a.y,dz:a.z});
+},scale:function(a,b,c){
+if(arguments.length>1){
+return new dojox.gfx3d.matrix.Matrix3D({xx:a,yy:b,zz:c});
+}
+if(typeof a=="number"){
+return new dojox.gfx3d.matrix.Matrix3D({xx:a,yy:a,zz:a});
+}
+return new dojox.gfx3d.matrix.Matrix3D({xx:a.x,yy:a.y,zz:a.z});
+},rotateX:function(_4){
+var c=Math.cos(_4);
+var s=Math.sin(_4);
+return new dojox.gfx3d.matrix.Matrix3D({yy:c,yz:-s,zy:s,zz:c});
+},rotateXg:function(_5){
+return dojox.gfx3d.matrix.rotateX(dojox.gfx3d.matrix._degToRad(_5));
+},rotateY:function(_6){
+var c=Math.cos(_6);
+var s=Math.sin(_6);
+return new dojox.gfx3d.matrix.Matrix3D({xx:c,xz:s,zx:-s,zz:c});
+},rotateYg:function(_7){
+return dojox.gfx3d.matrix.rotateY(dojox.gfx3d.matrix._degToRad(_7));
+},rotateZ:function(_8){
+var c=Math.cos(_8);
+var s=Math.sin(_8);
+return new dojox.gfx3d.matrix.Matrix3D({xx:c,xy:-s,yx:s,yy:c});
+},rotateZg:function(_9){
+return dojox.gfx3d.matrix.rotateZ(dojox.gfx3d.matrix._degToRad(_9));
+},cameraTranslate:function(a,b,c){
+if(arguments.length>1){
+return new dojox.gfx3d.matrix.Matrix3D({dx:-a,dy:-b,dz:-c});
+}
+return new dojox.gfx3d.matrix.Matrix3D({dx:-a.x,dy:-a.y,dz:-a.z});
+},cameraRotateX:function(_a){
+var c=Math.cos(-_a);
+var s=Math.sin(-_a);
+return new dojox.gfx3d.matrix.Matrix3D({yy:c,yz:-s,zy:s,zz:c});
+},cameraRotateXg:function(_b){
+return dojox.gfx3d.matrix.rotateX(dojox.gfx3d.matrix._degToRad(_b));
+},cameraRotateY:function(_c){
+var c=Math.cos(-_c);
+var s=Math.sin(-_c);
+return new dojox.gfx3d.matrix.Matrix3D({xx:c,xz:s,zx:-s,zz:c});
+},cameraRotateYg:function(_d){
+return dojox.gfx3d.matrix.rotateY(dojox.gfx3d.matrix._degToRad(_d));
+},cameraRotateZ:function(_e){
+var c=Math.cos(-_e);
+var s=Math.sin(-_e);
+return new dojox.gfx3d.matrix.Matrix3D({xx:c,xy:-s,yx:s,yy:c});
+},cameraRotateZg:function(_f){
+return dojox.gfx3d.matrix.rotateZ(dojox.gfx3d.matrix._degToRad(_f));
+},normalize:function(_10){
+return (_10 instanceof dojox.gfx3d.matrix.Matrix3D)?_10:new dojox.gfx3d.matrix.Matrix3D(_10);
+},clone:function(_11){
+var obj=new dojox.gfx3d.matrix.Matrix3D();
+for(var i in _11){
+if(typeof (_11[i])=="number"&&typeof (obj[i])=="number"&&obj[i]!=_11[i]){
+obj[i]=_11[i];
+}
+}
+return obj;
+},invert:function(_12){
+var m=dojox.gfx3d.matrix.normalize(_12);
+var D=m.xx*m.yy*m.zz+m.xy*m.yz*m.zx+m.xz*m.yx*m.zy-m.xx*m.yz*m.zy-m.xy*m.yx*m.zz-m.xz*m.yy*m.zx;
+var M=new dojox.gfx3d.matrix.Matrix3D({xx:(m.yy*m.zz-m.yz*m.zy)/D,xy:(m.xz*m.zy-m.xy*m.zz)/D,xz:(m.xy*m.yz-m.xz*m.yy)/D,yx:(m.yz*m.zx-m.yx*m.zz)/D,yy:(m.xx*m.zz-m.xz*m.zx)/D,yz:(m.xz*m.yx-m.xx*m.yz)/D,zx:(m.yx*m.zy-m.yy*m.zx)/D,zy:(m.xy*m.zx-m.xx*m.zy)/D,zz:(m.xx*m.yy-m.xy*m.yx)/D,dx:-1*(m.xy*m.yz*m.dz+m.xz*m.dy*m.zy+m.dx*m.yy*m.zz-m.xy*m.dy*m.zz-m.xz*m.yy*m.dz-m.dx*m.yz*m.zy)/D,dy:(m.xx*m.yz*m.dz+m.xz*m.dy*m.zx+m.dx*m.yx*m.zz-m.xx*m.dy*m.zz-m.xz*m.yx*m.dz-m.dx*m.yz*m.zx)/D,dz:-1*(m.xx*m.yy*m.dz+m.xy*m.dy*m.zx+m.dx*m.yx*m.zy-m.xx*m.dy*m.zy-m.xy*m.yx*m.dz-m.dx*m.yy*m.zx)/D});
+return M;
+},_multiplyPoint:function(m,x,y,z){
+return {x:m.xx*x+m.xy*y+m.xz*z+m.dx,y:m.yx*x+m.yy*y+m.yz*z+m.dy,z:m.zx*x+m.zy*y+m.zz*z+m.dz};
+},multiplyPoint:function(_13,a,b,c){
+var m=dojox.gfx3d.matrix.normalize(_13);
+if(typeof a=="number"&&typeof b=="number"&&typeof c=="number"){
+return dojox.gfx3d.matrix._multiplyPoint(m,a,b,c);
+}
+return dojox.gfx3d.matrix._multiplyPoint(m,a.x,a.y,a.z);
+},multiply:function(_14){
+var m=dojox.gfx3d.matrix.normalize(_14);
+for(var i=1;i<arguments.length;++i){
+var l=m;
+var r=dojox.gfx3d.matrix.normalize(arguments[i]);
+m=new dojox.gfx3d.matrix.Matrix3D();
+m.xx=l.xx*r.xx+l.xy*r.yx+l.xz*r.zx;
+m.xy=l.xx*r.xy+l.xy*r.yy+l.xz*r.zy;
+m.xz=l.xx*r.xz+l.xy*r.yz+l.xz*r.zz;
+m.yx=l.yx*r.xx+l.yy*r.yx+l.yz*r.zx;
+m.yy=l.yx*r.xy+l.yy*r.yy+l.yz*r.zy;
+m.yz=l.yx*r.xz+l.yy*r.yz+l.yz*r.zz;
+m.zx=l.zx*r.xx+l.zy*r.yx+l.zz*r.zx;
+m.zy=l.zx*r.xy+l.zy*r.yy+l.zz*r.zy;
+m.zz=l.zx*r.xz+l.zy*r.yz+l.zz*r.zz;
+m.dx=l.xx*r.dx+l.xy*r.dy+l.xz*r.dz+l.dx;
+m.dy=l.yx*r.dx+l.yy*r.dy+l.yz*r.dz+l.dy;
+m.dz=l.zx*r.dx+l.zy*r.dy+l.zz*r.dz+l.dz;
+}
+return m;
+},_project:function(m,x,y,z){
+return {x:m.xx*x+m.xy*y+m.xz*z+m.dx,y:m.yx*x+m.yy*y+m.yz*z+m.dy,z:m.zx*x+m.zy*y+m.zz*z+m.dz};
+},project:function(_15,a,b,c){
+var m=dojox.gfx3d.matrix.normalize(_15);
+if(typeof a=="number"&&typeof b=="number"&&typeof c=="number"){
+return dojox.gfx3d.matrix._project(m,a,b,c);
+}
+return dojox.gfx3d.matrix._project(m,a.x,a.y,a.z);
+}});
+dojox.gfx3d.Matrix3D=dojox.gfx3d.matrix.Matrix3D;
+}
Index: trunk/web/dojo/dojox/gfx3d/lighting.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d/lighting.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/lighting.js	(revision 9)
@@ -0,0 +1,158 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d.lighting"]){
+dojo._hasResource["dojox.gfx3d.lighting"]=true;
+dojo.provide("dojox.gfx3d.lighting");
+dojo.require("dojox.gfx._base");
+(function(){
+var _1=dojox.gfx3d.lighting;
+dojo.mixin(dojox.gfx3d.lighting,{black:function(){
+return {r:0,g:0,b:0,a:1};
+},white:function(){
+return {r:1,g:1,b:1,a:1};
+},toStdColor:function(c){
+c=dojox.gfx.normalizeColor(c);
+return {r:c.r/255,g:c.g/255,b:c.b/255,a:c.a};
+},fromStdColor:function(c){
+return new dojo.Color([Math.round(255*c.r),Math.round(255*c.g),Math.round(255*c.b),c.a]);
+},scaleColor:function(s,c){
+return {r:s*c.r,g:s*c.g,b:s*c.b,a:s*c.a};
+},addColor:function(a,b){
+return {r:a.r+b.r,g:a.g+b.g,b:a.b+b.b,a:a.a+b.a};
+},multiplyColor:function(a,b){
+return {r:a.r*b.r,g:a.g*b.g,b:a.b*b.b,a:a.a*b.a};
+},saturateColor:function(c){
+return {r:c.r<0?0:c.r>1?1:c.r,g:c.g<0?0:c.g>1?1:c.g,b:c.b<0?0:c.b>1?1:c.b,a:c.a<0?0:c.a>1?1:c.a};
+},mixColor:function(c1,c2,s){
+return _1.addColor(_1.scaleColor(s,c1),_1.scaleColor(1-s,c2));
+},diff2Color:function(c1,c2){
+var r=c1.r-c2.r;
+var g=c1.g-c2.g;
+var b=c1.b-c2.b;
+var a=c1.a-c2.a;
+return r*r+g*g+b*b+a*a;
+},length2Color:function(c){
+return c.r*c.r+c.g*c.g+c.b*c.b+c.a*c.a;
+},dot:function(a,b){
+return a.x*b.x+a.y*b.y+a.z*b.z;
+},scale:function(s,v){
+return {x:s*v.x,y:s*v.y,z:s*v.z};
+},add:function(a,b){
+return {x:a.x+b.x,y:a.y+b.y,z:a.z+b.z};
+},saturate:function(v){
+return Math.min(Math.max(v,0),1);
+},length:function(v){
+return Math.sqrt(dojox.gfx3d.lighting.dot(v,v));
+},normalize:function(v){
+return _1.scale(1/_1.length(v),v);
+},faceforward:function(n,i){
+var p=dojox.gfx3d.lighting;
+var s=p.dot(i,n)<0?1:-1;
+return p.scale(s,n);
+},reflect:function(i,n){
+var p=dojox.gfx3d.lighting;
+return p.add(i,p.scale(-2*p.dot(i,n),n));
+},diffuse:function(_2,_3){
+var c=_1.black();
+for(var i=0;i<_3.length;++i){
+var l=_3[i],d=_1.dot(_1.normalize(l.direction),_2);
+c=_1.addColor(c,_1.scaleColor(d,l.color));
+}
+return _1.saturateColor(c);
+},specular:function(_4,v,_5,_6){
+var c=_1.black();
+for(var i=0;i<_6.length;++i){
+var l=_6[i],h=_1.normalize(_1.add(_1.normalize(l.direction),v)),s=Math.pow(Math.max(0,_1.dot(_4,h)),1/_5);
+c=_1.addColor(c,_1.scaleColor(s,l.color));
+}
+return _1.saturateColor(c);
+},phong:function(_7,v,_8,_9){
+_7=_1.normalize(_7);
+var c=_1.black();
+for(var i=0;i<_9.length;++i){
+var l=_9[i],r=_1.reflect(_1.scale(-1,_1.normalize(v)),_7),s=Math.pow(Math.max(0,_1.dot(r,_1.normalize(l.direction))),_8);
+c=_1.addColor(c,_1.scaleColor(s,l.color));
+}
+return _1.saturateColor(c);
+}});
+dojo.declare("dojox.gfx3d.lighting.Model",null,{constructor:function(_a,_b,_c,_d){
+this.incident=_1.normalize(_a);
+this.lights=[];
+for(var i=0;i<_b.length;++i){
+var l=_b[i];
+this.lights.push({direction:_1.normalize(l.direction),color:_1.toStdColor(l.color)});
+}
+this.ambient=_1.toStdColor(_c.color?_c.color:"white");
+this.ambient=_1.scaleColor(_c.intensity,this.ambient);
+this.ambient=_1.scaleColor(this.ambient.a,this.ambient);
+this.ambient.a=1;
+this.specular=_1.toStdColor(_d?_d:"white");
+this.specular=_1.scaleColor(this.specular.a,this.specular);
+this.specular.a=1;
+this.npr_cool={r:0,g:0,b:0.4,a:1};
+this.npr_warm={r:0.4,g:0.4,b:0.2,a:1};
+this.npr_alpha=0.2;
+this.npr_beta=0.6;
+this.npr_scale=0.6;
+},constant:function(_e,_f,_10){
+_10=_1.toStdColor(_10);
+var _11=_10.a,_12=_1.scaleColor(_11,_10);
+_12.a=_11;
+return _1.fromStdColor(_1.saturateColor(_12));
+},matte:function(_13,_14,_15){
+if(typeof _14=="string"){
+_14=_1.finish[_14];
+}
+_15=_1.toStdColor(_15);
+_13=_1.faceforward(_1.normalize(_13),this.incident);
+var _16=_1.scaleColor(_14.Ka,this.ambient),_17=_1.saturate(-4*_1.dot(_13,this.incident)),_18=_1.scaleColor(_17*_14.Kd,_1.diffuse(_13,this.lights)),_19=_1.scaleColor(_15.a,_1.multiplyColor(_15,_1.addColor(_16,_18)));
+_19.a=_15.a;
+return _1.fromStdColor(_1.saturateColor(_19));
+},metal:function(_1a,_1b,_1c){
+if(typeof _1b=="string"){
+_1b=_1.finish[_1b];
+}
+_1c=_1.toStdColor(_1c);
+_1a=_1.faceforward(_1.normalize(_1a),this.incident);
+var v=_1.scale(-1,this.incident),_1d,_1e,_1f=_1.scaleColor(_1b.Ka,this.ambient),_20=_1.saturate(-4*_1.dot(_1a,this.incident));
+if("phong" in _1b){
+_1d=_1.scaleColor(_20*_1b.Ks*_1b.phong,_1.phong(_1a,v,_1b.phong_size,this.lights));
+}else{
+_1d=_1.scaleColor(_20*_1b.Ks,_1.specular(_1a,v,_1b.roughness,this.lights));
+}
+_1e=_1.scaleColor(_1c.a,_1.addColor(_1.multiplyColor(_1c,_1f),_1.multiplyColor(this.specular,_1d)));
+_1e.a=_1c.a;
+return _1.fromStdColor(_1.saturateColor(_1e));
+},plastic:function(_21,_22,_23){
+if(typeof _22=="string"){
+_22=_1.finish[_22];
+}
+_23=_1.toStdColor(_23);
+_21=_1.faceforward(_1.normalize(_21),this.incident);
+var v=_1.scale(-1,this.incident),_24,_25,_26=_1.scaleColor(_22.Ka,this.ambient),_27=_1.saturate(-4*_1.dot(_21,this.incident)),_28=_1.scaleColor(_27*_22.Kd,_1.diffuse(_21,this.lights));
+if("phong" in _22){
+_24=_1.scaleColor(_27*_22.Ks*_22.phong,_1.phong(_21,v,_22.phong_size,this.lights));
+}else{
+_24=_1.scaleColor(_27*_22.Ks,_1.specular(_21,v,_22.roughness,this.lights));
+}
+_25=_1.scaleColor(_23.a,_1.addColor(_1.multiplyColor(_23,_1.addColor(_26,_28)),_1.multiplyColor(this.specular,_24)));
+_25.a=_23.a;
+return _1.fromStdColor(_1.saturateColor(_25));
+},npr:function(_29,_2a,_2b){
+if(typeof _2a=="string"){
+_2a=_1.finish[_2a];
+}
+_2b=_1.toStdColor(_2b);
+_29=_1.faceforward(_1.normalize(_29),this.incident);
+var _2c=_1.scaleColor(_2a.Ka,this.ambient),_2d=_1.saturate(-4*_1.dot(_29,this.incident)),_2e=_1.scaleColor(_2d*_2a.Kd,_1.diffuse(_29,this.lights)),_2f=_1.scaleColor(_2b.a,_1.multiplyColor(_2b,_1.addColor(_2c,_2e))),_30=_1.addColor(this.npr_cool,_1.scaleColor(this.npr_alpha,_2f)),_31=_1.addColor(this.npr_warm,_1.scaleColor(this.npr_beta,_2f)),d=(1+_1.dot(this.incident,_29))/2,_2f=_1.scaleColor(this.npr_scale,_1.addColor(_2f,_1.mixColor(_30,_31,d)));
+_2f.a=_2b.a;
+return _1.fromStdColor(_1.saturateColor(_2f));
+}});
+})();
+dojox.gfx3d.lighting.finish={defaults:{Ka:0.1,Kd:0.6,Ks:0,roughness:0.05},dull:{Ka:0.1,Kd:0.6,Ks:0.5,roughness:0.15},shiny:{Ka:0.1,Kd:0.6,Ks:1,roughness:0.001},glossy:{Ka:0.1,Kd:0.6,Ks:1,roughness:0.0001},phong_dull:{Ka:0.1,Kd:0.6,Ks:0.5,phong:0.5,phong_size:1},phong_shiny:{Ka:0.1,Kd:0.6,Ks:1,phong:1,phong_size:200},phong_glossy:{Ka:0.1,Kd:0.6,Ks:1,phong:1,phong_size:300},luminous:{Ka:1,Kd:0,Ks:0,roughness:0.05},metalA:{Ka:0.35,Kd:0.3,Ks:0.8,roughness:1/20},metalB:{Ka:0.3,Kd:0.4,Ks:0.7,roughness:1/60},metalC:{Ka:0.25,Kd:0.5,Ks:0.8,roughness:1/80},metalD:{Ka:0.15,Kd:0.6,Ks:0.8,roughness:1/100},metalE:{Ka:0.1,Kd:0.7,Ks:0.8,roughness:1/120}};
+}
Index: trunk/web/dojo/dojox/gfx3d/object.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d/object.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/object.js	(revision 9)
@@ -0,0 +1,614 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d.object"]){
+dojo._hasResource["dojox.gfx3d.object"]=true;
+dojo.provide("dojox.gfx3d.object");
+dojo.require("dojox.gfx");
+dojo.require("dojox.gfx3d.lighting");
+dojo.require("dojox.gfx3d.scheduler");
+dojo.require("dojox.gfx3d.vector");
+dojo.require("dojox.gfx3d.gradient");
+var out=function(o,x){
+if(arguments.length>1){
+o=x;
+}
+var e={};
+for(var i in o){
+if(i in e){
+continue;
+}
+}
+};
+dojo.declare("dojox.gfx3d.Object",null,{constructor:function(){
+this.object=null;
+this.matrix=null;
+this.cache=null;
+this.renderer=null;
+this.parent=null;
+this.strokeStyle=null;
+this.fillStyle=null;
+this.shape=null;
+},setObject:function(_1){
+this.object=dojox.gfx.makeParameters(this.object,_1);
+return this;
+},setTransform:function(_2){
+this.matrix=dojox.gfx3d.matrix.clone(_2?dojox.gfx3d.matrix.normalize(_2):dojox.gfx3d.identity,true);
+return this;
+},applyRightTransform:function(_3){
+return _3?this.setTransform([this.matrix,_3]):this;
+},applyLeftTransform:function(_4){
+return _4?this.setTransform([_4,this.matrix]):this;
+},applyTransform:function(_5){
+return _5?this.setTransform([this.matrix,_5]):this;
+},setFill:function(_6){
+this.fillStyle=_6;
+return this;
+},setStroke:function(_7){
+this.strokeStyle=_7;
+return this;
+},toStdFill:function(_8,_9){
+return (this.fillStyle&&typeof this.fillStyle["type"]!="undefined")?_8[this.fillStyle.type](_9,this.fillStyle.finish,this.fillStyle.color):this.fillStyle;
+},invalidate:function(){
+this.renderer.addTodo(this);
+},destroy:function(){
+if(this.shape){
+var p=this.shape.getParent();
+if(p){
+p.remove(this.shape);
+}
+this.shape=null;
+}
+},render:function(_a){
+throw "Pure virtual function, not implemented";
+},draw:function(_b){
+throw "Pure virtual function, not implemented";
+},getZOrder:function(){
+return 0;
+},getOutline:function(){
+return null;
+}});
+dojo.declare("dojox.gfx3d.Scene",dojox.gfx3d.Object,{constructor:function(){
+this.objects=[];
+this.todos=[];
+this.schedule=dojox.gfx3d.scheduler.zOrder;
+this._draw=dojox.gfx3d.drawer.conservative;
+},setFill:function(_c){
+this.fillStyle=_c;
+dojo.forEach(this.objects,function(_d){
+_d.setFill(_c);
+});
+return this;
+},setStroke:function(_e){
+this.strokeStyle=_e;
+dojo.forEach(this.objects,function(_f){
+_f.setStroke(_e);
+});
+return this;
+},render:function(_10,_11){
+var m=dojox.gfx3d.matrix.multiply(_10,this.matrix);
+if(_11){
+this.todos=this.objects;
+}
+dojo.forEach(this.todos,function(_12){
+_12.render(m,_11);
+});
+},draw:function(_13){
+this.objects=this.schedule(this.objects);
+this._draw(this.todos,this.objects,this.renderer);
+},addTodo:function(_14){
+if(dojo.every(this.todos,function(_15){
+return _15!=_14;
+})){
+this.todos.push(_14);
+this.invalidate();
+}
+},invalidate:function(){
+this.parent.addTodo(this);
+},getZOrder:function(){
+var _16=0;
+dojo.forEach(this.objects,function(_17){
+_16+=_17.getZOrder();
+});
+return (this.objects.length>1)?_16/this.objects.length:0;
+}});
+dojo.declare("dojox.gfx3d.Edges",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultEdges);
+},setObject:function(_18,_19){
+this.object=dojox.gfx.makeParameters(this.object,(_18 instanceof Array)?{points:_18,style:_19}:_18);
+return this;
+},getZOrder:function(){
+var _1a=0;
+dojo.forEach(this.cache,function(_1b){
+_1a+=_1b.z;
+});
+return (this.cache.length>1)?_1a/this.cache.length:0;
+},render:function(_1c){
+var m=dojox.gfx3d.matrix.multiply(_1c,this.matrix);
+this.cache=dojo.map(this.object.points,function(_1d){
+return dojox.gfx3d.matrix.multiplyPoint(m,_1d);
+});
+},draw:function(){
+var c=this.cache;
+if(this.shape){
+this.shape.setShape("");
+}else{
+this.shape=this.renderer.createPath();
+}
+var p=this.shape.setAbsoluteMode("absolute");
+if(this.object.style=="strip"||this.object.style=="loop"){
+p.moveTo(c[0].x,c[0].y);
+dojo.forEach(c.slice(1),function(_1e){
+p.lineTo(_1e.x,_1e.y);
+});
+if(this.object.style=="loop"){
+p.closePath();
+}
+}else{
+for(var i=0;i<this.cache.length;){
+p.moveTo(c[i].x,c[i].y);
+i++;
+p.lineTo(c[i].x,c[i].y);
+i++;
+}
+}
+p.setStroke(this.strokeStyle);
+}});
+dojo.declare("dojox.gfx3d.Orbit",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultOrbit);
+},render:function(_1f){
+var m=dojox.gfx3d.matrix.multiply(_1f,this.matrix);
+var _20=[0,Math.PI/4,Math.PI/3];
+var _21=dojox.gfx3d.matrix.multiplyPoint(m,this.object.center);
+var _22=dojo.map(_20,function(_23){
+return {x:this.center.x+this.radius*Math.cos(_23),y:this.center.y+this.radius*Math.sin(_23),z:this.center.z};
+},this.object);
+_22=dojo.map(_22,function(_24){
+return dojox.gfx3d.matrix.multiplyPoint(m,_24);
+});
+var _25=dojox.gfx3d.vector.normalize(_22);
+_22=dojo.map(_22,function(_26){
+return dojox.gfx3d.vector.substract(_26,_21);
+});
+var A={xx:_22[0].x*_22[0].y,xy:_22[0].y*_22[0].y,xz:1,yx:_22[1].x*_22[1].y,yy:_22[1].y*_22[1].y,yz:1,zx:_22[2].x*_22[2].y,zy:_22[2].y*_22[2].y,zz:1,dx:0,dy:0,dz:0};
+var B=dojo.map(_22,function(_27){
+return -Math.pow(_27.x,2);
+});
+var X=dojox.gfx3d.matrix.multiplyPoint(dojox.gfx3d.matrix.invert(A),B[0],B[1],B[2]);
+var _28=Math.atan2(X.x,1-X.y)/2;
+var _29=dojo.map(_22,function(_2a){
+return dojox.gfx.matrix.multiplyPoint(dojox.gfx.matrix.rotate(-_28),_2a.x,_2a.y);
+});
+var a=Math.pow(_29[0].x,2);
+var b=Math.pow(_29[0].y,2);
+var c=Math.pow(_29[1].x,2);
+var d=Math.pow(_29[1].y,2);
+var rx=Math.sqrt((a*d-b*c)/(d-b));
+var ry=Math.sqrt((a*d-b*c)/(a-c));
+this.cache={cx:_21.x,cy:_21.y,rx:rx,ry:ry,theta:_28,normal:_25};
+},draw:function(_2b){
+if(this.shape){
+this.shape.setShape(this.cache);
+}else{
+this.shape=this.renderer.createEllipse(this.cache);
+}
+this.shape.applyTransform(dojox.gfx.matrix.rotateAt(this.cache.theta,this.cache.cx,this.cache.cy)).setStroke(this.strokeStyle).setFill(this.toStdFill(_2b,this.cache.normal));
+}});
+dojo.declare("dojox.gfx3d.Path3d",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultPath3d);
+this.segments=[];
+this.absolute=true;
+this.last={};
+this.path="";
+},_collectArgs:function(_2c,_2d){
+for(var i=0;i<_2d.length;++i){
+var t=_2d[i];
+if(typeof (t)=="boolean"){
+_2c.push(t?1:0);
+}else{
+if(typeof (t)=="number"){
+_2c.push(t);
+}else{
+if(t instanceof Array){
+this._collectArgs(_2c,t);
+}else{
+if("x" in t&&"y" in t){
+_2c.push(t.x);
+_2c.push(t.y);
+}
+}
+}
+}
+}
+},_validSegments:{m:3,l:3,z:0},_pushSegment:function(_2e,_2f){
+var _30=this._validSegments[_2e.toLowerCase()],_31;
+if(typeof (_30)=="number"){
+if(_30){
+if(_2f.length>=_30){
+_31={action:_2e,args:_2f.slice(0,_2f.length-_2f.length%_30)};
+this.segments.push(_31);
+}
+}else{
+_31={action:_2e,args:[]};
+this.segments.push(_31);
+}
+}
+},moveTo:function(){
+var _32=[];
+this._collectArgs(_32,arguments);
+this._pushSegment(this.absolute?"M":"m",_32);
+return this;
+},lineTo:function(){
+var _33=[];
+this._collectArgs(_33,arguments);
+this._pushSegment(this.absolute?"L":"l",_33);
+return this;
+},closePath:function(){
+this._pushSegment("Z",[]);
+return this;
+},render:function(_34){
+var m=dojox.gfx3d.matrix.multiply(_34,this.matrix);
+var _35="";
+var _36=this._validSegments;
+dojo.forEach(this.segments,function(_37){
+_35+=_37.action;
+for(var i=0;i<_37.args.length;i+=_36[_37.action.toLowerCase()]){
+var pt=dojox.gfx3d.matrix.multiplyPoint(m,_37.args[i],_37.args[i+1],_37.args[i+2]);
+_35+=" "+pt.x+" "+pt.y;
+}
+});
+this.cache=_35;
+},_draw:function(){
+return this.parent.createPath(this.cache);
+}});
+dojo.declare("dojox.gfx3d.Triangles",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultTriangles);
+},setObject:function(_38,_39){
+if(_38 instanceof Array){
+this.object=dojox.gfx.makeParameters(this.object,{points:_38,style:_39});
+}else{
+this.object=dojox.gfx.makeParameters(this.object,_38);
+}
+return this;
+},render:function(_3a){
+var m=dojox.gfx3d.matrix.multiply(_3a,this.matrix);
+var c=dojo.map(this.object.points,function(_3b){
+return dojox.gfx3d.matrix.multiplyPoint(m,_3b);
+});
+this.cache=[];
+var _3c=c.slice(0,2);
+var _3d=c[0];
+if(this.object.style=="strip"){
+dojo.forEach(c.slice(2),function(_3e){
+_3c.push(_3e);
+_3c.push(_3c[0]);
+this.cache.push(_3c);
+_3c=_3c.slice(1,3);
+},this);
+}else{
+if(this.object.style=="fan"){
+dojo.forEach(c.slice(2),function(_3f){
+_3c.push(_3f);
+_3c.push(_3d);
+this.cache.push(_3c);
+_3c=[_3d,_3f];
+},this);
+}else{
+for(var i=0;i<c.length;){
+this.cache.push([c[i],c[i+1],c[i+2],c[i]]);
+i+=3;
+}
+}
+}
+},draw:function(_40){
+this.cache=dojox.gfx3d.scheduler.bsp(this.cache,function(it){
+return it;
+});
+if(this.shape){
+this.shape.clear();
+}else{
+this.shape=this.renderer.createGroup();
+}
+dojo.forEach(this.cache,function(_41){
+this.shape.createPolyline(_41).setStroke(this.strokeStyle).setFill(this.toStdFill(_40,dojox.gfx3d.vector.normalize(_41)));
+},this);
+},getZOrder:function(){
+var _42=0;
+dojo.forEach(this.cache,function(_43){
+_42+=(_43[0].z+_43[1].z+_43[2].z)/3;
+});
+return (this.cache.length>1)?_42/this.cache.length:0;
+}});
+dojo.declare("dojox.gfx3d.Quads",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultQuads);
+},setObject:function(_44,_45){
+this.object=dojox.gfx.makeParameters(this.object,(_44 instanceof Array)?{points:_44,style:_45}:_44);
+return this;
+},render:function(_46){
+var m=dojox.gfx3d.matrix.multiply(_46,this.matrix),i;
+var c=dojo.map(this.object.points,function(_47){
+return dojox.gfx3d.matrix.multiplyPoint(m,_47);
+});
+this.cache=[];
+if(this.object.style=="strip"){
+var _48=c.slice(0,2);
+for(i=2;i<c.length;){
+_48=_48.concat([c[i],c[i+1],_48[0]]);
+this.cache.push(_48);
+_48=_48.slice(2,4);
+i+=2;
+}
+}else{
+for(i=0;i<c.length;){
+this.cache.push([c[i],c[i+1],c[i+2],c[i+3],c[i]]);
+i+=4;
+}
+}
+},draw:function(_49){
+this.cache=dojox.gfx3d.scheduler.bsp(this.cache,function(it){
+return it;
+});
+if(this.shape){
+this.shape.clear();
+}else{
+this.shape=this.renderer.createGroup();
+}
+for(var x=0;x<this.cache.length;x++){
+this.shape.createPolyline(this.cache[x]).setStroke(this.strokeStyle).setFill(this.toStdFill(_49,dojox.gfx3d.vector.normalize(this.cache[x])));
+}
+},getZOrder:function(){
+var _4a=0;
+for(var x=0;x<this.cache.length;x++){
+var i=this.cache[x];
+_4a+=(i[0].z+i[1].z+i[2].z+i[3].z)/4;
+}
+return (this.cache.length>1)?_4a/this.cache.length:0;
+}});
+dojo.declare("dojox.gfx3d.Polygon",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultPolygon);
+},setObject:function(_4b){
+this.object=dojox.gfx.makeParameters(this.object,(_4b instanceof Array)?{path:_4b}:_4b);
+return this;
+},render:function(_4c){
+var m=dojox.gfx3d.matrix.multiply(_4c,this.matrix);
+this.cache=dojo.map(this.object.path,function(_4d){
+return dojox.gfx3d.matrix.multiplyPoint(m,_4d);
+});
+this.cache.push(this.cache[0]);
+},draw:function(_4e){
+if(this.shape){
+this.shape.setShape({points:this.cache});
+}else{
+this.shape=this.renderer.createPolyline({points:this.cache});
+}
+this.shape.setStroke(this.strokeStyle).setFill(this.toStdFill(_4e,dojox.gfx3d.matrix.normalize(this.cache)));
+},getZOrder:function(){
+var _4f=0;
+for(var x=0;x<this.cache.length;x++){
+_4f+=this.cache[x].z;
+}
+return (this.cache.length>1)?_4f/this.cache.length:0;
+},getOutline:function(){
+return this.cache.slice(0,3);
+}});
+dojo.declare("dojox.gfx3d.Cube",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultCube);
+this.polygons=[];
+},setObject:function(_50){
+this.object=dojox.gfx.makeParameters(this.object,_50);
+},render:function(_51){
+var a=this.object.top;
+var g=this.object.bottom;
+var b={x:g.x,y:a.y,z:a.z};
+var c={x:g.x,y:g.y,z:a.z};
+var d={x:a.x,y:g.y,z:a.z};
+var e={x:a.x,y:a.y,z:g.z};
+var f={x:g.x,y:a.y,z:g.z};
+var h={x:a.x,y:g.y,z:g.z};
+var _52=[a,b,c,d,e,f,g,h];
+var m=dojox.gfx3d.matrix.multiply(_51,this.matrix);
+var p=dojo.map(_52,function(_53){
+return dojox.gfx3d.matrix.multiplyPoint(m,_53);
+});
+a=p[0];
+b=p[1];
+c=p[2];
+d=p[3];
+e=p[4];
+f=p[5];
+g=p[6];
+h=p[7];
+this.cache=[[a,b,c,d,a],[e,f,g,h,e],[a,d,h,e,a],[d,c,g,h,d],[c,b,f,g,c],[b,a,e,f,b]];
+},draw:function(_54){
+this.cache=dojox.gfx3d.scheduler.bsp(this.cache,function(it){
+return it;
+});
+var _55=this.cache.slice(3);
+if(this.shape){
+this.shape.clear();
+}else{
+this.shape=this.renderer.createGroup();
+}
+for(var x=0;x<_55.length;x++){
+this.shape.createPolyline(_55[x]).setStroke(this.strokeStyle).setFill(this.toStdFill(_54,dojox.gfx3d.vector.normalize(_55[x])));
+}
+},getZOrder:function(){
+var top=this.cache[0][0];
+var _56=this.cache[1][2];
+return (top.z+_56.z)/2;
+}});
+dojo.declare("dojox.gfx3d.Cylinder",dojox.gfx3d.Object,{constructor:function(){
+this.object=dojo.clone(dojox.gfx3d.defaultCylinder);
+},render:function(_57){
+var m=dojox.gfx3d.matrix.multiply(_57,this.matrix);
+var _58=[0,Math.PI/4,Math.PI/3];
+var _59=dojox.gfx3d.matrix.multiplyPoint(m,this.object.center);
+var _5a=dojo.map(_58,function(_5b){
+return {x:this.center.x+this.radius*Math.cos(_5b),y:this.center.y+this.radius*Math.sin(_5b),z:this.center.z};
+},this.object);
+_5a=dojo.map(_5a,function(_5c){
+return dojox.gfx3d.vector.substract(dojox.gfx3d.matrix.multiplyPoint(m,_5c),_59);
+});
+var A={xx:_5a[0].x*_5a[0].y,xy:_5a[0].y*_5a[0].y,xz:1,yx:_5a[1].x*_5a[1].y,yy:_5a[1].y*_5a[1].y,yz:1,zx:_5a[2].x*_5a[2].y,zy:_5a[2].y*_5a[2].y,zz:1,dx:0,dy:0,dz:0};
+var B=dojo.map(_5a,function(_5d){
+return -Math.pow(_5d.x,2);
+});
+var X=dojox.gfx3d.matrix.multiplyPoint(dojox.gfx3d.matrix.invert(A),B[0],B[1],B[2]);
+var _5e=Math.atan2(X.x,1-X.y)/2;
+var _5f=dojo.map(_5a,function(_60){
+return dojox.gfx.matrix.multiplyPoint(dojox.gfx.matrix.rotate(-_5e),_60.x,_60.y);
+});
+var a=Math.pow(_5f[0].x,2);
+var b=Math.pow(_5f[0].y,2);
+var c=Math.pow(_5f[1].x,2);
+var d=Math.pow(_5f[1].y,2);
+var rx=Math.sqrt((a*d-b*c)/(d-b));
+var ry=Math.sqrt((a*d-b*c)/(a-c));
+if(rx<ry){
+var t=rx;
+rx=ry;
+ry=t;
+_5e-=Math.PI/2;
+}
+var top=dojox.gfx3d.matrix.multiplyPoint(m,dojox.gfx3d.vector.sum(this.object.center,{x:0,y:0,z:this.object.height}));
+var _61=this.fillStyle.type=="constant"?this.fillStyle.color:dojox.gfx3d.gradient(this.renderer.lighting,this.fillStyle,this.object.center,this.object.radius,Math.PI,2*Math.PI,m);
+if(isNaN(rx)||isNaN(ry)||isNaN(_5e)){
+rx=this.object.radius,ry=0,_5e=0;
+}
+this.cache={center:_59,top:top,rx:rx,ry:ry,theta:_5e,gradient:_61};
+},draw:function(){
+var c=this.cache,v=dojox.gfx3d.vector,m=dojox.gfx.matrix,_62=[c.center,c.top],_63=v.substract(c.top,c.center);
+if(v.dotProduct(_63,this.renderer.lighting.incident)>0){
+_62=[c.top,c.center];
+_63=v.substract(c.center,c.top);
+}
+var _64=this.renderer.lighting[this.fillStyle.type](_63,this.fillStyle.finish,this.fillStyle.color),d=Math.sqrt(Math.pow(c.center.x-c.top.x,2)+Math.pow(c.center.y-c.top.y,2));
+if(this.shape){
+this.shape.clear();
+}else{
+this.shape=this.renderer.createGroup();
+}
+this.shape.createPath("").moveTo(0,-c.rx).lineTo(d,-c.rx).lineTo(d,c.rx).lineTo(0,c.rx).arcTo(c.ry,c.rx,0,true,true,0,-c.rx).setFill(c.gradient).setStroke(this.strokeStyle).setTransform([m.translate(_62[0]),m.rotate(Math.atan2(_62[1].y-_62[0].y,_62[1].x-_62[0].x))]);
+if(c.rx>0&&c.ry>0){
+this.shape.createEllipse({cx:_62[1].x,cy:_62[1].y,rx:c.rx,ry:c.ry}).setFill(_64).setStroke(this.strokeStyle).applyTransform(m.rotateAt(c.theta,_62[1]));
+}
+}});
+dojo.declare("dojox.gfx3d.Viewport",dojox.gfx.Group,{constructor:function(){
+this.dimension=null;
+this.objects=[];
+this.todos=[];
+this.renderer=this;
+this.schedule=dojox.gfx3d.scheduler.zOrder;
+this.draw=dojox.gfx3d.drawer.conservative;
+this.deep=false;
+this.lights=[];
+this.lighting=null;
+},setCameraTransform:function(_65){
+this.camera=dojox.gfx3d.matrix.clone(_65?dojox.gfx3d.matrix.normalize(_65):dojox.gfx3d.identity,true);
+this.invalidate();
+return this;
+},applyCameraRightTransform:function(_66){
+return _66?this.setCameraTransform([this.camera,_66]):this;
+},applyCameraLeftTransform:function(_67){
+return _67?this.setCameraTransform([_67,this.camera]):this;
+},applyCameraTransform:function(_68){
+return this.applyCameraRightTransform(_68);
+},setLights:function(_69,_6a,_6b){
+this.lights=(_69 instanceof Array)?{sources:_69,ambient:_6a,specular:_6b}:_69;
+var _6c={x:0,y:0,z:1};
+this.lighting=new dojox.gfx3d.lighting.Model(_6c,this.lights.sources,this.lights.ambient,this.lights.specular);
+this.invalidate();
+return this;
+},addLights:function(_6d){
+return this.setLights(this.lights.sources.concat(_6d));
+},addTodo:function(_6e){
+if(dojo.every(this.todos,function(_6f){
+return _6f!=_6e;
+})){
+this.todos.push(_6e);
+}
+},invalidate:function(){
+this.deep=true;
+this.todos=this.objects;
+},setDimensions:function(dim){
+if(dim){
+var w=dojo.isString(dim.width)?parseInt(dim.width):dim.width;
+var h=dojo.isString(dim.height)?parseInt(dim.height):dim.height;
+var trs=this.rawNode.style;
+trs.height=h;
+trs.width=w;
+this.dimension={width:w,height:h};
+}else{
+this.dimension=null;
+}
+},render:function(){
+if(!this.todos.length){
+return;
+}
+var m=dojox.gfx3d.matrix;
+for(var x=0;x<this.todos.length;x++){
+this.todos[x].render(dojox.gfx3d.matrix.normalize([m.cameraRotateXg(180),m.cameraTranslate(0,this.dimension.height,0),this.camera]),this.deep);
+}
+this.objects=this.schedule(this.objects);
+this.draw(this.todos,this.objects,this);
+this.todos=[];
+this.deep=false;
+}});
+dojox.gfx3d.Viewport.nodeType=dojox.gfx.Group.nodeType;
+dojox.gfx3d._creators={createEdges:function(_70,_71){
+return this.create3DObject(dojox.gfx3d.Edges,_70,_71);
+},createTriangles:function(_72,_73){
+return this.create3DObject(dojox.gfx3d.Triangles,_72,_73);
+},createQuads:function(_74,_75){
+return this.create3DObject(dojox.gfx3d.Quads,_74,_75);
+},createPolygon:function(_76){
+return this.create3DObject(dojox.gfx3d.Polygon,_76);
+},createOrbit:function(_77){
+return this.create3DObject(dojox.gfx3d.Orbit,_77);
+},createCube:function(_78){
+return this.create3DObject(dojox.gfx3d.Cube,_78);
+},createCylinder:function(_79){
+return this.create3DObject(dojox.gfx3d.Cylinder,_79);
+},createPath3d:function(_7a){
+return this.create3DObject(dojox.gfx3d.Path3d,_7a);
+},createScene:function(){
+return this.create3DObject(dojox.gfx3d.Scene);
+},create3DObject:function(_7b,_7c,_7d){
+var obj=new _7b();
+this.adopt(obj);
+if(_7c){
+obj.setObject(_7c,_7d);
+}
+return obj;
+},adopt:function(obj){
+obj.renderer=this.renderer;
+obj.parent=this;
+this.objects.push(obj);
+this.addTodo(obj);
+return this;
+},abandon:function(obj,_7e){
+for(var i=0;i<this.objects.length;++i){
+if(this.objects[i]==obj){
+this.objects.splice(i,1);
+}
+}
+obj.parent=null;
+return this;
+},setScheduler:function(_7f){
+this.schedule=_7f;
+},setDrawer:function(_80){
+this.draw=_80;
+}};
+dojo.extend(dojox.gfx3d.Viewport,dojox.gfx3d._creators);
+dojo.extend(dojox.gfx3d.Scene,dojox.gfx3d._creators);
+delete dojox.gfx3d._creators;
+dojo.extend(dojox.gfx.Surface,{createViewport:function(){
+var _81=this.createObject(dojox.gfx3d.Viewport,null,true);
+_81.setDimensions(this.getDimensions());
+return _81;
+}});
+}
Index: trunk/web/dojo/dojox/gfx3d/_base.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d/_base.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d._base"]){
+dojo._hasResource["dojox.gfx3d._base"]=true;
+dojo.provide("dojox.gfx3d._base");
+dojo.mixin(dojox.gfx3d,{defaultEdges:{type:"edges",style:null,points:[]},defaultTriangles:{type:"triangles",style:null,points:[]},defaultQuads:{type:"quads",style:null,points:[]},defaultOrbit:{type:"orbit",center:{x:0,y:0,z:0},radius:50},defaultPath3d:{type:"path3d",path:[]},defaultPolygon:{type:"polygon",path:[]},defaultCube:{type:"cube",bottom:{x:0,y:0,z:0},top:{x:100,y:100,z:100}},defaultCylinder:{type:"cylinder",center:{x:0,y:0,z:0},height:100,radius:50}});
+}
Index: trunk/web/dojo/dojox/css3/fx.js
===================================================================
--- trunk/web/dojo/dojox/css3/fx.js	(revision 0)
+++ trunk/web/dojo/dojox/css3/fx.js	(revision 9)
@@ -0,0 +1,55 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.css3.fx"]){
+dojo._hasResource["dojox.css3.fx"]=true;
+dojo.provide("dojox.css3.fx");
+dojo.require("dojo.fx");
+dojo.require("dojox.html.ext-dojo.style");
+dojo.require("dojox.fx.ext-dojo.complex");
+dojo.mixin(dojox.css3.fx,{puff:function(_1){
+return dojo.fx.combine([dojo.fadeOut(_1),this.expand({node:_1.node,endScale:_1.endScale||2})]);
+},expand:function(_2){
+return dojo.animateProperty({node:_2.node,properties:{transform:{start:"scale(1)",end:"scale("+[_2.endScale||3]+")"}}});
+},shrink:function(_3){
+return this.expand({node:_3.node,endScale:0.01});
+},rotate:function(_4){
+return dojo.animateProperty({node:_4.node,duration:_4.duration||1000,properties:{transform:{start:"rotate("+(_4.startAngle||"0deg")+")",end:"rotate("+(_4.endAngle||"360deg")+")"}}});
+},flip:function(_5){
+var _6=[],_7=_5.whichAnims||[0,1,2,3],_8=_5.direction||1,_9=[{start:"scale(1, 1) skew(0deg,0deg)",end:"scale(0, 1) skew(0,"+(_8*30)+"deg)"},{start:"scale(0, 1) skew(0deg,"+(_8*30)+"deg)",end:"scale(-1, 1) skew(0deg,0deg)"},{start:"scale(-1, 1) skew(0deg,0deg)",end:"scale(0, 1) skew(0deg,"+(-_8*30)+"deg)"},{start:"scale(0, 1) skew(0deg,"+(-_8*30)+"deg)",end:"scale(1, 1) skew(0deg,0deg)"}];
+for(var i=0;i<_7.length;i++){
+_6.push(dojo.animateProperty(dojo.mixin({node:_5.node,duration:_5.duration||600,properties:{transform:_9[_7[i]]}},_5)));
+}
+return dojo.fx.chain(_6);
+},bounce:function(_a){
+var _b=[],n=_a.node,_c=_a.duration||1000,_d=_a.scaleX||1.2,_e=_a.scaleY||0.6,ds=dojo.style,_f=ds(n,"position"),_10="absolute",_11=ds(n,"top"),_12=[],_13=0,_14=Math.round,_15=_a.jumpHeight||70;
+if(_f!=="absolute"){
+_10="relative";
+}
+var a1=dojo.animateProperty({node:n,duration:_c/6,properties:{transform:{start:"scale(1, 1)",end:"scale("+_d+", "+_e+")"}}});
+dojo.connect(a1,"onBegin",function(){
+ds(n,{transformOrigin:"50% 100%",position:_10});
+});
+_b.push(a1);
+var a2=dojo.animateProperty({node:n,duration:_c/6,properties:{transform:{end:"scale(1, 1)",start:"scale("+_d+", "+_e+")"}}});
+_12.push(a2);
+_12.push(new dojo.Animation(dojo.mixin({curve:[],duration:_c/3,delay:_c/12,onBegin:function(){
+_13=(new Date).getTime();
+},onAnimate:function(){
+var _16=(new Date).getTime();
+ds(n,{top:parseInt(ds(n,"top"))-_14(_15*((_16-_13)/this.duration))+"px"});
+_13=_16;
+}},_a)));
+_b.push(dojo.fx.combine(_12));
+_b.push(dojo.animateProperty(dojo.mixin({duration:_c/3,onEnd:function(){
+ds(n,{position:_f});
+},properties:{top:_11}},_a)));
+_b.push(a1);
+_b.push(a2);
+return dojo.fx.chain(_b);
+}});
+}
Index: trunk/web/dojo/dojox/embed/flashVars.js
===================================================================
--- trunk/web/dojo/dojox/embed/flashVars.js	(revision 0)
+++ trunk/web/dojo/dojox/embed/flashVars.js	(revision 9)
@@ -0,0 +1,37 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.flashVars"]){
+dojo._hasResource["dojox.embed.flashVars"]=true;
+dojo.provide("dojox.embed.flashVars");
+dojo.mixin(dojox.embed.flashVars,{serialize:function(n,o){
+var _1=function(_2){
+if(typeof _2=="string"){
+_2=_2.replace(/;/g,"_sc_");
+_2=_2.replace(/\./g,"_pr_");
+_2=_2.replace(/\:/g,"_cl_");
+}
+return _2;
+};
+var df=dojox.embed.flashVars.serialize;
+var _3="";
+if(dojo.isArray(o)){
+for(var i=0;i<o.length;i++){
+_3+=df(n+"."+i,_1(o[i]))+";";
+}
+return _3.replace(/;{2,}/g,";");
+}else{
+if(dojo.isObject(o)){
+for(var nm in o){
+_3+=df(n+"."+nm,_1(o[nm]))+";";
+}
+return _3.replace(/;{2,}/g,";");
+}
+}
+return n+":"+o;
+}});
+}
Index: trunk/web/dojo/dojox/embed/Quicktime.js
===================================================================
--- trunk/web/dojo/dojox/embed/Quicktime.js	(revision 0)
+++ trunk/web/dojo/dojox/embed/Quicktime.js	(revision 9)
@@ -0,0 +1,139 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.Quicktime"]){
+dojo._hasResource["dojox.embed.Quicktime"]=true;
+dojo.provide("dojox.embed.Quicktime");
+(function(d){
+var _1,_2={major:0,minor:0,rev:0},_3,_4={width:320,height:240,redirect:null},_5="dojox-embed-quicktime-",_6=0,_7="This content requires the <a href=\"http://www.apple.com/quicktime/download/\" title=\"Download and install QuickTime.\">QuickTime plugin</a>.";
+function _8(_9){
+_9=d.mixin(d.clone(_4),_9||{});
+if(!("path" in _9)&&!_9.testing){
+console.error("dojox.embed.Quicktime(ctor):: no path reference to a QuickTime movie was provided.");
+return null;
+}
+if(_9.testing){
+_9.path="";
+}
+if(!("id" in _9)){
+_9.id=_5+_6++;
+}
+return _9;
+};
+if(d.isIE){
+_3=(function(){
+try{
+var o=new ActiveXObject("QuickTimeCheckObject.QuickTimeCheck.1");
+if(o!==undefined){
+var v=o.QuickTimeVersion.toString(16);
+function p(i){
+return (v.substring(i,i+1)-0)||0;
+};
+_2={major:p(0),minor:p(1),rev:p(2)};
+return o.IsQuickTimeAvailable(0);
+}
+}
+catch(e){
+}
+return false;
+})();
+_1=function(_a){
+if(!_3){
+return {id:null,markup:_7};
+}
+_a=_8(_a);
+if(!_a){
+return null;
+}
+var s="<object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" "+"codebase=\"http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0\" "+"id=\""+_a.id+"\" "+"width=\""+_a.width+"\" "+"height=\""+_a.height+"\">"+"<param name=\"src\" value=\""+_a.path+"\"/>";
+for(var p in _a.params||{}){
+s+="<param name=\""+p+"\" value=\""+_a.params[p]+"\"/>";
+}
+s+="</object>";
+return {id:_a.id,markup:s};
+};
+}else{
+_3=(function(){
+for(var i=0,p=navigator.plugins,l=p.length;i<l;i++){
+if(p[i].name.indexOf("QuickTime")>-1){
+return true;
+}
+}
+return false;
+})();
+_1=function(_b){
+if(!_3){
+return {id:null,markup:_7};
+}
+_b=_8(_b);
+if(!_b){
+return null;
+}
+var s="<embed type=\"video/quicktime\" src=\""+_b.path+"\" "+"id=\""+_b.id+"\" "+"name=\""+_b.id+"\" "+"pluginspage=\"www.apple.com/quicktime/download\" "+"enablejavascript=\"true\" "+"width=\""+_b.width+"\" "+"height=\""+_b.height+"\"";
+for(var p in _b.params||{}){
+s+=" "+p+"=\""+_b.params[p]+"\"";
+}
+s+="></embed>";
+return {id:_b.id,markup:s};
+};
+}
+dojox.embed.Quicktime=function(_c,_d){
+return dojox.embed.Quicktime.place(_c,_d);
+};
+d.mixin(dojox.embed.Quicktime,{minSupported:6,available:_3,supported:_3,version:_2,initialized:false,onInitialize:function(){
+dojox.embed.Quicktime.initialized=true;
+},place:function(_e,_f){
+var o=_1(_e);
+if(!(_f=d.byId(_f))){
+_f=d.create("div",{id:o.id+"-container"},d.body());
+}
+if(o){
+_f.innerHTML=o.markup;
+if(o.id){
+return d.isIE?d.byId(o.id):document[o.id];
+}
+}
+return null;
+}});
+if(!d.isIE){
+var id="-qt-version-test",o=_1({testing:true,width:4,height:4}),c=10,top="-1000px",_10="1px";
+function _11(){
+setTimeout(function(){
+var qt=document[o.id],n=d.byId(id);
+if(qt){
+try{
+var v=qt.GetQuickTimeVersion().split(".");
+dojox.embed.Quicktime.version={major:parseInt(v[0]||0),minor:parseInt(v[1]||0),rev:parseInt(v[2]||0)};
+if(dojox.embed.Quicktime.supported=v[0]){
+dojox.embed.Quicktime.onInitialize();
+}
+c=0;
+}
+catch(e){
+if(c--){
+_11();
+}
+}
+}
+if(!c&&n){
+d.destroy(n);
+}
+},20);
+};
+if(d._initFired){
+d.create("div",{innerHTML:o.markup,id:id,style:{top:top,left:0,width:_10,height:_10,overflow:"hidden",position:"absolute"}},d.body());
+}else{
+document.write("<div style=\"top:"+top+";left:0;width:"+_10+";height:"+_10+";overflow:hidden;position:absolute\" id=\""+id+"\">"+o.markup+"</div>");
+}
+_11();
+}else{
+if(d.isIE&&_3){
+dojox.embed.Quicktime.onInitialize();
+}
+}
+})(dojo);
+}
Index: trunk/web/dojo/dojox/embed/Flash.js
===================================================================
--- trunk/web/dojo/dojox/embed/Flash.js	(revision 0)
+++ trunk/web/dojo/dojox/embed/Flash.js	(revision 9)
@@ -0,0 +1,259 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.Flash"]){
+dojo._hasResource["dojox.embed.Flash"]=true;
+dojo.provide("dojox.embed.Flash");
+(function(){
+var _1,_2;
+var _3=9;
+var _4="dojox-embed-flash-",_5=0;
+var _6={expressInstall:false,width:320,height:240,swLiveConnect:"true",allowScriptAccess:"sameDomain",allowNetworking:"all",style:null,redirect:null};
+function _7(_8){
+_8=dojo.delegate(_6,_8);
+if(!("path" in _8)){
+console.error("dojox.embed.Flash(ctor):: no path reference to a Flash movie was provided.");
+return null;
+}
+if(!("id" in _8)){
+_8.id=(_4+_5++);
+}
+return _8;
+};
+if(dojo.isIE){
+_1=function(_9){
+_9=_7(_9);
+if(!_9){
+return null;
+}
+var p;
+var _a=_9.path;
+if(_9.vars){
+var a=[];
+for(p in _9.vars){
+a.push(p+"="+_9.vars[p]);
+}
+_9.params.FlashVars=a.join("&");
+delete _9.vars;
+}
+var s="<object id=\""+_9.id+"\" "+"classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" "+"width=\""+_9.width+"\" "+"height=\""+_9.height+"\""+((_9.style)?" style=\""+_9.style+"\"":"")+">"+"<param name=\"movie\" value=\""+_a+"\" />";
+if(_9.params){
+for(p in _9.params){
+s+="<param name=\""+p+"\" value=\""+_9.params[p]+"\" />";
+}
+}
+s+="</object>";
+return {id:_9.id,markup:s};
+};
+_2=(function(){
+var _b=10,_c=null;
+while(!_c&&_b>7){
+try{
+_c=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_b--);
+}
+catch(e){
+}
+}
+if(_c){
+var v=_c.GetVariable("$version").split(" ")[1].split(",");
+return {major:(v[0]!=null)?parseInt(v[0]):0,minor:(v[1]!=null)?parseInt(v[1]):0,rev:(v[2]!=null)?parseInt(v[2]):0};
+}
+return {major:0,minor:0,rev:0};
+})();
+dojo.addOnUnload(function(){
+var _d=function(){
+};
+var _e=dojo.query("object").reverse().style("display","none").forEach(function(i){
+for(var p in i){
+if((p!="FlashVars")&&dojo.isFunction(i[p])){
+try{
+i[p]=_d;
+}
+catch(e){
+}
+}
+}
+});
+});
+}else{
+_1=function(_f){
+_f=_7(_f);
+if(!_f){
+return null;
+}
+var p;
+var _10=_f.path;
+if(_f.vars){
+var a=[];
+for(p in _f.vars){
+a.push(p+"="+_f.vars[p]);
+}
+_f.params.flashVars=a.join("&");
+delete _f.vars;
+}
+var s="<embed type=\"application/x-shockwave-flash\" "+"src=\""+_10+"\" "+"id=\""+_f.id+"\" "+"width=\""+_f.width+"\" "+"height=\""+_f.height+"\""+((_f.style)?" style=\""+_f.style+"\" ":"")+"swLiveConnect=\""+_f.swLiveConnect+"\" "+"allowScriptAccess=\""+_f.allowScriptAccess+"\" "+"allowNetworking=\""+_f.allowNetworking+"\" "+"pluginspage=\""+window.location.protocol+"//www.adobe.com/go/getflashplayer\" ";
+if(_f.params){
+for(p in _f.params){
+s+=" "+p+"=\""+_f.params[p]+"\"";
+}
+}
+s+=" />";
+return {id:_f.id,markup:s};
+};
+_2=(function(){
+var _11=navigator.plugins["Shockwave Flash"];
+if(_11&&_11.description){
+var v=_11.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split(".");
+return {major:(v[0]!=null)?parseInt(v[0]):0,minor:(v[1]!=null)?parseInt(v[1]):0,rev:(v[2]!=null)?parseInt(v[2]):0};
+}
+return {major:0,minor:0,rev:0};
+})();
+}
+dojox.embed.Flash=function(_12,_13){
+if(location.href.toLowerCase().indexOf("file://")>-1){
+throw new Error("dojox.embed.Flash can't be run directly from a file. To instatiate the required SWF correctly it must be run from a server, like localHost.");
+}
+this.available=dojox.embed.Flash.available;
+this.minimumVersion=_12.minimumVersion||_3;
+this.id=null;
+this.movie=null;
+this.domNode=null;
+if(_13){
+_13=dojo.byId(_13);
+}
+setTimeout(dojo.hitch(this,function(){
+if(_12.expressInstall||this.available&&this.available>=this.minimumVersion){
+if(_12&&_13){
+this.init(_12,_13);
+}else{
+this.onError("embed.Flash was not provided with the proper arguments.");
+}
+}else{
+if(!this.available){
+this.onError("Flash is not installed.");
+}else{
+this.onError("Flash version detected: "+this.available+" is out of date. Minimum required: "+this.minimumVersion);
+}
+}
+}),100);
+};
+dojo.extend(dojox.embed.Flash,{onReady:function(_14){
+console.warn("embed.Flash.movie.onReady:",_14);
+},onLoad:function(_15){
+console.warn("embed.Flash.movie.onLoad:",_15);
+},onError:function(msg){
+},_onload:function(){
+clearInterval(this._poller);
+delete this._poller;
+delete this._pollCount;
+delete this._pollMax;
+this.onLoad(this.movie);
+},init:function(_16,_17){
+this.destroy();
+_17=dojo.byId(_17||this.domNode);
+if(!_17){
+throw new Error("dojox.embed.Flash: no domNode reference has been passed.");
+}
+var p=0,_18=false;
+this._poller=null;
+this._pollCount=0;
+this._pollMax=15;
+this.pollTime=100;
+if(dojox.embed.Flash.initialized){
+this.id=dojox.embed.Flash.place(_16,_17);
+this.domNode=_17;
+setTimeout(dojo.hitch(this,function(){
+this.movie=this.byId(this.id,_16.doc);
+this.onReady(this.movie);
+this._poller=setInterval(dojo.hitch(this,function(){
+try{
+p=this.movie.PercentLoaded();
+}
+catch(e){
+console.warn("this.movie.PercentLoaded() failed");
+}
+if(p==100){
+this._onload();
+}else{
+if(p==0&&this._pollCount++>this._pollMax){
+clearInterval(this._poller);
+throw new Error("Building SWF failed.");
+}
+}
+}),this.pollTime);
+}),1);
+}
+},_destroy:function(){
+try{
+this.domNode.removeChild(this.movie);
+}
+catch(e){
+}
+this.id=this.movie=this.domNode=null;
+},destroy:function(){
+if(!this.movie){
+return;
+}
+var _19=dojo.delegate({id:true,movie:true,domNode:true,onReady:true,onLoad:true});
+for(var p in this){
+if(!_19[p]){
+delete this[p];
+}
+}
+if(this._poller){
+dojo.connect(this,"onLoad",this,"_destroy");
+}else{
+this._destroy();
+}
+},byId:function(_1a,doc){
+doc=doc||document;
+if(doc.embeds[_1a]){
+return doc.embeds[_1a];
+}
+if(doc[_1a]){
+return doc[_1a];
+}
+if(window[_1a]){
+return window[_1a];
+}
+if(document[_1a]){
+return document[_1a];
+}
+return null;
+}});
+dojo.mixin(dojox.embed.Flash,{minSupported:8,available:_2.major,supported:(_2.major>=_2.required),minimumRequired:_2.required,version:_2,initialized:false,onInitialize:function(){
+dojox.embed.Flash.initialized=true;
+},__ie_markup__:function(_1b){
+return _1(_1b);
+},proxy:function(obj,_1c){
+dojo.forEach((dojo.isArray(_1c)?_1c:[_1c]),function(_1d){
+this[_1d]=dojo.hitch(this,function(){
+return (function(){
+return eval(this.movie.CallFunction("<invoke name=\""+_1d+"\" returntype=\"javascript\">"+"<arguments>"+dojo.map(arguments,function(_1e){
+return __flash__toXML(_1e);
+}).join("")+"</arguments>"+"</invoke>"));
+}).apply(this,arguments||[]);
+});
+},obj);
+}});
+dojox.embed.Flash.place=function(_1f,_20){
+var o=_1(_1f);
+_20=dojo.byId(_20);
+if(!_20){
+_20=dojo.doc.createElement("div");
+_20.id=o.id+"-container";
+dojo.body().appendChild(_20);
+}
+if(o){
+_20.innerHTML=o.markup;
+return o.id;
+}
+return null;
+};
+dojox.embed.Flash.onInitialize();
+})();
+}
Index: trunk/web/dojo/dojox/embed/resources/version.mov
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/embed/resources/version.mov
===================================================================
--- trunk/web/dojo/dojox/embed/resources/version.mov	(revision 0)
+++ trunk/web/dojo/dojox/embed/resources/version.mov	(revision 9)

Property changes on: trunk/web/dojo/dojox/embed/resources/version.mov
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/embed/IE/flash.js
===================================================================
--- trunk/web/dojo/dojox/embed/IE/flash.js	(revision 0)
+++ trunk/web/dojo/dojox/embed/IE/flash.js	(revision 9)
@@ -0,0 +1,22 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dojox.embed.Flash.place=function(_1,_2){
+var o=dojox.embed.Flash.__ie_markup__(_1);
+_2=dojo.byId(_2);
+if(!_2){
+_2=dojo.doc.createElement("div");
+_2.id=o.id+"-container";
+dojo.body().appendChild(_2);
+}
+if(o){
+_2.innerHTML=o.markup;
+return o.id;
+}
+return null;
+};
+dojox.embed.Flash.onInitialize();
Index: trunk/web/dojo/dojox/embed/README
===================================================================
--- trunk/web/dojo/dojox/embed/README	(revision 0)
+++ trunk/web/dojo/dojox/embed/README	(revision 9)
@@ -0,0 +1,44 @@
+-------------------------------------------------------------------------------
+dojox.embed
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 4/7/2008
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Tom Trenka (ttrenka AT gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+A move/port of what was in dojox.av._base; the nominal purpose is to provide
+easy ways of including external objects that would normally require the use
+of either an OBJECT or an EMBED tag.
+
+The following constructors are considered beta (working tests and docs) as of
+2008-06-04:
+
+dojox.embed.Flash
+dojox.embed.FlashProxy
+dojox.embed.Quicktime
+dojox.embed.Object (a Dijit that can load anything there is an embed for here)
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojox.embed has no dependencies, other than the Dojo base.
+-------------------------------------------------------------------------------
+Documentation
+
+TBD
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/dojox/trunk/embed/*
+
+Install into the following directory structure:
+/dojox/embed/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/embed/Object.js
===================================================================
--- trunk/web/dojo/dojox/embed/Object.js	(revision 0)
+++ trunk/web/dojo/dojox/embed/Object.js	(revision 9)
@@ -0,0 +1,39 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.embed.Object"]){
+dojo._hasResource["dojox.embed.Object"]=true;
+dojo.provide("dojox.embed.Object");
+dojo.experimental("dojox.embed.Object");
+dojo.require("dijit._Widget");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojox.embed.Quicktime");
+dojo.declare("dojox.embed.Object",dijit._Widget,{width:0,height:0,src:"",movie:null,params:null,reFlash:/\.swf|\.flv/gi,reQtMovie:/\.3gp|\.avi|\.m4v|\.mov|\.mp4|\.mpg|\.mpeg|\.qt/gi,reQtAudio:/\.aiff|\.aif|\.m4a|\.m4b|\.m4p|\.midi|\.mid|\.mp3|\.mpa|\.wav/gi,postCreate:function(){
+if(!this.width||!this.height){
+var _1=dojo.marginBox(this.domNode);
+this.width=_1.w,this.height=_1.h;
+}
+var em=dojox.embed.Flash;
+if(this.src.match(this.reQtMovie)||this.src.match(this.reQtAudio)){
+em=dojox.embed.Quicktime;
+}
+if(!this.params){
+this.params={};
+if(this.domNode.hasAttributes()){
+var _2={dojoType:"",width:"",height:"","class":"",style:"",id:"",src:""};
+var _3=this.domNode.attributes;
+for(var i=0,l=_3.length;i<l;i++){
+if(!_2[_3[i].name]){
+this.params[_3[i].name]=_3[i].value;
+}
+}
+}
+}
+var _4={path:this.src,width:this.width,height:this.height,params:this.params};
+this.movie=new (em)(_4,this.domNode);
+}});
+}
Index: trunk/web/dojo/dojox/html.js
===================================================================
--- trunk/web/dojo/dojox/html.js	(revision 0)
+++ trunk/web/dojo/dojox/html.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html"]){
+dojo._hasResource["dojox.html"]=true;
+dojo.provide("dojox.html");
+dojo.require("dojox.html._base");
+}
Index: trunk/web/dojo/dojox/storage.js
===================================================================
--- trunk/web/dojo/dojox/storage.js	(revision 0)
+++ trunk/web/dojo/dojox/storage.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage"]){
+dojo._hasResource["dojox.storage"]=true;
+dojo.provide("dojox.storage");
+dojo.require("dojox.storage._common");
+}
Index: trunk/web/dojo/dojox/dtl.js.uncompressed.js
===================================================================
--- trunk/web/dojo/dojox/dtl.js.uncompressed.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl.js.uncompressed.js	(revision 9)
@@ -0,0 +1,2863 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojox.string.Builder"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.string.Builder"] = true;
+dojo.provide("dojox.string.Builder");
+
+dojox.string.Builder = function(/*String?*/str){
+	//	summary:
+	//		A fast buffer for creating large strings.
+	//
+	//	length: Number
+	//		The current length of the internal string.
+
+	//	N.B. the public nature of the internal buffer is no longer
+	//	needed because the IE-specific fork is no longer needed--TRT.
+	var b = "";
+	this.length = 0;
+	
+	this.append = function(/* String... */s){ 
+		// summary: Append all arguments to the end of the buffer 
+		if(arguments.length>1){
+			/*  
+				This is a loop unroll was designed specifically for Firefox;
+				it would seem that static index access on an Arguments
+				object is a LOT faster than doing dynamic index access.
+				Therefore, we create a buffer string and take advantage
+				of JS's switch fallthrough.  The peformance of this method
+				comes very close to straight up string concatenation (+=).
+
+				If the arguments object length is greater than 9, we fall
+				back to standard dynamic access.
+
+				This optimization seems to have no real effect on either
+				Safari or Opera, so we just use it for all.
+
+				It turns out also that this loop unroll can increase performance
+				significantly with Internet Explorer, particularly when 
+				as many arguments are provided as possible.
+
+				Loop unroll per suggestion from Kris Zyp, implemented by 
+				Tom Trenka.
+
+				Note: added empty string to force a string cast if needed.
+			 */
+			var tmp="", l=arguments.length;
+			switch(l){
+				case 9: tmp=""+arguments[8]+tmp;
+				case 8: tmp=""+arguments[7]+tmp;
+				case 7: tmp=""+arguments[6]+tmp;
+				case 6: tmp=""+arguments[5]+tmp;
+				case 5: tmp=""+arguments[4]+tmp;
+				case 4: tmp=""+arguments[3]+tmp;
+				case 3: tmp=""+arguments[2]+tmp;
+				case 2: {
+					b+=""+arguments[0]+arguments[1]+tmp;
+					break;
+				}
+				default: {
+					var i=0;
+					while(i<arguments.length){
+						tmp += arguments[i++];
+					}
+					b += tmp;
+				}
+			}
+		} else {
+			b += s;
+		}
+		this.length = b.length;
+		return this;	//	dojox.string.Builder
+	};
+	
+	this.concat = function(/*String...*/s){
+		//	summary:
+		//		Alias for append.
+		return this.append.apply(this, arguments);	//	dojox.string.Builder
+	};
+	
+	this.appendArray = function(/*Array*/strings) {
+		//	summary:
+		//		Append an array of items to the internal buffer.
+
+		//	Changed from String.prototype.concat.apply because of IE.
+		return this.append.apply(this, strings);	//	dojox.string.Builder
+	};
+	
+	this.clear = function(){
+		//	summary: 
+		//		Remove all characters from the buffer.
+		b = "";
+		this.length = 0;
+		return this;	//	dojox.string.Builder
+	};
+	
+	this.replace = function(/* String */oldStr, /* String */ newStr){
+		// 	summary: 
+		//		Replace instances of one string with another in the buffer.
+		b = b.replace(oldStr,newStr);
+		this.length = b.length;
+		return this;	//	dojox.string.Builder
+	};
+	
+	this.remove = function(/* Number */start, /* Number? */len){
+		//	summary:
+		//		Remove len characters starting at index start.  If len
+		//		is not provided, the end of the string is assumed.
+		if(len===undefined){ len = b.length; }
+		if(len == 0){ return this; }
+		b = b.substr(0, start) + b.substr(start+len);
+		this.length = b.length;
+		return this;	//	dojox.string.Builder
+	};
+	
+	this.insert = function(/* Number */index, /* String */str){
+		//	summary: 
+		//		Insert string str starting at index.
+		if(index == 0){
+			b = str + b;
+		}else{
+			b = b.slice(0, index) + str + b.slice(index);
+		}
+		this.length = b.length;
+		return this;	//	dojox.string.Builder
+	};
+	
+	this.toString = function(){
+		//	summary:
+		//		Return the string representation of the internal buffer.
+		return b;	//	String
+	};
+
+	//	initialize the buffer.
+	if(str){ this.append(str); }
+};
+
+}
+
+if(!dojo._hasResource["dojox.string.tokenize"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.string.tokenize"] = true;
+dojo.provide("dojox.string.tokenize");
+
+dojox.string.tokenize = function(/*String*/ str, /*RegExp*/ re, /*Function?*/ parseDelim, /*Object?*/ instance){
+	// summary:
+	//		Split a string by a regular expression with the ability to capture the delimeters
+	// parseDelim:
+	//		Each group (excluding the 0 group) is passed as a parameter. If the function returns
+	//		a value, it's added to the list of tokens.
+	// instance:
+	//		Used as the "this" instance when calling parseDelim
+	var tokens = [];
+	var match, content, lastIndex = 0;
+	while(match = re.exec(str)){
+		content = str.slice(lastIndex, re.lastIndex - match[0].length);
+		if(content.length){
+			tokens.push(content);
+		}
+		if(parseDelim){
+			if(dojo.isOpera){
+				var copy = match.slice(0);
+				while(copy.length < match.length){
+					copy.push(null);
+				}
+				match = copy;
+			}
+			var parsed = parseDelim.apply(instance, match.slice(1).concat(tokens.length));
+			if(typeof parsed != "undefined"){
+				tokens.push(parsed);
+			}
+		}
+		lastIndex = re.lastIndex;
+	}
+	content = str.slice(lastIndex);
+	if(content.length){
+		tokens.push(content);
+	}
+	return tokens;
+}
+
+}
+
+if(!dojo._hasResource["dojox.dtl._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl._base"] = true;
+dojo.provide("dojox.dtl._base");
+
+
+
+
+dojo.experimental("dojox.dtl");
+
+(function(){
+	var dd = dojox.dtl;
+
+	dd.TOKEN_BLOCK = -1;
+	dd.TOKEN_VAR = -2;
+	dd.TOKEN_COMMENT = -3;
+	dd.TOKEN_TEXT = 3;
+
+	dd._Context = dojo.extend(function(dict){
+		// summary: Pass one of these when rendering a template to tell the template what values to use.
+		if(dict){
+			dojo._mixin(this, dict);
+			if(dict.get){
+				// Preserve passed getter and restore prototype get
+				this._getter = dict.get;
+				delete this.get;
+			}
+		}
+	},
+	{
+		push: function(){
+			var last = this;
+			var context = dojo.delegate(this);
+			context.pop = function(){ return last; }
+			return context;
+		},
+		pop: function(){
+			throw new Error("pop() called on empty Context");
+		},
+		get: function(key, otherwise){
+			var n = this._normalize;
+
+			if(this._getter){
+				var got = this._getter(key);
+				if(typeof got != "undefined"){
+					return n(got);
+				}
+			}
+
+			if(typeof this[key] != "undefined"){
+				return n(this[key]);
+			}
+
+			return otherwise;
+		},
+		_normalize: function(value){
+			if(value instanceof Date){
+				value.year = value.getFullYear();
+				value.month = value.getMonth() + 1;
+				value.day = value.getDate();
+				value.date = value.year + "-" + ("0" + value.month).slice(-2) + "-" + ("0" + value.day).slice(-2);
+				value.hour = value.getHours();
+				value.minute = value.getMinutes();
+				value.second = value.getSeconds();
+				value.microsecond = value.getMilliseconds();
+			}
+			return value;
+		},
+		update: function(dict){
+			var context = this.push();
+			if(dict){
+				dojo._mixin(this, dict);
+			}
+			return context;
+		}
+	});
+
+	var smart_split_re = /("(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)/g;           
+	var split_re = /\s+/g;
+	var split = function(/*String|RegExp?*/ splitter, /*Integer?*/ limit){
+		splitter = splitter || split_re;
+		if(!(splitter instanceof RegExp)){
+			splitter = new RegExp(splitter, "g");
+		}
+		if(!splitter.global){
+			throw new Error("You must use a globally flagged RegExp with split " + splitter);
+		}
+		splitter.exec(""); // Reset the global
+
+		var part, parts = [], lastIndex = 0, i = 0;
+		while(part = splitter.exec(this)){
+			parts.push(this.slice(lastIndex, splitter.lastIndex - part[0].length));
+			lastIndex = splitter.lastIndex;
+			if(limit && (++i > limit - 1)){
+				break;
+			}
+		}
+		parts.push(this.slice(lastIndex));
+		return parts;
+	}
+
+	dd.Token = function(token_type, contents){
+		this.token_type = token_type;
+		this.contents = new String(dojo.trim(contents));
+		this.contents.split = split;
+		this.split = function(){
+			return String.prototype.split.apply(this.contents, arguments);
+		}
+	}
+	dd.Token.prototype.split_contents = function(/*Integer?*/ limit){
+		var bit, bits = [], i = 0;
+		limit = limit || 999;
+		while(i++ < limit && (bit = smart_split_re.exec(this.contents))){
+			bit = bit[0];
+			if(bit.charAt(0) == '"' && bit.slice(-1) == '"'){
+				bits.push('"' + bit.slice(1, -1).replace('\\"', '"').replace('\\\\', '\\') + '"');
+			}else if(bit.charAt(0) == "'" && bit.slice(-1) == "'"){
+				bits.push("'" + bit.slice(1, -1).replace("\\'", "'").replace('\\\\', '\\') + "'");
+			}else{
+				bits.push(bit);
+			}
+		}
+		return bits;
+	}
+
+	var ddt = dd.text = {
+		_get: function(module, name, errorless){
+			// summary: Used to find both tags and filters
+			var params = dd.register.get(module, name.toLowerCase(), errorless);
+			if(!params){
+				if(!errorless){
+					throw new Error("No tag found for " + name);
+				}
+				return null;
+			}
+
+			var fn = params[1];
+			var require = params[2];
+
+			var parts;
+			if(fn.indexOf(":") != -1){
+				parts = fn.split(":");
+				fn = parts.pop();
+			}
+
+			dojo["require"](require);
+
+			var parent = dojo.getObject(require);
+
+			return parent[fn || name] || parent[name + "_"] || parent[fn + "_"];
+		},
+		getTag: function(name, errorless){
+			return ddt._get("tag", name, errorless);
+		},
+		getFilter: function(name, errorless){
+			return ddt._get("filter", name, errorless);
+		},
+		getTemplate: function(file){
+			return new dd.Template(ddt.getTemplateString(file));
+		},
+		getTemplateString: function(file){
+			return dojo._getText(file.toString()) || "";
+		},
+		_resolveLazy: function(location, sync, json){
+			if(sync){
+				if(json){
+					return dojo.fromJson(dojo._getText(location)) || {};
+				}else{
+					return dd.text.getTemplateString(location);
+				}
+			}else{
+				return dojo.xhrGet({
+					handleAs: (json) ? "json" : "text",
+					url: location
+				});
+			}
+		},
+		_resolveTemplateArg: function(arg, sync){
+			if(ddt._isTemplate(arg)){
+				if(!sync){
+					var d = new dojo.Deferred();
+					d.callback(arg);
+					return d;
+				}
+				return arg;
+			}
+			return ddt._resolveLazy(arg, sync);
+		},
+		_isTemplate: function(arg){
+			return (typeof arg == "undefined") || (typeof arg == "string" && (arg.match(/^\s*[<{]/) || arg.indexOf(" ") != -1));
+		},
+		_resolveContextArg: function(arg, sync){
+			if(arg.constructor == Object){
+				if(!sync){
+					var d = new dojo.Deferred;
+					d.callback(arg);
+					return d;
+				}
+				return arg;
+			}
+			return ddt._resolveLazy(arg, sync, true);
+		},
+		_re: /(?:\{\{\s*(.+?)\s*\}\}|\{%\s*(load\s*)?(.+?)\s*%\})/g,
+		tokenize: function(str){
+			return dojox.string.tokenize(str, ddt._re, ddt._parseDelims);
+		},
+		_parseDelims: function(varr, load, tag){
+			if(varr){
+				return [dd.TOKEN_VAR, varr];
+			}else if(load){
+				var parts = dojo.trim(tag).split(/\s+/g);
+				for(var i = 0, part; part = parts[i]; i++){
+					dojo["require"](part);
+				}
+			}else{
+				return [dd.TOKEN_BLOCK, tag];
+			}
+		}
+	}
+
+	dd.Template = dojo.extend(function(/*String|dojo._Url*/ template, /*Boolean*/ isString){
+		// template:
+		//		The string or location of the string to
+		//		use as a template
+		var str = isString ? template : ddt._resolveTemplateArg(template, true) || "";
+		var tokens = ddt.tokenize(str);
+		var parser = new dd._Parser(tokens);
+		this.nodelist = parser.parse();
+	},
+	{
+		update: function(node, context){
+			// node: DOMNode|String|dojo.NodeList
+			//		A node reference or set of nodes
+			// context: dojo._Url|String|Object
+			//		The context object or location
+			return ddt._resolveContextArg(context).addCallback(this, function(contextObject){
+				var content = this.render(new dd._Context(contextObject));
+				if(node.forEach){
+					node.forEach(function(item){
+						item.innerHTML = content;
+					});
+				}else{
+					dojo.byId(node).innerHTML = content;
+				}
+				return this;
+			});
+		},
+		render: function(context, /*concatenatable?*/ buffer){
+			buffer = buffer || this.getBuffer();
+			context = context || new dd._Context({});
+			return this.nodelist.render(context, buffer) + "";
+		},
+		getBuffer: function(){
+			
+			return new dojox.string.Builder();
+		}
+	});
+
+	var qfRe = /\{\{\s*(.+?)\s*\}\}/g;
+	dd.quickFilter = function(str){
+		if(!str){
+			return new dd._NodeList();
+		}
+
+		if(str.indexOf("{%") == -1){
+			return new dd._QuickNodeList(dojox.string.tokenize(str, qfRe, function(token){
+				return new dd._Filter(token);
+			}));
+		}
+	}
+
+	dd._QuickNodeList = dojo.extend(function(contents){
+		this.contents = contents;
+	},
+	{
+		render: function(context, buffer){
+			for(var i=0, l=this.contents.length; i<l; i++){
+				if(this.contents[i].resolve){
+					buffer = buffer.concat(this.contents[i].resolve(context));
+				}else{
+					buffer = buffer.concat(this.contents[i]);
+				}
+			}
+			return buffer;
+		},
+		dummyRender: function(context){ return this.render(context, dd.Template.prototype.getBuffer()).toString(); },
+		clone: function(buffer){ return this; }
+	});
+
+	dd._Filter = dojo.extend(function(token){
+		// summary: Uses a string to find (and manipulate) a variable
+		if(!token) throw new Error("Filter must be called with variable name");
+		this.contents = token;
+
+		var cache = this._cache[token];
+		if(cache){
+			this.key = cache[0];
+			this.filters = cache[1];
+		}else{
+			this.filters = [];
+			dojox.string.tokenize(token, this._re, this._tokenize, this);
+			this._cache[token] = [this.key, this.filters];
+		}
+	},
+	{
+		_cache: {},
+		_re: /(?:^_\("([^\\"]*(?:\\.[^\\"])*)"\)|^"([^\\"]*(?:\\.[^\\"]*)*)"|^([a-zA-Z0-9_.]+)|\|(\w+)(?::(?:_\("([^\\"]*(?:\\.[^\\"])*)"\)|"([^\\"]*(?:\\.[^\\"]*)*)"|([a-zA-Z0-9_.]+)|'([^\\']*(?:\\.[^\\']*)*)'))?|^'([^\\']*(?:\\.[^\\']*)*)')/g,
+		_values: {
+			0: '"', // _("text")
+			1: '"', // "text"
+			2: "", // variable
+			8: '"' // 'text'
+		},
+		_args: {
+			4: '"', // :_("text")
+			5: '"', // :"text"
+			6: "", // :variable
+			7: "'"// :'text'
+		},
+		_tokenize: function(){
+			var pos, arg;
+
+			for(var i = 0, has = []; i < arguments.length; i++){
+				has[i] = (typeof arguments[i] != "undefined" && typeof arguments[i] == "string" && arguments[i]);
+			}
+
+			if(!this.key){
+				for(pos in this._values){
+					if(has[pos]){
+						this.key = this._values[pos] + arguments[pos] + this._values[pos];
+						break;
+					}
+				}
+			}else{
+				for(pos in this._args){
+					if(has[pos]){
+						var value = arguments[pos];
+						if(this._args[pos] == "'"){
+							value = value.replace(/\\'/g, "'");
+						}else if(this._args[pos] == '"'){
+							value = value.replace(/\\"/g, '"');
+						}
+						arg = [!this._args[pos], value];
+						break;
+					}
+				}
+				// Get a named filter
+				var fn = ddt.getFilter(arguments[3]);
+				if(!dojo.isFunction(fn)) throw new Error(arguments[3] + " is not registered as a filter");
+				this.filters.push([fn, arg]);
+			}
+		},
+		getExpression: function(){
+			return this.contents;
+		},
+		resolve: function(context){
+			if(typeof this.key == "undefined"){
+				return "";
+			}
+
+			var str = this.resolvePath(this.key, context);
+
+			for(var i = 0, filter; filter = this.filters[i]; i++){
+				// Each filter has the function in [0], a boolean in [1][0] of whether it's a variable or a string
+				// and [1][1] is either the variable name of the string content.
+				if(filter[1]){
+					if(filter[1][0]){
+						str = filter[0](str, this.resolvePath(filter[1][1], context));
+					}else{
+						str = filter[0](str, filter[1][1]);
+					}
+				}else{
+					str = filter[0](str);
+				}
+			}
+
+			return str;
+		},
+		resolvePath: function(path, context){
+			var current, parts;
+			var first = path.charAt(0);
+			var last = path.slice(-1);
+			if(!isNaN(parseInt(first))){
+				current = (path.indexOf(".") == -1) ? parseInt(path) : parseFloat(path);
+			}else if(first == '"' && first == last){
+				current = path.slice(1, -1);
+			}else{
+				if(path == "true"){ return true; }
+				if(path == "false"){ return false; }
+				if(path == "null" || path == "None"){ return null; }
+				parts = path.split(".");
+				current = context.get(parts[0]);
+
+				if(dojo.isFunction(current)){
+					var self = context.getThis && context.getThis();
+					if(current.alters_data){
+						current = "";
+					}else if(self){
+						current = current.call(self);
+					}else{
+						current = "";
+					}
+				}
+
+				for(var i = 1; i < parts.length; i++){
+					var part = parts[i];
+					if(current){
+						var base = current;
+						if(dojo.isObject(current) && part == "items" && typeof current[part] == "undefined"){
+							var items = [];
+							for(var key in current){
+								items.push([key, current[key]]);
+							}
+							current = items;
+							continue;
+						}
+
+						if(current.get && dojo.isFunction(current.get) && current.get.safe){
+							current = current.get(part);
+						}else if(typeof current[part] == "undefined"){
+							current = current[part];
+							break;
+						}else{
+							current = current[part];
+						}
+
+						if(dojo.isFunction(current)){
+							if(current.alters_data){
+								current = "";
+							}else{
+								current = current.call(base);
+							}
+						}else if(current instanceof Date){
+							current = dd._Context.prototype._normalize(current);
+						}
+					}else{
+						return "";
+					}
+				}
+			}
+			return current;
+		}
+	});
+
+	dd._TextNode = dd._Node = dojo.extend(function(/*Object*/ obj){
+		// summary: Basic catch-all node
+		this.contents = obj;
+	},
+	{
+		set: function(data){
+			this.contents = data;
+			return this;
+		},
+		render: function(context, buffer){
+			// summary: Adds content onto the buffer
+			return buffer.concat(this.contents);
+		},
+		isEmpty: function(){
+			return !dojo.trim(this.contents);
+		},
+		clone: function(){ return this; }
+	});
+
+	dd._NodeList = dojo.extend(function(/*Node[]*/ nodes){
+		// summary: Allows us to render a group of nodes
+		this.contents = nodes || [];
+		this.last = "";
+	},
+	{
+		push: function(node){
+			// summary: Add a new node to the list
+			this.contents.push(node);
+			return this;
+		},
+		concat: function(nodes){
+			this.contents = this.contents.concat(nodes);
+			return this;
+		},
+		render: function(context, buffer){
+			// summary: Adds all content onto the buffer
+			for(var i = 0; i < this.contents.length; i++){
+				buffer = this.contents[i].render(context, buffer);
+				if(!buffer) throw new Error("Template must return buffer");
+			}
+			return buffer;
+		},
+		dummyRender: function(context){
+			return this.render(context, dd.Template.prototype.getBuffer()).toString();
+		},
+		unrender: function(){ return arguments[1]; },
+		clone: function(){ return this; },
+		rtrim: function(){
+			while(1){
+				i = this.contents.length - 1;
+				if(this.contents[i] instanceof dd._TextNode && this.contents[i].isEmpty()){
+					this.contents.pop();
+				}else{
+					break;
+				}
+			}
+
+			return this;
+		}
+	});
+
+	dd._VarNode = dojo.extend(function(str){
+		// summary: A node to be processed as a variable
+		this.contents = new dd._Filter(str);
+	},
+	{
+		render: function(context, buffer){
+			var str = this.contents.resolve(context);
+			if(!str.safe){
+				str = dd._base.escape("" + str);
+			}
+			return buffer.concat(str);
+		}
+	});
+
+	dd._noOpNode = new function(){
+		// summary: Adds a no-op node. Useful in custom tags
+		this.render = this.unrender = function(){ return arguments[1]; }
+		this.clone = function(){ return this; }
+	}
+
+	dd._Parser = dojo.extend(function(tokens){
+		// summary: Parser used during initialization and for tag groups.
+		this.contents = tokens;
+	},
+	{
+		i: 0,
+		parse: function(/*Array?*/ stop_at){
+			// summary: Turns tokens into nodes
+			// description: Steps into tags are they're found. Blocks use the parse object
+			//		to find their closing tag (the stop_at array). stop_at is inclusive, it
+			//		returns the node that matched.
+			var terminators = {}, token;
+			stop_at = stop_at || [];
+			for(var i = 0; i < stop_at.length; i++){
+				terminators[stop_at[i]] = true;
+			}
+
+			var nodelist = new dd._NodeList();
+			while(this.i < this.contents.length){
+				token = this.contents[this.i++];
+				if(typeof token == "string"){
+					nodelist.push(new dd._TextNode(token));
+				}else{
+					var type = token[0];
+					var text = token[1];
+					if(type == dd.TOKEN_VAR){
+						nodelist.push(new dd._VarNode(text));
+					}else if(type == dd.TOKEN_BLOCK){
+						if(terminators[text]){
+							--this.i;
+							return nodelist;
+						}
+						var cmd = text.split(/\s+/g);
+						if(cmd.length){
+							cmd = cmd[0];
+							var fn = ddt.getTag(cmd);
+							if(fn){
+								nodelist.push(fn(this, new dd.Token(type, text)));
+							}
+						}
+					}
+				}
+			}
+
+			if(stop_at.length){
+				throw new Error("Could not find closing tag(s): " + stop_at.toString());
+			}
+
+			this.contents.length = 0;
+			return nodelist;
+		},
+		next_token: function(){
+			// summary: Returns the next token in the list.
+			var token = this.contents[this.i++];
+			return new dd.Token(token[0], token[1]);
+		},
+		delete_first_token: function(){
+			this.i++;
+		},
+		skip_past: function(endtag){
+			while(this.i < this.contents.length){
+				var token = this.contents[this.i++];
+				if(token[0] == dd.TOKEN_BLOCK && token[1] == endtag){
+					return;
+				}
+			}
+			throw new Error("Unclosed tag found when looking for " + endtag);
+		},
+		create_variable_node: function(expr){
+			return new dd._VarNode(expr);
+		},
+		create_text_node: function(expr){
+			return new dd._TextNode(expr || "");
+		},
+		getTemplate: function(file){
+			return new dd.Template(file);
+		}
+	});
+
+	dd.register = {
+		_registry: {
+			attributes: [],
+			tags: [],
+			filters: []
+		},
+		get: function(/*String*/ module, /*String*/ name){
+			var registry = dd.register._registry[module + "s"];
+			for(var i = 0, entry; entry = registry[i]; i++){
+				if(typeof entry[0] == "string"){
+					if(entry[0] == name){
+						return entry;
+					}
+				}else if(name.match(entry[0])){
+					return entry;
+				}
+			}
+		},
+		getAttributeTags: function(){
+			var tags = [];
+			var registry = dd.register._registry.attributes;
+			for(var i = 0, entry; entry = registry[i]; i++){
+				if(entry.length == 3){
+					tags.push(entry);
+				}else{
+					var fn = dojo.getObject(entry[1]);
+					if(fn && dojo.isFunction(fn)){
+						entry.push(fn);
+						tags.push(entry);
+					}
+				}
+			}
+			return tags;
+		},
+		_any: function(type, base, locations){
+			for(var path in locations){
+				for(var i = 0, fn; fn = locations[path][i]; i++){
+					var key = fn;
+					if(dojo.isArray(fn)){
+						key = fn[0];
+						fn = fn[1];
+					}
+					if(typeof key == "string"){
+						if(key.substr(0, 5) == "attr:"){
+							var attr = fn;
+							if(attr.substr(0, 5) == "attr:"){
+								attr = attr.slice(5);
+							}
+							dd.register._registry.attributes.push([attr.toLowerCase(), base + "." + path + "." + attr]);
+						}
+						key = key.toLowerCase()
+					}
+					dd.register._registry[type].push([
+						key,
+						fn,
+						base + "." + path
+					]);
+				}
+			}
+		},
+		tags: function(/*String*/ base, /*Object*/ locations){
+			dd.register._any("tags", base, locations);
+		},
+		filters: function(/*String*/ base, /*Object*/ locations){
+			dd.register._any("filters", base, locations);
+		}
+	}
+
+	var escapeamp = /&/g;
+	var escapelt = /</g;
+	var escapegt = />/g;
+	var escapeqt = /'/g;
+	var escapedblqt = /"/g;
+	dd._base.escape = function(value){
+		// summary: Escapes a string's HTML
+		return dd.mark_safe(value.replace(escapeamp, '&amp;').replace(escapelt, '&lt;').replace(escapegt, '&gt;').replace(escapedblqt, '&quot;').replace(escapeqt, '&#39;'));
+	}
+
+	dd._base.safe = function(value){
+		if(typeof value == "string"){
+			value = new String(value);
+		}
+		if(typeof value == "object"){
+			value.safe = true;
+		}
+		return value;
+	}
+	dd.mark_safe = dd._base.safe;
+
+	dd.register.tags("dojox.dtl.tag", {
+		"date": ["now"],
+		"logic": ["if", "for", "ifequal", "ifnotequal"],
+		"loader": ["extends", "block", "include", "load", "ssi"],
+		"misc": ["comment", "debug", "filter", "firstof", "spaceless", "templatetag", "widthratio", "with"],
+		"loop": ["cycle", "ifchanged", "regroup"]
+	});
+	dd.register.filters("dojox.dtl.filter", {
+		"dates": ["date", "time", "timesince", "timeuntil"],
+		"htmlstrings": ["linebreaks", "linebreaksbr", "removetags", "striptags"],
+		"integers": ["add", "get_digit"],
+		"lists": ["dictsort", "dictsortreversed", "first", "join", "length", "length_is", "random", "slice", "unordered_list"],
+		"logic": ["default", "default_if_none", "divisibleby", "yesno"],
+		"misc": ["filesizeformat", "pluralize", "phone2numeric", "pprint"],
+		"strings": ["addslashes", "capfirst", "center", "cut", "fix_ampersands", "floatformat", "iriencode", "linenumbers", "ljust", "lower", "make_list", "rjust", "slugify", "stringformat", "title", "truncatewords", "truncatewords_html", "upper", "urlencode", "urlize", "urlizetrunc", "wordcount", "wordwrap"]
+	});
+	dd.register.filters("dojox.dtl", {
+		"_base": ["escape", "safe"]
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl"] = true;
+dojo.provide("dojox.dtl");
+
+
+}
+
+if(!dojo._hasResource["dojox.dtl.Context"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.Context"] = true;
+dojo.provide("dojox.dtl.Context");
+
+
+dojox.dtl.Context = dojo.extend(function(dict){
+	this._this = {};
+	dojox.dtl._Context.call(this, dict);
+}, dojox.dtl._Context.prototype,
+{
+	getKeys: function(){
+		var keys = [];
+		for(var key in this){
+			if(this.hasOwnProperty(key) && key != "_this"){
+				keys.push(key);
+			}
+		}
+		return keys;
+	},
+	extend: function(/*dojox.dtl.Context|Object*/ obj){
+		// summary: Returns a clone of this context object, with the items from the
+		//		passed objecct mixed in.
+		return  dojo.delegate(this, obj);
+	},
+	filter: function(/*dojox.dtl.Context|Object|String...*/ filter){
+		// summary: Returns a clone of this context, only containing the items
+		//		defined in the filter.
+		var context = new dojox.dtl.Context();
+		var keys = [];
+		var i, arg;
+		if(filter instanceof dojox.dtl.Context){
+			keys = filter.getKeys();
+		}else if(typeof filter == "object"){
+			for(var key in filter){
+				keys.push(key);
+			}
+		}else{
+			for(i = 0; arg = arguments[i]; i++){
+				if(typeof arg == "string"){
+					keys.push(arg);
+				}
+			}
+		}
+
+		for(i = 0, key; key = keys[i]; i++){
+			context[key] = this[key];
+		}
+
+		return context;
+	},
+	setThis: function(/*Object*/ _this){
+		this._this = _this;
+	},
+	getThis: function(){
+		return this._this;
+	},
+	hasKey: function(key){
+		if(this._getter){
+			var got = this._getter(key);
+			if(typeof got != "undefined"){
+				return true;
+			}
+		}
+
+		if(typeof this[key] != "undefined"){
+			return true;
+		}
+
+		return false;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.logic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.logic"] = true;
+dojo.provide("dojox.dtl.tag.logic");
+
+
+
+(function(){
+	var dd = dojox.dtl;
+	var ddt = dd.text;
+	var ddtl = dd.tag.logic;
+
+	ddtl.IfNode = dojo.extend(function(bools, trues, falses, type){
+		this.bools = bools;
+		this.trues = trues;
+		this.falses = falses;
+		this.type = type;
+	},
+	{
+		render: function(context, buffer){
+			var i, bool, ifnot, filter, value;
+			if(this.type == "or"){
+				for(i = 0; bool = this.bools[i]; i++){
+					ifnot = bool[0];
+					filter = bool[1];
+					value = filter.resolve(context);
+					if((value && !ifnot) || (ifnot && !value)){
+						if(this.falses){
+							buffer = this.falses.unrender(context, buffer);
+						}
+						return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
+					}
+				}
+				if(this.trues){
+					buffer = this.trues.unrender(context, buffer);
+				}
+				return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
+			}else{
+				for(i = 0; bool = this.bools[i]; i++){
+					ifnot = bool[0];
+					filter = bool[1];
+					value = filter.resolve(context);
+					// If we ever encounter a false value
+					if(value == ifnot){
+						if(this.trues){
+							buffer = this.trues.unrender(context, buffer);
+						}
+						return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
+					}
+				}
+				if(this.falses){
+					buffer = this.falses.unrender(context, buffer);
+				}
+				return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
+			}
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			buffer = (this.trues) ? this.trues.unrender(context, buffer) : buffer;
+			buffer = (this.falses) ? this.falses.unrender(context, buffer) : buffer;
+			return buffer;
+		},
+		clone: function(buffer){
+			var trues = (this.trues) ? this.trues.clone(buffer) : null;
+			var falses = (this.falses) ? this.falses.clone(buffer) : null;
+			return new this.constructor(this.bools, trues, falses, this.type);
+		}
+	});
+
+	ddtl.IfEqualNode = dojo.extend(function(var1, var2, trues, falses, negate){
+		this.var1 = new dd._Filter(var1);
+		this.var2 = new dd._Filter(var2);
+		this.trues = trues;
+		this.falses = falses;
+		this.negate = negate;
+	},
+	{
+		render: function(context, buffer){
+			var var1 = this.var1.resolve(context);
+			var var2 = this.var2.resolve(context);
+			var1 = (typeof var1 != "undefined") ? var1 : "";
+			var2 = (typeof var1 != "undefined") ? var2 : "";
+			if((this.negate && var1 != var2) || (!this.negate && var1 == var2)){
+				if(this.falses){
+					buffer = this.falses.unrender(context, buffer, this);
+				}
+				return (this.trues) ? this.trues.render(context, buffer, this) : buffer;
+			}
+			if(this.trues){
+				buffer = this.trues.unrender(context, buffer, this);
+			}
+			return (this.falses) ? this.falses.render(context, buffer, this) : buffer;
+		},
+		unrender: function(context, buffer){
+			return ddtl.IfNode.prototype.unrender.call(this, context, buffer);
+		},
+		clone: function(buffer){
+			var trues = this.trues ? this.trues.clone(buffer) : null;
+			var falses = this.falses ? this.falses.clone(buffer) : null;
+			return new this.constructor(this.var1.getExpression(), this.var2.getExpression(), trues, falses, this.negate);
+		}
+	});
+
+	ddtl.ForNode = dojo.extend(function(assign, loop, reversed, nodelist){
+		this.assign = assign;
+		this.loop = new dd._Filter(loop);
+		this.reversed = reversed;
+		this.nodelist = nodelist;
+		this.pool = [];
+	},
+	{
+		render: function(context, buffer){
+			var i, j, k;
+			var dirty = false;
+			var assign = this.assign;
+
+			for(k = 0; k < assign.length; k++){
+				if(typeof context[assign[k]] != "undefined"){
+					dirty = true;
+					context = context.push();
+					break;
+				}
+			}
+			if(!dirty && context.forloop){
+				dirty = true;
+				context = context.push();
+			}
+
+			var items = this.loop.resolve(context) || [];
+			for(i = items.length; i < this.pool.length; i++){
+				this.pool[i].unrender(context, buffer, this);
+			}
+			if(this.reversed){
+				items = items.slice(0).reverse();
+			}
+
+			var isObject = dojo.isObject(items) && !dojo.isArrayLike(items);
+			var arred = [];
+			if(isObject){
+				for(var key in items){
+					arred.push(items[key]);
+				}
+			}else{
+				arred = items;
+			}
+
+			var forloop = context.forloop = {
+				parentloop: context.get("forloop", {})
+			};
+			var j = 0;
+			for(i = 0; i < arred.length; i++){
+				var item = arred[i];
+
+				forloop.counter0 = j;
+				forloop.counter = j + 1;
+				forloop.revcounter0 = arred.length - j - 1;
+				forloop.revcounter = arred.length - j;
+				forloop.first = !j;
+				forloop.last = (j == arred.length - 1);
+
+				if(assign.length > 1 && dojo.isArrayLike(item)){
+					if(!dirty){
+						dirty = true;
+						context = context.push();
+					}
+					var zipped = {};
+					for(k = 0; k < item.length && k < assign.length; k++){
+						zipped[assign[k]] = item[k];
+					}
+					dojo.mixin(context, zipped);
+				}else{
+					context[assign[0]] = item;
+				}
+
+				if(j + 1 > this.pool.length){
+					this.pool.push(this.nodelist.clone(buffer));
+				}
+				buffer = this.pool[j++].render(context, buffer, this);
+			}
+
+			delete context.forloop;
+			if(dirty){
+				context = context.pop();
+			}else{
+				for(k = 0; k < assign.length; k++){
+					delete context[assign[k]];
+				}
+			}
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			for(var i = 0, pool; pool = this.pool[i]; i++){
+				buffer = pool.unrender(context, buffer);
+			}
+			return buffer;
+		},
+		clone: function(buffer){
+			return new this.constructor(this.assign, this.loop.getExpression(), this.reversed, this.nodelist.clone(buffer));
+		}
+	});
+
+	dojo.mixin(ddtl, {
+		if_: function(parser, token){
+			var i, part, type, bools = [], parts = token.contents.split();
+			parts.shift();
+			token = parts.join(" ");
+			parts = token.split(" and ");
+			if(parts.length == 1){
+				type = "or";
+				parts = token.split(" or ");
+			}else{
+				type = "and";
+				for(i = 0; i < parts.length; i++){
+					if(parts[i].indexOf(" or ") != -1){
+						// Note, since we split by and, this is the only place we need to error check
+						throw new Error("'if' tags can't mix 'and' and 'or'");
+					}
+				}
+			}
+			for(i = 0; part = parts[i]; i++){
+				var not = false;
+				if(part.indexOf("not ") == 0){
+					part = part.slice(4);
+					not = true;
+				}
+				bools.push([not, new dd._Filter(part)]);
+			}
+			var trues = parser.parse(["else", "endif"]);
+			var falses = false;
+			var token = parser.next_token();
+			if(token.contents == "else"){
+				falses = parser.parse(["endif"]);
+				parser.next_token();
+			}
+			return new ddtl.IfNode(bools, trues, falses, type);
+		},
+		_ifequal: function(parser, token, negate){
+			var parts = token.split_contents();
+			if(parts.length != 3){
+				throw new Error(parts[0] + " takes two arguments");
+			}
+			var end = 'end' + parts[0];
+			var trues = parser.parse(["else", end]);
+			var falses = false;
+			var token = parser.next_token();
+			if(token.contents == "else"){
+				falses = parser.parse([end]);
+				parser.next_token();
+			}
+			return new ddtl.IfEqualNode(parts[1], parts[2], trues, falses, negate);
+		},
+		ifequal: function(parser, token){
+			return ddtl._ifequal(parser, token);
+		},
+		ifnotequal: function(parser, token){
+			return ddtl._ifequal(parser, token, true);
+		},
+		for_: function(parser, token){
+			var parts = token.contents.split();
+			if(parts.length < 4){
+				throw new Error("'for' statements should have at least four words: " + token.contents);
+			}
+			var reversed = parts[parts.length - 1] == "reversed";
+			var index = (reversed) ? -3 : -2;
+			if(parts[parts.length + index] != "in"){
+				throw new Error("'for' tag received an invalid argument: " + token.contents);
+			}
+			var loopvars = parts.slice(1, index).join(" ").split(/ *, */);
+			for(var i = 0; i < loopvars.length; i++){
+				if(!loopvars[i] || loopvars[i].indexOf(" ") != -1){
+					throw new Error("'for' tag received an invalid argument: " + token.contents);
+				}
+			}
+			var nodelist = parser.parse(["endfor"]);
+			parser.next_token();
+			return new ddtl.ForNode(loopvars, parts[parts.length + index + 1], reversed, nodelist);
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.loop"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.loop"] = true;
+dojo.provide("dojox.dtl.tag.loop");
+
+
+
+
+(function(){
+	var dd = dojox.dtl;
+	var ddtl = dd.tag.loop;
+
+	ddtl.CycleNode = dojo.extend(function(cyclevars, name, text, shared){
+		this.cyclevars = cyclevars;
+		this.name = name;
+		this.contents = text;
+		this.shared = shared || {counter: -1, map: {}};
+	},
+	{
+		render: function(context, buffer){
+			if(context.forloop && !context.forloop.counter0){
+				this.shared.counter = -1;
+			}
+
+			++this.shared.counter;
+			var value = this.cyclevars[this.shared.counter % this.cyclevars.length];
+
+			var map = this.shared.map;
+			if(!map[value]){
+				map[value] = new dd._Filter(value);
+			}
+			value = map[value].resolve(context, buffer);
+
+			if(this.name){
+				context[this.name] = value;
+			}
+			this.contents.set(value);
+			return this.contents.render(context, buffer);
+		},
+		unrender: function(context, buffer){
+			return this.contents.unrender(context, buffer);
+		},
+		clone: function(buffer){
+			return new this.constructor(this.cyclevars, this.name, this.contents.clone(buffer), this.shared);
+		}
+	});
+
+	ddtl.IfChangedNode = dojo.extend(function(nodes, vars, shared){
+		this.nodes = nodes;
+		this._vars = vars;
+		this.shared = shared || {last: null, counter: 0};
+		this.vars = dojo.map(vars, function(item){
+			return new dojox.dtl._Filter(item);
+		});
+	}, {
+		render: function(context, buffer){
+			if(context.forloop){
+				if(context.forloop.counter <= this.shared.counter){
+					this.shared.last = null;
+				}
+				this.shared.counter = context.forloop.counter;
+			}
+
+			var change;
+			if(this.vars.length){
+				change = dojo.toJson(dojo.map(this.vars, function(item){
+					return item.resolve(context);
+				}));
+			}else{
+				change = this.nodes.dummyRender(context, buffer);
+			}
+
+			if(change != this.shared.last){
+				var firstloop = (this.shared.last === null);
+				this.shared.last = change;
+				context = context.push();
+				context.ifchanged = {firstloop: firstloop};
+				buffer = this.nodes.render(context, buffer);
+				context = context.pop();
+			}else{
+				buffer = this.nodes.unrender(context, buffer);
+			}
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			return this.nodes.unrender(context, buffer);
+		},
+		clone: function(buffer){
+			return new this.constructor(this.nodes.clone(buffer), this._vars, this.shared);
+		}
+	});
+
+	ddtl.RegroupNode = dojo.extend(function(expression, key, alias){
+		this._expression = expression;
+		this.expression = new dd._Filter(expression);
+		this.key = key;
+		this.alias = alias;
+	},
+	{
+		_push: function(container, grouper, stack){
+			if(stack.length){
+				container.push({ grouper: grouper, list: stack });
+			}
+		},
+		render: function(context, buffer){
+			context[this.alias] = [];
+			var list = this.expression.resolve(context);
+			if(list){
+				var last = null;
+				var stack = [];
+				for(var i = 0; i < list.length; i++){
+					var id = list[i][this.key];
+					if(last !== id){
+						this._push(context[this.alias], last, stack);
+						last = id;
+						stack = [list[i]];
+					}else{
+						stack.push(list[i]);
+					}
+				}
+				this._push(context[this.alias], last, stack);
+			}
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			return buffer;
+		},
+		clone: function(context, buffer){
+			return this;
+		}
+	});
+
+	dojo.mixin(ddtl, {
+		cycle: function(parser, token){
+			// summary: Cycle among the given strings each time this tag is encountered
+			var args = token.split_contents();
+
+			if(args.length < 2){
+				throw new Error("'cycle' tag requires at least two arguments");
+			}
+
+			if(args[1].indexOf(",") != -1){
+				var vars = args[1].split(",");
+				args = [args[0]];
+				for(var i = 0; i < vars.length; i++){
+					args.push('"' + vars[i] + '"');
+				}
+			}
+
+			if(args.length == 2){
+				var name = args[args.length - 1];
+
+				if(!parser._namedCycleNodes){
+					throw new Error("No named cycles in template: '" + name + "' is not defined");
+				}
+				if(!parser._namedCycleNodes[name]){
+					throw new Error("Named cycle '" + name + "' does not exist");
+				}
+
+		        return parser._namedCycleNodes[name];
+			}
+
+			if(args.length > 4 && args[args.length - 2] == "as"){
+				var name = args[args.length - 1];
+
+				var node = new ddtl.CycleNode(args.slice(1, args.length - 2), name, parser.create_text_node());
+
+				if(!parser._namedCycleNodes){
+					parser._namedCycleNodes = {};
+				}
+				parser._namedCycleNodes[name] = node;
+			}else{
+				node = new ddtl.CycleNode(args.slice(1), null, parser.create_text_node());
+			}
+
+			return node;
+		},
+		ifchanged: function(parser, token){
+			var parts = token.contents.split();
+			var nodes = parser.parse(["endifchanged"]);
+			parser.delete_first_token();
+			return new ddtl.IfChangedNode(nodes, parts.slice(1));
+		},
+		regroup: function(parser, token){
+			var tokens = dojox.string.tokenize(token.contents, /(\s+)/g, function(spaces){
+				return spaces;
+			});
+			if(tokens.length < 11 || tokens[tokens.length - 3] != "as" || tokens[tokens.length - 7] != "by"){
+				throw new Error("Expected the format: regroup list by key as newList");
+			}
+			var expression = tokens.slice(2, -8).join("");
+			var key = tokens[tokens.length - 5];
+			var alias = tokens[tokens.length - 1];
+			return new ddtl.RegroupNode(expression, key, alias);
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojo.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date"] = true;
+dojo.provide("dojo.date");
+
+/*=====
+dojo.date = {
+	// summary: Date manipulation utilities
+}
+=====*/
+
+dojo.date.getDaysInMonth = function(/*Date*/dateObject){
+	//	summary:
+	//		Returns the number of days in the month used by dateObject
+	var month = dateObject.getMonth();
+	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+	if(month == 1 && dojo.date.isLeapYear(dateObject)){ return 29; } // Number
+	return days[month]; // Number
+}
+
+dojo.date.isLeapYear = function(/*Date*/dateObject){
+	//	summary:
+	//		Determines if the year of the dateObject is a leap year
+	//	description:
+	//		Leap years are years with an additional day YYYY-02-29, where the
+	//		year number is a multiple of four with the following exception: If
+	//		a year is a multiple of 100, then it is only a leap year if it is
+	//		also a multiple of 400. For example, 1900 was not a leap year, but
+	//		2000 is one.
+
+	var year = dateObject.getFullYear();
+	return !(year%400) || (!(year%4) && !!(year%100)); // Boolean
+}
+
+// FIXME: This is not localized
+dojo.date.getTimezoneName = function(/*Date*/dateObject){
+	//	summary:
+	//		Get the user's time zone as provided by the browser
+	// dateObject:
+	//		Needed because the timezone may vary with time (daylight savings)
+	//	description:
+	//		Try to get time zone info from toString or toLocaleString method of
+	//		the Date object -- UTC offset is not a time zone.  See
+	//		http://www.twinsun.com/tz/tz-link.htm Note: results may be
+	//		inconsistent across browsers.
+
+	var str = dateObject.toString(); // Start looking in toString
+	var tz = ''; // The result -- return empty string if nothing found
+	var match;
+
+	// First look for something in parentheses -- fast lookup, no regex
+	var pos = str.indexOf('(');
+	if(pos > -1){
+		tz = str.substring(++pos, str.indexOf(')'));
+	}else{
+		// If at first you don't succeed ...
+		// If IE knows about the TZ, it appears before the year
+		// Capital letters or slash before a 4-digit year 
+		// at the end of string
+		var pat = /([A-Z\/]+) \d{4}$/;
+		if((match = str.match(pat))){
+			tz = match[1];
+		}else{
+		// Some browsers (e.g. Safari) glue the TZ on the end
+		// of toLocaleString instead of putting it in toString
+			str = dateObject.toLocaleString();
+			// Capital letters or slash -- end of string, 
+			// after space
+			pat = / ([A-Z\/]+)$/;
+			if((match = str.match(pat))){
+				tz = match[1];
+			}
+		}
+	}
+
+	// Make sure it doesn't somehow end up return AM or PM
+	return (tz == 'AM' || tz == 'PM') ? '' : tz; // String
+}
+
+// Utility methods to do arithmetic calculations with Dates
+
+dojo.date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){
+	//	summary:
+	//		Compare two date objects by date, time, or both.
+	//	description:
+	//  	Returns 0 if equal, positive if a > b, else negative.
+	//	date1:
+	//		Date object
+	//	date2:
+	//		Date object.  If not specified, the current Date is used.
+	//	portion:
+	//		A string indicating the "date" or "time" portion of a Date object.
+	//		Compares both "date" and "time" by default.  One of the following:
+	//		"date", "time", "datetime"
+
+	// Extra step required in copy for IE - see #3112
+	date1 = new Date(+date1);
+	date2 = new Date(+(date2 || new Date()));
+
+	if(portion == "date"){
+		// Ignore times and compare dates.
+		date1.setHours(0, 0, 0, 0);
+		date2.setHours(0, 0, 0, 0);
+	}else if(portion == "time"){
+		// Ignore dates and compare times.
+		date1.setFullYear(0, 0, 0);
+		date2.setFullYear(0, 0, 0);
+	}
+	
+	if(date1 > date2){ return 1; } // int
+	if(date1 < date2){ return -1; } // int
+	return 0; // int
+};
+
+dojo.date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){
+	//	summary:
+	//		Add to a Date in intervals of different size, from milliseconds to years
+	//	date: Date
+	//		Date object to start with
+	//	interval:
+	//		A string representing the interval.  One of the following:
+	//			"year", "month", "day", "hour", "minute", "second",
+	//			"millisecond", "quarter", "week", "weekday"
+	//	amount:
+	//		How much to add to the date.
+
+	var sum = new Date(+date); // convert to Number before copying to accomodate IE (#3112)
+	var fixOvershoot = false;
+	var property = "Date";
+
+	switch(interval){
+		case "day":
+			break;
+		case "weekday":
+			//i18n FIXME: assumes Saturday/Sunday weekend, but this is not always true.  see dojo.cldr.supplemental
+
+			// Divide the increment time span into weekspans plus leftover days
+			// e.g., 8 days is one 5-day weekspan / and two leftover days
+			// Can't have zero leftover days, so numbers divisible by 5 get
+			// a days value of 5, and the remaining days make up the number of weeks
+			var days, weeks;
+			var mod = amount % 5;
+			if(!mod){
+				days = (amount > 0) ? 5 : -5;
+				weeks = (amount > 0) ? ((amount-5)/5) : ((amount+5)/5);
+			}else{
+				days = mod;
+				weeks = parseInt(amount/5);
+			}
+			// Get weekday value for orig date param
+			var strt = date.getDay();
+			// Orig date is Sat / positive incrementer
+			// Jump over Sun
+			var adj = 0;
+			if(strt == 6 && amount > 0){
+				adj = 1;
+			}else if(strt == 0 && amount < 0){
+			// Orig date is Sun / negative incrementer
+			// Jump back over Sat
+				adj = -1;
+			}
+			// Get weekday val for the new date
+			var trgt = strt + days;
+			// New date is on Sat or Sun
+			if(trgt == 0 || trgt == 6){
+				adj = (amount > 0) ? 2 : -2;
+			}
+			// Increment by number of weeks plus leftover days plus
+			// weekend adjustments
+			amount = (7 * weeks) + days + adj;
+			break;
+		case "year":
+			property = "FullYear";
+			// Keep increment/decrement from 2/29 out of March
+			fixOvershoot = true;
+			break;
+		case "week":
+			amount *= 7;
+			break;
+		case "quarter":
+			// Naive quarter is just three months
+			amount *= 3;
+			// fallthrough...
+		case "month":
+			// Reset to last day of month if you overshoot
+			fixOvershoot = true;
+			property = "Month";
+			break;
+//		case "hour":
+//		case "minute":
+//		case "second":
+//		case "millisecond":
+		default:
+			property = "UTC"+interval.charAt(0).toUpperCase() + interval.substring(1) + "s";
+	}
+
+	if(property){
+		sum["set"+property](sum["get"+property]()+amount);
+	}
+
+	if(fixOvershoot && (sum.getDate() < date.getDate())){
+		sum.setDate(0);
+	}
+
+	return sum; // Date
+};
+
+dojo.date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){
+	//	summary:
+	//		Get the difference in a specific unit of time (e.g., number of
+	//		months, weeks, days, etc.) between two dates, rounded to the
+	//		nearest integer.
+	//	date1:
+	//		Date object
+	//	date2:
+	//		Date object.  If not specified, the current Date is used.
+	//	interval:
+	//		A string representing the interval.  One of the following:
+	//			"year", "month", "day", "hour", "minute", "second",
+	//			"millisecond", "quarter", "week", "weekday"
+	//		Defaults to "day".
+
+	date2 = date2 || new Date();
+	interval = interval || "day";
+	var yearDiff = date2.getFullYear() - date1.getFullYear();
+	var delta = 1; // Integer return value
+
+	switch(interval){
+		case "quarter":
+			var m1 = date1.getMonth();
+			var m2 = date2.getMonth();
+			// Figure out which quarter the months are in
+			var q1 = Math.floor(m1/3) + 1;
+			var q2 = Math.floor(m2/3) + 1;
+			// Add quarters for any year difference between the dates
+			q2 += (yearDiff * 4);
+			delta = q2 - q1;
+			break;
+		case "weekday":
+			var days = Math.round(dojo.date.difference(date1, date2, "day"));
+			var weeks = parseInt(dojo.date.difference(date1, date2, "week"));
+			var mod = days % 7;
+
+			// Even number of weeks
+			if(mod == 0){
+				days = weeks*5;
+			}else{
+				// Weeks plus spare change (< 7 days)
+				var adj = 0;
+				var aDay = date1.getDay();
+				var bDay = date2.getDay();
+
+				weeks = parseInt(days/7);
+				mod = days % 7;
+				// Mark the date advanced by the number of
+				// round weeks (may be zero)
+				var dtMark = new Date(date1);
+				dtMark.setDate(dtMark.getDate()+(weeks*7));
+				var dayMark = dtMark.getDay();
+
+				// Spare change days -- 6 or less
+				if(days > 0){
+					switch(true){
+						// Range starts on Sat
+						case aDay == 6:
+							adj = -1;
+							break;
+						// Range starts on Sun
+						case aDay == 0:
+							adj = 0;
+							break;
+						// Range ends on Sat
+						case bDay == 6:
+							adj = -1;
+							break;
+						// Range ends on Sun
+						case bDay == 0:
+							adj = -2;
+							break;
+						// Range contains weekend
+						case (dayMark + mod) > 5:
+							adj = -2;
+					}
+				}else if(days < 0){
+					switch(true){
+						// Range starts on Sat
+						case aDay == 6:
+							adj = 0;
+							break;
+						// Range starts on Sun
+						case aDay == 0:
+							adj = 1;
+							break;
+						// Range ends on Sat
+						case bDay == 6:
+							adj = 2;
+							break;
+						// Range ends on Sun
+						case bDay == 0:
+							adj = 1;
+							break;
+						// Range contains weekend
+						case (dayMark + mod) < 0:
+							adj = 2;
+					}
+				}
+				days += adj;
+				days -= (weeks*2);
+			}
+			delta = days;
+			break;
+		case "year":
+			delta = yearDiff;
+			break;
+		case "month":
+			delta = (date2.getMonth() - date1.getMonth()) + (yearDiff * 12);
+			break;
+		case "week":
+			// Truncate instead of rounding
+			// Don't use Math.floor -- value may be negative
+			delta = parseInt(dojo.date.difference(date1, date2, "day")/7);
+			break;
+		case "day":
+			delta /= 24;
+			// fallthrough
+		case "hour":
+			delta /= 60;
+			// fallthrough
+		case "minute":
+			delta /= 60;
+			// fallthrough
+		case "second":
+			delta /= 1000;
+			// fallthrough
+		case "millisecond":
+			delta *= date2.getTime() - date1.getTime();
+	}
+
+	// Round for fractional values and DST leaps
+	return Math.round(delta); // Number (integer)
+};
+
+}
+
+if(!dojo._hasResource["dojox.date.php"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.date.php"] = true;
+dojo.provide("dojox.date.php");
+
+
+
+dojox.date.php.format = function(/*Date*/ date, /*String*/ format){
+	// summary: Get a formatted string for a given date object
+	var df = new dojox.date.php.DateFormat(format);
+	return df.format(date);	
+}
+
+dojox.date.php.DateFormat = function(/*String*/ format){
+	// summary: Format the internal date object
+	if(!this.regex){
+		var keys = [];
+		for(var key in this.constructor.prototype){
+			if(dojo.isString(key) && key.length == 1 && dojo.isFunction(this[key])){
+				keys.push(key);
+			}
+		}
+		this.constructor.prototype.regex = new RegExp("(?:(\\\\.)|([" + keys.join("") + "]))", "g");
+	}
+
+	var replacements = [];
+
+	this.tokens = dojox.string.tokenize(format, this.regex, function(escape, token, i){
+		if(token){
+			replacements.push([i, token]);
+			return token;
+		}
+		if(escape){
+			return escape.charAt(1);
+		}
+	});
+
+	this.replacements = replacements;
+}
+dojo.extend(dojox.date.php.DateFormat, {
+	weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+	weekdays_3: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+	months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+	months_3: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+	monthdays: [31,28,31,30,31,30,31,31,30,31,30,31],
+
+	format: function(/*Date*/ date){
+		this.date = date;
+		for(var i = 0, replacement; replacement = this.replacements[i]; i++){
+			this.tokens[replacement[0]] = this[replacement[1]]();
+		}
+		return this.tokens.join("");
+	},
+
+	// Day
+
+	d: function(){
+		// summary: Day of the month, 2 digits with leading zeros
+		var j = this.j();
+		return (j.length == 1) ? "0" + j : j;
+	},
+
+	D: function(){
+		// summary: A textual representation of a day, three letters
+		return this.weekdays_3[this.date.getDay()];
+	},
+
+	j: function(){
+		// summary: Day of the month without leading zeros
+		return this.date.getDate() + "";
+	},
+
+	l: function(){
+		// summary: A full textual representation of the day of the week
+		return this.weekdays[this.date.getDay()];
+	},
+	
+	N: function(){
+		// summary: ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)
+		var w = this.w();
+		return (!w) ? 7 : w;
+	},
+
+	S: function(){
+		// summary: English ordinal suffix for the day of the month, 2 characters
+		switch(this.date.getDate()){
+			case 11: case 12: case 13: return "th";
+			case 1: case 21: case 31: return "st";
+			case 2: case 22: return "nd";
+			case 3: case 23: return "rd";
+			default: return "th";
+		}
+	},
+
+	w: function(){
+		// summary: Numeric representation of the day of the week
+		return this.date.getDay() + "";
+	},
+
+	z: function(){
+		// summary: The day of the year (starting from 0)
+		var millis = this.date.getTime() - new Date(this.date.getFullYear(), 0, 1).getTime();
+		return Math.floor(millis/86400000) + "";
+	},
+
+	// Week
+
+	W: function(){
+		// summary: ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)
+		var week;
+		var jan1_w = new Date(this.date.getFullYear(), 0, 1).getDay() + 1;
+		var w = this.date.getDay() + 1;
+		var z = parseInt(this.z());
+
+		if(z <= (8 - jan1_w) && jan1_w > 4){
+			var last_year = new Date(this.date.getFullYear() - 1, this.date.getMonth(), this.date.getDate());
+			if(jan1_w == 5 || (jan1_w == 6 && dojo.date.isLeapYear(last_year))){
+				week = 53;
+			}else{
+				week = 52;
+			}
+		}else{
+			var i;
+			if(Boolean(this.L())){
+				i = 366;
+			}else{
+				i = 365;
+			}
+			if((i - z) < (4 - w)){
+				week = 1;
+			}else{
+				var j = z + (7 - w) + (jan1_w - 1);
+				week = Math.ceil(j / 7);
+				if(jan1_w > 4){
+					--week;
+				}
+			}
+		}
+		
+		return week;
+	},
+
+	// Month
+
+	F: function(){
+		// summary: A full textual representation of a month, such as January or March
+		return this.months[this.date.getMonth()];
+	},
+
+	m: function(){
+		// summary: Numeric representation of a month, with leading zeros
+		var n = this.n();
+		return (n.length == 1) ? "0" + n : n;
+	},
+
+	M: function(){
+		// summary: A short textual representation of a month, three letters
+		return this.months_3[this.date.getMonth()];
+	},
+
+	n: function(){
+		// summary: Numeric representation of a month, without leading zeros
+		return this.date.getMonth() + 1 + "";
+	},
+
+	t: function(){
+		// summary: Number of days in the given month
+		return (Boolean(this.L()) && this.date.getMonth() == 1) ? 29 : this.monthdays[this.getMonth()];
+	},
+
+	// Year
+
+	L: function(){
+		// summary: Whether it's a leap year
+		return (dojo.date.isLeapYear(this.date)) ? "1" : "0";
+	},
+
+	o: function(){
+		// summary:
+		//		ISO-8601 year number. This has the same value as Y, except that if
+		//		the ISO week number (W) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0)
+		// TODO: Figure out what this means
+	},
+
+	Y: function(){
+		// summary: A full numeric representation of a year, 4 digits
+		return this.date.getFullYear() + "";
+	},
+
+	y: function(){
+		// summary: A two digit representation of a year
+		return this.Y().slice(-2);
+	},
+
+	// Time
+
+	a: function(){
+		// summary: Lowercase Ante meridiem and Post meridiem
+		return this.date.getHours() >= 12 ? "pm" : "am";
+	},
+
+	b: function(){
+		// summary: Uppercase Ante meridiem and Post meridiem
+		return this.a().toUpperCase();
+	},
+
+	B: function(){
+		// summary:
+		//	Swatch Internet time
+		//	A day is 1,000 beats. All time is measured from GMT + 1
+		var off = this.date.getTimezoneOffset() + 60;
+		var secs = (this.date.getHours() * 3600) + (this.date.getMinutes() * 60) + this.getSeconds() + (off * 60);
+		var beat = Math.abs(Math.floor(secs / 86.4) % 1000) + "";
+		while(beat.length <  2) beat = "0" + beat;
+		return beat;
+	},
+
+	g: function(){
+		// summary: 12-hour format of an hour without leading zeros
+		return (this.date.getHours() > 12) ? this.date.getHours() - 12 + "" : this.date.getHours() + "";
+	},
+
+	G: function(){
+		// summary: 24-hour format of an hour without leading zeros
+		return this.date.getHours() + "";
+	},
+
+	h: function(){
+		// summary: 12-hour format of an hour with leading zeros
+		var g = this.g();
+		return (g.length == 1) ? "0" + g : g;
+	},
+
+	H: function(){
+		// summary: 24-hour format of an hour with leading zeros
+		var G = this.G();
+		return (G.length == 1) ? "0" + G : G;
+	},
+
+	i: function(){
+		// summary: Minutes with leading zeros
+		var mins = this.date.getMinutes() + "";
+		return (mins.length == 1) ? "0" + mins : mins;
+	},
+
+	s: function(){
+		// summary: Seconds, with leading zeros
+		var secs = this.date.getSeconds() + "";
+		return (secs.length == 1) ? "0" + secs : secs;
+	},
+
+	// Timezone
+
+	e: function(){
+		// summary: Timezone identifier (added in PHP 5.1.0)
+		return dojo.date.getTimezoneName(this.date);
+	},
+
+	I: function(){
+		// summary: Whether or not the date is in daylight saving time
+		// TODO: Can dojo.date do this?
+	},
+
+	O: function(){
+		// summary: Difference to Greenwich time (GMT) in hours
+		var off = Math.abs(this.date.getTimezoneOffset());
+		var hours = Math.floor(off / 60) + "";
+		var mins = (off % 60) + "";
+		if(hours.length == 1) hours = "0" + hours;
+		if(mins.length == 1) hours = "0" + mins;
+		return ((this.date.getTimezoneOffset() < 0) ? "+" : "-") + hours + mins;
+	},
+
+	P: function(){
+		// summary: Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3)
+		var O = this.O();
+		return O.substring(0, 2) + ":" + O.substring(2, 4);
+	},
+
+	T: function(){
+		// summary: Timezone abbreviation
+
+		// Guess...
+		return this.e().substring(0, 3);
+	},
+
+	Z: function(){
+		// summary:
+		//		Timezone offset in seconds. The offset for timezones west of UTC is always negative,
+		//		and for those east of UTC is always positive.
+		return this.date.getTimezoneOffset() * -60;
+	},
+
+	// Full Date/Time
+
+	c: function(){
+		// summary: ISO 8601 date (added in PHP 5)
+		return this.Y() + "-" + this.m() + "-" + this.d() + "T" + this.h() + ":" + this.i() + ":" + this.s() + this.P();
+	},
+
+	r: function(){
+		// summary: RFC 2822 formatted date
+		return this.D() + ", " + this.d() + " " + this.M() + " " + this.Y() + " " + this.H() + ":" + this.i() + ":" + this.s() + " " + this.O();
+	},
+
+	U: function(){
+		// summary: Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)
+		return Math.floor(this.date.getTime() / 1000);
+	}
+
+});
+
+}
+
+if(!dojo._hasResource["dojox.dtl.utils.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.utils.date"] = true;
+dojo.provide("dojox.dtl.utils.date");
+
+
+
+dojox.dtl.utils.date.DateFormat = function(/*String*/ format){
+	dojox.date.php.DateFormat.call(this, format);
+}
+dojo.extend(dojox.dtl.utils.date.DateFormat, dojox.date.php.DateFormat.prototype, {
+	f: function(){
+		// summary:
+		//		Time, in 12-hour hours and minutes, with minutes left off if they're zero.
+		// description: 
+		//		Examples: '1', '1:30', '2:05', '2'
+		//		Proprietary extension.
+		return (!this.date.getMinutes()) ? this.g() : this.g() + ":" + this.i();
+	},
+	N: function(){
+		// summary: Month abbreviation in Associated Press style. Proprietary extension.
+		return dojox.dtl.utils.date._months_ap[this.date.getMonth()];
+	},
+	P: function(){
+		// summary:
+		//		Time, in 12-hour hours, minutes and 'a.m.'/'p.m.', with minutes left off
+		//		if they're zero and the strings 'midnight' and 'noon' if appropriate.
+		// description:
+		//		Examples: '1 a.m.', '1:30 p.m.', 'midnight', 'noon', '12:30 p.m.'
+		//		Proprietary extension.
+		if(!this.date.getMinutes() && !this.date.getHours()){
+			return 'midnight';
+		}
+		if(!this.date.getMinutes() && this.date.getHours() == 12){
+			return 'noon';
+		}
+		return this.f() + " " + this.a();
+	}
+});
+
+dojo.mixin(dojox.dtl.utils.date, {
+	format: function(/*Date*/ date, /*String*/ format){
+		var df = new dojox.dtl.utils.date.DateFormat(format);
+		return df.format(date);
+	},
+	timesince: function(d, now){
+		// summary:
+		//		Takes two datetime objects and returns the time between then and now
+		//		as a nicely formatted string, e.g "10 minutes"
+		// description:
+		//		Adapted from http://blog.natbat.co.uk/archive/2003/Jun/14/time_since
+		if(!(d instanceof Date)){
+			d = new Date(d.year, d.month, d.day);
+		}
+		if(!now){
+			now = new Date();
+		}
+
+		var delta = Math.abs(now.getTime() - d.getTime());
+		for(var i = 0, chunk; chunk = dojox.dtl.utils.date._chunks[i]; i++){
+			var count = Math.floor(delta / chunk[0]);
+			if(count) break;
+		}
+		return count + " " + chunk[1](count);
+	},
+	_chunks: [
+		[60 * 60 * 24 * 365 * 1000, function(n){ return (n == 1) ? 'year' : 'years'; }],
+		[60 * 60 * 24 * 30 * 1000, function(n){ return (n == 1) ? 'month' : 'months'; }],
+		[60 * 60 * 24 * 7 * 1000, function(n){ return (n == 1) ? 'week' : 'weeks'; }],
+		[60 * 60 * 24 * 1000, function(n){ return (n == 1) ? 'day' : 'days'; }],
+		[60 * 60 * 1000, function(n){ return (n == 1) ? 'hour' : 'hours'; }],
+		[60 * 1000, function(n){ return (n == 1) ? 'minute' : 'minutes'; }]
+	],
+	_months_ap: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."]
+});
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.date"] = true;
+dojo.provide("dojox.dtl.tag.date");
+
+
+
+
+dojox.dtl.tag.date.NowNode = function(format, node){
+	this._format = format;
+	this.format = new dojox.dtl.utils.date.DateFormat(format);
+	this.contents = node;
+}
+dojo.extend(dojox.dtl.tag.date.NowNode, {
+	render: function(context, buffer){
+		this.contents.set(this.format.format(new Date()));
+		return this.contents.render(context, buffer);
+	},
+	unrender: function(context, buffer){
+		return this.contents.unrender(context, buffer);
+	},
+	clone: function(buffer){
+		return new this.constructor(this._format, this.contents.clone(buffer));
+	}
+});
+
+dojox.dtl.tag.date.now = function(parser, token){
+	// Split by either :" or :'
+	var parts = token.split_contents();
+	if(parts.length != 2){
+		throw new Error("'now' statement takes one argument");
+	}
+	return new dojox.dtl.tag.date.NowNode(parts[1].slice(1, -1), parser.create_text_node());
+}
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.loader"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.loader"] = true;
+dojo.provide("dojox.dtl.tag.loader");
+
+
+
+(function(){
+	var dd = dojox.dtl;
+	var ddtl = dd.tag.loader;
+
+	ddtl.BlockNode = dojo.extend(function(name, nodelist){
+		this.name = name;
+		this.nodelist = nodelist; // Can be overridden
+	},
+	{
+		"super": function(){
+			if(this.parent){
+				var html = this.parent.nodelist.dummyRender(this.context, null, true);
+				if(typeof html == "string"){
+					html = new String(html);
+				}
+				html.safe = true;
+				return html;
+			}
+			return '';
+		},
+		render: function(context, buffer){
+			var name = this.name;
+			var nodelist = this.nodelist;
+			var parent;
+			if(buffer.blocks){
+				var block = buffer.blocks[name];
+				if(block){
+					parent = block.parent;
+					nodelist = block.nodelist;
+					block.used = true;
+				}
+			}
+
+			this.rendered = nodelist;
+
+			context = context.push();
+			this.context = context;
+			this.parent = null;
+			if(nodelist != this.nodelist){
+				this.parent = this;
+			}
+			context.block = this;
+
+			if(buffer.getParent){
+				var bufferParent = buffer.getParent();
+				var setParent = dojo.connect(buffer, "onSetParent", function(node, up, root){
+					if(up && root){
+						buffer.setParent(bufferParent);
+					}
+				});
+			}
+			buffer = nodelist.render(context, buffer, this);
+			setParent && dojo.disconnect(setParent);
+			context = context.pop();
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			return this.rendered.unrender(context, buffer);
+		},
+		clone: function(buffer){
+			return new this.constructor(this.name, this.nodelist.clone(buffer));
+		},
+		toString: function(){ return "dojox.dtl.tag.loader.BlockNode"; }
+	});
+
+	ddtl.ExtendsNode = dojo.extend(function(getTemplate, nodelist, shared, parent, key){
+		this.getTemplate = getTemplate;
+		this.nodelist = nodelist;
+		this.shared = shared;
+		this.parent = parent;
+		this.key = key;
+	},
+	{
+		parents: {},
+		getParent: function(context){
+			var parent = this.parent;
+			if(!parent){
+				var string;
+				parent = this.parent = context.get(this.key, false);
+				if(!parent){
+					throw new Error("extends tag used a variable that did not resolve");
+				}
+				if(typeof parent == "object"){
+					var url = parent.url || parent.templatePath;
+					if(parent.shared){
+						this.shared = true;
+					}
+					if(url){
+						parent = this.parent = url.toString();
+					}else if(parent.templateString){
+						// Allow the builder's string interning to work
+						string = parent.templateString;
+						parent = this.parent = " ";
+					}else{
+						parent = this.parent = this.parent.toString();
+					}
+				}
+				if(parent && parent.indexOf("shared:") === 0){
+					this.shared = true;
+					parent = this.parent = parent.substring(7, parent.length);
+				}
+			}
+			if(!parent){
+				throw new Error("Invalid template name in 'extends' tag.");
+			}
+			if(parent.render){
+				return parent;
+			}
+			if(this.parents[parent]){
+				return this.parents[parent];
+			}
+			this.parent = this.getTemplate(string || dojox.dtl.text.getTemplateString(parent));
+			if(this.shared){
+				this.parents[parent] = this.parent;
+			}
+			return this.parent;
+		},
+		render: function(context, buffer){
+			var parent = this.getParent(context);
+
+			parent.blocks = parent.blocks || {};
+			buffer.blocks = buffer.blocks || {};
+
+			for(var i = 0, node; node = this.nodelist.contents[i]; i++){
+				if(node instanceof dojox.dtl.tag.loader.BlockNode){
+					var old = parent.blocks[node.name];
+					if(old && old.nodelist != node.nodelist){
+						// In a shared template, the individual blocks might change
+						buffer = old.nodelist.unrender(context, buffer);
+					}
+					parent.blocks[node.name] = buffer.blocks[node.name] = {
+						shared: this.shared,
+						nodelist: node.nodelist,
+						used: false
+					}
+				}
+			}
+
+			this.rendered = parent;
+			return parent.nodelist.render(context, buffer, this);
+		},
+		unrender: function(context, buffer){
+			return this.rendered.unrender(context, buffer, this);
+		},
+		toString: function(){ return "dojox.dtl.block.ExtendsNode"; }
+	});
+
+	ddtl.IncludeNode = dojo.extend(function(path, constant, getTemplate, text, parsed){
+		this._path = path;
+		this.constant = constant;
+		this.path = (constant) ? path : new dd._Filter(path);
+		this.getTemplate = getTemplate;
+		this.text = text;
+		this.parsed = (arguments.length == 5) ? parsed : true;
+	},
+	{
+		_cache: [{}, {}],
+		render: function(context, buffer){
+			var location = ((this.constant) ? this.path : this.path.resolve(context)).toString();
+			var parsed = Number(this.parsed);
+			var dirty = false;
+			if(location != this.last){
+				dirty = true;
+				if(this.last){
+					buffer = this.unrender(context, buffer);
+				}
+				this.last = location;
+			}
+
+			var cache = this._cache[parsed];
+
+			if(parsed){
+				if(!cache[location]){
+					cache[location] = dd.text._resolveTemplateArg(location, true);
+				}
+				if(dirty){
+					var template = this.getTemplate(cache[location]);
+					this.rendered = template.nodelist;
+				}
+				return this.rendered.render(context, buffer, this);
+			}else{
+				if(this.text instanceof dd._TextNode){
+					if(dirty){
+						this.rendered = this.text;
+						this.rendered.set(dd.text._resolveTemplateArg(location, true));
+					}
+					return this.rendered.render(context, buffer);
+				}else{
+					if(!cache[location]){
+						var nodelist = [];
+						var div = document.createElement("div");
+						div.innerHTML = dd.text._resolveTemplateArg(location, true);
+						var children = div.childNodes;
+						while(children.length){
+							var removed = div.removeChild(children[0]);
+							nodelist.push(removed);
+						}
+						cache[location] = nodelist;
+					}
+					if(dirty){
+						this.nodelist = [];
+						var exists = true;
+						for(var i = 0, child; child = cache[location][i]; i++){
+							this.nodelist.push(child.cloneNode(true));
+						}
+					}
+					for(var i = 0, node; node = this.nodelist[i]; i++){
+						buffer = buffer.concat(node);
+					}
+				}
+			}
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			if(this.rendered){
+				buffer = this.rendered.unrender(context, buffer);
+			}
+			if(this.nodelist){
+				for(var i = 0, node; node = this.nodelist[i]; i++){
+					buffer = buffer.remove(node);
+				}
+			}
+			return buffer;
+		},
+		clone: function(buffer){
+			return new this.constructor(this._path, this.constant, this.getTemplate, this.text.clone(buffer), this.parsed);
+		}
+	});
+
+	dojo.mixin(ddtl, {
+		block: function(parser, token){
+			var parts = token.contents.split();
+			var name = parts[1];
+
+			parser._blocks = parser._blocks || {};
+			parser._blocks[name] = parser._blocks[name] || [];
+			parser._blocks[name].push(name);
+
+			var nodelist = parser.parse(["endblock", "endblock " + name]).rtrim();
+			parser.next_token();
+			return new dojox.dtl.tag.loader.BlockNode(name, nodelist);
+		},
+		extends_: function(parser, token){
+			var parts = token.contents.split();
+			var shared = false;
+			var parent = null;
+			var key = null;
+			if(parts[1].charAt(0) == '"' || parts[1].charAt(0) == "'"){
+				parent = parts[1].substring(1, parts[1].length - 1);
+			}else{
+				key = parts[1];
+			}
+			if(parent && parent.indexOf("shared:") == 0){
+				shared = true;
+				parent = parent.substring(7, parent.length);
+			}
+			var nodelist = parser.parse();
+			return new dojox.dtl.tag.loader.ExtendsNode(parser.getTemplate, nodelist, shared, parent, key);
+		},
+		include: function(parser, token){
+			var parts = token.contents.split();
+			if(parts.length != 2){
+				throw new Error(parts[0] + " tag takes one argument: the name of the template to be included");
+			}
+			var path = parts[1];
+			var constant = false;
+			if((path.charAt(0) == '"' || path.slice(-1) == "'") && path.charAt(0) == path.slice(-1)){
+				path = path.slice(1, -1);
+				constant = true;
+			}
+			return new ddtl.IncludeNode(path, constant, parser.getTemplate, parser.create_text_node());
+		},
+		ssi: function(parser, token){
+			// We're going to treat things a little differently here.
+			// First of all, this tag is *not* portable, so I'm not
+			// concerned about it being a "drop in" replacement.
+
+			// Instead, we'll just replicate the include tag, but with that
+			// optional "parsed" parameter.
+			var parts = token.contents.split();
+			var parsed = false;
+			if(parts.length == 3){
+				parsed = (parts.pop() == "parsed");
+				if(!parsed){
+					throw new Error("Second (optional) argument to ssi tag must be 'parsed'");
+				}
+			}
+			var node = ddtl.include(parser, new dd.Token(token.token_type, parts.join(" ")));
+			node.parsed = parsed;
+			return node;
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl.tag.misc"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.tag.misc"] = true;
+dojo.provide("dojox.dtl.tag.misc");
+
+
+(function(){
+	var dd = dojox.dtl;
+	var ddtm = dd.tag.misc;
+
+	ddtm.DebugNode = dojo.extend(function(text){
+		this.text = text;
+	},
+	{
+		render: function(context, buffer){
+			var keys = context.getKeys();
+			var debug = [];
+			var only = {};
+			for(var i = 0, key; key = keys[i]; i++){
+				only[key] = context[key];
+				debug += "[" + key + ": " + typeof context[key] + "]\n";
+			}
+			console.debug(only);
+			return this.text.set(debug).render(context, buffer, this);
+		},
+		unrender: function(context, buffer){
+			return buffer;
+		},
+		clone: function(buffer){
+			return new this.constructor(this.text.clone(buffer));
+		},
+		toString: function(){ return "ddtm.DebugNode"; }
+	});
+
+	ddtm.FilterNode = dojo.extend(function(varnode, nodelist){
+		this._varnode = varnode;
+		this._nodelist = nodelist;
+	},
+	{
+		render: function(context, buffer){
+			// Doing this in HTML requires a different buffer with a fake root node
+			var output = this._nodelist.render(context, new dojox.string.Builder());
+			context = context.update({ "var": output.toString() });
+			var filtered = this._varnode.render(context, buffer);
+			context = context.pop();
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			return buffer;
+		},
+		clone: function(buffer){
+			return new this.constructor(this._expression, this._nodelist.clone(buffer));
+		}
+	});
+
+	ddtm.FirstOfNode = dojo.extend(function(vars, text){
+		this._vars = vars;
+		this.vars = dojo.map(vars, function(item){
+			return new dojox.dtl._Filter(item);
+		});
+		this.contents = text;
+	},
+	{
+		render: function(context, buffer){
+			for(var i = 0, item; item = this.vars[i]; i++){
+				var resolved = item.resolve(context);
+				if(typeof resolved != "undefined"){
+					if(resolved === null){
+						resolved = "null";
+					}
+					this.contents.set(resolved);
+					return this.contents.render(context, buffer);
+				}
+			}
+			return this.contents.unrender(context, buffer);
+		},
+		unrender: function(context, buffer){
+			return this.contents.unrender(context, buffer);
+		},
+		clone: function(buffer){
+			return new this.constructor(this._vars, this.contents.clone(buffer));
+		}
+	});
+
+	ddtm.SpacelessNode = dojo.extend(function(nodelist, text){
+		this.nodelist = nodelist;
+		this.contents = text;
+	},
+	{
+		render: function(context, buffer){
+			if(buffer.getParent){
+				// Unfortunately, we have to branch here
+				var watch = [
+					dojo.connect(buffer, "onAddNodeComplete", this, "_watch"),
+					dojo.connect(buffer, "onSetParent", this, "_watchParent")
+				];
+				buffer = this.nodelist.render(context, buffer);
+				dojo.disconnect(watch[0]);
+				dojo.disconnect(watch[1]);
+			}else{
+				var value = this.nodelist.dummyRender(context);
+				this.contents.set(value.replace(/>\s+</g, '><'));
+				buffer = this.contents.render(context, buffer);
+			}
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			return this.nodelist.unrender(context, buffer);
+		},
+		clone: function(buffer){
+			return new this.constructor(this.nodelist.clone(buffer), this.contents.clone(buffer));
+		},
+		_isEmpty: function(node){
+			return (node.nodeType == 3 && !node.data.match(/[^\s\n]/));
+		},
+		_watch: function(node){
+			if(this._isEmpty(node)){
+				var remove = false;
+				if(node.parentNode.firstChild == node){
+					node.parentNode.removeChild(node);
+				}
+			}else{
+				var children = node.parentNode.childNodes;
+				if(node.nodeType == 1 && children.length > 2){
+					for(var i = 2, child; child = children[i]; i++){
+						if(children[i - 2].nodeType == 1 && this._isEmpty(children[i - 1])){
+							node.parentNode.removeChild(children[i - 1]);
+							return;
+						}
+					}
+				}
+			}
+		},
+		_watchParent: function(node){
+			var children = node.childNodes;
+			if(children.length){
+				while(node.childNodes.length){
+					var last = node.childNodes[node.childNodes.length - 1];
+					if(!this._isEmpty(last)){
+						return;
+					}
+					node.removeChild(last);
+				}
+			}
+		}
+	});
+
+	ddtm.TemplateTagNode = dojo.extend(function(tag, text){
+		this.tag = tag;
+		this.contents = text;
+	},
+	{
+		mapping: {
+			openblock: "{%",
+			closeblock: "%}",
+			openvariable: "{{",
+			closevariable: "}}",
+			openbrace: "{",
+			closebrace: "}",
+			opencomment: "{#",
+			closecomment: "#}"
+		},
+		render: function(context, buffer){
+			this.contents.set(this.mapping[this.tag]);
+			return this.contents.render(context, buffer);
+		},
+		unrender: function(context, buffer){
+			return this.contents.unrender(context, buffer);
+		},
+		clone: function(buffer){
+			return new this.constructor(this.tag, this.contents.clone(buffer));
+		}
+	});
+
+	ddtm.WidthRatioNode = dojo.extend(function(current, max, width, text){
+		this.current = new dd._Filter(current);
+		this.max = new dd._Filter(max);
+		this.width = width;
+		this.contents = text;
+	},
+	{
+		render: function(context, buffer){
+			var current = +this.current.resolve(context);
+			var max = +this.max.resolve(context);
+			if(typeof current != "number" || typeof max != "number" || !max){
+				this.contents.set("");
+			}else{
+				this.contents.set("" + Math.round((current / max) * this.width));
+			}
+			return this.contents.render(context, buffer);
+		},
+		unrender: function(context, buffer){
+			return this.contents.unrender(context, buffer);
+		},
+		clone: function(buffer){
+			return new this.constructor(this.current.getExpression(), this.max.getExpression(), this.width, this.contents.clone(buffer));
+		}
+	});
+
+	ddtm.WithNode = dojo.extend(function(target, alias, nodelist){
+		this.target = new dd._Filter(target);
+		this.alias = alias;
+		this.nodelist = nodelist;
+	},
+	{
+		render: function(context, buffer){
+			var target = this.target.resolve(context);
+			context = context.push();
+			context[this.alias] = target;
+			buffer = this.nodelist.render(context, buffer);
+			context = context.pop();
+			return buffer;
+		},
+		unrender: function(context, buffer){
+			return buffer;
+		},
+		clone: function(buffer){
+			return new this.constructor(this.target.getExpression(), this.alias, this.nodelist.clone(buffer));
+		}
+	});
+
+	dojo.mixin(ddtm, {
+		comment: function(parser, token){
+			// summary: Ignore everything between {% comment %} and {% endcomment %}
+			parser.skip_past("endcomment");
+			return dd._noOpNode;
+		},
+		debug: function(parser, token){
+			// summary: Output the current context, maybe add more stuff later.
+			return new ddtm.DebugNode(parser.create_text_node());
+		},
+		filter: function(parser, token){
+			// summary: Filter the contents of the blog through variable filters.
+			var rest = token.contents.split(null, 1)[1];
+			var varnode = parser.create_variable_node("var|" + rest);
+			var nodelist = parser.parse(["endfilter"]);
+			parser.next_token();
+			return new ddtm.FilterNode(varnode, nodelist);
+		},
+		firstof: function(parser, token){
+			var parts = token.split_contents().slice(1);
+			if(!parts.length){
+				throw new Error("'firstof' statement requires at least one argument");
+			}
+			return new ddtm.FirstOfNode(parts, parser.create_text_node());
+		},
+		spaceless: function(parser, token){
+			var nodelist = parser.parse(["endspaceless"]);
+			parser.delete_first_token();
+			return new ddtm.SpacelessNode(nodelist, parser.create_text_node());
+		},
+		templatetag: function(parser, token){
+			var parts = token.contents.split();
+			if(parts.length != 2){
+				throw new Error("'templatetag' statement takes one argument");
+			}
+			var tag = parts[1];
+			var mapping = ddtm.TemplateTagNode.prototype.mapping;
+			if(!mapping[tag]){
+				var keys = [];
+				for(var key in mapping){
+					keys.push(key);
+				}
+				throw new Error("Invalid templatetag argument: '" + tag + "'. Must be one of: " + keys.join(", "));
+			}
+			return new ddtm.TemplateTagNode(tag, parser.create_text_node());
+		},
+		widthratio: function(parser, token){
+			var parts = token.contents.split();
+			if(parts.length != 4){
+				throw new Error("widthratio takes three arguments");
+			}
+			var width = +parts[3];
+			if(typeof width != "number"){
+				throw new Error("widthratio final argument must be an integer");
+			}
+			return new ddtm.WidthRatioNode(parts[1], parts[2], width, parser.create_text_node());
+		},
+		with_: function(parser, token){
+			var parts = token.split_contents();
+			if(parts.length != 4 || parts[2] != "as"){
+				throw new Error("do_width expected format as 'with value as name'");
+			}
+			var nodelist = parser.parse(["endwith"]);
+			parser.next_token();
+			return new ddtm.WithNode(parts[1], parts[3], nodelist);
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.dtl.ext-dojo.NodeList"] = true;
+dojo.provide("dojox.dtl.ext-dojo.NodeList");
+
+
+dojo.extend(dojo.NodeList, {
+	dtl: function(template, context){
+		// template: dojox.dtl.__StringArgs|String
+		//		The template string or location
+		// context: dojox.dtl.__ObjectArgs|Object
+		//		The context object or location
+		var d = dojox.dtl;
+
+		var self = this;
+		var render = function(template, context){
+			var content = template.render(new d._Context(context));
+			self.forEach(function(node){
+				node.innerHTML = content;
+			});
+		}
+
+		d.text._resolveTemplateArg(template).addCallback(function(templateString){
+			template = new d.Template(templateString);
+			d.text._resolveContextArg(context).addCallback(function(context){
+				render(template, context);
+			});
+		});
+
+		return this;
+	}
+});
+
+}
+
Index: trunk/web/dojo/dojox/image/Gallery.js
===================================================================
--- trunk/web/dojo/dojox/image/Gallery.js	(revision 0)
+++ trunk/web/dojo/dojox/image/Gallery.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.Gallery"]){
+dojo._hasResource["dojox.image.Gallery"]=true;
+dojo.provide("dojox.image.Gallery");
+dojo.experimental("dojox.image.Gallery");
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.image.ThumbnailPicker");
+dojo.require("dojox.image.SlideShow");
+dojo.declare("dojox.image.Gallery",[dijit._Widget,dijit._Templated],{imageHeight:375,imageWidth:500,pageSize:dojox.image.SlideShow.prototype.pageSize,autoLoad:true,linkAttr:"link",imageThumbAttr:"imageUrlThumb",imageLargeAttr:"imageUrl",titleAttr:"title",slideshowInterval:3,templateString:dojo.cache("dojox.image","resources/Gallery.html","<div dojoAttachPoint=\"outerNode\" class=\"imageGalleryWrapper\">\n\t<div dojoAttachPoint=\"thumbPickerNode\"></div>\n\t<div dojoAttachPoint=\"slideShowNode\"></div>\n</div>\n"),postCreate:function(){
+this.widgetid=this.id;
+this.inherited(arguments);
+this.thumbPicker=new dojox.image.ThumbnailPicker({linkAttr:this.linkAttr,imageLargeAttr:this.imageLargeAttr,imageThumbAttr:this.imageThumbAttr,titleAttr:this.titleAttr,useLoadNotifier:true,size:this.imageWidth},this.thumbPickerNode);
+this.slideShow=new dojox.image.SlideShow({imageHeight:this.imageHeight,imageWidth:this.imageWidth,autoLoad:this.autoLoad,linkAttr:this.linkAttr,imageLargeAttr:this.imageLargeAttr,titleAttr:this.titleAttr,slideshowInterval:this.slideshowInterval,pageSize:this.pageSize},this.slideShowNode);
+var _1=this;
+dojo.subscribe(this.slideShow.getShowTopicName(),function(_2){
+_1.thumbPicker._showThumbs(_2.index);
+});
+dojo.subscribe(this.thumbPicker.getClickTopicName(),function(_3){
+_1.slideShow.showImage(_3.index);
+});
+dojo.subscribe(this.thumbPicker.getShowTopicName(),function(_4){
+_1.slideShow.moveImageLoadingPointer(_4.index);
+});
+dojo.subscribe(this.slideShow.getLoadTopicName(),function(_5){
+_1.thumbPicker.markImageLoaded(_5);
+});
+this._centerChildren();
+},setDataStore:function(_6,_7,_8){
+this.thumbPicker.setDataStore(_6,_7,_8);
+this.slideShow.setDataStore(_6,_7,_8);
+},reset:function(){
+this.slideShow.reset();
+this.thumbPicker.reset();
+},showNextImage:function(_9){
+this.slideShow.showNextImage();
+},toggleSlideshow:function(){
+dojo.deprecated("dojox.widget.Gallery.toggleSlideshow is deprecated.  Use toggleSlideShow instead.","","2.0");
+this.toggleSlideShow();
+},toggleSlideShow:function(){
+this.slideShow.toggleSlideShow();
+},showImage:function(_a,_b){
+this.slideShow.showImage(_a,_b);
+},resize:function(_c){
+this.thumbPicker.resize(_c);
+},_centerChildren:function(){
+var _d=dojo.marginBox(this.thumbPicker.outerNode);
+var _e=dojo.marginBox(this.slideShow.outerNode);
+var _f=(_d.w-_e.w)/2;
+if(_f>0){
+dojo.style(this.slideShow.outerNode,"marginLeft",_f+"px");
+}else{
+if(_f<0){
+dojo.style(this.thumbPicker.outerNode,"marginLeft",(_f*-1)+"px");
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/image/MagnifierLite.js
===================================================================
--- trunk/web/dojo/dojox/image/MagnifierLite.js	(revision 0)
+++ trunk/web/dojo/dojox/image/MagnifierLite.js	(revision 9)
@@ -0,0 +1,46 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.MagnifierLite"]){
+dojo._hasResource["dojox.image.MagnifierLite"]=true;
+dojo.provide("dojox.image.MagnifierLite");
+dojo.experimental("dojox.image.MagnifierLite");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.image.MagnifierLite",dijit._Widget,{glassSize:125,scale:6,postCreate:function(){
+this.inherited(arguments);
+this._adjustScale();
+this._createGlass();
+this.connect(this.domNode,"onmouseenter","_showGlass");
+this.connect(this.glassNode,"onmousemove","_placeGlass");
+this.connect(this.img,"onmouseout","_hideGlass");
+this.connect(window,"onresize","_adjustScale");
+},_createGlass:function(){
+var _1=this.glassNode=dojo.create("div",{style:{height:this.glassSize+"px",width:this.glassSize+"px"},className:"glassNode"},dojo.body());
+this.surfaceNode=_1.appendChild(dojo.create("div"));
+this.img=dojo.place(dojo.clone(this.domNode),_1);
+dojo.style(this.img,{position:"relative",top:0,left:0,width:this._zoomSize.w+"px",height:this._zoomSize.h+"px"});
+},_adjustScale:function(){
+this.offset=dojo.coords(this.domNode,true);
+this._imageSize={w:this.offset.w,h:this.offset.h};
+this._zoomSize={w:this._imageSize.w*this.scale,h:this._imageSize.h*this.scale};
+},_showGlass:function(e){
+this._placeGlass(e);
+dojo.style(this.glassNode,{visibility:"visible",display:""});
+},_hideGlass:function(e){
+dojo.style(this.glassNode,{visibility:"hidden",display:"none"});
+},_placeGlass:function(e){
+this._setImage(e);
+var _2=Math.floor(this.glassSize/2);
+dojo.style(this.glassNode,{top:Math.floor(e.pageY-_2)+"px",left:Math.floor(e.pageX-_2)+"px"});
+},_setImage:function(e){
+var _3=(e.pageX-this.offset.l)/this.offset.w,_4=(e.pageY-this.offset.t)/this.offset.h,x=(this._zoomSize.w*_3*-1)+(this.glassSize*_3),y=(this._zoomSize.h*_4*-1)+(this.glassSize*_4);
+dojo.style(this.img,{top:y+"px",left:x+"px"});
+},destroy:function(_5){
+dojo.destroy(this.glassNode);
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/image/resources/Gallery.html
===================================================================
--- trunk/web/dojo/dojox/image/resources/Gallery.html	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/Gallery.html	(revision 9)
@@ -0,0 +1,4 @@
+<div dojoAttachPoint="outerNode" class="imageGalleryWrapper">
+	<div dojoAttachPoint="thumbPickerNode"></div>
+	<div dojoAttachPoint="slideShowNode"></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/image/resources/Lightbox.html
===================================================================
--- trunk/web/dojo/dojox/image/resources/Lightbox.html	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/Lightbox.html	(revision 9)
@@ -0,0 +1,13 @@
+<div class="dojoxLightbox" dojoAttachPoint="containerNode">
+	<div style="position:relative">
+		<div dojoAttachPoint="imageContainer" class="dojoxLightboxContainer" dojoAttachEvent="onclick: _onImageClick">
+			<img dojoAttachPoint="imgNode" src="${imgUrl}" class="dojoxLightboxImage" alt="${title}">
+			<div class="dojoxLightboxFooter" dojoAttachPoint="titleNode">
+				<div class="dijitInline LightboxClose" dojoAttachPoint="closeButtonNode"></div>
+				<div class="dijitInline LightboxNext" dojoAttachPoint="nextButtonNode"></div>	
+				<div class="dijitInline LightboxPrev" dojoAttachPoint="prevButtonNode"></div>
+				<div class="dojoxLightboxText" dojoAttachPoint="titleTextNode"><span dojoAttachPoint="textNode">${title}</span><span dojoAttachPoint="groupCount" class="dojoxLightboxGroupText"></span></div>
+			</div>
+		</div>
+	</div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/image/resources/SlideShow.html
===================================================================
--- trunk/web/dojo/dojox/image/resources/SlideShow.html	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/SlideShow.html	(revision 9)
@@ -0,0 +1,14 @@
+<div dojoAttachPoint="outerNode" class="slideShowWrapper">
+	<div style="position:relative;" dojoAttachPoint="innerWrapper">
+		<div class="slideShowNav" dojoAttachEvent="onclick: _handleClick">
+			<div class="dijitInline slideShowTitle" dojoAttachPoint="titleNode">${title}</div>
+		</div>
+		<div dojoAttachPoint="navNode" class="slideShowCtrl" dojoAttachEvent="onclick: _handleClick">
+			<span dojoAttachPoint="navPrev" class="slideShowCtrlPrev"></span>
+			<span dojoAttachPoint="navPlay" class="slideShowCtrlPlay"></span>
+			<span dojoAttachPoint="navNext" class="slideShowCtrlNext"></span>
+		</div>
+		<div dojoAttachPoint="largeNode" class="slideShowImageWrapper"></div>		
+		<div dojoAttachPoint="hiddenNode" class="slideShowHidden"></div>
+	</div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/image/resources/ThumbnailPicker.html
===================================================================
--- trunk/web/dojo/dojox/image/resources/ThumbnailPicker.html	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/ThumbnailPicker.html	(revision 9)
@@ -0,0 +1,11 @@
+<div dojoAttachPoint="outerNode" class="thumbOuter">
+	<div dojoAttachPoint="navPrev" class="thumbNav thumbClickable">
+	  <img src="" dojoAttachPoint="navPrevImg"/>    
+	</div>
+	<div dojoAttachPoint="thumbScroller" class="thumbScroller">
+	  <div dojoAttachPoint="thumbsNode" class="thumbWrapper"></div>
+	</div>
+	<div dojoAttachPoint="navNext" class="thumbNav thumbClickable">
+	  <img src="" dojoAttachPoint="navNextImg"/>  
+	</div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/image/resources/images/close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/close.png
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/close.png	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/close.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/close.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/warning.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/warning.png
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/warning.png	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/warning.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/warning.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/close.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/close.gif
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/close.gif	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/close.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/close.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/close_dark.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/close_dark.png
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/close_dark.png	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/close_dark.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/close_dark.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/left.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/left.png
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/left.png	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/left.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/left.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/left.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/left.gif
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/left.gif	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/left.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/left.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/right.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/right.png
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/right.png	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/right.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/right.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/buttons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/buttons.png
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/buttons.png	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/buttons.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/buttons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/loading.gif
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/loading.gif	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/right.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/right.gif
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/right.gif	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/right.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/right.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/images/buttons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/image/resources/images/buttons.gif
===================================================================
--- trunk/web/dojo/dojox/image/resources/images/buttons.gif	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/images/buttons.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/image/resources/images/buttons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/image/resources/Gallery.css
===================================================================
--- trunk/web/dojo/dojox/image/resources/Gallery.css	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/Gallery.css	(revision 9)
@@ -0,0 +1,5 @@
+
+.imageGalleryWrapper {
+	padding-bottom: 20px;
+	text-align: center;
+}
Index: trunk/web/dojo/dojox/image/resources/Lightbox.css
===================================================================
--- trunk/web/dojo/dojox/image/resources/Lightbox.css	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/Lightbox.css	(revision 9)
@@ -0,0 +1,88 @@
+
+.dijitDialogUnderlay {
+	background-color:#000; 
+}
+.claro .dojoxLightbox,
+.soria .dojoxLightbox,
+.nihilo .dojoxLightbox,
+.tundra .dojoxLightbox {
+	position:absolute;
+	z-index:999;
+	overflow:hidden;
+	width:100px;
+	height:100px; 
+	border:11px solid #fff;
+	background:#fff url('images/loading.gif') no-repeat center center;
+	
+	-webkit-box-shadow: 0px 6px 10px #636363; 
+	-webkit-border-radius: 3px;
+	-moz-border-radius:4px;
+	border-radius: 4px;
+}
+.dojoxLightboxContainer {
+	position:absolute;
+	top:0; left:0; 
+}
+.dojoxLightboxFooter {
+	padding-bottom:5px;
+	position:relative;
+	bottom:0;
+	left:0;
+	margin-top:8px;
+	color:#333;
+	z-index:1000;
+	font-size:10pt;
+}
+.dojoxLightboxGroupText {
+	color:#666; 
+	font-size:8pt;
+}
+.LightboxNext,
+.LightboxPrev,
+.LightboxClose {
+	float:right;
+	width:16px;
+	height:16px;
+	cursor:pointer;
+}
+.nihilo .LightboxClose,
+.tundra .LightboxClose {
+	background:url('images/close.png') no-repeat center center;
+}
+.di_ie6 .nihilo .LightboxClose,
+.dj_ie6 .tundra .LightboxClose {
+	background:url('images/close.gif') no-repeat center center;
+}
+.nihilo .LightboxNext,
+.tundra .LightboxNext {
+	background:url('images/right.png') no-repeat center center;
+}
+.dj_ie6 .nihilo .LightboxNext,
+.dj_ie6 .tundra .LightboxNext {
+	background:url('images/right.gif') no-repeat center center;
+}
+.nihilo .LightboxPrev,
+.tundra .LightboxPrev {
+	background:url('images/left.png') no-repeat center center;
+}
+.dj_ie6 .nihilo .LightboxPrev,
+.dj_ie6 .tundra .LightboxPrev {
+	background:url('images/left.gif') no-repeat center center;
+}
+.soria .LightboxClose,
+.soria .LightboxNext,
+.soria .LightboxPrev {
+	width:15px;
+	height:15px;
+	background:url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png') no-repeat center center;
+	background-position:-60px;
+}
+.soria .LightboxNext {
+	background-position:-30px 0;
+}
+.soria .LightboxPrev {
+	background-position:0 0;
+}
+.dojoxLightboxText {
+	margin:0; padding:0; 
+}
Index: trunk/web/dojo/dojox/image/resources/Magnifier.css
===================================================================
--- trunk/web/dojo/dojox/image/resources/Magnifier.css	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/Magnifier.css	(revision 9)
@@ -0,0 +1,5 @@
+.glassNode {
+	overflow:hidden;
+	position:absolute;
+	visibility:hidden;
+}
Index: trunk/web/dojo/dojox/image/resources/SlideShow.css
===================================================================
--- trunk/web/dojo/dojox/image/resources/SlideShow.css	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/SlideShow.css	(revision 9)
@@ -0,0 +1,103 @@
+
+.slideShowWrapper { 
+	position:relative; 
+	background:#fff;
+	padding:8px; 
+	border:1px solid #333;	
+	padding-bottom:20px;
+	overflow:hidden;
+	-moz-border-radius:3pt;
+	-webkit-border-radius:4pt;
+	-webkit-drop-shadow:#ccc 4pt; 
+}
+.slideShowNav { 
+	position:absolute;
+	bottom:-18px;	
+	left:0px;
+	padding:0px 3px 2px 0px;
+	background-color:#fff; 
+	width:100%;
+}
+.slideShowNavWrapper { float:right;  }
+.slideShowTitle {
+	float:left;
+	color:#333;
+	font-size:10pt;
+}
+.slideShowTitle .slideShowCounterText {
+	font-size:6pt; color:#666; 
+}
+.slideShowHidden {
+	position:absolute;
+	display: none;
+	height: 1px;
+	width: 1px;
+}
+.slideShowImageWrapper {
+	position:relative;
+	text-align: center;
+	margin-top: -42px;
+	float: left;
+	width: 100%;
+}
+.slideShowImageWrapper img {
+	border: 0px none;
+}
+.slideShowNotifier {
+	background-color: red;
+	width: 100px;
+	height: 5px;
+	font-size: 1%;
+}
+.slideShowSlideShow {
+	position:absolute;
+	top:30px; 
+	padding: 0 5px;
+	border: 0px;
+	text-decoration: none; 
+	color: #2e6ab1;
+}
+.slideShowLoading { background-color: #fad66a; }
+.slideShowLoaded { background-color: transparent; }
+.slideShowCtrlPrev {
+	background-position: -96px 0px; 
+	float: left;
+}
+.slideShowCtrlNext {
+	background-position: -144px 0px;
+	float: right;
+}
+.slideShowCtrlPlay {
+	background-position: -190px 0px;
+	position: absolute;
+}
+.slideShowPaused .slideShowCtrlPlay {
+	background-position: -236px 0px;
+	position: absolute;
+}
+.slideShowCtrl span.slideShowCtrlHide {
+	background-image: url("../../../dojo/resources/blank.gif");
+	cursor: auto;
+}
+.slideShowCtrl {
+	height: 50px;
+	width: 100%;
+	position: relative;
+	z-index:999;
+	float: left;
+}
+.slideShowCtrl span {
+	width: 50px;
+	height: 100%;
+	background-image: url("images/buttons.png");
+	cursor: pointer;
+}
+.dj_ie .slideShowCtrl span {
+	background-image: url("images/buttons.gif");
+}
+.dj_ie6 .slideShowPager li.currentpage,
+.dj_ie6 .pagination li.disablepage{
+    
+    margin-right: 5px;
+    padding-right: 0;
+}
Index: trunk/web/dojo/dojox/image/resources/ThumbnailPicker.css
===================================================================
--- trunk/web/dojo/dojox/image/resources/ThumbnailPicker.css	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/ThumbnailPicker.css	(revision 9)
@@ -0,0 +1,107 @@
+
+.thumbWrapper .thumbNav {
+	background-repeat: no-repeat;	
+	background-position: center;
+	padding-top: 1px;
+	width: 30px;
+	height: 100%;
+}
+.thumbOuter {
+	padding-bottom: 2px;
+}
+.thumbOuter.thumbHoriz {
+	width: 500px;
+	height: 85px;
+}
+.thumbOuter.thumbVert {
+	width: 100px;
+	height: 400px;
+}
+.thumbOuter .enabled {
+	background: transparent url("images/buttons.png") no-repeat center center;
+}
+.dj_ie6 .thumbOuter .enabled { background-image: url("images/buttons.gif"); }
+.thumbOuter .thumbNav img {
+	width: 48px;
+	height: 75px;
+}
+.thumbOuter .thumbClickable div {
+	cursor: pointer;
+}
+.thumbOuter .prevHoriz {
+	background-position: -96px 12px;
+	position: relative;
+	float: left;
+	height: 100%;
+}
+.thumbOuter .nextHoriz {
+	background-position: -144px 12px;
+	position: relative;
+	float: right;
+	height: 100%;
+}
+.thumbOuter .prevVert {
+	background-position: 0px 0px;
+	height: 48px;
+	width:48px;
+	margin-left:24px;
+}
+.thumbOuter .nextVert {
+	background-position: -48px 0px;
+	height: 48px;
+	width:48px;
+	margin-left:24px;
+}
+.thumbWrapper img {
+	height: 75px;
+	max-width: 100px;
+	width: expression(this.width > 100 ? 100: true);
+}
+.thumbWrapper .thumbNav .imageGalleryThumb {
+	height: 50px;
+}
+.thumbWrapper .thumbNotifier {
+	background-color: red;
+	width: 0px;
+	margin-left: 2px;
+	height: 5px;
+	font-size: 1%;
+}
+.thumbWrapper .thumbLoaded {
+	background-color: transparent;	
+}
+.thumbScroller {
+	overflow-x: hidden;
+	overflow-y: hidden;
+	text-align: center;
+}
+.thumbHoriz .thumbScroller {
+	width: 500px;
+	height: 85px;
+	float: left;
+}
+.thumbVert .thumbScroller {
+	height: 500px;
+	width: 100px;	
+}
+.thumbWrapper {
+	float: left;
+}
+.thumbVert .thumbWrapper {
+	width: 100px;
+	height: 10px;
+}
+.thumbHoriz .thumbWapper {
+	height:85px;
+	width: 10px;
+}
+.thumbWrapper.thumbHoriz div {
+	float: left;
+	padding-right: 2px;
+}
+.thumbWrapper.thumbVert {
+	width: 100px;
+}
+.thumbWrapper.thumbVert div {
+	padding-bottom: 2px;
+}
Index: trunk/web/dojo/dojox/image/resources/Badge.css
===================================================================
--- trunk/web/dojo/dojox/image/resources/Badge.css	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/Badge.css	(revision 9)
@@ -0,0 +1,30 @@
+
+.dojoxBadge {
+	position:relative;
+}
+.dojoxBadge .dojoxBadgeImage {
+	position:absolute;
+	top:0; left:0;
+	margin:0;
+	padding:0;
+}
+.dojoxBadge {
+	margin:0; padding:0;
+	border:1px solid #eee;
+}
+.dojoxBadge .dojoxBadgeImage {
+	overflow:hidden;
+	margin-left:1px;
+	margin-top:1px;
+	background:#ededed;
+	z-index:90;
+}
+.dojoxBadge .dojoxBadgeSeen {
+	background-color:#dedede;
+}
+.dojoxBadge .dojoxBadgeOver {
+	background-color:green !important;
+}
+.dojoxBadge .dojoxBadgeTop {
+	z-index:99;
+}
Index: trunk/web/dojo/dojox/image/resources/image.css
===================================================================
--- trunk/web/dojo/dojox/image/resources/image.css	(revision 0)
+++ trunk/web/dojo/dojox/image/resources/image.css	(revision 9)
@@ -0,0 +1,334 @@
+
+.dijitDialogUnderlay {
+	background-color:#000; 
+}
+.claro .dojoxLightbox,
+.soria .dojoxLightbox,
+.nihilo .dojoxLightbox,
+.tundra .dojoxLightbox {
+	position:absolute;
+	z-index:999;
+	overflow:hidden;
+	width:100px;
+	height:100px; 
+	border:11px solid #fff;
+	background:#fff url(images/loading.gif) no-repeat center center;
+	
+	-webkit-box-shadow: 0px 6px 10px #636363; 
+	-webkit-border-radius: 3px;
+	-moz-border-radius:4px;
+	border-radius: 4px;
+}
+.dojoxLightboxContainer {
+	position:absolute;
+	top:0; left:0; 
+}
+.dojoxLightboxFooter {
+	padding-bottom:5px;
+	position:relative;
+	bottom:0;
+	left:0;
+	margin-top:8px;
+	color:#333;
+	z-index:1000;
+	font-size:10pt;
+}
+.dojoxLightboxGroupText {
+	color:#666; 
+	font-size:8pt;
+}
+.LightboxNext,
+.LightboxPrev,
+.LightboxClose {
+	float:right;
+	width:16px;
+	height:16px;
+	cursor:pointer;
+}
+.nihilo .LightboxClose,
+.tundra .LightboxClose {
+	background:url(images/close.png) no-repeat center center;
+}
+.di_ie6 .nihilo .LightboxClose,
+.dj_ie6 .tundra .LightboxClose {
+	background:url(images/close.gif) no-repeat center center;
+}
+.nihilo .LightboxNext,
+.tundra .LightboxNext {
+	background:url(images/right.png) no-repeat center center;
+}
+.dj_ie6 .nihilo .LightboxNext,
+.dj_ie6 .tundra .LightboxNext {
+	background:url(images/right.gif) no-repeat center center;
+}
+.nihilo .LightboxPrev,
+.tundra .LightboxPrev {
+	background:url(images/left.png) no-repeat center center;
+}
+.dj_ie6 .nihilo .LightboxPrev,
+.dj_ie6 .tundra .LightboxPrev {
+	background:url(images/left.gif) no-repeat center center;
+}
+.soria .LightboxClose,
+.soria .LightboxNext,
+.soria .LightboxPrev {
+	width:15px;
+	height:15px;
+	background:url(../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png) no-repeat center center;
+	background-position:-60px;
+}
+.soria .LightboxNext {
+	background-position:-30px 0;
+}
+.soria .LightboxPrev {
+	background-position:0 0;
+}
+.dojoxLightboxText {
+	margin:0; padding:0; 
+}
+.slideShowWrapper { 
+	position:relative; 
+	background:#fff;
+	padding:8px; 
+	border:1px solid #333;	
+	padding-bottom:20px;
+	overflow:hidden;
+	-moz-border-radius:3pt;
+	-webkit-border-radius:4pt;
+	-webkit-drop-shadow:#ccc 4pt; 
+}
+.slideShowNav { 
+	position:absolute;
+	bottom:-18px;	
+	left:0px;
+	padding:0px 3px 2px 0px;
+	background-color:#fff; 
+	width:100%;
+}
+.slideShowNavWrapper { float:right;  }
+.slideShowTitle {
+	float:left;
+	color:#333;
+	font-size:10pt;
+}
+.slideShowTitle .slideShowCounterText {
+	font-size:6pt; color:#666; 
+}
+.slideShowHidden {
+	position:absolute;
+	display: none;
+	height: 1px;
+	width: 1px;
+}
+.slideShowImageWrapper {
+	position:relative;
+	text-align: center;
+	margin-top: -42px;
+	float: left;
+	width: 100%;
+}
+.slideShowImageWrapper img {
+	border: 0px none;
+}
+.slideShowNotifier {
+	background-color: red;
+	width: 100px;
+	height: 5px;
+	font-size: 1%;
+}
+.slideShowSlideShow {
+	position:absolute;
+	top:30px; 
+	padding: 0 5px;
+	border: 0px;
+	text-decoration: none; 
+	color: #2e6ab1;
+}
+.slideShowLoading { background-color: #fad66a; }
+.slideShowLoaded { background-color: transparent; }
+.slideShowCtrlPrev {
+	background-position: -96px 0px; 
+	float: left;
+}
+.slideShowCtrlNext {
+	background-position: -144px 0px;
+	float: right;
+}
+.slideShowCtrlPlay {
+	background-position: -190px 0px;
+	position: absolute;
+}
+.slideShowPaused .slideShowCtrlPlay {
+	background-position: -236px 0px;
+	position: absolute;
+}
+.slideShowCtrl span.slideShowCtrlHide {
+	background-image: url(../../../dojo/resources/blank.gif);
+	cursor: auto;
+}
+.slideShowCtrl {
+	height: 50px;
+	width: 100%;
+	position: relative;
+	z-index:999;
+	float: left;
+}
+.slideShowCtrl span {
+	width: 50px;
+	height: 100%;
+	background-image: url(images/buttons.png);
+	cursor: pointer;
+}
+.dj_ie .slideShowCtrl span {
+	background-image: url(images/buttons.gif);
+}
+.dj_ie6 .slideShowPager li.currentpage,
+.dj_ie6 .pagination li.disablepage{
+    
+    margin-right: 5px;
+    padding-right: 0;
+}
+.thumbWrapper .thumbNav {
+	background-repeat: no-repeat;	
+	background-position: center;
+	padding-top: 1px;
+	width: 30px;
+	height: 100%;
+}
+.thumbOuter {
+	padding-bottom: 2px;
+}
+.thumbOuter.thumbHoriz {
+	width: 500px;
+	height: 85px;
+}
+.thumbOuter.thumbVert {
+	width: 100px;
+	height: 400px;
+}
+.thumbOuter .enabled {
+	background: transparent url(images/buttons.png) no-repeat center center;
+}
+.dj_ie6 .thumbOuter .enabled { background-image: url(images/buttons.gif); }
+.thumbOuter .thumbNav img {
+	width: 48px;
+	height: 75px;
+}
+.thumbOuter .thumbClickable div {
+	cursor: pointer;
+}
+.thumbOuter .prevHoriz {
+	background-position: -96px 12px;
+	position: relative;
+	float: left;
+	height: 100%;
+}
+.thumbOuter .nextHoriz {
+	background-position: -144px 12px;
+	position: relative;
+	float: right;
+	height: 100%;
+}
+.thumbOuter .prevVert {
+	background-position: 0px 0px;
+	height: 48px;
+	width:48px;
+	margin-left:24px;
+}
+.thumbOuter .nextVert {
+	background-position: -48px 0px;
+	height: 48px;
+	width:48px;
+	margin-left:24px;
+}
+.thumbWrapper img {
+	height: 75px;
+	max-width: 100px;
+	width: expression(this.width > 100 ? 100: true);
+}
+.thumbWrapper .thumbNav .imageGalleryThumb {
+	height: 50px;
+}
+.thumbWrapper .thumbNotifier {
+	background-color: red;
+	width: 0px;
+	margin-left: 2px;
+	height: 5px;
+	font-size: 1%;
+}
+.thumbWrapper .thumbLoaded {
+	background-color: transparent;	
+}
+.thumbScroller {
+	overflow-x: hidden;
+	overflow-y: hidden;
+	text-align: center;
+}
+.thumbHoriz .thumbScroller {
+	width: 500px;
+	height: 85px;
+	float: left;
+}
+.thumbVert .thumbScroller {
+	height: 500px;
+	width: 100px;	
+}
+.thumbWrapper {
+	float: left;
+}
+.thumbVert .thumbWrapper {
+	width: 100px;
+	height: 10px;
+}
+.thumbHoriz .thumbWapper {
+	height:85px;
+	width: 10px;
+}
+.thumbWrapper.thumbHoriz div {
+	float: left;
+	padding-right: 2px;
+}
+.thumbWrapper.thumbVert {
+	width: 100px;
+}
+.thumbWrapper.thumbVert div {
+	padding-bottom: 2px;
+}
+.imageGalleryWrapper {
+	padding-bottom: 20px;
+	text-align: center;
+}
+.dojoxBadge {
+	position:relative;
+}
+.dojoxBadge .dojoxBadgeImage {
+	position:absolute;
+	top:0; left:0;
+	margin:0;
+	padding:0;
+}
+.dojoxBadge {
+	margin:0; padding:0;
+	border:1px solid #eee;
+}
+.dojoxBadge .dojoxBadgeImage {
+	overflow:hidden;
+	margin-left:1px;
+	margin-top:1px;
+	background:#ededed;
+	z-index:90;
+}
+.dojoxBadge .dojoxBadgeSeen {
+	background-color:#dedede;
+}
+.dojoxBadge .dojoxBadgeOver {
+	background-color:green !important;
+}
+.dojoxBadge .dojoxBadgeTop {
+	z-index:99;
+}
+.glassNode {
+	overflow:hidden;
+	position:absolute;
+	visibility:hidden;
+}
Index: trunk/web/dojo/dojox/image/Lightbox.js
===================================================================
--- trunk/web/dojo/dojox/image/Lightbox.js	(revision 0)
+++ trunk/web/dojo/dojox/image/Lightbox.js	(revision 9)
@@ -0,0 +1,269 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.Lightbox"]){
+dojo._hasResource["dojox.image.Lightbox"]=true;
+dojo.provide("dojox.image.Lightbox");
+dojo.experimental("dojox.image.Lightbox");
+dojo.require("dojo.window");
+dojo.require("dijit.Dialog");
+dojo.require("dojox.fx._base");
+dojo.declare("dojox.image.Lightbox",dijit._Widget,{group:"",title:"",href:"",duration:500,modal:false,_allowPassthru:false,_attachedDialog:null,startup:function(){
+this.inherited(arguments);
+var _1=dijit.byId("dojoxLightboxDialog");
+if(_1){
+this._attachedDialog=_1;
+}else{
+this._attachedDialog=new dojox.image.LightboxDialog({id:"dojoxLightboxDialog"});
+this._attachedDialog.startup();
+}
+if(!this.store){
+this._addSelf();
+this.connect(this.domNode,"onclick","_handleClick");
+}
+},_addSelf:function(){
+this._attachedDialog.addImage({href:this.href,title:this.title},this.group||null);
+},_handleClick:function(e){
+if(!this._allowPassthru){
+e.preventDefault();
+}else{
+return;
+}
+this.show();
+},show:function(){
+this._attachedDialog.show(this);
+},hide:function(){
+this._attachedDialog.hide();
+},disable:function(){
+this._allowPassthru=true;
+},enable:function(){
+this._allowPassthru=false;
+},onClick:function(){
+},destroy:function(){
+this._attachedDialog.removeImage(this);
+this.inherited(arguments);
+}});
+dojo.declare("dojox.image.LightboxDialog",dijit.Dialog,{title:"",inGroup:null,imgUrl:dijit._Widget.prototype._blankGif,errorMessage:"Image not found.",adjust:true,modal:false,_groups:{XnoGroupX:[]},errorImg:dojo.moduleUrl("dojox.image","resources/images/warning.png"),templateString:dojo.cache("dojox.image","resources/Lightbox.html","<div class=\"dojoxLightbox\" dojoAttachPoint=\"containerNode\">\n\t<div style=\"position:relative\">\n\t\t<div dojoAttachPoint=\"imageContainer\" class=\"dojoxLightboxContainer\" dojoAttachEvent=\"onclick: _onImageClick\">\n\t\t\t<img dojoAttachPoint=\"imgNode\" src=\"${imgUrl}\" class=\"dojoxLightboxImage\" alt=\"${title}\">\n\t\t\t<div class=\"dojoxLightboxFooter\" dojoAttachPoint=\"titleNode\">\n\t\t\t\t<div class=\"dijitInline LightboxClose\" dojoAttachPoint=\"closeButtonNode\"></div>\n\t\t\t\t<div class=\"dijitInline LightboxNext\" dojoAttachPoint=\"nextButtonNode\"></div>\t\n\t\t\t\t<div class=\"dijitInline LightboxPrev\" dojoAttachPoint=\"prevButtonNode\"></div>\n\t\t\t\t<div class=\"dojoxLightboxText\" dojoAttachPoint=\"titleTextNode\"><span dojoAttachPoint=\"textNode\">${title}</span><span dojoAttachPoint=\"groupCount\" class=\"dojoxLightboxGroupText\"></span></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n"),startup:function(){
+this.inherited(arguments);
+this._animConnects=[];
+this.connect(this.nextButtonNode,"onclick","_nextImage");
+this.connect(this.prevButtonNode,"onclick","_prevImage");
+this.connect(this.closeButtonNode,"onclick","hide");
+this._makeAnims();
+this._vp=dojo.window.getBox();
+return this;
+},show:function(_2){
+var _3=this;
+this._lastGroup=_2;
+if(!_3.open){
+_3.inherited(arguments);
+_3._modalconnects.push(dojo.connect(dojo.global,"onscroll",this,"_position"),dojo.connect(dojo.global,"onresize",this,"_position"),dojo.connect(dojo.body(),"onkeypress",this,"_handleKey"));
+if(!_2.modal){
+_3._modalconnects.push(dojo.connect(dijit._underlay.domNode,"onclick",this,"onCancel"));
+}
+}
+if(this._wasStyled){
+var _4=dojo.create("img",null,_3.imgNode,"after");
+dojo.destroy(_3.imgNode);
+_3.imgNode=_4;
+_3._makeAnims();
+_3._wasStyled=false;
+}
+dojo.style(_3.imgNode,"opacity","0");
+dojo.style(_3.titleNode,"opacity","0");
+var _5=_2.href;
+if((_2.group&&_2!=="XnoGroupX")||_3.inGroup){
+if(!_3.inGroup){
+_3.inGroup=_3._groups[(_2.group)];
+dojo.forEach(_3.inGroup,function(g,i){
+if(g.href==_2.href){
+_3._index=i;
+}
+});
+}
+if(!_3._index){
+_3._index=0;
+var sr=_3.inGroup[_3._index];
+_5=(sr&&sr.href)||_3.errorImg;
+}
+_3.groupCount.innerHTML=" ("+(_3._index+1)+" of "+Math.max(1,_3.inGroup.length)+")";
+_3.prevButtonNode.style.visibility="visible";
+_3.nextButtonNode.style.visibility="visible";
+}else{
+_3.groupCount.innerHTML="";
+_3.prevButtonNode.style.visibility="hidden";
+_3.nextButtonNode.style.visibility="hidden";
+}
+if(!_2.leaveTitle){
+_3.textNode.innerHTML=_2.title;
+}
+_3._ready(_5);
+},_ready:function(_6){
+var _7=this;
+_7._imgError=dojo.connect(_7.imgNode,"error",_7,function(){
+dojo.disconnect(_7._imgError);
+_7.imgNode.src=_7.errorImg;
+_7.textNode.innerHTML=_7.errorMessage;
+});
+_7._imgConnect=dojo.connect(_7.imgNode,"load",_7,function(e){
+_7.resizeTo({w:_7.imgNode.width,h:_7.imgNode.height,duration:_7.duration});
+dojo.disconnect(_7._imgConnect);
+if(_7._imgError){
+dojo.disconnect(_7._imgError);
+}
+});
+_7.imgNode.src=_6;
+},_nextImage:function(){
+if(!this.inGroup){
+return;
+}
+if(this._index+1<this.inGroup.length){
+this._index++;
+}else{
+this._index=0;
+}
+this._loadImage();
+},_prevImage:function(){
+if(this.inGroup){
+if(this._index==0){
+this._index=this.inGroup.length-1;
+}else{
+this._index--;
+}
+this._loadImage();
+}
+},_loadImage:function(){
+this._loadingAnim.play(1);
+},_prepNodes:function(){
+this._imageReady=false;
+if(this.inGroup&&this.inGroup[this._index]){
+this.show({href:this.inGroup[this._index].href,title:this.inGroup[this._index].title});
+}else{
+this.show({title:this.errorMessage,href:this.errorImg});
+}
+},resizeTo:function(_8,_9){
+var _a=dojo.boxModel=="border-box"?dojo._getBorderExtents(this.domNode).w:0,_b=_9||{h:30};
+this._lastTitleSize=_b;
+if(this.adjust&&(_8.h+_b.h+_a+80>this._vp.h||_8.w+_a+60>this._vp.w)){
+this._lastSize=_8;
+_8=this._scaleToFit(_8);
+}
+this._currentSize=_8;
+var _c=dojox.fx.sizeTo({node:this.containerNode,duration:_8.duration||this.duration,width:_8.w+_a,height:_8.h+_b.h+_a});
+this.connect(_c,"onEnd","_showImage");
+_c.play(15);
+},_scaleToFit:function(_d){
+var ns={};
+if(this._vp.h>this._vp.w){
+ns.w=this._vp.w-80;
+ns.h=ns.w*(_d.h/_d.w);
+}else{
+ns.h=this._vp.h-60-this._lastTitleSize.h;
+ns.w=ns.h*(_d.w/_d.h);
+}
+this._wasStyled=true;
+this._setImageSize(ns);
+ns.duration=_d.duration;
+return ns;
+},_setImageSize:function(_e){
+var s=this.imgNode;
+s.height=_e.h;
+s.width=_e.w;
+},_size:function(){
+},_position:function(e){
+this._vp=dojo.window.getBox();
+this.inherited(arguments);
+if(e&&e.type=="resize"){
+if(this._wasStyled){
+this._setImageSize(this._lastSize);
+this.resizeTo(this._lastSize);
+}else{
+if(this.imgNode.height+80>this._vp.h||this.imgNode.width+60>this._vp.h){
+this.resizeTo({w:this.imgNode.width,h:this.imgNode.height});
+}
+}
+}
+},_showImage:function(){
+this._showImageAnim.play(1);
+},_showNav:function(){
+var _f=dojo.marginBox(this.titleNode);
+if(_f.h>this._lastTitleSize.h){
+this.resizeTo(this._wasStyled?this._lastSize:this._currentSize,_f);
+}else{
+this._showNavAnim.play(1);
+}
+},hide:function(){
+dojo.fadeOut({node:this.titleNode,duration:200,onEnd:dojo.hitch(this,function(){
+this.imgNode.src=this._blankGif;
+})}).play(5);
+this.inherited(arguments);
+this.inGroup=null;
+this._index=null;
+},addImage:function(_10,_11){
+var g=_11;
+if(!_10.href){
+return;
+}
+if(g){
+if(!this._groups[g]){
+this._groups[g]=[];
+}
+this._groups[g].push(_10);
+}else{
+this._groups["XnoGroupX"].push(_10);
+}
+},removeImage:function(_12){
+var g=_12.group||"XnoGroupX";
+dojo.every(this._groups[g],function(_13,i,ar){
+if(_13.href==_12.href){
+ar.splice(i,1);
+return false;
+}
+return true;
+});
+},removeGroup:function(_14){
+if(this._groups[_14]){
+this._groups[_14]=[];
+}
+},_handleKey:function(e){
+if(!this.open){
+return;
+}
+var dk=dojo.keys;
+switch(e.charOrCode){
+case dk.ESCAPE:
+this.hide();
+break;
+case dk.DOWN_ARROW:
+case dk.RIGHT_ARROW:
+case 78:
+this._nextImage();
+break;
+case dk.UP_ARROW:
+case dk.LEFT_ARROW:
+case 80:
+this._prevImage();
+break;
+}
+},_makeAnims:function(){
+dojo.forEach(this._animConnects,dojo.disconnect);
+this._animConnects=[];
+this._showImageAnim=dojo.fadeIn({node:this.imgNode,duration:this.duration});
+this._animConnects.push(dojo.connect(this._showImageAnim,"onEnd",this,"_showNav"));
+this._loadingAnim=dojo.fx.combine([dojo.fadeOut({node:this.imgNode,duration:175}),dojo.fadeOut({node:this.titleNode,duration:175})]);
+this._animConnects.push(dojo.connect(this._loadingAnim,"onEnd",this,"_prepNodes"));
+this._showNavAnim=dojo.fadeIn({node:this.titleNode,duration:225});
+},onClick:function(_15){
+},_onImageClick:function(e){
+if(e&&e.target==this.imgNode){
+this.onClick(this._lastGroup);
+if(this._lastGroup.declaredClass){
+this._lastGroup.onClick(this._lastGroup);
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/image/Magnifier.js
===================================================================
--- trunk/web/dojo/dojox/image/Magnifier.js	(revision 0)
+++ trunk/web/dojo/dojox/image/Magnifier.js	(revision 9)
@@ -0,0 +1,29 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.Magnifier"]){
+dojo._hasResource["dojox.image.Magnifier"]=true;
+dojo.provide("dojox.image.Magnifier");
+dojo.require("dojox.gfx");
+dojo.require("dojox.image.MagnifierLite");
+dojo.declare("dojox.image.Magnifier",dojox.image.MagnifierLite,{_createGlass:function(){
+this.glassNode=dojo.create("div",{style:{height:this.glassSize+"px",width:this.glassSize+"px"},"className":"glassNode"},dojo.body());
+this.surfaceNode=dojo.create("div",null,this.glassNode);
+this.surface=dojox.gfx.createSurface(this.surfaceNode,this.glassSize,this.glassSize);
+this.img=this.surface.createImage({src:this.domNode.src,width:this._zoomSize.w,height:this._zoomSize.h});
+},_placeGlass:function(e){
+var x=e.pageX-2,y=e.pageY-2,_1=this.offset.x+this.offset.w+2,_2=this.offset.y+this.offset.h+2;
+if(x<this.offset.x||y<this.offset.y||x>_1||y>_2){
+this._hideGlass();
+}else{
+this.inherited(arguments);
+}
+},_setImage:function(e){
+var _3=(e.pageX-this.offset.l)/this.offset.w,_4=(e.pageY-this.offset.t)/this.offset.h,x=(this._zoomSize.w*_3*-1)+(this.glassSize*_3),y=(this._zoomSize.h*_4*-1)+(this.glassSize*_4);
+this.img.setShape({x:x,y:y});
+}});
+}
Index: trunk/web/dojo/dojox/image/SlideShow.js
===================================================================
--- trunk/web/dojo/dojox/image/SlideShow.js	(revision 0)
+++ trunk/web/dojo/dojox/image/SlideShow.js	(revision 9)
@@ -0,0 +1,367 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.SlideShow"]){
+dojo._hasResource["dojox.image.SlideShow"]=true;
+dojo.provide("dojox.image.SlideShow");
+dojo.require("dojo.string");
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.image.SlideShow",[dijit._Widget,dijit._Templated],{imageHeight:375,imageWidth:500,title:"",titleTemplate:"${title} <span class=\"slideShowCounterText\">(${current} of ${total})</span>",noLink:false,loop:true,hasNav:true,images:[],pageSize:20,autoLoad:true,autoStart:false,fixedHeight:false,imageStore:null,linkAttr:"link",imageLargeAttr:"imageUrl",titleAttr:"title",slideshowInterval:3,templateString:dojo.cache("dojox.image","resources/SlideShow.html","<div dojoAttachPoint=\"outerNode\" class=\"slideShowWrapper\">\n\t<div style=\"position:relative;\" dojoAttachPoint=\"innerWrapper\">\n\t\t<div class=\"slideShowNav\" dojoAttachEvent=\"onclick: _handleClick\">\n\t\t\t<div class=\"dijitInline slideShowTitle\" dojoAttachPoint=\"titleNode\">${title}</div>\n\t\t</div>\n\t\t<div dojoAttachPoint=\"navNode\" class=\"slideShowCtrl\" dojoAttachEvent=\"onclick: _handleClick\">\n\t\t\t<span dojoAttachPoint=\"navPrev\" class=\"slideShowCtrlPrev\"></span>\n\t\t\t<span dojoAttachPoint=\"navPlay\" class=\"slideShowCtrlPlay\"></span>\n\t\t\t<span dojoAttachPoint=\"navNext\" class=\"slideShowCtrlNext\"></span>\n\t\t</div>\n\t\t<div dojoAttachPoint=\"largeNode\" class=\"slideShowImageWrapper\"></div>\t\t\n\t\t<div dojoAttachPoint=\"hiddenNode\" class=\"slideShowHidden\"></div>\n\t</div>\n</div>\n"),_imageCounter:0,_tmpImage:null,_request:null,postCreate:function(){
+this.inherited(arguments);
+var _1=document.createElement("img");
+_1.setAttribute("width",this.imageWidth);
+_1.setAttribute("height",this.imageHeight);
+if(this.hasNav){
+dojo.connect(this.outerNode,"onmouseover",this,function(_2){
+try{
+this._showNav();
+}
+catch(e){
+}
+});
+dojo.connect(this.outerNode,"onmouseout",this,function(_3){
+try{
+this._hideNav(_3);
+}
+catch(e){
+}
+});
+}
+this.outerNode.style.width=this.imageWidth+"px";
+_1.setAttribute("src",this._blankGif);
+var _4=this;
+this.largeNode.appendChild(_1);
+this._tmpImage=this._currentImage=_1;
+this._fitSize(true);
+this._loadImage(0,dojo.hitch(this,"showImage",0));
+this._calcNavDimensions();
+},setDataStore:function(_5,_6,_7){
+this.reset();
+var _8=this;
+this._request={query:{},start:_6.start||0,count:_6.count||this.pageSize,onBegin:function(_9,_a){
+_8.maxPhotos=_9;
+}};
+if(_6.query){
+dojo.mixin(this._request.query,_6.query);
+}
+if(_7){
+dojo.forEach(["imageLargeAttr","linkAttr","titleAttr"],function(_b){
+if(_7[_b]){
+this[_b]=_7[_b];
+}
+},this);
+}
+var _c=function(_d){
+_8.maxPhotos=_d.length;
+_8._request.onComplete=null;
+if(_8.autoStart){
+_8.imageIndex=-1;
+_8.toggleSlideShow();
+}else{
+_8.showImage(0);
+}
+};
+this.imageStore=_5;
+this._request.onComplete=_c;
+this._request.start=0;
+this.imageStore.fetch(this._request);
+},reset:function(){
+dojo.query("> *",this.largeNode).orphan();
+this.largeNode.appendChild(this._tmpImage);
+dojo.query("> *",this.hiddenNode).orphan();
+dojo.forEach(this.images,function(_e){
+if(_e&&_e.parentNode){
+_e.parentNode.removeChild(_e);
+}
+});
+this.images=[];
+this.isInitialized=false;
+this._imageCounter=0;
+},isImageLoaded:function(_f){
+return this.images&&this.images.length>_f&&this.images[_f];
+},moveImageLoadingPointer:function(_10){
+this._imageCounter=_10;
+},destroy:function(){
+if(this._slideId){
+this._stop();
+}
+this.inherited(arguments);
+},showNextImage:function(_11,_12){
+if(_11&&this._timerCancelled){
+return false;
+}
+if(this.imageIndex+1>=this.maxPhotos){
+if(_11&&(this.loop||_12)){
+this.imageIndex=-1;
+}else{
+if(this._slideId){
+this._stop();
+}
+return false;
+}
+}
+this.showImage(this.imageIndex+1,dojo.hitch(this,function(){
+if(_11){
+this._startTimer();
+}
+}));
+return true;
+},toggleSlideShow:function(){
+if(this._slideId){
+this._stop();
+}else{
+dojo.toggleClass(this.domNode,"slideShowPaused");
+this._timerCancelled=false;
+var idx=this.imageIndex;
+if(idx<0||(this.images[idx]&&this.images[idx]._img.complete)){
+var _13=this.showNextImage(true,true);
+if(!_13){
+this._stop();
+}
+}else{
+var _14=dojo.subscribe(this.getShowTopicName(),dojo.hitch(this,function(_15){
+setTimeout(dojo.hitch(this,function(){
+if(_15.index==idx){
+var _16=this.showNextImage(true,true);
+if(!_16){
+this._stop();
+}
+dojo.unsubscribe(_14);
+}
+}),this.slideshowInterval*1000);
+}));
+dojo.publish(this.getShowTopicName(),[{index:idx,title:"",url:""}]);
+}
+}
+},getShowTopicName:function(){
+return (this.widgetId||this.id)+"/imageShow";
+},getLoadTopicName:function(){
+return (this.widgetId?this.widgetId:this.id)+"/imageLoad";
+},showImage:function(_17,_18){
+if(!_18&&this._slideId){
+this.toggleSlideShow();
+}
+var _19=this;
+var _1a=this.largeNode.getElementsByTagName("div");
+this.imageIndex=_17;
+var _1b=function(){
+if(_19.images[_17]){
+while(_19.largeNode.firstChild){
+_19.largeNode.removeChild(_19.largeNode.firstChild);
+}
+dojo.style(_19.images[_17],"opacity",0);
+_19.largeNode.appendChild(_19.images[_17]);
+_19._currentImage=_19.images[_17]._img;
+_19._fitSize();
+var _1c=function(a,b,c){
+var img=_19.images[_17].firstChild;
+if(img.tagName.toLowerCase()!="img"){
+img=img.firstChild;
+}
+var _1d=img.getAttribute("title")||"";
+if(_19._navShowing){
+_19._showNav(true);
+}
+dojo.publish(_19.getShowTopicName(),[{index:_17,title:_1d,url:img.getAttribute("src")}]);
+if(_18){
+_18(a,b,c);
+}
+_19._setTitle(_1d);
+};
+dojo.fadeIn({node:_19.images[_17],duration:300,onEnd:_1c}).play();
+}else{
+_19._loadImage(_17,function(){
+_19.showImage(_17,_18);
+});
+}
+};
+if(_1a&&_1a.length>0){
+dojo.fadeOut({node:_1a[0],duration:300,onEnd:function(){
+_19.hiddenNode.appendChild(_1a[0]);
+_1b();
+}}).play();
+}else{
+_1b();
+}
+},_fitSize:function(_1e){
+if(!this.fixedHeight||_1e){
+var _1f=(this._currentImage.height+(this.hasNav?20:0));
+dojo.style(this.innerWrapper,"height",_1f+"px");
+return;
+}
+dojo.style(this.largeNode,"paddingTop",this._getTopPadding()+"px");
+},_getTopPadding:function(){
+if(!this.fixedHeight){
+return 0;
+}
+return (this.imageHeight-this._currentImage.height)/2;
+},_loadNextImage:function(){
+if(!this.autoLoad){
+return;
+}
+while(this.images.length>=this._imageCounter&&this.images[this._imageCounter]){
+this._imageCounter++;
+}
+this._loadImage(this._imageCounter);
+},_loadImage:function(_20,_21){
+if(this.images[_20]||!this._request){
+return;
+}
+var _22=_20-(_20%(this._request.count||this.pageSize));
+this._request.start=_22;
+this._request.onComplete=function(_23){
+var _24=_20-_22;
+if(_23&&_23.length>_24){
+_25(_23[_24]);
+}else{
+}
+};
+var _26=this;
+var _27=this.imageStore;
+var _25=function(_28){
+var url=_26.imageStore.getValue(_28,_26.imageLargeAttr);
+var img=new Image();
+var div=dojo.create("div",{id:_26.id+"_imageDiv"+_20});
+div._img=img;
+var _29=_26.imageStore.getValue(_28,_26.linkAttr);
+if(!_29||_26.noLink){
+div.appendChild(img);
+}else{
+var a=dojo.create("a",{"href":_29,"target":"_blank"},div);
+a.appendChild(img);
+}
+dojo.connect(img,"onload",function(){
+if(_27!=_26.imageStore){
+return;
+}
+_26._fitImage(img);
+dojo.attr(div,{"width":_26.imageWidth,"height":_26.imageHeight});
+dojo.publish(_26.getLoadTopicName(),[_20]);
+setTimeout(function(){
+_26._loadNextImage();
+},1);
+if(_21){
+_21();
+}
+});
+_26.hiddenNode.appendChild(div);
+var _2a=dojo.create("div",{className:"slideShowTitle"},div);
+_26.images[_20]=div;
+dojo.attr(img,"src",url);
+var _2b=_26.imageStore.getValue(_28,_26.titleAttr);
+if(_2b){
+dojo.attr(img,"title",_2b);
+}
+};
+this.imageStore.fetch(this._request);
+},_stop:function(){
+if(this._slideId){
+clearTimeout(this._slideId);
+}
+this._slideId=null;
+this._timerCancelled=true;
+dojo.removeClass(this.domNode,"slideShowPaused");
+},_prev:function(){
+if(this.imageIndex<1){
+return;
+}
+this.showImage(this.imageIndex-1);
+},_next:function(){
+this.showNextImage();
+},_startTimer:function(){
+var id=this.id;
+this._slideId=setTimeout(function(){
+dijit.byId(id).showNextImage(true);
+},this.slideshowInterval*1000);
+},_calcNavDimensions:function(){
+dojo.style(this.navNode,"position","absolute");
+dojo.style(this.navNode,"top","-10000px");
+dojo._setOpacity(this.navNode,99);
+this.navPlay._size=dojo.marginBox(this.navPlay);
+this.navPrev._size=dojo.marginBox(this.navPrev);
+this.navNext._size=dojo.marginBox(this.navNext);
+dojo._setOpacity(this.navNode,0);
+dojo.style(this.navNode,{"position":"",top:""});
+},_setTitle:function(_2c){
+this.titleNode.innerHTML=dojo.string.substitute(this.titleTemplate,{title:_2c,current:1+this.imageIndex,total:this.maxPhotos||""});
+},_fitImage:function(img){
+var _2d=img.width;
+var _2e=img.height;
+if(_2d>this.imageWidth){
+_2e=Math.floor(_2e*(this.imageWidth/_2d));
+img.height=_2e;
+img.width=_2d=this.imageWidth;
+}
+if(_2e>this.imageHeight){
+_2d=Math.floor(_2d*(this.imageHeight/_2e));
+img.height=this.imageHeight;
+img.width=_2d;
+}
+},_handleClick:function(e){
+switch(e.target){
+case this.navNext:
+this._next();
+break;
+case this.navPrev:
+this._prev();
+break;
+case this.navPlay:
+this.toggleSlideShow();
+break;
+}
+},_showNav:function(_2f){
+if(this._navShowing&&!_2f){
+return;
+}
+dojo.style(this.navNode,"marginTop","0px");
+var _30=dojo.style(this.navNode,"width")/2-this.navPlay._size.w/2-this.navPrev._size.w;
+dojo.style(this.navPlay,"marginLeft",_30+"px");
+var _31=dojo.marginBox(this.outerNode);
+var _32=this._currentImage.height-this.navPlay._size.h-10+this._getTopPadding();
+if(_32>this._currentImage.height){
+_32+=10;
+}
+dojo[this.imageIndex<1?"addClass":"removeClass"](this.navPrev,"slideShowCtrlHide");
+dojo[this.imageIndex+1>=this.maxPhotos?"addClass":"removeClass"](this.navNext,"slideShowCtrlHide");
+var _33=this;
+if(this._navAnim){
+this._navAnim.stop();
+}
+if(this._navShowing){
+return;
+}
+this._navAnim=dojo.fadeIn({node:this.navNode,duration:300,onEnd:function(){
+_33._navAnim=null;
+}});
+this._navAnim.play();
+this._navShowing=true;
+},_hideNav:function(e){
+if(!e||!this._overElement(this.outerNode,e)){
+var _34=this;
+if(this._navAnim){
+this._navAnim.stop();
+}
+this._navAnim=dojo.fadeOut({node:this.navNode,duration:300,onEnd:function(){
+_34._navAnim=null;
+}});
+this._navAnim.play();
+this._navShowing=false;
+}
+},_overElement:function(_35,e){
+if(typeof (dojo)=="undefined"){
+return false;
+}
+_35=dojo.byId(_35);
+var m={x:e.pageX,y:e.pageY};
+var bb=dojo._getBorderBox(_35);
+var _36=dojo.coords(_35,true);
+var _37=_36.x;
+return (m.x>=_37&&m.x<=(_37+bb.w)&&m.y>=_36.y&&m.y<=(top+bb.h));
+}});
+}
Index: trunk/web/dojo/dojox/image/ThumbnailPicker.js
===================================================================
--- trunk/web/dojo/dojox/image/ThumbnailPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/image/ThumbnailPicker.js	(revision 9)
@@ -0,0 +1,313 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.ThumbnailPicker"]){
+dojo._hasResource["dojox.image.ThumbnailPicker"]=true;
+dojo.provide("dojox.image.ThumbnailPicker");
+dojo.experimental("dojox.image.ThumbnailPicker");
+dojo.require("dojox.fx.scroll");
+dojo.require("dojo.fx.easing");
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.image.ThumbnailPicker",[dijit._Widget,dijit._Templated],{imageStore:null,request:null,size:500,thumbHeight:75,thumbWidth:100,useLoadNotifier:false,useHyperlink:false,hyperlinkTarget:"new",isClickable:true,isScrollable:true,isHorizontal:true,autoLoad:true,linkAttr:"link",imageThumbAttr:"imageUrlThumb",imageLargeAttr:"imageUrl",pageSize:20,titleAttr:"title",templateString:dojo.cache("dojox.image","resources/ThumbnailPicker.html","<div dojoAttachPoint=\"outerNode\" class=\"thumbOuter\">\n\t<div dojoAttachPoint=\"navPrev\" class=\"thumbNav thumbClickable\">\n\t  <img src=\"\" dojoAttachPoint=\"navPrevImg\"/>    \n\t</div>\n\t<div dojoAttachPoint=\"thumbScroller\" class=\"thumbScroller\">\n\t  <div dojoAttachPoint=\"thumbsNode\" class=\"thumbWrapper\"></div>\n\t</div>\n\t<div dojoAttachPoint=\"navNext\" class=\"thumbNav thumbClickable\">\n\t  <img src=\"\" dojoAttachPoint=\"navNextImg\"/>  \n\t</div>\n</div>\n"),_thumbs:[],_thumbIndex:0,_maxPhotos:0,_loadedImages:{},postCreate:function(){
+this.widgetid=this.id;
+this.inherited(arguments);
+this.pageSize=Number(this.pageSize);
+this._scrollerSize=this.size-(51*2);
+var _1=this._sizeProperty=this.isHorizontal?"width":"height";
+dojo.style(this.outerNode,"textAlign","center");
+dojo.style(this.outerNode,_1,this.size+"px");
+dojo.style(this.thumbScroller,_1,this._scrollerSize+"px");
+if(this.useHyperlink){
+dojo.subscribe(this.getClickTopicName(),this,function(_2){
+var _3=_2.index;
+var _4=this.imageStore.getValue(_2.data,this.linkAttr);
+if(!_4){
+return;
+}
+if(this.hyperlinkTarget=="new"){
+window.open(_4);
+}else{
+window.location=_4;
+}
+});
+}
+if(this.isClickable){
+dojo.addClass(this.thumbsNode,"thumbClickable");
+}
+this._totalSize=0;
+this.init();
+},init:function(){
+if(this.isInitialized){
+return false;
+}
+var _5=this.isHorizontal?"Horiz":"Vert";
+dojo.addClass(this.navPrev,"prev"+_5);
+dojo.addClass(this.navNext,"next"+_5);
+dojo.addClass(this.thumbsNode,"thumb"+_5);
+dojo.addClass(this.outerNode,"thumb"+_5);
+dojo.attr(this.navNextImg,"src",this._blankGif);
+dojo.attr(this.navPrevImg,"src",this._blankGif);
+this.connect(this.navPrev,"onclick","_prev");
+this.connect(this.navNext,"onclick","_next");
+this.isInitialized=true;
+if(this.isHorizontal){
+this._offsetAttr="offsetLeft";
+this._sizeAttr="offsetWidth";
+this._scrollAttr="scrollLeft";
+}else{
+this._offsetAttr="offsetTop";
+this._sizeAttr="offsetHeight";
+this._scrollAttr="scrollTop";
+}
+this._updateNavControls();
+if(this.imageStore&&this.request){
+this._loadNextPage();
+}
+return true;
+},getClickTopicName:function(){
+return (this.widgetId||this.id)+"/select";
+},getShowTopicName:function(){
+return (this.widgetId||this.id)+"/show";
+},setDataStore:function(_6,_7,_8){
+this.reset();
+this.request={query:{},start:_7.start||0,count:_7.count||10,onBegin:dojo.hitch(this,function(_9){
+this._maxPhotos=_9;
+})};
+if(_7.query){
+dojo.mixin(this.request.query,_7.query);
+}
+if(_8){
+dojo.forEach(["imageThumbAttr","imageLargeAttr","linkAttr","titleAttr"],function(_a){
+if(_8[_a]){
+this[_a]=_8[_a];
+}
+},this);
+}
+this.request.start=0;
+this.request.count=this.pageSize;
+this.imageStore=_6;
+this._loadInProgress=false;
+if(!this.init()){
+this._loadNextPage();
+}
+},reset:function(){
+this._loadedImages={};
+dojo.forEach(this._thumbs,function(_b){
+if(_b&&_b.parentNode){
+dojo.destroy(_b);
+}
+});
+this._thumbs=[];
+this.isInitialized=false;
+this._noImages=true;
+},isVisible:function(_c){
+var _d=this._thumbs[_c];
+if(!_d){
+return false;
+}
+var _e=this.isHorizontal?"offsetLeft":"offsetTop";
+var _f=this.isHorizontal?"offsetWidth":"offsetHeight";
+var _10=this.isHorizontal?"scrollLeft":"scrollTop";
+var _11=_d[_e]-this.thumbsNode[_e];
+return (_11>=this.thumbScroller[_10]&&_11+_d[_f]<=this.thumbScroller[_10]+this._scrollerSize);
+},resize:function(dim){
+var _12=this.isHorizontal?"w":"h";
+var _13=0;
+if(this._thumbs.length>0&&dojo.marginBox(this._thumbs[0]).w==0){
+return;
+}
+dojo.forEach(this._thumbs,dojo.hitch(this,function(_14){
+var mb=dojo.marginBox(_14.firstChild);
+var _15=mb[_12];
+_13+=(Number(_15)+10);
+if(this.useLoadNotifier&&mb.w>0){
+dojo.style(_14.lastChild,"width",(mb.w-4)+"px");
+}
+dojo.style(_14,"width",mb.w+"px");
+}));
+dojo.style(this.thumbsNode,this._sizeProperty,_13+"px");
+this._updateNavControls();
+},_next:function(){
+var pos=this.isHorizontal?"offsetLeft":"offsetTop";
+var _16=this.isHorizontal?"offsetWidth":"offsetHeight";
+var _17=this.thumbsNode[pos];
+var _18=this._thumbs[this._thumbIndex];
+var _19=_18[pos]-_17;
+var _1a=-1,img;
+for(var i=this._thumbIndex+1;i<this._thumbs.length;i++){
+img=this._thumbs[i];
+if(img[pos]-_17+img[_16]-_19>this._scrollerSize){
+this._showThumbs(i);
+return;
+}
+}
+},_prev:function(){
+if(this.thumbScroller[this.isHorizontal?"scrollLeft":"scrollTop"]==0){
+return;
+}
+var pos=this.isHorizontal?"offsetLeft":"offsetTop";
+var _1b=this.isHorizontal?"offsetWidth":"offsetHeight";
+var _1c=this._thumbs[this._thumbIndex];
+var _1d=_1c[pos]-this.thumbsNode[pos];
+var _1e=-1,img;
+for(var i=this._thumbIndex-1;i>-1;i--){
+img=this._thumbs[i];
+if(_1d-img[pos]>this._scrollerSize){
+this._showThumbs(i+1);
+return;
+}
+}
+this._showThumbs(0);
+},_checkLoad:function(img,_1f){
+dojo.publish(this.getShowTopicName(),[{index:_1f}]);
+this._updateNavControls();
+this._loadingImages={};
+this._thumbIndex=_1f;
+if(this.thumbsNode.offsetWidth-img.offsetLeft<(this._scrollerSize*2)){
+this._loadNextPage();
+}
+},_showThumbs:function(_20){
+_20=Math.min(Math.max(_20,0),this._maxPhotos);
+if(_20>=this._maxPhotos){
+return;
+}
+var img=this._thumbs[_20];
+if(!img){
+return;
+}
+var _21=img.offsetLeft-this.thumbsNode.offsetLeft;
+var top=img.offsetTop-this.thumbsNode.offsetTop;
+var _22=this.isHorizontal?_21:top;
+if((_22>=this.thumbScroller[this._scrollAttr])&&(_22+img[this._sizeAttr]<=this.thumbScroller[this._scrollAttr]+this._scrollerSize)){
+return;
+}
+if(this.isScrollable){
+var _23=this.isHorizontal?{x:_21,y:0}:{x:0,y:top};
+dojox.fx.smoothScroll({target:_23,win:this.thumbScroller,duration:300,easing:dojo.fx.easing.easeOut,onEnd:dojo.hitch(this,"_checkLoad",img,_20)}).play(10);
+}else{
+if(this.isHorizontal){
+this.thumbScroller.scrollLeft=_21;
+}else{
+this.thumbScroller.scrollTop=top;
+}
+this._checkLoad(img,_20);
+}
+},markImageLoaded:function(_24){
+var _25=dojo.byId("loadingDiv_"+this.widgetid+"_"+_24);
+if(_25){
+this._setThumbClass(_25,"thumbLoaded");
+}
+this._loadedImages[_24]=true;
+},_setThumbClass:function(_26,_27){
+if(!this.autoLoad){
+return;
+}
+dojo.addClass(_26,_27);
+},_loadNextPage:function(){
+if(this._loadInProgress){
+return;
+}
+this._loadInProgress=true;
+var _28=this.request.start+(this._noImages?0:this.pageSize);
+var pos=_28;
+while(pos<this._thumbs.length&&this._thumbs[pos]){
+pos++;
+}
+var _29=this.imageStore;
+var _2a=function(_2b,_2c){
+if(_29!=this.imageStore){
+return;
+}
+if(_2b&&_2b.length){
+var _2d=0;
+var _2e=dojo.hitch(this,function(){
+if(_2d>=_2b.length){
+this._loadInProgress=false;
+return;
+}
+var _2f=_2d++;
+this._loadImage(_2b[_2f],pos+_2f,_2e);
+});
+_2e();
+this._updateNavControls();
+}else{
+this._loadInProgress=false;
+}
+};
+var _30=function(){
+this._loadInProgress=false;
+};
+this.request.onComplete=dojo.hitch(this,_2a);
+this.request.onError=dojo.hitch(this,_30);
+this.request.start=_28;
+this._noImages=false;
+this.imageStore.fetch(this.request);
+},_loadImage:function(_31,_32,_33){
+var _34=this.imageStore;
+var url=_34.getValue(_31,this.imageThumbAttr);
+var _35=dojo.create("div",{id:"img_"+this.widgetid+"_"+_32});
+var img=dojo.create("img",{},_35);
+img._index=_32;
+img._data=_31;
+this._thumbs[_32]=_35;
+var _36;
+if(this.useLoadNotifier){
+_36=dojo.create("div",{id:"loadingDiv_"+this.widgetid+"_"+_32},_35);
+this._setThumbClass(_36,this._loadedImages[_32]?"thumbLoaded":"thumbNotifier");
+}
+var _37=dojo.marginBox(this.thumbsNode);
+var _38;
+var _39;
+if(this.isHorizontal){
+_38=this.thumbWidth;
+_39="w";
+}else{
+_38=this.thumbHeight;
+_39="h";
+}
+_37=_37[_39];
+var sl=this.thumbScroller.scrollLeft,st=this.thumbScroller.scrollTop;
+dojo.style(this.thumbsNode,this._sizeProperty,(_37+_38+20)+"px");
+this.thumbScroller.scrollLeft=sl;
+this.thumbScroller.scrollTop=st;
+this.thumbsNode.appendChild(_35);
+dojo.connect(img,"onload",this,dojo.hitch(this,function(){
+if(_34!=this.imageStore){
+return false;
+}
+this.resize();
+setTimeout(_33,0);
+return false;
+}));
+dojo.connect(img,"onclick",this,function(evt){
+dojo.publish(this.getClickTopicName(),[{index:evt.target._index,data:evt.target._data,url:img.getAttribute("src"),largeUrl:this.imageStore.getValue(_31,this.imageLargeAttr),title:this.imageStore.getValue(_31,this.titleAttr),link:this.imageStore.getValue(_31,this.linkAttr)}]);
+return false;
+});
+dojo.addClass(img,"imageGalleryThumb");
+img.setAttribute("src",url);
+var _3a=this.imageStore.getValue(_31,this.titleAttr);
+if(_3a){
+img.setAttribute("title",_3a);
+}
+this._updateNavControls();
+},_updateNavControls:function(){
+var _3b=[];
+var _3c=function(_3d,add){
+var fn=add?"addClass":"removeClass";
+dojo[fn](_3d,"enabled");
+dojo[fn](_3d,"thumbClickable");
+};
+var pos=this.isHorizontal?"scrollLeft":"scrollTop";
+var _3e=this.isHorizontal?"offsetWidth":"offsetHeight";
+_3c(this.navPrev,(this.thumbScroller[pos]>0));
+var _3f=this._thumbs[this._thumbs.length-1];
+var _40=(this.thumbScroller[pos]+this._scrollerSize<this.thumbsNode[_3e]);
+_3c(this.navNext,_40);
+}});
+}
Index: trunk/web/dojo/dojox/image/Badge.js
===================================================================
--- trunk/web/dojo/dojox/image/Badge.js	(revision 0)
+++ trunk/web/dojo/dojox/image/Badge.js	(revision 9)
@@ -0,0 +1,102 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.Badge"]){
+dojo._hasResource["dojox.image.Badge"]=true;
+dojo.provide("dojox.image.Badge");
+dojo.experimental("dojox.image.Badge");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.fx.easing");
+dojo.declare("dojox.image.Badge",[dijit._Widget,dijit._Templated],{baseClass:"dojoxBadge",templateString:"<div class=\"dojoxBadge\" dojoAttachPoint=\"containerNode\"></div>",children:"div.dojoxBadgeImage",rows:4,cols:5,cellSize:50,cellMargin:1,delay:2000,threads:1,easing:"dojo.fx.easing.backOut",startup:function(){
+if(this._started){
+return;
+}
+if(dojo.isString(this.easing)){
+this.easing=dojo.getObject(this.easing);
+}
+this.inherited(arguments);
+this._init();
+},_init:function(){
+var _1=0,_2=this.cellSize;
+dojo.style(this.domNode,{width:_2*this.cols+"px",height:_2*this.rows+"px"});
+this._nl=dojo.query(this.children,this.containerNode).forEach(function(n,_3){
+var _4=_3%this.cols,t=_1*_2,l=_4*_2,m=this.cellMargin*2;
+dojo.style(n,{top:t+"px",left:l+"px",width:_2-m+"px",height:_2-m+"px"});
+if(_4==this.cols-1){
+_1++;
+}
+dojo.addClass(n,this.baseClass+"Image");
+},this);
+var l=this._nl.length;
+while(this.threads--){
+var s=Math.floor(Math.random()*l);
+setTimeout(dojo.hitch(this,"_enbiggen",{target:this._nl[s]}),this.delay*this.threads);
+}
+},_getCell:function(n){
+var _5=this._nl.indexOf(n);
+if(_5>=0){
+var _6=_5%this.cols;
+var _7=Math.floor(_5/this.cols);
+return {x:_6,y:_7,n:this._nl[_5],io:_5};
+}else{
+return undefined;
+}
+},_getImage:function(){
+return "url('')";
+},_enbiggen:function(e){
+var _8=this._getCell(e.target||e);
+if(_8){
+var m=this.cellMargin,_9=(this.cellSize*2)-(m*2),_a={height:_9,width:_9};
+var _b=function(){
+return Math.round(Math.random());
+};
+if(_8.x==this.cols-1||(_8.x>0&&_b())){
+_a.left=this.cellSize*(_8.x-m);
+}
+if(_8.y==this.rows-1||(_8.y>0&&_b())){
+_a.top=this.cellSize*(_8.y-m);
+}
+var bc=this.baseClass;
+dojo.addClass(_8.n,bc+"Top");
+dojo.addClass(_8.n,bc+"Seen");
+dojo.animateProperty({node:_8.n,properties:_a,onEnd:dojo.hitch(this,"_loadUnder",_8,_a),easing:this.easing}).play();
+}
+},_loadUnder:function(_c,_d){
+var _e=_c.io;
+var _f=[];
+var _10=(_d.left>=0);
+var _11=(_d.top>=0);
+var c=this.cols,e=_e+(_10?-1:1),f=_e+(_11?-c:c),g=(_11?(_10?e-c:f+1):(_10?f-1:e+c)),bc=this.baseClass;
+dojo.forEach([e,f,g],function(x){
+var n=this._nl[x];
+if(n){
+if(dojo.hasClass(n,bc+"Seen")){
+dojo.removeClass(n,bc+"Seen");
+}
+}
+},this);
+setTimeout(dojo.hitch(this,"_disenbiggen",_c,_d),this.delay*1.25);
+},_disenbiggen:function(_12,_13){
+if(_13.top>=0){
+_13.top+=this.cellSize;
+}
+if(_13.left>=0){
+_13.left+=this.cellSize;
+}
+var _14=this.cellSize-(this.cellMargin*2);
+dojo.animateProperty({node:_12.n,properties:dojo.mixin(_13,{width:_14,height:_14}),onEnd:dojo.hitch(this,"_cycle",_12,_13)}).play(5);
+},_cycle:function(_15,_16){
+var bc=this.baseClass;
+dojo.removeClass(_15.n,bc+"Top");
+var ns=this._nl.filter(function(n){
+return !dojo.hasClass(n,bc+"Seen");
+});
+var c=ns[Math.floor(Math.random()*ns.length)];
+setTimeout(dojo.hitch(this,"_enbiggen",{target:c}),this.delay/2);
+}});
+}
Index: trunk/web/dojo/dojox/image/README
===================================================================
--- trunk/web/dojo/dojox/image/README	(revision 0)
+++ trunk/web/dojo/dojox/image/README	(revision 9)
@@ -0,0 +1,88 @@
+-------------------------------------------------------------------------------
+dojox.image - Image Related Widgets and Components
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 10/31/07
+-------------------------------------------------------------------------------
+Project state:
+
+[Badge] experimental
+[FlickrBadge] experimental
+[Gallery] experimental
+[Lightbox] beta
+[Magnifier] experimental
+[MagnifierLite] experimental
+[SlideShow] experimental
+[ThumbnailPicker] experimental
+
+-------------------------------------------------------------------------------
+Credits
+
+[Badge] Peter Higgins (dante)
+[FlickrBadge] Bryan Forbes (BryanForbes)
+[Gallery] Shane O'Sullivan (sos)
+[Lightbox] Peter Higgins (dante)
+[Magnifier] Peter Higgins (dante)
+[MagnifierLite] Peter Higgins (dante)
+[SlideShow] Shane O'Sullivan (sos)
+[ThumbnailPicker] Shane O'Sullivan (sos)
+
+-------------------------------------------------------------------------------
+Project description 
+
+	A class to provide a common API for images, and home for image
+	related Widgets.
+ 
+-------------------------------------------------------------------------------
+Dependencies:
+
+	LightBox: dojo core, dojox.fx and optionally dojox.data. uses
+	either tundra or soria theme, no standalone icons.
+
+	SlideShow: dojo core, dojo.fx, and dojo.data (optional 
+	dojox.data store implementations apply)
+
+	ThumbNailPicker: dojo core, dojo.fx and dojo.data. Combined
+	with a SlideShow, creates a sample Gallery app.
+
+	Gallery: core, dojox.image.SlideShow, dojox.image.ThumbNailPicker
+
+	Magnifier: (prototype) dojo core, dijit._Widget, dojox.gfx
+	
+	Badge: (prototype) dojo core, dijit._Widget + _Templated 
+
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/dojo/dojox/trunk/image/*
+
+Install into the following directory structure:
+/dojox/image/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
+Additional Notes
+
+	LightBox: currently works as individual items, and grouped items,
+	but usage of dojo.data is broken (atm). the API is subject to 
+ 	change, and is marked accordingly.
+
+	Hoping to implement: Carossel, and Reflect using
+	a common API provided by dojox.image.Pane (?) 
+
+	SlideShow: Shows an image, one by one, from a datastore. Acts
+	as standing ImagePane implementation, 
+
+	Gallery: A combination Thumbnail view and SlideShow, using
+	a datastore, and providing navigation, and common API. 
+
+	Magnifier: Unobtrusive way to attach a hovering window window
+	when moving the mouse over an image. The window shows a a zoomed
+	version of the original source. (prototype)
+
+	Badge: (prototype) A Javascript version of a FlickrBadge thingr, 
+	which loops through and sizes children in a loop.
Index: trunk/web/dojo/dojox/image/_base.js
===================================================================
--- trunk/web/dojo/dojox/image/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/image/_base.js	(revision 9)
@@ -0,0 +1,27 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image._base"]){
+dojo._hasResource["dojox.image._base"]=true;
+dojo.provide("dojox.image._base");
+(function(d){
+var _1;
+dojox.image.preload=function(_2){
+if(!_1){
+_1=d.create("div",{style:{position:"absolute",top:"-9999px",height:"1px",overflow:"hidden"}},d.body());
+}
+return d.map(_2,function(_3){
+return d.create("img",{src:_3},_1);
+});
+};
+if(d.config.preloadImages){
+d.addOnLoad(function(){
+dojox.image.preload(d.config.preloadImages);
+});
+}
+})(dojo);
+}
Index: trunk/web/dojo/dojox/image/LightboxNano.js
===================================================================
--- trunk/web/dojo/dojox/image/LightboxNano.js	(revision 0)
+++ trunk/web/dojo/dojox/image/LightboxNano.js	(revision 9)
@@ -0,0 +1,122 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.LightboxNano"]){
+dojo._hasResource["dojox.image.LightboxNano"]=true;
+dojo.provide("dojox.image.LightboxNano");
+dojo.require("dojo.fx");
+(function(d){
+var _1="absolute",_2="visibility",_3=function(){
+var _4=(d.doc.compatMode=="BackCompat")?d.body():d.doc.documentElement,_5=dojo._docScroll();
+return {w:_4.clientWidth,h:_4.clientHeight,l:_5.x,t:_5.y};
+};
+d.declare("dojox.image.LightboxNano",null,{href:"",duration:500,preloadDelay:5000,constructor:function(p,n){
+var _6=this;
+d.mixin(_6,p);
+n=_6._node=dojo.byId(n);
+if(n){
+if(!/a/i.test(n.tagName)){
+var a=d.create("a",{href:_6.href,"class":n.className},n,"after");
+n.className="";
+a.appendChild(n);
+n=a;
+}
+d.style(n,"position","relative");
+_6._createDiv("dojoxEnlarge",n);
+d.setSelectable(n,false);
+_6._onClickEvt=d.connect(n,"onclick",_6,"_load");
+}
+if(_6.href){
+setTimeout(function(){
+(new Image()).src=_6.href;
+_6._hideLoading();
+},_6.preloadDelay);
+}
+},destroy:function(){
+var a=this._connects||[];
+a.push(this._onClickEvt);
+d.forEach(a,d.disconnect);
+d.destroy(this._node);
+},_createDiv:function(_7,_8,_9){
+return d.create("div",{"class":_7,style:{position:_1,display:_9?"":"none"}},_8);
+},_load:function(e){
+var _a=this;
+e&&d.stopEvent(e);
+if(!_a._loading){
+_a._loading=true;
+_a._reset();
+var i=_a._img=d.create("img",{style:{visibility:"hidden",cursor:"pointer",position:_1,top:0,left:0,zIndex:9999999}},d.body()),ln=_a._loadingNode,n=d.query("img",_a._node)[0]||_a._node,a=d.position(n,true),c=d.contentBox(n),b=d._getBorderExtents(n);
+if(ln==null){
+_a._loadingNode=ln=_a._createDiv("dojoxLoading",_a._node,true);
+var l=d.marginBox(ln);
+d.style(ln,{left:parseInt((c.w-l.w)/2)+"px",top:parseInt((c.h-l.h)/2)+"px"});
+}
+c.x=a.x-10+b.l;
+c.y=a.y-10+b.t;
+_a._start=c;
+_a._connects=[d.connect(i,"onload",_a,"_show")];
+i.src=_a.href;
+}
+},_hideLoading:function(){
+if(this._loadingNode){
+d.style(this._loadingNode,"display","none");
+}
+this._loadingNode=false;
+},_show:function(){
+var _b=this,vp=_3(),w=_b._img.width,h=_b._img.height,_c=parseInt((vp.w-20)*0.9),_d=parseInt((vp.h-20)*0.9),dd=d.doc,bg=_b._bg=d.create("div",{style:{backgroundColor:"#000",opacity:0,position:_1,zIndex:9999998}},d.body()),ln=_b._loadingNode;
+if(_b._loadingNode){
+_b._hideLoading();
+}
+d.style(_b._img,{border:"10px solid #fff",visibility:"visible"});
+d.style(_b._node,_2,"hidden");
+_b._loading=false;
+_b._connects=_b._connects.concat([d.connect(dd,"onmousedown",_b,"_hide"),d.connect(dd,"onkeypress",_b,"_key"),d.connect(window,"onresize",_b,"_sizeBg")]);
+if(w>_c){
+h=h*_c/w;
+w=_c;
+}
+if(h>_d){
+w=w*_d/h;
+h=_d;
+}
+_b._end={x:(vp.w-20-w)/2+vp.l,y:(vp.h-20-h)/2+vp.t,w:w,h:h};
+_b._sizeBg();
+d.fx.combine([_b._anim(_b._img,_b._coords(_b._start,_b._end)),_b._anim(bg,{opacity:0.5})]).play();
+},_sizeBg:function(){
+var dd=d.doc.documentElement;
+d.style(this._bg,{top:0,left:0,width:dd.scrollWidth+"px",height:dd.scrollHeight+"px"});
+},_key:function(e){
+d.stopEvent(e);
+this._hide();
+},_coords:function(s,e){
+return {left:{start:s.x,end:e.x},top:{start:s.y,end:e.y},width:{start:s.w,end:e.w},height:{start:s.h,end:e.h}};
+},_hide:function(){
+var _e=this;
+d.forEach(_e._connects,d.disconnect);
+_e._connects=[];
+d.fx.combine([_e._anim(_e._img,_e._coords(_e._end,_e._start),"_reset"),_e._anim(_e._bg,{opacity:0})]).play();
+},_reset:function(){
+d.style(this._node,_2,"visible");
+d.forEach([this._img,this._bg],function(n){
+d.destroy(n);
+n=null;
+});
+this._node.focus();
+},_anim:function(_f,_10,_11){
+return d.animateProperty({node:_f,duration:this.duration,properties:_10,onEnd:_11?d.hitch(this,_11):null});
+},show:function(_12){
+_12=_12||{};
+this.href=_12.href||this.href;
+var n=d.byId(_12.origin),vp=_3();
+this._node=n||d.create("div",{style:{position:_1,width:0,hieght:0,left:(vp.l+(vp.w/2))+"px",top:(vp.t+(vp.h/2))+"px"}},d.body());
+this._load();
+if(!n){
+d.destroy(this._node);
+}
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/image/FlickrBadge.js
===================================================================
--- trunk/web/dojo/dojox/image/FlickrBadge.js	(revision 0)
+++ trunk/web/dojo/dojox/image/FlickrBadge.js	(revision 9)
@@ -0,0 +1,60 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image.FlickrBadge"]){
+dojo._hasResource["dojox.image.FlickrBadge"]=true;
+dojo.provide("dojox.image.FlickrBadge");
+dojo.require("dojox.image.Badge");
+dojo.require("dojox.data.FlickrRestStore");
+dojo.declare("dojox.image.FlickrBadge",dojox.image.Badge,{children:"a.flickrImage",userid:"",username:"",setid:"",tags:"",searchText:"",target:"",apikey:"8c6803164dbc395fb7131c9d54843627",_store:null,postCreate:function(){
+if(this.username&&!this.userid){
+var _1=dojo.io.script.get({url:"http://www.flickr.com/services/rest/",preventCache:true,content:{format:"json",method:"flickr.people.findByUsername",api_key:this.apikey,username:this.username},callbackParamName:"jsoncallback"});
+_1.addCallback(this,function(_2){
+if(_2.user&&_2.user.nsid){
+this.userid=_2.user.nsid;
+if(!this._started){
+this.startup();
+}
+}
+});
+}
+},startup:function(){
+if(this._started){
+return;
+}
+if(this.userid){
+var _3={userid:this.userid};
+if(this.setid){
+_3["setid"]=this.setid;
+}
+if(this.tags){
+_3.tags=this.tags;
+}
+if(this.searchText){
+_3.text=this.searchText;
+}
+var _4=arguments;
+this._store=new dojox.data.FlickrRestStore({apikey:this.apikey});
+this._store.fetch({count:this.cols*this.rows,query:_3,onComplete:dojo.hitch(this,function(_5){
+dojo.forEach(_5,function(_6){
+var a=dojo.doc.createElement("a");
+dojo.addClass(a,"flickrImage");
+a.href=this._store.getValue(_6,"link");
+if(this.target){
+a.target=this.target;
+}
+var _7=dojo.doc.createElement("img");
+_7.src=this._store.getValue(_6,"imageUrlThumb");
+dojo.style(_7,{width:"100%",height:"100%"});
+a.appendChild(_7);
+this.domNode.appendChild(a);
+},this);
+dojox.image.Badge.prototype.startup.call(this,_4);
+})});
+}
+}});
+}
Index: trunk/web/dojo/dojox/mdnd/README
===================================================================
--- trunk/web/dojo/dojox/mdnd/README	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/README	(revision 9)
@@ -0,0 +1,94 @@
+-------------------------------------------------------------------------------
+dojox.mdnd Experimental coordinates based moveable drag and drop.
+-------------------------------------------------------------------------------
+Version 1.1
+Release date: 09/04/2009
+-------------------------------------------------------------------------------
+Project state:
+
+[AreaManager]	beta
+[AutoScroll]	beta
+[DropIndicator]	beta
+[Movable]	beta
+[PureSource]	beta
+[adapter/DndFromDojo] experimental
+[adapter/DndToDojo] experimental
+[dropMode/DefaultDropMode] beta
+[dropMode/OverDropMode] experimental
+
+-------------------------------------------------------------------------------
+Credits
+
+Erwan Morvillez (emorvillez), 
+Jean-Jacques Patard (jjpatard), 
+Jeff Cunat (jfcunat)
+
+
+-------------------------------------------------------------------------------
+Project description
+
+Alternative Drag and Drop solution based on coordinates of drag element and
+targets instead of mouseover. It allows dragging directly the nodes (like
+dojo.dnd.Moveable) instead of an avatar (as in dojo.dnd). dojo.dnd and
+dojox.mdnd are compatible by using adapters.
+
+PureSource is just a rewrite of dojo.dnd.Source to only allow drag start and no
+drop without testing acceptance.
+
+-------------------------------------------------------------------------------
+Dependencies
+
+	require Dojo Core
+
+-------------------------------------------------------------------------------
+Installation:
+
+	checkout:
+
+	http://svn.dojotoolkit.org/src/dojox/trunk/mdnd/
+
+	and require via:
+		dojo.require("dojox.mdnd.AreaManager");
+
+-------------------------------------------------------------------------------
+Basic Usage:
+
+	dojo.require("dojox.mdnd.AreaManager");
+	dojo.require("dojox.mdnd.DropIndicator");
+	dojo.require("dojox.mdnd.dropMode.DefaultDropMode");
+			
+	var init = function(){
+		var m = dojox.mdnd.areaManager();
+		m.areaClass = "dndArea";
+		m.dragHandleClass = "dragHandle";
+		m.registerByClass();
+	};
+	
+	dojo.addOnLoad(init);
+	
+	...
+	
+	<div style="position:absolute; top:80px; left:50px;">
+	<h2>Accepts Type1 items</h2>
+	<div class="dndArea container" accept="type1">
+		<div class="dndItem" dndType="type1">
+			<div class="dragHandle">Item Type 1</div>
+			<div>
+				<p>Proin aliquet accumsan nunc. Duis nec tortor.</p>
+
+			</div>
+		</div>
+		<div class="dndItem simpleBlock" dndType="type2">
+			<div class="dragHandle">Item Type2</div>
+			<div>
+				<p>Proin aliquet accumsan nunc. Duis nec tortor.</p>
+			</div>
+		</div>
+
+	</div>
+
+	<div style="position:absolute; top:80px; left:350px;">
+		<h2>Accepts Type2 items</h2>
+		<div class="dndArea container" accept="type2">
+		</div>
+	</div>
Index: trunk/web/dojo/dojox/mdnd/AreaManager.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/AreaManager.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/AreaManager.js	(revision 9)
@@ -0,0 +1,352 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.AreaManager"]){
+dojo._hasResource["dojox.mdnd.AreaManager"]=true;
+dojo.provide("dojox.mdnd.AreaManager");
+dojo.require("dojox.mdnd.Moveable");
+dojo.declare("dojox.mdnd.AreaManager",null,{autoRefresh:true,areaClass:"dojoxDndArea",dragHandleClass:"dojoxDragHandle",constructor:function(){
+this._areaList=[];
+this.resizeHandler=dojo.connect(dojo.global,"onresize",this,function(){
+this._dropMode.updateAreas(this._areaList);
+});
+this._oldIndexArea=this._currentIndexArea=this._oldDropIndex=this._currentDropIndex=this._sourceIndexArea=this._sourceDropIndex=-1;
+},init:function(){
+this.registerByClass();
+},registerByNode:function(_1,_2){
+var _3=this._getIndexArea(_1);
+if(_1&&_3==-1){
+var _4=_1.getAttribute("accept");
+var _5=(_4)?_4.split(/\s*,\s*/):["text"];
+var _6={"node":_1,"items":[],"coords":{},"margin":null,"accept":_5,"initItems":false};
+dojo.forEach(this._getChildren(_1),function(_7){
+this._setMarginArea(_6,_7);
+_6.items.push(this._addMoveableItem(_7));
+},this);
+this._areaList=this._dropMode.addArea(this._areaList,_6);
+if(!_2){
+this._dropMode.updateAreas(this._areaList);
+}
+dojo.publish("/dojox/mdnd/manager/register",[_1]);
+}
+},registerByClass:function(){
+dojo.query("."+this.areaClass).forEach(function(_8){
+this.registerByNode(_8,true);
+},this);
+this._dropMode.updateAreas(this._areaList);
+},unregister:function(_9){
+var _a=this._getIndexArea(_9);
+if(_a!=-1){
+dojo.forEach(this._areaList[_a].items,function(_b){
+this._deleteMoveableItem(_b);
+},this);
+this._areaList.splice(_a,1);
+this._dropMode.updateAreas(this._areaList);
+return true;
+}
+return false;
+},_addMoveableItem:function(_c){
+_c.setAttribute("tabIndex","0");
+var _d=this._searchDragHandle(_c);
+var _e=new dojox.mdnd.Moveable({"handle":_d,"skip":true},_c);
+dojo.addClass(_d||_c,"dragHandle");
+var _f=_c.getAttribute("dndType");
+var _10={"item":_e,"type":_f?_f.split(/\s*,\s*/):["text"],"handlers":[dojo.connect(_e,"onDragStart",this,"onDragStart")]};
+if(dijit&&dijit.byNode){
+var _11=dijit.byNode(_c);
+if(_11){
+_10.type=_11.dndType?_11.dndType.split(/\s*,\s*/):["text"];
+_10.handlers.push(dojo.connect(_11,"uninitialize",this,function(){
+this.removeDragItem(_c.parentNode,_e.node);
+}));
+}
+}
+return _10;
+},_deleteMoveableItem:function(_12){
+dojo.forEach(_12.handlers,function(_13){
+dojo.disconnect(_13);
+});
+var _14=_12.item.node,_15=this._searchDragHandle(_14);
+dojo.removeClass(_15||_14,"dragHandle");
+_12.item.destroy();
+},_getIndexArea:function(_16){
+if(_16){
+for(var i=0;i<this._areaList.length;i++){
+if(this._areaList[i].node===_16){
+return i;
+}
+}
+}
+return -1;
+},_searchDragHandle:function(_17){
+if(_17){
+var _18=this.dragHandleClass.split(" "),_19=_18.length,_1a="";
+dojo.forEach(_18,function(css,i){
+_1a+="."+css;
+if(i!=_19-1){
+_1a+=", ";
+}
+});
+return dojo.query(_1a,_17)[0];
+}
+},addDragItem:function(_1b,_1c,_1d,_1e){
+var add=true;
+if(!_1e){
+add=_1b&&_1c&&(_1c.parentNode===null||(_1c.parentNode&&_1c.parentNode.nodeType!==1));
+}
+if(add){
+var _1f=this._getIndexArea(_1b);
+if(_1f!==-1){
+var _20=this._addMoveableItem(_1c),_21=this._areaList[_1f].items;
+if(0<=_1d&&_1d<_21.length){
+var _22=_21.slice(0,_1d),_23=_21.slice(_1d,_21.length);
+_22[_22.length]=_20;
+this._areaList[_1f].items=_22.concat(_23);
+_1b.insertBefore(_1c,_21[_1d].item.node);
+}else{
+this._areaList[_1f].items.push(_20);
+_1b.appendChild(_1c);
+}
+this._setMarginArea(this._areaList[_1f],_1c);
+this._areaList[_1f].initItems=false;
+return true;
+}
+}
+return false;
+},removeDragItem:function(_24,_25){
+var _26=this._getIndexArea(_24);
+if(_24&&_26!==-1){
+var _27=this._areaList[_26].items;
+for(var j=0;j<_27.length;j++){
+if(_27[j].item.node===_25){
+this._deleteMoveableItem(_27[j]);
+_27.splice(j,1);
+return _24.removeChild(_25);
+}
+}
+}
+return null;
+},_getChildren:function(_28){
+var _29=[];
+dojo.forEach(_28.childNodes,function(_2a){
+if(_2a.nodeType==1){
+if(dijit&&dijit.byNode){
+var _2b=dijit.byNode(_2a);
+if(_2b){
+if(!_2b.dragRestriction){
+_29.push(_2a);
+}
+}else{
+_29.push(_2a);
+}
+}else{
+_29.push(_2a);
+}
+}
+});
+return _29;
+},_setMarginArea:function(_2c,_2d){
+if(_2c&&_2c.margin===null&&_2d){
+_2c.margin=dojo._getMarginExtents(_2d);
+}
+},findCurrentIndexArea:function(_2e,_2f){
+this._oldIndexArea=this._currentIndexArea;
+this._currentIndexArea=this._dropMode.getTargetArea(this._areaList,_2e,this._currentIndexArea);
+if(this._currentIndexArea!=this._oldIndexArea){
+if(this._oldIndexArea!=-1){
+this.onDragExit(_2e,_2f);
+}
+if(this._currentIndexArea!=-1){
+this.onDragEnter(_2e,_2f);
+}
+}
+return this._currentIndexArea;
+},_isAccepted:function(_30,_31){
+this._accept=false;
+for(var i=0;i<_31.length;++i){
+for(var j=0;j<_30.length;++j){
+if(_30[j]==_31[i]){
+this._accept=true;
+break;
+}
+}
+}
+},onDragStart:function(_32,_33,_34){
+if(this.autoRefresh){
+this._dropMode.updateAreas(this._areaList);
+}
+var _35=(dojo.isWebKit)?dojo.body():dojo.body().parentNode;
+if(!this._cover){
+this._cover=dojo.create("div",{"class":"dndCover"});
+this._cover2=dojo.clone(this._cover);
+dojo.addClass(this._cover2,"dndCover2");
+}
+var h=_35.scrollHeight+"px";
+this._cover.style.height=this._cover2.style.height=h;
+dojo.body().appendChild(this._cover);
+dojo.body().appendChild(this._cover2);
+this._dragStartHandler=dojo.connect(_32.ownerDocument,"ondragstart",dojo,"stopEvent");
+this._sourceIndexArea=this._lastValidIndexArea=this._currentIndexArea=this._getIndexArea(_32.parentNode);
+var _36=this._areaList[this._sourceIndexArea];
+var _37=_36.items;
+for(var i=0;i<_37.length;i++){
+if(_37[i].item.node==_32){
+this._dragItem=_37[i];
+this._dragItem.handlers.push(dojo.connect(this._dragItem.item,"onDrag",this,"onDrag"));
+this._dragItem.handlers.push(dojo.connect(this._dragItem.item,"onDragEnd",this,"onDrop"));
+_37.splice(i,1);
+this._currentDropIndex=this._sourceDropIndex=i;
+break;
+}
+}
+var _38=null;
+if(this._sourceDropIndex!==_36.items.length){
+_38=_36.items[this._sourceDropIndex].item.node;
+}
+if(dojo.isIE>7){
+this._eventsIE7=[dojo.connect(this._cover,"onmouseover",dojo,"stopEvent"),dojo.connect(this._cover,"onmouseout",dojo,"stopEvent"),dojo.connect(this._cover,"onmouseenter",dojo,"stopEvent"),dojo.connect(this._cover,"onmouseleave",dojo,"stopEvent")];
+}
+var s=_32.style;
+s.left=_33.x+"px";
+s.top=_33.y+"px";
+if(s.position=="relative"||s.position==""){
+s.position="absolute";
+}
+this._cover.appendChild(_32);
+this._dropIndicator.place(_36.node,_38,_34);
+dojo.addClass(_32,"dragNode");
+this._accept=true;
+dojo.publish("/dojox/mdnd/drag/start",[_32,_36,this._sourceDropIndex]);
+},onDragEnter:function(_39,_3a){
+if(this._currentIndexArea===this._sourceIndexArea){
+this._accept=true;
+}else{
+this._isAccepted(this._dragItem.type,this._areaList[this._currentIndexArea].accept);
+}
+},onDragExit:function(_3b,_3c){
+this._accept=false;
+},onDrag:function(_3d,_3e,_3f,_40){
+var _41=this._dropMode.getDragPoint(_3e,_3f,_40);
+this.findCurrentIndexArea(_41,_3f);
+if(this._currentIndexArea!==-1&&this._accept){
+this.placeDropIndicator(_41,_3f);
+}
+},placeDropIndicator:function(_42,_43){
+this._oldDropIndex=this._currentDropIndex;
+var _44=this._areaList[this._currentIndexArea];
+if(!_44.initItems){
+this._dropMode.initItems(_44);
+}
+this._currentDropIndex=this._dropMode.getDropIndex(_44,_42);
+if(!(this._currentIndexArea===this._oldIndexArea&&this._oldDropIndex===this._currentDropIndex)){
+this._placeDropIndicator(_43);
+}
+return this._currentDropIndex;
+},_placeDropIndicator:function(_45){
+var _46=this._areaList[this._lastValidIndexArea];
+var _47=this._areaList[this._currentIndexArea];
+this._dropMode.refreshItems(_46,this._oldDropIndex,_45,false);
+var _48=null;
+if(this._currentDropIndex!=-1){
+_48=_47.items[this._currentDropIndex].item.node;
+}
+this._dropIndicator.place(_47.node,_48);
+this._lastValidIndexArea=this._currentIndexArea;
+this._dropMode.refreshItems(_47,this._currentDropIndex,_45,true);
+},onDropCancel:function(){
+if(!this._accept){
+var _49=this._getIndexArea(this._dropIndicator.node.parentNode);
+if(_49!=-1){
+this._currentIndexArea=_49;
+}else{
+this._currentIndexArea=0;
+}
+}
+},onDrop:function(_4a){
+this.onDropCancel();
+var _4b=this._areaList[this._currentIndexArea];
+dojo.removeClass(_4a,"dragNode");
+var _4c=_4a.style;
+_4c.position="relative";
+_4c.left="0";
+_4c.top="0";
+_4c.width="auto";
+if(_4b.node==this._dropIndicator.node.parentNode){
+_4b.node.insertBefore(_4a,this._dropIndicator.node);
+}else{
+_4b.node.appendChild(_4a);
+this._currentDropIndex=_4b.items.length;
+}
+var _4d=this._currentDropIndex;
+if(_4d==-1){
+_4d=_4b.items.length;
+}
+var _4e=_4b.items;
+var _4f=_4e.slice(0,_4d);
+var _50=_4e.slice(_4d,_4e.length);
+_4f[_4f.length]=this._dragItem;
+_4b.items=_4f.concat(_50);
+this._setMarginArea(_4b,_4a);
+dojo.forEach(this._areaList,function(obj){
+obj.initItems=false;
+});
+dojo.disconnect(this._dragItem.handlers.pop());
+dojo.disconnect(this._dragItem.handlers.pop());
+this._resetAfterDrop();
+if(this._cover){
+dojo.body().removeChild(this._cover);
+dojo.body().removeChild(this._cover2);
+}
+dojo.publish("/dojox/mdnd/drop",[_4a,_4b,_4d]);
+},_resetAfterDrop:function(){
+this._accept=false;
+this._dragItem=null;
+this._currentDropIndex=-1;
+this._currentIndexArea=-1;
+this._oldDropIndex=-1;
+this._sourceIndexArea=-1;
+this._sourceDropIndex=-1;
+this._dropIndicator.remove();
+if(this._dragStartHandler){
+dojo.disconnect(this._dragStartHandler);
+}
+if(dojo.isIE>7){
+dojo.forEach(this._eventsIE7,dojo.disconnect);
+}
+},destroy:function(){
+while(this._areaList.length>0){
+if(!this.unregister(this._areaList[0].node)){
+throw new Error("Error while destroying AreaManager");
+}
+}
+dojo.disconnect(this.resizeHandler);
+this._dropIndicator.destroy();
+this._dropMode.destroy();
+if(dojox.mdnd.autoScroll){
+dojox.mdnd.autoScroll.destroy();
+}
+if(this.refreshListener){
+dojo.unsubscribe(this.refreshListener);
+}
+if(this._cover){
+dojo._destroyElement(this._cover);
+dojo._destroyElement(this._cover2);
+delete this._cover;
+delete this._cover2;
+}
+}});
+if(dijit&&dijit._Widget){
+dojo.extend(dijit._Widget,{dndType:"text"});
+}
+dojox.mdnd._areaManager=null;
+dojox.mdnd.areaManager=function(){
+if(!dojox.mdnd._areaManager){
+dojox.mdnd._areaManager=new dojox.mdnd.AreaManager();
+}
+return dojox.mdnd._areaManager;
+};
+}
Index: trunk/web/dojo/dojox/mdnd/adapter/DndToDojo.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/adapter/DndToDojo.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/adapter/DndToDojo.js	(revision 9)
@@ -0,0 +1,259 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.adapter.DndToDojo"]){
+dojo._hasResource["dojox.mdnd.adapter.DndToDojo"]=true;
+dojo.provide("dojox.mdnd.adapter.DndToDojo");
+dojo.require("dojox.mdnd.PureSource");
+dojo.require("dojox.mdnd.LazyManager");
+dojo.declare("dojox.mdnd.adapter.DndToDojo",null,{_dojoList:null,_currentDojoArea:null,_dojoxManager:null,_dragStartHandler:null,_dropHandler:null,_moveHandler:null,_moveUpHandler:null,_draggedNode:null,constructor:function(){
+this._dojoList=[];
+this._currentDojoArea=null;
+this._dojoxManager=dojox.mdnd.areaManager();
+this._dragStartHandler=dojo.subscribe("/dojox/mdnd/drag/start",this,function(_1,_2,_3){
+this._draggedNode=_1;
+this._moveHandler=dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove");
+});
+this._dropHandler=dojo.subscribe("/dojox/mdnd/drop",this,function(_4,_5,_6){
+if(this._currentDojoArea){
+dojo.publish("/dojox/mdnd/adapter/dndToDojo/cancel",[this._currentDojoArea.node,this._currentDojoArea.type,this._draggedNode,this.accept]);
+}
+this._draggedNode=null;
+this._currentDojoArea=null;
+dojo.disconnect(this._moveHandler);
+});
+},_getIndexDojoArea:function(_7){
+if(_7){
+for(var i=0,l=this._dojoList.length;i<l;i++){
+if(this._dojoList[i].node===_7){
+return i;
+}
+}
+}
+return -1;
+},_initCoordinates:function(_8){
+if(_8){
+var _9=dojo.position(_8,true),_a={};
+_a.x=_9.x;
+_a.y=_9.y;
+_a.x1=_9.x+_9.w;
+_a.y1=_9.y+_9.h;
+return _a;
+}
+return null;
+},register:function(_b,_c,_d){
+if(this._getIndexDojoArea(_b)==-1){
+var _e=this._initCoordinates(_b),_f={"node":_b,"type":_c,"dojo":(_d)?_d:false,"coords":_e};
+this._dojoList.push(_f);
+if(_d&&!this._lazyManager){
+this._lazyManager=new dojox.mdnd.LazyManager();
+}
+}
+},unregisterByNode:function(_10){
+var _11=this._getIndexDojoArea(_10);
+if(_11!=-1){
+this._dojoList.splice(_11,1);
+}
+},unregisterByType:function(_12){
+if(_12){
+var _13=[];
+dojo.forEach(this._dojoList,function(_14,i){
+if(_14.type!=_12){
+_13.push(_14);
+}
+});
+this._dojoList=_13;
+}
+},unregister:function(){
+this._dojoList=[];
+},refresh:function(){
+var _15=this._dojoList;
+this.unregister();
+dojo.forEach(_15,function(_16){
+_16.coords=this._initCoordinates(_16.node);
+},this);
+this._dojoList=_15;
+},refreshByType:function(_17){
+var _18=this._dojoList;
+this.unregister();
+dojo.forEach(_18,function(_19){
+if(_19.type==_17){
+_19.coords=this._initCoordinates(_19.node);
+}
+},this);
+this._dojoList=_18;
+},_getHoverDojoArea:function(_1a){
+this._oldDojoArea=this._currentDojoArea;
+this._currentDojoArea=null;
+var x=_1a.x;
+var y=_1a.y;
+var _1b=this._dojoList.length;
+for(var i=0;i<_1b;i++){
+var _1c=this._dojoList[i];
+var _1d=_1c.coords;
+if(_1d.x<=x&&x<=_1d.x1&&_1d.y<=y&&y<=_1d.y1){
+this._currentDojoArea=_1c;
+break;
+}
+}
+},onMouseMove:function(e){
+var _1e={"x":e.pageX,"y":e.pageY};
+this._getHoverDojoArea(_1e);
+if(this._currentDojoArea!=this._oldDojoArea){
+if(this._currentDojoArea==null){
+this.onDragExit(e);
+}else{
+if(this._oldDojoArea==null){
+this.onDragEnter(e);
+}else{
+this.onDragExit(e);
+this.onDragEnter(e);
+}
+}
+}
+},isAccepted:function(_1f,_20){
+return true;
+},onDragEnter:function(e){
+if(this._currentDojoArea.dojo){
+dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
+dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
+dojo.disconnect(this._dojoxManager._dragItem.item.events.pop());
+dojo.body().removeChild(this._dojoxManager._cover);
+dojo.body().removeChild(this._dojoxManager._cover2);
+var _21=this._dojoxManager._dragItem.item.node;
+if(dojox.mdnd.adapter._dndFromDojo){
+dojox.mdnd.adapter._dndFromDojo.unsubscribeDnd();
+}
+dojo.style(_21,{"position":"relative","top":"0","left":"0"});
+this._lazyManager.startDrag(e,_21);
+var _22=dojo.connect(this._lazyManager.manager,"overSource",this,function(){
+dojo.disconnect(_22);
+if(this._lazyManager.manager.canDropFlag){
+this._dojoxManager._dropIndicator.node.style.display="none";
+}
+});
+this.cancelHandler=dojo.subscribe("/dnd/cancel",this,function(){
+var _23=this._dojoxManager._dragItem.item;
+_23.events=[dojo.connect(_23.handle,"onmousedown",_23,"onMouseDown")];
+dojo.body().appendChild(this._dojoxManager._cover);
+dojo.body().appendChild(this._dojoxManager._cover2);
+this._dojoxManager._cover.appendChild(_23.node);
+var _24=this._dojoxManager._areaList[this._dojoxManager._sourceIndexArea];
+var _25=this._dojoxManager._sourceDropIndex;
+var _26=null;
+if(_25!=_24.items.length&&_25!=-1){
+_26=_24.items[this._dojoxManager._sourceDropIndex].item.node;
+}
+if(this._dojoxManager._dropIndicator.node.style.display=="none"){
+this._dojoxManager._dropIndicator.node.style.display=="";
+}
+this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDrag",this._dojoxManager,"onDrag"));
+this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDragEnd",this._dojoxManager,"onDrop"));
+this._draggedNode.style.display="";
+this._dojoxManager.onDrop(this._draggedNode);
+dojo.unsubscribe(this.cancelHandler);
+dojo.unsubscribe(this.dropHandler);
+if(dojox.mdnd.adapter._dndFromDojo){
+dojox.mdnd.adapter._dndFromDojo.subscribeDnd();
+}
+});
+this.dropHandler=dojo.subscribe("/dnd/drop/before",this,function(_27){
+dojo.unsubscribe(this.cancelHandler);
+dojo.unsubscribe(this.dropHandler);
+this.onDrop();
+});
+}else{
+this.accept=this.isAccepted(this._dojoxManager._dragItem.item.node,this._currentDojoArea);
+if(this.accept){
+dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
+dojo.disconnect(this._dojoxManager._dragItem.handlers.pop());
+this._dojoxManager._dropIndicator.node.style.display="none";
+if(!this._moveUpHandler){
+this._moveUpHandler=dojo.connect(dojo.doc,"onmouseup",this,"onDrop");
+}
+}
+}
+dojo.publish("/dojox/mdnd/adapter/dndToDojo/over",[this._currentDojoArea.node,this._currentDojoArea.type,this._draggedNode,this.accept]);
+},onDragExit:function(e){
+if(this._oldDojoArea.dojo){
+dojo.unsubscribe(this.cancelHandler);
+dojo.unsubscribe(this.dropHandler);
+var _28=this._dojoxManager._dragItem.item;
+this._dojoxManager._dragItem.item.events.push(dojo.connect(_28.node.ownerDocument,"onmousemove",_28,"onMove"));
+dojo.body().appendChild(this._dojoxManager._cover);
+dojo.body().appendChild(this._dojoxManager._cover2);
+this._dojoxManager._cover.appendChild(_28.node);
+var _29=_28.node.style;
+_29.position="absolute";
+_29.left=(_28.offsetDrag.l+e.pageX)+"px";
+_29.top=(_28.offsetDrag.t+e.pageX)+"px";
+_29.display="";
+this._lazyManager.cancelDrag();
+if(dojox.mdnd.adapter._dndFromDojo){
+dojox.mdnd.adapter._dndFromDojo.subscribeDnd();
+}
+if(this._dojoxManager._dropIndicator.node.style.display=="none"){
+this._dojoxManager._dropIndicator.node.style.display="";
+}
+this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDrag",this._dojoxManager,"onDrag"));
+this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDragEnd",this._dojoxManager,"onDrop"));
+this._dojoxManager._dragItem.item.onMove(e);
+}else{
+if(this.accept){
+if(this._moveUpHandler){
+dojo.disconnect(this._moveUpHandler);
+this._moveUpHandler=null;
+}
+if(this._dojoxManager._dropIndicator.node.style.display=="none"){
+this._dojoxManager._dropIndicator.node.style.display="";
+}
+this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDrag",this._dojoxManager,"onDrag"));
+this._dojoxManager._dragItem.handlers.push(dojo.connect(this._dojoxManager._dragItem.item,"onDragEnd",this._dojoxManager,"onDrop"));
+this._dojoxManager._dragItem.item.onMove(e);
+}
+}
+dojo.publish("/dojox/mdnd/adapter/dndToDojo/out",[this._oldDojoArea.node,this._oldDojoArea.type,this._draggedNode,this.accept]);
+},onDrop:function(e){
+if(this._currentDojoArea.dojo){
+if(dojox.mdnd.adapter._dndFromDojo){
+dojox.mdnd.adapter._dndFromDojo.subscribeDnd();
+}
+}
+if(this._dojoxManager._dropIndicator.node.style.display=="none"){
+this._dojoxManager._dropIndicator.node.style.display="";
+}
+if(this._dojoxManager._cover.parentNode&&this._dojoxManager._cover.parentNode.nodeType==1){
+dojo.body().removeChild(this._dojoxManager._cover);
+dojo.body().removeChild(this._dojoxManager._cover2);
+}
+if(this._draggedNode.parentNode==this._dojoxManager._cover){
+this._dojoxManager._cover.removeChild(this._draggedNode);
+}
+dojo.disconnect(this._moveHandler);
+dojo.disconnect(this._moveUpHandler);
+this._moveHandler=this._moveUpHandler=null;
+dojo.publish("/dojox/mdnd/adapter/dndToDojo/drop",[this._draggedNode,this._currentDojoArea.node,this._currentDojoArea.type]);
+dojo.removeClass(this._draggedNode,"dragNode");
+var _2a=this._draggedNode.style;
+_2a.position="relative";
+_2a.left="0";
+_2a.top="0";
+_2a.width="auto";
+dojo.forEach(this._dojoxManager._dragItem.handlers,dojo.disconnect);
+this._dojoxManager._deleteMoveableItem(this._dojoxManager._dragItem);
+this._draggedNode=null;
+this._currentDojoArea=null;
+this._dojoxManager._resetAfterDrop();
+}});
+dojox.mdnd.adapter._dndToDojo=null;
+dojox.mdnd.adapter.dndToDojo=function(){
+if(!dojox.mdnd.adapter._dndToDojo){
+dojox.mdnd.adapter._dndToDojo=new dojox.mdnd.adapter.DndToDojo();
+}
+return dojox.mdnd.adapter._dndToDojo;
+};
+}
Index: trunk/web/dojo/dojox/mdnd/adapter/DndFromDojo.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/adapter/DndFromDojo.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/adapter/DndFromDojo.js	(revision 9)
@@ -0,0 +1,171 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.adapter.DndFromDojo"]){
+dojo._hasResource["dojox.mdnd.adapter.DndFromDojo"]=true;
+dojo.provide("dojox.mdnd.adapter.DndFromDojo");
+dojo.require("dojox.mdnd.AreaManager");
+dojo.require("dojo.dnd.Manager");
+dojo.declare("dojox.mdnd.adapter.DndFromDojo",null,{dropIndicatorSize:{"w":0,"h":50},dropIndicatorSize:{"w":0,"h":50},_areaManager:null,_dojoManager:null,_currentArea:null,_oldArea:null,_moveHandler:null,_subscribeHandler:null,constructor:function(){
+this._areaManager=dojox.mdnd.areaManager();
+this._dojoManager=dojo.dnd.manager();
+this._currentArea=null;
+this._moveHandler=null;
+this.subscribeDnd();
+},subscribeDnd:function(){
+this._subscribeHandler=[dojo.subscribe("/dnd/start",this,"onDragStart"),dojo.subscribe("/dnd/drop/before",this,"onDrop"),dojo.subscribe("/dnd/cancel",this,"onDropCancel"),dojo.subscribe("/dnd/source/over",this,"onDndSource")];
+},unsubscribeDnd:function(){
+dojo.forEach(this._subscribeHandler,dojo.unsubscribe);
+},_getHoverArea:function(_1){
+var x=_1.x;
+var y=_1.y;
+this._oldArea=this._currentArea;
+this._currentArea=null;
+var _2=this._areaManager._areaList;
+for(var i=0;i<_2.length;i++){
+var _3=_2[i];
+var _4=_3.coords.x;
+var _5=_4+_3.node.offsetWidth;
+var _6=_3.coords.y;
+var _7=_6+_3.node.offsetHeight;
+if(_4<=x&&x<=_5&&_6<=y&&y<=_7){
+this._areaManager._oldIndexArea=this._areaManager._currentIndexArea;
+this._areaManager._currentIndexArea=i;
+this._currentArea=_3.node;
+break;
+}
+}
+if(this._currentArea!=this._oldArea){
+if(this._currentArea==null){
+this.onDragExit();
+}else{
+if(this._oldArea==null){
+this.onDragEnter();
+}else{
+this.onDragExit();
+this.onDragEnter();
+}
+}
+}
+},onDragStart:function(_8,_9,_a){
+this._dragNode=_9[0];
+this._copy=_a;
+this._source=_8;
+this._outSourceHandler=dojo.connect(this._dojoManager,"outSource",this,function(){
+if(this._moveHandler==null){
+this._moveHandler=dojo.connect(dojo.doc,"mousemove",this,"onMouseMove");
+}
+});
+},onMouseMove:function(e){
+var _b={"x":e.pageX,"y":e.pageY};
+this._getHoverArea(_b);
+if(this._currentArea&&this._areaManager._accept){
+if(this._areaManager._dropIndicator.node.style.visibility=="hidden"){
+this._areaManager._dropIndicator.node.style.visibility="";
+dojo.addClass(this._dojoManager.avatar.node,"dojoDndAvatarCanDrop");
+}
+this._areaManager.placeDropIndicator(_b,this.dropIndicatorSize);
+}
+},onDragEnter:function(){
+var _c=this._dragNode.getAttribute("dndType");
+var _d=(_c)?_c.split(/\s*,\s*/):["text"];
+this._areaManager._isAccepted(_d,this._areaManager._areaList[this._areaManager._currentIndexArea].accept);
+if(this._dojoManager.avatar){
+if(this._areaManager._accept){
+dojo.addClass(this._dojoManager.avatar.node,"dojoDndAvatarCanDrop");
+}else{
+dojo.removeClass(this._dojoManager.avatar.node,"dojoDndAvatarCanDrop");
+}
+}
+},onDragExit:function(){
+this._areaManager._accept=false;
+if(this._dojoManager.avatar){
+dojo.removeClass(this._dojoManager.avatar.node,"dojoDndAvatarCanDrop");
+}
+if(this._currentArea==null){
+this._areaManager._dropMode.refreshItems(this._areaManager._areaList[this._areaManager._oldIndexArea],this._areaManager._oldDropIndex,this.dropIndicatorSize,false);
+this._areaManager._resetAfterDrop();
+}else{
+this._areaManager._dropIndicator.remove();
+}
+},isAccepted:function(_e,_f){
+var _10=(_e.getAttribute("dndType"))?_e.getAttribute("dndType"):"text";
+if(_10&&_10 in _f){
+return true;
+}else{
+return false;
+}
+},onDndSource:function(_11){
+if(this._currentArea==null){
+return;
+}
+if(_11){
+var _12=false;
+if(this._dojoManager.target==_11){
+_12=true;
+}else{
+_12=this.isAccepted(this._dragNode,_11.accept);
+}
+if(_12){
+dojo.disconnect(this._moveHandler);
+this._currentArea=this._moveHandler=null;
+var _13=this._areaManager._dropIndicator.node;
+if(_13&&_13.parentNode!==null&&_13.parentNode.nodeType==1){
+_13.style.visibility="hidden";
+}
+}else{
+this._resetAvatar();
+}
+}else{
+if(!this._moveHandler){
+this._moveHandler=dojo.connect(dojo.doc,"mousemove",this,"onMouseMove");
+}
+this._resetAvatar();
+}
+},_resetAvatar:function(){
+if(this._dojoManager.avatar){
+if(this._areaManager._accept){
+dojo.addClass(this._dojoManager.avatar.node,"dojoDndAvatarCanDrop");
+}else{
+dojo.removeClass(this._dojoManager.avatar.node,"dojoDndAvatarCanDrop");
+}
+}
+},onDropCancel:function(){
+if(this._currentArea==null){
+this._areaManager._resetAfterDrop();
+dojo.disconnect(this._moveHandler);
+dojo.disconnect(this._outSourceHandler);
+this._currentArea=this._moveHandler=this._outSourceHandler=null;
+}else{
+if(this._areaManager._accept){
+this.onDrop(this._source,[this._dragNode],this._copy,this._currentArea);
+}else{
+this._currentArea=null;
+dojo.disconnect(this._outSourceHandler);
+dojo.disconnect(this._moveHandler);
+this._moveHandler=this._outSourceHandler=null;
+}
+}
+},onDrop:function(_14,_15,_16){
+dojo.disconnect(this._moveHandler);
+dojo.disconnect(this._outSourceHandler);
+this._moveHandler=this._outSourceHandler=null;
+if(this._currentArea){
+var _17=this._areaManager._currentDropIndex;
+dojo.publish("/dnd/drop/after",[_14,_15,_16,this._currentArea,_17]);
+this._currentArea=null;
+}
+if(this._areaManager._dropIndicator.node.style.visibility=="hidden"){
+this._areaManager._dropIndicator.node.style.visibility="";
+}
+this._areaManager._resetAfterDrop();
+}});
+dojox.mdnd.adapter._dndFromDojo=null;
+(function(){
+dojox.mdnd.adapter._dndFromDojo=new dojox.mdnd.adapter.DndFromDojo();
+}());
+}
Index: trunk/web/dojo/dojox/mdnd/AutoScroll.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/AutoScroll.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/AutoScroll.js	(revision 9)
@@ -0,0 +1,117 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.AutoScroll"]){
+dojo._hasResource["dojox.mdnd.AutoScroll"]=true;
+dojo.provide("dojox.mdnd.AutoScroll");
+dojo.declare("dojox.mdnd.AutoScroll",null,{interval:3,recursiveTimer:10,marginMouse:50,constructor:function(){
+this.resizeHandler=dojo.connect(dojo.global,"onresize",this,function(){
+this.getViewport();
+});
+dojo.ready(dojo.hitch(this,"init"));
+},init:function(){
+this._html=(dojo.isWebKit)?dojo.body():dojo.body().parentNode;
+this.getViewport();
+},getViewport:function(){
+var d=dojo.doc,dd=d.documentElement,w=window,b=dojo.body();
+if(dojo.isMozilla){
+this._v={"w":dd.clientWidth,"h":w.innerHeight};
+}else{
+if(!dojo.isOpera&&w.innerWidth){
+this._v={"w":w.innerWidth,"h":w.innerHeight};
+}else{
+if(!dojo.isOpera&&dd&&dd.clientWidth){
+this._v={"w":dd.clientWidth,"h":dd.clientHeight};
+}else{
+if(b.clientWidth){
+this._v={"w":b.clientWidth,"h":b.clientHeight};
+}
+}
+}
+}
+},setAutoScrollNode:function(_1){
+this._node=_1;
+},setAutoScrollMaxPage:function(){
+this._yMax=this._html.scrollHeight;
+this._xMax=this._html.scrollWidth;
+},checkAutoScroll:function(e){
+if(this._autoScrollActive){
+this.stopAutoScroll();
+}
+this._y=e.pageY;
+this._x=e.pageX;
+if(e.clientX<this.marginMouse){
+this._autoScrollActive=true;
+this._autoScrollLeft(e);
+}else{
+if(e.clientX>this._v.w-this.marginMouse){
+this._autoScrollActive=true;
+this._autoScrollRight(e);
+}
+}
+if(e.clientY<this.marginMouse){
+this._autoScrollActive=true;
+this._autoScrollUp(e);
+}else{
+if(e.clientY>this._v.h-this.marginMouse){
+this._autoScrollActive=true;
+this._autoScrollDown();
+}
+}
+},_autoScrollDown:function(){
+if(this._timer){
+clearTimeout(this._timer);
+}
+if(this._autoScrollActive&&this._y+this.marginMouse<this._yMax){
+this._html.scrollTop+=this.interval;
+this._node.style.top=(parseInt(this._node.style.top)+this.interval)+"px";
+this._y+=this.interval;
+this._timer=setTimeout(dojo.hitch(this,"_autoScrollDown"),this.recursiveTimer);
+}
+},_autoScrollUp:function(){
+if(this._timer){
+clearTimeout(this._timer);
+}
+if(this._autoScrollActive&&this._y-this.marginMouse>0){
+this._html.scrollTop-=this.interval;
+this._node.style.top=(parseInt(this._node.style.top)-this.interval)+"px";
+this._y-=this.interval;
+this._timer=setTimeout(dojo.hitch(this,"_autoScrollUp"),this.recursiveTimer);
+}
+},_autoScrollRight:function(){
+if(this._timer){
+clearTimeout(this._timer);
+}
+if(this._autoScrollActive&&this._x+this.marginMouse<this._xMax){
+this._html.scrollLeft+=this.interval;
+this._node.style.left=(parseInt(this._node.style.left)+this.interval)+"px";
+this._x+=this.interval;
+this._timer=setTimeout(dojo.hitch(this,"_autoScrollRight"),this.recursiveTimer);
+}
+},_autoScrollLeft:function(e){
+if(this._timer){
+clearTimeout(this._timer);
+}
+if(this._autoScrollActive&&this._x-this.marginMouse>0){
+this._html.scrollLeft-=this.interval;
+this._node.style.left=(parseInt(this._node.style.left)-this.interval)+"px";
+this._x-=this.interval;
+this._timer=setTimeout(dojo.hitch(this,"_autoScrollLeft"),this.recursiveTimer);
+}
+},stopAutoScroll:function(){
+if(this._timer){
+clearTimeout(this._timer);
+}
+this._autoScrollActive=false;
+},destroy:function(){
+dojo.disconnect(this.resizeHandler);
+}});
+dojox.mdnd.autoScroll=null;
+(function(){
+dojox.mdnd.autoScroll=new dojox.mdnd.AutoScroll();
+}());
+}
Index: trunk/web/dojo/dojox/mdnd/LazyManager.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/LazyManager.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/LazyManager.js	(revision 9)
@@ -0,0 +1,41 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.LazyManager"]){
+dojo._hasResource["dojox.mdnd.LazyManager"]=true;
+dojo.provide("dojox.mdnd.LazyManager");
+dojo.require("dojo.dnd.Manager");
+dojo.require("dojox.mdnd.PureSource");
+dojo.declare("dojox.mdnd.LazyManager",null,{constructor:function(){
+this._registry={};
+this._fakeSource=new dojox.mdnd.PureSource(dojo.create("div"),{"copyOnly":false});
+this._fakeSource.startup();
+dojo.addOnUnload(dojo.hitch(this,"destroy"));
+this.manager=dojo.dnd.manager();
+},getItem:function(_1){
+var _2=_1.getAttribute("dndType");
+return {"data":_1.getAttribute("dndData")||_1.innerHTML,"type":_2?_2.split(/\s*,\s*/):["text"]};
+},startDrag:function(e,_3){
+_3=_3||e.target;
+if(_3){
+var m=this.manager,_4=this.getItem(_3);
+if(_3.id==""){
+dojo.attr(_3,"id",dojo.dnd.getUniqueId());
+}
+dojo.addClass(_3,"dojoDndItem");
+this._fakeSource.setItem(_3.id,_4);
+m.startDrag(this._fakeSource,[_3],false);
+m.onMouseMove(e);
+}
+},cancelDrag:function(){
+var m=this.manager;
+m.target=null;
+m.onMouseUp();
+},destroy:function(){
+this._fakeSource.destroy();
+}});
+}
Index: trunk/web/dojo/dojox/mdnd/Moveable.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/Moveable.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/Moveable.js	(revision 9)
@@ -0,0 +1,106 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.Moveable"]){
+dojo._hasResource["dojox.mdnd.Moveable"]=true;
+dojo.provide("dojox.mdnd.Moveable");
+dojo.declare("dojox.mdnd.Moveable",null,{handle:null,skip:true,dragDistance:3,constructor:function(_1,_2){
+this.node=dojo.byId(_2);
+this.d=this.node.ownerDocument;
+if(!_1){
+_1={};
+}
+this.handle=_1.handle?dojo.byId(_1.handle):null;
+if(!this.handle){
+this.handle=this.node;
+}
+this.skip=_1.skip;
+this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown")];
+if(dojox.mdnd.autoScroll){
+this.autoScroll=dojox.mdnd.autoScroll;
+}
+},isFormElement:function(e){
+var t=e.target;
+if(t.nodeType==3){
+t=t.parentNode;
+}
+return " a button textarea input select option ".indexOf(" "+t.tagName.toLowerCase()+" ")>=0;
+},onMouseDown:function(e){
+if(this._isDragging){
+return;
+}
+var _3=dojo.isIE?(e.button==1):(e.which==1);
+if(!_3){
+return;
+}
+if(this.skip&&this.isFormElement(e)){
+return;
+}
+if(this.autoScroll){
+this.autoScroll.setAutoScrollNode(this.node);
+this.autoScroll.setAutoScrollMaxPage();
+}
+this.events.push(dojo.connect(this.d,"onmouseup",this,"onMouseUp"));
+this.events.push(dojo.connect(this.d,"onmousemove",this,"onFirstMove"));
+this._selectStart=dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent);
+this._firstX=e.clientX;
+this._firstY=e.clientY;
+dojo.stopEvent(e);
+},onFirstMove:function(e){
+dojo.stopEvent(e);
+var d=(this._firstX-e.clientX)*(this._firstX-e.clientX)+(this._firstY-e.clientY)*(this._firstY-e.clientY);
+if(d>this.dragDistance*this.dragDistance){
+this._isDragging=true;
+dojo.disconnect(this.events.pop());
+dojo.style(this.node,"width",dojo.contentBox(this.node).w+"px");
+this.initOffsetDrag(e);
+this.events.push(dojo.connect(this.d,"onmousemove",this,"onMove"));
+}
+},initOffsetDrag:function(e){
+this.offsetDrag={"l":e.pageX,"t":e.pageY};
+var s=this.node.style;
+var _4=dojo.position(this.node,true);
+this.offsetDrag.l=_4.x-this.offsetDrag.l;
+this.offsetDrag.t=_4.y-this.offsetDrag.t;
+var _5={"x":_4.x,"y":_4.y};
+this.size={"w":_4.w,"h":_4.h};
+this.onDragStart(this.node,_5,this.size);
+},onMove:function(e){
+dojo.stopEvent(e);
+if(dojo.isIE==8&&new Date()-this.date<20){
+return;
+}
+if(this.autoScroll){
+this.autoScroll.checkAutoScroll(e);
+}
+var _6={"x":this.offsetDrag.l+e.pageX,"y":this.offsetDrag.t+e.pageY};
+var s=this.node.style;
+s.left=_6.x+"px";
+s.top=_6.y+"px";
+this.onDrag(this.node,_6,this.size,{"x":e.pageX,"y":e.pageY});
+if(dojo.isIE==8){
+this.date=new Date();
+}
+},onMouseUp:function(e){
+dojo.stopEvent(e);
+this._isDragging=false;
+if(this.autoScroll){
+this.autoScroll.stopAutoScroll();
+}
+dojo.disconnect(this.events.pop());
+dojo.disconnect(this.events.pop());
+delete this.onMove;
+this.onDragEnd(this.node);
+this.node.focus();
+},onDragStart:function(_7,_8,_9){
+},onDragEnd:function(_a){
+},onDrag:function(_b,_c,_d,_e){
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+this.events=this.node=null;
+}});
+}
Index: trunk/web/dojo/dojox/mdnd/PureSource.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/PureSource.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/PureSource.js	(revision 9)
@@ -0,0 +1,80 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.PureSource"]){
+dojo._hasResource["dojox.mdnd.PureSource"]=true;
+dojo.provide("dojox.mdnd.PureSource");
+dojo.require("dojo.dnd.Selector");
+dojo.require("dojo.dnd.Manager");
+dojo.declare("dojox.mdnd.PureSource",dojo.dnd.Selector,{horizontal:false,copyOnly:true,skipForm:false,withHandles:false,isSource:true,targetState:"Disabled",generateText:true,constructor:function(_1,_2){
+dojo.mixin(this,dojo.mixin({},_2));
+var _3=this.accept;
+this.isDragging=false;
+this.mouseDown=false;
+this.sourceState="";
+dojo.addClass(this.node,"dojoDndSource");
+if(this.horizontal){
+dojo.addClass(this.node,"dojoDndHorizontal");
+}
+this.topics=[dojo.subscribe("/dnd/cancel",this,"onDndCancel"),dojo.subscribe("/dnd/drop",this,"onDndCancel")];
+},onDndCancel:function(){
+this.isDragging=false;
+this.mouseDown=false;
+delete this.mouseButton;
+},copyState:function(_4){
+return this.copyOnly||_4;
+},destroy:function(){
+dojox.mdnd.PureSource.superclass.destroy.call(this);
+dojo.forEach(this.topics,dojo.unsubscribe);
+this.targetAnchor=null;
+},markupFactory:function(_5,_6){
+_5._skipStartup=true;
+return new dojox.mdnd.PureSource(_6,_5);
+},onMouseMove:function(e){
+if(this.isDragging){
+return;
+}
+dojox.mdnd.PureSource.superclass.onMouseMove.call(this,e);
+var m=dojo.dnd.manager();
+if(this.mouseDown&&!this.isDragging&&this.isSource){
+var _7=this.getSelectedNodes();
+if(_7.length){
+m.startDrag(this,_7,this.copyState(dojo.isCopyKey(e)));
+this.isDragging=true;
+}
+}
+},onMouseDown:function(e){
+if(this._legalMouseDown(e)&&(!this.skipForm||!dojo.dnd.isFormElement(e))){
+this.mouseDown=true;
+this.mouseButton=e.button;
+dojox.mdnd.PureSource.superclass.onMouseDown.call(this,e);
+}
+},onMouseUp:function(e){
+if(this.mouseDown){
+this.mouseDown=false;
+dojox.mdnd.PureSource.superclass.onMouseUp.call(this,e);
+}
+},onOverEvent:function(){
+dojox.mdnd.PureSource.superclass.onOverEvent.call(this);
+dojo.dnd.manager().overSource(this);
+},onOutEvent:function(){
+dojox.mdnd.PureSource.superclass.onOutEvent.call(this);
+dojo.dnd.manager().outSource(this);
+},_markDndStatus:function(_8){
+this._changeState("Source",_8?"Copied":"Moved");
+},_legalMouseDown:function(e){
+if(!this.withHandles){
+return true;
+}
+for(var _9=e.target;_9&&!dojo.hasClass(_9,"dojoDndItem");_9=_9.parentNode){
+if(dojo.hasClass(_9,"dojoDndHandle")){
+return true;
+}
+}
+return false;
+}});
+}
Index: trunk/web/dojo/dojox/mdnd/dropMode/VerticalDropMode.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/dropMode/VerticalDropMode.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/dropMode/VerticalDropMode.js	(revision 9)
@@ -0,0 +1,191 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.dropMode.VerticalDropMode"]){
+dojo._hasResource["dojox.mdnd.dropMode.VerticalDropMode"]=true;
+dojo.provide("dojox.mdnd.dropMode.VerticalDropMode");
+dojo.require("dojox.mdnd.AreaManager");
+dojo.declare("dojox.mdnd.dropMode.VerticalDropMode",null,{_oldXPoint:null,_oldYPoint:null,_oldBehaviour:"up",addArea:function(_1,_2){
+var _3=_1.length;
+var _4=dojo.position(_2.node,true);
+_2.coords={"x":_4.x,"y":_4.y};
+if(_3==0){
+_1.push(_2);
+}else{
+var x=_2.coords.x;
+for(var i=0;i<_3;i++){
+if(x<_1[i].coords.x){
+for(var j=_3-1;j>=i;j--){
+_1[j+1]=_1[j];
+}
+_1[i]=_2;
+break;
+}
+}
+if(i==_3){
+_1.push(_2);
+}
+}
+return _1;
+},updateAreas:function(_5){
+var _6=_5.length;
+if(_6>1){
+var _7,_8;
+for(var i=0;i<_6;i++){
+var _9=_5[i];
+var _a;
+_9.coords.x1=-1;
+_9.coords.x2=-1;
+if(i==0){
+_a=_5[i+1];
+this._updateArea(_9);
+this._updateArea(_a);
+_7=_9.coords.x+_9.node.offsetWidth;
+_8=_a.coords.x;
+_9.coords.x2=_7+(_8-_7)/2;
+}else{
+if(i==_6-1){
+_9.coords.x1=_5[i-1].coords.x2;
+}else{
+_a=_5[i+1];
+this._updateArea(_a);
+_7=_9.coords.x+_9.node.offsetWidth;
+_8=_a.coords.x;
+_9.coords.x1=_5[i-1].coords.x2;
+_9.coords.x2=_7+(_8-_7)/2;
+}
+}
+}
+}
+},_updateArea:function(_b){
+var _c=dojo.position(_b.node,true);
+_b.coords.x=_c.x;
+_b.coords.y=_c.y;
+},initItems:function(_d){
+dojo.forEach(_d.items,function(_e){
+var _f=_e.item.node;
+var _10=dojo.position(_f,true);
+var y=_10.y+_10.h/2;
+_e.y=y;
+});
+_d.initItems=true;
+},refreshItems:function(_11,_12,_13,_14){
+if(_12==-1){
+return;
+}else{
+if(_11&&_13&&_13.h){
+var _15=_13.h;
+if(_11.margin){
+_15+=_11.margin.t;
+}
+var _16=_11.items.length;
+for(var i=_12;i<_16;i++){
+var _17=_11.items[i];
+if(_14){
+_17.y+=_15;
+}else{
+_17.y-=_15;
+}
+}
+}
+}
+},getDragPoint:function(_18,_19,_1a){
+var y=_18.y;
+if(this._oldYPoint){
+if(y>this._oldYPoint){
+this._oldBehaviour="down";
+y+=_19.h;
+}else{
+if(y<=this._oldYPoint){
+this._oldBehaviour="up";
+}
+}
+}
+this._oldYPoint=y;
+return {"x":_18.x+(_19.w/2),"y":y};
+},getTargetArea:function(_1b,_1c,_1d){
+var _1e=0;
+var x=_1c.x;
+var end=_1b.length;
+if(end>1){
+var _1f=0,_20="right",_21=false;
+if(_1d==-1||arguments.length<3){
+_21=true;
+}else{
+if(this._checkInterval(_1b,_1d,x)){
+_1e=_1d;
+}else{
+if(this._oldXPoint<x){
+_1f=_1d+1;
+}else{
+_1f=_1d-1;
+end=0;
+_20="left";
+}
+_21=true;
+}
+}
+if(_21){
+if(_20==="right"){
+for(var i=_1f;i<end;i++){
+if(this._checkInterval(_1b,i,x)){
+_1e=i;
+break;
+}
+}
+}else{
+for(var i=_1f;i>=end;i--){
+if(this._checkInterval(_1b,i,x)){
+_1e=i;
+break;
+}
+}
+}
+}
+}
+this._oldXPoint=x;
+return _1e;
+},_checkInterval:function(_22,_23,x){
+var _24=_22[_23].coords;
+if(_24.x1==-1){
+if(x<=_24.x2){
+return true;
+}
+}else{
+if(_24.x2==-1){
+if(x>_24.x1){
+return true;
+}
+}else{
+if(_24.x1<x&&x<=_24.x2){
+return true;
+}
+}
+}
+return false;
+},getDropIndex:function(_25,_26){
+var _27=_25.items.length;
+var _28=_25.coords;
+var y=_26.y;
+if(_27>0){
+for(var i=0;i<_27;i++){
+if(y<_25.items[i].y){
+return i;
+}else{
+if(i==_27-1){
+return -1;
+}
+}
+}
+}
+return -1;
+},destroy:function(){
+}});
+(function(){
+dojox.mdnd.areaManager()._dropMode=new dojox.mdnd.dropMode.VerticalDropMode();
+}());
+}
Index: trunk/web/dojo/dojox/mdnd/dropMode/OverDropMode.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/dropMode/OverDropMode.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/dropMode/OverDropMode.js	(revision 9)
@@ -0,0 +1,161 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.dropMode.OverDropMode"]){
+dojo._hasResource["dojox.mdnd.dropMode.OverDropMode"]=true;
+dojo.provide("dojox.mdnd.dropMode.OverDropMode");
+dojo.require("dojox.mdnd.AreaManager");
+dojo.declare("dojox.mdnd.dropMode.OverDropMode",null,{_oldXPoint:null,_oldYPoint:null,_oldBehaviour:"up",constructor:function(){
+this._dragHandler=[dojo.connect(dojox.mdnd.areaManager(),"onDragEnter",function(_1,_2){
+var m=dojox.mdnd.areaManager();
+if(m._oldIndexArea==-1){
+m._oldIndexArea=m._lastValidIndexArea;
+}
+})];
+},addArea:function(_3,_4){
+var _5=_3.length,_6=dojo.position(_4.node,true);
+_4.coords={"x":_6.x,"y":_6.y};
+if(_5==0){
+_3.push(_4);
+}else{
+var x=_4.coords.x;
+for(var i=0;i<_5;i++){
+if(x<_3[i].coords.x){
+for(var j=_5-1;j>=i;j--){
+_3[j+1]=_3[j];
+}
+_3[i]=_4;
+break;
+}
+}
+if(i==_5){
+_3.push(_4);
+}
+}
+return _3;
+},updateAreas:function(_7){
+var _8=_7.length;
+for(var i=0;i<_8;i++){
+this._updateArea(_7[i]);
+}
+},_updateArea:function(_9){
+var _a=dojo.position(_9.node,true);
+_9.coords.x=_a.x;
+_9.coords.x2=_a.x+_a.w;
+_9.coords.y=_a.y;
+},initItems:function(_b){
+dojo.forEach(_b.items,function(_c){
+var _d=_c.item.node;
+var _e=dojo.position(_d,true);
+var y=_e.y+_e.h/2;
+_c.y=y;
+});
+_b.initItems=true;
+},refreshItems:function(_f,_10,_11,_12){
+if(_10==-1){
+return;
+}else{
+if(_f&&_11&&_11.h){
+var _13=_11.h;
+if(_f.margin){
+_13+=_f.margin.t;
+}
+var _14=_f.items.length;
+for(var i=_10;i<_14;i++){
+var _15=_f.items[i];
+if(_12){
+_15.y+=_13;
+}else{
+_15.y-=_13;
+}
+}
+}
+}
+},getDragPoint:function(_16,_17,_18){
+return {"x":_18.x,"y":_18.y};
+},getTargetArea:function(_19,_1a,_1b){
+var _1c=0;
+var x=_1a.x;
+var y=_1a.y;
+var end=_19.length;
+var _1d=0,_1e="right",_1f=false;
+if(_1b==-1||arguments.length<3){
+_1f=true;
+}else{
+if(this._checkInterval(_19,_1b,x,y)){
+_1c=_1b;
+}else{
+if(this._oldXPoint<x){
+_1d=_1b+1;
+}else{
+_1d=_1b-1;
+end=0;
+_1e="left";
+}
+_1f=true;
+}
+}
+if(_1f){
+if(_1e==="right"){
+for(var i=_1d;i<end;i++){
+if(this._checkInterval(_19,i,x,y)){
+_1c=i;
+break;
+}
+}
+if(i==end){
+_1c=-1;
+}
+}else{
+for(var i=_1d;i>=end;i--){
+if(this._checkInterval(_19,i,x,y)){
+_1c=i;
+break;
+}
+}
+if(i==end-1){
+_1c=-1;
+}
+}
+}
+this._oldXPoint=x;
+return _1c;
+},_checkInterval:function(_20,_21,x,y){
+var _22=_20[_21];
+var _23=_22.node;
+var _24=_22.coords;
+var _25=_24.x;
+var _26=_24.x2;
+var _27=_24.y;
+var _28=_27+_23.offsetHeight;
+if(_25<=x&&x<=_26&&_27<=y&&y<=_28){
+return true;
+}
+return false;
+},getDropIndex:function(_29,_2a){
+var _2b=_29.items.length;
+var _2c=_29.coords;
+var y=_2a.y;
+if(_2b>0){
+for(var i=0;i<_2b;i++){
+if(y<_29.items[i].y){
+return i;
+}else{
+if(i==_2b-1){
+return -1;
+}
+}
+}
+}
+return -1;
+},destroy:function(){
+dojo.forEach(this._dragHandler,dojo.disconnect);
+}});
+(function(){
+dojox.mdnd.areaManager()._dropMode=new dojox.mdnd.dropMode.OverDropMode();
+}());
+}
Index: trunk/web/dojo/dojox/mdnd/dropMode/DefaultDropMode.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/dropMode/DefaultDropMode.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/dropMode/DefaultDropMode.js	(revision 9)
@@ -0,0 +1,191 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.dropMode.DefaultDropMode"]){
+dojo._hasResource["dojox.mdnd.dropMode.DefaultDropMode"]=true;
+dojo.provide("dojox.mdnd.dropMode.DefaultDropMode");
+dojo.require("dojox.mdnd.AreaManager");
+dojo.declare("dojox.mdnd.dropMode.DefaultDropMode",null,{_oldXPoint:null,_oldYPoint:null,_oldBehaviour:"up",addArea:function(_1,_2){
+var _3=_1.length;
+var _4=dojo.position(_2.node,true);
+_2.coords={"x":_4.x,"y":_4.y};
+if(_3==0){
+_1.push(_2);
+}else{
+var x=_2.coords.x;
+for(var i=0;i<_3;i++){
+if(x<_1[i].coords.x){
+for(var j=_3-1;j>=i;j--){
+_1[j+1]=_1[j];
+}
+_1[i]=_2;
+break;
+}
+}
+if(i==_3){
+_1.push(_2);
+}
+}
+return _1;
+},updateAreas:function(_5){
+var _6=_5.length;
+if(_6>1){
+var _7,_8;
+for(var i=0;i<_6;i++){
+var _9=_5[i];
+var _a;
+_9.coords.x1=-1;
+_9.coords.x2=-1;
+if(i==0){
+_a=_5[i+1];
+this._updateArea(_9);
+this._updateArea(_a);
+_7=_9.coords.x+_9.node.offsetWidth;
+_8=_a.coords.x;
+_9.coords.x2=_7+(_8-_7)/2;
+}else{
+if(i==_6-1){
+_9.coords.x1=_5[i-1].coords.x2;
+}else{
+_a=_5[i+1];
+this._updateArea(_a);
+_7=_9.coords.x+_9.node.offsetWidth;
+_8=_a.coords.x;
+_9.coords.x1=_5[i-1].coords.x2;
+_9.coords.x2=_7+(_8-_7)/2;
+}
+}
+}
+}
+},_updateArea:function(_b){
+var _c=dojo.position(_b.node,true);
+_b.coords.x=_c.x;
+_b.coords.y=_c.y;
+},initItems:function(_d){
+dojo.forEach(_d.items,function(_e){
+var _f=_e.item.node;
+var _10=dojo.position(_f,true);
+var y=_10.y+_10.h/2;
+_e.y=y;
+});
+_d.initItems=true;
+},refreshItems:function(_11,_12,_13,_14){
+if(_12==-1){
+return;
+}else{
+if(_11&&_13&&_13.h){
+var _15=_13.h;
+if(_11.margin){
+_15+=_11.margin.t;
+}
+var _16=_11.items.length;
+for(var i=_12;i<_16;i++){
+var _17=_11.items[i];
+if(_14){
+_17.y+=_15;
+}else{
+_17.y-=_15;
+}
+}
+}
+}
+},getDragPoint:function(_18,_19,_1a){
+var y=_18.y;
+if(this._oldYPoint){
+if(y>this._oldYPoint){
+this._oldBehaviour="down";
+y+=_19.h;
+}else{
+if(y<=this._oldYPoint){
+this._oldBehaviour="up";
+}
+}
+}
+this._oldYPoint=y;
+return {"x":_18.x+(_19.w/2),"y":y};
+},getTargetArea:function(_1b,_1c,_1d){
+var _1e=0;
+var x=_1c.x;
+var end=_1b.length;
+if(end>1){
+var _1f=0,_20="right",_21=false;
+if(_1d==-1||arguments.length<3){
+_21=true;
+}else{
+if(this._checkInterval(_1b,_1d,x)){
+_1e=_1d;
+}else{
+if(this._oldXPoint<x){
+_1f=_1d+1;
+}else{
+_1f=_1d-1;
+end=0;
+_20="left";
+}
+_21=true;
+}
+}
+if(_21){
+if(_20==="right"){
+for(var i=_1f;i<end;i++){
+if(this._checkInterval(_1b,i,x)){
+_1e=i;
+break;
+}
+}
+}else{
+for(var i=_1f;i>=end;i--){
+if(this._checkInterval(_1b,i,x)){
+_1e=i;
+break;
+}
+}
+}
+}
+}
+this._oldXPoint=x;
+return _1e;
+},_checkInterval:function(_22,_23,x){
+var _24=_22[_23].coords;
+if(_24.x1==-1){
+if(x<=_24.x2){
+return true;
+}
+}else{
+if(_24.x2==-1){
+if(x>_24.x1){
+return true;
+}
+}else{
+if(_24.x1<x&&x<=_24.x2){
+return true;
+}
+}
+}
+return false;
+},getDropIndex:function(_25,_26){
+var _27=_25.items.length;
+var _28=_25.coords;
+var y=_26.y;
+if(_27>0){
+for(var i=0;i<_27;i++){
+if(y<_25.items[i].y){
+return i;
+}else{
+if(i==_27-1){
+return -1;
+}
+}
+}
+}
+return -1;
+},destroy:function(){
+}});
+(function(){
+dojox.mdnd.areaManager()._dropMode=new dojox.mdnd.dropMode.DefaultDropMode();
+}());
+}
Index: trunk/web/dojo/dojox/mdnd/resources/dnd.css
===================================================================
--- trunk/web/dojo/dojox/mdnd/resources/dnd.css	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/resources/dnd.css	(revision 9)
@@ -0,0 +1,90 @@
+
+.dragNode{
+	z-index:10000;
+	cursor:move;
+}
+.dragHandle{
+	cursor:move;
+}
+.dropIndicator{
+	position:relative;
+	height:50px;
+	border:1px dashed #FFF;
+}
+.dropIndicator > div{
+	position:absolute;
+	left:0;top:0;right:0;bottom:0;	
+	background-color:#000;
+	opacity:0.17; 
+	filter:alpha(opacity=17); 
+	-khtml-opacity:0.17; 
+	-moz-opacity:0.17;
+}
+.dj_ie6 .dropIndicator div{
+	position:relative;
+	height:100%;
+	background-color:#000;
+	filter:alpha(opacity=17); 
+}
+.dj_ie6 .dropIndicator{
+	_margin:10px;
+}
+.dndCover{
+	background-image:url(../../layout/resources/icons/pixel.gif);
+	position:absolute;
+	left:0;
+	top:0;
+	width:100%;
+	height:1000px;
+	z-index:9999;
+	cursor:move;
+}
+.dndCover2{
+	z-index: 10001;
+}
+.dragNode{
+	z-index:10000;
+	cursor:move;
+}
+.dragHandle{
+	cursor:move;
+}
+.dropIndicator{
+	position:relative;
+	height:50px;
+	border:1px dashed #FFF;
+}
+.dropIndicator > div{
+	position:absolute;
+	left:0;top:0;right:0;bottom:0;	
+	background-color:#000;
+	opacity:0.17; 
+	filter:alpha(opacity=17); 
+	-khtml-opacity:0.17; 
+	-moz-opacity:0.17;
+}
+.dj_ie6 .dropIndicator div{
+	position:relative;
+	height:100%;
+	background-color:#000;
+	filter:alpha(opacity=17); 
+}
+.dj_ie6 .dropIndicator{
+	_margin:10px;
+}
+.dndCover{
+	background-image:url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D);
+	position:absolute;
+	left:0;
+	top:0;
+	width:100%;
+	height:1000px;
+	z-index:9999;
+	cursor:move;
+}
+.dj_ie6 .orange .dndCover, .dj_ie7 .orange .dndCover{
+	background-image:url(../../images/oaf/pixel.gif);
+}
+.orange .dndCover2{
+	z-index: 10001;
+}
Index: trunk/web/dojo/dojox/mdnd/DropIndicator.js
===================================================================
--- trunk/web/dojo/dojox/mdnd/DropIndicator.js	(revision 0)
+++ trunk/web/dojo/dojox/mdnd/DropIndicator.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.mdnd.DropIndicator"]){
+dojo._hasResource["dojox.mdnd.DropIndicator"]=true;
+dojo.provide("dojox.mdnd.DropIndicator");
+dojo.require("dojox.mdnd.AreaManager");
+dojo.declare("dojox.mdnd.DropIndicator",null,{node:null,constructor:function(){
+var _1=document.createElement("div");
+var _2=document.createElement("div");
+_1.appendChild(_2);
+dojo.addClass(_1,"dropIndicator");
+this.node=_1;
+},place:function(_3,_4,_5){
+if(_5){
+this.node.style.height=_5.h+"px";
+}
+try{
+if(_4){
+_3.insertBefore(this.node,_4);
+}else{
+_3.appendChild(this.node);
+}
+return this.node;
+}
+catch(e){
+return null;
+}
+},remove:function(){
+if(this.node){
+this.node.style.height="";
+if(this.node.parentNode){
+this.node.parentNode.removeChild(this.node);
+}
+}
+},destroy:function(){
+if(this.node){
+if(this.node.parentNode){
+this.node.parentNode.removeChild(this.node);
+}
+dojo._destroyElement(this.node);
+delete this.node;
+}
+}});
+(function(){
+dojox.mdnd.areaManager()._dropIndicator=new dojox.mdnd.DropIndicator();
+}());
+}
Index: trunk/web/dojo/dojox/highlight.js
===================================================================
--- trunk/web/dojo/dojox/highlight.js	(revision 0)
+++ trunk/web/dojo/dojox/highlight.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.highlight"]){
+dojo._hasResource["dojox.highlight"]=true;
+dojo.provide("dojox.highlight");
+dojo.require("dojox.highlight._base");
+}
Index: trunk/web/dojo/dojox/widget/DocTester/DocTester.css
===================================================================
--- trunk/web/dojo/dojox/widget/DocTester/DocTester.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/DocTester/DocTester.css	(revision 9)
@@ -0,0 +1,30 @@
+.dojoxDocTester pre.testCase{
+	border:0;
+	padding:0.3em;
+	padding-left:2em;
+}
+.dojoxDocTester pre.odd{
+	background-color:#E3E3E3;
+}
+.dojoxDocTester pre.odd.resultOk{
+	background-color:#C3FFC3;
+}
+.dojoxDocTester pre.odd.resultNok{
+	background-color:#FFC3C3;
+}
+.dojoxDocTester pre.even{
+        background-color:#F3F3F3;
+}
+.dojoxDocTester pre.even.resultOk{
+	background-color:#DFFFDF;
+}
+.dojoxDocTester pre.even.resultNok{
+	background-color:#FFCFCF;
+}
+.dojoxDocTester .actualResult{
+	display:none;
+	font-weight:bold;
+}
+.dojoxDocTester .actualResult .result{
+	color:red;
+}
Index: trunk/web/dojo/dojox/widget/DocTester/DocTester.html
===================================================================
--- trunk/web/dojo/dojox/widget/DocTester/DocTester.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/DocTester/DocTester.html	(revision 9)
@@ -0,0 +1,10 @@
+<div dojoAttachPoint="domNode" class="dojoxDocTester">
+	<div dojoAttachPoint="containerNode"></div>
+	<button dojoType="dojox.form.BusyButton" busyLabel="Testing..." dojoAttachPoint="runButtonNode">Run tests</button>
+	<button dojoType="dijit.form.Button" dojoAttachPoint="resetButtonNode" style="display:none;">Reset</button>
+	<span>
+		<span dojoAttachPoint="numTestsNode">0</span> tests,
+		<span dojoAttachPoint="numTestsOkNode">0</span> passed,
+		<span dojoAttachPoint="numTestsNokNode">0</span> failed
+	</span>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/README
===================================================================
--- trunk/web/dojo/dojox/widget/README	(revision 0)
+++ trunk/web/dojo/dojox/widget/README	(revision 9)
@@ -0,0 +1,176 @@
+-------------------------------------------------------------------------------
+dojox.widget Collection
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 10/31/2007
+-------------------------------------------------------------------------------
+Project state:
+
+[Calendar]	experimental
+[CalendarFx]	experimental
+[ColorPicker]	beta
+[Dialog]	experimental
+[FeedPortlet]	experimental
+[FilePicker]	experimental
+[FisheyeList]	experimental
+[FisheyeLite]	beta
+[Iterator]	experimental
+[Loader]	experimental
+[Pager]		experimental
+[Portlet]	experimental
+[PlaceholderMenuItem]	experimental
+[Roller]	experimental
+[RollingList]	experimental
+[SortList]	experimental
+[Toaster]	experimental
+[Wizard]	experimental
+[AnalogGauge]   experimental
+[BarGauge]      experimental
+[Standby]	experimental
+-------------------------------------------------------------------------------
+Credits:
+
+[Calendar] Shane O'Sullivan
+[CalendarFx] Shane O'Sullivan
+[ColorPicker] Peter Higgins (dante)
+[Dialog] Peter Higgins (dante)
+[FeedPortlet] Shane O'Sullivan
+[FilePicker] Nathan Toone (toonetown)
+[FisheyeList] Karl Tiedt (kteidt)
+[FisheyeLite] Peter Higgins (dante)
+[Iterator] Alex Russell (slightlyoff)
+[Loader] Peter Higgins (dante)
+[Pager] Nikolai Onken (nonken), Peter Higgins (dante);
+[PlaceholderMenuItem] Nathan Toone (toonetown)
+[Portlet] Shane O'Sullivan
+[Roller] Peter Higgins (dante)
+[RollingList] Nathan Toone (toonetown)
+[SortList] Peter Higgins (dante)
+[Toaster] Adam Peller (peller)
+[Wizard] Peter Higgins (dante)
+[AnalogGauge] Benjamin Schell (bmschell) CCLA
+[BarGauge] Benjamin Schell (bmschell) CCLA 
+[Standby] Jared Jurkiewicz (jaredj) CCLA 
+[UpgradeBar] Mike Wilcox (mwilcox), Revin Guillen
+
+-------------------------------------------------------------------------------
+Project description
+
+	This is a collection of standalone widgets for use in
+	your website.  Each individual widget is independent
+	of the others.
+	
+-------------------------------------------------------------------------------
+Dependencies:
+
+	Each widget has it's own requirements and dependencies.
+	Most inherit from dijit base-classes such as dijit._Widget,
+	dijit._Templated, etc ... So we will assume the availablility
+	of dojo (core), and dijit packages.
+	
+	Each individual component stores resources in a folder that shares 
+	a name with the Widget. For instance:
+	
+	the Dialog lives in 
+	dojox/widget/Dialog.js ... 
+
+	and the folder:
+	dojox/widget/Dialog/ 	contains a 'Dialog.css', the required 
+	styles for that particular widget. All required templates and 
+	images reside in the folder. 
+	
+	This differs slightly from the rest of DojoX in that each other
+	project uses a shared resources/ folder in the project folder,
+	though uses the same naming convention for stylesheets and templates.
+
+	eg:
+	dojox/layout/resources/ExpandoPane.css
+	dojox.layout.ExpandoPane
+	
+-------------------------------------------------------------------------------
+Documentation
+
+	Please refer to the API-tool, or in-line documentation. All of these
+	widgets are of varying use, quality, and documentation completion.
+	
+-------------------------------------------------------------------------------
+Installation instructions
+
+	These are standalone Widgets, so putting the [widget].js file 
+	in your dojox/widget folder, and copying any files in the
+	/dojox/widget/[widget]/ folder as supplements/templates/etc
+	should be all you need to do.
+
+	eg: FisheyeList:
+	/dojox/widget/FisheyeList.js
+	/dojox/widget/FisheyeList/FisheyeList.css
+
+	should be all you need to use the Fisheye widget.	
+	
+	you can safely import the whole widget project into your 
+	dojox/ root directory from the following SVN url:
+
+	http://svn.dojotoolkit.org/src/dojox/trunk/widget
+
+-------------------------------------------------------------------------------
+Other Notes (Brief widget list):
+
+    * ColorPicker - An HSV ColorPicker intended to be a drop down
+
+	* Calendar - An extension on the dijit._Calendar providing a different UI
+	* CalendarFx - additional mixable FX for transitions in dojox.widget.Calendar
+
+	* Dialog - An extended version of dijit.Dialog with man options and transition.
+
+	* FilePicker - a widget for browsing server-side file systems (can use
+		dojox.data.FileStore as backend store)
+
+	* FisheyeList - the classic FishEye Picker (abandoned)
+
+	* FisheyeLite - A partial replacement for the FisheyeList - serious performance
+		gains, and entirely more extensible in that it simply animates defined
+		properties, relying on the natural styling as a foundation.
+
+	* Iterator - Basic array and data store iterator class
+	
+	* Loader - an experimental Class that listens to XHR 
+		connections in the background, and displays 
+		a loading indicator. Loader will be removed in 1.3, and is (abandoned).
+
+	* PlaceholderMenuItem - a menu item that can be used to inject other menu
+		items at a given location. Extends dijit.Menu directly. 
+
+	* Roller - A component to show many lines of text in a single area, rotating
+		through the options available. Also provides RollerSlide, an extension
+		to the stock fading roller to add a slide animation to the transition.
+
+	* RollingList - A component of the FilePicker widget
+
+	* SortList - a degradable UL with a fixed header, scrolling,
+		and sorting. Can be the direct descendant of a
+		LayoutContainer and will size to fit.
+
+	* Toaster - a messaging system to display unobtrusive 
+		alerts on screen.
+
+	* Wizard - a StackContainer with built-in navigation to
+		ease in the creation of 'step-based' content.
+		Requires dojo >= 1.1 
+                
+	* AnalogGauge - an analog style customizable gauge for displaying values in an
+		animated fashion and with multiple indicators.  Supports easings for 
+		indicator animations, transparent overlays, etc.  Very flexible.
+		Requires dojo >= 1.3
+	
+	* BarGauge - a bar style gauge for displaying values in an animated fashion 
+		and with multiple indicators.  Supports easings for indicator animations,
+		etc.  Very flexible.
+		Requires dojo >= 1.3
+
+	* Standby - a 'blocker' style widget to overlay a translucent div + image over a DOM node/widget to indicate busy.
+		Overlay color, image, and alt text can all be customized.
+		Requires dojo >= 1.3
+
+	* UpgradeBar - Displays the "yellow bar" at the top of a page to indicate the user
+ 		needs to upgrade their browser or a plugin
+		Requires dojo >= 1.3
Index: trunk/web/dojo/dojox/widget/Pager/Pager.html
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/Pager.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/Pager.html	(revision 9)
@@ -0,0 +1,13 @@
+<div dojoAttachPoint="pagerContainer" tabIndex="0" dojoAttachEvent="onkeypress: _handleKey, onfocus: _a11yStyle, onblur:_a11yStyle" class="${orientation}PagerContainer">
+    <div class="pagerContainer">
+		<div dojoAttachPoint="pagerContainerStatus" class="${orientation}PagerStatus"></div>
+		<div dojoAttachPoint="pagerContainerView" class="${orientation}PagerView">
+		    <div dojoAttachPoint="pagerItemContainer"><ul dojoAttachPoint="pagerItems" class="pagerItems"></ul></div>
+		</div>
+		<div dojoAttachPoint="pagerContainerPager" class="${orientation}PagerPager">
+			<div tabIndex="0" dojoAttachPoint="pagerNext" class="pagerIconContainer" dojoAttachEvent="onclick: _pagerNext"><img dojoAttachPoint="pagerIconNext" src="${iconNext}" alt="Next" /></div>
+			<div tabIndex="0" dojoAttachPoint="pagerPrevious" class="pagerIconContainer" dojoAttachEvent="onclick: _pagerPrevious"><img dojoAttachPoint="pagerIconPrevious" src="${iconPrevious}" alt="Previous" /></div>
+		</div>
+    </div>
+	<div dojoAttachPoint="containerNode" style="display:none"></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/Pager/Pager.css
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/Pager.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/Pager.css	(revision 9)
@@ -0,0 +1,73 @@
+.pagerContainer {
+	position: relative;
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	
+	border:1px solid #ccc;
+	-moz-border-radius:6pt;
+	-webkit-border-radius:7pt;
+}
+.horizontalPagerPager {
+	position: absolute;
+	height: 12px;
+	width: 100%;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+.horizontalPagerStatus {
+	position: absolute;
+	height: 10px;
+	padding-top: 5px;
+	padding-bottom: 5px;
+	width: 100%;
+}
+.horizontalPagerView {
+	position: absolute;
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+}
+.horizontalPagerIcon {
+	cursor: pointer;	
+}
+.verticalPagerPager {
+	position: absolute;
+	width: 12px;
+	height: 100%;
+	padding-left: 4px;
+	padding-right: 4px;
+}
+.verticalPagerStatus {
+	position: absolute;
+	width: 10px;
+	padding-left: 5px;
+	padding-right: 5px;
+	height: 100%;
+}
+.verticalPagerView {
+	position: absolute;
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+}
+.verticalPagerIcon {
+	cursor: pointer;	
+}
+.pagerIconContainer {
+	position: absolute;	
+}
+.pagerIconContainer img {
+	cursor: pointer;	
+}
+.pagerItems {
+	list-style: none;
+	padding: 0;
+	margin: 0;	
+}
+	
+.pagerItem {
+	overflow: hidden;
+	padding: 0;
+	margin: 0;
+}
Index: trunk/web/dojo/dojox/widget/Pager/images/pageInactive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Pager/images/pageInactive.png
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/images/pageInactive.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/images/pageInactive.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Pager/images/pageInactive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Pager/images/vPrevious.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Pager/images/vPrevious.png
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/images/vPrevious.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/images/vPrevious.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Pager/images/vPrevious.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Pager/images/hPrevious.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Pager/images/hPrevious.png
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/images/hPrevious.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/images/hPrevious.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Pager/images/hPrevious.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Pager/images/vNext.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Pager/images/vNext.png
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/images/vNext.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/images/vNext.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Pager/images/vNext.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Pager/images/hNext.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Pager/images/hNext.png
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/images/hNext.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/images/hNext.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Pager/images/hNext.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Pager/images/pageActive.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Pager/images/pageActive.png
===================================================================
--- trunk/web/dojo/dojox/widget/Pager/images/pageActive.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager/images/pageActive.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Pager/images/pageActive.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/AutoRotator.js
===================================================================
--- trunk/web/dojo/dojox/widget/AutoRotator.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/AutoRotator.js	(revision 9)
@@ -0,0 +1,104 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.AutoRotator"]){
+dojo._hasResource["dojox.widget.AutoRotator"]=true;
+dojo.provide("dojox.widget.AutoRotator");
+dojo.require("dojox.widget.Rotator");
+(function(d){
+d.declare("dojox.widget.AutoRotator",dojox.widget.Rotator,{suspendOnHover:false,duration:4000,autoStart:true,pauseOnManualChange:false,cycles:-1,random:false,reverse:false,constructor:function(){
+var _1=this;
+if(_1.cycles-0==_1.cycles&&_1.cycles>0){
+_1.cycles++;
+}else{
+_1.cycles=_1.cycles?-1:0;
+}
+_1._connects=[d.connect(_1._domNode,"onmouseover",function(){
+if(_1.suspendOnHover&&!_1.anim&&!_1.wfe){
+var t=_1._endTime,n=_1._now();
+_1._suspended=true;
+_1._resetTimer();
+_1._resumeDuration=t>n?t-n:0.01;
+}
+}),d.connect(_1._domNode,"onmouseout",function(){
+if(_1.suspendOnHover&&!_1.anim){
+_1._suspended=false;
+if(_1.playing&&!_1.wfe){
+_1.play(true);
+}
+}
+})];
+if(_1.autoStart&&_1.panes.length>1){
+_1.play();
+}else{
+_1.pause();
+}
+},destroy:function(){
+d.forEach(this._connects,d.disconnect);
+this.inherited(arguments);
+},play:function(_2,_3){
+this.playing=true;
+this._resetTimer();
+if(_2!==true&&this.cycles>0){
+this.cycles--;
+}
+if(this.cycles==0){
+this.pause();
+}else{
+if(!this._suspended){
+this.onUpdate("play");
+if(_3){
+this._cycle();
+}else{
+var r=(this._resumeDuration||0)-0,u=(r>0?r:(this.panes[this.idx].duration||this.duration))-0;
+this._resumeDuration=0;
+this._endTime=this._now()+u;
+this._timer=setTimeout(d.hitch(this,"_cycle",false),u);
+}
+}
+}
+},pause:function(){
+this.playing=this._suspended=false;
+this.cycles=-1;
+this._resetTimer();
+this.onUpdate("pause");
+},_now:function(){
+return (new Date()).getTime();
+},_resetTimer:function(){
+clearTimeout(this._timer);
+},_cycle:function(_4){
+var _5=this,i=_5.idx,j;
+if(_5.random){
+do{
+j=Math.floor(Math.random()*_5.panes.length+1);
+}while(j==i);
+}else{
+j=i+(_5.reverse?-1:1);
+}
+var _6=_5.go(j);
+if(_6){
+_6.addCallback(function(_7){
+_5.onUpdate("cycle");
+if(_5.playing){
+_5.play(false,_7);
+}
+});
+}
+},onManualChange:function(_8){
+this.cycles=-1;
+if(_8!="play"){
+this._resetTimer();
+if(this.pauseOnManualChange){
+this.pause();
+}
+}
+if(this.playing){
+this.play();
+}
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/RollingList/RollingList.html
===================================================================
--- trunk/web/dojo/dojox/widget/RollingList/RollingList.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/RollingList/RollingList.html	(revision 9)
@@ -0,0 +1,10 @@
+<div class="dojoxRollingList ${className}"
+	><div class="dojoxRollingListContainer" dojoAttachPoint="containerNode" dojoAttachEvent="onkeypress:_onKey"
+	></div
+	><div class="dojoxRollingListButtons" dojoAttachPoint="buttonsNode"
+        ><button dojoType="dijit.form.Button" dojoAttachPoint="okButton"
+				dojoAttachEvent="onClick:_onExecute">${okButtonLabel}</button
+        ><button dojoType="dijit.form.Button" dojoAttachPoint="cancelButton"
+				dojoAttachEvent="onClick:_onCancel">${cancelButtonLabel}</button
+	></div
+></div>
Index: trunk/web/dojo/dojox/widget/RollingList/RollingList.css
===================================================================
--- trunk/web/dojo/dojox/widget/RollingList/RollingList.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/RollingList/RollingList.css	(revision 9)
@@ -0,0 +1,140 @@
+.dojoxRollingList {
+	border: 1px solid #000;
+	height: 20em;
+	background-color: #FFF;
+	position: relative;
+}
+.dijitPopup .dojoxRollingList {
+	position: static;
+}
+.dojoxRollingListContainer {
+	overflow: scroll;
+	overflow-y: hidden;
+	overflow-x: scroll;
+	white-space: nowrap;
+}
+.dojoxRollingListButtons {
+	position: absolute;
+	right: 5px;
+	padding: 5px 0px;
+}
+.dojoxRollingListButtonsHidden .dojoxRollingListButtons {
+	display: none;
+}
+.dojoxRollingListPane {
+	overflow: scroll;
+	overflow-x: hidden;
+	overflow-y: scroll;
+	display:-moz-inline-box;		
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dojoxRollingListPane .dijitMenuItem td {
+	width: 1px;
+}
+.dojoxRollingListPane .dijitMenuItem td.dijitMenuItemLabel {
+	width: auto;
+}
+.dojoxRollingListPane .dijitMenuItemLabel,
+.dojoxRollingListPane .dijitMenuItemIcon {
+	position: static !important;
+}
+.dj_webkit .dojoxRollingListPane,
+.dj_ie .dojoxRollingListPane {
+	padding-right: 15px; 
+}
+.dojoxRollingListPane .dijitMenu {
+	border: none !important;
+}
+.dojoxRollingListItem {
+	cursor: default;
+}
+.tundra .dojoxRollingList {
+	border-color: #b3b3b3;
+}
+.tundra .dijitPopup .dojoxRollingList {
+	border-color: #406b9b;
+}
+.tundra .dojoxRollingListPane {
+	background-color: #f7f7f7;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHover,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #fff;
+	background-color: #999;
+	font-weight: bold;
+}
+.tundra .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #3559ac;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #9aacd6;
+}
+.tundra .dojoxRollingListItem {
+	font-family: inherit;
+}
+.soria .dojoxRollingList {
+	border-color: #8ba0bd;
+}
+.soria .dijitPopup .dojoxRollingList {
+	border-color: #406b9b;
+}
+.soria .dojoxRollingListPane {
+	background-color: #fff;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHover, 
+.soria .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #243C5F;
+	background-color: #ccc;
+	font-weight: bold;
+}
+.soria .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #d9e6f9;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #ecf3fc;
+}
+.soria .dojoxRollingListItem {
+	font-family: inherit;
+}
+.nihilo .dojoxRollingList {
+	border-color: #d3d3d3;
+}
+.nihilo .dijitPopup .dojoxRollingList {
+	border-color: #b3b3b3;
+}
+.nihilo .dojoxRollingListPane {
+	background-color: #fff;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHover,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #243C5F;
+	background-color: #ccc;
+	font-weight: bold;
+}
+.nihilo .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #ffe284;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #fff1c2;
+}
+.nihilo .dojoxRollingListItem {
+	font-family: inherit;
+}
Index: trunk/web/dojo/dojox/widget/CalendarViews.js
===================================================================
--- trunk/web/dojo/dojox/widget/CalendarViews.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/CalendarViews.js	(revision 9)
@@ -0,0 +1,58 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.CalendarViews"]){
+dojo._hasResource["dojox.widget.CalendarViews"]=true;
+dojo.provide("dojox.widget.CalendarViews");
+dojo.experimental("dojox.widget.CalendarViews");
+dojo.require("dojox.widget.Calendar");
+dojo.declare("dojox.widget._CalendarMonth",null,{constructor:function(){
+this._addView(dojox.widget._CalendarMonthView);
+}});
+dojo.declare("dojox.widget._CalendarMonthView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarMonth.html","<div class=\"dojoxCalendarMonthLabels\" style=\"left: 0px;\"  \n\tdojoAttachPoint=\"monthContainer\" dojoAttachEvent=\"onclick: onClick\">\n    <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\">\n        <tbody>\n            <tr class=\"dojoxCalendarMonthGroupTemplate\">\n                <td class=\"dojoxCalendarMonthTemplate\">\n                    <div class=\"dojoxCalendarMonthLabel\"></div>\n                </td>\n             </tr>\n        </tbody>\n    </table>\n</div>\n"),datePart:"year",headerClass:"dojoxCalendarMonthHeader",postCreate:function(){
+this.cloneClass(".dojoxCalendarMonthTemplate",3);
+this.cloneClass(".dojoxCalendarMonthGroupTemplate",2);
+this._populateMonths();
+this.addFx(".dojoxCalendarMonthLabel",this.domNode);
+},_setValueAttr:function(_1){
+this.header.innerHTML=_1.getFullYear();
+},_getMonthNames:dojox.widget._CalendarMonthYearView.prototype._getMonthNames,_populateMonths:dojox.widget._CalendarMonthYearView.prototype._populateMonths,onClick:function(_2){
+if(!dojo.hasClass(_2.target,"dojoxCalendarMonthLabel")){
+dojo.stopEvent(_2);
+return;
+}
+var _3=_2.target.parentNode.cellIndex+(_2.target.parentNode.parentNode.rowIndex*4);
+var _4=this.get("value");
+_4.setMonth(_3);
+this.onValueSelected(_4,_3);
+}});
+dojo.declare("dojox.widget._CalendarYear",null,{parent:null,constructor:function(){
+this._addView(dojox.widget._CalendarYearView);
+}});
+dojo.declare("dojox.widget._CalendarYearView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarYear.html","<div class=\"dojoxCalendarYearLabels\" style=\"left: 0px;\" dojoAttachPoint=\"yearContainer\">\n    <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\" dojoAttachEvent=\"onclick: onClick\">\n        <tbody>\n            <tr class=\"dojoxCalendarYearGroupTemplate\">\n                <td class=\"dojoxCalendarNextMonth dojoxCalendarYearTemplate\">\n                    <div class=\"dojoxCalendarYearLabel\">\n                    </div>\n                </td>\n            </tr>\n        </tbody>\n    </table>\n</div>\n"),displayedYears:6,postCreate:function(){
+this.cloneClass(".dojoxCalendarYearTemplate",3);
+this.cloneClass(".dojoxCalendarYearGroupTemplate",2);
+this._populateYears();
+this.addFx(".dojoxCalendarYearLabel",this.domNode);
+},_setValueAttr:function(_5){
+this._populateYears(_5.getFullYear());
+},_populateYears:dojox.widget._CalendarMonthYearView.prototype._populateYears,adjustDate:function(_6,_7){
+return dojo.date.add(_6,"year",_7*12);
+},onClick:function(_8){
+if(!dojo.hasClass(_8.target,"dojoxCalendarYearLabel")){
+dojo.stopEvent(_8);
+return;
+}
+var _9=Number(_8.target.innerHTML);
+var _a=this.get("value");
+_a.setYear(_9);
+this.onValueSelected(_a,_9);
+}});
+dojo.declare("dojox.widget.Calendar3Pane",[dojox.widget._CalendarBase,dojox.widget._CalendarDay,dojox.widget._CalendarMonth,dojox.widget._CalendarYear],{});
+dojo.declare("dojox.widget.MonthlyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarMonth],{});
+dojo.declare("dojox.widget.YearlyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarYear],{});
+}
Index: trunk/web/dojo/dojox/widget/FisheyeList.js
===================================================================
--- trunk/web/dojo/dojox/widget/FisheyeList.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/FisheyeList.js	(revision 9)
@@ -0,0 +1,428 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.FisheyeList"]){
+dojo._hasResource["dojox.widget.FisheyeList"]=true;
+dojo.provide("dojox.widget.FisheyeList");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit._Contained");
+dojo.declare("dojox.widget.FisheyeList",[dijit._Widget,dijit._Templated,dijit._Container],{constructor:function(){
+this.pos={"x":-1,"y":-1};
+this.timerScale=1;
+},EDGE:{CENTER:0,LEFT:1,RIGHT:2,TOP:3,BOTTOM:4},templateString:"<div class=\"dojoxFisheyeListBar\" dojoAttachPoint=\"containerNode\"></div>",snarfChildDomOutput:true,itemWidth:40,itemHeight:40,itemMaxWidth:150,itemMaxHeight:150,imgNode:null,orientation:"horizontal",isFixed:false,conservativeTrigger:false,effectUnits:2,itemPadding:10,attachEdge:"center",labelEdge:"bottom",postCreate:function(){
+var e=this.EDGE;
+dojo.setSelectable(this.domNode,false);
+var _1=this.isHorizontal=(this.orientation=="horizontal");
+this.selectedNode=-1;
+this.isOver=false;
+this.hitX1=-1;
+this.hitY1=-1;
+this.hitX2=-1;
+this.hitY2=-1;
+this.anchorEdge=this._toEdge(this.attachEdge,e.CENTER);
+this.labelEdge=this._toEdge(this.labelEdge,e.TOP);
+if(this.labelEdge==e.CENTER){
+this.labelEdge=e.TOP;
+}
+if(_1){
+if(this.anchorEdge==e.LEFT){
+this.anchorEdge=e.CENTER;
+}
+if(this.anchorEdge==e.RIGHT){
+this.anchorEdge=e.CENTER;
+}
+if(this.labelEdge==e.LEFT){
+this.labelEdge=e.TOP;
+}
+if(this.labelEdge==e.RIGHT){
+this.labelEdge=e.TOP;
+}
+}else{
+if(this.anchorEdge==e.TOP){
+this.anchorEdge=e.CENTER;
+}
+if(this.anchorEdge==e.BOTTOM){
+this.anchorEdge=e.CENTER;
+}
+if(this.labelEdge==e.TOP){
+this.labelEdge=e.LEFT;
+}
+if(this.labelEdge==e.BOTTOM){
+this.labelEdge=e.LEFT;
+}
+}
+var _2=this.effectUnits;
+this.proximityLeft=this.itemWidth*(_2-0.5);
+this.proximityRight=this.itemWidth*(_2-0.5);
+this.proximityTop=this.itemHeight*(_2-0.5);
+this.proximityBottom=this.itemHeight*(_2-0.5);
+if(this.anchorEdge==e.LEFT){
+this.proximityLeft=0;
+}
+if(this.anchorEdge==e.RIGHT){
+this.proximityRight=0;
+}
+if(this.anchorEdge==e.TOP){
+this.proximityTop=0;
+}
+if(this.anchorEdge==e.BOTTOM){
+this.proximityBottom=0;
+}
+if(this.anchorEdge==e.CENTER){
+this.proximityLeft/=2;
+this.proximityRight/=2;
+this.proximityTop/=2;
+this.proximityBottom/=2;
+}
+},startup:function(){
+this.children=this.getChildren();
+this._initializePositioning();
+if(!this.conservativeTrigger){
+this._onMouseMoveHandle=dojo.connect(document.documentElement,"onmousemove",this,"_onMouseMove");
+}
+if(this.isFixed){
+this._onScrollHandle=dojo.connect(document,"onscroll",this,"_onScroll");
+}
+this._onMouseOutHandle=dojo.connect(document.documentElement,"onmouseout",this,"_onBodyOut");
+this._addChildHandle=dojo.connect(this,"addChild",this,"_initializePositioning");
+this._onResizeHandle=dojo.connect(window,"onresize",this,"_initializePositioning");
+},_initializePositioning:function(){
+this.itemCount=this.children.length;
+this.barWidth=(this.isHorizontal?this.itemCount:1)*this.itemWidth;
+this.barHeight=(this.isHorizontal?1:this.itemCount)*this.itemHeight;
+this.totalWidth=this.proximityLeft+this.proximityRight+this.barWidth;
+this.totalHeight=this.proximityTop+this.proximityBottom+this.barHeight;
+for(var i=0;i<this.children.length;i++){
+this.children[i].posX=this.itemWidth*(this.isHorizontal?i:0);
+this.children[i].posY=this.itemHeight*(this.isHorizontal?0:i);
+this.children[i].cenX=this.children[i].posX+(this.itemWidth/2);
+this.children[i].cenY=this.children[i].posY+(this.itemHeight/2);
+var _3=this.isHorizontal?this.itemWidth:this.itemHeight;
+var r=this.effectUnits*_3;
+var c=this.isHorizontal?this.children[i].cenX:this.children[i].cenY;
+var _4=this.isHorizontal?this.proximityLeft:this.proximityTop;
+var _5=this.isHorizontal?this.proximityRight:this.proximityBottom;
+var _6=this.isHorizontal?this.barWidth:this.barHeight;
+var _7=r;
+var _8=r;
+if(_7>c+_4){
+_7=c+_4;
+}
+if(_8>(_6-c+_5)){
+_8=_6-c+_5;
+}
+this.children[i].effectRangeLeft=_7/_3;
+this.children[i].effectRangeRght=_8/_3;
+}
+this.domNode.style.width=this.barWidth+"px";
+this.domNode.style.height=this.barHeight+"px";
+for(var i=0;i<this.children.length;i++){
+var _9=this.children[i];
+var _a=_9.domNode;
+_a.style.left=_9.posX+"px";
+_a.style.top=_9.posY+"px";
+_a.style.width=this.itemWidth+"px";
+_a.style.height=this.itemHeight+"px";
+_9.imgNode.style.left=this.itemPadding+"%";
+_9.imgNode.style.top=this.itemPadding+"%";
+_9.imgNode.style.width=(100-2*this.itemPadding)+"%";
+_9.imgNode.style.height=(100-2*this.itemPadding)+"%";
+}
+this._calcHitGrid();
+},_overElement:function(_b,e){
+_b=dojo.byId(_b);
+var _c={x:e.pageX,y:e.pageY};
+var bb=dojo._getBorderBox(_b);
+var _d=dojo.coords(_b,true);
+var _e=_d.y;
+var _f=_e+bb.h;
+var _10=_d.x;
+var _11=_10+bb.w;
+return (_c.x>=_10&&_c.x<=_11&&_c.y>=_e&&_c.y<=_f);
+},_onBodyOut:function(e){
+if(this._overElement(dojo.body(),e)){
+return;
+}
+this._setDormant(e);
+},_setDormant:function(e){
+if(!this.isOver){
+return;
+}
+this.isOver=false;
+if(this.conservativeTrigger){
+dojo.disconnect(this._onMouseMoveHandle);
+}
+this._onGridMouseMove(-1,-1);
+},_setActive:function(e){
+if(this.isOver){
+return;
+}
+this.isOver=true;
+if(this.conservativeTrigger){
+this._onMouseMoveHandle=dojo.connect(document.documentElement,"onmousemove",this,"_onMouseMove");
+this.timerScale=0;
+this._onMouseMove(e);
+this._expandSlowly();
+}
+},_onMouseMove:function(e){
+if((e.pageX>=this.hitX1)&&(e.pageX<=this.hitX2)&&(e.pageY>=this.hitY1)&&(e.pageY<=this.hitY2)){
+if(!this.isOver){
+this._setActive(e);
+}
+this._onGridMouseMove(e.pageX-this.hitX1,e.pageY-this.hitY1);
+}else{
+if(this.isOver){
+this._setDormant(e);
+}
+}
+},_onScroll:function(){
+this._calcHitGrid();
+},onResized:function(){
+this._calcHitGrid();
+},_onGridMouseMove:function(x,y){
+this.pos={x:x,y:y};
+this._paint();
+},_paint:function(){
+var x=this.pos.x;
+var y=this.pos.y;
+if(this.itemCount<=0){
+return;
+}
+var pos=this.isHorizontal?x:y;
+var prx=this.isHorizontal?this.proximityLeft:this.proximityTop;
+var siz=this.isHorizontal?this.itemWidth:this.itemHeight;
+var sim=this.isHorizontal?(1-this.timerScale)*this.itemWidth+this.timerScale*this.itemMaxWidth:(1-this.timerScale)*this.itemHeight+this.timerScale*this.itemMaxHeight;
+var cen=((pos-prx)/siz)-0.5;
+var _12=(sim/siz)-0.5;
+if(_12>this.effectUnits){
+_12=this.effectUnits;
+}
+var _13=0;
+if(this.anchorEdge==this.EDGE.BOTTOM){
+var _14=(y-this.proximityTop)/this.itemHeight;
+_13=(_14>0.5)?1:y/(this.proximityTop+(this.itemHeight/2));
+}
+if(this.anchorEdge==this.EDGE.TOP){
+var _14=(y-this.proximityTop)/this.itemHeight;
+_13=(_14<0.5)?1:(this.totalHeight-y)/(this.proximityBottom+(this.itemHeight/2));
+}
+if(this.anchorEdge==this.EDGE.RIGHT){
+var _14=(x-this.proximityLeft)/this.itemWidth;
+_13=(_14>0.5)?1:x/(this.proximityLeft+(this.itemWidth/2));
+}
+if(this.anchorEdge==this.EDGE.LEFT){
+var _14=(x-this.proximityLeft)/this.itemWidth;
+_13=(_14<0.5)?1:(this.totalWidth-x)/(this.proximityRight+(this.itemWidth/2));
+}
+if(this.anchorEdge==this.EDGE.CENTER){
+if(this.isHorizontal){
+_13=y/(this.totalHeight);
+}else{
+_13=x/(this.totalWidth);
+}
+if(_13>0.5){
+_13=1-_13;
+}
+_13*=2;
+}
+for(var i=0;i<this.itemCount;i++){
+var _15=this._weighAt(cen,i);
+if(_15<0){
+_15=0;
+}
+this._setItemSize(i,_15*_13);
+}
+var _16=Math.round(cen);
+var _17=0;
+if(cen<0){
+_16=0;
+}else{
+if(cen>this.itemCount-1){
+_16=this.itemCount-1;
+}else{
+_17=(cen-_16)*((this.isHorizontal?this.itemWidth:this.itemHeight)-this.children[_16].sizeMain);
+}
+}
+this._positionElementsFrom(_16,_17);
+},_weighAt:function(cen,i){
+var _18=Math.abs(cen-i);
+var _19=((cen-i)>0)?this.children[i].effectRangeRght:this.children[i].effectRangeLeft;
+return (_18>_19)?0:(1-_18/_19);
+},_setItemSize:function(p,_1a){
+_1a*=this.timerScale;
+var w=Math.round(this.itemWidth+((this.itemMaxWidth-this.itemWidth)*_1a));
+var h=Math.round(this.itemHeight+((this.itemMaxHeight-this.itemHeight)*_1a));
+if(this.isHorizontal){
+this.children[p].sizeW=w;
+this.children[p].sizeH=h;
+this.children[p].sizeMain=w;
+this.children[p].sizeOff=h;
+var y=0;
+if(this.anchorEdge==this.EDGE.TOP){
+y=(this.children[p].cenY-(this.itemHeight/2));
+}else{
+if(this.anchorEdge==this.EDGE.BOTTOM){
+y=(this.children[p].cenY-(h-(this.itemHeight/2)));
+}else{
+y=(this.children[p].cenY-(h/2));
+}
+}
+this.children[p].usualX=Math.round(this.children[p].cenX-(w/2));
+this.children[p].domNode.style.top=y+"px";
+this.children[p].domNode.style.left=this.children[p].usualX+"px";
+}else{
+this.children[p].sizeW=w;
+this.children[p].sizeH=h;
+this.children[p].sizeOff=w;
+this.children[p].sizeMain=h;
+var x=0;
+if(this.anchorEdge==this.EDGE.LEFT){
+x=this.children[p].cenX-(this.itemWidth/2);
+}else{
+if(this.anchorEdge==this.EDGE.RIGHT){
+x=this.children[p].cenX-(w-(this.itemWidth/2));
+}else{
+x=this.children[p].cenX-(w/2);
+}
+}
+this.children[p].domNode.style.left=x+"px";
+this.children[p].usualY=Math.round(this.children[p].cenY-(h/2));
+this.children[p].domNode.style.top=this.children[p].usualY+"px";
+}
+this.children[p].domNode.style.width=w+"px";
+this.children[p].domNode.style.height=h+"px";
+if(this.children[p].svgNode){
+this.children[p].svgNode.setSize(w,h);
+}
+},_positionElementsFrom:function(p,_1b){
+var pos=0;
+if(this.isHorizontal){
+pos=Math.round(this.children[p].usualX+_1b);
+this.children[p].domNode.style.left=pos+"px";
+}else{
+pos=Math.round(this.children[p].usualY+_1b);
+this.children[p].domNode.style.top=pos+"px";
+}
+this._positionLabel(this.children[p]);
+var _1c=pos;
+for(var i=p-1;i>=0;i--){
+_1c-=this.children[i].sizeMain;
+if(this.isHorizontal){
+this.children[i].domNode.style.left=_1c+"px";
+}else{
+this.children[i].domNode.style.top=_1c+"px";
+}
+this._positionLabel(this.children[i]);
+}
+var _1d=pos;
+for(var i=p+1;i<this.itemCount;i++){
+_1d+=this.children[i-1].sizeMain;
+if(this.isHorizontal){
+this.children[i].domNode.style.left=_1d+"px";
+}else{
+this.children[i].domNode.style.top=_1d+"px";
+}
+this._positionLabel(this.children[i]);
+}
+},_positionLabel:function(itm){
+var x=0;
+var y=0;
+var mb=dojo.marginBox(itm.lblNode);
+if(this.labelEdge==this.EDGE.TOP){
+x=Math.round((itm.sizeW/2)-(mb.w/2));
+y=-mb.h;
+}
+if(this.labelEdge==this.EDGE.BOTTOM){
+x=Math.round((itm.sizeW/2)-(mb.w/2));
+y=itm.sizeH;
+}
+if(this.labelEdge==this.EDGE.LEFT){
+x=-mb.w;
+y=Math.round((itm.sizeH/2)-(mb.h/2));
+}
+if(this.labelEdge==this.EDGE.RIGHT){
+x=itm.sizeW;
+y=Math.round((itm.sizeH/2)-(mb.h/2));
+}
+itm.lblNode.style.left=x+"px";
+itm.lblNode.style.top=y+"px";
+},_calcHitGrid:function(){
+var pos=dojo.coords(this.domNode,true);
+this.hitX1=pos.x-this.proximityLeft;
+this.hitY1=pos.y-this.proximityTop;
+this.hitX2=this.hitX1+this.totalWidth;
+this.hitY2=this.hitY1+this.totalHeight;
+},_toEdge:function(inp,def){
+return this.EDGE[inp.toUpperCase()]||def;
+},_expandSlowly:function(){
+if(!this.isOver){
+return;
+}
+this.timerScale+=0.2;
+this._paint();
+if(this.timerScale<1){
+setTimeout(dojo.hitch(this,"_expandSlowly"),10);
+}
+},destroyRecursive:function(){
+dojo.disconnect(this._onMouseOutHandle);
+dojo.disconnect(this._onMouseMoveHandle);
+dojo.disconnect(this._addChildHandle);
+if(this.isFixed){
+dojo.disconnect(this._onScrollHandle);
+}
+dojo.disconnect(this._onResizeHandle);
+this.inherited("destroyRecursive",arguments);
+}});
+dojo.declare("dojox.widget.FisheyeListItem",[dijit._Widget,dijit._Templated,dijit._Contained],{iconSrc:"",label:"",id:"",templateString:"<div class=\"dojoxFisheyeListItem\">"+"  <img class=\"dojoxFisheyeListItemImage\" dojoAttachPoint=\"imgNode\" dojoAttachEvent=\"onmouseover:onMouseOver,onmouseout:onMouseOut,onclick:onClick\">"+"  <div class=\"dojoxFisheyeListItemLabel\" dojoAttachPoint=\"lblNode\"></div>"+"</div>",_isNode:function(wh){
+if(typeof Element=="function"){
+try{
+return wh instanceof Element;
+}
+catch(e){
+}
+}else{
+return wh&&!isNaN(wh.nodeType);
+}
+},_hasParent:function(_1e){
+return Boolean(_1e&&_1e.parentNode&&this._isNode(_1e.parentNode));
+},postCreate:function(){
+if((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4)==".png")&&dojo.isIE<7){
+if(this._hasParent(this.imgNode)&&this.id!=""){
+var _1f=this.imgNode.parentNode;
+_1f.setAttribute("id",this.id);
+}
+this.imgNode.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='scale')";
+this.imgNode.src=this._blankGif.toString();
+}else{
+if(this._hasParent(this.imgNode)&&this.id!=""){
+var _1f=this.imgNode.parentNode;
+_1f.setAttribute("id",this.id);
+}
+this.imgNode.src=this.iconSrc;
+}
+if(this.lblNode){
+this.lblNode.appendChild(document.createTextNode(this.label));
+}
+dojo.setSelectable(this.domNode,false);
+this.startup();
+},startup:function(){
+this.parent=this.getParent();
+},onMouseOver:function(e){
+if(!this.parent.isOver){
+this.parent._setActive(e);
+}
+if(this.label!=""){
+dojo.addClass(this.lblNode,"dojoxFishSelected");
+this.parent._positionLabel(this);
+}
+},onMouseOut:function(e){
+dojo.removeClass(this.lblNode,"dojoxFishSelected");
+},onClick:function(e){
+}});
+}
Index: trunk/web/dojo/dojox/widget/Portlet.js
===================================================================
--- trunk/web/dojo/dojox/widget/Portlet.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Portlet.js	(revision 9)
@@ -0,0 +1,228 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Portlet"]){
+dojo._hasResource["dojox.widget.Portlet"]=true;
+dojo.experimental("dojox.widget.Portlet");
+dojo.provide("dojox.widget.Portlet");
+dojo.require("dijit.TitlePane");
+dojo.require("dojo.fx");
+dojo.declare("dojox.widget.Portlet",[dijit.TitlePane,dijit._Container],{resizeChildren:true,closable:true,_parents:null,_size:null,dragRestriction:false,buildRendering:function(){
+this.inherited(arguments);
+dojo.style(this.domNode,"visibility","hidden");
+},postCreate:function(){
+this.inherited(arguments);
+dojo.addClass(this.domNode,"dojoxPortlet");
+dojo.removeClass(this.arrowNode,"dijitArrowNode");
+dojo.addClass(this.arrowNode,"dojoxPortletIcon dojoxArrowDown");
+dojo.addClass(this.titleBarNode,"dojoxPortletTitle");
+dojo.addClass(this.hideNode,"dojoxPortletContentOuter");
+dojo.addClass(this.domNode,"dojoxPortlet-"+(!this.dragRestriction?"movable":"nonmovable"));
+var _1=this;
+if(this.resizeChildren){
+this.subscribe("/dnd/drop",function(){
+_1._updateSize();
+});
+this.subscribe("/Portlet/sizechange",function(_2){
+_1.onSizeChange(_2);
+});
+this.connect(window,"onresize",function(){
+_1._updateSize();
+});
+var _3=dojo.hitch(this,function(id,_4){
+var _5=dijit.byId(id);
+if(_5.selectChild){
+var s=this.subscribe(id+"-selectChild",function(_6){
+var n=_1.domNode.parentNode;
+while(n){
+if(n==_6.domNode){
+_1.unsubscribe(s);
+_1._updateSize();
+break;
+}
+n=n.parentNode;
+}
+});
+var _7=dijit.byId(_4);
+if(_5&&_7){
+_1._parents.push({parent:_5,child:_7});
+}
+}
+});
+var _8;
+this._parents=[];
+for(var p=this.domNode.parentNode;p!=null;p=p.parentNode){
+var id=p.getAttribute?p.getAttribute("widgetId"):null;
+if(id){
+_3(id,_8);
+_8=id;
+}
+}
+}
+this.connect(this.titleBarNode,"onmousedown",function(_9){
+if(dojo.hasClass(_9.target,"dojoxPortletIcon")){
+dojo.stopEvent(_9);
+return false;
+}
+return true;
+});
+this.connect(this._wipeOut,"onEnd",function(){
+_1._publish();
+});
+this.connect(this._wipeIn,"onEnd",function(){
+_1._publish();
+});
+if(this.closable){
+this.closeIcon=this._createIcon("dojoxCloseNode","dojoxCloseNodeHover",dojo.hitch(this,"onClose"));
+dojo.style(this.closeIcon,"display","");
+}
+},startup:function(){
+if(this._started){
+return;
+}
+var _a=this.getChildren();
+this._placeSettingsWidgets();
+dojo.forEach(_a,function(_b){
+try{
+if(!_b.started&&!_b._started){
+_b.startup();
+}
+}
+catch(e){
+}
+});
+this.inherited(arguments);
+dojo.style(this.domNode,"visibility","visible");
+},_placeSettingsWidgets:function(){
+dojo.forEach(this.getChildren(),dojo.hitch(this,function(_c){
+if(_c.portletIconClass&&_c.toggle&&!_c.attr("portlet")){
+this._createIcon(_c.portletIconClass,_c.portletIconHoverClass,dojo.hitch(_c,"toggle"));
+dojo.place(_c.domNode,this.containerNode,"before");
+_c.attr("portlet",this);
+this._settingsWidget=_c;
+}
+}));
+},_createIcon:function(_d,_e,fn){
+var _f=dojo.create("div",{"class":"dojoxPortletIcon "+_d,"waiRole":"presentation"});
+dojo.place(_f,this.arrowNode,"before");
+this.connect(_f,"onclick",fn);
+if(_e){
+this.connect(_f,"onmouseover",function(){
+dojo.addClass(_f,_e);
+});
+this.connect(_f,"onmouseout",function(){
+dojo.removeClass(_f,_e);
+});
+}
+return _f;
+},onClose:function(evt){
+dojo.style(this.domNode,"display","none");
+},onSizeChange:function(_10){
+if(_10==this){
+return;
+}
+this._updateSize();
+},_updateSize:function(){
+if(!this.open||!this._started||!this.resizeChildren){
+return;
+}
+if(this._timer){
+clearTimeout(this._timer);
+}
+this._timer=setTimeout(dojo.hitch(this,function(){
+var _11={w:dojo.style(this.domNode,"width"),h:dojo.style(this.domNode,"height")};
+for(var i=0;i<this._parents.length;i++){
+var p=this._parents[i];
+var sel=p.parent.selectedChildWidget;
+if(sel&&sel!=p.child){
+return;
+}
+}
+if(this._size){
+if(this._size.w==_11.w&&this._size.h==_11.h){
+return;
+}
+}
+this._size=_11;
+var fns=["resize","layout"];
+this._timer=null;
+var _12=this.getChildren();
+dojo.forEach(_12,function(_13){
+for(var i=0;i<fns.length;i++){
+if(dojo.isFunction(_13[fns[i]])){
+try{
+_13[fns[i]]();
+}
+catch(e){
+}
+break;
+}
+}
+});
+this.onUpdateSize();
+}),100);
+},onUpdateSize:function(){
+},_publish:function(){
+dojo.publish("/Portlet/sizechange",[this]);
+},_onTitleClick:function(evt){
+if(evt.target==this.arrowNode){
+this.inherited(arguments);
+}
+},addChild:function(_14){
+this._size=null;
+this.inherited(arguments);
+if(this._started){
+this._placeSettingsWidgets();
+this._updateSize();
+}
+if(this._started&&!_14.started&&!_14._started){
+_14.startup();
+}
+},destroyDescendants:function(_15){
+this.inherited(arguments);
+if(this._settingsWidget){
+this._settingsWidget.destroyRecursive(_15);
+}
+},_setCss:function(){
+this.inherited(arguments);
+dojo.style(this.arrowNode,"display",this.toggleable?"":"none");
+}});
+dojo.declare("dojox.widget.PortletSettings",[dijit._Container,dijit.layout.ContentPane],{portletIconClass:"dojoxPortletSettingsIcon",portletIconHoverClass:"dojoxPortletSettingsIconHover",postCreate:function(){
+dojo.style(this.domNode,"display","none");
+dojo.addClass(this.domNode,"dojoxPortletSettingsContainer");
+dojo.removeClass(this.domNode,"dijitContentPane");
+},_setPortletAttr:function(_16){
+this.portlet=_16;
+},toggle:function(){
+var n=this.domNode;
+if(dojo.style(n,"display")=="none"){
+dojo.style(n,{"display":"block","height":"1px","width":"auto"});
+dojo.fx.wipeIn({node:n}).play();
+}else{
+dojo.fx.wipeOut({node:n,onEnd:dojo.hitch(this,function(){
+dojo.style(n,{"display":"none","height":"","width":""});
+})}).play();
+}
+}});
+dojo.declare("dojox.widget.PortletDialogSettings",dojox.widget.PortletSettings,{dimensions:null,constructor:function(_17,_18){
+this.dimensions=_17.dimensions||[300,100];
+},toggle:function(){
+if(!this.dialog){
+dojo["require"]("dijit.Dialog");
+this.dialog=new dijit.Dialog({title:this.title});
+dojo.body().appendChild(this.dialog.domNode);
+this.dialog.containerNode.appendChild(this.domNode);
+dojo.style(this.dialog.domNode,{"width":this.dimensions[0]+"px","height":this.dimensions[1]+"px"});
+dojo.style(this.domNode,"display","");
+}
+if(this.dialog.open){
+this.dialog.hide();
+}else{
+this.dialog.show(this.domNode);
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/Rotator.js
===================================================================
--- trunk/web/dojo/dojox/widget/Rotator.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Rotator.js	(revision 9)
@@ -0,0 +1,154 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Rotator"]){
+dojo._hasResource["dojox.widget.Rotator"]=true;
+dojo.provide("dojox.widget.Rotator");
+dojo.require("dojo.parser");
+(function(d){
+var _1="dojox.widget.rotator.swap",_2=500,_3="display",_4="none",_5="zIndex";
+d.declare("dojox.widget.Rotator",null,{transition:_1,transitionParams:"duration:"+_2,panes:null,constructor:function(_6,_7){
+d.mixin(this,_6);
+var _8=this,t=_8.transition,tt=_8._transitions={},_9=_8._idMap={},tp=_8.transitionParams=eval("({ "+_8.transitionParams+" })"),_7=_8._domNode=dojo.byId(_7),cb=_8._domNodeContentBox=d.contentBox(_7),p={left:0,top:0},_a=function(bt,dt){
+console.warn(_8.declaredClass," - Unable to find transition \"",bt,"\", defaulting to \"",dt,"\".");
+};
+_8.id=_7.id||(new Date()).getTime();
+if(d.style(_7,"position")=="static"){
+d.style(_7,"position","relative");
+}
+tt[t]=d.getObject(t);
+if(!tt[t]){
+_a(t,_1);
+tt[_8.transition=_1]=d.getObject(_1);
+}
+if(!tp.duration){
+tp.duration=_2;
+}
+d.forEach(_8.panes,function(p){
+d.create("div",p,_7);
+});
+var pp=_8.panes=[];
+d.query(">",_7).forEach(function(n,i){
+var q={node:n,idx:i,params:d.mixin({},tp,eval("({ "+(d.attr(n,"transitionParams")||"")+" })"))},r=q.trans=d.attr(n,"transition")||_8.transition;
+d.forEach(["id","title","duration","waitForEvent"],function(a){
+q[a]=d.attr(n,a);
+});
+if(q.id){
+_9[q.id]=i;
+}
+if(!tt[r]&&!(tt[r]=d.getObject(r))){
+_a(r,q.trans=_8.transition);
+}
+p.position="absolute";
+p.display=_4;
+if(_8.idx==null||d.attr(n,"selected")){
+if(_8.idx!=null){
+d.style(pp[_8.idx].node,_3,_4);
+}
+_8.idx=i;
+p.display="";
+}
+d.style(n,p);
+d.query("> script[type^='dojo/method']",n).orphan().forEach(function(s){
+var e=d.attr(s,"event");
+if(e){
+q[e]=d.parser._functionFromScript(s);
+}
+});
+pp.push(q);
+});
+_8._controlSub=d.subscribe(_8.id+"/rotator/control",_8,"control");
+},destroy:function(){
+d.forEach([this._controlSub,this.wfe],d.unsubscribe);
+d.destroy(this._domNode);
+},next:function(){
+return this.go(this.idx+1);
+},prev:function(){
+return this.go(this.idx-1);
+},go:function(p){
+var _b=this,i=_b.idx,pp=_b.panes,_c=pp.length,_d=_b._idMap[p];
+_b._resetWaitForEvent();
+p=_d!=null?_d:(p||0);
+p=p<_c?(p<0?_c-1:p):0;
+if(p==i||_b.anim){
+return null;
+}
+var _e=pp[i],_f=pp[p];
+d.style(_e.node,_5,2);
+d.style(_f.node,_5,1);
+var _10={current:_e,next:_f,rotator:_b},_11=_b.anim=_b._transitions[_f.trans](d.mixin({rotatorBox:_b._domNodeContentBox},_10,_f.params));
+if(_11){
+var def=new d.Deferred(),ev=_f.waitForEvent,h=d.connect(_11,"onEnd",function(){
+d.style(_e.node,{display:_4,left:0,opacity:1,top:0,zIndex:0});
+d.disconnect(h);
+_b.anim=null;
+_b.idx=p;
+if(_e.onAfterOut){
+_e.onAfterOut(_10);
+}
+if(_f.onAfterIn){
+_f.onAfterIn(_10);
+}
+_b.onUpdate("onAfterTransition");
+if(!ev){
+_b._resetWaitForEvent();
+def.callback();
+}
+});
+_b.wfe=ev?d.subscribe(ev,function(){
+_b._resetWaitForEvent();
+def.callback(true);
+}):null;
+_b.onUpdate("onBeforeTransition");
+if(_e.onBeforeOut){
+_e.onBeforeOut(_10);
+}
+if(_f.onBeforeIn){
+_f.onBeforeIn(_10);
+}
+_11.play();
+return def;
+}
+},onUpdate:function(_12,_13){
+d.publish(this.id+"/rotator/update",[_12,this,_13||{}]);
+},_resetWaitForEvent:function(){
+if(this.wfe){
+d.unsubscribe(this.wfe);
+this.wfe=null;
+}
+},control:function(_14){
+var _15=d._toArray(arguments),_16=this;
+_15.shift();
+_16._resetWaitForEvent();
+if(_16[_14]){
+var def=_16[_14].apply(_16,_15);
+if(def){
+def.addCallback(function(){
+_16.onUpdate(_14);
+});
+}
+_16.onManualChange(_14);
+}else{
+console.warn(_16.declaredClass," - Unsupported action \"",_14,"\".");
+}
+},resize:function(_17,_18){
+var b=this._domNodeContentBox={w:_17,h:_18};
+d.contentBox(this._domNode,b);
+d.forEach(this.panes,function(p){
+d.contentBox(p.node,b);
+});
+},onManualChange:function(){
+}});
+d.setObject(_1,function(_19){
+return new d._Animation({play:function(){
+d.style(_19.current.node,_3,_4);
+d.style(_19.next.node,_3,"");
+this._fire("onEnd");
+}});
+});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/DynamicTooltip.js
===================================================================
--- trunk/web/dojo/dojox/widget/DynamicTooltip.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/DynamicTooltip.js	(revision 9)
@@ -0,0 +1,44 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.DynamicTooltip"]){
+dojo._hasResource["dojox.widget.DynamicTooltip"]=true;
+dojo.provide("dojox.widget.DynamicTooltip");
+dojo.experimental("dojox.widget.DynamicTooltip");
+dojo.require("dijit.Tooltip");
+dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget.DynamicTooltip",dijit.Tooltip,{hasLoaded:false,href:"",label:"",preventCache:false,postMixInProperties:function(){
+this.inherited(arguments);
+this._setLoadingLabel();
+},_setLoadingLabel:function(){
+if(this.href){
+this.label=dojo.i18n.getLocalization("dijit","loading",this.lang).loadingState;
+}
+},_setHrefAttr:function(_1){
+this.href=_1;
+this.hasLoaded=false;
+},loadContent:function(){
+if(!this.hasLoaded&&this.href){
+this._setLoadingLabel();
+this.hasLoaded=true;
+dojo.xhrGet({url:this.href,handleAs:"text",tooltipWidget:this,load:function(_2,_3){
+this.tooltipWidget.label=_2;
+this.tooltipWidget.close();
+this.tooltipWidget.open();
+},preventCache:this.preventCache});
+}
+},refresh:function(){
+this.hasLoaded=false;
+},open:function(_4){
+_4=_4||this._connectNodes[0];
+if(!_4){
+return;
+}
+this.loadContent();
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/widget/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Wizard.js	(revision 9)
@@ -0,0 +1,108 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Wizard"]){
+dojo._hasResource["dojox.widget.Wizard"]=true;
+dojo.provide("dojox.widget.Wizard");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojox.widget","Wizard",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget.Wizard",[dijit.layout.StackContainer,dijit._Templated],{widgetsInTemplate:true,templateString:dojo.cache("dojox.widget","Wizard/Wizard.html","<div class=\"dojoxWizard\" dojoAttachPoint=\"wizardNode\">\n    <div class=\"dojoxWizardContainer\" dojoAttachPoint=\"containerNode\"></div>\n    <div class=\"dojoxWizardButtons\" dojoAttachPoint=\"wizardNav\">\n        <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"previousButton\">${previousButtonLabel}</button>\n        <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"nextButton\">${nextButtonLabel}</button>\n        <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"doneButton\" style=\"display:none\">${doneButtonLabel}</button>\n        <button dojoType=\"dijit.form.Button\" type=\"button\" dojoAttachPoint=\"cancelButton\">${cancelButtonLabel}</button>\n    </div>\n</div>\n"),nextButtonLabel:"",previousButtonLabel:"",cancelButtonLabel:"",doneButtonLabel:"",cancelFunction:null,hideDisabled:false,postMixInProperties:function(){
+this.inherited(arguments);
+var _1=dojo.mixin({cancel:dojo.i18n.getLocalization("dijit","common",this.lang).buttonCancel},dojo.i18n.getLocalization("dojox.widget","Wizard",this.lang));
+var _2;
+for(_2 in _1){
+if(!this[_2+"ButtonLabel"]){
+this[_2+"ButtonLabel"]=_1[_2];
+}
+}
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+this.connect(this.nextButton,"onClick","_forward");
+this.connect(this.previousButton,"onClick","back");
+if(this.cancelFunction){
+if(dojo.isString(this.cancelFunction)){
+this.cancelFunction=dojo.getObject(this.cancelFunction);
+}
+this.connect(this.cancelButton,"onClick",this.cancelFunction);
+}else{
+this.cancelButton.domNode.style.display="none";
+}
+this.connect(this.doneButton,"onClick","done");
+this._subscription=dojo.subscribe(this.id+"-selectChild",dojo.hitch(this,"_checkButtons"));
+this._checkButtons();
+this._started=true;
+},_checkButtons:function(){
+var sw=this.selectedChildWidget;
+var _3=sw.isLastChild;
+this.nextButton.set("disabled",_3);
+this._setButtonClass(this.nextButton);
+if(sw.doneFunction){
+this.doneButton.domNode.style.display="";
+if(_3){
+this.nextButton.domNode.style.display="none";
+}
+}else{
+this.doneButton.domNode.style.display="none";
+}
+this.previousButton.set("disabled",!this.selectedChildWidget.canGoBack);
+this._setButtonClass(this.previousButton);
+},_setButtonClass:function(_4){
+_4.domNode.style.display=(this.hideDisabled&&_4.disabled)?"none":"";
+},_forward:function(){
+if(this.selectedChildWidget._checkPass()){
+this.forward();
+}
+},done:function(){
+this.selectedChildWidget.done();
+},destroy:function(){
+dojo.unsubscribe(this._subscription);
+this.inherited(arguments);
+}});
+dojo.declare("dojox.widget.WizardPane",dijit.layout.ContentPane,{canGoBack:true,passFunction:null,doneFunction:null,startup:function(){
+this.inherited(arguments);
+if(this.isFirstChild){
+this.canGoBack=false;
+}
+if(dojo.isString(this.passFunction)){
+this.passFunction=dojo.getObject(this.passFunction);
+}
+if(dojo.isString(this.doneFunction)&&this.doneFunction){
+this.doneFunction=dojo.getObject(this.doneFunction);
+}
+},_onShow:function(){
+if(this.isFirstChild){
+this.canGoBack=false;
+}
+this.inherited(arguments);
+},_checkPass:function(){
+var r=true;
+if(this.passFunction&&dojo.isFunction(this.passFunction)){
+var _5=this.passFunction();
+switch(typeof _5){
+case "boolean":
+r=_5;
+break;
+case "string":
+alert(_5);
+r=false;
+break;
+}
+}
+return r;
+},done:function(){
+if(this.doneFunction&&dojo.isFunction(this.doneFunction)){
+this.doneFunction();
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/UpgradeBar/UpgradeBar.html
===================================================================
--- trunk/web/dojo/dojox/widget/UpgradeBar/UpgradeBar.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/UpgradeBar/UpgradeBar.html	(revision 9)
@@ -0,0 +1,5 @@
+<div class="dojoxUpgradeBar">
+	<div class="dojoxUpgradeBarMessage" dojoAttachPoint="messageNode">message</div>
+	<div class="dojoxUpgradeBarReminderButton" dojoAttachPoint="dontRemindButtonNode" dojoAttachEvent="onclick:_onDontRemindClick">${noRemindButton}</div>
+	<span dojoAttachPoint="closeButtonNode" class="dojoxUpgradeBarCloseIcon" dojoAttachEvent="onclick: hide, onmouseenter: _onCloseEnter, onmouseleave: _onCloseLeave" title="${buttonCancel}"></span>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/UpgradeBar/UpgradeBar.css
===================================================================
--- trunk/web/dojo/dojox/widget/UpgradeBar/UpgradeBar.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/UpgradeBar/UpgradeBar.css	(revision 9)
@@ -0,0 +1,61 @@
+
+.dojoxUpgradeBar {
+	position:absolute;
+	left:0;
+	top:0;
+	width:100%;
+	height:32px;
+	overflow:hidden;
+	z-index:100;
+	background:#f3f2af;
+	box-shadow:0 2px 6px #444;
+	-webkit-box-shadow:0 1px 6px #444;
+	-moz-box-shadow:0 1px 6px #444;
+	font-size:.8em;
+}
+.dj_ie .dojoxUpgradeBar {
+	border-bottom:#665F48 2px solid;
+}
+.dojoxUpgradeBarMessage {
+	position:absolute;
+	padding-left:10px;
+	top:50%;
+	margin-top:-.75em;
+	left:5px;
+	width:100%;
+}
+.dojoxUpgradeBarMessage a{
+	margin-left:10px;
+}
+.dojoxUpgradeBarReminderButton {
+	position:absolute;
+	top:25%;
+	margin-right:50px;
+	font-size:11px;
+	text-decoration:underline;
+	text-align:right;
+	cursor:pointer;
+	right:-20px;
+}
+.dj_ie6 .dojoxUpgradeBarReminderButton {
+	margin-top:2px;
+}
+.dojoxUpgradeBarCloseIcon {
+	background: url("../../../dijit/themes/tundra/images/tabClose.png") no-repeat right top;
+	position: absolute;
+	vertical-align: middle;
+	right: 5px;
+	top: 30%;
+	height: 15px;
+	width: 15px;
+	cursor: pointer;
+}
+.dj_ie6 .dojoxUpgradeBarCloseIcon {
+	background : url("../../../dijit/themes/tundra/images/tabClose.gif") no-repeat right top;
+}
+.dojoxUpgradeBarCloseIcon-hover {
+	background: url("../../../dijit/themes/tundra/images/tabCloseHover.png") no-repeat right top;
+}
+.dj_ie6 .dojoxUpgradeBarCloseIcon-hover {
+	background : url("../../../dijit/themes/tundra/images/tabCloseHover.gif") no-repeat right top;
+}
Index: trunk/web/dojo/dojox/widget/Standby.js
===================================================================
--- trunk/web/dojo/dojox/widget/Standby.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Standby.js	(revision 9)
@@ -0,0 +1,351 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Standby"]){
+dojo._hasResource["dojox.widget.Standby"]=true;
+dojo.provide("dojox.widget.Standby");
+dojo.require("dojo.window");
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.experimental("dojox.widget.Standby");
+dojo.declare("dojox.widget.Standby",[dijit._Widget,dijit._Templated],{templateString:"<div>"+"<div style=\"display: none; opacity: 0; z-index: 9999; "+"position: absolute; cursor:wait;\" dojoAttachPoint=\"_underlayNode\"></div>"+"<img src=\"${image}\" style=\"opacity: 0; display: none; z-index: -10000; "+"position: absolute; top: 0px; left: 0px; cursor:wait;\" "+"dojoAttachPoint=\"_imageNode\">"+"<div style=\"opacity: 0; display: none; z-index: -10000; position: absolute; "+"top: 0px;\" dojoAttachPoint=\"_textNode\"></div>"+"</div>",_underlayNode:null,_imageNode:null,_textNode:null,_centerNode:null,image:dojo.moduleUrl("dojox","widget/Standby/images/loading.gif").toString(),imageText:"Please Wait...",text:"Please wait...",centerIndicator:"image",_displayed:false,_resizeCheck:null,target:"",color:"#C0C0C0",duration:500,_started:false,_parent:null,zIndex:"auto",startup:function(_1){
+if(!this._started){
+if(typeof this.target==="string"){
+var w=dijit.byId(this.target);
+if(w){
+this.target=w.domNode;
+}else{
+this.target=dojo.byId(this.target);
+}
+}
+if(this.text){
+this._textNode.innerHTML=this.text;
+}
+if(this.centerIndicator==="image"){
+this._centerNode=this._imageNode;
+dojo.attr(this._imageNode,"src",this.image);
+dojo.attr(this._imageNode,"alt",this.imageText);
+}else{
+this._centerNode=this._textNode;
+}
+dojo.style(this._underlayNode,{display:"none",backgroundColor:this.color});
+dojo.style(this._centerNode,"display","none");
+this.connect(this._underlayNode,"onclick","_ignore");
+if(this.domNode.parentNode&&this.domNode.parentNode!=dojo.body()){
+dojo.body().appendChild(this.domNode);
+}
+if(dojo.isIE==7){
+this._ieFixNode=dojo.doc.createElement("div");
+dojo.style(this._ieFixNode,{opacity:"0",zIndex:"-1000",position:"absolute",top:"-1000px"});
+dojo.body().appendChild(this._ieFixNode);
+}
+}
+},show:function(){
+if(!this._displayed){
+this._displayed=true;
+this._size();
+this._disableOverflow();
+this._fadeIn();
+}
+},hide:function(){
+if(this._displayed){
+this._size();
+this._fadeOut();
+this._displayed=false;
+if(this._resizeCheck!==null){
+clearInterval(this._resizeCheck);
+this._resizeCheck=null;
+}
+}
+},isVisible:function(){
+return this._displayed;
+},onShow:function(){
+},onHide:function(){
+},uninitialize:function(){
+this._displayed=false;
+if(this._resizeCheck){
+clearInterval(this._resizeCheck);
+}
+dojo.style(this._centerNode,"display","none");
+dojo.style(this._underlayNode,"display","none");
+if(dojo.isIE==7){
+dojo.body().removeChild(this._ieFixNode);
+delete this._ieFixNode;
+}
+this.target=null;
+this._imageNode=null;
+this._textNode=null;
+this._centerNode=null;
+this.inherited(arguments);
+},_size:function(){
+if(this._displayed){
+var _2=dojo.attr(dojo.body(),"dir");
+if(_2){
+_2=_2.toLowerCase();
+}
+var _3;
+var _4=this._scrollerWidths();
+var _5=this.target;
+var _6=dojo.style(this._centerNode,"display");
+dojo.style(this._centerNode,"display","block");
+var _7=dojo.position(_5,true);
+if(_5===dojo.body()||_5===dojo.doc){
+_7=dojo.window.getBox();
+_7.x=_7.l;
+_7.y=_7.t;
+}
+var _8=dojo.marginBox(this._centerNode);
+dojo.style(this._centerNode,"display",_6);
+if(this._ieFixNode){
+_3=-this._ieFixNode.offsetTop/1000;
+_7.x=Math.floor((_7.x+0.9)/_3);
+_7.y=Math.floor((_7.y+0.9)/_3);
+_7.w=Math.floor((_7.w+0.9)/_3);
+_7.h=Math.floor((_7.h+0.9)/_3);
+}
+var zi=dojo.style(_5,"zIndex");
+var _9=zi;
+var _a=zi;
+if(this.zIndex==="auto"){
+if(zi!="auto"){
+_9=parseInt(_9,10)+1;
+_a=parseInt(_a,10)+2;
+}else{
+var _b=_5.parentNode;
+var _c=-100000;
+while(_b&&_b!==dojo.body()){
+zi=dojo.style(_b,"zIndex");
+if(!zi||zi==="auto"){
+_b=_b.parentNode;
+}else{
+var _d=parseInt(zi,10);
+if(_c<_d){
+_c=_d;
+_9=_d+1;
+_a=_d+2;
+}
+_b=_b.parentNode;
+}
+}
+}
+}else{
+_9=parseInt(this.zIndex,10)+1;
+_a=parseInt(this.zIndex,10)+2;
+}
+dojo.style(this._centerNode,"zIndex",_a);
+dojo.style(this._underlayNode,"zIndex",_9);
+var pn=_5.parentNode;
+if(pn&&pn!==dojo.body()&&_5!==dojo.body()&&_5!==dojo.doc){
+var _e=_7.h;
+var _f=_7.w;
+var _10=dojo.position(pn,true);
+if(this._ieFixNode){
+_3=-this._ieFixNode.offsetTop/1000;
+_10.x=Math.floor((_10.x+0.9)/_3);
+_10.y=Math.floor((_10.y+0.9)/_3);
+_10.w=Math.floor((_10.w+0.9)/_3);
+_10.h=Math.floor((_10.h+0.9)/_3);
+}
+_10.w-=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+_10.h-=pn.scrollWidth>pn.clientWidth&&pn.clientWidth>0?_4.h:0;
+if(_2==="rtl"){
+if(dojo.isOpera){
+_7.x+=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+_10.x+=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+}else{
+if(dojo.isIE){
+_10.x+=pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.v:0;
+}else{
+if(dojo.isWebKit){
+}
+}
+}
+}
+if(_10.w<_7.w){
+_7.w=_7.w-_10.w;
+}
+if(_10.h<_7.h){
+_7.h=_7.h-_10.h;
+}
+var _11=_10.y;
+var _12=_10.y+_10.h;
+var _13=_7.y;
+var _14=_7.y+_e;
+var _15=_10.x;
+var _16=_10.x+_10.w;
+var _17=_7.x;
+var _18=_7.x+_f;
+var _19;
+if(_14>_11&&_13<_11){
+_7.y=_10.y;
+_19=_11-_13;
+var _1a=_e-_19;
+if(_1a<_10.h){
+_7.h=_1a;
+}else{
+_7.h-=2*(pn.scrollWidth>pn.clientWidth&&pn.clientWidth>0?_4.h:0);
+}
+}else{
+if(_13<_12&&_14>_12){
+_7.h=_12-_13;
+}else{
+if(_14<=_11||_13>=_12){
+_7.h=0;
+}
+}
+}
+if(_18>_15&&_17<_15){
+_7.x=_10.x;
+_19=_15-_17;
+var _1b=_f-_19;
+if(_1b<_10.w){
+_7.w=_1b;
+}else{
+_7.w-=2*(pn.scrollHeight>pn.clientHeight&&pn.clientHeight>0?_4.w:0);
+}
+}else{
+if(_17<_16&&_18>_16){
+_7.w=_16-_17;
+}else{
+if(_18<=_15||_17>=_16){
+_7.w=0;
+}
+}
+}
+}
+if(_7.h>0&&_7.w>0){
+dojo.style(this._underlayNode,{display:"block",width:_7.w+"px",height:_7.h+"px",top:_7.y+"px",left:_7.x+"px"});
+var _1c=["borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"];
+this._cloneStyles(_1c);
+if(!dojo.isIE){
+_1c=["MozBorderRadius","MozBorderRadiusTopleft","MozBorderRadiusTopright","MozBorderRadiusBottomleft","MozBorderRadiusBottomright","WebkitBorderRadius","WebkitBorderTopLeftRadius","WebkitBorderTopRightRadius","WebkitBorderBottomLeftRadius","WebkitBorderBottomRightRadius"];
+this._cloneStyles(_1c,this);
+}
+var _1d=(_7.h/2)-(_8.h/2);
+var _1e=(_7.w/2)-(_8.w/2);
+if(_7.h>=_8.h&&_7.w>=_8.w){
+dojo.style(this._centerNode,{top:(_1d+_7.y)+"px",left:(_1e+_7.x)+"px",display:"block"});
+}else{
+dojo.style(this._centerNode,"display","none");
+}
+}else{
+dojo.style(this._underlayNode,"display","none");
+dojo.style(this._centerNode,"display","none");
+}
+if(this._resizeCheck===null){
+var _1f=this;
+this._resizeCheck=setInterval(function(){
+_1f._size();
+},100);
+}
+}
+},_cloneStyles:function(_20){
+dojo.forEach(_20,function(_21){
+dojo.style(this._underlayNode,_21,dojo.style(this.target,_21));
+},this);
+},_fadeIn:function(){
+var _22=this;
+var _23=dojo.animateProperty({duration:_22.duration,node:_22._underlayNode,properties:{opacity:{start:0,end:0.75}}});
+var _24=dojo.animateProperty({duration:_22.duration,node:_22._centerNode,properties:{opacity:{start:0,end:1}},onEnd:function(){
+_22.onShow();
+}});
+var _25=dojo.fx.combine([_23,_24]);
+_25.play();
+},_fadeOut:function(){
+var _26=this;
+var _27=dojo.animateProperty({duration:_26.duration,node:_26._underlayNode,properties:{opacity:{start:0.75,end:0}},onEnd:function(){
+dojo.style(this.node,{"display":"none","zIndex":"-1000"});
+}});
+var _28=dojo.animateProperty({duration:_26.duration,node:_26._centerNode,properties:{opacity:{start:1,end:0}},onEnd:function(){
+dojo.style(this.node,{"display":"none","zIndex":"-1000"});
+_26.onHide();
+_26._enableOverflow();
+}});
+var _29=dojo.fx.combine([_27,_28]);
+_29.play();
+},_ignore:function(_2a){
+if(_2a){
+dojo.stopEvent(_2a);
+}
+},_scrollerWidths:function(){
+var div=dojo.doc.createElement("div");
+dojo.style(div,{position:"absolute",opacity:0,overflow:"hidden",width:"50px",height:"50px",zIndex:"-100",top:"-200px",left:"-200px",padding:"0px",margin:"0px"});
+var _2b=dojo.doc.createElement("div");
+dojo.style(_2b,{width:"200px",height:"10px"});
+div.appendChild(_2b);
+dojo.body().appendChild(div);
+var b=dojo.contentBox(div);
+dojo.style(div,"overflow","scroll");
+var a=dojo.contentBox(div);
+dojo.body().removeChild(div);
+return {v:b.w-a.w,h:b.h-a.h};
+},_setTextAttr:function(_2c){
+this._textNode.innerHTML=_2c;
+this.text=_2c;
+},_setColorAttr:function(c){
+dojo.style(this._underlayNode,"backgroundColor",c);
+this.color=c;
+},_setImageTextAttr:function(_2d){
+dojo.attr(this._imageNode,"alt",_2d);
+this.imageText=_2d;
+},_setImageAttr:function(url){
+dojo.attr(this._imageNode,"src",url);
+this.image=url;
+},_setCenterIndicatorAttr:function(_2e){
+this.centerIndicator=_2e;
+if(_2e==="image"){
+this._centerNode=this._imageNode;
+dojo.style(this._textNode,"display","none");
+}else{
+this._centerNode=this._textNode;
+dojo.style(this._imageNode,"display","none");
+}
+},_disableOverflow:function(){
+if(this.target===dojo.body()||this.target===dojo.doc){
+this._overflowDisabled=true;
+var _2f=dojo.body();
+if(_2f.style&&_2f.style.overflow){
+this._oldOverflow=dojo.style(_2f,"overflow");
+}else{
+this._oldOverflow="";
+}
+if(dojo.isIE&&!dojo.isQuirks){
+if(_2f.parentNode&&_2f.parentNode.style&&_2f.parentNode.style.overflow){
+this._oldBodyParentOverflow=_2f.parentNode.style.overflow;
+}else{
+try{
+this._oldBodyParentOverflow=dojo.style(_2f.parentNode,"overflow");
+}
+catch(e){
+this._oldBodyParentOverflow="scroll";
+}
+}
+dojo.style(_2f.parentNode,"overflow","hidden");
+}
+dojo.style(_2f,"overflow","hidden");
+}
+},_enableOverflow:function(){
+if(this._overflowDisabled){
+delete this._overflowDisabled;
+var _30=dojo.body();
+if(dojo.isIE&&!dojo.isQuirks){
+_30.parentNode.style.overflow=this._oldBodyParentOverflow;
+delete this._oldBodyParentOverflow;
+}
+dojo.style(_30,"overflow",this._oldOverflow);
+if(dojo.isWebKit){
+var div=dojo.create("div",{style:{height:"2px"}});
+_30.appendChild(div);
+setTimeout(function(){
+_30.removeChild(div);
+},0);
+}
+delete this._oldOverflow;
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/Loader.js
===================================================================
--- trunk/web/dojo/dojox/widget/Loader.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Loader.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Loader"]){
+dojo._hasResource["dojox.widget.Loader"]=true;
+dojo.provide("dojox.widget.Loader");
+dojo.deprecated("dojox.widget.Loader","","2.0");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.widget.Loader",[dijit._Widget,dijit._Templated],{loadIcon:dojo.moduleUrl("dojox.widget.Loader","icons/loading.gif"),loadMessage:"Loading ...",hasVisuals:true,attachToPointer:true,duration:125,_offset:16,_pointerConnect:null,_xhrStart:null,_xhrEnd:null,templateString:"<div dojoAttachPoint=\"loadNode\" class=\"dojoxLoader\">"+"<img src=\"${loadIcon}\" class=\"dojoxLoaderIcon\"> <span dojoAttachPoint=\"loadMessageNode\" class=\"dojoxLoaderMessage\"></span>"+"</div>",postCreate:function(){
+if(!this.hasVisuals){
+this.loadNode.style.display="none";
+}else{
+if(this.attachToPointer){
+dojo.removeClass(this.loadNode,"dojoxLoader");
+dojo.addClass(this.loadNode,"dojoxLoaderPointer");
+}
+this._hide();
+}
+this._setMessage(this.loadMessage);
+this._xhrStart=this.connect(dojo,"_ioSetArgs","_show");
+this._xhrEnd=this.connect(dojo.Deferred.prototype,"_fire","_hide");
+},_setMessage:function(_1){
+this.loadMessageNode.innerHTML=_1;
+},_putLoader:function(e){
+dijit.placeOnScreen(this.loadNode,{x:e.clientX+this._offset,y:e.clientY+this._offset},["TL","BR"]);
+},_show:function(){
+dojo.publish("Loader",[{message:"started"}]);
+if(this.hasVisuals){
+if(this.attachToPointer){
+this._pointerConnect=this.connect(document,"onmousemove","_putLoader");
+}
+dojo.style(this.loadNode,{opacity:0,display:""});
+dojo.fadeIn({node:this.loadNode,duration:this.duration}).play();
+}
+},_hide:function(){
+dojo.publish("Loader",[{message:"ended"}]);
+if(this.hasVisuals){
+if(this.attachToPointer){
+this.disconnect(this._pointerConnect);
+}
+dojo.fadeOut({node:this.loadNode,duration:this.duration,onEnd:dojo.partial(dojo.style,this.loadNode,"display","none")}).play();
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/Toaster/Toaster.css
===================================================================
--- trunk/web/dojo/dojox/widget/Toaster/Toaster.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/Toaster/Toaster.css	(revision 9)
@@ -0,0 +1,39 @@
+
+.dijitToasterContent {
+	padding:1em;
+	padding-top:0.25em;
+	background:#73c74a;
+}
+.dijitToasterMessage{ 
+	color:#fff;
+}
+.dijitToasterWarning{ }
+.dijitToasterError,
+.dijitToasterFatal{
+	font-weight:bold;
+	color:#fff;
+}
+.dijitToasterWarning .dijitToasterContent{
+	padding:1em;
+	padding-top:0.25em;
+	background:#d4d943;
+} 
+.dijitToasterError .dijitToasterContent{
+	padding:1em;
+	padding-top:0.25em;
+	background:#c46600;
+}
+ 
+.dijitToasterClip {
+	position: absolute;
+	z-index: 5000;
+	overflow: hidden;
+}
+.dijitToasterContainer {
+	display: block;
+	position: absolute;
+	width: 17.5em;
+	margin: 0px;
+	font:0.75em Tahoma, Helvetica, Verdana, Arial;
+}
+ 
Index: trunk/web/dojo/dojox/widget/SortList/SortList.css
===================================================================
--- trunk/web/dojo/dojox/widget/SortList/SortList.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/SortList/SortList.css	(revision 9)
@@ -0,0 +1,57 @@
+.sortListBody { margin:0; padding:0; background:#fff; }
+.soria .sortListBody li,
+.tundra .sortListBody li {
+	border-bottom:1px solid #b7b7b7;
+	padding:2px 2px 2px 5px;	
+}
+.sortListTitle {
+	cursor:pointer; 
+	padding:4px 4px 3px 4px;
+}
+.sortList { height:100%; width:100%; }
+.dijitBorderContainer .dojoxSortList { width: auto; height: auto;}
+.sortListBodyWrapper { 
+	border:1px solid #b7b7b7; 
+	overflow:auto; 
+	height:100%; 
+	cursor:pointer;
+} 
+.soria .sortListBodyWrapper {
+	border:1px solid #333; 
+}
+.soria .sortListItemOdd,
+.tundra .sortListItemOdd { background:#f2f5f9; }
+.tundra .sortListTitle {
+	background:#fafafa url('../../../dijit/themes/tundra/images/titleBarBg.gif') repeat-x top left; 
+	border:1px solid #bfbfbf;
+	border-bottom:0;
+}
+.soria .sortListTitle {
+	background:#4f8ce5 url('../../../dijit/themes/soria/images/titleBar.png') repeat-x top left;
+	background-position:0px -1px; 
+	border:1px solid #333; 
+	border-bottom:0;
+	font-weight:bold;
+	color:#fff; 
+}
+.sortListItemSelected { background:#b7cdee !important; }
+.sortListItemHover { background:#ff6 !important; }
+.soria .sortListIcon,
+.tundra .sortListIcon { 
+	float:right;
+	background:url('../../../dijit/themes/tundra/images/spriteArrows.png') no-repeat;
+	width: 7px;
+}
+.tundra .sortListDesc .sortListIcon {
+	background-position: 0px center;
+}
+.tundra .sortListAsc .sortListIcon {
+	background-position: -21px center;
+}
+.soria .sortListDesc .sortListIcon,
+.soria .sortListAsc .sortListIcon {
+	background:url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png') no-repeat -15px top;
+}
+.soria .sortListDesc .sortListIcon {
+	background-position:-45px 0px; 
+}
Index: trunk/web/dojo/dojox/widget/SortList/SortList.html
===================================================================
--- trunk/web/dojo/dojox/widget/SortList/SortList.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/SortList/SortList.html	(revision 9)
@@ -0,0 +1,9 @@
+<div class="sortList" id="${id}">
+		<div class="sortListTitle" dojoAttachPoint="titleNode">
+		<div class="dijitInline sortListIcon">&thinsp;</div>
+		<span dojoAttachPoint="focusNode">${title}</span>
+		</div>
+		<div class="sortListBodyWrapper" dojoAttachEvent="onmouseover: _set, onmouseout: _unset, onclick:_handleClick" dojoAttachPoint="bodyWrapper">
+		<ul dojoAttachPoint="containerNode" class="sortListBody"></ul>
+	</div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/FisheyeLite.js
===================================================================
--- trunk/web/dojo/dojox/widget/FisheyeLite.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/FisheyeLite.js	(revision 9)
@@ -0,0 +1,42 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.FisheyeLite"]){
+dojo._hasResource["dojox.widget.FisheyeLite"]=true;
+dojo.provide("dojox.widget.FisheyeLite");
+dojo.experimental("dojox.widget.FisheyeLite");
+dojo.require("dijit._Widget");
+dojo.require("dojo.fx.easing");
+dojo.declare("dojox.widget.FisheyeLite",dijit._Widget,{durationIn:350,easeIn:dojo.fx.easing.backOut,durationOut:1420,easeOut:dojo.fx.easing.elasticOut,properties:null,units:"px",constructor:function(_1,_2){
+this.properties=_1.properties||{fontSize:2.75};
+},postCreate:function(){
+this.inherited(arguments);
+this._target=dojo.query(".fisheyeTarget",this.domNode)[0]||this.domNode;
+this._makeAnims();
+this.connect(this.domNode,"onmouseover","show");
+this.connect(this.domNode,"onmouseout","hide");
+this.connect(this._target,"onclick","onClick");
+},show:function(){
+this._runningOut.stop();
+this._runningIn.play();
+},hide:function(){
+this._runningIn.stop();
+this._runningOut.play();
+},_makeAnims:function(){
+var _3={},_4={},cs=dojo.getComputedStyle(this._target);
+for(var p in this.properties){
+var _5=this.properties[p],_6=dojo.isObject(_5),v=parseInt(cs[p]);
+_4[p]={end:v,units:this.units};
+_3[p]=_6?_5:{end:_5*v,units:this.units};
+}
+this._runningIn=dojo.animateProperty({node:this._target,easing:this.easeIn,duration:this.durationIn,properties:_3});
+this._runningOut=dojo.animateProperty({node:this._target,duration:this.durationOut,easing:this.easeOut,properties:_4});
+this.connect(this._runningIn,"onEnd",dojo.hitch(this,"onSelected",this));
+},onClick:function(e){
+},onSelected:function(e){
+}});
+}
Index: trunk/web/dojo/dojox/widget/AnalogGauge.js
===================================================================
--- trunk/web/dojo/dojox/widget/AnalogGauge.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/AnalogGauge.js	(revision 9)
@@ -0,0 +1,246 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.AnalogGauge"]){
+dojo._hasResource["dojox.widget.AnalogGauge"]=true;
+dojo.provide("dojox.widget.AnalogGauge");
+dojo.require("dojox.gfx");
+dojo.require("dojox.widget.gauge._Gauge");
+dojo.experimental("dojox.widget.AnalogGauge");
+dojo.declare("dojox.widget.gauge.AnalogLineIndicator",[dojox.widget.gauge._Indicator],{_getShapes:function(){
+var _1=[];
+_1[0]=this._gauge.surface.createLine({x1:0,y1:-this.offset,x2:0,y2:-this.length-this.offset}).setStroke({color:this.color,width:this.width});
+return _1;
+},draw:function(_2){
+if(this.shapes){
+this._move(_2);
+}else{
+if(this.text){
+this._gauge.surface.rawNode.removeChild(this.text);
+this.text=null;
+}
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var a=this._gauge._getAngle(v);
+this.color=this.color||"#000000";
+this.length=this.length||this._gauge.radius;
+this.width=this.width||1;
+this.offset=this.offset||0;
+this.highlight=this.highlight||"#D0D0D0";
+this.shapes=this._getShapes(this._gauge,this);
+if(this.shapes){
+for(var s=0;s<this.shapes.length;s++){
+this.shapes[s].setTransform([{dx:this._gauge.cx,dy:this._gauge.cy},dojox.gfx.matrix.rotateg(a)]);
+if(this.hover){
+this.shapes[s].getEventSource().setAttribute("hover",this.hover);
+}
+if(this.onDragMove&&!this.noChange){
+this._gauge.connect(this.shapes[s].getEventSource(),"onmousedown",this._gauge.handleMouseDown);
+this.shapes[s].getEventSource().style.cursor="pointer";
+}
+}
+}
+if(this.label){
+var _3=this.length+this.offset;
+var x=this._gauge.cx+(_3+5)*Math.sin(this._gauge._getRadians(a));
+var y=this._gauge.cy-(_3+5)*Math.cos(this._gauge._getRadians(a));
+var _4="start";
+if(a<=-10){
+_4="end";
+}
+if(a>-10&&a<10){
+_4="middle";
+}
+var _5="bottom";
+if((a<-90)||(a>90)){
+_5="top";
+}
+this.text=this._gauge.drawText(""+this.label,x,y,_4,_5,this.color,this.font);
+}
+this.currentValue=this.value;
+}
+},_move:function(_6){
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var c=this.currentValue;
+if(_6){
+var _7=this._gauge._getAngle(v);
+for(var i in this.shapes){
+this.shapes[i].setTransform([{dx:this._gauge.cx,dy:this._gauge.cy},dojox.gfx.matrix.rotateg(_7)]);
+if(this.hover){
+this.shapes[i].getEventSource().setAttribute("hover",this.hover);
+}
+}
+}else{
+if(c!=v){
+var _8=new dojo.Animation({curve:[c,v],duration:this.duration,easing:this.easing});
+dojo.connect(_8,"onAnimate",dojo.hitch(this,function(_9){
+for(var i in this.shapes){
+this.shapes[i].setTransform([{dx:this._gauge.cx,dy:this._gauge.cy},dojox.gfx.matrix.rotateg(this._gauge._getAngle(_9))]);
+if(this.hover){
+this.shapes[i].getEventSource().setAttribute("hover",this.hover);
+}
+}
+this.currentValue=_9;
+}));
+_8.play();
+}
+}
+}});
+dojo.declare("dojox.widget.AnalogGauge",dojox.widget.gauge._Gauge,{startAngle:-90,endAngle:90,cx:0,cy:0,radius:0,_defaultIndicator:dojox.widget.gauge.AnalogLineIndicator,startup:function(){
+if(this.getChildren){
+dojo.forEach(this.getChildren(),function(_a){
+_a.startup();
+});
+}
+this.startAngle=Number(this.startAngle);
+this.endAngle=Number(this.endAngle);
+this.cx=Number(this.cx);
+if(!this.cx){
+this.cx=this.width/2;
+}
+this.cy=Number(this.cy);
+if(!this.cy){
+this.cy=this.height/2;
+}
+this.radius=Number(this.radius);
+if(!this.radius){
+this.radius=Math.min(this.cx,this.cy)-25;
+}
+this._oppositeMiddle=(this.startAngle+this.endAngle)/2+180;
+this.inherited(arguments);
+},_getAngle:function(_b){
+return (_b-this.min)/(this.max-this.min)*(this.endAngle-this.startAngle)+this.startAngle;
+},_getValueForAngle:function(_c){
+if(_c>this._oppositeMiddle){
+_c-=360;
+}
+return (_c-this.startAngle)*(this.max-this.min)/(this.endAngle-this.startAngle)+this.min;
+},_getRadians:function(_d){
+return _d*Math.PI/180;
+},_getDegrees:function(_e){
+return _e*180/Math.PI;
+},draw:function(){
+var i;
+if(this._rangeData){
+for(i=0;i<this._rangeData.length;i++){
+this.drawRange(this._rangeData[i]);
+}
+if(this._img&&this.image.overlay){
+this._img.moveToFront();
+}
+}
+if(this._indicatorData){
+for(i=0;i<this._indicatorData.length;i++){
+this._indicatorData[i].draw();
+}
+}
+},drawRange:function(_f){
+var _10;
+if(_f.shape){
+this.surface.remove(_f.shape);
+_f.shape=null;
+}
+var a1;
+var a2;
+if((_f.low==this.min)&&(_f.high==this.max)&&((this.endAngle-this.startAngle)==360)){
+_10=this.surface.createCircle({cx:this.cx,cy:this.cy,r:this.radius});
+}else{
+a1=this._getRadians(this._getAngle(_f.low));
+a2=this._getRadians(this._getAngle(_f.high));
+var x1=this.cx+this.radius*Math.sin(a1);
+var y1=this.cy-this.radius*Math.cos(a1);
+var x2=this.cx+this.radius*Math.sin(a2);
+var y2=this.cy-this.radius*Math.cos(a2);
+var big=0;
+if((a2-a1)>Math.PI){
+big=1;
+}
+_10=this.surface.createPath();
+if(_f.size){
+_10.moveTo(this.cx+(this.radius-_f.size)*Math.sin(a1),this.cy-(this.radius-_f.size)*Math.cos(a1));
+}else{
+_10.moveTo(this.cx,this.cy);
+}
+_10.lineTo(x1,y1);
+_10.arcTo(this.radius,this.radius,0,big,1,x2,y2);
+if(_f.size){
+_10.lineTo(this.cx+(this.radius-_f.size)*Math.sin(a2),this.cy-(this.radius-_f.size)*Math.cos(a2));
+_10.arcTo((this.radius-_f.size),(this.radius-_f.size),0,big,0,this.cx+(this.radius-_f.size)*Math.sin(a1),this.cy-(this.radius-_f.size)*Math.cos(a1));
+}
+_10.closePath();
+}
+if(dojo.isArray(_f.color)||dojo.isString(_f.color)){
+_10.setStroke({color:_f.color});
+_10.setFill(_f.color);
+}else{
+if(_f.color.type){
+a1=this._getRadians(this._getAngle(_f.low));
+a2=this._getRadians(this._getAngle(_f.high));
+_f.color.x1=this.cx+(this.radius*Math.sin(a1))/2;
+_f.color.x2=this.cx+(this.radius*Math.sin(a2))/2;
+_f.color.y1=this.cy-(this.radius*Math.cos(a1))/2;
+_f.color.y2=this.cy-(this.radius*Math.cos(a2))/2;
+_10.setFill(_f.color);
+_10.setStroke({color:_f.color.colors[0].color});
+}else{
+_10.setStroke({color:"green"});
+_10.setFill("green");
+_10.getEventSource().setAttribute("class",_f.color.style);
+}
+}
+if(_f.hover){
+_10.getEventSource().setAttribute("hover",_f.hover);
+}
+_f.shape=_10;
+},getRangeUnderMouse:function(_11){
+var _12=null;
+var pos=dojo.coords(this.gaugeContent);
+var x=_11.clientX-pos.x;
+var y=_11.clientY-pos.y;
+var r=Math.sqrt((y-this.cy)*(y-this.cy)+(x-this.cx)*(x-this.cx));
+if(r<this.radius){
+var _13=this._getDegrees(Math.atan2(y-this.cy,x-this.cx)+Math.PI/2);
+var _14=this._getValueForAngle(_13);
+if(this._rangeData){
+for(var i=0;(i<this._rangeData.length)&&!_12;i++){
+if((Number(this._rangeData[i].low)<=_14)&&(Number(this._rangeData[i].high)>=_14)){
+_12=this._rangeData[i];
+}
+}
+}
+}
+return _12;
+},_dragIndicator:function(_15,_16){
+var pos=dojo.coords(_15.gaugeContent);
+var x=_16.clientX-pos.x;
+var y=_16.clientY-pos.y;
+var _17=_15._getDegrees(Math.atan2(y-_15.cy,x-_15.cx)+Math.PI/2);
+var _18=_15._getValueForAngle(_17);
+if(_18<_15.min){
+_18=_15.min;
+}
+if(_18>_15.max){
+_18=_15.max;
+}
+_15._drag.value=_18;
+_15._drag.currentValue=_18;
+_15._drag.onDragMove(_15._drag);
+_15._drag.draw(true);
+dojo.stopEvent(_16);
+}});
+}
Index: trunk/web/dojo/dojox/widget/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker.js	(revision 9)
@@ -0,0 +1,275 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.ColorPicker"]){
+dojo._hasResource["dojox.widget.ColorPicker"]=true;
+dojo.provide("dojox.widget.ColorPicker");
+dojo.experimental("dojox.widget.ColorPicker");
+dojo.requireLocalization("dojox.widget","ColorPicker",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojo.cldr","number",null,"ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dojo.dnd.move");
+dojo.require("dojo.fx");
+dojo.require("dojox.color");
+dojo.require("dojo.i18n");
+(function(d){
+var _1=function(_2){
+return _2;
+};
+dojo.declare("dojox.widget.ColorPicker",dijit.form._FormWidget,{showRgb:true,showHsv:true,showHex:true,webSafe:true,animatePoint:true,slideDuration:250,liveUpdate:false,PICKER_HUE_H:150,PICKER_SAT_VAL_H:150,PICKER_SAT_VAL_W:150,PICKER_HUE_SELECTOR_H:8,PICKER_SAT_SELECTOR_H:10,PICKER_SAT_SELECTOR_W:10,value:"#ffffff",_underlay:d.moduleUrl("dojox.widget","ColorPicker/images/underlay.png"),_hueUnderlay:d.moduleUrl("dojox.widget","ColorPicker/images/hue.png"),_pickerPointer:d.moduleUrl("dojox.widget","ColorPicker/images/pickerPointer.png"),_huePickerPointer:d.moduleUrl("dojox.widget","ColorPicker/images/hueHandle.png"),_huePickerPointerAlly:d.moduleUrl("dojox.widget","ColorPicker/images/hueHandleA11y.png"),templateString:dojo.cache("dojox.widget","ColorPicker/ColorPicker.html","<table class=\"dojoxColorPicker\" dojoAttachEvent=\"onkeypress: _handleKey\" cellpadding=\"0\" cellspacing=\"0\">\n\t<tr>\n\t\t<td valign=\"top\" class=\"dojoxColorPickerRightPad\">\n\t\t\t<div class=\"dojoxColorPickerBox\">\n\t\t\t\t<!-- Forcing ABS in style attr due to dojo DND issue with not picking it up form the class. -->\n\t\t\t\t<img role=\"status\" title=\"${saturationPickerTitle}\" alt=\"${saturationPickerTitle}\" class=\"dojoxColorPickerPoint\" src=\"${_pickerPointer}\" tabIndex=\"0\" dojoAttachPoint=\"cursorNode\" style=\"position: absolute; top: 0px; left: 0px;\">\n\t\t\t\t<img role=\"presentation\" alt=\"\" dojoAttachPoint=\"colorUnderlay\" dojoAttachEvent=\"onclick: _setPoint, onmousedown: _stopDrag\" class=\"dojoxColorPickerUnderlay\" src=\"${_underlay}\" ondragstart=\"return false\">\n\t\t\t</div>\n\t\t</td>\n\t\t<td valign=\"top\" class=\"dojoxColorPickerRightPad\">\n\t\t\t<div class=\"dojoxHuePicker\">\n\t\t\t\t<!-- Forcing ABS in style attr due to dojo DND issue with not picking it up form the class. -->\n\t\t\t\t<img role=\"status\" dojoAttachPoint=\"hueCursorNode\" tabIndex=\"0\" class=\"dojoxHuePickerPoint\" title=\"${huePickerTitle}\" alt=\"${huePickerTitle}\" src=\"${_huePickerPointer}\" style=\"position: absolute; top: 0px; left: 0px;\">\n\t\t\t\t<div class=\"dojoxHuePickerUnderlay\" dojoAttachPoint=\"hueNode\">\n\t\t\t\t    <img role=\"presentation\" alt=\"\" dojoAttachEvent=\"onclick: _setHuePoint, onmousedown: _stopDrag\" src=\"${_hueUnderlay}\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</td>\n\t\t<td valign=\"top\">\n\t\t\t<table cellpadding=\"0\" cellspacing=\"0\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td valign=\"top\" class=\"dojoxColorPickerPreviewContainer\">\n\t\t\t\t\t\t<table cellpadding=\"0\" cellspacing=\"0\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td valign=\"top\" class=\"dojoxColorPickerRightPad\">\n\t\t\t\t\t\t\t\t\t<div dojoAttachPoint=\"previewNode\" class=\"dojoxColorPickerPreview\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td valign=\"top\">\n\t\t\t\t\t\t\t\t\t<div dojoAttachPoint=\"safePreviewNode\" class=\"dojoxColorPickerWebSafePreview\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td valign=\"bottom\">\n\t\t\t\t\t\t<table class=\"dojoxColorPickerOptional\" cellpadding=\"0\" cellspacing=\"0\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<div class=\"dijitInline dojoxColorPickerRgb\" dojoAttachPoint=\"rgbNode\">\n\t\t\t\t\t\t\t\t\t\t<table cellpadding=\"1\" cellspacing=\"1\">\n\t\t\t\t\t\t\t\t\t\t<tr><td><label for=\"${_uId}_r\">${redLabel}</label></td><td><input id=\"${_uId}_r\" dojoAttachPoint=\"Rval\" size=\"1\" dojoAttachEvent=\"onchange: _colorInputChange\"></td></tr>\n\t\t\t\t\t\t\t\t\t\t<tr><td><label for=\"${_uId}_g\">${greenLabel}</label></td><td><input id=\"${_uId}_g\" dojoAttachPoint=\"Gval\" size=\"1\" dojoAttachEvent=\"onchange: _colorInputChange\"></td></tr>\n\t\t\t\t\t\t\t\t\t\t<tr><td><label for=\"${_uId}_b\">${blueLabel}</label></td><td><input id=\"${_uId}_b\" dojoAttachPoint=\"Bval\" size=\"1\" dojoAttachEvent=\"onchange: _colorInputChange\"></td></tr>\n\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t\t<div class=\"dijitInline dojoxColorPickerHsv\" dojoAttachPoint=\"hsvNode\">\n\t\t\t\t\t\t\t\t\t\t<table cellpadding=\"1\" cellspacing=\"1\">\n\t\t\t\t\t\t\t\t\t\t<tr><td><label for=\"${_uId}_h\">${hueLabel}</label></td><td><input id=\"${_uId}_h\" dojoAttachPoint=\"Hval\"size=\"1\" dojoAttachEvent=\"onchange: _colorInputChange\"> ${degLabel}</td></tr>\n\t\t\t\t\t\t\t\t\t\t<tr><td><label for=\"${_uId}_s\">${saturationLabel}</label></td><td><input id=\"${_uId}_s\" dojoAttachPoint=\"Sval\" size=\"1\" dojoAttachEvent=\"onchange: _colorInputChange\"> ${percentSign}</td></tr>\n\t\t\t\t\t\t\t\t\t\t<tr><td><label for=\"${_uId}_v\">${valueLabel}</label></td><td><input id=\"${_uId}_v\" dojoAttachPoint=\"Vval\" size=\"1\" dojoAttachEvent=\"onchange: _colorInputChange\"> ${percentSign}</td></tr>\n\t\t\t\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td colspan=\"2\">\n\t\t\t\t\t\t\t\t\t<div class=\"dojoxColorPickerHex\" dojoAttachPoint=\"hexNode\" aria-live=\"polite\">\t\n\t\t\t\t\t\t\t\t\t\t<label for=\"${_uId}_hex\">&nbsp;${hexLabel}&nbsp;</label><input id=\"${_uId}_hex\" dojoAttachPoint=\"hexCode, focusNode, valueNode\" size=\"6\" class=\"dojoxColorPickerHexCode\" dojoAttachEvent=\"onchange: _colorInputChange\">\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t</tr>\n</table>\n\n"),postMixInProperties:function(){
+if(dojo.hasClass(dojo.body(),"dijit_a11y")){
+this._huePickerPointer=this._huePickerPointerAlly;
+}
+this._uId=dijit.getUniqueId(this.id);
+dojo.mixin(this,dojo.i18n.getLocalization("dojox.widget","ColorPicker"));
+dojo.mixin(this,dojo.i18n.getLocalization("dojo.cldr","number"));
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+if(d.isIE<7){
+this.colorUnderlay.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this._underlay+"', sizingMethod='scale')";
+this.colorUnderlay.src=this._blankGif.toString();
+}
+if(!this.showRgb){
+this.rgbNode.style.visibility="hidden";
+}
+if(!this.showHsv){
+this.hsvNode.style.visibility="hidden";
+}
+if(!this.showHex){
+this.hexNode.style.visibility="hidden";
+}
+if(!this.webSafe){
+this.safePreviewNode.style.visibility="hidden";
+}
+},startup:function(){
+if(this._started){
+return;
+}
+this._started=true;
+this.set("value",this.value);
+this._mover=new d.dnd.move.boxConstrainedMoveable(this.cursorNode,{box:{t:-(this.PICKER_SAT_SELECTOR_H/2),l:-(this.PICKER_SAT_SELECTOR_W/2),w:this.PICKER_SAT_VAL_W,h:this.PICKER_SAT_VAL_H}});
+this._hueMover=new d.dnd.move.boxConstrainedMoveable(this.hueCursorNode,{box:{t:-(this.PICKER_HUE_SELECTOR_H/2),l:0,w:0,h:this.PICKER_HUE_H}});
+this._subs=[];
+this._subs.push(d.subscribe("/dnd/move/stop",d.hitch(this,"_clearTimer")));
+this._subs.push(d.subscribe("/dnd/move/start",d.hitch(this,"_setTimer")));
+this._keyListeners=[];
+this._connects.push(dijit.typematic.addKeyListener(this.hueCursorNode,{charOrCode:dojo.keys.UP_ARROW,shiftKey:false,metaKey:false,ctrlKey:false,altKey:false},this,dojo.hitch(this,this._updateHueCursorNode),25,25));
+this._connects.push(dijit.typematic.addKeyListener(this.hueCursorNode,{charOrCode:dojo.keys.DOWN_ARROW,shiftKey:false,metaKey:false,ctrlKey:false,altKey:false},this,dojo.hitch(this,this._updateHueCursorNode),25,25));
+this._connects.push(dijit.typematic.addKeyListener(this.cursorNode,{charOrCode:dojo.keys.UP_ARROW,shiftKey:false,metaKey:false,ctrlKey:false,altKey:false},this,dojo.hitch(this,this._updateCursorNode),25,25));
+this._connects.push(dijit.typematic.addKeyListener(this.cursorNode,{charOrCode:dojo.keys.DOWN_ARROW,shiftKey:false,metaKey:false,ctrlKey:false,altKey:false},this,dojo.hitch(this,this._updateCursorNode),25,25));
+this._connects.push(dijit.typematic.addKeyListener(this.cursorNode,{charOrCode:dojo.keys.LEFT_ARROW,shiftKey:false,metaKey:false,ctrlKey:false,altKey:false},this,dojo.hitch(this,this._updateCursorNode),25,25));
+this._connects.push(dijit.typematic.addKeyListener(this.cursorNode,{charOrCode:dojo.keys.RIGHT_ARROW,shiftKey:false,metaKey:false,ctrlKey:false,altKey:false},this,dojo.hitch(this,this._updateCursorNode),25,25));
+},_setValueAttr:function(_3){
+if(!this._started){
+return;
+}
+this.setColor(_3,true);
+},setColor:function(_4,_5){
+var _6=dojox.color.fromString(_4);
+this._updatePickerLocations(_6);
+this._updateColorInputs(_6);
+this._updateValue(_6,_5);
+},_setTimer:function(_7){
+dijit.focus(_7.node);
+d.setSelectable(this.domNode,false);
+this._timer=setInterval(d.hitch(this,"_updateColor"),45);
+},_clearTimer:function(_8){
+clearInterval(this._timer);
+this._timer=null;
+this.onChange(this.value);
+d.setSelectable(this.domNode,true);
+},_setHue:function(h){
+d.style(this.colorUnderlay,"backgroundColor",dojox.color.fromHsv(h,100,100).toHex());
+},_updateHueCursorNode:function(_9,_a,e){
+if(_9!==-1){
+var y=dojo.style(this.hueCursorNode,"top");
+var _b=(this.PICKER_HUE_SELECTOR_H/2);
+y+=_b;
+var _c=false;
+if(e.charOrCode==dojo.keys.UP_ARROW){
+if(y>0){
+y-=1;
+_c=true;
+}
+}else{
+if(e.charOrCode==dojo.keys.DOWN_ARROW){
+if(y<this.PICKER_HUE_H){
+y+=1;
+_c=true;
+}
+}
+}
+y-=_b;
+if(_c){
+dojo.style(this.hueCursorNode,"top",y+"px");
+}
+}else{
+this._updateColor(true);
+}
+},_updateCursorNode:function(_d,_e,e){
+var _f=this.PICKER_SAT_SELECTOR_H/2;
+var _10=this.PICKER_SAT_SELECTOR_W/2;
+if(_d!==-1){
+var y=dojo.style(this.cursorNode,"top");
+var x=dojo.style(this.cursorNode,"left");
+y+=_f;
+x+=_10;
+var _11=false;
+if(e.charOrCode==dojo.keys.UP_ARROW){
+if(y>0){
+y-=1;
+_11=true;
+}
+}else{
+if(e.charOrCode==dojo.keys.DOWN_ARROW){
+if(y<this.PICKER_SAT_VAL_H){
+y+=1;
+_11=true;
+}
+}else{
+if(e.charOrCode==dojo.keys.LEFT_ARROW){
+if(x>0){
+x-=1;
+_11=true;
+}
+}else{
+if(e.charOrCode==dojo.keys.RIGHT_ARROW){
+if(x<this.PICKER_SAT_VAL_W){
+x+=1;
+_11=true;
+}
+}
+}
+}
+}
+if(_11){
+y-=_f;
+x-=_10;
+dojo.style(this.cursorNode,"top",y+"px");
+dojo.style(this.cursorNode,"left",x+"px");
+}
+}else{
+this._updateColor(true);
+}
+},_updateColor:function(){
+var _12=this.PICKER_HUE_SELECTOR_H/2,_13=this.PICKER_SAT_SELECTOR_H/2,_14=this.PICKER_SAT_SELECTOR_W/2;
+var _15=d.style(this.hueCursorNode,"top")+_12,_16=d.style(this.cursorNode,"top")+_13,_17=d.style(this.cursorNode,"left")+_14,h=Math.round(360-(_15/this.PICKER_HUE_H*360)),col=dojox.color.fromHsv(h,_17/this.PICKER_SAT_VAL_W*100,100-(_16/this.PICKER_SAT_VAL_H*100));
+this._updateColorInputs(col);
+this._updateValue(col,true);
+if(h!=this._hue){
+this._setHue(h);
+}
+},_colorInputChange:function(e){
+var col,_18=false;
+switch(e.target){
+case this.hexCode:
+col=dojox.color.fromString(e.target.value);
+_18=true;
+break;
+case this.Rval:
+case this.Gval:
+case this.Bval:
+col=dojox.color.fromArray([this.Rval.value,this.Gval.value,this.Bval.value]);
+_18=true;
+break;
+case this.Hval:
+case this.Sval:
+case this.Vval:
+col=dojox.color.fromHsv(this.Hval.value,this.Sval.value,this.Vval.value);
+_18=true;
+break;
+}
+if(_18){
+this._updatePickerLocations(col);
+this._updateColorInputs(col);
+this._updateValue(col,true);
+}
+},_updateValue:function(col,_19){
+var hex=col.toHex();
+this.value=this.valueNode.value=hex;
+if(_19&&(!this._timer||this.liveUpdate)){
+this.onChange(hex);
+}
+},_updatePickerLocations:function(col){
+var _1a=this.PICKER_HUE_SELECTOR_H/2,_1b=this.PICKER_SAT_SELECTOR_H/2,_1c=this.PICKER_SAT_SELECTOR_W/2;
+var hsv=col.toHsv(),_1d=Math.round(this.PICKER_HUE_H-hsv.h/360*this.PICKER_HUE_H)-_1a,_1e=Math.round(hsv.s/100*this.PICKER_SAT_VAL_W)-_1c,_1f=Math.round(this.PICKER_SAT_VAL_H-hsv.v/100*this.PICKER_SAT_VAL_H)-_1b;
+if(this.animatePoint){
+d.fx.slideTo({node:this.hueCursorNode,duration:this.slideDuration,top:_1d,left:0}).play();
+d.fx.slideTo({node:this.cursorNode,duration:this.slideDuration,top:_1f,left:_1e}).play();
+}else{
+d.style(this.hueCursorNode,"top",_1d+"px");
+d.style(this.cursorNode,{left:_1e+"px",top:_1f+"px"});
+}
+if(hsv.h!=this._hue){
+this._setHue(hsv.h);
+}
+},_updateColorInputs:function(col){
+var hex=col.toHex();
+if(this.showRgb){
+this.Rval.value=col.r;
+this.Gval.value=col.g;
+this.Bval.value=col.b;
+}
+if(this.showHsv){
+var hsv=col.toHsv();
+this.Hval.value=Math.round((hsv.h));
+this.Sval.value=Math.round(hsv.s);
+this.Vval.value=Math.round(hsv.v);
+}
+if(this.showHex){
+this.hexCode.value=hex;
+}
+this.previewNode.style.backgroundColor=hex;
+if(this.webSafe){
+this.safePreviewNode.style.backgroundColor=_1(hex);
+}
+},_setHuePoint:function(evt){
+var _20=(this.PICKER_HUE_SELECTOR_H/2);
+var _21=evt.layerY-_20;
+if(this.animatePoint){
+d.fx.slideTo({node:this.hueCursorNode,duration:this.slideDuration,top:_21,left:0,onEnd:d.hitch(this,function(){
+this._updateColor(true);
+dijit.focus(this.hueCursorNode);
+})}).play();
+}else{
+d.style(this.hueCursorNode,"top",_21+"px");
+this._updateColor(false);
+}
+},_setPoint:function(evt){
+var _22=this.PICKER_SAT_SELECTOR_H/2;
+var _23=this.PICKER_SAT_SELECTOR_W/2;
+var _24=evt.layerY-_22;
+var _25=evt.layerX-_23;
+if(evt){
+dijit.focus(evt.target);
+}
+if(this.animatePoint){
+d.fx.slideTo({node:this.cursorNode,duration:this.slideDuration,top:_24,left:_25,onEnd:d.hitch(this,function(){
+this._updateColor(true);
+dijit.focus(this.cursorNode);
+})}).play();
+}else{
+d.style(this.cursorNode,{left:_25+"px",top:_24+"px"});
+this._updateColor(false);
+}
+},_handleKey:function(e){
+},focus:function(){
+if(!this._focused){
+dijit.focus(this.focusNode);
+}
+},_stopDrag:function(e){
+dojo.stopEvent(e);
+},destroy:function(){
+this.inherited(arguments);
+dojo.forEach(this._subs,function(sub){
+dojo.unsubscribe(sub);
+});
+delete this._subs;
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/FisheyeList/FisheyeList.css
===================================================================
--- trunk/web/dojo/dojox/widget/FisheyeList/FisheyeList.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/FisheyeList/FisheyeList.css	(revision 9)
@@ -0,0 +1,24 @@
+.dojoxFisheyeListItemLabel {
+	font-family: Arial, Helvetica, sans-serif;
+	background-color: #eee;
+	border: 2px solid #666;
+	padding: 2px;
+	text-align: center;
+	position: absolute;
+	display: none;
+	white-space:pre; 
+}
+.dojoxFisheyeListItemLabel.dojoxFishSelected {
+	display: block;
+}
+.dojoxFisheyeListItemImage {
+	border: 0px;
+	position: absolute;
+}
+.dojoxFisheyeListItem {
+	position: absolute;
+	z-index: 2;
+}
+.dojoxFisheyeListBar {
+	position: relative;
+}
Index: trunk/web/dojo/dojox/widget/BarGauge.js
===================================================================
--- trunk/web/dojo/dojox/widget/BarGauge.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/BarGauge.js	(revision 9)
@@ -0,0 +1,194 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.BarGauge"]){
+dojo._hasResource["dojox.widget.BarGauge"]=true;
+dojo.provide("dojox.widget.BarGauge");
+dojo.require("dojox.gfx");
+dojo.require("dojox.widget.gauge._Gauge");
+dojo.experimental("dojox.widget.BarGauge");
+dojo.declare("dojox.widget.gauge.BarLineIndicator",[dojox.widget.gauge._Indicator],{width:1,_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var _1=this._gauge._getPosition(v);
+var _2=[];
+if(this.width>1){
+_2[0]=this._gauge.surface.createRect({x:_1,y:this._gauge.dataY+this.offset,width:this.width,height:this.length});
+_2[0].setStroke({color:this.color});
+_2[0].setFill(this.color);
+}else{
+_2[0]=this._gauge.surface.createLine({x1:_1,y1:this._gauge.dataY+this.offset,x2:_1,y2:this._gauge.dataY+this.offset+this.length});
+_2[0].setStroke({color:this.color});
+}
+return _2;
+},draw:function(_3){
+var i;
+if(this.shapes){
+this._move(_3);
+}else{
+if(this.shapes){
+for(i=0;i<this.shapes.length;i++){
+this._gauge.surface.remove(this.shapes[i]);
+}
+this.shapes=null;
+}
+if(this.text){
+this._gauge.surface.rawNode.removeChild(this.text);
+this.text=null;
+}
+this.color=this.color||"#000000";
+this.length=this.length||this._gauge.dataHeight;
+this.width=this.width||3;
+this.offset=this.offset||0;
+this.highlight=this.highlight||"#4D4D4D";
+this.highlight2=this.highlight2||"#A3A3A3";
+this.shapes=this._getShapes(this._gauge,this);
+if(this.label){
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var _4=this._gauge._getPosition(v);
+this.text=this._gauge.drawText(""+this.label,_4,this._gauge.dataY+this.offset-5,"middle","top",this.color,this.font);
+}
+for(i=0;i<this.shapes.length;i++){
+if(this.hover){
+this.shapes[i].getEventSource().setAttribute("hover",this.hover);
+}
+if(this.onDragMove&&!this.noChange){
+this._gauge.connect(this.shapes[i].getEventSource(),"onmousedown",this._gauge.handleMouseDown);
+this.shapes[i].getEventSource().style.cursor="pointer";
+}
+}
+this.currentValue=this.value;
+}
+},_move:function(_5){
+var v=this.value;
+if(v<this.min){
+v=this.min;
+}
+if(v>this.max){
+v=this.max;
+}
+var c=this._gauge._getPosition(this.currentValue);
+this.currentValue=v;
+v=this._gauge._getPosition(v)-this._gauge.dataX;
+if(_5){
+this.shapes[0].applyTransform(dojox.gfx.matrix.translate(v-(this.shapes[0].matrix?this.shapes[0].matrix.dx:0),0));
+}else{
+var _6=new dojo.Animation({curve:[c,v],duration:this.duration,easing:this.easing});
+dojo.connect(_6,"onAnimate",dojo.hitch(this,function(_7){
+this.shapes[0].applyTransform(dojox.gfx.matrix.translate(_7-(this.shapes[0].matrix?this.shapes[0].matrix.dx:0),0));
+}));
+_6.play();
+}
+}});
+dojo.declare("dojox.widget.BarGauge",dojox.widget.gauge._Gauge,{dataX:5,dataY:5,dataWidth:0,dataHeight:0,_defaultIndicator:dojox.widget.gauge.BarLineIndicator,startup:function(){
+if(this.getChildren){
+dojo.forEach(this.getChildren(),function(_8){
+_8.startup();
+});
+}
+if(!this.dataWidth){
+this.dataWidth=this.gaugeWidth-10;
+}
+if(!this.dataHeight){
+this.dataHeight=this.gaugeHeight-10;
+}
+this.inherited(arguments);
+},_getPosition:function(_9){
+return this.dataX+Math.floor((_9-this.min)/(this.max-this.min)*this.dataWidth);
+},_getValueForPosition:function(_a){
+return (_a-this.dataX)*(this.max-this.min)/this.dataWidth+this.min;
+},draw:function(){
+if(!this.surface){
+this.createSurface();
+}
+var i;
+if(this._rangeData){
+for(i=0;i<this._rangeData.length;i++){
+this.drawRange(this._rangeData[i]);
+}
+if(this._img&&this.image.overlay){
+this._img.moveToFront();
+}
+}
+if(this._indicatorData){
+for(i=0;i<this._indicatorData.length;i++){
+this._indicatorData[i].draw();
+}
+}
+},drawRange:function(_b){
+if(_b.shape){
+this.surface.remove(_b.shape);
+_b.shape=null;
+}
+var x1=this._getPosition(_b.low);
+var x2=this._getPosition(_b.high);
+var _c=this.surface.createRect({x:x1,y:this.dataY,width:x2-x1,height:this.dataHeight});
+if(dojo.isArray(_b.color)||dojo.isString(_b.color)){
+_c.setStroke({color:_b.color});
+_c.setFill(_b.color);
+}else{
+if(_b.color.type){
+var y=this.dataY+this.dataHeight/2;
+_b.color.x1=x1;
+_b.color.x2=x2;
+_b.color.y1=y;
+_b.color.y2=y;
+_c.setFill(_b.color);
+_c.setStroke({color:_b.color.colors[0].color});
+}else{
+_c.setStroke({color:"green"});
+_c.setFill("green");
+_c.getEventSource().setAttribute("class",_b.color.style);
+}
+}
+if(_b.hover){
+_c.getEventSource().setAttribute("hover",_b.hover);
+}
+_b.shape=_c;
+},getRangeUnderMouse:function(_d){
+var _e=null;
+var _f=dojo.coords(this.gaugeContent);
+var x=_d.clientX-_f.x;
+var _10=this._getValueForPosition(x);
+if(this._rangeData){
+for(var i=0;(i<this._rangeData.length)&&!_e;i++){
+if((Number(this._rangeData[i].low)<=_10)&&(Number(this._rangeData[i].high)>=_10)){
+_e=this._rangeData[i];
+}
+}
+}
+return _e;
+},_dragIndicator:function(_11,_12){
+var pos=dojo.coords(_11.gaugeContent);
+var x=_12.clientX-pos.x;
+var _13=_11._getValueForPosition(x);
+if(_13<_11.min){
+_13=_11.min;
+}
+if(_13>_11.max){
+_13=_11.max;
+}
+_11._drag.value=_13;
+_11._drag.onDragMove(_11._drag);
+_11._drag.draw(true);
+dojo.stopEvent(_12);
+}});
+}
Index: trunk/web/dojo/dojox/widget/FeedPortlet.js
===================================================================
--- trunk/web/dojo/dojox/widget/FeedPortlet.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/FeedPortlet.js	(revision 9)
@@ -0,0 +1,227 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.FeedPortlet"]){
+dojo._hasResource["dojox.widget.FeedPortlet"]=true;
+dojo.provide("dojox.widget.FeedPortlet");
+dojo.require("dojox.widget.Portlet");
+dojo.require("dijit.Tooltip");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.Button");
+dojo.require("dojox.data.GoogleFeedStore");
+dojo.declare("dojox.widget.FeedPortlet",dojox.widget.Portlet,{local:false,maxResults:5,url:"",openNew:true,showFeedTitle:true,postCreate:function(){
+this.inherited(arguments);
+if(this.local&&!dojox.data.AtomReadStore){
+throw Error(this.declaredClass+": To use local feeds, you must include dojox.data.AtomReadStore on the page.");
+}
+},onFeedError:function(){
+this.containerNode.innerHTML="Error accessing the feed.";
+},addChild:function(_1){
+this.inherited(arguments);
+var _2=_1.attr("feedPortletUrl");
+if(_2){
+this.set("url",_2);
+}
+},_getTitle:function(_3){
+var t=this.store.getValue(_3,"title");
+return this.local?t.text:t;
+},_getLink:function(_4){
+var l=this.store.getValue(_4,"link");
+return this.local?l.href:l;
+},_getContent:function(_5){
+var c=this.store.getValue(_5,"summary");
+if(!c){
+return null;
+}
+if(this.local){
+c=c.text;
+}
+c=c.split("<script").join("<!--").split("</script>").join("-->");
+c=c.split("<iframe").join("<!--").split("</iframe>").join("-->");
+return c;
+},_setUrlAttr:function(_6){
+this.url=_6;
+if(this._started){
+this.load();
+}
+},startup:function(){
+if(this.started||this._started){
+return;
+}
+this.inherited(arguments);
+if(!this.url||this.url==""){
+throw new Error(this.id+": A URL must be specified for the feed portlet");
+}
+if(this.url&&this.url!=""){
+this.load();
+}
+},load:function(){
+if(this._resultList){
+dojo.destroy(this._resultList);
+}
+var _7,_8;
+if(this.local){
+_7=new dojox.data.AtomReadStore({url:this.url});
+_8={};
+}else{
+_7=new dojox.data.GoogleFeedStore();
+_8={url:this.url};
+}
+var _9={query:_8,count:this.maxResults,onComplete:dojo.hitch(this,function(_a){
+if(this.showFeedTitle&&_7.getFeedValue){
+var _b=this.store.getFeedValue("title");
+if(_b){
+this.set("title",_b.text?_b.text:_b);
+}
+}
+this.generateResults(_a);
+}),onError:dojo.hitch(this,"onFeedError")};
+this.store=_7;
+_7.fetch(_9);
+},generateResults:function(_c){
+var _d=this.store;
+var _e;
+var ul=(this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletList"},this.containerNode));
+dojo.forEach(_c,dojo.hitch(this,function(_f){
+var li=dojo.create("li",{innerHTML:"<a href=\""+this._getLink(_f)+"\""+(this.openNew?" target=\"_blank\"":"")+">"+this._getTitle(_f)+"</a>"},ul);
+dojo.connect(li,"onmouseover",dojo.hitch(this,function(evt){
+if(_e){
+clearTimeout(_e);
+}
+_e=setTimeout(dojo.hitch(this,function(){
+_e=null;
+var _10=this._getContent(_f);
+if(!_10){
+return;
+}
+var _11="<div class=\"dojoxFeedPortletPreview\">"+_10+"</div>";
+dojo.query("li",ul).forEach(function(_12){
+if(_12!=evt.target){
+dijit.hideTooltip(_12);
+}
+});
+dijit.showTooltip(_11,li.firstChild,!this.isLeftToRight());
+}),500);
+}));
+dojo.connect(li,"onmouseout",function(){
+if(_e){
+clearTimeout(_e);
+_e=null;
+}
+dijit.hideTooltip(li.firstChild);
+});
+}));
+this.resize();
+}});
+dojo.declare("dojox.widget.ExpandableFeedPortlet",dojox.widget.FeedPortlet,{onlyOpenOne:false,generateResults:function(_13){
+var _14=this.store;
+var _15="dojoxPortletToggleIcon";
+var _16="dojoxPortletItemCollapsed";
+var _17="dojoxPortletItemOpen";
+var _18;
+var ul=(this._resultList=dojo.create("ul",{"class":"dojoxFeedPortletExpandableList"},this.containerNode));
+dojo.forEach(_13,dojo.hitch(this,dojo.hitch(this,function(_19){
+var li=dojo.create("li",{"class":_16},ul);
+var _1a=dojo.create("div",{style:"width: 100%;"},li);
+var _1b=dojo.create("div",{"class":"dojoxPortletItemSummary",innerHTML:this._getContent(_19)},li);
+dojo.create("span",{"class":_15,innerHTML:"<img src='"+dojo.config.baseUrl+"/resources/blank.gif'>"},_1a);
+var a=dojo.create("a",{href:this._getLink(_19),innerHTML:this._getTitle(_19)},_1a);
+if(this.openNew){
+dojo.attr(a,"target","_blank");
+}
+})));
+dojo.connect(ul,"onclick",dojo.hitch(this,function(evt){
+if(dojo.hasClass(evt.target,_15)||dojo.hasClass(evt.target.parentNode,_15)){
+dojo.stopEvent(evt);
+var li=evt.target.parentNode;
+while(li.tagName!="LI"){
+li=li.parentNode;
+}
+if(this.onlyOpenOne){
+dojo.query("li",ul).filter(function(_1c){
+return _1c!=li;
+}).removeClass(_17).addClass(_16);
+}
+var _1d=dojo.hasClass(li,_17);
+dojo.toggleClass(li,_17,!_1d);
+dojo.toggleClass(li,_16,_1d);
+}
+}));
+}});
+dojo.declare("dojox.widget.PortletFeedSettings",dojox.widget.PortletSettings,{"class":"dojoxPortletFeedSettings",urls:null,selectedIndex:0,buildRendering:function(){
+if(this.urls&&this.urls.length>0){
+var s=dojo.create("select");
+if(this.srcNodeRef){
+dojo.place(s,this.srcNodeRef,"before");
+dojo.destroy(this.srcNodeRef);
+}
+this.srcNodeRef=s;
+dojo.forEach(this.urls,function(url){
+dojo.create("option",{value:url.url||url,innerHTML:url.label||url},s);
+});
+}
+if(this.srcNodeRef.tagName=="SELECT"){
+this.text=this.srcNodeRef;
+var div=dojo.create("div",{},this.srcNodeRef,"before");
+div.appendChild(this.text);
+this.srcNodeRef=div;
+dojo.query("option",this.text).filter("return !item.value;").forEach("item.value = item.innerHTML");
+if(!this.text.value){
+dojo.attr(s||this.text,"value",this.text.options[this.selectedIndex].value);
+}
+}
+this.inherited(arguments);
+},postCreate:function(){
+if(!this.text){
+var _1e=this.text=new dijit.form.TextBox({});
+dojo.create("span",{innerHTML:"Choose Url: "},this.domNode);
+this.addChild(_1e);
+}
+this.addChild(new dijit.form.Button({label:"Load",onClick:dojo.hitch(this,function(){
+this.portlet.attr("url",(this.text.tagName=="SELECT")?this.text.value:this.text.attr("value"));
+if(this.text.tagName=="SELECT"){
+dojo.some(this.text.options,dojo.hitch(this,function(opt,idx){
+if(opt.selected){
+this.set("selectedIndex",idx);
+return true;
+}
+return false;
+}));
+}
+this.toggle();
+})}));
+this.addChild(new dijit.form.Button({label:"Cancel",onClick:dojo.hitch(this,"toggle")}));
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(!this.portlet){
+throw Error(this.declaredClass+": A PortletFeedSettings widget cannot exist without a Portlet.");
+}
+if(this.text.tagName=="SELECT"){
+dojo.forEach(this.text.options,dojo.hitch(this,function(opt,_1f){
+dojo.attr(opt,"selected",_1f==this.selectedIndex);
+}));
+}
+var url=this.portlet.attr("url");
+if(url){
+if(this.text.tagName=="SELECT"){
+if(!this.urls&&dojo.query("option[value='"+url+"']",this.text).length<1){
+dojo.place(dojo.create("option",{value:url,innerHTML:url,selected:"true"}),this.text,"first");
+}
+}else{
+this.text.attr("value",url);
+}
+}else{
+this.portlet.attr("url",this.get("feedPortletUrl"));
+}
+},_getFeedPortletUrlAttr:function(){
+return this.text.value;
+}});
+}
Index: trunk/web/dojo/dojox/widget/gauge/_Gauge.css
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/_Gauge.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/_Gauge.css	(revision 9)
@@ -0,0 +1,51 @@
+@CHARSET "ISO-8859-1";
+.dojoxGaugeContent {
+	font-family: Verdana;
+	border-width: 1px;
+	border-style: solid;
+	border-color: #CCCCCC;
+}
+.dojoxGaugeRange1 {
+	fill: #606060 ;
+	stroke: #606060 ;
+}
+.dojoxGaugeRange2 {
+	fill: #707070 ;
+	stroke: #707070 ;
+}
+.dojoxGaugeRange3 {
+	fill: #808080 ;
+	stroke: #808080 ;
+}
+.dojoxGaugeRange4 {
+	fill: #909090 ;
+	stroke: #909090 ;
+}
+.dojoxGaugeRange5 {
+	fill: #A0A0A0;
+	stroke: #A0A0A0;
+}
+.dojoxGaugeRange6 {
+	fill: #B0B0B0;
+	stroke: #B0B0B0;
+}
+.dojoxGaugeRange7 {
+	fill: #C0C0C0;
+	stroke: #C0C0C0;
+}
+.dojoxGaugeRange8 {
+	fill: #D0D0D0;
+	stroke: #D0D0D0;
+}
+.dojoxGaugeRange9 {
+	fill: #E0E0E0;
+	stroke: #E0E0E0;
+}
+.dojoxGaugeRange10 {
+	fill: #F0F0F0;
+	stroke: #F0F0F0;
+}
+.testing {
+	fill: blue;
+	stroke: blue;
+}
Index: trunk/web/dojo/dojox/widget/gauge/_Indicator.html
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/_Indicator.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/_Indicator.html	(revision 9)
@@ -0,0 +1,4 @@
+<div class="dojoxGaugeIndicatorDiv">
+	<label class="dojoxGaugeIndicatorLabel" for="${title}">${title}:</label>
+	<input class="dojoxGaugeIndicatorInput" name="${title}" size="5" value="${value}" dojoAttachPoint="valueNode" dojoAttachEvent="onchange:_update"></input>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/gauge/AnalogArcIndicator.js
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/AnalogArcIndicator.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/AnalogArcIndicator.js	(revision 9)
@@ -0,0 +1,69 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.AnalogArcIndicator"]){
+dojo._hasResource["dojox.widget.gauge.AnalogArcIndicator"]=true;
+dojo.provide("dojox.widget.gauge.AnalogArcIndicator");
+dojo.require("dojox.widget.AnalogGauge");
+dojo.experimental("dojox.widget.gauge.AnalogArcIndicator");
+dojo.declare("dojox.widget.gauge.AnalogArcIndicator",[dojox.widget.gauge.AnalogLineIndicator],{_createArc:function(_1){
+if(this.shapes[0]){
+var a=this._gauge._getRadians(this._gauge._getAngle(_1));
+var _2=Math.cos(a);
+var _3=Math.sin(a);
+var sa=this._gauge._getRadians(this._gauge.startAngle);
+var _4=Math.cos(sa);
+var _5=Math.sin(sa);
+var _6=this.offset+this.width;
+var p=["M"];
+p.push(this._gauge.cx+this.offset*_5);
+p.push(this._gauge.cy-this.offset*_4);
+p.push("A",this.offset,this.offset,0,((a-sa)>Math.PI)?1:0,1);
+p.push(this._gauge.cx+this.offset*_3);
+p.push(this._gauge.cy-this.offset*_2);
+p.push("L");
+p.push(this._gauge.cx+_6*_3);
+p.push(this._gauge.cy-_6*_2);
+p.push("A",_6,_6,0,((a-sa)>Math.PI)?1:0,0);
+p.push(this._gauge.cx+_6*_5);
+p.push(this._gauge.cy-_6*_4);
+this.shapes[0].setShape(p.join(" "));
+this.currentValue=_1;
+}
+},draw:function(_7){
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+if(this.shapes){
+if(_7){
+this._createArc(v);
+}else{
+var _8=new dojo.Animation({curve:[this.currentValue,v],duration:this.duration,easing:this.easing});
+dojo.connect(_8,"onAnimate",dojo.hitch(this,this._createArc));
+_8.play();
+}
+}else{
+var _9={color:this.color,width:1};
+if(this.color.type){
+_9.color=this.color.colors[0].color;
+}
+this.shapes=[this._gauge.surface.createPath().setStroke(_9).setFill(this.color)];
+this._createArc(v);
+if(this.hover){
+this.shapes[0].getEventSource().setAttribute("hover",this.hover);
+}
+if(this.onDragMove&&!this.noChange){
+this._gauge.connect(this.shapes[0].getEventSource(),"onmousedown",this._gauge.handleMouseDown);
+this.shapes[0].getEventSource().style.cursor="pointer";
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/gauge/_Gauge.js
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/_Gauge.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/_Gauge.js	(revision 9)
@@ -0,0 +1,304 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge._Gauge"]){
+dojo._hasResource["dojox.widget.gauge._Gauge"]=true;
+dojo.provide("dojox.widget.gauge._Gauge");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit._Contained");
+dojo.require("dijit.Tooltip");
+dojo.require("dojo.fx.easing");
+dojo.require("dojox.gfx");
+dojo.experimental("dojox.widget.gauge._Gauge");
+dojo.declare("dojox.widget.gauge._Gauge",[dijit._Widget,dijit._Templated,dijit._Container],{width:0,height:0,background:null,min:0,max:0,image:null,useRangeStyles:0,useTooltip:true,majorTicks:null,minorTicks:null,_defaultIndicator:null,defaultColors:[[0,84,170,1],[68,119,187,1],[102,153,204,1],[153,187,238,1],[153,204,255,1],[204,238,255,1],[221,238,255,1]],min:null,max:null,surface:null,hideValues:false,gaugeContent:undefined,templateString:dojo.cache("dojox.widget.gauge","_Gauge.html","<div>\n\t<div class=\"dojoxGaugeContent\" dojoAttachPoint=\"gaugeContent\"></div>\n\t<div dojoAttachPoint=\"containerNode\"></div>\n\t<div dojoAttachPoint=\"mouseNode\"></div>\n</div>\n"),_backgroundDefault:{color:"#E0E0E0"},_rangeData:null,_indicatorData:null,_drag:null,_img:null,_overOverlay:false,_lastHover:"",startup:function(){
+if(this.image===null){
+this.image={};
+}
+this.connect(this.gaugeContent,"onmousemove",this.handleMouseMove);
+this.connect(this.gaugeContent,"onmouseover",this.handleMouseOver);
+this.connect(this.gaugeContent,"onmouseout",this.handleMouseOut);
+this.connect(this.gaugeContent,"onmouseup",this.handleMouseUp);
+if(!dojo.isArray(this.ranges)){
+this.ranges=[];
+}
+if(!dojo.isArray(this.indicators)){
+this.indicators=[];
+}
+var _1=[],_2=[];
+var i;
+if(this.hasChildren()){
+var _3=this.getChildren();
+for(i=0;i<_3.length;i++){
+if(/dojox\.widget\..*Indicator/.test(_3[i].declaredClass)){
+_2.push(_3[i]);
+continue;
+}
+switch(_3[i].declaredClass){
+case "dojox.widget.gauge.Range":
+_1.push(_3[i]);
+break;
+}
+}
+this.ranges=this.ranges.concat(_1);
+this.indicators=this.indicators.concat(_2);
+}
+if(!this.background){
+this.background=this._backgroundDefault;
+}
+this.background=this.background.color||this.background;
+if(!this.surface){
+this.createSurface();
+}
+this.addRanges(this.ranges);
+if(this.minorTicks&&this.minorTicks.interval){
+this.setMinorTicks(this.minorTicks);
+}
+if(this.majorTicks&&this.majorTicks.interval){
+this.setMajorTicks(this.majorTicks);
+}
+for(i=0;i<this.indicators.length;i++){
+this.addIndicator(this.indicators[i]);
+}
+},_setTicks:function(_4,_5,_6){
+var i;
+if(_4&&dojo.isArray(_4._ticks)){
+for(i=0;i<_4._ticks.length;i++){
+this.removeIndicator(_4._ticks[i]);
+}
+}
+var t={length:_5.length,offset:_5.offset,noChange:true};
+if(_5.color){
+t.color=_5.color;
+}
+if(_5.font){
+t.font=_5.font;
+}
+_5._ticks=[];
+for(i=this.min;i<=this.max;i+=_5.interval){
+t.value=i;
+if(_6){
+t.label=""+i;
+}
+_5._ticks.push(this.addIndicator(t));
+}
+return _5;
+},setMinorTicks:function(_7){
+this.minorTicks=this._setTicks(this.minorTicks,_7,false);
+},setMajorTicks:function(_8){
+this.majorTicks=this._setTicks(this.majorTicks,_8,true);
+},postCreate:function(){
+if(this.hideValues){
+dojo.style(this.containerNode,"display","none");
+}
+dojo.style(this.mouseNode,"width","0");
+dojo.style(this.mouseNode,"height","0");
+dojo.style(this.mouseNode,"position","absolute");
+dojo.style(this.mouseNode,"z-index","100");
+if(this.useTooltip){
+dijit.showTooltip("test",this.mouseNode,!this.isLeftToRight());
+dijit.hideTooltip(this.mouseNode);
+}
+},createSurface:function(){
+this.gaugeContent.style.width=this.width+"px";
+this.gaugeContent.style.height=this.height+"px";
+this.surface=dojox.gfx.createSurface(this.gaugeContent,this.width,this.height);
+this._background=this.surface.createRect({x:0,y:0,width:this.width,height:this.height});
+this._background.setFill(this.background);
+if(this.image.url){
+this._img=this.surface.createImage({width:this.image.width||this.width,height:this.image.height||this.height,src:this.image.url});
+if(this.image.overlay){
+this._img.getEventSource().setAttribute("overlay",true);
+}
+if(this.image.x||this.image.y){
+this._img.setTransform({dx:this.image.x||0,dy:this.image.y||0});
+}
+}
+},setBackground:function(_9){
+if(!_9){
+_9=this._backgroundDefault;
+}
+this.background=_9.color||_9;
+this._background.setFill(this.background);
+},addRange:function(_a){
+this.addRanges([_a]);
+},addRanges:function(_b){
+if(!this._rangeData){
+this._rangeData=[];
+}
+var _c;
+for(var i=0;i<_b.length;i++){
+_c=_b[i];
+if((this.min===null)||(_c.low<this.min)){
+this.min=_c.low;
+}
+if((this.max===null)||(_c.high>this.max)){
+this.max=_c.high;
+}
+if(!_c.color){
+var _d=this._rangeData.length%this.defaultColors.length;
+if(dojox.gfx.svg&&this.useRangeStyles>0){
+_d=(this._rangeData.length%this.useRangeStyles)+1;
+_c.color={style:"dojoxGaugeRange"+_d};
+}else{
+_d=this._rangeData.length%this.defaultColors.length;
+_c.color=this.defaultColors[_d];
+}
+}
+this._rangeData[this._rangeData.length]=_c;
+}
+this.draw();
+},addIndicator:function(_e){
+_e._gauge=this;
+if(!_e.declaredClass){
+_e=new this._defaultIndicator(_e);
+}
+if(!_e.hideValue){
+this.containerNode.appendChild(_e.domNode);
+}
+if(!this._indicatorData){
+this._indicatorData=[];
+}
+this._indicatorData[this._indicatorData.length]=_e;
+_e.draw();
+return _e;
+},removeIndicator:function(_f){
+for(var i=0;i<this._indicatorData.length;i++){
+if(this._indicatorData[i]===_f){
+this._indicatorData.splice(i,1);
+_f.remove();
+break;
+}
+}
+},moveIndicatorToFront:function(_10){
+if(_10.shapes){
+for(var i=0;i<_10.shapes.length;i++){
+_10.shapes[i].moveToFront();
+}
+}
+},drawText:function(txt,x,y,_11,_12,_13,_14){
+var t=this.surface.createText({x:x,y:y,text:txt,align:_11});
+t.setFill(_13);
+t.setFont(_14);
+return t;
+},removeText:function(t){
+this.surface.rawNode.removeChild(t);
+},updateTooltip:function(txt,e){
+if(this._lastHover!=txt){
+if(txt!==""){
+dijit.hideTooltip(this.mouseNode);
+dijit.showTooltip(txt,this.mouseNode,!this.isLeftToRight());
+}else{
+dijit.hideTooltip(this.mouseNode);
+}
+this._lastHover=txt;
+}
+},handleMouseOver:function(_15){
+var _16=_15.target.getAttribute("hover");
+if(_15.target.getAttribute("overlay")){
+this._overOverlay=true;
+var r=this.getRangeUnderMouse(_15);
+if(r&&r.hover){
+_16=r.hover;
+}
+}
+if(this.useTooltip&&!this._drag){
+if(_16){
+this.updateTooltip(_16,_15);
+}else{
+this.updateTooltip("",_15);
+}
+}
+},handleMouseOut:function(_17){
+if(_17.target.getAttribute("overlay")){
+this._overOverlay=false;
+}
+if(this.useTooltip&&this.mouseNode){
+dijit.hideTooltip(this.mouseNode);
+}
+},handleMouseDown:function(_18){
+for(var i=0;i<this._indicatorData.length;i++){
+var _19=this._indicatorData[i].shapes;
+for(var s=0;s<_19.length;s++){
+if(_19[s].getEventSource()==_18.target){
+this._drag=this._indicatorData[i];
+s=_19.length;
+i=this._indicatorData.length;
+}
+}
+}
+dojo.stopEvent(_18);
+},handleMouseUp:function(_1a){
+this._drag=null;
+dojo.stopEvent(_1a);
+},handleMouseMove:function(_1b){
+if(_1b){
+dojo.style(this.mouseNode,"left",_1b.pageX+1+"px");
+dojo.style(this.mouseNode,"top",_1b.pageY+1+"px");
+}
+if(this._drag){
+this._dragIndicator(this,_1b);
+}else{
+if(this.useTooltip&&this._overOverlay){
+var r=this.getRangeUnderMouse(_1b);
+if(r&&r.hover){
+this.updateTooltip(r.hover,_1b);
+}else{
+this.updateTooltip("",_1b);
+}
+}
+}
+}});
+dojo.declare("dojox.widget.gauge.Range",[dijit._Widget,dijit._Contained],{low:0,high:0,hover:"",color:null,size:0,startup:function(){
+this.color=this.color.color||this.color;
+}});
+dojo.declare("dojox.widget.gauge._Indicator",[dijit._Widget,dijit._Contained,dijit._Templated],{value:0,type:"",color:"black",label:"",font:{family:"sans-serif",size:"12px"},length:0,width:0,offset:0,hover:"",front:false,easing:dojo._defaultEasing,duration:1000,hideValue:false,noChange:false,_gauge:null,title:"",templateString:dojo.cache("dojox.widget.gauge","_Indicator.html","<div class=\"dojoxGaugeIndicatorDiv\">\n\t<label class=\"dojoxGaugeIndicatorLabel\" for=\"${title}\">${title}:</label>\n\t<input class=\"dojoxGaugeIndicatorInput\" name=\"${title}\" size=\"5\" value=\"${value}\" dojoAttachPoint=\"valueNode\" dojoAttachEvent=\"onchange:_update\"></input>\n</div>\n"),startup:function(){
+if(this.onDragMove){
+this.onDragMove=dojo.hitch(this.onDragMove);
+}
+},postCreate:function(){
+if(this.title===""){
+dojo.style(this.domNode,"display","none");
+}
+if(dojo.isString(this.easing)){
+this.easing=dojo.getObject(this.easing);
+}
+},_update:function(_1c){
+var _1d=this.valueNode.value;
+if(_1d===""){
+this.value=null;
+}else{
+this.value=Number(_1d);
+this.hover=this.title+": "+_1d;
+}
+if(this._gauge){
+this.draw();
+this.valueNode.value=this.value;
+if((this.title=="Target"||this.front)&&this._gauge.moveIndicator){
+this._gauge.moveIndicatorToFront(this);
+}
+}
+},update:function(_1e){
+if(!this.noChange){
+this.valueNode.value=_1e;
+this._update();
+}
+},onDragMove:function(){
+this.value=Math.floor(this.value);
+this.valueNode.value=this.value;
+this.hover=this.title+": "+this.value;
+},draw:function(_1f){
+},remove:function(){
+for(var i=0;i<this.shapes.length;i++){
+this._gauge.surface.remove(this.shapes[i]);
+}
+if(this.text){
+this._gauge.surface.remove(this.text);
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/gauge/AnalogArrowIndicator.js
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/AnalogArrowIndicator.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/AnalogArrowIndicator.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.AnalogArrowIndicator"]){
+dojo._hasResource["dojox.widget.gauge.AnalogArrowIndicator"]=true;
+dojo.provide("dojox.widget.gauge.AnalogArrowIndicator");
+dojo.require("dojox.widget.AnalogGauge");
+dojo.experimental("dojox.widget.gauge.AnalogArrowIndicator");
+dojo.declare("dojox.widget.gauge.AnalogArrowIndicator",[dojox.widget.gauge.AnalogLineIndicator],{_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var x=Math.floor(this.width/2);
+var _1=this.width*5;
+var _2=(this.width&1);
+var _3=[];
+var _4=[{x:-x,y:0},{x:-x,y:-this.length+_1},{x:-2*x,y:-this.length+_1},{x:0,y:-this.length},{x:2*x+_2,y:-this.length+_1},{x:x+_2,y:-this.length+_1},{x:x+_2,y:0},{x:-x,y:0}];
+_3[0]=this._gauge.surface.createPolyline(_4).setStroke({color:this.color}).setFill(this.color);
+_3[1]=this._gauge.surface.createLine({x1:-x,y1:0,x2:-x,y2:-this.length+_1}).setStroke({color:this.highlight});
+_3[2]=this._gauge.surface.createLine({x1:-x-3,y1:-this.length+_1,x2:0,y2:-this.length}).setStroke({color:this.highlight});
+_3[3]=this._gauge.surface.createCircle({cx:0,cy:0,r:this.width}).setStroke({color:this.color}).setFill(this.color);
+return _3;
+}});
+}
Index: trunk/web/dojo/dojox/widget/gauge/AnalogNeedleIndicator.js
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/AnalogNeedleIndicator.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/AnalogNeedleIndicator.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.AnalogNeedleIndicator"]){
+dojo._hasResource["dojox.widget.gauge.AnalogNeedleIndicator"]=true;
+dojo.provide("dojox.widget.gauge.AnalogNeedleIndicator");
+dojo.require("dojox.widget.AnalogGauge");
+dojo.experimental("dojox.widget.gauge.AnalogNeedleIndicator");
+dojo.declare("dojox.widget.gauge.AnalogNeedleIndicator",[dojox.widget.gauge.AnalogLineIndicator],{_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var x=Math.floor(this.width/2);
+var _1=this.width*5;
+var _2=(this.width&1);
+var _3=[];
+var _4={color:this.color,width:1};
+if(this.color.type){
+_4.color=this.color.colors[0].color;
+}
+var xy=(Math.sqrt(2)*(x));
+_3[0]=this._gauge.surface.createPath().setStroke(_4).setFill(this.color).moveTo(xy,-xy).arcTo((2*x),(2*x),0,0,0,-xy,-xy).lineTo(0,-this.length).closePath();
+_3[1]=this._gauge.surface.createCircle({cx:0,cy:0,r:this.width}).setStroke({color:this.color}).setFill(this.color);
+return _3;
+}});
+}
Index: trunk/web/dojo/dojox/widget/gauge/_Gauge.html
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/_Gauge.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/_Gauge.html	(revision 9)
@@ -0,0 +1,5 @@
+<div>
+	<div class="dojoxGaugeContent" dojoAttachPoint="gaugeContent"></div>
+	<div dojoAttachPoint="containerNode"></div>
+	<div dojoAttachPoint="mouseNode"></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/gauge/BarIndicator.js
===================================================================
--- trunk/web/dojo/dojox/widget/gauge/BarIndicator.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/gauge/BarIndicator.js	(revision 9)
@@ -0,0 +1,80 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.gauge.BarIndicator"]){
+dojo._hasResource["dojox.widget.gauge.BarIndicator"]=true;
+dojo.provide("dojox.widget.gauge.BarIndicator");
+dojo.require("dojox.widget.BarGauge");
+dojo.experimental("dojox.widget.gauge.BarIndicator");
+dojo.declare("dojox.widget.gauge.BarIndicator",[dojox.widget.gauge.BarLineIndicator],{_getShapes:function(){
+if(!this._gauge){
+return null;
+}
+var v=this.value;
+if(v<this._gauge.min){
+v=this._gauge.min;
+}
+if(v>this._gauge.max){
+v=this._gauge.max;
+}
+var _1=this._gauge._getPosition(v);
+if(_1==this.dataX){
+_1=this.dataX+1;
+}
+var y=this._gauge.dataY+Math.floor((this._gauge.dataHeight-this.width)/2)+this.offset;
+var _2=[];
+_2[0]=this._gauge.surface.createRect({x:this._gauge.dataX,y:y,width:_1-this._gauge.dataX,height:this.width});
+_2[0].setStroke({color:this.color});
+_2[0].setFill(this.color);
+_2[1]=this._gauge.surface.createLine({x1:this._gauge.dataX,y1:y,x2:_1,y2:y});
+_2[1].setStroke({color:this.highlight});
+if(this.highlight2){
+y--;
+_2[2]=this._gauge.surface.createLine({x1:this._gauge.dataX,y1:y,x2:_1,y2:y});
+_2[2].setStroke({color:this.highlight2});
+}
+return _2;
+},_createShapes:function(_3){
+for(var i in this.shapes){
+i=this.shapes[i];
+var _4={};
+for(var j in i){
+_4[j]=i[j];
+}
+if(i.shape.type=="line"){
+_4.shape.x2=_3+_4.shape.x1;
+}else{
+if(i.shape.type=="rect"){
+_4.width=_3;
+}
+}
+i.setShape(_4);
+}
+},_move:function(_5){
+var _6=false;
+var c;
+var v=this.value;
+if(v<this.min){
+v=this.min;
+}
+if(v>this.max){
+v=this.max;
+}
+c=this._gauge._getPosition(this.currentValue);
+this.currentValue=v;
+v=this._gauge._getPosition(v)-this._gauge.dataX;
+if(_5){
+this._createShapes(v);
+}else{
+if(c!=v){
+var _7=new dojo.Animation({curve:[c,v],duration:this.duration,easing:this.easing});
+dojo.connect(_7,"onAnimate",dojo.hitch(this,this._createShapes));
+_7.play();
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/Toaster.js
===================================================================
--- trunk/web/dojo/dojox/widget/Toaster.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Toaster.js	(revision 9)
@@ -0,0 +1,174 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Toaster"]){
+dojo._hasResource["dojox.widget.Toaster"]=true;
+dojo.provide("dojox.widget.Toaster");
+dojo.require("dojo.fx");
+dojo.require("dojo.window");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.widget.Toaster",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToasterClip\" dojoAttachPoint=\"clipNode\"><div class=\"dijitToasterContainer\" dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onclick:onSelect\"><div class=\"dijitToasterContent\" dojoAttachPoint=\"contentNode\"></div></div></div>",messageTopic:"",messageTypes:{MESSAGE:"message",WARNING:"warning",ERROR:"error",FATAL:"fatal"},defaultType:"message",positionDirection:"br-up",positionDirectionTypes:["br-up","br-left","bl-up","bl-right","tr-down","tr-left","tl-down","tl-right"],duration:2000,slideDuration:500,separator:"<hr></hr>",postCreate:function(){
+this.inherited(arguments);
+this.hide();
+dojo.body().appendChild(this.domNode);
+if(this.messageTopic){
+dojo.subscribe(this.messageTopic,this,"_handleMessage");
+}
+},_handleMessage:function(_1){
+if(dojo.isString(_1)){
+this.setContent(_1);
+}else{
+this.setContent(_1.message,_1.type,_1.duration);
+}
+},_capitalize:function(w){
+return w.substring(0,1).toUpperCase()+w.substring(1);
+},setContent:function(_2,_3,_4){
+_4=_4||this.duration;
+if(this.slideAnim){
+if(this.slideAnim.status()!="playing"){
+this.slideAnim.stop();
+}
+if(this.slideAnim.status()=="playing"||(this.fadeAnim&&this.fadeAnim.status()=="playing")){
+setTimeout(dojo.hitch(this,function(){
+this.setContent(_2,_3,_4);
+}),50);
+return;
+}
+}
+for(var _5 in this.messageTypes){
+dojo.removeClass(this.containerNode,"dijitToaster"+this._capitalize(this.messageTypes[_5]));
+}
+dojo.style(this.containerNode,"opacity",1);
+this._setContent(_2);
+dojo.addClass(this.containerNode,"dijitToaster"+this._capitalize(_3||this.defaultType));
+this.show();
+var _6=dojo.marginBox(this.containerNode);
+this._cancelHideTimer();
+if(this.isVisible){
+this._placeClip();
+if(!this._stickyMessage){
+this._setHideTimer(_4);
+}
+}else{
+var _7=this.containerNode.style;
+var pd=this.positionDirection;
+if(pd.indexOf("-up")>=0){
+_7.left=0+"px";
+_7.top=_6.h+10+"px";
+}else{
+if(pd.indexOf("-left")>=0){
+_7.left=_6.w+10+"px";
+_7.top=0+"px";
+}else{
+if(pd.indexOf("-right")>=0){
+_7.left=0-_6.w-10+"px";
+_7.top=0+"px";
+}else{
+if(pd.indexOf("-down")>=0){
+_7.left=0+"px";
+_7.top=0-_6.h-10+"px";
+}else{
+throw new Error(this.id+".positionDirection is invalid: "+pd);
+}
+}
+}
+}
+this.slideAnim=dojo.fx.slideTo({node:this.containerNode,top:0,left:0,duration:this.slideDuration});
+this.connect(this.slideAnim,"onEnd",function(_8,_9){
+this.fadeAnim=dojo.fadeOut({node:this.containerNode,duration:1000});
+this.connect(this.fadeAnim,"onEnd",function(_a){
+this.isVisible=false;
+this.hide();
+});
+this._setHideTimer(_4);
+this.connect(this,"onSelect",function(_b){
+this._cancelHideTimer();
+this._stickyMessage=false;
+this.fadeAnim.play();
+});
+this.isVisible=true;
+});
+this.slideAnim.play();
+}
+},_setContent:function(_c){
+if(dojo.isFunction(_c)){
+_c(this);
+return;
+}
+if(_c&&this.isVisible){
+_c=this.contentNode.innerHTML+this.separator+_c;
+}
+this.contentNode.innerHTML=_c;
+},_cancelHideTimer:function(){
+if(this._hideTimer){
+clearTimeout(this._hideTimer);
+this._hideTimer=null;
+}
+},_setHideTimer:function(_d){
+this._cancelHideTimer();
+if(_d>0){
+this._cancelHideTimer();
+this._hideTimer=setTimeout(dojo.hitch(this,function(_e){
+if(this.bgIframe&&this.bgIframe.iframe){
+this.bgIframe.iframe.style.display="none";
+}
+this._hideTimer=null;
+this._stickyMessage=false;
+this.fadeAnim.play();
+}),_d);
+}else{
+this._stickyMessage=true;
+}
+},_placeClip:function(){
+var _f=dojo.window.getBox();
+var _10=dojo.marginBox(this.containerNode);
+var _11=this.clipNode.style;
+_11.height=_10.h+"px";
+_11.width=_10.w+"px";
+var pd=this.positionDirection;
+if(pd.match(/^t/)){
+_11.top=_f.t+"px";
+}else{
+if(pd.match(/^b/)){
+_11.top=(_f.h-_10.h-2+_f.t)+"px";
+}
+}
+if(pd.match(/^[tb]r-/)){
+_11.left=(_f.w-_10.w-1-_f.l)+"px";
+}else{
+if(pd.match(/^[tb]l-/)){
+_11.left=0+"px";
+}
+}
+_11.clip="rect(0px, "+_10.w+"px, "+_10.h+"px, 0px)";
+if(dojo.isIE){
+if(!this.bgIframe){
+this.clipNode.id=dijit.getUniqueId("dojox_widget_Toaster_clipNode");
+this.bgIframe=new dijit.BackgroundIframe(this.clipNode);
+}
+var _12=this.bgIframe.iframe;
+if(_12){
+_12.style.display="block";
+}
+}
+},onSelect:function(e){
+},show:function(){
+dojo.style(this.domNode,"display","block");
+this._placeClip();
+if(!this._scrollConnected){
+this._scrollConnected=dojo.connect(window,"onscroll",this,this._placeClip);
+}
+},hide:function(){
+dojo.style(this.domNode,"display","none");
+if(this._scrollConnected){
+dojo.disconnect(this._scrollConnected);
+this._scrollConnected=false;
+}
+dojo.style(this.containerNode,"opacity",1);
+}});
+}
Index: trunk/web/dojo/dojox/widget/nls/ro/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ro/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ro/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Selector saturaţie","huePickerTitle":"Selector nuanţă","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ro/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ro/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ro/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nume","size":"Dimensiune (în octeţi)","path":"Cale "})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ro/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ro/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ro/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Următor","done":"Gata","previous":"Anterior"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/zh/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/zh/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/zh/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"hexLabel":"十六进制","saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/zh/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/zh/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/zh/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"名称","size":"大小（字节","path":"路径"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/zh/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/zh/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/zh/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"下一步","done":"完成","previous":"上一步"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ca/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ca/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ca/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"v","hueLabel":"m","greenLabel":"e","saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ca/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ca/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ca/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nom","size":"Mida (en bytes)","path":"Camí d'accés"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ca/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ca/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ca/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Següent","done":"Fet","previous":"Anterior"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pt/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pt/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pt/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pt/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pt/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pt/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nome","size":"Tamanho (em bytes)","path":"Caminho"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pt/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pt/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pt/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Próximo","done":"Concluído","previous":"Anterior"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/da/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/da/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/da/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/da/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/da/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/da/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Navn","size":"Størrelse (i byte)","path":"Sti"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/da/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/da/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/da/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Næste","done":"Udført","previous":"Forrige"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/tr/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/tr/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/tr/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"k","valueLabel":"d","hexLabel":"onaltılı","hueLabel":"t","saturationLabel":"d","greenLabel":"y","blueLabel":"m","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/tr/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/tr/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/tr/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Ad","size":"Boyut (bayt cinsinden)","path":"Yol"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/tr/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/tr/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/tr/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"İleri","done":"Bitti","previous":"Geri"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ru/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ru/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ru/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"к","valueLabel":"з","hexLabel":"шест","hueLabel":"о","saturationLabel":"н","greenLabel":"з","blueLabel":"с","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ru/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ru/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ru/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Имя","size":"Размер (байт)","path":"Путь"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ru/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ru/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ru/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Далее","done":"Готово","previous":"Назад"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sv/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sv/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sv/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"valueLabel":"l","hueLabel":"n","saturationLabel":"m","saturationPickerTitle":"Saturation Selector","blueLabel":"b","greenLabel":"g","redLabel":"r","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sv/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sv/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sv/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Namn","size":"Storlek (byte)","path":"Sökväg"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sv/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sv/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sv/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Nästa","done":"Stäng","previous":"Föregående"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Name","size":"Size (in bytes)","path":"Path"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/de/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/de/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/de/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/de/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/de/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/de/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Name","size":"Größe (in Byte)","path":"Pfad"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/de/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/de/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/de/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Weiter","done":"Fertig","previous":"Zurück"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ja/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ja/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ja/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"hexLabel":"16 進","saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ja/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ja/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ja/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"名前","size":"サイズ (バイト単位)","path":"パス"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ja/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ja/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ja/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"次へ","done":"完了","previous":"前へ"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/he/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/he/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/he/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"א","valueLabel":"ע","hexLabel":"הקס","hueLabel":"ג","saturationLabel":"ר","greenLabel":"י","blueLabel":"כ","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/he/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/he/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/he/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"שם","size":"גודל (בבתים)","path":"נתיב"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/he/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/he/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/he/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"הבא","done":"סיום","previous":"הקודם"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/fi/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/fi/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/fi/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nimi","size":"Koko (tavuina)","path":"Polku"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/fi/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/fi/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/fi/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Seuraava","done":"Valmis","previous":"Edellinen"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/fi/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/fi/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/fi/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/nb/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/nb/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/nb/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/nb/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/nb/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/nb/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Navn","size":"Størrelse (i byte)","path":"Bane"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/nb/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/nb/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/nb/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Neste","done":"Ferdig","previous":"Forrige"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/el/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/el/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/el/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"κ","valueLabel":"τ","hexLabel":"16-αδικό","hueLabel":"α","saturationLabel":"κ","greenLabel":"π","blueLabel":"μ","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/el/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/el/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/el/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Όνομα","size":"Μέγεθος (σε bytes)","path":"Διαδρομή"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/el/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/el/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/el/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Επόμενο","done":"Ολοκλήρωση","previous":"Προηγούμενο"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ar/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ar/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ar/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ar/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ar/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ar/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"الاسم","size":"الحجم (بالبايت) ","path":"‏المسار‏"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ar/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ar/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ar/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"تالي","done":"اتمام","previous":"‏سابق‏"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pt-pt/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pt-pt/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pt-pt/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"e","valueLabel":"val","hueLabel":"t","greenLabel":"v","blueLabel":"a","saturationPickerTitle":"Saturation Selector","saturationLabel":"s","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pt-pt/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pt-pt/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pt-pt/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nome","size":"Tamanho (em bytes)","path":"Caminho"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pt-pt/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pt-pt/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pt-pt/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Seguinte","done":"Concluído","previous":"Anterior"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/cs/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/cs/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/cs/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"č","valueLabel":"j","hexLabel":"hex","hueLabel":"o","saturationLabel":"n","greenLabel":"z","blueLabel":"m","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/cs/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/cs/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/cs/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Název","size":"Velikost (v bajtech)","path":"Cesta"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/cs/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/cs/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/cs/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Další","done":"Hotovo","previous":"Předchozí"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/es/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/es/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/es/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Siguiente","done":"Terminado","previous":"Anterior"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/es/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/es/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/es/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/es/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/es/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/es/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nombre","size":"Tamaño (en bytes)","path":"Vía de acceso"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/fr/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/fr/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/fr/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Suivant","done":"Terminé","previous":"Précédent"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/fr/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/fr/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/fr/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"t","saturationLabel":"s","greenLabel":"v","blueLabel":"b","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/fr/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/fr/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/fr/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nom","size":"Taille (en octets)","path":"Chemin"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ko/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ko/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ko/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"R","valueLabel":"V","hexLabel":"HEX","hueLabel":"H","saturationLabel":"S","greenLabel":"G","blueLabel":"B","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ko/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ko/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ko/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"이름","size":"크기(바이트)","path":"경로"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/ko/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/ko/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/ko/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"다음","done":"완료","previous":"이전"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/nl/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/nl/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/nl/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"valueLabel":"h","hueLabel":"t","saturationLabel":"i","saturationPickerTitle":"Saturation Selector","blueLabel":"b","greenLabel":"g","redLabel":"r","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/nl/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/nl/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/nl/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Naam","size":"Grootte (in bytes)","path":"Pad"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/nl/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/nl/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/nl/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Volgende","done":"Klaar","previous":"Vorige"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/zh-tw/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/zh-tw/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/zh-tw/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"hexLabel":"十六進位","saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/zh-tw/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/zh-tw/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/zh-tw/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"名稱","size":"大小 (以位元組為單位)","path":"路徑"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/zh-tw/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/zh-tw/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/zh-tw/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"下一步","done":"完成","previous":"上一步"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Next","done":"Done","previous":"Previous"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pl/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pl/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pl/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"c","valueLabel":"jas.","hexLabel":"szesnastkowe","hueLabel":"barwa","saturationLabel":"nas.","greenLabel":"z","blueLabel":"n","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pl/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pl/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pl/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nazwa","size":"Wielkość (w bajtach)","path":"Ścieżka"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/pl/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/pl/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/pl/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Następna","done":"Gotowe","previous":"Poprzednia"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/th/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/th/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/th/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"อาร์","valueLabel":"วี","hexLabel":"เลขฐานสิบหก","hueLabel":"เอช","saturationLabel":"เอส","greenLabel":"จี","blueLabel":"บี","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/th/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/th/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/th/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"ชื่อ","size":"ขนาด (ไบต์)","path":"พาธ"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/th/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/th/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/th/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"ถัดไป","done":"เสร็จสิ้น","previous":"ก่อนหน้า"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/it/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/it/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/it/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"redLabel":"r","valueLabel":"v","hexLabel":"hex","hueLabel":"t","saturationLabel":"s","greenLabel":"v","blueLabel":"b","saturationPickerTitle":"Saturation Selector","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/it/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/it/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/it/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Nome","size":"Dimensione (in byte)","path":"Percorso"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/it/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/it/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/it/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Successivo","done":"Eseguito","previous":"Precedente"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/hu/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/hu/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/hu/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/hu/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/hu/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/hu/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Név","size":"Méret (byte)","path":"Elérési út"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/hu/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/hu/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/hu/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Következő","done":"Kész","previous":"Előző"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sk/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sk/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sk/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sk/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sk/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sk/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Názov","size":"Veľkosť (v bajtoch)","path":"Cesta"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sk/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sk/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sk/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Ďalej","done":"Hotovo","previous":"Späť"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sl/ColorPicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sl/ColorPicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sl/ColorPicker.js	(revision 9)
@@ -0,0 +1 @@
+({"saturationPickerTitle":"Saturation Selector","valueLabel":"v","blueLabel":"b","saturationLabel":"s","greenLabel":"g","redLabel":"r","hueLabel":"h","hexLabel":"hex","huePickerTitle":"Hue Selector","degLabel":"°"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sl/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sl/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sl/FilePicker.js	(revision 9)
@@ -0,0 +1 @@
+({"name":"Ime","size":"Velikost (v bajtih)","path":"Pot"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/nls/sl/Wizard.js
===================================================================
--- trunk/web/dojo/dojox/widget/nls/sl/Wizard.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/nls/sl/Wizard.js	(revision 9)
@@ -0,0 +1 @@
+({"next":"Naprej","done":"Opravljeno","previous":"Nazaj"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/SortList.js
===================================================================
--- trunk/web/dojo/dojox/widget/SortList.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/SortList.js	(revision 9)
@@ -0,0 +1,86 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.SortList"]){
+dojo._hasResource["dojox.widget.SortList"]=true;
+dojo.provide("dojox.widget.SortList");
+dojo.experimental("dojox.widget.SortList");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.widget.SortList",[dijit.layout._LayoutWidget,dijit._Templated],{title:"",heading:"",descending:true,selected:null,sortable:true,store:"",key:"name",baseClass:"dojoxSortList",templateString:dojo.cache("dojox.widget","SortList/SortList.html","<div class=\"sortList\" id=\"${id}\">\n\t\t<div class=\"sortListTitle\" dojoAttachPoint=\"titleNode\">\n\t\t<div class=\"dijitInline sortListIcon\">&thinsp;</div>\n\t\t<span dojoAttachPoint=\"focusNode\">${title}</span>\n\t\t</div>\n\t\t<div class=\"sortListBodyWrapper\" dojoAttachEvent=\"onmouseover: _set, onmouseout: _unset, onclick:_handleClick\" dojoAttachPoint=\"bodyWrapper\">\n\t\t<ul dojoAttachPoint=\"containerNode\" class=\"sortListBody\"></ul>\n\t</div>\n</div>\n"),_addItem:function(_1){
+dojo.create("li",{innerHTML:this.store.getValue(_1,this.key).replace(/</g,"&lt;")},this.containerNode);
+},postCreate:function(){
+if(this.store){
+this.store=dojo.getObject(this.store);
+var _2={onItem:dojo.hitch(this,"_addItem"),onComplete:dojo.hitch(this,"onSort")};
+this.store.fetch(_2);
+}else{
+this.onSort();
+}
+this.inherited(arguments);
+},startup:function(){
+this.inherited(arguments);
+if(this.heading){
+this.setTitle(this.heading);
+this.title=this.heading;
+}
+setTimeout(dojo.hitch(this,"resize"),5);
+if(this.sortable){
+this.connect(this.titleNode,"onclick","onSort");
+}
+},resize:function(){
+this.inherited(arguments);
+var _3=((this._contentBox.h)-(dojo.style(this.titleNode,"height")))-10;
+this.bodyWrapper.style.height=Math.abs(_3)+"px";
+},onSort:function(e){
+var _4=dojo.query("li",this.domNode);
+if(this.sortable){
+this.descending=!this.descending;
+dojo.addClass(this.titleNode,((this.descending)?"sortListDesc":"sortListAsc"));
+dojo.removeClass(this.titleNode,((this.descending)?"sortListAsc":"sortListDesc"));
+_4.sort(this._sorter);
+if(this.descending){
+_4.reverse();
+}
+}
+var i=0;
+dojo.forEach(_4,function(_5){
+dojo[(i++)%2===0?"addClass":"removeClass"](_5,"sortListItemOdd");
+this.containerNode.appendChild(_5);
+},this);
+},_set:function(e){
+if(e.target!==this.bodyWrapper){
+dojo.addClass(e.target,"sortListItemHover");
+}
+},_unset:function(e){
+dojo.removeClass(e.target,"sortListItemHover");
+},_handleClick:function(e){
+dojo.toggleClass(e.target,"sortListItemSelected");
+e.target.focus();
+this._updateValues(e.target.innerHTML);
+},_updateValues:function(){
+this._selected=dojo.query("li.sortListItemSelected",this.containerNode);
+this.selected=[];
+dojo.forEach(this._selected,function(_6){
+this.selected.push(_6.innerHTML);
+},this);
+this.onChanged(arguments);
+},_sorter:function(a,b){
+var _7=a.innerHTML;
+var _8=b.innerHTML;
+if(_7>_8){
+return 1;
+}
+if(_7<_8){
+return -1;
+}
+return 0;
+},setTitle:function(_9){
+this.focusNode.innerHTML=this.title=_9;
+},onChanged:function(){
+}});
+}
Index: trunk/web/dojo/dojox/widget/Dialog/Dialog.html
===================================================================
--- trunk/web/dojo/dojox/widget/Dialog/Dialog.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Dialog/Dialog.html	(revision 9)
@@ -0,0 +1,11 @@
+<div class="dojoxDialog" tabindex="-1" waiRole="dialog" waiState="labelledby-${id}_title">
+	<div dojoAttachPoint="titleBar" class="dojoxDialogTitleBar">
+		<span dojoAttachPoint="titleNode" class="dojoxDialogTitle" id="${id}_title">${title}</span>
+	</div>
+	<div dojoAttachPoint="dojoxDialogWrapper">
+		<div dojoAttachPoint="containerNode" class="dojoxDialogPaneContent"></div>
+	</div>
+	<div dojoAttachPoint="closeButtonNode" class="dojoxDialogCloseIcon" dojoAttachEvent="onclick: onCancel">
+			<span dojoAttachPoint="closeText" class="closeText">x</span>
+	</div>
+</div>
Index: trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.png
===================================================================
--- trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.gif
===================================================================
--- trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.gif	(revision 0)
+++ trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Dialog/images/dialogCloseButton.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Dialog/Dialog.css
===================================================================
--- trunk/web/dojo/dojox/widget/Dialog/Dialog.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/Dialog/Dialog.css	(revision 9)
@@ -0,0 +1,91 @@
+
+.dojoxDialog {
+	position: absolute;
+	z-index: 999;
+	outline:0;
+}
+.dojoxDialog .closeText {
+	display:none;
+	
+	position:absolute;
+}
+.dojoxDialogFixed div.dojoxDialogTitleBar {
+	cursor:default; 
+}
+.dojoxDialogWrapper {
+	left: 0;
+	top: 0;
+}
+.dojoxDialog {
+	background: #fff;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+	-moz-border-radius:9pt;
+	-webkit-border-radius:8pt;
+	border:1px solid #b7b7b7;
+	padding:1.5em 3px 3px 3px;
+}
+.dojoxDialogFocused {
+	border:1px solid #ccc;
+}
+.dojoxDialog .dojoxDialogPaneContent {
+	border:none;
+	padding:0;
+}
+.dojoxDialogTitleBar {
+	
+	cursor:move;
+	top:0;
+	left:0;
+	right:0;
+	background:#ededed;
+	height:1.5em;
+	outline:0; 
+	-moz-border-radius-topleft:8pt;
+	-moz-border-radius-topright:8pt;
+	-webkik-border-radius-topleft:7pt;
+	-webkit-border-radius-topright:7pt;
+}
+.dj_webkit .dojoxDialogTitleBar {
+	border:1px solid #ccc;
+}
+.dojoxDialogNoTitle .dojoxDialogTitleBar {
+	display:none;
+}
+.dojoxDialogContent {
+	
+	padding: 3px;
+	margin-top:1.2em;
+}
+.dojoxDialogTitle {
+	font-weight: bold;
+	padding: 8px 12px 8px 12px;
+	outline:0;
+	border-bottom:#b7b7b7;
+}
+div.dojoxDialogNoTitle {
+	padding-top:9px;
+}
+.dojoxDialogCloseIcon {
+	background : url("images/dialogCloseButton.png") no-repeat top right;
+	position: absolute;
+	vertical-align: middle;
+	left: -19px;
+	top: -19px;
+	height: 29px;
+	width: 29px;
+	cursor: pointer;
+	z-index: 999;
+}
+.dj_ie6 .dojoxDialogCloseIcon {
+	background-image: url("images/dialogCloseButton.gif");
+}
+.dojoxDialog .dijitDialogCloseIconHover {
+    background-image: url("images/dialogCloseButton.png");
+}
+.dj_ie6 .dojoxDialog .dijitDialogCloseIconHover {
+    background-image: url("images/dialogCloseButton.gif");
+}
+.dojoxDialogNoTitle .dojoxDialogCloseIcon {
+	top: -15px;
+	left: -15px;
+}
Index: trunk/web/dojo/dojox/widget/Wizard/Wizard.html
===================================================================
--- trunk/web/dojo/dojox/widget/Wizard/Wizard.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Wizard/Wizard.html	(revision 9)
@@ -0,0 +1,9 @@
+<div class="dojoxWizard" dojoAttachPoint="wizardNode">
+    <div class="dojoxWizardContainer" dojoAttachPoint="containerNode"></div>
+    <div class="dojoxWizardButtons" dojoAttachPoint="wizardNav">
+        <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="previousButton">${previousButtonLabel}</button>
+        <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="nextButton">${nextButtonLabel}</button>
+        <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="doneButton" style="display:none">${doneButtonLabel}</button>
+        <button dojoType="dijit.form.Button" type="button" dojoAttachPoint="cancelButton">${cancelButtonLabel}</button>
+    </div>
+</div>
Index: trunk/web/dojo/dojox/widget/Wizard/Wizard.css
===================================================================
--- trunk/web/dojo/dojox/widget/Wizard/Wizard.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/Wizard/Wizard.css	(revision 9)
@@ -0,0 +1,23 @@
+.dojoxWizard {
+	position:relative; 
+}
+.dojoxWizardButtons {
+	position:absolute;
+	bottom:5px;
+	right:5px;	
+}
+.tundra .dojoxWizard {
+	background: #eeeeee;
+	border: #b7b7b7 1px solid;
+	padding: 2px;
+	-moz-border-radius:3pt;
+	-webkit-border-radius:4pt;
+}
+.soria .dojoxWizard {
+	border:1px solid #b7b7b7;
+	padding:2px;
+}
+.claro .dojoxWizard {
+    border:1px solid #b5bcc7;
+    padding:2px;
+}
Index: trunk/web/dojo/dojox/widget/PlaceholderMenuItem.js
===================================================================
--- trunk/web/dojo/dojox/widget/PlaceholderMenuItem.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/PlaceholderMenuItem.js	(revision 9)
@@ -0,0 +1,75 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.PlaceholderMenuItem"]){
+dojo._hasResource["dojox.widget.PlaceholderMenuItem"]=true;
+dojo.provide("dojox.widget.PlaceholderMenuItem");
+dojo.require("dijit.Menu");
+dojo.declare("dojox.widget.PlaceholderMenuItem",dijit.MenuItem,{_replaced:false,_replacedWith:null,_isPlaceholder:true,postCreate:function(){
+this.domNode.style.display="none";
+this._replacedWith=[];
+if(!this.label){
+this.label=this.containerNode.innerHTML;
+}
+this.inherited(arguments);
+},replace:function(_1){
+if(this._replaced){
+return false;
+}
+var _2=this.getIndexInParent();
+if(_2<0){
+return false;
+}
+var p=this.getParent();
+dojo.forEach(_1,function(_3){
+p.addChild(_3,_2++);
+});
+this._replacedWith=_1;
+this._replaced=true;
+return true;
+},unReplace:function(_4){
+if(!this._replaced){
+return [];
+}
+var p=this.getParent();
+if(!p){
+return [];
+}
+var r=this._replacedWith;
+dojo.forEach(this._replacedWith,function(_5){
+p.removeChild(_5);
+if(_4){
+_5.destroy();
+}
+});
+this._replacedWith=[];
+this._replaced=false;
+return r;
+}});
+dojo.extend(dijit.Menu,{getPlaceholders:function(_6){
+var r=[];
+var _7=this.getChildren();
+_7.forEach(function(_8){
+if(_8._isPlaceholder&&(!_6||_8.label==_6)){
+r.push(_8);
+}else{
+if(_8._started&&_8.popup&&_8.popup.getPlaceholders){
+r=r.concat(_8.popup.getPlaceholders(_6));
+}else{
+if(!_8._started&&_8.dropDownContainer){
+var _9=dojo.query("[widgetId]",_8.dropDownContainer)[0];
+var _a=dijit.byNode(_9);
+if(_a.getPlaceholders){
+r=r.concat(_a.getPlaceholders(_6));
+}
+}
+}
+}
+},this);
+return r;
+}});
+}
Index: trunk/web/dojo/dojox/widget/Iterator.js
===================================================================
--- trunk/web/dojo/dojox/widget/Iterator.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Iterator.js	(revision 9)
@@ -0,0 +1,83 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Iterator"]){
+dojo._hasResource["dojox.widget.Iterator"]=true;
+dojo.provide("dojox.widget.Iterator");
+dojo.require("dijit.Declaration");
+dojo.experimental("dojox.widget.Iterator");
+dojo.declare("dojox.widget.Iterator",[dijit.Declaration],{constructor:(function(){
+var _1=0;
+return function(){
+this.attrs=[];
+this.children=[];
+this.widgetClass="dojox.widget.Iterator._classes._"+(_1++);
+};
+})(),start:0,fetchMax:1000,query:{name:"*"},attrs:[],defaultValue:"",widgetCtor:null,dataValues:[],data:null,store:null,_srcIndex:0,_srcParent:null,_setSrcIndex:function(s){
+this._srcIndex=0;
+this._srcParent=s.parentNode;
+var ts=s;
+while(ts.previousSibling){
+this._srcIndex++;
+ts=ts.previousSibling;
+}
+},postscript:function(p,s){
+this._setSrcIndex(s);
+this.inherited("postscript",arguments);
+var wc=this.widgetCtor=dojo.getObject(this.widgetClass);
+this.attrs=dojo.map(wc.prototype.templateString.match(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g),function(s){
+return s.slice(2,-1);
+});
+dojo.forEach(this.attrs,function(m){
+wc.prototype[m]="";
+});
+this.update();
+},clear:function(){
+if(this.children.length){
+this._setSrcIndex(this.children[0].domNode);
+}
+dojo.forEach(this.children,"item.destroy();");
+this.children=[];
+},update:function(){
+if(this.store){
+this.fetch();
+}else{
+this.onDataAvailable(this.data||this.dataValues);
+}
+},_addItem:function(_2,_3){
+if(dojo.isString(_2)){
+_2={value:_2};
+}
+var _4=new this.widgetCtor(_2);
+this.children.push(_4);
+dojo.place(_4.domNode,this._srcParent,this._srcIndex+_3);
+},getAttrValuesObj:function(_5){
+var _6={};
+if(dojo.isString(_5)){
+dojo.forEach(this.attrs,function(_7){
+_6[_7]=(_7=="value")?_5:this.defaultValue;
+},this);
+}else{
+dojo.forEach(this.attrs,function(_8){
+if(this.store){
+_6[_8]=this.store.getValue(_5,_8)||this.defaultValue;
+}else{
+_6[_8]=_5[_8]||this.defaultValue;
+}
+},this);
+}
+return _6;
+},onDataAvailable:function(_9){
+this.clear();
+dojo.forEach(_9,function(_a,_b){
+this._addItem(this.getAttrValuesObj(_a),_b);
+},this);
+},fetch:function(_c,_d,_e){
+this.store.fetch({query:_c||this.query,start:_d||this.start,count:_e||this.fetchMax,onComplete:dojo.hitch(this,"onDataAvailable")});
+}});
+dojox.widget.Iterator._classes={};
+}
Index: trunk/web/dojo/dojox/widget/Standby/images/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Standby/images/loading.gif
===================================================================
--- trunk/web/dojo/dojox/widget/Standby/images/loading.gif	(revision 0)
+++ trunk/web/dojo/dojox/widget/Standby/images/loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Standby/images/loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Loader/icons/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Loader/icons/loading.gif
===================================================================
--- trunk/web/dojo/dojox/widget/Loader/icons/loading.gif	(revision 0)
+++ trunk/web/dojo/dojox/widget/Loader/icons/loading.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Loader/icons/loading.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Loader/Loader.css
===================================================================
--- trunk/web/dojo/dojox/widget/Loader/Loader.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/Loader/Loader.css	(revision 9)
@@ -0,0 +1,24 @@
+.dojoxLoaderPointer {
+	position:absolute; 
+	z-index:999; 
+}
+.dojoxLoader {
+	float:right; 
+	position:fixed; 
+	height:25px;
+	width:100px; 
+	top:0;
+	right:0; 
+	padding:3px; 
+	border:1px solid #ccc;
+	background:#fff;  
+	min-width:42px; 
+}
+.dojoxLoaderIcon {
+	height:22px; width:22px; 
+	vertical-align:middle; 
+}
+.dojoxLoaderMessage {
+	font:8pt Arial,san-serif;
+	color:#666; 
+}
Index: trunk/web/dojo/dojox/widget/DocTester.js
===================================================================
--- trunk/web/dojo/dojox/widget/DocTester.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/DocTester.js	(revision 9)
@@ -0,0 +1,70 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.DocTester"]){
+dojo._hasResource["dojox.widget.DocTester"]=true;
+dojo.provide("dojox.widget.DocTester");
+dojo.require("dojo.string");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.form.BusyButton");
+dojo.require("dojox.testing.DocTest");
+dojo.declare("dojox.widget.DocTester",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.widget","DocTester/DocTester.html","<div dojoAttachPoint=\"domNode\" class=\"dojoxDocTester\">\n\t<div dojoAttachPoint=\"containerNode\"></div>\n\t<button dojoType=\"dojox.form.BusyButton\" busyLabel=\"Testing...\" dojoAttachPoint=\"runButtonNode\">Run tests</button>\n\t<button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"resetButtonNode\" style=\"display:none;\">Reset</button>\n\t<span>\n\t\t<span dojoAttachPoint=\"numTestsNode\">0</span> tests,\n\t\t<span dojoAttachPoint=\"numTestsOkNode\">0</span> passed,\n\t\t<span dojoAttachPoint=\"numTestsNokNode\">0</span> failed\n\t</span>\n</div>\n"),widgetsInTemplate:true,_fillContent:function(_1){
+var _2=_1.innerHTML;
+this.doctests=new dojox.testing.DocTest();
+this.tests=this.doctests.getTestsFromString(this._unescapeHtml(_2));
+var _3=dojo.map(this.tests,"return item.line-1");
+var _4=_2.split("\n");
+var _5="<div class=\"actualResult\">FAILED, actual result was: <span class=\"result\"></span></div>";
+var _6="<pre class=\"testCase testNum0 odd\">";
+for(var i=0;i<_4.length;i++){
+var _7=dojo.indexOf(_3,i);
+if(_7>0&&_7!=-1){
+var _8=_7%2?"even":"odd";
+_6+=_5;
+_6+="</pre><pre class=\"testCase testNum"+_7+" "+_8+"\">";
+}
+_6+=_4[i].replace(/^\s+/,"")+"\n";
+}
+_6+=_5+"</pre>";
+this.containerNode.innerHTML=_6;
+},postCreate:function(){
+this.inherited("postCreate",arguments);
+dojo.connect(this.runButtonNode,"onClick",dojo.hitch(this,"runTests"));
+dojo.connect(this.resetButtonNode,"onClick",dojo.hitch(this,"reset"));
+this.numTestsNode.innerHTML=this.tests.length;
+},runTests:function(){
+var _9={ok:0,nok:0};
+for(var i=0;i<this.tests.length;i++){
+var _a=this.doctests.runTest(this.tests[i].commands,this.tests[i].expectedResult);
+dojo.query(".testNum"+i,this.domNode).addClass(_a.success?"resultOk":"resultNok");
+if(!_a.success){
+_9.nok++;
+this.numTestsNokNode.innerHTML=_9.nok;
+var _b=dojo.query(".testNum"+i+" .actualResult",this.domNode)[0];
+dojo.style(_b,"display","inline");
+dojo.query(".result",_b)[0].innerHTML=dojo.toJson(_a.actualResult);
+}else{
+_9.ok++;
+this.numTestsOkNode.innerHTML=_9.ok;
+}
+}
+this.runButtonNode.cancel();
+dojo.style(this.runButtonNode.domNode,"display","none");
+dojo.style(this.resetButtonNode.domNode,"display","");
+},reset:function(){
+dojo.style(this.runButtonNode.domNode,"display","");
+dojo.style(this.resetButtonNode.domNode,"display","none");
+this.numTestsOkNode.innerHTML="0";
+this.numTestsNokNode.innerHTML="0";
+dojo.query(".actualResult",this.domNode).style("display","none");
+dojo.query(".testCase",this.domNode).removeClass("resultOk").removeClass("resultNok");
+},_unescapeHtml:function(_c){
+_c=String(_c).replace(/&amp;/gm,"&").replace(/&lt;/gm,"<").replace(/&gt;/gm,">").replace(/&quot;/gm,"\"");
+return _c;
+}});
+}
Index: trunk/web/dojo/dojox/widget/Calendar/CalendarDay.html
===================================================================
--- trunk/web/dojo/dojox/widget/Calendar/CalendarDay.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Calendar/CalendarDay.html	(revision 9)
@@ -0,0 +1,23 @@
+<div class="dijitCalendarDayLabels" style="left: 0px;" dojoAttachPoint="dayContainer">
+	<div dojoAttachPoint="header">
+		<div dojoAttachPoint="monthAndYearHeader">
+			<span dojoAttachPoint="monthLabelNode" class="dojoxCalendarMonthLabelNode"></span>
+			<span dojoAttachPoint="headerComma" class="dojoxCalendarComma">,</span>
+			<span dojoAttachPoint="yearLabelNode" class="dojoxCalendarDayYearLabel"></span>
+		</div>
+	</div>
+	<table cellspacing="0" cellpadding="0" border="0" style="margin: auto;">
+		<thead>
+			<tr>
+				<td class="dijitCalendarDayLabelTemplate"><div class="dijitCalendarDayLabel"></div></td>
+			</tr>
+		</thead>
+		<tbody dojoAttachEvent="onclick: _onDayClick">
+			<tr class="dijitCalendarWeekTemplate">
+				<td class="dojoxCalendarNextMonth dijitCalendarDateTemplate">
+					<div class="dijitCalendarDateLabel"></div>
+				</td>
+			</tr>
+		</tbody>
+	</table>
+</div>
Index: trunk/web/dojo/dojox/widget/Calendar/Calendar.html
===================================================================
--- trunk/web/dojo/dojox/widget/Calendar/Calendar.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Calendar/Calendar.html	(revision 9)
@@ -0,0 +1,24 @@
+<div class="dojoxCalendar">
+    <div tabindex="0" class="dojoxCalendarContainer" style="visibility: visible;" dojoAttachPoint="container">
+		<div style="display:none">
+			<div dojoAttachPoint="previousYearLabelNode"></div>
+			<div dojoAttachPoint="nextYearLabelNode"></div>
+			<div dojoAttachPoint="monthLabelSpacer"></div>
+		</div>
+        <div class="dojoxCalendarHeader">
+            <div>
+                <div class="dojoxCalendarDecrease" dojoAttachPoint="decrementMonth"></div>
+            </div>
+            <div class="">
+                <div class="dojoxCalendarIncrease" dojoAttachPoint="incrementMonth"></div>
+            </div>
+            <div class="dojoxCalendarTitle" dojoAttachPoint="header" dojoAttachEvent="onclick: onHeaderClick">
+            </div>
+        </div>
+        <div class="dojoxCalendarBody" dojoAttachPoint="containerNode"></div>
+        <div class="">
+            <div class="dojoxCalendarFooter" dojoAttachPoint="footer">                        
+            </div>
+        </div>
+    </div>
+</div>
Index: trunk/web/dojo/dojox/widget/Calendar/CalendarYear.html
===================================================================
--- trunk/web/dojo/dojox/widget/Calendar/CalendarYear.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Calendar/CalendarYear.html	(revision 9)
@@ -0,0 +1,12 @@
+<div class="dojoxCalendarYearLabels" style="left: 0px;" dojoAttachPoint="yearContainer">
+    <table cellspacing="0" cellpadding="0" border="0" style="margin: auto;" dojoAttachEvent="onclick: onClick">
+        <tbody>
+            <tr class="dojoxCalendarYearGroupTemplate">
+                <td class="dojoxCalendarNextMonth dojoxCalendarYearTemplate">
+                    <div class="dojoxCalendarYearLabel">
+                    </div>
+                </td>
+            </tr>
+        </tbody>
+    </table>
+</div>
Index: trunk/web/dojo/dojox/widget/Calendar/Calendar.css
===================================================================
--- trunk/web/dojo/dojox/widget/Calendar/Calendar.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/Calendar/Calendar.css	(revision 9)
@@ -0,0 +1,260 @@
+.dojoxCalendar {
+	width: 182px;
+}
+.dojoxCalendarContainer {
+	cursor: default;
+	font-family: tahoma, verdana, helvetica;
+	font-size: 11px;
+	padding: 0px;
+	text-align: center;
+	width: 180px;
+	overflow: hidden;
+}
+.dojoxCalendarBody {
+	height: 138px;
+	overflow: hidden;
+	position: relative;
+	margin: auto;
+	width: 180px;
+}
+.dojoxCalendar .no-header .dojoxCalendarBody {
+	height: 162px;
+}
+.dojoxCalendar .dijitCalendarDayLabels, .dojoxCalendarMonthLabels, .dojoxCalendarYearLabels, .dojoxCal-MY-labels {
+	width: 180px;
+	height: 138px;
+	top: 0px;
+	position: absolute;
+	left: 0px;
+	margin: auto;
+	text-align: center;
+}
+.dojoxCalendar .dojoxCalendarBody > div {
+	width: 180px;
+}
+.dojoxCalendar .dijitCalendarDateTemplate {
+	padding: 0 1px 0 0 !important;
+}
+.nihilo .dojoxCalendar .dijitCalendarDateTemplate,
+.soria .dojoxCalendar .dijitCalendarDateTemplate {
+	border: 0px none !important; 
+}
+.soria tr.dojoxCal-MY-btns {
+	background:   url(../../../dijit/themes/soria/images/tabBottomHoverC.gif) repeat-x scroll 0px -21px;
+}
+.dojoxCalendar .noPointer, .dojoxCalendar .noPointer * {
+	cursor: auto;
+}
+.dojoxCalendarContainer table {
+	font-size: 11px;
+	border-bottom: 4px solid white;
+}
+.dojoxCalendarHeader {
+	height: 20px;
+	width: 172px;
+	padding: 4px 4px 0;
+}
+.dojoxCalendar .no-header .dojoxCalendarHeader {
+	display: none;
+}
+.soria .dojoxCalendarHeader {
+	background: #BED7F0 url(../../../dijit/themes/soria/images/titleBar.png) repeat-x scroll center top;
+}
+.dojoxCalendarDecrease, .dojoxCalendarIncrease {
+	height: 15px;
+	width: 15px;
+	cursor: pointer;
+}
+.dojoxCalendarDecrease {
+	background: transparent url(../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png) no-repeat scroll left top;
+	float: left;
+}
+.dojoxCalendarIncrease {
+	background: transparent url(../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png) no-repeat scroll -30px top;
+	float: right;
+}
+.dojoxCalendarMonthLabel {
+	cursor: pointer;
+	height: 35px;
+	width: 41px;
+	overflow: hidden;
+	text-align: center;
+	padding-top: 10px;
+}
+.dojoxCalendarYearLabel {
+	cursor: pointer;
+	height: 35px;
+	width: 41px;
+	overflow: hidden;
+	text-align: center;
+	padding-top: 10px;
+}
+.dojoxCalendarTitle {
+	cursor: pointer;
+	font-weight: bold;
+}
+.dojoxCalendar .navToPanel .dojoxCalendarDayYearLabel,
+.dojoxCalendar .navToPanel .dojoxCalendarYearHeader,
+.dojoxCalendar .navToPanel .dojoxCalendarMonthHeader  {
+	padding-right: 15px;
+	background: url(../../../dijit/themes/tundra/images/comboArrowDown.gif) right no-repeat;
+}
+.dojoxCalendar .dijitCalendarDateLabel {
+	height: 17px;
+	width: 17px;
+	padding: 1px 3px 0px 3px;
+	text-align: center;
+	border: 1px solid white;
+}
+.dojoxCalendar .dijitCalendarDayLabel {
+	cursor: pointer;
+	height: 17px;
+	width: 18px;
+	padding: 0pt 2px;
+	text-align: center;
+}
+.dojoxCalendar .dojoxCalendarContainer {
+	background-color: white;
+	border: 1px solid #656565;
+	color: black;
+}
+.dojoxCalendar .dijitCalendarDisabledDate {
+	text-decoration:line-through !important;
+	cursor:default !important;
+}
+.dojoxCalendar .dojoxCalendarFooter {
+	border-top: 1px solid #F4F4F4;
+	height: 15px;
+	padding-top: 4px;
+	cursor: pointer;
+}
+.soria .dojoxCalendar .dojoxCalendarFooter {
+	border-top: 0px none;
+	padding-top: 5px;
+	background: white url(../../../dijit/themes/soria/images/titleBar.png) repeat-x scroll center top
+}
+.dojoxCalendar .dojoxCalendarMonthLabel {
+	border: 1px solid white;
+}
+.dojoxCalendar .dojoxCalendarYearLabel {
+	border: 1px solid white;
+}
+.dojoxCalendar .dijitCalendarNextMonth .dijitCalendarDateLabel,
+.dojoxCalendar .dijitCalendarPreviousMonth .dijitCalendarDateLabel  {
+	border: 0px;
+  color: #646464;
+	padding-left: 0px;
+	padding-right: 0px;
+}
+.dojoxCalendar .dijitCalendarNextMonth, .dojoxCalendar .dijitCalendarPreviousMonth {
+  background-color: #E4E4E4;
+}
+.dojoxCalendar .dijitCalendarNextMonth .dojoxCalendarYearLabel,
+.dojoxCalendar .dijitCalendarPreviousMonth .dojoxCalendarYearLabel {
+	background-color: white;
+	border-color: white;
+	color: #646464;
+}
+.dojoxCalendar .dijitCalendarSelectedDate,
+.tundra .dojoxCalendar .dijitCalendarSelectedDate,
+.nihilo .dojoxCalendar .dijitCalendarSelectedDate {
+	
+	background-color:#ffe284 !important;
+	color:black !important;
+	border:#f5b93c solid 1px !important;
+}
+.soria .dojoxCalendar td.dijitCalendarSelectedDate {
+	background-color: #B9CBF1 !important;
+	color: black !important;
+	border: 1px solid #4B5AAA !important;
+}
+.soria .dojoxCalendar .dijitCalendarSelectedDate div {
+	
+	background-color: #B9CBF1 !important;
+	border: none  !important;
+}
+.dojoxCalendar .dijitCalendarSelectedDate div {
+	
+	background-color: #FFE284 !important;
+	border: none  !important;
+}
+div.dojoxCalendar tr.dojoxCal-MY-G-Template td.dijitCalendarSelectedDate {
+	background-color: transparent;
+	width: 43px;
+}
+.dojoxCalendar tr.dojoxCal-MY-G-Template td {
+	width: 45px;
+}
+.dojoxCalendar .dijitCalendarSelectedDate div.dijitCalendarDateLabel {
+	padding: 1px 1px 0px 3px;
+}
+.dojoxCalendar .monthOnly .dijitCalendarDayLabels,
+.dojoxCalendar .yearOnly .dijitCalendarDayLabels,
+.dojoxCalendar .monthOnly .dojoxCalendarComma,
+.dojoxCalendar .yearOnly .dojoxCalendarComma,
+.dojoxCalendar .monthOnly .dojoxCalendarFooter,
+.dojoxCalendar .yearOnly .dojoxCalendarFooter,
+.dojoxCalendar .monthOnly .dojoxCalendarYearHeader,
+.dojoxCalendar .monthOnly .dojoxCalendarIncrease,
+.dojoxCalendar .monthOnly .dojoxCalendarDecrease,
+.dojoxCalendar .yearOnly .dojoxCalendarMonthLabelNode {
+	display: none;
+}
+.dojoxCal-MY-labels .dojoxCalendarMonthLabel,
+.dojoxCal-MY-labels .dojoxCalendarYearLabel {
+	height: 13px;
+	padding-top: 4px;
+	padding-bottom: 3px;
+}
+.dojoxCal-MY-labels td.dojoxCal-MY-btns {
+	padding-top: 2px;
+	border-top: 1px solid grey;
+	text-align: center;
+}
+.dojoxCal-MY-labels {
+	background-color: white;
+}
+.dojoxCal-MY-labels .dojoxCalendarIncrease,
+.dojoxCal-MY-labels .dojoxCalendarDecrease {
+	float: none;
+	margin-left: 14px;
+}
+.dojoxCal-MY-btns button {
+	font-size: 8pt;
+}
+.dojoxCalendar .dojoxCal-MY-btns .dijitDisabled button {
+	color: #999;
+}
+.dojoxCal-hidden {
+	visibility: hidden;
+}
+.dojoxCalendar .dojoxCal-MY-labels {
+	height: 164px;
+}
+.dojoxCalendar .dojoxCal-MY-labels .dijitCalendarSelectedDate div {
+	padding-top: 3px;
+	padding-bottom: 2px;
+}
+.soria .dojoxCal-MY-labels .dijitCalendarSelectedDate div {
+	padding-top: 4px;
+	padding-bottom: 3px;
+}
+.dojoxCal-MY-labels .dojoxCalendarMonthLabel {
+	width: 38px;
+}
+.dojoxCal-MY-labels .dojoxCal-MY-M-last {
+	border-right: 1px grey solid;
+}
+.soria .dojoxCal-MY-labels .dojoxCal-MY-M-last {
+	border-right: 1px #B9CBF1 solid;
+} 
+.dojoxCal-MY-labels .dojoxCal-MY-M-last .dojoxCalendarMonthLabel,
+.dojoxCal-MY-labels .dojoxCal-MY-G-Template div.dojoxCalendarYearLabel {
+	width: 42px;
+}
+.dojoxCalendar .cancel-btn {
+	margin-left: 11px;
+}
+.dojoxCalendar .ok-btn {
+	margin-left: 15px;
+}
Index: trunk/web/dojo/dojox/widget/Calendar/CalendarMonth.html
===================================================================
--- trunk/web/dojo/dojox/widget/Calendar/CalendarMonth.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Calendar/CalendarMonth.html	(revision 9)
@@ -0,0 +1,12 @@
+<div class="dojoxCalendarMonthLabels" style="left: 0px;"  
+	dojoAttachPoint="monthContainer" dojoAttachEvent="onclick: onClick">
+    <table cellspacing="0" cellpadding="0" border="0" style="margin: auto;">
+        <tbody>
+            <tr class="dojoxCalendarMonthGroupTemplate">
+                <td class="dojoxCalendarMonthTemplate">
+                    <div class="dojoxCalendarMonthLabel"></div>
+                </td>
+             </tr>
+        </tbody>
+    </table>
+</div>
Index: trunk/web/dojo/dojox/widget/Calendar/CalendarMonthYear.html
===================================================================
--- trunk/web/dojo/dojox/widget/Calendar/CalendarMonthYear.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/Calendar/CalendarMonthYear.html	(revision 9)
@@ -0,0 +1,31 @@
+<div class="dojoxCal-MY-labels" style="left: 0px;"	
+	dojoAttachPoint="myContainer" dojoAttachEvent="onclick: onClick">
+		<table cellspacing="0" cellpadding="0" border="0" style="margin: auto;">
+				<tbody>
+						<tr class="dojoxCal-MY-G-Template">
+								<td class="dojoxCal-MY-M-Template">
+										<div class="dojoxCalendarMonthLabel"></div>
+								</td>
+								<td class="dojoxCal-MY-M-Template">
+										<div class="dojoxCalendarMonthLabel"></div>
+								</td>
+								<td class="dojoxCal-MY-Y-Template">
+										<div class="dojoxCalendarYearLabel"></div>
+								</td>
+								<td class="dojoxCal-MY-Y-Template">
+										<div class="dojoxCalendarYearLabel"></div>
+								</td>
+						 </tr>
+						 <tr class="dojoxCal-MY-btns">
+						 	 <td class="dojoxCal-MY-btns" colspan="4">
+						 		 <span class="dijitReset dijitInline dijitButtonNode ok-btn" dojoAttachEvent="onclick: onOk" dojoAttachPoint="okBtn">
+						 	 	 	 <button	class="dijitReset dijitStretch dijitButtonContents">OK</button>
+								 </span>
+								 <span class="dijitReset dijitInline dijitButtonNode cancel-btn" dojoAttachEvent="onclick: onCancel" dojoAttachPoint="cancelBtn">
+						 	 		 <button	class="dijitReset dijitStretch dijitButtonContents">Cancel</button>
+								 </span>
+						 	 </td>
+						 </tr>
+				</tbody>
+		</table>
+</div>
Index: trunk/web/dojo/dojox/widget/Pager.js
===================================================================
--- trunk/web/dojo/dojox/widget/Pager.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Pager.js	(revision 9)
@@ -0,0 +1,387 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Pager"]){
+dojo._hasResource["dojox.widget.Pager"]=true;
+dojo.provide("dojox.widget.Pager");
+dojo.experimental("dojox.widget.Pager");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.fx");
+dojo.declare("dojox.widget.Pager",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.widget","Pager/Pager.html","<div dojoAttachPoint=\"pagerContainer\" tabIndex=\"0\" dojoAttachEvent=\"onkeypress: _handleKey, onfocus: _a11yStyle, onblur:_a11yStyle\" class=\"${orientation}PagerContainer\">\n    <div class=\"pagerContainer\">\n\t\t<div dojoAttachPoint=\"pagerContainerStatus\" class=\"${orientation}PagerStatus\"></div>\n\t\t<div dojoAttachPoint=\"pagerContainerView\" class=\"${orientation}PagerView\">\n\t\t    <div dojoAttachPoint=\"pagerItemContainer\"><ul dojoAttachPoint=\"pagerItems\" class=\"pagerItems\"></ul></div>\n\t\t</div>\n\t\t<div dojoAttachPoint=\"pagerContainerPager\" class=\"${orientation}PagerPager\">\n\t\t\t<div tabIndex=\"0\" dojoAttachPoint=\"pagerNext\" class=\"pagerIconContainer\" dojoAttachEvent=\"onclick: _pagerNext\"><img dojoAttachPoint=\"pagerIconNext\" src=\"${iconNext}\" alt=\"Next\" /></div>\n\t\t\t<div tabIndex=\"0\" dojoAttachPoint=\"pagerPrevious\" class=\"pagerIconContainer\" dojoAttachEvent=\"onclick: _pagerPrevious\"><img dojoAttachPoint=\"pagerIconPrevious\" src=\"${iconPrevious}\" alt=\"Previous\" /></div>\n\t\t</div>\n    </div>\n\t<div dojoAttachPoint=\"containerNode\" style=\"display:none\"></div>\n</div>\n"),iconPage:dojo.moduleUrl("dojox.widget","Pager/images/pageInactive.png"),iconPageActive:dojo.moduleUrl("dojox.widget","Pager/images/pageActive.png"),store:null,orientation:"horizontal",statusPos:"leading",pagerPos:"center",duration:500,itemSpace:2,resizeChildren:true,itemClass:"dojox.widget._PagerItem",itemsPage:3,postMixInProperties:function(){
+var h=(this.orientation=="horizontal");
+dojo.mixin(this,{_totalPages:0,_currentPage:1,dirClass:"pager"+(h?"Horizontal":"Vertical"),iconNext:dojo.moduleUrl("dojox.widget","Pager/images/"+(h?"h":"v")+"Next.png"),iconPrevious:dojo.moduleUrl("dojox.widget","Pager/images/"+(h?"h":"v")+"Previous.png")});
+},postCreate:function(){
+this.inherited(arguments);
+this.store.fetch({onComplete:dojo.hitch(this,"_init")});
+},_a11yStyle:function(e){
+dojo[(e.type=="focus"?"addClass":"removeClass")](e.target,"pagerFocus");
+},_handleKey:function(e){
+var dk=dojo.keys;
+var _1=(e.charCode==dk.SPACE?dk.SPACE:e.keyCode);
+switch(_1){
+case dk.UP_ARROW:
+case dk.RIGHT_ARROW:
+case 110:
+case 78:
+e.preventDefault();
+this._pagerNext();
+break;
+case dk.DOWN_ARROW:
+case dk.LEFT_ARROW:
+case 112:
+case 80:
+e.preventDefault();
+this._pagerPrevious();
+break;
+case dk.ENTER:
+switch(e.target){
+case this.pagerNext:
+this._pagerNext();
+break;
+case this.pagerPrevious:
+this._pagerPrevious();
+break;
+}
+break;
+}
+},_init:function(_2){
+this.items=_2;
+this._renderPages();
+this._renderStatus();
+this._renderPager();
+},_renderPages:function(){
+var _3=this.pagerContainerView;
+var _4=(this.orientation=="horizontal");
+var _5=dojo.style;
+if(_4){
+var _6=dojo.marginBox(this.pagerContainerPager).h;
+var _7=dojo.marginBox(this.pagerContainerStatus).h;
+if(this.pagerPos!="center"){
+var _8=_6+_7;
+}else{
+var _8=_7;
+var _9=this.pagerIconNext.width;
+var _a=_5(_3,"width");
+var _b=_a-(2*_9);
+_5(_3,{width:_b+"px",marginLeft:this.pagerIconNext.width+"px",marginRight:this.pagerIconNext.width+"px"});
+}
+var _c=_5(this.pagerContainer,"height")-_8;
+_5(this.pagerContainerView,"height",_c+"px");
+var _d=Math.floor(_5(_3,"width")/this.itemsPage);
+if(this.statusPos=="trailing"){
+if(this.pagerPos!="center"){
+_5(_3,"marginTop",_6+"px");
+}
+_5(_3,"marginBottom",_7+"px");
+}else{
+_5(_3,"marginTop",_7+"px");
+if(this.pagerPos!="center"){
+_5(_3,"marginTop",_6+"px");
+}
+}
+}else{
+var _e=dojo.marginBox(this.pagerContainerPager).w;
+var _f=dojo.marginBox(this.pagerContainerStatus).w;
+var _10=_5(this.pagerContainer,"width");
+if(this.pagerPos!="center"){
+var _11=_e+_f;
+}else{
+var _11=_f;
+var _12=this.pagerIconNext.height;
+var _13=_5(_3,"height");
+var _14=_13-(2*_12);
+_5(_3,{height:_14+"px",marginTop:this.pagerIconNext.height+"px",marginBottom:this.pagerIconNext.height+"px"});
+}
+var _15=_5(this.pagerContainer,"width")-_11;
+_5(_3,"width",_15+"px");
+var _d=Math.floor(_5(_3,"height")/this.itemsPage);
+if(this.statusPos=="trailing"){
+if(this.pagerPos!="center"){
+_5(_3,"marginLeft",_e+"px");
+}
+_5(_3,"marginRight",_f+"px");
+}else{
+_5(_3,"marginLeft",_f+"px");
+if(this.pagerPos!="center"){
+_5(_3,"marginRight",_e+"px");
+}
+}
+}
+var _16=dojo.getObject(this.itemClass);
+var _17="padding"+(_4?"Left":"Top");
+var _18="padding"+(_4?"Right":"Bottom");
+dojo.forEach(this.items,function(_19,cnt){
+var _1a=dojo.create("div",{innerHTML:_19.content});
+var _1b=new _16({id:this.id+"-item-"+(cnt+1)},_1a);
+this.pagerItems.appendChild(_1b.domNode);
+var _1c={};
+_1c[(_4?"width":"height")]=(_d-this.itemSpace)+"px";
+var p=(_4?"height":"width");
+_1c[p]=_5(_3,p)+"px";
+_5(_1b.containerNode,_1c);
+if(this.resizeChildren){
+_1b.resizeChildren();
+}
+_1b.parseChildren();
+_5(_1b.domNode,"position","absolute");
+if(cnt<this.itemsPage){
+var pos=(cnt)*_d;
+var _1d=(_4?"left":"top");
+var dir=(_4?"top":"left");
+_5(_1b.domNode,dir,"0px");
+_5(_1b.domNode,_1d,pos+"px");
+}else{
+_5(_1b.domNode,"top","-1000px");
+_5(_1b.domNode,"left","-1000px");
+}
+_5(_1b.domNode,_18,(this.itemSpace/2)+"px");
+_5(_1b.domNode,_17,(this.itemSpace/2)+"px");
+},this);
+},_renderPager:function(){
+var tcp=this.pagerContainerPager;
+var _1e="0px";
+var _1f=(this.orientation=="horizontal");
+if(_1f){
+if(this.statusPos=="center"){
+}else{
+if(this.statusPos=="trailing"){
+dojo.style(tcp,"top",_1e);
+}else{
+dojo.style(tcp,"bottom",_1e);
+}
+}
+dojo.style(this.pagerNext,"right",_1e);
+dojo.style(this.pagerPrevious,"left",_1e);
+}else{
+if(this.statusPos=="trailing"){
+dojo.style(tcp,"left",_1e);
+}else{
+dojo.style(tcp,"right",_1e);
+}
+dojo.style(this.pagerNext,"bottom",_1e);
+dojo.style(this.pagerPrevious,"top",_1e);
+}
+},_renderStatus:function(){
+this._totalPages=Math.ceil(this.items.length/this.itemsPage);
+this.iconWidth=0;
+this.iconHeight=0;
+this.iconsLoaded=0;
+this._iconConnects=[];
+for(var i=1;i<=this._totalPages;i++){
+var _20=new Image();
+var _21=i;
+dojo.connect(_20,"onclick",dojo.hitch(this,function(_22){
+this._pagerSkip(_22);
+},_21));
+this._iconConnects[_21]=dojo.connect(_20,"onload",dojo.hitch(this,function(_23){
+this.iconWidth+=_20.width;
+this.iconHeight+=_20.height;
+this.iconsLoaded++;
+if(this._totalPages==this.iconsLoaded){
+if(this.orientation=="horizontal"){
+if(this.statusPos=="trailing"){
+if(this.pagerPos=="center"){
+var _24=dojo.style(this.pagerContainer,"height");
+var _25=dojo.style(this.pagerContainerStatus,"height");
+dojo.style(this.pagerContainerPager,"top",((_24/2)-(_25/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"bottom","0px");
+}else{
+if(this.pagerPos=="center"){
+var _24=dojo.style(this.pagerContainer,"height");
+var _25=dojo.style(this.pagerContainerStatus,"height");
+dojo.style(this.pagerContainerPager,"bottom",((_24/2)-(_25/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"top","0px");
+}
+var _26=(dojo.style(this.pagerContainer,"width")/2)-(this.iconWidth/2);
+dojo.style(this.pagerContainerStatus,"paddingLeft",_26+"px");
+}else{
+if(this.statusPos=="trailing"){
+if(this.pagerPos=="center"){
+var _27=dojo.style(this.pagerContainer,"width");
+var _28=dojo.style(this.pagerContainerStatus,"width");
+dojo.style(this.pagerContainerPager,"left",((_27/2)-(_28/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"right","0px");
+}else{
+if(this.pagerPos=="center"){
+var _27=dojo.style(this.pagerContainer,"width");
+var _28=dojo.style(this.pagerContainerStatus,"width");
+dojo.style(this.pagerContainerPager,"right",((_27/2)-(_28/2))+"px");
+}
+dojo.style(this.pagerContainerStatus,"left","0px");
+}
+var _26=(dojo.style(this.pagerContainer,"height")/2)-(this.iconHeight/2);
+dojo.style(this.pagerContainerStatus,"paddingTop",_26+"px");
+}
+}
+dojo.disconnect(this._iconConnects[_23]);
+},_21));
+if(i==this._currentPage){
+_20.src=this.iconPageActive;
+}else{
+_20.src=this.iconPage;
+}
+var _21=i;
+dojo.addClass(_20,this.orientation+"PagerIcon");
+dojo.attr(_20,"id",this.id+"-status-"+i);
+this.pagerContainerStatus.appendChild(_20);
+if(this.orientation=="vertical"){
+dojo.style(_20,"display","block");
+}
+}
+},_pagerSkip:function(_29){
+if(this._currentPage==_29){
+return;
+}else{
+var _2a;
+var _2b;
+if(_29<this._currentPage){
+_2a=this._currentPage-_29;
+_2b=(this._totalPages+_29)-this._currentPage;
+}else{
+_2a=(this._totalPages+this._currentPage)-_29;
+_2b=_29-this._currentPage;
+}
+var b=(_2b>_2a);
+this._toScroll=(b?_2a:_2b);
+var cmd=(b?"_pagerPrevious":"_pagerNext");
+var _2c=this.connect(this,"onScrollEnd",function(){
+this._toScroll--;
+if(this._toScroll<1){
+this.disconnect(_2c);
+}else{
+this[cmd]();
+}
+});
+this[cmd]();
+}
+},_pagerNext:function(){
+if(this._anim){
+return;
+}
+var _2d=[];
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(!dojo.byId(this.id+"-item-"+i)){
+continue;
+}
+var _2e=dojo.byId(this.id+"-item-"+i);
+var _2f=dojo.marginBox(_2e);
+if(this.orientation=="horizontal"){
+var _30=_2f.l-(this.itemsPage*_2f.w);
+_2d.push(dojo.fx.slideTo({node:_2e,left:_30,duration:this.duration}));
+}else{
+var _30=_2f.t-(this.itemsPage*_2f.h);
+_2d.push(dojo.fx.slideTo({node:_2e,top:_30,duration:this.duration}));
+}
+}
+var _31=this._currentPage;
+if(this._currentPage==this._totalPages){
+this._currentPage=1;
+}else{
+this._currentPage++;
+}
+var cnt=this.itemsPage;
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(dojo.byId(this.id+"-item-"+i)){
+var _2e=dojo.byId(this.id+"-item-"+i);
+var _2f=dojo.marginBox(_2e);
+if(this.orientation=="horizontal"){
+var _32=(dojo.style(this.pagerContainerView,"width")+((cnt-1)*_2f.w))-1;
+dojo.style(_2e,"left",_32+"px");
+dojo.style(_2e,"top","0px");
+var _30=_32-(this.itemsPage*_2f.w);
+_2d.push(dojo.fx.slideTo({node:_2e,left:_30,duration:this.duration}));
+}else{
+_32=(dojo.style(this.pagerContainerView,"height")+((cnt-1)*_2f.h))-1;
+dojo.style(_2e,"top",_32+"px");
+dojo.style(_2e,"left","0px");
+var _30=_32-(this.itemsPage*_2f.h);
+_2d.push(dojo.fx.slideTo({node:_2e,top:_30,duration:this.duration}));
+}
+}
+cnt--;
+}
+this._anim=dojo.fx.combine(_2d);
+var _33=this.connect(this._anim,"onEnd",function(){
+delete this._anim;
+this.onScrollEnd();
+this.disconnect(_33);
+});
+this._anim.play();
+dojo.byId(this.id+"-status-"+_31).src=this.iconPage;
+dojo.byId(this.id+"-status-"+this._currentPage).src=this.iconPageActive;
+},_pagerPrevious:function(){
+if(this._anim){
+return;
+}
+var _34=[];
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(!dojo.byId(this.id+"-item-"+i)){
+continue;
+}
+var _35=dojo.byId(this.id+"-item-"+i);
+var _36=dojo.marginBox(_35);
+if(this.orientation=="horizontal"){
+var _37=dojo.style(_35,"left")+(this.itemsPage*_36.w);
+_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));
+}else{
+var _37=dojo.style(_35,"top")+(this.itemsPage*_36.h);
+_34.push(dojo.fx.slideTo({node:_35,top:_37,duration:this.duration}));
+}
+}
+var _38=this._currentPage;
+if(this._currentPage==1){
+this._currentPage=this._totalPages;
+}else{
+this._currentPage--;
+}
+var cnt=this.itemsPage;
+var j=1;
+for(var i=this._currentPage*this.itemsPage;i>(this._currentPage-1)*this.itemsPage;i--){
+if(dojo.byId(this.id+"-item-"+i)){
+var _35=dojo.byId(this.id+"-item-"+i);
+var _36=dojo.marginBox(_35);
+if(this.orientation=="horizontal"){
+var _39=-(j*_36.w)+1;
+dojo.style(_35,"left",_39+"px");
+dojo.style(_35,"top","0px");
+var _37=((cnt-1)*_36.w);
+_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));
+var _37=_39+(this.itemsPage*_36.w);
+_34.push(dojo.fx.slideTo({node:_35,left:_37,duration:this.duration}));
+}else{
+_39=-((j*_36.h)+1);
+dojo.style(_35,"top",_39+"px");
+dojo.style(_35,"left","0px");
+var _37=((cnt-1)*_36.h);
+_34.push(dojo.fx.slideTo({node:_35,top:_37,duration:this.duration}));
+}
+}
+cnt--;
+j++;
+}
+this._anim=dojo.fx.combine(_34);
+var _3a=dojo.connect(this._anim,"onEnd",dojo.hitch(this,function(){
+delete this._anim;
+this.onScrollEnd();
+dojo.disconnect(_3a);
+}));
+this._anim.play();
+dojo.byId(this.id+"-status-"+_38).src=this.iconPage;
+dojo.byId(this.id+"-status-"+this._currentPage).src=this.iconPageActive;
+},onScrollEnd:function(){
+}});
+dojo.declare("dojox.widget._PagerItem",[dijit._Widget,dijit._Templated],{templateString:"<li class=\"pagerItem\" dojoAttachPoint=\"containerNode\"></li>",resizeChildren:function(){
+var box=dojo.marginBox(this.containerNode);
+dojo.style(this.containerNode.firstChild,{width:box.w+"px",height:box.h+"px"});
+},parseChildren:function(){
+dojo.parser.parse(this.containerNode);
+}});
+}
Index: trunk/web/dojo/dojox/widget/Dialog.js
===================================================================
--- trunk/web/dojo/dojox/widget/Dialog.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Dialog.js	(revision 9)
@@ -0,0 +1,87 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Dialog"]){
+dojo._hasResource["dojox.widget.Dialog"]=true;
+dojo.provide("dojox.widget.Dialog");
+dojo.experimental("dojox.widget.Dialog");
+dojo.require("dojo.window");
+dojo.require("dijit.Dialog");
+dojo.require("dojox.layout.ContentPane");
+dojo.require("dojox.fx");
+dojo.declare("dojox.widget.Dialog",[dojox.layout.ContentPane,dijit._DialogBase],{templateString:dojo.cache("dojox.widget","Dialog/Dialog.html","<div class=\"dojoxDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dojoxDialogTitleBar\">\n\t\t<span dojoAttachPoint=\"titleNode\" class=\"dojoxDialogTitle\" id=\"${id}_title\">${title}</span>\n\t</div>\n\t<div dojoAttachPoint=\"dojoxDialogWrapper\">\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dojoxDialogPaneContent\"></div>\n\t</div>\n\t<div dojoAttachPoint=\"closeButtonNode\" class=\"dojoxDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\">\n\t\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\">x</span>\n\t</div>\n</div>\n"),sizeToViewport:false,viewportPadding:35,dimensions:null,easing:null,sizeDuration:dijit._defaultDuration,sizeMethod:"chain",showTitle:false,draggable:false,modal:false,constructor:function(_1,_2){
+this.easing=_1.easing||dojo._defaultEasing;
+this.dimensions=_1.dimensions||[300,300];
+},_setup:function(){
+this.inherited(arguments);
+if(!this._alreadyInitialized){
+this._navIn=dojo.fadeIn({node:this.closeButtonNode});
+this._navOut=dojo.fadeOut({node:this.closeButtonNode});
+if(!this.showTitle){
+dojo.addClass(this.domNode,"dojoxDialogNoTitle");
+}
+}
+},layout:function(e){
+this._setSize();
+this.inherited(arguments);
+},_setSize:function(){
+this._vp=dojo.window.getBox();
+var tc=this.containerNode,_3=this.sizeToViewport;
+return this._displaysize={w:_3?tc.scrollWidth:this.dimensions[0],h:_3?tc.scrollHeight:this.dimensions[1]};
+},show:function(){
+if(this.open){
+return;
+}
+this._setSize();
+dojo.style(this.closeButtonNode,"opacity",0);
+dojo.style(this.domNode,{overflow:"hidden",opacity:0,width:"1px",height:"1px"});
+dojo.style(this.containerNode,{opacity:0,overflow:"hidden"});
+this.inherited(arguments);
+if(this.modal){
+this._modalconnects.push(dojo.connect(dojo.body(),"onkeypress",function(e){
+if(e.charOrCode==dojo.keys.ESCAPE){
+dojo.stopEvent(e);
+}
+}));
+}else{
+this._modalconnects.push(dojo.connect(dijit._underlay.domNode,"onclick",this,"onCancel"));
+}
+this._modalconnects.push(dojo.connect(this.domNode,"onmouseenter",this,"_handleNav"));
+this._modalconnects.push(dojo.connect(this.domNode,"onmouseleave",this,"_handleNav"));
+},_handleNav:function(e){
+var _4="_navOut",_5="_navIn",_6=(e.type=="mouseout"?_5:_4),_7=(e.type=="mouseout"?_4:_5);
+this[_6].stop();
+this[_7].play();
+},_position:function(){
+if(!this._started){
+return;
+}
+if(this._sizing){
+this._sizing.stop();
+this.disconnect(this._sizingConnect);
+delete this._sizing;
+}
+this.inherited(arguments);
+if(!this.open){
+dojo.style(this.containerNode,"opacity",0);
+}
+var _8=this.viewportPadding*2;
+var _9={node:this.domNode,duration:this.sizeDuration||dijit._defaultDuration,easing:this.easing,method:this.sizeMethod};
+var ds=this._displaysize||this._setSize();
+_9["width"]=ds.w=(ds.w+_8>=this._vp.w||this.sizeToViewport)?this._vp.w-_8:ds.w;
+_9["height"]=ds.h=(ds.h+_8>=this._vp.h||this.sizeToViewport)?this._vp.h-_8:ds.h;
+this._sizing=dojox.fx.sizeTo(_9);
+this._sizingConnect=this.connect(this._sizing,"onEnd","_showContent");
+this._sizing.play();
+},_showContent:function(e){
+var _a=this.containerNode;
+dojo.style(this.domNode,{overflow:"visible",opacity:1});
+dojo.style(this.closeButtonNode,"opacity",1);
+dojo.style(_a,{height:this._displaysize.h-this.titleNode.offsetHeight+"px",width:this._displaysize.w+"px",overflow:"auto"});
+dojo.anim(_a,{opacity:1});
+}});
+}
Index: trunk/web/dojo/dojox/widget/Roller.js
===================================================================
--- trunk/web/dojo/dojox/widget/Roller.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Roller.js	(revision 9)
@@ -0,0 +1,84 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Roller"]){
+dojo._hasResource["dojox.widget.Roller"]=true;
+dojo.provide("dojox.widget.Roller");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.widget.Roller",dijit._Widget,{delay:2000,autoStart:true,itemSelector:"> li",durationIn:400,durationOut:275,_idx:-1,postCreate:function(){
+if(!this["items"]){
+this.items=[];
+}
+dojo.addClass(this.domNode,"dojoxRoller");
+dojo.query(this.itemSelector,this.domNode).forEach(function(_1,i){
+this.items.push(_1.innerHTML);
+if(i==0){
+this._roller=_1;
+this._idx=0;
+}else{
+dojo.destroy(_1);
+}
+},this);
+if(!this._roller){
+this._roller=dojo.create("li",null,this.domNode);
+}
+this.makeAnims();
+if(this.autoStart){
+this.start();
+}
+},makeAnims:function(){
+var n=this.domNode;
+dojo.mixin(this,{_anim:{"in":dojo.fadeIn({node:n,duration:this.durationIn}),"out":dojo.fadeOut({node:n,duration:this.durationOut})}});
+this._setupConnects();
+},_setupConnects:function(){
+var _2=this._anim;
+this.connect(_2["out"],"onEnd",function(){
+this._set(this._idx+1);
+_2["in"].play(15);
+});
+this.connect(_2["in"],"onEnd",function(){
+this._timeout=setTimeout(dojo.hitch(this,"_run"),this.delay);
+});
+},start:function(){
+if(!this.rolling){
+this.rolling=true;
+this._run();
+}
+},_run:function(){
+this._anim["out"].gotoPercent(0,true);
+},stop:function(){
+this.rolling=false;
+var m=this._anim,t=this._timeout;
+if(t){
+clearTimeout(t);
+}
+m["in"].stop();
+m["out"].stop();
+},_set:function(i){
+var l=this.items.length-1;
+if(i<0){
+i=l;
+}
+if(i>l){
+i=0;
+}
+this._roller.innerHTML=this.items[i]||"error!";
+this._idx=i;
+}});
+dojo.declare("dojox.widget.RollerSlide",dojox.widget.Roller,{durationOut:175,makeAnims:function(){
+var n=this.domNode,_3="position",_4={top:{end:0,start:25},opacity:1};
+dojo.style(n,_3,"relative");
+dojo.style(this._roller,_3,"absolute");
+dojo.mixin(this,{_anim:{"in":dojo.animateProperty({node:n,duration:this.durationIn,properties:_4}),"out":dojo.fadeOut({node:n,duration:this.durationOut})}});
+this._setupConnects();
+}});
+dojo.declare("dojox.widget._RollerHover",null,{postCreate:function(){
+this.inherited(arguments);
+this.connect(this.domNode,"onmouseenter","stop");
+this.connect(this.domNode,"onmouseleave","start");
+}});
+}
Index: trunk/web/dojo/dojox/widget/ColorPicker/ColorPicker.html
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker/ColorPicker.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker/ColorPicker.html	(revision 9)
@@ -0,0 +1,72 @@
+<table class="dojoxColorPicker" dojoAttachEvent="onkeypress: _handleKey" cellpadding="0" cellspacing="0">
+	<tr>
+		<td valign="top" class="dojoxColorPickerRightPad">
+			<div class="dojoxColorPickerBox">
+				<!-- Forcing ABS in style attr due to dojo DND issue with not picking it up form the class. -->
+				<img role="status" title="${saturationPickerTitle}" alt="${saturationPickerTitle}" class="dojoxColorPickerPoint" src="${_pickerPointer}" tabIndex="0" dojoAttachPoint="cursorNode" style="position: absolute; top: 0px; left: 0px;">
+				<img role="presentation" alt="" dojoAttachPoint="colorUnderlay" dojoAttachEvent="onclick: _setPoint, onmousedown: _stopDrag" class="dojoxColorPickerUnderlay" src="${_underlay}" ondragstart="return false">
+			</div>
+		</td>
+		<td valign="top" class="dojoxColorPickerRightPad">
+			<div class="dojoxHuePicker">
+				<!-- Forcing ABS in style attr due to dojo DND issue with not picking it up form the class. -->
+				<img role="status" dojoAttachPoint="hueCursorNode" tabIndex="0" class="dojoxHuePickerPoint" title="${huePickerTitle}" alt="${huePickerTitle}" src="${_huePickerPointer}" style="position: absolute; top: 0px; left: 0px;">
+				<div class="dojoxHuePickerUnderlay" dojoAttachPoint="hueNode">
+				    <img role="presentation" alt="" dojoAttachEvent="onclick: _setHuePoint, onmousedown: _stopDrag" src="${_hueUnderlay}">
+				</div>
+			</div>
+		</td>
+		<td valign="top">
+			<table cellpadding="0" cellspacing="0">
+				<tr>
+					<td valign="top" class="dojoxColorPickerPreviewContainer">
+						<table cellpadding="0" cellspacing="0">
+							<tr>
+								<td valign="top" class="dojoxColorPickerRightPad">
+									<div dojoAttachPoint="previewNode" class="dojoxColorPickerPreview"></div>
+								</td>
+								<td valign="top">
+									<div dojoAttachPoint="safePreviewNode" class="dojoxColorPickerWebSafePreview"></div>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+				<tr>
+					<td valign="bottom">
+						<table class="dojoxColorPickerOptional" cellpadding="0" cellspacing="0">
+							<tr>
+								<td>
+									<div class="dijitInline dojoxColorPickerRgb" dojoAttachPoint="rgbNode">
+										<table cellpadding="1" cellspacing="1">
+										<tr><td><label for="${_uId}_r">${redLabel}</label></td><td><input id="${_uId}_r" dojoAttachPoint="Rval" size="1" dojoAttachEvent="onchange: _colorInputChange"></td></tr>
+										<tr><td><label for="${_uId}_g">${greenLabel}</label></td><td><input id="${_uId}_g" dojoAttachPoint="Gval" size="1" dojoAttachEvent="onchange: _colorInputChange"></td></tr>
+										<tr><td><label for="${_uId}_b">${blueLabel}</label></td><td><input id="${_uId}_b" dojoAttachPoint="Bval" size="1" dojoAttachEvent="onchange: _colorInputChange"></td></tr>
+										</table>
+									</div>
+								</td>
+								<td>
+									<div class="dijitInline dojoxColorPickerHsv" dojoAttachPoint="hsvNode">
+										<table cellpadding="1" cellspacing="1">
+										<tr><td><label for="${_uId}_h">${hueLabel}</label></td><td><input id="${_uId}_h" dojoAttachPoint="Hval"size="1" dojoAttachEvent="onchange: _colorInputChange"> ${degLabel}</td></tr>
+										<tr><td><label for="${_uId}_s">${saturationLabel}</label></td><td><input id="${_uId}_s" dojoAttachPoint="Sval" size="1" dojoAttachEvent="onchange: _colorInputChange"> ${percentSign}</td></tr>
+										<tr><td><label for="${_uId}_v">${valueLabel}</label></td><td><input id="${_uId}_v" dojoAttachPoint="Vval" size="1" dojoAttachEvent="onchange: _colorInputChange"> ${percentSign}</td></tr>
+										</table>
+									</div>
+								</td>
+							</tr>
+							<tr>
+								<td colspan="2">
+									<div class="dojoxColorPickerHex" dojoAttachPoint="hexNode" aria-live="polite">	
+										<label for="${_uId}_hex">&nbsp;${hexLabel}&nbsp;</label><input id="${_uId}_hex" dojoAttachPoint="hexCode, focusNode, valueNode" size="6" class="dojoxColorPickerHexCode" dojoAttachEvent="onchange: _colorInputChange">
+									</div>
+								</td>
+							</tr>
+						</table>
+					</td>
+				</tr>
+			</table>
+		</td>
+	</tr>
+</table>
+
Index: trunk/web/dojo/dojox/widget/ColorPicker/ColorPicker.css
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker/ColorPicker.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker/ColorPicker.css	(revision 9)
@@ -0,0 +1,102 @@
+.dojoxColorPicker {
+	padding:8px;
+	-moz-border-radius:4pt;
+	-webkit-border-radius:5pt;
+	-webkit-drop-shadow:3pt;
+}
+.dojoxColorPickerRightPad {
+	padding-right: 8px;
+}
+.tundra .dojoxColorPicker {
+	background:#ededed;
+	border:1px solid #ccc;
+}
+.dojoxColorPickerBox {
+	position:relative;
+	width:150px;	
+	height:150px;	
+	margin:0; 
+	padding:0;
+}
+.dojoxColorPickerUnderlay {
+	position:relative; 
+	top:0; left:0;
+	width:150px; 
+	height:150px;
+	z-index:1;
+}
+.tundra .dojoxColorPickerUnderlay {
+	border:1px solid #a0a0a0;
+}
+.claro .dojoxColorPicker {
+	background:#ededed;
+	border:1px solid #cdcdcd;
+}
+.claro .dojoxColorPickerUnderlay {
+	border:1px solid #cccccc;
+}
+.dojoxHuePickerUnderlay {
+	position:relative;
+	top:0; left:0;
+	height:150px;
+	width:20px;
+	z-index:1;
+	text-align: center;
+}
+.dojoxHuePicker { position:relative; top: 0px; left: 0px; padding: 0px;}
+.dojoxHuePickerPoint {
+	position:absolute;
+	top:0; left:0;
+	width:20px;
+	height:8px;
+	z-index:3; 
+	cursor:move;
+}
+.dojoxColorPickerPoint {
+	position:absolute;
+	width:10px; 
+	height:10px;
+	border:0;
+	z-index:3; 
+	cursor:move; 
+}
+.dojoxColorPickerPreview {
+	display:block;	
+	width:45px;	
+	height:45px;
+	border:1px solid #333;
+	background-color:#fff; 
+	position:relative;
+	top: 0px;
+	left: 0px; 
+}
+.dojoxColorPickerWebSafePreview {
+	display:block;
+	width:25px; 
+	height:25px; 
+	position:relative;
+	top: 0px;
+	left: 0px; 
+	border:1px solid #333; 
+}
+.dojoxColorPickerOptional {
+	position:relative;
+	top: 0px;
+	left: 0px;
+	height: 100%;
+}
+.dojoxColorPickerOptional table {
+	border-spacing: 4px;
+}
+.dojoxColorPickerPreviewContainer table {
+	border-spacing: 6px 0px;
+}
+.dojoxColorPickerOptional input {
+	border:1px solid #a7a7a7;
+	width:25px;
+	padding:1px 3px 1px 3px;
+	line-height:1.1em;
+}
+.dojoxColorPickerHex input {
+	width:55px;	
+}
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandle.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandle.png
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandle.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandle.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandle.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/pickerPointer.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/pickerPointer.png
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker/images/pickerPointer.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker/images/pickerPointer.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/ColorPicker/images/pickerPointer.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/hue.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/hue.png
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker/images/hue.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker/images/hue.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/ColorPicker/images/hue.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/underlay.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/underlay.png
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker/images/underlay.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker/images/underlay.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/ColorPicker/images/underlay.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandleA11y.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandleA11y.png
===================================================================
--- trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandleA11y.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandleA11y.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/ColorPicker/images/hueHandleA11y.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/RollingList.js
===================================================================
--- trunk/web/dojo/dojox/widget/RollingList.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/RollingList.js	(revision 9)
@@ -0,0 +1,894 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.RollingList"]){
+dojo._hasResource["dojox.widget.RollingList"]=true;
+dojo.provide("dojox.widget.RollingList");
+dojo.experimental("dojox.widget.RollingList");
+dojo.require("dojo.window");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dijit.Menu");
+dojo.require("dijit.form.Button");
+dojo.require("dojox.html.metrics");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget._RollingListPane",[dijit.layout.ContentPane,dijit._Templated,dijit._Contained],{templateString:"<div class=\"dojoxRollingListPane\"><table><tbody><tr><td dojoAttachPoint=\"containerNode\"></td></tr></tbody></div>",parentWidget:null,parentPane:null,store:null,items:null,query:null,queryOptions:null,_focusByNode:true,minWidth:0,_setContentAndScroll:function(_1,_2){
+this._setContent(_1,_2);
+this.parentWidget.scrollIntoView(this);
+},_updateNodeWidth:function(n,_3){
+n.style.width="";
+var _4=dojo.marginBox(n).w;
+if(_4<_3){
+dojo.marginBox(n,{w:_3});
+}
+},_onMinWidthChange:function(v){
+this._updateNodeWidth(this.domNode,v);
+},_setMinWidthAttr:function(v){
+if(v!==this.minWidth){
+this.minWidth=v;
+this._onMinWidthChange(v);
+}
+},startup:function(){
+if(this._started){
+return;
+}
+if(this.store&&this.store.getFeatures()["dojo.data.api.Notification"]){
+window.setTimeout(dojo.hitch(this,function(){
+this.connect(this.store,"onSet","_onSetItem");
+this.connect(this.store,"onNew","_onNewItem");
+this.connect(this.store,"onDelete","_onDeleteItem");
+}),1);
+}
+this.connect(this.focusNode||this.domNode,"onkeypress","_focusKey");
+this.parentWidget._updateClass(this.domNode,"Pane");
+this.inherited(arguments);
+this._onMinWidthChange(this.minWidth);
+},_focusKey:function(e){
+if(e.charOrCode==dojo.keys.BACKSPACE){
+dojo.stopEvent(e);
+return;
+}else{
+if(e.charOrCode==dojo.keys.LEFT_ARROW&&this.parentPane){
+this.parentPane.focus();
+this.parentWidget.scrollIntoView(this.parentPane);
+}else{
+if(e.charOrCode==dojo.keys.ENTER){
+this.parentWidget._onExecute();
+}
+}
+}
+},focus:function(_5){
+if(this.parentWidget._focusedPane!=this){
+this.parentWidget._focusedPane=this;
+this.parentWidget.scrollIntoView(this);
+if(this._focusByNode&&(!this.parentWidget._savedFocus||_5)){
+try{
+(this.focusNode||this.domNode).focus();
+}
+catch(e){
+}
+}
+}
+},_onShow:function(){
+if((this.store||this.items)&&((this.refreshOnShow&&this.domNode)||(!this.isLoaded&&this.domNode))){
+this.refresh();
+}
+},_load:function(){
+this.isLoaded=false;
+if(this.items){
+this._setContentAndScroll(this.onLoadStart(),true);
+window.setTimeout(dojo.hitch(this,"_doQuery"),1);
+}else{
+this._doQuery();
+}
+},_doLoadItems:function(_6,_7){
+var _8=0,_9=this.store;
+dojo.forEach(_6,function(_a){
+if(!_9.isItemLoaded(_a)){
+_8++;
+}
+});
+if(_8===0){
+_7();
+}else{
+var _b=function(_c){
+_8--;
+if((_8)===0){
+_7();
+}
+};
+dojo.forEach(_6,function(_d){
+if(!_9.isItemLoaded(_d)){
+_9.loadItem({item:_d,onItem:_b});
+}
+});
+}
+},_doQuery:function(){
+if(!this.domNode){
+return;
+}
+var _e=this.parentWidget.preloadItems;
+_e=(_e===true||(this.items&&this.items.length<=Number(_e)));
+if(this.items&&_e){
+this._doLoadItems(this.items,dojo.hitch(this,"onItems"));
+}else{
+if(this.items){
+this.onItems();
+}else{
+this._setContentAndScroll(this.onFetchStart(),true);
+this.store.fetch({query:this.query,onComplete:function(_f){
+this.items=_f;
+this.onItems();
+},onError:function(e){
+this._onError("Fetch",e);
+},scope:this});
+}
+}
+},_hasItem:function(_10){
+var _11=this.items||[];
+for(var i=0,_12;(_12=_11[i]);i++){
+if(this.parentWidget._itemsMatch(_12,_10)){
+return true;
+}
+}
+return false;
+},_onSetItem:function(_13,_14,_15,_16){
+if(this._hasItem(_13)){
+this.refresh();
+}
+},_onNewItem:function(_17,_18){
+var sel;
+if((!_18&&!this.parentPane)||(_18&&this.parentPane&&this.parentPane._hasItem(_18.item)&&(sel=this.parentPane._getSelected())&&this.parentWidget._itemsMatch(sel.item,_18.item))){
+this.items.push(_17);
+this.refresh();
+}else{
+if(_18&&this.parentPane&&this._hasItem(_18.item)){
+this.refresh();
+}
+}
+},_onDeleteItem:function(_19){
+if(this._hasItem(_19)){
+this.items=dojo.filter(this.items,function(i){
+return (i!=_19);
+});
+this.refresh();
+}
+},onFetchStart:function(){
+return this.loadingMessage;
+},onFetchError:function(_1a){
+return this.errorMessage;
+},onLoadStart:function(){
+return this.loadingMessage;
+},onLoadError:function(_1b){
+return this.errorMessage;
+},onItems:function(){
+if(!this.onLoadDeferred){
+this.cancel();
+this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));
+}
+this._onLoadHandler();
+}});
+dojo.declare("dojox.widget._RollingListGroupPane",[dojox.widget._RollingListPane],{templateString:"<div><div dojoAttachPoint=\"containerNode\"></div>"+"<div dojoAttachPoint=\"menuContainer\">"+"<div dojoAttachPoint=\"menuNode\"></div>"+"</div></div>",_menu:null,_setContent:function(_1c){
+if(!this._menu){
+this.inherited(arguments);
+}
+},_onMinWidthChange:function(v){
+if(!this._menu){
+return;
+}
+var _1d=dojo.marginBox(this.domNode).w;
+var _1e=dojo.marginBox(this._menu.domNode).w;
+this._updateNodeWidth(this._menu.domNode,v-(_1d-_1e));
+},onItems:function(){
+var _1f,_20=false;
+if(this._menu){
+_1f=this._getSelected();
+this._menu.destroyRecursive();
+}
+this._menu=this._getMenu();
+var _21,_22;
+if(this.items.length){
+dojo.forEach(this.items,function(_23){
+_21=this.parentWidget._getMenuItemForItem(_23,this);
+if(_21){
+if(_1f&&this.parentWidget._itemsMatch(_21.item,_1f.item)){
+_22=_21;
+}
+this._menu.addChild(_21);
+}
+},this);
+}else{
+_21=this.parentWidget._getMenuItemForItem(null,this);
+if(_21){
+this._menu.addChild(_21);
+}
+}
+if(_22){
+this._setSelected(_22);
+if((_1f&&!_1f.children&&_22.children)||(_1f&&_1f.children&&!_22.children)){
+var _24=this.parentWidget._getPaneForItem(_22.item,this,_22.children);
+if(_24){
+this.parentWidget.addChild(_24,this.getIndexInParent()+1);
+}else{
+this.parentWidget._removeAfter(this);
+this.parentWidget._onItemClick(null,this,_22.item,_22.children);
+}
+}
+}else{
+if(_1f){
+this.parentWidget._removeAfter(this);
+}
+}
+this.containerNode.innerHTML="";
+this.containerNode.appendChild(this._menu.domNode);
+this.parentWidget.scrollIntoView(this);
+this._checkScrollConnection(true);
+this.inherited(arguments);
+this._onMinWidthChange(this.minWidth);
+},_checkScrollConnection:function(_25){
+var _26=this.store;
+if(this._scrollConn){
+this.disconnect(this._scrollConn);
+}
+delete this._scrollConn;
+if(!dojo.every(this.items,function(i){
+return _26.isItemLoaded(i);
+})){
+if(_25){
+this._loadVisibleItems();
+}
+this._scrollConn=this.connect(this.domNode,"onscroll","_onScrollPane");
+}
+},startup:function(){
+this.inherited(arguments);
+this.parentWidget._updateClass(this.domNode,"GroupPane");
+},focus:function(_27){
+if(this._menu){
+if(this._pendingFocus){
+this.disconnect(this._pendingFocus);
+}
+delete this._pendingFocus;
+var _28=this._menu.focusedChild;
+if(!_28){
+var _29=dojo.query(".dojoxRollingListItemSelected",this.domNode)[0];
+if(_29){
+_28=dijit.byNode(_29);
+}
+}
+if(!_28){
+_28=this._menu.getChildren()[0]||this._menu;
+}
+this._focusByNode=false;
+if(_28.focusNode){
+if(!this.parentWidget._savedFocus||_27){
+try{
+_28.focusNode.focus();
+}
+catch(e){
+}
+}
+window.setTimeout(function(){
+try{
+dojo.window.scrollIntoView(_28.focusNode);
+}
+catch(e){
+}
+},1);
+}else{
+if(_28.focus){
+if(!this.parentWidget._savedFocus||_27){
+_28.focus();
+}
+}else{
+this._focusByNode=true;
+}
+}
+this.inherited(arguments);
+}else{
+if(!this._pendingFocus){
+this._pendingFocus=this.connect(this,"onItems","focus");
+}
+}
+},_getMenu:function(){
+var _2a=this;
+var _2b=new dijit.Menu({parentMenu:this.parentPane?this.parentPane._menu:null,onCancel:function(_2c){
+if(_2a.parentPane){
+_2a.parentPane.focus(true);
+}
+},_moveToPopup:function(evt){
+if(this.focusedChild&&!this.focusedChild.disabled){
+this.focusedChild._onClick(evt);
+}
+}},this.menuNode);
+this.connect(_2b,"onItemClick",function(_2d,evt){
+if(_2d.disabled){
+return;
+}
+evt.alreadySelected=dojo.hasClass(_2d.domNode,"dojoxRollingListItemSelected");
+if(evt.alreadySelected&&((evt.type=="keypress"&&evt.charOrCode!=dojo.keys.ENTER)||(evt.type=="internal"))){
+var p=this.parentWidget.getChildren()[this.getIndexInParent()+1];
+if(p){
+p.focus(true);
+this.parentWidget.scrollIntoView(p);
+}
+}else{
+this._setSelected(_2d,_2b);
+this.parentWidget._onItemClick(evt,this,_2d.item,_2d.children);
+if(evt.type=="keypress"&&evt.charOrCode==dojo.keys.ENTER){
+this.parentWidget._onExecute();
+}
+}
+});
+if(!_2b._started){
+_2b.startup();
+}
+return _2b;
+},_onScrollPane:function(){
+if(this._visibleLoadPending){
+window.clearTimeout(this._visibleLoadPending);
+}
+this._visibleLoadPending=window.setTimeout(dojo.hitch(this,"_loadVisibleItems"),500);
+},_loadVisibleItems:function(){
+delete this._visibleLoadPending;
+var _2e=this._menu;
+if(!_2e){
+return;
+}
+var _2f=_2e.getChildren();
+if(!_2f||!_2f.length){
+return;
+}
+var _30=function(n,m,pb){
+var s=dojo.getComputedStyle(n);
+var r=0;
+if(m){
+r+=dojo._getMarginExtents(n,s).t;
+}
+if(pb){
+r+=dojo._getPadBorderExtents(n,s).t;
+}
+return r;
+};
+var _31=_30(this.domNode,false,true)+_30(this.containerNode,true,true)+_30(_2e.domNode,true,true)+_30(_2f[0].domNode,true,false);
+var h=dojo.contentBox(this.domNode).h;
+var _32=this.domNode.scrollTop-_31-(h/2);
+var _33=_32+(3*h/2);
+var _34=dojo.filter(_2f,function(c){
+var cnt=c.domNode.offsetTop;
+var s=c.store;
+var i=c.item;
+return (cnt>=_32&&cnt<=_33&&!s.isItemLoaded(i));
+});
+var _35=dojo.map(_34,function(c){
+return c.item;
+});
+var _36=dojo.hitch(this,function(){
+var _37=this._getSelected();
+var _38;
+dojo.forEach(_35,function(_39,idx){
+var _3a=this.parentWidget._getMenuItemForItem(_39,this);
+var _3b=_34[idx];
+var _3c=_3b.getIndexInParent();
+_2e.removeChild(_3b);
+if(_3a){
+if(_37&&this.parentWidget._itemsMatch(_3a.item,_37.item)){
+_38=_3a;
+}
+_2e.addChild(_3a,_3c);
+if(_2e.focusedChild==_3b){
+_2e.focusChild(_3a);
+}
+}
+_3b.destroy();
+},this);
+this._checkScrollConnection(false);
+});
+this._doLoadItems(_35,_36);
+},_getSelected:function(_3d){
+if(!_3d){
+_3d=this._menu;
+}
+if(_3d){
+var _3e=this._menu.getChildren();
+for(var i=0,_3f;(_3f=_3e[i]);i++){
+if(dojo.hasClass(_3f.domNode,"dojoxRollingListItemSelected")){
+return _3f;
+}
+}
+}
+return null;
+},_setSelected:function(_40,_41){
+if(!_41){
+_41=this._menu;
+}
+if(_41){
+dojo.forEach(_41.getChildren(),function(i){
+this.parentWidget._updateClass(i.domNode,"Item",{"Selected":(_40&&(i==_40&&!i.disabled))});
+},this);
+}
+}});
+dojo.declare("dojox.widget.RollingList",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:dojo.cache("dojox.widget","RollingList/RollingList.html","<div class=\"dojoxRollingList ${className}\"\n\t><div class=\"dojoxRollingListContainer\" dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onkeypress:_onKey\"\n\t></div\n\t><div class=\"dojoxRollingListButtons\" dojoAttachPoint=\"buttonsNode\"\n        ><button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"okButton\"\n\t\t\t\tdojoAttachEvent=\"onClick:_onExecute\">${okButtonLabel}</button\n        ><button dojoType=\"dijit.form.Button\" dojoAttachPoint=\"cancelButton\"\n\t\t\t\tdojoAttachEvent=\"onClick:_onCancel\">${cancelButtonLabel}</button\n\t></div\n></div>\n"),widgetsInTemplate:true,className:"",store:null,query:null,queryOptions:null,childrenAttrs:["children"],parentAttr:"",value:null,executeOnDblClick:true,preloadItems:false,showButtons:false,okButtonLabel:"",cancelButtonLabel:"",minPaneWidth:0,postMixInProperties:function(){
+this.inherited(arguments);
+var loc=dojo.i18n.getLocalization("dijit","common");
+this.okButtonLabel=this.okButtonLabel||loc.buttonOk;
+this.cancelButtonLabel=this.cancelButtonLabel||loc.buttonCancel;
+},_setShowButtonsAttr:function(_42){
+var _43=false;
+if((this.showButtons!=_42&&this._started)||(this.showButtons==_42&&!this.started)){
+_43=true;
+}
+dojo.toggleClass(this.domNode,"dojoxRollingListButtonsHidden",!_42);
+this.showButtons=_42;
+if(_43){
+if(this._started){
+this.layout();
+}else{
+window.setTimeout(dojo.hitch(this,"layout"),0);
+}
+}
+},_itemsMatch:function(_44,_45){
+if(!_44&&!_45){
+return true;
+}else{
+if(!_44||!_45){
+return false;
+}
+}
+return (_44==_45||(this._isIdentity&&this.store.getIdentity(_44)==this.store.getIdentity(_45)));
+},_removeAfter:function(idx){
+if(typeof idx!="number"){
+idx=this.getIndexOfChild(idx);
+}
+if(idx>=0){
+dojo.forEach(this.getChildren(),function(c,i){
+if(i>idx){
+this.removeChild(c);
+c.destroyRecursive();
+}
+},this);
+}
+var _46=this.getChildren(),_47=_46[_46.length-1];
+var _48=null;
+while(_47&&!_48){
+var val=_47._getSelected?_47._getSelected():null;
+if(val){
+_48=val.item;
+}
+_47=_47.parentPane;
+}
+if(!this._setInProgress){
+this._setValue(_48);
+}
+},addChild:function(_49,_4a){
+if(_4a>0){
+this._removeAfter(_4a-1);
+}
+this.inherited(arguments);
+if(!_49._started){
+_49.startup();
+}
+_49.attr("minWidth",this.minPaneWidth);
+this.layout();
+if(!this._savedFocus){
+_49.focus();
+}
+},_setMinPaneWidthAttr:function(_4b){
+if(_4b!==this.minPaneWidth){
+this.minPaneWidth=_4b;
+dojo.forEach(this.getChildren(),function(c){
+c.attr("minWidth",_4b);
+});
+}
+},_updateClass:function(_4c,_4d,_4e){
+if(!this._declaredClasses){
+this._declaredClasses=("dojoxRollingList "+this.className).split(" ");
+}
+dojo.forEach(this._declaredClasses,function(c){
+if(c){
+dojo.addClass(_4c,c+_4d);
+for(var k in _4e||{}){
+dojo.toggleClass(_4c,c+_4d+k,_4e[k]);
+}
+dojo.toggleClass(_4c,c+_4d+"FocusSelected",(dojo.hasClass(_4c,c+_4d+"Focus")&&dojo.hasClass(_4c,c+_4d+"Selected")));
+dojo.toggleClass(_4c,c+_4d+"HoverSelected",(dojo.hasClass(_4c,c+_4d+"Hover")&&dojo.hasClass(_4c,c+_4d+"Selected")));
+}
+});
+},scrollIntoView:function(_4f){
+if(this._scrollingTimeout){
+window.clearTimeout(this._scrollingTimeout);
+}
+delete this._scrollingTimeout;
+this._scrollingTimeout=window.setTimeout(dojo.hitch(this,function(){
+if(_4f.domNode){
+dojo.window.scrollIntoView(_4f.domNode);
+}
+delete this._scrollingTimeout;
+return;
+}),1);
+},resize:function(_50){
+dijit.layout._LayoutWidget.prototype.resize.call(this,_50);
+},layout:function(){
+var _51=this.getChildren();
+if(this._contentBox){
+var bn=this.buttonsNode;
+var _52=this._contentBox.h-dojo.marginBox(bn).h-dojox.html.metrics.getScrollbar().h;
+dojo.forEach(_51,function(c){
+dojo.marginBox(c.domNode,{h:_52});
+});
+}
+if(this._focusedPane){
+var foc=this._focusedPane;
+delete this._focusedPane;
+if(!this._savedFocus){
+foc.focus();
+}
+}else{
+if(_51&&_51.length){
+if(!this._savedFocus){
+_51[0].focus();
+}
+}
+}
+},_onChange:function(_53){
+this.onChange(_53);
+},_setValue:function(_54){
+delete this._setInProgress;
+if(!this._itemsMatch(this.value,_54)){
+this.value=_54;
+this._onChange(_54);
+}
+},_setValueAttr:function(_55){
+if(this._itemsMatch(this.value,_55)&&!_55){
+return;
+}
+if(this._setInProgress&&this._setInProgress===_55){
+return;
+}
+this._setInProgress=_55;
+if(!_55||!this.store.isItem(_55)){
+var _56=this.getChildren()[0];
+_56._setSelected(null);
+this._onItemClick(null,_56,null,null);
+return;
+}
+var _57=dojo.hitch(this,function(_58,_59){
+var _5a=this.store,id;
+if(this.parentAttr&&_5a.getFeatures()["dojo.data.api.Identity"]&&((id=this.store.getValue(_58,this.parentAttr))||id==="")){
+var cb=function(i){
+if(_5a.getIdentity(i)==_5a.getIdentity(_58)){
+_59(null);
+}else{
+_59([i]);
+}
+};
+if(id===""){
+_59(null);
+}else{
+if(typeof id=="string"){
+_5a.fetchItemByIdentity({identity:id,onItem:cb});
+}else{
+if(_5a.isItem(id)){
+cb(id);
+}
+}
+}
+}else{
+var _5b=this.childrenAttrs.length;
+var _5c=[];
+dojo.forEach(this.childrenAttrs,function(_5d){
+var q={};
+q[_5d]=_58;
+_5a.fetch({query:q,scope:this,onComplete:function(_5e){
+if(this._setInProgress!==_55){
+return;
+}
+_5c=_5c.concat(_5e);
+_5b--;
+if(_5b===0){
+_59(_5c);
+}
+}});
+},this);
+}
+});
+var _5f=dojo.hitch(this,function(_60,idx){
+var set=_60[idx];
+var _61=this.getChildren()[idx];
+var _62;
+if(set&&_61){
+var fx=dojo.hitch(this,function(){
+if(_62){
+this.disconnect(_62);
+}
+delete _62;
+if(this._setInProgress!==_55){
+return;
+}
+var _63=dojo.filter(_61._menu.getChildren(),function(i){
+return this._itemsMatch(i.item,set);
+},this)[0];
+if(_63){
+idx++;
+_61._menu.onItemClick(_63,{type:"internal",stopPropagation:function(){
+},preventDefault:function(){
+}});
+if(_60[idx]){
+_5f(_60,idx);
+}else{
+this._setValue(set);
+this.onItemClick(set,_61,this.getChildItems(set));
+}
+}
+});
+if(!_61.isLoaded){
+_62=this.connect(_61,"onLoad",fx);
+}else{
+fx();
+}
+}else{
+if(idx===0){
+this.set("value",null);
+}
+}
+});
+var _64=[];
+var _65=dojo.hitch(this,function(_66){
+if(_66&&_66.length){
+_64.push(_66[0]);
+_57(_66[0],_65);
+}else{
+if(!_66){
+_64.pop();
+}
+_64.reverse();
+_5f(_64,0);
+}
+});
+var ns=this.domNode.style;
+if(ns.display=="none"||ns.visibility=="hidden"){
+this._setValue(_55);
+}else{
+if(!this._itemsMatch(_55,this._visibleItem)){
+_65([_55]);
+}
+}
+},_onItemClick:function(evt,_67,_68,_69){
+if(evt){
+var _6a=this._getPaneForItem(_68,_67,_69);
+var _6b=(evt.type=="click"&&evt.alreadySelected);
+if(_6b&&_6a){
+this._removeAfter(_67.getIndexInParent()+1);
+var _6c=_67.getNextSibling();
+if(_6c&&_6c._setSelected){
+_6c._setSelected(null);
+}
+this.scrollIntoView(_6c);
+}else{
+if(_6a){
+this.addChild(_6a,_67.getIndexInParent()+1);
+if(this._savedFocus){
+_6a.focus(true);
+}
+}else{
+this._removeAfter(_67);
+this.scrollIntoView(_67);
+}
+}
+}else{
+if(_67){
+this._removeAfter(_67);
+this.scrollIntoView(_67);
+}
+}
+if(!evt||evt.type!="internal"){
+this._setValue(_68);
+this.onItemClick(_68,_67,_69);
+}
+this._visibleItem=_68;
+},_getPaneForItem:function(_6d,_6e,_6f){
+var ret=this.getPaneForItem(_6d,_6e,_6f);
+ret.store=this.store;
+ret.parentWidget=this;
+ret.parentPane=_6e||null;
+if(!_6d){
+ret.query=this.query;
+ret.queryOptions=this.queryOptions;
+}else{
+if(_6f){
+ret.items=_6f;
+}else{
+ret.items=[_6d];
+}
+}
+return ret;
+},_getMenuItemForItem:function(_70,_71){
+var _72=this.store;
+if(!_70||!_72||!_72.isItem(_70)){
+var i=new dijit.MenuItem({label:"---",disabled:true,iconClass:"dojoxEmpty",focus:function(){
+}});
+this._updateClass(i.domNode,"Item");
+return i;
+}else{
+var _73=_72.isItemLoaded(_70);
+var _74=_73?this.getChildItems(_70):undefined;
+var _75;
+if(_74){
+_75=this.getMenuItemForItem(_70,_71,_74);
+_75.children=_74;
+this._updateClass(_75.domNode,"Item",{"Expanding":true});
+if(!_75._started){
+var c=_75.connect(_75,"startup",function(){
+this.disconnect(c);
+dojo.style(this.arrowWrapper,"display","");
+});
+}else{
+dojo.style(_75.arrowWrapper,"display","");
+}
+}else{
+_75=this.getMenuItemForItem(_70,_71,null);
+if(_73){
+this._updateClass(_75.domNode,"Item",{"Single":true});
+}else{
+this._updateClass(_75.domNode,"Item",{"Unloaded":true});
+_75.attr("disabled",true);
+}
+}
+_75.store=this.store;
+_75.item=_70;
+if(!_75.label){
+_75.attr("label",this.store.getLabel(_70).replace(/</,"&lt;"));
+}
+if(_75.focusNode){
+var _76=this;
+_75.focus=function(){
+if(!this.disabled){
+try{
+this.focusNode.focus();
+}
+catch(e){
+}
+}
+};
+_75.connect(_75.focusNode,"onmouseenter",function(){
+if(!this.disabled){
+_76._updateClass(this.domNode,"Item",{"Hover":true});
+}
+});
+_75.connect(_75.focusNode,"onmouseleave",function(){
+if(!this.disabled){
+_76._updateClass(this.domNode,"Item",{"Hover":false});
+}
+});
+_75.connect(_75.focusNode,"blur",function(){
+_76._updateClass(this.domNode,"Item",{"Focus":false,"Hover":false});
+});
+_75.connect(_75.focusNode,"focus",function(){
+_76._updateClass(this.domNode,"Item",{"Focus":true});
+_76._focusedPane=_71;
+});
+if(this.executeOnDblClick){
+_75.connect(_75.focusNode,"ondblclick",function(){
+_76._onExecute();
+});
+}
+}
+return _75;
+}
+},_setStore:function(_77){
+if(_77===this.store&&this._started){
+return;
+}
+this.store=_77;
+this._isIdentity=_77.getFeatures()["dojo.data.api.Identity"];
+var _78=this._getPaneForItem();
+this.addChild(_78,0);
+},_onKey:function(e){
+if(e.charOrCode==dojo.keys.BACKSPACE){
+dojo.stopEvent(e);
+return;
+}else{
+if(e.charOrCode==dojo.keys.ESCAPE&&this._savedFocus){
+try{
+dijit.focus(this._savedFocus);
+}
+catch(e){
+}
+dojo.stopEvent(e);
+return;
+}else{
+if(e.charOrCode==dojo.keys.LEFT_ARROW||e.charOrCode==dojo.keys.RIGHT_ARROW){
+dojo.stopEvent(e);
+return;
+}
+}
+}
+},_resetValue:function(){
+this.set("value",this._lastExecutedValue);
+},_onCancel:function(){
+this._resetValue();
+this.onCancel();
+},_onExecute:function(){
+this._lastExecutedValue=this.get("value");
+this.onExecute();
+},focus:function(){
+var _79=this._savedFocus;
+this._savedFocus=dijit.getFocus(this);
+if(!this._savedFocus.node){
+delete this._savedFocus;
+}
+if(!this._focusedPane){
+var _7a=this.getChildren()[0];
+if(_7a&&!_79){
+_7a.focus(true);
+}
+}else{
+this._savedFocus=dijit.getFocus(this);
+var foc=this._focusedPane;
+delete this._focusedPane;
+if(!_79){
+foc.focus(true);
+}
+}
+},handleKey:function(e){
+if(e.charOrCode==dojo.keys.DOWN_ARROW){
+delete this._savedFocus;
+this.focus();
+return false;
+}else{
+if(e.charOrCode==dojo.keys.ESCAPE){
+this._onCancel();
+return false;
+}
+}
+return true;
+},_updateChildClasses:function(){
+var _7b=this.getChildren();
+var _7c=_7b.length;
+dojo.forEach(_7b,function(c,idx){
+dojo.toggleClass(c.domNode,"dojoxRollingListPaneCurrentChild",(idx==(_7c-1)));
+dojo.toggleClass(c.domNode,"dojoxRollingListPaneCurrentSelected",(idx==(_7c-2)));
+});
+},startup:function(){
+if(this._started){
+return;
+}
+if(!this.getParent||!this.getParent()){
+this.resize();
+this.connect(dojo.global,"onresize","resize");
+}
+this.connect(this,"addChild","_updateChildClasses");
+this.connect(this,"removeChild","_updateChildClasses");
+this._setStore(this.store);
+this.set("showButtons",this.showButtons);
+this.inherited(arguments);
+this._lastExecutedValue=this.get("value");
+},getChildItems:function(_7d){
+var _7e,_7f=this.store;
+dojo.forEach(this.childrenAttrs,function(_80){
+var _81=_7f.getValues(_7d,_80);
+if(_81&&_81.length){
+_7e=(_7e||[]).concat(_81);
+}
+});
+return _7e;
+},getMenuItemForItem:function(_82,_83,_84){
+return new dijit.MenuItem({});
+},getPaneForItem:function(_85,_86,_87){
+if(!_85||_87){
+return new dojox.widget._RollingListGroupPane({});
+}else{
+return null;
+}
+},onItemClick:function(_88,_89,_8a){
+},onExecute:function(){
+},onCancel:function(){
+},onChange:function(_8b){
+}});
+}
Index: trunk/web/dojo/dojox/widget/FilePicker/_FileInfoPane.html
===================================================================
--- trunk/web/dojo/dojox/widget/FilePicker/_FileInfoPane.html	(revision 0)
+++ trunk/web/dojo/dojox/widget/FilePicker/_FileInfoPane.html	(revision 9)
@@ -0,0 +1,19 @@
+<div class="dojoxFileInfoPane">
+	<table>
+		<tbody>
+			<tr>
+				<td class="dojoxFileInfoLabel dojoxFileInfoNameLabel">${_messages.name}</td>
+				<td class="dojoxFileInfoName" dojoAttachPoint="nameNode"></td>
+			</tr>
+			<tr>
+				<td class="dojoxFileInfoLabel dojoxFileInfoPathLabel">${_messages.path}</td>
+				<td class="dojoxFileInfoPath" dojoAttachPoint="pathNode"></td>
+			</tr>
+			<tr>
+				<td class="dojoxFileInfoLabel dojoxFileInfoSizeLabel">${_messages.size}</td>
+				<td class="dojoxFileInfoSize" dojoAttachPoint="sizeNode"></td>
+			</tr>
+		</tbody>
+	</table>
+	<div dojoAttachPoint="containerNode" style="display:none;"></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/widget/FilePicker/FilePicker.css
===================================================================
--- trunk/web/dojo/dojox/widget/FilePicker/FilePicker.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/FilePicker/FilePicker.css	(revision 9)
@@ -0,0 +1,207 @@
+.dojoxRollingList {
+	border: 1px solid #000;
+	height: 20em;
+	background-color: #FFF;
+	position: relative;
+}
+.dijitPopup .dojoxRollingList {
+	position: static;
+}
+.dojoxRollingListContainer {
+	overflow: scroll;
+	overflow-y: hidden;
+	overflow-x: scroll;
+	white-space: nowrap;
+}
+.dojoxRollingListButtons {
+	position: absolute;
+	right: 5px;
+	padding: 5px 0px;
+}
+.dojoxRollingListButtonsHidden .dojoxRollingListButtons {
+	display: none;
+}
+.dojoxRollingListPane {
+	overflow: scroll;
+	overflow-x: hidden;
+	overflow-y: scroll;
+	display:-moz-inline-box;		
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dojoxRollingListPane .dijitMenuItem td {
+	width: 1px;
+}
+.dojoxRollingListPane .dijitMenuItem td.dijitMenuItemLabel {
+	width: auto;
+}
+.dojoxRollingListPane .dijitMenuItemLabel,
+.dojoxRollingListPane .dijitMenuItemIcon {
+	position: static !important;
+}
+.dj_webkit .dojoxRollingListPane,
+.dj_ie .dojoxRollingListPane {
+	padding-right: 15px; 
+}
+.dojoxRollingListPane .dijitMenu {
+	border: none !important;
+}
+.dojoxRollingListItem {
+	cursor: default;
+}
+.tundra .dojoxRollingList {
+	border-color: #b3b3b3;
+}
+.tundra .dijitPopup .dojoxRollingList {
+	border-color: #406b9b;
+}
+.tundra .dojoxRollingListPane {
+	background-color: #f7f7f7;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHover,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #fff;
+	background-color: #999;
+	font-weight: bold;
+}
+.tundra .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #3559ac;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #9aacd6;
+}
+.tundra .dojoxRollingListItem {
+	font-family: inherit;
+}
+.soria .dojoxRollingList {
+	border-color: #8ba0bd;
+}
+.soria .dijitPopup .dojoxRollingList {
+	border-color: #406b9b;
+}
+.soria .dojoxRollingListPane {
+	background-color: #fff;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHover, 
+.soria .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #243C5F;
+	background-color: #ccc;
+	font-weight: bold;
+}
+.soria .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #d9e6f9;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #ecf3fc;
+}
+.soria .dojoxRollingListItem {
+	font-family: inherit;
+}
+.nihilo .dojoxRollingList {
+	border-color: #d3d3d3;
+}
+.nihilo .dijitPopup .dojoxRollingList {
+	border-color: #b3b3b3;
+}
+.nihilo .dojoxRollingListPane {
+	background-color: #fff;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHover,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #243C5F;
+	background-color: #ccc;
+	font-weight: bold;
+}
+.nihilo .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #ffe284;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #fff1c2;
+}
+.nihilo .dojoxRollingListItem {
+	font-family: inherit;
+}
+.dojoxFileInfoPane *{
+	white-space: normal;
+}
+.dojoxFileInfoLabel {
+	font-weight: bold;
+	white-space: nowrap;
+}
+.dojoxFileInfoPane {
+	width: 20em;
+}
+.tundra .dojoxFilePickerItem .dijitMenuItemIcon {
+	background-image: url("images/tundraFileIcons.gif");
+	background-repeat: no-repeat;
+}
+.tundra .dojoxFilePickerItem .dojoxEmpty {
+	background-image: none;
+}
+.tundra .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+	background-position: 0px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+	background-position: -16px;
+}
+.tundra .dojoxFilePickerItem .dojoxFileItemIcon {
+	background-position: -32px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+	background-position: -48px;
+}
+.soria .dojoxFilePickerItem .dijitMenuItemIcon {
+	background-image: url("images/soriaFileIcons.gif");
+	background-repeat: no-repeat;
+}
+.soria .dojoxFilePickerItem .dojoxEmpty {
+	background-image: none;
+}
+.soria .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+	background-position: 0px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+	background-position: -16px;
+}
+.soria .dojoxFilePickerItem .dojoxFileItemIcon {
+	background-position: -32px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+	background-position: -48px;
+}
+.nihilo .dojoxFilePickerItem .dijitMenuItemIcon {
+	background-image: url("images/nihiloFileIcons.gif");
+	background-repeat: no-repeat;
+}
+.nihilo .dojoxFilePickerItem .dojoxEmpty {
+	background-image: none;
+}
+.nihilo .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+	background-position: 0px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+	background-position: -16px;
+}
+.nihilo .dojoxFilePickerItem .dojoxFileItemIcon {
+	background-position: -32px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+	background-position: -48px;
+}
Index: trunk/web/dojo/dojox/widget/FilePicker/images/soriaFileIcons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/FilePicker/images/soriaFileIcons.gif
===================================================================
--- trunk/web/dojo/dojox/widget/FilePicker/images/soriaFileIcons.gif	(revision 0)
+++ trunk/web/dojo/dojox/widget/FilePicker/images/soriaFileIcons.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/FilePicker/images/soriaFileIcons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/FilePicker/images/tundraFileIcons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/FilePicker/images/tundraFileIcons.gif
===================================================================
--- trunk/web/dojo/dojox/widget/FilePicker/images/tundraFileIcons.gif	(revision 0)
+++ trunk/web/dojo/dojox/widget/FilePicker/images/tundraFileIcons.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/FilePicker/images/tundraFileIcons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/FilePicker/images/nihiloFileIcons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/FilePicker/images/nihiloFileIcons.gif
===================================================================
--- trunk/web/dojo/dojox/widget/FilePicker/images/nihiloFileIcons.gif	(revision 0)
+++ trunk/web/dojo/dojox/widget/FilePicker/images/nihiloFileIcons.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/FilePicker/images/nihiloFileIcons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/DataPresentation.js
===================================================================
--- trunk/web/dojo/dojox/widget/DataPresentation.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/DataPresentation.js	(revision 9)
@@ -0,0 +1,420 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.DataPresentation"]){
+dojo._hasResource["dojox.widget.DataPresentation"]=true;
+dojo.provide("dojox.widget.DataPresentation");
+dojo.experimental("dojox.widget.DataPresentation");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.charting.Chart2D");
+dojo.require("dojox.charting.widget.Legend");
+dojo.require("dojox.charting.action2d.Tooltip");
+dojo.require("dojox.charting.action2d.Highlight");
+dojo.require("dojo.colors");
+dojo.require("dojo.data.ItemFileWriteStore");
+(function(){
+var _1=function(_2,_3,_4,_5){
+var _6=[];
+_6[0]={value:0,text:""};
+var _7=_2.length;
+if((_4!=="ClusteredBars")&&(_4!=="StackedBars")){
+var _8=_5.offsetWidth;
+var _9=(""+_2[0]).length*_2.length*7;
+if(_3==1){
+for(var z=1;z<500;++z){
+if((_9/z)<_8){
+break;
+}
+++_3;
+}
+}
+}
+for(var i=0;i<_7;i++){
+_6.push({value:i+1,text:(!_3||i%_3)?"":_2[i]});
+}
+_6.push({value:_7+1,text:""});
+return _6;
+};
+var _a=function(_b,_c){
+var _d={vertical:false,labels:_c,min:0,max:_c.length-1,majorTickStep:1,minorTickStep:1};
+if((_b==="ClusteredBars")||(_b==="StackedBars")){
+_d.vertical=true;
+}
+if((_b==="Lines")||(_b==="Areas")||(_b==="StackedAreas")){
+_d.min++;
+_d.max--;
+}
+return _d;
+};
+var _e=function(_f,_10,_11,_12){
+var _13={vertical:true,fixLower:"major",fixUpper:"major",natural:true};
+if(_10==="secondary"){
+_13.leftBottom=false;
+}
+if((_f==="ClusteredBars")||(_f==="StackedBars")){
+_13.vertical=false;
+}
+if(_11==_12){
+_13.min=_11-1;
+_13.max=_12+1;
+}
+return _13;
+};
+var _14=function(_15,_16,_17){
+var _18={type:_15,hAxis:"independent",vAxis:"dependent-"+_16,gap:4,lines:false,areas:false,markers:false};
+if((_15==="ClusteredBars")||(_15==="StackedBars")){
+_18.hAxis=_18.vAxis;
+_18.vAxis="independent";
+}
+if((_15==="Lines")||(_15==="Hybrid-Lines")||(_15==="Areas")||(_15==="StackedAreas")){
+_18.lines=true;
+}
+if((_15==="Areas")||(_15==="StackedAreas")){
+_18.areas=true;
+}
+if(_15==="Lines"){
+_18.markers=true;
+}
+if(_15==="Hybrid-Lines"){
+_18.shadows={dx:2,dy:2,dw:2};
+_18.type="Lines";
+}
+if(_15==="Hybrid-ClusteredColumns"){
+_18.type="ClusteredColumns";
+}
+if(_17){
+_18.animate=_17;
+}
+return _18;
+};
+var _19=function(_1a,_1b,_1c,_1d,_1e,_1f,_20,_21,_22,_23,_24){
+var _25=_1b;
+if(!_25){
+_1a.innerHTML="";
+_25=new dojox.charting.Chart2D(_1a);
+}
+if(_20){
+_20._clone=function(){
+var _26=new dojox.charting.Theme({chart:this.chart,plotarea:this.plotarea,axis:this.axis,series:this.series,marker:this.marker,antiAlias:this.antiAlias,assignColors:this.assignColors,assignMarkers:this.assigneMarkers,colors:dojo.delegate(this.colors)});
+_26.markers=this.markers;
+_26._buildMarkerArray();
+return _26;
+};
+_25.setTheme(_20);
+}
+var _27=_22.series_data[0].slice(0);
+if(_1d){
+_27.reverse();
+}
+var _28=_1(_27,_1f,_1c,_1a);
+var _29={};
+var _2a=null;
+var _2b=null;
+var _2c={};
+for(var _2d in _25.runs){
+_2c[_2d]=true;
+}
+var _2e=_22.series_name.length;
+for(var i=0;i<_2e;i++){
+if(_22.series_chart[i]&&(_22.series_data[i].length>0)){
+var _2f=_1c;
+var _30=_22.series_axis[i];
+if(_2f=="Hybrid"){
+if(_22.series_charttype[i]=="line"){
+_2f="Hybrid-Lines";
+}else{
+_2f="Hybrid-ClusteredColumns";
+}
+}
+if(!_29[_30]){
+_29[_30]={};
+}
+if(!_29[_30][_2f]){
+var _31=_30+"-"+_2f;
+_25.addPlot(_31,_14(_2f,_30,_1e));
+var _32={};
+if(typeof _21=="string"){
+_32.text=function(o){
+var _33=[o.element,o.run.name,_27[o.index],((_2f==="ClusteredBars")||(_2f==="StackedBars"))?o.x:o.y];
+return dojo.replace(_21,_33);
+};
+}else{
+if(typeof _21=="function"){
+_32.text=_21;
+}
+}
+new dojox.charting.action2d.Tooltip(_25,_31,_32);
+if(_2f!=="Lines"&&_2f!=="Hybrid-Lines"){
+new dojox.charting.action2d.Highlight(_25,_31);
+}
+_29[_30][_2f]=true;
+}
+var _34=[];
+var _35=_22.series_data[i].length;
+for(var j=0;j<_35;j++){
+var val=_22.series_data[i][j];
+_34.push(val);
+if(_2a===null||val>_2a){
+_2a=val;
+}
+if(_2b===null||val<_2b){
+_2b=val;
+}
+}
+if(_1d){
+_34.reverse();
+}
+var _36={plot:_30+"-"+_2f};
+if(_22.series_linestyle[i]){
+_36.stroke={style:_22.series_linestyle[i]};
+}
+_25.addSeries(_22.series_name[i],_34,_36);
+delete _2c[_22.series_name[i]];
+}
+}
+for(_2d in _2c){
+_25.removeSeries(_2d);
+}
+_25.addAxis("independent",_a(_1c,_28));
+_25.addAxis("dependent-primary",_e(_1c,"primary",_2b,_2a));
+_25.addAxis("dependent-secondary",_e(_1c,"secondary",_2b,_2a));
+return _25;
+};
+var _37=function(_38,_39,_3a,_3b){
+var _3c=_39;
+if(!_3c){
+_3c=new dojox.charting.widget.Legend({chart:_3a,horizontal:_3b},_38);
+}else{
+_3c.refresh();
+}
+return _3c;
+};
+var _3d=function(_3e,_3f,_40,_41,_42){
+var _43=_3f||new dojox.grid.DataGrid({},_3e);
+_43.startup();
+_43.setStore(_40,_41,_42);
+var _44=[];
+for(var ser=0;ser<_40.series_name.length;ser++){
+if(_40.series_grid[ser]&&(_40.series_data[ser].length>0)){
+_44.push({field:"data."+ser,name:_40.series_name[ser],width:"auto",formatter:_40.series_gridformatter[ser]});
+}
+}
+_43.setStructure(_44);
+return _43;
+};
+var _45=function(_46,_47){
+if(_47.title){
+_46.innerHTML=_47.title;
+}
+};
+var _48=function(_49,_4a){
+if(_4a.footer){
+_49.innerHTML=_4a.footer;
+}
+};
+var _4b=function(_4c,_4d){
+var _4e=_4c;
+if(_4d){
+var _4f=_4d.split(/[.\[\]]+/);
+for(var _50 in _4f){
+if(_4e){
+_4e=_4e[_4f[_50]];
+}
+}
+}
+return _4e;
+};
+dojo.declare("dojox.widget.DataPresentation",null,{type:"chart",chartType:"clusteredBars",reverse:false,animate:null,labelMod:1,legendHorizontal:true,constructor:function(_51,_52){
+dojo.mixin(this,_52);
+this.domNode=dojo.byId(_51);
+this[this.type+"Node"]=this.domNode;
+if(typeof this.theme=="string"){
+this.theme=dojo.getObject(this.theme);
+}
+this.chartNode=dojo.byId(this.chartNode);
+this.legendNode=dojo.byId(this.legendNode);
+this.gridNode=dojo.byId(this.gridNode);
+this.titleNode=dojo.byId(this.titleNode);
+this.footerNode=dojo.byId(this.footerNode);
+if(this.legendVertical){
+this.legendHorizontal=!this.legendVertical;
+}
+if(this.url){
+this.setURL(null,null,this.refreshInterval);
+}else{
+if(this.data){
+this.setData(null,this.refreshInterval);
+}else{
+this.setStore();
+}
+}
+},setURL:function(url,_53,_54){
+if(_54){
+this.cancelRefresh();
+}
+this.url=url||this.url;
+this.urlContent=_53||this.urlContent;
+this.refreshInterval=_54||this.refreshInterval;
+var me=this;
+dojo.xhrGet({url:this.url,content:this.urlContent,handleAs:"json-comment-optional",load:function(_55,_56){
+me.setData(_55);
+},error:function(xhr,_57){
+if(me.urlError&&(typeof me.urlError=="function")){
+me.urlError(xhr,_57);
+}
+}});
+if(_54&&(this.refreshInterval>0)){
+this.refreshIntervalPending=setInterval(function(){
+me.setURL();
+},this.refreshInterval);
+}
+},setData:function(_58,_59){
+if(_59){
+this.cancelRefresh();
+}
+this.data=_58||this.data;
+this.refreshInterval=_59||this.refreshInterval;
+var _5a=(typeof this.series=="function")?this.series(this.data):this.series;
+var _5b=[],_5c=[],_5d=[],_5e=[],_5f=[],_60=[],_61=[],_62=[],_63=[],_64=0;
+for(var ser=0;ser<_5a.length;ser++){
+_5b[ser]=_4b(this.data,_5a[ser].datapoints);
+if(_5b[ser]&&(_5b[ser].length>_64)){
+_64=_5b[ser].length;
+}
+_5c[ser]=[];
+_5d[ser]=_5a[ser].name||(_5a[ser].namefield?_4b(this.data,_5a[ser].namefield):null)||("series "+ser);
+_5e[ser]=(_5a[ser].chart!==false);
+_5f[ser]=_5a[ser].charttype||"bar";
+_60[ser]=_5a[ser].linestyle;
+_61[ser]=_5a[ser].axis||"primary";
+_62[ser]=(_5a[ser].grid!==false);
+_63[ser]=_5a[ser].gridformatter;
+}
+var _65,_66,_67,_68;
+var _69=[];
+for(_65=0;_65<_64;_65++){
+_66={index:_65};
+for(ser=0;ser<_5a.length;ser++){
+if(_5b[ser]&&(_5b[ser].length>_65)){
+_67=_4b(_5b[ser][_65],_5a[ser].field);
+if(_5e[ser]){
+_68=parseFloat(_67);
+if(!isNaN(_68)){
+_67=_68;
+}
+}
+_66["data."+ser]=_67;
+_5c[ser].push(_67);
+}
+}
+_69.push(_66);
+}
+if(_64<=0){
+_69.push({index:0});
+}
+var _6a=new dojo.data.ItemFileWriteStore({data:{identifier:"index",items:_69}});
+if(this.data.title){
+_6a.title=this.data.title;
+}
+if(this.data.footer){
+_6a.footer=this.data.footer;
+}
+_6a.series_data=_5c;
+_6a.series_name=_5d;
+_6a.series_chart=_5e;
+_6a.series_charttype=_5f;
+_6a.series_linestyle=_60;
+_6a.series_axis=_61;
+_6a.series_grid=_62;
+_6a.series_gridformatter=_63;
+this.setPreparedStore(_6a);
+if(_59&&(this.refreshInterval>0)){
+var me=this;
+this.refreshIntervalPending=setInterval(function(){
+me.setData();
+},this.refreshInterval);
+}
+},refresh:function(){
+if(this.url){
+this.setURL(this.url,this.urlContent,this.refreshInterval);
+}else{
+if(this.data){
+this.setData(this.data,this.refreshInterval);
+}
+}
+},cancelRefresh:function(){
+if(this.refreshIntervalPending){
+clearInterval(this.refreshIntervalPending);
+this.refreshIntervalPending=undefined;
+}
+},setStore:function(_6b,_6c,_6d){
+this.setPreparedStore(_6b,_6c,_6d);
+},setPreparedStore:function(_6e,_6f,_70){
+this.preparedstore=_6e||this.store;
+this.query=_6f||this.query;
+this.queryOptions=_70||this.queryOptions;
+if(this.preparedstore){
+if(this.chartNode){
+this.chartWidget=_19(this.chartNode,this.chartWidget,this.chartType,this.reverse,this.animate,this.labelMod,this.theme,this.tooltip,this.preparedstore,this.query,this,_70);
+this.renderChartWidget();
+}
+if(this.legendNode){
+this.legendWidget=_37(this.legendNode,this.legendWidget,this.chartWidget,this.legendHorizontal);
+}
+if(this.gridNode){
+this.gridWidget=_3d(this.gridNode,this.gridWidget,this.preparedstore,this.query,this.queryOptions);
+this.renderGridWidget();
+}
+if(this.titleNode){
+_45(this.titleNode,this.preparedstore);
+}
+if(this.footerNode){
+_48(this.footerNode,this.preparedstore);
+}
+}
+},renderChartWidget:function(){
+if(this.chartWidget){
+this.chartWidget.render();
+}
+},renderGridWidget:function(){
+if(this.gridWidget){
+this.gridWidget.render();
+}
+},getChartWidget:function(){
+return this.chartWidget;
+},getGridWidget:function(){
+return this.gridWidget;
+},destroy:function(){
+this.cancelRefresh();
+if(this.chartWidget){
+this.chartWidget.destroy();
+delete this.chartWidget;
+}
+if(this.legendWidget){
+delete this.legendWidget;
+}
+if(this.gridWidget){
+delete this.gridWidget;
+}
+if(this.chartNode){
+this.chartNode.innerHTML="";
+}
+if(this.legendNode){
+this.legendNode.innerHTML="";
+}
+if(this.gridNode){
+this.gridNode.innerHTML="";
+}
+if(this.titleNode){
+this.titleNode.innerHTML="";
+}
+if(this.footerNode){
+this.footerNode.innerHTML="";
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojox/widget/CalendarFx.js
===================================================================
--- trunk/web/dojo/dojox/widget/CalendarFx.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/CalendarFx.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.CalendarFx"]){
+dojo._hasResource["dojox.widget.CalendarFx"]=true;
+dojo.provide("dojox.widget.CalendarFx");
+dojo.require("dojox.widget.FisheyeLite");
+dojo.declare("dojox.widget._FisheyeFX",null,{addFx:function(_1,_2){
+dojo.query(_1,_2).forEach(function(_3){
+new dojox.widget.FisheyeLite({properties:{fontSize:1.1}},_3);
+});
+}});
+dojo.declare("dojox.widget.CalendarFisheye",[dojox.widget.Calendar,dojox.widget._FisheyeFX],{});
+}
Index: trunk/web/dojo/dojox/widget/Calendar.js
===================================================================
--- trunk/web/dojo/dojox/widget/Calendar.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/Calendar.js	(revision 9)
@@ -0,0 +1,502 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.Calendar"]){
+dojo._hasResource["dojox.widget.Calendar"]=true;
+dojo.provide("dojox.widget.Calendar");
+dojo.experimental("dojox.widget.Calendar");
+dojo.require("dijit.Calendar");
+dojo.require("dijit._Container");
+dojo.declare("dojox.widget._CalendarBase",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:dojo.cache("dojox.widget","Calendar/Calendar.html","<div class=\"dojoxCalendar\">\n    <div tabindex=\"0\" class=\"dojoxCalendarContainer\" style=\"visibility: visible;\" dojoAttachPoint=\"container\">\n\t\t<div style=\"display:none\">\n\t\t\t<div dojoAttachPoint=\"previousYearLabelNode\"></div>\n\t\t\t<div dojoAttachPoint=\"nextYearLabelNode\"></div>\n\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\"></div>\n\t\t</div>\n        <div class=\"dojoxCalendarHeader\">\n            <div>\n                <div class=\"dojoxCalendarDecrease\" dojoAttachPoint=\"decrementMonth\"></div>\n            </div>\n            <div class=\"\">\n                <div class=\"dojoxCalendarIncrease\" dojoAttachPoint=\"incrementMonth\"></div>\n            </div>\n            <div class=\"dojoxCalendarTitle\" dojoAttachPoint=\"header\" dojoAttachEvent=\"onclick: onHeaderClick\">\n            </div>\n        </div>\n        <div class=\"dojoxCalendarBody\" dojoAttachPoint=\"containerNode\"></div>\n        <div class=\"\">\n            <div class=\"dojoxCalendarFooter\" dojoAttachPoint=\"footer\">                        \n            </div>\n        </div>\n    </div>\n</div>\n"),_views:null,useFx:true,widgetsInTemplate:true,value:new Date(),constraints:null,footerFormat:"medium",constructor:function(){
+this._views=[];
+},postMixInProperties:function(){
+var c=this.constraints;
+if(c){
+var _1=dojo.date.stamp.fromISOString;
+if(typeof c.min=="string"){
+c.min=_1(c.min);
+}
+if(typeof c.max=="string"){
+c.max=_1(c.max);
+}
+}
+},postCreate:function(){
+this.displayMonth=new Date(this.get("value"));
+var _2={parent:this,_getValueAttr:dojo.hitch(this,function(){
+return new Date(this._internalValue||this.value);
+}),_getDisplayMonthAttr:dojo.hitch(this,function(){
+return new Date(this.displayMonth);
+}),_getConstraintsAttr:dojo.hitch(this,function(){
+return this.constraints;
+}),getLang:dojo.hitch(this,function(){
+return this.lang;
+}),isDisabledDate:dojo.hitch(this,this.isDisabledDate),getClassForDate:dojo.hitch(this,this.getClassForDate),addFx:this.useFx?dojo.hitch(this,this.addFx):function(){
+}};
+dojo.forEach(this._views,function(_3){
+var _4=new _3(_2,dojo.create("div"));
+this.addChild(_4);
+var _5=_4.getHeader();
+if(_5){
+this.header.appendChild(_5);
+dojo.style(_5,"display","none");
+}
+dojo.style(_4.domNode,"visibility","hidden");
+dojo.connect(_4,"onValueSelected",this,"_onDateSelected");
+_4.attr("value",this.get("value"));
+},this);
+if(this._views.length<2){
+dojo.style(this.header,"cursor","auto");
+}
+this.inherited(arguments);
+this._children=this.getChildren();
+this._currentChild=0;
+var _6=new Date();
+this.footer.innerHTML="Today: "+dojo.date.locale.format(_6,{formatLength:this.footerFormat,selector:"date",locale:this.lang});
+dojo.connect(this.footer,"onclick",this,"goToToday");
+var _7=this._children[0];
+dojo.style(_7.domNode,"top","0px");
+dojo.style(_7.domNode,"visibility","visible");
+var _8=_7.getHeader();
+if(_8){
+dojo.style(_7.getHeader(),"display","");
+}
+dojo[_7.useHeader?"removeClass":"addClass"](this.container,"no-header");
+_7.onDisplay();
+var _9=this;
+var _a=function(_b,_c,_d){
+dijit.typematic.addMouseListener(_9[_b],_9,function(_e){
+if(_e>=0){
+_9._adjustDisplay(_c,_d);
+}
+},0.8,500);
+};
+_a("incrementMonth","month",1);
+_a("decrementMonth","month",-1);
+this._updateTitleStyle();
+},addFx:function(_f,_10){
+},_setValueAttr:function(_11){
+if(!_11["getFullYear"]){
+_11=dojo.date.stamp.fromISOString(_11+"");
+}
+if(!this.value||dojo.date.compare(_11,this.value)){
+_11=new Date(_11);
+this.displayMonth=new Date(_11);
+this._internalValue=_11;
+if(!this.isDisabledDate(_11,this.lang)&&this._currentChild==0){
+this.value=_11;
+this.onChange(_11);
+}
+this._children[this._currentChild].attr("value",this.value);
+return true;
+}
+return false;
+},isDisabledDate:function(_12,_13){
+var c=this.constraints;
+var _14=dojo.date.compare;
+return c&&(c.min&&(_14(c.min,_12,"date")>0)||(c.max&&_14(c.max,_12,"date")<0));
+},onValueSelected:function(_15){
+},_onDateSelected:function(_16,_17,_18){
+this.displayMonth=_16;
+this.set("value",_16);
+if(!this._transitionVert(-1)){
+if(!_17&&_17!==0){
+_17=this.get("value");
+}
+this.onValueSelected(_17);
+}
+},onChange:function(_19){
+},onHeaderClick:function(e){
+this._transitionVert(1);
+},goToToday:function(){
+this.set("value",new Date());
+this.onValueSelected(this.get("value"));
+},_transitionVert:function(_1a){
+var _1b=this._children[this._currentChild];
+var _1c=this._children[this._currentChild+_1a];
+if(!_1c){
+return false;
+}
+dojo.style(_1c.domNode,"visibility","visible");
+var _1d=dojo.style(this.containerNode,"height");
+_1c.attr("value",this.displayMonth);
+if(_1b.header){
+dojo.style(_1b.header,"display","none");
+}
+if(_1c.header){
+dojo.style(_1c.header,"display","");
+}
+dojo.style(_1c.domNode,"top",(_1d*-1)+"px");
+dojo.style(_1c.domNode,"visibility","visible");
+this._currentChild+=_1a;
+var _1e=_1d*_1a;
+var _1f=0;
+dojo.style(_1c.domNode,"top",(_1e*-1)+"px");
+var _20=dojo.animateProperty({node:_1b.domNode,properties:{top:_1e},onEnd:function(){
+dojo.style(_1b.domNode,"visibility","hidden");
+}});
+var _21=dojo.animateProperty({node:_1c.domNode,properties:{top:_1f},onEnd:function(){
+_1c.onDisplay();
+}});
+dojo[_1c.useHeader?"removeClass":"addClass"](this.container,"no-header");
+_20.play();
+_21.play();
+_1b.onBeforeUnDisplay();
+_1c.onBeforeDisplay();
+this._updateTitleStyle();
+return true;
+},_updateTitleStyle:function(){
+dojo[this._currentChild<this._children.length-1?"addClass":"removeClass"](this.header,"navToPanel");
+},_slideTable:function(_22,_23,_24){
+var _25=_22.domNode;
+var _26=_25.cloneNode(true);
+var _27=dojo.style(_25,"width");
+_25.parentNode.appendChild(_26);
+dojo.style(_25,"left",(_27*_23)+"px");
+_24();
+var _28=dojo.animateProperty({node:_26,properties:{left:_27*_23*-1},duration:500,onEnd:function(){
+_26.parentNode.removeChild(_26);
+}});
+var _29=dojo.animateProperty({node:_25,properties:{left:0},duration:500});
+_28.play();
+_29.play();
+},_addView:function(_2a){
+this._views.push(_2a);
+},getClassForDate:function(_2b,_2c){
+},_adjustDisplay:function(_2d,_2e,_2f){
+var _30=this._children[this._currentChild];
+var _31=this.displayMonth=_30.adjustDate(this.displayMonth,_2e);
+this._slideTable(_30,_2e,function(){
+_30.attr("value",_31);
+});
+}});
+dojo.declare("dojox.widget._CalendarView",dijit._Widget,{headerClass:"",useHeader:true,cloneClass:function(_32,n,_33){
+var _34=dojo.query(_32,this.domNode)[0];
+var i;
+if(!_33){
+for(i=0;i<n;i++){
+_34.parentNode.appendChild(_34.cloneNode(true));
+}
+}else{
+var _35=dojo.query(_32,this.domNode)[0];
+for(i=0;i<n;i++){
+_34.parentNode.insertBefore(_34.cloneNode(true),_35);
+}
+}
+},_setText:function(_36,_37){
+if(_36.innerHTML!=_37){
+dojo.empty(_36);
+_36.appendChild(dojo.doc.createTextNode(_37));
+}
+},getHeader:function(){
+return this.header||(this.header=this.header=dojo.create("span",{"class":this.headerClass}));
+},onValueSelected:function(_38){
+},adjustDate:function(_39,_3a){
+return dojo.date.add(_39,this.datePart,_3a);
+},onDisplay:function(){
+},onBeforeDisplay:function(){
+},onBeforeUnDisplay:function(){
+}});
+dojo.declare("dojox.widget._CalendarDay",null,{parent:null,constructor:function(){
+this._addView(dojox.widget._CalendarDayView);
+}});
+dojo.declare("dojox.widget._CalendarDayView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarDay.html","<div class=\"dijitCalendarDayLabels\" style=\"left: 0px;\" dojoAttachPoint=\"dayContainer\">\n\t<div dojoAttachPoint=\"header\">\n\t\t<div dojoAttachPoint=\"monthAndYearHeader\">\n\t\t\t<span dojoAttachPoint=\"monthLabelNode\" class=\"dojoxCalendarMonthLabelNode\"></span>\n\t\t\t<span dojoAttachPoint=\"headerComma\" class=\"dojoxCalendarComma\">,</span>\n\t\t\t<span dojoAttachPoint=\"yearLabelNode\" class=\"dojoxCalendarDayYearLabel\"></span>\n\t\t</div>\n\t</div>\n\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\">\n\t\t<thead>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dijitCalendarDayLabelTemplate\"><div class=\"dijitCalendarDayLabel\"></div></td>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody dojoAttachEvent=\"onclick: _onDayClick\">\n\t\t\t<tr class=\"dijitCalendarWeekTemplate\">\n\t\t\t\t<td class=\"dojoxCalendarNextMonth dijitCalendarDateTemplate\">\n\t\t\t\t\t<div class=\"dijitCalendarDateLabel\"></div>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n"),datePart:"month",dayWidth:"narrow",postCreate:function(){
+this.cloneClass(".dijitCalendarDayLabelTemplate",6);
+this.cloneClass(".dijitCalendarDateTemplate",6);
+this.cloneClass(".dijitCalendarWeekTemplate",5);
+var _3b=dojo.date.locale.getNames("days",this.dayWidth,"standAlone",this.getLang());
+var _3c=dojo.cldr.supplemental.getFirstDayOfWeek(this.getLang());
+dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_3d,i){
+this._setText(_3d,_3b[(i+_3c)%7]);
+},this);
+},onDisplay:function(){
+if(!this._addedFx){
+this._addedFx=true;
+this.addFx(".dijitCalendarDateTemplate div",this.domNode);
+}
+},_onDayClick:function(e){
+if(typeof (e.target._date)=="undefined"){
+return;
+}
+var _3e=new Date(this.get("displayMonth"));
+var p=e.target.parentNode;
+var c="dijitCalendar";
+var d=dojo.hasClass(p,c+"PreviousMonth")?-1:(dojo.hasClass(p,c+"NextMonth")?1:0);
+if(d){
+_3e=dojo.date.add(_3e,"month",d);
+}
+_3e.setDate(e.target._date);
+if(this.isDisabledDate(_3e)){
+dojo.stopEvent(e);
+return;
+}
+this.parent._onDateSelected(_3e);
+},_setValueAttr:function(_3f){
+this._populateDays();
+},_populateDays:function(){
+var _40=new Date(this.get("displayMonth"));
+_40.setDate(1);
+var _41=_40.getDay();
+var _42=dojo.date.getDaysInMonth(_40);
+var _43=dojo.date.getDaysInMonth(dojo.date.add(_40,"month",-1));
+var _44=new Date();
+var _45=this.get("value");
+var _46=dojo.cldr.supplemental.getFirstDayOfWeek(this.getLang());
+if(_46>_41){
+_46-=7;
+}
+var _47=dojo.date.compare;
+var _48=".dijitCalendarDateTemplate";
+var _49="dijitCalendarSelectedDate";
+var _4a=this._lastDate;
+var _4b=_4a==null||_4a.getMonth()!=_40.getMonth()||_4a.getFullYear()!=_40.getFullYear();
+this._lastDate=_40;
+if(!_4b){
+dojo.query(_48,this.domNode).removeClass(_49).filter(function(_4c){
+return _4c.className.indexOf("dijitCalendarCurrent")>-1&&_4c._date==_45.getDate();
+}).addClass(_49);
+return;
+}
+dojo.query(_48,this.domNode).forEach(function(_4d,i){
+i+=_46;
+var _4e=new Date(_40);
+var _4f,_50="dijitCalendar",adj=0;
+if(i<_41){
+_4f=_43-_41+i+1;
+adj=-1;
+_50+="Previous";
+}else{
+if(i>=(_41+_42)){
+_4f=i-_41-_42+1;
+adj=1;
+_50+="Next";
+}else{
+_4f=i-_41+1;
+_50+="Current";
+}
+}
+if(adj){
+_4e=dojo.date.add(_4e,"month",adj);
+}
+_4e.setDate(_4f);
+if(!_47(_4e,_44,"date")){
+_50="dijitCalendarCurrentDate "+_50;
+}
+if(!_47(_4e,_45,"date")&&!_47(_4e,_45,"month")&&!_47(_4e,_45,"year")){
+_50=_49+" "+_50;
+}
+if(this.isDisabledDate(_4e,this.getLang())){
+_50=" dijitCalendarDisabledDate "+_50;
+}
+var _51=this.getClassForDate(_4e,this.getLang());
+if(_51){
+_50+=_51+" "+_50;
+}
+_4d.className=_50+"Month dijitCalendarDateTemplate";
+_4d.dijitDateValue=_4e.valueOf();
+var _52=dojo.query(".dijitCalendarDateLabel",_4d)[0];
+this._setText(_52,_4e.getDate());
+_52._date=_52.parentNode._date=_4e.getDate();
+},this);
+var _53=dojo.date.locale.getNames("months","wide","standAlone",this.getLang());
+this._setText(this.monthLabelNode,_53[_40.getMonth()]);
+this._setText(this.yearLabelNode,_40.getFullYear());
+}});
+dojo.declare("dojox.widget._CalendarMonthYear",null,{constructor:function(){
+this._addView(dojox.widget._CalendarMonthYearView);
+}});
+dojo.declare("dojox.widget._CalendarMonthYearView",[dojox.widget._CalendarView,dijit._Templated],{templateString:dojo.cache("dojox.widget","Calendar/CalendarMonthYear.html","<div class=\"dojoxCal-MY-labels\" style=\"left: 0px;\"\t\n\tdojoAttachPoint=\"myContainer\" dojoAttachEvent=\"onclick: onClick\">\n\t\t<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"margin: auto;\">\n\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr class=\"dojoxCal-MY-G-Template\">\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-M-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarMonthLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-M-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarMonthLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-Y-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarYearLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t<td class=\"dojoxCal-MY-Y-Template\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"dojoxCalendarYearLabel\"></div>\n\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t </tr>\n\t\t\t\t\t\t <tr class=\"dojoxCal-MY-btns\">\n\t\t\t\t\t\t \t <td class=\"dojoxCal-MY-btns\" colspan=\"4\">\n\t\t\t\t\t\t \t\t <span class=\"dijitReset dijitInline dijitButtonNode ok-btn\" dojoAttachEvent=\"onclick: onOk\" dojoAttachPoint=\"okBtn\">\n\t\t\t\t\t\t \t \t \t <button\tclass=\"dijitReset dijitStretch dijitButtonContents\">OK</button>\n\t\t\t\t\t\t\t\t </span>\n\t\t\t\t\t\t\t\t <span class=\"dijitReset dijitInline dijitButtonNode cancel-btn\" dojoAttachEvent=\"onclick: onCancel\" dojoAttachPoint=\"cancelBtn\">\n\t\t\t\t\t\t \t \t\t <button\tclass=\"dijitReset dijitStretch dijitButtonContents\">Cancel</button>\n\t\t\t\t\t\t\t\t </span>\n\t\t\t\t\t\t \t </td>\n\t\t\t\t\t\t </tr>\n\t\t\t\t</tbody>\n\t\t</table>\n</div>\n"),datePart:"year",displayedYears:10,useHeader:false,postCreate:function(){
+this.cloneClass(".dojoxCal-MY-G-Template",5,".dojoxCal-MY-btns");
+this.monthContainer=this.yearContainer=this.myContainer;
+var _54="dojoxCalendarYearLabel";
+var _55="dojoxCalendarDecrease";
+var _56="dojoxCalendarIncrease";
+dojo.query("."+_54,this.myContainer).forEach(function(_57,idx){
+var _58=_56;
+switch(idx){
+case 0:
+_58=_55;
+case 1:
+dojo.removeClass(_57,_54);
+dojo.addClass(_57,_58);
+break;
+}
+});
+this._decBtn=dojo.query("."+_55,this.myContainer)[0];
+this._incBtn=dojo.query("."+_56,this.myContainer)[0];
+dojo.query(".dojoxCal-MY-M-Template",this.domNode).filter(function(_59){
+return _59.cellIndex==1;
+}).addClass("dojoxCal-MY-M-last");
+dojo.connect(this,"onBeforeDisplay",dojo.hitch(this,function(){
+this._cachedDate=new Date(this.get("value").getTime());
+this._populateYears(this._cachedDate.getFullYear());
+this._populateMonths();
+this._updateSelectedMonth();
+this._updateSelectedYear();
+}));
+dojo.connect(this,"_populateYears",dojo.hitch(this,function(){
+this._updateSelectedYear();
+}));
+dojo.connect(this,"_populateMonths",dojo.hitch(this,function(){
+this._updateSelectedMonth();
+}));
+this._cachedDate=this.get("value");
+this._populateYears();
+this._populateMonths();
+this.addFx(".dojoxCalendarMonthLabel,.dojoxCalendarYearLabel ",this.myContainer);
+},_setValueAttr:function(_5a){
+this._populateYears(_5a.getFullYear());
+},getHeader:function(){
+return null;
+},_getMonthNames:function(_5b){
+this._monthNames=this._monthNames||dojo.date.locale.getNames("months",_5b,"standAlone",this.getLang());
+return this._monthNames;
+},_populateMonths:function(){
+var _5c=this._getMonthNames("abbr");
+dojo.query(".dojoxCalendarMonthLabel",this.monthContainer).forEach(dojo.hitch(this,function(_5d,cnt){
+this._setText(_5d,_5c[cnt]);
+}));
+var _5e=this.get("constraints");
+if(_5e){
+var _5f=new Date();
+_5f.setFullYear(this._year);
+var min=-1,max=12;
+if(_5e.min){
+var _60=_5e.min.getFullYear();
+if(_60>this._year){
+min=12;
+}else{
+if(_60==this._year){
+min=_5e.min.getMonth();
+}
+}
+}
+if(_5e.max){
+var _61=_5e.max.getFullYear();
+if(_61<this._year){
+max=-1;
+}else{
+if(_61==this._year){
+max=_5e.max.getMonth();
+}
+}
+}
+dojo.query(".dojoxCalendarMonthLabel",this.monthContainer).forEach(dojo.hitch(this,function(_62,cnt){
+dojo[(cnt<min||cnt>max)?"addClass":"removeClass"](_62,"dijitCalendarDisabledDate");
+}));
+}
+var h=this.getHeader();
+if(h){
+this._setText(this.getHeader(),this.get("value").getFullYear());
+}
+},_populateYears:function(_63){
+var _64=this.get("constraints");
+var _65=_63||this.get("value").getFullYear();
+var _66=_65-Math.floor(this.displayedYears/2);
+var min=_64&&_64.min?_64.min.getFullYear():_66-10000;
+_66=Math.max(min,_66);
+this._displayedYear=_65;
+var _67=dojo.query(".dojoxCalendarYearLabel",this.yearContainer);
+var max=_64&&_64.max?_64.max.getFullYear()-_66:_67.length;
+var _68="dijitCalendarDisabledDate";
+_67.forEach(dojo.hitch(this,function(_69,cnt){
+if(cnt<=max){
+this._setText(_69,_66+cnt);
+dojo.removeClass(_69,_68);
+}else{
+dojo.addClass(_69,_68);
+}
+}));
+if(this._incBtn){
+dojo[max<_67.length?"addClass":"removeClass"](this._incBtn,_68);
+}
+if(this._decBtn){
+dojo[min>=_66?"addClass":"removeClass"](this._decBtn,_68);
+}
+var h=this.getHeader();
+if(h){
+this._setText(this.getHeader(),_66+" - "+(_66+11));
+}
+},_updateSelectedYear:function(){
+this._year=String((this._cachedDate||this.get("value")).getFullYear());
+this._updateSelectedNode(".dojoxCalendarYearLabel",dojo.hitch(this,function(_6a,idx){
+return this._year!==null&&_6a.innerHTML==this._year;
+}));
+},_updateSelectedMonth:function(){
+var _6b=(this._cachedDate||this.get("value")).getMonth();
+this._month=_6b;
+this._updateSelectedNode(".dojoxCalendarMonthLabel",function(_6c,idx){
+return idx==_6b;
+});
+},_updateSelectedNode:function(_6d,_6e){
+var sel="dijitCalendarSelectedDate";
+dojo.query(_6d,this.domNode).forEach(function(_6f,idx,_70){
+dojo[_6e(_6f,idx,_70)?"addClass":"removeClass"](_6f.parentNode,sel);
+});
+var _71=dojo.query(".dojoxCal-MY-M-Template div",this.myContainer).filter(function(_72){
+return dojo.hasClass(_72.parentNode,sel);
+})[0];
+if(!_71){
+return;
+}
+var _73=dojo.hasClass(_71,"dijitCalendarDisabledDate");
+dojo[_73?"addClass":"removeClass"](this.okBtn,"dijitDisabled");
+},onClick:function(evt){
+var _74;
+var _75=this;
+var sel="dijitCalendarSelectedDate";
+function hc(c){
+return dojo.hasClass(evt.target,c);
+};
+if(hc("dijitCalendarDisabledDate")){
+dojo.stopEvent(evt);
+return false;
+}
+if(hc("dojoxCalendarMonthLabel")){
+_74="dojoxCal-MY-M-Template";
+this._month=evt.target.parentNode.cellIndex+(evt.target.parentNode.parentNode.rowIndex*2);
+this._cachedDate.setMonth(this._month);
+this._updateSelectedMonth();
+}else{
+if(hc("dojoxCalendarYearLabel")){
+_74="dojoxCal-MY-Y-Template";
+this._year=Number(evt.target.innerHTML);
+this._cachedDate.setYear(this._year);
+this._populateMonths();
+this._updateSelectedYear();
+}else{
+if(hc("dojoxCalendarDecrease")){
+this._populateYears(this._displayedYear-10);
+return true;
+}else{
+if(hc("dojoxCalendarIncrease")){
+this._populateYears(this._displayedYear+10);
+return true;
+}else{
+return true;
+}
+}
+}
+}
+dojo.stopEvent(evt);
+return false;
+},onOk:function(evt){
+dojo.stopEvent(evt);
+if(dojo.hasClass(this.okBtn,"dijitDisabled")){
+return false;
+}
+this.onValueSelected(this._cachedDate);
+return false;
+},onCancel:function(evt){
+dojo.stopEvent(evt);
+this.onValueSelected(this.get("value"));
+return false;
+}});
+dojo.declare("dojox.widget.Calendar2Pane",[dojox.widget._CalendarBase,dojox.widget._CalendarDay,dojox.widget._CalendarMonthYear],{});
+dojo.declare("dojox.widget.Calendar",[dojox.widget._CalendarBase,dojox.widget._CalendarDay,dojox.widget._CalendarMonthYear],{});
+dojo.declare("dojox.widget.DailyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarDay],{});
+dojo.declare("dojox.widget.MonthAndYearlyCalendar",[dojox.widget._CalendarBase,dojox.widget._CalendarMonthYear],{});
+}
Index: trunk/web/dojo/dojox/widget/UpgradeBar.js
===================================================================
--- trunk/web/dojo/dojox/widget/UpgradeBar.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/UpgradeBar.js	(revision 9)
@@ -0,0 +1,101 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.UpgradeBar"]){
+dojo._hasResource["dojox.widget.UpgradeBar"]=true;
+dojo.provide("dojox.widget.UpgradeBar");
+dojo.require("dojo.window");
+dojo.require("dojo.fx");
+dojo.require("dojo.cookie");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.experimental("dojox.widget.UpgradeBar");
+dojo.declare("dojox.widget.UpgradeBar",[dijit._Widget,dijit._Templated],{notifications:[],buttonCancel:"Close for now",noRemindButton:"Don't Remind Me Again",templateString:dojo.cache("dojox.widget","UpgradeBar/UpgradeBar.html","<div class=\"dojoxUpgradeBar\">\n\t<div class=\"dojoxUpgradeBarMessage\" dojoAttachPoint=\"messageNode\">message</div>\n\t<div class=\"dojoxUpgradeBarReminderButton\" dojoAttachPoint=\"dontRemindButtonNode\" dojoAttachEvent=\"onclick:_onDontRemindClick\">${noRemindButton}</div>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dojoxUpgradeBarCloseIcon\" dojoAttachEvent=\"onclick: hide, onmouseenter: _onCloseEnter, onmouseleave: _onCloseLeave\" title=\"${buttonCancel}\"></span>\n</div>\n"),constructor:function(_1,_2){
+if(!_1.notifications&&_2){
+dojo.forEach(_2.childNodes,function(n){
+if(n.nodeType==1){
+var _3=dojo.attr(n,"validate");
+this.notifications.push({message:n.innerHTML,validate:function(){
+var _4=true;
+try{
+_4=dojo.eval(_3);
+}
+catch(e){
+}
+return _4;
+}});
+}
+},this);
+}
+},checkNotifications:function(){
+if(!this.notifications.length){
+return;
+}
+for(var i=0;i<this.notifications.length;i++){
+var _5=this.notifications[i].validate();
+if(_5){
+this.notify(this.notifications[i].message);
+break;
+}
+}
+},postCreate:function(){
+this.inherited(arguments);
+if(this.domNode.parentNode){
+dojo.style(this.domNode,"display","none");
+}
+dojo.mixin(this.attributeMap,{message:{node:"messageNode",type:"innerHTML"}});
+if(!this.noRemindButton){
+dojo.destroy(this.dontRemindButtonNode);
+}
+if(dojo.isIE==6){
+var _6=this;
+var _7=function(){
+var v=dojo.window.getBox();
+dojo.style(_6.domNode,"width",v.w+"px");
+};
+this.connect(window,"resize",function(){
+_7();
+});
+_7();
+}
+dojo.addOnLoad(this,"checkNotifications");
+},notify:function(_8){
+if(dojo.cookie("disableUpgradeReminders")){
+return;
+}
+if(!this.domNode.parentNode||!this.domNode.parentNode.innerHTML){
+document.body.appendChild(this.domNode);
+}
+dojo.style(this.domNode,"display","");
+if(_8){
+this.set("message",_8);
+}
+},show:function(){
+this._bodyMarginTop=dojo.style(dojo.body(),"marginTop");
+this._size=dojo.contentBox(this.domNode).h;
+dojo.style(this.domNode,{display:"block",height:0,opacity:0});
+if(!this._showAnim){
+this._showAnim=dojo.fx.combine([dojo.animateProperty({node:dojo.body(),duration:500,properties:{marginTop:this._bodyMarginTop+this._size}}),dojo.animateProperty({node:this.domNode,duration:500,properties:{height:this._size,opacity:1}})]);
+}
+this._showAnim.play();
+},hide:function(){
+if(!this._hideAnim){
+this._hideAnim=dojo.fx.combine([dojo.animateProperty({node:dojo.body(),duration:500,properties:{marginTop:this._bodyMarginTop}}),dojo.animateProperty({node:this.domNode,duration:500,properties:{height:0,opacity:0}})]);
+dojo.connect(this._hideAnim,"onEnd",this,function(){
+dojo.style(this.domNode,"display","none");
+});
+}
+this._hideAnim.play();
+},_onDontRemindClick:function(){
+dojo.cookie("disableUpgradeReminders",true,{expires:3650});
+this.hide();
+},_onCloseEnter:function(){
+dojo.addClass(this.closeButtonNode,"dojoxUpgradeBarCloseIcon-hover");
+},_onCloseLeave:function(){
+dojo.removeClass(this.closeButtonNode,"dojoxUpgradeBarCloseIcon-hover");
+}});
+}
Index: trunk/web/dojo/dojox/widget/FilePicker.js
===================================================================
--- trunk/web/dojo/dojox/widget/FilePicker.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/FilePicker.js	(revision 9)
@@ -0,0 +1,160 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.FilePicker"]){
+dojo._hasResource["dojox.widget.FilePicker"]=true;
+dojo.provide("dojox.widget.FilePicker");
+dojo.require("dojox.widget.RollingList");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.widget","FilePicker",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.widget._FileInfoPane",[dojox.widget._RollingListPane],{templateString:"",templateString:dojo.cache("dojox.widget","FilePicker/_FileInfoPane.html","<div class=\"dojoxFileInfoPane\">\n\t<table>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoNameLabel\">${_messages.name}</td>\n\t\t\t\t<td class=\"dojoxFileInfoName\" dojoAttachPoint=\"nameNode\"></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoPathLabel\">${_messages.path}</td>\n\t\t\t\t<td class=\"dojoxFileInfoPath\" dojoAttachPoint=\"pathNode\"></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=\"dojoxFileInfoLabel dojoxFileInfoSizeLabel\">${_messages.size}</td>\n\t\t\t\t<td class=\"dojoxFileInfoSize\" dojoAttachPoint=\"sizeNode\"></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n\t<div dojoAttachPoint=\"containerNode\" style=\"display:none;\"></div>\n</div>\n"),postMixInProperties:function(){
+this._messages=dojo.i18n.getLocalization("dojox.widget","FilePicker",this.lang);
+this.inherited(arguments);
+},onItems:function(){
+var _1=this.store,_2=this.items[0];
+if(!_2){
+this._onError("Load",new Error("No item defined"));
+}else{
+this.nameNode.innerHTML=_1.getLabel(_2);
+this.pathNode.innerHTML=_1.getIdentity(_2);
+this.sizeNode.innerHTML=_1.getValue(_2,"size");
+this.parentWidget.scrollIntoView(this);
+this.inherited(arguments);
+}
+}});
+dojo.declare("dojox.widget.FilePicker",dojox.widget.RollingList,{className:"dojoxFilePicker",pathSeparator:"",topDir:"",parentAttr:"parentDir",pathAttr:"path",preloadItems:50,selectDirectories:true,selectFiles:true,_itemsMatch:function(_3,_4){
+if(!_3&&!_4){
+return true;
+}else{
+if(!_3||!_4){
+return false;
+}else{
+if(_3==_4){
+return true;
+}else{
+if(this._isIdentity){
+var _5=[this.store.getIdentity(_3),this.store.getIdentity(_4)];
+dojo.forEach(_5,function(i,_6){
+if(i.lastIndexOf(this.pathSeparator)==(i.length-1)){
+_5[_6]=i.substring(0,i.length-1);
+}else{
+}
+},this);
+return (_5[0]==_5[1]);
+}
+}
+}
+}
+return false;
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+var _7,_8=this.getChildren()[0];
+var _9=dojo.hitch(this,function(){
+if(_7){
+this.disconnect(_7);
+}
+delete _7;
+var _a=_8.items[0];
+if(_a){
+var _b=this.store;
+var _c=_b.getValue(_a,this.parentAttr);
+var _d=_b.getValue(_a,this.pathAttr);
+this.pathSeparator=this.pathSeparator||_b.pathSeparator;
+if(!this.pathSeparator){
+this.pathSeparator=_d.substring(_c.length,_c.length+1);
+}
+if(!this.topDir){
+this.topDir=_c;
+if(this.topDir.lastIndexOf(this.pathSeparator)!=(this.topDir.length-1)){
+this.topDir+=this.pathSeparator;
+}
+}
+}
+});
+if(!this.pathSeparator||!this.topDir){
+if(!_8.items){
+_7=this.connect(_8,"onItems",_9);
+}else{
+_9();
+}
+}
+},getChildItems:function(_e){
+var _f=this.inherited(arguments);
+if(!_f&&this.store.getValue(_e,"directory")){
+_f=[];
+}
+return _f;
+},getMenuItemForItem:function(_10,_11,_12){
+var _13={iconClass:"dojoxDirectoryItemIcon"};
+if(!this.store.getValue(_10,"directory")){
+_13.iconClass="dojoxFileItemIcon";
+var l=this.store.getLabel(_10),idx=l.lastIndexOf(".");
+if(idx>=0){
+_13.iconClass+=" dojoxFileItemIcon_"+l.substring(idx+1);
+}
+if(!this.selectFiles){
+_13.disabled=true;
+}
+}
+var ret=new dijit.MenuItem(_13);
+return ret;
+},getPaneForItem:function(_14,_15,_16){
+var ret=null;
+if(!_14||(this.store.isItem(_14)&&this.store.getValue(_14,"directory"))){
+ret=new dojox.widget._RollingListGroupPane({});
+}else{
+if(this.store.isItem(_14)&&!this.store.getValue(_14,"directory")){
+ret=new dojox.widget._FileInfoPane({});
+}
+}
+return ret;
+},_setPathValueAttr:function(_17,_18,_19){
+if(!_17){
+this.set("value",null);
+return;
+}
+if(_17.lastIndexOf(this.pathSeparator)==(_17.length-1)){
+_17=_17.substring(0,_17.length-1);
+}
+this.store.fetchItemByIdentity({identity:_17,onItem:function(v){
+if(_18){
+this._lastExecutedValue=v;
+}
+this.set("value",v);
+if(_19){
+_19();
+}
+},scope:this});
+},_getPathValueAttr:function(val){
+if(!val){
+val=this.value;
+}
+if(val&&this.store.isItem(val)){
+return this.store.getValue(val,this.pathAttr);
+}else{
+return "";
+}
+},_setValue:function(_1a){
+delete this._setInProgress;
+var _1b=this.store;
+if(_1a&&_1b.isItem(_1a)){
+var _1c=this.store.getValue(_1a,"directory");
+if((_1c&&!this.selectDirectories)||(!_1c&&!this.selectFiles)){
+return;
+}
+}else{
+_1a=null;
+}
+if(!this._itemsMatch(this.value,_1a)){
+this.value=_1a;
+this._onChange(_1a);
+}
+}});
+}
Index: trunk/web/dojo/dojox/widget/Portlet/images/icons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Portlet/images/icons.png
===================================================================
--- trunk/web/dojo/dojox/widget/Portlet/images/icons.png	(revision 0)
+++ trunk/web/dojo/dojox/widget/Portlet/images/icons.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Portlet/images/icons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Portlet/images/icons.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/widget/Portlet/images/icons.gif
===================================================================
--- trunk/web/dojo/dojox/widget/Portlet/images/icons.gif	(revision 0)
+++ trunk/web/dojo/dojox/widget/Portlet/images/icons.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/widget/Portlet/images/icons.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/widget/Portlet/Portlet.css
===================================================================
--- trunk/web/dojo/dojox/widget/Portlet/Portlet.css	(revision 0)
+++ trunk/web/dojo/dojox/widget/Portlet/Portlet.css	(revision 9)
@@ -0,0 +1,138 @@
+.dojoxPortlet {
+	margin-bottom: 5px;
+}
+.dojoxPortlet .dijitTitlePaneTitle .dojoxPortletIcon {
+	width: 15px;
+	height: 15px;
+	float: right;
+	cursor: pointer;
+	background-repeat: no-repeat;
+}
+.tundra .dojoxPortlet-movable .dijitTitlePaneTitle,
+.soria .dojoxPortlet-movable .dijitTitlePaneTitle,
+.nihilo .dojoxPortlet-movable .dijitTitlePaneTitle {
+	cursor: move;
+}
+.dojoxPortlet .dijitTitlePaneTitle {
+	font-weight: bold;
+	font-size: 0.9em;
+}
+.soria .dojoxPortlet .dijitTitlePaneTitle {
+	color: #243C5F;
+}
+.tundra .dojoxPortlet .dijitTitlePaneTitle,
+.nihilo .dojoxPortlet .dijitTitlePaneTitle {
+	color: #333;
+}
+.dojoxPortlet-nonmovable .dijitTitlePaneTitle {
+	cursor: default;
+}
+.tundra .dojoxPortlet .dojoxPortletIcon {
+	background-image: url("../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.gif");
+}
+.soria .dojoxPortlet .dojoxPortletIcon {
+	background-image: url("../../../dijit/themes/soria/images/spriteRoundedIconsSmall.gif");
+}
+.nihilo .dojoxPortlet .dojoxPortletIcon {
+	background-image: url("../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif");
+}
+.dojoxPortlet .dojoxCloseNode, 
+.dojoxPortlet .dojoxCloseNode {
+	background-position: right 0px;
+}
+.dojoxPortlet .dojoxCloseNodeHover {
+	background-position: right -15px;
+}
+.tundra .dojoxPortlet .dijitOpen .dojoxArrowDown,
+.soria .dojoxPortlet .dijitOpen .dojoxArrowDown,
+.nihilo .dojoxPortlet .dijitOpen .dojoxArrowDown {
+	background-position: -15px top;
+}
+.tundra .dojoxPortlet .dijitClosed .dojoxArrowDown,
+.soria .dojoxPortlet .dijitClosed .dojoxArrowDown,
+.nihilo .dojoxPortlet .dijitClosed .dojoxArrowDown {
+	background-position: 0 top;
+}
+.tundra .dojoxPortlet .dojoxPortletSettingsIcon,
+.soria .dojoxPortlet .dojoxPortletSettingsIcon,
+.nihilo .dojoxPortlet .dojoxPortletSettingsIcon {
+	background-image: url(images/icons.png);
+	background-position: 0 1px;
+}
+.tundra .dojoxPortletSettingsContainer,
+.soria .dojoxPortletSettingsContainer,
+.nihilo .dojoxPortletSettingsContainer {
+	border-bottom: 1px solid #BFBFBF;
+	padding: 4px;
+}
+.tundra .dijitDialogPaneContent .dojoxPortletSettingsContainer,
+.soria .dijitDialogPaneContent .dojoxPortletSettingsContainer,
+.nihilo .dijitDialogPaneContent .dojoxPortletSettingsContainer {
+	border-bottom: none;
+}
+.soria .dojoDndItemOver .dojoxPortletTitle {
+	border-top: 1px solid #8D8D8D;
+	border-left: 1px solid #8D8D8D;
+	border-right: 1px solid #8D8D8D;
+}
+.soria .dojoDndItemOver .dojoxPortletContentOuter {
+  border-bottom: 1px solid #9D9D9D;
+	border-left: 1px solid #9D9D9D;
+	border-right: 1px solid #9D9D9D;
+}
+.dojoxPortlet div.dojoxPortletContentOuter {
+	background: #fff url(../../../dijit/themes/tundra/images/validationInputBg.gif) repeat-x top left;
+}
+.dojoxFeedPortletList {
+	padding-left: 25px;
+	margin: 0px;
+}
+.dojoxFeedPortletExpandableList {
+	padding-left: 0px;
+	margin: 0px;
+}
+.dojoxFeedPortletExpandableList li {
+	margin-bottom: 5px;
+}
+.dojoxFeedPortletList li {
+	padding-top: 4px;
+}
+.dojoxFeedPortletPreview {
+	max-height: 300px;
+	max-width: 400px;
+	overflow: hidden;
+}
+.dojoxFeedPortletPreview * {
+	max-height: 295px;
+	max-width: 395px;
+}
+.dojoxPortletFeedSettings {
+	padding: 5px;
+	border-bottom: 1px solid #9D9D9D;
+}
+.dojoxFeedPortletExpandableList {
+	list-style: none;
+}
+.dojoxPortletToggleIcon {
+	margin-right: 6px;
+	cursor: pointer;
+}
+.dojoxPortletToggleIcon img {
+	width: 15px;
+	height: 14px;
+}
+.dojoxPortletItemCollapsed .dojoxPortletToggleIcon {
+	background: url(../../../dijit/themes/tundra/images/plusButton.gif) no-repeat 0 0;
+}
+.dojoxPortletItemOpen .dojoxPortletToggleIcon {
+	background: url(../../../dijit/themes/tundra/images/minusButton.gif) no-repeat 0 0;
+}
+.dojoxPortletItemSummary {
+	margin-left: 20px;
+}
+.dojoxPortletItemCollapsed .dojoxPortletItemSummary {
+  display: none;
+}
+.dojoxPortletItemOpen .dojoxPortletItemSummary {
+  display: block;
+}
Index: trunk/web/dojo/dojox/widget/rotator/ThumbnailController.js
===================================================================
--- trunk/web/dojo/dojox/widget/rotator/ThumbnailController.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/rotator/ThumbnailController.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.ThumbnailController"]){
+dojo._hasResource["dojox.widget.rotator.ThumbnailController"]=true;
+dojo.provide("dojox.widget.rotator.ThumbnailController");
+(function(d){
+var _1="dojoxRotatorThumb",_2=_1+"Selected";
+d.declare("dojox.widget.rotator.ThumbnailController",null,{rotator:null,constructor:function(_3,_4){
+d.mixin(this,_3);
+this._domNode=_4;
+var r=this.rotator;
+if(r){
+while(_4.firstChild){
+_4.removeChild(_4.firstChild);
+}
+for(var i=0;i<r.panes.length;i++){
+var n=r.panes[i].node,s=d.attr(n,"thumbsrc")||d.attr(n,"src"),t=d.attr(n,"alt")||"";
+if(/img/i.test(n.tagName)){
+(function(j){
+d.create("a",{classname:_1+" "+_1+j+" "+(j==r.idx?_2:""),href:s,onclick:function(e){
+d.stopEvent(e);
+if(r){
+r.control.apply(r,["go",j]);
+}
+},title:t,innerHTML:"<img src=\""+s+"\" alt=\""+t+"\"/>"},_4);
+})(i);
+}
+}
+this._con=d.connect(r,"onUpdate",this,"_onUpdate");
+}
+},destroy:function(){
+d.disconnect(this._con);
+d.destroy(this._domNode);
+},_onUpdate:function(_5){
+var r=this.rotator;
+if(_5=="onAfterTransition"){
+var n=d.query("."+_1,this._domNode).removeClass(_2);
+if(r.idx<n.length){
+d.addClass(n[r.idx],_2);
+}
+}
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/rotator/Pan.js
===================================================================
--- trunk/web/dojo/dojox/widget/rotator/Pan.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/rotator/Pan.js	(revision 9)
@@ -0,0 +1,75 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Pan"]){
+dojo._hasResource["dojox.widget.rotator.Pan"]=true;
+dojo.provide("dojox.widget.rotator.Pan");
+dojo.require("dojo.fx");
+(function(d){
+var _1=0,_2=1,UP=2,_3=3;
+function _4(_5,_6){
+var n=_6.next.node,r=_6.rotatorBox,m=_5%2,a=m?"left":"top",s=(m?r.w:r.h)*(_5<2?-1:1),p={},q={};
+d.style(n,"display","");
+p[a]={start:0,end:-s};
+q[a]={start:s,end:0};
+return d.fx.combine([d.animateProperty({node:_6.current.node,duration:_6.duration,properties:p,easing:_6.easing}),d.animateProperty({node:n,duration:_6.duration,properties:q,easing:_6.easing})]);
+};
+function _7(n,z){
+d.style(n,"zIndex",z);
+};
+d.mixin(dojox.widget.rotator,{pan:function(_8){
+var w=_8.wrap,p=_8.rotator.panes,_9=p.length,z=_9,j=_8.current.idx,k=_8.next.idx,nw=Math.abs(k-j),ww=Math.abs((_9-Math.max(j,k))+Math.min(j,k))%_9,_a=j<k,_b=_3,_c=[],_d=[],_e=_8.duration;
+if((!w&&!_a)||(w&&(_a&&nw>ww||!_a&&nw<ww))){
+_b=_2;
+}
+if(_8.continuous){
+if(_8.quick){
+_e=Math.round(_e/(w?Math.min(ww,nw):nw));
+}
+_7(p[j].node,z--);
+var f=(_b==_3);
+while(1){
+var i=j;
+if(f){
+if(++j>=_9){
+j=0;
+}
+}else{
+if(--j<0){
+j=_9-1;
+}
+}
+var x=p[i],y=p[j];
+_7(y.node,z--);
+_c.push(_4(_b,d.mixin({easing:function(m){
+return m;
+}},_8,{current:x,next:y,duration:_e})));
+if((f&&j==k)||(!f&&j==k)){
+break;
+}
+_d.push(y.node);
+}
+var _f=d.fx.chain(_c),h=d.connect(_f,"onEnd",function(){
+d.disconnect(h);
+d.forEach(_d,function(q){
+d.style(q,{display:"none",left:0,opacity:1,top:0,zIndex:0});
+});
+});
+return _f;
+}
+return _4(_b,_8);
+},panDown:function(_10){
+return _4(_1,_10);
+},panRight:function(_11){
+return _4(_2,_11);
+},panUp:function(_12){
+return _4(UP,_12);
+},panLeft:function(_13){
+return _4(_3,_13);
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/rotator/Fade.js
===================================================================
--- trunk/web/dojo/dojox/widget/rotator/Fade.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/rotator/Fade.js	(revision 9)
@@ -0,0 +1,25 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Fade"]){
+dojo._hasResource["dojox.widget.rotator.Fade"]=true;
+dojo.provide("dojox.widget.rotator.Fade");
+dojo.require("dojo.fx");
+(function(d){
+function _1(_2,_3){
+var n=_2.next.node;
+d.style(n,{display:"",opacity:0});
+_2.node=_2.current.node;
+return d.fx[_3]([d.fadeOut(_2),d.fadeIn(d.mixin(_2,{node:n}))]);
+};
+d.mixin(dojox.widget.rotator,{fade:function(_4){
+return _1(_4,"chain");
+},crossFade:function(_5){
+return _1(_5,"combine");
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/rotator/Slide.js
===================================================================
--- trunk/web/dojo/dojox/widget/rotator/Slide.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/rotator/Slide.js	(revision 9)
@@ -0,0 +1,32 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Slide"]){
+dojo._hasResource["dojox.widget.rotator.Slide"]=true;
+dojo.provide("dojox.widget.rotator.Slide");
+(function(d){
+var _1=0,_2=1,UP=2,_3=3;
+function _4(_5,_6){
+var _7=_6.node=_6.next.node,r=_6.rotatorBox,m=_5%2,s=(m?r.w:r.h)*(_5<2?-1:1);
+d.style(_7,{display:"",zIndex:(d.style(_6.current.node,"zIndex")||1)+1});
+if(!_6.properties){
+_6.properties={};
+}
+_6.properties[m?"left":"top"]={start:s,end:0};
+return d.animateProperty(_6);
+};
+d.mixin(dojox.widget.rotator,{slideDown:function(_8){
+return _4(_1,_8);
+},slideRight:function(_9){
+return _4(_2,_9);
+},slideUp:function(_a){
+return _4(UP,_a);
+},slideLeft:function(_b){
+return _4(_3,_b);
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/rotator/Controller.js
===================================================================
--- trunk/web/dojo/dojox/widget/rotator/Controller.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/rotator/Controller.js	(revision 9)
@@ -0,0 +1,87 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Controller"]){
+dojo._hasResource["dojox.widget.rotator.Controller"]=true;
+dojo.provide("dojox.widget.rotator.Controller");
+(function(d){
+var _1="dojoxRotator",_2=_1+"Play",_3=_1+"Pause",_4=_1+"Number",_5=_1+"Tab",_6=_1+"Selected";
+d.declare("dojox.widget.rotator.Controller",null,{rotator:null,commands:"prev,play/pause,info,next",constructor:function(_7,_8){
+d.mixin(this,_7);
+var r=this.rotator;
+if(r){
+while(_8.firstChild){
+_8.removeChild(_8.firstChild);
+}
+var ul=this._domNode=d.create("ul",null,_8),_9=" "+_1+"Icon",cb=function(_a,_b,_c){
+d.create("li",{className:_b,innerHTML:"<a href=\"#\"><span>"+_a+"</span></a>",onclick:function(e){
+d.stopEvent(e);
+if(r){
+r.control.apply(r,_c);
+}
+}},ul);
+};
+d.forEach(this.commands.split(","),function(b,i){
+switch(b){
+case "prev":
+cb("Prev",_1+"Prev"+_9,["prev"]);
+break;
+case "play/pause":
+cb("Play",_2+_9,["play"]);
+cb("Pause",_3+_9,["pause"]);
+break;
+case "info":
+this._info=d.create("li",{className:_1+"Info",innerHTML:this._buildInfo(r)},ul);
+break;
+case "next":
+cb("Next",_1+"Next"+_9,["next"]);
+break;
+case "#":
+case "titles":
+for(var j=0;j<r.panes.length;j++){
+cb(b=="#"?j+1:r.panes[j].title||"Tab "+(j+1),(b=="#"?_4:_5)+" "+(j==r.idx?_6:"")+" "+_1+"Pane"+j,["go",j]);
+}
+break;
+}
+},this);
+d.query("li:first-child",ul).addClass(_1+"First");
+d.query("li:last-child",ul).addClass(_1+"Last");
+this._togglePlay();
+this._con=d.connect(r,"onUpdate",this,"_onUpdate");
+}
+},destroy:function(){
+d.disconnect(this._con);
+d.destroy(this._domNode);
+},_togglePlay:function(_d){
+var p=this.rotator.playing;
+d.query("."+_2,this._domNode).style("display",p?"none":"");
+d.query("."+_3,this._domNode).style("display",p?"":"none");
+},_buildInfo:function(r){
+return "<span>"+(r.idx+1)+" / "+r.panes.length+"</span>";
+},_onUpdate:function(_e){
+var r=this.rotator;
+switch(_e){
+case "play":
+case "pause":
+this._togglePlay();
+break;
+case "onAfterTransition":
+if(this._info){
+this._info.innerHTML=this._buildInfo(r);
+}
+var s=function(n){
+if(r.idx<n.length){
+d.addClass(n[r.idx],_6);
+}
+};
+s(d.query("."+_4,this._domNode).removeClass(_6));
+s(d.query("."+_5,this._domNode).removeClass(_6));
+break;
+}
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/widget/rotator/Wipe.js
===================================================================
--- trunk/web/dojo/dojox/widget/rotator/Wipe.js	(revision 0)
+++ trunk/web/dojo/dojox/widget/rotator/Wipe.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.widget.rotator.Wipe"]){
+dojo._hasResource["dojox.widget.rotator.Wipe"]=true;
+dojo.provide("dojox.widget.rotator.Wipe");
+(function(d){
+var _1=2,_2=3,UP=0,_3=1;
+function _4(_5,w,h,x){
+var a=[0,w,0,0];
+if(_5==_2){
+a=[0,w,h,w];
+}else{
+if(_5==UP){
+a=[h,w,h,0];
+}else{
+if(_5==_3){
+a=[0,0,h,0];
+}
+}
+}
+if(x!=null){
+a[_5]=_5==_1||_5==_3?x:(_5%2?w:h)-x;
+}
+return a;
+};
+function _6(n,_7,w,h,x){
+d.style(n,"clip",_7==null?"auto":"rect("+_4(_7,w,h,x).join("px,")+"px)");
+};
+function _8(_9,_a){
+var _b=_a.next.node,w=_a.rotatorBox.w,h=_a.rotatorBox.h;
+d.style(_b,{display:"",zIndex:(d.style(_a.current.node,"zIndex")||1)+1});
+_6(_b,_9,w,h);
+return new d.Animation(d.mixin({node:_b,curve:[0,_9%2?w:h],onAnimate:function(x){
+_6(_b,_9,w,h,parseInt(x));
+}},_a));
+};
+d.mixin(dojox.widget.rotator,{wipeDown:function(_c){
+return _8(_1,_c);
+},wipeRight:function(_d){
+return _8(_2,_d);
+},wipeUp:function(_e){
+return _8(UP,_e);
+},wipeLeft:function(_f){
+return _8(_3,_f);
+}});
+})(dojo);
+}
Index: trunk/web/dojo/dojox/jq.js
===================================================================
--- trunk/web/dojo/dojox/jq.js	(revision 0)
+++ trunk/web/dojo/dojox/jq.js	(revision 9)
@@ -0,0 +1,1296 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.jq"]){
+dojo._hasResource["dojox.jq"]=true;
+dojo.provide("dojox.jq");
+dojo.require("dojo.NodeList-traverse");
+dojo.require("dojo.NodeList-manipulate");
+dojo.require("dojo.io.script");
+(function(){
+dojo.config.ioPublish=true;
+var _1="|img|meta|hr|br|input|";
+function _2(_3,_4){
+_3+="";
+_3=_3.replace(/<\s*(\w+)([^\/\>]*)\/\s*>/g,function(_5,_6,_7){
+if(_1.indexOf("|"+_6+"|")==-1){
+return "<"+_6+_7+"></"+_6+">";
+}else{
+return _5;
+}
+});
+return dojo._toDom(_3,_4);
+};
+function _8(_9){
+var _a=_9.indexOf("-");
+if(_a!=-1){
+if(_a==0){
+_9=_9.substring(1);
+}
+_9=_9.replace(/-(\w)/g,function(_b,_c){
+return _c.toUpperCase();
+});
+}
+return _9;
+};
+var _d=dojo.global.$;
+var _e=dojo.global.jQuery;
+var $=dojo.global.$=dojo.global.jQuery=function(){
+var _f=arguments[0];
+if(!_f){
+return $._wrap([],null,$);
+}else{
+if(dojo.isString(_f)){
+if(_f.charAt(0)=="<"){
+_f=_2(_f);
+if(_f.nodeType==11){
+_f=_f.childNodes;
+}else{
+return $._wrap([_f],null,$);
+}
+}else{
+var _10=dojo._NodeListCtor;
+dojo._NodeListCtor=$;
+var _11=arguments[1];
+if(_11&&_11._is$){
+_11=_11[0];
+}else{
+if(dojo.isString(_11)){
+_11=dojo.query(_11)[0];
+}
+}
+var nl=dojo.query.call(this,_f,_11);
+dojo._NodeListCtor=_10;
+return nl;
+}
+}else{
+if(dojo.isFunction(_f)){
+$.ready(_f);
+return $;
+}else{
+if(_f==document||_f==window){
+return $._wrap([_f],null,$);
+}else{
+if(dojo.isArray(_f)){
+var ary=[];
+for(var i=0;i<_f.length;i++){
+if(dojo.indexOf(ary,_f[i])==-1){
+ary.push(_f[i]);
+}
+}
+return $._wrap(_f,null,$);
+}else{
+if("nodeType" in _f){
+return $._wrap([_f],null,$);
+}
+}
+}
+}
+}
+}
+return $._wrap(dojo._toArray(_f),null,$);
+};
+var _12=dojo.NodeList.prototype;
+var f=$.fn=$.prototype=dojo.delegate(_12);
+$._wrap=dojo.NodeList._wrap;
+var _13=/^H\d/i;
+var _14=dojo.query.pseudos;
+dojo.mixin(_14,{has:function(_15,_16){
+return function(_17){
+return $(_16,_17).length;
+};
+},visible:function(_18,_19){
+return function(_1a){
+return dojo.style(_1a,"visible")!="hidden"&&dojo.style(_1a,"display")!="none";
+};
+},hidden:function(_1b,_1c){
+return function(_1d){
+return _1d.type=="hidden"||dojo.style(_1d,"visible")=="hidden"||dojo.style(_1d,"display")=="none";
+};
+},selected:function(_1e,_1f){
+return function(_20){
+return _20.selected;
+};
+},checked:function(_21,_22){
+return function(_23){
+return _23.nodeName.toUpperCase()=="INPUT"&&_23.checked;
+};
+},disabled:function(_24,_25){
+return function(_26){
+return _26.getAttribute("disabled");
+};
+},enabled:function(_27,_28){
+return function(_29){
+return !_29.getAttribute("disabled");
+};
+},input:function(_2a,_2b){
+return function(_2c){
+var n=_2c.nodeName.toUpperCase();
+return n=="INPUT"||n=="SELECT"||n=="TEXTAREA"||n=="BUTTON";
+};
+},button:function(_2d,_2e){
+return function(_2f){
+return (_2f.nodeName.toUpperCase()=="INPUT"&&_2f.type=="button")||_2f.nodeName.toUpperCase()=="BUTTON";
+};
+},header:function(_30,_31){
+return function(_32){
+return _32.nodeName.match(_13);
+};
+}});
+var _33={};
+dojo.forEach(["text","password","radio","checkbox","submit","image","reset","file"],function(_34){
+_33[_34]=function(_35,_36){
+return function(_37){
+return _37.nodeName.toUpperCase()=="INPUT"&&_37.type==_34;
+};
+};
+});
+dojo.mixin(_14,_33);
+$.browser={mozilla:dojo.isMoz,msie:dojo.isIE,opera:dojo.isOpera,safari:dojo.isSafari};
+$.browser.version=dojo.isIE||dojo.isMoz||dojo.isOpera||dojo.isSafari||dojo.isWebKit;
+$.ready=$.fn.ready=function(_38){
+dojo.addOnLoad(dojo.hitch(null,_38,$));
+return this;
+};
+f._is$=true;
+f.size=function(){
+return this.length;
+};
+$.prop=function(_39,_3a){
+if(dojo.isFunction(_3a)){
+return _3a.call(_39);
+}else{
+return _3a;
+}
+};
+$.className={add:dojo.addClass,remove:dojo.removeClass,has:dojo.hasClass};
+$.makeArray=function(_3b){
+if(typeof _3b=="undefined"){
+return [];
+}else{
+if(_3b.length&&!dojo.isString(_3b)&&!("location" in _3b)){
+return dojo._toArray(_3b);
+}else{
+return [_3b];
+}
+}
+};
+$.merge=function(_3c,_3d){
+var _3e=[_3c.length,0];
+_3e=_3e.concat(_3d);
+_3c.splice.apply(_3c,_3e);
+return _3c;
+};
+$.each=function(_3f,cb){
+if(dojo.isArrayLike(_3f)){
+for(var i=0;i<_3f.length;i++){
+if(cb.call(_3f[i],i,_3f[i])===false){
+break;
+}
+}
+}else{
+if(dojo.isObject(_3f)){
+for(var _40 in _3f){
+if(cb.call(_3f[_40],_40,_3f[_40])===false){
+break;
+}
+}
+}
+}
+return this;
+};
+f.each=function(cb){
+return $.each.call(this,this,cb);
+};
+f.eq=function(){
+var nl=$();
+dojo.forEach(arguments,function(i){
+if(this[i]){
+nl.push(this[i]);
+}
+},this);
+return nl;
+};
+f.get=function(_41){
+if(_41||_41==0){
+return this[_41];
+}
+return this;
+};
+f.index=function(arg){
+if(arg._is$){
+arg=arg[0];
+}
+return this.indexOf(arg);
+};
+var _42=[];
+var _43=0;
+var _44=dojo._scopeName+"DataId";
+var _45=function(_46){
+var id=_46.getAttribute(_44);
+if(!id){
+id=_43++;
+_46.setAttribute(_44,id);
+}
+};
+var _47=function(_48){
+var _49={};
+if(_48.nodeType==1){
+var id=_45(_48);
+_49=_42[id];
+if(!_49){
+_49=_42[id]={};
+}
+}
+return _49;
+};
+$.data=function(_4a,_4b,_4c){
+var _4d=null;
+if(_4b=="events"){
+_4d=_4e[_4a.getAttribute(_4f)];
+var _50=true;
+if(_4d){
+for(var _51 in _4d){
+_50=false;
+break;
+}
+}
+return _50?null:_4d;
+}
+var _52=_47(_4a);
+if(typeof _4c!="undefined"){
+_52[_4b]=_4c;
+}else{
+_4d=_52[_4b];
+}
+return _4c?this:_4d;
+};
+$.removeData=function(_53,_54){
+var _55=_47(_53);
+delete _55[_54];
+if(_53.nodeType==1){
+var _56=true;
+for(var _57 in _55){
+_56=false;
+break;
+}
+if(_56){
+_53.removeAttribute(_44);
+}
+}
+return this;
+};
+f.data=function(_58,_59){
+var _5a=null;
+this.forEach(function(_5b){
+_5a=$.data(_5b,_58,_59);
+});
+return _59?this:_5a;
+};
+f.removeData=function(_5c){
+this.forEach(function(_5d){
+$.removeData(_5d,_5c);
+});
+return this;
+};
+function _5e(obj,_5f){
+if(obj==_5f){
+return obj;
+}
+var _60={};
+for(var x in _5f){
+if((_60[x]===undefined||_60[x]!=_5f[x])&&_5f[x]!==undefined&&obj!=_5f[x]){
+if(dojo.isObject(obj[x])&&dojo.isObject(_5f[x])){
+if(dojo.isArray(_5f[x])){
+obj[x]=_5f[x];
+}else{
+obj[x]=_5e(obj[x],_5f[x]);
+}
+}else{
+obj[x]=_5f[x];
+}
+}
+}
+if(dojo.isIE&&_5f){
+var p=_5f.toString;
+if(typeof p=="function"&&p!=obj.toString&&p!=_60.toString&&p!="\nfunction toString() {\n    [native code]\n}\n"){
+obj.toString=_5f.toString;
+}
+}
+return obj;
+};
+f.extend=function(){
+var _61=[this];
+_61=_61.concat(arguments);
+return $.extend.apply($,_61);
+};
+$.extend=function(){
+var _62=arguments,_63;
+for(var i=0;i<_62.length;i++){
+var obj=_62[i];
+if(obj&&dojo.isObject(obj)){
+if(!_63){
+_63=obj;
+}else{
+_5e(_63,obj);
+}
+}
+}
+return _63;
+};
+$.noConflict=function(_64){
+var me=$;
+dojo.global.$=_d;
+if(_64){
+dojo.global.jQuery=_e;
+}
+return me;
+};
+f.attr=function(_65,_66){
+if(arguments.length==1&&dojo.isString(arguments[0])){
+var _67=this[0];
+if(!_67){
+return null;
+}
+var arg=arguments[0];
+var _68=dojo.attr(_67,arg);
+var _69=_67[arg];
+if((arg in _67)&&!dojo.isObject(_69)&&_65!="href"){
+return _69;
+}else{
+return _68||_69;
+}
+}else{
+if(dojo.isObject(_65)){
+for(var _6a in _65){
+this.attr(_6a,_65[_6a]);
+}
+return this;
+}else{
+var _6b=dojo.isFunction(_66);
+this.forEach(function(_6c,_6d){
+var _6e=_6c[_65];
+if((_65 in _6c)&&!dojo.isObject(_6e)&&_65!="href"){
+_6c[_65]=(_6b?_66.call(_6c,_6d):_66);
+}else{
+if(_6c.nodeType==1){
+dojo.attr(_6c,_65,(_6b?_66.call(_6c,_6d):_66));
+}
+}
+});
+return this;
+}
+}
+};
+f.removeAttr=function(_6f){
+this.forEach(function(_70,_71){
+var _72=_70[_6f];
+if((_6f in _70)&&!dojo.isObject(_72)&&_6f!="href"){
+delete _70[_6f];
+}else{
+if(_70.nodeType==1){
+if(_6f=="class"){
+_70.removeAttribute(_6f);
+}else{
+dojo.removeAttr(_70,_6f);
+}
+}
+}
+});
+return this;
+};
+f.toggleClass=function(_73,_74){
+var _75=arguments.length>1;
+this.forEach(function(_76){
+dojo.toggleClass(_76,_73,_75?_74:!dojo.hasClass(_76,_73));
+});
+return this;
+};
+f.toggle=function(){
+var _77=arguments;
+if(arguments.length>1&&dojo.isFunction(arguments[0])){
+var _78=0;
+var _79=function(){
+var _7a=_77[_78].apply(this,arguments);
+_78+=1;
+if(_78>_77.length-1){
+_78=0;
+}
+};
+return this.bind("click",_79);
+}else{
+var _7b=arguments.length==1?arguments[0]:undefined;
+this.forEach(function(_7c){
+var _7d=typeof _7b=="undefined"?dojo.style(_7c,"display")=="none":_7b;
+var _7e=(_7d?"show":"hide");
+var nl=$(_7c);
+nl[_7e].apply(nl,_77);
+});
+return this;
+}
+};
+f.hasClass=function(_7f){
+return this.some(function(_80){
+return dojo.hasClass(_80,_7f);
+});
+};
+f.html=f.innerHTML;
+dojo.forEach(["filter","slice"],function(_81){
+f[_81]=function(){
+var nl;
+if(dojo.isFunction(arguments[0])){
+var _82=arguments[0];
+arguments[0]=function(_83,_84){
+return _82.call(_83,_83,_84);
+};
+}
+if(_81=="filter"&&dojo.isString(arguments[0])){
+var nl=this._filterQueryResult(this,arguments[0]);
+}else{
+var _85=dojo._NodeListCtor;
+dojo._NodeListCtor=f;
+nl=$(_12[_81].apply(this,arguments));
+dojo._NodeListCtor=_85;
+}
+return nl._stash(this);
+};
+});
+f.map=function(_86){
+return this._buildArrayFromCallback(_86);
+};
+$.map=function(ary,_87){
+return f._buildArrayFromCallback.call(ary,_87);
+};
+$.inArray=function(_88,ary){
+return dojo.indexOf(ary,_88);
+};
+f.is=function(_89){
+return (_89?!!this.filter(_89).length:false);
+};
+f.not=function(){
+var _8a=$.apply($,arguments);
+var nl=$(_12.filter.call(this,function(_8b){
+return _8a.indexOf(_8b)==-1;
+}));
+return nl._stash(this);
+};
+f.add=function(){
+return this.concat.apply(this,arguments);
+};
+function _8c(_8d){
+var doc=_8d.contentDocument||(((_8d.name)&&(_8d.document)&&(document.getElementsByTagName("iframe")[_8d.name].contentWindow)&&(document.getElementsByTagName("iframe")[_8d.name].contentWindow.document)))||((_8d.name)&&(document.frames[_8d.name])&&(document.frames[_8d.name].document))||null;
+return doc;
+};
+f.contents=function(){
+var ary=[];
+this.forEach(function(_8e){
+if(_8e.nodeName.toUpperCase()=="IFRAME"){
+var doc=_8c(_8e);
+if(doc){
+ary.push(doc);
+}
+}else{
+var _8f=_8e.childNodes;
+for(var i=0;i<_8f.length;i++){
+ary.push(_8f[i]);
+}
+}
+});
+return this._wrap(ary)._stash(this);
+};
+f.find=function(_90){
+var ary=[];
+this.forEach(function(_91){
+if(_91.nodeType==1){
+ary=ary.concat(dojo._toArray($(_90,_91)));
+}
+});
+return this._getUniqueAsNodeList(ary)._stash(this);
+};
+f.andSelf=function(){
+return this.add(this._parent);
+};
+f.remove=function(_92){
+var nl=(_92?this._filterQueryResult(this,_92):this);
+nl.removeData();
+nl.forEach(function(_93){
+_93.parentNode.removeChild(_93);
+});
+return this;
+};
+$.css=function(_94,_95,_96){
+_95=_8(_95);
+var _97=(_96?dojo.style(_94,_95,_96):dojo.style(_94,_95));
+return _97;
+};
+f.css=function(_98,_99){
+if(dojo.isString(_98)){
+_98=_8(_98);
+if(arguments.length==2){
+if(!dojo.isString(_99)&&_98!="zIndex"){
+_99=_99+"px";
+}
+this.forEach(function(_9a){
+if(_9a.nodeType==1){
+dojo.style(_9a,_98,_99);
+}
+});
+return this;
+}else{
+_99=dojo.style(this[0],_98);
+if(!dojo.isString(_99)&&_98!="zIndex"){
+_99=_99+"px";
+}
+return _99;
+}
+}else{
+for(var _9b in _98){
+this.css(_9b,_98[_9b]);
+}
+return this;
+}
+};
+function _9c(nl,_9d,_9e,_9f){
+if(_9f){
+var mod={};
+mod[_9e]=_9f;
+nl.forEach(function(_a0){
+dojo[_9d](_a0,mod);
+});
+return nl;
+}else{
+return Math.abs(Math.round(dojo[_9d](nl[0])[_9e]));
+}
+};
+f.height=function(_a1){
+return _9c(this,"contentBox","h",_a1);
+};
+f.width=function(_a2){
+return _9c(this,"contentBox","w",_a2);
+};
+function _a3(_a4,_a5,_a6,_a7,_a8){
+var _a9=false;
+if((_a9=_a4.style.display=="none")){
+_a4.style.display="block";
+}
+var cs=dojo.getComputedStyle(_a4);
+var _aa=Math.abs(Math.round(dojo._getContentBox(_a4,cs)[_a5]));
+var pad=_a6?Math.abs(Math.round(dojo._getPadExtents(_a4,cs)[_a5])):0;
+var _ab=_a7?Math.abs(Math.round(dojo._getBorderExtents(_a4,cs)[_a5])):0;
+var _ac=_a8?Math.abs(Math.round(dojo._getMarginExtents(_a4,cs)[_a5])):0;
+if(_a9){
+_a4.style.display="none";
+}
+return pad+_aa+_ab+_ac;
+};
+f.innerHeight=function(){
+return _a3(this[0],"h",true);
+};
+f.innerWidth=function(){
+return _a3(this[0],"w",true);
+};
+f.outerHeight=function(_ad){
+return _a3(this[0],"h",true,true,_ad);
+};
+f.outerWidth=function(_ae){
+return _a3(this[0],"w",true,true,_ae);
+};
+var _4e=[];
+var _af=1;
+var _4f=dojo._scopeName+"eventid";
+var _b0;
+function _b1(_b2){
+_b2=_b2.split("$$")[0];
+var _b3=_b2.indexOf(".");
+if(_b3!=-1){
+_b2=_b2.substring(0,_b3);
+}
+return _b2;
+};
+function _b4(_b5,_b6){
+if(_b6.indexOf("ajax")==0){
+return dojo.subscribe(_b7[_b6],function(dfd,res){
+var _b8=new $.Event(_b6);
+if("ajaxComplete|ajaxSend|ajaxSuccess".indexOf(_b6)!=-1){
+_b9(_b5,[_b8,dfd.ioArgs.xhr,dfd.ioArgs.args]);
+}else{
+if(_b6=="ajaxError"){
+_b9(_b5,[_b8,dfd.ioArgs.xhr,dfd.ioArgs.args,res]);
+}else{
+_b9(_b5,[_b8]);
+}
+}
+});
+}else{
+return dojo.connect(_b5,"on"+_b6,function(e){
+_b9(_b5,arguments);
+});
+}
+};
+$.Event=function(_ba){
+if(this==$){
+return new $.Event(_ba);
+}
+if(typeof _ba=="string"){
+this.type=_ba.replace(/!/,"");
+}else{
+dojo.mixin(this,_ba);
+}
+this.timeStamp=(new Date()).getTime();
+this._isFake=true;
+this._isStrict=(this.type.indexOf("!")!=-1);
+};
+var ep=$.Event.prototype={preventDefault:function(){
+this.isDefaultPrevented=this._true;
+},stopPropagation:function(){
+this.isPropagationStopped=this._true;
+},stopImmediatePropagation:function(){
+this.isPropagationStopped=this._true;
+this.isImmediatePropagationStopped=this._true;
+},_true:function(){
+return true;
+},_false:function(){
+return false;
+}};
+dojo.mixin(ep,{isPropagationStopped:ep._false,isImmediatePropagationStopped:ep._false,isDefaultPrevented:ep._false});
+function _bb(_bc,_bd){
+_bc=_bc||[];
+_bc=[].concat(_bc);
+var evt=_bc[0];
+if(!evt||!evt.preventDefault){
+evt=_bd&&_bd.preventDefault?_bd:new $.Event(_bd);
+_bc.unshift(evt);
+}
+return _bc;
+};
+var _be=false;
+function _b9(_bf,_c0,_c1){
+_be=true;
+_c0=_c0||_b0;
+_c1=_c1;
+if(_bf.nodeType==9){
+_bf=_bf.documentElement;
+}
+var _c2=_bf.getAttribute(_4f);
+if(!_c2){
+return;
+}
+var evt=_c0[0];
+var _c3=evt.type;
+var _c4=_b1(_c3);
+var cbs=_4e[_c2][_c4];
+var _c5;
+if(_c1){
+_c5=_c1.apply(_bf,_c0);
+}
+if(_c5!==false){
+for(var _c6 in cbs){
+if(_c6!="_connectId"&&(!evt._isStrict&&(_c6.indexOf(_c3)==0)||(evt._isStrict&&_c6==_c3))){
+evt[dojo._scopeName+"callbackId"]=_c6;
+var cb=cbs[_c6];
+if(typeof cb.data!="undefined"){
+evt.data=cb.data;
+}else{
+evt.data=null;
+}
+if((_c5=cb.fn.apply(evt.target,_c0))===false&&!evt._isFake){
+dojo.stopEvent(evt);
+}
+evt.result=_c5;
+}
+}
+}
+return _c5;
+};
+f.triggerHandler=function(_c7,_c8,_c9){
+var _ca=this[0];
+if(_ca&&_ca.nodeType!=3&&_ca.nodeType!=8){
+_c8=_bb(_c8,_c7);
+return _b9(_ca,_c8,_c9);
+}else{
+return undefined;
+}
+};
+f.trigger=function(_cb,_cc,_cd){
+_cc=_bb(_cc,_cb);
+var evt=_cc[0];
+var _cb=_b1(evt.type);
+_b0=_cc;
+currentExtraFunc=_cd;
+var _ce=null;
+var _cf=!evt.target;
+this.forEach(function(_d0){
+if(_d0.nodeType!=3&&_d0.nodeType!=8){
+if(_d0.nodeType==9){
+_d0=_d0.documentElement;
+}
+if(evt._isFake){
+evt.currentTarget=_d0;
+if(_cf){
+evt.target=_d0;
+}
+}
+if(_cd){
+var _d1=_cc.slice(1);
+_ce=_cd.apply(_d0,(_ce=null?_d1:_d1.concat(_ce)));
+}
+if(_ce!==false){
+_be=false;
+if(_d0[_cb]){
+try{
+_ce=_d0[_cb]();
+}
+catch(e){
+}
+}else{
+if(_d0["on"+_cb]){
+try{
+_ce=_d0["on"+_cb]();
+}
+catch(e){
+}
+}
+}
+if(!_be){
+_ce=_b9(_d0,_cc);
+}
+var _d2=_d0.parentNode;
+if(_ce!==false&&!evt.isImmediatePropagationStopped()&&!evt.isPropagationStopped()&&_d2&&_d2.nodeType==1){
+$(_d2).trigger(_cb,_cc,_cd);
+}
+}
+}
+});
+_b0=null;
+currentExtraFunc=null;
+return this;
+};
+var _d3=0;
+f.bind=function(_d4,_d5,fn){
+_d4=_d4.split(" ");
+if(!fn){
+fn=_d5;
+_d5=null;
+}
+this.forEach(function(_d6){
+if(_d6.nodeType!=3&&_d6.nodeType!=8){
+if(_d6.nodeType==9){
+_d6=_d6.documentElement;
+}
+var _d7=_d6.getAttribute(_4f);
+if(!_d7){
+_d7=_af++;
+_d6.setAttribute(_4f,_d7);
+_4e[_d7]={};
+}
+for(var i=0;i<_d4.length;i++){
+var _d8=_d4[i];
+var _d9=_b1(_d8);
+if(_d9==_d8){
+_d8=_d9+"$$"+(_d3++);
+}
+var lls=_4e[_d7];
+if(!lls[_d9]){
+lls[_d9]={_connectId:_b4(_d6,_d9)};
+}
+lls[_d9][_d8]={fn:fn,data:_d5};
+}
+}
+});
+return this;
+};
+function _da(src,_db){
+var _dc=_db.getAttribute(_4f);
+var sls=_4e[_dc];
+if(!sls){
+return;
+}
+var _dd=_dd=_af++;
+_db.setAttribute(_4f,_dd);
+var tls=_4e[_dd]={};
+var _de={};
+for(var _df in sls){
+var _e0=tls[_df]={_connectId:_b4(_db,_df)};
+var _e1=sls[_df];
+for(var _e2 in _e1){
+_e0[_e2]={fn:_e1[_e2].fn,data:_e1[_e2].data};
+}
+}
+};
+function _e3(lls,_e4,_e5,_e6,fn){
+var _e7=lls[_e4];
+if(_e7){
+var _e8=_e5.indexOf(".")!=-1;
+var _e9=false;
+if(_e6){
+delete _e7[_e6];
+}else{
+if(!_e8&&!fn){
+_e9=true;
+}else{
+if(_e8){
+if(_e5.charAt(0)=="."){
+for(var _ea in _e7){
+if(_ea.indexOf(_e5)==_ea.length-_e5.length){
+delete _e7[_ea];
+}
+}
+}else{
+delete _e7[_e5];
+}
+}else{
+for(var _ea in _e7){
+if(_ea.indexOf("$$")!=-1&&_e7[_ea].fn==fn){
+delete _e7[_ea];
+break;
+}
+}
+}
+}
+}
+var _eb=true;
+for(var _ea in _e7){
+if(_ea!="_connectId"){
+_eb=false;
+break;
+}
+}
+if(_e9||_eb){
+if(_e4.indexOf("ajax")!=-1){
+dojo.unsubscribe(_e7._connectId);
+}else{
+dojo.disconnect(_e7._connectId);
+}
+delete lls[_e4];
+}
+}
+};
+f.unbind=function(_ec,fn){
+var _ed=_ec?_ec[dojo._scopeName+"callbackId"]:null;
+_ec=_ec&&_ec.type?_ec.type:_ec;
+_ec=_ec?_ec.split(" "):_ec;
+this.forEach(function(_ee){
+if(_ee.nodeType!=3&&_ee.nodeType!=8){
+if(_ee.nodeType==9){
+_ee=_ee.documentElement;
+}
+var _ef=_ee.getAttribute(_4f);
+if(_ef){
+var lls=_4e[_ef];
+if(lls){
+var _f0=_ec;
+if(!_f0){
+_f0=[];
+for(var _f1 in lls){
+_f0.push(_f1);
+}
+}
+for(var i=0;i<_f0.length;i++){
+var _f2=_f0[i];
+var _f3=_b1(_f2);
+if(_f2.charAt(0)=="."){
+for(var _f1 in lls){
+_e3(lls,_f1,_f2,_ed,fn);
+}
+}else{
+_e3(lls,_f3,_f2,_ed,fn);
+}
+}
+}
+}
+}
+});
+return this;
+};
+f.one=function(_f4,_f5){
+var _f6=function(){
+$(this).unbind(_f4,arguments.callee);
+return _f5.apply(this,arguments);
+};
+return this.bind(_f4,_f6);
+};
+f._cloneNode=function(src){
+var _f7=src.cloneNode(true);
+if(src.nodeType==1){
+var _f8=dojo.query("["+_4f+"]",_f7);
+for(var i=0,_f9;_f9=_f8[i];i++){
+var _fa=dojo.query("["+_4f+"=\""+_f9.getAttribute(_4f)+"\"]",src)[0];
+if(_fa){
+_da(_fa,_f9);
+}
+}
+}
+return _f7;
+};
+dojo.getObject("$.event.global",true);
+dojo.forEach(["blur","focus","dblclick","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit","ajaxStart","ajaxSend","ajaxSuccess","ajaxError","ajaxComplete","ajaxStop"],function(evt){
+f[evt]=function(_fb){
+if(_fb){
+this.bind(evt,_fb);
+}else{
+this.trigger(evt);
+}
+return this;
+};
+});
+function _fc(_fd){
+if(dojo.isString(_fd)){
+if(_fd=="slow"){
+_fd=700;
+}else{
+if(_fd="fast"){
+_fd=300;
+}else{
+_fd=500;
+}
+}
+}
+return _fd;
+};
+f.hide=function(_fe,_ff){
+_fe=_fc(_fe);
+this.forEach(function(node){
+var _100=node.style;
+var cs=dojo.getComputedStyle(node);
+if(cs.display=="none"){
+return;
+}
+_100.overflow="hidden";
+_100.display="block";
+if(_fe){
+dojo.anim(node,{width:0,height:0,opacity:0},_fe,null,function(){
+_100.width="";
+_100.height="";
+_100.display="none";
+return _ff&&_ff.call(node);
+});
+}else{
+dojo.style(node,"display","none");
+if(_ff){
+_ff.call(node);
+}
+}
+});
+return this;
+};
+f.show=function(_101,_102){
+_101=_fc(_101);
+this.forEach(function(node){
+var _103=node.style;
+var cs=dojo.getComputedStyle(node);
+if(cs.display!="none"){
+return;
+}
+if(_101){
+var _104=parseFloat(_103.width);
+var _105=parseFloat(_103.height);
+if(!_104||!_105){
+_103.display="block";
+var box=dojo.marginBox(node);
+_104=box.w;
+_105=box.h;
+}
+_103.width=0;
+_103.height=0;
+_103.overflow="hidden";
+dojo.attr(node,"opacity",0);
+_103.display="block";
+dojo.anim(node,{width:_104,height:_105,opacity:1},_101,null,_102?dojo.hitch(node,_102):undefined);
+}else{
+dojo.style(node,"display","block");
+if(_102){
+_102.call(node);
+}
+}
+});
+return this;
+};
+$.ajaxSettings={};
+$.ajaxSetup=function(args){
+dojo.mixin($.ajaxSettings,args);
+};
+var _b7={"ajaxStart":"/dojo/io/start","ajaxSend":"/dojo/io/send","ajaxSuccess":"/dojo/io/load","ajaxError":"/dojo/io/error","ajaxComplete":"/dojo/io/done","ajaxStop":"/dojo/io/stop"};
+for(var _106 in _b7){
+if(_106.indexOf("ajax")==0){
+(function(_107){
+f[_107]=function(_108){
+this.forEach(function(node){
+dojo.subscribe(_b7[_107],function(){
+var _109=new $.Event(_107);
+var _10a=arguments[0]&&arguments[0].ioArgs;
+var xhr=_10a&&_10a.xhr;
+var args=_10a&&_10a.args;
+var res=arguments[1];
+if("ajaxComplete|ajaxSend|ajaxSuccess".indexOf(_107)!=-1){
+return _108.call(node,_109,xhr,args);
+}else{
+if(_107=="ajaxError"){
+return _108.call(node,_109,xhr,args,res);
+}else{
+return _108.call(node,_109);
+}
+}
+});
+});
+return this;
+};
+})(_106);
+}
+}
+var _10b=dojo._xhrObj;
+dojo._xhrObj=function(args){
+var xhr=_10b.apply(dojo,arguments);
+if(args&&args.beforeSend){
+if(args.beforeSend(xhr)===false){
+return false;
+}
+}
+return xhr;
+};
+$.ajax=function(args){
+var temp=dojo.delegate($.ajaxSettings);
+for(var _10c in args){
+if(_10c=="data"&&dojo.isObject(args[_10c])&&dojo.isObject(temp.data)){
+for(var prop in args[_10c]){
+temp.data[prop]=args[_10c][prop];
+}
+}else{
+temp[_10c]=args[_10c];
+}
+}
+args=temp;
+var url=args.url;
+if("async" in args){
+args.sync=!args.async;
+}
+if(args.global===false){
+args.ioPublish=false;
+}
+if(args.data){
+var data=args.data;
+if(dojo.isString(data)){
+args.content=dojo.queryToObject(data);
+}else{
+for(var _10c in data){
+if(dojo.isFunction(data[_10c])){
+data[_10c]=data[_10c]();
+}
+}
+args.content=data;
+}
+}
+var _10d=args.dataType;
+if("dataType" in args){
+if(_10d=="script"){
+_10d="javascript";
+}else{
+if(_10d=="html"){
+_10d="text";
+}
+}
+args.handleAs=_10d;
+}else{
+_10d=args.handleAs="text";
+args.guessedType=true;
+}
+if("cache" in args){
+args.preventCache=!args.cache;
+}else{
+if(args.dataType=="script"||args.dataType=="jsonp"){
+args.preventCache=true;
+}
+}
+if(args.error){
+args._jqueryError=args.error;
+delete args.error;
+}
+args.handle=function(_10e,_10f){
+var _110="success";
+if(_10e instanceof Error){
+_110=(_10e.dojoType=="timeout"?"timeout":"error");
+if(args._jqueryError){
+args._jqueryError(_10f.xhr,_110,_10e);
+}
+}else{
+var xml=(_10f.args.guessedType&&_10f.xhr&&_10f.xhr.responseXML);
+if(xml){
+_10e=xml;
+}
+if(args.success){
+args.success(_10e,_110,_10f.xhr);
+}
+}
+if(args.complete){
+args.complete(_10e,_110,_10f.xhr);
+}
+return _10e;
+};
+var _111=(_10d=="jsonp");
+if(_10d=="javascript"){
+var _112=url.indexOf(":");
+var _113=url.indexOf("/");
+if(_112>0&&_112<_113){
+var _114=url.indexOf("/",_113+2);
+if(_114==-1){
+_114=url.length;
+}
+if(location.protocol!=url.substring(0,_112+1)||location.hostname!=url.substring(_113+2,_114)){
+_111=true;
+}
+}
+}
+if(_111){
+if(_10d=="jsonp"){
+var cb=args.jsonp;
+if(!cb){
+var _115=args.url.split("?")[1];
+if(_115&&(_115=dojo.queryToObject(_115))){
+cb=_116(_115);
+if(cb){
+var _117=new RegExp("([&\\?])?"+cb+"=?");
+args.url=args.url.replace(_117+"=?");
+}
+}
+if(!cb){
+cb=_116(args.content);
+if(cb){
+delete args.content[cb];
+}
+}
+}
+args.jsonp=cb||"callback";
+}
+var dfd=dojo.io.script.get(args);
+return dfd;
+}else{
+var dfd=dojo.xhr(args.type||"GET",args);
+return dfd.ioArgs.xhr===false?false:dfd.ioArgs.xhr;
+}
+};
+function _116(obj){
+for(var prop in obj){
+if(prop.indexOf("callback")==prop.length-8){
+return prop;
+}
+}
+return null;
+};
+$.getpost=function(_118,url,data,_119,_11a){
+var args={url:url,type:_118};
+if(data){
+if(dojo.isFunction(data)&&!_119){
+args.complete=data;
+}else{
+args.data=data;
+}
+}
+if(_119){
+if(dojo.isString(_119)&&!_11a){
+_11a=_119;
+}else{
+args.complete=_119;
+}
+}
+if(_11a){
+args.dataType=_11a;
+}
+return $.ajax(args);
+};
+$.get=dojo.hitch($,"getpost","GET");
+$.post=dojo.hitch($,"getpost","POST");
+$.getJSON=function(url,data,_11b){
+return $.getpost("GET",url,data,_11b,"json");
+};
+$.getScript=function(url,_11c){
+return $.ajax({url:url,success:_11c,dataType:"script"});
+};
+f.load=function(url,data,_11d){
+var node=this[0];
+if(!node||!node.nodeType||node.nodeType==9){
+dojo.addOnLoad(url);
+return this;
+}
+var _11e=url.split(/\s+/);
+url=_11e[0];
+var _11f=_11e[1];
+var _120=_11d||data;
+var cb=dojo.hitch(this,function(_121,_122,xhr){
+var _123=_121.match(/\<\s*body[^>]+>.*<\/body\s*>/i);
+if(_123){
+_121=_123;
+}
+var _124=dojo._toDom(_121);
+if(_11f){
+var temp=$(dojo.create("div"));
+temp.append(_124);
+_124=temp.find(_11f);
+}else{
+_124=$(_124.nodeType==11?_124.childNodes:_124);
+}
+this.html(_124);
+if(_120){
+setTimeout(dojo.hitch(this,function(){
+this.forEach(function(node){
+_120.call(node,_121,_122,xhr);
+});
+}),10);
+}
+});
+if(!_11d){
+data=cb;
+}else{
+_11d=cb;
+}
+var _125="GET";
+if(data&&dojo.isObject(data)){
+_125="POST";
+}
+$.getpost(_125,url,data,_11d,"html");
+return this;
+};
+var _126="file|submit|image|reset|button|";
+f.serialize=function(){
+var ret="";
+var strs=this.map(function(node){
+if(node.nodeName.toUpperCase()=="FORM"){
+return dojo.formToQuery(node);
+}else{
+var type=(node.type||"").toLowerCase();
+if(_126.indexOf(type)==-1){
+var val=dojo.fieldToObject(node);
+if(node.name&&val!=null){
+var q={};
+q[node.name]=val;
+return dojo.objectToQuery(q);
+}
+}
+}
+});
+return ret+strs.join("&");
+};
+$.param=function(obj){
+if(obj._is$&&obj.serialize){
+return obj.serialize();
+}else{
+if(dojo.isArray(obj)){
+return dojo.map(obj,function(item){
+return $.param(item);
+}).join("&");
+}else{
+return dojo.objectToQuery(obj);
+}
+}
+};
+$.isFunction=function(){
+var _127=dojo.isFunction.apply(dojo,arguments);
+if(_127){
+_127=(typeof (arguments[0])!="object");
+}
+return _127;
+};
+})();
+}
Index: trunk/web/dojo/dojox/gfx3d.js
===================================================================
--- trunk/web/dojo/dojox/gfx3d.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx3d.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx3d"]){
+dojo._hasResource["dojox.gfx3d"]=true;
+dojo.provide("dojox.gfx3d");
+dojo.require("dojox.gfx3d.matrix");
+dojo.require("dojox.gfx3d._base");
+dojo.require("dojox.gfx3d.object");
+}
Index: trunk/web/dojo/dojox/math/README
===================================================================
--- trunk/web/dojo/dojox/math/README	(revision 0)
+++ trunk/web/dojo/dojox/math/README	(revision 9)
@@ -0,0 +1,40 @@
+-------------------------------------------------------------------------------
+DojoX Math
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 10/20/2007
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Cal Henderson
+	Dan Pupius
+	Tom Trenka (ttrenka AT gmail.com)
+	Eugene Lazutkin (eugene.lazutkin AT gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+A port of the main functionality of dojo.math 0.4.  Includes advanced math
+functions, abstract curve definitions, and some point calculations.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Depends on the Dojo Core, v1.0
+-------------------------------------------------------------------------------
+Documentation
+
+See the API documentation.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojox/trunk/math.js
+http://svn.dojotoolkit.org/src/dojox/trunk/math/*
+
+Install into the following directory structure:
+/dojox/math/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/math/matrix.js
===================================================================
--- trunk/web/dojo/dojox/math/matrix.js	(revision 0)
+++ trunk/web/dojo/dojox/math/matrix.js	(revision 9)
@@ -0,0 +1,251 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.matrix"]){
+dojo._hasResource["dojox.math.matrix"]=true;
+dojo.provide("dojox.math.matrix");
+dojo.mixin(dojox.math.matrix,{iDF:0,ALMOST_ZERO:1e-10,multiply:function(a,b){
+var ay=a.length,ax=a[0].length,by=b.length,bx=b[0].length;
+if(ax!=by){
+console.warn("Can't multiply matricies of sizes "+ax+","+ay+" and "+bx+","+by);
+return [[0]];
+}
+var c=[];
+for(var k=0;k<ay;k++){
+c[k]=[];
+for(var i=0;i<bx;i++){
+c[k][i]=0;
+for(var m=0;m<ax;m++){
+c[k][i]+=a[k][m]*b[m][i];
+}
+}
+}
+return c;
+},product:function(){
+if(arguments.length==0){
+console.warn("can't multiply 0 matrices!");
+return 1;
+}
+var m=arguments[0];
+for(var i=1;i<arguments.length;i++){
+m=this.multiply(m,arguments[i]);
+}
+return m;
+},sum:function(){
+if(arguments.length==0){
+console.warn("can't sum 0 matrices!");
+return 0;
+}
+var m=this.copy(arguments[0]);
+var _1=m.length;
+if(_1==0){
+console.warn("can't deal with matrices of 0 rows!");
+return 0;
+}
+var _2=m[0].length;
+if(_2==0){
+console.warn("can't deal with matrices of 0 cols!");
+return 0;
+}
+for(var i=1;i<arguments.length;++i){
+var _3=arguments[i];
+if(_3.length!=_1||_3[0].length!=_2){
+console.warn("can't add matrices of different dimensions: first dimensions were "+_1+"x"+_2+", current dimensions are "+_3.length+"x"+_3[0].length);
+return 0;
+}
+for(var r=0;r<_1;r++){
+for(var c=0;c<_2;c++){
+m[r][c]+=_3[r][c];
+}
+}
+}
+return m;
+},inverse:function(a){
+if(a.length==1&&a[0].length==1){
+return [[1/a[0][0]]];
+}
+var _4=a.length,m=this.create(_4,_4),mm=this.adjoint(a),_5=this.determinant(a),dd=0;
+if(_5==0){
+console.warn("Determinant Equals 0, Not Invertible.");
+return [[0]];
+}else{
+dd=1/_5;
+}
+for(var i=0;i<_4;i++){
+for(var j=0;j<_4;j++){
+m[i][j]=dd*mm[i][j];
+}
+}
+return m;
+},determinant:function(a){
+if(a.length!=a[0].length){
+console.warn("Can't calculate the determinant of a non-squre matrix!");
+return 0;
+}
+var _6=a.length,_7=1,b=this.upperTriangle(a);
+for(var i=0;i<_6;i++){
+var _8=b[i][i];
+if(Math.abs(_8)<this.ALMOST_ZERO){
+return 0;
+}
+_7*=_8;
+}
+_7*=this.iDF;
+return _7;
+},upperTriangle:function(m){
+m=this.copy(m);
+var f1=0,_9=0,_a=m.length,v=1;
+this.iDF=1;
+for(var _b=0;_b<_a-1;_b++){
+if(typeof m[_b][_b]!="number"){
+console.warn("non-numeric entry found in a numeric matrix: m["+_b+"]["+_b+"]="+m[_b][_b]);
+}
+v=1;
+var _c=0;
+while((m[_b][_b]==0)&&!_c){
+if(_b+v>=_a){
+this.iDF=0;
+_c=1;
+}else{
+for(var r=0;r<_a;r++){
+_9=m[_b][r];
+m[_b][r]=m[_b+v][r];
+m[_b+v][r]=_9;
+}
+v++;
+this.iDF*=-1;
+}
+}
+for(var _d=_b+1;_d<_a;_d++){
+if(typeof m[_d][_b]!="number"){
+console.warn("non-numeric entry found in a numeric matrix: m["+_d+"]["+_b+"]="+m[_d][_b]);
+}
+if(typeof m[_b][_d]!="number"){
+console.warn("non-numeric entry found in a numeric matrix: m["+_b+"]["+_d+"]="+m[_b][_d]);
+}
+if(m[_b][_b]!=0){
+var f1=(-1)*m[_d][_b]/m[_b][_b];
+for(var i=_b;i<_a;i++){
+m[_d][i]=f1*m[_b][i]+m[_d][i];
+}
+}
+}
+}
+return m;
+},create:function(a,b,_e){
+_e=_e||0;
+var m=[];
+for(var i=0;i<b;i++){
+m[i]=[];
+for(var j=0;j<a;j++){
+m[i][j]=_e;
+}
+}
+return m;
+},ones:function(a,b){
+return this.create(a,b,1);
+},zeros:function(a,b){
+return this.create(a,b);
+},identity:function(_f,_10){
+_10=_10||1;
+var m=[];
+for(var i=0;i<_f;i++){
+m[i]=[];
+for(var j=0;j<_f;j++){
+m[i][j]=(i==j?_10:0);
+}
+}
+return m;
+},adjoint:function(a){
+var tms=a.length;
+if(tms<=1){
+console.warn("Can't find the adjoint of a matrix with a dimension less than 2");
+return [[0]];
+}
+if(a.length!=a[0].length){
+console.warn("Can't find the adjoint of a non-square matrix");
+return [[0]];
+}
+var m=this.create(tms,tms),ap=this.create(tms-1,tms-1);
+var ii=0,jj=0,ia=0,ja=0,det=0;
+for(var i=0;i<tms;i++){
+for(var j=0;j<tms;j++){
+ia=0;
+for(ii=0;ii<tms;ii++){
+if(ii==i){
+continue;
+}
+ja=0;
+for(jj=0;jj<tms;jj++){
+if(jj==j){
+continue;
+}
+ap[ia][ja]=a[ii][jj];
+ja++;
+}
+ia++;
+}
+det=this.determinant(ap);
+m[i][j]=Math.pow(-1,(i+j))*det;
+}
+}
+return this.transpose(m);
+},transpose:function(a){
+var m=this.create(a.length,a[0].length);
+for(var i=0;i<a.length;i++){
+for(var j=0;j<a[i].length;j++){
+m[j][i]=a[i][j];
+}
+}
+return m;
+},format:function(a,_11){
+_11=_11||5;
+function _12(x,dp){
+var fac=Math.pow(10,dp);
+var a=Math.round(x*fac)/fac;
+var b=a.toString();
+if(b.charAt(0)!="-"){
+b=" "+b;
+}
+if(b.indexOf(".")>-1){
+b+=".";
+}
+while(b.length<dp+3){
+b+="0";
+}
+return b;
+};
+var ya=a.length;
+var xa=ya>0?a[0].length:0;
+var _13="";
+for(var y=0;y<ya;y++){
+_13+="| ";
+for(var x=0;x<xa;x++){
+_13+=_12(a[y][x],_11)+" ";
+}
+_13+="|\n";
+}
+return _13;
+},copy:function(a){
+var ya=a.length,xa=a[0].length,m=this.create(xa,ya);
+for(var y=0;y<ya;y++){
+for(var x=0;x<xa;x++){
+m[y][x]=a[y][x];
+}
+}
+return m;
+},scale:function(a,_14){
+a=this.copy(a);
+var ya=a.length,xa=a[0].length;
+for(var y=0;y<ya;y++){
+for(var x=0;x<xa;x++){
+a[y][x]*=_14;
+}
+}
+return a;
+}});
+}
Index: trunk/web/dojo/dojox/math/random/prng4.js
===================================================================
--- trunk/web/dojo/dojox/math/random/prng4.js	(revision 0)
+++ trunk/web/dojo/dojox/math/random/prng4.js	(revision 9)
@@ -0,0 +1,45 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.random.prng4"]){
+dojo._hasResource["dojox.math.random.prng4"]=true;
+dojo.provide("dojox.math.random.prng4");
+(function(){
+function _1(){
+this.i=0;
+this.j=0;
+this.S=new Array(256);
+};
+dojo.extend(_1,{init:function(_2){
+var i,j,t,S=this.S,_3=_2.length;
+for(i=0;i<256;++i){
+S[i]=i;
+}
+j=0;
+for(i=0;i<256;++i){
+j=(j+S[i]+_2[i%_3])&255;
+t=S[i];
+S[i]=S[j];
+S[j]=t;
+}
+this.i=0;
+this.j=0;
+},next:function(){
+var t,i,j,S=this.S;
+this.i=i=(this.i+1)&255;
+this.j=j=(this.j+S[i])&255;
+t=S[i];
+S[i]=S[j];
+S[j]=t;
+return S[(t+S[i])&255];
+}});
+dojox.math.random.prng4=function(){
+return new _1();
+};
+dojox.math.random.prng4.size=256;
+})();
+}
Index: trunk/web/dojo/dojox/math/random/Secure.js
===================================================================
--- trunk/web/dojo/dojox/math/random/Secure.js	(revision 0)
+++ trunk/web/dojo/dojox/math/random/Secure.js	(revision 9)
@@ -0,0 +1,54 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.random.Secure"]){
+dojo._hasResource["dojox.math.random.Secure"]=true;
+dojo.provide("dojox.math.random.Secure");
+dojo.declare("dojox.math.random.Secure",null,{constructor:function(_1,_2){
+this.prng=_1;
+var p=this.pool=new Array(_1.size);
+this.pptr=0;
+for(var i=0,_3=_1.size;i<_3;){
+var t=Math.floor(65536*Math.random());
+p[i++]=t>>>8;
+p[i++]=t&255;
+}
+this.seedTime();
+if(!_2){
+this.h=[dojo.connect(dojo.body(),"onclick",this,"seedTime"),dojo.connect(dojo.body(),"onkeypress",this,"seedTime")];
+}
+},destroy:function(){
+if(this.h){
+dojo.forEach(this.h,dojo.disconnect);
+}
+},nextBytes:function(_4){
+var _5=this.state;
+if(!_5){
+this.seedTime();
+_5=this.state=this.prng();
+_5.init(this.pool);
+for(var p=this.pool,i=0,_6=p.length;i<_6;p[i++]=0){
+}
+this.pptr=0;
+}
+for(var i=0,_6=_4.length;i<_6;++i){
+_4[i]=_5.next();
+}
+},seedTime:function(){
+this._seed_int(new Date().getTime());
+},_seed_int:function(x){
+var p=this.pool,i=this.pptr;
+p[i++]^=x&255;
+p[i++]^=(x>>8)&255;
+p[i++]^=(x>>16)&255;
+p[i++]^=(x>>24)&255;
+if(i>=this.prng.size){
+i-=this.prng.size;
+}
+this.pptr=i;
+}});
+}
Index: trunk/web/dojo/dojox/math/random/Simple.js
===================================================================
--- trunk/web/dojo/dojox/math/random/Simple.js	(revision 0)
+++ trunk/web/dojo/dojox/math/random/Simple.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.random.Simple"]){
+dojo._hasResource["dojox.math.random.Simple"]=true;
+dojo.provide("dojox.math.random.Simple");
+dojo.declare("dojox.math.random.Simple",null,{destroy:function(){
+},nextBytes:function(_1){
+for(var i=0,l=_1.length;i<l;++i){
+_1[i]=Math.floor(256*Math.random());
+}
+}});
+}
Index: trunk/web/dojo/dojox/math/curves.js
===================================================================
--- trunk/web/dojo/dojox/math/curves.js	(revision 0)
+++ trunk/web/dojo/dojox/math/curves.js	(revision 9)
@@ -0,0 +1,194 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.curves"]){
+dojo._hasResource["dojox.math.curves"]=true;
+dojo.provide("dojox.math.curves");
+dojo.mixin(dojox.math.curves,{Line:function(_1,_2){
+this.start=_1;
+this.end=_2;
+this.dimensions=_1.length;
+for(var i=0;i<_1.length;i++){
+_1[i]=Number(_1[i]);
+}
+for(var i=0;i<_2.length;i++){
+_2[i]=Number(_2[i]);
+}
+this.getValue=function(n){
+var _3=new Array(this.dimensions);
+for(var i=0;i<this.dimensions;i++){
+_3[i]=((this.end[i]-this.start[i])*n)+this.start[i];
+}
+return _3;
+};
+return this;
+},Bezier:function(_4){
+this.getValue=function(_5){
+if(_5>=1){
+return this.p[this.p.length-1];
+}
+if(_5<=0){
+return this.p[0];
+}
+var _6=new Array(this.p[0].length);
+for(var k=0;j<this.p[0].length;k++){
+_6[k]=0;
+}
+for(var j=0;j<this.p[0].length;j++){
+var C=0;
+var D=0;
+for(var i=0;i<this.p.length;i++){
+C+=this.p[i][j]*this.p[this.p.length-1][0]*dojox.math.bernstein(_5,this.p.length,i);
+}
+for(var l=0;l<this.p.length;l++){
+D+=this.p[this.p.length-1][0]*dojox.math.bernstein(_5,this.p.length,l);
+}
+_6[j]=C/D;
+}
+return _6;
+};
+this.p=_4;
+return this;
+},CatmullRom:function(_7,c){
+this.getValue=function(_8){
+var _9=_8*(this.p.length-1);
+var _a=Math.floor(_9);
+var _b=_9-_a;
+var i0=_a-1;
+if(i0<0){
+i0=0;
+}
+var i=_a;
+var i1=_a+1;
+if(i1>=this.p.length){
+i1=this.p.length-1;
+}
+var i2=_a+2;
+if(i2>=this.p.length){
+i2=this.p.length-1;
+}
+var u=_b;
+var u2=_b*_b;
+var u3=_b*_b*_b;
+var _c=new Array(this.p[0].length);
+for(var k=0;k<this.p[0].length;k++){
+var x1=(-this.c*this.p[i0][k])+((2-this.c)*this.p[i][k])+((this.c-2)*this.p[i1][k])+(this.c*this.p[i2][k]);
+var x2=(2*this.c*this.p[i0][k])+((this.c-3)*this.p[i][k])+((3-2*this.c)*this.p[i1][k])+(-this.c*this.p[i2][k]);
+var x3=(-this.c*this.p[i0][k])+(this.c*this.p[i1][k]);
+var x4=this.p[i][k];
+_c[k]=x1*u3+x2*u2+x3*u+x4;
+}
+return _c;
+};
+if(!c){
+this.c=0.7;
+}else{
+this.c=c;
+}
+this.p=_7;
+return this;
+},Arc:function(_d,_e,_f){
+function _10(a,b){
+var c=new Array(a.length);
+for(var i=0;i<a.length;i++){
+c[i]=a[i]+b[i];
+}
+return c;
+};
+function _11(a){
+var b=new Array(a.length);
+for(var i=0;i<a.length;i++){
+b[i]=-a[i];
+}
+return b;
+};
+var _12=dojox.math.midpoint(_d,_e);
+var _13=_10(_11(_12),_d);
+var rad=Math.sqrt(Math.pow(_13[0],2)+Math.pow(_13[1],2));
+var _14=dojox.math.radiansToDegrees(Math.atan(_13[1]/_13[0]));
+if(_13[0]<0){
+_14-=90;
+}else{
+_14+=90;
+}
+dojox.math.curves.CenteredArc.call(this,_12,rad,_14,_14+(_f?-180:180));
+},CenteredArc:function(_15,_16,_17,end){
+this.center=_15;
+this.radius=_16;
+this.start=_17||0;
+this.end=end;
+this.getValue=function(n){
+var _18=new Array(2);
+var _19=dojox.math.degreesToRadians(this.start+((this.end-this.start)*n));
+_18[0]=this.center[0]+this.radius*Math.sin(_19);
+_18[1]=this.center[1]-this.radius*Math.cos(_19);
+return _18;
+};
+return this;
+},Circle:function(_1a,_1b){
+dojox.math.curves.CenteredArc.call(this,_1a,_1b,0,360);
+return this;
+},Path:function(){
+var _1c=[];
+var _1d=[];
+var _1e=[];
+var _1f=0;
+this.add=function(_20,_21){
+if(_21<0){
+console.error("dojox.math.curves.Path.add: weight cannot be less than 0");
+}
+_1c.push(_20);
+_1d.push(_21);
+_1f+=_21;
+_22();
+};
+this.remove=function(_23){
+for(var i=0;i<_1c.length;i++){
+if(_1c[i]==_23){
+_1c.splice(i,1);
+_1f-=_1d.splice(i,1)[0];
+break;
+}
+}
+_22();
+};
+this.removeAll=function(){
+_1c=[];
+_1d=[];
+_1f=0;
+};
+this.getValue=function(n){
+var _24=false,_25=0;
+for(var i=0;i<_1e.length;i++){
+var r=_1e[i];
+if(n>=r[0]&&n<r[1]){
+var _26=(n-r[0])/r[2];
+_25=_1c[i].getValue(_26);
+_24=true;
+break;
+}
+}
+if(!_24){
+_25=_1c[_1c.length-1].getValue(1);
+}
+for(var j=0;j<i;j++){
+_25=dojox.math.points.translate(_25,_1c[j].getValue(1));
+}
+return _25;
+};
+function _22(){
+var _27=0;
+for(var i=0;i<_1d.length;i++){
+var end=_27+_1d[i]/_1f;
+var len=end-_27;
+_1e[i]=[_27,end,len];
+_27=end;
+}
+};
+return this;
+}});
+}
Index: trunk/web/dojo/dojox/math/round.js
===================================================================
--- trunk/web/dojo/dojox/math/round.js	(revision 0)
+++ trunk/web/dojo/dojox/math/round.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.round"]){
+dojo._hasResource["dojox.math.round"]=true;
+dojo.provide("dojox.math.round");
+dojo.experimental("dojox.math.round");
+dojox.math.round=function(_1,_2,_3){
+var _4=Math.log(Math.abs(_1))/Math.log(10);
+var _5=10/(_3||10);
+var _6=Math.pow(10,-15+_4);
+return (_5*(+_1+(_1>0?_6:-_6))).toFixed(_2)/_5;
+};
+if((0.9).toFixed()==0){
+(function(){
+var _7=dojox.math.round;
+dojox.math.round=function(v,p,m){
+var d=Math.pow(10,-p||0),a=Math.abs(v);
+if(!v||a>=d||a*Math.pow(10,p+1)<5){
+d=0;
+}
+return _7(v,p,m)+(v>0?d:-d);
+};
+})();
+}
+}
Index: trunk/web/dojo/dojox/math/_base.js
===================================================================
--- trunk/web/dojo/dojox/math/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/math/_base.js	(revision 9)
@@ -0,0 +1,99 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math._base"]){
+dojo._hasResource["dojox.math._base"]=true;
+dojo.provide("dojox.math._base");
+(function(){
+var m=dojox.math;
+dojo.mixin(dojox.math,{toRadians:function(n){
+return (n*Math.PI)/180;
+},toDegrees:function(n){
+return (n*180)/Math.PI;
+},degreesToRadians:function(n){
+return m.toRadians(n);
+},radiansToDegrees:function(n){
+return m.toDegrees(n);
+},_gamma:function(z){
+var _1=1;
+while(--z>=1){
+_1*=z;
+}
+if(z==0){
+return _1;
+}
+if(Math.floor(z)==z){
+return NaN;
+}
+if(z==-0.5){
+return Math.sqrt(Math.PI);
+}
+if(z<-0.5){
+return Math.PI/(Math.sin(Math.PI*(z+1))*this._gamma(-z));
+}
+var a=13;
+var c=[0.000005665805601518633,1.274371766337968,-4.937419909315511,7.872026703248596,-6.676050374943609,3.252529844448517,-0.9185252144102627,0.14474022977730785,-0.011627561382389852,0.0004011798075706662,-0.0000042652458386405745,6.665191329033609e-9,-1.5392547381874824e-13];
+var _2=c[0];
+for(var k=1;k<a;k++){
+_2+=c[k]/(z+k);
+}
+return _1*Math.pow(z+a,z+0.5)/Math.exp(z)*_2;
+},factorial:function(n){
+return this._gamma(n+1);
+},permutations:function(n,k){
+if(n==0||k==0){
+return 1;
+}
+return this.factorial(n)/this.factorial(n-k);
+},combinations:function(n,r){
+if(n==0||r==0){
+return 1;
+}
+return this.factorial(n)/(this.factorial(n-r)*this.factorial(r));
+},bernstein:function(t,n,i){
+return this.combinations(n,i)*Math.pow(t,i)*Math.pow(1-t,n-i);
+},gaussian:function(){
+var k=2;
+do{
+var i=2*Math.random()-1;
+var j=2*Math.random()-1;
+k=i*i+j*j;
+}while(k>=1);
+return i*Math.sqrt((-2*Math.log(k))/k);
+},range:function(a,b,_3){
+if(arguments.length<2){
+b=a,a=0;
+}
+var _4=[],s=_3||1,i;
+if(s>0){
+for(i=a;i<b;i+=s){
+_4.push(i);
+}
+}else{
+if(s<0){
+for(i=a;i>b;i+=s){
+_4.push(i);
+}
+}else{
+throw new Error("dojox.math.range: step must not be zero.");
+}
+}
+return _4;
+},distance:function(a,b){
+return Math.sqrt(Math.pow(b[0]-a[0],2)+Math.pow(b[1]-a[1],2));
+},midpoint:function(a,b){
+if(a.length!=b.length){
+console.error("dojox.math.midpoint: Points A and B are not the same dimensionally.",a,b);
+}
+var m=[];
+for(var i=0;i<a.length;i++){
+m[i]=(a[i]+b[i])/2;
+}
+return m;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/math/BigInteger-ext.js
===================================================================
--- trunk/web/dojo/dojox/math/BigInteger-ext.js	(revision 0)
+++ trunk/web/dojo/dojox/math/BigInteger-ext.js	(revision 9)
@@ -0,0 +1,796 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.BigInteger-ext"]){
+dojo._hasResource["dojox.math.BigInteger-ext"]=true;
+dojo.provide("dojox.math.BigInteger-ext");
+dojo.experimental("dojox.math.BigInteger-ext");
+dojo.require("dojox.math.BigInteger");
+(function(){
+var _1=dojox.math.BigInteger,_2=_1._nbi,_3=_1._nbv,_4=_1._nbits,_5=_1._Montgomery;
+function _6(){
+var r=_2();
+this._copyTo(r);
+return r;
+};
+function _7(){
+if(this.s<0){
+if(this.t==1){
+return this[0]-this._DV;
+}else{
+if(this.t==0){
+return -1;
+}
+}
+}else{
+if(this.t==1){
+return this[0];
+}else{
+if(this.t==0){
+return 0;
+}
+}
+}
+return ((this[1]&((1<<(32-this._DB))-1))<<this._DB)|this[0];
+};
+function _8(){
+return (this.t==0)?this.s:(this[0]<<24)>>24;
+};
+function _9(){
+return (this.t==0)?this.s:(this[0]<<16)>>16;
+};
+function _a(r){
+return Math.floor(Math.LN2*this._DB/Math.log(r));
+};
+function _b(){
+if(this.s<0){
+return -1;
+}else{
+if(this.t<=0||(this.t==1&&this[0]<=0)){
+return 0;
+}else{
+return 1;
+}
+}
+};
+function _c(b){
+if(b==null){
+b=10;
+}
+if(this.signum()==0||b<2||b>36){
+return "0";
+}
+var cs=this._chunkSize(b);
+var a=Math.pow(b,cs);
+var d=_3(a),y=_2(),z=_2(),r="";
+this._divRemTo(d,y,z);
+while(y.signum()>0){
+r=(a+z.intValue()).toString(b).substr(1)+r;
+y._divRemTo(d,y,z);
+}
+return z.intValue().toString(b)+r;
+};
+function _d(s,b){
+this._fromInt(0);
+if(b==null){
+b=10;
+}
+var cs=this._chunkSize(b);
+var d=Math.pow(b,cs),mi=false,j=0,w=0;
+for(var i=0;i<s.length;++i){
+var x=intAt(s,i);
+if(x<0){
+if(s.charAt(i)=="-"&&this.signum()==0){
+mi=true;
+}
+continue;
+}
+w=b*w+x;
+if(++j>=cs){
+this._dMultiply(d);
+this._dAddOffset(w,0);
+j=0;
+w=0;
+}
+}
+if(j>0){
+this._dMultiply(Math.pow(b,j));
+this._dAddOffset(w,0);
+}
+if(mi){
+_1.ZERO._subTo(this,this);
+}
+};
+function _e(a,b,c){
+if("number"==typeof b){
+if(a<2){
+this._fromInt(1);
+}else{
+this._fromNumber(a,c);
+if(!this.testBit(a-1)){
+this._bitwiseTo(_1.ONE.shiftLeft(a-1),_f,this);
+}
+if(this._isEven()){
+this._dAddOffset(1,0);
+}
+while(!this.isProbablePrime(b)){
+this._dAddOffset(2,0);
+if(this.bitLength()>a){
+this._subTo(_1.ONE.shiftLeft(a-1),this);
+}
+}
+}
+}else{
+var x=[],t=a&7;
+x.length=(a>>3)+1;
+b.nextBytes(x);
+if(t>0){
+x[0]&=((1<<t)-1);
+}else{
+x[0]=0;
+}
+this._fromString(x,256);
+}
+};
+function _10(){
+var i=this.t,r=[];
+r[0]=this.s;
+var p=this._DB-(i*this._DB)%8,d,k=0;
+if(i-->0){
+if(p<this._DB&&(d=this[i]>>p)!=(this.s&this._DM)>>p){
+r[k++]=d|(this.s<<(this._DB-p));
+}
+while(i>=0){
+if(p<8){
+d=(this[i]&((1<<p)-1))<<(8-p);
+d|=this[--i]>>(p+=this._DB-8);
+}else{
+d=(this[i]>>(p-=8))&255;
+if(p<=0){
+p+=this._DB;
+--i;
+}
+}
+if((d&128)!=0){
+d|=-256;
+}
+if(k==0&&(this.s&128)!=(d&128)){
+++k;
+}
+if(k>0||d!=this.s){
+r[k++]=d;
+}
+}
+}
+return r;
+};
+function _11(a){
+return (this.compareTo(a)==0);
+};
+function _12(a){
+return (this.compareTo(a)<0)?this:a;
+};
+function _13(a){
+return (this.compareTo(a)>0)?this:a;
+};
+function _14(a,op,r){
+var i,f,m=Math.min(a.t,this.t);
+for(i=0;i<m;++i){
+r[i]=op(this[i],a[i]);
+}
+if(a.t<this.t){
+f=a.s&this._DM;
+for(i=m;i<this.t;++i){
+r[i]=op(this[i],f);
+}
+r.t=this.t;
+}else{
+f=this.s&this._DM;
+for(i=m;i<a.t;++i){
+r[i]=op(f,a[i]);
+}
+r.t=a.t;
+}
+r.s=op(this.s,a.s);
+r._clamp();
+};
+function _15(x,y){
+return x&y;
+};
+function _16(a){
+var r=_2();
+this._bitwiseTo(a,_15,r);
+return r;
+};
+function _f(x,y){
+return x|y;
+};
+function _17(a){
+var r=_2();
+this._bitwiseTo(a,_f,r);
+return r;
+};
+function _18(x,y){
+return x^y;
+};
+function _19(a){
+var r=_2();
+this._bitwiseTo(a,_18,r);
+return r;
+};
+function _1a(x,y){
+return x&~y;
+};
+function _1b(a){
+var r=_2();
+this._bitwiseTo(a,_1a,r);
+return r;
+};
+function _1c(){
+var r=_2();
+for(var i=0;i<this.t;++i){
+r[i]=this._DM&~this[i];
+}
+r.t=this.t;
+r.s=~this.s;
+return r;
+};
+function _1d(n){
+var r=_2();
+if(n<0){
+this._rShiftTo(-n,r);
+}else{
+this._lShiftTo(n,r);
+}
+return r;
+};
+function _1e(n){
+var r=_2();
+if(n<0){
+this._lShiftTo(-n,r);
+}else{
+this._rShiftTo(n,r);
+}
+return r;
+};
+function _1f(x){
+if(x==0){
+return -1;
+}
+var r=0;
+if((x&65535)==0){
+x>>=16;
+r+=16;
+}
+if((x&255)==0){
+x>>=8;
+r+=8;
+}
+if((x&15)==0){
+x>>=4;
+r+=4;
+}
+if((x&3)==0){
+x>>=2;
+r+=2;
+}
+if((x&1)==0){
+++r;
+}
+return r;
+};
+function _20(){
+for(var i=0;i<this.t;++i){
+if(this[i]!=0){
+return i*this._DB+_1f(this[i]);
+}
+}
+if(this.s<0){
+return this.t*this._DB;
+}
+return -1;
+};
+function _21(x){
+var r=0;
+while(x!=0){
+x&=x-1;
+++r;
+}
+return r;
+};
+function _22(){
+var r=0,x=this.s&this._DM;
+for(var i=0;i<this.t;++i){
+r+=_21(this[i]^x);
+}
+return r;
+};
+function _23(n){
+var j=Math.floor(n/this._DB);
+if(j>=this.t){
+return (this.s!=0);
+}
+return ((this[j]&(1<<(n%this._DB)))!=0);
+};
+function _24(n,op){
+var r=_1.ONE.shiftLeft(n);
+this._bitwiseTo(r,op,r);
+return r;
+};
+function _25(n){
+return this._changeBit(n,_f);
+};
+function _26(n){
+return this._changeBit(n,_1a);
+};
+function _27(n){
+return this._changeBit(n,_18);
+};
+function _28(a,r){
+var i=0,c=0,m=Math.min(a.t,this.t);
+while(i<m){
+c+=this[i]+a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+if(a.t<this.t){
+c+=a.s;
+while(i<this.t){
+c+=this[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c+=this.s;
+}else{
+c+=this.s;
+while(i<a.t){
+c+=a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c+=a.s;
+}
+r.s=(c<0)?-1:0;
+if(c>0){
+r[i++]=c;
+}else{
+if(c<-1){
+r[i++]=this._DV+c;
+}
+}
+r.t=i;
+r._clamp();
+};
+function _29(a){
+var r=_2();
+this._addTo(a,r);
+return r;
+};
+function _2a(a){
+var r=_2();
+this._subTo(a,r);
+return r;
+};
+function _2b(a){
+var r=_2();
+this._multiplyTo(a,r);
+return r;
+};
+function _2c(a){
+var r=_2();
+this._divRemTo(a,r,null);
+return r;
+};
+function _2d(a){
+var r=_2();
+this._divRemTo(a,null,r);
+return r;
+};
+function _2e(a){
+var q=_2(),r=_2();
+this._divRemTo(a,q,r);
+return [q,r];
+};
+function _2f(n){
+this[this.t]=this.am(0,n-1,this,0,0,this.t);
+++this.t;
+this._clamp();
+};
+function _30(n,w){
+while(this.t<=w){
+this[this.t++]=0;
+}
+this[w]+=n;
+while(this[w]>=this._DV){
+this[w]-=this._DV;
+if(++w>=this.t){
+this[this.t++]=0;
+}
+++this[w];
+}
+};
+function _31(){
+};
+function _32(x){
+return x;
+};
+function _33(x,y,r){
+x._multiplyTo(y,r);
+};
+function _34(x,r){
+x._squareTo(r);
+};
+_31.prototype.convert=_32;
+_31.prototype.revert=_32;
+_31.prototype.mulTo=_33;
+_31.prototype.sqrTo=_34;
+function _35(e){
+return this._exp(e,new _31());
+};
+function _36(a,n,r){
+var i=Math.min(this.t+a.t,n);
+r.s=0;
+r.t=i;
+while(i>0){
+r[--i]=0;
+}
+var j;
+for(j=r.t-this.t;i<j;++i){
+r[i+this.t]=this.am(0,a[i],r,i,0,this.t);
+}
+for(j=Math.min(a.t,n);i<j;++i){
+this.am(0,a[i],r,i,0,n-i);
+}
+r._clamp();
+};
+function _37(a,n,r){
+--n;
+var i=r.t=this.t+a.t-n;
+r.s=0;
+while(--i>=0){
+r[i]=0;
+}
+for(i=Math.max(n-this.t,0);i<a.t;++i){
+r[this.t+i-n]=this.am(n-i,a[i],r,0,0,this.t+i-n);
+}
+r._clamp();
+r._drShiftTo(1,r);
+};
+function _38(m){
+this.r2=_2();
+this.q3=_2();
+_1.ONE._dlShiftTo(2*m.t,this.r2);
+this.mu=this.r2.divide(m);
+this.m=m;
+};
+function _39(x){
+if(x.s<0||x.t>2*this.m.t){
+return x.mod(this.m);
+}else{
+if(x.compareTo(this.m)<0){
+return x;
+}else{
+var r=_2();
+x._copyTo(r);
+this.reduce(r);
+return r;
+}
+}
+};
+function _3a(x){
+return x;
+};
+function _3b(x){
+x._drShiftTo(this.m.t-1,this.r2);
+if(x.t>this.m.t+1){
+x.t=this.m.t+1;
+x._clamp();
+}
+this.mu._multiplyUpperTo(this.r2,this.m.t+1,this.q3);
+this.m._multiplyLowerTo(this.q3,this.m.t+1,this.r2);
+while(x.compareTo(this.r2)<0){
+x._dAddOffset(1,this.m.t+1);
+}
+x._subTo(this.r2,x);
+while(x.compareTo(this.m)>=0){
+x._subTo(this.m,x);
+}
+};
+function _3c(x,r){
+x._squareTo(r);
+this.reduce(r);
+};
+function _3d(x,y,r){
+x._multiplyTo(y,r);
+this.reduce(r);
+};
+_38.prototype.convert=_39;
+_38.prototype.revert=_3a;
+_38.prototype.reduce=_3b;
+_38.prototype.mulTo=_3d;
+_38.prototype.sqrTo=_3c;
+function _3e(e,m){
+var i=e.bitLength(),k,r=_3(1),z;
+if(i<=0){
+return r;
+}else{
+if(i<18){
+k=1;
+}else{
+if(i<48){
+k=3;
+}else{
+if(i<144){
+k=4;
+}else{
+if(i<768){
+k=5;
+}else{
+k=6;
+}
+}
+}
+}
+}
+if(i<8){
+z=new Classic(m);
+}else{
+if(m._isEven()){
+z=new _38(m);
+}else{
+z=new _5(m);
+}
+}
+var g=[],n=3,k1=k-1,km=(1<<k)-1;
+g[1]=z.convert(this);
+if(k>1){
+var g2=_2();
+z.sqrTo(g[1],g2);
+while(n<=km){
+g[n]=_2();
+z.mulTo(g2,g[n-2],g[n]);
+n+=2;
+}
+}
+var j=e.t-1,w,is1=true,r2=_2(),t;
+i=_4(e[j])-1;
+while(j>=0){
+if(i>=k1){
+w=(e[j]>>(i-k1))&km;
+}else{
+w=(e[j]&((1<<(i+1))-1))<<(k1-i);
+if(j>0){
+w|=e[j-1]>>(this._DB+i-k1);
+}
+}
+n=k;
+while((w&1)==0){
+w>>=1;
+--n;
+}
+if((i-=n)<0){
+i+=this._DB;
+--j;
+}
+if(is1){
+g[w]._copyTo(r);
+is1=false;
+}else{
+while(n>1){
+z.sqrTo(r,r2);
+z.sqrTo(r2,r);
+n-=2;
+}
+if(n>0){
+z.sqrTo(r,r2);
+}else{
+t=r;
+r=r2;
+r2=t;
+}
+z.mulTo(r2,g[w],r);
+}
+while(j>=0&&(e[j]&(1<<i))==0){
+z.sqrTo(r,r2);
+t=r;
+r=r2;
+r2=t;
+if(--i<0){
+i=this._DB-1;
+--j;
+}
+}
+}
+return z.revert(r);
+};
+function _3f(a){
+var x=(this.s<0)?this.negate():this.clone();
+var y=(a.s<0)?a.negate():a.clone();
+if(x.compareTo(y)<0){
+var t=x;
+x=y;
+y=t;
+}
+var i=x.getLowestSetBit(),g=y.getLowestSetBit();
+if(g<0){
+return x;
+}
+if(i<g){
+g=i;
+}
+if(g>0){
+x._rShiftTo(g,x);
+y._rShiftTo(g,y);
+}
+while(x.signum()>0){
+if((i=x.getLowestSetBit())>0){
+x._rShiftTo(i,x);
+}
+if((i=y.getLowestSetBit())>0){
+y._rShiftTo(i,y);
+}
+if(x.compareTo(y)>=0){
+x._subTo(y,x);
+x._rShiftTo(1,x);
+}else{
+y._subTo(x,y);
+y._rShiftTo(1,y);
+}
+}
+if(g>0){
+y._lShiftTo(g,y);
+}
+return y;
+};
+function _40(n){
+if(n<=0){
+return 0;
+}
+var d=this._DV%n,r=(this.s<0)?n-1:0;
+if(this.t>0){
+if(d==0){
+r=this[0]%n;
+}else{
+for(var i=this.t-1;i>=0;--i){
+r=(d*r+this[i])%n;
+}
+}
+}
+return r;
+};
+function _41(m){
+var ac=m._isEven();
+if((this._isEven()&&ac)||m.signum()==0){
+return _1.ZERO;
+}
+var u=m.clone(),v=this.clone();
+var a=_3(1),b=_3(0),c=_3(0),d=_3(1);
+while(u.signum()!=0){
+while(u._isEven()){
+u._rShiftTo(1,u);
+if(ac){
+if(!a._isEven()||!b._isEven()){
+a._addTo(this,a);
+b._subTo(m,b);
+}
+a._rShiftTo(1,a);
+}else{
+if(!b._isEven()){
+b._subTo(m,b);
+}
+}
+b._rShiftTo(1,b);
+}
+while(v._isEven()){
+v._rShiftTo(1,v);
+if(ac){
+if(!c._isEven()||!d._isEven()){
+c._addTo(this,c);
+d._subTo(m,d);
+}
+c._rShiftTo(1,c);
+}else{
+if(!d._isEven()){
+d._subTo(m,d);
+}
+}
+d._rShiftTo(1,d);
+}
+if(u.compareTo(v)>=0){
+u._subTo(v,u);
+if(ac){
+a._subTo(c,a);
+}
+b._subTo(d,b);
+}else{
+v._subTo(u,v);
+if(ac){
+c._subTo(a,c);
+}
+d._subTo(b,d);
+}
+}
+if(v.compareTo(_1.ONE)!=0){
+return _1.ZERO;
+}
+if(d.compareTo(m)>=0){
+return d.subtract(m);
+}
+if(d.signum()<0){
+d._addTo(m,d);
+}else{
+return d;
+}
+if(d.signum()<0){
+return d.add(m);
+}else{
+return d;
+}
+};
+var _42=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];
+var _43=(1<<26)/_42[_42.length-1];
+function _44(t){
+var i,x=this.abs();
+if(x.t==1&&x[0]<=_42[_42.length-1]){
+for(i=0;i<_42.length;++i){
+if(x[0]==_42[i]){
+return true;
+}
+}
+return false;
+}
+if(x._isEven()){
+return false;
+}
+i=1;
+while(i<_42.length){
+var m=_42[i],j=i+1;
+while(j<_42.length&&m<_43){
+m*=_42[j++];
+}
+m=x._modInt(m);
+while(i<j){
+if(m%_42[i++]==0){
+return false;
+}
+}
+}
+return x._millerRabin(t);
+};
+function _45(t){
+var n1=this.subtract(_1.ONE);
+var k=n1.getLowestSetBit();
+if(k<=0){
+return false;
+}
+var r=n1.shiftRight(k);
+t=(t+1)>>1;
+if(t>_42.length){
+t=_42.length;
+}
+var a=_2();
+for(var i=0;i<t;++i){
+a._fromInt(_42[i]);
+var y=a.modPow(r,this);
+if(y.compareTo(_1.ONE)!=0&&y.compareTo(n1)!=0){
+var j=1;
+while(j++<k&&y.compareTo(n1)!=0){
+y=y.modPowInt(2,this);
+if(y.compareTo(_1.ONE)==0){
+return false;
+}
+}
+if(y.compareTo(n1)!=0){
+return false;
+}
+}
+}
+return true;
+};
+dojo.extend(_1,{_chunkSize:_a,_toRadix:_c,_fromRadix:_d,_fromNumber:_e,_bitwiseTo:_14,_changeBit:_24,_addTo:_28,_dMultiply:_2f,_dAddOffset:_30,_multiplyLowerTo:_36,_multiplyUpperTo:_37,_modInt:_40,_millerRabin:_45,clone:_6,intValue:_7,byteValue:_8,shortValue:_9,signum:_b,toByteArray:_10,equals:_11,min:_12,max:_13,and:_16,or:_17,xor:_19,andNot:_1b,not:_1c,shiftLeft:_1d,shiftRight:_1e,getLowestSetBit:_20,bitCount:_22,testBit:_23,setBit:_25,clearBit:_26,flipBit:_27,add:_29,subtract:_2a,multiply:_2b,divide:_2c,remainder:_2d,divideAndRemainder:_2e,modPow:_3e,modInverse:_41,pow:_35,gcd:_3f,isProbablePrime:_44});
+})();
+}
Index: trunk/web/dojo/dojox/math/stats.js
===================================================================
--- trunk/web/dojo/dojox/math/stats.js	(revision 0)
+++ trunk/web/dojo/dojox/math/stats.js	(revision 9)
@@ -0,0 +1,108 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.stats"]){
+dojo._hasResource["dojox.math.stats"]=true;
+dojo.provide("dojox.math.stats");
+(function(){
+var st=dojox.math.stats;
+dojo.mixin(st,{sd:function(a){
+return Math.sqrt(st.variance(a));
+},variance:function(a){
+var _1=0,_2=0;
+dojo.forEach(a,function(_3){
+_1+=_3;
+_2+=Math.pow(_3,2);
+});
+return (_2/a.length)-Math.pow(_1/a.length,2);
+},bestFit:function(a,_4,_5){
+_4=_4||"x",_5=_5||"y";
+if(a[0]!==undefined&&typeof (a[0])=="number"){
+a=dojo.map(a,function(_6,_7){
+return {x:_7,y:_6};
+});
+}
+var sx=0,sy=0,_8=0,_9=0,_a=0,_b=0,_c=0,n=a.length,t;
+for(var i=0;i<n;i++){
+sx+=a[i][_4];
+sy+=a[i][_5];
+_8+=Math.pow(a[i][_4],2);
+_9+=Math.pow(a[i][_5],2);
+_a+=a[i][_4]*a[i][_5];
+}
+for(i=0;i<n;i++){
+t=a[i][_4]-sx/n;
+_b+=t*t;
+_c+=t*a[i][_5];
+}
+var _d=_c/(_b||1);
+var d=Math.sqrt((_8-Math.pow(sx,2)/n)*(_9-Math.pow(sy,2)/n));
+if(d===0){
+throw new Error("dojox.math.stats.bestFit: the denominator for Pearson's R is 0.");
+}
+var r=(_a-(sx*sy/n))/d;
+var r2=Math.pow(r,2);
+if(_d<0){
+r=-r;
+}
+return {slope:_d,intercept:(sy-sx*_d)/(n||1),r:r,r2:r2};
+},forecast:function(a,x,_e,_f){
+var fit=st.bestFit(a,_e,_f);
+return (fit.slope*x)+fit.intercept;
+},mean:function(a){
+var t=0;
+dojo.forEach(a,function(v){
+t+=v;
+});
+return t/Math.max(a.length,1);
+},min:function(a){
+return Math.min.apply(null,a);
+},max:function(a){
+return Math.max.apply(null,a);
+},median:function(a){
+var t=a.slice(0).sort(function(a,b){
+return a-b;
+});
+return (t[Math.floor(a.length/2)]+t[Math.ceil(a.length/2)])/2;
+},mode:function(a){
+var o={},r=0,m=Number.MIN_VALUE;
+dojo.forEach(a,function(v){
+(o[v]!==undefined)?o[v]++:o[v]=1;
+});
+for(var p in o){
+if(m<o[p]){
+m=o[p],r=p;
+}
+}
+return r;
+},sum:function(a){
+var sum=0;
+dojo.forEach(a,function(n){
+sum+=n;
+});
+return sum;
+},approxLin:function(a,pos){
+var p=pos*(a.length-1),t=Math.ceil(p),f=t-1;
+if(f<0){
+return a[0];
+}
+if(t>=a.length){
+return a[a.length-1];
+}
+return a[f]*(t-p)+a[t]*(p-f);
+},summary:function(a,_10){
+if(!_10){
+a=a.slice(0);
+a.sort(function(a,b){
+return a-b;
+});
+}
+var l=st.approxLin,_11={min:a[0],p25:l(a,0.25),med:l(a,0.5),p75:l(a,0.75),max:a[a.length-1],p10:l(a,0.1),p90:l(a,0.9)};
+return _11;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/math/BigInteger.js
===================================================================
--- trunk/web/dojo/dojox/math/BigInteger.js	(revision 0)
+++ trunk/web/dojo/dojox/math/BigInteger.js	(revision 9)
@@ -0,0 +1,635 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.math.BigInteger"]){
+dojo._hasResource["dojox.math.BigInteger"]=true;
+dojo.provide("dojox.math.BigInteger");
+dojo.experimental("dojox.math.BigInteger");
+(function(){
+var _1;
+var _2=244837814094590;
+var _3=((_2&16777215)==15715070);
+function _4(a,b,c){
+if(a!=null){
+if("number"==typeof a){
+this._fromNumber(a,b,c);
+}else{
+if(!b&&"string"!=typeof a){
+this._fromString(a,256);
+}else{
+this._fromString(a,b);
+}
+}
+}
+};
+function _5(){
+return new _4(null);
+};
+function _6(i,x,w,j,c,n){
+while(--n>=0){
+var v=x*this[i++]+w[j]+c;
+c=Math.floor(v/67108864);
+w[j++]=v&67108863;
+}
+return c;
+};
+function _7(i,x,w,j,c,n){
+var xl=x&32767,xh=x>>15;
+while(--n>=0){
+var l=this[i]&32767;
+var h=this[i++]>>15;
+var m=xh*l+h*xl;
+l=xl*l+((m&32767)<<15)+w[j]+(c&1073741823);
+c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);
+w[j++]=l&1073741823;
+}
+return c;
+};
+function _8(i,x,w,j,c,n){
+var xl=x&16383,xh=x>>14;
+while(--n>=0){
+var l=this[i]&16383;
+var h=this[i++]>>14;
+var m=xh*l+h*xl;
+l=xl*l+((m&16383)<<14)+w[j]+c;
+c=(l>>28)+(m>>14)+xh*h;
+w[j++]=l&268435455;
+}
+return c;
+};
+if(_3&&(navigator.appName=="Microsoft Internet Explorer")){
+_4.prototype.am=_7;
+_1=30;
+}else{
+if(_3&&(navigator.appName!="Netscape")){
+_4.prototype.am=_6;
+_1=26;
+}else{
+_4.prototype.am=_8;
+_1=28;
+}
+}
+var _9=52;
+var _a="0123456789abcdefghijklmnopqrstuvwxyz";
+var _b=[];
+var rr,vv;
+rr="0".charCodeAt(0);
+for(vv=0;vv<=9;++vv){
+_b[rr++]=vv;
+}
+rr="a".charCodeAt(0);
+for(vv=10;vv<36;++vv){
+_b[rr++]=vv;
+}
+rr="A".charCodeAt(0);
+for(vv=10;vv<36;++vv){
+_b[rr++]=vv;
+}
+function _c(n){
+return _a.charAt(n);
+};
+function _d(s,i){
+var c=_b[s.charCodeAt(i)];
+return (c==null)?-1:c;
+};
+function _e(r){
+for(var i=this.t-1;i>=0;--i){
+r[i]=this[i];
+}
+r.t=this.t;
+r.s=this.s;
+};
+function _f(x){
+this.t=1;
+this.s=(x<0)?-1:0;
+if(x>0){
+this[0]=x;
+}else{
+if(x<-1){
+this[0]=x+_DV;
+}else{
+this.t=0;
+}
+}
+};
+function nbv(i){
+var r=_5();
+r._fromInt(i);
+return r;
+};
+function _10(s,b){
+var k;
+if(b==16){
+k=4;
+}else{
+if(b==8){
+k=3;
+}else{
+if(b==256){
+k=8;
+}else{
+if(b==2){
+k=1;
+}else{
+if(b==32){
+k=5;
+}else{
+if(b==4){
+k=2;
+}else{
+this.fromRadix(s,b);
+return;
+}
+}
+}
+}
+}
+}
+this.t=0;
+this.s=0;
+var i=s.length,mi=false,sh=0;
+while(--i>=0){
+var x=(k==8)?s[i]&255:_d(s,i);
+if(x<0){
+if(s.charAt(i)=="-"){
+mi=true;
+}
+continue;
+}
+mi=false;
+if(sh==0){
+this[this.t++]=x;
+}else{
+if(sh+k>this._DB){
+this[this.t-1]|=(x&((1<<(this._DB-sh))-1))<<sh;
+this[this.t++]=(x>>(this._DB-sh));
+}else{
+this[this.t-1]|=x<<sh;
+}
+}
+sh+=k;
+if(sh>=this._DB){
+sh-=this._DB;
+}
+}
+if(k==8&&(s[0]&128)!=0){
+this.s=-1;
+if(sh>0){
+this[this.t-1]|=((1<<(this._DB-sh))-1)<<sh;
+}
+}
+this._clamp();
+if(mi){
+_4.ZERO._subTo(this,this);
+}
+};
+function _11(){
+var c=this.s&this._DM;
+while(this.t>0&&this[this.t-1]==c){
+--this.t;
+}
+};
+function _12(b){
+if(this.s<0){
+return "-"+this.negate().toString(b);
+}
+var k;
+if(b==16){
+k=4;
+}else{
+if(b==8){
+k=3;
+}else{
+if(b==2){
+k=1;
+}else{
+if(b==32){
+k=5;
+}else{
+if(b==4){
+k=2;
+}else{
+return this._toRadix(b);
+}
+}
+}
+}
+}
+var km=(1<<k)-1,d,m=false,r="",i=this.t;
+var p=this._DB-(i*this._DB)%k;
+if(i-->0){
+if(p<this._DB&&(d=this[i]>>p)>0){
+m=true;
+r=_c(d);
+}
+while(i>=0){
+if(p<k){
+d=(this[i]&((1<<p)-1))<<(k-p);
+d|=this[--i]>>(p+=this._DB-k);
+}else{
+d=(this[i]>>(p-=k))&km;
+if(p<=0){
+p+=this._DB;
+--i;
+}
+}
+if(d>0){
+m=true;
+}
+if(m){
+r+=_c(d);
+}
+}
+}
+return m?r:"0";
+};
+function _13(){
+var r=_5();
+_4.ZERO._subTo(this,r);
+return r;
+};
+function _14(){
+return (this.s<0)?this.negate():this;
+};
+function _15(a){
+var r=this.s-a.s;
+if(r){
+return r;
+}
+var i=this.t;
+r=i-a.t;
+if(r){
+return r;
+}
+while(--i>=0){
+if((r=this[i]-a[i])){
+return r;
+}
+}
+return 0;
+};
+function _16(x){
+var r=1,t;
+if((t=x>>>16)){
+x=t;
+r+=16;
+}
+if((t=x>>8)){
+x=t;
+r+=8;
+}
+if((t=x>>4)){
+x=t;
+r+=4;
+}
+if((t=x>>2)){
+x=t;
+r+=2;
+}
+if((t=x>>1)){
+x=t;
+r+=1;
+}
+return r;
+};
+function _17(){
+if(this.t<=0){
+return 0;
+}
+return this._DB*(this.t-1)+_16(this[this.t-1]^(this.s&this._DM));
+};
+function _18(n,r){
+var i;
+for(i=this.t-1;i>=0;--i){
+r[i+n]=this[i];
+}
+for(i=n-1;i>=0;--i){
+r[i]=0;
+}
+r.t=this.t+n;
+r.s=this.s;
+};
+function _19(n,r){
+for(var i=n;i<this.t;++i){
+r[i-n]=this[i];
+}
+r.t=Math.max(this.t-n,0);
+r.s=this.s;
+};
+function _1a(n,r){
+var bs=n%this._DB;
+var cbs=this._DB-bs;
+var bm=(1<<cbs)-1;
+var ds=Math.floor(n/this._DB),c=(this.s<<bs)&this._DM,i;
+for(i=this.t-1;i>=0;--i){
+r[i+ds+1]=(this[i]>>cbs)|c;
+c=(this[i]&bm)<<bs;
+}
+for(i=ds-1;i>=0;--i){
+r[i]=0;
+}
+r[ds]=c;
+r.t=this.t+ds+1;
+r.s=this.s;
+r._clamp();
+};
+function _1b(n,r){
+r.s=this.s;
+var ds=Math.floor(n/this._DB);
+if(ds>=this.t){
+r.t=0;
+return;
+}
+var bs=n%this._DB;
+var cbs=this._DB-bs;
+var bm=(1<<bs)-1;
+r[0]=this[ds]>>bs;
+for(var i=ds+1;i<this.t;++i){
+r[i-ds-1]|=(this[i]&bm)<<cbs;
+r[i-ds]=this[i]>>bs;
+}
+if(bs>0){
+r[this.t-ds-1]|=(this.s&bm)<<cbs;
+}
+r.t=this.t-ds;
+r._clamp();
+};
+function _1c(a,r){
+var i=0,c=0,m=Math.min(a.t,this.t);
+while(i<m){
+c+=this[i]-a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+if(a.t<this.t){
+c-=a.s;
+while(i<this.t){
+c+=this[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c+=this.s;
+}else{
+c+=this.s;
+while(i<a.t){
+c-=a[i];
+r[i++]=c&this._DM;
+c>>=this._DB;
+}
+c-=a.s;
+}
+r.s=(c<0)?-1:0;
+if(c<-1){
+r[i++]=this._DV+c;
+}else{
+if(c>0){
+r[i++]=c;
+}
+}
+r.t=i;
+r._clamp();
+};
+function _1d(a,r){
+var x=this.abs(),y=a.abs();
+var i=x.t;
+r.t=i+y.t;
+while(--i>=0){
+r[i]=0;
+}
+for(i=0;i<y.t;++i){
+r[i+x.t]=x.am(0,y[i],r,i,0,x.t);
+}
+r.s=0;
+r._clamp();
+if(this.s!=a.s){
+_4.ZERO._subTo(r,r);
+}
+};
+function _1e(r){
+var x=this.abs();
+var i=r.t=2*x.t;
+while(--i>=0){
+r[i]=0;
+}
+for(i=0;i<x.t-1;++i){
+var c=x.am(i,x[i],r,2*i,0,1);
+if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1))>=x._DV){
+r[i+x.t]-=x._DV;
+r[i+x.t+1]=1;
+}
+}
+if(r.t>0){
+r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);
+}
+r.s=0;
+r._clamp();
+};
+function _1f(m,q,r){
+var pm=m.abs();
+if(pm.t<=0){
+return;
+}
+var pt=this.abs();
+if(pt.t<pm.t){
+if(q!=null){
+q._fromInt(0);
+}
+if(r!=null){
+this._copyTo(r);
+}
+return;
+}
+if(r==null){
+r=_5();
+}
+var y=_5(),ts=this.s,ms=m.s;
+var nsh=this._DB-_16(pm[pm.t-1]);
+if(nsh>0){
+pm._lShiftTo(nsh,y);
+pt._lShiftTo(nsh,r);
+}else{
+pm._copyTo(y);
+pt._copyTo(r);
+}
+var ys=y.t;
+var y0=y[ys-1];
+if(y0==0){
+return;
+}
+var yt=y0*(1<<this._F1)+((ys>1)?y[ys-2]>>this._F2:0);
+var d1=this._FV/yt,d2=(1<<this._F1)/yt,e=1<<this._F2;
+var i=r.t,j=i-ys,t=(q==null)?_5():q;
+y._dlShiftTo(j,t);
+if(r.compareTo(t)>=0){
+r[r.t++]=1;
+r._subTo(t,r);
+}
+_4.ONE._dlShiftTo(ys,t);
+t._subTo(y,y);
+while(y.t<ys){
+y[y.t++]=0;
+}
+while(--j>=0){
+var qd=(r[--i]==y0)?this._DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
+if((r[i]+=y.am(0,qd,r,j,0,ys))<qd){
+y._dlShiftTo(j,t);
+r._subTo(t,r);
+while(r[i]<--qd){
+r._subTo(t,r);
+}
+}
+}
+if(q!=null){
+r._drShiftTo(ys,q);
+if(ts!=ms){
+_4.ZERO._subTo(q,q);
+}
+}
+r.t=ys;
+r._clamp();
+if(nsh>0){
+r._rShiftTo(nsh,r);
+}
+if(ts<0){
+_4.ZERO._subTo(r,r);
+}
+};
+function _20(a){
+var r=_5();
+this.abs()._divRemTo(a,null,r);
+if(this.s<0&&r.compareTo(_4.ZERO)>0){
+a._subTo(r,r);
+}
+return r;
+};
+function _21(m){
+this.m=m;
+};
+function _22(x){
+if(x.s<0||x.compareTo(this.m)>=0){
+return x.mod(this.m);
+}else{
+return x;
+}
+};
+function _23(x){
+return x;
+};
+function _24(x){
+x._divRemTo(this.m,null,x);
+};
+function _25(x,y,r){
+x._multiplyTo(y,r);
+this.reduce(r);
+};
+function _26(x,r){
+x._squareTo(r);
+this.reduce(r);
+};
+dojo.extend(_21,{convert:_22,revert:_23,reduce:_24,mulTo:_25,sqrTo:_26});
+function _27(){
+if(this.t<1){
+return 0;
+}
+var x=this[0];
+if((x&1)==0){
+return 0;
+}
+var y=x&3;
+y=(y*(2-(x&15)*y))&15;
+y=(y*(2-(x&255)*y))&255;
+y=(y*(2-(((x&65535)*y)&65535)))&65535;
+y=(y*(2-x*y%this._DV))%this._DV;
+return (y>0)?this._DV-y:-y;
+};
+function _28(m){
+this.m=m;
+this.mp=m._invDigit();
+this.mpl=this.mp&32767;
+this.mph=this.mp>>15;
+this.um=(1<<(m._DB-15))-1;
+this.mt2=2*m.t;
+};
+function _29(x){
+var r=_5();
+x.abs()._dlShiftTo(this.m.t,r);
+r._divRemTo(this.m,null,r);
+if(x.s<0&&r.compareTo(_4.ZERO)>0){
+this.m._subTo(r,r);
+}
+return r;
+};
+function _2a(x){
+var r=_5();
+x._copyTo(r);
+this.reduce(r);
+return r;
+};
+function _2b(x){
+while(x.t<=this.mt2){
+x[x.t++]=0;
+}
+for(var i=0;i<this.m.t;++i){
+var j=x[i]&32767;
+var u0=(j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x._DM;
+j=i+this.m.t;
+x[j]+=this.m.am(0,u0,x,i,0,this.m.t);
+while(x[j]>=x._DV){
+x[j]-=x._DV;
+x[++j]++;
+}
+}
+x._clamp();
+x._drShiftTo(this.m.t,x);
+if(x.compareTo(this.m)>=0){
+x._subTo(this.m,x);
+}
+};
+function _2c(x,r){
+x._squareTo(r);
+this.reduce(r);
+};
+function _2d(x,y,r){
+x._multiplyTo(y,r);
+this.reduce(r);
+};
+dojo.extend(_28,{convert:_29,revert:_2a,reduce:_2b,mulTo:_2d,sqrTo:_2c});
+function _2e(){
+return ((this.t>0)?(this[0]&1):this.s)==0;
+};
+function _2f(e,z){
+if(e>4294967295||e<1){
+return _4.ONE;
+}
+var r=_5(),r2=_5(),g=z.convert(this),i=_16(e)-1;
+g._copyTo(r);
+while(--i>=0){
+z.sqrTo(r,r2);
+if((e&(1<<i))>0){
+z.mulTo(r2,g,r);
+}else{
+var t=r;
+r=r2;
+r2=t;
+}
+}
+return z.revert(r);
+};
+function _30(e,m){
+var z;
+if(e<256||m._isEven()){
+z=new _21(m);
+}else{
+z=new _28(m);
+}
+return this._exp(e,z);
+};
+dojo.extend(_4,{_DB:_1,_DM:(1<<_1)-1,_DV:1<<_1,_FV:Math.pow(2,_9),_F1:_9-_1,_F2:2*_1-_9,_copyTo:_e,_fromInt:_f,_fromString:_10,_clamp:_11,_dlShiftTo:_18,_drShiftTo:_19,_lShiftTo:_1a,_rShiftTo:_1b,_subTo:_1c,_multiplyTo:_1d,_squareTo:_1e,_divRemTo:_1f,_invDigit:_27,_isEven:_2e,_exp:_2f,toString:_12,negate:_13,abs:_14,compareTo:_15,bitLength:_17,mod:_20,modPowInt:_30});
+dojo._mixin(_4,{ZERO:nbv(0),ONE:nbv(1),_nbi:_5,_nbv:nbv,_nbits:_16,_Montgomery:_28});
+dojox.math.BigInteger=_4;
+})();
+}
Index: trunk/web/dojo/dojox/html/resources/ellipsis.css
===================================================================
--- trunk/web/dojo/dojox/html/resources/ellipsis.css	(revision 0)
+++ trunk/web/dojo/dojox/html/resources/ellipsis.css	(revision 9)
@@ -0,0 +1,33 @@
+.dojoxEllipsis,
+.dojoxEllipsisShown {
+	white-space: nowrap;
+	width: 100%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	-o-text-overflow: ellipsis;
+	-webkit-text-overflow: ellipsis;
+}
+.dojoxEllipsis window {
+    width:100%;
+    -moz-user-focus:normal;
+    -moz-user-select:text;
+}
+.dojoxEllipsis description{
+    -moz-user-focus:normal;
+    -moz-user-select:text;
+}
+.dojoxEllipsisIFrame{
+	white-space: normal;
+	border: none;
+	width: 100%;
+	display: block;
+	height: 1px;
+	margin-top: -1px;
+	clear: both;
+}
+.dojoxEllipsisContainer{
+	width: 100%;
+}
+.dojoxEllipsisShown:after{
+	content: "\2026"
+}
Index: trunk/web/dojo/dojox/html/README
===================================================================
--- trunk/web/dojo/dojox/html/README	(revision 0)
+++ trunk/web/dojo/dojox/html/README	(revision 9)
@@ -0,0 +1,50 @@
+-------------------------------------------------------------------------------
+dojox.html
+-------------------------------------------------------------------------------
+Version 0.2
+Release date: 04/24/2008
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Eugene Lazutkin (eugene.lazutkin AT gmail.com)
+	Scott J. Miles (sjmiles AT activegrid.com)
+	Steve Orvell (sorvell AT activegrid.com)
+	Tom Trenka (ttrenka AT gmail.com)
+	Bryan Forbes (bryan AT reigndropsfall.net)
+	Mike Wilcox - dojox.html.styles (anm8tr AT yahoo.com)
+	Nathan Toone - dojox.html.ellipsis (toonetown AT dojotoolkit.org)
+	Jared Jurkiewicz - dojox.html.entites, dojox.html.format (jared.jurkiewicz AT gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+This project aims to add html functions that aren't used often enough to
+warrant going into Dojo Core but should not be duplicated.  For instance, font
+measurement routines aren't used by the majority of developers, but are complex
+enough to not be duplicated.
+Styles adds the ability to create and remove dynamic cssRules, as well as 
+manipulate document style sheets.
+Ellipsis adds some css definitions and dojo.behavior rules (for FF) to support
+text-overflow: ellipsis
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojox.html nor dojox.html.styles have dependencies, outside of Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+To automatically initialize the font resize callback, add "fontSizeWatch: true"
+to your djConfig.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/html.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/html/*
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/html/styles.js
+Install into the following directory structure:
+/dojox/html/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/html/styles.js
===================================================================
--- trunk/web/dojo/dojox/html/styles.js	(revision 0)
+++ trunk/web/dojo/dojox/html/styles.js	(revision 9)
@@ -0,0 +1,188 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.styles"]){
+dojo._hasResource["dojox.html.styles"]=true;
+dojo.provide("dojox.html.styles");
+(function(){
+var _1={};
+var _2={};
+var _3=[];
+var _4=[];
+dojox.html.insertCssRule=function(_5,_6,_7){
+var ss=dojox.html.getDynamicStyleSheet(_7);
+var _8=_5+" {"+_6+"}";
+if(dojo.isIE){
+ss.cssText+=_8;
+}else{
+if(ss.sheet){
+ss.sheet.insertRule(_8,ss._indicies.length);
+}else{
+ss.appendChild(dojo.doc.createTextNode(_8));
+}
+}
+ss._indicies.push(_5+" "+_6);
+return _5;
+};
+dojox.html.removeCssRule=function(_9,_a,_b){
+var ss;
+var _c=-1;
+for(var nm in _1){
+if(_b&&_b!=nm){
+continue;
+}
+ss=_1[nm];
+for(var i=0;i<ss._indicies.length;i++){
+if(_9+" "+_a==ss._indicies[i]){
+_c=i;
+break;
+}
+}
+if(_c>-1){
+break;
+}
+}
+if(!ss){
+return false;
+}
+if(_c==-1){
+return false;
+}
+ss._indicies.splice(_c,1);
+if(dojo.isIE){
+ss.removeRule(_c);
+}else{
+if(ss.sheet){
+ss.sheet.deleteRule(_c);
+}else{
+if(document.styleSheets[0]){
+}
+}
+}
+return true;
+};
+dojox.html.getStyleSheet=function(_d){
+if(_1[_d||"default"]){
+return _1[_d||"default"];
+}
+if(!_d){
+return false;
+}
+var _e=dojox.html.getStyleSheets();
+if(_e[_d]){
+return dojox.html.getStyleSheets()[_d];
+}
+for(var nm in _e){
+if(_e[nm].href&&_e[nm].href.indexOf(_d)>-1){
+return _e[nm];
+}
+}
+return false;
+};
+dojox.html.getDynamicStyleSheet=function(_f){
+if(!_f){
+_f="default";
+}
+if(!_1[_f]){
+if(dojo.doc.createStyleSheet){
+_1[_f]=dojo.doc.createStyleSheet();
+_1[_f].title=_f;
+}else{
+_1[_f]=dojo.doc.createElement("style");
+_1[_f].setAttribute("type","text/css");
+dojo.doc.getElementsByTagName("head")[0].appendChild(_1[_f]);
+}
+_1[_f]._indicies=[];
+}
+return _1[_f];
+};
+dojox.html.enableStyleSheet=function(_10){
+var ss=dojox.html.getStyleSheet(_10);
+if(ss){
+if(ss.sheet){
+ss.sheet.disabled=false;
+}else{
+ss.disabled=false;
+}
+}
+};
+dojox.html.disableStyleSheet=function(_11){
+var ss=dojox.html.getStyleSheet(_11);
+if(ss){
+if(ss.sheet){
+ss.sheet.disabled=true;
+}else{
+ss.disabled=true;
+}
+}
+};
+dojox.html.activeStyleSheet=function(_12){
+var _13=dojox.html.getToggledStyleSheets();
+if(arguments.length==1){
+dojo.forEach(_13,function(s){
+s.disabled=(s.title==_12)?false:true;
+});
+}else{
+for(var i=0;i<_13.length;i++){
+if(_13[i].disabled==false){
+return _13[i];
+}
+}
+}
+return true;
+};
+dojox.html.getPreferredStyleSheet=function(){
+};
+dojox.html.getToggledStyleSheets=function(){
+if(!_3.length){
+var _14=dojox.html.getStyleSheets();
+for(var nm in _14){
+if(_14[nm].title){
+_3.push(_14[nm]);
+}
+}
+}
+return _3;
+};
+dojox.html.getStyleSheets=function(){
+if(_2.collected){
+return _2;
+}
+var _15=dojo.doc.styleSheets;
+dojo.forEach(_15,function(n){
+var s=(n.sheet)?n.sheet:n;
+var _16=s.title||s.href;
+if(dojo.isIE){
+if(s.cssText.indexOf("#default#VML")==-1){
+if(s.href){
+_2[_16]=s;
+}else{
+if(s.imports.length){
+dojo.forEach(s.imports,function(si){
+_2[si.title||si.href]=si;
+});
+}else{
+_2[_16]=s;
+}
+}
+}
+}else{
+_2[_16]=s;
+_2[_16].id=s.ownerNode.id;
+dojo.forEach(s.cssRules,function(r){
+if(r.href){
+_2[r.href]=r.styleSheet;
+_2[r.href].id=s.ownerNode.id;
+}
+});
+}
+});
+_2.collected=true;
+return _2;
+};
+})();
+}
Index: trunk/web/dojo/dojox/html/ellipsis.js
===================================================================
--- trunk/web/dojo/dojox/html/ellipsis.js	(revision 0)
+++ trunk/web/dojo/dojox/html/ellipsis.js	(revision 9)
@@ -0,0 +1,168 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.ellipsis"]){
+dojo._hasResource["dojox.html.ellipsis"]=true;
+dojo.provide("dojox.html.ellipsis");
+(function(d){
+if(d.isMoz){
+var _1=1;
+if("dojoxFFEllipsisDelay" in d.config){
+_1=Number(d.config.dojoxFFEllipsisDelay);
+if(isNaN(_1)){
+_1=1;
+}
+}
+var _2="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+var _3=document.createElementNS(_2,"window");
+var _4=document.createElementNS(_2,"description");
+_4.setAttribute("crop","end");
+_3.appendChild(_4);
+var _5=function(n){
+var x=_3.cloneNode(true);
+x.firstChild.setAttribute("value",n.textContent);
+n.innerHTML="";
+n.appendChild(x);
+};
+var _6=d.create;
+var dd=d.doc;
+var dp=d.place;
+var _7=_6("iframe",{className:"dojoxEllipsisIFrame",src:"javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'"});
+var _8=function(r,_9){
+if(r.collapsed){
+return;
+}
+if(_9>0){
+do{
+_8(r);
+_9--;
+}while(_9);
+return;
+}
+if(r.endContainer.nodeType==3&&r.endOffset>0){
+r.setEnd(r.endContainer,r.endOffset-1);
+}else{
+if(r.endContainer.nodeType==3){
+r.setEndBefore(r.endContainer);
+_8(r);
+return;
+}else{
+if(r.endOffset&&r.endContainer.childNodes.length>=r.endOffset){
+var _a=r.endContainer.childNodes[r.endOffset-1];
+if(_a.nodeType==3){
+r.setEnd(_a,_a.length-1);
+}else{
+if(_a.childNodes.length){
+r.setEnd(_a,_a.childNodes.length);
+_8(r);
+return;
+}else{
+r.setEndBefore(_a);
+_8(r);
+return;
+}
+}
+}else{
+r.setEndBefore(r.endContainer);
+_8(r);
+return;
+}
+}
+}
+};
+var _b=function(n){
+var c=_6("div",{className:"dojoxEllipsisContainer"});
+var e=_6("div",{className:"dojoxEllipsisShown",style:{display:"none"}});
+n.parentNode.replaceChild(c,n);
+c.appendChild(n);
+c.appendChild(e);
+var i=_7.cloneNode(true);
+var ns=n.style;
+var es=e.style;
+var _c;
+var _d=function(){
+ns.display="";
+es.display="none";
+if(n.scrollWidth<=n.offsetWidth){
+return;
+}
+var r=dd.createRange();
+r.selectNodeContents(n);
+ns.display="none";
+es.display="";
+var _e=false;
+do{
+var _f=1;
+dp(r.cloneContents(),e,"only");
+var sw=e.scrollWidth,ow=e.offsetWidth;
+_e=(sw<=ow);
+var pct=(1-((ow*1)/sw));
+if(pct>0){
+_f=Math.max(Math.round(e.textContent.length*pct)-1,1);
+}
+_8(r,_f);
+}while(!r.collapsed&&!_e);
+};
+i.onload=function(){
+i.contentWindow.onresize=_d;
+_d();
+};
+c.appendChild(i);
+};
+var hc=d.hasClass;
+var doc=d.doc;
+var s,fn,opt;
+if(doc.querySelectorAll){
+s=doc;
+fn="querySelectorAll";
+opt=".dojoxEllipsis";
+}else{
+if(doc.getElementsByClassName){
+s=doc;
+fn="getElementsByClassName";
+opt="dojoxEllipsis";
+}else{
+s=d;
+fn="query";
+opt=".dojoxEllipsis";
+}
+}
+fx=function(){
+d.forEach(s[fn].apply(s,[opt]),function(n){
+if(!n||n._djx_ellipsis_done){
+return;
+}
+n._djx_ellipsis_done=true;
+if(n.textContent==n.innerHTML&&!hc(n,"dojoxEllipsisSelectable")){
+_5(n);
+}else{
+_b(n);
+}
+});
+};
+d.addOnLoad(function(){
+var t=null;
+var c=null;
+var _10=function(){
+if(c){
+d.disconnect(c);
+c=null;
+}
+if(t){
+clearTimeout(t);
+}
+t=setTimeout(function(){
+t=null;
+fx();
+c=d.connect(d.body(),"DOMSubtreeModified",_10);
+},_1);
+};
+_10();
+});
+}
+})(dojo);
+}
Index: trunk/web/dojo/dojox/html/entities.js
===================================================================
--- trunk/web/dojo/dojox/html/entities.js	(revision 0)
+++ trunk/web/dojo/dojox/html/entities.js	(revision 9)
@@ -0,0 +1,85 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.entities"]){
+dojo._hasResource["dojox.html.entities"]=true;
+dojo.provide("dojox.html.entities");
+(function(){
+var _1=function(_2,_3){
+var _4,_5;
+if(_3._encCache&&_3._encCache.regexp&&_3._encCache.mapper&&_3.length==_3._encCache.length){
+_4=_3._encCache.mapper;
+_5=_3._encCache.regexp;
+}else{
+_4={};
+_5=["["];
+var i;
+for(i=0;i<_3.length;i++){
+_4[_3[i][0]]="&"+_3[i][1]+";";
+_5.push(_3[i][0]);
+}
+_5.push("]");
+_5=new RegExp(_5.join(""),"g");
+_3._encCache={mapper:_4,regexp:_5,length:_3.length};
+}
+_2=_2.replace(_5,function(c){
+return _4[c];
+});
+return _2;
+};
+var _6=function(_7,_8){
+var _9,_a;
+if(_8._decCache&&_8._decCache.regexp&&_8._decCache.mapper&&_8.length==_8._decCache.length){
+_9=_8._decCache.mapper;
+_a=_8._decCache.regexp;
+}else{
+_9={};
+_a=["("];
+var i;
+for(i=0;i<_8.length;i++){
+var e="&"+_8[i][1]+";";
+if(i){
+_a.push("|");
+}
+_9[e]=_8[i][0];
+_a.push(e);
+}
+_a.push(")");
+_a=new RegExp(_a.join(""),"g");
+_8._decCache={mapper:_9,regexp:_a,length:_8.length};
+}
+_7=_7.replace(_a,function(c){
+return _9[c];
+});
+return _7;
+};
+dojox.html.entities.html=[["&","amp"],["\"","quot"],["<","lt"],[">","gt"],[" ","nbsp"]];
+dojox.html.entities.latin=[["¡","iexcl"],["¢","cent"],["£","pound"],["€","euro"],["¤","curren"],["¥","yen"],["¦","brvbar"],["§","sect"],["¨","uml"],["©","copy"],["ª","ordf"],["«","laquo"],["¬","not"],["­","shy"],["®","reg"],["¯","macr"],["°","deg"],["±","plusmn"],["²","sup2"],["³","sup3"],["´","acute"],["µ","micro"],["¶","para"],["·","middot"],["¸","cedil"],["¹","sup1"],["º","ordm"],["»","raquo"],["¼","frac14"],["½","frac12"],["¾","frac34"],["¿","iquest"],["À","Agrave"],["Á","Aacute"],["Â","Acirc"],["Ã","Atilde"],["Ä","Auml"],["Å","Aring"],["Æ","AElig"],["Ç","Ccedil"],["È","Egrave"],["É","Eacute"],["Ê","Ecirc"],["Ë","Euml"],["Ì","Igrave"],["Í","Iacute"],["Î","Icirc"],["Ï","Iuml"],["Ð","ETH"],["Ñ","Ntilde"],["Ò","Ograve"],["Ó","Oacute"],["Ô","Ocirc"],["Õ","Otilde"],["Ö","Ouml"],["×","times"],["Ø","Oslash"],["Ù","Ugrave"],["Ú","Uacute"],["Û","Ucirc"],["Ü","Uuml"],["Ý","Yacute"],["Þ","THORN"],["ß","szlig"],["à","agrave"],["á","aacute"],["â","acirc"],["ã","atilde"],["ä","auml"],["å","aring"],["æ","aelig"],["ç","ccedil"],["è","egrave"],["é","eacute"],["ê","ecirc"],["ë","euml"],["ì","igrave"],["í","iacute"],["î","icirc"],["ï","iuml"],["ð","eth"],["ñ","ntilde"],["ò","ograve"],["ó","oacute"],["ô","ocirc"],["õ","otilde"],["ö","ouml"],["÷","divide"],["ø","oslash"],["ù","ugrave"],["ú","uacute"],["û","ucirc"],["ü","uuml"],["ý","yacute"],["þ","thorn"],["ÿ","yuml"],["ƒ","fnof"],["Α","Alpha"],["Β","Beta"],["Γ","Gamma"],["Δ","Delta"],["Ε","Epsilon"],["Ζ","Zeta"],["Η","Eta"],["Θ","Theta"],["Ι","Iota"],["Κ","Kappa"],["Λ","Lambda"],["Μ","Mu"],["Ν","Nu"],["Ξ","Xi"],["Ο","Omicron"],["Π","Pi"],["Ρ","Rho"],["Σ","Sigma"],["Τ","Tau"],["Υ","Upsilon"],["Φ","Phi"],["Χ","Chi"],["Ψ","Psi"],["Ω","Omega"],["α","alpha"],["β","beta"],["γ","gamma"],["δ","delta"],["ε","epsilon"],["ζ","zeta"],["η","eta"],["θ","theta"],["ι","iota"],["κ","kappa"],["λ","lambda"],["μ","mu"],["ν","nu"],["ξ","xi"],["ο","omicron"],["π","pi"],["ρ","rho"],["ς","sigmaf"],["σ","sigma"],["τ","tau"],["υ","upsilon"],["φ","phi"],["χ","chi"],["ψ","psi"],["ω","omega"],["ϑ","thetasym"],["ϒ","upsih"],["ϖ","piv"],["•","bull"],["…","hellip"],["′","prime"],["″","Prime"],["‾","oline"],["⁄","frasl"],["℘","weierp"],["ℑ","image"],["ℜ","real"],["™","trade"],["ℵ","alefsym"],["←","larr"],["↑","uarr"],["→","rarr"],["↓","darr"],["↔","harr"],["↵","crarr"],["⇐","lArr"],["⇑","uArr"],["⇒","rArr"],["⇓","dArr"],["⇔","hArr"],["∀","forall"],["∂","part"],["∃","exist"],["∅","empty"],["∇","nabla"],["∈","isin"],["∉","notin"],["∋","ni"],["∏","prod"],["∑","sum"],["−","minus"],["∗","lowast"],["√","radic"],["∝","prop"],["∞","infin"],["∠","ang"],["∧","and"],["∨","or"],["∩","cap"],["∪","cup"],["∫","int"],["∴","there4"],["∼","sim"],["≅","cong"],["≈","asymp"],["≠","ne"],["≡","equiv"],["≤","le"],["≥","ge"],["⊂","sub"],["⊃","sup"],["⊄","nsub"],["⊆","sube"],["⊇","supe"],["⊕","oplus"],["⊗","otimes"],["⊥","perp"],["⋅","sdot"],["⌈","lceil"],["⌉","rceil"],["⌊","lfloor"],["⌋","rfloor"],["〈","lang"],["〉","rang"],["◊","loz"],["♠","spades"],["♣","clubs"],["♥","hearts"],["♦","diams"],["Œ","Elig"],["œ","oelig"],["Š","Scaron"],["š","scaron"],["Ÿ","Yuml"],["ˆ","circ"],["˜","tilde"],[" ","ensp"],[" ","emsp"],[" ","thinsp"],["‌","zwnj"],["‍","zwj"],["‎","lrm"],["‏","rlm"],["–","ndash"],["—","mdash"],["‘","lsquo"],["’","rsquo"],["‚","sbquo"],["“","ldquo"],["”","rdquo"],["„","bdquo"],["†","dagger"],["‡","Dagger"],["‰","permil"],["‹","lsaquo"],["›","rsaquo"]];
+dojox.html.entities.encode=function(_b,m){
+if(_b){
+if(!m){
+_b=_1(_b,dojox.html.entities.html);
+_b=_1(_b,dojox.html.entities.latin);
+}else{
+_b=_1(_b,m);
+}
+}
+return _b;
+};
+dojox.html.entities.decode=function(_c,m){
+if(_c){
+if(!m){
+_c=_6(_c,dojox.html.entities.html);
+_c=_6(_c,dojox.html.entities.latin);
+}else{
+_c=_6(_c,m);
+}
+}
+return _c;
+};
+})();
+}
Index: trunk/web/dojo/dojox/html/metrics.js
===================================================================
--- trunk/web/dojo/dojox/html/metrics.js	(revision 0)
+++ trunk/web/dojo/dojox/html/metrics.js	(revision 9)
@@ -0,0 +1,155 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.metrics"]){
+dojo._hasResource["dojox.html.metrics"]=true;
+dojo.provide("dojox.html.metrics");
+(function(){
+var _1=dojox.html.metrics;
+_1.getFontMeasurements=function(){
+var _2={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};
+if(dojo.isIE){
+dojo.doc.documentElement.style.fontSize="100%";
+}
+var _3=dojo.doc.createElement("div");
+var ds=_3.style;
+ds.position="absolute";
+ds.left="-100px";
+ds.top="0";
+ds.width="30px";
+ds.height="1000em";
+ds.borderWidth="0";
+ds.margin="0";
+ds.padding="0";
+ds.outline="0";
+ds.lineHeight="1";
+ds.overflow="hidden";
+dojo.body().appendChild(_3);
+for(var p in _2){
+ds.fontSize=p;
+_2[p]=Math.round(_3.offsetHeight*12/16)*16/12/1000;
+}
+dojo.body().removeChild(_3);
+_3=null;
+return _2;
+};
+var _4=null;
+_1.getCachedFontMeasurements=function(_5){
+if(_5||!_4){
+_4=_1.getFontMeasurements();
+}
+return _4;
+};
+var _6=null,_7={};
+_1.getTextBox=function(_8,_9,_a){
+var m,s;
+if(!_6){
+m=_6=dojo.doc.createElement("div");
+var c=dojo.doc.createElement("div");
+c.appendChild(m);
+s=c.style;
+s.overflow="scroll";
+s.position="absolute";
+s.left="0px";
+s.top="-10000px";
+s.width="1px";
+s.height="1px";
+s.visibility="hidden";
+s.borderWidth="0";
+s.margin="0";
+s.padding="0";
+s.outline="0";
+dojo.body().appendChild(c);
+}else{
+m=_6;
+}
+m.className="";
+s=m.style;
+s.borderWidth="0";
+s.margin="0";
+s.padding="0";
+s.outline="0";
+if(arguments.length>1&&_9){
+for(var i in _9){
+if(i in _7){
+continue;
+}
+s[i]=_9[i];
+}
+}
+if(arguments.length>2&&_a){
+m.className=_a;
+}
+m.innerHTML=_8;
+var _b=dojo.position(m);
+_b.w=m.parentNode.scrollWidth;
+return _b;
+};
+var _c={w:16,h:16};
+_1.getScrollbar=function(){
+return {w:_c.w,h:_c.h};
+};
+_1._fontResizeNode=null;
+_1.initOnFontResize=function(_d){
+var f=_1._fontResizeNode=dojo.doc.createElement("iframe");
+var fs=f.style;
+fs.position="absolute";
+fs.width="5em";
+fs.height="10em";
+fs.top="-10000px";
+if(dojo.isIE){
+f.onreadystatechange=function(){
+if(f.contentWindow.document.readyState=="complete"){
+f.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+}
+};
+}else{
+f.onload=function(){
+f.contentWindow.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+};
+}
+f.setAttribute("src","javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'");
+dojo.body().appendChild(f);
+_1.initOnFontResize=function(){
+};
+};
+_1.onFontResize=function(){
+};
+_1._fontresize=function(){
+_1.onFontResize();
+};
+dojo.addOnUnload(function(){
+var f=_1._fontResizeNode;
+if(f){
+if(dojo.isIE&&f.onresize){
+f.onresize=null;
+}else{
+if(f.contentWindow&&f.contentWindow.onresize){
+f.contentWindow.onresize=null;
+}
+}
+_1._fontResizeNode=null;
+}
+});
+dojo.addOnLoad(function(){
+try{
+var n=dojo.doc.createElement("div");
+n.style.cssText="top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";
+dojo.body().appendChild(n);
+_c.w=n.offsetWidth-n.clientWidth;
+_c.h=n.offsetHeight-n.clientHeight;
+dojo.body().removeChild(n);
+delete n;
+}
+catch(e){
+}
+if("fontSizeWatch" in dojo.config&&!!dojo.config.fontSizeWatch){
+_1.initOnFontResize();
+}
+});
+})();
+}
Index: trunk/web/dojo/dojox/html/format.js
===================================================================
--- trunk/web/dojo/dojox/html/format.js	(revision 0)
+++ trunk/web/dojo/dojox/html/format.js	(revision 9)
@@ -0,0 +1,344 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.format"]){
+dojo._hasResource["dojox.html.format"]=true;
+dojo.provide("dojox.html.format");
+dojo.require("dojox.html.entities");
+(function(){
+dojox.html.format.prettyPrint=function(_1,_2,_3,_4,_5){
+var _6=[];
+var _7=0;
+var _8=[];
+var _9="\t";
+var _a="";
+var _b=[];
+var i;
+var _c=/[=]([^"']+?)(\s|>)/g;
+var _d=/style=("[^"]*"|'[^']*'|\S*)/gi;
+var _e=/\s\w+=("[^"]*"|'[^']*'|\S*)/gi;
+if(_2&&_2>0&&_2<10){
+_9="";
+for(i=0;i<_2;i++){
+_9+=" ";
+}
+}
+var _f=dojo.doc.createElement("div");
+_f.innerHTML=_1;
+var _10=dojox.html.entities.encode;
+var _11=dojox.html.entities.decode;
+var _12=function(tag){
+switch(tag){
+case "a":
+case "b":
+case "strong":
+case "s":
+case "strike":
+case "i":
+case "u":
+case "em":
+case "sup":
+case "sub":
+case "span":
+case "font":
+case "big":
+case "cite":
+case "q":
+case "small":
+return true;
+default:
+return false;
+}
+};
+var div=_f.ownerDocument.createElement("div");
+var _13=function(_14){
+var _15=_14.cloneNode(false);
+div.appendChild(_15);
+var _16=div.innerHTML;
+div.innerHTML="";
+return _16;
+};
+var _17=function(){
+var i,txt="";
+for(i=0;i<_7;i++){
+txt+=_9;
+}
+return txt.length;
+};
+var _18=function(){
+var i;
+for(i=0;i<_7;i++){
+_6.push(_9);
+}
+};
+var _19=function(){
+_6.push("\n");
+};
+var _1a=function(n){
+_a+=_10(n.nodeValue,_4);
+};
+var _1b=function(txt){
+var i;
+var _1c;
+var _1d=txt.split("\n");
+for(i=0;i<_1d.length;i++){
+_1d[i]=dojo.trim(_1d[i]);
+}
+txt=_1d.join(" ");
+txt=dojo.trim(txt);
+if(txt!==""){
+var _1e=[];
+if(_3&&_3>0){
+var _1f=_17();
+var _20=_3;
+if(_3>_1f){
+_20-=_1f;
+}
+while(txt){
+if(txt.length>_3){
+for(i=_20;(i>0&&txt.charAt(i)!==" ");i--){
+}
+if(!i){
+for(i=_20;(i<txt.length&&txt.charAt(i)!==" ");i++){
+}
+}
+var _21=txt.substring(0,i);
+_21=dojo.trim(_21);
+txt=dojo.trim(txt.substring((i==txt.length)?txt.length:i+1,txt.length));
+if(_21){
+_1c="";
+for(i=0;i<_7;i++){
+_1c+=_9;
+}
+_21=_1c+_21+"\n";
+}
+_1e.push(_21);
+}else{
+_1c="";
+for(i=0;i<_7;i++){
+_1c+=_9;
+}
+txt=_1c+txt+"\n";
+_1e.push(txt);
+txt=null;
+}
+}
+return _1e.join("");
+}else{
+_1c="";
+for(i=0;i<_7;i++){
+_1c+=_9;
+}
+txt=_1c+txt+"\n";
+return txt;
+}
+}else{
+return "";
+}
+};
+var _22=function(txt){
+if(txt){
+txt=txt.replace(/&quot;/gi,"\"");
+txt=txt.replace(/&gt;/gi,">");
+txt=txt.replace(/&lt;/gi,"<");
+txt=txt.replace(/&amp;/gi,"&");
+}
+return txt;
+};
+var _23=function(txt){
+if(txt){
+txt=_22(txt);
+var i,t,c,_24;
+var _25=0;
+var _26=txt.split("\n");
+var _27=[];
+for(i=0;i<_26.length;i++){
+var _28=_26[i];
+var _29=(_28.indexOf("\n")>-1);
+_28=dojo.trim(_28);
+if(_28){
+var _2a=_25;
+for(c=0;c<_28.length;c++){
+var ch=_28.charAt(c);
+if(ch==="{"){
+_25++;
+}else{
+if(ch==="}"){
+_25--;
+_2a=_25;
+}
+}
+}
+_24="";
+for(t=0;t<_7+_2a;t++){
+_24+=_9;
+}
+_27.push(_24+_28+"\n");
+}else{
+if(_29&&i===0){
+_27.push("\n");
+}
+}
+}
+txt=_27.join("");
+}
+return txt;
+};
+var _2b=function(_2c){
+var _2d=_2c.nodeName.toLowerCase();
+var _2e=dojo.trim(_13(_2c));
+var tag=_2e.substring(0,_2e.indexOf(">")+1);
+tag=tag.replace(_c,"=\"$1\"$2");
+tag=tag.replace(_d,function(_2f){
+var sL=_2f.substring(0,6);
+var _30=_2f.substring(6,_2f.length);
+var _31=_30.charAt(0);
+_30=dojo.trim(_30.substring(1,_30.length-1));
+_30=_30.split(";");
+var _32=[];
+dojo.forEach(_30,function(s){
+s=dojo.trim(s);
+if(s){
+s=s.substring(0,s.indexOf(":")).toLowerCase()+s.substring(s.indexOf(":"),s.length);
+_32.push(s);
+}
+});
+_32=_32.sort();
+_30=_32.join("; ");
+var ts=dojo.trim(_30);
+if(!ts||ts===";"){
+return "";
+}else{
+_30+=";";
+return sL+_31+_30+_31;
+}
+});
+var _33=[];
+tag=tag.replace(_e,function(_34){
+_33.push(dojo.trim(_34));
+return "";
+});
+_33=_33.sort();
+tag="<"+_2d;
+if(_33.length){
+tag+=" "+_33.join(" ");
+}
+if(_2e.indexOf("</")!=-1){
+_8.push(_2d);
+tag+=">";
+}else{
+if(_5){
+tag+=" />";
+}else{
+tag+=">";
+}
+_8.push(false);
+}
+var _35=_12(_2d);
+_b.push(_35);
+if(_a&&!_35){
+_6.push(_1b(_a));
+_a="";
+}
+if(!_35){
+_18();
+_6.push(tag);
+_19();
+_7++;
+}else{
+_a+=tag;
+}
+};
+var _36=function(){
+var _37=_b.pop();
+if(_a&&!_37){
+_6.push(_1b(_a));
+_a="";
+}
+var ct=_8.pop();
+if(ct){
+ct="</"+ct+">";
+if(!_37){
+_7--;
+_18();
+_6.push(ct);
+_19();
+}else{
+_a+=ct;
+}
+}else{
+_7--;
+}
+};
+var _38=function(n){
+var _39=_11(n.nodeValue,_4);
+_18();
+_6.push("<!--");
+_19();
+_7++;
+_6.push(_1b(_39));
+_7--;
+_18();
+_6.push("-->");
+_19();
+};
+var _3a=function(_3b){
+var _3c=_3b.childNodes;
+if(_3c){
+var i;
+for(i=0;i<_3c.length;i++){
+var n=_3c[i];
+if(n.nodeType===1){
+var tg=dojo.trim(n.tagName.toLowerCase());
+if(dojo.isIE&&n.parentNode!=_3b){
+continue;
+}
+if(tg&&tg.charAt(0)==="/"){
+continue;
+}else{
+_2b(n);
+if(tg==="script"){
+_6.push(_23(n.innerHTML));
+}else{
+if(tg==="pre"){
+var _3d=n.innerHTML;
+if(dojo.isMoz){
+_3d=_3d.replace("<br>","\n");
+_3d=_3d.replace("<pre>","");
+_3d=_3d.replace("</pre>","");
+}
+if(_3d.charAt(_3d.length-1)!=="\n"){
+_3d+="\n";
+}
+_6.push(_3d);
+}else{
+_3a(n);
+}
+}
+_36();
+}
+}else{
+if(n.nodeType===3||n.nodeType===4){
+_1a(n);
+}else{
+if(n.nodeType===8){
+_38(n);
+}
+}
+}
+}
+}
+};
+_3a(_f);
+if(_a){
+_6.push(_1b(_a));
+_a="";
+}
+return _6.join("");
+};
+})();
+}
Index: trunk/web/dojo/dojox/html/_base.js
===================================================================
--- trunk/web/dojo/dojox/html/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/html/_base.js	(revision 9)
@@ -0,0 +1,192 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html._base"]){
+dojo._hasResource["dojox.html._base"]=true;
+dojo.provide("dojox.html._base");
+dojo.require("dojo.html");
+(function(){
+if(dojo.isIE){
+var _1=/(AlphaImageLoader\([^)]*?src=(['"]))(?![a-z]+:|\/)([^\r\n;}]+?)(\2[^)]*\)\s*[;}]?)/g;
+}
+var _2=/(?:(?:@import\s*(['"])(?![a-z]+:|\/)([^\r\n;{]+?)\1)|url\(\s*(['"]?)(?![a-z]+:|\/)([^\r\n;]+?)\3\s*\))([a-z, \s]*[;}]?)/g;
+var _3=dojox.html._adjustCssPaths=function(_4,_5){
+if(!_5||!_4){
+return;
+}
+if(_1){
+_5=_5.replace(_1,function(_6,_7,_8,_9,_a){
+return _7+(new dojo._Url(_4,"./"+_9).toString())+_a;
+});
+}
+return _5.replace(_2,function(_b,_c,_d,_e,_f,_10){
+if(_d){
+return "@import \""+(new dojo._Url(_4,"./"+_d).toString())+"\""+_10;
+}else{
+return "url("+(new dojo._Url(_4,"./"+_f).toString())+")"+_10;
+}
+});
+};
+var _11=/(<[a-z][a-z0-9]*\s[^>]*)(?:(href|src)=(['"]?)([^>]*?)\3|style=(['"]?)([^>]*?)\5)([^>]*>)/gi;
+var _12=dojox.html._adjustHtmlPaths=function(_13,_14){
+var url=_13||"./";
+return _14.replace(_11,function(tag,_15,_16,_17,_18,_19,_1a,end){
+return _15+(_16?(_16+"="+_17+(new dojo._Url(url,_18).toString())+_17):("style="+_19+_3(url,_1a)+_19))+end;
+});
+};
+var _1b=dojox.html._snarfStyles=function(_1c,_1d,_1e){
+_1e.attributes=[];
+return _1d.replace(/(?:<style([^>]*)>([\s\S]*?)<\/style>|<link\s+(?=[^>]*rel=['"]?stylesheet)([^>]*?href=(['"])([^>]*?)\4[^>\/]*)\/?>)/gi,function(_1f,_20,_21,_22,_23,_24){
+var i,_25=(_20||_22||"").replace(/^\s*([\s\S]*?)\s*$/i,"$1");
+if(_21){
+i=_1e.push(_1c?_3(_1c,_21):_21);
+}else{
+i=_1e.push("@import \""+_24+"\";");
+_25=_25.replace(/\s*(?:rel|href)=(['"])?[^\s]*\1\s*/gi,"");
+}
+if(_25){
+_25=_25.split(/\s+/);
+var _26={},tmp;
+for(var j=0,e=_25.length;j<e;j++){
+tmp=_25[j].split("=");
+_26[tmp[0]]=tmp[1].replace(/^\s*['"]?([\s\S]*?)['"]?\s*$/,"$1");
+}
+_1e.attributes[i-1]=_26;
+}
+return "";
+});
+};
+var _27=dojox.html._snarfScripts=function(_28,_29){
+_29.code="";
+_28=_28.replace(/<[!][-][-](.|\s){5,}?[-][-]>/g,function(_2a){
+return _2a.replace(/<(\/?)script\b/ig,"&lt;$1Script");
+});
+function _2b(src){
+if(_29.downloadRemote){
+src=src.replace(/&([a-z0-9#]+);/g,function(m,_2c){
+switch(_2c){
+case "amp":
+return "&";
+case "gt":
+return ">";
+case "lt":
+return "<";
+default:
+return _2c.charAt(0)=="#"?String.fromCharCode(_2c.substring(1)):"&"+_2c+";";
+}
+});
+dojo.xhrGet({url:src,sync:true,load:function(_2d){
+_29.code+=_2d+";";
+},error:_29.errBack});
+}
+};
+return _28.replace(/<script\s*(?![^>]*type=['"]?(?:dojo\/|text\/html\b))(?:[^>]*?(?:src=(['"]?)([^>]*?)\1[^>]*)?)*>([\s\S]*?)<\/script>/gi,function(_2e,_2f,src,_30){
+if(src){
+_2b(src);
+}else{
+_29.code+=_30;
+}
+return "";
+});
+};
+var _31=dojox.html.evalInGlobal=function(_32,_33){
+_33=_33||dojo.doc.body;
+var n=_33.ownerDocument.createElement("script");
+n.type="text/javascript";
+_33.appendChild(n);
+n.text=_32;
+};
+dojo.declare("dojox.html._ContentSetter",[dojo.html._ContentSetter],{adjustPaths:false,referencePath:".",renderStyles:false,executeScripts:false,scriptHasHooks:false,scriptHookReplacement:null,_renderStyles:function(_34){
+this._styleNodes=[];
+var st,att,_35,doc=this.node.ownerDocument;
+var _36=doc.getElementsByTagName("head")[0];
+for(var i=0,e=_34.length;i<e;i++){
+_35=_34[i];
+att=_34.attributes[i];
+st=doc.createElement("style");
+st.setAttribute("type","text/css");
+for(var x in att){
+st.setAttribute(x,att[x]);
+}
+this._styleNodes.push(st);
+_36.appendChild(st);
+if(st.styleSheet){
+st.styleSheet.cssText=_35;
+}else{
+st.appendChild(doc.createTextNode(_35));
+}
+}
+},empty:function(){
+this.inherited("empty",arguments);
+this._styles=[];
+},onBegin:function(){
+this.inherited("onBegin",arguments);
+var _37=this.content,_38=this.node;
+var _39=this._styles;
+if(dojo.isString(_37)){
+if(this.adjustPaths&&this.referencePath){
+_37=_12(this.referencePath,_37);
+}
+if(this.renderStyles||this.cleanContent){
+_37=_1b(this.referencePath,_37,_39);
+}
+if(this.executeScripts){
+var _3a=this;
+var _3b={downloadRemote:true,errBack:function(e){
+_3a._onError.call(_3a,"Exec","Error downloading remote script in \""+_3a.id+"\"",e);
+}};
+_37=_27(_37,_3b);
+this._code=_3b.code;
+}
+}
+this.content=_37;
+},onEnd:function(){
+var _3c=this._code,_3d=this._styles;
+if(this._styleNodes&&this._styleNodes.length){
+while(this._styleNodes.length){
+dojo.destroy(this._styleNodes.pop());
+}
+}
+if(this.renderStyles&&_3d&&_3d.length){
+this._renderStyles(_3d);
+}
+if(this.executeScripts&&_3c){
+if(this.cleanContent){
+_3c=_3c.replace(/(<!--|(?:\/\/)?-->|<!\[CDATA\[|\]\]>)/g,"");
+}
+if(this.scriptHasHooks){
+_3c=_3c.replace(/_container_(?!\s*=[^=])/g,this.scriptHookReplacement);
+}
+try{
+_31(_3c,this.node);
+}
+catch(e){
+this._onError("Exec","Error eval script in "+this.id+", "+e.message,e);
+}
+}
+this.inherited("onEnd",arguments);
+},tearDown:function(){
+this.inherited(arguments);
+delete this._styles;
+if(this._styleNodes&&this._styleNodes.length){
+while(this._styleNodes.length){
+dojo.destroy(this._styleNodes.pop());
+}
+}
+delete this._styleNodes;
+dojo.mixin(this,dojo.getObject(this.declaredClass).prototype);
+}});
+dojox.html.set=function(_3e,_3f,_40){
+if(!_40){
+return dojo.html._setNodeContent(_3e,_3f,true);
+}else{
+var op=new dojox.html._ContentSetter(dojo.mixin(_40,{content:_3f,node:_3e}));
+return op.set();
+}
+};
+})();
+}
Index: trunk/web/dojo/dojox/html/ext-dojo/style.js
===================================================================
--- trunk/web/dojo/dojox/html/ext-dojo/style.js	(revision 0)
+++ trunk/web/dojo/dojox/html/ext-dojo/style.js	(revision 9)
@@ -0,0 +1,290 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.html.ext-dojo.style"]){
+dojo._hasResource["dojox.html.ext-dojo.style"]=true;
+dojo.provide("dojox.html.ext-dojo.style");
+dojo.experimental("dojox.html.ext-dojo.style");
+dojo.mixin(dojox.html["ext-dojo"].style,{supportsTransform:true,_toPx:function(_1){
+var ds=dojo.style,_2=this._conversion;
+if(typeof _1==="number"){
+return _1+"px";
+}else{
+if(_1.toLowerCase().indexOf("px")!=-1){
+return _1;
+}
+}
+!_2.parentNode&&dojo.place(_2,dojo.body());
+ds(_2,"margin",_1);
+return ds(_2,"margin");
+},init:function(){
+var ds=dojo.style,_3=dojo.doc.documentElement.style,_4=dojox.html["ext-dojo"].style;
+dojo.style=function(_5,_6,_7){
+var n=dojo.byId(_5),tr=(_6=="transform"),to=(_6=="transformOrigin"),_8=arguments.length;
+if(_8==3){
+if(tr){
+_4.setTransform(n,_7,true);
+}else{
+if(to){
+_4.setTransformOrigin(n,_7);
+}else{
+ds(_5,_6,_7);
+}
+}
+}
+if(_8==2){
+if(tr){
+return _4.getTransform(_5);
+}else{
+if(to){
+return _4.getTransformOrigin(_5);
+}else{
+return ds(_5,_6);
+}
+}
+}
+};
+for(var i=0,_9=["WebkitT","MozT","OT","t"];i<_9.length;i++){
+if(typeof _3[_9[i]+"ransform"]!=="undefined"){
+this.tPropertyName=_9[i]+"ransform";
+}
+if(typeof _3[_9[i]+"ransformOrigin"]!=="undefined"){
+this.toPropertyName=_9[i]+"ransformOrigin";
+}
+}
+if(this.tPropertyName){
+this.setTransform=function(_a,_b){
+return dojo.style(_a,this.tPropertyName,_b);
+};
+this.getTransform=function(_c){
+return dojo.style(_c,this.tPropertyName);
+};
+}else{
+if(dojo.isIE){
+this.setTransform=this._setTransformFilter;
+this.getTransform=this._getTransformFilter;
+}
+}
+if(this.toPropertyName){
+this.setTransformOrigin=function(_d,_e){
+return dojo.style(_d,this.toPropertyName,_e);
+};
+this.getTransformOrigin=function(_f){
+return dojo.style(_f,this.toPropertyName);
+};
+}else{
+if(dojo.isIE){
+this.setTransformOrigin=this._setTransformOriginFilter;
+this.getTransformOrigin=this._getTransformOriginFilter;
+}else{
+this.supportsTransform=false;
+}
+}
+this._conversion=dojo.create("div",{style:{position:"absolute",top:"-100px",left:"-100px",fontSize:0,width:"0",backgroundPosition:"50% 50%"}});
+},_notSupported:function(){
+console.warn("Sorry, this browser doesn't support transform and transform-origin");
+},_setTransformOriginFilter:function(_10,_11){
+var to=dojo.trim(_11).replace(" top"," 0").replace("left ","0 ").replace(" center","50%").replace("center ","50% ").replace(" bottom"," 100%").replace("right ","100% ").replace(/\s+/," "),_12=to.split(" "),n=dojo.byId(_10),t=this.getTransform(n),_13=true;
+for(var i=0;i<_12.length;i++){
+_13=_13&&/^0|(\d+(%|px|pt|in|pc|mm|cm))$/.test(_12[i]);
+if(_12[i].indexOf("%")==-1){
+_12[i]=this._toPx(_12[i]);
+}
+}
+if(!_13){
+return;
+}
+if(!_12.length||_12.length>2){
+return;
+}
+dojo.attr(n,"dojo-transform-origin",_12.join(" "));
+t&&this.setTransform(_10,t);
+},_getTransformOriginFilter:function(_14){
+return dojo.attr(_14,"dojo-transform-origin")||"50% 50%";
+},_setTransformFilter:function(_15,_16){
+var t=_16.replace(/\s/g,""),n=dojo.byId(_15),_17=t.split(")"),_18=1,_19=1,_1a="DXImageTransform.Microsoft.Matrix",_1b=dojo.hasAttr,_1c=dojo.attr,PI=Math.PI,cos=Math.cos,sin=Math.sin,tan=Math.tan,max=Math.max,min=Math.min,abs=Math.abs,_1d=PI/180,_1e=PI/200,ct="",_1f="",_20=[],x0=0,y0=0,dx=0,dy=0,xc=0,yc=0,a=0,m11=1,m12=0,m21=0,m22=1,tx=0,ty=0,_21=[m11,m12,m21,m22,tx,ty],_22=false,ds=dojo.style,_23=ds(n,"position")=="absolute"?"absolute":"relative",w=ds(n,"width")+ds(n,"paddingLeft")+ds(n,"paddingRight"),h=ds(n,"height")+ds(n,"paddingTop")+ds(n,"paddingBottom"),_24=this._toPx;
+!_1b(n,"dojo-transform-origin")&&this.setTransformOrigin(n,"50% 50%");
+for(var i=0,l=_17.length;i<l;i++){
+_20=_17[i].match(/matrix|rotate|scaleX|scaleY|scale|skewX|skewY|skew|translateX|translateY|translate/);
+_1f=_20?_20[0]:"";
+switch(_1f){
+case "matrix":
+ct=_17[i].replace(/matrix\(|\)/g,"");
+var _25=ct.split(",");
+m11=_21[0]*_25[0]+_21[1]*_25[2];
+m12=_21[0]*_25[1]+_21[1]*_25[3];
+m21=_21[2]*_25[0]+_21[3]*_25[2];
+m22=_21[2]*_25[1]+_21[3]*_25[3];
+tx=_21[4]+_25[4];
+ty=_21[5]+_25[5];
+break;
+case "rotate":
+ct=_17[i].replace(/rotate\(|\)/g,"");
+_18=ct.indexOf("deg")!=-1?_1d:ct.indexOf("grad")!=-1?_1e:1;
+a=parseFloat(ct)*_18;
+var s=sin(a),c=cos(a);
+m11=_21[0]*c+_21[1]*s;
+m12=-_21[0]*s+_21[1]*c;
+m21=_21[2]*c+_21[3]*s;
+m22=-_21[2]*s+_21[3]*c;
+break;
+case "skewX":
+ct=_17[i].replace(/skewX\(|\)/g,"");
+_18=ct.indexOf("deg")!=-1?_1d:ct.indexOf("grad")!=-1?_1e:1;
+var ta=tan(parseFloat(ct)*_18);
+m11=_21[0];
+m12=_21[0]*ta+_21[1];
+m21=_21[2];
+m22=_21[2]*ta+_21[3];
+break;
+case "skewY":
+ct=_17[i].replace(/skewY\(|\)/g,"");
+_18=ct.indexOf("deg")!=-1?_1d:ct.indexOf("grad")!=-1?_1e:1;
+ta=tan(parseFloat(ct)*_18);
+m11=_21[0]+_21[1]*ta;
+m12=_21[1];
+m21=_21[2]+_21[3]*ta;
+m22=_21[3];
+break;
+case "skew":
+ct=_17[i].replace(/skew\(|\)/g,"");
+var _26=ct.split(",");
+_26[1]=_26[1]||"0";
+_18=_26[0].indexOf("deg")!=-1?_1d:_26[0].indexOf("grad")!=-1?_1e:1;
+_19=_26[1].indexOf("deg")!=-1?_1d:_26[1].indexOf("grad")!=-1?_1e:1;
+var a0=tan(parseFloat(_26[0])*_18),a1=tan(parseFloat(_26[1])*_19);
+m11=_21[0]+_21[1]*a1;
+m12=_21[0]*a0+_21[1];
+m21=_21[2]+_21[3]*a1;
+m22=_21[2]*a0+_21[3];
+break;
+case "scaleX":
+ct=parseFloat(_17[i].replace(/scaleX\(|\)/g,""))||1;
+m11=_21[0]*ct;
+m12=_21[1];
+m21=_21[2]*ct;
+m22=_21[3];
+break;
+case "scaleY":
+ct=parseFloat(_17[i].replace(/scaleY\(|\)/g,""))||1;
+m11=_21[0];
+m12=_21[1]*ct;
+m21=_21[2];
+m22=_21[3]*ct;
+break;
+case "scale":
+ct=_17[i].replace(/scale\(|\)/g,"");
+var _27=ct.split(",");
+_27[1]=_27[1]||_27[0];
+m11=_21[0]*_27[0];
+m12=_21[1]*_27[1];
+m21=_21[2]*_27[0];
+m22=_21[3]*_27[1];
+break;
+case "translateX":
+ct=parseInt(_17[i].replace(/translateX\(|\)/g,""))||1;
+m11=_21[0];
+m12=_21[1];
+m21=_21[2];
+m22=_21[3];
+tx=_24(ct);
+tx&&_1c(n,"dojo-transform-matrix-tx",tx);
+break;
+case "translateY":
+ct=parseInt(_17[i].replace(/translateY\(|\)/g,""))||1;
+m11=_21[0];
+m12=_21[1];
+m21=_21[2];
+m22=_21[3];
+ty=_24(ct);
+ty&&_1c(n,"dojo-transform-matrix-ty",ty);
+break;
+case "translate":
+ct=_17[i].replace(/translate\(|\)/g,"");
+m11=_21[0];
+m12=_21[1];
+m21=_21[2];
+m22=_21[3];
+var _28=ct.split(",");
+_28[0]=parseInt(_24(_28[0]))||0;
+_28[1]=parseInt(_24(_28[1]))||0;
+tx=_28[0];
+ty=_28[1];
+tx&&_1c(n,"dojo-transform-matrix-tx",tx);
+ty&&_1c(n,"dojo-transform-matrix-ty",ty);
+break;
+}
+_21=[m11,m12,m21,m22,tx,ty];
+}
+var Bx=min(w*m11+h*m12,min(min(w*m11,h*m12),0)),By=min(w*m21+h*m22,min(min(w*m21,h*m22),0));
+dx=-Bx;
+dy=-By;
+if(dojo.isIE<8){
+n.style.zoom="1";
+if(_23!="absolute"){
+var _29=ds(_15.parentNode,"width"),tw=abs(w*m11),th=abs(h*m12),_2a=max(tw+th,max(max(th,tw),0));
+dx-=(_2a-w)/2-(_29>_2a?0:(_2a-_29)/2);
+}
+}else{
+if(dojo.isIE==8){
+ds(n,"zIndex")=="auto"&&(n.style.zIndex="0");
+}
+}
+try{
+_22=!!n.filters.item(_1a);
+}
+catch(e){
+_22=false;
+}
+if(_22){
+n.filters.item(_1a).M11=m11;
+n.filters.item(_1a).M12=m12;
+n.filters.item(_1a).M21=m21;
+n.filters.item(_1a).M22=m22;
+n.filters.item(_1a).filterType="bilinear";
+n.filters.item(_1a).Dx=0;
+n.filters.item(_1a).Dy=0;
+n.filters.item(_1a).sizingMethod="auto expand";
+}else{
+n.style.filter+=" progid:"+_1a+"(M11="+m11+",M12="+m12+",M21="+m21+",M22="+m22+",FilterType='bilinear',Dx=0,Dy=0,sizingMethod='auto expand')";
+}
+tx=parseInt(_1c(n,"dojo-transform-matrix-tx")||"0");
+ty=parseInt(_1c(n,"dojo-transform-matrix-ty")||"0");
+var _2b=_1c(n,"dojo-transform-origin").split(" ");
+for(i=0;i<2;i++){
+_2b[i]=_2b[i]||"50%";
+}
+xc=(_2b[0].toString().indexOf("%")!=-1)?w*parseInt(_2b[0])*0.01:_2b[0];
+yc=(_2b[1].toString().indexOf("%")!=-1)?h*parseInt(_2b[1])*0.01:_2b[1];
+if(_1b(n,"dojo-startX")){
+x0=parseInt(_1c(n,"dojo-startX"));
+}else{
+x0=parseInt(ds(n,"left"));
+_1c(n,"dojo-startX",_23=="absolute"?x0:"0");
+}
+if(_1b(n,"dojo-startY")){
+y0=parseInt(_1c(n,"dojo-startY"));
+}else{
+y0=parseInt(ds(n,"top"));
+_1c(n,"dojo-startY",_23=="absolute"?y0:"0");
+}
+ds(n,{position:_23,left:x0-parseInt(dx)+parseInt(xc)-((parseInt(xc)-tx)*m11+(parseInt(yc)-ty)*m12)+"px",top:y0-parseInt(dy)+parseInt(yc)-((parseInt(xc)-tx)*m21+(parseInt(yc)-ty)*m22)+"px"});
+},_getTransformFilter:function(_2c){
+try{
+var n=dojo.byId(_2c),_2d=n.filters.item(0);
+return "matrix("+_2d.M11+", "+_2d.M12+", "+_2d.M21+", "+_2d.M22+", "+(dojo.attr(_2c,"dojo-transform-tx")||"0")+", "+(dojo.attr(_2c,"dojo-transform-ty")||"0")+")";
+}
+catch(e){
+return "matrix(1, 0, 0, 1, 0, 0)";
+}
+},setTransform:function(){
+this._notSupported();
+},setTransformOrigin:function(){
+this._notSupported();
+}});
+dojox.html["ext-dojo"].style.init();
+}
Index: trunk/web/dojo/dojox/storage/README
===================================================================
--- trunk/web/dojo/dojox/storage/README	(revision 0)
+++ trunk/web/dojo/dojox/storage/README	(revision 9)
@@ -0,0 +1,76 @@
+-------------------------------------------------------------------------------
+Dojo Storage
+-------------------------------------------------------------------------------
+Version X.XXX (does not have separate versioning -- versioned by release date)
+Last Release date: March 2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Brad Neuberg
+	Alex Russell
+-------------------------------------------------------------------------------
+Project description
+
+dojox.storage provides a JavaScript abstraction for persistent storage
+as well as pluggable implementations which typically use native browser extensions
+(e.g. Flash player, Gears)
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+FlashStorageProvider requires the Flash player
+GearsStorageProvider requires the Gears extension
+The various Air*StorageProviders require Adobe's AIR software
+
+The open source mtasc compiler (www.mtasc.org) is needed to build the
+ActionScript into SWF format.  The SWF object is maintained within svn, so
+this step is only necessary if Storage.as is modified.  A sample build script
+is provided (buildFlashStorage.sh)
+
+-------------------------------------------------------------------------------
+Documentation
+
+See http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book50 for the
+authoritative Dojo Storage docs.
+
+See dojox/storage/demos/helloworld.html for a simple Hello World example
+you can base your code off of.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+If you want to use Dojo Storage in a web browser:
+
+These installation instructions are to use Dojo Storage in a web browser; at
+runtime, Dojo Storage will autodetect and use the best available storage
+option. This includes:
+
+  * Google Gears
+  * HTML 5 Web Browsers (Firefox 2+)
+  * Hidden Flash
+  
+If you are using a release build (if you downloaded Dojo from the Dojo
+website then this is a release build -- if you checked it out from
+Subversion yourself then you will have to build things yourself), if you 
+only want to grab just the files from Dojo to use Dojo Storage
+in the browser, take the following (but make sure to keep the directory
+layout the same, or else things won't work correctly!):
+
+* dojo/dojo.js
+* dojox/storage/storage-browser.js
+* dojox/storage/Storage.swf
+
+To help with testing and development and to make sure you have everything 
+right, its also useful to grab the following files:
+
+* dojox/storage/README
+* dojox/storage/demos/helloworld.html
+
+If you want to use Dojo Storage with Adobe AIR:
+
+[TBD! Why don't you write this and contribute!]
+
+-------------------------------------------------------------------------------
+Additional Notes
Index: trunk/web/dojo/dojox/storage/AirEncryptedLocalStorageProvider.js
===================================================================
--- trunk/web/dojo/dojox/storage/AirEncryptedLocalStorageProvider.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/AirEncryptedLocalStorageProvider.js	(revision 9)
@@ -0,0 +1,168 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.AirEncryptedLocalStorageProvider"]){
+dojo._hasResource["dojox.storage.AirEncryptedLocalStorageProvider"]=true;
+dojo.provide("dojox.storage.AirEncryptedLocalStorageProvider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.Provider");
+if(dojo.isAIR){
+(function(){
+if(!_1){
+var _1={};
+}
+_1.ByteArray=window.runtime.flash.utils.ByteArray;
+_1.EncryptedLocalStore=window.runtime.flash.data.EncryptedLocalStore,dojo.declare("dojox.storage.AirEncryptedLocalStorageProvider",[dojox.storage.Provider],{initialize:function(){
+dojox.storage.manager.loaded();
+},isAvailable:function(){
+return true;
+},_getItem:function(_2){
+var _3=_1.EncryptedLocalStore.getItem("__dojo_"+_2);
+return _3?_3.readUTFBytes(_3.length):"";
+},_setItem:function(_4,_5){
+var _6=new _1.ByteArray();
+_6.writeUTFBytes(_5);
+_1.EncryptedLocalStore.setItem("__dojo_"+_4,_6);
+},_removeItem:function(_7){
+_1.EncryptedLocalStore.removeItem("__dojo_"+_7);
+},put:function(_8,_9,_a,_b){
+if(this.isValidKey(_8)==false){
+throw new Error("Invalid key given: "+_8);
+}
+_b=_b||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_b)==false){
+throw new Error("Invalid namespace given: "+_b);
+}
+try{
+var _c=this._getItem("namespaces")||"|";
+if(_c.indexOf("|"+_b+"|")==-1){
+this._setItem("namespaces",_c+_b+"|");
+}
+var _d=this._getItem(_b+"_keys")||"|";
+if(_d.indexOf("|"+_8+"|")==-1){
+this._setItem(_b+"_keys",_d+_8+"|");
+}
+this._setItem("_"+_b+"_"+_8,_9);
+}
+catch(e){
+_a(this.FAILED,_8,e.toString(),_b);
+return;
+}
+if(_a){
+_a(this.SUCCESS,_8,null,_b);
+}
+},get:function(_e,_f){
+if(this.isValidKey(_e)==false){
+throw new Error("Invalid key given: "+_e);
+}
+_f=_f||this.DEFAULT_NAMESPACE;
+return this._getItem("_"+_f+"_"+_e);
+},getNamespaces:function(){
+var _10=[this.DEFAULT_NAMESPACE];
+var _11=(this._getItem("namespaces")||"|").split("|");
+for(var i=0;i<_11.length;i++){
+if(_11[i].length&&_11[i]!=this.DEFAULT_NAMESPACE){
+_10.push(_11[i]);
+}
+}
+return _10;
+},getKeys:function(_12){
+_12=_12||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_12)==false){
+throw new Error("Invalid namespace given: "+_12);
+}
+var _13=[];
+var _14=(this._getItem(_12+"_keys")||"|").split("|");
+for(var i=0;i<_14.length;i++){
+if(_14[i].length){
+_13.push(_14[i]);
+}
+}
+return _13;
+},clear:function(_15){
+if(this.isValidKey(_15)==false){
+throw new Error("Invalid namespace given: "+_15);
+}
+var _16=this._getItem("namespaces")||"|";
+if(_16.indexOf("|"+_15+"|")!=-1){
+this._setItem("namespaces",_16.replace("|"+_15+"|","|"));
+}
+var _17=(this._getItem(_15+"_keys")||"|").split("|");
+for(var i=0;i<_17.length;i++){
+if(_17[i].length){
+this._removeItem(_15+"_"+_17[i]);
+}
+}
+this._removeItem(_15+"_keys");
+},remove:function(key,_18){
+_18=_18||this.DEFAULT_NAMESPACE;
+var _19=this._getItem(_18+"_keys")||"|";
+if(_19.indexOf("|"+key+"|")!=-1){
+this._setItem(_18+"_keys",_19.replace("|"+key+"|","|"));
+}
+this._removeItem("_"+_18+"_"+key);
+},putMultiple:function(_1a,_1b,_1c,_1d){
+if(this.isValidKeyArray(_1a)===false||!_1b instanceof Array||_1a.length!=_1b.length){
+throw new Error("Invalid arguments: keys = ["+_1a+"], values = ["+_1b+"]");
+}
+if(_1d==null||typeof _1d=="undefined"){
+_1d=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1d)==false){
+throw new Error("Invalid namespace given: "+_1d);
+}
+this._statusHandler=_1c;
+try{
+for(var i=0;i<_1a.length;i++){
+this.put(_1a[i],_1b[i],null,_1d);
+}
+}
+catch(e){
+if(_1c){
+_1c(this.FAILED,_1a,e.toString(),_1d);
+}
+return;
+}
+if(_1c){
+_1c(this.SUCCESS,_1a,null);
+}
+},getMultiple:function(_1e,_1f){
+if(this.isValidKeyArray(_1e)===false){
+throw new Error("Invalid key array given: "+_1e);
+}
+if(_1f==null||typeof _1f=="undefined"){
+_1f=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1f)==false){
+throw new Error("Invalid namespace given: "+_1f);
+}
+var _20=[];
+for(var i=0;i<_1e.length;i++){
+_20[i]=this.get(_1e[i],_1f);
+}
+return _20;
+},removeMultiple:function(_21,_22){
+_22=_22||this.DEFAULT_NAMESPACE;
+for(var i=0;i<_21.length;i++){
+this.remove(_21[i],_22);
+}
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+}});
+dojox.storage.manager.register("dojox.storage.AirEncryptedLocalStorageProvider",new dojox.storage.AirEncryptedLocalStorageProvider());
+dojox.storage.manager.initialize();
+})();
+}
+}
Index: trunk/web/dojo/dojox/storage/storage_dialog.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/storage/storage_dialog.swf
===================================================================
--- trunk/web/dojo/dojox/storage/storage_dialog.swf	(revision 0)
+++ trunk/web/dojo/dojox/storage/storage_dialog.swf	(revision 9)

Property changes on: trunk/web/dojo/dojox/storage/storage_dialog.swf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/storage/Storage.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/storage/Storage.swf
===================================================================
--- trunk/web/dojo/dojox/storage/Storage.swf	(revision 0)
+++ trunk/web/dojo/dojox/storage/Storage.swf	(revision 9)

Property changes on: trunk/web/dojo/dojox/storage/Storage.swf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/storage/_common.js
===================================================================
--- trunk/web/dojo/dojox/storage/_common.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/_common.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage._common"]){
+dojo._hasResource["dojox.storage._common"]=true;
+dojo.provide("dojox.storage._common");
+dojo.require("dojox.storage.Provider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.GearsStorageProvider");
+dojo.require("dojox.storage.WhatWGStorageProvider");
+dojo.require("dojox.storage.FlashStorageProvider");
+dojox.storage.manager.initialize();
+}
Index: trunk/web/dojo/dojox/storage/storage_dialog.fla
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/storage/storage_dialog.fla
===================================================================
--- trunk/web/dojo/dojox/storage/storage_dialog.fla	(revision 0)
+++ trunk/web/dojo/dojox/storage/storage_dialog.fla	(revision 9)

Property changes on: trunk/web/dojo/dojox/storage/storage_dialog.fla
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/storage/Provider.js
===================================================================
--- trunk/web/dojo/dojox/storage/Provider.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/Provider.js	(revision 9)
@@ -0,0 +1,69 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.Provider"]){
+dojo._hasResource["dojox.storage.Provider"]=true;
+dojo.provide("dojox.storage.Provider");
+dojo.declare("dojox.storage.Provider",null,{constructor:function(){
+},SUCCESS:"success",FAILED:"failed",PENDING:"pending",SIZE_NOT_AVAILABLE:"Size not available",SIZE_NO_LIMIT:"No size limit",DEFAULT_NAMESPACE:"default",onHideSettingsUI:null,initialize:function(){
+console.warn("dojox.storage.initialize not implemented");
+},isAvailable:function(){
+console.warn("dojox.storage.isAvailable not implemented");
+},put:function(_1,_2,_3,_4){
+console.warn("dojox.storage.put not implemented");
+},get:function(_5,_6){
+console.warn("dojox.storage.get not implemented");
+},hasKey:function(_7,_8){
+return !!this.get(_7,_8);
+},getKeys:function(_9){
+console.warn("dojox.storage.getKeys not implemented");
+},clear:function(_a){
+console.warn("dojox.storage.clear not implemented");
+},remove:function(_b,_c){
+console.warn("dojox.storage.remove not implemented");
+},getNamespaces:function(){
+console.warn("dojox.storage.getNamespaces not implemented");
+},isPermanent:function(){
+console.warn("dojox.storage.isPermanent not implemented");
+},getMaximumSize:function(){
+console.warn("dojox.storage.getMaximumSize not implemented");
+},putMultiple:function(_d,_e,_f,_10){
+for(var i=0;i<_d.length;i++){
+dojox.storage.put(_d[i],_e[i],_f,_10);
+}
+},getMultiple:function(_11,_12){
+var _13=[];
+for(var i=0;i<_11.length;i++){
+_13.push(dojox.storage.get(_11[i],_12));
+}
+return _13;
+},removeMultiple:function(_14,_15){
+for(var i=0;i<_14.length;i++){
+dojox.storage.remove(_14[i],_15);
+}
+},isValidKeyArray:function(_16){
+if(_16===null||_16===undefined||!dojo.isArray(_16)){
+return false;
+}
+return !dojo.some(_16,function(key){
+return !this.isValidKey(key);
+},this);
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+console.warn("dojox.storage.showSettingsUI not implemented");
+},hideSettingsUI:function(){
+console.warn("dojox.storage.hideSettingsUI not implemented");
+},isValidKey:function(_17){
+if(_17===null||_17===undefined){
+return false;
+}
+return /^[0-9A-Za-z_]*$/.test(_17);
+},getResourceList:function(){
+return [];
+}});
+}
Index: trunk/web/dojo/dojox/storage/manager.js
===================================================================
--- trunk/web/dojo/dojox/storage/manager.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/manager.js	(revision 9)
@@ -0,0 +1,117 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.manager"]){
+dojo._hasResource["dojox.storage.manager"]=true;
+dojo.provide("dojox.storage.manager");
+dojox.storage.manager=new function(){
+this.currentProvider=null;
+this.available=false;
+this.providers=[];
+this._initialized=false;
+this._onLoadListeners=[];
+this.initialize=function(){
+this.autodetect();
+};
+this.register=function(_1,_2){
+this.providers.push(_2);
+this.providers[_1]=_2;
+};
+this.setProvider=function(_3){
+};
+this.autodetect=function(){
+if(this._initialized){
+return;
+}
+var _4=dojo.config["forceStorageProvider"]||false;
+var _5;
+for(var i=0;i<this.providers.length;i++){
+_5=this.providers[i];
+if(_4&&_4==_5.declaredClass){
+_5.isAvailable();
+break;
+}else{
+if(!_4&&_5.isAvailable()){
+break;
+}
+}
+}
+if(!_5){
+this._initialized=true;
+this.available=false;
+this.currentProvider=null;
+console.warn("No storage provider found for this platform");
+this.loaded();
+return;
+}
+this.currentProvider=_5;
+dojo.mixin(dojox.storage,this.currentProvider);
+dojox.storage.initialize();
+this._initialized=true;
+this.available=true;
+};
+this.isAvailable=function(){
+return this.available;
+};
+this.addOnLoad=function(_6){
+this._onLoadListeners.push(_6);
+if(this.isInitialized()){
+this._fireLoaded();
+}
+};
+this.removeOnLoad=function(_7){
+for(var i=0;i<this._onLoadListeners.length;i++){
+if(_7==this._onLoadListeners[i]){
+this._onLoadListeners=this._onLoadListeners.splice(i,1);
+break;
+}
+}
+};
+this.isInitialized=function(){
+if(this.currentProvider!=null&&this.currentProvider.declaredClass=="dojox.storage.FlashStorageProvider"&&dojox.flash.ready==false){
+return false;
+}else{
+return this._initialized;
+}
+};
+this.supportsProvider=function(_8){
+try{
+var _9=eval("new "+_8+"()");
+var _a=_9.isAvailable();
+if(!_a){
+return false;
+}
+return _a;
+}
+catch(e){
+return false;
+}
+};
+this.getProvider=function(){
+return this.currentProvider;
+};
+this.loaded=function(){
+this._fireLoaded();
+};
+this._fireLoaded=function(){
+dojo.forEach(this._onLoadListeners,function(i){
+try{
+i();
+}
+catch(e){
+}
+});
+};
+this.getResourceList=function(){
+var _b=[];
+dojo.forEach(dojox.storage.manager.providers,function(_c){
+_b=_b.concat(_c.getResourceList());
+});
+return _b;
+};
+};
+}
Index: trunk/web/dojo/dojox/storage/AirFileStorageProvider.js
===================================================================
--- trunk/web/dojo/dojox/storage/AirFileStorageProvider.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/AirFileStorageProvider.js	(revision 9)
@@ -0,0 +1,174 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.AirFileStorageProvider"]){
+dojo._hasResource["dojox.storage.AirFileStorageProvider"]=true;
+dojo.provide("dojox.storage.AirFileStorageProvider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.Provider");
+if(dojo.isAIR){
+(function(){
+if(!_1){
+var _1={};
+}
+_1.File=window.runtime.flash.filesystem.File;
+_1.FileStream=window.runtime.flash.filesystem.FileStream;
+_1.FileMode=window.runtime.flash.filesystem.FileMode;
+dojo.declare("dojox.storage.AirFileStorageProvider",[dojox.storage.Provider],{initialized:false,_storagePath:"__DOJO_STORAGE/",initialize:function(){
+this.initialized=false;
+try{
+var _2=_1.File.applicationStorageDirectory.resolvePath(this._storagePath);
+if(!_2.exists){
+_2.createDirectory();
+}
+this.initialized=true;
+}
+catch(e){
+}
+dojox.storage.manager.loaded();
+},isAvailable:function(){
+return true;
+},put:function(_3,_4,_5,_6){
+if(this.isValidKey(_3)==false){
+throw new Error("Invalid key given: "+_3);
+}
+_6=_6||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_6)==false){
+throw new Error("Invalid namespace given: "+_6);
+}
+try{
+this.remove(_3,_6);
+var _7=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_6);
+if(!_7.exists){
+_7.createDirectory();
+}
+var _8=_7.resolvePath(_3);
+var _9=new _1.FileStream();
+_9.open(_8,_1.FileMode.WRITE);
+_9.writeObject(_4);
+_9.close();
+}
+catch(e){
+_5(this.FAILED,_3,e.toString(),_6);
+return;
+}
+if(_5){
+_5(this.SUCCESS,_3,null,_6);
+}
+},get:function(_a,_b){
+if(this.isValidKey(_a)==false){
+throw new Error("Invalid key given: "+_a);
+}
+_b=_b||this.DEFAULT_NAMESPACE;
+var _c=null;
+var _d=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_b+"/"+_a);
+if(_d.exists&&!_d.isDirectory){
+var _e=new _1.FileStream();
+_e.open(_d,_1.FileMode.READ);
+_c=_e.readObject();
+_e.close();
+}
+return _c;
+},getNamespaces:function(){
+var _f=[this.DEFAULT_NAMESPACE];
+var dir=_1.File.applicationStorageDirectory.resolvePath(this._storagePath);
+var _10=dir.getDirectoryListing(),i;
+for(i=0;i<_10.length;i++){
+if(_10[i].isDirectory&&_10[i].name!=this.DEFAULT_NAMESPACE){
+_f.push(_10[i].name);
+}
+}
+return _f;
+},getKeys:function(_11){
+_11=_11||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_11)==false){
+throw new Error("Invalid namespace given: "+_11);
+}
+var _12=[];
+var dir=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_11);
+if(dir.exists&&dir.isDirectory){
+var _13=dir.getDirectoryListing(),i;
+for(i=0;i<_13.length;i++){
+_12.push(_13[i].name);
+}
+}
+return _12;
+},clear:function(_14){
+if(this.isValidKey(_14)==false){
+throw new Error("Invalid namespace given: "+_14);
+}
+var dir=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_14);
+if(dir.exists&&dir.isDirectory){
+dir.deleteDirectory(true);
+}
+},remove:function(key,_15){
+_15=_15||this.DEFAULT_NAMESPACE;
+var _16=_1.File.applicationStorageDirectory.resolvePath(this._storagePath+_15+"/"+key);
+if(_16.exists&&!_16.isDirectory){
+_16.deleteFile();
+}
+},putMultiple:function(_17,_18,_19,_1a){
+if(this.isValidKeyArray(_17)===false||!_18 instanceof Array||_17.length!=_18.length){
+throw new Error("Invalid arguments: keys = ["+_17+"], values = ["+_18+"]");
+}
+if(_1a==null||typeof _1a=="undefined"){
+_1a=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1a)==false){
+throw new Error("Invalid namespace given: "+_1a);
+}
+this._statusHandler=_19;
+try{
+for(var i=0;i<_17.length;i++){
+this.put(_17[i],_18[i],null,_1a);
+}
+}
+catch(e){
+if(_19){
+_19(this.FAILED,_17,e.toString(),_1a);
+}
+return;
+}
+if(_19){
+_19(this.SUCCESS,_17,null,_1a);
+}
+},getMultiple:function(_1b,_1c){
+if(this.isValidKeyArray(_1b)===false){
+throw new Error("Invalid key array given: "+_1b);
+}
+if(_1c==null||typeof _1c=="undefined"){
+_1c=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_1c)==false){
+throw new Error("Invalid namespace given: "+_1c);
+}
+var _1d=[];
+for(var i=0;i<_1b.length;i++){
+_1d[i]=this.get(_1b[i],_1c);
+}
+return _1d;
+},removeMultiple:function(_1e,_1f){
+_1f=_1f||this.DEFAULT_NAMESPACE;
+for(var i=0;i<_1e.length;i++){
+this.remove(_1e[i],_1f);
+}
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+}});
+dojox.storage.manager.register("dojox.storage.AirFileStorageProvider",new dojox.storage.AirFileStorageProvider());
+dojox.storage.manager.initialize();
+})();
+}
+}
Index: trunk/web/dojo/dojox/storage/Storage.as
===================================================================
--- trunk/web/dojo/dojox/storage/Storage.as	(revision 0)
+++ trunk/web/dojo/dojox/storage/Storage.as	(revision 9)
@@ -0,0 +1,402 @@
+import DojoExternalInterface;
+
+class Storage{
+	public static var SUCCESS = "success";
+	public static var FAILED = "failed";
+	public static var PENDING = "pending";
+	
+	//	Wait the following number of milliseconds before flushing
+	public static var FLUSH_DELAY_DEFAULT = 500;
+	
+	public var flush_delay;
+	public var so;
+	public var timer;
+	
+	private var _NAMESPACE_KEY = "allNamespaces";
+	
+	public function Storage(){
+		flush_delay = Storage.FLUSH_DELAY_DEFAULT;
+	
+		DojoExternalInterface.initialize();
+		DojoExternalInterface.addCallback("put", this, put);
+		DojoExternalInterface.addCallback("putMultiple", this, putMultiple);
+		DojoExternalInterface.addCallback("get", this, get);
+		DojoExternalInterface.addCallback("getMultiple", this, getMultiple);
+		DojoExternalInterface.addCallback("showSettings", this, showSettings);
+		DojoExternalInterface.addCallback("clear", this, clear);
+		DojoExternalInterface.addCallback("getKeys", this, getKeys);
+		DojoExternalInterface.addCallback("getNamespaces", this, getNamespaces);
+		DojoExternalInterface.addCallback("remove", this, remove);
+		DojoExternalInterface.addCallback("removeMultiple", this, removeMultiple);
+		DojoExternalInterface.addCallback("flush", this, flush);
+		DojoExternalInterface.addCallback("setFlushDelay", this, setFlushDelay);
+		DojoExternalInterface.addCallback("getFlushDelay", this, getFlushDelay);
+		DojoExternalInterface.loaded();
+		
+		// preload the System Settings finished button movie for offline
+		// access so it is in the cache
+		_root.createEmptyMovieClip("_settingsBackground", 1);
+		_root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath 
+																				+ "../dojox/storage/storage_dialog.swf");
+	}
+
+  //  FIXME: Whoever added this Flush code did not document why it
+  //  exists. Please also put your name and a bug number so I know 
+  //  who to contact. -- Brad Neuberg
+	
+	//	Set a new value for the flush delay timer.
+	//	Possible values:
+	//	  0 : Perform the flush synchronously after each "put" request
+	//	> 0 : Wait until 'newDelay' ms have passed without any "put" request to flush
+	//	 -1 : Do not automatically flush
+	public function setFlushDelay(newDelay){
+		flush_delay = Number(newDelay);
+	}
+	
+	public function getFlushDelay(){
+		return String(flush_delay);
+	}
+	
+	public function flush(namespace){
+		if(timer){
+			_global.clearTimeout(timer);
+			delete timer;
+		}
+	
+		var so = SharedObject.getLocal(namespace);
+		var flushResults = so.flush();
+
+		// return results of this command to JavaScript
+		var statusResults;
+		if(flushResults == true){
+			statusResults = Storage.SUCCESS;
+		}else if(flushResults == "pending"){
+			statusResults = Storage.PENDING;
+		}else{
+			statusResults = Storage.FAILED;
+		}
+		
+		DojoExternalInterface.call("dojox.storage._onStatus", statusResults, 
+		                            null, namespace);
+	}
+
+	public function put(keyName, keyValue, namespace){
+		// Get the SharedObject for these values and save it
+		so = SharedObject.getLocal(namespace);
+		
+		//  Save the key and value
+		so.data[keyName] = keyValue;
+		
+		// Save the namespace
+		// FIXME: Tie this into the flush/no-flush stuff below; right now
+		// we immediately write out this namespace. -- Brad Neuberg
+    addNamespace(namespace, keyName);
+
+		//	Do all the flush/no-flush stuff
+		var keyNames = new Array(); 
+		keyNames[0] = keyName;
+		postWrite(so, keyNames, namespace);
+	}
+	
+	public function putMultiple(metaKey, metaValue, metaLengths, namespace){
+		// Get the SharedObject for these values and save it
+		so = SharedObject.getLocal(namespace);
+		
+		//	Create array of keys and value lengths
+		var keys = metaKey.split(",");
+		var lengths = metaLengths.split(",");
+		
+		//	Loop through the array and write the values
+		for(var i = 0; i < keys.length; i++){
+			so.data[keys[i]] = metaValue.slice(0,lengths[i]);
+			metaValue = metaValue.slice(lengths[i]);
+		}
+		
+		// Save the namespace
+		// FIXME: Tie this into the flush/no-flush stuff below; right now
+		// we immediately write out this namespace. -- Brad Neuberg
+    addNamespace(namespace, null);
+		
+		//	Do all the flush/no-flush stuff
+		postWrite(so, keys, namespace);
+	}
+
+	public function postWrite(so, keyNames, namespace){
+		//	TODO: Review all this 'handler' stuff. In particular, the flush 
+		//  could now be with keys pending from several different requests, not 
+		//  only the ones passed in this method call
+
+		// prepare a storage status handler
+		var self = this;
+		so.onStatus = function(infoObject:Object){
+			//trace("onStatus, infoObject="+infoObject.code);
+			
+			// delete the data value if the request was denied
+			if(infoObject.code == "SharedObject.Flush.Failed"){
+				for(var i=0;i<keyNames.length;i++){
+					delete self.so.data[keyNames[i]];
+				}
+			}
+			
+			var statusResults;
+			if(infoObject.code == "SharedObject.Flush.Failed"){
+				statusResults = Storage.FAILED;
+			}else if(infoObject.code == "SharedObject.Flush.Pending"){
+				statusResults = Storage.PENDING;
+			}else if(infoObject.code == "SharedObject.Flush.Success"){
+				// if we have succeeded saving our value, see if we
+				// need to update our list of namespaces
+				if(self.hasNamespace(namespace) == true){
+					statusResults = Storage.SUCCESS;
+				}else{
+					// we have a new namespace we must store
+					self.addNamespace(namespace, keyNames[0]);
+					return;
+				}
+			}
+			//trace("onStatus, statusResults="+statusResults);
+			
+			// give the status results to JavaScript
+			DojoExternalInterface.call("dojox.storage._onStatus", statusResults, 
+			                            keyNames[0], namespace);
+		}
+		
+		//	Clear any pending flush timers
+		if(timer){
+			_global.clearTimeout(timer);
+		}
+		
+		//	If we have a flush delay set, set a timer for its execution
+		if(flush_delay > 0){
+			timer = _global.setTimeout(flush, flush_delay, namespace);
+		//	With a flush_delay value of 0, execute the flush request synchronously
+		}else if(flush_delay == 0){
+			flush(namespace);
+		}
+		//	Otherwise just don't flush - will be probably be flushed manually
+	}
+
+	public function get(keyName, namespace){
+		// Get the SharedObject for these values and save it
+		so = SharedObject.getLocal(namespace);
+		var results = so.data[keyName];
+		
+		return results;
+	}
+	
+	//	Returns an array with the contents of each key value on the metaKeys array
+	public function getMultiple(metaKeys, namespace){
+		//	get the storage object
+		so = SharedObject.getLocal(namespace);
+		
+		//	Create array of keys to read
+		var keys = metaKeys.split(",");
+		var results = new Array();
+		
+		//	Read from storage into results array
+		for(var i = 0;i < keys.length;i++){
+			var val = so.data[keys[i]];
+			val = val.split("\\").join("\\\\");
+			val = val.split('"').join('\\"');
+			results.push( val);
+		}
+			
+		//	Make the results array into a string
+		var metaResults = '["' + results.join('","') + '"]';
+		
+		return metaResults;
+	}	
+	
+	public function showSettings(){
+		// Show the configuration options for the Flash player, opened to the
+		// section for local storage controls (pane 1)
+		System.showSettings(1);
+		
+		// there is no way we can intercept when the Close button is pressed, allowing us
+		// to hide the Flash dialog. Instead, we need to load a movie in the
+		// background that we can show a close button on.
+		_root.createEmptyMovieClip("_settingsBackground", 1);
+		_root._settingsBackground.loadMovie(DojoExternalInterface.dojoPath 
+																				+ "../dojox/storage/storage_dialog.swf");
+	}
+	
+	public function clear(namespace){
+		so = SharedObject.getLocal(namespace);
+		so.clear();
+		so.flush();
+		
+		// remove this namespace entry now
+		removeNamespace(namespace);
+	}
+	
+	public function getKeys(namespace) : String{
+		// Returns a list of the available keys in this namespace
+		
+		// get the storage object
+		so = SharedObject.getLocal(namespace);
+		// get all of the keys
+		var results = [];
+		for(var i in so.data){
+			results.push(i);	
+		}
+		
+		// remove our key that records our list of namespaces
+		for(var i = 0; i < results.length; i++){
+			if(results[i] == _NAMESPACE_KEY){
+				results.splice(i, 1);
+				break;
+			}
+		}
+		
+		// a bug in ExternalInterface transforms Arrays into
+		// Strings, so we can't use those here! -- BradNeuberg
+		results = results.join(",");
+		
+		return results;
+	}
+	
+	public function getNamespaces() : String{
+		var allNamespaces = SharedObject.getLocal(_NAMESPACE_KEY);
+		var results = [];
+		
+		for(var i in allNamespaces.data){
+			results.push(i);
+		}
+		
+		// a bug in ExternalInterface transforms Arrays into
+		// Strings, so we can use those here! -- BradNeuberg
+		results = results.join(",");
+		
+		return results;
+	}
+	
+	public function remove(keyName, namespace){
+		// Removes a key
+
+		// get the storage object
+		so = SharedObject.getLocal(namespace);
+		
+		// delete this value
+		delete so.data[keyName];
+		
+		// save the changes
+		so.flush();
+		
+		// see if we are the last entry for this namespace
+		var availableKeys = getKeys(namespace);
+		if(availableKeys == ""){
+			// we are empty
+			removeNamespace(namespace);
+		}
+	}
+	
+	//	Removes all the values for each keys on the metaKeys array
+	public function removeMultiple(metaKeys, namespace){		
+		//	get the storage object
+		so = SharedObject.getLocal(namespace);
+		
+		//	Create array of keys to read
+		var keys = metaKeys.split(",");
+		var results = new Array();
+
+		//	Delete elements
+		for(var i=0;i<keys.length;i++){
+			delete so.data[keys[i]];
+		}
+
+		// see if there are no more entries for this namespace
+		var availableKeys = getKeys(namespace);
+		if(availableKeys == ""){
+			// we are empty
+			removeNamespace(namespace);
+		}
+	}
+	
+	private function hasNamespace(namespace):Boolean{
+		// Get the SharedObject for the namespace list
+		var allNamespaces = SharedObject.getLocal(_NAMESPACE_KEY);
+		
+		var results = false;
+		for(var i in allNamespaces.data){
+			if(i == namespace){
+				results = true;
+				break;
+			}
+		}
+		
+		return results;
+	}
+	
+	// FIXME: This code has gotten ugly -- refactor
+	private function addNamespace(namespace, keyName){
+		if(hasNamespace(namespace) == true){
+			return;
+		}
+		
+		// Get the SharedObject for the namespace list
+		var allNamespaces = SharedObject.getLocal(_NAMESPACE_KEY);
+		
+		// prepare a storage status handler if the keyName is
+		// not null
+		if(keyName != null && typeof keyName != "undefined"){
+			var self = this;
+			allNamespaces.onStatus = function(infoObject:Object){
+				// delete the data value if the request was denied
+				if(infoObject.code == "SharedObject.Flush.Failed"){
+					delete self.so.data[keyName];
+				}
+				
+				var statusResults;
+				if(infoObject.code == "SharedObject.Flush.Failed"){
+					statusResults = Storage.FAILED;
+				}else if(infoObject.code == "SharedObject.Flush.Pending"){
+					statusResults = Storage.PENDING;
+				}else if(infoObject.code == "SharedObject.Flush.Success"){
+					statusResults = Storage.SUCCESS;
+				}
+				
+				// give the status results to JavaScript
+				DojoExternalInterface.call("dojox.storage._onStatus", statusResults, 
+				                            keyName, namespace);
+			}
+		}
+		
+		// save the namespace list
+		allNamespaces.data[namespace] = true;
+		var flushResults = allNamespaces.flush();
+		
+		// return results of this command to JavaScript
+		if(keyName != null && typeof keyName != "undefined"){
+			var statusResults;
+			if(flushResults == true){
+				statusResults = Storage.SUCCESS;
+			}else if(flushResults == "pending"){
+				statusResults = Storage.PENDING;
+			}else{
+				statusResults = Storage.FAILED;
+			}
+			
+			DojoExternalInterface.call("dojox.storage._onStatus", statusResults, 
+			                            keyName, namespace);
+		}
+	}
+	
+	// FIXME: This code has gotten ugly -- refactor
+	private function removeNamespace(namespace){
+		if(hasNamespace(namespace) == false){
+			return;
+		}
+		
+		// try to save the namespace list; don't have a return
+		// callback; if we fail on this, the worst that will happen
+		// is that we have a spurious namespace entry
+		var allNamespaces = SharedObject.getLocal(_NAMESPACE_KEY);
+		delete allNamespaces.data[namespace];
+		allNamespaces.flush();
+	}
+
+	static function main(mc){
+		_root.app = new Storage(); 
+	}
+}
+
Index: trunk/web/dojo/dojox/storage/FlashStorageProvider.js
===================================================================
--- trunk/web/dojo/dojox/storage/FlashStorageProvider.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/FlashStorageProvider.js	(revision 9)
@@ -0,0 +1,211 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.FlashStorageProvider"]){
+dojo._hasResource["dojox.storage.FlashStorageProvider"]=true;
+dojo.provide("dojox.storage.FlashStorageProvider");
+dojo.require("dojox.flash");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.Provider");
+dojo.declare("dojox.storage.FlashStorageProvider",dojox.storage.Provider,{initialized:false,_available:null,_statusHandler:null,_flashReady:false,_pageReady:false,initialize:function(){
+if(dojo.config["disableFlashStorage"]==true){
+return;
+}
+dojox.flash.addLoadedListener(dojo.hitch(this,function(){
+this._flashReady=true;
+if(this._flashReady&&this._pageReady){
+this._loaded();
+}
+}));
+var _1=dojo.moduleUrl("dojox","storage/Storage.swf").toString();
+dojox.flash.setSwf(_1,false);
+dojo.connect(dojo,"loaded",this,function(){
+this._pageReady=true;
+if(this._flashReady&&this._pageReady){
+this._loaded();
+}
+});
+},setFlushDelay:function(_2){
+if(_2===null||typeof _2==="undefined"||isNaN(_2)){
+throw new Error("Invalid argunment: "+_2);
+}
+dojox.flash.comm.setFlushDelay(String(_2));
+},getFlushDelay:function(){
+return Number(dojox.flash.comm.getFlushDelay());
+},flush:function(_3){
+if(_3==null||typeof _3=="undefined"){
+_3=dojox.storage.DEFAULT_NAMESPACE;
+}
+dojox.flash.comm.flush(_3);
+},isAvailable:function(){
+return (this._available=!dojo.config["disableFlashStorage"]);
+},put:function(_4,_5,_6,_7){
+if(!this.isValidKey(_4)){
+throw new Error("Invalid key given: "+_4);
+}
+if(!_7){
+_7=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_7)){
+throw new Error("Invalid namespace given: "+_7);
+}
+this._statusHandler=_6;
+if(dojo.isString(_5)){
+_5="string:"+_5;
+}else{
+_5=dojo.toJson(_5);
+}
+dojox.flash.comm.put(_4,_5,_7);
+},putMultiple:function(_8,_9,_a,_b){
+if(!this.isValidKeyArray(_8)||!_9 instanceof Array||_8.length!=_9.length){
+throw new Error("Invalid arguments: keys = ["+_8+"], values = ["+_9+"]");
+}
+if(!_b){
+_b=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_b)){
+throw new Error("Invalid namespace given: "+_b);
+}
+this._statusHandler=_a;
+var _c=_8.join(",");
+var _d=[];
+for(var i=0;i<_9.length;i++){
+if(dojo.isString(_9[i])){
+_9[i]="string:"+_9[i];
+}else{
+_9[i]=dojo.toJson(_9[i]);
+}
+_d[i]=_9[i].length;
+}
+var _e=_9.join("");
+var _f=_d.join(",");
+dojox.flash.comm.putMultiple(_c,_e,_f,_b);
+},get:function(key,_10){
+if(!this.isValidKey(key)){
+throw new Error("Invalid key given: "+key);
+}
+if(!_10){
+_10=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_10)){
+throw new Error("Invalid namespace given: "+_10);
+}
+var _11=dojox.flash.comm.get(key,_10);
+if(_11==""){
+return null;
+}
+return this._destringify(_11);
+},getMultiple:function(_12,_13){
+if(!this.isValidKeyArray(_12)){
+throw new ("Invalid key array given: "+_12);
+}
+if(!_13){
+_13=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_13)){
+throw new Error("Invalid namespace given: "+_13);
+}
+var _14=_12.join(",");
+var _15=dojox.flash.comm.getMultiple(_14,_13);
+var _16=eval("("+_15+")");
+for(var i=0;i<_16.length;i++){
+_16[i]=(_16[i]=="")?null:this._destringify(_16[i]);
+}
+return _16;
+},_destringify:function(_17){
+if(dojo.isString(_17)&&(/^string:/.test(_17))){
+_17=_17.substring("string:".length);
+}else{
+_17=dojo.fromJson(_17);
+}
+return _17;
+},getKeys:function(_18){
+if(!_18){
+_18=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_18)){
+throw new Error("Invalid namespace given: "+_18);
+}
+var _19=dojox.flash.comm.getKeys(_18);
+if(_19==null||_19=="null"){
+_19="";
+}
+_19=_19.split(",");
+_19.sort();
+return _19;
+},getNamespaces:function(){
+var _1a=dojox.flash.comm.getNamespaces();
+if(_1a==null||_1a=="null"){
+_1a=dojox.storage.DEFAULT_NAMESPACE;
+}
+_1a=_1a.split(",");
+_1a.sort();
+return _1a;
+},clear:function(_1b){
+if(!_1b){
+_1b=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_1b)){
+throw new Error("Invalid namespace given: "+_1b);
+}
+dojox.flash.comm.clear(_1b);
+},remove:function(key,_1c){
+if(!_1c){
+_1c=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_1c)){
+throw new Error("Invalid namespace given: "+_1c);
+}
+dojox.flash.comm.remove(key,_1c);
+},removeMultiple:function(_1d,_1e){
+if(!this.isValidKeyArray(_1d)){
+dojo.raise("Invalid key array given: "+_1d);
+}
+if(!_1e){
+_1e=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_1e)){
+throw new Error("Invalid namespace given: "+_1e);
+}
+var _1f=_1d.join(",");
+dojox.flash.comm.removeMultiple(_1f,_1e);
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return dojox.storage.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return true;
+},showSettingsUI:function(){
+dojox.flash.comm.showSettings();
+dojox.flash.obj.setVisible(true);
+dojox.flash.obj.center();
+},hideSettingsUI:function(){
+dojox.flash.obj.setVisible(false);
+if(dojo.isFunction(dojox.storage.onHideSettingsUI)){
+dojox.storage.onHideSettingsUI.call(null);
+}
+},getResourceList:function(){
+return [];
+},_loaded:function(){
+this._allNamespaces=this.getNamespaces();
+this.initialized=true;
+dojox.storage.manager.loaded();
+},_onStatus:function(_20,key,_21){
+var ds=dojox.storage;
+var dfo=dojox.flash.obj;
+if(_20==ds.PENDING){
+dfo.center();
+dfo.setVisible(true);
+}else{
+dfo.setVisible(false);
+}
+if(ds._statusHandler){
+ds._statusHandler.call(null,_20,key,null,_21);
+}
+}});
+dojox.storage.manager.register("dojox.storage.FlashStorageProvider",new dojox.storage.FlashStorageProvider());
+}
Index: trunk/web/dojo/dojox/storage/buildFlashStorage.sh
===================================================================
--- trunk/web/dojo/dojox/storage/buildFlashStorage.sh	(revision 0)
+++ trunk/web/dojo/dojox/storage/buildFlashStorage.sh	(revision 9)
@@ -0,0 +1,4 @@
+#!/bin/sh
+# TODO: FIXME: Get rid of this and hook it into Dojo's general build script
+# You must have mtasc to run this
+mtasc -trace DojoExternalInterface.trace -main -cp ../flash -swf Storage.swf -version 8 -header 215:138:10 Storage.as
Index: trunk/web/dojo/dojox/storage/AirDBStorageProvider.js
===================================================================
--- trunk/web/dojo/dojox/storage/AirDBStorageProvider.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/AirDBStorageProvider.js	(revision 9)
@@ -0,0 +1,177 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.AirDBStorageProvider"]){
+dojo._hasResource["dojox.storage.AirDBStorageProvider"]=true;
+dojo.provide("dojox.storage.AirDBStorageProvider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.storage.Provider");
+if(dojo.isAIR){
+(function(){
+if(!_1){
+var _1={};
+}
+_1.File=window.runtime.flash.filesystem.File;
+_1.SQLConnection=window.runtime.flash.data.SQLConnection;
+_1.SQLStatement=window.runtime.flash.data.SQLStatement;
+dojo.declare("dojox.storage.AirDBStorageProvider",[dojox.storage.Provider],{DATABASE_FILE:"dojo.db",TABLE_NAME:"__DOJO_STORAGE",initialized:false,_db:null,initialize:function(){
+this.initialized=false;
+try{
+this._db=new _1.SQLConnection();
+this._db.open(_1.File.applicationStorageDirectory.resolvePath(this.DATABASE_FILE));
+this._sql("CREATE TABLE IF NOT EXISTS "+this.TABLE_NAME+"(namespace TEXT, key TEXT, value TEXT)");
+this._sql("CREATE UNIQUE INDEX IF NOT EXISTS namespace_key_index ON "+this.TABLE_NAME+" (namespace, key)");
+this.initialized=true;
+}
+catch(e){
+}
+dojox.storage.manager.loaded();
+},_sql:function(_2,_3){
+var _4=new _1.SQLStatement();
+_4.sqlConnection=this._db;
+_4.text=_2;
+if(_3){
+for(var _5 in _3){
+_4.parameters[_5]=_3[_5];
+}
+}
+_4.execute();
+return _4.getResult();
+},_beginTransaction:function(){
+this._db.begin();
+},_commitTransaction:function(){
+this._db.commit();
+},isAvailable:function(){
+return true;
+},put:function(_6,_7,_8,_9){
+if(this.isValidKey(_6)==false){
+throw new Error("Invalid key given: "+_6);
+}
+_9=_9||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_9)==false){
+throw new Error("Invalid namespace given: "+_9);
+}
+try{
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_9,":key":_6});
+this._sql("INSERT INTO "+this.TABLE_NAME+" VALUES (:namespace, :key, :value)",{":namespace":_9,":key":_6,":value":_7});
+}
+catch(e){
+_8(this.FAILED,_6,e.toString());
+return;
+}
+if(_8){
+_8(this.SUCCESS,_6,null,_9);
+}
+},get:function(_a,_b){
+if(this.isValidKey(_a)==false){
+throw new Error("Invalid key given: "+_a);
+}
+_b=_b||this.DEFAULT_NAMESPACE;
+var _c=this._sql("SELECT * FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_b,":key":_a});
+if(_c.data&&_c.data.length){
+return _c.data[0].value;
+}
+return null;
+},getNamespaces:function(){
+var _d=[this.DEFAULT_NAMESPACE];
+var rs=this._sql("SELECT namespace FROM "+this.TABLE_NAME+" DESC GROUP BY namespace");
+if(rs.data){
+for(var i=0;i<rs.data.length;i++){
+if(rs.data[i].namespace!=this.DEFAULT_NAMESPACE){
+_d.push(rs.data[i].namespace);
+}
+}
+}
+return _d;
+},getKeys:function(_e){
+_e=_e||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_e)==false){
+throw new Error("Invalid namespace given: "+_e);
+}
+var _f=[];
+var rs=this._sql("SELECT key FROM "+this.TABLE_NAME+" WHERE namespace = :namespace",{":namespace":_e});
+if(rs.data){
+for(var i=0;i<rs.data.length;i++){
+_f.push(rs.data[i].key);
+}
+}
+return _f;
+},clear:function(_10){
+if(this.isValidKey(_10)==false){
+throw new Error("Invalid namespace given: "+_10);
+}
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace",{":namespace":_10});
+},remove:function(key,_11){
+_11=_11||this.DEFAULT_NAMESPACE;
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_11,":key":key});
+},putMultiple:function(_12,_13,_14,_15){
+if(this.isValidKeyArray(_12)===false||!_13 instanceof Array||_12.length!=_13.length){
+throw new Error("Invalid arguments: keys = ["+_12+"], values = ["+_13+"]");
+}
+if(_15==null||typeof _15=="undefined"){
+_15=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_15)==false){
+throw new Error("Invalid namespace given: "+_15);
+}
+this._statusHandler=_14;
+try{
+this._beginTransaction();
+for(var i=0;i<_12.length;i++){
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_15,":key":_12[i]});
+this._sql("INSERT INTO "+this.TABLE_NAME+" VALUES (:namespace, :key, :value)",{":namespace":_15,":key":_12[i],":value":_13[i]});
+}
+this._commitTransaction();
+}
+catch(e){
+if(_14){
+_14(this.FAILED,_12,e.toString(),_15);
+}
+return;
+}
+if(_14){
+_14(this.SUCCESS,_12,null);
+}
+},getMultiple:function(_16,_17){
+if(this.isValidKeyArray(_16)===false){
+throw new Error("Invalid key array given: "+_16);
+}
+if(_17==null||typeof _17=="undefined"){
+_17=this.DEFAULT_NAMESPACE;
+}
+if(this.isValidKey(_17)==false){
+throw new Error("Invalid namespace given: "+_17);
+}
+var _18=[];
+for(var i=0;i<_16.length;i++){
+var _19=this._sql("SELECT * FROM "+this.TABLE_NAME+" WHERE namespace = :namespace AND key = :key",{":namespace":_17,":key":_16[i]});
+_18[i]=_19.data&&_19.data.length?_19.data[0].value:null;
+}
+return _18;
+},removeMultiple:function(_1a,_1b){
+_1b=_1b||this.DEFAULT_NAMESPACE;
+this._beginTransaction();
+for(var i=0;i<_1a.length;i++){
+this._sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = namespace = :namespace AND key = :key",{":namespace":_1b,":key":_1a[i]});
+}
+this._commitTransaction();
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+}});
+dojox.storage.manager.register("dojox.storage.AirDBStorageProvider",new dojox.storage.AirDBStorageProvider());
+dojox.storage.manager.initialize();
+})();
+}
+}
Index: trunk/web/dojo/dojox/storage/GearsStorageProvider.js
===================================================================
--- trunk/web/dojo/dojox/storage/GearsStorageProvider.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/GearsStorageProvider.js	(revision 9)
@@ -0,0 +1,230 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.GearsStorageProvider"]){
+dojo._hasResource["dojox.storage.GearsStorageProvider"]=true;
+dojo.provide("dojox.storage.GearsStorageProvider");
+dojo.require("dojo.gears");
+dojo.require("dojox.storage.Provider");
+dojo.require("dojox.storage.manager");
+dojo.require("dojox.sql");
+if(dojo.gears.available){
+(function(){
+dojo.declare("dojox.storage.GearsStorageProvider",dojox.storage.Provider,{constructor:function(){
+},TABLE_NAME:"__DOJO_STORAGE",initialized:false,_available:null,_storageReady:false,initialize:function(){
+if(dojo.config["disableGearsStorage"]==true){
+return;
+}
+this.TABLE_NAME="__DOJO_STORAGE";
+this.initialized=true;
+dojox.storage.manager.loaded();
+},isAvailable:function(){
+return this._available=dojo.gears.available;
+},put:function(_1,_2,_3,_4){
+this._initStorage();
+if(!this.isValidKey(_1)){
+throw new Error("Invalid key given: "+_1);
+}
+_4=_4||this.DEFAULT_NAMESPACE;
+if(!this.isValidKey(_4)){
+throw new Error("Invalid namespace given: "+_1);
+}
+if(dojo.isString(_2)){
+_2="string:"+_2;
+}else{
+_2=dojo.toJson(_2);
+}
+try{
+dojox.sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = ? AND key = ?",_4,_1);
+dojox.sql("INSERT INTO "+this.TABLE_NAME+" VALUES (?, ?, ?)",_4,_1,_2);
+}
+catch(e){
+_3(this.FAILED,_1,e.toString(),_4);
+return;
+}
+if(_3){
+_3(dojox.storage.SUCCESS,_1,null,_4);
+}
+},get:function(_5,_6){
+this._initStorage();
+if(!this.isValidKey(_5)){
+throw new Error("Invalid key given: "+_5);
+}
+_6=_6||this.DEFAULT_NAMESPACE;
+if(!this.isValidKey(_6)){
+throw new Error("Invalid namespace given: "+_5);
+}
+var _7=dojox.sql("SELECT * FROM "+this.TABLE_NAME+" WHERE namespace = ? AND "+" key = ?",_6,_5);
+if(!_7.length){
+return null;
+}else{
+_7=_7[0].value;
+}
+if(dojo.isString(_7)&&(/^string:/.test(_7))){
+_7=_7.substring("string:".length);
+}else{
+_7=dojo.fromJson(_7);
+}
+return _7;
+},getNamespaces:function(){
+this._initStorage();
+var _8=[dojox.storage.DEFAULT_NAMESPACE];
+var rs=dojox.sql("SELECT namespace FROM "+this.TABLE_NAME+" DESC GROUP BY namespace");
+for(var i=0;i<rs.length;i++){
+if(rs[i].namespace!=dojox.storage.DEFAULT_NAMESPACE){
+_8.push(rs[i].namespace);
+}
+}
+return _8;
+},getKeys:function(_9){
+this._initStorage();
+_9=_9||this.DEFAULT_NAMESPACE;
+if(!this.isValidKey(_9)){
+throw new Error("Invalid namespace given: "+_9);
+}
+var rs=dojox.sql("SELECT key FROM "+this.TABLE_NAME+" WHERE namespace = ?",_9);
+var _a=[];
+for(var i=0;i<rs.length;i++){
+_a.push(rs[i].key);
+}
+return _a;
+},clear:function(_b){
+this._initStorage();
+_b=_b||this.DEFAULT_NAMESPACE;
+if(!this.isValidKey(_b)){
+throw new Error("Invalid namespace given: "+_b);
+}
+dojox.sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = ?",_b);
+},remove:function(_c,_d){
+this._initStorage();
+if(!this.isValidKey(_c)){
+throw new Error("Invalid key given: "+_c);
+}
+_d=_d||this.DEFAULT_NAMESPACE;
+if(!this.isValidKey(_d)){
+throw new Error("Invalid namespace given: "+_c);
+}
+dojox.sql("DELETE FROM "+this.TABLE_NAME+" WHERE namespace = ? AND"+" key = ?",_d,_c);
+},putMultiple:function(_e,_f,_10,_11){
+this._initStorage();
+if(!this.isValidKeyArray(_e)||!_f instanceof Array||_e.length!=_f.length){
+throw new Error("Invalid arguments: keys = ["+_e+"], values = ["+_f+"]");
+}
+if(_11==null||typeof _11=="undefined"){
+_11=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_11)){
+throw new Error("Invalid namespace given: "+_11);
+}
+this._statusHandler=_10;
+try{
+dojox.sql.open();
+dojox.sql.db.execute("BEGIN TRANSACTION");
+var _12="REPLACE INTO "+this.TABLE_NAME+" VALUES (?, ?, ?)";
+for(var i=0;i<_e.length;i++){
+var _13=_f[i];
+if(dojo.isString(_13)){
+_13="string:"+_13;
+}else{
+_13=dojo.toJson(_13);
+}
+dojox.sql.db.execute(_12,[_11,_e[i],_13]);
+}
+dojox.sql.db.execute("COMMIT TRANSACTION");
+dojox.sql.close();
+}
+catch(e){
+if(_10){
+_10(this.FAILED,_e,e.toString(),_11);
+}
+return;
+}
+if(_10){
+_10(dojox.storage.SUCCESS,_e,null,_11);
+}
+},getMultiple:function(_14,_15){
+this._initStorage();
+if(!this.isValidKeyArray(_14)){
+throw new ("Invalid key array given: "+_14);
+}
+if(_15==null||typeof _15=="undefined"){
+_15=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_15)){
+throw new Error("Invalid namespace given: "+_15);
+}
+var _16="SELECT * FROM "+this.TABLE_NAME+" WHERE namespace = ? AND "+" key = ?";
+var _17=[];
+for(var i=0;i<_14.length;i++){
+var _18=dojox.sql(_16,_15,_14[i]);
+if(!_18.length){
+_17[i]=null;
+}else{
+_18=_18[0].value;
+if(dojo.isString(_18)&&(/^string:/.test(_18))){
+_17[i]=_18.substring("string:".length);
+}else{
+_17[i]=dojo.fromJson(_18);
+}
+}
+}
+return _17;
+},removeMultiple:function(_19,_1a){
+this._initStorage();
+if(!this.isValidKeyArray(_19)){
+throw new Error("Invalid arguments: keys = ["+_19+"]");
+}
+if(_1a==null||typeof _1a=="undefined"){
+_1a=dojox.storage.DEFAULT_NAMESPACE;
+}
+if(!this.isValidKey(_1a)){
+throw new Error("Invalid namespace given: "+_1a);
+}
+dojox.sql.open();
+dojox.sql.db.execute("BEGIN TRANSACTION");
+var _1b="DELETE FROM "+this.TABLE_NAME+" WHERE namespace = ? AND key = ?";
+for(var i=0;i<_19.length;i++){
+dojox.sql.db.execute(_1b,[_1a,_19[i]]);
+}
+dojox.sql.db.execute("COMMIT TRANSACTION");
+dojox.sql.close();
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},_initStorage:function(){
+if(this._storageReady){
+return;
+}
+if(!google.gears.factory.hasPermission){
+var _1c=null;
+var _1d=null;
+var msg="This site would like to use Google Gears to enable "+"enhanced functionality.";
+var _1e=google.gears.factory.getPermission(_1c,_1d,msg);
+if(!_1e){
+throw new Error("You must give permission to use Gears in order to "+"store data");
+}
+}
+try{
+dojox.sql("CREATE TABLE IF NOT EXISTS "+this.TABLE_NAME+"( "+" namespace TEXT, "+" key TEXT, "+" value TEXT "+")");
+dojox.sql("CREATE UNIQUE INDEX IF NOT EXISTS namespace_key_index"+" ON "+this.TABLE_NAME+" (namespace, key)");
+}
+catch(e){
+throw new Error("Unable to create storage tables for Gears in "+"Dojo Storage");
+}
+this._storageReady=true;
+}});
+dojox.storage.manager.register("dojox.storage.GearsStorageProvider",new dojox.storage.GearsStorageProvider());
+})();
+}
+}
Index: trunk/web/dojo/dojox/storage/WhatWGStorageProvider.js
===================================================================
--- trunk/web/dojo/dojox/storage/WhatWGStorageProvider.js	(revision 0)
+++ trunk/web/dojo/dojox/storage/WhatWGStorageProvider.js	(revision 9)
@@ -0,0 +1,156 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.storage.WhatWGStorageProvider"]){
+dojo._hasResource["dojox.storage.WhatWGStorageProvider"]=true;
+dojo.provide("dojox.storage.WhatWGStorageProvider");
+dojo.require("dojox.storage.Provider");
+dojo.require("dojox.storage.manager");
+dojo.declare("dojox.storage.WhatWGStorageProvider",[dojox.storage.Provider],{initialized:false,_domain:null,_available:null,_statusHandler:null,_allNamespaces:null,_storageEventListener:null,initialize:function(){
+if(dojo.config["disableWhatWGStorage"]==true){
+return;
+}
+this._domain=location.hostname;
+this.initialized=true;
+dojox.storage.manager.loaded();
+},isAvailable:function(){
+try{
+var _1=globalStorage[location.hostname];
+}
+catch(e){
+this._available=false;
+return this._available;
+}
+this._available=true;
+return this._available;
+},put:function(_2,_3,_4,_5){
+if(this.isValidKey(_2)==false){
+throw new Error("Invalid key given: "+_2);
+}
+_5=_5||this.DEFAULT_NAMESPACE;
+_2=this.getFullKey(_2,_5);
+this._statusHandler=_4;
+if(dojo.isString(_3)){
+_3="string:"+_3;
+}else{
+_3=dojo.toJson(_3);
+}
+var _6=dojo.hitch(this,function(_7){
+window.removeEventListener("storage",_6,false);
+if(_4){
+_4.call(null,this.SUCCESS,_2,null,_5);
+}
+});
+window.addEventListener("storage",_6,false);
+try{
+var _8=globalStorage[this._domain];
+_8.setItem(_2,_3);
+}
+catch(e){
+this._statusHandler.call(null,this.FAILED,_2,e.toString(),_5);
+}
+},get:function(_9,_a){
+if(this.isValidKey(_9)==false){
+throw new Error("Invalid key given: "+_9);
+}
+_a=_a||this.DEFAULT_NAMESPACE;
+_9=this.getFullKey(_9,_a);
+var _b=globalStorage[this._domain];
+var _c=_b.getItem(_9);
+if(_c==null||_c==""){
+return null;
+}
+_c=_c.value;
+if(dojo.isString(_c)&&(/^string:/.test(_c))){
+_c=_c.substring("string:".length);
+}else{
+_c=dojo.fromJson(_c);
+}
+return _c;
+},getNamespaces:function(){
+var _d=[this.DEFAULT_NAMESPACE];
+var _e={};
+var _f=globalStorage[this._domain];
+var _10=/^__([^_]*)_/;
+for(var i=0;i<_f.length;i++){
+var _11=_f.key(i);
+if(_10.test(_11)==true){
+var _12=_11.match(_10)[1];
+if(typeof _e[_12]=="undefined"){
+_e[_12]=true;
+_d.push(_12);
+}
+}
+}
+return _d;
+},getKeys:function(_13){
+_13=_13||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_13)==false){
+throw new Error("Invalid namespace given: "+_13);
+}
+var _14;
+if(_13==this.DEFAULT_NAMESPACE){
+_14=new RegExp("^([^_]{2}.*)$");
+}else{
+_14=new RegExp("^__"+_13+"_(.*)$");
+}
+var _15=globalStorage[this._domain];
+var _16=[];
+for(var i=0;i<_15.length;i++){
+var _17=_15.key(i);
+if(_14.test(_17)==true){
+_17=_17.match(_14)[1];
+_16.push(_17);
+}
+}
+return _16;
+},clear:function(_18){
+_18=_18||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_18)==false){
+throw new Error("Invalid namespace given: "+_18);
+}
+var _19;
+if(_18==this.DEFAULT_NAMESPACE){
+_19=new RegExp("^[^_]{2}");
+}else{
+_19=new RegExp("^__"+_18+"_");
+}
+var _1a=globalStorage[this._domain];
+var _1b=[];
+for(var i=0;i<_1a.length;i++){
+if(_19.test(_1a.key(i))==true){
+_1b[_1b.length]=_1a.key(i);
+}
+}
+dojo.forEach(_1b,dojo.hitch(_1a,"removeItem"));
+},remove:function(key,_1c){
+key=this.getFullKey(key,_1c);
+var _1d=globalStorage[this._domain];
+_1d.removeItem(key);
+},isPermanent:function(){
+return true;
+},getMaximumSize:function(){
+return this.SIZE_NO_LIMIT;
+},hasSettingsUI:function(){
+return false;
+},showSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},hideSettingsUI:function(){
+throw new Error(this.declaredClass+" does not support a storage settings user-interface");
+},getFullKey:function(key,_1e){
+_1e=_1e||this.DEFAULT_NAMESPACE;
+if(this.isValidKey(_1e)==false){
+throw new Error("Invalid namespace given: "+_1e);
+}
+if(_1e==this.DEFAULT_NAMESPACE){
+return key;
+}else{
+return "__"+_1e+"_"+key;
+}
+}});
+dojox.storage.manager.register("dojox.storage.WhatWGStorageProvider",new dojox.storage.WhatWGStorageProvider());
+}
Index: trunk/web/dojo/dojox/validate.js
===================================================================
--- trunk/web/dojo/dojox/validate.js	(revision 0)
+++ trunk/web/dojo/dojox/validate.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.validate"]){
+dojo._hasResource["dojox.validate"]=true;
+dojo.provide("dojox.validate");
+dojo.require("dojox.validate._base");
+}
Index: trunk/web/dojo/dojox/wire/DataWire.js
===================================================================
--- trunk/web/dojo/dojox/wire/DataWire.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/DataWire.js	(revision 9)
@@ -0,0 +1,84 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.DataWire"]){
+dojo._hasResource["dojox.wire.DataWire"]=true;
+dojo.provide("dojox.wire.DataWire");
+dojo.require("dojox.wire.Wire");
+dojo.declare("dojox.wire.DataWire",dojox.wire.Wire,{_wireClass:"dojox.wire.DataWire",constructor:function(_1){
+if(!this.dataStore&&this.parent){
+this.dataStore=this.parent.dataStore;
+}
+},_getValue:function(_2){
+if(!_2||!this.attribute||!this.dataStore){
+return _2;
+}
+var _3=_2;
+var _4=this.attribute.split(".");
+for(var i in _4){
+_3=this._getAttributeValue(_3,_4[i]);
+if(!_3){
+return undefined;
+}
+}
+return _3;
+},_setValue:function(_5,_6){
+if(!_5||!this.attribute||!this.dataStore){
+return _5;
+}
+var _7=_5;
+var _8=this.attribute.split(".");
+var _9=_8.length-1;
+for(var i=0;i<_9;i++){
+_7=this._getAttributeValue(_7,_8[i]);
+if(!_7){
+return undefined;
+}
+}
+this._setAttributeValue(_7,_8[_9],_6);
+return _5;
+},_getAttributeValue:function(_a,_b){
+var _c=undefined;
+var i1=_b.indexOf("[");
+if(i1>=0){
+var i2=_b.indexOf("]");
+var _d=_b.substring(i1+1,i2);
+_b=_b.substring(0,i1);
+var _e=this.dataStore.getValues(_a,_b);
+if(_e){
+if(!_d){
+_c=_e;
+}else{
+_c=_e[_d];
+}
+}
+}else{
+_c=this.dataStore.getValue(_a,_b);
+}
+return _c;
+},_setAttributeValue:function(_f,_10,_11){
+var i1=_10.indexOf("[");
+if(i1>=0){
+var i2=_10.indexOf("]");
+var _12=_10.substring(i1+1,i2);
+_10=_10.substring(0,i1);
+var _13=null;
+if(!_12){
+_13=_11;
+}else{
+_13=this.dataStore.getValues(_f,_10);
+if(!_13){
+_13=[];
+}
+_13[_12]=_11;
+}
+this.dataStore.setValues(_f,_10,_13);
+}else{
+this.dataStore.setValue(_f,_10,_11);
+}
+}});
+}
Index: trunk/web/dojo/dojox/wire/TreeAdapter.js
===================================================================
--- trunk/web/dojo/dojox/wire/TreeAdapter.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/TreeAdapter.js	(revision 9)
@@ -0,0 +1,88 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.TreeAdapter"]){
+dojo._hasResource["dojox.wire.TreeAdapter"]=true;
+dojo.provide("dojox.wire.TreeAdapter");
+dojo.require("dojox.wire.CompositeWire");
+dojo.declare("dojox.wire.TreeAdapter",dojox.wire.CompositeWire,{_wireClass:"dojox.wire.TreeAdapter",constructor:function(_1){
+this._initializeChildren(this.nodes);
+},_getValue:function(_2){
+if(!_2||!this.nodes){
+return _2;
+}
+var _3=_2;
+if(!dojo.isArray(_3)){
+_3=[_3];
+}
+var _4=[];
+for(var i in _3){
+for(var i2 in this.nodes){
+_4=_4.concat(this._getNodes(_3[i],this.nodes[i2]));
+}
+}
+return _4;
+},_setValue:function(_5,_6){
+throw new Error("Unsupported API: "+this._wireClass+"._setValue");
+},_initializeChildren:function(_7){
+if(!_7){
+return;
+}
+for(var i in _7){
+var _8=_7[i];
+if(_8.node){
+_8.node.parent=this;
+if(!dojox.wire.isWire(_8.node)){
+_8.node=dojox.wire.create(_8.node);
+}
+}
+if(_8.title){
+_8.title.parent=this;
+if(!dojox.wire.isWire(_8.title)){
+_8.title=dojox.wire.create(_8.title);
+}
+}
+if(_8.children){
+this._initializeChildren(_8.children);
+}
+}
+},_getNodes:function(_9,_a){
+var _b=null;
+if(_a.node){
+_b=_a.node.getValue(_9);
+if(!_b){
+return [];
+}
+if(!dojo.isArray(_b)){
+_b=[_b];
+}
+}else{
+_b=[_9];
+}
+var _c=[];
+for(var i in _b){
+_9=_b[i];
+var _d={};
+if(_a.title){
+_d.title=_a.title.getValue(_9);
+}else{
+_d.title=_9;
+}
+if(_a.children){
+var _e=[];
+for(var i2 in _a.children){
+_e=_e.concat(this._getNodes(_9,_a.children[i2]));
+}
+if(_e.length>0){
+_d.children=_e;
+}
+}
+_c.push(_d);
+}
+return _c;
+}});
+}
Index: trunk/web/dojo/dojox/wire/README
===================================================================
--- trunk/web/dojo/dojox/wire/README	(revision 0)
+++ trunk/web/dojo/dojox/wire/README	(revision 9)
@@ -0,0 +1,54 @@
+-------------------------------------------------------------------------------
+DojoX Wire
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 05/29/2007
+-------------------------------------------------------------------------------
+Project state: production
+-------------------------------------------------------------------------------
+Project authors
+	Jared Jurkiewicz (jared.jurkiewicz@gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+The DojoX Wire project is a set of functions that build a generic data binding
+and service invocation library to simplify how data values across a wide
+variety of widget and non-widget JavaScript constructs are accessed, updated,
+and passed to and from services.  It also provides a set of widgets 
+within the dojox.wire.ml package to allow for declarative data binding 
+definitions in addition to the programmatic APIs.
+
+In essense, this project is an API to provide a simplified way of doing MVC
+patterns in the client.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX Wire has dependencies on core dojo, the dijit widget system (for classes 
+in the dojox.wire.ml package), dojox.data, dojox.xml, and the D.O.H. unit test 
+framework.
+-------------------------------------------------------------------------------
+Documentation:
+
+See the Dojo API tool (http://dojotoolkit.org/api)
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/wire.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/wire/*
+
+Install into the following directory structure:
+/dojox/wire/
+
+...which should be at the same level as your Dojo checkout.
+
+It should look like:
+/dojox/wire.js
+/dojox/wire/*
+
+Require in dojox.wire for all baseline functions (dojox.wire.connect, 
+dojox.wire.register, etc).  For specific Wire classes,
+require in the appropriate dojox.wire.<Class>.
+-------------------------------------------------------------------------------
+
Index: trunk/web/dojo/dojox/wire/TextAdapter.js
===================================================================
--- trunk/web/dojo/dojox/wire/TextAdapter.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/TextAdapter.js	(revision 9)
@@ -0,0 +1,40 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.TextAdapter"]){
+dojo._hasResource["dojox.wire.TextAdapter"]=true;
+dojo.provide("dojox.wire.TextAdapter");
+dojo.require("dojox.wire.CompositeWire");
+dojo.declare("dojox.wire.TextAdapter",dojox.wire.CompositeWire,{_wireClass:"dojox.wire.TextAdapter",constructor:function(_1){
+this._initializeChildren(this.segments);
+if(!this.delimiter){
+this.delimiter="";
+}
+},_getValue:function(_2){
+if(!_2||!this.segments){
+return _2;
+}
+var _3="";
+for(var i in this.segments){
+var _4=this.segments[i].getValue(_2);
+_3=this._addSegment(_3,_4);
+}
+return _3;
+},_setValue:function(_5,_6){
+throw new Error("Unsupported API: "+this._wireClass+"._setValue");
+},_addSegment:function(_7,_8){
+if(!_8){
+return _7;
+}else{
+if(!_7){
+return _8;
+}else{
+return _7+this.delimiter+_8;
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/wire/Wire.js
===================================================================
--- trunk/web/dojo/dojox/wire/Wire.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/Wire.js	(revision 9)
@@ -0,0 +1,251 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.Wire"]){
+dojo._hasResource["dojox.wire.Wire"]=true;
+dojo.provide("dojox.wire.Wire");
+dojo.require("dojox.wire._base");
+dojo.declare("dojox.wire.Wire",null,{_wireClass:"dojox.wire.Wire",constructor:function(_1){
+dojo.mixin(this,_1);
+if(this.converter){
+if(dojo.isString(this.converter)){
+var _2=dojo.getObject(this.converter);
+if(dojo.isFunction(_2)){
+try{
+var _3=new _2();
+if(_3&&!dojo.isFunction(_3["convert"])){
+this.converter={convert:_2};
+}else{
+this.converter=_3;
+}
+}
+catch(e){
+}
+}else{
+if(dojo.isObject(_2)){
+if(dojo.isFunction(_2["convert"])){
+this.converter=_2;
+}
+}
+}
+if(dojo.isString(this.converter)){
+var _4=dojox.wire._getClass(this.converter);
+if(_4){
+this.converter=new _4();
+}else{
+this.converter=undefined;
+}
+}
+}else{
+if(dojo.isFunction(this.converter)){
+this.converter={convert:this.converter};
+}
+}
+}
+},getValue:function(_5){
+var _6=undefined;
+if(dojox.wire.isWire(this.object)){
+_6=this.object.getValue(_5);
+}else{
+_6=(this.object||_5);
+}
+if(this.property){
+var _7=this.property.split(".");
+for(var i in _7){
+if(!_6){
+return _6;
+}
+_6=this._getPropertyValue(_6,_7[i]);
+}
+}
+var _8=undefined;
+if(this._getValue){
+_8=this._getValue(_6);
+}else{
+_8=_6;
+}
+if(_8){
+if(this.type){
+if(this.type=="string"){
+_8=_8.toString();
+}else{
+if(this.type=="number"){
+_8=parseInt(_8,10);
+}else{
+if(this.type=="boolean"){
+_8=(_8!="false");
+}else{
+if(this.type=="array"){
+if(!dojo.isArray(_8)){
+_8=[_8];
+}
+}
+}
+}
+}
+}
+if(this.converter&&this.converter.convert){
+_8=this.converter.convert(_8,this);
+}
+}
+return _8;
+},setValue:function(_9,_a){
+var _b=undefined;
+if(dojox.wire.isWire(this.object)){
+_b=this.object.getValue(_a);
+}else{
+_b=(this.object||_a);
+}
+var _c=undefined;
+var o;
+if(this.property){
+if(!_b){
+if(dojox.wire.isWire(this.object)){
+_b={};
+this.object.setValue(_b,_a);
+}else{
+throw new Error(this._wireClass+".setValue(): invalid object");
+}
+}
+var _d=this.property.split(".");
+var _e=_d.length-1;
+for(var i=0;i<_e;i++){
+var p=_d[i];
+o=this._getPropertyValue(_b,p);
+if(!o){
+o={};
+this._setPropertyValue(_b,p,o);
+}
+_b=o;
+}
+_c=_d[_e];
+}
+if(this._setValue){
+if(_c){
+o=this._getPropertyValue(_b,_c);
+if(!o){
+o={};
+this._setPropertyValue(_b,_c,o);
+}
+_b=o;
+}
+var _f=this._setValue(_b,_9);
+if(!_b&&_f){
+if(dojox.wire.isWire(this.object)){
+this.object.setValue(_f,_a);
+}else{
+throw new Error(this._wireClass+".setValue(): invalid object");
+}
+}
+}else{
+if(_c){
+this._setPropertyValue(_b,_c,_9);
+}else{
+if(dojox.wire.isWire(this.object)){
+this.object.setValue(_9,_a);
+}else{
+throw new Error(this._wireClass+".setValue(): invalid property");
+}
+}
+}
+},_getPropertyValue:function(_10,_11){
+var _12=undefined;
+var i1=_11.indexOf("[");
+if(i1>=0){
+var i2=_11.indexOf("]");
+var _13=_11.substring(i1+1,i2);
+var _14=null;
+if(i1===0){
+_14=_10;
+}else{
+_11=_11.substring(0,i1);
+_14=this._getPropertyValue(_10,_11);
+if(_14&&!dojo.isArray(_14)){
+_14=[_14];
+}
+}
+if(_14){
+_12=_14[_13];
+}
+}else{
+if(_10.getPropertyValue){
+_12=_10.getPropertyValue(_11);
+}else{
+var _15="get"+_11.charAt(0).toUpperCase()+_11.substring(1);
+if(this._useGet(_10)){
+_12=_10.get(_11);
+}else{
+if(this._useAttr(_10)){
+_12=_10.attr(_11);
+}else{
+if(_10[_15]){
+_12=_10[_15]();
+}else{
+_12=_10[_11];
+}
+}
+}
+}
+}
+return _12;
+},_setPropertyValue:function(_16,_17,_18){
+var i1=_17.indexOf("[");
+if(i1>=0){
+var i2=_17.indexOf("]");
+var _19=_17.substring(i1+1,i2);
+var _1a=null;
+if(i1===0){
+_1a=_16;
+}else{
+_17=_17.substring(0,i1);
+_1a=this._getPropertyValue(_16,_17);
+if(!_1a){
+_1a=[];
+this._setPropertyValue(_16,_17,_1a);
+}
+}
+_1a[_19]=_18;
+}else{
+if(_16.setPropertyValue){
+_16.setPropertyValue(_17,_18);
+}else{
+var _1b="set"+_17.charAt(0).toUpperCase()+_17.substring(1);
+if(this._useSet(_16)){
+_16.set(_17,_18);
+}else{
+if(this._useAttr(_16)){
+_16.attr(_17,_18);
+}else{
+if(_16[_1b]){
+_16[_1b](_18);
+}else{
+_16[_17]=_18;
+}
+}
+}
+}
+}
+},_useGet:function(_1c){
+var _1d=false;
+if(dojo.isFunction(_1c.get)){
+_1d=true;
+}
+return _1d;
+},_useSet:function(_1e){
+var _1f=false;
+if(dojo.isFunction(_1e.set)){
+_1f=true;
+}
+return _1f;
+},_useAttr:function(_20){
+var _21=false;
+if(dojo.isFunction(_20.attr)){
+_21=true;
+}
+return _21;
+}});
+}
Index: trunk/web/dojo/dojox/wire/XmlWire.js
===================================================================
--- trunk/web/dojo/dojox/wire/XmlWire.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/XmlWire.js	(revision 9)
@@ -0,0 +1,135 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.XmlWire"]){
+dojo._hasResource["dojox.wire.XmlWire"]=true;
+dojo.provide("dojox.wire.XmlWire");
+dojo.require("dojox.xml.parser");
+dojo.require("dojox.wire.Wire");
+dojo.declare("dojox.wire.XmlWire",dojox.wire.Wire,{_wireClass:"dojox.wire.XmlWire",constructor:function(_1){
+},_getValue:function(_2){
+if(!_2||!this.path){
+return _2;
+}
+var _3=_2;
+var _4=this.path;
+var i;
+if(_4.charAt(0)=="/"){
+i=_4.indexOf("/",1);
+_4=_4.substring(i+1);
+}
+var _5=_4.split("/");
+var _6=_5.length-1;
+for(i=0;i<_6;i++){
+_3=this._getChildNode(_3,_5[i]);
+if(!_3){
+return undefined;
+}
+}
+var _7=this._getNodeValue(_3,_5[_6]);
+return _7;
+},_setValue:function(_8,_9){
+if(!this.path){
+return _8;
+}
+var _a=_8;
+var _b=this._getDocument(_a);
+var _c=this.path;
+var i;
+if(_c.charAt(0)=="/"){
+i=_c.indexOf("/",1);
+if(!_a){
+var _d=_c.substring(1,i);
+_a=_b.createElement(_d);
+_8=_a;
+}
+_c=_c.substring(i+1);
+}else{
+if(!_a){
+return undefined;
+}
+}
+var _e=_c.split("/");
+var _f=_e.length-1;
+for(i=0;i<_f;i++){
+var _10=this._getChildNode(_a,_e[i]);
+if(!_10){
+_10=_b.createElement(_e[i]);
+_a.appendChild(_10);
+}
+_a=_10;
+}
+this._setNodeValue(_a,_e[_f],_9);
+return _8;
+},_getNodeValue:function(_11,exp){
+var _12=undefined;
+if(exp.charAt(0)=="@"){
+var _13=exp.substring(1);
+_12=_11.getAttribute(_13);
+}else{
+if(exp=="text()"){
+var _14=_11.firstChild;
+if(_14){
+_12=_14.nodeValue;
+}
+}else{
+_12=[];
+for(var i=0;i<_11.childNodes.length;i++){
+var _15=_11.childNodes[i];
+if(_15.nodeType===1&&_15.nodeName==exp){
+_12.push(_15);
+}
+}
+}
+}
+return _12;
+},_setNodeValue:function(_16,exp,_17){
+if(exp.charAt(0)=="@"){
+var _18=exp.substring(1);
+if(_17){
+_16.setAttribute(_18,_17);
+}else{
+_16.removeAttribute(_18);
+}
+}else{
+if(exp=="text()"){
+while(_16.firstChild){
+_16.removeChild(_16.firstChild);
+}
+if(_17){
+var _19=this._getDocument(_16).createTextNode(_17);
+_16.appendChild(_19);
+}
+}
+}
+},_getChildNode:function(_1a,_1b){
+var _1c=1;
+var i1=_1b.indexOf("[");
+if(i1>=0){
+var i2=_1b.indexOf("]");
+_1c=_1b.substring(i1+1,i2);
+_1b=_1b.substring(0,i1);
+}
+var _1d=1;
+for(var i=0;i<_1a.childNodes.length;i++){
+var _1e=_1a.childNodes[i];
+if(_1e.nodeType===1&&_1e.nodeName==_1b){
+if(_1d==_1c){
+return _1e;
+}
+_1d++;
+}
+}
+return null;
+},_getDocument:function(_1f){
+if(_1f){
+return (_1f.nodeType==9?_1f:_1f.ownerDocument);
+}else{
+return dojox.xml.parser.parse();
+}
+}});
+}
Index: trunk/web/dojo/dojox/wire/TableAdapter.js
===================================================================
--- trunk/web/dojo/dojox/wire/TableAdapter.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/TableAdapter.js	(revision 9)
@@ -0,0 +1,37 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.TableAdapter"]){
+dojo._hasResource["dojox.wire.TableAdapter"]=true;
+dojo.provide("dojox.wire.TableAdapter");
+dojo.require("dojox.wire.CompositeWire");
+dojo.declare("dojox.wire.TableAdapter",dojox.wire.CompositeWire,{_wireClass:"dojox.wire.TableAdapter",constructor:function(_1){
+this._initializeChildren(this.columns);
+},_getValue:function(_2){
+if(!_2||!this.columns){
+return _2;
+}
+var _3=_2;
+if(!dojo.isArray(_3)){
+_3=[_3];
+}
+var _4=[];
+for(var i in _3){
+var _5=this._getRow(_3[i]);
+_4.push(_5);
+}
+return _4;
+},_setValue:function(_6,_7){
+throw new Error("Unsupported API: "+this._wireClass+"._setValue");
+},_getRow:function(_8){
+var _9=(dojo.isArray(this.columns)?[]:{});
+for(var c in this.columns){
+_9[c]=this.columns[c].getValue(_8);
+}
+return _9;
+}});
+}
Index: trunk/web/dojo/dojox/wire/CompositeWire.js
===================================================================
--- trunk/web/dojo/dojox/wire/CompositeWire.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/CompositeWire.js	(revision 9)
@@ -0,0 +1,44 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.CompositeWire"]){
+dojo._hasResource["dojox.wire.CompositeWire"]=true;
+dojo.provide("dojox.wire.CompositeWire");
+dojo.require("dojox.wire._base");
+dojo.require("dojox.wire.Wire");
+dojo.declare("dojox.wire.CompositeWire",dojox.wire.Wire,{_wireClass:"dojox.wire.CompositeWire",constructor:function(_1){
+this._initializeChildren(this.children);
+},_getValue:function(_2){
+if(!_2||!this.children){
+return _2;
+}
+var _3=(dojo.isArray(this.children)?[]:{});
+for(var c in this.children){
+_3[c]=this.children[c].getValue(_2);
+}
+return _3;
+},_setValue:function(_4,_5){
+if(!_4||!this.children){
+return _4;
+}
+for(var c in this.children){
+this.children[c].setValue(_5[c],_4);
+}
+return _4;
+},_initializeChildren:function(_6){
+if(!_6){
+return;
+}
+for(var c in _6){
+var _7=_6[c];
+_7.parent=this;
+if(!dojox.wire.isWire(_7)){
+_6[c]=dojox.wire.create(_7);
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/wire/_base.js
===================================================================
--- trunk/web/dojo/dojox/wire/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/_base.js	(revision 9)
@@ -0,0 +1,102 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire._base"]){
+dojo._hasResource["dojox.wire._base"]=true;
+dojo.provide("dojox.wire._base");
+dojox.wire._defaultWireClass="dojox.wire.Wire";
+dojox.wire._wireClasses={"attribute":"dojox.wire.DataWire","path":"dojox.wire.XmlWire","children":"dojox.wire.CompositeWire","columns":"dojox.wire.TableAdapter","nodes":"dojox.wire.TreeAdapter","segments":"dojox.wire.TextAdapter"};
+dojox.wire.register=function(_1,_2){
+if(!_1||!_2){
+return;
+}
+if(dojox.wire._wireClasses[_2]){
+return;
+}
+dojox.wire._wireClasses[_2]=_1;
+};
+dojox.wire._getClass=function(_3){
+dojo["require"](_3);
+return dojo.getObject(_3);
+};
+dojox.wire.create=function(_4){
+if(!_4){
+_4={};
+}
+var _5=_4.wireClass;
+if(_5){
+if(dojo.isString(_5)){
+_5=dojox.wire._getClass(_5);
+}
+}else{
+for(var _6 in _4){
+if(!_4[_6]){
+continue;
+}
+_5=dojox.wire._wireClasses[_6];
+if(_5){
+if(dojo.isString(_5)){
+_5=dojox.wire._getClass(_5);
+dojox.wire._wireClasses[_6]=_5;
+}
+break;
+}
+}
+}
+if(!_5){
+if(dojo.isString(dojox.wire._defaultWireClass)){
+dojox.wire._defaultWireClass=dojox.wire._getClass(dojox.wire._defaultWireClass);
+}
+_5=dojox.wire._defaultWireClass;
+}
+return new _5(_4);
+};
+dojox.wire.isWire=function(_7){
+return (_7&&_7._wireClass);
+};
+dojox.wire.transfer=function(_8,_9,_a,_b){
+if(!_8||!_9){
+return;
+}
+if(!dojox.wire.isWire(_8)){
+_8=dojox.wire.create(_8);
+}
+if(!dojox.wire.isWire(_9)){
+_9=dojox.wire.create(_9);
+}
+var _c=_8.getValue(_a);
+_9.setValue(_c,(_b||_a));
+};
+dojox.wire.connect=function(_d,_e,_f){
+if(!_d||!_e||!_f){
+return;
+}
+var _10={topic:_d.topic};
+if(_d.topic){
+_10.handle=dojo.subscribe(_d.topic,function(){
+dojox.wire.transfer(_e,_f,arguments);
+});
+}else{
+if(_d.event){
+_10.handle=dojo.connect(_d.scope,_d.event,function(){
+dojox.wire.transfer(_e,_f,arguments);
+});
+}
+}
+return _10;
+};
+dojox.wire.disconnect=function(_11){
+if(!_11||!_11.handle){
+return;
+}
+if(_11.topic){
+dojo.unsubscribe(_11.handle);
+}else{
+dojo.disconnect(_11.handle);
+}
+};
+}
Index: trunk/web/dojo/dojox/wire/ml/DataStore.js
===================================================================
--- trunk/web/dojo/dojox/wire/ml/DataStore.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/ml/DataStore.js	(revision 9)
@@ -0,0 +1,45 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.ml.DataStore"]){
+dojo._hasResource["dojox.wire.ml.DataStore"]=true;
+dojo.provide("dojox.wire.ml.DataStore");
+dojo.require("dijit._Widget");
+dojo.require("dojox.wire._base");
+dojo.declare("dojox.wire.ml.DataStore",dijit._Widget,{storeClass:"",postCreate:function(){
+this.store=this._createStore();
+},_createStore:function(){
+if(!this.storeClass){
+return null;
+}
+var _1=dojox.wire._getClass(this.storeClass);
+if(!_1){
+return null;
+}
+var _2={};
+var _3=this.domNode.attributes;
+for(var i=0;i<_3.length;i++){
+var a=_3.item(i);
+if(a.specified&&!this[a.nodeName]){
+_2[a.nodeName]=a.nodeValue;
+}
+}
+return new _1(_2);
+},getFeatures:function(){
+return this.store.getFeatures();
+},fetch:function(_4){
+return this.store.fetch(_4);
+},save:function(_5){
+this.store.save(_5);
+},newItem:function(_6){
+return this.store.newItem(_6);
+},deleteItem:function(_7){
+return this.store.deleteItem(_7);
+},revert:function(){
+return this.store.revert();
+}});
+}
Index: trunk/web/dojo/dojox/wire/ml/Data.js
===================================================================
--- trunk/web/dojo/dojox/wire/ml/Data.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/ml/Data.js	(revision 9)
@@ -0,0 +1,81 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.ml.Data"]){
+dojo._hasResource["dojox.wire.ml.Data"]=true;
+dojo.provide("dojox.wire.ml.Data");
+dojo.provide("dojox.wire.ml.DataProperty");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Container");
+dojo.require("dojox.wire.ml.util");
+dojo.declare("dojox.wire.ml.Data",[dijit._Widget,dijit._Container],{startup:function(){
+this._initializeProperties();
+},_initializeProperties:function(_1){
+if(!this._properties||_1){
+this._properties={};
+}
+var _2=this.getChildren();
+for(var i in _2){
+var _3=_2[i];
+if((_3 instanceof dojox.wire.ml.DataProperty)&&_3.name){
+this.setPropertyValue(_3.name,_3.getValue());
+}
+}
+},getPropertyValue:function(_4){
+return this._properties[_4];
+},setPropertyValue:function(_5,_6){
+this._properties[_5]=_6;
+}});
+dojo.declare("dojox.wire.ml.DataProperty",[dijit._Widget,dijit._Container],{name:"",type:"",value:"",_getValueAttr:function(){
+return this.getValue();
+},getValue:function(){
+var _7=this.value;
+if(this.type){
+if(this.type=="number"){
+_7=parseInt(_7);
+}else{
+if(this.type=="boolean"){
+_7=(_7=="true");
+}else{
+if(this.type=="array"){
+_7=[];
+var _8=this.getChildren();
+for(var i in _8){
+var _9=_8[i];
+if(_9 instanceof dojox.wire.ml.DataProperty){
+_7.push(_9.getValue());
+}
+}
+}else{
+if(this.type=="object"){
+_7={};
+var _8=this.getChildren();
+for(var i in _8){
+var _9=_8[i];
+if((_9 instanceof dojox.wire.ml.DataProperty)&&_9.name){
+_7[_9.name]=_9.getValue();
+}
+}
+}else{
+if(this.type=="element"){
+_7=new dojox.wire.ml.XmlElement(_7);
+var _8=this.getChildren();
+for(var i in _8){
+var _9=_8[i];
+if((_9 instanceof dojox.wire.ml.DataProperty)&&_9.name){
+_7.setPropertyValue(_9.name,_9.getValue());
+}
+}
+}
+}
+}
+}
+}
+}
+return _7;
+}});
+}
Index: trunk/web/dojo/dojox/wire/ml/Invocation.js
===================================================================
--- trunk/web/dojo/dojox/wire/ml/Invocation.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/ml/Invocation.js	(revision 9)
@@ -0,0 +1,109 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.ml.Invocation"]){
+dojo._hasResource["dojox.wire.ml.Invocation"]=true;
+dojo.provide("dojox.wire.ml.Invocation");
+dojo.require("dojox.wire.ml.Action");
+dojo.declare("dojox.wire.ml.Invocation",dojox.wire.ml.Action,{object:"",method:"",topic:"",parameters:"",result:"",error:"",_run:function(){
+if(this.topic){
+var _1=this._getParameters(arguments);
+try{
+dojo.publish(this.topic,_1);
+this.onComplete();
+}
+catch(e){
+this.onError(e);
+}
+}else{
+if(this.method){
+var _2=(this.object?dojox.wire.ml._getValue(this.object):dojo.global);
+if(!_2){
+return;
+}
+var _1=this._getParameters(arguments);
+var _3=_2[this.method];
+if(!_3){
+_3=_2.callMethod;
+if(!_3){
+return;
+}
+_1=[this.method,_1];
+}
+try{
+var _4=false;
+if(_2.getFeatures){
+var _5=_2.getFeatures();
+if((this.method=="fetch"&&_5["dojo.data.api.Read"])||(this.method=="save"&&_5["dojo.data.api.Write"])){
+var _6=_1[0];
+if(!_6.onComplete){
+_6.onComplete=function(){
+};
+}
+this.connect(_6,"onComplete","onComplete");
+if(!_6.onError){
+_6.onError=function(){
+};
+}
+this.connect(_6,"onError","onError");
+_4=true;
+}
+}
+var r=_3.apply(_2,_1);
+if(!_4){
+if(r&&(r instanceof dojo.Deferred)){
+var _7=this;
+r.addCallbacks(function(_8){
+_7.onComplete(_8);
+},function(_9){
+_7.onError(_9);
+});
+}else{
+this.onComplete(r);
+}
+}
+}
+catch(e){
+this.onError(e);
+}
+}
+}
+},onComplete:function(_a){
+if(this.result){
+dojox.wire.ml._setValue(this.result,_a);
+}
+if(this.error){
+dojox.wire.ml._setValue(this.error,"");
+}
+},onError:function(_b){
+if(this.error){
+if(_b&&_b.message){
+_b=_b.message;
+}
+dojox.wire.ml._setValue(this.error,_b);
+}
+},_getParameters:function(_c){
+if(!this.parameters){
+return _c;
+}
+var _d=[];
+var _e=this.parameters.split(",");
+if(_e.length==1){
+var _f=dojox.wire.ml._getValue(dojo.trim(_e[0]),_c);
+if(dojo.isArray(_f)){
+_d=_f;
+}else{
+_d.push(_f);
+}
+}else{
+for(var i in _e){
+_d.push(dojox.wire.ml._getValue(dojo.trim(_e[i]),_c));
+}
+}
+return _d;
+}});
+}
Index: trunk/web/dojo/dojox/wire/ml/Action.js
===================================================================
--- trunk/web/dojo/dojox/wire/ml/Action.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/ml/Action.js	(revision 9)
@@ -0,0 +1,113 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.ml.Action"]){
+dojo._hasResource["dojox.wire.ml.Action"]=true;
+dojo.provide("dojox.wire.ml.Action");
+dojo.provide("dojox.wire.ml.ActionFilter");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Container");
+dojo.require("dojox.wire.Wire");
+dojo.require("dojox.wire.ml.util");
+dojo.declare("dojox.wire.ml.Action",[dijit._Widget,dijit._Container],{trigger:"",triggerEvent:"",triggerTopic:"",postCreate:function(){
+this._connect();
+},_connect:function(){
+if(this.triggerEvent){
+if(this.trigger){
+var _1=dojox.wire.ml._getValue(this.trigger);
+if(_1){
+if(!_1[this.triggerEvent]){
+_1[this.triggerEvent]=function(){
+};
+}
+this._triggerHandle=dojo.connect(_1,this.triggerEvent,this,"run");
+}
+}else{
+var _2=this.triggerEvent.toLowerCase();
+if(_2=="onload"){
+var _3=this;
+dojo.addOnLoad(function(){
+_3._run.apply(_3,arguments);
+});
+}
+}
+}else{
+if(this.triggerTopic){
+this._triggerHandle=dojo.subscribe(this.triggerTopic,this,"run");
+}
+}
+},_disconnect:function(){
+if(this._triggerHandle){
+if(this.triggerTopic){
+dojo.unsubscribe(this.triggerTopic,this._triggerHandle);
+}else{
+dojo.disconnect(this._triggerHandle);
+}
+}
+},run:function(){
+var _4=this.getChildren();
+for(var i in _4){
+var _5=_4[i];
+if(_5 instanceof dojox.wire.ml.ActionFilter){
+if(!_5.filter.apply(_5,arguments)){
+return;
+}
+}
+}
+this._run.apply(this,arguments);
+},_run:function(){
+var _6=this.getChildren();
+for(var i in _6){
+var _7=_6[i];
+if(_7 instanceof dojox.wire.ml.Action){
+_7.run.apply(_7,arguments);
+}
+}
+},uninitialize:function(){
+this._disconnect();
+return true;
+}});
+dojo.declare("dojox.wire.ml.ActionFilter",dijit._Widget,{required:"",requiredValue:"",type:"",message:"",error:"",filter:function(){
+if(this.required===""){
+return true;
+}else{
+var _8=dojox.wire.ml._getValue(this.required,arguments);
+if(this.requiredValue===""){
+if(_8){
+return true;
+}
+}else{
+var _9=this.requiredValue;
+if(this.type!==""){
+var _a=this.type.toLowerCase();
+if(_a==="boolean"){
+if(_9.toLowerCase()==="false"){
+_9=false;
+}else{
+_9=true;
+}
+}else{
+if(_a==="number"){
+_9=parseInt(_9,10);
+}
+}
+}
+if(_8===_9){
+return true;
+}
+}
+}
+if(this.message){
+if(this.error){
+dojox.wire.ml._setValue(this.error,this.message);
+}else{
+alert(this.message);
+}
+}
+return false;
+}});
+}
Index: trunk/web/dojo/dojox/wire/ml/util.js
===================================================================
--- trunk/web/dojo/dojox/wire/ml/util.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/ml/util.js	(revision 9)
@@ -0,0 +1,213 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.ml.util"]){
+dojo._hasResource["dojox.wire.ml.util"]=true;
+dojo.provide("dojox.wire.ml.util");
+dojo.require("dojox.xml.parser");
+dojo.require("dojox.wire.Wire");
+dojox.wire.ml._getValue=function(_1,_2){
+if(!_1){
+return undefined;
+}
+var _3=undefined;
+if(_2&&_1.length>=9&&_1.substring(0,9)=="arguments"){
+_3=_1.substring(9);
+return new dojox.wire.Wire({property:_3}).getValue(_2);
+}
+var i=_1.indexOf(".");
+if(i>=0){
+_3=_1.substring(i+1);
+_1=_1.substring(0,i);
+}
+var _4=(dijit.byId(_1)||dojo.byId(_1)||dojo.getObject(_1));
+if(!_4){
+return undefined;
+}
+if(!_3){
+return _4;
+}else{
+return new dojox.wire.Wire({object:_4,property:_3}).getValue();
+}
+};
+dojox.wire.ml._setValue=function(_5,_6){
+if(!_5){
+return;
+}
+var i=_5.indexOf(".");
+if(i<0){
+return;
+}
+var _7=this._getValue(_5.substring(0,i));
+if(!_7){
+return;
+}
+var _8=_5.substring(i+1);
+var _9=new dojox.wire.Wire({object:_7,property:_8}).setValue(_6);
+};
+dojo.declare("dojox.wire.ml.XmlElement",null,{constructor:function(_a){
+if(dojo.isString(_a)){
+_a=this._getDocument().createElement(_a);
+}
+this.element=_a;
+},getPropertyValue:function(_b){
+var _c=undefined;
+if(!this.element){
+return _c;
+}
+if(!_b){
+return _c;
+}
+if(_b.charAt(0)=="@"){
+var _d=_b.substring(1);
+_c=this.element.getAttribute(_d);
+}else{
+if(_b=="text()"){
+var _e=this.element.firstChild;
+if(_e){
+_c=_e.nodeValue;
+}
+}else{
+var _f=[];
+for(var i=0;i<this.element.childNodes.length;i++){
+var _10=this.element.childNodes[i];
+if(_10.nodeType===1&&_10.nodeName==_b){
+_f.push(new dojox.wire.ml.XmlElement(_10));
+}
+}
+if(_f.length>0){
+if(_f.length===1){
+_c=_f[0];
+}else{
+_c=_f;
+}
+}
+}
+}
+return _c;
+},setPropertyValue:function(_11,_12){
+var i;
+var _13;
+if(!this.element){
+return;
+}
+if(!_11){
+return;
+}
+if(_11.charAt(0)=="@"){
+var _14=_11.substring(1);
+if(_12){
+this.element.setAttribute(_14,_12);
+}else{
+this.element.removeAttribute(_14);
+}
+}else{
+if(_11=="text()"){
+while(this.element.firstChild){
+this.element.removeChild(this.element.firstChild);
+}
+if(_12){
+_13=this._getDocument().createTextNode(_12);
+this.element.appendChild(_13);
+}
+}else{
+var _15=null;
+var _16;
+for(i=this.element.childNodes.length-1;i>=0;i--){
+_16=this.element.childNodes[i];
+if(_16.nodeType===1&&_16.nodeName==_11){
+if(!_15){
+_15=_16.nextSibling;
+}
+this.element.removeChild(_16);
+}
+}
+if(_12){
+if(dojo.isArray(_12)){
+for(i in _12){
+var e=_12[i];
+if(e.element){
+this.element.insertBefore(e.element,_15);
+}
+}
+}else{
+if(_12 instanceof dojox.wire.ml.XmlElement){
+if(_12.element){
+this.element.insertBefore(_12.element,_15);
+}
+}else{
+_16=this._getDocument().createElement(_11);
+_13=this._getDocument().createTextNode(_12);
+_16.appendChild(_13);
+this.element.insertBefore(_16,_15);
+}
+}
+}
+}
+}
+},toString:function(){
+var s="";
+if(this.element){
+var _17=this.element.firstChild;
+if(_17){
+s=_17.nodeValue;
+}
+}
+return s;
+},toObject:function(){
+if(!this.element){
+return null;
+}
+var _18="";
+var obj={};
+var _19=0;
+var i;
+for(i=0;i<this.element.childNodes.length;i++){
+var _1a=this.element.childNodes[i];
+if(_1a.nodeType===1){
+_19++;
+var o=new dojox.wire.ml.XmlElement(_1a).toObject();
+var _1b=_1a.nodeName;
+var p=obj[_1b];
+if(!p){
+obj[_1b]=o;
+}else{
+if(dojo.isArray(p)){
+p.push(o);
+}else{
+obj[_1b]=[p,o];
+}
+}
+}else{
+if(_1a.nodeType===3||_1a.nodeType===4){
+_18+=_1a.nodeValue;
+}
+}
+}
+var _1c=0;
+if(this.element.nodeType===1){
+_1c=this.element.attributes.length;
+for(i=0;i<_1c;i++){
+var _1d=this.element.attributes[i];
+obj["@"+_1d.nodeName]=_1d.nodeValue;
+}
+}
+if(_19===0){
+if(_1c===0){
+return _18;
+}
+obj["text()"]=_18;
+}
+return obj;
+},_getDocument:function(){
+if(this.element){
+return (this.element.nodeType==9?this.element:this.element.ownerDocument);
+}else{
+return dojox.xml.parser.parse();
+}
+}});
+}
Index: trunk/web/dojo/dojox/wire/ml/Service.js
===================================================================
--- trunk/web/dojo/dojox/wire/ml/Service.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/ml/Service.js	(revision 9)
@@ -0,0 +1,170 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.ml.Service"]){
+dojo._hasResource["dojox.wire.ml.Service"]=true;
+dojo.provide("dojox.wire.ml.Service");
+dojo.provide("dojox.wire.ml.RestHandler");
+dojo.provide("dojox.wire.ml.XmlHandler");
+dojo.provide("dojox.wire.ml.JsonHandler");
+dojo.require("dijit._Widget");
+dojo.require("dojox.xml.parser");
+dojo.require("dojox.wire._base");
+dojo.require("dojox.wire.ml.util");
+dojo.declare("dojox.wire.ml.Service",dijit._Widget,{url:"",serviceUrl:"",serviceType:"",handlerClass:"",preventCache:true,postCreate:function(){
+this.handler=this._createHandler();
+},_handlerClasses:{"TEXT":"dojox.wire.ml.RestHandler","XML":"dojox.wire.ml.XmlHandler","JSON":"dojox.wire.ml.JsonHandler","JSON-RPC":"dojo.rpc.JsonService"},_createHandler:function(){
+if(this.url){
+var _1=this;
+var d=dojo.xhrGet({url:this.url,handleAs:"json",sync:true});
+d.addCallback(function(_2){
+_1.smd=_2;
+});
+if(this.smd&&!this.serviceUrl){
+this.serviceUrl=(this.smd.serviceUrl||this.smd.serviceURL);
+}
+}
+var _3=undefined;
+if(this.handlerClass){
+_3=dojox.wire._getClass(this.handlerClass);
+}else{
+if(this.serviceType){
+_3=this._handlerClasses[this.serviceType];
+if(_3&&dojo.isString(_3)){
+_3=dojox.wire._getClass(_3);
+this._handlerClasses[this.serviceType]=_3;
+}
+}else{
+if(this.smd&&this.smd.serviceType){
+_3=this._handlerClasses[this.smd.serviceType];
+if(_3&&dojo.isString(_3)){
+_3=dojox.wire._getClass(_3);
+this._handlerClasses[this.smd.serviceType]=_3;
+}
+}
+}
+}
+if(!_3){
+return null;
+}
+return new _3();
+},callMethod:function(_4,_5){
+var _6=new dojo.Deferred();
+this.handler.bind(_4,_5,_6,this.serviceUrl);
+return _6;
+}});
+dojo.declare("dojox.wire.ml.RestHandler",null,{contentType:"text/plain",handleAs:"text",bind:function(_7,_8,_9,_a){
+_7=_7.toUpperCase();
+var _b=this;
+var _c={url:this._getUrl(_7,_8,_a),contentType:this.contentType,handleAs:this.handleAs,headers:this.headers,preventCache:this.preventCache};
+var d=null;
+if(_7=="POST"){
+_c.postData=this._getContent(_7,_8);
+d=dojo.rawXhrPost(_c);
+}else{
+if(_7=="PUT"){
+_c.putData=this._getContent(_7,_8);
+d=dojo.rawXhrPut(_c);
+}else{
+if(_7=="DELETE"){
+d=dojo.xhrDelete(_c);
+}else{
+d=dojo.xhrGet(_c);
+}
+}
+}
+d.addCallbacks(function(_d){
+_9.callback(_b._getResult(_d));
+},function(_e){
+_9.errback(_e);
+});
+},_getUrl:function(_f,_10,url){
+var _11;
+if(_f=="GET"||_f=="DELETE"){
+if(_10.length>0){
+_11=_10[0];
+}
+}else{
+if(_10.length>1){
+_11=_10[1];
+}
+}
+if(_11){
+var _12="";
+for(var _13 in _11){
+var _14=_11[_13];
+if(_14){
+_14=encodeURIComponent(_14);
+var _15="{"+_13+"}";
+var _16=url.indexOf(_15);
+if(_16>=0){
+url=url.substring(0,_16)+_14+url.substring(_16+_15.length);
+}else{
+if(_12){
+_12+="&";
+}
+_12+=(_13+"="+_14);
+}
+}
+}
+if(_12){
+url+="?"+_12;
+}
+}
+return url;
+},_getContent:function(_17,_18){
+if(_17=="POST"||_17=="PUT"){
+return (_18?_18[0]:null);
+}else{
+return null;
+}
+},_getResult:function(_19){
+return _19;
+}});
+dojo.declare("dojox.wire.ml.XmlHandler",dojox.wire.ml.RestHandler,{contentType:"text/xml",handleAs:"xml",_getContent:function(_1a,_1b){
+var _1c=null;
+if(_1a=="POST"||_1a=="PUT"){
+var p=_1b[0];
+if(p){
+if(dojo.isString(p)){
+_1c=p;
+}else{
+var _1d=p;
+if(_1d instanceof dojox.wire.ml.XmlElement){
+_1d=_1d.element;
+}else{
+if(_1d.nodeType===9){
+_1d=_1d.documentElement;
+}
+}
+var _1e="<?xml version=\"1.0\"?>";
+_1c=_1e+dojox.xml.parser.innerXML(_1d);
+}
+}
+}
+return _1c;
+},_getResult:function(_1f){
+if(_1f){
+_1f=new dojox.wire.ml.XmlElement(_1f);
+}
+return _1f;
+}});
+dojo.declare("dojox.wire.ml.JsonHandler",dojox.wire.ml.RestHandler,{contentType:"text/json",handleAs:"json",headers:{"Accept":"*/json"},_getContent:function(_20,_21){
+var _22=null;
+if(_20=="POST"||_20=="PUT"){
+var p=(_21?_21[0]:undefined);
+if(p){
+if(dojo.isString(p)){
+_22=p;
+}else{
+_22=dojo.toJson(p);
+}
+}
+}
+return _22;
+}});
+}
Index: trunk/web/dojo/dojox/wire/ml/Transfer.js
===================================================================
--- trunk/web/dojo/dojox/wire/ml/Transfer.js	(revision 0)
+++ trunk/web/dojo/dojox/wire/ml/Transfer.js	(revision 9)
@@ -0,0 +1,122 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire.ml.Transfer"]){
+dojo._hasResource["dojox.wire.ml.Transfer"]=true;
+dojo.provide("dojox.wire.ml.Transfer");
+dojo.provide("dojox.wire.ml.ChildWire");
+dojo.provide("dojox.wire.ml.ColumnWire");
+dojo.provide("dojox.wire.ml.NodeWire");
+dojo.provide("dojox.wire.ml.SegmentWire");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Container");
+dojo.require("dojox.wire._base");
+dojo.require("dojox.wire.ml.Action");
+dojo.declare("dojox.wire.ml.Transfer",dojox.wire.ml.Action,{source:"",sourceStore:"",sourceAttribute:"",sourcePath:"",type:"",converter:"",delimiter:"",target:"",targetStore:"",targetAttribute:"",targetPath:"",_run:function(){
+var _1=this._getWire("source");
+var _2=this._getWire("target");
+dojox.wire.transfer(_1,_2,arguments);
+},_getWire:function(_3){
+var _4=undefined;
+if(_3=="source"){
+_4={object:this.source,dataStore:this.sourceStore,attribute:this.sourceAttribute,path:this.sourcePath,type:this.type,converter:this.converter};
+}else{
+_4={object:this.target,dataStore:this.targetStore,attribute:this.targetAttribute,path:this.targetPath};
+}
+if(_4.object){
+if(_4.object.length>=9&&_4.object.substring(0,9)=="arguments"){
+_4.property=_4.object.substring(9);
+_4.object=null;
+}else{
+var i=_4.object.indexOf(".");
+if(i<0){
+_4.object=dojox.wire.ml._getValue(_4.object);
+}else{
+_4.property=_4.object.substring(i+1);
+_4.object=dojox.wire.ml._getValue(_4.object.substring(0,i));
+}
+}
+}
+if(_4.dataStore){
+_4.dataStore=dojox.wire.ml._getValue(_4.dataStore);
+}
+var _5=undefined;
+var _6=this.getChildren();
+for(var i in _6){
+var _7=_6[i];
+if(_7 instanceof dojox.wire.ml.ChildWire&&_7.which==_3){
+if(!_5){
+_5={};
+}
+_7._addWire(this,_5);
+}
+}
+if(_5){
+_5.object=dojox.wire.create(_4);
+_5.dataStore=_4.dataStore;
+_4=_5;
+}
+return _4;
+}});
+dojo.declare("dojox.wire.ml.ChildWire",dijit._Widget,{which:"source",object:"",property:"",type:"",converter:"",attribute:"",path:"",name:"",_addWire:function(_8,_9){
+if(this.name){
+if(!_9.children){
+_9.children={};
+}
+_9.children[this.name]=this._getWire(_8);
+}else{
+if(!_9.children){
+_9.children=[];
+}
+_9.children.push(this._getWire(_8));
+}
+},_getWire:function(_a){
+return {object:(this.object?dojox.wire.ml._getValue(this.object):undefined),property:this.property,type:this.type,converter:this.converter,attribute:this.attribute,path:this.path};
+}});
+dojo.declare("dojox.wire.ml.ColumnWire",dojox.wire.ml.ChildWire,{column:"",_addWire:function(_b,_c){
+if(this.column){
+if(!_c.columns){
+_c.columns={};
+}
+_c.columns[this.column]=this._getWire(_b);
+}else{
+if(!_c.columns){
+_c.columns=[];
+}
+_c.columns.push(this._getWire(_b));
+}
+}});
+dojo.declare("dojox.wire.ml.NodeWire",[dojox.wire.ml.ChildWire,dijit._Container],{titleProperty:"",titleAttribute:"",titlePath:"",_addWire:function(_d,_e){
+if(!_e.nodes){
+_e.nodes=[];
+}
+_e.nodes.push(this._getWires(_d));
+},_getWires:function(_f){
+var _10={node:this._getWire(_f),title:{type:"string",property:this.titleProperty,attribute:this.titleAttribute,path:this.titlePath}};
+var _11=[];
+var _12=this.getChildren();
+for(var i in _12){
+var _13=_12[i];
+if(_13 instanceof dojox.wire.ml.NodeWire){
+_11.push(_13._getWires(_f));
+}
+}
+if(_11.length>0){
+_10.children=_11;
+}
+return _10;
+}});
+dojo.declare("dojox.wire.ml.SegmentWire",dojox.wire.ml.ChildWire,{_addWire:function(_14,_15){
+if(!_15.segments){
+_15.segments=[];
+}
+_15.segments.push(this._getWire(_14));
+if(_14.delimiter&&!_15.delimiter){
+_15.delimiter=_14.delimiter;
+}
+}});
+}
Index: trunk/web/dojo/dojox/data/OpenSearchStore.js
===================================================================
--- trunk/web/dojo/dojox/data/OpenSearchStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/OpenSearchStore.js	(revision 9)
@@ -0,0 +1,219 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.OpenSearchStore"]){
+dojo._hasResource["dojox.data.OpenSearchStore"]=true;
+dojo.provide("dojox.data.OpenSearchStore");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojox.xml.DomParser");
+dojo.require("dojox.xml.parser");
+dojo.experimental("dojox.data.OpenSearchStore");
+dojo.declare("dojox.data.OpenSearchStore",null,{constructor:function(_1){
+if(_1){
+this.label=_1.label;
+this.url=_1.url;
+this.itemPath=_1.itemPath;
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+}
+var _2=dojo.xhrGet({url:this.url,handleAs:"xml",sync:true,preventCache:this.urlPreventCache});
+_2.addCallback(this,"_processOsdd");
+_2.addErrback(function(){
+throw new Error("Unable to load OpenSearch Description document from ".args.url);
+});
+},url:"",itemPath:"",_storeRef:"_S",urlElement:null,iframeElement:null,urlPreventCache:true,ATOM_CONTENT_TYPE:3,ATOM_CONTENT_TYPE_STRING:"atom",RSS_CONTENT_TYPE:2,RSS_CONTENT_TYPE_STRING:"rss",XML_CONTENT_TYPE:1,XML_CONTENT_TYPE_STRING:"xml",_assertIsItem:function(_3){
+if(!this.isItem(_3)){
+throw new Error("dojox.data.OpenSearchStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_4){
+if(typeof _4!=="string"){
+throw new Error("dojox.data.OpenSearchStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_5,_6,_7){
+var _8=this.getValues(_5,_6);
+if(_8){
+return _8[0];
+}
+return _7;
+},getAttributes:function(_9){
+return ["content"];
+},hasAttribute:function(_a,_b){
+if(this.getValue(_a,_b)){
+return true;
+}
+return false;
+},isItemLoaded:function(_c){
+return this.isItem(_c);
+},loadItem:function(_d){
+},getLabel:function(_e){
+return undefined;
+},getLabelAttributes:function(_f){
+return null;
+},containsValue:function(_10,_11,_12){
+var _13=this.getValues(_10,_11);
+for(var i=0;i<_13.length;i++){
+if(_13[i]===_12){
+return true;
+}
+}
+return false;
+},getValues:function(_14,_15){
+this._assertIsItem(_14);
+this._assertIsAttribute(_15);
+var _16=this.processItem(_14,_15);
+if(_16){
+return [_16];
+}
+return undefined;
+},isItem:function(_17){
+if(_17&&_17[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_18){
+},process:function(_19){
+return this["_processOSD"+this.contentType](_19);
+},processItem:function(_1a,_1b){
+return this["_processItem"+this.contentType](_1a.node,_1b);
+},_createSearchUrl:function(_1c){
+var _1d=this.urlElement.attributes.getNamedItem("template").nodeValue;
+var _1e=this.urlElement.attributes;
+var _1f=_1d.indexOf("{searchTerms}");
+_1d=_1d.substring(0,_1f)+_1c.query.searchTerms+_1d.substring(_1f+13);
+dojo.forEach([{"name":"count","test":_1c.count,"def":"10"},{"name":"startIndex","test":_1c.start,"def":this.urlElement.attributes.getNamedItem("indexOffset")?this.urlElement.attributes.getNamedItem("indexOffset").nodeValue:0},{"name":"startPage","test":_1c.startPage,"def":this.urlElement.attributes.getNamedItem("pageOffset")?this.urlElement.attributes.getNamedItem("pageOffset").nodeValue:0},{"name":"language","test":_1c.language,"def":"*"},{"name":"inputEncoding","test":_1c.inputEncoding,"def":"UTF-8"},{"name":"outputEncoding","test":_1c.outputEncoding,"def":"UTF-8"}],function(_20){
+_1d=_1d.replace("{"+_20.name+"}",_20.test||_20.def);
+_1d=_1d.replace("{"+_20.name+"?}",_20.test||_20.def);
+});
+return _1d;
+},_fetchItems:function(_21,_22,_23){
+if(!_21.query){
+_21.query={};
+}
+var _24=this;
+var url=this._createSearchUrl(_21);
+var _25={url:url,preventCache:this.urlPreventCache};
+var xhr=dojo.xhrGet(_25);
+xhr.addErrback(function(_26){
+_23(_26,_21);
+});
+xhr.addCallback(function(_27){
+var _28=[];
+if(_27){
+_28=_24.process(_27);
+for(var i=0;i<_28.length;i++){
+_28[i]={node:_28[i]};
+_28[i][_24._storeRef]=_24;
+}
+}
+_22(_28,_21);
+});
+},_processOSDxml:function(_29){
+var div=dojo.doc.createElement("div");
+div.innerHTML=_29;
+return dojo.query(this.itemPath,div);
+},_processItemxml:function(_2a,_2b){
+if(_2b==="content"){
+return _2a.innerHTML;
+}
+return undefined;
+},_processOSDatom:function(_2c){
+return this._processOSDfeed(_2c,"entry");
+},_processItematom:function(_2d,_2e){
+return this._processItemfeed(_2d,_2e,"content");
+},_processOSDrss:function(_2f){
+return this._processOSDfeed(_2f,"item");
+},_processItemrss:function(_30,_31){
+return this._processItemfeed(_30,_31,"description");
+},_processOSDfeed:function(_32,_33){
+_32=dojox.xml.parser.parse(_32);
+var _34=[];
+var _35=_32.getElementsByTagName(_33);
+for(var i=0;i<_35.length;i++){
+_34.push(_35.item(i));
+}
+return _34;
+},_processItemfeed:function(_36,_37,_38){
+if(_37==="content"){
+var _39=_36.getElementsByTagName(_38).item(0);
+return this._getNodeXml(_39,true);
+}
+return undefined;
+},_getNodeXml:function(_3a,_3b){
+var i;
+switch(_3a.nodeType){
+case 1:
+var xml=[];
+if(!_3b){
+xml.push("<"+_3a.tagName);
+var _3c;
+for(i=0;i<_3a.attributes.length;i++){
+_3c=_3a.attributes.item(i);
+xml.push(" "+_3c.nodeName+"=\""+_3c.nodeValue+"\"");
+}
+xml.push(">");
+}
+for(i=0;i<_3a.childNodes.length;i++){
+xml.push(this._getNodeXml(_3a.childNodes.item(i)));
+}
+if(!_3b){
+xml.push("</"+_3a.tagName+">\n");
+}
+return xml.join("");
+case 3:
+case 4:
+return _3a.nodeValue;
+}
+return undefined;
+},_processOsdd:function(doc){
+var _3d=doc.getElementsByTagName("Url");
+var _3e=[];
+var _3f;
+var i;
+for(i=0;i<_3d.length;i++){
+_3f=_3d[i].attributes.getNamedItem("type").nodeValue;
+switch(_3f){
+case "application/rss+xml":
+_3e[i]=this.RSS_CONTENT_TYPE;
+break;
+case "application/atom+xml":
+_3e[i]=this.ATOM_CONTENT_TYPE;
+break;
+default:
+_3e[i]=this.XML_CONTENT_TYPE;
+break;
+}
+}
+var _40=0;
+var _41=_3e[0];
+for(i=1;i<_3d.length;i++){
+if(_3e[i]>_41){
+_40=i;
+_41=_3e[i];
+}
+}
+var _42=_3d[_40].nodeName.toLowerCase();
+if(_42=="url"){
+var _43=_3d[_40].attributes;
+this.urlElement=_3d[_40];
+switch(_3e[_40]){
+case this.ATOM_CONTENT_TYPE:
+this.contentType=this.ATOM_CONTENT_TYPE_STRING;
+break;
+case this.RSS_CONTENT_TYPE:
+this.contentType=this.RSS_CONTENT_TYPE_STRING;
+break;
+case this.XML_CONTENT_TYPE:
+this.contentType=this.XML_CONTENT_TYPE_STRING;
+break;
+}
+}
+}});
+dojo.extend(dojox.data.OpenSearchStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/s3/proxy.example-php
===================================================================
--- trunk/web/dojo/dojox/data/s3/proxy.example-php	(revision 0)
+++ trunk/web/dojo/dojox/data/s3/proxy.example-php	(revision 9)
@@ -0,0 +1,74 @@
+<?php
+// enter your Amazon S3 secret key and access key here:
+$accessKey = "access key";
+$secretAccessKey = "secret access key";
+
+
+
+$TARGET_WS = "http://s3.amazonaws.com";
+
+ob_start();
+
+require_once 'Crypt/HMAC.php';
+require_once 'HTTP/Request.php';
+
+$method = $_SERVER["REQUEST_METHOD"];
+if ($method == "PUT") {
+	$contentType = $_SERVER['CONTENT_TYPE'];
+}
+else {
+	$contentType ='';
+}
+$resource = str_replace($TARGET_WS, '', $_REQUEST['url']);
+$queryIndex = strpos($resource,'?'); // remove the query string
+if ($queryIndex) {
+	$resource = substr($resource,0,$queryIndex);
+}
+
+if (substr($resource,strlen($resource)-1,strlen($resource)) == '/') {
+	// remove the last slash
+	$resource = substr($resource,0,strlen($resource)-1);
+}
+$content = file_get_contents('php://input');
+
+$httpDate = gmdate("D, d M Y H:i:s T");
+$acl = "private";
+$stringToSign = "$method\n\n$contentType\n$httpDate\nx-amz-acl:$acl\n$resource";
+$hashObj =& new Crypt_HMAC($secretAccessKey, "sha1");
+$signature = hexTob64($hashObj->hash($stringToSign));
+
+$req =& new HTTP_Request($TARGET_WS . $resource);
+$req->setMethod($method);
+$req->addHeader("content-type", $contentType);
+$req->addHeader("Date", $httpDate);
+$req->addHeader("x-amz-acl", $acl);
+$req->addHeader("Authorization", "AWS " . $accessKey . ":" . $signature);
+if ($content != "") {
+	$req->setBody($content);
+}
+
+$req->sendRequest();
+
+$contentType = $req->getResponseHeader("content-type");
+header("content-type: $contentType");
+header('HTTP/1.1 ' . $req->getResponseCode() . ' Ok');
+
+ob_end_flush();
+
+$content = $req->getResponseBody();
+if ($content) {
+	print($content);
+}
+else {
+	print("\"success\"");
+}
+
+function hexTob64($str) {
+    $raw = '';
+    for ($i=0; $i < strlen($str); $i+=2) {
+        $raw .= chr(hexdec(substr($str, $i, 2)));
+    }
+    return base64_encode($raw);
+}
+
+?>
\ No newline at end of file
Index: trunk/web/dojo/dojox/data/s3/README
===================================================================
--- trunk/web/dojo/dojox/data/s3/README	(revision 0)
+++ trunk/web/dojo/dojox/data/s3/README	(revision 9)
@@ -0,0 +1,41 @@
+Using Amazon S3 with Dojo has the following prerequisites:
+    * You must be signed up to use Amazon S3. You can sign up for Amazon S3 at http://aws.amazon.com/s3.
+    * Use the provided proxy (/dojox/rpc/s3/proxy.php) with PHP 5.
+    * proxy.php requires the following modules:
+          o Crypt_HMAC
+          o HTTP_Request
+
+
+To use S3 from Dojo, you need a proxy. You can use the provided proxy example file by renaming 
+proxy.example-php to proxy.php and then you must enter your Amazon access key and secret access key
+into the proxy.php file on line 3 and 4:
+
+$accessKey = "access key";
+$secretAccessKey = "secret access key";
+
+You then use the Dojo RPC service with the "PROXIED-PATH" envelope:
+
+dojo.require("dojox.rpc.Service");
+dojo.require("dojox.rpc.ProxiedPath");
+var s3Buckets = new dojox.rpc.Service({
+	target:"http://s3.amazonaws.com/",
+	proxyUrl:"../s3/proxy.php", // the path to the proxy
+	transport:"REST",
+	envelope:"PROXIED-PATH",
+	contentType:"application/json",
+	services:{
+		myBucket:{
+			target:"myBucket",
+			parameters:[{type:"string"}]
+		}
+	}
+});
+
+
+To use the S3 as a Dojo data store you can use the S3JsonRestStore module. First setup an RPC service 
+as shown above and then pass the RPC service to the S3JsonRestStore:
+
+dojo.require("dojox.data.S3JsonRestStore");
+s3Store = new dojox.data.S3JsonRestStore({service:s3Buckets.myBucket}); // and create a store for it
+
+You can then use the s3Store as a normal Read/Write Dojo Data store.
Index: trunk/web/dojo/dojox/data/JsonQueryRestStore.js
===================================================================
--- trunk/web/dojo/dojox/data/JsonQueryRestStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/JsonQueryRestStore.js	(revision 9)
@@ -0,0 +1,17 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.JsonQueryRestStore"]){
+dojo._hasResource["dojox.data.JsonQueryRestStore"]=true;
+dojo.provide("dojox.data.JsonQueryRestStore");
+dojo.require("dojox.data.JsonRestStore");
+dojo.require("dojox.data.util.JsonQuery");
+dojo.requireIf(!!dojox.data.ClientFilter,"dojox.json.query");
+dojo.declare("dojox.data.JsonQueryRestStore",[dojox.data.JsonRestStore,dojox.data.util.JsonQuery],{matchesQuery:function(_1,_2){
+return _1.__id&&(_1.__id.indexOf("#")==-1)&&this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/data/PersevereStore.js
===================================================================
--- trunk/web/dojo/dojox/data/PersevereStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/PersevereStore.js	(revision 9)
@@ -0,0 +1,78 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.PersevereStore"]){
+dojo._hasResource["dojox.data.PersevereStore"]=true;
+dojo.provide("dojox.data.PersevereStore");
+dojo.require("dojox.data.JsonQueryRestStore");
+dojo.require("dojox.rpc.Client");
+dojox.json.ref.serializeFunctions=true;
+dojo.declare("dojox.data.PersevereStore",dojox.data.JsonQueryRestStore,{useFullIdInQueries:true,jsonQueryPagination:false});
+dojox.data.PersevereStore.getStores=function(_1,_2){
+_1=(_1&&(_1.match(/\/$/)?_1:(_1+"/")))||"/";
+if(_1.match(/^\w*:\/\//)){
+dojo.require("dojox.io.xhrScriptPlugin");
+dojox.io.xhrScriptPlugin(_1,"callback",dojox.io.xhrPlugins.fullHttpAdapter);
+}
+var _3=dojo.xhr;
+dojo.xhr=function(_4,_5){
+(_5.headers=_5.headers||{})["Server-Methods"]="false";
+return _3.apply(dojo,arguments);
+};
+var _6=dojox.rpc.Rest(_1,true);
+dojox.rpc._sync=_2;
+var _7=_6("Class/");
+var _8;
+var _9={};
+var _a=0;
+_7.addCallback(function(_b){
+dojox.json.ref.resolveJson(_b,{index:dojox.rpc.Rest._index,idPrefix:"/Class/",assignAbsoluteIds:true});
+function _c(_d){
+if(_d["extends"]&&_d["extends"].prototype){
+if(!_d.prototype||!_d.prototype.isPrototypeOf(_d["extends"].prototype)){
+_c(_d["extends"]);
+dojox.rpc.Rest._index[_d.prototype.__id]=_d.prototype=dojo.mixin(dojo.delegate(_d["extends"].prototype),_d.prototype);
+}
+}
+};
+function _e(_f,_10){
+if(_f&&_10){
+for(var j in _f){
+var _11=_f[j];
+if(_11.runAt!="client"&&!_10[j]){
+_10[j]=(function(_12){
+return function(){
+var _13=dojo.rawXhrPost({url:this.__id,postData:dojo.toJson({method:_12,id:_a++,params:dojo._toArray(arguments)}),handleAs:"json"});
+_13.addCallback(function(_14){
+return _14.error?new Error(_14.error):_14.result;
+});
+return _13;
+};
+})(j);
+}
+}
+}
+};
+for(var i in _b){
+if(typeof _b[i]=="object"){
+var _15=_b[i];
+_c(_15);
+_e(_15.methods,_15.prototype=_15.prototype||{});
+_e(_15.staticMethods,_15);
+_9[_b[i].id]=new dojox.data.PersevereStore({target:new dojo._Url(_1,_b[i].id)+"/",schema:_15});
+}
+}
+return (_8=_9);
+});
+dojo.xhr=_3;
+return _2?_8:_7;
+};
+dojox.data.PersevereStore.addProxy=function(){
+dojo.require("dojox.io.xhrPlugins");
+dojox.io.xhrPlugins.addProxy("/proxy/");
+};
+}
Index: trunk/web/dojo/dojox/data/StoreExplorer.js
===================================================================
--- trunk/web/dojo/dojox/data/StoreExplorer.js	(revision 0)
+++ trunk/web/dojo/dojox/data/StoreExplorer.js	(revision 9)
@@ -0,0 +1,150 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.StoreExplorer"]){
+dojo._hasResource["dojox.data.StoreExplorer"]=true;
+dojo.provide("dojox.data.StoreExplorer");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.data.ItemExplorer");
+dojo.require("dijit.layout.BorderContainer");
+dojo.require("dijit.layout.ContentPane");
+dojo.declare("dojox.data.StoreExplorer",dijit.layout.BorderContainer,{constructor:function(_1){
+dojo.mixin(this,_1);
+},store:null,stringQueries:false,postCreate:function(){
+var _2=this;
+this.inherited(arguments);
+var _3=new dijit.layout.ContentPane({region:"top"}).placeAt(this);
+function _4(_5,_6){
+var _7=new dijit.form.Button({label:_5});
+_3.containerNode.appendChild(_7.domNode);
+_7.onClick=_6;
+return _7;
+};
+var _8=_3.containerNode.appendChild(document.createElement("span"));
+_8.innerHTML="Enter query: &nbsp;";
+_8.id="queryText";
+var _9=_3.containerNode.appendChild(document.createElement("input"));
+_9.type="text";
+_9.id="queryTextBox";
+_4("Query",function(){
+var _a=_9.value;
+_2.setQuery(_2.stringQueries?_a:dojo.fromJson(_a));
+});
+_3.containerNode.appendChild(document.createElement("span")).innerHTML="&nbsp;&nbsp;&nbsp;";
+var _b=_4("Create New",dojo.hitch(this,"createNew"));
+var _c=_4("Delete",function(){
+var _d=_e.selection.getSelected();
+for(var i=0;i<_d.length;i++){
+_2.store.deleteItem(_d[i]);
+}
+});
+this.setItemName=function(_f){
+_b.attr("label","<img style='width:12px; height:12px' src='"+dojo.moduleUrl("dijit.themes.tundra.images","dndCopy.png")+"' /> Create New "+_f);
+_c.attr("label","Delete "+_f);
+};
+_4("Save",function(){
+_2.store.save({onError:function(_10){
+alert(_10);
+}});
+_2.tree.refreshItem();
+});
+_4("Revert",function(){
+_2.store.revert();
+});
+_4("Add Column",function(){
+var _11=prompt("Enter column name:","property");
+if(_11){
+_2.gridLayout.push({field:_11,name:_11,formatter:dojo.hitch(_2,"_formatCell"),editable:true});
+_2.grid.attr("structure",_2.gridLayout);
+}
+});
+var _12=new dijit.layout.ContentPane({region:"center"}).placeAt(this);
+var _e=this.grid=new dojox.grid.DataGrid({store:this.store});
+_12.attr("content",_e);
+_e.canEdit=function(_13,_14){
+var _15=this._copyAttr(_14,_13.field);
+return !(_15&&typeof _15=="object")||_15 instanceof Date;
+};
+var _16=new dijit.layout.ContentPane({region:"trailing",splitter:true,style:"width: 300px"}).placeAt(this);
+var _17=this.tree=new dojox.data.ItemExplorer({store:this.store});
+_16.attr("content",_17);
+dojo.connect(_e,"onCellClick",function(){
+var _18=_e.selection.getSelected()[0];
+_17.setItem(_18);
+});
+this.gridOnFetchComplete=_e._onFetchComplete;
+this.setStore(this.store);
+},setQuery:function(_19,_1a){
+this.grid.setQuery(_19,_1a);
+},_formatCell:function(_1b){
+if(this.store.isItem(_1b)){
+return this.store.getLabel(_1b)||this.store.getIdentity(_1b);
+}
+return _1b;
+},setStore:function(_1c){
+this.store=_1c;
+var _1d=this;
+var _1e=this.grid;
+_1e._pending_requests[0]=false;
+function _1f(_20){
+return _1d._formatCell(_20);
+};
+var _21=this.gridOnFetchComplete;
+_1e._onFetchComplete=function(_22,req){
+var _23=_1d.gridLayout=[];
+var _24,key,_25,i,j,k,_26=_1c.getIdentityAttributes();
+for(i=0;i<_26.length;i++){
+key=_26[i];
+_23.push({field:key,name:key,_score:100,formatter:_1f,editable:false});
+}
+for(i=0;_25=_22[i++];){
+var _27=_1c.getAttributes(_25);
+for(k=0;key=_27[k++];){
+var _28=false;
+for(j=0;_24=_23[j++];){
+if(_24.field==key){
+_24._score++;
+_28=true;
+break;
+}
+}
+if(!_28){
+_23.push({field:key,name:key,_score:1,formatter:_1f,styles:"white-space:nowrap; ",editable:true});
+}
+}
+}
+_23=_23.sort(function(a,b){
+return a._score>b._score?-1:1;
+});
+for(j=0;_24=_23[j];j++){
+if(_24._score<_22.length/40*j){
+_23.splice(j,_23.length-j);
+break;
+}
+}
+for(j=0;_24=_23[j++];){
+_24.width=Math.round(100/_23.length)+"%";
+}
+_1e._onFetchComplete=_21;
+_1e.attr("structure",_23);
+var _29=_21.apply(this,arguments);
+};
+_1e.setStore(_1c);
+this.queryOptions={cache:true};
+this.tree.setStore(_1c);
+},createNew:function(){
+var _2a=prompt("Enter any properties (in JSON literal form) to put in the new item (passed to the newItem constructor):","{ }");
+if(_2a){
+try{
+this.store.newItem(dojo.fromJson(_2a));
+}
+catch(e){
+alert(e);
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/data/PicasaStore.js
===================================================================
--- trunk/web/dojo/dojox/data/PicasaStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/PicasaStore.js	(revision 9)
@@ -0,0 +1,172 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.PicasaStore"]){
+dojo._hasResource["dojox.data.PicasaStore"]=true;
+dojo.provide("dojox.data.PicasaStore");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.io.script");
+dojo.require("dojo.date.stamp");
+dojo.declare("dojox.data.PicasaStore",null,{constructor:function(_1){
+if(_1&&_1.label){
+this.label=_1.label;
+}
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+if(_1&&"maxResults" in _1){
+this.maxResults=parseInt(_1.maxResults);
+if(!this.maxResults){
+this.maxResults=20;
+}
+}
+},_picasaUrl:"http://picasaweb.google.com/data/feed/api/all",_storeRef:"_S",label:"title",urlPreventCache:false,maxResults:20,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.PicasaStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.PicasaStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_4,_5,_6){
+var _7=this.getValues(_4,_5);
+if(_7&&_7.length>0){
+return _7[0];
+}
+return _6;
+},getAttributes:function(_8){
+return ["id","published","updated","category","title$type","title","summary$type","summary","rights$type","rights","link","author","gphoto$id","gphoto$name","location","imageUrlSmall","imageUrlMedium","imageUrl","datePublished","dateTaken","description"];
+},hasAttribute:function(_9,_a){
+if(this.getValue(_9,_a)){
+return true;
+}
+return false;
+},isItemLoaded:function(_b){
+return this.isItem(_b);
+},loadItem:function(_c){
+},getLabel:function(_d){
+return this.getValue(_d,this.label);
+},getLabelAttributes:function(_e){
+return [this.label];
+},containsValue:function(_f,_10,_11){
+var _12=this.getValues(_f,_10);
+for(var i=0;i<_12.length;i++){
+if(_12[i]===_11){
+return true;
+}
+}
+return false;
+},getValues:function(_13,_14){
+this._assertIsItem(_13);
+this._assertIsAttribute(_14);
+if(_14==="title"){
+return [this._unescapeHtml(_13.title)];
+}else{
+if(_14==="author"){
+return [this._unescapeHtml(_13.author[0].name)];
+}else{
+if(_14==="datePublished"){
+return [dojo.date.stamp.fromISOString(_13.published)];
+}else{
+if(_14==="dateTaken"){
+return [dojo.date.stamp.fromISOString(_13.published)];
+}else{
+if(_14==="updated"){
+return [dojo.date.stamp.fromISOString(_13.updated)];
+}else{
+if(_14==="imageUrlSmall"){
+return [_13.media.thumbnail[1].url];
+}else{
+if(_14==="imageUrl"){
+return [_13.content$src];
+}else{
+if(_14==="imageUrlMedium"){
+return [_13.media.thumbnail[2].url];
+}else{
+if(_14==="link"){
+return [_13.link[1]];
+}else{
+if(_14==="tags"){
+return _13.tags.split(" ");
+}else{
+if(_14==="description"){
+return [this._unescapeHtml(_13.summary)];
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+return [];
+},isItem:function(_15){
+if(_15&&_15[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_16){
+},_fetchItems:function(_17,_18,_19){
+if(!_17.query){
+_17.query={};
+}
+var _1a={alt:"jsonm",pp:"1",psc:"G"};
+_1a["start-index"]="1";
+if(_17.query.start){
+_1a["start-index"]=_17.query.start;
+}
+if(_17.query.tags){
+_1a.q=_17.query.tags;
+}
+if(_17.query.userid){
+_1a.uname=_17.query.userid;
+}
+if(_17.query.userids){
+_1a.ids=_17.query.userids;
+}
+if(_17.query.lang){
+_1a.hl=_17.query.lang;
+}
+_1a["max-results"]=this.maxResults;
+var _1b=this;
+var _1c=null;
+var _1d=function(_1e){
+if(_1c!==null){
+dojo.disconnect(_1c);
+}
+_18(_1b._processPicasaData(_1e),_17);
+};
+var _1f={url:this._picasaUrl,preventCache:this.urlPreventCache,content:_1a,callbackParamName:"callback",handle:_1d};
+var _20=dojo.io.script.get(_1f);
+_20.addErrback(function(_21){
+dojo.disconnect(_1c);
+_19(_21,_17);
+});
+},_processPicasaData:function(_22){
+var _23=[];
+if(_22.feed){
+_23=_22.feed.entry;
+for(var i=0;i<_23.length;i++){
+var _24=_23[i];
+_24[this._storeRef]=this;
+}
+}
+return _23;
+},_unescapeHtml:function(str){
+if(str){
+str=str.replace(/&amp;/gm,"&").replace(/&lt;/gm,"<").replace(/&gt;/gm,">").replace(/&quot;/gm,"\"");
+str=str.replace(/&#39;/gm,"'");
+}
+return str;
+}});
+dojo.extend(dojox.data.PicasaStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/GoogleSearchStore.js
===================================================================
--- trunk/web/dojo/dojox/data/GoogleSearchStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/GoogleSearchStore.js	(revision 9)
@@ -0,0 +1,256 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.GoogleSearchStore"]){
+dojo._hasResource["dojox.data.GoogleSearchStore"]=true;
+dojo.provide("dojox.data.GoogleSearchStore");
+dojo.provide("dojox.data.GoogleWebSearchStore");
+dojo.provide("dojox.data.GoogleBlogSearchStore");
+dojo.provide("dojox.data.GoogleLocalSearchStore");
+dojo.provide("dojox.data.GoogleVideoSearchStore");
+dojo.provide("dojox.data.GoogleNewsSearchStore");
+dojo.provide("dojox.data.GoogleBookSearchStore");
+dojo.provide("dojox.data.GoogleImageSearchStore");
+dojo.require("dojo.io.script");
+dojo.experimental("dojox.data.GoogleSearchStore");
+dojo.declare("dojox.data.GoogleSearchStore",null,{constructor:function(_1){
+if(_1){
+if(_1.label){
+this.label=_1.label;
+}
+if(_1.key){
+this._key=_1.key;
+}
+if(_1.lang){
+this._lang=_1.lang;
+}
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+}
+this._id=dojox.data.GoogleSearchStore.prototype._id++;
+},_id:0,_requestCount:0,_googleUrl:"http://ajax.googleapis.com/ajax/services/search/",_storeRef:"_S",_attributes:["unescapedUrl","url","visibleUrl","cacheUrl","title","titleNoFormatting","content","estimatedResultCount"],_aggregatedAttributes:{estimatedResultCount:"cursor.estimatedResultCount"},label:"titleNoFormatting",_type:"web",urlPreventCache:true,_queryAttrs:{text:"q"},_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.GoogleSearchStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.GoogleSearchStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_4,_5,_6){
+var _7=this.getValues(_4,_5);
+if(_7&&_7.length>0){
+return _7[0];
+}
+return _6;
+},getAttributes:function(_8){
+return this._attributes;
+},hasAttribute:function(_9,_a){
+if(this.getValue(_9,_a)){
+return true;
+}
+return false;
+},isItemLoaded:function(_b){
+return this.isItem(_b);
+},loadItem:function(_c){
+},getLabel:function(_d){
+return this.getValue(_d,this.label);
+},getLabelAttributes:function(_e){
+return [this.label];
+},containsValue:function(_f,_10,_11){
+var _12=this.getValues(_f,_10);
+for(var i=0;i<_12.length;i++){
+if(_12[i]===_11){
+return true;
+}
+}
+return false;
+},getValues:function(_13,_14){
+this._assertIsItem(_13);
+this._assertIsAttribute(_14);
+var val=_13[_14];
+if(dojo.isArray(val)){
+return val;
+}else{
+if(val!==undefined){
+return [val];
+}else{
+return [];
+}
+}
+},isItem:function(_15){
+if(_15&&_15[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_16){
+},_format:function(_17,_18){
+return _17;
+},fetch:function(_19){
+_19=_19||{};
+var _1a=_19.scope||dojo.global;
+if(!_19.query){
+if(_19.onError){
+_19.onError.call(_1a,new Error(this.declaredClass+": A query must be specified."));
+return;
+}
+}
+var _1b={};
+for(var _1c in this._queryAttrs){
+_1b[_1c]=_19.query[_1c];
+}
+_19={query:_1b,onComplete:_19.onComplete,onError:_19.onError,onItem:_19.onItem,onBegin:_19.onBegin,start:_19.start,count:_19.count};
+var _1d=8;
+var _1e="GoogleSearchStoreCallback_"+this._id+"_"+(++this._requestCount);
+var _1f=this._createContent(_1b,_1e,_19);
+var _20;
+if(typeof (_19.start)==="undefined"||_19.start===null){
+_19.start=0;
+}
+if(!_19.count){
+_19.count=_1d;
+}
+_20={start:_19.start-_19.start%_1d};
+var _21=this;
+var _22=this._googleUrl+this._type;
+var _23={url:_22,preventCache:this.urlPreventCache,content:_1f};
+var _24=[];
+var _25=0;
+var _26=false;
+var _27=_19.start-1;
+var _28=0;
+var _29=[];
+function _2a(req){
+_28++;
+_23.content.context=_23.content.start=req.start;
+var _2b=dojo.io.script.get(_23);
+_29.push(_2b.ioArgs.id);
+_2b.addErrback(function(_2c){
+if(_19.onError){
+_19.onError.call(_1a,_2c,_19);
+}
+});
+};
+var _2d=function(_2e,_2f){
+if(_29.length>0){
+dojo.query("#"+_29.splice(0,1)).forEach(dojo.destroy);
+}
+if(_26){
+return;
+}
+var _30=_21._getItems(_2f);
+var _31=_2f?_2f["cursor"]:null;
+if(_30){
+for(var i=0;i<_30.length&&i+_2e<_19.count+_19.start;i++){
+_21._processItem(_30[i],_2f);
+_24[i+_2e]=_30[i];
+}
+_25++;
+if(_25==1){
+var _32=_31?_31.pages:null;
+var _33=_32?Number(_32[_32.length-1].start):0;
+if(_19.onBegin){
+var est=_31?_31.estimatedResultCount:_30.length;
+var _34=est?Math.min(est,_33+_30.length):_33+_30.length;
+_19.onBegin.call(_1a,_34,_19);
+}
+var _35=(_19.start-_19.start%_1d)+_1d;
+var _36=1;
+while(_32){
+if(!_32[_36]||Number(_32[_36].start)>=_19.start+_19.count){
+break;
+}
+if(Number(_32[_36].start)>=_35){
+_2a({start:_32[_36].start});
+}
+_36++;
+}
+}
+if(_19.onItem&&_24[_27+1]){
+do{
+_27++;
+_19.onItem.call(_1a,_24[_27],_19);
+}while(_24[_27+1]&&_27<_19.start+_19.count);
+}
+if(_25==_28){
+_26=true;
+dojo.global[_1e]=null;
+if(_19.onItem){
+_19.onComplete.call(_1a,null,_19);
+}else{
+_24=_24.slice(_19.start,_19.start+_19.count);
+_19.onComplete.call(_1a,_24,_19);
+}
+}
+}
+};
+var _37=[];
+var _38=_20.start-1;
+dojo.global[_1e]=function(_39,_3a,_3b,_3c){
+try{
+if(_3b!=200){
+if(_19.onError){
+_19.onError.call(_1a,new Error("Response from Google was: "+_3b),_19);
+}
+dojo.global[_1e]=function(){
+};
+return;
+}
+if(_39==_38+1){
+_2d(Number(_39),_3a);
+_38+=_1d;
+if(_37.length>0){
+_37.sort(_21._getSort());
+while(_37.length>0&&_37[0].start==_38+1){
+_2d(Number(_37[0].start),_37[0].data);
+_37.splice(0,1);
+_38+=_1d;
+}
+}
+}else{
+_37.push({start:_39,data:_3a});
+}
+}
+catch(e){
+_19.onError.call(_1a,e,_19);
+}
+};
+_2a(_20);
+},_getSort:function(){
+return function(a,b){
+if(a.start<b.start){
+return -1;
+}
+if(b.start<a.start){
+return 1;
+}
+return 0;
+};
+},_processItem:function(_3d,_3e){
+_3d[this._storeRef]=this;
+for(var _3f in this._aggregatedAttributes){
+_3d[_3f]=dojo.getObject(this._aggregatedAttributes[_3f],false,_3e);
+}
+},_getItems:function(_40){
+return _40["results"]||_40;
+},_createContent:function(_41,_42,_43){
+var _44={v:"1.0",rsz:"large",callback:_42,key:this._key,hl:this._lang};
+for(var _45 in this._queryAttrs){
+_44[this._queryAttrs[_45]]=_41[_45];
+}
+return _44;
+}});
+dojo.declare("dojox.data.GoogleWebSearchStore",dojox.data.GoogleSearchStore,{});
+dojo.declare("dojox.data.GoogleBlogSearchStore",dojox.data.GoogleSearchStore,{_type:"blogs",_attributes:["blogUrl","postUrl","title","titleNoFormatting","content","author","publishedDate"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleLocalSearchStore",dojox.data.GoogleSearchStore,{_type:"local",_attributes:["title","titleNoFormatting","url","lat","lng","streetAddress","city","region","country","phoneNumbers","ddUrl","ddUrlToHere","ddUrlFromHere","staticMapUrl","viewport"],_aggregatedAttributes:{viewport:"viewport"},_queryAttrs:{text:"q",centerLatLong:"sll",searchSpan:"sspn"}});
+dojo.declare("dojox.data.GoogleVideoSearchStore",dojox.data.GoogleSearchStore,{_type:"video",_attributes:["title","titleNoFormatting","content","url","published","publisher","duration","tbWidth","tbHeight","tbUrl","playUrl"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleNewsSearchStore",dojox.data.GoogleSearchStore,{_type:"news",_attributes:["title","titleNoFormatting","content","url","unescapedUrl","publisher","clusterUrl","location","publishedDate","relatedStories"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleBookSearchStore",dojox.data.GoogleSearchStore,{_type:"books",_attributes:["title","titleNoFormatting","authors","url","unescapedUrl","bookId","pageCount","publishedYear"],_aggregatedAttributes:{}});
+dojo.declare("dojox.data.GoogleImageSearchStore",dojox.data.GoogleSearchStore,{_type:"images",_attributes:["title","titleNoFormatting","visibleUrl","url","unescapedUrl","originalContextUrl","width","height","tbWidth","tbHeight","tbUrl","content","contentNoFormatting"],_aggregatedAttributes:{}});
+}
Index: trunk/web/dojo/dojox/data/CouchDBRestStore.js
===================================================================
--- trunk/web/dojo/dojox/data/CouchDBRestStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/CouchDBRestStore.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CouchDBRestStore"]){
+dojo._hasResource["dojox.data.CouchDBRestStore"]=true;
+dojo.provide("dojox.data.CouchDBRestStore");
+dojo.require("dojox.data.JsonRestStore");
+dojo.declare("dojox.data.CouchDBRestStore",dojox.data.JsonRestStore,{save:function(_1){
+var _2=this.inherited(arguments);
+var _3=this.service.servicePath;
+for(var i=0;i<_2.length;i++){
+(function(_4,_5){
+_5.addCallback(function(_6){
+if(_6){
+_4.__id=_3+_6.id;
+_4._rev=_6.rev;
+}
+return _6;
+});
+})(_2[i].content,_2[i].deferred);
+}
+},fetch:function(_7){
+_7.query=_7.query||"_all_docs?";
+if(_7.start){
+_7.query=(_7.query?(_7.query+"&"):"")+"startkey="+_7.start;
+delete _7.start;
+}
+if(_7.count){
+_7.query=(_7.query?(_7.query+"&"):"")+"limit="+_7.count;
+delete _7.count;
+}
+return this.inherited(arguments);
+},_processResults:function(_8){
+var _9=_8.rows;
+if(_9){
+var _a=this.service.servicePath;
+var _b=this;
+for(var i=0;i<_9.length;i++){
+var _c=_9[i].value;
+_c.__id=_a+_9[i].id;
+_c._id=_9[i].id;
+_c._loadObject=dojox.rpc.JsonRest._loader;
+_9[i]=_c;
+}
+return {totalCount:_8.total_rows,items:_8.rows};
+}else{
+return {items:_8};
+}
+}});
+dojox.data.CouchDBRestStore.getStores=function(_d){
+var _e=dojo.xhrGet({url:_d+"_all_dbs",handleAs:"json",sync:true});
+var _f={};
+_e.addBoth(function(dbs){
+for(var i=0;i<dbs.length;i++){
+_f[dbs[i]]=new dojox.data.CouchDBRestStore({target:_d+dbs[i],idAttribute:"_id"});
+}
+return _f;
+});
+return _f;
+};
+}
Index: trunk/web/dojo/dojox/data/OpmlStore.js
===================================================================
--- trunk/web/dojo/dojox/data/OpmlStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/OpmlStore.js	(revision 9)
@@ -0,0 +1,329 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.OpmlStore"]){
+dojo._hasResource["dojox.data.OpmlStore"]=true;
+dojo.provide("dojox.data.OpmlStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.declare("dojox.data.OpmlStore",null,{constructor:function(_1){
+this._xmlData=null;
+this._arrayOfTopLevelItems=[];
+this._arrayOfAllItems=[];
+this._metadataNodes=null;
+this._loadFinished=false;
+this.url=_1.url;
+this._opmlData=_1.data;
+if(_1.label){
+this.label=_1.label;
+}
+this._loadInProgress=false;
+this._queuedFetches=[];
+this._identityMap={};
+this._identCount=0;
+this._idProp="_I";
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+},label:"text",url:"",urlPreventCache:false,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(!dojo.isString(_3)){
+throw new Error("dojox.data.OpmlStore: a function was passed an attribute argument that was not an attribute object nor an attribute name string");
+}
+},_removeChildNodesThatAreNotElementNodes:function(_4,_5){
+var _6=_4.childNodes;
+if(_6.length===0){
+return;
+}
+var _7=[];
+var i,_8;
+for(i=0;i<_6.length;++i){
+_8=_6[i];
+if(_8.nodeType!=1){
+_7.push(_8);
+}
+}
+for(i=0;i<_7.length;++i){
+_8=_7[i];
+_4.removeChild(_8);
+}
+if(_5){
+for(i=0;i<_6.length;++i){
+_8=_6[i];
+this._removeChildNodesThatAreNotElementNodes(_8,_5);
+}
+}
+},_processRawXmlTree:function(_9){
+this._loadFinished=true;
+this._xmlData=_9;
+var _a=_9.getElementsByTagName("head");
+var _b=_a[0];
+if(_b){
+this._removeChildNodesThatAreNotElementNodes(_b);
+this._metadataNodes=_b.childNodes;
+}
+var _c=_9.getElementsByTagName("body");
+var _d=_c[0];
+if(_d){
+this._removeChildNodesThatAreNotElementNodes(_d,true);
+var _e=_c[0].childNodes;
+for(var i=0;i<_e.length;++i){
+var _f=_e[i];
+if(_f.tagName=="outline"){
+this._identityMap[this._identCount]=_f;
+this._identCount++;
+this._arrayOfTopLevelItems.push(_f);
+this._arrayOfAllItems.push(_f);
+this._checkChildNodes(_f);
+}
+}
+}
+},_checkChildNodes:function(_10){
+if(_10.firstChild){
+for(var i=0;i<_10.childNodes.length;i++){
+var _11=_10.childNodes[i];
+if(_11.tagName=="outline"){
+this._identityMap[this._identCount]=_11;
+this._identCount++;
+this._arrayOfAllItems.push(_11);
+this._checkChildNodes(_11);
+}
+}
+}
+},_getItemsArray:function(_12){
+if(_12&&_12.deep){
+return this._arrayOfAllItems;
+}
+return this._arrayOfTopLevelItems;
+},getValue:function(_13,_14,_15){
+this._assertIsItem(_13);
+this._assertIsAttribute(_14);
+if(_14=="children"){
+return (_13.firstChild||_15);
+}else{
+var _16=_13.getAttribute(_14);
+return (_16!==undefined)?_16:_15;
+}
+},getValues:function(_17,_18){
+this._assertIsItem(_17);
+this._assertIsAttribute(_18);
+var _19=[];
+if(_18=="children"){
+for(var i=0;i<_17.childNodes.length;++i){
+_19.push(_17.childNodes[i]);
+}
+}else{
+if(_17.getAttribute(_18)!==null){
+_19.push(_17.getAttribute(_18));
+}
+}
+return _19;
+},getAttributes:function(_1a){
+this._assertIsItem(_1a);
+var _1b=[];
+var _1c=_1a;
+var _1d=_1c.attributes;
+for(var i=0;i<_1d.length;++i){
+var _1e=_1d.item(i);
+_1b.push(_1e.nodeName);
+}
+if(_1c.childNodes.length>0){
+_1b.push("children");
+}
+return _1b;
+},hasAttribute:function(_1f,_20){
+return (this.getValues(_1f,_20).length>0);
+},containsValue:function(_21,_22,_23){
+var _24=undefined;
+if(typeof _23==="string"){
+_24=dojo.data.util.filter.patternToRegExp(_23,false);
+}
+return this._containsValue(_21,_22,_23,_24);
+},_containsValue:function(_25,_26,_27,_28){
+var _29=this.getValues(_25,_26);
+for(var i=0;i<_29.length;++i){
+var _2a=_29[i];
+if(typeof _2a==="string"&&_28){
+return (_2a.match(_28)!==null);
+}else{
+if(_27===_2a){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_2b){
+return (_2b&&_2b.nodeType==1&&_2b.tagName=="outline"&&_2b.ownerDocument===this._xmlData);
+},isItemLoaded:function(_2c){
+return this.isItem(_2c);
+},loadItem:function(_2d){
+},getLabel:function(_2e){
+if(this.isItem(_2e)){
+return this.getValue(_2e,this.label);
+}
+return undefined;
+},getLabelAttributes:function(_2f){
+return [this.label];
+},_fetchItems:function(_30,_31,_32){
+var _33=this;
+var _34=function(_35,_36){
+var _37=null;
+if(_35.query){
+_37=[];
+var _38=_35.queryOptions?_35.queryOptions.ignoreCase:false;
+var _39={};
+for(var key in _35.query){
+var _3a=_35.query[key];
+if(typeof _3a==="string"){
+_39[key]=dojo.data.util.filter.patternToRegExp(_3a,_38);
+}
+}
+for(var i=0;i<_36.length;++i){
+var _3b=true;
+var _3c=_36[i];
+for(var key in _35.query){
+var _3a=_35.query[key];
+if(!_33._containsValue(_3c,key,_3a,_39[key])){
+_3b=false;
+}
+}
+if(_3b){
+_37.push(_3c);
+}
+}
+}else{
+if(_36.length>0){
+_37=_36.slice(0,_36.length);
+}
+}
+_31(_37,_35);
+};
+if(this._loadFinished){
+_34(_30,this._getItemsArray(_30.queryOptions));
+}else{
+if(this._loadInProgress){
+this._queuedFetches.push({args:_30,filter:_34});
+}else{
+if(this.url!==""){
+this._loadInProgress=true;
+var _3d={url:_33.url,handleAs:"xml",preventCache:_33.urlPreventCache};
+var _3e=dojo.xhrGet(_3d);
+_3e.addCallback(function(_3f){
+_33._processRawXmlTree(_3f);
+_34(_30,_33._getItemsArray(_30.queryOptions));
+_33._handleQueuedFetches();
+});
+_3e.addErrback(function(_40){
+throw _40;
+});
+}else{
+if(this._opmlData){
+this._processRawXmlTree(this._opmlData);
+this._opmlData=null;
+_34(_30,this._getItemsArray(_30.queryOptions));
+}else{
+throw new Error("dojox.data.OpmlStore: No OPML source data was provided as either URL or XML data input.");
+}
+}
+}
+}
+},getFeatures:function(){
+var _41={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+return _41;
+},getIdentity:function(_42){
+if(this.isItem(_42)){
+for(var i in this._identityMap){
+if(this._identityMap[i]===_42){
+return i;
+}
+}
+}
+return null;
+},fetchItemByIdentity:function(_43){
+if(!this._loadFinished){
+var _44=this;
+if(this.url!==""){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_43});
+}else{
+this._loadInProgress=true;
+var _45={url:_44.url,handleAs:"xml"};
+var _46=dojo.xhrGet(_45);
+_46.addCallback(function(_47){
+var _48=_43.scope?_43.scope:dojo.global;
+try{
+_44._processRawXmlTree(_47);
+var _49=_44._identityMap[_43.identity];
+if(!_44.isItem(_49)){
+_49=null;
+}
+if(_43.onItem){
+_43.onItem.call(_48,_49);
+}
+_44._handleQueuedFetches();
+}
+catch(error){
+if(_43.onError){
+_43.onError.call(_48,error);
+}
+}
+});
+_46.addErrback(function(_4a){
+this._loadInProgress=false;
+if(_43.onError){
+var _4b=_43.scope?_43.scope:dojo.global;
+_43.onError.call(_4b,_4a);
+}
+});
+}
+}else{
+if(this._opmlData){
+this._processRawXmlTree(this._opmlData);
+this._opmlData=null;
+var _4c=this._identityMap[_43.identity];
+if(!_44.isItem(_4c)){
+_4c=null;
+}
+if(_43.onItem){
+var _4d=_43.scope?_43.scope:dojo.global;
+_43.onItem.call(_4d,_4c);
+}
+}
+}
+}else{
+var _4c=this._identityMap[_43.identity];
+if(!this.isItem(_4c)){
+_4c=null;
+}
+if(_43.onItem){
+var _4d=_43.scope?_43.scope:dojo.global;
+_43.onItem.call(_4d,_4c);
+}
+}
+},getIdentityAttributes:function(_4e){
+return null;
+},_handleQueuedFetches:function(){
+if(this._queuedFetches.length>0){
+for(var i=0;i<this._queuedFetches.length;i++){
+var _4f=this._queuedFetches[i];
+var _50=_4f.args;
+var _51=_4f.filter;
+if(_51){
+_51(_50,this._getItemsArray(_50.queryOptions));
+}else{
+this.fetchItemByIdentity(_50);
+}
+}
+this._queuedFetches=[];
+}
+},close:function(_52){
+}});
+dojo.extend(dojox.data.OpmlStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/FlickrRestStore.js
===================================================================
--- trunk/web/dojo/dojox/data/FlickrRestStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/FlickrRestStore.js	(revision 9)
@@ -0,0 +1,296 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.FlickrRestStore"]){
+dojo._hasResource["dojox.data.FlickrRestStore"]=true;
+dojo.provide("dojox.data.FlickrRestStore");
+dojo.require("dojox.data.FlickrStore");
+dojo.declare("dojox.data.FlickrRestStore",dojox.data.FlickrStore,{constructor:function(_1){
+if(_1){
+if(_1.label){
+this.label=_1.label;
+}
+if(_1.apikey){
+this._apikey=_1.apikey;
+}
+}
+this._cache=[];
+this._prevRequests={};
+this._handlers={};
+this._prevRequestRanges=[];
+this._maxPhotosPerUser={};
+this._id=dojox.data.FlickrRestStore.prototype._id++;
+},_id:0,_requestCount:0,_flickrRestUrl:"http://www.flickr.com/services/rest/",_apikey:null,_storeRef:"_S",_cache:null,_prevRequests:null,_handlers:null,_sortAttributes:{"date-posted":true,"date-taken":true,"interestingness":true},_fetchItems:function(_2,_3,_4){
+var _5={};
+if(!_2.query){
+_2.query=_5={};
+}else{
+dojo.mixin(_5,_2.query);
+}
+var _6=[];
+var _7=[];
+var _8={format:"json",method:"flickr.photos.search",api_key:this._apikey,extras:"owner_name,date_upload,date_taken"};
+var _9=false;
+if(_5.userid){
+_9=true;
+_8.user_id=_2.query.userid;
+_6.push("userid"+_2.query.userid);
+}
+if(_5.groupid){
+_9=true;
+_8.group_id=_5.groupid;
+_6.push("groupid"+_5.groupid);
+}
+if(_5.apikey){
+_9=true;
+_8.api_key=_2.query.apikey;
+_7.push("api"+_2.query.apikey);
+}else{
+if(_8.api_key){
+_9=true;
+_2.query.apikey=_8.api_key;
+_7.push("api"+_8.api_key);
+}else{
+throw Error("dojox.data.FlickrRestStore: An API key must be specified.");
+}
+}
+_2._curCount=_2.count;
+if(_5.page){
+_8.page=_2.query.page;
+_7.push("page"+_8.page);
+}else{
+if(("start" in _2)&&_2.start!==null){
+if(!_2.count){
+_2.count=20;
+}
+var _a=_2.start%_2.count;
+var _b=_2.start,_c=_2.count;
+if(_a!==0){
+if(_b<_c/2){
+_c=_b+_c;
+_b=0;
+}else{
+var _d=20,_e=2;
+for(var i=_d;i>0;i--){
+if(_b%i===0&&(_b/i)>=_c){
+_e=i;
+break;
+}
+}
+_c=_b/_e;
+}
+_2._realStart=_2.start;
+_2._realCount=_2.count;
+_2._curStart=_b;
+_2._curCount=_c;
+}else{
+_2._realStart=_2._realCount=null;
+_2._curStart=_2.start;
+_2._curCount=_2.count;
+}
+_8.page=(_b/_c)+1;
+_7.push("page"+_8.page);
+}
+}
+if(_2._curCount){
+_8.per_page=_2._curCount;
+_7.push("count"+_2._curCount);
+}
+if(_5.lang){
+_8.lang=_2.query.lang;
+_6.push("lang"+_2.lang);
+}
+if(_5.setid){
+_8.method="flickr.photosets.getPhotos";
+_8.photoset_id=_2.query.setid;
+_6.push("set"+_2.query.setid);
+}
+if(_5.tags){
+if(_5.tags instanceof Array){
+_8.tags=_5.tags.join(",");
+}else{
+_8.tags=_5.tags;
+}
+_6.push("tags"+_8.tags);
+if(_5["tag_mode"]&&(_5.tag_mode.toLowerCase()==="any"||_5.tag_mode.toLowerCase()==="all")){
+_8.tag_mode=_5.tag_mode;
+}
+}
+if(_5.text){
+_8.text=_5.text;
+_6.push("text:"+_5.text);
+}
+if(_5.sort&&_5.sort.length>0){
+if(!_5.sort[0].attribute){
+_5.sort[0].attribute="date-posted";
+}
+if(this._sortAttributes[_5.sort[0].attribute]){
+if(_5.sort[0].descending){
+_8.sort=_5.sort[0].attribute+"-desc";
+}else{
+_8.sort=_5.sort[0].attribute+"-asc";
+}
+}
+}else{
+_8.sort="date-posted-asc";
+}
+_6.push("sort:"+_8.sort);
+_6=_6.join(".");
+_7=_7.length>0?"."+_7.join("."):"";
+var _f=_6+_7;
+_2={query:_5,count:_2._curCount,start:_2._curStart,_realCount:_2._realCount,_realStart:_2._realStart,onBegin:_2.onBegin,onComplete:_2.onComplete,onItem:_2.onItem};
+var _10={request:_2,fetchHandler:_3,errorHandler:_4};
+if(this._handlers[_f]){
+this._handlers[_f].push(_10);
+return;
+}
+this._handlers[_f]=[_10];
+var _11=null;
+var _12={url:this._flickrRestUrl,preventCache:this.urlPreventCache,content:_8,callbackParamName:"jsoncallback"};
+var _13=dojo.hitch(this,function(_14,_15,_16){
+var _17=_16.request.onBegin;
+_16.request.onBegin=null;
+var _18;
+var req=_16.request;
+if(("_realStart" in req)&&req._realStart!=null){
+req.start=req._realStart;
+req.count=req._realCount;
+req._realStart=req._realCount=null;
+}
+if(_17){
+var _19=null;
+if(_15){
+_19=(_15.photoset?_15.photoset:_15.photos);
+}
+if(_19&&("perpage" in _19)&&("pages" in _19)){
+if(_19.perpage*_19.pages<=_16.request.start+_16.request.count){
+_18=_16.request.start+_19.photo.length;
+}else{
+_18=_19.perpage*_19.pages;
+}
+this._maxPhotosPerUser[_6]=_18;
+_17(_18,_16.request);
+}else{
+if(this._maxPhotosPerUser[_6]){
+_17(this._maxPhotosPerUser[_6],_16.request);
+}
+}
+}
+_16.fetchHandler(_14,_16.request);
+if(_17){
+_16.request.onBegin=_17;
+}
+});
+var _1a=dojo.hitch(this,function(_1b){
+if(_1b.stat!="ok"){
+_4(null,_2);
+}else{
+var _1c=this._handlers[_f];
+if(!_1c){
+return;
+}
+this._handlers[_f]=null;
+this._prevRequests[_f]=_1b;
+var _1d=this._processFlickrData(_1b,_2,_6);
+if(!this._prevRequestRanges[_6]){
+this._prevRequestRanges[_6]=[];
+}
+this._prevRequestRanges[_6].push({start:_2.start,end:_2.start+(_1b.photoset?_1b.photoset.photo.length:_1b.photos.photo.length)});
+dojo.forEach(_1c,function(i){
+_13(_1d,_1b,i);
+});
+}
+});
+var _1e=this._prevRequests[_f];
+if(_1e){
+this._handlers[_f]=null;
+_13(this._cache[_6],_1e,_10);
+return;
+}else{
+if(this._checkPrevRanges(_6,_2.start,_2.count)){
+this._handlers[_f]=null;
+_13(this._cache[_6],null,_10);
+return;
+}
+}
+var _1f=dojo.io.script.get(_12);
+_1f.addCallback(_1a);
+_1f.addErrback(function(_20){
+dojo.disconnect(_11);
+_4(_20,_2);
+});
+},getAttributes:function(_21){
+return ["title","author","imageUrl","imageUrlSmall","imageUrlMedium","imageUrlThumb","imageUrlLarge","imageUrlOriginal","link","dateTaken","datePublished"];
+},getValues:function(_22,_23){
+this._assertIsItem(_22);
+this._assertIsAttribute(_23);
+switch(_23){
+case "title":
+return [this._unescapeHtml(_22.title)];
+case "author":
+return [_22.ownername];
+case "imageUrlSmall":
+return [_22.media.s];
+case "imageUrl":
+return [_22.media.l];
+case "imageUrlOriginal":
+return [_22.media.o];
+case "imageUrlLarge":
+return [_22.media.l];
+case "imageUrlMedium":
+return [_22.media.m];
+case "imageUrlThumb":
+return [_22.media.t];
+case "link":
+return ["http://www.flickr.com/photos/"+_22.owner+"/"+_22.id];
+case "dateTaken":
+return [_22.datetaken];
+case "datePublished":
+return [_22.datepublished];
+default:
+return undefined;
+}
+},_processFlickrData:function(_24,_25,_26){
+if(_24.items){
+return dojox.data.FlickrStore.prototype._processFlickrData.apply(this,arguments);
+}
+var _27=["http://farm",null,".static.flickr.com/",null,"/",null,"_",null];
+var _28=[];
+var _29=(_24.photoset?_24.photoset:_24.photos);
+if(_24.stat=="ok"&&_29&&_29.photo){
+_28=_29.photo;
+for(var i=0;i<_28.length;i++){
+var _2a=_28[i];
+_2a[this._storeRef]=this;
+_27[1]=_2a.farm;
+_27[3]=_2a.server;
+_27[5]=_2a.id;
+_27[7]=_2a.secret;
+var _2b=_27.join("");
+_2a.media={s:_2b+"_s.jpg",m:_2b+"_m.jpg",l:_2b+".jpg",t:_2b+"_t.jpg",o:_2b+"_o.jpg"};
+if(!_2a.owner&&_24.photoset){
+_2a.owner=_24.photoset.owner;
+}
+}
+}
+var _2c=_25.start?_25.start:0;
+var arr=this._cache[_26];
+if(!arr){
+this._cache[_26]=arr=[];
+}
+dojo.forEach(_28,function(i,idx){
+arr[idx+_2c]=i;
+});
+return arr;
+},_checkPrevRanges:function(_2d,_2e,_2f){
+var end=_2e+_2f;
+var arr=this._prevRequestRanges[_2d];
+return (!!arr)&&dojo.some(arr,function(_30){
+return ((_2e>=_30.start)&&(end<=_30.end));
+});
+}});
+}
Index: trunk/web/dojo/dojox/data/FlickrStore.js
===================================================================
--- trunk/web/dojo/dojox/data/FlickrStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/FlickrStore.js	(revision 9)
@@ -0,0 +1,151 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.FlickrStore"]){
+dojo._hasResource["dojox.data.FlickrStore"]=true;
+dojo.provide("dojox.data.FlickrStore");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.io.script");
+dojo.require("dojo.date.stamp");
+dojo.require("dojo.AdapterRegistry");
+(function(){
+var d=dojo;
+dojo.declare("dojox.data.FlickrStore",null,{constructor:function(_1){
+if(_1&&_1.label){
+this.label=_1.label;
+}
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+},_storeRef:"_S",label:"title",urlPreventCache:true,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.FlickrStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.FlickrStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_4,_5,_6){
+var _7=this.getValues(_4,_5);
+if(_7&&_7.length>0){
+return _7[0];
+}
+return _6;
+},getAttributes:function(_8){
+return ["title","description","author","datePublished","dateTaken","imageUrl","imageUrlSmall","imageUrlMedium","tags","link"];
+},hasAttribute:function(_9,_a){
+var v=this.getValue(_9,_a);
+if(v||v===""||v===false){
+return true;
+}
+return false;
+},isItemLoaded:function(_b){
+return this.isItem(_b);
+},loadItem:function(_c){
+},getLabel:function(_d){
+return this.getValue(_d,this.label);
+},getLabelAttributes:function(_e){
+return [this.label];
+},containsValue:function(_f,_10,_11){
+var _12=this.getValues(_f,_10);
+for(var i=0;i<_12.length;i++){
+if(_12[i]===_11){
+return true;
+}
+}
+return false;
+},getValues:function(_13,_14){
+this._assertIsItem(_13);
+this._assertIsAttribute(_14);
+var u=d.hitch(this,"_unescapeHtml");
+var s=d.hitch(d.date.stamp,"fromISOString");
+switch(_14){
+case "title":
+return [u(_13.title)];
+case "author":
+return [u(_13.author)];
+case "datePublished":
+return [s(_13.published)];
+case "dateTaken":
+return [s(_13.date_taken)];
+case "imageUrlSmall":
+return [_13.media.m.replace(/_m\./,"_s.")];
+case "imageUrl":
+return [_13.media.m.replace(/_m\./,".")];
+case "imageUrlMedium":
+return [_13.media.m];
+case "link":
+return [_13.link];
+case "tags":
+return _13.tags.split(" ");
+case "description":
+return [u(_13.description)];
+default:
+return [];
+}
+},isItem:function(_15){
+if(_15&&_15[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_16){
+},_fetchItems:function(_17,_18,_19){
+var rq=_17.query=_17.query||{};
+var _1a={format:"json",tagmode:"any"};
+d.forEach(["tags","tagmode","lang","id","ids"],function(i){
+if(rq[i]){
+_1a[i]=rq[i];
+}
+});
+_1a.id=rq.id||rq.userid||rq.groupid;
+if(rq.userids){
+_1a.ids=rq.userids;
+}
+var _1b=null;
+var _1c={url:dojox.data.FlickrStore.urlRegistry.match(_17),preventCache:this.urlPreventCache,content:_1a};
+var _1d=d.hitch(this,function(_1e){
+if(!!_1b){
+d.disconnect(_1b);
+}
+_18(this._processFlickrData(_1e),_17);
+});
+_1b=d.connect("jsonFlickrFeed",_1d);
+var _1f=d.io.script.get(_1c);
+_1f.addErrback(function(_20){
+d.disconnect(_1b);
+_19(_20,_17);
+});
+},_processFlickrData:function(_21){
+var _22=[];
+if(_21.items){
+_22=_21.items;
+for(var i=0;i<_21.items.length;i++){
+var _23=_21.items[i];
+_23[this._storeRef]=this;
+}
+}
+return _22;
+},_unescapeHtml:function(str){
+return str.replace(/&amp;/gm,"&").replace(/&lt;/gm,"<").replace(/&gt;/gm,">").replace(/&quot;/gm,"\"").replace(/&#39;/gm,"'");
+}});
+dojo.extend(dojox.data.FlickrStore,dojo.data.util.simpleFetch);
+var _24="http://api.flickr.com/services/feeds/";
+var reg=dojox.data.FlickrStore.urlRegistry=new d.AdapterRegistry(true);
+reg.register("group pool",function(_25){
+return !!_25.query["groupid"];
+},_24+"groups_pool.gne");
+reg.register("default",function(_26){
+return true;
+},_24+"photos_public.gne");
+})();
+if(!jsonFlickrFeed){
+var jsonFlickrFeed=function(_27){
+};
+}
+}
Index: trunk/web/dojo/dojox/data/css.js
===================================================================
--- trunk/web/dojo/dojox/data/css.js	(revision 0)
+++ trunk/web/dojo/dojox/data/css.js	(revision 9)
@@ -0,0 +1,91 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.css"]){
+dojo._hasResource["dojox.data.css"]=true;
+dojo.provide("dojox.data.css");
+dojo.provide("dojox.data.css.rules");
+dojox.data.css.rules.forEach=function(fn,_1,_2){
+if(_2){
+var _3=function(_4){
+dojo.forEach(_4[_4.cssRules?"cssRules":"rules"],function(_5){
+if(!_5.type||_5.type!==3){
+var _6="";
+if(_4&&_4.href){
+_6=_4.href;
+}
+fn.call(_1?_1:this,_5,_4,_6);
+}
+});
+};
+dojo.forEach(_2,_3);
+}
+};
+dojox.data.css.findStyleSheets=function(_7){
+var _8=[];
+var _9=function(_a){
+var s=dojox.data.css.findStyleSheet(_a);
+if(s){
+dojo.forEach(s,function(_b){
+if(dojo.indexOf(_8,_b)===-1){
+_8.push(_b);
+}
+});
+}
+};
+dojo.forEach(_7,_9);
+return _8;
+};
+dojox.data.css.findStyleSheet=function(_c){
+var _d=[];
+if(_c.charAt(0)==="."){
+_c=_c.substring(1);
+}
+var _e=function(_f){
+if(_f.href&&_f.href.match(_c)){
+_d.push(_f);
+return true;
+}
+if(_f.imports){
+return dojo.some(_f.imports,function(_10){
+return _e(_10);
+});
+}
+return dojo.some(_f[_f.cssRules?"cssRules":"rules"],function(_11){
+if(_11.type&&_11.type===3&&_e(_11.styleSheet)){
+return true;
+}
+return false;
+});
+};
+dojo.some(document.styleSheets,_e);
+return _d;
+};
+dojox.data.css.determineContext=function(_12){
+var ret=[];
+if(_12&&_12.length>0){
+_12=dojox.data.css.findStyleSheets(_12);
+}else{
+_12=document.styleSheets;
+}
+var _13=function(_14){
+ret.push(_14);
+if(_14.imports){
+dojo.forEach(_14.imports,function(_15){
+_13(_15);
+});
+}
+dojo.forEach(_14[_14.cssRules?"cssRules":"rules"],function(_16){
+if(_16.type&&_16.type===3){
+_13(_16.styleSheet);
+}
+});
+};
+dojo.forEach(_12,_13);
+return ret;
+};
+}
Index: trunk/web/dojo/dojox/data/SnapLogicStore.js
===================================================================
--- trunk/web/dojo/dojox/data/SnapLogicStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/SnapLogicStore.js	(revision 9)
@@ -0,0 +1,183 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.SnapLogicStore"]){
+dojo._hasResource["dojox.data.SnapLogicStore"]=true;
+dojo.provide("dojox.data.SnapLogicStore");
+dojo.require("dojo.io.script");
+dojo.require("dojo.data.util.sorter");
+dojo.declare("dojox.data.SnapLogicStore",null,{Parts:{DATA:"data",COUNT:"count"},url:"",constructor:function(_1){
+if(_1.url){
+this.url=_1.url;
+}
+this._parameters=_1.parameters;
+},_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.SnapLogicStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.SnapLogicStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},getValue:function(_4,_5,_6){
+this._assertIsItem(_4);
+this._assertIsAttribute(_5);
+var i=dojo.indexOf(_4.attributes,_5);
+if(i!==-1){
+return _4.values[i];
+}
+return _6;
+},getAttributes:function(_7){
+this._assertIsItem(_7);
+return _7.attributes;
+},hasAttribute:function(_8,_9){
+this._assertIsItem(_8);
+this._assertIsAttribute(_9);
+for(var i=0;i<_8.attributes.length;++i){
+if(_9==_8.attributes[i]){
+return true;
+}
+}
+return false;
+},isItemLoaded:function(_a){
+return this.isItem(_a);
+},loadItem:function(_b){
+},getLabel:function(_c){
+return undefined;
+},getLabelAttributes:function(_d){
+return null;
+},containsValue:function(_e,_f,_10){
+return this.getValue(_e,_f)===_10;
+},getValues:function(_11,_12){
+this._assertIsItem(_11);
+this._assertIsAttribute(_12);
+var i=dojo.indexOf(_11.attributes,_12);
+if(i!==-1){
+return [_11.values[i]];
+}
+return [];
+},isItem:function(_13){
+if(_13&&_13._store===this){
+return true;
+}
+return false;
+},close:function(_14){
+},_fetchHandler:function(_15){
+var _16=_15.scope||dojo.global;
+if(_15.onBegin){
+_15.onBegin.call(_16,_15._countResponse[0],_15);
+}
+if(_15.onItem||_15.onComplete){
+var _17=_15._dataResponse;
+if(!_17.length){
+_15.onError.call(_16,new Error("dojox.data.SnapLogicStore: invalid response of length 0"),_15);
+return;
+}else{
+if(_15.query!="record count"){
+var _18=_17.shift();
+var _19=[];
+for(var i=0;i<_17.length;++i){
+if(_15._aborted){
+break;
+}
+_19.push({attributes:_18,values:_17[i],_store:this});
+}
+if(_15.sort&&!_15._aborted){
+_19.sort(dojo.data.util.sorter.createSortFunction(_15.sort,self));
+}
+}else{
+_19=[({attributes:["count"],values:_17,_store:this})];
+}
+}
+if(_15.onItem){
+for(var i=0;i<_19.length;++i){
+if(_15._aborted){
+break;
+}
+_15.onItem.call(_16,_19[i],_15);
+}
+_19=null;
+}
+if(_15.onComplete&&!_15._aborted){
+_15.onComplete.call(_16,_19,_15);
+}
+}
+},_partHandler:function(_1a,_1b,_1c){
+if(_1c instanceof Error){
+if(_1b==this.Parts.DATA){
+_1a._dataHandle=null;
+}else{
+_1a._countHandle=null;
+}
+_1a._aborted=true;
+if(_1a.onError){
+_1a.onError.call(_1a.scope,_1c,_1a);
+}
+}else{
+if(_1a._aborted){
+return;
+}
+if(_1b==this.Parts.DATA){
+_1a._dataResponse=_1c;
+}else{
+_1a._countResponse=_1c;
+}
+if((!_1a._dataHandle||_1a._dataResponse!==null)&&(!_1a._countHandle||_1a._countResponse!==null)){
+this._fetchHandler(_1a);
+}
+}
+},fetch:function(_1d){
+_1d._countResponse=null;
+_1d._dataResponse=null;
+_1d._aborted=false;
+_1d.abort=function(){
+if(!_1d._aborted){
+_1d._aborted=true;
+if(_1d._dataHandle&&_1d._dataHandle.cancel){
+_1d._dataHandle.cancel();
+}
+if(_1d._countHandle&&_1d._countHandle.cancel){
+_1d._countHandle.cancel();
+}
+}
+};
+if(_1d.onItem||_1d.onComplete){
+var _1e=this._parameters||{};
+if(_1d.start){
+if(_1d.start<0){
+throw new Error("dojox.data.SnapLogicStore: request start value must be 0 or greater");
+}
+_1e["sn.start"]=_1d.start+1;
+}
+if(_1d.count){
+if(_1d.count<0){
+throw new Error("dojox.data.SnapLogicStore: request count value 0 or greater");
+}
+_1e["sn.limit"]=_1d.count;
+}
+_1e["sn.content_type"]="application/javascript";
+var _1f=this;
+var _20=function(_21,_22){
+if(_21 instanceof Error){
+_1f._fetchHandler(_21,_1d);
+}
+};
+var _23={url:this.url,content:_1e,timeout:60000,callbackParamName:"sn.stream_header",handle:dojo.hitch(this,"_partHandler",_1d,this.Parts.DATA)};
+_1d._dataHandle=dojo.io.script.get(_23);
+}
+if(_1d.onBegin){
+var _1e={};
+_1e["sn.count"]="records";
+_1e["sn.content_type"]="application/javascript";
+var _23={url:this.url,content:_1e,timeout:60000,callbackParamName:"sn.stream_header",handle:dojo.hitch(this,"_partHandler",_1d,this.Parts.COUNT)};
+_1d._countHandle=dojo.io.script.get(_23);
+}
+return _1d;
+}});
+}
Index: trunk/web/dojo/dojox/data/S3Store.js
===================================================================
--- trunk/web/dojo/dojox/data/S3Store.js	(revision 0)
+++ trunk/web/dojo/dojox/data/S3Store.js	(revision 9)
@@ -0,0 +1,29 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.S3Store"]){
+dojo._hasResource["dojox.data.S3Store"]=true;
+dojo.provide("dojox.data.S3Store");
+dojo.require("dojox.rpc.ProxiedPath");
+dojo.require("dojox.data.JsonRestStore");
+dojo.declare("dojox.data.S3Store",dojox.data.JsonRestStore,{_processResults:function(_1){
+var _2=_1.getElementsByTagName("Key");
+var _3=[];
+var _4=this;
+for(var i=0;i<_2.length;i++){
+var _5=_2[i];
+var _6={_loadObject:(function(_7,_8){
+return function(_9){
+delete this._loadObject;
+_4.service(_7).addCallback(_9);
+};
+})(_5.firstChild.nodeValue,_6)};
+_3.push(_6);
+}
+return {totalCount:_3.length,items:_3};
+}});
+}
Index: trunk/web/dojo/dojox/data/KeyValueStore.js
===================================================================
--- trunk/web/dojo/dojox/data/KeyValueStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/KeyValueStore.js	(revision 9)
@@ -0,0 +1,225 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.KeyValueStore"]){
+dojo._hasResource["dojox.data.KeyValueStore"]=true;
+dojo.provide("dojox.data.KeyValueStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.declare("dojox.data.KeyValueStore",null,{constructor:function(_1){
+if(_1.url){
+this.url=_1.url;
+}
+this._keyValueString=_1.data;
+this._keyValueVar=_1.dataVar;
+this._keyAttribute="key";
+this._valueAttribute="value";
+this._storeProp="_keyValueStore";
+this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+this._loadInProgress=false;
+this._queuedFetches=[];
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+},url:"",data:"",urlPreventCache:false,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.KeyValueStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3,_4){
+if(!dojo.isString(_4)){
+throw new Error("dojox.data.KeyValueStore: a function was passed an attribute argument that was not an attribute object nor an attribute name string");
+}
+},getValue:function(_5,_6,_7){
+this._assertIsItem(_5);
+this._assertIsAttribute(_5,_6);
+var _8;
+if(_6==this._keyAttribute){
+_8=_5[this._keyAttribute];
+}else{
+_8=_5[this._valueAttribute];
+}
+if(_8===undefined){
+_8=_7;
+}
+return _8;
+},getValues:function(_9,_a){
+var _b=this.getValue(_9,_a);
+return (_b?[_b]:[]);
+},getAttributes:function(_c){
+return [this._keyAttribute,this._valueAttribute,_c[this._keyAttribute]];
+},hasAttribute:function(_d,_e){
+this._assertIsItem(_d);
+this._assertIsAttribute(_d,_e);
+return (_e==this._keyAttribute||_e==this._valueAttribute||_e==_d[this._keyAttribute]);
+},containsValue:function(_f,_10,_11){
+var _12=undefined;
+if(typeof _11==="string"){
+_12=dojo.data.util.filter.patternToRegExp(_11,false);
+}
+return this._containsValue(_f,_10,_11,_12);
+},_containsValue:function(_13,_14,_15,_16){
+var _17=this.getValues(_13,_14);
+for(var i=0;i<_17.length;++i){
+var _18=_17[i];
+if(typeof _18==="string"&&_16){
+return (_18.match(_16)!==null);
+}else{
+if(_15===_18){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_19){
+if(_19&&_19[this._storeProp]===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_1a){
+return this.isItem(_1a);
+},loadItem:function(_1b){
+},getFeatures:function(){
+return this._features;
+},close:function(_1c){
+},getLabel:function(_1d){
+return _1d[this._keyAttribute];
+},getLabelAttributes:function(_1e){
+return [this._keyAttribute];
+},_fetchItems:function(_1f,_20,_21){
+var _22=this;
+var _23=function(_24,_25){
+var _26=null;
+if(_24.query){
+_26=[];
+var _27=_24.queryOptions?_24.queryOptions.ignoreCase:false;
+var _28={};
+for(var key in _24.query){
+var _29=_24.query[key];
+if(typeof _29==="string"){
+_28[key]=dojo.data.util.filter.patternToRegExp(_29,_27);
+}
+}
+for(var i=0;i<_25.length;++i){
+var _2a=true;
+var _2b=_25[i];
+for(var key in _24.query){
+var _29=_24.query[key];
+if(!_22._containsValue(_2b,key,_29,_28[key])){
+_2a=false;
+}
+}
+if(_2a){
+_26.push(_2b);
+}
+}
+}else{
+if(_24.identity){
+_26=[];
+var _2c;
+for(var key in _25){
+_2c=_25[key];
+if(_2c[_22._keyAttribute]==_24.identity){
+_26.push(_2c);
+break;
+}
+}
+}else{
+if(_25.length>0){
+_26=_25.slice(0,_25.length);
+}
+}
+}
+_20(_26,_24);
+};
+if(this._loadFinished){
+_23(_1f,this._arrayOfAllItems);
+}else{
+if(this.url!==""){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_1f,filter:_23});
+}else{
+this._loadInProgress=true;
+var _2d={url:_22.url,handleAs:"json-comment-filtered",preventCache:this.urlPreventCache};
+var _2e=dojo.xhrGet(_2d);
+_2e.addCallback(function(_2f){
+_22._processData(_2f);
+_23(_1f,_22._arrayOfAllItems);
+_22._handleQueuedFetches();
+});
+_2e.addErrback(function(_30){
+_22._loadInProgress=false;
+throw _30;
+});
+}
+}else{
+if(this._keyValueString){
+this._processData(eval(this._keyValueString));
+this._keyValueString=null;
+_23(_1f,this._arrayOfAllItems);
+}else{
+if(this._keyValueVar){
+this._processData(this._keyValueVar);
+this._keyValueVar=null;
+_23(_1f,this._arrayOfAllItems);
+}else{
+throw new Error("dojox.data.KeyValueStore: No source data was provided as either URL, String, or Javascript variable data input.");
+}
+}
+}
+}
+},_handleQueuedFetches:function(){
+if(this._queuedFetches.length>0){
+for(var i=0;i<this._queuedFetches.length;i++){
+var _31=this._queuedFetches[i];
+var _32=_31.filter;
+var _33=_31.args;
+if(_32){
+_32(_33,this._arrayOfAllItems);
+}else{
+this.fetchItemByIdentity(_31.args);
+}
+}
+this._queuedFetches=[];
+}
+},_processData:function(_34){
+this._arrayOfAllItems=[];
+for(var i=0;i<_34.length;i++){
+this._arrayOfAllItems.push(this._createItem(_34[i]));
+}
+this._loadFinished=true;
+this._loadInProgress=false;
+},_createItem:function(_35){
+var _36={};
+_36[this._storeProp]=this;
+for(var i in _35){
+_36[this._keyAttribute]=i;
+_36[this._valueAttribute]=_35[i];
+break;
+}
+return _36;
+},getIdentity:function(_37){
+if(this.isItem(_37)){
+return _37[this._keyAttribute];
+}
+return null;
+},getIdentityAttributes:function(_38){
+return [this._keyAttribute];
+},fetchItemByIdentity:function(_39){
+_39.oldOnItem=_39.onItem;
+_39.onItem=null;
+_39.onComplete=this._finishFetchItemByIdentity;
+this.fetch(_39);
+},_finishFetchItemByIdentity:function(_3a,_3b){
+var _3c=_3b.scope||dojo.global;
+if(_3a.length){
+_3b.oldOnItem.call(_3c,_3a[0]);
+}else{
+_3b.oldOnItem.call(_3c,null);
+}
+}});
+dojo.extend(dojox.data.KeyValueStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/CsvStore.js
===================================================================
--- trunk/web/dojo/dojox/data/CsvStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/CsvStore.js	(revision 9)
@@ -0,0 +1,444 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CsvStore"]){
+dojo._hasResource["dojox.data.CsvStore"]=true;
+dojo.provide("dojox.data.CsvStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.declare("dojox.data.CsvStore",null,{constructor:function(_1){
+this._attributes=[];
+this._attributeIndexes={};
+this._dataArray=[];
+this._arrayOfAllItems=[];
+this._loadFinished=false;
+if(_1.url){
+this.url=_1.url;
+}
+this._csvData=_1.data;
+if(_1.label){
+this.label=_1.label;
+}else{
+if(this.label===""){
+this.label=undefined;
+}
+}
+this._storeProp="_csvStore";
+this._idProp="_csvId";
+this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+this._loadInProgress=false;
+this._queuedFetches=[];
+this.identifier=_1.identifier;
+if(this.identifier===""){
+delete this.identifier;
+}else{
+this._idMap={};
+}
+if("separator" in _1){
+this.separator=_1.separator;
+}
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+},url:"",label:"",identifier:"",separator:",",urlPreventCache:false,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error(this.declaredClass+": a function was passed an item argument that was not an item");
+}
+},_getIndex:function(_3){
+var _4=this.getIdentity(_3);
+if(this.identifier){
+_4=this._idMap[_4];
+}
+return _4;
+},getValue:function(_5,_6,_7){
+this._assertIsItem(_5);
+var _8=_7;
+if(typeof _6==="string"){
+var ai=this._attributeIndexes[_6];
+if(ai!=null){
+var _9=this._dataArray[this._getIndex(_5)];
+_8=_9[ai]||_7;
+}
+}else{
+throw new Error(this.declaredClass+": a function was passed an attribute argument that was not a string");
+}
+return _8;
+},getValues:function(_a,_b){
+var _c=this.getValue(_a,_b);
+return (_c?[_c]:[]);
+},getAttributes:function(_d){
+this._assertIsItem(_d);
+var _e=[];
+var _f=this._dataArray[this._getIndex(_d)];
+for(var i=0;i<_f.length;i++){
+if(_f[i]!==""){
+_e.push(this._attributes[i]);
+}
+}
+return _e;
+},hasAttribute:function(_10,_11){
+this._assertIsItem(_10);
+if(typeof _11==="string"){
+var _12=this._attributeIndexes[_11];
+var _13=this._dataArray[this._getIndex(_10)];
+return (typeof _12!=="undefined"&&_12<_13.length&&_13[_12]!=="");
+}else{
+throw new Error(this.declaredClass+": a function was passed an attribute argument that was not a string");
+}
+},containsValue:function(_14,_15,_16){
+var _17=undefined;
+if(typeof _16==="string"){
+_17=dojo.data.util.filter.patternToRegExp(_16,false);
+}
+return this._containsValue(_14,_15,_16,_17);
+},_containsValue:function(_18,_19,_1a,_1b){
+var _1c=this.getValues(_18,_19);
+for(var i=0;i<_1c.length;++i){
+var _1d=_1c[i];
+if(typeof _1d==="string"&&_1b){
+return (_1d.match(_1b)!==null);
+}else{
+if(_1a===_1d){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_1e){
+if(_1e&&_1e[this._storeProp]===this){
+var _1f=_1e[this._idProp];
+if(this.identifier){
+var _20=this._dataArray[this._idMap[_1f]];
+if(_20){
+return true;
+}
+}else{
+if(_1f>=0&&_1f<this._dataArray.length){
+return true;
+}
+}
+}
+return false;
+},isItemLoaded:function(_21){
+return this.isItem(_21);
+},loadItem:function(_22){
+},getFeatures:function(){
+return this._features;
+},getLabel:function(_23){
+if(this.label&&this.isItem(_23)){
+return this.getValue(_23,this.label);
+}
+return undefined;
+},getLabelAttributes:function(_24){
+if(this.label){
+return [this.label];
+}
+return null;
+},_fetchItems:function(_25,_26,_27){
+var _28=this;
+var _29=function(_2a,_2b){
+var _2c=null;
+if(_2a.query){
+var key,_2d;
+_2c=[];
+var _2e=_2a.queryOptions?_2a.queryOptions.ignoreCase:false;
+var _2f={};
+for(key in _2a.query){
+_2d=_2a.query[key];
+if(typeof _2d==="string"){
+_2f[key]=dojo.data.util.filter.patternToRegExp(_2d,_2e);
+}
+}
+for(var i=0;i<_2b.length;++i){
+var _30=true;
+var _31=_2b[i];
+for(key in _2a.query){
+_2d=_2a.query[key];
+if(!_28._containsValue(_31,key,_2d,_2f[key])){
+_30=false;
+}
+}
+if(_30){
+_2c.push(_31);
+}
+}
+}else{
+_2c=_2b.slice(0,_2b.length);
+}
+_26(_2c,_2a);
+};
+if(this._loadFinished){
+_29(_25,this._arrayOfAllItems);
+}else{
+if(this.url!==""){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_25,filter:_29});
+}else{
+this._loadInProgress=true;
+var _32={url:_28.url,handleAs:"text",preventCache:_28.urlPreventCache};
+var _33=dojo.xhrGet(_32);
+_33.addCallback(function(_34){
+try{
+_28._processData(_34);
+_29(_25,_28._arrayOfAllItems);
+_28._handleQueuedFetches();
+}
+catch(e){
+_27(e,_25);
+}
+});
+_33.addErrback(function(_35){
+_28._loadInProgress=false;
+if(_27){
+_27(_35,_25);
+}else{
+throw _35;
+}
+});
+var _36=null;
+if(_25.abort){
+_36=_25.abort;
+}
+_25.abort=function(){
+var df=_33;
+if(df&&df.fired===-1){
+df.cancel();
+df=null;
+}
+if(_36){
+_36.call(_25);
+}
+};
+}
+}else{
+if(this._csvData){
+try{
+this._processData(this._csvData);
+this._csvData=null;
+_29(_25,this._arrayOfAllItems);
+}
+catch(e){
+_27(e,_25);
+}
+}else{
+var _37=new Error(this.declaredClass+": No CSV source data was provided as either URL or String data input.");
+if(_27){
+_27(_37,_25);
+}else{
+throw _37;
+}
+}
+}
+}
+},close:function(_38){
+},_getArrayOfArraysFromCsvFileContents:function(_39){
+if(dojo.isString(_39)){
+var _3a=new RegExp("^\\s+","g");
+var _3b=new RegExp("\\s+$","g");
+var _3c=new RegExp("\"\"","g");
+var _3d=[];
+var i;
+var _3e=this._splitLines(_39);
+for(i=0;i<_3e.length;++i){
+var _3f=_3e[i];
+if(_3f.length>0){
+var _40=_3f.split(this.separator);
+var j=0;
+while(j<_40.length){
+var _41=_40[j];
+var _42=_41.replace(_3a,"");
+var _43=_42.replace(_3b,"");
+var _44=_43.charAt(0);
+var _45=_43.charAt(_43.length-1);
+var _46=_43.charAt(_43.length-2);
+var _47=_43.charAt(_43.length-3);
+if(_43.length===2&&_43=="\"\""){
+_40[j]="";
+}else{
+if((_44=="\"")&&((_45!="\"")||((_45=="\"")&&(_46=="\"")&&(_47!="\"")))){
+if(j+1===_40.length){
+return;
+}
+var _48=_40[j+1];
+_40[j]=_42+this.separator+_48;
+_40.splice(j+1,1);
+}else{
+if((_44=="\"")&&(_45=="\"")){
+_43=_43.slice(1,(_43.length-1));
+_43=_43.replace(_3c,"\"");
+}
+_40[j]=_43;
+j+=1;
+}
+}
+}
+_3d.push(_40);
+}
+}
+this._attributes=_3d.shift();
+for(i=0;i<this._attributes.length;i++){
+this._attributeIndexes[this._attributes[i]]=i;
+}
+this._dataArray=_3d;
+}
+},_splitLines:function(_49){
+var _4a=[];
+var i;
+var _4b="";
+var _4c=false;
+for(i=0;i<_49.length;i++){
+var c=_49.charAt(i);
+switch(c){
+case "\"":
+_4c=!_4c;
+_4b+=c;
+break;
+case "\r":
+if(_4c){
+_4b+=c;
+}else{
+_4a.push(_4b);
+_4b="";
+if(i<(_49.length-1)&&_49.charAt(i+1)=="\n"){
+i++;
+}
+}
+break;
+case "\n":
+if(_4c){
+_4b+=c;
+}else{
+_4a.push(_4b);
+_4b="";
+}
+break;
+default:
+_4b+=c;
+}
+}
+if(_4b!==""){
+_4a.push(_4b);
+}
+return _4a;
+},_processData:function(_4d){
+this._getArrayOfArraysFromCsvFileContents(_4d);
+this._arrayOfAllItems=[];
+if(this.identifier){
+if(this._attributeIndexes[this.identifier]===undefined){
+throw new Error(this.declaredClass+": Identity specified is not a column header in the data set.");
+}
+}
+for(var i=0;i<this._dataArray.length;i++){
+var id=i;
+if(this.identifier){
+var _4e=this._dataArray[i];
+id=_4e[this._attributeIndexes[this.identifier]];
+this._idMap[id]=i;
+}
+this._arrayOfAllItems.push(this._createItemFromIdentity(id));
+}
+this._loadFinished=true;
+this._loadInProgress=false;
+},_createItemFromIdentity:function(_4f){
+var _50={};
+_50[this._storeProp]=this;
+_50[this._idProp]=_4f;
+return _50;
+},getIdentity:function(_51){
+if(this.isItem(_51)){
+return _51[this._idProp];
+}
+return null;
+},fetchItemByIdentity:function(_52){
+var _53;
+var _54=_52.scope?_52.scope:dojo.global;
+if(!this._loadFinished){
+var _55=this;
+if(this.url!==""){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_52});
+}else{
+this._loadInProgress=true;
+var _56={url:_55.url,handleAs:"text"};
+var _57=dojo.xhrGet(_56);
+_57.addCallback(function(_58){
+try{
+_55._processData(_58);
+var _59=_55._createItemFromIdentity(_52.identity);
+if(!_55.isItem(_59)){
+_59=null;
+}
+if(_52.onItem){
+_52.onItem.call(_54,_59);
+}
+_55._handleQueuedFetches();
+}
+catch(error){
+if(_52.onError){
+_52.onError.call(_54,error);
+}
+}
+});
+_57.addErrback(function(_5a){
+this._loadInProgress=false;
+if(_52.onError){
+_52.onError.call(_54,_5a);
+}
+});
+}
+}else{
+if(this._csvData){
+try{
+_55._processData(_55._csvData);
+_55._csvData=null;
+_53=_55._createItemFromIdentity(_52.identity);
+if(!_55.isItem(_53)){
+_53=null;
+}
+if(_52.onItem){
+_52.onItem.call(_54,_53);
+}
+}
+catch(e){
+if(_52.onError){
+_52.onError.call(_54,e);
+}
+}
+}
+}
+}else{
+_53=this._createItemFromIdentity(_52.identity);
+if(!this.isItem(_53)){
+_53=null;
+}
+if(_52.onItem){
+_52.onItem.call(_54,_53);
+}
+}
+},getIdentityAttributes:function(_5b){
+if(this.identifier){
+return [this.identifier];
+}else{
+return null;
+}
+},_handleQueuedFetches:function(){
+if(this._queuedFetches.length>0){
+for(var i=0;i<this._queuedFetches.length;i++){
+var _5c=this._queuedFetches[i];
+var _5d=_5c.filter;
+var _5e=_5c.args;
+if(_5d){
+_5d(_5e,this._arrayOfAllItems);
+}else{
+this.fetchItemByIdentity(_5c.args);
+}
+}
+this._queuedFetches=[];
+}
+}});
+dojo.extend(dojox.data.CsvStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/CdfStore.js
===================================================================
--- trunk/web/dojo/dojox/data/CdfStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/CdfStore.js	(revision 9)
@@ -0,0 +1,318 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CdfStore"]){
+dojo._hasResource["dojox.data.CdfStore"]=true;
+dojo.provide("dojox.data.CdfStore");
+dojo.require("dojo.data.util.sorter");
+dojox.data.ASYNC_MODE=0;
+dojox.data.SYNC_MODE=1;
+dojo.declare("dojox.data.CdfStore",null,{identity:"jsxid",url:"",xmlStr:"",data:null,label:"",mode:dojox.data.ASYNC_MODE,constructor:function(_1){
+if(_1){
+this.url=_1.url;
+this.xmlStr=_1.xmlStr||_1.str;
+if(_1.data){
+this.xmlStr=this._makeXmlString(_1.data);
+}
+this.identity=_1.identity||this.identity;
+this.label=_1.label||this.label;
+this.mode=_1.mode!==undefined?_1.mode:this.mode;
+}
+this._modifiedItems={};
+this.byId=this.fetchItemByIdentity;
+},getValue:function(_2,_3,_4){
+return _2.getAttribute(_3)||_4;
+},getValues:function(_5,_6){
+var v=this.getValue(_5,_6,[]);
+return dojo.isArray(v)?v:[v];
+},getAttributes:function(_7){
+return _7.getAttributeNames();
+},hasAttribute:function(_8,_9){
+return (this.getValue(_8,_9)!==undefined);
+},hasProperty:function(_a,_b){
+return this.hasAttribute(_a,_b);
+},containsValue:function(_c,_d,_e){
+var _f=this.getValues(_c,_d);
+for(var i=0;i<_f.length;i++){
+if(_f[i]===null){
+continue;
+}
+if((typeof _e==="string")){
+if(_f[i].toString&&_f[i].toString()===_e){
+return true;
+}
+}else{
+if(_f[i]===_e){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_10){
+if(_10.getClass&&_10.getClass().equals(jsx3.xml.Entity.jsxclass)){
+return true;
+}
+return false;
+},isItemLoaded:function(_11){
+return this.isItem(_11);
+},loadItem:function(_12){
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Write":true,"dojo.data.api.Identity":true};
+},getLabel:function(_13){
+if((this.label!=="")&&this.isItem(_13)){
+var _14=this.getValue(_13,this.label);
+if(_14){
+return _14.toString();
+}
+}
+return undefined;
+},getLabelAttributes:function(_15){
+if(this.label!==""){
+return [this.label];
+}
+return null;
+},fetch:function(_16){
+_16=_16||{};
+if(!_16.store){
+_16.store=this;
+}
+if(_16.mode!==undefined){
+this.mode=_16.mode;
+}
+var _17=this;
+var _18=function(_19){
+if(_16.onError){
+var _1a=_16.scope||dojo.global;
+_16.onError.call(_1a,_19,_16);
+}else{
+console.error("cdfStore Error:",_19);
+}
+};
+var _1b=function(_1c,_1d){
+_1d=_1d||_16;
+var _1e=_1d.abort||null;
+var _1f=false;
+var _20=_1d.start?_1d.start:0;
+var _21=(_1d.count&&(_1d.count!==Infinity))?(_20+_1d.count):_1c.length;
+_1d.abort=function(){
+_1f=true;
+if(_1e){
+_1e.call(_1d);
+}
+};
+var _22=_1d.scope||dojo.global;
+if(!_1d.store){
+_1d.store=_17;
+}
+if(_1d.onBegin){
+_1d.onBegin.call(_22,_1c.length,_1d);
+}
+if(_1d.sort){
+_1c.sort(dojo.data.util.sorter.createSortFunction(_1d.sort,_17));
+}
+if(_1d.onItem){
+for(var i=_20;(i<_1c.length)&&(i<_21);++i){
+var _23=_1c[i];
+if(!_1f){
+_1d.onItem.call(_22,_23,_1d);
+}
+}
+}
+if(_1d.onComplete&&!_1f){
+if(!_1d.onItem){
+_1c=_1c.slice(_20,_21);
+if(_1d.byId){
+_1c=_1c[0];
+}
+}
+_1d.onComplete.call(_22,_1c,_1d);
+}else{
+_1c=_1c.slice(_20,_21);
+if(_1d.byId){
+_1c=_1c[0];
+}
+}
+return _1c;
+};
+if(!this.url&&!this.data&&!this.xmlStr){
+_18(new Error("No URL or data specified."));
+return false;
+}
+var _24=_16||"*";
+if(this.mode==dojox.data.SYNC_MODE){
+var res=this._loadCDF();
+if(res instanceof Error){
+if(_16.onError){
+_16.onError.call(_16.scope||dojo.global,res,_16);
+}else{
+console.error("CdfStore Error:",res);
+}
+return res;
+}
+this.cdfDoc=res;
+var _25=this._getItems(this.cdfDoc,_24);
+if(_25&&_25.length>0){
+_25=_1b(_25,_16);
+}else{
+_25=_1b([],_16);
+}
+return _25;
+}else{
+var dfd=this._loadCDF();
+dfd.addCallbacks(dojo.hitch(this,function(_26){
+var _27=this._getItems(this.cdfDoc,_24);
+if(_27&&_27.length>0){
+_1b(_27,_16);
+}else{
+_1b([],_16);
+}
+}),dojo.hitch(this,function(err){
+_18(err,_16);
+}));
+return dfd;
+}
+},_loadCDF:function(){
+var dfd=new dojo.Deferred();
+if(this.cdfDoc){
+if(this.mode==dojox.data.SYNC_MODE){
+return this.cdfDoc;
+}else{
+setTimeout(dojo.hitch(this,function(){
+dfd.callback(this.cdfDoc);
+}),0);
+return dfd;
+}
+}
+this.cdfDoc=jsx3.xml.CDF.Document.newDocument();
+this.cdfDoc.subscribe("response",this,function(evt){
+dfd.callback(this.cdfDoc);
+});
+this.cdfDoc.subscribe("error",this,function(err){
+dfd.errback(err);
+});
+this.cdfDoc.setAsync(!this.mode);
+if(this.url){
+this.cdfDoc.load(this.url);
+}else{
+if(this.xmlStr){
+this.cdfDoc.loadXML(this.xmlStr);
+if(this.cdfDoc.getError().code){
+return new Error(this.cdfDoc.getError().description);
+}
+}
+}
+if(this.mode==dojox.data.SYNC_MODE){
+return this.cdfDoc;
+}else{
+return dfd;
+}
+},_getItems:function(_28,_29){
+var itr=_28.selectNodes(_29.query,false,1);
+var _2a=[];
+while(itr.hasNext()){
+_2a.push(itr.next());
+}
+return _2a;
+},close:function(_2b){
+},newItem:function(_2c,_2d){
+_2c=(_2c||{});
+if(_2c.tagName){
+if(_2c.tagName!="record"){
+console.warn("Only record inserts are supported at this time");
+}
+delete _2c.tagName;
+}
+_2c.jsxid=_2c.jsxid||this.cdfDoc.getKey();
+if(this.isItem(_2d)){
+_2d=this.getIdentity(_2d);
+}
+var _2e=this.cdfDoc.insertRecord(_2c,_2d);
+this._makeDirty(_2e);
+return _2e;
+},deleteItem:function(_2f){
+this.cdfDoc.deleteRecord(this.getIdentity(_2f));
+this._makeDirty(_2f);
+return true;
+},setValue:function(_30,_31,_32){
+this._makeDirty(_30);
+_30.setAttribute(_31,_32);
+return true;
+},setValues:function(_33,_34,_35){
+this._makeDirty(_33);
+console.warn("cdfStore.setValues only partially implemented.");
+return _33.setAttribute(_34,_35);
+},unsetAttribute:function(_36,_37){
+this._makeDirty(_36);
+_36.removeAttribute(_37);
+return true;
+},revert:function(){
+delete this.cdfDoc;
+this._modifiedItems={};
+return true;
+},isDirty:function(_38){
+if(_38){
+return !!this._modifiedItems[this.getIdentity(_38)];
+}else{
+var _39=false;
+for(var nm in this._modifiedItems){
+_39=true;
+break;
+}
+return _39;
+}
+},_makeDirty:function(_3a){
+var id=this.getIdentity(_3a);
+this._modifiedItems[id]=_3a;
+},_makeXmlString:function(obj){
+var _3b=function(obj,_3c){
+var _3d="";
+var nm;
+if(dojo.isArray(obj)){
+for(var i=0;i<obj.length;i++){
+_3d+=_3b(obj[i],_3c);
+}
+}else{
+if(dojo.isObject(obj)){
+_3d+="<"+_3c+" ";
+for(nm in obj){
+if(!dojo.isObject(obj[nm])){
+_3d+=nm+"=\""+obj[nm]+"\" ";
+}
+}
+_3d+=">";
+for(nm in obj){
+if(dojo.isObject(obj[nm])){
+_3d+=_3b(obj[nm],nm);
+}
+}
+_3d+="</"+_3c+">";
+}
+}
+return _3d;
+};
+return _3b(obj,"data");
+},getIdentity:function(_3e){
+return this.getValue(_3e,this.identity);
+},getIdentityAttributes:function(_3f){
+return [this.identity];
+},fetchItemByIdentity:function(_40){
+if(dojo.isString(_40)){
+var id=_40;
+_40={query:"//record[@jsxid='"+id+"']",mode:dojox.data.SYNC_MODE};
+}else{
+if(_40){
+_40.query="//record[@jsxid='"+_40.identity+"']";
+}
+if(!_40.mode){
+_40.mode=this.mode;
+}
+}
+_40.byId=true;
+return this.fetch(_40);
+},byId:function(_41){
+}});
+}
Index: trunk/web/dojo/dojox/data/AtomReadStore.js
===================================================================
--- trunk/web/dojo/dojox/data/AtomReadStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/AtomReadStore.js	(revision 9)
@@ -0,0 +1,340 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AtomReadStore"]){
+dojo._hasResource["dojox.data.AtomReadStore"]=true;
+dojo.provide("dojox.data.AtomReadStore");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.date.stamp");
+dojo.experimental("dojox.data.AtomReadStore");
+dojo.declare("dojox.data.AtomReadStore",null,{constructor:function(_1){
+if(_1){
+this.url=_1.url;
+this.rewriteUrl=_1.rewriteUrl;
+this.label=_1.label||this.label;
+this.sendQuery=(_1.sendQuery||_1.sendquery||this.sendQuery);
+this.unescapeHTML=_1.unescapeHTML;
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+}
+if(!this.url){
+throw new Error("AtomReadStore: a URL must be specified when creating the data store");
+}
+},url:"",label:"title",sendQuery:false,unescapeHTML:false,urlPreventCache:false,getValue:function(_2,_3,_4){
+this._assertIsItem(_2);
+this._assertIsAttribute(_3);
+this._initItem(_2);
+_3=_3.toLowerCase();
+if(!_2._attribs[_3]&&!_2._parsed){
+this._parseItem(_2);
+_2._parsed=true;
+}
+var _5=_2._attribs[_3];
+if(!_5&&_3=="summary"){
+var _6=this.getValue(_2,"content");
+var _7=new RegExp("/(<([^>]+)>)/g","i");
+var _8=_6.text.replace(_7,"");
+_5={text:_8.substring(0,Math.min(400,_8.length)),type:"text"};
+_2._attribs[_3]=_5;
+}
+if(_5&&this.unescapeHTML){
+if((_3=="content"||_3=="summary"||_3=="subtitle")&&!_2["_"+_3+"Escaped"]){
+_5.text=this._unescapeHTML(_5.text);
+_2["_"+_3+"Escaped"]=true;
+}
+}
+return _5?dojo.isArray(_5)?_5[0]:_5:_4;
+},getValues:function(_9,_a){
+this._assertIsItem(_9);
+this._assertIsAttribute(_a);
+this._initItem(_9);
+_a=_a.toLowerCase();
+if(!_9._attribs[_a]){
+this._parseItem(_9);
+}
+var _b=_9._attribs[_a];
+return _b?((_b.length!==undefined&&typeof (_b)!=="string")?_b:[_b]):undefined;
+},getAttributes:function(_c){
+this._assertIsItem(_c);
+if(!_c._attribs){
+this._initItem(_c);
+this._parseItem(_c);
+}
+var _d=[];
+for(var x in _c._attribs){
+_d.push(x);
+}
+return _d;
+},hasAttribute:function(_e,_f){
+return (this.getValue(_e,_f)!==undefined);
+},containsValue:function(_10,_11,_12){
+var _13=this.getValues(_10,_11);
+for(var i=0;i<_13.length;i++){
+if((typeof _12==="string")){
+if(_13[i].toString&&_13[i].toString()===_12){
+return true;
+}
+}else{
+if(_13[i]===_12){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_14){
+if(_14&&_14.element&&_14.store&&_14.store===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_15){
+return this.isItem(_15);
+},loadItem:function(_16){
+},getFeatures:function(){
+var _17={"dojo.data.api.Read":true};
+return _17;
+},getLabel:function(_18){
+if((this.label!=="")&&this.isItem(_18)){
+var _19=this.getValue(_18,this.label);
+if(_19&&_19.text){
+return _19.text;
+}else{
+if(_19){
+return _19.toString();
+}else{
+return undefined;
+}
+}
+}
+return undefined;
+},getLabelAttributes:function(_1a){
+if(this.label!==""){
+return [this.label];
+}
+return null;
+},getFeedValue:function(_1b,_1c){
+var _1d=this.getFeedValues(_1b,_1c);
+if(dojo.isArray(_1d)){
+return _1d[0];
+}
+return _1d;
+},getFeedValues:function(_1e,_1f){
+if(!this.doc){
+return _1f;
+}
+if(!this._feedMetaData){
+this._feedMetaData={element:this.doc.getElementsByTagName("feed")[0],store:this,_attribs:{}};
+this._parseItem(this._feedMetaData);
+}
+return this._feedMetaData._attribs[_1e]||_1f;
+},_initItem:function(_20){
+if(!_20._attribs){
+_20._attribs={};
+}
+},_fetchItems:function(_21,_22,_23){
+var url=this._getFetchUrl(_21);
+if(!url){
+_23(new Error("No URL specified."));
+return;
+}
+var _24=(!this.sendQuery?_21:null);
+var _25=this;
+var _26=function(_27){
+_25.doc=_27;
+var _28=_25._getItems(_27,_24);
+var _29=_21.query;
+if(_29){
+if(_29.id){
+_28=dojo.filter(_28,function(_2a){
+return (_25.getValue(_2a,"id")==_29.id);
+});
+}else{
+if(_29.category){
+_28=dojo.filter(_28,function(_2b){
+var _2c=_25.getValues(_2b,"category");
+if(!_2c){
+return false;
+}
+return dojo.some(_2c,"return item.term=='"+_29.category+"'");
+});
+}
+}
+}
+if(_28&&_28.length>0){
+_22(_28,_21);
+}else{
+_22([],_21);
+}
+};
+if(this.doc){
+_26(this.doc);
+}else{
+var _2d={url:url,handleAs:"xml",preventCache:this.urlPreventCache};
+var _2e=dojo.xhrGet(_2d);
+_2e.addCallback(_26);
+_2e.addErrback(function(_2f){
+_23(_2f,_21);
+});
+}
+},_getFetchUrl:function(_30){
+if(!this.sendQuery){
+return this.url;
+}
+var _31=_30.query;
+if(!_31){
+return this.url;
+}
+if(dojo.isString(_31)){
+return this.url+_31;
+}
+var _32="";
+for(var _33 in _31){
+var _34=_31[_33];
+if(_34){
+if(_32){
+_32+="&";
+}
+_32+=(_33+"="+_34);
+}
+}
+if(!_32){
+return this.url;
+}
+var _35=this.url;
+if(_35.indexOf("?")<0){
+_35+="?";
+}else{
+_35+="&";
+}
+return _35+_32;
+},_getItems:function(_36,_37){
+if(this._items){
+return this._items;
+}
+var _38=[];
+var _39=[];
+if(_36.childNodes.length<1){
+this._items=_38;
+return _38;
+}
+var _3a=dojo.filter(_36.childNodes,"return item.tagName && item.tagName.toLowerCase() == 'feed'");
+var _3b=_37.query;
+if(!_3a||_3a.length!=1){
+return _38;
+}
+_39=dojo.filter(_3a[0].childNodes,"return item.tagName && item.tagName.toLowerCase() == 'entry'");
+if(_37.onBegin){
+_37.onBegin(_39.length,this.sendQuery?_37:{});
+}
+for(var i=0;i<_39.length;i++){
+var _3c=_39[i];
+if(_3c.nodeType!=1){
+continue;
+}
+_38.push(this._getItem(_3c));
+}
+this._items=_38;
+return _38;
+},close:function(_3d){
+},_getItem:function(_3e){
+return {element:_3e,store:this};
+},_parseItem:function(_3f){
+var _40=_3f._attribs;
+var _41=this;
+var _42,_43;
+function _44(_45){
+var txt=_45.textContent||_45.innerHTML||_45.innerXML;
+if(!txt&&_45.childNodes[0]){
+var _46=_45.childNodes[0];
+if(_46&&(_46.nodeType==3||_46.nodeType==4)){
+txt=_45.childNodes[0].nodeValue;
+}
+}
+return txt;
+};
+function _47(_48){
+return {text:_44(_48),type:_48.getAttribute("type")};
+};
+dojo.forEach(_3f.element.childNodes,function(_49){
+var _4a=_49.tagName?_49.tagName.toLowerCase():"";
+switch(_4a){
+case "title":
+_40[_4a]={text:_44(_49),type:_49.getAttribute("type")};
+break;
+case "subtitle":
+case "summary":
+case "content":
+_40[_4a]=_47(_49);
+break;
+case "author":
+var _4b,_4c;
+dojo.forEach(_49.childNodes,function(_4d){
+if(!_4d.tagName){
+return;
+}
+switch(_4d.tagName.toLowerCase()){
+case "name":
+_4b=_4d;
+break;
+case "uri":
+_4c=_4d;
+break;
+}
+});
+var _4e={};
+if(_4b&&_4b.length==1){
+_4e.name=_44(_4b[0]);
+}
+if(_4c&&_4c.length==1){
+_4e.uri=_44(_4c[0]);
+}
+_40[_4a]=_4e;
+break;
+case "id":
+_40[_4a]=_44(_49);
+break;
+case "updated":
+_40[_4a]=dojo.date.stamp.fromISOString(_44(_49));
+break;
+case "published":
+_40[_4a]=dojo.date.stamp.fromISOString(_44(_49));
+break;
+case "category":
+if(!_40[_4a]){
+_40[_4a]=[];
+}
+_40[_4a].push({scheme:_49.getAttribute("scheme"),term:_49.getAttribute("term")});
+break;
+case "link":
+if(!_40[_4a]){
+_40[_4a]=[];
+}
+var _4f={rel:_49.getAttribute("rel"),href:_49.getAttribute("href"),type:_49.getAttribute("type")};
+_40[_4a].push(_4f);
+if(_4f.rel=="alternate"){
+_40["alternate"]=_4f;
+}
+break;
+default:
+break;
+}
+});
+},_unescapeHTML:function(_50){
+_50=_50.replace(/&#8217;/m,"'").replace(/&#8243;/m,"\"").replace(/&#60;/m,">").replace(/&#62;/m,"<").replace(/&#38;/m,"&");
+return _50;
+},_assertIsItem:function(_51){
+if(!this.isItem(_51)){
+throw new Error("dojox.data.AtomReadStore: Invalid item argument.");
+}
+},_assertIsAttribute:function(_52){
+if(typeof _52!=="string"){
+throw new Error("dojox.data.AtomReadStore: Invalid attribute argument.");
+}
+}});
+dojo.extend(dojox.data.AtomReadStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/AndOrReadStore.js
===================================================================
--- trunk/web/dojo/dojox/data/AndOrReadStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/AndOrReadStore.js	(revision 9)
@@ -0,0 +1,672 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AndOrReadStore"]){
+dojo._hasResource["dojox.data.AndOrReadStore"]=true;
+dojo.provide("dojox.data.AndOrReadStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.date.stamp");
+dojo.declare("dojox.data.AndOrReadStore",null,{constructor:function(_1){
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=[];
+this._loadFinished=false;
+this._jsonFileUrl=_1.url;
+this._ccUrl=_1.url;
+this.url=_1.url;
+this._jsonData=_1.data;
+this.data=null;
+this._datatypeMap=_1.typeMap||{};
+if(!this._datatypeMap["Date"]){
+this._datatypeMap["Date"]={type:Date,deserialize:function(_2){
+return dojo.date.stamp.fromISOString(_2);
+}};
+}
+this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+this._itemsByIdentity=null;
+this._storeRefPropName="_S";
+this._itemNumPropName="_0";
+this._rootItemPropName="_RI";
+this._reverseRefMap="_RRM";
+this._loadInProgress=false;
+this._queuedFetches=[];
+if(_1.urlPreventCache!==undefined){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+if(_1.hierarchical!==undefined){
+this.hierarchical=_1.hierarchical?true:false;
+}
+if(_1.clearOnClose){
+this.clearOnClose=true;
+}
+},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,hierarchical:true,_assertIsItem:function(_3){
+if(!this.isItem(_3)){
+throw new Error("dojox.data.AndOrReadStore: Invalid item argument.");
+}
+},_assertIsAttribute:function(_4){
+if(typeof _4!=="string"){
+throw new Error("dojox.data.AndOrReadStore: Invalid attribute argument.");
+}
+},getValue:function(_5,_6,_7){
+var _8=this.getValues(_5,_6);
+return (_8.length>0)?_8[0]:_7;
+},getValues:function(_9,_a){
+this._assertIsItem(_9);
+this._assertIsAttribute(_a);
+var _b=_9[_a]||[];
+return _b.slice(0,_b.length);
+},getAttributes:function(_c){
+this._assertIsItem(_c);
+var _d=[];
+for(var _e in _c){
+if((_e!==this._storeRefPropName)&&(_e!==this._itemNumPropName)&&(_e!==this._rootItemPropName)&&(_e!==this._reverseRefMap)){
+_d.push(_e);
+}
+}
+return _d;
+},hasAttribute:function(_f,_10){
+this._assertIsItem(_f);
+this._assertIsAttribute(_10);
+return (_10 in _f);
+},containsValue:function(_11,_12,_13){
+var _14=undefined;
+if(typeof _13==="string"){
+_14=dojo.data.util.filter.patternToRegExp(_13,false);
+}
+return this._containsValue(_11,_12,_13,_14);
+},_containsValue:function(_15,_16,_17,_18){
+return dojo.some(this.getValues(_15,_16),function(_19){
+if(_19!==null&&!dojo.isObject(_19)&&_18){
+if(_19.toString().match(_18)){
+return true;
+}
+}else{
+if(_17===_19){
+return true;
+}
+}
+});
+},isItem:function(_1a){
+if(_1a&&_1a[this._storeRefPropName]===this){
+if(this._arrayOfAllItems[_1a[this._itemNumPropName]]===_1a){
+return true;
+}
+}
+return false;
+},isItemLoaded:function(_1b){
+return this.isItem(_1b);
+},loadItem:function(_1c){
+this._assertIsItem(_1c.item);
+},getFeatures:function(){
+return this._features;
+},getLabel:function(_1d){
+if(this._labelAttr&&this.isItem(_1d)){
+return this.getValue(_1d,this._labelAttr);
+}
+return undefined;
+},getLabelAttributes:function(_1e){
+if(this._labelAttr){
+return [this._labelAttr];
+}
+return null;
+},_fetchItems:function(_1f,_20,_21){
+var _22=this;
+var _23=function(_24,_25){
+var _26=[];
+if(_24.query){
+var _27=dojo.fromJson(dojo.toJson(_24.query));
+if(typeof _27=="object"){
+var _28=0;
+var p;
+for(p in _27){
+_28++;
+}
+if(_28>1&&_27.complexQuery){
+var cq=_27.complexQuery;
+var _29=false;
+for(p in _27){
+if(p!=="complexQuery"){
+if(!_29){
+cq="( "+cq+" )";
+_29=true;
+}
+var v=_24.query[p];
+if(dojo.isString(v)){
+v="'"+v+"'";
+}
+cq+=" AND "+p+":"+v;
+delete _27[p];
+}
+}
+_27.complexQuery=cq;
+}
+}
+var _2a=_24.queryOptions?_24.queryOptions.ignoreCase:false;
+if(typeof _27!="string"){
+_27=dojo.toJson(_27);
+_27=_27.replace(/\\\\/g,"\\");
+}
+_27=_27.replace(/\\"/g,"\"");
+var _2b=dojo.trim(_27.replace(/{|}/g,""));
+var _2c,i;
+if(_2b.match(/"? *complexQuery *"?:/)){
+_2b=dojo.trim(_2b.replace(/"?\s*complexQuery\s*"?:/,""));
+var _2d=["'","\""];
+var _2e,_2f;
+var _30=false;
+for(i=0;i<_2d.length;i++){
+_2e=_2b.indexOf(_2d[i]);
+_2c=_2b.indexOf(_2d[i],1);
+_2f=_2b.indexOf(":",1);
+if(_2e===0&&_2c!=-1&&_2f<_2c){
+_30=true;
+break;
+}
+}
+if(_30){
+_2b=_2b.replace(/^\"|^\'|\"$|\'$/g,"");
+}
+}
+var _31=_2b;
+var _32=/^,|^NOT |^AND |^OR |^\(|^\)|^!|^&&|^\|\|/i;
+var _33="";
+var op="";
+var val="";
+var pos=-1;
+var err=false;
+var key="";
+var _34="";
+var tok="";
+_2c=-1;
+for(i=0;i<_25.length;++i){
+var _35=true;
+var _36=_25[i];
+if(_36===null){
+_35=false;
+}else{
+_2b=_31;
+_33="";
+while(_2b.length>0&&!err){
+op=_2b.match(_32);
+while(op&&!err){
+_2b=dojo.trim(_2b.replace(op[0],""));
+op=dojo.trim(op[0]).toUpperCase();
+op=op=="NOT"?"!":op=="AND"||op==","?"&&":op=="OR"?"||":op;
+op=" "+op+" ";
+_33+=op;
+op=_2b.match(_32);
+}
+if(_2b.length>0){
+pos=_2b.indexOf(":");
+if(pos==-1){
+err=true;
+break;
+}else{
+key=dojo.trim(_2b.substring(0,pos).replace(/\"|\'/g,""));
+_2b=dojo.trim(_2b.substring(pos+1));
+tok=_2b.match(/^\'|^\"/);
+if(tok){
+tok=tok[0];
+pos=_2b.indexOf(tok);
+_2c=_2b.indexOf(tok,pos+1);
+if(_2c==-1){
+err=true;
+break;
+}
+_34=_2b.substring(pos+1,_2c);
+if(_2c==_2b.length-1){
+_2b="";
+}else{
+_2b=dojo.trim(_2b.substring(_2c+1));
+}
+_33+=_22._containsValue(_36,key,_34,dojo.data.util.filter.patternToRegExp(_34,_2a));
+}else{
+tok=_2b.match(/\s|\)|,/);
+if(tok){
+var _37=new Array(tok.length);
+for(var j=0;j<tok.length;j++){
+_37[j]=_2b.indexOf(tok[j]);
+}
+pos=_37[0];
+if(_37.length>1){
+for(var j=1;j<_37.length;j++){
+pos=Math.min(pos,_37[j]);
+}
+}
+_34=dojo.trim(_2b.substring(0,pos));
+_2b=dojo.trim(_2b.substring(pos));
+}else{
+_34=dojo.trim(_2b);
+_2b="";
+}
+_33+=_22._containsValue(_36,key,_34,dojo.data.util.filter.patternToRegExp(_34,_2a));
+}
+}
+}
+}
+_35=eval(_33);
+}
+if(_35){
+_26.push(_36);
+}
+}
+if(err){
+_26=[];
+}
+_20(_26,_24);
+}else{
+for(var i=0;i<_25.length;++i){
+var _38=_25[i];
+if(_38!==null){
+_26.push(_38);
+}
+}
+_20(_26,_24);
+}
+};
+if(this._loadFinished){
+_23(_1f,this._getItemsArray(_1f.queryOptions));
+}else{
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_1f,filter:_23});
+}else{
+this._loadInProgress=true;
+var _39={url:_22._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache};
+var _3a=dojo.xhrGet(_39);
+_3a.addCallback(function(_3b){
+try{
+_22._getItemsFromLoadedData(_3b);
+_22._loadFinished=true;
+_22._loadInProgress=false;
+_23(_1f,_22._getItemsArray(_1f.queryOptions));
+_22._handleQueuedFetches();
+}
+catch(e){
+_22._loadFinished=true;
+_22._loadInProgress=false;
+_21(e,_1f);
+}
+});
+_3a.addErrback(function(_3c){
+_22._loadInProgress=false;
+_21(_3c,_1f);
+});
+var _3d=null;
+if(_1f.abort){
+_3d=_1f.abort;
+}
+_1f.abort=function(){
+var df=_3a;
+if(df&&df.fired===-1){
+df.cancel();
+df=null;
+}
+if(_3d){
+_3d.call(_1f);
+}
+};
+}
+}else{
+if(this._jsonData){
+try{
+this._loadFinished=true;
+this._getItemsFromLoadedData(this._jsonData);
+this._jsonData=null;
+_23(_1f,this._getItemsArray(_1f.queryOptions));
+}
+catch(e){
+_21(e,_1f);
+}
+}else{
+_21(new Error("dojox.data.AndOrReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1f);
+}
+}
+}
+},_handleQueuedFetches:function(){
+if(this._queuedFetches.length>0){
+for(var i=0;i<this._queuedFetches.length;i++){
+var _3e=this._queuedFetches[i];
+var _3f=_3e.args;
+var _40=_3e.filter;
+if(_40){
+_40(_3f,this._getItemsArray(_3f.queryOptions));
+}else{
+this.fetchItemByIdentity(_3f);
+}
+}
+this._queuedFetches=[];
+}
+},_getItemsArray:function(_41){
+if(_41&&_41.deep){
+return this._arrayOfAllItems;
+}
+return this._arrayOfTopLevelItems;
+},close:function(_42){
+if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){
+if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){
+}
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=[];
+this._loadFinished=false;
+this._itemsByIdentity=null;
+this._loadInProgress=false;
+this._queuedFetches=[];
+}
+},_getItemsFromLoadedData:function(_43){
+var _44=this;
+function _45(_46){
+var _47=((_46!==null)&&(typeof _46==="object")&&(!dojo.isArray(_46))&&(!dojo.isFunction(_46))&&(_46.constructor==Object)&&(typeof _46._reference==="undefined")&&(typeof _46._type==="undefined")&&(typeof _46._value==="undefined")&&_44.hierarchical);
+return _47;
+};
+function _48(_49){
+_44._arrayOfAllItems.push(_49);
+for(var _4a in _49){
+var _4b=_49[_4a];
+if(_4b){
+if(dojo.isArray(_4b)){
+var _4c=_4b;
+for(var k=0;k<_4c.length;++k){
+var _4d=_4c[k];
+if(_45(_4d)){
+_48(_4d);
+}
+}
+}else{
+if(_45(_4b)){
+_48(_4b);
+}
+}
+}
+}
+};
+this._labelAttr=_43.label;
+var i;
+var _4e;
+this._arrayOfAllItems=[];
+this._arrayOfTopLevelItems=_43.items;
+for(i=0;i<this._arrayOfTopLevelItems.length;++i){
+_4e=this._arrayOfTopLevelItems[i];
+_48(_4e);
+_4e[this._rootItemPropName]=true;
+}
+var _4f={};
+var key;
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4e=this._arrayOfAllItems[i];
+for(key in _4e){
+if(key!==this._rootItemPropName){
+var _50=_4e[key];
+if(_50!==null){
+if(!dojo.isArray(_50)){
+_4e[key]=[_50];
+}
+}else{
+_4e[key]=[null];
+}
+}
+_4f[key]=key;
+}
+}
+while(_4f[this._storeRefPropName]){
+this._storeRefPropName+="_";
+}
+while(_4f[this._itemNumPropName]){
+this._itemNumPropName+="_";
+}
+while(_4f[this._reverseRefMap]){
+this._reverseRefMap+="_";
+}
+var _51;
+var _52=_43.identifier;
+if(_52){
+this._itemsByIdentity={};
+this._features["dojo.data.api.Identity"]=_52;
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4e=this._arrayOfAllItems[i];
+_51=_4e[_52];
+var _53=_51[0];
+if(!this._itemsByIdentity[_53]){
+this._itemsByIdentity[_53]=_4e;
+}else{
+if(this._jsonFileUrl){
+throw new Error("dojox.data.AndOrReadStore:  The json data as specified by: ["+this._jsonFileUrl+"] is malformed.  Items within the list have identifier: ["+_52+"].  Value collided: ["+_53+"]");
+}else{
+if(this._jsonData){
+throw new Error("dojox.data.AndOrReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: ["+_52+"].  Value collided: ["+_53+"]");
+}
+}
+}
+}
+}else{
+this._features["dojo.data.api.Identity"]=Number;
+}
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4e=this._arrayOfAllItems[i];
+_4e[this._storeRefPropName]=this;
+_4e[this._itemNumPropName]=i;
+}
+for(i=0;i<this._arrayOfAllItems.length;++i){
+_4e=this._arrayOfAllItems[i];
+for(key in _4e){
+_51=_4e[key];
+for(var j=0;j<_51.length;++j){
+_50=_51[j];
+if(_50!==null&&typeof _50=="object"){
+if(("_type" in _50)&&("_value" in _50)){
+var _54=_50._type;
+var _55=this._datatypeMap[_54];
+if(!_55){
+throw new Error("dojox.data.AndOrReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_54+"'");
+}else{
+if(dojo.isFunction(_55)){
+_51[j]=new _55(_50._value);
+}else{
+if(dojo.isFunction(_55.deserialize)){
+_51[j]=_55.deserialize(_50._value);
+}else{
+throw new Error("dojox.data.AndOrReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");
+}
+}
+}
+}
+if(_50._reference){
+var _56=_50._reference;
+if(!dojo.isObject(_56)){
+_51[j]=this._getItemByIdentity(_56);
+}else{
+for(var k=0;k<this._arrayOfAllItems.length;++k){
+var _57=this._arrayOfAllItems[k];
+var _58=true;
+for(var _59 in _56){
+if(_57[_59]!=_56[_59]){
+_58=false;
+}
+}
+if(_58){
+_51[j]=_57;
+}
+}
+}
+if(this.referenceIntegrity){
+var _5a=_51[j];
+if(this.isItem(_5a)){
+this._addReferenceToMap(_5a,_4e,key);
+}
+}
+}else{
+if(this.isItem(_50)){
+if(this.referenceIntegrity){
+this._addReferenceToMap(_50,_4e,key);
+}
+}
+}
+}
+}
+}
+}
+},_addReferenceToMap:function(_5b,_5c,_5d){
+},getIdentity:function(_5e){
+var _5f=this._features["dojo.data.api.Identity"];
+if(_5f===Number){
+return _5e[this._itemNumPropName];
+}else{
+var _60=_5e[_5f];
+if(_60){
+return _60[0];
+}
+}
+return null;
+},fetchItemByIdentity:function(_61){
+if(!this._loadFinished){
+var _62=this;
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+if(this._loadInProgress){
+this._queuedFetches.push({args:_61});
+}else{
+this._loadInProgress=true;
+var _63={url:_62._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache};
+var _64=dojo.xhrGet(_63);
+_64.addCallback(function(_65){
+var _66=_61.scope?_61.scope:dojo.global;
+try{
+_62._getItemsFromLoadedData(_65);
+_62._loadFinished=true;
+_62._loadInProgress=false;
+var _67=_62._getItemByIdentity(_61.identity);
+if(_61.onItem){
+_61.onItem.call(_66,_67);
+}
+_62._handleQueuedFetches();
+}
+catch(error){
+_62._loadInProgress=false;
+if(_61.onError){
+_61.onError.call(_66,error);
+}
+}
+});
+_64.addErrback(function(_68){
+_62._loadInProgress=false;
+if(_61.onError){
+var _69=_61.scope?_61.scope:dojo.global;
+_61.onError.call(_69,_68);
+}
+});
+}
+}else{
+if(this._jsonData){
+_62._getItemsFromLoadedData(_62._jsonData);
+_62._jsonData=null;
+_62._loadFinished=true;
+var _6a=_62._getItemByIdentity(_61.identity);
+if(_61.onItem){
+var _6b=_61.scope?_61.scope:dojo.global;
+_61.onItem.call(_6b,_6a);
+}
+}
+}
+}else{
+var _6a=this._getItemByIdentity(_61.identity);
+if(_61.onItem){
+var _6b=_61.scope?_61.scope:dojo.global;
+_61.onItem.call(_6b,_6a);
+}
+}
+},_getItemByIdentity:function(_6c){
+var _6d=null;
+if(this._itemsByIdentity){
+_6d=this._itemsByIdentity[_6c];
+}else{
+_6d=this._arrayOfAllItems[_6c];
+}
+if(_6d===undefined){
+_6d=null;
+}
+return _6d;
+},getIdentityAttributes:function(_6e){
+var _6f=this._features["dojo.data.api.Identity"];
+if(_6f===Number){
+return null;
+}else{
+return [_6f];
+}
+},_forceLoad:function(){
+var _70=this;
+if(this._jsonFileUrl!==this._ccUrl){
+dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");
+this._ccUrl=this._jsonFileUrl;
+this.url=this._jsonFileUrl;
+}else{
+if(this.url!==this._ccUrl){
+this._jsonFileUrl=this.url;
+this._ccUrl=this.url;
+}
+}
+if(this.data!=null&&this._jsonData==null){
+this._jsonData=this.data;
+this.data=null;
+}
+if(this._jsonFileUrl){
+var _71={url:_70._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,sync:true};
+var _72=dojo.xhrGet(_71);
+_72.addCallback(function(_73){
+try{
+if(_70._loadInProgress!==true&&!_70._loadFinished){
+_70._getItemsFromLoadedData(_73);
+_70._loadFinished=true;
+}else{
+if(_70._loadInProgress){
+throw new Error("dojox.data.AndOrReadStore:  Unable to perform a synchronous load, an async load is in progress.");
+}
+}
+}
+catch(e){
+throw e;
+}
+});
+_72.addErrback(function(_74){
+throw _74;
+});
+}else{
+if(this._jsonData){
+_70._getItemsFromLoadedData(_70._jsonData);
+_70._jsonData=null;
+_70._loadFinished=true;
+}
+}
+}});
+dojo.extend(dojox.data.AndOrReadStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/GoogleFeedStore.js
===================================================================
--- trunk/web/dojo/dojox/data/GoogleFeedStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/GoogleFeedStore.js	(revision 9)
@@ -0,0 +1,39 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.GoogleFeedStore"]){
+dojo._hasResource["dojox.data.GoogleFeedStore"]=true;
+dojo.provide("dojox.data.GoogleFeedStore");
+dojo.experimental("dojox.data.GoogleFeedStore");
+dojo.require("dojox.data.GoogleSearchStore");
+dojo.declare("dojox.data.GoogleFeedStore",dojox.data.GoogleSearchStore,{_type:"",_googleUrl:"http://ajax.googleapis.com/ajax/services/feed/load",_attributes:["title","link","author","published","content","summary","categories"],_queryAttrs:{"url":"q"},getFeedValue:function(_1,_2){
+var _3=this.getFeedValues(_1,_2);
+if(dojo.isArray(_3)){
+return _3[0];
+}
+return _3;
+},getFeedValues:function(_4,_5){
+if(!this._feedMetaData){
+return _5;
+}
+return this._feedMetaData[_4]||_5;
+},_processItem:function(_6,_7){
+this.inherited(arguments);
+_6["summary"]=_6["contentSnippet"];
+_6["published"]=_6["publishedDate"];
+},_getItems:function(_8){
+if(_8["feed"]){
+this._feedMetaData={title:_8.feed.title,desc:_8.feed.description,url:_8.feed.link,author:_8.feed.author};
+return _8.feed.entries;
+}
+return null;
+},_createContent:function(_9,_a,_b){
+var cb=this.inherited(arguments);
+cb.num=(_b.count||10)+(_b.start||0);
+return cb;
+}});
+}
Index: trunk/web/dojo/dojox/data/ServiceStore.js
===================================================================
--- trunk/web/dojo/dojox/data/ServiceStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/ServiceStore.js	(revision 9)
@@ -0,0 +1,160 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.ServiceStore"]){
+dojo._hasResource["dojox.data.ServiceStore"]=true;
+dojo.provide("dojox.data.ServiceStore");
+dojo.declare("dojox.data.ServiceStore",dojox.data.ClientFilter||null,{service:null,constructor:function(_1){
+this.byId=this.fetchItemByIdentity;
+this._index={};
+if(_1){
+dojo.mixin(this,_1);
+}
+this.idAttribute=(_1&&_1.idAttribute)||(this.schema&&this.schema._idAttr);
+},schema:null,idAttribute:"id",labelAttribute:"label",syncMode:false,estimateCountFactor:1,getSchema:function(){
+return this.schema;
+},loadLazyValues:true,getValue:function(_2,_3,_4){
+var _5=_2[_3];
+return _5||(_3 in _2?_5:_2._loadObject?(dojox.rpc._sync=true)&&arguments.callee.call(this,dojox.data.ServiceStore.prototype.loadItem({item:_2})||{},_3,_4):_4);
+},getValues:function(_6,_7){
+var _8=this.getValue(_6,_7);
+if(_8 instanceof Array){
+return _8;
+}
+if(!this.isItemLoaded(_8)){
+dojox.rpc._sync=true;
+_8=this.loadItem({item:_8});
+}
+return _8 instanceof Array?_8:_8===undefined?[]:[_8];
+},getAttributes:function(_9){
+var _a=[];
+for(var i in _9){
+if(_9.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")){
+_a.push(i);
+}
+}
+return _a;
+},hasAttribute:function(_b,_c){
+return _c in _b;
+},containsValue:function(_d,_e,_f){
+return dojo.indexOf(this.getValues(_d,_e),_f)>-1;
+},isItem:function(_10){
+return (typeof _10=="object")&&_10&&!(_10 instanceof Date);
+},isItemLoaded:function(_11){
+return _11&&!_11._loadObject;
+},loadItem:function(_12){
+var _13;
+if(_12.item._loadObject){
+_12.item._loadObject(function(_14){
+_13=_14;
+delete _13._loadObject;
+var _15=_14 instanceof Error?_12.onError:_12.onItem;
+if(_15){
+_15.call(_12.scope,_14);
+}
+});
+}else{
+if(_12.onItem){
+_12.onItem.call(_12.scope,_12.item);
+}
+}
+return _13;
+},_currentId:0,_processResults:function(_16,_17){
+if(_16&&typeof _16=="object"){
+var id=_16.__id;
+if(!id){
+if(this.idAttribute){
+id=_16[this.idAttribute];
+}else{
+id=this._currentId++;
+}
+if(id!==undefined){
+var _18=this._index[id];
+if(_18){
+for(var j in _18){
+delete _18[j];
+}
+_16=dojo.mixin(_18,_16);
+}
+_16.__id=id;
+this._index[id]=_16;
+}
+}
+for(var i in _16){
+_16[i]=this._processResults(_16[i],_17).items;
+}
+var _19=_16.length;
+}
+return {totalCount:_17.request.count==_19?(_17.request.start||0)+_19*this.estimateCountFactor:_19,items:_16};
+},close:function(_1a){
+return _1a&&_1a.abort&&_1a.abort();
+},fetch:function(_1b){
+_1b=_1b||{};
+if("syncMode" in _1b?_1b.syncMode:this.syncMode){
+dojox.rpc._sync=true;
+}
+var _1c=this;
+var _1d=_1b.scope||_1c;
+var _1e=this.cachingFetch?this.cachingFetch(_1b):this._doQuery(_1b);
+_1e.request=_1b;
+_1e.addCallback(function(_1f){
+if(_1b.clientFetch){
+_1f=_1c.clientSideFetch({query:_1b.clientFetch,sort:_1b.sort,start:_1b.start,count:_1b.count},_1f);
+}
+var _20=_1c._processResults(_1f,_1e);
+_1f=_1b.results=_20.items;
+if(_1b.onBegin){
+_1b.onBegin.call(_1d,_20.totalCount,_1b);
+}
+if(_1b.onItem){
+for(var i=0;i<_1f.length;i++){
+_1b.onItem.call(_1d,_1f[i],_1b);
+}
+}
+if(_1b.onComplete){
+_1b.onComplete.call(_1d,_1b.onItem?null:_1f,_1b);
+}
+return _1f;
+});
+_1e.addErrback(_1b.onError&&function(err){
+return _1b.onError.call(_1d,err,_1b);
+});
+_1b.abort=function(){
+_1e.cancel();
+};
+_1b.store=this;
+return _1b;
+},_doQuery:function(_21){
+var _22=typeof _21.queryStr=="string"?_21.queryStr:_21.query;
+return this.service(_22);
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true,"dojo.data.api.Schema":this.schema};
+},getLabel:function(_23){
+return this.getValue(_23,this.labelAttribute);
+},getLabelAttributes:function(_24){
+return [this.labelAttribute];
+},getIdentity:function(_25){
+return _25.__id;
+},getIdentityAttributes:function(_26){
+return [this.idAttribute];
+},fetchItemByIdentity:function(_27){
+var _28=this._index[(_27._prefix||"")+_27.identity];
+if(_28){
+if(_28._loadObject){
+_27.item=_28;
+return this.loadItem(_27);
+}else{
+if(_27.onItem){
+_27.onItem.call(_27.scope,_28);
+}
+}
+}else{
+return this.fetch({query:_27.identity,onComplete:_27.onItem,onError:_27.onError,scope:_27.scope}).results;
+}
+return _28;
+}});
+}
Index: trunk/web/dojo/dojox/data/XmlStore.js
===================================================================
--- trunk/web/dojo/dojox/data/XmlStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/XmlStore.js	(revision 9)
@@ -0,0 +1,934 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.XmlStore"]){
+dojo._hasResource["dojox.data.XmlStore"]=true;
+dojo.provide("dojox.data.XmlStore");
+dojo.provide("dojox.data.XmlItem");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojox.xml.parser");
+dojo.declare("dojox.data.XmlStore",null,{constructor:function(_1){
+if(_1){
+this.url=_1.url;
+this.rootItem=(_1.rootItem||_1.rootitem||this.rootItem);
+this.keyAttribute=(_1.keyAttribute||_1.keyattribute||this.keyAttribute);
+this._attributeMap=(_1.attributeMap||_1.attributemap);
+this.label=_1.label||this.label;
+this.sendQuery=(_1.sendQuery||_1.sendquery||this.sendQuery);
+if("urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+}
+this._newItems=[];
+this._deletedItems=[];
+this._modifiedItems=[];
+},url:"",rootItem:"",keyAttribute:"",label:"",sendQuery:false,attributeMap:null,urlPreventCache:true,getValue:function(_2,_3,_4){
+var _5=_2.element;
+var i;
+var _6;
+if(_3==="tagName"){
+return _5.nodeName;
+}else{
+if(_3==="childNodes"){
+for(i=0;i<_5.childNodes.length;i++){
+_6=_5.childNodes[i];
+if(_6.nodeType===1){
+return this._getItem(_6);
+}
+}
+return _4;
+}else{
+if(_3==="text()"){
+for(i=0;i<_5.childNodes.length;i++){
+_6=_5.childNodes[i];
+if(_6.nodeType===3||_6.nodeType===4){
+return _6.nodeValue;
+}
+}
+return _4;
+}else{
+_3=this._getAttribute(_5.nodeName,_3);
+if(_3.charAt(0)==="@"){
+var _7=_3.substring(1);
+var _8=_5.getAttribute(_7);
+return (_8)?_8:_4;
+}else{
+for(i=0;i<_5.childNodes.length;i++){
+_6=_5.childNodes[i];
+if(_6.nodeType===1&&_6.nodeName===_3){
+return this._getItem(_6);
+}
+}
+return _4;
+}
+}
+}
+}
+},getValues:function(_9,_a){
+var _b=_9.element;
+var _c=[];
+var i;
+var _d;
+if(_a==="tagName"){
+return [_b.nodeName];
+}else{
+if(_a==="childNodes"){
+for(i=0;i<_b.childNodes.length;i++){
+_d=_b.childNodes[i];
+if(_d.nodeType===1){
+_c.push(this._getItem(_d));
+}
+}
+return _c;
+}else{
+if(_a==="text()"){
+var ec=_b.childNodes;
+for(i=0;i<ec.length;i++){
+_d=ec[i];
+if(_d.nodeType===3||_d.nodeType===4){
+_c.push(_d.nodeValue);
+}
+}
+return _c;
+}else{
+_a=this._getAttribute(_b.nodeName,_a);
+if(_a.charAt(0)==="@"){
+var _e=_a.substring(1);
+var _f=_b.getAttribute(_e);
+return (_f!==undefined)?[_f]:[];
+}else{
+for(i=0;i<_b.childNodes.length;i++){
+_d=_b.childNodes[i];
+if(_d.nodeType===1&&_d.nodeName===_a){
+_c.push(this._getItem(_d));
+}
+}
+return _c;
+}
+}
+}
+}
+},getAttributes:function(_10){
+var _11=_10.element;
+var _12=[];
+var i;
+_12.push("tagName");
+if(_11.childNodes.length>0){
+var _13={};
+var _14=true;
+var _15=false;
+for(i=0;i<_11.childNodes.length;i++){
+var _16=_11.childNodes[i];
+if(_16.nodeType===1){
+var _17=_16.nodeName;
+if(!_13[_17]){
+_12.push(_17);
+_13[_17]=_17;
+}
+_14=true;
+}else{
+if(_16.nodeType===3){
+_15=true;
+}
+}
+}
+if(_14){
+_12.push("childNodes");
+}
+if(_15){
+_12.push("text()");
+}
+}
+for(i=0;i<_11.attributes.length;i++){
+_12.push("@"+_11.attributes[i].nodeName);
+}
+if(this._attributeMap){
+for(var key in this._attributeMap){
+i=key.indexOf(".");
+if(i>0){
+var _18=key.substring(0,i);
+if(_18===_11.nodeName){
+_12.push(key.substring(i+1));
+}
+}else{
+_12.push(key);
+}
+}
+}
+return _12;
+},hasAttribute:function(_19,_1a){
+return (this.getValue(_19,_1a)!==undefined);
+},containsValue:function(_1b,_1c,_1d){
+var _1e=this.getValues(_1b,_1c);
+for(var i=0;i<_1e.length;i++){
+if((typeof _1d==="string")){
+if(_1e[i].toString&&_1e[i].toString()===_1d){
+return true;
+}
+}else{
+if(_1e[i]===_1d){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_1f){
+if(_1f&&_1f.element&&_1f.store&&_1f.store===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_20){
+return this.isItem(_20);
+},loadItem:function(_21){
+},getFeatures:function(){
+var _22={"dojo.data.api.Read":true,"dojo.data.api.Write":true};
+if(!this.sendQuery||this.keyAttribute!==""){
+_22["dojo.data.api.Identity"]=true;
+}
+return _22;
+},getLabel:function(_23){
+if((this.label!=="")&&this.isItem(_23)){
+var _24=this.getValue(_23,this.label);
+if(_24){
+return _24.toString();
+}
+}
+return undefined;
+},getLabelAttributes:function(_25){
+if(this.label!==""){
+return [this.label];
+}
+return null;
+},_fetchItems:function(_26,_27,_28){
+var url=this._getFetchUrl(_26);
+if(!url){
+_28(new Error("No URL specified."));
+return;
+}
+var _29=(!this.sendQuery?_26:{});
+var _2a=this;
+var _2b={url:url,handleAs:"xml",preventCache:_2a.urlPreventCache};
+var _2c=dojo.xhrGet(_2b);
+_2c.addCallback(function(_2d){
+var _2e=_2a._getItems(_2d,_29);
+if(_2e&&_2e.length>0){
+_27(_2e,_26);
+}else{
+_27([],_26);
+}
+});
+_2c.addErrback(function(_2f){
+_28(_2f,_26);
+});
+},_getFetchUrl:function(_30){
+if(!this.sendQuery){
+return this.url;
+}
+var _31=_30.query;
+if(!_31){
+return this.url;
+}
+if(dojo.isString(_31)){
+return this.url+_31;
+}
+var _32="";
+for(var _33 in _31){
+var _34=_31[_33];
+if(_34){
+if(_32){
+_32+="&";
+}
+_32+=(_33+"="+_34);
+}
+}
+if(!_32){
+return this.url;
+}
+var _35=this.url;
+if(_35.indexOf("?")<0){
+_35+="?";
+}else{
+_35+="&";
+}
+return _35+_32;
+},_getItems:function(_36,_37){
+var _38=null;
+if(_37){
+_38=_37.query;
+}
+var _39=[];
+var _3a=null;
+if(this.rootItem!==""){
+_3a=dojo.query(this.rootItem,_36);
+}else{
+_3a=_36.documentElement.childNodes;
+}
+var _3b=_37.queryOptions?_37.queryOptions.deep:false;
+if(_3b){
+_3a=this._flattenNodes(_3a);
+}
+for(var i=0;i<_3a.length;i++){
+var _3c=_3a[i];
+if(_3c.nodeType!=1){
+continue;
+}
+var _3d=this._getItem(_3c);
+if(_38){
+var _3e=_37.queryOptions?_37.queryOptions.ignoreCase:false;
+var _3f;
+var _40=false;
+var j;
+var _41=true;
+var _42={};
+for(var key in _38){
+_3f=_38[key];
+if(typeof _3f==="string"){
+_42[key]=dojo.data.util.filter.patternToRegExp(_3f,_3e);
+}
+}
+for(var _43 in _38){
+_41=false;
+var _44=this.getValues(_3d,_43);
+for(j=0;j<_44.length;j++){
+_3f=_44[j];
+if(_3f){
+var _45=_38[_43];
+if((typeof _3f)==="string"&&(_42[_43])){
+if((_3f.match(_42[_43]))!==null){
+_40=true;
+}else{
+_40=false;
+}
+}else{
+if((typeof _3f)==="object"){
+if(_3f.toString&&(_42[_43])){
+var _46=_3f.toString();
+if((_46.match(_42[_43]))!==null){
+_40=true;
+}else{
+_40=false;
+}
+}else{
+if(_45==="*"||_45===_3f){
+_40=true;
+}else{
+_40=false;
+}
+}
+}
+}
+}
+if(_40){
+break;
+}
+}
+if(!_40){
+break;
+}
+}
+if(_41||_40){
+_39.push(_3d);
+}
+}else{
+_39.push(_3d);
+}
+}
+dojo.forEach(_39,function(_47){
+if(_47.element.parentNode){
+_47.element.parentNode.removeChild(_47.element);
+}
+},this);
+return _39;
+},_flattenNodes:function(_48){
+var _49=[];
+if(_48){
+var i;
+for(i=0;i<_48.length;i++){
+var _4a=_48[i];
+_49.push(_4a);
+if(_4a.childNodes&&_4a.childNodes.length>0){
+_49=_49.concat(this._flattenNodes(_4a.childNodes));
+}
+}
+}
+return _49;
+},close:function(_4b){
+},newItem:function(_4c,_4d){
+_4c=(_4c||{});
+var _4e=_4c.tagName;
+if(!_4e){
+_4e=this.rootItem;
+if(_4e===""){
+return null;
+}
+}
+var _4f=this._getDocument();
+var _50=_4f.createElement(_4e);
+for(var _51 in _4c){
+var _52;
+if(_51==="tagName"){
+continue;
+}else{
+if(_51==="text()"){
+_52=_4f.createTextNode(_4c[_51]);
+_50.appendChild(_52);
+}else{
+_51=this._getAttribute(_4e,_51);
+if(_51.charAt(0)==="@"){
+var _53=_51.substring(1);
+_50.setAttribute(_53,_4c[_51]);
+}else{
+var _54=_4f.createElement(_51);
+_52=_4f.createTextNode(_4c[_51]);
+_54.appendChild(_52);
+_50.appendChild(_54);
+}
+}
+}
+}
+var _55=this._getItem(_50);
+this._newItems.push(_55);
+var _56=null;
+if(_4d&&_4d.parent&&_4d.attribute){
+_56={item:_4d.parent,attribute:_4d.attribute,oldValue:undefined};
+var _57=this.getValues(_4d.parent,_4d.attribute);
+if(_57&&_57.length>0){
+var _58=_57.slice(0,_57.length);
+if(_57.length===1){
+_56.oldValue=_57[0];
+}else{
+_56.oldValue=_57.slice(0,_57.length);
+}
+_58.push(_55);
+this.setValues(_4d.parent,_4d.attribute,_58);
+_56.newValue=this.getValues(_4d.parent,_4d.attribute);
+}else{
+this.setValues(_4d.parent,_4d.attribute,_55);
+_56.newValue=_55;
+}
+}
+return _55;
+},deleteItem:function(_59){
+var _5a=_59.element;
+if(_5a.parentNode){
+this._backupItem(_59);
+_5a.parentNode.removeChild(_5a);
+return true;
+}
+this._forgetItem(_59);
+this._deletedItems.push(_59);
+return true;
+},setValue:function(_5b,_5c,_5d){
+if(_5c==="tagName"){
+return false;
+}
+this._backupItem(_5b);
+var _5e=_5b.element;
+var _5f;
+var _60;
+if(_5c==="childNodes"){
+_5f=_5d.element;
+_5e.appendChild(_5f);
+}else{
+if(_5c==="text()"){
+while(_5e.firstChild){
+_5e.removeChild(_5e.firstChild);
+}
+_60=this._getDocument(_5e).createTextNode(_5d);
+_5e.appendChild(_60);
+}else{
+_5c=this._getAttribute(_5e.nodeName,_5c);
+if(_5c.charAt(0)==="@"){
+var _61=_5c.substring(1);
+_5e.setAttribute(_61,_5d);
+}else{
+for(var i=0;i<_5e.childNodes.length;i++){
+var _62=_5e.childNodes[i];
+if(_62.nodeType===1&&_62.nodeName===_5c){
+_5f=_62;
+break;
+}
+}
+var _63=this._getDocument(_5e);
+if(_5f){
+while(_5f.firstChild){
+_5f.removeChild(_5f.firstChild);
+}
+}else{
+_5f=_63.createElement(_5c);
+_5e.appendChild(_5f);
+}
+_60=_63.createTextNode(_5d);
+_5f.appendChild(_60);
+}
+}
+}
+return true;
+},setValues:function(_64,_65,_66){
+if(_65==="tagName"){
+return false;
+}
+this._backupItem(_64);
+var _67=_64.element;
+var i;
+var _68;
+var _69;
+if(_65==="childNodes"){
+while(_67.firstChild){
+_67.removeChild(_67.firstChild);
+}
+for(i=0;i<_66.length;i++){
+_68=_66[i].element;
+_67.appendChild(_68);
+}
+}else{
+if(_65==="text()"){
+while(_67.firstChild){
+_67.removeChild(_67.firstChild);
+}
+var _6a="";
+for(i=0;i<_66.length;i++){
+_6a+=_66[i];
+}
+_69=this._getDocument(_67).createTextNode(_6a);
+_67.appendChild(_69);
+}else{
+_65=this._getAttribute(_67.nodeName,_65);
+if(_65.charAt(0)==="@"){
+var _6b=_65.substring(1);
+_67.setAttribute(_6b,_66[0]);
+}else{
+for(i=_67.childNodes.length-1;i>=0;i--){
+var _6c=_67.childNodes[i];
+if(_6c.nodeType===1&&_6c.nodeName===_65){
+_67.removeChild(_6c);
+}
+}
+var _6d=this._getDocument(_67);
+for(i=0;i<_66.length;i++){
+_68=_6d.createElement(_65);
+_69=_6d.createTextNode(_66[i]);
+_68.appendChild(_69);
+_67.appendChild(_68);
+}
+}
+}
+}
+return true;
+},unsetAttribute:function(_6e,_6f){
+if(_6f==="tagName"){
+return false;
+}
+this._backupItem(_6e);
+var _70=_6e.element;
+if(_6f==="childNodes"||_6f==="text()"){
+while(_70.firstChild){
+_70.removeChild(_70.firstChild);
+}
+}else{
+_6f=this._getAttribute(_70.nodeName,_6f);
+if(_6f.charAt(0)==="@"){
+var _71=_6f.substring(1);
+_70.removeAttribute(_71);
+}else{
+for(var i=_70.childNodes.length-1;i>=0;i--){
+var _72=_70.childNodes[i];
+if(_72.nodeType===1&&_72.nodeName===_6f){
+_70.removeChild(_72);
+}
+}
+}
+}
+return true;
+},save:function(_73){
+if(!_73){
+_73={};
+}
+var i;
+for(i=0;i<this._modifiedItems.length;i++){
+this._saveItem(this._modifiedItems[i],_73,"PUT");
+}
+for(i=0;i<this._newItems.length;i++){
+var _74=this._newItems[i];
+if(_74.element.parentNode){
+this._newItems.splice(i,1);
+i--;
+continue;
+}
+this._saveItem(this._newItems[i],_73,"POST");
+}
+for(i=0;i<this._deletedItems.length;i++){
+this._saveItem(this._deletedItems[i],_73,"DELETE");
+}
+},revert:function(){
+this._newItems=[];
+this._restoreItems(this._deletedItems);
+this._deletedItems=[];
+this._restoreItems(this._modifiedItems);
+this._modifiedItems=[];
+return true;
+},isDirty:function(_75){
+if(_75){
+var _76=this._getRootElement(_75.element);
+return (this._getItemIndex(this._newItems,_76)>=0||this._getItemIndex(this._deletedItems,_76)>=0||this._getItemIndex(this._modifiedItems,_76)>=0);
+}else{
+return (this._newItems.length>0||this._deletedItems.length>0||this._modifiedItems.length>0);
+}
+},_saveItem:function(_77,_78,_79){
+var url;
+var _7a;
+if(_79==="PUT"){
+url=this._getPutUrl(_77);
+}else{
+if(_79==="DELETE"){
+url=this._getDeleteUrl(_77);
+}else{
+url=this._getPostUrl(_77);
+}
+}
+if(!url){
+if(_78.onError){
+_7a=_78.scope||dojo.global;
+_78.onError.call(_7a,new Error("No URL for saving content: "+this._getPostContent(_77)));
+}
+return;
+}
+var _7b={url:url,method:(_79||"POST"),contentType:"text/xml",handleAs:"xml"};
+var _7c;
+if(_79==="PUT"){
+_7b.putData=this._getPutContent(_77);
+_7c=dojo.rawXhrPut(_7b);
+}else{
+if(_79==="DELETE"){
+_7c=dojo.xhrDelete(_7b);
+}else{
+_7b.postData=this._getPostContent(_77);
+_7c=dojo.rawXhrPost(_7b);
+}
+}
+_7a=(_78.scope||dojo.global);
+var _7d=this;
+_7c.addCallback(function(_7e){
+_7d._forgetItem(_77);
+if(_78.onComplete){
+_78.onComplete.call(_7a);
+}
+});
+_7c.addErrback(function(_7f){
+if(_78.onError){
+_78.onError.call(_7a,_7f);
+}
+});
+},_getPostUrl:function(_80){
+return this.url;
+},_getPutUrl:function(_81){
+return this.url;
+},_getDeleteUrl:function(_82){
+var url=this.url;
+if(_82&&this.keyAttribute!==""){
+var _83=this.getValue(_82,this.keyAttribute);
+if(_83){
+var key=this.keyAttribute.charAt(0)==="@"?this.keyAttribute.substring(1):this.keyAttribute;
+url+=url.indexOf("?")<0?"?":"&";
+url+=key+"="+_83;
+}
+}
+return url;
+},_getPostContent:function(_84){
+var _85=_84.element;
+var _86="<?xml version=\"1.0\"?>";
+return _86+dojox.xml.parser.innerXML(_85);
+},_getPutContent:function(_87){
+var _88=_87.element;
+var _89="<?xml version=\"1.0\"?>";
+return _89+dojox.xml.parser.innerXML(_88);
+},_getAttribute:function(_8a,_8b){
+if(this._attributeMap){
+var key=_8a+"."+_8b;
+var _8c=this._attributeMap[key];
+if(_8c){
+_8b=_8c;
+}else{
+_8c=this._attributeMap[_8b];
+if(_8c){
+_8b=_8c;
+}
+}
+}
+return _8b;
+},_getItem:function(_8d){
+try{
+var q=null;
+if(this.keyAttribute===""){
+q=this._getXPath(_8d);
+}
+return new dojox.data.XmlItem(_8d,this,q);
+}
+catch(e){
+}
+return null;
+},_getItemIndex:function(_8e,_8f){
+for(var i=0;i<_8e.length;i++){
+if(_8e[i].element===_8f){
+return i;
+}
+}
+return -1;
+},_backupItem:function(_90){
+var _91=this._getRootElement(_90.element);
+if(this._getItemIndex(this._newItems,_91)>=0||this._getItemIndex(this._modifiedItems,_91)>=0){
+return;
+}
+if(_91!=_90.element){
+_90=this._getItem(_91);
+}
+_90._backup=_91.cloneNode(true);
+this._modifiedItems.push(_90);
+},_restoreItems:function(_92){
+dojo.forEach(_92,function(_93){
+if(_93._backup){
+_93.element=_93._backup;
+_93._backup=null;
+}
+},this);
+},_forgetItem:function(_94){
+var _95=_94.element;
+var _96=this._getItemIndex(this._newItems,_95);
+if(_96>=0){
+this._newItems.splice(_96,1);
+}
+_96=this._getItemIndex(this._deletedItems,_95);
+if(_96>=0){
+this._deletedItems.splice(_96,1);
+}
+_96=this._getItemIndex(this._modifiedItems,_95);
+if(_96>=0){
+this._modifiedItems.splice(_96,1);
+}
+},_getDocument:function(_97){
+if(_97){
+return _97.ownerDocument;
+}else{
+if(!this._document){
+return dojox.xml.parser.parse();
+}
+}
+return null;
+},_getRootElement:function(_98){
+while(_98.parentNode){
+_98=_98.parentNode;
+}
+return _98;
+},_getXPath:function(_99){
+var _9a=null;
+if(!this.sendQuery){
+var _9b=_99;
+_9a="";
+while(_9b&&_9b!=_99.ownerDocument){
+var pos=0;
+var _9c=_9b;
+var _9d=_9b.nodeName;
+while(_9c){
+_9c=_9c.previousSibling;
+if(_9c&&_9c.nodeName===_9d){
+pos++;
+}
+}
+var _9e="/"+_9d+"["+pos+"]";
+if(_9a){
+_9a=_9e+_9a;
+}else{
+_9a=_9e;
+}
+_9b=_9b.parentNode;
+}
+}
+return _9a;
+},getIdentity:function(_9f){
+if(!this.isItem(_9f)){
+throw new Error("dojox.data.XmlStore: Object supplied to getIdentity is not an item");
+}else{
+var id=null;
+if(this.sendQuery&&this.keyAttribute!==""){
+id=this.getValue(_9f,this.keyAttribute).toString();
+}else{
+if(!this.serverQuery){
+if(this.keyAttribute!==""){
+id=this.getValue(_9f,this.keyAttribute).toString();
+}else{
+id=_9f.q;
+}
+}
+}
+return id;
+}
+},getIdentityAttributes:function(_a0){
+if(!this.isItem(_a0)){
+throw new Error("dojox.data.XmlStore: Object supplied to getIdentity is not an item");
+}else{
+if(this.keyAttribute!==""){
+return [this.keyAttribute];
+}else{
+return null;
+}
+}
+},fetchItemByIdentity:function(_a1){
+var _a2=null;
+var _a3=null;
+var _a4=this;
+var url=null;
+var _a5=null;
+var _a6=null;
+if(!_a4.sendQuery){
+_a2=function(_a7){
+if(_a7){
+if(_a4.keyAttribute!==""){
+var _a8={};
+_a8.query={};
+_a8.query[_a4.keyAttribute]=_a1.identity;
+_a8.queryOptions={deep:true};
+var _a9=_a4._getItems(_a7,_a8);
+_a3=_a1.scope||dojo.global;
+if(_a9.length===1){
+if(_a1.onItem){
+_a1.onItem.call(_a3,_a9[0]);
+}
+}else{
+if(_a9.length===0){
+if(_a1.onItem){
+_a1.onItem.call(_a3,null);
+}
+}else{
+if(_a1.onError){
+_a1.onError.call(_a3,new Error("Items array size for identity lookup greater than 1, invalid keyAttribute."));
+}
+}
+}
+}else{
+var _aa=_a1.identity.split("/");
+var i;
+var _ab=_a7;
+for(i=0;i<_aa.length;i++){
+if(_aa[i]&&_aa[i]!==""){
+var _ac=_aa[i];
+_ac=_ac.substring(0,_ac.length-1);
+var _ad=_ac.split("[");
+var tag=_ad[0];
+var _ae=parseInt(_ad[1],10);
+var pos=0;
+if(_ab){
+var _af=_ab.childNodes;
+if(_af){
+var j;
+var _b0=null;
+for(j=0;j<_af.length;j++){
+var _b1=_af[j];
+if(_b1.nodeName===tag){
+if(pos<_ae){
+pos++;
+}else{
+_b0=_b1;
+break;
+}
+}
+}
+if(_b0){
+_ab=_b0;
+}else{
+_ab=null;
+}
+}else{
+_ab=null;
+}
+}else{
+break;
+}
+}
+}
+var _b2=null;
+if(_ab){
+_b2=_a4._getItem(_ab);
+if(_b2.element.parentNode){
+_b2.element.parentNode.removeChild(_b2.element);
+}
+}
+if(_a1.onItem){
+_a3=_a1.scope||dojo.global;
+_a1.onItem.call(_a3,_b2);
+}
+}
+}
+};
+url=this._getFetchUrl(null);
+_a5={url:url,handleAs:"xml",preventCache:_a4.urlPreventCache};
+_a6=dojo.xhrGet(_a5);
+_a6.addCallback(_a2);
+if(_a1.onError){
+_a6.addErrback(function(_b3){
+var s=_a1.scope||dojo.global;
+_a1.onError.call(s,_b3);
+});
+}
+}else{
+if(_a4.keyAttribute!==""){
+var _b4={query:{}};
+_b4.query[_a4.keyAttribute]=_a1.identity;
+url=this._getFetchUrl(_b4);
+_a2=function(_b5){
+var _b6=null;
+if(_b5){
+var _b7=_a4._getItems(_b5,{});
+if(_b7.length===1){
+_b6=_b7[0];
+}else{
+if(_a1.onError){
+var _b8=_a1.scope||dojo.global;
+_a1.onError.call(_b8,new Error("More than one item was returned from the server for the denoted identity"));
+}
+}
+}
+if(_a1.onItem){
+_b8=_a1.scope||dojo.global;
+_a1.onItem.call(_b8,_b6);
+}
+};
+_a5={url:url,handleAs:"xml",preventCache:_a4.urlPreventCache};
+_a6=dojo.xhrGet(_a5);
+_a6.addCallback(_a2);
+if(_a1.onError){
+_a6.addErrback(function(_b9){
+var s=_a1.scope||dojo.global;
+_a1.onError.call(s,_b9);
+});
+}
+}else{
+if(_a1.onError){
+var s=_a1.scope||dojo.global;
+_a1.onError.call(s,new Error("XmlStore is not told that the server to provides identity support.  No keyAttribute specified."));
+}
+}
+}
+}});
+dojo.declare("dojox.data.XmlItem",null,{constructor:function(_ba,_bb,_bc){
+this.element=_ba;
+this.store=_bb;
+this.q=_bc;
+},toString:function(){
+var str="";
+if(this.element){
+for(var i=0;i<this.element.childNodes.length;i++){
+var _bd=this.element.childNodes[i];
+if(_bd.nodeType===3||_bd.nodeType===4){
+str+=_bd.nodeValue;
+}
+}
+}
+return str;
+}});
+dojo.extend(dojox.data.XmlStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/QueryReadStore.js
===================================================================
--- trunk/web/dojo/dojox/data/QueryReadStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/QueryReadStore.js	(revision 9)
@@ -0,0 +1,251 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.QueryReadStore"]){
+dojo._hasResource["dojox.data.QueryReadStore"]=true;
+dojo.provide("dojox.data.QueryReadStore");
+dojo.require("dojo.string");
+dojo.require("dojo.data.util.sorter");
+dojo.declare("dojox.data.QueryReadStore",null,{url:"",requestMethod:"get",_className:"dojox.data.QueryReadStore",_items:[],_lastServerQuery:null,_numRows:-1,lastRequestHash:null,doClientPaging:false,doClientSorting:false,_itemsByIdentity:null,_identifier:null,_features:{"dojo.data.api.Read":true,"dojo.data.api.Identity":true},_labelAttr:"label",constructor:function(_1){
+dojo.mixin(this,_1);
+},getValue:function(_2,_3,_4){
+this._assertIsItem(_2);
+if(!dojo.isString(_3)){
+throw new Error(this._className+".getValue(): Invalid attribute, string expected!");
+}
+if(!this.hasAttribute(_2,_3)){
+if(_4){
+return _4;
+}
+}
+return _2.i[_3];
+},getValues:function(_5,_6){
+this._assertIsItem(_5);
+var _7=[];
+if(this.hasAttribute(_5,_6)){
+_7.push(_5.i[_6]);
+}
+return _7;
+},getAttributes:function(_8){
+this._assertIsItem(_8);
+var _9=[];
+for(var i in _8.i){
+_9.push(i);
+}
+return _9;
+},hasAttribute:function(_a,_b){
+return this.isItem(_a)&&typeof _a.i[_b]!="undefined";
+},containsValue:function(_c,_d,_e){
+var _f=this.getValues(_c,_d);
+var len=_f.length;
+for(var i=0;i<len;i++){
+if(_f[i]==_e){
+return true;
+}
+}
+return false;
+},isItem:function(_10){
+if(_10){
+return typeof _10.r!="undefined"&&_10.r==this;
+}
+return false;
+},isItemLoaded:function(_11){
+return this.isItem(_11);
+},loadItem:function(_12){
+if(this.isItemLoaded(_12.item)){
+return;
+}
+},fetch:function(_13){
+_13=_13||{};
+if(!_13.store){
+_13.store=this;
+}
+var _14=this;
+var _15=function(_16,_17){
+if(_17.onError){
+var _18=_17.scope||dojo.global;
+_17.onError.call(_18,_16,_17);
+}
+};
+var _19=function(_1a,_1b,_1c){
+var _1d=_1b.abort||null;
+var _1e=false;
+var _1f=_1b.start?_1b.start:0;
+if(_14.doClientPaging==false){
+_1f=0;
+}
+var _20=_1b.count?(_1f+_1b.count):_1a.length;
+_1b.abort=function(){
+_1e=true;
+if(_1d){
+_1d.call(_1b);
+}
+};
+var _21=_1b.scope||dojo.global;
+if(!_1b.store){
+_1b.store=_14;
+}
+if(_1b.onBegin){
+_1b.onBegin.call(_21,_1c,_1b);
+}
+if(_1b.sort&&_14.doClientSorting){
+_1a.sort(dojo.data.util.sorter.createSortFunction(_1b.sort,_14));
+}
+if(_1b.onItem){
+for(var i=_1f;(i<_1a.length)&&(i<_20);++i){
+var _22=_1a[i];
+if(!_1e){
+_1b.onItem.call(_21,_22,_1b);
+}
+}
+}
+if(_1b.onComplete&&!_1e){
+var _23=null;
+if(!_1b.onItem){
+_23=_1a.slice(_1f,_20);
+}
+_1b.onComplete.call(_21,_23,_1b);
+}
+};
+this._fetchItems(_13,_19,_15);
+return _13;
+},getFeatures:function(){
+return this._features;
+},close:function(_24){
+},getLabel:function(_25){
+if(this._labelAttr&&this.isItem(_25)){
+return this.getValue(_25,this._labelAttr);
+}
+return undefined;
+},getLabelAttributes:function(_26){
+if(this._labelAttr){
+return [this._labelAttr];
+}
+return null;
+},_xhrFetchHandler:function(_27,_28,_29,_2a){
+_27=this._filterResponse(_27);
+if(_27.label){
+this._labelAttr=_27.label;
+}
+var _2b=_27.numRows||-1;
+this._items=[];
+dojo.forEach(_27.items,function(e){
+this._items.push({i:e,r:this});
+},this);
+var _2c=_27.identifier;
+this._itemsByIdentity={};
+if(_2c){
+this._identifier=_2c;
+var i;
+for(i=0;i<this._items.length;++i){
+var _2d=this._items[i].i;
+var _2e=_2d[_2c];
+if(!this._itemsByIdentity[_2e]){
+this._itemsByIdentity[_2e]=_2d;
+}else{
+throw new Error(this._className+":  The json data as specified by: ["+this.url+"] is malformed.  Items within the list have identifier: ["+_2c+"].  Value collided: ["+_2e+"]");
+}
+}
+}else{
+this._identifier=Number;
+for(i=0;i<this._items.length;++i){
+this._items[i].n=i;
+}
+}
+_2b=this._numRows=(_2b===-1)?this._items.length:_2b;
+_29(this._items,_28,_2b);
+this._numRows=_2b;
+},_fetchItems:function(_2f,_30,_31){
+var _32=_2f.serverQuery||_2f.query||{};
+if(!this.doClientPaging){
+_32.start=_2f.start||0;
+if(_2f.count){
+_32.count=_2f.count;
+}
+}
+if(!this.doClientSorting&&_2f.sort){
+var _33=[];
+dojo.forEach(_2f.sort,function(_34){
+if(_34&&_34.attribute){
+_33.push((_34.descending?"-":"")+_34.attribute);
+}
+});
+_32.sort=_33.join(",");
+}
+if(this.doClientPaging&&this._lastServerQuery!==null&&dojo.toJson(_32)==dojo.toJson(this._lastServerQuery)){
+this._numRows=(this._numRows===-1)?this._items.length:this._numRows;
+_30(this._items,_2f,this._numRows);
+}else{
+var _35=this.requestMethod.toLowerCase()=="post"?dojo.xhrPost:dojo.xhrGet;
+var _36=_35({url:this.url,handleAs:"json-comment-optional",content:_32});
+_36.addCallback(dojo.hitch(this,function(_37){
+this._xhrFetchHandler(_37,_2f,_30,_31);
+}));
+_36.addErrback(function(_38){
+_31(_38,_2f);
+});
+this.lastRequestHash=new Date().getTime()+"-"+String(Math.random()).substring(2);
+this._lastServerQuery=dojo.mixin({},_32);
+}
+},_filterResponse:function(_39){
+return _39;
+},_assertIsItem:function(_3a){
+if(!this.isItem(_3a)){
+throw new Error(this._className+": Invalid item argument.");
+}
+},_assertIsAttribute:function(_3b){
+if(typeof _3b!=="string"){
+throw new Error(this._className+": Invalid attribute argument ('"+_3b+"').");
+}
+},fetchItemByIdentity:function(_3c){
+if(this._itemsByIdentity){
+var _3d=this._itemsByIdentity[_3c.identity];
+if(!(_3d===undefined)){
+if(_3c.onItem){
+var _3e=_3c.scope?_3c.scope:dojo.global;
+_3c.onItem.call(_3e,{i:_3d,r:this});
+}
+return;
+}
+}
+var _3f=function(_40,_41){
+var _42=_3c.scope?_3c.scope:dojo.global;
+if(_3c.onError){
+_3c.onError.call(_42,_40);
+}
+};
+var _43=function(_44,_45){
+var _46=_3c.scope?_3c.scope:dojo.global;
+try{
+var _47=null;
+if(_44&&_44.length==1){
+_47=_44[0];
+}
+if(_3c.onItem){
+_3c.onItem.call(_46,_47);
+}
+}
+catch(error){
+if(_3c.onError){
+_3c.onError.call(_46,error);
+}
+}
+};
+var _48={serverQuery:{id:_3c.identity}};
+this._fetchItems(_48,_43,_3f);
+},getIdentity:function(_49){
+var _4a=null;
+if(this._identifier===Number){
+_4a=_49.n;
+}else{
+_4a=_49.i[this._identifier];
+}
+return _4a;
+},getIdentityAttributes:function(_4b){
+return [this._identifier];
+}});
+}
Index: trunk/web/dojo/dojox/data/dom.js
===================================================================
--- trunk/web/dojo/dojox/data/dom.js	(revision 0)
+++ trunk/web/dojo/dojox/data/dom.js	(revision 9)
@@ -0,0 +1,42 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.dom"]){
+dojo._hasResource["dojox.data.dom"]=true;
+dojo.provide("dojox.data.dom");
+dojo.require("dojox.xml.parser");
+dojo.deprecated("dojox.data.dom","Use dojox.xml.parser instead.","2.0");
+dojox.data.dom.createDocument=function(_1,_2){
+dojo.deprecated("dojox.data.dom.createDocument()","Use dojox.xml.parser.parse() instead.","2.0");
+try{
+return dojox.xml.parser.parse(_1,_2);
+}
+catch(e){
+return null;
+}
+};
+dojox.data.dom.textContent=function(_3,_4){
+dojo.deprecated("dojox.data.dom.textContent()","Use dojox.xml.parser.textContent() instead.","2.0");
+if(arguments.length>1){
+return dojox.xml.parser.textContent(_3,_4);
+}else{
+return dojox.xml.parser.textContent(_3);
+}
+};
+dojox.data.dom.replaceChildren=function(_5,_6){
+dojo.deprecated("dojox.data.dom.replaceChildren()","Use dojox.xml.parser.replaceChildren() instead.","2.0");
+dojox.xml.parser.replaceChildren(_5,_6);
+};
+dojox.data.dom.removeChildren=function(_7){
+dojo.deprecated("dojox.data.dom.removeChildren()","Use dojox.xml.parser.removeChildren() instead.","2.0");
+return dojox.xml.parser.removeChildren(_7);
+};
+dojox.data.dom.innerXML=function(_8){
+dojo.deprecated("dojox.data.dom.innerXML()","Use dojox.xml.parser.innerXML() instead.","2.0");
+return dojox.xml.parser.innerXML(_8);
+};
+}
Index: trunk/web/dojo/dojox/data/ItemExplorer.js
===================================================================
--- trunk/web/dojo/dojox/data/ItemExplorer.js	(revision 0)
+++ trunk/web/dojo/dojox/data/ItemExplorer.js	(revision 9)
@@ -0,0 +1,461 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.ItemExplorer"]){
+dojo._hasResource["dojox.data.ItemExplorer"]=true;
+dojo.provide("dojox.data.ItemExplorer");
+dojo.require("dijit.Tree");
+dojo.require("dijit.Dialog");
+dojo.require("dijit.Menu");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit.form.Textarea");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form.FilteringSelect");
+(function(){
+var _1=function(_2,_3,_4){
+var _5=_2.getValues(_3,_4);
+if(_5.length<2){
+_5=_2.getValue(_3,_4);
+}
+return _5;
+};
+dojo.declare("dojox.data.ItemExplorer",dijit.Tree,{useSelect:false,refSelectSearchAttr:null,constructor:function(_6){
+dojo.mixin(this,_6);
+var _7=this;
+var _8={};
+var _9=this.rootModelNode={value:_8,id:"root"};
+this._modelNodeIdMap={};
+this._modelNodePropMap={};
+var _a=1;
+this.model={getRoot:function(_b){
+_b(_9);
+},mayHaveChildren:function(_c){
+return _c.value&&typeof _c.value=="object"&&!(_c.value instanceof Date);
+},getChildren:function(_d,_e,_f){
+var _10,_11,_12=_d.value;
+var _13=[];
+if(_12==_8){
+_e([]);
+return;
+}
+var _14=_7.store&&_7.store.isItem(_12,true);
+if(_14&&!_7.store.isItemLoaded(_12)){
+_7.store.loadItem({item:_12,onItem:function(_15){
+_12=_15;
+_16();
+}});
+}else{
+_16();
+}
+function _16(){
+if(_14){
+_10=_7.store.getAttributes(_12);
+_11=_12;
+}else{
+if(_12&&typeof _12=="object"){
+_11=_d.value;
+_10=[];
+for(var i in _12){
+if(_12.hasOwnProperty(i)&&i!="__id"&&i!="__clientId"){
+_10.push(i);
+}
+}
+}
+}
+if(_10){
+for(var key,k=0;key=_10[k++];){
+_13.push({property:key,value:_14?_1(_7.store,_12,key):_12[key],parent:_11});
+}
+_13.push({addNew:true,parent:_11,parentNode:_d});
+}
+_e(_13);
+};
+},getIdentity:function(_17){
+if(!_17.id){
+if(_17.addNew){
+_17.property="--addNew";
+}
+_17.id=_a++;
+if(_7.store){
+if(_7.store.isItem(_17.value)){
+var _18=_7.store.getIdentity(_17.value);
+(_7._modelNodeIdMap[_18]=_7._modelNodeIdMap[_18]||[]).push(_17);
+}
+if(_17.parent){
+_18=_7.store.getIdentity(_17.parent)+"."+_17.property;
+(_7._modelNodePropMap[_18]=_7._modelNodePropMap[_18]||[]).push(_17);
+}
+}
+}
+return _17.id;
+},getLabel:function(_19){
+return _19===_9?"Object Properties":_19.addNew?(_19.parent instanceof Array?"Add new value":"Add new property"):_19.property+": "+(_19.value instanceof Array?"("+_19.value.length+" elements)":_19.value);
+},onChildrenChange:function(_1a){
+},onChange:function(_1b){
+}};
+},postCreate:function(){
+this.inherited(arguments);
+dojo.connect(this,"onClick",function(_1c,_1d){
+this.lastFocused=_1d;
+if(_1c.addNew){
+this._addProperty();
+}else{
+this._editProperty();
+}
+});
+var _1e=new dijit.Menu({targetNodeIds:[this.rootNode.domNode],id:"contextMenu"});
+dojo.connect(_1e,"_openMyself",this,function(e){
+var _1f=dijit.getEnclosingWidget(e.target);
+if(_1f){
+var _20=_1f.item;
+if(this.store.isItem(_20.value,true)&&!_20.parent){
+dojo.forEach(_1e.getChildren(),function(_21){
+_21.attr("disabled",(_21.label!="Add"));
+});
+this.lastFocused=_1f;
+}else{
+if(_20.value&&typeof _20.value=="object"&&!(_20.value instanceof Date)){
+dojo.forEach(_1e.getChildren(),function(_22){
+_22.attr("disabled",(_22.label!="Add")&&(_22.label!="Delete"));
+});
+this.lastFocused=_1f;
+}else{
+if(_20.property&&dojo.indexOf(this.store.getIdentityAttributes(),_20.property)>=0){
+this.focusNode(_1f);
+alert("Cannot modify an Identifier node.");
+}else{
+if(_20.addNew){
+this.focusNode(_1f);
+}else{
+dojo.forEach(_1e.getChildren(),function(_23){
+_23.attr("disabled",(_23.label!="Edit")&&(_23.label!="Delete"));
+});
+this.lastFocused=_1f;
+}
+}
+}
+}
+}
+});
+_1e.addChild(new dijit.MenuItem({label:"Add",onClick:dojo.hitch(this,"_addProperty")}));
+_1e.addChild(new dijit.MenuItem({label:"Edit",onClick:dojo.hitch(this,"_editProperty")}));
+_1e.addChild(new dijit.MenuItem({label:"Delete",onClick:dojo.hitch(this,"_destroyProperty")}));
+_1e.startup();
+},store:null,setStore:function(_24){
+this.store=_24;
+var _25=this;
+if(this._editDialog){
+this._editDialog.destroyRecursive();
+delete this._editDialog;
+}
+dojo.connect(_24,"onSet",function(_26,_27,_28,_29){
+var _2a,i,_2b=_25.store.getIdentity(_26);
+_2a=_25._modelNodeIdMap[_2b];
+if(_2a&&(_28===undefined||_29===undefined||_28 instanceof Array||_29 instanceof Array||typeof _28=="object"||typeof _29=="object")){
+for(i=0;i<_2a.length;i++){
+(function(_2c){
+_25.model.getChildren(_2c,function(_2d){
+_25.model.onChildrenChange(_2c,_2d);
+});
+})(_2a[i]);
+}
+}
+_2a=_25._modelNodePropMap[_2b+"."+_27];
+if(_2a){
+for(i=0;i<_2a.length;i++){
+_2a[i].value=_29;
+_25.model.onChange(_2a[i]);
+}
+}
+});
+this.rootNode.setChildItems([]);
+},setItem:function(_2e){
+(this._modelNodeIdMap={})[this.store.getIdentity(_2e)]=[this.rootModelNode];
+this._modelNodePropMap={};
+this.rootModelNode.value=_2e;
+var _2f=this;
+this.model.getChildren(this.rootModelNode,function(_30){
+_2f.rootNode.setChildItems(_30);
+});
+},refreshItem:function(){
+this.setItem(this.rootModelNode.value);
+},_createEditDialog:function(){
+this._editDialog=new dijit.Dialog({title:"Edit Property",execute:dojo.hitch(this,"_updateItem"),preload:true});
+this._editDialog.placeAt(dojo.body());
+this._editDialog.startup();
+var _31=dojo.doc.createElement("div");
+var _32=dojo.doc.createElement("label");
+dojo.attr(_32,"for","property");
+dojo.style(_32,"fontWeight","bold");
+dojo.attr(_32,"innerHTML","Property:");
+_31.appendChild(_32);
+var _33=new dijit.form.ValidationTextBox({name:"property",value:"",required:true,disabled:true}).placeAt(_31);
+_31.appendChild(dojo.doc.createElement("br"));
+_31.appendChild(dojo.doc.createElement("br"));
+var _34=new dijit.form.RadioButton({name:"itemType",value:"value",onClick:dojo.hitch(this,function(){
+this._enableFields("value");
+})}).placeAt(_31);
+var _35=dojo.doc.createElement("label");
+dojo.attr(_35,"for","value");
+dojo.attr(_35,"innerHTML","Value (JSON):");
+_31.appendChild(_35);
+var _36=dojo.doc.createElement("div");
+dojo.addClass(_36,"value");
+var _37=new dijit.form.Textarea({name:"jsonVal"}).placeAt(_36);
+_31.appendChild(_36);
+var _38=new dijit.form.RadioButton({name:"itemType",value:"reference",onClick:dojo.hitch(this,function(){
+this._enableFields("reference");
+})}).placeAt(_31);
+var _39=dojo.doc.createElement("label");
+dojo.attr(_39,"for","_reference");
+dojo.attr(_39,"innerHTML","Reference (ID):");
+_31.appendChild(_39);
+_31.appendChild(dojo.doc.createElement("br"));
+var _3a=dojo.doc.createElement("div");
+dojo.addClass(_3a,"reference");
+if(this.useSelect){
+var _3b=new dijit.form.FilteringSelect({name:"_reference",store:this.store,searchAttr:this.refSelectSearchAttr||this.store.getIdentityAttributes()[0],required:false,value:null,pageSize:10}).placeAt(_3a);
+}else{
+var _3c=new dijit.form.ValidationTextBox({name:"_reference",value:"",promptMessage:"Enter the ID of the item to reference",isValid:dojo.hitch(this,function(_3d){
+return true;
+})}).placeAt(_3a);
+}
+_31.appendChild(_3a);
+_31.appendChild(dojo.doc.createElement("br"));
+_31.appendChild(dojo.doc.createElement("br"));
+var _3e=document.createElement("div");
+_3e.setAttribute("dir","rtl");
+var _3f=new dijit.form.Button({type:"reset",label:"Cancel"}).placeAt(_3e);
+_3f.onClick=dojo.hitch(this._editDialog,"onCancel");
+var _40=new dijit.form.Button({type:"submit",label:"OK"}).placeAt(_3e);
+_31.appendChild(_3e);
+this._editDialog.attr("content",_31);
+},_enableFields:function(_41){
+switch(_41){
+case "reference":
+dojo.query(".value [widgetId]",this._editDialog.containerNode).forEach(function(_42){
+dijit.getEnclosingWidget(_42).attr("disabled",true);
+});
+dojo.query(".reference [widgetId]",this._editDialog.containerNode).forEach(function(_43){
+dijit.getEnclosingWidget(_43).attr("disabled",false);
+});
+break;
+case "value":
+dojo.query(".value [widgetId]",this._editDialog.containerNode).forEach(function(_44){
+dijit.getEnclosingWidget(_44).attr("disabled",false);
+});
+dojo.query(".reference [widgetId]",this._editDialog.containerNode).forEach(function(_45){
+dijit.getEnclosingWidget(_45).attr("disabled",true);
+});
+break;
+}
+},_updateItem:function(_46){
+var _47,_48,val,_49,_4a=this._editDialog.attr("title")=="Edit Property";
+var _4b=this._editDialog;
+var _4c=this.store;
+function _4d(){
+try{
+var _4e,_4f=[];
+var _50=_46.property;
+if(_4a){
+while(!_4c.isItem(_48.parent,true)){
+_47=_47.getParent();
+_4f.push(_48.property);
+_48=_47.item;
+}
+if(_4f.length==0){
+_4c.setValue(_48.parent,_48.property,val);
+}else{
+_49=_1(_4c,_48.parent,_48.property);
+if(_49 instanceof Array){
+_49=_49.concat();
+}
+_4e=_49;
+while(_4f.length>1){
+_4e=_4e[_4f.pop()];
+}
+_4e[_4f]=val;
+_4c.setValue(_48.parent,_48.property,_49);
+}
+}else{
+if(_4c.isItem(_51,true)){
+if(!_4c.isItemLoaded(_51)){
+_4c.loadItem({item:_51,onItem:function(_52){
+if(_52 instanceof Array){
+_50=_52.length;
+}
+_4c.setValue(_52,_50,val);
+}});
+}else{
+if(_51 instanceof Array){
+_50=_51.length;
+}
+_4c.setValue(_51,_50,val);
+}
+}else{
+if(_48.value instanceof Array){
+_4f.push(_48.value.length);
+}else{
+_4f.push(_46.property);
+}
+while(!_4c.isItem(_48.parent,true)){
+_47=_47.getParent();
+_4f.push(_48.property);
+_48=_47.item;
+}
+_49=_1(_4c,_48.parent,_48.property);
+_4e=_49;
+while(_4f.length>1){
+_4e=_4e[_4f.pop()];
+}
+_4e[_4f]=val;
+_4c.setValue(_48.parent,_48.property,_49);
+}
+}
+}
+catch(e){
+alert(e);
+}
+};
+if(_4b.validate()){
+_47=this.lastFocused;
+_48=_47.item;
+var _51=_48.value;
+if(_48.addNew){
+_51=_47.item.parent;
+_47=_47.getParent();
+_48=_47.item;
+}
+val=null;
+switch(_46.itemType){
+case "reference":
+this.store.fetchItemByIdentity({identity:_46._reference,onItem:function(_53){
+val=_53;
+_4d();
+},onError:function(){
+alert("The id could not be found");
+}});
+break;
+case "value":
+var _54=_46.jsonVal;
+val=dojo.fromJson(_54);
+if(typeof val=="function"){
+val.toString=function(){
+return _54;
+};
+}
+_4d();
+break;
+}
+}else{
+_4b.show();
+}
+},_editProperty:function(){
+var _55=dojo.mixin({},this.lastFocused.item);
+if(!this._editDialog){
+this._createEditDialog();
+}else{
+this._editDialog.reset();
+}
+if(dojo.indexOf(this.store.getIdentityAttributes(),_55.property)>=0){
+alert("Cannot Edit an Identifier!");
+}else{
+this._editDialog.attr("title","Edit Property");
+dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",true);
+if(this.store.isItem(_55.value,true)){
+if(_55.parent){
+_55.itemType="reference";
+this._enableFields(_55.itemType);
+_55._reference=this.store.getIdentity(_55.value);
+this._editDialog.attr("value",_55);
+this._editDialog.show();
+}
+}else{
+if(_55.value&&typeof _55.value=="object"&&!(_55.value instanceof Date)){
+}else{
+_55.itemType="value";
+this._enableFields(_55.itemType);
+_55.jsonVal=typeof _55.value=="function"?_55.value.toString():_55.value instanceof Date?"new Date(\""+_55.value+"\")":dojo.toJson(_55.value);
+this._editDialog.attr("value",_55);
+this._editDialog.show();
+}
+}
+}
+},_destroyProperty:function(){
+var _56=this.lastFocused;
+var _57=_56.item;
+var _58=[];
+while(!this.store.isItem(_57.parent,true)||_57.parent instanceof Array){
+_56=_56.getParent();
+_58.push(_57.property);
+_57=_56.item;
+}
+if(dojo.indexOf(this.store.getIdentityAttributes(),_57.property)>=0){
+alert("Cannot Delete an Identifier!");
+}else{
+try{
+if(_58.length>0){
+var _59,_5a=_1(this.store,_57.parent,_57.property);
+_59=_5a;
+while(_58.length>1){
+_59=_59[_58.pop()];
+}
+if(dojo.isArray(_59)){
+_59.splice(_58,1);
+}else{
+delete _59[_58];
+}
+this.store.setValue(_57.parent,_57.property,_5a);
+}else{
+this.store.unsetAttribute(_57.parent,_57.property);
+}
+}
+catch(e){
+alert(e);
+}
+}
+},_addProperty:function(){
+var _5b=this.lastFocused.item;
+var _5c=_5b.value;
+var _5d=dojo.hitch(this,function(){
+var _5e=null;
+if(!this._editDialog){
+this._createEditDialog();
+}else{
+this._editDialog.reset();
+}
+if(_5c instanceof Array){
+_5e=_5c.length;
+dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",true);
+}else{
+dijit.getEnclosingWidget(dojo.query("input",this._editDialog.containerNode)[0]).attr("disabled",false);
+}
+this._editDialog.attr("title","Add Property");
+this._enableFields("value");
+this._editDialog.attr("value",{itemType:"value",property:_5e});
+this._editDialog.show();
+});
+if(_5b.addNew){
+_5b=this.lastFocused.getParent().item;
+_5c=this.lastFocused.item.parent;
+}
+if(_5b.property&&dojo.indexOf(this.store.getIdentityAttributes(),_5b.property)>=0){
+alert("Cannot add properties to an ID node!");
+}else{
+if(this.store.isItem(_5c,true)&&!this.store.isItemLoaded(_5c)){
+this.store.loadItem({item:_5c,onItem:function(_5f){
+_5c=_5f;
+_5d();
+}});
+}else{
+_5d();
+}
+}
+}});
+})();
+}
Index: trunk/web/dojo/dojox/data/HtmlStore.js
===================================================================
--- trunk/web/dojo/dojox/data/HtmlStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/HtmlStore.js	(revision 9)
@@ -0,0 +1,322 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.HtmlStore"]){
+dojo._hasResource["dojox.data.HtmlStore"]=true;
+dojo.provide("dojox.data.HtmlStore");
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.declare("dojox.data.HtmlStore",null,{constructor:function(_1){
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+if(_1&&"trimWhitespace" in _1){
+this.trimWhitespace=_1.trimWhitespace?true:false;
+}
+if(_1.url){
+if(!_1.dataId){
+throw new Error("dojo.data.HtmlStore: Cannot instantiate using url without an id!");
+}
+this.url=_1.url;
+this.dataId=_1.dataId;
+}else{
+if(_1.dataId){
+this._rootNode=dojo.byId(_1.dataId);
+this.dataId=this._rootNode.id;
+}else{
+this._rootNode=dojo.byId(this.dataId);
+}
+this._indexItems();
+}
+},url:"",dataId:"",trimWhitespace:false,urlPreventCache:false,_indexItems:function(){
+this._getHeadings();
+if(this._rootNode.rows){
+if(this._rootNode.tBodies&&this._rootNode.tBodies.length>0){
+this._rootNode=this._rootNode.tBodies[0];
+}
+var i;
+for(i=0;i<this._rootNode.rows.length;i++){
+this._rootNode.rows[i].store=this;
+this._rootNode.rows[i]._ident=i+1;
+}
+}else{
+var c=1;
+for(i=0;i<this._rootNode.childNodes.length;i++){
+if(this._rootNode.childNodes[i].nodeType===1){
+this._rootNode.childNodes[i].store=this;
+this._rootNode.childNodes[i]._ident=c;
+c++;
+}
+}
+}
+},_getHeadings:function(){
+this._headings=[];
+if(this._rootNode.tHead){
+dojo.forEach(this._rootNode.tHead.rows[0].cells,dojo.hitch(this,function(th){
+var _2=dojox.xml.parser.textContent(th);
+this._headings.push(this.trimWhitespace?dojo.trim(_2):_2);
+}));
+}else{
+this._headings=["name"];
+}
+},_getAllItems:function(){
+var _3=[];
+var i;
+if(this._rootNode.rows){
+for(i=0;i<this._rootNode.rows.length;i++){
+_3.push(this._rootNode.rows[i]);
+}
+}else{
+for(i=0;i<this._rootNode.childNodes.length;i++){
+if(this._rootNode.childNodes[i].nodeType===1){
+_3.push(this._rootNode.childNodes[i]);
+}
+}
+}
+return _3;
+},_assertIsItem:function(_4){
+if(!this.isItem(_4)){
+throw new Error("dojo.data.HtmlStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_5){
+if(typeof _5!=="string"){
+throw new Error("dojo.data.HtmlStore: a function was passed an attribute argument that was not an attribute name string");
+return -1;
+}
+return dojo.indexOf(this._headings,_5);
+},getValue:function(_6,_7,_8){
+var _9=this.getValues(_6,_7);
+return (_9.length>0)?_9[0]:_8;
+},getValues:function(_a,_b){
+this._assertIsItem(_a);
+var _c=this._assertIsAttribute(_b);
+if(_c>-1){
+var _d;
+if(_a.cells){
+_d=dojox.xml.parser.textContent(_a.cells[_c]);
+}else{
+_d=dojox.xml.parser.textContent(_a);
+}
+return [this.trimWhitespace?dojo.trim(_d):_d];
+}
+return [];
+},getAttributes:function(_e){
+this._assertIsItem(_e);
+var _f=[];
+for(var i=0;i<this._headings.length;i++){
+if(this.hasAttribute(_e,this._headings[i])){
+_f.push(this._headings[i]);
+}
+}
+return _f;
+},hasAttribute:function(_10,_11){
+return this.getValues(_10,_11).length>0;
+},containsValue:function(_12,_13,_14){
+var _15=undefined;
+if(typeof _14==="string"){
+_15=dojo.data.util.filter.patternToRegExp(_14,false);
+}
+return this._containsValue(_12,_13,_14,_15);
+},_containsValue:function(_16,_17,_18,_19){
+var _1a=this.getValues(_16,_17);
+for(var i=0;i<_1a.length;++i){
+var _1b=_1a[i];
+if(typeof _1b==="string"&&_19){
+return (_1b.match(_19)!==null);
+}else{
+if(_18===_1b){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_1c){
+if(_1c&&_1c.store&&_1c.store===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_1d){
+return this.isItem(_1d);
+},loadItem:function(_1e){
+this._assertIsItem(_1e.item);
+},_fetchItems:function(_1f,_20,_21){
+if(this._rootNode){
+this._finishFetchItems(_1f,_20,_21);
+}else{
+if(!this.url){
+this._rootNode=dojo.byId(this.dataId);
+}else{
+var _22={url:this.url,handleAs:"text",preventCache:this.urlPreventCache};
+var _23=this;
+var _24=dojo.xhrGet(_22);
+_24.addCallback(function(_25){
+var _26=function(_27,id){
+if(_27.id==id){
+return _27;
+}
+if(_27.childNodes){
+for(var i=0;i<_27.childNodes.length;i++){
+var _28=_26(_27.childNodes[i],id);
+if(_28){
+return _28;
+}
+}
+}
+return null;
+};
+var d=document.createElement("div");
+d.innerHTML=_25;
+_23._rootNode=_26(d,_23.dataId);
+_23._indexItems();
+_23._finishFetchItems(_1f,_20,_21);
+});
+_24.addErrback(function(_29){
+_21(_29,_1f);
+});
+}
+}
+},_finishFetchItems:function(_2a,_2b,_2c){
+var _2d=[];
+var _2e=this._getAllItems();
+if(_2a.query){
+var _2f=_2a.queryOptions?_2a.queryOptions.ignoreCase:false;
+_2d=[];
+var _30={};
+var key;
+var _31;
+for(key in _2a.query){
+_31=_2a.query[key]+"";
+if(typeof _31==="string"){
+_30[key]=dojo.data.util.filter.patternToRegExp(_31,_2f);
+}
+}
+for(var i=0;i<_2e.length;++i){
+var _32=true;
+var _33=_2e[i];
+for(key in _2a.query){
+_31=_2a.query[key]+"";
+if(!this._containsValue(_33,key,_31,_30[key])){
+_32=false;
+}
+}
+if(_32){
+_2d.push(_33);
+}
+}
+_2b(_2d,_2a);
+}else{
+if(_2e.length>0){
+_2d=_2e.slice(0,_2e.length);
+}
+_2b(_2d,_2a);
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},close:function(_34){
+},getLabel:function(_35){
+if(this.isItem(_35)){
+if(_35.cells){
+return "Item #"+this.getIdentity(_35);
+}else{
+return this.getValue(_35,"name");
+}
+}
+return undefined;
+},getLabelAttributes:function(_36){
+if(_36.cells){
+return null;
+}else{
+return ["name"];
+}
+},getIdentity:function(_37){
+this._assertIsItem(_37);
+if(this.hasAttribute(_37,"name")){
+return this.getValue(_37,"name");
+}else{
+return _37._ident;
+}
+},getIdentityAttributes:function(_38){
+return null;
+},fetchItemByIdentity:function(_39){
+var _3a=_39.identity;
+var _3b=this;
+var _3c=null;
+var _3d=null;
+if(!this._rootNode){
+if(!this.url){
+this._rootNode=dojo.byId(this.dataId);
+this._indexItems();
+if(_3b._rootNode.rows){
+_3c=this._rootNode.rows[_3a+1];
+}else{
+for(var i=0;i<_3b._rootNode.childNodes.length;i++){
+if(_3b._rootNode.childNodes[i].nodeType===1&&_3a===dojox.xml.parser.textContent(_3b._rootNode.childNodes[i])){
+_3c=_3b._rootNode.childNodes[i];
+}
+}
+}
+if(_39.onItem){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onItem.call(_3d,_3c);
+}
+}else{
+var _3e={url:this.url,handleAs:"text"};
+var _3f=dojo.xhrGet(_3e);
+_3f.addCallback(function(_40){
+var _41=function(_42,id){
+if(_42.id==id){
+return _42;
+}
+if(_42.childNodes){
+for(var i=0;i<_42.childNodes.length;i++){
+var _43=_41(_42.childNodes[i],id);
+if(_43){
+return _43;
+}
+}
+}
+return null;
+};
+var d=document.createElement("div");
+d.innerHTML=_40;
+_3b._rootNode=_41(d,_3b.dataId);
+_3b._indexItems();
+if(_3b._rootNode.rows&&_3a<=_3b._rootNode.rows.length){
+_3c=_3b._rootNode.rows[_3a-1];
+}else{
+for(var i=0;i<_3b._rootNode.childNodes.length;i++){
+if(_3b._rootNode.childNodes[i].nodeType===1&&_3a===dojox.xml.parser.textContent(_3b._rootNode.childNodes[i])){
+_3c=_3b._rootNode.childNodes[i];
+break;
+}
+}
+}
+if(_39.onItem){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onItem.call(_3d,_3c);
+}
+});
+_3f.addErrback(function(_44){
+if(_39.onError){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onError.call(_3d,_44);
+}
+});
+}
+}else{
+if(this._rootNode.rows[_3a+1]){
+_3c=this._rootNode.rows[_3a+1];
+if(_39.onItem){
+_3d=_39.scope?_39.scope:dojo.global;
+_39.onItem.call(_3d,_3c);
+}
+}
+}
+}});
+dojo.extend(dojox.data.HtmlStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/README
===================================================================
--- trunk/web/dojo/dojox/data/README	(revision 0)
+++ trunk/web/dojo/dojox/data/README	(revision 9)
@@ -0,0 +1,127 @@
+-------------------------------------------------------------------------------
+DojoX Data
+-------------------------------------------------------------------------------
+Version 1.1
+Release date: 03/18/2008
+-------------------------------------------------------------------------------
+Project state: production
+-------------------------------------------------------------------------------
+Project authors
+	Jared Jurkiewicz (jared.jurkiewicz@gmail.com) (FileStore, HtmlStore, XmlStore, FlickrStore, CssRuleStore, CssClassStore, AppStore, others).
+	Shane O'Sullivan (shaneosullivan1@gmail.com) (FlickrRestStore, AtomReadStore, GoogleSeachStore, GoogleFeedStore)
+	Wolfram Kriesing (wolfram@kriesing.de) (QueryReadStore)
+	Dustin Machi (dmachi@dojotolkit.org) (jsonPathStore);
+	Russell Jones (KeyValueStore) (CLA)
+	Benjamin Schell (KeyValueStore, CssRuleStore, CssClassStore, AppStore, OpenSearchStore) (Corporate CLA)
+	Kurt Stutsman (kurt@snaplogic.org) (SnapLogicStore)
+	Kris Zyp (kzyp@dojotoolkit.org) (JsonRestStore, PersevereStore, S3JsonRestStore, CouchDBRestStore)
+	Frank Fortson (frank.fortson@equorum.com) (AndOrReadStore, AndOrWriteStore)
+
+
+-------------------------------------------------------------------------------
+Project description
+
+The DojoX Data project is a container for extensions and extra example stores
+that implement the dojo.data APIs.  It may also contain utility functions for
+working with specific types of data.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX Data has dependencies on core dojo (dojo.data), dojox.xml for XmlStore 
+and dojox.data.dom(deprecated) and the D.O.H. unit test framework
+-------------------------------------------------------------------------------
+Documentation:
+
+See the Dojo API tool (http://dojotoolkit.org/api)
+-------------------------------------------------------------------------------
+Contributions:
+
+For contributions to be committed into the dojox repository, the datastore 
+should have basic unit tests that exercise the API's that the store declares it
+implements.  Documentation and demos are a plus, but unit tests are required
+to be committed into this sub-package.  This is necessary to help keep the 
+provided datastores as stable as possible.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/data/*
+
+Install into the following directory structure:
+/dojox/data/
+
+...which should be at the same level as your Dojo checkout.
+
+/dojox/data/*
+
+Require in the dojox.data stores you wish to use.
+-------------------------------------------------------------------------------
+Additional Notes: 
+	dojox.data.AtomReadStore - Reads Atom XML documents.
+
+	dojox.data.CvsStore - comma-separated (spreadsheet output)
+	datastore implementation 
+	
+	dojox.data.FlickrRestStore - advanced version of: dojox.data.FlickrStore 
+	(Caching + user key support) 
+	
+	dojox.data.FlickrStore - data store driven by Flickr.com public API. 
+	
+	dojox.data.HtmlTableStore - Implementation of an HTML Table reading 
+	datastore
+	
+	dojox.data.HtmlStore - Implementation of an HTML reading datastore.  Can 
+	handle tables, ordered and un-ordered lists, and lists of divs.
+	
+	dojox.data.OpmlStore - Store for reading OMPL formatted data
+	
+	dojox.data.XmlStore - datastore for XML based services or  
+	documents.
+
+	dojox.data.QueryReadStore - datastore to provide serverside URL query
+	matching.  Similar to the 0.4.X ComboBox dataUrl parameter.	         
+
+	dojox.data.jsonPathStore - datastore that takes an arbitrary js object
+	and uses it as the store. Pre-Alpha at the moment.
+
+	dojox.data.KeyValueStore - datastore that mimics a key/value property
+	file format.
+
+	dojox.data.SnapLogicStore - Store to interface to SnapLogic data services.
+
+	dojox.data.JsonRestStore - Store to interface with RESTful HTTP/JSON web services.
+	dojox.data.PersevereStore - Extension of JsonRestStore for Persevere
+	dojox.data.CouchDBRestStore - Extension of JsonRestStore for CouchDB
+	dojox.data.S3JsonRestStore - Extension of JsonRestStore for Amazon S3
+	dojox.data.GoogleSearchStore - Store to interface Google's AJAX search services.  
+		There are many subclasses of this store for particular types of searches:
+		dojox.data.GoogleWebSearchStore
+		dojox.data.GoogleBlogSearchStore
+		dojox.data.GoogleLocalSearchStore
+		dojox.data.GoogleVideoSearchStore
+		dojox.data.GoogleNewsSearchStore
+		dojox.data.GoogleBookSearchStore
+		dojox.data.GoogleImageSearchStore
+
+	dojox.data.AndOrReadStore - Demonstrating a more complex query format allowing AND/OR.  
+	Based directly on dojo.data.ItemFileReadStore.
+
+	dojox.data.AndOrWriteStore - Demonstrating a more complex query format allowing AND/OR.  
+	Based directly on dojo.data.ItemFileWriteStore.
+
+	dojox.data.FileStore - A lazy-loading store designed for searching filesystems with a provided
+	PHP back end.  Implements dojo.data.api.Read and dojo.data.api.Identity
+
+	dojox.data.CssRuleStore - A store that allows searching/querying over Css rules loaded in the page in
+	the browser.
+
+	dojox.data.CssClassStore - A store that allows searching/querying over what classes are defined in the page in
+	the browser.
+
+	dojox.data.AppStore - A store that implements full read, write, and identity APIs for working with ATOM documents.
+	The store uses the full APP protocol.
+        
+	dojox.data.OpenSearchStore - A store that implements OpenSearch provider search capability.
+
Index: trunk/web/dojo/dojox/data/WikipediaStore.js
===================================================================
--- trunk/web/dojo/dojox/data/WikipediaStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/WikipediaStore.js	(revision 9)
@@ -0,0 +1,63 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.WikipediaStore"]){
+dojo._hasResource["dojox.data.WikipediaStore"]=true;
+dojo.provide("dojox.data.WikipediaStore");
+dojo.require("dojo.io.script");
+dojo.require("dojox.rpc.Service");
+dojo.require("dojox.data.ServiceStore");
+dojo.experimental("dojox.data.WikipediaStore");
+dojo.declare("dojox.data.WikipediaStore",dojox.data.ServiceStore,{constructor:function(_1){
+if(_1&&_1.service){
+this.service=_1.service;
+}else{
+var _2=new dojox.rpc.Service(dojo.moduleUrl("dojox.rpc.SMDLibrary","wikipedia.smd"));
+this.service=_2.query;
+}
+this.idAttribute=this.labelAttribute="title";
+},fetch:function(_3){
+var rq=dojo.mixin({},_3.query);
+if(rq&&(!rq.action||rq.action==="parse")){
+rq.action="parse";
+rq.page=rq.title;
+delete rq.title;
+}else{
+if(rq.action==="query"){
+rq.list="search";
+rq.srwhat="text";
+rq.srsearch=rq.text;
+if(_3.start){
+rq.sroffset=_3.start-1;
+}
+if(_3.count){
+rq.srlimit=_3.count>=500?500:_3.count;
+}
+delete rq.text;
+}
+}
+_3.query=rq;
+return this.inherited(arguments);
+},_processResults:function(_4,_5){
+if(_4.parse){
+_4.parse.title=dojo.queryToObject(_5.ioArgs.url.split("?")[1]).page;
+_4=[_4.parse];
+}else{
+if(_4.query&&_4.query.search){
+_4=_4.query.search;
+var _6=this;
+for(var i in _4){
+_4[i]._loadObject=function(_7){
+_6.fetch({query:{action:"parse",title:this.title},onItem:_7});
+delete this._loadObject;
+};
+}
+}
+}
+return this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/data/restListener.js
===================================================================
--- trunk/web/dojo/dojox/data/restListener.js	(revision 0)
+++ trunk/web/dojo/dojox/data/restListener.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.restListener"]){
+dojo._hasResource["dojox.data.restListener"]=true;
+dojo.provide("dojox.data.restListener");
+dojox.data.restListener=function(_1){
+var _2=_1.channel;
+var jr=dojox.rpc.JsonRest;
+var _3=jr.getServiceAndId(_2).service;
+var _4=dojox.json.ref.resolveJson(_1.result,{defaultId:_1.event=="put"&&_2,index:dojox.rpc.Rest._index,idPrefix:_3.servicePath.replace(/[^\/]*$/,""),idAttribute:jr.getIdAttribute(_3),schemas:jr.schemas,loader:jr._loader,assignAbsoluteIds:true});
+var _5=dojox.rpc.Rest._index&&dojox.rpc.Rest._index[_2];
+var _6="on"+_1.event.toLowerCase();
+var _7=_3&&_3._store;
+if(_5){
+if(_5[_6]){
+_5[_6](_4);
+return;
+}
+}
+if(_7){
+switch(_6){
+case "onpost":
+_7.onNew(_4);
+break;
+case "ondelete":
+_7.onDelete(_5);
+break;
+}
+}
+};
+}
Index: trunk/web/dojo/dojox/data/JsonRestStore.js
===================================================================
--- trunk/web/dojo/dojox/data/JsonRestStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/JsonRestStore.js	(revision 9)
@@ -0,0 +1,232 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.JsonRestStore"]){
+dojo._hasResource["dojox.data.JsonRestStore"]=true;
+dojo.provide("dojox.data.JsonRestStore");
+dojo.require("dojox.data.ServiceStore");
+dojo.require("dojox.rpc.JsonRest");
+dojo.declare("dojox.data.JsonRestStore",dojox.data.ServiceStore,{constructor:function(_1){
+dojo.connect(dojox.rpc.Rest._index,"onUpdate",this,function(_2,_3,_4,_5){
+var _6=this.service.servicePath;
+if(!_2.__id){
+}else{
+if(_2.__id.substring(0,_6.length)==_6){
+this.onSet(_2,_3,_4,_5);
+}
+}
+});
+this.idAttribute=this.idAttribute||"id";
+if(typeof _1.target=="string"){
+_1.target=_1.target.match(/\/$/)||this.allowNoTrailingSlash?_1.target:(_1.target+"/");
+if(!this.service){
+this.service=dojox.rpc.JsonRest.services[_1.target]||dojox.rpc.Rest(_1.target,true);
+}
+}
+dojox.rpc.JsonRest.registerService(this.service,_1.target,this.schema);
+this.schema=this.service._schema=this.schema||this.service._schema||{};
+this.service._store=this;
+this.service.idAsRef=this.idAsRef;
+this.schema._idAttr=this.idAttribute;
+var _7=dojox.rpc.JsonRest.getConstructor(this.service);
+var _8=this;
+this._constructor=function(_9){
+_7.call(this,_9);
+_8.onNew(this);
+};
+this._constructor.prototype=_7.prototype;
+this._index=dojox.rpc.Rest._index;
+},loadReferencedSchema:true,idAsRef:false,referenceIntegrity:true,target:"",allowNoTrailingSlash:false,newItem:function(_a,_b){
+_a=new this._constructor(_a);
+if(_b){
+var _c=this.getValue(_b.parent,_b.attribute,[]);
+_c=_c.concat([_a]);
+_a.__parent=_c;
+this.setValue(_b.parent,_b.attribute,_c);
+}
+return _a;
+},deleteItem:function(_d){
+var _e=[];
+var _f=dojox.data._getStoreForItem(_d)||this;
+if(this.referenceIntegrity){
+dojox.rpc.JsonRest._saveNotNeeded=true;
+var _10=dojox.rpc.Rest._index;
+var _11=function(_12){
+var _13;
+_e.push(_12);
+_12.__checked=1;
+for(var i in _12){
+if(i.substring(0,2)!="__"){
+var _14=_12[i];
+if(_14==_d){
+if(_12!=_10){
+if(_12 instanceof Array){
+(_13=_13||[]).push(i);
+}else{
+(dojox.data._getStoreForItem(_12)||_f).unsetAttribute(_12,i);
+}
+}
+}else{
+if((typeof _14=="object")&&_14){
+if(!_14.__checked){
+_11(_14);
+}
+if(typeof _14.__checked=="object"&&_12!=_10){
+(dojox.data._getStoreForItem(_12)||_f).setValue(_12,i,_14.__checked);
+}
+}
+}
+}
+}
+if(_13){
+i=_13.length;
+_12=_12.__checked=_12.concat();
+while(i--){
+_12.splice(_13[i],1);
+}
+return _12;
+}
+return null;
+};
+_11(_10);
+dojox.rpc.JsonRest._saveNotNeeded=false;
+var i=0;
+while(_e[i]){
+delete _e[i++].__checked;
+}
+}
+dojox.rpc.JsonRest.deleteObject(_d);
+_f.onDelete(_d);
+},changing:function(_15,_16){
+dojox.rpc.JsonRest.changing(_15,_16);
+},setValue:function(_17,_18,_19){
+var old=_17[_18];
+var _1a=_17.__id?dojox.data._getStoreForItem(_17):this;
+if(dojox.json.schema&&_1a.schema&&_1a.schema.properties){
+dojox.json.schema.mustBeValid(dojox.json.schema.checkPropertyChange(_19,_1a.schema.properties[_18]));
+}
+if(_18==_1a.idAttribute){
+throw new Error("Can not change the identity attribute for an item");
+}
+_1a.changing(_17);
+_17[_18]=_19;
+if(_19&&!_19.__parent){
+_19.__parent=_17;
+}
+_1a.onSet(_17,_18,old,_19);
+},setValues:function(_1b,_1c,_1d){
+if(!dojo.isArray(_1d)){
+throw new Error("setValues expects to be passed an Array object as its value");
+}
+this.setValue(_1b,_1c,_1d);
+},unsetAttribute:function(_1e,_1f){
+this.changing(_1e);
+var old=_1e[_1f];
+delete _1e[_1f];
+this.onSet(_1e,_1f,old,undefined);
+},save:function(_20){
+if(!(_20&&_20.global)){
+(_20=_20||{}).service=this.service;
+}
+if("syncMode" in _20?_20.syncMode:this.syncMode){
+dojox.rpc._sync=true;
+}
+var _21=dojox.rpc.JsonRest.commit(_20);
+this.serverVersion=this._updates&&this._updates.length;
+return _21;
+},revert:function(_22){
+dojox.rpc.JsonRest.revert(_22&&_22.global&&this.service);
+},isDirty:function(_23){
+return dojox.rpc.JsonRest.isDirty(_23);
+},isItem:function(_24,_25){
+return _24&&_24.__id&&(_25||this.service==dojox.rpc.JsonRest.getServiceAndId(_24.__id).service);
+},_doQuery:function(_26){
+var _27=typeof _26.queryStr=="string"?_26.queryStr:_26.query;
+var _28=dojox.rpc.JsonRest.query(this.service,_27,_26);
+var _29=this;
+if(this.loadReferencedSchema){
+_28.addCallback(function(_2a){
+var _2b=_28.ioArgs&&_28.ioArgs.xhr&&_28.ioArgs.xhr.getResponseHeader("Content-Type");
+var _2c=_2b&&_2b.match(/definedby\s*=\s*([^;]*)/);
+if(_2b&&!_2c){
+_2c=_28.ioArgs.xhr.getResponseHeader("Link");
+_2c=_2c&&_2c.match(/<([^>]*)>;\s*rel="?definedby"?/);
+}
+_2c=_2c&&_2c[1];
+if(_2c){
+var _2d=dojox.rpc.JsonRest.getServiceAndId((_29.target+_2c).replace(/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/,"$2$3"));
+var _2e=dojox.rpc.JsonRest.byId(_2d.service,_2d.id);
+_2e.addCallbacks(function(_2f){
+dojo.mixin(_29.schema,_2f);
+return _2a;
+},function(_30){
+console.error(_30);
+return _2a;
+});
+return _2e;
+}
+return undefined;
+});
+}
+return _28;
+},_processResults:function(_31,_32){
+var _33=_31.length;
+return {totalCount:_32.fullLength||(_32.request.count==_33?(_32.request.start||0)+_33*2:_33),items:_31};
+},getConstructor:function(){
+return this._constructor;
+},getIdentity:function(_34){
+var id=_34.__clientId||_34.__id;
+if(!id){
+return id;
+}
+var _35=this.service.servicePath.replace(/[^\/]*$/,"");
+return id.substring(0,_35.length)!=_35?id:id.substring(_35.length);
+},fetchItemByIdentity:function(_36){
+var id=_36.identity;
+var _37=this;
+if(id.toString().match(/^(\w*:)?\//)){
+var _38=dojox.rpc.JsonRest.getServiceAndId(id);
+_37=_38.service._store;
+_36.identity=_38.id;
+}
+_36._prefix=_37.service.servicePath.replace(/[^\/]*$/,"");
+return _37.inherited(arguments);
+},onSet:function(){
+},onNew:function(){
+},onDelete:function(){
+},getFeatures:function(){
+var _39=this.inherited(arguments);
+_39["dojo.data.api.Write"]=true;
+_39["dojo.data.api.Notification"]=true;
+return _39;
+},getParent:function(_3a){
+return _3a&&_3a.__parent;
+}});
+dojox.data.JsonRestStore.getStore=function(_3b,_3c){
+if(typeof _3b.target=="string"){
+_3b.target=_3b.target.match(/\/$/)||_3b.allowNoTrailingSlash?_3b.target:(_3b.target+"/");
+var _3d=(dojox.rpc.JsonRest.services[_3b.target]||{})._store;
+if(_3d){
+return _3d;
+}
+}
+return new (_3c||dojox.data.JsonRestStore)(_3b);
+};
+dojox.data._getStoreForItem=function(_3e){
+if(_3e.__id){
+var _3f=dojox.rpc.JsonRest.getServiceAndId(_3e.__id);
+if(_3f&&_3f.service._store){
+return _3f.service._store;
+}else{
+var _40=_3e.__id.toString().match(/.*\//)[0];
+return new dojox.data.JsonRestStore({target:_40});
+}
+}
+return null;
+};
+dojox.json.ref._useRefs=true;
+}
Index: trunk/web/dojo/dojox/data/ClientFilter.js
===================================================================
--- trunk/web/dojo/dojox/data/ClientFilter.js	(revision 0)
+++ trunk/web/dojo/dojox/data/ClientFilter.js	(revision 9)
@@ -0,0 +1,187 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.ClientFilter"]){
+dojo._hasResource["dojox.data.ClientFilter"]=true;
+dojo.provide("dojox.data.ClientFilter");
+dojo.require("dojo.data.util.filter");
+(function(){
+var cf;
+var _1=function(_2,_3,_4){
+return function(_5){
+_2._updates.push({create:_3&&_5,remove:_4&&_5});
+cf.onUpdate();
+};
+};
+cf=dojo.declare("dojox.data.ClientFilter",null,{cacheByDefault:false,constructor:function(){
+this.onSet=_1(this,true,true);
+this.onNew=_1(this,true,false);
+this.onDelete=_1(this,false,true);
+this._updates=[];
+this._fetchCache=[];
+},clearCache:function(){
+this._fetchCache=[];
+},updateResultSet:function(_6,_7){
+if(this.isUpdateable(_7)){
+for(var i=_7._version||0;i<this._updates.length;i++){
+var _8=this._updates[i].create;
+var _9=this._updates[i].remove;
+if(_9){
+for(var j=0;j<_6.length;j++){
+if(this.getIdentity(_6[j])==this.getIdentity(_9)){
+_6.splice(j--,1);
+var _a=true;
+}
+}
+}
+if(_8&&this.matchesQuery(_8,_7)&&dojo.indexOf(_6,_8)==-1){
+_6.push(_8);
+_a=true;
+}
+}
+if(_7.sort&&_a){
+_6.sort(this.makeComparator(_7.sort.concat()));
+}
+_6._fullLength=_6.length;
+if(_7.count&&_a&&_7.count!==Infinity){
+_6.splice(_7.count,_6.length);
+}
+_7._version=this._updates.length;
+return _a?2:1;
+}
+return 0;
+},querySuperSet:function(_b,_c){
+if(_b.query==_c.query){
+return {};
+}
+if(!(_c.query instanceof Object&&(!_b.query||typeof _b.query=="object"))){
+return false;
+}
+var _d=dojo.mixin({},_c.query);
+for(var i in _b.query){
+if(_d[i]==_b.query[i]){
+delete _d[i];
+}else{
+if(!(typeof _b.query[i]=="string"&&dojo.data.util.filter.patternToRegExp(_b.query[i]).test(_d[i]))){
+return false;
+}
+}
+}
+return _d;
+},serverVersion:0,cachingFetch:function(_e){
+var _f=this;
+for(var i=0;i<this._fetchCache.length;i++){
+var _10=this._fetchCache[i];
+var _11=this.querySuperSet(_10,_e);
+if(_11!==false){
+var _12=_10._loading;
+if(!_12){
+_12=new dojo.Deferred();
+_12.callback(_10.cacheResults);
+}
+_12.addCallback(function(_13){
+_13=_f.clientSideFetch(dojo.mixin(dojo.mixin({},_e),{query:_11}),_13);
+_12.fullLength=_13._fullLength;
+return _13;
+});
+_e._version=_10._version;
+break;
+}
+}
+if(!_12){
+var _14=dojo.mixin({},_e);
+var _15=(_e.queryOptions||0).cache;
+var _16=this._fetchCache;
+if(_15===undefined?this.cacheByDefault:_15){
+if(_e.start||_e.count){
+delete _14.start;
+delete _14.count;
+_e.clientQuery=dojo.mixin(_e.clientQuery||{},{start:_e.start,count:_e.count});
+}
+_e=_14;
+_16.push(_e);
+}
+_12=_e._loading=this._doQuery(_e);
+_12.addErrback(function(){
+_16.splice(dojo.indexOf(_16,_e),1);
+});
+}
+var _17=this.serverVersion;
+_12.addCallback(function(_18){
+delete _e._loading;
+if(_18){
+_e._version=typeof _e._version=="number"?_e._version:_17;
+_f.updateResultSet(_18,_e);
+_e.cacheResults=_18;
+if(!_e.count||_18.length<_e.count){
+_12.fullLength=((_e.start)?_e.start:0)+_18.length;
+}
+}
+return _18;
+});
+return _12;
+},isUpdateable:function(_19){
+return typeof _19.query=="object";
+},clientSideFetch:function(_1a,_1b){
+if(_1a.queryOptions&&_1a.queryOptions.results){
+_1b=_1a.queryOptions.results;
+}
+if(_1a.query){
+var _1c=[];
+for(var i=0;i<_1b.length;i++){
+var _1d=_1b[i];
+if(_1d&&this.matchesQuery(_1d,_1a)){
+_1c.push(_1b[i]);
+}
+}
+}else{
+_1c=_1a.sort?_1b.concat():_1b;
+}
+if(_1a.sort){
+_1c.sort(this.makeComparator(_1a.sort.concat()));
+}
+return this.clientSidePaging(_1a,_1c);
+},clientSidePaging:function(_1e,_1f){
+var _20=_1e.start||0;
+var _21=(_20||_1e.count)?_1f.slice(_20,_20+(_1e.count||_1f.length)):_1f;
+_21._fullLength=_1f.length;
+return _21;
+},matchesQuery:function(_22,_23){
+var _24=_23.query;
+var _25=_23.queryOptions&&_23.queryOptions.ignoreCase;
+for(var i in _24){
+var _26=_24[i];
+var _27=this.getValue(_22,i);
+if((typeof _26=="string"&&(_26.match(/[\*\.]/)||_25))?!dojo.data.util.filter.patternToRegExp(_26,_25).test(_27):_27!=_26){
+return false;
+}
+}
+return true;
+},makeComparator:function(_28){
+var _29=_28.shift();
+if(!_29){
+return function(){
+return 0;
+};
+}
+var _2a=_29.attribute;
+var _2b=!!_29.descending;
+var _2c=this.makeComparator(_28);
+var _2d=this;
+return function(a,b){
+var av=_2d.getValue(a,_2a);
+var bv=_2d.getValue(b,_2a);
+if(av!=bv){
+return av<bv==_2b?1:-1;
+}
+return _2c(a,b);
+};
+}});
+cf.onUpdate=function(){
+};
+})();
+}
Index: trunk/web/dojo/dojox/data/RailsStore.js
===================================================================
--- trunk/web/dojo/dojox/data/RailsStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/RailsStore.js	(revision 9)
@@ -0,0 +1,119 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.RailsStore"]){
+dojo._hasResource["dojox.data.RailsStore"]=true;
+dojo.provide("dojox.data.RailsStore");
+dojo.require("dojox.data.JsonRestStore");
+dojo.declare("dojox.data.RailsStore",dojox.data.JsonRestStore,{constructor:function(){
+},preamble:function(_1){
+if(typeof _1.target=="string"&&!_1.service){
+var _2=_1.target.replace(/\/$/g,"");
+var _3=function(id,_4){
+_4=_4||{};
+var _5=_2;
+var _6;
+var _7;
+if(dojo.isObject(id)){
+_7="";
+_6="?"+dojo.objectToQuery(id);
+}else{
+if(_4.queryStr&&_4.queryStr.indexOf("?")!=-1){
+_7=_4.queryStr.replace(/\?.*/,"");
+_6=_4.queryStr.replace(/[^?]*\?/g,"?");
+}else{
+if(dojo.isString(_4.query)&&_4.query.indexOf("?")!=-1){
+_7=_4.query.replace(/\?.*/,"");
+_6=_4.query.replace(/[^?]*\?/g,"?");
+}else{
+_7=id?id.toString():"";
+_6="";
+}
+}
+}
+if(_7.indexOf("=")!=-1){
+_6=_7;
+_7="";
+}
+if(_7){
+_5=_5+"/"+_7+".json"+_6;
+}else{
+_5=_5+".json"+_6;
+}
+var _8=dojox.rpc._sync;
+dojox.rpc._sync=false;
+return {url:_5,handleAs:"json",contentType:"application/json",sync:_8,headers:{Accept:"application/json,application/javascript",Range:_4&&(_4.start>=0||_4.count>=0)?"items="+(_4.start||"0")+"-"+((_4.count&&(_4.count+(_4.start||0)-1))||""):undefined}};
+};
+_1.service=dojox.rpc.Rest(this.target,true,null,_3);
+}
+},fetch:function(_9){
+_9=_9||{};
+function _a(_b){
+function _c(){
+if(_9.queryStr==null){
+_9.queryStr="";
+}
+if(dojo.isObject(_9.query)){
+_9.queryStr="?"+dojo.objectToQuery(_9.query);
+}else{
+if(dojo.isString(_9.query)){
+_9.queryStr=_9.query;
+}
+}
+};
+function _d(){
+if(_9.queryStr.indexOf("?")==-1){
+return "?";
+}else{
+return "&";
+}
+};
+if(_9.queryStr==null){
+_c();
+}
+_9.queryStr=_9.queryStr+_d()+dojo.objectToQuery(_b);
+};
+if(_9.start||_9.count){
+if((_9.start||0)%_9.count){
+throw new Error("The start parameter must be a multiple of the count parameter");
+}
+_a({page:((_9.start||0)/_9.count)+1,per_page:_9.count});
+}
+if(_9.sort){
+var _e={sortBy:[],sortDir:[]};
+dojo.forEach(_9.sort,function(_f){
+_e.sortBy.push(_f.attribute);
+_e.sortDir.push(!!_f.descending?"DESC":"ASC");
+});
+_a(_e);
+delete _9.sort;
+}
+return this.inherited(arguments);
+},_processResults:function(_10,_11){
+var _12;
+if((typeof this.rootAttribute=="undefined")&&_10[0]){
+if(_10[0][this.idAttribute]){
+this.rootAttribute=false;
+}else{
+for(var _13 in _10[0]){
+if(_10[0][_13][this.idAttribute]){
+this.rootAttribute=_13;
+}
+}
+}
+}
+if(this.rootAttribute){
+_12=dojo.map(_10,function(_14){
+return _14[this.rootAttribute];
+},this);
+}else{
+_12=_10;
+}
+var _15=_10.length;
+return {totalCount:_11.fullLength||(_11.request.count==_15?(_11.request.start||0)+_15*2:_15),items:_12};
+}});
+}
Index: trunk/web/dojo/dojox/data/HtmlTableStore.js
===================================================================
--- trunk/web/dojo/dojox/data/HtmlTableStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/HtmlTableStore.js	(revision 9)
@@ -0,0 +1,267 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.HtmlTableStore"]){
+dojo._hasResource["dojox.data.HtmlTableStore"]=true;
+dojo.provide("dojox.data.HtmlTableStore");
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.declare("dojox.data.HtmlTableStore",null,{constructor:function(_1){
+dojo.deprecated("dojox.data.HtmlTableStore","Please use dojox.data.HtmlStore");
+if(_1.url){
+if(!_1.tableId){
+throw new Error("dojo.data.HtmlTableStore: Cannot instantiate using url without an id!");
+}
+this.url=_1.url;
+this.tableId=_1.tableId;
+}else{
+if(_1.tableId){
+this._rootNode=dojo.byId(_1.tableId);
+this.tableId=this._rootNode.id;
+}else{
+this._rootNode=dojo.byId(this.tableId);
+}
+this._getHeadings();
+for(var i=0;i<this._rootNode.rows.length;i++){
+this._rootNode.rows[i].store=this;
+}
+}
+},url:"",tableId:"",_getHeadings:function(){
+this._headings=[];
+dojo.forEach(this._rootNode.tHead.rows[0].cells,dojo.hitch(this,function(th){
+this._headings.push(dojox.xml.parser.textContent(th));
+}));
+},_getAllItems:function(){
+var _2=[];
+for(var i=1;i<this._rootNode.rows.length;i++){
+_2.push(this._rootNode.rows[i]);
+}
+return _2;
+},_assertIsItem:function(_3){
+if(!this.isItem(_3)){
+throw new Error("dojo.data.HtmlTableStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_4){
+if(typeof _4!=="string"){
+throw new Error("dojo.data.HtmlTableStore: a function was passed an attribute argument that was not an attribute name string");
+return -1;
+}
+return dojo.indexOf(this._headings,_4);
+},getValue:function(_5,_6,_7){
+var _8=this.getValues(_5,_6);
+return (_8.length>0)?_8[0]:_7;
+},getValues:function(_9,_a){
+this._assertIsItem(_9);
+var _b=this._assertIsAttribute(_a);
+if(_b>-1){
+return [dojox.xml.parser.textContent(_9.cells[_b])];
+}
+return [];
+},getAttributes:function(_c){
+this._assertIsItem(_c);
+var _d=[];
+for(var i=0;i<this._headings.length;i++){
+if(this.hasAttribute(_c,this._headings[i])){
+_d.push(this._headings[i]);
+}
+}
+return _d;
+},hasAttribute:function(_e,_f){
+return this.getValues(_e,_f).length>0;
+},containsValue:function(_10,_11,_12){
+var _13=undefined;
+if(typeof _12==="string"){
+_13=dojo.data.util.filter.patternToRegExp(_12,false);
+}
+return this._containsValue(_10,_11,_12,_13);
+},_containsValue:function(_14,_15,_16,_17){
+var _18=this.getValues(_14,_15);
+for(var i=0;i<_18.length;++i){
+var _19=_18[i];
+if(typeof _19==="string"&&_17){
+return (_19.match(_17)!==null);
+}else{
+if(_16===_19){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_1a){
+if(_1a&&_1a.store&&_1a.store===this){
+return true;
+}
+return false;
+},isItemLoaded:function(_1b){
+return this.isItem(_1b);
+},loadItem:function(_1c){
+this._assertIsItem(_1c.item);
+},_fetchItems:function(_1d,_1e,_1f){
+if(this._rootNode){
+this._finishFetchItems(_1d,_1e,_1f);
+}else{
+if(!this.url){
+this._rootNode=dojo.byId(this.tableId);
+this._getHeadings();
+for(var i=0;i<this._rootNode.rows.length;i++){
+this._rootNode.rows[i].store=this;
+}
+}else{
+var _20={url:this.url,handleAs:"text"};
+var _21=this;
+var _22=dojo.xhrGet(_20);
+_22.addCallback(function(_23){
+var _24=function(_25,id){
+if(_25.id==id){
+return _25;
+}
+if(_25.childNodes){
+for(var i=0;i<_25.childNodes.length;i++){
+var _26=_24(_25.childNodes[i],id);
+if(_26){
+return _26;
+}
+}
+}
+return null;
+};
+var d=document.createElement("div");
+d.innerHTML=_23;
+_21._rootNode=_24(d,_21.tableId);
+_21._getHeadings.call(_21);
+for(var i=0;i<_21._rootNode.rows.length;i++){
+_21._rootNode.rows[i].store=_21;
+}
+_21._finishFetchItems(_1d,_1e,_1f);
+});
+_22.addErrback(function(_27){
+_1f(_27,_1d);
+});
+}
+}
+},_finishFetchItems:function(_28,_29,_2a){
+var _2b=null;
+var _2c=this._getAllItems();
+if(_28.query){
+var _2d=_28.queryOptions?_28.queryOptions.ignoreCase:false;
+_2b=[];
+var _2e={};
+var _2f;
+var key;
+for(key in _28.query){
+_2f=_28.query[key]+"";
+if(typeof _2f==="string"){
+_2e[key]=dojo.data.util.filter.patternToRegExp(_2f,_2d);
+}
+}
+for(var i=0;i<_2c.length;++i){
+var _30=true;
+var _31=_2c[i];
+for(key in _28.query){
+_2f=_28.query[key]+"";
+if(!this._containsValue(_31,key,_2f,_2e[key])){
+_30=false;
+}
+}
+if(_30){
+_2b.push(_31);
+}
+}
+_29(_2b,_28);
+}else{
+if(_2c.length>0){
+_2b=_2c.slice(0,_2c.length);
+}
+_29(_2b,_28);
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},close:function(_32){
+},getLabel:function(_33){
+if(this.isItem(_33)){
+return "Table Row #"+this.getIdentity(_33);
+}
+return undefined;
+},getLabelAttributes:function(_34){
+return null;
+},getIdentity:function(_35){
+this._assertIsItem(_35);
+if(!dojo.isOpera){
+return _35.sectionRowIndex;
+}else{
+return (dojo.indexOf(this._rootNode.rows,_35)-1);
+}
+},getIdentityAttributes:function(_36){
+return null;
+},fetchItemByIdentity:function(_37){
+var _38=_37.identity;
+var _39=this;
+var _3a=null;
+var _3b=null;
+if(!this._rootNode){
+if(!this.url){
+this._rootNode=dojo.byId(this.tableId);
+this._getHeadings();
+for(var i=0;i<this._rootNode.rows.length;i++){
+this._rootNode.rows[i].store=this;
+}
+_3a=this._rootNode.rows[_38+1];
+if(_37.onItem){
+_3b=_37.scope?_37.scope:dojo.global;
+_37.onItem.call(_3b,_3a);
+}
+}else{
+var _3c={url:this.url,handleAs:"text"};
+var _3d=dojo.xhrGet(_3c);
+_3d.addCallback(function(_3e){
+var _3f=function(_40,id){
+if(_40.id==id){
+return _40;
+}
+if(_40.childNodes){
+for(var i=0;i<_40.childNodes.length;i++){
+var _41=_3f(_40.childNodes[i],id);
+if(_41){
+return _41;
+}
+}
+}
+return null;
+};
+var d=document.createElement("div");
+d.innerHTML=_3e;
+_39._rootNode=_3f(d,_39.tableId);
+_39._getHeadings.call(_39);
+for(var i=0;i<_39._rootNode.rows.length;i++){
+_39._rootNode.rows[i].store=_39;
+}
+_3a=_39._rootNode.rows[_38+1];
+if(_37.onItem){
+_3b=_37.scope?_37.scope:dojo.global;
+_37.onItem.call(_3b,_3a);
+}
+});
+_3d.addErrback(function(_42){
+if(_37.onError){
+_3b=_37.scope?_37.scope:dojo.global;
+_37.onError.call(_3b,_42);
+}
+});
+}
+}else{
+if(this._rootNode.rows[_38+1]){
+_3a=this._rootNode.rows[_38+1];
+if(_37.onItem){
+_3b=_37.scope?_37.scope:dojo.global;
+_37.onItem.call(_3b,_3a);
+}
+}
+}
+}});
+dojo.extend(dojox.data.HtmlTableStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/CssClassStore.js
===================================================================
--- trunk/web/dojo/dojox/data/CssClassStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/CssClassStore.js	(revision 9)
@@ -0,0 +1,104 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CssClassStore"]){
+dojo._hasResource["dojox.data.CssClassStore"]=true;
+dojo.provide("dojox.data.CssClassStore");
+dojo.require("dojox.data.CssRuleStore");
+dojo.declare("dojox.data.CssClassStore",dojox.data.CssRuleStore,{_labelAttribute:"class",_idAttribute:"class",_cName:"dojox.data.CssClassStore",getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},getAttributes:function(_1){
+this._assertIsItem(_1);
+return ["class","classSans"];
+},getValue:function(_2,_3,_4){
+var _5=this.getValues(_2,_3);
+if(_5&&_5.length>0){
+return _5[0];
+}
+return _4;
+},getValues:function(_6,_7){
+this._assertIsItem(_6);
+this._assertIsAttribute(_7);
+var _8=[];
+if(_7==="class"){
+_8=[_6.className];
+}else{
+if(_7==="classSans"){
+_8=[_6.className.replace(/\./g,"")];
+}
+}
+return _8;
+},_handleRule:function(_9,_a,_b){
+var _c={};
+var s=_9["selectorText"].split(" ");
+for(var j=0;j<s.length;j++){
+var _d=s[j];
+var _e=_d.indexOf(".");
+if(_d&&_d.length>0&&_e!==-1){
+var _f=_d.indexOf(",")||_d.indexOf("[");
+_d=_d.substring(_e,((_f!==-1&&_f>_e)?_f:_d.length));
+_c[_d]=true;
+}
+}
+for(var key in _c){
+if(!this._allItems[key]){
+var _10={};
+_10.className=key;
+_10[this._storeRef]=this;
+this._allItems[key]=_10;
+}
+}
+},_handleReturn:function(){
+var _11=[];
+var _12={};
+for(var i in this._allItems){
+_12[i]=this._allItems[i];
+}
+var _13;
+while(this._pending.length){
+_13=this._pending.pop();
+_13.request._items=_12;
+_11.push(_13);
+}
+while(_11.length){
+_13=_11.pop();
+if(_13.fetch){
+this._handleFetchReturn(_13.request);
+}else{
+this._handleFetchByIdentityReturn(_13.request);
+}
+}
+},_handleFetchByIdentityReturn:function(_14){
+var _15=_14._items;
+var _16=_15[(dojo.isWebKit?_14.identity.toLowerCase():_14.identity)];
+if(!this.isItem(_16)){
+_16=null;
+}
+if(_14.onItem){
+var _17=_14.scope||dojo.global;
+_14.onItem.call(_17,_16);
+}
+},getIdentity:function(_18){
+this._assertIsItem(_18);
+return this.getValue(_18,this._idAttribute);
+},getIdentityAttributes:function(_19){
+this._assertIsItem(_19);
+return [this._idAttribute];
+},fetchItemByIdentity:function(_1a){
+_1a=_1a||{};
+if(!_1a.store){
+_1a.store=this;
+}
+if(this._pending&&this._pending.length>0){
+this._pending.push({request:_1a});
+}else{
+this._pending=[{request:_1a}];
+this._fetch(_1a);
+}
+return _1a;
+}});
+}
Index: trunk/web/dojo/dojox/data/AndOrWriteStore.js
===================================================================
--- trunk/web/dojo/dojox/data/AndOrWriteStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/AndOrWriteStore.js	(revision 9)
@@ -0,0 +1,511 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AndOrWriteStore"]){
+dojo._hasResource["dojox.data.AndOrWriteStore"]=true;
+dojo.provide("dojox.data.AndOrWriteStore");
+dojo.require("dojox.data.AndOrReadStore");
+dojo.declare("dojox.data.AndOrWriteStore",dojox.data.AndOrReadStore,{constructor:function(_1){
+this._features["dojo.data.api.Write"]=true;
+this._features["dojo.data.api.Notification"]=true;
+this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+if(!this._datatypeMap["Date"].serialize){
+this._datatypeMap["Date"].serialize=function(_2){
+return dojo.date.stamp.toISOString(_2,{zulu:true});
+};
+}
+if(_1&&(_1.referenceIntegrity===false)){
+this.referenceIntegrity=false;
+}
+this._saveInProgress=false;
+},referenceIntegrity:true,_assert:function(_3){
+if(!_3){
+throw new Error("assertion failed in ItemFileWriteStore");
+}
+},_getIdentifierAttribute:function(){
+var _4=this.getFeatures()["dojo.data.api.Identity"];
+return _4;
+},newItem:function(_5,_6){
+this._assert(!this._saveInProgress);
+if(!this._loadFinished){
+this._forceLoad();
+}
+if(typeof _5!="object"&&typeof _5!="undefined"){
+throw new Error("newItem() was passed something other than an object");
+}
+var _7=null;
+var _8=this._getIdentifierAttribute();
+if(_8===Number){
+_7=this._arrayOfAllItems.length;
+}else{
+_7=_5[_8];
+if(typeof _7==="undefined"){
+throw new Error("newItem() was not passed an identity for the new item");
+}
+if(dojo.isArray(_7)){
+throw new Error("newItem() was not passed an single-valued identity");
+}
+}
+if(this._itemsByIdentity){
+this._assert(typeof this._itemsByIdentity[_7]==="undefined");
+}
+this._assert(typeof this._pending._newItems[_7]==="undefined");
+this._assert(typeof this._pending._deletedItems[_7]==="undefined");
+var _9={};
+_9[this._storeRefPropName]=this;
+_9[this._itemNumPropName]=this._arrayOfAllItems.length;
+if(this._itemsByIdentity){
+this._itemsByIdentity[_7]=_9;
+_9[_8]=[_7];
+}
+this._arrayOfAllItems.push(_9);
+var _a=null;
+if(_6&&_6.parent&&_6.attribute){
+_a={item:_6.parent,attribute:_6.attribute,oldValue:undefined};
+var _b=this.getValues(_6.parent,_6.attribute);
+if(_b&&_b.length>0){
+var _c=_b.slice(0,_b.length);
+if(_b.length===1){
+_a.oldValue=_b[0];
+}else{
+_a.oldValue=_b.slice(0,_b.length);
+}
+_c.push(_9);
+this._setValueOrValues(_6.parent,_6.attribute,_c,false);
+_a.newValue=this.getValues(_6.parent,_6.attribute);
+}else{
+this._setValueOrValues(_6.parent,_6.attribute,_9,false);
+_a.newValue=_9;
+}
+}else{
+_9[this._rootItemPropName]=true;
+this._arrayOfTopLevelItems.push(_9);
+}
+this._pending._newItems[_7]=_9;
+for(var _d in _5){
+if(_d===this._storeRefPropName||_d===this._itemNumPropName){
+throw new Error("encountered bug in ItemFileWriteStore.newItem");
+}
+var _e=_5[_d];
+if(!dojo.isArray(_e)){
+_e=[_e];
+}
+_9[_d]=_e;
+if(this.referenceIntegrity){
+for(var i=0;i<_e.length;i++){
+var _f=_e[i];
+if(this.isItem(_f)){
+this._addReferenceToMap(_f,_9,_d);
+}
+}
+}
+}
+this.onNew(_9,_a);
+return _9;
+},_removeArrayElement:function(_10,_11){
+var _12=dojo.indexOf(_10,_11);
+if(_12!=-1){
+_10.splice(_12,1);
+return true;
+}
+return false;
+},deleteItem:function(_13){
+this._assert(!this._saveInProgress);
+this._assertIsItem(_13);
+var _14=_13[this._itemNumPropName];
+var _15=this.getIdentity(_13);
+if(this.referenceIntegrity){
+var _16=this.getAttributes(_13);
+if(_13[this._reverseRefMap]){
+_13["backup_"+this._reverseRefMap]=dojo.clone(_13[this._reverseRefMap]);
+}
+dojo.forEach(_16,function(_17){
+dojo.forEach(this.getValues(_13,_17),function(_18){
+if(this.isItem(_18)){
+if(!_13["backupRefs_"+this._reverseRefMap]){
+_13["backupRefs_"+this._reverseRefMap]=[];
+}
+_13["backupRefs_"+this._reverseRefMap].push({id:this.getIdentity(_18),attr:_17});
+this._removeReferenceFromMap(_18,_13,_17);
+}
+},this);
+},this);
+var _19=_13[this._reverseRefMap];
+if(_19){
+for(var _1a in _19){
+var _1b=null;
+if(this._itemsByIdentity){
+_1b=this._itemsByIdentity[_1a];
+}else{
+_1b=this._arrayOfAllItems[_1a];
+}
+if(_1b){
+for(var _1c in _19[_1a]){
+var _1d=this.getValues(_1b,_1c)||[];
+var _1e=dojo.filter(_1d,function(_1f){
+return !(this.isItem(_1f)&&this.getIdentity(_1f)==_15);
+},this);
+this._removeReferenceFromMap(_13,_1b,_1c);
+if(_1e.length<_1d.length){
+this._setValueOrValues(_1b,_1c,_1e);
+}
+}
+}
+}
+}
+}
+this._arrayOfAllItems[_14]=null;
+_13[this._storeRefPropName]=null;
+if(this._itemsByIdentity){
+delete this._itemsByIdentity[_15];
+}
+this._pending._deletedItems[_15]=_13;
+if(_13[this._rootItemPropName]){
+this._removeArrayElement(this._arrayOfTopLevelItems,_13);
+}
+this.onDelete(_13);
+return true;
+},setValue:function(_20,_21,_22){
+return this._setValueOrValues(_20,_21,_22,true);
+},setValues:function(_23,_24,_25){
+return this._setValueOrValues(_23,_24,_25,true);
+},unsetAttribute:function(_26,_27){
+return this._setValueOrValues(_26,_27,[],true);
+},_setValueOrValues:function(_28,_29,_2a,_2b){
+this._assert(!this._saveInProgress);
+this._assertIsItem(_28);
+this._assert(dojo.isString(_29));
+this._assert(typeof _2a!=="undefined");
+var _2c=this._getIdentifierAttribute();
+if(_29==_2c){
+throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier.");
+}
+var _2d=this._getValueOrValues(_28,_29);
+var _2e=this.getIdentity(_28);
+if(!this._pending._modifiedItems[_2e]){
+var _2f={};
+for(var key in _28){
+if((key===this._storeRefPropName)||(key===this._itemNumPropName)||(key===this._rootItemPropName)){
+_2f[key]=_28[key];
+}else{
+if(key===this._reverseRefMap){
+_2f[key]=dojo.clone(_28[key]);
+}else{
+_2f[key]=_28[key].slice(0,_28[key].length);
+}
+}
+}
+this._pending._modifiedItems[_2e]=_2f;
+}
+var _30=false;
+if(dojo.isArray(_2a)&&_2a.length===0){
+_30=delete _28[_29];
+_2a=undefined;
+if(this.referenceIntegrity&&_2d){
+var _31=_2d;
+if(!dojo.isArray(_31)){
+_31=[_31];
+}
+for(var i=0;i<_31.length;i++){
+var _32=_31[i];
+if(this.isItem(_32)){
+this._removeReferenceFromMap(_32,_28,_29);
+}
+}
+}
+}else{
+var _33;
+if(dojo.isArray(_2a)){
+var _34=_2a;
+_33=_2a.slice(0,_2a.length);
+}else{
+_33=[_2a];
+}
+if(this.referenceIntegrity){
+if(_2d){
+var _31=_2d;
+if(!dojo.isArray(_31)){
+_31=[_31];
+}
+var map={};
+dojo.forEach(_31,function(_35){
+if(this.isItem(_35)){
+var id=this.getIdentity(_35);
+map[id.toString()]=true;
+}
+},this);
+dojo.forEach(_33,function(_36){
+if(this.isItem(_36)){
+var id=this.getIdentity(_36);
+if(map[id.toString()]){
+delete map[id.toString()];
+}else{
+this._addReferenceToMap(_36,_28,_29);
+}
+}
+},this);
+for(var rId in map){
+var _37;
+if(this._itemsByIdentity){
+_37=this._itemsByIdentity[rId];
+}else{
+_37=this._arrayOfAllItems[rId];
+}
+this._removeReferenceFromMap(_37,_28,_29);
+}
+}else{
+for(var i=0;i<_33.length;i++){
+var _32=_33[i];
+if(this.isItem(_32)){
+this._addReferenceToMap(_32,_28,_29);
+}
+}
+}
+}
+_28[_29]=_33;
+_30=true;
+}
+if(_2b){
+this.onSet(_28,_29,_2d,_2a);
+}
+return _30;
+},_addReferenceToMap:function(_38,_39,_3a){
+var _3b=this.getIdentity(_39);
+var _3c=_38[this._reverseRefMap];
+if(!_3c){
+_3c=_38[this._reverseRefMap]={};
+}
+var _3d=_3c[_3b];
+if(!_3d){
+_3d=_3c[_3b]={};
+}
+_3d[_3a]=true;
+},_removeReferenceFromMap:function(_3e,_3f,_40){
+var _41=this.getIdentity(_3f);
+var _42=_3e[this._reverseRefMap];
+var _43;
+if(_42){
+for(_43 in _42){
+if(_43==_41){
+delete _42[_43][_40];
+if(this._isEmpty(_42[_43])){
+delete _42[_43];
+}
+}
+}
+if(this._isEmpty(_42)){
+delete _3e[this._reverseRefMap];
+}
+}
+},_dumpReferenceMap:function(){
+var i;
+for(i=0;i<this._arrayOfAllItems.length;i++){
+var _44=this._arrayOfAllItems[i];
+if(_44&&_44[this._reverseRefMap]){
+}
+}
+},_getValueOrValues:function(_45,_46){
+var _47=undefined;
+if(this.hasAttribute(_45,_46)){
+var _48=this.getValues(_45,_46);
+if(_48.length==1){
+_47=_48[0];
+}else{
+_47=_48;
+}
+}
+return _47;
+},_flatten:function(_49){
+if(this.isItem(_49)){
+var _4a=_49;
+var _4b=this.getIdentity(_4a);
+var _4c={_reference:_4b};
+return _4c;
+}else{
+if(typeof _49==="object"){
+for(var _4d in this._datatypeMap){
+var _4e=this._datatypeMap[_4d];
+if(dojo.isObject(_4e)&&!dojo.isFunction(_4e)){
+if(_49 instanceof _4e.type){
+if(!_4e.serialize){
+throw new Error("ItemFileWriteStore:  No serializer defined for type mapping: ["+_4d+"]");
+}
+return {_type:_4d,_value:_4e.serialize(_49)};
+}
+}else{
+if(_49 instanceof _4e){
+return {_type:_4d,_value:_49.toString()};
+}
+}
+}
+}
+return _49;
+}
+},_getNewFileContentString:function(){
+var _4f={};
+var _50=this._getIdentifierAttribute();
+if(_50!==Number){
+_4f.identifier=_50;
+}
+if(this._labelAttr){
+_4f.label=this._labelAttr;
+}
+_4f.items=[];
+for(var i=0;i<this._arrayOfAllItems.length;++i){
+var _51=this._arrayOfAllItems[i];
+if(_51!==null){
+var _52={};
+for(var key in _51){
+if(key!==this._storeRefPropName&&key!==this._itemNumPropName&&key!==this._reverseRefMap&&key!==this._rootItemPropName){
+var _53=key;
+var _54=this.getValues(_51,_53);
+if(_54.length==1){
+_52[_53]=this._flatten(_54[0]);
+}else{
+var _55=[];
+for(var j=0;j<_54.length;++j){
+_55.push(this._flatten(_54[j]));
+_52[_53]=_55;
+}
+}
+}
+}
+_4f.items.push(_52);
+}
+}
+var _56=true;
+return dojo.toJson(_4f,_56);
+},_isEmpty:function(_57){
+var _58=true;
+if(dojo.isObject(_57)){
+var i;
+for(i in _57){
+_58=false;
+break;
+}
+}else{
+if(dojo.isArray(_57)){
+if(_57.length>0){
+_58=false;
+}
+}
+}
+return _58;
+},save:function(_59){
+this._assert(!this._saveInProgress);
+this._saveInProgress=true;
+var _5a=this;
+var _5b=function(){
+_5a._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+_5a._saveInProgress=false;
+if(_59&&_59.onComplete){
+var _5c=_59.scope||dojo.global;
+_59.onComplete.call(_5c);
+}
+};
+var _5d=function(){
+_5a._saveInProgress=false;
+if(_59&&_59.onError){
+var _5e=_59.scope||dojo.global;
+_59.onError.call(_5e);
+}
+};
+if(this._saveEverything){
+var _5f=this._getNewFileContentString();
+this._saveEverything(_5b,_5d,_5f);
+}
+if(this._saveCustom){
+this._saveCustom(_5b,_5d);
+}
+if(!this._saveEverything&&!this._saveCustom){
+_5b();
+}
+},revert:function(){
+this._assert(!this._saveInProgress);
+var _60;
+for(_60 in this._pending._modifiedItems){
+var _61=this._pending._modifiedItems[_60];
+var _62=null;
+if(this._itemsByIdentity){
+_62=this._itemsByIdentity[_60];
+}else{
+_62=this._arrayOfAllItems[_60];
+}
+_61[this._storeRefPropName]=this;
+for(key in _62){
+delete _62[key];
+}
+dojo.mixin(_62,_61);
+}
+var _63;
+for(_60 in this._pending._deletedItems){
+_63=this._pending._deletedItems[_60];
+_63[this._storeRefPropName]=this;
+var _64=_63[this._itemNumPropName];
+if(_63["backup_"+this._reverseRefMap]){
+_63[this._reverseRefMap]=_63["backup_"+this._reverseRefMap];
+delete _63["backup_"+this._reverseRefMap];
+}
+this._arrayOfAllItems[_64]=_63;
+if(this._itemsByIdentity){
+this._itemsByIdentity[_60]=_63;
+}
+if(_63[this._rootItemPropName]){
+this._arrayOfTopLevelItems.push(_63);
+}
+}
+for(_60 in this._pending._deletedItems){
+_63=this._pending._deletedItems[_60];
+if(_63["backupRefs_"+this._reverseRefMap]){
+dojo.forEach(_63["backupRefs_"+this._reverseRefMap],function(_65){
+var _66;
+if(this._itemsByIdentity){
+_66=this._itemsByIdentity[_65.id];
+}else{
+_66=this._arrayOfAllItems[_65.id];
+}
+this._addReferenceToMap(_66,_63,_65.attr);
+},this);
+delete _63["backupRefs_"+this._reverseRefMap];
+}
+}
+for(_60 in this._pending._newItems){
+var _67=this._pending._newItems[_60];
+_67[this._storeRefPropName]=null;
+this._arrayOfAllItems[_67[this._itemNumPropName]]=null;
+if(_67[this._rootItemPropName]){
+this._removeArrayElement(this._arrayOfTopLevelItems,_67);
+}
+if(this._itemsByIdentity){
+delete this._itemsByIdentity[_60];
+}
+}
+this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};
+return true;
+},isDirty:function(_68){
+if(_68){
+var _69=this.getIdentity(_68);
+return new Boolean(this._pending._newItems[_69]||this._pending._modifiedItems[_69]||this._pending._deletedItems[_69]).valueOf();
+}else{
+if(!this._isEmpty(this._pending._newItems)||!this._isEmpty(this._pending._modifiedItems)||!this._isEmpty(this._pending._deletedItems)){
+return true;
+}
+return false;
+}
+},onSet:function(_6a,_6b,_6c,_6d){
+},onNew:function(_6e,_6f){
+},onDelete:function(_70){
+},close:function(_71){
+if(this.clearOnClose){
+if(!this.isDirty()){
+this.inherited(arguments);
+}else{
+throw new Error("dojox.data.AndOrWriteStore: There are unsaved changes present in the store.  Please save or revert the changes before invoking close.");
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/data/FileStore.js
===================================================================
--- trunk/web/dojo/dojox/data/FileStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/FileStore.js	(revision 9)
@@ -0,0 +1,239 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.FileStore"]){
+dojo._hasResource["dojox.data.FileStore"]=true;
+dojo.provide("dojox.data.FileStore");
+dojo.declare("dojox.data.FileStore",null,{constructor:function(_1){
+if(_1&&_1.label){
+this.label=_1.label;
+}
+if(_1&&_1.url){
+this.url=_1.url;
+}
+if(_1&&_1.options){
+if(dojo.isArray(_1.options)){
+this.options=_1.options;
+}else{
+if(dojo.isString(_1.options)){
+this.options=_1.options.split(",");
+}
+}
+}
+if(_1&&_1.pathAsQueryParam){
+this.pathAsQueryParam=true;
+}
+if(_1&&"urlPreventCache" in _1){
+this.urlPreventCache=_1.urlPreventCache?true:false;
+}
+},url:"",_storeRef:"_S",label:"name",_identifier:"path",_attributes:["children","directory","name","path","modified","size","parentDir"],pathSeparator:"/",options:[],failOk:false,urlPreventCache:true,_assertIsItem:function(_2){
+if(!this.isItem(_2)){
+throw new Error("dojox.data.FileStore: a function was passed an item argument that was not an item");
+}
+},_assertIsAttribute:function(_3){
+if(typeof _3!=="string"){
+throw new Error("dojox.data.FileStore: a function was passed an attribute argument that was not an attribute name string");
+}
+},pathAsQueryParam:false,getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
+},getValue:function(_4,_5,_6){
+var _7=this.getValues(_4,_5);
+if(_7&&_7.length>0){
+return _7[0];
+}
+return _6;
+},getAttributes:function(_8){
+return this._attributes;
+},hasAttribute:function(_9,_a){
+this._assertIsItem(_9);
+this._assertIsAttribute(_a);
+return (_a in _9);
+},getIdentity:function(_b){
+return this.getValue(_b,this._identifier);
+},getIdentityAttributes:function(_c){
+return [this._identifier];
+},isItemLoaded:function(_d){
+var _e=this.isItem(_d);
+if(_e&&typeof _d._loaded=="boolean"&&!_d._loaded){
+_e=false;
+}
+return _e;
+},loadItem:function(_f){
+var _10=_f.item;
+var _11=this;
+var _12=_f.scope||dojo.global;
+var _13={};
+if(this.options.length>0){
+_13.options=dojo.toJson(this.options);
+}
+if(this.pathAsQueryParam){
+_13.path=_10.parentPath+this.pathSeparator+_10.name;
+}
+var _14={url:this.pathAsQueryParam?this.url:this.url+"/"+_10.parentPath+"/"+_10.name,handleAs:"json-comment-optional",content:_13,preventCache:this.urlPreventCache,failOk:this.failOk};
+var _15=dojo.xhrGet(_14);
+_15.addErrback(function(_16){
+if(_f.onError){
+_f.onError.call(_12,_16);
+}
+});
+_15.addCallback(function(_17){
+delete _10.parentPath;
+delete _10._loaded;
+dojo.mixin(_10,_17);
+_11._processItem(_10);
+if(_f.onItem){
+_f.onItem.call(_12,_10);
+}
+});
+},getLabel:function(_18){
+return this.getValue(_18,this.label);
+},getLabelAttributes:function(_19){
+return [this.label];
+},containsValue:function(_1a,_1b,_1c){
+var _1d=this.getValues(_1a,_1b);
+for(var i=0;i<_1d.length;i++){
+if(_1d[i]==_1c){
+return true;
+}
+}
+return false;
+},getValues:function(_1e,_1f){
+this._assertIsItem(_1e);
+this._assertIsAttribute(_1f);
+var _20=_1e[_1f];
+if(typeof _20!=="undefined"&&!dojo.isArray(_20)){
+_20=[_20];
+}else{
+if(typeof _20==="undefined"){
+_20=[];
+}
+}
+return _20;
+},isItem:function(_21){
+if(_21&&_21[this._storeRef]===this){
+return true;
+}
+return false;
+},close:function(_22){
+},fetch:function(_23){
+_23=_23||{};
+if(!_23.store){
+_23.store=this;
+}
+var _24=this;
+var _25=_23.scope||dojo.global;
+var _26={};
+if(_23.query){
+_26.query=dojo.toJson(_23.query);
+}
+if(_23.sort){
+_26.sort=dojo.toJson(_23.sort);
+}
+if(_23.queryOptions){
+_26.queryOptions=dojo.toJson(_23.queryOptions);
+}
+if(typeof _23.start=="number"){
+_26.start=""+_23.start;
+}
+if(typeof _23.count=="number"){
+_26.count=""+_23.count;
+}
+if(this.options.length>0){
+_26.options=dojo.toJson(this.options);
+}
+var _27={url:this.url,preventCache:this.urlPreventCache,failOk:this.failOk,handleAs:"json-comment-optional",content:_26};
+var _28=dojo.xhrGet(_27);
+_28.addCallback(function(_29){
+_24._processResult(_29,_23);
+});
+_28.addErrback(function(_2a){
+if(_23.onError){
+_23.onError.call(_25,_2a,_23);
+}
+});
+},fetchItemByIdentity:function(_2b){
+var _2c=_2b.identity;
+var _2d=this;
+var _2e=_2b.scope||dojo.global;
+var _2f={};
+if(this.options.length>0){
+_2f.options=dojo.toJson(this.options);
+}
+if(this.pathAsQueryParam){
+_2f.path=_2c;
+}
+var _30={url:this.pathAsQueryParam?this.url:this.url+"/"+_2c,handleAs:"json-comment-optional",content:_2f,preventCache:this.urlPreventCache,failOk:this.failOk};
+var _31=dojo.xhrGet(_30);
+_31.addErrback(function(_32){
+if(_2b.onError){
+_2b.onError.call(_2e,_32);
+}
+});
+_31.addCallback(function(_33){
+var _34=_2d._processItem(_33);
+if(_2b.onItem){
+_2b.onItem.call(_2e,_34);
+}
+});
+},_processResult:function(_35,_36){
+var _37=_36.scope||dojo.global;
+try{
+if(_35.pathSeparator){
+this.pathSeparator=_35.pathSeparator;
+}
+if(_36.onBegin){
+_36.onBegin.call(_37,_35.total,_36);
+}
+var _38=this._processItemArray(_35.items);
+if(_36.onItem){
+var i;
+for(i=0;i<_38.length;i++){
+_36.onItem.call(_37,_38[i],_36);
+}
+_38=null;
+}
+if(_36.onComplete){
+_36.onComplete.call(_37,_38,_36);
+}
+}
+catch(e){
+if(_36.onError){
+_36.onError.call(_37,e,_36);
+}else{
+}
+}
+},_processItemArray:function(_39){
+var i;
+for(i=0;i<_39.length;i++){
+this._processItem(_39[i]);
+}
+return _39;
+},_processItem:function(_3a){
+if(!_3a){
+return null;
+}
+_3a[this._storeRef]=this;
+if(_3a.children&&_3a.directory){
+if(dojo.isArray(_3a.children)){
+var _3b=_3a.children;
+var i;
+for(i=0;i<_3b.length;i++){
+var _3c=_3b[i];
+if(dojo.isObject(_3c)){
+_3b[i]=this._processItem(_3c);
+}else{
+_3b[i]={name:_3c,_loaded:false,parentPath:_3a.path};
+_3b[i][this._storeRef]=this;
+}
+}
+}else{
+delete _3a.children;
+}
+}
+return _3a;
+}});
+}
Index: trunk/web/dojo/dojox/data/AppStore.js
===================================================================
--- trunk/web/dojo/dojox/data/AppStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/AppStore.js	(revision 9)
@@ -0,0 +1,550 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.AppStore"]){
+dojo._hasResource["dojox.data.AppStore"]=true;
+dojo.provide("dojox.data.AppStore");
+dojo.require("dojox.atom.io.Connection");
+dojo.require("dojo.data.util.simpleFetch");
+dojo.require("dojo.data.util.filter");
+dojo.experimental("dojox.data.AppStore");
+dojo.declare("dojox.data.AppStore",null,{url:"",urlPreventCache:false,xmethod:false,_atomIO:null,_feed:null,_requests:null,_processing:null,_updates:null,_adds:null,_deletes:null,constructor:function(_1){
+if(_1&&_1.url){
+this.url=_1.url;
+}
+if(_1&&_1.urlPreventCache){
+this.urlPreventCache=_1.urlPreventCache;
+}
+if(!this.url){
+throw new Error("A URL is required to instantiate an APP Store object");
+}
+},_setFeed:function(_2,_3){
+this._feed=_2;
+var i;
+for(i=0;i<this._feed.entries.length;i++){
+this._feed.entries[i].store=this;
+}
+if(this._requests){
+for(i=0;i<this._requests.length;i++){
+var _4=this._requests[i];
+if(_4.request&&_4.fh&&_4.eh){
+this._finishFetchItems(_4.request,_4.fh,_4.eh);
+}else{
+if(_4.clear){
+this._feed=null;
+}else{
+if(_4.add){
+this._feed.addEntry(_4.add);
+}else{
+if(_4.remove){
+this._feed.removeEntry(_4.remove);
+}
+}
+}
+}
+}
+}
+this._requests=null;
+},_getAllItems:function(){
+var _5=[];
+for(var i=0;i<this._feed.entries.length;i++){
+_5.push(this._feed.entries[i]);
+}
+return _5;
+},_assertIsItem:function(_6){
+if(!this.isItem(_6)){
+throw new Error("This error message is provided when a function is called in the following form: "+"getAttribute(argument, attributeName).  The argument variable represents the member "+"or owner of the object. The error is created when an item that does not belong "+"to this store is specified as an argument.");
+}
+},_assertIsAttribute:function(_7){
+if(typeof _7!=="string"){
+throw new Error("The attribute argument must be a string. The error is created "+"when a different type of variable is specified such as an array or object.");
+}
+for(var _8 in dojox.atom.io.model._actions){
+if(_8==_7){
+return true;
+}
+}
+return false;
+},_addUpdate:function(_9){
+if(!this._updates){
+this._updates=[_9];
+}else{
+this._updates.push(_9);
+}
+},getValue:function(_a,_b,_c){
+var _d=this.getValues(_a,_b);
+return (_d.length>0)?_d[0]:_c;
+},getValues:function(_e,_f){
+this._assertIsItem(_e);
+var _10=this._assertIsAttribute(_f);
+if(_10){
+if((_f==="author"||_f==="contributor"||_f==="link")&&_e[_f+"s"]){
+return _e[_f+"s"];
+}
+if(_f==="category"&&_e.categories){
+return _e.categories;
+}
+if(_e[_f]){
+_e=_e[_f];
+if(_e.declaredClass=="dojox.atom.io.model.Content"){
+return [_e.value];
+}
+return [_e];
+}
+}
+return [];
+},getAttributes:function(_11){
+this._assertIsItem(_11);
+var _12=[];
+for(var key in dojox.atom.io.model._actions){
+if(this.hasAttribute(_11,key)){
+_12.push(key);
+}
+}
+return _12;
+},hasAttribute:function(_13,_14){
+return this.getValues(_13,_14).length>0;
+},containsValue:function(_15,_16,_17){
+var _18=undefined;
+if(typeof _17==="string"){
+_18=dojo.data.util.filter.patternToRegExp(_17,false);
+}
+return this._containsValue(_15,_16,_17,_18);
+},_containsValue:function(_19,_1a,_1b,_1c,_1d){
+var _1e=this.getValues(_19,_1a);
+for(var i=0;i<_1e.length;++i){
+var _1f=_1e[i];
+if(typeof _1f==="string"&&_1c){
+if(_1d){
+_1f=_1f.replace(new RegExp(/^\s+/),"");
+_1f=_1f.replace(new RegExp(/\s+$/),"");
+}
+_1f=_1f.replace(/\r|\n|\r\n/g,"");
+return (_1f.match(_1c)!==null);
+}else{
+if(_1b===_1f){
+return true;
+}
+}
+}
+return false;
+},isItem:function(_20){
+return _20&&_20.store&&_20.store===this;
+},isItemLoaded:function(_21){
+return this.isItem(_21);
+},loadItem:function(_22){
+this._assertIsItem(_22.item);
+},_fetchItems:function(_23,_24,_25){
+if(this._feed){
+this._finishFetchItems(_23,_24,_25);
+}else{
+var _26=false;
+if(!this._requests){
+this._requests=[];
+_26=true;
+}
+this._requests.push({request:_23,fh:_24,eh:_25});
+if(_26){
+this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);
+this._atomIO.getFeed(this.url,this._setFeed,null,this);
+}
+}
+},_finishFetchItems:function(_27,_28,_29){
+var _2a=null;
+var _2b=this._getAllItems();
+if(_27.query){
+var _2c=_27.queryOptions?_27.queryOptions.ignoreCase:false;
+_2a=[];
+var _2d={};
+var key;
+var _2e;
+for(key in _27.query){
+_2e=_27.query[key]+"";
+if(typeof _2e==="string"){
+_2d[key]=dojo.data.util.filter.patternToRegExp(_2e,_2c);
+}
+}
+for(var i=0;i<_2b.length;++i){
+var _2f=true;
+var _30=_2b[i];
+for(key in _27.query){
+_2e=_27.query[key]+"";
+if(!this._containsValue(_30,key,_2e,_2d[key],_27.trim)){
+_2f=false;
+}
+}
+if(_2f){
+_2a.push(_30);
+}
+}
+}else{
+if(_2b.length>0){
+_2a=_2b.slice(0,_2b.length);
+}
+}
+try{
+_28(_2a,_27);
+}
+catch(e){
+_29(e,_27);
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true,"dojo.data.api.Write":true,"dojo.data.api.Identity":true};
+},close:function(_31){
+this._feed=null;
+},getLabel:function(_32){
+if(this.isItem(_32)){
+return this.getValue(_32,"title","No Title");
+}
+return undefined;
+},getLabelAttributes:function(_33){
+return ["title"];
+},getIdentity:function(_34){
+this._assertIsItem(_34);
+return this.getValue(_34,"id");
+},getIdentityAttributes:function(_35){
+return ["id"];
+},fetchItemByIdentity:function(_36){
+this._fetchItems({query:{id:_36.identity},onItem:_36.onItem,scope:_36.scope},function(_37,_38){
+var _39=_38.scope;
+if(!_39){
+_39=dojo.global;
+}
+if(_37.length<1){
+_38.onItem.call(_39,null);
+}else{
+_38.onItem.call(_39,_37[0]);
+}
+},_36.onError);
+},newItem:function(_3a){
+var _3b=new dojox.atom.io.model.Entry();
+var _3c=null;
+var _3d=null;
+var i;
+for(var key in _3a){
+if(this._assertIsAttribute(key)){
+_3c=_3a[key];
+switch(key){
+case "link":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addLink(_3d.href,_3d.rel,_3d.hrefLang,_3d.title,_3d.type);
+}
+break;
+case "author":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addAuthor(_3d.name,_3d.email,_3d.uri);
+}
+break;
+case "contributor":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addContributor(_3d.name,_3d.email,_3d.uri);
+}
+break;
+case "category":
+for(i in _3c){
+_3d=_3c[i];
+_3b.addCategory(_3d.scheme,_3d.term,_3d.label);
+}
+break;
+case "icon":
+case "id":
+case "logo":
+case "xmlBase":
+case "rights":
+_3b[key]=_3c;
+break;
+case "updated":
+case "published":
+case "issued":
+case "modified":
+_3b[key]=dojox.atom.io.model.util.createDate(_3c);
+break;
+case "content":
+case "summary":
+case "title":
+case "subtitle":
+_3b[key]=new dojox.atom.io.model.Content(key);
+_3b[key].value=_3c;
+break;
+default:
+_3b[key]=_3c;
+break;
+}
+}
+}
+_3b.store=this;
+_3b.isDirty=true;
+if(!this._adds){
+this._adds=[_3b];
+}else{
+this._adds.push(_3b);
+}
+if(this._feed){
+this._feed.addEntry(_3b);
+}else{
+if(this._requests){
+this._requests.push({add:_3b});
+}else{
+this._requests=[{add:_3b}];
+this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);
+this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));
+}
+}
+return true;
+},deleteItem:function(_3e){
+this._assertIsItem(_3e);
+if(!this._deletes){
+this._deletes=[_3e];
+}else{
+this._deletes.push(_3e);
+}
+if(this._feed){
+this._feed.removeEntry(_3e);
+}else{
+if(this._requests){
+this._requests.push({remove:_3e});
+}else{
+this._requests=[{remove:_3e}];
+this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);
+this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));
+}
+}
+_3e=null;
+return true;
+},setValue:function(_3f,_40,_41){
+this._assertIsItem(_3f);
+var _42={item:_3f};
+if(this._assertIsAttribute(_40)){
+switch(_40){
+case "link":
+_42.links=_3f.links;
+this._addUpdate(_42);
+_3f.links=null;
+_3f.addLink(_41.href,_41.rel,_41.hrefLang,_41.title,_41.type);
+_3f.isDirty=true;
+return true;
+case "author":
+_42.authors=_3f.authors;
+this._addUpdate(_42);
+_3f.authors=null;
+_3f.addAuthor(_41.name,_41.email,_41.uri);
+_3f.isDirty=true;
+return true;
+case "contributor":
+_42.contributors=_3f.contributors;
+this._addUpdate(_42);
+_3f.contributors=null;
+_3f.addContributor(_41.name,_41.email,_41.uri);
+_3f.isDirty=true;
+return true;
+case "category":
+_42.categories=_3f.categories;
+this._addUpdate(_42);
+_3f.categories=null;
+_3f.addCategory(_41.scheme,_41.term,_41.label);
+_3f.isDirty=true;
+return true;
+case "icon":
+case "id":
+case "logo":
+case "xmlBase":
+case "rights":
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=_41;
+_3f.isDirty=true;
+return true;
+case "updated":
+case "published":
+case "issued":
+case "modified":
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=dojox.atom.io.model.util.createDate(_41);
+_3f.isDirty=true;
+return true;
+case "content":
+case "summary":
+case "title":
+case "subtitle":
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=new dojox.atom.io.model.Content(_40);
+_3f[_40].value=_41;
+_3f.isDirty=true;
+return true;
+default:
+_42[_40]=_3f[_40];
+this._addUpdate(_42);
+_3f[_40]=_41;
+_3f.isDirty=true;
+return true;
+}
+}
+return false;
+},setValues:function(_43,_44,_45){
+if(_45.length===0){
+return this.unsetAttribute(_43,_44);
+}
+this._assertIsItem(_43);
+var _46={item:_43};
+var _47;
+var i;
+if(this._assertIsAttribute(_44)){
+switch(_44){
+case "link":
+_46.links=_43.links;
+_43.links=null;
+for(i in _45){
+_47=_45[i];
+_43.addLink(_47.href,_47.rel,_47.hrefLang,_47.title,_47.type);
+}
+_43.isDirty=true;
+return true;
+case "author":
+_46.authors=_43.authors;
+_43.authors=null;
+for(i in _45){
+_47=_45[i];
+_43.addAuthor(_47.name,_47.email,_47.uri);
+}
+_43.isDirty=true;
+return true;
+case "contributor":
+_46.contributors=_43.contributors;
+_43.contributors=null;
+for(i in _45){
+_47=_45[i];
+_43.addContributor(_47.name,_47.email,_47.uri);
+}
+_43.isDirty=true;
+return true;
+case "categories":
+_46.categories=_43.categories;
+_43.categories=null;
+for(i in _45){
+_47=_45[i];
+_43.addCategory(_47.scheme,_47.term,_47.label);
+}
+_43.isDirty=true;
+return true;
+case "icon":
+case "id":
+case "logo":
+case "xmlBase":
+case "rights":
+_46[_44]=_43[_44];
+_43[_44]=_45[0];
+_43.isDirty=true;
+return true;
+case "updated":
+case "published":
+case "issued":
+case "modified":
+_46[_44]=_43[_44];
+_43[_44]=dojox.atom.io.model.util.createDate(_45[0]);
+_43.isDirty=true;
+return true;
+case "content":
+case "summary":
+case "title":
+case "subtitle":
+_46[_44]=_43[_44];
+_43[_44]=new dojox.atom.io.model.Content(_44);
+_43[_44].values[0]=_45[0];
+_43.isDirty=true;
+return true;
+default:
+_46[_44]=_43[_44];
+_43[_44]=_45[0];
+_43.isDirty=true;
+return true;
+}
+}
+this._addUpdate(_46);
+return false;
+},unsetAttribute:function(_48,_49){
+this._assertIsItem(_48);
+if(this._assertIsAttribute(_49)){
+if(_48[_49]!==null){
+var _4a={item:_48};
+switch(_49){
+case "author":
+case "contributor":
+case "link":
+_4a[_49+"s"]=_48[_49+"s"];
+break;
+case "category":
+_4a.categories=_48.categories;
+break;
+default:
+_4a[_49]=_48[_49];
+break;
+}
+_48.isDirty=true;
+_48[_49]=null;
+this._addUpdate(_4a);
+return true;
+}
+}
+return false;
+},save:function(_4b){
+var i;
+for(i in this._adds){
+this._atomIO.addEntry(this._adds[i],null,function(){
+},_4b.onError,false,_4b.scope);
+}
+this._adds=null;
+for(i in this._updates){
+this._atomIO.updateEntry(this._updates[i].item,function(){
+},_4b.onError,false,this.xmethod,_4b.scope);
+}
+this._updates=null;
+for(i in this._deletes){
+this._atomIO.removeEntry(this._deletes[i],function(){
+},_4b.onError,this.xmethod,_4b.scope);
+}
+this._deletes=null;
+this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));
+if(_4b.onComplete){
+var _4c=_4b.scope||dojo.global;
+_4b.onComplete.call(_4c);
+}
+},revert:function(){
+var i;
+for(i in this._adds){
+this._feed.removeEntry(this._adds[i]);
+}
+this._adds=null;
+var _4d,_4e,key;
+for(i in this._updates){
+_4d=this._updates[i];
+_4e=_4d.item;
+for(key in _4d){
+if(key!=="item"){
+_4e[key]=_4d[key];
+}
+}
+}
+this._updates=null;
+for(i in this._deletes){
+this._feed.addEntry(this._deletes[i]);
+}
+this._deletes=null;
+return true;
+},isDirty:function(_4f){
+if(_4f){
+this._assertIsItem(_4f);
+return _4f.isDirty?true:false;
+}
+return (this._adds!==null||this._updates!==null);
+}});
+dojo.extend(dojox.data.AppStore,dojo.data.util.simpleFetch);
+}
Index: trunk/web/dojo/dojox/data/CssRuleStore.js
===================================================================
--- trunk/web/dojo/dojox/data/CssRuleStore.js	(revision 0)
+++ trunk/web/dojo/dojox/data/CssRuleStore.js	(revision 9)
@@ -0,0 +1,336 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.CssRuleStore"]){
+dojo._hasResource["dojox.data.CssRuleStore"]=true;
+dojo.provide("dojox.data.CssRuleStore");
+dojo.require("dojo.data.util.filter");
+dojo.require("dojo.data.util.sorter");
+dojo.require("dojox.data.css");
+dojo.declare("dojox.data.CssRuleStore",null,{_storeRef:"_S",_labelAttribute:"selector",_cache:null,_browserMap:null,_cName:"dojox.data.CssRuleStore",constructor:function(_1){
+if(_1){
+dojo.mixin(this,_1);
+}
+this._cache={};
+this._allItems=null;
+this._waiting=[];
+this.gatherHandle=null;
+var _2=this;
+function _3(){
+try{
+_2.context=dojox.data.css.determineContext(_2.context);
+if(_2.gatherHandle){
+clearInterval(_2.gatherHandle);
+_2.gatherHandle=null;
+}
+while(_2._waiting.length){
+var _4=_2._waiting.pop();
+dojox.data.css.rules.forEach(_4.forFunc,null,_2.context);
+_4.finishFunc();
+}
+}
+catch(e){
+}
+};
+this.gatherHandle=setInterval(_3,250);
+},setContext:function(_5){
+if(_5){
+this.close();
+this.context=dojox.data.css.determineContext(_5);
+}
+},getFeatures:function(){
+return {"dojo.data.api.Read":true};
+},isItem:function(_6){
+if(_6&&_6[this._storeRef]==this){
+return true;
+}
+return false;
+},hasAttribute:function(_7,_8){
+this._assertIsItem(_7);
+this._assertIsAttribute(_8);
+var _9=this.getAttributes(_7);
+if(dojo.indexOf(_9,_8)!=-1){
+return true;
+}
+return false;
+},getAttributes:function(_a){
+this._assertIsItem(_a);
+var _b=["selector","classes","rule","style","cssText","styleSheet","parentStyleSheet","parentStyleSheetHref"];
+var _c=_a.rule.style;
+if(_c){
+var _d;
+for(_d in _c){
+_b.push("style."+_d);
+}
+}
+return _b;
+},getValue:function(_e,_f,_10){
+var _11=this.getValues(_e,_f);
+var _12=_10;
+if(_11&&_11.length>0){
+return _11[0];
+}
+return _10;
+},getValues:function(_13,_14){
+this._assertIsItem(_13);
+this._assertIsAttribute(_14);
+var _15=null;
+if(_14==="selector"){
+_15=_13.rule["selectorText"];
+if(_15&&dojo.isString(_15)){
+_15=_15.split(",");
+}
+}else{
+if(_14==="classes"){
+_15=_13.classes;
+}else{
+if(_14==="rule"){
+_15=_13.rule.rule;
+}else{
+if(_14==="style"){
+_15=_13.rule.style;
+}else{
+if(_14==="cssText"){
+if(dojo.isIE){
+if(_13.rule.style){
+_15=_13.rule.style.cssText;
+if(_15){
+_15="{ "+_15.toLowerCase()+" }";
+}
+}
+}else{
+_15=_13.rule.cssText;
+if(_15){
+_15=_15.substring(_15.indexOf("{"),_15.length);
+}
+}
+}else{
+if(_14==="styleSheet"){
+_15=_13.rule.styleSheet;
+}else{
+if(_14==="parentStyleSheet"){
+_15=_13.rule.parentStyleSheet;
+}else{
+if(_14==="parentStyleSheetHref"){
+if(_13.href){
+_15=_13.href;
+}
+}else{
+if(_14.indexOf("style.")===0){
+var _16=_14.substring(_14.indexOf("."),_14.length);
+_15=_13.rule.style[_16];
+}else{
+_15=[];
+}
+}
+}
+}
+}
+}
+}
+}
+}
+if(_15!==undefined){
+if(!dojo.isArray(_15)){
+_15=[_15];
+}
+}
+return _15;
+},getLabel:function(_17){
+this._assertIsItem(_17);
+return this.getValue(_17,this._labelAttribute);
+},getLabelAttributes:function(_18){
+return [this._labelAttribute];
+},containsValue:function(_19,_1a,_1b){
+var _1c=undefined;
+if(typeof _1b==="string"){
+_1c=dojo.data.util.filter.patternToRegExp(_1b,false);
+}
+return this._containsValue(_19,_1a,_1b,_1c);
+},isItemLoaded:function(_1d){
+return this.isItem(_1d);
+},loadItem:function(_1e){
+this._assertIsItem(_1e.item);
+},fetch:function(_1f){
+_1f=_1f||{};
+if(!_1f.store){
+_1f.store=this;
+}
+var _20=_1f.scope||dojo.global;
+if(this._pending&&this._pending.length>0){
+this._pending.push({request:_1f,fetch:true});
+}else{
+this._pending=[{request:_1f,fetch:true}];
+this._fetch(_1f);
+}
+return _1f;
+},_fetch:function(_21){
+var _22=_21.scope||dojo.global;
+if(this._allItems===null){
+this._allItems={};
+try{
+if(this.gatherHandle){
+this._waiting.push({"forFunc":dojo.hitch(this,this._handleRule),"finishFunc":dojo.hitch(this,this._handleReturn)});
+}else{
+dojox.data.css.rules.forEach(dojo.hitch(this,this._handleRule),null,this.context);
+this._handleReturn();
+}
+}
+catch(e){
+if(_21.onError){
+_21.onError.call(_22,e,_21);
+}
+}
+}else{
+this._handleReturn();
+}
+},_handleRule:function(_23,_24,_25){
+var _26=_23["selectorText"];
+var s=_26.split(" ");
+var _27=[];
+for(var j=0;j<s.length;j++){
+var tmp=s[j];
+var _28=tmp.indexOf(".");
+if(tmp&&tmp.length>0&&_28!==-1){
+var _29=tmp.indexOf(",")||tmp.indexOf("[");
+tmp=tmp.substring(_28,((_29!==-1&&_29>_28)?_29:tmp.length));
+_27.push(tmp);
+}
+}
+var _2a={};
+_2a.rule=_23;
+_2a.styleSheet=_24;
+_2a.href=_25;
+_2a.classes=_27;
+_2a[this._storeRef]=this;
+if(!this._allItems[_26]){
+this._allItems[_26]=[];
+}
+this._allItems[_26].push(_2a);
+},_handleReturn:function(){
+var _2b=[];
+var _2c=[];
+var _2d=null;
+for(var i in this._allItems){
+_2d=this._allItems[i];
+for(var j in _2d){
+_2c.push(_2d[j]);
+}
+}
+var _2e;
+while(this._pending.length){
+_2e=this._pending.pop();
+_2e.request._items=_2c;
+_2b.push(_2e);
+}
+while(_2b.length){
+_2e=_2b.pop();
+this._handleFetchReturn(_2e.request);
+}
+},_handleFetchReturn:function(_2f){
+var _30=_2f.scope||dojo.global;
+var _31=[];
+var _32="all";
+var i;
+if(_2f.query){
+_32=dojo.toJson(_2f.query);
+}
+if(this._cache[_32]){
+_31=this._cache[_32];
+}else{
+if(_2f.query){
+for(i in _2f._items){
+var _33=_2f._items[i];
+var _34=dojo.isWebKit?true:(_2f.queryOptions?_2f.queryOptions.ignoreCase:false);
+var _35={};
+var key;
+var _36;
+for(key in _2f.query){
+_36=_2f.query[key];
+if(typeof _36==="string"){
+_35[key]=dojo.data.util.filter.patternToRegExp(_36,_34);
+}
+}
+var _37=true;
+for(key in _2f.query){
+_36=_2f.query[key];
+if(!this._containsValue(_33,key,_36,_35[key])){
+_37=false;
+}
+}
+if(_37){
+_31.push(_33);
+}
+}
+this._cache[_32]=_31;
+}else{
+for(i in _2f._items){
+_31.push(_2f._items[i]);
+}
+}
+}
+var _38=_31.length;
+if(_2f.sort){
+_31.sort(dojo.data.util.sorter.createSortFunction(_2f.sort,this));
+}
+var _39=0;
+var _3a=_31.length;
+if(_2f.start>0&&_2f.start<_31.length){
+_39=_2f.start;
+}
+if(_2f.count&&_2f.count){
+_3a=_2f.count;
+}
+var _3b=_39+_3a;
+if(_3b>_31.length){
+_3b=_31.length;
+}
+_31=_31.slice(_39,_3b);
+if(_2f.onBegin){
+_2f.onBegin.call(_30,_38,_2f);
+}
+if(_2f.onItem){
+if(dojo.isArray(_31)){
+for(i=0;i<_31.length;i++){
+_2f.onItem.call(_30,_31[i],_2f);
+}
+if(_2f.onComplete){
+_2f.onComplete.call(_30,null,_2f);
+}
+}
+}else{
+if(_2f.onComplete){
+_2f.onComplete.call(_30,_31,_2f);
+}
+}
+return _2f;
+},close:function(){
+this._cache={};
+this._allItems=null;
+},_assertIsItem:function(_3c){
+if(!this.isItem(_3c)){
+throw new Error(this._cName+": Invalid item argument.");
+}
+},_assertIsAttribute:function(_3d){
+if(typeof _3d!=="string"){
+throw new Error(this._cName+": Invalid attribute argument.");
+}
+},_containsValue:function(_3e,_3f,_40,_41){
+return dojo.some(this.getValues(_3e,_3f),function(_42){
+if(_42!==null&&!dojo.isObject(_42)&&_41){
+if(_42.toString().match(_41)){
+return true;
+}
+}else{
+if(_40===_42){
+return true;
+}
+}
+return false;
+});
+}});
+}
Index: trunk/web/dojo/dojox/data/util/JsonQuery.js
===================================================================
--- trunk/web/dojo/dojox/data/util/JsonQuery.js	(revision 0)
+++ trunk/web/dojo/dojox/data/util/JsonQuery.js	(revision 9)
@@ -0,0 +1,86 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.data.util.JsonQuery"]){
+dojo._hasResource["dojox.data.util.JsonQuery"]=true;
+dojo.provide("dojox.data.util.JsonQuery");
+dojo.declare("dojox.data.util.JsonQuery",null,{useFullIdInQueries:false,_toJsonQuery:function(_1,_2){
+var _3=true;
+var _4=this;
+function _5(_6,_7){
+var _8=_7.__id;
+if(_8){
+var _9={};
+_9[_4.idAttribute]=_4.useFullIdInQueries?_7.__id:_7[_4.idAttribute];
+_7=_9;
+}
+for(var i in _7){
+var _a=_7[i];
+var _b=_6+(/^[a-zA-Z_][\w_]*$/.test(i)?"."+i:"["+dojo._escapeString(i)+"]");
+if(_a&&typeof _a=="object"){
+_5(_b,_a);
+}else{
+if(_a!="*"){
+_c+=(_3?"":"&")+_b+((!_8&&typeof _a=="string"&&_1.queryOptions&&_1.queryOptions.ignoreCase)?"~":"=")+(_4.simplifiedQuery?encodeURIComponent(_a):dojo.toJson(_a));
+_3=false;
+}
+}
+}
+};
+if(_1.query&&typeof _1.query=="object"){
+var _c="[?(";
+_5("@",_1.query);
+if(!_3){
+_c+=")]";
+}else{
+_c="";
+}
+_1.queryStr=_c.replace(/\\"|"/g,function(t){
+return t=="\""?"'":t;
+});
+}else{
+if(!_1.query||_1.query=="*"){
+_1.query="";
+}
+}
+var _d=_1.sort;
+if(_d){
+_1.queryStr=_1.queryStr||(typeof _1.query=="string"?_1.query:"");
+_3=true;
+for(i=0;i<_d.length;i++){
+_1.queryStr+=(_3?"[":",")+(_d[i].descending?"\\":"/")+"@["+dojo._escapeString(_d[i].attribute)+"]";
+_3=false;
+}
+}
+if(_2&&(_1.start||_1.count)){
+_1.queryStr=(_1.queryStr||(typeof _1.query=="string"?_1.query:""))+"["+(_1.start||"")+":"+(_1.count?(_1.start||0)+_1.count:"")+"]";
+}
+if(typeof _1.queryStr=="string"){
+_1.queryStr=_1.queryStr.replace(/\\"|"/g,function(t){
+return t=="\""?"'":t;
+});
+return _1.queryStr;
+}
+return _1.query;
+},jsonQueryPagination:true,fetch:function(_e){
+this._toJsonQuery(_e,this.jsonQueryPagination);
+return this.inherited(arguments);
+},isUpdateable:function(){
+return true;
+},matchesQuery:function(_f,_10){
+_10._jsonQuery=_10._jsonQuery||dojox.json.query(this._toJsonQuery(_10));
+return _10._jsonQuery([_f]).length;
+},clientSideFetch:function(_11,_12){
+_11._jsonQuery=_11._jsonQuery||dojox.json.query(this._toJsonQuery(_11));
+return this.clientSidePaging(_11,_11._jsonQuery(_12));
+},querySuperSet:function(_13,_14){
+if(!_13.query){
+return _14.query;
+}
+return this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/geo/charting/widget/Legend.js
===================================================================
--- trunk/web/dojo/dojox/geo/charting/widget/Legend.js	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/widget/Legend.js	(revision 9)
@@ -0,0 +1,59 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.geo.charting.widget.Legend"]){
+dojo._hasResource["dojox.geo.charting.widget.Legend"]=true;
+dojo.provide("dojox.geo.charting.widget.Legend");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.lang.functional.array");
+dojo.require("dojox.lang.functional.fold");
+dojo.declare("dojox.geo.charting.widget.Legend",[dijit._Widget,dijit._Templated],{templateString:"<table dojoAttachPoint='legendNode' class='dojoxLegendNode'><tbody dojoAttachPoint='legendBody'></tbody></table>",horizontal:true,legendNode:null,legendBody:null,swatchSize:18,postCreate:function(){
+if(!this.map){
+return;
+}
+this.series=this.map.series;
+dojo.byId(this.map.container).appendChild(this.domNode);
+this.refresh();
+},refresh:function(){
+while(this.legendBody.lastChild){
+dojo.destroy(this.legendBody.lastChild);
+}
+if(this.horizontal){
+dojo.addClass(this.legendNode,"dojoxLegendHorizontal");
+this._tr=dojo.doc.createElement("tr");
+this.legendBody.appendChild(this._tr);
+}
+var s=this.series;
+if(s.length==0){
+return;
+}
+dojo.forEach(s,function(x){
+this._addLabel(x.color,x.name);
+},this);
+},_addLabel:function(_1,_2){
+var _3=dojo.doc.createElement("td");
+var _4=dojo.doc.createElement("td");
+var _5=dojo.doc.createElement("div");
+dojo.addClass(_3,"dojoxLegendIcon");
+dojo.addClass(_4,"dojoxLegendText");
+_5.style.width=this.swatchSize+"px";
+_5.style.height=this.swatchSize+"px";
+_3.appendChild(_5);
+if(this.horizontal){
+this._tr.appendChild(_3);
+this._tr.appendChild(_4);
+}else{
+var tr=dojo.doc.createElement("tr");
+this.legendBody.appendChild(tr);
+tr.appendChild(_3);
+tr.appendChild(_4);
+}
+_5.style.background=_1;
+_4.innerHTML=String(_2);
+}});
+}
Index: trunk/web/dojo/dojox/geo/charting/_base.js
===================================================================
--- trunk/web/dojo/dojox/geo/charting/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/_base.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.geo.charting._base"]){
+dojo._hasResource["dojox.geo.charting._base"]=true;
+dojo.provide("dojox.geo.charting._base");
+dojo.require("dojo.NodeList-traverse");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dijit.Tooltip");
+(function(){
+var _1=dojox.geo.charting;
+_1.showTooltip=function(_2,_3,_4){
+var _5=_1._normalizeArround(_3);
+return dijit.showTooltip(_2,_5,_4);
+};
+_1.hideTooltip=function(_6){
+return dijit.hideTooltip(_6);
+};
+_1._normalizeArround=function(_7){
+var _8=_1._getRealBBox(_7);
+var _9=_7._getRealMatrix()||{xx:1,xy:0,yx:0,yy:1,dx:0,dy:0};
+var _a=dojox.gfx.matrix.multiplyPoint(_9,_8.x,_8.y);
+var _b=dojo.coords(_1._getGfxContainer(_7));
+_7.x=dojo.coords(_b,true).x+_a.x,_7.y=dojo.coords(_b,true).y+_a.y,_7.width=_8.width*_9.xx,_7.height=_8.height*_9.yy;
+return _7;
+};
+_1._getGfxContainer=function(_c){
+return (new dojo.NodeList(_c.rawNode)).parents("div")[0];
+};
+_1._getRealBBox=function(_d){
+var _e=_d.getBoundingBox();
+if(!_e){
+var _f=_d.children;
+var _e=dojo.clone(_1._getRealBBox(_f[0]));
+dojo.forEach(_f,function(_10){
+var _11=_1._getRealBBox(_10);
+_e.x=Math.min(_e.x,_11.x);
+_e.y=Math.min(_e.y,_11.y);
+_e.endX=Math.max(_e.x+_e.width,_11.x+_11.width);
+_e.endY=Math.max(_e.y+_e.height,_11.y+_11.height);
+});
+_e.width=_e.endX-_e.x;
+_e.height=_e.endY-_e.y;
+}
+return _e;
+};
+})();
+}
Index: trunk/web/dojo/dojox/geo/charting/_Feature.js
===================================================================
--- trunk/web/dojo/dojox/geo/charting/_Feature.js	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/_Feature.js	(revision 9)
@@ -0,0 +1,119 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.geo.charting._Feature"]){
+dojo._hasResource["dojox.geo.charting._Feature"]=true;
+dojo.provide("dojox.geo.charting._Feature");
+dojo.require("dojox.gfx.fx");
+dojo.declare("dojox.geo.charting._Feature",null,{_isZoomIn:false,_isFocused:false,markerText:null,constructor:function(_1,_2,_3){
+this.id=_2;
+this.shape=_1.mapObj.createGroup();
+this.parent=_1;
+this.mapObj=_1.mapObj;
+this._bbox=_3.bbox;
+this._center=_3.center;
+this._defaultFill=_1.defaultColor;
+this._highlightFill=_1.highlightColor;
+this._defaultStroke={width:this._normalizeStrokeWeight(0.5),color:"white"};
+this._scale=Math.min(this.parent.containerSize.w/this._bbox.w,this.parent.containerSize.h/this._bbox.h);
+var _4=(dojo.isArray(_3.shape[0]))?_3.shape:[_3.shape];
+dojo.forEach(_4,function(_5){
+this.shape.createPolyline(_5).setStroke(this._defaultStroke).setFill(this._defaultFill);
+},this);
+},setValue:function(_6){
+this.value=_6;
+if(this.parent.series.length!=0){
+for(var i=0;i<this.parent.series.length;i++){
+var _7=this.parent.series[i];
+if((_6>=_7.min)&&(_6<_7.max)){
+this._setFillWith(_7.color);
+this._defaultFill=_7.color;
+}
+}
+}
+},_setFillWith:function(_8){
+var _9=(dojo.isArray(this.shape.children))?this.shape.children:[this.shape.children];
+dojo.forEach(_9,function(_a){
+_a.setFill(_8);
+});
+},_setStrokeWith:function(_b){
+var _c=(dojo.isArray(this.shape.children))?this.shape.children:[this.shape.children];
+dojo.forEach(_c,function(_d){
+_d.setStroke({color:_b.color,width:_b.width,join:"round"});
+});
+},_normalizeStrokeWeight:function(_e){
+var _f=this.shape._getRealMatrix();
+return (dojox.gfx.renderer!="vml")?_e/(this.shape._getRealMatrix()||{xx:1}).xx:_e;
+},_onmouseoverHandler:function(evt){
+this.parent.onFeatureOver(this);
+this._setFillWith(this._highlightFill);
+this.mapObj.marker.show(this.id);
+},_onmouseoutHandler:function(){
+this._setFillWith(this._defaultFill);
+this.mapObj.marker.hide();
+dojo.style("mapZoomCursor","display","none");
+},_onmousemoveHandler:function(evt){
+if(this._isFocused){
+var evt=dojo.fixEvent(evt||window.event);
+dojo.style("mapZoomCursor","left",evt.pageX+12+"px");
+dojo.style("mapZoomCursor","top",evt.pageY+"px");
+dojo.byId("mapZoomCursor").className=(this._isZoomIn)?"mapZoomOut":"mapZoomIn";
+dojo.style("mapZoomCursor","display","block");
+}
+},_onclickHandler:function(){
+if(!this._isFocused){
+for(var _10 in this.mapObj.features){
+if(this.mapObj.features[_10]!=this){
+this.mapObj.features[_10]._setStrokeWith(this._defaultStroke);
+this.mapObj.features[_10]._setFillWith(this.mapObj.features[_10]._defaultFill);
+this.mapObj.features[_10]._isFocused=false;
+this.mapObj.features[_10]._isZoomIn=false;
+}
+}
+this._focus();
+}else{
+if(this._isZoomIn){
+this._zoomOut();
+}else{
+this._zoomIn();
+}
+}
+},_focus:function(){
+this.shape._moveToFront();
+this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)});
+this.parent.onFeatureClick(this);
+this._isFocused=true;
+},_zoomIn:function(){
+var _11=dojox.gfx.fx.animateTransform({duration:1000,shape:this.mapObj,transform:[{name:"translate",start:[-this.mapObj.currentBBox.x,-this.mapObj.currentBBox.y],end:[-this._bbox.x,-this._bbox.y]},{name:"scaleAt",start:[this.mapObj.currentScale,this.mapObj.currentBBox.x,this.mapObj.currentBBox.y],end:[this._scale,this._bbox.x,this._bbox.y]}]});
+dojo.connect(_11,"onEnd",this,function(){
+this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)});
+this.parent.onZoomEnd(this);
+});
+_11.play();
+this.mapObj.currentScale=this._scale;
+this.mapObj.currentBBox={x:this._bbox.x,y:this._bbox.y};
+this._isZoomIn=true;
+dojo.byId("mapZoomCursor").className="";
+},_zoomOut:function(){
+var _12=dojox.gfx.fx.animateTransform({duration:1000,shape:this.mapObj,transform:[{name:"translate",start:[-this._bbox.x,-this._bbox.y],end:[-this.mapObj.boundBox[0],-this.mapObj.boundBox[1]]},{name:"scaleAt",start:[this._scale,this._bbox.x,this._bbox.y],end:[this.mapObj.scale,this.mapObj.boundBox[0],this.mapObj.boundBox[1]]}]});
+dojo.connect(_12,"onEnd",this,function(){
+this._setStrokeWith({color:"black",width:this._normalizeStrokeWeight(2)});
+});
+_12.play();
+this.mapObj.currentScale=this.mapObj.scale;
+this.mapObj.currentBBox={x:this.mapObj.boundBox[0],y:this.mapObj.boundBox[1]};
+this._isZoomIn=false;
+dojo.byId("mapZoomCursor").className="";
+},init:function(){
+this.shape.rawNode.id=this.id;
+this.tooltip=null;
+this.shape.connect("onmouseover",this,this._onmouseoverHandler);
+this.shape.connect("onmouseout",this,this._onmouseoutHandler);
+this.shape.connect("onmousemove",this,this._onmousemoveHandler);
+this.shape.connect("onclick",this,this._onclickHandler);
+}});
+}
Index: trunk/web/dojo/dojox/geo/charting/Map.js
===================================================================
--- trunk/web/dojo/dojox/geo/charting/Map.js	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/Map.js	(revision 9)
@@ -0,0 +1,73 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.geo.charting.Map"]){
+dojo._hasResource["dojox.geo.charting.Map"]=true;
+dojo.provide("dojox.geo.charting.Map");
+dojo.require("dojox.gfx");
+dojo.require("dojox.geo.charting._base");
+dojo.require("dojox.geo.charting._Feature");
+dojo.require("dojox.geo.charting._Marker");
+dojo.declare("dojox.geo.charting.Map",null,{defaultColor:"#B7B7B7",highlightColor:"#D5D5D5",series:[],constructor:function(_1,_2){
+dojo.style(_1,"display","block");
+this.containerSize={x:dojo.coords(_1).x,y:dojo.coords(_1).y,w:dojo.coords(_1).w||100,h:dojo.coords(_1).h||100};
+this.surface=dojox.gfx.createSurface(_1,this.containerSize.w,this.containerSize.h);
+this.container=_1;
+this._createZoomingCursor();
+this.mapObj=this.surface.createGroup();
+this.mapObj.features={};
+dojo.xhrGet({url:_2,handleAs:"json",sync:true,load:dojo.hitch(this,"_init")});
+},setMarkerData:function(_3){
+dojo.xhrGet({url:_3,handleAs:"json",handle:dojo.hitch(this,"_appendMarker")});
+},setDataStore:function(_4,_5){
+this.dataStore=_4;
+var _6=this;
+this.dataStore.fetch({query:_5,onComplete:function(_7){
+var _8=_7[0];
+var _9=_6.dataStore.getAttributes(_8);
+dojo.forEach(_9,function(_a){
+if(_6.mapObj.features[_a]){
+_6.mapObj.features[_a].setValue(_6.dataStore.getValue(_8,_a));
+}
+});
+}});
+},addSeries:function(_b){
+this.series=_b;
+},_init:function(_c){
+var _d=_c.layerExtent[2]-_c.layerExtent[0];
+var _e=_c.layerExtent[3]-_c.layerExtent[1];
+this.mapObj.scale=Math.min(this.containerSize.w/_d,this.containerSize.h/_e);
+this.mapObj.currentScale=this.mapObj.scale;
+this.mapObj.boundBox=_c.layerExtent;
+this.mapObj.currentBBox={x:_c.layerExtent[0],y:_c.layerExtent[1]};
+this.mapObj.setTransform([dojox.gfx.matrix.scale(this.mapObj.scale),dojox.gfx.matrix.translate(-_c.layerExtent[0],-_c.layerExtent[1])]);
+dojo.forEach(_c.featureNames,function(_f){
+var _10=_c.features[_f];
+_10.bbox.x=_10.bbox[0];
+_10.bbox.y=_10.bbox[1];
+_10.bbox.w=_10.bbox[2];
+_10.bbox.h=_10.bbox[3];
+var _11=new dojox.geo.charting._Feature(this,_f,_10);
+_11.init();
+this.mapObj.features[_f]=_11;
+},this);
+this.mapObj.marker=new dojox.geo.charting._Marker({},this);
+},_appendMarker:function(_12){
+this.mapObj.marker=new dojox.geo.charting._Marker(_12,this);
+},_createZoomingCursor:function(){
+if(!dojo.byId("mapZoomCursor")){
+var _13=dojo.doc.createElement("div");
+dojo.attr(_13,"id","mapZoomCursor");
+dojo.addClass(_13,"mapZoomIn");
+dojo.style(_13,"display","none");
+dojo.body().appendChild(_13);
+}
+},onFeatureClick:function(_14){
+},onFeatureOver:function(_15){
+},onZoomEnd:function(_16){
+}});
+}
Index: trunk/web/dojo/dojox/geo/charting/resources/Map.css
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/Map.css	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/Map.css	(revision 9)
@@ -0,0 +1,25 @@
+.tundra .dijitTooltipAbove .dijitTooltipConnector, .dj_ie .tundra .dijitTooltipAbove .dijitTooltipConnector {
+	display: none;
+}
+.dojoxLegendNode {
+	border: 1px solid #ccc;
+	margin: 5px 10px 5px 10px;
+	padding: 3px;
+	float:right;
+}
+.dojoxLegendText {
+	vertical-align: text-top;
+	padding-right: 10px
+}
+.mapZoomIn {
+	width: 21px;
+	height: 21px;
+	background: url(img/zoomin.png) no-repeat;
+	position: absolute;
+}
+.mapZoomOut {
+	width: 21px;
+	height: 21px;
+	background: url(img/zoomout.png) no-repeat;
+	position: absolute;
+}
Index: trunk/web/dojo/dojox/geo/charting/resources/markers/USStates.json
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/markers/USStates.json	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/markers/USStates.json	(revision 9)
@@ -0,0 +1 @@
+{"AK":"Alaska","AZ":"Arizona","AR":"Arkansas","AL":"Alabama","CA":"California","CO":"Colorado","CT":"Connecticut","DE":"Delaware","FL":"Florida","GA":"Georgia","HI":"Hawaii","ID":"Idaho","IL":"Illinois","IN":"Indiana","IA":"Iowa","KS":"Kansas","KY":"Kentucky","LA":"Louisiana","ME":"Maine","MD":"Maryland","MA":"Massachusetts","MI":"Michigan","MN":"Minnesota","MS":"Mississippi","MO":"Missouri","MT":"Montana","NE":"Nebraska","NV":"Nevada","NH":"New Hampshire","NJ":"New Jersey","NM":"New Mexico","NY":"New York","NC":"North Carolina","ND":"North Dakota","OH":"Ohio","OK":"Oklahoma","OR":"Oregon","PA":"Pennsylvania","RI":"Rhode Island","SC":"South Carolina","SD":"South Dakota","TN":"Tennessee","TX":"Texas","UT":"Utah","VT":"Vermont","VA":"Virginia","WA":"Washington","WV":"West Virginia","WI":"Wisconsin","WY":"Wyoming"}
Index: trunk/web/dojo/dojox/geo/charting/resources/data/USStates.json
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/data/USStates.json	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/data/USStates.json	(revision 9)
@@ -0,0 +1,261 @@
+{
+  "layerExtent":[0, 0, 8036, 5263],
+  "featureNames":["RI", "VT", "HI", "ME", "VA", "MI", "DE", "ID", "IA", "MD", "MA", "AR", "IL", "UT", "IN", "MN", "AZ", "MO", "MT", "MS", "NH", "NJ", "NM", "AK", "TX", "AL", "NC", "ND", "NE", "NY", "GA", "NV", "TN", "CA", "OK", "OH", "WY", "FL", "SD", "SC", "CT", "WV", "DC", "WI", "KY", "KS", "OR", "LA", "WA", "CO", "PA"],
+  "features":{
+    "RI":{
+      "shape":[[7641, 1436, 7651, 1437, 7661, 1467, 7661, 1467, 7653, 1478, 7641, 1436], [7541, 1398, 7559, 1392, 7598, 1380, 7615, 1420, 7635, 1430, 7635, 1431, 7627, 1445, 7626, 1427, 7615, 1429, 7607, 1410, 7618, 1435, 7606, 1444, 7617, 1460, 7618, 1506, 7612, 1496, 7568, 1527, 7568, 1526, 7541, 1398], [7633, 1474, 7639, 1442, 7645, 1476, 7631, 1485, 7633, 1474]],
+      "center":[7585, 1442],
+      "bbox":[7541, 1380, 120, 147]
+    },
+    "VT":{
+      "shape":[7427, 828, 7434, 848, 7424, 882, 7445, 909, 7444, 926, 7390, 984, 7404, 1022, 7383, 1128, 7402, 1236, 7394, 1266, 7414, 1289, 7393, 1294, 7309, 1313, 7302, 1314, 7267, 1166, 7255, 1151, 7239, 1162, 7241, 1126, 7216, 1076, 7218, 999, 7196, 969, 7184, 893, 7202, 888, 7427, 828],
+      "center":[7317, 1057],
+      "bbox":[7184, 828, 261, 487]
+    },
+    "HI":{
+      "shape":[[2254, 4585, 2254, 4606, 2228, 4628, 2227, 4605, 2254, 4585], [2319, 4564, 2350, 4551, 2385, 4559, 2393, 4577, 2383, 4610, 2361, 4625, 2334, 4617, 2305, 4588, 2319, 4564], [2597, 4694, 2619, 4684, 2634, 4731, 2654, 4734, 2664, 4766, 2634, 4772, 2610, 4758, 2611, 4743, 2600, 4747, 2608, 4758, 2584, 4760, 2558, 4702, 2597, 4694], [2790, 4803, 2827, 4807, 2796, 4829, 2719, 4809, 2731, 4787, 2790, 4803], [2835, 4839, 2851, 4839, 2864, 4864, 2908, 4860, 2948, 4903, 2921, 4921, 2870, 4926, 2863, 4884, 2827, 4864, 2835, 4839], [2769, 4849, 2800, 4865, 2797, 4885, 2774, 4888, 2761, 4856, 2769, 4849], [2832, 4923, 2848, 4934, 2822, 4937, 2832, 4923], [2968, 4993, 3088, 5070, 3095, 5110, 3109, 5108, 3113, 5129, 3143, 5154, 3102, 5189, 3011, 5222, 2976, 5263, 2938, 5226, 2946, 5175, 2920, 5098, 2963, 5053, 2954, 5008, 2968, 4993]],
+      "center":[2703, 4833],
+      "bbox":[2227, 4551, 916, 711]
+    },
+    "ME":{
+      "shape":[7610, 288, 7625, 320, 7647, 327, 7714, 269, 7794, 304, 7867, 514, 7872, 558, 7925, 560, 7935, 577, 7924, 583, 7942, 600, 7938, 620, 7951, 635, 7967, 644, 7989, 630, 8016, 661, 8002, 670, 8009, 678, 7997, 675, 8010, 692, 8012, 675, 8023, 684, 8018, 671, 8036, 683, 8015, 725, 7984, 720, 7990, 744, 7983, 731, 7983, 745, 7967, 737, 7971, 762, 7958, 759, 7952, 775, 7939, 756, 7937, 801, 7931, 783, 7932, 800, 7922, 784, 7916, 789, 7929, 803, 7920, 819, 7884, 779, 7876, 786, 7891, 801, 7874, 793, 7886, 804, 7872, 801, 7869, 821, 7862, 803, 7853, 807, 7864, 826, 7857, 814, 7846, 826, 7865, 857, 7819, 854, 7824, 832, 7838, 837, 7824, 821, 7816, 841, 7818, 807, 7801, 800, 7800, 786, 7813, 825, 7791, 840, 7802, 856, 7794, 904, 7803, 904, 7790, 940, 7780, 939, 7789, 913, 7775, 943, 7759, 920, 7749, 972, 7741, 935, 7744, 978, 7731, 971, 7729, 937, 7717, 970, 7725, 985, 7729, 976, 7726, 996, 7706, 936, 7698, 960, 7705, 956, 7724, 999, 7717, 1008, 7706, 976, 7697, 1010, 7698, 982, 7693, 1010, 7696, 983, 7677, 993, 7662, 1036, 7678, 1048, 7660, 1054, 7657, 1069, 7666, 1075, 7643, 1107, 7641, 1157, 7617, 1153, 7616, 1152, 7613, 1135, 7581, 1111, 7468, 758, 7469, 757, 7483, 747, 7500, 764, 7499, 725, 7522, 727, 7504, 706, 7544, 619, 7524, 564, 7542, 513, 7534, 459, 7590, 287, 7610, 288],
+      "center":[7710, 682],
+      "bbox":[7468, 269, 569, 888]
+    },
+    "VA":{
+      "shape":[[7177, 2288, 7216, 2271, 7216, 2271, 7186, 2362, 7195, 2366, 7166, 2410, 7166, 2458, 7149, 2420, 7162, 2388, 7151, 2391, 7152, 2377, 7165, 2373, 7151, 2366, 7172, 2341, 7161, 2341, 7171, 2335, 7160, 2328, 7182, 2314, 7176, 2301, 7163, 2305, 7177, 2288], [6817, 2100, 6818, 2100, 6841, 2099, 6860, 2110, 6855, 2132, 6921, 2156, 6921, 2156, 6928, 2160, 6929, 2161, 6940, 2194, 6923, 2201, 6931, 2212, 6914, 2210, 6913, 2262, 6903, 2256, 6919, 2269, 6907, 2273, 6953, 2253, 6967, 2288, 7003, 2288, 7017, 2305, 7013, 2287, 7027, 2287, 7045, 2303, 7039, 2313, 7055, 2309, 7054, 2322, 7059, 2311, 7092, 2323, 7090, 2339, 7063, 2332, 7091, 2345, 7083, 2366, 7093, 2376, 7070, 2375, 7073, 2359, 7057, 2358, 7063, 2379, 7048, 2354, 7022, 2349, 7021, 2336, 7002, 2334, 6984, 2310, 6938, 2298, 6982, 2312, 7049, 2379, 7098, 2387, 7064, 2396, 7109, 2403, 7113, 2418, 7111, 2435, 7098, 2414, 7097, 2424, 7080, 2411, 7090, 2426, 7075, 2420, 7078, 2430, 7091, 2432, 7079, 2435, 7097, 2442, 7080, 2452, 7013, 2401, 6989, 2408, 7021, 2406, 7060, 2447, 7098, 2456, 7093, 2470, 7118, 2469, 7104, 2473, 7110, 2485, 7122, 2476, 7104, 2503, 7062, 2463, 7026, 2465, 7021, 2450, 7018, 2468, 7001, 2456, 6959, 2466, 7003, 2459, 7004, 2474, 7050, 2479, 7055, 2468, 7064, 2496, 7094, 2506, 7090, 2539, 7113, 2509, 7113, 2530, 7136, 2521, 7118, 2499, 7155, 2502, 7153, 2513, 7167, 2496, 7204, 2560, 7205, 2562, 7201, 2563, 7202, 2562, 7185, 2533, 7186, 2565, 7187, 2566, 7183, 2567, 7182, 2566, 7173, 2559, 7179, 2567, 7179, 2568, 6333, 2723, 6319, 2725, 6017, 2767, 6012, 2768, 6091, 2729, 6098, 2707, 6127, 2694, 6144, 2648, 6230, 2571, 6247, 2552, 6258, 2584, 6301, 2608, 6344, 2575, 6368, 2591, 6415, 2567, 6418, 2545, 6433, 2553, 6467, 2527, 6479, 2534, 6500, 2512, 6493, 2505, 6507, 2491, 6492, 2481, 6550, 2358, 6560, 2293, 6621, 2315, 6647, 2227, 6670, 2239, 6723, 2150, 6720, 2092, 6809, 2139, 6817, 2101, 6817, 2100]],
+      "center":[6750, 2455],
+      "bbox":[6012, 2092, 1204, 676]
+    },
+    "MI":{
+      "shape":[[5098, 797, 5138, 760, 5201, 760, 5169, 771, 5115, 855, 5107, 841, 5115, 813, 5106, 835, 5083, 821, 5098, 797], [5071, 647, 5077, 644, 5024, 682, 5036, 684, 4995, 694, 5003, 677, 5095, 620, 5071, 647], [5296, 933, 5311, 924, 5362, 943, 5421, 886, 5578, 848, 5574, 904, 5628, 898, 5637, 911, 5670, 891, 5694, 937, 5683, 947, 5717, 955, 5713, 963, 5739, 981, 5654, 996, 5635, 982, 5627, 1025, 5589, 996, 5520, 987, 5503, 1014, 5421, 1028, 5412, 1058, 5384, 1077, 5382, 1099, 5366, 1086, 5386, 1065, 5386, 1043, 5354, 1051, 5349, 1079, 5333, 1091, 5328, 1042, 5319, 1084, 5302, 1099, 5256, 1208, 5255, 1208, 5236, 1192, 5244, 1157, 5213, 1163, 5225, 1135, 5217, 1122, 5222, 1098, 5173, 1078, 5176, 1057, 4898, 996, 4883, 965, 4855, 954, 4856, 954, 4932, 902, 4986, 891, 5042, 856, 5080, 810, 5112, 853, 5110, 899, 5152, 854, 5134, 885, 5160, 863, 5197, 865, 5228, 884, 5264, 934, 5296, 933], [5692, 916, 5674, 894, 5684, 881, 5695, 883, 5688, 904, 5701, 920, 5692, 916], [5703, 935, 5697, 942, 5688, 923, 5703, 935], [5754, 974, 5771, 954, 5795, 973, 5787, 989, 5741, 984, 5754, 974], [5651, 1025, 5682, 1031, 5666, 1041, 5651, 1025], [5532, 1243, 5544, 1203, 5551, 1205, 5541, 1245, 5560, 1215, 5557, 1143, 5615, 1113, 5585, 1089, 5605, 1052, 5595, 1044, 5632, 1034, 5671, 1056, 5704, 1054, 5725, 1079, 5809, 1094, 5826, 1109, 5849, 1154, 5831, 1146, 5822, 1161, 5846, 1182, 5856, 1214, 5858, 1289, 5833, 1305, 5832, 1346, 5796, 1363, 5790, 1415, 5831, 1437, 5871, 1373, 5860, 1368, 5916, 1331, 5940, 1335, 5973, 1379, 6023, 1528, 6019, 1596, 5993, 1588, 5977, 1599, 5984, 1608, 5971, 1625, 5972, 1650, 5944, 1676, 5939, 1730, 5907, 1786, 5906, 1787, 5718, 1819, 5717, 1806, 5428, 1839, 5429, 1838, 5456, 1808, 5487, 1732, 5497, 1651, 5488, 1595, 5468, 1551, 5486, 1540, 5467, 1549, 5433, 1481, 5442, 1416, 5426, 1394, 5454, 1335, 5449, 1268, 5471, 1256, 5470, 1224, 5505, 1212, 5535, 1158, 5527, 1175, 5535, 1187, 5526, 1205, 5532, 1243]],
+      "center":[5662, 1450],
+      "bbox":[4855, 620, 1168, 1218]
+    },
+    "DE":{
+      "shape":[7082, 1965, 7100, 1940, 7132, 1937, 7133, 1938, 7135, 1938, 7119, 1976, 7130, 2008, 7129, 2009, 7158, 2039, 7187, 2099, 7225, 2115, 7236, 2145, 7222, 2135, 7217, 2144, 7232, 2147, 7205, 2160, 7219, 2166, 7236, 2147, 7246, 2177, 7246, 2178, 7242, 2179, 7242, 2179, 7239, 2180, 7234, 2181, 7150, 2199, 7082, 1965],
+      "center":[7157, 2107],
+      "bbox":[7082, 1937, 163, 261]
+    },
+    "ID":{
+      "shape":[1428, 192, 1536, 217, 1550, 220, 1507, 416, 1537, 477, 1537, 498, 1526, 505, 1539, 522, 1521, 528, 1570, 572, 1620, 694, 1634, 689, 1638, 710, 1676, 715, 1641, 802, 1630, 805, 1638, 859, 1610, 874, 1616, 891, 1602, 915, 1628, 941, 1691, 907, 1704, 930, 1697, 943, 1706, 945, 1707, 996, 1731, 1041, 1724, 1076, 1764, 1103, 1769, 1166, 1787, 1189, 1802, 1167, 1854, 1183, 1871, 1163, 1982, 1188, 1979, 1168, 2000, 1150, 2037, 1210, 2037, 1210, 1959, 1681, 1903, 1671, 1536, 1604, 1535, 1604, 1118, 1512, 1117, 1512, 1197, 1168, 1231, 1110, 1195, 1080, 1194, 1057, 1234, 998, 1267, 976, 1276, 949, 1352, 851, 1346, 822, 1319, 800, 1309, 766, 1309, 764, 1304, 745, 1315, 731, 1306, 692, 1428, 192],
+      "center":[1499, 1209],
+      "bbox":[1117, 192, 920, 1489]
+    },
+    "IA":{
+      "shape":[4779, 1552, 4779, 1554, 4782, 1580, 4804, 1599, 4789, 1625, 4809, 1695, 4860, 1714, 4871, 1739, 4871, 1740, 4911, 1792, 4944, 1810, 4945, 1869, 4908, 1927, 4825, 1952, 4817, 1986, 4843, 2012, 4843, 2044, 4825, 2066, 4822, 2096, 4782, 2118, 4789, 2150, 4781, 2154, 4781, 2154, 4734, 2111, 4171, 2132, 4143, 2131, 4125, 2102, 4136, 2071, 4126, 2040, 4131, 2018, 4119, 2014, 4127, 1995, 4115, 1986, 4121, 1965, 4095, 1948, 4099, 1898, 4089, 1865, 4074, 1860, 4059, 1827, 4054, 1768, 4045, 1765, 4044, 1765, 4018, 1718, 4047, 1642, 4026, 1613, 4035, 1591, 4025, 1570, 4045, 1570, 4097, 1570, 4775, 1553, 4779, 1552],
+      "center":[4463, 1860],
+      "bbox":[4018, 1552, 927, 602]
+    },
+    "MD":{
+      "shape":[[7242, 2179, 7246, 2178, 7246, 2180, 7245, 2203, 7242, 2179], [6546, 2075, 6559, 2073, 7050, 1972, 7082, 1965, 7150, 2199, 7234, 2181, 7233, 2182, 7240, 2190, 7225, 2191, 7243, 2203, 7215, 2270, 7216, 2271, 7177, 2288, 7177, 2288, 7142, 2302, 7158, 2270, 7138, 2277, 7150, 2256, 7125, 2268, 7144, 2239, 7125, 2242, 7133, 2204, 7122, 2248, 7107, 2224, 7111, 2256, 7075, 2228, 7068, 2236, 7054, 2214, 7065, 2220, 7082, 2197, 7064, 2193, 7061, 2204, 7056, 2185, 7095, 2191, 7108, 2174, 7093, 2158, 7104, 2137, 7091, 2157, 7102, 2168, 7095, 2187, 7076, 2180, 7082, 2168, 7070, 2174, 7079, 2154, 7066, 2176, 7055, 2152, 7046, 2181, 7042, 2165, 7051, 2141, 7062, 2156, 7075, 2150, 7061, 2149, 7076, 2131, 7070, 2120, 7063, 2129, 7059, 2118, 7058, 2141, 7048, 2119, 7082, 2059, 7054, 2094, 7058, 2078, 7047, 2082, 7053, 2111, 7035, 2087, 7042, 2053, 7057, 2050, 7050, 2041, 7091, 2033, 7060, 2035, 7070, 2016, 7088, 2017, 7072, 2013, 7080, 1991, 7062, 2022, 7064, 1996, 7050, 2004, 7035, 2049, 7030, 2026, 7023, 2032, 7028, 2060, 7020, 2044, 7006, 2048, 7022, 2059, 7005, 2062, 7013, 2074, 6997, 2066, 7014, 2075, 7009, 2084, 6979, 2077, 6988, 2097, 6995, 2084, 6996, 2097, 7014, 2096, 7017, 2110, 7004, 2111, 7025, 2118, 6989, 2112, 7019, 2131, 6996, 2133, 7014, 2139, 7009, 2169, 7027, 2214, 7052, 2239, 7043, 2251, 7034, 2229, 7034, 2239, 7010, 2229, 6993, 2188, 6997, 2215, 7042, 2255, 7057, 2251, 7075, 2298, 7045, 2269, 7050, 2285, 7013, 2273, 7017, 2261, 7008, 2274, 7004, 2259, 7000, 2277, 6981, 2250, 6990, 2270, 6975, 2270, 6953, 2234, 6946, 2253, 6936, 2245, 6939, 2259, 6923, 2262, 6916, 2239, 6947, 2196, 6941, 2178, 6940, 2177, 6953, 2157, 6930, 2142, 6924, 2150, 6921, 2156, 6855, 2132, 6860, 2110, 6841, 2099, 6818, 2100, 6817, 2100, 6804, 2069, 6785, 2062, 6790, 2051, 6736, 2044, 6726, 2061, 6702, 2065, 6701, 2086, 6669, 2087, 6652, 2069, 6632, 2114, 6610, 2111, 6565, 2173, 6549, 2091, 6546, 2075]],
+      "center":[7052, 2222],
+      "bbox":[6546, 1965, 699, 337]
+    },
+    "MA":{
+      "shape":[[7758, 1469, 7708, 1483, 7719, 1484, 7734, 1449, 7758, 1469], [7302, 1314, 7309, 1313, 7393, 1294, 7414, 1289, 7429, 1285, 7575, 1251, 7591, 1222, 7631, 1200, 7632, 1202, 7623, 1212, 7635, 1211, 7646, 1230, 7639, 1232, 7674, 1236, 7634, 1264, 7649, 1271, 7632, 1292, 7640, 1303, 7626, 1303, 7631, 1317, 7671, 1313, 7707, 1352, 7696, 1344, 7692, 1357, 7719, 1364, 7728, 1388, 7767, 1391, 7757, 1396, 7800, 1365, 7776, 1328, 7753, 1328, 7777, 1323, 7817, 1385, 7806, 1370, 7814, 1391, 7753, 1412, 7725, 1445, 7718, 1402, 7713, 1413, 7706, 1405, 7694, 1441, 7681, 1427, 7684, 1457, 7666, 1464, 7663, 1446, 7662, 1467, 7661, 1467, 7651, 1437, 7641, 1436, 7641, 1436, 7645, 1407, 7635, 1430, 7635, 1430, 7615, 1420, 7598, 1380, 7559, 1392, 7541, 1398, 7321, 1448, 7304, 1452, 7302, 1327, 7302, 1314], [7799, 1472, 7824, 1459, 7815, 1462, 7815, 1443, 7835, 1462, 7799, 1472]],
+      "center":[7490, 1333],
+      "bbox":[7302, 1200, 533, 284]
+    },
+    "AR":{
+      "shape":[4323, 2915, 4351, 2914, 5015, 2888, 5031, 2925, 4986, 2986, 5087, 2978, 5089, 2978, 5089, 2979, 5102, 2996, 5083, 3000, 5093, 3013, 5055, 3032, 5073, 3047, 5057, 3059, 5065, 3073, 5046, 3067, 5048, 3098, 5038, 3082, 5026, 3095, 5041, 3100, 5028, 3122, 5045, 3148, 5009, 3177, 5009, 3178, 5020, 3191, 5011, 3206, 4986, 3199, 4990, 3227, 4974, 3219, 4972, 3234, 4988, 3238, 4978, 3250, 4969, 3241, 4974, 3291, 4961, 3311, 4944, 3302, 4932, 3333, 4919, 3328, 4939, 3340, 4915, 3350, 4930, 3357, 4928, 3369, 4897, 3380, 4914, 3418, 4890, 3428, 4909, 3437, 4877, 3438, 4893, 3452, 4878, 3462, 4878, 3485, 4888, 3473, 4897, 3481, 4886, 3495, 4907, 3483, 4894, 3504, 4900, 3521, 4911, 3516, 4905, 3542, 4887, 3545, 4900, 3558, 4894, 3568, 4879, 3569, 4464, 3582, 4426, 3583, 4424, 3481, 4369, 3483, 4354, 3465, 4352, 3464, 4352, 3449, 4356, 3126, 4327, 2945, 4323, 2915],
+      "center":[4662, 3220],
+      "bbox":[4323, 2888, 779, 695]
+    },
+    "IL":{
+      "shape":[4871, 1739, 4872, 1739, 5275, 1711, 5276, 1714, 5277, 1759, 5328, 1857, 5328, 1858, 5370, 2310, 5358, 2319, 5366, 2336, 5355, 2353, 5379, 2385, 5386, 2426, 5342, 2519, 5321, 2525, 5333, 2543, 5316, 2567, 5323, 2594, 5311, 2594, 5322, 2613, 5322, 2614, 5305, 2642, 5320, 2674, 5261, 2698, 5266, 2759, 5185, 2735, 5158, 2769, 5164, 2782, 5166, 2783, 5147, 2769, 5138, 2770, 5143, 2784, 5127, 2775, 5103, 2732, 5116, 2710, 5098, 2652, 5045, 2615, 5030, 2621, 5032, 2605, 4964, 2560, 4960, 2538, 4992, 2437, 4940, 2417, 4915, 2433, 4895, 2364, 4796, 2279, 4770, 2203, 4780, 2155, 4781, 2154, 4789, 2150, 4782, 2118, 4822, 2096, 4825, 2066, 4843, 2044, 4843, 2012, 4817, 1986, 4825, 1952, 4908, 1927, 4945, 1869, 4944, 1810, 4911, 1792, 4871, 1740, 4871, 1739],
+      "center":[5115, 2145],
+      "bbox":[4770, 1711, 615, 1073]
+    },
+    "UT":{
+      "shape":[1536, 1604, 1903, 1671, 1959, 1681, 1956, 1693, 1927, 1871, 2214, 1915, 2213, 1925, 2105, 2676, 2039, 2667, 1351, 2546, 1345, 2545, 1536, 1604],
+      "center":[1781, 2167],
+      "bbox":[1345, 1604, 869, 1072]
+    },
+    "IN":{
+      "shape":[5428, 1839, 5717, 1806, 5718, 1819, 5721, 1845, 5778, 2313, 5777, 2313, 5768, 2324, 5779, 2338, 5773, 2350, 5788, 2355, 5786, 2374, 5734, 2399, 5695, 2396, 5701, 2433, 5675, 2455, 5666, 2484, 5645, 2489, 5637, 2538, 5620, 2553, 5585, 2539, 5567, 2513, 5574, 2523, 5553, 2530, 5550, 2566, 5531, 2585, 5501, 2558, 5472, 2578, 5462, 2603, 5385, 2574, 5383, 2602, 5340, 2587, 5340, 2610, 5323, 2613, 5322, 2613, 5311, 2594, 5323, 2594, 5316, 2567, 5333, 2543, 5321, 2525, 5342, 2519, 5386, 2426, 5379, 2385, 5355, 2353, 5366, 2336, 5358, 2319, 5370, 2310, 5328, 1858, 5329, 1858, 5367, 1872, 5428, 1839],
+      "center":[5553, 2130],
+      "bbox":[5311, 1806, 477, 807]
+    },
+    "MN":{
+      "shape":[3957, 591, 3967, 564, 3950, 502, 3976, 503, 4218, 503, 4217, 428, 4242, 430, 4260, 439, 4284, 553, 4388, 573, 4395, 595, 4463, 568, 4503, 569, 4544, 585, 4534, 600, 4562, 603, 4581, 646, 4594, 641, 4593, 620, 4621, 617, 4635, 642, 4688, 664, 4687, 676, 4779, 632, 4793, 661, 4874, 652, 4906, 674, 4958, 667, 4798, 754, 4628, 929, 4629, 930, 4604, 948, 4609, 1063, 4558, 1095, 4534, 1135, 4532, 1162, 4550, 1165, 4566, 1188, 4551, 1218, 4548, 1321, 4585, 1355, 4614, 1357, 4667, 1391, 4690, 1430, 4744, 1458, 4772, 1499, 4779, 1552, 4775, 1553, 4097, 1570, 4045, 1570, 4047, 1222, 3992, 1163, 4029, 1123, 4033, 1100, 4033, 1099, 4028, 1023, 4001, 959, 4008, 907, 3997, 891, 3996, 776, 3959, 670, 3957, 591],
+      "center":[4328, 1050],
+      "bbox":[3950, 428, 1007, 1142]
+    },
+    "AZ":{
+      "shape":[2105, 2676, 1948, 3757, 1919, 3753, 1616, 3706, 1051, 3370, 1074, 3333, 1075, 3331, 1106, 3331, 1121, 3315, 1121, 3280, 1092, 3262, 1105, 3229, 1097, 3220, 1102, 3200, 1139, 3179, 1153, 3106, 1178, 3078, 1229, 3058, 1196, 3013, 1193, 2962, 1174, 2927, 1179, 2903, 1179, 2903, 1179, 2902, 1195, 2871, 1202, 2695, 1260, 2695, 1276, 2722, 1293, 2725, 1315, 2697, 1345, 2545, 1345, 2545, 1351, 2546, 2039, 2667, 2105, 2676],
+      "center":[1610, 3091],
+      "bbox":[1051, 2545, 1054, 1212]
+    },
+    "MO":{
+      "shape":[4781, 2154, 4780, 2155, 4770, 2203, 4796, 2279, 4895, 2364, 4915, 2433, 4940, 2417, 4992, 2437, 4960, 2538, 4964, 2560, 5032, 2605, 5030, 2621, 5045, 2615, 5098, 2652, 5116, 2710, 5103, 2732, 5127, 2775, 5143, 2784, 5138, 2770, 5147, 2769, 5166, 2783, 5167, 2783, 5161, 2817, 5171, 2825, 5159, 2831, 5160, 2860, 5137, 2853, 5129, 2880, 5128, 2881, 5118, 2882, 5118, 2880, 5110, 2865, 5109, 2880, 5110, 2881, 5115, 2907, 5100, 2914, 5113, 2927, 5089, 2931, 5107, 2950, 5089, 2978, 5087, 2978, 4986, 2986, 5031, 2925, 5015, 2888, 4351, 2914, 4323, 2915, 4322, 2863, 4321, 2819, 4319, 2406, 4282, 2393, 4274, 2360, 4241, 2331, 4262, 2293, 4277, 2292, 4266, 2264, 4242, 2269, 4210, 2245, 4211, 2244, 4195, 2236, 4185, 2197, 4159, 2184, 4159, 2139, 4142, 2133, 4143, 2131, 4171, 2132, 4734, 2111, 4781, 2154, 4781, 2154],
+      "center":[4649, 2529],
+      "bbox":[4142, 2111, 1030, 875]
+    },
+    "MT":{
+      "shape":[3074, 458, 3023, 1050, 3022, 1057, 3005, 1232, 3001, 1232, 2053, 1110, 2042, 1174, 2037, 1210, 2000, 1150, 1979, 1168, 1982, 1188, 1871, 1163, 1854, 1183, 1802, 1167, 1787, 1189, 1769, 1166, 1764, 1103, 1724, 1076, 1731, 1041, 1707, 996, 1706, 945, 1697, 943, 1704, 930, 1691, 907, 1628, 941, 1602, 915, 1616, 891, 1610, 874, 1638, 859, 1630, 805, 1641, 802, 1676, 715, 1638, 710, 1634, 689, 1620, 694, 1570, 572, 1521, 528, 1539, 522, 1526, 505, 1537, 498, 1537, 477, 1507, 416, 1550, 220, 1560, 222, 3074, 458],
+      "center":[2366, 706],
+      "bbox":[1507, 220, 1567, 1012]
+    },
+    "MS":{
+      "shape":[5342, 3152, 5360, 3170, 5349, 3751, 5385, 4042, 5385, 4042, 5370, 4056, 5286, 4042, 5308, 4047, 5237, 4070, 5243, 4062, 5228, 4057, 5213, 4094, 5200, 4096, 5199, 4096, 5183, 4090, 5138, 4007, 5153, 3940, 4836, 3959, 4848, 3948, 4831, 3910, 4853, 3903, 4842, 3879, 4858, 3885, 4850, 3857, 4869, 3845, 4850, 3837, 4867, 3838, 4872, 3813, 4891, 3811, 4873, 3810, 4877, 3794, 4892, 3798, 4918, 3759, 4905, 3747, 4918, 3752, 4929, 3733, 4903, 3736, 4902, 3724, 4931, 3722, 4948, 3689, 4928, 3692, 4932, 3675, 4908, 3669, 4910, 3656, 4928, 3664, 4913, 3654, 4922, 3637, 4900, 3641, 4915, 3623, 4897, 3615, 4912, 3587, 4903, 3571, 4889, 3586, 4894, 3569, 4894, 3568, 4900, 3558, 4887, 3545, 4905, 3542, 4911, 3516, 4900, 3521, 4894, 3504, 4907, 3483, 4886, 3495, 4897, 3481, 4888, 3473, 4878, 3485, 4878, 3462, 4893, 3452, 4877, 3438, 4909, 3437, 4890, 3428, 4914, 3418, 4897, 3380, 4928, 3369, 4930, 3357, 4915, 3350, 4939, 3340, 4919, 3328, 4932, 3333, 4944, 3302, 4961, 3311, 4974, 3291, 4969, 3241, 4978, 3250, 4988, 3238, 4972, 3234, 4974, 3219, 4990, 3227, 4986, 3199, 5011, 3206, 5020, 3191, 5009, 3178, 5009, 3177, 5014, 3177, 5341, 3152, 5342, 3152],
+      "center":[5130, 3618],
+      "bbox":[4831, 3152, 554, 944]
+    },
+    "NH":{
+      "shape":[7427, 828, 7425, 784, 7467, 758, 7468, 758, 7581, 1111, 7613, 1135, 7616, 1152, 7616, 1153, 7608, 1172, 7618, 1155, 7636, 1165, 7631, 1199, 7631, 1200, 7591, 1222, 7575, 1251, 7429, 1285, 7414, 1289, 7394, 1266, 7402, 1236, 7383, 1128, 7404, 1022, 7390, 984, 7444, 926, 7445, 909, 7424, 882, 7434, 848, 7427, 828],
+      "center":[7487, 1110],
+      "bbox":[7383, 758, 253, 531]
+    },
+    "NJ":{
+      "shape":[7167, 1623, 7175, 1625, 7297, 1663, 7292, 1722, 7290, 1722, 7255, 1776, 7310, 1776, 7302, 1788, 7313, 1783, 7311, 1794, 7305, 1766, 7312, 1771, 7319, 1834, 7309, 1835, 7321, 1839, 7325, 1898, 7317, 1844, 7308, 1847, 7317, 1847, 7308, 1852, 7315, 1867, 7304, 1869, 7317, 1870, 7319, 1912, 7299, 1943, 7306, 1955, 7288, 1950, 7297, 1971, 7285, 1979, 7298, 1986, 7264, 2005, 7281, 2005, 7260, 2061, 7254, 2048, 7258, 2069, 7235, 2086, 7234, 2040, 7200, 2046, 7131, 2007, 7130, 2008, 7119, 1976, 7135, 1938, 7133, 1938, 7217, 1848, 7157, 1810, 7151, 1788, 7132, 1786, 7125, 1764, 7138, 1727, 7122, 1706, 7166, 1623, 7167, 1623],
+      "center":[7248, 1862],
+      "bbox":[7119, 1623, 206, 464]
+    },
+    "NM":{
+      "shape":[2105, 2676, 2182, 2687, 3017, 2778, 3031, 2779, 3030, 2791, 3023, 2874, 3017, 2874, 2946, 3738, 2363, 3681, 2358, 3706, 2373, 3724, 2337, 3720, 2098, 3690, 2086, 3776, 1953, 3758, 1948, 3757, 2105, 2676],
+      "center":[2533, 3173],
+      "bbox":[1948, 2676, 1083, 1100]
+    },
+    "AK":{
+      "shape":[620, 3939, 642, 3931, 650, 3935, 643, 3931, 675, 3922, 680, 3925, 667, 3924, 694, 3939, 689, 3941, 699, 3939, 714, 3945, 716, 3951, 700, 3957, 686, 3954, 692, 3958, 682, 3955, 685, 3953, 664, 3953, 690, 3958, 684, 3960, 693, 3962, 682, 3961, 693, 3964, 689, 3969, 696, 3965, 713, 3966, 721, 3973, 725, 3971, 714, 3968, 714, 3961, 731, 3962, 728, 3956, 734, 3954, 738, 3960, 738, 3953, 741, 3955, 737, 3962, 744, 3956, 760, 3968, 750, 3974, 776, 3987, 791, 3982, 827, 3987, 846, 3994, 850, 4005, 853, 4004, 848, 3997, 850, 4001, 853, 3998, 850, 3995, 871, 4003, 873, 4005, 853, 4012, 877, 4022, 850, 4017, 895, 4026, 880, 4032, 906, 4037, 917, 4045, 921, 4039, 923, 4053, 922, 4040, 943, 4043, 939, 4039, 953, 4044, 938, 4048, 938, 4051, 983, 4048, 1003, 4051, 1044, 4068, 1047, 4075, 1079, 4080, 1086, 4089, 1174, 4108, 1186, 4119, 1216, 4130, 1302, 4135, 1377, 4173, 1388, 4183, 1397, 4183, 1393, 4181, 1406, 4186, 1300, 4789, 1324, 4799, 1329, 4794, 1351, 4806, 1368, 4799, 1399, 4803, 1390, 4819, 1413, 4835, 1416, 4845, 1463, 4888, 1463, 4910, 1502, 4900, 1515, 4901, 1522, 4895, 1523, 4883, 1536, 4881, 1531, 4875, 1578, 4869, 1589, 4878, 1599, 4888, 1594, 4896, 1599, 4907, 1612, 4911, 1622, 4921, 1631, 4940, 1651, 4952, 1672, 4975, 1668, 4977, 1719, 5064, 1712, 5071, 1728, 5076, 1722, 5087, 1735, 5093, 1735, 5107, 1748, 5108, 1803, 5141, 1804, 5147, 1821, 5151, 1823, 5165, 1813, 5177, 1819, 5207, 1789, 5233, 1782, 5235, 1791, 5229, 1781, 5233, 1780, 5224, 1781, 5235, 1776, 5236, 1776, 5222, 1775, 5232, 1765, 5232, 1764, 5223, 1769, 5219, 1765, 5221, 1765, 5214, 1773, 5212, 1780, 5220, 1779, 5213, 1790, 5212, 1780, 5212, 1794, 5200, 1777, 5214, 1775, 5207, 1769, 5212, 1761, 5210, 1760, 5205, 1769, 5200, 1786, 5202, 1783, 5199, 1788, 5195, 1781, 5200, 1773, 5198, 1775, 5184, 1784, 5181, 1785, 5185, 1788, 5178, 1775, 5183, 1775, 5173, 1786, 5171, 1775, 5172, 1775, 5165, 1771, 5166, 1763, 5155, 1769, 5146, 1755, 5152, 1740, 5149, 1733, 5154, 1728, 5150, 1732, 5155, 1723, 5154, 1731, 5159, 1727, 5165, 1723, 5162, 1727, 5168, 1722, 5172, 1715, 5165, 1720, 5172, 1717, 5178, 1708, 5172, 1703, 5158, 1718, 5159, 1714, 5154, 1716, 5148, 1724, 5147, 1723, 5134, 1743, 5138, 1749, 5133, 1727, 5130, 1726, 5120, 1715, 5119, 1707, 5107, 1709, 5100, 1697, 5099, 1705, 5098, 1698, 5094, 1709, 5088, 1700, 5092, 1688, 5084, 1680, 5073, 1689, 5076, 1688, 5067, 1678, 5070, 1669, 5064, 1671, 5059, 1666, 5058, 1663, 5063, 1650, 5055, 1655, 5049, 1670, 5055, 1667, 5051, 1678, 5048, 1658, 5045, 1664, 5040, 1657, 5040, 1656, 5032, 1667, 5030, 1653, 5030, 1649, 5025, 1651, 5020, 1686, 5039, 1655, 5017, 1656, 5007, 1679, 5014, 1657, 5006, 1649, 5014, 1643, 5003, 1648, 5001, 1652, 5005, 1653, 5000, 1648, 4997, 1655, 4991, 1642, 5001, 1634, 4994, 1635, 4980, 1641, 4978, 1639, 4974, 1632, 4978, 1630, 4984, 1600, 4967, 1600, 4958, 1591, 4947, 1596, 4948, 1593, 4938, 1597, 4929, 1590, 4942, 1578, 4904, 1581, 4891, 1577, 4903, 1568, 4899, 1580, 4917, 1569, 4906, 1575, 4916, 1574, 4927, 1583, 4949, 1578, 4948, 1585, 4968, 1582, 4974, 1571, 4972, 1563, 4953, 1563, 4962, 1556, 4957, 1540, 4958, 1544, 4953, 1539, 4953, 1545, 4953, 1543, 4946, 1547, 4944, 1536, 4928, 1553, 4926, 1539, 4926, 1534, 4913, 1535, 4919, 1529, 4920, 1536, 4921, 1536, 4925, 1528, 4931, 1520, 4925, 1527, 4926, 1516, 4924, 1517, 4915, 1511, 4918, 1506, 4909, 1507, 4919, 1488, 4904, 1495, 4913, 1482, 4919, 1490, 4915, 1512, 4924, 1516, 4927, 1508, 4923, 1511, 4927, 1508, 4927, 1522, 4935, 1510, 4938, 1520, 4941, 1525, 4938, 1531, 4945, 1526, 4947, 1533, 4948, 1535, 4957, 1521, 4959, 1520, 4953, 1518, 4955, 1510, 4948, 1511, 4953, 1506, 4952, 1510, 4957, 1515, 4954, 1517, 4960, 1505, 4954, 1502, 4955, 1505, 4962, 1500, 4963, 1500, 4958, 1491, 4955, 1491, 4950, 1479, 4948, 1454, 4929, 1463, 4926, 1453, 4928, 1441, 4915, 1440, 4906, 1423, 4893, 1426, 4893, 1410, 4887, 1415, 4888, 1418, 4884, 1407, 4884, 1409, 4887, 1381, 4869, 1385, 4871, 1381, 4865, 1376, 4866, 1350, 4850, 1362, 4849, 1371, 4842, 1366, 4829, 1375, 4823, 1382, 4833, 1378, 4841, 1381, 4849, 1377, 4849, 1380, 4853, 1383, 4850, 1382, 4835, 1403, 4840, 1385, 4834, 1374, 4819, 1355, 4831, 1329, 4835, 1272, 4813, 1283, 4808, 1278, 4797, 1274, 4798, 1278, 4804, 1261, 4806, 1212, 4788, 1149, 4783, 1131, 4777, 1145, 4779, 1133, 4770, 1136, 4765, 1123, 4767, 1111, 4761, 1114, 4762, 1107, 4754, 1099, 4754, 1110, 4745, 1104, 4742, 1109, 4733, 1080, 4747, 1072, 4741, 1081, 4741, 1050, 4732, 1069, 4722, 1037, 4719, 1050, 4714, 1049, 4710, 1043, 4714, 1035, 4713, 1037, 4709, 1025, 4714, 1017, 4711, 1015, 4707, 1049, 4708, 1041, 4702, 1034, 4706, 1020, 4703, 1015, 4693, 1025, 4696, 1017, 4692, 1021, 4689, 1030, 4693, 1024, 4686, 1043, 4689, 1040, 4686, 1025, 4682, 1004, 4692, 1000, 4691, 1005, 4688, 999, 4686, 994, 4690, 992, 4684, 982, 4692, 979, 4688, 984, 4685, 979, 4686, 983, 4682, 974, 4688, 981, 4678, 979, 4672, 974, 4681, 969, 4680, 973, 4681, 968, 4684, 973, 4685, 971, 4691, 965, 4684, 960, 4687, 964, 4691, 959, 4691, 949, 4681, 971, 4668, 967, 4667, 971, 4663, 949, 4677, 947, 4668, 933, 4670, 935, 4672, 929, 4674, 945, 4672, 940, 4679, 935, 4677, 938, 4680, 935, 4685, 931, 4683, 933, 4686, 914, 4684, 927, 4686, 914, 4693, 930, 4688, 926, 4698, 938, 4690, 933, 4695, 938, 4700, 930, 4705, 927, 4700, 920, 4700, 910, 4706, 924, 4702, 932, 4708, 931, 4711, 942, 4702, 945, 4706, 942, 4707, 948, 4710, 941, 4712, 949, 4714, 923, 4720, 926, 4724, 920, 4726, 932, 4723, 928, 4726, 933, 4727, 931, 4731, 938, 4727, 927, 4732, 925, 4727, 917, 4741, 913, 4735, 907, 4741, 882, 4733, 887, 4728, 879, 4729, 873, 4737, 874, 4728, 869, 4720, 869, 4729, 855, 4736, 858, 4745, 853, 4742, 856, 4742, 852, 4739, 856, 4733, 851, 4727, 849, 4735, 843, 4732, 847, 4737, 847, 4747, 834, 4734, 836, 4744, 831, 4746, 827, 4740, 828, 4747, 810, 4752, 822, 4736, 806, 4751, 807, 4747, 802, 4746, 807, 4742, 798, 4744, 801, 4751, 780, 4756, 783, 4760, 778, 4763, 776, 4754, 761, 4752, 770, 4761, 757, 4753, 744, 4757, 746, 4759, 727, 4749, 731, 4742, 739, 4746, 734, 4739, 742, 4738, 744, 4743, 747, 4737, 764, 4746, 756, 4738, 762, 4742, 758, 4736, 771, 4737, 772, 4731, 788, 4725, 757, 4729, 760, 4732, 739, 4717, 751, 4702, 769, 4692, 780, 4673, 784, 4674, 778, 4670, 776, 4660, 832, 4650, 840, 4659, 863, 4661, 900, 4679, 892, 4669, 870, 4662, 849, 4646, 871, 4635, 896, 4634, 886, 4631, 889, 4630, 869, 4631, 855, 4642, 830, 4636, 826, 4627, 825, 4632, 807, 4632, 793, 4641, 761, 4643, 757, 4647, 760, 4657, 742, 4654, 739, 4661, 725, 4666, 729, 4672, 711, 4679, 684, 4670, 693, 4671, 707, 4691, 693, 4699, 669, 4697, 683, 4700, 679, 4708, 670, 4710, 659, 4707, 664, 4703, 659, 4698, 656, 4707, 651, 4707, 650, 4702, 644, 4705, 651, 4708, 649, 4711, 638, 4711, 640, 4718, 618, 4717, 628, 4720, 609, 4731, 613, 4733, 612, 4740, 637, 4741, 656, 4760, 636, 4771, 620, 4769, 617, 4776, 608, 4775, 611, 4783, 592, 4785, 604, 4788, 597, 4788, 602, 4792, 593, 4791, 597, 4796, 591, 4793, 591, 4798, 584, 4788, 584, 4796, 577, 4792, 577, 4799, 554, 4794, 548, 4798, 549, 4803, 535, 4803, 536, 4810, 521, 4802, 520, 4811, 510, 4810, 511, 4817, 496, 4812, 492, 4814, 494, 4820, 486, 4816, 466, 4822, 477, 4827, 470, 4829, 474, 4834, 467, 4838, 458, 4836, 461, 4844, 450, 4837, 447, 4846, 440, 4839, 441, 4843, 431, 4848, 427, 4844, 427, 4850, 412, 4842, 414, 4848, 403, 4848, 409, 4856, 398, 4855, 393, 4849, 373, 4854, 388, 4855, 386, 4861, 373, 4855, 372, 4859, 358, 4856, 340, 4865, 348, 4868, 355, 4863, 353, 4866, 366, 4869, 355, 4870, 357, 4875, 370, 4873, 356, 4878, 355, 4873, 350, 4876, 352, 4881, 348, 4877, 350, 4885, 344, 4882, 348, 4880, 342, 4880, 351, 4872, 343, 4870, 346, 4873, 337, 4871, 337, 4885, 329, 4879, 324, 4884, 300, 4882, 296, 4887, 295, 4879, 292, 4879, 292, 4887, 283, 4899, 276, 4895, 284, 4894, 279, 4891, 288, 4884, 276, 4877, 264, 4879, 262, 4885, 257, 4881, 257, 4886, 242, 4882, 245, 4887, 239, 4887, 235, 4893, 233, 4884, 222, 4886, 227, 4892, 216, 4885, 196, 4892, 182, 4888, 185, 4880, 193, 4875, 203, 4881, 182, 4871, 160, 4892, 152, 4890, 154, 4899, 146, 4897, 149, 4893, 141, 4895, 140, 4901, 137, 4896, 130, 4898, 126, 4891, 134, 4894, 122, 4878, 117, 4882, 123, 4889, 118, 4893, 122, 4901, 118, 4893, 113, 4899, 104, 4898, 92, 4881, 88, 4888, 97, 4895, 78, 4900, 84, 4894, 81, 4891, 87, 4893, 83, 4882, 103, 4876, 98, 4880, 109, 4882, 109, 4877, 124, 4872, 133, 4875, 133, 4870, 125, 4870, 174, 4850, 224, 4855, 224, 4859, 215, 4860, 224, 4874, 232, 4874, 227, 4863, 253, 4877, 250, 4873, 254, 4872, 238, 4864, 257, 4842, 287, 4833, 320, 4831, 317, 4829, 336, 4824, 352, 4833, 353, 4815, 373, 4803, 391, 4802, 387, 4799, 405, 4793, 412, 4792, 410, 4800, 415, 4803, 408, 4807, 415, 4803, 413, 4798, 425, 4804, 417, 4802, 429, 4797, 415, 4799, 415, 4789, 419, 4787, 411, 4788, 423, 4761, 429, 4754, 448, 4761, 440, 4753, 433, 4754, 431, 4741, 458, 4726, 483, 4736, 460, 4724, 468, 4712, 476, 4710, 477, 4703, 489, 4701, 482, 4700, 461, 4715, 402, 4720, 385, 4703, 395, 4694, 392, 4691, 409, 4694, 416, 4703, 393, 4679, 396, 4688, 378, 4696, 375, 4689, 379, 4688, 374, 4689, 378, 4693, 371, 4704, 368, 4701, 372, 4699, 363, 4699, 357, 4692, 363, 4699, 370, 4700, 367, 4703, 374, 4721, 363, 4725, 354, 4721, 341, 4694, 330, 4687, 334, 4681, 326, 4680, 325, 4686, 316, 4689, 313, 4680, 305, 4679, 307, 4675, 301, 4677, 298, 4664, 270, 4675, 268, 4669, 246, 4669, 251, 4672, 240, 4677, 244, 4677, 223, 4680, 219, 4680, 221, 4674, 220, 4678, 199, 4669, 214, 4672, 229, 4666, 222, 4666, 222, 4648, 238, 4647, 225, 4643, 222, 4647, 216, 4639, 216, 4630, 219, 4628, 218, 4633, 222, 4625, 236, 4620, 219, 4577, 220, 4568, 226, 4567, 220, 4565, 215, 4572, 211, 4560, 235, 4542, 227, 4542, 217, 4552, 213, 4549, 215, 4555, 204, 4555, 206, 4561, 198, 4559, 210, 4566, 203, 4578, 192, 4574, 190, 4578, 158, 4579, 121, 4568, 117, 4560, 124, 4558, 111, 4549, 100, 4531, 108, 4528, 108, 4523, 116, 4522, 112, 4517, 134, 4515, 139, 4510, 152, 4514, 150, 4525, 167, 4523, 171, 4518, 146, 4505, 167, 4507, 155, 4502, 159, 4499, 145, 4506, 85, 4484, 88, 4480, 98, 4483, 99, 4477, 108, 4479, 90, 4476, 88, 4472, 95, 4468, 93, 4464, 94, 4468, 89, 4471, 80, 4465, 89, 4463, 87, 4458, 94, 4453, 120, 4448, 114, 4443, 111, 4441, 118, 4448, 91, 4453, 92, 4457, 86, 4458, 88, 4463, 79, 4464, 77, 4473, 67, 4468, 69, 4456, 56, 4450, 55, 4444, 65, 4446, 64, 4439, 57, 4435, 47, 4436, 45, 4429, 49, 4421, 48, 4427, 72, 4431, 56, 4423, 53, 4416, 81, 4421, 74, 4414, 76, 4404, 114, 4384, 128, 4386, 126, 4390, 139, 4396, 131, 4399, 140, 4397, 135, 4394, 137, 4390, 127, 4390, 131, 4384, 131, 4371, 134, 4372, 130, 4370, 148, 4375, 132, 4367, 160, 4349, 194, 4357, 195, 4364, 202, 4365, 211, 4376, 247, 4370, 271, 4358, 270, 4354, 284, 4361, 275, 4364, 328, 4370, 350, 4358, 351, 4353, 348, 4327, 335, 4312, 339, 4312, 322, 4308, 331, 4302, 348, 4308, 346, 4305, 362, 4304, 362, 4289, 349, 4280, 358, 4282, 362, 4277, 327, 4287, 317, 4278, 321, 4282, 298, 4282, 301, 4283, 274, 4288, 259, 4298, 259, 4287, 249, 4281, 247, 4273, 234, 4274, 250, 4282, 242, 4289, 230, 4277, 210, 4269, 157, 4262, 156, 4259, 155, 4264, 164, 4265, 151, 4263, 86, 4232, 84, 4222, 90, 4218, 66, 4192, 74, 4186, 69, 4196, 86, 4200, 81, 4199, 98, 4193, 113, 4200, 129, 4217, 146, 4211, 121, 4205, 120, 4208, 104, 4192, 47, 4171, 17, 4146, 34, 4143, 20, 4148, 47, 4149, 50, 4148, 46, 4144, 53, 4145, 49, 4143, 64, 4141, 74, 4147, 83, 4145, 79, 4141, 118, 4137, 127, 4144, 156, 4150, 137, 4138, 153, 4133, 177, 4135, 182, 4140, 199, 4133, 216, 4135, 254, 4146, 239, 4141, 247, 4147, 238, 4154, 238, 4162, 219, 4162, 234, 4165, 240, 4176, 289, 4186, 291, 4193, 318, 4194, 333, 4206, 340, 4199, 336, 4200, 352, 4190, 374, 4198, 367, 4207, 377, 4200, 373, 4191, 354, 4182, 334, 4180, 337, 4186, 333, 4185, 337, 4169, 324, 4153, 311, 4149, 307, 4139, 316, 4135, 336, 4151, 331, 4159, 351, 4178, 373, 4177, 389, 4192, 417, 4198, 420, 4190, 416, 4183, 421, 4182, 418, 4180, 406, 4182, 377, 4171, 369, 4176, 357, 4174, 341, 4157, 353, 4145, 364, 4147, 357, 4140, 293, 4124, 299, 4128, 257, 4109, 255, 4089, 244, 4072, 152, 4004, 125, 3993, 147, 3993, 130, 3993, 157, 3998, 148, 3993, 158, 3986, 164, 3966, 256, 3987, 292, 3985, 321, 3970, 313, 3977, 321, 3975, 329, 3963, 326, 3959, 337, 3956, 335, 3951, 394, 3929, 406, 3935, 396, 3933, 402, 3937, 383, 3937, 439, 3938, 443, 3942, 441, 3939, 487, 3931, 497, 3935, 496, 3938, 481, 3939, 495, 3941, 482, 3949, 491, 3948, 498, 3962, 495, 3948, 501, 3942, 527, 3947, 504, 3943, 498, 3933, 487, 3930, 537, 3925, 528, 3925, 539, 3929, 521, 3927, 533, 3937, 531, 3931, 546, 3933, 541, 3930, 588, 3940, 620, 3939],
+      "center":[813, 4358],
+      "bbox":[17, 3922, 1806, 1313]
+    },
+    "TX":{
+      "shape":[[3960, 4548, 3926, 4590, 3956, 4534, 4038, 4483, 3960, 4548], [3765, 3367, 3774, 3393, 3796, 3396, 3793, 3416, 3813, 3422, 3840, 3397, 3880, 3431, 3914, 3413, 3927, 3451, 3950, 3405, 3986, 3430, 4014, 3417, 4009, 3427, 4053, 3458, 4085, 3428, 4145, 3427, 4173, 3408, 4222, 3421, 4233, 3404, 4291, 3445, 4352, 3464, 4354, 3465, 4369, 3483, 4424, 3481, 4426, 3583, 4426, 3596, 4431, 3781, 4468, 3822, 4467, 3859, 4487, 3873, 4481, 3881, 4500, 3900, 4492, 3912, 4519, 3935, 4524, 3965, 4488, 4061, 4497, 4154, 4459, 4204, 4475, 4227, 4474, 4229, 4432, 4233, 4316, 4293, 4369, 4255, 4315, 4261, 4329, 4237, 4323, 4210, 4296, 4236, 4284, 4227, 4275, 4256, 4294, 4268, 4282, 4276, 4310, 4294, 4298, 4288, 4297, 4303, 4263, 4330, 4241, 4321, 4255, 4349, 4233, 4348, 4247, 4349, 4238, 4364, 4258, 4351, 4229, 4378, 4162, 4418, 4119, 4424, 4115, 4438, 4160, 4418, 4045, 4481, 4112, 4432, 4068, 4448, 4060, 4430, 4018, 4451, 4040, 4474, 3994, 4498, 3973, 4481, 3973, 4514, 3933, 4533, 3902, 4593, 3888, 4582, 3868, 4592, 3870, 4608, 3892, 4619, 3845, 4737, 3850, 4754, 3834, 4754, 3850, 4780, 3833, 4783, 3859, 4840, 3847, 4861, 3873, 4881, 3876, 4927, 3897, 4936, 3873, 4955, 3896, 4954, 3903, 4938, 3905, 4957, 3879, 4958, 3854, 4981, 3816, 4943, 3718, 4936, 3676, 4902, 3636, 4898, 3613, 4872, 3559, 4859, 3533, 4775, 3504, 4740, 3506, 4694, 3490, 4681, 3496, 4633, 3435, 4586, 3426, 4549, 3370, 4492, 3362, 4445, 3335, 4412, 3309, 4324, 3247, 4252, 3215, 4237, 3218, 4218, 3207, 4226, 3194, 4188, 3081, 4178, 3040, 4157, 3027, 4179, 2978, 4179, 2937, 4252, 2938, 4277, 2915, 4284, 2892, 4321, 2863, 4319, 2783, 4256, 2738, 4240, 2665, 4174, 2641, 4116, 2644, 4054, 2622, 4023, 2615, 3980, 2540, 3924, 2459, 3816, 2420, 3792, 2396, 3737, 2373, 3725, 2373, 3724, 2358, 3706, 2363, 3681, 2946, 3738, 3017, 2874, 3023, 2874, 3487, 2903, 3471, 3276, 3484, 3274, 3520, 3312, 3565, 3315, 3571, 3299, 3595, 3323, 3598, 3347, 3692, 3360, 3710, 3380, 3729, 3362, 3765, 3367], [3892, 4640, 3925, 4591, 3867, 4713, 3892, 4640], [3880, 4832, 3866, 4788, 3868, 4714, 3868, 4773, 3902, 4937, 3880, 4832]],
+      "center":[3629, 3892],
+      "bbox":[2358, 2874, 2166, 2107]
+    },
+    "AL":{
+      "shape":[5342, 3152, 5751, 3113, 5757, 3137, 5866, 3512, 5911, 3591, 5907, 3611, 5927, 3621, 5902, 3649, 5896, 3708, 5919, 3762, 5916, 3831, 5939, 3865, 5910, 3869, 5508, 3912, 5506, 3942, 5548, 3975, 5545, 4009, 5544, 4009, 5552, 4017, 5539, 4037, 5516, 4037, 5518, 4048, 5534, 4045, 5527, 4052, 5450, 4070, 5500, 4054, 5480, 4029, 5466, 4030, 5458, 3981, 5441, 3978, 5426, 4000, 5435, 4008, 5430, 4053, 5386, 4042, 5385, 4042, 5349, 3751, 5360, 3170, 5342, 3152],
+      "center":[5617, 3547],
+      "bbox":[5342, 3113, 596, 956]
+    },
+    "NC":{
+      "shape":[[7201, 2563, 7205, 2562, 7205, 2563, 7287, 2693, 7245, 2651, 7201, 2563], [6319, 2725, 6333, 2723, 7179, 2568, 7180, 2569, 7175, 2579, 7200, 2600, 7202, 2588, 7236, 2649, 7199, 2610, 7200, 2632, 7214, 2636, 7164, 2617, 7193, 2645, 7174, 2653, 7155, 2639, 7171, 2659, 7130, 2648, 7157, 2663, 7130, 2669, 7142, 2671, 7119, 2688, 7091, 2665, 7093, 2636, 7052, 2626, 7089, 2638, 7098, 2707, 7206, 2677, 7191, 2684, 7209, 2684, 7198, 2697, 7209, 2714, 7198, 2716, 7215, 2729, 7199, 2731, 7207, 2736, 7221, 2731, 7215, 2690, 7234, 2690, 7224, 2680, 7239, 2671, 7264, 2716, 7255, 2721, 7260, 2741, 7239, 2733, 7244, 2746, 7212, 2802, 7178, 2792, 7173, 2806, 7168, 2785, 7162, 2804, 7151, 2800, 7144, 2792, 7154, 2788, 7138, 2782, 7161, 2779, 7151, 2766, 7116, 2785, 7138, 2787, 7145, 2804, 7057, 2791, 7084, 2815, 7089, 2804, 7128, 2813, 7118, 2828, 7130, 2815, 7140, 2816, 7137, 2828, 7148, 2815, 7167, 2824, 7127, 2856, 7161, 2848, 7127, 2892, 7076, 2863, 7086, 2873, 7072, 2883, 7086, 2874, 7112, 2907, 7127, 2896, 7138, 2910, 7143, 2889, 7156, 2898, 7153, 2881, 7174, 2896, 7160, 2880, 7175, 2883, 7175, 2859, 7185, 2890, 7203, 2865, 7203, 2890, 7192, 2892, 7181, 2928, 7161, 2914, 7166, 2933, 7152, 2917, 7140, 2930, 7153, 2934, 7093, 2956, 7082, 2940, 7089, 2954, 7077, 2954, 7084, 2960, 7063, 2986, 7048, 2983, 7060, 2970, 7038, 2953, 7051, 2971, 7040, 2980, 7056, 2994, 7003, 3047, 6991, 3097, 6976, 3076, 6979, 3133, 6944, 3128, 6892, 3152, 6891, 3152, 6686, 3010, 6511, 3038, 6509, 3016, 6480, 2987, 6465, 3002, 6461, 2982, 6249, 3003, 6143, 3060, 6140, 3060, 5983, 3084, 5953, 3088, 5952, 3042, 5989, 3028, 5990, 3001, 6009, 2978, 6067, 2961, 6114, 2916, 6140, 2910, 6147, 2879, 6165, 2877, 6186, 2847, 6202, 2866, 6229, 2830, 6278, 2822, 6293, 2785, 6322, 2773, 6319, 2725, 6319, 2725], [7183, 2567, 7187, 2566, 7187, 2566, 7203, 2576, 7183, 2567], [7288, 2695, 7308, 2729, 7313, 2798, 7281, 2813, 7311, 2788, 7306, 2729, 7288, 2695]],
+      "center":[6700, 2826],
+      "bbox":[5952, 2562, 1361, 590]
+    },
+    "ND":{
+      "shape":[3950, 502, 3967, 564, 3957, 591, 3957, 592, 3959, 670, 3996, 776, 3997, 891, 4008, 907, 4001, 959, 4028, 1023, 4033, 1100, 4002, 1099, 3164, 1062, 3023, 1050, 3074, 458, 3116, 461, 3950, 502],
+      "center":[3524, 756],
+      "bbox":[3023, 458, 1010, 642]
+    },
+    "NE":{
+      "shape":[2971, 1616, 2976, 1616, 3755, 1662, 3820, 1709, 3848, 1690, 3931, 1693, 4010, 1732, 4020, 1761, 4043, 1765, 4044, 1765, 4045, 1765, 4054, 1768, 4059, 1827, 4074, 1860, 4089, 1865, 4099, 1898, 4095, 1948, 4121, 1965, 4115, 1986, 4127, 1995, 4119, 2014, 4131, 2018, 4126, 2040, 4136, 2071, 4125, 2102, 4143, 2131, 4142, 2133, 4159, 2139, 4159, 2184, 4185, 2197, 4195, 2236, 4211, 2244, 4206, 2243, 3243, 2215, 3215, 2213, 3228, 2022, 3006, 2005, 2937, 1999, 2971, 1616, 2971, 1616],
+      "center":[3612, 1930],
+      "bbox":[2937, 1616, 1274, 628]
+    },
+    "NY":{
+      "shape":[[7362, 1671, 7357, 1658, 7401, 1659, 7402, 1642, 7477, 1620, 7517, 1573, 7481, 1633, 7506, 1626, 7517, 1598, 7550, 1598, 7581, 1575, 7480, 1659, 7339, 1731, 7361, 1728, 7312, 1749, 7333, 1725, 7294, 1740, 7303, 1702, 7327, 1700, 7328, 1680, 7341, 1689, 7346, 1667, 7362, 1671], [7184, 893, 7196, 969, 7218, 999, 7216, 1076, 7241, 1126, 7239, 1162, 7255, 1151, 7267, 1166, 7302, 1314, 7302, 1327, 7304, 1452, 7307, 1462, 7331, 1595, 7345, 1608, 7315, 1637, 7331, 1657, 7330, 1657, 7320, 1695, 7303, 1699, 7293, 1722, 7292, 1722, 7297, 1663, 7175, 1625, 7167, 1623, 7121, 1609, 7103, 1589, 7094, 1550, 7066, 1546, 7046, 1524, 6427, 1652, 6418, 1601, 6418, 1601, 6494, 1530, 6527, 1480, 6507, 1445, 6511, 1430, 6486, 1428, 6481, 1394, 6608, 1347, 6657, 1344, 6692, 1358, 6744, 1336, 6778, 1344, 6770, 1334, 6866, 1255, 6865, 1239, 6837, 1205, 6869, 1168, 6846, 1180, 6855, 1163, 6841, 1160, 6834, 1184, 6817, 1160, 6877, 1095, 6883, 1064, 6934, 987, 6991, 943, 7184, 893], [7409, 1706, 7398, 1711, 7469, 1664, 7409, 1706], [7382, 1718, 7363, 1729, 7406, 1703, 7382, 1718], [7292, 1741, 7269, 1767, 7272, 1740, 7292, 1741]],
+      "center":[6982, 1368],
+      "bbox":[6418, 893, 1163, 873]
+    },
+    "GA":{
+      "shape":[6143, 3060, 6144, 3060, 6113, 3123, 6176, 3156, 6176, 3156, 6196, 3157, 6258, 3247, 6374, 3325, 6375, 3348, 6410, 3379, 6457, 3400, 6481, 3470, 6523, 3496, 6545, 3561, 6579, 3568, 6580, 3568, 6593, 3574, 6582, 3589, 6576, 3573, 6575, 3590, 6562, 3577, 6582, 3595, 6574, 3607, 6549, 3590, 6554, 3602, 6539, 3599, 6557, 3608, 6523, 3597, 6568, 3616, 6555, 3636, 6545, 3622, 6548, 3636, 6521, 3624, 6546, 3641, 6534, 3650, 6555, 3641, 6558, 3655, 6553, 3669, 6540, 3655, 6547, 3669, 6522, 3676, 6555, 3676, 6543, 3705, 6528, 3694, 6543, 3716, 6509, 3714, 6527, 3718, 6526, 3731, 6527, 3721, 6548, 3726, 6534, 3752, 6522, 3740, 6520, 3761, 6492, 3747, 6524, 3780, 6493, 3792, 6528, 3792, 6524, 3814, 6507, 3812, 6526, 3836, 6507, 3840, 6508, 3840, 6456, 3827, 6438, 3838, 6448, 3917, 6427, 3924, 6411, 3885, 5968, 3918, 5939, 3866, 5939, 3865, 5916, 3831, 5919, 3762, 5896, 3708, 5902, 3649, 5927, 3621, 5907, 3611, 5911, 3591, 5866, 3512, 5757, 3137, 5751, 3113, 5772, 3111, 5944, 3089, 5953, 3088, 5983, 3084, 6140, 3060, 6143, 3060],
+      "center":[6159, 3499],
+      "bbox":[5751, 3060, 842, 864]
+    },
+    "NV":{
+      "shape":[1536, 1604, 1345, 2545, 1345, 2545, 1315, 2697, 1293, 2725, 1276, 2722, 1260, 2695, 1202, 2695, 1195, 2871, 1179, 2902, 1179, 2903, 553, 1964, 701, 1416, 703, 1408, 722, 1413, 1117, 1512, 1117, 1512, 1118, 1512, 1535, 1604, 1536, 1604],
+      "center":[1045, 1927],
+      "bbox":[553, 1408, 983, 1495]
+    },
+    "TN":{
+      "shape":[6012, 2768, 6017, 2767, 6319, 2725, 6319, 2725, 6322, 2773, 6293, 2785, 6278, 2822, 6229, 2830, 6202, 2866, 6186, 2847, 6165, 2877, 6147, 2879, 6140, 2910, 6114, 2916, 6067, 2961, 6009, 2978, 5990, 3001, 5989, 3028, 5952, 3042, 5953, 3088, 5944, 3089, 5772, 3111, 5751, 3113, 5342, 3152, 5341, 3152, 5014, 3177, 5009, 3177, 5045, 3148, 5028, 3122, 5041, 3100, 5026, 3095, 5038, 3082, 5048, 3098, 5046, 3067, 5065, 3073, 5057, 3059, 5073, 3047, 5055, 3032, 5093, 3013, 5083, 3000, 5102, 2996, 5089, 2979, 5089, 2978, 5107, 2950, 5089, 2931, 5113, 2927, 5100, 2914, 5115, 2907, 5110, 2881, 5114, 2880, 5118, 2880, 5118, 2882, 5129, 2880, 5140, 2878, 5339, 2863, 5334, 2828, 6011, 2769, 6012, 2768],
+      "center":[5533, 2967],
+      "bbox":[5009, 2725, 1313, 453]
+    },
+    "CA":{
+      "shape":[124, 1236, 703, 1408, 701, 1416, 553, 1964, 1179, 2903, 1179, 2903, 1174, 2927, 1193, 2962, 1196, 3013, 1229, 3058, 1178, 3078, 1153, 3106, 1139, 3179, 1102, 3200, 1097, 3220, 1105, 3229, 1092, 3262, 1121, 3280, 1121, 3315, 1106, 3331, 1075, 3331, 1073, 3331, 684, 3281, 675, 3245, 689, 3269, 691, 3255, 679, 3241, 671, 3251, 680, 3184, 663, 3123, 582, 3010, 537, 3005, 544, 2987, 533, 2946, 487, 2941, 442, 2909, 390, 2833, 254, 2790, 232, 2760, 261, 2654, 231, 2628, 243, 2608, 239, 2587, 191, 2528, 176, 2457, 133, 2383, 136, 2329, 157, 2327, 180, 2295, 168, 2261, 138, 2254, 112, 2214, 108, 2130, 123, 2084, 138, 2084, 133, 2123, 182, 2166, 167, 2153, 165, 2102, 151, 2088, 158, 2072, 145, 2055, 157, 2049, 254, 2078, 272, 2065, 268, 2080, 298, 2084, 273, 2064, 243, 2069, 268, 2048, 223, 2060, 209, 2039, 220, 2032, 188, 2052, 176, 2035, 182, 2009, 177, 2043, 159, 2021, 144, 2025, 130, 2078, 99, 2053, 79, 2009, 61, 2023, 80, 1997, 79, 1979, 94, 2014, 71, 1934, 12, 1822, 24, 1799, 22, 1739, 43, 1704, 47, 1650, 0, 1548, 4, 1513, 47, 1463, 45, 1477, 72, 1455, 65, 1446, 48, 1461, 77, 1424, 78, 1397, 118, 1329, 104, 1274, 124, 1236],
+      "center":[507, 2428],
+      "bbox":[0, 1236, 1229, 2095]
+    },
+    "OK":{
+      "shape":[3178, 2791, 3178, 2791, 4284, 2819, 4321, 2819, 4322, 2863, 4323, 2915, 4327, 2945, 4356, 3126, 4352, 3449, 4352, 3464, 4291, 3445, 4233, 3404, 4222, 3421, 4173, 3408, 4145, 3427, 4085, 3428, 4053, 3458, 4009, 3427, 4014, 3417, 3986, 3430, 3950, 3405, 3927, 3451, 3914, 3413, 3880, 3431, 3840, 3397, 3813, 3422, 3793, 3416, 3796, 3396, 3774, 3393, 3765, 3367, 3765, 3367, 3729, 3362, 3710, 3380, 3692, 3360, 3598, 3347, 3595, 3323, 3571, 3299, 3565, 3315, 3520, 3312, 3484, 3274, 3471, 3276, 3487, 2903, 3153, 2884, 3023, 2874, 3030, 2791, 3031, 2779, 3134, 2787, 3178, 2791],
+      "center":[3930, 3108],
+      "bbox":[3023, 2779, 1332, 686]
+    },
+    "OH":{
+      "shape":[5911, 1786, 5991, 1817, 6004, 1801, 5999, 1814, 6023, 1808, 5975, 1832, 6041, 1829, 6027, 1817, 6061, 1832, 6123, 1797, 6162, 1796, 6219, 1734, 6320, 1675, 6321, 1675, 6364, 1929, 6364, 1929, 6345, 1942, 6363, 1991, 6345, 2130, 6303, 2183, 6281, 2195, 6267, 2184, 6254, 2214, 6237, 2217, 6224, 2255, 6236, 2284, 6216, 2296, 6209, 2275, 6192, 2271, 6172, 2320, 6184, 2354, 6168, 2361, 6166, 2388, 6127, 2398, 6127, 2398, 6084, 2371, 6074, 2341, 6017, 2380, 5981, 2364, 5961, 2382, 5927, 2360, 5874, 2358, 5831, 2303, 5780, 2312, 5778, 2313, 5721, 1845, 5718, 1819, 5906, 1787, 5906, 1787, 5911, 1786],
+      "center":[6096, 2082],
+      "bbox":[5718, 1675, 646, 724]
+    },
+    "WY":{
+      "shape":[3005, 1232, 3004, 1235, 2971, 1616, 2971, 1616, 2937, 1999, 2924, 1998, 2225, 1917, 2214, 1915, 1927, 1871, 1956, 1693, 1959, 1681, 2037, 1210, 2037, 1210, 2042, 1174, 2053, 1110, 3001, 1232, 3005, 1232],
+      "center":[2487, 1535],
+      "bbox":[1927, 1110, 1078, 889]
+    },
+    "FL":{
+      "shape":[6508, 3840, 6528, 3854, 6539, 3839, 6543, 3875, 6530, 3858, 6584, 4003, 6595, 4014, 6587, 3987, 6675, 4136, 6637, 4084, 6664, 4136, 6750, 4223, 6762, 4245, 6748, 4256, 6756, 4285, 6793, 4358, 6731, 4264, 6724, 4233, 6740, 4221, 6739, 4270, 6756, 4303, 6745, 4219, 6711, 4219, 6718, 4202, 6694, 4187, 6727, 4263, 6862, 4481, 6836, 4471, 6851, 4487, 6868, 4482, 6890, 4522, 6876, 4517, 6902, 4547, 6896, 4539, 6921, 4741, 6919, 4751, 6915, 4716, 6894, 4786, 6893, 4872, 6861, 4866, 6868, 4874, 6848, 4887, 6819, 4884, 6773, 4906, 6755, 4887, 6756, 4867, 6785, 4885, 6801, 4874, 6754, 4856, 6738, 4832, 6753, 4810, 6734, 4825, 6719, 4803, 6735, 4792, 6720, 4783, 6716, 4801, 6704, 4777, 6667, 4764, 6694, 4777, 6657, 4762, 6635, 4770, 6631, 4759, 6645, 4756, 6617, 4739, 6597, 4668, 6567, 4666, 6603, 4617, 6562, 4660, 6540, 4586, 6556, 4557, 6532, 4585, 6506, 4569, 6535, 4610, 6511, 4595, 6510, 4610, 6447, 4528, 6443, 4503, 6421, 4493, 6465, 4477, 6428, 4479, 6458, 4445, 6457, 4394, 6438, 4420, 6436, 4399, 6419, 4396, 6429, 4392, 6403, 4383, 6417, 4395, 6402, 4404, 6432, 4409, 6420, 4418, 6423, 4447, 6386, 4425, 6408, 4454, 6382, 4422, 6398, 4307, 6394, 4244, 6383, 4235, 6393, 4239, 6391, 4218, 6367, 4201, 6354, 4168, 6314, 4174, 6291, 4153, 6298, 4145, 6244, 4116, 6240, 4089, 6213, 4079, 6187, 4044, 6127, 4016, 6093, 4018, 6065, 4038, 6073, 4051, 6055, 4046, 6075, 4064, 6044, 4065, 5988, 4110, 5992, 4091, 5970, 4113, 5910, 4130, 5896, 4096, 5909, 4127, 5913, 4096, 5845, 4047, 5883, 4064, 5895, 4056, 5836, 4037, 5868, 4007, 5861, 3999, 5838, 4026, 5828, 4011, 5810, 4015, 5816, 4030, 5830, 4026, 5836, 4049, 5781, 4023, 5700, 4011, 5768, 4007, 5751, 3984, 5715, 3998, 5701, 3986, 5687, 4010, 5589, 4032, 5639, 4008, 5613, 3998, 5612, 3979, 5604, 4010, 5584, 3985, 5589, 4017, 5532, 4051, 5561, 4019, 5545, 4009, 5545, 4009, 5548, 3975, 5506, 3942, 5508, 3912, 5910, 3869, 5939, 3865, 5939, 3866, 5968, 3918, 6411, 3885, 6427, 3924, 6448, 3917, 6438, 3838, 6456, 3827, 6508, 3840],
+      "center":[6585, 4335],
+      "bbox":[5506, 3827, 1414, 1079]
+    },
+    "SD":{
+      "shape":[3023, 1050, 3164, 1062, 4002, 1099, 4033, 1100, 4029, 1123, 3992, 1163, 4047, 1222, 4045, 1570, 4025, 1570, 4035, 1591, 4026, 1613, 4047, 1642, 4018, 1718, 4044, 1765, 4043, 1765, 4020, 1761, 4010, 1732, 3931, 1693, 3848, 1690, 3820, 1709, 3755, 1662, 2976, 1616, 2971, 1616, 3004, 1235, 3005, 1232, 3022, 1057, 3023, 1050],
+      "center":[3544, 1347],
+      "bbox":[2971, 1050, 1076, 715]
+    },
+    "SC":{
+      "shape":[6176, 3156, 6113, 3123, 6144, 3060, 6143, 3060, 6249, 3003, 6461, 2982, 6465, 3002, 6480, 2987, 6509, 3016, 6511, 3038, 6686, 3010, 6891, 3152, 6891, 3152, 6826, 3243, 6815, 3270, 6821, 3298, 6801, 3279, 6812, 3254, 6800, 3266, 6799, 3286, 6821, 3302, 6814, 3316, 6806, 3304, 6812, 3316, 6795, 3313, 6807, 3317, 6785, 3340, 6797, 3341, 6769, 3342, 6758, 3362, 6768, 3367, 6729, 3404, 6719, 3386, 6734, 3368, 6716, 3392, 6709, 3373, 6716, 3402, 6698, 3393, 6727, 3408, 6714, 3429, 6706, 3421, 6710, 3436, 6683, 3450, 6667, 3441, 6675, 3421, 6658, 3443, 6680, 3450, 6661, 3470, 6641, 3436, 6651, 3472, 6623, 3460, 6628, 3470, 6597, 3471, 6639, 3481, 6630, 3502, 6646, 3486, 6647, 3504, 6618, 3520, 6608, 3485, 6612, 3514, 6573, 3474, 6591, 3506, 6576, 3517, 6615, 3529, 6594, 3555, 6596, 3527, 6582, 3532, 6595, 3539, 6579, 3568, 6579, 3568, 6545, 3561, 6523, 3496, 6481, 3470, 6457, 3400, 6410, 3379, 6375, 3348, 6374, 3325, 6258, 3247, 6196, 3157, 6176, 3156, 6176, 3156],
+      "center":[6541, 3231],
+      "bbox":[6113, 2982, 779, 586]
+    },
+    "CT":{
+      "shape":[7541, 1398, 7568, 1526, 7567, 1528, 7539, 1536, 7531, 1523, 7535, 1539, 7521, 1547, 7504, 1553, 7491, 1539, 7496, 1559, 7426, 1581, 7424, 1569, 7401, 1605, 7331, 1655, 7331, 1657, 7315, 1637, 7345, 1608, 7331, 1595, 7307, 1462, 7304, 1452, 7321, 1448, 7541, 1398],
+      "center":[7442, 1505],
+      "bbox":[7304, 1398, 264, 259]
+    },
+    "WV":{
+      "shape":[6364, 1929, 6369, 1959, 6394, 2102, 6546, 2075, 6549, 2091, 6565, 2173, 6610, 2111, 6632, 2114, 6652, 2069, 6669, 2087, 6701, 2086, 6702, 2065, 6726, 2061, 6736, 2044, 6790, 2051, 6785, 2062, 6804, 2069, 6817, 2100, 6817, 2101, 6809, 2139, 6720, 2092, 6723, 2150, 6670, 2239, 6647, 2227, 6621, 2315, 6560, 2293, 6550, 2358, 6492, 2481, 6507, 2491, 6493, 2505, 6500, 2512, 6479, 2534, 6467, 2527, 6433, 2553, 6418, 2545, 6415, 2567, 6368, 2591, 6344, 2575, 6301, 2608, 6258, 2584, 6247, 2552, 6247, 2551, 6222, 2552, 6212, 2535, 6192, 2533, 6155, 2489, 6159, 2478, 6128, 2452, 6127, 2399, 6127, 2398, 6166, 2388, 6168, 2361, 6184, 2354, 6172, 2320, 6192, 2271, 6209, 2275, 6216, 2296, 6236, 2284, 6224, 2255, 6237, 2217, 6254, 2214, 6267, 2184, 6281, 2195, 6303, 2183, 6345, 2130, 6363, 1991, 6345, 1942, 6364, 1929, 6364, 1929],
+      "center":[6378, 2332],
+      "bbox":[6127, 1929, 690, 680]
+    },
+    "DC":{
+      "shape":[6928, 2160, 6921, 2156, 6921, 2156, 6924, 2150, 6930, 2142, 6953, 2157, 6940, 2177, 6939, 2177, 6944, 2161, 6928, 2160],
+      "center":[6934, 2153],
+      "bbox":[6921, 2142, 33, 36]
+    },
+    "WI":{
+      "shape":[[5338, 1169, 5315, 1247, 5302, 1264, 5292, 1258, 5286, 1242, 5305, 1190, 5314, 1193, 5326, 1164, 5338, 1169], [4702, 927, 4791, 882, 4806, 895, 4783, 954, 4818, 940, 4808, 931, 4855, 954, 4855, 954, 4883, 965, 4898, 996, 5176, 1057, 5173, 1078, 5222, 1098, 5217, 1122, 5225, 1135, 5213, 1163, 5244, 1157, 5236, 1192, 5255, 1208, 5256, 1209, 5255, 1232, 5227, 1244, 5210, 1289, 5214, 1313, 5205, 1316, 5221, 1322, 5264, 1256, 5284, 1246, 5301, 1264, 5282, 1331, 5285, 1384, 5268, 1401, 5261, 1434, 5268, 1483, 5246, 1566, 5251, 1612, 5276, 1656, 5275, 1711, 5275, 1711, 4872, 1739, 4871, 1739, 4860, 1714, 4809, 1695, 4789, 1625, 4804, 1599, 4782, 1580, 4779, 1554, 4779, 1552, 4772, 1499, 4744, 1458, 4690, 1430, 4667, 1391, 4614, 1357, 4585, 1355, 4548, 1321, 4551, 1218, 4566, 1188, 4550, 1165, 4532, 1162, 4534, 1135, 4558, 1095, 4609, 1063, 4604, 948, 4629, 930, 4629, 932, 4649, 944, 4702, 927]],
+      "center":[4969, 1326],
+      "bbox":[4532, 882, 805, 857]
+    },
+    "KY":{
+      "shape":[[5118, 2880, 5110, 2881, 5109, 2880, 5110, 2865, 5118, 2880], [5778, 2313, 5780, 2312, 5831, 2303, 5874, 2358, 5927, 2360, 5961, 2382, 5981, 2364, 6017, 2380, 6074, 2341, 6084, 2371, 6127, 2398, 6127, 2398, 6127, 2399, 6128, 2452, 6159, 2478, 6155, 2489, 6192, 2533, 6212, 2535, 6222, 2552, 6247, 2551, 6247, 2552, 6230, 2571, 6144, 2648, 6127, 2694, 6098, 2707, 6091, 2729, 6012, 2768, 6011, 2769, 5334, 2828, 5339, 2863, 5140, 2878, 5129, 2880, 5137, 2853, 5160, 2860, 5159, 2831, 5171, 2825, 5161, 2817, 5167, 2783, 5166, 2783, 5164, 2782, 5158, 2769, 5185, 2735, 5266, 2759, 5261, 2698, 5320, 2674, 5305, 2642, 5322, 2614, 5322, 2613, 5323, 2613, 5340, 2610, 5340, 2587, 5383, 2602, 5385, 2574, 5462, 2603, 5472, 2578, 5501, 2558, 5531, 2585, 5550, 2566, 5553, 2530, 5574, 2523, 5567, 2513, 5585, 2539, 5620, 2553, 5637, 2538, 5645, 2489, 5666, 2484, 5675, 2455, 5701, 2433, 5695, 2396, 5734, 2399, 5786, 2374, 5788, 2355, 5773, 2350, 5779, 2338, 5768, 2324, 5777, 2313, 5778, 2313]],
+      "center":[5828, 2581],
+      "bbox":[5109, 2303, 1138, 577]
+    },
+    "KS":{
+      "shape":[3215, 2213, 3243, 2215, 4206, 2243, 4211, 2244, 4210, 2245, 4242, 2269, 4266, 2264, 4277, 2292, 4262, 2293, 4241, 2331, 4274, 2360, 4282, 2393, 4319, 2406, 4321, 2819, 4284, 2819, 3178, 2791, 3178, 2791, 3210, 2296, 3215, 2213],
+      "center":[3753, 2506],
+      "bbox":[3178, 2213, 1143, 606]
+    },
+    "OR":{
+      "shape":[477, 509, 504, 509, 532, 539, 534, 584, 521, 593, 534, 585, 521, 632, 526, 623, 577, 662, 633, 657, 633, 657, 691, 657, 734, 693, 810, 686, 863, 705, 955, 690, 1008, 704, 1037, 696, 1297, 762, 1309, 764, 1309, 766, 1319, 800, 1346, 822, 1352, 851, 1276, 949, 1267, 976, 1234, 998, 1194, 1057, 1195, 1080, 1231, 1110, 1197, 1168, 1117, 1512, 1117, 1512, 722, 1413, 703, 1408, 124, 1236, 124, 1235, 110, 1211, 113, 1167, 135, 1113, 125, 1067, 178, 985, 186, 997, 204, 973, 210, 988, 212, 967, 187, 981, 223, 930, 236, 921, 261, 943, 237, 918, 223, 929, 252, 869, 266, 879, 253, 868, 283, 797, 294, 802, 283, 796, 297, 762, 310, 772, 297, 760, 306, 728, 347, 665, 359, 605, 376, 607, 367, 590, 384, 570, 375, 575, 375, 554, 385, 520, 399, 511, 399, 466, 421, 501, 415, 480, 464, 485, 477, 509],
+      "center":[746, 1019],
+      "bbox":[110, 466, 1241, 1045]
+    },
+    "LA":{
+      "shape":[4426, 3583, 4464, 3582, 4879, 3569, 4894, 3568, 4894, 3569, 4889, 3586, 4903, 3571, 4912, 3587, 4897, 3615, 4915, 3623, 4900, 3641, 4922, 3637, 4913, 3654, 4928, 3664, 4910, 3656, 4908, 3669, 4932, 3675, 4928, 3692, 4948, 3689, 4931, 3722, 4902, 3724, 4903, 3736, 4929, 3733, 4918, 3752, 4905, 3747, 4918, 3759, 4892, 3798, 4877, 3794, 4873, 3810, 4891, 3811, 4872, 3813, 4867, 3838, 4850, 3837, 4869, 3845, 4850, 3857, 4858, 3885, 4842, 3879, 4853, 3903, 4831, 3910, 4848, 3948, 4836, 3959, 5153, 3940, 5138, 4007, 5183, 4090, 5199, 4096, 5199, 4096, 5184, 4098, 5169, 4129, 5151, 4128, 5149, 4144, 5187, 4158, 5192, 4133, 5214, 4118, 5210, 4139, 5227, 4140, 5214, 4144, 5226, 4153, 5217, 4151, 5220, 4166, 5236, 4172, 5224, 4178, 5205, 4161, 5201, 4170, 5216, 4168, 5205, 4182, 5181, 4182, 5214, 4204, 5175, 4191, 5191, 4208, 5164, 4211, 5210, 4237, 5204, 4249, 5243, 4248, 5231, 4254, 5255, 4255, 5255, 4268, 5266, 4253, 5282, 4271, 5277, 4286, 5298, 4277, 5284, 4290, 5298, 4291, 5293, 4306, 5277, 4294, 5281, 4325, 5260, 4300, 5236, 4340, 5256, 4293, 5246, 4288, 5249, 4301, 5235, 4307, 5222, 4276, 5187, 4272, 5197, 4273, 5197, 4253, 5179, 4236, 5195, 4263, 5159, 4269, 5171, 4258, 5160, 4239, 5102, 4232, 5106, 4203, 5101, 4219, 5092, 4198, 5101, 4216, 5089, 4233, 5120, 4242, 5125, 4273, 5111, 4266, 5122, 4296, 5087, 4319, 5091, 4288, 5070, 4275, 5065, 4289, 5054, 4267, 5049, 4281, 5041, 4267, 5043, 4282, 5026, 4277, 5031, 4297, 5013, 4285, 5023, 4312, 5012, 4300, 5017, 4314, 5001, 4319, 4987, 4304, 4982, 4317, 4972, 4309, 4996, 4297, 4991, 4288, 4948, 4273, 4939, 4285, 4912, 4244, 4864, 4246, 4862, 4223, 4846, 4224, 4858, 4201, 4810, 4212, 4813, 4188, 4751, 4205, 4770, 4215, 4769, 4232, 4786, 4231, 4740, 4249, 4582, 4207, 4476, 4226, 4475, 4227, 4459, 4204, 4497, 4154, 4488, 4061, 4524, 3965, 4519, 3935, 4492, 3912, 4500, 3900, 4481, 3881, 4487, 3873, 4467, 3859, 4468, 3822, 4431, 3781, 4426, 3596, 4426, 3583],
+      "center":[4688, 3984],
+      "bbox":[4426, 3568, 872, 772]
+    },
+    "WA":{
+      "shape":[717, 0, 1411, 188, 1428, 192, 1306, 692, 1315, 731, 1304, 745, 1309, 764, 1297, 762, 1037, 696, 1008, 704, 955, 690, 863, 705, 810, 686, 734, 693, 691, 657, 633, 657, 633, 656, 586, 660, 539, 635, 528, 620, 541, 567, 535, 534, 510, 509, 483, 507, 446, 465, 392, 456, 416, 389, 407, 438, 415, 443, 422, 427, 431, 442, 422, 423, 431, 419, 429, 393, 435, 403, 437, 387, 456, 393, 444, 375, 417, 370, 422, 336, 433, 355, 435, 342, 468, 337, 434, 312, 419, 331, 430, 294, 436, 171, 419, 131, 423, 80, 442, 51, 436, 39, 446, 40, 517, 109, 605, 147, 627, 139, 615, 143, 630, 173, 629, 161, 645, 163, 644, 184, 653, 176, 650, 163, 668, 160, 659, 170, 672, 214, 660, 214, 639, 245, 646, 213, 638, 225, 637, 215, 622, 247, 572, 293, 617, 290, 579, 287, 610, 257, 641, 250, 671, 219, 674, 228, 674, 204, 684, 212, 682, 245, 671, 239, 664, 251, 659, 239, 657, 271, 644, 262, 652, 273, 641, 278, 663, 271, 665, 289, 645, 330, 633, 326, 635, 339, 627, 323, 643, 302, 626, 310, 612, 342, 618, 296, 592, 328, 572, 321, 591, 330, 568, 344, 593, 335, 575, 358, 590, 339, 587, 359, 592, 341, 602, 340, 601, 353, 605, 338, 618, 358, 648, 322, 659, 340, 660, 328, 678, 325, 678, 279, 690, 296, 681, 263, 713, 214, 735, 203, 717, 185, 721, 157, 705, 165, 713, 192, 698, 171, 702, 149, 726, 146, 709, 126, 712, 111, 696, 115, 695, 97, 720, 113, 717, 86, 735, 88, 728, 72, 736, 57, 712, 54, 718, 45, 706, 19, 714, 13, 706, 8, 717, 0],
+      "center":[952, 376],
+      "bbox":[392, 0, 1036, 764]
+    },
+    "CO":{
+      "shape":[2214, 1915, 2225, 1917, 2924, 1998, 2937, 1999, 3006, 2005, 3228, 2022, 3215, 2213, 3210, 2296, 3178, 2791, 3134, 2787, 3031, 2779, 3017, 2778, 2182, 2687, 2105, 2676, 2213, 1925, 2214, 1915],
+      "center":[2749, 2301],
+      "bbox":[2105, 1915, 1123, 875]
+    },
+    "PA":{
+      "shape":[6321, 1675, 6417, 1602, 6418, 1601, 6427, 1652, 7046, 1524, 7066, 1546, 7094, 1550, 7103, 1589, 7121, 1609, 7167, 1623, 7166, 1623, 7122, 1706, 7138, 1727, 7125, 1764, 7132, 1786, 7151, 1788, 7157, 1810, 7217, 1848, 7133, 1938, 7132, 1937, 7100, 1940, 7082, 1965, 7050, 1972, 6559, 2073, 6546, 2075, 6394, 2102, 6369, 1959, 6364, 1929, 6321, 1675],
+      "center":[6777, 1802],
+      "bbox":[6321, 1524, 896, 578]
+    }
+  }
+}
Index: trunk/web/dojo/dojox/geo/charting/resources/data/NOTICES
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/data/NOTICES	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/data/NOTICES	(revision 9)
@@ -0,0 +1,63 @@
+Mapping data in this directory was obtained from the United States Geological Survey (USGS) at http://nationalatlas.gov/atlasftp.html.  
+Data and information authored or produced by the USGS are in the public domain:  http://nationalatlas.gov/policies.html.  
+The following notices and information are provided by the USGS:
+-----------------------------------------------------------------------------------------------------------------------------------------------
+
+	
+	Are there legal restrictions on access or use of the data?
+
+		Access_Constraints: None 
+		Use_Constraints: 
+			None. Acknowledgment of the National Atlas of the United States 
+			of America and (or) the U.S. Geological Survey would be 
+			appreciated in products derived from these data. 
+
+	1. Who distributes the data set? (Distributor 1 of 1)
+
+		Earth Science Information Center, U.S. Geological Survey
+		507 National Center
+		Reston, VA 20192
+
+		1-888-ASK-USGS (1-888-275-8747) (voice)
+
+
+		Contact_Instructions: 
+			In addition to the address above there are other ESIC offices throughout the 	
+			country. A full list of these offices is at 
+			<http://mapping.usgs.gov/esic/esic_index.html>. 
+
+	2. What's the catalog number I need to order this data set?
+
+	3. What legal disclaimers am I supposed to read?
+
+		Although these data have been processed successfully on a computer system 
+		at the U.S. Geological Survey, no warranty expressed or implied is made by the U.S. Geological Survey regarding the utility of the data on any other system, nor shall the act of distribution constitute any such warranty. No responsibility is assumed by the U.S. Geological Survey in the use of these data. 
+
+	4. How can I download or order the data?
+
+		Availability in digital form:
+			
+		Data format: ESRI Shapefile  
+		Network links: <http://nationalatlas.gov/atlasftp.html>
+ 
+		Data format: SDTS  
+		Network links: <http://nationalatlas.gov/atlasftp.html>
+ 
+
+		Cost to order the data: 
+
+		There is no charge for the online option. For National Atlas files ordered on CD-ROM 
+		there is a base price of $45.00 per disc, a handling fee of $5.00, and a per-file 
+		charge based on file size. The charge for files less than 10 megabytes in size is 
+		$1.00. The charge for files that range in size from 10 to 150 megabytes is $7.50. The 
+		charge for files of 150 megabytes or larger is $15.00. The charge is $7.50 for the 
+		Major Roads of the United States data set.
+
+
+		Special instructions:
+
+			To order files on CD-ROM, please see <http://nationalatlas.gov/atlasftp.html#q12>. 
+
+---------------------------------------------------------------------------------------------------------------------
+
+This Shapefile data is then reformatted into a simple JSON format
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.png
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.png	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.gif
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.gif	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/geo/charting/resources/img/zoomin.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.png
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.png	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.gif
===================================================================
--- trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.gif	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/geo/charting/resources/img/zoomout.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/geo/charting/_Marker.js
===================================================================
--- trunk/web/dojo/dojox/geo/charting/_Marker.js	(revision 0)
+++ trunk/web/dojo/dojox/geo/charting/_Marker.js	(revision 9)
@@ -0,0 +1,51 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.geo.charting._Marker"]){
+dojo._hasResource["dojox.geo.charting._Marker"]=true;
+dojo.provide("dojox.geo.charting._Marker");
+dojo.declare("dojox.geo.charting._Marker",null,{constructor:function(_1,_2){
+var _3=_2.mapObj;
+this.features=_3.features;
+this.markerData=_1;
+},show:function(_4){
+this.markerText=this.features[_4].markerText||this.markerData[_4]||_4;
+this.currentFeature=this.features[_4];
+dojox.geo.charting.showTooltip(this.markerText,this.currentFeature.shape,"before");
+},hide:function(){
+dojox.geo.charting.hideTooltip(this.currentFeature.shape);
+},_getGroupBoundingBox:function(_5){
+var _6=_5.children;
+var _7=_6[0];
+var _8=_7.getBoundingBox();
+this._arround=dojo.clone(_8);
+dojo.forEach(_6,function(_9){
+var _a=_9.getBoundingBox();
+this._arround.x=Math.min(this._arround.x,_a.x);
+this._arround.y=Math.min(this._arround.y,_a.y);
+},this);
+},_toWindowCoords:function(_b,_c,_d){
+var _e=(_b.x-this.topLeft[0])*this.scale;
+var _f=(_b.y-this.topLeft[1])*this.scale;
+if(dojo.isFF==3.5){
+_b.x=_c.x;
+_b.y=_c.y;
+}else{
+if(dojo.isChrome){
+_b.x=_d.x+_e;
+_b.y=_d.y+_f;
+}else{
+_b.x=_c.x+_e;
+_b.y=_c.y+_f;
+}
+}
+_b.width=(this.currentFeature._bbox[2])*this.scale;
+_b.height=(this.currentFeature._bbox[3])*this.scale;
+_b.x+=_b.width/6;
+_b.y+=_b.height/4;
+}});
+}
Index: trunk/web/dojo/dojox/geo/README
===================================================================
--- trunk/web/dojo/dojox/geo/README	(revision 0)
+++ trunk/web/dojo/dojox/geo/README	(revision 9)
@@ -0,0 +1,37 @@
+-------------------------------------------------------------------------------
+dojox.geo
+-------------------------------------------------------------------------------
+Version 0.100
+Release date: 04/04/2010
+-------------------------------------------------------------------------------
+Project state:
+alpha
+-------------------------------------------------------------------------------
+Credits
+	dojox.geo.charting:
+		Dean Williams (deanw@ca.ibm.com)
+		Qi Ruan (ruanqi@cn.ibm.com)
+		Wei CDL Huang (hwcdl@cn.ibm.com)
+
+	Tom Trenka (ttrenka@gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+Project to house any geographical-related code.  First project is 
+dojox.geo.charting, contributed to DTK by IBM (CCLA on file).
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core, dojox.gfx, dojox.lang, Dijit.
+-------------------------------------------------------------------------------
+Documentation
+
+Not ready yet.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojox/trunk/geo
+
+You will need dojox.gfx, dojox.lang, and the Dijit core + Tooltip.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/layout/GridContainerLite.js
===================================================================
--- trunk/web/dojo/dojox/layout/GridContainerLite.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/GridContainerLite.js	(revision 9)
@@ -0,0 +1,491 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.GridContainerLite"]){
+dojo._hasResource["dojox.layout.GridContainerLite"]=true;
+dojo.provide("dojox.layout.GridContainerLite");
+dojo.require("dijit._Templated");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.require("dojox.mdnd.AreaManager");
+dojo.require("dojox.mdnd.DropIndicator");
+dojo.require("dojox.mdnd.dropMode.OverDropMode");
+dojo.require("dojox.mdnd.AutoScroll");
+dojo.declare("dojox.layout.GridContainerLite",[dijit.layout._LayoutWidget,dijit._Templated],{autoRefresh:true,templateString:dojo.cache("dojox.layout","resources/GridContainer.html","<div id=\"${id}\" class=\"gridContainer\" dojoAttachPoint=\"containerNode\" tabIndex=\"0\" dojoAttachEvent=\"onkeypress:_selectFocus\">\n\t<div dojoAttachPoint=\"gridContainerDiv\">\n\t\t<table class=\"gridContainerTable\" dojoAttachPoint=\"gridContainerTable\" cellspacing=\"0\" cellpadding=\"0\">\n\t\t\t<tbody>\n\t\t\t\t<tr dojoAttachPoint=\"gridNode\" >\n\t\t\t\t\t\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</div>\n"),dragHandleClass:"dojoxDragHandle",nbZones:1,doLayout:true,isAutoOrganized:true,acceptTypes:[],colWidths:"",constructor:function(_1,_2){
+this.acceptTypes=(_1||{}).acceptTypes||["text"];
+this._disabled=true;
+},postCreate:function(){
+this.inherited(arguments);
+this._grid=[];
+this._createCells();
+this.subscribe("/dojox/mdnd/drop","resizeChildAfterDrop");
+this.subscribe("/dojox/mdnd/drag/start","resizeChildAfterDragStart");
+this._dragManager=dojox.mdnd.areaManager();
+this._dragManager.autoRefresh=this.autoRefresh;
+this._dragManager.dragHandleClass=this.dragHandleClass;
+if(this.doLayout){
+this._border={"h":(dojo.isIE)?dojo._getBorderExtents(this.gridContainerTable).h:0,"w":(dojo.isIE==6)?1:0};
+}else{
+dojo.style(this.domNode,"overflowY","hidden");
+dojo.style(this.gridContainerTable,"height","auto");
+}
+this.inherited(arguments);
+},startup:function(){
+if(this._started){
+return;
+}
+if(this.isAutoOrganized){
+this._organizeChildren();
+}else{
+this._organizeChildrenManually();
+}
+dojo.forEach(this.getChildren(),function(_3){
+_3.startup();
+});
+if(this._isShown()){
+this.enableDnd();
+}
+this.inherited(arguments);
+},resizeChildAfterDrop:function(_4,_5,_6){
+if(this._disabled){
+return false;
+}
+if(dijit.getEnclosingWidget(_5.node)==this){
+var _7=dijit.byNode(_4);
+if(_7.resize&&dojo.isFunction(_7.resize)){
+_7.resize();
+}
+if(this.doLayout){
+var _8=this._contentBox.h,_9=dojo.contentBox(this.gridContainerDiv).h;
+if(_9>=_8){
+dojo.style(this.gridContainerTable,"height",(_8-this._border.h)+"px");
+}
+}
+return true;
+}
+return false;
+},resizeChildAfterDragStart:function(_a,_b,_c){
+if(this._disabled){
+return false;
+}
+if(dijit.getEnclosingWidget(_b.node)==this){
+this._draggedNode=_a;
+if(this.doLayout){
+dojo.marginBox(this.gridContainerTable,{"h":dojo.contentBox(this.gridContainerDiv).h-this._border.h});
+}
+return true;
+}
+return false;
+},getChildren:function(){
+var _d=[];
+dojo.forEach(this._grid,function(_e){
+_d=_d.concat(dojo.query("> [widgetId]",_e.node).map(dijit.byNode));
+});
+return _d;
+},_isShown:function(){
+if("open" in this){
+return this.open;
+}else{
+var _f=this.domNode;
+return (_f.style.display!="none")&&(_f.style.visibility!="hidden")&&!dojo.hasClass(_f,"dijitHidden");
+}
+},layout:function(){
+if(this.doLayout){
+var _10=this._contentBox;
+dojo.marginBox(this.gridContainerTable,{"h":_10.h-this._border.h});
+dojo.contentBox(this.domNode,{"w":_10.w-this._border.w});
+}
+dojo.forEach(this.getChildren(),function(_11){
+if(_11.resize&&dojo.isFunction(_11.resize)){
+_11.resize();
+}
+});
+},onShow:function(){
+if(this._disabled){
+this.enableDnd();
+}
+},onHide:function(){
+if(!this._disabled){
+this.disableDnd();
+}
+},_createCells:function(){
+if(this.nbZones===0){
+this.nbZones=1;
+}
+var _12=this.acceptTypes.join(","),i=0;
+var _13=this.colWidths||[];
+var _14=[];
+var _15;
+var _16=0;
+for(i=0;i<this.nbZones;i++){
+if(_14.length<_13.length){
+_16+=_13[i];
+_14.push(_13[i]);
+}else{
+if(!_15){
+_15=(100-_16)/(this.nbZones-i);
+}
+_14.push(_15);
+}
+}
+i=0;
+while(i<this.nbZones){
+this._grid.push({"node":dojo.create("td",{"class":"gridContainerZone","accept":_12,"id":this.id+"_dz"+i,"style":{"width":_14[i]+"%"}},this.gridNode)});
+i++;
+}
+},enableDnd:function(){
+var m=this._dragManager;
+dojo.forEach(this._grid,function(_17){
+m.registerByNode(_17.node);
+});
+m._dropMode.updateAreas(m._areaList);
+this._disabled=false;
+},disableDnd:function(){
+var m=this._dragManager;
+dojo.forEach(this._grid,function(_18){
+m.unregister(_18.node);
+});
+m._dropMode.updateAreas(m._areaList);
+this._disabled=true;
+},_organizeChildren:function(){
+var _19=dojox.layout.GridContainerLite.superclass.getChildren.call(this);
+var _1a=this.nbZones,_1b=Math.floor(_19.length/_1a),mod=_19.length%_1a,i=0;
+for(var z=0;z<_1a;z++){
+for(var r=0;r<_1b;r++){
+this._insertChild(_19[i],z);
+i++;
+}
+if(mod>0){
+try{
+this._insertChild(_19[i],z);
+i++;
+}
+catch(e){
+console.error("Unable to insert child in GridContainer",e);
+}
+mod--;
+}else{
+if(_1b===0){
+break;
+}
+}
+}
+},_organizeChildrenManually:function(){
+var _1c=dojox.layout.GridContainerLite.superclass.getChildren.call(this),_1d=_1c.length,_1e;
+for(var i=0;i<_1d;i++){
+_1e=_1c[i];
+try{
+this._insertChild(_1e,_1e.column-1);
+}
+catch(e){
+console.error("Unable to insert child in GridContainer",e);
+}
+}
+},_insertChild:function(_1f,_20,p){
+var _21=this._grid[_20].node,_22=_21.childNodes.length;
+if(typeof (p)==undefined||p>_22){
+p=_22;
+}
+if(this._disabled){
+dojo.place(_1f.domNode,_21,p);
+dojo.attr(_1f.domNode,"tabIndex","0");
+}else{
+if(!_1f.dragRestriction){
+this._dragManager.addDragItem(_21,_1f.domNode,p,true);
+}else{
+dojo.place(_1f.domNode,_21,p);
+dojo.attr(_1f.domNode,"tabIndex","0");
+}
+}
+return _1f;
+},removeChild:function(_23){
+if(this._disabled){
+this.inherited(arguments);
+}else{
+this._dragManager.removeDragItem(_23.domNode.parentNode,_23.domNode);
+}
+},addService:function(_24,_25,p){
+dojo.deprecated("addService is deprecated.","Please use  instead.","Future");
+this.addChild(_24,_25,p);
+},addChild:function(_26,_27,p){
+_26.domNode.id=_26.id;
+dojox.layout.GridContainerLite.superclass.addChild.call(this,_26,0);
+if(_27<0||_27==undefined){
+_27=0;
+}
+if(p<=0){
+p=0;
+}
+try{
+return this._insertChild(_26,_27,p);
+}
+catch(e){
+console.error("Unable to insert child in GridContainer",e);
+}
+return null;
+},_setColWidthsAttr:function(_28){
+this.colWidths=dojo.isString(_28)?_28.split(","):(dojo.isArray(_28)?_28:[_28]);
+if(this._started){
+this._updateColumnsWidth();
+}
+},_updateColumnsWidth:function(_29){
+var _2a=this._grid.length;
+var _2b=this.colWidths||[];
+var _2c=[];
+var _2d;
+var _2e=0;
+var i;
+for(i=0;i<_2a;i++){
+if(_2c.length<_2b.length){
+_2e+=_2b[i]*1;
+_2c.push(_2b[i]);
+}else{
+if(!_2d){
+_2d=(100-_2e)/(this.nbZones-i);
+if(_2d<0){
+_2d=100/this.nbZones;
+}
+}
+_2c.push(_2d);
+_2e+=_2d*1;
+}
+}
+if(_2e>100){
+var _2f=100/_2e;
+for(i=0;i<_2c.length;i++){
+_2c[i]*=_2f;
+}
+}
+for(i=0;i<_2a;i++){
+this._grid[i].node.style.width=_2c[i]+"%";
+}
+},_selectFocus:function(_30){
+if(this._disabled){
+return;
+}
+var key=_30.keyCode,k=dojo.keys,_31=null,_32=dijit.getFocus(),_33=_32.node,m=this._dragManager,_34,i,j,r,_35,_36,_37;
+if(_33==this.containerNode){
+_36=this.gridNode.childNodes;
+switch(key){
+case k.DOWN_ARROW:
+case k.RIGHT_ARROW:
+_34=false;
+for(i=0;i<_36.length;i++){
+_35=_36[i].childNodes;
+for(j=0;j<_35.length;j++){
+_31=_35[j];
+if(_31!=null&&_31.style.display!="none"){
+dijit.focus(_31);
+dojo.stopEvent(_30);
+_34=true;
+break;
+}
+}
+if(_34){
+break;
+}
+}
+break;
+case k.UP_ARROW:
+case k.LEFT_ARROW:
+_36=this.gridNode.childNodes;
+_34=false;
+for(i=_36.length-1;i>=0;i--){
+_35=_36[i].childNodes;
+for(j=_35.length;j>=0;j--){
+_31=_35[j];
+if(_31!=null&&_31.style.display!="none"){
+dijit.focus(_31);
+dojo.stopEvent(_30);
+_34=true;
+break;
+}
+}
+if(_34){
+break;
+}
+}
+break;
+}
+}else{
+if(_33.parentNode.parentNode==this.gridNode){
+var _38=(key==k.UP_ARROW||key==k.LEFT_ARROW)?"lastChild":"firstChild";
+var pos=(key==k.UP_ARROW||key==k.LEFT_ARROW)?"previousSibling":"nextSibling";
+switch(key){
+case k.UP_ARROW:
+case k.DOWN_ARROW:
+dojo.stopEvent(_30);
+_34=false;
+var _39=_33;
+while(!_34){
+_35=_39.parentNode.childNodes;
+var num=0;
+for(i=0;i<_35.length;i++){
+if(_35[i].style.display!="none"){
+num++;
+}
+if(num>1){
+break;
+}
+}
+if(num==1){
+return;
+}
+if(_39[pos]==null){
+_31=_39.parentNode[_38];
+}else{
+_31=_39[pos];
+}
+if(_31.style.display==="none"){
+_39=_31;
+}else{
+_34=true;
+}
+}
+if(_30.shiftKey){
+var _3a=_33.parentNode;
+for(i=0;i<this.gridNode.childNodes.length;i++){
+if(_3a==this.gridNode.childNodes[i]){
+break;
+}
+}
+_35=this.gridNode.childNodes[i].childNodes;
+for(j=0;j<_35.length;j++){
+if(_31==_35[j]){
+break;
+}
+}
+if(dojo.isMoz||dojo.isWebKit){
+i--;
+}
+_37=dijit.byNode(_33);
+if(!_37.dragRestriction){
+r=m.removeDragItem(_3a,_33);
+this.addChild(_37,i,j);
+dojo.attr(_33,"tabIndex","0");
+dijit.focus(_33);
+}else{
+dojo.publish("/dojox/layout/gridContainer/moveRestriction",[this]);
+}
+}else{
+dijit.focus(_31);
+}
+break;
+case k.RIGHT_ARROW:
+case k.LEFT_ARROW:
+dojo.stopEvent(_30);
+if(_30.shiftKey){
+var z=0;
+if(_33.parentNode[pos]==null){
+if(dojo.isIE&&key==k.LEFT_ARROW){
+z=this.gridNode.childNodes.length-1;
+}
+}else{
+if(_33.parentNode[pos].nodeType==3){
+z=this.gridNode.childNodes.length-2;
+}else{
+for(i=0;i<this.gridNode.childNodes.length;i++){
+if(_33.parentNode[pos]==this.gridNode.childNodes[i]){
+break;
+}
+z++;
+}
+if(dojo.isMoz||dojo.isWebKit){
+z--;
+}
+}
+}
+_37=dijit.byNode(_33);
+var _3b=_33.getAttribute("dndtype");
+if(_3b==null){
+if(_37&&_37.dndType){
+_3b=_37.dndType.split(/\s*,\s*/);
+}else{
+_3b=["text"];
+}
+}else{
+_3b=_3b.split(/\s*,\s*/);
+}
+var _3c=false;
+for(i=0;i<this.acceptTypes.length;i++){
+for(j=0;j<_3b.length;j++){
+if(_3b[j]==this.acceptTypes[i]){
+_3c=true;
+break;
+}
+}
+}
+if(_3c&&!_37.dragRestriction){
+var _3d=_33.parentNode,_3e=0;
+if(k.LEFT_ARROW==key){
+var t=z;
+if(dojo.isMoz||dojo.isWebKit){
+t=z+1;
+}
+_3e=this.gridNode.childNodes[t].childNodes.length;
+}
+r=m.removeDragItem(_3d,_33);
+this.addChild(_37,z,_3e);
+dojo.attr(r,"tabIndex","0");
+dijit.focus(r);
+}else{
+dojo.publish("/dojox/layout/gridContainer/moveRestriction",[this]);
+}
+}else{
+var _3f=_33.parentNode;
+while(_31===null){
+if(_3f[pos]!==null&&_3f[pos].nodeType!==3){
+_3f=_3f[pos];
+}else{
+if(pos==="previousSibling"){
+_3f=_3f.parentNode.childNodes[_3f.parentNode.childNodes.length-1];
+}else{
+_3f=(dojo.isIE)?_3f.parentNode.childNodes[0]:_3f.parentNode.childNodes[1];
+}
+}
+_31=_3f[_38];
+if(_31&&_31.style.display=="none"){
+_35=_31.parentNode.childNodes;
+var _40=null;
+if(pos=="previousSibling"){
+for(i=_35.length-1;i>=0;i--){
+if(_35[i].style.display!="none"){
+_40=_35[i];
+break;
+}
+}
+}else{
+for(i=0;i<_35.length;i++){
+if(_35[i].style.display!="none"){
+_40=_35[i];
+break;
+}
+}
+}
+if(!_40){
+_33=_31;
+_3f=_33.parentNode;
+_31=null;
+}else{
+_31=_40;
+}
+}
+}
+dijit.focus(_31);
+}
+break;
+}
+}
+}
+},destroy:function(){
+var m=this._dragManager;
+dojo.forEach(this._grid,function(_41){
+m.unregister(_41.node);
+});
+this.inherited(arguments);
+}});
+dojo.extend(dijit._Widget,{column:"1",dragRestriction:false});
+}
Index: trunk/web/dojo/dojox/layout/FloatingPane.js
===================================================================
--- trunk/web/dojo/dojox/layout/FloatingPane.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/FloatingPane.js	(revision 9)
@@ -0,0 +1,222 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.FloatingPane"]){
+dojo._hasResource["dojox.layout.FloatingPane"]=true;
+dojo.provide("dojox.layout.FloatingPane");
+dojo.experimental("dojox.layout.FloatingPane");
+dojo.require("dojo.window");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Widget");
+dojo.require("dojo.dnd.Moveable");
+dojo.require("dojox.layout.ContentPane");
+dojo.require("dojox.layout.ResizeHandle");
+dojo.declare("dojox.layout.FloatingPane",[dojox.layout.ContentPane,dijit._Templated],{closable:true,dockable:true,resizable:false,maxable:false,resizeAxis:"xy",title:"",dockTo:"",duration:400,contentClass:"dojoxFloatingPaneContent",_showAnim:null,_hideAnim:null,_dockNode:null,_restoreState:{},_allFPs:[],_startZ:100,templateString:dojo.cache("dojox.layout","resources/FloatingPane.html","<div class=\"dojoxFloatingPane\" id=\"${id}\">\n\t<div tabindex=\"0\" waiRole=\"button\" class=\"dojoxFloatingPaneTitle\" dojoAttachPoint=\"focusNode\">\n\t\t<span dojoAttachPoint=\"closeNode\" dojoAttachEvent=\"onclick: close\" class=\"dojoxFloatingCloseIcon\"></span>\n\t\t<span dojoAttachPoint=\"maxNode\" dojoAttachEvent=\"onclick: maximize\" class=\"dojoxFloatingMaximizeIcon\">&thinsp;</span>\n\t\t<span dojoAttachPoint=\"restoreNode\" dojoAttachEvent=\"onclick: _restore\" class=\"dojoxFloatingRestoreIcon\">&thinsp;</span>\t\n\t\t<span dojoAttachPoint=\"dockNode\" dojoAttachEvent=\"onclick: minimize\" class=\"dojoxFloatingMinimizeIcon\">&thinsp;</span>\n\t\t<span dojoAttachPoint=\"titleNode\" class=\"dijitInline dijitTitleNode\"></span>\n\t</div>\n\t<div dojoAttachPoint=\"canvas\" class=\"dojoxFloatingPaneCanvas\">\n\t\t<div dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\" class=\"${contentClass}\">\n\t\t</div>\n\t\t<span dojoAttachPoint=\"resizeHandle\" class=\"dojoxFloatingResizeHandle\"></span>\n\t</div>\n</div>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:{type:"innerHTML",node:"titleNode"}}),postCreate:function(){
+this.inherited(arguments);
+new dojo.dnd.Moveable(this.domNode,{handle:this.focusNode});
+if(!this.dockable){
+this.dockNode.style.display="none";
+}
+if(!this.closable){
+this.closeNode.style.display="none";
+}
+if(!this.maxable){
+this.maxNode.style.display="none";
+this.restoreNode.style.display="none";
+}
+if(!this.resizable){
+this.resizeHandle.style.display="none";
+}else{
+this.domNode.style.width=dojo.marginBox(this.domNode).w+"px";
+}
+this._allFPs.push(this);
+this.domNode.style.position="absolute";
+this.bgIframe=new dijit.BackgroundIframe(this.domNode);
+this._naturalState=dojo.coords(this.domNode);
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(this.resizable){
+if(dojo.isIE){
+this.canvas.style.overflow="auto";
+}else{
+this.containerNode.style.overflow="auto";
+}
+this._resizeHandle=new dojox.layout.ResizeHandle({targetId:this.id,resizeAxis:this.resizeAxis},this.resizeHandle);
+}
+if(this.dockable){
+var _1=this.dockTo;
+if(this.dockTo){
+this.dockTo=dijit.byId(this.dockTo);
+}else{
+this.dockTo=dijit.byId("dojoxGlobalFloatingDock");
+}
+if(!this.dockTo){
+var _2,_3;
+if(_1){
+_2=_1;
+_3=dojo.byId(_1);
+}else{
+_3=dojo.create("div",null,dojo.body());
+dojo.addClass(_3,"dojoxFloatingDockDefault");
+_2="dojoxGlobalFloatingDock";
+}
+this.dockTo=new dojox.layout.Dock({id:_2,autoPosition:"south"},_3);
+this.dockTo.startup();
+}
+if((this.domNode.style.display=="none")||(this.domNode.style.visibility=="hidden")){
+this.minimize();
+}
+}
+this.connect(this.focusNode,"onmousedown","bringToTop");
+this.connect(this.domNode,"onmousedown","bringToTop");
+this.resize(dojo.coords(this.domNode));
+this._started=true;
+},setTitle:function(_4){
+dojo.deprecated("pane.setTitle","Use pane.attr('title', someTitle)","2.0");
+this.set("title",_4);
+},close:function(){
+if(!this.closable){
+return;
+}
+dojo.unsubscribe(this._listener);
+this.hide(dojo.hitch(this,function(){
+this.destroyRecursive();
+}));
+},hide:function(_5){
+dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,function(){
+this.domNode.style.display="none";
+this.domNode.style.visibility="hidden";
+if(this.dockTo&&this.dockable){
+this.dockTo._positionDock(null);
+}
+if(_5){
+_5();
+}
+})}).play();
+},show:function(_6){
+var _7=dojo.fadeIn({node:this.domNode,duration:this.duration,beforeBegin:dojo.hitch(this,function(){
+this.domNode.style.display="";
+this.domNode.style.visibility="visible";
+if(this.dockTo&&this.dockable){
+this.dockTo._positionDock(null);
+}
+if(typeof _6=="function"){
+_6();
+}
+this._isDocked=false;
+if(this._dockNode){
+this._dockNode.destroy();
+this._dockNode=null;
+}
+})}).play();
+this.resize(dojo.coords(this.domNode));
+},minimize:function(){
+if(!this._isDocked){
+this.hide(dojo.hitch(this,"_dock"));
+}
+},maximize:function(){
+if(this._maximized){
+return;
+}
+this._naturalState=dojo.position(this.domNode);
+if(this._isDocked){
+this.show();
+setTimeout(dojo.hitch(this,"maximize"),this.duration);
+}
+dojo.addClass(this.focusNode,"floatingPaneMaximized");
+this.resize(dojo.window.getBox());
+this._maximized=true;
+},_restore:function(){
+if(this._maximized){
+this.resize(this._naturalState);
+dojo.removeClass(this.focusNode,"floatingPaneMaximized");
+this._maximized=false;
+}
+},_dock:function(){
+if(!this._isDocked&&this.dockable){
+this._dockNode=this.dockTo.addNode(this);
+this._isDocked=true;
+}
+},resize:function(_8){
+_8=_8||this._naturalState;
+this._currentState=_8;
+var _9=this.domNode.style;
+if("t" in _8){
+_9.top=_8.t+"px";
+}
+if("l" in _8){
+_9.left=_8.l+"px";
+}
+_9.width=_8.w+"px";
+_9.height=_8.h+"px";
+var _a={l:0,t:0,w:_8.w,h:(_8.h-this.focusNode.offsetHeight)};
+dojo.marginBox(this.canvas,_a);
+this._checkIfSingleChild();
+if(this._singleChild&&this._singleChild.resize){
+this._singleChild.resize(_a);
+}
+},bringToTop:function(){
+var _b=dojo.filter(this._allFPs,function(i){
+return i!==this;
+},this);
+_b.sort(function(a,b){
+return a.domNode.style.zIndex-b.domNode.style.zIndex;
+});
+_b.push(this);
+dojo.forEach(_b,function(w,x){
+w.domNode.style.zIndex=this._startZ+(x*2);
+dojo.removeClass(w.domNode,"dojoxFloatingPaneFg");
+},this);
+dojo.addClass(this.domNode,"dojoxFloatingPaneFg");
+},destroy:function(){
+this._allFPs.splice(dojo.indexOf(this._allFPs,this),1);
+if(this._resizeHandle){
+this._resizeHandle.destroy();
+}
+this.inherited(arguments);
+}});
+dojo.declare("dojox.layout.Dock",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dojoxDock\"><ul dojoAttachPoint=\"containerNode\" class=\"dojoxDockList\"></ul></div>",_docked:[],_inPositioning:false,autoPosition:false,addNode:function(_c){
+var _d=dojo.create("li",null,this.containerNode),_e=new dojox.layout._DockNode({title:_c.title,paneRef:_c},_d);
+_e.startup();
+return _e;
+},startup:function(){
+if(this.id=="dojoxGlobalFloatingDock"||this.isFixedDock){
+this.connect(window,"onresize","_positionDock");
+this.connect(window,"onscroll","_positionDock");
+if(dojo.isIE){
+this.connect(this.domNode,"onresize","_positionDock");
+}
+}
+this._positionDock(null);
+this.inherited(arguments);
+},_positionDock:function(e){
+if(!this._inPositioning){
+if(this.autoPosition=="south"){
+setTimeout(dojo.hitch(this,function(){
+this._inPositiononing=true;
+var _f=dojo.window.getBox();
+var s=this.domNode.style;
+s.left=_f.l+"px";
+s.width=(_f.w-2)+"px";
+s.top=(_f.h+_f.t)-this.domNode.offsetHeight+"px";
+this._inPositioning=false;
+}),125);
+}
+}
+}});
+dojo.declare("dojox.layout._DockNode",[dijit._Widget,dijit._Templated],{title:"",paneRef:null,templateString:"<li dojoAttachEvent=\"onclick: restore\" class=\"dojoxDockNode\">"+"<span dojoAttachPoint=\"restoreNode\" class=\"dojoxDockRestoreButton\" dojoAttachEvent=\"onclick: restore\"></span>"+"<span class=\"dojoxDockTitleNode\" dojoAttachPoint=\"titleNode\">${title}</span>"+"</li>",restore:function(){
+this.paneRef.show();
+this.paneRef.bringToTop();
+if(!this.paneRef.isLoaded){
+this.paneRef.refresh();
+}
+this.destroy();
+}});
+}
Index: trunk/web/dojo/dojox/layout/ToggleSplitter.js
===================================================================
--- trunk/web/dojo/dojox/layout/ToggleSplitter.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/ToggleSplitter.js	(revision 9)
@@ -0,0 +1,131 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.ToggleSplitter"]){
+dojo._hasResource["dojox.layout.ToggleSplitter"]=true;
+dojo.provide("dojox.layout.ToggleSplitter");
+dojo.experimental("dojox.layout.ToggleSplitter");
+dojo.require("dijit.layout.BorderContainer");
+dojo.declare("dojox.layout.ToggleSplitter",[dijit.layout._Splitter],{open:true,closedThreshold:5,openSize:"",_closedSize:"0",templateString:"<div class=\"dijitSplitter dojoxToggleSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onMouseDown\" tabIndex=\"0\" waiRole=\"separator\"><div dojoAttachPoint=\"toggleNode\" class=\"dijitSplitterThumb dojoxToggleSplitterIcon\"></div></div>",postCreate:function(){
+this._started=false;
+this.inherited(arguments);
+var _1=this.region;
+dojo.addClass(this.domNode,"dojoxToggleSplitter"+_1.charAt(0).toUpperCase()+_1.substring(1));
+this.connect(this,"onDblClick","_toggleMe");
+},startup:function(){
+this.inherited(arguments);
+var _2=this.child.domNode,_3=dojo.style(_2,(this.horizontal?"height":"width"));
+dojo.forEach(["toggleSplitterOpen","toggleSplitterClosedThreshold","toggleSplitterOpenSize"],function(_4){
+var _5=_4.substring("toggleSplitter".length);
+_5=_5.charAt(0).toLowerCase()+_5.substring(1);
+if(_4 in this.child){
+this[_5]=this.child[_4];
+}
+},this);
+if(!this.openSize){
+this.openSize=(this.open)?_3+"px":"75px";
+}
+this._openStyleProps=this._getStyleProps(_2,true);
+this._started=true;
+this.set("open",this.open);
+return this;
+},_onMouseUp:function(_6){
+dojo.disconnect(this._onMoveHandle);
+dojo.disconnect(this._onUpHandle);
+delete this._onMoveHandle;
+delete this._onUpHandle;
+delete this._startPosn;
+},_onPrelimMouseMove:function(_7){
+var _8=this._startPosn||0;
+var _9=3;
+var _a=Math.abs(_8-(this.horizontal?_7.clientY:_7.clientX));
+if(_a>=_9){
+dojo.disconnect(this._onMoveHandle);
+this._startDrag(_7);
+}
+},_onMouseDown:function(_b){
+if(!this.open){
+return;
+}
+if(!this._onUpHandle){
+this._onUpHandle=dojo.connect(dojo.body(),"onmouseup",this,"_onMouseUp");
+}
+if(!this._onMoveHandle){
+this._startPosn=this.horizontal?_b.clientY:_b.clientX;
+this._onMoveHandle=dojo.connect(dojo.body(),"onmousemove",this,"_onPrelimMouseMove");
+}
+},_handleOnChange:function(){
+var _c=this.child.domNode,_d,_e=this.horizontal?"height":"width";
+if(this.open){
+var _f=dojo.mixin({display:"block",overflow:"auto",visibility:"visible"},this._openStyleProps);
+_f[_e]=(this._openStyleProps&&this._openStyleProps[_e])?this._openStyleProps[_e]:this.openSize;
+dojo.style(_c,_f);
+this.connect(this.domNode,"onmousedown","_onMouseDown");
+}else{
+var _10=dojo.getComputedStyle(_c);
+_d=this._getStyleProps(_c,true,_10);
+var _11=this._getStyleProps(_c,false,_10);
+this._openStyleProps=_d;
+dojo.style(_c,_11);
+}
+this._setStateClass();
+if(this.container._started){
+this.container._layoutChildren(this.region);
+}
+},_getStyleProps:function(_12,_13,_14){
+if(!_14){
+_14=dojo.getComputedStyle(_12);
+}
+var _15={},dim=this.horizontal?"height":"width";
+_15["overflow"]=(_13)?_14["overflow"]:"hidden";
+_15["visibility"]=(_13)?_14["visibility"]:"hidden";
+_15[dim]=(_13)?_12.style[dim]||_14[dim]:this._closedSize;
+var _16=["Top","Right","Bottom","Left"];
+dojo.forEach(["padding","margin","border"],function(_17){
+for(var i=0;i<_16.length;i++){
+var _18=_17+_16[i];
+if(_17=="border"){
+_17+="Width";
+}
+if(undefined!==_14[_18]){
+_15[_18]=(_13)?_14[_18]:0;
+}
+}
+});
+return _15;
+},_setStateClass:function(){
+if(this.open){
+dojo.removeClass(this.domNode,"dojoxToggleSplitterClosed");
+dojo.addClass(this.domNode,"dojoxToggleSplitterOpen");
+dojo.removeClass(this.toggleNode,"dojoxToggleSplitterIconClosed");
+dojo.addClass(this.toggleNode,"dojoxToggleSplitterIconOpen");
+}else{
+dojo.addClass(this.domNode,"dojoxToggleSplitterClosed");
+dojo.removeClass(this.domNode,"dojoxToggleSplitterOpen");
+dojo.addClass(this.toggleNode,"dojoxToggleSplitterIconClosed");
+dojo.removeClass(this.toggleNode,"dojoxToggleSplitterIconOpen");
+}
+},_setOpenAttr:function(_19){
+if(!this._started){
+return;
+}
+this.open=_19;
+this._handleOnChange(_19,true);
+var evt=this.open?"onOpen":"onClose";
+this[evt](this.child);
+},onOpen:function(){
+},onClose:function(){
+},_toggleMe:function(evt){
+if(evt){
+dojo.stopEvent(evt);
+}
+this.set("open",!this.open);
+},_onKeyPress:function(e){
+this.inherited(arguments);
+}});
+dojo.extend(dijit._Widget,{toggleSplitterOpen:true,toggleSplitterClosedThreshold:5,toggleSplitterOpenSize:""});
+}
Index: trunk/web/dojo/dojox/layout/RadioGroup.js
===================================================================
--- trunk/web/dojo/dojox/layout/RadioGroup.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/RadioGroup.js	(revision 9)
@@ -0,0 +1,139 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.RadioGroup"]){
+dojo._hasResource["dojox.layout.RadioGroup"]=true;
+dojo.provide("dojox.layout.RadioGroup");
+dojo.experimental("dojox.layout.RadioGroup");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dojo.fx.easing");
+dojo.declare("dojox.layout.RadioGroup",[dijit.layout.StackContainer,dijit._Templated],{duration:750,hasButtons:false,buttonClass:"dojox.layout._RadioButton",templateString:"<div class=\"dojoxRadioGroup\">"+" \t<div dojoAttachPoint=\"buttonHolder\" style=\"display:none;\">"+"\t\t<table class=\"dojoxRadioButtons\"><tbody><tr class=\"dojoxRadioButtonRow\" dojoAttachPoint=\"buttonNode\"></tr></tbody></table>"+"\t</div>"+"\t<div class=\"dojoxRadioView\" dojoAttachPoint=\"containerNode\"></div>"+"</div>",startup:function(){
+this.inherited(arguments);
+this._children=this.getChildren();
+this._buttons=this._children.length;
+this._size=dojo.coords(this.containerNode);
+if(this.hasButtons){
+dojo.style(this.buttonHolder,"display","block");
+}
+},_setupChild:function(_1){
+if(this.hasButtons){
+dojo.style(_1.domNode,"position","absolute");
+var _2=this.buttonNode.appendChild(dojo.create("td"));
+var n=dojo.create("div",null,_2),_3=dojo.getObject(this.buttonClass),_4=new _3({label:_1.title,page:_1},n);
+dojo.mixin(_1,{_radioButton:_4});
+_4.startup();
+}
+_1.domNode.style.display="none";
+},removeChild:function(_5){
+if(this.hasButtons&&_5._radioButton){
+_5._radioButton.destroy();
+delete _5._radioButton;
+}
+this.inherited(arguments);
+},_transition:function(_6,_7){
+this._showChild(_6);
+if(_7){
+this._hideChild(_7);
+}
+if(this.doLayout&&_6.resize){
+_6.resize(this._containerContentBox||this._contentBox);
+}
+},_showChild:function(_8){
+var _9=this.getChildren();
+_8.isFirstChild=(_8==_9[0]);
+_8.isLastChild=(_8==_9[_9.length-1]);
+_8.selected=true;
+_8.domNode.style.display="";
+if(_8._onShow){
+_8._onShow();
+}else{
+if(_8.onShow){
+_8.onShow();
+}
+}
+},_hideChild:function(_a){
+_a.selected=false;
+_a.domNode.style.display="none";
+if(_a.onHide){
+_a.onHide();
+}
+}});
+dojo.declare("dojox.layout.RadioGroupFade",dojox.layout.RadioGroup,{_hideChild:function(_b){
+dojo.fadeOut({node:_b.domNode,duration:this.duration,onEnd:dojo.hitch(this,"inherited",arguments,arguments)}).play();
+},_showChild:function(_c){
+this.inherited(arguments);
+dojo.style(_c.domNode,"opacity",0);
+dojo.fadeIn({node:_c.domNode,duration:this.duration}).play();
+}});
+dojo.declare("dojox.layout.RadioGroupSlide",dojox.layout.RadioGroup,{easing:"dojo.fx.easing.backOut",zTop:99,constructor:function(){
+if(dojo.isString(this.easing)){
+this.easing=dojo.getObject(this.easing);
+}
+},_positionChild:function(_d){
+if(!this._size){
+return;
+}
+var rA=true,rB=true;
+switch(_d.slideFrom){
+case "bottom":
+rB=!rB;
+break;
+case "right":
+rA=!rA;
+rB=!rB;
+break;
+case "top":
+break;
+case "left":
+rA=!rA;
+break;
+default:
+rA=Math.round(Math.random());
+rB=Math.round(Math.random());
+break;
+}
+var _e=rA?"top":"left",_f=(rB?"-":"")+(this._size[rA?"h":"w"]+20)+"px";
+dojo.style(_d.domNode,_e,_f);
+},_showChild:function(_10){
+var _11=this.getChildren();
+_10.isFirstChild=(_10==_11[0]);
+_10.isLastChild=(_10==_11[_11.length-1]);
+_10.selected=true;
+dojo.style(_10.domNode,{zIndex:this.zTop,display:""});
+if(this._anim&&this._anim.status()=="playing"){
+this._anim.gotoPercent(100,true);
+}
+this._anim=dojo.animateProperty({node:_10.domNode,properties:{left:0,top:0},duration:this.duration,easing:this.easing,onEnd:dojo.hitch(_10,function(){
+if(this.onShow){
+this.onShow();
+}
+if(this._onShow){
+this._onShow();
+}
+}),beforeBegin:dojo.hitch(this,"_positionChild",_10)});
+this._anim.play();
+},_hideChild:function(_12){
+_12.selected=false;
+_12.domNode.style.zIndex=this.zTop-1;
+if(_12.onHide){
+_12.onHide();
+}
+}});
+dojo.declare("dojox.layout._RadioButton",[dijit._Widget,dijit._Templated,dijit._Contained],{label:"",page:null,templateString:"<div dojoAttachPoint=\"focusNode\" class=\"dojoxRadioButton\"><span dojoAttachPoint=\"titleNode\" class=\"dojoxRadioButtonLabel\">${label}</span></div>",startup:function(){
+this.connect(this.domNode,"onmouseenter","_onMouse");
+},_onMouse:function(e){
+this.getParent().selectChild(this.page);
+this._clearSelected();
+dojo.addClass(this.domNode,"dojoxRadioButtonSelected");
+},_clearSelected:function(){
+dojo.query(".dojoxRadioButtonSelected",this.domNode.parentNode.parentNode).removeClass("dojoxRadioButtonSelected");
+}});
+dojo.extend(dijit._Widget,{slideFrom:"random"});
+}
Index: trunk/web/dojo/dojox/layout/ResizeHandle.js
===================================================================
--- trunk/web/dojo/dojox/layout/ResizeHandle.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/ResizeHandle.js	(revision 9)
@@ -0,0 +1,183 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.ResizeHandle"]){
+dojo._hasResource["dojox.layout.ResizeHandle"]=true;
+dojo.provide("dojox.layout.ResizeHandle");
+dojo.experimental("dojox.layout.ResizeHandle");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.fx");
+dojo.require("dojo.window");
+dojo.declare("dojox.layout.ResizeHandle",[dijit._Widget,dijit._Templated],{targetId:"",targetContainer:null,resizeAxis:"xy",activeResize:false,activeResizeClass:"dojoxResizeHandleClone",animateSizing:true,animateMethod:"chain",animateDuration:225,minHeight:100,minWidth:100,constrainMax:false,maxHeight:0,maxWidth:0,fixedAspect:false,intermediateChanges:false,startTopic:"/dojo/resize/start",endTopic:"/dojo/resize/stop",templateString:"<div dojoAttachPoint=\"resizeHandle\" class=\"dojoxResizeHandle\"><div></div></div>",postCreate:function(){
+this.connect(this.resizeHandle,"onmousedown","_beginSizing");
+if(!this.activeResize){
+this._resizeHelper=dijit.byId("dojoxGlobalResizeHelper");
+if(!this._resizeHelper){
+this._resizeHelper=new dojox.layout._ResizeHelper({id:"dojoxGlobalResizeHelper"}).placeAt(dojo.body());
+dojo.addClass(this._resizeHelper.domNode,this.activeResizeClass);
+}
+}else{
+this.animateSizing=false;
+}
+if(!this.minSize){
+this.minSize={w:this.minWidth,h:this.minHeight};
+}
+if(this.constrainMax){
+this.maxSize={w:this.maxWidth,h:this.maxHeight};
+}
+this._resizeX=this._resizeY=false;
+var _1=dojo.partial(dojo.addClass,this.resizeHandle);
+switch(this.resizeAxis.toLowerCase()){
+case "xy":
+this._resizeX=this._resizeY=true;
+_1("dojoxResizeNW");
+break;
+case "x":
+this._resizeX=true;
+_1("dojoxResizeW");
+break;
+case "y":
+this._resizeY=true;
+_1("dojoxResizeN");
+break;
+}
+},_beginSizing:function(e){
+if(this._isSizing){
+return false;
+}
+dojo.publish(this.startTopic,[this]);
+this.targetWidget=dijit.byId(this.targetId);
+this.targetDomNode=this.targetWidget?this.targetWidget.domNode:dojo.byId(this.targetId);
+if(this.targetContainer){
+this.targetDomNode=this.targetContainer;
+}
+if(!this.targetDomNode){
+return false;
+}
+if(!this.activeResize){
+var c=dojo.position(this.targetDomNode,true);
+this._resizeHelper.resize({l:c.x,t:c.y,w:c.w,h:c.h});
+this._resizeHelper.show();
+}
+this._isSizing=true;
+this.startPoint={x:e.clientX,y:e.clientY};
+var mb=this.targetWidget?dojo.marginBox(this.targetDomNode):dojo.contentBox(this.targetDomNode);
+this.startSize={w:mb.w,h:mb.h};
+if(this.fixedAspect){
+var _2,_3;
+if(mb.w>mb.h){
+_2="w";
+_3=mb.w/mb.h;
+}else{
+_2="h";
+_3=mb.h/mb.w;
+}
+this._aspect={prop:_2};
+this._aspect[_2]=_3;
+}
+this._pconnects=[];
+this._pconnects.push(dojo.connect(dojo.doc,"onmousemove",this,"_updateSizing"));
+this._pconnects.push(dojo.connect(dojo.doc,"onmouseup",this,"_endSizing"));
+dojo.stopEvent(e);
+},_updateSizing:function(e){
+if(this.activeResize){
+this._changeSizing(e);
+}else{
+var _4=this._getNewCoords(e);
+if(_4===false){
+return;
+}
+this._resizeHelper.resize(_4);
+}
+e.preventDefault();
+},_getNewCoords:function(e){
+try{
+if(!e.clientX||!e.clientY){
+return false;
+}
+}
+catch(e){
+return false;
+}
+this._activeResizeLastEvent=e;
+var dx=(this.isLeftToRight()?this.startPoint.x-e.clientX:e.clientX-this.startPoint.x),dy=this.startPoint.y-e.clientY,_5=this.startSize.w-(this._resizeX?dx:0),_6=this.startSize.h-(this._resizeY?dy:0);
+return this._checkConstraints(_5,_6);
+},_checkConstraints:function(_7,_8){
+if(this.minSize){
+var tm=this.minSize;
+if(_7<tm.w){
+_7=tm.w;
+}
+if(_8<tm.h){
+_8=tm.h;
+}
+}
+if(this.constrainMax&&this.maxSize){
+var ms=this.maxSize;
+if(_7>ms.w){
+_7=ms.w;
+}
+if(_8>ms.h){
+_8=ms.h;
+}
+}
+if(this.fixedAspect){
+var ta=this._aspect[this._aspect.prop];
+if(_7<_8){
+_8=_7*ta;
+}else{
+if(_8<_7){
+_7=_8*ta;
+}
+}
+}
+return {w:_7,h:_8};
+},_changeSizing:function(e){
+var _9=this._getNewCoords(e);
+if(_9===false){
+return;
+}
+if(this.targetWidget&&dojo.isFunction(this.targetWidget.resize)){
+this.targetWidget.resize(_9);
+}else{
+if(this.animateSizing){
+var _a=dojo.fx[this.animateMethod]([dojo.animateProperty({node:this.targetDomNode,properties:{width:{start:this.startSize.w,end:_9.w}},duration:this.animateDuration}),dojo.animateProperty({node:this.targetDomNode,properties:{height:{start:this.startSize.h,end:_9.h}},duration:this.animateDuration})]);
+_a.play();
+}else{
+dojo.style(this.targetDomNode,{width:_9.w+"px",height:_9.h+"px"});
+}
+}
+if(this.intermediateChanges){
+this.onResize(e);
+}
+},_endSizing:function(e){
+dojo.forEach(this._pconnects,dojo.disconnect);
+var _b=dojo.partial(dojo.publish,this.endTopic,[this]);
+if(!this.activeResize){
+this._resizeHelper.hide();
+this._changeSizing(e);
+setTimeout(_b,this.animateDuration+15);
+}else{
+_b();
+}
+this._isSizing=false;
+this.onResize(e);
+},onResize:function(e){
+}});
+dojo.declare("dojox.layout._ResizeHelper",dijit._Widget,{show:function(){
+dojo.fadeIn({node:this.domNode,duration:120,beforeBegin:function(n){
+dojo.style(n,"display","");
+}}).play();
+},hide:function(){
+dojo.fadeOut({node:this.domNode,duration:250,onEnd:function(n){
+dojo.style(n,"display","none");
+}}).play();
+},resize:function(_c){
+dojo.marginBox(this.domNode,_c);
+}});
+}
Index: trunk/web/dojo/dojox/layout/ContentPane.js
===================================================================
--- trunk/web/dojo/dojox/layout/ContentPane.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/ContentPane.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.ContentPane"]){
+dojo._hasResource["dojox.layout.ContentPane"]=true;
+dojo.provide("dojox.layout.ContentPane");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dojox.html._base");
+dojo.declare("dojox.layout.ContentPane",dijit.layout.ContentPane,{adjustPaths:false,cleanContent:false,renderStyles:false,executeScripts:true,scriptHasHooks:false,constructor:function(){
+this.ioArgs={};
+this.ioMethod=dojo.xhrGet;
+},onExecError:function(e){
+},_setContent:function(_1){
+var _2=this._contentSetter;
+if(!(_2&&_2 instanceof dojox.html._ContentSetter)){
+_2=this._contentSetter=new dojox.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){
+var _3=this.onContentError(e);
+try{
+this.containerNode.innerHTML=_3;
+}
+catch(e){
+console.error("Fatal "+this.id+" could not change content due to "+e.message,e);
+}
+})});
+}
+this._contentSetterParams={adjustPaths:Boolean(this.adjustPaths&&(this.href||this.referencePath)),referencePath:this.href||this.referencePath,renderStyles:this.renderStyles,executeScripts:this.executeScripts,scriptHasHooks:this.scriptHasHooks,scriptHookReplacement:"dijit.byId('"+this.id+"')"};
+this.inherited("_setContent",arguments);
+}});
+}
Index: trunk/web/dojo/dojox/layout/BorderContainer.js
===================================================================
--- trunk/web/dojo/dojox/layout/BorderContainer.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/BorderContainer.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.BorderContainer"]){
+dojo._hasResource["dojox.layout.BorderContainer"]=true;
+dojo.provide("dojox.layout.BorderContainer");
+console.error("dojox.layout.BorderContainer moved to dijit.layout.BorderContainer");
+}
Index: trunk/web/dojo/dojox/layout/DragPane.js
===================================================================
--- trunk/web/dojo/dojox/layout/DragPane.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/DragPane.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.DragPane"]){
+dojo._hasResource["dojox.layout.DragPane"]=true;
+dojo.provide("dojox.layout.DragPane");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.layout.DragPane",dijit._Widget,{invert:true,postCreate:function(){
+this.inherited(arguments);
+this.connect(this.domNode,"onmousedown","_down");
+this.connect(this.domNode,"onmouseup","_up");
+},_down:function(e){
+var t=this.domNode;
+dojo.style(t,"cursor","move");
+this._x=e.pageX;
+this._y=e.pageY;
+if((this._x<t.offsetLeft+t.clientWidth)&&(this._y<t.offsetTop+t.clientHeight)){
+dojo.setSelectable(t,false);
+this._mover=this.connect(t,"onmousemove","_move");
+}
+},_up:function(e){
+dojo.setSelectable(this.domNode,true);
+dojo.style(this.domNode,"cursor","pointer");
+this.disconnect(this._mover);
+},_move:function(e){
+var _1=this.invert?1:-1;
+this.domNode.scrollTop+=(this._y-e.pageY)*_1;
+this.domNode.scrollLeft+=(this._x-e.pageX)*_1;
+this._x=e.pageX;
+this._y=e.pageY;
+}});
+}
Index: trunk/web/dojo/dojox/layout/README
===================================================================
--- trunk/web/dojo/dojox/layout/README	(revision 0)
+++ trunk/web/dojo/dojox/layout/README	(revision 9)
@@ -0,0 +1,121 @@
+-------------------------------------------------------------------------------
+dojox.layout Experimental and Extended Layout Widgets
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 10/31/2007
+-------------------------------------------------------------------------------
+Project state:
+
+[BorderContainer] deprecated, use dijit.layout.BorderContainer
+[ContentPane]	beta
+[DragPane]	experimental
+[ExpandoPane] experimental
+[FloatingPane] sub-experimental
+[GridContainer] experimental
+[RadioGroup] experimental
+[RadioGroupFade/Slide] experimental
+[ResizeHandle] experimental
+[RotatorContainer] beta
+[ScrollPane] experimental
+[TableContainer] experimental
+
+-------------------------------------------------------------------------------
+Credits
+
+[BorderContainer] Adam Peller (peller)
+[ContentPane]	Fredrik Johansson (mumme)
+[DragPane]	Peter Higgins (dante)
+[ExpandoPane] Peter Higgins (dante)
+[FloatingPane] Peter Higgins (dante)
+[GridContainer/GridContainerLite] Erwan Morvillez (emorvillez), Jeff Cunat (jfcunat), Guillaume Mouricou (gmouricou), Peter Higgins (dante)
+[RadioGroup/Fade/Slide] Peter Higgins (dante) 
+[ResizeHandle] Peter Higgins (dante)
+[RotatorContainer] Chris Barber (cb1)
+[ScrollPane] Peter Higgins (dante), Shane O'Sullivan (sos)
+[TableContainer] Shane O'Sullivan (sos)
+
+-------------------------------------------------------------------------------
+Project description
+
+	placeholder for dijit.layout extensions. Currently only:
+
+	dojo.layout.BorderContainer - deprecated, simple replacement at dijit.layout.BorderContainer
+
+	dojox.layout.ContentPane - an extension on dijit ContentPane.
+	Supports inline scripts, inline styles, relative path adjustments
+	and having a table tag as domNode.
+
+	dojox.layout.DragPane - an experimental start of a simple Dragable pane 
+	(drag larger content around inside of a sized pane) Does not support borderContainer
+	LayoutContainer resizing yet. 
+
+	dojox.layout.ExpandoPane - Intended only as a child of BorderContainer, provides an
+	experimental layout region (top/left/right/bottom) that collapses when toggled, hiding
+	the layout children contained within.
+	
+	dojox.layout.FloatingPane - an extension on TitlePane for drag/drop
+	operation, "docking" [minimize/maximize], and resizing. HIGHLY experimental.
+	
+	dojox.layout.GridContainer - displays children in a definable grid-layout,
+	allowing children to optionally be repositioned with DnD
+
+	dojox.layout.RadioGroup - a stack container with sliding or fading transitions
+	(and an internal button set to mimic a tab container, but fires on hover)
+		- RadioGroupFade - fade transitions
+		- RadioGroupSlide - slide transitions
+
+	dojox.layout.ResizeHandle - resize handle to attach to a domNode.
+	works well on normal domNodes, but will require adding a resizeTo(w,h)
+	method to any widget you wish to use it on. [experimental]
+
+	dojox.layout.RotatorContainer - similar to a RadioGroup, but provides advanced button's and
+	control. 
+
+	dojox.layout.ScrollPane - a dynamically scrolling pane. Adjusts naturally sized content
+	to a "viewport" and scrolls based on relative mouse position. 
+	
+	dojox.layout.TableContainer - A container widget that lays out child widgets using a
+	Table element. It can create labels for each widget, placed either above or
+	beside the widgets.
+	
+-------------------------------------------------------------------------------
+Dependencies
+
+	require Dojo Core, Dojo Base (fx), and Dijit
+
+-------------------------------------------------------------------------------
+Installation:
+
+	checkout:
+
+	http://svn.dojotoolkit.org/src/dojox/trunk/layout/
+	http://svn.dojotoolkit.org/src/dijit/trunk/
+
+	and require via:
+		dojo.require("dojox.layout.FloatingPane");
+	or:
+		dojo.require("dojox.layout.ContentPane");
+	etc ...
+
+	Each component has a required CSS File with a similar name, contained within the
+	/resources folder. Include that file in your page. For instance, if using
+	the dojox.layout.ExpandoPane:
+	
+	<link rel="stylesheet" href="dojo-tree/dojox/layout/resources/ExpandoPane.css" />
+
+-------------------------------------------------------------------------------
+Basic Usage:
+
+	<div dojoType="dojox.layout.FloatingPane" title="my title">
+		Content To be Floated
+	</div>
+
+	<div dojoType="dojox.layout.ContentPane"
+		 adjustPaths="true"
+		 renderStyles="true"
+		 executeScripts="true"
+		 href="my/page/containing/scripts/and/styles/in/a/sub/folder.html"
+	>
+		Initial content, will be replace by href.
+		paths in folder.html will be adjusted to match this page
+	</div>
Index: trunk/web/dojo/dojox/layout/ext-dijit/layout/StackContainer-touch.js
===================================================================
--- trunk/web/dojo/dojox/layout/ext-dijit/layout/StackContainer-touch.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/ext-dijit/layout/StackContainer-touch.js	(revision 9)
@@ -0,0 +1,47 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.ext-dijit.layout.StackContainer-touch"]){
+dojo._hasResource["dojox.layout.ext-dijit.layout.StackContainer-touch"]=true;
+dojo.provide("dojox.layout.ext-dijit.layout.StackContainer-touch");
+dojo.experimental("dojox.layout.ext-dijit.layout.StackContainer-touch");
+dojo.require("dijit.layout.StackContainer");
+dojo.connect(dijit.layout.StackContainer.prototype,"postCreate",function(){
+this.axis=(this.baseClass=="dijitAccordionContainer")?"Y":"X";
+dojo.forEach(["touchstart","touchmove","touchend","touchcancel"],function(p){
+this.connect(this.domNode,p,function(e){
+switch(e.type){
+case "touchmove":
+e.preventDefault();
+if(this.touchPosition){
+var _1=e.touches[0]["page"+this.axis]-this.touchPosition;
+if(Math.abs(_1)>100){
+if(this.axis=="Y"){
+_1*=-1;
+}
+delete this.touchPosition;
+if(_1>0){
+!this.selectedChildWidget.isLastChild&&this.forward();
+}else{
+!this.selectedChildWidget.isFirstChild&&this.back();
+}
+}
+}
+break;
+case "touchstart":
+if(e.touches.length==1){
+this.touchPosition=e.touches[0]["page"+this.axis];
+break;
+}
+case "touchend":
+case "touchcancel":
+delete this.touchPosition;
+}
+});
+},this);
+});
+}
Index: trunk/web/dojo/dojox/layout/GridContainer.js
===================================================================
--- trunk/web/dojo/dojox/layout/GridContainer.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/GridContainer.js	(revision 9)
@@ -0,0 +1,327 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.GridContainer"]){
+dojo._hasResource["dojox.layout.GridContainer"]=true;
+dojo.provide("dojox.layout.GridContainer");
+dojo.require("dojox.layout.GridContainerLite");
+dojo.declare("dojox.layout.GridContainer",dojox.layout.GridContainerLite,{hasResizableColumns:true,liveResizeColumns:false,minColWidth:20,minChildWidth:150,mode:"right",isRightFixed:false,isLeftFixed:false,startup:function(){
+this.inherited(arguments);
+if(this.hasResizableColumns){
+for(var i=0;i<this._grid.length-1;i++){
+this._createGrip(i);
+}
+if(!this.getParent()){
+dojo.ready(dojo.hitch(this,"_placeGrips"));
+}
+}
+},resizeChildAfterDrop:function(_1,_2,_3){
+if(this.inherited(arguments)){
+this._placeGrips();
+}
+},onShow:function(){
+this.inherited(arguments);
+this._placeGrips();
+},resize:function(){
+this.inherited(arguments);
+if(this._isShown()&&this.hasResizableColumns){
+this._placeGrips();
+}
+},_createGrip:function(_4){
+var _5=this._grid[_4],_6=dojo.create("div",{"class":"gridContainerGrip"},this.domNode);
+_5.grip=_6;
+_5.gripHandler=[this.connect(_6,"onmouseover",function(e){
+var _7=false;
+for(var i=0;i<this._grid.length-1;i++){
+if(dojo.hasClass(this._grid[i].grip,"gridContainerGripShow")){
+_7=true;
+break;
+}
+}
+if(!_7){
+dojo.removeClass(e.target,"gridContainerGrip");
+dojo.addClass(e.target,"gridContainerGripShow");
+}
+})[0],this.connect(_6,"onmouseout",function(e){
+if(!this._isResized){
+dojo.removeClass(e.target,"gridContainerGripShow");
+dojo.addClass(e.target,"gridContainerGrip");
+}
+})[0],this.connect(_6,"onmousedown","_resizeColumnOn")[0],this.connect(_6,"ondblclick","_onGripDbClick")[0]];
+},_placeGrips:function(){
+var _8,_9,_a=0,_b;
+var _c=this.domNode.style.overflowY;
+dojo.forEach(this._grid,function(_d){
+if(_d.grip){
+_b=_d.grip;
+if(!_8){
+_8=_b.offsetWidth/2;
+}
+_a+=dojo.marginBox(_d.node).w;
+dojo.style(_b,"left",(_a-_8)+"px");
+if(!_9){
+_9=dojo.contentBox(this.gridNode).h;
+}
+if(_9>0){
+dojo.style(_b,"height",_9+"px");
+}
+}
+},this);
+},_onGripDbClick:function(){
+this._updateColumnsWidth(this._dragManager);
+this.resize();
+},_resizeColumnOn:function(e){
+this._activeGrip=e.target;
+this._initX=e.pageX;
+e.preventDefault();
+dojo.body().style.cursor="ew-resize";
+this._isResized=true;
+var _e=[];
+var _f;
+var i;
+for(i=0;i<this._grid.length;i++){
+_e[i]=dojo.contentBox(this._grid[i].node).w;
+}
+this._oldTabSize=_e;
+for(i=0;i<this._grid.length;i++){
+_f=this._grid[i];
+if(this._activeGrip==_f.grip){
+this._currentColumn=_f.node;
+this._currentColumnWidth=_e[i];
+this._nextColumn=this._grid[i+1].node;
+this._nextColumnWidth=_e[i+1];
+}
+_f.node.style.width=_e[i]+"px";
+}
+var _10=function(_11,_12){
+var _13=0;
+var _14=0;
+dojo.forEach(_11,function(_15){
+if(_15.nodeType==1){
+var _16=dojo.getComputedStyle(_15);
+var _17=(dojo.isIE)?_12:parseInt(_16.minWidth);
+_14=_17+parseInt(_16.marginLeft)+parseInt(_16.marginRight);
+if(_13<_14){
+_13=_14;
+}
+}
+});
+return _13;
+};
+var _18=_10(this._currentColumn.childNodes,this.minChildWidth);
+var _19=_10(this._nextColumn.childNodes,this.minChildWidth);
+var _1a=Math.round((dojo.marginBox(this.gridContainerTable).w*this.minColWidth)/100);
+this._currentMinCol=_18;
+this._nextMinCol=_19;
+if(_1a>this._currentMinCol){
+this._currentMinCol=_1a;
+}
+if(_1a>this._nextMinCol){
+this._nextMinCol=_1a;
+}
+this._connectResizeColumnMove=dojo.connect(dojo.doc,"onmousemove",this,"_resizeColumnMove");
+this._connectOnGripMouseUp=dojo.connect(dojo.doc,"onmouseup",this,"_onGripMouseUp");
+},_onGripMouseUp:function(){
+dojo.body().style.cursor="default";
+dojo.disconnect(this._connectResizeColumnMove);
+dojo.disconnect(this._connectOnGripMouseUp);
+this._connectOnGripMouseUp=this._connectResizeColumnMove=null;
+if(this._activeGrip){
+dojo.removeClass(this._activeGrip,"gridContainerGripShow");
+dojo.addClass(this._activeGrip,"gridContainerGrip");
+}
+this._isResized=false;
+},_resizeColumnMove:function(e){
+e.preventDefault();
+if(!this._connectResizeColumnOff){
+dojo.disconnect(this._connectOnGripMouseUp);
+this._connectOnGripMouseUp=null;
+this._connectResizeColumnOff=dojo.connect(dojo.doc,"onmouseup",this,"_resizeColumnOff");
+}
+var d=e.pageX-this._initX;
+if(d==0){
+return;
+}
+if(!(this._currentColumnWidth+d<this._currentMinCol||this._nextColumnWidth-d<this._nextMinCol)){
+this._currentColumnWidth+=d;
+this._nextColumnWidth-=d;
+this._initX=e.pageX;
+this._activeGrip.style.left=parseInt(this._activeGrip.style.left)+d+"px";
+if(this.liveResizeColumns){
+this._currentColumn.style["width"]=this._currentColumnWidth+"px";
+this._nextColumn.style["width"]=this._nextColumnWidth+"px";
+this.resize();
+}
+}
+},_resizeColumnOff:function(e){
+dojo.body().style.cursor="default";
+dojo.disconnect(this._connectResizeColumnMove);
+dojo.disconnect(this._connectResizeColumnOff);
+this._connectResizeColumnOff=this._connectResizeColumnMove=null;
+if(!this.liveResizeColumns){
+this._currentColumn.style["width"]=this._currentColumnWidth+"px";
+this._nextColumn.style["width"]=this._nextColumnWidth+"px";
+}
+var _1b=[],_1c=[],_1d=this.gridContainerTable.clientWidth,_1e,_1f=false,i;
+for(i=0;i<this._grid.length;i++){
+_1e=this._grid[i].node;
+if(dojo.isIE){
+_1b[i]=dojo.marginBox(_1e).w;
+_1c[i]=dojo.contentBox(_1e).w;
+}else{
+_1b[i]=dojo.contentBox(_1e).w;
+_1c=_1b;
+}
+}
+for(i=0;i<_1c.length;i++){
+if(_1c[i]!=this._oldTabSize[i]){
+_1f=true;
+break;
+}
+}
+if(_1f){
+var mul=dojo.isIE?100:10000;
+for(i=0;i<this._grid.length;i++){
+this._grid[i].node.style.width=Math.round((100*mul*_1b[i])/_1d)/mul+"%";
+}
+this.resize();
+}
+if(this._activeGrip){
+dojo.removeClass(this._activeGrip,"gridContainerGripShow");
+dojo.addClass(this._activeGrip,"gridContainerGrip");
+}
+this._isResized=false;
+},setColumns:function(_20){
+var z,j;
+if(_20>0){
+var _21=this._grid.length,_22=_21-_20;
+if(_22>0){
+var _23=[],_24,_25,end,_26;
+if(this.mode=="right"){
+end=(this.isLeftFixed&&_21>0)?1:0;
+_25=(this.isRightFixed)?_21-2:_21-1;
+for(z=_25;z>=end;z--){
+_26=0;
+_24=this._grid[z].node;
+for(j=0;j<_24.childNodes.length;j++){
+if(_24.childNodes[j].nodeType==1&&!(_24.childNodes[j].id=="")){
+_26++;
+break;
+}
+}
+if(_26==0){
+_23[_23.length]=z;
+}
+if(_23.length>=_22){
+this._deleteColumn(_23);
+break;
+}
+}
+if(_23.length<_22){
+dojo.publish("/dojox/layout/gridContainer/noEmptyColumn",[this]);
+}
+}else{
+_25=(this.isLeftFixed&&_21>0)?1:0;
+end=(this.isRightFixed)?_21-1:_21;
+for(z=_25;z<end;z++){
+_26=0;
+_24=this._grid[z].node;
+for(j=0;j<_24.childNodes.length;j++){
+if(_24.childNodes[j].nodeType==1&&!(_24.childNodes[j].id=="")){
+_26++;
+break;
+}
+}
+if(_26==0){
+_23[_23.length]=z;
+}
+if(_23.length>=_22){
+this._deleteColumn(_23);
+break;
+}
+}
+if(_23.length<_22){
+dojo.publish("/dojox/layout/gridContainer/noEmptyColumn",[this]);
+}
+}
+}else{
+if(_22<0){
+this._addColumn(Math.abs(_22));
+}
+}
+if(this.hasResizableColumns){
+this._placeGrips();
+}
+}
+},_addColumn:function(_27){
+var _28=this._grid,_29,_2a,_2b,_2c,_2d=(this.mode=="right"),_2e=this.acceptTypes.join(","),m=this._dragManager;
+if(this.hasResizableColumns&&((!this.isRightFixed&&_2d)||(this.isLeftFixed&&!_2d&&this.nbZones==1))){
+this._createGrip(_28.length-1);
+}
+for(var i=0;i<_27;i++){
+_2a=dojo.create("td",{"class":"gridContainerZone dojoxDndArea","accept":_2e,"id":this.id+"_dz"+this.nbZones});
+_2c=_28.length;
+if(_2d){
+if(this.isRightFixed){
+_2b=_2c-1;
+_28.splice(_2b,0,{"node":_28[_2b].node.parentNode.insertBefore(_2a,_28[_2b].node)});
+}else{
+_2b=_2c;
+_28.push({"node":this.gridNode.appendChild(_2a)});
+}
+}else{
+if(this.isLeftFixed){
+_2b=(_2c==1)?0:1;
+this._grid.splice(1,0,{"node":this._grid[_2b].node.parentNode.appendChild(_2a,this._grid[_2b].node)});
+_2b=1;
+}else{
+_2b=_2c-this.nbZones;
+this._grid.splice(_2b,0,{"node":_28[_2b].node.parentNode.insertBefore(_2a,_28[_2b].node)});
+}
+}
+if(this.hasResizableColumns){
+if((!_2d&&this.nbZones!=1)||(!_2d&&this.nbZones==1&&!this.isLeftFixed)||(_2d&&i<_27-1)||(_2d&&i==_27-1&&this.isRightFixed)){
+this._createGrip(_2b);
+}
+}
+m.registerByNode(_28[_2b].node);
+this.nbZones++;
+}
+this._updateColumnsWidth(m);
+},_deleteColumn:function(_2f){
+var _30,_31,_32,_33=0,_34=_2f.length,m=this._dragManager;
+for(var i=0;i<_34;i++){
+_32=(this.mode=="right")?_2f[i]:_2f[i]-_33;
+_31=this._grid[_32];
+if(this.hasResizableColumns&&_31.grip){
+dojo.forEach(_31.gripHandler,function(_35){
+dojo.disconnect(_35);
+});
+dojo.destroy(this.domNode.removeChild(_31.grip));
+_31.grip=null;
+}
+m.unregister(_31.node);
+dojo.destroy(this.gridNode.removeChild(_31.node));
+this._grid.splice(_32,1);
+this.nbZones--;
+_33++;
+}
+var _36=this._grid[this.nbZones-1];
+if(_36.grip){
+dojo.forEach(_36.gripHandler,dojo.disconnect);
+dojo.destroy(this.domNode.removeChild(_36.grip));
+_36.grip=null;
+}
+this._updateColumnsWidth(m);
+},_updateColumnsWidth:function(_37){
+this.inherited(arguments);
+_37._dropMode.updateAreas(_37._areaList);
+},destroy:function(){
+dojo.unsubscribe(this._dropHandler);
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/layout/TableContainer.js
===================================================================
--- trunk/web/dojo/dojox/layout/TableContainer.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/TableContainer.js	(revision 9)
@@ -0,0 +1,140 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.TableContainer"]){
+dojo._hasResource["dojox.layout.TableContainer"]=true;
+dojo.experimental("dojox.layout.TableContainer");
+dojo.provide("dojox.layout.TableContainer");
+dojo.require("dijit.layout._LayoutWidget");
+dojo.declare("dojox.layout.TableContainer",dijit.layout._LayoutWidget,{cols:1,labelWidth:"100",showLabels:true,orientation:"horiz",spacing:1,customClass:"",postCreate:function(){
+this.inherited(arguments);
+this._children=[];
+dojo.connect(this,"attr",dojo.hitch(this,function(_1,_2){
+if(_2&&(_1=="orientation"||_1=="customClass"||_1=="cols")){
+this.layout();
+}
+}));
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(this._initialized){
+return;
+}
+var _3=this.getChildren();
+if(_3.length<1){
+return;
+}
+this._initialized=true;
+dojo.addClass(this.domNode,"dijitTableLayout");
+dojo.forEach(_3,function(_4){
+if(!_4.started&&!_4._started){
+_4.startup();
+}
+});
+this.resize();
+this.layout();
+},resize:function(){
+dojo.forEach(this.getChildren(),function(_5){
+if(typeof _5.resize=="function"){
+_5.resize();
+}
+});
+},layout:function(){
+if(!this._initialized){
+return;
+}
+var _6=this.getChildren();
+var _7={};
+var _8=this;
+function _9(_a,_b,_c){
+if(_8.customClass!=""){
+var _d=_8.customClass+"-"+(_b||_a.tagName.toLowerCase());
+dojo.addClass(_a,_d);
+if(arguments.length>2){
+dojo.addClass(_a,_d+"-"+_c);
+}
+}
+};
+dojo.forEach(this._children,dojo.hitch(this,function(_e){
+_7[_e.id]=_e;
+}));
+dojo.forEach(_6,dojo.hitch(this,function(_f,_10){
+if(!_7[_f.id]){
+this._children.push(_f);
+}
+}));
+var _11=dojo.create("table",{"width":"100%","class":"tableContainer-table tableContainer-table-"+this.orientation,"cellspacing":this.spacing},this.domNode);
+var _12=dojo.create("tbody");
+_11.appendChild(_12);
+_9(_11,"table",this.orientation);
+var _13=Math.floor(100/this.cols)+"%";
+var _14=dojo.create("tr",{},_12);
+var _15=(!this.showLabels||this.orientation=="horiz")?_14:dojo.create("tr",{},_12);
+var _16=this.cols*(this.showLabels?2:1);
+var _17=0;
+dojo.forEach(this._children,dojo.hitch(this,function(_18,_19){
+var _1a=_18.colspan||1;
+if(_1a>1){
+_1a=this.showLabels?Math.min(_16-1,_1a*2-1):Math.min(_16,_1a);
+}
+if(_17+_1a-1+(this.showLabels?1:0)>=_16){
+_17=0;
+_14=dojo.create("tr",{},_12);
+_15=this.orientation=="horiz"?_14:dojo.create("tr",{},_12);
+}
+var _1b;
+if(this.showLabels){
+_1b=dojo.create("td",{"class":"tableContainer-labelCell"},_14);
+if(_18.spanLabel){
+dojo.attr(_1b,this.orientation=="vert"?"rowspan":"colspan",2);
+}else{
+_9(_1b,"labelCell");
+var _1c={"for":_18.attr("id")};
+var _1d=dojo.create("label",_1c,_1b);
+if(Number(this.labelWidth)>-1||String(this.labelWidth).indexOf("%")>-1){
+dojo.style(_1b,"width",String(this.labelWidth).indexOf("%")<0?this.labelWidth+"px":this.labelWidth);
+}
+_1d.innerHTML=_18.attr("label")||_18.attr("title");
+}
+}
+var _1e;
+if(_18.spanLabel&&_1b){
+_1e=_1b;
+}else{
+_1e=dojo.create("td",{"class":"tableContainer-valueCell"},_15);
+}
+if(_1a>1){
+dojo.attr(_1e,"colspan",_1a);
+}
+_9(_1e,"valueCell",_19);
+_1e.appendChild(_18.domNode);
+_17+=_1a+(this.showLabels?1:0);
+}));
+if(this.table){
+this.table.parentNode.removeChild(this.table);
+}
+dojo.forEach(_6,function(_1f){
+if(typeof _1f.layout=="function"){
+_1f.layout();
+}
+});
+this.table=_11;
+this.resize();
+},destroyDescendants:function(_20){
+dojo.forEach(this._children,function(_21){
+_21.destroyRecursive(_20);
+});
+},_setSpacingAttr:function(_22){
+this.spacing=_22;
+if(this.table){
+this.table.cellspacing=Number(_22);
+}
+}});
+dojo.extend(dijit._Widget,{label:"",title:"",spanLabel:false,colspan:1});
+}
Index: trunk/web/dojo/dojox/layout/dnd/Avatar.js
===================================================================
--- trunk/web/dojo/dojox/layout/dnd/Avatar.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/dnd/Avatar.js	(revision 9)
@@ -0,0 +1,29 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.dnd.Avatar"]){
+dojo._hasResource["dojox.layout.dnd.Avatar"]=true;
+dojo.provide("dojox.layout.dnd.Avatar");
+dojo.require("dojo.dnd.Avatar");
+dojo.require("dojo.dnd.common");
+dojo.declare("dojox.layout.dnd.Avatar",dojo.dnd.Avatar,{constructor:function(_1,_2){
+this.opacity=_2||0.9;
+},construct:function(){
+var _3=this.manager.source,_4=_3.creator?_3._normalizedCreator(_3.getItem(this.manager.nodes[0].id).data,"avatar").node:this.manager.nodes[0].cloneNode(true);
+dojo.addClass(_4,"dojoDndAvatar");
+_4.id=dojo.dnd.getUniqueId();
+_4.style.position="absolute";
+_4.style.zIndex=1999;
+_4.style.margin="0px";
+_4.style.width=dojo.marginBox(_3.node).w+"px";
+dojo.style(_4,"opacity",this.opacity);
+this.node=_4;
+},update:function(){
+dojo.toggleClass(this.node,"dojoDndAvatarCanDrop",this.manager.canDropFlag);
+},_generateText:function(){
+}});
+}
Index: trunk/web/dojo/dojox/layout/dnd/PlottedDnd.js
===================================================================
--- trunk/web/dojo/dojox/layout/dnd/PlottedDnd.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/dnd/PlottedDnd.js	(revision 9)
@@ -0,0 +1,401 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.dnd.PlottedDnd"]){
+dojo._hasResource["dojox.layout.dnd.PlottedDnd"]=true;
+dojo.provide("dojox.layout.dnd.PlottedDnd");
+dojo.require("dojo.dnd.Source");
+dojo.require("dojo.dnd.Manager");
+dojo.require("dojox.layout.dnd.Avatar");
+dojo.declare("dojox.layout.dnd.PlottedDnd",[dojo.dnd.Source],{GC_OFFSET_X:dojo.dnd.manager().OFFSET_X,GC_OFFSET_Y:dojo.dnd.manager().OFFSET_Y,constructor:function(_1,_2){
+this.childBoxes=null;
+this.dropIndicator=new dojox.layout.dnd.DropIndicator("dndDropIndicator","div");
+this.withHandles=_2.withHandles;
+this.handleClasses=_2.handleClasses;
+this.opacity=_2.opacity;
+this.allowAutoScroll=_2.allowAutoScroll;
+this.dom=_2.dom;
+this.singular=true;
+this.skipForm=true;
+this._over=false;
+this.defaultHandleClass="GcDndHandle";
+this.isDropped=false;
+this._timer=null;
+this.isOffset=(_2.isOffset)?true:false;
+this.offsetDrag=(_2.offsetDrag)?_2.offsetDrag:{x:0,y:0};
+this.hideSource=_2.hideSource?_2.hideSource:true;
+this._drop=this.dropIndicator.create();
+},_calculateCoords:function(_3){
+dojo.forEach(this.node.childNodes,function(_4){
+var c=dojo.coords(_4,true);
+_4.coords={xy:c,w:_4.offsetWidth/2,h:_4.offsetHeight/2,mw:c.w};
+if(_3){
+_4.coords.mh=c.h;
+}
+},this);
+},_legalMouseDown:function(e){
+if(!this.withHandles){
+return true;
+}
+for(var _5=(e.target);_5&&_5!=this.node;_5=_5.parentNode){
+if(dojo.hasClass(_5,this.defaultHandleClass)){
+return true;
+}
+}
+return false;
+},setDndItemSelectable:function(_6,_7){
+for(var _8=_6;_8&&_6!=this.node;_8=_8.parentNode){
+if(dojo.hasClass(_8,"dojoDndItem")){
+dojo.setSelectable(_8,_7);
+return;
+}
+}
+},getDraggedWidget:function(_9){
+var _a=_9;
+while(_a&&_a.nodeName.toLowerCase()!="body"&&!dojo.hasClass(_a,"dojoDndItem")){
+_a=_a.parentNode;
+}
+return (_a)?dijit.byNode(_a):null;
+},isAccepted:function(_b){
+var _c=(_b)?_b.getAttribute("dndtype"):null;
+return (_c&&_c in this.accept);
+},onDndStart:function(_d,_e,_f){
+this.firstIndicator=(_d==this);
+this._calculateCoords(true);
+var m=dojo.dnd.manager();
+if(_e[0].coords){
+this._drop.style.height=_e[0].coords.mh+"px";
+dojo.style(m.avatar.node,"width",_e[0].coords.mw+"px");
+}else{
+this._drop.style.height=m.avatar.node.clientHeight+"px";
+}
+this.dndNodes=_e;
+dojox.layout.dnd.PlottedDnd.superclass.onDndStart.call(this,_d,_e,_f);
+if(_d==this&&this.hideSource){
+dojo.forEach(_e,function(n){
+dojo.style(n,"display","none");
+});
+}
+},onDndCancel:function(){
+var m=dojo.dnd.manager();
+if(m.source==this&&this.hideSource){
+var _10=this.getSelectedNodes();
+dojo.forEach(_10,function(n){
+dojo.style(n,"display","");
+});
+}
+dojox.layout.dnd.PlottedDnd.superclass.onDndCancel.call(this);
+this.deleteDashedZone();
+},onDndDrop:function(_11,_12,_13,_14){
+try{
+if(!this.isAccepted(_12[0])){
+this.onDndCancel();
+}else{
+if(_11==this&&this._over&&this.dropObject){
+this.current=this.dropObject.c;
+}
+dojox.layout.dnd.PlottedDnd.superclass.onDndDrop.call(this,_11,_12,_13,_14);
+this._calculateCoords(true);
+}
+}
+catch(e){
+console.warn(e);
+}
+},onMouseDown:function(e){
+if(this.current==null){
+this.selection={};
+}else{
+if(this.current==this.anchor){
+this.anchor=null;
+}
+}
+if(this.current!==null){
+var c=dojo.coords(this.current,true);
+this.current.coords={xy:c,w:this.current.offsetWidth/2,h:this.current.offsetHeight/2,mh:c.h,mw:c.w};
+this._drop.style.height=this.current.coords.mh+"px";
+if(this.isOffset){
+if(this.offsetDrag.x==0&&this.offsetDrag.y==0){
+var _15=true;
+var _16=dojo.coords(this._getChildByEvent(e));
+this.offsetDrag.x=_16.x-e.pageX;
+this.offsetDrag.y=_16.y-e.clientY;
+}
+if(this.offsetDrag.y<16&&this.current!=null){
+this.offsetDrag.y=this.GC_OFFSET_Y;
+}
+var m=dojo.dnd.manager();
+m.OFFSET_X=this.offsetDrag.x;
+m.OFFSET_Y=this.offsetDrag.y;
+if(_15){
+this.offsetDrag.x=0;
+this.offsetDrag.y=0;
+}
+}
+}
+if(dojo.dnd.isFormElement(e)){
+this.setDndItemSelectable(e.target,true);
+}else{
+this.containerSource=true;
+var _17=this.getDraggedWidget(e.target);
+if(_17&&_17.dragRestriction){
+}else{
+dojox.layout.dnd.PlottedDnd.superclass.onMouseDown.call(this,e);
+}
+}
+},onMouseUp:function(e){
+dojox.layout.dnd.PlottedDnd.superclass.onMouseUp.call(this,e);
+this.containerSource=false;
+if(!dojo.isIE&&this.mouseDown){
+this.setDndItemSelectable(e.target,true);
+}
+var m=dojo.dnd.manager();
+m.OFFSET_X=this.GC_OFFSET_X;
+m.OFFSET_Y=this.GC_OFFSET_Y;
+},onMouseMove:function(e){
+var m=dojo.dnd.manager();
+if(this.isDragging){
+var _18=false;
+if(this.current!=null||(this.current==null&&!this.dropObject)){
+if(this.isAccepted(m.nodes[0])||this.containerSource){
+_18=this.setIndicatorPosition(e);
+}
+}
+if(this.current!=this.targetAnchor||_18!=this.before){
+this._markTargetAnchor(_18);
+m.canDrop(!this.current||m.source!=this||!(this.current.id in this.selection));
+}
+if(this.allowAutoScroll){
+this._checkAutoScroll(e);
+}
+}else{
+if(this.mouseDown&&this.isSource){
+var _19=this.getSelectedNodes();
+if(_19.length){
+m.startDrag(this,_19,this.copyState(dojo.isCopyKey(e)));
+}
+}
+if(this.allowAutoScroll){
+this._stopAutoScroll();
+}
+}
+},_markTargetAnchor:function(_1a){
+if(this.current==this.targetAnchor&&this.before==_1a){
+return;
+}
+this.targetAnchor=this.current;
+this.targetBox=null;
+this.before=_1a;
+},_unmarkTargetAnchor:function(){
+if(!this.targetAnchor){
+return;
+}
+this.targetAnchor=null;
+this.targetBox=null;
+this.before=true;
+},setIndicatorPosition:function(e){
+var _1b=false;
+if(this.current){
+if(!this.current.coords||this.allowAutoScroll){
+this.current.coords={xy:dojo.coords(this.current,true),w:this.current.offsetWidth/2,h:this.current.offsetHeight/2};
+}
+_1b=this.horizontal?(e.pageX-this.current.coords.xy.x)<this.current.coords.w:(e.pageY-this.current.coords.xy.y)<this.current.coords.h;
+this.insertDashedZone(_1b);
+}else{
+if(!this.dropObject){
+this.insertDashedZone(false);
+}
+}
+return _1b;
+},onOverEvent:function(){
+this._over=true;
+dojox.layout.dnd.PlottedDnd.superclass.onOverEvent.call(this);
+if(this.isDragging){
+var m=dojo.dnd.manager();
+if(!this.current&&!this.dropObject&&this.getSelectedNodes()[0]&&this.isAccepted(m.nodes[0])){
+this.insertDashedZone(false);
+}
+}
+},onOutEvent:function(){
+this._over=false;
+this.containerSource=false;
+dojox.layout.dnd.PlottedDnd.superclass.onOutEvent.call(this);
+if(this.dropObject){
+this.deleteDashedZone();
+}
+},deleteDashedZone:function(){
+this._drop.style.display="none";
+var _1c=this._drop.nextSibling;
+while(_1c!=null){
+_1c.coords.xy.y-=parseInt(this._drop.style.height);
+_1c=_1c.nextSibling;
+}
+delete this.dropObject;
+},insertDashedZone:function(_1d){
+if(this.dropObject){
+if(_1d==this.dropObject.b&&((this.current&&this.dropObject.c==this.current.id)||(!this.current&&!this.dropObject.c))){
+return;
+}else{
+this.deleteDashedZone();
+}
+}
+this.dropObject={n:this._drop,c:this.current?this.current.id:null,b:_1d};
+if(this.current){
+dojo.place(this._drop,this.current,_1d?"before":"after");
+if(!this.firstIndicator){
+var _1e=this._drop.nextSibling;
+while(_1e!=null){
+_1e.coords.xy.y+=parseInt(this._drop.style.height);
+_1e=_1e.nextSibling;
+}
+}else{
+this.firstIndicator=false;
+}
+}else{
+this.node.appendChild(this._drop);
+}
+this._drop.style.display="";
+},insertNodes:function(_1f,_20,_21,_22){
+if(this.dropObject){
+dojo.style(this.dropObject.n,"display","none");
+dojox.layout.dnd.PlottedDnd.superclass.insertNodes.call(this,true,_20,true,this.dropObject.n);
+this.deleteDashedZone();
+}else{
+return dojox.layout.dnd.PlottedDnd.superclass.insertNodes.call(this,_1f,_20,_21,_22);
+}
+var _23=dijit.byId(_20[0].getAttribute("widgetId"));
+if(_23){
+dojox.layout.dnd._setGcDndHandle(_23,this.withHandles,this.handleClasses);
+if(this.hideSource){
+dojo.style(_23.domNode,"display","");
+}
+}
+},_checkAutoScroll:function(e){
+if(this._timer){
+clearTimeout(this._timer);
+}
+this._stopAutoScroll();
+var _24=this.dom,y=this._sumAncestorProperties(_24,"offsetTop");
+if((e.pageY-_24.offsetTop+30)>_24.clientHeight){
+this.autoScrollActive=true;
+this._autoScrollDown(_24);
+}else{
+if((_24.scrollTop>0)&&(e.pageY-y)<30){
+this.autoScrollActive=true;
+this._autoScrollUp(_24);
+}
+}
+},_autoScrollUp:function(_25){
+if(this.autoScrollActive&&_25.scrollTop>0){
+_25.scrollTop-=30;
+this._timer=setTimeout(dojo.hitch(this,"_autoScrollUp",_25),100);
+}
+},_autoScrollDown:function(_26){
+if(this.autoScrollActive&&(_26.scrollTop<(_26.scrollHeight-_26.clientHeight))){
+_26.scrollTop+=30;
+this._timer=setTimeout(dojo.hitch(this,"_autoScrollDown",_26),100);
+}
+},_stopAutoScroll:function(){
+this.autoScrollActive=false;
+},_sumAncestorProperties:function(_27,_28){
+_27=dojo.byId(_27);
+if(!_27){
+return 0;
+}
+var _29=0;
+while(_27){
+var val=_27[_28];
+if(val){
+_29+=val-0;
+if(_27==dojo.body()){
+break;
+}
+}
+_27=_27.parentNode;
+}
+return _29;
+}});
+dojox.layout.dnd._setGcDndHandle=function(_2a,_2b,_2c,_2d){
+var cls="GcDndHandle";
+if(!_2d){
+dojo.query(".GcDndHandle",_2a.domNode).removeClass(cls);
+}
+if(!_2b){
+dojo.addClass(_2a.domNode,cls);
+}else{
+var _2e=false;
+for(var i=_2c.length-1;i>=0;i--){
+var _2f=dojo.query("."+_2c[i],_2a.domNode)[0];
+if(_2f){
+_2e=true;
+if(_2c[i]!=cls){
+var _30=dojo.query("."+cls,_2a.domNode);
+if(_30.length==0){
+dojo.removeClass(_2a.domNode,cls);
+}else{
+_30.removeClass(cls);
+}
+dojo.addClass(_2f,cls);
+}
+}
+}
+if(!_2e){
+dojo.addClass(_2a.domNode,cls);
+}
+}
+};
+dojo.declare("dojox.layout.dnd.DropIndicator",null,{constructor:function(cn,tag){
+this.tag=tag||"div";
+this.style=cn||null;
+},isInserted:function(){
+return (this.node.parentNode&&this.node.parentNode.nodeType==1);
+},create:function(){
+if(this.node&&this.isInserted()){
+return this.node;
+}
+var h="90px",el=dojo.doc.createElement(this.tag);
+if(this.style){
+el.className=this.style;
+el.style.height=h;
+}else{
+dojo.style(el,{position:"relative",border:"1px dashed #F60",margin:"2px",height:h});
+}
+this.node=el;
+return el;
+},destroy:function(){
+if(!this.node||!this.isInserted()){
+return;
+}
+this.node.parentNode.removeChild(this.node);
+this.node=null;
+}});
+dojo.extend(dojo.dnd.Manager,{canDrop:function(_31){
+var _32=this.target&&_31;
+if(this.canDropFlag!=_32){
+this.canDropFlag=_32;
+if(this.avatar){
+this.avatar.update();
+}
+}
+},makeAvatar:function(){
+return (this.source.declaredClass=="dojox.layout.dnd.PlottedDnd")?new dojox.layout.dnd.Avatar(this,this.source.opacity):new dojo.dnd.Avatar(this);
+}});
+if(dojo.isIE){
+dojox.layout.dnd.handdleIE=[dojo.subscribe("/dnd/start",null,function(){
+IEonselectstart=document.body.onselectstart;
+document.body.onselectstart=function(){
+return false;
+};
+}),dojo.subscribe("/dnd/cancel",null,function(){
+document.body.onselectstart=IEonselectstart;
+}),dojo.subscribe("/dnd/drop",null,function(){
+document.body.onselectstart=IEonselectstart;
+})];
+dojo.addOnWindowUnload(function(){
+dojo.forEach(dojox.layout.dnd.handdleIE,dojo.unsubscribe);
+});
+}
+}
Index: trunk/web/dojo/dojox/layout/RotatorContainer.js
===================================================================
--- trunk/web/dojo/dojox/layout/RotatorContainer.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/RotatorContainer.js	(revision 9)
@@ -0,0 +1,191 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.RotatorContainer"]){
+dojo._hasResource["dojox.layout.RotatorContainer"]=true;
+dojo.provide("dojox.layout.RotatorContainer");
+dojo.require("dojo.fx");
+dojo.require("dijit.layout.StackContainer");
+dojo.require("dijit.layout.StackController");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.declare("dojox.layout.RotatorContainer",[dijit.layout.StackContainer,dijit._Templated],{templateString:"<div class=\"dojoxRotatorContainer\"><div dojoAttachPoint=\"tabNode\"></div><div class=\"dojoxRotatorPager\" dojoAttachPoint=\"pagerNode\"></div><div class=\"dojoxRotatorContent\" dojoAttachPoint=\"containerNode\"></div></div>",showTabs:true,transitionDelay:5000,transition:"fade",transitionDuration:1000,autoStart:true,suspendOnHover:false,pauseOnManualChange:null,reverse:false,pagerId:"",cycles:-1,pagerClass:"dojox.layout.RotatorPager",postCreate:function(){
+this.inherited(arguments);
+dojo.style(this.domNode,"position","relative");
+if(this.cycles-0==this.cycles&&this.cycles!=-1){
+this.cycles++;
+}else{
+this.cycles=-1;
+}
+if(this.pauseOnManualChange===null){
+this.pauseOnManualChange=!this.suspendOnHover;
+}
+var id=this.id||"rotator"+(new Date()).getTime(),sc=new dijit.layout.StackController({containerId:id},this.tabNode);
+this.tabNode=sc.domNode;
+this._stackController=sc;
+dojo.style(this.tabNode,"display",this.showTabs?"":"none");
+this.connect(sc,"onButtonClick","_manualChange");
+this._subscriptions=[dojo.subscribe(this.id+"-cycle",this,"_cycle"),dojo.subscribe(this.id+"-state",this,"_state")];
+var d=Math.round(this.transitionDelay*0.75);
+if(d<this.transitionDuration){
+this.transitionDuration=d;
+}
+if(this.suspendOnHover){
+this.connect(this.domNode,"onmouseover","_onMouseOver");
+this.connect(this.domNode,"onmouseout","_onMouseOut");
+}
+},startup:function(){
+if(this._started){
+return;
+}
+var c=this.getChildren();
+for(var i=0,_1=c.length;i<_1;i++){
+if(c[i].declaredClass==this.pagerClass){
+this.pagerNode.appendChild(c[i].domNode);
+break;
+}
+}
+this.inherited(arguments);
+if(this.autoStart){
+setTimeout(dojo.hitch(this,"_play"),10);
+}else{
+this._updatePager();
+}
+},destroy:function(){
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+this.inherited(arguments);
+},_setShowTabsAttr:function(_2){
+this.showTabs=_2;
+dojo.style(this.tabNode,"display",_2?"":"none");
+},_updatePager:function(){
+var c=this.getChildren();
+dojo.publish(this.id+"-update",[this._playing,dojo.indexOf(c,this.selectedChildWidget)+1,c.length]);
+},_onMouseOver:function(){
+this._resetTimer();
+this._over=true;
+},_onMouseOut:function(){
+this._over=false;
+if(this._playing){
+clearTimeout(this._timer);
+this._timer=setTimeout(dojo.hitch(this,"_play",true),200);
+}
+},_resetTimer:function(){
+clearTimeout(this._timer);
+this._timer=null;
+},_cycle:function(_3){
+if(_3 instanceof Boolean||typeof _3=="boolean"){
+this._manualChange();
+}
+var c=this.getChildren(),_4=c.length,i=dojo.indexOf(c,this.selectedChildWidget)+(_3===false||(_3!==true&&this.reverse)?-1:1);
+this.selectChild(c[(i<_4?(i<0?_4-1:i):0)]);
+this._updatePager();
+},_manualChange:function(){
+if(this.pauseOnManualChange){
+this._playing=false;
+}
+this.cycles=-1;
+},_play:function(_5){
+this._playing=true;
+this._resetTimer();
+if(_5!==true&&this.cycles>0){
+this.cycles--;
+}
+if(this.cycles==0){
+this._pause();
+}else{
+if((!this.suspendOnHover||!this._over)&&this.transitionDelay){
+this._timer=setTimeout(dojo.hitch(this,"_cycle"),this.selectedChildWidget.domNode.getAttribute("transitionDelay")||this.transitionDelay);
+}
+}
+this._updatePager();
+},_pause:function(){
+this._playing=false;
+this._resetTimer();
+},_state:function(_6){
+if(_6){
+this.cycles=-1;
+this._play();
+}else{
+this._pause();
+}
+},_transition:function(_7,_8){
+this._resetTimer();
+if(_8&&this.transitionDuration){
+switch(this.transition){
+case "fade":
+this._fade(_7,_8);
+return;
+}
+}
+this._transitionEnd();
+this.inherited(arguments);
+},_transitionEnd:function(){
+if(this._playing){
+this._play();
+}else{
+this._updatePager();
+}
+},_fade:function(_9,_a){
+this._styleNode(_a.domNode,1,1);
+this._styleNode(_9.domNode,0,2);
+this._showChild(_9);
+if(this.doLayout&&_9.resize){
+_9.resize(this._containerContentBox||this._contentBox);
+}
+var _b={duration:this.transitionDuration},_c=dojo.fx.combine([dojo["fadeOut"](dojo.mixin({node:_a.domNode},_b)),dojo["fadeIn"](dojo.mixin({node:_9.domNode},_b))]);
+this.connect(_c,"onEnd",dojo.hitch(this,function(){
+this._hideChild(_a);
+this._transitionEnd();
+}));
+_c.play();
+},_styleNode:function(_d,_e,_f){
+dojo.style(_d,"opacity",_e);
+dojo.style(_d,"zIndex",_f);
+dojo.style(_d,"position","absolute");
+}});
+dojo.declare("dojox.layout.RotatorPager",[dijit._Widget,dijit._Templated,dijit._Contained],{widgetsInTemplate:true,rotatorId:"",postMixInProperties:function(){
+this.templateString="<div>"+this.srcNodeRef.innerHTML+"</div>";
+},postCreate:function(){
+var p=dijit.byId(this.rotatorId)||this.getParent();
+if(p&&p.declaredClass=="dojox.layout.RotatorContainer"){
+if(this.previous){
+dojo.connect(this.previous,"onClick",function(){
+dojo.publish(p.id+"-cycle",[false]);
+});
+}
+if(this.next){
+dojo.connect(this.next,"onClick",function(){
+dojo.publish(p.id+"-cycle",[true]);
+});
+}
+if(this.playPause){
+dojo.connect(this.playPause,"onClick",function(){
+this.set("label",this.checked?"Pause":"Play");
+dojo.publish(p.id+"-state",[this.checked]);
+});
+}
+this._subscriptions=[dojo.subscribe(p.id+"-state",this,"_state"),dojo.subscribe(p.id+"-update",this,"_update")];
+}
+},destroy:function(){
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+this.inherited(arguments);
+},_state:function(_10){
+if(this.playPause&&this.playPause.checked!=_10){
+this.playPause.attr("label",_10?"Pause":"Play");
+this.playPause.attr("checked",_10);
+}
+},_update:function(_11,_12,_13){
+this._state(_11);
+if(this.current&&_12){
+this.current.innerHTML=_12;
+}
+if(this.total&&_13){
+this.total.innerHTML=_13;
+}
+}});
+}
Index: trunk/web/dojo/dojox/layout/resources/RadioGroup.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/RadioGroup.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/RadioGroup.css	(revision 9)
@@ -0,0 +1,40 @@
+
+.dojoxRadioButtons {
+	margin:0; padding:4px;
+	width:100%;
+	outline:0;
+}
+.dojoxRadioButtons tbody  {
+	margin:0; padding:0;
+	width:100%;
+}
+.dojoxRadioButton {
+	text-align:center;
+	cursor:pointer;
+	margin:0;
+}
+.dojoxRadioButtonSelected {
+	border:1px solid #ededed;
+}
+.tundra .dojoxRadioButtonSelected {
+	border:1px solid #a0a0a0;
+	background:#b7b7b7;
+}
+.soria .dojoxRadioButtonSelected {
+	background:#b7cdee url('../../../dijit/themes/soria/images/gradientTopBg.png') repeat-x top center;
+}
+.dojoxRadioButtonLabel {
+	padding:8px;
+	text-align:center;
+	display:block;
+}
+.dojoxRadioGroup {
+	overflow:hidden;
+	border:0;
+	margin:0; padding:0;
+}
+.dojoxRadioView {
+	position:relative;
+	overflow:hidden;
+	height:100%;
+}
Index: trunk/web/dojo/dojox/layout/resources/ResizeHandle.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/ResizeHandle.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/ResizeHandle.css	(revision 9)
@@ -0,0 +1,40 @@
+.dojoxResizeHandle {
+	float: right;
+	position: absolute;
+	right: 2px;
+	bottom: 2px;
+	width: 13px;
+	height: 13px;
+	z-index: 20;
+	background-image: url('icons/resize.png');
+	line-height: 0px;
+}
+.dijitRtl .dojoxResizeHandle {
+        float: right;
+        left: 0px;
+        right: auto;
+	background-image: url('icons/resizeRtl.png');
+}
+.dojoxResizeNW {
+	cursor: nw-resize;
+}
+.dijitRtl .dojoxResizeNW {
+        cursor: ne-resize;
+}
+.dojoxResizeNE {
+	cursor: ne-resize; 
+}
+.dijitRtl .dojoxResizeNE {
+        cursor: nw-resize;
+}
+.dojoxResizeW {
+	cursor: w-resize; 
+}
+.dojoxResizeN { 
+	cursor: n-resize; 
+}
+.dojoxResizeHandleClone {
+	position:absolute; top:0; left:0; 
+	border:1px dashed #666; 
+	z-index:999; 
+}
Index: trunk/web/dojo/dojox/layout/resources/RotatorContainer.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/RotatorContainer.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/RotatorContainer.css	(revision 9)
@@ -0,0 +1,41 @@
+.dojoxRotatorContainer .dijitStackController,
+.dojoxRotatorPager {
+	position:absolute;
+	z-index:3;
+}
+.dojoxRotatorContent {
+	position:absolute;
+	z-index:1;
+}
+.dojoxRotatorContainer {
+	border:1px solid #9b9b9b;
+}
+.dojoxRotatorContainer .dijitStackController {
+	right:5px;
+	top:5px;
+}
+.dojoxRotatorContainer .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {
+	background-color:#000;
+	background-image:none;
+	color:#fff;
+}
+.dojoxRotatorContainer .dojoxRotatorPager{bottom:5px;right:5px;}
+.rotatorIcons .dijitButton{margin:0;}
+.rotatorIcons .dijitButtonNode{background:none !important;border:0 !important;padding:0 !important;}
+.rotatorIcons .dijitButtonText{display:none;}
+.rotatorIcons .previous,
+.rotatorIcons .next,
+.rotatorIcons .playPause,
+.rotatorIcons .dijitToggleButtonChecked .playPause{background-image:url("icons/rotator.png");background-repeat:no-repeat;display:block;height:16px;width:16px;}
+.rotatorIcons .previous{background-position:0 0;}
+.rotatorIcons .dijitButtonHover .previous{background-position:0 -16px;}
+.rotatorIcons .dijitButtonActive .previous{background-position:0 -32px;}
+.rotatorIcons .next{background-position:-16px 0;}
+.rotatorIcons .dijitButtonHover .next{background-position:-16px -16px;}
+.rotatorIcons .dijitButtonActive .next{background-position:-16px -32px;}
+.rotatorIcons .playPause{background-position:-32px 0;}
+.rotatorIcons .dijitToggleButtonHover .playPause{background-position:-32px -16px;}
+.rotatorIcons .dijitToggleButtonActive .playPause{background-position:-32px -32px;}
+.rotatorIcons .dijitToggleButtonChecked .playPause{background-position:-48px 0;}
+.rotatorIcons .dijitToggleButtonCheckedHover .playPause{background-position:-48px -16px;}
+.rotatorIcons .dijitToggleButtonCheckedActive .playPause{background-position:-48px -32px;}
Index: trunk/web/dojo/dojox/layout/resources/DndGridContainer.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/DndGridContainer.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/DndGridContainer.css	(revision 9)
@@ -0,0 +1,10 @@
+
+.dojoDndItemOver		{background-color: #feb !important;}
+.dojoDndItemSelected	{background: #ccf; color: #444;}
+.dojoDndItemBefore		{border-top:    3px solid red;}
+.dojoDndItemAfter		{border-bottom: 3px solid red;}
+.dojoDndItemAnchor		{background: #ccf; color: black;}
+.dojoDndItemOver.dojoDndItemSelected	{background: #ec8;}
+.dojoDndItemOver.dojoDndItemAnchor		{background: #feb !important;}
+.dojoDndAvatarItem		{background: #eee;}
+.dndDropIndicator 		{border: 1px dashed #FF6600;cursor: default;}
Index: trunk/web/dojo/dojox/layout/resources/ExpandoPane.html
===================================================================
--- trunk/web/dojo/dojox/layout/resources/ExpandoPane.html	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/ExpandoPane.html	(revision 9)
@@ -0,0 +1,9 @@
+<div class="dojoxExpandoPane">
+	<div dojoAttachPoint="titleWrapper" class="dojoxExpandoTitle">
+		<div class="dojoxExpandoIcon" dojoAttachPoint="iconNode" dojoAttachEvent="onclick:toggle"><span class="a11yNode">X</span></div>			
+		<span class="dojoxExpandoTitleNode" dojoAttachPoint="titleNode">${title}</span>
+	</div>
+	<div class="dojoxExpandoWrapper" dojoAttachPoint="cwrapper" dojoAttachEvent="ondblclick:_trap">
+		<div class="dojoxExpandoContent" dojoAttachPoint="containerNode"></div>
+	</div>
+</div>
Index: trunk/web/dojo/dojox/layout/resources/ScrollPane.html
===================================================================
--- trunk/web/dojo/dojox/layout/resources/ScrollPane.html	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/ScrollPane.html	(revision 9)
@@ -0,0 +1,6 @@
+<div class="dojoxScrollWindow" dojoAttachEvent="onmouseenter: _enter, onmouseleave: _leave">
+    <div class="dojoxScrollWrapper" style="${style}" dojoAttachPoint="wrapper" dojoAttachEvent="onmousemove: _calc">
+	<div class="dojoxScrollPane" dojoAttachPoint="containerNode"></div>
+    </div>
+    <div dojoAttachPoint="helper" class="dojoxScrollHelper"><span class="helperInner">|</span></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/layout/resources/ExpandoPane.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/ExpandoPane.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/ExpandoPane.css	(revision 9)
@@ -0,0 +1,247 @@
+	
+	.dojoxExpandoPane {
+		overflow:hidden;
+		z-index:440 !important;
+	}
+	
+	.dojoxExpandoPane .dojoxExpandoWrapper {
+		overflow:hidden;
+	}
+	.dojoxExpandoClosed .dojoxExpandoTitleNode {
+		display:none;
+	}
+	
+	.dojoxExpandoClosed .dojoxExpandoWrapper * {
+		overflow:hidden !important;
+	}
+	.dojoxExpandoTitleNode {
+		padding-right:6px; 
+		padding-left:6px;
+	}
+	.dojoxExpandoIcon .a11yNode {
+		display:none;
+		visibility:hidden;
+	}
+	.dojoxExpandoBottom .dojoxExpandoIcon,
+	.dojoxExpandoTop .dojoxExpandoIcon,
+	.dojoxExpandoLeft .dojoxExpandoIcon {
+		float:right;
+		margin-right:2px;
+	}
+	.dojoxExpandoRight .dojoxExpandoIcon {
+		float:left;
+		margin-left:2px;
+	}
+	.dojoxExpandoIcon {
+		width:14px;
+		cursor:pointer;
+		background-position:-60px 0px;
+		background-repeat: no-repeat;
+		height:14px;
+	}
+	.dojoxExpandoClosed .dojoxExpandoIcon {
+		background-position: 0px 0px;
+		margin:0 auto;
+	}
+	
+	.dijitBorderContainer-dijitExpandoPane {
+		border: none !important; 
+	}
+	
+	.soria .dojoxExpandoTitle {
+		height:16px;
+		font-size:0.9em;
+		font-weight:bold;
+		padding:3px;
+		padding-top:6px;
+		padding-bottom:5px;
+		background:#F0F4FC url("../../../dijit/themes/soria/images/tabContainerSprite.gif") repeat-x scroll 0pt -50px;
+		border-left: 1px solid #B1BADF;
+		border-right: 1px solid #B1BADF;
+	}
+	
+	.soria .dojoxExpandoClosed .dojoxExpandoTitle {
+		background: none;
+		background-color: #F0F4FC;
+		border: none;
+	}
+	
+	.soria .dojoxExpandoClosed {
+		background: none;
+		background-color: #F0F4FC;
+		border: 1px solid #B1BADF !important;
+	}
+	
+	.soria .dojoxExpandoIcon {
+		background-image: url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png');
+	}
+	
+	.dj_ie6 .soria .dojoxExpandoIcon {
+		background-image: url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.gif');
+	}
+		
+	
+	.tundra .dojoxExpandoTitle {
+		font-weight: bold;
+		padding: 5px;
+		padding-top: 6px;
+		padding-bottom: 6px;
+		background: #fafafa url("../../../dijit/themes/tundra/images/accordionItemActive.gif") repeat-x scroll left top;
+		border-top: 1px solid #ccc;
+		border-left: 1px solid #ccc;
+		border-right: 1px solid #ccc;
+	}
+		
+	.tundra .dojoxExpandoClosed .dojoxExpandoTitle {
+		background: none;
+		background-color: #fafafa;
+		border: none;
+		padding:3px;
+	}
+	
+	.tundra .dojoxExpandoClosed {
+		background: none;
+		background-color: #fafafa;
+		border: 1px solid #ccc !important;
+	}
+	.tundra .dojoxExpandoRight .dojoxExpandoTitle,
+	.tundra .dojoxExpandoLeft .dojoxExpandoTitle,
+	.tundra .dojoxExpandoClosed .dojoxExpandoTitle,
+	.tundra .dojoxExpandoClosed {
+		background-color: #fafafa;
+	}
+	
+	.tundra .dojoxExpandoIcon {
+		background-image: url('../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.gif');
+	}
+	
+	.tundra .dojoxExpandoClosed .dojoxExpandoIconLeft,
+	.tundra .dojoxExpandoClosed .dojoxExpandoIconRight,
+	.tundra .dojoxExpandoClosed .dojoxExpandoIconTop,
+	.tundra .dojoxExpandoClosed .dojoxExpandoIconBottom {
+		margin-top: 3px;
+	}
+	
+	
+	.claro .dojoxExpandoTitle {
+		font-weight: bold;
+		border:1px solid #769DC0;
+		border-bottom:none;
+        background-color:#cde8ff;
+		background-image: url("../../../dijit/themes/claro/layout/images/accordion.png");
+        background-position:0px 0px;
+        background-repeat:repeat-x;
+		padding: 5px 7px 2px 7px;
+        min-height:17px;
+        color:#4a4a4a;
+	}
+		
+	.claro .dojoxExpandoClosed .dojoxExpandoTitle {
+		background: none;
+		background-color: #E6E6E7;
+		border: none;
+		padding:3px;
+	}
+	
+	.claro .dojoxExpandoClosed {
+		background: none;
+		background-color: #E6E6E7;
+		border: 1px solid #769DC0 !important;
+	}
+	.claro .dojoxExpandoRight .dojoxExpandoTitle,
+	.claro .dojoxExpandoLeft .dojoxExpandoTitle,
+	.claro .dojoxExpandoClosed .dojoxExpandoTitle{
+		background-color: #E6E6E7;
+	}
+	.claro .dojoxExpandoClosed .dojoxExpandoTitle{
+		background-image: url("../../../dijit/themes/claro/layout/images/accordion.png");
+		background-position:0 0;
+	}
+	
+	
+	.claro .dojoxExpandoIcon {
+		background-image: url('../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.gif');
+	}
+	
+	.claro .dojoxExpandoClosed .dojoxExpandoIconLeft,
+	.claro .dojoxExpandoClosed .dojoxExpandoIconRight,
+	.claro .dojoxExpandoClosed .dojoxExpandoIconTop,
+	.claro .dojoxExpandoClosed .dojoxExpandoIconBottom {
+		margin-top: 3px;
+	}
+	
+	
+	.nihilo .dojoxExpandoPane {
+		background: #fafafa;
+	}
+	
+	.nihilo .dojoxExpandoTitle {
+		height:16px;
+		font-size:0.9em;
+		font-weight:bold;
+		padding:3px;
+		padding-top:6px;
+		padding-bottom:5px;
+		background:#fafafa url("../../../dijit/themes/nihilo/images/tabContainerSprite.gif") repeat-x scroll 0pt -50px;
+		border-left: 1px solid #ccc;
+		border-right: 1px solid #ccc;
+	}
+	
+	.nihilo .dojoxExpandoClosed .dojoxExpandoTitle {
+		background: none;
+		background-color: #fafafa;
+		border: none;
+	}
+	
+	.nihilo .dojoxExpandoClosed {
+		background: none;
+		background-color: #fafafa;
+		border: 1px solid #ccc !important;
+	}
+	
+	.nihilo .dojoxExpandoIcon {
+		background-image: url('../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png');
+	}
+	
+	.dj_ie6 .nihilo .dojoxExpandoIcon {
+		background-image: url('../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.gif');
+	}
+		
+	.nihilo .dojoxExpandoTop {
+		border-bottom:1px solid #ccc;
+		border-left:1px solid #ccc;
+		border-right:1px solid #ccc; 
+	}
+	
+	
+	
+	.dojoxExpandoClosed .dojoxExpandoIcon {
+		margin-right:4px;
+	}
+	.dojoxExpandoIconLeft {
+	  background-position: 0 0;
+	}
+	.dojoxExpandoClosed .dojoxExpandoIconLeft {
+	  background-position: -30px 0;
+		margin-right: 4px;
+	}
+	.dojoxExpandoIconRight {
+	  background-position: -30px 0;
+	}
+	.dojoxExpandoClosed .dojoxExpandoIconRight {
+	  background-position: 0 0;
+		margin-left: 4px;
+	}
+	.dojoxExpandoIconBottom {
+	  background-position: -15px 0;
+	}
+	.dojoxExpandoClosed .dojoxExpandoIconBottom {
+	  background-position: -45px 0;
+		margin-top:1px;
+	}
+	.dojoxExpandoIconTop {
+	  background-position: -45px 0;
+	}
+	.dojoxExpandoClosed .dojoxExpandoIconTop {
+	  background-position: -15px 0;
+	}
Index: trunk/web/dojo/dojox/layout/resources/ScrollPane.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/ScrollPane.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/ScrollPane.css	(revision 9)
@@ -0,0 +1,21 @@
+.dojoxScrollWindow {
+	position:relative;
+	overflow:hidden;
+}
+.dojoxScrollHelper .helperInner {
+	visibility: hidden;
+}
+.dojoxScrollHelper {
+	border:1px solid #b7b7b7;
+	width:4px;
+	background:#ededed;
+	height:4px;
+	position:absolute;
+	top:4px;
+	left:4px;
+	border-radius: 3px;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+}
+.dojoxScrollWrapper {
+}
Index: trunk/web/dojo/dojox/layout/resources/FloatingPane.html
===================================================================
--- trunk/web/dojo/dojox/layout/resources/FloatingPane.html	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/FloatingPane.html	(revision 9)
@@ -0,0 +1,14 @@
+<div class="dojoxFloatingPane" id="${id}">
+	<div tabindex="0" waiRole="button" class="dojoxFloatingPaneTitle" dojoAttachPoint="focusNode">
+		<span dojoAttachPoint="closeNode" dojoAttachEvent="onclick: close" class="dojoxFloatingCloseIcon"></span>
+		<span dojoAttachPoint="maxNode" dojoAttachEvent="onclick: maximize" class="dojoxFloatingMaximizeIcon">&thinsp;</span>
+		<span dojoAttachPoint="restoreNode" dojoAttachEvent="onclick: _restore" class="dojoxFloatingRestoreIcon">&thinsp;</span>	
+		<span dojoAttachPoint="dockNode" dojoAttachEvent="onclick: minimize" class="dojoxFloatingMinimizeIcon">&thinsp;</span>
+		<span dojoAttachPoint="titleNode" class="dijitInline dijitTitleNode"></span>
+	</div>
+	<div dojoAttachPoint="canvas" class="dojoxFloatingPaneCanvas">
+		<div dojoAttachPoint="containerNode" waiRole="region" tabindex="-1" class="${contentClass}">
+		</div>
+		<span dojoAttachPoint="resizeHandle" class="dojoxFloatingResizeHandle"></span>
+	</div>
+</div>
Index: trunk/web/dojo/dojox/layout/resources/GridContainer.html
===================================================================
--- trunk/web/dojo/dojox/layout/resources/GridContainer.html	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/GridContainer.html	(revision 9)
@@ -0,0 +1,11 @@
+<div id="${id}" class="gridContainer" dojoAttachPoint="containerNode" tabIndex="0" dojoAttachEvent="onkeypress:_selectFocus">
+	<div dojoAttachPoint="gridContainerDiv">
+		<table class="gridContainerTable" dojoAttachPoint="gridContainerTable" cellspacing="0" cellpadding="0">
+			<tbody>
+				<tr dojoAttachPoint="gridNode" >
+					
+				</tr>
+			</tbody>
+		</table>
+	</div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/layout/resources/icons/resizeRtl.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/layout/resources/icons/resizeRtl.png
===================================================================
--- trunk/web/dojo/dojox/layout/resources/icons/resizeRtl.png	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/icons/resizeRtl.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/layout/resources/icons/resizeRtl.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/layout/resources/icons/gridcontainer_grip.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/layout/resources/icons/gridcontainer_grip.gif
===================================================================
--- trunk/web/dojo/dojox/layout/resources/icons/gridcontainer_grip.gif	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/icons/gridcontainer_grip.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/layout/resources/icons/gridcontainer_grip.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/layout/resources/icons/grip_bg.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/layout/resources/icons/grip_bg.gif
===================================================================
--- trunk/web/dojo/dojox/layout/resources/icons/grip_bg.gif	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/icons/grip_bg.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/layout/resources/icons/grip_bg.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/layout/resources/icons/rotator.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/layout/resources/icons/rotator.png
===================================================================
--- trunk/web/dojo/dojox/layout/resources/icons/rotator.png	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/icons/rotator.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/layout/resources/icons/rotator.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/layout/resources/icons/resize.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/layout/resources/icons/resize.png
===================================================================
--- trunk/web/dojo/dojox/layout/resources/icons/resize.png	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/icons/resize.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/layout/resources/icons/resize.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/layout/resources/icons/pixel.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/layout/resources/icons/pixel.gif
===================================================================
--- trunk/web/dojo/dojox/layout/resources/icons/pixel.gif	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/icons/pixel.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/layout/resources/icons/pixel.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/layout/resources/FloatingPane.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/FloatingPane.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/FloatingPane.css	(revision 9)
@@ -0,0 +1,154 @@
+.dojoxFloatingPane {
+	background-color:#fff;
+	position:relative; 
+	border: 1px solid #dedede; 
+	overflow: hidden;
+	-webkit-box-shadow: 0px 5px 10px #adadad;
+}
+.dojoxFloatingPaneFg {
+	-webkit-box-shadow: 0px 8px 20px #525252;
+}
+.dojoxFloatingPaneTitle {
+	background: #cccccc;
+	background:#fafafa repeat-x bottom left;
+	border:1px solid #bfbfbf;
+	padding:4px 4px 2px 4px;
+	cursor: pointer;
+	white-space: nowrap;
+}
+.soria .dojoxFloatingPaneTitle {
+	background:#fff url("../../../dijit/themes/soria/images/titleBar.png") repeat-x top left;
+	border:1px solid #b1badf;
+	font-size: 0.9em;
+	font-weight: bold;
+	line-height:1.2em;
+}
+.tundra .dojoxFloatingPaneTitle {
+	background:#fafafa url("../../../dijit/themes/tundra/images/titleBarBg.gif") repeat-x bottom left;
+	border:1px solid #bfbfbf;
+	color:#000; 	
+}
+.dojoxFloatingCloseIcon {
+	background:url('../../../dijit/themes/tundra/images/tabClose.png') no-repeat center center; 
+	width:16px;
+	height:16px; 
+	overflow:hidden;
+	float:right; 
+}
+.dojoxFloatingMinimizeIcon {
+	background:url('../../../dijit/themes/tundra/images/spriteArrows.png') no-repeat 0px center; 
+	width:7px;
+	margin: 0px 4px;
+	overflow:hidden;
+	float:right; 
+}
+.soria .dojoxFloatingMinimizeIcon {
+	background:url("../../../dijit/themes/soria/images/spriteRoundedIconsSmallBl.png") no-repeat -15px top;
+	width: 14px;
+	margin: 0px 2px;
+}
+.floatingPaneMaximized .dojoxFloatingMaximizeIcon { display:none; }
+.dojoxFloatingMaximizeIcon {
+	background:url('../../../dijit/themes/tundra/images/spriteArrows.png') no-repeat -21px center;
+	width:7px;
+	margin: 0px 4px;
+	overflow:hidden;
+	float:right;	
+}
+.soria .dojoxFloatingMaximizeIcon {
+	background:url("../../../dijit/themes/soria/images/spriteRoundedIconsSmallBl.png") no-repeat -45px top;
+}
+.floatingPaneMaximized .dojoxFloatingRestoreIcon { display:inline; }
+.dojoxFloatingRestoreIcon {
+	background:url('../../../dijit/themes/tundra/images/spriteArrows.png') no-repeat 0px center; 
+	width:7px;
+	margin: 0px 4px;
+	float:right;
+	display:none;
+}
+.dojoxFloatingResizeHandle {
+	background:url('icons/resize.png') no-repeat bottom right;
+	position:absolute; 
+	right:0; 
+	bottom:0; 	
+	width:16px;
+	height:16px; 
+	cursor:nw-resize;
+}
+.dojoxFloatingCloseIcon {
+	width:15px;
+	height:15px; 
+	overflow:hidden;
+	float:right; 
+	cursor:pointer;
+}
+.soria .dojoxFloatingCloseIcon {
+	background:url("../../../dijit/themes/soria/images/spriteRoundedIconsSmallBl.png") no-repeat -60px top;
+}
+.tundra .dojoxFloatingCloseIcon {
+	background:url('../../../dijit/themes/tundra/images/tabClose.png') no-repeat center center; 	
+}
+.dojoxFloatingDockDefault {
+	position:absolute;
+	bottom:0px;
+	left:0px;
+	overflow:hidden; 
+	margin:0;
+	margin-bottom:3px; 
+	padding:0px; 
+	width:100%;
+	z-index:99; 
+	background:transparent;
+	
+}
+.dojoxDockList {
+	padding: 0px;
+	margin: 0px;
+}
+.dojoxDockRestoreButton {
+	background:url('../../../dijit/themes/tundra/images/arrowUp.png') no-repeat center center;
+	width:16px; height:16px;
+	overflow:hidden; 
+	float:left;
+	margin-top:2px; 
+}
+.soria .dojoxDockRestoreButton {
+	background:url("../../../dijit/themes/soria/images/spriteRoundedIconsSmallBl.png") no-repeat -45px top;
+}
+.dojoxDockTitleNode {
+	overflow:hidden;
+}
+.dojoxDock {
+	display: block;
+	border: 1px solid black;
+	position: absolute;
+	padding:0;
+	margin:0;
+	background:#fcfcfc;
+}
+.dojoxDockNode {
+	border: 1px solid #adadad;
+	border-radius: 2px;
+	-webkit-border-radius: 2px;
+	-moz-border-radius: 3px;
+	cursor:pointer; 
+	list-style: none;
+	padding: 2px;
+	margin: 0px;
+	height: 16px;
+	width: auto;
+	float: left;
+	background: #fafafa url("../../../dijit/themes/tundra/images/titleBarBg.gif") repeat-x bottom left;
+}
+.soria .dojoxDockNode {
+	background:#b7cdee url("../../../dijit/themes/soria/images/titleBar.png") repeat-x;
+}
+.dojoxFloatingPaneContent {
+	overflow: auto;
+	background-color: #fff; 
+	height: 100%; 
+	width:	100%; 
+}
+.dojoxFloatingPaneCanvas {
+	background-color:#fff;
+}
Index: trunk/web/dojo/dojox/layout/resources/GridContainer.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/GridContainer.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/GridContainer.css	(revision 9)
@@ -0,0 +1,155 @@
+
+.dragNode{
+	z-index:10000;
+	cursor:move;
+}
+.dragHandle{
+	cursor:move;
+}
+.dropIndicator{
+	position:relative;
+	height:50px;
+	border:1px dashed #FFF;
+}
+.dropIndicator > div{
+	position:absolute;
+	left:0;top:0;right:0;bottom:0;	
+	background-color:#000;
+	opacity:0.17; 
+	filter:alpha(opacity=17); 
+	-khtml-opacity:0.17; 
+	-moz-opacity:0.17;
+}
+.dj_ie6 .dropIndicator div{
+	position:relative;
+	height:100%;
+	background-color:#000;
+	filter:alpha(opacity=17); 
+}
+.dj_ie6 .dropIndicator{
+	_margin:10px;
+}
+.dndCover{
+	background-image:url(../../mdnd/../layout/resources/icons/pixel.gif);
+	position:absolute;
+	left:0;
+	top:0;
+	width:100%;
+	height:1000px;
+	z-index:9999;
+	cursor:move;
+}
+.dndCover2{
+	z-index: 10001;
+}
+.dragNode{
+	z-index:10000;
+	cursor:move;
+}
+.dragHandle{
+	cursor:move;
+}
+.dropIndicator{
+	position:relative;
+	height:50px;
+	border:1px dashed #FFF;
+}
+.dropIndicator > div{
+	position:absolute;
+	left:0;top:0;right:0;bottom:0;	
+	background-color:#000;
+	opacity:0.17; 
+	filter:alpha(opacity=17); 
+	-khtml-opacity:0.17; 
+	-moz-opacity:0.17;
+}
+.dj_ie6 .dropIndicator div{
+	position:relative;
+	height:100%;
+	background-color:#000;
+	filter:alpha(opacity=17); 
+}
+.dj_ie6 .dropIndicator{
+	_margin:10px;
+}
+.dndCover{
+	background-image:url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw%3D%3D);
+	position:absolute;
+	left:0;
+	top:0;
+	width:100%;
+	height:1000px;
+	z-index:9999;
+	cursor:move;
+}
+.dj_ie6 .orange .dndCover, .dj_ie7 .orange .dndCover{
+	background-image:url(../../mdnd/../images/oaf/pixel.gif);
+}
+.orange .dndCover2{
+	z-index: 10001;
+}
+.dj_ie6 .gridContainer *{
+	zoom:1;
+}
+.gridContainer{
+	display:block;	
+	position:relative;
+	background:#FFF;	
+	margin:0;	
+	width:100%;
+	 
+	height:auto;
+	overflow-y:auto;
+	overflow-x:hidden !important;
+}
+	
+.gridContainerTable{
+	width:100%;
+	border:1px solid #BFBFBF;
+}
+.gridContainerTable tbody, .gridContainerTable tr{
+	height:100%;
+}
+.gridContainerZone{
+	vertical-align:top;	
+	background-color:#FDFDFD;	
+	height:100%;
+}
+.gridContainerZone .serviceWidgetTitleText h2{
+	position:relative;
+}
+.gridContainerGrip{
+	cursor:default;
+	position:absolute;
+	top:0;	
+	width:10px;	
+	padding:0;	
+	margin:0;
+	background-image:url(icons/pixel.gif);
+	height:100%;
+}
+	
+.gridContainerGripShow{
+	cursor:e-resize;	
+	position:absolute;	
+	top:0;
+	width:10px;	
+	padding:0;	
+	margin:0;	
+	background-image:url(icons/gridcontainer_grip.gif);
+	height:100%;
+}
+.dropIndicator{
+	border:2px dashed #BFBFBF;
+}
+.dropIndicator > div{
+	background-color:#FFF;
+}
+.dj_ie6 .dropIndicator,
+.dj_ie6 .dijitContentPane,
+.dj_ie6 .dojoxPortlet, .dj_ie6 .dijitTitlePane{
+	margin: 10px;
+}
+.gridContainerZone > *{
+	margin: 10px !important;
+}
Index: trunk/web/dojo/dojox/layout/resources/ToggleSplitter.css
===================================================================
--- trunk/web/dojo/dojox/layout/resources/ToggleSplitter.css	(revision 0)
+++ trunk/web/dojo/dojox/layout/resources/ToggleSplitter.css	(revision 9)
@@ -0,0 +1,80 @@
+.dijitBorderContainer .dojoxToggleSplitterTop,
+.dijitBorderContainer .dojoxToggleSplitterBottom {
+	height:16px;
+}
+.dijitBorderContainer .dojoxToggleSplitterLeft,
+.dijitBorderContainer .dojoxToggleSplitterRight {
+	width:16px;
+}
+.dijitBorderContainer .dijitSplitterH .dojoxToggleSplitterIcon {
+	width:16px;
+	height:16px;
+	top: 0;
+	cursor: pointer;
+}
+.dijitBorderContainer .dijitSplitterV .dojoxToggleSplitterIcon {
+	width:16px;
+	height:16px;
+	left: 0;
+	cursor: pointer;
+}
+.tundra .dojoxToggleSplitterTop .dojoxToggleSplitterIconOpen, 
+.tundra .dojoxToggleSplitterBottom .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.png') no-repeat -45px 50%;
+}
+.tundra .dojoxToggleSplitterBottom .dojoxToggleSplitterIconOpen, 
+.tundra .dojoxToggleSplitterTop .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.png') no-repeat -15px 50%;
+}
+.tundra .dojoxToggleSplitterLeft .dojoxToggleSplitterIconOpen, 
+.tundra .dojoxToggleSplitterRight .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.png') no-repeat 0px 50%;
+}
+.tundra .dojoxToggleSplitterRight .dojoxToggleSplitterIconOpen, 
+.tundra .dojoxToggleSplitterLeft .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/tundra/images/spriteRoundedIconsSmall.png') no-repeat -30px 50%;
+}
+.soria .dojoxToggleSplitterTop .dojoxToggleSplitterIconOpen, 
+.soria .dojoxToggleSplitterBottom .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png') no-repeat -45px 50%;
+}
+.soria .dojoxToggleSplitterBottom .dojoxToggleSplitterIconOpen, 
+.soria .dojoxToggleSplitterTop .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png') no-repeat -15px 50%;
+}
+.soria .dojoxToggleSplitterLeft .dojoxToggleSplitterIconOpen, 
+.soria .dojoxToggleSplitterRight .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png') no-repeat 0px 50%;
+}
+.soria .dojoxToggleSplitterRight .dojoxToggleSplitterIconOpen, 
+.soria .dojoxToggleSplitterLeft .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/soria/images/spriteRoundedIconsSmall.png') no-repeat -30px 50%;
+}
+.nihilo .dojoxToggleSplitterTop .dojoxToggleSplitterIconOpen, 
+.nihilo .dojoxToggleSplitterBottom .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png') no-repeat -45px 50%;
+}
+.nihilo .dojoxToggleSplitterBottom .dojoxToggleSplitterIconOpen, 
+.nihilo .dojoxToggleSplitterTop .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png') no-repeat -15px 50%;
+}
+.nihilo .dojoxToggleSplitterLeft .dojoxToggleSplitterIconOpen, 
+.nihilo .dojoxToggleSplitterRight .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png') no-repeat 0px 50%;
+}
+.nihilo .dojoxToggleSplitterRight .dojoxToggleSplitterIconOpen, 
+.nihilo .dojoxToggleSplitterLeft .dojoxToggleSplitterIconClosed 
+ {
+	background: transparent url('../../../dijit/themes/nihilo/images/spriteRoundedIconsSmall.png') no-repeat -30px 50%;
+}
Index: trunk/web/dojo/dojox/layout/ScrollPane.js
===================================================================
--- trunk/web/dojo/dojox/layout/ScrollPane.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/ScrollPane.js	(revision 9)
@@ -0,0 +1,82 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.ScrollPane"]){
+dojo._hasResource["dojox.layout.ScrollPane"]=true;
+dojo.provide("dojox.layout.ScrollPane");
+dojo.experimental("dojox.layout.ScrollPane");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.layout.ScrollPane",[dijit.layout.ContentPane,dijit._Templated],{_line:null,_lo:null,_offset:15,orientation:"vertical",autoHide:true,templateString:dojo.cache("dojox.layout","resources/ScrollPane.html","<div class=\"dojoxScrollWindow\" dojoAttachEvent=\"onmouseenter: _enter, onmouseleave: _leave\">\n    <div class=\"dojoxScrollWrapper\" style=\"${style}\" dojoAttachPoint=\"wrapper\" dojoAttachEvent=\"onmousemove: _calc\">\n\t<div class=\"dojoxScrollPane\" dojoAttachPoint=\"containerNode\"></div>\n    </div>\n    <div dojoAttachPoint=\"helper\" class=\"dojoxScrollHelper\"><span class=\"helperInner\">|</span></div>\n</div>\n"),resize:function(_1){
+if(_1){
+if(_1.h){
+dojo.style(this.domNode,"height",_1.h+"px");
+}
+if(_1.w){
+dojo.style(this.domNode,"width",_1.w+"px");
+}
+}
+var _2=this._dir,_3=this._vertical,_4=this.containerNode[(_3?"scrollHeight":"scrollWidth")];
+dojo.style(this.wrapper,this._dir,this.domNode.style[this._dir]);
+this._lo=dojo.coords(this.wrapper,true);
+this._size=Math.max(0,_4-this._lo[(_3?"h":"w")]);
+if(!this._size){
+this.helper.style.display="none";
+this.wrapper[this._scroll]=0;
+return;
+}else{
+this.helper.style.display="";
+}
+this._line=new dojo._Line(0-this._offset,this._size+(this._offset*2));
+var u=this._lo[(_3?"h":"w")],r=Math.min(1,u/_4),s=u*r,c=Math.floor(u-(u*r));
+this._helpLine=new dojo._Line(0,c);
+dojo.style(this.helper,_2,Math.floor(s)+"px");
+},postCreate:function(){
+this.inherited(arguments);
+if(this.autoHide){
+this._showAnim=dojo._fade({node:this.helper,end:0.5,duration:350});
+this._hideAnim=dojo.fadeOut({node:this.helper,duration:750});
+}
+this._vertical=(this.orientation=="vertical");
+if(!this._vertical){
+dojo.addClass(this.containerNode,"dijitInline");
+this._dir="width";
+this._edge="left";
+this._scroll="scrollLeft";
+}else{
+this._dir="height";
+this._edge="top";
+this._scroll="scrollTop";
+}
+if(this._hideAnim){
+this._hideAnim.play();
+}
+dojo.style(this.wrapper,"overflow","hidden");
+},_set:function(n){
+if(!this._size){
+return;
+}
+this.wrapper[this._scroll]=Math.floor(this._line.getValue(n));
+dojo.style(this.helper,this._edge,Math.floor(this._helpLine.getValue(n))+"px");
+},_calc:function(e){
+if(!this._lo){
+this.resize();
+}
+this._set(this._vertical?((e.pageY-this._lo.y)/this._lo.h):((e.pageX-this._lo.x)/this._lo.w));
+},_enter:function(e){
+if(this._hideAnim){
+if(this._hideAnim.status()=="playing"){
+this._hideAnim.stop();
+}
+this._showAnim.play();
+}
+},_leave:function(e){
+if(this._hideAnim){
+this._hideAnim.play();
+}
+}});
+}
Index: trunk/web/dojo/dojox/layout/ExpandoPane.js
===================================================================
--- trunk/web/dojo/dojox/layout/ExpandoPane.js	(revision 0)
+++ trunk/web/dojo/dojox/layout/ExpandoPane.js	(revision 9)
@@ -0,0 +1,149 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.layout.ExpandoPane"]){
+dojo._hasResource["dojox.layout.ExpandoPane"]=true;
+dojo.provide("dojox.layout.ExpandoPane");
+dojo.experimental("dojox.layout.ExpandoPane");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Contained");
+dojo.declare("dojox.layout.ExpandoPane",[dijit.layout.ContentPane,dijit._Templated,dijit._Contained,dijit._Container],{templateString:dojo.cache("dojox.layout","resources/ExpandoPane.html","<div class=\"dojoxExpandoPane\">\n\t<div dojoAttachPoint=\"titleWrapper\" class=\"dojoxExpandoTitle\">\n\t\t<div class=\"dojoxExpandoIcon\" dojoAttachPoint=\"iconNode\" dojoAttachEvent=\"onclick:toggle\"><span class=\"a11yNode\">X</span></div>\t\t\t\n\t\t<span class=\"dojoxExpandoTitleNode\" dojoAttachPoint=\"titleNode\">${title}</span>\n\t</div>\n\t<div class=\"dojoxExpandoWrapper\" dojoAttachPoint=\"cwrapper\" dojoAttachEvent=\"ondblclick:_trap\">\n\t\t<div class=\"dojoxExpandoContent\" dojoAttachPoint=\"containerNode\"></div>\n\t</div>\n</div>\n"),easeOut:"dojo._DefaultEasing",easeIn:"dojo._DefaultEasing",duration:420,startExpanded:true,previewOpacity:0.75,previewOnDblClick:false,baseClass:"dijitExpandoPane",postCreate:function(){
+this.inherited(arguments);
+this._animConnects=[];
+this._isHorizontal=true;
+if(dojo.isString(this.easeOut)){
+this.easeOut=dojo.getObject(this.easeOut);
+}
+if(dojo.isString(this.easeIn)){
+this.easeIn=dojo.getObject(this.easeIn);
+}
+var _1="",_2=!this.isLeftToRight();
+if(this.region){
+switch(this.region){
+case "trailing":
+case "right":
+_1=_2?"Left":"Right";
+break;
+case "leading":
+case "left":
+_1=_2?"Right":"Left";
+break;
+case "top":
+_1="Top";
+break;
+case "bottom":
+_1="Bottom";
+break;
+}
+dojo.addClass(this.domNode,"dojoxExpando"+_1);
+dojo.addClass(this.iconNode,"dojoxExpandoIcon"+_1);
+this._isHorizontal=/top|bottom/.test(this.region);
+}
+dojo.style(this.domNode,{overflow:"hidden",padding:0});
+this.connect(this.domNode,"ondblclick",this.previewOnDblClick?"preview":"toggle");
+if(this.previewOnDblClick){
+this.connect(this.getParent(),"_layoutChildren",dojo.hitch(this,function(){
+this._isonlypreview=false;
+}));
+}
+},_startupSizes:function(){
+this._container=this.getParent();
+this._closedSize=this._titleHeight=dojo.marginBox(this.titleWrapper).h;
+if(this.splitter){
+var _3=this.id;
+dijit.registry.filter(function(w){
+return w&&w.child&&w.child.id==_3;
+}).forEach(dojo.hitch(this,function(w){
+this.connect(w,"_stopDrag","_afterResize");
+}));
+}
+this._currentSize=dojo.contentBox(this.domNode);
+this._showSize=this._currentSize[(this._isHorizontal?"h":"w")];
+this._setupAnims();
+if(this.startExpanded){
+this._showing=true;
+}else{
+this._showing=false;
+this._hideWrapper();
+this._hideAnim.gotoPercent(99,true);
+}
+this._hasSizes=true;
+},_afterResize:function(e){
+var _4=this._currentSize;
+this._currentSize=dojo.marginBox(this.domNode);
+var n=this._currentSize[(this._isHorizontal?"h":"w")];
+if(n>this._titleHeight){
+if(!this._showing){
+this._showing=!this._showing;
+this._showEnd();
+}
+this._showSize=n;
+this._setupAnims();
+}else{
+this._showSize=_4[(this._isHorizontal?"h":"w")];
+this._showing=false;
+this._hideWrapper();
+this._hideAnim.gotoPercent(89,true);
+}
+},_setupAnims:function(){
+dojo.forEach(this._animConnects,dojo.disconnect);
+var _5={node:this.domNode,duration:this.duration},_6=this._isHorizontal,_7={},_8={},_9=_6?"height":"width";
+_7[_9]={end:this._showSize};
+_8[_9]={end:this._closedSize};
+this._showAnim=dojo.animateProperty(dojo.mixin(_5,{easing:this.easeIn,properties:_7}));
+this._hideAnim=dojo.animateProperty(dojo.mixin(_5,{easing:this.easeOut,properties:_8}));
+this._animConnects=[dojo.connect(this._showAnim,"onEnd",this,"_showEnd"),dojo.connect(this._hideAnim,"onEnd",this,"_hideEnd")];
+},preview:function(){
+if(!this._showing){
+this._isonlypreview=!this._isonlypreview;
+}
+this.toggle();
+},toggle:function(){
+if(this._showing){
+this._hideWrapper();
+this._showAnim&&this._showAnim.stop();
+this._hideAnim.play();
+}else{
+this._hideAnim&&this._hideAnim.stop();
+this._showAnim.play();
+}
+this._showing=!this._showing;
+},_hideWrapper:function(){
+dojo.addClass(this.domNode,"dojoxExpandoClosed");
+dojo.style(this.cwrapper,{visibility:"hidden",opacity:"0",overflow:"hidden"});
+},_showEnd:function(){
+dojo.style(this.cwrapper,{opacity:0,visibility:"visible"});
+dojo.anim(this.cwrapper,{opacity:this._isonlypreview?this.previewOpacity:1},227);
+dojo.removeClass(this.domNode,"dojoxExpandoClosed");
+if(!this._isonlypreview){
+setTimeout(dojo.hitch(this._container,"layout"),15);
+}else{
+this._previewShowing=true;
+this.resize();
+}
+},_hideEnd:function(){
+if(!this._isonlypreview){
+setTimeout(dojo.hitch(this._container,"layout"),25);
+}else{
+this._previewShowing=false;
+}
+this._isonlypreview=false;
+},resize:function(_a,_b){
+if(!this._hasSizes){
+this._startupSizes(_a);
+}
+this._contentBox={w:_a&&"w" in _a?_a.w:_b.w,h:(_a&&"h" in _a?_a.h:_b.h)-this._titleHeight};
+dojo.style(this.containerNode,"height",this._contentBox.h+"px");
+if(_a){
+dojo.marginBox(this.domNode,_a);
+}
+this._layoutChildren();
+},_trap:function(e){
+dojo.stopEvent(e);
+}});
+}
Index: trunk/web/dojo/dojox/date/buddhist/locale.js
===================================================================
--- trunk/web/dojo/dojox/date/buddhist/locale.js	(revision 0)
+++ trunk/web/dojo/dojox/date/buddhist/locale.js	(revision 9)
@@ -0,0 +1,370 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.buddhist.locale"]){
+dojo._hasResource["dojox.date.buddhist.locale"]=true;
+dojo.provide("dojox.date.buddhist.locale");
+dojo.experimental("dojox.date.buddhist.locale");
+dojo.require("dojox.date.buddhist.Date");
+dojo.require("dojo.regexp");
+dojo.require("dojo.string");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","buddhist",null,"ROOT,th");
+(function(){
+function _1(_2,_3,_4,_5,_6){
+return _6.replace(/([a-z])\1*/ig,function(_7){
+var s,_8;
+var c=_7.charAt(0);
+var l=_7.length;
+var _9=["abbr","wide","narrow"];
+switch(c){
+case "G":
+s=_3["eraAbbr"][0];
+break;
+case "y":
+s=String(_2.getFullYear());
+break;
+case "M":
+var m=_2.getMonth();
+if(l<3){
+s=m+1;
+_8=true;
+}else{
+var _a=["months","format",_9[l-3]].join("-");
+s=_3[_a][m];
+}
+break;
+case "d":
+s=_2.getDate(true);
+_8=true;
+break;
+case "E":
+var d=_2.getDay();
+if(l<3){
+s=d+1;
+_8=true;
+}else{
+var _b=["days","format",_9[l-3]].join("-");
+s=_3[_b][d];
+}
+break;
+case "a":
+var _c=(_2.getHours()<12)?"am":"pm";
+s=_3["dayPeriods-format-wide-"+_c];
+break;
+case "h":
+case "H":
+case "K":
+case "k":
+var h=_2.getHours();
+switch(c){
+case "h":
+s=(h%12)||12;
+break;
+case "H":
+s=h;
+break;
+case "K":
+s=(h%12);
+break;
+case "k":
+s=h||24;
+break;
+}
+_8=true;
+break;
+case "m":
+s=_2.getMinutes();
+_8=true;
+break;
+case "s":
+s=_2.getSeconds();
+_8=true;
+break;
+case "S":
+s=Math.round(_2.getMilliseconds()*Math.pow(10,l-3));
+_8=true;
+break;
+default:
+throw new Error("dojox.date.buddhist.locale.formatPattern: invalid pattern char: "+_6);
+}
+if(_8){
+s=dojo.string.pad(s,l);
+}
+return s;
+});
+};
+dojox.date.buddhist.locale.format=function(_d,_e){
+_e=_e||{};
+var _f=dojo.i18n.normalizeLocale(_e.locale);
+var _10=_e.formatLength||"short";
+var _11=dojox.date.buddhist.locale._getBuddhistBundle(_f);
+var str=[];
+var _12=dojo.hitch(this,_1,_d,_11,_f,_e.fullYear);
+if(_e.selector=="year"){
+var _13=_d.getFullYear();
+return _13;
+}
+if(_e.selector!="time"){
+var _14=_e.datePattern||_11["dateFormat-"+_10];
+if(_14){
+str.push(_15(_14,_12));
+}
+}
+if(_e.selector!="date"){
+var _16=_e.timePattern||_11["timeFormat-"+_10];
+if(_16){
+str.push(_15(_16,_12));
+}
+}
+var _17=str.join(" ");
+return _17;
+};
+dojox.date.buddhist.locale.regexp=function(_18){
+return dojox.date.buddhist.locale._parseInfo(_18).regexp;
+};
+dojox.date.buddhist.locale._parseInfo=function(_19){
+_19=_19||{};
+var _1a=dojo.i18n.normalizeLocale(_19.locale);
+var _1b=dojox.date.buddhist.locale._getBuddhistBundle(_1a);
+var _1c=_19.formatLength||"short";
+var _1d=_19.datePattern||_1b["dateFormat-"+_1c];
+var _1e=_19.timePattern||_1b["timeFormat-"+_1c];
+var _1f;
+if(_19.selector=="date"){
+_1f=_1d;
+}else{
+if(_19.selector=="time"){
+_1f=_1e;
+}else{
+_1f=(typeof (_1e)=="undefined")?_1d:_1d+" "+_1e;
+}
+}
+var _20=[];
+var re=_15(_1f,dojo.hitch(this,_21,_20,_1b,_19));
+return {regexp:re,tokens:_20,bundle:_1b};
+};
+dojox.date.buddhist.locale.parse=function(_22,_23){
+_22=_22.replace(/[\u200E\u200F\u202A-\u202E]/g,"");
+if(!_23){
+_23={};
+}
+var _24=dojox.date.buddhist.locale._parseInfo(_23);
+var _25=_24.tokens,_26=_24.bundle;
+var re=new RegExp("^"+_24.regexp+"$");
+var _27=re.exec(_22);
+var _28=dojo.i18n.normalizeLocale(_23.locale);
+if(!_27){
+return null;
+}
+var _29,_2a;
+var _2b=[2513,0,1,0,0,0,0];
+var _2c="";
+var _2d=0;
+var _2e=["abbr","wide","narrow"];
+var _2f=dojo.every(_27,function(v,i){
+if(!i){
+return true;
+}
+var _30=_25[i-1];
+var l=_30.length;
+switch(_30.charAt(0)){
+case "y":
+_2b[0]=Number(v);
+break;
+case "M":
+if(l>2){
+var _31=_26["months-format-"+_2e[l-3]].concat();
+if(!_23.strict){
+v=v.replace(".","").toLowerCase();
+_31=dojo.map(_31,function(s){
+return s?s.replace(".","").toLowerCase():s;
+});
+}
+v=dojo.indexOf(_31,v);
+if(v==-1){
+return false;
+}
+_2d=l;
+}else{
+v--;
+}
+_2b[1]=Number(v);
+break;
+case "D":
+_2b[1]=0;
+case "d":
+_2b[2]=Number(v);
+break;
+case "a":
+var am=_23.am||_26["dayPeriods-format-wide-am"],pm=_23.pm||_26["dayPeriods-format-wide-pm"];
+if(!_23.strict){
+var _32=/\./g;
+v=v.replace(_32,"").toLowerCase();
+am=am.replace(_32,"").toLowerCase();
+pm=pm.replace(_32,"").toLowerCase();
+}
+if(_23.strict&&v!=am&&v!=pm){
+return false;
+}
+_2c=(v==pm)?"p":(v==am)?"a":"";
+break;
+case "K":
+if(v==24){
+v=0;
+}
+case "h":
+case "H":
+case "k":
+_2b[3]=Number(v);
+break;
+case "m":
+_2b[4]=Number(v);
+break;
+case "s":
+_2b[5]=Number(v);
+break;
+case "S":
+_2b[6]=Number(v);
+}
+return true;
+});
+var _33=+_2b[3];
+if(_2c==="p"&&_33<12){
+_2b[3]=_33+12;
+}else{
+if(_2c==="a"&&_33==12){
+_2b[3]=0;
+}
+}
+var _34=new dojox.date.buddhist.Date(_2b[0],_2b[1],_2b[2],_2b[3],_2b[4],_2b[5],_2b[6]);
+return _34;
+};
+function _15(_35,_36,_37,_38){
+var _39=function(x){
+return x;
+};
+_36=_36||_39;
+_37=_37||_39;
+_38=_38||_39;
+var _3a=_35.match(/(''|[^'])+/g);
+var _3b=_35.charAt(0)=="'";
+dojo.forEach(_3a,function(_3c,i){
+if(!_3c){
+_3a[i]="";
+}else{
+_3a[i]=(_3b?_37:_36)(_3c);
+_3b=!_3b;
+}
+});
+return _38(_3a.join(""));
+};
+function _21(_3d,_3e,_3f,_40){
+_40=dojo.regexp.escapeString(_40);
+var _41=dojo.i18n.normalizeLocale(_3f.locale);
+return _40.replace(/([a-z])\1*/ig,function(_42){
+var s;
+var c=_42.charAt(0);
+var l=_42.length;
+var p2="",p3="";
+if(_3f.strict){
+if(l>1){
+p2="0"+"{"+(l-1)+"}";
+}
+if(l>2){
+p3="0"+"{"+(l-2)+"}";
+}
+}else{
+p2="0?";
+p3="0{0,2}";
+}
+switch(c){
+case "y":
+s="\\d+";
+break;
+case "M":
+s=(l>2)?"\\S+":p2+"[1-9]|1[0-2]";
+break;
+case "d":
+s="[12]\\d|"+p2+"[1-9]|3[01]";
+break;
+case "E":
+s="\\S+";
+break;
+case "h":
+s=p2+"[1-9]|1[0-2]";
+break;
+case "k":
+s=p2+"\\d|1[01]";
+break;
+case "H":
+s=p2+"\\d|1\\d|2[0-3]";
+break;
+case "K":
+s=p2+"[1-9]|1\\d|2[0-4]";
+break;
+case "m":
+case "s":
+s=p2+"\\d|[0-5]\\d";
+break;
+case "S":
+s="\\d{"+l+"}";
+break;
+case "a":
+var am=_3f.am||_3e["dayPeriods-format-wide-am"],pm=_3f.pm||_3e["dayPeriods-format-wide-pm"];
+if(_3f.strict){
+s=am+"|"+pm;
+}else{
+s=am+"|"+pm;
+if(am!=am.toLowerCase()){
+s+="|"+am.toLowerCase();
+}
+if(pm!=pm.toLowerCase()){
+s+="|"+pm.toLowerCase();
+}
+}
+break;
+default:
+s=".*";
+}
+if(_3d){
+_3d.push(_42);
+}
+return "("+s+")";
+}).replace(/[\xa0 ]/g,"[\\s\\xa0]");
+};
+})();
+(function(){
+var _43=[];
+dojox.date.buddhist.locale.addCustomFormats=function(_44,_45){
+_43.push({pkg:_44,name:_45});
+};
+dojox.date.buddhist.locale._getBuddhistBundle=function(_46){
+var _47={};
+dojo.forEach(_43,function(_48){
+var _49=dojo.i18n.getLocalization(_48.pkg,_48.name,_46);
+_47=dojo.mixin(_47,_49);
+},this);
+return _47;
+};
+})();
+dojox.date.buddhist.locale.addCustomFormats("dojo.cldr","buddhist");
+dojox.date.buddhist.locale.getNames=function(_4a,_4b,_4c,_4d,_4e){
+var _4f;
+var _50=dojox.date.buddhist.locale._getBuddhistBundle;
+var _51=[_4a,_4c,_4b];
+if(_4c=="standAlone"){
+var key=_51.join("-");
+_4f=_50(_4d)[key];
+if(_4f===_50("ROOT")[key]){
+_4f=undefined;
+}
+}
+_51[1]="format";
+return (_4f||_50(_4d)[_51.join("-")]).concat();
+};
+}
Index: trunk/web/dojo/dojox/date/buddhist/Date.js
===================================================================
--- trunk/web/dojo/dojox/date/buddhist/Date.js	(revision 0)
+++ trunk/web/dojo/dojox/date/buddhist/Date.js	(revision 9)
@@ -0,0 +1,223 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.buddhist.Date"]){
+dojo._hasResource["dojox.date.buddhist.Date"]=true;
+dojo.provide("dojox.date.buddhist.Date");
+dojo.experimental("dojox.date.buddhist.Date");
+dojo.declare("dojox.date.buddhist.Date",null,{_date:0,_month:0,_year:0,_hours:0,_minutes:0,_seconds:0,_milliseconds:0,_day:0,constructor:function(){
+var _1=arguments.length;
+if(!_1){
+this.fromGregorian(new Date());
+}else{
+if(_1==1){
+var _2=arguments[0];
+if(typeof _2=="number"){
+_2=new Date(_2);
+}
+if(_2 instanceof Date){
+this.fromGregorian(_2);
+}else{
+if(_2==""){
+this._date=new Date("");
+}else{
+this._year=_2._year;
+this._month=_2._month;
+this._date=_2._date;
+this._hours=_2._hours;
+this._minutes=_2._minutes;
+this._seconds=_2._seconds;
+this._milliseconds=_2._milliseconds;
+}
+}
+}else{
+if(_1>=3){
+this._year+=arguments[0];
+this._month+=arguments[1];
+this._date+=arguments[2];
+if(this._month>11){
+console.warn("the month is incorrect , set 0");
+this._month=0;
+}
+this._hours+=arguments[3]||0;
+this._minutes+=arguments[4]||0;
+this._seconds+=arguments[5]||0;
+this._milliseconds+=arguments[6]||0;
+}
+}
+}
+},getDate:function(_3){
+return parseInt(this._date);
+},getMonth:function(){
+return parseInt(this._month);
+},getFullYear:function(){
+return parseInt(this._year);
+},getHours:function(){
+return this._hours;
+},getMinutes:function(){
+return this._minutes;
+},getSeconds:function(){
+return this._seconds;
+},getMilliseconds:function(){
+return this._milliseconds;
+},setDate:function(_4){
+_4=parseInt(_4);
+if(_4>0&&_4<=this._getDaysInMonth(this._month,this._year)){
+this._date=_4;
+}else{
+var _5;
+if(_4>0){
+for(_5=this._getDaysInMonth(this._month,this._year);_4>_5;_4-=_5,_5=this._getDaysInMonth(this._month,this._year)){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+}
+this._date=_4;
+}else{
+for(_5=this._getDaysInMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1);_4<=0;_5=this._getDaysInMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1)){
+this._month--;
+if(this._month<0){
+this._year--;
+this._month+=12;
+}
+_4+=_5;
+}
+this._date=_4;
+}
+}
+return this;
+},setFullYear:function(_6,_7,_8){
+this._year=parseInt(_6);
+},setMonth:function(_9){
+this._year+=Math.floor(_9/12);
+this._month=Math.floor(_9%12);
+for(;this._month<0;this._month=this._month+12){
+}
+},setHours:function(){
+var _a=arguments.length;
+var _b=0;
+if(_a>=1){
+_b=parseInt(arguments[0]);
+}
+if(_a>=2){
+this._minutes=parseInt(arguments[1]);
+}
+if(_a>=3){
+this._seconds=parseInt(arguments[2]);
+}
+if(_a==4){
+this._milliseconds=parseInt(arguments[3]);
+}
+while(_b>=24){
+this._date++;
+var _c=this._getDaysInMonth(this._month,this._year);
+if(this._date>_c){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_c;
+}
+_b-=24;
+}
+this._hours=_b;
+},setMinutes:function(_d){
+while(_d>=60){
+this._hours++;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _e=this._getDaysInMonth(this._month,this._year);
+if(this._date>_e){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_e;
+}
+}
+_d-=60;
+}
+this._minutes=_d;
+},setSeconds:function(_f){
+while(_f>=60){
+this._minutes++;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _10=this._getDaysInMonth(this._month,this._year);
+if(this._date>_10){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_10;
+}
+}
+}
+_f-=60;
+}
+this._seconds=_f;
+},setMilliseconds:function(_11){
+while(_11>=1000){
+this.setSeconds++;
+if(this.setSeconds>=60){
+this._minutes++;
+this.setSeconds-=60;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _12=this._getDaysInMonth(this._month,this._year);
+if(this._date>_12){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_12;
+}
+}
+}
+}
+_11-=1000;
+}
+this._milliseconds=_11;
+},toString:function(){
+return this._date+", "+this._month+", "+this._year+"  "+this._hours+":"+this._minutes+":"+this._seconds;
+},_getDaysInMonth:function(_13,_14){
+return dojo.date.getDaysInMonth(new Date(_14-543,_13));
+},fromGregorian:function(_15){
+var _16=new Date(_15);
+this._date=_16.getDate();
+this._month=_16.getMonth();
+this._year=_16.getFullYear()+543;
+this._hours=_16.getHours();
+this._minutes=_16.getMinutes();
+this._seconds=_16.getSeconds();
+this._milliseconds=_16.getMilliseconds();
+this._day=_16.getDay();
+return this;
+},toGregorian:function(){
+return new Date(this._year-543,this._month,this._date,this._hours,this._minutes,this._seconds,this._milliseconds);
+},getDay:function(){
+return this.toGregorian().getDay();
+}});
+dojox.date.buddhist.Date.prototype.valueOf=function(){
+return this.toGregorian().valueOf();
+};
+}
Index: trunk/web/dojo/dojox/date/relative.js
===================================================================
--- trunk/web/dojo/dojox/date/relative.js	(revision 0)
+++ trunk/web/dojo/dojox/date/relative.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.relative"]){
+dojo._hasResource["dojox.date.relative"]=true;
+dojo.provide("dojox.date.relative");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+(function(d){
+var _1=1000*60*60*24;
+var _2=6*_1;
+var _3=d.delegate;
+var _4=d.date.locale;
+var _5=_4._getGregorianBundle;
+var _6=_4.format;
+function _7(_8){
+_8=dojo.clone(_8);
+_8.setHours(0);
+_8.setMinutes(0);
+_8.setSeconds(0);
+_8.setMilliseconds(0);
+return _8;
+};
+dojox.date.relative.format=function(_9,_a){
+_a=_a||{};
+var _b=_7(_a.relativeDate||new Date());
+var _c=_b.getTime()-_7(_9).getTime();
+var _d={locale:_a.locale};
+if(_c===0){
+return _6(_9,_3(_d,{selector:"time"}));
+}else{
+if(_c<=_2&&_c>0&&_a.weekCheck!==false){
+return _6(_9,_3(_d,{selector:"date",datePattern:"EEE"}))+" "+_6(_9,_3(_d,{selector:"time",formatLength:"short"}));
+}else{
+if(_9.getFullYear()==_b.getFullYear()){
+var _e=_5(dojo.i18n.normalizeLocale(_a.locale));
+return _6(_9,_3(_d,{selector:"date",datePattern:_e["dateFormatItem-MMMd"]}));
+}else{
+return _6(_9,_3(_d,{selector:"date",formatLength:"medium",locale:_a.locale}));
+}
+}
+}
+};
+})(dojo);
+}
Index: trunk/web/dojo/dojox/date/hebrew.js
===================================================================
--- trunk/web/dojo/dojox/date/hebrew.js	(revision 0)
+++ trunk/web/dojo/dojox/date/hebrew.js	(revision 9)
@@ -0,0 +1,191 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew"]){
+dojo._hasResource["dojox.date.hebrew"]=true;
+dojo.provide("dojox.date.hebrew");
+dojo.require("dojox.date.hebrew.Date");
+dojo.require("dojo.date");
+dojox.date.hebrew.getDaysInMonth=function(_1){
+return _1.getDaysInHebrewMonth(_1.getMonth(),_1.getFullYear());
+};
+dojox.date.hebrew.compare=function(_2,_3,_4){
+if(_2 instanceof dojox.date.hebrew.Date){
+_2=_2.toGregorian();
+}
+if(_3 instanceof dojox.date.hebrew.Date){
+_3=_3.toGregorian();
+}
+return dojo.date.compare.apply(null,arguments);
+};
+dojox.date.hebrew.add=function(_5,_6,_7){
+var _8=new dojox.date.hebrew.Date(_5);
+switch(_6){
+case "day":
+_8.setDate(_5.getDate()+_7);
+break;
+case "weekday":
+var _9=_5.getDay();
+var _a=0;
+if(_7<0&&_9==6){
+_9=5;
+_a=-1;
+}
+if((_9+_7)<5&&(_9+_7)>=0){
+_8.setDate(_5.getDate()+_7+_a);
+}else{
+var _b=(_7>0)?5:-1;
+var _c=(_7>0)?2:-2;
+if(_7>0&&(_9==5||_9==6)){
+_a=4-_9;
+_9=4;
+}
+var _d=_9+_7-_b;
+var _e=parseInt(_d/5);
+var _f=_d%5;
+_8.setDate(_5.getDate()-_9+_c+_e*7+_a+_f+_b);
+}
+break;
+case "year":
+_8.setFullYear(_5.getFullYear()+_7);
+break;
+case "week":
+_7*=7;
+_8.setDate(_5.getDate()+_7);
+break;
+case "month":
+var _10=_5.getMonth();
+var _b=_10+_7;
+if(!_5.isLeapYear(_5.getFullYear())){
+if(_10<5&&_b>=5){
+_b++;
+}else{
+if(_10>5&&_b<=5){
+_b--;
+}
+}
+}
+_8.setMonth(_b);
+break;
+case "hour":
+_8.setHours(_5.getHours()+_7);
+break;
+case "minute":
+_8.setMinutes(_5.getMinutes()+_7);
+break;
+case "second":
+_8.setSeconds(_5.getSeconds()+_7);
+break;
+case "millisecond":
+_8.setMilliseconds(_5.getMilliseconds()+_7);
+break;
+}
+return _8;
+};
+dojox.date.hebrew.difference=function(_11,_12,_13){
+_12=_12||new dojox.date.hebrew.Date();
+_13=_13||"day";
+var _14=_11.getFullYear()-_12.getFullYear();
+var _15=1;
+switch(_13){
+case "weekday":
+var _16=Math.round(dojox.date.hebrew.difference(_11,_12,"day"));
+var _17=parseInt(dojox.date.hebrew.difference(_11,_12,"week"));
+var mod=_16%7;
+if(mod==0){
+_16=_17*5;
+}else{
+var adj=0;
+var _18=_12.getDay();
+var _19=_11.getDay();
+_17=parseInt(_16/7);
+mod=_16%7;
+var _1a=new dojox.date.hebrew.Date(_12);
+_1a.setDate(_1a.getDate()+(_17*7));
+var _1b=_1a.getDay();
+if(_16>0){
+switch(true){
+case _18==5:
+adj=-1;
+break;
+case _18==6:
+adj=0;
+break;
+case _19==5:
+adj=-1;
+break;
+case _19==6:
+adj=-2;
+break;
+case (_1b+mod)>5:
+adj=-2;
+}
+}else{
+if(_16<0){
+switch(true){
+case _18==5:
+adj=0;
+break;
+case _18==6:
+adj=1;
+break;
+case _19==5:
+adj=2;
+break;
+case _19==6:
+adj=1;
+break;
+case (_1b+mod)<0:
+adj=2;
+}
+}
+}
+_16+=adj;
+_16-=(_17*2);
+}
+_15=_16;
+break;
+case "year":
+_15=_14;
+break;
+case "month":
+var _1c=(_11.toGregorian()>_12.toGregorian())?_11:_12;
+var _1d=(_11.toGregorian()>_12.toGregorian())?_12:_11;
+var _1e=_1c.getMonth();
+var _1f=_1d.getMonth();
+if(_14==0){
+_15=(!_11.isLeapYear(_11.getFullYear())&&_1c.getMonth()>5&&_1d.getMonth()<=5)?(_1c.getMonth()-_1d.getMonth()-1):(_1c.getMonth()-_1d.getMonth());
+}else{
+_15=(!_1d.isLeapYear(_1d.getFullYear())&&_1f<6)?(13-_1f-1):(13-_1f);
+_15+=(!_1c.isLeapYear(_1c.getFullYear())&&_1e>5)?(_1e-1):_1e;
+var i=_1d.getFullYear()+1;
+var e=_1c.getFullYear();
+for(i;i<e;i++){
+_15+=_1d.isLeapYear(i)?13:12;
+}
+}
+if(_11.toGregorian()<_12.toGregorian()){
+_15=-_15;
+}
+break;
+case "week":
+_15=parseInt(dojox.date.hebrew.difference(_11,_12,"day")/7);
+break;
+case "day":
+_15/=24;
+case "hour":
+_15/=60;
+case "minute":
+_15/=60;
+case "second":
+_15/=1000;
+case "millisecond":
+_15*=_11.toGregorian().getTime()-_12.toGregorian().getTime();
+}
+return Math.round(_15);
+};
+}
Index: trunk/web/dojo/dojox/date/zoneinfo/pacificnew
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/pacificnew	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/pacificnew	(revision 9)
@@ -0,0 +1 @@
+Link	America/Los_Angeles	US/Pacific-New	##
Index: trunk/web/dojo/dojox/date/zoneinfo/antarctica
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/antarctica	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/antarctica	(revision 9)
@@ -0,0 +1,68 @@
+Rule	RussAQ	1981	1984	-	Apr	 1	 0:00	1:00	S
+Rule	RussAQ	1981	1983	-	Oct	 1	 0:00	0	-
+Rule	RussAQ	1984	1991	-	Sep	lastSun	 2:00s	0	-
+Rule	RussAQ	1985	1991	-	Mar	lastSun	 2:00s	1:00	S
+Rule	RussAQ	1992	only	-	Mar	lastSat	 23:00	1:00	S
+Rule	RussAQ	1992	only	-	Sep	lastSat	 23:00	0	-
+Rule	RussAQ	1993	max	-	Mar	lastSun	 2:00s	1:00	S
+Rule	RussAQ	1993	1995	-	Sep	lastSun	 2:00s	0	-
+Rule	RussAQ	1996	max	-	Oct	lastSun	 2:00s	0	-
+Rule	ArgAQ	1964	1966	-	Mar	 1	0:00	0	-
+Rule	ArgAQ	1964	1966	-	Oct	15	0:00	1:00	S
+Rule	ArgAQ	1967	only	-	Apr	 2	0:00	0	-
+Rule	ArgAQ	1967	1968	-	Oct	Sun>=1	0:00	1:00	S
+Rule	ArgAQ	1968	1969	-	Apr	Sun>=1	0:00	0	-
+Rule	ArgAQ	1974	only	-	Jan	23	0:00	1:00	S
+Rule	ArgAQ	1974	only	-	May	 1	0:00	0	-
+Rule	ChileAQ	1972	1986	-	Mar	Sun>=9	3:00u	0	-
+Rule	ChileAQ	1974	1987	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	ChileAQ	1987	only	-	Apr	12	3:00u	0	-
+Rule	ChileAQ	1988	1989	-	Mar	Sun>=9	3:00u	0	-
+Rule	ChileAQ	1988	only	-	Oct	Sun>=1	4:00u	1:00	S
+Rule	ChileAQ	1989	only	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	ChileAQ	1990	only	-	Mar	18	3:00u	0	-
+Rule	ChileAQ	1990	only	-	Sep	16	4:00u	1:00	S
+Rule	ChileAQ	1991	1996	-	Mar	Sun>=9	3:00u	0	-
+Rule	ChileAQ	1991	1997	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	ChileAQ	1997	only	-	Mar	30	3:00u	0	-
+Rule	ChileAQ	1998	only	-	Mar	Sun>=9	3:00u	0	-
+Rule	ChileAQ	1998	only	-	Sep	27	4:00u	1:00	S
+Rule	ChileAQ	1999	only	-	Apr	 4	3:00u	0	-
+Rule	ChileAQ	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	ChileAQ	2000	max	-	Mar	Sun>=9	3:00u	0	-
+Zone Antarctica/Casey	0	-	zzz	1969
+			8:00	-	WST	# Western (Aus) Standard Time
+Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
+			7:00	-	DAVT	1964 Nov # Davis Time
+			0	-	zzz	1969 Feb
+			7:00	-	DAVT
+Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
+			6:00	-	MAWT	# Mawson Time
+Zone Indian/Kerguelen	0	-	zzz	1950	# Port-aux-Francais
+			5:00	-	TFT	# ISO code TF Time
+Zone Antarctica/DumontDUrville 0 -	zzz	1947
+			10:00	-	PMT	1952 Jan 14 # Port-Martin Time
+			0	-	zzz	1956 Nov
+			10:00	-	DDUT	# Dumont-d'Urville Time
+Zone Antarctica/Syowa	0	-	zzz	1957 Jan 29
+			3:00	-	SYOT	# Syowa Time
+Rule	NZAQ	1974	only	-	Nov	 3	2:00s	1:00	D
+Rule	NZAQ	1975	1988	-	Oct	lastSun	2:00s	1:00	D
+Rule	NZAQ	1989	only	-	Oct	 8	2:00s	1:00	D
+Rule	NZAQ	1990	2006	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	NZAQ	1975	only	-	Feb	23	2:00s	0	S
+Rule	NZAQ	1976	1989	-	Mar	Sun>=1	2:00s	0	S
+Rule	NZAQ	1990	2007	-	Mar	Sun>=15	2:00s	0	S
+Rule	NZAQ	2007	max	-	Sep	lastSun	2:00s	1:00	D
+Rule	NZAQ	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Zone Antarctica/Vostok	0	-	zzz	1957 Dec 16
+			6:00	-	VOST	# Vostok time
+Zone Antarctica/Rothera	0	-	zzz	1976 Dec  1
+			-3:00	-	ROTT	# Rothera time
+Zone Antarctica/Palmer	0	-	zzz	1965
+			-4:00	ArgAQ	AR%sT	1969 Oct 5
+			-3:00	ArgAQ	AR%sT	1982 May
+			-4:00	ChileAQ	CL%sT
+Zone Antarctica/McMurdo	0	-	zzz	1956
+			12:00	NZAQ	NZ%sT
+Link	Antarctica/McMurdo	Antarctica/South_Pole
Index: trunk/web/dojo/dojox/date/zoneinfo/australasia
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/australasia	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/australasia	(revision 9)
@@ -0,0 +1,299 @@
+Rule	Aus	1917	only	-	Jan	 1	0:01	1:00	-
+Rule	Aus	1917	only	-	Mar	25	2:00	0	-
+Rule	Aus	1942	only	-	Jan	 1	2:00	1:00	-
+Rule	Aus	1942	only	-	Mar	29	2:00	0	-
+Rule	Aus	1942	only	-	Sep	27	2:00	1:00	-
+Rule	Aus	1943	1944	-	Mar	lastSun	2:00	0	-
+Rule	Aus	1943	only	-	Oct	 3	2:00	1:00	-
+Zone Australia/Darwin	 8:43:20 -	LMT	1895 Feb
+			 9:00	-	CST	1899 May
+			 9:30	Aus	CST
+Rule	AW	1974	only	-	Oct	lastSun	2:00s	1:00	-
+Rule	AW	1975	only	-	Mar	Sun>=1	2:00s	0	-
+Rule	AW	1983	only	-	Oct	lastSun	2:00s	1:00	-
+Rule	AW	1984	only	-	Mar	Sun>=1	2:00s	0	-
+Rule	AW	1991	only	-	Nov	17	2:00s	1:00	-
+Rule	AW	1992	only	-	Mar	Sun>=1	2:00s	0	-
+Rule	AW	2006	only	-	Dec	 3	2:00s	1:00	-
+Rule	AW	2007	2009	-	Mar	lastSun	2:00s	0	-
+Rule	AW	2007	2008	-	Oct	lastSun	2:00s	1:00	-
+Zone Australia/Perth	 7:43:24 -	LMT	1895 Dec
+			 8:00	Aus	WST	1943 Jul
+			 8:00	AW	WST
+Zone Australia/Eucla	 8:35:28 -	LMT	1895 Dec
+			 8:45	Aus	CWST	1943 Jul
+			 8:45	AW	CWST
+Rule	AQ	1971	only	-	Oct	lastSun	2:00s	1:00	-
+Rule	AQ	1972	only	-	Feb	lastSun	2:00s	0	-
+Rule	AQ	1989	1991	-	Oct	lastSun	2:00s	1:00	-
+Rule	AQ	1990	1992	-	Mar	Sun>=1	2:00s	0	-
+Rule	Holiday	1992	1993	-	Oct	lastSun	2:00s	1:00	-
+Rule	Holiday	1993	1994	-	Mar	Sun>=1	2:00s	0	-
+Zone Australia/Brisbane	10:12:08 -	LMT	1895
+			10:00	Aus	EST	1971
+			10:00	AQ	EST
+Zone Australia/Lindeman  9:55:56 -	LMT	1895
+			10:00	Aus	EST	1971
+			10:00	AQ	EST	1992 Jul
+			10:00	Holiday	EST
+Rule	AS	1971	1985	-	Oct	lastSun	2:00s	1:00	-
+Rule	AS	1986	only	-	Oct	19	2:00s	1:00	-
+Rule	AS	1987	2007	-	Oct	lastSun	2:00s	1:00	-
+Rule	AS	1972	only	-	Feb	27	2:00s	0	-
+Rule	AS	1973	1985	-	Mar	Sun>=1	2:00s	0	-
+Rule	AS	1986	1989	-	Mar	Sun>=15	2:00s	0	-
+Rule	AS	1990	only	-	Mar	Sun>=18	2:00s	0	-
+Rule	AS	1991	only	-	Mar	Sun>=1	2:00s	0	-
+Rule	AS	1992	only	-	Mar	Sun>=18	2:00s	0	-
+Rule	AS	1993	only	-	Mar	Sun>=1	2:00s	0	-
+Rule	AS	1994	only	-	Mar	Sun>=18	2:00s	0	-
+Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	-
+Rule	AS	2006	only	-	Apr	Sun>=1	2:00s	0	-
+Rule	AS	2007	only	-	Mar	lastSun	2:00s	0	-
+Rule	AS	2008	max	-	Apr	Sun>=1	2:00s	0	-
+Rule	AS	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
+			9:00	-	CST	1899 May
+			9:30	Aus	CST	1971
+			9:30	AS	CST
+Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	-
+Rule	AT	1968	1985	-	Oct	lastSun	2:00s	1:00	-
+Rule	AT	1969	1971	-	Mar	Sun>=8	2:00s	0	-
+Rule	AT	1972	only	-	Feb	lastSun	2:00s	0	-
+Rule	AT	1973	1981	-	Mar	Sun>=1	2:00s	0	-
+Rule	AT	1982	1983	-	Mar	lastSun	2:00s	0	-
+Rule	AT	1984	1986	-	Mar	Sun>=1	2:00s	0	-
+Rule	AT	1986	only	-	Oct	Sun>=15	2:00s	1:00	-
+Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	-
+Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
+Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	-
+Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	-
+Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	-
+Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
+Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	-
+Rule	AT	2007	only	-	Mar	lastSun	2:00s	0	-
+Rule	AT	2008	max	-	Apr	Sun>=1	2:00s	0	-
+Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
+			10:00	-	EST	1916 Oct 1 2:00
+			10:00	1:00	EST	1917 Feb
+			10:00	Aus	EST	1967
+			10:00	AT	EST
+Zone Australia/Currie	9:35:28	-	LMT	1895 Sep
+			10:00	-	EST	1916 Oct 1 2:00
+			10:00	1:00	EST	1917 Feb
+			10:00	Aus	EST	1971 Jul
+			10:00	AT	EST
+Rule	AV	1971	1985	-	Oct	lastSun	2:00s	1:00	-
+Rule	AV	1972	only	-	Feb	lastSun	2:00s	0	-
+Rule	AV	1973	1985	-	Mar	Sun>=1	2:00s	0	-
+Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	-
+Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	-
+Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	-
+Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	-
+Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	-
+Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	-
+Rule	AV	2001	2007	-	Oct	lastSun	2:00s	1:00	-
+Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	-
+Rule	AV	2007	only	-	Mar	lastSun	2:00s	0	-
+Rule	AV	2008	max	-	Apr	Sun>=1	2:00s	0	-
+Rule	AV	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
+			10:00	Aus	EST	1971
+			10:00	AV	EST
+Rule	AN	1971	1985	-	Oct	lastSun	2:00s	1:00	-
+Rule	AN	1972	only	-	Feb	27	2:00s	0	-
+Rule	AN	1973	1981	-	Mar	Sun>=1	2:00s	0	-
+Rule	AN	1982	only	-	Apr	Sun>=1	2:00s	0	-
+Rule	AN	1983	1985	-	Mar	Sun>=1	2:00s	0	-
+Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	-
+Rule	AN	1986	only	-	Oct	19	2:00s	1:00	-
+Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	-
+Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	-
+Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	-
+Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	-
+Rule	AN	2001	2007	-	Oct	lastSun	2:00s	1:00	-
+Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	-
+Rule	AN	2007	only	-	Mar	lastSun	2:00s	0	-
+Rule	AN	2008	max	-	Apr	Sun>=1	2:00s	0	-
+Rule	AN	2008	max	-	Oct	Sun>=1	2:00s	1:00	-
+Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
+			10:00	Aus	EST	1971
+			10:00	AN	EST
+Zone Australia/Broken_Hill 9:25:48 -	LMT	1895 Feb
+			10:00	-	EST	1896 Aug 23
+			9:00	-	CST	1899 May
+			9:30	Aus	CST	1971
+			9:30	AN	CST	2000
+			9:30	AS	CST
+Rule	LH	1981	1984	-	Oct	lastSun	2:00	1:00	-
+Rule	LH	1982	1985	-	Mar	Sun>=1	2:00	0	-
+Rule	LH	1985	only	-	Oct	lastSun	2:00	0:30	-
+Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	-
+Rule	LH	1986	only	-	Oct	19	2:00	0:30	-
+Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	-
+Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	-
+Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	-
+Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	-
+Rule	LH	2001	2007	-	Oct	lastSun	2:00	0:30	-
+Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	-
+Rule	LH	2007	only	-	Mar	lastSun	2:00	0	-
+Rule	LH	2008	max	-	Apr	Sun>=1	2:00	0	-
+Rule	LH	2008	max	-	Oct	Sun>=1	2:00	0:30	-
+Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
+			10:00	-	EST	1981 Mar
+			10:30	LH	LHST
+Zone Indian/Christmas	7:02:52 -	LMT	1895 Feb
+			7:00	-	CXT	# Christmas Island Time
+Rule	Cook	1978	only	-	Nov	12	0:00	0:30	HS
+Rule	Cook	1979	1991	-	Mar	Sun>=1	0:00	0	-
+Rule	Cook	1979	1990	-	Oct	lastSun	0:00	0:30	HS
+Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901		# Avarua
+			-10:30	-	CKT	1978 Nov 12	# Cook Is Time
+			-10:00	Cook	CK%sT
+Zone	Indian/Cocos	6:27:40	-	LMT	1900
+			6:30	-	CCT	# Cocos Islands Time
+Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
+Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
+Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
+			12:00	Fiji	FJ%sT	# Fiji Time
+Zone	Pacific/Gambier	 -8:59:48 -	LMT	1912 Oct	# Rikitea
+			 -9:00	-	GAMT	# Gambier Time
+Zone	Pacific/Marquesas -9:18:00 -	LMT	1912 Oct
+			 -9:30	-	MART	# Marquesas Time
+Zone	Pacific/Tahiti	 -9:58:16 -	LMT	1912 Oct	# Papeete
+			-10:00	-	TAHT	# Tahiti Time
+Zone	Pacific/Guam	-14:21:00 -	LMT	1844 Dec 31
+			 9:39:00 -	LMT	1901		# Agana
+			10:00	-	GST	2000 Dec 23	# Guam
+			10:00	-	ChST	# Chamorro Standard Time
+Zone Pacific/Tarawa	 11:32:04 -	LMT	1901		# Bairiki
+			 12:00	-	GILT		 # Gilbert Is Time
+Zone Pacific/Enderbury	-11:24:20 -	LMT	1901
+			-12:00	-	PHOT	1979 Oct # Phoenix Is Time
+			-11:00	-	PHOT	1995
+			 13:00	-	PHOT
+Zone Pacific/Kiritimati	-10:29:20 -	LMT	1901
+			-10:40	-	LINT	1979 Oct # Line Is Time
+			-10:00	-	LINT	1995
+			 14:00	-	LINT
+Zone Pacific/Saipan	-14:17:00 -	LMT	1844 Dec 31
+			 9:43:00 -	LMT	1901
+			 9:00	-	MPT	1969 Oct # N Mariana Is Time
+			10:00	-	MPT	2000 Dec 23
+			10:00	-	ChST	# Chamorro Standard Time
+Zone Pacific/Majuro	11:24:48 -	LMT	1901
+			11:00	-	MHT	1969 Oct # Marshall Islands Time
+			12:00	-	MHT
+Zone Pacific/Kwajalein	11:09:20 -	LMT	1901
+			11:00	-	MHT	1969 Oct
+			-12:00	-	KWAT	1993 Aug 20	# Kwajalein Time
+			12:00	-	MHT
+Zone Pacific/Truk	10:07:08 -	LMT	1901
+			10:00	-	TRUT			# Truk Time
+Zone Pacific/Ponape	10:32:52 -	LMT	1901		# Kolonia
+			11:00	-	PONT			# Ponape Time
+Zone Pacific/Kosrae	10:51:56 -	LMT	1901
+			11:00	-	KOST	1969 Oct	# Kosrae Time
+			12:00	-	KOST	1999
+			11:00	-	KOST
+Zone	Pacific/Nauru	11:07:40 -	LMT	1921 Jan 15	# Uaobe
+			11:30	-	NRT	1942 Mar 15	# Nauru Time
+			9:00	-	JST	1944 Aug 15
+			11:30	-	NRT	1979 May
+			12:00	-	NRT
+Rule	NC	1977	1978	-	Dec	Sun>=1	0:00	1:00	S
+Rule	NC	1978	1979	-	Feb	27	0:00	0	-
+Rule	NC	1996	only	-	Dec	 1	2:00s	1:00	S
+Rule	NC	1997	only	-	Mar	 2	2:00s	0	-
+Zone	Pacific/Noumea	11:05:48 -	LMT	1912 Jan 13
+			11:00	NC	NC%sT
+Rule	NZ	1927	only	-	Nov	 6	2:00	1:00	S
+Rule	NZ	1928	only	-	Mar	 4	2:00	0	M
+Rule	NZ	1928	1933	-	Oct	Sun>=8	2:00	0:30	S
+Rule	NZ	1929	1933	-	Mar	Sun>=15	2:00	0	M
+Rule	NZ	1934	1940	-	Apr	lastSun	2:00	0	M
+Rule	NZ	1934	1940	-	Sep	lastSun	2:00	0:30	S
+Rule	NZ	1946	only	-	Jan	 1	0:00	0	S
+Rule	NZ	1974	only	-	Nov	Sun>=1	2:00s	1:00	D
+Rule	Chatham	1974	only	-	Nov	Sun>=1	2:45s	1:00	D
+Rule	NZ	1975	only	-	Feb	lastSun	2:00s	0	S
+Rule	Chatham	1975	only	-	Feb	lastSun	2:45s	0	S
+Rule	NZ	1975	1988	-	Oct	lastSun	2:00s	1:00	D
+Rule	Chatham	1975	1988	-	Oct	lastSun	2:45s	1:00	D
+Rule	NZ	1976	1989	-	Mar	Sun>=1	2:00s	0	S
+Rule	Chatham	1976	1989	-	Mar	Sun>=1	2:45s	0	S
+Rule	NZ	1989	only	-	Oct	Sun>=8	2:00s	1:00	D
+Rule	Chatham	1989	only	-	Oct	Sun>=8	2:45s	1:00	D
+Rule	NZ	1990	2006	-	Oct	Sun>=1	2:00s	1:00	D
+Rule	Chatham	1990	2006	-	Oct	Sun>=1	2:45s	1:00	D
+Rule	NZ	1990	2007	-	Mar	Sun>=15	2:00s	0	S
+Rule	Chatham	1990	2007	-	Mar	Sun>=15	2:45s	0	S
+Rule	NZ	2007	max	-	Sep	lastSun	2:00s	1:00	D
+Rule	Chatham	2007	max	-	Sep	lastSun	2:45s	1:00	D
+Rule	NZ	2008	max	-	Apr	Sun>=1	2:00s	0	S
+Rule	Chatham	2008	max	-	Apr	Sun>=1	2:45s	0	S
+Zone Pacific/Auckland	11:39:04 -	LMT	1868 Nov  2
+			11:30	NZ	NZ%sT	1946 Jan  1
+			12:00	NZ	NZ%sT
+Zone Pacific/Chatham	12:13:48 -	LMT	1957 Jan  1
+			12:45	Chatham	CHA%sT
+Zone	Pacific/Niue	-11:19:40 -	LMT	1901		# Alofi
+			-11:20	-	NUT	1951	# Niue Time
+			-11:30	-	NUT	1978 Oct 1
+			-11:00	-	NUT
+Zone	Pacific/Norfolk	11:11:52 -	LMT	1901		# Kingston
+			11:12	-	NMT	1951	# Norfolk Mean Time
+			11:30	-	NFT		# Norfolk Time
+Zone Pacific/Palau	8:57:56 -	LMT	1901		# Koror
+			9:00	-	PWT	# Palau Time
+Zone Pacific/Port_Moresby 9:48:40 -	LMT	1880
+			9:48:32	-	PMMT	1895	# Port Moresby Mean Time
+			10:00	-	PGT		# Papua New Guinea Time
+Zone Pacific/Pitcairn	-8:40:20 -	LMT	1901		# Adamstown
+			-8:30	-	PNT	1998 Apr 27 00:00
+			-8:00	-	PST	# Pitcairn Standard Time
+Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
+			-11:22:48 -	LMT	1911
+			-11:30	-	SAMT	1950		# Samoa Time
+			-11:00	-	NST	1967 Apr	# N=Nome
+			-11:00	-	BST	1983 Nov 30	# B=Bering
+			-11:00	-	SST			# S=Samoa
+Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
+			-11:26:56 -	LMT	1911
+			-11:30	-	SAMT	1950		# Samoa Time
+			-11:00	-	WST			# Samoa Time
+Zone Pacific/Guadalcanal 10:39:48 -	LMT	1912 Oct	# Honiara
+			11:00	-	SBT	# Solomon Is Time
+Zone	Pacific/Fakaofo	-11:24:56 -	LMT	1901
+			-10:00	-	TKT	# Tokelau Time
+Rule	Tonga	1999	only	-	Oct	 7	2:00s	1:00	S
+Rule	Tonga	2000	only	-	Mar	19	2:00s	0	-
+Rule	Tonga	2000	2001	-	Nov	Sun>=1	2:00	1:00	S
+Rule	Tonga	2001	2002	-	Jan	lastSun	2:00	0	-
+Zone Pacific/Tongatapu	12:19:20 -	LMT	1901
+			12:20	-	TOT	1941 # Tonga Time
+			13:00	-	TOT	1999
+			13:00	Tonga	TO%sT
+Zone Pacific/Funafuti	11:56:52 -	LMT	1901
+			12:00	-	TVT	# Tuvalu Time
+Zone Pacific/Johnston	-10:00	-	HST
+Zone Pacific/Midway	-11:49:28 -	LMT	1901
+			-11:00	-	NST	1956 Jun  3
+			-11:00	1:00	NDT	1956 Sep  2
+			-11:00	-	NST	1967 Apr	# N=Nome
+			-11:00	-	BST	1983 Nov 30	# B=Bering
+			-11:00	-	SST			# S=Samoa
+Zone	Pacific/Wake	11:06:28 -	LMT	1901
+			12:00	-	WAKT	# Wake Time
+Rule	Vanuatu	1983	only	-	Sep	25	0:00	1:00	S
+Rule	Vanuatu	1984	1991	-	Mar	Sun>=23	0:00	0	-
+Rule	Vanuatu	1984	only	-	Oct	23	0:00	1:00	S
+Rule	Vanuatu	1985	1991	-	Sep	Sun>=23	0:00	1:00	S
+Rule	Vanuatu	1992	1993	-	Jan	Sun>=23	0:00	0	-
+Rule	Vanuatu	1992	only	-	Oct	Sun>=23	0:00	1:00	S
+Zone	Pacific/Efate	11:13:16 -	LMT	1912 Jan 13		# Vila
+			11:00	Vanuatu	VU%sT	# Vanuatu Time
+Zone	Pacific/Wallis	12:15:20 -	LMT	1901
+			12:00	-	WFT	# Wallis & Futuna Time
Index: trunk/web/dojo/dojox/date/zoneinfo/etcetera
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/etcetera	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/etcetera	(revision 9)
@@ -0,0 +1,36 @@
+Zone	Etc/GMT		0	-	GMT
+Zone	Etc/UTC		0	-	UTC
+Zone	Etc/UCT		0	-	UCT
+Link	Etc/GMT				GMT
+Link	Etc/UTC				Etc/Universal
+Link	Etc/UTC				Etc/Zulu
+Link	Etc/GMT				Etc/Greenwich
+Link	Etc/GMT				Etc/GMT-0
+Link	Etc/GMT				Etc/GMT+0
+Link	Etc/GMT				Etc/GMT0
+Zone	Etc/GMT-14	14	-	GMT-14	# 14 hours ahead of GMT
+Zone	Etc/GMT-13	13	-	GMT-13
+Zone	Etc/GMT-12	12	-	GMT-12
+Zone	Etc/GMT-11	11	-	GMT-11
+Zone	Etc/GMT-10	10	-	GMT-10
+Zone	Etc/GMT-9	9	-	GMT-9
+Zone	Etc/GMT-8	8	-	GMT-8
+Zone	Etc/GMT-7	7	-	GMT-7
+Zone	Etc/GMT-6	6	-	GMT-6
+Zone	Etc/GMT-5	5	-	GMT-5
+Zone	Etc/GMT-4	4	-	GMT-4
+Zone	Etc/GMT-3	3	-	GMT-3
+Zone	Etc/GMT-2	2	-	GMT-2
+Zone	Etc/GMT-1	1	-	GMT-1
+Zone	Etc/GMT+1	-1	-	GMT+1
+Zone	Etc/GMT+2	-2	-	GMT+2
+Zone	Etc/GMT+3	-3	-	GMT+3
+Zone	Etc/GMT+4	-4	-	GMT+4
+Zone	Etc/GMT+5	-5	-	GMT+5
+Zone	Etc/GMT+6	-6	-	GMT+6
+Zone	Etc/GMT+7	-7	-	GMT+7
+Zone	Etc/GMT+8	-8	-	GMT+8
+Zone	Etc/GMT+9	-9	-	GMT+9
+Zone	Etc/GMT+10	-10	-	GMT+10
+Zone	Etc/GMT+11	-11	-	GMT+11
+Zone	Etc/GMT+12	-12	-	GMT+12
Index: trunk/web/dojo/dojox/date/zoneinfo/northamerica
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/northamerica	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/northamerica	(revision 9)
@@ -0,0 +1,895 @@
+Rule	US	1918	1919	-	Mar	lastSun	2:00	1:00	D
+Rule	US	1918	1919	-	Oct	lastSun	2:00	0	S
+Rule	US	1942	only	-	Feb	9	2:00	1:00	W # War
+Rule	US	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+Rule	US	1945	only	-	Sep	30	2:00	0	S
+Rule	US	1967	2006	-	Oct	lastSun	2:00	0	S
+Rule	US	1967	1973	-	Apr	lastSun	2:00	1:00	D
+Rule	US	1974	only	-	Jan	6	2:00	1:00	D
+Rule	US	1975	only	-	Feb	23	2:00	1:00	D
+Rule	US	1976	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	US	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
+Rule	US	2007	max	-	Mar	Sun>=8	2:00	1:00	D
+Rule	US	2007	max	-	Nov	Sun>=1	2:00	0	S
+Zone	EST		 -5:00	-	EST
+Zone	MST		 -7:00	-	MST
+Zone	HST		-10:00	-	HST
+Zone	EST5EDT		 -5:00	US	E%sT
+Zone	CST6CDT		 -6:00	US	C%sT
+Zone	MST7MDT		 -7:00	US	M%sT
+Zone	PST8PDT		 -8:00	US	P%sT
+Rule	NYC	1920	only	-	Mar	lastSun	2:00	1:00	D
+Rule	NYC	1920	only	-	Oct	lastSun	2:00	0	S
+Rule	NYC	1921	1966	-	Apr	lastSun	2:00	1:00	D
+Rule	NYC	1921	1954	-	Sep	lastSun	2:00	0	S
+Rule	NYC	1955	1966	-	Oct	lastSun	2:00	0	S
+Zone America/New_York	-4:56:02 -	LMT	1883 Nov 18 12:03:58
+			-5:00	US	E%sT	1920
+			-5:00	NYC	E%sT	1942
+			-5:00	US	E%sT	1946
+			-5:00	NYC	E%sT	1967
+			-5:00	US	E%sT
+Rule	Chicago	1920	only	-	Jun	13	2:00	1:00	D
+Rule	Chicago	1920	1921	-	Oct	lastSun	2:00	0	S
+Rule	Chicago	1921	only	-	Mar	lastSun	2:00	1:00	D
+Rule	Chicago	1922	1966	-	Apr	lastSun	2:00	1:00	D
+Rule	Chicago	1922	1954	-	Sep	lastSun	2:00	0	S
+Rule	Chicago	1955	1966	-	Oct	lastSun	2:00	0	S
+Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
+			-6:00	US	C%sT	1920
+			-6:00	Chicago	C%sT	1936 Mar  1 2:00
+			-5:00	-	EST	1936 Nov 15 2:00
+			-6:00	Chicago	C%sT	1942
+			-6:00	US	C%sT	1946
+			-6:00	Chicago	C%sT	1967
+			-6:00	US	C%sT
+Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
+			-7:00	US	M%sT	1992 Oct 25 02:00
+			-6:00	US	C%sT
+Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
+			-7:00	US	M%sT	2003 Oct 26 02:00
+			-6:00	US	C%sT
+Rule	Denver	1920	1921	-	Mar	lastSun	2:00	1:00	D
+Rule	Denver	1920	only	-	Oct	lastSun	2:00	0	S
+Rule	Denver	1921	only	-	May	22	2:00	0	S
+Rule	Denver	1965	1966	-	Apr	lastSun	2:00	1:00	D
+Rule	Denver	1965	1966	-	Oct	lastSun	2:00	0	S
+Zone America/Denver	-6:59:56 -	LMT	1883 Nov 18 12:00:04
+			-7:00	US	M%sT	1920
+			-7:00	Denver	M%sT	1942
+			-7:00	US	M%sT	1946
+			-7:00	Denver	M%sT	1967
+			-7:00	US	M%sT
+Rule	CA	1948	only	-	Mar	14	2:00	1:00	D
+Rule	CA	1949	only	-	Jan	 1	2:00	0	S
+Rule	CA	1950	1966	-	Apr	lastSun	2:00	1:00	D
+Rule	CA	1950	1961	-	Sep	lastSun	2:00	0	S
+Rule	CA	1962	1966	-	Oct	lastSun	2:00	0	S
+Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
+			-8:00	US	P%sT	1946
+			-8:00	CA	P%sT	1967
+			-8:00	US	P%sT
+Zone America/Juneau	 15:02:19 -	LMT	1867 Oct 18
+			 -8:57:41 -	LMT	1900 Aug 20 12:00
+			 -8:00	-	PST	1942
+			 -8:00	US	P%sT	1946
+			 -8:00	-	PST	1969
+			 -8:00	US	P%sT	1983 Oct 30 2:00
+			 -9:00	US	Y%sT	1983 Nov 30
+			 -9:00	US	AK%sT
+Zone America/Yakutat	 14:41:05 -	LMT	1867 Oct 18
+			 -9:18:55 -	LMT	1900 Aug 20 12:00
+			 -9:00	-	YST	1942
+			 -9:00	US	Y%sT	1946
+			 -9:00	-	YST	1969
+			 -9:00	US	Y%sT	1983 Nov 30
+			 -9:00	US	AK%sT
+Zone America/Anchorage	 14:00:24 -	LMT	1867 Oct 18
+			 -9:59:36 -	LMT	1900 Aug 20 12:00
+			-10:00	-	CAT	1942
+			-10:00	US	CAT/CAWT 1945 Aug 14 23:00u
+			-10:00	US	CAT/CAPT 1946 # Peace
+			-10:00	-	CAT	1967 Apr
+			-10:00	-	AHST	1969
+			-10:00	US	AH%sT	1983 Oct 30 2:00
+			 -9:00	US	Y%sT	1983 Nov 30
+			 -9:00	US	AK%sT
+Zone America/Nome	 12:58:21 -	LMT	1867 Oct 18
+			-11:01:38 -	LMT	1900 Aug 20 12:00
+			-11:00	-	NST	1942
+			-11:00	US	N%sT	1946
+			-11:00	-	NST	1967 Apr
+			-11:00	-	BST	1969
+			-11:00	US	B%sT	1983 Oct 30 2:00
+			 -9:00	US	Y%sT	1983 Nov 30
+			 -9:00	US	AK%sT
+Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
+			-11:46:38 -	LMT	1900 Aug 20 12:00
+			-11:00	-	NST	1942
+			-11:00	US	N%sT	1946
+			-11:00	-	NST	1967 Apr
+			-11:00	-	BST	1969
+			-11:00	US	B%sT	1983 Oct 30 2:00
+			-10:00	US	AH%sT	1983 Nov 30
+			-10:00	US	HA%sT
+Zone Pacific/Honolulu	-10:31:26 -	LMT	1900 Jan  1 12:00
+			-10:30	-	HST	1933 Apr 30 2:00
+			-10:30	1:00	HDT	1933 May 21 2:00
+			-10:30	US	H%sT	1947 Jun  8 2:00
+			-10:00	-	HST
+Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
+			-7:00	US	M%sT	1944 Jan  1 00:01
+			-7:00	-	MST	1944 Apr  1 00:01
+			-7:00	US	M%sT	1944 Oct  1 00:01
+			-7:00	-	MST	1967
+			-7:00	US	M%sT	1968 Mar 21
+			-7:00	-	MST
+Link America/Denver America/Shiprock
+Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
+			-8:00	US	P%sT	1923 May 13 2:00
+			-7:00	US	M%sT	1974
+			-7:00	-	MST	1974 Feb  3 2:00
+			-7:00	US	M%sT
+Rule Indianapolis 1941	only	-	Jun	22	2:00	1:00	D
+Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
+Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
+Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+			-6:00	US	C%sT	1920
+			-6:00 Indianapolis C%sT	1942
+			-6:00	US	C%sT	1946
+			-6:00 Indianapolis C%sT	1955 Apr 24 2:00
+			-5:00	-	EST	1957 Sep 29 2:00
+			-6:00	-	CST	1958 Apr 27 2:00
+			-5:00	-	EST	1969
+			-5:00	US	E%sT	1971
+			-5:00	-	EST	2006
+			-5:00	US	E%sT
+Rule	Marengo	1951	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Marengo	1951	only	-	Sep	lastSun	2:00	0	S
+Rule	Marengo	1954	1960	-	Apr	lastSun	2:00	1:00	D
+Rule	Marengo	1954	1960	-	Sep	lastSun	2:00	0	S
+Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
+			-6:00	US	C%sT	1951
+			-6:00	Marengo	C%sT	1961 Apr 30 2:00
+			-5:00	-	EST	1969
+			-5:00	US	E%sT	1974 Jan  6 2:00
+			-6:00	1:00	CDT	1974 Oct 27 2:00
+			-5:00	US	E%sT	1976
+			-5:00	-	EST	2006
+			-5:00	US	E%sT
+Rule Vincennes	1946	only	-	Apr	lastSun	2:00	1:00	D
+Rule Vincennes	1946	only	-	Sep	lastSun	2:00	0	S
+Rule Vincennes	1953	1954	-	Apr	lastSun	2:00	1:00	D
+Rule Vincennes	1953	1959	-	Sep	lastSun	2:00	0	S
+Rule Vincennes	1955	only	-	May	 1	0:00	1:00	D
+Rule Vincennes	1956	1963	-	Apr	lastSun	2:00	1:00	D
+Rule Vincennes	1960	only	-	Oct	lastSun	2:00	0	S
+Rule Vincennes	1961	only	-	Sep	lastSun	2:00	0	S
+Rule Vincennes	1962	1963	-	Oct	lastSun	2:00	0	S
+Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
+			-6:00	US	C%sT	1946
+			-6:00 Vincennes	C%sT	1964 Apr 26 2:00
+			-5:00	-	EST	1969
+			-5:00	US	E%sT	1971
+			-5:00	-	EST	2006 Apr  2 2:00
+			-6:00	US	C%sT	2007 Nov  4 2:00
+			-5:00	US	E%sT
+Rule Perry	1946	only	-	Apr	lastSun	2:00	1:00	D
+Rule Perry	1946	only	-	Sep	lastSun	2:00	0	S
+Rule Perry	1953	1954	-	Apr	lastSun	2:00	1:00	D
+Rule Perry	1953	1959	-	Sep	lastSun	2:00	0	S
+Rule Perry	1955	only	-	May	 1	0:00	1:00	D
+Rule Perry	1956	1963	-	Apr	lastSun	2:00	1:00	D
+Rule Perry	1960	only	-	Oct	lastSun	2:00	0	S
+Rule Perry	1961	only	-	Sep	lastSun	2:00	0	S
+Rule Perry	1962	1963	-	Oct	lastSun	2:00	0	S
+Zone America/Indiana/Tell_City -5:47:03 - LMT	1883 Nov 18 12:12:57
+			-6:00	US	C%sT	1946
+			-6:00 Perry	C%sT	1964 Apr 26 2:00
+			-5:00	-	EST	1969
+			-5:00	US	E%sT	1971
+			-5:00	-	EST	2006 Apr  2 2:00
+			-6:00	US	C%sT
+Rule	Pike	1955	only	-	May	 1	0:00	1:00	D
+Rule	Pike	1955	1960	-	Sep	lastSun	2:00	0	S
+Rule	Pike	1956	1964	-	Apr	lastSun	2:00	1:00	D
+Rule	Pike	1961	1964	-	Oct	lastSun	2:00	0	S
+Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
+			-6:00	US	C%sT	1955
+			-6:00	Pike	C%sT	1965 Apr 25 2:00
+			-5:00	-	EST	1966 Oct 30 2:00
+			-6:00	US	C%sT	1977 Oct 30 2:00
+			-5:00	-	EST	2006 Apr  2 2:00
+			-6:00	US	C%sT	2007 Nov  4 2:00
+			-5:00	US	E%sT
+Rule	Starke	1947	1961	-	Apr	lastSun	2:00	1:00	D
+Rule	Starke	1947	1954	-	Sep	lastSun	2:00	0	S
+Rule	Starke	1955	1956	-	Oct	lastSun	2:00	0	S
+Rule	Starke	1957	1958	-	Sep	lastSun	2:00	0	S
+Rule	Starke	1959	1961	-	Oct	lastSun	2:00	0	S
+Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
+			-6:00	US	C%sT	1947
+			-6:00	Starke	C%sT	1962 Apr 29 2:00
+			-5:00	-	EST	1963 Oct 27 2:00
+			-6:00	US	C%sT	1991 Oct 27 2:00
+			-5:00	-	EST	2006 Apr  2 2:00
+			-6:00	US	C%sT
+Rule	Pulaski	1946	1960	-	Apr	lastSun	2:00	1:00	D
+Rule	Pulaski	1946	1954	-	Sep	lastSun	2:00	0	S
+Rule	Pulaski	1955	1956	-	Oct	lastSun	2:00	0	S
+Rule	Pulaski	1957	1960	-	Sep	lastSun	2:00	0	S
+Zone America/Indiana/Winamac -5:46:25 - LMT	1883 Nov 18 12:13:35
+			-6:00	US	C%sT	1946
+			-6:00	Pulaski	C%sT	1961 Apr 30 2:00
+			-5:00	-	EST	1969
+			-5:00	US	E%sT	1971
+			-5:00	-	EST	2006 Apr  2 2:00
+			-6:00	US	C%sT	2007 Mar 11 2:00
+			-5:00	US	E%sT
+Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
+			-6:00	US	C%sT	1954 Apr 25 2:00
+			-5:00	-	EST	1969
+			-5:00	US	E%sT	1973
+			-5:00	-	EST	2006
+			-5:00	US	E%sT
+Rule Louisville	1921	only	-	May	1	2:00	1:00	D
+Rule Louisville	1921	only	-	Sep	1	2:00	0	S
+Rule Louisville	1941	1961	-	Apr	lastSun	2:00	1:00	D
+Rule Louisville	1941	only	-	Sep	lastSun	2:00	0	S
+Rule Louisville	1946	only	-	Jun	2	2:00	0	S
+Rule Louisville	1950	1955	-	Sep	lastSun	2:00	0	S
+Rule Louisville	1956	1960	-	Oct	lastSun	2:00	0	S
+Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
+			-6:00	US	C%sT	1921
+			-6:00 Louisville C%sT	1942
+			-6:00	US	C%sT	1946
+			-6:00 Louisville C%sT	1961 Jul 23 2:00
+			-5:00	-	EST	1968
+			-5:00	US	E%sT	1974 Jan  6 2:00
+			-6:00	1:00	CDT	1974 Oct 27 2:00
+			-5:00	US	E%sT
+Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
+			-6:00	US	C%sT	1946
+			-6:00	-	CST	1968
+			-6:00	US	C%sT	2000 Oct 29  2:00
+			-5:00	US	E%sT
+Rule	Detroit	1948	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Detroit	1948	only	-	Sep	lastSun	2:00	0	S
+Rule	Detroit	1967	only	-	Jun	14	2:00	1:00	D
+Rule	Detroit	1967	only	-	Oct	lastSun	2:00	0	S
+Zone America/Detroit	-5:32:11 -	LMT	1905
+			-6:00	-	CST	1915 May 15 2:00
+			-5:00	-	EST	1942
+			-5:00	US	E%sT	1946
+			-5:00	Detroit	E%sT	1973
+			-5:00	US	E%sT	1975
+			-5:00	-	EST	1975 Apr 27 2:00
+			-5:00	US	E%sT
+Rule Menominee	1946	only	-	Apr	lastSun	2:00	1:00	D
+Rule Menominee	1946	only	-	Sep	lastSun	2:00	0	S
+Rule Menominee	1966	only	-	Apr	lastSun	2:00	1:00	D
+Rule Menominee	1966	only	-	Oct	lastSun	2:00	0	S
+Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
+			-6:00	US	C%sT	1946
+			-6:00 Menominee	C%sT	1969 Apr 27 2:00
+			-5:00	-	EST	1973 Apr 29 2:00
+			-6:00	US	C%sT
+Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
+Rule	Canada	1918	only	-	Oct	31	2:00	0	S
+Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
+Rule	Canada	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+Rule	Canada	1945	only	-	Sep	30	2:00	0	S
+Rule	Canada	1974	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	Canada	1974	2006	-	Oct	lastSun	2:00	0	S
+Rule	Canada	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
+Rule	Canada	2007	max	-	Mar	Sun>=8	2:00	1:00	D
+Rule	Canada	2007	max	-	Nov	Sun>=1	2:00	0	S
+Rule	StJohns	1917	only	-	Apr	 8	2:00	1:00	D
+Rule	StJohns	1917	only	-	Sep	17	2:00	0	S
+Rule	StJohns	1919	only	-	May	 5	23:00	1:00	D
+Rule	StJohns	1919	only	-	Aug	12	23:00	0	S
+Rule	StJohns	1920	1935	-	May	Sun>=1	23:00	1:00	D
+Rule	StJohns	1920	1935	-	Oct	lastSun	23:00	0	S
+Rule	StJohns	1936	1941	-	May	Mon>=9	0:00	1:00	D
+Rule	StJohns	1936	1941	-	Oct	Mon>=2	0:00	0	S
+Rule	StJohns	1946	1950	-	May	Sun>=8	2:00	1:00	D
+Rule	StJohns	1946	1950	-	Oct	Sun>=2	2:00	0	S
+Rule	StJohns	1951	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	StJohns	1951	1959	-	Sep	lastSun	2:00	0	S
+Rule	StJohns	1960	1986	-	Oct	lastSun	2:00	0	S
+Rule	StJohns	1987	only	-	Apr	Sun>=1	0:01	1:00	D
+Rule	StJohns	1987	2006	-	Oct	lastSun	0:01	0	S
+Rule	StJohns	1988	only	-	Apr	Sun>=1	0:01	2:00	DD
+Rule	StJohns	1989	2006	-	Apr	Sun>=1	0:01	1:00	D
+Rule	StJohns	2007	max	-	Mar	Sun>=8	0:01	1:00	D
+Rule	StJohns	2007	max	-	Nov	Sun>=1	0:01	0	S
+Zone America/St_Johns	-3:30:52 -	LMT	1884
+			-3:30:52 StJohns N%sT	1918
+			-3:30:52 Canada	N%sT	1919
+			-3:30:52 StJohns N%sT	1935 Mar 30
+			-3:30	StJohns	N%sT	1942 May 11
+			-3:30	Canada	N%sT	1946
+			-3:30	StJohns	N%sT
+Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
+			-3:30:52 -	NST	1918
+			-3:30:52 Canada N%sT	1919
+			-3:30:52 -	NST	1935 Mar 30
+			-3:30	-	NST	1936
+			-3:30	StJohns	N%sT	1942 May 11
+			-3:30	Canada	N%sT	1946
+			-3:30	StJohns	N%sT	1966 Mar 15 2:00
+			-4:00	StJohns	A%sT
+Rule	Halifax	1916	only	-	Apr	 1	0:00	1:00	D
+Rule	Halifax	1916	only	-	Oct	 1	0:00	0	S
+Rule	Halifax	1920	only	-	May	 9	0:00	1:00	D
+Rule	Halifax	1920	only	-	Aug	29	0:00	0	S
+Rule	Halifax	1921	only	-	May	 6	0:00	1:00	D
+Rule	Halifax	1921	1922	-	Sep	 5	0:00	0	S
+Rule	Halifax	1922	only	-	Apr	30	0:00	1:00	D
+Rule	Halifax	1923	1925	-	May	Sun>=1	0:00	1:00	D
+Rule	Halifax	1923	only	-	Sep	 4	0:00	0	S
+Rule	Halifax	1924	only	-	Sep	15	0:00	0	S
+Rule	Halifax	1925	only	-	Sep	28	0:00	0	S
+Rule	Halifax	1926	only	-	May	16	0:00	1:00	D
+Rule	Halifax	1926	only	-	Sep	13	0:00	0	S
+Rule	Halifax	1927	only	-	May	 1	0:00	1:00	D
+Rule	Halifax	1927	only	-	Sep	26	0:00	0	S
+Rule	Halifax	1928	1931	-	May	Sun>=8	0:00	1:00	D
+Rule	Halifax	1928	only	-	Sep	 9	0:00	0	S
+Rule	Halifax	1929	only	-	Sep	 3	0:00	0	S
+Rule	Halifax	1930	only	-	Sep	15	0:00	0	S
+Rule	Halifax	1931	1932	-	Sep	Mon>=24	0:00	0	S
+Rule	Halifax	1932	only	-	May	 1	0:00	1:00	D
+Rule	Halifax	1933	only	-	Apr	30	0:00	1:00	D
+Rule	Halifax	1933	only	-	Oct	 2	0:00	0	S
+Rule	Halifax	1934	only	-	May	20	0:00	1:00	D
+Rule	Halifax	1934	only	-	Sep	16	0:00	0	S
+Rule	Halifax	1935	only	-	Jun	 2	0:00	1:00	D
+Rule	Halifax	1935	only	-	Sep	30	0:00	0	S
+Rule	Halifax	1936	only	-	Jun	 1	0:00	1:00	D
+Rule	Halifax	1936	only	-	Sep	14	0:00	0	S
+Rule	Halifax	1937	1938	-	May	Sun>=1	0:00	1:00	D
+Rule	Halifax	1937	1941	-	Sep	Mon>=24	0:00	0	S
+Rule	Halifax	1939	only	-	May	28	0:00	1:00	D
+Rule	Halifax	1940	1941	-	May	Sun>=1	0:00	1:00	D
+Rule	Halifax	1946	1949	-	Apr	lastSun	2:00	1:00	D
+Rule	Halifax	1946	1949	-	Sep	lastSun	2:00	0	S
+Rule	Halifax	1951	1954	-	Apr	lastSun	2:00	1:00	D
+Rule	Halifax	1951	1954	-	Sep	lastSun	2:00	0	S
+Rule	Halifax	1956	1959	-	Apr	lastSun	2:00	1:00	D
+Rule	Halifax	1956	1959	-	Sep	lastSun	2:00	0	S
+Rule	Halifax	1962	1973	-	Apr	lastSun	2:00	1:00	D
+Rule	Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
+Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
+			-4:00	Halifax	A%sT	1918
+			-4:00	Canada	A%sT	1919
+			-4:00	Halifax	A%sT	1942 Feb  9 2:00s
+			-4:00	Canada	A%sT	1946
+			-4:00	Halifax	A%sT	1974
+			-4:00	Canada	A%sT
+Zone America/Glace_Bay	-3:59:48 -	LMT	1902 Jun 15
+			-4:00	Canada	A%sT	1953
+			-4:00	Halifax	A%sT	1954
+			-4:00	-	AST	1972
+			-4:00	Halifax	A%sT	1974
+			-4:00	Canada	A%sT
+Rule	Moncton	1933	1935	-	Jun	Sun>=8	1:00	1:00	D
+Rule	Moncton	1933	1935	-	Sep	Sun>=8	1:00	0	S
+Rule	Moncton	1936	1938	-	Jun	Sun>=1	1:00	1:00	D
+Rule	Moncton	1936	1938	-	Sep	Sun>=1	1:00	0	S
+Rule	Moncton	1939	only	-	May	27	1:00	1:00	D
+Rule	Moncton	1939	1941	-	Sep	Sat>=21	1:00	0	S
+Rule	Moncton	1940	only	-	May	19	1:00	1:00	D
+Rule	Moncton	1941	only	-	May	 4	1:00	1:00	D
+Rule	Moncton	1946	1972	-	Apr	lastSun	2:00	1:00	D
+Rule	Moncton	1946	1956	-	Sep	lastSun	2:00	0	S
+Rule	Moncton	1957	1972	-	Oct	lastSun	2:00	0	S
+Rule	Moncton	1993	2006	-	Apr	Sun>=1	0:01	1:00	D
+Rule	Moncton	1993	2006	-	Oct	lastSun	0:01	0	S
+Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
+			-5:00	-	EST	1902 Jun 15
+			-4:00	Canada	A%sT	1933
+			-4:00	Moncton	A%sT	1942
+			-4:00	Canada	A%sT	1946
+			-4:00	Moncton	A%sT	1973
+			-4:00	Canada	A%sT	1993
+			-4:00	Moncton	A%sT	2007
+			-4:00	Canada	A%sT
+Rule	Mont	1917	only	-	Mar	25	2:00	1:00	D
+Rule	Mont	1917	only	-	Apr	24	0:00	0	S
+Rule	Mont	1919	only	-	Mar	31	2:30	1:00	D
+Rule	Mont	1919	only	-	Oct	25	2:30	0	S
+Rule	Mont	1920	only	-	May	 2	2:30	1:00	D
+Rule	Mont	1920	1922	-	Oct	Sun>=1	2:30	0	S
+Rule	Mont	1921	only	-	May	 1	2:00	1:00	D
+Rule	Mont	1922	only	-	Apr	30	2:00	1:00	D
+Rule	Mont	1924	only	-	May	17	2:00	1:00	D
+Rule	Mont	1924	1926	-	Sep	lastSun	2:30	0	S
+Rule	Mont	1925	1926	-	May	Sun>=1	2:00	1:00	D
+Rule	Mont	1927	only	-	May	1	0:00	1:00	D
+Rule	Mont	1927	1932	-	Sep	lastSun	0:00	0	S
+Rule	Mont	1928	1931	-	Apr	lastSun	0:00	1:00	D
+Rule	Mont	1932	only	-	May	1	0:00	1:00	D
+Rule	Mont	1933	1940	-	Apr	lastSun	0:00	1:00	D
+Rule	Mont	1933	only	-	Oct	1	0:00	0	S
+Rule	Mont	1934	1939	-	Sep	lastSun	0:00	0	S
+Rule	Mont	1946	1973	-	Apr	lastSun	2:00	1:00	D
+Rule	Mont	1945	1948	-	Sep	lastSun	2:00	0	S
+Rule	Mont	1949	1950	-	Oct	lastSun	2:00	0	S
+Rule	Mont	1951	1956	-	Sep	lastSun	2:00	0	S
+Rule	Mont	1957	1973	-	Oct	lastSun	2:00	0	S
+Zone America/Blanc-Sablon -3:48:28 -	LMT	1884
+			-4:00	Canada	A%sT	1970
+			-4:00	-	AST
+Zone America/Montreal	-4:54:16 -	LMT	1884
+			-5:00	Mont	E%sT	1918
+			-5:00	Canada	E%sT	1919
+			-5:00	Mont	E%sT	1942 Feb  9 2:00s
+			-5:00	Canada	E%sT	1946
+			-5:00	Mont	E%sT	1974
+			-5:00	Canada	E%sT
+Rule	Toronto	1919	only	-	Mar	30	23:30	1:00	D
+Rule	Toronto	1919	only	-	Oct	26	0:00	0	S
+Rule	Toronto	1920	only	-	May	 2	2:00	1:00	D
+Rule	Toronto	1920	only	-	Sep	26	0:00	0	S
+Rule	Toronto	1921	only	-	May	15	2:00	1:00	D
+Rule	Toronto	1921	only	-	Sep	15	2:00	0	S
+Rule	Toronto	1922	1923	-	May	Sun>=8	2:00	1:00	D
+Rule	Toronto	1922	1926	-	Sep	Sun>=15	2:00	0	S
+Rule	Toronto	1924	1927	-	May	Sun>=1	2:00	1:00	D
+Rule	Toronto	1927	1932	-	Sep	lastSun	2:00	0	S
+Rule	Toronto	1928	1931	-	Apr	lastSun	2:00	1:00	D
+Rule	Toronto	1932	only	-	May	1	2:00	1:00	D
+Rule	Toronto	1933	1940	-	Apr	lastSun	2:00	1:00	D
+Rule	Toronto	1933	only	-	Oct	1	2:00	0	S
+Rule	Toronto	1934	1939	-	Sep	lastSun	2:00	0	S
+Rule	Toronto	1945	1946	-	Sep	lastSun	2:00	0	S
+Rule	Toronto	1946	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Toronto	1947	1949	-	Apr	lastSun	0:00	1:00	D
+Rule	Toronto	1947	1948	-	Sep	lastSun	0:00	0	S
+Rule	Toronto	1949	only	-	Nov	lastSun	0:00	0	S
+Rule	Toronto	1950	1973	-	Apr	lastSun	2:00	1:00	D
+Rule	Toronto	1950	only	-	Nov	lastSun	2:00	0	S
+Rule	Toronto	1951	1956	-	Sep	lastSun	2:00	0	S
+Rule	Toronto	1957	1973	-	Oct	lastSun	2:00	0	S
+Zone America/Toronto	-5:17:32 -	LMT	1895
+			-5:00	Canada	E%sT	1919
+			-5:00	Toronto	E%sT	1942 Feb  9 2:00s
+			-5:00	Canada	E%sT	1946
+			-5:00	Toronto	E%sT	1974
+			-5:00	Canada	E%sT
+Zone America/Thunder_Bay -5:57:00 -	LMT	1895
+			-6:00	-	CST	1910
+			-5:00	-	EST	1942
+			-5:00	Canada	E%sT	1970
+			-5:00	Mont	E%sT	1973
+			-5:00	-	EST	1974
+			-5:00	Canada	E%sT
+Zone America/Nipigon	-5:53:04 -	LMT	1895
+			-5:00	Canada	E%sT	1940 Sep 29
+			-5:00	1:00	EDT	1942 Feb  9 2:00s
+			-5:00	Canada	E%sT
+Zone America/Rainy_River -6:18:16 -	LMT	1895
+			-6:00	Canada	C%sT	1940 Sep 29
+			-6:00	1:00	CDT	1942 Feb  9 2:00s
+			-6:00	Canada	C%sT
+Zone America/Atikokan	-6:06:28 -	LMT	1895
+			-6:00	Canada	C%sT	1940 Sep 29
+			-6:00	1:00	CDT	1942 Feb  9 2:00s
+			-6:00	Canada	C%sT	1945 Sep 30 2:00
+			-5:00	-	EST
+Rule	Winn	1916	only	-	Apr	23	0:00	1:00	D
+Rule	Winn	1916	only	-	Sep	17	0:00	0	S
+Rule	Winn	1918	only	-	Apr	14	2:00	1:00	D
+Rule	Winn	1918	only	-	Oct	31	2:00	0	S
+Rule	Winn	1937	only	-	May	16	2:00	1:00	D
+Rule	Winn	1937	only	-	Sep	26	2:00	0	S
+Rule	Winn	1942	only	-	Feb	 9	2:00	1:00	W # War
+Rule	Winn	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+Rule	Winn	1945	only	-	Sep	lastSun	2:00	0	S
+Rule	Winn	1946	only	-	May	12	2:00	1:00	D
+Rule	Winn	1946	only	-	Oct	13	2:00	0	S
+Rule	Winn	1947	1949	-	Apr	lastSun	2:00	1:00	D
+Rule	Winn	1947	1949	-	Sep	lastSun	2:00	0	S
+Rule	Winn	1950	only	-	May	 1	2:00	1:00	D
+Rule	Winn	1950	only	-	Sep	30	2:00	0	S
+Rule	Winn	1951	1960	-	Apr	lastSun	2:00	1:00	D
+Rule	Winn	1951	1958	-	Sep	lastSun	2:00	0	S
+Rule	Winn	1959	only	-	Oct	lastSun	2:00	0	S
+Rule	Winn	1960	only	-	Sep	lastSun	2:00	0	S
+Rule	Winn	1963	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Winn	1963	only	-	Sep	22	2:00	0	S
+Rule	Winn	1966	1986	-	Apr	lastSun	2:00s	1:00	D
+Rule	Winn	1966	2005	-	Oct	lastSun	2:00s	0	S
+Rule	Winn	1987	2005	-	Apr	Sun>=1	2:00s	1:00	D
+Zone America/Winnipeg	-6:28:36 -	LMT	1887 Jul 16
+			-6:00	Winn	C%sT	2006
+			-6:00	Canada	C%sT
+Rule	Regina	1918	only	-	Apr	14	2:00	1:00	D
+Rule	Regina	1918	only	-	Oct	31	2:00	0	S
+Rule	Regina	1930	1934	-	May	Sun>=1	0:00	1:00	D
+Rule	Regina	1930	1934	-	Oct	Sun>=1	0:00	0	S
+Rule	Regina	1937	1941	-	Apr	Sun>=8	0:00	1:00	D
+Rule	Regina	1937	only	-	Oct	Sun>=8	0:00	0	S
+Rule	Regina	1938	only	-	Oct	Sun>=1	0:00	0	S
+Rule	Regina	1939	1941	-	Oct	Sun>=8	0:00	0	S
+Rule	Regina	1942	only	-	Feb	 9	2:00	1:00	W # War
+Rule	Regina	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+Rule	Regina	1945	only	-	Sep	lastSun	2:00	0	S
+Rule	Regina	1946	only	-	Apr	Sun>=8	2:00	1:00	D
+Rule	Regina	1946	only	-	Oct	Sun>=8	2:00	0	S
+Rule	Regina	1947	1957	-	Apr	lastSun	2:00	1:00	D
+Rule	Regina	1947	1957	-	Sep	lastSun	2:00	0	S
+Rule	Regina	1959	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Regina	1959	only	-	Oct	lastSun	2:00	0	S
+Rule	Swift	1957	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Swift	1957	only	-	Oct	lastSun	2:00	0	S
+Rule	Swift	1959	1961	-	Apr	lastSun	2:00	1:00	D
+Rule	Swift	1959	only	-	Oct	lastSun	2:00	0	S
+Rule	Swift	1960	1961	-	Sep	lastSun	2:00	0	S
+Zone America/Regina	-6:58:36 -	LMT	1905 Sep
+			-7:00	Regina	M%sT	1960 Apr lastSun 2:00
+			-6:00	-	CST
+Zone America/Swift_Current -7:11:20 -	LMT	1905 Sep
+			-7:00	Canada	M%sT	1946 Apr lastSun 2:00
+			-7:00	Regina	M%sT	1950
+			-7:00	Swift	M%sT	1972 Apr lastSun 2:00
+			-6:00	-	CST
+Rule	Edm	1918	1919	-	Apr	Sun>=8	2:00	1:00	D
+Rule	Edm	1918	only	-	Oct	31	2:00	0	S
+Rule	Edm	1919	only	-	May	27	2:00	0	S
+Rule	Edm	1920	1923	-	Apr	lastSun	2:00	1:00	D
+Rule	Edm	1920	only	-	Oct	lastSun	2:00	0	S
+Rule	Edm	1921	1923	-	Sep	lastSun	2:00	0	S
+Rule	Edm	1942	only	-	Feb	 9	2:00	1:00	W # War
+Rule	Edm	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+Rule	Edm	1945	only	-	Sep	lastSun	2:00	0	S
+Rule	Edm	1947	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Edm	1947	only	-	Sep	lastSun	2:00	0	S
+Rule	Edm	1967	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Edm	1967	only	-	Oct	lastSun	2:00	0	S
+Rule	Edm	1969	only	-	Apr	lastSun	2:00	1:00	D
+Rule	Edm	1969	only	-	Oct	lastSun	2:00	0	S
+Rule	Edm	1972	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	Edm	1972	2006	-	Oct	lastSun	2:00	0	S
+Zone America/Edmonton	-7:33:52 -	LMT	1906 Sep
+			-7:00	Edm	M%sT	1987
+			-7:00	Canada	M%sT
+Rule	Vanc	1918	only	-	Apr	14	2:00	1:00	D
+Rule	Vanc	1918	only	-	Oct	31	2:00	0	S
+Rule	Vanc	1942	only	-	Feb	 9	2:00	1:00	W # War
+Rule	Vanc	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+Rule	Vanc	1945	only	-	Sep	30	2:00	0	S
+Rule	Vanc	1946	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	Vanc	1946	only	-	Oct	13	2:00	0	S
+Rule	Vanc	1947	1961	-	Sep	lastSun	2:00	0	S
+Rule	Vanc	1962	2006	-	Oct	lastSun	2:00	0	S
+Zone America/Vancouver	-8:12:28 -	LMT	1884
+			-8:00	Vanc	P%sT	1987
+			-8:00	Canada	P%sT
+Zone America/Dawson_Creek -8:00:56 -	LMT	1884
+			-8:00	Canada	P%sT	1947
+			-8:00	Vanc	P%sT	1972 Aug 30 2:00
+			-7:00	-	MST
+Rule	NT_YK	1918	only	-	Apr	14	2:00	1:00	D
+Rule	NT_YK	1918	only	-	Oct	27	2:00	0	S
+Rule	NT_YK	1919	only	-	May	25	2:00	1:00	D
+Rule	NT_YK	1919	only	-	Nov	 1	0:00	0	S
+Rule	NT_YK	1942	only	-	Feb	 9	2:00	1:00	W # War
+Rule	NT_YK	1945	only	-	Aug	14	23:00u	1:00	P # Peace
+Rule	NT_YK	1945	only	-	Sep	30	2:00	0	S
+Rule	NT_YK	1965	only	-	Apr	lastSun	0:00	2:00	DD
+Rule	NT_YK	1965	only	-	Oct	lastSun	2:00	0	S
+Rule	NT_YK	1980	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	NT_YK	1980	2006	-	Oct	lastSun	2:00	0	S
+Rule	NT_YK	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
+Zone America/Pangnirtung 0	-	zzz	1921 # trading post est.
+			-4:00	NT_YK	A%sT	1995 Apr Sun>=1 2:00
+			-5:00	Canada	E%sT	1999 Oct 31 2:00
+			-6:00	Canada	C%sT	2000 Oct 29 2:00
+			-5:00	Canada	E%sT
+Zone America/Iqaluit	0	-	zzz	1942 Aug # Frobisher Bay est.
+			-5:00	NT_YK	E%sT	1999 Oct 31 2:00
+			-6:00	Canada	C%sT	2000 Oct 29 2:00
+			-5:00	Canada	E%sT
+Rule	Resolute 2006	max	-	Nov	Sun>=1	2:00	0	ES
+Rule	Resolute 2007	max	-	Mar	Sun>=8	2:00	0	CD
+Zone America/Resolute	0	-	zzz	1947 Aug 31 # Resolute founded
+			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
+			-5:00	-	EST	2001 Apr  1 3:00
+			-6:00	Canada	C%sT	2006 Oct 29 2:00
+			-5:00	Resolute	%sT
+Zone America/Rankin_Inlet 0	-	zzz	1957 # Rankin Inlet founded
+			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
+			-5:00	-	EST	2001 Apr  1 3:00
+			-6:00	Canada	C%sT
+Zone America/Cambridge_Bay 0	-	zzz	1920 # trading post est.?
+			-7:00	NT_YK	M%sT	1999 Oct 31 2:00
+			-6:00	Canada	C%sT	2000 Oct 29 2:00
+			-5:00	-	EST	2000 Nov  5 0:00
+			-6:00	-	CST	2001 Apr  1 3:00
+			-7:00	Canada	M%sT
+Zone America/Yellowknife 0	-	zzz	1935 # Yellowknife founded?
+			-7:00	NT_YK	M%sT	1980
+			-7:00	Canada	M%sT
+Zone America/Inuvik	0	-	zzz	1953 # Inuvik founded
+			-8:00	NT_YK	P%sT	1979 Apr lastSun 2:00
+			-7:00	NT_YK	M%sT	1980
+			-7:00	Canada	M%sT
+Zone America/Whitehorse	-9:00:12 -	LMT	1900 Aug 20
+			-9:00	NT_YK	Y%sT	1966 Jul 1 2:00
+			-8:00	NT_YK	P%sT	1980
+			-8:00	Canada	P%sT
+Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
+			-9:00	NT_YK	Y%sT	1973 Oct 28 0:00
+			-8:00	NT_YK	P%sT	1980
+			-8:00	Canada	P%sT
+Rule	Mexico	1939	only	-	Feb	5	0:00	1:00	D
+Rule	Mexico	1939	only	-	Jun	25	0:00	0	S
+Rule	Mexico	1940	only	-	Dec	9	0:00	1:00	D
+Rule	Mexico	1941	only	-	Apr	1	0:00	0	S
+Rule	Mexico	1943	only	-	Dec	16	0:00	1:00	W # War
+Rule	Mexico	1944	only	-	May	1	0:00	0	S
+Rule	Mexico	1950	only	-	Feb	12	0:00	1:00	D
+Rule	Mexico	1950	only	-	Jul	30	0:00	0	S
+Rule	Mexico	1996	2000	-	Apr	Sun>=1	2:00	1:00	D
+Rule	Mexico	1996	2000	-	Oct	lastSun	2:00	0	S
+Rule	Mexico	2001	only	-	May	Sun>=1	2:00	1:00	D
+Rule	Mexico	2001	only	-	Sep	lastSun	2:00	0	S
+Rule	Mexico	2002	max	-	Apr	Sun>=1	2:00	1:00	D
+Rule	Mexico	2002	max	-	Oct	lastSun	2:00	0	S
+Zone America/Cancun	-5:47:04 -	LMT	1922 Jan  1  0:12:56
+			-6:00	-	CST	1981 Dec 23
+			-5:00	Mexico	E%sT	1998 Aug  2  2:00
+			-6:00	Mexico	C%sT
+Zone America/Merida	-5:58:28 -	LMT	1922 Jan  1  0:01:32
+			-6:00	-	CST	1981 Dec 23
+			-5:00	-	EST	1982 Dec  2
+			-6:00	Mexico	C%sT
+Zone America/Monterrey	-6:41:16 -	LMT	1921 Dec 31 23:18:44
+			-6:00	-	CST	1988
+			-6:00	US	C%sT	1989
+			-6:00	Mexico	C%sT
+Zone America/Mexico_City -6:36:36 -	LMT	1922 Jan  1  0:23:24
+			-7:00	-	MST	1927 Jun 10 23:00
+			-6:00	-	CST	1930 Nov 15
+			-7:00	-	MST	1931 May  1 23:00
+			-6:00	-	CST	1931 Oct
+			-7:00	-	MST	1932 Apr  1
+			-6:00	Mexico	C%sT	2001 Sep 30 02:00
+			-6:00	-	CST	2002 Feb 20
+			-6:00	Mexico	C%sT
+Zone America/Chihuahua	-7:04:20 -	LMT	1921 Dec 31 23:55:40
+			-7:00	-	MST	1927 Jun 10 23:00
+			-6:00	-	CST	1930 Nov 15
+			-7:00	-	MST	1931 May  1 23:00
+			-6:00	-	CST	1931 Oct
+			-7:00	-	MST	1932 Apr  1
+			-6:00	-	CST	1996
+			-6:00	Mexico	C%sT	1998
+			-6:00	-	CST	1998 Apr Sun>=1 3:00
+			-7:00	Mexico	M%sT
+Zone America/Hermosillo	-7:23:52 -	LMT	1921 Dec 31 23:36:08
+			-7:00	-	MST	1927 Jun 10 23:00
+			-6:00	-	CST	1930 Nov 15
+			-7:00	-	MST	1931 May  1 23:00
+			-6:00	-	CST	1931 Oct
+			-7:00	-	MST	1932 Apr  1
+			-6:00	-	CST	1942 Apr 24
+			-7:00	-	MST	1949 Jan 14
+			-8:00	-	PST	1970
+			-7:00	Mexico	M%sT	1999
+			-7:00	-	MST
+Zone America/Mazatlan	-7:05:40 -	LMT	1921 Dec 31 23:54:20
+			-7:00	-	MST	1927 Jun 10 23:00
+			-6:00	-	CST	1930 Nov 15
+			-7:00	-	MST	1931 May  1 23:00
+			-6:00	-	CST	1931 Oct
+			-7:00	-	MST	1932 Apr  1
+			-6:00	-	CST	1942 Apr 24
+			-7:00	-	MST	1949 Jan 14
+			-8:00	-	PST	1970
+			-7:00	Mexico	M%sT
+Zone America/Tijuana	-7:48:04 -	LMT	1922 Jan  1  0:11:56
+			-7:00	-	MST	1924
+			-8:00	-	PST	1927 Jun 10 23:00
+			-7:00	-	MST	1930 Nov 15
+			-8:00	-	PST	1931 Apr  1
+			-8:00	1:00	PDT	1931 Sep 30
+			-8:00	-	PST	1942 Apr 24
+			-8:00	1:00	PWT	1945 Aug 14 23:00u
+			-8:00	1:00	PPT	1945 Nov 12 # Peace
+			-8:00	-	PST	1948 Apr  5
+			-8:00	1:00	PDT	1949 Jan 14
+			-8:00	-	PST	1954
+			-8:00	CA	P%sT	1961
+			-8:00	-	PST	1976
+			-8:00	US	P%sT	1996
+			-8:00	Mexico	P%sT	2001
+			-8:00	US	P%sT	2002 Feb 20
+			-8:00	Mexico	P%sT
+Zone America/Anguilla	-4:12:16 -	LMT	1912 Mar 2
+			-4:00	-	AST
+Zone	America/Antigua	-4:07:12 -	LMT	1912 Mar 2
+			-5:00	-	EST	1951
+			-4:00	-	AST
+Rule	Bahamas	1964	1975	-	Oct	lastSun	2:00	0	S
+Rule	Bahamas	1964	1975	-	Apr	lastSun	2:00	1:00	D
+Zone	America/Nassau	-5:09:24 -	LMT	1912 Mar 2
+			-5:00	Bahamas	E%sT	1976
+			-5:00	US	E%sT
+Rule	Barb	1977	only	-	Jun	12	2:00	1:00	D
+Rule	Barb	1977	1978	-	Oct	Sun>=1	2:00	0	S
+Rule	Barb	1978	1980	-	Apr	Sun>=15	2:00	1:00	D
+Rule	Barb	1979	only	-	Sep	30	2:00	0	S
+Rule	Barb	1980	only	-	Sep	25	2:00	0	S
+Zone America/Barbados	-3:58:28 -	LMT	1924		# Bridgetown
+			-3:58:28 -	BMT	1932	  # Bridgetown Mean Time
+			-4:00	Barb	A%sT
+Rule	Belize	1918	1942	-	Oct	Sun>=2	0:00	0:30	HD
+Rule	Belize	1919	1943	-	Feb	Sun>=9	0:00	0	S
+Rule	Belize	1973	only	-	Dec	 5	0:00	1:00	D
+Rule	Belize	1974	only	-	Feb	 9	0:00	0	S
+Rule	Belize	1982	only	-	Dec	18	0:00	1:00	D
+Rule	Belize	1983	only	-	Feb	12	0:00	0	S
+Zone	America/Belize	-5:52:48 -	LMT	1912 Apr
+			-6:00	Belize	C%sT
+Zone Atlantic/Bermuda	-4:19:04 -	LMT	1930 Jan  1 2:00    # Hamilton
+			-4:00	-	AST	1974 Apr 28 2:00
+			-4:00	Bahamas	A%sT	1976
+			-4:00	US	A%sT
+Zone	America/Cayman	-5:25:32 -	LMT	1890		# Georgetown
+			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
+			-5:00	-	EST
+Rule	CR	1979	1980	-	Feb	lastSun	0:00	1:00	D
+Rule	CR	1979	1980	-	Jun	Sun>=1	0:00	0	S
+Rule	CR	1991	1992	-	Jan	Sat>=15	0:00	1:00	D
+Rule	CR	1991	only	-	Jul	 1	0:00	0	S
+Rule	CR	1992	only	-	Mar	15	0:00	0	S
+Zone America/Costa_Rica	-5:36:20 -	LMT	1890		# San Jose
+			-5:36:20 -	SJMT	1921 Jan 15 # San Jose Mean Time
+			-6:00	CR	C%sT
+Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
+Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
+Rule	Cuba	1940	1942	-	Jun	Sun>=1	0:00	1:00	D
+Rule	Cuba	1940	1942	-	Sep	Sun>=1	0:00	0	S
+Rule	Cuba	1945	1946	-	Jun	Sun>=1	0:00	1:00	D
+Rule	Cuba	1945	1946	-	Sep	Sun>=1	0:00	0	S
+Rule	Cuba	1965	only	-	Jun	1	0:00	1:00	D
+Rule	Cuba	1965	only	-	Sep	30	0:00	0	S
+Rule	Cuba	1966	only	-	May	29	0:00	1:00	D
+Rule	Cuba	1966	only	-	Oct	2	0:00	0	S
+Rule	Cuba	1967	only	-	Apr	8	0:00	1:00	D
+Rule	Cuba	1967	1968	-	Sep	Sun>=8	0:00	0	S
+Rule	Cuba	1968	only	-	Apr	14	0:00	1:00	D
+Rule	Cuba	1969	1977	-	Apr	lastSun	0:00	1:00	D
+Rule	Cuba	1969	1971	-	Oct	lastSun	0:00	0	S
+Rule	Cuba	1972	1974	-	Oct	8	0:00	0	S
+Rule	Cuba	1975	1977	-	Oct	lastSun	0:00	0	S
+Rule	Cuba	1978	only	-	May	7	0:00	1:00	D
+Rule	Cuba	1978	1990	-	Oct	Sun>=8	0:00	0	S
+Rule	Cuba	1979	1980	-	Mar	Sun>=15	0:00	1:00	D
+Rule	Cuba	1981	1985	-	May	Sun>=5	0:00	1:00	D
+Rule	Cuba	1986	1989	-	Mar	Sun>=14	0:00	1:00	D
+Rule	Cuba	1990	1997	-	Apr	Sun>=1	0:00	1:00	D
+Rule	Cuba	1991	1995	-	Oct	Sun>=8	0:00s	0	S
+Rule	Cuba	1996	only	-	Oct	 6	0:00s	0	S
+Rule	Cuba	1997	only	-	Oct	12	0:00s	0	S
+Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
+Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
+Rule	Cuba	2000	2004	-	Apr	Sun>=1	0:00s	1:00	D
+Rule	Cuba	2006	max	-	Oct	lastSun	0:00s	0	S
+Rule	Cuba	2007	only	-	Mar	Sun>=8	0:00s	1:00	D
+Rule	Cuba	2008	only	-	Mar	Sun>=15	0:00s	1:00	D
+Rule	Cuba	2009	max	-	Mar	Sun>=8	0:00s	1:00	D
+Zone	America/Havana	-5:29:28 -	LMT	1890
+			-5:29:36 -	HMT	1925 Jul 19 12:00 # Havana MT
+			-5:00	Cuba	C%sT
+Zone America/Dominica	-4:05:36 -	LMT	1911 Jul 1 0:01		# Roseau
+			-4:00	-	AST
+Rule	DR	1966	only	-	Oct	30	0:00	1:00	D
+Rule	DR	1967	only	-	Feb	28	0:00	0	S
+Rule	DR	1969	1973	-	Oct	lastSun	0:00	0:30	HD
+Rule	DR	1970	only	-	Feb	21	0:00	0	S
+Rule	DR	1971	only	-	Jan	20	0:00	0	S
+Rule	DR	1972	1974	-	Jan	21	0:00	0	S
+Zone America/Santo_Domingo -4:39:36 -	LMT	1890
+			-4:40	-	SDMT	1933 Apr  1 12:00 # S. Dom. MT
+			-5:00	DR	E%sT	1974 Oct 27
+			-4:00	-	AST	2000 Oct 29 02:00
+			-5:00	US	E%sT	2000 Dec  3 01:00
+			-4:00	-	AST
+Rule	Salv	1987	1988	-	May	Sun>=1	0:00	1:00	D
+Rule	Salv	1987	1988	-	Sep	lastSun	0:00	0	S
+Zone America/El_Salvador -5:56:48 -	LMT	1921		# San Salvador
+			-6:00	Salv	C%sT
+Zone	America/Grenada	-4:07:00 -	LMT	1911 Jul	# St George's
+			-4:00	-	AST
+Zone America/Guadeloupe	-4:06:08 -	LMT	1911 Jun 8	# Pointe a Pitre
+			-4:00	-	AST
+Link America/Guadeloupe	America/St_Barthelemy
+Link America/Guadeloupe	America/Marigot
+Rule	Guat	1973	only	-	Nov	25	0:00	1:00	D
+Rule	Guat	1974	only	-	Feb	24	0:00	0	S
+Rule	Guat	1983	only	-	May	21	0:00	1:00	D
+Rule	Guat	1983	only	-	Sep	22	0:00	0	S
+Rule	Guat	1991	only	-	Mar	23	0:00	1:00	D
+Rule	Guat	1991	only	-	Sep	 7	0:00	0	S
+Rule	Guat	2006	only	-	Apr	30	0:00	1:00	D
+Rule	Guat	2006	only	-	Oct	 1	0:00	0	S
+Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
+			-6:00	Guat	C%sT
+Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
+Rule	Haiti	1984	1987	-	Apr	lastSun	0:00	1:00	D
+Rule	Haiti	1983	1987	-	Oct	lastSun	0:00	0	S
+Rule	Haiti	1988	1997	-	Apr	Sun>=1	1:00s	1:00	D
+Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
+Rule	Haiti	2005	2006	-	Apr	Sun>=1	0:00	1:00	D
+Rule	Haiti	2005	2006	-	Oct	lastSun	0:00	0	S
+Zone America/Port-au-Prince -4:49:20 -	LMT	1890
+			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
+			-5:00	Haiti	E%sT
+Rule	Hond	1987	1988	-	May	Sun>=1	0:00	1:00	D
+Rule	Hond	1987	1988	-	Sep	lastSun	0:00	0	S
+Rule	Hond	2006	only	-	May	Sun>=1	0:00	1:00	D
+Rule	Hond	2006	only	-	Aug	Mon>=1	0:00	0	S
+Zone America/Tegucigalpa -5:48:52 -	LMT	1921 Apr
+			-6:00	Hond	C%sT
+Zone	America/Jamaica	-5:07:12 -	LMT	1890		# Kingston
+			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
+			-5:00	-	EST	1974 Apr 28 2:00
+			-5:00	US	E%sT	1984
+			-5:00	-	EST
+Zone America/Martinique	-4:04:20 -      LMT	1890		# Fort-de-France
+			-4:04:20 -	FFMT	1911 May     # Fort-de-France MT
+			-4:00	-	AST	1980 Apr  6
+			-4:00	1:00	ADT	1980 Sep 28
+			-4:00	-	AST
+Zone America/Montserrat	-4:08:52 -	LMT	1911 Jul 1 0:01   # Cork Hill
+			-4:00	-	AST
+Rule	Nic	1979	1980	-	Mar	Sun>=16	0:00	1:00	D
+Rule	Nic	1979	1980	-	Jun	Mon>=23	0:00	0	S
+Rule	Nic	2005	only	-	Apr	10	0:00	1:00	D
+Rule	Nic	2005	only	-	Oct	Sun>=1	0:00	0	S
+Rule	Nic	2006	only	-	Apr	30	2:00	1:00	D
+Rule	Nic	2006	only	-	Oct	Sun>=1	1:00	0	S
+Zone	America/Managua	-5:45:08 -	LMT	1890
+			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
+			-6:00	-	CST	1973 May
+			-5:00	-	EST	1975 Feb 16
+			-6:00	Nic	C%sT	1992 Jan  1 4:00
+			-5:00	-	EST	1992 Sep 24
+			-6:00	-	CST	1993
+			-5:00	-	EST	1997
+			-6:00	Nic	C%sT
+Zone	America/Panama	-5:18:08 -	LMT	1890
+			-5:19:36 -	CMT	1908 Apr 22   # Colon Mean Time
+			-5:00	-	EST
+Zone America/Puerto_Rico -4:24:25 -	LMT	1899 Mar 28 12:00    # San Juan
+			-4:00	-	AST	1942 May  3
+			-4:00	US	A%sT	1946
+			-4:00	-	AST
+Zone America/St_Kitts	-4:10:52 -	LMT	1912 Mar 2	# Basseterre
+			-4:00	-	AST
+Zone America/St_Lucia	-4:04:00 -	LMT	1890		# Castries
+			-4:04:00 -	CMT	1912	    # Castries Mean Time
+			-4:00	-	AST
+Zone America/Miquelon	-3:44:40 -	LMT	1911 May 15	# St Pierre
+			-4:00	-	AST	1980 May
+			-3:00	-	PMST	1987 # Pierre & Miquelon Time
+			-3:00	Canada	PM%sT
+Zone America/St_Vincent	-4:04:56 -	LMT	1890		# Kingstown
+			-4:04:56 -	KMT	1912	   # Kingstown Mean Time
+			-4:00	-	AST
+Rule	TC	1979	1986	-	Apr	lastSun	2:00	1:00	D
+Rule	TC	1979	2006	-	Oct	lastSun	2:00	0	S
+Rule	TC	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
+Rule	TC	2007	max	-	Mar	Sun>=8	2:00	1:00	D
+Rule	TC	2007	max	-	Nov	Sun>=1	2:00	0	S
+Zone America/Grand_Turk	-4:44:32 -	LMT	1890
+			-5:07:12 -	KMT	1912 Feb    # Kingston Mean Time
+			-5:00	TC	E%sT
+Zone America/Tortola	-4:18:28 -	LMT	1911 Jul    # Road Town
+			-4:00	-	AST
+Zone America/St_Thomas	-4:19:44 -	LMT	1911 Jul    # Charlotte Amalie
+			-4:00	-	AST
Index: trunk/web/dojo/dojox/date/zoneinfo/asia
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/asia	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/asia	(revision 9)
@@ -0,0 +1,720 @@
+Rule	EUAsia	1981	max	-	Mar	lastSun	 1:00u	1:00	S
+Rule	EUAsia	1979	1995	-	Sep	lastSun	 1:00u	0	-
+Rule	EUAsia	1996	max	-	Oct	lastSun	 1:00u	0	-
+Rule E-EurAsia	1981	max	-	Mar	lastSun	 0:00	1:00	S
+Rule E-EurAsia	1979	1995	-	Sep	lastSun	 0:00	0	-
+Rule E-EurAsia	1996	max	-	Oct	lastSun	 0:00	0	-
+Rule RussiaAsia	1981	1984	-	Apr	1	 0:00	1:00	S
+Rule RussiaAsia	1981	1983	-	Oct	1	 0:00	0	-
+Rule RussiaAsia	1984	1991	-	Sep	lastSun	 2:00s	0	-
+Rule RussiaAsia	1985	1991	-	Mar	lastSun	 2:00s	1:00	S
+Rule RussiaAsia	1992	only	-	Mar	lastSat	23:00	1:00	S
+Rule RussiaAsia	1992	only	-	Sep	lastSat	23:00	0	-
+Rule RussiaAsia	1993	max	-	Mar	lastSun	 2:00s	1:00	S
+Rule RussiaAsia	1993	1995	-	Sep	lastSun	 2:00s	0	-
+Rule RussiaAsia	1996	max	-	Oct	lastSun	 2:00s	0	-
+Zone	Asia/Kabul	4:36:48 -	LMT	1890
+			4:00	-	AFT	1945
+			4:30	-	AFT
+Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
+			3:00	-	YERT	1957 Mar    # Yerevan Time
+			4:00 RussiaAsia YER%sT	1991 Mar 31 2:00s
+			3:00	1:00	YERST	1991 Sep 23 # independence
+			3:00 RussiaAsia	AM%sT	1995 Sep 24 2:00s
+			4:00	-	AMT	1997
+			4:00 RussiaAsia	AM%sT
+Rule	Azer	1997	max	-	Mar	lastSun	 4:00	1:00	S
+Rule	Azer	1997	max	-	Oct	lastSun	 5:00	0	-
+Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
+			3:00	-	BAKT	1957 Mar    # Baku Time
+			4:00 RussiaAsia BAK%sT	1991 Mar 31 2:00s
+			3:00	1:00	BAKST	1991 Aug 30 # independence
+			3:00 RussiaAsia	AZ%sT	1992 Sep lastSat 23:00
+			4:00	-	AZT	1996 # Azerbaijan time
+			4:00	EUAsia	AZ%sT	1997
+			4:00	Azer	AZ%sT
+Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
+			4:00	-	GST	1972 Jun
+			3:00	-	AST
+Zone	Asia/Dhaka	6:01:40 -	LMT	1890
+			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
+			6:30	-	BURT	1942 May 15 # Burma Time
+			5:30	-	IST	1942 Sep
+			6:30	-	BURT	1951 Sep 30
+			6:00	-	DACT	1971 Mar 26 # Dacca Time
+			6:00	-	BDT	2009 Jun 19 23:00 # Bangladesh Time
+			6:00	1:00	BDST	2010
+			6:00	-	BDT
+Zone	Asia/Thimphu	5:58:36 -	LMT	1947 Aug 15 # or Thimbu
+			5:30	-	IST	1987 Oct
+			6:00	-	BTT	# Bhutan Time
+Zone	Indian/Chagos	4:49:40	-	LMT	1907
+			5:00	-	IOT	1996 # BIOT Time
+			6:00	-	IOT
+Zone	Asia/Brunei	7:39:40 -	LMT	1926 Mar   # Bandar Seri Begawan
+			7:30	-	BNT	1933
+			8:00	-	BNT
+Zone	Asia/Rangoon	6:24:40 -	LMT	1880		# or Yangon
+			6:24:36	-	RMT	1920	   # Rangoon Mean Time?
+			6:30	-	BURT	1942 May   # Burma Time
+			9:00	-	JST	1945 May 3
+			6:30	-	MMT		   # Myanmar Time
+Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
+			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
+			7:00	-	ICT	1912 May
+			8:00	-	ICT	1931 May
+			7:00	-	ICT
+Rule	Shang	1940	only	-	Jun	 3	0:00	1:00	D
+Rule	Shang	1940	1941	-	Oct	 1	0:00	0	S
+Rule	Shang	1941	only	-	Mar	16	0:00	1:00	D
+Rule	PRC	1986	only	-	May	 4	0:00	1:00	D
+Rule	PRC	1986	1991	-	Sep	Sun>=11	0:00	0	S
+Rule	PRC	1987	1991	-	Apr	Sun>=10	0:00	1:00	D
+Zone	Asia/Harbin	8:26:44	-	LMT	1928 # or Haerbin
+			8:30	-	CHAT	1932 Mar # Changbai Time
+			8:00	-	CST	1940
+			9:00	-	CHAT	1966 May
+			8:30	-	CHAT	1980 May
+			8:00	PRC	C%sT
+Zone	Asia/Shanghai	8:05:52	-	LMT	1928
+			8:00	Shang	C%sT	1949
+			8:00	PRC	C%sT
+Zone	Asia/Chongqing	7:06:20	-	LMT	1928 # or Chungking
+			7:00	-	LONT	1980 May # Long-shu Time
+			8:00	PRC	C%sT
+Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
+			6:00	-	URUT	1980 May # Urumqi Time
+			8:00	PRC	C%sT
+Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
+			5:30	-	KAST	1940	 # Kashgar Time
+			5:00	-	KAST	1980 May
+			8:00	PRC	C%sT
+Rule	HK	1946	only	-	Apr	20	3:30	1:00	S
+Rule	HK	1946	only	-	Dec	1	3:30	0	-
+Rule	HK	1947	only	-	Apr	13	3:30	1:00	S
+Rule	HK	1947	only	-	Dec	30	3:30	0	-
+Rule	HK	1948	only	-	May	2	3:30	1:00	S
+Rule	HK	1948	1952	-	Oct	lastSun	3:30	0	-
+Rule	HK	1949	1953	-	Apr	Sun>=1	3:30	1:00	S
+Rule	HK	1953	only	-	Nov	1	3:30	0	-
+Rule	HK	1954	1964	-	Mar	Sun>=18	3:30	1:00	S
+Rule	HK	1954	only	-	Oct	31	3:30	0	-
+Rule	HK	1955	1964	-	Nov	Sun>=1	3:30	0	-
+Rule	HK	1965	1977	-	Apr	Sun>=16	3:30	1:00	S
+Rule	HK	1965	1977	-	Oct	Sun>=16	3:30	0	-
+Rule	HK	1979	1980	-	May	Sun>=8	3:30	1:00	S
+Rule	HK	1979	1980	-	Oct	Sun>=16	3:30	0	-
+Zone	Asia/Hong_Kong	7:36:36 -	LMT	1904 Oct 30
+			8:00	HK	HK%sT
+Rule	Taiwan	1945	1951	-	May	1	0:00	1:00	D
+Rule	Taiwan	1945	1951	-	Oct	1	0:00	0	S
+Rule	Taiwan	1952	only	-	Mar	1	0:00	1:00	D
+Rule	Taiwan	1952	1954	-	Nov	1	0:00	0	S
+Rule	Taiwan	1953	1959	-	Apr	1	0:00	1:00	D
+Rule	Taiwan	1955	1961	-	Oct	1	0:00	0	S
+Rule	Taiwan	1960	1961	-	Jun	1	0:00	1:00	D
+Rule	Taiwan	1974	1975	-	Apr	1	0:00	1:00	D
+Rule	Taiwan	1974	1975	-	Oct	1	0:00	0	S
+Rule	Taiwan	1980	only	-	Jun	30	0:00	1:00	D
+Rule	Taiwan	1980	only	-	Sep	30	0:00	0	S
+Zone	Asia/Taipei	8:06:00 -	LMT	1896 # or Taibei or T'ai-pei
+			8:00	Taiwan	C%sT
+Rule	Macau	1961	1962	-	Mar	Sun>=16	3:30	1:00	S
+Rule	Macau	1961	1964	-	Nov	Sun>=1	3:30	0	-
+Rule	Macau	1963	only	-	Mar	Sun>=16	0:00	1:00	S
+Rule	Macau	1964	only	-	Mar	Sun>=16	3:30	1:00	S
+Rule	Macau	1965	only	-	Mar	Sun>=16	0:00	1:00	S
+Rule	Macau	1965	only	-	Oct	31	0:00	0	-
+Rule	Macau	1966	1971	-	Apr	Sun>=16	3:30	1:00	S
+Rule	Macau	1966	1971	-	Oct	Sun>=16	3:30	0	-
+Rule	Macau	1972	1974	-	Apr	Sun>=15	0:00	1:00	S
+Rule	Macau	1972	1973	-	Oct	Sun>=15	0:00	0	-
+Rule	Macau	1974	1977	-	Oct	Sun>=15	3:30	0	-
+Rule	Macau	1975	1977	-	Apr	Sun>=15	3:30	1:00	S
+Rule	Macau	1978	1980	-	Apr	Sun>=15	0:00	1:00	S
+Rule	Macau	1978	1980	-	Oct	Sun>=15	0:00	0	-
+Zone	Asia/Macau	7:34:20 -	LMT	1912
+			8:00	Macau	MO%sT	1999 Dec 20 # return to China
+			8:00	PRC	C%sT
+Rule	Cyprus	1975	only	-	Apr	13	0:00	1:00	S
+Rule	Cyprus	1975	only	-	Oct	12	0:00	0	-
+Rule	Cyprus	1976	only	-	May	15	0:00	1:00	S
+Rule	Cyprus	1976	only	-	Oct	11	0:00	0	-
+Rule	Cyprus	1977	1980	-	Apr	Sun>=1	0:00	1:00	S
+Rule	Cyprus	1977	only	-	Sep	25	0:00	0	-
+Rule	Cyprus	1978	only	-	Oct	2	0:00	0	-
+Rule	Cyprus	1979	1997	-	Sep	lastSun	0:00	0	-
+Rule	Cyprus	1981	1998	-	Mar	lastSun	0:00	1:00	S
+Zone	Asia/Nicosia	2:13:28 -	LMT	1921 Nov 14
+			2:00	Cyprus	EE%sT	1998 Sep
+			2:00	EUAsia	EE%sT
+Link	Asia/Nicosia	Europe/Nicosia
+Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
+			2:59:16	-	TBMT	1924 May  2 # Tbilisi Mean Time
+			3:00	-	TBIT	1957 Mar    # Tbilisi Time
+			4:00 RussiaAsia TBI%sT	1991 Mar 31 2:00s
+			3:00	1:00	TBIST	1991 Apr  9 # independence
+			3:00 RussiaAsia GE%sT	1992 # Georgia Time
+			3:00 E-EurAsia	GE%sT	1994 Sep lastSun
+			4:00 E-EurAsia	GE%sT	1996 Oct lastSun
+			4:00	1:00	GEST	1997 Mar lastSun
+			4:00 E-EurAsia	GE%sT	2004 Jun 27
+			3:00 RussiaAsia	GE%sT	2005 Mar lastSun 2:00
+			4:00	-	GET
+Zone	Asia/Dili	8:22:20 -	LMT	1912
+			8:00	-	TLT	1942 Feb 21 23:00 # E Timor Time
+			9:00	-	JST	1945 Sep 23
+			9:00	-	TLT	1976 May  3
+			8:00	-	CIT	2000 Sep 17 00:00
+			9:00	-	TLT
+Zone	Asia/Kolkata	5:53:28 -	LMT	1880	# Kolkata
+			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
+			6:30	-	BURT	1942 May 15 # Burma Time
+			5:30	-	IST	1942 Sep
+			5:30	1:00	IST	1945 Oct 15
+			5:30	-	IST
+Zone Asia/Jakarta	7:07:12 -	LMT	1867 Aug 10
+			7:07:12	-	JMT	1923 Dec 31 23:47:12 # Jakarta
+			7:20	-	JAVT	1932 Nov	 # Java Time
+			7:30	-	WIT	1942 Mar 23
+			9:00	-	JST	1945 Sep 23
+			7:30	-	WIT	1948 May
+			8:00	-	WIT	1950 May
+			7:30	-	WIT	1964
+			7:00	-	WIT
+Zone Asia/Pontianak	7:17:20	-	LMT	1908 May
+			7:17:20	-	PMT	1932 Nov    # Pontianak MT
+			7:30	-	WIT	1942 Jan 29
+			9:00	-	JST	1945 Sep 23
+			7:30	-	WIT	1948 May
+			8:00	-	WIT	1950 May
+			7:30	-	WIT	1964
+			8:00	-	CIT	1988 Jan  1
+			7:00	-	WIT
+Zone Asia/Makassar	7:57:36 -	LMT	1920
+			7:57:36	-	MMT	1932 Nov    # Macassar MT
+			8:00	-	CIT	1942 Feb  9
+			9:00	-	JST	1945 Sep 23
+			8:00	-	CIT
+Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
+			9:00	-	EIT	1944 Sep  1
+			9:30	-	CST	1964
+			9:00	-	EIT
+Rule	Iran	1978	1980	-	Mar	21	0:00	1:00	D
+Rule	Iran	1978	only	-	Oct	21	0:00	0	S
+Rule	Iran	1979	only	-	Sep	19	0:00	0	S
+Rule	Iran	1980	only	-	Sep	23	0:00	0	S
+Rule	Iran	1991	only	-	May	 3	0:00	1:00	D
+Rule	Iran	1992	1995	-	Mar	22	0:00	1:00	D
+Rule	Iran	1991	1995	-	Sep	22	0:00	0	S
+Rule	Iran	1996	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	1996	only	-	Sep	21	0:00	0	S
+Rule	Iran	1997	1999	-	Mar	22	0:00	1:00	D
+Rule	Iran	1997	1999	-	Sep	22	0:00	0	S
+Rule	Iran	2000	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	2000	only	-	Sep	21	0:00	0	S
+Rule	Iran	2001	2003	-	Mar	22	0:00	1:00	D
+Rule	Iran	2001	2003	-	Sep	22	0:00	0	S
+Rule	Iran	2004	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	2004	only	-	Sep	21	0:00	0	S
+Rule	Iran	2005	only	-	Mar	22	0:00	1:00	D
+Rule	Iran	2005	only	-	Sep	22	0:00	0	S
+Rule	Iran	2008	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	2008	only	-	Sep	21	0:00	0	S
+Rule	Iran	2009	2011	-	Mar	22	0:00	1:00	D
+Rule	Iran	2009	2011	-	Sep	22	0:00	0	S
+Rule	Iran	2012	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	2012	only	-	Sep	21	0:00	0	S
+Rule	Iran	2013	2015	-	Mar	22	0:00	1:00	D
+Rule	Iran	2013	2015	-	Sep	22	0:00	0	S
+Rule	Iran	2016	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	2016	only	-	Sep	21	0:00	0	S
+Rule	Iran	2017	2019	-	Mar	22	0:00	1:00	D
+Rule	Iran	2017	2019	-	Sep	22	0:00	0	S
+Rule	Iran	2020	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	2020	only	-	Sep	21	0:00	0	S
+Rule	Iran	2021	2023	-	Mar	22	0:00	1:00	D
+Rule	Iran	2021	2023	-	Sep	22	0:00	0	S
+Rule	Iran	2024	only	-	Mar	21	0:00	1:00	D
+Rule	Iran	2024	only	-	Sep	21	0:00	0	S
+Rule	Iran	2025	2027	-	Mar	22	0:00	1:00	D
+Rule	Iran	2025	2027	-	Sep	22	0:00	0	S
+Rule	Iran	2028	2029	-	Mar	21	0:00	1:00	D
+Rule	Iran	2028	2029	-	Sep	21	0:00	0	S
+Rule	Iran	2030	2031	-	Mar	22	0:00	1:00	D
+Rule	Iran	2030	2031	-	Sep	22	0:00	0	S
+Rule	Iran	2032	2033	-	Mar	21	0:00	1:00	D
+Rule	Iran	2032	2033	-	Sep	21	0:00	0	S
+Rule	Iran	2034	2035	-	Mar	22	0:00	1:00	D
+Rule	Iran	2034	2035	-	Sep	22	0:00	0	S
+Rule	Iran	2036	2037	-	Mar	21	0:00	1:00	D
+Rule	Iran	2036	2037	-	Sep	21	0:00	0	S
+Zone	Asia/Tehran	3:25:44	-	LMT	1916
+			3:25:44	-	TMT	1946	# Tehran Mean Time
+			3:30	-	IRST	1977 Nov
+			4:00	Iran	IR%sT	1979
+			3:30	Iran	IR%sT
+Rule	Iraq	1982	only	-	May	1	0:00	1:00	D
+Rule	Iraq	1982	1984	-	Oct	1	0:00	0	S
+Rule	Iraq	1983	only	-	Mar	31	0:00	1:00	D
+Rule	Iraq	1984	1985	-	Apr	1	0:00	1:00	D
+Rule	Iraq	1985	1990	-	Sep	lastSun	1:00s	0	S
+Rule	Iraq	1986	1990	-	Mar	lastSun	1:00s	1:00	D
+Rule	Iraq	1991	2007	-	Apr	 1	3:00s	1:00	D
+Rule	Iraq	1991	2007	-	Oct	 1	3:00s	0	S
+Zone	Asia/Baghdad	2:57:40	-	LMT	1890
+			2:57:36	-	BMT	1918	    # Baghdad Mean Time?
+			3:00	-	AST	1982 May
+			3:00	Iraq	A%sT
+Rule	Zion	1940	only	-	Jun	 1	0:00	1:00	D
+Rule	Zion	1942	1944	-	Nov	 1	0:00	0	S
+Rule	Zion	1943	only	-	Apr	 1	2:00	1:00	D
+Rule	Zion	1944	only	-	Apr	 1	0:00	1:00	D
+Rule	Zion	1945	only	-	Apr	16	0:00	1:00	D
+Rule	Zion	1945	only	-	Nov	 1	2:00	0	S
+Rule	Zion	1946	only	-	Apr	16	2:00	1:00	D
+Rule	Zion	1946	only	-	Nov	 1	0:00	0	S
+Rule	Zion	1948	only	-	May	23	0:00	2:00	DD
+Rule	Zion	1948	only	-	Sep	 1	0:00	1:00	D
+Rule	Zion	1948	1949	-	Nov	 1	2:00	0	S
+Rule	Zion	1949	only	-	May	 1	0:00	1:00	D
+Rule	Zion	1950	only	-	Apr	16	0:00	1:00	D
+Rule	Zion	1950	only	-	Sep	15	3:00	0	S
+Rule	Zion	1951	only	-	Apr	 1	0:00	1:00	D
+Rule	Zion	1951	only	-	Nov	11	3:00	0	S
+Rule	Zion	1952	only	-	Apr	20	2:00	1:00	D
+Rule	Zion	1952	only	-	Oct	19	3:00	0	S
+Rule	Zion	1953	only	-	Apr	12	2:00	1:00	D
+Rule	Zion	1953	only	-	Sep	13	3:00	0	S
+Rule	Zion	1954	only	-	Jun	13	0:00	1:00	D
+Rule	Zion	1954	only	-	Sep	12	0:00	0	S
+Rule	Zion	1955	only	-	Jun	11	2:00	1:00	D
+Rule	Zion	1955	only	-	Sep	11	0:00	0	S
+Rule	Zion	1956	only	-	Jun	 3	0:00	1:00	D
+Rule	Zion	1956	only	-	Sep	30	3:00	0	S
+Rule	Zion	1957	only	-	Apr	29	2:00	1:00	D
+Rule	Zion	1957	only	-	Sep	22	0:00	0	S
+Rule	Zion	1974	only	-	Jul	 7	0:00	1:00	D
+Rule	Zion	1974	only	-	Oct	13	0:00	0	S
+Rule	Zion	1975	only	-	Apr	20	0:00	1:00	D
+Rule	Zion	1975	only	-	Aug	31	0:00	0	S
+Rule	Zion	1985	only	-	Apr	14	0:00	1:00	D
+Rule	Zion	1985	only	-	Sep	15	0:00	0	S
+Rule	Zion	1986	only	-	May	18	0:00	1:00	D
+Rule	Zion	1986	only	-	Sep	 7	0:00	0	S
+Rule	Zion	1987	only	-	Apr	15	0:00	1:00	D
+Rule	Zion	1987	only	-	Sep	13	0:00	0	S
+Rule	Zion	1988	only	-	Apr	 9	0:00	1:00	D
+Rule	Zion	1988	only	-	Sep	 3	0:00	0	S
+Rule	Zion	1989	only	-	Apr	30	0:00	1:00	D
+Rule	Zion	1989	only	-	Sep	 3	0:00	0	S
+Rule	Zion	1990	only	-	Mar	25	0:00	1:00	D
+Rule	Zion	1990	only	-	Aug	26	0:00	0	S
+Rule	Zion	1991	only	-	Mar	24	0:00	1:00	D
+Rule	Zion	1991	only	-	Sep	 1	0:00	0	S
+Rule	Zion	1992	only	-	Mar	29	0:00	1:00	D
+Rule	Zion	1992	only	-	Sep	 6	0:00	0	S
+Rule	Zion	1993	only	-	Apr	 2	0:00	1:00	D
+Rule	Zion	1993	only	-	Sep	 5	0:00	0	S
+Rule	Zion	1994	only	-	Apr	 1	0:00	1:00	D
+Rule	Zion	1994	only	-	Aug	28	0:00	0	S
+Rule	Zion	1995	only	-	Mar	31	0:00	1:00	D
+Rule	Zion	1995	only	-	Sep	 3	0:00	0	S
+Rule	Zion	1996	only	-	Mar	15	0:00	1:00	D
+Rule	Zion	1996	only	-	Sep	16	0:00	0	S
+Rule	Zion	1997	only	-	Mar	21	0:00	1:00	D
+Rule	Zion	1997	only	-	Sep	14	0:00	0	S
+Rule	Zion	1998	only	-	Mar	20	0:00	1:00	D
+Rule	Zion	1998	only	-	Sep	 6	0:00	0	S
+Rule	Zion	1999	only	-	Apr	 2	2:00	1:00	D
+Rule	Zion	1999	only	-	Sep	 3	2:00	0	S
+Rule	Zion	2000	only	-	Apr	14	2:00	1:00	D
+Rule	Zion	2000	only	-	Oct	 6	1:00	0	S
+Rule	Zion	2001	only	-	Apr	 9	1:00	1:00	D
+Rule	Zion	2001	only	-	Sep	24	1:00	0	S
+Rule	Zion	2002	only	-	Mar	29	1:00	1:00	D
+Rule	Zion	2002	only	-	Oct	 7	1:00	0	S
+Rule	Zion	2003	only	-	Mar	28	1:00	1:00	D
+Rule	Zion	2003	only	-	Oct	 3	1:00	0	S
+Rule	Zion	2004	only	-	Apr	 7	1:00	1:00	D
+Rule	Zion	2004	only	-	Sep	22	1:00	0	S
+Rule	Zion	2005	only	-	Apr	 1	2:00	1:00	D
+Rule	Zion	2005	only	-	Oct	 9	2:00	0	S
+Rule	Zion	2006	2010	-	Mar	Fri>=26	2:00	1:00	D
+Rule	Zion	2006	only	-	Oct	 1	2:00	0	S
+Rule	Zion	2007	only	-	Sep	16	2:00	0	S
+Rule	Zion	2008	only	-	Oct	 5	2:00	0	S
+Rule	Zion	2009	only	-	Sep	27	2:00	0	S
+Rule	Zion	2010	only	-	Sep	12	2:00	0	S
+Rule	Zion	2011	only	-	Apr	 1	2:00	1:00	D
+Rule	Zion	2011	only	-	Oct	 2	2:00	0	S
+Rule	Zion	2012	2015	-	Mar	Fri>=26	2:00	1:00	D
+Rule	Zion	2012	only	-	Sep	23	2:00	0	S
+Rule	Zion	2013	only	-	Sep	 8	2:00	0	S
+Rule	Zion	2014	only	-	Sep	28	2:00	0	S
+Rule	Zion	2015	only	-	Sep	20	2:00	0	S
+Rule	Zion	2016	only	-	Apr	 1	2:00	1:00	D
+Rule	Zion	2016	only	-	Oct	 9	2:00	0	S
+Rule	Zion	2017	2021	-	Mar	Fri>=26	2:00	1:00	D
+Rule	Zion	2017	only	-	Sep	24	2:00	0	S
+Rule	Zion	2018	only	-	Sep	16	2:00	0	S
+Rule	Zion	2019	only	-	Oct	 6	2:00	0	S
+Rule	Zion	2020	only	-	Sep	27	2:00	0	S
+Rule	Zion	2021	only	-	Sep	12	2:00	0	S
+Rule	Zion	2022	only	-	Apr	 1	2:00	1:00	D
+Rule	Zion	2022	only	-	Oct	 2	2:00	0	S
+Rule	Zion	2023	2032	-	Mar	Fri>=26	2:00	1:00	D
+Rule	Zion	2023	only	-	Sep	24	2:00	0	S
+Rule	Zion	2024	only	-	Oct	 6	2:00	0	S
+Rule	Zion	2025	only	-	Sep	28	2:00	0	S
+Rule	Zion	2026	only	-	Sep	20	2:00	0	S
+Rule	Zion	2027	only	-	Oct	10	2:00	0	S
+Rule	Zion	2028	only	-	Sep	24	2:00	0	S
+Rule	Zion	2029	only	-	Sep	16	2:00	0	S
+Rule	Zion	2030	only	-	Oct	 6	2:00	0	S
+Rule	Zion	2031	only	-	Sep	21	2:00	0	S
+Rule	Zion	2032	only	-	Sep	12	2:00	0	S
+Rule	Zion	2033	only	-	Apr	 1	2:00	1:00	D
+Rule	Zion	2033	only	-	Oct	 2	2:00	0	S
+Rule	Zion	2034	2037	-	Mar	Fri>=26	2:00	1:00	D
+Rule	Zion	2034	only	-	Sep	17	2:00	0	S
+Rule	Zion	2035	only	-	Oct	 7	2:00	0	S
+Rule	Zion	2036	only	-	Sep	28	2:00	0	S
+Rule	Zion	2037	only	-	Sep	13	2:00	0	S
+Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
+			2:20:40	-	JMT	1918	# Jerusalem Mean Time?
+			2:00	Zion	I%sT
+Rule	Japan	1948	only	-	May	Sun>=1	2:00	1:00	D
+Rule	Japan	1948	1951	-	Sep	Sat>=8	2:00	0	S
+Rule	Japan	1949	only	-	Apr	Sun>=1	2:00	1:00	D
+Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
+Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
+			9:00	-	JST	1896
+			9:00	-	CJT	1938
+			9:00	Japan	J%sT
+Rule	Jordan	1973	only	-	Jun	6	0:00	1:00	S
+Rule	Jordan	1973	1975	-	Oct	1	0:00	0	-
+Rule	Jordan	1974	1977	-	May	1	0:00	1:00	S
+Rule	Jordan	1976	only	-	Nov	1	0:00	0	-
+Rule	Jordan	1977	only	-	Oct	1	0:00	0	-
+Rule	Jordan	1978	only	-	Apr	30	0:00	1:00	S
+Rule	Jordan	1978	only	-	Sep	30	0:00	0	-
+Rule	Jordan	1985	only	-	Apr	1	0:00	1:00	S
+Rule	Jordan	1985	only	-	Oct	1	0:00	0	-
+Rule	Jordan	1986	1988	-	Apr	Fri>=1	0:00	1:00	S
+Rule	Jordan	1986	1990	-	Oct	Fri>=1	0:00	0	-
+Rule	Jordan	1989	only	-	May	8	0:00	1:00	S
+Rule	Jordan	1990	only	-	Apr	27	0:00	1:00	S
+Rule	Jordan	1991	only	-	Apr	17	0:00	1:00	S
+Rule	Jordan	1991	only	-	Sep	27	0:00	0	-
+Rule	Jordan	1992	only	-	Apr	10	0:00	1:00	S
+Rule	Jordan	1992	1993	-	Oct	Fri>=1	0:00	0	-
+Rule	Jordan	1993	1998	-	Apr	Fri>=1	0:00	1:00	S
+Rule	Jordan	1994	only	-	Sep	Fri>=15	0:00	0	-
+Rule	Jordan	1995	1998	-	Sep	Fri>=15	0:00s	0	-
+Rule	Jordan	1999	only	-	Jul	 1	0:00s	1:00	S
+Rule	Jordan	1999	2002	-	Sep	lastFri	0:00s	0	-
+Rule	Jordan	2000	2001	-	Mar	lastThu	0:00s	1:00	S
+Rule	Jordan	2002	max	-	Mar	lastThu	24:00	1:00	S
+Rule	Jordan	2003	only	-	Oct	24	0:00s	0	-
+Rule	Jordan	2004	only	-	Oct	15	0:00s	0	-
+Rule	Jordan	2005	only	-	Sep	lastFri	0:00s	0	-
+Rule	Jordan	2006	max	-	Oct	lastFri	0:00s	0	-
+Zone	Asia/Amman	2:23:44 -	LMT	1931
+			2:00	Jordan	EE%sT
+Zone	Asia/Almaty	5:07:48 -	LMT	1924 May  2 # or Alma-Ata
+			5:00	-	ALMT	1930 Jun 21 # Alma-Ata Time
+			6:00 RussiaAsia ALM%sT	1991
+			6:00	-	ALMT	1992
+			6:00 RussiaAsia	ALM%sT	2005 Mar 15
+			6:00	-	ALMT
+Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 May  2
+			4:00	-	KIZT	1930 Jun 21 # Kizilorda Time
+			5:00	-	KIZT	1981 Apr  1
+			5:00	1:00	KIZST	1981 Oct  1
+			6:00	-	KIZT	1982 Apr  1
+			5:00 RussiaAsia	KIZ%sT	1991
+			5:00	-	KIZT	1991 Dec 16 # independence
+			5:00	-	QYZT	1992 Jan 19 2:00
+			6:00 RussiaAsia	QYZ%sT	2005 Mar 15
+			6:00	-	QYZT
+Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
+			4:00	-	AKTT	1930 Jun 21 # Aktyubinsk Time
+			5:00	-	AKTT	1981 Apr  1
+			5:00	1:00	AKTST	1981 Oct  1
+			6:00	-	AKTT	1982 Apr  1
+			5:00 RussiaAsia	AKT%sT	1991
+			5:00	-	AKTT	1991 Dec 16 # independence
+			5:00 RussiaAsia	AQT%sT	2005 Mar 15 # Aqtobe Time
+			5:00	-	AQTT
+Zone	Asia/Aqtau	3:21:04	-	LMT	1924 May  2
+			4:00	-	FORT	1930 Jun 21 # Fort Shevchenko T
+			5:00	-	FORT	1963
+			5:00	-	SHET	1981 Oct  1 # Shevchenko Time
+			6:00	-	SHET	1982 Apr  1
+			5:00 RussiaAsia	SHE%sT	1991
+			5:00	-	SHET	1991 Dec 16 # independence
+			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun 2:00 # Aqtau Time
+			4:00 RussiaAsia	AQT%sT	2005 Mar 15
+			5:00	-	AQTT
+Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
+			4:00	-	URAT	1930 Jun 21 # Ural'sk time
+			5:00	-	URAT	1981 Apr  1
+			5:00	1:00	URAST	1981 Oct  1
+			6:00	-	URAT	1982 Apr  1
+			5:00 RussiaAsia	URA%sT	1989 Mar 26 2:00
+			4:00 RussiaAsia	URA%sT	1991
+			4:00	-	URAT	1991 Dec 16 # independence
+			4:00 RussiaAsia	ORA%sT	2005 Mar 15 # Oral Time
+			5:00	-	ORAT
+Rule	Kyrgyz	1992	1996	-	Apr	Sun>=7	0:00s	1:00	S
+Rule	Kyrgyz	1992	1996	-	Sep	lastSun	0:00	0	-
+Rule	Kyrgyz	1997	2005	-	Mar	lastSun	2:30	1:00	S
+Rule	Kyrgyz	1997	2004	-	Oct	lastSun	2:30	0	-
+Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
+			5:00	-	FRUT	1930 Jun 21 # Frunze Time
+			6:00 RussiaAsia FRU%sT	1991 Mar 31 2:00s
+			5:00	1:00	FRUST	1991 Aug 31 2:00 # independence
+			5:00	Kyrgyz	KG%sT	2005 Aug 12    # Kyrgyzstan Time
+			6:00	-	KGT
+Rule	ROK	1960	only	-	May	15	0:00	1:00	D
+Rule	ROK	1960	only	-	Sep	13	0:00	0	S
+Rule	ROK	1987	1988	-	May	Sun>=8	0:00	1:00	D
+Rule	ROK	1987	1988	-	Oct	Sun>=8	0:00	0	S
+Zone	Asia/Seoul	8:27:52	-	LMT	1890
+			8:30	-	KST	1904 Dec
+			9:00	-	KST	1928
+			8:30	-	KST	1932
+			9:00	-	KST	1954 Mar 21
+			8:00	ROK	K%sT	1961 Aug 10
+			8:30	-	KST	1968 Oct
+			9:00	ROK	K%sT
+Zone	Asia/Pyongyang	8:23:00 -	LMT	1890
+			8:30	-	KST	1904 Dec
+			9:00	-	KST	1928
+			8:30	-	KST	1932
+			9:00	-	KST	1954 Mar 21
+			8:00	-	KST	1961 Aug 10
+			9:00	-	KST
+Zone	Asia/Kuwait	3:11:56 -	LMT	1950
+			3:00	-	AST
+Zone	Asia/Vientiane	6:50:24 -	LMT	1906 Jun  9 # or Viangchan
+			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
+			7:00	-	ICT	1912 May
+			8:00	-	ICT	1931 May
+			7:00	-	ICT
+Rule	Lebanon	1920	only	-	Mar	28	0:00	1:00	S
+Rule	Lebanon	1920	only	-	Oct	25	0:00	0	-
+Rule	Lebanon	1921	only	-	Apr	3	0:00	1:00	S
+Rule	Lebanon	1921	only	-	Oct	3	0:00	0	-
+Rule	Lebanon	1922	only	-	Mar	26	0:00	1:00	S
+Rule	Lebanon	1922	only	-	Oct	8	0:00	0	-
+Rule	Lebanon	1923	only	-	Apr	22	0:00	1:00	S
+Rule	Lebanon	1923	only	-	Sep	16	0:00	0	-
+Rule	Lebanon	1957	1961	-	May	1	0:00	1:00	S
+Rule	Lebanon	1957	1961	-	Oct	1	0:00	0	-
+Rule	Lebanon	1972	only	-	Jun	22	0:00	1:00	S
+Rule	Lebanon	1972	1977	-	Oct	1	0:00	0	-
+Rule	Lebanon	1973	1977	-	May	1	0:00	1:00	S
+Rule	Lebanon	1978	only	-	Apr	30	0:00	1:00	S
+Rule	Lebanon	1978	only	-	Sep	30	0:00	0	-
+Rule	Lebanon	1984	1987	-	May	1	0:00	1:00	S
+Rule	Lebanon	1984	1991	-	Oct	16	0:00	0	-
+Rule	Lebanon	1988	only	-	Jun	1	0:00	1:00	S
+Rule	Lebanon	1989	only	-	May	10	0:00	1:00	S
+Rule	Lebanon	1990	1992	-	May	1	0:00	1:00	S
+Rule	Lebanon	1992	only	-	Oct	4	0:00	0	-
+Rule	Lebanon	1993	max	-	Mar	lastSun	0:00	1:00	S
+Rule	Lebanon	1993	1998	-	Sep	lastSun	0:00	0	-
+Rule	Lebanon	1999	max	-	Oct	lastSun	0:00	0	-
+Zone	Asia/Beirut	2:22:00 -	LMT	1880
+			2:00	Lebanon	EE%sT
+Rule	NBorneo	1935	1941	-	Sep	14	0:00	0:20	TS # one-Third Summer
+Rule	NBorneo	1935	1941	-	Dec	14	0:00	0	-
+Zone Asia/Kuala_Lumpur	6:46:46 -	LMT	1901 Jan  1
+			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
+			7:00	-	MALT	1933 Jan  1 # Malaya Time
+			7:00	0:20	MALST	1936 Jan  1
+			7:20	-	MALT	1941 Sep  1
+			7:30	-	MALT	1942 Feb 16
+			9:00	-	JST	1945 Sep 12
+			7:30	-	MALT	1982 Jan  1
+			8:00	-	MYT	# Malaysia Time
+Zone Asia/Kuching	7:21:20	-	LMT	1926 Mar
+			7:30	-	BORT	1933	# Borneo Time
+			8:00	NBorneo	BOR%sT	1942 Feb 16
+			9:00	-	JST	1945 Sep 12
+			8:00	-	BORT	1982 Jan  1
+			8:00	-	MYT
+Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
+			4:54:00	-	MMT	1960	# Male Mean Time
+			5:00	-	MVT		# Maldives Time
+Rule	Mongol	1983	1984	-	Apr	1	0:00	1:00	S
+Rule	Mongol	1983	only	-	Oct	1	0:00	0	-
+Rule	Mongol	1985	1998	-	Mar	lastSun	0:00	1:00	S
+Rule	Mongol	1984	1998	-	Sep	lastSun	0:00	0	-
+Rule	Mongol	2001	only	-	Apr	lastSat	2:00	1:00	S
+Rule	Mongol	2001	2006	-	Sep	lastSat	2:00	0	-
+Rule	Mongol	2002	2006	-	Mar	lastSat	2:00	1:00	S
+Zone	Asia/Hovd	6:06:36 -	LMT	1905 Aug
+			6:00	-	HOVT	1978	# Hovd Time
+			7:00	Mongol	HOV%sT
+Zone	Asia/Ulaanbaatar 7:07:32 -	LMT	1905 Aug
+			7:00	-	ULAT	1978	# Ulaanbaatar Time
+			8:00	Mongol	ULA%sT
+Zone	Asia/Choibalsan	7:38:00 -	LMT	1905 Aug
+			7:00	-	ULAT	1978
+			8:00	-	ULAT	1983 Apr
+			9:00	Mongol	CHO%sT	2008 Mar 31 # Choibalsan Time
+			8:00	Mongol	CHO%sT
+Zone	Asia/Kathmandu	5:41:16 -	LMT	1920
+			5:30	-	IST	1986
+			5:45	-	NPT	# Nepal Time
+Zone	Asia/Muscat	3:54:20 -	LMT	1920
+			4:00	-	GST
+Rule Pakistan	2002	only	-	Apr	Sun>=2	0:01	1:00	S
+Rule Pakistan	2002	only	-	Oct	Sun>=2	0:01	0	-
+Rule Pakistan	2008	only	-	Jun	1	0:00	1:00	S
+Rule Pakistan	2008	only	-	Nov	1	0:00	0	-
+Rule Pakistan	2009	only	-	Apr	15	0:00	1:00	S
+Rule Pakistan	2009	only	-	Nov	1	0:00	0	-
+Zone	Asia/Karachi	4:28:12 -	LMT	1907
+			5:30	-	IST	1942 Sep
+			5:30	1:00	IST	1945 Oct 15
+			5:30	-	IST	1951 Sep 30
+			5:00	-	KART	1971 Mar 26 # Karachi Time
+			5:00 Pakistan	PK%sT	# Pakistan Time
+Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
+Rule EgyptAsia	1957	1958	-	Oct	 1	0:00	0	-
+Rule EgyptAsia	1958	only	-	May	 1	0:00	1:00	S
+Rule EgyptAsia	1959	1967	-	May	 1	1:00	1:00	S
+Rule EgyptAsia	1959	1965	-	Sep	30	3:00	0	-
+Rule EgyptAsia	1966	only	-	Oct	 1	3:00	0	-
+Rule Palestine	1999	2005	-	Apr	Fri>=15	0:00	1:00	S
+Rule Palestine	1999	2003	-	Oct	Fri>=15	0:00	0	-
+Rule Palestine	2004	only	-	Oct	 1	1:00	0	-
+Rule Palestine	2005	only	-	Oct	 4	2:00	0	-
+Rule Palestine	2006	2008	-	Apr	 1	0:00	1:00	S
+Rule Palestine	2006	only	-	Sep	22	0:00	0	-
+Rule Palestine	2007	only	-	Sep	Thu>=8	2:00	0	-
+Rule Palestine	2008	only	-	Aug	lastFri	2:00	0	-
+Rule Palestine	2009	max	-	Mar	lastFri	0:00	1:00	S
+Rule Palestine	2009	max	-	Sep	lastMon	2:00	0	-
+Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
+			2:00	Zion	EET	1948 May 15
+			2:00 EgyptAsia	EE%sT	1967 Jun  5
+			2:00	Zion	I%sT	1996
+			2:00	Jordan	EE%sT	1999
+			2:00 Palestine	EE%sT
+Rule	Phil	1936	only	-	Nov	1	0:00	1:00	S
+Rule	Phil	1937	only	-	Feb	1	0:00	0	-
+Rule	Phil	1954	only	-	Apr	12	0:00	1:00	S
+Rule	Phil	1954	only	-	Jul	1	0:00	0	-
+Rule	Phil	1978	only	-	Mar	22	0:00	1:00	S
+Rule	Phil	1978	only	-	Sep	21	0:00	0	-
+Zone	Asia/Manila	-15:56:00 -	LMT	1844 Dec 31
+			8:04:00 -	LMT	1899 May 11
+			8:00	Phil	PH%sT	1942 May
+			9:00	-	JST	1944 Nov
+			8:00	Phil	PH%sT
+Zone	Asia/Qatar	3:26:08 -	LMT	1920	# Al Dawhah / Doha
+			4:00	-	GST	1972 Jun
+			3:00	-	AST
+Zone	Asia/Riyadh	3:06:52 -	LMT	1950
+			3:00	-	AST
+Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
+			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
+			7:00	-	MALT	1933 Jan  1 # Malaya Time
+			7:00	0:20	MALST	1936 Jan  1
+			7:20	-	MALT	1941 Sep  1
+			7:30	-	MALT	1942 Feb 16
+			9:00	-	JST	1945 Sep 12
+			7:30	-	MALT	1965 Aug  9 # independence
+			7:30	-	SGT	1982 Jan  1 # Singapore Time
+			8:00	-	SGT
+Zone	Asia/Colombo	5:19:24 -	LMT	1880
+			5:19:32	-	MMT	1906	# Moratuwa Mean Time
+			5:30	-	IST	1942 Jan  5
+			5:30	0:30	IHST	1942 Sep
+			5:30	1:00	IST	1945 Oct 16 2:00
+			5:30	-	IST	1996 May 25 0:00
+			6:30	-	LKT	1996 Oct 26 0:30
+			6:00	-	LKT	2006 Apr 15 0:30
+			5:30	-	IST
+Rule	Syria	1920	1923	-	Apr	Sun>=15	2:00	1:00	S
+Rule	Syria	1920	1923	-	Oct	Sun>=1	2:00	0	-
+Rule	Syria	1962	only	-	Apr	29	2:00	1:00	S
+Rule	Syria	1962	only	-	Oct	1	2:00	0	-
+Rule	Syria	1963	1965	-	May	1	2:00	1:00	S
+Rule	Syria	1963	only	-	Sep	30	2:00	0	-
+Rule	Syria	1964	only	-	Oct	1	2:00	0	-
+Rule	Syria	1965	only	-	Sep	30	2:00	0	-
+Rule	Syria	1966	only	-	Apr	24	2:00	1:00	S
+Rule	Syria	1966	1976	-	Oct	1	2:00	0	-
+Rule	Syria	1967	1978	-	May	1	2:00	1:00	S
+Rule	Syria	1977	1978	-	Sep	1	2:00	0	-
+Rule	Syria	1983	1984	-	Apr	9	2:00	1:00	S
+Rule	Syria	1983	1984	-	Oct	1	2:00	0	-
+Rule	Syria	1986	only	-	Feb	16	2:00	1:00	S
+Rule	Syria	1986	only	-	Oct	9	2:00	0	-
+Rule	Syria	1987	only	-	Mar	1	2:00	1:00	S
+Rule	Syria	1987	1988	-	Oct	31	2:00	0	-
+Rule	Syria	1988	only	-	Mar	15	2:00	1:00	S
+Rule	Syria	1989	only	-	Mar	31	2:00	1:00	S
+Rule	Syria	1989	only	-	Oct	1	2:00	0	-
+Rule	Syria	1990	only	-	Apr	1	2:00	1:00	S
+Rule	Syria	1990	only	-	Sep	30	2:00	0	-
+Rule	Syria	1991	only	-	Apr	 1	0:00	1:00	S
+Rule	Syria	1991	1992	-	Oct	 1	0:00	0	-
+Rule	Syria	1992	only	-	Apr	 8	0:00	1:00	S
+Rule	Syria	1993	only	-	Mar	26	0:00	1:00	S
+Rule	Syria	1993	only	-	Sep	25	0:00	0	-
+Rule	Syria	1994	1996	-	Apr	 1	0:00	1:00	S
+Rule	Syria	1994	2005	-	Oct	 1	0:00	0	-
+Rule	Syria	1997	1998	-	Mar	lastMon	0:00	1:00	S
+Rule	Syria	1999	2006	-	Apr	 1	0:00	1:00	S
+Rule	Syria	2006	only	-	Sep	22	0:00	0	-
+Rule	Syria	2007	only	-	Mar	lastFri	0:00	1:00	S
+Rule	Syria	2007	only	-	Nov	 Fri>=1	0:00	0	-
+Rule	Syria	2008	only	-	Apr	Fri>=1	0:00	1:00	S
+Rule	Syria	2008	max	-	Nov	1	0:00	0	-
+Rule	Syria	2009	max	-	Mar	lastFri	0:00	1:00	S
+Zone	Asia/Damascus	2:25:12 -	LMT	1920	# Dimashq
+			2:00	Syria	EE%sT
+Zone	Asia/Dushanbe	4:35:12 -	LMT	1924 May  2
+			5:00	-	DUST	1930 Jun 21 # Dushanbe Time
+			6:00 RussiaAsia DUS%sT	1991 Mar 31 2:00s
+			5:00	1:00	DUSST	1991 Sep  9 2:00s
+			5:00	-	TJT		    # Tajikistan Time
+Zone	Asia/Bangkok	6:42:04	-	LMT	1880
+			6:42:04	-	BMT	1920 Apr # Bangkok Mean Time
+			7:00	-	ICT
+Zone	Asia/Ashgabat	3:53:32 -	LMT	1924 May  2 # or Ashkhabad
+			4:00	-	ASHT	1930 Jun 21 # Ashkhabad Time
+			5:00 RussiaAsia	ASH%sT	1991 Mar 31 2:00
+			4:00 RussiaAsia	ASH%sT	1991 Oct 27 # independence
+			4:00 RussiaAsia	TM%sT	1992 Jan 19 2:00
+			5:00	-	TMT
+Zone	Asia/Dubai	3:41:12 -	LMT	1920
+			4:00	-	GST
+Zone	Asia/Samarkand	4:27:12 -	LMT	1924 May  2
+			4:00	-	SAMT	1930 Jun 21 # Samarkand Time
+			5:00	-	SAMT	1981 Apr  1
+			5:00	1:00	SAMST	1981 Oct  1
+			6:00	-	TAST	1982 Apr  1 # Tashkent Time
+			5:00 RussiaAsia	SAM%sT	1991 Sep  1 # independence
+			5:00 RussiaAsia	UZ%sT	1992
+			5:00	-	UZT
+Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
+			5:00	-	TAST	1930 Jun 21 # Tashkent Time
+			6:00 RussiaAsia	TAS%sT	1991 Mar 31 2:00
+			5:00 RussiaAsia	TAS%sT	1991 Sep  1 # independence
+			5:00 RussiaAsia	UZ%sT	1992
+			5:00	-	UZT
+Zone	Asia/Ho_Chi_Minh	7:06:40 -	LMT	1906 Jun  9
+			7:06:20	-	SMT	1911 Mar 11 0:01 # Saigon MT?
+			7:00	-	ICT	1912 May
+			8:00	-	ICT	1931 May
+			7:00	-	ICT
+Zone	Asia/Aden	3:00:48	-	LMT	1950
+			3:00	-	AST
Index: trunk/web/dojo/dojox/date/zoneinfo/backward
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/backward	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/backward	(revision 9)
@@ -0,0 +1,108 @@
+Link	Africa/Asmara		Africa/Asmera
+Link	Africa/Bamako		Africa/Timbuktu
+Link	America/Argentina/Catamarca	America/Argentina/ComodRivadavia
+Link	America/Adak		America/Atka
+Link	America/Argentina/Buenos_Aires	America/Buenos_Aires
+Link	America/Argentina/Catamarca	America/Catamarca
+Link	America/Atikokan	America/Coral_Harbour
+Link	America/Argentina/Cordoba	America/Cordoba
+Link	America/Tijuana		America/Ensenada
+Link	America/Indiana/Indianapolis	America/Fort_Wayne
+Link	America/Indiana/Indianapolis	America/Indianapolis
+Link	America/Argentina/Jujuy	America/Jujuy
+Link	America/Indiana/Knox	America/Knox_IN
+Link	America/Kentucky/Louisville	America/Louisville
+Link	America/Argentina/Mendoza	America/Mendoza
+Link	America/Rio_Branco	America/Porto_Acre
+Link	America/Argentina/Cordoba	America/Rosario
+Link	America/St_Thomas	America/Virgin
+Link	Asia/Ashgabat		Asia/Ashkhabad
+Link	Asia/Chongqing		Asia/Chungking
+Link	Asia/Dhaka		Asia/Dacca
+Link	Asia/Kathmandu		Asia/Katmandu
+Link	Asia/Kolkata		Asia/Calcutta
+Link	Asia/Macau		Asia/Macao
+Link	Asia/Jerusalem		Asia/Tel_Aviv
+Link	Asia/Ho_Chi_Minh	Asia/Saigon
+Link	Asia/Thimphu		Asia/Thimbu
+Link	Asia/Makassar		Asia/Ujung_Pandang
+Link	Asia/Ulaanbaatar	Asia/Ulan_Bator
+Link	Atlantic/Faroe		Atlantic/Faeroe
+Link	Europe/Oslo		Atlantic/Jan_Mayen
+Link	Australia/Sydney	Australia/ACT
+Link	Australia/Sydney	Australia/Canberra
+Link	Australia/Lord_Howe	Australia/LHI
+Link	Australia/Sydney	Australia/NSW
+Link	Australia/Darwin	Australia/North
+Link	Australia/Brisbane	Australia/Queensland
+Link	Australia/Adelaide	Australia/South
+Link	Australia/Hobart	Australia/Tasmania
+Link	Australia/Melbourne	Australia/Victoria
+Link	Australia/Perth		Australia/West
+Link	Australia/Broken_Hill	Australia/Yancowinna
+Link	America/Rio_Branco	Brazil/Acre
+Link	America/Noronha		Brazil/DeNoronha
+Link	America/Sao_Paulo	Brazil/East
+Link	America/Manaus		Brazil/West
+Link	America/Halifax		Canada/Atlantic
+Link	America/Winnipeg	Canada/Central
+Link	America/Regina		Canada/East-Saskatchewan
+Link	America/Toronto		Canada/Eastern
+Link	America/Edmonton	Canada/Mountain
+Link	America/St_Johns	Canada/Newfoundland
+Link	America/Vancouver	Canada/Pacific
+Link	America/Regina		Canada/Saskatchewan
+Link	America/Whitehorse	Canada/Yukon
+Link	America/Santiago	Chile/Continental
+Link	Pacific/Easter		Chile/EasterIsland
+Link	America/Havana		Cuba
+Link	Africa/Cairo		Egypt
+Link	Europe/Dublin		Eire
+Link	Europe/London		Europe/Belfast
+Link	Europe/Chisinau		Europe/Tiraspol
+Link	Europe/London		GB
+Link	Europe/London		GB-Eire
+Link	Etc/GMT			GMT+0
+Link	Etc/GMT			GMT-0
+Link	Etc/GMT			GMT0
+Link	Etc/GMT			Greenwich
+Link	Asia/Hong_Kong		Hongkong
+Link	Atlantic/Reykjavik	Iceland
+Link	Asia/Tehran		Iran
+Link	Asia/Jerusalem		Israel
+Link	America/Jamaica		Jamaica
+Link	Asia/Tokyo		Japan
+Link	Pacific/Kwajalein	Kwajalein
+Link	Africa/Tripoli		Libya
+Link	America/Tijuana		Mexico/BajaNorte
+Link	America/Mazatlan	Mexico/BajaSur
+Link	America/Mexico_City	Mexico/General
+Link	Pacific/Auckland	NZ
+Link	Pacific/Chatham		NZ-CHAT
+Link	America/Denver		Navajo
+Link	Asia/Shanghai		PRC
+Link	Pacific/Pago_Pago	Pacific/Samoa
+Link	Pacific/Truk		Pacific/Yap
+Link	Europe/Warsaw		Poland
+Link	Europe/Lisbon		Portugal
+Link	Asia/Taipei		ROC
+Link	Asia/Seoul		ROK
+Link	Asia/Singapore		Singapore
+Link	Europe/Istanbul		Turkey
+Link	Etc/UCT			UCT
+Link	America/Anchorage	US/Alaska
+Link	America/Adak		US/Aleutian
+Link	America/Phoenix		US/Arizona
+Link	America/Chicago		US/Central
+Link	America/Indiana/Indianapolis	US/East-Indiana
+Link	America/New_York	US/Eastern
+Link	Pacific/Honolulu	US/Hawaii
+Link	America/Indiana/Knox	US/Indiana-Starke
+Link	America/Detroit		US/Michigan
+Link	America/Denver		US/Mountain
+Link	America/Los_Angeles	US/Pacific
+Link	Pacific/Pago_Pago	US/Samoa
+Link	Etc/UTC			UTC
+Link	Etc/UTC			Universal
+Link	Europe/Moscow		W-SU
+Link	Etc/UTC			Zulu
Index: trunk/web/dojo/dojox/date/zoneinfo/europe
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/europe	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/europe	(revision 9)
@@ -0,0 +1,1045 @@
+Rule	GB-Eire	1916	only	-	May	21	2:00s	1:00	BST
+Rule	GB-Eire	1916	only	-	Oct	 1	2:00s	0	GMT
+Rule	GB-Eire	1917	only	-	Apr	 8	2:00s	1:00	BST
+Rule	GB-Eire	1917	only	-	Sep	17	2:00s	0	GMT
+Rule	GB-Eire	1918	only	-	Mar	24	2:00s	1:00	BST
+Rule	GB-Eire	1918	only	-	Sep	30	2:00s	0	GMT
+Rule	GB-Eire	1919	only	-	Mar	30	2:00s	1:00	BST
+Rule	GB-Eire	1919	only	-	Sep	29	2:00s	0	GMT
+Rule	GB-Eire	1920	only	-	Mar	28	2:00s	1:00	BST
+Rule	GB-Eire	1920	only	-	Oct	25	2:00s	0	GMT
+Rule	GB-Eire	1921	only	-	Apr	 3	2:00s	1:00	BST
+Rule	GB-Eire	1921	only	-	Oct	 3	2:00s	0	GMT
+Rule	GB-Eire	1922	only	-	Mar	26	2:00s	1:00	BST
+Rule	GB-Eire	1922	only	-	Oct	 8	2:00s	0	GMT
+Rule	GB-Eire	1923	only	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1923	1924	-	Sep	Sun>=16	2:00s	0	GMT
+Rule	GB-Eire	1924	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1925	1926	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1925	1938	-	Oct	Sun>=2	2:00s	0	GMT
+Rule	GB-Eire	1927	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1928	1929	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1930	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1931	1932	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1933	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1934	only	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1935	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1936	1937	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1938	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1939	only	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1939	only	-	Nov	Sun>=16	2:00s	0	GMT
+Rule	GB-Eire	1940	only	-	Feb	Sun>=23	2:00s	1:00	BST
+Rule	GB-Eire	1941	only	-	May	Sun>=2	1:00s	2:00	BDST
+Rule	GB-Eire	1941	1943	-	Aug	Sun>=9	1:00s	1:00	BST
+Rule	GB-Eire	1942	1944	-	Apr	Sun>=2	1:00s	2:00	BDST
+Rule	GB-Eire	1944	only	-	Sep	Sun>=16	1:00s	1:00	BST
+Rule	GB-Eire	1945	only	-	Apr	Mon>=2	1:00s	2:00	BDST
+Rule	GB-Eire	1945	only	-	Jul	Sun>=9	1:00s	1:00	BST
+Rule	GB-Eire	1945	1946	-	Oct	Sun>=2	2:00s	0	GMT
+Rule	GB-Eire	1946	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1947	only	-	Mar	16	2:00s	1:00	BST
+Rule	GB-Eire	1947	only	-	Apr	13	1:00s	2:00	BDST
+Rule	GB-Eire	1947	only	-	Aug	10	1:00s	1:00	BST
+Rule	GB-Eire	1947	only	-	Nov	 2	2:00s	0	GMT
+Rule	GB-Eire	1948	only	-	Mar	14	2:00s	1:00	BST
+Rule	GB-Eire	1948	only	-	Oct	31	2:00s	0	GMT
+Rule	GB-Eire	1949	only	-	Apr	 3	2:00s	1:00	BST
+Rule	GB-Eire	1949	only	-	Oct	30	2:00s	0	GMT
+Rule	GB-Eire	1950	1952	-	Apr	Sun>=14	2:00s	1:00	BST
+Rule	GB-Eire	1950	1952	-	Oct	Sun>=21	2:00s	0	GMT
+Rule	GB-Eire	1953	only	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1953	1960	-	Oct	Sun>=2	2:00s	0	GMT
+Rule	GB-Eire	1954	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1955	1956	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1957	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1958	1959	-	Apr	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1960	only	-	Apr	Sun>=9	2:00s	1:00	BST
+Rule	GB-Eire	1961	1963	-	Mar	lastSun	2:00s	1:00	BST
+Rule	GB-Eire	1961	1968	-	Oct	Sun>=23	2:00s	0	GMT
+Rule	GB-Eire	1964	1967	-	Mar	Sun>=19	2:00s	1:00	BST
+Rule	GB-Eire	1968	only	-	Feb	18	2:00s	1:00	BST
+Rule	GB-Eire	1972	1980	-	Mar	Sun>=16	2:00s	1:00	BST
+Rule	GB-Eire	1972	1980	-	Oct	Sun>=23	2:00s	0	GMT
+Rule	GB-Eire	1981	1995	-	Mar	lastSun	1:00u	1:00	BST
+Rule	GB-Eire 1981	1989	-	Oct	Sun>=23	1:00u	0	GMT
+Rule	GB-Eire 1990	1995	-	Oct	Sun>=22	1:00u	0	GMT
+Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1 0:00s
+			 0:00	GB-Eire	%s	1968 Oct 27
+			 1:00	-	BST	1971 Oct 31 2:00u
+			 0:00	GB-Eire	%s	1996
+			 0:00	EU	GMT/BST
+Link	Europe/London	Europe/Jersey
+Link	Europe/London	Europe/Guernsey
+Link	Europe/London	Europe/Isle_of_Man
+Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
+			-0:25:21 -	DMT	1916 May 21 2:00
+			-0:25:21 1:00	IST	1916 Oct  1 2:00s
+			 0:00	GB-Eire	%s	1921 Dec  6 # independence
+			 0:00	GB-Eire	GMT/IST	1940 Feb 25 2:00
+			 0:00	1:00	IST	1946 Oct  6 2:00
+			 0:00	-	GMT	1947 Mar 16 2:00
+			 0:00	1:00	IST	1947 Nov  2 2:00
+			 0:00	-	GMT	1948 Apr 18 2:00
+			 0:00	GB-Eire	GMT/IST	1968 Oct 27
+			 1:00	-	IST	1971 Oct 31 2:00u
+			 0:00	GB-Eire	GMT/IST	1996
+			 0:00	EU	GMT/IST
+Rule	EU	1977	1980	-	Apr	Sun>=1	 1:00u	1:00	S
+Rule	EU	1977	only	-	Sep	lastSun	 1:00u	0	-
+Rule	EU	1978	only	-	Oct	 1	 1:00u	0	-
+Rule	EU	1979	1995	-	Sep	lastSun	 1:00u	0	-
+Rule	EU	1981	max	-	Mar	lastSun	 1:00u	1:00	S
+Rule	EU	1996	max	-	Oct	lastSun	 1:00u	0	-
+Rule	W-Eur	1977	1980	-	Apr	Sun>=1	 1:00s	1:00	S
+Rule	W-Eur	1977	only	-	Sep	lastSun	 1:00s	0	-
+Rule	W-Eur	1978	only	-	Oct	 1	 1:00s	0	-
+Rule	W-Eur	1979	1995	-	Sep	lastSun	 1:00s	0	-
+Rule	W-Eur	1981	max	-	Mar	lastSun	 1:00s	1:00	S
+Rule	W-Eur	1996	max	-	Oct	lastSun	 1:00s	0	-
+Rule	C-Eur	1916	only	-	Apr	30	23:00	1:00	S
+Rule	C-Eur	1916	only	-	Oct	 1	 1:00	0	-
+Rule	C-Eur	1917	1918	-	Apr	Mon>=15	 2:00s	1:00	S
+Rule	C-Eur	1917	1918	-	Sep	Mon>=15	 2:00s	0	-
+Rule	C-Eur	1940	only	-	Apr	 1	 2:00s	1:00	S
+Rule	C-Eur	1942	only	-	Nov	 2	 2:00s	0	-
+Rule	C-Eur	1943	only	-	Mar	29	 2:00s	1:00	S
+Rule	C-Eur	1943	only	-	Oct	 4	 2:00s	0	-
+Rule	C-Eur	1944	1945	-	Apr	Mon>=1	 2:00s	1:00	S
+Rule	C-Eur	1944	only	-	Oct	 2	 2:00s	0	-
+Rule	C-Eur	1945	only	-	Sep	16	 2:00s	0	-
+Rule	C-Eur	1977	1980	-	Apr	Sun>=1	 2:00s	1:00	S
+Rule	C-Eur	1977	only	-	Sep	lastSun	 2:00s	0	-
+Rule	C-Eur	1978	only	-	Oct	 1	 2:00s	0	-
+Rule	C-Eur	1979	1995	-	Sep	lastSun	 2:00s	0	-
+Rule	C-Eur	1981	max	-	Mar	lastSun	 2:00s	1:00	S
+Rule	C-Eur	1996	max	-	Oct	lastSun	 2:00s	0	-
+Rule	E-Eur	1977	1980	-	Apr	Sun>=1	 0:00	1:00	S
+Rule	E-Eur	1977	only	-	Sep	lastSun	 0:00	0	-
+Rule	E-Eur	1978	only	-	Oct	 1	 0:00	0	-
+Rule	E-Eur	1979	1995	-	Sep	lastSun	 0:00	0	-
+Rule	E-Eur	1981	max	-	Mar	lastSun	 0:00	1:00	S
+Rule	E-Eur	1996	max	-	Oct	lastSun	 0:00	0	-
+Rule	Russia	1917	only	-	Jul	 1	23:00	1:00	MST	# Moscow Summer Time
+Rule	Russia	1917	only	-	Dec	28	 0:00	0	MMT	# Moscow Mean Time
+Rule	Russia	1918	only	-	May	31	22:00	2:00	MDST	# Moscow Double Summer Time
+Rule	Russia	1918	only	-	Sep	16	 1:00	1:00	MST
+Rule	Russia	1919	only	-	May	31	23:00	2:00	MDST
+Rule	Russia	1919	only	-	Jul	 1	 2:00	1:00	S
+Rule	Russia	1919	only	-	Aug	16	 0:00	0	-
+Rule	Russia	1921	only	-	Feb	14	23:00	1:00	S
+Rule	Russia	1921	only	-	Mar	20	23:00	2:00	M # Midsummer
+Rule	Russia	1921	only	-	Sep	 1	 0:00	1:00	S
+Rule	Russia	1921	only	-	Oct	 1	 0:00	0	-
+Rule	Russia	1981	1984	-	Apr	 1	 0:00	1:00	S
+Rule	Russia	1981	1983	-	Oct	 1	 0:00	0	-
+Rule	Russia	1984	1991	-	Sep	lastSun	 2:00s	0	-
+Rule	Russia	1985	1991	-	Mar	lastSun	 2:00s	1:00	S
+Rule	Russia	1992	only	-	Mar	lastSat	 23:00	1:00	S
+Rule	Russia	1992	only	-	Sep	lastSat	 23:00	0	-
+Rule	Russia	1993	max	-	Mar	lastSun	 2:00s	1:00	S
+Rule	Russia	1993	1995	-	Sep	lastSun	 2:00s	0	-
+Rule	Russia	1996	max	-	Oct	lastSun	 2:00s	0	-
+Zone	WET		0:00	EU	WE%sT
+Zone	CET		1:00	C-Eur	CE%sT
+Zone	MET		1:00	C-Eur	ME%sT
+Zone	EET		2:00	EU	EE%sT
+Rule	Albania	1940	only	-	Jun	16	0:00	1:00	S
+Rule	Albania	1942	only	-	Nov	 2	3:00	0	-
+Rule	Albania	1943	only	-	Mar	29	2:00	1:00	S
+Rule	Albania	1943	only	-	Apr	10	3:00	0	-
+Rule	Albania	1974	only	-	May	 4	0:00	1:00	S
+Rule	Albania	1974	only	-	Oct	 2	0:00	0	-
+Rule	Albania	1975	only	-	May	 1	0:00	1:00	S
+Rule	Albania	1975	only	-	Oct	 2	0:00	0	-
+Rule	Albania	1976	only	-	May	 2	0:00	1:00	S
+Rule	Albania	1976	only	-	Oct	 3	0:00	0	-
+Rule	Albania	1977	only	-	May	 8	0:00	1:00	S
+Rule	Albania	1977	only	-	Oct	 2	0:00	0	-
+Rule	Albania	1978	only	-	May	 6	0:00	1:00	S
+Rule	Albania	1978	only	-	Oct	 1	0:00	0	-
+Rule	Albania	1979	only	-	May	 5	0:00	1:00	S
+Rule	Albania	1979	only	-	Sep	30	0:00	0	-
+Rule	Albania	1980	only	-	May	 3	0:00	1:00	S
+Rule	Albania	1980	only	-	Oct	 4	0:00	0	-
+Rule	Albania	1981	only	-	Apr	26	0:00	1:00	S
+Rule	Albania	1981	only	-	Sep	27	0:00	0	-
+Rule	Albania	1982	only	-	May	 2	0:00	1:00	S
+Rule	Albania	1982	only	-	Oct	 3	0:00	0	-
+Rule	Albania	1983	only	-	Apr	18	0:00	1:00	S
+Rule	Albania	1983	only	-	Oct	 1	0:00	0	-
+Rule	Albania	1984	only	-	Apr	 1	0:00	1:00	S
+Zone	Europe/Tirane	1:19:20 -	LMT	1914
+			1:00	-	CET	1940 Jun 16
+			1:00	Albania	CE%sT	1984 Jul
+			1:00	EU	CE%sT
+Zone	Europe/Andorra	0:06:04 -	LMT	1901
+			0:00	-	WET	1946 Sep 30
+			1:00	-	CET	1985 Mar 31 2:00
+			1:00	EU	CE%sT
+Rule	Austria	1920	only	-	Apr	 5	2:00s	1:00	S
+Rule	Austria	1920	only	-	Sep	13	2:00s	0	-
+Rule	Austria	1946	only	-	Apr	14	2:00s	1:00	S
+Rule	Austria	1946	1948	-	Oct	Sun>=1	2:00s	0	-
+Rule	Austria	1947	only	-	Apr	 6	2:00s	1:00	S
+Rule	Austria	1948	only	-	Apr	18	2:00s	1:00	S
+Rule	Austria	1980	only	-	Apr	 6	0:00	1:00	S
+Rule	Austria	1980	only	-	Sep	28	0:00	0	-
+Zone	Europe/Vienna	1:05:20 -	LMT	1893 Apr
+			1:00	C-Eur	CE%sT	1920
+			1:00	Austria	CE%sT	1940 Apr  1 2:00s
+			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
+			1:00	1:00	CEST	1945 Apr 12 2:00s
+			1:00	-	CET	1946
+			1:00	Austria	CE%sT	1981
+			1:00	EU	CE%sT
+Zone	Europe/Minsk	1:50:16 -	LMT	1880
+			1:50	-	MMT	1924 May 2 # Minsk Mean Time
+			2:00	-	EET	1930 Jun 21
+			3:00	-	MSK	1941 Jun 28
+			1:00	C-Eur	CE%sT	1944 Jul  3
+			3:00	Russia	MSK/MSD	1990
+			3:00	-	MSK	1991 Mar 31 2:00s
+			2:00	1:00	EEST	1991 Sep 29 2:00s
+			2:00	-	EET	1992 Mar 29 0:00s
+			2:00	1:00	EEST	1992 Sep 27 0:00s
+			2:00	Russia	EE%sT
+Rule	Belgium	1918	only	-	Mar	 9	 0:00s	1:00	S
+Rule	Belgium	1918	1919	-	Oct	Sat>=1	23:00s	0	-
+Rule	Belgium	1919	only	-	Mar	 1	23:00s	1:00	S
+Rule	Belgium	1920	only	-	Feb	14	23:00s	1:00	S
+Rule	Belgium	1920	only	-	Oct	23	23:00s	0	-
+Rule	Belgium	1921	only	-	Mar	14	23:00s	1:00	S
+Rule	Belgium	1921	only	-	Oct	25	23:00s	0	-
+Rule	Belgium	1922	only	-	Mar	25	23:00s	1:00	S
+Rule	Belgium	1922	1927	-	Oct	Sat>=1	23:00s	0	-
+Rule	Belgium	1923	only	-	Apr	21	23:00s	1:00	S
+Rule	Belgium	1924	only	-	Mar	29	23:00s	1:00	S
+Rule	Belgium	1925	only	-	Apr	 4	23:00s	1:00	S
+Rule	Belgium	1926	only	-	Apr	17	23:00s	1:00	S
+Rule	Belgium	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	Belgium	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	Belgium	1928	1938	-	Oct	Sun>=2	 2:00s	0	-
+Rule	Belgium	1929	only	-	Apr	21	 2:00s	1:00	S
+Rule	Belgium	1930	only	-	Apr	13	 2:00s	1:00	S
+Rule	Belgium	1931	only	-	Apr	19	 2:00s	1:00	S
+Rule	Belgium	1932	only	-	Apr	 3	 2:00s	1:00	S
+Rule	Belgium	1933	only	-	Mar	26	 2:00s	1:00	S
+Rule	Belgium	1934	only	-	Apr	 8	 2:00s	1:00	S
+Rule	Belgium	1935	only	-	Mar	31	 2:00s	1:00	S
+Rule	Belgium	1936	only	-	Apr	19	 2:00s	1:00	S
+Rule	Belgium	1937	only	-	Apr	 4	 2:00s	1:00	S
+Rule	Belgium	1938	only	-	Mar	27	 2:00s	1:00	S
+Rule	Belgium	1939	only	-	Apr	16	 2:00s	1:00	S
+Rule	Belgium	1939	only	-	Nov	19	 2:00s	0	-
+Rule	Belgium	1940	only	-	Feb	25	 2:00s	1:00	S
+Rule	Belgium	1944	only	-	Sep	17	 2:00s	0	-
+Rule	Belgium	1945	only	-	Apr	 2	 2:00s	1:00	S
+Rule	Belgium	1945	only	-	Sep	16	 2:00s	0	-
+Rule	Belgium	1946	only	-	May	19	 2:00s	1:00	S
+Rule	Belgium	1946	only	-	Oct	 7	 2:00s	0	-
+Zone	Europe/Brussels	0:17:30 -	LMT	1880
+			0:17:30	-	BMT	1892 May  1 12:00 # Brussels MT
+			0:00	-	WET	1914 Nov  8
+			1:00	-	CET	1916 May  1  0:00
+			1:00	C-Eur	CE%sT	1918 Nov 11 11:00u
+			0:00	Belgium	WE%sT	1940 May 20  2:00s
+			1:00	C-Eur	CE%sT	1944 Sep  3
+			1:00	Belgium	CE%sT	1977
+			1:00	EU	CE%sT
+Rule	Bulg	1979	only	-	Mar	31	23:00	1:00	S
+Rule	Bulg	1979	only	-	Oct	 1	 1:00	0	-
+Rule	Bulg	1980	1982	-	Apr	Sat>=1	23:00	1:00	S
+Rule	Bulg	1980	only	-	Sep	29	 1:00	0	-
+Rule	Bulg	1981	only	-	Sep	27	 2:00	0	-
+Zone	Europe/Sofia	1:33:16 -	LMT	1880
+			1:56:56	-	IMT	1894 Nov 30 # Istanbul MT?
+			2:00	-	EET	1942 Nov  2  3:00
+			1:00	C-Eur	CE%sT	1945
+			1:00	-	CET	1945 Apr 2 3:00
+			2:00	-	EET	1979 Mar 31 23:00
+			2:00	Bulg	EE%sT	1982 Sep 26  2:00
+			2:00	C-Eur	EE%sT	1991
+			2:00	E-Eur	EE%sT	1997
+			2:00	EU	EE%sT
+Rule	Czech	1945	only	-	Apr	 8	2:00s	1:00	S
+Rule	Czech	1945	only	-	Nov	18	2:00s	0	-
+Rule	Czech	1946	only	-	May	 6	2:00s	1:00	S
+Rule	Czech	1946	1949	-	Oct	Sun>=1	2:00s	0	-
+Rule	Czech	1947	only	-	Apr	20	2:00s	1:00	S
+Rule	Czech	1948	only	-	Apr	18	2:00s	1:00	S
+Rule	Czech	1949	only	-	Apr	 9	2:00s	1:00	S
+Zone	Europe/Prague	0:57:44 -	LMT	1850
+			0:57:44	-	PMT	1891 Oct     # Prague Mean Time
+			1:00	C-Eur	CE%sT	1944 Sep 17 2:00s
+			1:00	Czech	CE%sT	1979
+			1:00	EU	CE%sT
+Rule	Denmark	1916	only	-	May	14	23:00	1:00	S
+Rule	Denmark	1916	only	-	Sep	30	23:00	0	-
+Rule	Denmark	1940	only	-	May	15	 0:00	1:00	S
+Rule	Denmark	1945	only	-	Apr	 2	 2:00s	1:00	S
+Rule	Denmark	1945	only	-	Aug	15	 2:00s	0	-
+Rule	Denmark	1946	only	-	May	 1	 2:00s	1:00	S
+Rule	Denmark	1946	only	-	Sep	 1	 2:00s	0	-
+Rule	Denmark	1947	only	-	May	 4	 2:00s	1:00	S
+Rule	Denmark	1947	only	-	Aug	10	 2:00s	0	-
+Rule	Denmark	1948	only	-	May	 9	 2:00s	1:00	S
+Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
+Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
+			 0:50:20 -	CMT	1894 Jan  1 # Copenhagen MT
+			 1:00	Denmark	CE%sT	1942 Nov  2 2:00s
+			 1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			 1:00	Denmark	CE%sT	1980
+			 1:00	EU	CE%sT
+Zone Atlantic/Faroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
+			 0:00	-	WET	1981
+			 0:00	EU	WE%sT
+Rule	Thule	1991	1992	-	Mar	lastSun	2:00	1:00	D
+Rule	Thule	1991	1992	-	Sep	lastSun	2:00	0	S
+Rule	Thule	1993	2006	-	Apr	Sun>=1	2:00	1:00	D
+Rule	Thule	1993	2006	-	Oct	lastSun	2:00	0	S
+Rule	Thule	2007	max	-	Mar	Sun>=8	2:00	1:00	D
+Rule	Thule	2007	max	-	Nov	Sun>=1	2:00	0	S
+Zone America/Danmarkshavn -1:14:40 -	LMT	1916 Jul 28
+			-3:00	-	WGT	1980 Apr  6 2:00
+			-3:00	EU	WG%sT	1996
+			0:00	-	GMT
+Zone America/Scoresbysund -1:27:52 -	LMT	1916 Jul 28 # Ittoqqortoormiit
+			-2:00	-	CGT	1980 Apr  6 2:00
+			-2:00	C-Eur	CG%sT	1981 Mar 29
+			-1:00	EU	EG%sT
+Zone America/Godthab	-3:26:56 -	LMT	1916 Jul 28 # Nuuk
+			-3:00	-	WGT	1980 Apr  6 2:00
+			-3:00	EU	WG%sT
+Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
+			-4:00	Thule	A%sT
+Zone	Europe/Tallinn	1:39:00	-	LMT	1880
+			1:39:00	-	TMT	1918 Feb # Tallinn Mean Time
+			1:00	C-Eur	CE%sT	1919 Jul
+			1:39:00	-	TMT	1921 May
+			2:00	-	EET	1940 Aug  6
+			3:00	-	MSK	1941 Sep 15
+			1:00	C-Eur	CE%sT	1944 Sep 22
+			3:00	Russia	MSK/MSD	1989 Mar 26 2:00s
+			2:00	1:00	EEST	1989 Sep 24 2:00s
+			2:00	C-Eur	EE%sT	1998 Sep 22
+			2:00	EU	EE%sT	1999 Nov  1
+			2:00	-	EET	2002 Feb 21
+			2:00	EU	EE%sT
+Rule	Finland	1942	only	-	Apr	3	0:00	1:00	S
+Rule	Finland	1942	only	-	Oct	3	0:00	0	-
+Zone	Europe/Helsinki	1:39:52 -	LMT	1878 May 31
+			1:39:52	-	HMT	1921 May    # Helsinki Mean Time
+			2:00	Finland	EE%sT	1981 Mar 29 2:00
+			2:00	EU	EE%sT
+Link	Europe/Helsinki	Europe/Mariehamn
+Rule	France	1916	only	-	Jun	14	23:00s	1:00	S
+Rule	France	1916	1919	-	Oct	Sun>=1	23:00s	0	-
+Rule	France	1917	only	-	Mar	24	23:00s	1:00	S
+Rule	France	1918	only	-	Mar	 9	23:00s	1:00	S
+Rule	France	1919	only	-	Mar	 1	23:00s	1:00	S
+Rule	France	1920	only	-	Feb	14	23:00s	1:00	S
+Rule	France	1920	only	-	Oct	23	23:00s	0	-
+Rule	France	1921	only	-	Mar	14	23:00s	1:00	S
+Rule	France	1921	only	-	Oct	25	23:00s	0	-
+Rule	France	1922	only	-	Mar	25	23:00s	1:00	S
+Rule	France	1922	1938	-	Oct	Sat>=1	23:00s	0	-
+Rule	France	1923	only	-	May	26	23:00s	1:00	S
+Rule	France	1924	only	-	Mar	29	23:00s	1:00	S
+Rule	France	1925	only	-	Apr	 4	23:00s	1:00	S
+Rule	France	1926	only	-	Apr	17	23:00s	1:00	S
+Rule	France	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	France	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	France	1929	only	-	Apr	20	23:00s	1:00	S
+Rule	France	1930	only	-	Apr	12	23:00s	1:00	S
+Rule	France	1931	only	-	Apr	18	23:00s	1:00	S
+Rule	France	1932	only	-	Apr	 2	23:00s	1:00	S
+Rule	France	1933	only	-	Mar	25	23:00s	1:00	S
+Rule	France	1934	only	-	Apr	 7	23:00s	1:00	S
+Rule	France	1935	only	-	Mar	30	23:00s	1:00	S
+Rule	France	1936	only	-	Apr	18	23:00s	1:00	S
+Rule	France	1937	only	-	Apr	 3	23:00s	1:00	S
+Rule	France	1938	only	-	Mar	26	23:00s	1:00	S
+Rule	France	1939	only	-	Apr	15	23:00s	1:00	S
+Rule	France	1939	only	-	Nov	18	23:00s	0	-
+Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
+Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
+Rule	France	1941	only	-	Oct	 6	 0:00	1:00	S
+Rule	France	1942	only	-	Mar	 9	 0:00	2:00	M
+Rule	France	1942	only	-	Nov	 2	 3:00	1:00	S
+Rule	France	1943	only	-	Mar	29	 2:00	2:00	M
+Rule	France	1943	only	-	Oct	 4	 3:00	1:00	S
+Rule	France	1944	only	-	Apr	 3	 2:00	2:00	M
+Rule	France	1944	only	-	Oct	 8	 1:00	1:00	S
+Rule	France	1945	only	-	Apr	 2	 2:00	2:00	M
+Rule	France	1945	only	-	Sep	16	 3:00	0	-
+Rule	France	1976	only	-	Mar	28	 1:00	1:00	S
+Rule	France	1976	only	-	Sep	26	 1:00	0	-
+Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
+			0:09:21	-	PMT	1911 Mar 11  0:01  # Paris MT
+			0:00	France	WE%sT	1940 Jun 14 23:00
+			1:00	C-Eur	CE%sT	1944 Aug 25
+			0:00	France	WE%sT	1945 Sep 16  3:00
+			1:00	France	CE%sT	1977
+			1:00	EU	CE%sT
+Rule	Germany	1946	only	-	Apr	14	2:00s	1:00	S
+Rule	Germany	1946	only	-	Oct	 7	2:00s	0	-
+Rule	Germany	1947	1949	-	Oct	Sun>=1	2:00s	0	-
+Rule	Germany	1947	only	-	Apr	 6	3:00s	1:00	S
+Rule	Germany	1947	only	-	May	11	2:00s	2:00	M
+Rule	Germany	1947	only	-	Jun	29	3:00	1:00	S
+Rule	Germany	1948	only	-	Apr	18	2:00s	1:00	S
+Rule	Germany	1949	only	-	Apr	10	2:00s	1:00	S
+Rule SovietZone	1945	only	-	May	24	2:00	2:00	M # Midsummer
+Rule SovietZone	1945	only	-	Sep	24	3:00	1:00	S
+Rule SovietZone	1945	only	-	Nov	18	2:00s	0	-
+Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
+			1:00	C-Eur	CE%sT	1945 May 24 2:00
+			1:00 SovietZone	CE%sT	1946
+			1:00	Germany	CE%sT	1980
+			1:00	EU	CE%sT
+Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2 0:00s
+			0:00	GB-Eire	%s	1957 Apr 14 2:00
+			1:00	-	CET	1982
+			1:00	EU	CE%sT
+Rule	Greece	1932	only	-	Jul	 7	0:00	1:00	S
+Rule	Greece	1932	only	-	Sep	 1	0:00	0	-
+Rule	Greece	1941	only	-	Apr	 7	0:00	1:00	S
+Rule	Greece	1942	only	-	Nov	 2	3:00	0	-
+Rule	Greece	1943	only	-	Mar	30	0:00	1:00	S
+Rule	Greece	1943	only	-	Oct	 4	0:00	0	-
+Rule	Greece	1952	only	-	Jul	 1	0:00	1:00	S
+Rule	Greece	1952	only	-	Nov	 2	0:00	0	-
+Rule	Greece	1975	only	-	Apr	12	0:00s	1:00	S
+Rule	Greece	1975	only	-	Nov	26	0:00s	0	-
+Rule	Greece	1976	only	-	Apr	11	2:00s	1:00	S
+Rule	Greece	1976	only	-	Oct	10	2:00s	0	-
+Rule	Greece	1977	1978	-	Apr	Sun>=1	2:00s	1:00	S
+Rule	Greece	1977	only	-	Sep	26	2:00s	0	-
+Rule	Greece	1978	only	-	Sep	24	4:00	0	-
+Rule	Greece	1979	only	-	Apr	 1	9:00	1:00	S
+Rule	Greece	1979	only	-	Sep	29	2:00	0	-
+Rule	Greece	1980	only	-	Apr	 1	0:00	1:00	S
+Rule	Greece	1980	only	-	Sep	28	0:00	0	-
+Zone	Europe/Athens	1:34:52 -	LMT	1895 Sep 14
+			1:34:52	-	AMT	1916 Jul 28 0:01     # Athens MT
+			2:00	Greece	EE%sT	1941 Apr 30
+			1:00	Greece	CE%sT	1944 Apr  4
+			2:00	Greece	EE%sT	1981
+			# Shanks & Pottenger say it switched to C-Eur in 1981;
+			# go with EU instead, since Greece joined it on Jan 1.
+			2:00	EU	EE%sT
+Rule	Hungary	1918	only	-	Apr	 1	 3:00	1:00	S
+Rule	Hungary	1918	only	-	Sep	29	 3:00	0	-
+Rule	Hungary	1919	only	-	Apr	15	 3:00	1:00	S
+Rule	Hungary	1919	only	-	Sep	15	 3:00	0	-
+Rule	Hungary	1920	only	-	Apr	 5	 3:00	1:00	S
+Rule	Hungary	1920	only	-	Sep	30	 3:00	0	-
+Rule	Hungary	1945	only	-	May	 1	23:00	1:00	S
+Rule	Hungary	1945	only	-	Nov	 3	 0:00	0	-
+Rule	Hungary	1946	only	-	Mar	31	 2:00s	1:00	S
+Rule	Hungary	1946	1949	-	Oct	Sun>=1	 2:00s	0	-
+Rule	Hungary	1947	1949	-	Apr	Sun>=4	 2:00s	1:00	S
+Rule	Hungary	1950	only	-	Apr	17	 2:00s	1:00	S
+Rule	Hungary	1950	only	-	Oct	23	 2:00s	0	-
+Rule	Hungary	1954	1955	-	May	23	 0:00	1:00	S
+Rule	Hungary	1954	1955	-	Oct	 3	 0:00	0	-
+Rule	Hungary	1956	only	-	Jun	Sun>=1	 0:00	1:00	S
+Rule	Hungary	1956	only	-	Sep	lastSun	 0:00	0	-
+Rule	Hungary	1957	only	-	Jun	Sun>=1	 1:00	1:00	S
+Rule	Hungary	1957	only	-	Sep	lastSun	 3:00	0	-
+Rule	Hungary	1980	only	-	Apr	 6	 1:00	1:00	S
+Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
+			1:00	C-Eur	CE%sT	1918
+			1:00	Hungary	CE%sT	1941 Apr  6  2:00
+			1:00	C-Eur	CE%sT	1945
+			1:00	Hungary	CE%sT	1980 Sep 28  2:00s
+			1:00	EU	CE%sT
+Rule	Iceland	1917	1918	-	Feb	19	23:00	1:00	S
+Rule	Iceland	1917	only	-	Oct	21	 1:00	0	-
+Rule	Iceland	1918	only	-	Nov	16	 1:00	0	-
+Rule	Iceland	1939	only	-	Apr	29	23:00	1:00	S
+Rule	Iceland	1939	only	-	Nov	29	 2:00	0	-
+Rule	Iceland	1940	only	-	Feb	25	 2:00	1:00	S
+Rule	Iceland	1940	only	-	Nov	 3	 2:00	0	-
+Rule	Iceland	1941	only	-	Mar	 2	 1:00s	1:00	S
+Rule	Iceland	1941	only	-	Nov	 2	 1:00s	0	-
+Rule	Iceland	1942	only	-	Mar	 8	 1:00s	1:00	S
+Rule	Iceland	1942	only	-	Oct	25	 1:00s	0	-
+Rule	Iceland	1943	1946	-	Mar	Sun>=1	 1:00s	1:00	S
+Rule	Iceland	1943	1948	-	Oct	Sun>=22	 1:00s	0	-
+Rule	Iceland	1947	1967	-	Apr	Sun>=1	 1:00s	1:00	S
+Rule	Iceland	1949	only	-	Oct	30	 1:00s	0	-
+Rule	Iceland	1950	1966	-	Oct	Sun>=22	 1:00s	0	-
+Rule	Iceland	1967	only	-	Oct	29	 1:00s	0	-
+Zone Atlantic/Reykjavik	-1:27:24 -	LMT	1837
+			-1:27:48 -	RMT	1908 # Reykjavik Mean Time?
+			-1:00	Iceland	IS%sT	1968 Apr 7 1:00s
+			 0:00	-	GMT
+Rule	Italy	1916	only	-	Jun	 3	0:00s	1:00	S
+Rule	Italy	1916	only	-	Oct	 1	0:00s	0	-
+Rule	Italy	1917	only	-	Apr	 1	0:00s	1:00	S
+Rule	Italy	1917	only	-	Sep	30	0:00s	0	-
+Rule	Italy	1918	only	-	Mar	10	0:00s	1:00	S
+Rule	Italy	1918	1919	-	Oct	Sun>=1	0:00s	0	-
+Rule	Italy	1919	only	-	Mar	 2	0:00s	1:00	S
+Rule	Italy	1920	only	-	Mar	21	0:00s	1:00	S
+Rule	Italy	1920	only	-	Sep	19	0:00s	0	-
+Rule	Italy	1940	only	-	Jun	15	0:00s	1:00	S
+Rule	Italy	1944	only	-	Sep	17	0:00s	0	-
+Rule	Italy	1945	only	-	Apr	 2	2:00	1:00	S
+Rule	Italy	1945	only	-	Sep	15	0:00s	0	-
+Rule	Italy	1946	only	-	Mar	17	2:00s	1:00	S
+Rule	Italy	1946	only	-	Oct	 6	2:00s	0	-
+Rule	Italy	1947	only	-	Mar	16	0:00s	1:00	S
+Rule	Italy	1947	only	-	Oct	 5	0:00s	0	-
+Rule	Italy	1948	only	-	Feb	29	2:00s	1:00	S
+Rule	Italy	1948	only	-	Oct	 3	2:00s	0	-
+Rule	Italy	1966	1968	-	May	Sun>=22	0:00	1:00	S
+Rule	Italy	1966	1969	-	Sep	Sun>=22	0:00	0	-
+Rule	Italy	1969	only	-	Jun	 1	0:00	1:00	S
+Rule	Italy	1970	only	-	May	31	0:00	1:00	S
+Rule	Italy	1970	only	-	Sep	lastSun	0:00	0	-
+Rule	Italy	1971	1972	-	May	Sun>=22	0:00	1:00	S
+Rule	Italy	1971	only	-	Sep	lastSun	1:00	0	-
+Rule	Italy	1972	only	-	Oct	 1	0:00	0	-
+Rule	Italy	1973	only	-	Jun	 3	0:00	1:00	S
+Rule	Italy	1973	1974	-	Sep	lastSun	0:00	0	-
+Rule	Italy	1974	only	-	May	26	0:00	1:00	S
+Rule	Italy	1975	only	-	Jun	 1	0:00s	1:00	S
+Rule	Italy	1975	1977	-	Sep	lastSun	0:00s	0	-
+Rule	Italy	1976	only	-	May	30	0:00s	1:00	S
+Rule	Italy	1977	1979	-	May	Sun>=22	0:00s	1:00	S
+Rule	Italy	1978	only	-	Oct	 1	0:00s	0	-
+Rule	Italy	1979	only	-	Sep	30	0:00s	0	-
+Zone	Europe/Rome	0:49:56 -	LMT	1866 Sep 22
+			0:49:56	-	RMT	1893 Nov  1 0:00s # Rome Mean
+			1:00	Italy	CE%sT	1942 Nov  2 2:00s
+			1:00	C-Eur	CE%sT	1944 Jul
+			1:00	Italy	CE%sT	1980
+			1:00	EU	CE%sT
+Link	Europe/Rome	Europe/Vatican
+Link	Europe/Rome	Europe/San_Marino
+Rule	Latvia	1989	1996	-	Mar	lastSun	 2:00s	1:00	S
+Rule	Latvia	1989	1996	-	Sep	lastSun	 2:00s	0	-
+Zone	Europe/Riga	1:36:24	-	LMT	1880
+			1:36:24	-	RMT	1918 Apr 15 2:00 #Riga Mean Time
+			1:36:24	1:00	LST	1918 Sep 16 3:00 #Latvian Summer
+			1:36:24	-	RMT	1919 Apr  1 2:00
+			1:36:24	1:00	LST	1919 May 22 3:00
+			1:36:24	-	RMT	1926 May 11
+			2:00	-	EET	1940 Aug  5
+			3:00	-	MSK	1941 Jul
+			1:00	C-Eur	CE%sT	1944 Oct 13
+			3:00	Russia	MSK/MSD	1989 Mar lastSun 2:00s
+			2:00	1:00	EEST	1989 Sep lastSun 2:00s
+			2:00	Latvia	EE%sT	1997 Jan 21
+			2:00	EU	EE%sT	2000 Feb 29
+			2:00	-	EET	2001 Jan  2
+			2:00	EU	EE%sT
+Zone	Europe/Vaduz	0:38:04 -	LMT	1894 Jun
+			1:00	-	CET	1981
+			1:00	EU	CE%sT
+Zone	Europe/Vilnius	1:41:16	-	LMT	1880
+			1:24:00	-	WMT	1917	    # Warsaw Mean Time
+			1:35:36	-	KMT	1919 Oct 10 # Kaunas Mean Time
+			1:00	-	CET	1920 Jul 12
+			2:00	-	EET	1920 Oct  9
+			1:00	-	CET	1940 Aug  3
+			3:00	-	MSK	1941 Jun 24
+			1:00	C-Eur	CE%sT	1944 Aug
+			3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
+			2:00	1:00	EEST	1991 Sep 29 2:00s
+			2:00	C-Eur	EE%sT	1998
+			2:00	-	EET	1998 Mar 29 1:00u
+			1:00	EU	CE%sT	1999 Oct 31 1:00u
+			2:00	-	EET	2003 Jan  1
+			2:00	EU	EE%sT
+Rule	Lux	1916	only	-	May	14	23:00	1:00	S
+Rule	Lux	1916	only	-	Oct	 1	 1:00	0	-
+Rule	Lux	1917	only	-	Apr	28	23:00	1:00	S
+Rule	Lux	1917	only	-	Sep	17	 1:00	0	-
+Rule	Lux	1918	only	-	Apr	Mon>=15	 2:00s	1:00	S
+Rule	Lux	1918	only	-	Sep	Mon>=15	 2:00s	0	-
+Rule	Lux	1919	only	-	Mar	 1	23:00	1:00	S
+Rule	Lux	1919	only	-	Oct	 5	 3:00	0	-
+Rule	Lux	1920	only	-	Feb	14	23:00	1:00	S
+Rule	Lux	1920	only	-	Oct	24	 2:00	0	-
+Rule	Lux	1921	only	-	Mar	14	23:00	1:00	S
+Rule	Lux	1921	only	-	Oct	26	 2:00	0	-
+Rule	Lux	1922	only	-	Mar	25	23:00	1:00	S
+Rule	Lux	1922	only	-	Oct	Sun>=2	 1:00	0	-
+Rule	Lux	1923	only	-	Apr	21	23:00	1:00	S
+Rule	Lux	1923	only	-	Oct	Sun>=2	 2:00	0	-
+Rule	Lux	1924	only	-	Mar	29	23:00	1:00	S
+Rule	Lux	1924	1928	-	Oct	Sun>=2	 1:00	0	-
+Rule	Lux	1925	only	-	Apr	 5	23:00	1:00	S
+Rule	Lux	1926	only	-	Apr	17	23:00	1:00	S
+Rule	Lux	1927	only	-	Apr	 9	23:00	1:00	S
+Rule	Lux	1928	only	-	Apr	14	23:00	1:00	S
+Rule	Lux	1929	only	-	Apr	20	23:00	1:00	S
+Zone Europe/Luxembourg	0:24:36 -	LMT	1904 Jun
+			1:00	Lux	CE%sT	1918 Nov 25
+			0:00	Lux	WE%sT	1929 Oct  6 2:00s
+			0:00	Belgium	WE%sT	1940 May 14 3:00
+			1:00	C-Eur	WE%sT	1944 Sep 18 3:00
+			1:00	Belgium	CE%sT	1977
+			1:00	EU	CE%sT
+Rule	Malta	1973	only	-	Mar	31	0:00s	1:00	S
+Rule	Malta	1973	only	-	Sep	29	0:00s	0	-
+Rule	Malta	1974	only	-	Apr	21	0:00s	1:00	S
+Rule	Malta	1974	only	-	Sep	16	0:00s	0	-
+Rule	Malta	1975	1979	-	Apr	Sun>=15	2:00	1:00	S
+Rule	Malta	1975	1980	-	Sep	Sun>=15	2:00	0	-
+Rule	Malta	1980	only	-	Mar	31	2:00	1:00	S
+Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2 0:00s # Valletta
+			1:00	Italy	CE%sT	1942 Nov  2 2:00s
+			1:00	C-Eur	CE%sT	1945 Apr  2 2:00s
+			1:00	Italy	CE%sT	1973 Mar 31
+			1:00	Malta	CE%sT	1981
+			1:00	EU	CE%sT
+Zone	Europe/Chisinau	1:55:20 -	LMT	1880
+			1:55	-	CMT	1918 Feb 15 # Chisinau MT
+			1:44:24	-	BMT	1931 Jul 24 # Bucharest MT
+			2:00	Romania	EE%sT	1940 Aug 15
+			2:00	1:00	EEST	1941 Jul 17
+			1:00	C-Eur	CE%sT	1944 Aug 24
+			3:00	Russia	MSK/MSD	1990
+			3:00	-	MSK	1990 May 6
+			2:00	-	EET	1991
+			2:00	Russia	EE%sT	1992
+			2:00	E-Eur	EE%sT	1997
+			2:00	EU	EE%sT
+Zone	Europe/Monaco	0:29:32 -	LMT	1891 Mar 15
+			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
+			0:00	France	WE%sT	1945 Sep 16 3:00
+			1:00	France	CE%sT	1977
+			1:00	EU	CE%sT
+Rule	Neth	1916	only	-	May	 1	0:00	1:00	NST	# Netherlands Summer Time
+Rule	Neth	1916	only	-	Oct	 1	0:00	0	AMT	# Amsterdam Mean Time
+Rule	Neth	1917	only	-	Apr	16	2:00s	1:00	NST
+Rule	Neth	1917	only	-	Sep	17	2:00s	0	AMT
+Rule	Neth	1918	1921	-	Apr	Mon>=1	2:00s	1:00	NST
+Rule	Neth	1918	1921	-	Sep	lastMon	2:00s	0	AMT
+Rule	Neth	1922	only	-	Mar	lastSun	2:00s	1:00	NST
+Rule	Neth	1922	1936	-	Oct	Sun>=2	2:00s	0	AMT
+Rule	Neth	1923	only	-	Jun	Fri>=1	2:00s	1:00	NST
+Rule	Neth	1924	only	-	Mar	lastSun	2:00s	1:00	NST
+Rule	Neth	1925	only	-	Jun	Fri>=1	2:00s	1:00	NST
+Rule	Neth	1926	1931	-	May	15	2:00s	1:00	NST
+Rule	Neth	1932	only	-	May	22	2:00s	1:00	NST
+Rule	Neth	1933	1936	-	May	15	2:00s	1:00	NST
+Rule	Neth	1937	only	-	May	22	2:00s	1:00	NST
+Rule	Neth	1937	only	-	Jul	 1	0:00	1:00	S
+Rule	Neth	1937	1939	-	Oct	Sun>=2	2:00s	0	-
+Rule	Neth	1938	1939	-	May	15	2:00s	1:00	S
+Rule	Neth	1945	only	-	Apr	 2	2:00s	1:00	S
+Rule	Neth	1945	only	-	Sep	16	2:00s	0	-
+Zone Europe/Amsterdam	0:19:32 -	LMT	1835
+			0:19:32	Neth	%s	1937 Jul  1
+			0:20	Neth	NE%sT	1940 May 16 0:00 # Dutch Time
+			1:00	C-Eur	CE%sT	1945 Apr  2 2:00
+			1:00	Neth	CE%sT	1977
+			1:00	EU	CE%sT
+Rule	Norway	1916	only	-	May	22	1:00	1:00	S
+Rule	Norway	1916	only	-	Sep	30	0:00	0	-
+Rule	Norway	1945	only	-	Apr	 2	2:00s	1:00	S
+Rule	Norway	1945	only	-	Oct	 1	2:00s	0	-
+Rule	Norway	1959	1964	-	Mar	Sun>=15	2:00s	1:00	S
+Rule	Norway	1959	1965	-	Sep	Sun>=15	2:00s	0	-
+Rule	Norway	1965	only	-	Apr	25	2:00s	1:00	S
+Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
+			1:00	Norway	CE%sT	1940 Aug 10 23:00
+			1:00	C-Eur	CE%sT	1945 Apr  2  2:00
+			1:00	Norway	CE%sT	1980
+			1:00	EU	CE%sT
+Link	Europe/Oslo	Arctic/Longyearbyen
+Rule	Poland	1918	1919	-	Sep	16	2:00s	0	-
+Rule	Poland	1919	only	-	Apr	15	2:00s	1:00	S
+Rule	Poland	1944	only	-	Apr	 3	2:00s	1:00	S
+Rule	Poland	1944	only	-	Oct	 4	2:00	0	-
+Rule	Poland	1945	only	-	Apr	29	0:00	1:00	S
+Rule	Poland	1945	only	-	Nov	 1	0:00	0	-
+Rule	Poland	1946	only	-	Apr	14	0:00s	1:00	S
+Rule	Poland	1946	only	-	Oct	 7	2:00s	0	-
+Rule	Poland	1947	only	-	May	 4	2:00s	1:00	S
+Rule	Poland	1947	1949	-	Oct	Sun>=1	2:00s	0	-
+Rule	Poland	1948	only	-	Apr	18	2:00s	1:00	S
+Rule	Poland	1949	only	-	Apr	10	2:00s	1:00	S
+Rule	Poland	1957	only	-	Jun	 2	1:00s	1:00	S
+Rule	Poland	1957	1958	-	Sep	lastSun	1:00s	0	-
+Rule	Poland	1958	only	-	Mar	30	1:00s	1:00	S
+Rule	Poland	1959	only	-	May	31	1:00s	1:00	S
+Rule	Poland	1959	1961	-	Oct	Sun>=1	1:00s	0	-
+Rule	Poland	1960	only	-	Apr	 3	1:00s	1:00	S
+Rule	Poland	1961	1964	-	May	lastSun	1:00s	1:00	S
+Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
+Zone	Europe/Warsaw	1:24:00 -	LMT	1880
+			1:24:00	-	WMT	1915 Aug  5   # Warsaw Mean Time
+			1:00	C-Eur	CE%sT	1918 Sep 16 3:00
+			2:00	Poland	EE%sT	1922 Jun
+			1:00	Poland	CE%sT	1940 Jun 23 2:00
+			1:00	C-Eur	CE%sT	1944 Oct
+			1:00	Poland	CE%sT	1977
+			1:00	W-Eur	CE%sT	1988
+			1:00	EU	CE%sT
+Rule	Port	1916	only	-	Jun	17	23:00	1:00	S
+Rule	Port	1916	only	-	Nov	 1	 1:00	0	-
+Rule	Port	1917	only	-	Feb	28	23:00s	1:00	S
+Rule	Port	1917	1921	-	Oct	14	23:00s	0	-
+Rule	Port	1918	only	-	Mar	 1	23:00s	1:00	S
+Rule	Port	1919	only	-	Feb	28	23:00s	1:00	S
+Rule	Port	1920	only	-	Feb	29	23:00s	1:00	S
+Rule	Port	1921	only	-	Feb	28	23:00s	1:00	S
+Rule	Port	1924	only	-	Apr	16	23:00s	1:00	S
+Rule	Port	1924	only	-	Oct	14	23:00s	0	-
+Rule	Port	1926	only	-	Apr	17	23:00s	1:00	S
+Rule	Port	1926	1929	-	Oct	Sat>=1	23:00s	0	-
+Rule	Port	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	Port	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	Port	1929	only	-	Apr	20	23:00s	1:00	S
+Rule	Port	1931	only	-	Apr	18	23:00s	1:00	S
+Rule	Port	1931	1932	-	Oct	Sat>=1	23:00s	0	-
+Rule	Port	1932	only	-	Apr	 2	23:00s	1:00	S
+Rule	Port	1934	only	-	Apr	 7	23:00s	1:00	S
+Rule	Port	1934	1938	-	Oct	Sat>=1	23:00s	0	-
+Rule	Port	1935	only	-	Mar	30	23:00s	1:00	S
+Rule	Port	1936	only	-	Apr	18	23:00s	1:00	S
+Rule	Port	1937	only	-	Apr	 3	23:00s	1:00	S
+Rule	Port	1938	only	-	Mar	26	23:00s	1:00	S
+Rule	Port	1939	only	-	Apr	15	23:00s	1:00	S
+Rule	Port	1939	only	-	Nov	18	23:00s	0	-
+Rule	Port	1940	only	-	Feb	24	23:00s	1:00	S
+Rule	Port	1940	1941	-	Oct	 5	23:00s	0	-
+Rule	Port	1941	only	-	Apr	 5	23:00s	1:00	S
+Rule	Port	1942	1945	-	Mar	Sat>=8	23:00s	1:00	S
+Rule	Port	1942	only	-	Apr	25	22:00s	2:00	M # Midsummer
+Rule	Port	1942	only	-	Aug	15	22:00s	1:00	S
+Rule	Port	1942	1945	-	Oct	Sat>=24	23:00s	0	-
+Rule	Port	1943	only	-	Apr	17	22:00s	2:00	M
+Rule	Port	1943	1945	-	Aug	Sat>=25	22:00s	1:00	S
+Rule	Port	1944	1945	-	Apr	Sat>=21	22:00s	2:00	M
+Rule	Port	1946	only	-	Apr	Sat>=1	23:00s	1:00	S
+Rule	Port	1946	only	-	Oct	Sat>=1	23:00s	0	-
+Rule	Port	1947	1949	-	Apr	Sun>=1	 2:00s	1:00	S
+Rule	Port	1947	1949	-	Oct	Sun>=1	 2:00s	0	-
+Rule	Port	1951	1965	-	Apr	Sun>=1	 2:00s	1:00	S
+Rule	Port	1951	1965	-	Oct	Sun>=1	 2:00s	0	-
+Rule	Port	1977	only	-	Mar	27	 0:00s	1:00	S
+Rule	Port	1977	only	-	Sep	25	 0:00s	0	-
+Rule	Port	1978	1979	-	Apr	Sun>=1	 0:00s	1:00	S
+Rule	Port	1978	only	-	Oct	 1	 0:00s	0	-
+Rule	Port	1979	1982	-	Sep	lastSun	 1:00s	0	-
+Rule	Port	1980	only	-	Mar	lastSun	 0:00s	1:00	S
+Rule	Port	1981	1982	-	Mar	lastSun	 1:00s	1:00	S
+Rule	Port	1983	only	-	Mar	lastSun	 2:00s	1:00	S
+Zone	Europe/Lisbon	-0:36:32 -	LMT	1884
+			-0:36:32 -	LMT	1912 Jan  1  # Lisbon Mean Time
+			 0:00	Port	WE%sT	1966 Apr  3 2:00
+			 1:00	-	CET	1976 Sep 26 1:00
+			 0:00	Port	WE%sT	1983 Sep 25 1:00s
+			 0:00	W-Eur	WE%sT	1992 Sep 27 1:00s
+			 1:00	EU	CE%sT	1996 Mar 31 1:00u
+			 0:00	EU	WE%sT
+Zone Atlantic/Azores	-1:42:40 -	LMT	1884		# Ponta Delgada
+			-1:54:32 -	HMT	1911 May 24  # Horta Mean Time
+			-2:00	Port	AZO%sT	1966 Apr  3 2:00 # Azores Time
+			-1:00	Port	AZO%sT	1983 Sep 25 1:00s
+			-1:00	W-Eur	AZO%sT	1992 Sep 27 1:00s
+			 0:00	EU	WE%sT	1993 Mar 28 1:00u
+			-1:00	EU	AZO%sT
+Zone Atlantic/Madeira	-1:07:36 -	LMT	1884		# Funchal
+			-1:07:36 -	FMT	1911 May 24  # Funchal Mean Time
+			-1:00	Port	MAD%sT	1966 Apr  3 2:00 # Madeira Time
+			 0:00	Port	WE%sT	1983 Sep 25 1:00s
+			 0:00	EU	WE%sT
+Rule	Romania	1932	only	-	May	21	 0:00s	1:00	S
+Rule	Romania	1932	1939	-	Oct	Sun>=1	 0:00s	0	-
+Rule	Romania	1933	1939	-	Apr	Sun>=2	 0:00s	1:00	S
+Rule	Romania	1979	only	-	May	27	 0:00	1:00	S
+Rule	Romania	1979	only	-	Sep	lastSun	 0:00	0	-
+Rule	Romania	1980	only	-	Apr	 5	23:00	1:00	S
+Rule	Romania	1980	only	-	Sep	lastSun	 1:00	0	-
+Rule	Romania	1991	1993	-	Mar	lastSun	 0:00s	1:00	S
+Rule	Romania	1991	1993	-	Sep	lastSun	 0:00s	0	-
+Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
+			1:44:24	-	BMT	1931 Jul 24	# Bucharest MT
+			2:00	Romania	EE%sT	1981 Mar 29 2:00s
+			2:00	C-Eur	EE%sT	1991
+			2:00	Romania	EE%sT	1994
+			2:00	E-Eur	EE%sT	1997
+			2:00	EU	EE%sT
+Zone Europe/Kaliningrad	 1:22:00 -	LMT	1893 Apr
+			 1:00	C-Eur	CE%sT	1945
+			 2:00	Poland	CE%sT	1946
+			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
+			 2:00	Russia	EE%sT
+Zone Europe/Moscow	 2:30:20 -	LMT	1880
+			 2:30	-	MMT	1916 Jul  3 # Moscow Mean Time
+			 2:30:48 Russia	%s	1919 Jul  1 2:00
+			 3:00	Russia	MSK/MSD	1922 Oct
+			 2:00	-	EET	1930 Jun 21
+			 3:00	Russia	MSK/MSD	1991 Mar 31 2:00s
+			 2:00	Russia	EE%sT	1992 Jan 19 2:00s
+			 3:00	Russia	MSK/MSD
+Zone Europe/Volgograd	 2:57:40 -	LMT	1920 Jan  3
+			 3:00	-	TSAT	1925 Apr  6 # Tsaritsyn Time
+			 3:00	-	STAT	1930 Jun 21 # Stalingrad Time
+			 4:00	-	STAT	1961 Nov 11
+			 4:00	Russia	VOL%sT	1989 Mar 26 2:00s # Volgograd T
+			 3:00	Russia	VOL%sT	1991 Mar 31 2:00s
+			 4:00	-	VOLT	1992 Mar 29 2:00s
+			 3:00	Russia	VOL%sT
+Zone Europe/Samara	 3:20:36 -	LMT	1919 Jul  1 2:00
+			 3:00	-	SAMT	1930 Jun 21
+			 4:00	-	SAMT	1935 Jan 27
+			 4:00	Russia	KUY%sT	1989 Mar 26 2:00s # Kuybyshev
+			 3:00	Russia	KUY%sT	1991 Mar 31 2:00s
+			 2:00	Russia	KUY%sT	1991 Sep 29 2:00s
+			 3:00	-	KUYT	1991 Oct 20 3:00
+			 4:00	Russia	SAM%sT	# Samara Time
+Zone Asia/Yekaterinburg	 4:02:24 -	LMT	1919 Jul 15 4:00
+			 4:00	-	SVET	1930 Jun 21 # Sverdlovsk Time
+			 5:00	Russia	SVE%sT	1991 Mar 31 2:00s
+			 4:00	Russia	SVE%sT	1992 Jan 19 2:00s
+			 5:00	Russia	YEK%sT	# Yekaterinburg Time
+Zone Asia/Omsk		 4:53:36 -	LMT	1919 Nov 14
+			 5:00	-	OMST	1930 Jun 21 # Omsk TIme
+			 6:00	Russia	OMS%sT	1991 Mar 31 2:00s
+			 5:00	Russia	OMS%sT	1992 Jan 19 2:00s
+			 6:00	Russia	OMS%sT
+Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14 6:00
+			 6:00	-	NOVT	1930 Jun 21 # Novosibirsk Time
+			 7:00	Russia	NOV%sT	1991 Mar 31 2:00s
+			 6:00	Russia	NOV%sT	1992 Jan 19 2:00s
+			 7:00	Russia	NOV%sT	1993 May 23 # say Shanks & P.
+			 6:00	Russia	NOV%sT
+Zone Asia/Krasnoyarsk	 6:11:20 -	LMT	1920 Jan  6
+			 6:00	-	KRAT	1930 Jun 21 # Krasnoyarsk Time
+			 7:00	Russia	KRA%sT	1991 Mar 31 2:00s
+			 6:00	Russia	KRA%sT	1992 Jan 19 2:00s
+			 7:00	Russia	KRA%sT
+Zone Asia/Irkutsk	 6:57:20 -	LMT	1880
+			 6:57:20 -	IMT	1920 Jan 25 # Irkutsk Mean Time
+			 7:00	-	IRKT	1930 Jun 21 # Irkutsk Time
+			 8:00	Russia	IRK%sT	1991 Mar 31 2:00s
+			 7:00	Russia	IRK%sT	1992 Jan 19 2:00s
+			 8:00	Russia	IRK%sT
+Zone Asia/Yakutsk	 8:38:40 -	LMT	1919 Dec 15
+			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
+			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
+			 8:00	Russia	YAK%sT	1992 Jan 19 2:00s
+			 9:00	Russia	YAK%sT
+Zone Asia/Vladivostok	 8:47:44 -	LMT	1922 Nov 15
+			 9:00	-	VLAT	1930 Jun 21 # Vladivostok Time
+			10:00	Russia	VLA%sT	1991 Mar 31 2:00s
+			 9:00	Russia	VLA%sST	1992 Jan 19 2:00s
+			10:00	Russia	VLA%sT
+Zone Asia/Sakhalin	 9:30:48 -	LMT	1905 Aug 23
+			 9:00	-	CJT	1938
+			 9:00	-	JST	1945 Aug 25
+			11:00	Russia	SAK%sT	1991 Mar 31 2:00s # Sakhalin T.
+			10:00	Russia	SAK%sT	1992 Jan 19 2:00s
+			11:00	Russia	SAK%sT	1997 Mar lastSun 2:00s
+			10:00	Russia	SAK%sT
+Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
+			10:00	-	MAGT	1930 Jun 21 # Magadan Time
+			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
+			10:00	Russia	MAG%sT	1992 Jan 19 2:00s
+			11:00	Russia	MAG%sT
+Zone Asia/Kamchatka	10:34:36 -	LMT	1922 Nov 10
+			11:00	-	PETT	1930 Jun 21 # P-K Time
+			12:00	Russia	PET%sT	1991 Mar 31 2:00s
+			11:00	Russia	PET%sT	1992 Jan 19 2:00s
+			12:00	Russia	PET%sT
+Zone Asia/Anadyr	11:49:56 -	LMT	1924 May  2
+			12:00	-	ANAT	1930 Jun 21 # Anadyr Time
+			13:00	Russia	ANA%sT	1982 Apr  1 0:00s
+			12:00	Russia	ANA%sT	1991 Mar 31 2:00s
+			11:00	Russia	ANA%sT	1992 Jan 19 2:00s
+			12:00	Russia	ANA%sT
+Zone	Europe/Belgrade	1:22:00	-	LMT	1884
+			1:00	-	CET	1941 Apr 18 23:00
+			1:00	C-Eur	CE%sT	1945
+			1:00	-	CET	1945 May 8 2:00s
+			1:00	1:00	CEST	1945 Sep 16  2:00s
+			1:00	-	CET	1982 Nov 27
+			1:00	EU	CE%sT
+Link Europe/Belgrade Europe/Ljubljana	# Slovenia
+Link Europe/Belgrade Europe/Podgorica	# Montenegro
+Link Europe/Belgrade Europe/Sarajevo	# Bosnia and Herzegovina
+Link Europe/Belgrade Europe/Skopje	# Macedonia
+Link Europe/Belgrade Europe/Zagreb	# Croatia
+Link Europe/Prague Europe/Bratislava
+Rule	Spain	1917	only	-	May	 5	23:00s	1:00	S
+Rule	Spain	1917	1919	-	Oct	 6	23:00s	0	-
+Rule	Spain	1918	only	-	Apr	15	23:00s	1:00	S
+Rule	Spain	1919	only	-	Apr	 5	23:00s	1:00	S
+Rule	Spain	1924	only	-	Apr	16	23:00s	1:00	S
+Rule	Spain	1924	only	-	Oct	 4	23:00s	0	-
+Rule	Spain	1926	only	-	Apr	17	23:00s	1:00	S
+Rule	Spain	1926	1929	-	Oct	Sat>=1	23:00s	0	-
+Rule	Spain	1927	only	-	Apr	 9	23:00s	1:00	S
+Rule	Spain	1928	only	-	Apr	14	23:00s	1:00	S
+Rule	Spain	1929	only	-	Apr	20	23:00s	1:00	S
+Rule	Spain	1937	only	-	May	22	23:00s	1:00	S
+Rule	Spain	1937	1939	-	Oct	Sat>=1	23:00s	0	-
+Rule	Spain	1938	only	-	Mar	22	23:00s	1:00	S
+Rule	Spain	1939	only	-	Apr	15	23:00s	1:00	S
+Rule	Spain	1940	only	-	Mar	16	23:00s	1:00	S
+Rule	Spain	1942	only	-	May	 2	22:00s	2:00	M # Midsummer
+Rule	Spain	1942	only	-	Sep	 1	22:00s	1:00	S
+Rule	Spain	1943	1946	-	Apr	Sat>=13	22:00s	2:00	M
+Rule	Spain	1943	only	-	Oct	 3	22:00s	1:00	S
+Rule	Spain	1944	only	-	Oct	10	22:00s	1:00	S
+Rule	Spain	1945	only	-	Sep	30	 1:00	1:00	S
+Rule	Spain	1946	only	-	Sep	30	 0:00	0	-
+Rule	Spain	1949	only	-	Apr	30	23:00	1:00	S
+Rule	Spain	1949	only	-	Sep	30	 1:00	0	-
+Rule	Spain	1974	1975	-	Apr	Sat>=13	23:00	1:00	S
+Rule	Spain	1974	1975	-	Oct	Sun>=1	 1:00	0	-
+Rule	Spain	1976	only	-	Mar	27	23:00	1:00	S
+Rule	Spain	1976	1977	-	Sep	lastSun	 1:00	0	-
+Rule	Spain	1977	1978	-	Apr	 2	23:00	1:00	S
+Rule	Spain	1978	only	-	Oct	 1	 1:00	0	-
+Rule SpainAfrica 1967	only	-	Jun	 3	12:00	1:00	S
+Rule SpainAfrica 1967	only	-	Oct	 1	 0:00	0	-
+Rule SpainAfrica 1974	only	-	Jun	24	 0:00	1:00	S
+Rule SpainAfrica 1974	only	-	Sep	 1	 0:00	0	-
+Rule SpainAfrica 1976	1977	-	May	 1	 0:00	1:00	S
+Rule SpainAfrica 1976	only	-	Aug	 1	 0:00	0	-
+Rule SpainAfrica 1977	only	-	Sep	28	 0:00	0	-
+Rule SpainAfrica 1978	only	-	Jun	 1	 0:00	1:00	S
+Rule SpainAfrica 1978	only	-	Aug	 4	 0:00	0	-
+Zone	Europe/Madrid	-0:14:44 -	LMT	1901 Jan  1  0:00s
+			 0:00	Spain	WE%sT	1946 Sep 30
+			 1:00	Spain	CE%sT	1979
+			 1:00	EU	CE%sT
+Zone	Africa/Ceuta	-0:21:16 -	LMT	1901
+			 0:00	-	WET	1918 May  6 23:00
+			 0:00	1:00	WEST	1918 Oct  7 23:00
+			 0:00	-	WET	1924
+			 0:00	Spain	WE%sT	1929
+			 0:00 SpainAfrica WE%sT 1984 Mar 16
+			 1:00	-	CET	1986
+			 1:00	EU	CE%sT
+Zone	Atlantic/Canary	-1:01:36 -	LMT	1922 Mar # Las Palmas de Gran C.
+			-1:00	-	CANT	1946 Sep 30 1:00 # Canaries Time
+			 0:00	-	WET	1980 Apr  6 0:00s
+			 0:00	1:00	WEST	1980 Sep 28 0:00s
+			 0:00	EU	WE%sT
+Zone Europe/Stockholm	1:12:12 -	LMT	1879 Jan  1
+			1:00:14	-	SET	1900 Jan  1	# Swedish Time
+			1:00	-	CET	1916 May 14 23:00
+			1:00	1:00	CEST	1916 Oct  1 01:00
+			1:00	-	CET	1980
+			1:00	EU	CE%sT
+Rule	Swiss	1941	1942	-	May	Mon>=1	1:00	1:00	S
+Rule	Swiss	1941	1942	-	Oct	Mon>=1	2:00	0	-
+Zone	Europe/Zurich	0:34:08 -	LMT	1848 Sep 12
+			0:29:44	-	BMT	1894 Jun # Bern Mean Time
+			1:00	Swiss	CE%sT	1981
+			1:00	EU	CE%sT
+Rule	Turkey	1916	only	-	May	 1	0:00	1:00	S
+Rule	Turkey	1916	only	-	Oct	 1	0:00	0	-
+Rule	Turkey	1920	only	-	Mar	28	0:00	1:00	S
+Rule	Turkey	1920	only	-	Oct	25	0:00	0	-
+Rule	Turkey	1921	only	-	Apr	 3	0:00	1:00	S
+Rule	Turkey	1921	only	-	Oct	 3	0:00	0	-
+Rule	Turkey	1922	only	-	Mar	26	0:00	1:00	S
+Rule	Turkey	1922	only	-	Oct	 8	0:00	0	-
+Rule	Turkey	1924	only	-	May	13	0:00	1:00	S
+Rule	Turkey	1924	1925	-	Oct	 1	0:00	0	-
+Rule	Turkey	1925	only	-	May	 1	0:00	1:00	S
+Rule	Turkey	1940	only	-	Jun	30	0:00	1:00	S
+Rule	Turkey	1940	only	-	Oct	 5	0:00	0	-
+Rule	Turkey	1940	only	-	Dec	 1	0:00	1:00	S
+Rule	Turkey	1941	only	-	Sep	21	0:00	0	-
+Rule	Turkey	1942	only	-	Apr	 1	0:00	1:00	S
+Rule	Turkey	1942	only	-	Nov	 1	0:00	0	-
+Rule	Turkey	1945	only	-	Apr	 2	0:00	1:00	S
+Rule	Turkey	1945	only	-	Oct	 8	0:00	0	-
+Rule	Turkey	1946	only	-	Jun	 1	0:00	1:00	S
+Rule	Turkey	1946	only	-	Oct	 1	0:00	0	-
+Rule	Turkey	1947	1948	-	Apr	Sun>=16	0:00	1:00	S
+Rule	Turkey	1947	1950	-	Oct	Sun>=2	0:00	0	-
+Rule	Turkey	1949	only	-	Apr	10	0:00	1:00	S
+Rule	Turkey	1950	only	-	Apr	19	0:00	1:00	S
+Rule	Turkey	1951	only	-	Apr	22	0:00	1:00	S
+Rule	Turkey	1951	only	-	Oct	 8	0:00	0	-
+Rule	Turkey	1962	only	-	Jul	15	0:00	1:00	S
+Rule	Turkey	1962	only	-	Oct	 8	0:00	0	-
+Rule	Turkey	1964	only	-	May	15	0:00	1:00	S
+Rule	Turkey	1964	only	-	Oct	 1	0:00	0	-
+Rule	Turkey	1970	1972	-	May	Sun>=2	0:00	1:00	S
+Rule	Turkey	1970	1972	-	Oct	Sun>=2	0:00	0	-
+Rule	Turkey	1973	only	-	Jun	 3	1:00	1:00	S
+Rule	Turkey	1973	only	-	Nov	 4	3:00	0	-
+Rule	Turkey	1974	only	-	Mar	31	2:00	1:00	S
+Rule	Turkey	1974	only	-	Nov	 3	5:00	0	-
+Rule	Turkey	1975	only	-	Mar	30	0:00	1:00	S
+Rule	Turkey	1975	1976	-	Oct	lastSun	0:00	0	-
+Rule	Turkey	1976	only	-	Jun	 1	0:00	1:00	S
+Rule	Turkey	1977	1978	-	Apr	Sun>=1	0:00	1:00	S
+Rule	Turkey	1977	only	-	Oct	16	0:00	0	-
+Rule	Turkey	1979	1980	-	Apr	Sun>=1	3:00	1:00	S
+Rule	Turkey	1979	1982	-	Oct	Mon>=11	0:00	0	-
+Rule	Turkey	1981	1982	-	Mar	lastSun	3:00	1:00	S
+Rule	Turkey	1983	only	-	Jul	31	0:00	1:00	S
+Rule	Turkey	1983	only	-	Oct	 2	0:00	0	-
+Rule	Turkey	1985	only	-	Apr	20	0:00	1:00	S
+Rule	Turkey	1985	only	-	Sep	28	0:00	0	-
+Rule	Turkey	1986	1990	-	Mar	lastSun	2:00s	1:00	S
+Rule	Turkey	1986	1990	-	Sep	lastSun	2:00s	0	-
+Rule	Turkey	1991	2006	-	Mar	lastSun	1:00s	1:00	S
+Rule	Turkey	1991	1995	-	Sep	lastSun	1:00s	0	-
+Rule	Turkey	1996	2006	-	Oct	lastSun	1:00s	0	-
+Zone	Europe/Istanbul	1:55:52 -	LMT	1880
+			1:56:56	-	IMT	1910 Oct # Istanbul Mean Time?
+			2:00	Turkey	EE%sT	1978 Oct 15
+			3:00	Turkey	TR%sT	1985 Apr 20 # Turkey Time
+			2:00	Turkey	EE%sT	2007
+			2:00	EU	EE%sT
+Link	Europe/Istanbul	Asia/Istanbul	# Istanbul is in both continents.
+Zone Europe/Kiev	2:02:04 -	LMT	1880
+			2:02:04	-	KMT	1924 May  2 # Kiev Mean Time
+			2:00	-	EET	1930 Jun 21
+			3:00	-	MSK	1941 Sep 20
+			1:00	C-Eur	CE%sT	1943 Nov  6
+			3:00	Russia	MSK/MSD	1990
+			3:00	-	MSK	1990 Jul  1 2:00
+			2:00	-	EET	1992
+			2:00	E-Eur	EE%sT	1995
+			2:00	EU	EE%sT
+Zone Europe/Uzhgorod	1:29:12 -	LMT	1890 Oct
+			1:00	-	CET	1940
+			1:00	C-Eur	CE%sT	1944 Oct
+			1:00	1:00	CEST	1944 Oct 26
+			1:00	-	CET	1945 Jun 29
+			3:00	Russia	MSK/MSD	1990
+			3:00	-	MSK	1990 Jul  1 2:00
+			1:00	-	CET	1991 Mar 31 3:00
+			2:00	-	EET	1992
+			2:00	E-Eur	EE%sT	1995
+			2:00	EU	EE%sT
+Zone Europe/Zaporozhye	2:20:40 -	LMT	1880
+			2:20	-	CUT	1924 May  2 # Central Ukraine T
+			2:00	-	EET	1930 Jun 21
+			3:00	-	MSK	1941 Aug 25
+			1:00	C-Eur	CE%sT	1943 Oct 25
+			3:00	Russia	MSK/MSD	1991 Mar 31 2:00
+			2:00	E-Eur	EE%sT	1995
+			2:00	EU	EE%sT
+Zone Europe/Simferopol	2:16:24 -	LMT	1880
+			2:16	-	SMT	1924 May  2 # Simferopol Mean T
+			2:00	-	EET	1930 Jun 21
+			3:00	-	MSK	1941 Nov
+			1:00	C-Eur	CE%sT	1944 Apr 13
+			3:00	Russia	MSK/MSD	1990
+			3:00	-	MSK	1990 Jul  1 2:00
+			2:00	-	EET	1992
+			2:00	E-Eur	EE%sT	1994 May
+			3:00	E-Eur	MSK/MSD	1996 Mar 31 3:00s
+			3:00	1:00	MSD	1996 Oct 27 3:00s
+			3:00	Russia	MSK/MSD	1997
+			3:00	-	MSK	1997 Mar lastSun 1:00u
+			2:00	EU	EE%sT
Index: trunk/web/dojo/dojox/date/zoneinfo/LICENSE
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/LICENSE	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/LICENSE	(revision 9)
@@ -0,0 +1,10 @@
+"Olson Database", available for download from ftp://elsie.nci.nih.gov/pub/
+
+These comments were included in each file.
+
+# This file is in the public domain, so clarified as of
+# 2009-05-17 by Arthur David Olson.
+
+# This data is by no means authoritative; if you think you know better,
+# go ahead and edit the file (and please send any changes to
+# tz@elsie.nci.nih.gov for general use in the future).
Index: trunk/web/dojo/dojox/date/zoneinfo/southamerica
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/southamerica	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/southamerica	(revision 9)
@@ -0,0 +1,501 @@
+Rule	Arg	1930	only	-	Dec	 1	0:00	1:00	S
+Rule	Arg	1931	only	-	Apr	 1	0:00	0	-
+Rule	Arg	1931	only	-	Oct	15	0:00	1:00	S
+Rule	Arg	1932	1940	-	Mar	 1	0:00	0	-
+Rule	Arg	1932	1939	-	Nov	 1	0:00	1:00	S
+Rule	Arg	1940	only	-	Jul	 1	0:00	1:00	S
+Rule	Arg	1941	only	-	Jun	15	0:00	0	-
+Rule	Arg	1941	only	-	Oct	15	0:00	1:00	S
+Rule	Arg	1943	only	-	Aug	 1	0:00	0	-
+Rule	Arg	1943	only	-	Oct	15	0:00	1:00	S
+Rule	Arg	1946	only	-	Mar	 1	0:00	0	-
+Rule	Arg	1946	only	-	Oct	 1	0:00	1:00	S
+Rule	Arg	1963	only	-	Oct	 1	0:00	0	-
+Rule	Arg	1963	only	-	Dec	15	0:00	1:00	S
+Rule	Arg	1964	1966	-	Mar	 1	0:00	0	-
+Rule	Arg	1964	1966	-	Oct	15	0:00	1:00	S
+Rule	Arg	1967	only	-	Apr	 2	0:00	0	-
+Rule	Arg	1967	1968	-	Oct	Sun>=1	0:00	1:00	S
+Rule	Arg	1968	1969	-	Apr	Sun>=1	0:00	0	-
+Rule	Arg	1974	only	-	Jan	23	0:00	1:00	S
+Rule	Arg	1974	only	-	May	 1	0:00	0	-
+Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	S
+Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
+Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	S
+Rule	Arg	1999	only	-	Oct	Sun>=1	0:00	1:00	S
+Rule	Arg	2000	only	-	Mar	3	0:00	0	-
+Rule	Arg	2007	only	-	Dec	30	0:00	1:00	S
+Rule	Arg	2008	max	-	Mar	Sun>=15	0:00	0	-
+Rule	Arg	2008	max	-	Oct	Sun>=15	0:00	1:00	S
+ 
+Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
+			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	Arg	AR%sT
+Zone America/Argentina/Cordoba -4:16:48 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1991 Mar  3
+			-4:00	-	WART	1991 Oct 20
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	Arg	AR%sT
+Zone America/Argentina/Salta -4:21:40 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1991 Mar  3
+			-4:00	-	WART	1991 Oct 20
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone America/Argentina/Tucuman -4:20:52 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1991 Mar  3
+			-4:00	-	WART	1991 Oct 20
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 Jun  1
+			-4:00	-	WART	2004 Jun 13
+			-3:00	Arg	AR%sT
+Zone America/Argentina/La_Rioja -4:27:24 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1991 Mar  1
+			-4:00	-	WART	1991 May  7
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 Jun  1
+			-4:00	-	WART	2004 Jun 20
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone America/Argentina/San_Juan -4:34:04 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1991 Mar  1
+			-4:00	-	WART	1991 May  7
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 May 31
+			-4:00	-	WART	2004 Jul 25
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone America/Argentina/Jujuy -4:21:12 -	LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1990 Mar  4
+			-4:00	-	WART	1990 Oct 28
+			-4:00	1:00	WARST	1991 Mar 17
+			-4:00	-	WART	1991 Oct  6
+			-3:00	1:00	ARST	1992
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone America/Argentina/Catamarca -4:23:08 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1991 Mar  3
+			-4:00	-	WART	1991 Oct 20
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 Jun  1
+			-4:00	-	WART	2004 Jun 20
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone America/Argentina/Mendoza -4:35:16 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1990 Mar  4
+			-4:00	-	WART	1990 Oct 15
+			-4:00	1:00	WARST	1991 Mar  1
+			-4:00	-	WART	1991 Oct 15
+			-4:00	1:00	WARST	1992 Mar  1
+			-4:00	-	WART	1992 Oct 18
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 May 23
+			-4:00	-	WART	2004 Sep 26
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone America/Argentina/San_Luis -4:25:24 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1990
+			-3:00	1:00	ARST	1990 Mar 14
+			-4:00	-	WART	1990 Oct 15
+			-4:00	1:00	WARST	1991 Mar  1
+			-4:00	-	WART	1991 Jun  1
+			-3:00	-	ART	1999 Oct  3
+			-4:00	1:00	WARST	2000 Mar  3
+			-3:00	-	ART	2004 May 31
+			-4:00	-	WART	2004 Jul 25
+			-3:00	Arg	AR%sT	2008 Jan 21
+			-3:00	-	ART	2009 Mar 15
+			-4:00	Arg	WAR%sT
+Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
+			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 Jun  1
+			-4:00	-	WART	2004 Jun 20
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
+			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 May 30
+			-4:00	-	WART	2004 Jun 20
+			-3:00	Arg	AR%sT	2008 Oct 18
+			-3:00	-	ART
+Zone	America/Aruba	-4:40:24 -	LMT	1912 Feb 12	# Oranjestad
+			-4:30	-	ANT	1965 # Netherlands Antilles Time
+			-4:00	-	AST
+Zone	America/La_Paz	-4:32:36 -	LMT	1890
+			-4:32:36 -	CMT	1931 Oct 15 # Calamarca MT
+			-4:32:36 1:00	BOST	1932 Mar 21 # Bolivia ST
+			-4:00	-	BOT	# Bolivia Time
+Rule	Brazil	1931	only	-	Oct	 3	11:00	1:00	S
+Rule	Brazil	1932	1933	-	Apr	 1	 0:00	0	-
+Rule	Brazil	1932	only	-	Oct	 3	 0:00	1:00	S
+Rule	Brazil	1949	1952	-	Dec	 1	 0:00	1:00	S
+Rule	Brazil	1950	only	-	Apr	16	 1:00	0	-
+Rule	Brazil	1951	1952	-	Apr	 1	 0:00	0	-
+Rule	Brazil	1953	only	-	Mar	 1	 0:00	0	-
+Rule	Brazil	1963	only	-	Dec	 9	 0:00	1:00	S
+Rule	Brazil	1964	only	-	Mar	 1	 0:00	0	-
+Rule	Brazil	1965	only	-	Jan	31	 0:00	1:00	S
+Rule	Brazil	1965	only	-	Mar	31	 0:00	0	-
+Rule	Brazil	1965	only	-	Dec	 1	 0:00	1:00	S
+Rule	Brazil	1966	1968	-	Mar	 1	 0:00	0	-
+Rule	Brazil	1966	1967	-	Nov	 1	 0:00	1:00	S
+Rule	Brazil	1985	only	-	Nov	 2	 0:00	1:00	S
+Rule	Brazil	1986	only	-	Mar	15	 0:00	0	-
+Rule	Brazil	1986	only	-	Oct	25	 0:00	1:00	S
+Rule	Brazil	1987	only	-	Feb	14	 0:00	0	-
+Rule	Brazil	1987	only	-	Oct	25	 0:00	1:00	S
+Rule	Brazil	1988	only	-	Feb	 7	 0:00	0	-
+Rule	Brazil	1988	only	-	Oct	16	 0:00	1:00	S
+Rule	Brazil	1989	only	-	Jan	29	 0:00	0	-
+Rule	Brazil	1989	only	-	Oct	15	 0:00	1:00	S
+Rule	Brazil	1990	only	-	Feb	11	 0:00	0	-
+Rule	Brazil	1990	only	-	Oct	21	 0:00	1:00	S
+Rule	Brazil	1991	only	-	Feb	17	 0:00	0	-
+Rule	Brazil	1991	only	-	Oct	20	 0:00	1:00	S
+Rule	Brazil	1992	only	-	Feb	 9	 0:00	0	-
+Rule	Brazil	1992	only	-	Oct	25	 0:00	1:00	S
+Rule	Brazil	1993	only	-	Jan	31	 0:00	0	-
+Rule	Brazil	1993	1995	-	Oct	Sun>=11	 0:00	1:00	S
+Rule	Brazil	1994	1995	-	Feb	Sun>=15	 0:00	0	-
+Rule	Brazil	1996	only	-	Feb	11	 0:00	0	-
+Rule	Brazil	1996	only	-	Oct	 6	 0:00	1:00	S
+Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
+Rule	Brazil	1997	only	-	Oct	 6	 0:00	1:00	S
+Rule	Brazil	1998	only	-	Mar	 1	 0:00	0	-
+Rule	Brazil	1998	only	-	Oct	11	 0:00	1:00	S
+Rule	Brazil	1999	only	-	Feb	21	 0:00	0	-
+Rule	Brazil	1999	only	-	Oct	 3	 0:00	1:00	S
+Rule	Brazil	2000	only	-	Feb	27	 0:00	0	-
+Rule	Brazil	2000	2001	-	Oct	Sun>=8	 0:00	1:00	S
+Rule	Brazil	2001	2006	-	Feb	Sun>=15	 0:00	0	-
+Rule	Brazil	2002	only	-	Nov	 3	 0:00	1:00	S
+Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	S
+Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	S
+Rule	Brazil	2005	only	-	Oct	16	 0:00	1:00	S
+Rule	Brazil	2006	only	-	Nov	 5	 0:00	1:00	S
+Rule	Brazil	2007	only	-	Feb	25	 0:00	0	-
+Rule	Brazil	2007	only	-	Oct	Sun>=8	 0:00	1:00	S
+Rule	Brazil	2008	max	-	Oct	Sun>=15	0:00	1:00	S
+Rule	Brazil	2008	2011	-	Feb	Sun>=15	0:00	0	-
+Rule	Brazil	2012	only	-	Feb	Sun>=22	0:00	0	-
+Rule	Brazil	2013	2014	-	Feb	Sun>=15	0:00	0	-
+Rule	Brazil	2015	only	-	Feb	Sun>=22	0:00	0	-
+Rule	Brazil	2016	2022	-	Feb	Sun>=15	0:00	0	-
+Rule	Brazil	2023	only	-	Feb	Sun>=22	0:00	0	-
+Rule	Brazil	2024	2025	-	Feb	Sun>=15	0:00	0	-
+Rule	Brazil	2026	only	-	Feb	Sun>=22	0:00	0	-
+Rule	Brazil	2027	2033	-	Feb	Sun>=15	0:00	0	-
+Rule	Brazil	2034	only	-	Feb	Sun>=22	0:00	0	-
+Rule	Brazil	2035	2036	-	Feb	Sun>=15	0:00	0	-
+Rule	Brazil	2037	only	-	Feb	Sun>=22	0:00	0	-
+Rule	Brazil	2038	max	-	Feb	Sun>=15	0:00	0	-
+Zone America/Noronha	-2:09:40 -	LMT	1914
+			-2:00	Brazil	FN%sT	1990 Sep 17
+			-2:00	-	FNT	1999 Sep 30
+			-2:00	Brazil	FN%sT	2000 Oct 15
+			-2:00	-	FNT	2001 Sep 13
+			-2:00	Brazil	FN%sT	2002 Oct  1
+			-2:00	-	FNT
+Zone America/Belem	-3:13:56 -	LMT	1914
+			-3:00	Brazil	BR%sT	1988 Sep 12
+			-3:00	-	BRT
+Zone America/Santarem	-3:38:48 -	LMT	1914
+			-4:00	Brazil	AM%sT	1988 Sep 12
+			-4:00	-	AMT	2008 Jun 24 00:00
+			-3:00	-	BRT
+Zone America/Fortaleza	-2:34:00 -	LMT	1914
+			-3:00	Brazil	BR%sT	1990 Sep 17
+			-3:00	-	BRT	1999 Sep 30
+			-3:00	Brazil	BR%sT	2000 Oct 22
+			-3:00	-	BRT	2001 Sep 13
+			-3:00	Brazil	BR%sT	2002 Oct  1
+			-3:00	-	BRT
+Zone America/Recife	-2:19:36 -	LMT	1914
+			-3:00	Brazil	BR%sT	1990 Sep 17
+			-3:00	-	BRT	1999 Sep 30
+			-3:00	Brazil	BR%sT	2000 Oct 15
+			-3:00	-	BRT	2001 Sep 13
+			-3:00	Brazil	BR%sT	2002 Oct  1
+			-3:00	-	BRT
+Zone America/Araguaina	-3:12:48 -	LMT	1914
+			-3:00	Brazil	BR%sT	1990 Sep 17
+			-3:00	-	BRT	1995 Sep 14
+			-3:00	Brazil	BR%sT	2003 Sep 24
+			-3:00	-	BRT
+Zone America/Maceio	-2:22:52 -	LMT	1914
+			-3:00	Brazil	BR%sT	1990 Sep 17
+			-3:00	-	BRT	1995 Oct 13
+			-3:00	Brazil	BR%sT	1996 Sep  4
+			-3:00	-	BRT	1999 Sep 30
+			-3:00	Brazil	BR%sT	2000 Oct 22
+			-3:00	-	BRT	2001 Sep 13
+			-3:00	Brazil	BR%sT	2002 Oct  1
+			-3:00	-	BRT
+Zone America/Bahia	-2:34:04 -	LMT	1914
+			-3:00	Brazil	BR%sT	2003 Sep 24
+			-3:00	-	BRT
+Zone America/Sao_Paulo	-3:06:28 -	LMT	1914
+			-3:00	Brazil	BR%sT	1963 Oct 23 00:00
+			-3:00	1:00	BRST	1964
+			-3:00	Brazil	BR%sT
+Zone America/Campo_Grande -3:38:28 -	LMT	1914
+			-4:00	Brazil	AM%sT
+Zone America/Cuiaba	-3:44:20 -	LMT	1914
+			-4:00	Brazil	AM%sT	2003 Sep 24
+			-4:00	-	AMT	2004 Oct  1
+			-4:00	Brazil	AM%sT
+Zone America/Porto_Velho -4:15:36 -	LMT	1914
+			-4:00	Brazil	AM%sT	1988 Sep 12
+			-4:00	-	AMT
+Zone America/Boa_Vista	-4:02:40 -	LMT	1914
+			-4:00	Brazil	AM%sT	1988 Sep 12
+			-4:00	-	AMT	1999 Sep 30
+			-4:00	Brazil	AM%sT	2000 Oct 15
+			-4:00	-	AMT
+Zone America/Manaus	-4:00:04 -	LMT	1914
+			-4:00	Brazil	AM%sT	1988 Sep 12
+			-4:00	-	AMT	1993 Sep 28
+			-4:00	Brazil	AM%sT	1994 Sep 22
+			-4:00	-	AMT
+Zone America/Eirunepe	-4:39:28 -	LMT	1914
+			-5:00	Brazil	AC%sT	1988 Sep 12
+			-5:00	-	ACT	1993 Sep 28
+			-5:00	Brazil	AC%sT	1994 Sep 22
+			-5:00	-	ACT	2008 Jun 24 00:00
+			-4:00	-	AMT
+Zone America/Rio_Branco	-4:31:12 -	LMT	1914
+			-5:00	Brazil	AC%sT	1988 Sep 12
+			-5:00	-	ACT	2008 Jun 24 00:00
+			-4:00	-	AMT
+Rule	Chile	1927	1932	-	Sep	 1	0:00	1:00	S
+Rule	Chile	1928	1932	-	Apr	 1	0:00	0	-
+Rule	Chile	1942	only	-	Jun	 1	4:00u	0	-
+Rule	Chile	1942	only	-	Aug	 1	5:00u	1:00	S
+Rule	Chile	1946	only	-	Jul	15	4:00u	1:00	S
+Rule	Chile	1946	only	-	Sep	 1	3:00u	0:00	-
+Rule	Chile	1947	only	-	Apr	 1	4:00u	0	-
+Rule	Chile	1968	only	-	Nov	 3	4:00u	1:00	S
+Rule	Chile	1969	only	-	Mar	30	3:00u	0	-
+Rule	Chile	1969	only	-	Nov	23	4:00u	1:00	S
+Rule	Chile	1970	only	-	Mar	29	3:00u	0	-
+Rule	Chile	1971	only	-	Mar	14	3:00u	0	-
+Rule	Chile	1970	1972	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	Chile	1972	1986	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	1973	only	-	Sep	30	4:00u	1:00	S
+Rule	Chile	1974	1987	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	Chile	1987	only	-	Apr	12	3:00u	0	-
+Rule	Chile	1988	1989	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	1988	only	-	Oct	Sun>=1	4:00u	1:00	S
+Rule	Chile	1989	only	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	Chile	1990	only	-	Mar	18	3:00u	0	-
+Rule	Chile	1990	only	-	Sep	16	4:00u	1:00	S
+Rule	Chile	1991	1996	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	1991	1997	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	Chile	1997	only	-	Mar	30	3:00u	0	-
+Rule	Chile	1998	only	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	1998	only	-	Sep	27	4:00u	1:00	S
+Rule	Chile	1999	only	-	Apr	 4	3:00u	0	-
+Rule	Chile	1999	max	-	Oct	Sun>=9	4:00u	1:00	S
+Rule	Chile	2000	2007	-	Mar	Sun>=9	3:00u	0	-
+Rule	Chile	2008	only	-	Mar	30	3:00u	0	-
+Rule	Chile	2009	max	-	Mar	Sun>=9	3:00u	0	-
+Zone America/Santiago	-4:42:46 -	LMT	1890
+			-4:42:46 -	SMT	1910 	    # Santiago Mean Time
+			-5:00	-	CLT	1916 Jul  1 # Chile Time
+			-4:42:46 -	SMT	1918 Sep  1 # Santiago Mean Time
+			-4:00	-	CLT	1919 Jul  1 # Chile Time
+			-4:42:46 -	SMT	1927 Sep  1 # Santiago Mean Time
+			-5:00	Chile	CL%sT	1947 May 22 # Chile Time
+			-4:00	Chile	CL%sT
+Zone Pacific/Easter	-7:17:44 -	LMT	1890
+			-7:17:28 -	EMT	1932 Sep    # Easter Mean Time
+			-7:00	Chile	EAS%sT	1982 Mar 13 21:00 # Easter I Time
+			-6:00	Chile	EAS%sT
+Rule	CO	1992	only	-	May	 3	0:00	1:00	S
+Rule	CO	1993	only	-	Apr	 4	0:00	0	-
+Zone	America/Bogota	-4:56:20 -	LMT	1884 Mar 13
+			-4:56:20 -	BMT	1914 Nov 23 # Bogota Mean Time
+			-5:00	CO	CO%sT	# Colombia Time
+Zone	America/Curacao	-4:35:44 -	LMT	1912 Feb 12	# Willemstad
+			-4:30	-	ANT	1965 # Netherlands Antilles Time
+			-4:00	-	AST
+Zone America/Guayaquil	-5:19:20 -	LMT	1890
+			-5:14:00 -	QMT	1931 # Quito Mean Time
+			-5:00	-	ECT	     # Ecuador Time
+Zone Pacific/Galapagos	-5:58:24 -	LMT	1931 # Puerto Baquerizo Moreno
+			-5:00	-	ECT	1986
+			-6:00	-	GALT	     # Galapagos Time
+Rule	Falk	1937	1938	-	Sep	lastSun	0:00	1:00	S
+Rule	Falk	1938	1942	-	Mar	Sun>=19	0:00	0	-
+Rule	Falk	1939	only	-	Oct	1	0:00	1:00	S
+Rule	Falk	1940	1942	-	Sep	lastSun	0:00	1:00	S
+Rule	Falk	1943	only	-	Jan	1	0:00	0	-
+Rule	Falk	1983	only	-	Sep	lastSun	0:00	1:00	S
+Rule	Falk	1984	1985	-	Apr	lastSun	0:00	0	-
+Rule	Falk	1984	only	-	Sep	16	0:00	1:00	S
+Rule	Falk	1985	2000	-	Sep	Sun>=9	0:00	1:00	S
+Rule	Falk	1986	2000	-	Apr	Sun>=16	0:00	0	-
+Rule	Falk	2001	max	-	Apr	Sun>=15	2:00	0	-
+Rule	Falk	2001	max	-	Sep	Sun>=1	2:00	1:00	S
+Zone Atlantic/Stanley	-3:51:24 -	LMT	1890
+			-3:51:24 -	SMT	1912 Mar 12  # Stanley Mean Time
+			-4:00	Falk	FK%sT	1983 May     # Falkland Is Time
+			-3:00	Falk	FK%sT	1985 Sep 15
+			-4:00	Falk	FK%sT
+Zone America/Cayenne	-3:29:20 -	LMT	1911 Jul
+			-4:00	-	GFT	1967 Oct # French Guiana Time
+			-3:00	-	GFT
+Zone	America/Guyana	-3:52:40 -	LMT	1915 Mar	# Georgetown
+			-3:45	-	GBGT	1966 May 26 # Br Guiana Time
+			-3:45	-	GYT	1975 Jul 31 # Guyana Time
+			-3:00	-	GYT	1991
+			-4:00	-	GYT
+Rule	Para	1975	1988	-	Oct	 1	0:00	1:00	S
+Rule	Para	1975	1978	-	Mar	 1	0:00	0	-
+Rule	Para	1979	1991	-	Apr	 1	0:00	0	-
+Rule	Para	1989	only	-	Oct	22	0:00	1:00	S
+Rule	Para	1990	only	-	Oct	 1	0:00	1:00	S
+Rule	Para	1991	only	-	Oct	 6	0:00	1:00	S
+Rule	Para	1992	only	-	Mar	 1	0:00	0	-
+Rule	Para	1992	only	-	Oct	 5	0:00	1:00	S
+Rule	Para	1993	only	-	Mar	31	0:00	0	-
+Rule	Para	1993	1995	-	Oct	 1	0:00	1:00	S
+Rule	Para	1994	1995	-	Feb	lastSun	0:00	0	-
+Rule	Para	1996	only	-	Mar	 1	0:00	0	-
+Rule	Para	1996	2001	-	Oct	Sun>=1	0:00	1:00	S
+Rule	Para	1997	only	-	Feb	lastSun	0:00	0	-
+Rule	Para	1998	2001	-	Mar	Sun>=1	0:00	0	-
+Rule	Para	2002	2004	-	Apr	Sun>=1	0:00	0	-
+Rule	Para	2002	2003	-	Sep	Sun>=1	0:00	1:00	S
+Rule	Para	2004	max	-	Oct	Sun>=15	0:00	1:00	S
+Rule	Para	2005	max	-	Mar	Sun>=8	0:00	0	-
+Zone America/Asuncion	-3:50:40 -	LMT	1890
+			-3:50:40 -	AMT	1931 Oct 10 # Asuncion Mean Time
+			-4:00	-	PYT	1972 Oct # Paraguay Time
+			-3:00	-	PYT	1974 Apr
+			-4:00	Para	PY%sT
+Rule	Peru	1938	only	-	Jan	 1	0:00	1:00	S
+Rule	Peru	1938	only	-	Apr	 1	0:00	0	-
+Rule	Peru	1938	1939	-	Sep	lastSun	0:00	1:00	S
+Rule	Peru	1939	1940	-	Mar	Sun>=24	0:00	0	-
+Rule	Peru	1986	1987	-	Jan	 1	0:00	1:00	S
+Rule	Peru	1986	1987	-	Apr	 1	0:00	0	-
+Rule	Peru	1990	only	-	Jan	 1	0:00	1:00	S
+Rule	Peru	1990	only	-	Apr	 1	0:00	0	-
+Rule	Peru	1994	only	-	Jan	 1	0:00	1:00	S
+Rule	Peru	1994	only	-	Apr	 1	0:00	0	-
+Zone	America/Lima	-5:08:12 -	LMT	1890
+			-5:08:36 -	LMT	1908 Jul 28 # Lima Mean Time?
+			-5:00	Peru	PE%sT	# Peru Time
+Zone Atlantic/South_Georgia -2:26:08 -	LMT	1890		# Grytviken
+			-2:00	-	GST	# South Georgia Time
+Zone America/Paramaribo	-3:40:40 -	LMT	1911
+			-3:40:52 -	PMT	1935     # Paramaribo Mean Time
+			-3:40:36 -	PMT	1945 Oct # The capital moved?
+			-3:30	-	NEGT	1975 Nov 20 # Dutch Guiana Time
+			-3:30	-	SRT	1984 Oct # Suriname Time
+			-3:00	-	SRT
+Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
+			-4:00	-	AST
+Rule	Uruguay	1923	only	-	Oct	 2	 0:00	0:30	HS
+Rule	Uruguay	1924	1926	-	Apr	 1	 0:00	0	-
+Rule	Uruguay	1924	1925	-	Oct	 1	 0:00	0:30	HS
+Rule	Uruguay	1933	1935	-	Oct	lastSun	 0:00	0:30	HS
+Rule	Uruguay	1934	1936	-	Mar	Sat>=25	23:30s	0	-
+Rule	Uruguay	1936	only	-	Nov	 1	 0:00	0:30	HS
+Rule	Uruguay	1937	1941	-	Mar	lastSun	 0:00	0	-
+Rule	Uruguay	1937	1940	-	Oct	lastSun	 0:00	0:30	HS
+Rule	Uruguay	1941	only	-	Aug	 1	 0:00	0:30	HS
+Rule	Uruguay	1942	only	-	Jan	 1	 0:00	0	-
+Rule	Uruguay	1942	only	-	Dec	14	 0:00	1:00	S
+Rule	Uruguay	1943	only	-	Mar	14	 0:00	0	-
+Rule	Uruguay	1959	only	-	May	24	 0:00	1:00	S
+Rule	Uruguay	1959	only	-	Nov	15	 0:00	0	-
+Rule	Uruguay	1960	only	-	Jan	17	 0:00	1:00	S
+Rule	Uruguay	1960	only	-	Mar	 6	 0:00	0	-
+Rule	Uruguay	1965	1967	-	Apr	Sun>=1	 0:00	1:00	S
+Rule	Uruguay	1965	only	-	Sep	26	 0:00	0	-
+Rule	Uruguay	1966	1967	-	Oct	31	 0:00	0	-
+Rule	Uruguay	1968	1970	-	May	27	 0:00	0:30	HS
+Rule	Uruguay	1968	1970	-	Dec	 2	 0:00	0	-
+Rule	Uruguay	1972	only	-	Apr	24	 0:00	1:00	S
+Rule	Uruguay	1972	only	-	Aug	15	 0:00	0	-
+Rule	Uruguay	1974	only	-	Mar	10	 0:00	0:30	HS
+Rule	Uruguay	1974	only	-	Dec	22	 0:00	1:00	S
+Rule	Uruguay	1976	only	-	Oct	 1	 0:00	0	-
+Rule	Uruguay	1977	only	-	Dec	 4	 0:00	1:00	S
+Rule	Uruguay	1978	only	-	Apr	 1	 0:00	0	-
+Rule	Uruguay	1979	only	-	Oct	 1	 0:00	1:00	S
+Rule	Uruguay	1980	only	-	May	 1	 0:00	0	-
+Rule	Uruguay	1987	only	-	Dec	14	 0:00	1:00	S
+Rule	Uruguay	1988	only	-	Mar	14	 0:00	0	-
+Rule	Uruguay	1988	only	-	Dec	11	 0:00	1:00	S
+Rule	Uruguay	1989	only	-	Mar	12	 0:00	0	-
+Rule	Uruguay	1989	only	-	Oct	29	 0:00	1:00	S
+Rule	Uruguay	1990	1992	-	Mar	Sun>=1	 0:00	0	-
+Rule	Uruguay	1990	1991	-	Oct	Sun>=21	 0:00	1:00	S
+Rule	Uruguay	1992	only	-	Oct	18	 0:00	1:00	S
+Rule	Uruguay	1993	only	-	Feb	28	 0:00	0	-
+Rule	Uruguay	2004	only	-	Sep	19	 0:00	1:00	S
+Rule	Uruguay	2005	only	-	Mar	27	 2:00	0	-
+Rule	Uruguay	2005	only	-	Oct	 9	 2:00	1:00	S
+Rule	Uruguay	2006	only	-	Mar	12	 2:00	0	-
+Rule	Uruguay	2006	max	-	Oct	Sun>=1	 2:00	1:00	S
+Rule	Uruguay	2007	max	-	Mar	Sun>=8	 2:00	0	-
+Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
+			-3:44:44 -	MMT	1920 May  1	# Montevideo MT
+			-3:30	Uruguay	UY%sT	1942 Dec 14	# Uruguay Time
+			-3:00	Uruguay	UY%sT
+Zone	America/Caracas	-4:27:44 -	LMT	1890
+			-4:27:40 -	CMT	1912 Feb 12 # Caracas Mean Time?
+			-4:30	-	VET	1965	     # Venezuela Time
+			-4:00	-	VET	2007 Dec  9 03:00
+			-4:30	-	VET
Index: trunk/web/dojo/dojox/date/zoneinfo/africa
===================================================================
--- trunk/web/dojo/dojox/date/zoneinfo/africa	(revision 0)
+++ trunk/web/dojo/dojox/date/zoneinfo/africa	(revision 9)
@@ -0,0 +1,310 @@
+Rule	Algeria	1916	only	-	Jun	14	23:00s	1:00	S
+Rule	Algeria	1916	1919	-	Oct	Sun>=1	23:00s	0	-
+Rule	Algeria	1917	only	-	Mar	24	23:00s	1:00	S
+Rule	Algeria	1918	only	-	Mar	 9	23:00s	1:00	S
+Rule	Algeria	1919	only	-	Mar	 1	23:00s	1:00	S
+Rule	Algeria	1920	only	-	Feb	14	23:00s	1:00	S
+Rule	Algeria	1920	only	-	Oct	23	23:00s	0	-
+Rule	Algeria	1921	only	-	Mar	14	23:00s	1:00	S
+Rule	Algeria	1921	only	-	Jun	21	23:00s	0	-
+Rule	Algeria	1939	only	-	Sep	11	23:00s	1:00	S
+Rule	Algeria	1939	only	-	Nov	19	 1:00	0	-
+Rule	Algeria	1944	1945	-	Apr	Mon>=1	 2:00	1:00	S
+Rule	Algeria	1944	only	-	Oct	 8	 2:00	0	-
+Rule	Algeria	1945	only	-	Sep	16	 1:00	0	-
+Rule	Algeria	1971	only	-	Apr	25	23:00s	1:00	S
+Rule	Algeria	1971	only	-	Sep	26	23:00s	0	-
+Rule	Algeria	1977	only	-	May	 6	 0:00	1:00	S
+Rule	Algeria	1977	only	-	Oct	21	 0:00	0	-
+Rule	Algeria	1978	only	-	Mar	24	 1:00	1:00	S
+Rule	Algeria	1978	only	-	Sep	22	 3:00	0	-
+Rule	Algeria	1980	only	-	Apr	25	 0:00	1:00	S
+Rule	Algeria	1980	only	-	Oct	31	 2:00	0	-
+Zone	Africa/Algiers	0:12:12 -	LMT	1891 Mar 15 0:01
+			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
+			0:00	Algeria	WE%sT	1940 Feb 25 2:00
+			1:00	Algeria	CE%sT	1946 Oct  7
+			0:00	-	WET	1956 Jan 29
+			1:00	-	CET	1963 Apr 14
+			0:00	Algeria	WE%sT	1977 Oct 21
+			1:00	Algeria	CE%sT	1979 Oct 26
+			0:00	Algeria	WE%sT	1981 May
+			1:00	-	CET
+Zone	Africa/Luanda	0:52:56	-	LMT	1892
+			0:52:04	-	AOT	1911 May 26 # Angola Time
+			1:00	-	WAT
+Zone Africa/Porto-Novo	0:10:28	-	LMT	1912
+			0:00	-	GMT	1934 Feb 26
+			1:00	-	WAT
+Zone	Africa/Gaborone	1:43:40 -	LMT	1885
+			2:00	-	CAT	1943 Sep 19 2:00
+			2:00	1:00	CAST	1944 Mar 19 2:00
+			2:00	-	CAT
+Zone Africa/Ouagadougou	-0:06:04 -	LMT	1912
+			 0:00	-	GMT
+Zone Africa/Bujumbura	1:57:28	-	LMT	1890
+			2:00	-	CAT
+Zone	Africa/Douala	0:38:48	-	LMT	1912
+			1:00	-	WAT
+Zone Atlantic/Cape_Verde -1:34:04 -	LMT	1907			# Praia
+			-2:00	-	CVT	1942 Sep
+			-2:00	1:00	CVST	1945 Oct 15
+			-2:00	-	CVT	1975 Nov 25 2:00
+			-1:00	-	CVT
+Zone	Africa/Bangui	1:14:20	-	LMT	1912
+			1:00	-	WAT
+Zone	Africa/Ndjamena	1:00:12 -	LMT	1912
+			1:00	-	WAT	1979 Oct 14
+			1:00	1:00	WAST	1980 Mar  8
+			1:00	-	WAT
+Zone	Indian/Comoro	2:53:04 -	LMT	1911 Jul   # Moroni, Gran Comoro
+			3:00	-	EAT
+Zone Africa/Kinshasa	1:01:12 -	LMT	1897 Nov 9
+			1:00	-	WAT
+Zone Africa/Lubumbashi	1:49:52 -	LMT	1897 Nov 9
+			2:00	-	CAT
+Zone Africa/Brazzaville	1:01:08 -	LMT	1912
+			1:00	-	WAT
+Zone	Africa/Abidjan	-0:16:08 -	LMT	1912
+			 0:00	-	GMT
+Zone	Africa/Djibouti	2:52:36 -	LMT	1911 Jul
+			3:00	-	EAT
+Rule	Egypt	1940	only	-	Jul	15	0:00	1:00	S
+Rule	Egypt	1940	only	-	Oct	 1	0:00	0	-
+Rule	Egypt	1941	only	-	Apr	15	0:00	1:00	S
+Rule	Egypt	1941	only	-	Sep	16	0:00	0	-
+Rule	Egypt	1942	1944	-	Apr	 1	0:00	1:00	S
+Rule	Egypt	1942	only	-	Oct	27	0:00	0	-
+Rule	Egypt	1943	1945	-	Nov	 1	0:00	0	-
+Rule	Egypt	1945	only	-	Apr	16	0:00	1:00	S
+Rule	Egypt	1957	only	-	May	10	0:00	1:00	S
+Rule	Egypt	1957	1958	-	Oct	 1	0:00	0	-
+Rule	Egypt	1958	only	-	May	 1	0:00	1:00	S
+Rule	Egypt	1959	1981	-	May	 1	1:00	1:00	S
+Rule	Egypt	1959	1965	-	Sep	30	3:00	0	-
+Rule	Egypt	1966	1994	-	Oct	 1	3:00	0	-
+Rule	Egypt	1982	only	-	Jul	25	1:00	1:00	S
+Rule	Egypt	1983	only	-	Jul	12	1:00	1:00	S
+Rule	Egypt	1984	1988	-	May	 1	1:00	1:00	S
+Rule	Egypt	1989	only	-	May	 6	1:00	1:00	S
+Rule	Egypt	1990	1994	-	May	 1	1:00	1:00	S
+Rule	Egypt	1995	max	-	Apr	lastFri	 0:00s	1:00	S
+Rule	Egypt	1995	2005	-	Sep	lastThu	23:00s	0	-
+Rule	Egypt	2006	only	-	Sep	21	23:00s	0	-
+Rule	Egypt	2007	only	-	Sep	Thu>=1	23:00s	0	-
+Rule	Egypt	2008	only	-	Aug	lastThu	23:00s	0	-
+Rule	Egypt	2009	max	-	Sep	lastThu	23:00s	0	-
+Zone	Africa/Cairo	2:05:00 -	LMT	1900 Oct
+			2:00	Egypt	EE%sT
+Zone	Africa/Malabo	0:35:08 -	LMT	1912
+			0:00	-	GMT	1963 Dec 15
+			1:00	-	WAT
+Zone	Africa/Asmara	2:35:32 -	LMT	1870
+			2:35:32	-	AMT	1890	      # Asmara Mean Time
+			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
+			3:00	-	EAT
+Zone Africa/Addis_Ababa	2:34:48 -	LMT	1870
+			2:35:20	-	ADMT	1936 May 5    # Adis Dera MT
+			3:00	-	EAT
+Zone Africa/Libreville	0:37:48 -	LMT	1912
+			1:00	-	WAT
+Zone	Africa/Banjul	-1:06:36 -	LMT	1912
+			-1:06:36 -	BMT	1935	# Banjul Mean Time
+			-1:00	-	WAT	1964
+			 0:00	-	GMT
+Rule	Ghana	1936	1942	-	Sep	 1	0:00	0:20	GHST
+Rule	Ghana	1936	1942	-	Dec	31	0:00	0	GMT
+Zone	Africa/Accra	-0:00:52 -	LMT	1918
+			 0:00	Ghana	%s
+Zone	Africa/Conakry	-0:54:52 -	LMT	1912
+			 0:00	-	GMT	1934 Feb 26
+			-1:00	-	WAT	1960
+			 0:00	-	GMT
+Zone	Africa/Bissau	-1:02:20 -	LMT	1911 May 26
+			-1:00	-	WAT	1975
+			 0:00	-	GMT
+Zone	Africa/Nairobi	2:27:16	-	LMT	1928 Jul
+			3:00	-	EAT	1930
+			2:30	-	BEAT	1940
+			2:44:45	-	BEAUT	1960
+			3:00	-	EAT
+Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
+			2:00	-	SAST	1943 Sep 19 2:00
+			2:00	1:00	SAST	1944 Mar 19 2:00
+			2:00	-	SAST
+Zone	Africa/Monrovia	-0:43:08 -	LMT	1882
+			-0:43:08 -	MMT	1919 Mar # Monrovia Mean Time
+			-0:44:30 -	LRT	1972 May # Liberia Time
+			 0:00	-	GMT
+Rule	Libya	1951	only	-	Oct	14	2:00	1:00	S
+Rule	Libya	1952	only	-	Jan	 1	0:00	0	-
+Rule	Libya	1953	only	-	Oct	 9	2:00	1:00	S
+Rule	Libya	1954	only	-	Jan	 1	0:00	0	-
+Rule	Libya	1955	only	-	Sep	30	0:00	1:00	S
+Rule	Libya	1956	only	-	Jan	 1	0:00	0	-
+Rule	Libya	1982	1984	-	Apr	 1	0:00	1:00	S
+Rule	Libya	1982	1985	-	Oct	 1	0:00	0	-
+Rule	Libya	1985	only	-	Apr	 6	0:00	1:00	S
+Rule	Libya	1986	only	-	Apr	 4	0:00	1:00	S
+Rule	Libya	1986	only	-	Oct	 3	0:00	0	-
+Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	S
+Rule	Libya	1987	1989	-	Oct	 1	0:00	0	-
+Zone	Africa/Tripoli	0:52:44 -	LMT	1920
+			1:00	Libya	CE%sT	1959
+			2:00	-	EET	1982
+			1:00	Libya	CE%sT	1990 May  4
+			2:00	-	EET	1996 Sep 30
+			1:00	-	CET	1997 Apr  4
+			1:00	1:00	CEST	1997 Oct  4
+			2:00	-	EET
+Zone Indian/Antananarivo 3:10:04 -	LMT	1911 Jul
+			3:00	-	EAT	1954 Feb 27 23:00s
+			3:00	1:00	EAST	1954 May 29 23:00s
+			3:00	-	EAT
+Zone	Africa/Blantyre	2:20:00 -	LMT	1903 Mar
+			2:00	-	CAT
+Zone	Africa/Bamako	-0:32:00 -	LMT	1912
+			 0:00	-	GMT	1934 Feb 26
+			-1:00	-	WAT	1960 Jun 20
+			 0:00	-	GMT
+Zone Africa/Nouakchott	-1:03:48 -	LMT	1912
+			 0:00	-	GMT	1934 Feb 26
+			-1:00	-	WAT	1960 Nov 28
+			 0:00	-	GMT
+Rule Mauritius	1982	only	-	Oct	10	0:00	1:00	S
+Rule Mauritius	1983	only	-	Mar	21	0:00	0	-
+Rule Mauritius	2008	only	-	Oct	lastSun	2:00	1:00	S
+Rule Mauritius	2009	only	-	Mar	lastSun	2:00	0	-
+Zone Indian/Mauritius	3:50:00 -	LMT	1907		# Port Louis
+			4:00 Mauritius	MU%sT	# Mauritius Time
+Zone	Indian/Mayotte	3:00:56 -	LMT	1911 Jul	# Mamoutzou
+			3:00	-	EAT
+Rule	Morocco	1939	only	-	Sep	12	 0:00	1:00	S
+Rule	Morocco	1939	only	-	Nov	19	 0:00	0	-
+Rule	Morocco	1940	only	-	Feb	25	 0:00	1:00	S
+Rule	Morocco	1945	only	-	Nov	18	 0:00	0	-
+Rule	Morocco	1950	only	-	Jun	11	 0:00	1:00	S
+Rule	Morocco	1950	only	-	Oct	29	 0:00	0	-
+Rule	Morocco	1967	only	-	Jun	 3	12:00	1:00	S
+Rule	Morocco	1967	only	-	Oct	 1	 0:00	0	-
+Rule	Morocco	1974	only	-	Jun	24	 0:00	1:00	S
+Rule	Morocco	1974	only	-	Sep	 1	 0:00	0	-
+Rule	Morocco	1976	1977	-	May	 1	 0:00	1:00	S
+Rule	Morocco	1976	only	-	Aug	 1	 0:00	0	-
+Rule	Morocco	1977	only	-	Sep	28	 0:00	0	-
+Rule	Morocco	1978	only	-	Jun	 1	 0:00	1:00	S
+Rule	Morocco	1978	only	-	Aug	 4	 0:00	0	-
+Rule	Morocco	2008	only	-	Jun	 1	 0:00	1:00	S
+Rule	Morocco	2008	only	-	Sep	 1	 0:00	0	-
+Rule	Morocco	2009	only	-	Jun	 1	 0:00	1:00	S
+Rule	Morocco	2009	only	-	Aug	 21	 0:00	0	-
+Zone Africa/Casablanca	-0:30:20 -	LMT	1913 Oct 26
+			 0:00	Morocco	WE%sT	1984 Mar 16
+			 1:00	-	CET	1986
+			 0:00	Morocco	WE%sT
+Zone Africa/El_Aaiun	-0:52:48 -	LMT	1934 Jan
+			-1:00	-	WAT	1976 Apr 14
+			 0:00	-	WET
+Zone	Africa/Maputo	2:10:20 -	LMT	1903 Mar
+			2:00	-	CAT
+Rule	Namibia	1994	max	-	Sep	Sun>=1	2:00	1:00	S
+Rule	Namibia	1995	max	-	Apr	Sun>=1	2:00	0	-
+Zone	Africa/Windhoek	1:08:24 -	LMT	1892 Feb 8
+			1:30	-	SWAT	1903 Mar	# SW Africa Time
+			2:00	-	SAST	1942 Sep 20 2:00
+			2:00	1:00	SAST	1943 Mar 21 2:00
+			2:00	-	SAST	1990 Mar 21 # independence
+			2:00	-	CAT	1994 Apr  3
+			1:00	Namibia	WA%sT
+Zone	Africa/Niamey	 0:08:28 -	LMT	1912
+			-1:00	-	WAT	1934 Feb 26
+			 0:00	-	GMT	1960
+			 1:00	-	WAT
+Zone	Africa/Lagos	0:13:36 -	LMT	1919 Sep
+			1:00	-	WAT
+Zone	Indian/Reunion	3:41:52 -	LMT	1911 Jun	# Saint-Denis
+			4:00	-	RET	# Reunion Time
+Zone	Africa/Kigali	2:00:16 -	LMT	1935 Jun
+			2:00	-	CAT
+Zone Atlantic/St_Helena	-0:22:48 -	LMT	1890		# Jamestown
+			-0:22:48 -	JMT	1951	# Jamestown Mean Time
+			 0:00	-	GMT
+Zone	Africa/Sao_Tome	 0:26:56 -	LMT	1884
+			-0:36:32 -	LMT	1912	# Lisbon Mean Time
+			 0:00	-	GMT
+Zone	Africa/Dakar	-1:09:44 -	LMT	1912
+			-1:00	-	WAT	1941 Jun
+			 0:00	-	GMT
+Zone	Indian/Mahe	3:41:48 -	LMT	1906 Jun	# Victoria
+			4:00	-	SCT	# Seychelles Time
+Rule	SL	1935	1942	-	Jun	 1	0:00	0:40	SLST
+Rule	SL	1935	1942	-	Oct	 1	0:00	0	WAT
+Rule	SL	1957	1962	-	Jun	 1	0:00	1:00	SLST
+Rule	SL	1957	1962	-	Sep	 1	0:00	0	GMT
+Zone	Africa/Freetown	-0:53:00 -	LMT	1882
+			-0:53:00 -	FMT	1913 Jun # Freetown Mean Time
+			-1:00	SL	%s	1957
+			 0:00	SL	%s
+Zone Africa/Mogadishu	3:01:28 -	LMT	1893 Nov
+			3:00	-	EAT	1931
+			2:30	-	BEAT	1957
+			3:00	-	EAT
+Rule	SA	1942	1943	-	Sep	Sun>=15	2:00	1:00	-
+Rule	SA	1943	1944	-	Mar	Sun>=15	2:00	0	-
+Zone Africa/Johannesburg 1:52:00 -	LMT	1892 Feb 8
+			1:30	-	SAST	1903 Mar
+			2:00	SA	SAST
+Rule	Sudan	1970	only	-	May	 1	0:00	1:00	S
+Rule	Sudan	1970	1985	-	Oct	15	0:00	0	-
+Rule	Sudan	1971	only	-	Apr	30	0:00	1:00	S
+Rule	Sudan	1972	1985	-	Apr	lastSun	0:00	1:00	S
+Zone	Africa/Khartoum	2:10:08 -	LMT	1931
+			2:00	Sudan	CA%sT	2000 Jan 15 12:00
+			3:00	-	EAT
+Zone	Africa/Mbabane	2:04:24 -	LMT	1903 Mar
+			2:00	-	SAST
+Zone Africa/Dar_es_Salaam 2:37:08 -	LMT	1931
+			3:00	-	EAT	1948
+			2:44:45	-	BEAUT	1961
+			3:00	-	EAT
+Zone	Africa/Lome	0:04:52 -	LMT	1893
+			0:00	-	GMT
+Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	S
+Rule	Tunisia	1939	only	-	Nov	18	23:00s	0	-
+Rule	Tunisia	1940	only	-	Feb	25	23:00s	1:00	S
+Rule	Tunisia	1941	only	-	Oct	 6	 0:00	0	-
+Rule	Tunisia	1942	only	-	Mar	 9	 0:00	1:00	S
+Rule	Tunisia	1942	only	-	Nov	 2	 3:00	0	-
+Rule	Tunisia	1943	only	-	Mar	29	 2:00	1:00	S
+Rule	Tunisia	1943	only	-	Apr	17	 2:00	0	-
+Rule	Tunisia	1943	only	-	Apr	25	 2:00	1:00	S
+Rule	Tunisia	1943	only	-	Oct	 4	 2:00	0	-
+Rule	Tunisia	1944	1945	-	Apr	Mon>=1	 2:00	1:00	S
+Rule	Tunisia	1944	only	-	Oct	 8	 0:00	0	-
+Rule	Tunisia	1945	only	-	Sep	16	 0:00	0	-
+Rule	Tunisia	1977	only	-	Apr	30	 0:00s	1:00	S
+Rule	Tunisia	1977	only	-	Sep	24	 0:00s	0	-
+Rule	Tunisia	1978	only	-	May	 1	 0:00s	1:00	S
+Rule	Tunisia	1978	only	-	Oct	 1	 0:00s	0	-
+Rule	Tunisia	1988	only	-	Jun	 1	 0:00s	1:00	S
+Rule	Tunisia	1988	1990	-	Sep	lastSun	 0:00s	0	-
+Rule	Tunisia	1989	only	-	Mar	26	 0:00s	1:00	S
+Rule	Tunisia	1990	only	-	May	 1	 0:00s	1:00	S
+Rule	Tunisia	2005	only	-	May	 1	 0:00s	1:00	S
+Rule	Tunisia	2005	only	-	Sep	30	 1:00s	0	-
+Rule	Tunisia	2006	2008	-	Mar	lastSun	 2:00s	1:00	S
+Rule	Tunisia	2006	2008	-	Oct	lastSun	 2:00s	0	-
+Rule	Tunisia	2010	max	-	Mar	lastSun	 2:00s	1:00	S
+Rule	Tunisia	2010	max	-	Oct	lastSun	 2:00s	0	-
+Zone	Africa/Tunis	0:40:44 -	LMT	1881 May 12
+			0:09:21	-	PMT	1911 Mar 11    # Paris Mean Time
+			1:00	Tunisia	CE%sT
+Zone	Africa/Kampala	2:09:40 -	LMT	1928 Jul
+			3:00	-	EAT	1930
+			2:30	-	BEAT	1948
+			2:44:45	-	BEAUT	1957
+			3:00	-	EAT
+Zone	Africa/Lusaka	1:53:08 -	LMT	1903 Mar
+			2:00	-	CAT
+Zone	Africa/Harare	2:04:12 -	LMT	1903 Mar
+			2:00	-	CAT
Index: trunk/web/dojo/dojox/date/hebrew/numerals.js
===================================================================
--- trunk/web/dojo/dojox/date/hebrew/numerals.js	(revision 0)
+++ trunk/web/dojo/dojox/date/hebrew/numerals.js	(revision 9)
@@ -0,0 +1,100 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew.numerals"]){
+dojo._hasResource["dojox.date.hebrew.numerals"]=true;
+dojo.provide("dojox.date.hebrew.numerals");
+(function(){
+var _1="אבגדהוזחט";
+var _2="יכלמנסעפצ";
+var _3="קרשת";
+var _4=function(_5,_6){
+_5=_5.replace("יה","טו").replace("יו","טז");
+if(!_6){
+var _7=_5.length;
+if(_7>1){
+_5=_5.substr(0,_7-1)+"\""+_5.charAt(_7-1);
+}else{
+_5+="׳";
+}
+}
+return _5;
+};
+var _8=function(_9){
+var _a=0;
+dojo.forEach(_9,function(ch){
+var i;
+if((i=_1.indexOf(ch))!=-1){
+_a+=++i;
+}else{
+if((i=_2.indexOf(ch))!=-1){
+_a+=10*++i;
+}else{
+if((i=_3.indexOf(ch))!=-1){
+_a+=100*++i;
+}
+}
+}
+});
+return _a;
+};
+var _b=function(_c){
+var _d="",n=4,j=9;
+while(_c){
+if(_c>=n*100){
+_d+=_3.charAt(n-1);
+_c-=n*100;
+continue;
+}else{
+if(n>1){
+n--;
+continue;
+}else{
+if(_c>=j*10){
+_d+=_2.charAt(j-1);
+_c-=j*10;
+}else{
+if(j>1){
+j--;
+continue;
+}else{
+if(_c>0){
+_d+=_1.charAt(_c-1);
+_c=0;
+}
+}
+}
+}
+}
+}
+return _d;
+};
+dojox.date.hebrew.numerals.getYearHebrewLetters=function(_e){
+var _f=_e%1000;
+return _4(_b(_f));
+};
+dojox.date.hebrew.numerals.parseYearHebrewLetters=function(_10){
+return _8(_10)+5000;
+};
+dojox.date.hebrew.numerals.getDayHebrewLetters=function(day,_11){
+return _4(_b(day),_11);
+};
+dojox.date.hebrew.numerals.parseDayHebrewLetters=function(day){
+return _8(day);
+};
+dojox.date.hebrew.numerals.getMonthHebrewLetters=function(_12){
+return _4(_b(_12+1));
+};
+dojox.date.hebrew.numerals.parseMonthHebrewLetters=function(_13){
+var _14=dojox.date.hebrew.numerals.parseDayHebrewLetters(_13)-1;
+if(_14==-1||_14>12){
+throw new Error("The month name is incorrect , month = "+_14);
+}
+return _14;
+};
+})();
+}
Index: trunk/web/dojo/dojox/date/hebrew/Date.js
===================================================================
--- trunk/web/dojo/dojox/date/hebrew/Date.js	(revision 0)
+++ trunk/web/dojo/dojox/date/hebrew/Date.js	(revision 9)
@@ -0,0 +1,306 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew.Date"]){
+dojo._hasResource["dojox.date.hebrew.Date"]=true;
+dojo.provide("dojox.date.hebrew.Date");
+dojo.require("dojox.date.hebrew.numerals");
+dojo.declare("dojox.date.hebrew.Date",null,{_MONTH_LENGTH:[[30,30,30],[29,29,30],[29,30,30],[29,29,29],[30,30,30],[30,30,30],[29,29,29],[30,30,30],[29,29,29],[30,30,30],[29,29,29],[30,30,30],[29,29,29]],_MONTH_START:[[0,0,0],[30,30,30],[59,59,60],[88,89,90],[117,118,119],[147,148,149],[147,148,149],[176,177,178],[206,207,208],[235,236,237],[265,266,267],[294,295,296],[324,325,326],[353,354,355]],_LEAP_MONTH_START:[[0,0,0],[30,30,30],[59,59,60],[88,89,90],[117,118,119],[147,148,149],[177,178,179],[206,207,208],[236,237,238],[265,266,267],[295,296,297],[324,325,326],[354,355,356],[383,384,385]],_GREGORIAN_MONTH_COUNT:[[31,31,0,0],[28,29,31,31],[31,31,59,60],[30,30,90,91],[31,31,120,121],[30,30,151,152],[31,31,181,182],[31,31,212,213],[30,30,243,244],[31,31,273,274],[30,30,304,305],[31,31,334,335]],_date:0,_month:0,_year:0,_hours:0,_minutes:0,_seconds:0,_milliseconds:0,_day:0,constructor:function(){
+var _1=arguments.length;
+if(!_1){
+this.fromGregorian(new Date());
+}else{
+if(_1==1){
+var _2=arguments[0];
+if(typeof _2=="number"){
+_2=new Date(_2);
+}
+if(_2 instanceof Date){
+this.fromGregorian(_2);
+}else{
+if(_2==""){
+this._date=new Date("");
+}else{
+this._year=_2._year;
+this._month=_2._month;
+this._date=_2._date;
+this._hours=_2._hours;
+this._minutes=_2._minutes;
+this._seconds=_2._seconds;
+this._milliseconds=_2._milliseconds;
+}
+}
+}else{
+if(_1>=3){
+this._year+=arguments[0];
+this._month+=arguments[1];
+this._date+=arguments[2];
+if(this._month>12){
+console.warn("the month is incorrect , set 0  "+this._month+"   "+this._year);
+this._month=0;
+}
+this._hours+=arguments[3]||0;
+this._minutes+=arguments[4]||0;
+this._seconds+=arguments[5]||0;
+this._milliseconds+=arguments[6]||0;
+}
+}
+}
+this._setDay();
+},getDate:function(){
+return this._date;
+},getDateLocalized:function(_3){
+return (_3||dojo.locale).match(/^he(?:-.+)?$/)?dojox.date.hebrew.numerals.getDayHebrewLetters(this._date):this.getDate();
+},getMonth:function(){
+return this._month;
+},getFullYear:function(){
+return this._year;
+},getHours:function(){
+return this._hours;
+},getMinutes:function(){
+return this._minutes;
+},getSeconds:function(){
+return this._seconds;
+},getMilliseconds:function(){
+return this._milliseconds;
+},setDate:function(_4){
+_4=+_4;
+var _5;
+if(_4>0){
+while(_4>(_5=this.getDaysInHebrewMonth(this._month,this._year))){
+_4-=_5;
+this._month++;
+if(this._month>=13){
+this._year++;
+this._month-=13;
+}
+}
+}else{
+while(_4<=0){
+_5=this.getDaysInHebrewMonth((this._month-1)>=0?(this._month-1):12,((this._month-1)>=0)?this._year:this._year-1);
+this._month--;
+if(this._month<0){
+this._year--;
+this._month+=13;
+}
+_4+=_5;
+}
+}
+this._date=_4;
+this._setDay();
+return this;
+},setFullYear:function(_6,_7,_8){
+this._year=_6=+_6;
+if(!this.isLeapYear(_6)&&this._month==5){
+this._month++;
+}
+if(_7!==undefined){
+this.setMonth(_7);
+}
+if(_8!==undefined){
+this.setDate(_8);
+}
+var _9=this.getDaysInHebrewMonth(this._month,this._year);
+if(_9<this._date){
+this._date=_9;
+}
+this._setDay();
+return this;
+},setMonth:function(_a){
+_a=+_a;
+if(!this.isLeapYear(this._year)&&_a==5){
+_a++;
+}
+if(_a>=0){
+while(_a>12){
+this._year++;
+_a-=13;
+if(!this.isLeapYear(this._year)&&_a>=5){
+_a++;
+}
+}
+}else{
+while(_a<0){
+this._year--;
+_a+=(!this.isLeapYear(this._year)&&_a<-7)?12:13;
+}
+}
+this._month=_a;
+var _b=this.getDaysInHebrewMonth(this._month,this._year);
+if(_b<this._date){
+this._date=_b;
+}
+this._setDay();
+return this;
+},setHours:function(){
+var _c=arguments.length;
+var _d=0;
+if(_c>=1){
+_d+=+arguments[0];
+}
+if(_c>=2){
+this._minutes+=+arguments[1];
+}
+if(_c>=3){
+this._seconds+=+arguments[2];
+}
+if(_c==4){
+this._milliseconds+=+arguments[3];
+}
+while(_d>=24){
+this._date++;
+var _e=this.getDaysInHebrewMonth(this._month,this._year);
+if(this._date>_e){
+this._month++;
+if(!this.isLeapYear(this._year)&&this._month==5){
+this._month++;
+}
+if(this._month>=13){
+this._year++;
+this._month-=13;
+}
+this._date-=_e;
+}
+_d-=24;
+}
+this._hours=_d;
+this._setDay();
+return this;
+},setMinutes:function(_f){
+_f=+_f;
+this._minutes=_f%60;
+this.setHours(parseInt(_f/60));
+this._setDay();
+return this;
+},setSeconds:function(_10){
+_10=+_10;
+this._seconds=_10%60;
+this.setMinutes(parseInt(_10/60));
+this._setDay();
+return this;
+},setMilliseconds:function(_11){
+_11=+_11;
+this._milliseconds=_11%1000;
+this.setSeconds(parseInt(_11/1000));
+this._setDay();
+return this;
+},_setDay:function(){
+var day=this._startOfYear(this._year);
+if(this._month!=0){
+day+=(this.isLeapYear(this._year)?this._LEAP_MONTH_START:this._MONTH_START)[this._month][this._yearType(this._year)];
+}
+day+=this._date-1;
+this._day=(day+1)%7;
+},toString:function(){
+return this._date+", "+this._month+", "+this._year+"  "+this._hours+":"+this._minutes+":"+this._seconds;
+},getDaysInHebrewMonth:function(_12,_13){
+var _14=(_12==1||_12==2)?this._yearType(_13):0;
+return (!this.isLeapYear(this._year)&&_12==5)?0:this._MONTH_LENGTH[_12][_14];
+},_yearType:function(_15){
+var _16=this._handleGetYearLength(Number(_15));
+if(_16>380){
+_16-=30;
+}
+var _17=_16-353;
+if(_17<0||_17>2){
+throw new Error("Illegal year length "+_16+" in year "+_15);
+}
+return _17;
+},_handleGetYearLength:function(_18){
+return this._startOfYear(_18+1)-this._startOfYear(_18);
+},_startOfYear:function(_19){
+var _1a=Math.floor((235*_19-234)/19),_1b=_1a*(12*1080+793)+11*1080+204,day=_1a*29+Math.floor(_1b/(24*1080));
+_1b%=24*1080;
+var wd=day%7;
+if(wd==2||wd==4||wd==6){
+day+=1;
+wd=day%7;
+}
+if(wd==1&&_1b>15*1080+204&&!this.isLeapYear(_19)){
+day+=2;
+}else{
+if(wd==0&&_1b>21*1080+589&&this.isLeapYear(_19-1)){
+day+=1;
+}
+}
+return day;
+},isLeapYear:function(_1c){
+var x=(_1c*12+17)%19;
+return x>=((x<0)?-7:12);
+},fromGregorian:function(_1d){
+var _1e=this._computeHebrewFields(_1d);
+this._year=_1e[0];
+this._month=_1e[1];
+this._date=_1e[2];
+this._hours=_1d.getHours();
+this._milliseconds=_1d.getMilliseconds();
+this._minutes=_1d.getMinutes();
+this._seconds=_1d.getSeconds();
+this._setDay();
+return this;
+},_computeHebrewFields:function(_1f){
+var _20=this._getJulianDayFromGregorianDate(_1f),d=_20-347997,m=Math.floor((d*24*1080)/(29*24*1080+12*1080+793)),_21=Math.floor((19*m+234)/235)+1,ys=this._startOfYear(_21),_22=(d-ys);
+while(_22<1){
+_21--;
+ys=this._startOfYear(_21);
+_22=d-ys;
+}
+var _23=this._yearType(_21),_24=this.isLeapYear(_21)?this._LEAP_MONTH_START:this._MONTH_START,_25=0;
+while(_22>_24[_25][_23]){
+_25++;
+}
+_25--;
+var _26=_22-_24[_25][_23];
+return [_21,_25,_26];
+},toGregorian:function(){
+var _27=this._year,_28=this._month,_29=this._date,day=this._startOfYear(_27);
+if(_28!=0){
+day+=(this.isLeapYear(_27)?this._LEAP_MONTH_START:this._MONTH_START)[_28][this._yearType(_27)];
+}
+var _2a=(_29+day+347997),_2b=_2a-1721426;
+var rem=[];
+var _2c=this._floorDivide(_2b,146097,rem),_2d=this._floorDivide(rem[0],36524,rem),n4=this._floorDivide(rem[0],1461,rem),n1=this._floorDivide(rem[0],365,rem),_2e=400*_2c+100*_2d+4*n4+n1,_2f=rem[0];
+if(_2d==4||n1==4){
+_2f=365;
+}else{
+++_2e;
+}
+var _30=!(_2e%4)&&(_2e%100||!(_2e%400)),_31=0,_32=_30?60:59;
+if(_2f>=_32){
+_31=_30?1:2;
+}
+var _33=Math.floor((12*(_2f+_31)+6)/367);
+var _34=_2f-this._GREGORIAN_MONTH_COUNT[_33][_30?3:2]+1;
+return new Date(_2e,_33,_34,this._hours,this._minutes,this._seconds,this._milliseconds);
+},_floorDivide:function(_35,_36,_37){
+if(_35>=0){
+_37[0]=(_35%_36);
+return Math.floor(_35/_36);
+}
+var _38=Math.floor(_35/_36);
+_37[0]=_35-(_38*_36);
+return _38;
+},getDay:function(){
+var _39=this._year,_3a=this._month,_3b=this._date,day=this._startOfYear(_39);
+if(_3a!=0){
+day+=(this.isLeapYear(_39)?this._LEAP_MONTH_START:this._MONTH_START)[_3a][this._yearType(_39)];
+}
+day+=_3b-1;
+return (day+1)%7;
+},_getJulianDayFromGregorianDate:function(_3c){
+var _3d=_3c.getFullYear(),_3e=_3c.getMonth(),d=_3c.getDate(),_3f=!(_3d%4)&&(_3d%100||!(_3d%400)),y=_3d-1;
+var _40=365*y+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400)+1721426-1;
+if(_3e!=0){
+_40+=this._GREGORIAN_MONTH_COUNT[_3e][_3f?3:2];
+}
+_40+=d;
+return _40;
+}});
+dojox.date.hebrew.Date.prototype.valueOf=function(){
+return this.toGregorian().valueOf();
+};
+}
Index: trunk/web/dojo/dojox/date/hebrew/locale.js
===================================================================
--- trunk/web/dojo/dojox/date/hebrew/locale.js	(revision 0)
+++ trunk/web/dojo/dojox/date/hebrew/locale.js	(revision 9)
@@ -0,0 +1,426 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.hebrew.locale"]){
+dojo._hasResource["dojox.date.hebrew.locale"]=true;
+dojo.provide("dojox.date.hebrew.locale");
+dojo.require("dojox.date.hebrew.Date");
+dojo.require("dojox.date.hebrew.numerals");
+dojo.require("dojo.regexp");
+dojo.require("dojo.string");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojo.cldr","hebrew",null,"ROOT,ar,he");
+(function(){
+function _1(_2,_3,_4,_5,_6){
+return _6.replace(/([a-z])\1*/ig,function(_7){
+var s,_8;
+var c=_7.charAt(0);
+var l=_7.length;
+var _9=["abbr","wide","narrow"];
+switch(c){
+case "y":
+if(_4.match(/^he(?:-.+)?$/)){
+s=dojox.date.hebrew.numerals.getYearHebrewLetters(_2.getFullYear());
+}else{
+s=String(_2.getFullYear());
+}
+break;
+case "M":
+var m=_2.getMonth();
+if(l<3){
+if(!_2.isLeapYear(_2.getFullYear())&&m>5){
+m--;
+}
+if(_4.match(/^he(?:-.+)?$/)){
+s=dojox.date.hebrew.numerals.getMonthHebrewLetters(m);
+}else{
+s=m+1;
+_8=true;
+}
+}else{
+var _a=dojox.date.hebrew.locale.getNames("months",_9[l-3],"format",_4,_2);
+s=_a[m];
+}
+break;
+case "d":
+if(_4.match(/^he(?:-.+)?$/)){
+s=_2.getDateLocalized(_4);
+}else{
+s=_2.getDate();
+_8=true;
+}
+break;
+case "E":
+var d=_2.getDay();
+if(l<3){
+s=d+1;
+_8=true;
+}else{
+var _b=["days","format",_9[l-3]].join("-");
+s=_3[_b][d];
+}
+break;
+case "a":
+var _c=(_2.getHours()<12)?"am":"pm";
+s=_3["dayPeriods-format-wide-"+_c];
+break;
+case "h":
+case "H":
+case "K":
+case "k":
+var h=_2.getHours();
+switch(c){
+case "h":
+s=(h%12)||12;
+break;
+case "H":
+s=h;
+break;
+case "K":
+s=(h%12);
+break;
+case "k":
+s=h||24;
+break;
+}
+_8=true;
+break;
+case "m":
+s=_2.getMinutes();
+_8=true;
+break;
+case "s":
+s=_2.getSeconds();
+_8=true;
+break;
+case "S":
+s=Math.round(_2.getMilliseconds()*Math.pow(10,l-3));
+_8=true;
+break;
+case "z":
+s="";
+break;
+default:
+throw new Error("dojox.date.hebrew.locale.formatPattern: invalid pattern char: "+_6);
+}
+if(_8){
+s=dojo.string.pad(s,l);
+}
+return s;
+});
+};
+dojox.date.hebrew.locale.format=function(_d,_e){
+_e=_e||{};
+var _f=dojo.i18n.normalizeLocale(_e.locale);
+var _10=_e.formatLength||"short";
+var _11=dojox.date.hebrew.locale._getHebrewBundle(_f);
+var str=[];
+var _12=dojo.hitch(this,_1,_d,_11,_f,_e.fullYear);
+if(_e.selector=="year"){
+var _13=_d.getFullYear();
+return _f.match(/^he(?:-.+)?$/)?dojox.date.hebrew.numerals.getYearHebrewLetters(_13):_13;
+}
+if(_e.selector!="time"){
+var _14=_e.datePattern||_11["dateFormat-"+_10];
+if(_14){
+str.push(_15(_14,_12));
+}
+}
+if(_e.selector!="date"){
+var _16=_e.timePattern||_11["timeFormat-"+_10];
+if(_16){
+str.push(_15(_16,_12));
+}
+}
+var _17=str.join(" ");
+return _17;
+};
+dojox.date.hebrew.locale.regexp=function(_18){
+return dojox.date.hebrew.locale._parseInfo(_18).regexp;
+};
+dojox.date.hebrew.locale._parseInfo=function(_19){
+_19=_19||{};
+var _1a=dojo.i18n.normalizeLocale(_19.locale);
+var _1b=dojox.date.hebrew.locale._getHebrewBundle(_1a);
+var _1c=_19.formatLength||"short";
+var _1d=_19.datePattern||_1b["dateFormat-"+_1c];
+var _1e=_19.timePattern||_1b["timeFormat-"+_1c];
+var _1f;
+if(_19.selector=="date"){
+_1f=_1d;
+}else{
+if(_19.selector=="time"){
+_1f=_1e;
+}else{
+_1f=(_1e===undefined)?_1d:_1d+" "+_1e;
+}
+}
+var _20=[];
+var re=_15(_1f,dojo.hitch(this,_21,_20,_1b,_19));
+return {regexp:re,tokens:_20,bundle:_1b};
+};
+dojox.date.hebrew.locale.parse=function(_22,_23){
+_22=_22.replace(/[\u200E\u200F\u202A-\u202E]/g,"");
+if(!_23){
+_23={};
+}
+var _24=dojox.date.hebrew.locale._parseInfo(_23);
+var _25=_24.tokens,_26=_24.bundle;
+var re=new RegExp("^"+_24.regexp+"$");
+var _27=re.exec(_22);
+var _28=dojo.i18n.normalizeLocale(_23.locale);
+if(!_27){
+return null;
+}
+var _29,_2a;
+var _2b=[5730,3,23,0,0,0,0];
+var _2c="";
+var _2d=0;
+var _2e=["abbr","wide","narrow"];
+var _2f=dojo.every(_27,function(v,i){
+if(!i){
+return true;
+}
+var _30=_25[i-1];
+var l=_30.length;
+switch(_30.charAt(0)){
+case "y":
+if(_28.match(/^he(?:-.+)?$/)){
+_2b[0]=dojox.date.hebrew.numerals.parseYearHebrewLetters(v);
+}else{
+_2b[0]=Number(v);
+}
+break;
+case "M":
+if(l>2){
+var _31=dojox.date.hebrew.locale.getNames("months",_2e[l-3],"format",_28,new dojox.date.hebrew.Date(5769,1,1)),_32=dojox.date.hebrew.locale.getNames("months",_2e[l-3],"format",_28,new dojox.date.hebrew.Date(5768,1,1));
+if(!_23.strict){
+v=v.replace(".","").toLowerCase();
+_31=dojo.map(_31,function(s){
+return s?s.replace(".","").toLowerCase():s;
+});
+_32=dojo.map(_32,function(s){
+return s?s.replace(".","").toLowerCase():s;
+});
+}
+var _33=v;
+v=dojo.indexOf(_31,_33);
+if(v==-1){
+v=dojo.indexOf(_32,_33);
+if(v==-1){
+return false;
+}
+}
+_2d=l;
+}else{
+if(_28.match(/^he(?:-.+)?$/)){
+v=dojox.date.hebrew.numerals.parseMonthHebrewLetters(v);
+}else{
+v--;
+}
+}
+_2b[1]=Number(v);
+break;
+case "D":
+_2b[1]=0;
+case "d":
+if(_28.match(/^he(?:-.+)?$/)){
+_2b[2]=dojox.date.hebrew.numerals.parseDayHebrewLetters(v);
+}else{
+_2b[2]=Number(v);
+}
+break;
+case "a":
+var am=_23.am||_26["dayPeriods-format-wide-am"],pm=_23.pm||_26["dayPeriods-format-wide-pm"];
+if(!_23.strict){
+var _34=/\./g;
+v=v.replace(_34,"").toLowerCase();
+am=am.replace(_34,"").toLowerCase();
+pm=pm.replace(_34,"").toLowerCase();
+}
+if(_23.strict&&v!=am&&v!=pm){
+return false;
+}
+_2c=(v==pm)?"p":(v==am)?"a":"";
+break;
+case "K":
+if(v==24){
+v=0;
+}
+case "h":
+case "H":
+case "k":
+_2b[3]=Number(v);
+break;
+case "m":
+_2b[4]=Number(v);
+break;
+case "s":
+_2b[5]=Number(v);
+break;
+case "S":
+_2b[6]=Number(v);
+}
+return true;
+});
+var _35=+_2b[3];
+if(_2c==="p"&&_35<12){
+_2b[3]=_35+12;
+}else{
+if(_2c==="a"&&_35==12){
+_2b[3]=0;
+}
+}
+var _36=new dojox.date.hebrew.Date(_2b[0],_2b[1],_2b[2],_2b[3],_2b[4],_2b[5],_2b[6]);
+if(_2d<3&&_2b[1]>=5&&!_36.isLeapYear(_36.getFullYear())){
+_36.setMonth(_2b[1]+1);
+}
+return _36;
+};
+function _15(_37,_38,_39,_3a){
+var _3b=function(x){
+return x;
+};
+_38=_38||_3b;
+_39=_39||_3b;
+_3a=_3a||_3b;
+var _3c=_37.match(/(''|[^'])+/g);
+var _3d=_37.charAt(0)=="'";
+dojo.forEach(_3c,function(_3e,i){
+if(!_3e){
+_3c[i]="";
+}else{
+_3c[i]=(_3d?_39:_38)(_3e);
+_3d=!_3d;
+}
+});
+return _3a(_3c.join(""));
+};
+function _21(_3f,_40,_41,_42){
+_42=dojo.regexp.escapeString(_42);
+var _43=dojo.i18n.normalizeLocale(_41.locale);
+return _42.replace(/([a-z])\1*/ig,function(_44){
+var s;
+var c=_44.charAt(0);
+var l=_44.length;
+var p2="",p3="";
+if(_41.strict){
+if(l>1){
+p2="0"+"{"+(l-1)+"}";
+}
+if(l>2){
+p3="0"+"{"+(l-2)+"}";
+}
+}else{
+p2="0?";
+p3="0{0,2}";
+}
+switch(c){
+case "y":
+s="\\S+";
+break;
+case "M":
+if(_43.match("^he(?:-.+)?$")){
+s=(l>2)?"\\S+ ?\\S+":"\\S{1,4}";
+}else{
+s=(l>2)?"\\S+ ?\\S+":p2+"[1-9]|1[0-2]";
+}
+break;
+case "d":
+if(_43.match("^he(?:-.+)?$")){
+s="\\S['\"'׳]{1,2}\\S?";
+}else{
+s="[12]\\d|"+p2+"[1-9]|30";
+}
+break;
+case "E":
+if(_43.match("^he(?:-.+)?$")){
+s=(l>3)?"\\S+ ?\\S+":"\\S";
+}else{
+s="\\S+";
+}
+break;
+case "h":
+s=p2+"[1-9]|1[0-2]";
+break;
+case "k":
+s=p2+"\\d|1[01]";
+break;
+case "H":
+s=p2+"\\d|1\\d|2[0-3]";
+break;
+case "K":
+s=p2+"[1-9]|1\\d|2[0-4]";
+break;
+case "m":
+case "s":
+s=p2+"\\d|[0-5]\\d";
+break;
+case "S":
+s="\\d{"+l+"}";
+break;
+case "a":
+var am=_41.am||_40["dayPeriods-format-wide-am"],pm=_41.pm||_40["dayPeriods-format-wide-pm"];
+if(_41.strict){
+s=am+"|"+pm;
+}else{
+s=am+"|"+pm;
+if(am!=am.toLowerCase()){
+s+="|"+am.toLowerCase();
+}
+if(pm!=pm.toLowerCase()){
+s+="|"+pm.toLowerCase();
+}
+}
+break;
+default:
+s=".*";
+}
+if(_3f){
+_3f.push(_44);
+}
+return "("+s+")";
+}).replace(/[\xa0 ]/g,"[\\s\\xa0]");
+};
+})();
+(function(){
+var _45=[];
+dojox.date.hebrew.locale.addCustomFormats=function(_46,_47){
+_45.push({pkg:_46,name:_47});
+};
+dojox.date.hebrew.locale._getHebrewBundle=function(_48){
+var _49={};
+dojo.forEach(_45,function(_4a){
+var _4b=dojo.i18n.getLocalization(_4a.pkg,_4a.name,_48);
+_49=dojo.mixin(_49,_4b);
+},this);
+return _49;
+};
+})();
+dojox.date.hebrew.locale.addCustomFormats("dojo.cldr","hebrew");
+dojox.date.hebrew.locale.getNames=function(_4c,_4d,_4e,_4f,_50){
+var _51,_52=dojox.date.hebrew.locale._getHebrewBundle,_53=[_4c,_4e,_4d];
+if(_4e=="standAlone"){
+var key=_53.join("-");
+_51=_52(_4f)[key];
+if(_51===_52("ROOT")[key]){
+_51=undefined;
+}
+}
+_53[1]="format";
+var _54=(_51||_52(_4f)[_53.join("-")]).concat();
+if(_4c=="months"){
+if(_50.isLeapYear(_50.getFullYear())){
+_53.push("leap");
+_54[6]=_52(_4f)[_53.join("-")];
+}else{
+delete _54[5];
+}
+}
+return _54;
+};
+}
Index: trunk/web/dojo/dojox/date/islamic.js
===================================================================
--- trunk/web/dojo/dojox/date/islamic.js	(revision 0)
+++ trunk/web/dojo/dojox/date/islamic.js	(revision 9)
@@ -0,0 +1,184 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.islamic"]){
+dojo._hasResource["dojox.date.islamic"]=true;
+dojo.provide("dojox.date.islamic");
+dojo.require("dojox.date.islamic.Date");
+dojo.require("dojo.date");
+dojox.date.islamic.getDaysInMonth=function(_1){
+return _1.getDaysInIslamicMonth(_1.getMonth(),_1.getFullYear());
+};
+dojox.date.islamic.compare=function(_2,_3,_4){
+if(_2 instanceof dojox.date.islamic.Date){
+_2=_2.toGregorian();
+}
+if(_3 instanceof dojox.date.islamic.Date){
+_3=_3.toGregorian();
+}
+return dojo.date.compare.apply(null,arguments);
+};
+dojox.date.islamic.add=function(_5,_6,_7){
+var _8=new dojox.date.islamic.Date(_5);
+switch(_6){
+case "day":
+_8.setDate(_5.getDate()+_7);
+break;
+case "weekday":
+var _9=_5.getDay();
+if(((_9+_7)<5)&&((_9+_7)>0)){
+_8.setDate(_5.getDate()+_7);
+}else{
+var _a=0,_b=0;
+if(_9==5){
+_9=4;
+_b=(_7>0)?-1:1;
+}else{
+if(_9==6){
+_9=4;
+_b=(_7>0)?-2:2;
+}
+}
+var _c=(_7>0)?(5-_9-1):-_9;
+var _d=_7-_c;
+var _e=parseInt(_d/5);
+if(_d%5!=0){
+_a=(_7>0)?2:-2;
+}
+_a=_a+_e*7+_d%5+_c;
+_8.setDate(_5.getDate()+_a+_b);
+}
+break;
+case "year":
+_8.setFullYear(_5.getFullYear()+_7);
+break;
+case "week":
+_7*=7;
+_8.setDate(_5.getDate()+_7);
+break;
+case "month":
+var _f=_5.getMonth();
+_8.setMonth(_f+_7);
+break;
+case "hour":
+_8.setHours(_5.getHours()+_7);
+break;
+case "minute":
+_8.setMinutes(_5.getMinutes()+_7);
+break;
+case "second":
+_8.setSeconds(_5.getSeconds()+_7);
+break;
+case "millisecond":
+_8.setMilliseconds(_5.getMilliseconds()+_7);
+break;
+}
+return _8;
+};
+dojox.date.islamic.difference=function(_10,_11,_12){
+_11=_11||new dojox.date.islamic.Date();
+_12=_12||"day";
+var _13=_10.getFullYear()-_11.getFullYear();
+var _14=1;
+switch(_12){
+case "weekday":
+var _15=Math.round(dojox.date.islamic.difference(_10,_11,"day"));
+var _16=parseInt(dojox.date.islamic.difference(_10,_11,"week"));
+var mod=_15%7;
+if(mod==0){
+_15=_16*5;
+}else{
+var adj=0;
+var _17=_11.getDay();
+var _18=_10.getDay();
+_16=parseInt(_15/7);
+mod=_15%7;
+var _19=new dojox.date.islamic.Date(_11);
+_19.setDate(_19.getDate()+(_16*7));
+var _1a=_19.getDay();
+if(_15>0){
+switch(true){
+case _17==5:
+adj=-1;
+break;
+case _17==6:
+adj=0;
+break;
+case _18==5:
+adj=-1;
+break;
+case _18==6:
+adj=-2;
+break;
+case (_1a+mod)>5:
+adj=-2;
+}
+}else{
+if(_15<0){
+switch(true){
+case _17==5:
+adj=0;
+break;
+case _17==6:
+adj=1;
+break;
+case _18==5:
+adj=2;
+break;
+case _18==6:
+adj=1;
+break;
+case (_1a+mod)<0:
+adj=2;
+}
+}
+}
+_15+=adj;
+_15-=(_16*2);
+}
+_14=_15;
+break;
+case "year":
+_14=_13;
+break;
+case "month":
+var _1b=(_10.toGregorian()>_11.toGregorian())?_10:_11;
+var _1c=(_10.toGregorian()>_11.toGregorian())?_11:_10;
+var _1d=_1b.getMonth();
+var _1e=_1c.getMonth();
+if(_13==0){
+_14=_1b.getMonth()-_1c.getMonth();
+}else{
+_14=12-_1e;
+_14+=_1d;
+var i=_1c.getFullYear()+1;
+var e=_1b.getFullYear();
+for(i;i<e;i++){
+_14+=12;
+}
+}
+if(_10.toGregorian()<_11.toGregorian()){
+_14=-_14;
+}
+break;
+case "week":
+_14=parseInt(dojox.date.islamic.difference(_10,_11,"day")/7);
+break;
+case "day":
+_14/=24;
+case "hour":
+_14/=60;
+case "minute":
+_14/=60;
+case "second":
+_14/=1000;
+case "millisecond":
+_14*=_10.toGregorian().getTime()-_11.toGregorian().getTime();
+}
+return Math.round(_14);
+};
+}
Index: trunk/web/dojo/dojox/date/README
===================================================================
--- trunk/web/dojo/dojox/date/README	(revision 0)
+++ trunk/web/dojo/dojox/date/README	(revision 9)
@@ -0,0 +1,48 @@
+-------------------------------------------------------------------------------
+DojoX Date
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 5/17/2007
+-------------------------------------------------------------------------------
+Project state:
+varies
+
+Buddhist, Hebrew, Islamic calendars: stable
+posix, php: beta
+timezone: experimental
+
+-------------------------------------------------------------------------------
+Credits
+	Paul Sowden (dojox.date.posix)
+	Neil Roberts (dojox.date.php)
+	Hossam Aldin Katory (dojox.date.islamic, dojox.date.hebrew)
+	Helena Halperin, Moshe Wajnberg, Tomer Mahlin (dojox.date.hebrew)
+	Nathan Toone (dojox.date.relative, dojox.date.tzdate, dojox.date.timezone)
+-------------------------------------------------------------------------------
+Project description
+
+Placeholder for any kind of date operations, including formatters that are
+common to other languages (posix and php).
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Depends only on the Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+See the API documentation for details.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/date/*
+
+Install into the following directory structure:
+/dojox/date/
+
+...which should be at the same level as your Dojo checkout.
+
+To use the non-Gregorian calendars, you must do a complete build of dojo.cldr.
+See util/buildscripts/cldr/README for details.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/date/posix.js
===================================================================
--- trunk/web/dojo/dojox/date/posix.js	(revision 0)
+++ trunk/web/dojo/dojox/date/posix.js	(revision 9)
@@ -0,0 +1,218 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.posix"]){
+dojo._hasResource["dojox.date.posix"]=true;
+dojo.provide("dojox.date.posix");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+dojo.require("dojo.string");
+dojox.date.posix.strftime=function(_1,_2,_3){
+var _4=null;
+var _5=function(s,n){
+return dojo.string.pad(s,n||2,_4||"0");
+};
+var _6=dojo.date.locale._getGregorianBundle(_3);
+var $=function(_7){
+switch(_7){
+case "a":
+return dojo.date.locale.getNames("days","abbr","format",_3)[_1.getDay()];
+case "A":
+return dojo.date.locale.getNames("days","wide","format",_3)[_1.getDay()];
+case "b":
+case "h":
+return dojo.date.locale.getNames("months","abbr","format",_3)[_1.getMonth()];
+case "B":
+return dojo.date.locale.getNames("months","wide","format",_3)[_1.getMonth()];
+case "c":
+return dojo.date.locale.format(_1,{formatLength:"full",locale:_3});
+case "C":
+return _5(Math.floor(_1.getFullYear()/100));
+case "d":
+return _5(_1.getDate());
+case "D":
+return $("m")+"/"+$("d")+"/"+$("y");
+case "e":
+if(_4==null){
+_4=" ";
+}
+return _5(_1.getDate());
+case "f":
+if(_4==null){
+_4=" ";
+}
+return _5(_1.getMonth()+1);
+case "g":
+break;
+case "G":
+dojo.unimplemented("unimplemented modifier 'G'");
+break;
+case "F":
+return $("Y")+"-"+$("m")+"-"+$("d");
+case "H":
+return _5(_1.getHours());
+case "I":
+return _5(_1.getHours()%12||12);
+case "j":
+return _5(dojo.date.locale._getDayOfYear(_1),3);
+case "k":
+if(_4==null){
+_4=" ";
+}
+return _5(_1.getHours());
+case "l":
+if(_4==null){
+_4=" ";
+}
+return _5(_1.getHours()%12||12);
+case "m":
+return _5(_1.getMonth()+1);
+case "M":
+return _5(_1.getMinutes());
+case "n":
+return "\n";
+case "p":
+return _6["dayPeriods-format-wide-"+(_1.getHours()<12?"am":"pm")];
+case "r":
+return $("I")+":"+$("M")+":"+$("S")+" "+$("p");
+case "R":
+return $("H")+":"+$("M");
+case "S":
+return _5(_1.getSeconds());
+case "t":
+return "\t";
+case "T":
+return $("H")+":"+$("M")+":"+$("S");
+case "u":
+return String(_1.getDay()||7);
+case "U":
+return _5(dojo.date.locale._getWeekOfYear(_1));
+case "V":
+return _5(dojox.date.posix.getIsoWeekOfYear(_1));
+case "W":
+return _5(dojo.date.locale._getWeekOfYear(_1,1));
+case "w":
+return String(_1.getDay());
+case "x":
+return dojo.date.locale.format(_1,{selector:"date",formatLength:"full",locale:_3});
+case "X":
+return dojo.date.locale.format(_1,{selector:"time",formatLength:"full",locale:_3});
+case "y":
+return _5(_1.getFullYear()%100);
+case "Y":
+return String(_1.getFullYear());
+case "z":
+var _8=_1.getTimezoneOffset();
+return (_8>0?"-":"+")+_5(Math.floor(Math.abs(_8)/60))+":"+_5(Math.abs(_8)%60);
+case "Z":
+return dojo.date.getTimezoneName(_1);
+case "%":
+return "%";
+}
+};
+var _9="";
+var i=0;
+var _a=0;
+var _b=null;
+while((_a=_2.indexOf("%",i))!=-1){
+_9+=_2.substring(i,_a++);
+switch(_2.charAt(_a++)){
+case "_":
+_4=" ";
+break;
+case "-":
+_4="";
+break;
+case "0":
+_4="0";
+break;
+case "^":
+_b="upper";
+break;
+case "*":
+_b="lower";
+break;
+case "#":
+_b="swap";
+break;
+default:
+_4=null;
+_a--;
+break;
+}
+var _c=$(_2.charAt(_a++));
+switch(_b){
+case "upper":
+_c=_c.toUpperCase();
+break;
+case "lower":
+_c=_c.toLowerCase();
+break;
+case "swap":
+var _d=_c.toLowerCase();
+var _e="";
+var ch="";
+for(var j=0;j<_c.length;j++){
+ch=_c.charAt(j);
+_e+=(ch==_d.charAt(j))?ch.toUpperCase():ch.toLowerCase();
+}
+_c=_e;
+break;
+default:
+break;
+}
+_b=null;
+_9+=_c;
+i=_a;
+}
+_9+=_2.substring(i);
+return _9;
+};
+dojox.date.posix.getStartOfWeek=function(_f,_10){
+if(isNaN(_10)){
+_10=dojo.cldr.supplemental.getFirstDayOfWeek?dojo.cldr.supplemental.getFirstDayOfWeek():0;
+}
+var _11=_10;
+if(_f.getDay()>=_10){
+_11-=_f.getDay();
+}else{
+_11-=(7-_f.getDay());
+}
+var _12=new Date(_f);
+_12.setHours(0,0,0,0);
+return dojo.date.add(_12,"day",_11);
+};
+dojox.date.posix.setIsoWeekOfYear=function(_13,_14){
+if(!_14){
+return _13;
+}
+var _15=dojox.date.posix.getIsoWeekOfYear(_13);
+var _16=_14-_15;
+if(_14<0){
+var _17=dojox.date.posix.getIsoWeeksInYear(_13);
+_16=(_17+_14+1)-_15;
+}
+return dojo.date.add(_13,"week",_16);
+};
+dojox.date.posix.getIsoWeekOfYear=function(_18){
+var _19=dojox.date.posix.getStartOfWeek(_18,1);
+var _1a=new Date(_18.getFullYear(),0,4);
+_1a=dojox.date.posix.getStartOfWeek(_1a,1);
+var _1b=_19.getTime()-_1a.getTime();
+if(_1b<0){
+return dojox.date.posix.getIsoWeeksInYear(_19);
+}
+return Math.ceil(_1b/604800000)+1;
+};
+dojox.date.posix.getIsoWeeksInYear=function(_1c){
+function p(y){
+return y+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400);
+};
+var y=_1c.getFullYear();
+return (p(y)%7==4||p(y-1)%7==3)?53:52;
+};
+}
Index: trunk/web/dojo/dojox/date/buddhist.js
===================================================================
--- trunk/web/dojo/dojox/date/buddhist.js	(revision 0)
+++ trunk/web/dojo/dojox/date/buddhist.js	(revision 9)
@@ -0,0 +1,182 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.buddhist"]){
+dojo._hasResource["dojox.date.buddhist"]=true;
+dojo.provide("dojox.date.buddhist");
+dojo.experimental("dojox.date.buddhist");
+dojo.require("dojox.date.buddhist.Date");
+dojo.require("dojo.date");
+dojox.date.buddhist.getDaysInMonth=function(_1){
+return dojo.date.getDaysInMonth(_1.toGregorian());
+};
+dojox.date.buddhist.isLeapYear=function(_2){
+return dojo.date.isLeapYear(_2.toGregorian());
+};
+dojox.date.buddhist.compare=function(_3,_4,_5){
+return dojo.date.compare(_3,_4,_5);
+};
+dojox.date.buddhist.add=function(_6,_7,_8){
+var _9=new dojox.date.buddhist.Date(_6);
+switch(_7){
+case "day":
+_9.setDate(_6.getDate(true)+_8);
+break;
+case "weekday":
+var _a,_b;
+var _c=_8%5;
+if(!_c){
+_a=(_8>0)?5:-5;
+_b=(_8>0)?((_8-5)/5):((_8+5)/5);
+}else{
+_a=_c;
+_b=parseInt(_8/5);
+}
+var _d=_6.getDay();
+var _e=0;
+if(_d==6&&_8>0){
+_e=1;
+}else{
+if(_d==0&&_8<0){
+_e=-1;
+}
+}
+var _f=_d+_a;
+if(_f==0||_f==6){
+_e=(_8>0)?2:-2;
+}
+_8=(7*_b)+_a+_e;
+_9.setDate(_6.getDate(true)+_8);
+break;
+case "year":
+_9.setFullYear(_6.getFullYear()+_8);
+break;
+case "week":
+_8*=7;
+_9.setDate(_6.getDate(true)+_8);
+break;
+case "month":
+_9.setMonth(_6.getMonth()+_8);
+break;
+case "hour":
+_9.setHours(_6.getHours()+_8);
+break;
+case "minute":
+_9.setMinutes(_6.getMinutes()+_8);
+break;
+case "second":
+_9.setSeconds(_6.getSeconds()+_8);
+break;
+case "millisecond":
+_9.setMilliseconds(_6.getMilliseconds()+_8);
+break;
+}
+return _9;
+};
+dojox.date.buddhist.difference=function(_10,_11,_12){
+_11=_11||new dojox.date.buddhist.Date();
+_12=_12||"day";
+var _13=_10.getFullYear()-_11.getFullYear();
+var _14=1;
+switch(_12){
+case "weekday":
+var _15=Math.round(dojox.date.buddhist.difference(_10,_11,"day"));
+var _16=parseInt(dojox.date.buddhist.difference(_10,_11,"week"));
+var mod=_15%7;
+if(mod==0){
+_15=_16*5;
+}else{
+var adj=0;
+var _17=_11.getDay();
+var _18=_10.getDay();
+_16=parseInt(_15/7);
+mod=_15%7;
+var _19=new dojox.date.buddhist.Date(_10);
+_19.setDate(_19.getDate(true)+(_16*7));
+var _1a=_19.getDay();
+if(_15>0){
+switch(true){
+case _17==5:
+adj=-1;
+break;
+case _17==6:
+adj=0;
+break;
+case _18==5:
+adj=-1;
+break;
+case _18==6:
+adj=-2;
+break;
+case (_1a+mod)>5:
+adj=-2;
+}
+}else{
+if(_15<0){
+switch(true){
+case _17==5:
+adj=0;
+break;
+case _17==6:
+adj=1;
+break;
+case _18==5:
+adj=2;
+break;
+case _18==6:
+adj=1;
+break;
+case (_1a+mod)<0:
+adj=2;
+}
+}
+}
+_15+=adj;
+_15-=(_16*2);
+}
+_14=_15;
+break;
+case "year":
+_14=_13;
+break;
+case "month":
+var _1b=(_10.toGregorian()>_11.toGregorian())?_10:_11;
+var _1c=(_10.toGregorian()>_11.toGregorian())?_11:_10;
+var _1d=_1b.getMonth();
+var _1e=_1c.getMonth();
+if(_13==0){
+_14=_1b.getMonth()-_1c.getMonth();
+}else{
+_14=12-_1e;
+_14+=_1d;
+var i=_1c.getFullYear()+1;
+var e=_1b.getFullYear();
+for(i;i<e;i++){
+_14+=12;
+}
+}
+if(_10.toGregorian()<_11.toGregorian()){
+_14=-_14;
+}
+break;
+case "week":
+_14=parseInt(dojox.date.buddhist.difference(_10,_11,"day")/7);
+break;
+case "day":
+_14/=24;
+case "hour":
+_14/=60;
+case "minute":
+_14/=60;
+case "second":
+_14/=1000;
+case "millisecond":
+_14*=_10.toGregorian().getTime()-_11.toGregorian().getTime();
+}
+return Math.round(_14);
+};
+}
Index: trunk/web/dojo/dojox/date/islamic/Date.js
===================================================================
--- trunk/web/dojo/dojox/date/islamic/Date.js	(revision 0)
+++ trunk/web/dojo/dojox/date/islamic/Date.js	(revision 9)
@@ -0,0 +1,266 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.islamic.Date"]){
+dojo._hasResource["dojox.date.islamic.Date"]=true;
+dojo.provide("dojox.date.islamic.Date");
+dojo.require("dojo.date");
+dojo.requireLocalization("dojo.cldr","islamic",null,"ROOT,ar,he");
+dojo.declare("dojox.date.islamic.Date",null,{_date:0,_month:0,_year:0,_hours:0,_minutes:0,_seconds:0,_milliseconds:0,_day:0,_GREGORIAN_EPOCH:1721425.5,_ISLAMIC_EPOCH:1948439.5,constructor:function(){
+var _1=arguments.length;
+if(!_1){
+this.fromGregorian(new Date());
+}else{
+if(_1==1){
+var _2=arguments[0];
+if(typeof _2=="number"){
+_2=new Date(_2);
+}
+if(_2 instanceof Date){
+this.fromGregorian(_2);
+}else{
+if(_2==""){
+this._date=new Date("");
+}else{
+this._year=_2._year;
+this._month=_2._month;
+this._date=_2._date;
+this._hours=_2._hours;
+this._minutes=_2._minutes;
+this._seconds=_2._seconds;
+this._milliseconds=_2._milliseconds;
+}
+}
+}else{
+if(_1>=3){
+this._year+=arguments[0];
+this._month+=arguments[1];
+this._date+=arguments[2];
+this._hours+=arguments[3]||0;
+this._minutes+=arguments[4]||0;
+this._seconds+=arguments[5]||0;
+this._milliseconds+=arguments[6]||0;
+}
+}
+}
+},getDate:function(){
+return this._date;
+},getMonth:function(){
+return this._month;
+},getFullYear:function(){
+return this._year;
+},getDay:function(){
+return this.toGregorian().getDay();
+},getHours:function(){
+return this._hours;
+},getMinutes:function(){
+return this._minutes;
+},getSeconds:function(){
+return this._seconds;
+},getMilliseconds:function(){
+return this._milliseconds;
+},setDate:function(_3){
+_3=parseInt(_3);
+if(_3>0&&_3<=this.getDaysInIslamicMonth(this._month,this._year)){
+this._date=_3;
+}else{
+var _4;
+if(_3>0){
+for(_4=this.getDaysInIslamicMonth(this._month,this._year);_3>_4;_3-=_4,_4=this.getDaysInIslamicMonth(this._month,this._year)){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+}
+this._date=_3;
+}else{
+for(_4=this.getDaysInIslamicMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1);_3<=0;_4=this.getDaysInIslamicMonth((this._month-1)>=0?(this._month-1):11,((this._month-1)>=0)?this._year:this._year-1)){
+this._month--;
+if(this._month<0){
+this._year--;
+this._month+=12;
+}
+_3+=_4;
+}
+this._date=_3;
+}
+}
+return this;
+},setFullYear:function(_5){
+this._year=+_5;
+},setMonth:function(_6){
+this._year+=Math.floor(_6/12);
+if(_6>0){
+this._month=Math.floor(_6%12);
+}else{
+this._month=Math.floor(((_6%12)+12)%12);
+}
+},setHours:function(){
+var _7=arguments.length;
+var _8=0;
+if(_7>=1){
+_8=parseInt(arguments[0]);
+}
+if(_7>=2){
+this._minutes=parseInt(arguments[1]);
+}
+if(_7>=3){
+this._seconds=parseInt(arguments[2]);
+}
+if(_7==4){
+this._milliseconds=parseInt(arguments[3]);
+}
+while(_8>=24){
+this._date++;
+var _9=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_9){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_9;
+}
+_8-=24;
+}
+this._hours=_8;
+},setMinutes:function(_a){
+while(_a>=60){
+this._hours++;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _b=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_b){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_b;
+}
+}
+_a-=60;
+}
+this._minutes=_a;
+},setSeconds:function(_c){
+while(_c>=60){
+this._minutes++;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _d=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_d){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_d;
+}
+}
+}
+_c-=60;
+}
+this._seconds=_c;
+},setMilliseconds:function(_e){
+while(_e>=1000){
+this.setSeconds++;
+if(this.setSeconds>=60){
+this._minutes++;
+this.setSeconds-=60;
+if(this._minutes>=60){
+this._hours++;
+this._minutes-=60;
+if(this._hours>=24){
+this._date++;
+this._hours-=24;
+var _f=this.getDaysInIslamicMonth(this._month,this._year);
+if(this._date>_f){
+this._month++;
+if(this._month>=12){
+this._year++;
+this._month-=12;
+}
+this._date-=_f;
+}
+}
+}
+}
+_e-=1000;
+}
+this._milliseconds=_e;
+},toString:function(){
+var x=new Date();
+x.setHours(this._hours);
+x.setMinutes(this._minutes);
+x.setSeconds(this._seconds);
+x.setMilliseconds(this._milliseconds);
+return this._month+" "+this._date+" "+this._year+" "+x.toTimeString();
+},toGregorian:function(){
+var _10=this._year;
+var _11=this._month;
+var _12=this._date;
+var _13=_12+Math.ceil(29.5*_11)+(_10-1)*354+Math.floor((3+(11*_10))/30)+this._ISLAMIC_EPOCH-1;
+var wjd=Math.floor(_13-0.5)+0.5,_14=wjd-this._GREGORIAN_EPOCH,_15=Math.floor(_14/146097),dqc=this._mod(_14,146097),_16=Math.floor(dqc/36524),_17=this._mod(dqc,36524),_18=Math.floor(_17/1461),_19=this._mod(_17,1461),_1a=Math.floor(_19/365),_1b=(_15*400)+(_16*100)+(_18*4)+_1a;
+if(!(_16==4||_1a==4)){
+_1b++;
+}
+var _1c=this._GREGORIAN_EPOCH+(365*(_1b-1))+Math.floor((_1b-1)/4)-(Math.floor((_1b-1)/100))+Math.floor((_1b-1)/400);
+var _1d=wjd-_1c;
+var tjd=(this._GREGORIAN_EPOCH-1)+(365*(_1b-1))+Math.floor((_1b-1)/4)-(Math.floor((_1b-1)/100))+Math.floor((_1b-1)/400)+Math.floor((739/12)+((dojo.date.isLeapYear(new Date(_1b,3,1))?-1:-2))+1);
+var _1e=((wjd<tjd)?0:(dojo.date.isLeapYear(new Date(_1b,3,1))?1:2));
+var _1f=Math.floor((((_1d+_1e)*12)+373)/367);
+var _20=(this._GREGORIAN_EPOCH-1)+(365*(_1b-1))+Math.floor((_1b-1)/4)-(Math.floor((_1b-1)/100))+Math.floor((_1b-1)/400)+Math.floor((((367*_1f)-362)/12)+((_1f<=2)?0:(dojo.date.isLeapYear(new Date(_1b,_1f,1))?-1:-2))+1);
+var day=(wjd-_20)+1;
+var _21=new Date(_1b,(_1f-1),day,this._hours,this._minutes,this._seconds,this._milliseconds);
+return _21;
+},fromGregorian:function(_22){
+var _23=new Date(_22);
+var _24=_23.getFullYear(),_25=_23.getMonth(),_26=_23.getDate();
+var _27=(this._GREGORIAN_EPOCH-1)+(365*(_24-1))+Math.floor((_24-1)/4)+(-Math.floor((_24-1)/100))+Math.floor((_24-1)/400)+Math.floor((((367*(_25+1))-362)/12)+(((_25+1)<=2)?0:(dojo.date.isLeapYear(_23)?-1:-2))+_26)+(Math.floor(_23.getSeconds()+60*(_23.getMinutes()+60*_23.getHours())+0.5)/86400);
+_27=Math.floor(_27)+0.5;
+var _28=_27-this._ISLAMIC_EPOCH;
+var _29=Math.floor((30*_28+10646)/10631);
+var _2a=Math.ceil((_28-29-this._yearStart(_29))/29.5);
+_2a=Math.min(_2a,11);
+var _2b=Math.ceil(_28-this._monthStart(_29,_2a))+1;
+this._date=_2b;
+this._month=_2a;
+this._year=_29;
+this._hours=_23.getHours();
+this._minutes=_23.getMinutes();
+this._seconds=_23.getSeconds();
+this._milliseconds=_23.getMilliseconds();
+this._day=_23.getDay();
+return this;
+},valueOf:function(){
+return this.toGregorian().valueOf();
+},_yearStart:function(_2c){
+return (_2c-1)*354+Math.floor((3+11*_2c)/30);
+},_monthStart:function(_2d,_2e){
+return Math.ceil(29.5*_2e)+(_2d-1)*354+Math.floor((3+11*_2d)/30);
+},_civilLeapYear:function(_2f){
+return (14+11*_2f)%30<11;
+},getDaysInIslamicMonth:function(_30,_31){
+var _32=0;
+_32=29+((_30+1)%2);
+if(_30==11&&this._civilLeapYear(_31)){
+_32++;
+}
+return _32;
+},_mod:function(a,b){
+return a-(b*Math.floor(a/b));
+}});
+dojox.date.islamic.Date.getDaysInIslamicMonth=function(_33){
+return new dojox.date.islamic.Date().getDaysInIslamicMonth(_33.getMonth(),_33.getFullYear());
+};
+}
Index: trunk/web/dojo/dojox/date/islamic/locale.js
===================================================================
--- trunk/web/dojo/dojox/date/islamic/locale.js	(revision 0)
+++ trunk/web/dojo/dojox/date/islamic/locale.js	(revision 9)
@@ -0,0 +1,388 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.islamic.locale"]){
+dojo._hasResource["dojox.date.islamic.locale"]=true;
+dojo.provide("dojox.date.islamic.locale");
+dojo.require("dojox.date.islamic.Date");
+dojo.require("dojo.regexp");
+dojo.require("dojo.string");
+dojo.require("dojo.i18n");
+dojo.require("dojo.date");
+dojo.requireLocalization("dojo.cldr","islamic",null,"ROOT,ar,he");
+(function(){
+function _1(_2,_3,_4,_5,_6){
+return _6.replace(/([a-z])\1*/ig,function(_7){
+var s,_8;
+var c=_7.charAt(0);
+var l=_7.length;
+var _9=["abbr","wide","narrow"];
+switch(c){
+case "G":
+s=_3["eraAbbr"][0];
+break;
+case "y":
+s=String(_2.getFullYear());
+break;
+case "M":
+var m=_2.getMonth();
+if(l<3){
+s=m+1;
+_8=true;
+}else{
+var _a=["months","format",_9[l-3]].join("-");
+s=_3[_a][m];
+}
+break;
+case "d":
+s=_2.getDate(true);
+_8=true;
+break;
+case "E":
+var d=_2.getDay();
+if(l<3){
+s=d+1;
+_8=true;
+}else{
+var _b=["days","format",_9[l-3]].join("-");
+s=_3[_b][d];
+}
+break;
+case "a":
+var _c=(_2.getHours()<12)?"am":"pm";
+s=_3["dayPeriods-format-wide-"+_c];
+break;
+case "h":
+case "H":
+case "K":
+case "k":
+var h=_2.getHours();
+switch(c){
+case "h":
+s=(h%12)||12;
+break;
+case "H":
+s=h;
+break;
+case "K":
+s=(h%12);
+break;
+case "k":
+s=h||24;
+break;
+}
+_8=true;
+break;
+case "m":
+s=_2.getMinutes();
+_8=true;
+break;
+case "s":
+s=_2.getSeconds();
+_8=true;
+break;
+case "S":
+s=Math.round(_2.getMilliseconds()*Math.pow(10,l-3));
+_8=true;
+break;
+case "z":
+s=dojo.date.getTimezoneName(_2.toGregorian());
+if(s){
+break;
+}
+l=4;
+case "Z":
+var _d=_2.toGregorian().getTimezoneOffset();
+var tz=[(_d<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_d)/60),2),dojo.string.pad(Math.abs(_d)%60,2)];
+if(l==4){
+tz.splice(0,0,"GMT");
+tz.splice(3,0,":");
+}
+s=tz.join("");
+break;
+default:
+throw new Error("dojox.date.islamic.locale.formatPattern: invalid pattern char: "+_6);
+}
+if(_8){
+s=dojo.string.pad(s,l);
+}
+return s;
+});
+};
+dojox.date.islamic.locale.format=function(_e,_f){
+_f=_f||{};
+var _10=dojo.i18n.normalizeLocale(_f.locale);
+var _11=_f.formatLength||"short";
+var _12=dojox.date.islamic.locale._getIslamicBundle(_10);
+var str=[];
+var _13=dojo.hitch(this,_1,_e,_12,_10,_f.fullYear);
+if(_f.selector=="year"){
+var _14=_e.getFullYear();
+return _14;
+}
+if(_f.selector!="time"){
+var _15=_f.datePattern||_12["dateFormat-"+_11];
+if(_15){
+str.push(_16(_15,_13));
+}
+}
+if(_f.selector!="date"){
+var _17=_f.timePattern||_12["timeFormat-"+_11];
+if(_17){
+str.push(_16(_17,_13));
+}
+}
+var _18=str.join(" ");
+return _18;
+};
+dojox.date.islamic.locale.regexp=function(_19){
+return dojox.date.islamic.locale._parseInfo(_19).regexp;
+};
+dojox.date.islamic.locale._parseInfo=function(_1a){
+_1a=_1a||{};
+var _1b=dojo.i18n.normalizeLocale(_1a.locale);
+var _1c=dojox.date.islamic.locale._getIslamicBundle(_1b);
+var _1d=_1a.formatLength||"short";
+var _1e=_1a.datePattern||_1c["dateFormat-"+_1d];
+var _1f=_1a.timePattern||_1c["timeFormat-"+_1d];
+var _20;
+if(_1a.selector=="date"){
+_20=_1e;
+}else{
+if(_1a.selector=="time"){
+_20=_1f;
+}else{
+_20=(typeof (_1f)=="undefined")?_1e:_1e+" "+_1f;
+}
+}
+var _21=[];
+var re=_16(_20,dojo.hitch(this,_22,_21,_1c,_1a));
+return {regexp:re,tokens:_21,bundle:_1c};
+};
+dojox.date.islamic.locale.parse=function(_23,_24){
+_23=_23.replace(/[\u200E\u200F\u202A\u202E]/g,"");
+if(!_24){
+_24={};
+}
+var _25=dojox.date.islamic.locale._parseInfo(_24);
+var _26=_25.tokens,_27=_25.bundle;
+var _28=_25.regexp.replace(/[\u200E\u200F\u202A\u202E]/g,"");
+var re=new RegExp("^"+_28+"$");
+var _29=re.exec(_23);
+var _2a=dojo.i18n.normalizeLocale(_24.locale);
+if(!_29){
+return null;
+}
+var _2b,_2c;
+var _2d=[1389,0,1,0,0,0,0];
+var _2e="";
+var _2f=0;
+var _30=["abbr","wide","narrow"];
+var _31=dojo.every(_29,function(v,i){
+if(!i){
+return true;
+}
+var _32=_26[i-1];
+var l=_32.length;
+switch(_32.charAt(0)){
+case "y":
+_2d[0]=Number(v);
+break;
+case "M":
+if(l>2){
+var _33=_27["months-format-"+_30[l-3]].concat();
+if(!_24.strict){
+v=v.replace(".","").toLowerCase();
+_33=dojo.map(_33,function(s){
+return s?s.replace(".","").toLowerCase():s;
+});
+}
+v=dojo.indexOf(_33,v);
+if(v==-1){
+return false;
+}
+_2f=l;
+}else{
+v--;
+}
+_2d[1]=Number(v);
+break;
+case "D":
+_2d[1]=0;
+case "d":
+_2d[2]=Number(v);
+break;
+case "a":
+var am=_24.am||_27["dayPeriods-format-wide-am"],pm=_24.pm||_27["dayPeriods-format-wide-pm"];
+if(!_24.strict){
+var _34=/\./g;
+v=v.replace(_34,"").toLowerCase();
+am=am.replace(_34,"").toLowerCase();
+pm=pm.replace(_34,"").toLowerCase();
+}
+if(_24.strict&&v!=am&&v!=pm){
+return false;
+}
+_2e=(v==pm)?"p":(v==am)?"a":"";
+break;
+case "K":
+if(v==24){
+v=0;
+}
+case "h":
+case "H":
+case "k":
+_2d[3]=Number(v);
+break;
+case "m":
+_2d[4]=Number(v);
+break;
+case "s":
+_2d[5]=Number(v);
+break;
+case "S":
+_2d[6]=Number(v);
+}
+return true;
+});
+var _35=+_2d[3];
+if(_2e==="p"&&_35<12){
+_2d[3]=_35+12;
+}else{
+if(_2e==="a"&&_35==12){
+_2d[3]=0;
+}
+}
+var _36=new dojox.date.islamic.Date(_2d[0],_2d[1],_2d[2],_2d[3],_2d[4],_2d[5],_2d[6]);
+return _36;
+};
+function _16(_37,_38,_39,_3a){
+var _3b=function(x){
+return x;
+};
+_38=_38||_3b;
+_39=_39||_3b;
+_3a=_3a||_3b;
+var _3c=_37.match(/(''|[^'])+/g);
+var _3d=_37.charAt(0)=="'";
+dojo.forEach(_3c,function(_3e,i){
+if(!_3e){
+_3c[i]="";
+}else{
+_3c[i]=(_3d?_39:_38)(_3e);
+_3d=!_3d;
+}
+});
+return _3a(_3c.join(""));
+};
+function _22(_3f,_40,_41,_42){
+_42=dojo.regexp.escapeString(_42);
+var _43=dojo.i18n.normalizeLocale(_41.locale);
+return _42.replace(/([a-z])\1*/ig,function(_44){
+var s;
+var c=_44.charAt(0);
+var l=_44.length;
+var p2="",p3="";
+if(_41.strict){
+if(l>1){
+p2="0"+"{"+(l-1)+"}";
+}
+if(l>2){
+p3="0"+"{"+(l-2)+"}";
+}
+}else{
+p2="0?";
+p3="0{0,2}";
+}
+switch(c){
+case "y":
+s="\\d+";
+break;
+case "M":
+s=(l>2)?"\\S+ ?\\S+":p2+"[1-9]|1[0-2]";
+break;
+case "d":
+s="[12]\\d|"+p2+"[1-9]|3[01]";
+break;
+case "E":
+s="\\S+";
+break;
+case "h":
+s=p2+"[1-9]|1[0-2]";
+break;
+case "k":
+s=p2+"\\d|1[01]";
+break;
+case "H":
+s=p2+"\\d|1\\d|2[0-3]";
+break;
+case "K":
+s=p2+"[1-9]|1\\d|2[0-4]";
+break;
+case "m":
+case "s":
+s=p2+"\\d|[0-5]\\d";
+break;
+case "S":
+s="\\d{"+l+"}";
+break;
+case "a":
+var am=_41.am||_40["dayPeriods-format-wide-am"],pm=_41.pm||_40["dayPeriods-format-wide-pm"];
+if(_41.strict){
+s=am+"|"+pm;
+}else{
+s=am+"|"+pm;
+if(am!=am.toLowerCase()){
+s+="|"+am.toLowerCase();
+}
+if(pm!=pm.toLowerCase()){
+s+="|"+pm.toLowerCase();
+}
+}
+break;
+default:
+s=".*";
+}
+if(_3f){
+_3f.push(_44);
+}
+return "("+s+")";
+}).replace(/[\xa0 ]/g,"[\\s\\xa0]");
+};
+})();
+(function(){
+var _45=[];
+dojox.date.islamic.locale.addCustomFormats=function(_46,_47){
+_45.push({pkg:_46,name:_47});
+};
+dojox.date.islamic.locale._getIslamicBundle=function(_48){
+var _49={};
+dojo.forEach(_45,function(_4a){
+var _4b=dojo.i18n.getLocalization(_4a.pkg,_4a.name,_48);
+_49=dojo.mixin(_49,_4b);
+},this);
+return _49;
+};
+})();
+dojox.date.islamic.locale.addCustomFormats("dojo.cldr","islamic");
+dojox.date.islamic.locale.getNames=function(_4c,_4d,_4e,_4f,_50){
+var _51;
+var _52=dojox.date.islamic.locale._getIslamicBundle;
+var _53=[_4c,_4e,_4d];
+if(_4e=="standAlone"){
+var key=_53.join("-");
+_51=_52(_4f)[key];
+if(_51===_52("ROOT")[key]){
+_51=undefined;
+}
+}
+_53[1]="format";
+return (_51||_52(_4f)[_53.join("-")]).concat();
+};
+dojox.date.islamic.locale.weekDays=dojox.date.islamic.locale.getNames("days","wide","format");
+dojox.date.islamic.locale.months=dojox.date.islamic.locale.getNames("months","wide","format");
+}
Index: trunk/web/dojo/dojox/date/php.js
===================================================================
--- trunk/web/dojo/dojox/date/php.js	(revision 0)
+++ trunk/web/dojo/dojox/date/php.js	(revision 9)
@@ -0,0 +1,185 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.php"]){
+dojo._hasResource["dojox.date.php"]=true;
+dojo.provide("dojox.date.php");
+dojo.require("dojo.date");
+dojo.require("dojox.string.tokenize");
+dojox.date.php.format=function(_1,_2){
+var df=new dojox.date.php.DateFormat(_2);
+return df.format(_1);
+};
+dojox.date.php.DateFormat=function(_3){
+if(!this.regex){
+var _4=[];
+for(var _5 in this.constructor.prototype){
+if(dojo.isString(_5)&&_5.length==1&&dojo.isFunction(this[_5])){
+_4.push(_5);
+}
+}
+this.constructor.prototype.regex=new RegExp("(?:(\\\\.)|(["+_4.join("")+"]))","g");
+}
+var _6=[];
+this.tokens=dojox.string.tokenize(_3,this.regex,function(_7,_8,i){
+if(_8){
+_6.push([i,_8]);
+return _8;
+}
+if(_7){
+return _7.charAt(1);
+}
+});
+this.replacements=_6;
+};
+dojo.extend(dojox.date.php.DateFormat,{weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdays_3:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],months_3:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],monthdays:[31,28,31,30,31,30,31,31,30,31,30,31],format:function(_9){
+this.date=_9;
+for(var i=0,_a;_a=this.replacements[i];i++){
+this.tokens[_a[0]]=this[_a[1]]();
+}
+return this.tokens.join("");
+},d:function(){
+var j=this.j();
+return (j.length==1)?"0"+j:j;
+},D:function(){
+return this.weekdays_3[this.date.getDay()];
+},j:function(){
+return this.date.getDate()+"";
+},l:function(){
+return this.weekdays[this.date.getDay()];
+},N:function(){
+var w=this.w();
+return (!w)?7:w;
+},S:function(){
+switch(this.date.getDate()){
+case 11:
+case 12:
+case 13:
+return "th";
+case 1:
+case 21:
+case 31:
+return "st";
+case 2:
+case 22:
+return "nd";
+case 3:
+case 23:
+return "rd";
+default:
+return "th";
+}
+},w:function(){
+return this.date.getDay()+"";
+},z:function(){
+var _b=this.date.getTime()-new Date(this.date.getFullYear(),0,1).getTime();
+return Math.floor(_b/86400000)+"";
+},W:function(){
+var _c;
+var _d=new Date(this.date.getFullYear(),0,1).getDay()+1;
+var w=this.date.getDay()+1;
+var z=parseInt(this.z());
+if(z<=(8-_d)&&_d>4){
+var _e=new Date(this.date.getFullYear()-1,this.date.getMonth(),this.date.getDate());
+if(_d==5||(_d==6&&dojo.date.isLeapYear(_e))){
+_c=53;
+}else{
+_c=52;
+}
+}else{
+var i;
+if(Boolean(this.L())){
+i=366;
+}else{
+i=365;
+}
+if((i-z)<(4-w)){
+_c=1;
+}else{
+var j=z+(7-w)+(_d-1);
+_c=Math.ceil(j/7);
+if(_d>4){
+--_c;
+}
+}
+}
+return _c;
+},F:function(){
+return this.months[this.date.getMonth()];
+},m:function(){
+var n=this.n();
+return (n.length==1)?"0"+n:n;
+},M:function(){
+return this.months_3[this.date.getMonth()];
+},n:function(){
+return this.date.getMonth()+1+"";
+},t:function(){
+return (Boolean(this.L())&&this.date.getMonth()==1)?29:this.monthdays[this.getMonth()];
+},L:function(){
+return (dojo.date.isLeapYear(this.date))?"1":"0";
+},o:function(){
+},Y:function(){
+return this.date.getFullYear()+"";
+},y:function(){
+return this.Y().slice(-2);
+},a:function(){
+return this.date.getHours()>=12?"pm":"am";
+},b:function(){
+return this.a().toUpperCase();
+},B:function(){
+var _f=this.date.getTimezoneOffset()+60;
+var _10=(this.date.getHours()*3600)+(this.date.getMinutes()*60)+this.getSeconds()+(_f*60);
+var _11=Math.abs(Math.floor(_10/86.4)%1000)+"";
+while(_11.length<2){
+_11="0"+_11;
+}
+return _11;
+},g:function(){
+return (this.date.getHours()>12)?this.date.getHours()-12+"":this.date.getHours()+"";
+},G:function(){
+return this.date.getHours()+"";
+},h:function(){
+var g=this.g();
+return (g.length==1)?"0"+g:g;
+},H:function(){
+var G=this.G();
+return (G.length==1)?"0"+G:G;
+},i:function(){
+var _12=this.date.getMinutes()+"";
+return (_12.length==1)?"0"+_12:_12;
+},s:function(){
+var _13=this.date.getSeconds()+"";
+return (_13.length==1)?"0"+_13:_13;
+},e:function(){
+return dojo.date.getTimezoneName(this.date);
+},I:function(){
+},O:function(){
+var off=Math.abs(this.date.getTimezoneOffset());
+var _14=Math.floor(off/60)+"";
+var _15=(off%60)+"";
+if(_14.length==1){
+_14="0"+_14;
+}
+if(_15.length==1){
+_14="0"+_15;
+}
+return ((this.date.getTimezoneOffset()<0)?"+":"-")+_14+_15;
+},P:function(){
+var O=this.O();
+return O.substring(0,2)+":"+O.substring(2,4);
+},T:function(){
+return this.e().substring(0,3);
+},Z:function(){
+return this.date.getTimezoneOffset()*-60;
+},c:function(){
+return this.Y()+"-"+this.m()+"-"+this.d()+"T"+this.h()+":"+this.i()+":"+this.s()+this.P();
+},r:function(){
+return this.D()+", "+this.d()+" "+this.M()+" "+this.Y()+" "+this.H()+":"+this.i()+":"+this.s()+" "+this.O();
+},U:function(){
+return Math.floor(this.date.getTime()/1000);
+}});
+}
Index: trunk/web/dojo/dojox/date/timezone.js
===================================================================
--- trunk/web/dojo/dojox/date/timezone.js	(revision 0)
+++ trunk/web/dojo/dojox/date/timezone.js	(revision 9)
@@ -0,0 +1,432 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.date.timezone"]){
+dojo._hasResource["dojox.date.timezone"]=true;
+dojo.experimental("dojox.date.timezone");
+dojo.provide("dojox.date.timezone");
+dojo.require("dojo.date.locale");
+(function(_1){
+var _2=_1.config;
+var _3=["africa","antarctica","asia","australasia","backward","etcetera","europe","northamerica","pacificnew","southamerica"];
+var _4=1835,_5=2038;
+var _6={},_7={},_8={},_9={};
+var _a=_2.timezoneFileBasePath||_1.moduleUrl("dojox.date","zoneinfo");
+var _b=_2.timezoneLoadingScheme||"preloadAll";
+var _c=_2.defaultZoneFile||((_b=="preloadAll")?_3:"northamerica");
+_1._contentHandlers["olson-zoneinfo"]=function(_d){
+var _e=_1._contentHandlers["text"](_d);
+var s="";
+var _f=_e.split("\n");
+var arr=[];
+var _10="";
+var _11=null;
+var _12=null;
+var ret={zones:{},rules:{}};
+for(var i=0;i<_f.length;i++){
+var l=_f[i];
+if(l.match(/^\s/)){
+l="Zone "+_11+l;
+}
+l=l.split("#")[0];
+if(l.length>3){
+arr=l.split(/\s+/);
+_10=arr.shift();
+switch(_10){
+case "Zone":
+_11=arr.shift();
+if(arr[0]){
+if(!ret.zones[_11]){
+ret.zones[_11]=[];
+}
+ret.zones[_11].push(arr);
+}
+break;
+case "Rule":
+_12=arr.shift();
+if(!ret.rules[_12]){
+ret.rules[_12]=[];
+}
+ret.rules[_12].push(arr);
+break;
+case "Link":
+if(ret.zones[arr[1]]){
+throw new Error("Error with Link "+arr[1]);
+}
+ret.zones[arr[1]]=arr[0];
+break;
+case "Leap":
+break;
+default:
+break;
+}
+}
+}
+return ret;
+};
+function _13(_14){
+_14=_14||{};
+_7=_1.mixin(_7,_14.zones||{});
+_9=_1.mixin(_9,_14.rules||{});
+};
+function _15(e){
+console.error("Error loading zone file:",e);
+throw e;
+};
+function _16(_17){
+_6[_17]=true;
+_1.xhrGet({url:_a+"/"+_17,sync:true,handleAs:"olson-zoneinfo",load:_13,error:_15});
+};
+var _18={"jan":0,"feb":1,"mar":2,"apr":3,"may":4,"jun":5,"jul":6,"aug":7,"sep":8,"oct":9,"nov":10,"dec":11},_19={"sun":0,"mon":1,"tue":2,"wed":3,"thu":4,"fri":5,"sat":6},_1a={"EST":"northamerica","MST":"northamerica","HST":"northamerica","EST5EDT":"northamerica","CST6CDT":"northamerica","MST7MDT":"northamerica","PST8PDT":"northamerica","America":"northamerica","Pacific":"australasia","Atlantic":"europe","Africa":"africa","Indian":"africa","Antarctica":"antarctica","Asia":"asia","Australia":"australasia","Europe":"europe","WET":"europe","CET":"europe","MET":"europe","EET":"europe"},_1b={"Pacific/Honolulu":"northamerica","Atlantic/Bermuda":"northamerica","Atlantic/Cape_Verde":"africa","Atlantic/St_Helena":"africa","Indian/Kerguelen":"antarctica","Indian/Chagos":"asia","Indian/Maldives":"asia","Indian/Christmas":"australasia","Indian/Cocos":"australasia","America/Danmarkshavn":"europe","America/Scoresbysund":"europe","America/Godthab":"europe","America/Thule":"europe","Asia/Yekaterinburg":"europe","Asia/Omsk":"europe","Asia/Novosibirsk":"europe","Asia/Krasnoyarsk":"europe","Asia/Irkutsk":"europe","Asia/Yakutsk":"europe","Asia/Vladivostok":"europe","Asia/Sakhalin":"europe","Asia/Magadan":"europe","Asia/Kamchatka":"europe","Asia/Anadyr":"europe","Africa/Ceuta":"europe","America/Argentina/Buenos_Aires":"southamerica","America/Argentina/Cordoba":"southamerica","America/Argentina/Tucuman":"southamerica","America/Argentina/La_Rioja":"southamerica","America/Argentina/San_Juan":"southamerica","America/Argentina/Jujuy":"southamerica","America/Argentina/Catamarca":"southamerica","America/Argentina/Mendoza":"southamerica","America/Argentina/Rio_Gallegos":"southamerica","America/Argentina/Ushuaia":"southamerica","America/Aruba":"southamerica","America/La_Paz":"southamerica","America/Noronha":"southamerica","America/Belem":"southamerica","America/Fortaleza":"southamerica","America/Recife":"southamerica","America/Araguaina":"southamerica","America/Maceio":"southamerica","America/Bahia":"southamerica","America/Sao_Paulo":"southamerica","America/Campo_Grande":"southamerica","America/Cuiaba":"southamerica","America/Porto_Velho":"southamerica","America/Boa_Vista":"southamerica","America/Manaus":"southamerica","America/Eirunepe":"southamerica","America/Rio_Branco":"southamerica","America/Santiago":"southamerica","Pacific/Easter":"southamerica","America/Bogota":"southamerica","America/Curacao":"southamerica","America/Guayaquil":"southamerica","Pacific/Galapagos":"southamerica","Atlantic/Stanley":"southamerica","America/Cayenne":"southamerica","America/Guyana":"southamerica","America/Asuncion":"southamerica","America/Lima":"southamerica","Atlantic/South_Georgia":"southamerica","America/Paramaribo":"southamerica","America/Port_of_Spain":"southamerica","America/Montevideo":"southamerica","America/Caracas":"southamerica"},_1c={"US":"S","Chatham":"S","NZ":"S","NT_YK":"S","Edm":"S","Salv":"S","Canada":"S","StJohns":"S","TC":"S","Guat":"S","Mexico":"S","Haiti":"S","Barb":"S","Belize":"S","CR":"S","Moncton":"S","Swift":"S","Hond":"S","Thule":"S","NZAQ":"S","Zion":"S","ROK":"S","PRC":"S","Taiwan":"S","Ghana":"GMT","SL":"WAT","Chicago":"S","Detroit":"S","Vanc":"S","Denver":"S","Halifax":"S","Cuba":"S","Indianapolis":"S","Starke":"S","Marengo":"S","Pike":"S","Perry":"S","Vincennes":"S","Pulaski":"S","Louisville":"S","CA":"S","Nic":"S","Menominee":"S","Mont":"S","Bahamas":"S","NYC":"S","Regina":"S","Resolute":"ES","DR":"S","Toronto":"S","Winn":"S"};
+function _1d(t){
+throw new Error("Timezone \""+t+"\" is either incorrect, or not loaded in the timezone registry.");
+};
+function _1e(tz){
+var ret=_1b[tz];
+if(!ret){
+var reg=tz.split("/")[0];
+ret=_1a[reg];
+if(!ret){
+var _1f=_7[tz];
+if(typeof _1f=="string"){
+return _1e(_1f);
+}else{
+if(!_6.backward){
+_16("backward");
+return _1e(tz);
+}else{
+_1d(tz);
+}
+}
+}
+}
+return ret;
+};
+function _20(str){
+var pat=/(\d+)(?::0*(\d*))?(?::0*(\d*))?([su])?$/;
+var hms=str.match(pat);
+if(!hms){
+return null;
+}
+hms[1]=parseInt(hms[1],10);
+hms[2]=hms[2]?parseInt(hms[2],10):0;
+hms[3]=hms[3]?parseInt(hms[3],10):0;
+return hms;
+};
+function _21(y,m,d,h,mn,s,off){
+return Date.UTC(y,m,d,h,mn,s)+((off||0)*60*1000);
+};
+function _22(m){
+return _18[m.substr(0,3).toLowerCase()];
+};
+function _23(str){
+var off=_20(str);
+if(off===null){
+return 0;
+}
+var adj=str.indexOf("-")===0?-1:1;
+off=adj*(((off[1]*60+off[2])*60+off[3])*1000);
+return -off/60/1000;
+};
+function _24(_25,_26,off){
+var _27=_22(_25[3]),day=_25[4],_28=_20(_25[5]);
+if(_28[4]=="u"){
+off=0;
+}
+var d,_29,_2a;
+if(isNaN(day)){
+if(day.substr(0,4)=="last"){
+day=_19[day.substr(4,3).toLowerCase()];
+d=new Date(_21(_26,_27+1,1,_28[1]-24,_28[2],_28[3],off));
+_29=_1.date.add(d,"minute",-off).getUTCDay();
+_2a=(day>_29)?(day-_29-7):(day-_29);
+if(_2a!==0){
+d=_1.date.add(d,"hour",_2a*24);
+}
+return d;
+}else{
+day=_19[day.substr(0,3).toLowerCase()];
+if(day!="undefined"){
+if(_25[4].substr(3,2)==">="){
+d=new Date(_21(_26,_27,parseInt(_25[4].substr(5),10),_28[1],_28[2],_28[3],off));
+_29=_1.date.add(d,"minute",-off).getUTCDay();
+_2a=(day<_29)?(day-_29+7):(day-_29);
+if(_2a!==0){
+d=_1.date.add(d,"hour",_2a*24);
+}
+return d;
+}else{
+if(day.substr(3,2)=="<="){
+d=new Date(_21(_26,_27,parseInt(_25[4].substr(5),10),_28[1],_28[2],_28[3],off));
+_29=_1.date.add(d,"minute",-off).getUTCDay();
+_2a=(day>_29)?(day-_29-7):(day-_29);
+if(_2a!==0){
+d=_1.date.add(d,"hour",_2a*24);
+}
+return d;
+}
+}
+}
+}
+}else{
+d=new Date(_21(_26,_27,parseInt(day,10),_28[1],_28[2],_28[3],off));
+return d;
+}
+return null;
+};
+function _2b(_2c,_2d){
+var _2e=[];
+_1.forEach(_9[_2c[1]]||[],function(r){
+for(var i=0;i<2;i++){
+switch(r[i]){
+case "min":
+r[i]=_4;
+break;
+case "max":
+r[i]=_5;
+break;
+case "only":
+break;
+default:
+r[i]=parseInt(r[i],10);
+if(isNaN(r[i])){
+throw new Error("Invalid year found on rule");
+}
+break;
+}
+}
+if(typeof r[6]=="string"){
+r[6]=_23(r[6]);
+}
+if((r[0]<=_2d&&r[1]>=_2d)||(r[0]==_2d&&r[1]=="only")){
+_2e.push({r:r,d:_24(r,_2d,_2c[0])});
+}
+});
+return _2e;
+};
+function _2f(tz,_30){
+var zr=_8[tz]=[];
+for(var i=0;i<_30.length;i++){
+var z=_30[i];
+var r=zr[i]=[];
+var _31=null;
+var _32=null;
+var _33=[];
+if(typeof z[0]=="string"){
+z[0]=_23(z[0]);
+}
+if(i===0){
+r[0]=Date.UTC(_4,0,1,0,0,0,0);
+}else{
+r[0]=zr[i-1][1];
+_31=_30[i-1];
+_32=zr[i-1];
+_33=_32[2];
+}
+var _34=new Date(r[0]).getUTCFullYear();
+var _35=z[3]?parseInt(z[3],10):_5;
+var rlz=[];
+var j;
+for(j=_34;j<=_35;j++){
+rlz=rlz.concat(_2b(z,j));
+}
+rlz.sort(function(a,b){
+return _1.date.compare(a.d,b.d);
+});
+var rl;
+for(j=0,rl;(rl=rlz[j]);j++){
+var _36=j>0?rlz[j-1]:null;
+if(rl.r[5].indexOf("u")<0&&rl.r[5].indexOf("s")<0){
+if(j===0&&i>0){
+if(_33.length){
+rl.d=_1.date.add(rl.d,"minute",_33[_33.length-1].r[6]);
+}else{
+if(_1.date.compare(new Date(_32[1]),rl.d,"date")===0){
+rl.d=new Date(_32[1]);
+}else{
+rl.d=_1.date.add(rl.d,"minute",_23(_31[1]));
+}
+}
+}else{
+if(j>0){
+rl.d=_1.date.add(rl.d,"minute",_36.r[6]);
+}
+}
+}
+}
+r[2]=rlz;
+if(!z[3]){
+r[1]=Date.UTC(_5,11,31,23,59,59,999);
+}else{
+var _37=parseInt(z[3],10),_38=_22(z[4]||"Jan"),day=parseInt(z[5]||"1",10),_39=_20(z[6]||"0");
+var _3a=r[1]=_21(_37,_38,day,_39[1],_39[2],_39[3],((_39[4]=="u")?0:z[0]));
+if(isNaN(_3a)){
+_3a=r[1]=_24([0,0,0,z[4],z[5],z[6]||"0"],_37,((_39[4]=="u")?0:z[0])).getTime();
+}
+var _3b=_1.filter(rlz,function(rl,idx){
+var o=idx>0?rlz[idx-1].r[6]*60*1000:0;
+return (rl.d.getTime()<_3a+o);
+});
+if(_39[4]!="u"&&_39[4]!="s"){
+if(_3b.length){
+r[1]+=_3b[_3b.length-1].r[6]*60*1000;
+}else{
+r[1]+=_23(z[1])*60*1000;
+}
+}
+}
+}
+};
+function _3c(dt,tz){
+var t=tz;
+var _3d=_7[t];
+while(typeof _3d=="string"){
+t=_3d;
+_3d=_7[t];
+}
+if(!_3d){
+if(!_6.backward){
+var _3e=_16("backward",true);
+return _3c(dt,tz);
+}
+_1d(t);
+}
+if(!_8[tz]){
+_2f(tz,_3d);
+}
+var _3f=_8[tz];
+var tm=dt.getTime();
+for(var i=0,r;(r=_3f[i]);i++){
+if(tm>=r[0]&&tm<r[1]){
+return {zone:_3d[i],range:_3f[i],idx:i};
+}
+}
+throw new Error("No Zone found for \""+tz+"\" on "+dt);
+};
+function _40(dt,_41){
+var _42=-1;
+var _43=_41.range[2]||[];
+var tsp=dt.getTime();
+var zr=_41.range;
+for(var i=0,r;(r=_43[i]);i++){
+if(tsp>=r.d.getTime()){
+_42=i;
+}
+}
+if(_42>=0){
+return _43[_42].r;
+}
+return null;
+};
+function _44(tz,_45,_46){
+var res;
+var _47=_45.zone;
+var _48=_47[2];
+if(_48.indexOf("%s")>-1){
+var _49;
+if(_46){
+_49=_46[7];
+if(_49=="-"){
+_49="";
+}
+}else{
+if(_47[1] in _1c){
+_49=_1c[_47[1]];
+}else{
+if(_45.idx>0){
+var pz=_7[tz][_45.idx-1];
+var pb=pz[2];
+if(pb.indexOf("%s")<0){
+if(_48.replace("%s","S")==pb){
+_49="S";
+}else{
+_49="";
+}
+}else{
+_49="";
+}
+}else{
+_49="";
+}
+}
+}
+res=_48.replace("%s",_49);
+}else{
+if(_48.indexOf("/")>-1){
+var bs=_48.split("/");
+if(_46){
+res=bs[_46[6]===0?0:1];
+}else{
+res=bs[0];
+}
+}else{
+res=_48;
+}
+}
+return res;
+};
+_1.setObject("dojox.date.timezone",{getTzInfo:function(dt,tz){
+if(_b=="lazyLoad"){
+var _4a=_1e(tz);
+if(!_4a){
+throw new Error("Not a valid timezone ID.");
+}else{
+if(!_6[_4a]){
+_16(_4a);
+}
+}
+}
+var _4b=_3c(dt,tz);
+var off=_4b.zone[0];
+var _4c=_40(dt,_4b);
+if(_4c){
+off+=_4c[6];
+}else{
+if(_9[_4b.zone[1]]&&_4b.idx>0){
+off+=_23(_7[tz][_4b.idx-1][1]);
+}else{
+off+=_23(_4b.zone[1]);
+}
+}
+var _4d=_44(tz,_4b,_4c);
+return {tzOffset:off,tzAbbr:_4d};
+},getAllZones:function(){
+var arr=[];
+for(var z in _7){
+arr.push(z);
+}
+arr.sort();
+return arr;
+}});
+if(typeof _c=="string"&&_c){
+_c=[_c];
+}
+if(_1.isArray(_c)){
+_1.forEach(_c,function(f){
+_16(f);
+});
+}
+var _4e=_1.date.locale.format,_4f=_1.date.locale._getZone;
+_1.date.locale.format=function(_50,_51){
+_51=_51||{};
+if(_51.timezone&&!_51._tzInfo){
+_51._tzInfo=dojox.date.timezone.getTzInfo(_50,_51.timezone);
+}
+if(_51._tzInfo){
+var _52=_50.getTimezoneOffset()-_51._tzInfo.tzOffset;
+_50=new Date(_50.getTime()+(_52*60*1000));
+}
+return _4e.call(this,_50,_51);
+};
+_1.date.locale._getZone=function(_53,_54,_55){
+if(_55._tzInfo){
+return _54?_55._tzInfo.tzAbbr:_55._tzInfo.tzOffset;
+}
+return _4f.call(this,_53,_54,_55);
+};
+})(dojo);
+}
Index: trunk/web/dojo/dojox/testing/README
===================================================================
--- trunk/web/dojo/dojox/testing/README	(revision 0)
+++ trunk/web/dojo/dojox/testing/README	(revision 9)
@@ -0,0 +1,41 @@
+-------------------------------------------------------------------------------
+dojox.testing
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 06/18/08
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Wolfram Kriesing (wolfram@dojotoolkit.org)
+-------------------------------------------------------------------------------
+Project description 
+
+	A port of Python's DocTests module to Dojo and D.O.H. which is also
+	compatible with Dojo's API documentation system
+ 
+-------------------------------------------------------------------------------
+Dependencies:
+
+	dojo.string, DOH
+
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+
+	http://svn.dojotoolkit.org/dojo/dojox/trunk/testing/*
+
+Install into the following directory structure:
+
+	/dojox/testing/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
+Additional Notes
+
+	None.
Index: trunk/web/dojo/dojox/testing/DocTest.js
===================================================================
--- trunk/web/dojo/dojox/testing/DocTest.js	(revision 0)
+++ trunk/web/dojo/dojox/testing/DocTest.js	(revision 9)
@@ -0,0 +1,89 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.testing.DocTest"]){
+dojo._hasResource["dojox.testing.DocTest"]=true;
+dojo.provide("dojox.testing.DocTest");
+dojo.require("dojo.string");
+dojo.declare("dojox.testing.DocTest",null,{errors:[],getTests:function(_1){
+var _2=dojo.moduleUrl(_1).path;
+var _3=_2.substring(0,_2.length-1)+".js";
+var _4=dojo.xhrGet({url:_3,handleAs:"text"});
+var _5=dojo._getText(_3);
+return this._getTestsFromString(_5,true);
+},getTestsFromString:function(_6){
+return this._getTestsFromString(_6,false);
+},_getTestsFromString:function(_7,_8){
+var _9=dojo.hitch(dojo.string,"trim");
+var _a=_7.split("\n");
+var _b=_a.length;
+var _c=[];
+var _d={commands:[],expectedResult:[],line:null};
+for(var i=0;i<_b+1;i++){
+var l=_9(_a[i]||"");
+if((_8&&l.match(/^\/\/\s+>>>\s.*/))||l.match(/^\s*>>>\s.*/)){
+if(!_d.line){
+_d.line=i+1;
+}
+if(_d.expectedResult.length>0){
+_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
+_d={commands:[],expectedResult:[],line:i+1};
+}
+l=_8?_9(l).substring(2,l.length):l;
+l=_9(l).substring(3,l.length);
+_d.commands.push(_9(l));
+}else{
+if((!_8||l.match(/^\/\/\s+.*/))&&_d.commands.length&&_d.expectedResult.length==0){
+l=_8?_9(l).substring(3,l.length):l;
+_d.expectedResult.push(_9(l));
+}else{
+if(_d.commands.length>0&&_d.expectedResult.length){
+if(!_8||l.match(/^\/\/\s*$/)){
+_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
+}
+if(_8&&!l.match(/^\/\//)){
+_c.push({commands:_d.commands,expectedResult:_d.expectedResult.join("\n"),line:_d.line});
+}
+_d={commands:[],expectedResult:[],line:0};
+}
+}
+}
+}
+return _c;
+},run:function(_e){
+this.errors=[];
+var _f=this.getTests(_e);
+if(_f){
+this._run(_f);
+}
+},_run:function(_10){
+var len=_10.length;
+this.tests=len;
+var oks=0;
+for(var i=0;i<len;i++){
+var t=_10[i];
+var res=this.runTest(t.commands,t.expectedResult);
+var msg="Test "+(i+1)+": ";
+var _11=t.commands.join(" ");
+_11=(_11.length>50?_11.substr(0,50)+"...":_11);
+if(res.success){
+oks+=1;
+}else{
+this.errors.push({commands:t.commands,actual:res.actualResult,expected:t.expectedResult});
+console.error(msg+"Failed: "+_11,{commands:t.commands,actualResult:res.actualResult,expectedResult:t.expectedResult});
+}
+}
+},runTest:function(_12,_13){
+var ret={success:false,actualResult:null};
+var _14=_12.join("\n");
+ret.actualResult=eval(_14);
+if((String(ret.actualResult)==_13)||(dojo.toJson(ret.actualResult)==_13)||((_13.charAt(0)=="\"")&&(_13.charAt(_13.length-1)=="\"")&&(String(ret.actualResult)==_13.substring(1,_13.length-1)))){
+ret.success=true;
+}
+return ret;
+}});
+}
Index: trunk/web/dojo/dojox/color/Palette.js
===================================================================
--- trunk/web/dojo/dojox/color/Palette.js	(revision 0)
+++ trunk/web/dojo/dojox/color/Palette.js	(revision 9)
@@ -0,0 +1,174 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.color.Palette"]){
+dojo._hasResource["dojox.color.Palette"]=true;
+dojo.provide("dojox.color.Palette");
+dojo.require("dojox.color");
+(function(){
+var _1=dojox.color;
+_1.Palette=function(_2){
+this.colors=[];
+if(_2 instanceof dojox.color.Palette){
+this.colors=_2.colors.slice(0);
+}else{
+if(_2 instanceof dojox.color.Color){
+this.colors=[null,null,_2,null,null];
+}else{
+if(dojo.isArray(_2)){
+this.colors=dojo.map(_2.slice(0),function(_3){
+if(dojo.isString(_3)){
+return new dojox.color.Color(_3);
+}
+return _3;
+});
+}else{
+if(dojo.isString(_2)){
+this.colors=[null,null,new dojox.color.Color(_2),null,null];
+}
+}
+}
+}
+};
+function _4(p,_5,_6){
+var _7=new dojox.color.Palette();
+_7.colors=[];
+dojo.forEach(p.colors,function(_8){
+var r=(_5=="dr")?_8.r+_6:_8.r,g=(_5=="dg")?_8.g+_6:_8.g,b=(_5=="db")?_8.b+_6:_8.b,a=(_5=="da")?_8.a+_6:_8.a;
+_7.colors.push(new dojox.color.Color({r:Math.min(255,Math.max(0,r)),g:Math.min(255,Math.max(0,g)),b:Math.min(255,Math.max(0,b)),a:Math.min(1,Math.max(0,a))}));
+});
+return _7;
+};
+function _9(p,_a,_b){
+var _c=new dojox.color.Palette();
+_c.colors=[];
+dojo.forEach(p.colors,function(_d){
+var o=_d.toCmy(),c=(_a=="dc")?o.c+_b:o.c,m=(_a=="dm")?o.m+_b:o.m,y=(_a=="dy")?o.y+_b:o.y;
+_c.colors.push(dojox.color.fromCmy(Math.min(100,Math.max(0,c)),Math.min(100,Math.max(0,m)),Math.min(100,Math.max(0,y))));
+});
+return _c;
+};
+function _e(p,_f,val){
+var ret=new dojox.color.Palette();
+ret.colors=[];
+dojo.forEach(p.colors,function(_10){
+var o=_10.toCmyk(),c=(_f=="dc")?o.c+val:o.c,m=(_f=="dm")?o.m+val:o.m,y=(_f=="dy")?o.y+val:o.y,k=(_f=="dk")?o.b+val:o.b;
+ret.colors.push(dojox.color.fromCmyk(Math.min(100,Math.max(0,c)),Math.min(100,Math.max(0,m)),Math.min(100,Math.max(0,y)),Math.min(100,Math.max(0,k))));
+});
+return ret;
+};
+function _11(p,_12,val){
+var ret=new dojox.color.Palette();
+ret.colors=[];
+dojo.forEach(p.colors,function(_13){
+var o=_13.toHsl(),h=(_12=="dh")?o.h+val:o.h,s=(_12=="ds")?o.s+val:o.s,l=(_12=="dl")?o.l+val:o.l;
+ret.colors.push(dojox.color.fromHsl(h%360,Math.min(100,Math.max(0,s)),Math.min(100,Math.max(0,l))));
+});
+return ret;
+};
+function _14(p,_15,val){
+var ret=new dojox.color.Palette();
+ret.colors=[];
+dojo.forEach(p.colors,function(_16){
+var o=_16.toHsv(),h=(_15=="dh")?o.h+val:o.h,s=(_15=="ds")?o.s+val:o.s,v=(_15=="dv")?o.v+val:o.v;
+ret.colors.push(dojox.color.fromHsv(h%360,Math.min(100,Math.max(0,s)),Math.min(100,Math.max(0,v))));
+});
+return ret;
+};
+function _17(val,low,_18){
+return _18-((_18-val)*((_18-low)/_18));
+};
+dojo.extend(_1.Palette,{transform:function(_19){
+var fn=_4;
+if(_19.use){
+var use=_19.use.toLowerCase();
+if(use.indexOf("hs")==0){
+if(use.charAt(2)=="l"){
+fn=_11;
+}else{
+fn=_14;
+}
+}else{
+if(use.indexOf("cmy")==0){
+if(use.charAt(3)=="k"){
+fn=_e;
+}else{
+fn=_9;
+}
+}
+}
+}else{
+if("dc" in _19||"dm" in _19||"dy" in _19){
+if("dk" in _19){
+fn=_e;
+}else{
+fn=_9;
+}
+}else{
+if("dh" in _19||"ds" in _19){
+if("dv" in _19){
+fn=_14;
+}else{
+fn=_11;
+}
+}
+}
+}
+var _1a=this;
+for(var p in _19){
+if(p=="use"){
+continue;
+}
+_1a=fn(_1a,p,_19[p]);
+}
+return _1a;
+},clone:function(){
+return new _1.Palette(this);
+}});
+dojo.mixin(_1.Palette,{generators:{analogous:function(_1b){
+var _1c=_1b.high||60,low=_1b.low||18,_1d=dojo.isString(_1b.base)?new dojox.color.Color(_1b.base):_1b.base,hsv=_1d.toHsv();
+var h=[(hsv.h+low+360)%360,(hsv.h+Math.round(low/2)+360)%360,hsv.h,(hsv.h-Math.round(_1c/2)+360)%360,(hsv.h-_1c+360)%360];
+var s1=Math.max(10,(hsv.s<=95)?hsv.s+5:(100-(hsv.s-95))),s2=(hsv.s>1)?hsv.s-1:21-hsv.s,v1=(hsv.v>=92)?hsv.v-9:Math.max(hsv.v+9,20),v2=(hsv.v<=90)?Math.max(hsv.v+5,20):(95+Math.ceil((hsv.v-90)/2)),s=[s1,s2,hsv.s,s1,s1],v=[v1,v2,hsv.v,v1,v2];
+return new _1.Palette(dojo.map(h,function(hue,i){
+return dojox.color.fromHsv(hue,s[i],v[i]);
+}));
+},monochromatic:function(_1e){
+var _1f=dojo.isString(_1e.base)?new dojox.color.Color(_1e.base):_1e.base,hsv=_1f.toHsv();
+var s1=(hsv.s-30>9)?hsv.s-30:hsv.s+30,s2=hsv.s,v1=_17(hsv.v,20,100),v2=(hsv.v-20>20)?hsv.v-20:hsv.v+60,v3=(hsv.v-50>20)?hsv.v-50:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(hsv.h,s1,v1),dojox.color.fromHsv(hsv.h,s2,v3),_1f,dojox.color.fromHsv(hsv.h,s1,v3),dojox.color.fromHsv(hsv.h,s2,v2)]);
+},triadic:function(_20){
+var _21=dojo.isString(_20.base)?new dojox.color.Color(_20.base):_20.base,hsv=_21.toHsv();
+var h1=(hsv.h+57+360)%360,h2=(hsv.h-157+360)%360,s1=(hsv.s>20)?hsv.s-10:hsv.s+10,s2=(hsv.s>90)?hsv.s-10:hsv.s+10,s3=(hsv.s>95)?hsv.s-5:hsv.s+5,v1=(hsv.v-20>20)?hsv.v-20:hsv.v+20,v2=(hsv.v-30>20)?hsv.v-30:hsv.v+30,v3=(hsv.v-30>70)?hsv.v-30:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(h1,s1,hsv.v),dojox.color.fromHsv(hsv.h,s2,v2),_21,dojox.color.fromHsv(h2,s2,v1),dojox.color.fromHsv(h2,s3,v3)]);
+},complementary:function(_22){
+var _23=dojo.isString(_22.base)?new dojox.color.Color(_22.base):_22.base,hsv=_23.toHsv();
+var h1=((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,s1=Math.max(hsv.s-10,0),s2=_17(hsv.s,10,100),s3=Math.min(100,hsv.s+20),v1=Math.min(100,hsv.v+30),v2=(hsv.v>20)?hsv.v-30:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(hsv.h,s1,v1),dojox.color.fromHsv(hsv.h,s2,v2),_23,dojox.color.fromHsv(h1,s3,v2),dojox.color.fromHsv(h1,hsv.s,hsv.v)]);
+},splitComplementary:function(_24){
+var _25=dojo.isString(_24.base)?new dojox.color.Color(_24.base):_24.base,_26=_24.da||30,hsv=_25.toHsv();
+var _27=((hsv.h*2)+137<360)?(hsv.h*2)+137:Math.floor(hsv.h/2)-137,h1=(_27-_26+360)%360,h2=(_27+_26)%360,s1=Math.max(hsv.s-10,0),s2=_17(hsv.s,10,100),s3=Math.min(100,hsv.s+20),v1=Math.min(100,hsv.v+30),v2=(hsv.v>20)?hsv.v-30:hsv.v+30;
+return new _1.Palette([dojox.color.fromHsv(h1,s1,v1),dojox.color.fromHsv(h1,s2,v2),_25,dojox.color.fromHsv(h2,s3,v2),dojox.color.fromHsv(h2,hsv.s,hsv.v)]);
+},compound:function(_28){
+var _29=dojo.isString(_28.base)?new dojox.color.Color(_28.base):_28.base,hsv=_29.toHsv();
+var h1=((hsv.h*2)+18<360)?(hsv.h*2)+18:Math.floor(hsv.h/2)-18,h2=((hsv.h*2)+120<360)?(hsv.h*2)+120:Math.floor(hsv.h/2)-120,h3=((hsv.h*2)+99<360)?(hsv.h*2)+99:Math.floor(hsv.h/2)-99,s1=(hsv.s-40>10)?hsv.s-40:hsv.s+40,s2=(hsv.s-10>80)?hsv.s-10:hsv.s+10,s3=(hsv.s-25>10)?hsv.s-25:hsv.s+25,v1=(hsv.v-40>10)?hsv.v-40:hsv.v+40,v2=(hsv.v-20>80)?hsv.v-20:hsv.v+20,v3=Math.max(hsv.v,20);
+return new _1.Palette([dojox.color.fromHsv(h1,s1,v1),dojox.color.fromHsv(h1,s2,v2),_29,dojox.color.fromHsv(h2,s3,v3),dojox.color.fromHsv(h3,s2,v2)]);
+},shades:function(_2a){
+var _2b=dojo.isString(_2a.base)?new dojox.color.Color(_2a.base):_2a.base,hsv=_2b.toHsv();
+var s=(hsv.s==100&&hsv.v==0)?0:hsv.s,v1=(hsv.v-50>20)?hsv.v-50:hsv.v+30,v2=(hsv.v-25>=20)?hsv.v-25:hsv.v+55,v3=(hsv.v-75>=20)?hsv.v-75:hsv.v+5,v4=Math.max(hsv.v-10,20);
+return new _1.Palette([new dojox.color.fromHsv(hsv.h,s,v1),new dojox.color.fromHsv(hsv.h,s,v2),_2b,new dojox.color.fromHsv(hsv.h,s,v3),new dojox.color.fromHsv(hsv.h,s,v4)]);
+}},generate:function(_2c,_2d){
+if(dojo.isFunction(_2d)){
+return _2d({base:_2c});
+}else{
+if(_1.Palette.generators[_2d]){
+return _1.Palette.generators[_2d]({base:_2c});
+}
+}
+throw new Error("dojox.color.Palette.generate: the specified generator ('"+_2d+"') does not exist.");
+}});
+})();
+}
Index: trunk/web/dojo/dojox/color/README
===================================================================
--- trunk/web/dojo/dojox/color/README	(revision 0)
+++ trunk/web/dojo/dojox/color/README	(revision 9)
@@ -0,0 +1,41 @@
+-------------------------------------------------------------------------------
+DojoX Color
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 10/20/2007
+-------------------------------------------------------------------------------
+Project state:
+dojox.color._base: 			production
+dojox.color.Colorspace:		experimental
+dojox.color.Generator:		beta
+-------------------------------------------------------------------------------
+Credits
+	Cal Henderson
+	Tom Trenka (ttrenka AT gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+Both a port of the older dojo.gfx.color work (Cal Henderson) as well as some
+new additions (Generator, Tom Trenka).  Everything is applied to an alias of
+dojo.Color or dojo.color, so that you can just use dojox.color.Color instead
+with extended methods.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Depends on the Dojo Core, v1.0
+-------------------------------------------------------------------------------
+Documentation
+
+See the API documentation.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/color.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/color/*
+
+Install into the following directory structure:
+/dojox/color/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/color/_base.js
===================================================================
--- trunk/web/dojo/dojox/color/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/color/_base.js	(revision 9)
@@ -0,0 +1,180 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.color._base"]){
+dojo._hasResource["dojox.color._base"]=true;
+dojo.provide("dojox.color._base");
+dojo.require("dojo.colors");
+dojox.color.Color=dojo.Color;
+dojox.color.blend=dojo.blendColors;
+dojox.color.fromRgb=dojo.colorFromRgb;
+dojox.color.fromHex=dojo.colorFromHex;
+dojox.color.fromArray=dojo.colorFromArray;
+dojox.color.fromString=dojo.colorFromString;
+dojox.color.greyscale=dojo.colors.makeGrey;
+dojo.mixin(dojox.color,{fromCmy:function(_1,_2,_3){
+if(dojo.isArray(_1)){
+_2=_1[1],_3=_1[2],_1=_1[0];
+}else{
+if(dojo.isObject(_1)){
+_2=_1.m,_3=_1.y,_1=_1.c;
+}
+}
+_1/=100,_2/=100,_3/=100;
+var r=1-_1,g=1-_2,b=1-_3;
+return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});
+},fromCmyk:function(_4,_5,_6,_7){
+if(dojo.isArray(_4)){
+_5=_4[1],_6=_4[2],_7=_4[3],_4=_4[0];
+}else{
+if(dojo.isObject(_4)){
+_5=_4.m,_6=_4.y,_7=_4.b,_4=_4.c;
+}
+}
+_4/=100,_5/=100,_6/=100,_7/=100;
+var r,g,b;
+r=1-Math.min(1,_4*(1-_7)+_7);
+g=1-Math.min(1,_5*(1-_7)+_7);
+b=1-Math.min(1,_6*(1-_7)+_7);
+return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});
+},fromHsl:function(_8,_9,_a){
+if(dojo.isArray(_8)){
+_9=_8[1],_a=_8[2],_8=_8[0];
+}else{
+if(dojo.isObject(_8)){
+_9=_8.s,_a=_8.l,_8=_8.h;
+}
+}
+_9/=100;
+_a/=100;
+while(_8<0){
+_8+=360;
+}
+while(_8>=360){
+_8-=360;
+}
+var r,g,b;
+if(_8<120){
+r=(120-_8)/60,g=_8/60,b=0;
+}else{
+if(_8<240){
+r=0,g=(240-_8)/60,b=(_8-120)/60;
+}else{
+r=(_8-240)/60,g=0,b=(360-_8)/60;
+}
+}
+r=2*_9*Math.min(r,1)+(1-_9);
+g=2*_9*Math.min(g,1)+(1-_9);
+b=2*_9*Math.min(b,1)+(1-_9);
+if(_a<0.5){
+r*=_a,g*=_a,b*=_a;
+}else{
+r=(1-_a)*r+2*_a-1;
+g=(1-_a)*g+2*_a-1;
+b=(1-_a)*b+2*_a-1;
+}
+return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});
+},fromHsv:function(_b,_c,_d){
+if(dojo.isArray(_b)){
+_c=_b[1],_d=_b[2],_b=_b[0];
+}else{
+if(dojo.isObject(_b)){
+_c=_b.s,_d=_b.v,_b=_b.h;
+}
+}
+if(_b==360){
+_b=0;
+}
+_c/=100;
+_d/=100;
+var r,g,b;
+if(_c==0){
+r=_d,b=_d,g=_d;
+}else{
+var _e=_b/60,i=Math.floor(_e),f=_e-i;
+var p=_d*(1-_c);
+var q=_d*(1-(_c*f));
+var t=_d*(1-(_c*(1-f)));
+switch(i){
+case 0:
+r=_d,g=t,b=p;
+break;
+case 1:
+r=q,g=_d,b=p;
+break;
+case 2:
+r=p,g=_d,b=t;
+break;
+case 3:
+r=p,g=q,b=_d;
+break;
+case 4:
+r=t,g=p,b=_d;
+break;
+case 5:
+r=_d,g=p,b=q;
+break;
+}
+}
+return new dojox.color.Color({r:Math.round(r*255),g:Math.round(g*255),b:Math.round(b*255)});
+}});
+dojo.extend(dojox.color.Color,{toCmy:function(){
+var _f=1-(this.r/255),_10=1-(this.g/255),_11=1-(this.b/255);
+return {c:Math.round(_f*100),m:Math.round(_10*100),y:Math.round(_11*100)};
+},toCmyk:function(){
+var _12,_13,_14,_15;
+var r=this.r/255,g=this.g/255,b=this.b/255;
+_15=Math.min(1-r,1-g,1-b);
+_12=(1-r-_15)/(1-_15);
+_13=(1-g-_15)/(1-_15);
+_14=(1-b-_15)/(1-_15);
+return {c:Math.round(_12*100),m:Math.round(_13*100),y:Math.round(_14*100),b:Math.round(_15*100)};
+},toHsl:function(){
+var r=this.r/255,g=this.g/255,b=this.b/255;
+var min=Math.min(r,b,g),max=Math.max(r,g,b);
+var _16=max-min;
+var h=0,s=0,l=(min+max)/2;
+if(l>0&&l<1){
+s=_16/((l<0.5)?(2*l):(2-2*l));
+}
+if(_16>0){
+if(max==r&&max!=g){
+h+=(g-b)/_16;
+}
+if(max==g&&max!=b){
+h+=(2+(b-r)/_16);
+}
+if(max==b&&max!=r){
+h+=(4+(r-g)/_16);
+}
+h*=60;
+}
+return {h:h,s:Math.round(s*100),l:Math.round(l*100)};
+},toHsv:function(){
+var r=this.r/255,g=this.g/255,b=this.b/255;
+var min=Math.min(r,b,g),max=Math.max(r,g,b);
+var _17=max-min;
+var h=null,s=(max==0)?0:(_17/max);
+if(s==0){
+h=0;
+}else{
+if(r==max){
+h=60*(g-b)/_17;
+}else{
+if(g==max){
+h=120+60*(b-r)/_17;
+}else{
+h=240+60*(r-g)/_17;
+}
+}
+if(h<0){
+h+=360;
+}
+}
+return {h:h,s:Math.round(s*100),v:Math.round(max*100)};
+}});
+}
Index: trunk/web/dojo/dojox/color/Colorspace.js
===================================================================
--- trunk/web/dojo/dojox/color/Colorspace.js	(revision 0)
+++ trunk/web/dojo/dojox/color/Colorspace.js	(revision 9)
@@ -0,0 +1,472 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.color.Colorspace"]){
+dojo._hasResource["dojox.color.Colorspace"]=true;
+dojo.provide("dojox.color.Colorspace");
+dojo.require("dojox.math.matrix");
+dojox.color.Colorspace=new (function(){
+var _1=dojox.color;
+var _2=dojox.math.matrix;
+var _3=this;
+var _4={"2":{"E":{x:1/3,y:1/3,t:5400},"D50":{x:0.34567,y:0.3585,t:5000},"D55":{x:0.33242,y:0.34743,t:5500},"D65":{x:0.31271,y:0.32902,t:6500},"D75":{x:0.29902,y:0.31485,t:7500},"A":{x:0.44757,y:0.40745,t:2856},"B":{x:0.34842,y:0.35161,t:4874},"C":{x:0.31006,y:0.31616,t:6774},"9300":{x:0.2848,y:0.2932,t:9300},"F2":{x:0.37207,y:0.37512,t:4200},"F7":{x:0.31285,y:0.32918,t:6500},"F11":{x:0.38054,y:0.37691,t:4000}},"10":{"E":{x:1/3,y:1/3,t:5400},"D50":{x:0.34773,y:0.35952,t:5000},"D55":{x:0.33411,y:0.34877,t:5500},"D65":{x:0.31382,y:0.331,t:6500},"D75":{x:0.29968,y:0.3174,t:7500},"A":{x:0.45117,y:0.40594,t:2856},"B":{x:0.3498,y:0.3527,t:4874},"C":{x:0.31039,y:0.31905,t:6774},"F2":{x:0.37928,y:0.36723,t:4200},"F7":{x:0.31565,y:0.32951,t:6500},"F11":{x:0.38543,y:0.3711,t:4000}}};
+var _5={"Adobe RGB 98":[2.2,"D65",0.64,0.33,0.297361,0.21,0.71,0.627355,0.15,0.06,0.075285],"Apple RGB":[1.8,"D65",0.625,0.34,0.244634,0.28,0.595,0.672034,0.155,0.07,0.083332],"Best RGB":[2.2,"D50",0.7347,0.2653,0.228457,0.215,0.775,0.737352,0.13,0.035,0.034191],"Beta RGB":[2.2,"D50",0.6888,0.3112,0.303273,0.1986,0.7551,0.663786,0.1265,0.0352,0.032941],"Bruce RGB":[2.2,"D65",0.64,0.33,0.240995,0.28,0.65,0.683554,0.15,0.06,0.075452],"CIE RGB":[2.2,"E",0.735,0.265,0.176204,0.274,0.717,0.812985,0.167,0.009,0.010811],"ColorMatch RGB":[1.8,"D50",0.63,0.34,0.274884,0.295,0.605,0.658132,0.15,0.075,0.066985],"DON RGB 4":[2.2,"D50",0.696,0.3,0.27835,0.215,0.765,0.68797,0.13,0.035,0.03368],"ECI RGB":[1.8,"D50",0.67,0.33,0.32025,0.21,0.71,0.602071,0.14,0.08,0.077679],"EktaSpace PS5":[2.2,"D50",0.695,0.305,0.260629,0.26,0.7,0.734946,0.11,0.005,0.004425],"NTSC RGB":[2.2,"C",0.67,0.33,0.298839,0.21,0.71,0.586811,0.14,0.08,0.11435],"PAL/SECAM RGB":[2.2,"D65",0.64,0.33,0.222021,0.29,0.6,0.706645,0.15,0.06,0.071334],"Pro Photo RGB":[1.8,"D50",0.7347,0.2653,0.28804,0.1596,0.8404,0.711874,0.0366,0.0001,0.000086],"SMPTE/C RGB":[2.2,"D65",0.63,0.34,0.212395,0.31,0.595,0.701049,0.155,0.07,0.086556],"sRGB":[2.2,"D65",0.64,0.33,0.212656,0.3,0.6,0.715158,0.15,0.06,0.072186],"Wide Gamut RGB":[2.2,"D50",0.735,0.265,0.258187,0.115,0.826,0.724938,0.157,0.018,0.016875]};
+var _6={"XYZ scaling":{ma:[[1,0,0],[0,1,0],[0,0,1]],mai:[[1,0,0],[0,1,0],[0,0,1]]},"Bradford":{ma:[[0.8951,-0.7502,0.0389],[0.2664,1.7135,-0.0685],[-0.1614,0.0367,1.0296]],mai:[[0.986993,0.432305,-0.008529],[-0.147054,0.51836,0.040043],[0.159963,0.049291,0.968487]]},"Von Kries":{ma:[[0.40024,-0.2263,0],[0.7076,1.16532,0],[-0.08081,0.0457,0.91822]],mai:[[1.859936,0.361191,0],[-1.129382,0.638812,0],[0.219897,-0.000006,1.089064]]}};
+var _7={"XYZ":{"xyY":function(_8,_9){
+_9=dojo.mixin({whitepoint:"D65",observer:"10",useApproximation:true},_9||{});
+var wp=_3.whitepoint(_9.whitepoint,_9.observer);
+var _a=_8.X+_8.Y+_8.Z;
+if(_a==0){
+var x=wp.x,y=wp.y;
+}else{
+var x=_8.X/_a,y=_8.Y/_a;
+}
+return {x:x,y:y,Y:_8.Y};
+},"Lab":function(_b,_c){
+_c=dojo.mixin({whitepoint:"D65",observer:"10",useApproximation:true},_c||{});
+var _d=_3.kappa(_c.useApproximation),_e=_3.epsilon(_c.useApproximation);
+var wp=_3.whitepoint(_c.whitepoint,_c.observer);
+var xr=_b.X/wp.x,yr=_b.Y/wp.y,zr=_b.z/wp.z;
+var fx=(xr>_e)?Math.pow(xr,1/3):(_d*xr+16)/116;
+var fy=(yr>_e)?Math.pow(yr,1/3):(_d*yr+16)/116;
+var fz=(zr>_e)?Math.pow(zr,1/3):(_d*zr+16)/116;
+var L=116*fy-16,a=500*(fx-fy),b=200*(fy-fz);
+return {L:L,a:a,b:b};
+},"Luv":function(_f,_10){
+_10=dojo.mixin({whitepoint:"D65",observer:"10",useApproximation:true},_10||{});
+var _11=_3.kappa(_10.useApproximation),_12=_3.epsilon(_10.useApproximation);
+var wp=_3.whitepoint(_10.whitepoint,_10.observer);
+var ud=(4*_f.X)/(_f.X+15*_f.Y+3*_f.Z);
+var vd=(9*_f.Y)/(_f.X+15*_f.Y+3*_f.Z);
+var udr=(4*wp.x)/(wp.x+15*wp.y+3*wp.z);
+var vdr=(9*wp.y)/(wp.x+15*wp.y+3*wp.z);
+var yr=_f.Y/wp.y;
+var L=(yr>_12)?116*Math.pow(yr,1/3)-16:_11*yr;
+var u=13*L*(ud-udr);
+var v=13*L*(vd-vdr);
+return {L:L,u:u,v:v};
+}},"xyY":{"XYZ":function(xyY){
+if(xyY.y==0){
+var X=0,Y=0,Z=0;
+}else{
+var X=(xyY.x*xyY.Y)/xyY.y;
+var Y=xyY.Y;
+var Z=((1-xyY.x-xyY.y)*xyY.Y)/xyY.y;
+}
+return {X:X,Y:Y,Z:Z};
+}},"Lab":{"XYZ":function(lab,_13){
+_13=dojo.mixin({whitepoint:"D65",observer:"10",useApproximation:true},_13||{});
+var b=_13.useApproximation,_14=_3.kappa(b),_15=_3.epsilon(b);
+var wp=_3.whitepoint(_13.whitepoint,_13.observer);
+var yr=(lab.L>(_14*_15))?Math.pow((lab.L+16)/116,3):lab.L/_14;
+var fy=(yr>_15)?(lab.L+16)/116:(_14*yr+16)/116;
+var fx=(lab.a/500)+fy;
+var fz=fy-(lab.b/200);
+var _16=Math.pow(fx,3),_17=Math.pow(fz,3);
+var xr=(_16>_15)?_16:(116*fx-16)/_14;
+var zr=(_17>_15)?_17:(116*fz-16)/_14;
+return {X:xr*wp.x,Y:yr*wp.y,Z:zr*wp.z};
+},"LCHab":function(lab){
+var L=lab.L,C=Math.pow(lab.a*lab.a+lab.b*lab.b,0.5),H=Math.atan(lab.b,lab.a)*(180/Math.PI);
+if(H<0){
+H+=360;
+}
+if(H<360){
+H-=360;
+}
+return {L:L,C:C,H:H};
+}},"LCHab":{"Lab":function(lch){
+var _18=lch.H*(Math.PI/180),L=lch.L,a=lch.C/Math.pow(Math.pow(Math.tan(_18),2)+1,0.5);
+if(90<lchH&&lch.H<270){
+a=-a;
+}
+var b=Math.pow(Math.pow(lch.C,2)-Math.pow(a,2),0.5);
+if(lch.H>180){
+b=-b;
+}
+return {L:L,a:a,b:b};
+}},"Luv":{"XYZ":function(Luv,_19){
+_19=dojo.mixin({whitepoint:"D65",observer:"10",useApproximation:true},_19||{});
+var b=_19.useApproximation,_1a=_3.kappa(b),_1b=_3.epsilon(b);
+var wp=_3.whitepoint(_19.whitepoint,_19.observer);
+var uz=(4*wp.x)/(wp.x+15*wp.y+3*wp.z);
+var vz=(9*wp.y)/(wp.x+15*wp.y+3*wp.z);
+var Y=(Luv.L>_1a*_1b)?Math.pow((Luv.L+16)/116,3):Luv.L/_1a;
+var a=(1/3)*(((52*Luv.L)/(Luv.u+13*Luv.L*uz))-1);
+var b=-5*Y,c=-(1/3),d=Y*(((39*Luv.L)/(Luv.v+13*Luv.L*vz))-5);
+var X=(d-b)/(a-c),Z=X*a+b;
+return {X:X,Y:Y,Z:Z};
+},"LCHuv":function(Luv){
+var L=Luv.L,C=Math.pow(Luv.u*Luv.u+Luv.v*Luv*v,0.5),H=Math.atan(Luv.v,Luv.u)*(180/Math.PI);
+if(H<0){
+H+=360;
+}
+if(H>360){
+H-=360;
+}
+return {L:L,C:C,H:H};
+}},"LCHuv":{"Luv":function(LCH){
+var _1c=LCH.H*(Math.PI/180);
+var L=LCH.L,u=LCH.C/Math.pow(Math.pow(Math.tan(_1c),2)+1,0.5);
+var v=Math.pow(LCH.C*LCH.C-u*u,0.5);
+if(90<LCH.H&&LCH.H>270){
+u*=-1;
+}
+if(LCH.H>180){
+v*=-1;
+}
+return {L:L,u:u,v:v};
+}}};
+var _1d={"CMY":{"CMYK":function(obj,_1e){
+return _1.fromCmy(obj).toCmyk();
+},"HSL":function(obj,_1f){
+return _1.fromCmy(obj).toHsl();
+},"HSV":function(obj,_20){
+return _1.fromCmy(obj).toHsv();
+},"Lab":function(obj,_21){
+return _7["XYZ"]["Lab"](_1.fromCmy(obj).toXYZ(_21));
+},"LCHab":function(obj,_22){
+return _7["Lab"]["LCHab"](_1d["CMY"]["Lab"](obj));
+},"LCHuv":function(obj,_23){
+return _7["LCHuv"]["Luv"](_7["Luv"]["XYZ"](_1.fromCmy(obj).toXYZ(_23)));
+},"Luv":function(obj,_24){
+return _7["Luv"]["XYZ"](_1.fromCmy(obj).toXYZ(_24));
+},"RGB":function(obj,_25){
+return _1.fromCmy(obj);
+},"XYZ":function(obj,_26){
+return _1.fromCmy(obj).toXYZ(_26);
+},"xyY":function(obj,_27){
+return _7["XYZ"]["xyY"](_1.fromCmy(obj).toXYZ(_27));
+}},"CMYK":{"CMY":function(obj,_28){
+return _1.fromCmyk(obj).toCmy();
+},"HSL":function(obj,_29){
+return _1.fromCmyk(obj).toHsl();
+},"HSV":function(obj,_2a){
+return _1.fromCmyk(obj).toHsv();
+},"Lab":function(obj,_2b){
+return _7["XYZ"]["Lab"](_1.fromCmyk(obj).toXYZ(_2b));
+},"LCHab":function(obj,_2c){
+return _7["Lab"]["LCHab"](_1d["CMYK"]["Lab"](obj));
+},"LCHuv":function(obj,_2d){
+return _7["LCHuv"]["Luv"](_7["Luv"]["XYZ"](_1.fromCmyk(obj).toXYZ(_2d)));
+},"Luv":function(obj,_2e){
+return _7["Luv"]["XYZ"](_1.fromCmyk(obj).toXYZ(_2e));
+},"RGB":function(obj,_2f){
+return _1.fromCmyk(obj);
+},"XYZ":function(obj,_30){
+return _1.fromCmyk(obj).toXYZ(_30);
+},"xyY":function(obj,_31){
+return _7["XYZ"]["xyY"](_1.fromCmyk(obj).toXYZ(_31));
+}},"HSL":{"CMY":function(obj,_32){
+return _1.fromHsl(obj).toCmy();
+},"CMYK":function(obj,_33){
+return _1.fromHsl(obj).toCmyk();
+},"HSV":function(obj,_34){
+return _1.fromHsl(obj).toHsv();
+},"Lab":function(obj,_35){
+return _7["XYZ"]["Lab"](_1.fromHsl(obj).toXYZ(_35));
+},"LCHab":function(obj,_36){
+return _7["Lab"]["LCHab"](_1d["CMYK"]["Lab"](obj));
+},"LCHuv":function(obj,_37){
+return _7["LCHuv"]["Luv"](_7["Luv"]["XYZ"](_1.fromHsl(obj).toXYZ(_37)));
+},"Luv":function(obj,_38){
+return _7["Luv"]["XYZ"](_1.fromHsl(obj).toXYZ(_38));
+},"RGB":function(obj,_39){
+return _1.fromHsl(obj);
+},"XYZ":function(obj,_3a){
+return _1.fromHsl(obj).toXYZ(_3a);
+},"xyY":function(obj,_3b){
+return _7["XYZ"]["xyY"](_1.fromHsl(obj).toXYZ(_3b));
+}},"HSV":{"CMY":function(obj,_3c){
+return _1.fromHsv(obj).toCmy();
+},"CMYK":function(obj,_3d){
+return _1.fromHsv(obj).toCmyk();
+},"HSL":function(obj,_3e){
+return _1.fromHsv(obj).toHsl();
+},"Lab":function(obj,_3f){
+return _7["XYZ"]["Lab"](_1.fromHsv(obj).toXYZ(_3f));
+},"LCHab":function(obj,_40){
+return _7["Lab"]["LCHab"](_1d["CMYK"]["Lab"](obj));
+},"LCHuv":function(obj,_41){
+return _7["LCHuv"]["Luv"](_7["Luv"]["XYZ"](_1.fromHsv(obj).toXYZ(_41)));
+},"Luv":function(obj,_42){
+return _7["Luv"]["XYZ"](_1.fromHsv(obj).toXYZ(_42));
+},"RGB":function(obj,_43){
+return _1.fromHsv(obj);
+},"XYZ":function(obj,_44){
+return _1.fromHsv(obj).toXYZ(_44);
+},"xyY":function(obj,_45){
+return _7["XYZ"]["xyY"](_1.fromHsv(obj).toXYZ(_45));
+}},"Lab":{"CMY":function(obj,_46){
+return _1.fromXYZ(_7["Lab"]["XYZ"](obj,_46)).toCmy();
+},"CMYK":function(obj,_47){
+return _1.fromXYZ(_7["Lab"]["XYZ"](obj,_47)).toCmyk();
+},"HSL":function(obj,_48){
+return _1.fromXYZ(_7["Lab"]["XYZ"](obj,_48)).toHsl();
+},"HSV":function(obj,_49){
+return _1.fromXYZ(_7["Lab"]["XYZ"](obj,_49)).toHsv();
+},"LCHab":function(obj,_4a){
+return _7["Lab"]["LCHab"](obj,_4a);
+},"LCHuv":function(obj,_4b){
+return _7["Luv"]["LCHuv"](_7["Lab"]["XYZ"](obj,_4b),_4b);
+},"Luv":function(obj,_4c){
+return _7["XYZ"]["Luv"](_7["Lab"]["XYZ"](obj,_4c),_4c);
+},"RGB":function(obj,_4d){
+return _1.fromXYZ(_7["Lab"]["XYZ"](obj,_4d));
+},"XYZ":function(obj,_4e){
+return _7["Lab"]["XYZ"](obj,_4e);
+},"xyY":function(obj,_4f){
+return _7["XYZ"]["xyY"](_7["Lab"]["XYZ"](obj,_4f),_4f);
+}},"LCHab":{"CMY":function(obj,_50){
+return _1.fromXYZ(_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_50),_50).toCmy();
+},"CMYK":function(obj,_51){
+return _1.fromXYZ(_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_51),_51).toCmyk();
+},"HSL":function(obj,_52){
+return _1.fromXYZ(_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_52),_52).toHsl();
+},"HSV":function(obj,_53){
+return _1.fromXYZ(_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_53),_53).toHsv();
+},"Lab":function(obj,_54){
+return _7["Lab"]["LCHab"](obj,_54);
+},"LCHuv":function(obj,_55){
+return _7["Luv"]["LCHuv"](_7["XYZ"]["Luv"](_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_55),_55),_55);
+},"Luv":function(obj,_56){
+return _7["XYZ"]["Luv"](_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_56),_56);
+},"RGB":function(obj,_57){
+return _1.fromXYZ(_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_57),_57);
+},"XYZ":function(obj,_58){
+return _7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj,_58),_58);
+},"xyY":function(obj,_59){
+return _7["XYZ"]["xyY"](_7["Lab"]["XYZ"](_7["LCHab"]["Lab"](obj),_59),_59);
+}},"LCHuv":{"CMY":function(obj,_5a){
+return _1.fromXYZ(_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_5a),_5a).toCmy();
+},"CMYK":function(obj,_5b){
+return _1.fromXYZ(_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_5b),_5b).toCmyk();
+},"HSL":function(obj,_5c){
+return _1.fromXYZ(_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_5c),_5c).toHsl();
+},"HSV":function(obj,_5d){
+return _1.fromXYZ(_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_5d),_5d).toHsv();
+},"Lab":function(obj,_5e){
+return _7["XYZ"]["Lab"](_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_5e),_5e);
+},"LCHab":function(obj,_5f){
+return _7["Lab"]["LCHab"](_7["XYZ"]["Lab"](_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_5f),_5f),_5f);
+},"Luv":function(obj,_60){
+return _7["LCHuv"]["Luv"](obj,_60);
+},"RGB":function(obj,_61){
+return _1.fromXYZ(_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_61),_61);
+},"XYZ":function(obj,_62){
+return _7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_62);
+},"xyY":function(obj,_63){
+return _7["XYZ"]["xyY"](_7["Luv"]["XYZ"](_7["LCHuv"]["Luv"](obj),_63),_63);
+}},"Luv":{"CMY":function(obj,_64){
+return _1.fromXYZ(_7["Luv"]["XYZ"](obj,_64),_64).toCmy();
+},"CMYK":function(obj,_65){
+return _1.fromXYZ(_7["Luv"]["XYZ"](obj,_65),_65).toCmyk();
+},"HSL":function(obj,_66){
+return _1.fromXYZ(_7["Luv"]["XYZ"](obj,_66),_66).toHsl();
+},"HSV":function(obj,_67){
+return _1.fromXYZ(_7["Luv"]["XYZ"](obj,_67),_67).toHsv();
+},"Lab":function(obj,_68){
+return _7["XYZ"]["Lab"](_7["Luv"]["XYZ"](obj,_68),_68);
+},"LCHab":function(obj,_69){
+return _7["Lab"]["LCHab"](_7["XYZ"]["Lab"](_7["Luv"]["XYZ"](obj,_69),_69),_69);
+},"LCHuv":function(obj,_6a){
+return _7["Luv"]["LCHuv"](obj,_6a);
+},"RGB":function(obj,_6b){
+return _1.fromXYZ(_7["Luv"]["XYZ"](obj,_6b),_6b);
+},"XYZ":function(obj,_6c){
+return _7["Luv"]["XYZ"](obj,_6c);
+},"xyY":function(obj,_6d){
+return _7["XYZ"]["xyY"](_7["Luv"]["XYZ"](obj,_6d),_6d);
+}},"RGB":{"CMY":function(obj,_6e){
+return obj.toCmy();
+},"CMYK":function(obj,_6f){
+return obj.toCmyk();
+},"HSL":function(obj,_70){
+return obj.toHsl();
+},"HSV":function(obj,_71){
+return obj.toHsv();
+},"Lab":function(obj,_72){
+return _7["XYZ"]["Lab"](obj.toXYZ(_72),_72);
+},"LCHab":function(obj,_73){
+return _7["LCHab"]["Lab"](_7["XYZ"]["Lab"](obj.toXYZ(_73),_73),_73);
+},"LCHuv":function(obj,_74){
+return _7["LCHuv"]["Luv"](_7["XYZ"]["Luv"](obj.toXYZ(_74),_74),_74);
+},"Luv":function(obj,_75){
+return _7["XYZ"]["Luv"](obj.toXYZ(_75),_75);
+},"XYZ":function(obj,_76){
+return obj.toXYZ(_76);
+},"xyY":function(obj,_77){
+return _7["XYZ"]["xyY"](obj.toXYZ(_77),_77);
+}},"XYZ":{"CMY":function(obj,_78){
+return _1.fromXYZ(obj,_78).toCmy();
+},"CMYK":function(obj,_79){
+return _1.fromXYZ(obj,_79).toCmyk();
+},"HSL":function(obj,_7a){
+return _1.fromXYZ(obj,_7a).toHsl();
+},"HSV":function(obj,_7b){
+return _1.fromXYZ(obj,_7b).toHsv();
+},"Lab":function(obj,_7c){
+return _7["XYZ"]["Lab"](obj,_7c);
+},"LCHab":function(obj,_7d){
+return _7["Lab"]["LCHab"](_7["XYZ"]["Lab"](obj,_7d),_7d);
+},"LCHuv":function(obj,_7e){
+return _7["Luv"]["LCHuv"](_7["XYZ"]["Luv"](obj,_7e),_7e);
+},"Luv":function(obj,_7f){
+return _7["XYZ"]["Luv"](obj,_7f);
+},"RGB":function(obj,_80){
+return _1.fromXYZ(obj,_80);
+},"xyY":function(obj,_81){
+return _7["XYZ"]["xyY"](_1.fromXYZ(obj,_81),_81);
+}},"xyY":{"CMY":function(obj,_82){
+return _1.fromXYZ(_7["xyY"]["XYZ"](obj,_82),_82).toCmy();
+},"CMYK":function(obj,_83){
+return _1.fromXYZ(_7["xyY"]["XYZ"](obj,_83),_83).toCmyk();
+},"HSL":function(obj,_84){
+return _1.fromXYZ(_7["xyY"]["XYZ"](obj,_84),_84).toHsl();
+},"HSV":function(obj,_85){
+return _1.fromXYZ(_7["xyY"]["XYZ"](obj,_85),_85).toHsv();
+},"Lab":function(obj,_86){
+return _7["Lab"]["XYZ"](_7["xyY"]["XYZ"](obj,_86),_86);
+},"LCHab":function(obj,_87){
+return _7["LCHab"]["Lab"](_7["Lab"]["XYZ"](_7["xyY"]["XYZ"](obj,_87),_87),_87);
+},"LCHuv":function(obj,_88){
+return _7["LCHuv"]["Luv"](_7["Luv"]["XYZ"](_7["xyY"]["XYZ"](obj,_88),_88),_88);
+},"Luv":function(obj,_89){
+return _7["Luv"]["XYZ"](_7["xyY"]["XYZ"](obj,_89),_89);
+},"RGB":function(obj,_8a){
+return _1.fromXYZ(_7["xyY"]["XYZ"](obj,_8a),_8a);
+},"XYZ":function(obj,_8b){
+return _7["xyY"]["XYZ"](obj,_8b);
+}}};
+this.whitepoint=function(_8c,_8d){
+_8d=_8d||"10";
+var x=0,y=0,t=0;
+if(_4[_8d]&&_4[_8d][_8c]){
+x=_4[_8d][_8c].x;
+y=_4[_8d][_8c].y;
+t=_4[_8d][_8c].t;
+}else{
+console.warn("dojox.color.Colorspace::whitepoint: either the observer or the whitepoint name was not found. ",_8d,_8c);
+}
+var wp={x:x,y:y,z:(1-x-y),t:t,Y:1};
+return this.convert(wp,"xyY","XYZ");
+};
+this.tempToWhitepoint=function(t){
+if(t<4000){
+console.warn("dojox.color.Colorspace::tempToWhitepoint: can't find a white point for temperatures less than 4000K. (Passed ",t,").");
+return {x:0,y:0};
+}
+if(t>25000){
+console.warn("dojox.color.Colorspace::tempToWhitepoint: can't find a white point for temperatures greater than 25000K. (Passed ",t,").");
+return {x:0,y:0};
+}
+var t1=t,t2=t*t,t3=t2*t;
+var _8e=Math.pow(10,9),_8f=Math.pow(10,6),_90=Math.pow(10,3);
+if(t<=7000){
+var x=(-4.607*_8e/t3)+(2.9678*_8f/t2)+(0.09911*_90/t)+0.2444063;
+}else{
+var x=(-2.0064*_8e/t3)+(1.9018*_8f/t2)+(0.24748*_90/t)+0.23704;
+}
+var y=-3*x*x+2.87*x-0.275;
+return {x:x,y:y};
+};
+this.primaries=function(_91){
+_91=dojo.mixin({profile:"sRGB",whitepoint:"D65",observer:"10",adaptor:"Bradford"},_91||{});
+var m=[];
+if(_5[_91.profile]){
+m=_5[_91.profile].slice(0);
+}else{
+console.warn("dojox.color.Colorspace::primaries: the passed profile was not found.  ","Available profiles include: ",_5,".  The profile passed was ",_91.profile);
+}
+var _92={name:_91.profile,gamma:m[0],whitepoint:m[1],xr:m[2],yr:m[3],Yr:m[4],xg:m[5],yg:m[6],Yg:m[7],xb:m[8],yb:m[9],Yb:m[10]};
+if(_91.whitepoint!=_92.whitepoint){
+var r=this.convert(this.adapt({color:this.convert({x:xr,y:yr,Y:Yr},"xyY","XYZ"),adaptor:_91.adaptor,source:_92.whitepoint,destination:_91.whitepoint}),"XYZ","xyY");
+var g=this.convert(this.adapt({color:this.convert({x:xg,y:yg,Y:Yg},"xyY","XYZ"),adaptor:_91.adaptor,source:_92.whitepoint,destination:_91.whitepoint}),"XYZ","xyY");
+var b=this.convert(this.adapt({color:this.convert({x:xb,y:yb,Y:Yb},"xyY","XYZ"),adaptor:_91.adaptor,source:_92.whitepoint,destination:_91.whitepoint}),"XYZ","xyY");
+_92=dojo.mixin(_92,{xr:r.x,yr:r.y,Yr:r.Y,xg:g.x,yg:g.y,Yg:g.Y,xb:b.x,yb:b.y,Yb:b.Y,whitepoint:_91.whitepoint});
+}
+return dojo.mixin(_92,{zr:1-_92.xr-_92.yr,zg:1-_92.xg-_92.yg,zb:1-_92.xb-_92.yb});
+};
+this.adapt=function(_93){
+if(!_93.color||!_93.source){
+console.error("dojox.color.Colorspace::adapt: color and source arguments are required. ",_93);
+}
+_93=dojo.mixin({adaptor:"Bradford",destination:"D65"},_93);
+var swp=this.whitepoint(_93.source);
+var dwp=this.whitepoint(_93.destination);
+if(_6[_93.adaptor]){
+var ma=_6[_93.adaptor].ma;
+var mai=_6[_93.adaptor].mai;
+}else{
+console.warn("dojox.color.Colorspace::adapt: the passed adaptor '",_93.adaptor,"' was not found.");
+}
+var _94=_2.multiply([[swp.x,swp.y,swp.z]],ma);
+var _95=_2.multiply([[dwp.x,dwp.y,dwp.z]],ma);
+var _96=[[_95[0][0]/_94[0][0],0,0],[0,_95[0][1]/_94[0][1],0],[0,0,_95[0][2]/_94[0][2]]];
+var m=_2.multiply(_2.multiply(ma,_96),mai);
+var r=_2.multiply([[_93.color.X,_93.color.Y,_93.color.Z]],m)[0];
+return {X:r[0],Y:r[1],Z:r[2]};
+};
+this.matrix=function(to,_97){
+var wp=this.whitepoint(_97.whitepoint);
+var Xr=p.xr/p.yr,Yr=1,Zr=(1-p.xr-p.yr)/p.yr;
+var Xg=p.xg/p.yg,Yg=1,Zg=(1-p.xg-p.yg)/p.yg;
+var Xb=p.xb/p.yb,Yb=1,Zr=(1-p.xb-p.yb)/p.yb;
+var m1=[[Xr,Yr,Zr],[Xg,Yg,Zg],[Xb,Yb,Zb]];
+var m2=[[wp.X,wp.Y,wp.Z]];
+var sm=dojox.math.matrix.multiply(m2,dojox.math.matrix.inverse(m1));
+var Sr=sm[0][0],Sg=sm[0][1],Sb=sm[0][2];
+var _98=[[Sr*Xr,Sr*Yr,Sr*Zr],[Sg*Xg,Sg*Yg,Sg*Zg],[Sb*Xb,Sb*Yb,Sb*Zb]];
+if(to=="RGB"){
+return dojox.math.inverse(_98);
+}
+return _98;
+};
+this.epsilon=function(_99){
+return (_99||typeof (_99)=="undefined")?0.008856:216/24289;
+};
+this.kappa=function(_9a){
+return (_9a||typeof (_9a)=="undefined")?903.3:24389/27;
+};
+this.convert=function(_9b,_9c,to,_9d){
+if(_1d[_9c]&&_1d[_9c][to]){
+return _1d[_9c][to](obj,_9d);
+}
+console.warn("dojox.color.Colorspace::convert: Can't convert ",_9b," from ",_9c," to ",to,".");
+};
+})();
+dojo.mixin(dojox.color,{fromXYZ:function(xyz,_9e){
+_9e=_9e||{};
+var p=dojox.color.Colorspace.primaries(_9e);
+var m=dojox.color.Colorspace.matrix("RGB",p);
+var rgb=dojox.math.matrix.mutliply([[xyz.X,xyz.Y,xyz.Z]],m);
+var r=rgb[0][0],g=rgb[0][1],b=rgb[0][2];
+if(p.profile=="sRGB"){
+var R=(r>0.0031308)?(1.055*Math.pow(r,1/2.4))-0.055:12.92*r;
+var G=(g>0.0031308)?(1.055*Math.pow(g,1/2.4))-0.055:12.92*g;
+var B=(b>0.0031308)?(1.055*Math.pow(b,1/2.4))-0.055:12.92*b;
+}else{
+var R=Math.pow(r,1/p.gamma),G=Math.pow(g,1/p.gamma),B=Math.pow(b,1/p.gamma);
+}
+return new dojox.color.Color({r:Math.floor(R*255),g:Math.floor(G*255),b:Math.floor(B*255)});
+}});
+dojo.extend(dojox.color.Color,{toXYZ:function(_9f){
+_9f=_9f||{};
+var p=dojox.color.Colorspace.primaries(_9f);
+var m=dojox.color.Colorspace.matrix("XYZ",p);
+var _a0=this.r/255,_a1=this.g/255,_a2=this.b/255;
+if(p.profile=="sRGB"){
+var r=(_a0>0.04045)?Math.pow(((_a0+0.055)/1.055),2.4):_a0/12.92;
+var g=(_a1>0.04045)?Math.pow(((_a1+0.055)/1.055),2.4):_a1/12.92;
+var b=(_a2>0.04045)?Math.pow(((_a2+0.055)/1.055),2.4):_a2/12.92;
+}else{
+var r=Math.pow(_a0,p.gamma),g=Math.pow(_a1,p.gamma),b=Math.pow(_a2,p.gamma);
+}
+var xyz=dojox.math.matrix([[r,g,b]],m);
+return {X:xyz[0][0],Y:xyz[0][1],Z:xyz[0][2]};
+}});
+}
Index: trunk/web/dojo/dojox/robot/README
===================================================================
--- trunk/web/dojo/dojox/robot/README	(revision 0)
+++ trunk/web/dojo/dojox/robot/README	(revision 9)
@@ -0,0 +1,59 @@
+-------------------------------------------------------------------------------
+dojox.robot.recorder
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 2008-07-30
+-------------------------------------------------------------------------------
+Project state: experimental
+-------------------------------------------------------------------------------
+Project authors
+	Mark Hays
+-------------------------------------------------------------------------------
+Project description
+
+Writing automated test cases takes time, and DOH is no exception. You have to
+look up element ids, invent dojo.queries for elements with no id,
+figure out exactly how many pixels to move the mouse . . . the list goes on.
+
+This recorder module enables DOH test case writers to create complete DOH test
+scripts directly from their actions and input on a Web page. Simply drop the
+generated code into your test page, set a pass condition, and the test will
+repeat your actions.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo
+-------------------------------------------------------------------------------
+Documentation
+
+See installation instructions below to prepare a test page for recording.
+
+To record a test, click in an area of the document with no dojo.stopEvents
+and press CTRL-ALT-ENTER in the main window. You will get a verification alert
+when you successfully start the recorder. Then you can interact with the Web
+page and the recorder will monitor your actions. It's usually good to record one
+test per widget instance per type of interaction (keyboard vs mouse for instance)
+you are testing.
+
+After you finish interacting with the Web page, click out of any dojo.stopEvents
+and press CTRL-ALT-ENTER again. You will see a box containing the generated source 
+code for your recording. Copy this into a dojo.addOnLoad on the same page to register 
+the test with DOH. Replace the /*Your condition here*/ text with a JS condition that
+indicates that the test passed. Again, having multiple small tests will help you
+keep the condition small. Add a doh.run() call after you register all of your tests
+to make them execute when you load the page.
+-------------------------------------------------------------------------------
+Installation instructions
+
+To ready the recorder for a particular page, add this line to your dojo.requires:
+dojo.require("dojox.robot.recorder");
+
+You can safely remove this line after you are finished recording your tests.
+-------------------------------------------------------------------------------
+Additional Notes
+
+Known limitations:
+- Content in an iframe might not report events to the recorder.
+- keyDown/keyUp events are supported by DOH, but not by the recorder.
+	If you hold a key down, it will generate lots of keyPress events instead.
+	Simply change these to one keyDown call yourself.
Index: trunk/web/dojo/dojox/robot/recorder.js
===================================================================
--- trunk/web/dojo/dojox/robot/recorder.js	(revision 0)
+++ trunk/web/dojo/dojox/robot/recorder.js	(revision 9)
@@ -0,0 +1,329 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.robot.recorder"]){
+dojo._hasResource["dojox.robot.recorder"]=true;
+dojo.provide("dojox.robot.recorder");
+dojo.experimental("dojox.robot.recorder");
+(function(){
+var _1=1000;
+var _2=500;
+var _3=10000;
+var _4=[];
+var _5=0;
+var _6=null;
+var _7=null;
+var _8=function(){
+alert("Started recording.");
+_4=[];
+_6=new Date();
+_7=new Date();
+};
+var _9=function(_a,_b){
+if(_6==null||_a=="doh.robot.keyPress"&&_b[0]==dojo.keys.ENTER&&eval("("+_b[2]+")").ctrl&&eval("("+_b[2]+")").alt){
+return;
+}
+var dt=Math.max(Math.min(Math.round((new Date()).getTime()-_7.getTime()),_3),1);
+if(_a=="doh.robot.mouseMove"){
+_b[2]=dt;
+}else{
+_b[1]=dt;
+}
+_4.push({name:_a,args:_b});
+_7=new Date();
+};
+var _c=function(){
+var c=_4;
+if(c[0].name=="doh.robot.keyPress"&&(c[0].args[0]==dojo.keys.ENTER||c[0].args[0]==77)){
+c.splice(0,1);
+}
+for(var i=c.length-1;(i>=c.length-2)&&(i>=0);i--){
+if(c[i].name=="doh.robot.keyPress"&&c[i].args[0]==dojo.keys.ALT||c[i].args[0]==dojo.keys.CTRL){
+c.splice(i,1);
+}
+}
+for(i=0;i<c.length;i++){
+var _d,_e;
+if(c[i+1]&&c[i].name=="doh.robot.mouseMove"&&c[i+1].name==c[i].name&&c[i+1].args[2]<_2){
+_d=c[i+1];
+_e=0;
+while(_d&&_d.name==c[i].name&&_d.args[2]<_2){
+c.splice(i+1,1);
+_e+=_d.args[2];
+c[i].args[0]=_d.args[0];
+c[i].args[1]=_d.args[1];
+_d=c[i+1];
+}
+c[i].args[3]=_e;
+}else{
+if(c[i+1]&&c[i].name=="doh.robot.mouseWheel"&&c[i+1].name==c[i].name&&c[i+1].args[1]<_2){
+_d=c[i+1];
+_e=0;
+while(_d&&_d.name==c[i].name&&_d.args[1]<_2){
+c.splice(i+1,1);
+_e+=_d.args[1];
+c[i].args[0]+=_d.args[0];
+_d=c[i+1];
+}
+c[i].args[2]=_e;
+}else{
+if(c[i+2]&&c[i].name=="doh.robot.mouseMoveAt"&&c[i+2].name=="doh.robot.scrollIntoView"){
+var _f=c.splice(i+2,1)[0];
+c.splice(i,0,_f);
+}else{
+if(c[i+1]&&c[i].name=="doh.robot.mousePress"&&c[i+1].name=="doh.robot.mouseRelease"&&c[i].args[0]==c[i+1].args[0]){
+c[i].name="doh.robot.mouseClick";
+c.splice(i+1,1);
+if(c[i+1]&&c[i+1].name=="doh.robot.mouseClick"&&c[i].args[0]==c[i+1].args[0]){
+c.splice(i+1,1);
+}
+}else{
+if(c[i+1]&&c[i-1]&&c[i-1].name=="doh.robot.mouseMoveAt"&&c[i].name=="doh.robot.mousePress"&&c[i+1].name=="doh.robot.mouseMove"){
+var cmd={name:"doh.robot.mouseMoveAt",args:[c[i-1].args[0],1,100,c[i-1].args[3]+1,c[i-1].args[4]]};
+c.splice(i+1,0,cmd);
+}else{
+if(c[i+1]&&((c[i].name=="doh.robot.keyPress"&&typeof c[i].args[0]=="string")||c[i].name=="doh.robot.typeKeys")&&c[i+1].name=="doh.robot.keyPress"&&typeof c[i+1].args[0]=="string"&&c[i+1].args[1]<=_1&&!eval("("+c[i].args[2]+")").ctrl&&!eval("("+c[i].args[2]+")").alt&&!eval("("+c[i+1].args[2]+")").ctrl&&!eval("("+c[i+1].args[2]+")").alt){
+c[i].name="doh.robot.typeKeys";
+c[i].args.splice(3,1);
+_d=c[i+1];
+var _10=0;
+while(_d&&_d.name=="doh.robot.keyPress"&&typeof _d.args[0]=="string"&&_d.args[1]<=_1&&!eval("("+_d.args[2]+")").ctrl&&!eval("("+_d.args[2]+")").alt){
+c.splice(i+1,1);
+c[i].args[0]+=_d.args[0];
+_10+=_d.args[1];
+_d=c[i+1];
+}
+c[i].args[2]=_10;
+c[i].args[0]="'"+c[i].args[0]+"'";
+}else{
+if(c[i].name=="doh.robot.keyPress"){
+if(typeof c[i].args[0]=="string"){
+c[i].args[0]="'"+c[i].args[0]+"'";
+}else{
+if(c[i].args[0]==0){
+c.splice(i,1);
+}else{
+for(var j in dojo.keys){
+if(dojo.keys[j]==c[i].args[0]){
+c[i].args[0]="dojo.keys."+j;
+break;
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+};
+var _11=function(){
+if(!_6){
+_8();
+}else{
+_12();
+}
+};
+var _12=function(){
+var dt=Math.round((new Date()).getTime()-_6.getTime());
+_6=null;
+_c();
+var c=_4;
+if(c.length){
+var s="doh.register('dojox.robot.AutoGeneratedTestGroup',{\n";
+s+="     name: 'autotest"+(_5++)+"',\n";
+s+="     timeout: "+(dt+2000)+",\n";
+s+="     runTest: function(){\n";
+s+="          var d = new doh.Deferred();\n";
+for(var i=0;i<c.length;i++){
+s+="          "+c[i].name+"(";
+for(var j=0;j<c[i].args.length;j++){
+var arg=c[i].args[j];
+s+=arg;
+if(j!=c[i].args.length-1){
+s+=", ";
+}
+}
+s+=");\n";
+}
+s+="          doh.robot.sequence(function(){\n";
+s+="               if(/*Your condition here*/){\n";
+s+="                    d.callback(true);\n";
+s+="               }else{\n";
+s+="                    d.errback(new Error('We got a failure'));\n";
+s+="               }\n";
+s+="          }, 1000);\n";
+s+="          return d;\n";
+s+="     }\n";
+s+="});\n";
+var div=document.createElement("div");
+div.id="dojox.robot.recorder";
+div.style.backgroundColor="white";
+div.style.position="absolute";
+var _13={y:(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),x:(window.pageXOffset||(window["dojo"]?dojo._fixIeBiDiScrollLeft(document.documentElement.scrollLeft):undefined)||document.body.scrollLeft||0)};
+div.style.left=_13.x+"px";
+div.style.top=_13.y+"px";
+var h1=document.createElement("h1");
+h1.innerHTML="Your code:";
+div.appendChild(h1);
+var pre=document.createElement("pre");
+if(pre.innerText!==undefined){
+pre.innerText=s;
+}else{
+pre.textContent=s;
+}
+div.appendChild(pre);
+var _14=document.createElement("button");
+_14.innerHTML="Close";
+var _15=dojo.connect(_14,"onmouseup",function(e){
+dojo.stopEvent(e);
+document.body.removeChild(div);
+dojo.disconnect(_15);
+});
+div.appendChild(_14);
+document.body.appendChild(div);
+_4=[];
+}
+};
+var _16=function(_17){
+if(typeof _17=="string"){
+return "'"+_17+"'";
+}else{
+if(_17.id){
+return "'"+_17.id+"'";
+}else{
+var _18=document.getElementsByTagName(_17.nodeName);
+var i;
+for(i=0;i<_18.length;i++){
+if(_18[i]==_17){
+break;
+}
+}
+return "function(){ return document.getElementsByTagName('"+_17.nodeName+"')["+i+"]; }";
+}
+}
+};
+var _19=function(b){
+return "{left:"+(b==0)+", middle:"+(b==1)+", right:"+(b==2)+"}";
+};
+var _1a=function(e){
+return "{'shift':"+(e.shiftKey)+", 'ctrl':"+(e.ctrlKey)+", 'alt':"+(e.altKey)+"}";
+};
+dojo.connect(document,"onkeydown",function(e){
+if((e.keyCode==dojo.keys.ENTER||e.keyCode==77)&&e.ctrlKey&&e.altKey){
+dojo.stopEvent(e);
+_11();
+}
+});
+var _1b={type:""};
+var _1c=function(e){
+if(!e||_1b.type==e.type&&_1b.button==e.button){
+return;
+}
+_1b={type:e.type,button:e.button};
+var _1d=_16(e.target);
+var _1e=dojo.coords(e.target);
+_9("doh.robot.mouseMoveAt",[_1d,0,100,e.clientX-_1e.x,e.clientY-_1e.y]);
+_9("doh.robot.mousePress",[_19(e.button-(dojo.isIE?1:0)),0]);
+};
+var _1f=function(e){
+if(!e||_1b.type==e.type&&_1b.button==e.button){
+return;
+}
+_1b={type:e.type,button:e.button};
+var _20=_16(e.target);
+var _21=dojo.coords(e.target);
+_9("doh.robot.mouseClick",[_19(e.button-(dojo.isIE?1:0)),0]);
+};
+var _22=function(e){
+if(!e||_1b.type==e.type&&_1b.button==e.button){
+return;
+}
+_1b={type:e.type,button:e.button};
+var _23=_16(e.target);
+var _24=dojo.coords(e.target);
+_9("doh.robot.mouseRelease",[_19(e.button-(dojo.isIE?1:0)),0]);
+};
+var _25=function(e){
+if(!e||_1b.type==e.type&&_1b.pageX==e.pageX&&_1b.pageY==e.pageY){
+return;
+}
+_1b={type:e.type,pageX:e.pageX,pageY:e.pageY};
+_9("doh.robot.mouseMove",[e.pageX,e.pageY,0,100,true]);
+};
+var _26=function(e){
+if(!e||_1b.type==e.type&&_1b.pageX==e.pageX&&_1b.pageY==e.pageY){
+return;
+}
+_1b={type:e.type,detail:(e.detail?(e.detail):(-e.wheelDelta/120))};
+_9("doh.robot.mouseWheel",[_1b.detail]);
+};
+var _27=function(e){
+if(!e||_1b.type==e.type&&(_1b.charCode==e.charCode&&_1b.keyCode==e.keyCode)){
+return;
+}
+_1b={type:e.type,charCode:e.charCode,keyCode:e.keyCode};
+_9("doh.robot.keyPress",[e.charOrCode==dojo.keys.SPACE?" ":e.charOrCode,0,_1a(e)]);
+};
+var _28=function(e){
+if(!e||_1b.type==e.type&&(_1b.charCode==e.charCode&&_1b.keyCode==e.keyCode)){
+return;
+}
+_1b={type:e.type,charCode:e.charCode,keyCode:e.keyCode};
+};
+dojo.connect(document,"onmousedown",_1c);
+dojo.connect(document,"onmouseup",_22);
+dojo.connect(document,"onclick",_1f);
+dojo.connect(document,"onkeypress",_27);
+dojo.connect(document,"onkeyup",_28);
+dojo.connect(document,"onmousemove",_25);
+dojo.connect(document,!dojo.isMozilla?"onmousewheel":"DOMMouseScroll",_26);
+dojo.addOnLoad(function(){
+if(dojo.window){
+dojo.connect(dojo.window,"scrollIntoView",function(_29){
+_9("doh.robot.scrollIntoView",[_16(_29)]);
+});
+}
+});
+dojo.connect(dojo,"connect",function(_2a,_2b,f){
+if(_2a&&(!f||!f._mine)){
+var _2c=null;
+if(_2b.toLowerCase()=="onmousedown"){
+_2c=dojo.hitch(this,_1c);
+}else{
+if(_2b.toLowerCase()==(!dojo.isMozilla?"onmousewheel":"dommousescroll")){
+_2c=dojo.hitch(this,_26);
+}else{
+if(_2b.toLowerCase()=="onclick"){
+_2c=dojo.hitch(this,_1f);
+}else{
+if(_2b.toLowerCase()=="onmouseup"){
+_2c=dojo.hitch(this,_22);
+}else{
+if(_2b.toLowerCase()=="onkeypress"){
+_2c=dojo.hitch(this,_27);
+}else{
+if(_2b.toLowerCase()=="onkeyup"){
+_2c=dojo.hitch(this,_28);
+}
+}
+}
+}
+}
+}
+if(_2c==null){
+return;
+}
+_2c._mine=true;
+dojo.connect(_2a,_2b,_2c);
+}
+});
+})();
+}
Index: trunk/web/dojo/dojox/grid/_RadioSelector.js
===================================================================
--- trunk/web/dojo/dojox/grid/_RadioSelector.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_RadioSelector.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._RadioSelector"]){
+dojo._hasResource["dojox.grid._RadioSelector"]=true;
+dojo.provide("dojox.grid._RadioSelector");
+dojo.require("dojox.grid._Selector");
+}
Index: trunk/web/dojo/dojox/grid/resources/nihiloGrid.css
===================================================================
--- trunk/web/dojo/dojox/grid/resources/nihiloGrid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/nihiloGrid.css	(revision 9)
@@ -0,0 +1,539 @@
+.dojoxGrid {
+	position: relative;
+	background-color: #EBEADB;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	-moz-outline-style: none;
+	outline: none;
+	overflow: hidden;
+	height: 0;
+}
+.dojoxGrid table {
+	padding: 0;
+}
+.dojoxGrid td {
+	-moz-outline: none;
+}
+.dojoxGridMasterHeader {
+	position: relative;
+}
+.dojoxGridMasterView  {
+	position: relative;
+}
+.dojoxGridMasterMessages {
+	position: relative;
+	padding: 1em;
+	text-align: center;
+	background-color: white;
+}
+.dojoxGridView {
+	position: absolute;
+	overflow: hidden;
+}
+.dojoxGridHeader {
+	position: absolute;
+	overflow: hidden;
+	cursor: default;
+}
+.dojoxGridHeader {
+	background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+	text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridSortNode{
+	white-space:nowrap;
+}
+.dojoxGridArrowButtonNode {
+	display: none;
+	padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+	display:inline;
+}
+.dojoxGridColCaption {
+	overflow:hidden;
+}
+ 
+.dojoxGridArrowButtonNode:hover {
+        cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+        cursor: default;
+}
+.dojoxGridSortUp:hover {
+        cursor: default;
+}
+.dojoxGridSortDown:hover {
+        cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+	display:inline !important;
+}
+.dojoxGridScrollbox {
+	position: relative;
+	overflow: auto;
+	background-color: white;
+	width: 100%;
+}
+.dojoxGridContent {
+	position: relative;
+	overflow: hidden;
+	 -moz-outline-style: none;
+	outline: none;
+}
+.dojoxGridRowbar { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	border-top: none;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+	border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+	background-image: none;
+	background-color: white;
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRow {
+	position: relative;
+	width: 9000em;
+}
+.dojoxGridRow {
+	
+	border: 1px solid #E8E4D8;
+	border-color: #F8F7F1;
+	
+	border-left: none;
+	border-right: none;
+	background-color: white;
+	border-top: none;
+}
+.dojoxGridRowOver {
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+	
+	
+	
+}
+.dojoxGridRowOdd {
+	background-color: #FFFDF3;
+	
+}
+.dojoxGridRowSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+	table-layout: fixed;
+	width: 0;
+	empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+	border-collapse: collapse;
+}
+.dojoxGridInvisible {
+	visibility: hidden;
+}		
+.Xdojo-ie .dojoxGridInvisible {
+	display: none;
+}		
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+	border-top-width: 0;
+	border-bottom-width: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+	height: 0;
+	overflow: hidden;
+}
+.dojoxGridCell {
+	border: 1px solid;
+	border-color: #EBEADB;
+	border-right-color: #D5CDB5;
+	padding: 3px 3px 3px 3px;
+	text-align: left;
+	overflow: hidden;
+}
+.dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+	border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+	margin: 0;
+	padding: 0;
+	border-style: none;
+	width: 100%;
+	font-size: 100%;
+	font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+	position: absolute;
+	top: -1000px;
+	height: 0;
+	width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected { 
+	border-top: 1px solid white;
+	border-bottom: 1px dashed black;
+	border-top: 0;
+	background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+	border: 0;
+	border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+	font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+	border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+	border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+	border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+	border-right: double;
+}
+.dojoxGridDndAvatarItem	td {
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding: 0pt;
+	margin: 0pt;
+}
+.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
+	border: 0;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background-color: transparent;
+	padding: 3px;
+	padding-bottom: 2px;
+	margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+	cursor: col-resize;
+	z-index:10000;
+}
+.dojoxGridColNoResize, 
+.dojoxGridColNoResize .dojoDndItemOver {
+	cursor: not-allowed !important;
+}
+.dojoxGridColResize, 
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+	cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+}
+.dojoxGridExpandoCell {
+	vertical-align: top;
+}
+.dojoxGridSummarySpan {
+	visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+	visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+	visibility: hidden !important;
+	width: 0px !important;
+}
+.nihilo .dojoxGrid {
+	background-color: #e9e9e9;
+	font-size: 0.85em; 
+}
+.nihilo .dojoxGridMasterMessages {
+	background-color: #fefefe;
+}
+.nihilo .dojoxGridHeader {
+	background-color:  #e9e9e9;
+}
+.nihilo .dojoxGridHeader .dojoxGridCell { 
+	border-width: 1px;
+	padding-bottom: 0px;
+	border-color: transparent #ACA899 #919191 transparent;
+	background: url(../../../dijit/themes/nihilo/images/titleBar.png) #e9e9e9 repeat-x top;
+	color: #000 !important;
+}
+.nihilo .dojoxGridHeader .dojoxGridCellOver {
+	background: url(../../../dijit/themes/nihilo/images/titleBarActive.png) #e9e9e9 repeat-x top;
+}
+.nihilo .dojoxGridHeader .dojoxGridCellFocus {
+	border-color: #ACA899 #919191;
+	border-style: dashed;	
+}
+.nihilo .dojoxGridArrowButtonChar {
+	float: right;
+	display: none;
+}
+.nihilo .dojoxGridArrowButtonNode {
+	display: block !important;
+	padding-left: 0px;
+	float: right;
+	background:url("../../../dijit/themes/nihilo/images/spriteArrows.png") left center no-repeat;
+	width: 11px;
+	height: 1em;
+	margin-top: 1px;
+}
+.dj_ie6 .nihilo .dojoxGridArrowButtonNode {
+	background-image:url("../../../dijit/themes/nihilo/images/spriteArrows.gif");
+	margin-left: 0px;
+}
+.nihilo .dojoxGridSortUp .dojoxGridArrowButtonNode {
+	background-position: -21px;
+}
+.dijit_a11y .nihilo .dojoxGridArrowButtonNode {
+	display: none !important;
+}
+.nihilo .dojoxGridScrollbox {
+	background-color: #fefefe;
+}
+.nihilo .dojoxGridRowbar { 
+	border: none;
+	background: url(../../../dijit/themes/nihilo/images/titleBar.png) #e9e9e9 repeat-y right;
+	border-right: 1px solid #ccc;
+	padding: 0px;
+}
+.nihilo .dojoxGridRowbarInner {
+	border: none;
+	border-bottom: 1px solid #ccc;
+}
+.nihilo .dojoxGridRowbarOver {
+	background: url(../../../dijit/themes/nihilo/images/titleBarActive.png) #e9e9e9 repeat-y right;
+}
+.nihilo .dojoxGridRowbarSelected {
+	background: url(../../../dijit/themes/nihilo/images/titleBar.png) #D9E8F9 no-repeat center;
+	border-right: 1px solid #ccc;
+}
+.nihilo .dojoxGridRow {
+	border: none;
+	background-color: white;
+}
+.nihilo .dojoxGridRowOver {
+	border-top-color: #ccc;
+	border-bottom-color: #ccc;
+}
+.nihilo .dojoxGridRowOver .dojoxGridCell {
+	background-color: #ffe284; 
+}
+.nihilo .dojoxGridRowOdd {
+	background-color: #f2f5f9;
+}
+.nihilo .dojoxGridRowSelected {
+	background-color: #aec7e3;
+}
+.dijit_a11y .nihilo .dojoxGridRowSelected { 
+	background-color: #aec7e3; 
+	border-style: solid; 
+} 
+.nihilo .dojoxGridCell {
+	border: 1px dotted #D5CDB5;
+	border-left-color: transparent;
+	border-top-color: transparent;
+}
+.dj_ff2 .nihilo .dojoxGridCell {
+	border-left-width: 0px;
+	border-top-width: 0px;
+}
+.dj_ie6 .nihilo .dojoxGridCell {
+	border: 1px solid white;
+	border-right: 1px solid #D5CDB5;
+}
+.nihilo .dojoxGridCellFocus {
+	border: 1px dashed darkblue;
+}
+.nihilo .dojoxGridCellOver {
+	border: 1px dotted #a6a6a6;
+}
+.nihilo .dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed darkblue;
+}
+.nihilo .dojoxGridRowEditing td {
+	
+	background-color: #ffe284; 
+	
+}
+.nihilo .dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.nihilo .dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.nihilo .dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.nihilo .dojoxGrid .dojoDndItemBefore {
+	border-left-color: #ffe284;
+}
+.nihilo .dojoxGrid .dojoDndItemAfter {
+	border-right-color: #ffe284;
+}
+.nihilo .dojoxGridExpando {
+	float: left;
+	height: 18px;
+	width: 18px;
+	text-align: center;
+	margin-top: -3px;
+}
+.dijitRtl .nihilo .dojoxGridExpando {
+	float: right;
+}
+.nihilo .dojoxGridExpandoCell {
+	padding-top: 5px;
+}
+.nihilo .dojoxGridExpandoNode {
+	height: 18px;
+	background-image: url('../../../dijit/themes/nihilo/images/spriteTree.gif');
+}
+.nihilo .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+	background: url('../../../dijit/themes/nihilo/images/spriteTree.gif') no-repeat -18px top;
+}
+.nihilo .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+	background: url('../../../dijit/themes/nihilo/images/treeExpand_loading.gif');
+}
+.nihilo .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+	visibility: visible !important;
+	width: 18px !important;
+}
+.nihilo .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+	background: url('../../../dijit/themes/nihilo/images/spriteTree.gif') no-repeat -36px top;
+}
+.nihilo .dojoxGridExpandoNodeInner {
+	visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+	visibility: visible;
+}
+		
+.nihilo .dojoxGridSummaryRow .dojoxGridCell {
+	border-top-color: #999;
+	border-top-style: solid;
+}
+.nihilo .dojoxGridSpacerCell,
+.nihilo .dojoxGridExpandoCell,
+.nihilo .dojoxGridSummaryRow .dojoxGridSpacerCell {
+	border-color: transparent;
+	border-right-color: #D5CDB5;
+}
+.nihilo .dojoxGridSummaryRow .dojoxGridTotalCell,
+.nihilo .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.nihilo .dojoxGridTreeModel .dojoxGridExpandoCell {
+	border-bottom-color: #D5CDB5;
+}
+.nihilo .dojoxGridSubRowAlt {
+	background-color: #F8F8F8;
+}
+.nihilo .dojoxGridRowOdd .dojoxGridSubRowAlt {
+	background-color: #EDEFF3;
+}
Index: trunk/web/dojo/dojox/grid/resources/Expando.html
===================================================================
--- trunk/web/dojo/dojox/grid/resources/Expando.html	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/Expando.html	(revision 9)
@@ -0,0 +1,5 @@
+<div class="dojoxGridExpando"
+	><div class="dojoxGridExpandoNode" dojoAttachEvent="onclick:onToggle"
+		><div class="dojoxGridExpandoNodeInner" dojoAttachPoint="expandoInner"></div
+	></div
+></div>
Index: trunk/web/dojo/dojox/grid/resources/images/header.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/header.png
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/header.png	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/header.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/header.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/td_button_down.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/td_button_down.png
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/td_button_down.png	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/td_button_down.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/td_button_down.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/tabHover_rotated.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/tabHover_rotated.png
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/tabHover_rotated.png	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/tabHover_rotated.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/tabHover_rotated.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/header_shadow.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/header_shadow.png
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/header_shadow.png	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/header_shadow.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/header_shadow.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/grid_dx_gradient.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/grid_dx_gradient.gif
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/grid_dx_gradient.gif	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/grid_dx_gradient.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/grid_dx_gradient.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/grid_sort_up.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/grid_sort_up.gif
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/grid_sort_up.gif	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/grid_sort_up.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/grid_sort_up.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/tabEnabled_rotated.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/tabEnabled_rotated.png
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/tabEnabled_rotated.png	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/tabEnabled_rotated.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/tabEnabled_rotated.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/grid_sort_down.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/grid_sort_down.gif
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/grid_sort_down.gif	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/grid_sort_down.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/grid_sort_down.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/images/row_back.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/resources/images/row_back.png
===================================================================
--- trunk/web/dojo/dojox/grid/resources/images/row_back.png	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/images/row_back.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/resources/images/row_back.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/resources/_Grid.html
===================================================================
--- trunk/web/dojo/dojox/grid/resources/_Grid.html	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/_Grid.html	(revision 9)
@@ -0,0 +1,6 @@
+<div hidefocus="hidefocus" wairole="grid" dojoAttachEvent="onmouseout:_mouseOut">
+	<div class="dojoxGridMasterHeader" dojoAttachPoint="viewsHeaderNode" wairole="presentation"></div>
+	<div class="dojoxGridMasterView" dojoAttachPoint="viewsNode" wairole="presentation"></div>
+	<div class="dojoxGridMasterMessages" style="display: none;" dojoAttachPoint="messagesNode"></div>
+	<span dojoAttachPoint="lastFocusNode" tabindex="0"></span>
+</div>
Index: trunk/web/dojo/dojox/grid/resources/soriaGrid.css
===================================================================
--- trunk/web/dojo/dojox/grid/resources/soriaGrid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/soriaGrid.css	(revision 9)
@@ -0,0 +1,540 @@
+.dojoxGrid {
+	position: relative;
+	background-color: #EBEADB;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	-moz-outline-style: none;
+	outline: none;
+	overflow: hidden;
+	height: 0;
+}
+.dojoxGrid table {
+	padding: 0;
+}
+.dojoxGrid td {
+	-moz-outline: none;
+}
+.dojoxGridMasterHeader {
+	position: relative;
+}
+.dojoxGridMasterView  {
+	position: relative;
+}
+.dojoxGridMasterMessages {
+	position: relative;
+	padding: 1em;
+	text-align: center;
+	background-color: white;
+}
+.dojoxGridView {
+	position: absolute;
+	overflow: hidden;
+}
+.dojoxGridHeader {
+	position: absolute;
+	overflow: hidden;
+	cursor: default;
+}
+.dojoxGridHeader {
+	background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+	text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridSortNode{
+	white-space:nowrap;
+}
+.dojoxGridArrowButtonNode {
+	display: none;
+	padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+	display:inline;
+}
+.dojoxGridColCaption {
+	overflow:hidden;
+}
+ 
+.dojoxGridArrowButtonNode:hover {
+        cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+        cursor: default;
+}
+.dojoxGridSortUp:hover {
+        cursor: default;
+}
+.dojoxGridSortDown:hover {
+        cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+	display:inline !important;
+}
+.dojoxGridScrollbox {
+	position: relative;
+	overflow: auto;
+	background-color: white;
+	width: 100%;
+}
+.dojoxGridContent {
+	position: relative;
+	overflow: hidden;
+	 -moz-outline-style: none;
+	outline: none;
+}
+.dojoxGridRowbar { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	border-top: none;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+	border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+	background-image: none;
+	background-color: white;
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRow {
+	position: relative;
+	width: 9000em;
+}
+.dojoxGridRow {
+	
+	border: 1px solid #E8E4D8;
+	border-color: #F8F7F1;
+	
+	border-left: none;
+	border-right: none;
+	background-color: white;
+	border-top: none;
+}
+.dojoxGridRowOver {
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+	
+	
+	
+}
+.dojoxGridRowOdd {
+	background-color: #FFFDF3;
+	
+}
+.dojoxGridRowSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+	table-layout: fixed;
+	width: 0;
+	empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+	border-collapse: collapse;
+}
+.dojoxGridInvisible {
+	visibility: hidden;
+}		
+.Xdojo-ie .dojoxGridInvisible {
+	display: none;
+}		
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+	border-top-width: 0;
+	border-bottom-width: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+	height: 0;
+	overflow: hidden;
+}
+.dojoxGridCell {
+	border: 1px solid;
+	border-color: #EBEADB;
+	border-right-color: #D5CDB5;
+	padding: 3px 3px 3px 3px;
+	text-align: left;
+	overflow: hidden;
+}
+.dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+	border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+	margin: 0;
+	padding: 0;
+	border-style: none;
+	width: 100%;
+	font-size: 100%;
+	font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+	position: absolute;
+	top: -1000px;
+	height: 0;
+	width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected { 
+	border-top: 1px solid white;
+	border-bottom: 1px dashed black;
+	border-top: 0;
+	background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+	border: 0;
+	border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+	font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+	border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+	border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+	border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+	border-right: double;
+}
+.dojoxGridDndAvatarItem	td {
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding: 0pt;
+	margin: 0pt;
+}
+.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
+	border: 0;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background-color: transparent;
+	padding: 3px;
+	padding-bottom: 2px;
+	margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+	cursor: col-resize;
+	z-index:10000;
+}
+.dojoxGridColNoResize, 
+.dojoxGridColNoResize .dojoDndItemOver {
+	cursor: not-allowed !important;
+}
+.dojoxGridColResize, 
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+	cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+}
+.dojoxGridExpandoCell {
+	vertical-align: top;
+}
+.dojoxGridSummarySpan {
+	visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+	visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+	visibility: hidden !important;
+	width: 0px !important;
+}
+.soria .dojoxGrid {
+	background-color: #e9e9e9;
+	font-size: 0.85em; 
+}
+.soria .dojoxGridMasterMessages {
+	background-color: #fefefe;
+}
+.soria .dojoxGridHeader {
+	background-color:  #e9e9e9;
+}
+.soria .dojoxGridHeader .dojoxGridCell { 
+	border-width: 1px;
+	padding-bottom: 0px;
+	border-color: transparent #ACA899 #919191 transparent;
+	background: url(../../../dijit/themes/soria/images/titleBar.png) #e9e9e9 repeat-x top;
+	color: #000 !important;
+}
+.soria .dojoxGridHeader .dojoxGridCellOver {
+	background: url(../../../dijit/themes/soria/images/titleBarActive.png) #e9e9e9 repeat-x top;
+}
+.soria .dojoxGridHeader .dojoxGridCellFocus {
+	border-color: #ACA899 #919191;
+	border-style: dashed;	
+}
+.soria .dojoxGridArrowButtonChar {
+	float: right;
+	display: none;
+}
+.soria .dojoxGridArrowButtonNode {
+	display: block !important;
+	padding-left: 0px;
+	float: right;
+	background:url("../../../dijit/themes/soria/images/spriteArrows.png") no-repeat left center;
+	margin-top: 2px;
+	width: 11px;
+	height: 1em;
+}
+.dj_ie6 .soria .dojoxGridArrowButtonNode {
+	background-image:url("../../../dijit/themes/soria/images/spriteArrows.gif");
+	margin-left: 0px;
+}
+.soria .dojoxGridSortUp .dojoxGridArrowButtonNode {
+	background-position: -21px;
+}
+.dijit_a11y .soria .dojoxGridArrowButtonNode {
+	display: none !important;
+}
+.soria .dojoxGridScrollbox {
+	background-color: #fefefe;
+}
+.soria .dojoxGridRowbar { 
+	border: none;
+	background: url(../../../dijit/themes/soria/images/titleBar.png) #e9e9e9 repeat-y right;
+	border-right: 1px solid #ccc;
+	padding: 0px;
+}
+.soria .dojoxGridRowbarInner {
+	border: none;
+	border-bottom: 1px solid #ccc;
+}
+.soria .dojoxGridRowbarOver {
+	background: url(../../../dijit/themes/soria/images/titleBarActive.png) #e9e9e9 repeat-y right;
+}
+.soria .dojoxGridRowbarSelected {
+	background: url(../../../dijit/themes/soria/images/titleBar.png) #D9E8F9 no-repeat center;
+	border-right: 1px solid #ccc;
+}
+.soria .dojoxGridRow {
+	border: none;
+	background-color: white;
+}
+.soria .dojoxGridRowOver {
+	border-top-color: #ccc;
+	border-bottom-color: #ccc;
+}
+.soria .dojoxGridRowOver .dojoxGridCell {
+	background-color: #60a1ea; 
+	color:#fff;
+}
+.soria .dojoxGridRowOdd {
+	background-color: #f2f5f9;
+}
+.soria .dojoxGridRowSelected {
+	background-color: #aec7e3;
+}
+.dijit_a11y .soria .dojoxGridRowSelected { 
+    background-color: #aec7e3;     
+    border-style: solid;     
+}   
+.soria .dojoxGridCell {
+	border: 1px dotted #D5CDB5;
+	border-left-color: transparent;
+	border-top-color: transparent;
+}
+.dj_ff2 .soria .dojoxGridCell {
+	border-left-width: 0px;
+	border-top-width: 0px;
+}
+.dj_ie6 .soria .dojoxGridCell {
+	border: 1px solid white;
+	border-right: 1px solid #D5CDB5;
+}
+.soria .dojoxGridCellFocus {
+	border: 1px dashed darkblue;
+}
+.soria .dojoxGridCellOver {
+	border: 1px dotted #a6a6a6;
+}
+.soria .dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed darkblue;
+}
+.soria .dojoxGridRowEditing td {
+	
+	background-color: #60a1ea; 
+	
+}
+.soria .dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.soria .dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.soria .dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.soria .dojoxGrid .dojoDndItemBefore {
+	border-left-color: #4B5AAA;
+}
+.soria .dojoxGrid .dojoDndItemAfter {
+	border-right-color: #4B5AAA;
+}
+.soria .dojoxGridExpando {
+	float: left;
+	height: 18px;
+	width: 18px;
+	text-align: center;
+	margin-top: -3px;
+}
+.dijitRtl .soria .dojoxGridExpando {
+	float: right;
+}
+.soria .dojoxGridExpandoCell {
+	padding-top: 5px;
+}
+.soria .dojoxGridExpandoNode {
+	height: 18px;
+	background-image: url('../../../dijit/themes/soria/images/spriteTree.gif');
+}
+.soria .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+	background: url('../../../dijit/themes/soria/images/spriteTree.gif') no-repeat -18px top;
+}
+.soria .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+	background: url('../../../dijit/themes/soria/images/treeExpand_loading.gif');	
+}
+.soria .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+	visibility: visible !important;
+	width: 18px !important;
+}
+.soria .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+	background: url('../../../dijit/themes/soria/images/spriteTree.gif') no-repeat -36px top;
+}
+.soria .dojoxGridExpandoNodeInner {
+	visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+	visibility: visible;
+}
+		
+.soria .dojoxGridSummaryRow .dojoxGridCell {
+	border-top-color: #999;
+	border-top-style: solid;
+}
+.soria .dojoxGridSpacerCell,
+.soria .dojoxGridExpandoCell,
+.soria .dojoxGridSummaryRow .dojoxGridSpacerCell {
+	border-color: transparent;
+	border-right-color: #D5CDB5;
+}
+.soria .dojoxGridSummaryRow .dojoxGridTotalCell,
+.soria .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.soria .dojoxGridTreeModel .dojoxGridExpandoCell {
+	border-bottom-color: #D5CDB5;
+}
+.soria .dojoxGridSubRowAlt {
+	background-color: #F8F8F8;
+}
+.soria .dojoxGridRowOdd .dojoxGridSubRowAlt {
+	background-color: #EDEFF3;
+}
Index: trunk/web/dojo/dojox/grid/resources/tundraGrid.css
===================================================================
--- trunk/web/dojo/dojox/grid/resources/tundraGrid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/tundraGrid.css	(revision 9)
@@ -0,0 +1,567 @@
+.dojoxGrid {
+	position: relative;
+	background-color: #EBEADB;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	-moz-outline-style: none;
+	outline: none;
+	overflow: hidden;
+	height: 0;
+}
+.dojoxGrid table {
+	padding: 0;
+}
+.dojoxGrid td {
+	-moz-outline: none;
+}
+.dojoxGridMasterHeader {
+	position: relative;
+}
+.dojoxGridMasterView  {
+	position: relative;
+}
+.dojoxGridMasterMessages {
+	position: relative;
+	padding: 1em;
+	text-align: center;
+	background-color: white;
+}
+.dojoxGridView {
+	position: absolute;
+	overflow: hidden;
+}
+.dojoxGridHeader {
+	position: absolute;
+	overflow: hidden;
+	cursor: default;
+}
+.dojoxGridHeader {
+	background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+	text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridSortNode{
+	white-space:nowrap;
+}
+.dojoxGridArrowButtonNode {
+	display: none;
+	padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+	display:inline;
+}
+.dojoxGridColCaption {
+	overflow:hidden;
+}
+ 
+.dojoxGridArrowButtonNode:hover {
+        cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+        cursor: default;
+}
+.dojoxGridSortUp:hover {
+        cursor: default;
+}
+.dojoxGridSortDown:hover {
+        cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+	display:inline !important;
+}
+.dojoxGridScrollbox {
+	position: relative;
+	overflow: auto;
+	background-color: white;
+	width: 100%;
+}
+.dojoxGridContent {
+	position: relative;
+	overflow: hidden;
+	 -moz-outline-style: none;
+	outline: none;
+}
+.dojoxGridRowbar { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	border-top: none;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+	border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+	background-image: none;
+	background-color: white;
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRow {
+	position: relative;
+	width: 9000em;
+}
+.dojoxGridRow {
+	
+	border: 1px solid #E8E4D8;
+	border-color: #F8F7F1;
+	
+	border-left: none;
+	border-right: none;
+	background-color: white;
+	border-top: none;
+}
+.dojoxGridRowOver {
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+	
+	
+	
+}
+.dojoxGridRowOdd {
+	background-color: #FFFDF3;
+	
+}
+.dojoxGridRowSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+	table-layout: fixed;
+	width: 0;
+	empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+	border-collapse: collapse;
+}
+.dojoxGridInvisible {
+	visibility: hidden;
+}		
+.Xdojo-ie .dojoxGridInvisible {
+	display: none;
+}		
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+	border-top-width: 0;
+	border-bottom-width: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+	height: 0;
+	overflow: hidden;
+}
+.dojoxGridCell {
+	border: 1px solid;
+	border-color: #EBEADB;
+	border-right-color: #D5CDB5;
+	padding: 3px 3px 3px 3px;
+	text-align: left;
+	overflow: hidden;
+}
+.dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+	border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+	margin: 0;
+	padding: 0;
+	border-style: none;
+	width: 100%;
+	font-size: 100%;
+	font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+	position: absolute;
+	top: -1000px;
+	height: 0;
+	width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected { 
+	border-top: 1px solid white;
+	border-bottom: 1px dashed black;
+	border-top: 0;
+	background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+	border: 0;
+	border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+	font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+	border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+	border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+	border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+	border-right: double;
+}
+.dojoxGridDndAvatarItem	td {
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding: 0pt;
+	margin: 0pt;
+}
+.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
+	border: 0;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background-color: transparent;
+	padding: 3px;
+	padding-bottom: 2px;
+	margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+	cursor: col-resize;
+	z-index:10000;
+}
+.dojoxGridColNoResize, 
+.dojoxGridColNoResize .dojoDndItemOver {
+	cursor: not-allowed !important;
+}
+.dojoxGridColResize, 
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+	cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+}
+.dojoxGridExpandoCell {
+	vertical-align: top;
+}
+.dojoxGridSummarySpan {
+	visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+	visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+	visibility: hidden !important;
+	width: 0px !important;
+}
+.tundra .dojoxGrid {
+	background-color: #e9e9e9;
+	font-size: 0.85em; 
+}
+.tundra .dojoxGridMasterMessages {
+	background-color: #fefefe;
+}
+.tundra .dojoxGridLoading, 
+.tundra .dojoxGridError {
+	background-position:left center;
+	background-repeat: no-repeat;
+	padding-left:25px;
+}
+.dijitRtl .tundra .dojoxGridLoading, 
+.dijitRtl .tundra .dojoxGridError,
+.dijitRtl .tundra .dojoxGridNoData {
+	background-position:right;
+	padding-right:25px;
+	padding-left:0px;
+}
+.tundra .dojoxGridLoading {
+	background-image: url('../../../dijit/themes/tundra/images/loading.gif');
+}
+.tundra .dojoxGridError {
+	background-image: url('../../../dijit/themes/tundra/images/warning.png');
+}
+.tundra .dojoxGridHeader {
+	background-color:  #e9e9e9;
+}
+.tundra .dojoxGridHeader .dojoxGridCell { 
+	border-width: 1px;
+	padding-bottom: 0px;
+	border-color: transparent #ACA899 #919191 transparent;
+	background: url(../../../dijit/themes/tundra/images/tabEnabled.png) #e9e9e9 repeat-x top;
+	color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellOver {
+	background: url(../../../dijit/themes/tundra/images/tabHover.png) #e9e9e9 repeat-x top;
+	color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellFocus {
+	border-color: #ACA899 #919191;
+	border-style: dashed;
+}
+.tundra .dojoxGridArrowButtonChar {
+	float: right;
+	display: none;
+}
+.tundra .dojoxGridArrowButtonNode {
+	display: block !important;
+	padding-left: 0px;
+	float: right;
+	background:url("../../../dijit/themes/tundra/images/spriteArrows.png") no-repeat left center;
+	width: 7px;
+	height: 1em;
+	margin: 2px 4px 0px 5px;
+}
+.dj_ie6 .tundra .dojoxGridArrowButtonNode {
+	background-image:url("../../../dijit/themes/tundra/images/spriteArrows.gif");
+	margin-left: 0px;
+}
+.tundra .dojoxGridSortUp .dojoxGridArrowButtonNode {
+	background-position: -21px;
+}
+.dijit_a11y .tundra .dojoxGridArrowButtonNode {
+	display: none !important;
+}
+.tundra .dojoxGridScrollbox {
+	background-color: #fefefe;
+}
+.tundra .dojoxGridRowbar { 
+	border: none;
+	background: url(images/tabEnabled_rotated.png) #e9e9e9 repeat-y right;
+	border-right: 1px solid #ccc;
+	padding: 0px;
+}
+.tundra .dojoxGridRowbarInner {
+	border: none;
+	border-bottom: 1px solid #ccc;
+}
+.tundra .dojoxGridRowbarOver {
+	background: url(images/tabHover_rotated.png) #e9e9e9 repeat-y right;
+}
+.tundra .dojoxGridRowbarSelected {
+	background: url(../../../dijit/themes/tundra/images/tabDisabled.png) #D8E8F9 no-repeat center;
+	border-right: 1px solid #ccc;
+}
+.tundra .dojoxGridRow {
+	border: none;
+	background-color: white;
+}
+.tundra .dojoxGridRowOver {
+	border-top-color: #ccc;
+	border-bottom-color: #ccc;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell {
+	background-color: #60a1ea; 
+	color:#fff;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijit {
+	color: #000;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijitDisabled {
+	color: gray;
+}
+.tundra .dojoxGridRowOdd {
+	background-color: #f2f5f9;
+}
+.tundra .dojoxGridRowSelected {
+	background-color: #aec7e3 !important;
+}
+.dijit_a11y .tundra .dojoxGridRowSelected { 
+    background-color: #aec7e3;     
+    border-style: solid;     
+}   
+.tundra .dojoxGridCell {
+	border: 1px dotted #D5CDB5;
+	border-left-color: transparent;
+	border-top-color: transparent;
+}
+.dj_ff2 .tundra .dojoxGridCell {
+	border-left-width: 0px;
+	border-top-width: 0px;
+}
+.dj_ie6 .tundra .dojoxGridCell {
+	border: 1px solid white;
+	border-right: 1px solid #D5CDB5;
+}
+.tundra .dojoxGridCellFocus {
+	border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridCellOver {
+	border: 1px dotted #a6a6a6;
+}
+.tundra .dojoxGridCellFocus .dojoxGridCellOver {
+	border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridRowEditing td {
+	
+	background-color: #60a1ea; 
+	
+}
+.tundra .dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.tundra .dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.tundra .dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.tundra .dojoxGrid .dojoDndItemBefore {
+	border-left-color: #3559ac;
+}
+.tundra .dojoxGrid .dojoDndItemAfter {
+	border-right-color: #3559ac;
+}
+.tundra .dojoxGridExpando {
+	float: left;
+	height: 18px;
+	width: 18px;
+	text-align: center;
+	margin-top: -3px;
+}
+.dijitRtl .tundra .dojoxGridExpando {
+	float: right;
+}
+.tundra .dojoxGridExpandoCell {
+	padding-top: 5px;
+}
+.tundra .dojoxGridExpandoNode {
+	height: 18px;
+	background-image: url('../../../dijit/themes/tundra/images/treeExpand_plus.gif');
+}
+.tundra .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+	background-image: url('../../../dijit/themes/tundra/images/treeExpand_minus.gif');		
+}
+.tundra .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+	background-image: url('../../../dijit/themes/tundra/images/treeExpand_loading.gif');		
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+	visibility: visible !important;
+	width: 18px !important;
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+	background-image: url('../../../dijit/themes/tundra/images/treeExpand_leaf.gif');
+	background-position: -3px;
+}
+.tundra .dojoxGridExpandoNodeInner {
+	visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+	visibility: visible;
+}
+		
+.tundra .dojoxGridSummaryRow .dojoxGridCell {
+	border-top-color: #999;
+	border-top-style: solid;
+}
+.tundra .dojoxGridSpacerCell,
+.tundra .dojoxGridExpandoCell,
+.tundra .dojoxGridSummaryRow .dojoxGridSpacerCell {
+	border-color: transparent;
+	border-right-color: #D5CDB5;
+}
+.tundra .dojoxGridSummaryRow .dojoxGridTotalCell,
+.tundra .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.tundra .dojoxGridTreeModel .dojoxGridExpandoCell {
+	border-bottom-color: #D5CDB5;
+}
+.tundra .dojoxGridSubRowAlt {
+	background-color: #F8F8F8;
+}
+.tundra .dojoxGridRowOdd .dojoxGridSubRowAlt {
+	background-color: #EDEFF3;
+}
Index: trunk/web/dojo/dojox/grid/resources/Grid.css
===================================================================
--- trunk/web/dojo/dojox/grid/resources/Grid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/Grid.css	(revision 9)
@@ -0,0 +1,351 @@
+.dojoxGrid {
+	position: relative;
+	background-color: #EBEADB;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	-moz-outline-style: none;
+	outline: none;
+	overflow: hidden;
+	height: 0;
+}
+.dojoxGrid table {
+	padding: 0;
+}
+.dojoxGrid td {
+	-moz-outline: none;
+}
+.dojoxGridMasterHeader {
+	position: relative;
+}
+.dojoxGridMasterView  {
+	position: relative;
+}
+.dojoxGridMasterMessages {
+	position: relative;
+	padding: 1em;
+	text-align: center;
+	background-color: white;
+}
+.dojoxGridView {
+	position: absolute;
+	overflow: hidden;
+}
+.dojoxGridHeader {
+	position: absolute;
+	overflow: hidden;
+	cursor: default;
+}
+.dojoxGridHeader {
+	background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+	text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridSortNode{
+	white-space:nowrap;
+}
+.dojoxGridArrowButtonNode {
+	display: none;
+	padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+	display:inline;
+}
+.dojoxGridColCaption {
+	overflow:hidden;
+}
+ 
+.dojoxGridArrowButtonNode:hover {
+        cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+        cursor: default;
+}
+.dojoxGridSortUp:hover {
+        cursor: default;
+}
+.dojoxGridSortDown:hover {
+        cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+	display:inline !important;
+}
+.dojoxGridScrollbox {
+	position: relative;
+	overflow: auto;
+	background-color: white;
+	width: 100%;
+}
+.dojoxGridContent {
+	position: relative;
+	overflow: hidden;
+	 -moz-outline-style: none;
+	outline: none;
+}
+.dojoxGridRowbar { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	border-top: none;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+	border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+	background-image: none;
+	background-color: white;
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRow {
+	position: relative;
+	width: 9000em;
+}
+.dojoxGridRow {
+	
+	border: 1px solid #E8E4D8;
+	border-color: #F8F7F1;
+	
+	border-left: none;
+	border-right: none;
+	background-color: white;
+	border-top: none;
+}
+.dojoxGridRowOver {
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+	
+	
+	
+}
+.dojoxGridRowOdd {
+	background-color: #FFFDF3;
+	
+}
+.dojoxGridRowSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+	table-layout: fixed;
+	width: 0;
+	empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+	border-collapse: collapse;
+}
+.dojoxGridInvisible {
+	visibility: hidden;
+}		
+.Xdojo-ie .dojoxGridInvisible {
+	display: none;
+}		
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+	border-top-width: 0;
+	border-bottom-width: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+	height: 0;
+	overflow: hidden;
+}
+.dojoxGridCell {
+	border: 1px solid;
+	border-color: #EBEADB;
+	border-right-color: #D5CDB5;
+	padding: 3px 3px 3px 3px;
+	text-align: left;
+	overflow: hidden;
+}
+.dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+	border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+	margin: 0;
+	padding: 0;
+	border-style: none;
+	width: 100%;
+	font-size: 100%;
+	font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+	position: absolute;
+	top: -1000px;
+	height: 0;
+	width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected { 
+	border-top: 1px solid white;
+	border-bottom: 1px dashed black;
+	border-top: 0;
+	background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+	border: 0;
+	border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+	font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+	border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+	border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+	border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+	border-right: double;
+}
+.dojoxGridDndAvatarItem	td {
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding: 0pt;
+	margin: 0pt;
+}
+.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
+	border: 0;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background-color: transparent;
+	padding: 3px;
+	padding-bottom: 2px;
+	margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+	cursor: col-resize;
+	z-index:10000;
+}
+.dojoxGridColNoResize, 
+.dojoxGridColNoResize .dojoDndItemOver {
+	cursor: not-allowed !important;
+}
+.dojoxGridColResize, 
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+	cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+}
+.dojoxGridExpandoCell {
+	vertical-align: top;
+}
+.dojoxGridSummarySpan {
+	visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+	visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+	visibility: hidden !important;
+	width: 0px !important;
+}
Index: trunk/web/dojo/dojox/grid/resources/Grid_rtl.css
===================================================================
--- trunk/web/dojo/dojox/grid/resources/Grid_rtl.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/Grid_rtl.css	(revision 9)
@@ -0,0 +1,12 @@
+.dj_ie .dojoxGridRtl .dojoxGridHeader table {
+	float:none;
+}
+.dojoxGridRtl .dojoxGridCell {
+	text-align:right;
+}
+.dj_ie8 .dojoxGridRtl .dojoxGridCell {
+	border-left: none;
+}
+.dojoxGridRtl .dojoxGridArrowButtonNode {
+	float:left;
+}
Index: trunk/web/dojo/dojox/grid/resources/View.html
===================================================================
--- trunk/web/dojo/dojox/grid/resources/View.html	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/View.html	(revision 9)
@@ -0,0 +1,12 @@
+<div class="dojoxGridView" wairole="presentation">
+	<div class="dojoxGridHeader" dojoAttachPoint="headerNode" wairole="presentation">
+		<div dojoAttachPoint="headerNodeContainer" style="width:9000em" wairole="presentation">
+			<div dojoAttachPoint="headerContentNode" wairole="row"></div>
+		</div>
+	</div>
+	<input type="checkbox" class="dojoxGridHiddenFocus" dojoAttachPoint="hiddenFocusNode" wairole="presentation" />
+	<input type="checkbox" class="dojoxGridHiddenFocus" wairole="presentation" />
+	<div class="dojoxGridScrollbox" dojoAttachPoint="scrollboxNode" wairole="presentation">
+		<div class="dojoxGridContent" dojoAttachPoint="contentNode" hidefocus="hidefocus" wairole="presentation"></div>
+	</div>
+</div>
Index: trunk/web/dojo/dojox/grid/resources/claroGrid.css
===================================================================
--- trunk/web/dojo/dojox/grid/resources/claroGrid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/resources/claroGrid.css	(revision 9)
@@ -0,0 +1,542 @@
+
+.dojoxGrid {
+	position: relative;
+	background-color: #EBEADB;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	-moz-outline-style: none;
+	outline: none;
+	overflow: hidden;
+	height: 0;
+}
+.dojoxGrid table {
+	padding: 0;
+}
+.dojoxGrid td {
+	-moz-outline: none;
+}
+.dojoxGridMasterHeader {
+	position: relative;
+}
+.dojoxGridMasterView  {
+	position: relative;
+}
+.dojoxGridMasterMessages {
+	position: relative;
+	padding: 1em;
+	text-align: center;
+	background-color: white;
+}
+.dojoxGridView {
+	position: absolute;
+	overflow: hidden;
+}
+.dojoxGridHeader {
+	position: absolute;
+	overflow: hidden;
+	cursor: default;
+}
+.dojoxGridHeader {
+	background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+	text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridSortNode{
+	white-space:nowrap;
+}
+.dojoxGridArrowButtonNode {
+	display: none;
+	padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+	display:inline;
+}
+.dojoxGridColCaption {
+	overflow:hidden;
+}
+ 
+.dojoxGridArrowButtonNode:hover {
+        cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+        cursor: default;
+}
+.dojoxGridSortUp:hover {
+        cursor: default;
+}
+.dojoxGridSortDown:hover {
+        cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+	display:inline !important;
+}
+.dojoxGridScrollbox {
+	position: relative;
+	overflow: auto;
+	background-color: white;
+	width: 100%;
+}
+.dojoxGridContent {
+	position: relative;
+	overflow: hidden;
+	 -moz-outline-style: none;
+	outline: none;
+}
+.dojoxGridRowbar { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	border-top: none;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+	border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+	background-image: none;
+	background-color: white;
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRow {
+	position: relative;
+	width: 9000em;
+}
+.dojoxGridRow {
+	
+	border: 1px solid #E8E4D8;
+	border-color: #F8F7F1;
+	
+	border-left: none;
+	border-right: none;
+	background-color: white;
+	border-top: none;
+}
+.dojoxGridRowOver {
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+	
+	
+	
+}
+.dojoxGridRowOdd {
+	background-color: #FFFDF3;
+	
+}
+.dojoxGridRowSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+	table-layout: fixed;
+	width: 0;
+	empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+	border-collapse: collapse;
+}
+.dojoxGridInvisible {
+	visibility: hidden;
+}		
+.Xdojo-ie .dojoxGridInvisible {
+	display: none;
+}		
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+	border-top-width: 0;
+	border-bottom-width: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+	height: 0;
+	overflow: hidden;
+}
+.dojoxGridCell {
+	border: 1px solid;
+	border-color: #EBEADB;
+	border-right-color: #D5CDB5;
+	padding: 3px 3px 3px 3px;
+	text-align: left;
+	overflow: hidden;
+}
+.dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+	border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+	margin: 0;
+	padding: 0;
+	border-style: none;
+	width: 100%;
+	font-size: 100%;
+	font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+	position: absolute;
+	top: -1000px;
+	height: 0;
+	width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected { 
+	border-top: 1px solid white;
+	border-bottom: 1px dashed black;
+	border-top: 0;
+	background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+	border: 0;
+	border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+	font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+	border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+	border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+	border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+	border-right: double;
+}
+.dojoxGridDndAvatarItem	td {
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding: 0pt;
+	margin: 0pt;
+}
+.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
+	border: 0;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background-color: transparent;
+	padding: 3px;
+	padding-bottom: 2px;
+	margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndNoCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../dojo/resources/images/dndCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+	cursor: col-resize;
+	z-index:10000;
+}
+.dojoxGridColNoResize, 
+.dojoxGridColNoResize .dojoDndItemOver {
+	cursor: not-allowed !important;
+}
+.dojoxGridColResize, 
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+	cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+}
+.dojoxGridExpandoCell {
+	vertical-align: top;
+}
+.dojoxGridSummarySpan {
+	visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+	visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+	visibility: hidden !important;
+	width: 0px !important;
+}
+.claro .dojoxGrid {
+	margin:0px;
+	padding:0px;
+	border-collapse:collapse;	
+	background-color:#fff;	
+}
+.claro .dojoxGridMasterMessages {
+	background-color: #fefefe;
+}
+.claro .dojoxGridLoading, 
+.claro .dojoxGridError {
+	background-position:left center;
+	background-repeat: no-repeat;
+	padding-left:25px;
+}
+.claro .dojoxGridLoading {
+	background-image:url("../../../dijit/themes/claro/images/loadingAnimation.gif");
+}
+.claro .dojoxGridError {
+	background-image: url('../../../dijit/icons/images/commonIconsObjActEnabled.png'); 
+	background-position: -496px;
+	width: 16px;
+	height: 16px;
+}
+.claro .dojoxGridHeader {
+	background-color:#FFF;
+}
+.claro .dojoxGridHeader .dojoxGridCell { 
+	background:url("images/header.png") #e5edf4 repeat-x top;
+	border-style:solid;
+	border-width:1px;
+	border-color:#BCBCBC #BCBCBC #BCBCBC transparent;
+}
+.dj_ie6 .claro .dojoxGridHeader .dojoxGridCell { 
+	border-color:#BCBCBC #BCBCBC #BCBCBC #e5edf4;
+}
+.claro .dojoxGridSortNode {
+	background:url("images/header_shadow.png") #e5edf4 repeat-x bottom;
+	text-decoration:none;
+	display:block;
+	padding:4px 6px 5px 6px;
+	border:1px solid #e0eefb;
+}
+.dj_ie6 .claro .dojoxGridSortNode {
+	background-image:none;
+}
+.claro .dojoxGridCellOver .dojoxGridSortNode {
+	background-color:#9dcfff;
+}
+.claro .dojoxGridArrowButtonChar {
+	display:none;
+	float:right;
+}
+.claro .dojoxGridArrowButtonNode {
+	background:transparent url("../../../dijit/themes/claro/images/spriteArrows.png") no-repeat scroll left center;
+	display:block;
+	float:right;
+	height:1em;
+	margin:2px 4px 0 5px;
+	padding-left:0;
+	width:7px;
+}
+.claro .dojoxGridSortUp .dojoxGridArrowButtonNode {
+	background-position:-21px 50%;
+}
+.dj_ie .claro .dojoxGridHeader .dojoxGridRowTable {
+	border-collapse:separate;
+}
+.claro .dojoxGridScrollbox {
+	background-color: #fefefe;
+}
+.claro .dojoxGridRowbar { 
+	background:url("images/header.png") #e5edf4 repeat-x top;
+	border:none;
+	border-right:1px solid #BCBCBC;
+}
+.claro .dojoxGridRowbarTable { 
+	background:transparent url("images/header_shadow.png") repeat-x scroll center bottom;
+}
+.dj_ie6 .claro .dojoxGridRowbar,
+.dj_ie6 .claro .dojoxGridRowbarTable { 
+	background-image:none;
+}
+.claro .dojoxGridRowbarInner {
+	border:none;
+	border-bottom:1px solid #ccc;
+}
+.claro .dojoxGridRowbarOver .dojoxGridRowbarTable {
+	background-color:#abd5fd;
+}
+.claro .dojoxGridRowBarActive .dojoxGridRowbarTable {
+	background-color:#91c9fe;
+}
+.claro .dojoxGridRowbarSelected {
+	background-color:#abd5fd;
+	border-right:1px solid #ccc;
+}
+.claro .dojoxGridRow {
+	border:none;
+	background-color:#fff;
+}
+.dj_ie .claro .dojoxGridMasterView .dojoxGridRowTable {
+	border-collapse:separate;
+}
+.claro .dojoxGridRowTable tr {
+	background:url("images/row_back.png") #fff repeat-x;
+}
+.claro .dojoxGridRowOdd .dojoxGridRowTable tr {
+	background-color:#f4f9fd;
+}
+.claro .dojoxGridRowSelected .dojoxGridRowTable tr {
+	background-color:#d3e9fb;
+}
+.claro .dojoxGridCell {
+	padding:0px;
+	border:1px solid transparent;
+}
+.dj_ie6 .claro .dojoxGridCell {
+	border-color:#fff
+}
+.dj_ie6 .claro .dojoxGridRowOdd .dojoxGridCell {
+	border-left-color:#f4f9fd;
+	border-right-color:#f4f9fd;
+}
+.dj_ie6 .claro .dojoxGridRowSelected .dojoxGridCell {
+	border-left-color:#d3e9fb;
+	border-right-color:#d3e9fb;
+}
+.claro .dojoxGridRowSelected .dojoxGridCell {
+	border-top:1px solid #BFD6EB;
+	border-bottom:1px solid #BFD6EB;
+}
+.claro .dojoxGridCellFocus {
+	border:1px dashed darkblue !important;
+}
+.claro .dojoxGridCellContent {
+	padding:4px 6px 4px 6px;
+}
+.claro .dojoxGridRowOver .dojoxGridCell {
+	background:url("images/row_back.png") #ABD6FF;
+	border-top:1px solid #769DC0;
+	border-bottom:1px solid #769DC0;
+}
+.dj_ie6 .claro .dojoxGridRowOver .dojoxGridCell,
+.dj_ie7 .claro .dojoxGridRowOver .dojoxGridCell {
+	border-left:1px solid #ABD6FF;
+	border-right:1px solid #ABD6FF;
+}
+.claro .dojoxGridRowActive .dojoxGridCell {
+	background:url("images/td_button_down.png") #7DBEFA repeat-x;
+}
+.dj_ie6 .claro .dojoxGridRowActive .dojoxGridCell,
+.dj_ie7 .claro .dojoxGridRowActive .dojoxGridCell {
+	border-left:1px solid #7DBEFA;
+	border-right:1px solid #7DBEFA;	
+}
+.claro .dojoxGridDoubleAffordance .dojoxGridRowOver .dojoxGridCellOver {
+	border:solid 1px #769dc0;
+	background-color:#93cafe;
+	border-collapse:separate;
+}
+.claro .dojoxGridDoubleAffordance .dojoxGridRowActive .dojoxGridCell{	
+	background-image:url("images/row_back.png");
+}
+.claro .dojoxGridDoubleAffordance .dojoxGridRowActive .dojoxGridCellActive {	
+	background:url("images/td_button_down.png") #93cafe repeat-x;
+}
+.dj_ie6 .claro .dojoxGridCell {
+	background-image:none !important;
+}
+.claro .dojoxGridRowEditing td {
+	
+	background-color: #60a1ea; 
+	
+}
+.claro .dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.claro .dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.claro .dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.claro .dojoxGrid .dojoDndItemBefore {
+	border-left-color: #3559ac;
+}
+.claro .dojoxGrid .dojoDndItemAfter {
+	border-right-color: #3559ac;
+}
Index: trunk/web/dojo/dojox/grid/DataGrid.js.uncompressed.js
===================================================================
--- trunk/web/dojo/dojox/grid/DataGrid.js.uncompressed.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/DataGrid.js.uncompressed.js	(revision 9)
@@ -0,0 +1,16736 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.window"] = true;
+dojo.provide("dojo.window");
+
+dojo.window.getBox = function(){
+	// summary:
+	//		Returns the dimensions and scroll position of the viewable area of a browser window
+
+	var scrollRoot = (dojo.doc.compatMode == 'BackCompat') ? dojo.body() : dojo.doc.documentElement;
+
+	// get scroll position
+	var scroll = dojo._docScroll(); // scrollRoot.scrollTop/Left should work
+	return { w: scrollRoot.clientWidth, h: scrollRoot.clientHeight, l: scroll.x, t: scroll.y };
+};
+
+dojo.window.get = function(doc){
+	// summary:
+	// 		Get window object associated with document doc
+
+	// In some IE versions (at least 6.0), document.parentWindow does not return a
+	// reference to the real window object (maybe a copy), so we must fix it as well
+	// We use IE specific execScript to attach the real window reference to
+	// document._parentWindow for later use
+	if(dojo.isIE && window !== document.parentWindow){
+		/*
+		In IE 6, only the variable "window" can be used to connect events (others
+		may be only copies).
+		*/
+		doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
+		//to prevent memory leak, unset it after use
+		//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
+		var win = doc._parentWindow;
+		doc._parentWindow = null;
+		return win;	//	Window
+	}
+
+	return doc.parentWindow || doc.defaultView;	//	Window
+};
+
+dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+	// summary:
+	//		Scroll the passed node into view, if it is not already.
+	
+	// don't rely on node.scrollIntoView working just because the function is there
+
+	try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method
+		node = dojo.byId(node);
+		var doc = node.ownerDocument || dojo.doc,
+			body = doc.body || dojo.body(),
+			html = doc.documentElement || body.parentNode,
+			isIE = dojo.isIE, isWK = dojo.isWebKit;
+		// if an untested browser, then use the native method
+		if((!(dojo.isMoz || isIE || isWK || dojo.isOpera) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){
+			node.scrollIntoView(false); // short-circuit to native if possible
+			return;
+		}
+		var backCompat = doc.compatMode == 'BackCompat',
+			clientAreaRoot = backCompat? body : html,
+			scrollRoot = isWK ? body : clientAreaRoot,
+			rootWidth = clientAreaRoot.clientWidth,
+			rootHeight = clientAreaRoot.clientHeight,
+			rtl = !dojo._isBodyLtr(),
+			nodePos = pos || dojo.position(node),
+			el = node.parentNode,
+			isFixed = function(el){
+				return ((isIE <= 6 || (isIE && backCompat))? false : (dojo.style(el, 'position').toLowerCase() == "fixed"));
+			};
+		if(isFixed(node)){ return; } // nothing to do
+
+		while(el){
+			if(el == body){ el = scrollRoot; }
+			var elPos = dojo.position(el),
+				fixedPos = isFixed(el);
+	
+			if(el == scrollRoot){
+				elPos.w = rootWidth; elPos.h = rootHeight;
+				if(scrollRoot == html && isIE && rtl){ elPos.x += scrollRoot.offsetWidth-elPos.w; } // IE workaround where scrollbar causes negative x
+				if(elPos.x < 0 || !isIE){ elPos.x = 0; } // IE can have values > 0
+				if(elPos.y < 0 || !isIE){ elPos.y = 0; }
+			}else{
+				var pb = dojo._getPadBorderExtents(el);
+				elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t;
+			}
+	
+			if(el != scrollRoot){ // body, html sizes already have the scrollbar removed
+				var clientSize = el.clientWidth,
+					scrollBarSize = elPos.w - clientSize;
+				if(clientSize > 0 && scrollBarSize > 0){
+					elPos.w = clientSize;
+					if(isIE && rtl){ elPos.x += scrollBarSize; }
+				}
+				clientSize = el.clientHeight;
+				scrollBarSize = elPos.h - clientSize;
+				if(clientSize > 0 && scrollBarSize > 0){
+					elPos.h = clientSize;
+				}
+			}
+			if(fixedPos){ // bounded by viewport, not parents
+				if(elPos.y < 0){
+					elPos.h += elPos.y; elPos.y = 0;
+				}
+				if(elPos.x < 0){
+					elPos.w += elPos.x; elPos.x = 0;
+				}
+				if(elPos.y + elPos.h > rootHeight){
+					elPos.h = rootHeight - elPos.y;
+				}
+				if(elPos.x + elPos.w > rootWidth){
+					elPos.w = rootWidth - elPos.x;
+				}
+			}
+			// calculate overflow in all 4 directions
+			var l = nodePos.x - elPos.x, // beyond left: < 0
+				t = nodePos.y - Math.max(elPos.y, 0), // beyond top: < 0
+				r = l + nodePos.w - elPos.w, // beyond right: > 0
+				bot = t + nodePos.h - elPos.h; // beyond bottom: > 0
+			if(r * l > 0){
+				var s = Math[l < 0? "max" : "min"](l, r);
+				nodePos.x += el.scrollLeft;
+				el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s;
+				nodePos.x -= el.scrollLeft;
+			}
+			if(bot * t > 0){
+				nodePos.y += el.scrollTop;
+				el.scrollTop += Math[t < 0? "max" : "min"](t, bot);
+				nodePos.y -= el.scrollTop;
+			}
+			el = (el != scrollRoot) && !fixedPos && el.parentNode;
+		}	
+	}catch(error){
+		console.error('scrollIntoView: ' + error);
+		node.scrollIntoView(false);
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.manager"] = true;
+dojo.provide("dijit._base.manager");
+
+dojo.declare("dijit.WidgetSet", null, {
+	// summary:
+	//		A set of widgets indexed by id. A default instance of this class is
+	//		available as `dijit.registry`
+	//
+	// example:
+	//		Create a small list of widgets:
+	//		|	var ws = new dijit.WidgetSet();
+	//		|	ws.add(dijit.byId("one"));
+	//		| 	ws.add(dijit.byId("two"));
+	//		|	// destroy both:
+	//		|	ws.forEach(function(w){ w.destroy(); });
+	//
+	// example:
+	//		Using dijit.registry:
+	//		|	dijit.registry.forEach(function(w){ /* do something */ });
+
+	constructor: function(){
+		this._hash = {};
+		this.length = 0;
+	},
+
+	add: function(/*dijit._Widget*/ widget){
+		// summary:
+		//		Add a widget to this list. If a duplicate ID is detected, a error is thrown.
+		//
+		// widget: dijit._Widget
+		//		Any dijit._Widget subclass.
+		if(this._hash[widget.id]){
+			throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
+		}
+		this._hash[widget.id] = widget;
+		this.length++;
+	},
+
+	remove: function(/*String*/ id){
+		// summary:
+		//		Remove a widget from this WidgetSet. Does not destroy the widget; simply
+		//		removes the reference.
+		if(this._hash[id]){
+			delete this._hash[id];
+			this.length--;
+		}
+	},
+
+	forEach: function(/*Function*/ func, /* Object? */thisObj){
+		// summary:
+		//		Call specified function for each widget in this set.
+		//
+		// func:
+		//		A callback function to run for each item. Is passed the widget, the index
+		//		in the iteration, and the full hash, similar to `dojo.forEach`.
+		//
+		// thisObj:
+		//		An optional scope parameter
+		//
+		// example:
+		//		Using the default `dijit.registry` instance:
+		//		|	dijit.registry.forEach(function(widget){
+		//		|		console.log(widget.declaredClass);
+		//		|	});
+		//
+		// returns:
+		//		Returns self, in order to allow for further chaining.
+
+		thisObj = thisObj || dojo.global;
+		var i = 0, id;
+		for(id in this._hash){
+			func.call(thisObj, this._hash[id], i++, this._hash);
+		}
+		return this;	// dijit.WidgetSet
+	},
+
+	filter: function(/*Function*/ filter, /* Object? */thisObj){
+		// summary:
+		//		Filter down this WidgetSet to a smaller new WidgetSet
+		//		Works the same as `dojo.filter` and `dojo.NodeList.filter`
+		//
+		// filter:
+		//		Callback function to test truthiness. Is passed the widget
+		//		reference and the pseudo-index in the object.
+		//
+		// thisObj: Object?
+		//		Option scope to use for the filter function.
+		//
+		// example:
+		//		Arbitrary: select the odd widgets in this list
+		//		|	dijit.registry.filter(function(w, i){
+		//		|		return i % 2 == 0;
+		//		|	}).forEach(function(w){ /* odd ones */ });
+
+		thisObj = thisObj || dojo.global;
+		var res = new dijit.WidgetSet(), i = 0, id;
+		for(id in this._hash){
+			var w = this._hash[id];
+			if(filter.call(thisObj, w, i++, this._hash)){
+				res.add(w);
+			}
+		}
+		return res; // dijit.WidgetSet
+	},
+
+	byId: function(/*String*/ id){
+		// summary:
+		//		Find a widget in this list by it's id.
+		// example:
+		//		Test if an id is in a particular WidgetSet
+		//		| var ws = new dijit.WidgetSet();
+		//		| ws.add(dijit.byId("bar"));
+		//		| var t = ws.byId("bar") // returns a widget
+		//		| var x = ws.byId("foo"); // returns undefined
+
+		return this._hash[id];	// dijit._Widget
+	},
+
+	byClass: function(/*String*/ cls){
+		// summary:
+		//		Reduce this widgetset to a new WidgetSet of a particular `declaredClass`
+		//
+		// cls: String
+		//		The Class to scan for. Full dot-notated string.
+		//
+		// example:
+		//		Find all `dijit.TitlePane`s in a page:
+		//		|	dijit.registry.byClass("dijit.TitlePane").forEach(function(tp){ tp.close(); });
+
+		var res = new dijit.WidgetSet(), id, widget;
+		for(id in this._hash){
+			widget = this._hash[id];
+			if(widget.declaredClass == cls){
+				res.add(widget);
+			}
+		 }
+		 return res; // dijit.WidgetSet
+},
+
+	toArray: function(){
+		// summary:
+		//		Convert this WidgetSet into a true Array
+		//
+		// example:
+		//		Work with the widget .domNodes in a real Array
+		//		|	dojo.map(dijit.registry.toArray(), function(w){ return w.domNode; });
+
+		var ar = [];
+		for(var id in this._hash){
+			ar.push(this._hash[id]);
+		}
+		return ar;	// dijit._Widget[]
+},
+
+	map: function(/* Function */func, /* Object? */thisObj){
+		// summary:
+		//		Create a new Array from this WidgetSet, following the same rules as `dojo.map`
+		// example:
+		//		|	var nodes = dijit.registry.map(function(w){ return w.domNode; });
+		//
+		// returns:
+		//		A new array of the returned values.
+		return dojo.map(this.toArray(), func, thisObj); // Array
+	},
+
+	every: function(func, thisObj){
+		// summary:
+		// 		A synthetic clone of `dojo.every` acting explicitly on this WidgetSet
+		//
+		// func: Function
+		//		A callback function run for every widget in this list. Exits loop
+		//		when the first false return is encountered.
+		//
+		// thisObj: Object?
+		//		Optional scope parameter to use for the callback
+
+		thisObj = thisObj || dojo.global;
+		var x = 0, i;
+		for(i in this._hash){
+			if(!func.call(thisObj, this._hash[i], x++, this._hash)){
+				return false; // Boolean
+			}
+		}
+		return true; // Boolean
+	},
+
+	some: function(func, thisObj){
+		// summary:
+		// 		A synthetic clone of `dojo.some` acting explictly on this WidgetSet
+		//
+		// func: Function
+		//		A callback function run for every widget in this list. Exits loop
+		//		when the first true return is encountered.
+		//
+		// thisObj: Object?
+		//		Optional scope parameter to use for the callback
+
+		thisObj = thisObj || dojo.global;
+		var x = 0, i;
+		for(i in this._hash){
+			if(func.call(thisObj, this._hash[i], x++, this._hash)){
+				return true; // Boolean
+			}
+		}
+		return false; // Boolean
+	}
+
+});
+
+(function(){
+
+	/*=====
+	dijit.registry = {
+		// summary:
+		//		A list of widgets on a page.
+		// description:
+		//		Is an instance of `dijit.WidgetSet`
+	};
+	=====*/
+	dijit.registry = new dijit.WidgetSet();
+
+	var hash = dijit.registry._hash,
+		attr = dojo.attr,
+		hasAttr = dojo.hasAttr,
+		style = dojo.style;
+
+	dijit.byId = function(/*String|dijit._Widget*/ id){
+		// summary:
+		//		Returns a widget by it's id, or if passed a widget, no-op (like dojo.byId())
+		return typeof id == "string" ? hash[id] : id; // dijit._Widget
+	};
+
+	var _widgetTypeCtr = {};
+	dijit.getUniqueId = function(/*String*/widgetType){
+		// summary:
+		//		Generates a unique id for a given widgetType
+	
+		var id;
+		do{
+			id = widgetType + "_" +
+				(widgetType in _widgetTypeCtr ?
+					++_widgetTypeCtr[widgetType] : _widgetTypeCtr[widgetType] = 0);
+		}while(hash[id]);
+		return dijit._scopeName == "dijit" ? id : dijit._scopeName + "_" + id; // String
+	};
+	
+	dijit.findWidgets = function(/*DomNode*/ root){
+		// summary:
+		//		Search subtree under root returning widgets found.
+		//		Doesn't search for nested widgets (ie, widgets inside other widgets).
+	
+		var outAry = [];
+	
+		function getChildrenHelper(root){
+			for(var node = root.firstChild; node; node = node.nextSibling){
+				if(node.nodeType == 1){
+					var widgetId = node.getAttribute("widgetId");
+					if(widgetId){
+						outAry.push(hash[widgetId]);
+					}else{
+						getChildrenHelper(node);
+					}
+				}
+			}
+		}
+	
+		getChildrenHelper(root);
+		return outAry;
+	};
+	
+	dijit._destroyAll = function(){
+		// summary:
+		//		Code to destroy all widgets and do other cleanup on page unload
+	
+		// Clean up focus manager lingering references to widgets and nodes
+		dijit._curFocus = null;
+		dijit._prevFocus = null;
+		dijit._activeStack = [];
+	
+		// Destroy all the widgets, top down
+		dojo.forEach(dijit.findWidgets(dojo.body()), function(widget){
+			// Avoid double destroy of widgets like Menu that are attached to <body>
+			// even though they are logically children of other widgets.
+			if(!widget._destroyed){
+				if(widget.destroyRecursive){
+					widget.destroyRecursive();
+				}else if(widget.destroy){
+					widget.destroy();
+				}
+			}
+		});
+	};
+	
+	if(dojo.isIE){
+		// Only run _destroyAll() for IE because we think it's only necessary in that case,
+		// and because it causes problems on FF.  See bug #3531 for details.
+		dojo.addOnWindowUnload(function(){
+			dijit._destroyAll();
+		});
+	}
+	
+	dijit.byNode = function(/*DOMNode*/ node){
+		// summary:
+		//		Returns the widget corresponding to the given DOMNode
+		return hash[node.getAttribute("widgetId")]; // dijit._Widget
+	};
+	
+	dijit.getEnclosingWidget = function(/*DOMNode*/ node){
+		// summary:
+		//		Returns the widget whose DOM tree contains the specified DOMNode, or null if
+		//		the node is not contained within the DOM tree of any widget
+		while(node){
+			var id = node.getAttribute && node.getAttribute("widgetId");
+			if(id){
+				return hash[id];
+			}
+			node = node.parentNode;
+		}
+		return null;
+	};
+
+	var shown = (dijit._isElementShown = function(/*Element*/ elem){
+		var s = style(elem);
+		return (s.visibility != "hidden")
+			&& (s.visibility != "collapsed")
+			&& (s.display != "none")
+			&& (attr(elem, "type") != "hidden");
+	});
+	
+	dijit.hasDefaultTabStop = function(/*Element*/ elem){
+		// summary:
+		//		Tests if element is tab-navigable even without an explicit tabIndex setting
+	
+		// No explicit tabIndex setting, need to investigate node type
+		switch(elem.nodeName.toLowerCase()){
+			case "a":
+				// An <a> w/out a tabindex is only navigable if it has an href
+				return hasAttr(elem, "href");
+			case "area":
+			case "button":
+			case "input":
+			case "object":
+			case "select":
+			case "textarea":
+				// These are navigable by default
+				return true;
+			case "iframe":
+				// If it's an editor <iframe> then it's tab navigable.
+				//TODO: feature detect "designMode" in elem.contentDocument?
+				if(dojo.isMoz){
+					try{
+						return elem.contentDocument.designMode == "on";
+					}catch(err){
+						return false;
+					}
+				}else if(dojo.isWebKit){
+					var doc = elem.contentDocument,
+						body = doc && doc.body;
+					return body && body.contentEditable == 'true';
+				}else{
+					// contentWindow.document isn't accessible within IE7/8
+					// if the iframe.src points to a foreign url and this
+					// page contains an element, that could get focus
+					try{
+						doc = elem.contentWindow.document;
+						body = doc && doc.body;
+						return body && body.firstChild && body.firstChild.contentEditable == 'true';
+					}catch(e){
+						return false;
+					}
+				}
+			default:
+				return elem.contentEditable == 'true';
+		}
+	};
+	
+	var isTabNavigable = (dijit.isTabNavigable = function(/*Element*/ elem){
+		// summary:
+		//		Tests if an element is tab-navigable
+	
+		// TODO: convert (and rename method) to return effective tabIndex; will save time in _getTabNavigable()
+		if(attr(elem, "disabled")){
+			return false;
+		}else if(hasAttr(elem, "tabIndex")){
+			// Explicit tab index setting
+			return attr(elem, "tabIndex") >= 0; // boolean
+		}else{
+			// No explicit tabIndex setting, so depends on node type
+			return dijit.hasDefaultTabStop(elem);
+		}
+	});
+
+	dijit._getTabNavigable = function(/*DOMNode*/ root){
+		// summary:
+		//		Finds descendants of the specified root node.
+		//
+		// description:
+		//		Finds the following descendants of the specified root node:
+		//		* the first tab-navigable element in document order
+		//		  without a tabIndex or with tabIndex="0"
+		//		* the last tab-navigable element in document order
+		//		  without a tabIndex or with tabIndex="0"
+		//		* the first element in document order with the lowest
+		//		  positive tabIndex value
+		//		* the last element in document order with the highest
+		//		  positive tabIndex value
+		var first, last, lowest, lowestTabindex, highest, highestTabindex;
+		var walkTree = function(/*DOMNode*/parent){
+			dojo.query("> *", parent).forEach(function(child){
+				// Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE,
+				// since show() invokes getAttribute("type"), which crash on VML nodes in IE.
+				if((dojo.isIE && child.scopeName!=="HTML") || !shown(child)){
+					return;
+				}
+
+				if(isTabNavigable(child)){
+					var tabindex = attr(child, "tabIndex");
+					if(!hasAttr(child, "tabIndex") || tabindex == 0){
+						if(!first){ first = child; }
+						last = child;
+					}else if(tabindex > 0){
+						if(!lowest || tabindex < lowestTabindex){
+							lowestTabindex = tabindex;
+							lowest = child;
+						}
+						if(!highest || tabindex >= highestTabindex){
+							highestTabindex = tabindex;
+							highest = child;
+						}
+					}
+				}
+				if(child.nodeName.toUpperCase() != 'SELECT'){
+					walkTree(child);
+				}
+			});
+		};
+		if(shown(root)){ walkTree(root) }
+		return { first: first, last: last, lowest: lowest, highest: highest };
+	}
+	dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/ root){
+		// summary:
+		//		Finds the descendant of the specified root node
+		//		that is first in the tabbing order
+		var elems = dijit._getTabNavigable(dojo.byId(root));
+		return elems.lowest ? elems.lowest : elems.first; // DomNode
+	};
+	
+	dijit.getLastInTabbingOrder = function(/*String|DOMNode*/ root){
+		// summary:
+		//		Finds the descendant of the specified root node
+		//		that is last in the tabbing order
+		var elems = dijit._getTabNavigable(dojo.byId(root));
+		return elems.last ? elems.last : elems.highest; // DomNode
+	};
+	
+	/*=====
+	dojo.mixin(dijit, {
+		// defaultDuration: Integer
+		//		The default animation speed (in ms) to use for all Dijit
+		//		transitional animations, unless otherwise specified
+		//		on a per-instance basis. Defaults to 200, overrided by
+		//		`djConfig.defaultDuration`
+		defaultDuration: 200
+	});
+	=====*/
+	
+	dijit.defaultDuration = dojo.config["defaultDuration"] || 200;
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.focus"] = true;
+dojo.provide("dijit._base.focus");
+
+
+	// for dijit.isTabNavigable()
+
+// summary:
+//		These functions are used to query or set the focus and selection.
+//
+//		Also, they trace when widgets become activated/deactivated,
+//		so that the widget can fire _onFocus/_onBlur events.
+//		"Active" here means something similar to "focused", but
+//		"focus" isn't quite the right word because we keep track of
+//		a whole stack of "active" widgets.  Example: ComboButton --> Menu -->
+//		MenuItem.  The onBlur event for ComboButton doesn't fire due to focusing
+//		on the Menu or a MenuItem, since they are considered part of the
+//		ComboButton widget.  It only happens when focus is shifted
+//		somewhere completely different.
+
+dojo.mixin(dijit, {
+	// _curFocus: DomNode
+	//		Currently focused item on screen
+	_curFocus: null,
+
+	// _prevFocus: DomNode
+	//		Previously focused item on screen
+	_prevFocus: null,
+
+	isCollapsed: function(){
+		// summary:
+		//		Returns true if there is no text selected
+		return dijit.getBookmark().isCollapsed;
+	},
+
+	getBookmark: function(){
+		// summary:
+		//		Retrieves a bookmark that can be used with moveToBookmark to return to the same range
+		var bm, rg, tg, sel = dojo.doc.selection, cf = dijit._curFocus;
+
+		if(dojo.global.getSelection){
+			//W3C Range API for selections.
+			sel = dojo.global.getSelection();
+			if(sel){
+				if(sel.isCollapsed){
+					tg = cf? cf.tagName : "";
+					if(tg){
+						//Create a fake rangelike item to restore selections.
+						tg = tg.toLowerCase();
+						if(tg == "textarea" ||
+								(tg == "input" && (!cf.type || cf.type.toLowerCase() == "text"))){
+							sel = {
+								start: cf.selectionStart,
+								end: cf.selectionEnd,
+								node: cf,
+								pRange: true
+							};
+							return {isCollapsed: (sel.end <= sel.start), mark: sel}; //Object.
+						}
+					}
+					bm = {isCollapsed:true};
+				}else{
+					rg = sel.getRangeAt(0);
+					bm = {isCollapsed: false, mark: rg.cloneRange()};
+				}
+			}
+		}else if(sel){
+			// If the current focus was a input of some sort and no selection, don't bother saving
+			// a native bookmark.  This is because it causes issues with dialog/page selection restore.
+			// So, we need to create psuedo bookmarks to work with.
+			tg = cf ? cf.tagName : "";
+			tg = tg.toLowerCase();
+			if(cf && tg && (tg == "button" || tg == "textarea" || tg == "input")){
+				if(sel.type && sel.type.toLowerCase() == "none"){
+					return {
+						isCollapsed: true,
+						mark: null
+					}
+				}else{
+					rg = sel.createRange();
+					return {
+						isCollapsed: rg.text && rg.text.length?false:true,
+						mark: {
+							range: rg,
+							pRange: true
+						}
+					};
+				}
+			}
+			bm = {};
+
+			//'IE' way for selections.
+			try{
+				// createRange() throws exception when dojo in iframe
+				//and nothing selected, see #9632
+				rg = sel.createRange();
+				bm.isCollapsed = !(sel.type == 'Text' ? rg.htmlText.length : rg.length);
+			}catch(e){
+				bm.isCollapsed = true;
+				return bm;
+			}
+			if(sel.type.toUpperCase() == 'CONTROL'){
+				if(rg.length){
+					bm.mark=[];
+					var i=0,len=rg.length;
+					while(i<len){
+						bm.mark.push(rg.item(i++));
+					}
+				}else{
+					bm.isCollapsed = true;
+					bm.mark = null;
+				}
+			}else{
+				bm.mark = rg.getBookmark();
+			}
+		}else{
+			console.warn("No idea how to store the current selection for this browser!");
+		}
+		return bm; // Object
+	},
+
+	moveToBookmark: function(/*Object*/bookmark){
+		// summary:
+		//		Moves current selection to a bookmark
+		// bookmark:
+		//		This should be a returned object from dijit.getBookmark()
+
+		var _doc = dojo.doc,
+			mark = bookmark.mark;
+		if(mark){
+			if(dojo.global.getSelection){
+				//W3C Rangi API (FF, WebKit, Opera, etc)
+				var sel = dojo.global.getSelection();
+				if(sel && sel.removeAllRanges){
+					if(mark.pRange){
+						var r = mark;
+						var n = r.node;
+						n.selectionStart = r.start;
+						n.selectionEnd = r.end;
+					}else{
+						sel.removeAllRanges();
+						sel.addRange(mark);
+					}
+				}else{
+					console.warn("No idea how to restore selection for this browser!");
+				}
+			}else if(_doc.selection && mark){
+				//'IE' way.
+				var rg;
+				if(mark.pRange){
+					rg = mark.range;
+				}else if(dojo.isArray(mark)){
+					rg = _doc.body.createControlRange();
+					//rg.addElement does not have call/apply method, so can not call it directly
+					//rg is not available in "range.addElement(item)", so can't use that either
+					dojo.forEach(mark, function(n){
+						rg.addElement(n);
+					});
+				}else{
+					rg = _doc.body.createTextRange();
+					rg.moveToBookmark(mark);
+				}
+				rg.select();
+			}
+		}
+	},
+
+	getFocus: function(/*Widget?*/ menu, /*Window?*/ openedForWindow){
+		// summary:
+		//		Called as getFocus(), this returns an Object showing the current focus
+		//		and selected text.
+		//
+		//		Called as getFocus(widget), where widget is a (widget representing) a button
+		//		that was just pressed, it returns where focus was before that button
+		//		was pressed.   (Pressing the button may have either shifted focus to the button,
+		//		or removed focus altogether.)   In this case the selected text is not returned,
+		//		since it can't be accurately determined.
+		//
+		// menu: dijit._Widget or {domNode: DomNode} structure
+		//		The button that was just pressed.  If focus has disappeared or moved
+		//		to this button, returns the previous focus.  In this case the bookmark
+		//		information is already lost, and null is returned.
+		//
+		// openedForWindow:
+		//		iframe in which menu was opened
+		//
+		// returns:
+		//		A handle to restore focus/selection, to be passed to `dijit.focus`
+		var node = !dijit._curFocus || (menu && dojo.isDescendant(dijit._curFocus, menu.domNode)) ? dijit._prevFocus : dijit._curFocus;
+		return {
+			node: node,
+			bookmark: (node == dijit._curFocus) && dojo.withGlobal(openedForWindow || dojo.global, dijit.getBookmark),
+			openedForWindow: openedForWindow
+		}; // Object
+	},
+
+	focus: function(/*Object || DomNode */ handle){
+		// summary:
+		//		Sets the focused node and the selection according to argument.
+		//		To set focus to an iframe's content, pass in the iframe itself.
+		// handle:
+		//		object returned by get(), or a DomNode
+
+		if(!handle){ return; }
+
+		var node = "node" in handle ? handle.node : handle,		// because handle is either DomNode or a composite object
+			bookmark = handle.bookmark,
+			openedForWindow = handle.openedForWindow,
+			collapsed = bookmark ? bookmark.isCollapsed : false;
+
+		// Set the focus
+		// Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
+		// but we need to set focus to iframe.contentWindow
+		if(node){
+			var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node;
+			if(focusNode && focusNode.focus){
+				try{
+					// Gecko throws sometimes if setting focus is impossible,
+					// node not displayed or something like that
+					focusNode.focus();
+				}catch(e){/*quiet*/}
+			}
+			dijit._onFocusNode(node);
+		}
+
+		// set the selection
+		// do not need to restore if current selection is not empty
+		// (use keyboard to select a menu item) or if previous selection was collapsed
+		// as it may cause focus shift (Esp in IE).
+		if(bookmark && dojo.withGlobal(openedForWindow || dojo.global, dijit.isCollapsed) && !collapsed){
+			if(openedForWindow){
+				openedForWindow.focus();
+			}
+			try{
+				dojo.withGlobal(openedForWindow || dojo.global, dijit.moveToBookmark, null, [bookmark]);
+			}catch(e2){
+				/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
+			}
+		}
+	},
+
+	// _activeStack: dijit._Widget[]
+	//		List of currently active widgets (focused widget and it's ancestors)
+	_activeStack: [],
+
+	registerIframe: function(/*DomNode*/ iframe){
+		// summary:
+		//		Registers listeners on the specified iframe so that any click
+		//		or focus event on that iframe (or anything in it) is reported
+		//		as a focus/click event on the <iframe> itself.
+		// description:
+		//		Currently only used by editor.
+		// returns:
+		//		Handle to pass to unregisterIframe()
+		return dijit.registerWin(iframe.contentWindow, iframe);
+	},
+
+	unregisterIframe: function(/*Object*/ handle){
+		// summary:
+		//		Unregisters listeners on the specified iframe created by registerIframe.
+		//		After calling be sure to delete or null out the handle itself.
+		// handle:
+		//		Handle returned by registerIframe()
+
+		dijit.unregisterWin(handle);
+	},
+
+	registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){
+		// summary:
+		//		Registers listeners on the specified window (either the main
+		//		window or an iframe's window) to detect when the user has clicked somewhere
+		//		or focused somewhere.
+		// description:
+		//		Users should call registerIframe() instead of this method.
+		// targetWindow:
+		//		If specified this is the window associated with the iframe,
+		//		i.e. iframe.contentWindow.
+		// effectiveNode:
+		//		If specified, report any focus events inside targetWindow as
+		//		an event on effectiveNode, rather than on evt.target.
+		// returns:
+		//		Handle to pass to unregisterWin()
+
+		// TODO: make this function private in 2.0; Editor/users should call registerIframe(),
+
+		var mousedownListener = function(evt){
+			dijit._justMouseDowned = true;
+			setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
+			
+			// workaround weird IE bug where the click is on an orphaned node
+			// (first time clicking a Select/DropDownButton inside a TooltipDialog)
+			if(dojo.isIE && evt && evt.srcElement && evt.srcElement.parentNode == null){
+				return;
+			}
+
+			dijit._onTouchNode(effectiveNode || evt.target || evt.srcElement, "mouse");
+		};
+		//dojo.connect(targetWindow, "onscroll", ???);
+
+		// Listen for blur and focus events on targetWindow's document.
+		// IIRC, I'm using attachEvent() rather than dojo.connect() because focus/blur events don't bubble
+		// through dojo.connect(), and also maybe to catch the focus events early, before onfocus handlers
+		// fire.
+		// Connect to <html> (rather than document) on IE to avoid memory leaks, but document on other browsers because
+		// (at least for FF) the focus event doesn't fire on <html> or <body>.
+		var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document;
+		if(doc){
+			if(dojo.isIE){
+				doc.attachEvent('onmousedown', mousedownListener);
+				var activateListener = function(evt){
+					// IE reports that nodes like <body> have gotten focus, even though they have tabIndex=-1,
+					// Should consider those more like a mouse-click than a focus....
+					if(evt.srcElement.tagName.toLowerCase() != "#document" &&
+						dijit.isTabNavigable(evt.srcElement)){
+						dijit._onFocusNode(effectiveNode || evt.srcElement);
+					}else{
+						dijit._onTouchNode(effectiveNode || evt.srcElement);
+					}
+				};
+				doc.attachEvent('onactivate', activateListener);
+				var deactivateListener =  function(evt){
+					dijit._onBlurNode(effectiveNode || evt.srcElement);
+				};
+				doc.attachEvent('ondeactivate', deactivateListener);
+
+				return function(){
+					doc.detachEvent('onmousedown', mousedownListener);
+					doc.detachEvent('onactivate', activateListener);
+					doc.detachEvent('ondeactivate', deactivateListener);
+					doc = null;	// prevent memory leak (apparent circular reference via closure)
+				};
+			}else{
+				doc.addEventListener('mousedown', mousedownListener, true);
+				var focusListener = function(evt){
+					dijit._onFocusNode(effectiveNode || evt.target);
+				};
+				doc.addEventListener('focus', focusListener, true);
+				var blurListener = function(evt){
+					dijit._onBlurNode(effectiveNode || evt.target);
+				};
+				doc.addEventListener('blur', blurListener, true);
+
+				return function(){
+					doc.removeEventListener('mousedown', mousedownListener, true);
+					doc.removeEventListener('focus', focusListener, true);
+					doc.removeEventListener('blur', blurListener, true);
+					doc = null;	// prevent memory leak (apparent circular reference via closure)
+				};
+			}
+		}
+	},
+
+	unregisterWin: function(/*Handle*/ handle){
+		// summary:
+		//		Unregisters listeners on the specified window (either the main
+		//		window or an iframe's window) according to handle returned from registerWin().
+		//		After calling be sure to delete or null out the handle itself.
+
+		// Currently our handle is actually a function
+		handle && handle();
+	},
+
+	_onBlurNode: function(/*DomNode*/ node){
+		// summary:
+		// 		Called when focus leaves a node.
+		//		Usually ignored, _unless_ it *isn't* follwed by touching another node,
+		//		which indicates that we tabbed off the last field on the page,
+		//		in which case every widget is marked inactive
+		dijit._prevFocus = dijit._curFocus;
+		dijit._curFocus = null;
+
+		if(dijit._justMouseDowned){
+			// the mouse down caused a new widget to be marked as active; this blur event
+			// is coming late, so ignore it.
+			return;
+		}
+
+		// if the blur event isn't followed by a focus event then mark all widgets as inactive.
+		if(dijit._clearActiveWidgetsTimer){
+			clearTimeout(dijit._clearActiveWidgetsTimer);
+		}
+		dijit._clearActiveWidgetsTimer = setTimeout(function(){
+			delete dijit._clearActiveWidgetsTimer;
+			dijit._setStack([]);
+			dijit._prevFocus = null;
+		}, 100);
+	},
+
+	_onTouchNode: function(/*DomNode*/ node, /*String*/ by){
+		// summary:
+		//		Callback when node is focused or mouse-downed
+		// node:
+		//		The node that was touched.
+		// by:
+		//		"mouse" if the focus/touch was caused by a mouse down event
+
+		// ignore the recent blurNode event
+		if(dijit._clearActiveWidgetsTimer){
+			clearTimeout(dijit._clearActiveWidgetsTimer);
+			delete dijit._clearActiveWidgetsTimer;
+		}
+
+		// compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
+		var newStack=[];
+		try{
+			while(node){
+				var popupParent = dojo.attr(node, "dijitPopupParent");
+				if(popupParent){
+					node=dijit.byId(popupParent).domNode;
+				}else if(node.tagName && node.tagName.toLowerCase() == "body"){
+					// is this the root of the document or just the root of an iframe?
+					if(node === dojo.body()){
+						// node is the root of the main document
+						break;
+					}
+					// otherwise, find the iframe this node refers to (can't access it via parentNode,
+					// need to do this trick instead). window.frameElement is supported in IE/FF/Webkit
+					node=dojo.window.get(node.ownerDocument).frameElement;
+				}else{
+					// if this node is the root node of a widget, then add widget id to stack,
+					// except ignore clicks on disabled widgets (actually focusing a disabled widget still works,
+					// to support MenuItem)
+					var id = node.getAttribute && node.getAttribute("widgetId"),
+						widget = id && dijit.byId(id);
+					if(widget && !(by == "mouse" && widget.get("disabled"))){
+						newStack.unshift(id);
+					}
+					node=node.parentNode;
+				}
+			}
+		}catch(e){ /* squelch */ }
+
+		dijit._setStack(newStack, by);
+	},
+
+	_onFocusNode: function(/*DomNode*/ node){
+		// summary:
+		//		Callback when node is focused
+
+		if(!node){
+			return;
+		}
+
+		if(node.nodeType == 9){
+			// Ignore focus events on the document itself.  This is here so that
+			// (for example) clicking the up/down arrows of a spinner
+			// (which don't get focus) won't cause that widget to blur. (FF issue)
+			return;
+		}
+
+		dijit._onTouchNode(node);
+
+		if(node == dijit._curFocus){ return; }
+		if(dijit._curFocus){
+			dijit._prevFocus = dijit._curFocus;
+		}
+		dijit._curFocus = node;
+		dojo.publish("focusNode", [node]);
+	},
+
+	_setStack: function(/*String[]*/ newStack, /*String*/ by){
+		// summary:
+		//		The stack of active widgets has changed.  Send out appropriate events and records new stack.
+		// newStack:
+		//		array of widget id's, starting from the top (outermost) widget
+		// by:
+		//		"mouse" if the focus/touch was caused by a mouse down event
+
+		var oldStack = dijit._activeStack;
+		dijit._activeStack = newStack;
+
+		// compare old stack to new stack to see how many elements they have in common
+		for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
+			if(oldStack[nCommon] != newStack[nCommon]){
+				break;
+			}
+		}
+
+		var widget;
+		// for all elements that have gone out of focus, send blur event
+		for(var i=oldStack.length-1; i>=nCommon; i--){
+			widget = dijit.byId(oldStack[i]);
+			if(widget){
+				widget._focused = false;
+				widget._hasBeenBlurred = true;
+				if(widget._onBlur){
+					widget._onBlur(by);
+				}
+				dojo.publish("widgetBlur", [widget, by]);
+			}
+		}
+
+		// for all element that have come into focus, send focus event
+		for(i=nCommon; i<newStack.length; i++){
+			widget = dijit.byId(newStack[i]);
+			if(widget){
+				widget._focused = true;
+				if(widget._onFocus){
+					widget._onFocus(by);
+				}
+				dojo.publish("widgetFocus", [widget, by]);
+			}
+		}
+	}
+});
+
+// register top window and all the iframes it contains
+dojo.addOnLoad(function(){
+	var handle = dijit.registerWin(window);
+	if(dojo.isIE){
+		dojo.addOnWindowUnload(function(){
+			dijit.unregisterWin(handle);
+			handle = null;
+		})
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.AdapterRegistry"] = true;
+dojo.provide("dojo.AdapterRegistry");
+
+dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
+	//	summary:
+	//		A registry to make contextual calling/searching easier.
+	//	description:
+	//		Objects of this class keep list of arrays in the form [name, check,
+	//		wrap, directReturn] that are used to determine what the contextual
+	//		result of a set of checked arguments is. All check/wrap functions
+	//		in this registry should be of the same arity.
+	//	example:
+	//	|	// create a new registry
+	//	|	var reg = new dojo.AdapterRegistry();
+	//	|	reg.register("handleString",
+	//	|		dojo.isString,
+	//	|		function(str){
+	//	|			// do something with the string here
+	//	|		}
+	//	|	);
+	//	|	reg.register("handleArr",
+	//	|		dojo.isArray,
+	//	|		function(arr){
+	//	|			// do something with the array here
+	//	|		}
+	//	|	);
+	//	|
+	//	|	// now we can pass reg.match() *either* an array or a string and
+	//	|	// the value we pass will get handled by the right function
+	//	|	reg.match("someValue"); // will call the first function
+	//	|	reg.match(["someValue"]); // will call the second
+
+	this.pairs = [];
+	this.returnWrappers = returnWrappers || false; // Boolean
+}
+
+dojo.extend(dojo.AdapterRegistry, {
+	register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
+		//	summary: 
+		//		register a check function to determine if the wrap function or
+		//		object gets selected
+		//	name:
+		//		a way to identify this matcher.
+		//	check:
+		//		a function that arguments are passed to from the adapter's
+		//		match() function.  The check function should return true if the
+		//		given arguments are appropriate for the wrap function.
+		//	directReturn:
+		//		If directReturn is true, the value passed in for wrap will be
+		//		returned instead of being called. Alternately, the
+		//		AdapterRegistry can be set globally to "return not call" using
+		//		the returnWrappers property. Either way, this behavior allows
+		//		the registry to act as a "search" function instead of a
+		//		function interception library.
+		//	override:
+		//		If override is given and true, the check function will be given
+		//		highest priority. Otherwise, it will be the lowest priority
+		//		adapter.
+		this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]);
+	},
+
+	match: function(/* ... */){
+		// summary:
+		//		Find an adapter for the given arguments. If no suitable adapter
+		//		is found, throws an exception. match() accepts any number of
+		//		arguments, all of which are passed to all matching functions
+		//		from the registered pairs.
+		for(var i = 0; i < this.pairs.length; i++){
+			var pair = this.pairs[i];
+			if(pair[1].apply(this, arguments)){
+				if((pair[3])||(this.returnWrappers)){
+					return pair[2];
+				}else{
+					return pair[2].apply(this, arguments);
+				}
+			}
+		}
+		throw new Error("No match found");
+	},
+
+	unregister: function(name){
+		// summary: Remove a named adapter from the registry
+
+		// FIXME: this is kind of a dumb way to handle this. On a large
+		// registry this will be slow-ish and we can use the name as a lookup
+		// should we choose to trade memory for speed.
+		for(var i = 0; i < this.pairs.length; i++){
+			var pair = this.pairs[i];
+			if(pair[0] == name){
+				this.pairs.splice(i, 1);
+				return true;
+			}
+		}
+		return false;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.place"] = true;
+dojo.provide("dijit._base.place");
+
+
+
+
+
+dijit.getViewport = function(){
+	// summary:
+	//		Returns the dimensions and scroll position of the viewable area of a browser window
+
+	return dojo.window.getBox();
+};
+
+/*=====
+dijit.__Position = function(){
+	// x: Integer
+	//		horizontal coordinate in pixels, relative to document body
+	// y: Integer
+	//		vertical coordinate in pixels, relative to document body
+
+	thix.x = x;
+	this.y = y;
+}
+=====*/
+
+
+dijit.placeOnScreen = function(
+	/* DomNode */			node,
+	/* dijit.__Position */	pos,
+	/* String[] */			corners,
+	/* dijit.__Position? */	padding){
+	// summary:
+	//		Positions one of the node's corners at specified position
+	//		such that node is fully visible in viewport.
+	// description:
+	//		NOTE: node is assumed to be absolutely or relatively positioned.
+	//	pos:
+	//		Object like {x: 10, y: 20}
+	//	corners:
+	//		Array of Strings representing order to try corners in, like ["TR", "BL"].
+	//		Possible values are:
+	//			* "BL" - bottom left
+	//			* "BR" - bottom right
+	//			* "TL" - top left
+	//			* "TR" - top right
+	//	padding:
+	//		set padding to put some buffer around the element you want to position.
+	// example:
+	//		Try to place node's top right corner at (10,20).
+	//		If that makes node go (partially) off screen, then try placing
+	//		bottom left corner at (10,20).
+	//	|	placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
+
+	var choices = dojo.map(corners, function(corner){
+		var c = { corner: corner, pos: {x:pos.x,y:pos.y} };
+		if(padding){
+			c.pos.x += corner.charAt(1) == 'L' ? padding.x : -padding.x;
+			c.pos.y += corner.charAt(0) == 'T' ? padding.y : -padding.y;
+		}
+		return c;
+	});
+
+	return dijit._place(node, choices);
+}
+
+dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
+	// summary:
+	//		Given a list of spots to put node, put it at the first spot where it fits,
+	//		of if it doesn't fit anywhere then the place with the least overflow
+	// choices: Array
+	//		Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
+	//		Above example says to put the top-left corner of the node at (10,20)
+	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+	//		for things like tooltip, they are displayed differently (and have different dimensions)
+	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
+
+	// get {x: 10, y: 10, w: 100, h:100} type obj representing position of
+	// viewport over document
+	var view = dojo.window.getBox();
+
+	// This won't work if the node is inside a <div style="position: relative">,
+	// so reattach it to dojo.doc.body.   (Otherwise, the positioning will be wrong
+	// and also it might get cutoff)
+	if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
+		dojo.body().appendChild(node);
+	}
+
+	var best = null;
+	dojo.some(choices, function(choice){
+		var corner = choice.corner;
+		var pos = choice.pos;
+
+		// configure node to be displayed in given position relative to button
+		// (need to do this in order to get an accurate size for the node, because
+		// a tooltips size changes based on position, due to triangle)
+		if(layoutNode){
+			layoutNode(node, choice.aroundCorner, corner);
+		}
+
+		// get node's size
+		var style = node.style;
+		var oldDisplay = style.display;
+		var oldVis = style.visibility;
+		style.visibility = "hidden";
+		style.display = "";
+		var mb = dojo.marginBox(node);
+		style.display = oldDisplay;
+		style.visibility = oldVis;
+
+		// coordinates and size of node with specified corner placed at pos,
+		// and clipped by viewport
+		var startX = Math.max(view.l, corner.charAt(1) == 'L' ? pos.x : (pos.x - mb.w)),
+			startY = Math.max(view.t, corner.charAt(0) == 'T' ? pos.y : (pos.y - mb.h)),
+			endX = Math.min(view.l + view.w, corner.charAt(1) == 'L' ? (startX + mb.w) : pos.x),
+			endY = Math.min(view.t + view.h, corner.charAt(0) == 'T' ? (startY + mb.h) : pos.y),
+			width = endX - startX,
+			height = endY - startY,
+			overflow = (mb.w - width) + (mb.h - height);
+
+		if(best == null || overflow < best.overflow){
+			best = {
+				corner: corner,
+				aroundCorner: choice.aroundCorner,
+				x: startX,
+				y: startY,
+				w: width,
+				h: height,
+				overflow: overflow
+			};
+		}
+		return !overflow;
+	});
+
+	node.style.left = best.x + "px";
+	node.style.top = best.y + "px";
+	if(best.overflow && layoutNode){
+		layoutNode(node, best.aroundCorner, best.corner);
+	}
+	return best;
+}
+
+dijit.placeOnScreenAroundNode = function(
+	/* DomNode */		node,
+	/* DomNode */		aroundNode,
+	/* Object */		aroundCorners,
+	/* Function? */		layoutNode){
+
+	// summary:
+	//		Position node adjacent or kitty-corner to aroundNode
+	//		such that it's fully visible in viewport.
+	//
+	// description:
+	//		Place node such that corner of node touches a corner of
+	//		aroundNode, and that node is fully visible.
+	//
+	// aroundCorners:
+	//		Ordered list of pairs of corners to try matching up.
+	//		Each pair of corners is represented as a key/value in the hash,
+	//		where the key corresponds to the aroundNode's corner, and
+	//		the value corresponds to the node's corner:
+	//
+	//	|	{ aroundNodeCorner1: nodeCorner1, aroundNodeCorner2: nodeCorner2, ...}
+	//
+	//		The following strings are used to represent the four corners:
+	//			* "BL" - bottom left
+	//			* "BR" - bottom right
+	//			* "TL" - top left
+	//			* "TR" - top right
+	//
+	// layoutNode: Function(node, aroundNodeCorner, nodeCorner)
+	//		For things like tooltip, they are displayed differently (and have different dimensions)
+	//		based on their orientation relative to the parent.   This adjusts the popup based on orientation.
+	//
+	// example:
+	//	|	dijit.placeOnScreenAroundNode(node, aroundNode, {'BL':'TL', 'TR':'BR'});
+	//		This will try to position node such that node's top-left corner is at the same position
+	//		as the bottom left corner of the aroundNode (ie, put node below
+	//		aroundNode, with left edges aligned).  If that fails it will try to put
+	// 		the bottom-right corner of node where the top right corner of aroundNode is
+	//		(ie, put node above aroundNode, with right edges aligned)
+	//
+
+	// get coordinates of aroundNode
+	aroundNode = dojo.byId(aroundNode);
+	var oldDisplay = aroundNode.style.display;
+	aroundNode.style.display="";
+	// #3172: use the slightly tighter border box instead of marginBox
+	var aroundNodePos = dojo.position(aroundNode, true);
+	aroundNode.style.display=oldDisplay;
+
+	// place the node around the calculated rectangle
+	return dijit._placeOnScreenAroundRect(node,
+		aroundNodePos.x, aroundNodePos.y, aroundNodePos.w, aroundNodePos.h,	// rectangle
+		aroundCorners, layoutNode);
+};
+
+/*=====
+dijit.__Rectangle = function(){
+	// x: Integer
+	//		horizontal offset in pixels, relative to document body
+	// y: Integer
+	//		vertical offset in pixels, relative to document body
+	// width: Integer
+	//		width in pixels
+	// height: Integer
+	//		height in pixels
+
+	this.x = x;
+	this.y = y;
+	this.width = width;
+	this.height = height;
+}
+=====*/
+
+
+dijit.placeOnScreenAroundRectangle = function(
+	/* DomNode */			node,
+	/* dijit.__Rectangle */	aroundRect,
+	/* Object */			aroundCorners,
+	/* Function */			layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except that the "around"
+	//		parameter is an arbitrary rectangle on the screen (x, y, width, height)
+	//		instead of a dom node.
+
+	return dijit._placeOnScreenAroundRect(node,
+		aroundRect.x, aroundRect.y, aroundRect.width, aroundRect.height,	// rectangle
+		aroundCorners, layoutNode);
+};
+
+dijit._placeOnScreenAroundRect = function(
+	/* DomNode */		node,
+	/* Number */		x,
+	/* Number */		y,
+	/* Number */		width,
+	/* Number */		height,
+	/* Object */		aroundCorners,
+	/* Function */		layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except it accepts coordinates
+	//		of a rectangle to place node adjacent to.
+
+	// TODO: combine with placeOnScreenAroundRectangle()
+
+	// Generate list of possible positions for node
+	var choices = [];
+	for(var nodeCorner in aroundCorners){
+		choices.push( {
+			aroundCorner: nodeCorner,
+			corner: aroundCorners[nodeCorner],
+			pos: {
+				x: x + (nodeCorner.charAt(1) == 'L' ? 0 : width),
+				y: y + (nodeCorner.charAt(0) == 'T' ? 0 : height)
+			}
+		});
+	}
+
+	return dijit._place(node, choices, layoutNode);
+};
+
+dijit.placementRegistry= new dojo.AdapterRegistry();
+dijit.placementRegistry.register("node",
+	function(n, x){
+		return typeof x == "object" &&
+			typeof x.offsetWidth != "undefined" && typeof x.offsetHeight != "undefined";
+	},
+	dijit.placeOnScreenAroundNode);
+dijit.placementRegistry.register("rect",
+	function(n, x){
+		return typeof x == "object" &&
+			"x" in x && "y" in x && "width" in x && "height" in x;
+	},
+	dijit.placeOnScreenAroundRectangle);
+
+dijit.placeOnScreenAroundElement = function(
+	/* DomNode */		node,
+	/* Object */		aroundElement,
+	/* Object */		aroundCorners,
+	/* Function */		layoutNode){
+
+	// summary:
+	//		Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object
+	//		for the "around" argument and finds a proper processor to place a node.
+
+	return dijit.placementRegistry.match.apply(dijit.placementRegistry, arguments);
+};
+
+dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){
+	// summary:
+	//		Transforms the passed array of preferred positions into a format suitable for passing as the aroundCorners argument to dijit.placeOnScreenAroundElement.
+	//
+	// position: String[]
+	//		This variable controls the position of the drop down.
+	//		It's an array of strings with the following values:
+	//
+	//			* before: places drop down to the left of the target node/widget, or to the right in
+	//			  the case of RTL scripts like Hebrew and Arabic
+	//			* after: places drop down to the right of the target node/widget, or to the left in
+	//			  the case of RTL scripts like Hebrew and Arabic
+	//			* above: drop down goes above target node
+	//			* below: drop down goes below target node
+	//
+	//		The list is positions is tried, in order, until a position is found where the drop down fits
+	//		within the viewport.
+	//
+	// leftToRight: Boolean
+	//		Whether the popup will be displaying in leftToRight mode.
+	//
+	var align = {};
+	dojo.forEach(position, function(pos){
+		switch(pos){
+			case "after":
+				align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR";
+				break;
+			case "before":
+				align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL";
+				break;
+			case "below":
+				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
+				align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR";
+				align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL";
+				break;
+			case "above":
+			default:
+				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
+				align[leftToRight ? "TL" : "TR"] = leftToRight ? "BL" : "BR";
+				align[leftToRight ? "TR" : "TL"] = leftToRight ? "BR" : "BL";
+				break;
+		}
+	});
+	return align;
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.window"] = true;
+dojo.provide("dijit._base.window");
+
+
+
+dijit.getDocumentWindow = function(doc){
+	return dojo.window.get(doc);
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.popup"] = true;
+dojo.provide("dijit._base.popup");
+
+
+
+
+
+/*=====
+dijit.popup.__OpenArgs = function(){
+	// popup: Widget
+	//		widget to display
+	// parent: Widget
+	//		the button etc. that is displaying this popup
+	// around: DomNode
+	//		DOM node (typically a button); place popup relative to this node.  (Specify this *or* "x" and "y" parameters.)
+	// x: Integer
+	//		Absolute horizontal position (in pixels) to place node at.  (Specify this *or* "around" parameter.)
+	// y: Integer
+	//		Absolute vertical position (in pixels) to place node at.  (Specify this *or* "around" parameter.)
+	// orient: Object|String
+	//		When the around parameter is specified, orient should be an
+	//		ordered list of tuples of the form (around-node-corner, popup-node-corner).
+	//		dijit.popup.open() tries to position the popup according to each tuple in the list, in order,
+	//		until the popup appears fully within the viewport.
+	//
+	//		The default value is {BL:'TL', TL:'BL'}, which represents a list of two tuples:
+	//			1. (BL, TL)
+	//			2. (TL, BL)
+	//		where BL means "bottom left" and "TL" means "top left".
+	//		So by default, it first tries putting the popup below the around node, left-aligning them,
+	//		and then tries to put it above the around node, still left-aligning them.   Note that the
+	//		default is horizontally reversed when in RTL mode.
+	//
+	//		When an (x,y) position is specified rather than an around node, orient is either
+	//		"R" or "L".  R (for right) means that it tries to put the popup to the right of the mouse,
+	//		specifically positioning the popup's top-right corner at the mouse position, and if that doesn't
+	//		fit in the viewport, then it tries, in order, the bottom-right corner, the top left corner,
+	//		and the top-right corner.
+	// onCancel: Function
+	//		callback when user has canceled the popup by
+	//			1. hitting ESC or
+	//			2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
+	//			   i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
+	// onClose: Function
+	//		callback whenever this popup is closed
+	// onExecute: Function
+	//		callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
+	// padding: dijit.__Position
+	//		adding a buffer around the opening position. This is only useful when around is not set.
+	this.popup = popup;
+	this.parent = parent;
+	this.around = around;
+	this.x = x;
+	this.y = y;
+	this.orient = orient;
+	this.onCancel = onCancel;
+	this.onClose = onClose;
+	this.onExecute = onExecute;
+	this.padding = padding;
+}
+=====*/
+
+dijit.popup = {
+	// summary:
+	//		This singleton is used to show/hide widgets as popups.
+
+	// _stack: dijit._Widget[]
+	//		Stack of currently popped up widgets.
+	//		(someone opened _stack[0], and then it opened _stack[1], etc.)
+	_stack: [],
+	
+	// _beginZIndex: Number
+	//		Z-index of the first popup.   (If first popup opens other
+	//		popups they get a higher z-index.)
+	_beginZIndex: 1000,
+
+	_idGen: 1,
+
+	moveOffScreen: function(/*DomNode*/ node){
+		// summary:
+		//		Initialization for nodes that will be used as popups
+		//
+		// description:
+		//		Puts node inside a wrapper <div>, and
+		//		positions wrapper div off screen, but not display:none, so that
+		//		the widget doesn't appear in the page flow and/or cause a blank
+		//		area at the bottom of the viewport (making scrollbar longer), but
+		//		initialization of contained widgets works correctly
+
+		var wrapper = node.parentNode;
+
+		// Create a wrapper widget for when this node (in the future) will be used as a popup.
+		// This is done early because of IE bugs where creating/moving DOM nodes causes focus
+		// to go wonky, see tests/robot/Toolbar.html to reproduce
+		if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
+			wrapper = dojo.create("div",{
+				"class":"dijitPopup",
+				style:{
+					visibility:"hidden",
+					top: "-9999px"
+				}
+			}, dojo.body());
+			dijit.setWaiRole(wrapper, "presentation");
+			wrapper.appendChild(node);
+		}
+
+
+		var s = node.style;
+		s.display = "";
+		s.visibility = "";
+		s.position = "";
+		s.top = "0px";
+
+		dojo.style(wrapper, {
+			visibility: "hidden",
+			// prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111)
+			top: "-9999px"
+		});
+	},
+
+	getTopPopup: function(){
+		// summary:
+		//		Compute the closest ancestor popup that's *not* a child of another popup.
+		//		Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
+		var stack = this._stack;
+		for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){
+			/* do nothing, just trying to get right value for pi */
+		}
+		return stack[pi];
+	},
+
+	open: function(/*dijit.popup.__OpenArgs*/ args){
+		// summary:
+		//		Popup the widget at the specified position
+		//
+		// example:
+		//		opening at the mouse position
+		//		|		dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
+		//
+		// example:
+		//		opening the widget as a dropdown
+		//		|		dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}});
+		//
+		//		Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback
+		//		(fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
+
+		var stack = this._stack,
+			widget = args.popup,
+			orient = args.orient || (
+				(args.parent ? args.parent.isLeftToRight() : dojo._isBodyLtr()) ?
+				{'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'} :
+				{'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'}
+			),
+			around = args.around,
+			id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+this._idGen++);
+
+
+		// The wrapper may have already been created, but in case it wasn't, create here
+		var wrapper = widget.domNode.parentNode;
+		if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){
+			this.moveOffScreen(widget.domNode);
+			wrapper = widget.domNode.parentNode;
+		}
+
+		dojo.attr(wrapper, {
+			id: id,
+			style: {
+				zIndex: this._beginZIndex + stack.length
+			},
+			"class": "dijitPopup " + (widget.baseClass || widget["class"] || "").split(" ")[0] +"Popup",
+			dijitPopupParent: args.parent ? args.parent.id : ""
+		});
+
+		if(dojo.isIE || dojo.isMoz){
+			var iframe = wrapper.childNodes[1];
+			if(!iframe){
+				iframe = new dijit.BackgroundIframe(wrapper);
+			}
+		}
+
+		// position the wrapper node and make it visible
+		var best = around ?
+			dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
+			dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR'], args.padding);
+
+		wrapper.style.visibility = "visible";
+		widget.domNode.style.visibility = "visible";	// counteract effects from _HasDropDown
+
+		var handlers = [];
+
+		// provide default escape and tab key handling
+		// (this will work for any widget, not just menu)
+		handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
+			if(evt.charOrCode == dojo.keys.ESCAPE && args.onCancel){
+				dojo.stopEvent(evt);
+				args.onCancel();
+			}else if(evt.charOrCode === dojo.keys.TAB){
+				dojo.stopEvent(evt);
+				var topPopup = this.getTopPopup();
+				if(topPopup && topPopup.onCancel){
+					topPopup.onCancel();
+				}
+			}
+		}));
+
+		// watch for cancel/execute events on the popup and notify the caller
+		// (for a menu, "execute" means clicking an item)
+		if(widget.onCancel){
+			handlers.push(dojo.connect(widget, "onCancel", args.onCancel));
+		}
+
+		handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", this, function(){
+			var topPopup = this.getTopPopup();
+			if(topPopup && topPopup.onExecute){
+				topPopup.onExecute();
+			}
+		}));
+
+		stack.push({
+			wrapper: wrapper,
+			iframe: iframe,
+			widget: widget,
+			parent: args.parent,
+			onExecute: args.onExecute,
+			onCancel: args.onCancel,
+ 			onClose: args.onClose,
+			handlers: handlers
+		});
+
+		if(widget.onOpen){
+			// TODO: in 2.0 standardize onShow() (used by StackContainer) and onOpen() (used here)
+			widget.onOpen(best);
+		}
+
+		return best;
+	},
+
+	close: function(/*dijit._Widget*/ popup){
+		// summary:
+		//		Close specified popup and any popups that it parented
+
+		var stack = this._stack;
+
+		// Basically work backwards from the top of the stack closing popups
+		// until we hit the specified popup, but IIRC there was some issue where closing
+		// a popup would cause others to close too.  Thus if we are trying to close B in [A,B,C]
+		// closing C might close B indirectly and then the while() condition will run where stack==[A]...
+		// so the while condition is constructed defensively.
+		while(dojo.some(stack, function(elem){return elem.widget == popup;})){
+			var top = stack.pop(),
+				wrapper = top.wrapper,
+				iframe = top.iframe,
+				widget = top.widget,
+				onClose = top.onClose;
+
+			if(widget.onClose){
+				// TODO: in 2.0 standardize onHide() (used by StackContainer) and onClose() (used here)
+				widget.onClose();
+			}
+			dojo.forEach(top.handlers, dojo.disconnect);
+
+			// Move the widget plus it's wrapper off screen, unless it has already been destroyed in above onClose() etc.
+			if(widget && widget.domNode){
+				this.moveOffScreen(widget.domNode);
+			}else{
+				dojo.destroy(wrapper);
+			}
+                        
+			if(onClose){
+				onClose();
+			}
+		}
+	}
+};
+
+dijit._frames = new function(){
+	// summary:
+	//		cache of iframes
+	var queue = [];
+
+	this.pop = function(){
+		var iframe;
+		if(queue.length){
+			iframe = queue.pop();
+			iframe.style.display="";
+		}else{
+			if(dojo.isIE){
+				var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\"";
+				var html="<iframe src='" + burl + "'"
+					+ " style='position: absolute; left: 0px; top: 0px;"
+					+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
+				iframe = dojo.doc.createElement(html);
+			}else{
+			 	iframe = dojo.create("iframe");
+				iframe.src = 'javascript:""';
+				iframe.className = "dijitBackgroundIframe";
+				dojo.style(iframe, "opacity", 0.1);
+			}
+			iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
+			dijit.setWaiRole(iframe,"presentation");
+		}
+		return iframe;
+	};
+
+	this.push = function(iframe){
+		iframe.style.display="none";
+		queue.push(iframe);
+	}
+}();
+
+
+dijit.BackgroundIframe = function(/* DomNode */node){
+	// summary:
+	//		For IE/FF z-index schenanigans. id attribute is required.
+	//
+	// description:
+	//		new dijit.BackgroundIframe(node)
+	//			Makes a background iframe as a child of node, that fills
+	//			area (and position) of node
+
+	if(!node.id){ throw new Error("no id"); }
+	if(dojo.isIE || dojo.isMoz){
+		var iframe = dijit._frames.pop();
+		node.appendChild(iframe);
+		if(dojo.isIE<7){
+			this.resize(node);
+			this._conn = dojo.connect(node, 'onresize', this, function(){
+				this.resize(node);
+			});
+		}else{
+			dojo.style(iframe, {
+				width: '100%',
+				height: '100%'
+			});
+		}
+		this.iframe = iframe;
+	}
+};
+
+dojo.extend(dijit.BackgroundIframe, {
+	resize: function(node){
+		// summary:
+		// 		resize the iframe so its the same size as node
+		// description:
+		//		this function is a no-op in all browsers except
+		//		IE6, which does not support 100% width/height 
+		//		of absolute positioned iframes
+		if(this.iframe && dojo.isIE<7){
+			dojo.style(this.iframe, {
+				width: node.offsetWidth + 'px',
+				height: node.offsetHeight + 'px'
+			});
+		}
+	},
+	destroy: function(){
+		// summary:
+		//		destroy the iframe
+		if(this._conn){
+			dojo.disconnect(this._conn);
+			this._conn = null;
+		}
+		if(this.iframe){
+			dijit._frames.push(this.iframe);
+			delete this.iframe;
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.scroll"] = true;
+dojo.provide("dijit._base.scroll");
+
+
+
+dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){
+	// summary:
+	//		Scroll the passed node into view, if it is not already.
+	//		Deprecated, use `dojo.window.scrollIntoView` instead.
+	
+	dojo.window.scrollIntoView(node, pos);
+};
+
+}
+
+if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.uacss"] = true;
+dojo.provide("dojo.uacss");
+
+(function(){
+	// summary:
+	//		Applies pre-set CSS classes to the top-level HTML node, based on:
+	// 			- browser (ex: dj_ie)
+	//			- browser version (ex: dj_ie6)
+	//			- box model (ex: dj_contentBox)
+	//			- text direction (ex: dijitRtl)
+	//
+	//		In addition, browser, browser version, and box model are
+	//		combined with an RTL flag when browser text is RTL.  ex: dj_ie-rtl.
+
+	var d = dojo,
+		html = d.doc.documentElement,
+		ie = d.isIE,
+		opera = d.isOpera,
+		maj = Math.floor,
+		ff = d.isFF,
+		boxModel = d.boxModel.replace(/-/,''),
+
+		classes = {
+			dj_ie: ie,
+			dj_ie6: maj(ie) == 6,
+			dj_ie7: maj(ie) == 7,
+			dj_ie8: maj(ie) == 8,
+			dj_quirks: d.isQuirks,
+			dj_iequirks: ie && d.isQuirks,
+
+			// NOTE: Opera not supported by dijit
+			dj_opera: opera,
+
+			dj_khtml: d.isKhtml,
+
+			dj_webkit: d.isWebKit,
+			dj_safari: d.isSafari,
+			dj_chrome: d.isChrome,
+
+			dj_gecko: d.isMozilla,
+			dj_ff3: maj(ff) == 3
+		}; // no dojo unsupported browsers
+
+	classes["dj_" + boxModel] = true;
+
+	// apply browser, browser version, and box model class names
+	var classStr = "";
+	for(var clz in classes){
+		if(classes[clz]){
+			classStr += clz + " ";
+		}
+	}
+	html.className = d.trim(html.className + " " + classStr);
+
+	// If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension.
+	// We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl).  
+	// Unshift() is to run sniff code before the parser.
+	dojo._loaders.unshift(function(){
+		if(!dojo._isBodyLtr()){
+			var rtlClassStr = "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl ")
+			html.className = d.trim(html.className + " " + rtlClassStr);
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.sniff"] = true;
+// summary:
+//		Applies pre-set CSS classes to the top-level HTML node, see
+//		`dojo.uacss` for details.
+//
+//		Simply doing a require on this module will
+//		establish this CSS.  Modified version of Morris' CSS hack.
+
+dojo.provide("dijit._base.sniff");
+
+
+
+}
+
+if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.typematic"] = true;
+dojo.provide("dijit._base.typematic");
+
+dijit.typematic = {
+	// summary:
+	//		These functions are used to repetitively call a user specified callback
+	//		method when a specific key or mouse click over a specific DOM node is
+	//		held down for a specific amount of time.
+	//		Only 1 such event is allowed to occur on the browser page at 1 time.
+
+	_fireEventAndReload: function(){
+		this._timer = null;
+		this._callback(++this._count, this._node, this._evt);
+		
+		// Schedule next event, timer is at most minDelay (default 10ms) to avoid
+		// browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup)
+		this._currentTimeout = Math.max(
+			this._currentTimeout < 0 ? this._initialDelay :
+				(this._subsequentDelay > 1 ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay)),
+			this._minDelay);
+		this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
+	},
+
+	trigger: function(/*Event*/ evt, /*Object*/ _this, /*DOMNode*/ node, /*Function*/ callback, /*Object*/ obj, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start a timed, repeating callback sequence.
+		//		If already started, the function call is ignored.
+		//		This method is not normally called by the user but can be
+		//		when the normal listener code is insufficient.
+		// evt:
+		//		key or mouse event object to pass to the user callback
+		// _this:
+		//		pointer to the user's widget space.
+		// node:
+		//		the DOM node object to pass the the callback function
+		// callback:
+		//		function to call until the sequence is stopped called with 3 parameters:
+		// count:
+		//		integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
+		// node:
+		//		the DOM node object passed in
+		// evt:
+		//		key or mouse event object
+		// obj:
+		//		user space object used to uniquely identify each typematic sequence
+		// subsequentDelay (optional):
+		//		if > 1, the number of milliseconds until the 3->n events occur
+		//		or else the fractional time multiplier for the next event's delay, default=0.9
+		// initialDelay (optional):
+		//		the number of milliseconds until the 2nd event occurs, default=500ms
+		// minDelay (optional):
+		//		the maximum delay in milliseconds for event to fire, default=10ms
+		if(obj != this._obj){
+			this.stop();
+			this._initialDelay = initialDelay || 500;
+			this._subsequentDelay = subsequentDelay || 0.90;
+			this._minDelay = minDelay || 10;
+			this._obj = obj;
+			this._evt = evt;
+			this._node = node;
+			this._currentTimeout = -1;
+			this._count = -1;
+			this._callback = dojo.hitch(_this, callback);
+			this._fireEventAndReload();
+			this._evt = dojo.mixin({faux: true}, evt);
+		}
+	},
+
+	stop: function(){
+		// summary:
+		//		Stop an ongoing timed, repeating callback sequence.
+		if(this._timer){
+			clearTimeout(this._timer);
+			this._timer = null;
+		}
+		if(this._obj){
+			this._callback(-1, this._node, this._evt);
+			this._obj = null;
+		}
+	},
+
+	addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a specific typematic key.
+		//		See also the trigger method for other parameters.
+		// keyObject:
+		//		an object defining the key to listen for:
+		// 		charOrCode:
+		//			the printable character (string) or keyCode (number) to listen for.
+		// 		keyCode:
+		//			(deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0).
+		// 		charCode:
+		//			(deprecated - use charOrCode) the charCode (number) to listen for.
+		// 		ctrlKey:
+		//			desired ctrl key state to initiate the callback sequence:
+		//			- pressed (true)
+		//			- released (false)
+		//			- either (unspecified)
+		// 		altKey:
+		//			same as ctrlKey but for the alt key
+		// 		shiftKey:
+		//			same as ctrlKey but for the shift key
+		// returns:
+		//		an array of dojo.connect handles
+		if(keyObject.keyCode){
+			keyObject.charOrCode = keyObject.keyCode;
+			dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+		}else if(keyObject.charCode){
+			keyObject.charOrCode = String.fromCharCode(keyObject.charCode);
+			dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
+		}
+		return [
+			dojo.connect(node, "onkeypress", this, function(evt){
+				if(evt.charOrCode == keyObject.charOrCode &&
+				(keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
+				(keyObject.altKey === undefined || keyObject.altKey == evt.altKey) &&
+				(keyObject.metaKey === undefined || keyObject.metaKey == (evt.metaKey || false)) && // IE doesn't even set metaKey
+				(keyObject.shiftKey === undefined || keyObject.shiftKey == evt.shiftKey)){
+					dojo.stopEvent(evt);
+					dijit.typematic.trigger(evt, _this, node, callback, keyObject, subsequentDelay, initialDelay, minDelay);
+				}else if(dijit.typematic._obj == keyObject){
+					dijit.typematic.stop();
+				}
+			}),
+			dojo.connect(node, "onkeyup", this, function(evt){
+				if(dijit.typematic._obj == keyObject){
+					dijit.typematic.stop();
+				}
+			})
+		];
+	},
+
+	addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a typematic mouse click.
+		//		See the trigger method for other parameters.
+		// returns:
+		//		an array of dojo.connect handles
+		var dc = dojo.connect;
+		return [
+			dc(node, "mousedown", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
+			}),
+			dc(node, "mouseup", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.stop();
+			}),
+			dc(node, "mouseout", this, function(evt){
+				dojo.stopEvent(evt);
+				dijit.typematic.stop();
+			}),
+			dc(node, "mousemove", this, function(evt){
+				evt.preventDefault();
+			}),
+			dc(node, "dblclick", this, function(evt){
+				dojo.stopEvent(evt);
+				if(dojo.isIE){
+					dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay);
+					setTimeout(dojo.hitch(this, dijit.typematic.stop), 50);
+				}
+			})
+		];
+	},
+
+	addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){
+		// summary:
+		//		Start listening for a specific typematic key and mouseclick.
+		//		This is a thin wrapper to addKeyListener and addMouseListener.
+		//		See the addMouseListener and addKeyListener methods for other parameters.
+		// mouseNode:
+		//		the DOM node object to listen on for mouse events.
+		// keyNode:
+		//		the DOM node object to listen on for key events.
+		// returns:
+		//		an array of dojo.connect handles
+		return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay, minDelay).concat(
+			this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay, minDelay));
+	}
+};
+
+}
+
+if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base.wai"] = true;
+dojo.provide("dijit._base.wai");
+
+dijit.wai = {
+	onload: function(){
+		// summary:
+		//		Detects if we are in high-contrast mode or not
+
+		// This must be a named function and not an anonymous
+		// function, so that the widget parsing code can make sure it
+		// registers its onload function after this function.
+		// DO NOT USE "this" within this function.
+
+		// create div for testing if high contrast mode is on or images are turned off
+		var div = dojo.create("div",{
+			id: "a11yTestNode",
+			style:{
+				cssText:'border: 1px solid;'
+					+ 'border-color:red green;'
+					+ 'position: absolute;'
+					+ 'height: 5px;'
+					+ 'top: -999px;'
+					+ 'background-image: url("' + (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")) + '");'
+			}
+		}, dojo.body());
+
+		// test it
+		var cs = dojo.getComputedStyle(div);
+		if(cs){
+			var bkImg = cs.backgroundImage;
+			var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
+			dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
+			if(dojo.isIE){
+				div.outerHTML = "";		// prevent mixed-content warning, see http://support.microsoft.com/kb/925014
+			}else{
+				dojo.body().removeChild(div);
+			}
+		}
+	}
+};
+
+// Test if computer is in high contrast mode.
+// Make sure the a11y test runs first, before widgets are instantiated.
+if(dojo.isIE || dojo.isMoz){	// NOTE: checking in Safari messes things up
+	dojo._loaders.unshift(dijit.wai.onload);
+}
+
+dojo.mixin(dijit, {
+	_XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,
+
+	hasWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Determines if an element has a particular non-XHTML role.
+		// returns:
+		//		True if elem has the specific non-XHTML role attribute and false if not.
+		// 		For backwards compatibility if role parameter not provided,
+		// 		returns true if has non XHTML role
+		var waiRole = this.getWaiRole(elem);
+		return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0);
+	},
+
+	getWaiRole: function(/*Element*/ elem){
+		// summary:
+		//		Gets the non-XHTML role for an element (which should be a wai role).
+		// returns:
+		//		The non-XHTML role of elem or an empty string if elem
+		//		does not have a role.
+		 return dojo.trim((dojo.attr(elem, "role") || "").replace(this._XhtmlRoles,"").replace("wairole:",""));
+	},
+
+	setWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Sets the role on an element.
+		// description:
+		//		Replace existing role attribute with new role.
+		//		If elem already has an XHTML role, append this role to XHTML role
+		//		and remove other ARIA roles.
+
+		var curRole = dojo.attr(elem, "role") || "";
+		if(!this._XhtmlRoles.test(curRole)){
+			dojo.attr(elem, "role", role);
+		}else{
+			if((" "+ curRole +" ").indexOf(" " + role + " ") < 0){
+				var clearXhtml = dojo.trim(curRole.replace(this._XhtmlRoles, ""));
+				var cleanRole = dojo.trim(curRole.replace(clearXhtml, ""));
+				dojo.attr(elem, "role", cleanRole + (cleanRole ? ' ' : '') + role);
+			}
+		}
+	},
+
+	removeWaiRole: function(/*Element*/ elem, /*String*/ role){
+		// summary:
+		//		Removes the specified non-XHTML role from an element.
+		// 		Removes role attribute if no specific role provided (for backwards compat.)
+
+		var roleValue = dojo.attr(elem, "role");
+		if(!roleValue){ return; }
+		if(role){
+			var t = dojo.trim((" " + roleValue + " ").replace(" " + role + " ", " "));
+			dojo.attr(elem, "role", t);
+		}else{
+			elem.removeAttribute("role");
+		}
+	},
+
+	hasWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Determines if an element has a given state.
+		// description:
+		//		Checks for an attribute called "aria-"+state.
+		// returns:
+		//		true if elem has a value for the given state and
+		//		false if it does not.
+
+		return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state);
+	},
+
+	getWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Gets the value of a state on an element.
+		// description:
+		//		Checks for an attribute called "aria-"+state.
+		// returns:
+		//		The value of the requested state on elem
+		//		or an empty string if elem has no value for state.
+
+		return elem.getAttribute("aria-"+state) || "";
+	},
+
+	setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
+		// summary:
+		//		Sets a state on an element.
+		// description:
+		//		Sets an attribute called "aria-"+state.
+
+		elem.setAttribute("aria-"+state, value);
+	},
+
+	removeWaiState: function(/*Element*/ elem, /*String*/ state){
+		// summary:
+		//		Removes a state from an element.
+		// description:
+		//		Sets an attribute called "aria-"+state.
+
+		elem.removeAttribute("aria-"+state);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._base"] = true;
+dojo.provide("dijit._base");
+
+
+
+
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.date.stamp"] = true;
+dojo.provide("dojo.date.stamp");
+
+// Methods to convert dates to or from a wire (string) format using well-known conventions
+
+dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
+	//	summary:
+	//		Returns a Date object given a string formatted according to a subset of the ISO-8601 standard.
+	//
+	//	description:
+	//		Accepts a string formatted according to a profile of ISO8601 as defined by
+	//		[RFC3339](http://www.ietf.org/rfc/rfc3339.txt), except that partial input is allowed.
+	//		Can also process dates as specified [by the W3C](http://www.w3.org/TR/NOTE-datetime)
+	//		The following combinations are valid:
+	//
+	//			* dates only
+	//			|	* yyyy
+	//			|	* yyyy-MM
+	//			|	* yyyy-MM-dd
+	// 			* times only, with an optional time zone appended
+	//			|	* THH:mm
+	//			|	* THH:mm:ss
+	//			|	* THH:mm:ss.SSS
+	// 			* and "datetimes" which could be any combination of the above
+	//
+	//		timezones may be specified as Z (for UTC) or +/- followed by a time expression HH:mm
+	//		Assumes the local time zone if not specified.  Does not validate.  Improperly formatted
+	//		input may return null.  Arguments which are out of bounds will be handled
+	// 		by the Date constructor (e.g. January 32nd typically gets resolved to February 1st)
+	//		Only years between 100 and 9999 are supported.
+	//
+  	//	formattedString:
+	//		A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00
+	//
+	//	defaultTime:
+	//		Used for defaults for fields omitted in the formattedString.
+	//		Uses 1970-01-01T00:00:00.0Z by default.
+
+	if(!dojo.date.stamp._isoRegExp){
+		dojo.date.stamp._isoRegExp =
+//TODO: could be more restrictive and check for 00-59, etc.
+			/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
+	}
+
+	var match = dojo.date.stamp._isoRegExp.exec(formattedString),
+		result = null;
+
+	if(match){
+		match.shift();
+		if(match[1]){match[1]--;} // Javascript Date months are 0-based
+		if(match[6]){match[6] *= 1000;} // Javascript Date expects fractional seconds as milliseconds
+
+		if(defaultTime){
+			// mix in defaultTime.  Relatively expensive, so use || operators for the fast path of defaultTime === 0
+			defaultTime = new Date(defaultTime);
+			dojo.forEach(dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){
+				return defaultTime["get" + prop]();
+			}), function(value, index){
+				match[index] = match[index] || value;
+			});
+		}
+		result = new Date(match[0]||1970, match[1]||0, match[2]||1, match[3]||0, match[4]||0, match[5]||0, match[6]||0); //TODO: UTC defaults
+		if(match[0] < 100){
+			result.setFullYear(match[0] || 1970);
+		}
+
+		var offset = 0,
+			zoneSign = match[7] && match[7].charAt(0);
+		if(zoneSign != 'Z'){
+			offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
+			if(zoneSign != '-'){ offset *= -1; }
+		}
+		if(zoneSign){
+			offset -= result.getTimezoneOffset();
+		}
+		if(offset){
+			result.setTime(result.getTime() + offset * 60000);
+		}
+	}
+
+	return result; // Date or null
+}
+
+/*=====
+	dojo.date.stamp.__Options = function(){
+		//	selector: String
+		//		"date" or "time" for partial formatting of the Date object.
+		//		Both date and time will be formatted by default.
+		//	zulu: Boolean
+		//		if true, UTC/GMT is used for a timezone
+		//	milliseconds: Boolean
+		//		if true, output milliseconds
+		this.selector = selector;
+		this.zulu = zulu;
+		this.milliseconds = milliseconds;
+	}
+=====*/
+
+dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){
+	//	summary:
+	//		Format a Date object as a string according a subset of the ISO-8601 standard
+	//
+	//	description:
+	//		When options.selector is omitted, output follows [RFC3339](http://www.ietf.org/rfc/rfc3339.txt)
+	//		The local time zone is included as an offset from GMT, except when selector=='time' (time without a date)
+	//		Does not check bounds.  Only years between 100 and 9999 are supported.
+	//
+	//	dateObject:
+	//		A Date object
+
+	var _ = function(n){ return (n < 10) ? "0" + n : n; };
+	options = options || {};
+	var formattedDate = [],
+		getter = options.zulu ? "getUTC" : "get",
+		date = "";
+	if(options.selector != "time"){
+		var year = dateObject[getter+"FullYear"]();
+		date = ["0000".substr((year+"").length)+year, _(dateObject[getter+"Month"]()+1), _(dateObject[getter+"Date"]())].join('-');
+	}
+	formattedDate.push(date);
+	if(options.selector != "date"){
+		var time = [_(dateObject[getter+"Hours"]()), _(dateObject[getter+"Minutes"]()), _(dateObject[getter+"Seconds"]())].join(':');
+		var millis = dateObject[getter+"Milliseconds"]();
+		if(options.milliseconds){
+			time += "."+ (millis < 100 ? "0" : "") + _(millis);
+		}
+		if(options.zulu){
+			time += "Z";
+		}else if(options.selector != "time"){
+			var timezoneOffset = dateObject.getTimezoneOffset();
+			var absOffset = Math.abs(timezoneOffset);
+			time += (timezoneOffset > 0 ? "-" : "+") + 
+				_(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
+		}
+		formattedDate.push(time);
+	}
+	return formattedDate.join('T'); // String
+}
+
+}
+
+if(!dojo._hasResource["dojo.parser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.parser"] = true;
+dojo.provide("dojo.parser");
+
+
+new Date("X"); // workaround for #11279, new Date("") == NaN
+
+dojo.parser = new function(){
+	// summary: The Dom/Widget parsing package
+
+	var d = dojo;
+	this._attrName = d._scopeName + "Type";
+	this._query = "[" + this._attrName + "]";
+
+	function val2type(/*Object*/ value){
+		// summary:
+		//		Returns name of type of given value.
+
+		if(d.isString(value)){ return "string"; }
+		if(typeof value == "number"){ return "number"; }
+		if(typeof value == "boolean"){ return "boolean"; }
+		if(d.isFunction(value)){ return "function"; }
+		if(d.isArray(value)){ return "array"; } // typeof [] == "object"
+		if(value instanceof Date) { return "date"; } // assume timestamp
+		if(value instanceof d._Url){ return "url"; }
+		return "object";
+	}
+
+	function str2obj(/*String*/ value, /*String*/ type){
+		// summary:
+		//		Convert given string value to given type
+		switch(type){
+			case "string":
+				return value;
+			case "number":
+				return value.length ? Number(value) : NaN;
+			case "boolean":
+				// for checked/disabled value might be "" or "checked".  interpret as true.
+				return typeof value == "boolean" ? value : !(value.toLowerCase()=="false");
+			case "function":
+				if(d.isFunction(value)){
+					// IE gives us a function, even when we say something like onClick="foo"
+					// (in which case it gives us an invalid function "function(){ foo }"). 
+					//  Therefore, convert to string
+					value=value.toString();
+					value=d.trim(value.substring(value.indexOf('{')+1, value.length-1));
+				}
+				try{
+					if(value === "" || value.search(/[^\w\.]+/i) != -1){
+						// The user has specified some text for a function like "return x+5"
+						return new Function(value);
+					}else{
+						// The user has specified the name of a function like "myOnClick"
+						// or a single word function "return"
+						return d.getObject(value, false) || new Function(value);
+					}
+				}catch(e){ return new Function(); }
+			case "array":
+				return value ? value.split(/\s*,\s*/) : [];
+			case "date":
+				switch(value){
+					case "": return new Date("");	// the NaN of dates
+					case "now": return new Date();	// current date
+					default: return d.date.stamp.fromISOString(value);
+				}
+			case "url":
+				return d.baseUrl + value;
+			default:
+				return d.fromJson(value);
+		}
+	}
+
+	var instanceClasses = {
+		// map from fully qualified name (like "dijit.Button") to structure like
+		// { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
+	};
+
+	// Widgets like BorderContainer add properties to _Widget via dojo.extend().
+	// If BorderContainer is loaded after _Widget's parameter list has been cached,
+	// we need to refresh that parameter list (for _Widget and all widgets that extend _Widget).
+	dojo.connect(dojo, "extend", function(){
+		instanceClasses = {};
+	});
+
+	function getClassInfo(/*String*/ className){
+		// className:
+		//		fully qualified name (like "dijit.form.Button")
+		// returns:
+		//		structure like
+		//			{ 
+		//				cls: dijit.Button, 
+		//				params: { label: "string", disabled: "boolean"}
+		//			}
+
+		if(!instanceClasses[className]){
+			// get pointer to widget class
+			var cls = d.getObject(className);
+			if(!cls){ return null; }		// class not defined [yet]
+
+			var proto = cls.prototype;
+	
+			// get table of parameter names & types
+			var params = {}, dummyClass = {};
+			for(var name in proto){
+				if(name.charAt(0)=="_"){ continue; } 	// skip internal properties
+				if(name in dummyClass){ continue; }		// skip "constructor" and "toString"
+				var defVal = proto[name];
+				params[name]=val2type(defVal);
+			}
+
+			instanceClasses[className] = { cls: cls, params: params };
+		}
+		return instanceClasses[className];
+	}
+
+	this._functionFromScript = function(script){
+		var preamble = "";
+		var suffix = "";
+		var argsStr = script.getAttribute("args");
+		if(argsStr){
+			d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
+				preamble += "var "+part+" = arguments["+idx+"]; ";
+			});
+		}
+		var withStr = script.getAttribute("with");
+		if(withStr && withStr.length){
+			d.forEach(withStr.split(/\s*,\s*/), function(part){
+				preamble += "with("+part+"){";
+				suffix += "}";
+			});
+		}
+		return new Function(preamble+script.innerHTML+suffix);
+	}
+
+	this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){
+		// summary:
+		//		Takes array of nodes, and turns them into class instances and
+		//		potentially calls a startup method to allow them to connect with
+		//		any children.
+		// nodes: Array
+		//		Array of nodes or objects like
+		//	|		{
+		//	|			type: "dijit.form.Button",
+		//	|			node: DOMNode,
+		//	|			scripts: [ ... ],	// array of <script type="dojo/..."> children of node
+		//	|			inherited: { ... }	// settings inherited from ancestors like dir, theme, etc.
+		//	|		}
+		// mixin: Object?
+		//		An object that will be mixed in with each node in the array.
+		//		Values in the mixin will override values in the node, if they
+		//		exist.
+		// args: Object?
+		//		An object used to hold kwArgs for instantiation.
+		//		Supports 'noStart' and inherited.
+		var thelist = [], dp = dojo.parser;
+		mixin = mixin||{};
+		args = args||{};
+		
+		d.forEach(nodes, function(obj){
+			if(!obj){ return; }
+
+			// Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s
+			var node, type, clsInfo, clazz, scripts;
+			if(obj.node){
+				// new format of nodes[] array, object w/lots of properties pre-computed for me
+				node = obj.node;
+				type = obj.type;
+				clsInfo = obj.clsInfo || (type && getClassInfo(type));
+				clazz = clsInfo && clsInfo.cls;
+				scripts = obj.scripts;
+			}else{
+				// old (backwards compatible) format of nodes[] array, simple array of DOMNodes
+				node = obj;
+				type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName);
+				clsInfo = type && getClassInfo(type);
+				clazz = clsInfo && clsInfo.cls;
+				scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : 
+							d.query("> script[type^='dojo/']", node));
+			}
+			if(!clsInfo){
+				throw new Error("Could not load class '" + type);
+			}
+
+			// Setup hash to hold parameter settings for this widget.   Start with the parameter
+			// settings inherited from ancestors ("dir" and "lang").
+			// Inherited setting may later be overridden by explicit settings on node itself.
+			var params = {},
+				attributes = node.attributes;
+			if(args.defaults){
+				// settings for the document itself (or whatever subtree is being parsed)
+				dojo.mixin(params, args.defaults);
+			}
+			if(obj.inherited){
+				// settings from dir=rtl or lang=... on a node above this node
+				dojo.mixin(params, obj.inherited);
+			}
+
+			// read parameters (ie, attributes) specified on DOMNode
+			// clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
+			for(var name in clsInfo.params){
+				var item = name in mixin?{value:mixin[name],specified:true}:attributes.getNamedItem(name);
+				if(!item || (!item.specified && (!dojo.isIE || name.toLowerCase()!="value"))){ continue; }
+				var value = item.value;
+				// Deal with IE quirks for 'class' and 'style'
+				switch(name){
+				case "class":
+					value = "className" in mixin?mixin.className:node.className;
+					break;
+				case "style":
+					value = "style" in mixin?mixin.style:(node.style && node.style.cssText); // FIXME: Opera?
+				}
+				var _type = clsInfo.params[name];
+				if(typeof value == "string"){
+					params[name] = str2obj(value, _type);
+				}else{
+					params[name] = value;
+				}
+			}
+
+			// Process <script type="dojo/*"> script tags
+			// <script type="dojo/method" event="foo"> tags are added to params, and passed to
+			// the widget on instantiation.
+			// <script type="dojo/method"> tags (with no event) are executed after instantiation
+			// <script type="dojo/connect" event="foo"> tags are dojo.connected after instantiation
+			// note: dojo/* script tags cannot exist in self closing widgets, like <input />
+			var connects = [],	// functions to connect after instantiation
+				calls = [];		// functions to call after instantiation
+
+			d.forEach(scripts, function(script){
+				node.removeChild(script);
+				var event = script.getAttribute("event"),
+					type = script.getAttribute("type"),
+					nf = d.parser._functionFromScript(script);
+				if(event){
+					if(type == "dojo/connect"){
+						connects.push({event: event, func: nf});
+					}else{
+						params[event] = nf;
+					}
+				}else{
+					calls.push(nf);
+				}
+			});
+
+			var markupFactory = clazz.markupFactory || clazz.prototype && clazz.prototype.markupFactory;
+			// create the instance
+			var instance = markupFactory ? markupFactory(params, node, clazz) : new clazz(params, node);
+			thelist.push(instance);
+
+			// map it to the JS namespace if that makes sense
+			var jsname = node.getAttribute("jsId");
+			if(jsname){
+				d.setObject(jsname, instance);
+			}
+
+			// process connections and startup functions
+			d.forEach(connects, function(connect){
+				d.connect(instance, connect.event, null, connect.func);
+			});
+			d.forEach(calls, function(func){
+				func.call(instance);
+			});
+		});
+
+		// Call startup on each top level instance if it makes sense (as for
+		// widgets).  Parent widgets will recursively call startup on their
+		// (non-top level) children
+		if(!mixin._started){
+			// TODO: for 2.0, when old instantiate() API is desupported, store parent-child
+			// relationships in the nodes[] array so that no getParent() call is needed.
+			// Note that will  require a parse() call from ContentPane setting a param that the
+			// ContentPane is the parent widget (so that the parse doesn't call startup() on the
+			// ContentPane's children)
+			d.forEach(thelist, function(instance){
+				if(	!args.noStart && instance  && 
+					instance.startup &&
+					!instance._started && 
+					(!instance.getParent || !instance.getParent())
+				){
+					instance.startup();
+				}
+			});
+		}
+		return thelist;
+	};
+
+	this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){
+		// summary:
+		//		Scan the DOM for class instances, and instantiate them.
+		//
+		// description:
+		//		Search specified node (or root node) recursively for class instances,
+		//		and instantiate them Searches for
+		//		dojoType="qualified.class.name"
+		//
+		// rootNode: DomNode?
+		//		A default starting root node from which to start the parsing. Can be
+		//		omitted, defaulting to the entire document. If omitted, the `args`
+		//		object can be passed in this place. If the `args` object has a 
+		//		`rootNode` member, that is used.
+		//
+		// args:
+		//		a kwArgs object passed along to instantiate()
+		//		
+		//			* noStart: Boolean?
+		//				when set will prevent the parser from calling .startup()
+		//				when locating the nodes. 
+		//			* rootNode: DomNode?
+		//				identical to the function's `rootNode` argument, though
+		//				allowed to be passed in via this `args object. 
+		//			* inherited: Object
+		//				Hash possibly containing dir and lang settings to be applied to
+		//				parsed widgets, unless there's another setting on a sub-node that overrides
+		//
+		//
+		// example:
+		//		Parse all widgets on a page:
+		//	|		dojo.parser.parse();
+		//
+		// example:
+		//		Parse all classes within the node with id="foo"
+		//	|		dojo.parser.parse(dojo.byId(foo));
+		//
+		// example:
+		//		Parse all classes in a page, but do not call .startup() on any 
+		//		child
+		//	|		dojo.parser.parse({ noStart: true })
+		//
+		// example:
+		//		Parse all classes in a node, but do not call .startup()
+		//	|		dojo.parser.parse(someNode, { noStart:true });
+		//	|		// or
+		// 	|		dojo.parser.parse({ noStart:true, rootNode: someNode });
+
+		// determine the root node based on the passed arguments.
+		var root;
+		if(!args && rootNode && rootNode.rootNode){
+			args = rootNode;
+			root = args.rootNode;
+		}else{
+			root = rootNode;
+		}
+
+		var attrName = this._attrName;
+		function scan(parent, list){
+			// summary:
+			//		Parent is an Object representing a DOMNode, with or without a dojoType specified.
+			//		Scan parent's children looking for nodes with dojoType specified, storing in list[].
+			//		If parent has a dojoType, also collects <script type=dojo/*> children and stores in parent.scripts[].
+			// parent: Object
+			//		Object representing the parent node, like
+			//	|	{
+			//	|		node: DomNode, 			// scan children of this node
+			//	|		inherited: {dir: "rtl"},	// dir/lang setting inherited from above node
+			//	|
+			//	|		// attributes only set if node has dojoType specified
+			//	|		scripts: [],			// empty array, put <script type=dojo/*> in here
+			//	|		clsInfo: { cls: dijit.form.Button, ...}
+			//	|	}
+			// list: DomNode[]
+			//		Output array of objects (same format as parent) representing nodes to be turned into widgets
+
+			// Effective dir and lang settings on parent node, either set directly or inherited from grandparent
+			var inherited = dojo.clone(parent.inherited);
+			dojo.forEach(["dir", "lang"], function(name){
+				var val = parent.node.getAttribute(name);
+				if(val){
+					inherited[name] = val;
+				}
+			});
+
+			// if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[].
+			var scripts = parent.scripts;
+
+			// unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively
+			var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser;
+
+			// scan parent's children looking for dojoType and <script type=dojo/*>
+			for(var child = parent.node.firstChild; child; child = child.nextSibling){
+				if(child.nodeType == 1){
+					var type = recurse && child.getAttribute(attrName);
+					if(type){
+						// if dojoType specified, add to output array of nodes to instantiate
+						var params = {
+							"type": type,
+							clsInfo: getClassInfo(type),	// note: won't find classes declared via dojo.Declaration
+							node: child,
+							scripts: [], // <script> nodes that are parent's children
+							inherited: inherited // dir & lang attributes inherited from parent
+						};
+						list.push(params);
+
+						// Recurse, collecting <script type="dojo/..."> children, and also looking for
+						// descendant nodes with dojoType specified (unless the widget has the stopParser flag),
+						scan(params, list);
+					}else if(scripts && child.nodeName.toLowerCase() == "script"){
+						// if <script type="dojo/...">, save in scripts[]
+						type = child.getAttribute("type");
+						if (type && /^dojo\//i.test(type)) {
+							scripts.push(child);
+						}
+					}else if(recurse){
+						// Recurse, looking for grandchild nodes with dojoType specified
+						scan({
+							node: child,
+							inherited: inherited
+						}, list);
+					}
+				}
+			}
+		}
+
+		// Make list of all nodes on page w/dojoType specified
+		var list = [];
+		scan({
+			node: root ? dojo.byId(root) : dojo.body(),
+			inherited: (args && args.inherited) || {
+				dir: dojo._isBodyLtr() ? "ltr" : "rtl"
+			}
+		}, list);
+
+		// go build the object instances
+		return this.instantiate(list, null, args); // Array
+	};
+}();
+
+//Register the parser callback. It should be the first callback
+//after the a11y test.
+
+(function(){
+	var parseRunner = function(){ 
+		if(dojo.config.parseOnLoad){
+			dojo.parser.parse(); 
+		}
+	};
+
+	// FIXME: need to clobber cross-dependency!!
+	if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
+		dojo._loaders.splice(1, 0, parseRunner);
+	}else{
+		dojo._loaders.unshift(parseRunner);
+	}
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Widget"] = true;
+dojo.provide("dijit._Widget");
+
+dojo.require( "dijit._base" );
+
+
+// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets'
+// DOM nodes) until someone actually needs to monitor that event.
+dojo.connect(dojo, "_connect",
+	function(/*dijit._Widget*/ widget, /*String*/ event){
+		if(widget && dojo.isFunction(widget._onConnect)){
+			widget._onConnect(event);
+		}
+	});
+
+dijit._connectOnUseEventHandler = function(/*Event*/ event){};
+
+// Keep track of where the last keydown event was, to help avoid generating
+// spurious ondijitclick events when:
+// 1. focus is on a <button> or <a>
+// 2. user presses then releases the ENTER key
+// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler
+// 4. onkeyup event fires, causing the ondijitclick handler to fire
+dijit._lastKeyDownNode = null;
+if(dojo.isIE){
+	(function(){
+		var keydownCallback = function(evt){
+			dijit._lastKeyDownNode = evt.srcElement;
+		};
+		dojo.doc.attachEvent('onkeydown', keydownCallback);
+		dojo.addOnWindowUnload(function(){
+			dojo.doc.detachEvent('onkeydown', keydownCallback);
+		});
+	})();
+}else{
+	dojo.doc.addEventListener('keydown', function(evt){
+		dijit._lastKeyDownNode = evt.target;
+	}, true);
+}
+
+(function(){
+
+var _attrReg = {},	// cached results from getSetterAttributes
+	getSetterAttributes = function(widget){
+		// summary:
+		//		Returns list of attributes with custom setters for specified widget
+		var dc = widget.declaredClass;
+		if(!_attrReg[dc]){
+			var r = [],
+				attrs,
+				proto = widget.constructor.prototype;
+			for(var fxName in proto){
+				if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){
+					r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1));
+				}
+			}
+			_attrReg[dc] = r;
+		}
+		return _attrReg[dc] || [];	// String[]
+	};
+
+dojo.declare("dijit._Widget", null, {
+	// summary:
+	//		Base class for all Dijit widgets.
+
+	// id: [const] String
+	//		A unique, opaque ID string that can be assigned by users or by the
+	//		system. If the developer passes an ID which is known not to be
+	//		unique, the specified ID is ignored and the system-generated ID is
+	//		used instead.
+	id: "",
+
+	// lang: [const] String
+	//		Rarely used.  Overrides the default Dojo locale used to render this widget,
+	//		as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
+	//		Value must be among the list of locales specified during by the Dojo bootstrap,
+	//		formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
+	lang: "",
+
+	// dir: [const] String
+	//		Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
+	//		attribute. Either left-to-right "ltr" or right-to-left "rtl".  If undefined, widgets renders in page's
+	//		default direction.
+	dir: "",
+
+	// class: String
+	//		HTML class attribute
+	"class": "",
+
+	// style: String||Object
+	//		HTML style attributes as cssText string or name/value hash
+	style: "",
+
+	// title: String
+	//		HTML title attribute.
+	//
+	//		For form widgets this specifies a tooltip to display when hovering over
+	//		the widget (just like the native HTML title attribute).
+	//
+	//		For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
+	//		etc., it's used to specify the tab label, accordion pane title, etc.
+	title: "",
+
+	// tooltip: String
+	//		When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
+	//		this specifies the tooltip to appear when the mouse is hovered over that text.
+	tooltip: "",
+
+	// baseClass: [protected] String
+	//		Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate
+	//		widget state.
+	baseClass: "",
+
+	// srcNodeRef: [readonly] DomNode
+	//		pointer to original DOM node
+	srcNodeRef: null,
+
+	// domNode: [readonly] DomNode
+	//		This is our visible representation of the widget! Other DOM
+	//		Nodes may by assigned to other properties, usually through the
+	//		template system's dojoAttachPoint syntax, but the domNode
+	//		property is the canonical "top level" node in widget UI.
+	domNode: null,
+
+	// containerNode: [readonly] DomNode
+	//		Designates where children of the source DOM node will be placed.
+	//		"Children" in this case refers to both DOM nodes and widgets.
+	//		For example, for myWidget:
+	//
+	//		|	<div dojoType=myWidget>
+	//		|		<b> here's a plain DOM node
+	//		|		<span dojoType=subWidget>and a widget</span>
+	//		|		<i> and another plain DOM node </i>
+	//		|	</div>
+	//
+	//		containerNode would point to:
+	//
+	//		|		<b> here's a plain DOM node
+	//		|		<span dojoType=subWidget>and a widget</span>
+	//		|		<i> and another plain DOM node </i>
+	//
+	//		In templated widgets, "containerNode" is set via a
+	//		dojoAttachPoint assignment.
+	//
+	//		containerNode must be defined for any widget that accepts innerHTML
+	//		(like ContentPane or BorderContainer or even Button), and conversely
+	//		is null for widgets that don't, like TextBox.
+	containerNode: null,
+
+/*=====
+	// _started: Boolean
+	//		startup() has completed.
+	_started: false,
+=====*/
+
+	// attributeMap: [protected] Object
+	//		attributeMap sets up a "binding" between attributes (aka properties)
+	//		of the widget and the widget's DOM.
+	//		Changes to widget attributes listed in attributeMap will be
+	//		reflected into the DOM.
+	//
+	//		For example, calling attr('title', 'hello')
+	//		on a TitlePane will automatically cause the TitlePane's DOM to update
+	//		with the new title.
+	//
+	//		attributeMap is a hash where the key is an attribute of the widget,
+	//		and the value reflects a binding to a:
+	//
+	//		- DOM node attribute
+	// |		focus: {node: "focusNode", type: "attribute"}
+	// 		Maps this.focus to this.focusNode.focus
+	//
+	//		- DOM node innerHTML
+	//	|		title: { node: "titleNode", type: "innerHTML" }
+	//		Maps this.title to this.titleNode.innerHTML
+	//
+	//		- DOM node innerText
+	//	|		title: { node: "titleNode", type: "innerText" }
+	//		Maps this.title to this.titleNode.innerText
+	//
+	//		- DOM node CSS class
+	// |		myClass: { node: "domNode", type: "class" }
+	//		Maps this.myClass to this.domNode.className
+	//
+	//		If the value is an array, then each element in the array matches one of the
+	//		formats of the above list.
+	//
+	//		There are also some shorthands for backwards compatibility:
+	//		- string --> { node: string, type: "attribute" }, for example:
+	//	|	"focusNode" ---> { node: "focusNode", type: "attribute" }
+	//		- "" --> { node: "domNode", type: "attribute" }
+	attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""},
+
+	// _deferredConnects: [protected] Object
+	//		attributeMap addendum for event handlers that should be connected only on first use
+	_deferredConnects: {
+		onClick: "",
+		onDblClick: "",
+		onKeyDown: "",
+		onKeyPress: "",
+		onKeyUp: "",
+		onMouseMove: "",
+		onMouseDown: "",
+		onMouseOut: "",
+		onMouseOver: "",
+		onMouseLeave: "",
+		onMouseEnter: "",
+		onMouseUp: ""
+	},
+
+	onClick: dijit._connectOnUseEventHandler,
+	/*=====
+	onClick: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of mouse click events.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onDblClick: dijit._connectOnUseEventHandler,
+	/*=====
+	onDblClick: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of mouse double click events.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyDown: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyDown: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of keys being pressed down.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyPress: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyPress: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of printable keys being typed.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onKeyUp: dijit._connectOnUseEventHandler,
+	/*=====
+	onKeyUp: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of keys being released.
+		// event:
+		//		key Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseDown: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseDown: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse button is pressed down.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseMove: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseMove: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseOut: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseOut: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseOver: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseOver: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseLeave: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseLeave: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves off of this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseEnter: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseEnter: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse moves onto this widget.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+	onMouseUp: dijit._connectOnUseEventHandler,
+	/*=====
+	onMouseUp: function(event){
+		// summary:
+		//		Connect to this function to receive notifications of when the mouse button is released.
+		// event:
+		//		mouse Event
+		// tags:
+		//		callback
+	},
+	=====*/
+
+	// Constants used in templates
+
+	// _blankGif: [protected] String
+	//		Path to a blank 1x1 image.
+	//		Used by <img> nodes in templates that really get their image via CSS background-image.
+	_blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(),
+
+	//////////// INITIALIZATION METHODS ///////////////////////////////////////
+
+	postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){
+		// summary:
+		//		Kicks off widget instantiation.  See create() for details.
+		// tags:
+		//		private
+		this.create(params, srcNodeRef);
+	},
+
+	create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){
+		// summary:
+		//		Kick off the life-cycle of a widget
+		// params:
+		//		Hash of initialization parameters for widget, including
+		//		scalar values (like title, duration etc.) and functions,
+		//		typically callbacks like onClick.
+		// srcNodeRef:
+		//		If a srcNodeRef (DOM node) is specified:
+		//			- use srcNodeRef.innerHTML as my contents
+		//			- if this is a behavioral widget then apply behavior
+		//			  to that srcNodeRef
+		//			- otherwise, replace srcNodeRef with my generated DOM
+		//			  tree
+		// description:
+		//		Create calls a number of widget methods (postMixInProperties, buildRendering, postCreate,
+		//		etc.), some of which of you'll want to override. See http://docs.dojocampus.org/dijit/_Widget
+		//		for a discussion of the widget creation lifecycle.
+		//
+		//		Of course, adventurous developers could override create entirely, but this should
+		//		only be done as a last resort.
+		// tags:
+		//		private
+
+		// store pointer to original DOM tree
+		this.srcNodeRef = dojo.byId(srcNodeRef);
+
+		// For garbage collection.  An array of handles returned by Widget.connect()
+		// Each handle returned from Widget.connect() is an array of handles from dojo.connect()
+		this._connects = [];
+
+		// For garbage collection.  An array of handles returned by Widget.subscribe()
+		// The handle returned from Widget.subscribe() is the handle returned from dojo.subscribe()
+		this._subscribes = [];
+
+		// To avoid double-connects, remove entries from _deferredConnects
+		// that have been setup manually by a subclass (ex, by dojoAttachEvent).
+		// If a subclass has redefined a callback (ex: onClick) then assume it's being
+		// connected to manually.
+		this._deferredConnects = dojo.clone(this._deferredConnects);
+		for(var attr in this.attributeMap){
+			delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects
+		}
+		for(attr in this._deferredConnects){
+			if(this[attr] !== dijit._connectOnUseEventHandler){
+				delete this._deferredConnects[attr];	// redefined, probably dojoAttachEvent exists
+			}
+		}
+
+		//mixin our passed parameters
+		if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
+		if(params){
+			this.params = params;
+			dojo.mixin(this,params);
+		}
+		this.postMixInProperties();
+
+		// generate an id for the widget if one wasn't specified
+		// (be sure to do this before buildRendering() because that function might
+		// expect the id to be there.)
+		if(!this.id){
+			this.id = dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+		}
+		dijit.registry.add(this);
+
+		this.buildRendering();
+
+		if(this.domNode){
+			// Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
+			this._applyAttributes();
+
+			var source = this.srcNodeRef;
+			if(source && source.parentNode){
+				source.parentNode.replaceChild(this.domNode, source);
+			}
+
+			// If the developer has specified a handler as a widget parameter
+			// (ex: new Button({onClick: ...})
+			// then naturally need to connect from DOM node to that handler immediately,
+			for(attr in this.params){
+				this._onConnect(attr);
+			}
+		}
+
+		if(this.domNode){
+			this.domNode.setAttribute("widgetId", this.id);
+		}
+		this.postCreate();
+
+		// If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
+		if(this.srcNodeRef && !this.srcNodeRef.parentNode){
+			delete this.srcNodeRef;
+		}
+
+		this._created = true;
+	},
+
+	_applyAttributes: function(){
+		// summary:
+		//		Step during widget creation to copy all widget attributes to the
+		//		DOM as per attributeMap and _setXXXAttr functions.
+		// description:
+		//		Skips over blank/false attribute values, unless they were explicitly specified
+		//		as parameters to the widget, since those are the default anyway,
+		//		and setting tabIndex="" is different than not setting tabIndex at all.
+		//
+		//		It processes the attributes in the attribute map first, and then
+		//		it goes through and processes the attributes for the _setXXXAttr
+		//		functions that have been specified
+		// tags:
+		//		private
+		var condAttrApply = function(attr, scope){
+			if((scope.params && attr in scope.params) || scope[attr]){
+				scope.set(attr, scope[attr]);
+			}
+		};
+
+		// Do the attributes in attributeMap
+		for(var attr in this.attributeMap){
+			condAttrApply(attr, this);
+		}
+
+		// And also any attributes with custom setters
+		dojo.forEach(getSetterAttributes(this), function(a){
+			if(!(a in this.attributeMap)){
+				condAttrApply(a, this);
+			}
+		}, this);
+	},
+
+	postMixInProperties: function(){
+		// summary:
+		//		Called after the parameters to the widget have been read-in,
+		//		but before the widget template is instantiated. Especially
+		//		useful to set properties that are referenced in the widget
+		//		template.
+		// tags:
+		//		protected
+	},
+
+	buildRendering: function(){
+		// summary:
+		//		Construct the UI for this widget, setting this.domNode
+		// description:
+		//		Most widgets will mixin `dijit._Templated`, which implements this
+		//		method.
+		// tags:
+		//		protected
+		this.domNode = this.srcNodeRef || dojo.create('div');
+	},
+
+	postCreate: function(){
+		// summary:
+		//		Processing after the DOM fragment is created
+		// description:
+		//		Called after the DOM fragment has been created, but not necessarily
+		//		added to the document.  Do not include any operations which rely on
+		//		node dimensions or placement.
+		// tags:
+		//		protected
+
+		// baseClass is a single class name or occasionally a space-separated list of names.
+		// Add those classes to the DOMNod.  If RTL mode then also add with Rtl suffix.		
+		if(this.baseClass){
+			var classes = this.baseClass.split(" ");
+			if(!this.isLeftToRight()){
+				classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; }));
+			}
+			dojo.addClass(this.domNode, classes);
+		}
+	},
+
+	startup: function(){
+		// summary:
+		//		Processing after the DOM fragment is added to the document
+		// description:
+		//		Called after a widget and its children have been created and added to the page,
+		//		and all related widgets have finished their create() cycle, up through postCreate().
+		//		This is useful for composite widgets that need to control or layout sub-widgets.
+		//		Many layout widgets can use this as a wiring phase.
+		this._started = true;
+	},
+
+	//////////// DESTROY FUNCTIONS ////////////////////////////////
+
+	destroyRecursive: function(/*Boolean?*/ preserveDom){
+		// summary:
+		// 		Destroy this widget and its descendants
+		// description:
+		//		This is the generic "destructor" function that all widget users
+		// 		should call to cleanly discard with a widget. Once a widget is
+		// 		destroyed, it is removed from the manager object.
+		// preserveDom:
+		//		If true, this method will leave the original DOM structure
+		//		alone of descendant Widgets. Note: This will NOT work with
+		//		dijit._Templated widgets.
+
+		this._beingDestroyed = true;
+		this.destroyDescendants(preserveDom);
+		this.destroy(preserveDom);
+	},
+
+	destroy: function(/*Boolean*/ preserveDom){
+		// summary:
+		// 		Destroy this widget, but not its descendants.
+		//		This method will, however, destroy internal widgets such as those used within a template.
+		// preserveDom: Boolean
+		//		If true, this method will leave the original DOM structure alone.
+		//		Note: This will not yet work with _Templated widgets
+
+		this._beingDestroyed = true;
+		this.uninitialize();
+		var d = dojo,
+			dfe = d.forEach,
+			dun = d.unsubscribe;
+		dfe(this._connects, function(array){
+			dfe(array, d.disconnect);
+		});
+		dfe(this._subscribes, function(handle){
+			dun(handle);
+		});
+
+		// destroy widgets created as part of template, etc.
+		dfe(this._supportingWidgets || [], function(w){
+			if(w.destroyRecursive){
+				w.destroyRecursive();
+			}else if(w.destroy){
+				w.destroy();
+			}
+		});
+
+		this.destroyRendering(preserveDom);
+		dijit.registry.remove(this.id);
+		this._destroyed = true;
+	},
+
+	destroyRendering: function(/*Boolean?*/ preserveDom){
+		// summary:
+		//		Destroys the DOM nodes associated with this widget
+		// preserveDom:
+		//		If true, this method will leave the original DOM structure alone
+		//		during tear-down. Note: this will not work with _Templated
+		//		widgets yet.
+		// tags:
+		//		protected
+
+		if(this.bgIframe){
+			this.bgIframe.destroy(preserveDom);
+			delete this.bgIframe;
+		}
+
+		if(this.domNode){
+			if(preserveDom){
+				dojo.removeAttr(this.domNode, "widgetId");
+			}else{
+				dojo.destroy(this.domNode);
+			}
+			delete this.domNode;
+		}
+
+		if(this.srcNodeRef){
+			if(!preserveDom){
+				dojo.destroy(this.srcNodeRef);
+			}
+			delete this.srcNodeRef;
+		}
+	},
+
+	destroyDescendants: function(/*Boolean?*/ preserveDom){
+		// summary:
+		//		Recursively destroy the children of this widget and their
+		//		descendants.
+		// preserveDom:
+		//		If true, the preserveDom attribute is passed to all descendant
+		//		widget's .destroy() method. Not for use with _Templated
+		//		widgets.
+
+		// get all direct descendants and destroy them recursively
+		dojo.forEach(this.getChildren(), function(widget){
+			if(widget.destroyRecursive){
+				widget.destroyRecursive(preserveDom);
+			}
+		});
+	},
+
+
+	uninitialize: function(){
+		// summary:
+		//		Stub function. Override to implement custom widget tear-down
+		//		behavior.
+		// tags:
+		//		protected
+		return false;
+	},
+
+	////////////////// MISCELLANEOUS METHODS ///////////////////
+
+	onFocus: function(){
+		// summary:
+		//		Called when the widget becomes "active" because
+		//		it or a widget inside of it either has focus, or has recently
+		//		been clicked.
+		// tags:
+		//		callback
+	},
+
+	onBlur: function(){
+		// summary:
+		//		Called when the widget stops being "active" because
+		//		focus moved to something outside of it, or the user
+		//		clicked somewhere outside of it, or the widget was
+		//		hidden.
+		// tags:
+		//		callback
+	},
+
+	_onFocus: function(e){
+		// summary:
+		//		This is where widgets do processing for when they are active,
+		//		such as changing CSS classes.  See onFocus() for more details.
+		// tags:
+		//		protected
+		this.onFocus();
+	},
+
+	_onBlur: function(){
+		// summary:
+		//		This is where widgets do processing for when they stop being active,
+		//		such as changing CSS classes.  See onBlur() for more details.
+		// tags:
+		//		protected
+		this.onBlur();
+	},
+
+	_onConnect: function(/*String*/ event){
+		// summary:
+		//		Called when someone connects to one of my handlers.
+		//		"Turn on" that handler if it isn't active yet.
+		//
+		//		This is also called for every single initialization parameter
+		//		so need to do nothing for parameters like "id".
+		// tags:
+		//		private
+		if(event in this._deferredConnects){
+			var mapNode = this[this._deferredConnects[event] || 'domNode'];
+			this.connect(mapNode, event.toLowerCase(), event);
+			delete this._deferredConnects[event];
+		}
+	},
+
+	_setClassAttr: function(/*String*/ value){
+		// summary:
+		//		Custom setter for the CSS "class" attribute
+		// tags:
+		//		protected
+		var mapNode = this[this.attributeMap["class"] || 'domNode'];
+		dojo.removeClass(mapNode, this["class"])
+		this["class"] = value;
+		dojo.addClass(mapNode, value);
+	},
+
+	_setStyleAttr: function(/*String||Object*/ value){
+		// summary:
+		//		Sets the style attribut of the widget according to value,
+		//		which is either a hash like {height: "5px", width: "3px"}
+		//		or a plain string
+		// description:
+		//		Determines which node to set the style on based on style setting
+		//		in attributeMap.
+		// tags:
+		//		protected
+
+		var mapNode = this[this.attributeMap.style || 'domNode'];
+
+		// Note: technically we should revert any style setting made in a previous call
+		// to his method, but that's difficult to keep track of.
+
+		if(dojo.isObject(value)){
+			dojo.style(mapNode, value);
+		}else{
+			if(mapNode.style.cssText){
+				mapNode.style.cssText += "; " + value;
+			}else{
+				mapNode.style.cssText = value;
+			}
+		}
+
+		this.style = value;
+	},
+
+	setAttribute: function(/*String*/ attr, /*anything*/ value){
+		// summary:
+		//		Deprecated.  Use set() instead.
+		// tags:
+		//		deprecated
+		dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0");
+		this.set(attr, value);
+	},
+
+	_attrToDom: function(/*String*/ attr, /*String*/ value){
+		// summary:
+		//		Reflect a widget attribute (title, tabIndex, duration etc.) to
+		//		the widget DOM, as specified in attributeMap.
+		//
+		// description:
+		//		Also sets this["attr"] to the new value.
+		//		Note some attributes like "type"
+		//		cannot be processed this way as they are not mutable.
+		//
+		// tags:
+		//		private
+
+		var commands = this.attributeMap[attr];
+		dojo.forEach(dojo.isArray(commands) ? commands : [commands], function(command){
+
+			// Get target node and what we are doing to that node
+			var mapNode = this[command.node || command || "domNode"];	// DOM node
+			var type = command.type || "attribute";	// class, innerHTML, innerText, or attribute
+
+			switch(type){
+				case "attribute":
+					if(dojo.isFunction(value)){ // functions execute in the context of the widget
+						value = dojo.hitch(this, value);
+					}
+
+					// Get the name of the DOM node attribute; usually it's the same
+					// as the name of the attribute in the widget (attr), but can be overridden.
+					// Also maps handler names to lowercase, like onSubmit --> onsubmit
+					var attrName = command.attribute ? command.attribute :
+						(/^on[A-Z][a-zA-Z]*$/.test(attr) ? attr.toLowerCase() : attr);
+
+					dojo.attr(mapNode, attrName, value);
+					break;
+				case "innerText":
+					mapNode.innerHTML = "";
+					mapNode.appendChild(dojo.doc.createTextNode(value));
+					break;
+				case "innerHTML":
+					mapNode.innerHTML = value;
+					break;
+				case "class":
+					dojo.removeClass(mapNode, this[attr]);
+					dojo.addClass(mapNode, value);
+					break;
+			}
+		}, this);
+		this[attr] = value;
+	},
+
+	attr: function(/*String|Object*/name, /*Object?*/value){
+		// summary:
+		//		Set or get properties on a widget instance.
+		//	name:
+		//		The property to get or set. If an object is passed here and not
+		//		a string, its keys are used as names of attributes to be set
+		//		and the value of the object as values to set in the widget.
+		//	value:
+		//		Optional. If provided, attr() operates as a setter. If omitted,
+		//		the current value of the named property is returned.
+		// description:
+		//		This method is deprecated, use get() or set() directly.
+
+		// Print deprecation warning but only once per calling function
+		if(dojo.config.isDebug){
+			var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}),
+				caller = (arguments.callee.caller || "unknown caller").toString();
+			if(!alreadyCalledHash[caller]){
+				dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " +
+				caller, "", "2.0");
+				alreadyCalledHash[caller] = true;
+			}
+		}
+
+		var args = arguments.length;
+		if(args >= 2 || typeof name === "object"){ // setter
+			return this.set.apply(this, arguments);
+		}else{ // getter
+			return this.get(name);
+		}
+	},
+	
+	get: function(name){
+		// summary:
+		//		Get a property from a widget.
+		//	name:
+		//		The property to get.
+		// description:
+		//		Get a named property from a widget. The property may
+		//		potentially be retrieved via a getter method. If no getter is defined, this
+		// 		just retrieves the object's property.  
+		// 		For example, if the widget has a properties "foo"
+		//		and "bar" and a method named "_getFooAttr", calling:
+		//	|	myWidget.get("foo");
+		//		would be equivalent to writing:
+		//	|	widget._getFooAttr();
+		//		and:
+		//	|	myWidget.get("bar");
+		//		would be equivalent to writing:
+		//	|	widget.bar;
+		var names = this._getAttrNames(name);
+		return this[names.g] ? this[names.g]() : this[name];
+	},
+	
+	set: function(name, value){
+		// summary:
+		//		Set a property on a widget
+		//	name:
+		//		The property to set. 
+		//	value:
+		//		The value to set in the property.
+		// description:
+		//		Sets named properties on a widget which may potentially be handled by a 
+		// 		setter in the widget.
+		// 		For example, if the widget has a properties "foo"
+		//		and "bar" and a method named "_setFooAttr", calling:
+		//	|	myWidget.set("foo", "Howdy!");
+		//		would be equivalent to writing:
+		//	|	widget._setFooAttr("Howdy!");
+		//		and:
+		//	|	myWidget.set("bar", 3);
+		//		would be equivalent to writing:
+		//	|	widget.bar = 3;
+		//
+		//	set() may also be called with a hash of name/value pairs, ex:
+		//	|	myWidget.set({
+		//	|		foo: "Howdy",
+		//	|		bar: 3
+		//	|	})
+		//	This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
+
+		if(typeof name === "object"){
+			for(var x in name){
+				this.set(x, name[x]); 
+			}
+			return this;
+		}
+		var names = this._getAttrNames(name);
+		if(this[names.s]){
+			// use the explicit setter
+			var result = this[names.s].apply(this, Array.prototype.slice.call(arguments, 1));
+		}else{
+			// if param is specified as DOM node attribute, copy it
+			if(name in this.attributeMap){
+				this._attrToDom(name, value);
+			}
+			var oldValue = this[name];
+			// FIXME: what about function assignments? Any way to connect() here?
+			this[name] = value;
+		}
+		return result || this;
+	},
+	
+	_attrPairNames: {},		// shared between all widgets
+	_getAttrNames: function(name){
+		// summary:
+		//		Helper function for get() and set().
+		//		Caches attribute name values so we don't do the string ops every time.
+		// tags:
+		//		private
+
+		var apn = this._attrPairNames;
+		if(apn[name]){ return apn[name]; }
+		var uc = name.charAt(0).toUpperCase() + name.substr(1);
+		return (apn[name] = {
+			n: name+"Node",
+			s: "_set"+uc+"Attr",
+			g: "_get"+uc+"Attr"
+		});
+	},
+
+	toString: function(){
+		// summary:
+		//		Returns a string that represents the widget
+		// description:
+		//		When a widget is cast to a string, this method will be used to generate the
+		//		output. Currently, it does not implement any sort of reversible
+		//		serialization.
+		return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
+	},
+
+	getDescendants: function(){
+		// summary:
+		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+		//		This method should generally be avoided as it returns widgets declared in templates, which are
+		//		supposed to be internal/hidden, but it's left here for back-compat reasons.
+
+		return this.containerNode ? dojo.query('[widgetId]', this.containerNode).map(dijit.byNode) : []; // dijit._Widget[]
+	},
+
+	getChildren: function(){
+		// summary:
+		//		Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
+		//		Does not return nested widgets, nor widgets that are part of this widget's template.
+		return this.containerNode ? dijit.findWidgets(this.containerNode) : []; // dijit._Widget[]
+	},
+
+	// nodesWithKeyClick: [private] String[]
+	//		List of nodes that correctly handle click events via native browser support,
+	//		and don't need dijit's help
+	nodesWithKeyClick: ["input", "button"],
+
+	connect: function(
+			/*Object|null*/ obj,
+			/*String|Function*/ event,
+			/*String|Function*/ method){
+		// summary:
+		//		Connects specified obj/event to specified method of this object
+		//		and registers for disconnect() on widget destroy.
+		// description:
+		//		Provide widget-specific analog to dojo.connect, except with the
+		//		implicit use of this widget as the target object.
+		//		This version of connect also provides a special "ondijitclick"
+		//		event which triggers on a click or space or enter keyup
+		// returns:
+		//		A handle that can be passed to `disconnect` in order to disconnect before
+		//		the widget is destroyed.
+		// example:
+		//	|	var btn = new dijit.form.Button();
+		//	|	// when foo.bar() is called, call the listener we're going to
+		//	|	// provide in the scope of btn
+		//	|	btn.connect(foo, "bar", function(){
+		//	|		console.debug(this.toString());
+		//	|	});
+		// tags:
+		//		protected
+
+		var d = dojo,
+			dc = d._connect,
+			handles = [];
+		if(event == "ondijitclick"){
+			// add key based click activation for unsupported nodes.
+			// do all processing onkey up to prevent spurious clicks
+			// for details see comments at top of this file where _lastKeyDownNode is defined
+			if(dojo.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button
+				var m = d.hitch(this, method);
+				handles.push(
+					dc(obj, "onkeydown", this, function(e){
+						//console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+						if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+							// needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work
+							dijit._lastKeyDownNode = e.target;
+							e.preventDefault();		// stop event to prevent scrolling on space key in IE
+						}
+			 		}),
+					dc(obj, "onkeyup", this, function(e){
+						//console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode));
+						if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) &&
+							e.target === dijit._lastKeyDownNode &&
+							!e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){
+								//need reset here or have problems in FF when focus returns to trigger element after closing popup/alert
+								dijit._lastKeyDownNode = null;
+								return m(e);
+						}
+					})
+				);
+			}
+			event = "onclick";
+		}
+		handles.push(dc(obj, event, this, method));
+
+		this._connects.push(handles);
+		return handles;		// _Widget.Handle
+	},
+
+	disconnect: function(/* _Widget.Handle */ handles){
+		// summary:
+		//		Disconnects handle created by `connect`.
+		//		Also removes handle from this widget's list of connects.
+		// tags:
+		//		protected
+		for(var i=0; i<this._connects.length; i++){
+			if(this._connects[i] == handles){
+				dojo.forEach(handles, dojo.disconnect);
+				this._connects.splice(i, 1);
+				return;
+			}
+		}
+	},
+
+	subscribe: function(
+			/*String*/ topic,
+			/*String|Function*/ method){
+		// summary:
+		//		Subscribes to the specified topic and calls the specified method
+		//		of this object and registers for unsubscribe() on widget destroy.
+		// description:
+		//		Provide widget-specific analog to dojo.subscribe, except with the
+		//		implicit use of this widget as the target object.
+		// example:
+		//	|	var btn = new dijit.form.Button();
+		//	|	// when /my/topic is published, this button changes its label to
+		//	|   // be the parameter of the topic.
+		//	|	btn.subscribe("/my/topic", function(v){
+		//	|		this.set("label", v);
+		//	|	});
+		var d = dojo,
+			handle = d.subscribe(topic, this, method);
+
+		// return handles for Any widget that may need them
+		this._subscribes.push(handle);
+		return handle;
+	},
+
+	unsubscribe: function(/*Object*/ handle){
+		// summary:
+		//		Unsubscribes handle created by this.subscribe.
+		//		Also removes handle from this widget's list of subscriptions
+		for(var i=0; i<this._subscribes.length; i++){
+			if(this._subscribes[i] == handle){
+				dojo.unsubscribe(handle);
+				this._subscribes.splice(i, 1);
+				return;
+			}
+		}
+	},
+
+	isLeftToRight: function(){
+		// summary:
+		//		Return this widget's explicit or implicit orientation (true for LTR, false for RTL)
+		// tags:
+		//		protected
+		return this.dir ? (this.dir == "ltr") : dojo._isBodyLtr(); //Boolean
+	},
+
+	isFocusable: function(){
+		// summary:
+		//		Return true if this widget can currently be focused
+		//		and false if not
+		return this.focus && (dojo.style(this.domNode, "display") != "none");
+	},
+
+	placeAt: function(/* String|DomNode|_Widget */reference, /* String?|Int? */position){
+		// summary:
+		//		Place this widget's domNode reference somewhere in the DOM based
+		//		on standard dojo.place conventions, or passing a Widget reference that
+		//		contains and addChild member.
+		//
+		// description:
+		//		A convenience function provided in all _Widgets, providing a simple
+		//		shorthand mechanism to put an existing (or newly created) Widget
+		//		somewhere in the dom, and allow chaining.
+		//
+		// reference:
+		//		The String id of a domNode, a domNode reference, or a reference to a Widget posessing
+		//		an addChild method.
+		//
+		// position:
+		//		If passed a string or domNode reference, the position argument
+		//		accepts a string just as dojo.place does, one of: "first", "last",
+		//		"before", or "after".
+		//
+		//		If passed a _Widget reference, and that widget reference has an ".addChild" method,
+		//		it will be called passing this widget instance into that method, supplying the optional
+		//		position index passed.
+		//
+		// returns:
+		//		dijit._Widget
+		//		Provides a useful return of the newly created dijit._Widget instance so you
+		//		can "chain" this function by instantiating, placing, then saving the return value
+		//		to a variable.
+		//
+		// example:
+		// | 	// create a Button with no srcNodeRef, and place it in the body:
+		// | 	var button = new dijit.form.Button({ label:"click" }).placeAt(dojo.body());
+		// | 	// now, 'button' is still the widget reference to the newly created button
+		// | 	dojo.connect(button, "onClick", function(e){ console.log('click'); });
+		//
+		// example:
+		// |	// create a button out of a node with id="src" and append it to id="wrapper":
+		// | 	var button = new dijit.form.Button({},"src").placeAt("wrapper");
+		//
+		// example:
+		// |	// place a new button as the first element of some div
+		// |	var button = new dijit.form.Button({ label:"click" }).placeAt("wrapper","first");
+		//
+		// example:
+		// |	// create a contentpane and add it to a TabContainer
+		// |	var tc = dijit.byId("myTabs");
+		// |	new dijit.layout.ContentPane({ href:"foo.html", title:"Wow!" }).placeAt(tc)
+
+		if(reference.declaredClass && reference.addChild){
+			reference.addChild(this, position);
+		}else{
+			dojo.place(this.domNode, reference, position);
+		}
+		return this;
+	},
+
+	_onShow: function(){
+		// summary:
+		//		Internal method called when this widget is made visible.
+		//		See `onShow` for details.
+		this.onShow();
+	},
+
+	onShow: function(){
+		// summary:
+		//		Called when this widget becomes the selected pane in a
+		//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+		//		`dijit.layout.AccordionContainer`, etc.
+		//
+		//		Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+		// tags:
+		//		callback
+	},
+
+	onHide: function(){
+		// summary:
+			//		Called when another widget becomes the selected pane in a
+			//		`dijit.layout.TabContainer`, `dijit.layout.StackContainer`,
+			//		`dijit.layout.AccordionContainer`, etc.
+			//
+			//		Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
+			// tags:
+			//		callback
+	},
+
+	onClose: function(){
+		// summary:
+		//		Called when this widget is being displayed as a popup (ex: a Calendar popped
+		//		up from a DateTextBox), and it is hidden.
+		//		This is called from the dijit.popup code, and should not be called directly.
+		//
+		//		Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses.
+		//		Callback if a user tries to close the child.   Child will be closed if this function returns true.
+		// tags:
+		//		extension
+
+		return true;		// Boolean
+	}
+});
+
+})();
+
+}
+
+if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.string"] = true;
+dojo.provide("dojo.string");
+
+/*=====
+dojo.string = { 
+	// summary: String utilities for Dojo
+};
+=====*/
+
+dojo.string.rep = function(/*String*/str, /*Integer*/num){
+	//	summary:
+	//		Efficiently replicate a string `n` times.
+	//	str:
+	//		the string to replicate
+	//	num:
+	//		number of times to replicate the string
+	
+	if(num <= 0 || !str){ return ""; }
+	
+	var buf = [];
+	for(;;){
+		if(num & 1){
+			buf.push(str);
+		}
+		if(!(num >>= 1)){ break; }
+		str += str;
+	}
+	return buf.join("");	// String
+};
+
+dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){
+	//	summary:
+	//		Pad a string to guarantee that it is at least `size` length by
+	//		filling with the character `ch` at either the start or end of the
+	//		string. Pads at the start, by default.
+	//	text:
+	//		the string to pad
+	//	size:
+	//		length to provide padding
+	//	ch:
+	//		character to pad, defaults to '0'
+	//	end:
+	//		adds padding at the end if true, otherwise pads at start
+	//	example:
+	//	|	// Fill the string to length 10 with "+" characters on the right.  Yields "Dojo++++++".
+	//	|	dojo.string.pad("Dojo", 10, "+", true);
+
+	if(!ch){
+		ch = '0';
+	}
+	var out = String(text),
+		pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length));
+	return end ? out + pad : pad + out;	// String
+};
+
+dojo.string.substitute = function(	/*String*/		template, 
+									/*Object|Array*/map, 
+									/*Function?*/	transform, 
+									/*Object?*/		thisObject){
+	//	summary:
+	//		Performs parameterized substitutions on a string. Throws an
+	//		exception if any parameter is unmatched.
+	//	template: 
+	//		a string with expressions in the form `${key}` to be replaced or
+	//		`${key:format}` which specifies a format function. keys are case-sensitive. 
+	//	map:
+	//		hash to search for substitutions
+	//	transform: 
+	//		a function to process all parameters before substitution takes
+	//		place, e.g. mylib.encodeXML
+	//	thisObject: 
+	//		where to look for optional format function; default to the global
+	//		namespace
+	//	example:
+	//		Substitutes two expressions in a string from an Array or Object
+	//	|	// returns "File 'foo.html' is not found in directory '/temp'."
+	//	|	// by providing substitution data in an Array
+	//	|	dojo.string.substitute(
+	//	|		"File '${0}' is not found in directory '${1}'.",
+	//	|		["foo.html","/temp"]
+	//	|	);
+	//	|
+	//	|	// also returns "File 'foo.html' is not found in directory '/temp'."
+	//	|	// but provides substitution data in an Object structure.  Dotted
+	//	|	// notation may be used to traverse the structure.
+	//	|	dojo.string.substitute(
+	//	|		"File '${name}' is not found in directory '${info.dir}'.",
+	//	|		{ name: "foo.html", info: { dir: "/temp" } }
+	//	|	);
+	//	example:
+	//		Use a transform function to modify the values:
+	//	|	// returns "file 'foo.html' is not found in directory '/temp'."
+	//	|	dojo.string.substitute(
+	//	|		"${0} is not found in ${1}.",
+	//	|		["foo.html","/temp"],
+	//	|		function(str){
+	//	|			// try to figure out the type
+	//	|			var prefix = (str.charAt(0) == "/") ? "directory": "file";
+	//	|			return prefix + " '" + str + "'";
+	//	|		}
+	//	|	);
+	//	example:
+	//		Use a formatter
+	//	|	// returns "thinger -- howdy"
+	//	|	dojo.string.substitute(
+	//	|		"${0:postfix}", ["thinger"], null, {
+	//	|			postfix: function(value, key){
+	//	|				return value + " -- howdy";
+	//	|			}
+	//	|		}
+	//	|	);
+
+	thisObject = thisObject || dojo.global;
+	transform = transform ? 
+		dojo.hitch(thisObject, transform) : function(v){ return v; };
+
+	return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,
+		function(match, key, format){
+			var value = dojo.getObject(key, false, map);
+			if(format){
+				value = dojo.getObject(format, false, thisObject).call(thisObject, value, key);
+			}
+			return transform(value, key).toString();
+		}); // String
+};
+
+/*=====
+dojo.string.trim = function(str){
+	//	summary:
+	//		Trims whitespace from both sides of the string
+	//	str: String
+	//		String to be trimmed
+	//	returns: String
+	//		Returns the trimmed string
+	//	description:
+	//		This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript).
+	//		The short yet performant version of this function is dojo.trim(),
+	//		which is part of Dojo base.  Uses String.prototype.trim instead, if available.
+	return "";	// String
+}
+=====*/
+
+dojo.string.trim = String.prototype.trim ?
+	dojo.trim : // aliasing to the native function
+	function(str){
+		str = str.replace(/^\s+/, '');
+		for(var i = str.length - 1; i >= 0; i--){
+			if(/\S/.test(str.charAt(i))){
+				str = str.substring(0, i + 1);
+				break;
+			}
+		}
+		return str;
+	};
+
+}
+
+if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.cache"] = true;
+dojo.provide("dojo.cache");
+
+/*=====
+dojo.cache = { 
+	// summary:
+	// 		A way to cache string content that is fetchable via `dojo.moduleUrl`.
+};
+=====*/
+
+(function(){
+	var cache = {};
+	dojo.cache = function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){
+		// summary:
+		// 		A getter and setter for storing the string content associated with the
+		// 		module and url arguments.
+		// description:
+		// 		module and url are used to call `dojo.moduleUrl()` to generate a module URL.
+		// 		If value is specified, the cache value for the moduleUrl will be set to
+		// 		that value. Otherwise, dojo.cache will fetch the moduleUrl and store it
+		// 		in its internal cache and return that cached value for the URL. To clear
+		// 		a cache value pass null for value. Since XMLHttpRequest (XHR) is used to fetch the
+		// 		the URL contents, only modules on the same domain of the page can use this capability.
+		// 		The build system can inline the cache values though, to allow for xdomain hosting.
+		// module: String||Object
+		// 		If a String, the module name to use for the base part of the URL, similar to module argument
+		// 		to `dojo.moduleUrl`. If an Object, something that has a .toString() method that
+		// 		generates a valid path for the cache item. For example, a dojo._Url object.
+		// url: String
+		// 		The rest of the path to append to the path derived from the module argument. If
+		// 		module is an object, then this second argument should be the "value" argument instead.
+		// value: String||Object?
+		// 		If a String, the value to use in the cache for the module/url combination.
+		// 		If an Object, it can have two properties: value and sanitize. The value property
+		// 		should be the value to use in the cache, and sanitize can be set to true or false,
+		// 		to indicate if XML declarations should be removed from the value and if the HTML
+		// 		inside a body tag in the value should be extracted as the real value. The value argument
+		// 		or the value property on the value argument are usually only used by the build system
+		// 		as it inlines cache content.
+		//	example:
+		//		To ask dojo.cache to fetch content and store it in the cache (the dojo["cache"] style
+		// 		of call is used to avoid an issue with the build system erroneously trying to intern
+		// 		this example. To get the build system to intern your dojo.cache calls, use the
+		// 		"dojo.cache" style of call):
+		// 		|	//If template.html contains "<h1>Hello</h1>" that will be
+		// 		|	//the value for the text variable.
+		//		|	var text = dojo["cache"]("my.module", "template.html");
+		//	example:
+		//		To ask dojo.cache to fetch content and store it in the cache, and sanitize the input
+		// 		 (the dojo["cache"] style of call is used to avoid an issue with the build system 
+		// 		erroneously trying to intern this example. To get the build system to intern your
+		// 		dojo.cache calls, use the "dojo.cache" style of call):
+		// 		|	//If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+		// 		|	//text variable will contain just "<h1>Hello</h1>".
+		//		|	var text = dojo["cache"]("my.module", "template.html", {sanitize: true});
+		//	example:
+		//		Same example as previous, but demostrates how an object can be passed in as
+		//		the first argument, then the value argument can then be the second argument.
+		// 		|	//If template.html contains "<html><body><h1>Hello</h1></body></html>", the
+		// 		|	//text variable will contain just "<h1>Hello</h1>".
+		//		|	var text = dojo["cache"](new dojo._Url("my/module/template.html"), {sanitize: true});
+
+		//Module could be a string, or an object that has a toString() method
+		//that will return a useful path. If it is an object, then the "url" argument
+		//will actually be the value argument.
+		if(typeof module == "string"){
+			var pathObj = dojo.moduleUrl(module, url);
+		}else{
+			pathObj = module;
+			value = url;
+		}
+		var key = pathObj.toString();
+
+		var val = value;
+		if(value != undefined && !dojo.isString(value)){
+			val = ("value" in value ? value.value : undefined);
+		}
+
+		var sanitize = value && value.sanitize ? true : false;
+
+		if(typeof val == "string"){
+			//We have a string, set cache value
+			val = cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+		}else if(val === null){
+			//Remove cached value
+			delete cache[key];
+		}else{
+			//Allow cache values to be empty strings. If key property does
+			//not exist, fetch it.
+			if(!(key in cache)){
+				val = dojo._getText(key);
+				cache[key] = sanitize ? dojo.cache._sanitize(val) : val;
+			}
+			val = cache[key];
+		}
+		return val; //String
+	};
+
+	dojo.cache._sanitize = function(/*String*/val){
+		// summary: 
+		//		Strips <?xml ...?> declarations so that external SVG and XML
+		// 		documents can be added to a document without worry. Also, if the string
+		//		is an HTML document, only the part inside the body tag is returned.
+		// description:
+		// 		Copied from dijit._Templated._sanitizeTemplateString.
+		if(val){
+			val = val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
+			var matches = val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
+			if(matches){
+				val = matches[1];
+			}
+		}else{
+			val = "";
+		}
+		return val; //String
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Templated"] = true;
+dojo.provide("dijit._Templated");
+
+
+
+
+
+
+dojo.declare("dijit._Templated",
+	null,
+	{
+		// summary:
+		//		Mixin for widgets that are instantiated from a template
+
+		// templateString: [protected] String
+		//		A string that represents the widget template. Pre-empts the
+		//		templatePath. In builds that have their strings "interned", the
+		//		templatePath is converted to an inline templateString, thereby
+		//		preventing a synchronous network call.
+		//
+		//		Use in conjunction with dojo.cache() to load from a file.
+		templateString: null,
+
+		// templatePath: [protected deprecated] String
+		//		Path to template (HTML file) for this widget relative to dojo.baseUrl.
+		//		Deprecated: use templateString with dojo.cache() instead.
+		templatePath: null,
+
+		// widgetsInTemplate: [protected] Boolean
+		//		Should we parse the template to find widgets that might be
+		//		declared in markup inside it?  False by default.
+		widgetsInTemplate: false,
+
+		// skipNodeCache: [protected] Boolean
+		//		If using a cached widget template node poses issues for a
+		//		particular widget class, it can set this property to ensure
+		//		that its template is always re-built from a string
+		_skipNodeCache: false,
+
+		// _earlyTemplatedStartup: Boolean
+		//		A fallback to preserve the 1.0 - 1.3 behavior of children in
+		//		templates having their startup called before the parent widget
+		//		fires postCreate. Defaults to 'false', causing child widgets to
+		//		have their .startup() called immediately before a parent widget
+		//		.startup(), but always after the parent .postCreate(). Set to
+		//		'true' to re-enable to previous, arguably broken, behavior.
+		_earlyTemplatedStartup: false,
+
+		// _attachPoints: [private] String[]
+		//		List of widget attribute names associated with dojoAttachPoint=... in the
+		//		template, ex: ["containerNode", "labelNode"]
+/*=====
+ 		_attachPoints: [],
+ =====*/
+
+		constructor: function(){
+			this._attachPoints = [];
+		},
+
+		_stringRepl: function(tmpl){
+			// summary:
+			//		Does substitution of ${foo} type properties in template string
+			// tags:
+			//		private
+			var className = this.declaredClass, _this = this;
+			// Cache contains a string because we need to do property replacement
+			// do the property replacement
+			return dojo.string.substitute(tmpl, this, function(value, key){
+				if(key.charAt(0) == '!'){ value = dojo.getObject(key.substr(1), false, _this); }
+				if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
+				if(value == null){ return ""; }
+
+				// Substitution keys beginning with ! will skip the transform step,
+				// in case a user wishes to insert unescaped markup, e.g. ${!foo}
+				return key.charAt(0) == "!" ? value :
+					// Safer substitution, see heading "Attribute values" in
+					// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+					value.toString().replace(/"/g,"&quot;"); //TODO: add &amp? use encodeXML method?
+			}, this);
+		},
+
+		// method over-ride
+		buildRendering: function(){
+			// summary:
+			//		Construct the UI for this widget from a template, setting this.domNode.
+			// tags:
+			//		protected
+
+			// Lookup cached version of template, and download to cache if it
+			// isn't there already.  Returns either a DomNode or a string, depending on
+			// whether or not the template contains ${foo} replacement parameters.
+			var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
+
+			var node;
+			if(dojo.isString(cached)){
+				node = dojo._toDom(this._stringRepl(cached));
+				if(node.nodeType != 1){
+					// Flag common problems such as templates with multiple top level nodes (nodeType == 11)
+					throw new Error("Invalid template: " + cached);
+				}
+			}else{
+				// if it's a node, all we have to do is clone it
+				node = cached.cloneNode(true);
+			}
+
+			this.domNode = node;
+
+			// recurse through the node, looking for, and attaching to, our
+			// attachment points and events, which should be defined on the template node.
+			this._attachTemplateNodes(node);
+
+			if(this.widgetsInTemplate){
+				// Make sure dojoType is used for parsing widgets in template.
+				// The dojo.parser.query could be changed from multiversion support.
+				var parser = dojo.parser, qry, attr;
+				if(parser._query != "[dojoType]"){
+					qry = parser._query;
+					attr = parser._attrName;
+					parser._query = "[dojoType]";
+					parser._attrName = "dojoType";
+				}
+
+				// Store widgets that we need to start at a later point in time
+				var cw = (this._startupWidgets = dojo.parser.parse(node, {
+					noStart: !this._earlyTemplatedStartup,
+					inherited: {dir: this.dir, lang: this.lang}
+				}));
+
+				// Restore the query.
+				if(qry){
+					parser._query = qry;
+					parser._attrName = attr;
+				}
+
+				this._supportingWidgets = dijit.findWidgets(node);
+
+				this._attachTemplateNodes(cw, function(n,p){
+					return n[p];
+				});
+			}
+
+			this._fillContent(this.srcNodeRef);
+		},
+
+		_fillContent: function(/*DomNode*/ source){
+			// summary:
+			//		Relocate source contents to templated container node.
+			//		this.containerNode must be able to receive children, or exceptions will be thrown.
+			// tags:
+			//		protected
+			var dest = this.containerNode;
+			if(source && dest){
+				while(source.hasChildNodes()){
+					dest.appendChild(source.firstChild);
+				}
+			}
+		},
+
+		_attachTemplateNodes: function(rootNode, getAttrFunc){
+			// summary:
+			//		Iterate through the template and attach functions and nodes accordingly.
+			// description:
+			//		Map widget properties and functions to the handlers specified in
+			//		the dom node and it's descendants. This function iterates over all
+			//		nodes and looks for these properties:
+			//			* dojoAttachPoint
+			//			* dojoAttachEvent
+			//			* waiRole
+			//			* waiState
+			// rootNode: DomNode|Array[Widgets]
+			//		the node to search for properties. All children will be searched.
+			// getAttrFunc: Function?
+			//		a function which will be used to obtain property for a given
+			//		DomNode/Widget
+			// tags:
+			//		private
+
+			getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
+
+			var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
+			var x = dojo.isArray(rootNode) ? 0 : -1;
+			for(; x<nodes.length; x++){
+				var baseNode = (x == -1) ? rootNode : nodes[x];
+				if(this.widgetsInTemplate && getAttrFunc(baseNode, "dojoType")){
+					continue;
+				}
+				// Process dojoAttachPoint
+				var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
+				if(attachPoint){
+					var point, points = attachPoint.split(/\s*,\s*/);
+					while((point = points.shift())){
+						if(dojo.isArray(this[point])){
+							this[point].push(baseNode);
+						}else{
+							this[point]=baseNode;
+						}
+						this._attachPoints.push(point);
+					}
+				}
+
+				// Process dojoAttachEvent
+				var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
+				if(attachEvent){
+					// NOTE: we want to support attributes that have the form
+					// "domEvent: nativeEvent; ..."
+					var event, events = attachEvent.split(/\s*,\s*/);
+					var trim = dojo.trim;
+					while((event = events.shift())){
+						if(event){
+							var thisFunc = null;
+							if(event.indexOf(":") != -1){
+								// oh, if only JS had tuple assignment
+								var funcNameArr = event.split(":");
+								event = trim(funcNameArr[0]);
+								thisFunc = trim(funcNameArr[1]);
+							}else{
+								event = trim(event);
+							}
+							if(!thisFunc){
+								thisFunc = event;
+							}
+							this.connect(baseNode, event, thisFunc);
+						}
+					}
+				}
+
+				// waiRole, waiState
+				var role = getAttrFunc(baseNode, "waiRole");
+				if(role){
+					dijit.setWaiRole(baseNode, role);
+				}
+				var values = getAttrFunc(baseNode, "waiState");
+				if(values){
+					dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
+						if(stateValue.indexOf('-') != -1){
+							var pair = stateValue.split('-');
+							dijit.setWaiState(baseNode, pair[0], pair[1]);
+						}
+					});
+				}
+			}
+		},
+
+		startup: function(){
+			dojo.forEach(this._startupWidgets, function(w){
+				if(w && !w._started && w.startup){
+					w.startup();
+				}
+			});
+			this.inherited(arguments);
+		},
+
+		destroyRendering: function(){
+			// Delete all attach points to prevent IE6 memory leaks.
+			dojo.forEach(this._attachPoints, function(point){
+				delete this[point];
+			}, this);
+			this._attachPoints = [];
+
+			this.inherited(arguments);
+		}
+	}
+);
+
+// key is either templatePath or templateString; object is either string or DOM tree
+dijit._Templated._templateCache = {};
+
+dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
+	// summary:
+	//		Static method to get a template based on the templatePath or
+	//		templateString key
+	// templatePath: String||dojo.uri.Uri
+	//		The URL to get the template from.
+	// templateString: String?
+	//		a string to use in lieu of fetching the template from a URL. Takes precedence
+	//		over templatePath
+	// returns: Mixed
+	//		Either string (if there are ${} variables that need to be replaced) or just
+	//		a DOM tree (if the node can be cloned directly)
+
+	// is it already cached?
+	var tmplts = dijit._Templated._templateCache;
+	var key = templateString || templatePath;
+	var cached = tmplts[key];
+	if(cached){
+		try{
+			// if the cached value is an innerHTML string (no ownerDocument) or a DOM tree created within the current document, then use the current cached value
+			if(!cached.ownerDocument || cached.ownerDocument == dojo.doc){
+				// string or node of the same document
+				return cached;
+			}
+		}catch(e){ /* squelch */ } // IE can throw an exception if cached.ownerDocument was reloaded
+		dojo.destroy(cached);
+	}
+
+	// If necessary, load template string from template path
+	if(!templateString){
+		templateString = dojo.cache(templatePath, {sanitize: true});
+	}
+	templateString = dojo.string.trim(templateString);
+
+	if(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)){
+		// there are variables in the template so all we can do is cache the string
+		return (tmplts[key] = templateString); //String
+	}else{
+		// there are no variables in the template so we can cache the DOM tree
+		var node = dojo._toDom(templateString);
+		if(node.nodeType != 1){
+			throw new Error("Invalid template: " + templateString);
+		}
+		return (tmplts[key] = node); //Node
+	}
+};
+
+if(dojo.isIE){
+	dojo.addOnWindowUnload(function(){
+		var cache = dijit._Templated._templateCache;
+		for(var key in cache){
+			var value = cache[key];
+			if(typeof value == "object"){ // value is either a string or a DOM node template
+				dojo.destroy(value);
+			}
+			delete cache[key];
+		}
+	});
+}
+
+// These arguments can be specified for widgets which are used in templates.
+// Since any widget can be specified as sub widgets in template, mix it
+// into the base widget class.  (This is a hack, but it's effective.)
+dojo.extend(dijit._Widget,{
+	dojoAttachEvent: "",
+	dojoAttachPoint: "",
+	waiRole: "",
+	waiState:""
+});
+
+}
+
+if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Container"] = true;
+dojo.provide("dijit._Container");
+
+dojo.declare("dijit._Container",
+	null,
+	{
+		// summary:
+		//		Mixin for widgets that contain a set of widget children.
+		// description:
+		//		Use this mixin for widgets that needs to know about and
+		//		keep track of their widget children. Suitable for widgets like BorderContainer
+		//		and TabContainer which contain (only) a set of child widgets.
+		//
+		//		It's not suitable for widgets like ContentPane
+		//		which contains mixed HTML (plain DOM nodes in addition to widgets),
+		//		and where contained widgets are not necessarily directly below
+		//		this.containerNode.   In that case calls like addChild(node, position)
+		//		wouldn't make sense.
+
+		// isContainer: [protected] Boolean
+		//		Indicates that this widget acts as a "parent" to the descendant widgets.
+		//		When the parent is started it will call startup() on the child widgets.
+		//		See also `isLayoutContainer`.
+		isContainer: true,
+
+		buildRendering: function(){
+			this.inherited(arguments);
+			if(!this.containerNode){
+				// all widgets with descendants must set containerNode
+	 				this.containerNode = this.domNode;
+			}
+		},
+
+		addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
+			// summary:
+			//		Makes the given widget a child of this widget.
+			// description:
+			//		Inserts specified child widget's dom node as a child of this widget's
+			//		container node, and possibly does other processing (such as layout).
+
+			var refNode = this.containerNode;
+			if(insertIndex && typeof insertIndex == "number"){
+				var children = this.getChildren();
+				if(children && children.length >= insertIndex){
+					refNode = children[insertIndex-1].domNode;
+					insertIndex = "after";
+				}
+			}
+			dojo.place(widget.domNode, refNode, insertIndex);
+
+			// If I've been started but the child widget hasn't been started,
+			// start it now.  Make sure to do this after widget has been
+			// inserted into the DOM tree, so it can see that it's being controlled by me,
+			// so it doesn't try to size itself.
+			if(this._started && !widget._started){
+				widget.startup();
+			}
+		},
+
+		removeChild: function(/*Widget or int*/ widget){
+			// summary:
+			//		Removes the passed widget instance from this widget but does
+			//		not destroy it.  You can also pass in an integer indicating
+			//		the index within the container to remove
+
+			if(typeof widget == "number" && widget > 0){
+				widget = this.getChildren()[widget];
+			}
+
+			if(widget){
+				var node = widget.domNode;
+				if(node && node.parentNode){
+					node.parentNode.removeChild(node); // detach but don't destroy
+				}
+			}
+		},
+
+		hasChildren: function(){
+			// summary:
+			//		Returns true if widget has children, i.e. if this.containerNode contains something.
+			return this.getChildren().length > 0;	// Boolean
+		},
+
+		destroyDescendants: function(/*Boolean*/ preserveDom){
+			// summary:
+			//      Destroys all the widgets inside this.containerNode,
+			//      but not this widget itself
+			dojo.forEach(this.getChildren(), function(child){ child.destroyRecursive(preserveDom); });
+		},
+
+		_getSiblingOfChild: function(/*dijit._Widget*/ child, /*int*/ dir){
+			// summary:
+			//		Get the next or previous widget sibling of child
+			// dir:
+			//		if 1, get the next sibling
+			//		if -1, get the previous sibling
+			// tags:
+			//      private
+			var node = child.domNode,
+				which = (dir>0 ? "nextSibling" : "previousSibling");
+			do{
+				node = node[which];
+			}while(node && (node.nodeType != 1 || !dijit.byNode(node)));
+			return node && dijit.byNode(node);	// dijit._Widget
+		},
+
+		getIndexOfChild: function(/*dijit._Widget*/ child){
+			// summary:
+			//		Gets the index of the child in this container or -1 if not found
+			return dojo.indexOf(this.getChildren(), child);	// int
+		},
+
+		startup: function(){
+			// summary:
+			//		Called after all the widgets have been instantiated and their
+			//		dom nodes have been inserted somewhere under dojo.doc.body.
+			//
+			//		Widgets should override this method to do any initialization
+			//		dependent on other widgets existing, and then call
+			//		this superclass method to finish things off.
+			//
+			//		startup() in subclasses shouldn't do anything
+			//		size related because the size of the widget hasn't been set yet.
+
+			if(this._started){ return; }
+
+			// Startup all children of this widget
+			dojo.forEach(this.getChildren(), function(child){ child.startup(); });
+
+			this.inherited(arguments);
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit._Contained"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._Contained"] = true;
+dojo.provide("dijit._Contained");
+
+dojo.declare("dijit._Contained",
+		null,
+		{
+			// summary:
+			//		Mixin for widgets that are children of a container widget
+			//
+			// example:
+			// | 	// make a basic custom widget that knows about it's parents
+			// |	dojo.declare("my.customClass",[dijit._Widget,dijit._Contained],{});
+
+			getParent: function(){
+				// summary:
+				//		Returns the parent widget of this widget, assuming the parent
+				//		specifies isContainer
+				var parent = dijit.getEnclosingWidget(this.domNode.parentNode);
+				return parent && parent.isContainer ? parent : null;
+			},
+
+			_getSibling: function(/*String*/ which){
+				// summary:
+				//      Returns next or previous sibling
+				// which:
+				//      Either "next" or "previous"
+				// tags:
+				//      private
+				var node = this.domNode;
+				do{
+					node = node[which+"Sibling"];
+				}while(node && node.nodeType != 1);
+				return node && dijit.byNode(node);	// dijit._Widget
+			},
+
+			getPreviousSibling: function(){
+				// summary:
+				//		Returns null if this is the first child of the parent,
+				//		otherwise returns the next element sibling to the "left".
+
+				return this._getSibling("previous"); // dijit._Widget
+			},
+
+			getNextSibling: function(){
+				// summary:
+				//		Returns null if this is the last child of the parent,
+				//		otherwise returns the next element sibling to the "right".
+
+				return this._getSibling("next"); // dijit._Widget
+			},
+
+			getIndexInParent: function(){
+				// summary:
+				//		Returns the index of this widget within its container parent.
+				//		It returns -1 if the parent does not exist, or if the parent
+				//		is not a dijit._Container
+
+				var p = this.getParent();
+				if(!p || !p.getIndexOfChild){
+					return -1; // int
+				}
+				return p.getIndexOfChild(this); // int
+			}
+		}
+	);
+
+
+}
+
+if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.layout._LayoutWidget"] = true;
+dojo.provide("dijit.layout._LayoutWidget");
+
+
+
+
+
+dojo.declare("dijit.layout._LayoutWidget",
+	[dijit._Widget, dijit._Container, dijit._Contained],
+	{
+		// summary:
+		//		Base class for a _Container widget which is responsible for laying out its children.
+		//		Widgets which mixin this code must define layout() to manage placement and sizing of the children.
+
+		// baseClass: [protected extension] String
+		//		This class name is applied to the widget's domNode
+		//		and also may be used to generate names for sub nodes,
+		//		for example dijitTabContainer-content.
+		baseClass: "dijitLayoutContainer",
+
+		// isLayoutContainer: [protected] Boolean
+		//		Indicates that this widget is going to call resize() on its
+		//		children widgets, setting their size, when they become visible.
+		isLayoutContainer: true,
+
+		postCreate: function(){
+			dojo.addClass(this.domNode, "dijitContainer");
+
+			this.inherited(arguments);
+		},
+
+		startup: function(){
+			// summary:
+			//		Called after all the widgets have been instantiated and their
+			//		dom nodes have been inserted somewhere under dojo.doc.body.
+			//
+			//		Widgets should override this method to do any initialization
+			//		dependent on other widgets existing, and then call
+			//		this superclass method to finish things off.
+			//
+			//		startup() in subclasses shouldn't do anything
+			//		size related because the size of the widget hasn't been set yet.
+
+			if(this._started){ return; }
+
+			// Need to call inherited first - so that child widgets get started
+			// up correctly
+			this.inherited(arguments);
+
+			// If I am a not being controlled by a parent layout widget...
+			var parent = this.getParent && this.getParent()
+			if(!(parent && parent.isLayoutContainer)){
+				// Do recursive sizing and layout of all my descendants
+				// (passing in no argument to resize means that it has to glean the size itself)
+				this.resize();
+
+				// Since my parent isn't a layout container, and my style *may be* width=height=100%
+				// or something similar (either set directly or via a CSS class),
+				// monitor when my size changes so that I can re-layout.
+				// For browsers where I can't directly monitor when my size changes,
+				// monitor when the viewport changes size, which *may* indicate a size change for me.
+				this.connect(dojo.isIE ? this.domNode : dojo.global, 'onresize', function(){
+					// Using function(){} closure to ensure no arguments to resize.
+					this.resize();
+				});
+			}
+		},
+
+		resize: function(changeSize, resultSize){
+			// summary:
+			//		Call this to resize a widget, or after its size has changed.
+			// description:
+			//		Change size mode:
+			//			When changeSize is specified, changes the marginBox of this widget
+			//			and forces it to relayout its contents accordingly.
+			//			changeSize may specify height, width, or both.
+			//
+			//			If resultSize is specified it indicates the size the widget will
+			//			become after changeSize has been applied.
+			//
+			//		Notification mode:
+			//			When changeSize is null, indicates that the caller has already changed
+			//			the size of the widget, or perhaps it changed because the browser
+			//			window was resized.  Tells widget to relayout its contents accordingly.
+			//
+			//			If resultSize is also specified it indicates the size the widget has
+			//			become.
+			//
+			//		In either mode, this method also:
+			//			1. Sets this._borderBox and this._contentBox to the new size of
+			//				the widget.  Queries the current domNode size if necessary.
+			//			2. Calls layout() to resize contents (and maybe adjust child widgets).
+			//
+			// changeSize: Object?
+			//		Sets the widget to this margin-box size and position.
+			//		May include any/all of the following properties:
+			//	|	{w: int, h: int, l: int, t: int}
+			//
+			// resultSize: Object?
+			//		The margin-box size of this widget after applying changeSize (if
+			//		changeSize is specified).  If caller knows this size and
+			//		passes it in, we don't need to query the browser to get the size.
+			//	|	{w: int, h: int}
+
+			var node = this.domNode;
+
+			// set margin box size, unless it wasn't specified, in which case use current size
+			if(changeSize){
+				dojo.marginBox(node, changeSize);
+
+				// set offset of the node
+				if(changeSize.t){ node.style.top = changeSize.t + "px"; }
+				if(changeSize.l){ node.style.left = changeSize.l + "px"; }
+			}
+
+			// If either height or width wasn't specified by the user, then query node for it.
+			// But note that setting the margin box and then immediately querying dimensions may return
+			// inaccurate results, so try not to depend on it.
+			var mb = resultSize || {};
+			dojo.mixin(mb, changeSize || {});	// changeSize overrides resultSize
+			if( !("h" in mb) || !("w" in mb) ){
+				mb = dojo.mixin(dojo.marginBox(node), mb);	// just use dojo.marginBox() to fill in missing values
+			}
+
+			// Compute and save the size of my border box and content box
+			// (w/out calling dojo.contentBox() since that may fail if size was recently set)
+			var cs = dojo.getComputedStyle(node);
+			var me = dojo._getMarginExtents(node, cs);
+			var be = dojo._getBorderExtents(node, cs);
+			var bb = (this._borderBox = {
+				w: mb.w - (me.w + be.w),
+				h: mb.h - (me.h + be.h)
+			});
+			var pe = dojo._getPadExtents(node, cs);
+			this._contentBox = {
+				l: dojo._toPixelValue(node, cs.paddingLeft),
+				t: dojo._toPixelValue(node, cs.paddingTop),
+				w: bb.w - pe.w,
+				h: bb.h - pe.h
+			};
+
+			// Callback for widget to adjust size of its children
+			this.layout();
+		},
+
+		layout: function(){
+			// summary:
+			//		Widgets override this method to size and position their contents/children.
+			//		When this is called this._contentBox is guaranteed to be set (see resize()).
+			//
+			//		This is called after startup(), and also when the widget's size has been
+			//		changed.
+			// tags:
+			//		protected extension
+		},
+
+		_setupChild: function(/*dijit._Widget*/child){
+			// summary:
+			//		Common setup for initial children and children which are added after startup
+			// tags:
+			//		protected extension
+
+			dojo.addClass(child.domNode, this.baseClass+"-child");
+			if(child.baseClass){
+				dojo.addClass(child.domNode, this.baseClass+"-"+child.baseClass);
+			}
+		},
+
+		addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){
+			// Overrides _Container.addChild() to call _setupChild()
+			this.inherited(arguments);
+			if(this._started){
+				this._setupChild(child);
+			}
+		},
+
+		removeChild: function(/*dijit._Widget*/ child){
+			// Overrides _Container.removeChild() to remove class added by _setupChild()
+			dojo.removeClass(child.domNode, this.baseClass+"-child");
+			if(child.baseClass){
+				dojo.removeClass(child.domNode, this.baseClass+"-"+child.baseClass);
+			}
+			this.inherited(arguments);
+		}
+	}
+);
+
+dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
+	// summary:
+	//		Given the margin-box size of a node, return its content box size.
+	//		Functions like dojo.contentBox() but is more reliable since it doesn't have
+	//		to wait for the browser to compute sizes.
+	var cs = dojo.getComputedStyle(node);
+	var me = dojo._getMarginExtents(node, cs);
+	var pb = dojo._getPadBorderExtents(node, cs);
+	return {
+		l: dojo._toPixelValue(node, cs.paddingLeft),
+		t: dojo._toPixelValue(node, cs.paddingTop),
+		w: mb.w - (me.w + pb.w),
+		h: mb.h - (me.h + pb.h)
+	};
+};
+
+(function(){
+	var capitalize = function(word){
+		return word.substring(0,1).toUpperCase() + word.substring(1);
+	};
+
+	var size = function(widget, dim){
+		// size the child
+		widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
+
+		// record child's size, but favor our own numbers when we have them.
+		// the browser lies sometimes
+		dojo.mixin(widget, dojo.marginBox(widget.domNode));
+		dojo.mixin(widget, dim);
+	};
+
+	dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){
+		// summary
+		//		Layout a bunch of child dom nodes within a parent dom node
+		// container:
+		//		parent node
+		// dim:
+		//		{l, t, w, h} object specifying dimensions of container into which to place children
+		// children:
+		//		an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ]
+
+		// copy dim because we are going to modify it
+		dim = dojo.mixin({}, dim);
+
+		dojo.addClass(container, "dijitLayoutContainer");
+
+		// Move "client" elements to the end of the array for layout.  a11y dictates that the author
+		// needs to be able to put them in the document in tab-order, but this algorithm requires that
+		// client be last.
+		children = dojo.filter(children, function(item){ return item.layoutAlign != "client"; })
+			.concat(dojo.filter(children, function(item){ return item.layoutAlign == "client"; }));
+
+		// set positions/sizes
+		dojo.forEach(children, function(child){
+			var elm = child.domNode,
+				pos = child.layoutAlign;
+
+			// set elem to upper left corner of unused space; may move it later
+			var elmStyle = elm.style;
+			elmStyle.left = dim.l+"px";
+			elmStyle.top = dim.t+"px";
+			elmStyle.bottom = elmStyle.right = "auto";
+
+			dojo.addClass(elm, "dijitAlign" + capitalize(pos));
+
+			// set size && adjust record of remaining space.
+			// note that setting the width of a <div> may affect its height.
+			if(pos == "top" || pos == "bottom"){
+				size(child, { w: dim.w });
+				dim.h -= child.h;
+				if(pos == "top"){
+					dim.t += child.h;
+				}else{
+					elmStyle.top = dim.t + dim.h + "px";
+				}
+			}else if(pos == "left" || pos == "right"){
+				size(child, { h: dim.h });
+				dim.w -= child.w;
+				if(pos == "left"){
+					dim.l += child.w;
+				}else{
+					elmStyle.left = dim.l + dim.w + "px";
+				}
+			}else if(pos == "client"){
+				size(child, dim);
+			}
+		});
+	};
+
+})();
+
+}
+
+if(!dojo._hasResource["dijit._CssStateMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._CssStateMixin"] = true;
+dojo.provide("dijit._CssStateMixin");
+
+
+dojo.declare("dijit._CssStateMixin", [], {
+	// summary:
+	//		Mixin for widgets to set CSS classes on the widget DOM nodes depending on hover/mouse press/focus
+	//		state changes, and also higher-level state changes such becoming disabled or selected.
+	//
+	// description:
+	//		By mixing this class into your widget, and setting the this.baseClass attribute, it will automatically
+	//		maintain CSS classes on the widget root node (this.domNode) depending on hover,
+	//		active, focus, etc. state.   Ex: with a baseClass of dijitButton, it will apply the classes
+	//		dijitButtonHovered and dijitButtonActive, as the user moves the mouse over the widget and clicks it.
+	//
+	//		It also sets CSS like dijitButtonDisabled based on widget semantic state.
+	//
+	//		By setting the cssStateNodes attribute, a widget can also track events on subnodes (like buttons
+	//		within the widget).
+
+	// cssStateNodes: [protected] Object
+	//		List of sub-nodes within the widget that need CSS classes applied on mouse hover/press and focus
+	//.
+	//		Each entry in the hash is a an attachpoint names (like "upArrowButton") mapped to a CSS class names
+	//		(like "dijitUpArrowButton"). Example:
+	//	|		{
+	//	|			"upArrowButton": "dijitUpArrowButton",
+	//	|			"downArrowButton": "dijitDownArrowButton"
+	//	|		}
+	//		The above will set the CSS class dijitUpArrowButton to the this.upArrowButton DOMNode when it
+	//		is hovered, etc.
+	cssStateNodes: {},
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		// Automatically monitor mouse events (essentially :hover and :active) on this.domNode
+		dojo.forEach(["onmouseenter", "onmouseleave", "onmousedown"], function(e){
+			this.connect(this.domNode, e, "_cssMouseEvent");
+		}, this);
+		
+		// Monitoring changes to disabled, readonly, etc. state, and update CSS class of root node
+		this.connect(this, "set", function(name, value){
+			if(arguments.length >= 2 && {disabled: true, readOnly: true, checked:true, selected:true}[name]){
+				this._setStateClass();
+			}
+		});
+
+		// The widget coming in/out of the focus change affects it's state
+		dojo.forEach(["_onFocus", "_onBlur"], function(ap){
+			this.connect(this, ap, "_setStateClass");
+		}, this);
+
+		// Events on sub nodes within the widget
+		for(var ap in this.cssStateNodes){
+			this._trackMouseState(this[ap], this.cssStateNodes[ap]);
+		}
+		// Set state initially; there's probably no hover/active/focus state but widget might be
+		// disabled/readonly so we want to set CSS classes for those conditions.
+		this._setStateClass();
+	},
+
+	_cssMouseEvent: function(/*Event*/ event){
+		// summary:
+		//	Sets _hovering and _active properties depending on mouse state,
+		//	then calls _setStateClass() to set appropriate CSS classes for this.domNode.
+
+		if(!this.disabled){
+			switch(event.type){
+				case "mouseenter":
+				case "mouseover":	// generated on non-IE browsers even though we connected to mouseenter
+					this._hovering = true;
+					this._active = this._mouseDown;
+					break;
+
+				case "mouseleave":
+				case "mouseout":	// generated on non-IE browsers even though we connected to mouseleave
+					this._hovering = false;
+					this._active = false;
+					break;
+
+				case "mousedown" :
+					this._active = true;
+					this._mouseDown = true;
+					// Set a global event to handle mouseup, so it fires properly
+					// even if the cursor leaves this.domNode before the mouse up event.
+					// Alternately could set active=false on mouseout.
+					var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
+						this._active = false;
+						this._mouseDown = false;
+						this._setStateClass();
+						this.disconnect(mouseUpConnector);
+					});
+					break;
+			}
+			this._setStateClass();
+		}
+	},
+
+	_setStateClass: function(){
+		// summary:
+		//		Update the visual state of the widget by setting the css classes on this.domNode
+		//		(or this.stateNode if defined) by combining this.baseClass with
+		//		various suffixes that represent the current widget state(s).
+		//
+		// description:
+		//		In the case where a widget has multiple
+		//		states, it sets the class based on all possible
+		//	 	combinations.  For example, an invalid form widget that is being hovered
+		//		will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover".
+		//
+		//		The widget may have one or more of the following states, determined
+		//		by this.state, this.checked, this.valid, and this.selected:
+		//			- Error - ValidationTextBox sets this.state to "Error" if the current input value is invalid
+		//			- Checked - ex: a checkmark or a ToggleButton in a checked state, will have this.checked==true
+		//			- Selected - ex: currently selected tab will have this.selected==true
+		//
+		//		In addition, it may have one or more of the following states,
+		//		based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused):
+		//			- Disabled	- if the widget is disabled
+		//			- Active		- if the mouse (or space/enter key?) is being pressed down
+		//			- Focused		- if the widget has focus
+		//			- Hover		- if the mouse is over the widget
+
+		// Compute new set of classes
+		var newStateClasses = this.baseClass.split(" ");
+
+		function multiply(modifier){
+			newStateClasses = newStateClasses.concat(dojo.map(newStateClasses, function(c){ return c+modifier; }), "dijit"+modifier);
+		}
+
+		if(!this.isLeftToRight()){
+			// For RTL mode we need to set an addition class like dijitTextBoxRtl.
+			multiply("Rtl");
+		}
+
+		if(this.checked){
+			multiply("Checked");
+		}
+		if(this.state){
+			multiply(this.state);
+		}
+		if(this.selected){
+			multiply("Selected");
+		}
+
+		if(this.disabled){
+			multiply("Disabled");
+		}else if(this.readOnly){
+			multiply("ReadOnly");
+		}else{
+			if(this._active){
+				multiply("Active");
+			}else if(this._hovering){
+				multiply("Hover");
+			}
+		}
+
+		if(this._focused){
+			multiply("Focused");
+		}
+
+		// Remove old state classes and add new ones.
+		// For performance concerns we only write into domNode.className once.
+		var tn = this.stateNode || this.domNode,
+			classHash = {};	// set of all classes (state and otherwise) for node
+
+		dojo.forEach(tn.className.split(" "), function(c){ classHash[c] = true; });
+
+		if("_stateClasses" in this){
+			dojo.forEach(this._stateClasses, function(c){ delete classHash[c]; });
+		}
+
+		dojo.forEach(newStateClasses, function(c){ classHash[c] = true; });
+
+		var newClasses = [];
+		for(var c in classHash){
+			newClasses.push(c);
+		}
+		tn.className = newClasses.join(" ");
+
+		this._stateClasses = newStateClasses;
+	},
+
+	_trackMouseState: function(/*DomNode*/ node, /*String*/ clazz){
+		// summary:
+		//		Track mouse/focus events on specified node and set CSS class on that node to indicate
+		//		current state.   Usually not called directly, but via cssStateNodes attribute.
+		// description:
+		//		Given class=foo, will set the following CSS class on the node
+		//			- fooActive: if the user is currently pressing down the mouse button while over the node
+		//			- fooHover: if the user is hovering the mouse over the node, but not pressing down a button
+		//			- fooFocus: if the node is focused
+		//
+		//		Note that it won't set any classes if the widget is disabled.
+		// node: DomNode
+		//		Should be a sub-node of the widget, not the top node (this.domNode), since the top node
+		//		is handled specially and automatically just by mixing in this class.
+		// clazz: String
+		//		CSS class name (ex: dijitSliderUpArrow).
+
+		// Current state of node (initially false)
+		// NB: setting specifically to false because dojo.toggleClass() needs true boolean as third arg
+		var hovering=false, active=false, focused=false;
+
+		var self = this,
+			cn = dojo.hitch(this, "connect", node);
+
+		function setClass(){
+			var disabled = ("disabled" in self && self.disabled) || ("readonly" in self && self.readonly);
+			dojo.toggleClass(node, clazz+"Hover", hovering && !active && !disabled);
+			dojo.toggleClass(node, clazz+"Active", active && !disabled);
+			dojo.toggleClass(node, clazz+"Focused", focused && !disabled);
+		}
+
+		// Mouse
+		cn("onmouseenter", function(){
+			hovering = true;
+			setClass();
+		});
+		cn("onmouseleave", function(){
+			hovering = false;
+			active = false;
+			setClass();
+		});
+		cn("onmousedown", function(){
+			active = true;
+			setClass();
+		});
+		cn("onmouseup", function(){
+			active = false;
+			setClass();
+		});
+
+		// Focus
+		cn("onfocus", function(){
+			focused = true;
+			setClass();
+		});
+		cn("onblur", function(){
+			focused = false;
+			setClass();
+		});
+
+		// Just in case widget is enabled/disabled while it has focus/hover/active state.
+		// Maybe this is overkill.
+		this.connect(this, "set", function(name, value){
+			if(name == "disabled" || name == "readOnly"){
+				setClass();
+			}
+		});
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.form._FormWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.form._FormWidget"] = true;
+dojo.provide("dijit.form._FormWidget");
+
+
+
+
+
+
+
+dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
+	{
+	// summary:
+	//		Base class for widgets corresponding to native HTML elements such as <checkbox> or <button>,
+	//		which can be children of a <form> node or a `dijit.form.Form` widget.
+	//
+	// description:
+	//		Represents a single HTML element.
+	//		All these widgets should have these attributes just like native HTML input elements.
+	//		You can set them during widget construction or afterwards, via `dijit._Widget.attr`.
+	//
+	//		They also share some common methods.
+
+	// name: String
+	//		Name used when submitting form; same as "name" attribute or plain HTML elements
+	name: "",
+
+	// alt: String
+	//		Corresponds to the native HTML <input> element's attribute.
+	alt: "",
+
+	// value: String
+	//		Corresponds to the native HTML <input> element's attribute.
+	value: "",
+
+	// type: String
+	//		Corresponds to the native HTML <input> element's attribute.
+	type: "text",
+
+	// tabIndex: Integer
+	//		Order fields are traversed when user hits the tab key
+	tabIndex: "0",
+
+	// disabled: Boolean
+	//		Should this widget respond to user input?
+	//		In markup, this is specified as "disabled='disabled'", or just "disabled".
+	disabled: false,
+
+	// intermediateChanges: Boolean
+	//		Fires onChange for each value change or only on demand
+	intermediateChanges: false,
+
+	// scrollOnFocus: Boolean
+	//		On focus, should this widget scroll into view?
+	scrollOnFocus: true,
+
+	// These mixins assume that the focus node is an INPUT, as many but not all _FormWidgets are.
+	attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+		value: "focusNode",
+		id: "focusNode",
+		tabIndex: "focusNode",
+		alt: "focusNode",
+		title: "focusNode"
+	}),
+
+	postMixInProperties: function(){
+		// Setup name=foo string to be referenced from the template (but only if a name has been specified)
+		// Unfortunately we can't use attributeMap to set the name due to IE limitations, see #8660
+		// Regarding escaping, see heading "Attribute values" in
+		// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
+		this.nameAttrSetting = this.name ? ('name="' + this.name.replace(/'/g, "&quot;") + '"') : '';
+		this.inherited(arguments);
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+		this.connect(this.domNode, "onmousedown", "_onMouseDown");
+	},
+
+	_setDisabledAttr: function(/*Boolean*/ value){
+		this.disabled = value;
+		dojo.attr(this.focusNode, 'disabled', value);
+		if(this.valueNode){
+			dojo.attr(this.valueNode, 'disabled', value);
+		}
+		dijit.setWaiState(this.focusNode, "disabled", value);
+
+		if(value){
+			// reset these, because after the domNode is disabled, we can no longer receive
+			// mouse related events, see #4200
+			this._hovering = false;
+			this._active = false;
+
+			// clear tab stop(s) on this widget's focusable node(s)  (ComboBox has two focusable nodes)
+			var attachPointNames = "tabIndex" in this.attributeMap ? this.attributeMap.tabIndex : "focusNode";
+			dojo.forEach(dojo.isArray(attachPointNames) ? attachPointNames : [attachPointNames], function(attachPointName){
+				var node = this[attachPointName];
+				// complex code because tabIndex=-1 on a <div> doesn't work on FF
+				if(dojo.isWebKit || dijit.hasDefaultTabStop(node)){	// see #11064 about webkit bug
+					node.setAttribute('tabIndex', "-1");
+				}else{
+					node.removeAttribute('tabIndex');				
+				}
+			}, this);
+		}else{
+			this.focusNode.setAttribute('tabIndex', this.tabIndex);
+		}
+	},
+
+	setDisabled: function(/*Boolean*/ disabled){
+		// summary:
+		//		Deprecated.   Use set('disabled', ...) instead.
+		dojo.deprecated("setDisabled("+disabled+") is deprecated. Use set('disabled',"+disabled+") instead.", "", "2.0");
+		this.set('disabled', disabled);
+	},
+
+	_onFocus: function(e){
+		if(this.scrollOnFocus){
+			dojo.window.scrollIntoView(this.domNode);
+		}
+		this.inherited(arguments);
+	},
+
+	isFocusable: function(){
+		// summary:
+		//		Tells if this widget is focusable or not.   Used internally by dijit.
+		// tags:
+		//		protected
+		return !this.disabled && !this.readOnly && this.focusNode && (dojo.style(this.domNode, "display") != "none");
+	},
+
+	focus: function(){
+		// summary:
+		//		Put focus on this widget
+		dijit.focus(this.focusNode);
+	},
+
+	compare: function(/*anything*/val1, /*anything*/val2){
+		// summary:
+		//		Compare 2 values (as returned by attr('value') for this widget).
+		// tags:
+		//		protected
+		if(typeof val1 == "number" && typeof val2 == "number"){
+			return (isNaN(val1) && isNaN(val2)) ? 0 : val1 - val2;
+		}else if(val1 > val2){
+			return 1;
+		}else if(val1 < val2){
+			return -1;
+		}else{
+			return 0;
+		}
+	},
+
+	onChange: function(newValue){
+		// summary:
+		//		Callback when this widget's value is changed.
+		// tags:
+		//		callback
+	},
+
+	// _onChangeActive: [private] Boolean
+	//		Indicates that changes to the value should call onChange() callback.
+	//		This is false during widget initialization, to avoid calling onChange()
+	//		when the initial value is set.
+	_onChangeActive: false,
+
+	_handleOnChange: function(/*anything*/ newValue, /* Boolean? */ priorityChange){
+		// summary:
+		//		Called when the value of the widget is set.  Calls onChange() if appropriate
+		// newValue:
+		//		the new value
+		// priorityChange:
+		//		For a slider, for example, dragging the slider is priorityChange==false,
+		//		but on mouse up, it's priorityChange==true.  If intermediateChanges==true,
+		//		onChange is only called form priorityChange=true events.
+		// tags:
+		//		private
+		this._lastValue = newValue;
+		if(this._lastValueReported == undefined && (priorityChange === null || !this._onChangeActive)){
+			// this block executes not for a change, but during initialization,
+			// and is used to store away the original value (or for ToggleButton, the original checked state)
+			this._resetValue = this._lastValueReported = newValue;
+		}
+		if((this.intermediateChanges || priorityChange || priorityChange === undefined) &&
+			((typeof newValue != typeof this._lastValueReported) ||
+				this.compare(newValue, this._lastValueReported) != 0)){
+			this._lastValueReported = newValue;
+			if(this._onChangeActive){
+				if(this._onChangeHandle){
+					clearTimeout(this._onChangeHandle);
+				}
+				// setTimout allows hidden value processing to run and
+				// also the onChange handler can safely adjust focus, etc
+				this._onChangeHandle = setTimeout(dojo.hitch(this,
+					function(){
+						this._onChangeHandle = null;
+						this.onChange(newValue);
+					}), 0); // try to collapse multiple onChange's fired faster than can be processed
+			}
+		}
+	},
+
+	create: function(){
+		// Overrides _Widget.create()
+		this.inherited(arguments);
+		this._onChangeActive = true;
+	},
+
+	destroy: function(){
+		if(this._onChangeHandle){ // destroy called before last onChange has fired
+			clearTimeout(this._onChangeHandle);
+			this.onChange(this._lastValueReported);
+		}
+		this.inherited(arguments);
+	},
+
+	setValue: function(/*String*/ value){
+		// summary:
+		//		Deprecated.   Use set('value', ...) instead.
+		dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated.  Use set('value',"+value+") instead.", "", "2.0");
+		this.set('value', value);
+	},
+
+	getValue: function(){
+		// summary:
+		//		Deprecated.   Use get('value') instead.
+		dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.", "", "2.0");
+		return this.get('value');
+	},
+	
+	_onMouseDown: function(e){
+		// If user clicks on the button, even if the mouse is released outside of it,
+		// this button should get focus (to mimics native browser buttons).
+		// This is also needed on chrome because otherwise buttons won't get focus at all,
+		// which leads to bizarre focus restore on Dialog close etc.
+		if(!e.ctrlKey && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac
+			// Set a global event to handle mouseup, so it fires properly
+			// even if the cursor leaves this.domNode before the mouse up event.
+			var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
+				if (this.isFocusable()) {
+					this.focus();
+				}
+				this.disconnect(mouseUpConnector);
+			});
+		}
+	}
+});
+
+dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget,
+{
+	// summary:
+	//		Base class for widgets corresponding to native HTML elements such as <input> or <select> that have user changeable values.
+	// description:
+	//		Each _FormValueWidget represents a single input value, and has a (possibly hidden) <input> element,
+	//		to which it serializes it's input value, so that form submission (either normal submission or via FormBind?)
+	//		works as expected.
+
+	// Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared
+	// directly in the template as read by the parser in order to function. IE is known to specifically
+	// require the 'name' attribute at element creation time.   See #8484, #8660.
+	// TODO: unclear what that {value: ""} is for; FormWidget.attributeMap copies value to focusNode,
+	// so maybe {value: ""} is so the value *doesn't* get copied to focusNode?
+	// Seems like we really want value removed from attributeMap altogether
+	// (although there's no easy way to do that now)
+
+	// readOnly: Boolean
+	//		Should this widget respond to user input?
+	//		In markup, this is specified as "readOnly".
+	//		Similar to disabled except readOnly form values are submitted.
+	readOnly: false,
+
+	attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, {
+		value: "",
+		readOnly: "focusNode"
+	}),
+
+	_setReadOnlyAttr: function(/*Boolean*/ value){
+		this.readOnly = value;
+		dojo.attr(this.focusNode, 'readOnly', value);
+		dijit.setWaiState(this.focusNode, "readonly", value);
+	},
+
+	postCreate: function(){
+		this.inherited(arguments);
+
+		if(dojo.isIE){ // IE won't stop the event with keypress
+			this.connect(this.focusNode || this.domNode, "onkeydown", this._onKeyDown);
+		}
+		// Update our reset value if it hasn't yet been set (because this.set()
+		// is only called when there *is* a value)
+		if(this._resetValue === undefined){
+			this._resetValue = this.value;
+		}
+	},
+
+	_setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
+		// summary:
+		//		Hook so attr('value', value) works.
+		// description:
+		//		Sets the value of the widget.
+		//		If the value has changed, then fire onChange event, unless priorityChange
+		//		is specified as null (or false?)
+		this.value = newValue;
+		this._handleOnChange(newValue, priorityChange);
+	},
+
+	_getValueAttr: function(){
+		// summary:
+		//		Hook so attr('value') works.
+		return this._lastValue;
+	},
+
+	undo: function(){
+		// summary:
+		//		Restore the value to the last value passed to onChange
+		this._setValueAttr(this._lastValueReported, false);
+	},
+
+	reset: function(){
+		// summary:
+		//		Reset the widget's value to what it was at initialization time
+		this._hasBeenBlurred = false;
+		this._setValueAttr(this._resetValue, true);
+	},
+
+	_onKeyDown: function(e){
+		if(e.keyCode == dojo.keys.ESCAPE && !(e.ctrlKey || e.altKey || e.metaKey)){
+			var te;
+			if(dojo.isIE){
+				e.preventDefault(); // default behavior needs to be stopped here since keypress is too late
+				te = document.createEventObject();
+				te.keyCode = dojo.keys.ESCAPE;
+				te.shiftKey = e.shiftKey;
+				e.srcElement.fireEvent('onkeypress', te);
+			}
+		}
+	},
+
+	_layoutHackIE7: function(){
+		// summary:
+		//		Work around table sizing bugs on IE7 by forcing redraw
+
+		if(dojo.isIE == 7){ // fix IE7 layout bug when the widget is scrolled out of sight
+			var domNode = this.domNode;
+			var parent = domNode.parentNode;
+			var pingNode = domNode.firstChild || domNode; // target node most unlikely to have a custom filter
+			var origFilter = pingNode.style.filter; // save custom filter, most likely nothing
+			var _this = this;
+			while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet
+				(function ping(){
+					var disconnectHandle = _this.connect(parent, "onscroll",
+						function(e){
+							_this.disconnect(disconnectHandle); // only call once
+							pingNode.style.filter = (new Date()).getMilliseconds(); // set to anything that's unique
+							setTimeout(function(){ pingNode.style.filter = origFilter }, 0); // restore custom filter, if any
+						}
+					);
+				})();
+				parent = parent.parentNode;
+			}
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dijit.dijit"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.dijit"] = true;
+dojo.provide("dijit.dijit");
+
+/*=====
+dijit.dijit = {
+	// summary:
+	//		A roll-up for common dijit methods
+	// description:
+	//	A rollup file for the build system including the core and common
+	//	dijit files.
+	//
+	// example:
+	// | <script type="text/javascript" src="js/dojo/dijit/dijit.js"></script>
+	//
+};
+=====*/
+
+// All the stuff in _base (these are the function that are guaranteed available without an explicit dojo.require)
+
+
+// And some other stuff that we tend to pull in all the time anyway
+
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dijit._KeyNavContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit._KeyNavContainer"] = true;
+dojo.provide("dijit._KeyNavContainer");
+
+
+dojo.declare("dijit._KeyNavContainer",
+	dijit._Container,
+	{
+
+		// summary:
+		//		A _Container with keyboard navigation of its children.
+		// description:
+		//		To use this mixin, call connectKeyNavHandlers() in
+		//		postCreate() and call startupKeyNavChildren() in startup().
+		//		It provides normalized keyboard and focusing code for Container
+		//		widgets.
+/*=====
+		// focusedChild: [protected] Widget
+		//		The currently focused child widget, or null if there isn't one
+		focusedChild: null,
+=====*/
+
+		// tabIndex: Integer
+		//		Tab index of the container; same as HTML tabIndex attribute.
+		//		Note then when user tabs into the container, focus is immediately
+		//		moved to the first item in the container.
+		tabIndex: "0",
+
+		_keyNavCodes: {},
+
+		connectKeyNavHandlers: function(/*dojo.keys[]*/ prevKeyCodes, /*dojo.keys[]*/ nextKeyCodes){
+			// summary:
+			//		Call in postCreate() to attach the keyboard handlers
+			//		to the container.
+			// preKeyCodes: dojo.keys[]
+			//		Key codes for navigating to the previous child.
+			// nextKeyCodes: dojo.keys[]
+			//		Key codes for navigating to the next child.
+			// tags:
+			//		protected
+
+			var keyCodes = (this._keyNavCodes = {});
+			var prev = dojo.hitch(this, this.focusPrev);
+			var next = dojo.hitch(this, this.focusNext);
+			dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; });
+			dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; });
+			this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
+			this.connect(this.domNode, "onfocus", "_onContainerFocus");
+		},
+
+		startupKeyNavChildren: function(){
+			// summary:
+			//		Call in startup() to set child tabindexes to -1
+			// tags:
+			//		protected
+			dojo.forEach(this.getChildren(), dojo.hitch(this, "_startupChild"));
+		},
+
+		addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){
+			// summary:
+			//		Add a child to our _Container
+			dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
+			this._startupChild(widget);
+		},
+
+		focus: function(){
+			// summary:
+			//		Default focus() implementation: focus the first child.
+			this.focusFirstChild();
+		},
+
+		focusFirstChild: function(){
+			// summary:
+			//		Focus the first focusable child in the container.
+			// tags:
+			//		protected
+			var child = this._getFirstFocusableChild();
+			if(child){ // edge case: Menu could be empty or hidden
+				this.focusChild(child);
+			}
+		},
+
+		focusNext: function(){
+			// summary:
+			//		Focus the next widget
+			// tags:
+			//		protected
+			var child = this._getNextFocusableChild(this.focusedChild, 1);
+			this.focusChild(child);
+		},
+
+		focusPrev: function(){
+			// summary:
+			//		Focus the last focusable node in the previous widget
+			//		(ex: go to the ComboButton icon section rather than button section)
+			// tags:
+			//		protected
+			var child = this._getNextFocusableChild(this.focusedChild, -1);
+			this.focusChild(child, true);
+		},
+
+		focusChild: function(/*dijit._Widget*/ widget, /*Boolean*/ last){
+			// summary:
+			//		Focus widget.
+			// widget:
+			//		Reference to container's child widget
+			// last:
+			//		If true and if widget has multiple focusable nodes, focus the
+			//		last one instead of the first one
+			// tags:
+			//		protected
+			
+			if(this.focusedChild && widget !== this.focusedChild){
+				this._onChildBlur(this.focusedChild);
+			}
+			widget.focus(last ? "end" : "start");
+			this.focusedChild = widget;
+		},
+
+		_startupChild: function(/*dijit._Widget*/ widget){
+			// summary:
+			//		Setup for each child widget
+			// description:
+			//		Sets tabIndex=-1 on each child, so that the tab key will 
+			//		leave the container rather than visiting each child.
+			// tags:
+			//		private
+			
+			widget.set("tabIndex", "-1");
+			
+			this.connect(widget, "_onFocus", function(){
+				// Set valid tabIndex so tabbing away from widget goes to right place, see #10272
+				widget.set("tabIndex", this.tabIndex);
+			});
+			this.connect(widget, "_onBlur", function(){
+				widget.set("tabIndex", "-1");
+			});
+		},
+
+		_onContainerFocus: function(evt){
+			// summary:
+			//		Handler for when the container gets focus
+			// description:
+			//		Initially the container itself has a tabIndex, but when it gets
+			//		focus, switch focus to first child...
+			// tags:
+			//		private
+
+			// Note that we can't use _onFocus() because switching focus from the
+			// _onFocus() handler confuses the focus.js code
+			// (because it causes _onFocusNode() to be called recursively)
+
+			// focus bubbles on Firefox,
+			// so just make sure that focus has really gone to the container
+			if(evt.target !== this.domNode){ return; }
+
+			this.focusFirstChild();
+
+			// and then set the container's tabIndex to -1,
+			// (don't remove as that breaks Safari 4)
+			// so that tab or shift-tab will go to the fields after/before
+			// the container, rather than the container itself
+			dojo.attr(this.domNode, "tabIndex", "-1");
+		},
+
+		_onBlur: function(evt){
+			// When focus is moved away the container, and its descendant (popup) widgets,
+			// then restore the container's tabIndex so that user can tab to it again.
+			// Note that using _onBlur() so that this doesn't happen when focus is shifted
+			// to one of my child widgets (typically a popup)
+			if(this.tabIndex){
+				dojo.attr(this.domNode, "tabIndex", this.tabIndex);
+			}
+			this.inherited(arguments);
+		},
+
+		_onContainerKeypress: function(evt){
+			// summary:
+			//		When a key is pressed, if it's an arrow key etc. then
+			//		it's handled here.
+			// tags:
+			//		private
+			if(evt.ctrlKey || evt.altKey){ return; }
+			var func = this._keyNavCodes[evt.charOrCode];
+			if(func){
+				func();
+				dojo.stopEvent(evt);
+			}
+		},
+
+		_onChildBlur: function(/*dijit._Widget*/ widget){
+			// summary:
+			//		Called when focus leaves a child widget to go
+			//		to a sibling widget.
+			// tags:
+			//		protected
+		},
+
+		_getFirstFocusableChild: function(){
+			// summary:
+			//		Returns first child that can be focused
+			return this._getNextFocusableChild(null, 1);	// dijit._Widget
+		},
+
+		_getNextFocusableChild: function(child, dir){
+			// summary:
+			//		Returns the next or previous focusable child, compared
+			//		to "child"
+			// child: Widget
+			//		The current widget
+			// dir: Integer
+			//		* 1 = after
+			//		* -1 = before
+			if(child){
+				child = this._getSiblingOfChild(child, dir);
+			}
+			var children = this.getChildren();
+			for(var i=0; i < children.length; i++){
+				if(!child){
+					child = children[(dir>0) ? 0 : (children.length-1)];
+				}
+				if(child.isFocusable()){
+					return child;	// dijit._Widget
+				}
+				child = this._getSiblingOfChild(child, dir);
+			}
+			// no focusable child found
+			return null;	// dijit._Widget
+		}
+	}
+);
+
+}
+
+if(!dojo._hasResource["dijit.MenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuItem"] = true;
+dojo.provide("dijit.MenuItem");
+
+
+
+
+
+
+dojo.declare("dijit.MenuItem",
+		[dijit._Widget, dijit._Templated, dijit._Contained, dijit._CssStateMixin],
+		{
+		// summary:
+		//		A line item in a Menu Widget
+
+		// Make 3 columns
+		// icon, label, and expand arrow (BiDi-dependent) indicating sub-menu
+		templateString: dojo.cache("dijit", "templates/MenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),
+
+		attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, {
+			label: { node: "containerNode", type: "innerHTML" },
+			iconClass: { node: "iconNode", type: "class" }
+		}),
+
+		baseClass: "dijitMenuItem",
+
+		// label: String
+		//		Menu text
+		label: '',
+
+		// iconClass: String
+		//		Class to apply to DOMNode to make it display an icon.
+		iconClass: "",
+
+		// accelKey: String
+		//		Text for the accelerator (shortcut) key combination.
+		//		Note that although Menu can display accelerator keys there
+		//		is no infrastructure to actually catch and execute these
+		//		accelerators.
+		accelKey: "",
+
+		// disabled: Boolean
+		//		If true, the menu item is disabled.
+		//		If false, the menu item is enabled.
+		disabled: false,
+
+		_fillContent: function(/*DomNode*/ source){
+			// If button label is specified as srcNodeRef.innerHTML rather than
+			// this.params.label, handle it here.
+			if(source && !("label" in this.params)){
+				this.set('label', source.innerHTML);
+			}
+		},
+
+		postCreate: function(){
+			this.inherited(arguments);
+			dojo.setSelectable(this.domNode, false);
+			var label = this.id+"_text";
+			dojo.attr(this.containerNode, "id", label);
+			if(this.accelKeyNode){
+				dojo.attr(this.accelKeyNode, "id", this.id + "_accel");
+				label += " " + this.id + "_accel";
+			}
+			dijit.setWaiState(this.domNode, "labelledby", label);
+		},
+
+		_onHover: function(){
+			// summary:
+			//		Handler when mouse is moved onto menu item
+			// tags:
+			//		protected
+			this.getParent().onItemHover(this);
+		},
+
+		_onUnhover: function(){
+			// summary:
+			//		Handler when mouse is moved off of menu item,
+			//		possibly to a child menu, or maybe to a sibling
+			//		menuitem or somewhere else entirely.
+			// tags:
+			//		protected
+
+			// if we are unhovering the currently selected item
+			// then unselect it
+			this.getParent().onItemUnhover(this);
+
+			// _onUnhover() is called when the menu is hidden (collapsed), due to clicking
+			// a MenuItem and having it execut.  When that happens, FF and IE don't generate
+			// an onmouseout event for the MenuItem, so give _CssStateMixin some help
+			this._hovering = false;
+			this._setStateClass();
+		},
+
+		_onClick: function(evt){
+			// summary:
+			//		Internal handler for click events on MenuItem.
+			// tags:
+			//		private
+			this.getParent().onItemClick(this, evt);
+			dojo.stopEvent(evt);
+		},
+
+		onClick: function(/*Event*/ evt){
+			// summary:
+			//		User defined function to handle clicks
+			// tags:
+			//		callback
+		},
+
+		focus: function(){
+			// summary:
+			//		Focus on this MenuItem
+			try{
+				if(dojo.isIE == 8){
+					// needed for IE8 which won't scroll TR tags into view on focus yet calling scrollIntoView creates flicker (#10275)
+					this.containerNode.focus();
+				}
+				dijit.focus(this.focusNode);
+			}catch(e){
+				// this throws on IE (at least) in some scenarios
+			}
+		},
+
+		_onFocus: function(){
+			// summary:
+			//		This is called by the focus manager when focus
+			//		goes to this MenuItem or a child menu.
+			// tags:
+			//		protected
+			this._setSelected(true);
+			this.getParent()._onItemFocus(this);
+
+			this.inherited(arguments);
+		},
+
+		_setSelected: function(selected){
+			// summary:
+			//		Indicate that this node is the currently selected one
+			// tags:
+			//		private
+
+			/***
+			 * TODO: remove this method and calls to it, when _onBlur() is working for MenuItem.
+			 * Currently _onBlur() gets called when focus is moved from the MenuItem to a child menu.
+			 * That's not supposed to happen, but the problem is:
+			 * In order to allow dijit.popup's getTopPopup() to work,a sub menu's popupParent
+			 * points to the parent Menu, bypassing the parent MenuItem... thus the
+			 * MenuItem is not in the chain of active widgets and gets a premature call to
+			 * _onBlur()
+			 */
+
+			dojo.toggleClass(this.domNode, "dijitMenuItemSelected", selected);
+		},
+
+		setLabel: function(/*String*/ content){
+			// summary:
+			//		Deprecated.   Use set('label', ...) instead.
+			// tags:
+			//		deprecated
+			dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.", "", "2.0");
+			this.set("label", content);
+		},
+
+		setDisabled: function(/*Boolean*/ disabled){
+			// summary:
+			//		Deprecated.   Use set('disabled', bool) instead.
+			// tags:
+			//		deprecated
+			dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.", "", "2.0");
+			this.set('disabled', disabled);
+		},
+		_setDisabledAttr: function(/*Boolean*/ value){
+			// summary:
+			//		Hook for attr('disabled', ...) to work.
+			//		Enable or disable this menu item.
+			this.disabled = value;
+			dijit.setWaiState(this.focusNode, 'disabled', value ? 'true' : 'false');
+		},
+		_setAccelKeyAttr: function(/*String*/ value){
+			// summary:
+			//		Hook for attr('accelKey', ...) to work.
+			//		Set accelKey on this menu item.
+			this.accelKey=value;
+
+			this.accelKeyNode.style.display=value?"":"none";
+			this.accelKeyNode.innerHTML=value;
+			//have to use colSpan to make it work in IE
+			dojo.attr(this.containerNode,'colSpan',value?"1":"2");
+		}
+	});
+
+}
+
+if(!dojo._hasResource["dijit.PopupMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.PopupMenuItem"] = true;
+dojo.provide("dijit.PopupMenuItem");
+
+
+
+dojo.declare("dijit.PopupMenuItem",
+		dijit.MenuItem,
+		{
+		_fillContent: function(){
+			// summary:
+			//		When Menu is declared in markup, this code gets the menu label and
+			//		the popup widget from the srcNodeRef.
+			// description:
+			//		srcNodeRefinnerHTML contains both the menu item text and a popup widget
+			//		The first part holds the menu item text and the second part is the popup
+			// example:
+			// |	<div dojoType="dijit.PopupMenuItem">
+			// |		<span>pick me</span>
+			// |		<popup> ... </popup>
+			// |	</div>
+			// tags:
+			//		protected
+
+			if(this.srcNodeRef){
+				var nodes = dojo.query("*", this.srcNodeRef);
+				dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]);
+
+				// save pointer to srcNode so we can grab the drop down widget after it's instantiated
+				this.dropDownContainer = this.srcNodeRef;
+			}
+		},
+
+		startup: function(){
+			if(this._started){ return; }
+			this.inherited(arguments);
+
+			// we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's
+			// land now.  move it to dojo.doc.body.
+			if(!this.popup){
+				var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
+				this.popup = dijit.byNode(node);
+			}
+			dojo.body().appendChild(this.popup.domNode);
+			this.popup.startup();
+
+			this.popup.domNode.style.display="none";
+			if(this.arrowWrapper){
+				dojo.style(this.arrowWrapper, "visibility", "");
+			}
+			dijit.setWaiState(this.focusNode, "haspopup", "true");
+		},
+
+		destroyDescendants: function(){
+			if(this.popup){
+				// Destroy the popup, unless it's already been destroyed.  This can happen because
+				// the popup is a direct child of <body> even though it's logically my child.
+				if(!this.popup._destroyed){
+					this.popup.destroyRecursive();
+				}
+				delete this.popup;
+			}
+			this.inherited(arguments);
+		}
+	});
+
+
+}
+
+if(!dojo._hasResource["dijit.CheckedMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.CheckedMenuItem"] = true;
+dojo.provide("dijit.CheckedMenuItem");
+
+
+
+dojo.declare("dijit.CheckedMenuItem",
+		dijit.MenuItem,
+		{
+		// summary:
+		//		A checkbox-like menu item for toggling on and off
+
+		templateString: dojo.cache("dijit", "templates/CheckedMenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">&nbsp;</td>\n</tr>\n"),
+
+		// checked: Boolean
+		//		Our checked state
+		checked: false,
+		_setCheckedAttr: function(/*Boolean*/ checked){
+			// summary:
+			//		Hook so attr('checked', bool) works.
+			//		Sets the class and state for the check box.
+			dojo.toggleClass(this.domNode, "dijitCheckedMenuItemChecked", checked);
+			dijit.setWaiState(this.domNode, "checked", checked);
+			this.checked = checked;
+		},
+
+		onChange: function(/*Boolean*/ checked){
+			// summary:
+			//		User defined function to handle check/uncheck events
+			// tags:
+			//		callback
+		},
+
+		_onClick: function(/*Event*/ e){
+			// summary:
+			//		Clicking this item just toggles its state
+			// tags:
+			//		private
+			if(!this.disabled){
+				this.set("checked", !this.checked);
+				this.onChange(this.checked);
+			}
+			this.inherited(arguments);
+		}
+	});
+
+}
+
+if(!dojo._hasResource["dijit.MenuSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.MenuSeparator"] = true;
+dojo.provide("dijit.MenuSeparator");
+
+
+
+
+
+dojo.declare("dijit.MenuSeparator",
+		[dijit._Widget, dijit._Templated, dijit._Contained],
+		{
+		// summary:
+		//		A line between two menu items
+
+		templateString: dojo.cache("dijit", "templates/MenuSeparator.html", "<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),
+
+		postCreate: function(){
+			dojo.setSelectable(this.domNode, false);
+		},
+
+		isFocusable: function(){
+			// summary:
+			//		Override to always return false
+			// tags:
+			//		protected
+
+			return false; // Boolean
+		}
+	});
+
+
+}
+
+if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.Menu"] = true;
+dojo.provide("dijit.Menu");
+
+
+
+
+
+
+
+dojo.declare("dijit._MenuBase",
+	[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
+{
+	// summary:
+	//		Base class for Menu and MenuBar
+
+	// parentMenu: [readonly] Widget
+	//		pointer to menu that displayed me
+	parentMenu: null,
+
+	// popupDelay: Integer
+	//		number of milliseconds before hovering (without clicking) causes the popup to automatically open.
+	popupDelay: 500,
+
+	startup: function(){
+		if(this._started){ return; }
+
+		dojo.forEach(this.getChildren(), function(child){ child.startup(); });
+		this.startupKeyNavChildren();
+
+		this.inherited(arguments);
+	},
+
+	onExecute: function(){
+		// summary:
+		//		Attach point for notification about when a menu item has been executed.
+		//		This is an internal mechanism used for Menus to signal to their parent to
+		//		close them, because they are about to execute the onClick handler.   In
+		//		general developers should not attach to or override this method.
+		// tags:
+		//		protected
+	},
+
+	onCancel: function(/*Boolean*/ closeAll){
+		// summary:
+		//		Attach point for notification about when the user cancels the current menu
+		//		This is an internal mechanism used for Menus to signal to their parent to
+		//		close them.  In general developers should not attach to or override this method.
+		// tags:
+		//		protected
+	},
+
+	_moveToPopup: function(/*Event*/ evt){
+		// summary:
+		//		This handles the right arrow key (left arrow key on RTL systems),
+		//		which will either open a submenu, or move to the next item in the
+		//		ancestor MenuBar
+		// tags:
+		//		private
+
+		if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){
+			this.focusedChild._onClick(evt);
+		}else{
+			var topMenu = this._getTopMenu();
+			if(topMenu && topMenu._isMenuBar){
+				topMenu.focusNext();
+			}
+		}
+	},
+
+	_onPopupHover: function(/*Event*/ evt){
+		// summary:
+		//		This handler is called when the mouse moves over the popup.
+		// tags:
+		//		private
+
+		// if the mouse hovers over a menu popup that is in pending-close state,
+		// then stop the close operation.
+		// This can't be done in onItemHover since some popup targets don't have MenuItems (e.g. ColorPicker)
+		if(this.currentPopup && this.currentPopup._pendingClose_timer){
+			var parentMenu = this.currentPopup.parentMenu;
+			// highlight the parent menu item pointing to this popup
+			if(parentMenu.focusedChild){
+				parentMenu.focusedChild._setSelected(false);
+			}
+			parentMenu.focusedChild = this.currentPopup.from_item;
+			parentMenu.focusedChild._setSelected(true);
+			// cancel the pending close
+			this._stopPendingCloseTimer(this.currentPopup);
+		}
+	},
+
+	onItemHover: function(/*MenuItem*/ item){
+		// summary:
+		//		Called when cursor is over a MenuItem.
+		// tags:
+		//		protected
+
+		// Don't do anything unless user has "activated" the menu by:
+		//		1) clicking it
+		//		2) opening it from a parent menu (which automatically focuses it)
+		if(this.isActive){
+			this.focusChild(item);
+			if(this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer){
+				this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay);
+			}
+		}
+		// if the user is mixing mouse and keyboard navigation,
+		// then the menu may not be active but a menu item has focus,
+		// but it's not the item that the mouse just hovered over.
+		// To avoid both keyboard and mouse selections, use the latest.
+		if(this.focusedChild){
+			this.focusChild(item);
+		}
+		this._hoveredChild = item;
+	},
+
+	_onChildBlur: function(item){
+		// summary:
+		//		Called when a child MenuItem becomes inactive because focus
+		//		has been removed from the MenuItem *and* it's descendant menus.
+		// tags:
+		//		private
+		this._stopPopupTimer();
+		item._setSelected(false);
+		// Close all popups that are open and descendants of this menu
+		var itemPopup = item.popup;
+		if(itemPopup){
+			this._stopPendingCloseTimer(itemPopup);
+			itemPopup._pendingClose_timer = setTimeout(function(){
+				itemPopup._pendingClose_timer = null;
+				if(itemPopup.parentMenu){
+					itemPopup.parentMenu.currentPopup = null;
+				}
+				dijit.popup.close(itemPopup); // this calls onClose
+			}, this.popupDelay);
+		}
+	},
+
+	onItemUnhover: function(/*MenuItem*/ item){
+		// summary:
+		//		Callback fires when mouse exits a MenuItem
+		// tags:
+		//		protected
+
+		if(this.isActive){
+			this._stopPopupTimer();
+		}
+		if(this._hoveredChild == item){ this._hoveredChild = null; }
+	},
+
+	_stopPopupTimer: function(){
+		// summary:
+		//		Cancels the popup timer because the user has stop hovering
+		//		on the MenuItem, etc.
+		// tags:
+		//		private
+		if(this.hover_timer){
+			clearTimeout(this.hover_timer);
+			this.hover_timer = null;
+		}
+	},
+
+	_stopPendingCloseTimer: function(/*dijit._Widget*/ popup){
+		// summary:
+		//		Cancels the pending-close timer because the close has been preempted
+		// tags:
+		//		private
+		if(popup._pendingClose_timer){
+			clearTimeout(popup._pendingClose_timer);
+			popup._pendingClose_timer = null;
+		}
+	},
+
+	_stopFocusTimer: function(){
+		// summary:
+		//		Cancels the pending-focus timer because the menu was closed before focus occured
+		// tags:
+		//		private
+		if(this._focus_timer){
+			clearTimeout(this._focus_timer);
+			this._focus_timer = null;
+		}
+	},
+
+	_getTopMenu: function(){
+		// summary:
+		//		Returns the top menu in this chain of Menus
+		// tags:
+		//		private
+		for(var top=this; top.parentMenu; top=top.parentMenu);
+		return top;
+	},
+
+	onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){
+		// summary:
+		//		Handle clicks on an item.
+		// tags:
+		//		private
+
+		// this can't be done in _onFocus since the _onFocus events occurs asynchronously
+		if(typeof this.isShowingNow == 'undefined'){ // non-popup menu
+			this._markActive();
+		}
+
+		this.focusChild(item);
+
+		if(item.disabled){ return false; }
+
+		if(item.popup){
+			this._openPopup();
+		}else{
+			// before calling user defined handler, close hierarchy of menus
+			// and restore focus to place it was when menu was opened
+			this.onExecute();
+
+			// user defined handler for click
+			item.onClick(evt);
+		}
+	},
+
+	_openPopup: function(){
+		// summary:
+		//		Open the popup to the side of/underneath the current menu item
+		// tags:
+		//		protected
+
+		this._stopPopupTimer();
+		var from_item = this.focusedChild;
+		if(!from_item){ return; } // the focused child lost focus since the timer was started
+		var popup = from_item.popup;
+		if(popup.isShowingNow){ return; }
+		if(this.currentPopup){
+			this._stopPendingCloseTimer(this.currentPopup);
+			dijit.popup.close(this.currentPopup);
+		}
+		popup.parentMenu = this;
+		popup.from_item = from_item; // helps finding the parent item that should be focused for this popup
+		var self = this;
+		dijit.popup.open({
+			parent: this,
+			popup: popup,
+			around: from_item.domNode,
+			orient: this._orient || (this.isLeftToRight() ?
+									{'TR': 'TL', 'TL': 'TR', 'BR': 'BL', 'BL': 'BR'} :
+									{'TL': 'TR', 'TR': 'TL', 'BL': 'BR', 'BR': 'BL'}),
+			onCancel: function(){ // called when the child menu is canceled
+				// set isActive=false (_closeChild vs _cleanUp) so that subsequent hovering will NOT open child menus
+				// which seems aligned with the UX of most applications (e.g. notepad, wordpad, paint shop pro)
+				self.focusChild(from_item);	// put focus back on my node
+				self._cleanUp();			// close the submenu (be sure this is done _after_ focus is moved)
+				from_item._setSelected(true); // oops, _cleanUp() deselected the item
+				self.focusedChild = from_item;	// and unset focusedChild
+			},
+			onExecute: dojo.hitch(this, "_cleanUp")
+		});
+
+		this.currentPopup = popup;
+		// detect mouseovers to handle lazy mouse movements that temporarily focus other menu items
+		popup.connect(popup.domNode, "onmouseenter", dojo.hitch(self, "_onPopupHover")); // cleaned up when the popped-up widget is destroyed on close
+
+		if(popup.focus){
+			// If user is opening the popup via keyboard (right arrow, or down arrow for MenuBar),
+			// if the cursor happens to collide with the popup, it will generate an onmouseover event
+			// even though the mouse wasn't moved.   Use a setTimeout() to call popup.focus so that
+			// our focus() call overrides the onmouseover event, rather than vice-versa.  (#8742)
+			popup._focus_timer = setTimeout(dojo.hitch(popup, function(){
+				this._focus_timer = null;
+				this.focus();
+			}), 0);
+		}
+	},
+
+	_markActive: function(){
+		// summary:
+		//              Mark this menu's state as active.
+		//		Called when this Menu gets focus from:
+		//			1) clicking it (mouse or via space/arrow key)
+		//			2) being opened by a parent menu.
+		//		This is not called just from mouse hover.
+		//		Focusing a menu via TAB does NOT automatically set isActive
+		//		since TAB is a navigation operation and not a selection one.
+		//		For Windows apps, pressing the ALT key focuses the menubar
+		//		menus (similar to TAB navigation) but the menu is not active
+		//		(ie no dropdown) until an item is clicked.
+		this.isActive = true;
+		dojo.addClass(this.domNode, "dijitMenuActive");
+		dojo.removeClass(this.domNode, "dijitMenuPassive");
+	},
+
+	onOpen: function(/*Event*/ e){
+		// summary:
+		//		Callback when this menu is opened.
+		//		This is called by the popup manager as notification that the menu
+		//		was opened.
+		// tags:
+		//		private
+
+		this.isShowingNow = true;
+		this._markActive();
+	},
+
+	_markInactive: function(){
+		// summary:
+		//		Mark this menu's state as inactive.
+		this.isActive = false; // don't do this in _onBlur since the state is pending-close until we get here
+		dojo.removeClass(this.domNode, "dijitMenuActive");
+		dojo.addClass(this.domNode, "dijitMenuPassive");
+	},
+
+	onClose: function(){
+		// summary:
+		//		Callback when this menu is closed.
+		//		This is called by the popup manager as notification that the menu
+		//		was closed.
+		// tags:
+		//		private
+
+		this._stopFocusTimer();
+		this._markInactive();
+		this.isShowingNow = false;
+		this.parentMenu = null;
+	},
+
+	_closeChild: function(){
+		// summary:
+		//		Called when submenu is clicked or focus is lost.  Close hierarchy of menus.
+		// tags:
+		//		private
+		this._stopPopupTimer();
+		if(this.focusedChild){ // unhighlight the focused item
+			this.focusedChild._setSelected(false);
+			this.focusedChild._onUnhover();
+			this.focusedChild = null;
+		}
+		if(this.currentPopup){
+			// Close all popups that are open and descendants of this menu
+			dijit.popup.close(this.currentPopup);
+			this.currentPopup = null;
+		}
+	},
+
+	_onItemFocus: function(/*MenuItem*/ item){
+		// summary:
+		//		Called when child of this Menu gets focus from:
+		//			1) clicking it
+		//			2) tabbing into it
+		//			3) being opened by a parent menu.
+		//		This is not called just from mouse hover.
+		if(this._hoveredChild && this._hoveredChild != item){
+			this._hoveredChild._onUnhover(); // any previous mouse movement is trumped by focus selection
+		}
+	},
+
+	_onBlur: function(){
+		// summary:
+		//		Called when focus is moved away from this Menu and it's submenus.
+		// tags:
+		//		protected
+		this._cleanUp();
+		this.inherited(arguments);
+	},
+
+	_cleanUp: function(){
+		// summary:
+		//		Called when the user is done with this menu.  Closes hierarchy of menus.
+		// tags:
+		//		private
+
+		this._closeChild(); // don't call this.onClose since that's incorrect for MenuBar's that never close
+		if(typeof this.isShowingNow == 'undefined'){ // non-popup menu doesn't call onClose
+			this._markInactive();
+		}
+	}
+});
+
+dojo.declare("dijit.Menu",
+	dijit._MenuBase,
+	{
+	// summary
+	//		A context menu you can assign to multiple elements
+
+	// TODO: most of the code in here is just for context menu (right-click menu)
+	// support.  In retrospect that should have been a separate class (dijit.ContextMenu).
+	// Split them for 2.0
+
+	constructor: function(){
+		this._bindings = [];
+	},
+
+	templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),
+
+	baseClass: "dijitMenu",
+
+	// targetNodeIds: [const] String[]
+	//		Array of dom node ids of nodes to attach to.
+	//		Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
+	targetNodeIds: [],
+
+	// contextMenuForWindow: [const] Boolean
+	//		If true, right clicking anywhere on the window will cause this context menu to open.
+	//		If false, must specify targetNodeIds.
+	contextMenuForWindow: false,
+
+	// leftClickToOpen: [const] Boolean
+	//		If true, menu will open on left click instead of right click, similiar to a file menu.
+	leftClickToOpen: false,
+
+	// refocus: Boolean
+	// 		When this menu closes, re-focus the element which had focus before it was opened.
+	refocus: true,
+
+	postCreate: function(){
+		if(this.contextMenuForWindow){
+			this.bindDomNode(dojo.body());
+		}else{
+			// TODO: should have _setTargetNodeIds() method to handle initialization and a possible
+			// later attr('targetNodeIds', ...) call.   There's also a problem that targetNodeIds[]
+			// gets stale after calls to bindDomNode()/unBindDomNode() as it still is just the original list (see #9610)
+			dojo.forEach(this.targetNodeIds, this.bindDomNode, this);
+		}
+		var k = dojo.keys, l = this.isLeftToRight();
+		this._openSubMenuKey = l ? k.RIGHT_ARROW : k.LEFT_ARROW;
+		this._closeSubMenuKey = l ? k.LEFT_ARROW : k.RIGHT_ARROW;
+		this.connectKeyNavHandlers([k.UP_ARROW], [k.DOWN_ARROW]);
+	},
+
+	_onKeyPress: function(/*Event*/ evt){
+		// summary:
+		//		Handle keyboard based menu navigation.
+		// tags:
+		//		protected
+
+		if(evt.ctrlKey || evt.altKey){ return; }
+
+		switch(evt.charOrCode){
+			case this._openSubMenuKey:
+				this._moveToPopup(evt);
+				dojo.stopEvent(evt);
+				break;
+			case this._closeSubMenuKey:
+				if(this.parentMenu){
+					if(this.parentMenu._isMenuBar){
+						this.parentMenu.focusPrev();
+					}else{
+						this.onCancel(false);
+					}
+				}else{
+					dojo.stopEvent(evt);
+				}
+				break;
+		}
+	},
+
+	// thanks burstlib!
+	_iframeContentWindow: function(/* HTMLIFrameElement */iframe_el){
+		// summary:
+		//		Returns the window reference of the passed iframe
+		// tags:
+		//		private
+		var win = dojo.window.get(this._iframeContentDocument(iframe_el)) ||
+			// Moz. TODO: is this available when defaultView isn't?
+			this._iframeContentDocument(iframe_el)['__parent__'] ||
+			(iframe_el.name && dojo.doc.frames[iframe_el.name]) || null;
+		return win;	//	Window
+	},
+
+	_iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){
+		// summary:
+		//		Returns a reference to the document object inside iframe_el
+		// tags:
+		//		protected
+		var doc = iframe_el.contentDocument // W3
+			|| (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE
+			|| (iframe_el.name && dojo.doc.frames[iframe_el.name] && dojo.doc.frames[iframe_el.name].document)
+			|| null;
+		return doc;	//	HTMLDocument
+	},
+
+	bindDomNode: function(/*String|DomNode*/ node){
+		// summary:
+		//		Attach menu to given node
+		node = dojo.byId(node);
+
+		var cn;	// Connect node
+
+		// Support context menus on iframes.   Rather than binding to the iframe itself we need
+		// to bind to the <body> node inside the iframe.
+		if(node.tagName.toLowerCase() == "iframe"){
+			var iframe = node,
+				win = this._iframeContentWindow(iframe);
+			cn = dojo.withGlobal(win, dojo.body);
+		}else{
+			
+			// To capture these events at the top level, attach to <html>, not <body>.
+			// Otherwise right-click context menu just doesn't work.
+			cn = (node == dojo.body() ? dojo.doc.documentElement : node);
+		}
+
+
+		// "binding" is the object to track our connection to the node (ie, the parameter to bindDomNode())
+		var binding = {
+			node: node,
+			iframe: iframe
+		};
+
+		// Save info about binding in _bindings[], and make node itself record index(+1) into
+		// _bindings[] array.   Prefix w/_dijitMenu to avoid setting an attribute that may
+		// start with a number, which fails on FF/safari.
+		dojo.attr(node, "_dijitMenu" + this.id, this._bindings.push(binding));
+
+		// Setup the connections to monitor click etc., unless we are connecting to an iframe which hasn't finished
+		// loading yet, in which case we need to wait for the onload event first, and then connect
+		// On linux Shift-F10 produces the oncontextmenu event, but on Windows it doesn't, so
+		// we need to monitor keyboard events in addition to the oncontextmenu event.
+		var doConnects = dojo.hitch(this, function(cn){
+			return [
+				// TODO: when leftClickToOpen is true then shouldn't space/enter key trigger the menu,
+				// rather than shift-F10?
+				dojo.connect(cn, this.leftClickToOpen ? "onclick" : "oncontextmenu", this, function(evt){
+					// Schedule context menu to be opened unless it's already been scheduled from onkeydown handler
+					dojo.stopEvent(evt);
+					this._scheduleOpen(evt.target, iframe, {x: evt.pageX, y: evt.pageY});
+				}),
+				dojo.connect(cn, "onkeydown", this, function(evt){
+					if(evt.shiftKey && evt.keyCode == dojo.keys.F10){
+						dojo.stopEvent(evt);
+						this._scheduleOpen(evt.target, iframe);	// no coords - open near target node
+					}
+				})
+			];	
+		});
+		binding.connects = cn ? doConnects(cn) : [];
+
+		if(iframe){
+			// Setup handler to [re]bind to the iframe when the contents are initially loaded,
+			// and every time the contents change.
+			// Need to do this b/c we are actually binding to the iframe's <body> node.
+			// Note: can't use dojo.connect(), see #9609.
+
+			binding.onloadHandler = dojo.hitch(this, function(){
+				// want to remove old connections, but IE throws exceptions when trying to
+				// access the <body> node because it's already gone, or at least in a state of limbo
+
+				var win = this._iframeContentWindow(iframe);
+					cn = dojo.withGlobal(win, dojo.body);
+				binding.connects = doConnects(cn);
+			});
+			if(iframe.addEventListener){
+				iframe.addEventListener("load", binding.onloadHandler, false);
+			}else{
+				iframe.attachEvent("onload", binding.onloadHandler);
+			}
+		}
+	},
+
+	unBindDomNode: function(/*String|DomNode*/ nodeName){
+		// summary:
+		//		Detach menu from given node
+
+		var node;
+		try{
+			node = dojo.byId(nodeName);
+		}catch(e){
+			// On IE the dojo.byId() call will get an exception if the attach point was
+			// the <body> node of an <iframe> that has since been reloaded (and thus the
+			// <body> node is in a limbo state of destruction.
+			return;
+		}
+
+		// node["_dijitMenu" + this.id] contains index(+1) into my _bindings[] array
+		var attrName = "_dijitMenu" + this.id;
+		if(node && dojo.hasAttr(node, attrName)){
+			var bid = dojo.attr(node, attrName)-1, b = this._bindings[bid];
+			dojo.forEach(b.connects, dojo.disconnect);
+
+			// Remove listener for iframe onload events
+			var iframe = b.iframe;
+			if(iframe){
+				if(iframe.removeEventListener){
+					iframe.removeEventListener("load", b.onloadHandler, false);
+				}else{
+					iframe.detachEvent("onload", b.onloadHandler);
+				}
+			}
+
+			dojo.removeAttr(node, attrName);
+			delete this._bindings[bid];
+		}
+	},
+
+	_scheduleOpen: function(/*DomNode?*/ target, /*DomNode?*/ iframe, /*Object?*/ coords){
+		// summary:
+		//		Set timer to display myself.  Using a timer rather than displaying immediately solves
+		//		two problems:
+		//
+		//		1. IE: without the delay, focus work in "open" causes the system
+		//		context menu to appear in spite of stopEvent.
+		//
+		//		2. Avoid double-shows on linux, where shift-F10 generates an oncontextmenu event
+		//		even after a dojo.stopEvent(e).  (Shift-F10 on windows doesn't generate the
+		//		oncontextmenu event.)
+
+		if(!this._openTimer){
+			this._openTimer = setTimeout(dojo.hitch(this, function(){
+				delete this._openTimer;
+				this._openMyself({
+					target: target,
+					iframe: iframe,
+					coords: coords
+				});
+			}), 1);
+		}
+	},
+
+	_openMyself: function(args){
+		// summary:
+		//		Internal function for opening myself when the user does a right-click or something similar.
+		// args:
+		//		This is an Object containing:
+		//		* target:
+		//			The node that is being clicked
+		//		* iframe:
+		//			If an <iframe> is being clicked, iframe points to that iframe
+		//		* coords:
+		//			Put menu at specified x/y position in viewport, or if iframe is
+		//			specified, then relative to iframe.
+		//
+		//		_openMyself() formerly took the event object, and since various code references
+		//		evt.target (after connecting to _openMyself()), using an Object for parameters
+		//		(so that old code still works).
+
+		var target = args.target,
+			iframe = args.iframe,
+			coords = args.coords;
+
+		// Get coordinates to open menu, either at specified (mouse) position or (if triggered via keyboard)
+		// then near the node the menu is assigned to.
+		if(coords){
+			if(iframe){
+				// Specified coordinates are on <body> node of an <iframe>, convert to match main document
+				var od = target.ownerDocument,
+					ifc = dojo.position(iframe, true),
+					win = this._iframeContentWindow(iframe),
+					scroll = dojo.withGlobal(win, "_docScroll", dojo);
+	
+				var cs = dojo.getComputedStyle(iframe),
+					tp = dojo._toPixelValue,
+					left = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingLeft)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderLeftWidth) : 0),
+					top = (dojo.isIE && dojo.isQuirks ? 0 : tp(iframe, cs.paddingTop)) + (dojo.isIE && dojo.isQuirks ? tp(iframe, cs.borderTopWidth) : 0);
+
+				coords.x += ifc.x + left - scroll.x;
+				coords.y += ifc.y + top - scroll.y;
+			}
+		}else{
+			coords = dojo.position(target, true);
+			coords.x += 10;
+			coords.y += 10;
+		}
+
+		var self=this;
+		var savedFocus = dijit.getFocus(this);
+		function closeAndRestoreFocus(){
+			// user has clicked on a menu or popup
+			if(self.refocus){
+				dijit.focus(savedFocus);
+			}
+			dijit.popup.close(self);
+		}
+		dijit.popup.open({
+			popup: this,
+			x: coords.x,
+			y: coords.y,
+			onExecute: closeAndRestoreFocus,
+			onCancel: closeAndRestoreFocus,
+			orient: this.isLeftToRight() ? 'L' : 'R'
+		});
+		this.focus();
+
+		this._onBlur = function(){
+			this.inherited('_onBlur', arguments);
+			// Usually the parent closes the child widget but if this is a context
+			// menu then there is no parent
+			dijit.popup.close(this);
+			// don't try to restore focus; user has clicked another part of the screen
+			// and set focus there
+		};
+	},
+
+	uninitialize: function(){
+ 		dojo.forEach(this._bindings, function(b){ if(b){ this.unBindDomNode(b.node); } }, this);
+ 		this.inherited(arguments);
+	}
+}
+);
+
+// Back-compat (TODO: remove in 2.0)
+
+
+
+
+
+
+}
+
+if(!dojo._hasResource["dojox.html.metrics"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.html.metrics"] = true;
+dojo.provide("dojox.html.metrics");
+
+(function(){
+	var dhm = dojox.html.metrics;
+
+	//	derived from Morris John's emResized measurer
+	dhm.getFontMeasurements = function(){
+		//	summary
+		//	Returns an object that has pixel equivilents of standard font size values.
+		var heights = {
+			'1em':0, '1ex':0, '100%':0, '12pt':0, '16px':0, 'xx-small':0, 'x-small':0,
+			'small':0, 'medium':0, 'large':0, 'x-large':0, 'xx-large':0
+		};
+	
+		if(dojo.isIE){
+			//	we do a font-size fix if and only if one isn't applied already.
+			//	NOTE: If someone set the fontSize on the HTML Element, this will kill it.
+			dojo.doc.documentElement.style.fontSize="100%";
+		}
+	
+		//	set up the measuring node.
+		var div=dojo.doc.createElement("div");
+		var ds = div.style;
+		ds.position="absolute";
+		ds.left="-100px";
+		ds.top="0";
+		ds.width="30px";
+		ds.height="1000em";
+		ds.borderWidth="0";
+		ds.margin="0";
+		ds.padding="0";
+		ds.outline="0";
+		ds.lineHeight="1";
+		ds.overflow="hidden";
+		dojo.body().appendChild(div);
+	
+		//	do the measurements.
+		for(var p in heights){
+			ds.fontSize = p;
+			heights[p] = Math.round(div.offsetHeight * 12/16) * 16/12 / 1000;
+		}
+		
+		dojo.body().removeChild(div);
+		div = null;
+		return heights; 	//	object
+	};
+
+	var fontMeasurements = null;
+	
+	dhm.getCachedFontMeasurements = function(recalculate){
+		if(recalculate || !fontMeasurements){
+			fontMeasurements = dhm.getFontMeasurements();
+		}
+		return fontMeasurements;
+	};
+
+	var measuringNode = null, empty = {};
+	dhm.getTextBox = function(/* String */ text, /* Object */ style, /* String? */ className){
+		var m, s;
+		if(!measuringNode){
+			m = measuringNode = dojo.doc.createElement("div");
+			// Container that we can set contraints on so that it doesn't
+			// trigger a scrollbar.
+			var c = dojo.doc.createElement("div"); 
+			c.appendChild(m);
+			s = c.style;
+			s.overflow='scroll';
+			s.position = "absolute";
+			s.left = "0px";
+			s.top = "-10000px";
+			s.width = "1px";
+			s.height = "1px";
+			s.visibility = "hidden";
+			s.borderWidth = "0";
+			s.margin = "0";
+			s.padding = "0";
+			s.outline = "0";
+			dojo.body().appendChild(c);
+		}else{
+			m = measuringNode;
+		}
+		// reset styles
+		m.className = "";
+		s = m.style;
+		s.borderWidth = "0";
+		s.margin = "0";
+		s.padding = "0";
+		s.outline = "0";
+		// set new style
+		if(arguments.length > 1 && style){
+			for(var i in style){
+				if(i in empty){ continue; }
+				s[i] = style[i];
+			}
+		}
+		// set classes
+		if(arguments.length > 2 && className){
+			m.className = className;
+		}
+		// take a measure
+		m.innerHTML = text;
+		var box = dojo.position(m);
+		// position doesn't report right (reports 1, since parent is 1)
+		// So we have to look at the scrollWidth to get the real width
+		// Height is right.
+		box.w = m.parentNode.scrollWidth;
+		return box;
+	};
+
+	//	determine the scrollbar sizes on load.
+	var scroll={ w:16, h:16 };
+	dhm.getScrollbar=function(){ return { w:scroll.w, h:scroll.h }; };
+
+	dhm._fontResizeNode = null;
+
+	dhm.initOnFontResize = function(interval){
+		var f = dhm._fontResizeNode = dojo.doc.createElement("iframe");
+		var fs = f.style;
+		fs.position = "absolute";
+		fs.width = "5em";
+		fs.height = "10em";
+		fs.top = "-10000px";
+		if(dojo.isIE){
+			f.onreadystatechange = function(){
+				if(f.contentWindow.document.readyState == "complete"){
+					f.onresize = f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+				}
+			};
+		}else{
+			f.onload = function(){
+				f.contentWindow.onresize = f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;
+			};
+		}
+		//The script tag is to work around a known firebug race condition.  See comments in bug #9046
+		f.setAttribute("src", "javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'");
+		dojo.body().appendChild(f);
+		dhm.initOnFontResize = function(){};
+	};
+
+	dhm.onFontResize = function(){};
+	dhm._fontresize = function(){
+		dhm.onFontResize();
+	}
+
+	dojo.addOnUnload(function(){
+		// destroy our font resize iframe if we have one
+		var f = dhm._fontResizeNode;
+		if(f){
+			if(dojo.isIE && f.onresize){
+				f.onresize = null;
+			}else if(f.contentWindow && f.contentWindow.onresize){
+				f.contentWindow.onresize = null;
+			}
+			dhm._fontResizeNode = null;
+		}
+	});
+
+	dojo.addOnLoad(function(){
+		// getScrollbar metrics node
+		try{
+			var n=dojo.doc.createElement("div");
+			n.style.cssText = "top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";
+			dojo.body().appendChild(n);
+			scroll.w = n.offsetWidth - n.clientWidth;
+			scroll.h = n.offsetHeight - n.clientHeight;
+			dojo.body().removeChild(n);
+			//console.log("Scroll bar dimensions: ", scroll);
+			delete n;
+		}catch(e){}
+
+		// text size poll setup
+		if("fontSizeWatch" in dojo.config && !!dojo.config.fontSizeWatch){
+			dhm.initOnFontResize();
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.util"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.util"] = true;
+dojo.provide("dojox.grid.util");
+
+// summary: grid utility library
+(function(){
+	var dgu = dojox.grid.util;
+
+	dgu.na = '...';
+	dgu.rowIndexTag = "gridRowIndex";
+	dgu.gridViewTag = "gridView";
+
+
+	dgu.fire = function(ob, ev, args){
+		var fn = ob && ev && ob[ev];
+		return fn && (args ? fn.apply(ob, args) : ob[ev]());
+	};
+	
+	dgu.setStyleHeightPx = function(inElement, inHeight){
+		if(inHeight >= 0){
+			var s = inElement.style;
+			var v = inHeight + 'px';
+			if(inElement && s['height'] != v){
+				s['height'] = v;
+			}
+		}
+	};
+	
+	dgu.mouseEvents = [ 'mouseover', 'mouseout', /*'mousemove',*/ 'mousedown', 'mouseup', 'click', 'dblclick', 'contextmenu' ];
+
+	dgu.keyEvents = [ 'keyup', 'keydown', 'keypress' ];
+
+	dgu.funnelEvents = function(inNode, inObject, inMethod, inEvents){
+		var evts = (inEvents ? inEvents : dgu.mouseEvents.concat(dgu.keyEvents));
+		for (var i=0, l=evts.length; i<l; i++){
+			inObject.connect(inNode, 'on' + evts[i], inMethod);
+		}
+	};
+
+	dgu.removeNode = function(inNode){
+		inNode = dojo.byId(inNode);
+		inNode && inNode.parentNode && inNode.parentNode.removeChild(inNode);
+		return inNode;
+	};
+	
+	dgu.arrayCompare = function(inA, inB){
+		for(var i=0,l=inA.length; i<l; i++){
+			if(inA[i] != inB[i]){return false;}
+		}
+		return (inA.length == inB.length);
+	};
+	
+	dgu.arrayInsert = function(inArray, inIndex, inValue){
+		if(inArray.length <= inIndex){
+			inArray[inIndex] = inValue;
+		}else{
+			inArray.splice(inIndex, 0, inValue);
+		}
+	};
+	
+	dgu.arrayRemove = function(inArray, inIndex){
+		inArray.splice(inIndex, 1);
+	};
+	
+	dgu.arraySwap = function(inArray, inI, inJ){
+		var cache = inArray[inI];
+		inArray[inI] = inArray[inJ];
+		inArray[inJ] = cache;
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid._Scroller"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Scroller"] = true;
+dojo.provide("dojox.grid._Scroller");
+
+(function(){
+	var indexInParent = function(inNode){
+		var i=0, n, p=inNode.parentNode;
+		while((n = p.childNodes[i++])){
+			if(n == inNode){
+				return i - 1;
+			}
+		}
+		return -1;
+	};
+	
+	var cleanNode = function(inNode){
+		if(!inNode){
+			return;
+		}
+		var filter = function(inW){
+			return inW.domNode && dojo.isDescendant(inW.domNode, inNode, true);
+		};
+		var ws = dijit.registry.filter(filter);
+		for(var i=0, w; (w=ws[i]); i++){
+			w.destroy();
+		}
+		delete ws;
+	};
+
+	var getTagName = function(inNodeOrId){
+		var node = dojo.byId(inNodeOrId);
+		return (node && node.tagName ? node.tagName.toLowerCase() : '');
+	};
+	
+	var nodeKids = function(inNode, inTag){
+		var result = [];
+		var i=0, n;
+		while((n = inNode.childNodes[i])){
+			i++;
+			if(getTagName(n) == inTag){
+				result.push(n);
+			}
+		}
+		return result;
+	};
+	
+	var divkids = function(inNode){
+		return nodeKids(inNode, 'div');
+	};
+
+	dojo.declare("dojox.grid._Scroller", null, {
+		constructor: function(inContentNodes){
+			this.setContentNodes(inContentNodes);
+			this.pageHeights = [];
+			this.pageNodes = [];
+			this.stack = [];
+		},
+		// specified
+		rowCount: 0, // total number of rows to manage
+		defaultRowHeight: 32, // default height of a row
+		keepRows: 100, // maximum number of rows that should exist at one time
+		contentNode: null, // node to contain pages
+		scrollboxNode: null, // node that controls scrolling
+		// calculated
+		defaultPageHeight: 0, // default height of a page
+		keepPages: 10, // maximum number of pages that should exists at one time
+		pageCount: 0,
+		windowHeight: 0,
+		firstVisibleRow: 0,
+		lastVisibleRow: 0,
+		averageRowHeight: 0, // the average height of a row
+		// private
+		page: 0,
+		pageTop: 0,
+		// init
+		init: function(inRowCount, inKeepRows, inRowsPerPage){
+			switch(arguments.length){
+				case 3: this.rowsPerPage = inRowsPerPage;
+				case 2: this.keepRows = inKeepRows;
+				case 1: this.rowCount = inRowCount;
+				default: break;
+			}
+			this.defaultPageHeight = this.defaultRowHeight * this.rowsPerPage;
+			this.pageCount = this._getPageCount(this.rowCount, this.rowsPerPage);
+			this.setKeepInfo(this.keepRows);
+			this.invalidate();
+			if(this.scrollboxNode){
+				this.scrollboxNode.scrollTop = 0;
+				this.scroll(0);
+				this.scrollboxNode.onscroll = dojo.hitch(this, 'onscroll');
+			}
+		},
+		_getPageCount: function(rowCount, rowsPerPage){
+			return rowCount ? (Math.ceil(rowCount / rowsPerPage) || 1) : 0;
+		},
+		destroy: function(){
+			this.invalidateNodes();
+			delete this.contentNodes;
+			delete this.contentNode;
+			delete this.scrollboxNode;
+		},
+		setKeepInfo: function(inKeepRows){
+			this.keepRows = inKeepRows;
+			this.keepPages = !this.keepRows ? this.keepPages : Math.max(Math.ceil(this.keepRows / this.rowsPerPage), 2);
+		},
+		// nodes
+		setContentNodes: function(inNodes){
+			this.contentNodes = inNodes;
+			this.colCount = (this.contentNodes ? this.contentNodes.length : 0);
+			this.pageNodes = [];
+			for(var i=0; i<this.colCount; i++){
+				this.pageNodes[i] = [];
+			}
+		},
+		getDefaultNodes: function(){
+			return this.pageNodes[0] || [];
+		},
+		// updating
+		invalidate: function(){
+			this._invalidating = true;
+			this.invalidateNodes();
+			this.pageHeights = [];
+			this.height = (this.pageCount ? (this.pageCount - 1)* this.defaultPageHeight + this.calcLastPageHeight() : 0);
+			this.resize();
+			this._invalidating = false;
+		},
+		updateRowCount: function(inRowCount){
+			this.invalidateNodes();
+			this.rowCount = inRowCount;
+			// update page count, adjust document height
+			var oldPageCount = this.pageCount;
+			if(oldPageCount === 0){
+				//We want to have at least 1px in height to keep scroller.  Otherwise with an
+				//empty grid you can't scroll to see the header.
+				this.height = 1;
+			}
+			this.pageCount = this._getPageCount(this.rowCount, this.rowsPerPage);
+			if(this.pageCount < oldPageCount){
+				for(var i=oldPageCount-1; i>=this.pageCount; i--){
+					this.height -= this.getPageHeight(i);
+					delete this.pageHeights[i];
+				}
+			}else if(this.pageCount > oldPageCount){
+				this.height += this.defaultPageHeight * (this.pageCount - oldPageCount - 1) + this.calcLastPageHeight();
+			}
+			this.resize();
+		},
+		// implementation for page manager
+		pageExists: function(inPageIndex){
+			return Boolean(this.getDefaultPageNode(inPageIndex));
+		},
+		measurePage: function(inPageIndex){
+			if(this.grid.rowHeight){
+				var height = this.grid.rowHeight + 1;
+				return ((inPageIndex + 1) * this.rowsPerPage > this.rowCount ?
+					this.rowCount - inPageIndex * this.rowsPerPage :
+					this.rowsPerPage) * height;
+					 
+			}
+			var n = this.getDefaultPageNode(inPageIndex);
+			return (n && n.innerHTML) ? n.offsetHeight : undefined;
+		},
+		positionPage: function(inPageIndex, inPos){
+			for(var i=0; i<this.colCount; i++){
+				this.pageNodes[i][inPageIndex].style.top = inPos + 'px';
+			}
+		},
+		repositionPages: function(inPageIndex){
+			var nodes = this.getDefaultNodes();
+			var last = 0;
+
+			for(var i=0; i<this.stack.length; i++){
+				last = Math.max(this.stack[i], last);
+			}
+			//
+			var n = nodes[inPageIndex];
+			var y = (n ? this.getPageNodePosition(n) + this.getPageHeight(inPageIndex) : 0);
+			for(var p=inPageIndex+1; p<=last; p++){
+				n = nodes[p];
+				if(n){
+					if(this.getPageNodePosition(n) == y){
+						return;
+					}
+					this.positionPage(p, y);
+				}
+				y += this.getPageHeight(p);
+			}
+		},
+		installPage: function(inPageIndex){
+			for(var i=0; i<this.colCount; i++){
+				this.contentNodes[i].appendChild(this.pageNodes[i][inPageIndex]);
+			}
+		},
+		preparePage: function(inPageIndex, inReuseNode){
+			var p = (inReuseNode ? this.popPage() : null);
+			for(var i=0; i<this.colCount; i++){
+				var nodes = this.pageNodes[i];
+				var new_p = (p === null ? this.createPageNode() : this.invalidatePageNode(p, nodes));
+				new_p.pageIndex = inPageIndex;
+				nodes[inPageIndex] = new_p;
+			}
+		},
+		// rendering implementation
+		renderPage: function(inPageIndex){
+			var nodes = [];
+			var i, j;
+			for(i=0; i<this.colCount; i++){
+				nodes[i] = this.pageNodes[i][inPageIndex];
+			}
+			for(i=0, j=inPageIndex*this.rowsPerPage; (i<this.rowsPerPage)&&(j<this.rowCount); i++, j++){
+				this.renderRow(j, nodes);
+			}
+		},
+		removePage: function(inPageIndex){
+			for(var i=0, j=inPageIndex*this.rowsPerPage; i<this.rowsPerPage; i++, j++){
+				this.removeRow(j);
+			}
+		},
+		destroyPage: function(inPageIndex){
+			for(var i=0; i<this.colCount; i++){
+				var n = this.invalidatePageNode(inPageIndex, this.pageNodes[i]);
+				if(n){
+					dojo.destroy(n);
+				}
+			}
+		},
+		pacify: function(inShouldPacify){
+		},
+		// pacification
+		pacifying: false,
+		pacifyTicks: 200,
+		setPacifying: function(inPacifying){
+			if(this.pacifying != inPacifying){
+				this.pacifying = inPacifying;
+				this.pacify(this.pacifying);
+			}
+		},
+		startPacify: function(){
+			this.startPacifyTicks = new Date().getTime();
+		},
+		doPacify: function(){
+			var result = (new Date().getTime() - this.startPacifyTicks) > this.pacifyTicks;
+			this.setPacifying(true);
+			this.startPacify();
+			return result;
+		},
+		endPacify: function(){
+			this.setPacifying(false);
+		},
+		// default sizing implementation
+		resize: function(){
+			if(this.scrollboxNode){
+				this.windowHeight = this.scrollboxNode.clientHeight;
+			}
+			for(var i=0; i<this.colCount; i++){
+				//We want to have 1px in height min to keep scroller.  Otherwise can't scroll
+				//and see header in empty grid.
+				dojox.grid.util.setStyleHeightPx(this.contentNodes[i], Math.max(1,this.height));
+			}
+			
+			// Calculate the average row height and update the defaults (row and page).
+			var needPage = (!this._invalidating);
+			if(!needPage){
+				var ah = this.grid.attr("autoHeight");
+				if(typeof ah == "number" && ah <= Math.min(this.rowsPerPage, this.rowCount)){
+					needPage = true;
+				}
+			}
+			if(needPage){
+				this.needPage(this.page, this.pageTop);
+			}
+			var rowsOnPage = (this.page < this.pageCount - 1) ? this.rowsPerPage : ((this.rowCount % this.rowsPerPage) || this.rowsPerPage);
+			var pageHeight = this.getPageHeight(this.page);
+			this.averageRowHeight = (pageHeight > 0 && rowsOnPage > 0) ? (pageHeight / rowsOnPage) : 0;
+		},
+		calcLastPageHeight: function(){
+			if(!this.pageCount){
+				return 0;
+			}
+			var lastPage = this.pageCount - 1;
+			var lastPageHeight = ((this.rowCount % this.rowsPerPage)||(this.rowsPerPage)) * this.defaultRowHeight;
+			this.pageHeights[lastPage] = lastPageHeight;
+			return lastPageHeight;
+		},
+		updateContentHeight: function(inDh){
+			this.height += inDh;
+			this.resize();
+		},
+		updatePageHeight: function(inPageIndex, fromBuild){
+			if(this.pageExists(inPageIndex)){
+				var oh = this.getPageHeight(inPageIndex);
+				var h = (this.measurePage(inPageIndex));
+				if(h === undefined){
+					h = oh;
+				}
+				this.pageHeights[inPageIndex] = h;
+				if(oh != h){
+					this.updateContentHeight(h - oh);
+					var ah = this.grid.attr("autoHeight");
+					if((typeof ah == "number" && ah > this.rowCount)||(ah === true && !fromBuild)){
+						this.grid.sizeChange();
+					}else{
+						this.repositionPages(inPageIndex);
+					}
+				}
+				return h;
+			}
+			return 0;
+		},
+		rowHeightChanged: function(inRowIndex){
+			this.updatePageHeight(Math.floor(inRowIndex / this.rowsPerPage), false);
+		},
+		// scroller core
+		invalidateNodes: function(){
+			while(this.stack.length){
+				this.destroyPage(this.popPage());
+			}
+		},
+		createPageNode: function(){
+			var p = document.createElement('div');
+			dojo.attr(p,"role","presentation");
+			p.style.position = 'absolute';
+			//p.style.width = '100%';
+			p.style[dojo._isBodyLtr() ? "left" : "right"] = '0';
+			return p;
+		},
+		getPageHeight: function(inPageIndex){
+			var ph = this.pageHeights[inPageIndex];
+			return (ph !== undefined ? ph : this.defaultPageHeight);
+		},
+		// FIXME: this is not a stack, it's a FIFO list
+		pushPage: function(inPageIndex){
+			return this.stack.push(inPageIndex);
+		},
+		popPage: function(){
+			return this.stack.shift();
+		},
+		findPage: function(inTop){
+			var i = 0, h = 0;
+			for(var ph = 0; i<this.pageCount; i++, h += ph){
+				ph = this.getPageHeight(i);
+				if(h + ph >= inTop){
+					break;
+				}
+			}
+			this.page = i;
+			this.pageTop = h;
+		},
+		buildPage: function(inPageIndex, inReuseNode, inPos){
+			this.preparePage(inPageIndex, inReuseNode);
+			this.positionPage(inPageIndex, inPos);
+			// order of operations is key below
+			this.installPage(inPageIndex);
+			this.renderPage(inPageIndex);
+			// order of operations is key above
+			this.pushPage(inPageIndex);
+		},
+		needPage: function(inPageIndex, inPos){
+			var h = this.getPageHeight(inPageIndex), oh = h;
+			if(!this.pageExists(inPageIndex)){
+				this.buildPage(inPageIndex, this.keepPages&&(this.stack.length >= this.keepPages), inPos);
+				h = this.updatePageHeight(inPageIndex, true);
+			}else{
+				this.positionPage(inPageIndex, inPos);
+			}
+			return h;
+		},
+		onscroll: function(){
+			this.scroll(this.scrollboxNode.scrollTop);
+		},
+		scroll: function(inTop){
+			this.grid.scrollTop = inTop;
+			if(this.colCount){
+				this.startPacify();
+				this.findPage(inTop);
+				var h = this.height;
+				var b = this.getScrollBottom(inTop);
+				for(var p=this.page, y=this.pageTop; (p<this.pageCount)&&((b<0)||(y<b)); p++){
+					y += this.needPage(p, y);
+				}
+				this.firstVisibleRow = this.getFirstVisibleRow(this.page, this.pageTop, inTop);
+				this.lastVisibleRow = this.getLastVisibleRow(p - 1, y, b);
+				// indicates some page size has been updated
+				if(h != this.height){
+					this.repositionPages(p-1);
+				}
+				this.endPacify();
+			}
+		},
+		getScrollBottom: function(inTop){
+			return (this.windowHeight >= 0 ? inTop + this.windowHeight : -1);
+		},
+		// events
+		processNodeEvent: function(e, inNode){
+			var t = e.target;
+			while(t && (t != inNode) && t.parentNode && (t.parentNode.parentNode != inNode)){
+				t = t.parentNode;
+			}
+			if(!t || !t.parentNode || (t.parentNode.parentNode != inNode)){
+				return false;
+			}
+			var page = t.parentNode;
+			e.topRowIndex = page.pageIndex * this.rowsPerPage;
+			e.rowIndex = e.topRowIndex + indexInParent(t);
+			e.rowTarget = t;
+			return true;
+		},
+		processEvent: function(e){
+			return this.processNodeEvent(e, this.contentNode);
+		},
+		// virtual rendering interface
+		renderRow: function(inRowIndex, inPageNode){
+		},
+		removeRow: function(inRowIndex){
+		},
+		// page node operations
+		getDefaultPageNode: function(inPageIndex){
+			return this.getDefaultNodes()[inPageIndex];
+		},
+		positionPageNode: function(inNode, inPos){
+		},
+		getPageNodePosition: function(inNode){
+			return inNode.offsetTop;
+		},
+		invalidatePageNode: function(inPageIndex, inNodes){
+			var p = inNodes[inPageIndex];
+			if(p){
+				delete inNodes[inPageIndex];
+				this.removePage(inPageIndex, p);
+				cleanNode(p);
+				p.innerHTML = '';
+			}
+			return p;
+		},
+		// scroll control
+		getPageRow: function(inPage){
+			return inPage * this.rowsPerPage;
+		},
+		getLastPageRow: function(inPage){
+			return Math.min(this.rowCount, this.getPageRow(inPage + 1)) - 1;
+		},
+		getFirstVisibleRow: function(inPage, inPageTop, inScrollTop){
+			if(!this.pageExists(inPage)){
+				return 0;
+			}
+			var row = this.getPageRow(inPage);
+			var nodes = this.getDefaultNodes();
+			var rows = divkids(nodes[inPage]);
+			for(var i=0,l=rows.length; i<l && inPageTop<inScrollTop; i++, row++){
+				inPageTop += rows[i].offsetHeight;
+			}
+			return (row ? row - 1 : row);
+		},
+		getLastVisibleRow: function(inPage, inBottom, inScrollBottom){
+			if(!this.pageExists(inPage)){
+				return 0;
+			}
+			var nodes = this.getDefaultNodes();
+			var row = this.getLastPageRow(inPage);
+			var rows = divkids(nodes[inPage]);
+			for(var i=rows.length-1; i>=0 && inBottom>inScrollBottom; i--, row--){
+				inBottom -= rows[i].offsetHeight;
+			}
+			return row + 1;
+		},
+		findTopRow: function(inScrollTop){
+			var nodes = this.getDefaultNodes();
+			var rows = divkids(nodes[this.page]);
+			for(var i=0,l=rows.length,t=this.pageTop,h; i<l; i++){
+				h = rows[i].offsetHeight;
+				t += h;
+				if(t >= inScrollTop){
+					this.offset = h - (t - inScrollTop);
+					return i + this.page * this.rowsPerPage;
+				}
+			}
+			return -1;
+		},
+		findScrollTop: function(inRow){
+			var rowPage = Math.floor(inRow / this.rowsPerPage);
+			var t = 0;
+			var i, l;
+			for(i=0; i<rowPage; i++){
+				t += this.getPageHeight(i);
+			}
+			this.pageTop = t;
+			this.needPage(rowPage, this.pageTop);
+
+			var nodes = this.getDefaultNodes();
+			var rows = divkids(nodes[rowPage]);
+			var r = inRow - this.rowsPerPage * rowPage;
+			for(i=0,l=rows.length; i<l && i<r; i++){
+				t += rows[i].offsetHeight;
+			}
+			return t;
+		},
+		dummy: 0
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.cells._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.cells._base"] = true;
+dojo.provide("dojox.grid.cells._base");
+
+
+
+
+dojo.declare("dojox.grid._DeferredTextWidget", dijit._Widget, {
+	deferred: null,
+	_destroyOnRemove: true,
+	postCreate: function(){
+		if(this.deferred){
+			this.deferred.addBoth(dojo.hitch(this, function(text){
+				if(this.domNode){
+					this.domNode.innerHTML = text;
+				}
+			}));
+		}
+	}
+});
+
+(function(){
+	var focusSelectNode = function(inNode){
+		try{
+			dojox.grid.util.fire(inNode, "focus");
+			dojox.grid.util.fire(inNode, "select");
+		}catch(e){// IE sux bad
+		}
+	};
+	
+	var whenIdle = function(/*inContext, inMethod, args ...*/){
+		setTimeout(dojo.hitch.apply(dojo, arguments), 0);
+	};
+
+	var dgc = dojox.grid.cells;
+
+	dojo.declare("dojox.grid.cells._Base", null, {
+		// summary:
+		//	Respresents a grid cell and contains information about column options and methods
+		//	for retrieving cell related information.
+		//	Each column in a grid layout has a cell object and most events and many methods
+		//	provide access to these objects.
+		styles: '',
+		classes: '',
+		editable: false,
+		alwaysEditing: false,
+		formatter: null,
+		defaultValue: '...',
+		value: null,
+		hidden: false,
+		noresize: false,
+		draggable: true,
+		//private
+		_valueProp: "value",
+		_formatPending: false,
+
+		constructor: function(inProps){
+			this._props = inProps || {};
+			dojo.mixin(this, inProps);
+			if(this.draggable === undefined){
+				this.draggable = true;
+			}
+		},
+
+		_defaultFormat: function(inValue, callArgs){
+			var s = this.grid.formatterScope || this;
+			var f = this.formatter;
+			if(f && s && typeof f == "string"){
+				f = this.formatter = s[f];
+			}
+			var v = (inValue != this.defaultValue && f) ? f.apply(s, callArgs) : inValue;
+			if(typeof v == "undefined"){
+				return this.defaultValue;
+			}
+			if(v && v.addBoth){
+				// Check if it's a deferred
+				v = new dojox.grid._DeferredTextWidget({deferred: v},
+									dojo.create("span", {innerHTML: this.defaultValue}));
+			}
+			if(v && v.declaredClass && v.startup){
+				return "<div class='dojoxGridStubNode' linkWidget='" +
+						v.id +
+						"' cellIdx='" +
+						this.index +
+						"'>" +
+						this.defaultValue +
+						"</div>";
+			}
+			return v;
+		},
+		
+		// data source
+		format: function(inRowIndex, inItem){
+			// summary:
+			//	provides the html for a given grid cell.
+			// inRowIndex: int
+			// grid row index
+			// returns: html for a given grid cell
+			var f, i=this.grid.edit.info, d=this.get ? this.get(inRowIndex, inItem) : (this.value || this.defaultValue);
+			d = (d && d.replace && this.grid.escapeHTMLInData) ? d.replace(/&/g, '&amp;').replace(/</g, '&lt;') : d;
+			if(this.editable && (this.alwaysEditing || (i.rowIndex==inRowIndex && i.cell==this))){
+				return this.formatEditing(d, inRowIndex);
+			}else{
+				return this._defaultFormat(d, [d, inRowIndex, this]);
+			}
+		},
+		formatEditing: function(inDatum, inRowIndex){
+			// summary:
+			//	formats the cell for editing
+			// inDatum: anything
+			//	cell data to edit
+			// inRowIndex: int
+			//	grid row index
+			// returns: string of html to place in grid cell
+		},
+		// utility
+		getNode: function(inRowIndex){
+			// summary:
+			//	gets the dom node for a given grid cell.
+			// inRowIndex: int
+			// grid row index
+			// returns: dom node for a given grid cell
+			return this.view.getCellNode(inRowIndex, this.index);
+		},
+		getHeaderNode: function(){
+			return this.view.getHeaderCellNode(this.index);
+		},
+		getEditNode: function(inRowIndex){
+			return (this.getNode(inRowIndex) || 0).firstChild || 0;
+		},
+		canResize: function(){
+			var uw = this.unitWidth;
+			return uw && (uw!=='auto');
+		},
+		isFlex: function(){
+			var uw = this.unitWidth;
+			return uw && dojo.isString(uw) && (uw=='auto' || uw.slice(-1)=='%');
+		},
+		// edit support
+		applyEdit: function(inValue, inRowIndex){
+			this.grid.edit.applyCellEdit(inValue, this, inRowIndex);
+		},
+		cancelEdit: function(inRowIndex){
+			this.grid.doCancelEdit(inRowIndex);
+		},
+		_onEditBlur: function(inRowIndex){
+			if(this.grid.edit.isEditCell(inRowIndex, this.index)){
+				//console.log('editor onblur', e);
+				this.grid.edit.apply();
+			}
+		},
+		registerOnBlur: function(inNode, inRowIndex){
+			if(this.commitOnBlur){
+				dojo.connect(inNode, "onblur", function(e){
+					// hack: if editor still thinks this editor is current some ms after it blurs, assume we've focused away from grid
+					setTimeout(dojo.hitch(this, "_onEditBlur", inRowIndex), 250);
+				});
+			}
+		},
+		//protected
+		needFormatNode: function(inDatum, inRowIndex){
+			this._formatPending = true;
+			whenIdle(this, "_formatNode", inDatum, inRowIndex);
+		},
+		cancelFormatNode: function(){
+			this._formatPending = false;
+		},
+		//private
+		_formatNode: function(inDatum, inRowIndex){
+			if(this._formatPending){
+				this._formatPending = false;
+				// make cell selectable
+				dojo.setSelectable(this.grid.domNode, true);
+				this.formatNode(this.getEditNode(inRowIndex), inDatum, inRowIndex);
+			}
+		},
+		//protected
+		formatNode: function(inNode, inDatum, inRowIndex){
+			// summary:
+			//	format the editing dom node. Use when editor is a widget.
+			// inNode: dom node
+			// dom node for the editor
+			// inDatum: anything
+			//	cell data to edit
+			// inRowIndex: int
+			//	grid row index
+			if(dojo.isIE){
+				// IE sux bad
+				whenIdle(this, "focus", inRowIndex, inNode);
+			}else{
+				this.focus(inRowIndex, inNode);
+			}
+		},
+		dispatchEvent: function(m, e){
+			if(m in this){
+				return this[m](e);
+			}
+		},
+		//public
+		getValue: function(inRowIndex){
+			// summary:
+			//	returns value entered into editor
+			// inRowIndex: int
+			// grid row index
+			// returns:
+			//	value of editor
+			return this.getEditNode(inRowIndex)[this._valueProp];
+		},
+		setValue: function(inRowIndex, inValue){
+			// summary:
+			//	set the value of the grid editor
+			// inRowIndex: int
+			// grid row index
+			// inValue: anything
+			//	value of editor
+			var n = this.getEditNode(inRowIndex);
+			if(n){
+				n[this._valueProp] = inValue;
+			}
+		},
+		focus: function(inRowIndex, inNode){
+			// summary:
+			//	focus the grid editor
+			// inRowIndex: int
+			// grid row index
+			// inNode: dom node
+			//	editor node
+			focusSelectNode(inNode || this.getEditNode(inRowIndex));
+		},
+		save: function(inRowIndex){
+			// summary:
+			//	save editor state
+			// inRowIndex: int
+			// grid row index
+			this.value = this.value || this.getValue(inRowIndex);
+			//console.log("save", this.value, inCell.index, inRowIndex);
+		},
+		restore: function(inRowIndex){
+			// summary:
+			//	restore editor state
+			// inRowIndex: int
+			// grid row index
+			this.setValue(inRowIndex, this.value);
+			//console.log("restore", this.value, inCell.index, inRowIndex);
+		},
+		//protected
+		_finish: function(inRowIndex){
+			// summary:
+			//	called when editing is completed to clean up editor
+			// inRowIndex: int
+			// grid row index
+			dojo.setSelectable(this.grid.domNode, false);
+			this.cancelFormatNode();
+		},
+		//public
+		apply: function(inRowIndex){
+			// summary:
+			//	apply edit from cell editor
+			// inRowIndex: int
+			// grid row index
+			this.applyEdit(this.getValue(inRowIndex), inRowIndex);
+			this._finish(inRowIndex);
+		},
+		cancel: function(inRowIndex){
+			// summary:
+			//	cancel cell edit
+			// inRowIndex: int
+			// grid row index
+			this.cancelEdit(inRowIndex);
+			this._finish(inRowIndex);
+		}
+	});
+	dgc._Base.markupFactory = function(node, cellDef){
+		var d = dojo;
+		var formatter = d.trim(d.attr(node, "formatter")||"");
+		if(formatter){
+			cellDef.formatter = dojo.getObject(formatter)||formatter;
+		}
+		var get = d.trim(d.attr(node, "get")||"");
+		if(get){
+			cellDef.get = dojo.getObject(get);
+		}
+		var getBoolAttr = function(attr, cell, cellAttr){
+			var value = d.trim(d.attr(node, attr)||"");
+			if(value){ cell[cellAttr||attr] = !(value.toLowerCase()=="false"); }
+		};
+		getBoolAttr("sortDesc", cellDef);
+		getBoolAttr("editable", cellDef);
+		getBoolAttr("alwaysEditing", cellDef);
+		getBoolAttr("noresize", cellDef);
+		getBoolAttr("draggable", cellDef);
+
+		var value = d.trim(d.attr(node, "loadingText")||d.attr(node, "defaultValue")||"");
+		if(value){
+			cellDef.defaultValue = value;
+		}
+
+		var getStrAttr = function(attr, cell, cellAttr){
+			var value = d.trim(d.attr(node, attr)||"")||undefined;
+			if(value){ cell[cellAttr||attr] = value; }
+		};
+		getStrAttr("styles", cellDef);
+		getStrAttr("headerStyles", cellDef);
+		getStrAttr("cellStyles", cellDef);
+		getStrAttr("classes", cellDef);
+		getStrAttr("headerClasses", cellDef);
+		getStrAttr("cellClasses", cellDef);
+	};
+
+	dojo.declare("dojox.grid.cells.Cell", dgc._Base, {
+		// summary
+		// grid cell that provides a standard text input box upon editing
+		constructor: function(){
+			this.keyFilter = this.keyFilter;
+		},
+		// keyFilter: RegExp
+		//		optional regex for disallowing keypresses
+		keyFilter: null,
+		formatEditing: function(inDatum, inRowIndex){
+			this.needFormatNode(inDatum, inRowIndex);
+			return '<input class="dojoxGridInput" type="text" value="' + inDatum + '">';
+		},
+		formatNode: function(inNode, inDatum, inRowIndex){
+			this.inherited(arguments);
+			// FIXME: feels too specific for this interface
+			this.registerOnBlur(inNode, inRowIndex);
+		},
+		doKey: function(e){
+			if(this.keyFilter){
+				var key = String.fromCharCode(e.charCode);
+				if(key.search(this.keyFilter) == -1){
+					dojo.stopEvent(e);
+				}
+			}
+		},
+		_finish: function(inRowIndex){
+			this.inherited(arguments);
+			var n = this.getEditNode(inRowIndex);
+			try{
+				dojox.grid.util.fire(n, "blur");
+			}catch(e){}
+		}
+	});
+	dgc.Cell.markupFactory = function(node, cellDef){
+		dgc._Base.markupFactory(node, cellDef);
+		var d = dojo;
+		var keyFilter = d.trim(d.attr(node, "keyFilter")||"");
+		if(keyFilter){
+			cellDef.keyFilter = new RegExp(keyFilter);
+		}
+	};
+
+	dojo.declare("dojox.grid.cells.RowIndex", dgc.Cell, {
+		name: 'Row',
+
+		postscript: function(){
+			this.editable = false;
+		},
+		get: function(inRowIndex){
+			return inRowIndex + 1;
+		}
+	});
+	dgc.RowIndex.markupFactory = function(node, cellDef){
+		dgc.Cell.markupFactory(node, cellDef);
+	};
+
+	dojo.declare("dojox.grid.cells.Select", dgc.Cell, {
+		// summary:
+		// grid cell that provides a standard select for editing
+
+		// options: Array
+		// 		text of each item
+		options: null,
+
+		// values: Array
+		//		value for each item
+		values: null,
+
+		// returnIndex: Integer
+		// 		editor returns only the index of the selected option and not the value
+		returnIndex: -1,
+
+		constructor: function(inCell){
+			this.values = this.values || this.options;
+		},
+		formatEditing: function(inDatum, inRowIndex){
+			this.needFormatNode(inDatum, inRowIndex);
+			var h = [ '<select class="dojoxGridSelect">' ];
+			for (var i=0, o, v; ((o=this.options[i]) !== undefined)&&((v=this.values[i]) !== undefined); i++){
+				h.push("<option", (inDatum==v ? ' selected' : ''), ' value="' + v + '"', ">", o, "</option>");
+			}
+			h.push('</select>');
+			return h.join('');
+		},
+		getValue: function(inRowIndex){
+			var n = this.getEditNode(inRowIndex);
+			if(n){
+				var i = n.selectedIndex, o = n.options[i];
+				return this.returnIndex > -1 ? i : o.value || o.innerHTML;
+			}
+		}
+	});
+	dgc.Select.markupFactory = function(node, cell){
+		dgc.Cell.markupFactory(node, cell);
+		var d=dojo;
+		var options = d.trim(d.attr(node, "options")||"");
+		if(options){
+			var o = options.split(',');
+			if(o[0] != options){
+				cell.options = o;
+			}
+		}
+		var values = d.trim(d.attr(node, "values")||"");
+		if(values){
+			var v = values.split(',');
+			if(v[0] != values){
+				cell.values = v;
+			}
+		}
+	};
+
+	dojo.declare("dojox.grid.cells.AlwaysEdit", dgc.Cell, {
+		// summary:
+		// grid cell that is always in an editable state, regardless of grid editing state
+		alwaysEditing: true,
+		_formatNode: function(inDatum, inRowIndex){
+			this.formatNode(this.getEditNode(inRowIndex), inDatum, inRowIndex);
+		},
+		applyStaticValue: function(inRowIndex){
+			var e = this.grid.edit;
+			e.applyCellEdit(this.getValue(inRowIndex), this, inRowIndex);
+			e.start(this, inRowIndex, true);
+		}
+	});
+	dgc.AlwaysEdit.markupFactory = function(node, cell){
+		dgc.Cell.markupFactory(node, cell);
+	};
+
+	dojo.declare("dojox.grid.cells.Bool", dgc.AlwaysEdit, {
+		// summary:
+		// grid cell that provides a standard checkbox that is always on for editing
+		_valueProp: "checked",
+		formatEditing: function(inDatum, inRowIndex){
+			return '<input class="dojoxGridInput" type="checkbox"' + (inDatum ? ' checked="checked"' : '') + ' style="width: auto" />';
+		},
+		doclick: function(e){
+			if(e.target.tagName == 'INPUT'){
+				this.applyStaticValue(e.rowIndex);
+			}
+		}
+	});
+	dgc.Bool.markupFactory = function(node, cell){
+		dgc.AlwaysEdit.markupFactory(node, cell);
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.cells"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.cells"] = true;
+dojo.provide("dojox.grid.cells");
+
+
+}
+
+if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.common"] = true;
+dojo.provide("dojo.dnd.common");
+
+dojo.dnd.getCopyKeyState = dojo.isCopyKey;
+
+dojo.dnd._uniqueId = 0;
+dojo.dnd.getUniqueId = function(){
+	// summary:
+	//		returns a unique string for use with any DOM element
+	var id;
+	do{
+		id = dojo._scopeName + "Unique" + (++dojo.dnd._uniqueId);
+	}while(dojo.byId(id));
+	return id;
+};
+
+dojo.dnd._empty = {};
+
+dojo.dnd.isFormElement = function(/*Event*/ e){
+	// summary:
+	//		returns true if user clicked on a form element
+	var t = e.target;
+	if(t.nodeType == 3 /*TEXT_NODE*/){
+		t = t.parentNode;
+	}
+	return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0;	// Boolean
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.autoscroll"] = true;
+dojo.provide("dojo.dnd.autoscroll");
+
+dojo.dnd.getViewport = function(){
+	// summary:
+	//		Returns a viewport size (visible part of the window)
+
+	// TODO: remove this when getViewport() moved to dojo core, see #7028
+
+	// FIXME: need more docs!!
+	var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
+	if(dojo.isMozilla){
+		return {w: dd.clientWidth, h: w.innerHeight};	// Object
+	}else if(!dojo.isOpera && w.innerWidth){
+		return {w: w.innerWidth, h: w.innerHeight};		// Object
+	}else if (!dojo.isOpera && dd && dd.clientWidth){
+		return {w: dd.clientWidth, h: dd.clientHeight};	// Object
+	}else if (b.clientWidth){
+		return {w: b.clientWidth, h: b.clientHeight};	// Object
+	}
+	return null;	// Object
+};
+
+dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
+dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
+
+dojo.dnd.V_AUTOSCROLL_VALUE = 16;
+dojo.dnd.H_AUTOSCROLL_VALUE = 16;
+
+dojo.dnd.autoScroll = function(e){
+	// summary:
+	//		a handler for onmousemove event, which scrolls the window, if
+	//		necesary
+	// e: Event
+	//		onmousemove event
+
+	// FIXME: needs more docs!
+	var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
+	if(e.clientX < dojo.dnd.H_TRIGGER_AUTOSCROLL){
+		dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
+	}else if(e.clientX > v.w - dojo.dnd.H_TRIGGER_AUTOSCROLL){
+		dx = dojo.dnd.H_AUTOSCROLL_VALUE;
+	}
+	if(e.clientY < dojo.dnd.V_TRIGGER_AUTOSCROLL){
+		dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
+	}else if(e.clientY > v.h - dojo.dnd.V_TRIGGER_AUTOSCROLL){
+		dy = dojo.dnd.V_AUTOSCROLL_VALUE;
+	}
+	window.scrollBy(dx, dy);
+};
+
+dojo.dnd._validNodes = {"div": 1, "p": 1, "td": 1};
+dojo.dnd._validOverflow = {"auto": 1, "scroll": 1};
+
+dojo.dnd.autoScrollNodes = function(e){
+	// summary:
+	//		a handler for onmousemove event, which scrolls the first avaialble
+	//		Dom element, it falls back to dojo.dnd.autoScroll()
+	// e: Event
+	//		onmousemove event
+
+	// FIXME: needs more docs!
+	for(var n = e.target; n;){
+		if(n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)){
+			var s = dojo.getComputedStyle(n);
+			if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
+				var b = dojo._getContentBox(n, s), t = dojo.position(n, true);
+				//console.log(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop);
+				var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2), 
+					h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2),
+					rx = e.pageX - t.x, ry = e.pageY - t.y, dx = 0, dy = 0;
+				if(dojo.isWebKit || dojo.isOpera){
+					// FIXME: this code should not be here, it should be taken into account 
+					// either by the event fixing code, or the dojo.position()
+					// FIXME: this code doesn't work on Opera 9.5 Beta
+					rx += dojo.body().scrollLeft, ry += dojo.body().scrollTop;
+				}
+				if(rx > 0 && rx < b.w){
+					if(rx < w){
+						dx = -w;
+					}else if(rx > b.w - w){
+						dx = w;
+					}
+				}
+				//console.log("ry =", ry, "b.h =", b.h, "h =", h);
+				if(ry > 0 && ry < b.h){
+					if(ry < h){
+						dy = -h;
+					}else if(ry > b.h - h){
+						dy = h;
+					}
+				}
+				var oldLeft = n.scrollLeft, oldTop = n.scrollTop;
+				n.scrollLeft = n.scrollLeft + dx;
+				n.scrollTop  = n.scrollTop  + dy;
+				if(oldLeft != n.scrollLeft || oldTop != n.scrollTop){ return; }
+			}
+		}
+		try{
+			n = n.parentNode;
+		}catch(x){
+			n = null;
+		}
+	}
+	dojo.dnd.autoScroll(e);
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Mover"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Mover"] = true;
+dojo.provide("dojo.dnd.Mover");
+
+
+
+
+dojo.declare("dojo.dnd.Mover", null, {
+	constructor: function(node, e, host){
+		// summary:
+		//		an object, which makes a node follow the mouse. 
+		//		Used as a default mover, and as a base class for custom movers.
+		// node: Node
+		//		a node (or node's id) to be moved
+		// e: Event
+		//		a mouse event, which started the move;
+		//		only pageX and pageY properties are used
+		// host: Object?
+		//		object which implements the functionality of the move,
+		//	 	and defines proper events (onMoveStart and onMoveStop)
+		this.node = dojo.byId(node);
+		this.marginBox = {l: e.pageX, t: e.pageY};
+		this.mouseButton = e.button;
+		var h = this.host = host, d = node.ownerDocument, 
+			firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove");
+		this.events = [
+			dojo.connect(d, "onmousemove", this, "onMouseMove"),
+			dojo.connect(d, "onmouseup",   this, "onMouseUp"),
+			// cancel text selection and text dragging
+			dojo.connect(d, "ondragstart",   dojo.stopEvent),
+			dojo.connect(d.body, "onselectstart", dojo.stopEvent),
+			firstEvent
+		];
+		// notify that the move has started
+		if(h && h.onMoveStart){
+			h.onMoveStart(this);
+		}
+	},
+	// mouse event processors
+	onMouseMove: function(e){
+		// summary:
+		//		event processor for onmousemove
+		// e: Event
+		//		mouse event
+		dojo.dnd.autoScroll(e);
+		var m = this.marginBox;
+		this.host.onMove(this, {l: m.l + e.pageX, t: m.t + e.pageY}, e);
+		dojo.stopEvent(e);
+	},
+	onMouseUp: function(e){
+		if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ? 
+				e.button == 0 : this.mouseButton == e.button){
+			this.destroy();
+		}
+		dojo.stopEvent(e);
+	},
+	// utilities
+	onFirstMove: function(e){
+		// summary:
+		//		makes the node absolute; it is meant to be called only once. 
+		// 		relative and absolutely positioned nodes are assumed to use pixel units
+		var s = this.node.style, l, t, h = this.host;
+		switch(s.position){
+			case "relative":
+			case "absolute":
+				// assume that left and top values are in pixels already
+				l = Math.round(parseFloat(s.left)) || 0;
+				t = Math.round(parseFloat(s.top)) || 0;
+				break;
+			default:
+				s.position = "absolute";	// enforcing the absolute mode
+				var m = dojo.marginBox(this.node);
+				// event.pageX/pageY (which we used to generate the initial
+				// margin box) includes padding and margin set on the body.
+				// However, setting the node's position to absolute and then
+				// doing dojo.marginBox on it *doesn't* take that additional
+				// space into account - so we need to subtract the combined
+				// padding and margin.  We use getComputedStyle and
+				// _getMarginBox/_getContentBox to avoid the extra lookup of
+				// the computed style. 
+				var b = dojo.doc.body;
+				var bs = dojo.getComputedStyle(b);
+				var bm = dojo._getMarginBox(b, bs);
+				var bc = dojo._getContentBox(b, bs);
+				l = m.l - (bc.l - bm.l);
+				t = m.t - (bc.t - bm.t);
+				break;
+		}
+		this.marginBox.l = l - this.marginBox.l;
+		this.marginBox.t = t - this.marginBox.t;
+		if(h && h.onFirstMove){
+			h.onFirstMove(this, e);
+		}
+		dojo.disconnect(this.events.pop());
+	},
+	destroy: function(){
+		// summary:
+		//		stops the move, deletes all references, so the object can be garbage-collected
+		dojo.forEach(this.events, dojo.disconnect);
+		// undo global settings
+		var h = this.host;
+		if(h && h.onMoveStop){
+			h.onMoveStop(this);
+		}
+		// destroy objects
+		this.events = this.node = this.host = null;
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Moveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Moveable"] = true;
+dojo.provide("dojo.dnd.Moveable");
+
+
+
+/*=====
+dojo.declare("dojo.dnd.__MoveableArgs", [], {
+	// handle: Node||String
+	//		A node (or node's id), which is used as a mouse handle.
+	//		If omitted, the node itself is used as a handle.
+	handle: null,
+
+	// delay: Number
+	//		delay move by this number of pixels
+	delay: 0,
+
+	// skip: Boolean
+	//		skip move of form elements
+	skip: false,
+
+	// mover: Object
+	//		a constructor of custom Mover
+	mover: dojo.dnd.Mover
+});
+=====*/
+
+dojo.declare("dojo.dnd.Moveable", null, {
+	// object attributes (for markup)
+	handle: "",
+	delay: 0,
+	skip: false,
+	
+	constructor: function(node, params){
+		// summary:
+		//		an object, which makes a node moveable
+		// node: Node
+		//		a node (or node's id) to be moved
+		// params: dojo.dnd.__MoveableArgs?
+		//		optional parameters
+		this.node = dojo.byId(node);
+		if(!params){ params = {}; }
+		this.handle = params.handle ? dojo.byId(params.handle) : null;
+		if(!this.handle){ this.handle = this.node; }
+		this.delay = params.delay > 0 ? params.delay : 0;
+		this.skip  = params.skip;
+		this.mover = params.mover ? params.mover : dojo.dnd.Mover;
+		this.events = [
+			dojo.connect(this.handle, "onmousedown", this, "onMouseDown"),
+			// cancel text selection and text dragging
+			dojo.connect(this.handle, "ondragstart",   this, "onSelectStart"),
+			dojo.connect(this.handle, "onselectstart", this, "onSelectStart")
+		];
+	},
+
+	// markup methods
+	markupFactory: function(params, node){
+		return new dojo.dnd.Moveable(node, params);
+	},
+
+	// methods
+	destroy: function(){
+		// summary:
+		//		stops watching for possible move, deletes all references, so the object can be garbage-collected
+		dojo.forEach(this.events, dojo.disconnect);
+		this.events = this.node = this.handle = null;
+	},
+	
+	// mouse event processors
+	onMouseDown: function(e){
+		// summary:
+		//		event processor for onmousedown, creates a Mover for the node
+		// e: Event
+		//		mouse event
+		if(this.skip && dojo.dnd.isFormElement(e)){ return; }
+		if(this.delay){
+			this.events.push(
+				dojo.connect(this.handle, "onmousemove", this, "onMouseMove"),
+				dojo.connect(this.handle, "onmouseup", this, "onMouseUp")
+			);
+			this._lastX = e.pageX;
+			this._lastY = e.pageY;
+		}else{
+			this.onDragDetected(e);
+		}
+		dojo.stopEvent(e);
+	},
+	onMouseMove: function(e){
+		// summary:
+		//		event processor for onmousemove, used only for delayed drags
+		// e: Event
+		//		mouse event
+		if(Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay){
+			this.onMouseUp(e);
+			this.onDragDetected(e);
+		}
+		dojo.stopEvent(e);
+	},
+	onMouseUp: function(e){
+		// summary:
+		//		event processor for onmouseup, used only for delayed drags
+		// e: Event
+		//		mouse event
+		for(var i = 0; i < 2; ++i){
+			dojo.disconnect(this.events.pop());
+		}
+		dojo.stopEvent(e);
+	},
+	onSelectStart: function(e){
+		// summary:
+		//		event processor for onselectevent and ondragevent
+		// e: Event
+		//		mouse event
+		if(!this.skip || !dojo.dnd.isFormElement(e)){
+			dojo.stopEvent(e);
+		}
+	},
+	
+	// local events
+	onDragDetected: function(/* Event */ e){
+		// summary:
+		//		called when the drag is detected;
+		//		responsible for creation of the mover
+		new this.mover(this.node, e, this);
+	},
+	onMoveStart: function(/* dojo.dnd.Mover */ mover){
+		// summary:
+		//		called before every move operation
+		dojo.publish("/dnd/move/start", [mover]);
+		dojo.addClass(dojo.body(), "dojoMove"); 
+		dojo.addClass(this.node, "dojoMoveItem"); 
+	},
+	onMoveStop: function(/* dojo.dnd.Mover */ mover){
+		// summary:
+		//		called after every move operation
+		dojo.publish("/dnd/move/stop", [mover]);
+		dojo.removeClass(dojo.body(), "dojoMove");
+		dojo.removeClass(this.node, "dojoMoveItem");
+	},
+	onFirstMove: function(/* dojo.dnd.Mover */ mover, /* Event */ e){
+		// summary:
+		//		called during the very first move notification;
+		//		can be used to initialize coordinates, can be overwritten.
+		
+		// default implementation does nothing
+	},
+	onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop, /* Event */ e){
+		// summary:
+		//		called during every move notification;
+		//		should actually move the node; can be overwritten.
+		this.onMoving(mover, leftTop);
+		var s = mover.node.style;
+		s.left = leftTop.l + "px";
+		s.top  = leftTop.t + "px";
+		this.onMoved(mover, leftTop);
+	},
+	onMoving: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+		// summary:
+		//		called before every incremental move; can be overwritten.
+		
+		// default implementation does nothing
+	},
+	onMoved: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+		// summary:
+		//		called after every incremental move; can be overwritten.
+		
+		// default implementation does nothing
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._Builder"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Builder"] = true;
+dojo.provide("dojox.grid._Builder");
+
+
+
+
+(function(){
+	var dg = dojox.grid;
+
+	var getTdIndex = function(td){
+		return td.cellIndex >=0 ? td.cellIndex : dojo.indexOf(td.parentNode.cells, td);
+	};
+	
+	var getTrIndex = function(tr){
+		return tr.rowIndex >=0 ? tr.rowIndex : dojo.indexOf(tr.parentNode.childNodes, tr);
+	};
+	
+	var getTr = function(rowOwner, index){
+		return rowOwner && ((rowOwner.rows||0)[index] || rowOwner.childNodes[index]);
+	};
+
+	var findTable = function(node){
+		for(var n=node; n && n.tagName!='TABLE'; n=n.parentNode){}
+		return n;
+	};
+	
+	var ascendDom = function(inNode, inWhile){
+		for(var n=inNode; n && inWhile(n); n=n.parentNode){}
+		return n;
+	};
+	
+	var makeNotTagName = function(inTagName){
+		var name = inTagName.toUpperCase();
+		return function(node){ return node.tagName != name; };
+	};
+
+	var rowIndexTag = dojox.grid.util.rowIndexTag;
+	var gridViewTag = dojox.grid.util.gridViewTag;
+
+	// base class for generating markup for the views
+	dg._Builder = dojo.extend(function(view){
+		if(view){
+			this.view = view;
+			this.grid = view.grid;
+		}
+	},{
+		view: null,
+		// boilerplate HTML
+		_table: '<table class="dojoxGridRowTable" border="0" cellspacing="0" cellpadding="0" role="presentation"',
+
+		// Returns the table variable as an array - and with the view width, if specified
+		getTableArray: function(){
+			var html = [this._table];
+			if(this.view.viewWidth){
+				html.push([' style="width:', this.view.viewWidth, ';"'].join(''));
+			}
+			html.push('>');
+			return html;
+		},
+		
+		// generate starting tags for a cell
+		generateCellMarkup: function(inCell, inMoreStyles, inMoreClasses, isHeader){
+			var result = [], html;
+			if(isHeader){
+				var sortInfo = inCell.index != inCell.grid.getSortIndex() ? "" : inCell.grid.sortInfo > 0 ? 'aria-sort="ascending"' : 'aria-sort="descending"';
+				if (!inCell.id){
+					inCell.id = this.grid.id + "Hdr" + inCell.index;
+				}
+				// column headers are not editable, mark as aria-readonly=true
+				html = ['<th tabIndex="-1" aria-readonly="true" role="columnheader"', sortInfo, 'id="', inCell.id, '"'];
+			}else{
+				// cells inherit grid aria-readonly property; default value for aria-readonly is false(grid is editable)
+				// if grid is editable (had any editable cells), mark non editable cells as aria-readonly=true
+				// if no editable cells, grid's aria-readonly value will have been set to true and cells will inherit
+				var editInfo = this.grid.editable && !inCell.editable ? 'aria-readonly="true"' : "";
+				html = ['<td tabIndex="-1" role="gridcell"', editInfo];
+			}
+			if(inCell.colSpan){
+				html.push(' colspan="', inCell.colSpan, '"');
+			}
+			if(inCell.rowSpan){
+				html.push(' rowspan="', inCell.rowSpan, '"');
+			}
+			html.push(' class="dojoxGridCell ');
+			if(inCell.classes){
+				html.push(inCell.classes, ' ');
+			}
+			if(inMoreClasses){
+				html.push(inMoreClasses, ' ');
+			}
+			// result[0] => td opener, style
+			result.push(html.join(''));
+			// SLOT: result[1] => td classes 
+			result.push('');
+			html = ['" idx="', inCell.index, '" style="'];
+			if(inMoreStyles && inMoreStyles[inMoreStyles.length-1] != ';'){
+				inMoreStyles += ';';
+			}
+			html.push(inCell.styles, inMoreStyles||'', inCell.hidden?'display:none;':'');
+			if(inCell.unitWidth){
+				html.push('width:', inCell.unitWidth, ';');
+			}
+			// result[2] => markup
+			result.push(html.join(''));
+			// SLOT: result[3] => td style 
+			result.push('');
+			html = [ '"' ];
+			if(inCell.attrs){
+				html.push(" ", inCell.attrs);
+			}
+			html.push('>');
+			// result[4] => td postfix
+			result.push(html.join(''));
+			// SLOT: result[5] => content
+			result.push('');
+			// result[6] => td closes
+			result.push(isHeader?'</th>':'</td>');
+			return result; // Array
+		},
+
+		// cell finding
+		isCellNode: function(inNode){
+			return Boolean(inNode && inNode!=dojo.doc && dojo.attr(inNode, "idx"));
+		},
+		
+		getCellNodeIndex: function(inCellNode){
+			return inCellNode ? Number(dojo.attr(inCellNode, "idx")) : -1;
+		},
+		
+		getCellNode: function(inRowNode, inCellIndex){
+			for(var i=0, row; (row=getTr(inRowNode.firstChild, i)); i++){
+				for(var j=0, cell; (cell=row.cells[j]); j++){
+					if(this.getCellNodeIndex(cell) == inCellIndex){
+						return cell;
+					}
+				}
+			}
+			return null;
+		},
+		
+		findCellTarget: function(inSourceNode, inTopNode){
+			var n = inSourceNode;
+			while(n && (!this.isCellNode(n) || (n.offsetParent && gridViewTag in n.offsetParent.parentNode && n.offsetParent.parentNode[gridViewTag] != this.view.id)) && (n!=inTopNode)){
+				n = n.parentNode;
+			}
+			return n!=inTopNode ? n : null;
+		},
+		
+		// event decoration
+		baseDecorateEvent: function(e){
+			e.dispatch = 'do' + e.type;
+			e.grid = this.grid;
+			e.sourceView = this.view;
+			e.cellNode = this.findCellTarget(e.target, e.rowNode);
+			e.cellIndex = this.getCellNodeIndex(e.cellNode);
+			e.cell = (e.cellIndex >= 0 ? this.grid.getCell(e.cellIndex) : null);
+		},
+		
+		// event dispatch
+		findTarget: function(inSource, inTag){
+			var n = inSource;
+			while(n && (n!=this.domNode) && (!(inTag in n) || (gridViewTag in n && n[gridViewTag] != this.view.id))){
+				n = n.parentNode;
+			}
+			return (n != this.domNode) ? n : null; 
+		},
+
+		findRowTarget: function(inSource){
+			return this.findTarget(inSource, rowIndexTag);
+		},
+
+		isIntraNodeEvent: function(e){
+			try{
+				return (e.cellNode && e.relatedTarget && dojo.isDescendant(e.relatedTarget, e.cellNode));
+			}catch(x){
+				// e.relatedTarget has permission problem in FF if it's an input: https://bugzilla.mozilla.org/show_bug.cgi?id=208427
+				return false;
+			}
+		},
+
+		isIntraRowEvent: function(e){
+			try{
+				var row = e.relatedTarget && this.findRowTarget(e.relatedTarget);
+				return !row && (e.rowIndex==-1) || row && (e.rowIndex==row.gridRowIndex);			
+			}catch(x){
+				// e.relatedTarget on INPUT has permission problem in FF: https://bugzilla.mozilla.org/show_bug.cgi?id=208427
+				return false;
+			}
+		},
+
+		dispatchEvent: function(e){
+			if(e.dispatch in this){
+				return this[e.dispatch](e);
+			}
+			return false;
+		},
+
+		// dispatched event handlers
+		domouseover: function(e){
+			if(e.cellNode && (e.cellNode!=this.lastOverCellNode)){
+				this.lastOverCellNode = e.cellNode;
+				this.grid.onMouseOver(e);
+			}
+			this.grid.onMouseOverRow(e);
+		},
+
+		domouseout: function(e){
+			if(e.cellNode && (e.cellNode==this.lastOverCellNode) && !this.isIntraNodeEvent(e, this.lastOverCellNode)){
+				this.lastOverCellNode = null;
+				this.grid.onMouseOut(e);
+				if(!this.isIntraRowEvent(e)){
+					this.grid.onMouseOutRow(e);
+				}
+			}
+		},
+		
+		domousedown: function(e){
+			if (e.cellNode)
+				this.grid.onMouseDown(e);
+			this.grid.onMouseDownRow(e);
+		}
+	});
+
+	// Produces html for grid data content. Owned by grid and used internally 
+	// for rendering data. Override to implement custom rendering.
+	dg._ContentBuilder = dojo.extend(function(view){
+		dg._Builder.call(this, view);
+	},dg._Builder.prototype,{
+		update: function(){
+			this.prepareHtml();
+		},
+
+		// cache html for rendering data rows
+		prepareHtml: function(){
+			var defaultGet=this.grid.get, cells=this.view.structure.cells;
+			for(var j=0, row; (row=cells[j]); j++){
+				for(var i=0, cell; (cell=row[i]); i++){
+					cell.get = cell.get || (cell.value == undefined) && defaultGet;
+					cell.markup = this.generateCellMarkup(cell, cell.cellStyles, cell.cellClasses, false);
+					if (!this.grid.editable && cell.editable){
+						this.grid.editable = true;
+					}
+				}
+			}
+		},
+
+		// time critical: generate html using cache and data source
+		generateHtml: function(inDataIndex, inRowIndex){
+			var
+				html = this.getTableArray(),
+				v = this.view,
+				cells = v.structure.cells,
+				item = this.grid.getItem(inRowIndex);
+
+			dojox.grid.util.fire(this.view, "onBeforeRow", [inRowIndex, cells]);
+			for(var j=0, row; (row=cells[j]); j++){
+				if(row.hidden || row.header){
+					continue;
+				}
+				html.push(!row.invisible ? '<tr>' : '<tr class="dojoxGridInvisible">');
+				for(var i=0, cell, m, cc, cs; (cell=row[i]); i++){
+					m = cell.markup; cc = cell.customClasses = []; cs = cell.customStyles = [];
+					// content (format can fill in cc and cs as side-effects)
+					m[5] = cell.format(inRowIndex, item);
+					// classes
+					m[1] = cc.join(' ');
+					// styles
+					m[3] = cs.join(';');
+					// in-place concat
+					html.push.apply(html, m);
+				}
+				html.push('</tr>');
+			}
+			html.push('</table>');
+			return html.join(''); // String
+		},
+
+		decorateEvent: function(e){
+			e.rowNode = this.findRowTarget(e.target);
+			if(!e.rowNode){return false;}
+			e.rowIndex = e.rowNode[rowIndexTag];
+			this.baseDecorateEvent(e);
+			e.cell = this.grid.getCell(e.cellIndex);
+			return true; // Boolean
+		}
+	});
+
+	// Produces html for grid header content. Owned by grid and used internally 
+	// for rendering data. Override to implement custom rendering.
+	dg._HeaderBuilder = dojo.extend(function(view){
+		this.moveable = null;
+		dg._Builder.call(this, view);
+	},dg._Builder.prototype,{
+		_skipBogusClicks: false,
+		overResizeWidth: 4,
+		minColWidth: 1,
+		
+		update: function(){
+			if(this.tableMap){
+				this.tableMap.mapRows(this.view.structure.cells);
+			}else{
+				this.tableMap = new dg._TableMap(this.view.structure.cells);
+			}
+		},
+
+		generateHtml: function(inGetValue, inValue){
+			var html = this.getTableArray(), cells = this.view.structure.cells;
+			
+			dojox.grid.util.fire(this.view, "onBeforeRow", [-1, cells]);
+			for(var j=0, row; (row=cells[j]); j++){
+				if(row.hidden){
+					continue;
+				}
+				html.push(!row.invisible ? '<tr>' : '<tr class="dojoxGridInvisible">');
+				for(var i=0, cell, markup; (cell=row[i]); i++){
+					cell.customClasses = [];
+					cell.customStyles = [];
+					if(this.view.simpleStructure){
+						if(cell.draggable){
+							if(cell.headerClasses){
+								if(cell.headerClasses.indexOf('dojoDndItem') == -1){
+									cell.headerClasses += ' dojoDndItem';
+								}
+							}else{
+								cell.headerClasses = 'dojoDndItem';
+							}
+						}
+						if(cell.attrs){
+							if(cell.attrs.indexOf("dndType='gridColumn_") == -1){
+								cell.attrs += " dndType='gridColumn_" + this.grid.id + "'";
+							}
+						}else{
+							cell.attrs = "dndType='gridColumn_" + this.grid.id + "'";
+						}
+					}
+					markup = this.generateCellMarkup(cell, cell.headerStyles, cell.headerClasses, true);
+					// content
+					markup[5] = (inValue != undefined ? inValue : inGetValue(cell));
+					// styles
+					markup[3] = cell.customStyles.join(';');
+					// classes
+					markup[1] = cell.customClasses.join(' '); //(cell.customClasses ? ' ' + cell.customClasses : '');
+					html.push(markup.join(''));
+				}
+				html.push('</tr>');
+			}
+			html.push('</table>');
+			return html.join('');
+		},
+
+		// event helpers
+		getCellX: function(e){
+			var n, x = e.layerX;
+			if(dojo.isMoz){
+				n = ascendDom(e.target, makeNotTagName("th"));
+				x -= (n && n.offsetLeft) || 0;
+				var t = e.sourceView.getScrollbarWidth();
+				if(!dojo._isBodyLtr()/*&& e.sourceView.headerNode.scrollLeft < t*/){
+					//fix #11253
+					table = ascendDom(n,makeNotTagName("table"));
+					x -= (table && table.offsetLeft) || 0;
+				}
+				//x -= getProp(ascendDom(e.target, mkNotTagName("td")), "offsetLeft") || 0;
+			}
+			n = ascendDom(e.target, function(){
+				if(!n || n == e.cellNode){
+					return false;
+				}
+				// Mozilla 1.8 (FF 1.5) has a bug that makes offsetLeft = -parent border width
+				// when parent has border, overflow: hidden, and is positioned
+				// handle this problem here ... not a general solution!
+				x += (n.offsetLeft < 0 ? 0 : n.offsetLeft);
+				return true;
+			});
+			return x;
+		},
+
+		// event decoration
+		decorateEvent: function(e){
+			this.baseDecorateEvent(e);
+			e.rowIndex = -1;
+			e.cellX = this.getCellX(e);
+			return true;
+		},
+
+		// event handlers
+		// resizing
+		prepareResize: function(e, mod){
+			do{
+				var i = getTdIndex(e.cellNode);
+				e.cellNode = (i ? e.cellNode.parentNode.cells[i+mod] : null);
+				e.cellIndex = (e.cellNode ? this.getCellNodeIndex(e.cellNode) : -1);
+			}while(e.cellNode && e.cellNode.style.display == "none");
+			return Boolean(e.cellNode);
+		},
+
+		canResize: function(e){
+			if(!e.cellNode || e.cellNode.colSpan > 1){
+				return false;
+			}
+			var cell = this.grid.getCell(e.cellIndex); 
+			return !cell.noresize && cell.canResize();
+		},
+
+		overLeftResizeArea: function(e){
+			// We are never over a resize area if we are in the process of moving
+			if(dojo.hasClass(dojo.body(), "dojoDndMove")){
+				return false;
+			}
+			//Bugfix for crazy IE problem (#8807).  IE returns position information for the icon and text arrow divs
+			//as if they were still on the left instead of returning the position they were 'float: right' to.
+			//So, the resize check ends up checking the wrong adjacent cell.  This checks to see if the hover was over 
+			//the image or text nodes, then just ignored them/treat them not in scale range.
+			if(dojo.isIE){
+				var tN = e.target;
+				if(dojo.hasClass(tN, "dojoxGridArrowButtonNode") || 
+					dojo.hasClass(tN, "dojoxGridArrowButtonChar")){
+					return false;
+				}
+			}
+
+			if(dojo._isBodyLtr()){
+				return (e.cellIndex>0) && (e.cellX < this.overResizeWidth) && this.prepareResize(e, -1);
+			}
+			var t = e.cellNode && (e.cellX < this.overResizeWidth);
+			return t;
+		},
+
+		overRightResizeArea: function(e){
+			// We are never over a resize area if we are in the process of moving
+			if(dojo.hasClass(dojo.body(), "dojoDndMove")){
+				return false;
+			}
+			//Bugfix for crazy IE problem (#8807).  IE returns position information for the icon and text arrow divs
+			//as if they were still on the left instead of returning the position they were 'float: right' to.
+			//So, the resize check ends up checking the wrong adjacent cell.  This checks to see if the hover was over 
+			//the image or text nodes, then just ignored them/treat them not in scale range.
+			if(dojo.isIE){
+				var tN = e.target;
+				if(dojo.hasClass(tN, "dojoxGridArrowButtonNode") || 
+					dojo.hasClass(tN, "dojoxGridArrowButtonChar")){
+					return false;
+				}
+			}
+
+			if(dojo._isBodyLtr()){
+				return e.cellNode && (e.cellX >= e.cellNode.offsetWidth - this.overResizeWidth);
+			}
+			return (e.cellIndex>0) && (e.cellX >= e.cellNode.offsetWidth - this.overResizeWidth) && this.prepareResize(e, -1);
+		},
+
+		domousemove: function(e){
+			//console.log(e.cellIndex, e.cellX, e.cellNode.offsetWidth);
+			if(!this.moveable){
+				var c = (this.overRightResizeArea(e) ? 'dojoxGridColResize' : (this.overLeftResizeArea(e) ? 'dojoxGridColResize' : ''));
+				if(c && !this.canResize(e)){
+					c = 'dojoxGridColNoResize';
+				}
+				dojo.toggleClass(e.sourceView.headerNode, "dojoxGridColNoResize", (c == "dojoxGridColNoResize"));
+				dojo.toggleClass(e.sourceView.headerNode, "dojoxGridColResize", (c == "dojoxGridColResize"));
+				if(dojo.isIE){
+					var t = e.sourceView.headerNode.scrollLeft;
+					e.sourceView.headerNode.scrollLeft = t;
+				}
+				if(c){
+					dojo.stopEvent(e);
+				}
+			}
+		},
+
+		domousedown: function(e){
+			if(!this.moveable){
+				if((this.overRightResizeArea(e) || this.overLeftResizeArea(e)) && this.canResize(e)){
+					this.beginColumnResize(e);
+				}else{
+					this.grid.onMouseDown(e);
+					this.grid.onMouseOverRow(e);
+				}
+				//else{
+				//	this.beginMoveColumn(e);
+				//}
+			}
+		},
+
+		doclick: function(e) {
+			if(this._skipBogusClicks){
+				dojo.stopEvent(e);
+				return true;
+			}
+			return false;
+		},
+
+		// column resizing
+		colResizeSetup: function(/*Event Object*/e, /*boolean*/ isMouse ){
+			//Set up the drag object for column resizing
+			// Called with mouse event in case of drag and drop,
+			// Also called from keyboard shift-arrow event when focus is on a header
+			var headContentBox = dojo.contentBox(e.sourceView.headerNode);
+			
+			if(isMouse){  //IE draws line even with no mouse down so separate from keyboard 
+				this.lineDiv = document.createElement('div');
+
+				// NOTE: this is for backwards compatibility with Dojo 1.3
+				var vw = (dojo.position||dojo._abs)(e.sourceView.headerNode, true);
+				var bodyContentBox = dojo.contentBox(e.sourceView.domNode);
+				//fix #11340
+				var l = e.clientX;
+				if(!dojo._isBodyLtr() && dojo.isIE < 8){
+					l -= dojox.html.metrics.getScrollbar().w;
+				}				
+				dojo.style(this.lineDiv, {
+					top: vw.y + "px",
+					left: l + "px",
+					height: (bodyContentBox.h + headContentBox.h) + "px"
+				});
+				dojo.addClass(this.lineDiv, "dojoxGridResizeColLine");
+				this.lineDiv._origLeft = l;
+				dojo.body().appendChild(this.lineDiv);
+			}
+			var spanners = [], nodes = this.tableMap.findOverlappingNodes(e.cellNode);
+			for(var i=0, cell; (cell=nodes[i]); i++){
+				spanners.push({ node: cell, index: this.getCellNodeIndex(cell), width: cell.offsetWidth });
+				//console.log("spanner: " + this.getCellNodeIndex(cell));
+			}
+
+			var view = e.sourceView;
+			var adj = dojo._isBodyLtr() ? 1 : -1;
+			var views = e.grid.views.views;
+			var followers = [];
+			for(var j=view.idx+adj, cView; (cView=views[j]); j=j+adj){
+				followers.push({ node: cView.headerNode, left: window.parseInt(cView.headerNode.style.left) });
+			}
+			var table = view.headerContentNode.firstChild;
+			var drag = {
+				scrollLeft: e.sourceView.headerNode.scrollLeft,
+				view: view,
+				node: e.cellNode,
+				index: e.cellIndex,
+				w: dojo.contentBox(e.cellNode).w,
+				vw: headContentBox.w,
+				table: table,
+				tw: dojo.contentBox(table).w,
+				spanners: spanners,
+				followers: followers
+			};
+			return drag;
+		},
+		beginColumnResize: function(e){
+			this.moverDiv = document.createElement("div");
+			dojo.style(this.moverDiv,{position: "absolute", left:0}); // to make DnD work with dir=rtl
+			dojo.body().appendChild(this.moverDiv);
+			dojo.addClass(this.grid.domNode, "dojoxGridColumnResizing");
+			var m = (this.moveable = new dojo.dnd.Moveable(this.moverDiv));
+
+			var drag = this.colResizeSetup(e,true);
+
+			m.onMove = dojo.hitch(this, "doResizeColumn", drag);
+
+			dojo.connect(m, "onMoveStop", dojo.hitch(this, function(){
+				this.endResizeColumn(drag);
+				if(drag.node.releaseCapture){
+					drag.node.releaseCapture();
+				}
+				this.moveable.destroy();
+				delete this.moveable;
+				this.moveable = null;
+				dojo.removeClass(this.grid.domNode, "dojoxGridColumnResizing");
+			}));
+
+			if(e.cellNode.setCapture){
+				e.cellNode.setCapture();
+			}
+			m.onMouseDown(e);
+		},
+
+		doResizeColumn: function(inDrag, mover, leftTop){
+			var changeX = leftTop.l;
+			var data = {
+				deltaX: changeX,
+				w: inDrag.w + (dojo._isBodyLtr() ? changeX : -changeX),//fix #11341
+				vw: inDrag.vw + changeX,
+				tw: inDrag.tw + changeX
+			};
+			
+			this.dragRecord = {inDrag: inDrag, mover: mover, leftTop:leftTop};
+			
+			if(data.w >= this.minColWidth){
+				if (!mover) { // we are using keyboard do immediate resize
+					this.doResizeNow(inDrag, data);
+				}
+				else{
+					dojo.style(this.lineDiv, "left", (this.lineDiv._origLeft + data.deltaX) + "px");
+				}
+			}
+		},
+
+		endResizeColumn: function(inDrag){
+			if(this.dragRecord){
+				var leftTop = this.dragRecord.leftTop;
+				var changeX = dojo._isBodyLtr() ? leftTop.l : -leftTop.l;
+				// Make sure we are not under our minimum
+				// http://bugs.dojotoolkit.org/ticket/9390
+				changeX += Math.max(inDrag.w + changeX, this.minColWidth) - (inDrag.w + changeX);
+				if(dojo.isWebKit && inDrag.spanners.length){
+					// Webkit needs the pad border extents back in
+					changeX += dojo._getPadBorderExtents(inDrag.spanners[0].node).w;
+				}
+				var data = {
+					deltaX: changeX,
+					w: inDrag.w + changeX,
+					vw: inDrag.vw + changeX,
+					tw: inDrag.tw + changeX
+				};
+				// Only resize the columns when the drag has finished
+				this.doResizeNow(inDrag, data);
+			}
+			
+			dojo.destroy(this.lineDiv);
+ 			dojo.destroy(this.moverDiv);
+			dojo.destroy(this.moverDiv);
+			delete this.moverDiv;
+			this._skipBogusClicks = true;
+			inDrag.view.update();
+			this._skipBogusClicks = false;
+			this.grid.onResizeColumn(inDrag.index);
+		},
+		doResizeNow: function(inDrag, data){
+			inDrag.view.convertColPctToFixed();
+			if(inDrag.view.flexCells && !inDrag.view.testFlexCells()){
+				var t = findTable(inDrag.node);
+				if(t){
+					(t.style.width = '');
+				}
+			}
+			var i, s, sw, f, fl;
+			for(i=0; (s=inDrag.spanners[i]); i++){
+				sw = s.width + data.deltaX;
+				s.node.style.width = sw + 'px';
+				inDrag.view.setColWidth(s.index, sw);
+			}
+			if(dojo._isBodyLtr() || !dojo.isIE){//fix #11339			
+				for(i=0; (f=inDrag.followers[i]); i++){
+					fl = f.left + data.deltaX;
+					f.node.style.left = fl + 'px';
+				}
+			}
+			inDrag.node.style.width = data.w + 'px';
+			inDrag.view.setColWidth(inDrag.index, data.w);
+			inDrag.view.headerNode.style.width = data.vw + 'px';
+			inDrag.view.setColumnsWidth(data.tw);
+			if(!dojo._isBodyLtr()){
+				inDrag.view.headerNode.scrollLeft = inDrag.scrollLeft + data.deltaX;
+			}
+		}
+	});
+
+	// Maps an html table into a structure parsable for information about cell row and col spanning.
+	// Used by HeaderBuilder.
+	dg._TableMap = dojo.extend(function(rows){
+		this.mapRows(rows);
+	},{
+		map: null,
+
+		mapRows: function(inRows){
+			// summary: Map table topography
+
+			//console.log('mapRows');
+			// # of rows
+			var rowCount = inRows.length;
+			if(!rowCount){
+				return;
+			}
+			// map which columns and rows fill which cells
+			this.map = [];
+			var row;
+			for(var k=0; (row=inRows[k]); k++){
+				this.map[k] = [];
+			}
+			for(var j=0; (row=inRows[j]); j++){
+				for(var i=0, x=0, cell, colSpan, rowSpan; (cell=row[i]); i++){
+					while(this.map[j][x]){x++;}
+					this.map[j][x] = { c: i, r: j };
+					rowSpan = cell.rowSpan || 1;
+					colSpan = cell.colSpan || 1;
+					for(var y=0; y<rowSpan; y++){
+						for(var s=0; s<colSpan; s++){
+							this.map[j+y][x+s] = this.map[j][x];
+						}
+					}
+					x += colSpan;
+				}
+			}
+			//this.dumMap();
+		},
+
+		dumpMap: function(){
+			for(var j=0, row, h=''; (row=this.map[j]); j++,h=''){
+				for(var i=0, cell; (cell=row[i]); i++){
+					h += cell.r + ',' + cell.c + '   ';
+				}
+			}
+		},
+
+		getMapCoords: function(inRow, inCol){
+			// summary: Find node's map coords by it's structure coords
+			for(var j=0, row; (row=this.map[j]); j++){
+				for(var i=0, cell; (cell=row[i]); i++){
+					if(cell.c==inCol && cell.r == inRow){
+						return { j: j, i: i };
+					}
+					//else{console.log(inRow, inCol, ' : ', i, j, " : ", cell.r, cell.c); };
+				}
+			}
+			return { j: -1, i: -1 };
+		},
+		
+		getNode: function(inTable, inRow, inCol){
+			// summary: Find a node in inNode's table with the given structure coords
+			var row = inTable && inTable.rows[inRow];
+			return row && row.cells[inCol];
+		},
+		
+		_findOverlappingNodes: function(inTable, inRow, inCol){
+			var nodes = [];
+			var m = this.getMapCoords(inRow, inCol);
+			//console.log("node j: %d, i: %d", m.j, m.i);
+			for(var j=0, row; (row=this.map[j]); j++){
+				if(j == m.j){ continue; }
+				var rw = row[m.i];
+				//console.log("overlaps: r: %d, c: %d", rw.r, rw.c);
+				var n = (rw?this.getNode(inTable, rw.r, rw.c):null);
+				if(n){ nodes.push(n); }
+			}
+			//console.log(nodes);
+			return nodes;
+		},
+		
+		findOverlappingNodes: function(inNode){
+			return this._findOverlappingNodes(findTable(inNode), getTrIndex(inNode.parentNode), getTdIndex(inNode));
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Container"] = true;
+dojo.provide("dojo.dnd.Container");
+
+
+
+
+/*
+	Container states:
+		""		- normal state
+		"Over"	- mouse over a container
+	Container item states:
+		""		- normal state
+		"Over"	- mouse over a container item
+*/
+
+/*=====
+dojo.declare("dojo.dnd.__ContainerArgs", [], {
+	creator: function(){
+		// summary:
+		//		a creator function, which takes a data item, and returns an object like that:
+		//		{node: newNode, data: usedData, type: arrayOfStrings}
+	},
+
+	// skipForm: Boolean
+	//		don't start the drag operation, if clicked on form elements
+	skipForm: false,
+
+	// dropParent: Node||String
+	//		node or node's id to use as the parent node for dropped items
+	//		(must be underneath the 'node' parameter in the DOM)
+	dropParent: null,
+
+	// _skipStartup: Boolean
+	//		skip startup(), which collects children, for deferred initialization
+	//		(this is used in the markup mode)
+	_skipStartup: false
+});
+
+dojo.dnd.Item = function(){
+	// summary:
+	//		Represents (one of) the source node(s) being dragged.
+	//		Contains (at least) the "type" and "data" attributes.
+	// type: String[]
+	//		Type(s) of this item, by default this is ["text"]
+	// data: Object
+	//		Logical representation of the object being dragged.
+	//		If the drag object's type is "text" then data is a String,
+	//		if it's another type then data could be a different Object,
+	//		perhaps a name/value hash.
+	
+	this.type = type;
+	this.data = data;
+}
+=====*/
+
+dojo.declare("dojo.dnd.Container", null, {
+	// summary:
+	//		a Container object, which knows when mouse hovers over it, 
+	//		and over which element it hovers
+	
+	// object attributes (for markup)
+	skipForm: false,
+	
+	/*=====
+	// current: DomNode
+	//		The DOM node the mouse is currently hovered over
+	current: null,
+	
+	// map: Hash<String, dojo.dnd.Item>
+	//		Map from an item's id (which is also the DOMNode's id) to
+	//		the dojo.dnd.Item itself.
+	map: {},
+	=====*/
+	
+	constructor: function(node, params){
+		// summary:
+		//		a constructor of the Container
+		// node: Node
+		//		node or node's id to build the container on
+		// params: dojo.dnd.__ContainerArgs
+		//		a dictionary of parameters
+		this.node = dojo.byId(node);
+		if(!params){ params = {}; }
+		this.creator = params.creator || null;
+		this.skipForm = params.skipForm;
+		this.parent = params.dropParent && dojo.byId(params.dropParent);
+		
+		// class-specific variables
+		this.map = {};
+		this.current = null;
+
+		// states
+		this.containerState = "";
+		dojo.addClass(this.node, "dojoDndContainer");
+		
+		// mark up children
+		if(!(params && params._skipStartup)){
+			this.startup();
+		}
+
+		// set up events
+		this.events = [
+			dojo.connect(this.node, "onmouseover", this, "onMouseOver"),
+			dojo.connect(this.node, "onmouseout",  this, "onMouseOut"),
+			// cancel text selection and text dragging
+			dojo.connect(this.node, "ondragstart",   this, "onSelectStart"),
+			dojo.connect(this.node, "onselectstart", this, "onSelectStart")
+		];
+	},
+	
+	// object attributes (for markup)
+	creator: function(){
+		// summary:
+		//		creator function, dummy at the moment
+	},
+	
+	// abstract access to the map
+	getItem: function(/*String*/ key){
+		// summary:
+		//		returns a data item by its key (id)
+		return this.map[key];	// dojo.dnd.Item
+	},
+	setItem: function(/*String*/ key, /*dojo.dnd.Item*/ data){
+		// summary:
+		//		associates a data item with its key (id)
+		this.map[key] = data;
+	},
+	delItem: function(/*String*/ key){
+		// summary:
+		//		removes a data item from the map by its key (id)
+		delete this.map[key];
+	},
+	forInItems: function(/*Function*/ f, /*Object?*/ o){
+		// summary:
+		//		iterates over a data map skipping members that 
+		//		are present in the empty object (IE and/or 3rd-party libraries).
+		o = o || dojo.global;
+		var m = this.map, e = dojo.dnd._empty;
+		for(var i in m){
+			if(i in e){ continue; }
+			f.call(o, m[i], i, this);
+		}
+		return o;	// Object
+	},
+	clearItems: function(){
+		// summary:
+		//		removes all data items from the map
+		this.map = {};
+	},
+	
+	// methods
+	getAllNodes: function(){
+		// summary:
+		//		returns a list (an array) of all valid child nodes
+		return dojo.query("> .dojoDndItem", this.parent);	// NodeList
+	},
+	sync: function(){
+		// summary:
+		//		sync up the node list with the data map
+		var map = {};
+		this.getAllNodes().forEach(function(node){
+			if(node.id){
+				var item = this.getItem(node.id);
+				if(item){
+					map[node.id] = item;
+					return;
+				}
+			}else{
+				node.id = dojo.dnd.getUniqueId();
+			}
+			var type = node.getAttribute("dndType"),
+				data = node.getAttribute("dndData");
+			map[node.id] = {
+				data: data || node.innerHTML,
+				type: type ? type.split(/\s*,\s*/) : ["text"]
+			};
+		}, this);
+		this.map = map;
+		return this;	// self
+	},
+	insertNodes: function(data, before, anchor){
+		// summary:
+		//		inserts an array of new nodes before/after an anchor node
+		// data: Array
+		//		a list of data items, which should be processed by the creator function
+		// before: Boolean
+		//		insert before the anchor, if true, and after the anchor otherwise
+		// anchor: Node
+		//		the anchor node to be used as a point of insertion
+		if(!this.parent.firstChild){
+			anchor = null;
+		}else if(before){
+			if(!anchor){
+				anchor = this.parent.firstChild;
+			}
+		}else{
+			if(anchor){
+				anchor = anchor.nextSibling;
+			}
+		}
+		if(anchor){
+			for(var i = 0; i < data.length; ++i){
+				var t = this._normalizedCreator(data[i]);
+				this.setItem(t.node.id, {data: t.data, type: t.type});
+				this.parent.insertBefore(t.node, anchor);
+			}
+		}else{
+			for(var i = 0; i < data.length; ++i){
+				var t = this._normalizedCreator(data[i]);
+				this.setItem(t.node.id, {data: t.data, type: t.type});
+				this.parent.appendChild(t.node);
+			}
+		}
+		return this;	// self
+	},
+	destroy: function(){
+		// summary:
+		//		prepares this object to be garbage-collected
+		dojo.forEach(this.events, dojo.disconnect);
+		this.clearItems();
+		this.node = this.parent = this.current = null;
+	},
+
+	// markup methods
+	markupFactory: function(params, node){
+		params._skipStartup = true;
+		return new dojo.dnd.Container(node, params);
+	},
+	startup: function(){
+		// summary:
+		//		collects valid child items and populate the map
+		
+		// set up the real parent node
+		if(!this.parent){
+			// use the standard algorithm, if not assigned
+			this.parent = this.node;
+			if(this.parent.tagName.toLowerCase() == "table"){
+				var c = this.parent.getElementsByTagName("tbody");
+				if(c && c.length){ this.parent = c[0]; }
+			}
+		}
+		this.defaultCreator = dojo.dnd._defaultCreator(this.parent);
+
+		// process specially marked children
+		this.sync();
+	},
+
+	// mouse events
+	onMouseOver: function(e){
+		// summary:
+		//		event processor for onmouseover
+		// e: Event
+		//		mouse event
+		var n = e.relatedTarget;
+		while(n){
+			if(n == this.node){ break; }
+			try{
+				n = n.parentNode;
+			}catch(x){
+				n = null;
+			}
+		}
+		if(!n){
+			this._changeState("Container", "Over");
+			this.onOverEvent();
+		}
+		n = this._getChildByEvent(e);
+		if(this.current == n){ return; }
+		if(this.current){ this._removeItemClass(this.current, "Over"); }
+		if(n){ this._addItemClass(n, "Over"); }
+		this.current = n;
+	},
+	onMouseOut: function(e){
+		// summary:
+		//		event processor for onmouseout
+		// e: Event
+		//		mouse event
+		for(var n = e.relatedTarget; n;){
+			if(n == this.node){ return; }
+			try{
+				n = n.parentNode;
+			}catch(x){
+				n = null;
+			}
+		}
+		if(this.current){
+			this._removeItemClass(this.current, "Over");
+			this.current = null;
+		}
+		this._changeState("Container", "");
+		this.onOutEvent();
+	},
+	onSelectStart: function(e){
+		// summary:
+		//		event processor for onselectevent and ondragevent
+		// e: Event
+		//		mouse event
+		if(!this.skipForm || !dojo.dnd.isFormElement(e)){
+			dojo.stopEvent(e);
+		}
+	},
+	
+	// utilities
+	onOverEvent: function(){
+		// summary:
+		//		this function is called once, when mouse is over our container
+	},
+	onOutEvent: function(){
+		// summary:
+		//		this function is called once, when mouse is out of our container
+	},
+	_changeState: function(type, newState){
+		// summary:
+		//		changes a named state to new state value
+		// type: String
+		//		a name of the state to change
+		// newState: String
+		//		new state
+		var prefix = "dojoDnd" + type;
+		var state  = type.toLowerCase() + "State";
+		//dojo.replaceClass(this.node, prefix + newState, prefix + this[state]);
+		dojo.removeClass(this.node, prefix + this[state]);
+		dojo.addClass(this.node, prefix + newState);
+		this[state] = newState;
+	},
+	_addItemClass: function(node, type){
+		// summary:
+		//		adds a class with prefix "dojoDndItem"
+		// node: Node
+		//		a node
+		// type: String
+		//		a variable suffix for a class name
+		dojo.addClass(node, "dojoDndItem" + type);
+	},
+	_removeItemClass: function(node, type){
+		// summary:
+		//		removes a class with prefix "dojoDndItem"
+		// node: Node
+		//		a node
+		// type: String
+		//		a variable suffix for a class name
+		dojo.removeClass(node, "dojoDndItem" + type);
+	},
+	_getChildByEvent: function(e){
+		// summary:
+		//		gets a child, which is under the mouse at the moment, or null
+		// e: Event
+		//		a mouse event
+		var node = e.target;
+		if(node){
+			for(var parent = node.parentNode; parent; node = parent, parent = node.parentNode){
+				if(parent == this.parent && dojo.hasClass(node, "dojoDndItem")){ return node; }
+			}
+		}
+		return null;
+	},
+	_normalizedCreator: function(/*dojo.dnd.Item*/ item, /*String*/ hint){
+		// summary:
+		//		adds all necessary data to the output of the user-supplied creator function
+		var t = (this.creator || this.defaultCreator).call(this, item, hint);
+		if(!dojo.isArray(t.type)){ t.type = ["text"]; }
+		if(!t.node.id){ t.node.id = dojo.dnd.getUniqueId(); }
+		dojo.addClass(t.node, "dojoDndItem");
+		return t;
+	}
+});
+
+dojo.dnd._createNode = function(tag){
+	// summary:
+	//		returns a function, which creates an element of given tag 
+	//		(SPAN by default) and sets its innerHTML to given text
+	// tag: String
+	//		a tag name or empty for SPAN
+	if(!tag){ return dojo.dnd._createSpan; }
+	return function(text){	// Function
+		return dojo.create(tag, {innerHTML: text});	// Node
+	};
+};
+
+dojo.dnd._createTrTd = function(text){
+	// summary:
+	//		creates a TR/TD structure with given text as an innerHTML of TD
+	// text: String
+	//		a text for TD
+	var tr = dojo.create("tr");
+	dojo.create("td", {innerHTML: text}, tr);
+	return tr;	// Node
+};
+
+dojo.dnd._createSpan = function(text){
+	// summary:
+	//		creates a SPAN element with given text as its innerHTML
+	// text: String
+	//		a text for SPAN
+	return dojo.create("span", {innerHTML: text});	// Node
+};
+
+// dojo.dnd._defaultCreatorNodes: Object
+//		a dictionary that maps container tag names to child tag names
+dojo.dnd._defaultCreatorNodes = {ul: "li", ol: "li", div: "div", p: "div"};
+
+dojo.dnd._defaultCreator = function(node){
+	// summary:
+	//		takes a parent node, and returns an appropriate creator function
+	// node: Node
+	//		a container node
+	var tag = node.tagName.toLowerCase();
+	var c = tag == "tbody" || tag == "thead" ? dojo.dnd._createTrTd :
+			dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);
+	return function(item, hint){	// Function
+		var isObj = item && dojo.isObject(item), data, type, n;
+		if(isObj && item.tagName && item.nodeType && item.getAttribute){
+			// process a DOM node
+			data = item.getAttribute("dndData") || item.innerHTML;
+			type = item.getAttribute("dndType");
+			type = type ? type.split(/\s*,\s*/) : ["text"];
+			n = item;	// this node is going to be moved rather than copied
+		}else{
+			// process a DnD item object or a string
+			data = (isObj && item.data) ? item.data : item;
+			type = (isObj && item.type) ? item.type : ["text"];
+			n = (hint == "avatar" ? dojo.dnd._createSpan : c)(String(data));
+		}
+		if(!n.id){
+			n.id = dojo.dnd.getUniqueId();
+		}
+		return {node: n, data: data, type: type};
+	};
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Selector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Selector"] = true;
+dojo.provide("dojo.dnd.Selector");
+
+
+
+
+/*
+	Container item states:
+		""			- an item is not selected
+		"Selected"	- an item is selected
+		"Anchor"	- an item is selected, and is an anchor for a "shift" selection
+*/
+
+/*=====
+dojo.declare("dojo.dnd.__SelectorArgs", [dojo.dnd.__ContainerArgs], {
+	//	singular: Boolean
+	//		allows selection of only one element, if true
+	singular: false,
+
+	//	autoSync: Boolean
+	//		autosynchronizes the source with its list of DnD nodes,
+	autoSync: false
+});
+=====*/
+
+dojo.declare("dojo.dnd.Selector", dojo.dnd.Container, {
+	// summary:
+	//		a Selector object, which knows how to select its children
+	
+	/*=====
+	// selection: Set<String>
+	//		The set of id's that are currently selected, such that this.selection[id] == 1
+	//		if the node w/that id is selected.  Can iterate over selected node's id's like:
+	//	|		for(var id in this.selection)
+	selection: {},
+	=====*/
+
+	constructor: function(node, params){
+		// summary:
+		//		constructor of the Selector
+		// node: Node||String
+		//		node or node's id to build the selector on
+		// params: dojo.dnd.__SelectorArgs?
+		//		a dictionary of parameters
+		if(!params){ params = {}; }
+		this.singular = params.singular;
+		this.autoSync = params.autoSync;
+		// class-specific variables
+		this.selection = {};
+		this.anchor = null;
+		this.simpleSelection = false;
+		// set up events
+		this.events.push(
+			dojo.connect(this.node, "onmousedown", this, "onMouseDown"),
+			dojo.connect(this.node, "onmouseup",   this, "onMouseUp"));
+	},
+	
+	// object attributes (for markup)
+	singular: false,	// is singular property
+	
+	// methods
+	getSelectedNodes: function(){
+		// summary:
+		//		returns a list (an array) of selected nodes
+		var t = new dojo.NodeList();
+		var e = dojo.dnd._empty;
+		for(var i in this.selection){
+			if(i in e){ continue; }
+			t.push(dojo.byId(i));
+		}
+		return t;	// NodeList
+	},
+	selectNone: function(){
+		// summary:
+		//		unselects all items
+		return this._removeSelection()._removeAnchor();	// self
+	},
+	selectAll: function(){
+		// summary:
+		//		selects all items
+		this.forInItems(function(data, id){
+			this._addItemClass(dojo.byId(id), "Selected");
+			this.selection[id] = 1;
+		}, this);
+		return this._removeAnchor();	// self
+	},
+	deleteSelectedNodes: function(){
+		// summary:
+		//		deletes all selected items
+		var e = dojo.dnd._empty;
+		for(var i in this.selection){
+			if(i in e){ continue; }
+			var n = dojo.byId(i);
+			this.delItem(i);
+			dojo.destroy(n);
+		}
+		this.anchor = null;
+		this.selection = {};
+		return this;	// self
+	},
+	forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){
+		// summary:
+		//		iterates over selected items;
+		//		see `dojo.dnd.Container.forInItems()` for details
+		o = o || dojo.global;
+		var s = this.selection, e = dojo.dnd._empty;
+		for(var i in s){
+			if(i in e){ continue; }
+			f.call(o, this.getItem(i), i, this);
+		}
+	},
+	sync: function(){
+		// summary:
+		//		sync up the node list with the data map
+		
+		dojo.dnd.Selector.superclass.sync.call(this);
+		
+		// fix the anchor
+		if(this.anchor){
+			if(!this.getItem(this.anchor.id)){
+				this.anchor = null;
+			}
+		}
+		
+		// fix the selection
+		var t = [], e = dojo.dnd._empty;
+		for(var i in this.selection){
+			if(i in e){ continue; }
+			if(!this.getItem(i)){
+				t.push(i);
+			}
+		}
+		dojo.forEach(t, function(i){
+			delete this.selection[i];
+		}, this);
+		
+		return this;	// self
+	},
+	insertNodes: function(addSelected, data, before, anchor){
+		// summary:
+		//		inserts new data items (see `dojo.dnd.Container.insertNodes()` method for details)
+		// addSelected: Boolean
+		//		all new nodes will be added to selected items, if true, no selection change otherwise
+		// data: Array
+		//		a list of data items, which should be processed by the creator function
+		// before: Boolean
+		//		insert before the anchor, if true, and after the anchor otherwise
+		// anchor: Node
+		//		the anchor node to be used as a point of insertion
+		var oldCreator = this._normalizedCreator;
+		this._normalizedCreator = function(item, hint){
+			var t = oldCreator.call(this, item, hint);
+			if(addSelected){
+				if(!this.anchor){
+					this.anchor = t.node;
+					this._removeItemClass(t.node, "Selected");
+					this._addItemClass(this.anchor, "Anchor");
+				}else if(this.anchor != t.node){
+					this._removeItemClass(t.node, "Anchor");
+					this._addItemClass(t.node, "Selected");
+				}
+				this.selection[t.node.id] = 1;
+			}else{
+				this._removeItemClass(t.node, "Selected");
+				this._removeItemClass(t.node, "Anchor");
+			}
+			return t;
+		};
+		dojo.dnd.Selector.superclass.insertNodes.call(this, data, before, anchor);
+		this._normalizedCreator = oldCreator;
+		return this;	// self
+	},
+	destroy: function(){
+		// summary:
+		//		prepares the object to be garbage-collected
+		dojo.dnd.Selector.superclass.destroy.call(this);
+		this.selection = this.anchor = null;
+	},
+
+	// markup methods
+	markupFactory: function(params, node){
+		params._skipStartup = true;
+		return new dojo.dnd.Selector(node, params);
+	},
+
+	// mouse events
+	onMouseDown: function(e){
+		// summary:
+		//		event processor for onmousedown
+		// e: Event
+		//		mouse event
+		if(this.autoSync){ this.sync(); }
+		if(!this.current){ return; }
+		if(!this.singular && !dojo.isCopyKey(e) && !e.shiftKey && (this.current.id in this.selection)){
+			this.simpleSelection = true;
+			if(e.button === dojo.mouseButtons.LEFT){
+				// accept the left button and stop the event
+				// for IE we don't stop event when multiple buttons are pressed
+				dojo.stopEvent(e);
+			}
+			return;
+		}
+		if(!this.singular && e.shiftKey){
+			if(!dojo.isCopyKey(e)){
+				this._removeSelection();
+			}
+			var c = this.getAllNodes();
+			if(c.length){
+				if(!this.anchor){
+					this.anchor = c[0];
+					this._addItemClass(this.anchor, "Anchor");
+				}
+				this.selection[this.anchor.id] = 1;
+				if(this.anchor != this.current){
+					var i = 0;
+					for(; i < c.length; ++i){
+						var node = c[i];
+						if(node == this.anchor || node == this.current){ break; }
+					}
+					for(++i; i < c.length; ++i){
+						var node = c[i];
+						if(node == this.anchor || node == this.current){ break; }
+						this._addItemClass(node, "Selected");
+						this.selection[node.id] = 1;
+					}
+					this._addItemClass(this.current, "Selected");
+					this.selection[this.current.id] = 1;
+				}
+			}
+		}else{
+			if(this.singular){
+				if(this.anchor == this.current){
+					if(dojo.isCopyKey(e)){
+						this.selectNone();
+					}
+				}else{
+					this.selectNone();
+					this.anchor = this.current;
+					this._addItemClass(this.anchor, "Anchor");
+					this.selection[this.current.id] = 1;
+				}
+			}else{
+				if(dojo.isCopyKey(e)){
+					if(this.anchor == this.current){
+						delete this.selection[this.anchor.id];
+						this._removeAnchor();
+					}else{
+						if(this.current.id in this.selection){
+							this._removeItemClass(this.current, "Selected");
+							delete this.selection[this.current.id];
+						}else{
+							if(this.anchor){
+								this._removeItemClass(this.anchor, "Anchor");
+								this._addItemClass(this.anchor, "Selected");
+							}
+							this.anchor = this.current;
+							this._addItemClass(this.current, "Anchor");
+							this.selection[this.current.id] = 1;
+						}
+					}
+				}else{
+					if(!(this.current.id in this.selection)){
+						this.selectNone();
+						this.anchor = this.current;
+						this._addItemClass(this.current, "Anchor");
+						this.selection[this.current.id] = 1;
+					}
+				}
+			}
+		}
+		dojo.stopEvent(e);
+	},
+	onMouseUp: function(e){
+		// summary:
+		//		event processor for onmouseup
+		// e: Event
+		//		mouse event
+		if(!this.simpleSelection){ return; }
+		this.simpleSelection = false;
+		this.selectNone();
+		if(this.current){
+			this.anchor = this.current;
+			this._addItemClass(this.anchor, "Anchor");
+			this.selection[this.current.id] = 1;
+		}
+	},
+	onMouseMove: function(e){
+		// summary
+		//		event processor for onmousemove
+		// e: Event
+		//		mouse event
+		this.simpleSelection = false;
+	},
+	
+	// utilities
+	onOverEvent: function(){
+		// summary:
+		//		this function is called once, when mouse is over our container
+		this.onmousemoveEvent = dojo.connect(this.node, "onmousemove", this, "onMouseMove");
+	},
+	onOutEvent: function(){
+		// summary:
+		//		this function is called once, when mouse is out of our container
+		dojo.disconnect(this.onmousemoveEvent);
+		delete this.onmousemoveEvent;
+	},
+	_removeSelection: function(){
+		// summary:
+		//		unselects all items
+		var e = dojo.dnd._empty;
+		for(var i in this.selection){
+			if(i in e){ continue; }
+			var node = dojo.byId(i);
+			if(node){ this._removeItemClass(node, "Selected"); }
+		}
+		this.selection = {};
+		return this;	// self
+	},
+	_removeAnchor: function(){
+		if(this.anchor){
+			this._removeItemClass(this.anchor, "Anchor");
+			this.anchor = null;
+		}
+		return this;	// self
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Avatar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Avatar"] = true;
+dojo.provide("dojo.dnd.Avatar");
+
+
+
+dojo.declare("dojo.dnd.Avatar", null, {
+	// summary:
+	//		Object that represents transferred DnD items visually
+	// manager: Object
+	//		a DnD manager object
+
+	constructor: function(manager){
+		this.manager = manager;
+		this.construct();
+	},
+
+	// methods
+	construct: function(){
+		// summary:
+		//		constructor function;
+		//		it is separate so it can be (dynamically) overwritten in case of need
+		this.isA11y = dojo.hasClass(dojo.body(),"dijit_a11y");
+		var a = dojo.create("table", {
+				"class": "dojoDndAvatar",
+				style: {
+					position: "absolute",
+					zIndex:   "1999",
+					margin:   "0px"
+				}
+			}),
+			source = this.manager.source, node,
+			b = dojo.create("tbody", null, a),
+			tr = dojo.create("tr", null, b),
+			td = dojo.create("td", null, tr),
+			icon = this.isA11y ? dojo.create("span", {
+						id : "a11yIcon",
+						innerHTML : this.manager.copy ? '+' : "<"
+					}, td) : null,
+			span = dojo.create("span", {
+				innerHTML: source.generateText ? this._generateText() : ""
+			}, td),
+			k = Math.min(5, this.manager.nodes.length), i = 0;
+		// we have to set the opacity on IE only after the node is live
+		dojo.attr(tr, {
+			"class": "dojoDndAvatarHeader",
+			style: {opacity: 0.9}
+		});
+		for(; i < k; ++i){
+			if(source.creator){
+				// create an avatar representation of the node
+				node = source._normalizedCreator(source.getItem(this.manager.nodes[i].id).data, "avatar").node;
+			}else{
+				// or just clone the node and hope it works
+				node = this.manager.nodes[i].cloneNode(true);
+				if(node.tagName.toLowerCase() == "tr"){
+					// insert extra table nodes
+					var table = dojo.create("table"),
+						tbody = dojo.create("tbody", null, table);
+					tbody.appendChild(node);
+					node = table;
+				}
+			}
+			node.id = "";
+			tr = dojo.create("tr", null, b);
+			td = dojo.create("td", null, tr);
+			td.appendChild(node);
+			dojo.attr(tr, {
+				"class": "dojoDndAvatarItem",
+				style: {opacity: (9 - i) / 10}
+			});
+		}
+		this.node = a;
+	},
+	destroy: function(){
+		// summary:
+		//		destructor for the avatar; called to remove all references so it can be garbage-collected
+		dojo.destroy(this.node);
+		this.node = false;
+	},
+	update: function(){
+		// summary:
+		//		updates the avatar to reflect the current DnD state
+		dojo[(this.manager.canDropFlag ? "add" : "remove") + "Class"](this.node, "dojoDndAvatarCanDrop");
+		if (this.isA11y){
+			var icon = dojo.byId("a11yIcon");
+			var text = '+';   // assume canDrop && copy
+			if (this.manager.canDropFlag && !this.manager.copy) {
+				text = '< '; // canDrop && move 
+			}else if (!this.manager.canDropFlag && !this.manager.copy) {
+				text = "o"; //!canDrop && move
+			}else if(!this.manager.canDropFlag){
+				text = 'x';  // !canDrop && copy
+			}
+			icon.innerHTML=text;
+		}
+		// replace text
+		dojo.query(("tr.dojoDndAvatarHeader td span" +(this.isA11y ? " span" : "")), this.node).forEach(
+			function(node){
+				node.innerHTML = this._generateText();
+			}, this);
+	},
+	_generateText: function(){
+		// summary: generates a proper text to reflect copying or moving of items
+		return this.manager.nodes.length.toString();
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Manager"] = true;
+dojo.provide("dojo.dnd.Manager");
+
+
+
+
+
+dojo.declare("dojo.dnd.Manager", null, {
+	// summary:
+	//		the manager of DnD operations (usually a singleton)
+	constructor: function(){
+		this.avatar  = null;
+		this.source = null;
+		this.nodes = [];
+		this.copy  = true;
+		this.target = null;
+		this.canDropFlag = false;
+		this.events = [];
+	},
+
+	// avatar's offset from the mouse
+	OFFSET_X: 16,
+	OFFSET_Y: 16,
+	
+	// methods
+	overSource: function(source){
+		// summary:
+		//		called when a source detected a mouse-over condition
+		// source: Object
+		//		the reporter
+		if(this.avatar){
+			this.target = (source && source.targetState != "Disabled") ? source : null;
+			this.canDropFlag = Boolean(this.target);
+			this.avatar.update();
+		}
+		dojo.publish("/dnd/source/over", [source]);
+	},
+	outSource: function(source){
+		// summary:
+		//		called when a source detected a mouse-out condition
+		// source: Object
+		//		the reporter
+		if(this.avatar){
+			if(this.target == source){
+				this.target = null;
+				this.canDropFlag = false;
+				this.avatar.update();
+				dojo.publish("/dnd/source/over", [null]);
+			}
+		}else{
+			dojo.publish("/dnd/source/over", [null]);
+		}
+	},
+	startDrag: function(source, nodes, copy){
+		// summary:
+		//		called to initiate the DnD operation
+		// source: Object
+		//		the source which provides items
+		// nodes: Array
+		//		the list of transferred items
+		// copy: Boolean
+		//		copy items, if true, move items otherwise
+		this.source = source;
+		this.nodes  = nodes;
+		this.copy   = Boolean(copy); // normalizing to true boolean
+		this.avatar = this.makeAvatar();
+		dojo.body().appendChild(this.avatar.node);
+		dojo.publish("/dnd/start", [source, nodes, this.copy]);
+		this.events = [
+			dojo.connect(dojo.doc, "onmousemove", this, "onMouseMove"),
+			dojo.connect(dojo.doc, "onmouseup",   this, "onMouseUp"),
+			dojo.connect(dojo.doc, "onkeydown",   this, "onKeyDown"),
+			dojo.connect(dojo.doc, "onkeyup",     this, "onKeyUp"),
+			// cancel text selection and text dragging
+			dojo.connect(dojo.doc, "ondragstart",   dojo.stopEvent),
+			dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent)
+		];
+		var c = "dojoDnd" + (copy ? "Copy" : "Move");
+		dojo.addClass(dojo.body(), c); 
+	},
+	canDrop: function(flag){
+		// summary:
+		//		called to notify if the current target can accept items
+		var canDropFlag = Boolean(this.target && flag);
+		if(this.canDropFlag != canDropFlag){
+			this.canDropFlag = canDropFlag;
+			this.avatar.update();
+		}
+	},
+	stopDrag: function(){
+		// summary:
+		//		stop the DnD in progress
+		dojo.removeClass(dojo.body(), "dojoDndCopy");
+		dojo.removeClass(dojo.body(), "dojoDndMove");
+		dojo.forEach(this.events, dojo.disconnect);
+		this.events = [];
+		this.avatar.destroy();
+		this.avatar = null;
+		this.source = this.target = null;
+		this.nodes = [];
+	},
+	makeAvatar: function(){
+		// summary:
+		//		makes the avatar; it is separate to be overwritten dynamically, if needed
+		return new dojo.dnd.Avatar(this);
+	},
+	updateAvatar: function(){
+		// summary:
+		//		updates the avatar; it is separate to be overwritten dynamically, if needed
+		this.avatar.update();
+	},
+	
+	// mouse event processors
+	onMouseMove: function(e){
+		// summary:
+		//		event processor for onmousemove
+		// e: Event
+		//		mouse event
+		var a = this.avatar;
+		if(a){
+			dojo.dnd.autoScrollNodes(e);
+			//dojo.dnd.autoScroll(e);
+			var s = a.node.style;
+			s.left = (e.pageX + this.OFFSET_X) + "px";
+			s.top  = (e.pageY + this.OFFSET_Y) + "px";
+			var copy = Boolean(this.source.copyState(dojo.isCopyKey(e)));
+			if(this.copy != copy){ 
+				this._setCopyStatus(copy);
+			}
+		}
+	},
+	onMouseUp: function(e){
+		// summary:
+		//		event processor for onmouseup
+		// e: Event
+		//		mouse event
+		if(this.avatar){
+			if(this.target && this.canDropFlag){
+				var copy = Boolean(this.source.copyState(dojo.isCopyKey(e))),
+				params = [this.source, this.nodes, copy, this.target, e];
+				dojo.publish("/dnd/drop/before", params);
+				dojo.publish("/dnd/drop", params);
+			}else{
+				dojo.publish("/dnd/cancel");
+			}
+			this.stopDrag();
+		}
+	},
+	
+	// keyboard event processors
+	onKeyDown: function(e){
+		// summary:
+		//		event processor for onkeydown:
+		//		watching for CTRL for copy/move status, watching for ESCAPE to cancel the drag
+		// e: Event
+		//		keyboard event
+		if(this.avatar){
+			switch(e.keyCode){
+				case dojo.keys.CTRL:
+					var copy = Boolean(this.source.copyState(true));
+					if(this.copy != copy){ 
+						this._setCopyStatus(copy);
+					}
+					break;
+				case dojo.keys.ESCAPE:
+					dojo.publish("/dnd/cancel");
+					this.stopDrag();
+					break;
+			}
+		}
+	},
+	onKeyUp: function(e){
+		// summary:
+		//		event processor for onkeyup, watching for CTRL for copy/move status
+		// e: Event
+		//		keyboard event
+		if(this.avatar && e.keyCode == dojo.keys.CTRL){
+			var copy = Boolean(this.source.copyState(false));
+			if(this.copy != copy){ 
+				this._setCopyStatus(copy);
+			}
+		}
+	},
+	
+	// utilities
+	_setCopyStatus: function(copy){
+		// summary:
+		//		changes the copy status
+		// copy: Boolean
+		//		the copy status
+		this.copy = copy;
+		this.source._markDndStatus(this.copy);
+		this.updateAvatar();
+		dojo.removeClass(dojo.body(), "dojoDnd" + (this.copy ? "Move" : "Copy"));
+		dojo.addClass(dojo.body(), "dojoDnd" + (this.copy ? "Copy" : "Move"));
+	}
+});
+
+// dojo.dnd._manager:
+//		The manager singleton variable. Can be overwritten if needed.
+dojo.dnd._manager = null;
+
+dojo.dnd.manager = function(){
+	// summary:
+	//		Returns the current DnD manager.  Creates one if it is not created yet.
+	if(!dojo.dnd._manager){
+		dojo.dnd._manager = new dojo.dnd.Manager();
+	}
+	return dojo.dnd._manager;	// Object
+};
+
+}
+
+if(!dojo._hasResource["dojo.dnd.Source"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.Source"] = true;
+dojo.provide("dojo.dnd.Source");
+
+
+
+
+/*
+	Container property:
+		"Horizontal"- if this is the horizontal container
+	Source states:
+		""			- normal state
+		"Moved"		- this source is being moved
+		"Copied"	- this source is being copied
+	Target states:
+		""			- normal state
+		"Disabled"	- the target cannot accept an avatar
+	Target anchor state:
+		""			- item is not selected
+		"Before"	- insert point is before the anchor
+		"After"		- insert point is after the anchor
+*/
+
+/*=====
+dojo.dnd.__SourceArgs = function(){
+	//	summary:
+	//		a dict of parameters for DnD Source configuration. Note that any
+	//		property on Source elements may be configured, but this is the
+	//		short-list
+	//	isSource: Boolean?
+	//		can be used as a DnD source. Defaults to true.
+	//	accept: Array?
+	//		list of accepted types (text strings) for a target; defaults to
+	//		["text"]
+	//	autoSync: Boolean
+	//		if true refreshes the node list on every operation; false by default
+	//	copyOnly: Boolean?
+	//		copy items, if true, use a state of Ctrl key otherwise,
+	//		see selfCopy and selfAccept for more details
+	//	delay: Number
+	//		the move delay in pixels before detecting a drag; 0 by default
+	//	horizontal: Boolean?
+	//		a horizontal container, if true, vertical otherwise or when omitted
+	//	selfCopy: Boolean?
+	//		copy items by default when dropping on itself,
+	//		false by default, works only if copyOnly is true
+	//	selfAccept: Boolean?
+	//		accept its own items when copyOnly is true,
+	//		true by default, works only if copyOnly is true
+	//	withHandles: Boolean?
+	//		allows dragging only by handles, false by default
+	//  generateText: Boolean?
+	//		generate text node for drag and drop, true by default
+	this.isSource = isSource;
+	this.accept = accept;
+	this.autoSync = autoSync;
+	this.copyOnly = copyOnly;
+	this.delay = delay;
+	this.horizontal = horizontal;
+	this.selfCopy = selfCopy;
+	this.selfAccept = selfAccept;
+	this.withHandles = withHandles;
+	this.generateText = true;
+}
+=====*/
+
+dojo.declare("dojo.dnd.Source", dojo.dnd.Selector, {
+	// summary:
+	//		a Source object, which can be used as a DnD source, or a DnD target
+	
+	// object attributes (for markup)
+	isSource: true,
+	horizontal: false,
+	copyOnly: false,
+	selfCopy: false,
+	selfAccept: true,
+	skipForm: false,
+	withHandles: false,
+	autoSync: false,
+	delay: 0, // pixels
+	accept: ["text"],
+	generateText: true,
+	
+	constructor: function(/*DOMNode|String*/node, /*dojo.dnd.__SourceArgs?*/params){
+		// summary: 
+		//		a constructor of the Source
+		// node:
+		//		node or node's id to build the source on
+		// params: 
+		//		any property of this class may be configured via the params
+		//		object which is mixed-in to the `dojo.dnd.Source` instance
+		dojo.mixin(this, dojo.mixin({}, params));
+		var type = this.accept;
+		if(type.length){
+			this.accept = {};
+			for(var i = 0; i < type.length; ++i){
+				this.accept[type[i]] = 1;
+			}
+		}
+		// class-specific variables
+		this.isDragging = false;
+		this.mouseDown = false;
+		this.targetAnchor = null;
+		this.targetBox = null;
+		this.before = true;
+		this._lastX = 0;
+		this._lastY = 0;
+		// states
+		this.sourceState  = "";
+		if(this.isSource){
+			dojo.addClass(this.node, "dojoDndSource");
+		}
+		this.targetState  = "";
+		if(this.accept){
+			dojo.addClass(this.node, "dojoDndTarget");
+		}
+		if(this.horizontal){
+			dojo.addClass(this.node, "dojoDndHorizontal");
+		}
+		// set up events
+		this.topics = [
+			dojo.subscribe("/dnd/source/over", this, "onDndSourceOver"),
+			dojo.subscribe("/dnd/start",  this, "onDndStart"),
+			dojo.subscribe("/dnd/drop",   this, "onDndDrop"),
+			dojo.subscribe("/dnd/cancel", this, "onDndCancel")
+		];
+	},
+	
+	// methods
+	checkAcceptance: function(source, nodes){
+		// summary:
+		//		checks if the target can accept nodes from this source
+		// source: Object
+		//		the source which provides items
+		// nodes: Array
+		//		the list of transferred items
+		if(this == source){
+			return !this.copyOnly || this.selfAccept;
+		}
+		for(var i = 0; i < nodes.length; ++i){
+			var type = source.getItem(nodes[i].id).type;
+			// type instanceof Array
+			var flag = false;
+			for(var j = 0; j < type.length; ++j){
+				if(type[j] in this.accept){
+					flag = true;
+					break;
+				}
+			}
+			if(!flag){
+				return false;	// Boolean
+			}
+		}
+		return true;	// Boolean
+	},
+	copyState: function(keyPressed, self){
+		// summary:
+		//		Returns true if we need to copy items, false to move.
+		//		It is separated to be overwritten dynamically, if needed.
+		// keyPressed: Boolean
+		//		the "copy" key was pressed
+		// self: Boolean?
+		//		optional flag that means that we are about to drop on itself
+		
+		if(keyPressed){ return true; }
+		if(arguments.length < 2){
+			self = this == dojo.dnd.manager().target;
+		}
+		if(self){
+			if(this.copyOnly){
+				return this.selfCopy;
+			}
+		}else{
+			return this.copyOnly;
+		}
+		return false;	// Boolean
+	},
+	destroy: function(){
+		// summary:
+		//		prepares the object to be garbage-collected
+		dojo.dnd.Source.superclass.destroy.call(this);
+		dojo.forEach(this.topics, dojo.unsubscribe);
+		this.targetAnchor = null;
+	},
+
+	// markup methods
+	markupFactory: function(params, node){
+		params._skipStartup = true;
+		return new dojo.dnd.Source(node, params);
+	},
+
+	// mouse event processors
+	onMouseMove: function(e){
+		// summary:
+		//		event processor for onmousemove
+		// e: Event
+		//		mouse event
+		if(this.isDragging && this.targetState == "Disabled"){ return; }
+		dojo.dnd.Source.superclass.onMouseMove.call(this, e);
+		var m = dojo.dnd.manager();
+		if(!this.isDragging){
+			if(this.mouseDown && this.isSource &&
+					(Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay)){
+				var nodes = this.getSelectedNodes();
+				if(nodes.length){
+					m.startDrag(this, nodes, this.copyState(dojo.isCopyKey(e), true));
+				}
+			}
+		}
+		if(this.isDragging){
+			// calculate before/after
+			var before = false;
+			if(this.current){
+				if(!this.targetBox || this.targetAnchor != this.current){
+					this.targetBox = dojo.position(this.current, true);
+				}
+				if(this.horizontal){
+					before = (e.pageX - this.targetBox.x) < (this.targetBox.w / 2);
+				}else{
+					before = (e.pageY - this.targetBox.y) < (this.targetBox.h / 2);
+				}
+			}
+			if(this.current != this.targetAnchor || before != this.before){
+				this._markTargetAnchor(before);
+				m.canDrop(!this.current || m.source != this || !(this.current.id in this.selection));
+			}
+		}
+	},
+	onMouseDown: function(e){
+		// summary:
+		//		event processor for onmousedown
+		// e: Event
+		//		mouse event
+		if(!this.mouseDown && this._legalMouseDown(e) && (!this.skipForm || !dojo.dnd.isFormElement(e))){
+			this.mouseDown = true;
+			this._lastX = e.pageX;
+			this._lastY = e.pageY;
+			dojo.dnd.Source.superclass.onMouseDown.call(this, e);
+		}
+	},
+	onMouseUp: function(e){
+		// summary:
+		//		event processor for onmouseup
+		// e: Event
+		//		mouse event
+		if(this.mouseDown){
+			this.mouseDown = false;
+			dojo.dnd.Source.superclass.onMouseUp.call(this, e);
+		}
+	},
+	
+	// topic event processors
+	onDndSourceOver: function(source){
+		// summary:
+		//		topic event processor for /dnd/source/over, called when detected a current source
+		// source: Object
+		//		the source which has the mouse over it
+		if(this != source){
+			this.mouseDown = false;
+			if(this.targetAnchor){
+				this._unmarkTargetAnchor();
+			}
+		}else if(this.isDragging){
+			var m = dojo.dnd.manager();
+			m.canDrop(this.targetState != "Disabled" && (!this.current || m.source != this || !(this.current.id in this.selection)));
+		}
+	},
+	onDndStart: function(source, nodes, copy){
+		// summary:
+		//		topic event processor for /dnd/start, called to initiate the DnD operation
+		// source: Object
+		//		the source which provides items
+		// nodes: Array
+		//		the list of transferred items
+		// copy: Boolean
+		//		copy items, if true, move items otherwise
+		if(this.autoSync){ this.sync(); }
+		if(this.isSource){
+			this._changeState("Source", this == source ? (copy ? "Copied" : "Moved") : "");
+		}
+		var accepted = this.accept && this.checkAcceptance(source, nodes);
+		this._changeState("Target", accepted ? "" : "Disabled");
+		if(this == source){
+			dojo.dnd.manager().overSource(this);
+		}
+		this.isDragging = true;
+	},
+	onDndDrop: function(source, nodes, copy, target){
+		// summary:
+		//		topic event processor for /dnd/drop, called to finish the DnD operation
+		// source: Object
+		//		the source which provides items
+		// nodes: Array
+		//		the list of transferred items
+		// copy: Boolean
+		//		copy items, if true, move items otherwise
+		// target: Object
+		//		the target which accepts items
+		if(this == target){
+			// this one is for us => move nodes!
+			this.onDrop(source, nodes, copy);
+		}
+		this.onDndCancel();
+	},
+	onDndCancel: function(){
+		// summary:
+		//		topic event processor for /dnd/cancel, called to cancel the DnD operation
+		if(this.targetAnchor){
+			this._unmarkTargetAnchor();
+			this.targetAnchor = null;
+		}
+		this.before = true;
+		this.isDragging = false;
+		this.mouseDown = false;
+		this._changeState("Source", "");
+		this._changeState("Target", "");
+	},
+	
+	// local events
+	onDrop: function(source, nodes, copy){
+		// summary:
+		//		called only on the current target, when drop is performed
+		// source: Object
+		//		the source which provides items
+		// nodes: Array
+		//		the list of transferred items
+		// copy: Boolean
+		//		copy items, if true, move items otherwise
+		
+		if(this != source){
+			this.onDropExternal(source, nodes, copy);
+		}else{
+			this.onDropInternal(nodes, copy);
+		}
+	},
+	onDropExternal: function(source, nodes, copy){
+		// summary:
+		//		called only on the current target, when drop is performed
+		//		from an external source
+		// source: Object
+		//		the source which provides items
+		// nodes: Array
+		//		the list of transferred items
+		// copy: Boolean
+		//		copy items, if true, move items otherwise
+		
+		var oldCreator = this._normalizedCreator;
+		// transferring nodes from the source to the target
+		if(this.creator){
+			// use defined creator
+			this._normalizedCreator = function(node, hint){
+				return oldCreator.call(this, source.getItem(node.id).data, hint);
+			};
+		}else{
+			// we have no creator defined => move/clone nodes
+			if(copy){
+				// clone nodes
+				this._normalizedCreator = function(node, hint){
+					var t = source.getItem(node.id);
+					var n = node.cloneNode(true);
+					n.id = dojo.dnd.getUniqueId();
+					return {node: n, data: t.data, type: t.type};
+				};
+			}else{
+				// move nodes
+				this._normalizedCreator = function(node, hint){
+					var t = source.getItem(node.id);
+					source.delItem(node.id);
+					return {node: node, data: t.data, type: t.type};
+				};
+			}
+		}
+		this.selectNone();
+		if(!copy && !this.creator){
+			source.selectNone();
+		}
+		this.insertNodes(true, nodes, this.before, this.current);
+		if(!copy && this.creator){
+			source.deleteSelectedNodes();
+		}
+		this._normalizedCreator = oldCreator;
+	},
+	onDropInternal: function(nodes, copy){
+		// summary:
+		//		called only on the current target, when drop is performed
+		//		from the same target/source
+		// nodes: Array
+		//		the list of transferred items
+		// copy: Boolean
+		//		copy items, if true, move items otherwise
+		
+		var oldCreator = this._normalizedCreator;
+		// transferring nodes within the single source
+		if(this.current && this.current.id in this.selection){
+			// do nothing
+			return;
+		}
+		if(copy){
+			if(this.creator){
+				// create new copies of data items
+				this._normalizedCreator = function(node, hint){
+					return oldCreator.call(this, this.getItem(node.id).data, hint);
+				};
+			}else{
+				// clone nodes
+				this._normalizedCreator = function(node, hint){
+					var t = this.getItem(node.id);
+					var n = node.cloneNode(true);
+					n.id = dojo.dnd.getUniqueId();
+					return {node: n, data: t.data, type: t.type};
+				};
+			}
+		}else{
+			// move nodes
+			if(!this.current){
+				// do nothing
+				return;
+			}
+			this._normalizedCreator = function(node, hint){
+				var t = this.getItem(node.id);
+				return {node: node, data: t.data, type: t.type};
+			};
+		}
+		this._removeSelection();
+		this.insertNodes(true, nodes, this.before, this.current);
+		this._normalizedCreator = oldCreator;
+	},
+	onDraggingOver: function(){
+		// summary:
+		//		called during the active DnD operation, when items
+		//		are dragged over this target, and it is not disabled
+	},
+	onDraggingOut: function(){
+		// summary:
+		//		called during the active DnD operation, when items
+		//		are dragged away from this target, and it is not disabled
+	},
+	
+	// utilities
+	onOverEvent: function(){
+		// summary:
+		//		this function is called once, when mouse is over our container
+		dojo.dnd.Source.superclass.onOverEvent.call(this);
+		dojo.dnd.manager().overSource(this);
+		if(this.isDragging && this.targetState != "Disabled"){
+			this.onDraggingOver();
+		}
+	},
+	onOutEvent: function(){
+		// summary:
+		//		this function is called once, when mouse is out of our container
+		dojo.dnd.Source.superclass.onOutEvent.call(this);
+		dojo.dnd.manager().outSource(this);
+		if(this.isDragging && this.targetState != "Disabled"){
+			this.onDraggingOut();
+		}
+	},
+	_markTargetAnchor: function(before){
+		// summary:
+		//		assigns a class to the current target anchor based on "before" status
+		// before: Boolean
+		//		insert before, if true, after otherwise
+		if(this.current == this.targetAnchor && this.before == before){ return; }
+		if(this.targetAnchor){
+			this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
+		}
+		this.targetAnchor = this.current;
+		this.targetBox = null;
+		this.before = before;
+		if(this.targetAnchor){
+			this._addItemClass(this.targetAnchor, this.before ? "Before" : "After");
+		}
+	},
+	_unmarkTargetAnchor: function(){
+		// summary:
+		//		removes a class of the current target anchor based on "before" status
+		if(!this.targetAnchor){ return; }
+		this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
+		this.targetAnchor = null;
+		this.targetBox = null;
+		this.before = true;
+	},
+	_markDndStatus: function(copy){
+		// summary:
+		//		changes source's state based on "copy" status
+		this._changeState("Source", copy ? "Copied" : "Moved");
+	},
+	_legalMouseDown: function(e){
+		// summary:
+		//		checks if user clicked on "approved" items
+		// e: Event
+		//		mouse event
+		
+		// accept only the left mouse button
+		if(!dojo.mouseButtons.isLeft(e)){ return false; }
+		
+		if(!this.withHandles){ return true; }
+		
+		// check for handles
+		for(var node = e.target; node && node !== this.node; node = node.parentNode){
+			if(dojo.hasClass(node, "dojoDndHandle")){ return true; }
+			if(dojo.hasClass(node, "dojoDndItem") || dojo.hasClass(node, "dojoDndIgnore")){ break; }
+		}
+		return false;	// Boolean
+	}
+});
+
+dojo.declare("dojo.dnd.Target", dojo.dnd.Source, {
+	// summary: a Target object, which can be used as a DnD target
+	
+	constructor: function(node, params){
+		// summary:
+		//		a constructor of the Target --- see the `dojo.dnd.Source.constructor` for details
+		this.isSource = false;
+		dojo.removeClass(this.node, "dojoDndSource");
+	},
+
+	// markup methods
+	markupFactory: function(params, node){
+		params._skipStartup = true;
+		return new dojo.dnd.Target(node, params);
+	}
+});
+
+dojo.declare("dojo.dnd.AutoSource", dojo.dnd.Source, {
+	// summary:
+	//		a source that syncs its DnD nodes by default
+	
+	constructor: function(node, params){
+		// summary:
+		//		constructor of the AutoSource --- see the Source constructor for details
+		this.autoSync = true;
+	},
+
+	// markup methods
+	markupFactory: function(params, node){
+		params._skipStartup = true;
+		return new dojo.dnd.AutoSource(node, params);
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._View"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._View"] = true;
+dojo.provide("dojox.grid._View");
+
+
+
+
+
+
+
+
+
+
+(function(){
+	// private
+	var getStyleText = function(inNode, inStyleText){
+		return inNode.style.cssText == undefined ? inNode.getAttribute("style") : inNode.style.cssText;
+	};
+
+	// public
+	dojo.declare('dojox.grid._View', [dijit._Widget, dijit._Templated], {
+		// summary:
+		//		A collection of grid columns. A grid is comprised of a set of views that stack horizontally.
+		//		Grid creates views automatically based on grid's layout structure.
+		//		Users should typically not need to access individual views directly.
+		//
+		// defaultWidth: String
+		//		Default width of the view
+		defaultWidth: "18em",
+
+		// viewWidth: String
+		// 		Width for the view, in valid css unit
+		viewWidth: "",
+
+		templateString:"<div class=\"dojoxGridView\" wairole=\"presentation\">\n\t<div class=\"dojoxGridHeader\" dojoAttachPoint=\"headerNode\" wairole=\"presentation\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\" wairole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\" wairole=\"row\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" dojoAttachPoint=\"hiddenFocusNode\" wairole=\"presentation\" />\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" wairole=\"presentation\" />\n\t<div class=\"dojoxGridScrollbox\" dojoAttachPoint=\"scrollboxNode\" wairole=\"presentation\">\n\t\t<div class=\"dojoxGridContent\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\" wairole=\"presentation\"></div>\n\t</div>\n</div>\n",
+		
+		themeable: false,
+		classTag: 'dojoxGrid',
+		marginBottom: 0,
+		rowPad: 2,
+
+		// _togglingColumn: int
+		//		Width of the column being toggled (-1 for none)
+		_togglingColumn: -1,
+		
+		// _headerBuilderClass: Object
+		//		The class to use for our header builder
+		_headerBuilderClass: dojox.grid._HeaderBuilder,
+		
+		// _contentBuilderClass: Object
+		//		The class to use for our content builder
+		_contentBuilderClass: dojox.grid._ContentBuilder,
+		
+		postMixInProperties: function(){
+			this.rowNodes = {};
+		},
+
+		postCreate: function(){
+			this.connect(this.scrollboxNode,"onscroll","doscroll");
+			dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]);
+			dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]);
+			this.content = new this._contentBuilderClass(this);
+			this.header = new this._headerBuilderClass(this);
+			//BiDi: in RTL case, style width='9000em' causes scrolling problem in head node
+			if(!dojo._isBodyLtr()){
+				this.headerNodeContainer.style.width = "";
+			}
+		},
+
+		destroy: function(){
+			dojo.destroy(this.headerNode);
+			delete this.headerNode;
+			for(var i in this.rowNodes){
+				dojo.destroy(this.rowNodes[i]);
+			}
+			this.rowNodes = {};
+			if(this.source){
+				this.source.destroy();
+			}
+			this.inherited(arguments);
+		},
+
+		// focus 
+		focus: function(){
+			if(dojo.isIE || dojo.isWebKit || dojo.isOpera){
+				this.hiddenFocusNode.focus();
+			}else{
+				this.scrollboxNode.focus();
+			}
+		},
+
+		setStructure: function(inStructure){
+			var vs = (this.structure = inStructure);
+			// FIXME: similar logic is duplicated in layout
+			if(vs.width && !isNaN(vs.width)){
+				this.viewWidth = vs.width + 'em';
+			}else{
+				this.viewWidth = vs.width || (vs.noscroll ? 'auto' : this.viewWidth); //|| this.defaultWidth;
+			}
+			this._onBeforeRow = vs.onBeforeRow||function(){};
+			this._onAfterRow = vs.onAfterRow||function(){};
+			this.noscroll = vs.noscroll;
+			if(this.noscroll){
+				this.scrollboxNode.style.overflow = "hidden";
+			}
+			this.simpleStructure = Boolean(vs.cells.length == 1);
+			// bookkeeping
+			this.testFlexCells();
+			// accomodate new structure
+			this.updateStructure();
+		},
+		
+		_cleanupRowWidgets: function(inRowNode){
+			// Summary:
+			//		Cleans up the widgets for the given row node so that
+			//		we can reattach them if needed
+			if(inRowNode){
+				dojo.forEach(dojo.query("[widgetId]", inRowNode).map(dijit.byNode), function(w){
+					if(w._destroyOnRemove){
+						w.destroy();
+						delete w;
+					}else if(w.domNode && w.domNode.parentNode){
+						w.domNode.parentNode.removeChild(w.domNode);
+					}
+				});
+			}
+		},
+		
+		onBeforeRow: function(inRowIndex, cells){
+			this._onBeforeRow(inRowIndex, cells);
+			if(inRowIndex >= 0){
+				this._cleanupRowWidgets(this.getRowNode(inRowIndex));
+			}
+		},
+		
+		onAfterRow: function(inRowIndex, cells, inRowNode){
+			this._onAfterRow(inRowIndex, cells, inRowNode);
+			var g = this.grid;
+			dojo.forEach(dojo.query(".dojoxGridStubNode", inRowNode), function(n){
+				if(n && n.parentNode){
+					var lw = n.getAttribute("linkWidget");
+					var cellIdx = window.parseInt(dojo.attr(n, "cellIdx"), 10);
+					var cellDef = g.getCell(cellIdx);
+					var w = dijit.byId(lw);
+					if(w){
+						n.parentNode.replaceChild(w.domNode, n);
+						if(!w._started){
+							w.startup();
+						}
+					}else{
+						n.innerHTML = "";
+					}
+				}
+			}, this);
+		},
+
+		testFlexCells: function(){
+			// FIXME: cheater, this function does double duty as initializer and tester
+			this.flexCells = false;
+			for(var j=0, row; (row=this.structure.cells[j]); j++){
+				for(var i=0, cell; (cell=row[i]); i++){
+					cell.view = this;
+					this.flexCells = this.flexCells || cell.isFlex();
+				}
+			}
+			return this.flexCells;
+		},
+
+		updateStructure: function(){
+			// header builder needs to update table map
+			this.header.update();
+			// content builder needs to update markup cache
+			this.content.update();
+		},
+
+		getScrollbarWidth: function(){
+			var hasScrollSpace = this.hasVScrollbar();
+			var overflow = dojo.style(this.scrollboxNode, "overflow");
+			if(this.noscroll || !overflow || overflow == "hidden"){
+				hasScrollSpace = false;
+			}else if(overflow == "scroll"){
+				hasScrollSpace = true;
+			}
+			return (hasScrollSpace ? dojox.html.metrics.getScrollbar().w : 0); // Integer
+		},
+
+		getColumnsWidth: function(){
+			var h = this.headerContentNode;
+			return h && h.firstChild ? h.firstChild.offsetWidth : 0; // Integer
+		},
+
+		setColumnsWidth: function(width){
+			this.headerContentNode.firstChild.style.width = width + 'px';
+			if(this.viewWidth){
+				this.viewWidth = width + 'px';
+			}
+		},
+
+		getWidth: function(){
+			return this.viewWidth || (this.getColumnsWidth()+this.getScrollbarWidth()) +'px'; // String
+		},
+
+		getContentWidth: function(){
+			return Math.max(0, dojo._getContentBox(this.domNode).w - this.getScrollbarWidth()) + 'px'; // String
+		},
+
+		render: function(){
+			this.scrollboxNode.style.height = '';
+			this.renderHeader();
+			if(this._togglingColumn >= 0){
+				this.setColumnsWidth(this.getColumnsWidth() - this._togglingColumn);
+				this._togglingColumn = -1;
+			}
+			var cells = this.grid.layout.cells;
+			var getSibling = dojo.hitch(this, function(node, before){
+				!dojo._isBodyLtr() && (before = !before);
+				var inc = before?-1:1;
+				var idx = this.header.getCellNodeIndex(node) + inc;
+				var cell = cells[idx];
+				while(cell && cell.getHeaderNode() && cell.getHeaderNode().style.display == "none"){
+					idx += inc;
+					cell = cells[idx];
+				}
+				if(cell){
+					return cell.getHeaderNode();
+				}
+				return null;
+			});
+			if(this.grid.columnReordering && this.simpleStructure){
+				if(this.source){
+					this.source.destroy();
+				}
+				
+				// Create the top and bottom markers
+				var bottomMarkerId = "dojoxGrid_bottomMarker";
+				var topMarkerId = "dojoxGrid_topMarker";
+				if(this.bottomMarker){
+					dojo.destroy(this.bottomMarker);
+				}
+				this.bottomMarker = dojo.byId(bottomMarkerId);
+				if(this.topMarker){
+					dojo.destroy(this.topMarker);
+				}
+				this.topMarker = dojo.byId(topMarkerId);
+				if (!this.bottomMarker) {
+					this.bottomMarker = dojo.create("div", {
+						"id": bottomMarkerId,
+						"class": "dojoxGridColPlaceBottom"
+					}, dojo.body());
+					this._hide(this.bottomMarker);
+
+					
+					this.topMarker = dojo.create("div", {
+						"id": topMarkerId,
+						"class": "dojoxGridColPlaceTop"
+					}, dojo.body());
+					this._hide(this.topMarker);
+				}
+				this.arrowDim = dojo.contentBox(this.bottomMarker);
+
+				var headerHeight = dojo.contentBox(this.headerContentNode.firstChild.rows[0]).h;
+				
+				this.source = new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0], {
+					horizontal: true,
+					accept: [ "gridColumn_" + this.grid.id ],
+					viewIndex: this.index,
+					generateText: false,
+					onMouseDown: dojo.hitch(this, function(e){
+						this.header.decorateEvent(e);
+						if((this.header.overRightResizeArea(e) || this.header.overLeftResizeArea(e)) &&
+							this.header.canResize(e) && !this.header.moveable){
+							this.header.beginColumnResize(e);
+						}else{
+							if(this.grid.headerMenu){
+								this.grid.headerMenu.onCancel(true);
+							}
+							// IE reports a left click as 1, where everything else reports 0
+							if(e.button === (dojo.isIE ? 1 : 0)){
+								dojo.dnd.Source.prototype.onMouseDown.call(this.source, e);
+							}
+						}
+					}),
+					onMouseOver: dojo.hitch(this, function(e){
+						var src = this.source;
+						if(src._getChildByEvent(e)){
+							dojo.dnd.Source.prototype.onMouseOver.apply(src, arguments);
+						}
+					}),
+					_markTargetAnchor: dojo.hitch(this, function(before){
+						var src = this.source;
+						if(src.current == src.targetAnchor && src.before == before){ return; }
+						if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){
+							src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before");
+						}
+						dojo.dnd.Source.prototype._markTargetAnchor.call(src, before);
+						
+						var target = before ? src.targetAnchor : getSibling(src.targetAnchor, src.before);
+						var endAdd = 0;
+
+						if (!target) {
+							target = src.targetAnchor;
+							endAdd = dojo.contentBox(target).w + this.arrowDim.w/2 + 2;
+						}
+
+						// NOTE: this is for backwards compatibility with Dojo 1.3
+						var pos = (dojo.position||dojo._abs)(target, true);
+						var left = Math.floor(pos.x - this.arrowDim.w/2 + endAdd);
+
+						dojo.style(this.bottomMarker, "visibility", "visible");
+						dojo.style(this.topMarker, "visibility", "visible");
+						dojo.style(this.bottomMarker, {
+							"left": left + "px",
+							"top" : (headerHeight + pos.y) + "px"
+						});
+
+						dojo.style(this.topMarker, {
+							"left": left + "px",
+							"top" : (pos.y - this.arrowDim.h) + "px"
+						});
+
+						if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){
+							src._addItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before");
+						}
+					}),
+					_unmarkTargetAnchor: dojo.hitch(this, function(){
+						var src = this.source;
+						if(!src.targetAnchor){ return; }
+						if(src.targetAnchor && getSibling(src.targetAnchor, src.before)){
+							src._removeItemClass(getSibling(src.targetAnchor, src.before), src.before ? "After" : "Before");
+						}
+						this._hide(this.bottomMarker);
+						this._hide(this.topMarker);
+						dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src);
+					}),
+					destroy: dojo.hitch(this, function(){
+						dojo.disconnect(this._source_conn);
+						dojo.unsubscribe(this._source_sub);
+						dojo.dnd.Source.prototype.destroy.call(this.source);
+						if(this.bottomMarker){
+							dojo.destroy(this.bottomMarker);
+							delete this.bottomMarker;
+						}
+						if(this.topMarker){
+							dojo.destroy(this.topMarker);
+							delete this.topMarker;
+						}
+					}),
+					onDndCancel: dojo.hitch(this, function(){
+						dojo.dnd.Source.prototype.onDndCancel.call(this.source);
+						this._hide(this.bottomMarker);
+						this._hide(this.topMarker);
+					})
+				});
+
+				this._source_conn = dojo.connect(this.source, "onDndDrop", this, "_onDndDrop");
+				this._source_sub = dojo.subscribe("/dnd/drop/before", this, "_onDndDropBefore");
+				this.source.startup();
+			}
+		},
+		
+		_hide: function(node){
+			dojo.style(node, {
+				left: "-10000px",
+				top: "-10000px",
+				"visibility": "hidden"
+			});
+		},
+
+		_onDndDropBefore: function(source, nodes, copy){
+			if(dojo.dnd.manager().target !== this.source){
+				return;
+			}
+			this.source._targetNode = this.source.targetAnchor;
+			this.source._beforeTarget = this.source.before;
+			var views = this.grid.views.views;
+			var srcView = views[source.viewIndex];
+			var tgtView = views[this.index];
+			if(tgtView != srcView){
+				srcView.convertColPctToFixed();
+				tgtView.convertColPctToFixed();
+			}
+		},
+
+		_onDndDrop: function(source, nodes, copy){
+			if(dojo.dnd.manager().target !== this.source){
+				if(dojo.dnd.manager().source === this.source){
+					this._removingColumn = true;
+				}
+				return;
+			}
+			this._hide(this.bottomMarker);
+			this._hide(this.topMarker);
+
+			var getIdx = function(n){
+				return n ? dojo.attr(n, "idx") : null;
+			};
+			var w = dojo.marginBox(nodes[0]).w;
+			if(source.viewIndex !== this.index){
+				var views = this.grid.views.views;
+				var srcView = views[source.viewIndex];
+				var tgtView = views[this.index];
+				if(srcView.viewWidth && srcView.viewWidth != "auto"){
+					srcView.setColumnsWidth(srcView.getColumnsWidth() - w);
+				}
+				if(tgtView.viewWidth && tgtView.viewWidth != "auto"){
+					tgtView.setColumnsWidth(tgtView.getColumnsWidth());
+				}
+			}
+			var stn = this.source._targetNode;
+			var stb = this.source._beforeTarget;
+			!dojo._isBodyLtr() && (stb = !stb);
+			var layout = this.grid.layout;
+			var idx = this.index;
+			delete this.source._targetNode;
+			delete this.source._beforeTarget;
+			
+			layout.moveColumn(
+				source.viewIndex,
+				idx,
+				getIdx(nodes[0]),
+				getIdx(stn),
+				stb);
+		},
+
+		renderHeader: function(){
+			this.headerContentNode.innerHTML = this.header.generateHtml(this._getHeaderContent);
+			if(this.flexCells){
+				this.contentWidth = this.getContentWidth();
+				this.headerContentNode.firstChild.style.width = this.contentWidth;
+			}
+			dojox.grid.util.fire(this, "onAfterRow", [-1, this.structure.cells, this.headerContentNode]);
+		},
+
+		// note: not called in 'view' context
+		_getHeaderContent: function(inCell){
+			var n = inCell.name || inCell.grid.getCellName(inCell);
+			var ret = [ '<div class="dojoxGridSortNode' ];
+			
+			if(inCell.index != inCell.grid.getSortIndex()){
+				ret.push('">');
+			}else{
+				ret = ret.concat([ ' ',
+							inCell.grid.sortInfo > 0 ? 'dojoxGridSortUp' : 'dojoxGridSortDown',
+							'"><div class="dojoxGridArrowButtonChar">',
+							inCell.grid.sortInfo > 0 ? '&#9650;' : '&#9660;',
+							'</div><div class="dojoxGridArrowButtonNode" role="presentation"></div>',
+							'<div class="dojoxGridColCaption">']);
+			}
+			ret = ret.concat([n, '</div></div>']);
+			return ret.join('');
+		},
+
+		resize: function(){
+			this.adaptHeight();
+			this.adaptWidth();
+		},
+
+		hasHScrollbar: function(reset){
+			var hadScroll = this._hasHScroll||false;
+			if(this._hasHScroll == undefined || reset){
+				if(this.noscroll){
+					this._hasHScroll = false;
+				}else{
+					var style = dojo.style(this.scrollboxNode, "overflow");
+					if(style == "hidden"){
+						this._hasHScroll = false;
+					}else if(style == "scroll"){
+						this._hasHScroll = true;
+					}else{
+						this._hasHScroll = (this.scrollboxNode.offsetWidth - this.getScrollbarWidth() < this.contentNode.offsetWidth );
+					}
+				}
+			}
+			if(hadScroll !== this._hasHScroll){
+				this.grid.update();
+			}
+			return this._hasHScroll; // Boolean
+		},
+
+		hasVScrollbar: function(reset){
+			var hadScroll = this._hasVScroll||false;
+			if(this._hasVScroll == undefined || reset){
+				if(this.noscroll){
+					this._hasVScroll = false;
+				}else{
+					var style = dojo.style(this.scrollboxNode, "overflow");
+					if(style == "hidden"){
+						this._hasVScroll = false;
+					}else if(style == "scroll"){
+						this._hasVScroll = true;
+					}else{
+						this._hasVScroll = (this.scrollboxNode.scrollHeight > this.scrollboxNode.clientHeight);
+					}
+				}
+			}
+			if(hadScroll !== this._hasVScroll){
+				this.grid.update();
+			}
+			return this._hasVScroll; // Boolean
+		},
+		
+		convertColPctToFixed: function(){
+			// Fix any percentage widths to be pixel values
+			var hasPct = false;
+			this.grid.initialWidth = "";
+			var cellNodes = dojo.query("th", this.headerContentNode);
+			var fixedWidths = dojo.map(cellNodes, function(c, vIdx){
+				var w = c.style.width;
+				dojo.attr(c, "vIdx", vIdx);
+				if(w && w.slice(-1) == "%"){
+					hasPct = true;
+				}else if(w && w.slice(-2) == "px"){
+					return window.parseInt(w, 10);
+				}
+				return dojo.contentBox(c).w;
+			});
+			if(hasPct){
+				dojo.forEach(this.grid.layout.cells, function(cell, idx){
+					if(cell.view == this){
+						var cellNode = cell.view.getHeaderCellNode(cell.index);
+						if(cellNode && dojo.hasAttr(cellNode, "vIdx")){
+							var vIdx = window.parseInt(dojo.attr(cellNode, "vIdx"));
+							this.setColWidth(idx, fixedWidths[vIdx]);
+							dojo.removeAttr(cellNode, "vIdx");
+						}
+					}
+				}, this);
+				return true;
+			}
+			return false;
+		},
+
+		adaptHeight: function(minusScroll){
+			if(!this.grid._autoHeight){
+				var h = (this.domNode.style.height && parseInt(this.domNode.style.height.replace(/px/,''), 10)) || this.domNode.clientHeight;
+				var self = this;
+				var checkOtherViewScrollers = function(){
+					var v;
+					for(var i in self.grid.views.views){
+						v = self.grid.views.views[i];
+						if(v !== self && v.hasHScrollbar()){
+							return true;
+						}
+					}
+					return false;
+				};
+				if(minusScroll || (this.noscroll && checkOtherViewScrollers())){
+					h -= dojox.html.metrics.getScrollbar().h;
+				}
+				dojox.grid.util.setStyleHeightPx(this.scrollboxNode, h);
+			}
+			this.hasVScrollbar(true);
+		},
+
+		adaptWidth: function(){
+			if(this.flexCells){
+				// the view content width
+				this.contentWidth = this.getContentWidth();
+				this.headerContentNode.firstChild.style.width = this.contentWidth;
+			}
+			// FIXME: it should be easier to get w from this.scrollboxNode.clientWidth, 
+			// but clientWidth seemingly does not include scrollbar width in some cases
+			var w = this.scrollboxNode.offsetWidth - this.getScrollbarWidth();
+			if(!this._removingColumn){
+				w = Math.max(w, this.getColumnsWidth()) + 'px';
+			}else{
+				w = Math.min(w, this.getColumnsWidth()) + 'px';
+				this._removingColumn = false;
+			}
+			var cn = this.contentNode;
+			cn.style.width = w;
+			this.hasHScrollbar(true);
+		},
+
+		setSize: function(w, h){
+			var ds = this.domNode.style;
+			var hs = this.headerNode.style;
+
+			if(w){
+				ds.width = w;
+				hs.width = w;
+			}
+			ds.height = (h >= 0 ? h + 'px' : '');
+		},
+
+		renderRow: function(inRowIndex){
+			var rowNode = this.createRowNode(inRowIndex);
+			this.buildRow(inRowIndex, rowNode);
+			this.grid.edit.restore(this, inRowIndex);
+			return rowNode;
+		},
+
+		createRowNode: function(inRowIndex){
+			var node = document.createElement("div");
+			node.className = this.classTag + 'Row';
+			if (this instanceof dojox.grid._RowSelector){
+				dojo.attr(node,"role","presentation");
+			}else{
+				dojo.attr(node,"role","row");
+				if (this.grid.selectionMode != "none") {
+					dojo.attr(node, "aria-selected", "false"); //rows can be selected so add aria-selected prop
+				}
+			}
+			node[dojox.grid.util.gridViewTag] = this.id;
+			node[dojox.grid.util.rowIndexTag] = inRowIndex;
+			this.rowNodes[inRowIndex] = node;
+			return node;
+		},
+
+		buildRow: function(inRowIndex, inRowNode){
+			
+			this.buildRowContent(inRowIndex, inRowNode);
+		  	
+			this.styleRow(inRowIndex, inRowNode);
+		  
+		 
+		},
+
+		buildRowContent: function(inRowIndex, inRowNode){
+			inRowNode.innerHTML = this.content.generateHtml(inRowIndex, inRowIndex); 
+			if(this.flexCells && this.contentWidth){
+				// FIXME: accessing firstChild here breaks encapsulation
+				inRowNode.firstChild.style.width = this.contentWidth;
+			}
+			dojox.grid.util.fire(this, "onAfterRow", [inRowIndex, this.structure.cells, inRowNode]);
+		},
+
+		rowRemoved:function(inRowIndex){
+			if(inRowIndex >= 0){
+				this._cleanupRowWidgets(this.getRowNode(inRowIndex));
+			}
+			this.grid.edit.save(this, inRowIndex);
+			delete this.rowNodes[inRowIndex];
+		},
+
+		getRowNode: function(inRowIndex){
+			return this.rowNodes[inRowIndex];
+		},
+
+		getCellNode: function(inRowIndex, inCellIndex){
+			var row = this.getRowNode(inRowIndex);
+			if(row){
+				return this.content.getCellNode(row, inCellIndex);
+			}
+		},
+
+		getHeaderCellNode: function(inCellIndex){
+			if(this.headerContentNode){
+				return this.header.getCellNode(this.headerContentNode, inCellIndex);
+			}
+		},
+
+		// styling
+		styleRow: function(inRowIndex, inRowNode){
+			inRowNode._style = getStyleText(inRowNode);
+			this.styleRowNode(inRowIndex, inRowNode);
+		},
+
+		styleRowNode: function(inRowIndex, inRowNode){
+			if(inRowNode){
+				this.doStyleRowNode(inRowIndex, inRowNode);
+			}
+		},
+
+		doStyleRowNode: function(inRowIndex, inRowNode){
+			this.grid.styleRowNode(inRowIndex, inRowNode);
+		},
+
+		// updating
+		updateRow: function(inRowIndex){
+			var rowNode = this.getRowNode(inRowIndex);
+			if(rowNode){
+				rowNode.style.height = '';
+				this.buildRow(inRowIndex, rowNode);
+			}
+			return rowNode;
+		},
+
+		updateRowStyles: function(inRowIndex){
+			this.styleRowNode(inRowIndex, this.getRowNode(inRowIndex));
+		},
+
+		// scrolling
+		lastTop: 0,
+		firstScroll:0,
+
+		doscroll: function(inEvent){
+			//var s = dojo.marginBox(this.headerContentNode.firstChild);
+			var isLtr = dojo._isBodyLtr();
+			if(this.firstScroll < 2){
+				if((!isLtr && this.firstScroll == 1) || (isLtr && this.firstScroll === 0)){
+					var s = dojo.marginBox(this.headerNodeContainer);
+					if(dojo.isIE){
+						this.headerNodeContainer.style.width = s.w + this.getScrollbarWidth() + 'px';
+					}else if(dojo.isMoz){
+						//TODO currently only for FF, not sure for safari and opera
+						this.headerNodeContainer.style.width = s.w - this.getScrollbarWidth() + 'px';
+						//this.headerNodeContainer.style.width = s.w + 'px';
+						//set scroll to right in FF
+						this.scrollboxNode.scrollLeft = isLtr ?
+							this.scrollboxNode.clientWidth - this.scrollboxNode.scrollWidth :
+							this.scrollboxNode.scrollWidth - this.scrollboxNode.clientWidth;
+					}
+				}
+				this.firstScroll++;
+			}
+			this.headerNode.scrollLeft = this.scrollboxNode.scrollLeft;
+			// 'lastTop' is a semaphore to prevent feedback-loop with setScrollTop below
+			var top = this.scrollboxNode.scrollTop;
+			if(top !== this.lastTop){
+				this.grid.scrollTo(top);
+			}
+		},
+
+		setScrollTop: function(inTop){
+			// 'lastTop' is a semaphore to prevent feedback-loop with doScroll above
+			this.lastTop = inTop;
+			this.scrollboxNode.scrollTop = inTop;
+			return this.scrollboxNode.scrollTop;
+		},
+
+		// event handlers (direct from DOM)
+		doContentEvent: function(e){
+			if(this.content.decorateEvent(e)){
+				this.grid.onContentEvent(e);
+			}
+		},
+
+		doHeaderEvent: function(e){
+			if(this.header.decorateEvent(e)){
+				this.grid.onHeaderEvent(e);
+			}
+		},
+
+		// event dispatch(from Grid)
+		dispatchContentEvent: function(e){
+			return this.content.dispatchEvent(e);
+		},
+
+		dispatchHeaderEvent: function(e){
+			return this.header.dispatchEvent(e);
+		},
+
+		// column resizing
+		setColWidth: function(inIndex, inWidth){
+			this.grid.setCellWidth(inIndex, inWidth + 'px');
+		},
+
+		update: function(){
+			if(!this.domNode){
+				return;
+			}
+			this.content.update();
+			this.grid.update();
+			//get scroll after update or scroll left setting goes wrong on IE.
+			//See trac: #8040
+			var left = this.scrollboxNode.scrollLeft;
+			this.scrollboxNode.scrollLeft = left;
+			this.headerNode.scrollLeft = left;
+		}
+	});
+
+	dojo.declare("dojox.grid._GridAvatar", dojo.dnd.Avatar, {
+		construct: function(){
+			var dd = dojo.doc;
+
+			var a = dd.createElement("table");
+			a.cellPadding = a.cellSpacing = "0";
+			a.className = "dojoxGridDndAvatar";
+			a.style.position = "absolute";
+			a.style.zIndex = 1999;
+			a.style.margin = "0px"; // to avoid dojo.marginBox() problems with table's margins
+			var b = dd.createElement("tbody");
+			var tr = dd.createElement("tr");
+			var td = dd.createElement("td");
+			var img = dd.createElement("td");
+			tr.className = "dojoxGridDndAvatarItem";
+			img.className = "dojoxGridDndAvatarItemImage";
+			img.style.width = "16px";
+			var source = this.manager.source, node;
+			if(source.creator){
+				// create an avatar representation of the node
+				node = source._normalizedCreator(source.getItem(this.manager.nodes[0].id).data, "avatar").node;
+			}else{
+				// or just clone the node and hope it works
+				node = this.manager.nodes[0].cloneNode(true);
+				var table, tbody;
+				if(node.tagName.toLowerCase() == "tr"){
+					// insert extra table nodes
+					table = dd.createElement("table");
+					tbody = dd.createElement("tbody");
+					tbody.appendChild(node);
+					table.appendChild(tbody);
+					node = table;
+				}else if(node.tagName.toLowerCase() == "th"){
+					// insert extra table nodes
+					table = dd.createElement("table");
+					tbody = dd.createElement("tbody");
+					var r = dd.createElement("tr");
+					table.cellPadding = table.cellSpacing = "0";
+					r.appendChild(node);
+					tbody.appendChild(r);
+					table.appendChild(tbody);
+					node = table;
+				}
+			}
+			node.id = "";
+			td.appendChild(node);
+			tr.appendChild(img);
+			tr.appendChild(td);
+			dojo.style(tr, "opacity", 0.9);
+			b.appendChild(tr);
+
+			a.appendChild(b);
+			this.node = a;
+
+			var m = dojo.dnd.manager();
+			this.oldOffsetY = m.OFFSET_Y;
+			m.OFFSET_Y = 1;
+		},
+		destroy: function(){
+			dojo.dnd.manager().OFFSET_Y = this.oldOffsetY;
+			this.inherited(arguments);
+		}
+	});
+
+	var oldMakeAvatar = dojo.dnd.manager().makeAvatar;
+	dojo.dnd.manager().makeAvatar = function(){
+		var src = this.source;
+		if(src.viewIndex !== undefined && !dojo.hasClass(dojo.body(),"dijit_a11y")){
+			return new dojox.grid._GridAvatar(this);
+		}
+		return oldMakeAvatar.call(dojo.dnd.manager());
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid._RowSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._RowSelector"] = true;
+dojo.provide("dojox.grid._RowSelector");
+
+
+dojo.declare('dojox.grid._RowSelector', dojox.grid._View, {
+	// summary:
+	//	Custom grid view. If used in a grid structure, provides a small selectable region for grid rows.
+	defaultWidth: "2em",
+	noscroll: true,
+	padBorderWidth: 2,
+	buildRendering: function(){
+		this.inherited('buildRendering', arguments);
+		this.scrollboxNode.style.overflow = "hidden";
+		this.headerNode.style.visibility = "hidden";
+	},	
+	getWidth: function(){
+		return this.viewWidth || this.defaultWidth;
+	},
+	buildRowContent: function(inRowIndex, inRowNode){
+		var w = this.contentWidth || 0;
+		inRowNode.innerHTML = '<table class="dojoxGridRowbarTable" style="width:' + w + 'px;height:1px;" border="0" cellspacing="0" cellpadding="0" role="presentation"><tr><td class="dojoxGridRowbarInner">&nbsp;</td></tr></table>';
+	},
+	renderHeader: function(){
+	},
+	updateRow: function(){
+	},
+	resize: function(){
+		this.adaptHeight();
+	},
+	adaptWidth: function(){
+		// Only calculate this here - rather than every call to buildRowContent
+		if(!("contentWidth" in this) && this.contentNode){
+			this.contentWidth = this.contentNode.offsetWidth - this.padBorderWidth;
+		}
+	},
+	// styling
+	doStyleRowNode: function(inRowIndex, inRowNode){
+		var n = [ "dojoxGridRowbar dojoxGridNonNormalizedCell" ];
+		if(this.grid.rows.isOver(inRowIndex)){
+			n.push("dojoxGridRowbarOver");
+		}
+		if(this.grid.selection.isSelected(inRowIndex)){
+			n.push("dojoxGridRowbarSelected");
+		}
+		inRowNode.className = n.join(" ");
+	},
+	// event handlers
+	domouseover: function(e){
+		this.grid.onMouseOverRow(e);
+	},
+	domouseout: function(e){
+		if(!this.isIntraRowEvent(e)){
+			this.grid.onMouseOutRow(e);
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._Layout"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Layout"] = true;
+dojo.provide("dojox.grid._Layout");
+
+
+
+dojo.declare("dojox.grid._Layout", null, {
+	// summary:
+	//	Controls grid cell layout. Owned by grid and used internally.
+	constructor: function(inGrid){
+		this.grid = inGrid;
+	},
+	// flat array of grid cells
+	cells: [],
+	// structured array of grid cells
+	structure: null,
+	// default cell width
+	defaultWidth: '6em',
+
+	// methods
+	moveColumn: function(sourceViewIndex, destViewIndex, cellIndex, targetIndex, before){
+		var source_cells = this.structure[sourceViewIndex].cells[0];
+		var dest_cells = this.structure[destViewIndex].cells[0];
+
+		var cell = null;
+		var cell_ri = 0;
+		var target_ri = 0;
+
+		for(var i=0, c; c=source_cells[i]; i++){
+			if(c.index == cellIndex){
+				cell_ri = i;
+				break;
+			}
+		}
+		cell = source_cells.splice(cell_ri, 1)[0];
+		cell.view = this.grid.views.views[destViewIndex];
+
+		for(i=0, c=null; c=dest_cells[i]; i++){
+			if(c.index == targetIndex){
+				target_ri = i;
+				break;
+			}
+		}
+		if(!before){
+			target_ri += 1;
+		}
+		dest_cells.splice(target_ri, 0, cell);
+
+		var sortedCell = this.grid.getCell(this.grid.getSortIndex());
+		if(sortedCell){
+			sortedCell._currentlySorted = this.grid.getSortAsc();
+		}
+
+		this.cells = [];
+		cellIndex = 0;
+		var v;
+		for(i=0; v=this.structure[i]; i++){
+			for(var j=0, cs; cs=v.cells[j]; j++){
+				for(var k=0; c=cs[k]; k++){
+					c.index = cellIndex;
+					this.cells.push(c);
+					if("_currentlySorted" in c){
+						var si = cellIndex + 1;
+						si *= c._currentlySorted ? 1 : -1;
+						this.grid.sortInfo = si;
+						delete c._currentlySorted;
+					}
+					cellIndex++;
+				}
+			}
+		}
+		this.grid.setupHeaderMenu();
+		//this.grid.renderOnIdle();
+	},
+
+	setColumnVisibility: function(columnIndex, visible){
+		var cell = this.cells[columnIndex];
+		if(cell.hidden == visible){
+			cell.hidden = !visible;
+			var v = cell.view, w = v.viewWidth;
+			if(w && w != "auto"){
+				v._togglingColumn = dojo.marginBox(cell.getHeaderNode()).w || 0;
+			}
+			v.update();
+			return true;
+		}else{
+			return false;
+		}
+	},
+	
+	addCellDef: function(inRowIndex, inCellIndex, inDef){
+		var self = this;
+		var getCellWidth = function(inDef){
+			var w = 0;
+			if(inDef.colSpan > 1){
+				w = 0;
+			}else{
+				w = inDef.width || self._defaultCellProps.width || self.defaultWidth;
+
+				if(!isNaN(w)){
+					w = w + "em";
+				}
+			}
+			return w;
+		};
+
+		var props = {
+			grid: this.grid,
+			subrow: inRowIndex,
+			layoutIndex: inCellIndex,
+			index: this.cells.length
+		};
+
+		if(inDef && inDef instanceof dojox.grid.cells._Base){
+			var new_cell = dojo.clone(inDef);
+			props.unitWidth = getCellWidth(new_cell._props);
+			new_cell = dojo.mixin(new_cell, this._defaultCellProps, inDef._props, props);
+			return new_cell;
+		}
+
+		var cell_type = inDef.type || this._defaultCellProps.type || dojox.grid.cells.Cell;
+
+		props.unitWidth = getCellWidth(inDef);
+		return new cell_type(dojo.mixin({}, this._defaultCellProps, inDef, props));	
+	},
+	
+	addRowDef: function(inRowIndex, inDef){
+		var result = [];
+		var relSum = 0, pctSum = 0, doRel = true;
+		for(var i=0, def, cell; (def=inDef[i]); i++){
+			cell = this.addCellDef(inRowIndex, i, def);
+			result.push(cell);
+			this.cells.push(cell);
+			// Check and calculate the sum of all relative widths
+			if(doRel && cell.relWidth){
+				relSum += cell.relWidth;
+			}else if(cell.width){
+				var w = cell.width;
+				if(typeof w == "string" && w.slice(-1) == "%"){
+					pctSum += window.parseInt(w, 10);
+				}else if(w == "auto"){
+					// relative widths doesn't play nice with auto - since we
+					// don't have a way of knowing how much space the auto is 
+					// supposed to take up.
+					doRel = false;
+				}
+			}
+		}
+		if(relSum && doRel){
+			// We have some kind of relWidths specified - so change them to %
+			dojo.forEach(result, function(cell){
+				if(cell.relWidth){
+					cell.width = cell.unitWidth = ((cell.relWidth / relSum) * (100 - pctSum)) + "%";
+				}
+			});
+		}
+		return result;
+	
+	},
+
+	addRowsDef: function(inDef){
+		var result = [];
+		if(dojo.isArray(inDef)){
+			if(dojo.isArray(inDef[0])){
+				for(var i=0, row; inDef && (row=inDef[i]); i++){
+					result.push(this.addRowDef(i, row));
+				}
+			}else{
+				result.push(this.addRowDef(0, inDef));
+			}
+		}
+		return result;	
+	},
+	
+	addViewDef: function(inDef){
+		this._defaultCellProps = inDef.defaultCell || {};
+		if(inDef.width && inDef.width == "auto"){
+			delete inDef.width;
+		}
+		return dojo.mixin({}, inDef, {cells: this.addRowsDef(inDef.rows || inDef.cells)});
+	},
+	
+	setStructure: function(inStructure){
+		this.fieldIndex = 0;
+		this.cells = [];
+		var s = this.structure = [];
+
+		if(this.grid.rowSelector){
+			var sel = { type: dojox._scopeName + ".grid._RowSelector" };
+
+			if(dojo.isString(this.grid.rowSelector)){
+				var width = this.grid.rowSelector;
+
+				if(width == "false"){
+					sel = null;
+				}else if(width != "true"){
+					sel['width'] = width;
+				}
+			}else{
+				if(!this.grid.rowSelector){
+					sel = null;
+				}
+			}
+
+			if(sel){
+				s.push(this.addViewDef(sel));
+			}
+		}
+
+		var isCell = function(def){
+			return ("name" in def || "field" in def || "get" in def);
+		};
+
+		var isRowDef = function(def){
+			if(dojo.isArray(def)){
+				if(dojo.isArray(def[0]) || isCell(def[0])){
+					return true;
+				}
+			}
+			return false;
+		};
+
+		var isView = function(def){
+			return (def !== null && dojo.isObject(def) &&
+					("cells" in def || "rows" in def || ("type" in def && !isCell(def))));
+		};
+
+		if(dojo.isArray(inStructure)){
+			var hasViews = false;
+			for(var i=0, st; (st=inStructure[i]); i++){
+				if(isView(st)){
+					hasViews = true;
+					break;
+				}
+			}
+			if(!hasViews){
+				s.push(this.addViewDef({ cells: inStructure }));
+			}else{
+				for(i=0; (st=inStructure[i]); i++){
+					if(isRowDef(st)){
+						s.push(this.addViewDef({ cells: st }));
+					}else if(isView(st)){
+						s.push(this.addViewDef(st));
+					}
+				}
+			}
+		}else if(isView(inStructure)){
+			// it's a view object
+			s.push(this.addViewDef(inStructure));
+		}
+
+		this.cellCount = this.cells.length;
+		this.grid.setupHeaderMenu();
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._ViewManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._ViewManager"] = true;
+dojo.provide("dojox.grid._ViewManager");
+
+dojo.declare('dojox.grid._ViewManager', null, {
+	// summary:
+	//		A collection of grid views. Owned by grid and used internally for managing grid views.
+	// description:
+	//		Grid creates views automatically based on grid's layout structure.
+	//		Users should typically not need to access individual views or the views collection directly.
+	constructor: function(inGrid){
+		this.grid = inGrid;
+	},
+
+	defaultWidth: 200,
+
+	views: [],
+
+	// operations
+	resize: function(){
+		this.onEach("resize");
+	},
+
+	render: function(){
+		this.onEach("render");
+	},
+
+	// views
+	addView: function(inView){
+		inView.idx = this.views.length;
+		this.views.push(inView);
+	},
+
+	destroyViews: function(){
+		for(var i=0, v; v=this.views[i]; i++){
+			v.destroy();
+		}
+		this.views = [];
+	},
+
+	getContentNodes: function(){
+		var nodes = [];
+		for(var i=0, v; v=this.views[i]; i++){
+			nodes.push(v.contentNode);
+		}
+		return nodes;
+	},
+
+	forEach: function(inCallback){
+		for(var i=0, v; v=this.views[i]; i++){
+			inCallback(v, i);
+		}
+	},
+
+	onEach: function(inMethod, inArgs){
+		inArgs = inArgs || [];
+		for(var i=0, v; v=this.views[i]; i++){
+			if(inMethod in v){
+				v[inMethod].apply(v, inArgs);
+			}
+		}
+	},
+
+	// layout
+	normalizeHeaderNodeHeight: function(){
+		var rowNodes = [];
+		for(var i=0, v; (v=this.views[i]); i++){
+			if(v.headerContentNode.firstChild){
+				rowNodes.push(v.headerContentNode);
+			}
+		}
+		this.normalizeRowNodeHeights(rowNodes);
+	},
+
+	normalizeRowNodeHeights: function(inRowNodes){
+		var h = 0;
+		var currHeights = [];
+		if(this.grid.rowHeight){
+			h = this.grid.rowHeight;
+		}else{
+			if(inRowNodes.length <= 1){ 
+				// no need to normalize if we are the only one...
+				return; 
+			}
+			for(var i=0, n; (n=inRowNodes[i]); i++){
+				// We only care about the height - so don't use marginBox.  This
+				// depends on the container not having any margin (which it shouldn't)
+				// Also - we only look up the height if the cell doesn't have the
+				// dojoxGridNonNormalizedCell class (like for row selectors)
+				if(!dojo.hasClass(n, "dojoxGridNonNormalizedCell")){
+					currHeights[i] = n.firstChild.offsetHeight;
+					h =  Math.max(h, currHeights[i]);
+				}
+			}
+			h = (h >= 0 ? h : 0);
+	
+			//Work around odd FF3 rendering bug: #8864.
+			//A one px increase fixes FireFox 3's rounding bug for fractional font sizes.
+			if(dojo.isMoz && h){h++;}
+		}
+		for(i=0; (n=inRowNodes[i]); i++){
+			if(currHeights[i] != h){
+				n.firstChild.style.height = h + "px";
+			}
+		}
+	},
+	
+	resetHeaderNodeHeight: function(){
+		for(var i=0, v, n; (v=this.views[i]); i++){
+			n = v.headerContentNode.firstChild;
+			if(n){
+				n.style.height = "";
+			}
+		}
+	},
+
+	renormalizeRow: function(inRowIndex){
+		var rowNodes = [];
+		for(var i=0, v, n; (v=this.views[i])&&(n=v.getRowNode(inRowIndex)); i++){
+			n.firstChild.style.height = '';
+			rowNodes.push(n);
+		}
+		this.normalizeRowNodeHeights(rowNodes);
+	},
+
+	getViewWidth: function(inIndex){
+		return this.views[inIndex].getWidth() || this.defaultWidth;
+	},
+
+	// must be called after view widths are properly set or height can be miscalculated
+	// if there are flex columns
+	measureHeader: function(){
+		// need to reset view header heights so they are properly measured.
+		this.resetHeaderNodeHeight();
+		this.forEach(function(inView){
+			inView.headerContentNode.style.height = '';
+		});
+		var h = 0;
+		// calculate maximum view header height
+		this.forEach(function(inView){
+			h = Math.max(inView.headerNode.offsetHeight, h);
+		});
+		return h;
+	},
+
+	measureContent: function(){
+		var h = 0;
+		this.forEach(function(inView){
+			h = Math.max(inView.domNode.offsetHeight, h);
+		});
+		return h;
+	},
+
+	findClient: function(inAutoWidth){
+		// try to use user defined client
+		var c = this.grid.elasticView || -1;
+		// attempt to find implicit client
+		if(c < 0){
+			for(var i=1, v; (v=this.views[i]); i++){
+				if(v.viewWidth){
+					for(i=1; (v=this.views[i]); i++){
+						if(!v.viewWidth){
+							c = i;
+							break;
+						}
+					}
+					break;
+				}
+			}
+		}
+		// client is in the middle by default
+		if(c < 0){
+			c = Math.floor(this.views.length / 2);
+		}
+		return c;
+	},
+
+	arrange: function(l, w){
+		var i, v, vw, len = this.views.length;
+		// find the client
+		var c = (w <= 0 ? len : this.findClient());
+		// layout views
+		var setPosition = function(v, l){
+			var ds = v.domNode.style;
+			var hs = v.headerNode.style;
+
+			if(!dojo._isBodyLtr()){
+				ds.right = l + 'px';
+				// fixed rtl, the scrollbar is on the right side in FF
+				if (dojo.isMoz) {
+					hs.right = l + v.getScrollbarWidth() + 'px';
+					hs.width = parseInt(hs.width, 10) - v.getScrollbarWidth() + 'px';
+				}else{
+					hs.right = l + 'px';					
+				}
+			}else{
+				ds.left = l + 'px';
+				hs.left = l + 'px';
+			}
+			ds.top = 0 + 'px';
+			hs.top = 0;
+		};
+		// for views left of the client
+		//BiDi TODO: The left and right should not appear in BIDI environment. Should be replaced with 
+		//leading and tailing concept.
+		for(i=0; (v=this.views[i])&&(i<c); i++){
+			// get width
+			vw = this.getViewWidth(i);
+			// process boxes
+			v.setSize(vw, 0);
+			setPosition(v, l);
+			if(v.headerContentNode && v.headerContentNode.firstChild){
+				vw = v.getColumnsWidth()+v.getScrollbarWidth();
+			}else{
+				vw = v.domNode.offsetWidth;
+			}
+			// update position
+			l += vw;
+		}
+		// next view (is the client, i++ == c) 
+		i++;
+		// start from the right edge
+		var r = w;
+		// for views right of the client (iterated from the right)
+		for(var j=len-1; (v=this.views[j])&&(i<=j); j--){
+			// get width
+			vw = this.getViewWidth(j);
+			// set size
+			v.setSize(vw, 0);
+			// measure in pixels
+			vw = v.domNode.offsetWidth;
+			// update position
+			r -= vw;
+			// set position
+			setPosition(v, r);
+		}
+		if(c<len){
+			v = this.views[c];
+			// position the client box between left and right boxes	
+			vw = Math.max(1, r-l);
+			// set size
+			v.setSize(vw + 'px', 0);
+			setPosition(v, l);
+		}
+		return l;
+	},
+
+	// rendering
+	renderRow: function(inRowIndex, inNodes, skipRenorm){
+		var rowNodes = [];
+		for(var i=0, v, n, rowNode; (v=this.views[i])&&(n=inNodes[i]); i++){
+			rowNode = v.renderRow(inRowIndex);
+			n.appendChild(rowNode);
+			rowNodes.push(rowNode);
+		}
+		if(!skipRenorm){
+			this.normalizeRowNodeHeights(rowNodes);
+		}
+	},
+	
+	rowRemoved: function(inRowIndex){
+		this.onEach("rowRemoved", [ inRowIndex ]);
+	},
+	
+	// updating
+	updateRow: function(inRowIndex, skipRenorm){
+		for(var i=0, v; v=this.views[i]; i++){
+			v.updateRow(inRowIndex);
+		}
+		if(!skipRenorm){
+			this.renormalizeRow(inRowIndex);
+		}
+	},
+	
+	updateRowStyles: function(inRowIndex){
+		this.onEach("updateRowStyles", [ inRowIndex ]);
+	},
+	
+	// scrolling
+	setScrollTop: function(inTop){
+		var top = inTop;
+		for(var i=0, v; v=this.views[i]; i++){
+			top = v.setScrollTop(inTop);
+			// Work around IE not firing scroll events that cause header offset
+			// issues to occur.
+			if(dojo.isIE && v.headerNode && v.scrollboxNode){
+				v.headerNode.scrollLeft = v.scrollboxNode.scrollLeft;
+			}
+		}
+		return top;
+		//this.onEach("setScrollTop", [ inTop ]);
+	},
+	
+	getFirstScrollingView: function(){
+		// summary: Returns the first grid view with a scroll bar 
+		for(var i=0, v; (v=this.views[i]); i++){
+			if(v.hasHScrollbar() || v.hasVScrollbar()){
+				return v;
+			}
+		}
+		return null;
+	}
+	
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._RowManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._RowManager"] = true;
+dojo.provide("dojox.grid._RowManager");
+
+(function(){
+	var setStyleText = function(inNode, inStyleText){
+		if(inNode.style.cssText == undefined){
+			inNode.setAttribute("style", inStyleText);
+		}else{
+			inNode.style.cssText = inStyleText;
+		}
+	};
+
+	dojo.declare("dojox.grid._RowManager", null, {
+		//	Stores information about grid rows. Owned by grid and used internally.
+		constructor: function(inGrid){
+			this.grid = inGrid;
+		},
+		linesToEms: 2,
+		overRow: -2,
+		// styles
+		prepareStylingRow: function(inRowIndex, inRowNode){
+			return {
+				index: inRowIndex, 
+				node: inRowNode,
+				odd: Boolean(inRowIndex&1),
+				selected: !!this.grid.selection.isSelected(inRowIndex),
+				over: this.isOver(inRowIndex),
+				customStyles: "",
+				customClasses: "dojoxGridRow"
+			};
+		},
+		styleRowNode: function(inRowIndex, inRowNode){
+			var row = this.prepareStylingRow(inRowIndex, inRowNode);
+			this.grid.onStyleRow(row);
+			this.applyStyles(row);
+		},
+		applyStyles: function(inRow){
+			var i = inRow;
+
+			i.node.className = i.customClasses;
+			var h = i.node.style.height;
+			setStyleText(i.node, i.customStyles + ';' + (i.node._style||''));
+			i.node.style.height = h;
+		},
+		updateStyles: function(inRowIndex){
+			this.grid.updateRowStyles(inRowIndex);
+		},
+		// states and events
+		setOverRow: function(inRowIndex){
+			var last = this.overRow;
+			this.overRow = inRowIndex;
+			if((last!=this.overRow)&&(dojo.isString(last) || last >= 0)){
+				this.updateStyles(last);
+			}
+			this.updateStyles(this.overRow);
+		},
+		isOver: function(inRowIndex){
+			return (this.overRow == inRowIndex && !dojo.hasClass(this.grid.domNode, "dojoxGridColumnResizing"));
+		}
+	});
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid._FocusManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._FocusManager"] = true;
+dojo.provide("dojox.grid._FocusManager");
+
+
+
+// focus management
+dojo.declare("dojox.grid._FocusManager", null, {
+	// summary:
+	//	Controls grid cell focus. Owned by grid and used internally for focusing.
+	//	Note: grid cell actually receives keyboard input only when cell is being edited.
+	constructor: function(inGrid){
+		this.grid = inGrid;
+		this.cell = null;
+		this.rowIndex = -1;
+		this._connects = [];
+		this.headerMenu = this.grid.headerMenu;
+		this._connects.push(dojo.connect(this.grid.domNode, "onfocus", this, "doFocus"));
+		this._connects.push(dojo.connect(this.grid.domNode, "onblur", this, "doBlur"));
+		this._connects.push(dojo.connect(this.grid.domNode, "oncontextmenu", this, "doContextMenu"));
+		this._connects.push(dojo.connect(this.grid.lastFocusNode, "onfocus", this, "doLastNodeFocus"));
+		this._connects.push(dojo.connect(this.grid.lastFocusNode, "onblur", this, "doLastNodeBlur"));
+		this._connects.push(dojo.connect(this.grid,"_onFetchComplete", this, "_delayedCellFocus"));
+		this._connects.push(dojo.connect(this.grid,"postrender", this, "_delayedHeaderFocus"));
+	},
+	destroy: function(){
+		dojo.forEach(this._connects, dojo.disconnect);
+		delete this.grid;
+		delete this.cell;
+	},
+	_colHeadNode: null,
+	_colHeadFocusIdx: null,
+	_contextMenuBindNode: null,
+	tabbingOut: false,
+	focusClass: "dojoxGridCellFocus",
+	focusView: null,
+	initFocusView: function(){
+		this.focusView = this.grid.views.getFirstScrollingView() || this.focusView;
+		this._initColumnHeaders();
+	},
+	isFocusCell: function(inCell, inRowIndex){
+		// summary:
+		//	states if the given cell is focused
+		// inCell: object
+		//	grid cell object
+		// inRowIndex: int
+		//	grid row index
+		// returns:
+		//	true of the given grid cell is focused
+		return (this.cell == inCell) && (this.rowIndex == inRowIndex);
+	},
+	isLastFocusCell: function(){
+		if(this.cell){
+			return (this.rowIndex == this.grid.rowCount-1) && (this.cell.index == this.grid.layout.cellCount-1);
+		}
+		return false;
+	},
+	isFirstFocusCell: function(){
+		if(this.cell){
+			return (this.rowIndex === 0) && (this.cell.index === 0);
+		}
+		return false;
+	},
+	isNoFocusCell: function(){
+		return (this.rowIndex < 0) || !this.cell;
+	},
+	isNavHeader: function(){
+		// summary:
+		//	states whether currently navigating among column headers.
+		// returns:
+		//	true if focus is on a column header; false otherwise. 
+		return (!!this._colHeadNode);
+	},
+	getHeaderIndex: function(){
+		// summary:
+		//	if one of the column headers currently has focus, return its index.
+		// returns:
+		//	index of the focused column header, or -1 if none have focus.
+		if(this._colHeadNode){
+			return dojo.indexOf(this._findHeaderCells(), this._colHeadNode);
+		}else{
+			return -1;
+		}
+	},
+	_focusifyCellNode: function(inBork){
+		var n = this.cell && this.cell.getNode(this.rowIndex);
+		if(n){
+			dojo.toggleClass(n, this.focusClass, inBork);
+			if(inBork){
+				var sl = this.scrollIntoView();
+				try{
+					if(!this.grid.edit.isEditing()){
+						dojox.grid.util.fire(n, "focus");
+						if(sl){ this.cell.view.scrollboxNode.scrollLeft = sl; }
+					}
+				}catch(e){}
+			}
+		}
+	},
+	_delayedCellFocus: function(){
+		if(this.isNavHeader()||!this.grid._focused){
+				return;
+		}
+		var n = this.cell && this.cell.getNode(this.rowIndex);
+		if(n){ 
+			try{
+				if(!this.grid.edit.isEditing()){
+					dojo.toggleClass(n, this.focusClass, true);
+					this.blurHeader();
+					dojox.grid.util.fire(n, "focus");
+				}
+			} 
+			catch(e){}
+		}
+	},
+	_delayedHeaderFocus: function(){
+		if(this.isNavHeader()){
+			this.focusHeader();
+			this.grid.domNode.focus();
+		}
+	},
+	_initColumnHeaders: function(){
+		var headers = this._findHeaderCells();
+		for(var i = 0; i < headers.length; i++){
+			this._connects.push(dojo.connect(headers[i], "onfocus", this, "doColHeaderFocus"));
+			this._connects.push(dojo.connect(headers[i], "onblur", this, "doColHeaderBlur"));
+		}
+	},
+	_findHeaderCells: function(){
+		// This should be a one liner:
+		//	dojo.query("th[tabindex=-1]", this.grid.viewsHeaderNode);
+		// But there is a bug in dojo.query() for IE -- see trac #7037.
+		var allHeads = dojo.query("th", this.grid.viewsHeaderNode);
+		var headers = [];
+		for (var i = 0; i < allHeads.length; i++){
+			var aHead = allHeads[i];
+			var hasTabIdx = dojo.hasAttr(aHead, "tabIndex");
+			var tabindex = dojo.attr(aHead, "tabIndex");
+			if (hasTabIdx && tabindex < 0) {
+				headers.push(aHead);
+			}
+		}
+		return headers;
+	},
+	_setActiveColHeader: function(/*Node*/colHeaderNode, /*Integer*/colFocusIdx, /*Integer*/ prevColFocusIdx){
+		//console.log("setActiveColHeader() - colHeaderNode:colFocusIdx:prevColFocusIdx = " + colHeaderNode + ":" + colFocusIdx + ":" + prevColFocusIdx);
+		dojo.attr(this.grid.domNode, "aria-activedescendant",colHeaderNode.id);
+		if (prevColFocusIdx != null && prevColFocusIdx >= 0 && prevColFocusIdx != colFocusIdx){
+			dojo.toggleClass(this._findHeaderCells()[prevColFocusIdx],this.focusClass,false);
+		}
+		dojo.toggleClass(colHeaderNode,this.focusClass, true);
+		this._colHeadNode = colHeaderNode;
+		this._colHeadFocusIdx = colFocusIdx;
+		this._scrollHeader(this._colHeadFocusIdx);
+	},
+	scrollIntoView: function(){
+		var info = (this.cell ? this._scrollInfo(this.cell) : null);
+		if(!info || !info.s){
+			return null;
+		}
+		var rt = this.grid.scroller.findScrollTop(this.rowIndex);
+		// place cell within horizontal view
+		if(info.n && info.sr){
+			if(info.n.offsetLeft + info.n.offsetWidth > info.sr.l + info.sr.w){
+				info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w;
+			}else if(info.n.offsetLeft < info.sr.l){
+				info.s.scrollLeft = info.n.offsetLeft;
+			}
+		}
+		// place cell within vertical view
+		if(info.r && info.sr){
+			if(rt + info.r.offsetHeight > info.sr.t + info.sr.h){
+				this.grid.setScrollTop(rt + info.r.offsetHeight - info.sr.h);
+			}else if(rt < info.sr.t){
+				this.grid.setScrollTop(rt);
+			}
+		}
+
+		return info.s.scrollLeft;
+	},
+	_scrollInfo: function(cell, domNode){
+		if(cell){
+			var cl = cell,
+				sbn = cl.view.scrollboxNode,
+				sbnr = {
+					w: sbn.clientWidth,
+					l: sbn.scrollLeft,
+					t: sbn.scrollTop,
+					h: sbn.clientHeight
+				},
+				rn = cl.view.getRowNode(this.rowIndex);
+			return {
+				c: cl,
+				s: sbn,
+				sr: sbnr,
+				n: (domNode ? domNode : cell.getNode(this.rowIndex)),
+				r: rn
+			};
+		}
+		return null;
+	},
+	_scrollHeader: function(currentIdx){
+		var info = null;
+		if(this._colHeadNode){
+			var cell = this.grid.getCell(currentIdx);
+			info = this._scrollInfo(cell, cell.getNode(0));
+		}
+		if(info && info.s && info.sr && info.n){
+			// scroll horizontally as needed.
+			var scroll = info.sr.l + info.sr.w;
+			if(info.n.offsetLeft + info.n.offsetWidth > scroll){
+				info.s.scrollLeft = info.n.offsetLeft + info.n.offsetWidth - info.sr.w;
+			}else if(info.n.offsetLeft < info.sr.l){
+				info.s.scrollLeft = info.n.offsetLeft;
+			}else if(dojo.isIE <= 7 && cell && cell.view.headerNode){
+				// Trac 7158: scroll dojoxGridHeader for IE7 and lower
+				cell.view.headerNode.scrollLeft = info.s.scrollLeft;
+			}
+		}
+	},
+	_isHeaderHidden: function(){
+		// summary:
+		//		determine if the grid headers are hidden
+		//		relies on documented technique of setting .dojoxGridHeader { display:none; } 
+		// returns: Boolean
+		//		true if headers are hidden
+		//		false if headers are not hidden
+		
+		var curView = this.focusView;
+		if (!curView){
+			// find one so we can determine if headers are hidden
+			// there is no focusView after adding items to empty grid (test_data_grid_empty.html)
+			for (var i = 0, cView; (cView = this.grid.views.views[i]); i++) {
+				if(cView.headerNode ){
+					curView=cView;
+					break;		
+				}	
+			}
+		}
+		return (curView && dojo.getComputedStyle(curView.headerNode).display == "none");
+	},
+	colSizeAdjust: function (e, colIdx, delta){ // adjust the column specified by colIdx by the specified delta px
+		var headers = this._findHeaderCells();
+		var view = this.focusView;
+		if (!view) {
+			for (var i = 0, cView; (cView = this.grid.views.views[i]); i++) {
+				// find first view with a tableMap in order to work with empty grid
+				if(cView.header.tableMap.map ){
+					view=cView;
+					break;		
+				}
+			}
+		}
+		var curHeader = headers[colIdx];
+		if (!view || (colIdx == headers.length-1 && colIdx === 0)){
+			return; // can't adjust single col. grid
+		}	
+		view.content.baseDecorateEvent(e);
+		// need to adjust event with header cell info since focus is no longer on header cell
+		e.cellNode = curHeader; //this.findCellTarget(e.target, e.rowNode);
+		e.cellIndex = view.content.getCellNodeIndex(e.cellNode);
+		e.cell = (e.cellIndex >= 0 ? this.grid.getCell(e.cellIndex) : null);
+		if (view.header.canResize(e)){ 
+			var deltaObj = {
+				l: delta
+			};
+			var drag = view.header.colResizeSetup(e,false);
+			view.header.doResizeColumn(drag, null, deltaObj);
+			view.update();
+		}
+	},
+	styleRow: function(inRow){
+		return;
+	},
+	setFocusIndex: function(inRowIndex, inCellIndex){
+		// summary:
+		//	focuses the given grid cell
+		// inRowIndex: int
+		//	grid row index
+		// inCellIndex: int
+		//	grid cell index
+		this.setFocusCell(this.grid.getCell(inCellIndex), inRowIndex);
+	},
+	setFocusCell: function(inCell, inRowIndex){
+		// summary:
+		//	focuses the given grid cell
+		// inCell: object
+		//	grid cell object
+		// inRowIndex: int
+		//	grid row index
+		if(inCell && !this.isFocusCell(inCell, inRowIndex)){
+			this.tabbingOut = false;
+			if (this._colHeadNode){
+				this.blurHeader();
+			}
+			this._colHeadNode = this._colHeadFocusIdx = null;
+			this.focusGridView();
+			this._focusifyCellNode(false);
+			this.cell = inCell;
+			this.rowIndex = inRowIndex;
+			this._focusifyCellNode(true);
+		}
+		// even if this cell isFocusCell, the document focus may need to be rejiggered
+		// call opera on delay to prevent keypress from altering focus
+		if(dojo.isOpera){
+			setTimeout(dojo.hitch(this.grid, 'onCellFocus', this.cell, this.rowIndex), 1);
+		}else{
+			this.grid.onCellFocus(this.cell, this.rowIndex);
+		}
+	},
+	next: function(){
+		// summary:
+		//	focus next grid cell
+		if(this.cell){
+			var row=this.rowIndex, col=this.cell.index+1, cc=this.grid.layout.cellCount-1, rc=this.grid.rowCount-1;
+			if(col > cc){
+				col = 0;
+				row++;
+			}
+			if(row > rc){
+				col = cc;
+				row = rc;
+			}
+			if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells
+				var nextCell = this.grid.getCell(col);
+				if (!this.isLastFocusCell() && !nextCell.editable){
+					this.cell=nextCell;
+					this.rowIndex=row;
+					this.next();
+					return;
+				}
+			}
+			this.setFocusIndex(row, col);
+		}
+	},
+	previous: function(){
+		// summary:
+		//	focus previous grid cell
+		if(this.cell){
+			var row=(this.rowIndex || 0), col=(this.cell.index || 0) - 1;
+			if(col < 0){
+				col = this.grid.layout.cellCount-1;
+				row--;
+			}
+			if(row < 0){
+				row = 0;
+				col = 0;
+			}
+			if(this.grid.edit.isEditing()){ //when editing, only navigate to editable cells
+				var prevCell = this.grid.getCell(col);
+				if (!this.isFirstFocusCell() && !prevCell.editable){
+					this.cell=prevCell;
+					this.rowIndex=row;
+					this.previous();
+					return;
+				}
+			}
+			this.setFocusIndex(row, col);
+		}
+	},
+	move: function(inRowDelta, inColDelta) {
+		// summary:
+		//	focus grid cell or  simulate focus to column header based on position relative to current focus
+		// inRowDelta: int
+		// vertical distance from current focus
+		// inColDelta: int
+		// horizontal distance from current focus
+
+		var colDir = inColDelta < 0 ? -1 : 1;
+		// Handle column headers.
+		if(this.isNavHeader()){
+			var headers = this._findHeaderCells();
+			var savedIdx = currentIdx = dojo.indexOf(headers, this._colHeadNode);
+			currentIdx += inColDelta;
+			while(currentIdx >=0 && currentIdx < headers.length && headers[currentIdx].style.display == "none"){
+				// skip over hidden column headers
+				currentIdx += colDir;
+			}
+			if((currentIdx >= 0) && (currentIdx < headers.length)){
+				this._setActiveColHeader(headers[currentIdx],currentIdx, savedIdx);
+			}
+		}else{
+			if(this.cell){
+				// Handle grid proper.
+				var sc = this.grid.scroller,
+					r = this.rowIndex,
+					rc = this.grid.rowCount-1,
+					row = Math.min(rc, Math.max(0, r+inRowDelta));
+				if(inRowDelta){
+					if(inRowDelta>0){
+						if(row > sc.getLastPageRow(sc.page)){
+							//need to load additional data, let scroller do that
+							this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));
+						}
+					}else if(inRowDelta<0){
+						if(row <= sc.getPageRow(sc.page)){
+							//need to load additional data, let scroller do that
+							this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));
+						}
+					}
+				}
+				var cc = this.grid.layout.cellCount-1,
+				i = this.cell.index,
+				col = Math.min(cc, Math.max(0, i+inColDelta));
+				var cell = this.grid.getCell(col);
+				while(col>=0 && col < cc && cell && cell.hidden === true){
+					// skip hidden cells
+					col += colDir;
+					cell = this.grid.getCell(col);
+				}
+				if (!cell || cell.hidden === true){
+					// don't change col if would move to hidden
+					col = i;
+				}
+				this.setFocusIndex(row, col);
+				if(inRowDelta){
+					this.grid.updateRow(r);
+				}
+			}
+		}
+	},
+	previousKey: function(e){
+		if(this.grid.edit.isEditing()){
+			dojo.stopEvent(e);
+			this.previous();
+		}else if(!this.isNavHeader() && !this._isHeaderHidden()) {
+			this.grid.domNode.focus(); // will call doFocus and set focus into header.
+			dojo.stopEvent(e);
+		}else{
+			this.tabOut(this.grid.domNode);
+			if (this._colHeadFocusIdx != null) { // clear grid header focus
+				dojo.toggleClass(this._findHeaderCells()[this._colHeadFocusIdx], this.focusClass, false);
+				this._colHeadFocusIdx = null;
+			}
+			this._focusifyCellNode(false);
+		}
+	},
+	nextKey: function(e) {
+		var isEmpty = (this.grid.rowCount === 0);
+		if(e.target === this.grid.domNode && this._colHeadFocusIdx == null){
+			this.focusHeader();
+			dojo.stopEvent(e);
+		}else if(this.isNavHeader()){
+			// if tabbing from col header, then go to grid proper. 
+			this.blurHeader();
+			if(!this.findAndFocusGridCell()){
+				this.tabOut(this.grid.lastFocusNode);
+			}
+			this._colHeadNode = this._colHeadFocusIdx= null;
+		}else if(this.grid.edit.isEditing()){
+			dojo.stopEvent(e);
+			this.next();
+		}else{
+			this.tabOut(this.grid.lastFocusNode);
+		}
+	},
+	tabOut: function(inFocusNode){
+		this.tabbingOut = true;
+		inFocusNode.focus();
+	},
+	focusGridView: function(){
+		dojox.grid.util.fire(this.focusView, "focus");
+	},
+	focusGrid: function(inSkipFocusCell){
+		this.focusGridView();
+		this._focusifyCellNode(true);
+	},
+	findAndFocusGridCell: function(){
+		// summary:
+		//		find the first focusable grid cell 
+		// returns: Boolean
+		//		true if focus was set to a cell
+		//		false if no cell found to set focus onto
+		
+		var didFocus = true;
+		var isEmpty = (this.grid.rowCount === 0); // If grid is empty this.grid.rowCount == 0
+		if (this.isNoFocusCell() && !isEmpty){
+			var cellIdx = 0;
+			var cell = this.grid.getCell(cellIdx);
+			if (cell.hidden) {
+				// if first cell isn't visible, use _colHeadFocusIdx 
+				// could also use a while loop to find first visible cell - not sure that is worth it
+				cellIdx = this.isNavHeader() ? this._colHeadFocusIdx : 0;
+			}
+			this.setFocusIndex(0, cellIdx);
+		}
+		else if (this.cell && !isEmpty){
+			if (this.focusView && !this.focusView.rowNodes[this.rowIndex]){
+				// if rowNode for current index is undefined (likely as a result of a sort and because of #7304) 
+				// scroll to that row
+				this.grid.scrollToRow(this.rowIndex);
+			}
+			this.focusGrid();
+		}else {
+			didFocus = false;
+		}
+		this._colHeadNode = this._colHeadFocusIdx= null;
+		return didFocus;
+	},
+	focusHeader: function(){
+		var headerNodes = this._findHeaderCells();
+		var saveColHeadFocusIdx = this._colHeadFocusIdx;
+		if (this._isHeaderHidden()){
+			// grid header is hidden, focus a cell
+			this.findAndFocusGridCell();
+		}
+		else if (!this._colHeadFocusIdx) {
+			if (this.isNoFocusCell()) {
+				this._colHeadFocusIdx = 0;
+			}
+			else {
+				this._colHeadFocusIdx = this.cell.index;
+			}
+		}
+		this._colHeadNode = headerNodes[this._colHeadFocusIdx];
+		while(this._colHeadNode && this._colHeadFocusIdx >=0 && this._colHeadFocusIdx < headerNodes.length &&
+				this._colHeadNode.style.display == "none"){
+			// skip over hidden column headers
+			this._colHeadFocusIdx++;
+			this._colHeadNode = headerNodes[this._colHeadFocusIdx];
+		}
+		if(this._colHeadNode && this._colHeadNode.style.display != "none"){
+			// Column header cells know longer receive actual focus.  So, for keyboard invocation of
+			// contextMenu to work, the contextMenu must be bound to the grid.domNode rather than the viewsHeaderNode.
+			// unbind the contextmenu from the viewsHeaderNode and to the grid when header cells are active.  Reset
+			// the binding back to the viewsHeaderNode when header cells are no longer acive (in blurHeader) #10483
+			if (this.headerMenu && this._contextMenuBindNode != this.grid.domNode){
+				this.headerMenu.unBindDomNode(this.grid.viewsHeaderNode);
+				this.headerMenu.bindDomNode(this.grid.domNode);
+				this._contextMenuBindNode = this.grid.domNode;
+			}
+			this._setActiveColHeader(this._colHeadNode, this._colHeadFocusIdx, saveColHeadFocusIdx);
+			this._scrollHeader(this._colHeadFocusIdx);
+			this._focusifyCellNode(false);
+		}else {
+			// all col head nodes are hidden - focus the grid
+			this.findAndFocusGridCell();
+		}
+	},
+	blurHeader: function(){
+		dojo.removeClass(this._colHeadNode, this.focusClass);
+		dojo.removeAttr(this.grid.domNode,"aria-activedescendant");
+		// reset contextMenu onto viewsHeaderNode so right mouse on header will invoke (see focusHeader)
+		if (this.headerMenu && this._contextMenuBindNode == this.grid.domNode) {
+			var viewsHeader = this.grid.viewsHeaderNode;
+			this.headerMenu.unBindDomNode(this.grid.domNode);
+			this.headerMenu.bindDomNode(viewsHeader);
+			this._contextMenuBindNode = viewsHeader;
+		}
+	},
+	doFocus: function(e){
+		// trap focus only for grid dom node
+		if(e && e.target != e.currentTarget){
+			dojo.stopEvent(e);
+			return;
+		}
+		// do not focus for scrolling if grid is about to blur
+		if(!this.tabbingOut){
+			this.focusHeader();
+		}
+		this.tabbingOut = false;
+		dojo.stopEvent(e);
+	},
+	doBlur: function(e){
+		dojo.stopEvent(e);	// FF2
+	},
+	doContextMenu: function(e){
+	//stop contextMenu event if no header Menu to prevent default/browser contextMenu
+		if (!this.headerMenu){
+			dojo.stopEvent(e); 
+		}
+	},
+	doLastNodeFocus: function(e){
+		if (this.tabbingOut){
+			this._focusifyCellNode(false);
+		}else if(this.grid.rowCount >0){
+			if (this.isNoFocusCell()){
+				this.setFocusIndex(0,0);
+			}
+			this._focusifyCellNode(true);
+		}else {
+			this.focusHeader();
+		}
+		this.tabbingOut = false;
+		dojo.stopEvent(e);	 // FF2
+	},
+	doLastNodeBlur: function(e){
+		dojo.stopEvent(e);	 // FF2
+	},
+	doColHeaderFocus: function(e){
+		this._setActiveColHeader(e.target,dojo.attr(e.target, "idx"),this._colHeadFocusIdx);
+		this._scrollHeader(this.getHeaderIndex());
+		dojo.stopEvent(e);
+	},
+	doColHeaderBlur: function(e){
+		dojo.toggleClass(e.target, this.focusClass, false);
+	}		
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._EditManager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._EditManager"] = true;
+dojo.provide("dojox.grid._EditManager");
+
+
+
+dojo.declare("dojox.grid._EditManager", null, {
+	// summary:
+	//		Controls grid cell editing process. Owned by grid and used internally for editing.
+	constructor: function(inGrid){
+		// inGrid: dojox.Grid
+		//		The dojox.Grid this editor should be attached to
+		this.grid = inGrid;
+		this.connections = [];
+		if(dojo.isIE){
+			this.connections.push(dojo.connect(document.body, "onfocus", dojo.hitch(this, "_boomerangFocus")));
+		}
+	},
+	
+	info: {},
+
+	destroy: function(){
+		dojo.forEach(this.connections,dojo.disconnect);
+	},
+
+	cellFocus: function(inCell, inRowIndex){
+		// summary:
+		//		Invoke editing when cell is focused
+		// inCell: cell object
+		//		Grid cell object
+		// inRowIndex: Integer
+		//		Grid row index
+		if(this.grid.singleClickEdit || this.isEditRow(inRowIndex)){
+			// if same row or quick editing, edit
+			this.setEditCell(inCell, inRowIndex);
+		}else{
+			// otherwise, apply any pending row edits
+			this.apply();
+		}
+		// if dynamic or static editing...
+		if(this.isEditing() || (inCell && inCell.editable && inCell.alwaysEditing)){
+			// let the editor focus itself as needed
+			this._focusEditor(inCell, inRowIndex);
+		}
+	},
+
+	rowClick: function(e){
+		if(this.isEditing() && !this.isEditRow(e.rowIndex)){
+			this.apply();
+		}
+	},
+
+	styleRow: function(inRow){
+		if(inRow.index == this.info.rowIndex){
+			inRow.customClasses += ' dojoxGridRowEditing';
+		}
+	},
+
+	dispatchEvent: function(e){
+		var c = e.cell, ed = (c && c["editable"]) ? c : 0;
+		return ed && ed.dispatchEvent(e.dispatch, e);
+	},
+
+	// Editing
+	isEditing: function(){
+		// summary:
+		//		Indicates editing state of the grid.
+		// returns: Boolean
+		//	 	True if grid is actively editing
+		return this.info.rowIndex !== undefined;
+	},
+
+	isEditCell: function(inRowIndex, inCellIndex){
+		// summary:
+		//		Indicates if the given cell is being edited.
+		// inRowIndex: Integer
+		//		Grid row index
+		// inCellIndex: Integer
+		//		Grid cell index
+		// returns: Boolean
+		//	 	True if given cell is being edited
+		return (this.info.rowIndex === inRowIndex) && (this.info.cell.index == inCellIndex);
+	},
+
+	isEditRow: function(inRowIndex){
+		// summary:
+		//		Indicates if the given row is being edited.
+		// inRowIndex: Integer
+		//		Grid row index
+		// returns: Boolean
+		//	 	True if given row is being edited
+		return this.info.rowIndex === inRowIndex;
+	},
+
+	setEditCell: function(inCell, inRowIndex){
+		// summary:
+		//		Set the given cell to be edited
+		// inRowIndex: Integer
+		//		Grid row index
+		// inCell: Object
+		//		Grid cell object
+		if(!this.isEditCell(inRowIndex, inCell.index) && this.grid.canEdit && this.grid.canEdit(inCell, inRowIndex)){
+			this.start(inCell, inRowIndex, this.isEditRow(inRowIndex) || inCell.editable);
+		}
+	},
+
+	_focusEditor: function(inCell, inRowIndex){
+		dojox.grid.util.fire(inCell, "focus", [inRowIndex]);
+	},
+
+	focusEditor: function(){
+		if(this.isEditing()){
+			this._focusEditor(this.info.cell, this.info.rowIndex);
+		}
+	},
+
+	// implement fix for focus boomerang effect on IE
+	_boomerangWindow: 500,
+	_shouldCatchBoomerang: function(){
+		return this._catchBoomerang > new Date().getTime();
+	},
+	_boomerangFocus: function(){
+		//console.log("_boomerangFocus");
+		if(this._shouldCatchBoomerang()){
+			// make sure we don't utterly lose focus
+			this.grid.focus.focusGrid();
+			// let the editor focus itself as needed
+			this.focusEditor();
+			// only catch once
+			this._catchBoomerang = 0;
+		}
+	},
+	_doCatchBoomerang: function(){
+		// give ourselves a few ms to boomerang IE focus effects
+		if(dojo.isIE){this._catchBoomerang = new Date().getTime() + this._boomerangWindow;}
+	},
+	// end boomerang fix API
+
+	start: function(inCell, inRowIndex, inEditing){
+		this.grid.beginUpdate();
+		this.editorApply();
+		if(this.isEditing() && !this.isEditRow(inRowIndex)){
+			this.applyRowEdit();
+			this.grid.updateRow(inRowIndex);
+		}
+		if(inEditing){
+			this.info = { cell: inCell, rowIndex: inRowIndex };
+			this.grid.doStartEdit(inCell, inRowIndex); 
+			this.grid.updateRow(inRowIndex);
+		}else{
+			this.info = {};
+		}
+		this.grid.endUpdate();
+		// make sure we don't utterly lose focus
+		this.grid.focus.focusGrid();
+		// let the editor focus itself as needed
+		this._focusEditor(inCell, inRowIndex);
+		// give ourselves a few ms to boomerang IE focus effects
+		this._doCatchBoomerang();
+	},
+
+	_editorDo: function(inMethod){
+		var c = this.info.cell;
+		//c && c.editor && c.editor[inMethod](c, this.info.rowIndex);
+		if(c && c.editable){
+			c[inMethod](this.info.rowIndex);
+		}
+	},
+
+	editorApply: function(){
+		this._editorDo("apply");
+	},
+
+	editorCancel: function(){
+		this._editorDo("cancel");
+	},
+
+	applyCellEdit: function(inValue, inCell, inRowIndex){
+		if(this.grid.canEdit(inCell, inRowIndex)){
+			this.grid.doApplyCellEdit(inValue, inRowIndex, inCell.field);
+		}
+	},
+
+	applyRowEdit: function(){
+		this.grid.doApplyEdit(this.info.rowIndex, this.info.cell.field);
+	},
+
+	apply: function(){
+		// summary:
+		//		Apply a grid edit
+		if(this.isEditing()){
+			this.grid.beginUpdate();
+			this.editorApply();
+			this.applyRowEdit();
+			this.info = {};
+			this.grid.endUpdate();
+			this.grid.focus.focusGrid();
+			this._doCatchBoomerang();
+		}
+	},
+
+	cancel: function(){
+		// summary:
+		//		Cancel a grid edit
+		if(this.isEditing()){
+			this.grid.beginUpdate();
+			this.editorCancel();
+			this.info = {};
+			this.grid.endUpdate();
+			this.grid.focus.focusGrid();
+			this._doCatchBoomerang();
+		}
+	},
+
+	save: function(inRowIndex, inView){
+		// summary:
+		//		Save the grid editing state
+		// inRowIndex: Integer
+		//		Grid row index
+		// inView: Object
+		//		Grid view
+		var c = this.info.cell;
+		if(this.isEditRow(inRowIndex) && (!inView || c.view==inView) && c.editable){
+			c.save(c, this.info.rowIndex);
+		}
+	},
+
+	restore: function(inView, inRowIndex){
+		// summary:
+		//		Restores the grid editing state
+		// inRowIndex: Integer
+		//		Grid row index
+		// inView: Object
+		//		Grid view
+		var c = this.info.cell;
+		if(this.isEditRow(inRowIndex) && c.view == inView && c.editable){
+			c.restore(c, this.info.rowIndex);
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource['dojox.grid.Selection']){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource['dojox.grid.Selection'] = true;
+dojo.provide('dojox.grid.Selection');
+
+dojo.declare("dojox.grid.Selection", null, {
+	// summary:
+	//		Manages row selection for grid. Owned by grid and used internally
+	//		for selection. Override to implement custom selection.
+
+	constructor: function(inGrid){
+		this.grid = inGrid;
+		this.selected = [];
+
+		this.setMode(inGrid.selectionMode);
+	},
+
+	mode: 'extended',
+
+	selected: null,
+	updating: 0,
+	selectedIndex: -1,
+
+	setMode: function(mode){
+		if(this.selected.length){
+			this.deselectAll();
+		}
+		if(mode != 'extended' && mode != 'multiple' && mode != 'single' && mode != 'none'){
+			this.mode = 'extended';
+		}else{
+			this.mode = mode;
+		}
+	},
+
+	onCanSelect: function(inIndex){
+		return this.grid.onCanSelect(inIndex);
+	},
+
+	onCanDeselect: function(inIndex){
+		return this.grid.onCanDeselect(inIndex);
+	},
+
+	onSelected: function(inIndex){
+	},
+
+	onDeselected: function(inIndex){
+	},
+
+	//onSetSelected: function(inIndex, inSelect) { };
+	onChanging: function(){
+	},
+
+	onChanged: function(){
+	},
+
+	isSelected: function(inIndex){
+		if(this.mode == 'none'){
+			return false;
+		}
+		return this.selected[inIndex];
+	},
+
+	getFirstSelected: function(){
+		if(!this.selected.length||this.mode == 'none'){ return -1; }
+		for(var i=0, l=this.selected.length; i<l; i++){
+			if(this.selected[i]){
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	getNextSelected: function(inPrev){
+		if(this.mode == 'none'){ return -1; }
+		for(var i=inPrev+1, l=this.selected.length; i<l; i++){
+			if(this.selected[i]){
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	getSelected: function(){
+		var result = [];
+		for(var i=0, l=this.selected.length; i<l; i++){
+			if(this.selected[i]){
+				result.push(i);
+			}
+		}
+		return result;
+	},
+
+	getSelectedCount: function(){
+		var c = 0;
+		for(var i=0; i<this.selected.length; i++){
+			if(this.selected[i]){
+				c++;
+			}
+		}
+		return c;
+	},
+
+	_beginUpdate: function(){
+		if(this.updating === 0){
+			this.onChanging();
+		}
+		this.updating++;
+	},
+
+	_endUpdate: function(){
+		this.updating--;
+		if(this.updating === 0){
+			this.onChanged();
+		}
+	},
+
+	select: function(inIndex){
+		if(this.mode == 'none'){ return; }
+		if(this.mode != 'multiple'){
+			this.deselectAll(inIndex);
+			this.addToSelection(inIndex);
+		}else{
+			this.toggleSelect(inIndex);
+		}
+	},
+
+	addToSelection: function(inIndex){
+		if(this.mode == 'none'){ return; }
+		if(dojo.isArray(inIndex)){
+			dojo.forEach(inIndex, this.addToSelection, this);
+			return;
+		}
+		inIndex = Number(inIndex);
+		if(this.selected[inIndex]){
+			this.selectedIndex = inIndex;
+		}else{
+			if(this.onCanSelect(inIndex) !== false){
+				this.selectedIndex = inIndex;
+				var rowNode = this.grid.getRowNode(inIndex);
+				if(rowNode){
+					dojo.attr(rowNode,"aria-selected","true");
+				}
+				this._beginUpdate();
+				this.selected[inIndex] = true;
+				//this.grid.onSelected(inIndex);
+				this.onSelected(inIndex);
+				//this.onSetSelected(inIndex, true);
+				this._endUpdate();
+			}
+		}
+	},
+
+	deselect: function(inIndex){
+		if(this.mode == 'none'){ return; }
+		if(dojo.isArray(inIndex)){
+			dojo.forEach(inIndex, this.deselect, this);
+			return;
+		}
+		inIndex = Number(inIndex);
+		if(this.selectedIndex == inIndex){
+			this.selectedIndex = -1;
+		}
+		if(this.selected[inIndex]){
+			if(this.onCanDeselect(inIndex) === false){
+				return;
+			}
+			var rowNode = this.grid.getRowNode(inIndex);
+			if(rowNode){
+				dojo.attr(rowNode,"aria-selected","false");
+			}
+			this._beginUpdate();
+			delete this.selected[inIndex];
+			//this.grid.onDeselected(inIndex);
+			this.onDeselected(inIndex);
+			//this.onSetSelected(inIndex, false);
+			this._endUpdate();
+		}
+	},
+
+	setSelected: function(inIndex, inSelect){
+		this[(inSelect ? 'addToSelection' : 'deselect')](inIndex);
+	},
+
+	toggleSelect: function(inIndex){
+		if(dojo.isArray(inIndex)){
+			dojo.forEach(inIndex, this.toggleSelect, this);
+			return;
+		}
+		this.setSelected(inIndex, !this.selected[inIndex]);
+	},
+
+	_range: function(inFrom, inTo, func){
+		var s = (inFrom >= 0 ? inFrom : inTo), e = inTo;
+		if(s > e){
+			e = s;
+			s = inTo;
+		}
+		for(var i=s; i<=e; i++){
+			func(i);
+		}
+	},
+
+	selectRange: function(inFrom, inTo){
+		this._range(inFrom, inTo, dojo.hitch(this, "addToSelection"));
+	},
+
+	deselectRange: function(inFrom, inTo){
+		this._range(inFrom, inTo, dojo.hitch(this, "deselect"));
+	},
+
+	insert: function(inIndex){
+		this.selected.splice(inIndex, 0, false);
+		if(this.selectedIndex >= inIndex){
+			this.selectedIndex++;
+		}
+	},
+
+	remove: function(inIndex){
+		this.selected.splice(inIndex, 1);
+		if(this.selectedIndex >= inIndex){
+			this.selectedIndex--;
+		}
+	},
+
+	deselectAll: function(inExcept){
+		for(var i in this.selected){
+			if((i!=inExcept)&&(this.selected[i]===true)){
+				this.deselect(i);
+			}
+		}
+	},
+
+	clickSelect: function(inIndex, inCtrlKey, inShiftKey){
+		if(this.mode == 'none'){ return; }
+		this._beginUpdate();
+		if(this.mode != 'extended'){
+			this.select(inIndex);
+		}else{
+			var lastSelected = this.selectedIndex;
+			if(!inCtrlKey){
+				this.deselectAll(inIndex);
+			}
+			if(inShiftKey){
+				this.selectRange(lastSelected, inIndex);
+			}else if(inCtrlKey){
+				this.toggleSelect(inIndex);
+			}else{
+				this.addToSelection(inIndex);
+			}
+		}
+		this._endUpdate();
+	},
+
+	clickSelectEvent: function(e){
+		this.clickSelect(e.rowIndex, dojo.isCopyKey(e), e.shiftKey);
+	},
+
+	clear: function(){
+		this._beginUpdate();
+		this.deselectAll();
+		this._endUpdate();
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid._Events"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Events"] = true;
+dojo.provide("dojox.grid._Events");
+
+dojo.declare("dojox.grid._Events", null, {
+	// summary:
+	//		_Grid mixin that provides default implementations for grid events.
+	// description: 
+	//		Default synthetic events dispatched for _Grid. dojo.connect to events to
+	//		retain default implementation or override them for custom handling.
+	
+	// cellOverClass: String
+	// 		css class to apply to grid cells over which the cursor is placed.
+	cellOverClass: "dojoxGridCellOver",
+	
+	onKeyEvent: function(e){
+		// summary: top level handler for Key Events
+		this.dispatchKeyEvent(e);
+	},
+
+	onContentEvent: function(e){
+		// summary: Top level handler for Content events
+		this.dispatchContentEvent(e);
+	},
+
+	onHeaderEvent: function(e){
+		// summary: Top level handler for header events
+		this.dispatchHeaderEvent(e);
+	},
+
+	onStyleRow: function(inRow){
+		// summary:
+		//		Perform row styling on a given row. Called whenever row styling is updated.
+		//
+		// inRow: Object
+		// 		Object containing row state information: selected, true if the row is selcted; over:
+		// 		true of the mouse is over the row; odd: true if the row is odd. Use customClasses and
+		// 		customStyles to control row css classes and styles; both properties are strings.
+		//
+		// example: onStyleRow({ selected: true, over:true, odd:false })
+		var i = inRow;
+		i.customClasses += (i.odd?" dojoxGridRowOdd":"") + (i.selected?" dojoxGridRowSelected":"") + (i.over?" dojoxGridRowOver":"");
+		this.focus.styleRow(inRow);
+		this.edit.styleRow(inRow);
+	},
+	
+	onKeyDown: function(e){
+		// summary:
+		// 		Grid key event handler. By default enter begins editing and applies edits, escape cancels an edit,
+		// 		tab, shift-tab, and arrow keys move grid cell focus.
+		if(e.altKey || e.metaKey){
+			return;
+		}
+		var dk = dojo.keys;
+		var colIdx;
+		switch(e.keyCode){
+			case dk.ESCAPE:
+				this.edit.cancel();
+				break;
+			case dk.ENTER:
+				if(!this.edit.isEditing()){
+					colIdx = this.focus.getHeaderIndex();
+					if(colIdx >= 0) {
+						this.setSortIndex(colIdx);
+						break;
+					}else {
+						this.selection.clickSelect(this.focus.rowIndex, dojo.isCopyKey(e), e.shiftKey);
+					}
+					dojo.stopEvent(e);
+				}
+				if(!e.shiftKey){
+					var isEditing = this.edit.isEditing();
+					this.edit.apply();
+					if(!isEditing){
+						this.edit.setEditCell(this.focus.cell, this.focus.rowIndex);
+					}
+				}
+				if (!this.edit.isEditing()){
+					var curView = this.focus.focusView || this.views.views[0];  //if no focusView than only one view
+					curView.content.decorateEvent(e);
+					this.onRowClick(e);
+				}
+				break;
+			case dk.SPACE:
+				if(!this.edit.isEditing()){
+					colIdx = this.focus.getHeaderIndex();
+					if(colIdx >= 0) {
+						this.setSortIndex(colIdx);
+						break;
+					}else {
+						this.selection.clickSelect(this.focus.rowIndex, dojo.isCopyKey(e), e.shiftKey);
+					}
+					dojo.stopEvent(e);
+				}
+				break;
+			case dk.TAB:
+				this.focus[e.shiftKey ? 'previousKey' : 'nextKey'](e);
+				break;
+			case dk.LEFT_ARROW:
+			case dk.RIGHT_ARROW:
+				if(!this.edit.isEditing()){
+					var keyCode = e.keyCode;  // IE seems to lose after stopEvent when modifier keys
+					dojo.stopEvent(e);
+					colIdx = this.focus.getHeaderIndex();
+					if (colIdx >= 0 && (e.shiftKey && e.ctrlKey)){
+						this.focus.colSizeAdjust(e, colIdx, (keyCode == dk.LEFT_ARROW ? -1 : 1)*5);
+					}
+					else{
+						var offset = (keyCode == dk.LEFT_ARROW) ? 1 : -1;
+						if(dojo._isBodyLtr()){ offset *= -1; }
+						this.focus.move(0, offset);
+					}
+				}
+				break;
+			case dk.UP_ARROW:
+				if(!this.edit.isEditing() && this.focus.rowIndex !== 0){
+					dojo.stopEvent(e);
+					this.focus.move(-1, 0);
+				}
+				break;
+			case dk.DOWN_ARROW:
+				if(!this.edit.isEditing() && this.focus.rowIndex+1 != this.rowCount){
+					dojo.stopEvent(e);
+					this.focus.move(1, 0);
+				}
+				break;
+			case dk.PAGE_UP:
+				if(!this.edit.isEditing() && this.focus.rowIndex !== 0){
+					dojo.stopEvent(e);
+					if(this.focus.rowIndex != this.scroller.firstVisibleRow+1){
+						this.focus.move(this.scroller.firstVisibleRow-this.focus.rowIndex, 0);
+					}else{
+						this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex-1));
+						this.focus.move(this.scroller.firstVisibleRow-this.scroller.lastVisibleRow+1, 0);
+					}
+				}
+				break;
+			case dk.PAGE_DOWN:
+				if(!this.edit.isEditing() && this.focus.rowIndex+1 != this.rowCount){
+					dojo.stopEvent(e);
+					if(this.focus.rowIndex != this.scroller.lastVisibleRow-1){
+						this.focus.move(this.scroller.lastVisibleRow-this.focus.rowIndex-1, 0);
+					}else{
+						this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex+1));
+						this.focus.move(this.scroller.lastVisibleRow-this.scroller.firstVisibleRow-1, 0);
+					}
+				}
+				break;
+			default:
+				break;
+		}
+	},
+	
+	onMouseOver: function(e){
+		// summary:
+		//		Event fired when mouse is over the grid.
+		// e: Event
+		//		Decorated event object contains reference to grid, cell, and rowIndex
+		e.rowIndex == -1 ? this.onHeaderCellMouseOver(e) : this.onCellMouseOver(e);
+	},
+	
+	onMouseOut: function(e){
+		// summary:
+		//		Event fired when mouse moves out of the grid.
+		// e: Event
+		//		Decorated event object that contains reference to grid, cell, and rowIndex
+		e.rowIndex == -1 ? this.onHeaderCellMouseOut(e) : this.onCellMouseOut(e);
+	},
+	
+	onMouseDown: function(e){
+		// summary:
+		//		Event fired when mouse is down inside grid.
+		// e: Event
+		//		Decorated event object that contains reference to grid, cell, and rowIndex
+		e.rowIndex == -1 ? this.onHeaderCellMouseDown(e) : this.onCellMouseDown(e);
+	},
+	
+	onMouseOverRow: function(e){
+		// summary:
+		//		Event fired when mouse is over any row (data or header).
+		// e: Event
+		//		Decorated event object contains reference to grid, cell, and rowIndex
+		if(!this.rows.isOver(e.rowIndex)){
+			this.rows.setOverRow(e.rowIndex);
+			e.rowIndex == -1 ? this.onHeaderMouseOver(e) : this.onRowMouseOver(e);
+		}
+	},
+	onMouseOutRow: function(e){
+		// summary:
+		//		Event fired when mouse moves out of any row (data or header).
+		// e: Event
+		//		Decorated event object contains reference to grid, cell, and rowIndex
+		if(this.rows.isOver(-1)){
+			this.onHeaderMouseOut(e);
+		}else if(!this.rows.isOver(-2)){
+			this.rows.setOverRow(-2);
+			this.onRowMouseOut(e);
+		}
+	},
+	
+	onMouseDownRow: function(e){
+		// summary:
+		//		Event fired when mouse is down inside grid row
+		// e: Event
+		//		Decorated event object that contains reference to grid, cell, and rowIndex
+		if(e.rowIndex != -1)
+			this.onRowMouseDown(e);
+	},
+
+	// cell events
+	onCellMouseOver: function(e){
+		// summary:
+		//		Event fired when mouse is over a cell.
+		// e: Event
+		//		Decorated event object contains reference to grid, cell, and rowIndex
+		if(e.cellNode){
+			dojo.addClass(e.cellNode, this.cellOverClass);
+		}
+	},
+	
+	onCellMouseOut: function(e){
+		// summary:
+		//		Event fired when mouse moves out of a cell.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		if(e.cellNode){
+			dojo.removeClass(e.cellNode, this.cellOverClass);
+		}
+	},
+	
+	onCellMouseDown: function(e){
+		// summary:
+		//		Event fired when mouse is down in a header cell.
+		// e: Event
+		// 		Decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onCellClick: function(e){
+		// summary:
+		//		Event fired when a cell is clicked.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		this._click[0] = this._click[1];
+		this._click[1] = e;
+		if(!this.edit.isEditCell(e.rowIndex, e.cellIndex)){
+			this.focus.setFocusCell(e.cell, e.rowIndex);
+		}
+		this.onRowClick(e);
+	},
+
+	onCellDblClick: function(e){
+		// summary:
+		//		Event fired when a cell is double-clicked.
+		// e: Event
+		//		Decorated event object contains reference to grid, cell, and rowIndex
+		if(this._click.length > 1 && dojo.isIE){
+			this.edit.setEditCell(this._click[1].cell, this._click[1].rowIndex);
+		}else if(this._click.length > 1 && this._click[0].rowIndex != this._click[1].rowIndex){
+			this.edit.setEditCell(this._click[0].cell, this._click[0].rowIndex);
+		}else{
+			this.edit.setEditCell(e.cell, e.rowIndex);
+		}
+		this.onRowDblClick(e);
+	},
+
+	onCellContextMenu: function(e){
+		// summary:
+		//		Event fired when a cell context menu is accessed via mouse right click.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		this.onRowContextMenu(e);
+	},
+
+	onCellFocus: function(inCell, inRowIndex){
+		// summary:
+		//		Event fired when a cell receives focus.
+		// inCell: Object
+		//		Cell object containing properties of the grid column.
+		// inRowIndex: Integer
+		//		Index of the grid row
+		this.edit.cellFocus(inCell, inRowIndex);
+	},
+
+	// row events
+	onRowClick: function(e){
+		// summary:
+		//		Event fired when a row is clicked.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		this.edit.rowClick(e);
+		this.selection.clickSelectEvent(e);
+	},
+
+	onRowDblClick: function(e){
+		// summary:
+		//		Event fired when a row is double clicked.
+		// e: Event
+		//		decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onRowMouseOver: function(e){
+		// summary:
+		//		Event fired when mouse moves over a data row.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onRowMouseOut: function(e){
+		// summary:
+		//		Event fired when mouse moves out of a data row.
+		// e: Event
+		// 		Decorated event object contains reference to grid, cell, and rowIndex
+	},
+	
+	onRowMouseDown: function(e){
+		// summary:
+		//		Event fired when mouse is down in a row.
+		// e: Event
+		// 		Decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onRowContextMenu: function(e){
+		// summary:
+		//		Event fired when a row context menu is accessed via mouse right click.
+		// e: Event
+		// 		Decorated event object which contains reference to grid, cell, and rowIndex
+		dojo.stopEvent(e);
+	},
+
+	// header events
+	onHeaderMouseOver: function(e){
+		// summary:
+		//		Event fired when mouse moves over the grid header.
+		// e: Event
+		// 		Decorated event object contains reference to grid, cell, and rowIndex
+	},
+
+	onHeaderMouseOut: function(e){
+		// summary:
+		//		Event fired when mouse moves out of the grid header.
+		// e: Event
+		// 		Decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onHeaderCellMouseOver: function(e){
+		// summary:
+		//		Event fired when mouse moves over a header cell.
+		// e: Event
+		// 		Decorated event object which contains reference to grid, cell, and rowIndex
+		if(e.cellNode){
+			dojo.addClass(e.cellNode, this.cellOverClass);
+		}
+	},
+
+	onHeaderCellMouseOut: function(e){
+		// summary:
+		//		Event fired when mouse moves out of a header cell.
+		// e: Event
+		// 		Decorated event object which contains reference to grid, cell, and rowIndex
+		if(e.cellNode){
+			dojo.removeClass(e.cellNode, this.cellOverClass);
+		}
+	},
+	
+	onHeaderCellMouseDown: function(e) {
+		// summary:
+		//		Event fired when mouse is down in a header cell.
+		// e: Event
+		// 		Decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onHeaderClick: function(e){
+		// summary:
+		//		Event fired when the grid header is clicked.
+		// e: Event
+		// Decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onHeaderCellClick: function(e){
+		// summary:
+		//		Event fired when a header cell is clicked.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		this.setSortIndex(e.cell.index);
+		this.onHeaderClick(e);
+	},
+
+	onHeaderDblClick: function(e){
+		// summary:
+		//		Event fired when the grid header is double clicked.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+	},
+
+	onHeaderCellDblClick: function(e){
+		// summary:
+		//		Event fired when a header cell is double clicked.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		this.onHeaderDblClick(e);
+	},
+
+	onHeaderCellContextMenu: function(e){
+		// summary:
+		//		Event fired when a header cell context menu is accessed via mouse right click.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		this.onHeaderContextMenu(e);
+	},
+
+	onHeaderContextMenu: function(e){
+		// summary:
+		//		Event fired when the grid header context menu is accessed via mouse right click.
+		// e: Event
+		//		Decorated event object which contains reference to grid, cell, and rowIndex
+		if(!this.headerMenu){
+			dojo.stopEvent(e);
+		}
+	},
+
+	// editing
+	onStartEdit: function(inCell, inRowIndex){
+		// summary:
+		//		Event fired when editing is started for a given grid cell
+		// inCell: Object
+		//		Cell object containing properties of the grid column.
+		// inRowIndex: Integer
+		//		Index of the grid row
+	},
+
+	onApplyCellEdit: function(inValue, inRowIndex, inFieldIndex){
+		// summary:
+		//		Event fired when editing is applied for a given grid cell
+		// inValue: String
+		//		Value from cell editor
+		// inRowIndex: Integer
+		//		Index of the grid row
+		// inFieldIndex: Integer
+		//		Index in the grid's data store
+	},
+
+	onCancelEdit: function(inRowIndex){
+		// summary:
+		//		Event fired when editing is cancelled for a given grid cell
+		// inRowIndex: Integer
+		//		Index of the grid row
+	},
+
+	onApplyEdit: function(inRowIndex){
+		// summary:
+		//		Event fired when editing is applied for a given grid row
+		// inRowIndex: Integer
+		//		Index of the grid row
+	},
+
+	onCanSelect: function(inRowIndex){
+		// summary:
+		//		Event to determine if a grid row may be selected
+		// inRowIndex: Integer
+		//		Index of the grid row
+		// returns: Boolean
+		//		true if the row can be selected
+		return true;
+	},
+
+	onCanDeselect: function(inRowIndex){
+		// summary:
+		//		Event to determine if a grid row may be deselected
+		// inRowIndex: Integer
+		//		Index of the grid row
+		// returns: Boolean
+		//		true if the row can be deselected
+		return true;
+	},
+
+	onSelected: function(inRowIndex){
+		// summary:
+		//		Event fired when a grid row is selected
+		// inRowIndex: Integer
+		//		Index of the grid row
+		this.updateRowStyles(inRowIndex);
+	},
+
+	onDeselected: function(inRowIndex){
+		// summary:
+		//		Event fired when a grid row is deselected
+		// inRowIndex: Integer
+		//		Index of the grid row
+		this.updateRowStyles(inRowIndex);
+	},
+
+	onSelectionChanged: function(){
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.i18n"] = true;
+dojo.provide("dojo.i18n");
+
+/*=====
+dojo.i18n = {
+	// summary: Utility classes to enable loading of resources for internationalization (i18n)
+};
+=====*/
+
+dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
+	//	summary:
+	//		Returns an Object containing the localization for a given resource
+	//		bundle in a package, matching the specified locale.
+	//	description:
+	//		Returns a hash containing name/value pairs in its prototypesuch
+	//		that values can be easily overridden.  Throws an exception if the
+	//		bundle is not found.  Bundle must have already been loaded by
+	//		`dojo.requireLocalization()` or by a build optimization step.  NOTE:
+	//		try not to call this method as part of an object property
+	//		definition (`var foo = { bar: dojo.i18n.getLocalization() }`).  In
+	//		some loading situations, the bundle may not be available in time
+	//		for the object definition.  Instead, call this method inside a
+	//		function that is run after all modules load or the page loads (like
+	//		in `dojo.addOnLoad()`), or in a widget lifecycle method.
+	//	packageName:
+	//		package which is associated with this resource
+	//	bundleName:
+	//		the base filename of the resource bundle (without the ".js" suffix)
+	//	locale:
+	//		the variant to load (optional).  By default, the locale defined by
+	//		the host environment: dojo.locale
+
+	locale = dojo.i18n.normalizeLocale(locale);
+
+	// look for nearest locale match
+	var elements = locale.split('-');
+	var module = [packageName,"nls",bundleName].join('.');
+	var bundle = dojo._loadedModules[module];
+	if(bundle){
+		var localization;
+		for(var i = elements.length; i > 0; i--){
+			var loc = elements.slice(0, i).join('_');
+			if(bundle[loc]){
+				localization = bundle[loc];
+				break;
+			}
+		}
+		if(!localization){
+			localization = bundle.ROOT;
+		}
+
+		// make a singleton prototype so that the caller won't accidentally change the values globally
+		if(localization){
+			var clazz = function(){};
+			clazz.prototype = localization;
+			return new clazz(); // Object
+		}
+	}
+
+	throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
+};
+
+dojo.i18n.normalizeLocale = function(/*String?*/locale){
+	//	summary:
+	//		Returns canonical form of locale, as used by Dojo.
+	//
+	//  description:
+	//		All variants are case-insensitive and are separated by '-' as specified in [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
+	//		If no locale is specified, the dojo.locale is returned.  dojo.locale is defined by
+	//		the user agent's locale unless overridden by djConfig.
+
+	var result = locale ? locale.toLowerCase() : dojo.locale;
+	if(result == "root"){
+		result = "ROOT";
+	}
+	return result; // String
+};
+
+dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
+	//	summary:
+	//		See dojo.requireLocalization()
+	//	description:
+	// 		Called by the bootstrap, but factored out so that it is only
+	// 		included in the build when needed.
+
+	var targetLocale = dojo.i18n.normalizeLocale(locale);
+ 	var bundlePackage = [moduleName, "nls", bundleName].join(".");
+	// NOTE: 
+	//		When loading these resources, the packaging does not match what is
+	//		on disk.  This is an implementation detail, as this is just a
+	//		private data structure to hold the loaded resources.  e.g.
+	//		`tests/hello/nls/en-us/salutations.js` is loaded as the object
+	//		`tests.hello.nls.salutations.en_us={...}` The structure on disk is
+	//		intended to be most convenient for developers and translators, but
+	//		in memory it is more logical and efficient to store in a different
+	//		order.  Locales cannot use dashes, since the resulting path will
+	//		not evaluate as valid JS, so we translate them to underscores.
+	
+	//Find the best-match locale to load if we have available flat locales.
+	var bestLocale = "";
+	if(availableFlatLocales){
+		var flatLocales = availableFlatLocales.split(",");
+		for(var i = 0; i < flatLocales.length; i++){
+			//Locale must match from start of string.
+			//Using ["indexOf"] so customBase builds do not see
+			//this as a dojo._base.array dependency.
+			if(targetLocale["indexOf"](flatLocales[i]) == 0){
+				if(flatLocales[i].length > bestLocale.length){
+					bestLocale = flatLocales[i];
+				}
+			}
+		}
+		if(!bestLocale){
+			bestLocale = "ROOT";
+		}		
+	}
+
+	//See if the desired locale is already loaded.
+	var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
+	var bundle = dojo._loadedModules[bundlePackage];
+	var localizedBundle = null;
+	if(bundle){
+		if(dojo.config.localizationComplete && bundle._built){return;}
+		var jsLoc = tempLocale.replace(/-/g, '_');
+		var translationPackage = bundlePackage+"."+jsLoc;
+		localizedBundle = dojo._loadedModules[translationPackage];
+	}
+
+	if(!localizedBundle){
+		bundle = dojo["provide"](bundlePackage);
+		var syms = dojo._getModuleSymbols(moduleName);
+		var modpath = syms.concat("nls").join("/");
+		var parent;
+
+		dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function(loc){
+			var jsLoc = loc.replace(/-/g, '_');
+			var translationPackage = bundlePackage + "." + jsLoc;
+			var loaded = false;
+			if(!dojo._loadedModules[translationPackage]){
+				// Mark loaded whether it's found or not, so that further load attempts will not be made
+				dojo["provide"](translationPackage);
+				var module = [modpath];
+				if(loc != "ROOT"){module.push(loc);}
+				module.push(bundleName);
+				var filespec = module.join("/") + '.js';
+				loaded = dojo._loadPath(filespec, null, function(hash){
+					// Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
+					var clazz = function(){};
+					clazz.prototype = parent;
+					bundle[jsLoc] = new clazz();
+					for(var j in hash){ bundle[jsLoc][j] = hash[j]; }
+				});
+			}else{
+				loaded = true;
+			}
+			if(loaded && bundle[jsLoc]){
+				parent = bundle[jsLoc];
+			}else{
+				bundle[jsLoc] = parent;
+			}
+			
+			if(availableFlatLocales){
+				//Stop the locale path searching if we know the availableFlatLocales, since
+				//the first call to this function will load the only bundle that is needed.
+				return true;
+			}
+		});
+	}
+
+	//Save the best locale bundle as the target locale bundle when we know the
+	//the available bundles.
+	if(availableFlatLocales && targetLocale != bestLocale){
+		bundle[targetLocale.replace(/-/g, '_')] = bundle[bestLocale.replace(/-/g, '_')];
+	}
+};
+
+(function(){
+	// If other locales are used, dojo.requireLocalization should load them as
+	// well, by default. 
+	// 
+	// Override dojo.requireLocalization to do load the default bundle, then
+	// iterate through the extraLocale list and load those translations as
+	// well, unless a particular locale was requested.
+
+	var extra = dojo.config.extraLocale;
+	if(extra){
+		if(!extra instanceof Array){
+			extra = [extra];
+		}
+
+		var req = dojo.i18n._requireLocalization;
+		dojo.i18n._requireLocalization = function(m, b, locale, availableFlatLocales){
+			req(m,b,locale, availableFlatLocales);
+			if(locale){return;}
+			for(var i=0; i<extra.length; i++){
+				req(m,b,extra[i], availableFlatLocales);
+			}
+		};
+	}
+})();
+
+dojo.i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
+	//	summary:
+	//		A helper method to assist in searching for locale-based resources.
+	//		Will iterate through the variants of a particular locale, either up
+	//		or down, executing a callback function.  For example, "en-us" and
+	//		true will try "en-us" followed by "en" and finally "ROOT".
+
+	locale = dojo.i18n.normalizeLocale(locale);
+
+	var elements = locale.split('-');
+	var searchlist = [];
+	for(var i = elements.length; i > 0; i--){
+		searchlist.push(elements.slice(0, i).join('-'));
+	}
+	searchlist.push(false);
+	if(down){searchlist.reverse();}
+
+	for(var j = searchlist.length - 1; j >= 0; j--){
+		var loc = searchlist[j] || "ROOT";
+		var stop = searchFunc(loc);
+		if(stop){ break; }
+	}
+};
+
+dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){
+	//	summary:
+	//		Load built, flattened resource bundles, if available for all
+	//		locales used in the page. Only called by built layer files.
+
+	function preload(locale){
+		locale = dojo.i18n.normalizeLocale(locale);
+		dojo.i18n._searchLocalePath(locale, true, function(loc){
+			for(var i=0; i<localesGenerated.length;i++){
+				if(localesGenerated[i] == loc){
+					dojo["require"](bundlePrefix+"_"+loc);
+					return true; // Boolean
+				}
+			}
+			return false; // Boolean
+		});
+	}
+	preload();
+	var extra = dojo.config.extraLocale||[];
+	for(var i=0; i<extra.length; i++){
+		preload(extra[i]);
+	}
+};
+
+}
+
+if(!dojo._hasResource["dojox.grid._Grid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid._Grid"] = true;
+dojo.provide("dojox.grid._Grid");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+(function(){
+	// NOTE: this is for backwards compatibility with Dojo 1.3
+	if(!dojo.isCopyKey){
+		dojo.isCopyKey = dojo.dnd.getCopyKeyState;
+	}
+	/*=====
+	dojox.grid.__CellDef = function(){
+		//	name: String?
+		//		The text to use in the header of the grid for this cell.
+		//	get: Function?
+		//		function(rowIndex){} rowIndex is of type Integer.  This
+		//		function will be called when a cell	requests data.  Returns the
+		//		unformatted data for the cell.
+		//	value: String?
+		//		If "get" is not specified, this is used as the data for the cell.
+		//	defaultValue: String?
+		//		If "get" and "value" aren't specified or if "get" returns an undefined
+		//		value, this is used as the data for the cell.  "formatter" is not run
+		//		on this if "get" returns an undefined value.
+		//	formatter: Function?
+		//		function(data, rowIndex){} data is of type anything, rowIndex
+		//		is of type Integer.  This function will be called after the cell
+		//		has its data but before it passes it back to the grid to render.
+		//		Returns the formatted version of the cell's data.
+		//	type: dojox.grid.cells._Base|Function?
+		//		TODO
+		//	editable: Boolean?
+		//		Whether this cell should be editable or not.
+		//	hidden: Boolean?
+		//		If true, the cell will not be displayed.
+		//	noresize: Boolean?
+		//		If true, the cell will not be able to be resized.
+		//	width: Integer|String?
+		//		A CSS size.  If it's an Integer, the width will be in em's.
+		//	colSpan: Integer?
+		//		How many columns to span this cell.  Will not work in the first
+		//		sub-row of cells.
+		//	rowSpan: Integer?
+		//		How many sub-rows to span this cell.
+		//	styles: String?
+		//		A string of styles to apply to both the header cell and main
+		//		grid cells.  Must end in a ';'.
+		//	headerStyles: String?
+		//		A string of styles to apply to just the header cell.  Must end
+		//		in a ';'
+		//	cellStyles: String?
+		//		A string of styles to apply to just the main grid cells.  Must
+		//		end in a ';'
+		//	classes: String?
+		//		A space separated list of classes to apply to both the header
+		//		cell and the main grid cells.
+		//	headerClasses: String?
+		//		A space separated list of classes to apply to just the header
+		//		cell.
+		//	cellClasses: String?
+		//		A space separated list of classes to apply to just the main
+		//		grid cells.
+		//	attrs: String?
+		//		A space separated string of attribute='value' pairs to add to
+		//		the header cell element and main grid cell elements.
+		this.name = name;
+		this.value = value;
+		this.get = get;
+		this.formatter = formatter;
+		this.type = type;
+		this.editable = editable;
+		this.hidden = hidden;
+		this.width = width;
+		this.colSpan = colSpan;
+		this.rowSpan = rowSpan;
+		this.styles = styles;
+		this.headerStyles = headerStyles;
+		this.cellStyles = cellStyles;
+		this.classes = classes;
+		this.headerClasses = headerClasses;
+		this.cellClasses = cellClasses;
+		this.attrs = attrs;
+	}
+	=====*/
+
+	/*=====
+	dojox.grid.__ViewDef = function(){
+		//	noscroll: Boolean?
+		//		If true, no scrollbars will be rendered without scrollbars.
+		//	width: Integer|String?
+		//		A CSS size.  If it's an Integer, the width will be in em's. If
+		//		"noscroll" is true, this value is ignored.
+		//	cells: dojox.grid.__CellDef[]|Array[dojox.grid.__CellDef[]]?
+		//		The structure of the cells within this grid.
+		//	type: String?
+		//		A string containing the constructor of a subclass of
+		//		dojox.grid._View.  If this is not specified, dojox.grid._View
+		//		is used.
+		//	defaultCell: dojox.grid.__CellDef?
+		//		A cell definition with default values for all cells in this view.  If
+		//		a property is defined in a cell definition in the "cells" array and
+		//		this property, the cell definition's property will override this
+		//		property's property.
+		//	onBeforeRow: Function?
+		//		function(rowIndex, cells){} rowIndex is of type Integer, cells
+		//		is of type Array[dojox.grid.__CellDef[]].  This function is called
+		//		before each row of data is rendered.  Before the header is
+		//		rendered, rowIndex will be -1.  "cells" is a reference to the
+		//		internal structure of this view's cells so any changes you make to
+		//		it will persist between calls.
+		//	onAfterRow: Function?
+		//		function(rowIndex, cells, rowNode){} rowIndex is of type Integer, cells
+		//		is of type Array[dojox.grid.__CellDef[]], rowNode is of type DOMNode.
+		//		This function is called	after each row of data is rendered.  After the
+		//		header is rendered, rowIndex will be -1.  "cells" is a reference to the
+		//		internal structure of this view's cells so any changes you make to
+		//		it will persist between calls.
+		this.noscroll = noscroll;
+		this.width = width;
+		this.cells = cells;
+		this.type = type;
+		this.defaultCell = defaultCell;
+		this.onBeforeRow = onBeforeRow;
+		this.onAfterRow = onAfterRow;
+	}
+	=====*/
+
+	dojo.declare('dojox.grid._Grid',
+		[ dijit._Widget, dijit._Templated, dojox.grid._Events ],
+		{
+		// summary:
+		// 		A grid widget with virtual scrolling, cell editing, complex rows,
+		// 		sorting, fixed columns, sizeable columns, etc.
+		//
+		//	description:
+		//		_Grid provides the full set of grid features without any
+		//		direct connection to a data store.
+		//
+		//		The grid exposes a get function for the grid, or optionally
+		//		individual columns, to populate cell contents.
+		//
+		//		The grid is rendered based on its structure, an object describing
+		//		column and cell layout.
+		//
+		//	example:
+		//		A quick sample:
+		//
+		//		define a get function
+		//	|	function get(inRowIndex){ // called in cell context
+		//	|		return [this.index, inRowIndex].join(', ');
+		//	|	}
+		//
+		//		define the grid structure:
+		//	|	var structure = [ // array of view objects
+		//	|		{ cells: [// array of rows, a row is an array of cells
+		//	|			[
+		//	|				{ name: "Alpha", width: 6 },
+		//	|				{ name: "Beta" },
+		//	|				{ name: "Gamma", get: get }]
+		//	|		]}
+		//	|	];
+		//
+		//	|	<div id="grid"
+		//	|		rowCount="100" get="get"
+		//	|		structure="structure"
+		//	|		dojoType="dojox.grid._Grid"></div>
+
+		templateString:"<div hidefocus=\"hidefocus\" wairole=\"grid\" dojoAttachEvent=\"onmouseout:_mouseOut\">\n\t<div class=\"dojoxGridMasterHeader\" dojoAttachPoint=\"viewsHeaderNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterView\" dojoAttachPoint=\"viewsNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterMessages\" style=\"display: none;\" dojoAttachPoint=\"messagesNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n",
+
+		// classTag: String
+		// 		CSS class applied to the grid's domNode
+		classTag: 'dojoxGrid',
+
+		// settings
+		// rowCount: Integer
+		//		Number of rows to display.
+		rowCount: 5,
+
+		// keepRows: Integer
+		//		Number of rows to keep in the rendering cache.
+		keepRows: 75,
+
+		// rowsPerPage: Integer
+		//		Number of rows to render at a time.
+		rowsPerPage: 25,
+
+		// autoWidth: Boolean
+		//		If autoWidth is true, grid width is automatically set to fit the data.
+		autoWidth: false,
+		
+		// initialWidth: String
+		//		A css string to use to set our initial width (only used if autoWidth
+		//		is true).  The first rendering of the grid will be this width, any
+		//		resizing of columns, etc will result in the grid switching to 
+		//		autoWidth mode.  Note, this width will override any styling in a
+		//		stylesheet or directly on the node.
+		initialWidth: "",
+
+		// autoHeight: Boolean|Integer
+		//		If autoHeight is true, grid height is automatically set to fit the data.
+		//		If it is an integer, the height will be automatically set to fit the data
+		//		if there are fewer than that many rows - and the height will be set to show
+		//		that many rows if there are more
+		autoHeight: '',
+
+		// rowHeight: Integer
+		//		If rowHeight is set to a positive number, it will define the height of the rows
+		//		in pixels. This can provide a significant performance advantage, since it
+		//		eliminates the need to measure row sizes during rendering, which is one
+		// 		the primary bottlenecks in the DataGrid's performance. 
+		rowHeight: 0,
+		
+		// autoRender: Boolean
+		//		If autoRender is true, grid will render itself after initialization.
+		autoRender: true,
+
+		// defaultHeight: String
+		//		default height of the grid, measured in any valid css unit.
+		defaultHeight: '15em',
+		
+		// height: String
+		//		explicit height of the grid, measured in any valid css unit.  This will be populated (and overridden)
+		//		if the height: css attribute exists on the source node.
+		height: '',
+
+		// structure: dojox.grid.__ViewDef|dojox.grid.__ViewDef[]|dojox.grid.__CellDef[]|Array[dojox.grid.__CellDef[]]
+		//		View layout defintion.
+		structure: null,
+
+		// elasticView: Integer
+		//	Override defaults and make the indexed grid view elastic, thus filling available horizontal space.
+		elasticView: -1,
+
+		// singleClickEdit: boolean
+		//		Single-click starts editing. Default is double-click
+		singleClickEdit: false,
+
+		// selectionMode: String
+		//		Set the selection mode of grid's Selection.  Value must be 'single', 'multiple',
+		//		or 'extended'.  Default is 'extended'.
+		selectionMode: 'extended',
+
+		// rowSelector: Boolean|String
+		// 		If set to true, will add a row selector view to this grid.  If set to a CSS width, will add
+		// 		a row selector of that width to this grid.
+		rowSelector: '',
+
+		// columnReordering: Boolean
+		// 		If set to true, will add drag and drop reordering to views with one row of columns.
+		columnReordering: false,
+
+		// headerMenu: dijit.Menu
+		// 		If set to a dijit.Menu, will use this as a context menu for the grid headers.
+		headerMenu: null,
+
+		// placeholderLabel: String
+		// 		Label of placeholders to search for in the header menu to replace with column toggling
+		// 		menu items.
+		placeholderLabel: "GridColumns",
+		
+		// selectable: Boolean
+		//		Set to true if you want to be able to select the text within the grid.
+		selectable: false,
+		
+		// Used to store the last two clicks, to ensure double-clicking occurs based on the intended row
+		_click: null,
+		
+		// loadingMessage: String
+		//  Message that shows while the grid is loading
+		loadingMessage: "<span class='dojoxGridLoading'>${loadingState}</span>",
+
+		// errorMessage: String
+		//  Message that shows when the grid encounters an error loading
+		errorMessage: "<span class='dojoxGridError'>${errorState}</span>",
+
+		// noDataMessage: String
+		//  Message that shows if the grid has no data - wrap it in a 
+		//  span with class 'dojoxGridNoData' if you want it to be
+		//  styled similar to the loading and error messages
+		noDataMessage: "",
+		
+		// escapeHTMLInData: Boolean
+		//		This will escape HTML brackets from the data to prevent HTML from 
+		// 		user-inputted data being rendered with may contain JavaScript and result in 
+		// 		XSS attacks. This is true by default, and it is recommended that it remain 
+		// 		true. Setting this to false will allow data to be displayed in the grid without 
+		// 		filtering, and should be only used if it is known that the data won't contain 
+		// 		malicious scripts. If HTML is needed in grid cells, it is recommended that 
+		// 		you use the formatter function to generate the HTML (the output of 
+		// 		formatter functions is not filtered, even with escapeHTMLInData set to true).
+		escapeHTMLInData: true,	
+		
+		// formatterScope: Object
+		//		An object to execute format functions within.  If not set, the
+		//		format functions will execute within the scope of the cell that
+		//		has a format function.
+		formatterScope: null,
+		
+		// editable: boolean
+		// indicates if the grid contains editable cells, default is false
+		// set to true if editable cell encountered during rendering 
+		editable: false,
+		
+		// private
+		sortInfo: 0,
+		themeable: true,
+		_placeholders: null,
+
+		// _layoutClass: Object
+		//	The class to use for our layout - can be overridden by grid subclasses
+		_layoutClass: dojox.grid._Layout,
+
+		// initialization
+		buildRendering: function(){
+			this.inherited(arguments);
+			if(!this.domNode.getAttribute('tabIndex')){
+				this.domNode.tabIndex = "0";
+			}
+			this.createScroller();
+			this.createLayout();
+			this.createViews();
+			this.createManagers();
+
+			this.createSelection();
+
+			this.connect(this.selection, "onSelected", "onSelected");
+			this.connect(this.selection, "onDeselected", "onDeselected");
+			this.connect(this.selection, "onChanged", "onSelectionChanged");
+
+			dojox.html.metrics.initOnFontResize();
+			this.connect(dojox.html.metrics, "onFontResize", "textSizeChanged");
+			dojox.grid.util.funnelEvents(this.domNode, this, 'doKeyEvent', dojox.grid.util.keyEvents);
+			if (this.selectionMode != "none") {
+				dojo.attr(this.domNode, "aria-multiselectable", this.selectionMode == "single" ? "false" : "true");
+			}
+
+			dojo.addClass(this.domNode, this.classTag);
+			if(!this.isLeftToRight()){
+				dojo.addClass(this.domNode, this.classTag+"Rtl");
+			}
+		},
+		
+		postMixInProperties: function(){
+			this.inherited(arguments);
+			var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang);
+			this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages);
+			this.errorMessage = dojo.string.substitute(this.errorMessage, messages);
+			if(this.srcNodeRef && this.srcNodeRef.style.height){
+				this.height = this.srcNodeRef.style.height;
+			}
+			// Call this to update our autoheight to start out
+			this._setAutoHeightAttr(this.autoHeight, true);
+			this.lastScrollTop = this.scrollTop = 0;
+		},
+		
+		postCreate: function(){
+			this._placeholders = [];
+			this._setHeaderMenuAttr(this.headerMenu);
+			this._setStructureAttr(this.structure);
+			this._click = [];
+			this.inherited(arguments);
+			if(this.domNode && this.autoWidth && this.initialWidth){
+				this.domNode.style.width = this.initialWidth;
+			}
+			if (this.domNode && !this.editable){
+				// default value for aria-readonly is false, set to true if grid is not editable
+				dojo.attr(this.domNode,"aria-readonly", "true");
+			}
+		},
+
+		destroy: function(){
+			this.domNode.onReveal = null;
+			this.domNode.onSizeChange = null;
+
+			// Fixes IE domNode leak
+			delete this._click;
+
+			this.edit.destroy();
+			delete this.edit;
+
+			this.views.destroyViews();
+			if(this.scroller){
+				this.scroller.destroy();
+				delete this.scroller;
+			}
+			if(this.focus){
+				this.focus.destroy();
+				delete this.focus;
+			}
+			if(this.headerMenu&&this._placeholders.length){
+				dojo.forEach(this._placeholders, function(p){ p.unReplace(true); });
+				this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+			}
+			this.inherited(arguments);
+		},
+
+		_setAutoHeightAttr: function(ah, skipRender){
+			// Calculate our autoheight - turn it into a boolean or an integer
+			if(typeof ah == "string"){
+				if(!ah || ah == "false"){
+					ah = false;
+				}else if (ah == "true"){
+					ah = true;
+				}else{
+					ah = window.parseInt(ah, 10);
+				}
+			}
+			if(typeof ah == "number"){
+				if(isNaN(ah)){
+					ah = false;
+				}
+				// Autoheight must be at least 1, if it's a number.  If it's
+				// less than 0, we'll take that to mean "all" rows (same as 
+				// autoHeight=true - if it is equal to zero, we'll take that
+				// to mean autoHeight=false
+				if(ah < 0){
+					ah = true;
+				}else if (ah === 0){
+					ah = false;
+				}
+			}
+			this.autoHeight = ah;
+			if(typeof ah == "boolean"){
+				this._autoHeight = ah;
+			}else if(typeof ah == "number"){
+				this._autoHeight = (ah >= this.get('rowCount'));
+			}else{
+				this._autoHeight = false;
+			}
+			if(this._started && !skipRender){
+				this.render();
+			}
+		},
+
+		_getRowCountAttr: function(){
+			return this.updating && this.invalidated && this.invalidated.rowCount != undefined ?
+				this.invalidated.rowCount : this.rowCount;
+		},
+		
+		textSizeChanged: function(){
+			this.render();
+		},
+
+		sizeChange: function(){
+			this.update();
+		},
+
+		createManagers: function(){
+			// summary:
+			//		create grid managers for various tasks including rows, focus, selection, editing
+
+			// row manager
+			this.rows = new dojox.grid._RowManager(this);
+			// focus manager
+			this.focus = new dojox.grid._FocusManager(this);
+			// edit manager
+			this.edit = new dojox.grid._EditManager(this);
+		},
+
+		createSelection: function(){
+			// summary:	Creates a new Grid selection manager.
+
+			// selection manager
+			this.selection = new dojox.grid.Selection(this);
+		},
+
+		createScroller: function(){
+			// summary: Creates a new virtual scroller
+			this.scroller = new dojox.grid._Scroller();
+			this.scroller.grid = this;
+			this.scroller.renderRow = dojo.hitch(this, "renderRow");
+			this.scroller.removeRow = dojo.hitch(this, "rowRemoved");
+		},
+
+		createLayout: function(){
+			// summary: Creates a new Grid layout
+			this.layout = new this._layoutClass(this);
+			this.connect(this.layout, "moveColumn", "onMoveColumn");
+		},
+
+		onMoveColumn: function(){
+			this.render();
+		},
+		
+		onResizeColumn: function(/*int*/ cellIdx){
+			// Called when a column is resized.
+		},
+
+		// views
+		createViews: function(){
+			this.views = new dojox.grid._ViewManager(this);
+			this.views.createView = dojo.hitch(this, "createView");
+		},
+
+		createView: function(inClass, idx){
+			var c = dojo.getObject(inClass);
+			var view = new c({ grid: this, index: idx });
+			this.viewsNode.appendChild(view.domNode);
+			this.viewsHeaderNode.appendChild(view.headerNode);
+			this.views.addView(view);
+			return view;
+		},
+
+		buildViews: function(){
+			for(var i=0, vs; (vs=this.layout.structure[i]); i++){
+				this.createView(vs.type || dojox._scopeName + ".grid._View", i).setStructure(vs);
+			}
+			this.scroller.setContentNodes(this.views.getContentNodes());
+		},
+
+		_setStructureAttr: function(structure){
+			var s = structure;
+			if(s && dojo.isString(s)){
+				dojo.deprecated("dojox.grid._Grid.attr('structure', 'objVar')", "use dojox.grid._Grid.attr('structure', objVar) instead", "2.0");
+				s=dojo.getObject(s);
+			}
+			this.structure = s;
+			if(!s){
+				if(this.layout.structure){
+					s = this.layout.structure;
+				}else{
+					return;
+				}
+			}
+			this.views.destroyViews();
+			if(s !== this.layout.structure){
+				this.layout.setStructure(s);
+			}
+			this._structureChanged();
+		},
+
+		setStructure: function(/* dojox.grid.__ViewDef|dojox.grid.__ViewDef[]|dojox.grid.__CellDef[]|Array[dojox.grid.__CellDef[]] */ inStructure){
+			// summary:
+			//		Install a new structure and rebuild the grid.
+			dojo.deprecated("dojox.grid._Grid.setStructure(obj)", "use dojox.grid._Grid.attr('structure', obj) instead.", "2.0");
+			this._setStructureAttr(inStructure);
+		},
+		
+		getColumnTogglingItems: function(){
+			// Summary: returns an array of dijit.CheckedMenuItem widgets that can be
+			//		added to a menu for toggling columns on and off.
+			return dojo.map(this.layout.cells, function(cell){
+				if(!cell.menuItems){ cell.menuItems = []; }
+
+				var self = this;
+				var item = new dijit.CheckedMenuItem({
+					label: cell.name,
+					checked: !cell.hidden,
+					_gridCell: cell,
+					onChange: function(checked){
+						if(self.layout.setColumnVisibility(this._gridCell.index, checked)){
+							var items = this._gridCell.menuItems;
+							if(items.length > 1){
+								dojo.forEach(items, function(item){
+									if(item !== this){
+										item.setAttribute("checked", checked);
+									}
+								}, this);
+							}
+							checked = dojo.filter(self.layout.cells, function(c){
+								if(c.menuItems.length > 1){
+									dojo.forEach(c.menuItems, "item.attr('disabled', false);");
+								}else{
+									c.menuItems[0].attr('disabled', false);
+								}
+								return !c.hidden;
+							});
+							if(checked.length == 1){
+								dojo.forEach(checked[0].menuItems, "item.attr('disabled', true);");
+							}
+						}
+					},
+					destroy: function(){
+						var index = dojo.indexOf(this._gridCell.menuItems, this);
+						this._gridCell.menuItems.splice(index, 1);
+						delete this._gridCell;
+						dijit.CheckedMenuItem.prototype.destroy.apply(this, arguments);
+					}
+				});
+				cell.menuItems.push(item);
+				return item;
+			}, this); // dijit.CheckedMenuItem[]
+		},
+
+		_setHeaderMenuAttr: function(menu){
+			if(this._placeholders && this._placeholders.length){
+				dojo.forEach(this._placeholders, function(p){
+					p.unReplace(true);
+				});
+				this._placeholders = [];
+			}
+			if(this.headerMenu){
+				this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+			}
+			this.headerMenu = menu;
+			if(!menu){ return; }
+
+			this.headerMenu.bindDomNode(this.viewsHeaderNode);
+			if(this.headerMenu.getPlaceholders){
+				this._placeholders = this.headerMenu.getPlaceholders(this.placeholderLabel);
+			}
+		},
+
+		setHeaderMenu: function(/* dijit.Menu */ menu){
+			dojo.deprecated("dojox.grid._Grid.setHeaderMenu(obj)", "use dojox.grid._Grid.attr('headerMenu', obj) instead.", "2.0");
+			this._setHeaderMenuAttr(menu);
+		},
+		
+		setupHeaderMenu: function(){
+			if(this._placeholders && this._placeholders.length){
+				dojo.forEach(this._placeholders, function(p){
+					if(p._replaced){
+						p.unReplace(true);
+					}
+					p.replace(this.getColumnTogglingItems());
+				}, this);
+			}
+		},
+
+		_fetch: function(start){
+			this.setScrollTop(0);
+		},
+
+		getItem: function(inRowIndex){
+			return null;
+		},
+		
+		showMessage: function(message){
+			if(message){
+				this.messagesNode.innerHTML = message;
+				this.messagesNode.style.display = "";
+			}else{
+				this.messagesNode.innerHTML = "";
+				this.messagesNode.style.display = "none";
+			}
+		},
+
+		_structureChanged: function() {
+			this.buildViews();
+			if(this.autoRender && this._started){
+				this.render();
+			}
+		},
+
+		hasLayout: function() {
+			return this.layout.cells.length;
+		},
+
+		// sizing
+		resize: function(changeSize, resultSize){
+			// summary:
+			//		Update the grid's rendering dimensions and resize it
+			
+			// Calling sizeChange calls update() which calls _resize...so let's
+			// save our input values, if any, and use them there when it gets 
+			// called.  This saves us an extra call to _resize(), which can
+			// get kind of heavy.
+			this._pendingChangeSize = changeSize;
+			this._pendingResultSize = resultSize;
+			this.sizeChange();
+		},
+
+		_getPadBorder: function() {
+			this._padBorder = this._padBorder || dojo._getPadBorderExtents(this.domNode);
+			return this._padBorder;
+		},
+
+		_getHeaderHeight: function(){
+			var vns = this.viewsHeaderNode.style, t = vns.display == "none" ? 0 : this.views.measureHeader();
+			vns.height = t + 'px';
+			// header heights are reset during measuring so must be normalized after measuring.
+			this.views.normalizeHeaderNodeHeight();
+			return t;
+		},
+		
+		_resize: function(changeSize, resultSize){
+			// Restore our pending values, if any
+			changeSize = changeSize || this._pendingChangeSize;
+			resultSize = resultSize || this._pendingResultSize;
+			delete this._pendingChangeSize;
+			delete this._pendingResultSize;
+			// if we have set up everything except the DOM, we cannot resize
+			if(!this.domNode){ return; }
+			var pn = this.domNode.parentNode;
+			if(!pn || pn.nodeType != 1 || !this.hasLayout() || pn.style.visibility == "hidden" || pn.style.display == "none"){
+				return;
+			}
+			// useful measurement
+			var padBorder = this._getPadBorder();
+			var hh = undefined;
+			var h;
+			// grid height
+			if(this._autoHeight){
+				this.domNode.style.height = 'auto';
+				this.viewsNode.style.height = '';
+			}else if(typeof this.autoHeight == "number"){
+				h = hh = this._getHeaderHeight();
+				h += (this.scroller.averageRowHeight * this.autoHeight);
+				this.domNode.style.height = h + "px";
+			}else if(this.domNode.clientHeight <= padBorder.h){
+				if(pn == document.body){
+					this.domNode.style.height = this.defaultHeight;
+				}else if(this.height){
+					this.domNode.style.height = this.height;
+				}else{
+					this.fitTo = "parent";
+				}
+			}
+			// if we are given dimensions, size the grid's domNode to those dimensions
+			if(resultSize){
+				changeSize = resultSize;
+			}
+			if(changeSize){
+				dojo.marginBox(this.domNode, changeSize);
+				this.height = this.domNode.style.height;
+				delete this.fitTo;
+			}else if(this.fitTo == "parent"){
+				h = this._parentContentBoxHeight = this._parentContentBoxHeight || dojo._getContentBox(pn).h;
+				this.domNode.style.height = Math.max(0, h) + "px";
+			}
+			
+			var hasFlex = dojo.some(this.views.views, function(v){ return v.flexCells; });
+
+			if(!this._autoHeight && (h || dojo._getContentBox(this.domNode).h) === 0){
+				// We need to hide the header, since the Grid is essentially hidden.
+				this.viewsHeaderNode.style.display = "none";
+			}else{
+				// Otherwise, show the header and give it an appropriate height.
+				this.viewsHeaderNode.style.display = "block";
+				if(!hasFlex && hh === undefined){
+					hh = this._getHeaderHeight();
+				}
+			}
+			if(hasFlex){
+				hh = undefined;
+			}
+
+			// NOTE: it is essential that width be applied before height
+			// Header height can only be calculated properly after view widths have been set.
+			// This is because flex column width is naturally 0 in Firefox.
+			// Therefore prior to width sizing flex columns with spaces are maximally wrapped
+			// and calculated to be too tall.
+			this.adaptWidth();
+			this.adaptHeight(hh);
+
+			this.postresize();
+		},
+
+		adaptWidth: function() {
+			// private: sets width and position for views and update grid width if necessary
+			var doAutoWidth = (!this.initialWidth && this.autoWidth);
+			var w = doAutoWidth ? 0 : this.domNode.clientWidth || (this.domNode.offsetWidth - this._getPadBorder().w),
+				vw = this.views.arrange(1, w);
+			this.views.onEach("adaptWidth");
+			if(doAutoWidth){
+				this.domNode.style.width = vw + "px";
+			}
+		},
+
+		adaptHeight: function(inHeaderHeight){
+			// private: measures and normalizes header height, then sets view heights, and then updates scroller
+			// content extent
+			var t = inHeaderHeight === undefined ? this._getHeaderHeight() : inHeaderHeight;
+			var h = (this._autoHeight ? -1 : Math.max(this.domNode.clientHeight - t, 0) || 0);
+			this.views.onEach('setSize', [0, h]);
+			this.views.onEach('adaptHeight');
+			if(!this._autoHeight){
+				var numScroll = 0, numNoScroll = 0;
+				var noScrolls = dojo.filter(this.views.views, function(v){
+					var has = v.hasHScrollbar();
+					if(has){ numScroll++; }else{ numNoScroll++; }
+					return (!has);
+				});
+				if(numScroll > 0 && numNoScroll > 0){
+					dojo.forEach(noScrolls, function(v){
+						v.adaptHeight(true);
+					});
+				}
+			}
+			if(this.autoHeight === true || h != -1 || (typeof this.autoHeight == "number" && this.autoHeight >= this.get('rowCount'))){
+				this.scroller.windowHeight = h;
+			}else{
+				this.scroller.windowHeight = Math.max(this.domNode.clientHeight - t, 0);
+			}
+		},
+
+		// startup
+		startup: function(){
+			if(this._started){return;}
+			this.inherited(arguments);
+			if(this.autoRender){
+				this.render();
+			}
+		},
+
+		// render
+		render: function(){
+			// summary:
+			//	Render the grid, headers, and views. Edit and scrolling states are reset. To retain edit and
+			// scrolling states, see Update.
+
+			if(!this.domNode){return;}
+			if(!this._started){return;}
+
+			if(!this.hasLayout()) {
+				this.scroller.init(0, this.keepRows, this.rowsPerPage);
+				return;
+			}
+			//
+			this.update = this.defaultUpdate;
+			this._render();
+		},
+
+		_render: function(){
+			this.scroller.init(this.get('rowCount'), this.keepRows, this.rowsPerPage);
+			this.prerender();
+			this.setScrollTop(0);
+			this.postrender();
+		},
+
+		prerender: function(){
+			// if autoHeight, make sure scroller knows not to virtualize; everything must be rendered.
+			this.keepRows = this._autoHeight ? 0 : this.keepRows;
+			this.scroller.setKeepInfo(this.keepRows);
+			this.views.render();
+			this._resize();
+		},
+
+		postrender: function(){
+			this.postresize();
+			this.focus.initFocusView();
+			// make rows unselectable
+			dojo.setSelectable(this.domNode, this.selectable);
+		},
+
+		postresize: function(){
+			// views are position absolute, so they do not inflate the parent
+			if(this._autoHeight){
+				var size = Math.max(this.views.measureContent()) + 'px';
+				
+				this.viewsNode.style.height = size;
+			}
+		},
+
+		renderRow: function(inRowIndex, inNodes){
+			// summary: private, used internally to render rows
+			this.views.renderRow(inRowIndex, inNodes, this._skipRowRenormalize);
+		},
+
+		rowRemoved: function(inRowIndex){
+			// summary: private, used internally to remove rows
+			this.views.rowRemoved(inRowIndex);
+		},
+
+		invalidated: null,
+
+		updating: false,
+
+		beginUpdate: function(){
+			// summary:
+			//		Use to make multiple changes to rows while queueing row updating.
+			// NOTE: not currently supporting nested begin/endUpdate calls
+			this.invalidated = [];
+			this.updating = true;
+		},
+
+		endUpdate: function(){
+			// summary:
+			//		Use after calling beginUpdate to render any changes made to rows.
+			this.updating = false;
+			var i = this.invalidated, r;
+			if(i.all){
+				this.update();
+			}else if(i.rowCount != undefined){
+				this.updateRowCount(i.rowCount);
+			}else{
+				for(r in i){
+					this.updateRow(Number(r));
+				}
+			}
+			this.invalidated = [];
+		},
+
+		// update
+		defaultUpdate: function(){
+			// note: initial update calls render and subsequently this function.
+			if(!this.domNode){return;}
+			if(this.updating){
+				this.invalidated.all = true;
+				return;
+			}
+			//this.edit.saveState(inRowIndex);
+			this.lastScrollTop = this.scrollTop;
+			this.prerender();
+			this.scroller.invalidateNodes();
+			this.setScrollTop(this.lastScrollTop);
+			this.postrender();
+			//this.edit.restoreState(inRowIndex);
+		},
+
+		update: function(){
+			// summary:
+			//		Update the grid, retaining edit and scrolling states.
+			this.render();
+		},
+
+		updateRow: function(inRowIndex){
+			// summary:
+			//		Render a single row.
+			// inRowIndex: Integer
+			//		Index of the row to render
+			inRowIndex = Number(inRowIndex);
+			if(this.updating){
+				this.invalidated[inRowIndex]=true;
+			}else{
+				this.views.updateRow(inRowIndex);
+				this.scroller.rowHeightChanged(inRowIndex);
+			}
+		},
+
+		updateRows: function(startIndex, howMany){
+			// summary:
+			//		Render consecutive rows at once.
+			// startIndex: Integer
+			//		Index of the starting row to render
+			// howMany: Integer
+			//		How many rows to update.
+			startIndex = Number(startIndex);
+			howMany = Number(howMany);
+			var i;
+			if(this.updating){
+				for(i=0; i<howMany; i++){
+					this.invalidated[i+startIndex]=true;
+				}
+			}else{
+				for(i=0; i<howMany; i++){
+					this.views.updateRow(i+startIndex, this._skipRowRenormalize);
+				}
+				this.scroller.rowHeightChanged(startIndex);
+			}
+		},
+
+		updateRowCount: function(inRowCount){
+			//summary:
+			//	Change the number of rows.
+			// inRowCount: int
+			//	Number of rows in the grid.
+			if(this.updating){
+				this.invalidated.rowCount = inRowCount;
+			}else{
+				this.rowCount = inRowCount;
+				this._setAutoHeightAttr(this.autoHeight, true);
+				if(this.layout.cells.length){
+					this.scroller.updateRowCount(inRowCount);
+				}
+				this._resize();				
+				if(this.layout.cells.length){
+					this.setScrollTop(this.scrollTop);
+				}
+			}
+		},
+
+		updateRowStyles: function(inRowIndex){
+			// summary:
+			//		Update the styles for a row after it's state has changed.
+			this.views.updateRowStyles(inRowIndex);
+		},
+		getRowNode: function(inRowIndex){
+			// summary:
+			//		find the rowNode that is not a rowSelector
+			if (this.focus.focusView && !(this.focus.focusView instanceof dojox.grid._RowSelector)){
+					return this.focus.focusView.rowNodes[inRowIndex];
+			}else{ // search through views
+				for (var i = 0, cView; (cView = this.views.views[i]); i++) {
+					if (!(cView instanceof dojox.grid._RowSelector)) {
+						return cView.rowNodes[inRowIndex];
+					}
+				}
+			}
+			return null;
+		},
+		rowHeightChanged: function(inRowIndex){
+			// summary:
+			//		Update grid when the height of a row has changed. Row height is handled automatically as rows
+			//		are rendered. Use this function only to update a row's height outside the normal rendering process.
+			// inRowIndex: Integer
+			// 		index of the row that has changed height
+
+			this.views.renormalizeRow(inRowIndex);
+			this.scroller.rowHeightChanged(inRowIndex);
+		},
+
+		// fastScroll: Boolean
+		//		flag modifies vertical scrolling behavior. Defaults to true but set to false for slower
+		//		scroll performance but more immediate scrolling feedback
+		fastScroll: true,
+
+		delayScroll: false,
+
+		// scrollRedrawThreshold: int
+		//	pixel distance a user must scroll vertically to trigger grid scrolling.
+		scrollRedrawThreshold: (dojo.isIE ? 100 : 50),
+
+		// scroll methods
+		scrollTo: function(inTop){
+			// summary:
+			//		Vertically scroll the grid to a given pixel position
+			// inTop: Integer
+			//		vertical position of the grid in pixels
+			if(!this.fastScroll){
+				this.setScrollTop(inTop);
+				return;
+			}
+			var delta = Math.abs(this.lastScrollTop - inTop);
+			this.lastScrollTop = inTop;
+			if(delta > this.scrollRedrawThreshold || this.delayScroll){
+				this.delayScroll = true;
+				this.scrollTop = inTop;
+				this.views.setScrollTop(inTop);
+				if(this._pendingScroll){
+					window.clearTimeout(this._pendingScroll);
+				}
+				var _this = this;
+				this._pendingScroll = window.setTimeout(function(){
+					delete _this._pendingScroll;
+					_this.finishScrollJob();
+				}, 200);
+			}else{
+				this.setScrollTop(inTop);
+			}
+		},
+
+		finishScrollJob: function(){
+			this.delayScroll = false;
+			this.setScrollTop(this.scrollTop);
+		},
+
+		setScrollTop: function(inTop){
+			this.scroller.scroll(this.views.setScrollTop(inTop));
+		},
+
+		scrollToRow: function(inRowIndex){
+			// summary:
+			//		Scroll the grid to a specific row.
+			// inRowIndex: Integer
+			// 		grid row index
+			this.setScrollTop(this.scroller.findScrollTop(inRowIndex) + 1);
+		},
+
+		// styling (private, used internally to style individual parts of a row)
+		styleRowNode: function(inRowIndex, inRowNode){
+			if(inRowNode){
+				this.rows.styleRowNode(inRowIndex, inRowNode);
+			}
+		},
+		
+		// called when the mouse leaves the grid so we can deselect all hover rows
+		_mouseOut: function(e){
+			this.rows.setOverRow(-2);
+		},
+	
+		// cells
+		getCell: function(inIndex){
+			// summary:
+			//		Retrieves the cell object for a given grid column.
+			// inIndex: Integer
+			// 		Grid column index of cell to retrieve
+			// returns:
+			//		a grid cell
+			return this.layout.cells[inIndex];
+		},
+
+		setCellWidth: function(inIndex, inUnitWidth){
+			this.getCell(inIndex).unitWidth = inUnitWidth;
+		},
+
+		getCellName: function(inCell){
+			// summary: Returns the cell name of a passed cell
+			return "Cell " + inCell.index; // String
+		},
+
+		// sorting
+		canSort: function(inSortInfo){
+			// summary:
+			//		Determines if the grid can be sorted
+			// inSortInfo: Integer
+			//		Sort information, 1-based index of column on which to sort, positive for an ascending sort
+			// 		and negative for a descending sort
+			// returns: Boolean
+			//		True if grid can be sorted on the given column in the given direction
+		},
+
+		sort: function(){
+		},
+
+		getSortAsc: function(inSortInfo){
+			// summary:
+			//		Returns true if grid is sorted in an ascending direction.
+			inSortInfo = inSortInfo == undefined ? this.sortInfo : inSortInfo;
+			return Boolean(inSortInfo > 0); // Boolean
+		},
+
+		getSortIndex: function(inSortInfo){
+			// summary:
+			//		Returns the index of the column on which the grid is sorted
+			inSortInfo = inSortInfo == undefined ? this.sortInfo : inSortInfo;
+			return Math.abs(inSortInfo) - 1; // Integer
+		},
+
+		setSortIndex: function(inIndex, inAsc){
+			// summary:
+			// 		Sort the grid on a column in a specified direction
+			// inIndex: Integer
+			// 		Column index on which to sort.
+			// inAsc: Boolean
+			// 		If true, sort the grid in ascending order, otherwise in descending order
+			var si = inIndex +1;
+			if(inAsc != undefined){
+				si *= (inAsc ? 1 : -1);
+			} else if(this.getSortIndex() == inIndex){
+				si = -this.sortInfo;
+			}
+			this.setSortInfo(si);
+		},
+
+		setSortInfo: function(inSortInfo){
+			if(this.canSort(inSortInfo)){
+				this.sortInfo = inSortInfo;
+				this.sort();
+				this.update();
+			}
+		},
+
+		// DOM event handler
+		doKeyEvent: function(e){
+			e.dispatch = 'do' + e.type;
+			this.onKeyEvent(e);
+		},
+
+		// event dispatch
+		//: protected
+		_dispatch: function(m, e){
+			if(m in this){
+				return this[m](e);
+			}
+			return false;
+		},
+
+		dispatchKeyEvent: function(e){
+			this._dispatch(e.dispatch, e);
+		},
+
+		dispatchContentEvent: function(e){
+			this.edit.dispatchEvent(e) || e.sourceView.dispatchContentEvent(e) || this._dispatch(e.dispatch, e);
+		},
+
+		dispatchHeaderEvent: function(e){
+			e.sourceView.dispatchHeaderEvent(e) || this._dispatch('doheader' + e.type, e);
+		},
+
+		dokeydown: function(e){
+			this.onKeyDown(e);
+		},
+
+		doclick: function(e){
+			if(e.cellNode){
+				this.onCellClick(e);
+			}else{
+				this.onRowClick(e);
+			}
+		},
+
+		dodblclick: function(e){
+			if(e.cellNode){
+				this.onCellDblClick(e);
+			}else{
+				this.onRowDblClick(e);
+			}
+		},
+
+		docontextmenu: function(e){
+			if(e.cellNode){
+				this.onCellContextMenu(e);
+			}else{
+				this.onRowContextMenu(e);
+			}
+		},
+
+		doheaderclick: function(e){
+			if(e.cellNode){
+				this.onHeaderCellClick(e);
+			}else{
+				this.onHeaderClick(e);
+			}
+		},
+
+		doheaderdblclick: function(e){
+			if(e.cellNode){
+				this.onHeaderCellDblClick(e);
+			}else{
+				this.onHeaderDblClick(e);
+			}
+		},
+
+		doheadercontextmenu: function(e){
+			if(e.cellNode){
+				this.onHeaderCellContextMenu(e);
+			}else{
+				this.onHeaderContextMenu(e);
+			}
+		},
+
+		// override to modify editing process
+		doStartEdit: function(inCell, inRowIndex){
+			this.onStartEdit(inCell, inRowIndex);
+		},
+
+		doApplyCellEdit: function(inValue, inRowIndex, inFieldIndex){
+			this.onApplyCellEdit(inValue, inRowIndex, inFieldIndex);
+		},
+
+		doCancelEdit: function(inRowIndex){
+			this.onCancelEdit(inRowIndex);
+		},
+
+		doApplyEdit: function(inRowIndex){
+			this.onApplyEdit(inRowIndex);
+		},
+
+		// row editing
+		addRow: function(){
+			// summary:
+			//		Add a row to the grid.
+			this.updateRowCount(this.get('rowCount')+1);
+		},
+
+		removeSelectedRows: function(){
+			// summary:
+			//		Remove the selected rows from the grid.
+			if(this.allItemsSelected){
+				this.updateRowCount(0);
+			}else{
+				this.updateRowCount(Math.max(0, this.get('rowCount') - this.selection.getSelected().length));
+			}
+			this.selection.clear();
+		}
+
+	});
+
+	dojox.grid._Grid.markupFactory = function(props, node, ctor, cellFunc){
+		var d = dojo;
+		var widthFromAttr = function(n){
+			var w = d.attr(n, "width")||"auto";
+			if((w != "auto")&&(w.slice(-2) != "em")&&(w.slice(-1) != "%")){
+				w = parseInt(w, 10)+"px";
+			}
+			return w;
+		};
+		// if(!props.store){ console.debug("no store!"); }
+		// if a structure isn't referenced, do we have enough
+		// data to try to build one automatically?
+		if(	!props.structure &&
+			node.nodeName.toLowerCase() == "table"){
+
+			// try to discover a structure
+			props.structure = d.query("> colgroup", node).map(function(cg){
+				var sv = d.attr(cg, "span");
+				var v = {
+					noscroll: (d.attr(cg, "noscroll") == "true") ? true : false,
+					__span: (!!sv ? parseInt(sv, 10) : 1),
+					cells: []
+				};
+				if(d.hasAttr(cg, "width")){
+					v.width = widthFromAttr(cg);
+				}
+				return v; // for vendetta
+			});
+			if(!props.structure.length){
+				props.structure.push({
+					__span: Infinity,
+					cells: [] // catch-all view
+				});
+			}
+			// check to see if we're gonna have more than one view
+
+			// for each tr in our th, create a row of cells
+			d.query("thead > tr", node).forEach(function(tr, tr_idx){
+				var cellCount = 0;
+				var viewIdx = 0;
+				var lastViewIdx;
+				var cView = null;
+				d.query("> th", tr).map(function(th){
+					// what view will this cell go into?
+
+					// NOTE:
+					//		to prevent extraneous iteration, we start counters over
+					//		for each row, incrementing over the surface area of the
+					//		structure that colgroup processing generates and
+					//		creating cell objects for each <th> to place into those
+					//		cell groups.  There's a lot of state-keepking logic
+					//		here, but it is what it has to be.
+					if(!cView){ // current view book keeping
+						lastViewIdx = 0;
+						cView = props.structure[0];
+					}else if(cellCount >= (lastViewIdx+cView.__span)){
+						viewIdx++;
+						// move to allocating things into the next view
+						lastViewIdx += cView.__span;
+						var lastView = cView;
+						cView = props.structure[viewIdx];
+					}
+
+					// actually define the cell from what markup hands us
+					var cell = {
+						name: d.trim(d.attr(th, "name")||th.innerHTML),
+						colSpan: parseInt(d.attr(th, "colspan")||1, 10),
+						type: d.trim(d.attr(th, "cellType")||""),
+						id: d.trim(d.attr(th,"id")||"")
+					};
+					cellCount += cell.colSpan;
+					var rowSpan = d.attr(th, "rowspan");
+					if(rowSpan){
+						cell.rowSpan = rowSpan;
+					}
+					if(d.hasAttr(th, "width")){
+						cell.width = widthFromAttr(th);
+					}
+					if(d.hasAttr(th, "relWidth")){
+						cell.relWidth = window.parseInt(dojo.attr(th, "relWidth"), 10);
+					}
+					if(d.hasAttr(th, "hidden")){
+						cell.hidden = d.attr(th, "hidden") == "true";
+					}
+
+					if(cellFunc){
+						cellFunc(th, cell);
+					}
+
+					cell.type = cell.type ? dojo.getObject(cell.type) : dojox.grid.cells.Cell;
+
+					if(cell.type && cell.type.markupFactory){
+						cell.type.markupFactory(th, cell);
+					}
+
+					if(!cView.cells[tr_idx]){
+						cView.cells[tr_idx] = [];
+					}
+					cView.cells[tr_idx].push(cell);
+				});
+			});
+		}
+
+		return new ctor(props, node);
+	};
+})();
+
+}
+
+if(!dojo._hasResource["dojox.grid.DataSelection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.DataSelection"] = true;
+dojo.provide("dojox.grid.DataSelection");
+
+
+dojo.declare("dojox.grid.DataSelection", dojox.grid.Selection, {
+	getFirstSelected: function(){
+		var idx = dojox.grid.Selection.prototype.getFirstSelected.call(this);
+
+		if(idx == -1){ return null; }
+		return this.grid.getItem(idx);
+	},
+
+	getNextSelected: function(inPrev){
+		var old_idx = this.grid.getItemIndex(inPrev);
+		var idx = dojox.grid.Selection.prototype.getNextSelected.call(this, old_idx);
+
+		if(idx == -1){ return null; }
+		return this.grid.getItem(idx);
+	},
+
+	getSelected: function(){
+		var result = [];
+		for(var i=0, l=this.selected.length; i<l; i++){
+			if(this.selected[i]){
+				result.push(this.grid.getItem(i));
+			}
+		}
+		return result;
+	},
+
+	addToSelection: function(inItemOrIndex){
+		if(this.mode == 'none'){ return; }
+		var idx = null;
+		if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
+			idx = inItemOrIndex;
+		}else{
+			idx = this.grid.getItemIndex(inItemOrIndex);
+		}
+		dojox.grid.Selection.prototype.addToSelection.call(this, idx);
+	},
+
+	deselect: function(inItemOrIndex){
+		if(this.mode == 'none'){ return; }
+		var idx = null;
+		if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
+			idx = inItemOrIndex;
+		}else{
+			idx = this.grid.getItemIndex(inItemOrIndex);
+		}
+		dojox.grid.Selection.prototype.deselect.call(this, idx);
+	},
+
+	deselectAll: function(inItemOrIndex){
+		var idx = null;
+		if(inItemOrIndex || typeof inItemOrIndex == "number"){
+			if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
+				idx = inItemOrIndex;
+			}else{
+				idx = this.grid.getItemIndex(inItemOrIndex);
+			}
+			dojox.grid.Selection.prototype.deselectAll.call(this, idx);
+		}else{
+			this.inherited(arguments);
+		}
+	}
+});
+
+}
+
+if(!dojo._hasResource["dojox.grid.DataGrid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.grid.DataGrid"] = true;
+dojo.provide("dojox.grid.DataGrid");
+
+
+
+
+/*=====
+dojo.declare("dojox.grid.__DataCellDef", dojox.grid.__CellDef, {
+	constructor: function(){
+		//	field: String?
+		//		The attribute to read from the dojo.data item for the row.
+		//  fields: String[]?
+		//		An array of fields to grab the values of and pass as an array to the grid
+		//	get: Function?
+		//		function(rowIndex, item?){} rowIndex is of type Integer, item is of type
+		//		Object.  This function will be called when a cell requests data.  Returns
+		//		the unformatted data for the cell.
+	}
+});
+=====*/
+
+/*=====
+dojo.declare("dojox.grid.__DataViewDef", dojox.grid.__ViewDef, {
+	constructor: function(){
+		//	cells: dojox.grid.__DataCellDef[]|Array[dojox.grid.__DataCellDef[]]?
+		//		The structure of the cells within this grid.
+		//	defaultCell: dojox.grid.__DataCellDef?
+		//		A cell definition with default values for all cells in this view.  If
+		//		a property is defined in a cell definition in the "cells" array and
+		//		this property, the cell definition's property will override this
+		//		property's property.
+	}
+});
+=====*/
+
+dojo.declare("dojox.grid.DataGrid", dojox.grid._Grid, {
+	store: null,
+	query: null,
+	queryOptions: null,
+	fetchText: '...',
+	sortFields: null,
+	
+	// updateDelay: int
+	//		Time, in milliseconds, to delay updates automatically so that multiple
+	//		calls to onSet/onNew/onDelete don't keep rerendering the grid.  Set
+	//		to 0 to immediately cause updates.  A higher value will result in
+	//		better performance at the expense of responsiveness of the grid.
+	updateDelay: 1,
+
+/*=====
+	// structure: dojox.grid.__DataViewDef|dojox.grid.__DataViewDef[]|dojox.grid.__DataCellDef[]|Array[dojox.grid.__DataCellDef[]]
+	//		View layout defintion.
+	structure: '',
+=====*/
+
+	// You can specify items instead of a query, if you like.  They do not need
+	// to be loaded - but the must be items in the store
+	items: null,
+	
+	_store_connects: null,
+	_by_idty: null,
+	_by_idx: null,
+	_cache: null,
+	_pages: null,
+	_pending_requests: null,
+	_bop: -1,
+	_eop: -1,
+	_requests: 0,
+	rowCount: 0,
+
+	_isLoaded: false,
+	_isLoading: false,
+	
+	postCreate: function(){
+		this._pages = [];
+		this._store_connects = [];
+		this._by_idty = {};
+		this._by_idx = [];
+		this._cache = [];
+		this._pending_requests = {};
+
+		this._setStore(this.store);
+		this.inherited(arguments);
+	},
+
+	createSelection: function(){
+		this.selection = new dojox.grid.DataSelection(this);
+	},
+
+	get: function(inRowIndex, inItem){
+		// summary: Default data getter.
+		// description:
+		//		Provides data to display in a grid cell. Called in grid cell context.
+		//		So this.cell.index is the column index.
+		// inRowIndex: Integer
+		//		Row for which to provide data
+		// returns:
+		//		Data to display for a given grid cell.
+		
+		if(inItem && this.field == "_item" && !this.fields){
+			return inItem;
+		}else if(inItem && this.fields){
+			var ret = [];
+			var s = this.grid.store;
+			dojo.forEach(this.fields, function(f){
+				ret = ret.concat(s.getValues(inItem, f));
+			});
+			return ret;
+		}else if(!inItem && typeof inRowIndex === "string"){
+			return this.inherited(arguments);
+		}
+		return (!inItem ? this.defaultValue : (!this.field ? this.value : (this.field == "_item" ? inItem : this.grid.store.getValue(inItem, this.field))));
+	},
+
+	_checkUpdateStatus: function(){
+		if(this.updateDelay > 0){
+			var iStarted = false;
+			if(this._endUpdateDelay){
+				clearTimeout(this._endUpdateDelay);
+				delete this._endUpdateDelay;
+				iStarted = true;
+			}
+			if(!this.updating){
+				this.beginUpdate();
+				iStarted = true;
+			}
+			if(iStarted){
+				var _this = this;
+				this._endUpdateDelay = setTimeout(function(){
+					delete _this._endUpdateDelay;
+					_this.endUpdate();
+				}, this.updateDelay);
+			}
+		}
+	},
+	
+	_onSet: function(item, attribute, oldValue, newValue){
+		this._checkUpdateStatus();
+		var idx = this.getItemIndex(item);
+		if(idx>-1){
+			this.updateRow(idx);
+		}
+	},
+	
+	_createItem: function(item, index){
+		var idty = this._hasIdentity ? this.store.getIdentity(item) : dojo.toJson(this.query) + ":idx:" + index + ":sort:" + dojo.toJson(this.getSortProps());
+		var o = this._by_idty[idty] = { idty: idty, item: item };
+		return o;
+	},
+
+	_addItem: function(item, index, noUpdate){
+		this._by_idx[index] = this._createItem(item, index);
+		if(!noUpdate){
+			this.updateRow(index);
+		}
+	},
+
+	_onNew: function(item, parentInfo){
+		this._checkUpdateStatus();
+		var rowCount = this.get('rowCount');
+		this._addingItem = true;
+		this.updateRowCount(rowCount+1);
+		this._addingItem = false;
+		this._addItem(item, rowCount);
+		this.showMessage();
+	},
+
+	_onDelete: function(item){
+		this._checkUpdateStatus();
+		var idx = this._getItemIndex(item, true);
+
+		if(idx >= 0){
+			// When a row is deleted, all rest rows are shifted down,
+			// and migrate from page to page. If some page is not 
+			// loaded yet empty rows can migrate to initialized pages
+			// without refreshing. It causes empty rows in some pages, see:
+			// http://bugs.dojotoolkit.org/ticket/6818
+			// this code fix this problem by reseting loaded page info
+			this._pages = [];
+			this._bop = -1;
+			this._eop = -1;
+
+			var o = this._by_idx[idx];
+			this._by_idx.splice(idx, 1);
+			delete this._by_idty[o.idty];
+			this.updateRowCount(this.get('rowCount')-1);
+			if(this.get('rowCount') === 0){
+				this.showMessage(this.noDataMessage);
+			}
+		}
+	},
+
+	_onRevert: function(){
+		this._refresh();
+	},
+
+	setStore: function(store, query, queryOptions){
+		this._setQuery(query, queryOptions);
+		this._setStore(store);
+		this._refresh(true);
+	},
+	
+	setQuery: function(query, queryOptions){
+		this._setQuery(query, queryOptions);
+		this._refresh(true);
+	},
+	
+	setItems: function(items){
+		this.items = items;
+		this._setStore(this.store);
+		this._refresh(true);
+	},
+	
+	_setQuery: function(query, queryOptions){
+		this.query = query;
+		this.queryOptions = queryOptions || this.queryOptions;		
+	},
+
+	_setStore: function(store){
+		if(this.store&&this._store_connects){
+			dojo.forEach(this._store_connects,function(arr){
+				dojo.forEach(arr, dojo.disconnect);
+			});
+		}
+		this.store = store;
+
+		if(this.store){
+			var f = this.store.getFeatures();
+			var h = [];
+
+			this._canEdit = !!f["dojo.data.api.Write"] && !!f["dojo.data.api.Identity"];
+			this._hasIdentity = !!f["dojo.data.api.Identity"];
+
+			if(!!f["dojo.data.api.Notification"] && !this.items){
+				h.push(this.connect(this.store, "onSet", "_onSet"));
+				h.push(this.connect(this.store, "onNew", "_onNew"));
+				h.push(this.connect(this.store, "onDelete", "_onDelete"));
+			}
+			if(this._canEdit){
+				h.push(this.connect(this.store, "revert", "_onRevert"));
+			}
+
+			this._store_connects = h;
+		}
+	},
+
+	_onFetchBegin: function(size, req){
+		if(!this.scroller){ return; }
+		if(this.rowCount != size){
+			if(req.isRender){
+				this.scroller.init(size, this.keepRows, this.rowsPerPage);
+				this.rowCount = size;
+				this._setAutoHeightAttr(this.autoHeight, true);
+				this._skipRowRenormalize = true;
+				this.prerender();
+				this._skipRowRenormalize = false;
+			}else{
+				this.updateRowCount(size);
+			}
+		}
+		if(!size){
+			this.views.render();
+			this._resize();
+			this.showMessage(this.noDataMessage);
+			this.focus.initFocusView();
+		}else{
+			this.showMessage();
+		}
+	},
+
+	_onFetchComplete: function(items, req){
+		if(!this.scroller){ return; }
+		if(items && items.length > 0){
+			//console.log(items);
+			dojo.forEach(items, function(item, idx){
+				this._addItem(item, req.start+idx, true);
+			}, this);
+			if(this._autoHeight){
+				this._skipRowRenormalize = true;
+			}
+			this.updateRows(req.start, items.length);
+			if(this._autoHeight){
+				this._skipRowRenormalize = false;
+			}			
+			if(req.isRender){
+				this.setScrollTop(0);
+				this.postrender();
+			}else if(this._lastScrollTop){
+				this.setScrollTop(this._lastScrollTop);
+			}
+		}
+		delete this._lastScrollTop;
+		if(!this._isLoaded){
+			this._isLoading = false;
+			this._isLoaded = true;
+		}
+		this._pending_requests[req.start] = false;
+	},
+
+	_onFetchError: function(err, req){
+		console.log(err);
+		delete this._lastScrollTop;
+		if(!this._isLoaded){
+			this._isLoading = false;
+			this._isLoaded = true;
+			this.showMessage(this.errorMessage);
+		}
+		this._pending_requests[req.start] = false;
+		this.onFetchError(err, req);
+	},
+
+	onFetchError: function(err, req){
+	},
+
+	_fetch: function(start, isRender){
+		start = start || 0;
+		if(this.store && !this._pending_requests[start]){
+			if(!this._isLoaded && !this._isLoading){
+				this._isLoading = true;
+				this.showMessage(this.loadingMessage);
+			}
+			this._pending_requests[start] = true;
+			//console.log("fetch: ", start);
+			try{
+				if(this.items){
+					var items = this.items;
+					var store = this.store;
+					this.rowsPerPage = items.length;
+					var req = {
+						start: start,
+						count: this.rowsPerPage,
+						isRender: isRender
+					};
+					this._onFetchBegin(items.length, req);
+					
+					// Load them if we need to
+					var waitCount = 0;
+					dojo.forEach(items, function(i){
+						if(!store.isItemLoaded(i)){ waitCount++; }
+					});
+					if(waitCount === 0){
+						this._onFetchComplete(items, req);
+					}else{
+						var onItem = function(item){
+							waitCount--;
+							if(waitCount === 0){
+								this._onFetchComplete(items, req);
+							}
+						};
+						dojo.forEach(items, function(i){
+							if(!store.isItemLoaded(i)){
+								store.loadItem({item: i, onItem: onItem, scope: this});
+							}
+						}, this);
+					}
+				}else{
+					this.store.fetch({
+						start: start,
+						count: this.rowsPerPage,
+						query: this.query,
+						sort: this.getSortProps(),
+						queryOptions: this.queryOptions,
+						isRender: isRender,
+						onBegin: dojo.hitch(this, "_onFetchBegin"),
+						onComplete: dojo.hitch(this, "_onFetchComplete"),
+						onError: dojo.hitch(this, "_onFetchError")
+					});
+				}
+			}catch(e){
+				this._onFetchError(e, {start: start, count: this.rowsPerPage});
+			}
+		}
+	},
+
+	_clearData: function(){
+		this.updateRowCount(0);
+		this._by_idty = {};
+		this._by_idx = [];
+		this._pages = [];
+		this._bop = this._eop = -1;
+		this._isLoaded = false;
+		this._isLoading = false;
+	},
+
+	getItem: function(idx){
+		var data = this._by_idx[idx];
+		if(!data||(data&&!data.item)){
+			this._preparePage(idx);
+			return null;
+		}
+		return data.item;
+	},
+
+	getItemIndex: function(item){
+		return this._getItemIndex(item, false);
+	},
+	
+	_getItemIndex: function(item, isDeleted){
+		if(!isDeleted && !this.store.isItem(item)){
+			return -1;
+		}
+
+		var idty = this._hasIdentity ? this.store.getIdentity(item) : null;
+
+		for(var i=0, l=this._by_idx.length; i<l; i++){
+			var d = this._by_idx[i];
+			if(d && ((idty && d.idty == idty) || (d.item === item))){
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	filter: function(query, reRender){
+		this.query = query;
+		if(reRender){
+			this._clearData();
+		}
+		this._fetch();
+	},
+
+	_getItemAttr: function(idx, attr){
+		var item = this.getItem(idx);
+		return (!item ? this.fetchText : this.store.getValue(item, attr));
+	},
+
+	// rendering
+	_render: function(){
+		if(this.domNode.parentNode){
+			this.scroller.init(this.get('rowCount'), this.keepRows, this.rowsPerPage);
+			this.prerender();
+			this._fetch(0, true);
+		}
+	},
+
+	// paging
+	_requestsPending: function(inRowIndex){
+		return this._pending_requests[inRowIndex];
+	},
+
+	_rowToPage: function(inRowIndex){
+		return (this.rowsPerPage ? Math.floor(inRowIndex / this.rowsPerPage) : inRowIndex);
+	},
+
+	_pageToRow: function(inPageIndex){
+		return (this.rowsPerPage ? this.rowsPerPage * inPageIndex : inPageIndex);
+	},
+
+	_preparePage: function(inRowIndex){
+		if((inRowIndex < this._bop || inRowIndex >= this._eop) && !this._addingItem){
+			var pageIndex = this._rowToPage(inRowIndex);
+			this._needPage(pageIndex);
+			this._bop = pageIndex * this.rowsPerPage;
+			this._eop = this._bop + (this.rowsPerPage || this.get('rowCount'));
+		}
+	},
+
+	_needPage: function(inPageIndex){
+		if(!this._pages[inPageIndex]){
+			this._pages[inPageIndex] = true;
+			this._requestPage(inPageIndex);
+		}
+	},
+
+	_requestPage: function(inPageIndex){
+		var row = this._pageToRow(inPageIndex);
+		var count = Math.min(this.rowsPerPage, this.get('rowCount') - row);
+		if(count > 0){
+			this._requests++;
+			if(!this._requestsPending(row)){
+				setTimeout(dojo.hitch(this, "_fetch", row, false), 1);
+				//this.requestRows(row, count);
+			}
+		}
+	},
+
+	getCellName: function(inCell){
+		return inCell.field;
+		//console.log(inCell);
+	},
+
+	_refresh: function(isRender){
+		this._clearData();
+		this._fetch(0, isRender);
+	},
+
+	sort: function(){
+		this._lastScrollTop = this.scrollTop;
+		this._refresh();
+	},
+
+	canSort: function(){
+		return (!this._isLoading);
+	},
+
+	getSortProps: function(){
+		var c = this.getCell(this.getSortIndex());
+		if(!c){
+			if(this.sortFields){
+				return this.sortFields;
+			}
+			return null;
+		}else{
+			var desc = c["sortDesc"];
+			var si = !(this.sortInfo>0);
+			if(typeof desc == "undefined"){
+				desc = si;
+			}else{
+				desc = si ? !desc : desc;
+			}
+			return [{ attribute: c.field, descending: desc }];
+		}
+	},
+
+	styleRowState: function(inRow){
+		// summary: Perform row styling
+		if(this.store && this.store.getState){
+			var states=this.store.getState(inRow.index), c='';
+			for(var i=0, ss=["inflight", "error", "inserting"], s; s=ss[i]; i++){
+				if(states[s]){
+					c = ' dojoxGridRow-' + s;
+					break;
+				}
+			}
+			inRow.customClasses += c;
+		}
+	},
+
+	onStyleRow: function(inRow){
+		this.styleRowState(inRow);
+		this.inherited(arguments);
+	},
+
+	// editing
+	canEdit: function(inCell, inRowIndex){
+		return this._canEdit;
+	},
+
+	_copyAttr: function(idx, attr){
+		var row = {};
+		var backstop = {};
+		var src = this.getItem(idx);
+		return this.store.getValue(src, attr);
+	},
+
+	doStartEdit: function(inCell, inRowIndex){
+		if(!this._cache[inRowIndex]){
+			this._cache[inRowIndex] = this._copyAttr(inRowIndex, inCell.field);
+		}
+		this.onStartEdit(inCell, inRowIndex);
+	},
+
+	doApplyCellEdit: function(inValue, inRowIndex, inAttrName){
+		this.store.fetchItemByIdentity({
+			identity: this._by_idx[inRowIndex].idty,
+			onItem: dojo.hitch(this, function(item){
+				var oldValue = this.store.getValue(item, inAttrName);
+				if(typeof oldValue == 'number'){
+					inValue = isNaN(inValue) ? inValue : parseFloat(inValue);
+				}else if(typeof oldValue == 'boolean'){
+					inValue = inValue == 'true' ? true : inValue == 'false' ? false : inValue;
+				}else if(oldValue instanceof Date){
+					var asDate = new Date(inValue);
+					inValue = isNaN(asDate.getTime()) ? inValue : asDate;
+				}
+				this.store.setValue(item, inAttrName, inValue);
+				this.onApplyCellEdit(inValue, inRowIndex, inAttrName);
+			})
+		});
+	},
+
+	doCancelEdit: function(inRowIndex){
+		var cache = this._cache[inRowIndex];
+		if(cache){
+			this.updateRow(inRowIndex);
+			delete this._cache[inRowIndex];
+		}
+		this.onCancelEdit.apply(this, arguments);
+	},
+
+	doApplyEdit: function(inRowIndex, inDataAttr){
+		var cache = this._cache[inRowIndex];
+		/*if(cache){
+			var data = this.getItem(inRowIndex);
+			if(this.store.getValue(data, inDataAttr) != cache){
+				this.update(cache, data, inRowIndex);
+			}
+			delete this._cache[inRowIndex];
+		}*/
+		this.onApplyEdit(inRowIndex);
+	},
+
+	removeSelectedRows: function(){
+		// summary:
+		//		Remove the selected rows from the grid.
+		if(this._canEdit){
+			this.edit.apply();
+			var fx = dojo.hitch(this, function(items){
+				if(items.length){
+					dojo.forEach(items, this.store.deleteItem, this.store);
+					this.selection.clear();
+				}			
+			});
+			if(this.allItemsSelected){
+				this.store.fetch({
+							query: this.query, 
+							queryOptions: this.queryOptions,
+							onComplete: fx});
+			}else{
+				fx(this.selection.getSelected());
+			}
+		}
+	}
+});
+
+dojox.grid.DataGrid.cell_markupFactory = function(cellFunc, node, cellDef){
+	var field = dojo.trim(dojo.attr(node, "field")||"");
+	if(field){
+		cellDef.field = field;
+	}
+	cellDef.field = cellDef.field||cellDef.name;
+	var fields = dojo.trim(dojo.attr(node, "fields")||"");
+	if(fields){
+		cellDef.fields = fields.split(",");
+	}
+	if(cellFunc){
+		cellFunc(node, cellDef);
+	}
+};
+
+dojox.grid.DataGrid.markupFactory = function(props, node, ctor, cellFunc){
+	return dojox.grid._Grid.markupFactory(props, node, ctor, 
+					dojo.partial(dojox.grid.DataGrid.cell_markupFactory, cellFunc));
+};
+
+}
+
+
+dojo.i18n._preloadLocalizations("dojox.grid.nls.DataGrid", ["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
Index: trunk/web/dojo/dojox/grid/_RowManager.js
===================================================================
--- trunk/web/dojo/dojox/grid/_RowManager.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_RowManager.js	(revision 9)
@@ -0,0 +1,46 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._RowManager"]){
+dojo._hasResource["dojox.grid._RowManager"]=true;
+dojo.provide("dojox.grid._RowManager");
+(function(){
+var _1=function(_2,_3){
+if(_2.style.cssText==undefined){
+_2.setAttribute("style",_3);
+}else{
+_2.style.cssText=_3;
+}
+};
+dojo.declare("dojox.grid._RowManager",null,{constructor:function(_4){
+this.grid=_4;
+},linesToEms:2,overRow:-2,prepareStylingRow:function(_5,_6){
+return {index:_5,node:_6,odd:Boolean(_5&1),selected:!!this.grid.selection.isSelected(_5),over:this.isOver(_5),customStyles:"",customClasses:"dojoxGridRow"};
+},styleRowNode:function(_7,_8){
+var _9=this.prepareStylingRow(_7,_8);
+this.grid.onStyleRow(_9);
+this.applyStyles(_9);
+},applyStyles:function(_a){
+var i=_a;
+i.node.className=i.customClasses;
+var h=i.node.style.height;
+_1(i.node,i.customStyles+";"+(i.node._style||""));
+i.node.style.height=h;
+},updateStyles:function(_b){
+this.grid.updateRowStyles(_b);
+},setOverRow:function(_c){
+var _d=this.overRow;
+this.overRow=_c;
+if((_d!=this.overRow)&&(dojo.isString(_d)||_d>=0)){
+this.updateStyles(_d);
+}
+this.updateStyles(this.overRow);
+},isOver:function(_e){
+return (this.overRow==_e&&!dojo.hasClass(this.grid.domNode,"dojoxGridColumnResizing"));
+}});
+})();
+}
Index: trunk/web/dojo/dojox/grid/cells.js
===================================================================
--- trunk/web/dojo/dojox/grid/cells.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/cells.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells"]){
+dojo._hasResource["dojox.grid.cells"]=true;
+dojo.provide("dojox.grid.cells");
+dojo.require("dojox.grid.cells._base");
+}
Index: trunk/web/dojo/dojox/grid/_Events.js
===================================================================
--- trunk/web/dojo/dojox/grid/_Events.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_Events.js	(revision 9)
@@ -0,0 +1,227 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Events"]){
+dojo._hasResource["dojox.grid._Events"]=true;
+dojo.provide("dojox.grid._Events");
+dojo.declare("dojox.grid._Events",null,{cellOverClass:"dojoxGridCellOver",onKeyEvent:function(e){
+this.dispatchKeyEvent(e);
+},onContentEvent:function(e){
+this.dispatchContentEvent(e);
+},onHeaderEvent:function(e){
+this.dispatchHeaderEvent(e);
+},onStyleRow:function(_1){
+var i=_1;
+i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected?" dojoxGridRowSelected":"")+(i.over?" dojoxGridRowOver":"");
+this.focus.styleRow(_1);
+this.edit.styleRow(_1);
+},onKeyDown:function(e){
+if(e.altKey||e.metaKey){
+return;
+}
+var dk=dojo.keys;
+var _2;
+switch(e.keyCode){
+case dk.ESCAPE:
+this.edit.cancel();
+break;
+case dk.ENTER:
+if(!this.edit.isEditing()){
+_2=this.focus.getHeaderIndex();
+if(_2>=0){
+this.setSortIndex(_2);
+break;
+}else{
+this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+dojo.stopEvent(e);
+}
+if(!e.shiftKey){
+var _3=this.edit.isEditing();
+this.edit.apply();
+if(!_3){
+this.edit.setEditCell(this.focus.cell,this.focus.rowIndex);
+}
+}
+if(!this.edit.isEditing()){
+var _4=this.focus.focusView||this.views.views[0];
+_4.content.decorateEvent(e);
+this.onRowClick(e);
+}
+break;
+case dk.SPACE:
+if(!this.edit.isEditing()){
+_2=this.focus.getHeaderIndex();
+if(_2>=0){
+this.setSortIndex(_2);
+break;
+}else{
+this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+dojo.stopEvent(e);
+}
+break;
+case dk.TAB:
+this.focus[e.shiftKey?"previousKey":"nextKey"](e);
+break;
+case dk.LEFT_ARROW:
+case dk.RIGHT_ARROW:
+if(!this.edit.isEditing()){
+var _5=e.keyCode;
+dojo.stopEvent(e);
+_2=this.focus.getHeaderIndex();
+if(_2>=0&&(e.shiftKey&&e.ctrlKey)){
+this.focus.colSizeAdjust(e,_2,(_5==dk.LEFT_ARROW?-1:1)*5);
+}else{
+var _6=(_5==dk.LEFT_ARROW)?1:-1;
+if(dojo._isBodyLtr()){
+_6*=-1;
+}
+this.focus.move(0,_6);
+}
+}
+break;
+case dk.UP_ARROW:
+if(!this.edit.isEditing()&&this.focus.rowIndex!==0){
+dojo.stopEvent(e);
+this.focus.move(-1,0);
+}
+break;
+case dk.DOWN_ARROW:
+if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){
+dojo.stopEvent(e);
+this.focus.move(1,0);
+}
+break;
+case dk.PAGE_UP:
+if(!this.edit.isEditing()&&this.focus.rowIndex!==0){
+dojo.stopEvent(e);
+if(this.focus.rowIndex!=this.scroller.firstVisibleRow+1){
+this.focus.move(this.scroller.firstVisibleRow-this.focus.rowIndex,0);
+}else{
+this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex-1));
+this.focus.move(this.scroller.firstVisibleRow-this.scroller.lastVisibleRow+1,0);
+}
+}
+break;
+case dk.PAGE_DOWN:
+if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){
+dojo.stopEvent(e);
+if(this.focus.rowIndex!=this.scroller.lastVisibleRow-1){
+this.focus.move(this.scroller.lastVisibleRow-this.focus.rowIndex-1,0);
+}else{
+this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex+1));
+this.focus.move(this.scroller.lastVisibleRow-this.scroller.firstVisibleRow-1,0);
+}
+}
+break;
+default:
+break;
+}
+},onMouseOver:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseOver(e):this.onCellMouseOver(e);
+},onMouseOut:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseOut(e):this.onCellMouseOut(e);
+},onMouseDown:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseDown(e):this.onCellMouseDown(e);
+},onMouseOverRow:function(e){
+if(!this.rows.isOver(e.rowIndex)){
+this.rows.setOverRow(e.rowIndex);
+e.rowIndex==-1?this.onHeaderMouseOver(e):this.onRowMouseOver(e);
+}
+},onMouseOutRow:function(e){
+if(this.rows.isOver(-1)){
+this.onHeaderMouseOut(e);
+}else{
+if(!this.rows.isOver(-2)){
+this.rows.setOverRow(-2);
+this.onRowMouseOut(e);
+}
+}
+},onMouseDownRow:function(e){
+if(e.rowIndex!=-1){
+this.onRowMouseDown(e);
+}
+},onCellMouseOver:function(e){
+if(e.cellNode){
+dojo.addClass(e.cellNode,this.cellOverClass);
+}
+},onCellMouseOut:function(e){
+if(e.cellNode){
+dojo.removeClass(e.cellNode,this.cellOverClass);
+}
+},onCellMouseDown:function(e){
+},onCellClick:function(e){
+this._click[0]=this._click[1];
+this._click[1]=e;
+if(!this.edit.isEditCell(e.rowIndex,e.cellIndex)){
+this.focus.setFocusCell(e.cell,e.rowIndex);
+}
+this.onRowClick(e);
+},onCellDblClick:function(e){
+if(this._click.length>1&&dojo.isIE){
+this.edit.setEditCell(this._click[1].cell,this._click[1].rowIndex);
+}else{
+if(this._click.length>1&&this._click[0].rowIndex!=this._click[1].rowIndex){
+this.edit.setEditCell(this._click[0].cell,this._click[0].rowIndex);
+}else{
+this.edit.setEditCell(e.cell,e.rowIndex);
+}
+}
+this.onRowDblClick(e);
+},onCellContextMenu:function(e){
+this.onRowContextMenu(e);
+},onCellFocus:function(_7,_8){
+this.edit.cellFocus(_7,_8);
+},onRowClick:function(e){
+this.edit.rowClick(e);
+this.selection.clickSelectEvent(e);
+},onRowDblClick:function(e){
+},onRowMouseOver:function(e){
+},onRowMouseOut:function(e){
+},onRowMouseDown:function(e){
+},onRowContextMenu:function(e){
+dojo.stopEvent(e);
+},onHeaderMouseOver:function(e){
+},onHeaderMouseOut:function(e){
+},onHeaderCellMouseOver:function(e){
+if(e.cellNode){
+dojo.addClass(e.cellNode,this.cellOverClass);
+}
+},onHeaderCellMouseOut:function(e){
+if(e.cellNode){
+dojo.removeClass(e.cellNode,this.cellOverClass);
+}
+},onHeaderCellMouseDown:function(e){
+},onHeaderClick:function(e){
+},onHeaderCellClick:function(e){
+this.setSortIndex(e.cell.index);
+this.onHeaderClick(e);
+},onHeaderDblClick:function(e){
+},onHeaderCellDblClick:function(e){
+this.onHeaderDblClick(e);
+},onHeaderCellContextMenu:function(e){
+this.onHeaderContextMenu(e);
+},onHeaderContextMenu:function(e){
+if(!this.headerMenu){
+dojo.stopEvent(e);
+}
+},onStartEdit:function(_9,_a){
+},onApplyCellEdit:function(_b,_c,_d){
+},onCancelEdit:function(_e){
+},onApplyEdit:function(_f){
+},onCanSelect:function(_10){
+return true;
+},onCanDeselect:function(_11){
+return true;
+},onSelected:function(_12){
+this.updateRowStyles(_12);
+},onDeselected:function(_13){
+this.updateRowStyles(_13);
+},onSelectionChanged:function(){
+}});
+}
Index: trunk/web/dojo/dojox/grid/_ViewManager.js
===================================================================
--- trunk/web/dojo/dojox/grid/_ViewManager.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_ViewManager.js	(revision 9)
@@ -0,0 +1,212 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._ViewManager"]){
+dojo._hasResource["dojox.grid._ViewManager"]=true;
+dojo.provide("dojox.grid._ViewManager");
+dojo.declare("dojox.grid._ViewManager",null,{constructor:function(_1){
+this.grid=_1;
+},defaultWidth:200,views:[],resize:function(){
+this.onEach("resize");
+},render:function(){
+this.onEach("render");
+},addView:function(_2){
+_2.idx=this.views.length;
+this.views.push(_2);
+},destroyViews:function(){
+for(var i=0,v;v=this.views[i];i++){
+v.destroy();
+}
+this.views=[];
+},getContentNodes:function(){
+var _3=[];
+for(var i=0,v;v=this.views[i];i++){
+_3.push(v.contentNode);
+}
+return _3;
+},forEach:function(_4){
+for(var i=0,v;v=this.views[i];i++){
+_4(v,i);
+}
+},onEach:function(_5,_6){
+_6=_6||[];
+for(var i=0,v;v=this.views[i];i++){
+if(_5 in v){
+v[_5].apply(v,_6);
+}
+}
+},normalizeHeaderNodeHeight:function(){
+var _7=[];
+for(var i=0,v;(v=this.views[i]);i++){
+if(v.headerContentNode.firstChild){
+_7.push(v.headerContentNode);
+}
+}
+this.normalizeRowNodeHeights(_7);
+},normalizeRowNodeHeights:function(_8){
+var h=0;
+var _9=[];
+if(this.grid.rowHeight){
+h=this.grid.rowHeight;
+}else{
+if(_8.length<=1){
+return;
+}
+for(var i=0,n;(n=_8[i]);i++){
+if(!dojo.hasClass(n,"dojoxGridNonNormalizedCell")){
+_9[i]=n.firstChild.offsetHeight;
+h=Math.max(h,_9[i]);
+}
+}
+h=(h>=0?h:0);
+if(dojo.isMoz&&h){
+h++;
+}
+}
+for(i=0;(n=_8[i]);i++){
+if(_9[i]!=h){
+n.firstChild.style.height=h+"px";
+}
+}
+},resetHeaderNodeHeight:function(){
+for(var i=0,v,n;(v=this.views[i]);i++){
+n=v.headerContentNode.firstChild;
+if(n){
+n.style.height="";
+}
+}
+},renormalizeRow:function(_a){
+var _b=[];
+for(var i=0,v,n;(v=this.views[i])&&(n=v.getRowNode(_a));i++){
+n.firstChild.style.height="";
+_b.push(n);
+}
+this.normalizeRowNodeHeights(_b);
+},getViewWidth:function(_c){
+return this.views[_c].getWidth()||this.defaultWidth;
+},measureHeader:function(){
+this.resetHeaderNodeHeight();
+this.forEach(function(_d){
+_d.headerContentNode.style.height="";
+});
+var h=0;
+this.forEach(function(_e){
+h=Math.max(_e.headerNode.offsetHeight,h);
+});
+return h;
+},measureContent:function(){
+var h=0;
+this.forEach(function(_f){
+h=Math.max(_f.domNode.offsetHeight,h);
+});
+return h;
+},findClient:function(_10){
+var c=this.grid.elasticView||-1;
+if(c<0){
+for(var i=1,v;(v=this.views[i]);i++){
+if(v.viewWidth){
+for(i=1;(v=this.views[i]);i++){
+if(!v.viewWidth){
+c=i;
+break;
+}
+}
+break;
+}
+}
+}
+if(c<0){
+c=Math.floor(this.views.length/2);
+}
+return c;
+},arrange:function(l,w){
+var i,v,vw,len=this.views.length;
+var c=(w<=0?len:this.findClient());
+var _11=function(v,l){
+var ds=v.domNode.style;
+var hs=v.headerNode.style;
+if(!dojo._isBodyLtr()){
+ds.right=l+"px";
+if(dojo.isMoz){
+hs.right=l+v.getScrollbarWidth()+"px";
+hs.width=parseInt(hs.width,10)-v.getScrollbarWidth()+"px";
+}else{
+hs.right=l+"px";
+}
+}else{
+ds.left=l+"px";
+hs.left=l+"px";
+}
+ds.top=0+"px";
+hs.top=0;
+};
+for(i=0;(v=this.views[i])&&(i<c);i++){
+vw=this.getViewWidth(i);
+v.setSize(vw,0);
+_11(v,l);
+if(v.headerContentNode&&v.headerContentNode.firstChild){
+vw=v.getColumnsWidth()+v.getScrollbarWidth();
+}else{
+vw=v.domNode.offsetWidth;
+}
+l+=vw;
+}
+i++;
+var r=w;
+for(var j=len-1;(v=this.views[j])&&(i<=j);j--){
+vw=this.getViewWidth(j);
+v.setSize(vw,0);
+vw=v.domNode.offsetWidth;
+r-=vw;
+_11(v,r);
+}
+if(c<len){
+v=this.views[c];
+vw=Math.max(1,r-l);
+v.setSize(vw+"px",0);
+_11(v,l);
+}
+return l;
+},renderRow:function(_12,_13,_14){
+var _15=[];
+for(var i=0,v,n,_16;(v=this.views[i])&&(n=_13[i]);i++){
+_16=v.renderRow(_12);
+n.appendChild(_16);
+_15.push(_16);
+}
+if(!_14){
+this.normalizeRowNodeHeights(_15);
+}
+},rowRemoved:function(_17){
+this.onEach("rowRemoved",[_17]);
+},updateRow:function(_18,_19){
+for(var i=0,v;v=this.views[i];i++){
+v.updateRow(_18);
+}
+if(!_19){
+this.renormalizeRow(_18);
+}
+},updateRowStyles:function(_1a){
+this.onEach("updateRowStyles",[_1a]);
+},setScrollTop:function(_1b){
+var top=_1b;
+for(var i=0,v;v=this.views[i];i++){
+top=v.setScrollTop(_1b);
+if(dojo.isIE&&v.headerNode&&v.scrollboxNode){
+v.headerNode.scrollLeft=v.scrollboxNode.scrollLeft;
+}
+}
+return top;
+},getFirstScrollingView:function(){
+for(var i=0,v;(v=this.views[i]);i++){
+if(v.hasHScrollbar()||v.hasVScrollbar()){
+return v;
+}
+}
+return null;
+}});
+}
Index: trunk/web/dojo/dojox/grid/TreeSelection.js
===================================================================
--- trunk/web/dojo/dojox/grid/TreeSelection.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/TreeSelection.js	(revision 9)
@@ -0,0 +1,214 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.TreeSelection"]){
+dojo._hasResource["dojox.grid.TreeSelection"]=true;
+dojo.provide("dojox.grid.TreeSelection");
+dojo.require("dojox.grid.DataSelection");
+dojo.declare("dojox.grid.TreeSelection",dojox.grid.DataSelection,{setMode:function(_1){
+this.selected={};
+this.sorted_sel=[];
+this.sorted_ltos={};
+this.sorted_stol={};
+dojox.grid.DataSelection.prototype.setMode.call(this,_1);
+},addToSelection:function(_2){
+if(this.mode=="none"){
+return;
+}
+var _3=null;
+if(typeof _2=="number"||typeof _2=="string"){
+_3=_2;
+}else{
+_3=this.grid.getItemIndex(_2);
+}
+if(this.selected[_3]){
+this.selectedIndex=_3;
+}else{
+if(this.onCanSelect(_3)!==false){
+this.selectedIndex=_3;
+var _4=dojo.query("tr[dojoxTreeGridPath='"+_3+"']",this.grid.domNode);
+if(_4.length){
+dojo.attr(_4[0],"aria-selected","true");
+}
+this._beginUpdate();
+this.selected[_3]=true;
+this._insertSortedSelection(_3);
+this.onSelected(_3);
+this._endUpdate();
+}
+}
+},deselect:function(_5){
+if(this.mode=="none"){
+return;
+}
+var _6=null;
+if(typeof _5=="number"||typeof _5=="string"){
+_6=_5;
+}else{
+_6=this.grid.getItemIndex(_5);
+}
+if(this.selectedIndex==_6){
+this.selectedIndex=-1;
+}
+if(this.selected[_6]){
+if(this.onCanDeselect(_6)===false){
+return;
+}
+var _7=dojo.query("tr[dojoxTreeGridPath='"+_6+"']",this.grid.domNode);
+if(_7.length){
+dojo.attr(_7[0],"aria-selected","false");
+}
+this._beginUpdate();
+delete this.selected[_6];
+this._removeSortedSelection(_6);
+this.onDeselected(_6);
+this._endUpdate();
+}
+},getSelected:function(){
+var _8=[];
+for(var i in this.selected){
+if(this.selected[i]){
+_8.push(this.grid.getItem(i));
+}
+}
+return _8;
+},getSelectedCount:function(){
+var c=0;
+for(var i in this.selected){
+if(this.selected[i]){
+c++;
+}
+}
+return c;
+},_bsearch:function(v){
+var o=this.sorted_sel;
+var h=o.length-1,l=0,m;
+while(l<=h){
+var _9=this._comparePaths(o[m=(l+h)>>1],v);
+if(_9<0){
+l=m+1;
+continue;
+}
+if(_9>0){
+h=m-1;
+continue;
+}
+return m;
+}
+return _9<0?m-_9:m;
+},_comparePaths:function(a,b){
+for(var i=0,l=(a.length<b.length?a.length:b.length);i<l;i++){
+if(a[i]<b[i]){
+return -1;
+}
+if(a[i]>b[i]){
+return 1;
+}
+}
+if(a.length<b.length){
+return -1;
+}
+if(a.length>b.length){
+return 1;
+}
+return 0;
+},_insertSortedSelection:function(_a){
+_a=String(_a);
+var s=this.sorted_sel;
+var sl=this.sorted_ltos;
+var ss=this.sorted_stol;
+var _b=_a.split("/");
+_b=dojo.map(_b,function(_c){
+return parseInt(_c,10);
+});
+sl[_b]=_a;
+ss[_a]=_b;
+if(s.length===0){
+s.push(_b);
+return;
+}
+if(s.length==1){
+var _d=this._comparePaths(s[0],_b);
+if(_d==1){
+s.unshift(_b);
+}else{
+s.push(_b);
+}
+return;
+}
+var _e=this._bsearch(_b);
+this.sorted_sel.splice(_e,0,_b);
+},_removeSortedSelection:function(_f){
+_f=String(_f);
+var s=this.sorted_sel;
+var sl=this.sorted_ltos;
+var ss=this.sorted_stol;
+if(s.length===0){
+return;
+}
+var _10=ss[_f];
+if(!_10){
+return;
+}
+var idx=this._bsearch(_10);
+if(idx>-1){
+delete sl[_10];
+delete ss[_f];
+s.splice(idx,1);
+}
+},getFirstSelected:function(){
+if(!this.sorted_sel.length||this.mode=="none"){
+return -1;
+}
+var _11=this.sorted_sel[0];
+if(!_11){
+return -1;
+}
+_11=this.sorted_ltos[_11];
+if(!_11){
+return -1;
+}
+return _11;
+},getNextSelected:function(_12){
+if(!this.sorted_sel.length||this.mode=="none"){
+return -1;
+}
+_12=String(_12);
+var _13=this.sorted_stol[_12];
+if(!_13){
+return -1;
+}
+var idx=this._bsearch(_13);
+var _14=this.sorted_sel[idx+1];
+if(!_14){
+return -1;
+}
+return this.sorted_ltos[_14];
+},_range:function(_15,_16,_17){
+if(!dojo.isString(_15)&&_15<0){
+_15=_16;
+}
+var _18=this.grid.layout.cells,_19=this.grid.store,_1a=this.grid;
+_15=new dojox.grid.TreePath(String(_15),_1a);
+_16=new dojox.grid.TreePath(String(_16),_1a);
+if(_15.compare(_16)>0){
+var tmp=_15;
+_15=_16;
+_16=tmp;
+}
+var _1b=_15._str,_1c=_16._str;
+_17(_1b);
+var p=_15;
+while((p=p.next())){
+if(p._str==_1c){
+break;
+}
+_17(p._str);
+}
+_17(_1c);
+}});
+}
Index: trunk/web/dojo/dojox/grid/TreeGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/TreeGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/TreeGrid.js	(revision 9)
@@ -0,0 +1,727 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.TreeGrid"]){
+dojo._hasResource["dojox.grid.TreeGrid"]=true;
+dojo.experimental("dojox.grid.TreeGrid");
+dojo.provide("dojox.grid.TreeGrid");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.grid._TreeView");
+dojo.require("dojox.grid.cells.tree");
+dojo.require("dojox.grid.TreeSelection");
+dojo.declare("dojox.grid._TreeAggregator",null,{cells:[],grid:null,childFields:[],constructor:function(_1){
+this.cells=_1.cells||[];
+this.childFields=_1.childFields||[];
+this.grid=_1.grid;
+this.store=this.grid.store;
+},_cacheValue:function(_2,id,_3){
+_2[id]=_3;
+return _3;
+},clearSubtotalCache:function(){
+if(this.store){
+delete this.store._cachedAggregates;
+}
+},cnt:function(_4,_5,_6){
+var _7=0;
+var _8=this.store;
+var _9=this.childFields;
+if(_9[_5]){
+var _a=_8.getValues(_6,_9[_5]);
+if(_4.index<=_5+1){
+_7=_a.length;
+}else{
+dojo.forEach(_a,function(c){
+_7+=this.getForCell(_4,_5+1,c,"cnt");
+},this);
+}
+}else{
+_7=1;
+}
+return _7;
+},sum:function(_b,_c,_d){
+var _e=0;
+var _f=this.store;
+var _10=this.childFields;
+if(_10[_c]){
+dojo.forEach(_f.getValues(_d,_10[_c]),function(c){
+_e+=this.getForCell(_b,_c+1,c,"sum");
+},this);
+}else{
+_e+=_f.getValue(_d,_b.field);
+}
+return _e;
+},value:function(_11,_12,_13){
+},getForCell:function(_14,_15,_16,_17){
+var _18=this.store;
+if(!_18||!_16||!_18.isItem(_16)){
+return "";
+}
+var _19=_18._cachedAggregates=_18._cachedAggregates||{};
+var id=_18.getIdentity(_16);
+var _1a=_19[id]=_19[id]||[];
+if(!_14.getOpenState){
+_14=this.grid.getCell(_14.layoutIndex+_15+1);
+}
+var idx=_14.index;
+var _1b=_1a[idx]=_1a[idx]||{};
+_17=(_17||(_14.parentCell?_14.parentCell.aggregate:"sum"))||"sum";
+var _1c=_14.field;
+if(_1c==_18.getLabelAttributes()[0]){
+_17="cnt";
+}
+var _1d=_1b[_17]=_1b[_17]||[];
+if(_1d[_15]!=undefined){
+return _1d[_15];
+}
+var _1e=((_14.parentCell&&_14.parentCell.itemAggregates)?_14.parentCell.itemAggregates[_14.idxInParent]:"")||"";
+if(_1e&&_18.hasAttribute(_16,_1e)){
+return this._cacheValue(_1d,_15,_18.getValue(_16,_1e));
+}else{
+if(_1e){
+return this._cacheValue(_1d,_15,0);
+}
+}
+return this._cacheValue(_1d,_15,this[_17](_14,_15,_16));
+}});
+dojo.declare("dojox.grid._TreeLayout",dojox.grid._Layout,{_isCollapsable:false,_getInternalStructure:function(_1f){
+var g=this.grid;
+var s=_1f;
+var _20=s[0].cells[0];
+var _21={type:"dojox.grid._TreeView",cells:[[]]};
+var _22=[];
+var _23=0;
+var _24=function(_25,_26){
+var _27=_25.children;
+var _28=function(_29,idx){
+var k,n={};
+for(k in _29){
+n[k]=_29[k];
+}
+n=dojo.mixin(n,{level:_26,idxInParent:_26>0?idx:-1,parentCell:_26>0?_25:null});
+return n;
+};
+var ret=[];
+dojo.forEach(_27,function(c,idx){
+if("children" in c){
+_22.push(c.field);
+var _2a=ret[ret.length-1];
+_2a.isCollapsable=true;
+c.level=_26;
+ret=ret.concat(_24(c,_26+1));
+}else{
+ret.push(_28(c,idx));
+}
+});
+_23=Math.max(_23,_26);
+return ret;
+};
+var _2b={children:_20,itemAggregates:[]};
+_21.cells[0]=_24(_2b,0);
+g.aggregator=new dojox.grid._TreeAggregator({cells:_21.cells[0],grid:g,childFields:_22});
+if(g.scroller&&g.defaultOpen){
+g.scroller.defaultRowHeight=g.scroller._origDefaultRowHeight*(2*_23+1);
+}
+return [_21];
+},setStructure:function(_2c){
+var s=_2c;
+var g=this.grid;
+if(g&&g.treeModel&&!dojo.every(s,function(i){
+return ("cells" in i);
+})){
+s=arguments[0]=[{cells:[s]}];
+}
+if(s.length==1&&s[0].cells.length==1){
+if(g&&g.treeModel){
+s[0].type="dojox.grid._TreeView";
+this._isCollapsable=true;
+s[0].cells[0][(this.grid.treeModel?this.grid.expandoCell:0)].isCollapsable=true;
+}else{
+var _2d=dojo.filter(s[0].cells[0],function(c){
+return ("children" in c);
+});
+if(_2d.length===1){
+this._isCollapsable=true;
+}
+}
+}
+if(this._isCollapsable&&(!g||!g.treeModel)){
+arguments[0]=this._getInternalStructure(s);
+}
+this.inherited(arguments);
+},addCellDef:function(_2e,_2f,_30){
+var obj=this.inherited(arguments);
+return dojo.mixin(obj,dojox.grid.cells.TreeCell);
+}});
+dojo.declare("dojox.grid.TreePath",null,{level:0,_str:"",_arr:null,grid:null,store:null,cell:null,item:null,constructor:function(_31,_32){
+if(dojo.isString(_31)){
+this._str=_31;
+this._arr=dojo.map(_31.split("/"),function(_33){
+return parseInt(_33,10);
+});
+}else{
+if(dojo.isArray(_31)){
+this._str=_31.join("/");
+this._arr=_31.slice(0);
+}else{
+if(typeof _31=="number"){
+this._str=String(_31);
+this._arr=[_31];
+}else{
+this._str=_31._str;
+this._arr=_31._arr.slice(0);
+}
+}
+}
+this.level=this._arr.length-1;
+this.grid=_32;
+this.store=this.grid.store;
+if(_32.treeModel){
+this.cell=_32.layout.cells[_32.expandoCell];
+}else{
+this.cell=_32.layout.cells[this.level];
+}
+},item:function(){
+if(!this._item){
+this._item=this.grid.getItem(this._arr);
+}
+return this._item;
+},compare:function(_34){
+if(dojo.isString(_34)||dojo.isArray(_34)){
+if(this._str==_34){
+return 0;
+}
+if(_34.join&&this._str==_34.join("/")){
+return 0;
+}
+_34=new dojox.grid.TreePath(_34,this.grid);
+}else{
+if(_34 instanceof dojox.grid.TreePath){
+if(this._str==_34._str){
+return 0;
+}
+}
+}
+for(var i=0,l=(this._arr.length<_34._arr.length?this._arr.length:_34._arr.length);i<l;i++){
+if(this._arr[i]<_34._arr[i]){
+return -1;
+}
+if(this._arr[i]>_34._arr[i]){
+return 1;
+}
+}
+if(this._arr.length<_34._arr.length){
+return -1;
+}
+if(this._arr.length>_34._arr.length){
+return 1;
+}
+return 0;
+},isOpen:function(){
+return this.cell.openStates&&this.cell.getOpenState(this.item());
+},previous:function(){
+var _35=this._arr.slice(0);
+if(this._str=="0"){
+return null;
+}
+var _36=_35.length-1;
+if(_35[_36]===0){
+_35.pop();
+return new dojox.grid.TreePath(_35,this.grid);
+}
+_35[_36]--;
+var _37=new dojox.grid.TreePath(_35,this.grid);
+return _37.lastChild(true);
+},next:function(){
+var _38=this._arr.slice(0);
+if(this.isOpen()){
+_38.push(0);
+}else{
+_38[_38.length-1]++;
+for(var i=this.level;i>=0;i--){
+var _39=this.grid.getItem(_38.slice(0,i+1));
+if(i>0){
+if(!_39){
+_38.pop();
+_38[i-1]++;
+}
+}else{
+if(!_39){
+return null;
+}
+}
+}
+}
+return new dojox.grid.TreePath(_38,this.grid);
+},children:function(_3a){
+if(!this.isOpen()&&!_3a){
+return null;
+}
+var _3b=[];
+var _3c=this.grid.treeModel;
+if(_3c){
+var _3d=this.item();
+var _3e=_3c.store;
+if(!_3c.mayHaveChildren(_3d)){
+return null;
+}
+dojo.forEach(_3c.childrenAttrs,function(_3f){
+_3b=_3b.concat(_3e.getValues(_3d,_3f));
+});
+}else{
+_3b=this.store.getValues(this.item(),this.grid.layout.cells[this.cell.level+1].parentCell.field);
+if(_3b.length>1&&this.grid.sortChildItems){
+var _40=this.grid.getSortProps();
+if(_40&&_40.length){
+var _41=_40[0].attribute,_42=this.grid;
+if(_41&&_3b[0][_41]){
+var _43=!!_40[0].descending;
+_3b=_3b.slice(0);
+_3b.sort(function(a,b){
+return _42._childItemSorter(a,b,_41,_43);
+});
+}
+}
+}
+}
+return _3b;
+},childPaths:function(){
+var _44=this.children();
+if(!_44){
+return [];
+}
+return dojo.map(_44,function(_45,_46){
+return new dojox.grid.TreePath(this._str+"/"+_46,this.grid);
+},this);
+},parent:function(){
+if(this.level===0){
+return null;
+}
+return new dojox.grid.TreePath(this._arr.slice(0,this.level),this.grid);
+},lastChild:function(_47){
+var _48=this.children();
+if(!_48||!_48.length){
+return this;
+}
+var _49=new dojox.grid.TreePath(this._str+"/"+String(_48.length-1),this.grid);
+if(!_47){
+return _49;
+}
+return _49.lastChild(true);
+},toString:function(){
+return this._str;
+}});
+dojo.declare("dojox.grid._TreeFocusManager",dojox.grid._FocusManager,{setFocusCell:function(_4a,_4b){
+if(_4a&&_4a.getNode(_4b)){
+this.inherited(arguments);
+}
+},isLastFocusCell:function(){
+if(this.cell&&this.cell.index==this.grid.layout.cellCount-1){
+var _4c=new dojox.grid.TreePath(this.grid.rowCount-1,this.grid);
+_4c=_4c.lastChild(true);
+return this.rowIndex==_4c._str;
+}
+return false;
+},next:function(){
+if(this.cell){
+var row=this.rowIndex,col=this.cell.index+1,cc=this.grid.layout.cellCount-1;
+var _4d=new dojox.grid.TreePath(this.rowIndex,this.grid);
+if(col>cc){
+var _4e=_4d.next();
+if(!_4e){
+col--;
+}else{
+col=0;
+_4d=_4e;
+}
+}
+if(this.grid.edit.isEditing()){
+var _4f=this.grid.getCell(col);
+if(!this.isLastFocusCell()&&!_4f.editable){
+this._focusifyCellNode(false);
+this.cell=_4f;
+this.rowIndex=_4d._str;
+this.next();
+return;
+}
+}
+this.setFocusIndex(_4d._str,col);
+}
+},previous:function(){
+if(this.cell){
+var row=(this.rowIndex||0),col=(this.cell.index||0)-1;
+var _50=new dojox.grid.TreePath(row,this.grid);
+if(col<0){
+var _51=_50.previous();
+if(!_51){
+col=0;
+}else{
+col=this.grid.layout.cellCount-1;
+_50=_51;
+}
+}
+if(this.grid.edit.isEditing()){
+var _52=this.grid.getCell(col);
+if(!this.isFirstFocusCell()&&!_52.editable){
+this._focusifyCellNode(false);
+this.cell=_52;
+this.rowIndex=_50._str;
+this.previous();
+return;
+}
+}
+this.setFocusIndex(_50._str,col);
+}
+},move:function(_53,_54){
+if(this.isNavHeader()){
+this.inherited(arguments);
+return;
+}
+if(!this.cell){
+return;
+}
+var sc=this.grid.scroller,r=this.rowIndex,rc=this.grid.rowCount-1,_55=new dojox.grid.TreePath(this.rowIndex,this.grid);
+if(_53){
+var row;
+if(_53>0){
+_55=_55.next();
+row=_55._arr[0];
+if(row>sc.getLastPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));
+}
+}else{
+if(_53<0){
+_55=_55.previous();
+row=_55._arr[0];
+if(row<=sc.getPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));
+}
+}
+}
+}
+var cc=this.grid.layout.cellCount-1,i=this.cell.index,col=Math.min(cc,Math.max(0,i+_54));
+var _56=this.grid.getCell(col);
+var _57=_54<0?-1:1;
+while(col>=0&&col<cc&&_56&&_56.hidden===true){
+col+=_57;
+_56=this.grid.getCell(col);
+}
+if(!_56||_56.hidden===true){
+col=i;
+}
+if(_53){
+this.grid.updateRow(r);
+}
+this.setFocusIndex(_55._str,col);
+}});
+dojo.declare("dojox.grid.TreeGrid",dojox.grid.DataGrid,{defaultOpen:true,sortChildItems:false,openAtLevels:[],treeModel:null,expandoCell:0,aggregator:null,_layoutClass:dojox.grid._TreeLayout,createSelection:function(){
+this.selection=new dojox.grid.TreeSelection(this);
+},_childItemSorter:function(a,b,_58,_59){
+var av=this.store.getValue(a,_58);
+var bv=this.store.getValue(b,_58);
+if(av!=bv){
+return av<bv==_59?1:-1;
+}
+return 0;
+},_onNew:function(_5a,_5b){
+if(!_5b||!_5b.item){
+this.inherited(arguments);
+}else{
+var idx=this.getItemIndex(_5b.item);
+if(typeof idx=="string"){
+this.updateRow(idx.split("/")[0]);
+}else{
+if(idx>-1){
+this.updateRow(idx);
+}
+}
+}
+},_onSet:function(_5c,_5d,_5e,_5f){
+this._checkUpdateStatus();
+if(this.aggregator){
+this.aggregator.clearSubtotalCache();
+}
+var idx=this.getItemIndex(_5c);
+if(typeof idx=="string"){
+this.updateRow(idx.split("/")[0]);
+}else{
+if(idx>-1){
+this.updateRow(idx);
+}
+}
+},_onDelete:function(_60){
+this._cleanupExpandoCache(this._getItemIndex(_60,true),this.store.getIdentity(_60),_60);
+this.inherited(arguments);
+},_cleanupExpandoCache:function(_61,_62,_63){
+},_addItem:function(_64,_65,_66,_67){
+if(!_67&&this.model&&dojo.indexOf(this.model.root.children,_64)==-1){
+this.model.root.children[_65]=_64;
+}
+this.inherited(arguments);
+},getItem:function(idx){
+var _68=dojo.isArray(idx);
+if(dojo.isString(idx)&&idx.indexOf("/")){
+idx=idx.split("/");
+_68=true;
+}
+if(_68&&idx.length==1){
+idx=idx[0];
+_68=false;
+}
+if(!_68){
+return dojox.grid.DataGrid.prototype.getItem.call(this,idx);
+}
+var s=this.store;
+var itm=dojox.grid.DataGrid.prototype.getItem.call(this,idx[0]);
+var cf;
+if(this.aggregator){
+cf=this.aggregator.childFields||[];
+}else{
+if(this.treeModel){
+cf=this.treeModel.childrenAttrs||[];
+}
+}
+if(cf){
+for(var i=0;i<idx.length-1&&itm;i++){
+if(cf[i]){
+itm=(s.getValues(itm,cf[i])||[])[idx[i+1]];
+}else{
+itm=null;
+}
+}
+}
+return itm||null;
+},_getItemIndex:function(_69,_6a){
+if(!_6a&&!this.store.isItem(_69)){
+return -1;
+}
+var idx=this.inherited(arguments);
+if(idx==-1){
+var _6b=this.store.getIdentity(_69);
+return this._by_idty_paths[_6b]||-1;
+}
+return idx;
+},postMixInProperties:function(){
+if(this.treeModel&&!("defaultOpen" in this.params)){
+this.defaultOpen=false;
+}
+var def=this.defaultOpen;
+this.openAtLevels=dojo.map(this.openAtLevels,function(l){
+if(typeof l=="string"){
+switch(l.toLowerCase()){
+case "true":
+return true;
+break;
+case "false":
+return false;
+break;
+default:
+var r=parseInt(l,10);
+if(isNaN(r)){
+return def;
+}
+return r;
+break;
+}
+}
+return l;
+});
+this._by_idty_paths={};
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+if(this.treeModel){
+this._setModel(this.treeModel);
+}
+},setModel:function(_6c){
+this._setModel(_6c);
+this._refresh(true);
+},_setModel:function(_6d){
+if(_6d&&(!dijit.tree.ForestStoreModel||!(_6d instanceof dijit.tree.ForestStoreModel))){
+throw new Error("dojox.grid.TreeGrid: treeModel must be an instance of dijit.tree.ForestStoreModel");
+}
+this.treeModel=_6d;
+dojo.toggleClass(this.domNode,"dojoxGridTreeModel",this.treeModel?true:false);
+this._setQuery(_6d?_6d.query:null);
+this._setStore(_6d?_6d.store:null);
+},createScroller:function(){
+this.inherited(arguments);
+this.scroller._origDefaultRowHeight=this.scroller.defaultRowHeight;
+},createManagers:function(){
+this.rows=new dojox.grid._RowManager(this);
+this.focus=new dojox.grid._TreeFocusManager(this);
+this.edit=new dojox.grid._EditManager(this);
+},_setStore:function(_6e){
+this.inherited(arguments);
+if(this.treeModel&&!this.treeModel.root.children){
+this.treeModel.root.children=[];
+}
+if(this.aggregator){
+this.aggregator.store=_6e;
+}
+},getDefaultOpenState:function(_6f,_70){
+var cf;
+var _71=this.store;
+if(this.treeModel){
+return this.defaultOpen;
+}
+if(!_6f||!_71||!_71.isItem(_70)||!(cf=this.aggregator.childFields[_6f.level])){
+return this.defaultOpen;
+}
+if(this.openAtLevels.length>_6f.level){
+var _72=this.openAtLevels[_6f.level];
+if(typeof _72=="boolean"){
+return _72;
+}else{
+if(typeof _72=="number"){
+return (_71.getValues(_70,cf).length<=_72);
+}
+}
+}
+return this.defaultOpen;
+},onStyleRow:function(row){
+if(!this.layout._isCollapsable){
+this.inherited(arguments);
+return;
+}
+var _73=dojo.attr(row.node,"dojoxTreeGridBaseClasses");
+if(_73){
+row.customClasses=_73;
+}
+var i=row;
+var _74=i.node.tagName.toLowerCase();
+i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected&&_74=="tr"?" dojoxGridRowSelected":"")+(i.over&&_74=="tr"?" dojoxGridRowOver":"");
+this.focus.styleRow(i);
+this.edit.styleRow(i);
+},styleRowNode:function(_75,_76){
+if(_76){
+if(_76.tagName.toLowerCase()=="div"&&this.aggregator){
+dojo.query("tr[dojoxTreeGridPath]",_76).forEach(function(_77){
+this.rows.styleRowNode(dojo.attr(_77,"dojoxTreeGridPath"),_77);
+},this);
+}
+this.rows.styleRowNode(_75,_76);
+}
+},onCanSelect:function(_78){
+var _79=dojo.query("tr[dojoxTreeGridPath='"+_78+"']",this.domNode);
+if(_79.length){
+if(dojo.hasClass(_79[0],"dojoxGridSummaryRow")){
+return false;
+}
+}
+return this.inherited(arguments);
+},onKeyDown:function(e){
+if(e.altKey||e.metaKey){
+return;
+}
+var dk=dojo.keys;
+switch(e.keyCode){
+case dk.UP_ARROW:
+if(!this.edit.isEditing()&&this.focus.rowIndex!="0"){
+dojo.stopEvent(e);
+this.focus.move(-1,0);
+}
+break;
+case dk.DOWN_ARROW:
+var _7a=new dojox.grid.TreePath(this.focus.rowIndex,this);
+var _7b=new dojox.grid.TreePath(this.rowCount-1,this);
+_7b=_7b.lastChild(true);
+if(!this.edit.isEditing()&&_7a.toString()!=_7b.toString()){
+dojo.stopEvent(e);
+this.focus.move(1,0);
+}
+break;
+default:
+this.inherited(arguments);
+break;
+}
+},canEdit:function(_7c,_7d){
+var _7e=_7c.getNode(_7d);
+return _7e&&this._canEdit;
+},doApplyCellEdit:function(_7f,_80,_81){
+var _82=this.getItem(_80);
+var _83=this.store.getValue(_82,_81);
+if(typeof _83=="number"){
+_7f=isNaN(_7f)?_7f:parseFloat(_7f);
+}else{
+if(typeof _83=="boolean"){
+_7f=_7f=="true"?true:_7f=="false"?false:_7f;
+}else{
+if(_83 instanceof Date){
+var _84=new Date(_7f);
+_7f=isNaN(_84.getTime())?_7f:_84;
+}
+}
+}
+this.store.setValue(_82,_81,_7f);
+this.onApplyCellEdit(_7f,_80,_81);
+}});
+dojox.grid.TreeGrid.markupFactory=function(_85,_86,_87,_88){
+var d=dojo;
+var _89=function(n){
+var w=d.attr(n,"width")||"auto";
+if((w!="auto")&&(w.slice(-2)!="em")&&(w.slice(-1)!="%")){
+w=parseInt(w,10)+"px";
+}
+return w;
+};
+var _8a=function(_8b){
+var _8c;
+if(_8b.nodeName.toLowerCase()=="table"&&d.query("> colgroup",_8b).length===0&&(_8c=d.query("> thead > tr",_8b)).length==1){
+var tr=_8c[0];
+return d.query("> th",_8c[0]).map(function(th){
+var _8d={type:d.trim(d.attr(th,"cellType")||""),field:d.trim(d.attr(th,"field")||"")};
+if(_8d.type){
+_8d.type=d.getObject(_8d.type);
+}
+var _8e=d.query("> table",th)[0];
+if(_8e){
+_8d.name="";
+_8d.children=_8a(_8e);
+if(d.hasAttr(th,"itemAggregates")){
+_8d.itemAggregates=d.map(d.attr(th,"itemAggregates").split(","),function(v){
+return d.trim(v);
+});
+}else{
+_8d.itemAggregates=[];
+}
+if(d.hasAttr(th,"aggregate")){
+_8d.aggregate=d.attr(th,"aggregate");
+}
+_8d.type=_8d.type||dojox.grid.cells.SubtableCell;
+}else{
+_8d.name=d.trim(d.attr(th,"name")||th.innerHTML);
+if(d.hasAttr(th,"width")){
+_8d.width=_89(th);
+}
+if(d.hasAttr(th,"relWidth")){
+_8d.relWidth=window.parseInt(d.attr(th,"relWidth"),10);
+}
+if(d.hasAttr(th,"hidden")){
+_8d.hidden=d.attr(th,"hidden")=="true";
+}
+_8d.field=_8d.field||_8d.name;
+dojox.grid.DataGrid.cell_markupFactory(_88,th,_8d);
+_8d.type=_8d.type||dojox.grid.cells.Cell;
+}
+if(_8d.type&&_8d.type.markupFactory){
+_8d.type.markupFactory(th,_8d);
+}
+return _8d;
+});
+}
+return [];
+};
+var _8f;
+if(!_85.structure){
+var row=_8a(_86);
+if(row.length){
+_85.structure=[{__span:Infinity,cells:[row]}];
+}
+}
+return dojox.grid.DataGrid.markupFactory(_85,_86,_87,_88);
+};
+}
Index: trunk/web/dojo/dojox/grid/_RowSelector.js
===================================================================
--- trunk/web/dojo/dojox/grid/_RowSelector.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_RowSelector.js	(revision 9)
@@ -0,0 +1,45 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._RowSelector"]){
+dojo._hasResource["dojox.grid._RowSelector"]=true;
+dojo.provide("dojox.grid._RowSelector");
+dojo.require("dojox.grid._View");
+dojo.declare("dojox.grid._RowSelector",dojox.grid._View,{defaultWidth:"2em",noscroll:true,padBorderWidth:2,buildRendering:function(){
+this.inherited("buildRendering",arguments);
+this.scrollboxNode.style.overflow="hidden";
+this.headerNode.style.visibility="hidden";
+},getWidth:function(){
+return this.viewWidth||this.defaultWidth;
+},buildRowContent:function(_1,_2){
+var w=this.contentWidth||0;
+_2.innerHTML="<table class=\"dojoxGridRowbarTable\" style=\"width:"+w+"px;height:1px;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"><tr><td class=\"dojoxGridRowbarInner\">&nbsp;</td></tr></table>";
+},renderHeader:function(){
+},updateRow:function(){
+},resize:function(){
+this.adaptHeight();
+},adaptWidth:function(){
+if(!("contentWidth" in this)&&this.contentNode){
+this.contentWidth=this.contentNode.offsetWidth-this.padBorderWidth;
+}
+},doStyleRowNode:function(_3,_4){
+var n=["dojoxGridRowbar dojoxGridNonNormalizedCell"];
+if(this.grid.rows.isOver(_3)){
+n.push("dojoxGridRowbarOver");
+}
+if(this.grid.selection.isSelected(_3)){
+n.push("dojoxGridRowbarSelected");
+}
+_4.className=n.join(" ");
+},domouseover:function(e){
+this.grid.onMouseOverRow(e);
+},domouseout:function(e){
+if(!this.isIntraRowEvent(e)){
+this.grid.onMouseOutRow(e);
+}
+}});
+}
Index: trunk/web/dojo/dojox/grid/_FocusManager.js
===================================================================
--- trunk/web/dojo/dojox/grid/_FocusManager.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_FocusManager.js	(revision 9)
@@ -0,0 +1,464 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._FocusManager"]){
+dojo._hasResource["dojox.grid._FocusManager"]=true;
+dojo.provide("dojox.grid._FocusManager");
+dojo.require("dojox.grid.util");
+dojo.declare("dojox.grid._FocusManager",null,{constructor:function(_1){
+this.grid=_1;
+this.cell=null;
+this.rowIndex=-1;
+this._connects=[];
+this.headerMenu=this.grid.headerMenu;
+this._connects.push(dojo.connect(this.grid.domNode,"onfocus",this,"doFocus"));
+this._connects.push(dojo.connect(this.grid.domNode,"onblur",this,"doBlur"));
+this._connects.push(dojo.connect(this.grid.domNode,"oncontextmenu",this,"doContextMenu"));
+this._connects.push(dojo.connect(this.grid.lastFocusNode,"onfocus",this,"doLastNodeFocus"));
+this._connects.push(dojo.connect(this.grid.lastFocusNode,"onblur",this,"doLastNodeBlur"));
+this._connects.push(dojo.connect(this.grid,"_onFetchComplete",this,"_delayedCellFocus"));
+this._connects.push(dojo.connect(this.grid,"postrender",this,"_delayedHeaderFocus"));
+},destroy:function(){
+dojo.forEach(this._connects,dojo.disconnect);
+delete this.grid;
+delete this.cell;
+},_colHeadNode:null,_colHeadFocusIdx:null,_contextMenuBindNode:null,tabbingOut:false,focusClass:"dojoxGridCellFocus",focusView:null,initFocusView:function(){
+this.focusView=this.grid.views.getFirstScrollingView()||this.focusView;
+this._initColumnHeaders();
+},isFocusCell:function(_2,_3){
+return (this.cell==_2)&&(this.rowIndex==_3);
+},isLastFocusCell:function(){
+if(this.cell){
+return (this.rowIndex==this.grid.rowCount-1)&&(this.cell.index==this.grid.layout.cellCount-1);
+}
+return false;
+},isFirstFocusCell:function(){
+if(this.cell){
+return (this.rowIndex===0)&&(this.cell.index===0);
+}
+return false;
+},isNoFocusCell:function(){
+return (this.rowIndex<0)||!this.cell;
+},isNavHeader:function(){
+return (!!this._colHeadNode);
+},getHeaderIndex:function(){
+if(this._colHeadNode){
+return dojo.indexOf(this._findHeaderCells(),this._colHeadNode);
+}else{
+return -1;
+}
+},_focusifyCellNode:function(_4){
+var n=this.cell&&this.cell.getNode(this.rowIndex);
+if(n){
+dojo.toggleClass(n,this.focusClass,_4);
+if(_4){
+var sl=this.scrollIntoView();
+try{
+if(!this.grid.edit.isEditing()){
+dojox.grid.util.fire(n,"focus");
+if(sl){
+this.cell.view.scrollboxNode.scrollLeft=sl;
+}
+}
+}
+catch(e){
+}
+}
+}
+},_delayedCellFocus:function(){
+if(this.isNavHeader()||!this.grid._focused){
+return;
+}
+var n=this.cell&&this.cell.getNode(this.rowIndex);
+if(n){
+try{
+if(!this.grid.edit.isEditing()){
+dojo.toggleClass(n,this.focusClass,true);
+this.blurHeader();
+dojox.grid.util.fire(n,"focus");
+}
+}
+catch(e){
+}
+}
+},_delayedHeaderFocus:function(){
+if(this.isNavHeader()){
+this.focusHeader();
+this.grid.domNode.focus();
+}
+},_initColumnHeaders:function(){
+var _5=this._findHeaderCells();
+for(var i=0;i<_5.length;i++){
+this._connects.push(dojo.connect(_5[i],"onfocus",this,"doColHeaderFocus"));
+this._connects.push(dojo.connect(_5[i],"onblur",this,"doColHeaderBlur"));
+}
+},_findHeaderCells:function(){
+var _6=dojo.query("th",this.grid.viewsHeaderNode);
+var _7=[];
+for(var i=0;i<_6.length;i++){
+var _8=_6[i];
+var _9=dojo.hasAttr(_8,"tabIndex");
+var _a=dojo.attr(_8,"tabIndex");
+if(_9&&_a<0){
+_7.push(_8);
+}
+}
+return _7;
+},_setActiveColHeader:function(_b,_c,_d){
+dojo.attr(this.grid.domNode,"aria-activedescendant",_b.id);
+if(_d!=null&&_d>=0&&_d!=_c){
+dojo.toggleClass(this._findHeaderCells()[_d],this.focusClass,false);
+}
+dojo.toggleClass(_b,this.focusClass,true);
+this._colHeadNode=_b;
+this._colHeadFocusIdx=_c;
+this._scrollHeader(this._colHeadFocusIdx);
+},scrollIntoView:function(){
+var _e=(this.cell?this._scrollInfo(this.cell):null);
+if(!_e||!_e.s){
+return null;
+}
+var rt=this.grid.scroller.findScrollTop(this.rowIndex);
+if(_e.n&&_e.sr){
+if(_e.n.offsetLeft+_e.n.offsetWidth>_e.sr.l+_e.sr.w){
+_e.s.scrollLeft=_e.n.offsetLeft+_e.n.offsetWidth-_e.sr.w;
+}else{
+if(_e.n.offsetLeft<_e.sr.l){
+_e.s.scrollLeft=_e.n.offsetLeft;
+}
+}
+}
+if(_e.r&&_e.sr){
+if(rt+_e.r.offsetHeight>_e.sr.t+_e.sr.h){
+this.grid.setScrollTop(rt+_e.r.offsetHeight-_e.sr.h);
+}else{
+if(rt<_e.sr.t){
+this.grid.setScrollTop(rt);
+}
+}
+}
+return _e.s.scrollLeft;
+},_scrollInfo:function(_f,_10){
+if(_f){
+var cl=_f,sbn=cl.view.scrollboxNode,_11={w:sbn.clientWidth,l:sbn.scrollLeft,t:sbn.scrollTop,h:sbn.clientHeight},rn=cl.view.getRowNode(this.rowIndex);
+return {c:cl,s:sbn,sr:_11,n:(_10?_10:_f.getNode(this.rowIndex)),r:rn};
+}
+return null;
+},_scrollHeader:function(_12){
+var _13=null;
+if(this._colHeadNode){
+var _14=this.grid.getCell(_12);
+_13=this._scrollInfo(_14,_14.getNode(0));
+}
+if(_13&&_13.s&&_13.sr&&_13.n){
+var _15=_13.sr.l+_13.sr.w;
+if(_13.n.offsetLeft+_13.n.offsetWidth>_15){
+_13.s.scrollLeft=_13.n.offsetLeft+_13.n.offsetWidth-_13.sr.w;
+}else{
+if(_13.n.offsetLeft<_13.sr.l){
+_13.s.scrollLeft=_13.n.offsetLeft;
+}else{
+if(dojo.isIE<=7&&_14&&_14.view.headerNode){
+_14.view.headerNode.scrollLeft=_13.s.scrollLeft;
+}
+}
+}
+}
+},_isHeaderHidden:function(){
+var _16=this.focusView;
+if(!_16){
+for(var i=0,_17;(_17=this.grid.views.views[i]);i++){
+if(_17.headerNode){
+_16=_17;
+break;
+}
+}
+}
+return (_16&&dojo.getComputedStyle(_16.headerNode).display=="none");
+},colSizeAdjust:function(e,_18,_19){
+var _1a=this._findHeaderCells();
+var _1b=this.focusView;
+if(!_1b){
+for(var i=0,_1c;(_1c=this.grid.views.views[i]);i++){
+if(_1c.header.tableMap.map){
+_1b=_1c;
+break;
+}
+}
+}
+var _1d=_1a[_18];
+if(!_1b||(_18==_1a.length-1&&_18===0)){
+return;
+}
+_1b.content.baseDecorateEvent(e);
+e.cellNode=_1d;
+e.cellIndex=_1b.content.getCellNodeIndex(e.cellNode);
+e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);
+if(_1b.header.canResize(e)){
+var _1e={l:_19};
+var _1f=_1b.header.colResizeSetup(e,false);
+_1b.header.doResizeColumn(_1f,null,_1e);
+_1b.update();
+}
+},styleRow:function(_20){
+return;
+},setFocusIndex:function(_21,_22){
+this.setFocusCell(this.grid.getCell(_22),_21);
+},setFocusCell:function(_23,_24){
+if(_23&&!this.isFocusCell(_23,_24)){
+this.tabbingOut=false;
+if(this._colHeadNode){
+this.blurHeader();
+}
+this._colHeadNode=this._colHeadFocusIdx=null;
+this.focusGridView();
+this._focusifyCellNode(false);
+this.cell=_23;
+this.rowIndex=_24;
+this._focusifyCellNode(true);
+}
+if(dojo.isOpera){
+setTimeout(dojo.hitch(this.grid,"onCellFocus",this.cell,this.rowIndex),1);
+}else{
+this.grid.onCellFocus(this.cell,this.rowIndex);
+}
+},next:function(){
+if(this.cell){
+var row=this.rowIndex,col=this.cell.index+1,cc=this.grid.layout.cellCount-1,rc=this.grid.rowCount-1;
+if(col>cc){
+col=0;
+row++;
+}
+if(row>rc){
+col=cc;
+row=rc;
+}
+if(this.grid.edit.isEditing()){
+var _25=this.grid.getCell(col);
+if(!this.isLastFocusCell()&&!_25.editable){
+this.cell=_25;
+this.rowIndex=row;
+this.next();
+return;
+}
+}
+this.setFocusIndex(row,col);
+}
+},previous:function(){
+if(this.cell){
+var row=(this.rowIndex||0),col=(this.cell.index||0)-1;
+if(col<0){
+col=this.grid.layout.cellCount-1;
+row--;
+}
+if(row<0){
+row=0;
+col=0;
+}
+if(this.grid.edit.isEditing()){
+var _26=this.grid.getCell(col);
+if(!this.isFirstFocusCell()&&!_26.editable){
+this.cell=_26;
+this.rowIndex=row;
+this.previous();
+return;
+}
+}
+this.setFocusIndex(row,col);
+}
+},move:function(_27,_28){
+var _29=_28<0?-1:1;
+if(this.isNavHeader()){
+var _2a=this._findHeaderCells();
+var _2b=currentIdx=dojo.indexOf(_2a,this._colHeadNode);
+currentIdx+=_28;
+while(currentIdx>=0&&currentIdx<_2a.length&&_2a[currentIdx].style.display=="none"){
+currentIdx+=_29;
+}
+if((currentIdx>=0)&&(currentIdx<_2a.length)){
+this._setActiveColHeader(_2a[currentIdx],currentIdx,_2b);
+}
+}else{
+if(this.cell){
+var sc=this.grid.scroller,r=this.rowIndex,rc=this.grid.rowCount-1,row=Math.min(rc,Math.max(0,r+_27));
+if(_27){
+if(_27>0){
+if(row>sc.getLastPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));
+}
+}else{
+if(_27<0){
+if(row<=sc.getPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));
+}
+}
+}
+}
+var cc=this.grid.layout.cellCount-1,i=this.cell.index,col=Math.min(cc,Math.max(0,i+_28));
+var _2c=this.grid.getCell(col);
+while(col>=0&&col<cc&&_2c&&_2c.hidden===true){
+col+=_29;
+_2c=this.grid.getCell(col);
+}
+if(!_2c||_2c.hidden===true){
+col=i;
+}
+this.setFocusIndex(row,col);
+if(_27){
+this.grid.updateRow(r);
+}
+}
+}
+},previousKey:function(e){
+if(this.grid.edit.isEditing()){
+dojo.stopEvent(e);
+this.previous();
+}else{
+if(!this.isNavHeader()&&!this._isHeaderHidden()){
+this.grid.domNode.focus();
+dojo.stopEvent(e);
+}else{
+this.tabOut(this.grid.domNode);
+if(this._colHeadFocusIdx!=null){
+dojo.toggleClass(this._findHeaderCells()[this._colHeadFocusIdx],this.focusClass,false);
+this._colHeadFocusIdx=null;
+}
+this._focusifyCellNode(false);
+}
+}
+},nextKey:function(e){
+var _2d=(this.grid.rowCount===0);
+if(e.target===this.grid.domNode&&this._colHeadFocusIdx==null){
+this.focusHeader();
+dojo.stopEvent(e);
+}else{
+if(this.isNavHeader()){
+this.blurHeader();
+if(!this.findAndFocusGridCell()){
+this.tabOut(this.grid.lastFocusNode);
+}
+this._colHeadNode=this._colHeadFocusIdx=null;
+}else{
+if(this.grid.edit.isEditing()){
+dojo.stopEvent(e);
+this.next();
+}else{
+this.tabOut(this.grid.lastFocusNode);
+}
+}
+}
+},tabOut:function(_2e){
+this.tabbingOut=true;
+_2e.focus();
+},focusGridView:function(){
+dojox.grid.util.fire(this.focusView,"focus");
+},focusGrid:function(_2f){
+this.focusGridView();
+this._focusifyCellNode(true);
+},findAndFocusGridCell:function(){
+var _30=true;
+var _31=(this.grid.rowCount===0);
+if(this.isNoFocusCell()&&!_31){
+var _32=0;
+var _33=this.grid.getCell(_32);
+if(_33.hidden){
+_32=this.isNavHeader()?this._colHeadFocusIdx:0;
+}
+this.setFocusIndex(0,_32);
+}else{
+if(this.cell&&!_31){
+if(this.focusView&&!this.focusView.rowNodes[this.rowIndex]){
+this.grid.scrollToRow(this.rowIndex);
+}
+this.focusGrid();
+}else{
+_30=false;
+}
+}
+this._colHeadNode=this._colHeadFocusIdx=null;
+return _30;
+},focusHeader:function(){
+var _34=this._findHeaderCells();
+var _35=this._colHeadFocusIdx;
+if(this._isHeaderHidden()){
+this.findAndFocusGridCell();
+}else{
+if(!this._colHeadFocusIdx){
+if(this.isNoFocusCell()){
+this._colHeadFocusIdx=0;
+}else{
+this._colHeadFocusIdx=this.cell.index;
+}
+}
+}
+this._colHeadNode=_34[this._colHeadFocusIdx];
+while(this._colHeadNode&&this._colHeadFocusIdx>=0&&this._colHeadFocusIdx<_34.length&&this._colHeadNode.style.display=="none"){
+this._colHeadFocusIdx++;
+this._colHeadNode=_34[this._colHeadFocusIdx];
+}
+if(this._colHeadNode&&this._colHeadNode.style.display!="none"){
+if(this.headerMenu&&this._contextMenuBindNode!=this.grid.domNode){
+this.headerMenu.unBindDomNode(this.grid.viewsHeaderNode);
+this.headerMenu.bindDomNode(this.grid.domNode);
+this._contextMenuBindNode=this.grid.domNode;
+}
+this._setActiveColHeader(this._colHeadNode,this._colHeadFocusIdx,_35);
+this._scrollHeader(this._colHeadFocusIdx);
+this._focusifyCellNode(false);
+}else{
+this.findAndFocusGridCell();
+}
+},blurHeader:function(){
+dojo.removeClass(this._colHeadNode,this.focusClass);
+dojo.removeAttr(this.grid.domNode,"aria-activedescendant");
+if(this.headerMenu&&this._contextMenuBindNode==this.grid.domNode){
+var _36=this.grid.viewsHeaderNode;
+this.headerMenu.unBindDomNode(this.grid.domNode);
+this.headerMenu.bindDomNode(_36);
+this._contextMenuBindNode=_36;
+}
+},doFocus:function(e){
+if(e&&e.target!=e.currentTarget){
+dojo.stopEvent(e);
+return;
+}
+if(!this.tabbingOut){
+this.focusHeader();
+}
+this.tabbingOut=false;
+dojo.stopEvent(e);
+},doBlur:function(e){
+dojo.stopEvent(e);
+},doContextMenu:function(e){
+if(!this.headerMenu){
+dojo.stopEvent(e);
+}
+},doLastNodeFocus:function(e){
+if(this.tabbingOut){
+this._focusifyCellNode(false);
+}else{
+if(this.grid.rowCount>0){
+if(this.isNoFocusCell()){
+this.setFocusIndex(0,0);
+}
+this._focusifyCellNode(true);
+}else{
+this.focusHeader();
+}
+}
+this.tabbingOut=false;
+dojo.stopEvent(e);
+},doLastNodeBlur:function(e){
+dojo.stopEvent(e);
+},doColHeaderFocus:function(e){
+this._setActiveColHeader(e.target,dojo.attr(e.target,"idx"),this._colHeadFocusIdx);
+this._scrollHeader(this.getHeaderIndex());
+dojo.stopEvent(e);
+},doColHeaderBlur:function(e){
+dojo.toggleClass(e.target,this.focusClass,false);
+}});
+}
Index: trunk/web/dojo/dojox/grid/_View.js
===================================================================
--- trunk/web/dojo/dojox/grid/_View.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_View.js	(revision 9)
@@ -0,0 +1,618 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._View"]){
+dojo._hasResource["dojox.grid._View"]=true;
+dojo.provide("dojox.grid._View");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.grid._Builder");
+dojo.require("dojox.html.metrics");
+dojo.require("dojox.grid.util");
+dojo.require("dojo.dnd.Source");
+dojo.require("dojo.dnd.Manager");
+(function(){
+var _1=function(_2,_3){
+return _2.style.cssText==undefined?_2.getAttribute("style"):_2.style.cssText;
+};
+dojo.declare("dojox.grid._View",[dijit._Widget,dijit._Templated],{defaultWidth:"18em",viewWidth:"",templateString:"<div class=\"dojoxGridView\" wairole=\"presentation\">\n\t<div class=\"dojoxGridHeader\" dojoAttachPoint=\"headerNode\" wairole=\"presentation\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\" wairole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\" wairole=\"row\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" dojoAttachPoint=\"hiddenFocusNode\" wairole=\"presentation\" />\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" wairole=\"presentation\" />\n\t<div class=\"dojoxGridScrollbox\" dojoAttachPoint=\"scrollboxNode\" wairole=\"presentation\">\n\t\t<div class=\"dojoxGridContent\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\" wairole=\"presentation\"></div>\n\t</div>\n</div>\n",themeable:false,classTag:"dojoxGrid",marginBottom:0,rowPad:2,_togglingColumn:-1,_headerBuilderClass:dojox.grid._HeaderBuilder,_contentBuilderClass:dojox.grid._ContentBuilder,postMixInProperties:function(){
+this.rowNodes={};
+},postCreate:function(){
+this.connect(this.scrollboxNode,"onscroll","doscroll");
+dojox.grid.util.funnelEvents(this.contentNode,this,"doContentEvent",["mouseover","mouseout","click","dblclick","contextmenu","mousedown"]);
+dojox.grid.util.funnelEvents(this.headerNode,this,"doHeaderEvent",["dblclick","mouseover","mouseout","mousemove","mousedown","click","contextmenu"]);
+this.content=new this._contentBuilderClass(this);
+this.header=new this._headerBuilderClass(this);
+if(!dojo._isBodyLtr()){
+this.headerNodeContainer.style.width="";
+}
+},destroy:function(){
+dojo.destroy(this.headerNode);
+delete this.headerNode;
+for(var i in this.rowNodes){
+dojo.destroy(this.rowNodes[i]);
+}
+this.rowNodes={};
+if(this.source){
+this.source.destroy();
+}
+this.inherited(arguments);
+},focus:function(){
+if(dojo.isIE||dojo.isWebKit||dojo.isOpera){
+this.hiddenFocusNode.focus();
+}else{
+this.scrollboxNode.focus();
+}
+},setStructure:function(_4){
+var vs=(this.structure=_4);
+if(vs.width&&!isNaN(vs.width)){
+this.viewWidth=vs.width+"em";
+}else{
+this.viewWidth=vs.width||(vs.noscroll?"auto":this.viewWidth);
+}
+this._onBeforeRow=vs.onBeforeRow||function(){
+};
+this._onAfterRow=vs.onAfterRow||function(){
+};
+this.noscroll=vs.noscroll;
+if(this.noscroll){
+this.scrollboxNode.style.overflow="hidden";
+}
+this.simpleStructure=Boolean(vs.cells.length==1);
+this.testFlexCells();
+this.updateStructure();
+},_cleanupRowWidgets:function(_5){
+if(_5){
+dojo.forEach(dojo.query("[widgetId]",_5).map(dijit.byNode),function(w){
+if(w._destroyOnRemove){
+w.destroy();
+delete w;
+}else{
+if(w.domNode&&w.domNode.parentNode){
+w.domNode.parentNode.removeChild(w.domNode);
+}
+}
+});
+}
+},onBeforeRow:function(_6,_7){
+this._onBeforeRow(_6,_7);
+if(_6>=0){
+this._cleanupRowWidgets(this.getRowNode(_6));
+}
+},onAfterRow:function(_8,_9,_a){
+this._onAfterRow(_8,_9,_a);
+var g=this.grid;
+dojo.forEach(dojo.query(".dojoxGridStubNode",_a),function(n){
+if(n&&n.parentNode){
+var lw=n.getAttribute("linkWidget");
+var _b=window.parseInt(dojo.attr(n,"cellIdx"),10);
+var _c=g.getCell(_b);
+var w=dijit.byId(lw);
+if(w){
+n.parentNode.replaceChild(w.domNode,n);
+if(!w._started){
+w.startup();
+}
+}else{
+n.innerHTML="";
+}
+}
+},this);
+},testFlexCells:function(){
+this.flexCells=false;
+for(var j=0,_d;(_d=this.structure.cells[j]);j++){
+for(var i=0,_e;(_e=_d[i]);i++){
+_e.view=this;
+this.flexCells=this.flexCells||_e.isFlex();
+}
+}
+return this.flexCells;
+},updateStructure:function(){
+this.header.update();
+this.content.update();
+},getScrollbarWidth:function(){
+var _f=this.hasVScrollbar();
+var _10=dojo.style(this.scrollboxNode,"overflow");
+if(this.noscroll||!_10||_10=="hidden"){
+_f=false;
+}else{
+if(_10=="scroll"){
+_f=true;
+}
+}
+return (_f?dojox.html.metrics.getScrollbar().w:0);
+},getColumnsWidth:function(){
+var h=this.headerContentNode;
+return h&&h.firstChild?h.firstChild.offsetWidth:0;
+},setColumnsWidth:function(_11){
+this.headerContentNode.firstChild.style.width=_11+"px";
+if(this.viewWidth){
+this.viewWidth=_11+"px";
+}
+},getWidth:function(){
+return this.viewWidth||(this.getColumnsWidth()+this.getScrollbarWidth())+"px";
+},getContentWidth:function(){
+return Math.max(0,dojo._getContentBox(this.domNode).w-this.getScrollbarWidth())+"px";
+},render:function(){
+this.scrollboxNode.style.height="";
+this.renderHeader();
+if(this._togglingColumn>=0){
+this.setColumnsWidth(this.getColumnsWidth()-this._togglingColumn);
+this._togglingColumn=-1;
+}
+var _12=this.grid.layout.cells;
+var _13=dojo.hitch(this,function(_14,_15){
+!dojo._isBodyLtr()&&(_15=!_15);
+var inc=_15?-1:1;
+var idx=this.header.getCellNodeIndex(_14)+inc;
+var _16=_12[idx];
+while(_16&&_16.getHeaderNode()&&_16.getHeaderNode().style.display=="none"){
+idx+=inc;
+_16=_12[idx];
+}
+if(_16){
+return _16.getHeaderNode();
+}
+return null;
+});
+if(this.grid.columnReordering&&this.simpleStructure){
+if(this.source){
+this.source.destroy();
+}
+var _17="dojoxGrid_bottomMarker";
+var _18="dojoxGrid_topMarker";
+if(this.bottomMarker){
+dojo.destroy(this.bottomMarker);
+}
+this.bottomMarker=dojo.byId(_17);
+if(this.topMarker){
+dojo.destroy(this.topMarker);
+}
+this.topMarker=dojo.byId(_18);
+if(!this.bottomMarker){
+this.bottomMarker=dojo.create("div",{"id":_17,"class":"dojoxGridColPlaceBottom"},dojo.body());
+this._hide(this.bottomMarker);
+this.topMarker=dojo.create("div",{"id":_18,"class":"dojoxGridColPlaceTop"},dojo.body());
+this._hide(this.topMarker);
+}
+this.arrowDim=dojo.contentBox(this.bottomMarker);
+var _19=dojo.contentBox(this.headerContentNode.firstChild.rows[0]).h;
+this.source=new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0],{horizontal:true,accept:["gridColumn_"+this.grid.id],viewIndex:this.index,generateText:false,onMouseDown:dojo.hitch(this,function(e){
+this.header.decorateEvent(e);
+if((this.header.overRightResizeArea(e)||this.header.overLeftResizeArea(e))&&this.header.canResize(e)&&!this.header.moveable){
+this.header.beginColumnResize(e);
+}else{
+if(this.grid.headerMenu){
+this.grid.headerMenu.onCancel(true);
+}
+if(e.button===(dojo.isIE?1:0)){
+dojo.dnd.Source.prototype.onMouseDown.call(this.source,e);
+}
+}
+}),onMouseOver:dojo.hitch(this,function(e){
+var src=this.source;
+if(src._getChildByEvent(e)){
+dojo.dnd.Source.prototype.onMouseOver.apply(src,arguments);
+}
+}),_markTargetAnchor:dojo.hitch(this,function(_1a){
+var src=this.source;
+if(src.current==src.targetAnchor&&src.before==_1a){
+return;
+}
+if(src.targetAnchor&&_13(src.targetAnchor,src.before)){
+src._removeItemClass(_13(src.targetAnchor,src.before),src.before?"After":"Before");
+}
+dojo.dnd.Source.prototype._markTargetAnchor.call(src,_1a);
+var _1b=_1a?src.targetAnchor:_13(src.targetAnchor,src.before);
+var _1c=0;
+if(!_1b){
+_1b=src.targetAnchor;
+_1c=dojo.contentBox(_1b).w+this.arrowDim.w/2+2;
+}
+var pos=(dojo.position||dojo._abs)(_1b,true);
+var _1d=Math.floor(pos.x-this.arrowDim.w/2+_1c);
+dojo.style(this.bottomMarker,"visibility","visible");
+dojo.style(this.topMarker,"visibility","visible");
+dojo.style(this.bottomMarker,{"left":_1d+"px","top":(_19+pos.y)+"px"});
+dojo.style(this.topMarker,{"left":_1d+"px","top":(pos.y-this.arrowDim.h)+"px"});
+if(src.targetAnchor&&_13(src.targetAnchor,src.before)){
+src._addItemClass(_13(src.targetAnchor,src.before),src.before?"After":"Before");
+}
+}),_unmarkTargetAnchor:dojo.hitch(this,function(){
+var src=this.source;
+if(!src.targetAnchor){
+return;
+}
+if(src.targetAnchor&&_13(src.targetAnchor,src.before)){
+src._removeItemClass(_13(src.targetAnchor,src.before),src.before?"After":"Before");
+}
+this._hide(this.bottomMarker);
+this._hide(this.topMarker);
+dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src);
+}),destroy:dojo.hitch(this,function(){
+dojo.disconnect(this._source_conn);
+dojo.unsubscribe(this._source_sub);
+dojo.dnd.Source.prototype.destroy.call(this.source);
+if(this.bottomMarker){
+dojo.destroy(this.bottomMarker);
+delete this.bottomMarker;
+}
+if(this.topMarker){
+dojo.destroy(this.topMarker);
+delete this.topMarker;
+}
+}),onDndCancel:dojo.hitch(this,function(){
+dojo.dnd.Source.prototype.onDndCancel.call(this.source);
+this._hide(this.bottomMarker);
+this._hide(this.topMarker);
+})});
+this._source_conn=dojo.connect(this.source,"onDndDrop",this,"_onDndDrop");
+this._source_sub=dojo.subscribe("/dnd/drop/before",this,"_onDndDropBefore");
+this.source.startup();
+}
+},_hide:function(_1e){
+dojo.style(_1e,{left:"-10000px",top:"-10000px","visibility":"hidden"});
+},_onDndDropBefore:function(_1f,_20,_21){
+if(dojo.dnd.manager().target!==this.source){
+return;
+}
+this.source._targetNode=this.source.targetAnchor;
+this.source._beforeTarget=this.source.before;
+var _22=this.grid.views.views;
+var _23=_22[_1f.viewIndex];
+var _24=_22[this.index];
+if(_24!=_23){
+_23.convertColPctToFixed();
+_24.convertColPctToFixed();
+}
+},_onDndDrop:function(_25,_26,_27){
+if(dojo.dnd.manager().target!==this.source){
+if(dojo.dnd.manager().source===this.source){
+this._removingColumn=true;
+}
+return;
+}
+this._hide(this.bottomMarker);
+this._hide(this.topMarker);
+var _28=function(n){
+return n?dojo.attr(n,"idx"):null;
+};
+var w=dojo.marginBox(_26[0]).w;
+if(_25.viewIndex!==this.index){
+var _29=this.grid.views.views;
+var _2a=_29[_25.viewIndex];
+var _2b=_29[this.index];
+if(_2a.viewWidth&&_2a.viewWidth!="auto"){
+_2a.setColumnsWidth(_2a.getColumnsWidth()-w);
+}
+if(_2b.viewWidth&&_2b.viewWidth!="auto"){
+_2b.setColumnsWidth(_2b.getColumnsWidth());
+}
+}
+var stn=this.source._targetNode;
+var stb=this.source._beforeTarget;
+!dojo._isBodyLtr()&&(stb=!stb);
+var _2c=this.grid.layout;
+var idx=this.index;
+delete this.source._targetNode;
+delete this.source._beforeTarget;
+_2c.moveColumn(_25.viewIndex,idx,_28(_26[0]),_28(stn),stb);
+},renderHeader:function(){
+this.headerContentNode.innerHTML=this.header.generateHtml(this._getHeaderContent);
+if(this.flexCells){
+this.contentWidth=this.getContentWidth();
+this.headerContentNode.firstChild.style.width=this.contentWidth;
+}
+dojox.grid.util.fire(this,"onAfterRow",[-1,this.structure.cells,this.headerContentNode]);
+},_getHeaderContent:function(_2d){
+var n=_2d.name||_2d.grid.getCellName(_2d);
+var ret=["<div class=\"dojoxGridSortNode"];
+if(_2d.index!=_2d.grid.getSortIndex()){
+ret.push("\">");
+}else{
+ret=ret.concat([" ",_2d.grid.sortInfo>0?"dojoxGridSortUp":"dojoxGridSortDown","\"><div class=\"dojoxGridArrowButtonChar\">",_2d.grid.sortInfo>0?"&#9650;":"&#9660;","</div><div class=\"dojoxGridArrowButtonNode\" role=\"presentation\"></div>","<div class=\"dojoxGridColCaption\">"]);
+}
+ret=ret.concat([n,"</div></div>"]);
+return ret.join("");
+},resize:function(){
+this.adaptHeight();
+this.adaptWidth();
+},hasHScrollbar:function(_2e){
+var _2f=this._hasHScroll||false;
+if(this._hasHScroll==undefined||_2e){
+if(this.noscroll){
+this._hasHScroll=false;
+}else{
+var _30=dojo.style(this.scrollboxNode,"overflow");
+if(_30=="hidden"){
+this._hasHScroll=false;
+}else{
+if(_30=="scroll"){
+this._hasHScroll=true;
+}else{
+this._hasHScroll=(this.scrollboxNode.offsetWidth-this.getScrollbarWidth()<this.contentNode.offsetWidth);
+}
+}
+}
+}
+if(_2f!==this._hasHScroll){
+this.grid.update();
+}
+return this._hasHScroll;
+},hasVScrollbar:function(_31){
+var _32=this._hasVScroll||false;
+if(this._hasVScroll==undefined||_31){
+if(this.noscroll){
+this._hasVScroll=false;
+}else{
+var _33=dojo.style(this.scrollboxNode,"overflow");
+if(_33=="hidden"){
+this._hasVScroll=false;
+}else{
+if(_33=="scroll"){
+this._hasVScroll=true;
+}else{
+this._hasVScroll=(this.scrollboxNode.scrollHeight>this.scrollboxNode.clientHeight);
+}
+}
+}
+}
+if(_32!==this._hasVScroll){
+this.grid.update();
+}
+return this._hasVScroll;
+},convertColPctToFixed:function(){
+var _34=false;
+this.grid.initialWidth="";
+var _35=dojo.query("th",this.headerContentNode);
+var _36=dojo.map(_35,function(c,_37){
+var w=c.style.width;
+dojo.attr(c,"vIdx",_37);
+if(w&&w.slice(-1)=="%"){
+_34=true;
+}else{
+if(w&&w.slice(-2)=="px"){
+return window.parseInt(w,10);
+}
+}
+return dojo.contentBox(c).w;
+});
+if(_34){
+dojo.forEach(this.grid.layout.cells,function(_38,idx){
+if(_38.view==this){
+var _39=_38.view.getHeaderCellNode(_38.index);
+if(_39&&dojo.hasAttr(_39,"vIdx")){
+var _3a=window.parseInt(dojo.attr(_39,"vIdx"));
+this.setColWidth(idx,_36[_3a]);
+dojo.removeAttr(_39,"vIdx");
+}
+}
+},this);
+return true;
+}
+return false;
+},adaptHeight:function(_3b){
+if(!this.grid._autoHeight){
+var h=(this.domNode.style.height&&parseInt(this.domNode.style.height.replace(/px/,""),10))||this.domNode.clientHeight;
+var _3c=this;
+var _3d=function(){
+var v;
+for(var i in _3c.grid.views.views){
+v=_3c.grid.views.views[i];
+if(v!==_3c&&v.hasHScrollbar()){
+return true;
+}
+}
+return false;
+};
+if(_3b||(this.noscroll&&_3d())){
+h-=dojox.html.metrics.getScrollbar().h;
+}
+dojox.grid.util.setStyleHeightPx(this.scrollboxNode,h);
+}
+this.hasVScrollbar(true);
+},adaptWidth:function(){
+if(this.flexCells){
+this.contentWidth=this.getContentWidth();
+this.headerContentNode.firstChild.style.width=this.contentWidth;
+}
+var w=this.scrollboxNode.offsetWidth-this.getScrollbarWidth();
+if(!this._removingColumn){
+w=Math.max(w,this.getColumnsWidth())+"px";
+}else{
+w=Math.min(w,this.getColumnsWidth())+"px";
+this._removingColumn=false;
+}
+var cn=this.contentNode;
+cn.style.width=w;
+this.hasHScrollbar(true);
+},setSize:function(w,h){
+var ds=this.domNode.style;
+var hs=this.headerNode.style;
+if(w){
+ds.width=w;
+hs.width=w;
+}
+ds.height=(h>=0?h+"px":"");
+},renderRow:function(_3e){
+var _3f=this.createRowNode(_3e);
+this.buildRow(_3e,_3f);
+this.grid.edit.restore(this,_3e);
+return _3f;
+},createRowNode:function(_40){
+var _41=document.createElement("div");
+_41.className=this.classTag+"Row";
+if(this instanceof dojox.grid._RowSelector){
+dojo.attr(_41,"role","presentation");
+}else{
+dojo.attr(_41,"role","row");
+if(this.grid.selectionMode!="none"){
+dojo.attr(_41,"aria-selected","false");
+}
+}
+_41[dojox.grid.util.gridViewTag]=this.id;
+_41[dojox.grid.util.rowIndexTag]=_40;
+this.rowNodes[_40]=_41;
+return _41;
+},buildRow:function(_42,_43){
+this.buildRowContent(_42,_43);
+this.styleRow(_42,_43);
+},buildRowContent:function(_44,_45){
+_45.innerHTML=this.content.generateHtml(_44,_44);
+if(this.flexCells&&this.contentWidth){
+_45.firstChild.style.width=this.contentWidth;
+}
+dojox.grid.util.fire(this,"onAfterRow",[_44,this.structure.cells,_45]);
+},rowRemoved:function(_46){
+if(_46>=0){
+this._cleanupRowWidgets(this.getRowNode(_46));
+}
+this.grid.edit.save(this,_46);
+delete this.rowNodes[_46];
+},getRowNode:function(_47){
+return this.rowNodes[_47];
+},getCellNode:function(_48,_49){
+var row=this.getRowNode(_48);
+if(row){
+return this.content.getCellNode(row,_49);
+}
+},getHeaderCellNode:function(_4a){
+if(this.headerContentNode){
+return this.header.getCellNode(this.headerContentNode,_4a);
+}
+},styleRow:function(_4b,_4c){
+_4c._style=_1(_4c);
+this.styleRowNode(_4b,_4c);
+},styleRowNode:function(_4d,_4e){
+if(_4e){
+this.doStyleRowNode(_4d,_4e);
+}
+},doStyleRowNode:function(_4f,_50){
+this.grid.styleRowNode(_4f,_50);
+},updateRow:function(_51){
+var _52=this.getRowNode(_51);
+if(_52){
+_52.style.height="";
+this.buildRow(_51,_52);
+}
+return _52;
+},updateRowStyles:function(_53){
+this.styleRowNode(_53,this.getRowNode(_53));
+},lastTop:0,firstScroll:0,doscroll:function(_54){
+var _55=dojo._isBodyLtr();
+if(this.firstScroll<2){
+if((!_55&&this.firstScroll==1)||(_55&&this.firstScroll===0)){
+var s=dojo.marginBox(this.headerNodeContainer);
+if(dojo.isIE){
+this.headerNodeContainer.style.width=s.w+this.getScrollbarWidth()+"px";
+}else{
+if(dojo.isMoz){
+this.headerNodeContainer.style.width=s.w-this.getScrollbarWidth()+"px";
+this.scrollboxNode.scrollLeft=_55?this.scrollboxNode.clientWidth-this.scrollboxNode.scrollWidth:this.scrollboxNode.scrollWidth-this.scrollboxNode.clientWidth;
+}
+}
+}
+this.firstScroll++;
+}
+this.headerNode.scrollLeft=this.scrollboxNode.scrollLeft;
+var top=this.scrollboxNode.scrollTop;
+if(top!==this.lastTop){
+this.grid.scrollTo(top);
+}
+},setScrollTop:function(_56){
+this.lastTop=_56;
+this.scrollboxNode.scrollTop=_56;
+return this.scrollboxNode.scrollTop;
+},doContentEvent:function(e){
+if(this.content.decorateEvent(e)){
+this.grid.onContentEvent(e);
+}
+},doHeaderEvent:function(e){
+if(this.header.decorateEvent(e)){
+this.grid.onHeaderEvent(e);
+}
+},dispatchContentEvent:function(e){
+return this.content.dispatchEvent(e);
+},dispatchHeaderEvent:function(e){
+return this.header.dispatchEvent(e);
+},setColWidth:function(_57,_58){
+this.grid.setCellWidth(_57,_58+"px");
+},update:function(){
+if(!this.domNode){
+return;
+}
+this.content.update();
+this.grid.update();
+var _59=this.scrollboxNode.scrollLeft;
+this.scrollboxNode.scrollLeft=_59;
+this.headerNode.scrollLeft=_59;
+}});
+dojo.declare("dojox.grid._GridAvatar",dojo.dnd.Avatar,{construct:function(){
+var dd=dojo.doc;
+var a=dd.createElement("table");
+a.cellPadding=a.cellSpacing="0";
+a.className="dojoxGridDndAvatar";
+a.style.position="absolute";
+a.style.zIndex=1999;
+a.style.margin="0px";
+var b=dd.createElement("tbody");
+var tr=dd.createElement("tr");
+var td=dd.createElement("td");
+var img=dd.createElement("td");
+tr.className="dojoxGridDndAvatarItem";
+img.className="dojoxGridDndAvatarItemImage";
+img.style.width="16px";
+var _5a=this.manager.source,_5b;
+if(_5a.creator){
+_5b=_5a._normalizedCreator(_5a.getItem(this.manager.nodes[0].id).data,"avatar").node;
+}else{
+_5b=this.manager.nodes[0].cloneNode(true);
+var _5c,_5d;
+if(_5b.tagName.toLowerCase()=="tr"){
+_5c=dd.createElement("table");
+_5d=dd.createElement("tbody");
+_5d.appendChild(_5b);
+_5c.appendChild(_5d);
+_5b=_5c;
+}else{
+if(_5b.tagName.toLowerCase()=="th"){
+_5c=dd.createElement("table");
+_5d=dd.createElement("tbody");
+var r=dd.createElement("tr");
+_5c.cellPadding=_5c.cellSpacing="0";
+r.appendChild(_5b);
+_5d.appendChild(r);
+_5c.appendChild(_5d);
+_5b=_5c;
+}
+}
+}
+_5b.id="";
+td.appendChild(_5b);
+tr.appendChild(img);
+tr.appendChild(td);
+dojo.style(tr,"opacity",0.9);
+b.appendChild(tr);
+a.appendChild(b);
+this.node=a;
+var m=dojo.dnd.manager();
+this.oldOffsetY=m.OFFSET_Y;
+m.OFFSET_Y=1;
+},destroy:function(){
+dojo.dnd.manager().OFFSET_Y=this.oldOffsetY;
+this.inherited(arguments);
+}});
+var _5e=dojo.dnd.manager().makeAvatar;
+dojo.dnd.manager().makeAvatar=function(){
+var src=this.source;
+if(src.viewIndex!==undefined&&!dojo.hasClass(dojo.body(),"dijit_a11y")){
+return new dojox.grid._GridAvatar(this);
+}
+return _5e.call(dojo.dnd.manager());
+};
+})();
+}
Index: trunk/web/dojo/dojox/grid/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/EnhancedGrid.js	(revision 9)
@@ -0,0 +1,75 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.EnhancedGrid"]){
+dojo._hasResource["dojox.grid.EnhancedGrid"]=true;
+dojo.provide("dojox.grid.EnhancedGrid");
+dojo.require("dojox.grid.DataGrid");
+dojo.require("dojox.grid.enhanced._Plugin");
+dojo.requireLocalization("dojox.grid.enhanced","EnhancedGrid",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.grid.EnhancedGrid");
+dojo.declare("dojox.grid.EnhancedGrid",dojox.grid.DataGrid,{plugins:null,pluginMgr:null,doubleAffordance:false,minRowHeight:10,keepSortSelection:false,rowSelectionChangedTopic:"ROW_SELECTION_CHANGED",sortRowSelectionChangedTopic:"SORT_ROW_SELECTION_CHANGED",rowMovedTopic:"ROW_MOVED",postMixInProperties:function(){
+this._nls=dojo.i18n.getLocalization("dojox.grid.enhanced","EnhancedGrid",this.lang);
+this.inherited(arguments);
+},postCreate:function(){
+this.pluginMgr=new dojox.grid.enhanced._Plugin(this);
+this.pluginMgr.preInit();
+this.inherited(arguments);
+this.pluginMgr.postInit();
+},_fillContent:function(){
+this.menuContainer=this.srcNodeRef;
+this.inherited(arguments);
+},startup:function(){
+this.menuContainer&&this._initMenus&&this._initMenus();
+this.inherited(arguments);
+if(this.doubleAffordance){
+dojo.addClass(this.domNode,"dojoxGridDoubleAffordance");
+}
+},textSizeChanged:function(){
+if(!dojo.isWebKit){
+this.inherited(arguments);
+}else{
+if(this.textSizeChanging){
+return;
+}
+this.textSizeChanging=true;
+this.inherited(arguments);
+this.textSizeChanging=false;
+}
+},removeSelectedRows:function(){
+if(this.indirectSelection&&this._canEdit){
+var _1=dojo.clone(this.selection.selected);
+this.inherited(arguments);
+dojo.forEach(_1,function(_2,_3){
+_2&&this.grid.rowSelectCell.toggleRow(_3,false);
+});
+}
+},doApplyCellEdit:function(_4,_5,_6){
+if(!_6){
+this.invalidated[_5]=true;
+return;
+}
+this.inherited(arguments);
+},mixin:function(_7,_8){
+var _9={};
+for(p in _8){
+if(p=="_inherited"||p=="declaredClass"||p=="constructor"){
+continue;
+}
+_9[p]=_8[p];
+}
+dojo.mixin(_7,_9);
+},_copyAttr:function(_a,_b){
+if(!_b){
+return;
+}
+return this.inherited(arguments);
+}});
+dojox.grid.EnhancedGrid.markupFactory=function(_c,_d,_e,_f){
+return dojox.grid._Grid.markupFactory(_c,_d,_e,dojo.partial(dojox.grid.DataGrid.cell_markupFactory,_f));
+};
+}
Index: trunk/web/dojo/dojox/grid/_Layout.js
===================================================================
--- trunk/web/dojo/dojox/grid/_Layout.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_Layout.js	(revision 9)
@@ -0,0 +1,214 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Layout"]){
+dojo._hasResource["dojox.grid._Layout"]=true;
+dojo.provide("dojox.grid._Layout");
+dojo.require("dojox.grid.cells");
+dojo.require("dojox.grid._RowSelector");
+dojo.declare("dojox.grid._Layout",null,{constructor:function(_1){
+this.grid=_1;
+},cells:[],structure:null,defaultWidth:"6em",moveColumn:function(_2,_3,_4,_5,_6){
+var _7=this.structure[_2].cells[0];
+var _8=this.structure[_3].cells[0];
+var _9=null;
+var _a=0;
+var _b=0;
+for(var i=0,c;c=_7[i];i++){
+if(c.index==_4){
+_a=i;
+break;
+}
+}
+_9=_7.splice(_a,1)[0];
+_9.view=this.grid.views.views[_3];
+for(i=0,c=null;c=_8[i];i++){
+if(c.index==_5){
+_b=i;
+break;
+}
+}
+if(!_6){
+_b+=1;
+}
+_8.splice(_b,0,_9);
+var _c=this.grid.getCell(this.grid.getSortIndex());
+if(_c){
+_c._currentlySorted=this.grid.getSortAsc();
+}
+this.cells=[];
+_4=0;
+var v;
+for(i=0;v=this.structure[i];i++){
+for(var j=0,cs;cs=v.cells[j];j++){
+for(var k=0;c=cs[k];k++){
+c.index=_4;
+this.cells.push(c);
+if("_currentlySorted" in c){
+var si=_4+1;
+si*=c._currentlySorted?1:-1;
+this.grid.sortInfo=si;
+delete c._currentlySorted;
+}
+_4++;
+}
+}
+}
+this.grid.setupHeaderMenu();
+},setColumnVisibility:function(_d,_e){
+var _f=this.cells[_d];
+if(_f.hidden==_e){
+_f.hidden=!_e;
+var v=_f.view,w=v.viewWidth;
+if(w&&w!="auto"){
+v._togglingColumn=dojo.marginBox(_f.getHeaderNode()).w||0;
+}
+v.update();
+return true;
+}else{
+return false;
+}
+},addCellDef:function(_10,_11,_12){
+var _13=this;
+var _14=function(_15){
+var w=0;
+if(_15.colSpan>1){
+w=0;
+}else{
+w=_15.width||_13._defaultCellProps.width||_13.defaultWidth;
+if(!isNaN(w)){
+w=w+"em";
+}
+}
+return w;
+};
+var _16={grid:this.grid,subrow:_10,layoutIndex:_11,index:this.cells.length};
+if(_12&&_12 instanceof dojox.grid.cells._Base){
+var _17=dojo.clone(_12);
+_16.unitWidth=_14(_17._props);
+_17=dojo.mixin(_17,this._defaultCellProps,_12._props,_16);
+return _17;
+}
+var _18=_12.type||this._defaultCellProps.type||dojox.grid.cells.Cell;
+_16.unitWidth=_14(_12);
+return new _18(dojo.mixin({},this._defaultCellProps,_12,_16));
+},addRowDef:function(_19,_1a){
+var _1b=[];
+var _1c=0,_1d=0,_1e=true;
+for(var i=0,def,_1f;(def=_1a[i]);i++){
+_1f=this.addCellDef(_19,i,def);
+_1b.push(_1f);
+this.cells.push(_1f);
+if(_1e&&_1f.relWidth){
+_1c+=_1f.relWidth;
+}else{
+if(_1f.width){
+var w=_1f.width;
+if(typeof w=="string"&&w.slice(-1)=="%"){
+_1d+=window.parseInt(w,10);
+}else{
+if(w=="auto"){
+_1e=false;
+}
+}
+}
+}
+}
+if(_1c&&_1e){
+dojo.forEach(_1b,function(_20){
+if(_20.relWidth){
+_20.width=_20.unitWidth=((_20.relWidth/_1c)*(100-_1d))+"%";
+}
+});
+}
+return _1b;
+},addRowsDef:function(_21){
+var _22=[];
+if(dojo.isArray(_21)){
+if(dojo.isArray(_21[0])){
+for(var i=0,row;_21&&(row=_21[i]);i++){
+_22.push(this.addRowDef(i,row));
+}
+}else{
+_22.push(this.addRowDef(0,_21));
+}
+}
+return _22;
+},addViewDef:function(_23){
+this._defaultCellProps=_23.defaultCell||{};
+if(_23.width&&_23.width=="auto"){
+delete _23.width;
+}
+return dojo.mixin({},_23,{cells:this.addRowsDef(_23.rows||_23.cells)});
+},setStructure:function(_24){
+this.fieldIndex=0;
+this.cells=[];
+var s=this.structure=[];
+if(this.grid.rowSelector){
+var sel={type:dojox._scopeName+".grid._RowSelector"};
+if(dojo.isString(this.grid.rowSelector)){
+var _25=this.grid.rowSelector;
+if(_25=="false"){
+sel=null;
+}else{
+if(_25!="true"){
+sel["width"]=_25;
+}
+}
+}else{
+if(!this.grid.rowSelector){
+sel=null;
+}
+}
+if(sel){
+s.push(this.addViewDef(sel));
+}
+}
+var _26=function(def){
+return ("name" in def||"field" in def||"get" in def);
+};
+var _27=function(def){
+if(dojo.isArray(def)){
+if(dojo.isArray(def[0])||_26(def[0])){
+return true;
+}
+}
+return false;
+};
+var _28=function(def){
+return (def!==null&&dojo.isObject(def)&&("cells" in def||"rows" in def||("type" in def&&!_26(def))));
+};
+if(dojo.isArray(_24)){
+var _29=false;
+for(var i=0,st;(st=_24[i]);i++){
+if(_28(st)){
+_29=true;
+break;
+}
+}
+if(!_29){
+s.push(this.addViewDef({cells:_24}));
+}else{
+for(i=0;(st=_24[i]);i++){
+if(_27(st)){
+s.push(this.addViewDef({cells:st}));
+}else{
+if(_28(st)){
+s.push(this.addViewDef(st));
+}
+}
+}
+}
+}else{
+if(_28(_24)){
+s.push(this.addViewDef(_24));
+}
+}
+this.cellCount=this.cells.length;
+this.grid.setupHeaderMenu();
+}});
+}
Index: trunk/web/dojo/dojox/grid/util.js
===================================================================
--- trunk/web/dojo/dojox/grid/util.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/util.js	(revision 9)
@@ -0,0 +1,66 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.util"]){
+dojo._hasResource["dojox.grid.util"]=true;
+dojo.provide("dojox.grid.util");
+(function(){
+var _1=dojox.grid.util;
+_1.na="...";
+_1.rowIndexTag="gridRowIndex";
+_1.gridViewTag="gridView";
+_1.fire=function(ob,ev,_2){
+var fn=ob&&ev&&ob[ev];
+return fn&&(_2?fn.apply(ob,_2):ob[ev]());
+};
+_1.setStyleHeightPx=function(_3,_4){
+if(_4>=0){
+var s=_3.style;
+var v=_4+"px";
+if(_3&&s["height"]!=v){
+s["height"]=v;
+}
+}
+};
+_1.mouseEvents=["mouseover","mouseout","mousedown","mouseup","click","dblclick","contextmenu"];
+_1.keyEvents=["keyup","keydown","keypress"];
+_1.funnelEvents=function(_5,_6,_7,_8){
+var _9=(_8?_8:_1.mouseEvents.concat(_1.keyEvents));
+for(var i=0,l=_9.length;i<l;i++){
+_6.connect(_5,"on"+_9[i],_7);
+}
+};
+_1.removeNode=function(_a){
+_a=dojo.byId(_a);
+_a&&_a.parentNode&&_a.parentNode.removeChild(_a);
+return _a;
+};
+_1.arrayCompare=function(_b,_c){
+for(var i=0,l=_b.length;i<l;i++){
+if(_b[i]!=_c[i]){
+return false;
+}
+}
+return (_b.length==_c.length);
+};
+_1.arrayInsert=function(_d,_e,_f){
+if(_d.length<=_e){
+_d[_e]=_f;
+}else{
+_d.splice(_e,0,_f);
+}
+};
+_1.arrayRemove=function(_10,_11){
+_10.splice(_11,1);
+};
+_1.arraySwap=function(_12,inI,inJ){
+var _13=_12[inI];
+_12[inI]=_12[inJ];
+_12[inJ]=_13;
+};
+})();
+}
Index: trunk/web/dojo/dojox/grid/_Selector.js
===================================================================
--- trunk/web/dojo/dojox/grid/_Selector.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_Selector.js	(revision 9)
@@ -0,0 +1,160 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Selector"]){
+dojo._hasResource["dojox.grid._Selector"]=true;
+dojo.provide("dojox.grid._Selector");
+dojo.require("dojox.grid.Selection");
+dojo.require("dojox.grid._View");
+dojo.require("dojox.grid._Builder");
+(function(){
+dojox.grid._InputSelectorHeaderBuilder=dojo.extend(function(_1){
+dojox.grid._HeaderBuilder.call(this,_1);
+},dojox.grid._HeaderBuilder.prototype,{generateHtml:function(){
+var w=this.view.contentWidth||0;
+var _2=this.view.grid.selection.getSelectedCount();
+var _3=(_2&&_2==this.view.grid.rowCount)?" dijitCheckBoxChecked dijitChecked":"";
+return "<table style=\"width:"+w+"px;\" "+"border=\"0\" cellspacing=\"0\" cellpadding=\"0\" "+"role=\"presentation\"><tr><th style=\"text-align: center;\">"+"<div class=\"dojoxGridCheckSelector dijitReset dijitInline dijitCheckBox"+_3+"\"></div></th></tr></table>";
+},doclick:function(e){
+var _4=this.view.grid.selection.getSelectedCount();
+this.view._selectionChanging=true;
+if(_4==this.view.grid.rowCount){
+this.view.grid.selection.deselectAll();
+}else{
+this.view.grid.selection.selectRange(0,this.view.grid.rowCount-1);
+}
+this.view._selectionChanging=false;
+this.view.onSelectionChanged();
+return true;
+}});
+dojox.grid._SelectorContentBuilder=dojo.extend(function(_5){
+dojox.grid._ContentBuilder.call(this,_5);
+},dojox.grid._ContentBuilder.prototype,{generateHtml:function(_6,_7){
+var w=this.view.contentWidth||0;
+return "<table class=\"dojoxGridRowbarTable\" style=\"width:"+w+"px;\" border=\"0\" "+"cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"><tr>"+"<td  style=\"text-align: center;\" class=\"dojoxGridRowbarInner\">"+this.getCellContent(_7)+"</td></tr></table>";
+},getCellContent:function(_8){
+return "&nbsp;";
+},findTarget:function(){
+var t=dojox.grid._ContentBuilder.prototype.findTarget.apply(this,arguments);
+return t;
+},domouseover:function(e){
+this.view.grid.onMouseOverRow(e);
+},domouseout:function(e){
+if(!this.isIntraRowEvent(e)){
+this.view.grid.onMouseOutRow(e);
+}
+},doclick:function(e){
+var _9=e.rowIndex;
+var _a=this.view.grid.selection.isSelected(_9);
+var _b=this.view.grid.selection.mode;
+if(!_a){
+if(_b=="single"){
+this.view.grid.selection.select(_9);
+}else{
+if(_b!="none"){
+this.view.grid.selection.addToSelection(_9);
+}
+}
+}else{
+this.view.grid.selection.deselect(_9);
+}
+return true;
+}});
+dojox.grid._InputSelectorContentBuilder=dojo.extend(function(_c){
+dojox.grid._SelectorContentBuilder.call(this,_c);
+},dojox.grid._SelectorContentBuilder.prototype,{getCellContent:function(_d){
+var v=this.view;
+var _e=v.inputType=="checkbox"?"CheckBox":"Radio";
+var _f=!!v.grid.selection.isSelected(_d)?" dijit"+_e+"Checked dijitChecked":"";
+return "<div class=\"dojoxGridCheckSelector dijitReset dijitInline dijit"+_e+_f+"\"></div>";
+}});
+dojo.declare("dojox.grid._Selector",dojox.grid._View,{inputType:"",selectionMode:"",defaultWidth:"2em",noscroll:true,padBorderWidth:2,_contentBuilderClass:dojox.grid._SelectorContentBuilder,postCreate:function(){
+this.inherited(arguments);
+if(this.selectionMode){
+this.grid.selection.mode=this.selectionMode;
+}
+this.connect(this.grid.selection,"onSelected","onSelected");
+this.connect(this.grid.selection,"onDeselected","onDeselected");
+},buildRendering:function(){
+this.inherited(arguments);
+this.scrollboxNode.style.overflow="hidden";
+},getWidth:function(){
+return this.viewWidth||this.defaultWidth;
+},resize:function(){
+this.adaptHeight();
+},setStructure:function(s){
+this.inherited(arguments);
+if(s.defaultWidth){
+this.defaultWidth=s.defaultWidth;
+}
+},adaptWidth:function(){
+if(!("contentWidth" in this)&&this.contentNode){
+this.contentWidth=this.contentNode.offsetWidth-this.padBorderWidth;
+}
+},doStyleRowNode:function(_10,_11){
+var n=["dojoxGridRowbar dojoxGridNonNormalizedCell"];
+if(this.grid.rows.isOver(_10)){
+n.push("dojoxGridRowbarOver");
+}
+if(this.grid.selection.isSelected(_10)){
+n.push("dojoxGridRowbarSelected");
+}
+_11.className=n.join(" ");
+},onSelected:function(_12){
+this.grid.updateRow(_12);
+},onDeselected:function(_13){
+this.grid.updateRow(_13);
+}});
+if(!dojox.grid._View.prototype._headerBuilderClass&&!dojox.grid._View.prototype._contentBuilderClass){
+dojox.grid._Selector.prototype.postCreate=function(){
+this.connect(this.scrollboxNode,"onscroll","doscroll");
+dojox.grid.util.funnelEvents(this.contentNode,this,"doContentEvent",["mouseover","mouseout","click","dblclick","contextmenu","mousedown"]);
+dojox.grid.util.funnelEvents(this.headerNode,this,"doHeaderEvent",["dblclick","mouseover","mouseout","mousemove","mousedown","click","contextmenu"]);
+if(this._contentBuilderClass){
+this.content=new this._contentBuilderClass(this);
+}else{
+this.content=new dojox.grid._ContentBuilder(this);
+}
+if(this._headerBuilderClass){
+this.header=new this._headerBuilderClass(this);
+}else{
+this.header=new dojox.grid._HeaderBuilder(this);
+}
+if(!dojo._isBodyLtr()){
+this.headerNodeContainer.style.width="";
+}
+this.connect(this.grid.selection,"onSelected","onSelected");
+this.connect(this.grid.selection,"onDeselected","onDeselected");
+};
+}
+dojo.declare("dojox.grid._RadioSelector",dojox.grid._Selector,{inputType:"radio",selectionMode:"single",_contentBuilderClass:dojox.grid._InputSelectorContentBuilder,buildRendering:function(){
+this.inherited(arguments);
+this.headerNode.style.visibility="hidden";
+},renderHeader:function(){
+}});
+dojo.declare("dojox.grid._CheckBoxSelector",dojox.grid._Selector,{inputType:"checkbox",_headerBuilderClass:dojox.grid._InputSelectorHeaderBuilder,_contentBuilderClass:dojox.grid._InputSelectorContentBuilder,postCreate:function(){
+this.inherited(arguments);
+this.connect(this.grid,"onSelectionChanged","onSelectionChanged");
+this.connect(this.grid,"updateRowCount","_updateVisibility");
+},renderHeader:function(){
+this.inherited(arguments);
+this._updateVisibility(this.grid.rowCount);
+},_updateVisibility:function(_14){
+this.headerNode.style.visibility=_14?"":"hidden";
+},onSelectionChanged:function(){
+if(this._selectionChanging){
+return;
+}
+var _15=dojo.query(".dojoxGridCheckSelector",this.headerNode)[0];
+var g=this.grid;
+var s=(g.rowCount&&g.rowCount==g.selection.getSelectedCount());
+g.allItemsSelected=s||false;
+dojo.toggleClass(_15,"dijitChecked",g.allItemsSelected);
+dojo.toggleClass(_15,"dijitCheckBoxChecked",g.allItemsSelected);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/grid/DataGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/DataGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/DataGrid.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.window.getBox=function(){var _1=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _2=dojo._docScroll();return {w:_1.clientWidth,h:_1.clientHeight,l:_2.x,t:_2.y};};dojo.window.get=function(_3){if(dojo.isIE&&window!==document.parentWindow){_3.parentWindow.execScript("document._parentWindow = window;","Javascript");var _4=_3._parentWindow;_3._parentWindow=null;return _4;}return _3.parentWindow||_3.defaultView;};dojo.window.scrollIntoView=function(_5,_6){try{_5=dojo.byId(_5);var _7=_5.ownerDocument||dojo.doc,_8=_7.body||dojo.body(),_9=_7.documentElement||_8.parentNode,_a=dojo.isIE,_b=dojo.isWebKit;if((!(dojo.isMoz||_a||_b||dojo.isOpera)||_5==_8||_5==_9)&&(typeof _5.scrollIntoView!="undefined")){_5.scrollIntoView(false);return;}var _c=_7.compatMode=="BackCompat",_d=_c?_8:_9,_e=_b?_8:_d,_f=_d.clientWidth,_10=_d.clientHeight,rtl=!dojo._isBodyLtr(),_11=_6||dojo.position(_5),el=_5.parentNode,_12=function(el){return ((_a<=6||(_a&&_c))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_12(_5)){return;}while(el){if(el==_8){el=_e;}var _13=dojo.position(el),_14=_12(el);if(el==_e){_13.w=_f;_13.h=_10;if(_e==_9&&_a&&rtl){_13.x+=_e.offsetWidth-_13.w;}if(_13.x<0||!_a){_13.x=0;}if(_13.y<0||!_a){_13.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_13.w-=pb.w;_13.h-=pb.h;_13.x+=pb.l;_13.y+=pb.t;}if(el!=_e){var _15=el.clientWidth,_16=_13.w-_15;if(_15>0&&_16>0){_13.w=_15;if(_a&&rtl){_13.x+=_16;}}_15=el.clientHeight;_16=_13.h-_15;if(_15>0&&_16>0){_13.h=_15;}}if(_14){if(_13.y<0){_13.h+=_13.y;_13.y=0;}if(_13.x<0){_13.w+=_13.x;_13.x=0;}if(_13.y+_13.h>_10){_13.h=_10-_13.y;}if(_13.x+_13.w>_f){_13.w=_f-_13.x;}}var l=_11.x-_13.x,t=_11.y-Math.max(_13.y,0),r=l+_11.w-_13.w,bot=t+_11.h-_13.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);_11.x+=el.scrollLeft;el.scrollLeft+=(_a>=8&&!_c&&rtl)?-s:s;_11.x-=el.scrollLeft;}if(bot*t>0){_11.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_11.y-=el.scrollTop;}el=(el!=_e)&&!_14&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_5.scrollIntoView(false);}};}if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};this.length=0;},add:function(_17){if(this._hash[_17.id]){throw new Error("Tried to register widget with id=="+_17.id+" but that id is already registered");}this._hash[_17.id]=_17;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_18,_19){_19=_19||dojo.global;var i=0,id;for(id in this._hash){_18.call(_19,this._hash[id],i++,this._hash);}return this;},filter:function(_1a,_1b){_1b=_1b||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_1a.call(_1b,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_1c;for(id in this._hash){_1c=this._hash[id];if(_1c.declaredClass==cls){res.add(_1c);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_1d,_1e){return dojo.map(this.toArray(),_1d,_1e);},every:function(_1f,_20){_20=_20||dojo.global;var x=0,i;for(i in this._hash){if(!_1f.call(_20,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_21,_22){_22=_22||dojo.global;var x=0,i;for(i in this._hash){if(_21.call(_22,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _23=dijit.registry._hash,_24=dojo.attr,_25=dojo.hasAttr,_26=dojo.style;dijit.byId=function(id){return typeof id=="string"?_23[id]:id;};var _27={};dijit.getUniqueId=function(_28){var id;do{id=_28+"_"+(_28 in _27?++_27[_28]:_27[_28]=0);}while(_23[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_29){var _2a=[];function _2b(_2c){for(var _2d=_2c.firstChild;_2d;_2d=_2d.nextSibling){if(_2d.nodeType==1){var _2e=_2d.getAttribute("widgetId");if(_2e){_2a.push(_23[_2e]);}else{_2b(_2d);}}}};_2b(_29);return _2a;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_2f){if(!_2f._destroyed){if(_2f.destroyRecursive){_2f.destroyRecursive();}else{if(_2f.destroy){_2f.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_30){return _23[_30.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_31){while(_31){var id=_31.getAttribute&&_31.getAttribute("widgetId");if(id){return _23[id];}_31=_31.parentNode;}return null;};var _32=(dijit._isElementShown=function(_33){var s=_26(_33);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_24(_33,"type")!="hidden");});dijit.hasDefaultTabStop=function(_34){switch(_34.nodeName.toLowerCase()){case "a":return _25(_34,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":if(dojo.isMoz){try{return _34.contentDocument.designMode=="on";}catch(err){return false;}}else{if(dojo.isWebKit){var doc=_34.contentDocument,_35=doc&&doc.body;return _35&&_35.contentEditable=="true";}else{try{doc=_34.contentWindow.document;_35=doc&&doc.body;return _35&&_35.firstChild&&_35.firstChild.contentEditable=="true";}catch(e){return false;}}}default:return _34.contentEditable=="true";}};var _36=(dijit.isTabNavigable=function(_37){if(_24(_37,"disabled")){return false;}else{if(_25(_37,"tabIndex")){return _24(_37,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_37);}}});dijit._getTabNavigable=function(_38){var _39,_3a,_3b,_3c,_3d,_3e;var _3f=function(_40){dojo.query("> *",_40).forEach(function(_41){if((dojo.isIE&&_41.scopeName!=="HTML")||!_32(_41)){return;}if(_36(_41)){var _42=_24(_41,"tabIndex");if(!_25(_41,"tabIndex")||_42==0){if(!_39){_39=_41;}_3a=_41;}else{if(_42>0){if(!_3b||_42<_3c){_3c=_42;_3b=_41;}if(!_3d||_42>=_3e){_3e=_42;_3d=_41;}}}}if(_41.nodeName.toUpperCase()!="SELECT"){_3f(_41);}});};if(_32(_38)){_3f(_38);}return {first:_39,last:_3a,lowest:_3b,highest:_3d};};dijit.getFirstInTabbingOrder=function(_43){var _44=dijit._getTabNavigable(dojo.byId(_43));return _44.lowest?_44.lowest:_44.first;};dijit.getLastInTabbingOrder=function(_45){var _46=dijit._getTabNavigable(dojo.byId(_45));return _46.last?_46.last:_46.highest;};dijit.defaultDuration=dojo.config["defaultDuration"]||200;})();}if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){return dijit.getBookmark().isCollapsed;},getBookmark:function(){var bm,rg,tg,sel=dojo.doc.selection,cf=dijit._curFocus;if(dojo.global.getSelection){sel=dojo.global.getSelection();if(sel){if(sel.isCollapsed){tg=cf?cf.tagName:"";if(tg){tg=tg.toLowerCase();if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){sel={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};return {isCollapsed:(sel.end<=sel.start),mark:sel};}}bm={isCollapsed:true};}else{rg=sel.getRangeAt(0);bm={isCollapsed:false,mark:rg.cloneRange()};}}}else{if(sel){tg=cf?cf.tagName:"";tg=tg.toLowerCase();if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){if(sel.type&&sel.type.toLowerCase()=="none"){return {isCollapsed:true,mark:null};}else{rg=sel.createRange();return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};}}bm={};try{rg=sel.createRange();bm.isCollapsed=!(sel.type=="Text"?rg.htmlText.length:rg.length);}catch(e){bm.isCollapsed=true;return bm;}if(sel.type.toUpperCase()=="CONTROL"){if(rg.length){bm.mark=[];var i=0,len=rg.length;while(i<len){bm.mark.push(rg.item(i++));}}else{bm.isCollapsed=true;bm.mark=null;}}else{bm.mark=rg.getBookmark();}}else{console.warn("No idea how to store the current selection for this browser!");}}return bm;},moveToBookmark:function(_47){var _48=dojo.doc,_49=_47.mark;if(_49){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_49.pRange){var r=_49;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_49);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_48.selection&&_49){var rg;if(_49.pRange){rg=_49.range;}else{if(dojo.isArray(_49)){rg=_48.body.createControlRange();dojo.forEach(_49,function(n){rg.addElement(n);});}else{rg=_48.body.createTextRange();rg.moveToBookmark(_49);}}rg.select();}}}},getFocus:function(_4a,_4b){var _4c=!dijit._curFocus||(_4a&&dojo.isDescendant(dijit._curFocus,_4a.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_4c,bookmark:(_4c==dijit._curFocus)&&dojo.withGlobal(_4b||dojo.global,dijit.getBookmark),openedForWindow:_4b};},focus:function(_4d){if(!_4d){return;}var _4e="node" in _4d?_4d.node:_4d,_4f=_4d.bookmark,_50=_4d.openedForWindow,_51=_4f?_4f.isCollapsed:false;if(_4e){var _52=(_4e.tagName.toLowerCase()=="iframe")?_4e.contentWindow:_4e;if(_52&&_52.focus){try{_52.focus();}catch(e){}}dijit._onFocusNode(_4e);}if(_4f&&dojo.withGlobal(_50||dojo.global,dijit.isCollapsed)&&!_51){if(_50){_50.focus();}try{dojo.withGlobal(_50||dojo.global,dijit.moveToBookmark,null,[_4f]);}catch(e2){}}},_activeStack:[],registerIframe:function(_53){return dijit.registerWin(_53.contentWindow,_53);},unregisterIframe:function(_54){dijit.unregisterWin(_54);},registerWin:function(_55,_56){var _57=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_56||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_55.document.documentElement:_55.document;if(doc){if(dojo.isIE){doc.attachEvent("onmousedown",_57);var _58=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_56||evt.srcElement);}else{dijit._onTouchNode(_56||evt.srcElement);}};doc.attachEvent("onactivate",_58);var _59=function(evt){dijit._onBlurNode(_56||evt.srcElement);};doc.attachEvent("ondeactivate",_59);return function(){doc.detachEvent("onmousedown",_57);doc.detachEvent("onactivate",_58);doc.detachEvent("ondeactivate",_59);doc=null;};}else{doc.addEventListener("mousedown",_57,true);var _5a=function(evt){dijit._onFocusNode(_56||evt.target);};doc.addEventListener("focus",_5a,true);var _5b=function(evt){dijit._onBlurNode(_56||evt.target);};doc.addEventListener("blur",_5b,true);return function(){doc.removeEventListener("mousedown",_57,true);doc.removeEventListener("focus",_5a,true);doc.removeEventListener("blur",_5b,true);doc=null;};}}},unregisterWin:function(_5c){_5c&&_5c();},_onBlurNode:function(_5d){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);dijit._prevFocus=null;},100);},_onTouchNode:function(_5e,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _5f=[];try{while(_5e){var _60=dojo.attr(_5e,"dijitPopupParent");if(_60){_5e=dijit.byId(_60).domNode;}else{if(_5e.tagName&&_5e.tagName.toLowerCase()=="body"){if(_5e===dojo.body()){break;}_5e=dojo.window.get(_5e.ownerDocument).frameElement;}else{var id=_5e.getAttribute&&_5e.getAttribute("widgetId"),_61=id&&dijit.byId(id);if(_61&&!(by=="mouse"&&_61.get("disabled"))){_5f.unshift(id);}_5e=_5e.parentNode;}}}}catch(e){}dijit._setStack(_5f,by);},_onFocusNode:function(_62){if(!_62){return;}if(_62.nodeType==9){return;}dijit._onTouchNode(_62);if(_62==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_62;dojo.publish("focusNode",[_62]);},_setStack:function(_63,by){var _64=dijit._activeStack;dijit._activeStack=_63;for(var _65=0;_65<Math.min(_64.length,_63.length);_65++){if(_64[_65]!=_63[_65]){break;}}var _66;for(var i=_64.length-1;i>=_65;i--){_66=dijit.byId(_64[i]);if(_66){_66._focused=false;_66._hasBeenBlurred=true;if(_66._onBlur){_66._onBlur(by);}dojo.publish("widgetBlur",[_66,by]);}}for(i=_65;i<_63.length;i++){_66=dijit.byId(_63[i]);if(_66){_66._focused=true;if(_66._onFocus){_66._onFocus(by);}dojo.publish("widgetFocus",[_66,by]);}}}});dojo.addOnLoad(function(){var _67=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_67);_67=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_68){this.pairs=[];this.returnWrappers=_68||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_69,_6a,_6b,_6c,_6d){this.pairs[((_6d)?"unshift":"push")]([_69,_6a,_6b,_6c]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _6e=this.pairs[i];if(_6e[1].apply(this,arguments)){if((_6e[3])||(this.returnWrappers)){return _6e[2];}else{return _6e[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_6f){for(var i=0;i<this.pairs.length;i++){var _70=this.pairs[i];if(_70[0]==_6f){this.pairs.splice(i,1);return true;}}return false;}});}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){return dojo.window.getBox();};dijit.placeOnScreen=function(_71,pos,_72,_73){var _74=dojo.map(_72,function(_75){var c={corner:_75,pos:{x:pos.x,y:pos.y}};if(_73){c.pos.x+=_75.charAt(1)=="L"?_73.x:-_73.x;c.pos.y+=_75.charAt(0)=="T"?_73.y:-_73.y;}return c;});return dijit._place(_71,_74);};dijit._place=function(_76,_77,_78){var _79=dojo.window.getBox();if(!_76.parentNode||String(_76.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_76);}var _7a=null;dojo.some(_77,function(_7b){var _7c=_7b.corner;var pos=_7b.pos;if(_78){_78(_76,_7b.aroundCorner,_7c);}var _7d=_76.style;var _7e=_7d.display;var _7f=_7d.visibility;_7d.visibility="hidden";_7d.display="";var mb=dojo.marginBox(_76);_7d.display=_7e;_7d.visibility=_7f;var _80=Math.max(_79.l,_7c.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_81=Math.max(_79.t,_7c.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_82=Math.min(_79.l+_79.w,_7c.charAt(1)=="L"?(_80+mb.w):pos.x),_83=Math.min(_79.t+_79.h,_7c.charAt(0)=="T"?(_81+mb.h):pos.y),_84=_82-_80,_85=_83-_81,_86=(mb.w-_84)+(mb.h-_85);if(_7a==null||_86<_7a.overflow){_7a={corner:_7c,aroundCorner:_7b.aroundCorner,x:_80,y:_81,w:_84,h:_85,overflow:_86};}return !_86;});_76.style.left=_7a.x+"px";_76.style.top=_7a.y+"px";if(_7a.overflow&&_78){_78(_76,_7a.aroundCorner,_7a.corner);}return _7a;};dijit.placeOnScreenAroundNode=function(_87,_88,_89,_8a){_88=dojo.byId(_88);var _8b=_88.style.display;_88.style.display="";var _8c=dojo.position(_88,true);_88.style.display=_8b;return dijit._placeOnScreenAroundRect(_87,_8c.x,_8c.y,_8c.w,_8c.h,_89,_8a);};dijit.placeOnScreenAroundRectangle=function(_8d,_8e,_8f,_90){return dijit._placeOnScreenAroundRect(_8d,_8e.x,_8e.y,_8e.width,_8e.height,_8f,_90);};dijit._placeOnScreenAroundRect=function(_91,x,y,_92,_93,_94,_95){var _96=[];for(var _97 in _94){_96.push({aroundCorner:_97,corner:_94[_97],pos:{x:x+(_97.charAt(1)=="L"?0:_92),y:y+(_97.charAt(0)=="T"?0:_93)}});}return dijit._place(_91,_96,_95);};dijit.placementRegistry=new dojo.AdapterRegistry();dijit.placementRegistry.register("node",function(n,x){return typeof x=="object"&&typeof x.offsetWidth!="undefined"&&typeof x.offsetHeight!="undefined";},dijit.placeOnScreenAroundNode);dijit.placementRegistry.register("rect",function(n,x){return typeof x=="object"&&"x" in x&&"y" in x&&"width" in x&&"height" in x;},dijit.placeOnScreenAroundRectangle);dijit.placeOnScreenAroundElement=function(_98,_99,_9a,_9b){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_9c,_9d){var _9e={};dojo.forEach(_9c,function(pos){switch(pos){case "after":_9e[_9d?"BR":"BL"]=_9d?"BL":"BR";break;case "before":_9e[_9d?"BL":"BR"]=_9d?"BR":"BL";break;case "below":_9e[_9d?"BL":"BR"]=_9d?"TL":"TR";_9e[_9d?"BR":"BL"]=_9d?"TR":"TL";break;case "above":default:_9e[_9d?"TL":"TR"]=_9d?"BL":"BR";_9e[_9d?"TR":"TL"]=_9d?"BR":"BL";break;}});return _9e;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_9f){var _a0=_9f.parentNode;if(!_a0||!dojo.hasClass(_a0,"dijitPopup")){_a0=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());dijit.setWaiRole(_a0,"presentation");_a0.appendChild(_9f);}var s=_9f.style;s.display="";s.visibility="";s.position="";s.top="0px";dojo.style(_a0,{visibility:"hidden",top:"-9999px"});},getTopPopup:function(){var _a1=this._stack;for(var pi=_a1.length-1;pi>0&&_a1[pi].parent===_a1[pi-1].widget;pi--){}return _a1[pi];},open:function(_a2){var _a3=this._stack,_a4=_a2.popup,_a5=_a2.orient||((_a2.parent?_a2.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_a6=_a2.around,id=(_a2.around&&_a2.around.id)?(_a2.around.id+"_dropdown"):("popup_"+this._idGen++);var _a7=_a4.domNode.parentNode;if(!_a7||!dojo.hasClass(_a7,"dijitPopup")){this.moveOffScreen(_a4.domNode);_a7=_a4.domNode.parentNode;}dojo.attr(_a7,{id:id,style:{zIndex:this._beginZIndex+_a3.length},"class":"dijitPopup "+(_a4.baseClass||_a4["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_a2.parent?_a2.parent.id:""});if(dojo.isIE||dojo.isMoz){var _a8=_a7.childNodes[1];if(!_a8){_a8=new dijit.BackgroundIframe(_a7);}}var _a9=_a6?dijit.placeOnScreenAroundElement(_a7,_a6,_a5,_a4.orient?dojo.hitch(_a4,"orient"):null):dijit.placeOnScreen(_a7,_a2,_a5=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_a2.padding);_a7.style.visibility="visible";_a4.domNode.style.visibility="visible";var _aa=[];_aa.push(dojo.connect(_a7,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&_a2.onCancel){dojo.stopEvent(evt);_a2.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _ab=this.getTopPopup();if(_ab&&_ab.onCancel){_ab.onCancel();}}}}));if(_a4.onCancel){_aa.push(dojo.connect(_a4,"onCancel",_a2.onCancel));}_aa.push(dojo.connect(_a4,_a4.onExecute?"onExecute":"onChange",this,function(){var _ac=this.getTopPopup();if(_ac&&_ac.onExecute){_ac.onExecute();}}));_a3.push({wrapper:_a7,iframe:_a8,widget:_a4,parent:_a2.parent,onExecute:_a2.onExecute,onCancel:_a2.onCancel,onClose:_a2.onClose,handlers:_aa});if(_a4.onOpen){_a4.onOpen(_a9);}return _a9;},close:function(_ad){var _ae=this._stack;while(dojo.some(_ae,function(_af){return _af.widget==_ad;})){var top=_ae.pop(),_b0=top.wrapper,_b1=top.iframe,_b2=top.widget,_b3=top.onClose;if(_b2.onClose){_b2.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_b2&&_b2.domNode){this.moveOffScreen(_b2.domNode);}else{dojo.destroy(_b0);}if(_b3){_b3();}}}};dijit._frames=new function(){var _b4=[];this.pop=function(){var _b5;if(_b4.length){_b5=_b4.pop();_b5.style.display="";}else{if(dojo.isIE){var _b6=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";var _b7="<iframe src='"+_b6+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_b5=dojo.doc.createElement(_b7);}else{_b5=dojo.create("iframe");_b5.src="javascript:\"\"";_b5.className="dijitBackgroundIframe";dojo.style(_b5,"opacity",0.1);}_b5.tabIndex=-1;dijit.setWaiRole(_b5,"presentation");}return _b5;};this.push=function(_b8){_b8.style.display="none";_b4.push(_b8);};}();dijit.BackgroundIframe=function(_b9){if(!_b9.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _ba=dijit._frames.pop();_b9.appendChild(_ba);if(dojo.isIE<7){this.resize(_b9);this._conn=dojo.connect(_b9,"onresize",this,function(){this.resize(_b9);});}else{dojo.style(_ba,{width:"100%",height:"100%"});}this.iframe=_ba;}};dojo.extend(dijit.BackgroundIframe,{resize:function(_bb){if(this.iframe&&dojo.isIE<7){dojo.style(this.iframe,{width:_bb.offsetWidth+"px",height:_bb.offsetHeight+"px"});}},destroy:function(){if(this._conn){dojo.disconnect(this._conn);this._conn=null;}if(this.iframe){dijit._frames.push(this.iframe);delete this.iframe;}}});}if(!dojo._hasResource["dijit._base.scroll"]){dojo._hasResource["dijit._base.scroll"]=true;dojo.provide("dijit._base.scroll");dijit.scrollIntoView=function(_bc,pos){dojo.window.scrollIntoView(_bc,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,_bd=d.doc.documentElement,ie=d.isIE,_be=d.isOpera,maj=Math.floor,ff=d.isFF,_bf=d.boxModel.replace(/-/,""),_c0={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_be,dj_khtml:d.isKhtml,dj_webkit:d.isWebKit,dj_safari:d.isSafari,dj_chrome:d.isChrome,dj_gecko:d.isMozilla,dj_ff3:maj(ff)==3};_c0["dj_"+_bf]=true;var _c1="";for(var clz in _c0){if(_c0[clz]){_c1+=clz+" ";}}_bd.className=d.trim(_bd.className+" "+_c1);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _c2="dj_rtl dijitRtl "+_c1.replace(/ /g,"-rtl ");_bd.className=d.trim(_bd.className+" "+_c2);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}if(!dojo._hasResource["dijit._base.typematic"]){dojo._hasResource["dijit._base.typematic"]=true;dojo.provide("dijit._base.typematic");dijit.typematic={_fireEventAndReload:function(){this._timer=null;this._callback(++this._count,this._node,this._evt);this._currentTimeout=Math.max(this._currentTimeout<0?this._initialDelay:(this._subsequentDelay>1?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_c3,_c4,_c5,obj,_c6,_c7,_c8){if(obj!=this._obj){this.stop();this._initialDelay=_c7||500;this._subsequentDelay=_c6||0.9;this._minDelay=_c8||10;this._obj=obj;this._evt=evt;this._node=_c4;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_c3,_c5);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(_c9,_ca,_cb,_cc,_cd,_ce,_cf){if(_ca.keyCode){_ca.charOrCode=_ca.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_ca.charCode){_ca.charOrCode=String.fromCharCode(_ca.charCode);dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}}return [dojo.connect(_c9,"onkeypress",this,function(evt){if(evt.charOrCode==_ca.charOrCode&&(_ca.ctrlKey===undefined||_ca.ctrlKey==evt.ctrlKey)&&(_ca.altKey===undefined||_ca.altKey==evt.altKey)&&(_ca.metaKey===undefined||_ca.metaKey==(evt.metaKey||false))&&(_ca.shiftKey===undefined||_ca.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_cb,_c9,_cc,_ca,_cd,_ce,_cf);}else{if(dijit.typematic._obj==_ca){dijit.typematic.stop();}}}),dojo.connect(_c9,"onkeyup",this,function(evt){if(dijit.typematic._obj==_ca){dijit.typematic.stop();}})];},addMouseListener:function(_d0,_d1,_d2,_d3,_d4,_d5){var dc=dojo.connect;return [dc(_d0,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);}),dc(_d0,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_d0,"mousemove",this,function(evt){evt.preventDefault();}),dc(_d0,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_d1,_d0,_d2,_d0,_d3,_d4,_d5);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_d6,_d7,_d8,_d9,_da,_db,_dc,_dd){return this.addKeyListener(_d7,_d8,_d9,_da,_db,_dc,_dd).concat(this.addMouseListener(_d6,_d9,_da,_db,_dc,_dd));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.wai={onload:function(){var div=dojo.create("div",{id:"a11yTestNode",style:{cssText:"border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif"))+"\");"}},dojo.body());var cs=dojo.getComputedStyle(div);if(cs){var _de=cs.backgroundImage;var _df=(cs.borderTopColor==cs.borderRightColor)||(_de!=null&&(_de=="none"||_de=="url(invalid-url:)"));dojo[_df?"addClass":"removeClass"](dojo.body(),"dijit_a11y");if(dojo.isIE){div.outerHTML="";}else{dojo.body().removeChild(div);}}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}dojo.mixin(dijit,{_XhtmlRoles:/banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,hasWaiRole:function(_e0,_e1){var _e2=this.getWaiRole(_e0);return _e1?(_e2.indexOf(_e1)>-1):(_e2.length>0);},getWaiRole:function(_e3){return dojo.trim((dojo.attr(_e3,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));},setWaiRole:function(_e4,_e5){var _e6=dojo.attr(_e4,"role")||"";if(!this._XhtmlRoles.test(_e6)){dojo.attr(_e4,"role",_e5);}else{if((" "+_e6+" ").indexOf(" "+_e5+" ")<0){var _e7=dojo.trim(_e6.replace(this._XhtmlRoles,""));var _e8=dojo.trim(_e6.replace(_e7,""));dojo.attr(_e4,"role",_e8+(_e8?" ":"")+_e5);}}},removeWaiRole:function(_e9,_ea){var _eb=dojo.attr(_e9,"role");if(!_eb){return;}if(_ea){var t=dojo.trim((" "+_eb+" ").replace(" "+_ea+" "," "));dojo.attr(_e9,"role",t);}else{_e9.removeAttribute("role");}},hasWaiState:function(_ec,_ed){return _ec.hasAttribute?_ec.hasAttribute("aria-"+_ed):!!_ec.getAttribute("aria-"+_ed);},getWaiState:function(_ee,_ef){return _ee.getAttribute("aria-"+_ef)||"";},setWaiState:function(_f0,_f1,_f2){_f0.setAttribute("aria-"+_f1,_f2);},removeWaiState:function(_f3,_f4){_f3.removeAttribute("aria-"+_f4);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_f5,_f6){if(!dojo.date.stamp._isoRegExp){dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;}var _f7=dojo.date.stamp._isoRegExp.exec(_f5),_f8=null;if(_f7){_f7.shift();if(_f7[1]){_f7[1]--;}if(_f7[6]){_f7[6]*=1000;}if(_f6){_f6=new Date(_f6);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_f9){return _f6["get"+_f9]();}),function(_fa,_fb){_f7[_fb]=_f7[_fb]||_fa;});}_f8=new Date(_f7[0]||1970,_f7[1]||0,_f7[2]||1,_f7[3]||0,_f7[4]||0,_f7[5]||0,_f7[6]||0);if(_f7[0]<100){_f8.setFullYear(_f7[0]||1970);}var _fc=0,_fd=_f7[7]&&_f7[7].charAt(0);if(_fd!="Z"){_fc=((_f7[8]||0)*60)+(Number(_f7[9])||0);if(_fd!="-"){_fc*=-1;}}if(_fd){_fc-=_f8.getTimezoneOffset();}if(_fc){_f8.setTime(_f8.getTime()+_fc*60000);}}return _f8;};dojo.date.stamp.toISOString=function(_fe,_ff){var _100=function(n){return (n<10)?"0"+n:n;};_ff=_ff||{};var _101=[],_102=_ff.zulu?"getUTC":"get",date="";if(_ff.selector!="time"){var year=_fe[_102+"FullYear"]();date=["0000".substr((year+"").length)+year,_100(_fe[_102+"Month"]()+1),_100(_fe[_102+"Date"]())].join("-");}_101.push(date);if(_ff.selector!="date"){var time=[_100(_fe[_102+"Hours"]()),_100(_fe[_102+"Minutes"]()),_100(_fe[_102+"Seconds"]())].join(":");var _103=_fe[_102+"Milliseconds"]();if(_ff.milliseconds){time+="."+(_103<100?"0":"")+_100(_103);}if(_ff.zulu){time+="Z";}else{if(_ff.selector!="time"){var _104=_fe.getTimezoneOffset();var _105=Math.abs(_104);time+=(_104>0?"-":"+")+_100(Math.floor(_105/60))+":"+_100(_105%60);}}_101.push(time);}return _101.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;this._attrName=d._scopeName+"Type";this._query="["+this._attrName+"]";function _106(_107){if(d.isString(_107)){return "string";}if(typeof _107=="number"){return "number";}if(typeof _107=="boolean"){return "boolean";}if(d.isFunction(_107)){return "function";}if(d.isArray(_107)){return "array";}if(_107 instanceof Date){return "date";}if(_107 instanceof d._Url){return "url";}return "object";};function _108(_109,type){switch(type){case "string":return _109;case "number":return _109.length?Number(_109):NaN;case "boolean":return typeof _109=="boolean"?_109:!(_109.toLowerCase()=="false");case "function":if(d.isFunction(_109)){_109=_109.toString();_109=d.trim(_109.substring(_109.indexOf("{")+1,_109.length-1));}try{if(_109===""||_109.search(/[^\w\.]+/i)!=-1){return new Function(_109);}else{return d.getObject(_109,false)||new Function(_109);}}catch(e){return new Function();}case "array":return _109?_109.split(/\s*,\s*/):[];case "date":switch(_109){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_109);}case "url":return d.baseUrl+_109;default:return d.fromJson(_109);}};var _10a={};dojo.connect(dojo,"extend",function(){_10a={};});function _10b(_10c){if(!_10a[_10c]){var cls=d.getObject(_10c);if(!cls){return null;}var _10d=cls.prototype;var _10e={},_10f={};for(var name in _10d){if(name.charAt(0)=="_"){continue;}if(name in _10f){continue;}var _110=_10d[name];_10e[name]=_106(_110);}_10a[_10c]={cls:cls,params:_10e};}return _10a[_10c];};this._functionFromScript=function(_111){var _112="";var _113="";var _114=_111.getAttribute("args");if(_114){d.forEach(_114.split(/\s*,\s*/),function(part,idx){_112+="var "+part+" = arguments["+idx+"]; ";});}var _115=_111.getAttribute("with");if(_115&&_115.length){d.forEach(_115.split(/\s*,\s*/),function(part){_112+="with("+part+"){";_113+="}";});}return new Function(_112+_111.innerHTML+_113);};this.instantiate=function(_116,_117,args){var _118=[],dp=dojo.parser;_117=_117||{};args=args||{};d.forEach(_116,function(obj){if(!obj){return;}var node,type,_119,_11a,_11b;if(obj.node){node=obj.node;type=obj.type;_119=obj.clsInfo||(type&&_10b(type));_11a=_119&&_119.cls;_11b=obj.scripts;}else{node=obj;type=dp._attrName in _117?_117[dp._attrName]:node.getAttribute(dp._attrName);_119=type&&_10b(type);_11a=_119&&_119.cls;_11b=(_11a&&(_11a._noScript||_11a.prototype._noScript)?[]:d.query("> script[type^='dojo/']",node));}if(!_119){throw new Error("Could not load class '"+type);}var _11c={},_11d=node.attributes;if(args.defaults){dojo.mixin(_11c,args.defaults);}if(obj.inherited){dojo.mixin(_11c,obj.inherited);}for(var name in _119.params){var item=name in _117?{value:_117[name],specified:true}:_11d.getNamedItem(name);if(!item||(!item.specified&&(!dojo.isIE||name.toLowerCase()!="value"))){continue;}var _11e=item.value;switch(name){case "class":_11e="className" in _117?_117.className:node.className;break;case "style":_11e="style" in _117?_117.style:(node.style&&node.style.cssText);}var _11f=_119.params[name];if(typeof _11e=="string"){_11c[name]=_108(_11e,_11f);}else{_11c[name]=_11e;}}var _120=[],_121=[];d.forEach(_11b,function(_122){node.removeChild(_122);var _123=_122.getAttribute("event"),type=_122.getAttribute("type"),nf=d.parser._functionFromScript(_122);if(_123){if(type=="dojo/connect"){_120.push({event:_123,func:nf});}else{_11c[_123]=nf;}}else{_121.push(nf);}});var _124=_11a.markupFactory||_11a.prototype&&_11a.prototype.markupFactory;var _125=_124?_124(_11c,node,_11a):new _11a(_11c,node);_118.push(_125);var _126=node.getAttribute("jsId");if(_126){d.setObject(_126,_125);}d.forEach(_120,function(_127){d.connect(_125,_127.event,null,_127.func);});d.forEach(_121,function(func){func.call(_125);});});if(!_117._started){d.forEach(_118,function(_128){if(!args.noStart&&_128&&_128.startup&&!_128._started&&(!_128.getParent||!_128.getParent())){_128.startup();}});}return _118;};this.parse=function(_129,args){var root;if(!args&&_129&&_129.rootNode){args=_129;root=args.rootNode;}else{root=_129;}var _12a=this._attrName;function scan(_12b,list){var _12c=dojo.clone(_12b.inherited);dojo.forEach(["dir","lang"],function(name){var val=_12b.node.getAttribute(name);if(val){_12c[name]=val;}});var _12d=_12b.scripts;var _12e=!_12b.clsInfo||!_12b.clsInfo.cls.prototype.stopParser;for(var _12f=_12b.node.firstChild;_12f;_12f=_12f.nextSibling){if(_12f.nodeType==1){var type=_12e&&_12f.getAttribute(_12a);if(type){var _130={"type":type,clsInfo:_10b(type),node:_12f,scripts:[],inherited:_12c};list.push(_130);scan(_130,list);}else{if(_12d&&_12f.nodeName.toLowerCase()=="script"){type=_12f.getAttribute("type");if(type&&/^dojo\//i.test(type)){_12d.push(_12f);}}else{if(_12e){scan({node:_12f,inherited:_12c},list);}}}}}};var list=[];scan({node:root?dojo.byId(root):dojo.body(),inherited:(args&&args.inherited)||{dir:dojo._isBodyLtr()?"ltr":"rtl"}},list);return this.instantiate(list,null,args);};}();(function(){var _131=function(){if(dojo.config.parseOnLoad){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_131);}else{dojo._loaders.unshift(_131);}})();}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.require("dijit._base");dojo.connect(dojo,"_connect",function(_132,_133){if(_132&&dojo.isFunction(_132._onConnect)){_132._onConnect(_133);}});dijit._connectOnUseEventHandler=function(_134){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _135=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_135);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_135);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){var _136={},_137=function(_138){var dc=_138.declaredClass;if(!_136[dc]){var r=[],_139,_13a=_138.constructor.prototype;for(var _13b in _13a){if(dojo.isFunction(_13a[_13b])&&(_139=_13b.match(/^_set([a-zA-Z]*)Attr$/))&&_139[1]){r.push(_139[1].charAt(0).toLowerCase()+_139[1].substr(1));}}_136[dc]=r;}return _136[dc]||[];};dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_13c,_13d){this.create(_13c,_13d);},create:function(_13e,_13f){this.srcNodeRef=dojo.byId(_13f);this._connects=[];this._subscribes=[];this._deferredConnects=dojo.clone(this._deferredConnects);for(var attr in this.attributeMap){delete this._deferredConnects[attr];}for(attr in this._deferredConnects){if(this[attr]!==dijit._connectOnUseEventHandler){delete this._deferredConnects[attr];}}if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_13e){this.params=_13e;dojo.mixin(this,_13e);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this._applyAttributes();var _140=this.srcNodeRef;if(_140&&_140.parentNode){_140.parentNode.replaceChild(this.domNode,_140);}for(attr in this.params){this._onConnect(attr);}}if(this.domNode){this.domNode.setAttribute("widgetId",this.id);}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}this._created=true;},_applyAttributes:function(){var _141=function(attr,_142){if((_142.params&&attr in _142.params)||_142[attr]){_142.set(attr,_142[attr]);}};for(var attr in this.attributeMap){_141(attr,this);}dojo.forEach(_137(this),function(a){if(!(a in this.attributeMap)){_141(a,this);}},this);},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.create("div");},postCreate:function(){if(this.baseClass){var _143=this.baseClass.split(" ");if(!this.isLeftToRight()){_143=_143.concat(dojo.map(_143,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_143);}},startup:function(){this._started=true;},destroyRecursive:function(_144){this._beingDestroyed=true;this.destroyDescendants(_144);this.destroy(_144);},destroy:function(_145){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_146){dfe(_146,d.disconnect);});dfe(this._subscribes,function(_147){dun(_147);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_145);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_148){if(this.bgIframe){this.bgIframe.destroy(_148);delete this.bgIframe;}if(this.domNode){if(_148){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_148){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_149){dojo.forEach(this.getChildren(),function(_14a){if(_14a.destroyRecursive){_14a.destroyRecursive(_149);}});},uninitialize:function(){return false;},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},_onConnect:function(_14b){if(_14b in this._deferredConnects){var _14c=this[this._deferredConnects[_14b]||"domNode"];this.connect(_14c,_14b.toLowerCase(),_14b);delete this._deferredConnects[_14b];}},_setClassAttr:function(_14d){var _14e=this[this.attributeMap["class"]||"domNode"];dojo.removeClass(_14e,this["class"]);this["class"]=_14d;dojo.addClass(_14e,_14d);},_setStyleAttr:function(_14f){var _150=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_14f)){dojo.style(_150,_14f);}else{if(_150.style.cssText){_150.style.cssText+="; "+_14f;}else{_150.style.cssText=_14f;}}this.style=_14f;},setAttribute:function(attr,_151){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_151);},_attrToDom:function(attr,_152){var _153=this.attributeMap[attr];dojo.forEach(dojo.isArray(_153)?_153:[_153],function(_154){var _155=this[_154.node||_154||"domNode"];var type=_154.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_152)){_152=dojo.hitch(this,_152);}var _156=_154.attribute?_154.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_155,_156,_152);break;case "innerText":_155.innerHTML="";_155.appendChild(dojo.doc.createTextNode(_152));break;case "innerHTML":_155.innerHTML=_152;break;case "class":dojo.removeClass(_155,this[attr]);dojo.addClass(_155,_152);break;}},this);this[attr]=_152;},attr:function(name,_157){if(dojo.config.isDebug){var _158=arguments.callee._ach||(arguments.callee._ach={}),_159=(arguments.callee.caller||"unknown caller").toString();if(!_158[_159]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_159,"","2.0");_158[_159]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},get:function(name){var _15a=this._getAttrNames(name);return this[_15a.g]?this[_15a.g]():this[name];},set:function(name,_15b){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _15c=this._getAttrNames(name);if(this[_15c.s]){var _15d=this[_15c.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_15b);}var _15e=this[name];this[name]=_15b;}return _15d||this;},_attrPairNames:{},_getAttrNames:function(name){var apn=this._attrPairNames;if(apn[name]){return apn[name];}var uc=name.charAt(0).toUpperCase()+name.substr(1);return (apn[name]={n:name+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];},getChildren:function(){return this.containerNode?dijit.findWidgets(this.containerNode):[];},nodesWithKeyClick:["input","button"],connect:function(obj,_15f,_160){var d=dojo,dc=d._connect,_161=[];if(_15f=="ondijitclick"){if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_160);_161.push(dc(obj,"onkeydown",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=e.target;e.preventDefault();}}),dc(obj,"onkeyup",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target===dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=null;return m(e);}}));}_15f="onclick";}_161.push(dc(obj,_15f,this,_160));this._connects.push(_161);return _161;},disconnect:function(_162){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_162){dojo.forEach(_162,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_163,_164){var d=dojo,_165=d.subscribe(_163,this,_164);this._subscribes.push(_165);return _165;},unsubscribe:function(_166){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_166){dojo.unsubscribe(_166);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},placeAt:function(_167,_168){if(_167.declaredClass&&_167.addChild){_167.addChild(this,_168);}else{dojo.place(this.domNode,_167,_168);}return this;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.string.rep=function(str,num){if(num<=0||!str){return "";}var buf=[];for(;;){if(num&1){buf.push(str);}if(!(num>>=1)){break;}str+=str;}return buf.join("");};dojo.string.pad=function(text,size,ch,end){if(!ch){ch="0";}var out=String(text),pad=dojo.string.rep(ch,Math.ceil((size-out.length)/ch.length));return end?out+pad:pad+out;};dojo.string.substitute=function(_169,map,_16a,_16b){_16b=_16b||dojo.global;_16a=_16a?dojo.hitch(_16b,_16a):function(v){return v;};return _169.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_16c,key,_16d){var _16e=dojo.getObject(key,false,map);if(_16d){_16e=dojo.getObject(_16d,false,_16b).call(_16b,_16e,key);}return _16a(_16e,key).toString();});};dojo.string.trim=String.prototype.trim?dojo.trim:function(str){str=str.replace(/^\s+/,"");for(var i=str.length-1;i>=0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}return str;};}if(!dojo._hasResource["dojo.cache"]){dojo._hasResource["dojo.cache"]=true;dojo.provide("dojo.cache");(function(){var _16f={};dojo.cache=function(_170,url,_171){if(typeof _170=="string"){var _172=dojo.moduleUrl(_170,url);}else{_172=_170;_171=url;}var key=_172.toString();var val=_171;if(_171!=undefined&&!dojo.isString(_171)){val=("value" in _171?_171.value:undefined);}var _173=_171&&_171.sanitize?true:false;if(typeof val=="string"){val=_16f[key]=_173?dojo.cache._sanitize(val):val;}else{if(val===null){delete _16f[key];}else{if(!(key in _16f)){val=dojo._getText(key);_16f[key]=_173?dojo.cache._sanitize(val):val;}val=_16f[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _174=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_174){val=_174[1];}}else{val="";}return val;};})();}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){this._attachPoints=[];},_stringRepl:function(tmpl){var _175=this.declaredClass,_176=this;return dojo.string.substitute(tmpl,this,function(_177,key){if(key.charAt(0)=="!"){_177=dojo.getObject(key.substr(1),false,_176);}if(typeof _177=="undefined"){throw new Error(_175+" template:"+key);}if(_177==null){return "";}return key.charAt(0)=="!"?_177:_177.toString().replace(/"/g,"&quot;");},this);},buildRendering:function(){var _178=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_178)){node=dojo._toDom(this._stringRepl(_178));if(node.nodeType!=1){throw new Error("Invalid template: "+_178);}}else{node=_178.cloneNode(true);}this.domNode=node;this._attachTemplateNodes(node);if(this.widgetsInTemplate){var _179=dojo.parser,qry,attr;if(_179._query!="[dojoType]"){qry=_179._query;attr=_179._attrName;_179._query="[dojoType]";_179._attrName="dojoType";}var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));if(qry){_179._query=qry;_179._attrName=attr;}this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_17a){var dest=this.containerNode;if(_17a&&dest){while(_17a.hasChildNodes()){dest.appendChild(_17a.firstChild);}}},_attachTemplateNodes:function(_17b,_17c){_17c=_17c||function(n,p){return n.getAttribute(p);};var _17d=dojo.isArray(_17b)?_17b:(_17b.all||_17b.getElementsByTagName("*"));var x=dojo.isArray(_17b)?0:-1;for(;x<_17d.length;x++){var _17e=(x==-1)?_17b:_17d[x];if(this.widgetsInTemplate&&_17c(_17e,"dojoType")){continue;}var _17f=_17c(_17e,"dojoAttachPoint");if(_17f){var _180,_181=_17f.split(/\s*,\s*/);while((_180=_181.shift())){if(dojo.isArray(this[_180])){this[_180].push(_17e);}else{this[_180]=_17e;}this._attachPoints.push(_180);}}var _182=_17c(_17e,"dojoAttachEvent");if(_182){var _183,_184=_182.split(/\s*,\s*/);var trim=dojo.trim;while((_183=_184.shift())){if(_183){var _185=null;if(_183.indexOf(":")!=-1){var _186=_183.split(":");_183=trim(_186[0]);_185=trim(_186[1]);}else{_183=trim(_183);}if(!_185){_185=_183;}this.connect(_17e,_183,_185);}}}var role=_17c(_17e,"waiRole");if(role){dijit.setWaiRole(_17e,role);}var _187=_17c(_17e,"waiState");if(_187){dojo.forEach(_187.split(/\s*,\s*/),function(_188){if(_188.indexOf("-")!=-1){var pair=_188.split("-");dijit.setWaiState(_17e,pair[0],pair[1]);}});}}},startup:function(){dojo.forEach(this._startupWidgets,function(w){if(w&&!w._started&&w.startup){w.startup();}});this.inherited(arguments);},destroyRendering:function(){dojo.forEach(this._attachPoints,function(_189){delete this[_189];},this);this._attachPoints=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_18a,_18b,_18c){var _18d=dijit._Templated._templateCache;var key=_18b||_18a;var _18e=_18d[key];if(_18e){try{if(!_18e.ownerDocument||_18e.ownerDocument==dojo.doc){return _18e;}}catch(e){}dojo.destroy(_18e);}if(!_18b){_18b=dojo.cache(_18a,{sanitize:true});}_18b=dojo.string.trim(_18b);if(_18c||_18b.match(/\$\{([^\}]+)\}/g)){return (_18d[key]=_18b);}else{var node=dojo._toDom(_18b);if(node.nodeType!=1){throw new Error("Invalid template: "+_18b);}return (_18d[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _18f=dijit._Templated._templateCache;for(var key in _18f){var _190=_18f[key];if(typeof _190=="object"){dojo.destroy(_190);}delete _18f[key];}});}dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});}if(!dojo._hasResource["dijit._Container"]){dojo._hasResource["dijit._Container"]=true;dojo.provide("dijit._Container");dojo.declare("dijit._Container",null,{isContainer:true,buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},addChild:function(_191,_192){var _193=this.containerNode;if(_192&&typeof _192=="number"){var _194=this.getChildren();if(_194&&_194.length>=_192){_193=_194[_192-1].domNode;_192="after";}}dojo.place(_191.domNode,_193,_192);if(this._started&&!_191._started){_191.startup();}},removeChild:function(_195){if(typeof _195=="number"&&_195>0){_195=this.getChildren()[_195];}if(_195){var node=_195.domNode;if(node&&node.parentNode){node.parentNode.removeChild(node);}}},hasChildren:function(){return this.getChildren().length>0;},destroyDescendants:function(_196){dojo.forEach(this.getChildren(),function(_197){_197.destroyRecursive(_196);});},_getSiblingOfChild:function(_198,dir){var node=_198.domNode,_199=(dir>0?"nextSibling":"previousSibling");do{node=node[_199];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_19a){return dojo.indexOf(this.getChildren(),_19a);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_19b){_19b.startup();});this.inherited(arguments);}});}if(!dojo._hasResource["dijit._Contained"]){dojo._hasResource["dijit._Contained"]=true;dojo.provide("dijit._Contained");dojo.declare("dijit._Contained",null,{getParent:function(){var _19c=dijit.getEnclosingWidget(this.domNode.parentNode);return _19c&&_19c.isContainer?_19c:null;},_getSibling:function(_19d){var node=this.domNode;do{node=node[_19d+"Sibling"];}while(node&&node.nodeType!=1);return node&&dijit.byNode(node);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");},getIndexInParent:function(){var p=this.getParent();if(!p||!p.getIndexOfChild){return -1;}return p.getIndexOfChild(this);}});}if(!dojo._hasResource["dijit.layout._LayoutWidget"]){dojo._hasResource["dijit.layout._LayoutWidget"]=true;dojo.provide("dijit.layout._LayoutWidget");dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{baseClass:"dijitLayoutContainer",isLayoutContainer:true,postCreate:function(){dojo.addClass(this.domNode,"dijitContainer");this.inherited(arguments);},startup:function(){if(this._started){return;}this.inherited(arguments);var _19e=this.getParent&&this.getParent();if(!(_19e&&_19e.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_19f,_1a0){var node=this.domNode;if(_19f){dojo.marginBox(node,_19f);if(_19f.t){node.style.top=_19f.t+"px";}if(_19f.l){node.style.left=_19f.l+"px";}}var mb=_1a0||{};dojo.mixin(mb,_19f||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(node),mb);}var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var be=dojo._getBorderExtents(node,cs);var bb=(this._borderBox={w:mb.w-(me.w+be.w),h:mb.h-(me.h+be.h)});var pe=dojo._getPadExtents(node,cs);this._contentBox={l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:bb.w-pe.w,h:bb.h-pe.h};this.layout();},layout:function(){},_setupChild:function(_1a1){dojo.addClass(_1a1.domNode,this.baseClass+"-child");if(_1a1.baseClass){dojo.addClass(_1a1.domNode,this.baseClass+"-"+_1a1.baseClass);}},addChild:function(_1a2,_1a3){this.inherited(arguments);if(this._started){this._setupChild(_1a2);}},removeChild:function(_1a4){dojo.removeClass(_1a4.domNode,this.baseClass+"-child");if(_1a4.baseClass){dojo.removeClass(_1a4.domNode,this.baseClass+"-"+_1a4.baseClass);}this.inherited(arguments);}});dijit.layout.marginBox2contentBox=function(node,mb){var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var pb=dojo._getPadBorderExtents(node,cs);return {l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};};(function(){var _1a5=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_1a6,dim){_1a6.resize?_1a6.resize(dim):dojo.marginBox(_1a6.domNode,dim);dojo.mixin(_1a6,dojo.marginBox(_1a6.domNode));dojo.mixin(_1a6,dim);};dijit.layout.layoutChildren=function(_1a7,dim,_1a8){dim=dojo.mixin({},dim);dojo.addClass(_1a7,"dijitLayoutContainer");_1a8=dojo.filter(_1a8,function(item){return item.layoutAlign!="client";}).concat(dojo.filter(_1a8,function(item){return item.layoutAlign=="client";}));dojo.forEach(_1a8,function(_1a9){var elm=_1a9.domNode,pos=_1a9.layoutAlign;var _1aa=elm.style;_1aa.left=dim.l+"px";_1aa.top=dim.t+"px";_1aa.bottom=_1aa.right="auto";dojo.addClass(elm,"dijitAlign"+_1a5(pos));if(pos=="top"||pos=="bottom"){size(_1a9,{w:dim.w});dim.h-=_1a9.h;if(pos=="top"){dim.t+=_1a9.h;}else{_1aa.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_1a9,{h:dim.h});dim.w-=_1a9.w;if(pos=="left"){dim.l+=_1a9.w;}else{_1aa.left=dim.l+dim.w+"px";}}else{if(pos=="client"){size(_1a9,dim);}}}});};})();}if(!dojo._hasResource["dijit._CssStateMixin"]){dojo._hasResource["dijit._CssStateMixin"]=true;dojo.provide("dijit._CssStateMixin");dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},postCreate:function(){this.inherited(arguments);dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){this.connect(this.domNode,e,"_cssMouseEvent");},this);this.connect(this,"set",function(name,_1ab){if(arguments.length>=2&&{disabled:true,readOnly:true,checked:true,selected:true}[name]){this._setStateClass();}});dojo.forEach(["_onFocus","_onBlur"],function(ap){this.connect(this,ap,"_setStateClass");},this);for(var ap in this.cssStateNodes){this._trackMouseState(this[ap],this.cssStateNodes[ap]);}this._setStateClass();},_cssMouseEvent:function(_1ac){if(!this.disabled){switch(_1ac.type){case "mouseenter":case "mouseover":this._hovering=true;this._active=this._mouseDown;break;case "mouseleave":case "mouseout":this._hovering=false;this._active=false;break;case "mousedown":this._active=true;this._mouseDown=true;var _1ad=this.connect(dojo.body(),"onmouseup",function(){this._active=false;this._mouseDown=false;this._setStateClass();this.disconnect(_1ad);});break;}this._setStateClass();}},_setStateClass:function(){var _1ae=this.baseClass.split(" ");function _1af(_1b0){_1ae=_1ae.concat(dojo.map(_1ae,function(c){return c+_1b0;}),"dijit"+_1b0);};if(!this.isLeftToRight()){_1af("Rtl");}if(this.checked){_1af("Checked");}if(this.state){_1af(this.state);}if(this.selected){_1af("Selected");}if(this.disabled){_1af("Disabled");}else{if(this.readOnly){_1af("ReadOnly");}else{if(this._active){_1af("Active");}else{if(this._hovering){_1af("Hover");}}}}if(this._focused){_1af("Focused");}var tn=this.stateNode||this.domNode,_1b1={};dojo.forEach(tn.className.split(" "),function(c){_1b1[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _1b1[c];});}dojo.forEach(_1ae,function(c){_1b1[c]=true;});var _1b2=[];for(var c in _1b1){_1b2.push(c);}tn.className=_1b2.join(" ");this._stateClasses=_1ae;},_trackMouseState:function(node,_1b3){var _1b4=false,_1b5=false,_1b6=false;var self=this,cn=dojo.hitch(this,"connect",node);function _1b7(){var _1b8=("disabled" in self&&self.disabled)||("readonly" in self&&self.readonly);dojo.toggleClass(node,_1b3+"Hover",_1b4&&!_1b5&&!_1b8);dojo.toggleClass(node,_1b3+"Active",_1b5&&!_1b8);dojo.toggleClass(node,_1b3+"Focused",_1b6&&!_1b8);};cn("onmouseenter",function(){_1b4=true;_1b7();});cn("onmouseleave",function(){_1b4=false;_1b5=false;_1b7();});cn("onmousedown",function(){_1b5=true;_1b7();});cn("onmouseup",function(){_1b5=false;_1b7();});cn("onfocus",function(){_1b6=true;_1b7();});cn("onblur",function(){_1b6=false;_1b7();});this.connect(this,"set",function(name,_1b9){if(name=="disabled"||name=="readOnly"){_1b7();}});}});}if(!dojo._hasResource["dijit.form._FormWidget"]){dojo._hasResource["dijit.form._FormWidget"]=true;dojo.provide("dijit.form._FormWidget");dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{name:"",alt:"",value:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,scrollOnFocus:true,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{value:"focusNode",id:"focusNode",tabIndex:"focusNode",alt:"focusNode",title:"focusNode"}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name=\""+this.name.replace(/'/g,"&quot;")+"\""):"";this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousedown","_onMouseDown");},_setDisabledAttr:function(_1ba){this.disabled=_1ba;dojo.attr(this.focusNode,"disabled",_1ba);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_1ba);}dijit.setWaiState(this.focusNode,"disabled",_1ba);if(_1ba){this._hovering=false;this._active=false;var _1bb="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";dojo.forEach(dojo.isArray(_1bb)?_1bb:[_1bb],function(_1bc){var node=this[_1bc];if(dojo.isWebKit||dijit.hasDefaultTabStop(node)){node.setAttribute("tabIndex","-1");}else{node.removeAttribute("tabIndex");}},this);}else{this.focusNode.setAttribute("tabIndex",this.tabIndex);}},setDisabled:function(_1bd){dojo.deprecated("setDisabled("+_1bd+") is deprecated. Use set('disabled',"+_1bd+") instead.","","2.0");this.set("disabled",_1bd);},_onFocus:function(e){if(this.scrollOnFocus){dojo.window.scrollIntoView(this.domNode);}this.inherited(arguments);},isFocusable:function(){return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){dijit.focus(this.focusNode);},compare:function(val1,val2){if(typeof val1=="number"&&typeof val2=="number"){return (isNaN(val1)&&isNaN(val2))?0:val1-val2;}else{if(val1>val2){return 1;}else{if(val1<val2){return -1;}else{return 0;}}}},onChange:function(_1be){},_onChangeActive:false,_handleOnChange:function(_1bf,_1c0){this._lastValue=_1bf;if(this._lastValueReported==undefined&&(_1c0===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1bf;}if((this.intermediateChanges||_1c0||_1c0===undefined)&&((typeof _1bf!=typeof this._lastValueReported)||this.compare(_1bf,this._lastValueReported)!=0)){this._lastValueReported=_1bf;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1bf);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1c1){dojo.deprecated("dijit.form._FormWidget:setValue("+_1c1+") is deprecated.  Use set('value',"+_1c1+") instead.","","2.0");this.set("value",_1c1);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_onMouseDown:function(e){if(!e.ctrlKey&&this.isFocusable()){var _1c2=this.connect(dojo.body(),"onmouseup",function(){if(this.isFocusable()){this.focus();}this.disconnect(_1c2);});}}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1c3){this.readOnly=_1c3;dojo.attr(this.focusNode,"readOnly",_1c3);dijit.setWaiState(this.focusNode,"readonly",_1c3);},postCreate:function(){this.inherited(arguments);if(dojo.isIE){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._resetValue=this.value;}},_setValueAttr:function(_1c4,_1c5){this.value=_1c4;this._handleOnChange(_1c4,_1c5);},_getValueAttr:function(){return this._lastValue;},undo:function(){this._setValueAttr(this._lastValueReported,false);},reset:function(){this._hasBeenBlurred=false;this._setValueAttr(this._resetValue,true);},_onKeyDown:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!(e.ctrlKey||e.altKey||e.metaKey)){var te;if(dojo.isIE){e.preventDefault();te=document.createEventObject();te.keyCode=dojo.keys.ESCAPE;te.shiftKey=e.shiftKey;e.srcElement.fireEvent("onkeypress",te);}}},_layoutHackIE7:function(){if(dojo.isIE==7){var _1c6=this.domNode;var _1c7=_1c6.parentNode;var _1c8=_1c6.firstChild||_1c6;var _1c9=_1c8.style.filter;var _1ca=this;while(_1c7&&_1c7.clientHeight==0){(function ping(){var _1cb=_1ca.connect(_1c7,"onscroll",function(e){_1ca.disconnect(_1cb);_1c8.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1c8.style.filter=_1c9;},0);});})();_1c7=_1c7.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}if(!dojo._hasResource["dijit._KeyNavContainer"]){dojo._hasResource["dijit._KeyNavContainer"]=true;dojo.provide("dijit._KeyNavContainer");dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_1cc,_1cd){var _1ce=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_1cc,function(code){_1ce[code]=prev;});dojo.forEach(_1cd,function(code){_1ce[code]=next;});this.connect(this.domNode,"onkeypress","_onContainerKeypress");this.connect(this.domNode,"onfocus","_onContainerFocus");},startupKeyNavChildren:function(){dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));},addChild:function(_1cf,_1d0){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_1cf);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _1d1=this._getFirstFocusableChild();if(_1d1){this.focusChild(_1d1);}},focusNext:function(){var _1d2=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_1d2);},focusPrev:function(){var _1d3=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_1d3,true);},focusChild:function(_1d4,last){if(this.focusedChild&&_1d4!==this.focusedChild){this._onChildBlur(this.focusedChild);}_1d4.focus(last?"end":"start");this.focusedChild=_1d4;},_startupChild:function(_1d5){_1d5.set("tabIndex","-1");this.connect(_1d5,"_onFocus",function(){_1d5.set("tabIndex",this.tabIndex);});this.connect(_1d5,"_onBlur",function(){_1d5.set("tabIndex","-1");});},_onContainerFocus:function(evt){if(evt.target!==this.domNode){return;}this.focusFirstChild();dojo.attr(this.domNode,"tabIndex","-1");},_onBlur:function(evt){if(this.tabIndex){dojo.attr(this.domNode,"tabIndex",this.tabIndex);}this.inherited(arguments);},_onContainerKeypress:function(evt){if(evt.ctrlKey||evt.altKey){return;}var func=this._keyNavCodes[evt.charOrCode];if(func){func();dojo.stopEvent(evt);}},_onChildBlur:function(_1d6){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getNextFocusableChild:function(_1d7,dir){if(_1d7){_1d7=this._getSiblingOfChild(_1d7,dir);}var _1d8=this.getChildren();for(var i=0;i<_1d8.length;i++){if(!_1d7){_1d7=_1d8[(dir>0)?0:(_1d8.length-1)];}if(_1d7.isFocusable()){return _1d7;}_1d7=this._getSiblingOfChild(_1d7,dir);}return null;}});}if(!dojo._hasResource["dijit.MenuItem"]){dojo._hasResource["dijit.MenuItem"]=true;dojo.provide("dijit.MenuItem");dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_1d9){if(_1d9&&!("label" in this.params)){this.set("label",_1d9.innerHTML);}},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _1da=this.id+"_text";dojo.attr(this.containerNode,"id",_1da);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_1da+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_1da);},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);this._hovering=false;this._setStateClass();},_onClick:function(evt){this.getParent().onItemClick(this,evt);dojo.stopEvent(evt);},onClick:function(evt){},focus:function(){try{if(dojo.isIE==8){this.containerNode.focus();}dijit.focus(this.focusNode);}catch(e){}},_onFocus:function(){this._setSelected(true);this.getParent()._onItemFocus(this);this.inherited(arguments);},_setSelected:function(_1db){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_1db);},setLabel:function(_1dc){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated.  Use set('label', ...) instead.","","2.0");this.set("label",_1dc);},setDisabled:function(_1dd){dojo.deprecated("dijit.Menu.setDisabled() is deprecated.  Use set('disabled', bool) instead.","","2.0");this.set("disabled",_1dd);},_setDisabledAttr:function(_1de){this.disabled=_1de;dijit.setWaiState(this.focusNode,"disabled",_1de?"true":"false");},_setAccelKeyAttr:function(_1df){this.accelKey=_1df;this.accelKeyNode.style.display=_1df?"":"none";this.accelKeyNode.innerHTML=_1df;dojo.attr(this.containerNode,"colSpan",_1df?"1":"2");}});}if(!dojo._hasResource["dijit.PopupMenuItem"]){dojo._hasResource["dijit.PopupMenuItem"]=true;dojo.provide("dijit.PopupMenuItem");dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){if(this.srcNodeRef){var _1e0=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_1e0[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}this.inherited(arguments);if(!this.popup){var node=dojo.query("[widgetId]",this.dropDownContainer)[0];this.popup=dijit.byNode(node);}dojo.body().appendChild(this.popup.domNode);this.popup.startup();this.popup.domNode.style.display="none";if(this.arrowWrapper){dojo.style(this.arrowWrapper,"visibility","");}dijit.setWaiState(this.focusNode,"haspopup","true");},destroyDescendants:function(){if(this.popup){if(!this.popup._destroyed){this.popup.destroyRecursive();}delete this.popup;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.CheckedMenuItem"]){dojo._hasResource["dijit.CheckedMenuItem"]=true;dojo.provide("dijit.CheckedMenuItem");dojo.declare("dijit.CheckedMenuItem",dijit.MenuItem,{templateString:dojo.cache("dijit","templates/CheckedMenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">&#10003;</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">&nbsp;</td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_1e1){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_1e1);dijit.setWaiState(this.domNode,"checked",_1e1);this.checked=_1e1;},onChange:function(_1e2){},_onClick:function(e){if(!this.disabled){this.set("checked",!this.checked);this.onChange(this.checked);}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.MenuSeparator"]){dojo._hasResource["dijit.MenuSeparator"]=true;dojo.provide("dijit.MenuSeparator");dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuSeparator.html","<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Menu"]){dojo._hasResource["dijit.Menu"]=true;dojo.provide("dijit.Menu");dojo.declare("dijit._MenuBase",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{parentMenu:null,popupDelay:500,startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_1e3){_1e3.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_1e4){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _1e5=this._getTopMenu();if(_1e5&&_1e5._isMenuBar){_1e5.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _1e6=this.currentPopup.parentMenu;if(_1e6.focusedChild){_1e6.focusedChild._setSelected(false);}_1e6.focusedChild=this.currentPopup.from_item;_1e6.focusedChild._setSelected(true);this._stopPendingCloseTimer(this.currentPopup);}},onItemHover:function(item){if(this.isActive){this.focusChild(item);if(this.focusedChild.popup&&!this.focusedChild.disabled&&!this.hover_timer){this.hover_timer=setTimeout(dojo.hitch(this,"_openPopup"),this.popupDelay);}}if(this.focusedChild){this.focusChild(item);}this._hoveredChild=item;},_onChildBlur:function(item){this._stopPopupTimer();item._setSelected(false);var _1e7=item.popup;if(_1e7){this._stopPendingCloseTimer(_1e7);_1e7._pendingClose_timer=setTimeout(function(){_1e7._pendingClose_timer=null;if(_1e7.parentMenu){_1e7.parentMenu.currentPopup=null;}dijit.popup.close(_1e7);},this.popupDelay);}},onItemUnhover:function(item){if(this.isActive){this._stopPopupTimer();}if(this._hoveredChild==item){this._hoveredChild=null;}},_stopPopupTimer:function(){if(this.hover_timer){clearTimeout(this.hover_timer);this.hover_timer=null;}},_stopPendingCloseTimer:function(_1e8){if(_1e8._pendingClose_timer){clearTimeout(_1e8._pendingClose_timer);_1e8._pendingClose_timer=null;}},_stopFocusTimer:function(){if(this._focus_timer){clearTimeout(this._focus_timer);this._focus_timer=null;}},_getTopMenu:function(){for(var top=this;top.parentMenu;top=top.parentMenu){}return top;},onItemClick:function(item,evt){if(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.disabled){return false;}if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _1e9=this.focusedChild;if(!_1e9){return;}var _1ea=_1e9.popup;if(_1ea.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_1ea.parentMenu=this;_1ea.from_item=_1e9;var self=this;dijit.popup.open({parent:this,popup:_1ea,around:_1e9.domNode,orient:this._orient||(this.isLeftToRight()?{"TR":"TL","TL":"TR","BR":"BL","BL":"BR"}:{"TL":"TR","TR":"TL","BL":"BR","BR":"BL"}),onCancel:function(){self.focusChild(_1e9);self._cleanUp();_1e9._setSelected(true);self.focusedChild=_1e9;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_1ea;_1ea.connect(_1ea.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_1ea.focus){_1ea._focus_timer=setTimeout(dojo.hitch(_1ea,function(){this._focus_timer=null;this.focus();}),0);}},_markActive:function(){this.isActive=true;dojo.addClass(this.domNode,"dijitMenuActive");dojo.removeClass(this.domNode,"dijitMenuPassive");},onOpen:function(e){this.isShowingNow=true;this._markActive();},_markInactive:function(){this.isActive=false;dojo.removeClass(this.domNode,"dijitMenuActive");dojo.addClass(this.domNode,"dijitMenuPassive");},onClose:function(){this._stopFocusTimer();this._markInactive();this.isShowingNow=false;this.parentMenu=null;},_closeChild:function(){this._stopPopupTimer();if(this.focusedChild){this.focusedChild._setSelected(false);this.focusedChild._onUnhover();this.focusedChild=null;}if(this.currentPopup){dijit.popup.close(this.currentPopup);this.currentPopup=null;}},_onItemFocus:function(item){if(this._hoveredChild&&this._hoveredChild!=item){this._hoveredChild._onUnhover();}},_onBlur:function(){this._cleanUp();this.inherited(arguments);},_cleanUp:function(){this._closeChild();if(typeof this.isShowingNow=="undefined"){this._markInactive();}}});dojo.declare("dijit.Menu",dijit._MenuBase,{constructor:function(){this._bindings=[];},templateString:dojo.cache("dijit","templates/Menu.html","<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,postCreate:function(){if(this.contextMenuForWindow){this.bindDomNode(dojo.body());}else{dojo.forEach(this.targetNodeIds,this.bindDomNode,this);}var k=dojo.keys,l=this.isLeftToRight();this._openSubMenuKey=l?k.RIGHT_ARROW:k.LEFT_ARROW;this._closeSubMenuKey=l?k.LEFT_ARROW:k.RIGHT_ARROW;this.connectKeyNavHandlers([k.UP_ARROW],[k.DOWN_ARROW]);},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.charOrCode){case this._openSubMenuKey:this._moveToPopup(evt);dojo.stopEvent(evt);break;case this._closeSubMenuKey:if(this.parentMenu){if(this.parentMenu._isMenuBar){this.parentMenu.focusPrev();}else{this.onCancel(false);}}else{dojo.stopEvent(evt);}break;}},_iframeContentWindow:function(_1eb){var win=dojo.window.get(this._iframeContentDocument(_1eb))||this._iframeContentDocument(_1eb)["__parent__"]||(_1eb.name&&dojo.doc.frames[_1eb.name])||null;return win;},_iframeContentDocument:function(_1ec){var doc=_1ec.contentDocument||(_1ec.contentWindow&&_1ec.contentWindow.document)||(_1ec.name&&dojo.doc.frames[_1ec.name]&&dojo.doc.frames[_1ec.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _1ed=node,win=this._iframeContentWindow(_1ed);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _1ee={node:node,iframe:_1ed};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_1ee));var _1ef=dojo.hitch(this,function(cn){return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_1ed,{x:evt.pageX,y:evt.pageY});}),dojo.connect(cn,"onkeydown",this,function(evt){if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_1ed);}})];});_1ee.connects=cn?_1ef(cn):[];if(_1ed){_1ee.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_1ed);cn=dojo.withGlobal(win,dojo.body);_1ee.connects=_1ef(cn);});if(_1ed.addEventListener){_1ed.addEventListener("load",_1ee.onloadHandler,false);}else{_1ed.attachEvent("onload",_1ee.onloadHandler);}}},unBindDomNode:function(_1f0){var node;try{node=dojo.byId(_1f0);}catch(e){return;}var _1f1="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_1f1)){var bid=dojo.attr(node,_1f1)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _1f2=b.iframe;if(_1f2){if(_1f2.removeEventListener){_1f2.removeEventListener("load",b.onloadHandler,false);}else{_1f2.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_1f1);delete this._bindings[bid];}},_scheduleOpen:function(_1f3,_1f4,_1f5){if(!this._openTimer){this._openTimer=setTimeout(dojo.hitch(this,function(){delete this._openTimer;this._openMyself({target:_1f3,iframe:_1f4,coords:_1f5});}),1);}},_openMyself:function(args){var _1f6=args.target,_1f7=args.iframe,_1f8=args.coords;if(_1f8){if(_1f7){var od=_1f6.ownerDocument,ifc=dojo.position(_1f7,true),win=this._iframeContentWindow(_1f7),_1f9=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_1f7),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_1f7,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_1f7,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_1f7,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_1f7,cs.borderTopWidth):0);_1f8.x+=ifc.x+left-_1f9.x;_1f8.y+=ifc.y+top-_1f9.y;}}else{_1f8=dojo.position(_1f6,true);_1f8.x+=10;_1f8.y+=10;}var self=this;var _1fa=dijit.getFocus(this);function _1fb(){if(self.refocus){dijit.focus(_1fa);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:_1f8.x,y:_1f8.y,onExecute:_1fb,onCancel:_1fb,orient:this.isLeftToRight()?"L":"R"});this.focus();this._onBlur=function(){this.inherited("_onBlur",arguments);dijit.popup.close(this);};},uninitialize:function(){dojo.forEach(this._bindings,function(b){if(b){this.unBindDomNode(b.node);}},this);this.inherited(arguments);}});}if(!dojo._hasResource["dojox.html.metrics"]){dojo._hasResource["dojox.html.metrics"]=true;dojo.provide("dojox.html.metrics");(function(){var dhm=dojox.html.metrics;dhm.getFontMeasurements=function(){var _1fc={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};if(dojo.isIE){dojo.doc.documentElement.style.fontSize="100%";}var div=dojo.doc.createElement("div");var ds=div.style;ds.position="absolute";ds.left="-100px";ds.top="0";ds.width="30px";ds.height="1000em";ds.borderWidth="0";ds.margin="0";ds.padding="0";ds.outline="0";ds.lineHeight="1";ds.overflow="hidden";dojo.body().appendChild(div);for(var p in _1fc){ds.fontSize=p;_1fc[p]=Math.round(div.offsetHeight*12/16)*16/12/1000;}dojo.body().removeChild(div);div=null;return _1fc;};var _1fd=null;dhm.getCachedFontMeasurements=function(_1fe){if(_1fe||!_1fd){_1fd=dhm.getFontMeasurements();}return _1fd;};var _1ff=null,_200={};dhm.getTextBox=function(text,_201,_202){var m,s;if(!_1ff){m=_1ff=dojo.doc.createElement("div");var c=dojo.doc.createElement("div");c.appendChild(m);s=c.style;s.overflow="scroll";s.position="absolute";s.left="0px";s.top="-10000px";s.width="1px";s.height="1px";s.visibility="hidden";s.borderWidth="0";s.margin="0";s.padding="0";s.outline="0";dojo.body().appendChild(c);}else{m=_1ff;}m.className="";s=m.style;s.borderWidth="0";s.margin="0";s.padding="0";s.outline="0";if(arguments.length>1&&_201){for(var i in _201){if(i in _200){continue;}s[i]=_201[i];}}if(arguments.length>2&&_202){m.className=_202;}m.innerHTML=text;var box=dojo.position(m);box.w=m.parentNode.scrollWidth;return box;};var _203={w:16,h:16};dhm.getScrollbar=function(){return {w:_203.w,h:_203.h};};dhm._fontResizeNode=null;dhm.initOnFontResize=function(_204){var f=dhm._fontResizeNode=dojo.doc.createElement("iframe");var fs=f.style;fs.position="absolute";fs.width="5em";fs.height="10em";fs.top="-10000px";if(dojo.isIE){f.onreadystatechange=function(){if(f.contentWindow.document.readyState=="complete"){f.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;}};}else{f.onload=function(){f.contentWindow.onresize=f.contentWindow.parent[dojox._scopeName].html.metrics._fontresize;};}f.setAttribute("src","javascript:'<html><head><script>if(\"loadFirebugConsole\" in window){window.loadFirebugConsole();}</script></head><body></body></html>'");dojo.body().appendChild(f);dhm.initOnFontResize=function(){};};dhm.onFontResize=function(){};dhm._fontresize=function(){dhm.onFontResize();};dojo.addOnUnload(function(){var f=dhm._fontResizeNode;if(f){if(dojo.isIE&&f.onresize){f.onresize=null;}else{if(f.contentWindow&&f.contentWindow.onresize){f.contentWindow.onresize=null;}}dhm._fontResizeNode=null;}});dojo.addOnLoad(function(){try{var n=dojo.doc.createElement("div");n.style.cssText="top:0;left:0;width:100px;height:100px;overflow:scroll;position:absolute;visibility:hidden;";dojo.body().appendChild(n);_203.w=n.offsetWidth-n.clientWidth;_203.h=n.offsetHeight-n.clientHeight;dojo.body().removeChild(n);delete n;}catch(e){}if("fontSizeWatch" in dojo.config&&!!dojo.config.fontSizeWatch){dhm.initOnFontResize();}});})();}if(!dojo._hasResource["dojox.grid.util"]){dojo._hasResource["dojox.grid.util"]=true;dojo.provide("dojox.grid.util");(function(){var dgu=dojox.grid.util;dgu.na="...";dgu.rowIndexTag="gridRowIndex";dgu.gridViewTag="gridView";dgu.fire=function(ob,ev,args){var fn=ob&&ev&&ob[ev];return fn&&(args?fn.apply(ob,args):ob[ev]());};dgu.setStyleHeightPx=function(_205,_206){if(_206>=0){var s=_205.style;var v=_206+"px";if(_205&&s["height"]!=v){s["height"]=v;}}};dgu.mouseEvents=["mouseover","mouseout","mousedown","mouseup","click","dblclick","contextmenu"];dgu.keyEvents=["keyup","keydown","keypress"];dgu.funnelEvents=function(_207,_208,_209,_20a){var evts=(_20a?_20a:dgu.mouseEvents.concat(dgu.keyEvents));for(var i=0,l=evts.length;i<l;i++){_208.connect(_207,"on"+evts[i],_209);}};dgu.removeNode=function(_20b){_20b=dojo.byId(_20b);_20b&&_20b.parentNode&&_20b.parentNode.removeChild(_20b);return _20b;};dgu.arrayCompare=function(inA,inB){for(var i=0,l=inA.length;i<l;i++){if(inA[i]!=inB[i]){return false;}}return (inA.length==inB.length);};dgu.arrayInsert=function(_20c,_20d,_20e){if(_20c.length<=_20d){_20c[_20d]=_20e;}else{_20c.splice(_20d,0,_20e);}};dgu.arrayRemove=function(_20f,_210){_20f.splice(_210,1);};dgu.arraySwap=function(_211,inI,inJ){var _212=_211[inI];_211[inI]=_211[inJ];_211[inJ]=_212;};})();}if(!dojo._hasResource["dojox.grid._Scroller"]){dojo._hasResource["dojox.grid._Scroller"]=true;dojo.provide("dojox.grid._Scroller");(function(){var _213=function(_214){var i=0,n,p=_214.parentNode;while((n=p.childNodes[i++])){if(n==_214){return i-1;}}return -1;};var _215=function(_216){if(!_216){return;}var _217=function(inW){return inW.domNode&&dojo.isDescendant(inW.domNode,_216,true);};var ws=dijit.registry.filter(_217);for(var i=0,w;(w=ws[i]);i++){w.destroy();}delete ws;};var _218=function(_219){var node=dojo.byId(_219);return (node&&node.tagName?node.tagName.toLowerCase():"");};var _21a=function(_21b,_21c){var _21d=[];var i=0,n;while((n=_21b.childNodes[i])){i++;if(_218(n)==_21c){_21d.push(n);}}return _21d;};var _21e=function(_21f){return _21a(_21f,"div");};dojo.declare("dojox.grid._Scroller",null,{constructor:function(_220){this.setContentNodes(_220);this.pageHeights=[];this.pageNodes=[];this.stack=[];},rowCount:0,defaultRowHeight:32,keepRows:100,contentNode:null,scrollboxNode:null,defaultPageHeight:0,keepPages:10,pageCount:0,windowHeight:0,firstVisibleRow:0,lastVisibleRow:0,averageRowHeight:0,page:0,pageTop:0,init:function(_221,_222,_223){switch(arguments.length){case 3:this.rowsPerPage=_223;case 2:this.keepRows=_222;case 1:this.rowCount=_221;default:break;}this.defaultPageHeight=this.defaultRowHeight*this.rowsPerPage;this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);this.setKeepInfo(this.keepRows);this.invalidate();if(this.scrollboxNode){this.scrollboxNode.scrollTop=0;this.scroll(0);this.scrollboxNode.onscroll=dojo.hitch(this,"onscroll");}},_getPageCount:function(_224,_225){return _224?(Math.ceil(_224/_225)||1):0;},destroy:function(){this.invalidateNodes();delete this.contentNodes;delete this.contentNode;delete this.scrollboxNode;},setKeepInfo:function(_226){this.keepRows=_226;this.keepPages=!this.keepRows?this.keepPages:Math.max(Math.ceil(this.keepRows/this.rowsPerPage),2);},setContentNodes:function(_227){this.contentNodes=_227;this.colCount=(this.contentNodes?this.contentNodes.length:0);this.pageNodes=[];for(var i=0;i<this.colCount;i++){this.pageNodes[i]=[];}},getDefaultNodes:function(){return this.pageNodes[0]||[];},invalidate:function(){this._invalidating=true;this.invalidateNodes();this.pageHeights=[];this.height=(this.pageCount?(this.pageCount-1)*this.defaultPageHeight+this.calcLastPageHeight():0);this.resize();this._invalidating=false;},updateRowCount:function(_228){this.invalidateNodes();this.rowCount=_228;var _229=this.pageCount;if(_229===0){this.height=1;}this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);if(this.pageCount<_229){for(var i=_229-1;i>=this.pageCount;i--){this.height-=this.getPageHeight(i);delete this.pageHeights[i];}}else{if(this.pageCount>_229){this.height+=this.defaultPageHeight*(this.pageCount-_229-1)+this.calcLastPageHeight();}}this.resize();},pageExists:function(_22a){return Boolean(this.getDefaultPageNode(_22a));},measurePage:function(_22b){if(this.grid.rowHeight){var _22c=this.grid.rowHeight+1;return ((_22b+1)*this.rowsPerPage>this.rowCount?this.rowCount-_22b*this.rowsPerPage:this.rowsPerPage)*_22c;}var n=this.getDefaultPageNode(_22b);return (n&&n.innerHTML)?n.offsetHeight:undefined;},positionPage:function(_22d,_22e){for(var i=0;i<this.colCount;i++){this.pageNodes[i][_22d].style.top=_22e+"px";}},repositionPages:function(_22f){var _230=this.getDefaultNodes();var last=0;for(var i=0;i<this.stack.length;i++){last=Math.max(this.stack[i],last);}var n=_230[_22f];var y=(n?this.getPageNodePosition(n)+this.getPageHeight(_22f):0);for(var p=_22f+1;p<=last;p++){n=_230[p];if(n){if(this.getPageNodePosition(n)==y){return;}this.positionPage(p,y);}y+=this.getPageHeight(p);}},installPage:function(_231){for(var i=0;i<this.colCount;i++){this.contentNodes[i].appendChild(this.pageNodes[i][_231]);}},preparePage:function(_232,_233){var p=(_233?this.popPage():null);for(var i=0;i<this.colCount;i++){var _234=this.pageNodes[i];var _235=(p===null?this.createPageNode():this.invalidatePageNode(p,_234));_235.pageIndex=_232;_234[_232]=_235;}},renderPage:function(_236){var _237=[];var i,j;for(i=0;i<this.colCount;i++){_237[i]=this.pageNodes[i][_236];}for(i=0,j=_236*this.rowsPerPage;(i<this.rowsPerPage)&&(j<this.rowCount);i++,j++){this.renderRow(j,_237);}},removePage:function(_238){for(var i=0,j=_238*this.rowsPerPage;i<this.rowsPerPage;i++,j++){this.removeRow(j);}},destroyPage:function(_239){for(var i=0;i<this.colCount;i++){var n=this.invalidatePageNode(_239,this.pageNodes[i]);if(n){dojo.destroy(n);}}},pacify:function(_23a){},pacifying:false,pacifyTicks:200,setPacifying:function(_23b){if(this.pacifying!=_23b){this.pacifying=_23b;this.pacify(this.pacifying);}},startPacify:function(){this.startPacifyTicks=new Date().getTime();},doPacify:function(){var _23c=(new Date().getTime()-this.startPacifyTicks)>this.pacifyTicks;this.setPacifying(true);this.startPacify();return _23c;},endPacify:function(){this.setPacifying(false);},resize:function(){if(this.scrollboxNode){this.windowHeight=this.scrollboxNode.clientHeight;}for(var i=0;i<this.colCount;i++){dojox.grid.util.setStyleHeightPx(this.contentNodes[i],Math.max(1,this.height));}var _23d=(!this._invalidating);if(!_23d){var ah=this.grid.attr("autoHeight");if(typeof ah=="number"&&ah<=Math.min(this.rowsPerPage,this.rowCount)){_23d=true;}}if(_23d){this.needPage(this.page,this.pageTop);}var _23e=(this.page<this.pageCount-1)?this.rowsPerPage:((this.rowCount%this.rowsPerPage)||this.rowsPerPage);var _23f=this.getPageHeight(this.page);this.averageRowHeight=(_23f>0&&_23e>0)?(_23f/_23e):0;},calcLastPageHeight:function(){if(!this.pageCount){return 0;}var _240=this.pageCount-1;var _241=((this.rowCount%this.rowsPerPage)||(this.rowsPerPage))*this.defaultRowHeight;this.pageHeights[_240]=_241;return _241;},updateContentHeight:function(inDh){this.height+=inDh;this.resize();},updatePageHeight:function(_242,_243){if(this.pageExists(_242)){var oh=this.getPageHeight(_242);var h=(this.measurePage(_242));if(h===undefined){h=oh;}this.pageHeights[_242]=h;if(oh!=h){this.updateContentHeight(h-oh);var ah=this.grid.attr("autoHeight");if((typeof ah=="number"&&ah>this.rowCount)||(ah===true&&!_243)){this.grid.sizeChange();}else{this.repositionPages(_242);}}return h;}return 0;},rowHeightChanged:function(_244){this.updatePageHeight(Math.floor(_244/this.rowsPerPage),false);},invalidateNodes:function(){while(this.stack.length){this.destroyPage(this.popPage());}},createPageNode:function(){var p=document.createElement("div");dojo.attr(p,"role","presentation");p.style.position="absolute";p.style[dojo._isBodyLtr()?"left":"right"]="0";return p;},getPageHeight:function(_245){var ph=this.pageHeights[_245];return (ph!==undefined?ph:this.defaultPageHeight);},pushPage:function(_246){return this.stack.push(_246);},popPage:function(){return this.stack.shift();},findPage:function(_247){var i=0,h=0;for(var ph=0;i<this.pageCount;i++,h+=ph){ph=this.getPageHeight(i);if(h+ph>=_247){break;}}this.page=i;this.pageTop=h;},buildPage:function(_248,_249,_24a){this.preparePage(_248,_249);this.positionPage(_248,_24a);this.installPage(_248);this.renderPage(_248);this.pushPage(_248);},needPage:function(_24b,_24c){var h=this.getPageHeight(_24b),oh=h;if(!this.pageExists(_24b)){this.buildPage(_24b,this.keepPages&&(this.stack.length>=this.keepPages),_24c);h=this.updatePageHeight(_24b,true);}else{this.positionPage(_24b,_24c);}return h;},onscroll:function(){this.scroll(this.scrollboxNode.scrollTop);},scroll:function(_24d){this.grid.scrollTop=_24d;if(this.colCount){this.startPacify();this.findPage(_24d);var h=this.height;var b=this.getScrollBottom(_24d);for(var p=this.page,y=this.pageTop;(p<this.pageCount)&&((b<0)||(y<b));p++){y+=this.needPage(p,y);}this.firstVisibleRow=this.getFirstVisibleRow(this.page,this.pageTop,_24d);this.lastVisibleRow=this.getLastVisibleRow(p-1,y,b);if(h!=this.height){this.repositionPages(p-1);}this.endPacify();}},getScrollBottom:function(_24e){return (this.windowHeight>=0?_24e+this.windowHeight:-1);},processNodeEvent:function(e,_24f){var t=e.target;while(t&&(t!=_24f)&&t.parentNode&&(t.parentNode.parentNode!=_24f)){t=t.parentNode;}if(!t||!t.parentNode||(t.parentNode.parentNode!=_24f)){return false;}var page=t.parentNode;e.topRowIndex=page.pageIndex*this.rowsPerPage;e.rowIndex=e.topRowIndex+_213(t);e.rowTarget=t;return true;},processEvent:function(e){return this.processNodeEvent(e,this.contentNode);},renderRow:function(_250,_251){},removeRow:function(_252){},getDefaultPageNode:function(_253){return this.getDefaultNodes()[_253];},positionPageNode:function(_254,_255){},getPageNodePosition:function(_256){return _256.offsetTop;},invalidatePageNode:function(_257,_258){var p=_258[_257];if(p){delete _258[_257];this.removePage(_257,p);_215(p);p.innerHTML="";}return p;},getPageRow:function(_259){return _259*this.rowsPerPage;},getLastPageRow:function(_25a){return Math.min(this.rowCount,this.getPageRow(_25a+1))-1;},getFirstVisibleRow:function(_25b,_25c,_25d){if(!this.pageExists(_25b)){return 0;}var row=this.getPageRow(_25b);var _25e=this.getDefaultNodes();var rows=_21e(_25e[_25b]);for(var i=0,l=rows.length;i<l&&_25c<_25d;i++,row++){_25c+=rows[i].offsetHeight;}return (row?row-1:row);},getLastVisibleRow:function(_25f,_260,_261){if(!this.pageExists(_25f)){return 0;}var _262=this.getDefaultNodes();var row=this.getLastPageRow(_25f);var rows=_21e(_262[_25f]);for(var i=rows.length-1;i>=0&&_260>_261;i--,row--){_260-=rows[i].offsetHeight;}return row+1;},findTopRow:function(_263){var _264=this.getDefaultNodes();var rows=_21e(_264[this.page]);for(var i=0,l=rows.length,t=this.pageTop,h;i<l;i++){h=rows[i].offsetHeight;t+=h;if(t>=_263){this.offset=h-(t-_263);return i+this.page*this.rowsPerPage;}}return -1;},findScrollTop:function(_265){var _266=Math.floor(_265/this.rowsPerPage);var t=0;var i,l;for(i=0;i<_266;i++){t+=this.getPageHeight(i);}this.pageTop=t;this.needPage(_266,this.pageTop);var _267=this.getDefaultNodes();var rows=_21e(_267[_266]);var r=_265-this.rowsPerPage*_266;for(i=0,l=rows.length;i<l&&i<r;i++){t+=rows[i].offsetHeight;}return t;},dummy:0});})();}if(!dojo._hasResource["dojox.grid.cells._base"]){dojo._hasResource["dojox.grid.cells._base"]=true;dojo.provide("dojox.grid.cells._base");dojo.declare("dojox.grid._DeferredTextWidget",dijit._Widget,{deferred:null,_destroyOnRemove:true,postCreate:function(){if(this.deferred){this.deferred.addBoth(dojo.hitch(this,function(text){if(this.domNode){this.domNode.innerHTML=text;}}));}}});(function(){var _268=function(_269){try{dojox.grid.util.fire(_269,"focus");dojox.grid.util.fire(_269,"select");}catch(e){}};var _26a=function(){setTimeout(dojo.hitch.apply(dojo,arguments),0);};var dgc=dojox.grid.cells;dojo.declare("dojox.grid.cells._Base",null,{styles:"",classes:"",editable:false,alwaysEditing:false,formatter:null,defaultValue:"...",value:null,hidden:false,noresize:false,draggable:true,_valueProp:"value",_formatPending:false,constructor:function(_26b){this._props=_26b||{};dojo.mixin(this,_26b);if(this.draggable===undefined){this.draggable=true;}},_defaultFormat:function(_26c,_26d){var s=this.grid.formatterScope||this;var f=this.formatter;if(f&&s&&typeof f=="string"){f=this.formatter=s[f];}var v=(_26c!=this.defaultValue&&f)?f.apply(s,_26d):_26c;if(typeof v=="undefined"){return this.defaultValue;}if(v&&v.addBoth){v=new dojox.grid._DeferredTextWidget({deferred:v},dojo.create("span",{innerHTML:this.defaultValue}));}if(v&&v.declaredClass&&v.startup){return "<div class='dojoxGridStubNode' linkWidget='"+v.id+"' cellIdx='"+this.index+"'>"+this.defaultValue+"</div>";}return v;},format:function(_26e,_26f){var f,i=this.grid.edit.info,d=this.get?this.get(_26e,_26f):(this.value||this.defaultValue);d=(d&&d.replace&&this.grid.escapeHTMLInData)?d.replace(/&/g,"&amp;").replace(/</g,"&lt;"):d;if(this.editable&&(this.alwaysEditing||(i.rowIndex==_26e&&i.cell==this))){return this.formatEditing(d,_26e);}else{return this._defaultFormat(d,[d,_26e,this]);}},formatEditing:function(_270,_271){},getNode:function(_272){return this.view.getCellNode(_272,this.index);},getHeaderNode:function(){return this.view.getHeaderCellNode(this.index);},getEditNode:function(_273){return (this.getNode(_273)||0).firstChild||0;},canResize:function(){var uw=this.unitWidth;return uw&&(uw!=="auto");},isFlex:function(){var uw=this.unitWidth;return uw&&dojo.isString(uw)&&(uw=="auto"||uw.slice(-1)=="%");},applyEdit:function(_274,_275){this.grid.edit.applyCellEdit(_274,this,_275);},cancelEdit:function(_276){this.grid.doCancelEdit(_276);},_onEditBlur:function(_277){if(this.grid.edit.isEditCell(_277,this.index)){this.grid.edit.apply();}},registerOnBlur:function(_278,_279){if(this.commitOnBlur){dojo.connect(_278,"onblur",function(e){setTimeout(dojo.hitch(this,"_onEditBlur",_279),250);});}},needFormatNode:function(_27a,_27b){this._formatPending=true;_26a(this,"_formatNode",_27a,_27b);},cancelFormatNode:function(){this._formatPending=false;},_formatNode:function(_27c,_27d){if(this._formatPending){this._formatPending=false;dojo.setSelectable(this.grid.domNode,true);this.formatNode(this.getEditNode(_27d),_27c,_27d);}},formatNode:function(_27e,_27f,_280){if(dojo.isIE){_26a(this,"focus",_280,_27e);}else{this.focus(_280,_27e);}},dispatchEvent:function(m,e){if(m in this){return this[m](e);}},getValue:function(_281){return this.getEditNode(_281)[this._valueProp];},setValue:function(_282,_283){var n=this.getEditNode(_282);if(n){n[this._valueProp]=_283;}},focus:function(_284,_285){_268(_285||this.getEditNode(_284));},save:function(_286){this.value=this.value||this.getValue(_286);},restore:function(_287){this.setValue(_287,this.value);},_finish:function(_288){dojo.setSelectable(this.grid.domNode,false);this.cancelFormatNode();},apply:function(_289){this.applyEdit(this.getValue(_289),_289);this._finish(_289);},cancel:function(_28a){this.cancelEdit(_28a);this._finish(_28a);}});dgc._Base.markupFactory=function(node,_28b){var d=dojo;var _28c=d.trim(d.attr(node,"formatter")||"");if(_28c){_28b.formatter=dojo.getObject(_28c)||_28c;}var get=d.trim(d.attr(node,"get")||"");if(get){_28b.get=dojo.getObject(get);}var _28d=function(attr,cell,_28e){var _28f=d.trim(d.attr(node,attr)||"");if(_28f){cell[_28e||attr]=!(_28f.toLowerCase()=="false");}};_28d("sortDesc",_28b);_28d("editable",_28b);_28d("alwaysEditing",_28b);_28d("noresize",_28b);_28d("draggable",_28b);var _290=d.trim(d.attr(node,"loadingText")||d.attr(node,"defaultValue")||"");if(_290){_28b.defaultValue=_290;}var _291=function(attr,cell,_292){var _293=d.trim(d.attr(node,attr)||"")||undefined;if(_293){cell[_292||attr]=_293;}};_291("styles",_28b);_291("headerStyles",_28b);_291("cellStyles",_28b);_291("classes",_28b);_291("headerClasses",_28b);_291("cellClasses",_28b);};dojo.declare("dojox.grid.cells.Cell",dgc._Base,{constructor:function(){this.keyFilter=this.keyFilter;},keyFilter:null,formatEditing:function(_294,_295){this.needFormatNode(_294,_295);return "<input class=\"dojoxGridInput\" type=\"text\" value=\""+_294+"\">";},formatNode:function(_296,_297,_298){this.inherited(arguments);this.registerOnBlur(_296,_298);},doKey:function(e){if(this.keyFilter){var key=String.fromCharCode(e.charCode);if(key.search(this.keyFilter)==-1){dojo.stopEvent(e);}}},_finish:function(_299){this.inherited(arguments);var n=this.getEditNode(_299);try{dojox.grid.util.fire(n,"blur");}catch(e){}}});dgc.Cell.markupFactory=function(node,_29a){dgc._Base.markupFactory(node,_29a);var d=dojo;var _29b=d.trim(d.attr(node,"keyFilter")||"");if(_29b){_29a.keyFilter=new RegExp(_29b);}};dojo.declare("dojox.grid.cells.RowIndex",dgc.Cell,{name:"Row",postscript:function(){this.editable=false;},get:function(_29c){return _29c+1;}});dgc.RowIndex.markupFactory=function(node,_29d){dgc.Cell.markupFactory(node,_29d);};dojo.declare("dojox.grid.cells.Select",dgc.Cell,{options:null,values:null,returnIndex:-1,constructor:function(_29e){this.values=this.values||this.options;},formatEditing:function(_29f,_2a0){this.needFormatNode(_29f,_2a0);var h=["<select class=\"dojoxGridSelect\">"];for(var i=0,o,v;((o=this.options[i])!==undefined)&&((v=this.values[i])!==undefined);i++){h.push("<option",(_29f==v?" selected":"")," value=\""+v+"\"",">",o,"</option>");}h.push("</select>");return h.join("");},getValue:function(_2a1){var n=this.getEditNode(_2a1);if(n){var i=n.selectedIndex,o=n.options[i];return this.returnIndex>-1?i:o.value||o.innerHTML;}}});dgc.Select.markupFactory=function(node,cell){dgc.Cell.markupFactory(node,cell);var d=dojo;var _2a2=d.trim(d.attr(node,"options")||"");if(_2a2){var o=_2a2.split(",");if(o[0]!=_2a2){cell.options=o;}}var _2a3=d.trim(d.attr(node,"values")||"");if(_2a3){var v=_2a3.split(",");if(v[0]!=_2a3){cell.values=v;}}};dojo.declare("dojox.grid.cells.AlwaysEdit",dgc.Cell,{alwaysEditing:true,_formatNode:function(_2a4,_2a5){this.formatNode(this.getEditNode(_2a5),_2a4,_2a5);},applyStaticValue:function(_2a6){var e=this.grid.edit;e.applyCellEdit(this.getValue(_2a6),this,_2a6);e.start(this,_2a6,true);}});dgc.AlwaysEdit.markupFactory=function(node,cell){dgc.Cell.markupFactory(node,cell);};dojo.declare("dojox.grid.cells.Bool",dgc.AlwaysEdit,{_valueProp:"checked",formatEditing:function(_2a7,_2a8){return "<input class=\"dojoxGridInput\" type=\"checkbox\""+(_2a7?" checked=\"checked\"":"")+" style=\"width: auto\" />";},doclick:function(e){if(e.target.tagName=="INPUT"){this.applyStaticValue(e.rowIndex);}}});dgc.Bool.markupFactory=function(node,cell){dgc.AlwaysEdit.markupFactory(node,cell);};})();}if(!dojo._hasResource["dojox.grid.cells"]){dojo._hasResource["dojox.grid.cells"]=true;dojo.provide("dojox.grid.cells");}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.dnd.getCopyKeyState=dojo.isCopyKey;dojo.dnd._uniqueId=0;dojo.dnd.getUniqueId=function(){var id;do{id=dojo._scopeName+"Unique"+(++dojo.dnd._uniqueId);}while(dojo.byId(id));return id;};dojo.dnd._empty={};dojo.dnd.isFormElement=function(e){var t=e.target;if(t.nodeType==3){t=t.parentNode;}return " button textarea input select option ".indexOf(" "+t.tagName.toLowerCase()+" ")>=0;};}if(!dojo._hasResource["dojo.dnd.autoscroll"]){dojo._hasResource["dojo.dnd.autoscroll"]=true;dojo.provide("dojo.dnd.autoscroll");dojo.dnd.getViewport=function(){var d=dojo.doc,dd=d.documentElement,w=window,b=dojo.body();if(dojo.isMozilla){return {w:dd.clientWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&w.innerWidth){return {w:w.innerWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&dd&&dd.clientWidth){return {w:dd.clientWidth,h:dd.clientHeight};}else{if(b.clientWidth){return {w:b.clientWidth,h:b.clientHeight};}}}}return null;};dojo.dnd.V_TRIGGER_AUTOSCROLL=32;dojo.dnd.H_TRIGGER_AUTOSCROLL=32;dojo.dnd.V_AUTOSCROLL_VALUE=16;dojo.dnd.H_AUTOSCROLL_VALUE=16;dojo.dnd.autoScroll=function(e){var v=dojo.dnd.getViewport(),dx=0,dy=0;if(e.clientX<dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=-dojo.dnd.H_AUTOSCROLL_VALUE;}else{if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=dojo.dnd.H_AUTOSCROLL_VALUE;}}if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=-dojo.dnd.V_AUTOSCROLL_VALUE;}else{if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=dojo.dnd.V_AUTOSCROLL_VALUE;}}window.scrollBy(dx,dy);};dojo.dnd._validNodes={"div":1,"p":1,"td":1};dojo.dnd._validOverflow={"auto":1,"scroll":1};dojo.dnd.autoScrollNodes=function(e){for(var n=e.target;n;){if(n.nodeType==1&&(n.tagName.toLowerCase() in dojo.dnd._validNodes)){var s=dojo.getComputedStyle(n);if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){var b=dojo._getContentBox(n,s),t=dojo.position(n,true);var w=Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL,b.w/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx=e.pageX-t.x,ry=e.pageY-t.y,dx=0,dy=0;if(dojo.isWebKit||dojo.isOpera){rx+=dojo.body().scrollLeft,ry+=dojo.body().scrollTop;}if(rx>0&&rx<b.w){if(rx<w){dx=-w;}else{if(rx>b.w-w){dx=w;}}}if(ry>0&&ry<b.h){if(ry<h){dy=-h;}else{if(ry>b.h-h){dy=h;}}}var _2a9=n.scrollLeft,_2aa=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_2a9!=n.scrollLeft||_2aa!=n.scrollTop){return;}}}try{n=n.parentNode;}catch(x){n=null;}}dojo.dnd.autoScroll(e);};}if(!dojo._hasResource["dojo.dnd.Mover"]){dojo._hasResource["dojo.dnd.Mover"]=true;dojo.provide("dojo.dnd.Mover");dojo.declare("dojo.dnd.Mover",null,{constructor:function(node,e,host){this.node=dojo.byId(node);this.marginBox={l:e.pageX,t:e.pageY};this.mouseButton=e.button;var h=this.host=host,d=node.ownerDocument,_2ab=dojo.connect(d,"onmousemove",this,"onFirstMove");this.events=[dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"onMouseUp"),dojo.connect(d,"ondragstart",dojo.stopEvent),dojo.connect(d.body,"onselectstart",dojo.stopEvent),_2ab];if(h&&h.onMoveStart){h.onMoveStart(this);}},onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox;this.host.onMove(this,{l:m.l+e.pageX,t:m.t+e.pageY},e);dojo.stopEvent(e);},onMouseUp:function(e){if(dojo.isWebKit&&dojo.isMac&&this.mouseButton==2?e.button==0:this.mouseButton==e.button){this.destroy();}dojo.stopEvent(e);},onFirstMove:function(e){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left))||0;t=Math.round(parseFloat(s.top))||0;break;default:s.position="absolute";var m=dojo.marginBox(this.node);var b=dojo.doc.body;var bs=dojo.getComputedStyle(b);var bm=dojo._getMarginBox(b,bs);var bc=dojo._getContentBox(b,bs);l=m.l-(bc.l-bm.l);t=m.t-(bc.t-bm.t);break;}this.marginBox.l=l-this.marginBox.l;this.marginBox.t=t-this.marginBox.t;if(h&&h.onFirstMove){h.onFirstMove(this,e);}dojo.disconnect(this.events.pop());},destroy:function(){dojo.forEach(this.events,dojo.disconnect);var h=this.host;if(h&&h.onMoveStop){h.onMoveStop(this);}this.events=this.node=this.host=null;}});}if(!dojo._hasResource["dojo.dnd.Moveable"]){dojo._hasResource["dojo.dnd.Moveable"]=true;dojo.provide("dojo.dnd.Moveable");dojo.declare("dojo.dnd.Moveable",null,{handle:"",delay:0,skip:false,constructor:function(node,_2ac){this.node=dojo.byId(node);if(!_2ac){_2ac={};}this.handle=_2ac.handle?dojo.byId(_2ac.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_2ac.delay>0?_2ac.delay:0;this.skip=_2ac.skip;this.mover=_2ac.mover?_2ac.mover:dojo.dnd.Mover;this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown"),dojo.connect(this.handle,"ondragstart",this,"onSelectStart"),dojo.connect(this.handle,"onselectstart",this,"onSelectStart")];},markupFactory:function(_2ad,node){return new dojo.dnd.Moveable(node,_2ad);},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.events=this.node=this.handle=null;},onMouseDown:function(e){if(this.skip&&dojo.dnd.isFormElement(e)){return;}if(this.delay){this.events.push(dojo.connect(this.handle,"onmousemove",this,"onMouseMove"),dojo.connect(this.handle,"onmouseup",this,"onMouseUp"));this._lastX=e.pageX;this._lastY=e.pageY;}else{this.onDragDetected(e);}dojo.stopEvent(e);},onMouseMove:function(e){if(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay){this.onMouseUp(e);this.onDragDetected(e);}dojo.stopEvent(e);},onMouseUp:function(e){for(var i=0;i<2;++i){dojo.disconnect(this.events.pop());}dojo.stopEvent(e);},onSelectStart:function(e){if(!this.skip||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onDragDetected:function(e){new this.mover(this.node,e,this);},onMoveStart:function(_2ae){dojo.publish("/dnd/move/start",[_2ae]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_2af){dojo.publish("/dnd/move/stop",[_2af]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_2b0,e){},onMove:function(_2b1,_2b2,e){this.onMoving(_2b1,_2b2);var s=_2b1.node.style;s.left=_2b2.l+"px";s.top=_2b2.t+"px";this.onMoved(_2b1,_2b2);},onMoving:function(_2b3,_2b4){},onMoved:function(_2b5,_2b6){}});}if(!dojo._hasResource["dojox.grid._Builder"]){dojo._hasResource["dojox.grid._Builder"]=true;dojo.provide("dojox.grid._Builder");(function(){var dg=dojox.grid;var _2b7=function(td){return td.cellIndex>=0?td.cellIndex:dojo.indexOf(td.parentNode.cells,td);};var _2b8=function(tr){return tr.rowIndex>=0?tr.rowIndex:dojo.indexOf(tr.parentNode.childNodes,tr);};var _2b9=function(_2ba,_2bb){return _2ba&&((_2ba.rows||0)[_2bb]||_2ba.childNodes[_2bb]);};var _2bc=function(node){for(var n=node;n&&n.tagName!="TABLE";n=n.parentNode){}return n;};var _2bd=function(_2be,_2bf){for(var n=_2be;n&&_2bf(n);n=n.parentNode){}return n;};var _2c0=function(_2c1){var name=_2c1.toUpperCase();return function(node){return node.tagName!=name;};};var _2c2=dojox.grid.util.rowIndexTag;var _2c3=dojox.grid.util.gridViewTag;dg._Builder=dojo.extend(function(view){if(view){this.view=view;this.grid=view.grid;}},{view:null,_table:"<table class=\"dojoxGridRowTable\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"",getTableArray:function(){var html=[this._table];if(this.view.viewWidth){html.push([" style=\"width:",this.view.viewWidth,";\""].join(""));}html.push(">");return html;},generateCellMarkup:function(_2c4,_2c5,_2c6,_2c7){var _2c8=[],html;if(_2c7){var _2c9=_2c4.index!=_2c4.grid.getSortIndex()?"":_2c4.grid.sortInfo>0?"aria-sort=\"ascending\"":"aria-sort=\"descending\"";if(!_2c4.id){_2c4.id=this.grid.id+"Hdr"+_2c4.index;}html=["<th tabIndex=\"-1\" aria-readonly=\"true\" role=\"columnheader\"",_2c9,"id=\"",_2c4.id,"\""];}else{var _2ca=this.grid.editable&&!_2c4.editable?"aria-readonly=\"true\"":"";html=["<td tabIndex=\"-1\" role=\"gridcell\"",_2ca];}if(_2c4.colSpan){html.push(" colspan=\"",_2c4.colSpan,"\"");}if(_2c4.rowSpan){html.push(" rowspan=\"",_2c4.rowSpan,"\"");}html.push(" class=\"dojoxGridCell ");if(_2c4.classes){html.push(_2c4.classes," ");}if(_2c6){html.push(_2c6," ");}_2c8.push(html.join(""));_2c8.push("");html=["\" idx=\"",_2c4.index,"\" style=\""];if(_2c5&&_2c5[_2c5.length-1]!=";"){_2c5+=";";}html.push(_2c4.styles,_2c5||"",_2c4.hidden?"display:none;":"");if(_2c4.unitWidth){html.push("width:",_2c4.unitWidth,";");}_2c8.push(html.join(""));_2c8.push("");html=["\""];if(_2c4.attrs){html.push(" ",_2c4.attrs);}html.push(">");_2c8.push(html.join(""));_2c8.push("");_2c8.push(_2c7?"</th>":"</td>");return _2c8;},isCellNode:function(_2cb){return Boolean(_2cb&&_2cb!=dojo.doc&&dojo.attr(_2cb,"idx"));},getCellNodeIndex:function(_2cc){return _2cc?Number(dojo.attr(_2cc,"idx")):-1;},getCellNode:function(_2cd,_2ce){for(var i=0,row;(row=_2b9(_2cd.firstChild,i));i++){for(var j=0,cell;(cell=row.cells[j]);j++){if(this.getCellNodeIndex(cell)==_2ce){return cell;}}}return null;},findCellTarget:function(_2cf,_2d0){var n=_2cf;while(n&&(!this.isCellNode(n)||(n.offsetParent&&_2c3 in n.offsetParent.parentNode&&n.offsetParent.parentNode[_2c3]!=this.view.id))&&(n!=_2d0)){n=n.parentNode;}return n!=_2d0?n:null;},baseDecorateEvent:function(e){e.dispatch="do"+e.type;e.grid=this.grid;e.sourceView=this.view;e.cellNode=this.findCellTarget(e.target,e.rowNode);e.cellIndex=this.getCellNodeIndex(e.cellNode);e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);},findTarget:function(_2d1,_2d2){var n=_2d1;while(n&&(n!=this.domNode)&&(!(_2d2 in n)||(_2c3 in n&&n[_2c3]!=this.view.id))){n=n.parentNode;}return (n!=this.domNode)?n:null;},findRowTarget:function(_2d3){return this.findTarget(_2d3,_2c2);},isIntraNodeEvent:function(e){try{return (e.cellNode&&e.relatedTarget&&dojo.isDescendant(e.relatedTarget,e.cellNode));}catch(x){return false;}},isIntraRowEvent:function(e){try{var row=e.relatedTarget&&this.findRowTarget(e.relatedTarget);return !row&&(e.rowIndex==-1)||row&&(e.rowIndex==row.gridRowIndex);}catch(x){return false;}},dispatchEvent:function(e){if(e.dispatch in this){return this[e.dispatch](e);}return false;},domouseover:function(e){if(e.cellNode&&(e.cellNode!=this.lastOverCellNode)){this.lastOverCellNode=e.cellNode;this.grid.onMouseOver(e);}this.grid.onMouseOverRow(e);},domouseout:function(e){if(e.cellNode&&(e.cellNode==this.lastOverCellNode)&&!this.isIntraNodeEvent(e,this.lastOverCellNode)){this.lastOverCellNode=null;this.grid.onMouseOut(e);if(!this.isIntraRowEvent(e)){this.grid.onMouseOutRow(e);}}},domousedown:function(e){if(e.cellNode){this.grid.onMouseDown(e);}this.grid.onMouseDownRow(e);}});dg._ContentBuilder=dojo.extend(function(view){dg._Builder.call(this,view);},dg._Builder.prototype,{update:function(){this.prepareHtml();},prepareHtml:function(){var _2d4=this.grid.get,_2d5=this.view.structure.cells;for(var j=0,row;(row=_2d5[j]);j++){for(var i=0,cell;(cell=row[i]);i++){cell.get=cell.get||(cell.value==undefined)&&_2d4;cell.markup=this.generateCellMarkup(cell,cell.cellStyles,cell.cellClasses,false);if(!this.grid.editable&&cell.editable){this.grid.editable=true;}}}},generateHtml:function(_2d6,_2d7){var html=this.getTableArray(),v=this.view,_2d8=v.structure.cells,item=this.grid.getItem(_2d7);dojox.grid.util.fire(this.view,"onBeforeRow",[_2d7,_2d8]);for(var j=0,row;(row=_2d8[j]);j++){if(row.hidden||row.header){continue;}html.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");for(var i=0,cell,m,cc,cs;(cell=row[i]);i++){m=cell.markup;cc=cell.customClasses=[];cs=cell.customStyles=[];m[5]=cell.format(_2d7,item);m[1]=cc.join(" ");m[3]=cs.join(";");html.push.apply(html,m);}html.push("</tr>");}html.push("</table>");return html.join("");},decorateEvent:function(e){e.rowNode=this.findRowTarget(e.target);if(!e.rowNode){return false;}e.rowIndex=e.rowNode[_2c2];this.baseDecorateEvent(e);e.cell=this.grid.getCell(e.cellIndex);return true;}});dg._HeaderBuilder=dojo.extend(function(view){this.moveable=null;dg._Builder.call(this,view);},dg._Builder.prototype,{_skipBogusClicks:false,overResizeWidth:4,minColWidth:1,update:function(){if(this.tableMap){this.tableMap.mapRows(this.view.structure.cells);}else{this.tableMap=new dg._TableMap(this.view.structure.cells);}},generateHtml:function(_2d9,_2da){var html=this.getTableArray(),_2db=this.view.structure.cells;dojox.grid.util.fire(this.view,"onBeforeRow",[-1,_2db]);for(var j=0,row;(row=_2db[j]);j++){if(row.hidden){continue;}html.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");for(var i=0,cell,_2dc;(cell=row[i]);i++){cell.customClasses=[];cell.customStyles=[];if(this.view.simpleStructure){if(cell.draggable){if(cell.headerClasses){if(cell.headerClasses.indexOf("dojoDndItem")==-1){cell.headerClasses+=" dojoDndItem";}}else{cell.headerClasses="dojoDndItem";}}if(cell.attrs){if(cell.attrs.indexOf("dndType='gridColumn_")==-1){cell.attrs+=" dndType='gridColumn_"+this.grid.id+"'";}}else{cell.attrs="dndType='gridColumn_"+this.grid.id+"'";}}_2dc=this.generateCellMarkup(cell,cell.headerStyles,cell.headerClasses,true);_2dc[5]=(_2da!=undefined?_2da:_2d9(cell));_2dc[3]=cell.customStyles.join(";");_2dc[1]=cell.customClasses.join(" ");html.push(_2dc.join(""));}html.push("</tr>");}html.push("</table>");return html.join("");},getCellX:function(e){var n,x=e.layerX;if(dojo.isMoz){n=_2bd(e.target,_2c0("th"));x-=(n&&n.offsetLeft)||0;var t=e.sourceView.getScrollbarWidth();if(!dojo._isBodyLtr()){table=_2bd(n,_2c0("table"));x-=(table&&table.offsetLeft)||0;}}n=_2bd(e.target,function(){if(!n||n==e.cellNode){return false;}x+=(n.offsetLeft<0?0:n.offsetLeft);return true;});return x;},decorateEvent:function(e){this.baseDecorateEvent(e);e.rowIndex=-1;e.cellX=this.getCellX(e);return true;},prepareResize:function(e,mod){do{var i=_2b7(e.cellNode);e.cellNode=(i?e.cellNode.parentNode.cells[i+mod]:null);e.cellIndex=(e.cellNode?this.getCellNodeIndex(e.cellNode):-1);}while(e.cellNode&&e.cellNode.style.display=="none");return Boolean(e.cellNode);},canResize:function(e){if(!e.cellNode||e.cellNode.colSpan>1){return false;}var cell=this.grid.getCell(e.cellIndex);return !cell.noresize&&cell.canResize();},overLeftResizeArea:function(e){if(dojo.hasClass(dojo.body(),"dojoDndMove")){return false;}if(dojo.isIE){var tN=e.target;if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){return false;}}if(dojo._isBodyLtr()){return (e.cellIndex>0)&&(e.cellX<this.overResizeWidth)&&this.prepareResize(e,-1);}var t=e.cellNode&&(e.cellX<this.overResizeWidth);return t;},overRightResizeArea:function(e){if(dojo.hasClass(dojo.body(),"dojoDndMove")){return false;}if(dojo.isIE){var tN=e.target;if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){return false;}}if(dojo._isBodyLtr()){return e.cellNode&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth);}return (e.cellIndex>0)&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth)&&this.prepareResize(e,-1);},domousemove:function(e){if(!this.moveable){var c=(this.overRightResizeArea(e)?"dojoxGridColResize":(this.overLeftResizeArea(e)?"dojoxGridColResize":""));if(c&&!this.canResize(e)){c="dojoxGridColNoResize";}dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColNoResize",(c=="dojoxGridColNoResize"));dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColResize",(c=="dojoxGridColResize"));if(dojo.isIE){var t=e.sourceView.headerNode.scrollLeft;e.sourceView.headerNode.scrollLeft=t;}if(c){dojo.stopEvent(e);}}},domousedown:function(e){if(!this.moveable){if((this.overRightResizeArea(e)||this.overLeftResizeArea(e))&&this.canResize(e)){this.beginColumnResize(e);}else{this.grid.onMouseDown(e);this.grid.onMouseOverRow(e);}}},doclick:function(e){if(this._skipBogusClicks){dojo.stopEvent(e);return true;}return false;},colResizeSetup:function(e,_2dd){var _2de=dojo.contentBox(e.sourceView.headerNode);if(_2dd){this.lineDiv=document.createElement("div");var vw=(dojo.position||dojo._abs)(e.sourceView.headerNode,true);var _2df=dojo.contentBox(e.sourceView.domNode);var l=e.clientX;if(!dojo._isBodyLtr()&&dojo.isIE<8){l-=dojox.html.metrics.getScrollbar().w;}dojo.style(this.lineDiv,{top:vw.y+"px",left:l+"px",height:(_2df.h+_2de.h)+"px"});dojo.addClass(this.lineDiv,"dojoxGridResizeColLine");this.lineDiv._origLeft=l;dojo.body().appendChild(this.lineDiv);}var _2e0=[],_2e1=this.tableMap.findOverlappingNodes(e.cellNode);for(var i=0,cell;(cell=_2e1[i]);i++){_2e0.push({node:cell,index:this.getCellNodeIndex(cell),width:cell.offsetWidth});}var view=e.sourceView;var adj=dojo._isBodyLtr()?1:-1;var _2e2=e.grid.views.views;var _2e3=[];for(var j=view.idx+adj,_2e4;(_2e4=_2e2[j]);j=j+adj){_2e3.push({node:_2e4.headerNode,left:window.parseInt(_2e4.headerNode.style.left)});}var _2e5=view.headerContentNode.firstChild;var drag={scrollLeft:e.sourceView.headerNode.scrollLeft,view:view,node:e.cellNode,index:e.cellIndex,w:dojo.contentBox(e.cellNode).w,vw:_2de.w,table:_2e5,tw:dojo.contentBox(_2e5).w,spanners:_2e0,followers:_2e3};return drag;},beginColumnResize:function(e){this.moverDiv=document.createElement("div");dojo.style(this.moverDiv,{position:"absolute",left:0});dojo.body().appendChild(this.moverDiv);dojo.addClass(this.grid.domNode,"dojoxGridColumnResizing");var m=(this.moveable=new dojo.dnd.Moveable(this.moverDiv));var drag=this.colResizeSetup(e,true);m.onMove=dojo.hitch(this,"doResizeColumn",drag);dojo.connect(m,"onMoveStop",dojo.hitch(this,function(){this.endResizeColumn(drag);if(drag.node.releaseCapture){drag.node.releaseCapture();}this.moveable.destroy();delete this.moveable;this.moveable=null;dojo.removeClass(this.grid.domNode,"dojoxGridColumnResizing");}));if(e.cellNode.setCapture){e.cellNode.setCapture();}m.onMouseDown(e);},doResizeColumn:function(_2e6,_2e7,_2e8){var _2e9=_2e8.l;var data={deltaX:_2e9,w:_2e6.w+(dojo._isBodyLtr()?_2e9:-_2e9),vw:_2e6.vw+_2e9,tw:_2e6.tw+_2e9};this.dragRecord={inDrag:_2e6,mover:_2e7,leftTop:_2e8};if(data.w>=this.minColWidth){if(!_2e7){this.doResizeNow(_2e6,data);}else{dojo.style(this.lineDiv,"left",(this.lineDiv._origLeft+data.deltaX)+"px");}}},endResizeColumn:function(_2ea){if(this.dragRecord){var _2eb=this.dragRecord.leftTop;var _2ec=dojo._isBodyLtr()?_2eb.l:-_2eb.l;_2ec+=Math.max(_2ea.w+_2ec,this.minColWidth)-(_2ea.w+_2ec);if(dojo.isWebKit&&_2ea.spanners.length){_2ec+=dojo._getPadBorderExtents(_2ea.spanners[0].node).w;}var data={deltaX:_2ec,w:_2ea.w+_2ec,vw:_2ea.vw+_2ec,tw:_2ea.tw+_2ec};this.doResizeNow(_2ea,data);}dojo.destroy(this.lineDiv);dojo.destroy(this.moverDiv);dojo.destroy(this.moverDiv);delete this.moverDiv;this._skipBogusClicks=true;_2ea.view.update();this._skipBogusClicks=false;this.grid.onResizeColumn(_2ea.index);},doResizeNow:function(_2ed,data){_2ed.view.convertColPctToFixed();if(_2ed.view.flexCells&&!_2ed.view.testFlexCells()){var t=_2bc(_2ed.node);if(t){(t.style.width="");}}var i,s,sw,f,fl;for(i=0;(s=_2ed.spanners[i]);i++){sw=s.width+data.deltaX;s.node.style.width=sw+"px";_2ed.view.setColWidth(s.index,sw);}if(dojo._isBodyLtr()||!dojo.isIE){for(i=0;(f=_2ed.followers[i]);i++){fl=f.left+data.deltaX;f.node.style.left=fl+"px";}}_2ed.node.style.width=data.w+"px";_2ed.view.setColWidth(_2ed.index,data.w);_2ed.view.headerNode.style.width=data.vw+"px";_2ed.view.setColumnsWidth(data.tw);if(!dojo._isBodyLtr()){_2ed.view.headerNode.scrollLeft=_2ed.scrollLeft+data.deltaX;}}});dg._TableMap=dojo.extend(function(rows){this.mapRows(rows);},{map:null,mapRows:function(_2ee){var _2ef=_2ee.length;if(!_2ef){return;}this.map=[];var row;for(var k=0;(row=_2ee[k]);k++){this.map[k]=[];}for(var j=0;(row=_2ee[j]);j++){for(var i=0,x=0,cell,_2f0,_2f1;(cell=row[i]);i++){while(this.map[j][x]){x++;}this.map[j][x]={c:i,r:j};_2f1=cell.rowSpan||1;_2f0=cell.colSpan||1;for(var y=0;y<_2f1;y++){for(var s=0;s<_2f0;s++){this.map[j+y][x+s]=this.map[j][x];}}x+=_2f0;}}},dumpMap:function(){for(var j=0,row,h="";(row=this.map[j]);j++,h=""){for(var i=0,cell;(cell=row[i]);i++){h+=cell.r+","+cell.c+"   ";}}},getMapCoords:function(_2f2,_2f3){for(var j=0,row;(row=this.map[j]);j++){for(var i=0,cell;(cell=row[i]);i++){if(cell.c==_2f3&&cell.r==_2f2){return {j:j,i:i};}}}return {j:-1,i:-1};},getNode:function(_2f4,_2f5,_2f6){var row=_2f4&&_2f4.rows[_2f5];return row&&row.cells[_2f6];},_findOverlappingNodes:function(_2f7,_2f8,_2f9){var _2fa=[];var m=this.getMapCoords(_2f8,_2f9);for(var j=0,row;(row=this.map[j]);j++){if(j==m.j){continue;}var rw=row[m.i];var n=(rw?this.getNode(_2f7,rw.r,rw.c):null);if(n){_2fa.push(n);}}return _2fa;},findOverlappingNodes:function(_2fb){return this._findOverlappingNodes(_2bc(_2fb),_2b8(_2fb.parentNode),_2b7(_2fb));}});})();}if(!dojo._hasResource["dojo.dnd.Container"]){dojo._hasResource["dojo.dnd.Container"]=true;dojo.provide("dojo.dnd.Container");dojo.declare("dojo.dnd.Container",null,{skipForm:false,constructor:function(node,_2fc){this.node=dojo.byId(node);if(!_2fc){_2fc={};}this.creator=_2fc.creator||null;this.skipForm=_2fc.skipForm;this.parent=_2fc.dropParent&&dojo.byId(_2fc.dropParent);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");if(!(_2fc&&_2fc._skipStartup)){this.startup();}this.events=[dojo.connect(this.node,"onmouseover",this,"onMouseOver"),dojo.connect(this.node,"onmouseout",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",this,"onSelectStart"),dojo.connect(this.node,"onselectstart",this,"onSelectStart")];},creator:function(){},getItem:function(key){return this.map[key];},setItem:function(key,data){this.map[key]=data;},delItem:function(key){delete this.map[key];},forInItems:function(f,o){o=o||dojo.global;var m=this.map,e=dojo.dnd._empty;for(var i in m){if(i in e){continue;}f.call(o,m[i],i,this);}return o;},clearItems:function(){this.map={};},getAllNodes:function(){return dojo.query("> .dojoDndItem",this.parent);},sync:function(){var map={};this.getAllNodes().forEach(function(node){if(node.id){var item=this.getItem(node.id);if(item){map[node.id]=item;return;}}else{node.id=dojo.dnd.getUniqueId();}var type=node.getAttribute("dndType"),data=node.getAttribute("dndData");map[node.id]={data:data||node.innerHTML,type:type?type.split(/\s*,\s*/):["text"]};},this);this.map=map;return this;},insertNodes:function(data,_2fd,_2fe){if(!this.parent.firstChild){_2fe=null;}else{if(_2fd){if(!_2fe){_2fe=this.parent.firstChild;}}else{if(_2fe){_2fe=_2fe.nextSibling;}}}if(_2fe){for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.insertBefore(t.node,_2fe);}}else{for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.appendChild(t.node);}}return this;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.clearItems();this.node=this.parent=this.current=null;},markupFactory:function(_2ff,node){_2ff._skipStartup=true;return new dojo.dnd.Container(node,_2ff);},startup:function(){if(!this.parent){this.parent=this.node;if(this.parent.tagName.toLowerCase()=="table"){var c=this.parent.getElementsByTagName("tbody");if(c&&c.length){this.parent=c[0];}}}this.defaultCreator=dojo.dnd._defaultCreator(this.parent);this.sync();},onMouseOver:function(e){var n=e.relatedTarget;while(n){if(n==this.node){break;}try{n=n.parentNode;}catch(x){n=null;}}if(!n){this._changeState("Container","Over");this.onOverEvent();}n=this._getChildByEvent(e);if(this.current==n){return;}if(this.current){this._removeItemClass(this.current,"Over");}if(n){this._addItemClass(n,"Over");}this.current=n;},onMouseOut:function(e){for(var n=e.relatedTarget;n;){if(n==this.node){return;}try{n=n.parentNode;}catch(x){n=null;}}if(this.current){this._removeItemClass(this.current,"Over");this.current=null;}this._changeState("Container","");this.onOutEvent();},onSelectStart:function(e){if(!this.skipForm||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onOverEvent:function(){},onOutEvent:function(){},_changeState:function(type,_300){var _301="dojoDnd"+type;var _302=type.toLowerCase()+"State";dojo.removeClass(this.node,_301+this[_302]);dojo.addClass(this.node,_301+_300);this[_302]=_300;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},_getChildByEvent:function(e){var node=e.target;if(node){for(var _303=node.parentNode;_303;node=_303,_303=node.parentNode){if(_303==this.parent&&dojo.hasClass(node,"dojoDndItem")){return node;}}}return null;},_normalizedCreator:function(item,hint){var t=(this.creator||this.defaultCreator).call(this,item,hint);if(!dojo.isArray(t.type)){t.type=["text"];}if(!t.node.id){t.node.id=dojo.dnd.getUniqueId();}dojo.addClass(t.node,"dojoDndItem");return t;}});dojo.dnd._createNode=function(tag){if(!tag){return dojo.dnd._createSpan;}return function(text){return dojo.create(tag,{innerHTML:text});};};dojo.dnd._createTrTd=function(text){var tr=dojo.create("tr");dojo.create("td",{innerHTML:text},tr);return tr;};dojo.dnd._createSpan=function(text){return dojo.create("span",{innerHTML:text});};dojo.dnd._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};dojo.dnd._defaultCreator=function(node){var tag=node.tagName.toLowerCase();var c=tag=="tbody"||tag=="thead"?dojo.dnd._createTrTd:dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);return function(item,hint){var _304=item&&dojo.isObject(item),data,type,n;if(_304&&item.tagName&&item.nodeType&&item.getAttribute){data=item.getAttribute("dndData")||item.innerHTML;type=item.getAttribute("dndType");type=type?type.split(/\s*,\s*/):["text"];n=item;}else{data=(_304&&item.data)?item.data:item;type=(_304&&item.type)?item.type:["text"];n=(hint=="avatar"?dojo.dnd._createSpan:c)(String(data));}if(!n.id){n.id=dojo.dnd.getUniqueId();}return {node:n,data:data,type:type};};};}if(!dojo._hasResource["dojo.dnd.Selector"]){dojo._hasResource["dojo.dnd.Selector"]=true;dojo.provide("dojo.dnd.Selector");dojo.declare("dojo.dnd.Selector",dojo.dnd.Container,{constructor:function(node,_305){if(!_305){_305={};}this.singular=_305.singular;this.autoSync=_305.autoSync;this.selection={};this.anchor=null;this.simpleSelection=false;this.events.push(dojo.connect(this.node,"onmousedown",this,"onMouseDown"),dojo.connect(this.node,"onmouseup",this,"onMouseUp"));},singular:false,getSelectedNodes:function(){var t=new dojo.NodeList();var e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}t.push(dojo.byId(i));}return t;},selectNone:function(){return this._removeSelection()._removeAnchor();},selectAll:function(){this.forInItems(function(data,id){this._addItemClass(dojo.byId(id),"Selected");this.selection[id]=1;},this);return this._removeAnchor();},deleteSelectedNodes:function(){var e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}var n=dojo.byId(i);this.delItem(i);dojo.destroy(n);}this.anchor=null;this.selection={};return this;},forInSelectedItems:function(f,o){o=o||dojo.global;var s=this.selection,e=dojo.dnd._empty;for(var i in s){if(i in e){continue;}f.call(o,this.getItem(i),i,this);}},sync:function(){dojo.dnd.Selector.superclass.sync.call(this);if(this.anchor){if(!this.getItem(this.anchor.id)){this.anchor=null;}}var t=[],e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}if(!this.getItem(i)){t.push(i);}}dojo.forEach(t,function(i){delete this.selection[i];},this);return this;},insertNodes:function(_306,data,_307,_308){var _309=this._normalizedCreator;this._normalizedCreator=function(item,hint){var t=_309.call(this,item,hint);if(_306){if(!this.anchor){this.anchor=t.node;this._removeItemClass(t.node,"Selected");this._addItemClass(this.anchor,"Anchor");}else{if(this.anchor!=t.node){this._removeItemClass(t.node,"Anchor");this._addItemClass(t.node,"Selected");}}this.selection[t.node.id]=1;}else{this._removeItemClass(t.node,"Selected");this._removeItemClass(t.node,"Anchor");}return t;};dojo.dnd.Selector.superclass.insertNodes.call(this,data,_307,_308);this._normalizedCreator=_309;return this;},destroy:function(){dojo.dnd.Selector.superclass.destroy.call(this);this.selection=this.anchor=null;},markupFactory:function(_30a,node){_30a._skipStartup=true;return new dojo.dnd.Selector(node,_30a);},onMouseDown:function(e){if(this.autoSync){this.sync();}if(!this.current){return;}if(!this.singular&&!dojo.isCopyKey(e)&&!e.shiftKey&&(this.current.id in this.selection)){this.simpleSelection=true;if(e.button===dojo.mouseButtons.LEFT){dojo.stopEvent(e);}return;}if(!this.singular&&e.shiftKey){if(!dojo.isCopyKey(e)){this._removeSelection();}var c=this.getAllNodes();if(c.length){if(!this.anchor){this.anchor=c[0];this._addItemClass(this.anchor,"Anchor");}this.selection[this.anchor.id]=1;if(this.anchor!=this.current){var i=0;for(;i<c.length;++i){var node=c[i];if(node==this.anchor||node==this.current){break;}}for(++i;i<c.length;++i){var node=c[i];if(node==this.anchor||node==this.current){break;}this._addItemClass(node,"Selected");this.selection[node.id]=1;}this._addItemClass(this.current,"Selected");this.selection[this.current.id]=1;}}}else{if(this.singular){if(this.anchor==this.current){if(dojo.isCopyKey(e)){this.selectNone();}}else{this.selectNone();this.anchor=this.current;this._addItemClass(this.anchor,"Anchor");this.selection[this.current.id]=1;}}else{if(dojo.isCopyKey(e)){if(this.anchor==this.current){delete this.selection[this.anchor.id];this._removeAnchor();}else{if(this.current.id in this.selection){this._removeItemClass(this.current,"Selected");delete this.selection[this.current.id];}else{if(this.anchor){this._removeItemClass(this.anchor,"Anchor");this._addItemClass(this.anchor,"Selected");}this.anchor=this.current;this._addItemClass(this.current,"Anchor");this.selection[this.current.id]=1;}}}else{if(!(this.current.id in this.selection)){this.selectNone();this.anchor=this.current;this._addItemClass(this.current,"Anchor");this.selection[this.current.id]=1;}}}}dojo.stopEvent(e);},onMouseUp:function(e){if(!this.simpleSelection){return;}this.simpleSelection=false;this.selectNone();if(this.current){this.anchor=this.current;this._addItemClass(this.anchor,"Anchor");this.selection[this.current.id]=1;}},onMouseMove:function(e){this.simpleSelection=false;},onOverEvent:function(){this.onmousemoveEvent=dojo.connect(this.node,"onmousemove",this,"onMouseMove");},onOutEvent:function(){dojo.disconnect(this.onmousemoveEvent);delete this.onmousemoveEvent;},_removeSelection:function(){var e=dojo.dnd._empty;for(var i in this.selection){if(i in e){continue;}var node=dojo.byId(i);if(node){this._removeItemClass(node,"Selected");}}this.selection={};return this;},_removeAnchor:function(){if(this.anchor){this._removeItemClass(this.anchor,"Anchor");this.anchor=null;}return this;}});}if(!dojo._hasResource["dojo.dnd.Avatar"]){dojo._hasResource["dojo.dnd.Avatar"]=true;dojo.provide("dojo.dnd.Avatar");dojo.declare("dojo.dnd.Avatar",null,{constructor:function(_30b){this.manager=_30b;this.construct();},construct:function(){this.isA11y=dojo.hasClass(dojo.body(),"dijit_a11y");var a=dojo.create("table",{"class":"dojoDndAvatar",style:{position:"absolute",zIndex:"1999",margin:"0px"}}),_30c=this.manager.source,node,b=dojo.create("tbody",null,a),tr=dojo.create("tr",null,b),td=dojo.create("td",null,tr),icon=this.isA11y?dojo.create("span",{id:"a11yIcon",innerHTML:this.manager.copy?"+":"<"},td):null,span=dojo.create("span",{innerHTML:_30c.generateText?this._generateText():""},td),k=Math.min(5,this.manager.nodes.length),i=0;dojo.attr(tr,{"class":"dojoDndAvatarHeader",style:{opacity:0.9}});for(;i<k;++i){if(_30c.creator){node=_30c._normalizedCreator(_30c.getItem(this.manager.nodes[i].id).data,"avatar").node;}else{node=this.manager.nodes[i].cloneNode(true);if(node.tagName.toLowerCase()=="tr"){var _30d=dojo.create("table"),_30e=dojo.create("tbody",null,_30d);_30e.appendChild(node);node=_30d;}}node.id="";tr=dojo.create("tr",null,b);td=dojo.create("td",null,tr);td.appendChild(node);dojo.attr(tr,{"class":"dojoDndAvatarItem",style:{opacity:(9-i)/10}});}this.node=a;},destroy:function(){dojo.destroy(this.node);this.node=false;},update:function(){dojo[(this.manager.canDropFlag?"add":"remove")+"Class"](this.node,"dojoDndAvatarCanDrop");if(this.isA11y){var icon=dojo.byId("a11yIcon");var text="+";if(this.manager.canDropFlag&&!this.manager.copy){text="< ";}else{if(!this.manager.canDropFlag&&!this.manager.copy){text="o";}else{if(!this.manager.canDropFlag){text="x";}}}icon.innerHTML=text;}dojo.query(("tr.dojoDndAvatarHeader td span"+(this.isA11y?" span":"")),this.node).forEach(function(node){node.innerHTML=this._generateText();},this);},_generateText:function(){return this.manager.nodes.length.toString();}});}if(!dojo._hasResource["dojo.dnd.Manager"]){dojo._hasResource["dojo.dnd.Manager"]=true;dojo.provide("dojo.dnd.Manager");dojo.declare("dojo.dnd.Manager",null,{constructor:function(){this.avatar=null;this.source=null;this.nodes=[];this.copy=true;this.target=null;this.canDropFlag=false;this.events=[];},OFFSET_X:16,OFFSET_Y:16,overSource:function(_30f){if(this.avatar){this.target=(_30f&&_30f.targetState!="Disabled")?_30f:null;this.canDropFlag=Boolean(this.target);this.avatar.update();}dojo.publish("/dnd/source/over",[_30f]);},outSource:function(_310){if(this.avatar){if(this.target==_310){this.target=null;this.canDropFlag=false;this.avatar.update();dojo.publish("/dnd/source/over",[null]);}}else{dojo.publish("/dnd/source/over",[null]);}},startDrag:function(_311,_312,copy){this.source=_311;this.nodes=_312;this.copy=Boolean(copy);this.avatar=this.makeAvatar();dojo.body().appendChild(this.avatar.node);dojo.publish("/dnd/start",[_311,_312,this.copy]);this.events=[dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove"),dojo.connect(dojo.doc,"onmouseup",this,"onMouseUp"),dojo.connect(dojo.doc,"onkeydown",this,"onKeyDown"),dojo.connect(dojo.doc,"onkeyup",this,"onKeyUp"),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent)];var c="dojoDnd"+(copy?"Copy":"Move");dojo.addClass(dojo.body(),c);},canDrop:function(flag){var _313=Boolean(this.target&&flag);if(this.canDropFlag!=_313){this.canDropFlag=_313;this.avatar.update();}},stopDrag:function(){dojo.removeClass(dojo.body(),"dojoDndCopy");dojo.removeClass(dojo.body(),"dojoDndMove");dojo.forEach(this.events,dojo.disconnect);this.events=[];this.avatar.destroy();this.avatar=null;this.source=this.target=null;this.nodes=[];},makeAvatar:function(){return new dojo.dnd.Avatar(this);},updateAvatar:function(){this.avatar.update();},onMouseMove:function(e){var a=this.avatar;if(a){dojo.dnd.autoScrollNodes(e);var s=a.node.style;s.left=(e.pageX+this.OFFSET_X)+"px";s.top=(e.pageY+this.OFFSET_Y)+"px";var copy=Boolean(this.source.copyState(dojo.isCopyKey(e)));if(this.copy!=copy){this._setCopyStatus(copy);}}},onMouseUp:function(e){if(this.avatar){if(this.target&&this.canDropFlag){var copy=Boolean(this.source.copyState(dojo.isCopyKey(e))),_314=[this.source,this.nodes,copy,this.target,e];dojo.publish("/dnd/drop/before",_314);dojo.publish("/dnd/drop",_314);}else{dojo.publish("/dnd/cancel");}this.stopDrag();}},onKeyDown:function(e){if(this.avatar){switch(e.keyCode){case dojo.keys.CTRL:var copy=Boolean(this.source.copyState(true));if(this.copy!=copy){this._setCopyStatus(copy);}break;case dojo.keys.ESCAPE:dojo.publish("/dnd/cancel");this.stopDrag();break;}}},onKeyUp:function(e){if(this.avatar&&e.keyCode==dojo.keys.CTRL){var copy=Boolean(this.source.copyState(false));if(this.copy!=copy){this._setCopyStatus(copy);}}},_setCopyStatus:function(copy){this.copy=copy;this.source._markDndStatus(this.copy);this.updateAvatar();dojo.removeClass(dojo.body(),"dojoDnd"+(this.copy?"Move":"Copy"));dojo.addClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move"));}});dojo.dnd._manager=null;dojo.dnd.manager=function(){if(!dojo.dnd._manager){dojo.dnd._manager=new dojo.dnd.Manager();}return dojo.dnd._manager;};}if(!dojo._hasResource["dojo.dnd.Source"]){dojo._hasResource["dojo.dnd.Source"]=true;dojo.provide("dojo.dnd.Source");dojo.declare("dojo.dnd.Source",dojo.dnd.Selector,{isSource:true,horizontal:false,copyOnly:false,selfCopy:false,selfAccept:true,skipForm:false,withHandles:false,autoSync:false,delay:0,accept:["text"],generateText:true,constructor:function(node,_315){dojo.mixin(this,dojo.mixin({},_315));var type=this.accept;if(type.length){this.accept={};for(var i=0;i<type.length;++i){this.accept[type[i]]=1;}}this.isDragging=false;this.mouseDown=false;this.targetAnchor=null;this.targetBox=null;this.before=true;this._lastX=0;this._lastY=0;this.sourceState="";if(this.isSource){dojo.addClass(this.node,"dojoDndSource");}this.targetState="";if(this.accept){dojo.addClass(this.node,"dojoDndTarget");}if(this.horizontal){dojo.addClass(this.node,"dojoDndHorizontal");}this.topics=[dojo.subscribe("/dnd/source/over",this,"onDndSourceOver"),dojo.subscribe("/dnd/start",this,"onDndStart"),dojo.subscribe("/dnd/drop",this,"onDndDrop"),dojo.subscribe("/dnd/cancel",this,"onDndCancel")];},checkAcceptance:function(_316,_317){if(this==_316){return !this.copyOnly||this.selfAccept;}for(var i=0;i<_317.length;++i){var type=_316.getItem(_317[i].id).type;var flag=false;for(var j=0;j<type.length;++j){if(type[j] in this.accept){flag=true;break;}}if(!flag){return false;}}return true;},copyState:function(_318,self){if(_318){return true;}if(arguments.length<2){self=this==dojo.dnd.manager().target;}if(self){if(this.copyOnly){return this.selfCopy;}}else{return this.copyOnly;}return false;},destroy:function(){dojo.dnd.Source.superclass.destroy.call(this);dojo.forEach(this.topics,dojo.unsubscribe);this.targetAnchor=null;},markupFactory:function(_319,node){_319._skipStartup=true;return new dojo.dnd.Source(node,_319);},onMouseMove:function(e){if(this.isDragging&&this.targetState=="Disabled"){return;}dojo.dnd.Source.superclass.onMouseMove.call(this,e);var m=dojo.dnd.manager();if(!this.isDragging){if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay)){var _31a=this.getSelectedNodes();if(_31a.length){m.startDrag(this,_31a,this.copyState(dojo.isCopyKey(e),true));}}}if(this.isDragging){var _31b=false;if(this.current){if(!this.targetBox||this.targetAnchor!=this.current){this.targetBox=dojo.position(this.current,true);}if(this.horizontal){_31b=(e.pageX-this.targetBox.x)<(this.targetBox.w/2);}else{_31b=(e.pageY-this.targetBox.y)<(this.targetBox.h/2);}}if(this.current!=this.targetAnchor||_31b!=this.before){this._markTargetAnchor(_31b);m.canDrop(!this.current||m.source!=this||!(this.current.id in this.selection));}}},onMouseDown:function(e){if(!this.mouseDown&&this._legalMouseDown(e)&&(!this.skipForm||!dojo.dnd.isFormElement(e))){this.mouseDown=true;this._lastX=e.pageX;this._lastY=e.pageY;dojo.dnd.Source.superclass.onMouseDown.call(this,e);}},onMouseUp:function(e){if(this.mouseDown){this.mouseDown=false;dojo.dnd.Source.superclass.onMouseUp.call(this,e);}},onDndSourceOver:function(_31c){if(this!=_31c){this.mouseDown=false;if(this.targetAnchor){this._unmarkTargetAnchor();}}else{if(this.isDragging){var m=dojo.dnd.manager();m.canDrop(this.targetState!="Disabled"&&(!this.current||m.source!=this||!(this.current.id in this.selection)));}}},onDndStart:function(_31d,_31e,copy){if(this.autoSync){this.sync();}if(this.isSource){this._changeState("Source",this==_31d?(copy?"Copied":"Moved"):"");}var _31f=this.accept&&this.checkAcceptance(_31d,_31e);this._changeState("Target",_31f?"":"Disabled");if(this==_31d){dojo.dnd.manager().overSource(this);}this.isDragging=true;},onDndDrop:function(_320,_321,copy,_322){if(this==_322){this.onDrop(_320,_321,copy);}this.onDndCancel();},onDndCancel:function(){if(this.targetAnchor){this._unmarkTargetAnchor();this.targetAnchor=null;}this.before=true;this.isDragging=false;this.mouseDown=false;this._changeState("Source","");this._changeState("Target","");},onDrop:function(_323,_324,copy){if(this!=_323){this.onDropExternal(_323,_324,copy);}else{this.onDropInternal(_324,copy);}},onDropExternal:function(_325,_326,copy){var _327=this._normalizedCreator;if(this.creator){this._normalizedCreator=function(node,hint){return _327.call(this,_325.getItem(node.id).data,hint);};}else{if(copy){this._normalizedCreator=function(node,hint){var t=_325.getItem(node.id);var n=node.cloneNode(true);n.id=dojo.dnd.getUniqueId();return {node:n,data:t.data,type:t.type};};}else{this._normalizedCreator=function(node,hint){var t=_325.getItem(node.id);_325.delItem(node.id);return {node:node,data:t.data,type:t.type};};}}this.selectNone();if(!copy&&!this.creator){_325.selectNone();}this.insertNodes(true,_326,this.before,this.current);if(!copy&&this.creator){_325.deleteSelectedNodes();}this._normalizedCreator=_327;},onDropInternal:function(_328,copy){var _329=this._normalizedCreator;if(this.current&&this.current.id in this.selection){return;}if(copy){if(this.creator){this._normalizedCreator=function(node,hint){return _329.call(this,this.getItem(node.id).data,hint);};}else{this._normalizedCreator=function(node,hint){var t=this.getItem(node.id);var n=node.cloneNode(true);n.id=dojo.dnd.getUniqueId();return {node:n,data:t.data,type:t.type};};}}else{if(!this.current){return;}this._normalizedCreator=function(node,hint){var t=this.getItem(node.id);return {node:node,data:t.data,type:t.type};};}this._removeSelection();this.insertNodes(true,_328,this.before,this.current);this._normalizedCreator=_329;},onDraggingOver:function(){},onDraggingOut:function(){},onOverEvent:function(){dojo.dnd.Source.superclass.onOverEvent.call(this);dojo.dnd.manager().overSource(this);if(this.isDragging&&this.targetState!="Disabled"){this.onDraggingOver();}},onOutEvent:function(){dojo.dnd.Source.superclass.onOutEvent.call(this);dojo.dnd.manager().outSource(this);if(this.isDragging&&this.targetState!="Disabled"){this.onDraggingOut();}},_markTargetAnchor:function(_32a){if(this.current==this.targetAnchor&&this.before==_32a){return;}if(this.targetAnchor){this._removeItemClass(this.targetAnchor,this.before?"Before":"After");}this.targetAnchor=this.current;this.targetBox=null;this.before=_32a;if(this.targetAnchor){this._addItemClass(this.targetAnchor,this.before?"Before":"After");}},_unmarkTargetAnchor:function(){if(!this.targetAnchor){return;}this._removeItemClass(this.targetAnchor,this.before?"Before":"After");this.targetAnchor=null;this.targetBox=null;this.before=true;},_markDndStatus:function(copy){this._changeState("Source",copy?"Copied":"Moved");},_legalMouseDown:function(e){if(!dojo.mouseButtons.isLeft(e)){return false;}if(!this.withHandles){return true;}for(var node=e.target;node&&node!==this.node;node=node.parentNode){if(dojo.hasClass(node,"dojoDndHandle")){return true;}if(dojo.hasClass(node,"dojoDndItem")||dojo.hasClass(node,"dojoDndIgnore")){break;}}return false;}});dojo.declare("dojo.dnd.Target",dojo.dnd.Source,{constructor:function(node,_32b){this.isSource=false;dojo.removeClass(this.node,"dojoDndSource");},markupFactory:function(_32c,node){_32c._skipStartup=true;return new dojo.dnd.Target(node,_32c);}});dojo.declare("dojo.dnd.AutoSource",dojo.dnd.Source,{constructor:function(node,_32d){this.autoSync=true;},markupFactory:function(_32e,node){_32e._skipStartup=true;return new dojo.dnd.AutoSource(node,_32e);}});}if(!dojo._hasResource["dojox.grid._View"]){dojo._hasResource["dojox.grid._View"]=true;dojo.provide("dojox.grid._View");(function(){var _32f=function(_330,_331){return _330.style.cssText==undefined?_330.getAttribute("style"):_330.style.cssText;};dojo.declare("dojox.grid._View",[dijit._Widget,dijit._Templated],{defaultWidth:"18em",viewWidth:"",templateString:"<div class=\"dojoxGridView\" wairole=\"presentation\">\n\t<div class=\"dojoxGridHeader\" dojoAttachPoint=\"headerNode\" wairole=\"presentation\">\n\t\t<div dojoAttachPoint=\"headerNodeContainer\" style=\"width:9000em\" wairole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"headerContentNode\" wairole=\"row\"></div>\n\t\t</div>\n\t</div>\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" dojoAttachPoint=\"hiddenFocusNode\" wairole=\"presentation\" />\n\t<input type=\"checkbox\" class=\"dojoxGridHiddenFocus\" wairole=\"presentation\" />\n\t<div class=\"dojoxGridScrollbox\" dojoAttachPoint=\"scrollboxNode\" wairole=\"presentation\">\n\t\t<div class=\"dojoxGridContent\" dojoAttachPoint=\"contentNode\" hidefocus=\"hidefocus\" wairole=\"presentation\"></div>\n\t</div>\n</div>\n",themeable:false,classTag:"dojoxGrid",marginBottom:0,rowPad:2,_togglingColumn:-1,_headerBuilderClass:dojox.grid._HeaderBuilder,_contentBuilderClass:dojox.grid._ContentBuilder,postMixInProperties:function(){this.rowNodes={};},postCreate:function(){this.connect(this.scrollboxNode,"onscroll","doscroll");dojox.grid.util.funnelEvents(this.contentNode,this,"doContentEvent",["mouseover","mouseout","click","dblclick","contextmenu","mousedown"]);dojox.grid.util.funnelEvents(this.headerNode,this,"doHeaderEvent",["dblclick","mouseover","mouseout","mousemove","mousedown","click","contextmenu"]);this.content=new this._contentBuilderClass(this);this.header=new this._headerBuilderClass(this);if(!dojo._isBodyLtr()){this.headerNodeContainer.style.width="";}},destroy:function(){dojo.destroy(this.headerNode);delete this.headerNode;for(var i in this.rowNodes){dojo.destroy(this.rowNodes[i]);}this.rowNodes={};if(this.source){this.source.destroy();}this.inherited(arguments);},focus:function(){if(dojo.isIE||dojo.isWebKit||dojo.isOpera){this.hiddenFocusNode.focus();}else{this.scrollboxNode.focus();}},setStructure:function(_332){var vs=(this.structure=_332);if(vs.width&&!isNaN(vs.width)){this.viewWidth=vs.width+"em";}else{this.viewWidth=vs.width||(vs.noscroll?"auto":this.viewWidth);}this._onBeforeRow=vs.onBeforeRow||function(){};this._onAfterRow=vs.onAfterRow||function(){};this.noscroll=vs.noscroll;if(this.noscroll){this.scrollboxNode.style.overflow="hidden";}this.simpleStructure=Boolean(vs.cells.length==1);this.testFlexCells();this.updateStructure();},_cleanupRowWidgets:function(_333){if(_333){dojo.forEach(dojo.query("[widgetId]",_333).map(dijit.byNode),function(w){if(w._destroyOnRemove){w.destroy();delete w;}else{if(w.domNode&&w.domNode.parentNode){w.domNode.parentNode.removeChild(w.domNode);}}});}},onBeforeRow:function(_334,_335){this._onBeforeRow(_334,_335);if(_334>=0){this._cleanupRowWidgets(this.getRowNode(_334));}},onAfterRow:function(_336,_337,_338){this._onAfterRow(_336,_337,_338);var g=this.grid;dojo.forEach(dojo.query(".dojoxGridStubNode",_338),function(n){if(n&&n.parentNode){var lw=n.getAttribute("linkWidget");var _339=window.parseInt(dojo.attr(n,"cellIdx"),10);var _33a=g.getCell(_339);var w=dijit.byId(lw);if(w){n.parentNode.replaceChild(w.domNode,n);if(!w._started){w.startup();}}else{n.innerHTML="";}}},this);},testFlexCells:function(){this.flexCells=false;for(var j=0,row;(row=this.structure.cells[j]);j++){for(var i=0,cell;(cell=row[i]);i++){cell.view=this;this.flexCells=this.flexCells||cell.isFlex();}}return this.flexCells;},updateStructure:function(){this.header.update();this.content.update();},getScrollbarWidth:function(){var _33b=this.hasVScrollbar();var _33c=dojo.style(this.scrollboxNode,"overflow");if(this.noscroll||!_33c||_33c=="hidden"){_33b=false;}else{if(_33c=="scroll"){_33b=true;}}return (_33b?dojox.html.metrics.getScrollbar().w:0);},getColumnsWidth:function(){var h=this.headerContentNode;return h&&h.firstChild?h.firstChild.offsetWidth:0;},setColumnsWidth:function(_33d){this.headerContentNode.firstChild.style.width=_33d+"px";if(this.viewWidth){this.viewWidth=_33d+"px";}},getWidth:function(){return this.viewWidth||(this.getColumnsWidth()+this.getScrollbarWidth())+"px";},getContentWidth:function(){return Math.max(0,dojo._getContentBox(this.domNode).w-this.getScrollbarWidth())+"px";},render:function(){this.scrollboxNode.style.height="";this.renderHeader();if(this._togglingColumn>=0){this.setColumnsWidth(this.getColumnsWidth()-this._togglingColumn);this._togglingColumn=-1;}var _33e=this.grid.layout.cells;var _33f=dojo.hitch(this,function(node,_340){!dojo._isBodyLtr()&&(_340=!_340);var inc=_340?-1:1;var idx=this.header.getCellNodeIndex(node)+inc;var cell=_33e[idx];while(cell&&cell.getHeaderNode()&&cell.getHeaderNode().style.display=="none"){idx+=inc;cell=_33e[idx];}if(cell){return cell.getHeaderNode();}return null;});if(this.grid.columnReordering&&this.simpleStructure){if(this.source){this.source.destroy();}var _341="dojoxGrid_bottomMarker";var _342="dojoxGrid_topMarker";if(this.bottomMarker){dojo.destroy(this.bottomMarker);}this.bottomMarker=dojo.byId(_341);if(this.topMarker){dojo.destroy(this.topMarker);}this.topMarker=dojo.byId(_342);if(!this.bottomMarker){this.bottomMarker=dojo.create("div",{"id":_341,"class":"dojoxGridColPlaceBottom"},dojo.body());this._hide(this.bottomMarker);this.topMarker=dojo.create("div",{"id":_342,"class":"dojoxGridColPlaceTop"},dojo.body());this._hide(this.topMarker);}this.arrowDim=dojo.contentBox(this.bottomMarker);var _343=dojo.contentBox(this.headerContentNode.firstChild.rows[0]).h;this.source=new dojo.dnd.Source(this.headerContentNode.firstChild.rows[0],{horizontal:true,accept:["gridColumn_"+this.grid.id],viewIndex:this.index,generateText:false,onMouseDown:dojo.hitch(this,function(e){this.header.decorateEvent(e);if((this.header.overRightResizeArea(e)||this.header.overLeftResizeArea(e))&&this.header.canResize(e)&&!this.header.moveable){this.header.beginColumnResize(e);}else{if(this.grid.headerMenu){this.grid.headerMenu.onCancel(true);}if(e.button===(dojo.isIE?1:0)){dojo.dnd.Source.prototype.onMouseDown.call(this.source,e);}}}),onMouseOver:dojo.hitch(this,function(e){var src=this.source;if(src._getChildByEvent(e)){dojo.dnd.Source.prototype.onMouseOver.apply(src,arguments);}}),_markTargetAnchor:dojo.hitch(this,function(_344){var src=this.source;if(src.current==src.targetAnchor&&src.before==_344){return;}if(src.targetAnchor&&_33f(src.targetAnchor,src.before)){src._removeItemClass(_33f(src.targetAnchor,src.before),src.before?"After":"Before");}dojo.dnd.Source.prototype._markTargetAnchor.call(src,_344);var _345=_344?src.targetAnchor:_33f(src.targetAnchor,src.before);var _346=0;if(!_345){_345=src.targetAnchor;_346=dojo.contentBox(_345).w+this.arrowDim.w/2+2;}var pos=(dojo.position||dojo._abs)(_345,true);var left=Math.floor(pos.x-this.arrowDim.w/2+_346);dojo.style(this.bottomMarker,"visibility","visible");dojo.style(this.topMarker,"visibility","visible");dojo.style(this.bottomMarker,{"left":left+"px","top":(_343+pos.y)+"px"});dojo.style(this.topMarker,{"left":left+"px","top":(pos.y-this.arrowDim.h)+"px"});if(src.targetAnchor&&_33f(src.targetAnchor,src.before)){src._addItemClass(_33f(src.targetAnchor,src.before),src.before?"After":"Before");}}),_unmarkTargetAnchor:dojo.hitch(this,function(){var src=this.source;if(!src.targetAnchor){return;}if(src.targetAnchor&&_33f(src.targetAnchor,src.before)){src._removeItemClass(_33f(src.targetAnchor,src.before),src.before?"After":"Before");}this._hide(this.bottomMarker);this._hide(this.topMarker);dojo.dnd.Source.prototype._unmarkTargetAnchor.call(src);}),destroy:dojo.hitch(this,function(){dojo.disconnect(this._source_conn);dojo.unsubscribe(this._source_sub);dojo.dnd.Source.prototype.destroy.call(this.source);if(this.bottomMarker){dojo.destroy(this.bottomMarker);delete this.bottomMarker;}if(this.topMarker){dojo.destroy(this.topMarker);delete this.topMarker;}}),onDndCancel:dojo.hitch(this,function(){dojo.dnd.Source.prototype.onDndCancel.call(this.source);this._hide(this.bottomMarker);this._hide(this.topMarker);})});this._source_conn=dojo.connect(this.source,"onDndDrop",this,"_onDndDrop");this._source_sub=dojo.subscribe("/dnd/drop/before",this,"_onDndDropBefore");this.source.startup();}},_hide:function(node){dojo.style(node,{left:"-10000px",top:"-10000px","visibility":"hidden"});},_onDndDropBefore:function(_347,_348,copy){if(dojo.dnd.manager().target!==this.source){return;}this.source._targetNode=this.source.targetAnchor;this.source._beforeTarget=this.source.before;var _349=this.grid.views.views;var _34a=_349[_347.viewIndex];var _34b=_349[this.index];if(_34b!=_34a){_34a.convertColPctToFixed();_34b.convertColPctToFixed();}},_onDndDrop:function(_34c,_34d,copy){if(dojo.dnd.manager().target!==this.source){if(dojo.dnd.manager().source===this.source){this._removingColumn=true;}return;}this._hide(this.bottomMarker);this._hide(this.topMarker);var _34e=function(n){return n?dojo.attr(n,"idx"):null;};var w=dojo.marginBox(_34d[0]).w;if(_34c.viewIndex!==this.index){var _34f=this.grid.views.views;var _350=_34f[_34c.viewIndex];var _351=_34f[this.index];if(_350.viewWidth&&_350.viewWidth!="auto"){_350.setColumnsWidth(_350.getColumnsWidth()-w);}if(_351.viewWidth&&_351.viewWidth!="auto"){_351.setColumnsWidth(_351.getColumnsWidth());}}var stn=this.source._targetNode;var stb=this.source._beforeTarget;!dojo._isBodyLtr()&&(stb=!stb);var _352=this.grid.layout;var idx=this.index;delete this.source._targetNode;delete this.source._beforeTarget;_352.moveColumn(_34c.viewIndex,idx,_34e(_34d[0]),_34e(stn),stb);},renderHeader:function(){this.headerContentNode.innerHTML=this.header.generateHtml(this._getHeaderContent);if(this.flexCells){this.contentWidth=this.getContentWidth();this.headerContentNode.firstChild.style.width=this.contentWidth;}dojox.grid.util.fire(this,"onAfterRow",[-1,this.structure.cells,this.headerContentNode]);},_getHeaderContent:function(_353){var n=_353.name||_353.grid.getCellName(_353);var ret=["<div class=\"dojoxGridSortNode"];if(_353.index!=_353.grid.getSortIndex()){ret.push("\">");}else{ret=ret.concat([" ",_353.grid.sortInfo>0?"dojoxGridSortUp":"dojoxGridSortDown","\"><div class=\"dojoxGridArrowButtonChar\">",_353.grid.sortInfo>0?"&#9650;":"&#9660;","</div><div class=\"dojoxGridArrowButtonNode\" role=\"presentation\"></div>","<div class=\"dojoxGridColCaption\">"]);}ret=ret.concat([n,"</div></div>"]);return ret.join("");},resize:function(){this.adaptHeight();this.adaptWidth();},hasHScrollbar:function(_354){var _355=this._hasHScroll||false;if(this._hasHScroll==undefined||_354){if(this.noscroll){this._hasHScroll=false;}else{var _356=dojo.style(this.scrollboxNode,"overflow");if(_356=="hidden"){this._hasHScroll=false;}else{if(_356=="scroll"){this._hasHScroll=true;}else{this._hasHScroll=(this.scrollboxNode.offsetWidth-this.getScrollbarWidth()<this.contentNode.offsetWidth);}}}}if(_355!==this._hasHScroll){this.grid.update();}return this._hasHScroll;},hasVScrollbar:function(_357){var _358=this._hasVScroll||false;if(this._hasVScroll==undefined||_357){if(this.noscroll){this._hasVScroll=false;}else{var _359=dojo.style(this.scrollboxNode,"overflow");if(_359=="hidden"){this._hasVScroll=false;}else{if(_359=="scroll"){this._hasVScroll=true;}else{this._hasVScroll=(this.scrollboxNode.scrollHeight>this.scrollboxNode.clientHeight);}}}}if(_358!==this._hasVScroll){this.grid.update();}return this._hasVScroll;},convertColPctToFixed:function(){var _35a=false;this.grid.initialWidth="";var _35b=dojo.query("th",this.headerContentNode);var _35c=dojo.map(_35b,function(c,vIdx){var w=c.style.width;dojo.attr(c,"vIdx",vIdx);if(w&&w.slice(-1)=="%"){_35a=true;}else{if(w&&w.slice(-2)=="px"){return window.parseInt(w,10);}}return dojo.contentBox(c).w;});if(_35a){dojo.forEach(this.grid.layout.cells,function(cell,idx){if(cell.view==this){var _35d=cell.view.getHeaderCellNode(cell.index);if(_35d&&dojo.hasAttr(_35d,"vIdx")){var vIdx=window.parseInt(dojo.attr(_35d,"vIdx"));this.setColWidth(idx,_35c[vIdx]);dojo.removeAttr(_35d,"vIdx");}}},this);return true;}return false;},adaptHeight:function(_35e){if(!this.grid._autoHeight){var h=(this.domNode.style.height&&parseInt(this.domNode.style.height.replace(/px/,""),10))||this.domNode.clientHeight;var self=this;var _35f=function(){var v;for(var i in self.grid.views.views){v=self.grid.views.views[i];if(v!==self&&v.hasHScrollbar()){return true;}}return false;};if(_35e||(this.noscroll&&_35f())){h-=dojox.html.metrics.getScrollbar().h;}dojox.grid.util.setStyleHeightPx(this.scrollboxNode,h);}this.hasVScrollbar(true);},adaptWidth:function(){if(this.flexCells){this.contentWidth=this.getContentWidth();this.headerContentNode.firstChild.style.width=this.contentWidth;}var w=this.scrollboxNode.offsetWidth-this.getScrollbarWidth();if(!this._removingColumn){w=Math.max(w,this.getColumnsWidth())+"px";}else{w=Math.min(w,this.getColumnsWidth())+"px";this._removingColumn=false;}var cn=this.contentNode;cn.style.width=w;this.hasHScrollbar(true);},setSize:function(w,h){var ds=this.domNode.style;var hs=this.headerNode.style;if(w){ds.width=w;hs.width=w;}ds.height=(h>=0?h+"px":"");},renderRow:function(_360){var _361=this.createRowNode(_360);this.buildRow(_360,_361);this.grid.edit.restore(this,_360);return _361;},createRowNode:function(_362){var node=document.createElement("div");node.className=this.classTag+"Row";if(this instanceof dojox.grid._RowSelector){dojo.attr(node,"role","presentation");}else{dojo.attr(node,"role","row");if(this.grid.selectionMode!="none"){dojo.attr(node,"aria-selected","false");}}node[dojox.grid.util.gridViewTag]=this.id;node[dojox.grid.util.rowIndexTag]=_362;this.rowNodes[_362]=node;return node;},buildRow:function(_363,_364){this.buildRowContent(_363,_364);this.styleRow(_363,_364);},buildRowContent:function(_365,_366){_366.innerHTML=this.content.generateHtml(_365,_365);if(this.flexCells&&this.contentWidth){_366.firstChild.style.width=this.contentWidth;}dojox.grid.util.fire(this,"onAfterRow",[_365,this.structure.cells,_366]);},rowRemoved:function(_367){if(_367>=0){this._cleanupRowWidgets(this.getRowNode(_367));}this.grid.edit.save(this,_367);delete this.rowNodes[_367];},getRowNode:function(_368){return this.rowNodes[_368];},getCellNode:function(_369,_36a){var row=this.getRowNode(_369);if(row){return this.content.getCellNode(row,_36a);}},getHeaderCellNode:function(_36b){if(this.headerContentNode){return this.header.getCellNode(this.headerContentNode,_36b);}},styleRow:function(_36c,_36d){_36d._style=_32f(_36d);this.styleRowNode(_36c,_36d);},styleRowNode:function(_36e,_36f){if(_36f){this.doStyleRowNode(_36e,_36f);}},doStyleRowNode:function(_370,_371){this.grid.styleRowNode(_370,_371);},updateRow:function(_372){var _373=this.getRowNode(_372);if(_373){_373.style.height="";this.buildRow(_372,_373);}return _373;},updateRowStyles:function(_374){this.styleRowNode(_374,this.getRowNode(_374));},lastTop:0,firstScroll:0,doscroll:function(_375){var _376=dojo._isBodyLtr();if(this.firstScroll<2){if((!_376&&this.firstScroll==1)||(_376&&this.firstScroll===0)){var s=dojo.marginBox(this.headerNodeContainer);if(dojo.isIE){this.headerNodeContainer.style.width=s.w+this.getScrollbarWidth()+"px";}else{if(dojo.isMoz){this.headerNodeContainer.style.width=s.w-this.getScrollbarWidth()+"px";this.scrollboxNode.scrollLeft=_376?this.scrollboxNode.clientWidth-this.scrollboxNode.scrollWidth:this.scrollboxNode.scrollWidth-this.scrollboxNode.clientWidth;}}}this.firstScroll++;}this.headerNode.scrollLeft=this.scrollboxNode.scrollLeft;var top=this.scrollboxNode.scrollTop;if(top!==this.lastTop){this.grid.scrollTo(top);}},setScrollTop:function(_377){this.lastTop=_377;this.scrollboxNode.scrollTop=_377;return this.scrollboxNode.scrollTop;},doContentEvent:function(e){if(this.content.decorateEvent(e)){this.grid.onContentEvent(e);}},doHeaderEvent:function(e){if(this.header.decorateEvent(e)){this.grid.onHeaderEvent(e);}},dispatchContentEvent:function(e){return this.content.dispatchEvent(e);},dispatchHeaderEvent:function(e){return this.header.dispatchEvent(e);},setColWidth:function(_378,_379){this.grid.setCellWidth(_378,_379+"px");},update:function(){if(!this.domNode){return;}this.content.update();this.grid.update();var left=this.scrollboxNode.scrollLeft;this.scrollboxNode.scrollLeft=left;this.headerNode.scrollLeft=left;}});dojo.declare("dojox.grid._GridAvatar",dojo.dnd.Avatar,{construct:function(){var dd=dojo.doc;var a=dd.createElement("table");a.cellPadding=a.cellSpacing="0";a.className="dojoxGridDndAvatar";a.style.position="absolute";a.style.zIndex=1999;a.style.margin="0px";var b=dd.createElement("tbody");var tr=dd.createElement("tr");var td=dd.createElement("td");var img=dd.createElement("td");tr.className="dojoxGridDndAvatarItem";img.className="dojoxGridDndAvatarItemImage";img.style.width="16px";var _37a=this.manager.source,node;if(_37a.creator){node=_37a._normalizedCreator(_37a.getItem(this.manager.nodes[0].id).data,"avatar").node;}else{node=this.manager.nodes[0].cloneNode(true);var _37b,_37c;if(node.tagName.toLowerCase()=="tr"){_37b=dd.createElement("table");_37c=dd.createElement("tbody");_37c.appendChild(node);_37b.appendChild(_37c);node=_37b;}else{if(node.tagName.toLowerCase()=="th"){_37b=dd.createElement("table");_37c=dd.createElement("tbody");var r=dd.createElement("tr");_37b.cellPadding=_37b.cellSpacing="0";r.appendChild(node);_37c.appendChild(r);_37b.appendChild(_37c);node=_37b;}}}node.id="";td.appendChild(node);tr.appendChild(img);tr.appendChild(td);dojo.style(tr,"opacity",0.9);b.appendChild(tr);a.appendChild(b);this.node=a;var m=dojo.dnd.manager();this.oldOffsetY=m.OFFSET_Y;m.OFFSET_Y=1;},destroy:function(){dojo.dnd.manager().OFFSET_Y=this.oldOffsetY;this.inherited(arguments);}});var _37d=dojo.dnd.manager().makeAvatar;dojo.dnd.manager().makeAvatar=function(){var src=this.source;if(src.viewIndex!==undefined&&!dojo.hasClass(dojo.body(),"dijit_a11y")){return new dojox.grid._GridAvatar(this);}return _37d.call(dojo.dnd.manager());};})();}if(!dojo._hasResource["dojox.grid._RowSelector"]){dojo._hasResource["dojox.grid._RowSelector"]=true;dojo.provide("dojox.grid._RowSelector");dojo.declare("dojox.grid._RowSelector",dojox.grid._View,{defaultWidth:"2em",noscroll:true,padBorderWidth:2,buildRendering:function(){this.inherited("buildRendering",arguments);this.scrollboxNode.style.overflow="hidden";this.headerNode.style.visibility="hidden";},getWidth:function(){return this.viewWidth||this.defaultWidth;},buildRowContent:function(_37e,_37f){var w=this.contentWidth||0;_37f.innerHTML="<table class=\"dojoxGridRowbarTable\" style=\"width:"+w+"px;height:1px;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"><tr><td class=\"dojoxGridRowbarInner\">&nbsp;</td></tr></table>";},renderHeader:function(){},updateRow:function(){},resize:function(){this.adaptHeight();},adaptWidth:function(){if(!("contentWidth" in this)&&this.contentNode){this.contentWidth=this.contentNode.offsetWidth-this.padBorderWidth;}},doStyleRowNode:function(_380,_381){var n=["dojoxGridRowbar dojoxGridNonNormalizedCell"];if(this.grid.rows.isOver(_380)){n.push("dojoxGridRowbarOver");}if(this.grid.selection.isSelected(_380)){n.push("dojoxGridRowbarSelected");}_381.className=n.join(" ");},domouseover:function(e){this.grid.onMouseOverRow(e);},domouseout:function(e){if(!this.isIntraRowEvent(e)){this.grid.onMouseOutRow(e);}}});}if(!dojo._hasResource["dojox.grid._Layout"]){dojo._hasResource["dojox.grid._Layout"]=true;dojo.provide("dojox.grid._Layout");dojo.declare("dojox.grid._Layout",null,{constructor:function(_382){this.grid=_382;},cells:[],structure:null,defaultWidth:"6em",moveColumn:function(_383,_384,_385,_386,_387){var _388=this.structure[_383].cells[0];var _389=this.structure[_384].cells[0];var cell=null;var _38a=0;var _38b=0;for(var i=0,c;c=_388[i];i++){if(c.index==_385){_38a=i;break;}}cell=_388.splice(_38a,1)[0];cell.view=this.grid.views.views[_384];for(i=0,c=null;c=_389[i];i++){if(c.index==_386){_38b=i;break;}}if(!_387){_38b+=1;}_389.splice(_38b,0,cell);var _38c=this.grid.getCell(this.grid.getSortIndex());if(_38c){_38c._currentlySorted=this.grid.getSortAsc();}this.cells=[];_385=0;var v;for(i=0;v=this.structure[i];i++){for(var j=0,cs;cs=v.cells[j];j++){for(var k=0;c=cs[k];k++){c.index=_385;this.cells.push(c);if("_currentlySorted" in c){var si=_385+1;si*=c._currentlySorted?1:-1;this.grid.sortInfo=si;delete c._currentlySorted;}_385++;}}}this.grid.setupHeaderMenu();},setColumnVisibility:function(_38d,_38e){var cell=this.cells[_38d];if(cell.hidden==_38e){cell.hidden=!_38e;var v=cell.view,w=v.viewWidth;if(w&&w!="auto"){v._togglingColumn=dojo.marginBox(cell.getHeaderNode()).w||0;}v.update();return true;}else{return false;}},addCellDef:function(_38f,_390,_391){var self=this;var _392=function(_393){var w=0;if(_393.colSpan>1){w=0;}else{w=_393.width||self._defaultCellProps.width||self.defaultWidth;if(!isNaN(w)){w=w+"em";}}return w;};var _394={grid:this.grid,subrow:_38f,layoutIndex:_390,index:this.cells.length};if(_391&&_391 instanceof dojox.grid.cells._Base){var _395=dojo.clone(_391);_394.unitWidth=_392(_395._props);_395=dojo.mixin(_395,this._defaultCellProps,_391._props,_394);return _395;}var _396=_391.type||this._defaultCellProps.type||dojox.grid.cells.Cell;_394.unitWidth=_392(_391);return new _396(dojo.mixin({},this._defaultCellProps,_391,_394));},addRowDef:function(_397,_398){var _399=[];var _39a=0,_39b=0,_39c=true;for(var i=0,def,cell;(def=_398[i]);i++){cell=this.addCellDef(_397,i,def);_399.push(cell);this.cells.push(cell);if(_39c&&cell.relWidth){_39a+=cell.relWidth;}else{if(cell.width){var w=cell.width;if(typeof w=="string"&&w.slice(-1)=="%"){_39b+=window.parseInt(w,10);}else{if(w=="auto"){_39c=false;}}}}}if(_39a&&_39c){dojo.forEach(_399,function(cell){if(cell.relWidth){cell.width=cell.unitWidth=((cell.relWidth/_39a)*(100-_39b))+"%";}});}return _399;},addRowsDef:function(_39d){var _39e=[];if(dojo.isArray(_39d)){if(dojo.isArray(_39d[0])){for(var i=0,row;_39d&&(row=_39d[i]);i++){_39e.push(this.addRowDef(i,row));}}else{_39e.push(this.addRowDef(0,_39d));}}return _39e;},addViewDef:function(_39f){this._defaultCellProps=_39f.defaultCell||{};if(_39f.width&&_39f.width=="auto"){delete _39f.width;}return dojo.mixin({},_39f,{cells:this.addRowsDef(_39f.rows||_39f.cells)});},setStructure:function(_3a0){this.fieldIndex=0;this.cells=[];var s=this.structure=[];if(this.grid.rowSelector){var sel={type:dojox._scopeName+".grid._RowSelector"};if(dojo.isString(this.grid.rowSelector)){var _3a1=this.grid.rowSelector;if(_3a1=="false"){sel=null;}else{if(_3a1!="true"){sel["width"]=_3a1;}}}else{if(!this.grid.rowSelector){sel=null;}}if(sel){s.push(this.addViewDef(sel));}}var _3a2=function(def){return ("name" in def||"field" in def||"get" in def);};var _3a3=function(def){if(dojo.isArray(def)){if(dojo.isArray(def[0])||_3a2(def[0])){return true;}}return false;};var _3a4=function(def){return (def!==null&&dojo.isObject(def)&&("cells" in def||"rows" in def||("type" in def&&!_3a2(def))));};if(dojo.isArray(_3a0)){var _3a5=false;for(var i=0,st;(st=_3a0[i]);i++){if(_3a4(st)){_3a5=true;break;}}if(!_3a5){s.push(this.addViewDef({cells:_3a0}));}else{for(i=0;(st=_3a0[i]);i++){if(_3a3(st)){s.push(this.addViewDef({cells:st}));}else{if(_3a4(st)){s.push(this.addViewDef(st));}}}}}else{if(_3a4(_3a0)){s.push(this.addViewDef(_3a0));}}this.cellCount=this.cells.length;this.grid.setupHeaderMenu();}});}if(!dojo._hasResource["dojox.grid._ViewManager"]){dojo._hasResource["dojox.grid._ViewManager"]=true;dojo.provide("dojox.grid._ViewManager");dojo.declare("dojox.grid._ViewManager",null,{constructor:function(_3a6){this.grid=_3a6;},defaultWidth:200,views:[],resize:function(){this.onEach("resize");},render:function(){this.onEach("render");},addView:function(_3a7){_3a7.idx=this.views.length;this.views.push(_3a7);},destroyViews:function(){for(var i=0,v;v=this.views[i];i++){v.destroy();}this.views=[];},getContentNodes:function(){var _3a8=[];for(var i=0,v;v=this.views[i];i++){_3a8.push(v.contentNode);}return _3a8;},forEach:function(_3a9){for(var i=0,v;v=this.views[i];i++){_3a9(v,i);}},onEach:function(_3aa,_3ab){_3ab=_3ab||[];for(var i=0,v;v=this.views[i];i++){if(_3aa in v){v[_3aa].apply(v,_3ab);}}},normalizeHeaderNodeHeight:function(){var _3ac=[];for(var i=0,v;(v=this.views[i]);i++){if(v.headerContentNode.firstChild){_3ac.push(v.headerContentNode);}}this.normalizeRowNodeHeights(_3ac);},normalizeRowNodeHeights:function(_3ad){var h=0;var _3ae=[];if(this.grid.rowHeight){h=this.grid.rowHeight;}else{if(_3ad.length<=1){return;}for(var i=0,n;(n=_3ad[i]);i++){if(!dojo.hasClass(n,"dojoxGridNonNormalizedCell")){_3ae[i]=n.firstChild.offsetHeight;h=Math.max(h,_3ae[i]);}}h=(h>=0?h:0);if(dojo.isMoz&&h){h++;}}for(i=0;(n=_3ad[i]);i++){if(_3ae[i]!=h){n.firstChild.style.height=h+"px";}}},resetHeaderNodeHeight:function(){for(var i=0,v,n;(v=this.views[i]);i++){n=v.headerContentNode.firstChild;if(n){n.style.height="";}}},renormalizeRow:function(_3af){var _3b0=[];for(var i=0,v,n;(v=this.views[i])&&(n=v.getRowNode(_3af));i++){n.firstChild.style.height="";_3b0.push(n);}this.normalizeRowNodeHeights(_3b0);},getViewWidth:function(_3b1){return this.views[_3b1].getWidth()||this.defaultWidth;},measureHeader:function(){this.resetHeaderNodeHeight();this.forEach(function(_3b2){_3b2.headerContentNode.style.height="";});var h=0;this.forEach(function(_3b3){h=Math.max(_3b3.headerNode.offsetHeight,h);});return h;},measureContent:function(){var h=0;this.forEach(function(_3b4){h=Math.max(_3b4.domNode.offsetHeight,h);});return h;},findClient:function(_3b5){var c=this.grid.elasticView||-1;if(c<0){for(var i=1,v;(v=this.views[i]);i++){if(v.viewWidth){for(i=1;(v=this.views[i]);i++){if(!v.viewWidth){c=i;break;}}break;}}}if(c<0){c=Math.floor(this.views.length/2);}return c;},arrange:function(l,w){var i,v,vw,len=this.views.length;var c=(w<=0?len:this.findClient());var _3b6=function(v,l){var ds=v.domNode.style;var hs=v.headerNode.style;if(!dojo._isBodyLtr()){ds.right=l+"px";if(dojo.isMoz){hs.right=l+v.getScrollbarWidth()+"px";hs.width=parseInt(hs.width,10)-v.getScrollbarWidth()+"px";}else{hs.right=l+"px";}}else{ds.left=l+"px";hs.left=l+"px";}ds.top=0+"px";hs.top=0;};for(i=0;(v=this.views[i])&&(i<c);i++){vw=this.getViewWidth(i);v.setSize(vw,0);_3b6(v,l);if(v.headerContentNode&&v.headerContentNode.firstChild){vw=v.getColumnsWidth()+v.getScrollbarWidth();}else{vw=v.domNode.offsetWidth;}l+=vw;}i++;var r=w;for(var j=len-1;(v=this.views[j])&&(i<=j);j--){vw=this.getViewWidth(j);v.setSize(vw,0);vw=v.domNode.offsetWidth;r-=vw;_3b6(v,r);}if(c<len){v=this.views[c];vw=Math.max(1,r-l);v.setSize(vw+"px",0);_3b6(v,l);}return l;},renderRow:function(_3b7,_3b8,_3b9){var _3ba=[];for(var i=0,v,n,_3bb;(v=this.views[i])&&(n=_3b8[i]);i++){_3bb=v.renderRow(_3b7);n.appendChild(_3bb);_3ba.push(_3bb);}if(!_3b9){this.normalizeRowNodeHeights(_3ba);}},rowRemoved:function(_3bc){this.onEach("rowRemoved",[_3bc]);},updateRow:function(_3bd,_3be){for(var i=0,v;v=this.views[i];i++){v.updateRow(_3bd);}if(!_3be){this.renormalizeRow(_3bd);}},updateRowStyles:function(_3bf){this.onEach("updateRowStyles",[_3bf]);},setScrollTop:function(_3c0){var top=_3c0;for(var i=0,v;v=this.views[i];i++){top=v.setScrollTop(_3c0);if(dojo.isIE&&v.headerNode&&v.scrollboxNode){v.headerNode.scrollLeft=v.scrollboxNode.scrollLeft;}}return top;},getFirstScrollingView:function(){for(var i=0,v;(v=this.views[i]);i++){if(v.hasHScrollbar()||v.hasVScrollbar()){return v;}}return null;}});}if(!dojo._hasResource["dojox.grid._RowManager"]){dojo._hasResource["dojox.grid._RowManager"]=true;dojo.provide("dojox.grid._RowManager");(function(){var _3c1=function(_3c2,_3c3){if(_3c2.style.cssText==undefined){_3c2.setAttribute("style",_3c3);}else{_3c2.style.cssText=_3c3;}};dojo.declare("dojox.grid._RowManager",null,{constructor:function(_3c4){this.grid=_3c4;},linesToEms:2,overRow:-2,prepareStylingRow:function(_3c5,_3c6){return {index:_3c5,node:_3c6,odd:Boolean(_3c5&1),selected:!!this.grid.selection.isSelected(_3c5),over:this.isOver(_3c5),customStyles:"",customClasses:"dojoxGridRow"};},styleRowNode:function(_3c7,_3c8){var row=this.prepareStylingRow(_3c7,_3c8);this.grid.onStyleRow(row);this.applyStyles(row);},applyStyles:function(_3c9){var i=_3c9;i.node.className=i.customClasses;var h=i.node.style.height;_3c1(i.node,i.customStyles+";"+(i.node._style||""));i.node.style.height=h;},updateStyles:function(_3ca){this.grid.updateRowStyles(_3ca);},setOverRow:function(_3cb){var last=this.overRow;this.overRow=_3cb;if((last!=this.overRow)&&(dojo.isString(last)||last>=0)){this.updateStyles(last);}this.updateStyles(this.overRow);},isOver:function(_3cc){return (this.overRow==_3cc&&!dojo.hasClass(this.grid.domNode,"dojoxGridColumnResizing"));}});})();}if(!dojo._hasResource["dojox.grid._FocusManager"]){dojo._hasResource["dojox.grid._FocusManager"]=true;dojo.provide("dojox.grid._FocusManager");dojo.declare("dojox.grid._FocusManager",null,{constructor:function(_3cd){this.grid=_3cd;this.cell=null;this.rowIndex=-1;this._connects=[];this.headerMenu=this.grid.headerMenu;this._connects.push(dojo.connect(this.grid.domNode,"onfocus",this,"doFocus"));this._connects.push(dojo.connect(this.grid.domNode,"onblur",this,"doBlur"));this._connects.push(dojo.connect(this.grid.domNode,"oncontextmenu",this,"doContextMenu"));this._connects.push(dojo.connect(this.grid.lastFocusNode,"onfocus",this,"doLastNodeFocus"));this._connects.push(dojo.connect(this.grid.lastFocusNode,"onblur",this,"doLastNodeBlur"));this._connects.push(dojo.connect(this.grid,"_onFetchComplete",this,"_delayedCellFocus"));this._connects.push(dojo.connect(this.grid,"postrender",this,"_delayedHeaderFocus"));},destroy:function(){dojo.forEach(this._connects,dojo.disconnect);delete this.grid;delete this.cell;},_colHeadNode:null,_colHeadFocusIdx:null,_contextMenuBindNode:null,tabbingOut:false,focusClass:"dojoxGridCellFocus",focusView:null,initFocusView:function(){this.focusView=this.grid.views.getFirstScrollingView()||this.focusView;this._initColumnHeaders();},isFocusCell:function(_3ce,_3cf){return (this.cell==_3ce)&&(this.rowIndex==_3cf);},isLastFocusCell:function(){if(this.cell){return (this.rowIndex==this.grid.rowCount-1)&&(this.cell.index==this.grid.layout.cellCount-1);}return false;},isFirstFocusCell:function(){if(this.cell){return (this.rowIndex===0)&&(this.cell.index===0);}return false;},isNoFocusCell:function(){return (this.rowIndex<0)||!this.cell;},isNavHeader:function(){return (!!this._colHeadNode);},getHeaderIndex:function(){if(this._colHeadNode){return dojo.indexOf(this._findHeaderCells(),this._colHeadNode);}else{return -1;}},_focusifyCellNode:function(_3d0){var n=this.cell&&this.cell.getNode(this.rowIndex);if(n){dojo.toggleClass(n,this.focusClass,_3d0);if(_3d0){var sl=this.scrollIntoView();try{if(!this.grid.edit.isEditing()){dojox.grid.util.fire(n,"focus");if(sl){this.cell.view.scrollboxNode.scrollLeft=sl;}}}catch(e){}}}},_delayedCellFocus:function(){if(this.isNavHeader()||!this.grid._focused){return;}var n=this.cell&&this.cell.getNode(this.rowIndex);if(n){try{if(!this.grid.edit.isEditing()){dojo.toggleClass(n,this.focusClass,true);this.blurHeader();dojox.grid.util.fire(n,"focus");}}catch(e){}}},_delayedHeaderFocus:function(){if(this.isNavHeader()){this.focusHeader();this.grid.domNode.focus();}},_initColumnHeaders:function(){var _3d1=this._findHeaderCells();for(var i=0;i<_3d1.length;i++){this._connects.push(dojo.connect(_3d1[i],"onfocus",this,"doColHeaderFocus"));this._connects.push(dojo.connect(_3d1[i],"onblur",this,"doColHeaderBlur"));}},_findHeaderCells:function(){var _3d2=dojo.query("th",this.grid.viewsHeaderNode);var _3d3=[];for(var i=0;i<_3d2.length;i++){var _3d4=_3d2[i];var _3d5=dojo.hasAttr(_3d4,"tabIndex");var _3d6=dojo.attr(_3d4,"tabIndex");if(_3d5&&_3d6<0){_3d3.push(_3d4);}}return _3d3;},_setActiveColHeader:function(_3d7,_3d8,_3d9){dojo.attr(this.grid.domNode,"aria-activedescendant",_3d7.id);if(_3d9!=null&&_3d9>=0&&_3d9!=_3d8){dojo.toggleClass(this._findHeaderCells()[_3d9],this.focusClass,false);}dojo.toggleClass(_3d7,this.focusClass,true);this._colHeadNode=_3d7;this._colHeadFocusIdx=_3d8;this._scrollHeader(this._colHeadFocusIdx);},scrollIntoView:function(){var info=(this.cell?this._scrollInfo(this.cell):null);if(!info||!info.s){return null;}var rt=this.grid.scroller.findScrollTop(this.rowIndex);if(info.n&&info.sr){if(info.n.offsetLeft+info.n.offsetWidth>info.sr.l+info.sr.w){info.s.scrollLeft=info.n.offsetLeft+info.n.offsetWidth-info.sr.w;}else{if(info.n.offsetLeft<info.sr.l){info.s.scrollLeft=info.n.offsetLeft;}}}if(info.r&&info.sr){if(rt+info.r.offsetHeight>info.sr.t+info.sr.h){this.grid.setScrollTop(rt+info.r.offsetHeight-info.sr.h);}else{if(rt<info.sr.t){this.grid.setScrollTop(rt);}}}return info.s.scrollLeft;},_scrollInfo:function(cell,_3da){if(cell){var cl=cell,sbn=cl.view.scrollboxNode,sbnr={w:sbn.clientWidth,l:sbn.scrollLeft,t:sbn.scrollTop,h:sbn.clientHeight},rn=cl.view.getRowNode(this.rowIndex);return {c:cl,s:sbn,sr:sbnr,n:(_3da?_3da:cell.getNode(this.rowIndex)),r:rn};}return null;},_scrollHeader:function(_3db){var info=null;if(this._colHeadNode){var cell=this.grid.getCell(_3db);info=this._scrollInfo(cell,cell.getNode(0));}if(info&&info.s&&info.sr&&info.n){var _3dc=info.sr.l+info.sr.w;if(info.n.offsetLeft+info.n.offsetWidth>_3dc){info.s.scrollLeft=info.n.offsetLeft+info.n.offsetWidth-info.sr.w;}else{if(info.n.offsetLeft<info.sr.l){info.s.scrollLeft=info.n.offsetLeft;}else{if(dojo.isIE<=7&&cell&&cell.view.headerNode){cell.view.headerNode.scrollLeft=info.s.scrollLeft;}}}}},_isHeaderHidden:function(){var _3dd=this.focusView;if(!_3dd){for(var i=0,_3de;(_3de=this.grid.views.views[i]);i++){if(_3de.headerNode){_3dd=_3de;break;}}}return (_3dd&&dojo.getComputedStyle(_3dd.headerNode).display=="none");},colSizeAdjust:function(e,_3df,_3e0){var _3e1=this._findHeaderCells();var view=this.focusView;if(!view){for(var i=0,_3e2;(_3e2=this.grid.views.views[i]);i++){if(_3e2.header.tableMap.map){view=_3e2;break;}}}var _3e3=_3e1[_3df];if(!view||(_3df==_3e1.length-1&&_3df===0)){return;}view.content.baseDecorateEvent(e);e.cellNode=_3e3;e.cellIndex=view.content.getCellNodeIndex(e.cellNode);e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);if(view.header.canResize(e)){var _3e4={l:_3e0};var drag=view.header.colResizeSetup(e,false);view.header.doResizeColumn(drag,null,_3e4);view.update();}},styleRow:function(_3e5){return;},setFocusIndex:function(_3e6,_3e7){this.setFocusCell(this.grid.getCell(_3e7),_3e6);},setFocusCell:function(_3e8,_3e9){if(_3e8&&!this.isFocusCell(_3e8,_3e9)){this.tabbingOut=false;if(this._colHeadNode){this.blurHeader();}this._colHeadNode=this._colHeadFocusIdx=null;this.focusGridView();this._focusifyCellNode(false);this.cell=_3e8;this.rowIndex=_3e9;this._focusifyCellNode(true);}if(dojo.isOpera){setTimeout(dojo.hitch(this.grid,"onCellFocus",this.cell,this.rowIndex),1);}else{this.grid.onCellFocus(this.cell,this.rowIndex);}},next:function(){if(this.cell){var row=this.rowIndex,col=this.cell.index+1,cc=this.grid.layout.cellCount-1,rc=this.grid.rowCount-1;if(col>cc){col=0;row++;}if(row>rc){col=cc;row=rc;}if(this.grid.edit.isEditing()){var _3ea=this.grid.getCell(col);if(!this.isLastFocusCell()&&!_3ea.editable){this.cell=_3ea;this.rowIndex=row;this.next();return;}}this.setFocusIndex(row,col);}},previous:function(){if(this.cell){var row=(this.rowIndex||0),col=(this.cell.index||0)-1;if(col<0){col=this.grid.layout.cellCount-1;row--;}if(row<0){row=0;col=0;}if(this.grid.edit.isEditing()){var _3eb=this.grid.getCell(col);if(!this.isFirstFocusCell()&&!_3eb.editable){this.cell=_3eb;this.rowIndex=row;this.previous();return;}}this.setFocusIndex(row,col);}},move:function(_3ec,_3ed){var _3ee=_3ed<0?-1:1;if(this.isNavHeader()){var _3ef=this._findHeaderCells();var _3f0=currentIdx=dojo.indexOf(_3ef,this._colHeadNode);currentIdx+=_3ed;while(currentIdx>=0&&currentIdx<_3ef.length&&_3ef[currentIdx].style.display=="none"){currentIdx+=_3ee;}if((currentIdx>=0)&&(currentIdx<_3ef.length)){this._setActiveColHeader(_3ef[currentIdx],currentIdx,_3f0);}}else{if(this.cell){var sc=this.grid.scroller,r=this.rowIndex,rc=this.grid.rowCount-1,row=Math.min(rc,Math.max(0,r+_3ec));if(_3ec){if(_3ec>0){if(row>sc.getLastPageRow(sc.page)){this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(row)-sc.findScrollTop(r));}}else{if(_3ec<0){if(row<=sc.getPageRow(sc.page)){this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(row));}}}}var cc=this.grid.layout.cellCount-1,i=this.cell.index,col=Math.min(cc,Math.max(0,i+_3ed));var cell=this.grid.getCell(col);while(col>=0&&col<cc&&cell&&cell.hidden===true){col+=_3ee;cell=this.grid.getCell(col);}if(!cell||cell.hidden===true){col=i;}this.setFocusIndex(row,col);if(_3ec){this.grid.updateRow(r);}}}},previousKey:function(e){if(this.grid.edit.isEditing()){dojo.stopEvent(e);this.previous();}else{if(!this.isNavHeader()&&!this._isHeaderHidden()){this.grid.domNode.focus();dojo.stopEvent(e);}else{this.tabOut(this.grid.domNode);if(this._colHeadFocusIdx!=null){dojo.toggleClass(this._findHeaderCells()[this._colHeadFocusIdx],this.focusClass,false);this._colHeadFocusIdx=null;}this._focusifyCellNode(false);}}},nextKey:function(e){var _3f1=(this.grid.rowCount===0);if(e.target===this.grid.domNode&&this._colHeadFocusIdx==null){this.focusHeader();dojo.stopEvent(e);}else{if(this.isNavHeader()){this.blurHeader();if(!this.findAndFocusGridCell()){this.tabOut(this.grid.lastFocusNode);}this._colHeadNode=this._colHeadFocusIdx=null;}else{if(this.grid.edit.isEditing()){dojo.stopEvent(e);this.next();}else{this.tabOut(this.grid.lastFocusNode);}}}},tabOut:function(_3f2){this.tabbingOut=true;_3f2.focus();},focusGridView:function(){dojox.grid.util.fire(this.focusView,"focus");},focusGrid:function(_3f3){this.focusGridView();this._focusifyCellNode(true);},findAndFocusGridCell:function(){var _3f4=true;var _3f5=(this.grid.rowCount===0);if(this.isNoFocusCell()&&!_3f5){var _3f6=0;var cell=this.grid.getCell(_3f6);if(cell.hidden){_3f6=this.isNavHeader()?this._colHeadFocusIdx:0;}this.setFocusIndex(0,_3f6);}else{if(this.cell&&!_3f5){if(this.focusView&&!this.focusView.rowNodes[this.rowIndex]){this.grid.scrollToRow(this.rowIndex);}this.focusGrid();}else{_3f4=false;}}this._colHeadNode=this._colHeadFocusIdx=null;return _3f4;},focusHeader:function(){var _3f7=this._findHeaderCells();var _3f8=this._colHeadFocusIdx;if(this._isHeaderHidden()){this.findAndFocusGridCell();}else{if(!this._colHeadFocusIdx){if(this.isNoFocusCell()){this._colHeadFocusIdx=0;}else{this._colHeadFocusIdx=this.cell.index;}}}this._colHeadNode=_3f7[this._colHeadFocusIdx];while(this._colHeadNode&&this._colHeadFocusIdx>=0&&this._colHeadFocusIdx<_3f7.length&&this._colHeadNode.style.display=="none"){this._colHeadFocusIdx++;this._colHeadNode=_3f7[this._colHeadFocusIdx];}if(this._colHeadNode&&this._colHeadNode.style.display!="none"){if(this.headerMenu&&this._contextMenuBindNode!=this.grid.domNode){this.headerMenu.unBindDomNode(this.grid.viewsHeaderNode);this.headerMenu.bindDomNode(this.grid.domNode);this._contextMenuBindNode=this.grid.domNode;}this._setActiveColHeader(this._colHeadNode,this._colHeadFocusIdx,_3f8);this._scrollHeader(this._colHeadFocusIdx);this._focusifyCellNode(false);}else{this.findAndFocusGridCell();}},blurHeader:function(){dojo.removeClass(this._colHeadNode,this.focusClass);dojo.removeAttr(this.grid.domNode,"aria-activedescendant");if(this.headerMenu&&this._contextMenuBindNode==this.grid.domNode){var _3f9=this.grid.viewsHeaderNode;this.headerMenu.unBindDomNode(this.grid.domNode);this.headerMenu.bindDomNode(_3f9);this._contextMenuBindNode=_3f9;}},doFocus:function(e){if(e&&e.target!=e.currentTarget){dojo.stopEvent(e);return;}if(!this.tabbingOut){this.focusHeader();}this.tabbingOut=false;dojo.stopEvent(e);},doBlur:function(e){dojo.stopEvent(e);},doContextMenu:function(e){if(!this.headerMenu){dojo.stopEvent(e);}},doLastNodeFocus:function(e){if(this.tabbingOut){this._focusifyCellNode(false);}else{if(this.grid.rowCount>0){if(this.isNoFocusCell()){this.setFocusIndex(0,0);}this._focusifyCellNode(true);}else{this.focusHeader();}}this.tabbingOut=false;dojo.stopEvent(e);},doLastNodeBlur:function(e){dojo.stopEvent(e);},doColHeaderFocus:function(e){this._setActiveColHeader(e.target,dojo.attr(e.target,"idx"),this._colHeadFocusIdx);this._scrollHeader(this.getHeaderIndex());dojo.stopEvent(e);},doColHeaderBlur:function(e){dojo.toggleClass(e.target,this.focusClass,false);}});}if(!dojo._hasResource["dojox.grid._EditManager"]){dojo._hasResource["dojox.grid._EditManager"]=true;dojo.provide("dojox.grid._EditManager");dojo.declare("dojox.grid._EditManager",null,{constructor:function(_3fa){this.grid=_3fa;this.connections=[];if(dojo.isIE){this.connections.push(dojo.connect(document.body,"onfocus",dojo.hitch(this,"_boomerangFocus")));}},info:{},destroy:function(){dojo.forEach(this.connections,dojo.disconnect);},cellFocus:function(_3fb,_3fc){if(this.grid.singleClickEdit||this.isEditRow(_3fc)){this.setEditCell(_3fb,_3fc);}else{this.apply();}if(this.isEditing()||(_3fb&&_3fb.editable&&_3fb.alwaysEditing)){this._focusEditor(_3fb,_3fc);}},rowClick:function(e){if(this.isEditing()&&!this.isEditRow(e.rowIndex)){this.apply();}},styleRow:function(_3fd){if(_3fd.index==this.info.rowIndex){_3fd.customClasses+=" dojoxGridRowEditing";}},dispatchEvent:function(e){var c=e.cell,ed=(c&&c["editable"])?c:0;return ed&&ed.dispatchEvent(e.dispatch,e);},isEditing:function(){return this.info.rowIndex!==undefined;},isEditCell:function(_3fe,_3ff){return (this.info.rowIndex===_3fe)&&(this.info.cell.index==_3ff);},isEditRow:function(_400){return this.info.rowIndex===_400;},setEditCell:function(_401,_402){if(!this.isEditCell(_402,_401.index)&&this.grid.canEdit&&this.grid.canEdit(_401,_402)){this.start(_401,_402,this.isEditRow(_402)||_401.editable);}},_focusEditor:function(_403,_404){dojox.grid.util.fire(_403,"focus",[_404]);},focusEditor:function(){if(this.isEditing()){this._focusEditor(this.info.cell,this.info.rowIndex);}},_boomerangWindow:500,_shouldCatchBoomerang:function(){return this._catchBoomerang>new Date().getTime();},_boomerangFocus:function(){if(this._shouldCatchBoomerang()){this.grid.focus.focusGrid();this.focusEditor();this._catchBoomerang=0;}},_doCatchBoomerang:function(){if(dojo.isIE){this._catchBoomerang=new Date().getTime()+this._boomerangWindow;}},start:function(_405,_406,_407){this.grid.beginUpdate();this.editorApply();if(this.isEditing()&&!this.isEditRow(_406)){this.applyRowEdit();this.grid.updateRow(_406);}if(_407){this.info={cell:_405,rowIndex:_406};this.grid.doStartEdit(_405,_406);this.grid.updateRow(_406);}else{this.info={};}this.grid.endUpdate();this.grid.focus.focusGrid();this._focusEditor(_405,_406);this._doCatchBoomerang();},_editorDo:function(_408){var c=this.info.cell;if(c&&c.editable){c[_408](this.info.rowIndex);}},editorApply:function(){this._editorDo("apply");},editorCancel:function(){this._editorDo("cancel");},applyCellEdit:function(_409,_40a,_40b){if(this.grid.canEdit(_40a,_40b)){this.grid.doApplyCellEdit(_409,_40b,_40a.field);}},applyRowEdit:function(){this.grid.doApplyEdit(this.info.rowIndex,this.info.cell.field);},apply:function(){if(this.isEditing()){this.grid.beginUpdate();this.editorApply();this.applyRowEdit();this.info={};this.grid.endUpdate();this.grid.focus.focusGrid();this._doCatchBoomerang();}},cancel:function(){if(this.isEditing()){this.grid.beginUpdate();this.editorCancel();this.info={};this.grid.endUpdate();this.grid.focus.focusGrid();this._doCatchBoomerang();}},save:function(_40c,_40d){var c=this.info.cell;if(this.isEditRow(_40c)&&(!_40d||c.view==_40d)&&c.editable){c.save(c,this.info.rowIndex);}},restore:function(_40e,_40f){var c=this.info.cell;if(this.isEditRow(_40f)&&c.view==_40e&&c.editable){c.restore(c,this.info.rowIndex);}}});}if(!dojo._hasResource["dojox.grid.Selection"]){dojo._hasResource["dojox.grid.Selection"]=true;dojo.provide("dojox.grid.Selection");dojo.declare("dojox.grid.Selection",null,{constructor:function(_410){this.grid=_410;this.selected=[];this.setMode(_410.selectionMode);},mode:"extended",selected:null,updating:0,selectedIndex:-1,setMode:function(mode){if(this.selected.length){this.deselectAll();}if(mode!="extended"&&mode!="multiple"&&mode!="single"&&mode!="none"){this.mode="extended";}else{this.mode=mode;}},onCanSelect:function(_411){return this.grid.onCanSelect(_411);},onCanDeselect:function(_412){return this.grid.onCanDeselect(_412);},onSelected:function(_413){},onDeselected:function(_414){},onChanging:function(){},onChanged:function(){},isSelected:function(_415){if(this.mode=="none"){return false;}return this.selected[_415];},getFirstSelected:function(){if(!this.selected.length||this.mode=="none"){return -1;}for(var i=0,l=this.selected.length;i<l;i++){if(this.selected[i]){return i;}}return -1;},getNextSelected:function(_416){if(this.mode=="none"){return -1;}for(var i=_416+1,l=this.selected.length;i<l;i++){if(this.selected[i]){return i;}}return -1;},getSelected:function(){var _417=[];for(var i=0,l=this.selected.length;i<l;i++){if(this.selected[i]){_417.push(i);}}return _417;},getSelectedCount:function(){var c=0;for(var i=0;i<this.selected.length;i++){if(this.selected[i]){c++;}}return c;},_beginUpdate:function(){if(this.updating===0){this.onChanging();}this.updating++;},_endUpdate:function(){this.updating--;if(this.updating===0){this.onChanged();}},select:function(_418){if(this.mode=="none"){return;}if(this.mode!="multiple"){this.deselectAll(_418);this.addToSelection(_418);}else{this.toggleSelect(_418);}},addToSelection:function(_419){if(this.mode=="none"){return;}if(dojo.isArray(_419)){dojo.forEach(_419,this.addToSelection,this);return;}_419=Number(_419);if(this.selected[_419]){this.selectedIndex=_419;}else{if(this.onCanSelect(_419)!==false){this.selectedIndex=_419;var _41a=this.grid.getRowNode(_419);if(_41a){dojo.attr(_41a,"aria-selected","true");}this._beginUpdate();this.selected[_419]=true;this.onSelected(_419);this._endUpdate();}}},deselect:function(_41b){if(this.mode=="none"){return;}if(dojo.isArray(_41b)){dojo.forEach(_41b,this.deselect,this);return;}_41b=Number(_41b);if(this.selectedIndex==_41b){this.selectedIndex=-1;}if(this.selected[_41b]){if(this.onCanDeselect(_41b)===false){return;}var _41c=this.grid.getRowNode(_41b);if(_41c){dojo.attr(_41c,"aria-selected","false");}this._beginUpdate();delete this.selected[_41b];this.onDeselected(_41b);this._endUpdate();}},setSelected:function(_41d,_41e){this[(_41e?"addToSelection":"deselect")](_41d);},toggleSelect:function(_41f){if(dojo.isArray(_41f)){dojo.forEach(_41f,this.toggleSelect,this);return;}this.setSelected(_41f,!this.selected[_41f]);},_range:function(_420,inTo,func){var s=(_420>=0?_420:inTo),e=inTo;if(s>e){e=s;s=inTo;}for(var i=s;i<=e;i++){func(i);}},selectRange:function(_421,inTo){this._range(_421,inTo,dojo.hitch(this,"addToSelection"));},deselectRange:function(_422,inTo){this._range(_422,inTo,dojo.hitch(this,"deselect"));},insert:function(_423){this.selected.splice(_423,0,false);if(this.selectedIndex>=_423){this.selectedIndex++;}},remove:function(_424){this.selected.splice(_424,1);if(this.selectedIndex>=_424){this.selectedIndex--;}},deselectAll:function(_425){for(var i in this.selected){if((i!=_425)&&(this.selected[i]===true)){this.deselect(i);}}},clickSelect:function(_426,_427,_428){if(this.mode=="none"){return;}this._beginUpdate();if(this.mode!="extended"){this.select(_426);}else{var _429=this.selectedIndex;if(!_427){this.deselectAll(_426);}if(_428){this.selectRange(_429,_426);}else{if(_427){this.toggleSelect(_426);}else{this.addToSelection(_426);}}}this._endUpdate();},clickSelectEvent:function(e){this.clickSelect(e.rowIndex,dojo.isCopyKey(e),e.shiftKey);},clear:function(){this._beginUpdate();this.deselectAll();this._endUpdate();}});}if(!dojo._hasResource["dojox.grid._Events"]){dojo._hasResource["dojox.grid._Events"]=true;dojo.provide("dojox.grid._Events");dojo.declare("dojox.grid._Events",null,{cellOverClass:"dojoxGridCellOver",onKeyEvent:function(e){this.dispatchKeyEvent(e);},onContentEvent:function(e){this.dispatchContentEvent(e);},onHeaderEvent:function(e){this.dispatchHeaderEvent(e);},onStyleRow:function(_42a){var i=_42a;i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected?" dojoxGridRowSelected":"")+(i.over?" dojoxGridRowOver":"");this.focus.styleRow(_42a);this.edit.styleRow(_42a);},onKeyDown:function(e){if(e.altKey||e.metaKey){return;}var dk=dojo.keys;var _42b;switch(e.keyCode){case dk.ESCAPE:this.edit.cancel();break;case dk.ENTER:if(!this.edit.isEditing()){_42b=this.focus.getHeaderIndex();if(_42b>=0){this.setSortIndex(_42b);break;}else{this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);}dojo.stopEvent(e);}if(!e.shiftKey){var _42c=this.edit.isEditing();this.edit.apply();if(!_42c){this.edit.setEditCell(this.focus.cell,this.focus.rowIndex);}}if(!this.edit.isEditing()){var _42d=this.focus.focusView||this.views.views[0];_42d.content.decorateEvent(e);this.onRowClick(e);}break;case dk.SPACE:if(!this.edit.isEditing()){_42b=this.focus.getHeaderIndex();if(_42b>=0){this.setSortIndex(_42b);break;}else{this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);}dojo.stopEvent(e);}break;case dk.TAB:this.focus[e.shiftKey?"previousKey":"nextKey"](e);break;case dk.LEFT_ARROW:case dk.RIGHT_ARROW:if(!this.edit.isEditing()){var _42e=e.keyCode;dojo.stopEvent(e);_42b=this.focus.getHeaderIndex();if(_42b>=0&&(e.shiftKey&&e.ctrlKey)){this.focus.colSizeAdjust(e,_42b,(_42e==dk.LEFT_ARROW?-1:1)*5);}else{var _42f=(_42e==dk.LEFT_ARROW)?1:-1;if(dojo._isBodyLtr()){_42f*=-1;}this.focus.move(0,_42f);}}break;case dk.UP_ARROW:if(!this.edit.isEditing()&&this.focus.rowIndex!==0){dojo.stopEvent(e);this.focus.move(-1,0);}break;case dk.DOWN_ARROW:if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){dojo.stopEvent(e);this.focus.move(1,0);}break;case dk.PAGE_UP:if(!this.edit.isEditing()&&this.focus.rowIndex!==0){dojo.stopEvent(e);if(this.focus.rowIndex!=this.scroller.firstVisibleRow+1){this.focus.move(this.scroller.firstVisibleRow-this.focus.rowIndex,0);}else{this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex-1));this.focus.move(this.scroller.firstVisibleRow-this.scroller.lastVisibleRow+1,0);}}break;case dk.PAGE_DOWN:if(!this.edit.isEditing()&&this.focus.rowIndex+1!=this.rowCount){dojo.stopEvent(e);if(this.focus.rowIndex!=this.scroller.lastVisibleRow-1){this.focus.move(this.scroller.lastVisibleRow-this.focus.rowIndex-1,0);}else{this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex+1));this.focus.move(this.scroller.lastVisibleRow-this.scroller.firstVisibleRow-1,0);}}break;default:break;}},onMouseOver:function(e){e.rowIndex==-1?this.onHeaderCellMouseOver(e):this.onCellMouseOver(e);},onMouseOut:function(e){e.rowIndex==-1?this.onHeaderCellMouseOut(e):this.onCellMouseOut(e);},onMouseDown:function(e){e.rowIndex==-1?this.onHeaderCellMouseDown(e):this.onCellMouseDown(e);},onMouseOverRow:function(e){if(!this.rows.isOver(e.rowIndex)){this.rows.setOverRow(e.rowIndex);e.rowIndex==-1?this.onHeaderMouseOver(e):this.onRowMouseOver(e);}},onMouseOutRow:function(e){if(this.rows.isOver(-1)){this.onHeaderMouseOut(e);}else{if(!this.rows.isOver(-2)){this.rows.setOverRow(-2);this.onRowMouseOut(e);}}},onMouseDownRow:function(e){if(e.rowIndex!=-1){this.onRowMouseDown(e);}},onCellMouseOver:function(e){if(e.cellNode){dojo.addClass(e.cellNode,this.cellOverClass);}},onCellMouseOut:function(e){if(e.cellNode){dojo.removeClass(e.cellNode,this.cellOverClass);}},onCellMouseDown:function(e){},onCellClick:function(e){this._click[0]=this._click[1];this._click[1]=e;if(!this.edit.isEditCell(e.rowIndex,e.cellIndex)){this.focus.setFocusCell(e.cell,e.rowIndex);}this.onRowClick(e);},onCellDblClick:function(e){if(this._click.length>1&&dojo.isIE){this.edit.setEditCell(this._click[1].cell,this._click[1].rowIndex);}else{if(this._click.length>1&&this._click[0].rowIndex!=this._click[1].rowIndex){this.edit.setEditCell(this._click[0].cell,this._click[0].rowIndex);}else{this.edit.setEditCell(e.cell,e.rowIndex);}}this.onRowDblClick(e);},onCellContextMenu:function(e){this.onRowContextMenu(e);},onCellFocus:function(_430,_431){this.edit.cellFocus(_430,_431);},onRowClick:function(e){this.edit.rowClick(e);this.selection.clickSelectEvent(e);},onRowDblClick:function(e){},onRowMouseOver:function(e){},onRowMouseOut:function(e){},onRowMouseDown:function(e){},onRowContextMenu:function(e){dojo.stopEvent(e);},onHeaderMouseOver:function(e){},onHeaderMouseOut:function(e){},onHeaderCellMouseOver:function(e){if(e.cellNode){dojo.addClass(e.cellNode,this.cellOverClass);}},onHeaderCellMouseOut:function(e){if(e.cellNode){dojo.removeClass(e.cellNode,this.cellOverClass);}},onHeaderCellMouseDown:function(e){},onHeaderClick:function(e){},onHeaderCellClick:function(e){this.setSortIndex(e.cell.index);this.onHeaderClick(e);},onHeaderDblClick:function(e){},onHeaderCellDblClick:function(e){this.onHeaderDblClick(e);},onHeaderCellContextMenu:function(e){this.onHeaderContextMenu(e);},onHeaderContextMenu:function(e){if(!this.headerMenu){dojo.stopEvent(e);}},onStartEdit:function(_432,_433){},onApplyCellEdit:function(_434,_435,_436){},onCancelEdit:function(_437){},onApplyEdit:function(_438){},onCanSelect:function(_439){return true;},onCanDeselect:function(_43a){return true;},onSelected:function(_43b){this.updateRowStyles(_43b);},onDeselected:function(_43c){this.updateRowStyles(_43c);},onSelectionChanged:function(){}});}if(!dojo._hasResource["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_43d,_43e,_43f){_43f=dojo.i18n.normalizeLocale(_43f);var _440=_43f.split("-");var _441=[_43d,"nls",_43e].join(".");var _442=dojo._loadedModules[_441];if(_442){var _443;for(var i=_440.length;i>0;i--){var loc=_440.slice(0,i).join("_");if(_442[loc]){_443=_442[loc];break;}}if(!_443){_443=_442.ROOT;}if(_443){var _444=function(){};_444.prototype=_443;return new _444();}}throw new Error("Bundle not found: "+_43e+" in "+_43d+" , locale="+_43f);};dojo.i18n.normalizeLocale=function(_445){var _446=_445?_445.toLowerCase():dojo.locale;if(_446=="root"){_446="ROOT";}return _446;};dojo.i18n._requireLocalization=function(_447,_448,_449,_44a){var _44b=dojo.i18n.normalizeLocale(_449);var _44c=[_447,"nls",_448].join(".");var _44d="";if(_44a){var _44e=_44a.split(",");for(var i=0;i<_44e.length;i++){if(_44b["indexOf"](_44e[i])==0){if(_44e[i].length>_44d.length){_44d=_44e[i];}}}if(!_44d){_44d="ROOT";}}var _44f=_44a?_44d:_44b;var _450=dojo._loadedModules[_44c];var _451=null;if(_450){if(dojo.config.localizationComplete&&_450._built){return;}var _452=_44f.replace(/-/g,"_");var _453=_44c+"."+_452;_451=dojo._loadedModules[_453];}if(!_451){_450=dojo["provide"](_44c);var syms=dojo._getModuleSymbols(_447);var _454=syms.concat("nls").join("/");var _455;dojo.i18n._searchLocalePath(_44f,_44a,function(loc){var _456=loc.replace(/-/g,"_");var _457=_44c+"."+_456;var _458=false;if(!dojo._loadedModules[_457]){dojo["provide"](_457);var _459=[_454];if(loc!="ROOT"){_459.push(loc);}_459.push(_448);var _45a=_459.join("/")+".js";_458=dojo._loadPath(_45a,null,function(hash){var _45b=function(){};_45b.prototype=_455;_450[_456]=new _45b();for(var j in hash){_450[_456][j]=hash[j];}});}else{_458=true;}if(_458&&_450[_456]){_455=_450[_456];}else{_450[_456]=_455;}if(_44a){return true;}});}if(_44a&&_44b!=_44d){_450[_44b.replace(/-/g,"_")]=_450[_44d.replace(/-/g,"_")];}};(function(){var _45c=dojo.config.extraLocale;if(_45c){if(!_45c instanceof Array){_45c=[_45c];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_45d,_45e){req(m,b,_45d,_45e);if(_45d){return;}for(var i=0;i<_45c.length;i++){req(m,b,_45c[i],_45e);}};}})();dojo.i18n._searchLocalePath=function(_45f,down,_460){_45f=dojo.i18n.normalizeLocale(_45f);var _461=_45f.split("-");var _462=[];for(var i=_461.length;i>0;i--){_462.push(_461.slice(0,i).join("-"));}_462.push(false);if(down){_462.reverse();}for(var j=_462.length-1;j>=0;j--){var loc=_462[j]||"ROOT";var stop=_460(loc);if(stop){break;}}};dojo.i18n._preloadLocalizations=function(_463,_464){function _465(_466){_466=dojo.i18n.normalizeLocale(_466);dojo.i18n._searchLocalePath(_466,true,function(loc){for(var i=0;i<_464.length;i++){if(_464[i]==loc){dojo["require"](_463+"_"+loc);return true;}}return false;});};_465();var _467=dojo.config.extraLocale||[];for(var i=0;i<_467.length;i++){_465(_467[i]);}};}if(!dojo._hasResource["dojox.grid._Grid"]){dojo._hasResource["dojox.grid._Grid"]=true;dojo.provide("dojox.grid._Grid");(function(){if(!dojo.isCopyKey){dojo.isCopyKey=dojo.dnd.getCopyKeyState;}dojo.declare("dojox.grid._Grid",[dijit._Widget,dijit._Templated,dojox.grid._Events],{templateString:"<div hidefocus=\"hidefocus\" wairole=\"grid\" dojoAttachEvent=\"onmouseout:_mouseOut\">\n\t<div class=\"dojoxGridMasterHeader\" dojoAttachPoint=\"viewsHeaderNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterView\" dojoAttachPoint=\"viewsNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterMessages\" style=\"display: none;\" dojoAttachPoint=\"messagesNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n",classTag:"dojoxGrid",rowCount:5,keepRows:75,rowsPerPage:25,autoWidth:false,initialWidth:"",autoHeight:"",rowHeight:0,autoRender:true,defaultHeight:"15em",height:"",structure:null,elasticView:-1,singleClickEdit:false,selectionMode:"extended",rowSelector:"",columnReordering:false,headerMenu:null,placeholderLabel:"GridColumns",selectable:false,_click:null,loadingMessage:"<span class='dojoxGridLoading'>${loadingState}</span>",errorMessage:"<span class='dojoxGridError'>${errorState}</span>",noDataMessage:"",escapeHTMLInData:true,formatterScope:null,editable:false,sortInfo:0,themeable:true,_placeholders:null,_layoutClass:dojox.grid._Layout,buildRendering:function(){this.inherited(arguments);if(!this.domNode.getAttribute("tabIndex")){this.domNode.tabIndex="0";}this.createScroller();this.createLayout();this.createViews();this.createManagers();this.createSelection();this.connect(this.selection,"onSelected","onSelected");this.connect(this.selection,"onDeselected","onDeselected");this.connect(this.selection,"onChanged","onSelectionChanged");dojox.html.metrics.initOnFontResize();this.connect(dojox.html.metrics,"onFontResize","textSizeChanged");dojox.grid.util.funnelEvents(this.domNode,this,"doKeyEvent",dojox.grid.util.keyEvents);if(this.selectionMode!="none"){dojo.attr(this.domNode,"aria-multiselectable",this.selectionMode=="single"?"false":"true");}dojo.addClass(this.domNode,this.classTag);if(!this.isLeftToRight()){dojo.addClass(this.domNode,this.classTag+"Rtl");}},postMixInProperties:function(){this.inherited(arguments);var _468=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_468);this.errorMessage=dojo.string.substitute(this.errorMessage,_468);if(this.srcNodeRef&&this.srcNodeRef.style.height){this.height=this.srcNodeRef.style.height;}this._setAutoHeightAttr(this.autoHeight,true);this.lastScrollTop=this.scrollTop=0;},postCreate:function(){this._placeholders=[];this._setHeaderMenuAttr(this.headerMenu);this._setStructureAttr(this.structure);this._click=[];this.inherited(arguments);if(this.domNode&&this.autoWidth&&this.initialWidth){this.domNode.style.width=this.initialWidth;}if(this.domNode&&!this.editable){dojo.attr(this.domNode,"aria-readonly","true");}},destroy:function(){this.domNode.onReveal=null;this.domNode.onSizeChange=null;delete this._click;this.edit.destroy();delete this.edit;this.views.destroyViews();if(this.scroller){this.scroller.destroy();delete this.scroller;}if(this.focus){this.focus.destroy();delete this.focus;}if(this.headerMenu&&this._placeholders.length){dojo.forEach(this._placeholders,function(p){p.unReplace(true);});this.headerMenu.unBindDomNode(this.viewsHeaderNode);}this.inherited(arguments);},_setAutoHeightAttr:function(ah,_469){if(typeof ah=="string"){if(!ah||ah=="false"){ah=false;}else{if(ah=="true"){ah=true;}else{ah=window.parseInt(ah,10);}}}if(typeof ah=="number"){if(isNaN(ah)){ah=false;}if(ah<0){ah=true;}else{if(ah===0){ah=false;}}}this.autoHeight=ah;if(typeof ah=="boolean"){this._autoHeight=ah;}else{if(typeof ah=="number"){this._autoHeight=(ah>=this.get("rowCount"));}else{this._autoHeight=false;}}if(this._started&&!_469){this.render();}},_getRowCountAttr:function(){return this.updating&&this.invalidated&&this.invalidated.rowCount!=undefined?this.invalidated.rowCount:this.rowCount;},textSizeChanged:function(){this.render();},sizeChange:function(){this.update();},createManagers:function(){this.rows=new dojox.grid._RowManager(this);this.focus=new dojox.grid._FocusManager(this);this.edit=new dojox.grid._EditManager(this);},createSelection:function(){this.selection=new dojox.grid.Selection(this);},createScroller:function(){this.scroller=new dojox.grid._Scroller();this.scroller.grid=this;this.scroller.renderRow=dojo.hitch(this,"renderRow");this.scroller.removeRow=dojo.hitch(this,"rowRemoved");},createLayout:function(){this.layout=new this._layoutClass(this);this.connect(this.layout,"moveColumn","onMoveColumn");},onMoveColumn:function(){this.render();},onResizeColumn:function(_46a){},createViews:function(){this.views=new dojox.grid._ViewManager(this);this.views.createView=dojo.hitch(this,"createView");},createView:function(_46b,idx){var c=dojo.getObject(_46b);var view=new c({grid:this,index:idx});this.viewsNode.appendChild(view.domNode);this.viewsHeaderNode.appendChild(view.headerNode);this.views.addView(view);return view;},buildViews:function(){for(var i=0,vs;(vs=this.layout.structure[i]);i++){this.createView(vs.type||dojox._scopeName+".grid._View",i).setStructure(vs);}this.scroller.setContentNodes(this.views.getContentNodes());},_setStructureAttr:function(_46c){var s=_46c;if(s&&dojo.isString(s)){dojo.deprecated("dojox.grid._Grid.attr('structure', 'objVar')","use dojox.grid._Grid.attr('structure', objVar) instead","2.0");s=dojo.getObject(s);}this.structure=s;if(!s){if(this.layout.structure){s=this.layout.structure;}else{return;}}this.views.destroyViews();if(s!==this.layout.structure){this.layout.setStructure(s);}this._structureChanged();},setStructure:function(_46d){dojo.deprecated("dojox.grid._Grid.setStructure(obj)","use dojox.grid._Grid.attr('structure', obj) instead.","2.0");this._setStructureAttr(_46d);},getColumnTogglingItems:function(){return dojo.map(this.layout.cells,function(cell){if(!cell.menuItems){cell.menuItems=[];}var self=this;var item=new dijit.CheckedMenuItem({label:cell.name,checked:!cell.hidden,_gridCell:cell,onChange:function(_46e){if(self.layout.setColumnVisibility(this._gridCell.index,_46e)){var _46f=this._gridCell.menuItems;if(_46f.length>1){dojo.forEach(_46f,function(item){if(item!==this){item.setAttribute("checked",_46e);}},this);}_46e=dojo.filter(self.layout.cells,function(c){if(c.menuItems.length>1){dojo.forEach(c.menuItems,"item.attr('disabled', false);");}else{c.menuItems[0].attr("disabled",false);}return !c.hidden;});if(_46e.length==1){dojo.forEach(_46e[0].menuItems,"item.attr('disabled', true);");}}},destroy:function(){var _470=dojo.indexOf(this._gridCell.menuItems,this);this._gridCell.menuItems.splice(_470,1);delete this._gridCell;dijit.CheckedMenuItem.prototype.destroy.apply(this,arguments);}});cell.menuItems.push(item);return item;},this);},_setHeaderMenuAttr:function(menu){if(this._placeholders&&this._placeholders.length){dojo.forEach(this._placeholders,function(p){p.unReplace(true);});this._placeholders=[];}if(this.headerMenu){this.headerMenu.unBindDomNode(this.viewsHeaderNode);}this.headerMenu=menu;if(!menu){return;}this.headerMenu.bindDomNode(this.viewsHeaderNode);if(this.headerMenu.getPlaceholders){this._placeholders=this.headerMenu.getPlaceholders(this.placeholderLabel);}},setHeaderMenu:function(menu){dojo.deprecated("dojox.grid._Grid.setHeaderMenu(obj)","use dojox.grid._Grid.attr('headerMenu', obj) instead.","2.0");this._setHeaderMenuAttr(menu);},setupHeaderMenu:function(){if(this._placeholders&&this._placeholders.length){dojo.forEach(this._placeholders,function(p){if(p._replaced){p.unReplace(true);}p.replace(this.getColumnTogglingItems());},this);}},_fetch:function(_471){this.setScrollTop(0);},getItem:function(_472){return null;},showMessage:function(_473){if(_473){this.messagesNode.innerHTML=_473;this.messagesNode.style.display="";}else{this.messagesNode.innerHTML="";this.messagesNode.style.display="none";}},_structureChanged:function(){this.buildViews();if(this.autoRender&&this._started){this.render();}},hasLayout:function(){return this.layout.cells.length;},resize:function(_474,_475){this._pendingChangeSize=_474;this._pendingResultSize=_475;this.sizeChange();},_getPadBorder:function(){this._padBorder=this._padBorder||dojo._getPadBorderExtents(this.domNode);return this._padBorder;},_getHeaderHeight:function(){var vns=this.viewsHeaderNode.style,t=vns.display=="none"?0:this.views.measureHeader();vns.height=t+"px";this.views.normalizeHeaderNodeHeight();return t;},_resize:function(_476,_477){_476=_476||this._pendingChangeSize;_477=_477||this._pendingResultSize;delete this._pendingChangeSize;delete this._pendingResultSize;if(!this.domNode){return;}var pn=this.domNode.parentNode;if(!pn||pn.nodeType!=1||!this.hasLayout()||pn.style.visibility=="hidden"||pn.style.display=="none"){return;}var _478=this._getPadBorder();var hh=undefined;var h;if(this._autoHeight){this.domNode.style.height="auto";this.viewsNode.style.height="";}else{if(typeof this.autoHeight=="number"){h=hh=this._getHeaderHeight();h+=(this.scroller.averageRowHeight*this.autoHeight);this.domNode.style.height=h+"px";}else{if(this.domNode.clientHeight<=_478.h){if(pn==document.body){this.domNode.style.height=this.defaultHeight;}else{if(this.height){this.domNode.style.height=this.height;}else{this.fitTo="parent";}}}}}if(_477){_476=_477;}if(_476){dojo.marginBox(this.domNode,_476);this.height=this.domNode.style.height;delete this.fitTo;}else{if(this.fitTo=="parent"){h=this._parentContentBoxHeight=this._parentContentBoxHeight||dojo._getContentBox(pn).h;this.domNode.style.height=Math.max(0,h)+"px";}}var _479=dojo.some(this.views.views,function(v){return v.flexCells;});if(!this._autoHeight&&(h||dojo._getContentBox(this.domNode).h)===0){this.viewsHeaderNode.style.display="none";}else{this.viewsHeaderNode.style.display="block";if(!_479&&hh===undefined){hh=this._getHeaderHeight();}}if(_479){hh=undefined;}this.adaptWidth();this.adaptHeight(hh);this.postresize();},adaptWidth:function(){var _47a=(!this.initialWidth&&this.autoWidth);var w=_47a?0:this.domNode.clientWidth||(this.domNode.offsetWidth-this._getPadBorder().w),vw=this.views.arrange(1,w);this.views.onEach("adaptWidth");if(_47a){this.domNode.style.width=vw+"px";}},adaptHeight:function(_47b){var t=_47b===undefined?this._getHeaderHeight():_47b;var h=(this._autoHeight?-1:Math.max(this.domNode.clientHeight-t,0)||0);this.views.onEach("setSize",[0,h]);this.views.onEach("adaptHeight");if(!this._autoHeight){var _47c=0,_47d=0;var _47e=dojo.filter(this.views.views,function(v){var has=v.hasHScrollbar();if(has){_47c++;}else{_47d++;}return (!has);});if(_47c>0&&_47d>0){dojo.forEach(_47e,function(v){v.adaptHeight(true);});}}if(this.autoHeight===true||h!=-1||(typeof this.autoHeight=="number"&&this.autoHeight>=this.get("rowCount"))){this.scroller.windowHeight=h;}else{this.scroller.windowHeight=Math.max(this.domNode.clientHeight-t,0);}},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.autoRender){this.render();}},render:function(){if(!this.domNode){return;}if(!this._started){return;}if(!this.hasLayout()){this.scroller.init(0,this.keepRows,this.rowsPerPage);return;}this.update=this.defaultUpdate;this._render();},_render:function(){this.scroller.init(this.get("rowCount"),this.keepRows,this.rowsPerPage);this.prerender();this.setScrollTop(0);this.postrender();},prerender:function(){this.keepRows=this._autoHeight?0:this.keepRows;this.scroller.setKeepInfo(this.keepRows);this.views.render();this._resize();},postrender:function(){this.postresize();this.focus.initFocusView();dojo.setSelectable(this.domNode,this.selectable);},postresize:function(){if(this._autoHeight){var size=Math.max(this.views.measureContent())+"px";this.viewsNode.style.height=size;}},renderRow:function(_47f,_480){this.views.renderRow(_47f,_480,this._skipRowRenormalize);},rowRemoved:function(_481){this.views.rowRemoved(_481);},invalidated:null,updating:false,beginUpdate:function(){this.invalidated=[];this.updating=true;},endUpdate:function(){this.updating=false;var i=this.invalidated,r;if(i.all){this.update();}else{if(i.rowCount!=undefined){this.updateRowCount(i.rowCount);}else{for(r in i){this.updateRow(Number(r));}}}this.invalidated=[];},defaultUpdate:function(){if(!this.domNode){return;}if(this.updating){this.invalidated.all=true;return;}this.lastScrollTop=this.scrollTop;this.prerender();this.scroller.invalidateNodes();this.setScrollTop(this.lastScrollTop);this.postrender();},update:function(){this.render();},updateRow:function(_482){_482=Number(_482);if(this.updating){this.invalidated[_482]=true;}else{this.views.updateRow(_482);this.scroller.rowHeightChanged(_482);}},updateRows:function(_483,_484){_483=Number(_483);_484=Number(_484);var i;if(this.updating){for(i=0;i<_484;i++){this.invalidated[i+_483]=true;}}else{for(i=0;i<_484;i++){this.views.updateRow(i+_483,this._skipRowRenormalize);}this.scroller.rowHeightChanged(_483);}},updateRowCount:function(_485){if(this.updating){this.invalidated.rowCount=_485;}else{this.rowCount=_485;this._setAutoHeightAttr(this.autoHeight,true);if(this.layout.cells.length){this.scroller.updateRowCount(_485);}this._resize();if(this.layout.cells.length){this.setScrollTop(this.scrollTop);}}},updateRowStyles:function(_486){this.views.updateRowStyles(_486);},getRowNode:function(_487){if(this.focus.focusView&&!(this.focus.focusView instanceof dojox.grid._RowSelector)){return this.focus.focusView.rowNodes[_487];}else{for(var i=0,_488;(_488=this.views.views[i]);i++){if(!(_488 instanceof dojox.grid._RowSelector)){return _488.rowNodes[_487];}}}return null;},rowHeightChanged:function(_489){this.views.renormalizeRow(_489);this.scroller.rowHeightChanged(_489);},fastScroll:true,delayScroll:false,scrollRedrawThreshold:(dojo.isIE?100:50),scrollTo:function(_48a){if(!this.fastScroll){this.setScrollTop(_48a);return;}var _48b=Math.abs(this.lastScrollTop-_48a);this.lastScrollTop=_48a;if(_48b>this.scrollRedrawThreshold||this.delayScroll){this.delayScroll=true;this.scrollTop=_48a;this.views.setScrollTop(_48a);if(this._pendingScroll){window.clearTimeout(this._pendingScroll);}var _48c=this;this._pendingScroll=window.setTimeout(function(){delete _48c._pendingScroll;_48c.finishScrollJob();},200);}else{this.setScrollTop(_48a);}},finishScrollJob:function(){this.delayScroll=false;this.setScrollTop(this.scrollTop);},setScrollTop:function(_48d){this.scroller.scroll(this.views.setScrollTop(_48d));},scrollToRow:function(_48e){this.setScrollTop(this.scroller.findScrollTop(_48e)+1);},styleRowNode:function(_48f,_490){if(_490){this.rows.styleRowNode(_48f,_490);}},_mouseOut:function(e){this.rows.setOverRow(-2);},getCell:function(_491){return this.layout.cells[_491];},setCellWidth:function(_492,_493){this.getCell(_492).unitWidth=_493;},getCellName:function(_494){return "Cell "+_494.index;},canSort:function(_495){},sort:function(){},getSortAsc:function(_496){_496=_496==undefined?this.sortInfo:_496;return Boolean(_496>0);},getSortIndex:function(_497){_497=_497==undefined?this.sortInfo:_497;return Math.abs(_497)-1;},setSortIndex:function(_498,_499){var si=_498+1;if(_499!=undefined){si*=(_499?1:-1);}else{if(this.getSortIndex()==_498){si=-this.sortInfo;}}this.setSortInfo(si);},setSortInfo:function(_49a){if(this.canSort(_49a)){this.sortInfo=_49a;this.sort();this.update();}},doKeyEvent:function(e){e.dispatch="do"+e.type;this.onKeyEvent(e);},_dispatch:function(m,e){if(m in this){return this[m](e);}return false;},dispatchKeyEvent:function(e){this._dispatch(e.dispatch,e);},dispatchContentEvent:function(e){this.edit.dispatchEvent(e)||e.sourceView.dispatchContentEvent(e)||this._dispatch(e.dispatch,e);},dispatchHeaderEvent:function(e){e.sourceView.dispatchHeaderEvent(e)||this._dispatch("doheader"+e.type,e);},dokeydown:function(e){this.onKeyDown(e);},doclick:function(e){if(e.cellNode){this.onCellClick(e);}else{this.onRowClick(e);}},dodblclick:function(e){if(e.cellNode){this.onCellDblClick(e);}else{this.onRowDblClick(e);}},docontextmenu:function(e){if(e.cellNode){this.onCellContextMenu(e);}else{this.onRowContextMenu(e);}},doheaderclick:function(e){if(e.cellNode){this.onHeaderCellClick(e);}else{this.onHeaderClick(e);}},doheaderdblclick:function(e){if(e.cellNode){this.onHeaderCellDblClick(e);}else{this.onHeaderDblClick(e);}},doheadercontextmenu:function(e){if(e.cellNode){this.onHeaderCellContextMenu(e);}else{this.onHeaderContextMenu(e);}},doStartEdit:function(_49b,_49c){this.onStartEdit(_49b,_49c);},doApplyCellEdit:function(_49d,_49e,_49f){this.onApplyCellEdit(_49d,_49e,_49f);},doCancelEdit:function(_4a0){this.onCancelEdit(_4a0);},doApplyEdit:function(_4a1){this.onApplyEdit(_4a1);},addRow:function(){this.updateRowCount(this.get("rowCount")+1);},removeSelectedRows:function(){if(this.allItemsSelected){this.updateRowCount(0);}else{this.updateRowCount(Math.max(0,this.get("rowCount")-this.selection.getSelected().length));}this.selection.clear();}});dojox.grid._Grid.markupFactory=function(_4a2,node,ctor,_4a3){var d=dojo;var _4a4=function(n){var w=d.attr(n,"width")||"auto";if((w!="auto")&&(w.slice(-2)!="em")&&(w.slice(-1)!="%")){w=parseInt(w,10)+"px";}return w;};if(!_4a2.structure&&node.nodeName.toLowerCase()=="table"){_4a2.structure=d.query("> colgroup",node).map(function(cg){var sv=d.attr(cg,"span");var v={noscroll:(d.attr(cg,"noscroll")=="true")?true:false,__span:(!!sv?parseInt(sv,10):1),cells:[]};if(d.hasAttr(cg,"width")){v.width=_4a4(cg);}return v;});if(!_4a2.structure.length){_4a2.structure.push({__span:Infinity,cells:[]});}d.query("thead > tr",node).forEach(function(tr,_4a5){var _4a6=0;var _4a7=0;var _4a8;var _4a9=null;d.query("> th",tr).map(function(th){if(!_4a9){_4a8=0;_4a9=_4a2.structure[0];}else{if(_4a6>=(_4a8+_4a9.__span)){_4a7++;_4a8+=_4a9.__span;var _4aa=_4a9;_4a9=_4a2.structure[_4a7];}}var cell={name:d.trim(d.attr(th,"name")||th.innerHTML),colSpan:parseInt(d.attr(th,"colspan")||1,10),type:d.trim(d.attr(th,"cellType")||""),id:d.trim(d.attr(th,"id")||"")};_4a6+=cell.colSpan;var _4ab=d.attr(th,"rowspan");if(_4ab){cell.rowSpan=_4ab;}if(d.hasAttr(th,"width")){cell.width=_4a4(th);}if(d.hasAttr(th,"relWidth")){cell.relWidth=window.parseInt(dojo.attr(th,"relWidth"),10);}if(d.hasAttr(th,"hidden")){cell.hidden=d.attr(th,"hidden")=="true";}if(_4a3){_4a3(th,cell);}cell.type=cell.type?dojo.getObject(cell.type):dojox.grid.cells.Cell;if(cell.type&&cell.type.markupFactory){cell.type.markupFactory(th,cell);}if(!_4a9.cells[_4a5]){_4a9.cells[_4a5]=[];}_4a9.cells[_4a5].push(cell);});});}return new ctor(_4a2,node);};})();}if(!dojo._hasResource["dojox.grid.DataSelection"]){dojo._hasResource["dojox.grid.DataSelection"]=true;dojo.provide("dojox.grid.DataSelection");dojo.declare("dojox.grid.DataSelection",dojox.grid.Selection,{getFirstSelected:function(){var idx=dojox.grid.Selection.prototype.getFirstSelected.call(this);if(idx==-1){return null;}return this.grid.getItem(idx);},getNextSelected:function(_4ac){var _4ad=this.grid.getItemIndex(_4ac);var idx=dojox.grid.Selection.prototype.getNextSelected.call(this,_4ad);if(idx==-1){return null;}return this.grid.getItem(idx);},getSelected:function(){var _4ae=[];for(var i=0,l=this.selected.length;i<l;i++){if(this.selected[i]){_4ae.push(this.grid.getItem(i));}}return _4ae;},addToSelection:function(_4af){if(this.mode=="none"){return;}var idx=null;if(typeof _4af=="number"||typeof _4af=="string"){idx=_4af;}else{idx=this.grid.getItemIndex(_4af);}dojox.grid.Selection.prototype.addToSelection.call(this,idx);},deselect:function(_4b0){if(this.mode=="none"){return;}var idx=null;if(typeof _4b0=="number"||typeof _4b0=="string"){idx=_4b0;}else{idx=this.grid.getItemIndex(_4b0);}dojox.grid.Selection.prototype.deselect.call(this,idx);},deselectAll:function(_4b1){var idx=null;if(_4b1||typeof _4b1=="number"){if(typeof _4b1=="number"||typeof _4b1=="string"){idx=_4b1;}else{idx=this.grid.getItemIndex(_4b1);}dojox.grid.Selection.prototype.deselectAll.call(this,idx);}else{this.inherited(arguments);}}});}if(!dojo._hasResource["dojox.grid.DataGrid"]){dojo._hasResource["dojox.grid.DataGrid"]=true;dojo.provide("dojox.grid.DataGrid");dojo.declare("dojox.grid.DataGrid",dojox.grid._Grid,{store:null,query:null,queryOptions:null,fetchText:"...",sortFields:null,updateDelay:1,items:null,_store_connects:null,_by_idty:null,_by_idx:null,_cache:null,_pages:null,_pending_requests:null,_bop:-1,_eop:-1,_requests:0,rowCount:0,_isLoaded:false,_isLoading:false,postCreate:function(){this._pages=[];this._store_connects=[];this._by_idty={};this._by_idx=[];this._cache=[];this._pending_requests={};this._setStore(this.store);this.inherited(arguments);},createSelection:function(){this.selection=new dojox.grid.DataSelection(this);},get:function(_4b2,_4b3){if(_4b3&&this.field=="_item"&&!this.fields){return _4b3;}else{if(_4b3&&this.fields){var ret=[];var s=this.grid.store;dojo.forEach(this.fields,function(f){ret=ret.concat(s.getValues(_4b3,f));});return ret;}else{if(!_4b3&&typeof _4b2==="string"){return this.inherited(arguments);}}}return (!_4b3?this.defaultValue:(!this.field?this.value:(this.field=="_item"?_4b3:this.grid.store.getValue(_4b3,this.field))));},_checkUpdateStatus:function(){if(this.updateDelay>0){var _4b4=false;if(this._endUpdateDelay){clearTimeout(this._endUpdateDelay);delete this._endUpdateDelay;_4b4=true;}if(!this.updating){this.beginUpdate();_4b4=true;}if(_4b4){var _4b5=this;this._endUpdateDelay=setTimeout(function(){delete _4b5._endUpdateDelay;_4b5.endUpdate();},this.updateDelay);}}},_onSet:function(item,_4b6,_4b7,_4b8){this._checkUpdateStatus();var idx=this.getItemIndex(item);if(idx>-1){this.updateRow(idx);}},_createItem:function(item,_4b9){var idty=this._hasIdentity?this.store.getIdentity(item):dojo.toJson(this.query)+":idx:"+_4b9+":sort:"+dojo.toJson(this.getSortProps());var o=this._by_idty[idty]={idty:idty,item:item};return o;},_addItem:function(item,_4ba,_4bb){this._by_idx[_4ba]=this._createItem(item,_4ba);if(!_4bb){this.updateRow(_4ba);}},_onNew:function(item,_4bc){this._checkUpdateStatus();var _4bd=this.get("rowCount");this._addingItem=true;this.updateRowCount(_4bd+1);this._addingItem=false;this._addItem(item,_4bd);this.showMessage();},_onDelete:function(item){this._checkUpdateStatus();var idx=this._getItemIndex(item,true);if(idx>=0){this._pages=[];this._bop=-1;this._eop=-1;var o=this._by_idx[idx];this._by_idx.splice(idx,1);delete this._by_idty[o.idty];this.updateRowCount(this.get("rowCount")-1);if(this.get("rowCount")===0){this.showMessage(this.noDataMessage);}}},_onRevert:function(){this._refresh();},setStore:function(_4be,_4bf,_4c0){this._setQuery(_4bf,_4c0);this._setStore(_4be);this._refresh(true);},setQuery:function(_4c1,_4c2){this._setQuery(_4c1,_4c2);this._refresh(true);},setItems:function(_4c3){this.items=_4c3;this._setStore(this.store);this._refresh(true);},_setQuery:function(_4c4,_4c5){this.query=_4c4;this.queryOptions=_4c5||this.queryOptions;},_setStore:function(_4c6){if(this.store&&this._store_connects){dojo.forEach(this._store_connects,function(arr){dojo.forEach(arr,dojo.disconnect);});}this.store=_4c6;if(this.store){var f=this.store.getFeatures();var h=[];this._canEdit=!!f["dojo.data.api.Write"]&&!!f["dojo.data.api.Identity"];this._hasIdentity=!!f["dojo.data.api.Identity"];if(!!f["dojo.data.api.Notification"]&&!this.items){h.push(this.connect(this.store,"onSet","_onSet"));h.push(this.connect(this.store,"onNew","_onNew"));h.push(this.connect(this.store,"onDelete","_onDelete"));}if(this._canEdit){h.push(this.connect(this.store,"revert","_onRevert"));}this._store_connects=h;}},_onFetchBegin:function(size,req){if(!this.scroller){return;}if(this.rowCount!=size){if(req.isRender){this.scroller.init(size,this.keepRows,this.rowsPerPage);this.rowCount=size;this._setAutoHeightAttr(this.autoHeight,true);this._skipRowRenormalize=true;this.prerender();this._skipRowRenormalize=false;}else{this.updateRowCount(size);}}if(!size){this.views.render();this._resize();this.showMessage(this.noDataMessage);this.focus.initFocusView();}else{this.showMessage();}},_onFetchComplete:function(_4c7,req){if(!this.scroller){return;}if(_4c7&&_4c7.length>0){dojo.forEach(_4c7,function(item,idx){this._addItem(item,req.start+idx,true);},this);if(this._autoHeight){this._skipRowRenormalize=true;}this.updateRows(req.start,_4c7.length);if(this._autoHeight){this._skipRowRenormalize=false;}if(req.isRender){this.setScrollTop(0);this.postrender();}else{if(this._lastScrollTop){this.setScrollTop(this._lastScrollTop);}}}delete this._lastScrollTop;if(!this._isLoaded){this._isLoading=false;this._isLoaded=true;}this._pending_requests[req.start]=false;},_onFetchError:function(err,req){delete this._lastScrollTop;if(!this._isLoaded){this._isLoading=false;this._isLoaded=true;this.showMessage(this.errorMessage);}this._pending_requests[req.start]=false;this.onFetchError(err,req);},onFetchError:function(err,req){},_fetch:function(_4c8,_4c9){_4c8=_4c8||0;if(this.store&&!this._pending_requests[_4c8]){if(!this._isLoaded&&!this._isLoading){this._isLoading=true;this.showMessage(this.loadingMessage);}this._pending_requests[_4c8]=true;try{if(this.items){var _4ca=this.items;var _4cb=this.store;this.rowsPerPage=_4ca.length;var req={start:_4c8,count:this.rowsPerPage,isRender:_4c9};this._onFetchBegin(_4ca.length,req);var _4cc=0;dojo.forEach(_4ca,function(i){if(!_4cb.isItemLoaded(i)){_4cc++;}});if(_4cc===0){this._onFetchComplete(_4ca,req);}else{var _4cd=function(item){_4cc--;if(_4cc===0){this._onFetchComplete(_4ca,req);}};dojo.forEach(_4ca,function(i){if(!_4cb.isItemLoaded(i)){_4cb.loadItem({item:i,onItem:_4cd,scope:this});}},this);}}else{this.store.fetch({start:_4c8,count:this.rowsPerPage,query:this.query,sort:this.getSortProps(),queryOptions:this.queryOptions,isRender:_4c9,onBegin:dojo.hitch(this,"_onFetchBegin"),onComplete:dojo.hitch(this,"_onFetchComplete"),onError:dojo.hitch(this,"_onFetchError")});}}catch(e){this._onFetchError(e,{start:_4c8,count:this.rowsPerPage});}}},_clearData:function(){this.updateRowCount(0);this._by_idty={};this._by_idx=[];this._pages=[];this._bop=this._eop=-1;this._isLoaded=false;this._isLoading=false;},getItem:function(idx){var data=this._by_idx[idx];if(!data||(data&&!data.item)){this._preparePage(idx);return null;}return data.item;},getItemIndex:function(item){return this._getItemIndex(item,false);},_getItemIndex:function(item,_4ce){if(!_4ce&&!this.store.isItem(item)){return -1;}var idty=this._hasIdentity?this.store.getIdentity(item):null;for(var i=0,l=this._by_idx.length;i<l;i++){var d=this._by_idx[i];if(d&&((idty&&d.idty==idty)||(d.item===item))){return i;}}return -1;},filter:function(_4cf,_4d0){this.query=_4cf;if(_4d0){this._clearData();}this._fetch();},_getItemAttr:function(idx,attr){var item=this.getItem(idx);return (!item?this.fetchText:this.store.getValue(item,attr));},_render:function(){if(this.domNode.parentNode){this.scroller.init(this.get("rowCount"),this.keepRows,this.rowsPerPage);this.prerender();this._fetch(0,true);}},_requestsPending:function(_4d1){return this._pending_requests[_4d1];},_rowToPage:function(_4d2){return (this.rowsPerPage?Math.floor(_4d2/this.rowsPerPage):_4d2);},_pageToRow:function(_4d3){return (this.rowsPerPage?this.rowsPerPage*_4d3:_4d3);},_preparePage:function(_4d4){if((_4d4<this._bop||_4d4>=this._eop)&&!this._addingItem){var _4d5=this._rowToPage(_4d4);this._needPage(_4d5);this._bop=_4d5*this.rowsPerPage;this._eop=this._bop+(this.rowsPerPage||this.get("rowCount"));}},_needPage:function(_4d6){if(!this._pages[_4d6]){this._pages[_4d6]=true;this._requestPage(_4d6);}},_requestPage:function(_4d7){var row=this._pageToRow(_4d7);var _4d8=Math.min(this.rowsPerPage,this.get("rowCount")-row);if(_4d8>0){this._requests++;if(!this._requestsPending(row)){setTimeout(dojo.hitch(this,"_fetch",row,false),1);}}},getCellName:function(_4d9){return _4d9.field;},_refresh:function(_4da){this._clearData();this._fetch(0,_4da);},sort:function(){this._lastScrollTop=this.scrollTop;this._refresh();},canSort:function(){return (!this._isLoading);},getSortProps:function(){var c=this.getCell(this.getSortIndex());if(!c){if(this.sortFields){return this.sortFields;}return null;}else{var desc=c["sortDesc"];var si=!(this.sortInfo>0);if(typeof desc=="undefined"){desc=si;}else{desc=si?!desc:desc;}return [{attribute:c.field,descending:desc}];}},styleRowState:function(_4db){if(this.store&&this.store.getState){var _4dc=this.store.getState(_4db.index),c="";for(var i=0,ss=["inflight","error","inserting"],s;s=ss[i];i++){if(_4dc[s]){c=" dojoxGridRow-"+s;break;}}_4db.customClasses+=c;}},onStyleRow:function(_4dd){this.styleRowState(_4dd);this.inherited(arguments);},canEdit:function(_4de,_4df){return this._canEdit;},_copyAttr:function(idx,attr){var row={};var _4e0={};var src=this.getItem(idx);return this.store.getValue(src,attr);},doStartEdit:function(_4e1,_4e2){if(!this._cache[_4e2]){this._cache[_4e2]=this._copyAttr(_4e2,_4e1.field);}this.onStartEdit(_4e1,_4e2);},doApplyCellEdit:function(_4e3,_4e4,_4e5){this.store.fetchItemByIdentity({identity:this._by_idx[_4e4].idty,onItem:dojo.hitch(this,function(item){var _4e6=this.store.getValue(item,_4e5);if(typeof _4e6=="number"){_4e3=isNaN(_4e3)?_4e3:parseFloat(_4e3);}else{if(typeof _4e6=="boolean"){_4e3=_4e3=="true"?true:_4e3=="false"?false:_4e3;}else{if(_4e6 instanceof Date){var _4e7=new Date(_4e3);_4e3=isNaN(_4e7.getTime())?_4e3:_4e7;}}}this.store.setValue(item,_4e5,_4e3);this.onApplyCellEdit(_4e3,_4e4,_4e5);})});},doCancelEdit:function(_4e8){var _4e9=this._cache[_4e8];if(_4e9){this.updateRow(_4e8);delete this._cache[_4e8];}this.onCancelEdit.apply(this,arguments);},doApplyEdit:function(_4ea,_4eb){var _4ec=this._cache[_4ea];this.onApplyEdit(_4ea);},removeSelectedRows:function(){if(this._canEdit){this.edit.apply();var fx=dojo.hitch(this,function(_4ed){if(_4ed.length){dojo.forEach(_4ed,this.store.deleteItem,this.store);this.selection.clear();}});if(this.allItemsSelected){this.store.fetch({query:this.query,queryOptions:this.queryOptions,onComplete:fx});}else{fx(this.selection.getSelected());}}}});dojox.grid.DataGrid.cell_markupFactory=function(_4ee,node,_4ef){var _4f0=dojo.trim(dojo.attr(node,"field")||"");if(_4f0){_4ef.field=_4f0;}_4ef.field=_4ef.field||_4ef.name;var _4f1=dojo.trim(dojo.attr(node,"fields")||"");if(_4f1){_4ef.fields=_4f1.split(",");}if(_4ee){_4ee(node,_4ef);}};dojox.grid.DataGrid.markupFactory=function(_4f2,node,ctor,_4f3){return dojox.grid._Grid.markupFactory(_4f2,node,ctor,dojo.partial(dojox.grid.DataGrid.cell_markupFactory,_4f3));};}dojo.i18n._preloadLocalizations("dojox.grid.nls.DataGrid",["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]);
Index: trunk/web/dojo/dojox/grid/DataSelection.js
===================================================================
--- trunk/web/dojo/dojox/grid/DataSelection.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/DataSelection.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.DataSelection"]){
+dojo._hasResource["dojox.grid.DataSelection"]=true;
+dojo.provide("dojox.grid.DataSelection");
+dojo.require("dojox.grid.Selection");
+dojo.declare("dojox.grid.DataSelection",dojox.grid.Selection,{getFirstSelected:function(){
+var _1=dojox.grid.Selection.prototype.getFirstSelected.call(this);
+if(_1==-1){
+return null;
+}
+return this.grid.getItem(_1);
+},getNextSelected:function(_2){
+var _3=this.grid.getItemIndex(_2);
+var _4=dojox.grid.Selection.prototype.getNextSelected.call(this,_3);
+if(_4==-1){
+return null;
+}
+return this.grid.getItem(_4);
+},getSelected:function(){
+var _5=[];
+for(var i=0,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+_5.push(this.grid.getItem(i));
+}
+}
+return _5;
+},addToSelection:function(_6){
+if(this.mode=="none"){
+return;
+}
+var _7=null;
+if(typeof _6=="number"||typeof _6=="string"){
+_7=_6;
+}else{
+_7=this.grid.getItemIndex(_6);
+}
+dojox.grid.Selection.prototype.addToSelection.call(this,_7);
+},deselect:function(_8){
+if(this.mode=="none"){
+return;
+}
+var _9=null;
+if(typeof _8=="number"||typeof _8=="string"){
+_9=_8;
+}else{
+_9=this.grid.getItemIndex(_8);
+}
+dojox.grid.Selection.prototype.deselect.call(this,_9);
+},deselectAll:function(_a){
+var _b=null;
+if(_a||typeof _a=="number"){
+if(typeof _a=="number"||typeof _a=="string"){
+_b=_a;
+}else{
+_b=this.grid.getItemIndex(_a);
+}
+dojox.grid.Selection.prototype.deselectAll.call(this,_b);
+}else{
+this.inherited(arguments);
+}
+}});
+}
Index: trunk/web/dojo/dojox/grid/_EditManager.js
===================================================================
--- trunk/web/dojo/dojox/grid/_EditManager.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_EditManager.js	(revision 9)
@@ -0,0 +1,131 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._EditManager"]){
+dojo._hasResource["dojox.grid._EditManager"]=true;
+dojo.provide("dojox.grid._EditManager");
+dojo.require("dojox.grid.util");
+dojo.declare("dojox.grid._EditManager",null,{constructor:function(_1){
+this.grid=_1;
+this.connections=[];
+if(dojo.isIE){
+this.connections.push(dojo.connect(document.body,"onfocus",dojo.hitch(this,"_boomerangFocus")));
+}
+},info:{},destroy:function(){
+dojo.forEach(this.connections,dojo.disconnect);
+},cellFocus:function(_2,_3){
+if(this.grid.singleClickEdit||this.isEditRow(_3)){
+this.setEditCell(_2,_3);
+}else{
+this.apply();
+}
+if(this.isEditing()||(_2&&_2.editable&&_2.alwaysEditing)){
+this._focusEditor(_2,_3);
+}
+},rowClick:function(e){
+if(this.isEditing()&&!this.isEditRow(e.rowIndex)){
+this.apply();
+}
+},styleRow:function(_4){
+if(_4.index==this.info.rowIndex){
+_4.customClasses+=" dojoxGridRowEditing";
+}
+},dispatchEvent:function(e){
+var c=e.cell,ed=(c&&c["editable"])?c:0;
+return ed&&ed.dispatchEvent(e.dispatch,e);
+},isEditing:function(){
+return this.info.rowIndex!==undefined;
+},isEditCell:function(_5,_6){
+return (this.info.rowIndex===_5)&&(this.info.cell.index==_6);
+},isEditRow:function(_7){
+return this.info.rowIndex===_7;
+},setEditCell:function(_8,_9){
+if(!this.isEditCell(_9,_8.index)&&this.grid.canEdit&&this.grid.canEdit(_8,_9)){
+this.start(_8,_9,this.isEditRow(_9)||_8.editable);
+}
+},_focusEditor:function(_a,_b){
+dojox.grid.util.fire(_a,"focus",[_b]);
+},focusEditor:function(){
+if(this.isEditing()){
+this._focusEditor(this.info.cell,this.info.rowIndex);
+}
+},_boomerangWindow:500,_shouldCatchBoomerang:function(){
+return this._catchBoomerang>new Date().getTime();
+},_boomerangFocus:function(){
+if(this._shouldCatchBoomerang()){
+this.grid.focus.focusGrid();
+this.focusEditor();
+this._catchBoomerang=0;
+}
+},_doCatchBoomerang:function(){
+if(dojo.isIE){
+this._catchBoomerang=new Date().getTime()+this._boomerangWindow;
+}
+},start:function(_c,_d,_e){
+this.grid.beginUpdate();
+this.editorApply();
+if(this.isEditing()&&!this.isEditRow(_d)){
+this.applyRowEdit();
+this.grid.updateRow(_d);
+}
+if(_e){
+this.info={cell:_c,rowIndex:_d};
+this.grid.doStartEdit(_c,_d);
+this.grid.updateRow(_d);
+}else{
+this.info={};
+}
+this.grid.endUpdate();
+this.grid.focus.focusGrid();
+this._focusEditor(_c,_d);
+this._doCatchBoomerang();
+},_editorDo:function(_f){
+var c=this.info.cell;
+if(c&&c.editable){
+c[_f](this.info.rowIndex);
+}
+},editorApply:function(){
+this._editorDo("apply");
+},editorCancel:function(){
+this._editorDo("cancel");
+},applyCellEdit:function(_10,_11,_12){
+if(this.grid.canEdit(_11,_12)){
+this.grid.doApplyCellEdit(_10,_12,_11.field);
+}
+},applyRowEdit:function(){
+this.grid.doApplyEdit(this.info.rowIndex,this.info.cell.field);
+},apply:function(){
+if(this.isEditing()){
+this.grid.beginUpdate();
+this.editorApply();
+this.applyRowEdit();
+this.info={};
+this.grid.endUpdate();
+this.grid.focus.focusGrid();
+this._doCatchBoomerang();
+}
+},cancel:function(){
+if(this.isEditing()){
+this.grid.beginUpdate();
+this.editorCancel();
+this.info={};
+this.grid.endUpdate();
+this.grid.focus.focusGrid();
+this._doCatchBoomerang();
+}
+},save:function(_13,_14){
+var c=this.info.cell;
+if(this.isEditRow(_13)&&(!_14||c.view==_14)&&c.editable){
+c.save(c,this.info.rowIndex);
+}
+},restore:function(_15,_16){
+var c=this.info.cell;
+if(this.isEditRow(_16)&&c.view==_15&&c.editable){
+c.restore(c,this.info.rowIndex);
+}
+}});
+}
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ja-jp.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ja-jp.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ja-jp.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ja-jp");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja_jp");dijit.nls.loading.ja_jp={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_cs.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_cs.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_cs.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_cs");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.cs");dijit.nls.loading.cs={"loadingState":"Probíhá načítání...","errorState":"Omlouváme se, došlo k chybě"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_es.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_es.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_es.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_es");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es");dijit.nls.loading.es={"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ko.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ko.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ko.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ko");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko");dijit.nls.loading.ko={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_zh-tw.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_zh-tw.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_zh-tw.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_zh-tw");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_tw");dijit.nls.loading.zh_tw={"loadingState":"載入中...","errorState":"抱歉，發生錯誤"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_es-es.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_es-es.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_es-es.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_es-es");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es_es");dijit.nls.loading.es_es={"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_fr-fr.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_fr-fr.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_fr-fr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fr-fr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr_fr");dijit.nls.loading.fr_fr={"loadingState":"Chargement...","errorState":"Une erreur est survenue"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_hu.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_hu.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_hu.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_hu");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.hu");dijit.nls.loading.hu={"loadingState":"Betöltés...","errorState":"Sajnálom, hiba történt"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_sk.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_sk.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_sk.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_sk");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sk");dijit.nls.loading.sk={"loadingState":"Zavádzanie...","errorState":"Nastala chyba"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_de-de.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_de-de.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_de-de.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_de-de");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de_de");dijit.nls.loading.de_de={"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_zh-cn.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_zh-cn.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_zh-cn.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_zh-cn");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_cn");dijit.nls.loading.zh_cn={"loadingState":"正在加载...","errorState":"对不起，发生了错误"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_nl-nl.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_nl-nl.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_nl-nl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_nl-nl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl_nl");dijit.nls.loading.nl_nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_pt-br.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_pt-br.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_pt-br.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pt-br");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_br");dijit.nls.loading.pt_br={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ru.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ru.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ru.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ru");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ru");dijit.nls.loading.ru={"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_en-us.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_en-us.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_en-us.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_en-us");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_us");dijit.nls.loading.en_us={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_en-gb.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_en-gb.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_en-gb.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_en-gb");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_gb");dijit.nls.loading.en_gb={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_fi-fi.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_fi-fi.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_fi-fi.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fi-fi");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi_fi");dijit.nls.loading.fi_fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_nb.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_nb.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_nb.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_nb");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nb");dijit.nls.loading.nb={"loadingState":"Laster inn...","errorState":"Det oppsto en feil"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_el.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_el.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_el.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_el");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.el");dijit.nls.loading.el={"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ar.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ar.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ar.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ar");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ar");dijit.nls.loading.ar={"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_en.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_en.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_en.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_en");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en");dijit.nls.loading.en={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_pt-pt.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_pt-pt.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_pt-pt.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pt-pt");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_pt");dijit.nls.loading.pt_pt={"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_fr.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_fr.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_fr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr");dijit.nls.loading.fr={"loadingState":"Chargement...","errorState":"Une erreur est survenue"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_nl.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_nl.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_nl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_nl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl");dijit.nls.loading.nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_pl.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_pl.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_pl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pl");dijit.nls.loading.pl={"loadingState":"Ładowanie...","errorState":"Niestety, wystąpił błąd"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_th.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_th.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_th.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_th");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.th");dijit.nls.loading.th={"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_it.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_it.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_it.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_it");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it");dijit.nls.loading.it={"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_sl.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_sl.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_sl.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_sl");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sl");dijit.nls.loading.sl={"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_zh.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_zh.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_zh.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_zh");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh");dijit.nls.loading.zh={"loadingState":"正在加载...","errorState":"对不起，发生了错误"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ROOT.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ROOT.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ROOT.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ROOT");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ROOT");dijit.nls.loading.ROOT={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ca.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ca.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ca.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ca");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ca");dijit.nls.loading.ca={"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_pt.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_pt.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_pt.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_pt");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt");dijit.nls.loading.pt={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ko-kr.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ko-kr.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ko-kr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ko-kr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko_kr");dijit.nls.loading.ko_kr={"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_da.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_da.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_da.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_da");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.da");dijit.nls.loading.da={"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_tr.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_tr.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_tr.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_tr");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.tr");dijit.nls.loading.tr={"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_it-it.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_it-it.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_it-it.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_it-it");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it_it");dijit.nls.loading.it_it={"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_sv.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_sv.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_sv.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_sv");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sv");dijit.nls.loading.sv={"loadingState":"Läser in...","errorState":"Det uppstod ett fel."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_de.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_de.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_de.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_de");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de");dijit.nls.loading.de={"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_ja.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_ja.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_ja.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_ja");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja");dijit.nls.loading.ja={"loadingState":"ロード中...","errorState":"エラーが発生しました。"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_he.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_he.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_he.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_he");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he");dijit.nls.loading.he={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_fi.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_fi.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_fi.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_fi");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi");dijit.nls.loading.fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_he-il.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_he-il.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_he-il.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_he-il");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.he_il");dijit.nls.loading.he_il={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};
Index: trunk/web/dojo/dojox/grid/nls/DataGrid_xx.js
===================================================================
--- trunk/web/dojo/dojox/grid/nls/DataGrid_xx.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/nls/DataGrid_xx.js	(revision 9)
@@ -0,0 +1 @@
+dojo.provide("dojox.grid.nls.DataGrid_xx");dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.xx");dijit.nls.loading.xx={"loadingState":"Loading...","errorState":"Sorry, an error occurred"};
Index: trunk/web/dojo/dojox/grid/compatGrid.tar.gz
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/compatGrid.tar.gz
===================================================================
--- trunk/web/dojo/dojox/grid/compatGrid.tar.gz	(revision 0)
+++ trunk/web/dojo/dojox/grid/compatGrid.tar.gz	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/compatGrid.tar.gz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/README
===================================================================
--- trunk/web/dojo/dojox/grid/README	(revision 0)
+++ trunk/web/dojo/dojox/grid/README	(revision 9)
@@ -0,0 +1,105 @@
+-------------------------------------------------------------------------------
+dojox.grid
+-------------------------------------------------------------------------------
+Version 1.00
+Release date: 10/04/2007
+-------------------------------------------------------------------------------
+Project state:
+beta
+-------------------------------------------------------------------------------
+Credits
+	Scott J. Miles (sjmiles@activegrid.com)
+	Steve Orvell (sorvell@activegrid.com)
+	Bryan Forbes (bryan AT reigndropsfall.net)
+	Nathan Toone (toonetown AT dojotoolkit.org)
+-------------------------------------------------------------------------------
+Project description
+
+TurboGrid has been made available in Dojo and is now the dojox.grid!
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core
+Dojo Base (dnd)
+Dijit Templated Widget
+dojox.html (metrics)
+-------------------------------------------------------------------------------
+Documentation
+
+None available for this version yet.
+
+See http://www.turboajax.com/products/turbogrid/ for legacy documentation.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/grid/*
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/html/*
+
+Install into the following directory structure:
+/dojox/grid/
+/dojox/html/
+
+...which should be at the same level as your Dojo checkout.
+
+If you wish us use the old (compat / 1.2) grid, you can untar the
+compatGrid.tar.gz archive.  This version of the grid is no longer maintained
+or updated - but should work with any newer version of the dojo library.
+-------------------------------------------------------------------------------
+
+
+
+-------------------------------------------------------------------------------
+Sub-projects:									  
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+1. dojox.grid.EnhancedGrid
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 12/11/2009
+-------------------------------------------------------------------------------
+Project state
+
+alpha
+-------------------------------------------------------------------------------
+Credits
+	David Schwartz (drschwar@us.ibm.com)
+	Wei Huang (hwcdl@cn.ibm.com)
+	Guang Hong (hongg@cn.ibm.com)
+-------------------------------------------------------------------------------
+Project description
+
+Enhanced Grid inherits base DataGrid and provides the following enhanced features:
+
+ 1. Nested Sorting
+ 2. Built-in declarative Indirect Selection (radio buttons and check boxes)
+ 3. Declarative context menu
+ 4. Selecting rows/columns via swipe
+ 5. Drag-n-drop: columns,rows - MOVE
+
+-------------------------------------------------------------------------------
+Dependencies
+
+Dojo Core, dojox.grid.DataGrid
+-------------------------------------------------------------------------------
+Documentation
+
+http://docs.dojocampus.org/dojox/grid/EnhancedGrid
+-------------------------------------------------------------------------------
+Installation instructions
+
+Same as dojox.grid, for detail sample usages, please refer to /dojox/grid/tests/enhanced/test_enhanced_grid.html
+-------------------------------------------------------------------------------
+Known issues
+
+ - Enhanced Grid doesn't support complicated layouts (e.g. multiple rows in column header) and TreeGrid(SubGrid).
+ - Indirect Selection is not compatible with "autoHeight" mode due to a known issue in DataGrid(http://trac.dojotoolkit.org/ticket/11101)
+-------------------------------------------------------------------------------
+Possible future changes
+
+ 1. A rich set of new features to be added, e.g. Exporter, Printer, Filter, Pagination ...
+ 2. An activity of setting up a plug-in platform is in progress for future Grid versions, 
+   by then all the EnhancedGrid features will be re-cast as separate plug-ins loaded on demand.
+-------------------------------------------------------------------------------
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/_Scroller.js
===================================================================
--- trunk/web/dojo/dojox/grid/_Scroller.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_Scroller.js	(revision 9)
@@ -0,0 +1,403 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Scroller"]){
+dojo._hasResource["dojox.grid._Scroller"]=true;
+dojo.provide("dojox.grid._Scroller");
+(function(){
+var _1=function(_2){
+var i=0,n,p=_2.parentNode;
+while((n=p.childNodes[i++])){
+if(n==_2){
+return i-1;
+}
+}
+return -1;
+};
+var _3=function(_4){
+if(!_4){
+return;
+}
+var _5=function(_6){
+return _6.domNode&&dojo.isDescendant(_6.domNode,_4,true);
+};
+var ws=dijit.registry.filter(_5);
+for(var i=0,w;(w=ws[i]);i++){
+w.destroy();
+}
+delete ws;
+};
+var _7=function(_8){
+var _9=dojo.byId(_8);
+return (_9&&_9.tagName?_9.tagName.toLowerCase():"");
+};
+var _a=function(_b,_c){
+var _d=[];
+var i=0,n;
+while((n=_b.childNodes[i])){
+i++;
+if(_7(n)==_c){
+_d.push(n);
+}
+}
+return _d;
+};
+var _e=function(_f){
+return _a(_f,"div");
+};
+dojo.declare("dojox.grid._Scroller",null,{constructor:function(_10){
+this.setContentNodes(_10);
+this.pageHeights=[];
+this.pageNodes=[];
+this.stack=[];
+},rowCount:0,defaultRowHeight:32,keepRows:100,contentNode:null,scrollboxNode:null,defaultPageHeight:0,keepPages:10,pageCount:0,windowHeight:0,firstVisibleRow:0,lastVisibleRow:0,averageRowHeight:0,page:0,pageTop:0,init:function(_11,_12,_13){
+switch(arguments.length){
+case 3:
+this.rowsPerPage=_13;
+case 2:
+this.keepRows=_12;
+case 1:
+this.rowCount=_11;
+default:
+break;
+}
+this.defaultPageHeight=this.defaultRowHeight*this.rowsPerPage;
+this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);
+this.setKeepInfo(this.keepRows);
+this.invalidate();
+if(this.scrollboxNode){
+this.scrollboxNode.scrollTop=0;
+this.scroll(0);
+this.scrollboxNode.onscroll=dojo.hitch(this,"onscroll");
+}
+},_getPageCount:function(_14,_15){
+return _14?(Math.ceil(_14/_15)||1):0;
+},destroy:function(){
+this.invalidateNodes();
+delete this.contentNodes;
+delete this.contentNode;
+delete this.scrollboxNode;
+},setKeepInfo:function(_16){
+this.keepRows=_16;
+this.keepPages=!this.keepRows?this.keepPages:Math.max(Math.ceil(this.keepRows/this.rowsPerPage),2);
+},setContentNodes:function(_17){
+this.contentNodes=_17;
+this.colCount=(this.contentNodes?this.contentNodes.length:0);
+this.pageNodes=[];
+for(var i=0;i<this.colCount;i++){
+this.pageNodes[i]=[];
+}
+},getDefaultNodes:function(){
+return this.pageNodes[0]||[];
+},invalidate:function(){
+this._invalidating=true;
+this.invalidateNodes();
+this.pageHeights=[];
+this.height=(this.pageCount?(this.pageCount-1)*this.defaultPageHeight+this.calcLastPageHeight():0);
+this.resize();
+this._invalidating=false;
+},updateRowCount:function(_18){
+this.invalidateNodes();
+this.rowCount=_18;
+var _19=this.pageCount;
+if(_19===0){
+this.height=1;
+}
+this.pageCount=this._getPageCount(this.rowCount,this.rowsPerPage);
+if(this.pageCount<_19){
+for(var i=_19-1;i>=this.pageCount;i--){
+this.height-=this.getPageHeight(i);
+delete this.pageHeights[i];
+}
+}else{
+if(this.pageCount>_19){
+this.height+=this.defaultPageHeight*(this.pageCount-_19-1)+this.calcLastPageHeight();
+}
+}
+this.resize();
+},pageExists:function(_1a){
+return Boolean(this.getDefaultPageNode(_1a));
+},measurePage:function(_1b){
+if(this.grid.rowHeight){
+var _1c=this.grid.rowHeight+1;
+return ((_1b+1)*this.rowsPerPage>this.rowCount?this.rowCount-_1b*this.rowsPerPage:this.rowsPerPage)*_1c;
+}
+var n=this.getDefaultPageNode(_1b);
+return (n&&n.innerHTML)?n.offsetHeight:undefined;
+},positionPage:function(_1d,_1e){
+for(var i=0;i<this.colCount;i++){
+this.pageNodes[i][_1d].style.top=_1e+"px";
+}
+},repositionPages:function(_1f){
+var _20=this.getDefaultNodes();
+var _21=0;
+for(var i=0;i<this.stack.length;i++){
+_21=Math.max(this.stack[i],_21);
+}
+var n=_20[_1f];
+var y=(n?this.getPageNodePosition(n)+this.getPageHeight(_1f):0);
+for(var p=_1f+1;p<=_21;p++){
+n=_20[p];
+if(n){
+if(this.getPageNodePosition(n)==y){
+return;
+}
+this.positionPage(p,y);
+}
+y+=this.getPageHeight(p);
+}
+},installPage:function(_22){
+for(var i=0;i<this.colCount;i++){
+this.contentNodes[i].appendChild(this.pageNodes[i][_22]);
+}
+},preparePage:function(_23,_24){
+var p=(_24?this.popPage():null);
+for(var i=0;i<this.colCount;i++){
+var _25=this.pageNodes[i];
+var _26=(p===null?this.createPageNode():this.invalidatePageNode(p,_25));
+_26.pageIndex=_23;
+_25[_23]=_26;
+}
+},renderPage:function(_27){
+var _28=[];
+var i,j;
+for(i=0;i<this.colCount;i++){
+_28[i]=this.pageNodes[i][_27];
+}
+for(i=0,j=_27*this.rowsPerPage;(i<this.rowsPerPage)&&(j<this.rowCount);i++,j++){
+this.renderRow(j,_28);
+}
+},removePage:function(_29){
+for(var i=0,j=_29*this.rowsPerPage;i<this.rowsPerPage;i++,j++){
+this.removeRow(j);
+}
+},destroyPage:function(_2a){
+for(var i=0;i<this.colCount;i++){
+var n=this.invalidatePageNode(_2a,this.pageNodes[i]);
+if(n){
+dojo.destroy(n);
+}
+}
+},pacify:function(_2b){
+},pacifying:false,pacifyTicks:200,setPacifying:function(_2c){
+if(this.pacifying!=_2c){
+this.pacifying=_2c;
+this.pacify(this.pacifying);
+}
+},startPacify:function(){
+this.startPacifyTicks=new Date().getTime();
+},doPacify:function(){
+var _2d=(new Date().getTime()-this.startPacifyTicks)>this.pacifyTicks;
+this.setPacifying(true);
+this.startPacify();
+return _2d;
+},endPacify:function(){
+this.setPacifying(false);
+},resize:function(){
+if(this.scrollboxNode){
+this.windowHeight=this.scrollboxNode.clientHeight;
+}
+for(var i=0;i<this.colCount;i++){
+dojox.grid.util.setStyleHeightPx(this.contentNodes[i],Math.max(1,this.height));
+}
+var _2e=(!this._invalidating);
+if(!_2e){
+var ah=this.grid.attr("autoHeight");
+if(typeof ah=="number"&&ah<=Math.min(this.rowsPerPage,this.rowCount)){
+_2e=true;
+}
+}
+if(_2e){
+this.needPage(this.page,this.pageTop);
+}
+var _2f=(this.page<this.pageCount-1)?this.rowsPerPage:((this.rowCount%this.rowsPerPage)||this.rowsPerPage);
+var _30=this.getPageHeight(this.page);
+this.averageRowHeight=(_30>0&&_2f>0)?(_30/_2f):0;
+},calcLastPageHeight:function(){
+if(!this.pageCount){
+return 0;
+}
+var _31=this.pageCount-1;
+var _32=((this.rowCount%this.rowsPerPage)||(this.rowsPerPage))*this.defaultRowHeight;
+this.pageHeights[_31]=_32;
+return _32;
+},updateContentHeight:function(_33){
+this.height+=_33;
+this.resize();
+},updatePageHeight:function(_34,_35){
+if(this.pageExists(_34)){
+var oh=this.getPageHeight(_34);
+var h=(this.measurePage(_34));
+if(h===undefined){
+h=oh;
+}
+this.pageHeights[_34]=h;
+if(oh!=h){
+this.updateContentHeight(h-oh);
+var ah=this.grid.attr("autoHeight");
+if((typeof ah=="number"&&ah>this.rowCount)||(ah===true&&!_35)){
+this.grid.sizeChange();
+}else{
+this.repositionPages(_34);
+}
+}
+return h;
+}
+return 0;
+},rowHeightChanged:function(_36){
+this.updatePageHeight(Math.floor(_36/this.rowsPerPage),false);
+},invalidateNodes:function(){
+while(this.stack.length){
+this.destroyPage(this.popPage());
+}
+},createPageNode:function(){
+var p=document.createElement("div");
+dojo.attr(p,"role","presentation");
+p.style.position="absolute";
+p.style[dojo._isBodyLtr()?"left":"right"]="0";
+return p;
+},getPageHeight:function(_37){
+var ph=this.pageHeights[_37];
+return (ph!==undefined?ph:this.defaultPageHeight);
+},pushPage:function(_38){
+return this.stack.push(_38);
+},popPage:function(){
+return this.stack.shift();
+},findPage:function(_39){
+var i=0,h=0;
+for(var ph=0;i<this.pageCount;i++,h+=ph){
+ph=this.getPageHeight(i);
+if(h+ph>=_39){
+break;
+}
+}
+this.page=i;
+this.pageTop=h;
+},buildPage:function(_3a,_3b,_3c){
+this.preparePage(_3a,_3b);
+this.positionPage(_3a,_3c);
+this.installPage(_3a);
+this.renderPage(_3a);
+this.pushPage(_3a);
+},needPage:function(_3d,_3e){
+var h=this.getPageHeight(_3d),oh=h;
+if(!this.pageExists(_3d)){
+this.buildPage(_3d,this.keepPages&&(this.stack.length>=this.keepPages),_3e);
+h=this.updatePageHeight(_3d,true);
+}else{
+this.positionPage(_3d,_3e);
+}
+return h;
+},onscroll:function(){
+this.scroll(this.scrollboxNode.scrollTop);
+},scroll:function(_3f){
+this.grid.scrollTop=_3f;
+if(this.colCount){
+this.startPacify();
+this.findPage(_3f);
+var h=this.height;
+var b=this.getScrollBottom(_3f);
+for(var p=this.page,y=this.pageTop;(p<this.pageCount)&&((b<0)||(y<b));p++){
+y+=this.needPage(p,y);
+}
+this.firstVisibleRow=this.getFirstVisibleRow(this.page,this.pageTop,_3f);
+this.lastVisibleRow=this.getLastVisibleRow(p-1,y,b);
+if(h!=this.height){
+this.repositionPages(p-1);
+}
+this.endPacify();
+}
+},getScrollBottom:function(_40){
+return (this.windowHeight>=0?_40+this.windowHeight:-1);
+},processNodeEvent:function(e,_41){
+var t=e.target;
+while(t&&(t!=_41)&&t.parentNode&&(t.parentNode.parentNode!=_41)){
+t=t.parentNode;
+}
+if(!t||!t.parentNode||(t.parentNode.parentNode!=_41)){
+return false;
+}
+var _42=t.parentNode;
+e.topRowIndex=_42.pageIndex*this.rowsPerPage;
+e.rowIndex=e.topRowIndex+_1(t);
+e.rowTarget=t;
+return true;
+},processEvent:function(e){
+return this.processNodeEvent(e,this.contentNode);
+},renderRow:function(_43,_44){
+},removeRow:function(_45){
+},getDefaultPageNode:function(_46){
+return this.getDefaultNodes()[_46];
+},positionPageNode:function(_47,_48){
+},getPageNodePosition:function(_49){
+return _49.offsetTop;
+},invalidatePageNode:function(_4a,_4b){
+var p=_4b[_4a];
+if(p){
+delete _4b[_4a];
+this.removePage(_4a,p);
+_3(p);
+p.innerHTML="";
+}
+return p;
+},getPageRow:function(_4c){
+return _4c*this.rowsPerPage;
+},getLastPageRow:function(_4d){
+return Math.min(this.rowCount,this.getPageRow(_4d+1))-1;
+},getFirstVisibleRow:function(_4e,_4f,_50){
+if(!this.pageExists(_4e)){
+return 0;
+}
+var row=this.getPageRow(_4e);
+var _51=this.getDefaultNodes();
+var _52=_e(_51[_4e]);
+for(var i=0,l=_52.length;i<l&&_4f<_50;i++,row++){
+_4f+=_52[i].offsetHeight;
+}
+return (row?row-1:row);
+},getLastVisibleRow:function(_53,_54,_55){
+if(!this.pageExists(_53)){
+return 0;
+}
+var _56=this.getDefaultNodes();
+var row=this.getLastPageRow(_53);
+var _57=_e(_56[_53]);
+for(var i=_57.length-1;i>=0&&_54>_55;i--,row--){
+_54-=_57[i].offsetHeight;
+}
+return row+1;
+},findTopRow:function(_58){
+var _59=this.getDefaultNodes();
+var _5a=_e(_59[this.page]);
+for(var i=0,l=_5a.length,t=this.pageTop,h;i<l;i++){
+h=_5a[i].offsetHeight;
+t+=h;
+if(t>=_58){
+this.offset=h-(t-_58);
+return i+this.page*this.rowsPerPage;
+}
+}
+return -1;
+},findScrollTop:function(_5b){
+var _5c=Math.floor(_5b/this.rowsPerPage);
+var t=0;
+var i,l;
+for(i=0;i<_5c;i++){
+t+=this.getPageHeight(i);
+}
+this.pageTop=t;
+this.needPage(_5c,this.pageTop);
+var _5d=this.getDefaultNodes();
+var _5e=_e(_5d[_5c]);
+var r=_5b-this.rowsPerPage*_5c;
+for(i=0,l=_5e.length;i<l&&i<r;i++){
+t+=_5e[i].offsetHeight;
+}
+return t;
+},dummy:0});
+})();
+}
Index: trunk/web/dojo/dojox/grid/_Grid.js
===================================================================
--- trunk/web/dojo/dojox/grid/_Grid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_Grid.js	(revision 9)
@@ -0,0 +1,727 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Grid"]){
+dojo._hasResource["dojox.grid._Grid"]=true;
+dojo.provide("dojox.grid._Grid");
+dojo.require("dijit.dijit");
+dojo.require("dijit.Menu");
+dojo.require("dojox.html.metrics");
+dojo.require("dojox.grid.util");
+dojo.require("dojox.grid._Scroller");
+dojo.require("dojox.grid._Layout");
+dojo.require("dojox.grid._View");
+dojo.require("dojox.grid._ViewManager");
+dojo.require("dojox.grid._RowManager");
+dojo.require("dojox.grid._FocusManager");
+dojo.require("dojox.grid._EditManager");
+dojo.require("dojox.grid.Selection");
+dojo.require("dojox.grid._RowSelector");
+dojo.require("dojox.grid._Events");
+dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+(function(){
+if(!dojo.isCopyKey){
+dojo.isCopyKey=dojo.dnd.getCopyKeyState;
+}
+dojo.declare("dojox.grid._Grid",[dijit._Widget,dijit._Templated,dojox.grid._Events],{templateString:"<div hidefocus=\"hidefocus\" wairole=\"grid\" dojoAttachEvent=\"onmouseout:_mouseOut\">\n\t<div class=\"dojoxGridMasterHeader\" dojoAttachPoint=\"viewsHeaderNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterView\" dojoAttachPoint=\"viewsNode\" wairole=\"presentation\"></div>\n\t<div class=\"dojoxGridMasterMessages\" style=\"display: none;\" dojoAttachPoint=\"messagesNode\"></div>\n\t<span dojoAttachPoint=\"lastFocusNode\" tabindex=\"0\"></span>\n</div>\n",classTag:"dojoxGrid",rowCount:5,keepRows:75,rowsPerPage:25,autoWidth:false,initialWidth:"",autoHeight:"",rowHeight:0,autoRender:true,defaultHeight:"15em",height:"",structure:null,elasticView:-1,singleClickEdit:false,selectionMode:"extended",rowSelector:"",columnReordering:false,headerMenu:null,placeholderLabel:"GridColumns",selectable:false,_click:null,loadingMessage:"<span class='dojoxGridLoading'>${loadingState}</span>",errorMessage:"<span class='dojoxGridError'>${errorState}</span>",noDataMessage:"",escapeHTMLInData:true,formatterScope:null,editable:false,sortInfo:0,themeable:true,_placeholders:null,_layoutClass:dojox.grid._Layout,buildRendering:function(){
+this.inherited(arguments);
+if(!this.domNode.getAttribute("tabIndex")){
+this.domNode.tabIndex="0";
+}
+this.createScroller();
+this.createLayout();
+this.createViews();
+this.createManagers();
+this.createSelection();
+this.connect(this.selection,"onSelected","onSelected");
+this.connect(this.selection,"onDeselected","onDeselected");
+this.connect(this.selection,"onChanged","onSelectionChanged");
+dojox.html.metrics.initOnFontResize();
+this.connect(dojox.html.metrics,"onFontResize","textSizeChanged");
+dojox.grid.util.funnelEvents(this.domNode,this,"doKeyEvent",dojox.grid.util.keyEvents);
+if(this.selectionMode!="none"){
+dojo.attr(this.domNode,"aria-multiselectable",this.selectionMode=="single"?"false":"true");
+}
+dojo.addClass(this.domNode,this.classTag);
+if(!this.isLeftToRight()){
+dojo.addClass(this.domNode,this.classTag+"Rtl");
+}
+},postMixInProperties:function(){
+this.inherited(arguments);
+var _1=dojo.i18n.getLocalization("dijit","loading",this.lang);
+this.loadingMessage=dojo.string.substitute(this.loadingMessage,_1);
+this.errorMessage=dojo.string.substitute(this.errorMessage,_1);
+if(this.srcNodeRef&&this.srcNodeRef.style.height){
+this.height=this.srcNodeRef.style.height;
+}
+this._setAutoHeightAttr(this.autoHeight,true);
+this.lastScrollTop=this.scrollTop=0;
+},postCreate:function(){
+this._placeholders=[];
+this._setHeaderMenuAttr(this.headerMenu);
+this._setStructureAttr(this.structure);
+this._click=[];
+this.inherited(arguments);
+if(this.domNode&&this.autoWidth&&this.initialWidth){
+this.domNode.style.width=this.initialWidth;
+}
+if(this.domNode&&!this.editable){
+dojo.attr(this.domNode,"aria-readonly","true");
+}
+},destroy:function(){
+this.domNode.onReveal=null;
+this.domNode.onSizeChange=null;
+delete this._click;
+this.edit.destroy();
+delete this.edit;
+this.views.destroyViews();
+if(this.scroller){
+this.scroller.destroy();
+delete this.scroller;
+}
+if(this.focus){
+this.focus.destroy();
+delete this.focus;
+}
+if(this.headerMenu&&this._placeholders.length){
+dojo.forEach(this._placeholders,function(p){
+p.unReplace(true);
+});
+this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+}
+this.inherited(arguments);
+},_setAutoHeightAttr:function(ah,_2){
+if(typeof ah=="string"){
+if(!ah||ah=="false"){
+ah=false;
+}else{
+if(ah=="true"){
+ah=true;
+}else{
+ah=window.parseInt(ah,10);
+}
+}
+}
+if(typeof ah=="number"){
+if(isNaN(ah)){
+ah=false;
+}
+if(ah<0){
+ah=true;
+}else{
+if(ah===0){
+ah=false;
+}
+}
+}
+this.autoHeight=ah;
+if(typeof ah=="boolean"){
+this._autoHeight=ah;
+}else{
+if(typeof ah=="number"){
+this._autoHeight=(ah>=this.get("rowCount"));
+}else{
+this._autoHeight=false;
+}
+}
+if(this._started&&!_2){
+this.render();
+}
+},_getRowCountAttr:function(){
+return this.updating&&this.invalidated&&this.invalidated.rowCount!=undefined?this.invalidated.rowCount:this.rowCount;
+},textSizeChanged:function(){
+this.render();
+},sizeChange:function(){
+this.update();
+},createManagers:function(){
+this.rows=new dojox.grid._RowManager(this);
+this.focus=new dojox.grid._FocusManager(this);
+this.edit=new dojox.grid._EditManager(this);
+},createSelection:function(){
+this.selection=new dojox.grid.Selection(this);
+},createScroller:function(){
+this.scroller=new dojox.grid._Scroller();
+this.scroller.grid=this;
+this.scroller.renderRow=dojo.hitch(this,"renderRow");
+this.scroller.removeRow=dojo.hitch(this,"rowRemoved");
+},createLayout:function(){
+this.layout=new this._layoutClass(this);
+this.connect(this.layout,"moveColumn","onMoveColumn");
+},onMoveColumn:function(){
+this.render();
+},onResizeColumn:function(_3){
+},createViews:function(){
+this.views=new dojox.grid._ViewManager(this);
+this.views.createView=dojo.hitch(this,"createView");
+},createView:function(_4,_5){
+var c=dojo.getObject(_4);
+var _6=new c({grid:this,index:_5});
+this.viewsNode.appendChild(_6.domNode);
+this.viewsHeaderNode.appendChild(_6.headerNode);
+this.views.addView(_6);
+return _6;
+},buildViews:function(){
+for(var i=0,vs;(vs=this.layout.structure[i]);i++){
+this.createView(vs.type||dojox._scopeName+".grid._View",i).setStructure(vs);
+}
+this.scroller.setContentNodes(this.views.getContentNodes());
+},_setStructureAttr:function(_7){
+var s=_7;
+if(s&&dojo.isString(s)){
+dojo.deprecated("dojox.grid._Grid.attr('structure', 'objVar')","use dojox.grid._Grid.attr('structure', objVar) instead","2.0");
+s=dojo.getObject(s);
+}
+this.structure=s;
+if(!s){
+if(this.layout.structure){
+s=this.layout.structure;
+}else{
+return;
+}
+}
+this.views.destroyViews();
+if(s!==this.layout.structure){
+this.layout.setStructure(s);
+}
+this._structureChanged();
+},setStructure:function(_8){
+dojo.deprecated("dojox.grid._Grid.setStructure(obj)","use dojox.grid._Grid.attr('structure', obj) instead.","2.0");
+this._setStructureAttr(_8);
+},getColumnTogglingItems:function(){
+return dojo.map(this.layout.cells,function(_9){
+if(!_9.menuItems){
+_9.menuItems=[];
+}
+var _a=this;
+var _b=new dijit.CheckedMenuItem({label:_9.name,checked:!_9.hidden,_gridCell:_9,onChange:function(_c){
+if(_a.layout.setColumnVisibility(this._gridCell.index,_c)){
+var _d=this._gridCell.menuItems;
+if(_d.length>1){
+dojo.forEach(_d,function(_e){
+if(_e!==this){
+_e.setAttribute("checked",_c);
+}
+},this);
+}
+_c=dojo.filter(_a.layout.cells,function(c){
+if(c.menuItems.length>1){
+dojo.forEach(c.menuItems,"item.attr('disabled', false);");
+}else{
+c.menuItems[0].attr("disabled",false);
+}
+return !c.hidden;
+});
+if(_c.length==1){
+dojo.forEach(_c[0].menuItems,"item.attr('disabled', true);");
+}
+}
+},destroy:function(){
+var _f=dojo.indexOf(this._gridCell.menuItems,this);
+this._gridCell.menuItems.splice(_f,1);
+delete this._gridCell;
+dijit.CheckedMenuItem.prototype.destroy.apply(this,arguments);
+}});
+_9.menuItems.push(_b);
+return _b;
+},this);
+},_setHeaderMenuAttr:function(_10){
+if(this._placeholders&&this._placeholders.length){
+dojo.forEach(this._placeholders,function(p){
+p.unReplace(true);
+});
+this._placeholders=[];
+}
+if(this.headerMenu){
+this.headerMenu.unBindDomNode(this.viewsHeaderNode);
+}
+this.headerMenu=_10;
+if(!_10){
+return;
+}
+this.headerMenu.bindDomNode(this.viewsHeaderNode);
+if(this.headerMenu.getPlaceholders){
+this._placeholders=this.headerMenu.getPlaceholders(this.placeholderLabel);
+}
+},setHeaderMenu:function(_11){
+dojo.deprecated("dojox.grid._Grid.setHeaderMenu(obj)","use dojox.grid._Grid.attr('headerMenu', obj) instead.","2.0");
+this._setHeaderMenuAttr(_11);
+},setupHeaderMenu:function(){
+if(this._placeholders&&this._placeholders.length){
+dojo.forEach(this._placeholders,function(p){
+if(p._replaced){
+p.unReplace(true);
+}
+p.replace(this.getColumnTogglingItems());
+},this);
+}
+},_fetch:function(_12){
+this.setScrollTop(0);
+},getItem:function(_13){
+return null;
+},showMessage:function(_14){
+if(_14){
+this.messagesNode.innerHTML=_14;
+this.messagesNode.style.display="";
+}else{
+this.messagesNode.innerHTML="";
+this.messagesNode.style.display="none";
+}
+},_structureChanged:function(){
+this.buildViews();
+if(this.autoRender&&this._started){
+this.render();
+}
+},hasLayout:function(){
+return this.layout.cells.length;
+},resize:function(_15,_16){
+this._pendingChangeSize=_15;
+this._pendingResultSize=_16;
+this.sizeChange();
+},_getPadBorder:function(){
+this._padBorder=this._padBorder||dojo._getPadBorderExtents(this.domNode);
+return this._padBorder;
+},_getHeaderHeight:function(){
+var vns=this.viewsHeaderNode.style,t=vns.display=="none"?0:this.views.measureHeader();
+vns.height=t+"px";
+this.views.normalizeHeaderNodeHeight();
+return t;
+},_resize:function(_17,_18){
+_17=_17||this._pendingChangeSize;
+_18=_18||this._pendingResultSize;
+delete this._pendingChangeSize;
+delete this._pendingResultSize;
+if(!this.domNode){
+return;
+}
+var pn=this.domNode.parentNode;
+if(!pn||pn.nodeType!=1||!this.hasLayout()||pn.style.visibility=="hidden"||pn.style.display=="none"){
+return;
+}
+var _19=this._getPadBorder();
+var hh=undefined;
+var h;
+if(this._autoHeight){
+this.domNode.style.height="auto";
+this.viewsNode.style.height="";
+}else{
+if(typeof this.autoHeight=="number"){
+h=hh=this._getHeaderHeight();
+h+=(this.scroller.averageRowHeight*this.autoHeight);
+this.domNode.style.height=h+"px";
+}else{
+if(this.domNode.clientHeight<=_19.h){
+if(pn==document.body){
+this.domNode.style.height=this.defaultHeight;
+}else{
+if(this.height){
+this.domNode.style.height=this.height;
+}else{
+this.fitTo="parent";
+}
+}
+}
+}
+}
+if(_18){
+_17=_18;
+}
+if(_17){
+dojo.marginBox(this.domNode,_17);
+this.height=this.domNode.style.height;
+delete this.fitTo;
+}else{
+if(this.fitTo=="parent"){
+h=this._parentContentBoxHeight=this._parentContentBoxHeight||dojo._getContentBox(pn).h;
+this.domNode.style.height=Math.max(0,h)+"px";
+}
+}
+var _1a=dojo.some(this.views.views,function(v){
+return v.flexCells;
+});
+if(!this._autoHeight&&(h||dojo._getContentBox(this.domNode).h)===0){
+this.viewsHeaderNode.style.display="none";
+}else{
+this.viewsHeaderNode.style.display="block";
+if(!_1a&&hh===undefined){
+hh=this._getHeaderHeight();
+}
+}
+if(_1a){
+hh=undefined;
+}
+this.adaptWidth();
+this.adaptHeight(hh);
+this.postresize();
+},adaptWidth:function(){
+var _1b=(!this.initialWidth&&this.autoWidth);
+var w=_1b?0:this.domNode.clientWidth||(this.domNode.offsetWidth-this._getPadBorder().w),vw=this.views.arrange(1,w);
+this.views.onEach("adaptWidth");
+if(_1b){
+this.domNode.style.width=vw+"px";
+}
+},adaptHeight:function(_1c){
+var t=_1c===undefined?this._getHeaderHeight():_1c;
+var h=(this._autoHeight?-1:Math.max(this.domNode.clientHeight-t,0)||0);
+this.views.onEach("setSize",[0,h]);
+this.views.onEach("adaptHeight");
+if(!this._autoHeight){
+var _1d=0,_1e=0;
+var _1f=dojo.filter(this.views.views,function(v){
+var has=v.hasHScrollbar();
+if(has){
+_1d++;
+}else{
+_1e++;
+}
+return (!has);
+});
+if(_1d>0&&_1e>0){
+dojo.forEach(_1f,function(v){
+v.adaptHeight(true);
+});
+}
+}
+if(this.autoHeight===true||h!=-1||(typeof this.autoHeight=="number"&&this.autoHeight>=this.get("rowCount"))){
+this.scroller.windowHeight=h;
+}else{
+this.scroller.windowHeight=Math.max(this.domNode.clientHeight-t,0);
+}
+},startup:function(){
+if(this._started){
+return;
+}
+this.inherited(arguments);
+if(this.autoRender){
+this.render();
+}
+},render:function(){
+if(!this.domNode){
+return;
+}
+if(!this._started){
+return;
+}
+if(!this.hasLayout()){
+this.scroller.init(0,this.keepRows,this.rowsPerPage);
+return;
+}
+this.update=this.defaultUpdate;
+this._render();
+},_render:function(){
+this.scroller.init(this.get("rowCount"),this.keepRows,this.rowsPerPage);
+this.prerender();
+this.setScrollTop(0);
+this.postrender();
+},prerender:function(){
+this.keepRows=this._autoHeight?0:this.keepRows;
+this.scroller.setKeepInfo(this.keepRows);
+this.views.render();
+this._resize();
+},postrender:function(){
+this.postresize();
+this.focus.initFocusView();
+dojo.setSelectable(this.domNode,this.selectable);
+},postresize:function(){
+if(this._autoHeight){
+var _20=Math.max(this.views.measureContent())+"px";
+this.viewsNode.style.height=_20;
+}
+},renderRow:function(_21,_22){
+this.views.renderRow(_21,_22,this._skipRowRenormalize);
+},rowRemoved:function(_23){
+this.views.rowRemoved(_23);
+},invalidated:null,updating:false,beginUpdate:function(){
+this.invalidated=[];
+this.updating=true;
+},endUpdate:function(){
+this.updating=false;
+var i=this.invalidated,r;
+if(i.all){
+this.update();
+}else{
+if(i.rowCount!=undefined){
+this.updateRowCount(i.rowCount);
+}else{
+for(r in i){
+this.updateRow(Number(r));
+}
+}
+}
+this.invalidated=[];
+},defaultUpdate:function(){
+if(!this.domNode){
+return;
+}
+if(this.updating){
+this.invalidated.all=true;
+return;
+}
+this.lastScrollTop=this.scrollTop;
+this.prerender();
+this.scroller.invalidateNodes();
+this.setScrollTop(this.lastScrollTop);
+this.postrender();
+},update:function(){
+this.render();
+},updateRow:function(_24){
+_24=Number(_24);
+if(this.updating){
+this.invalidated[_24]=true;
+}else{
+this.views.updateRow(_24);
+this.scroller.rowHeightChanged(_24);
+}
+},updateRows:function(_25,_26){
+_25=Number(_25);
+_26=Number(_26);
+var i;
+if(this.updating){
+for(i=0;i<_26;i++){
+this.invalidated[i+_25]=true;
+}
+}else{
+for(i=0;i<_26;i++){
+this.views.updateRow(i+_25,this._skipRowRenormalize);
+}
+this.scroller.rowHeightChanged(_25);
+}
+},updateRowCount:function(_27){
+if(this.updating){
+this.invalidated.rowCount=_27;
+}else{
+this.rowCount=_27;
+this._setAutoHeightAttr(this.autoHeight,true);
+if(this.layout.cells.length){
+this.scroller.updateRowCount(_27);
+}
+this._resize();
+if(this.layout.cells.length){
+this.setScrollTop(this.scrollTop);
+}
+}
+},updateRowStyles:function(_28){
+this.views.updateRowStyles(_28);
+},getRowNode:function(_29){
+if(this.focus.focusView&&!(this.focus.focusView instanceof dojox.grid._RowSelector)){
+return this.focus.focusView.rowNodes[_29];
+}else{
+for(var i=0,_2a;(_2a=this.views.views[i]);i++){
+if(!(_2a instanceof dojox.grid._RowSelector)){
+return _2a.rowNodes[_29];
+}
+}
+}
+return null;
+},rowHeightChanged:function(_2b){
+this.views.renormalizeRow(_2b);
+this.scroller.rowHeightChanged(_2b);
+},fastScroll:true,delayScroll:false,scrollRedrawThreshold:(dojo.isIE?100:50),scrollTo:function(_2c){
+if(!this.fastScroll){
+this.setScrollTop(_2c);
+return;
+}
+var _2d=Math.abs(this.lastScrollTop-_2c);
+this.lastScrollTop=_2c;
+if(_2d>this.scrollRedrawThreshold||this.delayScroll){
+this.delayScroll=true;
+this.scrollTop=_2c;
+this.views.setScrollTop(_2c);
+if(this._pendingScroll){
+window.clearTimeout(this._pendingScroll);
+}
+var _2e=this;
+this._pendingScroll=window.setTimeout(function(){
+delete _2e._pendingScroll;
+_2e.finishScrollJob();
+},200);
+}else{
+this.setScrollTop(_2c);
+}
+},finishScrollJob:function(){
+this.delayScroll=false;
+this.setScrollTop(this.scrollTop);
+},setScrollTop:function(_2f){
+this.scroller.scroll(this.views.setScrollTop(_2f));
+},scrollToRow:function(_30){
+this.setScrollTop(this.scroller.findScrollTop(_30)+1);
+},styleRowNode:function(_31,_32){
+if(_32){
+this.rows.styleRowNode(_31,_32);
+}
+},_mouseOut:function(e){
+this.rows.setOverRow(-2);
+},getCell:function(_33){
+return this.layout.cells[_33];
+},setCellWidth:function(_34,_35){
+this.getCell(_34).unitWidth=_35;
+},getCellName:function(_36){
+return "Cell "+_36.index;
+},canSort:function(_37){
+},sort:function(){
+},getSortAsc:function(_38){
+_38=_38==undefined?this.sortInfo:_38;
+return Boolean(_38>0);
+},getSortIndex:function(_39){
+_39=_39==undefined?this.sortInfo:_39;
+return Math.abs(_39)-1;
+},setSortIndex:function(_3a,_3b){
+var si=_3a+1;
+if(_3b!=undefined){
+si*=(_3b?1:-1);
+}else{
+if(this.getSortIndex()==_3a){
+si=-this.sortInfo;
+}
+}
+this.setSortInfo(si);
+},setSortInfo:function(_3c){
+if(this.canSort(_3c)){
+this.sortInfo=_3c;
+this.sort();
+this.update();
+}
+},doKeyEvent:function(e){
+e.dispatch="do"+e.type;
+this.onKeyEvent(e);
+},_dispatch:function(m,e){
+if(m in this){
+return this[m](e);
+}
+return false;
+},dispatchKeyEvent:function(e){
+this._dispatch(e.dispatch,e);
+},dispatchContentEvent:function(e){
+this.edit.dispatchEvent(e)||e.sourceView.dispatchContentEvent(e)||this._dispatch(e.dispatch,e);
+},dispatchHeaderEvent:function(e){
+e.sourceView.dispatchHeaderEvent(e)||this._dispatch("doheader"+e.type,e);
+},dokeydown:function(e){
+this.onKeyDown(e);
+},doclick:function(e){
+if(e.cellNode){
+this.onCellClick(e);
+}else{
+this.onRowClick(e);
+}
+},dodblclick:function(e){
+if(e.cellNode){
+this.onCellDblClick(e);
+}else{
+this.onRowDblClick(e);
+}
+},docontextmenu:function(e){
+if(e.cellNode){
+this.onCellContextMenu(e);
+}else{
+this.onRowContextMenu(e);
+}
+},doheaderclick:function(e){
+if(e.cellNode){
+this.onHeaderCellClick(e);
+}else{
+this.onHeaderClick(e);
+}
+},doheaderdblclick:function(e){
+if(e.cellNode){
+this.onHeaderCellDblClick(e);
+}else{
+this.onHeaderDblClick(e);
+}
+},doheadercontextmenu:function(e){
+if(e.cellNode){
+this.onHeaderCellContextMenu(e);
+}else{
+this.onHeaderContextMenu(e);
+}
+},doStartEdit:function(_3d,_3e){
+this.onStartEdit(_3d,_3e);
+},doApplyCellEdit:function(_3f,_40,_41){
+this.onApplyCellEdit(_3f,_40,_41);
+},doCancelEdit:function(_42){
+this.onCancelEdit(_42);
+},doApplyEdit:function(_43){
+this.onApplyEdit(_43);
+},addRow:function(){
+this.updateRowCount(this.get("rowCount")+1);
+},removeSelectedRows:function(){
+if(this.allItemsSelected){
+this.updateRowCount(0);
+}else{
+this.updateRowCount(Math.max(0,this.get("rowCount")-this.selection.getSelected().length));
+}
+this.selection.clear();
+}});
+dojox.grid._Grid.markupFactory=function(_44,_45,_46,_47){
+var d=dojo;
+var _48=function(n){
+var w=d.attr(n,"width")||"auto";
+if((w!="auto")&&(w.slice(-2)!="em")&&(w.slice(-1)!="%")){
+w=parseInt(w,10)+"px";
+}
+return w;
+};
+if(!_44.structure&&_45.nodeName.toLowerCase()=="table"){
+_44.structure=d.query("> colgroup",_45).map(function(cg){
+var sv=d.attr(cg,"span");
+var v={noscroll:(d.attr(cg,"noscroll")=="true")?true:false,__span:(!!sv?parseInt(sv,10):1),cells:[]};
+if(d.hasAttr(cg,"width")){
+v.width=_48(cg);
+}
+return v;
+});
+if(!_44.structure.length){
+_44.structure.push({__span:Infinity,cells:[]});
+}
+d.query("thead > tr",_45).forEach(function(tr,_49){
+var _4a=0;
+var _4b=0;
+var _4c;
+var _4d=null;
+d.query("> th",tr).map(function(th){
+if(!_4d){
+_4c=0;
+_4d=_44.structure[0];
+}else{
+if(_4a>=(_4c+_4d.__span)){
+_4b++;
+_4c+=_4d.__span;
+var _4e=_4d;
+_4d=_44.structure[_4b];
+}
+}
+var _4f={name:d.trim(d.attr(th,"name")||th.innerHTML),colSpan:parseInt(d.attr(th,"colspan")||1,10),type:d.trim(d.attr(th,"cellType")||""),id:d.trim(d.attr(th,"id")||"")};
+_4a+=_4f.colSpan;
+var _50=d.attr(th,"rowspan");
+if(_50){
+_4f.rowSpan=_50;
+}
+if(d.hasAttr(th,"width")){
+_4f.width=_48(th);
+}
+if(d.hasAttr(th,"relWidth")){
+_4f.relWidth=window.parseInt(dojo.attr(th,"relWidth"),10);
+}
+if(d.hasAttr(th,"hidden")){
+_4f.hidden=d.attr(th,"hidden")=="true";
+}
+if(_47){
+_47(th,_4f);
+}
+_4f.type=_4f.type?dojo.getObject(_4f.type):dojox.grid.cells.Cell;
+if(_4f.type&&_4f.type.markupFactory){
+_4f.type.markupFactory(th,_4f);
+}
+if(!_4d.cells[_49]){
+_4d.cells[_49]=[];
+}
+_4d.cells[_49].push(_4f);
+});
+});
+}
+return new _46(_44,_45);
+};
+})();
+}
Index: trunk/web/dojo/dojox/grid/Selection.js
===================================================================
--- trunk/web/dojo/dojox/grid/Selection.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/Selection.js	(revision 9)
@@ -0,0 +1,209 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.Selection"]){
+dojo._hasResource["dojox.grid.Selection"]=true;
+dojo.provide("dojox.grid.Selection");
+dojo.declare("dojox.grid.Selection",null,{constructor:function(_1){
+this.grid=_1;
+this.selected=[];
+this.setMode(_1.selectionMode);
+},mode:"extended",selected:null,updating:0,selectedIndex:-1,setMode:function(_2){
+if(this.selected.length){
+this.deselectAll();
+}
+if(_2!="extended"&&_2!="multiple"&&_2!="single"&&_2!="none"){
+this.mode="extended";
+}else{
+this.mode=_2;
+}
+},onCanSelect:function(_3){
+return this.grid.onCanSelect(_3);
+},onCanDeselect:function(_4){
+return this.grid.onCanDeselect(_4);
+},onSelected:function(_5){
+},onDeselected:function(_6){
+},onChanging:function(){
+},onChanged:function(){
+},isSelected:function(_7){
+if(this.mode=="none"){
+return false;
+}
+return this.selected[_7];
+},getFirstSelected:function(){
+if(!this.selected.length||this.mode=="none"){
+return -1;
+}
+for(var i=0,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+return i;
+}
+}
+return -1;
+},getNextSelected:function(_8){
+if(this.mode=="none"){
+return -1;
+}
+for(var i=_8+1,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+return i;
+}
+}
+return -1;
+},getSelected:function(){
+var _9=[];
+for(var i=0,l=this.selected.length;i<l;i++){
+if(this.selected[i]){
+_9.push(i);
+}
+}
+return _9;
+},getSelectedCount:function(){
+var c=0;
+for(var i=0;i<this.selected.length;i++){
+if(this.selected[i]){
+c++;
+}
+}
+return c;
+},_beginUpdate:function(){
+if(this.updating===0){
+this.onChanging();
+}
+this.updating++;
+},_endUpdate:function(){
+this.updating--;
+if(this.updating===0){
+this.onChanged();
+}
+},select:function(_a){
+if(this.mode=="none"){
+return;
+}
+if(this.mode!="multiple"){
+this.deselectAll(_a);
+this.addToSelection(_a);
+}else{
+this.toggleSelect(_a);
+}
+},addToSelection:function(_b){
+if(this.mode=="none"){
+return;
+}
+if(dojo.isArray(_b)){
+dojo.forEach(_b,this.addToSelection,this);
+return;
+}
+_b=Number(_b);
+if(this.selected[_b]){
+this.selectedIndex=_b;
+}else{
+if(this.onCanSelect(_b)!==false){
+this.selectedIndex=_b;
+var _c=this.grid.getRowNode(_b);
+if(_c){
+dojo.attr(_c,"aria-selected","true");
+}
+this._beginUpdate();
+this.selected[_b]=true;
+this.onSelected(_b);
+this._endUpdate();
+}
+}
+},deselect:function(_d){
+if(this.mode=="none"){
+return;
+}
+if(dojo.isArray(_d)){
+dojo.forEach(_d,this.deselect,this);
+return;
+}
+_d=Number(_d);
+if(this.selectedIndex==_d){
+this.selectedIndex=-1;
+}
+if(this.selected[_d]){
+if(this.onCanDeselect(_d)===false){
+return;
+}
+var _e=this.grid.getRowNode(_d);
+if(_e){
+dojo.attr(_e,"aria-selected","false");
+}
+this._beginUpdate();
+delete this.selected[_d];
+this.onDeselected(_d);
+this._endUpdate();
+}
+},setSelected:function(_f,_10){
+this[(_10?"addToSelection":"deselect")](_f);
+},toggleSelect:function(_11){
+if(dojo.isArray(_11)){
+dojo.forEach(_11,this.toggleSelect,this);
+return;
+}
+this.setSelected(_11,!this.selected[_11]);
+},_range:function(_12,_13,_14){
+var s=(_12>=0?_12:_13),e=_13;
+if(s>e){
+e=s;
+s=_13;
+}
+for(var i=s;i<=e;i++){
+_14(i);
+}
+},selectRange:function(_15,_16){
+this._range(_15,_16,dojo.hitch(this,"addToSelection"));
+},deselectRange:function(_17,_18){
+this._range(_17,_18,dojo.hitch(this,"deselect"));
+},insert:function(_19){
+this.selected.splice(_19,0,false);
+if(this.selectedIndex>=_19){
+this.selectedIndex++;
+}
+},remove:function(_1a){
+this.selected.splice(_1a,1);
+if(this.selectedIndex>=_1a){
+this.selectedIndex--;
+}
+},deselectAll:function(_1b){
+for(var i in this.selected){
+if((i!=_1b)&&(this.selected[i]===true)){
+this.deselect(i);
+}
+}
+},clickSelect:function(_1c,_1d,_1e){
+if(this.mode=="none"){
+return;
+}
+this._beginUpdate();
+if(this.mode!="extended"){
+this.select(_1c);
+}else{
+var _1f=this.selectedIndex;
+if(!_1d){
+this.deselectAll(_1c);
+}
+if(_1e){
+this.selectRange(_1f,_1c);
+}else{
+if(_1d){
+this.toggleSelect(_1c);
+}else{
+this.addToSelection(_1c);
+}
+}
+}
+this._endUpdate();
+},clickSelectEvent:function(e){
+this.clickSelect(e.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+},clear:function(){
+this._beginUpdate();
+this.deselectAll();
+this._endUpdate();
+}});
+}
Index: trunk/web/dojo/dojox/grid/_Builder.js
===================================================================
--- trunk/web/dojo/dojox/grid/_Builder.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_Builder.js	(revision 9)
@@ -0,0 +1,538 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._Builder"]){
+dojo._hasResource["dojox.grid._Builder"]=true;
+dojo.provide("dojox.grid._Builder");
+dojo.require("dojox.grid.util");
+dojo.require("dojo.dnd.Moveable");
+(function(){
+var dg=dojox.grid;
+var _1=function(td){
+return td.cellIndex>=0?td.cellIndex:dojo.indexOf(td.parentNode.cells,td);
+};
+var _2=function(tr){
+return tr.rowIndex>=0?tr.rowIndex:dojo.indexOf(tr.parentNode.childNodes,tr);
+};
+var _3=function(_4,_5){
+return _4&&((_4.rows||0)[_5]||_4.childNodes[_5]);
+};
+var _6=function(_7){
+for(var n=_7;n&&n.tagName!="TABLE";n=n.parentNode){
+}
+return n;
+};
+var _8=function(_9,_a){
+for(var n=_9;n&&_a(n);n=n.parentNode){
+}
+return n;
+};
+var _b=function(_c){
+var _d=_c.toUpperCase();
+return function(_e){
+return _e.tagName!=_d;
+};
+};
+var _f=dojox.grid.util.rowIndexTag;
+var _10=dojox.grid.util.gridViewTag;
+dg._Builder=dojo.extend(function(_11){
+if(_11){
+this.view=_11;
+this.grid=_11.grid;
+}
+},{view:null,_table:"<table class=\"dojoxGridRowTable\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" role=\"presentation\"",getTableArray:function(){
+var _12=[this._table];
+if(this.view.viewWidth){
+_12.push([" style=\"width:",this.view.viewWidth,";\""].join(""));
+}
+_12.push(">");
+return _12;
+},generateCellMarkup:function(_13,_14,_15,_16){
+var _17=[],_18;
+if(_16){
+var _19=_13.index!=_13.grid.getSortIndex()?"":_13.grid.sortInfo>0?"aria-sort=\"ascending\"":"aria-sort=\"descending\"";
+if(!_13.id){
+_13.id=this.grid.id+"Hdr"+_13.index;
+}
+_18=["<th tabIndex=\"-1\" aria-readonly=\"true\" role=\"columnheader\"",_19,"id=\"",_13.id,"\""];
+}else{
+var _1a=this.grid.editable&&!_13.editable?"aria-readonly=\"true\"":"";
+_18=["<td tabIndex=\"-1\" role=\"gridcell\"",_1a];
+}
+if(_13.colSpan){
+_18.push(" colspan=\"",_13.colSpan,"\"");
+}
+if(_13.rowSpan){
+_18.push(" rowspan=\"",_13.rowSpan,"\"");
+}
+_18.push(" class=\"dojoxGridCell ");
+if(_13.classes){
+_18.push(_13.classes," ");
+}
+if(_15){
+_18.push(_15," ");
+}
+_17.push(_18.join(""));
+_17.push("");
+_18=["\" idx=\"",_13.index,"\" style=\""];
+if(_14&&_14[_14.length-1]!=";"){
+_14+=";";
+}
+_18.push(_13.styles,_14||"",_13.hidden?"display:none;":"");
+if(_13.unitWidth){
+_18.push("width:",_13.unitWidth,";");
+}
+_17.push(_18.join(""));
+_17.push("");
+_18=["\""];
+if(_13.attrs){
+_18.push(" ",_13.attrs);
+}
+_18.push(">");
+_17.push(_18.join(""));
+_17.push("");
+_17.push(_16?"</th>":"</td>");
+return _17;
+},isCellNode:function(_1b){
+return Boolean(_1b&&_1b!=dojo.doc&&dojo.attr(_1b,"idx"));
+},getCellNodeIndex:function(_1c){
+return _1c?Number(dojo.attr(_1c,"idx")):-1;
+},getCellNode:function(_1d,_1e){
+for(var i=0,row;(row=_3(_1d.firstChild,i));i++){
+for(var j=0,_1f;(_1f=row.cells[j]);j++){
+if(this.getCellNodeIndex(_1f)==_1e){
+return _1f;
+}
+}
+}
+return null;
+},findCellTarget:function(_20,_21){
+var n=_20;
+while(n&&(!this.isCellNode(n)||(n.offsetParent&&_10 in n.offsetParent.parentNode&&n.offsetParent.parentNode[_10]!=this.view.id))&&(n!=_21)){
+n=n.parentNode;
+}
+return n!=_21?n:null;
+},baseDecorateEvent:function(e){
+e.dispatch="do"+e.type;
+e.grid=this.grid;
+e.sourceView=this.view;
+e.cellNode=this.findCellTarget(e.target,e.rowNode);
+e.cellIndex=this.getCellNodeIndex(e.cellNode);
+e.cell=(e.cellIndex>=0?this.grid.getCell(e.cellIndex):null);
+},findTarget:function(_22,_23){
+var n=_22;
+while(n&&(n!=this.domNode)&&(!(_23 in n)||(_10 in n&&n[_10]!=this.view.id))){
+n=n.parentNode;
+}
+return (n!=this.domNode)?n:null;
+},findRowTarget:function(_24){
+return this.findTarget(_24,_f);
+},isIntraNodeEvent:function(e){
+try{
+return (e.cellNode&&e.relatedTarget&&dojo.isDescendant(e.relatedTarget,e.cellNode));
+}
+catch(x){
+return false;
+}
+},isIntraRowEvent:function(e){
+try{
+var row=e.relatedTarget&&this.findRowTarget(e.relatedTarget);
+return !row&&(e.rowIndex==-1)||row&&(e.rowIndex==row.gridRowIndex);
+}
+catch(x){
+return false;
+}
+},dispatchEvent:function(e){
+if(e.dispatch in this){
+return this[e.dispatch](e);
+}
+return false;
+},domouseover:function(e){
+if(e.cellNode&&(e.cellNode!=this.lastOverCellNode)){
+this.lastOverCellNode=e.cellNode;
+this.grid.onMouseOver(e);
+}
+this.grid.onMouseOverRow(e);
+},domouseout:function(e){
+if(e.cellNode&&(e.cellNode==this.lastOverCellNode)&&!this.isIntraNodeEvent(e,this.lastOverCellNode)){
+this.lastOverCellNode=null;
+this.grid.onMouseOut(e);
+if(!this.isIntraRowEvent(e)){
+this.grid.onMouseOutRow(e);
+}
+}
+},domousedown:function(e){
+if(e.cellNode){
+this.grid.onMouseDown(e);
+}
+this.grid.onMouseDownRow(e);
+}});
+dg._ContentBuilder=dojo.extend(function(_25){
+dg._Builder.call(this,_25);
+},dg._Builder.prototype,{update:function(){
+this.prepareHtml();
+},prepareHtml:function(){
+var _26=this.grid.get,_27=this.view.structure.cells;
+for(var j=0,row;(row=_27[j]);j++){
+for(var i=0,_28;(_28=row[i]);i++){
+_28.get=_28.get||(_28.value==undefined)&&_26;
+_28.markup=this.generateCellMarkup(_28,_28.cellStyles,_28.cellClasses,false);
+if(!this.grid.editable&&_28.editable){
+this.grid.editable=true;
+}
+}
+}
+},generateHtml:function(_29,_2a){
+var _2b=this.getTableArray(),v=this.view,_2c=v.structure.cells,_2d=this.grid.getItem(_2a);
+dojox.grid.util.fire(this.view,"onBeforeRow",[_2a,_2c]);
+for(var j=0,row;(row=_2c[j]);j++){
+if(row.hidden||row.header){
+continue;
+}
+_2b.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");
+for(var i=0,_2e,m,cc,cs;(_2e=row[i]);i++){
+m=_2e.markup;
+cc=_2e.customClasses=[];
+cs=_2e.customStyles=[];
+m[5]=_2e.format(_2a,_2d);
+m[1]=cc.join(" ");
+m[3]=cs.join(";");
+_2b.push.apply(_2b,m);
+}
+_2b.push("</tr>");
+}
+_2b.push("</table>");
+return _2b.join("");
+},decorateEvent:function(e){
+e.rowNode=this.findRowTarget(e.target);
+if(!e.rowNode){
+return false;
+}
+e.rowIndex=e.rowNode[_f];
+this.baseDecorateEvent(e);
+e.cell=this.grid.getCell(e.cellIndex);
+return true;
+}});
+dg._HeaderBuilder=dojo.extend(function(_2f){
+this.moveable=null;
+dg._Builder.call(this,_2f);
+},dg._Builder.prototype,{_skipBogusClicks:false,overResizeWidth:4,minColWidth:1,update:function(){
+if(this.tableMap){
+this.tableMap.mapRows(this.view.structure.cells);
+}else{
+this.tableMap=new dg._TableMap(this.view.structure.cells);
+}
+},generateHtml:function(_30,_31){
+var _32=this.getTableArray(),_33=this.view.structure.cells;
+dojox.grid.util.fire(this.view,"onBeforeRow",[-1,_33]);
+for(var j=0,row;(row=_33[j]);j++){
+if(row.hidden){
+continue;
+}
+_32.push(!row.invisible?"<tr>":"<tr class=\"dojoxGridInvisible\">");
+for(var i=0,_34,_35;(_34=row[i]);i++){
+_34.customClasses=[];
+_34.customStyles=[];
+if(this.view.simpleStructure){
+if(_34.draggable){
+if(_34.headerClasses){
+if(_34.headerClasses.indexOf("dojoDndItem")==-1){
+_34.headerClasses+=" dojoDndItem";
+}
+}else{
+_34.headerClasses="dojoDndItem";
+}
+}
+if(_34.attrs){
+if(_34.attrs.indexOf("dndType='gridColumn_")==-1){
+_34.attrs+=" dndType='gridColumn_"+this.grid.id+"'";
+}
+}else{
+_34.attrs="dndType='gridColumn_"+this.grid.id+"'";
+}
+}
+_35=this.generateCellMarkup(_34,_34.headerStyles,_34.headerClasses,true);
+_35[5]=(_31!=undefined?_31:_30(_34));
+_35[3]=_34.customStyles.join(";");
+_35[1]=_34.customClasses.join(" ");
+_32.push(_35.join(""));
+}
+_32.push("</tr>");
+}
+_32.push("</table>");
+return _32.join("");
+},getCellX:function(e){
+var n,x=e.layerX;
+if(dojo.isMoz){
+n=_8(e.target,_b("th"));
+x-=(n&&n.offsetLeft)||0;
+var t=e.sourceView.getScrollbarWidth();
+if(!dojo._isBodyLtr()){
+table=_8(n,_b("table"));
+x-=(table&&table.offsetLeft)||0;
+}
+}
+n=_8(e.target,function(){
+if(!n||n==e.cellNode){
+return false;
+}
+x+=(n.offsetLeft<0?0:n.offsetLeft);
+return true;
+});
+return x;
+},decorateEvent:function(e){
+this.baseDecorateEvent(e);
+e.rowIndex=-1;
+e.cellX=this.getCellX(e);
+return true;
+},prepareResize:function(e,mod){
+do{
+var i=_1(e.cellNode);
+e.cellNode=(i?e.cellNode.parentNode.cells[i+mod]:null);
+e.cellIndex=(e.cellNode?this.getCellNodeIndex(e.cellNode):-1);
+}while(e.cellNode&&e.cellNode.style.display=="none");
+return Boolean(e.cellNode);
+},canResize:function(e){
+if(!e.cellNode||e.cellNode.colSpan>1){
+return false;
+}
+var _36=this.grid.getCell(e.cellIndex);
+return !_36.noresize&&_36.canResize();
+},overLeftResizeArea:function(e){
+if(dojo.hasClass(dojo.body(),"dojoDndMove")){
+return false;
+}
+if(dojo.isIE){
+var tN=e.target;
+if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){
+return false;
+}
+}
+if(dojo._isBodyLtr()){
+return (e.cellIndex>0)&&(e.cellX<this.overResizeWidth)&&this.prepareResize(e,-1);
+}
+var t=e.cellNode&&(e.cellX<this.overResizeWidth);
+return t;
+},overRightResizeArea:function(e){
+if(dojo.hasClass(dojo.body(),"dojoDndMove")){
+return false;
+}
+if(dojo.isIE){
+var tN=e.target;
+if(dojo.hasClass(tN,"dojoxGridArrowButtonNode")||dojo.hasClass(tN,"dojoxGridArrowButtonChar")){
+return false;
+}
+}
+if(dojo._isBodyLtr()){
+return e.cellNode&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth);
+}
+return (e.cellIndex>0)&&(e.cellX>=e.cellNode.offsetWidth-this.overResizeWidth)&&this.prepareResize(e,-1);
+},domousemove:function(e){
+if(!this.moveable){
+var c=(this.overRightResizeArea(e)?"dojoxGridColResize":(this.overLeftResizeArea(e)?"dojoxGridColResize":""));
+if(c&&!this.canResize(e)){
+c="dojoxGridColNoResize";
+}
+dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColNoResize",(c=="dojoxGridColNoResize"));
+dojo.toggleClass(e.sourceView.headerNode,"dojoxGridColResize",(c=="dojoxGridColResize"));
+if(dojo.isIE){
+var t=e.sourceView.headerNode.scrollLeft;
+e.sourceView.headerNode.scrollLeft=t;
+}
+if(c){
+dojo.stopEvent(e);
+}
+}
+},domousedown:function(e){
+if(!this.moveable){
+if((this.overRightResizeArea(e)||this.overLeftResizeArea(e))&&this.canResize(e)){
+this.beginColumnResize(e);
+}else{
+this.grid.onMouseDown(e);
+this.grid.onMouseOverRow(e);
+}
+}
+},doclick:function(e){
+if(this._skipBogusClicks){
+dojo.stopEvent(e);
+return true;
+}
+return false;
+},colResizeSetup:function(e,_37){
+var _38=dojo.contentBox(e.sourceView.headerNode);
+if(_37){
+this.lineDiv=document.createElement("div");
+var vw=(dojo.position||dojo._abs)(e.sourceView.headerNode,true);
+var _39=dojo.contentBox(e.sourceView.domNode);
+var l=e.clientX;
+if(!dojo._isBodyLtr()&&dojo.isIE<8){
+l-=dojox.html.metrics.getScrollbar().w;
+}
+dojo.style(this.lineDiv,{top:vw.y+"px",left:l+"px",height:(_39.h+_38.h)+"px"});
+dojo.addClass(this.lineDiv,"dojoxGridResizeColLine");
+this.lineDiv._origLeft=l;
+dojo.body().appendChild(this.lineDiv);
+}
+var _3a=[],_3b=this.tableMap.findOverlappingNodes(e.cellNode);
+for(var i=0,_3c;(_3c=_3b[i]);i++){
+_3a.push({node:_3c,index:this.getCellNodeIndex(_3c),width:_3c.offsetWidth});
+}
+var _3d=e.sourceView;
+var adj=dojo._isBodyLtr()?1:-1;
+var _3e=e.grid.views.views;
+var _3f=[];
+for(var j=_3d.idx+adj,_40;(_40=_3e[j]);j=j+adj){
+_3f.push({node:_40.headerNode,left:window.parseInt(_40.headerNode.style.left)});
+}
+var _41=_3d.headerContentNode.firstChild;
+var _42={scrollLeft:e.sourceView.headerNode.scrollLeft,view:_3d,node:e.cellNode,index:e.cellIndex,w:dojo.contentBox(e.cellNode).w,vw:_38.w,table:_41,tw:dojo.contentBox(_41).w,spanners:_3a,followers:_3f};
+return _42;
+},beginColumnResize:function(e){
+this.moverDiv=document.createElement("div");
+dojo.style(this.moverDiv,{position:"absolute",left:0});
+dojo.body().appendChild(this.moverDiv);
+dojo.addClass(this.grid.domNode,"dojoxGridColumnResizing");
+var m=(this.moveable=new dojo.dnd.Moveable(this.moverDiv));
+var _43=this.colResizeSetup(e,true);
+m.onMove=dojo.hitch(this,"doResizeColumn",_43);
+dojo.connect(m,"onMoveStop",dojo.hitch(this,function(){
+this.endResizeColumn(_43);
+if(_43.node.releaseCapture){
+_43.node.releaseCapture();
+}
+this.moveable.destroy();
+delete this.moveable;
+this.moveable=null;
+dojo.removeClass(this.grid.domNode,"dojoxGridColumnResizing");
+}));
+if(e.cellNode.setCapture){
+e.cellNode.setCapture();
+}
+m.onMouseDown(e);
+},doResizeColumn:function(_44,_45,_46){
+var _47=_46.l;
+var _48={deltaX:_47,w:_44.w+(dojo._isBodyLtr()?_47:-_47),vw:_44.vw+_47,tw:_44.tw+_47};
+this.dragRecord={inDrag:_44,mover:_45,leftTop:_46};
+if(_48.w>=this.minColWidth){
+if(!_45){
+this.doResizeNow(_44,_48);
+}else{
+dojo.style(this.lineDiv,"left",(this.lineDiv._origLeft+_48.deltaX)+"px");
+}
+}
+},endResizeColumn:function(_49){
+if(this.dragRecord){
+var _4a=this.dragRecord.leftTop;
+var _4b=dojo._isBodyLtr()?_4a.l:-_4a.l;
+_4b+=Math.max(_49.w+_4b,this.minColWidth)-(_49.w+_4b);
+if(dojo.isWebKit&&_49.spanners.length){
+_4b+=dojo._getPadBorderExtents(_49.spanners[0].node).w;
+}
+var _4c={deltaX:_4b,w:_49.w+_4b,vw:_49.vw+_4b,tw:_49.tw+_4b};
+this.doResizeNow(_49,_4c);
+}
+dojo.destroy(this.lineDiv);
+dojo.destroy(this.moverDiv);
+dojo.destroy(this.moverDiv);
+delete this.moverDiv;
+this._skipBogusClicks=true;
+_49.view.update();
+this._skipBogusClicks=false;
+this.grid.onResizeColumn(_49.index);
+},doResizeNow:function(_4d,_4e){
+_4d.view.convertColPctToFixed();
+if(_4d.view.flexCells&&!_4d.view.testFlexCells()){
+var t=_6(_4d.node);
+if(t){
+(t.style.width="");
+}
+}
+var i,s,sw,f,fl;
+for(i=0;(s=_4d.spanners[i]);i++){
+sw=s.width+_4e.deltaX;
+s.node.style.width=sw+"px";
+_4d.view.setColWidth(s.index,sw);
+}
+if(dojo._isBodyLtr()||!dojo.isIE){
+for(i=0;(f=_4d.followers[i]);i++){
+fl=f.left+_4e.deltaX;
+f.node.style.left=fl+"px";
+}
+}
+_4d.node.style.width=_4e.w+"px";
+_4d.view.setColWidth(_4d.index,_4e.w);
+_4d.view.headerNode.style.width=_4e.vw+"px";
+_4d.view.setColumnsWidth(_4e.tw);
+if(!dojo._isBodyLtr()){
+_4d.view.headerNode.scrollLeft=_4d.scrollLeft+_4e.deltaX;
+}
+}});
+dg._TableMap=dojo.extend(function(_4f){
+this.mapRows(_4f);
+},{map:null,mapRows:function(_50){
+var _51=_50.length;
+if(!_51){
+return;
+}
+this.map=[];
+var row;
+for(var k=0;(row=_50[k]);k++){
+this.map[k]=[];
+}
+for(var j=0;(row=_50[j]);j++){
+for(var i=0,x=0,_52,_53,_54;(_52=row[i]);i++){
+while(this.map[j][x]){
+x++;
+}
+this.map[j][x]={c:i,r:j};
+_54=_52.rowSpan||1;
+_53=_52.colSpan||1;
+for(var y=0;y<_54;y++){
+for(var s=0;s<_53;s++){
+this.map[j+y][x+s]=this.map[j][x];
+}
+}
+x+=_53;
+}
+}
+},dumpMap:function(){
+for(var j=0,row,h="";(row=this.map[j]);j++,h=""){
+for(var i=0,_55;(_55=row[i]);i++){
+h+=_55.r+","+_55.c+"   ";
+}
+}
+},getMapCoords:function(_56,_57){
+for(var j=0,row;(row=this.map[j]);j++){
+for(var i=0,_58;(_58=row[i]);i++){
+if(_58.c==_57&&_58.r==_56){
+return {j:j,i:i};
+}
+}
+}
+return {j:-1,i:-1};
+},getNode:function(_59,_5a,_5b){
+var row=_59&&_59.rows[_5a];
+return row&&row.cells[_5b];
+},_findOverlappingNodes:function(_5c,_5d,_5e){
+var _5f=[];
+var m=this.getMapCoords(_5d,_5e);
+for(var j=0,row;(row=this.map[j]);j++){
+if(j==m.j){
+continue;
+}
+var rw=row[m.i];
+var n=(rw?this.getNode(_5c,rw.r,rw.c):null);
+if(n){
+_5f.push(n);
+}
+}
+return _5f;
+},findOverlappingNodes:function(_60){
+return this._findOverlappingNodes(_6(_60),_2(_60.parentNode),_1(_60));
+}});
+})();
+}
Index: trunk/web/dojo/dojox/grid/_CheckBoxSelector.js
===================================================================
--- trunk/web/dojo/dojox/grid/_CheckBoxSelector.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_CheckBoxSelector.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._CheckBoxSelector"]){
+dojo._hasResource["dojox.grid._CheckBoxSelector"]=true;
+dojo.provide("dojox.grid._CheckBoxSelector");
+dojo.require("dojox.grid._Selector");
+}
Index: trunk/web/dojo/dojox/grid/cells/dijit.js
===================================================================
--- trunk/web/dojo/dojox/grid/cells/dijit.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/cells/dijit.js	(revision 9)
@@ -0,0 +1,179 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells.dijit"]){
+dojo._hasResource["dojox.grid.cells.dijit"]=true;
+dojo.provide("dojox.grid.cells.dijit");
+dojo.require("dojox.grid.cells");
+dojo.require("dijit.form.DateTextBox");
+dojo.require("dijit.form.TimeTextBox");
+dojo.require("dijit.form.ComboBox");
+dojo.require("dojo.data.ItemFileReadStore");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.NumberSpinner");
+dojo.require("dijit.form.NumberTextBox");
+dojo.require("dijit.form.CurrencyTextBox");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.require("dijit.Editor");
+(function(){
+var _1=dojox.grid.cells;
+dojo.declare("dojox.grid.cells._Widget",_1._Base,{widgetClass:dijit.form.TextBox,constructor:function(_2){
+this.widget=null;
+if(typeof this.widgetClass=="string"){
+dojo.deprecated("Passing a string to widgetClass is deprecated","pass the widget class object instead","2.0");
+this.widgetClass=dojo.getObject(this.widgetClass);
+}
+},formatEditing:function(_3,_4){
+this.needFormatNode(_3,_4);
+return "<div></div>";
+},getValue:function(_5){
+return this.widget.attr("value");
+},setValue:function(_6,_7){
+if(this.widget&&this.widget.attr){
+if(this.widget.onLoadDeferred){
+var _8=this;
+this.widget.onLoadDeferred.addCallback(function(){
+_8.widget.attr("value",_7===null?"":_7);
+});
+}else{
+this.widget.attr("value",_7);
+}
+}else{
+this.inherited(arguments);
+}
+},getWidgetProps:function(_9){
+return dojo.mixin({dir:this.dir,lang:this.lang},this.widgetProps||{},{constraints:dojo.mixin({},this.constraint)||{},value:_9});
+},createWidget:function(_a,_b,_c){
+return new this.widgetClass(this.getWidgetProps(_b),_a);
+},attachWidget:function(_d,_e,_f){
+_d.appendChild(this.widget.domNode);
+this.setValue(_f,_e);
+},formatNode:function(_10,_11,_12){
+if(!this.widgetClass){
+return _11;
+}
+if(!this.widget){
+this.widget=this.createWidget.apply(this,arguments);
+}else{
+this.attachWidget.apply(this,arguments);
+}
+this.sizeWidget.apply(this,arguments);
+this.grid.rowHeightChanged(_12);
+this.focus();
+return undefined;
+},sizeWidget:function(_13,_14,_15){
+var p=this.getNode(_15),box=dojo.contentBox(p);
+dojo.marginBox(this.widget.domNode,{w:box.w});
+},focus:function(_16,_17){
+if(this.widget){
+setTimeout(dojo.hitch(this.widget,function(){
+dojox.grid.util.fire(this,"focus");
+}),0);
+}
+},_finish:function(_18){
+this.inherited(arguments);
+dojox.grid.util.removeNode(this.widget.domNode);
+}});
+_1._Widget.markupFactory=function(_19,_1a){
+_1._Base.markupFactory(_19,_1a);
+var d=dojo;
+var _1b=d.trim(d.attr(_19,"widgetProps")||"");
+var _1c=d.trim(d.attr(_19,"constraint")||"");
+var _1d=d.trim(d.attr(_19,"widgetClass")||"");
+if(_1b){
+_1a.widgetProps=d.fromJson(_1b);
+}
+if(_1c){
+_1a.constraint=d.fromJson(_1c);
+}
+if(_1d){
+_1a.widgetClass=d.getObject(_1d);
+}
+};
+dojo.declare("dojox.grid.cells.ComboBox",_1._Widget,{widgetClass:dijit.form.ComboBox,getWidgetProps:function(_1e){
+var _1f=[];
+dojo.forEach(this.options,function(o){
+_1f.push({name:o,value:o});
+});
+var _20=new dojo.data.ItemFileReadStore({data:{identifier:"name",items:_1f}});
+return dojo.mixin({},this.widgetProps||{},{value:_1e,store:_20});
+},getValue:function(){
+var e=this.widget;
+e.attr("displayedValue",e.attr("displayedValue"));
+return e.attr("value");
+}});
+_1.ComboBox.markupFactory=function(_21,_22){
+_1._Widget.markupFactory(_21,_22);
+var d=dojo;
+var _23=d.trim(d.attr(_21,"options")||"");
+if(_23){
+var o=_23.split(",");
+if(o[0]!=_23){
+_22.options=o;
+}
+}
+};
+dojo.declare("dojox.grid.cells.DateTextBox",_1._Widget,{widgetClass:dijit.form.DateTextBox,setValue:function(_24,_25){
+if(this.widget){
+this.widget.attr("value",new Date(_25));
+}else{
+this.inherited(arguments);
+}
+},getWidgetProps:function(_26){
+return dojo.mixin(this.inherited(arguments),{value:new Date(_26)});
+}});
+_1.DateTextBox.markupFactory=function(_27,_28){
+_1._Widget.markupFactory(_27,_28);
+};
+dojo.declare("dojox.grid.cells.CheckBox",_1._Widget,{widgetClass:dijit.form.CheckBox,getValue:function(){
+return this.widget.checked;
+},setValue:function(_29,_2a){
+if(this.widget&&this.widget.attributeMap.checked){
+this.widget.attr("checked",_2a);
+}else{
+this.inherited(arguments);
+}
+},sizeWidget:function(_2b,_2c,_2d){
+return;
+}});
+_1.CheckBox.markupFactory=function(_2e,_2f){
+_1._Widget.markupFactory(_2e,_2f);
+};
+dojo.declare("dojox.grid.cells.Editor",_1._Widget,{widgetClass:dijit.Editor,getWidgetProps:function(_30){
+return dojo.mixin({},this.widgetProps||{},{height:this.widgetHeight||"100px"});
+},createWidget:function(_31,_32,_33){
+var _34=new this.widgetClass(this.getWidgetProps(_32),_31);
+dojo.connect(_34,"onLoad",dojo.hitch(this,"populateEditor"));
+return _34;
+},formatNode:function(_35,_36,_37){
+this.content=_36;
+this.inherited(arguments);
+if(dojo.isMoz){
+var e=this.widget;
+e.open();
+if(this.widgetToolbar){
+dojo.place(e.toolbar.domNode,e.editingArea,"before");
+}
+}
+},populateEditor:function(){
+this.widget.attr("value",this.content);
+this.widget.placeCursorAtEnd();
+}});
+_1.Editor.markupFactory=function(_38,_39){
+_1._Widget.markupFactory(_38,_39);
+var d=dojo;
+var h=dojo.trim(dojo.attr(_38,"widgetHeight")||"");
+if(h){
+if((h!="auto")&&(h.substr(-2)!="em")){
+h=parseInt(h,10)+"px";
+}
+_39.widgetHeight=h;
+}
+};
+})();
+}
Index: trunk/web/dojo/dojox/grid/cells/_base.js
===================================================================
--- trunk/web/dojo/dojox/grid/cells/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/cells/_base.js	(revision 9)
@@ -0,0 +1,271 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells._base"]){
+dojo._hasResource["dojox.grid.cells._base"]=true;
+dojo.provide("dojox.grid.cells._base");
+dojo.require("dojox.grid.util");
+dojo.require("dijit._Widget");
+dojo.declare("dojox.grid._DeferredTextWidget",dijit._Widget,{deferred:null,_destroyOnRemove:true,postCreate:function(){
+if(this.deferred){
+this.deferred.addBoth(dojo.hitch(this,function(_1){
+if(this.domNode){
+this.domNode.innerHTML=_1;
+}
+}));
+}
+}});
+(function(){
+var _2=function(_3){
+try{
+dojox.grid.util.fire(_3,"focus");
+dojox.grid.util.fire(_3,"select");
+}
+catch(e){
+}
+};
+var _4=function(){
+setTimeout(dojo.hitch.apply(dojo,arguments),0);
+};
+var _5=dojox.grid.cells;
+dojo.declare("dojox.grid.cells._Base",null,{styles:"",classes:"",editable:false,alwaysEditing:false,formatter:null,defaultValue:"...",value:null,hidden:false,noresize:false,draggable:true,_valueProp:"value",_formatPending:false,constructor:function(_6){
+this._props=_6||{};
+dojo.mixin(this,_6);
+if(this.draggable===undefined){
+this.draggable=true;
+}
+},_defaultFormat:function(_7,_8){
+var s=this.grid.formatterScope||this;
+var f=this.formatter;
+if(f&&s&&typeof f=="string"){
+f=this.formatter=s[f];
+}
+var v=(_7!=this.defaultValue&&f)?f.apply(s,_8):_7;
+if(typeof v=="undefined"){
+return this.defaultValue;
+}
+if(v&&v.addBoth){
+v=new dojox.grid._DeferredTextWidget({deferred:v},dojo.create("span",{innerHTML:this.defaultValue}));
+}
+if(v&&v.declaredClass&&v.startup){
+return "<div class='dojoxGridStubNode' linkWidget='"+v.id+"' cellIdx='"+this.index+"'>"+this.defaultValue+"</div>";
+}
+return v;
+},format:function(_9,_a){
+var f,i=this.grid.edit.info,d=this.get?this.get(_9,_a):(this.value||this.defaultValue);
+d=(d&&d.replace&&this.grid.escapeHTMLInData)?d.replace(/&/g,"&amp;").replace(/</g,"&lt;"):d;
+if(this.editable&&(this.alwaysEditing||(i.rowIndex==_9&&i.cell==this))){
+return this.formatEditing(d,_9);
+}else{
+return this._defaultFormat(d,[d,_9,this]);
+}
+},formatEditing:function(_b,_c){
+},getNode:function(_d){
+return this.view.getCellNode(_d,this.index);
+},getHeaderNode:function(){
+return this.view.getHeaderCellNode(this.index);
+},getEditNode:function(_e){
+return (this.getNode(_e)||0).firstChild||0;
+},canResize:function(){
+var uw=this.unitWidth;
+return uw&&(uw!=="auto");
+},isFlex:function(){
+var uw=this.unitWidth;
+return uw&&dojo.isString(uw)&&(uw=="auto"||uw.slice(-1)=="%");
+},applyEdit:function(_f,_10){
+this.grid.edit.applyCellEdit(_f,this,_10);
+},cancelEdit:function(_11){
+this.grid.doCancelEdit(_11);
+},_onEditBlur:function(_12){
+if(this.grid.edit.isEditCell(_12,this.index)){
+this.grid.edit.apply();
+}
+},registerOnBlur:function(_13,_14){
+if(this.commitOnBlur){
+dojo.connect(_13,"onblur",function(e){
+setTimeout(dojo.hitch(this,"_onEditBlur",_14),250);
+});
+}
+},needFormatNode:function(_15,_16){
+this._formatPending=true;
+_4(this,"_formatNode",_15,_16);
+},cancelFormatNode:function(){
+this._formatPending=false;
+},_formatNode:function(_17,_18){
+if(this._formatPending){
+this._formatPending=false;
+dojo.setSelectable(this.grid.domNode,true);
+this.formatNode(this.getEditNode(_18),_17,_18);
+}
+},formatNode:function(_19,_1a,_1b){
+if(dojo.isIE){
+_4(this,"focus",_1b,_19);
+}else{
+this.focus(_1b,_19);
+}
+},dispatchEvent:function(m,e){
+if(m in this){
+return this[m](e);
+}
+},getValue:function(_1c){
+return this.getEditNode(_1c)[this._valueProp];
+},setValue:function(_1d,_1e){
+var n=this.getEditNode(_1d);
+if(n){
+n[this._valueProp]=_1e;
+}
+},focus:function(_1f,_20){
+_2(_20||this.getEditNode(_1f));
+},save:function(_21){
+this.value=this.value||this.getValue(_21);
+},restore:function(_22){
+this.setValue(_22,this.value);
+},_finish:function(_23){
+dojo.setSelectable(this.grid.domNode,false);
+this.cancelFormatNode();
+},apply:function(_24){
+this.applyEdit(this.getValue(_24),_24);
+this._finish(_24);
+},cancel:function(_25){
+this.cancelEdit(_25);
+this._finish(_25);
+}});
+_5._Base.markupFactory=function(_26,_27){
+var d=dojo;
+var _28=d.trim(d.attr(_26,"formatter")||"");
+if(_28){
+_27.formatter=dojo.getObject(_28)||_28;
+}
+var get=d.trim(d.attr(_26,"get")||"");
+if(get){
+_27.get=dojo.getObject(get);
+}
+var _29=function(_2a,_2b,_2c){
+var _2d=d.trim(d.attr(_26,_2a)||"");
+if(_2d){
+_2b[_2c||_2a]=!(_2d.toLowerCase()=="false");
+}
+};
+_29("sortDesc",_27);
+_29("editable",_27);
+_29("alwaysEditing",_27);
+_29("noresize",_27);
+_29("draggable",_27);
+var _2e=d.trim(d.attr(_26,"loadingText")||d.attr(_26,"defaultValue")||"");
+if(_2e){
+_27.defaultValue=_2e;
+}
+var _2f=function(_30,_31,_32){
+var _33=d.trim(d.attr(_26,_30)||"")||undefined;
+if(_33){
+_31[_32||_30]=_33;
+}
+};
+_2f("styles",_27);
+_2f("headerStyles",_27);
+_2f("cellStyles",_27);
+_2f("classes",_27);
+_2f("headerClasses",_27);
+_2f("cellClasses",_27);
+};
+dojo.declare("dojox.grid.cells.Cell",_5._Base,{constructor:function(){
+this.keyFilter=this.keyFilter;
+},keyFilter:null,formatEditing:function(_34,_35){
+this.needFormatNode(_34,_35);
+return "<input class=\"dojoxGridInput\" type=\"text\" value=\""+_34+"\">";
+},formatNode:function(_36,_37,_38){
+this.inherited(arguments);
+this.registerOnBlur(_36,_38);
+},doKey:function(e){
+if(this.keyFilter){
+var key=String.fromCharCode(e.charCode);
+if(key.search(this.keyFilter)==-1){
+dojo.stopEvent(e);
+}
+}
+},_finish:function(_39){
+this.inherited(arguments);
+var n=this.getEditNode(_39);
+try{
+dojox.grid.util.fire(n,"blur");
+}
+catch(e){
+}
+}});
+_5.Cell.markupFactory=function(_3a,_3b){
+_5._Base.markupFactory(_3a,_3b);
+var d=dojo;
+var _3c=d.trim(d.attr(_3a,"keyFilter")||"");
+if(_3c){
+_3b.keyFilter=new RegExp(_3c);
+}
+};
+dojo.declare("dojox.grid.cells.RowIndex",_5.Cell,{name:"Row",postscript:function(){
+this.editable=false;
+},get:function(_3d){
+return _3d+1;
+}});
+_5.RowIndex.markupFactory=function(_3e,_3f){
+_5.Cell.markupFactory(_3e,_3f);
+};
+dojo.declare("dojox.grid.cells.Select",_5.Cell,{options:null,values:null,returnIndex:-1,constructor:function(_40){
+this.values=this.values||this.options;
+},formatEditing:function(_41,_42){
+this.needFormatNode(_41,_42);
+var h=["<select class=\"dojoxGridSelect\">"];
+for(var i=0,o,v;((o=this.options[i])!==undefined)&&((v=this.values[i])!==undefined);i++){
+h.push("<option",(_41==v?" selected":"")," value=\""+v+"\"",">",o,"</option>");
+}
+h.push("</select>");
+return h.join("");
+},getValue:function(_43){
+var n=this.getEditNode(_43);
+if(n){
+var i=n.selectedIndex,o=n.options[i];
+return this.returnIndex>-1?i:o.value||o.innerHTML;
+}
+}});
+_5.Select.markupFactory=function(_44,_45){
+_5.Cell.markupFactory(_44,_45);
+var d=dojo;
+var _46=d.trim(d.attr(_44,"options")||"");
+if(_46){
+var o=_46.split(",");
+if(o[0]!=_46){
+_45.options=o;
+}
+}
+var _47=d.trim(d.attr(_44,"values")||"");
+if(_47){
+var v=_47.split(",");
+if(v[0]!=_47){
+_45.values=v;
+}
+}
+};
+dojo.declare("dojox.grid.cells.AlwaysEdit",_5.Cell,{alwaysEditing:true,_formatNode:function(_48,_49){
+this.formatNode(this.getEditNode(_49),_48,_49);
+},applyStaticValue:function(_4a){
+var e=this.grid.edit;
+e.applyCellEdit(this.getValue(_4a),this,_4a);
+e.start(this,_4a,true);
+}});
+_5.AlwaysEdit.markupFactory=function(_4b,_4c){
+_5.Cell.markupFactory(_4b,_4c);
+};
+dojo.declare("dojox.grid.cells.Bool",_5.AlwaysEdit,{_valueProp:"checked",formatEditing:function(_4d,_4e){
+return "<input class=\"dojoxGridInput\" type=\"checkbox\""+(_4d?" checked=\"checked\"":"")+" style=\"width: auto\" />";
+},doclick:function(e){
+if(e.target.tagName=="INPUT"){
+this.applyStaticValue(e.rowIndex);
+}
+}});
+_5.Bool.markupFactory=function(_4f,_50){
+_5.AlwaysEdit.markupFactory(_4f,_50);
+};
+})();
+}
Index: trunk/web/dojo/dojox/grid/cells/tree.js
===================================================================
--- trunk/web/dojo/dojox/grid/cells/tree.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/cells/tree.js	(revision 9)
@@ -0,0 +1,68 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.cells.tree"]){
+dojo._hasResource["dojox.grid.cells.tree"]=true;
+dojo.provide("dojox.grid.cells.tree");
+dojo.require("dojox.grid.cells");
+dojox.grid.cells.TreeCell={formatAggregate:function(_1,_2,_3){
+var f,g=this.grid,i=g.edit.info,d=g.aggregator?g.aggregator.getForCell(this,_2,_1,_2===this.level?"cnt":this.parentCell.aggregate):(this.value||this.defaultValue);
+return this._defaultFormat(d,[d,_2-this.level,_3,this]);
+},formatIndexes:function(_4,_5){
+var f,g=this.grid,i=g.edit.info,d=this.get?this.get(_4[0],_5,_4):(this.value||this.defaultValue);
+if(this.editable&&(this.alwaysEditing||(i.rowIndex==_4[0]&&i.cell==this))){
+return this.formatEditing(d,_4[0],_4);
+}else{
+return this._defaultFormat(d,[d,_4[0],_4,this]);
+}
+},getOpenState:function(_6){
+var _7=this.grid,_8=_7.store,_9=null;
+if(_8.isItem(_6)){
+_9=_6;
+_6=_8.getIdentity(_6);
+}
+if(!this.openStates){
+this.openStates={};
+}
+if(typeof _6!="string"||!(_6 in this.openStates)){
+this.openStates[_6]=_7.getDefaultOpenState(this,_9);
+}
+return this.openStates[_6];
+},formatAtLevel:function(_a,_b,_c,_d,_e,_f){
+if(!dojo.isArray(_a)){
+_a=[_a];
+}
+var _10="";
+if(_c>this.level||(_c===this.level&&_d)){
+_f.push("dojoxGridSpacerCell");
+if(_c===this.level){
+_f.push("dojoxGridTotalCell");
+}
+_10="<span></span>";
+}else{
+if(_c<this.level){
+_f.push("dojoxGridSummaryCell");
+_10="<span class=\"dojoxGridSummarySpan\">"+this.formatAggregate(_b,_c,_a)+"</span>";
+}else{
+var ret="";
+if(this.isCollapsable){
+var _11=this.grid.store,id="";
+if(_11.isItem(_b)){
+id=_11.getIdentity(_b);
+}
+_f.push("dojoxGridExpandoCell");
+ret="<span dojoType=\"dojox.grid._Expando\" level=\""+_c+"\" class=\"dojoxGridExpando\""+"\" toggleClass=\""+_e+"\" itemId=\""+id+"\" cellIdx=\""+this.index+"\"></span>";
+}
+_10=ret+this.formatIndexes(_a,_b);
+}
+}
+if(this.grid.focus.cell&&this.index==this.grid.focus.cell.index&&_a.join("/")==this.grid.focus.rowIndex){
+_f.push(this.grid.focus.focusClass);
+}
+return _10;
+}};
+}
Index: trunk/web/dojo/dojox/grid/_TreeView.js
===================================================================
--- trunk/web/dojo/dojox/grid/_TreeView.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/_TreeView.js	(revision 9)
@@ -0,0 +1,408 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid._TreeView"]){
+dojo._hasResource["dojox.grid._TreeView"]=true;
+dojo.provide("dojox.grid._TreeView");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.grid._View");
+dojo.declare("dojox.grid._Expando",[dijit._Widget,dijit._Templated],{open:false,toggleClass:"",itemId:"",cellIdx:-1,view:null,rowNode:null,rowIdx:-1,expandoCell:null,level:0,templateString:"<div class=\"dojoxGridExpando\"\n\t><div class=\"dojoxGridExpandoNode\" dojoAttachEvent=\"onclick:onToggle\"\n\t\t><div class=\"dojoxGridExpandoNodeInner\" dojoAttachPoint=\"expandoInner\"></div\n\t></div\n></div>\n",_toggleRows:function(_1,_2){
+if(!_1||!this.rowNode){
+return;
+}
+if(dojo.query("table.dojoxGridRowTableNeedsRowUpdate").length){
+if(this._initialized){
+this.view.grid.updateRow(this.rowIdx);
+}
+return;
+}
+var _3=this;
+var g=this.view.grid;
+if(g.treeModel){
+var p=this._tableRow?dojo.attr(this._tableRow,"dojoxTreeGridPath"):"";
+if(p){
+dojo.query("tr[dojoxTreeGridPath^=\""+p+"/\"]",this.rowNode).forEach(function(n){
+var en=dojo.query(".dojoxGridExpando",n)[0];
+if(en&&en.parentNode&&en.parentNode.parentNode&&!dojo.hasClass(en.parentNode.parentNode,"dojoxGridNoChildren")){
+var ew=dijit.byNode(en);
+if(ew){
+ew._toggleRows(_1,ew.open&&_2);
+}
+}
+n.style.display=_2?"":"none";
+});
+}
+}else{
+dojo.query("tr."+_1,this.rowNode).forEach(function(n){
+if(dojo.hasClass(n,"dojoxGridExpandoRow")){
+var en=dojo.query(".dojoxGridExpando",n)[0];
+if(en){
+var ew=dijit.byNode(en);
+var _4=ew?ew.toggleClass:en.getAttribute("toggleClass");
+var _5=ew?ew.open:_3.expandoCell.getOpenState(en.getAttribute("itemId"));
+_3._toggleRows(_4,_5&&_2);
+}
+}
+n.style.display=_2?"":"none";
+});
+}
+},setOpen:function(_6){
+if(_6&&dojo.hasClass(this.domNode,"dojoxGridExpandoLoading")){
+_6=false;
+}
+var _7=this.view;
+var _8=_7.grid;
+var _9=_8.store;
+var _a=_8.treeModel;
+var d=this;
+var _b=this.rowIdx;
+var me=_8._by_idx[_b];
+if(!me){
+return;
+}
+if(_a&&!this._loadedChildren){
+if(_6){
+var _c=_8.getItem(dojo.attr(this._tableRow,"dojoxTreeGridPath"));
+if(_c){
+this.expandoInner.innerHTML="o";
+dojo.addClass(this.domNode,"dojoxGridExpandoLoading");
+_a.getChildren(_c,function(_d){
+d._loadedChildren=true;
+d._setOpen(_6);
+});
+}else{
+this._setOpen(_6);
+}
+}else{
+this._setOpen(_6);
+}
+}else{
+if(!_a&&_9){
+if(_6){
+var _e=_8._by_idx[this.rowIdx];
+if(_e&&!_9.isItemLoaded(_e.item)){
+this.expandoInner.innerHTML="o";
+dojo.addClass(this.domNode,"dojoxGridExpandoLoading");
+_9.loadItem({item:_e.item,onItem:dojo.hitch(this,function(i){
+var _f=_9.getIdentity(i);
+_8._by_idty[_f]=_8._by_idx[this.rowIdx]={idty:_f,item:i};
+this._setOpen(_6);
+})});
+}else{
+this._setOpen(_6);
+}
+}else{
+this._setOpen(_6);
+}
+}else{
+this._setOpen(_6);
+}
+}
+},_setOpen:function(_10){
+if(_10&&this._tableRow&&dojo.hasClass(this._tableRow,"dojoxGridNoChildren")){
+this._setOpen(false);
+return;
+}
+this.expandoInner.innerHTML=_10?"-":"+";
+dojo.removeClass(this.domNode,"dojoxGridExpandoLoading");
+dojo.toggleClass(this.domNode,"dojoxGridExpandoOpened",_10);
+if(this._tableRow){
+dojo.toggleClass(this._tableRow,"dojoxGridRowCollapsed",!_10);
+var _11=dojo.attr(this._tableRow,"dojoxTreeGridBaseClasses");
+var _12="";
+if(_10){
+_12=dojo.trim((" "+_11+" ").replace(" dojoxGridRowCollapsed "," "));
+}else{
+if((" "+_11+" ").indexOf(" dojoxGridRowCollapsed ")<0){
+_12=_11+(_11?" ":"")+"dojoxGridRowCollapsed";
+}else{
+_12=_11;
+}
+}
+dojo.attr(this._tableRow,"dojoxTreeGridBaseClasses",_12);
+}
+var _13=(this.open!==_10);
+this.open=_10;
+if(this.expandoCell&&this.itemId){
+this.expandoCell.openStates[this.itemId]=_10;
+}
+var v=this.view;
+var g=v.grid;
+if(this.toggleClass&&_13){
+if(!this._tableRow||!this._tableRow.style.display){
+this._toggleRows(this.toggleClass,_10);
+}
+}
+if(v&&this._initialized&&this.rowIdx>=0){
+g.rowHeightChanged(this.rowIdx);
+g.postresize();
+v.hasVScrollbar(true);
+}
+this._initialized=true;
+},onToggle:function(e){
+this.setOpen(!this.open);
+dojo.stopEvent(e);
+},setRowNode:function(_14,_15,_16){
+if(this.cellIdx<0||!this.itemId){
+return false;
+}
+this._initialized=false;
+this.view=_16;
+this.rowNode=_15;
+this.rowIdx=_14;
+this.expandoCell=_16.structure.cells[0][this.cellIdx];
+var d=this.domNode;
+if(d&&d.parentNode&&d.parentNode.parentNode){
+this._tableRow=d.parentNode.parentNode;
+}
+this.open=this.expandoCell.getOpenState(this.itemId);
+if(_16.grid.treeModel){
+dojo.style(this.domNode,"marginLeft",(this.level*18)+"px");
+if(this.domNode.parentNode){
+dojo.style(this.domNode.parentNode,"backgroundPosition",((this.level*18)+(3))+"px");
+}
+}
+this.setOpen(this.open);
+return true;
+}});
+dojo.declare("dojox.grid._TreeContentBuilder",dojox.grid._ContentBuilder,{generateHtml:function(_17,_18){
+var _19=this.getTableArray(),v=this.view,row=v.structure.cells[0],_1a=this.grid.getItem(_18),_1b=this.grid,_1c=this.grid.store;
+dojox.grid.util.fire(this.view,"onBeforeRow",[_18,[row]]);
+var _1d=function(_1e,_1f,_20,_21,_22,_23){
+if(!_23){
+if(_19[0].indexOf("dojoxGridRowTableNeedsRowUpdate")==-1){
+_19[0]=_19[0].replace("dojoxGridRowTable","dojoxGridRowTable dojoxGridRowTableNeedsRowUpdate");
+}
+return;
+}
+var _24=_19.length;
+_21=_21||[];
+var _25=_21.join("|");
+var _26=_21[_21.length-1];
+var _27=_26+(_20?" dojoxGridSummaryRow":"");
+var _28="";
+if(_1b.treeModel&&_1f&&!_1b.treeModel.mayHaveChildren(_1f)){
+_27+=" dojoxGridNoChildren";
+}
+_19.push("<tr style=\""+_28+"\" class=\""+_27+"\" dojoxTreeGridPath=\""+_22.join("/")+"\" dojoxTreeGridBaseClasses=\""+_27+"\">");
+var _29=_1e+1;
+var _2a=null;
+for(var i=0,_2b;(_2b=row[i]);i++){
+var m=_2b.markup,cc=_2b.customClasses=[],cs=_2b.customStyles=[];
+m[5]=_2b.formatAtLevel(_22,_1f,_1e,_20,_26,cc);
+m[1]=cc.join(" ");
+m[3]=cs.join(";");
+_19.push.apply(_19,m);
+if(!_2a&&_2b.level===_29&&_2b.parentCell){
+_2a=_2b.parentCell;
+}
+}
+_19.push("</tr>");
+if(_1f&&_1c&&_1c.isItem(_1f)){
+var _2c=_1c.getIdentity(_1f);
+if(typeof _1b._by_idty_paths[_2c]=="undefined"){
+_1b._by_idty_paths[_2c]=_22.join("/");
+}
+}
+var _2d;
+var _2e;
+var _2f;
+var _30;
+var _31=_22.concat([]);
+if(_1b.treeModel&&_1f){
+if(_1b.treeModel.mayHaveChildren(_1f)){
+_2d=v.structure.cells[0][_1b.expandoCell||0];
+_2e=_2d.getOpenState(_1f)&&_23;
+_2f=new dojox.grid.TreePath(_22.join("/"),_1b);
+_30=_2f.children(true)||[];
+dojo.forEach(_30,function(_32,idx){
+var _33=_25.split("|");
+_33.push(_33[_33.length-1]+"-"+idx);
+_31.push(idx);
+_1d(_29,_32,false,_33,_31,_2e);
+_31.pop();
+});
+}
+}else{
+if(_1f&&_2a&&!_20){
+_2d=v.structure.cells[0][_2a.level];
+_2e=_2d.getOpenState(_1f)&&_23;
+if(_1c.hasAttribute(_1f,_2a.field)){
+var _34=_25.split("|");
+_34.pop();
+_2f=new dojox.grid.TreePath(_22.join("/"),_1b);
+_30=_2f.children(true)||[];
+if(_30.length){
+_19[_24]="<tr class=\""+_34.join(" ")+" dojoxGridExpandoRow\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+dojo.forEach(_30,function(_35,idx){
+var _36=_25.split("|");
+_36.push(_36[_36.length-1]+"-"+idx);
+_31.push(idx);
+_1d(_29,_35,false,_36,_31,_2e);
+_31.pop();
+});
+_31.push(_30.length);
+_1d(_1e,_1f,true,_21,_31,_2e);
+}else{
+_19[_24]="<tr class=\""+_26+" dojoxGridNoChildren\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+}
+}else{
+if(!_1c.isItemLoaded(_1f)){
+_19[0]=_19[0].replace("dojoxGridRowTable","dojoxGridRowTable dojoxGridRowTableNeedsRowUpdate");
+}else{
+_19[_24]="<tr class=\""+_26+" dojoxGridNoChildren\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+}
+}
+}else{
+if(_1f&&!_20&&_21.length>1){
+_19[_24]="<tr class=\""+_21[_21.length-2]+"\" dojoxTreeGridPath=\""+_22.join("/")+"\">";
+}
+}
+}
+};
+_1d(0,_1a,false,["dojoxGridRowToggle-"+_18],[_18],true);
+_19.push("</table>");
+return _19.join("");
+},findTarget:function(_37,_38){
+var n=_37;
+while(n&&(n!=this.domNode)){
+if(n.tagName&&n.tagName.toLowerCase()=="tr"){
+break;
+}
+n=n.parentNode;
+}
+return (n!=this.domNode)?n:null;
+},getCellNode:function(_39,_3a){
+var _3b=dojo.query("td[idx='"+_3a+"']",_39)[0];
+if(_3b&&_3b.parentNode&&!dojo.hasClass(_3b.parentNode,"dojoxGridSummaryRow")){
+return _3b;
+}
+},decorateEvent:function(e){
+e.rowNode=this.findRowTarget(e.target);
+if(!e.rowNode){
+return false;
+}
+e.rowIndex=dojo.attr(e.rowNode,"dojoxTreeGridPath");
+this.baseDecorateEvent(e);
+e.cell=this.grid.getCell(e.cellIndex);
+return true;
+}});
+dojo.declare("dojox.grid._TreeView",[dojox.grid._View],{_contentBuilderClass:dojox.grid._TreeContentBuilder,_onDndDrop:function(_3c,_3d,_3e){
+if(this.grid&&this.grid.aggregator){
+this.grid.aggregator.clearSubtotalCache();
+}
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.grid,"_cleanupExpandoCache","_cleanupExpandoCache");
+},_cleanupExpandoCache:function(_3f,_40,_41){
+if(_3f==-1){
+return;
+}
+dojo.forEach(this.grid.layout.cells,function(_42){
+if(typeof _42["openStates"]!="undefined"){
+if(_40 in _42.openStates){
+delete _42.openStates[_40];
+}
+}
+});
+if(typeof _3f=="string"&&_3f.indexOf("/")>-1){
+var _43=new dojox.grid.TreePath(_3f,this.grid);
+var _44=_43.parent();
+while(_44){
+_43=_44;
+_44=_43.parent();
+}
+var _45=_43.item();
+if(!_45){
+return;
+}
+var _46=this.grid.store.getIdentity(_45);
+if(typeof this._expandos[_46]!="undefined"){
+for(var i in this._expandos[_46]){
+var exp=this._expandos[_46][i];
+if(exp){
+exp.destroy();
+}
+delete this._expandos[_46][i];
+}
+delete this._expandos[_46];
+}
+}else{
+for(var i in this._expandos){
+if(typeof this._expandos[i]!="undefined"){
+for(var j in this._expandos[i]){
+var exp=this._expandos[i][j];
+if(exp){
+exp.destroy();
+}
+}
+}
+}
+this._expandos={};
+}
+},postMixInProperties:function(){
+this.inherited(arguments);
+this._expandos={};
+},onBeforeRow:function(_47,_48){
+var g=this.grid;
+if(g._by_idx&&g._by_idx[_47]&&g._by_idx[_47].idty){
+var _49=g._by_idx[_47].idty;
+this._expandos[_49]=this._expandos[_49]||{};
+}
+this.inherited(arguments);
+},onAfterRow:function(_4a,_4b,_4c){
+dojo.forEach(dojo.query("span.dojoxGridExpando",_4c),function(n){
+if(n&&n.parentNode){
+var tc=n.getAttribute("toggleClass");
+var _4d;
+var _4e;
+var g=this.grid;
+if(g._by_idx&&g._by_idx[_4a]&&g._by_idx[_4a].idty){
+_4d=g._by_idx[_4a].idty;
+_4e=this._expandos[_4d][tc];
+}
+if(_4e){
+dojo.place(_4e.domNode,n,"replace");
+_4e.itemId=n.getAttribute("itemId");
+_4e.cellIdx=parseInt(n.getAttribute("cellIdx"),10);
+if(isNaN(_4e.cellIdx)){
+_4e.cellIdx=-1;
+}
+}else{
+_4e=dojo.parser.parse(n.parentNode)[0];
+if(_4d){
+this._expandos[_4d][tc]=_4e;
+}
+}
+if(!_4e.setRowNode(_4a,_4c,this)){
+_4e.domNode.parentNode.removeChild(_4e.domNode);
+}
+}
+},this);
+var alt=false;
+var _4f=this;
+dojo.query("tr[dojoxTreeGridPath]",_4c).forEach(function(n){
+dojo.toggleClass(n,"dojoxGridSubRowAlt",alt);
+dojo.attr(n,"dojoxTreeGridBaseClasses",n.className);
+alt=!alt;
+_4f.grid.rows.styleRowNode(dojo.attr(n,"dojoxTreeGridPath"),n);
+});
+this.inherited(arguments);
+},updateRowStyles:function(_50){
+var _51=dojo.query("tr[dojoxTreeGridPath='"+_50+"']",this.domNode);
+if(_51.length){
+this.styleRowNode(_50,_51[0]);
+}
+},getCellNode:function(_52,_53){
+var row=dojo.query("tr[dojoxTreeGridPath='"+_52+"']",this.domNode)[0];
+if(row){
+return this.content.getCellNode(row,_53);
+}
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/_Plugin.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/_Plugin.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/_Plugin.js	(revision 9)
@@ -0,0 +1,194 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced._Plugin"]){
+dojo._hasResource["dojox.grid.enhanced._Plugin"]=true;
+dojo.provide("dojox.grid.enhanced._Plugin");
+dojo.require("dojox.grid.enhanced._Builder");
+dojo.require("dojox.grid.enhanced._Events");
+dojo.declare("dojox.grid.enhanced._Plugin",null,{fixedCellNum:-1,funcMap:{},constructor:function(_1){
+this.grid=_1;
+this._parseProps(this.grid);
+},_parseProps:function(_2){
+_2.plugins&&dojo.mixin(_2,_2.plugins);
+_2.rowSelectCell=null;
+_2.dnd&&(_2.nestedSorting=true);
+(_2.dnd||_2.indirectSelection)&&(_2.columnReordering=false);
+},preInit:function(){
+var _3=this.grid;
+_3.indirectSelection&&(new (this.getPluginClazz("dojox.grid.enhanced.plugins.IndirectSelection"))(_3));
+if(_3.dnd&&(!_3.rowSelector||_3.rowSelector=="false")){
+_3.rowSelector="20px";
+}
+if(_3.nestedSorting){
+dojox.grid._View.prototype._headerBuilderClass=dojox.grid.enhanced._HeaderBuilder;
+}
+dojox.grid._View.prototype._contentBuilderClass=dojox.grid.enhanced._ContentBuilder;
+},postInit:function(){
+var _4=this.grid;
+new dojox.grid.enhanced._Events(_4);
+_4.menus&&(new (this.getPluginClazz("dojox.grid.enhanced.plugins.Menu"))(_4));
+_4.nestedSorting&&(new (this.getPluginClazz("dojox.grid.enhanced.plugins.NestedSorting"))(_4));
+if(_4.dnd){
+_4.isDndSelectEnable=_4.dnd;
+_4.dndDisabledTypes=["cell"];
+new (this.getPluginClazz("dojox.grid.enhanced.plugins.DnD"))(_4);
+}
+dojo.isChrome<3&&(_4.constructor.prototype.startup=_4.startup);
+this.fixedCellNum=this.getFixedCellNumber();
+this.grid.plugins&&this._bindFuncs();
+},getPluginClazz:function(_5){
+var _6=dojo.getObject(_5);
+if(_6){
+return _6;
+}
+throw new Error("Please make sure class \""+_5+"\" is required.");
+},isFixedCell:function(_7){
+return _7&&(_7.isRowSelector||_7.positionFixed);
+},getFixedCellNumber:function(){
+if(this.fixedCellNum>=0){
+return this.fixedCellNum;
+}
+var i=0;
+dojo.forEach(this.grid.layout.cells,dojo.hitch(this,function(_8){
+this.isFixedCell(_8)&&(i++);
+}));
+return i;
+},inSingleSelection:function(){
+return this.grid.selectionMode&&this.grid.selectionMode=="single";
+},needUpdateRow:function(){
+return ((this.grid.indirectSelection||this.grid.isDndSelectEnable)?this.grid.edit.isEditing():true);
+},_bindFuncs:function(){
+dojo.forEach(this.grid.views.views,dojo.hitch(this,function(_9){
+dojox.grid.util.funnelEvents(_9.contentNode,_9,"doContentEvent",["mouseup","mousemove"]);
+dojox.grid.util.funnelEvents(_9.headerNode,_9,"doHeaderEvent",["mouseup"]);
+this.funcMap[_9.id+"-"+"setColumnsWidth"]=_9.setColumnsWidth;
+_9.setColumnsWidth=this.setColumnsWidth;
+this.grid.nestedSorting&&(_9._getHeaderContent=this.grid._getNestedSortHeaderContent);
+this.grid.dnd&&(_9.setScrollTop=this.setScrollTop);
+}));
+this.funcMap["nextKey"]=this.grid.focus.nextKey;
+this.grid.focus.nextKey=this.nextKey;
+this.funcMap["previousKey"]=this.grid.focus.previousKey;
+this.grid.focus.previousKey=this.previousKey;
+if(this.grid.indirectSelection){
+this.funcMap["renderPage"]=this.grid.scroller.renderPage;
+this.grid.scroller.renderPage=this.renderPage;
+this.funcMap["measurePage"]=this.grid.scroller.measurePage;
+this.grid.scroller.measurePage=this.measurePage;
+}
+this.funcMap["updateRow"]=this.grid.updateRow;
+this.grid.updateRow=this.updateRow;
+if(this.grid.nestedSorting&&dojox.grid.cells._Widget){
+dojox.grid.cells._Widget.prototype.sizeWidget=this.sizeWidget;
+}
+dojox.grid.cells._Base.prototype.getEditNode=this.getEditNode;
+dojox.grid._EditManager.prototype.styleRow=function(_a){
+};
+},setColumnsWidth:function(_b){
+if(dojo.isIE&&!dojo._isBodyLtr()){
+this.headerContentNode.style.width=_b+"px";
+this.headerContentNode.parentNode.style.width=_b+"px";
+}
+dojo.hitch(this,this.grid.pluginMgr.funcMap[this.id+"-"+"setColumnsWidth"])(_b);
+},previousKey:function(e){
+var _c=this.grid.edit.isEditing();
+if(!_c&&!this.isNavHeader()&&!this._isHeaderHidden()){
+if(!this.grid.isDndSelectEnable){
+this.focusHeader();
+}else{
+if(!this.isRowBar()){
+this.focusRowBar();
+}else{
+this._blurRowBar();
+this.focusHeader();
+}
+}
+dojo.stopEvent(e);
+return;
+}
+dojo.hitch(this,this.grid.pluginMgr.funcMap["previousKey"])(e);
+},nextKey:function(e){
+var _d=this.grid.rowCount==0;
+var _e=(e.target===this.grid.domNode);
+if(!_e&&this.grid.isDndSelectEnable&&this.isNavHeader()){
+this._colHeadNode=this._colHeadFocusIdx=null;
+this.focusRowBar();
+return;
+}else{
+if(!_e&&(!this.grid.isDndSelectEnable&&this.isNavHeader())||(this.grid.isDndSelectEnable&&this.isRowBar())){
+this._colHeadNode=this._colHeadFocusIdx=null;
+if(this.grid.isDndSelectEnable){
+this._blurRowBar();
+}
+if(this.isNoFocusCell()&&!_d){
+this.setFocusIndex(0,0);
+}else{
+if(this.cell&&!_d){
+if(this.focusView&&!this.focusView.rowNodes[this.rowIndex]){
+this.grid.scrollToRow(this.rowIndex);
+}
+this.focusGrid();
+}else{
+if(!this.findAndFocusGridCell()){
+this.tabOut(this.grid.lastFocusNode);
+}
+}
+}
+return;
+}
+}
+dojo.hitch(this,this.grid.pluginMgr.funcMap["nextKey"])(e);
+},renderPage:function(_f){
+for(var i=0,j=_f*this.rowsPerPage;(i<this.rowsPerPage)&&(j<this.rowCount);i++,j++){
+}
+this.grid.lastRenderingRowIdx=--j;
+dojo.addClass(this.grid.domNode,"dojoxGridSortInProgress");
+dojo.hitch(this,this.grid.pluginMgr.funcMap["renderPage"])(_f);
+},measurePage:function(_10){
+var _11=dojo.hitch(this,this.grid.pluginMgr.funcMap["measurePage"])(_10);
+return (!dojo.isIE||this.grid.rowHeight||_11>this.rowsPerPage*this.grid.minRowHeight)?_11:undefined;
+},updateRow:function(_12){
+var _13=arguments.callee.caller;
+if(_13.nom=="move"&&!this.pluginMgr.needUpdateRow()){
+return;
+}
+dojo.hitch(this,this.pluginMgr.funcMap["updateRow"])(_12);
+},getEditNode:function(_14){
+return ((this.getNode(_14)||0).firstChild||0).firstChild||0;
+},sizeWidget:function(_15,_16,_17){
+var p=this.getNode(_17).firstChild,box=dojo.contentBox(p);
+dojo.marginBox(this.widget.domNode,{w:box.w});
+},setScrollTop:function(_18){
+this.lastTop=_18;
+this.scrollboxNode.scrollTop=_18;
+return this.scrollboxNode.scrollTop;
+},getViewByCellIdx:function(_19){
+var _1a=function(_1b){
+var j=0,_1c=false;
+for(;j<_1b.length;j++){
+if(dojo.isArray(_1b[j])){
+if(_1a(_1b[j])){
+return true;
+}
+}else{
+if(_1b[j].index==_19){
+return true;
+}
+}
+}
+};
+var i=0,_1d=this.grid.views.views;
+for(;i<_1d.length;i++){
+cells=_1d[i].structure.cells;
+if(_1a(cells)){
+return _1d[i];
+}
+}
+return null;
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css	(revision 9)
@@ -0,0 +1,786 @@
+.dojoxGridCellContent {
+	padding:3px;
+}
+.dojoxGridSortNode {
+	padding:3px;
+}
+.dojoxGridSortRoot {
+	position: relative; 
+	width: 100%;
+	text-align:left; 
+}
+.dojoxGridHeaderCellSelectRegion {
+	text-align: left;
+	padding:3px;
+	
+	overflow: hidden;
+	white-space:nowrap;
+}
+.dj_ie .dojoxGridHeaderCellSelectRegion {
+	padding-left:4px;
+}
+.dojoxGridSortWrapper {
+	
+	position:absolute;
+	right:0px;
+	
+	z-index: 1;
+}
+.dojoxGridNestedSortWrapper {
+	float:left;
+}
+.dojoxGridSortPos {
+	float:left;
+	margin-left:3px;
+}
+.dj_ff2 .dojoxGridSortPos {
+	padding: 3px 0;
+	line-height: normal;
+}
+.dojoxGridSortPosOff {
+	display:none;
+}
+.dojoxGridNestedSort {
+	text-indent: -5000em;
+}
+.dojoxGridUnarySortWrapper {
+	float:left;
+}
+.dojoxGridSort {
+	display: block;
+	float: left;
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	width: 8px;
+	margin-right:3px;
+	margin-left:3px;
+	text-align:center;
+}
+.dojoxGridUnarySort {
+	text-indent: -5000em;
+	margin-left:4px;
+}
+.dojoxGridAscending {
+	background-position: -9px;
+}
+.dojoxGridUnsorted {
+	display:none;
+}
+.dojoxGridAscendingTip {
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	background-position: -30px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridDescendingTip {
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	background-position: -20px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridUnsortedTip {
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	background-position: -39.5px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridSortHiddenTip {
+	display:none;
+}
+.dojoxGridSortSeparatorOff {
+	width: 0px;
+	border-right-color: #999999;
+	border-right-style:solid;
+	border-right-width:1px;
+	display: none;
+}
+.dojoxGridSortSeparatorOn {
+	display: block;
+	float: left;
+}
+.dojoxGridSortInProgress {
+	cursor:progress;
+}
+.dojoxGridWidgetHidden {
+	visibility:hidden;
+}
+.dijit_a11y .dojoxGridNestedSort, .dijit_a11y .dojoxGridUnarySort {
+	text-indent: 0;
+	
+}
+.dojoxGridFocusBorderBox {
+	position: relative;
+	top: 0;
+	left: 0;
+	width: 0;
+	height: 0;
+}
+.dojoxGridFocusBorder {
+	width: 0px;
+	height: 0px;
+	overflow: hidden;
+	position: absolute;
+	z-index: 999;
+	top: 0;
+	left: 0;
+}
+.dojoxGridSelectedDIV {
+	background-color: #3366CC;
+	position:absolute;
+	opacity:0.2;
+	cursor:move;
+	z-index:999;
+}
+.dj_ie .dojoxGridSelectedDIV {
+	filter: alpha(opacity = 30);
+}
+.dojoxGridBorderDIV {
+	width:3px;
+	background-color: gray;
+	font-size:0em;
+	position:absolute;
+	z-index:9999;
+}
+.dojoxGrid {
+	border:1px solid #DBDBDB;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	opacity:0.4 !important;
+}
+.dijit_a11y .dojoxGridSelectedDIV {
+	opacity:0.4 !important;
+	border:3px solid #000 !important;
+}
+.dijit_a11y .dojoxGridBorderDIV {
+	border:2px solid #000 !important;
+}
+.dojoxGrid {
+	position: relative;
+	background-color: #EBEADB;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	-moz-outline-style: none;
+	outline: none;
+	overflow: hidden;
+	height: 0;
+}
+.dojoxGrid table {
+	padding: 0;
+}
+.dojoxGrid td {
+	-moz-outline: none;
+}
+.dojoxGridMasterHeader {
+	position: relative;
+}
+.dojoxGridMasterView  {
+	position: relative;
+}
+.dojoxGridMasterMessages {
+	position: relative;
+	padding: 1em;
+	text-align: center;
+	background-color: white;
+}
+.dojoxGridView {
+	position: absolute;
+	overflow: hidden;
+}
+.dojoxGridHeader {
+	position: absolute;
+	overflow: hidden;
+	cursor: default;
+}
+.dojoxGridHeader {
+	background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+	text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridSortNode{
+	white-space:nowrap;
+}
+.dojoxGridArrowButtonNode {
+	display: none;
+	padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+	display:inline;
+}
+.dojoxGridColCaption {
+	overflow:hidden;
+}
+ 
+.dojoxGridArrowButtonNode:hover {
+        cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+        cursor: default;
+}
+.dojoxGridSortUp:hover {
+        cursor: default;
+}
+.dojoxGridSortDown:hover {
+        cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+	display:inline !important;
+}
+.dojoxGridScrollbox {
+	position: relative;
+	overflow: auto;
+	background-color: white;
+	width: 100%;
+}
+.dojoxGridContent {
+	position: relative;
+	overflow: hidden;
+	 -moz-outline-style: none;
+	outline: none;
+}
+.dojoxGridRowbar { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	border-top: none;
+	background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+	border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+	background-image: none;
+	background-color: white;
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRow {
+	position: relative;
+	width: 9000em;
+}
+.dojoxGridRow {
+	
+	border: 1px solid #E8E4D8;
+	border-color: #F8F7F1;
+	
+	border-left: none;
+	border-right: none;
+	background-color: white;
+	border-top: none;
+}
+.dojoxGridRowOver {
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+	
+	
+	
+}
+.dojoxGridRowOdd {
+	background-color: #FFFDF3;
+	
+}
+.dojoxGridRowSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+	table-layout: fixed;
+	width: 0;
+	empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+	border-collapse: collapse;
+}
+.dojoxGridInvisible {
+	visibility: hidden;
+}		
+.Xdojo-ie .dojoxGridInvisible {
+	display: none;
+}		
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+	border-top-width: 0;
+	border-bottom-width: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+	height: 0;
+	overflow: hidden;
+}
+.dojoxGridCell {
+	border: 1px solid;
+	border-color: #EBEADB;
+	border-right-color: #D5CDB5;
+	padding: 3px 3px 3px 3px;
+	text-align: left;
+	overflow: hidden;
+}
+.dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+	border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+	margin: 0;
+	padding: 0;
+	border-style: none;
+	width: 100%;
+	font-size: 100%;
+	font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+	position: absolute;
+	top: -1000px;
+	height: 0;
+	width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected { 
+	border-top: 1px solid white;
+	border-bottom: 1px dashed black;
+	border-top: 0;
+	background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+	border: 0;
+	border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+	font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+	border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+	border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+	border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+	border-right: double;
+}
+.dojoxGridDndAvatarItem	td {
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding: 0pt;
+	margin: 0pt;
+}
+.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
+	border: 0;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background-color: transparent;
+	padding: 3px;
+	padding-bottom: 2px;
+	margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndNoMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndNoCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+	cursor: col-resize;
+	z-index:10000;
+}
+.dojoxGridColNoResize, 
+.dojoxGridColNoResize .dojoDndItemOver {
+	cursor: not-allowed !important;
+}
+.dojoxGridColResize, 
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+	cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+}
+.dojoxGridExpandoCell {
+	vertical-align: top;
+}
+.dojoxGridSummarySpan {
+	visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+	visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+	visibility: hidden !important;
+	width: 0px !important;
+}
+.tundra .dojoxGrid {
+	background-color: #e9e9e9;
+	font-size: 0.85em; 
+}
+.tundra .dojoxGridMasterMessages {
+	background-color: #fefefe;
+}
+.tundra .dojoxGridLoading, 
+.tundra .dojoxGridError {
+	background-position:left center;
+	background-repeat: no-repeat;
+	padding-left:25px;
+}
+.dijitRtl .tundra .dojoxGridLoading, 
+.dijitRtl .tundra .dojoxGridError,
+.dijitRtl .tundra .dojoxGridNoData {
+	background-position:right;
+	padding-right:25px;
+	padding-left:0px;
+}
+.tundra .dojoxGridLoading {
+	background-image: url(../../../../dijit/themes/tundra/images/loading.gif);
+}
+.tundra .dojoxGridError {
+	background-image: url(../../../../dijit/themes/tundra/images/warning.png);
+}
+.tundra .dojoxGridHeader {
+	background-color:  #e9e9e9;
+}
+.tundra .dojoxGridHeader .dojoxGridCell { 
+	border-width: 1px;
+	padding-bottom: 0px;
+	border-color: transparent #ACA899 #919191 transparent;
+	background: url(../../../../dijit/themes/tundra/images/tabEnabled.png) #e9e9e9 repeat-x top;
+	color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellOver {
+	background: url(../../../../dijit/themes/tundra/images/tabHover.png) #e9e9e9 repeat-x top;
+	color: #000 !important;
+}
+.tundra .dojoxGridHeader .dojoxGridCellFocus {
+	border-color: #ACA899 #919191;
+	border-style: dashed;
+}
+.tundra .dojoxGridArrowButtonChar {
+	float: right;
+	display: none;
+}
+.tundra .dojoxGridArrowButtonNode {
+	display: block !important;
+	padding-left: 0px;
+	float: right;
+	background:url(../../../../dijit/themes/tundra/images/spriteArrows.png) no-repeat left center;
+	width: 7px;
+	height: 1em;
+	margin: 2px 4px 0px 5px;
+}
+.dj_ie6 .tundra .dojoxGridArrowButtonNode {
+	background-image:url(../../../../dijit/themes/tundra/images/spriteArrows.gif);
+	margin-left: 0px;
+}
+.tundra .dojoxGridSortUp .dojoxGridArrowButtonNode {
+	background-position: -21px;
+}
+.dijit_a11y .tundra .dojoxGridArrowButtonNode {
+	display: none !important;
+}
+.tundra .dojoxGridScrollbox {
+	background-color: #fefefe;
+}
+.tundra .dojoxGridRowbar { 
+	border: none;
+	background: url(../../resources/images/tabEnabled_rotated.png) #e9e9e9 repeat-y right;
+	border-right: 1px solid #ccc;
+	padding: 0px;
+}
+.tundra .dojoxGridRowbarInner {
+	border: none;
+	border-bottom: 1px solid #ccc;
+}
+.tundra .dojoxGridRowbarOver {
+	background: url(../../resources/images/tabHover_rotated.png) #e9e9e9 repeat-y right;
+}
+.tundra .dojoxGridRowbarSelected {
+	background: url(../../../../dijit/themes/tundra/images/tabDisabled.png) #D8E8F9 no-repeat center;
+	border-right: 1px solid #ccc;
+}
+.tundra .dojoxGridRow {
+	border: none;
+	background-color: white;
+}
+.tundra .dojoxGridRowOver {
+	border-top-color: #ccc;
+	border-bottom-color: #ccc;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell {
+	background-color: #60a1ea; 
+	color:#fff;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijit {
+	color: #000;
+}
+.tundra .dojoxGridRowOver .dojoxGridCell .dijitDisabled {
+	color: gray;
+}
+.tundra .dojoxGridRowOdd {
+	background-color: #f2f5f9;
+}
+.tundra .dojoxGridRowSelected {
+	background-color: #aec7e3 !important;
+}
+.dijit_a11y .tundra .dojoxGridRowSelected { 
+    background-color: #aec7e3;     
+    border-style: solid;     
+}   
+.tundra .dojoxGridCell {
+	border: 1px dotted #D5CDB5;
+	border-left-color: transparent;
+	border-top-color: transparent;
+}
+.dj_ff2 .tundra .dojoxGridCell {
+	border-left-width: 0px;
+	border-top-width: 0px;
+}
+.dj_ie6 .tundra .dojoxGridCell {
+	border: 1px solid white;
+	border-right: 1px solid #D5CDB5;
+}
+.tundra .dojoxGridCellFocus {
+	border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridCellOver {
+	border: 1px dotted #a6a6a6;
+}
+.tundra .dojoxGridCellFocus .dojoxGridCellOver {
+	border: 1px dashed darkblue !important;
+}
+.tundra .dojoxGridRowEditing td {
+	
+	background-color: #60a1ea; 
+	
+}
+.tundra .dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.tundra .dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.tundra .dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.tundra .dojoxGrid .dojoDndItemBefore {
+	border-left-color: #3559ac;
+}
+.tundra .dojoxGrid .dojoDndItemAfter {
+	border-right-color: #3559ac;
+}
+.tundra .dojoxGridExpando {
+	float: left;
+	height: 18px;
+	width: 18px;
+	text-align: center;
+	margin-top: -3px;
+}
+.dijitRtl .tundra .dojoxGridExpando {
+	float: right;
+}
+.tundra .dojoxGridExpandoCell {
+	padding-top: 5px;
+}
+.tundra .dojoxGridExpandoNode {
+	height: 18px;
+	background-image: url(../../../../dijit/themes/tundra/images/treeExpand_plus.gif);
+}
+.tundra .dojoxGridExpandoOpened .dojoxGridExpandoNode {
+	background-image: url(../../../../dijit/themes/tundra/images/treeExpand_minus.gif);		
+}
+.tundra .dojoxGridExpandoLoading .dojoxGridExpandoNode {
+	background-image: url(../../../../dijit/themes/tundra/images/treeExpand_loading.gif);		
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpando {
+	visibility: visible !important;
+	width: 18px !important;
+}
+.tundra .dojoxGridTreeModel .dojoxGridNoChildren .dojoxGridExpandoNode {
+	background-image: url(../../../../dijit/themes/tundra/images/treeExpand_leaf.gif);
+	background-position: -3px;
+}
+.tundra .dojoxGridExpandoNodeInner {
+	visibility: hidden;
+}
+.dijit_a11y .dojoxGridExpandoNodeInner {
+	visibility: visible;
+}
+		
+.tundra .dojoxGridSummaryRow .dojoxGridCell {
+	border-top-color: #999;
+	border-top-style: solid;
+}
+.tundra .dojoxGridSpacerCell,
+.tundra .dojoxGridExpandoCell,
+.tundra .dojoxGridSummaryRow .dojoxGridSpacerCell {
+	border-color: transparent;
+	border-right-color: #D5CDB5;
+}
+.tundra .dojoxGridSummaryRow .dojoxGridTotalCell,
+.tundra .dojoxGridRowCollapsed .dojoxGridExpandoCell,
+.tundra .dojoxGridTreeModel .dojoxGridExpandoCell {
+	border-bottom-color: #D5CDB5;
+}
+.tundra .dojoxGridSubRowAlt {
+	background-color: #F8F8F8;
+}
+.tundra .dojoxGridRowOdd .dojoxGridSubRowAlt {
+	background-color: #EDEFF3;
+}
+.tundra .dojoxGridHeader .dojoxGridCell{
+	background: #fafafa url(../../../../dijit/themes/tundra/images/titleBar.png) repeat-x bottom left;
+	border-top: 1px solid #bfbfbf;
+	
+}
+.tundra .dojoxGridCell {
+	padding:0px;
+	
+	
+	
+}
+.dj_ie6 .tundra .dojoxGridMasterView .dojoxGridCellOver{
+	border: 1px dashed #e9e9e9;
+}
+.dj_ie6 .tundra .dojoxGridHeader .dojoxGridCellOver{
+	border-bottom: none !important;
+	border-right: 1px solid #D5CDB5 !important;
+	border-top: 1px solid #D5CDB5 !important;
+}
+.tundra .dojoxGridRowbarInner {
+	width:20px;
+}
+.tundra .dojoxGridCellOver .dojoxGridSortNode{
+	cursor:pointer;
+	background: #f8fafd url("../../../../dijit/themes/tundra/images/accordionItemHover.gif") bottom repeat-x;
+}
+.tundra .dojoxGridSelectRegionHover{
+	border-color:		#a5beda; 
+	border-bottom-color:#5c7590; 
+	cursor:pointer;
+	color:#243C5F;
+	background: #f8fafd url("../../../../dijit/themes/tundra/images/accordionItemHover.gif") bottom repeat-x;
+}
+.tundra .dojoxGridSortHover{
+	border-color:		#a5beda; 
+	border-bottom-color:#5c7590; 
+	color:#243C5F;
+	background: #f8fafd url("../../../../dijit/themes/tundra/images/accordionItemHover.gif") bottom repeat-x;
+	cursor:pointer;
+}
+.tundra .dojoxGridSortWrapper{
+	background: #fafafa url(../../../../dijit/themes/tundra/images/titleBar.png) repeat-x bottom left;
+}
+.dj_webkit .tundra .dojoxGridCell,
+.dj_webkit .tundra .dojoxGridCellFocus,
+.dj_webkit .tundra .dojoxGridHeaderCellSelectRegion,
+.dj_webkit .tundra .dojoxGridUnarySortWrapper,
+.dj_webkit .tundra .dojoxGridNestedSortWrapper,
+.dj_webkit .tundra .dojoxGridSortRoot{
+	outline: none;
+}
+.tundra .dojoxGridFocusBorder {
+	border-top: 1px dashed darkblue;
+	border-left: 1px dashed darkblue;
+}
+.tundra .dojoxGridSelectedDIV{
+	background-color: #3366CC;
+}
+.dj_ie .tundra .dojoxGridSelectedDIV{
+	filter: alpha(opacity = 30);
+}
+.tundra .dojoxGridBorderDIV{
+	background-color: gray;
+}
Index: trunk/web/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css	(revision 9)
@@ -0,0 +1,155 @@
+.dojoxGridCellContent {
+	padding:3px;
+}
+.dojoxGridSortNode {
+	padding:3px;
+}
+.dojoxGridSortRoot {
+	position: relative; 
+	width: 100%;
+	text-align:left; 
+}
+.dojoxGridHeaderCellSelectRegion {
+	text-align: left;
+	padding:3px;
+	
+	overflow: hidden;
+	white-space:nowrap;
+}
+.dj_ie .dojoxGridHeaderCellSelectRegion {
+	padding-left:4px;
+}
+.dojoxGridSortWrapper {
+	
+	position:absolute;
+	right:0px;
+	
+	z-index: 1;
+}
+.dojoxGridNestedSortWrapper {
+	float:left;
+}
+.dojoxGridSortPos {
+	float:left;
+	margin-left:3px;
+}
+.dj_ff2 .dojoxGridSortPos {
+	padding: 3px 0;
+	line-height: normal;
+}
+.dojoxGridSortPosOff {
+	display:none;
+}
+.dojoxGridNestedSort {
+	text-indent: -5000em;
+}
+.dojoxGridUnarySortWrapper {
+	float:left;
+}
+.dojoxGridSort {
+	display: block;
+	float: left;
+	background:url("images/nestedSortArrows.png") no-repeat left center;
+	width: 8px;
+	margin-right:3px;
+	margin-left:3px;
+	text-align:center;
+}
+.dojoxGridUnarySort {
+	text-indent: -5000em;
+	margin-left:4px;
+}
+.dojoxGridAscending {
+	background-position: -9px;
+}
+.dojoxGridUnsorted {
+	display:none;
+}
+.dojoxGridAscendingTip {
+	background:url("images/nestedSortArrows.png") no-repeat left center;
+	background-position: -30px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridDescendingTip {
+	background:url("images/nestedSortArrows.png") no-repeat left center;
+	background-position: -20px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridUnsortedTip {
+	background:url("images/nestedSortArrows.png") no-repeat left center;
+	background-position: -39.5px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridSortHiddenTip {
+	display:none;
+}
+.dojoxGridSortSeparatorOff {
+	width: 0px;
+	border-right-color: #999999;
+	border-right-style:solid;
+	border-right-width:1px;
+	display: none;
+}
+.dojoxGridSortSeparatorOn {
+	display: block;
+	float: left;
+}
+.dojoxGridSortInProgress {
+	cursor:progress;
+}
+.dojoxGridWidgetHidden {
+	visibility:hidden;
+}
+.dijit_a11y .dojoxGridNestedSort, .dijit_a11y .dojoxGridUnarySort {
+	text-indent: 0;
+	
+}
+.dojoxGridFocusBorderBox {
+	position: relative;
+	top: 0;
+	left: 0;
+	width: 0;
+	height: 0;
+}
+.dojoxGridFocusBorder {
+	width: 0px;
+	height: 0px;
+	overflow: hidden;
+	position: absolute;
+	z-index: 999;
+	top: 0;
+	left: 0;
+}
+.dojoxGridSelectedDIV {
+	background-color: #3366CC;
+	position:absolute;
+	opacity:0.2;
+	cursor:move;
+	z-index:999;
+}
+.dj_ie .dojoxGridSelectedDIV {
+	filter: alpha(opacity = 30);
+}
+.dojoxGridBorderDIV {
+	width:3px;
+	background-color: gray;
+	font-size:0em;
+	position:absolute;
+	z-index:9999;
+}
+.dojoxGrid {
+	border:1px solid #DBDBDB;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	opacity:0.4 !important;
+}
+.dijit_a11y .dojoxGridSelectedDIV {
+	opacity:0.4 !important;
+	border:3px solid #000 !important;
+}
+.dijit_a11y .dojoxGridBorderDIV {
+	border:2px solid #000 !important;
+}
Index: trunk/web/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css	(revision 9)
@@ -0,0 +1,37 @@
+.dj_ie .dojoxGridRtl .dojoxGridHeader table {
+	float:none;
+}
+.dojoxGridRtl .dojoxGridCell {
+	text-align:right;
+}
+.dj_ie8 .dojoxGridRtl .dojoxGridCell {
+	border-left: none;
+}
+.dojoxGridRtl .dojoxGridArrowButtonNode {
+	float:left;
+}
+.dojoxGridRtl .dojoxGridNestedSort, 
+.dojoxGridRtl .dojoxGridUnarySort {
+	text-align: right;
+}
+.dojoxGridRtl .dojoxGridSortWrapper {
+	left: 0;
+	right: auto;
+}
+.dojoxGridRtl .dojoxGridCell .dojoxGridHeaderCellSelectRegion {
+	float: right;
+	text-align: right;
+	padding-right:4px;
+}
+.dojoxGridRtl .dojoxGridSortSeparatorOn,
+.dojoxGridRtl .dojoxGridNestedSortWrapper,
+.dojoxGridRtl .dojoxGridUnarySortWrapper {
+	float: right;
+}
+.dojoxGridRtl .dojoxGridLoading, 
+.dojoxGridRtl .dojoxGridError,
+.dojoxGridRtl .dojoxGridNoData {
+	background-position:right;
+	padding-right:25px;
+	padding-left:0px;
+}
Index: trunk/web/dojo/dojox/grid/enhanced/resources/claroEnhancedGrid.css
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/resources/claroEnhancedGrid.css	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/resources/claroEnhancedGrid.css	(revision 9)
@@ -0,0 +1,782 @@
+.dojoxGridCellContent {
+	padding:3px;
+}
+.dojoxGridSortNode {
+	padding:3px;
+}
+.dojoxGridSortRoot {
+	position: relative; 
+	width: 100%;
+	text-align:left; 
+}
+.dojoxGridHeaderCellSelectRegion {
+	text-align: left;
+	padding:3px;
+	
+	overflow: hidden;
+	white-space:nowrap;
+}
+.dj_ie .dojoxGridHeaderCellSelectRegion {
+	padding-left:4px;
+}
+.dojoxGridSortWrapper {
+	
+	position:absolute;
+	right:0px;
+	
+	z-index: 1;
+}
+.dojoxGridNestedSortWrapper {
+	float:left;
+}
+.dojoxGridSortPos {
+	float:left;
+	margin-left:3px;
+}
+.dj_ff2 .dojoxGridSortPos {
+	padding: 3px 0;
+	line-height: normal;
+}
+.dojoxGridSortPosOff {
+	display:none;
+}
+.dojoxGridNestedSort {
+	text-indent: -5000em;
+}
+.dojoxGridUnarySortWrapper {
+	float:left;
+}
+.dojoxGridSort {
+	display: block;
+	float: left;
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	width: 8px;
+	margin-right:3px;
+	margin-left:3px;
+	text-align:center;
+}
+.dojoxGridUnarySort {
+	text-indent: -5000em;
+	margin-left:4px;
+}
+.dojoxGridAscending {
+	background-position: -9px;
+}
+.dojoxGridUnsorted {
+	display:none;
+}
+.dojoxGridAscendingTip {
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	background-position: -30px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridDescendingTip {
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	background-position: -20px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridUnsortedTip {
+	background:url(images/nestedSortArrows.png) no-repeat left center;
+	background-position: -39.5px;
+	display:block;
+	cursor:pointer;
+}
+.dojoxGridSortHiddenTip {
+	display:none;
+}
+.dojoxGridSortSeparatorOff {
+	width: 0px;
+	border-right-color: #999999;
+	border-right-style:solid;
+	border-right-width:1px;
+	display: none;
+}
+.dojoxGridSortSeparatorOn {
+	display: block;
+	float: left;
+}
+.dojoxGridSortInProgress {
+	cursor:progress;
+}
+.dojoxGridWidgetHidden {
+	visibility:hidden;
+}
+.dijit_a11y .dojoxGridNestedSort, .dijit_a11y .dojoxGridUnarySort {
+	text-indent: 0;
+	
+}
+.dojoxGridFocusBorderBox {
+	position: relative;
+	top: 0;
+	left: 0;
+	width: 0;
+	height: 0;
+}
+.dojoxGridFocusBorder {
+	width: 0px;
+	height: 0px;
+	overflow: hidden;
+	position: absolute;
+	z-index: 999;
+	top: 0;
+	left: 0;
+}
+.dojoxGridSelectedDIV {
+	background-color: #3366CC;
+	position:absolute;
+	opacity:0.2;
+	cursor:move;
+	z-index:999;
+}
+.dj_ie .dojoxGridSelectedDIV {
+	filter: alpha(opacity = 30);
+}
+.dojoxGridBorderDIV {
+	width:3px;
+	background-color: gray;
+	font-size:0em;
+	position:absolute;
+	z-index:9999;
+}
+.dojoxGrid {
+	border:1px solid #DBDBDB;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	opacity:0.4 !important;
+}
+.dijit_a11y .dojoxGridSelectedDIV {
+	opacity:0.4 !important;
+	border:3px solid #000 !important;
+}
+.dijit_a11y .dojoxGridBorderDIV {
+	border:2px solid #000 !important;
+}
+.dojoxGrid {
+	position: relative;
+	background-color: #EBEADB;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	-moz-outline-style: none;
+	outline: none;
+	overflow: hidden;
+	height: 0;
+}
+.dojoxGrid table {
+	padding: 0;
+}
+.dojoxGrid td {
+	-moz-outline: none;
+}
+.dojoxGridMasterHeader {
+	position: relative;
+}
+.dojoxGridMasterView  {
+	position: relative;
+}
+.dojoxGridMasterMessages {
+	position: relative;
+	padding: 1em;
+	text-align: center;
+	background-color: white;
+}
+.dojoxGridView {
+	position: absolute;
+	overflow: hidden;
+}
+.dojoxGridHeader {
+	position: absolute;
+	overflow: hidden;
+	cursor: default;
+}
+.dojoxGridHeader {
+	background-color: #E8E1CF;
+}
+.dojoxGridHeader table {
+	text-align: center;
+}
+.dojoxGridHeader .dojoxGridCell { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding-bottom: 2px;
+}
+.dojoxGridHeader .dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridHeader .dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridHeader.dojoxGridCellFocus.dojoxGridCellOver {
+	background-image: none;
+	background-color: white;
+	border-bottom-color: #FEBE47;
+	margin-bottom: 0;
+	padding-bottom: 0;
+	border-bottom-width: 3px;
+}
+.dojoxGridSortNode{
+	white-space:nowrap;
+}
+.dojoxGridArrowButtonNode {
+	display: none;
+	padding-left: 16px;
+}
+.dojoxGridArrowButtonChar {
+	display:inline;
+}
+.dojoxGridColCaption {
+	overflow:hidden;
+}
+ 
+.dojoxGridArrowButtonNode:hover {
+        cursor: default;
+}
+.dojoxGridArrowButtonChar:hover {
+        cursor: default;
+}
+.dojoxGridSortUp:hover {
+        cursor: default;
+}
+.dojoxGridSortDown:hover {
+        cursor: default;
+}
+.dijit_a11y .dojoxGridArrowButtonChar {
+	display:inline !important;
+}
+.dojoxGridScrollbox {
+	position: relative;
+	overflow: auto;
+	background-color: white;
+	width: 100%;
+}
+.dojoxGridContent {
+	position: relative;
+	overflow: hidden;
+	 -moz-outline-style: none;
+	outline: none;
+}
+.dojoxGridRowbar { 
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	border-top: none;
+	background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+}
+.dojoxGridRowbarInner {
+	border-top: 1px solid #F6F4EB;
+}
+.dojoxGridRowbarOver {
+	background-image: none;
+	background-color: white;
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+}
+.dojoxGridRowbarSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRow {
+	position: relative;
+	width: 9000em;
+}
+.dojoxGridRow {
+	
+	border: 1px solid #E8E4D8;
+	border-color: #F8F7F1;
+	
+	border-left: none;
+	border-right: none;
+	background-color: white;
+	border-top: none;
+}
+.dojoxGridRowOver {
+	border-top-color: #FEBE47;
+	border-bottom-color: #FEBE47;
+	
+	
+	
+}
+.dojoxGridRowOdd {
+	background-color: #FFFDF3;
+	
+}
+.dojoxGridRowSelected {
+	background-color: #D9E8F9;
+}
+.dojoxGridRowTable {
+	table-layout: fixed;
+	width: 0;
+	empty-cells: show;
+}
+.dj_ie .dojoxGridRowTable {
+	border-collapse: collapse;
+}
+.dojoxGridInvisible {
+	visibility: hidden;
+}		
+.Xdojo-ie .dojoxGridInvisible {
+	display: none;
+}		
+.dojoxGridInvisible td, .dojoxGridHeader .dojoxGridInvisible td {
+	border-top-width: 0;
+	border-bottom-width: 0;
+	padding-top: 0;
+	padding-bottom: 0;
+	height: 0;
+	overflow: hidden;
+}
+.dojoxGridCell {
+	border: 1px solid;
+	border-color: #EBEADB;
+	border-right-color: #D5CDB5;
+	padding: 3px 3px 3px 3px;
+	text-align: left;
+	overflow: hidden;
+}
+.dojoxGridCellFocus {
+	border: 1px dashed blue;
+}
+.dojoxGridCellOver {
+	border: 1px dotted #FEBE47;
+}
+.dojoxGridCellFocus.dojoxGridCellOver {
+	border: 1px dashed green;
+}
+.dojoxGridRowEditing td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.dojoxGridInput, .dojoxGridSelect, .dojoxGridTextarea {
+	margin: 0;
+	padding: 0;
+	border-style: none;
+	width: 100%;
+	font-size: 100%;
+	font-family: inherit;
+}
+.dojoxGridHiddenFocus {
+	position: absolute;
+	top: -1000px;
+	height: 0;
+	width: 0;
+}
+.dijit_a11y .dojoxGridRowbarSelected { 
+	border-top: 1px solid white;
+	border-bottom: 1px dashed black;
+	border-top: 0;
+	background: none;
+}
+.dijit_a11y .dojoxGridRowbarSelected .dojoxGridRowbarInner {
+	border: 0;
+	border-top: 1px solid white;
+}
+.dijit_a11y .dojoxGridRowSelected {
+	border: 1px solid black !important;
+}
+.dojoxGridDndAvatar {
+	font-size: 100%;
+}
+.dojoxGrid .dojoDndItemBefore {
+	border-left-color: red;
+}
+.dojoxGrid .dojoDndItemAfter {
+	border-right-color: red;
+}
+.dijit_a11y .dojoDndItemBefore {
+	border-left: double;
+}
+.dijit_a11y .dojoDndItemAfter {
+	border-right: double;
+}
+.dojoxGridDndAvatarItem	td {
+	border: 1px solid;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background: url(../../resources/images/grid_dx_gradient.gif) #E8E1CF top repeat-x;
+	padding: 0pt;
+	margin: 0pt;
+}
+.dojoxGridDndAvatarItem	td.dojoxGridDndAvatarItemImage {
+	border: 0;
+	border-color: #F6F4EB #ACA899 #ACA899 #F6F4EB;
+	background-color: transparent;
+	padding: 3px;
+	padding-bottom: 2px;
+	margin: 0;
+}
+.dojoDndMove .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndNoMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndNoCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndMove .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndMove.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoDndCopy .dojoDndAvatarCanDrop .dojoxGridDndAvatarItem .dojoxGridDndAvatarItemImage {
+	background-image: url(../../../../dojo/resources/images/dndCopy.png);
+	background-repeat: no-repeat;
+	background-position: center center;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+	cursor: col-resize;
+	z-index:10000;
+}
+.dojoxGridColNoResize, 
+.dojoxGridColNoResize .dojoDndItemOver {
+	cursor: not-allowed !important;
+}
+.dojoxGridColResize, 
+.dojoxGridColResize .dojoDndItemOver,
+.dojoxGridColumnResizing,
+.dojoxGridColumnResizing .dojoDndItemOver,
+.dojoxGridColumnResizing .dojoxGridHeader {
+	cursor: col-resize !important;
+}
+.dojoxGridColPlaceBottom {
+	background: transparent url(../../resources/images/grid_sort_up.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop {
+	background: transparent url(../../resources/images/grid_sort_down.gif) no-repeat scroll left top;
+}
+.dojoxGridColPlaceTop, .dojoxGridColPlaceBottom {
+	font-size:1px;
+	height:6px;
+	z-index:10000;
+	top:0;
+	overflow:hidden;
+	position:absolute;
+	line-height:1px;
+	width:8px;
+}
+.dojoxGridResizeColLine {
+	width: 1px;
+	background-color: #777;
+	position: absolute;
+}
+.dojoxGridExpandoCell {
+	vertical-align: top;
+}
+.dojoxGridSummarySpan {
+	visibility: hidden;
+}
+.dojoxGridSummaryRow .dojoxGridSummarySpan,
+.dojoxGridRowCollapsed .dojoxGridSummarySpan {
+	visibility: visible;
+}
+.dojoxGridNoChildren .dojoxGridExpando {
+	visibility: hidden !important;
+	width: 0px !important;
+}
+.claro .dojoxGrid {
+	margin:0px;
+	padding:0px;
+	border-collapse:collapse;	
+	background-color:#fff;	
+}
+.claro .dojoxGridMasterMessages {
+	background-color: #fefefe;
+}
+.claro .dojoxGridLoading, 
+.claro .dojoxGridError {
+	background-position:left center;
+	background-repeat: no-repeat;
+	padding-left:25px;
+}
+.claro .dojoxGridLoading {
+	background-image:url(../../../../dijit/themes/claro/images/loadingAnimation.gif);
+}
+.claro .dojoxGridError {
+	background-image: url(../../../../dijit/icons/images/commonIconsObjActEnabled.png); 
+	background-position: -496px;
+	width: 16px;
+	height: 16px;
+}
+.claro .dojoxGridHeader {
+	background-color:#FFF;
+}
+.claro .dojoxGridHeader .dojoxGridCell { 
+	background:url(../../resources/images/header.png) #e5edf4 repeat-x top;
+	border-style:solid;
+	border-width:1px;
+	border-color:#BCBCBC #BCBCBC #BCBCBC transparent;
+}
+.dj_ie6 .claro .dojoxGridHeader .dojoxGridCell { 
+	border-color:#BCBCBC #BCBCBC #BCBCBC #e5edf4;
+}
+.claro .dojoxGridSortNode {
+	background:url(../../resources/images/header_shadow.png) #e5edf4 repeat-x bottom;
+	text-decoration:none;
+	display:block;
+	padding:4px 6px 5px 6px;
+	border:1px solid #e0eefb;
+}
+.dj_ie6 .claro .dojoxGridSortNode {
+	background-image:none;
+}
+.claro .dojoxGridCellOver .dojoxGridSortNode {
+	background-color:#9dcfff;
+}
+.claro .dojoxGridArrowButtonChar {
+	display:none;
+	float:right;
+}
+.claro .dojoxGridArrowButtonNode {
+	background:transparent url(../../../../dijit/themes/claro/images/spriteArrows.png) no-repeat scroll left center;
+	display:block;
+	float:right;
+	height:1em;
+	margin:2px 4px 0 5px;
+	padding-left:0;
+	width:7px;
+}
+.claro .dojoxGridSortUp .dojoxGridArrowButtonNode {
+	background-position:-21px 50%;
+}
+.dj_ie .claro .dojoxGridHeader .dojoxGridRowTable {
+	border-collapse:separate;
+}
+.claro .dojoxGridScrollbox {
+	background-color: #fefefe;
+}
+.claro .dojoxGridRowbar { 
+	background:url(../../resources/images/header.png) #e5edf4 repeat-x top;
+	border:none;
+	border-right:1px solid #BCBCBC;
+}
+.claro .dojoxGridRowbarTable { 
+	background:transparent url(../../resources/images/header_shadow.png) repeat-x scroll center bottom;
+}
+.dj_ie6 .claro .dojoxGridRowbar,
+.dj_ie6 .claro .dojoxGridRowbarTable { 
+	background-image:none;
+}
+.claro .dojoxGridRowbarInner {
+	border:none;
+	border-bottom:1px solid #ccc;
+}
+.claro .dojoxGridRowbarOver .dojoxGridRowbarTable {
+	background-color:#abd5fd;
+}
+.claro .dojoxGridRowBarActive .dojoxGridRowbarTable {
+	background-color:#91c9fe;
+}
+.claro .dojoxGridRowbarSelected {
+	background-color:#abd5fd;
+	border-right:1px solid #ccc;
+}
+.claro .dojoxGridRow {
+	border:none;
+	background-color:#fff;
+}
+.dj_ie .claro .dojoxGridMasterView .dojoxGridRowTable {
+	border-collapse:separate;
+}
+.claro .dojoxGridRowTable tr {
+	background:url(../../resources/images/row_back.png) #fff repeat-x;
+}
+.claro .dojoxGridRowOdd .dojoxGridRowTable tr {
+	background-color:#f4f9fd;
+}
+.claro .dojoxGridRowSelected .dojoxGridRowTable tr {
+	background-color:#d3e9fb;
+}
+.claro .dojoxGridCell {
+	padding:0px;
+	border:1px solid transparent;
+}
+.dj_ie6 .claro .dojoxGridCell {
+	border-color:#fff
+}
+.dj_ie6 .claro .dojoxGridRowOdd .dojoxGridCell {
+	border-left-color:#f4f9fd;
+	border-right-color:#f4f9fd;
+}
+.dj_ie6 .claro .dojoxGridRowSelected .dojoxGridCell {
+	border-left-color:#d3e9fb;
+	border-right-color:#d3e9fb;
+}
+.claro .dojoxGridRowSelected .dojoxGridCell {
+	border-top:1px solid #BFD6EB;
+	border-bottom:1px solid #BFD6EB;
+}
+.claro .dojoxGridCellFocus {
+	border:1px dashed darkblue !important;
+}
+.claro .dojoxGridCellContent {
+	padding:4px 6px 4px 6px;
+}
+.claro .dojoxGridRowOver .dojoxGridCell {
+	background:url(../../resources/images/row_back.png) #ABD6FF;
+	border-top:1px solid #769DC0;
+	border-bottom:1px solid #769DC0;
+}
+.dj_ie6 .claro .dojoxGridRowOver .dojoxGridCell,
+.dj_ie7 .claro .dojoxGridRowOver .dojoxGridCell {
+	border-left:1px solid #ABD6FF;
+	border-right:1px solid #ABD6FF;
+}
+.claro .dojoxGridRowActive .dojoxGridCell {
+	background:url(../../resources/images/td_button_down.png) #7DBEFA repeat-x;
+}
+.dj_ie6 .claro .dojoxGridRowActive .dojoxGridCell,
+.dj_ie7 .claro .dojoxGridRowActive .dojoxGridCell {
+	border-left:1px solid #7DBEFA;
+	border-right:1px solid #7DBEFA;	
+}
+.claro .dojoxGridDoubleAffordance .dojoxGridRowOver .dojoxGridCellOver {
+	border:solid 1px #769dc0;
+	background-color:#93cafe;
+	border-collapse:separate;
+}
+.claro .dojoxGridDoubleAffordance .dojoxGridRowActive .dojoxGridCell{	
+	background-image:url(../../resources/images/row_back.png);
+}
+.claro .dojoxGridDoubleAffordance .dojoxGridRowActive .dojoxGridCellActive {	
+	background:url(../../resources/images/td_button_down.png) #93cafe repeat-x;
+}
+.dj_ie6 .claro .dojoxGridCell {
+	background-image:none !important;
+}
+.claro .dojoxGridRowEditing td {
+	
+	background-color: #60a1ea; 
+	
+}
+.claro .dojoxGridRow-inserting td {
+	background-color: #F4FFF4;
+}
+.claro .dojoxGridRow-inflight td {
+	background-color: #F2F7B7;
+}
+.claro .dojoxGridRow-error td {
+	background-color: #F8B8B6;
+}
+.claro .dojoxGrid .dojoDndItemBefore {
+	border-left-color: #3559ac;
+}
+.claro .dojoxGrid .dojoDndItemAfter {
+	border-right-color: #3559ac;
+}
+.claro .dojoxGridRowbarInner {
+	width:20px;
+}
+.claro .dojoxGridSortHover {
+	border-color:#a5beda; 
+	border-bottom-color:#5c7590; 
+	color:#243C5F;
+	cursor:pointer;
+	background-color:#abd5fd;
+}
+.claro .dojoxGridSortRoot {
+	background:url("../../resources/images/header_shadow.png") repeat-x bottom;
+	color:#000;
+	text-decoration:none;
+	border:1px solid #e0eefb;
+	height:100%;
+	display:block;
+	margin-left:-1px;
+}
+.dj_ie .claro .dojoxGridSortRoot {
+	border-right:1px solid #bcbcbc;
+}
+.claro .dojoxGridHeaderCellSelectRegion {
+	padding:4px 0px 5px 6px;
+}
+.claro .dojoxGridSelectRegionHover {
+	cursor:pointer;
+	color:#243C5F;
+	text-decoration:none;
+}
+.claro .dojoxGridSelectRegionHover,
+.claro .dojoxGridCellOver .dojoxGridSortWrapper,
+.claro .dojoxGridHeaderSelected .dojoxGridHeaderCellSelectRegion {
+	background:url("../../resources/images/header.png") #abd5fd repeat-x bottom;
+}
+.claro .dojoxGridCellOver .dojoxGridSortWrapper {
+	background-color:transparent;
+}
+.claro .dojoxGridHeaderSelected .dojoxGridHeaderActive {
+	background-color:#91c9fe;
+}
+.claro td.dojoxGridRowSelected {
+	border-collapse:separate;
+	border:1px solid #BFD6EB;
+	border-bottom:1px solid transparent;
+	background:url("../../resources/images/row_back.png") #e3f2ff repeat-x;
+	
+}
+.dj_ie6 .claro td.dojoxGridRowSelected,
+.dj_ie6 .claro .dojoxGridRowOdd td.dojoxGridRowSelected {
+	border-color:#BFD6EB;
+}
+.claro .dojoxGridRowOver td.dojoxGridRowSelected {
+	border-top:1px solid #769DC0;
+	border-bottom:1px solid #769DC0;
+}
+.claro .dojoxGridRowActive td.dojoxGridRowSelected {
+	background-image:url("../../resources/images/td_button_down.png");
+}
+.claro .dojoxGridFocusBorder {
+	border-top: 1px dashed darkblue;
+	border-left: 1px dashed darkblue;
+}
+.claro .dojoxGridSelectedDIV {
+	background-color: #3366CC;
+}
+.dj_ie .claro .dojoxGridSelectedDIV {
+	filter: alpha(opacity = 30);
+}
+.claro .dojoxGridBorderDIV {
+	background-color:#769DC0;
+}
+.dj_ie6 .claro .dojoxGridSortRoot,
+.dj_ie6 .claro .dojoxGridSelectRegionHover,
+.dj_ie6 .claro .dojoxGridCellOver .dojoxGridSortWrapper,
+.dj_ie6 .claro .dojoxGridHeaderSelected .dojoxGridHeaderCellSelectRegion {
+	background-image:none;
+}
+.claro .dojoxGridCell,
+.claro .dojoxGridCellFocus,
+.claro .dojoxGridHeaderCellSelectRegion,
+.claro .dojoxGridUnarySortWrapper,
+.claro .dojoxGridNestedSortWrapper,
+.claro .dojoxGridSortRoot {
+	outline: none;
+}
Index: trunk/web/dojo/dojox/grid/enhanced/resources/images/nestedSortArrows.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/grid/enhanced/resources/images/nestedSortArrows.png
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/resources/images/nestedSortArrows.png	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/resources/images/nestedSortArrows.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/grid/enhanced/resources/images/nestedSortArrows.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/grid/enhanced/nls/ro/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/ro/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/ro/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Descrescător","sortingState":"${0} - ${1}","ascending":"Crescător","nestedSort":"Sortare imbricată","unsorted":"Nu sortaţi această coloană ","singleSort":"Sortare singulară "})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/zh/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/zh/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/zh/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"降序","ascending":"升序","nestedSort":"嵌套排序","unsorted":"不要对此列排序","singleSort":"单一排序","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/pt/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/pt/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/pt/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Descendente","ascending":"Ascendente","nestedSort":"Classificação Aninhada","unsorted":"Não classificar esta coluna","singleSort":"Classificação Única","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/ca/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/ca/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/ca/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Descendent","ascending":"Ascendent","nestedSort":"Ordre imbricat","unsorted":"No ordenis aquesta finestra","singleSort":"Ordre únic","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/da/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/da/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/da/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Faldende","ascending":"Stigende","nestedSort":"Indlejret sortering","unsorted":"Sortér ikke denne kolonne","singleSort":"Enkel sortering","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/tr/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/tr/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/tr/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Azalan","ascending":"Artan","nestedSort":"İç İçe Sıralama","unsorted":"Bu sütunu sıralama","singleSort":"Tek Sıralama","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/ru/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/ru/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/ru/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"По убыванию","ascending":"По возрастанию","nestedSort":"Вложенная сортировка","unsorted":"Не сортировать этот столбец","singleSort":"Однократная сортировка","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Descending","sortingState":"${0} - ${1}","ascending":"Ascending","nestedSort":"Nested Sort","unsorted":"Do not sort this column","singleSort":"Single Sort"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/sv/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/sv/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/sv/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"fallande","ascending":"stigande","nestedSort":"nästlad sortering","unsorted":"Sortera inte den här kolumnen","singleSort":"enkel sortering","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/de/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/de/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/de/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Absteigend","ascending":"Aufsteigend","nestedSort":"Verschachtelte Sortierung","unsorted":"Spalte nicht sortieren","singleSort":"Einfache Sortierung","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/ja/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/ja/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/ja/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"降順","ascending":"昇順","nestedSort":"ネストされたソート","unsorted":"この列はソートしないでください","singleSort":"単一ソート","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/he/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/he/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/he/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"יורד","ascending":"עולה","nestedSort":"מיון מקונן ","unsorted":"לא למיין עמודה זו ","singleSort":"מיון יחיד","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/fi/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/fi/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/fi/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Laskeva","ascending":"Nouseva","nestedSort":"Sisäkkäinen lajittelu","unsorted":"Älä lajittele tätä saraketta","singleSort":"Yksinkertainen lajittelu","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/nb/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/nb/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/nb/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Synkende","ascending":"Stigende","nestedSort":"Nestet sortering","unsorted":"Ikke sorter denne kolonnen","singleSort":"Enkel sortering","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/el/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/el/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/el/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Φθίνουσα","ascending":"Αύξουσα","nestedSort":"Ένθετη ταξινόμηση","unsorted":"Χωρίς ταξινόμηση αυτής της στήλης","singleSort":"Απλή ταξινόμηση","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/ar/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/ar/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/ar/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"تنازلي","ascending":"تصاعدي","nestedSort":"فرز متداخل","unsorted":"عدم فرز هذا العمود","singleSort":"فرز منفرد","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/pt-pt/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/pt-pt/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/pt-pt/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Descendente","ascending":"Ascendente","nestedSort":"Ordenação imbricada","unsorted":"Não ordenar esta coluna","singleSort":"Ordenação única","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/cs/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/cs/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/cs/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Sestupně","ascending":"Vzestupně","nestedSort":"Vnořené řazení","unsorted":"Tento sloupec neřadit","singleSort":"Jednoduché řazení","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/fr/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/fr/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/fr/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Décroissant","ascending":"Croissant","nestedSort":"Tri imbriqué","unsorted":"Ne pas trier cette colonne","singleSort":"Tri unique","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/es/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/es/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/es/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Descendente","ascending":"Ascendente","nestedSort":"Orden anidado","unsorted":"No ordenar esta columna","singleSort":"Orden único","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/ko/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/ko/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/ko/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"내림차순","ascending":"오름차순","nestedSort":"중첩 정렬","unsorted":"이 열을 정렬하지 않음","singleSort":"단일 정렬","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/nl/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/nl/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/nl/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Aflopend","ascending":"Oplopend","nestedSort":"Geneste sorteerbewerking","unsorted":"Deze kolom niet sorteren","singleSort":"Enkele sorteerbewerking","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/zh-tw/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/zh-tw/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/zh-tw/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"遞減","ascending":"遞增","nestedSort":"巢狀排序","unsorted":"不排序此直欄","singleSort":"單一排序","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/th/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/th/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/th/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"จากมากไปหาน้อย","ascending":"จากน้อยไปหามาก","nestedSort":"เรียงลำดับที่ซับซ้อน","unsorted":"ห้ามเรียงลำดับคอลัมน์นี้","singleSort":"เรียงลำดับแบบเดี่ยว","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/pl/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/pl/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/pl/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Malejąco","ascending":"Rosnąco","nestedSort":"Sortowanie zagnieżdżone","unsorted":"Nie sortuj tej kolumny","singleSort":"Sortowanie pojedyncze","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/hu/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/hu/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/hu/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Csökkenő","ascending":"Növekvő","nestedSort":"Beágyazott rendezés","unsorted":"Az oszlop nincs rendezve","singleSort":"Egyszerű rendezés","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/it/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/it/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/it/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Decrescente","ascending":"Crescente","nestedSort":"Ordinamento nidificato","unsorted":"Non ordinare questa colonna","singleSort":"Ordinamento singolo","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/sk/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/sk/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/sk/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Zostupne ","ascending":"Vzostupne ","nestedSort":"Vnorené triedenie ","unsorted":"Netriediť tento stĺpec ","singleSort":"Jednoduché triedenie ","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/nls/sl/EnhancedGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/nls/sl/EnhancedGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/nls/sl/EnhancedGrid.js	(revision 9)
@@ -0,0 +1 @@
+({"descending":"Padajoče","ascending":"Naraščajoče","nestedSort":"Ugnezdena razvrstitev","unsorted":"Ne razvrsti tega stolpca","singleSort":"Razvrsti po vrsti","sortingState":"${0} - ${1}"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/grid/enhanced/_Events.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/_Events.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/_Events.js	(revision 9)
@@ -0,0 +1,376 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced._Events"]){
+dojo._hasResource["dojox.grid.enhanced._Events"]=true;
+dojo.provide("dojox.grid.enhanced._Events");
+dojo.declare("dojox.grid.enhanced._Events",null,{_events:null,headerCellActiveClass:"dojoxGridHeaderActive",cellActiveClass:"dojoxGridCellActive",rowActiveClass:"dojoxGridRowActive",selectRegionHoverClass:"dojoxGridSelectRegionHover",constructor:function(_1){
+this._events=new dojox.grid._Events();
+for(p in this._events){
+if(!this[p]){
+this.p=this._events.p;
+}
+}
+_1.mixin(_1,this);
+},onStyleRow:function(_2){
+var i=_2;
+i.customClasses+=(i.odd?" dojoxGridRowOdd":"")+(i.selected?" dojoxGridRowSelected":"")+(i.over?" dojoxGridRowOver":"");
+this.focus.styleRow(_2);
+this.edit.styleRow(_2);
+},dokeyup:function(e){
+this.indirectSelection&&!this.pluginMgr.inSingleSelection()&&this.indirectSelector.dokeyup(e);
+},onKeyDown:function(e){
+if(e.altKey||e.metaKey){
+return;
+}
+if(e.ctrlKey&&!e.shiftKey){
+dojo.publish("CTRL_KEY_DOWN",[this,e]);
+}
+var _3=false;
+if(this.isDndSelectEnable&&!e.ctrlKey){
+this.select.keepState=false;
+}
+if(this.isDndSelectEnable&&!e.shiftKey){
+this.select.extendSelect=false;
+}
+var dk=dojo.keys;
+switch(e.keyCode){
+case dk.ENTER:
+_3=true;
+if(!this.edit.isEditing()){
+var _4=this.focus.getHeaderIndex();
+if(_4>=0){
+this.nestedSorting&&this.focus.focusView.header.decorateEvent(e);
+var _5=e.cell&&this.pluginMgr.isFixedCell(e.cell);
+!e.selectChoice&&!_5&&this.setSortIndex(_4,null,e);
+break;
+}else{
+!this.indirectSelection&&this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+dojo.stopEvent(e);
+}
+if(!e.shiftKey){
+var _6=this.edit.isEditing();
+this.edit.apply();
+if(!_6&&!this.pluginMgr.isFixedCell(this.focus.cell)){
+this.edit.setEditCell(this.focus.cell,this.focus.rowIndex);
+}
+}
+if(!this.edit.isEditing()){
+var _7=this.focus.focusView||this.views.views[0];
+_7.content.decorateEvent(e);
+this.onRowClick(e);
+}
+break;
+case dk.SPACE:
+_3=true;
+if(!this.edit.isEditing()){
+var _4=this.focus.getHeaderIndex();
+if(_4>=0){
+this.focus.focusView.header.decorateEvent(e);
+if(this.indirectSelection&&e.cell&&e.cell.isRowSelector){
+return;
+}
+if(this.isDndSelectEnable&&(!this.nestedSorting&&!this.canSort()||this.nestedSorting&&e.selectChoice)){
+this.inDNDKeySelectingColumnMode=true;
+this.select.keepState=e.ctrlKey;
+this.select.extendSelect=e.shiftKey;
+if(!this.select.extendSelect){
+this.select.drugSelectionStart.colIndex=_4;
+}
+this.select.drugSelectColumn(_4);
+}else{
+var _5=e.cell&&this.pluginMgr.isFixedCell(e.cell);
+!_5&&e.rowIndex==-1&&e.cell&&this.setSortIndex(_4,null,e);
+}
+break;
+}else{
+if(this.isDndSelectEnable&&this.focus.isRowBar()){
+this.inDNDKeySelectingRowMode=true;
+this.select.keepState=e.ctrlKey;
+this.select.extendSelect=e.shiftKey;
+if(!this.select.extendSelect||this.pluginMgr.inSingleSelection()){
+this.select.drugSelectionStart.rowIndex=this.focus.getFocusedRowIndex();
+}
+this.select.drugSelectRow(this.focus.getFocusedRowIndex());
+}else{
+!this.indirectSelection&&this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+}
+dojo.stopEvent(e);
+}
+break;
+case dk.LEFT_ARROW:
+case dk.RIGHT_ARROW:
+_3=true;
+this.nestedSorting&&this.focus.focusView.header.decorateEvent(e);
+var _8=this.isDndSelectEnable&&e.shiftKey;
+var _5=e.cell&&this.pluginMgr.isFixedCell(e.cell);
+if(this.nestedSorting&&this.focus.isNavHeader()&&!_8&&!_5){
+this.focus.navHeader(e);
+return;
+}
+if(!this.edit.isEditing()){
+var _9=e.keyCode;
+dojo.stopEvent(e);
+var _a=this.focus.getHeaderIndex();
+if(_a>=0&&(e.shiftKey&&e.ctrlKey)){
+this.focus.colSizeAdjust(e,_a,(_9==dk.LEFT_ARROW?-1:1)*5);
+return;
+}
+var _b=(_9==dk.LEFT_ARROW)?1:-1;
+if(dojo._isBodyLtr()){
+_b*=-1;
+}
+if(this.nestedSorting&&this.focus.isNavHeader()&&(_8||_5)){
+this.focus.navHeaderNode(_b,true);
+}else{
+if(!(this.isDndSelectEnable&&this.focus.isRowBar())){
+this.focus.move(0,_b);
+}
+}
+if(_8){
+var _4=this.focus.getHeaderIndex();
+if(!this.select.isColSelected(_a)){
+this.inDNDKeySelectingColumnMode=true;
+this.select.drugSelectionStart.colIndex=_a;
+}else{
+if(this.select.drugSelectionStart.colIndex==-1){
+this.select.restorLastDragPoint();
+}
+}
+if(e.ctrlKey){
+this.select.drugSelectColumnToMax(e.keyCode==dk.LEFT_ARROW?"left":"right");
+}else{
+this.select.drugSelectColumn(_4);
+}
+}
+}
+break;
+case dk.UP_ARROW:
+case dk.DOWN_ARROW:
+_3=true;
+if(this.nestedSorting&&this.focus.isNavHeader()){
+return;
+}
+var _c=e.keyCode==dk.UP_ARROW?-1:1;
+if(this.isDndSelectEnable){
+var _d=this.focus.getFocusedRowIndex();
+}
+if(this.isDndSelectEnable&&this.focus.isRowBar()){
+this.focus[e.keyCode==dk.UP_ARROW?"focusPrevRowBar":"focusNextRowBar"]();
+dojo.stopEvent(e);
+}else{
+if(!this.edit.isEditing()&&this.store&&0<=(this.focus.rowIndex+_c)&&(this.focus.rowIndex+_c)<this.rowCount){
+dojo.stopEvent(e);
+this.focus.move(_c,0);
+this.indirectSelection&&this.focus.cell&&this.focus.cell.focus(this.focus.rowIndex);
+!this.indirectSelection&&this.selection.clickSelect(this.focus.rowIndex,dojo.isCopyKey(e),e.shiftKey);
+}
+}
+if(this.isDndSelectEnable&&this.focus.isRowBar()&&e.shiftKey&&!this.pluginMgr.inSingleSelection()){
+if(!this.select.isRowSelected(_d)){
+this.inDNDKeySelectingRowMode=true;
+this.select.drugSelectionStart.rowIndex=_d;
+}else{
+if(this.select.drugSelectionStart.rowIndex==-1){
+this.select.restorLastDragPoint();
+}
+}
+if(e.ctrlKey){
+this.select.drugSelectRowToMax(e.keyCode==dk.UP_ARROW?"up":"down");
+}else{
+var _e=this.focus.getFocusedRowIndex();
+this.select.drugSelectRow(_e);
+}
+}else{
+if(this.indirectSelection&&e.shiftKey&&!this.pluginMgr.inSingleSelection()&&this.focus.rowIndex>=0){
+this.focus.focusView.content.decorateEvent(e);
+if(e.cellIndex!=0||e.rowIndex==0&&_c==-1){
+return;
+}
+this.indirectSelector.swipeSelectionByKey(e,_c);
+}
+}
+break;
+case dk.ESCAPE:
+try{
+this.select.cancelDND();
+}
+catch(e){
+}
+break;
+}
+!_3&&(dojo.hitch(this,this._events.onKeyDown)(e));
+},onMouseDown:function(e){
+dojo.hitch(this,this._events.onMouseDown)(e);
+if(this.isDndSelectEnable&&!e.shiftKey){
+this.select.setDrugStartPoint(e.cellIndex,e.rowIndex);
+}
+},onMouseUp:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseUp(e):this.onCellMouseUp(e);
+},onMouseOutRow:function(e){
+if(this.isDndSelectEnable){
+return;
+}
+dojo.hitch(this,this._events.onMouseOutRow)(e);
+},onMouseDownRow:function(e){
+if(this.isDndSelectEnable){
+return;
+}
+dojo.hitch(this,this._events.onMouseDownRow)(e);
+},onCellMouseOver:function(e){
+dojo.hitch(this,this._events.onCellMouseOver)(e);
+var _f=this.pluginMgr.isFixedCell(e.cell)||this.rowSelectCell&&this.rowSelectCell.inIndirectSelectionMode();
+if(this.isDndSelectEnable&&!_f){
+if(this.select.isInSelectingMode("col")){
+this.select.drugSelectColumn(e.cell.index);
+}else{
+if(this.select.isInSelectingMode("cell")){
+this.select.drugSelectCell(e.cellIndex,e.rowIndex);
+}else{
+this.select.setDrugCoverDivs(e.cellIndex,e.rowIndex);
+}
+}
+}
+},onCellMouseOut:function(e){
+dojo.hitch(this,this._events.onCellMouseOut)(e);
+this.doubleAffordance&&e.cellNode&&dojo.removeClass(e.cellNode,this.cellActiveClass);
+},onCellMouseDown:function(e){
+dojo.addClass(e.cellNode,this.cellActiveClass);
+dojo.addClass(e.rowNode,this.rowActiveClass);
+if(this.isDndSelectEnable){
+this.focus._blurRowBar();
+if(e.cellIndex>this.select.exceptColumnsTo){
+this.select.setInSelectingMode("cell",true);
+}
+}
+},onCellMouseUp:function(e){
+dojo.removeClass(e.cellNode,this.cellActiveClass);
+dojo.removeClass(e.rowNode,this.rowActiveClass);
+},onCellClick:function(e){
+if(this.isDndSelectEnable){
+this.focus._blurRowBar();
+this._click[0]=this._click[1];
+this._click[1]=e;
+this.select.cellClick(e.cellIndex,e.rowIndex);
+!this.edit.isEditCell(e.rowIndex,e.cellIndex)&&!this.edit.isEditing()&&this.select.cleanAll();
+this.focus.setFocusCell(e.cell,e.rowIndex);
+}else{
+dojo.hitch(this,this._events.onCellClick)(e);
+}
+},onCellDblClick:function(e){
+if(this.pluginMgr.isFixedCell(e.cell)){
+return;
+}
+this._click.length>1&&(!this._click[0]||!this._click[1])&&(this._click[0]=this._click[1]=e);
+dojo.hitch(this,this._events.onCellDblClick)(e);
+},onRowClick:function(e){
+this.edit.rowClick(e);
+!this.indirectSelection&&this.selection.clickSelectEvent(e);
+},onRowMouseOver:function(e){
+if(this.isDndSelectEnable&&!this.pluginMgr.inSingleSelection()){
+if(this.select.isInSelectingMode("row")){
+this.select.drugSelectRow(e.rowIndex);
+}else{
+}
+}
+if(!e.cell&&e.cellIndex<0||e.cell&&(e.cell!=this.rowSelectCell)&&this.indirectSelection){
+var _10=this.rowSelectCell;
+_10&&_10.onRowMouseOver&&_10.onRowMouseOver(e);
+}
+},onRowMouseOut:function(e){
+if(this.isDndSelectEnable){
+if(this.select.isInSelectingMode("row")){
+this.select.drugSelectRow(e.rowIndex);
+}
+}
+},onRowContextMenu:function(e){
+!this.edit.isEditing()&&this.menus&&this.showRowCellMenu(e);
+},onSelectedRegionContextMenu:function(e){
+if(this.selectedRegionMenu){
+this.selectedRegionMenu._openMyself({target:e.target,coords:"pageX" in e?{x:e.pageX,y:e.pageY}:null});
+dojo.stopEvent(e);
+}
+},onHeaderCellMouseOver:function(e){
+if(e.cellNode){
+dojo.addClass(e.cellNode,this.cellOverClass);
+if(this.nestedSorting&&!this._inResize(e.sourceView)&&!this.pluginMgr.isFixedCell(e.cell)&&!(this.isDndSelectEnable&&this.select.isInSelectingMode("col"))){
+this.addHoverSortTip(e);
+}
+if(this.isDndSelectEnable){
+if(this.select.isInSelectingMode("col")){
+this.select.drugSelectColumn(e.cell.index);
+}else{
+this.select.clearDrugDivs();
+}
+}
+}
+},onHeaderCellMouseOut:function(e){
+if(e.cellNode){
+dojo.removeClass(e.cellNode,this.cellOverClass);
+dojo.removeClass(e.cellNode,this.headerCellActiveClass);
+if(this.nestedSorting&&!this.pluginMgr.isFixedCell(e.cell)){
+if(this.focus.headerCellInFocus(e.cellIndex)){
+this._toggleHighlight(e.sourceView,e,true);
+}else{
+this.removeHoverSortTip(e);
+}
+}
+}
+},onHeaderCellMouseDown:function(e){
+var _11=!this.nestedSorting?e.cellNode:this._getChoiceRegion(e.cellNode,e);
+_11&&dojo.addClass(_11,this.headerCellActiveClass);
+if(this.nestedSorting&&!e.selectChoice){
+return;
+}
+if(this.isDndSelectEnable){
+this.focus._blurRowBar();
+try{
+this.focus.focusHeaderNode(e.cellIndex,false,true);
+}
+catch(e){
+}
+if(e.button==2){
+return;
+}
+if(e.cellNode){
+this.select.setInSelectingMode("col",true);
+this.select.keepState=e.ctrlKey;
+this.select.extendSelect=e.shiftKey;
+if(this.select.extendSelect){
+this.select.restorLastDragPoint();
+}else{
+this.select.drugSelectionStart.colIndex=e.cellIndex;
+}
+this.select.drugSelectColumn(e.cellIndex);
+}
+}
+},onHeaderCellMouseUp:function(e){
+var _12=!this.nestedSorting?e.cellNode:this._getChoiceRegion(e.cellNode,e);
+if(_12){
+dojo.removeClass(_12,this.headerCellActiveClass);
+e.selectChoice&&dojo.addClass(_12,this.selectRegionHoverClass);
+}
+},onHeaderCellClick:function(e){
+if(this.nestedSorting){
+if((e.unarySortChoice||e.nestedSortChoice)&&!this._inResize(e.sourceView)){
+this.setSortIndex(e.cell.index,null,e);
+}
+}else{
+if(!(this.indirectSelection&&e.cell&&e.cell.isRowSelector)){
+this.setSortIndex(e.cell.index);
+}
+}
+dojo.hitch(this,this._events.onHeaderClick)(e);
+},onHeaderContextMenu:function(e){
+if(this.nestedSorting&&this.headerMenu){
+this._toggleHighlight(e.sourceView,e,true);
+}
+dojo.hitch(this,this._events.onHeaderContextMenu)(e);
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/_Builder.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/_Builder.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/_Builder.js	(revision 9)
@@ -0,0 +1,81 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced._Builder"]){
+dojo._hasResource["dojox.grid.enhanced._Builder"]=true;
+dojo.provide("dojox.grid.enhanced._Builder");
+dojo.require("dojox.grid._Builder");
+dojo.declare("dojox.grid.enhanced._BuilderMixin",null,{generateCellMarkup:function(_1,_2,_3,_4){
+var _5=this.inherited(arguments);
+if(!_4){
+_5[4]+="<div class=\"dojoxGridCellContent\">";
+_5[6]="</div></td>";
+}
+return _5;
+},domouseup:function(e){
+if(e.cellNode){
+this.grid.onMouseUp(e);
+}
+}});
+dojo.declare("dojox.grid.enhanced._HeaderBuilder",[dojox.grid._HeaderBuilder,dojox.grid.enhanced._BuilderMixin],{getCellX:function(e){
+if(this.grid.nestedSorting){
+var _6=function(_7,_8){
+for(var n=_7;n&&_8(n);n=n.parentNode){
+}
+return n;
+};
+var _9=function(_a){
+var _b=_a.toUpperCase();
+return function(_c){
+return _c.tagName!=_b;
+};
+};
+var no=_6(e.target,_9("th"));
+var x=no?e.pageX-dojo.coords(no,true).x:-1;
+if(dojo.isIE){
+var _d=dojo.body().getBoundingClientRect();
+var _e=(_d.right-_d.left)/document.body.clientWidth;
+return parseInt(x/_e);
+}
+return x;
+}
+return this.inherited(arguments);
+},decorateEvent:function(e){
+var _f=this.inherited(arguments);
+if(this.grid.nestedSorting){
+var _10=this.grid._getSortEventInfo(e);
+e.unarySortChoice=_10.unarySortChoice;
+e.nestedSortChoice=_10.nestedSortChoice;
+e.selectChoice=_10.selectChoice;
+}
+return _f;
+},doclick:function(e){
+if((this._skipBogusClicks&&!this.grid.nestedSorting)||(this.grid.nestedSorting&&this.grid.ignoreEvent(e))){
+dojo.stopEvent(e);
+return true;
+}
+},colResizeSetup:function(e,_11){
+var _12=this.minColWidth;
+if(e.sourceView.grid.nestedSorting&&!this.grid.pluginMgr.isFixedCell(e.cell)){
+this.minColWidth=this.grid.getMinColWidth();
+var _13=dojo.connect(this,"endResizeColumn",dojo.hitch(this,function(){
+this.minColWidth=_12;
+dojo.disconnect(_13);
+}));
+}
+var _14=this.inherited(arguments);
+if(!dojo._isBodyLtr()&&dojo.isIE&&_14.followers){
+dojo.forEach(_14.followers,function(_15){
+if(!_15.left){
+_15.left=dojo.position(_15.node).x;
+}
+});
+}
+return _14;
+}});
+dojo.declare("dojox.grid.enhanced._ContentBuilder",[dojox.grid._ContentBuilder,dojox.grid.enhanced._BuilderMixin],{});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/plugins/Menu.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/plugins/Menu.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/plugins/Menu.js	(revision 9)
@@ -0,0 +1,72 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.Menu"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.Menu"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.Menu");
+dojo.declare("dojox.grid.enhanced.plugins.Menu",null,{constructor:function(_1){
+_1.mixin(_1,this);
+},_initMenus:function(){
+var _2=this.menuContainer;
+!this.headerMenu&&(this.headerMenu=this._getMenuWidget(this.menus["headerMenu"]));
+!this.rowMenu&&(this.rowMenu=this._getMenuWidget(this.menus["rowMenu"]));
+!this.cellMenu&&(this.cellMenu=this._getMenuWidget(this.menus["cellMenu"]));
+!this.selectedRegionMenu&&(this.selectedRegionMenu=this._getMenuWidget(this.menus["selectedRegionMenu"]));
+this.headerMenu&&this.set("headerMenu",this.headerMenu)&&this.setupHeaderMenu();
+this.rowMenu&&this.set("rowMenu",this.rowMenu);
+this.cellMenu&&this.set("cellMenu",this.cellMenu);
+this.isDndSelectEnable&&this.selectedRegionMenu&&dojo.connect(this.select,"setDrugCoverDivs",dojo.hitch(this,this._bindDnDSelectEvent));
+},_getMenuWidget:function(_3){
+if(!_3){
+return;
+}
+var _4=dijit.byId(_3);
+if(!_4){
+throw new Error("Menu '"+_3+"' not existed");
+}
+return _4;
+},_bindDnDSelectEvent:function(){
+dojo.forEach(this.select.coverDIVs,dojo.hitch(this,function(_5){
+this.selectedRegionMenu.bindDomNode(_5);
+dojo.connect(_5,"contextmenu",dojo.hitch(this,function(e){
+dojo.mixin(e,this.select.getSelectedRegionInfo());
+this.onSelectedRegionContextMenu(e);
+}));
+}));
+},_setRowMenuAttr:function(_6){
+this._setRowCellMenuAttr(_6,"rowMenu");
+},_setCellMenuAttr:function(_7){
+this._setRowCellMenuAttr(_7,"cellMenu");
+},_setRowCellMenuAttr:function(_8,_9){
+if(!_8){
+return;
+}
+if(this[_9]){
+this[_9].unBindDomNode(this.domNode);
+}
+this[_9]=_8;
+this[_9].bindDomNode(this.domNode);
+},showRowCellMenu:function(e){
+var _a=e.sourceView.declaredClass=="dojox.grid._RowSelector";
+if(this.rowMenu&&(!e.cell||this.selection.isSelected(e.rowIndex))){
+this.rowMenu._openMyself({target:e.target,coords:"pageX" in e?{x:e.pageX,y:e.pageY}:null});
+dojo.stopEvent(e);
+return;
+}
+if(_a||e.cell&&e.cell.isRowSelector){
+dojo.stopEvent(e);
+return;
+}
+if(this.isDndSelectEnable){
+this.select.cellClick(e.cellIndex,e.rowIndex);
+this.focus.setFocusCell(e.cell,e.rowIndex);
+}
+if(this.cellMenu){
+this.cellMenu._openMyself({target:e.target,coords:"pageX" in e?{x:e.pageX,y:e.pageY}:null});
+}
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/plugins/DnD.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/plugins/DnD.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/plugins/DnD.js	(revision 9)
@@ -0,0 +1,13 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.DnD"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.DnD"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.DnD");
+dojo.require("dojox.grid.enhanced.dnd._DndMovingManager");
+dojo.declare("dojox.grid.enhanced.plugins.DnD",dojox.grid.enhanced.dnd._DndMovingManager,{});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js	(revision 9)
@@ -0,0 +1,291 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.IndirectSelection"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.IndirectSelection"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.IndirectSelection");
+dojo.require("dojox.grid.cells.dijit");
+dojo.require("dojox.grid.cells._base");
+dojo.declare("dojox.grid.enhanced.plugins.IndirectSelection",null,{constructor:function(_1){
+this.grid=_1;
+dojo.connect(_1.layout,"setStructure",dojo.hitch(_1.layout,this.addRowSelectCell));
+},addRowSelectCell:function(){
+if(!this.grid.indirectSelection||this.grid.selectionMode=="none"){
+return;
+}
+var _2=false,_3=["get","formatter","field","fields"],_4={type:dojox.grid.cells.DijitMultipleRowSelector,name:"",editable:true,width:"30px",styles:"text-align: center;"};
+dojo.forEach(this.structure,dojo.hitch(this,function(_5){
+var _6=_5.cells;
+if(_6&&_6.length>0&&!_2){
+var _7=_6[0];
+if(_7[0]&&_7[0]["isRowSelector"]){
+_2=true;
+return;
+}
+var _8,_9=this.grid.selectionMode=="single"?dojox.grid.cells.DijitSingleRowSelector:dojox.grid.cells.DijitMultipleRowSelector;
+if(!dojo.isObject(this.grid.indirectSelection)){
+_8=dojo.mixin(_4,{type:_9});
+}else{
+_8=dojo.mixin(_4,this.grid.indirectSelection,{type:_9,editable:true});
+dojo.forEach(_3,function(_a){
+if(_a in _8){
+delete _8[_a];
+}
+});
+}
+_6.length>1&&(_8["rowSpan"]=_6.length);
+dojo.forEach(this.cells,function(_b,i){
+if(_b.index>=0){
+_b.index+=1;
+}else{
+}
+});
+var _c=this.addCellDef(0,0,_8);
+_c.index=0;
+_7.unshift(_c);
+this.cells.unshift(_c);
+this.grid.rowSelectCell=_c;
+_2=true;
+}
+}));
+this.cellCount=this.cells.length;
+}});
+dojo.declare("dojox.grid.cells._SingleRowSelectorMixin",null,{alwaysEditing:true,widgetMap:{},widget:null,isRowSelector:true,defaultValue:false,formatEditing:function(_d,_e){
+this.needFormatNode(_d,_e);
+},_formatNode:function(_f,_10){
+this.formatNode(_f,_10);
+},setValue:function(_11,_12){
+return;
+},get:function(_13){
+var _14=this.widgetMap[this.view.id]?this.widgetMap[this.view.id][_13]:null;
+var _15=_14?_14.attr("checked"):"";
+return _15;
+},_fireSelectionChanged:function(){
+dojo.publish(this.grid.rowSelectionChangedTopic,[this]);
+},_selectionChanged:function(obj){
+if(obj==this||obj.grid&&obj.grid!=this.grid){
+return;
+}
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _16=this.widgetMap[this.view.id][idx];
+var _17=!!this.grid.selection.selected[idx];
+_16.attr("checked",_17);
+}
+this.defaultValue=false;
+this.grid.edit.isEditing()&&this.grid.edit.apply();
+},_toggleSingleRow:function(idx,_18){
+var _19;
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_18?"addToSelection":"deselect"])(idx);
+if(this.widgetMap[this.view.id]&&(_19=this.widgetMap[this.view.id][idx])){
+_19.attr("checked",_18);
+}
+this._fireSelectionChanged();
+},inIndirectSelectionMode:function(){
+},toggleAllSelection:function(){
+}});
+dojo.declare("dojox.grid.cells._MultipleRowSelectorMixin",null,{swipeStartRowIndex:-1,swipeMinRowIndex:-1,swipeMaxRowIndex:-1,toSelect:false,lastClickRowIdx:-1,toggleAllTrigerred:false,_inDndSelection:false,domousedown:function(e){
+if(e.target.tagName=="INPUT"){
+this._startSelection(e.rowIndex);
+}
+dojo.stopEvent(e);
+},domousemove:function(e){
+this._updateSelection(e,0);
+},onRowMouseOver:function(e){
+this._updateSelection(e,0);
+if(this.grid.dnd){
+this._inDndSelection=this.grid.select.isInSelectingMode("row");
+}
+},domouseup:function(e){
+dojo.isIE&&this.view.content.decorateEvent(e);
+var _1a=e.cellIndex>=0&&(this.inIndirectSelectionMode()||this._inDndSelection)&&!this.grid.edit.isEditRow(e.rowIndex);
+_1a&&this._focusEndingCell(e.rowIndex,e.cellIndex);
+this._finisheSelect();
+},dokeyup:function(e){
+if(!e.shiftKey){
+this._finisheSelect();
+}
+},_startSelection:function(_1b){
+this.swipeStartRowIndex=this.swipeMinRowIndex=this.swipeMaxRowIndex=_1b;
+this.toSelect=!this.widgetMap[this.view.id][_1b].attr("checked");
+},_updateSelection:function(e,_1c){
+if(this.swipeStartRowIndex<0){
+return;
+}
+var _1d=_1c!=0;
+var _1e=e.rowIndex-this.swipeStartRowIndex+_1c;
+_1e>0&&(this.swipeMaxRowIndex<e.rowIndex+_1c)&&(this.swipeMaxRowIndex=e.rowIndex+_1c);
+_1e<0&&(this.swipeMinRowIndex>e.rowIndex+_1c)&&(this.swipeMinRowIndex=e.rowIndex+_1c);
+if(this.swipeMinRowIndex!=this.swipeMaxRowIndex){
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _1f=(idx>=(_1e>0?this.swipeStartRowIndex:e.rowIndex+_1c)&&idx<=(_1e>0?e.rowIndex+_1c:this.swipeStartRowIndex));
+var _20=(idx>=this.swipeMinRowIndex&&idx<=this.swipeMaxRowIndex);
+if(_1f&&!(_1e==0&&!this.toSelect)){
+(this.widgetMap[this.view.id][idx]).attr("checked",this.toSelect);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[this.toSelect?"addToSelection":"deselect"])(idx);
+}else{
+if(_20&&!_1d){
+(this.widgetMap[this.view.id][idx]).attr("checked",!this.toSelect);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[!this.toSelect?"addToSelection":"deselect"])(idx);
+}
+}
+}
+}
+this._fireSelectionChanged();
+},swipeSelectionByKey:function(e,_21){
+if(this.swipeStartRowIndex<0){
+this.swipeStartRowIndex=e.rowIndex;
+if(_21>0){
+this.swipeMaxRowIndex=e.rowIndex+_21;
+this.swipeMinRowIndex=e.rowIndex;
+}else{
+this.swipeMinRowIndex=e.rowIndex+_21;
+this.swipeMaxRowIndex=e.rowIndex;
+}
+this.toSelect=this.widgetMap[this.view.id][e.rowIndex].attr("checked");
+}
+this._updateSelection(e,_21);
+},_finisheSelect:function(){
+this.swipeStartRowIndex=-1;
+this.swipeMinRowIndex=-1;
+this.swipeMaxRowIndex=-1;
+this.toSelect=false;
+},inIndirectSelectionMode:function(){
+return this.swipeStartRowIndex>=0;
+},toggleAllSelection:function(_22){
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _23=this.widgetMap[this.view.id][idx];
+_23.attr("checked",_22);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_22?"addToSelection":"deselect"])(idx);
+}
+!_22&&this.grid.selection.deselectAll();
+this.defaultValue=_22;
+this.toggleAllTrigerred=true;
+this._fireSelectionChanged();
+}});
+dojo.declare("dojox.grid.cells.DijitSingleRowSelector",[dojox.grid.cells._Widget,dojox.grid.cells._SingleRowSelectorMixin],{widgetClass:dijit.form.RadioButton,constructor:function(){
+dojo.subscribe(this.grid.rowSelectionChangedTopic,this,this._selectionChanged);
+dojo.subscribe(this.grid.sortRowSelectionChangedTopic,this,this._selectionChanged);
+this.grid.indirectSelector=this;
+},formatNode:function(_24,_25){
+if(!this.widgetClass){
+return _24;
+}
+!this.widgetMap[this.view.id]&&(this.widgetMap[this.view.id]={});
+var _26=this.widgetMap[this.view.id][_25];
+var _27=this.getNode(_25);
+if(!_27){
+return;
+}
+var _28=!_27.firstChild||(_26&&_26.domNode!=_27.firstChild);
+var _29=_28&&!_27.firstChild?_27.appendChild(dojo.create("div")):_27.firstChild;
+if(!_26||dojo.isIE){
+!this.widgetProps&&(this.widgetProps={});
+this.widgetProps.name="select_"+this.view.id;
+var _2a=this.getDefaultValue(_26,_25);
+this.widget=_26=this.createWidget(_29,_24,_25);
+this.widgetMap[this.view.id][_25]=_26;
+this.widget.attr("checked",_2a);
+dojo.connect(_26,"_onClick",dojo.hitch(this,function(e){
+this._selectRow(e,_25);
+}));
+dojo.connect(_26.domNode,"onkeyup",dojo.hitch(this,function(e){
+e.keyCode==dojo.keys.SPACE&&this._selectRow(e,_25,true);
+}));
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_2a?"addToSelection":"deselect"])(_25);
+}else{
+this.widget=_26;
+dojo.addClass(this.widget.domNode,"dojoxGridWidgetHidden");
+_28&&this.attachWidget(_29,_24,_25);
+}
+this.grid.rowHeightChanged(_25);
+dojo.removeClass(this.widget.domNode,"dojoxGridWidgetHidden");
+(_25==this.grid.lastRenderingRowIdx)&&dojo.removeClass(this.grid.domNode,"dojoxGridSortInProgress");
+},getDefaultValue:function(_2b,_2c){
+var _2d=_2b?_2b.attr("checked"):this.defaultValue;
+if(!_2b){
+if(this.grid.nestedSorting){
+_2d=_2d||this.grid.getStoreSelectedValue(_2c);
+}
+_2d=this.grid.selection.isSelected(_2c)?true:_2d;
+}
+return _2d;
+},focus:function(_2e){
+var _2f=this.widgetMap[this.view.id][_2e];
+if(_2f){
+setTimeout(dojo.hitch(_2f,function(){
+dojox.grid.util.fire(this,"focus");
+}),0);
+}
+},_focusEndingCell:function(_30,_31){
+var _32=this.grid.getCell(_31);
+this.grid.focus.setFocusCell(_32,_30);
+this.grid.isDndSelectEnable&&this.grid.focus._blurRowBar();
+},_selectRow:function(e,_33,_34){
+if(dojo.isMoz&&_34){
+return;
+}
+dojo.stopEvent(e);
+this._focusEndingCell(_33,0);
+var _35=!this.grid.selection.selected[_33];
+this.grid.selection.deselectAll();
+this.grid.selection.addToSelection(_33);
+if(!dojo.isMoz){
+var _36=this.widgetMap[this.view.id][_33];
+_36.attr("checked",true);
+}
+this._fireSelectionChanged();
+},toggleRow:function(idx,_37){
+var _38=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype.getFirstSelected)();
+if(idx!=_38&&!_37||idx==_38&&_37){
+return;
+}
+var _39;
+if(idx!=_38&&_37&&this.widgetMap[this.view.id]&&(_39=this.widgetMap[this.view.id][_38])){
+_39.attr("checked",false);
+}
+this.grid.selection.deselectAll();
+this._toggleSingleRow(idx,_37);
+},setDisabled:function(idx,_3a){
+if(this.widgetMap[this.view.id]){
+var _3b=this.widgetMap[this.view.id][idx];
+_3b&&_3b.attr("disabled",_3a);
+}
+}});
+dojo.declare("dojox.grid.cells.DijitMultipleRowSelector",[dojox.grid.cells.DijitSingleRowSelector,dojox.grid.cells._MultipleRowSelectorMixin],{widgetClass:dijit.form.CheckBox,constructor:function(){
+dojo.connect(dojo.doc,"onmouseup",this,"domouseup");
+this.grid.indirectSelector=this;
+},_selectRow:function(e,_3c,_3d){
+dojo.stopEvent(e);
+this._focusEndingCell(_3c,0);
+var _3e=_3c-this.lastClickRowIdx;
+if(this.lastClickRowIdx>=0&&!e.ctrlKey&&!e.altKey&&e.shiftKey){
+var _3f=this.widgetMap[this.view.id][_3c].attr("checked");
+_3f=_3d?!_3f:_3f;
+for(var i in this.widgetMap[this.view.id]){
+var idx=new Number(i);
+var _40=(idx>=(_3e>0?this.lastClickRowIdx:_3c)&&idx<=(_3e>0?_3c:this.lastClickRowIdx));
+if(_40){
+var _41=this.widgetMap[this.view.id][idx];
+_41.attr("checked",_3f);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_3f?"addToSelection":"deselect"])(idx);
+}
+}
+}else{
+var _42=!this.grid.selection.selected[_3c];
+var _41=this.widgetMap[this.view.id][_3c];
+_41.attr("checked",_42);
+dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype[_42?"addToSelection":"deselect"])(_3c);
+}
+this.lastClickRowIdx=_3c;
+this._fireSelectionChanged();
+},toggleRow:function(idx,_43){
+this._toggleSingleRow(idx,_43);
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/plugins/NestedSorting.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/plugins/NestedSorting.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/plugins/NestedSorting.js	(revision 9)
@@ -0,0 +1,723 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.plugins.NestedSorting"]){
+dojo._hasResource["dojox.grid.enhanced.plugins.NestedSorting"]=true;
+dojo.provide("dojox.grid.enhanced.plugins.NestedSorting");
+dojo.declare("dojox.grid.enhanced.plugins.NestedSorting",null,{sortAttrs:[],_unarySortCell:{},_minColWidth:63,_widthDelta:23,_minColWidthUpdated:false,_sortTipMap:{},_overResizeWidth:3,storeItemSelected:"storeItemSelectedAttr",exceptionalSelectedItems:[],_a11yText:{"dojoxGridDescending":"&#9662;","dojoxGridAscending":"&#9652;","dojoxGridAscendingTip":"&#1784;","dojoxGridDescendingTip":"&#1783;","dojoxGridUnsortedTip":"x"},constructor:function(_1){
+_1.mixin(_1,this);
+dojo.forEach(_1.views.views,function(_2){
+dojo.connect(_2,"renderHeader",dojo.hitch(_2,_1._initSelectCols));
+dojo.connect(_2.header,"domousemove",_2.grid,"_sychronizeResize");
+});
+this.initSort(_1);
+_1.keepSortSelection&&dojo.connect(_1,"_onFetchComplete",_1,"updateNewRowSelection");
+if(_1.indirectSelection&&_1.rowSelectCell.toggleAllSelection){
+dojo.connect(_1.rowSelectCell,"toggleAllSelection",_1,"allSelectionToggled");
+}
+dojo.subscribe(_1.rowMovedTopic,_1,_1.clearSort);
+dojo.subscribe(_1.rowSelectionChangedTopic,_1,_1._selectionChanged);
+_1.focus.destroy();
+_1.focus=new dojox.grid.enhanced.plugins._NestedSortingFocusManager(_1);
+dojo.connect(_1.views,"render",_1,"initAriaInfo");
+},initSort:function(_3){
+_3.getSortProps=_3._getDsSortAttrs;
+},setSortIndex:function(_4,_5,e){
+if(!this.nestedSorting){
+this.inherited(arguments);
+}else{
+this.keepSortSelection&&this.retainLastRowSelection();
+this.inSorting=true;
+this._toggleProgressTip(true,e);
+this._updateSortAttrs(e,_5);
+this.focus.addSortFocus(e);
+if(this.canSort()){
+this.sort();
+this.edit.info={};
+this.update();
+}
+this._toggleProgressTip(false,e);
+this.inSorting=false;
+}
+},_updateSortAttrs:function(e,_6){
+var _7=false;
+var _8=!!e.unarySortChoice;
+if(_8){
+var _9=this.getCellSortInfo(e.cell);
+var _a=(this.sortAttrs.length>0&&_9["sortPos"]!=1)?_9["unarySortAsc"]:this._getNewSortState(_9["unarySortAsc"]);
+if(_a&&_a!=0){
+this.sortAttrs=[{attr:e.cell.field,asc:_a,cell:e.cell,cellNode:e.cellNode}];
+this._unarySortCell={cell:e.cell,node:e.cellNode};
+}else{
+this.sortAttrs=[];
+this._unarySortCell=null;
+}
+}else{
+this.setCellSortInfo(e,_6);
+}
+},getCellSortInfo:function(_b){
+if(!_b){
+return false;
+}
+var _c=null;
+var _d=this.sortAttrs;
+dojo.forEach(_d,function(_e,_f,_10){
+if(_e&&_e["attr"]==_b.field&&_e["cell"]==_b){
+_c={unarySortAsc:_10[0]?_10[0]["asc"]:undefined,nestedSortAsc:_e["asc"],sortPos:_f+1};
+}
+});
+return _c?_c:{unarySortAsc:_d&&_d[0]?_d[0]["asc"]:undefined,nestedSortAsc:undefined,sortPos:-1};
+},setCellSortInfo:function(e,_11){
+var _12=e.cell;
+var _13=false;
+var _14=[];
+var _15=this.sortAttrs;
+dojo.forEach(_15,dojo.hitch(this,function(_16,_17){
+if(_16&&_16["attr"]==_12.field){
+var si=_11?_11:this._getNewSortState(_16["asc"]);
+if(si==1||si==-1){
+_16["asc"]=si;
+}else{
+if(si==0){
+_14.push(_17);
+}else{
+throw new Exception("Illegal nested sorting status - "+si);
+}
+}
+_13=true;
+}
+}));
+var _18=0;
+dojo.forEach(_14,function(_19){
+_15.splice((_19-_18++),1);
+});
+if(!_13){
+var si=_11?_11:1;
+if(si!=0){
+_15.push({attr:_12.field,asc:si,cell:e.cell,cellNode:e.cellNode});
+}
+}
+if(_14.length>0){
+this._unarySortCell={cell:_15[0]["cell"],node:_15[0]["cellNode"]};
+}
+},_getDsSortAttrs:function(){
+var _1a=[];
+var si=null;
+dojo.forEach(this.sortAttrs,function(_1b){
+if(_1b&&(_1b["asc"]==1||_1b["asc"]==-1)){
+_1a.push({attribute:_1b["attr"],descending:(_1b["asc"]==-1)});
+}
+});
+return _1a.length>0?_1a:null;
+},_getNewSortState:function(si){
+return si?(si==1?-1:(si==-1?0:1)):1;
+},sortStateInt2Str:function(si){
+if(!si){
+return "Unsorted";
+}
+switch(si){
+case 1:
+return "Ascending";
+case -1:
+return "Descending";
+default:
+return "Unsorted";
+}
+},clearSort:function(){
+dojo.query("[id*='Sort']",this.viewsHeaderNode).forEach(function(_1c){
+dojo.addClass(_1c,"dojoxGridUnsorted");
+});
+this.sortAttrs=[];
+this.focus.clearHeaderFocus();
+},_getNestedSortHeaderContent:function(_1d){
+var n=_1d.name||_1d.grid.getCellName(_1d);
+if(_1d.grid.pluginMgr.isFixedCell(_1d)){
+return ["<div class=\"dojoxGridCellContent\">",n,"</div>"].join("");
+}
+var _1e=_1d.grid.getCellSortInfo(_1d);
+var _1f=_1d.grid.sortAttrs;
+var _20=(_1f&&_1f.length>1&&_1e["sortPos"]>=1);
+var _21=(_1f&&_1f.length==1&&_1e["sortPos"]==1);
+var _22=_1d.grid;
+var ret=["<div class=\"dojoxGridSortRoot\">","<div class=\"dojoxGridSortWrapper\">","<span id=\"selectSortSeparator"+_1d.index+"\" class=\"dojoxGridSortSeparatorOff\"></span>","<span class=\"dojoxGridNestedSortWrapper\" tabindex=\"-1\">","<span id=\""+_1d.view.id+"SortPos"+_1d.index+"\" class=\"dojoxGridSortPos "+(_20?"":"dojoxGridSortPosOff")+"\">"+(_20?_1e["sortPos"]:"")+"</span>","<span id=\"nestedSortCol"+_1d.index+"\" class=\"dojoxGridSort dojoxGridNestedSort "+(_20?("dojoxGrid"+_22.sortStateInt2Str(_1e["nestedSortAsc"])):"dojoxGridUnsorted")+"\">",_22._a11yText["dojoxGrid"+_22.sortStateInt2Str(_1e["nestedSortAsc"])]||".","</span>","</span>","<span id=\"SortSeparator"+_1d.index+"\" class=\"dojoxGridSortSeparatorOff\"></span>","<span class=\"dojoxGridUnarySortWrapper\" tabindex=\"-1\"><span id=\"unarySortCol"+_1d.index+"\" class=\"dojoxGridSort dojoxGridUnarySort "+(_21?("dojoxGrid"+_22.sortStateInt2Str(_1e["unarySortAsc"])):"dojoxGridUnsorted")+"\">",_22._a11yText["dojoxGrid"+_22.sortStateInt2Str(_1e["unarySortAsc"])]||".","</span></span>","</div>","<div tabindex=\"-1\" id=\"selectCol"+_1d.index+"\" class=\"dojoxGridHeaderCellSelectRegion\"><span id=\"caption"+_1d.index+"\">"+n+"<span></div>","</div>"];
+return ret.join("");
+},addHoverSortTip:function(e){
+this._sortTipMap[e.cellIndex]=true;
+var _23=this.getCellSortInfo(e.cell);
+if(!_23){
+return;
+}
+var _24=this._getCellElements(e.cellNode);
+if(!_24){
+return;
+}
+var _25=this.sortAttrs;
+var _26=!_25||_25.length<1;
+var _27=(_25&&_25.length==1&&_23["sortPos"]==1);
+dojo.addClass(_24["selectSortSeparator"],"dojoxGridSortSeparatorOn");
+if(_26||_27){
+this._addHoverUnarySortTip(_24,_23,e);
+}else{
+this._addHoverNestedSortTip(_24,_23,e);
+this.updateMinColWidth(_24["nestedSortPos"]);
+}
+var _28=_24["selectRegion"];
+this._fixSelectRegion(_28);
+if(!dijit.hasWaiRole(_28)){
+dijit.setWaiState(_28,"label","Column "+(e.cellIndex+1)+" "+e.cell.field);
+}
+this._toggleHighlight(e.sourceView,e);
+this.focus._updateFocusBorder();
+},_addHoverUnarySortTip:function(_29,_2a,e){
+dojo.addClass(_29["nestedSortWrapper"],"dojoxGridUnsorted");
+var _2b=this.sortStateInt2Str(this._getNewSortState(_2a["unarySortAsc"]));
+dijit.setWaiState(_29["unarySortWrapper"],"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_2b.toLowerCase()+" single sort");
+var _2c="dojoxGrid"+_2b+"Tip";
+dojo.addClass(_29["unarySortChoice"],_2c);
+_29["unarySortChoice"].innerHTML=this._a11yText[_2c];
+this._addTipInfo(_29["unarySortWrapper"],this._composeSortTip(_2b,"singleSort"));
+},_addHoverNestedSortTip:function(_2d,_2e,e){
+var _2f=_2d["nestedSortPos"];
+var _30=_2d["unarySortWrapper"];
+var _31=_2d["nestedSortWrapper"];
+var _32=this.sortAttrs;
+dojo.removeClass(_31,"dojoxGridUnsorted");
+var _33=this.sortStateInt2Str(this._getNewSortState(_2e["nestedSortAsc"]));
+dijit.setWaiState(_31,"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_33.toLowerCase()+" nested sort");
+var _34="dojoxGrid"+_33+"Tip";
+this._addA11yInfo(_2d["nestedSortChoice"],_34);
+this._addTipInfo(_31,this._composeSortTip(_33,"nestedSort"));
+_33=this.sortStateInt2Str(_2e["unarySortAsc"]);
+dijit.setWaiState(_30,"label","Column "+(e.cellIndex+1)+" "+e.cell.field+" - Choose "+_33.toLowerCase()+" single sort");
+_34="dojoxGrid"+_33+"Tip";
+this._addA11yInfo(_2d["unarySortChoice"],_34);
+this._addTipInfo(_30,this._composeSortTip(_33,"singleSort"));
+dojo.addClass(_2d["sortSeparator"],"dojoxGridSortSeparatorOn");
+dojo.removeClass(_2f,"dojoxGridSortPosOff");
+if(_2e["sortPos"]<1){
+_2f.innerHTML=(_32?_32.length:0)+1;
+if(!this._unarySortInFocus()&&_32&&_32.length==1){
+var _35=this._getUnaryNode();
+_35.innerHTML="1";
+dojo.removeClass(_35,"dojoxGridSortPosOff");
+dojo.removeClass(_35.parentNode,"dojoxGridUnsorted");
+this._fixSelectRegion(this._getCellElements(_35)["selectRegion"]);
+}
+}
+},_unarySortInFocus:function(){
+return this._unarySortCell.cell&&this.focus.headerCellInFocus(this._unarySortCell.cell.index);
+},_composeSortTip:function(_36,_37){
+_36=_36.toLowerCase();
+if(_36=="unsorted"){
+return this._nls[_36];
+}else{
+var tip=dojo.string.substitute(this._nls["sortingState"],[this._nls[_37],this._nls[_36]]);
+return tip;
+}
+},_addTipInfo:function(_38,_39){
+dojo.attr(_38,"title",_39);
+dojo.query("span",_38).forEach(function(n){
+dojo.attr(n,"title",_39);
+});
+},_addA11yInfo:function(_3a,_3b){
+dojo.addClass(_3a,_3b);
+_3a.innerHTML=this._a11yText[_3b];
+},removeHoverSortTip:function(e){
+if(!this._sortTipMap[e.cellIndex]){
+return;
+}
+var _3c=this.getCellSortInfo(e.cell);
+if(!_3c){
+return;
+}
+var _3d=this._getCellElements(e.cellNode);
+if(!_3d){
+return;
+}
+var _3e=_3d.nestedSortChoice;
+var _3f=_3d.unarySortChoice;
+var _40=_3d.unarySortWrapper;
+var _41=_3d.nestedSortWrapper;
+this._toggleHighlight(e.sourceView,e,true);
+function _42(_43){
+dojo.forEach(_43,function(_44){
+var _45=dojo.trim((" "+_44["className"]+" ").replace(/\sdojoxGrid\w+Tip\s/g," "));
+if(_44["className"]!=_45){
+_44["className"]=_45;
+}
+});
+};
+_42([_3e,_3f]);
+_3f.innerHTML=this._a11yText["dojoxGrid"+this.sortStateInt2Str(_3c["unarySortAsc"])]||".";
+_3e.innerHTML=this._a11yText["dojoxGrid"+this.sortStateInt2Str(_3c["nestedSortAsc"])]||".";
+dojo.removeClass(_3d["selectSortSeparator"],"dojoxGridSortSeparatorOn");
+dojo.removeClass(_3d["sortSeparator"],"dojoxGridSortSeparatorOn");
+if(_3c["sortPos"]==1&&this.focus.isNavHeader()&&!this.focus.headerCellInFocus(e.cellIndex)){
+dojo.removeClass(_3d["nestedSortWrapper"],"dojoxGridUnsorted");
+}
+var _46=this.sortAttrs;
+if(!isNaN(_3c["sortPos"])&&_3c["sortPos"]<1){
+_3d["nestedSortPos"].innerHTML="";
+dojo.addClass(_41,"dojoxGridUnsorted");
+if(!this.focus._focusBorderBox&&_46&&_46.length==1){
+var _47=this._getUnaryNode();
+_47.innerHTML="";
+dojo.addClass(_47,"dojoxGridSortPosOff");
+this._fixSelectRegion(this._getCellElements(_47)["selectRegion"]);
+}
+}
+this._fixSelectRegion(_3d["selectRegion"]);
+dijit.removeWaiState(_41,"label");
+dijit.removeWaiState(_40,"label");
+if(_3c["sortPos"]>=0){
+var _48=(_46.length==1);
+var _49=_48?_40:_41;
+this._setSortRegionWaiState(_48,e.cellIndex,e.cell.field,_3c["sortPos"],_49);
+}
+this.focus._updateFocusBorder();
+this._sortTipMap[e.cellIndex]=false;
+},_getUnaryNode:function(){
+for(var i=0;i<this.views.views.length;i++){
+var n=dojo.byId(this.views.views[i].id+"SortPos"+this._unarySortCell.cell.index);
+if(n){
+return n;
+}
+}
+},_fixSelectRegion:function(_4a){
+var _4b=_4a.previousSibling;
+var _4c=dojo.contentBox(_4a.parentNode);
+var _4d=dojo.marginBox(_4a);
+var _4e=dojo.marginBox(_4b);
+if(dojo.isIE&&!dojo._isBodyLtr()){
+var w=0;
+dojo.forEach(_4b.childNodes,function(_4f){
+w+=dojo.marginBox(_4f).w;
+});
+_4e.w=w;
+_4e.l=(_4e.t=0);
+dojo.marginBox(_4b,_4e);
+}
+if(_4d.w!=(_4c.w-_4e.w)){
+_4d.w=_4c.w-_4e.w;
+if(!dojo.isWebKit){
+dojo.marginBox(_4a,_4d);
+}else{
+_4d.h=dojo.contentBox(_4c).h;
+dojo.style(_4a,"width",(_4d.w-4)+"px");
+}
+}
+},updateMinColWidth:function(_50){
+if(this._minColWidthUpdated){
+return;
+}
+var _51=_50.innerHTML;
+_50.innerHTML=dojo.query(".dojoxGridSortWrapper",this.viewsHeaderNode).length;
+var _52=_50.parentNode.parentNode;
+this._minColWidth=dojo.marginBox(_52).w+this._widthDelta;
+_50.innerHTML=_51;
+this._minColWidthUpdated=true;
+},getMinColWidth:function(){
+return this._minColWidth;
+},_initSelectCols:function(){
+var _53=dojo.query(".dojoxGridHeaderCellSelectRegion",this.headerContentNode);
+var _54=dojo.query(".dojoxGridUnarySortWrapper",this.headerContentNode);
+var _55=dojo.query(".dojoxGridNestedSortWrapper",this.headerContentNode);
+_53.concat(_54).concat(_55).forEach(function(_56){
+dojo.connect(_56,"onmousemove",dojo.hitch(this.grid,this.grid._toggleHighlight,this));
+dojo.connect(_56,"onmouseout",dojo.hitch(this.grid,this.grid._removeActiveState));
+},this);
+this.grid._fixHeaderCellStyle(_53,this);
+if(dojo.isIE&&!dojo._isBodyLtr()){
+this.grid._fixAllSelectRegion();
+}
+},_fixHeaderCellStyle:function(_57,_58){
+dojo.forEach(_57,dojo.hitch(this,function(_59){
+var _5a=dojo.marginBox(_59),_5b=this._getCellElements(_59),_5c=_5b.sortWrapper;
+_5c.style.height=_5a.h+"px";
+_5c.style.lineHeight=_5a.h+"px";
+var _5d=_5b["selectSortSeparator"],_5e=_5b["sortSeparator"];
+_5e.style.height=_5d.style.height=_5a.h*3/5+"px";
+_5e.style.marginTop=_5d.style.marginTop=_5a.h*1/5+"px";
+_58.header.overResizeWidth=this._overResizeWidth;
+}));
+},_fixAllSelectRegion:function(){
+var _5f=dojo.query(".dojoxGridHeaderCellSelectRegion",this.viewsHeaderNode);
+dojo.forEach(_5f,dojo.hitch(this,function(_60){
+this._fixSelectRegion(_60);
+}));
+},_toggleHighlight:function(_61,e,_62){
+if(!e.target||!e.type||!e.type.match(/mouse|contextmenu/)){
+return;
+}
+var _63=this._getCellElements(e.target);
+if(!_63){
+return;
+}
+var _64=_63["selectRegion"];
+var _65=_63["nestedSortWrapper"];
+var _66=_63["unarySortWrapper"];
+dojo.removeClass(_64,"dojoxGridSelectRegionHover");
+dojo.removeClass(_65,"dojoxGridSortHover");
+dojo.removeClass(_66,"dojoxGridSortHover");
+if(!_62&&!_61.grid._inResize(_61)){
+var _67=this._getSortEventInfo(e);
+if(_67.selectChoice){
+dojo.addClass(_64,"dojoxGridSelectRegionHover");
+}else{
+if(_67.nestedSortChoice){
+dojo.addClass(_65,"dojoxGridSortHover");
+}else{
+if(_67.unarySortChoice){
+dojo.addClass(_66,"dojoxGridSortHover");
+}
+}
+}
+}
+},_removeActiveState:function(e){
+if(!e.target||!e.type||!e.type.match(/mouse|contextmenu/)){
+return;
+}
+var _68=this._getChoiceRegion(e.target,this._getSortEventInfo(e));
+_68&&dojo.removeClass(_68,this.headerCellActiveClass);
+},_toggleProgressTip:function(on,e){
+var _69=[this.domNode,e?e.cellNode:null];
+setTimeout(function(){
+dojo.forEach(_69,function(_6a){
+if(_6a){
+if(on&&!dojo.hasClass(_6a,"dojoxGridSortInProgress")){
+dojo.addClass(_6a,"dojoxGridSortInProgress");
+}else{
+if(!on&&dojo.hasClass(_6a,"dojoxGridSortInProgress")){
+dojo.removeClass(_6a,"dojoxGridSortInProgress");
+}
+}
+}
+});
+},0.1);
+},_getSortEventInfo:function(e){
+var _6b=function(_6c,css){
+return dojo.hasClass(_6c,css)||(_6c.parentNode&&dojo.hasClass(_6c.parentNode,css));
+};
+return {selectChoice:_6b(e.target,"dojoxGridHeaderCellSelectRegion"),unarySortChoice:_6b(e.target,"dojoxGridUnarySortWrapper"),nestedSortChoice:_6b(e.target,"dojoxGridNestedSortWrapper")};
+},ignoreEvent:function(e){
+return !(e.nestedSortChoice||e.unarySortChoice||e.selectChoice);
+},_sychronizeResize:function(e){
+if(!e.cell||e.cell.isRowSelector||this.focus.headerCellInFocus(e.cellIndex)){
+return;
+}
+if(!this._inResize(e.sourceView)){
+this.addHoverSortTip(e);
+}else{
+var idx=e.cellIndex;
+if(!this._sortTipMap[e.cellIndex]){
+e.cellIndex=this._sortTipMap[idx+1]?(idx+1):(this._sortTipMap[idx-1]?(idx-1):idx);
+e.cellNode=e.cellNode.parentNode.childNodes[e.cellIndex];
+}
+this.removeHoverSortTip(e);
+}
+},_getCellElements:function(_6d){
+try{
+while(_6d&&_6d.nodeName.toLowerCase()!="th"){
+_6d=_6d.parentNode;
+}
+if(!_6d){
+return null;
+}
+var ns=dojo.query(".dojoxGridSortRoot",_6d);
+if(ns.length!=1){
+return null;
+}
+var n=ns[0];
+return {"selectSortSeparator":dojo.query("[id^='selectSortSeparator']",n)[0],"nestedSortPos":dojo.query(".dojoxGridSortPos",n)[0],"nestedSortChoice":dojo.query("[id^='nestedSortCol']",n)[0],"sortSeparator":dojo.query("[id^='SortSeparator']",n)[0],"unarySortChoice":dojo.query("[id^='unarySortCol']",n)[0],"selectRegion":dojo.query(".dojoxGridHeaderCellSelectRegion",n)[0],"sortWrapper":dojo.query(".dojoxGridSortWrapper",n)[0],"unarySortWrapper":dojo.query(".dojoxGridUnarySortWrapper",n)[0],"nestedSortWrapper":dojo.query(".dojoxGridNestedSortWrapper",n)[0],"sortRoot":n,"headCellNode":_6d};
+}
+catch(e){
+}
+return null;
+},_getChoiceRegion:function(_6e,_6f){
+var _70,_71=this._getCellElements(_6e);
+if(!_71){
+return;
+}
+_6f.unarySortChoice&&(_70=_71["unarySortWrapper"]);
+_6f.nestedSortChoice&&(_70=_71["nestedSortWrapper"]);
+_6f.selectChoice&&(_70=_71["selectRegion"]);
+return _70;
+},_inResize:function(_72){
+return _72.header.moverDiv||dojo.hasClass(_72.headerNode,"dojoxGridColResize")||dojo.hasClass(_72.headerNode,"dojoxGridColNoResize");
+},retainLastRowSelection:function(){
+dojo.forEach(this._by_idx,function(o,idx){
+if(!o||!o.item){
+return;
+}
+var _73=!!this.selection.isSelected(idx);
+o.item[this.storeItemSelected]=[_73];
+if(this.indirectSelection&&this.rowSelectCell.toggleAllTrigerred&&_73!=this.toggleAllValue){
+this.exceptionalSelectedItems.push(o.item);
+}
+},this);
+this.selection.selected=[];
+dojo.publish(this.sortRowSelectionChangedTopic,[this]);
+},updateNewRowSelection:function(_74,req){
+dojo.forEach(_74,function(_75,idx){
+if(this.indirectSelection&&this.rowSelectCell.toggleAllTrigerred){
+if(dojo.indexOf(this.exceptionalSelectedItems,_75)<0){
+_75[this.storeItemSelected]=[this.toggleAllValue];
+}
+}
+if(_75[this.storeItemSelected]&&_75[this.storeItemSelected][0]){
+var _76=req.start+idx;
+this.selection.selectedIndex=_76;
+this.selection.selected[_76]=true;
+this.updateRowStyles(_76);
+}
+},this);
+dojo.publish(this.sortRowSelectionChangedTopic,[this]);
+if(dojo.isMoz&&this._by_idx.length==0){
+this.update();
+}
+},allSelectionToggled:function(_77){
+this.exceptionalSelectedItems=[];
+this.toggleAllValue=this.rowSelectCell.defaultValue;
+},_selectionChanged:function(obj){
+obj==this.select&&(this.toggleAllValue=false);
+},getStoreSelectedValue:function(_78){
+var _79=this._by_idx[_78];
+return _79&&_79.item&&!!(_79.item[this.storeItemSelected]&&_79.item[this.storeItemSelected][0]);
+},initAriaInfo:function(){
+var _7a=this.sortAttrs;
+dojo.forEach(_7a,dojo.hitch(this,function(_7b,_7c){
+if(!_7b.cell||!_7b.cellNode){
+return;
+}
+var _7d=_7b.cell.getHeaderNode();
+var _7e=this._getCellElements(_7d);
+if(!_7e){
+return;
+}
+var _7f=_7e["selectRegion"];
+dijit.setWaiState(_7f,"label","Column "+(_7b.cell.index+1)+" "+_7b.attr);
+var _80=(_7a.length==1);
+var _81=this.sortStateInt2Str(_7b.asc).toLowerCase();
+var _82=_80?_7e["unarySortWrapper"]:_7e["nestedSortWrapper"];
+dijit.setWaiState(_82,"sort",_81);
+this._setSortRegionWaiState(_80,_7b.cell.index,_7b.attr,_7c+1,_82);
+}));
+},_setSortRegionWaiState:function(_83,_84,_85,_86,_87){
+if(_86<0){
+return;
+}
+var _88=_83?"single sort":"nested sort";
+var _89="Column "+(_84+1)+" "+_85+" "+_88+" "+(!_83?(" sort position "+_86):"");
+dijit.setWaiState(_87,"label",_89);
+},_inPage:function(_8a){
+return _8a<this._bop||_8a>=this._eop;
+}});
+dojo.declare("dojox.grid.enhanced.plugins._NestedSortingFocusManager",dojox.grid._FocusManager,{lastHeaderFocus:{cellNode:null,regionIdx:-1},currentHeaderFocusEvt:null,cssMarkers:["dojoxGridHeaderCellSelectRegion","dojoxGridNestedSortWrapper","dojoxGridUnarySortWrapper"],_focusBorderBox:null,_initColumnHeaders:function(){
+var _8b=this._findHeaderCells();
+dojo.forEach(_8b,dojo.hitch(this,function(_8c){
+var _8d=dojo.query(".dojoxGridHeaderCellSelectRegion",_8c);
+var _8e=dojo.query("[class*='SortWrapper']",_8c);
+_8d=_8d.concat(_8e);
+_8d.length==0&&(_8d=[_8c]);
+dojo.forEach(_8d,dojo.hitch(this,function(_8f){
+this._connects.push(dojo.connect(_8f,"onfocus",this,"doColHeaderFocus"));
+this._connects.push(dojo.connect(_8f,"onblur",this,"doColHeaderBlur"));
+}));
+}));
+},focusHeader:function(_90,_91,_92){
+if(!this.isNavHeader()){
+this.inherited(arguments);
+}else{
+var _93=this._findHeaderCells();
+this._colHeadNode=_93[this._colHeadFocusIdx];
+_91&&(this.lastHeaderFocus.cellNode=this._colHeadNode);
+}
+if(!this._colHeadNode){
+return;
+}
+if(this.grid.indirectSelection&&this._colHeadFocusIdx==0){
+this._colHeadNode=this._findHeaderCells()[++this._colHeadFocusIdx];
+}
+var _94=_92?0:(this.lastHeaderFocus.regionIdx>=0?this.lastHeaderFocus.regionIdx:(_90?2:0));
+var _95=dojo.query("."+this.cssMarkers[_94],this._colHeadNode)[0]||this._colHeadNode;
+this.grid.addHoverSortTip(this.currentHeaderFocusEvt=this._mockEvt(_95));
+this.lastHeaderFocus.regionIdx=_94;
+_95&&dojox.grid.util.fire(_95,"focus");
+},focusSelectColEndingHeader:function(e){
+if(!e||!e.cellNode){
+return;
+}
+this._colHeadFocusIdx=e.cellIndex;
+this.focusHeader(null,false,true);
+},_delayedHeaderFocus:function(){
+this.isNavHeader()&&this.focusHeader(null,true);
+},_setActiveColHeader:function(_96,_97,_98){
+dojo.attr(this.grid.domNode,"aria-activedescendant",_96.id);
+this._colHeadNode=_96;
+this._colHeadFocusIdx=_97;
+},doColHeaderFocus:function(e){
+this.lastHeaderFocus.cellNode=this._colHeadNode;
+if(e.target==this._colHeadNode){
+this._scrollHeader(this.getHeaderIndex());
+}else{
+var _99=this.getFocusView(e);
+if(!_99){
+return;
+}
+_99.header.baseDecorateEvent(e);
+this._addFocusBorder(e.target);
+this._colHeadFocusIdx=e.cellIndex;
+this._colHeadNode=this._findHeaderCells()[this._colHeadFocusIdx];
+this._colHeadNode&&this.getHeaderIndex()!=-1&&this._scrollHeader(this._colHeadFocusIdx);
+}
+this._focusifyCellNode(false);
+this.grid.isDndSelectEnable&&this.grid.focus._blurRowBar();
+this.grid.addHoverSortTip(this.currentHeaderFocusEvt=this._mockEvt(e.target));
+if(dojo.isIE&&!dojo._isBodyLtr()){
+this.grid._fixAllSelectRegion();
+}
+},doColHeaderBlur:function(e){
+this.inherited(arguments);
+this._removeFocusBorder();
+if(!this.isNavCellRegion){
+var _9a=this.getFocusView(e);
+if(!_9a){
+return;
+}
+_9a.header.baseDecorateEvent(e);
+this.grid.removeHoverSortTip(e);
+this.lastHeaderFocus.cellNode=this._colHeadNode;
+}
+},getFocusView:function(e){
+var _9b;
+dojo.forEach(this.grid.views.views,function(_9c){
+if(!_9b){
+var _9d=dojo.coords(_9c.domNode),_9e=dojo.coords(e.target);
+var _9f=_9e.x>=_9d.x&&_9e.x<=(_9d.x+_9d.w);
+_9f&&(_9b=_9c);
+}
+});
+return (this.focusView=_9b);
+},_mockEvt:function(_a0){
+var _a1=this.grid.getCell(this._colHeadFocusIdx);
+return {target:_a0,cellIndex:this._colHeadFocusIdx,cell:_a1,cellNode:this._colHeadNode,clientX:-1,sourceView:_a1.view};
+},navHeader:function(e){
+var _a2=e.ctrlKey?0:(e.keyCode==dojo.keys.LEFT_ARROW)?-1:1;
+!dojo._isBodyLtr()&&(_a2*=-1);
+this.focusView.header.baseDecorateEvent(e);
+dojo.forEach(this.cssMarkers,dojo.hitch(this,function(css,_a3){
+if(dojo.hasClass(e.target,css)){
+var _a4=_a3+_a2,_a5,_a6;
+do{
+_a5=dojo.query("."+this.cssMarkers[_a4],e.cellNode)[0];
+if(_a5&&dojo.style(_a5.lastChild||_a5.firstChild,"display")!="none"){
+_a6=_a5;
+break;
+}
+_a4+=_a2;
+}while(_a4>=0&&_a4<this.cssMarkers.length);
+if(_a6&&_a4>=0&&_a4<this.cssMarkers.length){
+if(e.ctrlKey){
+return;
+}
+dojo.isIE&&(this.grid._sortTipMap[e.cellIndex]=false);
+this.navCellRegion(_a6,_a4);
+return;
+}
+var _a7=_a4<0?-1:(_a4>=this.cssMarkers.length?1:0);
+this.navHeaderNode(_a7);
+}
+}));
+},navHeaderNode:function(_a8,_a9){
+var _aa=this._colHeadFocusIdx+_a8;
+var _ab=this._findHeaderCells();
+while(_aa>=0&&_aa<_ab.length&&_ab[_aa].style.display=="none"){
+_aa+=_a8;
+}
+if(this.grid.indirectSelection&&_aa==0){
+return;
+}
+if(_a8!=0&&_aa>=0&&_aa<this.grid.layout.cells.length){
+this.lastHeaderFocus.cellNode=this._colHeadNode;
+this.lastHeaderFocus.regionIdx=-1;
+this._colHeadFocusIdx=_aa;
+this.focusHeader(_a8<0?true:false,false,_a9);
+}
+},navCellRegion:function(_ac,_ad){
+this.isNavCellRegion=true;
+dojox.grid.util.fire(_ac,"focus");
+this.currentHeaderFocusEvt.target=_ac;
+this.lastHeaderFocus.regionIdx=_ad;
+var _ae=_ad==0?_ac:_ac.parentNode.nextSibling;
+_ae&&this.grid._fixSelectRegion(_ae);
+this.isNavCellRegion=false;
+},headerCellInFocus:function(_af){
+return (this._colHeadFocusIdx==_af)&&this._focusBorderBox;
+},clearHeaderFocus:function(){
+this._colHeadNode=this._colHeadFocusIdx=null;
+this.lastHeaderFocus={cellNode:null,regionIdx:-1};
+},addSortFocus:function(e){
+var _b0=this.grid.getCellSortInfo(e.cell);
+if(!_b0){
+return;
+}
+var _b1=this.grid.sortAttrs;
+var _b2=!_b1||_b1.length<1;
+var _b3=(_b1&&_b1.length==1&&_b0["sortPos"]==1);
+this._colHeadFocusIdx=e.cellIndex;
+this._colHeadNode=e.cellNode;
+this.currentHeaderFocusEvt={};
+this.lastHeaderFocus.regionIdx=(_b2||_b3)?2:(e.nestedSortChoice?1:0);
+},_addFocusBorder:function(_b4){
+if(!_b4){
+return;
+}
+this._removeFocusBorder();
+this._focusBorderBox=dojo.create("div");
+this._focusBorderBox.className="dojoxGridFocusBorderBox";
+dojo.toggleClass(_b4,"dojoxGridSelectRegionFocus",true);
+dojo.toggleClass(_b4,"dojoxGridSelectRegionHover",false);
+var _b5=_b4.offsetHeight;
+if(_b4.hasChildNodes()){
+_b4.insertBefore(this._focusBorderBox,_b4.firstChild);
+}else{
+_b4.appendChild(this._focusBorderBox);
+}
+var _b6={"l":0,"t":0,"r":0,"b":0};
+for(var i in _b6){
+_b6[i]=dojo.create("div");
+}
+var pos={x:dojo.coords(_b4).x-dojo.coords(this._focusBorderBox).x,y:dojo.coords(_b4).y-dojo.coords(this._focusBorderBox).y,w:_b4.offsetWidth,h:_b5};
+for(var i in _b6){
+var n=_b6[i];
+dojo.addClass(n,"dojoxGridFocusBorder");
+dojo.style(n,"top",pos.y+"px");
+dojo.style(n,"left",pos.x+"px");
+this._focusBorderBox.appendChild(n);
+}
+var _b7=function(val){
+return val>0?val:0;
+};
+dojo.style(_b6.r,"left",_b7(pos.x+pos.w-1)+"px");
+dojo.style(_b6.b,"top",_b7(pos.y+pos.h-1)+"px");
+dojo.style(_b6.l,"height",_b7(pos.h-1)+"px");
+dojo.style(_b6.r,"height",_b7(pos.h-1)+"px");
+dojo.style(_b6.t,"width",_b7(pos.w-1)+"px");
+dojo.style(_b6.b,"width",_b7(pos.w-1)+"px");
+},_updateFocusBorder:function(){
+if(this._focusBorderBox==null){
+return;
+}
+this._addFocusBorder(this._focusBorderBox.parentNode);
+},_removeFocusBorder:function(){
+if(this._focusBorderBox&&this._focusBorderBox.parentNode){
+dojo.toggleClass(this._focusBorderBox.parentNode,"dojoxGridSelectRegionFocus",false);
+this._focusBorderBox.parentNode.removeChild(this._focusBorderBox);
+}
+this._focusBorderBox=null;
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndEvents.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndEvents.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndEvents.js	(revision 9)
@@ -0,0 +1,49 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndEvents"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndEvents"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndEvents");
+dojo.declare("dojox.grid.enhanced.dnd._DndEvents",null,{rowBarActiveClass:"dojoxGridRowBarActive",onMouseUp:function(e){
+e.rowIndex==-1?this.onHeaderCellMouseUp(e):this.onCellMouseUp(e);
+this.select.resetStartPoint();
+this.select.clearInSelectingMode();
+!isNaN(e.rowIndex)&&e.cellIndex==-1&&this.focus.focusRowBarNode(e.rowIndex);
+},onMouseUpRow:function(e){
+if(this.dndSelectable){
+}else{
+if(e.rowIndex!=-1){
+this.onRowMouseUp(e);
+}
+}
+},onCellMouseUp:function(e){
+if(e.cellIndex>this.select.exceptColumnsTo){
+this.select.setInSelectingMode("cell",true);
+}
+},onRowHeaderMouseDown:function(e){
+this.focus._colHeadNode=this.focus._colHeadFocusIdx=null;
+this.focus.focusRowBarNode(e.rowIndex);
+if(e.button==2){
+return;
+}
+this.select.setInSelectingMode("row",true);
+this.select.keepState=e.ctrlKey&&!this.pluginMgr.inSingleSelection();
+this.select.extendSelect=e.shiftKey;
+this.select.setDrugStartPoint(-1,e.rowIndex);
+if(this.select.extendSelect&&!this.pluginMgr.inSingleSelection()){
+this.select.restorLastDragPoint();
+}
+this.select.drugSelectRow(e.rowIndex);
+dojo.addClass(e.rowNode,this.rowBarActiveClass);
+dojo.stopEvent(e);
+},onRowHeaderMouseUp:function(e){
+this.onMouseUp(e);
+dojo.removeClass(e.rowNode,this.rowBarActiveClass);
+},onRowMouseUp:function(e){
+this.select.setInSelectingMode("row",false);
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndGrid.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndGrid.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndGrid.js	(revision 9)
@@ -0,0 +1,23 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndGrid"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndGrid"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndGrid");
+dojo.require("dojox.grid.enhanced.dnd._DndEvents");
+dojo.declare("dojox.grid.enhanced.dnd._DndGrid",dojox.grid.enhanced.dnd._DndEvents,{select:null,dndSelectable:true,constructor:function(_1){
+this.select=_1;
+},domousedown:function(e){
+if(!e.cellNode){
+this.onRowHeaderMouseDown(e);
+}
+},domouseup:function(e){
+if(!e.cellNode){
+this.onRowHeaderMouseUp(e);
+}
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndBuilder.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndBuilder.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndBuilder.js	(revision 9)
@@ -0,0 +1,26 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndBuilder"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndBuilder"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndBuilder");
+dojo.declare("dojox.grid.enhanced.dnd._DndBuilder",null,{domouseup:function(e){
+if(this.grid.select.isInSelectingMode("col")){
+this.grid.nestedSorting?this.grid.focus.focusSelectColEndingHeader(e):this.grid.focus.focusHeaderNode(e.cellIndex);
+}
+if(e.cellNode){
+this.grid.onMouseUp(e);
+}
+this.grid.onMouseUpRow(e);
+}});
+dojo.declare("dojox.grid.enhanced.dnd._DndHeaderBuilder",null,{domouseup:function(e){
+if(this.grid.select.isInSelectingMode("col")){
+this.grid.nestedSorting?this.grid.focus.focusSelectColEndingHeader(e):this.grid.focus.focusHeaderNode(e.cellIndex);
+}
+this.grid.onMouseUp(e);
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndMover.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndMover.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndMover.js	(revision 9)
@@ -0,0 +1,36 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndMover"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndMover"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndMover");
+dojo.require("dojo.dnd.move");
+dojo.declare("dojox.grid.enhanced.dnd._DndMover",dojo.dnd.Mover,{onMouseMove:function(e){
+dojo.dnd.autoScroll(e);
+var m=this.marginBox;
+this.host.onMove(this,{l:m.l+e.pageX,t:m.t+e.pageY},{x:e.pageX,y:e.pageY});
+dojo.stopEvent(e);
+}});
+dojo.declare("dojox.grid.enhanced.dnd._DndBoxConstrainedMoveable",dojo.dnd.move.boxConstrainedMoveable,{movingType:"row",constructor:function(_1,_2){
+if(!_2||!_2.movingType){
+return;
+}
+this.movingType=_2.movingType;
+},onFirstMove:function(_3){
+this.inherited(arguments);
+if(this.within){
+var c=this.constraintBox,mb=dojo.marginBox(_3.node);
+if(this.movingType=="row"){
+c.r+=mb.w;
+}else{
+if(this.movingType=="col"){
+c.b+=mb.h;
+}
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndRowSelector.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndRowSelector.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndRowSelector.js	(revision 9)
@@ -0,0 +1,18 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndRowSelector"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndRowSelector"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndRowSelector");
+dojo.declare("dojox.grid.enhanced.dnd._DndRowSelector",null,{domousedown:function(e){
+this.grid.onMouseDown(e);
+},domouseup:function(e){
+this.grid.onMouseUp(e);
+},dofocus:function(e){
+e.cellNode.style.border="solid 1px";
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndSelectingManager.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndSelectingManager.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndSelectingManager.js	(revision 9)
@@ -0,0 +1,371 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndSelectingManager"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndSelectingManager"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndSelectingManager");
+dojo.require("dojox.grid.util");
+dojo.require("dojox.grid._Builder");
+dojo.require("dojox.grid.enhanced.dnd._DndGrid");
+dojo.require("dojox.grid.enhanced.dnd._DndBuilder");
+dojo.require("dojox.grid.enhanced.dnd._DndRowSelector");
+dojo.require("dojox.grid.enhanced.dnd._DndFocusManager");
+dojo.declare("dojox.grid.enhanced.dnd._DndSelectingManager",null,{typeSelectingMode:[],selectingDisabledTypes:[],drugSelectionStart:null,drugCurrentPoint:null,drugMode:null,keepState:false,extendSelect:false,headerNodes:null,selectedCells:null,selectedColumns:[],selectedClass:"dojoxGridRowSelected",autoScrollRate:1000,constructor:function(_1){
+this.grid=_1;
+this.typeSelectingMode=[];
+this.selectingDisabledTypes=[];
+this.selectedColumns=[];
+this.drugSelectionStart=new Object();
+this.drugCurrentPoint=new Object();
+this.resetStartPoint();
+this.extendGridForDnd(_1);
+this.selectedCells=[];
+dojo.connect(this.grid,"_onFetchComplete",dojo.hitch(this,"refreshColumnSelection"));
+dojo.connect(this.grid.scroller,"scroll",dojo.hitch(this,"refreshColumnSelection"));
+dojo.subscribe(this.grid.rowSelectionChangedTopic,dojo.hitch(this,function(_2){
+try{
+if(_2.grid==this.grid&&_2!=this){
+this.cleanCellSelection();
+}
+}
+catch(e){
+}
+}));
+},extendGridForDnd:function(_3){
+var _4=_3.constructor;
+_3.mixin(_3,dojo.hitch(new dojox.grid.enhanced.dnd._DndGrid(this)));
+_3.constructor=_4;
+_3.mixin(_3.focus,new dojox.grid.enhanced.dnd._DndFocusManager());
+_3.mixin(_3.selection,{clickSelect:function(){
+}});
+dojo.forEach(_3.views.views,function(_5){
+_3.mixin(_5.content,new dojox.grid.enhanced.dnd._DndBuilder());
+_3.mixin(_5.header,new dojox.grid.enhanced.dnd._DndHeaderBuilder());
+if(_5.declaredClass=="dojox.grid._RowSelector"){
+_3.mixin(_5,new dojox.grid.enhanced.dnd._DndRowSelector());
+}
+dojox.grid.util.funnelEvents(_5.contentNode,_5,"doContentEvent",["mouseup"]);
+dojox.grid.util.funnelEvents(_5.headerNode,_5,"doHeaderEvent",["mouseup"]);
+});
+dojo.forEach(this.grid.dndDisabledTypes,function(_6){
+this.disableSelecting(_6);
+},this);
+this.disableFeatures();
+},disableFeatures:function(){
+if(this.selectingDisabledTypes["cell"]){
+this.cellClick=function(){
+};
+this.drugSelectCell=function(){
+};
+}
+if(this.selectingDisabledTypes["row"]){
+this.drugSelectRow=function(){
+};
+}
+if(this.selectingDisabledTypes["col"]){
+this.selectColumn=function(){
+};
+this.drugSelectColumn=function(){
+};
+}
+},disableSelecting:function(_7){
+this.selectingDisabledTypes[_7]=true;
+},isInSelectingMode:function(_8){
+return !!this.typeSelectingMode[_8];
+},setInSelectingMode:function(_9,_a){
+this.typeSelectingMode[_9]=_a;
+},getSelectedRegionInfo:function(){
+var _b=[],_c="";
+if(this.selectedColumns.length>0){
+_c="col";
+dojo.forEach(this.selectedColumns,function(_d,_e){
+!!_d&&_b.push(_e);
+});
+}else{
+if(this.grid.selection.getSelectedCount()>0){
+_c="row";
+_b=dojox.grid.Selection.prototype.getSelected.call(this.grid.selection);
+}
+}
+return {"selectionType":_c,"selectedIdx":_b};
+},clearInSelectingMode:function(){
+this.typeSelectingMode=[];
+},getHeaderNodes:function(){
+return this.headerNodes==null?dojo.query("[role*='columnheader']",this.grid.viewsHeaderNode):this.headerNode;
+},_range:function(_f,_10,_11){
+var s=(_f>=0?_f:_10),e=_10;
+if(s>e){
+e=s;
+s=_10;
+}
+for(var i=s;i<=e;i++){
+_11(i);
+}
+},cellClick:function(_12,_13){
+if(_12>this.exceptColumnsTo){
+this.grid.selection.clear();
+this.publishRowChange();
+var _14=this.getCellNode(_12,_13);
+this.cleanAll();
+this.addCellToSelection(_14);
+}
+},setDrugStartPoint:function(_15,_16){
+this.drugSelectionStart.colIndex=_15;
+this.drugSelectionStart.rowIndex=_16;
+this.drugCurrentPoint.colIndex=_15;
+this.firstOut=true;
+var _17=dojo.connect(dojo.doc,"onmousemove",dojo.hitch(this,function(e){
+this.outRangeValue=e.clientY-dojo.coords(this.grid.domNode).y-this.grid.domNode.offsetHeight;
+if(this.outRangeValue>0){
+if(this.drugSelectionStart.colIndex==-1){
+if(!this.outRangeY){
+this.autoRowScrollDrug(e);
+}
+}else{
+if(this.drugSelectionStart.rowIndex==-1){
+}else{
+this.autoCellScrollDrug(e);
+}
+}
+}else{
+this.firstOut=true;
+this.outRangeY=false;
+}
+}));
+var _18=dojo.connect(dojo.doc,"onmouseup",dojo.hitch(this,function(e){
+this.outRangeY=false;
+dojo.disconnect(_18);
+dojo.disconnect(_17);
+this.grid.onMouseUp(e);
+}));
+},autoRowScrollDrug:function(e){
+this.outRangeY=true;
+this.autoSelectNextRow();
+},autoSelectNextRow:function(){
+if(this.grid.select.outRangeY){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);
+this.drugSelectRow(this.drugCurrentPoint.rowIndex+1);
+setTimeout(dojo.hitch(this,"autoSelectNextRow",this.drugCurrentPoint.rowIndex+1),this.getAutoScrollRate());
+}
+},autoCellScrollDrug:function(e){
+var _19=null;
+dojo.forEach(this.getHeaderNodes(),function(_1a){
+var _1b=dojo.coords(_1a);
+if(e.clientX>=_1b.x&&e.clientX<=_1b.x+_1b.w){
+_19=Number(_1a.attributes.getNamedItem("idx").value);
+}
+});
+if(_19!=this.drugCurrentPoint.colIndex||this.firstOut){
+if(!this.firstOut){
+this.colChanged=true;
+this.drugCurrentPoint.colIndex=_19;
+}
+this.firstOut=false;
+this.outRangeY=true;
+dojo.hitch(this,"autoSelectCellInNextRow")();
+}
+},autoSelectCellInNextRow:function(){
+if(this.grid.select.outRangeY){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);
+this.drugSelectCell(this.drugCurrentPoint.colIndex,this.drugCurrentPoint.rowIndex+1);
+if(this.grid.select.colChanged){
+this.grid.select.colChanged=false;
+}else{
+setTimeout(dojo.hitch(this,"autoSelectCellInNextRow",this.drugCurrentPoint.rowIndex+1),this.getAutoScrollRate());
+}
+}
+},getAutoScrollRate:function(){
+return this.autoScrollRate;
+},resetStartPoint:function(){
+if(this.drugSelectionStart.colIndex==-1&&this.drugSelectionStart.rowIndex==-1){
+return;
+}
+this.lastDrugSelectionStart=dojo.clone(this.drugSelectionStart);
+this.drugSelectionStart.colIndex=-1;
+this.drugSelectionStart.rowIndex=-1;
+},restorLastDragPoint:function(){
+this.drugSelectionStart=dojo.clone(this.lastDrugSelectionStart);
+},drugSelectCell:function(_1c,_1d){
+this.cleanAll();
+this.drugCurrentPoint.columnIndex=_1c;
+this.drugCurrentPoint.rowIndex=_1d;
+var _1e,_1f,_20,_21;
+if(_1d<this.drugSelectionStart.rowIndex){
+_1e=_1d;
+_1f=this.drugSelectionStart.rowIndex;
+}else{
+_1e=this.drugSelectionStart.rowIndex;
+_1f=_1d;
+}
+if(_1c<this.drugSelectionStart.colIndex){
+_20=_1c;
+_21=this.drugSelectionStart.colIndex;
+}else{
+_20=this.drugSelectionStart.colIndex;
+_21=_1c;
+}
+for(var i=_20;i<=_21;i++){
+this.addColumnRangeToSelection(i,_1e,_1f);
+}
+},selectColumn:function(_22){
+this.addColumnToSelection(_22);
+},drugSelectColumn:function(_23){
+this.selectColumnRange(this.drugSelectionStart.colIndex,_23);
+},drugSelectColumnToMax:function(dir){
+if(dir=="left"){
+this.selectColumnRange(this.drugSelectionStart.colIndex,0);
+}else{
+this.selectColumnRange(this.drugSelectionStart.colIndex,this.getHeaderNodes().length-1);
+}
+},selectColumnRange:function(_24,_25){
+if(!this.keepState){
+this.cleanAll();
+}
+this._range(_24,_25,dojo.hitch(this,"addColumnToSelection"));
+},addColumnToSelection:function(_26){
+this.selectedColumns[_26]=true;
+dojo.toggleClass(this.getHeaderNodes()[_26],"dojoxGridHeaderSelected",true);
+this._rangCellsInColumn(_26,-1,Number.POSITIVE_INFINITY,this.addCellToSelection);
+},addColumnRangeToSelection:function(_27,_28,to){
+var _29=this.grid.views;
+var _2a=[];
+var _2b=this;
+dojo.forEach(_29.views,function(_2c){
+dojo.forEach(this.getViewRowNodes(_2c.rowNodes),function(_2d,_2e){
+if(!_2d){
+return;
+}
+if(_2e>=_28&&_2e<=to){
+dojo.forEach(_2d.firstChild.rows[0].cells,function(_2f){
+if(_2f&&_2f.attributes&&(idx=_2f.attributes.getNamedItem("idx"))&&Number(idx.value)==_27){
+_2b.addCellToSelection(_2f);
+}
+});
+}
+},this);
+},this);
+},_rangCellsInColumn:function(_30,_31,to,_32){
+var _33=this.grid.views;
+var _34=[];
+var _35=this;
+dojo.forEach(_33.views,function(_36){
+dojo.forEach(this.getViewRowNodes(_36.rowNodes),function(_37,_38){
+if(!_37){
+return;
+}
+if(_38>=_31&&_38<=to){
+dojo.forEach(_37.firstChild.rows[0].cells,function(_39){
+if(_39&&_39.attributes&&(idx=_39.attributes.getNamedItem("idx"))&&Number(idx.value)==_30){
+_32(_39,_35);
+}
+});
+}
+},this);
+},this);
+},drugSelectRow:function(_3a){
+this.drugCurrentPoint.rowIndex=_3a;
+this.cleanCellSelection();
+this.clearDrugDivs();
+var _3b=this.grid.selection;
+_3b._beginUpdate();
+if(!this.keepState){
+_3b.deselectAll();
+}
+_3b.selectRange(this.drugSelectionStart.rowIndex,_3a);
+_3b._endUpdate();
+this.publishRowChange();
+},drugSelectRowToMax:function(dir){
+if(dir=="up"){
+this.drugSelectRow(0);
+}else{
+this.drugSelectRow(this.grid.rowCount);
+}
+},getCellNode:function(_3c,_3d){
+var _3e=[],_3f=null;
+var _40=this.grid.views;
+for(var i=0,v,n;(v=_40.views[i])&&(n=v.getRowNode(_3d));i++){
+_3e.push(n);
+}
+dojo.forEach(_3e,dojo.hitch(function(_41,_42){
+if(_3f){
+return;
+}
+var _43=dojo.query("[idx='"+_3c+"']",_41);
+if(_43&&_43[0]){
+_3f=_43[0];
+}
+}));
+return _3f;
+},addCellToSelection:function(_44,_45){
+if(!_45){
+_45=this;
+}
+_45.selectedCells[_45.selectedCells.length]=_44;
+dojo.toggleClass(_44,_45.selectedClass,true);
+},isColSelected:function(_46){
+return this.selectedColumns[_46];
+},isRowSelected:function(_47){
+return this.grid.selection.selected[_47];
+},isContinuousSelection:function(_48){
+var _49=-1;
+for(var i=0;i<_48.length;i++){
+if(!_48[i]){
+continue;
+}
+if(_49<0||i-_49==1){
+_49=i;
+}else{
+if(i-_49>=2){
+return false;
+}
+}
+}
+return _49>=0?true:false;
+},cleanCellSelection:function(){
+dojo.forEach(this.selectedCells,dojo.hitch(this,"removeCellSelectedState"));
+this.selectedCells=[];
+dojo.forEach(this.selectedColumns,function(_4a,_4b){
+if(_4a){
+dojo.toggleClass(this.getHeaderNodes()[_4b],"dojoxGridHeaderSelected",false);
+}
+},this);
+this.selectedColumns=[];
+this.grid.edit.isEditing()&&this.grid.edit.apply();
+},removeCellSelectedState:function(_4c){
+dojo.toggleClass(_4c,this.selectedClass,false);
+},cleanAll:function(){
+this.cleanCellSelection();
+this.grid.selection.clear();
+this.publishRowChange();
+},refreshColumnSelection:function(){
+dojo.forEach(this.selectedColumns,dojo.hitch(this,function(_4d,_4e){
+if(_4d){
+this.grid.select.addColumnToSelection(_4e);
+}
+}));
+},inSelectedArea:function(_4f,_50){
+return this.selectedColumns[_4f]||this.gird.selection.selecteded[_50];
+},publishRowChange:function(){
+dojo.publish(this.grid.rowSelectionChangedTopic,[this]);
+},getViewRowNodes:function(_51){
+var _52=[];
+for(i in _51){
+_52.push(_51[i]);
+}
+return _52;
+},getFirstSelected:function(){
+return dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype.getFirstSelected)();
+},getLastSelected:function(){
+var _53=this.grid.selection.selected;
+for(var i=_53.length-1;i>=0;i--){
+if(_53[i]){
+return i;
+}
+}
+return -1;
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndFocusManager.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndFocusManager.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndFocusManager.js	(revision 9)
@@ -0,0 +1,69 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndFocusManager"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndFocusManager"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndFocusManager");
+dojo.declare("dojox.grid.enhanced.dnd._DndFocusManager",null,{_rowBarNode:null,_rowBarFocusIdy:null,isRowBar:function(){
+return (!!this._rowBarNode);
+},getRowBarNode:function(_1){
+return this.grid.views.views[0].getCellNode(_1,0);
+},focusRowBar:function(){
+this.focusRowBarNode(0);
+this._focusifyCellNode(false);
+},focusRowBarNode:function(_2){
+this._blurRowBar();
+this._focusifyCellNode(false);
+var _3=this.getRowBarNode(_2);
+if(!_3){
+return;
+}
+this._rowBarNode=_3;
+this._rowBarFocusIdy=_2;
+this._rowBarNode.tabIndex=-1;
+dojox.grid.util.fire(this._rowBarNode,"focus");
+dojo.toggleClass(this._rowBarNode,this.focusClass,true);
+},_blurRowBar:function(){
+if(this._rowBarNode){
+dojo.toggleClass(this._rowBarNode,this.focusClass,false);
+this._rowBarNode=this._rowBarFocusIdy=null;
+}
+},focusNextRowBar:function(){
+var sc=this.grid.scroller,r=this._rowBarFocusIdy,rc=this.grid.rowCount-1,_4=Math.min(rc,Math.max(0,r+1));
+var _5=this._rowBarFocusIdy+1;
+if(_4>sc.getLastPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop+sc.findScrollTop(_4)-sc.findScrollTop(r));
+}
+this.focusRowBarNode(_5);
+this.scrollRowBarIntoView();
+},focusPrevRowBar:function(){
+var sc=this.grid.scroller,r=this._rowBarFocusIdy,rc=this.grid.rowCount-1,_6=Math.min(rc,Math.max(0,r-1));
+var _7=this._rowBarFocusIdy-1;
+if(_7<0){
+return;
+}
+if(_7<=sc.getPageRow(sc.page)){
+this.grid.setScrollTop(this.grid.scrollTop-sc.findScrollTop(r)-sc.findScrollTop(_6));
+}
+this.focusRowBarNode(_7);
+this.scrollRowBarIntoView();
+},getFocusedRowIndex:function(){
+return this._rowBarFocusIdy;
+},scrollRowBarIntoView:function(){
+this.cell=this._rowBarNode;
+this.cell.view=this.grid.views.views[0];
+this.cell.getNode=function(_8){
+return this.cell;
+};
+this.rowIndex=this._rowBarFocusIdy;
+this.scrollIntoView();
+this.cell=null;
+},focusHeaderNode:function(_9){
+this._colHeadFocusIdx=_9;
+this.focusHeader.apply(this,arguments);
+}});
+}
Index: trunk/web/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js
===================================================================
--- trunk/web/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js	(revision 0)
+++ trunk/web/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js	(revision 9)
@@ -0,0 +1,693 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.grid.enhanced.dnd._DndMovingManager"]){
+dojo._hasResource["dojox.grid.enhanced.dnd._DndMovingManager"]=true;
+dojo.provide("dojox.grid.enhanced.dnd._DndMovingManager");
+dojo.require("dojox.grid.enhanced.dnd._DndSelectingManager");
+dojo.require("dojox.grid.enhanced.dnd._DndMover");
+dojo.require("dojo.dnd.move");
+dojo.declare("dojox.grid.enhanced.dnd._DndMovingManager",dojox.grid.enhanced.dnd._DndSelectingManager,{exceptRowsTo:-1,exceptColumnsTo:-1,coverDIVs:[],movers:[],constructor:function(_1){
+if(this.grid.indirectSelection){
+this.exceptColumnsTo=this.grid.pluginMgr.getFixedCellNumber()-1;
+}
+this.coverDIVs=this.movers=[];
+dojo.subscribe("CTRL_KEY_DOWN",dojo.hitch(this,function(_2,_3){
+if(_2==this.grid&&_2!=this){
+this.keyboardMove(_3);
+}
+}));
+dojo.forEach(this.grid.views.views,function(_4){
+dojo.connect(_4.scrollboxNode,"onscroll",dojo.hitch(this,function(){
+this.clearDrugDivs();
+}));
+},this);
+},getGridWidth:function(){
+return dojo.contentBox(this.grid.domNode).w-this.grid.views.views[0].getWidth().replace("px","");
+},isColSelected:function(_5){
+return this.selectedColumns[_5]&&_5>this.exceptColumnsTo;
+},getHScrollBarHeight:function(){
+this.scrollbarHeight=0;
+dojo.forEach(this.grid.views.views,function(_6,_7){
+if(_6.scrollboxNode){
+var _8=_6.scrollboxNode.offsetHeight-_6.scrollboxNode.clientHeight;
+this.scrollbarHeight=_8>this.scrollbarHeight?_8:this.scrollbarHeight;
+}
+},this);
+return this.scrollbarHeight;
+},getExceptionalColOffsetWidth:function(){
+if(!this.grid.indirectSelection||!this.grid.rowSelectCell){
+return 0;
+}
+var _9=(normalizedOffsetWidth=0),_a=this.grid.rowSelectCell.view.scrollboxNode;
+dojo.forEach(this.getHeaderNodes(),function(_b,_c){
+if(_c<=this.exceptColumnsTo){
+var _d=dojo.coords(_b);
+_9+=_d.w;
+}
+},this);
+normalizedOffsetWidth=_9-_a.scrollLeft*(dojo._isBodyLtr()?1:(dojo.isMoz?-1:1));
+return normalizedOffsetWidth>0?normalizedOffsetWidth:0;
+},getGridCoords:function(_e){
+if(!this.gridCoords||_e){
+this.gridCoords=new Object();
+if(!this.headerHeight){
+this.headerHeight=dojo.coords(this.getHeaderNodes()[0]).h;
+}
+var _f=dojo.coords(this.grid.views.views[0].domNode);
+var _10=dojo.coords(this.grid.domNode);
+var _11=dojo.contentBox(this.grid.domNode);
+this.gridCoords.h=_11.h-this.headerHeight-this.getHScrollBarHeight();
+this.gridCoords.t=_10.y;
+this.gridCoords.l=dojo._isBodyLtr()?(_10.x+_f.w):_10.x;
+this.gridCoords.w=_11.w-_f.w;
+}
+return this.gridCoords;
+},createAvatar:function(_12,_13,_14,top,_15){
+this.gridCoords=null;
+var _16=this.getGridCoords();
+var _17=dojo.doc.createElement("DIV");
+_17.className="dojoxGridSelectedDIV";
+_17.id="grid_dnd_cover_div_"+_14+"_"+top;
+_17.style.width=_12+"px";
+var _18=dojo._docScroll();
+var _19=top<_16.t+this.headerHeight?_16.t+this.headerHeight-top:0;
+var _1a=_16.t+_16.h+this.headerHeight;
+var _1b=0;
+if(top<_16.t+this.headerHeight){
+_1b=(_16.t+this.headerHeight);
+}else{
+if(top>_1a){
+_1b=10000;
+}else{
+_1b=top;
+}
+}
+_17.style.top=_1b+_18.y+"px";
+_17.style.left=(_14+_18.x)+"px";
+var _1c=_1b+_13-_19;
+if(_1c>_1a+(_15?this.scrollbarHeight:0)){
+_1c=_1a;
+}
+_17.style.height=((_1c-_1b)>=0?(_1c-_1b):0)+"px";
+dojo.doc.body.appendChild(_17);
+_17.connections=[];
+_17.connections.push(dojo.connect(_17,"onmouseout",this,function(){
+this.clearDrugDivs();
+}));
+_17.connections.push(dojo.connect(_17,"onclick",this,"avataDivClick"));
+_17.connections.push(dojo.connect(_17,"keydown",this,function(e){
+this.handleESC(e,this);
+}));
+this.coverDIVs.push(_17);
+return _17;
+},handleESC:function(e,_1d){
+var dk=dojo.keys;
+switch(e.keyCode){
+case dk.ESCAPE:
+try{
+this.cancelDND();
+}
+catch(e){
+}
+break;
+}
+},cancelDND:function(){
+this.cleanAll();
+this.clearDrugDivs();
+if(this.mover){
+this.mover.destroy();
+}
+this.cleanAll();
+},createCoverMover:function(_1e,_1f,_20,top,_21){
+var _22=this.getGridCoords(),_23=(_21=="col"?true:false);
+var _24={box:{l:(_21=="row"?_20:_22.l)+dojo._docScroll().x,t:(_21=="col"?top:_22.t+this.headerHeight)+dojo._docScroll().y,w:_21=="row"?1:_22.w,h:_21=="col"?1:_22.h},within:true,movingType:_21,mover:dojox.grid.enhanced.dnd._DndMover};
+return new dojox.grid.enhanced.dnd._DndBoxConstrainedMoveable(this.createAvatar(_1e,_1f,_20,top,_23),_24);
+},getBorderDiv:function(){
+var _25=dojo.byId("borderDIV"+this.grid.id);
+if(_25==null){
+_25=dojo.doc.createElement("DIV");
+_25.id="borderDIV"+this.grid.id;
+_25.className="dojoxGridBorderDIV";
+dojo.doc.body.appendChild(_25);
+}
+return _25;
+},setBorderDiv:function(_26,_27,_28,top){
+var _29=this.getBorderDiv();
+dojo.style(_29,{"height":_27+"px","top":top+"px","width":_26+"px","left":_28+"px"});
+return _29;
+},removeOtherMovers:function(id){
+if(!this.coverDIVs.hasRemovedOtherMovers){
+var _2a;
+dojo.forEach(this.coverDIVs,function(div){
+if(div.id!=id){
+dojo.doc.body.removeChild(div);
+}else{
+_2a=div;
+}
+},this);
+this.coverDIVs=[_2a];
+this.coverDIVs.hasRemovedOtherMovers=true;
+}
+},addColMovers:function(){
+var _2b=-1;
+dojo.forEach(this.selectedColumns,function(col,_2c){
+if(this.isColSelected(_2c)){
+if(_2b==-1){
+_2b=_2c;
+}
+if(this.selectedColumns[_2c+1]==null){
+this.addColMover(_2b,_2c);
+_2b=-1;
+}
+}
+},this);
+},addColMover:function(_2d,_2e){
+if(this.lock){
+return;
+}
+var _2f=(rightPosition=0);
+var top=null,_30=null;
+if(dojo._isBodyLtr()){
+dojo.forEach(this.getHeaderNodes(),function(_31,_32){
+var _33=dojo.coords(_31);
+if(_32==_2d){
+_2f=_33.x;
+top=_33.y+_33.h;
+_30=_33.h;
+}
+if(_32==_2e){
+rightPosition=_33.x+_33.w;
+}
+});
+}else{
+dojo.forEach(this.getHeaderNodes(),function(_34,_35){
+var _36=dojo.coords(_34);
+if(_35==_2d){
+rightPosition=_36.x+_36.w;
+_30=_36.h;
+}
+if(_35==_2e){
+_2f=_36.x;
+top=_36.y+_36.h;
+}
+});
+}
+var _37=this.normalizeColMoverCoords(_2f,rightPosition,_2d,_2e);
+var _38=_37.h,_39=_37.w;
+_2f=_37.l,rightPosition=_37.r;
+var _3a=this.createCoverMover(_39,_38,_2f,top,"col");
+this.movers.push(_3a);
+var _3b=this.setBorderDiv(3,_38,-1000,top+dojo._docScroll().y);
+dojo.attr(_3b,"colH",_37.colH);
+dojo.connect(_3a,"onMoveStart",dojo.hitch(this,function(_3c,_3d){
+this.mover=_3c;
+this.removeOtherMovers(_3c.node.id);
+}));
+dojo.connect(_3a,"onMove",dojo.hitch(this,function(_3e,_3f,_40){
+if(_3e.node==null||_3e.node.parentNode==null){
+return;
+}
+this.isMoving=true;
+this.moveColBorder(_3e,_40,_3b);
+}));
+dojo.connect(_3a,"onMoveStop",dojo.hitch(this,function(_41){
+if(this.drugDestIndex==null||this.isContinuousSelection(this.selectedColumns)&&(this.drugDestIndex==_2d||this.drugDestIndex==_2e||this.drugDestIndex==(_2e+1)&&this.drugBefore)){
+this.movingIgnored=true;
+if(this.isMoving){
+this.isMoving=false;
+this.clearDrugDivs();
+}
+return;
+}
+this.isMoving=false;
+this.mover=null;
+this.startMoveCols();
+this.drugDestIndex=null;
+}));
+},normalizeColMoverCoords:function(_42,_43,_44,_45){
+var _46=_43-_42,_47=this.grid.views.views,_48=this.grid.pluginMgr;
+var _49={"w":_46,"h":0,"l":_42,"r":_43,"colH":0};
+var _4a=this.getGridWidth()-_47[_47.length-1].getScrollbarWidth();
+var rtl=!dojo._isBodyLtr();
+var _4b=_48.getViewByCellIdx(!rtl?_44:_45);
+var _4c=_48.getViewByCellIdx(!rtl?_45:_44);
+var _4d=(_4b==_4c);
+if(!_4b||!_4c){
+return _49;
+}
+var _4e=dojo.coords(_4b.scrollboxNode).x+(rtl&&dojo.isIE?_4b.getScrollbarWidth():0);
+var _4f=dojo.coords(_4c.scrollboxNode);
+var _50=_4f.x+_4f.w-((!rtl||!dojo.isIE)?_4c.getScrollbarWidth():0);
+if(_49.l<_4e){
+_49.w=_49.r-_4e;
+_49.l=_4e;
+}
+if(_49.r>_50){
+_49.w=_50-_49.l;
+}
+var i,_51=this.grid.views.views[0],_52=dojo.coords(_51.contentNode).h;
+var _53=_4c,_54=_4f.h;
+_49.colH=_52;
+_54=!_4d?_54:(_54-(_53.scrollboxNode.offsetHeight-_53.scrollboxNode.clientHeight));
+_49.h=_52<_54?_52:_54;
+return _49;
+},moveColBorder:function(_55,_56,_57){
+var _58=dojo._docScroll(),rtl=!dojo._isBodyLtr();
+_56.x-=_58.x;
+var _59=this.grid.views.views,_5a=this.getGridCoords();
+var _5b=_59[!rtl?1:_59.length-1].scrollboxNode;
+var _5c=_59[!rtl?_59.length-1:1].scrollboxNode;
+var _5d=(!rtl||!dojo.isIE)?_5a.l:(_5a.l+_5b.offsetWidth-_5b.clientWidth);
+var _5e=(!rtl||dojo.isMoz)?(_5a.l+_5a.w-(_5c.offsetWidth-_5c.clientWidth)):(_5a.l+_5a.w);
+dojo.forEach(this.getHeaderNodes(),dojo.hitch(this,function(_5f,_60){
+if(_60>this.exceptColumnsTo){
+var x,_61=dojo.coords(_5f);
+if(_56.x>=_61.x&&_56.x<=_61.x+_61.w){
+if(!this.selectedColumns[_60]||!this.selectedColumns[_60-1]){
+x=_61.x+_58.x+(rtl?_61.w:0);
+if(_56.x<_5d||_56.x>_5e||x<_5d||x>_5e){
+return;
+}
+dojo.style(_57,"left",x+"px");
+this.drugDestIndex=_60;
+this.drugBefore=true;
+!dojo.isIE&&this.normalizeColBorderHeight(_57,_60);
+}
+}else{
+if(this.getHeaderNodes()[_60+1]==null&&(!rtl?(_56.x>_61.x+_61.w):(_56.x<_61.x))){
+x=_56.x<_5d?_5d:(_56.x>_5e?_5e:(_61.x+_58.x+(rtl?0:_61.w)));
+dojo.style(_57,"left",x+"px");
+this.drugDestIndex=_60;
+this.drugBefore=false;
+!dojo.isIE&&this.normalizeColBorderHeight(_57,_60);
+}
+}
+}
+}));
+},normalizeColBorderHeight:function(_62,_63){
+var _64=this.grid.pluginMgr.getViewByCellIdx(_63);
+if(!_64){
+return;
+}
+var _65=_64.scrollboxNode,_66=dojo.attr(_62,"colH");
+var _67=dojo.coords(_65).h-(_65.offsetHeight-_65.clientHeight);
+_67=_66>0&&_66<_67?_66:_67;
+dojo.style(_62,"height",_67+"px");
+},avataDivClick:function(e){
+if(this.movingIgnored){
+this.movingIgnored=false;
+return;
+}
+this.cleanAll();
+this.clearDrugDivs();
+},startMoveCols:function(){
+this.changeCursorState("wait");
+this.srcIndexdelta=0;
+deltaColAmount=0;
+dojo.forEach(this.selectedColumns,dojo.hitch(this,function(col,_68){
+if(this.isColSelected(_68)){
+if(this.drugDestIndex>_68){
+_68-=deltaColAmount;
+}
+deltaColAmount+=1;
+var _69=this.grid.layout.cells[_68].view.idx;
+var _6a=this.grid.layout.cells[this.drugDestIndex].view.idx;
+if(_68!=this.drugDestIndex){
+this.grid.layout.moveColumn(_69,_6a,_68,this.drugDestIndex,this.drugBefore);
+}
+if(this.drugDestIndex<=_68&&this.drugDestIndex+1<this.grid.layout.cells.length){
+this.drugDestIndex+=1;
+}
+}
+}));
+var _6b=this.drugDestIndex+(this.drugBefore?0:1);
+this.clearDrugDivs();
+this.cleanAll();
+this.resetCellIdx();
+this.drugSelectionStart.colIndex=_6b-deltaColAmount;
+this.drugSelectColumn(this.drugSelectionStart.colIndex+deltaColAmount-1);
+},changeCursorState:function(_6c){
+dojo.forEach(this.coverDIVs,function(div){
+div.style.cursor="wait";
+});
+},addRowMovers:function(){
+var _6d=-1;
+dojo.forEach(this.grid.selection.selected,function(row,_6e){
+var _6f=this.grid.views.views[0];
+if(row&&_6f.rowNodes[_6e]){
+if(_6d==-1){
+_6d=_6e;
+}
+if(this.grid.selection.selected[_6e+1]==null||!_6f.rowNodes[_6e+1]){
+this.addRowMover(_6d,_6e);
+_6d=-1;
+}
+}
+},this);
+},addRowMover:function(_70,to){
+var _71=0,_72=this.grid.views.views;
+dojo.forEach(_72,function(_73,_74){
+_71+=_73.getScrollbarWidth();
+});
+var _75=_72[_72.length-1].getScrollbarWidth();
+var _76=!dojo._isBodyLtr()?(dojo.isIE?_71-_75:_71):0;
+var _77=this.getGridWidth()-_75;
+var _78=this.grid.views.views[0];
+var _79=_78.rowNodes[_70],_7a=_78.rowNodes[to];
+if(!_79||!_7a){
+return;
+}
+var _7b=dojo.coords(_79),_7c=dojo.coords(_7a);
+var _7d=this.getExceptionalColOffsetWidth();
+var _7e=this.createCoverMover(_77-_7d,(_7c.y-_7b.y+_7c.h),dojo._isBodyLtr()?(_7b.x+_7b.w+_7d):(_7b.x-_77-_76),_7b.y,"row");
+var _7f=this.setBorderDiv(_77,3,(dojo._isBodyLtr()?(_7c.x+_7c.w):(_7c.x-_77-_76))+dojo._docScroll().x,-100);
+var _80=dojo.connect(_7e,"onMoveStart",dojo.hitch(this,function(_81,_82){
+this.mover=_81;
+this.removeOtherMovers(_81.node.id);
+}));
+var _83=dojo.connect(_7e,"onMove",dojo.hitch(this,function(_84,_85,_86){
+if(_84.node==null||_84.node.parentNode==null){
+return;
+}
+this.isMoving=true;
+this.moveRowBorder(_84,_85,_7f,_86);
+}));
+var _87=dojo.connect(_7e,"onMoveStop",dojo.hitch(this,function(_88){
+if(this.avaOnRowIndex==null||this.isContinuousSelection(this.grid.selection.selected)&&(this.avaOnRowIndex==_70||this.avaOnRowIndex==(to+1))){
+this.movingIgnored=true;
+if(this.isMoving){
+this.isMoving=false;
+this.clearDrugDivs();
+}
+return;
+}
+this.isMoving=false;
+this.mover=null;
+this.grid.select.outRangeY=false;
+this.grid.select.moveOutTop=false;
+this.grid.scroller.findScrollTop(this.grid.scroller.page*this.grid.scroller.rowsPerPage);
+this.startMoveRows();
+this.avaOnRowIndex=null;
+delete _7e;
+}));
+},moveRowBorder:function(_89,_8a,_8b,_8c){
+var _8d=this.getGridCoords(true),_8e=dojo._docScroll();
+var _8f=_8d.t+this.headerHeight+_8d.h;
+_8a.t-=_8e.y,_8c.y-=_8e.y;
+if(_8c.y>=_8f){
+this.grid.select.outRangeY=true;
+this.autoMoveToNextRow();
+}else{
+if(_8c.y<=_8d.t+this.headerHeight){
+this.grid.select.moveOutTop=true;
+this.autoMoveToPreRow();
+}else{
+this.grid.select.outRangeY=this.grid.select.moveOutTop=false;
+var _90=this.grid.views.views[0],_91=_90.rowNodes;
+var _92=dojo.coords(_90.contentNode).h;
+var _93=0,_94=-1;
+for(i in _91){
+i=parseInt(i);
+++_93;
+if(i>_94){
+_94=i;
+}
+}
+var _95=dojo.coords(_91[_94]);
+if(_92<_8d.h&&_8c.y>(_95.y+_95.h)){
+this.avaOnRowIndex=_93;
+dojo.style(_8b,{"top":_95.y+_95.h+_8e.y+"px"});
+return;
+}
+var _96,_97,_98;
+for(var _99 in _91){
+_99=parseInt(_99);
+if(isNaN(_99)){
+continue;
+}
+_97=_91[_99];
+if(!_97){
+continue;
+}
+_96=dojo.coords(_97),_98=(_96.y<=_8f);
+if(_98&&_8c.y>_96.y&&_8c.y<_96.y+_96.h){
+if(!this.grid.selection.selected[_99]||!this.grid.selection.selected[_99-1]){
+this.avaOnRowIndex=_99;
+dojo.style(_8b,{"top":_96.y+_8e.y+"px"});
+}
+}
+}
+}
+}
+},autoMoveToPreRow:function(){
+if(this.grid.select.moveOutTop){
+if(this.grid.scroller.firstVisibleRow>0){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow-1);
+this.autoMoveBorderDivPre();
+setTimeout(dojo.hitch(this,"autoMoveToPreRow"),this.autoScrollRate);
+}
+}
+},autoMoveBorderDivPre:function(){
+var _9a=dojo._docScroll(),_9b=this.getGridCoords();
+var _9c=_9b.t+this.headerHeight+_9a.y;
+var _9d,_9e=this.getBorderDiv();
+if(this.avaOnRowIndex-1<=0){
+this.avaOnRowIndex=0;
+_9d=_9c;
+}else{
+this.avaOnRowIndex--;
+_9d=dojo.coords(this.grid.views.views[0].rowNodes[this.avaOnRowIndex]).y+_9a.y;
+}
+_9e.style.top=(_9d<_9c?_9c:_9d)+"px";
+},autoMoveToNextRow:function(){
+if(this.grid.select.outRangeY){
+if(this.avaOnRowIndex+1<=this.grid.scroller.rowCount){
+this.grid.scrollToRow(this.grid.scroller.firstVisibleRow+1);
+this.autoMoveBorderDiv();
+setTimeout(dojo.hitch(this,"autoMoveToNextRow"),this.autoScrollRate);
+}
+}
+},autoMoveBorderDiv:function(){
+var _9f=dojo._docScroll(),_a0=this.getGridCoords();
+var _a1=_a0.t+this.headerHeight+_a0.h+_9f.y;
+var _a2,_a3=this.getBorderDiv();
+if(this.avaOnRowIndex+1>=this.grid.scroller.rowCount){
+this.avaOnRowIndex=this.grid.scroller.rowCount;
+_a2=_a1;
+}else{
+this.avaOnRowIndex++;
+_a2=dojo.coords(this.grid.views.views[0].rowNodes[this.avaOnRowIndex]).y+_9f.y;
+}
+_a3.style.top=(_a2>_a1?_a1:_a2)+"px";
+},startMoveRows:function(){
+var _a4=Math.min(this.avaOnRowIndex,this.getFirstSelected());
+var end=Math.max(this.avaOnRowIndex-1,this.getLastSelected());
+this.moveRows(_a4,end,this.getPageInfo());
+},moveRows:function(_a5,end,_a6){
+var i,_a7=false,_a8=(selectedRowsAboveBorderDIV=0),_a9=[];
+var _aa=this.grid.scroller,_ab=_aa.rowsPerPage;
+var _ac=_a6.topPage*_ab,_ad=(_a6.bottomPage+1)*_ab-1;
+var _ae=dojo.hitch(this,function(_af,to){
+for(i=_af;i<to;i++){
+if(!this.grid.selection.selected[i]||!this.grid._by_idx[i]){
+_a9.push(this.grid._by_idx[i]);
+}
+}
+});
+_ae(_a5,this.avaOnRowIndex);
+for(i=_a5;i<=end;i++){
+if(this.grid.selection.selected[i]&&this.grid._by_idx[i]){
+_a9.push(this.grid._by_idx[i]);
+_a8++;
+if(this.avaOnRowIndex>i){
+selectedRowsAboveBorderDIV++;
+}
+}
+}
+_ae(this.avaOnRowIndex,end+1);
+for(i=_a5,j=0;i<=end;i++){
+this.grid._by_idx[i]=_a9[j++];
+if(i>=_ac&&i<=_ad){
+this.grid.updateRow(i);
+_a7=true;
+}
+}
+this.avaOnRowIndex+=_a8-selectedRowsAboveBorderDIV;
+try{
+this.clearDrugDivs();
+this.cleanAll();
+this.drugSelectionStart.rowIndex=this.avaOnRowIndex-_a8;
+this.drugSelectRow(this.drugSelectionStart.rowIndex+_a8-1);
+if(_a7){
+var _b0=_aa.stack;
+dojo.forEach(_a6.invalidPages,function(_b1){
+_aa.destroyPage(_b1);
+i=dojo.indexOf(_b0,_b1);
+if(i>=0){
+_b0.splice(i,1);
+}
+});
+}
+this.publishRowMove();
+}
+catch(e){
+}
+},clearDrugDivs:function(){
+if(!this.isMoving){
+var _b2=this.getBorderDiv();
+_b2.style.top=-100+"px";
+_b2.style.height="0px";
+_b2.style.left=-100+"px";
+dojo.forEach(this.coverDIVs,function(div){
+dojo.forEach(div.connections,function(_b3){
+dojo.disconnect(_b3);
+});
+dojo.doc.body.removeChild(div);
+delete div;
+},this);
+this.coverDIVs=[];
+}
+},setDrugCoverDivs:function(_b4,_b5){
+if(!this.isMoving){
+if(this.isColSelected(_b4)){
+this.addColMovers();
+}else{
+if(this.grid.selection.selected[_b5]){
+this.addRowMovers();
+}else{
+this.clearDrugDivs();
+}
+}
+}
+},getPageInfo:function(){
+var _b6=this.grid.scroller,_b7=(bottomPage=_b6.page);
+var _b8=_b6.firstVisibleRow,_b9=_b6.lastVisibleRow;
+var _ba=_b6.rowsPerPage,_bb=_b6.pageNodes[0];
+var _bc,_bd,_be=[],_bf;
+dojo.forEach(_bb,function(_c0,_c1){
+if(!_c0){
+return;
+}
+_bf=false;
+_bc=_c1*_ba;
+_bd=(_c1+1)*_ba-1;
+if(_b8>=_bc&&_b8<=_bd){
+_b7=_c1;
+_bf=true;
+}
+if(_b9>=_bc&&_b9<=_bd){
+bottomPage=_c1;
+_bf=true;
+}
+if(!_bf&&(_bc>_b9||_bd<_b8)){
+_be.push(_c1);
+}
+});
+return {topPage:_b7,bottomPage:bottomPage,invalidPages:_be};
+},resetCellIdx:function(){
+var _c2=0;
+var _c3=-1;
+dojo.forEach(this.grid.views.views,function(_c4,_c5){
+if(_c5==0){
+return;
+}
+if(_c4.structure.cells&&_c4.structure.cells[0]){
+dojo.forEach(_c4.structure.cells[0],function(_c6,_c7){
+var _c8=_c6.markup[2].split(" ");
+var idx=_c2+_c7;
+_c8[1]="idx=\""+idx+"\"";
+_c6.markup[2]=_c8.join(" ");
+});
+}
+for(i in _c4.rowNodes){
+if(!_c4.rowNodes[i]){
+return;
+}
+dojo.forEach(_c4.rowNodes[i].firstChild.rows[0].cells,function(_c9,_ca){
+if(_c9&&_c9.attributes){
+if(_ca+_c2>_c3){
+_c3=_ca+_c2;
+}
+var idx=document.createAttribute("idx");
+idx.value=_ca+_c2;
+_c9.attributes.setNamedItem(idx);
+}
+});
+}
+_c2=_c3+1;
+});
+},publishRowMove:function(){
+dojo.publish(this.grid.rowMovedTopic,[this]);
+},keyboardMove:function(_cb){
+var _cc=this.selectedColumns.length>0;
+var _cd=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype["getFirstSelected"])()>=0;
+var i,_ce,dk=dojo.keys,_cf=_cb.keyCode;
+if(!dojo._isBodyLtr()){
+_cf=(_cb.keyCode==dk.LEFT_ARROW)?dk.RIGHT_ARROW:(_cb.keyCode==dk.RIGHT_ARROW?dk.LEFT_ARROW:_cf);
+}
+switch(_cf){
+case dk.LEFT_ARROW:
+if(!_cc){
+return;
+}
+_ce=this.getHeaderNodes().length;
+for(i=0;i<_ce;i++){
+if(this.isColSelected(i)){
+this.drugDestIndex=i-1;
+this.drugBefore=true;
+break;
+}
+}
+var _d0=this.grid.indirectSelection?1:0;
+(this.drugDestIndex>=_d0)?this.startMoveCols():(this.drugDestIndex=_d0);
+break;
+case dk.RIGHT_ARROW:
+if(!_cc){
+return;
+}
+_ce=this.getHeaderNodes().length;
+this.drugBefore=true;
+for(i=0;i<_ce;i++){
+if(this.isColSelected(i)&&!this.isColSelected(i+1)){
+this.drugDestIndex=i+2;
+if(this.drugDestIndex==_ce){
+this.drugDestIndex--;
+this.drugBefore=false;
+}
+break;
+}
+}
+if(this.drugDestIndex<_ce){
+this.startMoveCols();
+}
+break;
+case dk.UP_ARROW:
+if(!_cd){
+return;
+}
+this.avaOnRowIndex=dojo.hitch(this.grid.selection,dojox.grid.Selection.prototype["getFirstSelected"])()-1;
+if(this.avaOnRowIndex>-1){
+this.startMoveRows();
+}
+break;
+case dk.DOWN_ARROW:
+if(!_cd){
+return;
+}
+for(i=0;i<this.grid.rowCount;i++){
+if(this.grid.selection.selected[i]&&!this.grid.selection.selected[i+1]){
+this.avaOnRowIndex=i+2;
+break;
+}
+}
+if(this.avaOnRowIndex<=this.grid.rowCount){
+this.startMoveRows();
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/editor/plugins/_SmileyPalette.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/_SmileyPalette.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/_SmileyPalette.js	(revision 9)
@@ -0,0 +1,48 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins._SmileyPalette"]){
+dojo._hasResource["dojox.editor.plugins._SmileyPalette"]=true;
+dojo.provide("dojox.editor.plugins._SmileyPalette");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojo.i18n");
+dojo.require("dijit._PaletteMixin");
+dojo.requireLocalization("dojox.editor.plugins","Smiley",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins._SmileyPalette");
+dojo.declare("dojox.editor.plugins._SmileyPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{templateString:"<table class=\"dijitInline dijitEditorSmileyPalette dijitPaletteTable\""+" cellSpacing=0 cellPadding=0><tbody dojoAttachPoint=\"gridNode\"></tbody></table>",baseClass:"dijitEditorSmileyPalette",_palette:[["smile","laughing","wink","grin"],["cool","angry","half","eyebrow"],["frown","shy","goofy","oops"],["tongue","idea","angel","happy"],["yes","no","crying",""]],dyeClass:"dojox.editor.plugins.Emoticon",buildRendering:function(){
+this.inherited(arguments);
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","Smiley");
+var _2={};
+for(var _3 in _1){
+if(_3.substr(0,8)=="emoticon"){
+_2[_3.substr(8).toLowerCase()]=_1[_3];
+}
+}
+this._preparePalette(this._palette,_2);
+}});
+dojo.declare("dojox.editor.plugins.Emoticon",null,{constructor:function(id){
+this.id=id;
+},getValue:function(){
+return dojox.editor.plugins.Emoticon.ascii[this.id];
+},imgHtml:function(_4){
+var _5="emoticon"+this.id.substr(0,1).toUpperCase()+this.id.substr(1),_6=dojo.moduleUrl("dojox.editor.plugins","resources/emoticons/"+_5+".gif"),_7=dojo.i18n.getLocalization("dojox.editor.plugins","Smiley")[_5],_8=["<img src=\"",_6,"\" class=\"",_4,"\" alt=\"",this.getValue(),"\" title=\"",_7,"\">"];
+return _8.join("");
+},fillCell:function(_9,_a){
+dojo.place(this.imgHtml("dijitPaletteImg"),_9);
+}});
+dojox.editor.plugins.Emoticon.ascii={smile:":-)",laughing:"lol",wink:";-)",grin:":-D",cool:"8-)",angry:":-@",half:":-/",eyebrow:"/:)",frown:":-(",shy:":-$",goofy:":-S",oops:":-O",tongue:":-P",idea:"(i)",yes:"(y)",no:"(n)",angel:"0:-)",crying:":'(",happy:"=)"};
+dojox.editor.plugins.Emoticon.fromAscii=function(_b){
+var _c=dojox.editor.plugins.Emoticon.ascii;
+for(var i in _c){
+if(_b==_c[i]){
+return new dojox.editor.plugins.Emoticon(i);
+}
+}
+return null;
+};
+}
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Definir","insertTableTitle":"Inserir tabela","insertTableRowAfterLabel":"Adicionar linha depois","center":"centro","deleteTableColumnLabel":"Eliminar coluna","right":"direita","insertTableColumnBeforeLabel":"Adicionar coluna antes","tableWidth":"Largura da tabela:","buttonInsert":"Inserir","default":"predefinição","align":"Alinhar:","insertTableRowBeforeLabel":"Adicionar linha antes","cellSpacing":"Espaçamento de células:","pixels":"píxeis","selectTableLabel":"Seleccionar tabela","rows":"Linhas:","modifyTableTitle":"Modificar tabela","cellPadding":"Preenchimento de células:","deleteTableRowLabel":"Eliminar linha","backgroundColor":"Cor de segundo plano:","insertTableColumnAfterLabel":"Adicionar coluna depois","left":"esquerda","borderThickness":"Espessura do contorno","columns":"Colunas:","percent":"percentagem","borderColor":"Cor do contorno:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Insertion d'un symbole"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Saut de page"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Aperçu"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"rire","emoticonCool":"calme","emoticonTongue":"langue","emoticonCrying":"pleurs","emoticonOops":"oops","emoticonFrown":"froncement de sourcils","emoticonAngry":"colère","emoticonShy":"timide","emoticonNo":"non","emoticonAngel":"ange","smiley":"Insérer une émoticône","emoticonIdea":"idée","emoticonEyebrow":"sourcils","emoticonSmile":"sourire","emoticonWink":"clin d'oeil","emoticonYes":"oui","emoticonGrin":"sourire large","emoticonGoofy":"dingo","emoticonHalf":"demi"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Affichage des éléments de bloc HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Sélection de contenus","deleteElement":"Suppression d'un élément","moveEnd":"Déplacer le curseur vers la fin","deleteContents":"Suppression de contenus","nodeActions":"Actions ${nodeName}","selectElement":"Sélection d'un élément","moveStart":"Déplacer le curseur vers le début"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Définir","insertTableTitle":"Insertion d'une table","insertTableRowAfterLabel":"Ajouter une ligne après","center":"au centre","deleteTableColumnLabel":"Supprimer une colonne","right":"à droite","insertTableColumnBeforeLabel":"Ajouter une colonne avant","tableWidth":"Largeur de la table :","buttonInsert":"Insérer","default":"valeur par défaut","align":"Aligner :","insertTableRowBeforeLabel":"Ajouter une ligne avant","cellSpacing":"Espacement des cellules :","pixels":"pixels","selectTableLabel":"Sélection d'une table","rows":"Lignes :","modifyTableTitle":"Modification d'une table","cellPadding":"Remplissage des cellules","deleteTableRowLabel":"Supprimer une ligne","backgroundColor":"Couleur d'arrière-plan :","insertTableColumnAfterLabel":"Ajouter une colonne après","left":"à gauche","borderThickness":"Epaisseur de la bordure","columns":"Colonnes :","percent":"pourcentage","borderColor":"Couleur de la bordure :"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Vers l'arrière","findReplace":"Rechercher/Remplacer","replaceAll":"Toutes les occurrences","replaceDialogText":"${0} occurrence(s) remplacée(s).","replaceButton":"Remplacer","findButton":"Rechercher","findLabel":"Que rechercher :","matchCase":"Respecter la casse","replaceLabel":"Remplacer par :","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"inférieur ou égal à","prod":"produit n-aire\nsigne produit","zwj":"liant sans chasse","mdash":"tiret cadratin","frasl":"barre de fraction","upsih":"Greek - upsilon avec symbole de crochet","prop":"proportionnel à","middot":"point médian\nvirgule géorgiennea\npoint médian grec","hellip":"points de suspension\ntrois points de conduite","eta":"Grec - eta minuscule","iacute":"Latin - i minuscule avec accent aigu","yen":"signe yen\nsigne yuan","rlm":"marque de droite à gauche","macr":"macron\nmacron d'espacement\nligne supérieure\nbarre supérieure APL","ldquo":"guillemet double gauche","Icirc":"Latin - I majuscule avec accent circonflexe","OElig":"Latin - Ligature OE majuscule","hArr":"flèche double vers la gauche","eth":"Latin - eth minuscule","divide":"signe division","chi":"Grec - chi minuscule","eacute":"Latin - e minuscule avec accent aigu","icirc":"Latin - i minuscule avec accent circonflexe","iexcl":"point d'exclamation inversé","ETH":"Latin - ETH majuscule","acute":"accent aigu\naccent aigu d'espacement","crarr":"flèche vers le bas avec coin vers la gauche\nretour chariot","mu":"Grec - mu minuscule","AElig":"Latin - AE majuscule\nLatin - AE majuscule (ligature)","aacute":"Latin - a minuscule avec accent aigu","lambda":"Grec - lambda minuscule","THORN":"Latin THORN majuscule","asymp":"presque égal à\nasymptotique à","fnof":"Latin - f minuscule avec crochet\nfonction\nflorin","lang":"chevron vers la gauche","cup":"union\ncup","ne":"différente de","Sigma":"Grec - sigma majuscule","oelig":"Latin - Ligature oe minuscule","cent":"signe cent","ni":"contient comme membre","dagger":"obèle","permil":"signe pour-mille","Omicron":"Grec - omicron majuscule","sigma":"Grec - sigma minuscule","euro":"signe euro","Yacute":"Latin - Y majuscule avec accent aigu","thorn":"Latin - thorn minuscule","lceil":"plafond à gauche\nmontant APL","Ograve":"Latin - O majuscule avec accent grave","rarr":"flèche vers la droite","nu":"Grec - nu minuscule","emsp":"espace cadratin","Theta":"Grec - theta majuscule","lArr":"flèche double vers la gauche","tau":"Grec - tau minuscule","aelig":"Latin - AE minuscule\nLatin - AE minuscule (ligature)","ccedil":"Latin - c minuscule avec cédille","Ntilde":"Latin - N majuscule avec tilde","cong":"approximativement égal à","Uacute":"Latin - U majuscule avec accent aigu","theta":"Grec - theta minuscule","darr":"flèche vers le bas","Uuml":"Latin - U majuscule avec tréma","bdquo":"guillemet double fermant bas","Aring":"Latin - A majuscule rond en chef\nLatin - A majuscule rond","sigmaf":"Grec - sigma final minuscule","pound":"signe livre sterling","uArr":"flèche double vers le haut","sub":"sous-ensemble de","aring":"Latin - a minuscule rond en chef\nLatin - a minuscule rond","sdot":"point","thinsp":"espace fin","or":"ou logique\nvee","Eacute":"Latin - E majuscule avec accent aigu","shy":"trait d'union conditionnel\ntiret conditionnel","curren":"signe devise","loz":"losange","not":"signe non","tilde":"petit tilde","sum":"somme n-aire","spades":"pic noir","Psi":"Grec - psi majuscule","ndash":"tiret demi-cadratin","sup":"sur-ensemble de","atilde":"Latin - a minuscule avec tilde","clubs":"trèfle noir","uuml":"Latin - u minuscule avec tréma","Aacute":"Latin - A majuscule avec accent aigu","rsaquo":"guillemet simple orienté vers la droite","otimes":"signe multiplié entouré\nproduit vectoriel","lfloor":"plancher à gauche\ndescendant APL","zwnj":"antiliant sans chasse","sim":"tilde\nvarie en fonction de\nsimilaire à","Iota":"Grec - iota majuscule","Iacute":"Latin - I majuscule avec accent aigu","pi":"Grec - pi minuscule","ordf":"indicateur ordinal féminin","frac12":"fraction commune un demi\nfraction un demi","frac14":"fraction commune un quart\nfraction un quart","alefsym":"symbole alef\npremier cardinal transfini","bull":"puce\npetit cercle noir","deg":"signe degré","ordm":"indicateur ordinal masculin","epsilon":"Grec - epsilon minuscule","equiv":"identique à","Dagger":"double obèle","brvbar":"barre interrompue\nbarre verticale interrompue","harr":"flèche vers la gauche et la droite","ugrave":"Latin - u minuscule avec accent grave","oslash":"Latin - o minuscule barré\nLatin - Ensemble vide minuscule","Yuml":"Latin - Y majuscule avec tréma","hearts":"coeur noir\nvalentine","Xi":"Grec - xi majuscule","Prime":"double apostrophe\nsecondes\npouces","iota":"Grec - iota minuscule","Ccedil":"Latin - C majuscule avec cédille","Lambda":"Grec - lambda majuscule","raquo":"guillemets ouvrants","Phi":"Grec - phi majuscule","prime":"apostrophe\nminutes\npieds","nsub":"non sous-ensemble de","copy":"signe de droit d'auteur","yuml":"Latin - y minuscule avec tréma","Rho":"Grec - rho majuscule","Ucirc":"Latin - U majuscule avec accent circonflexe","Kappa":"Grec - kappa majuscule","ucirc":"Latin - u minuscule avec accent circonflexe","sbquo":"guillemet simple fermant bas","igrave":"Latin - i minuscule avec accent grave","reg":"signe enregistré\nmarque commerciale enregistrée","infin":"infinité","iquest":"point d'interrogation inversé\npoint d'interrogation retourné","circ":"accent circonflexe de lettre modificateur","kappa":"Grec - kappa minuscule","lrm":"marque de gauche à droite","Atilde":"Latin - A majuscule avec tilde","larr":"flèche vers la gauche","frac34":"fraction commune trois quarts\nfraction trois quarts","oacute":"Latin - o minuscule avec accent aigu","rsquo":"guillemet simple fermant","egrave":"Latin - e minuscule avec accent grave","oline":"surligné\nbarre supérieure d'espacement","Mu":"Grec - mu majuscule","exist":"il existe","cap":"intersection\ncap","and":"et logique\nwedge","Ouml":"Latin - O majuscule avec tréma","agrave":"Latin - a minuscule avec accent grave\nLatin - a minuscule accent grave","uarr":"flèche vers le haut","ang":"angle","Zeta":"Grec - zeta majuscule","scaron":"Latin - s minuscule avec caron","Gamma":"Grec - gamma majuscule","isin":"élément de","Auml":"Latin - A majuscule avec tréma","empty":"ensemble vide\nensemble null\ndiamètre","gamma":"Grec - gamma minuscule","para":"symbole de paragraphe","ge":"supérieur ou égal à","psi":"Grec - psi minuscule","Alpha":"Grec - alpha majuscule","Nu":"Grec - nu majuscule","ouml":"Latin - o minuscule avec tréma","zeta":"Grec - zeta minuscule","alpha":"Grec - alpha minuscule","part":"différentiel partiel","auml":"Latin - a minuscule avec tréma","Ugrave":"Latin - U majuscule avec accent grave","Oslash":"Latin - O majuscule barré\nLatin - Ensemble vide","Epsilon":"Grec - epsilon majuscule","int":"intégrale","Omega":"Grec - omega majuscule","perp":"orthogonal à\nperpendiculaire","uml":"tréma\ntréma d'espacement","upsilon":"Grec - upsilon minuscule","lowast":"astérisque","omega":"Grec - omega minuscule","otilde":"Latin - o minuscule avec tilde","Egrave":"Latin - E majuscule avec accent grave","phi":"Grec - phi minuscule","ensp":"espace demi-cadratin","Euml":"Latin - E majuscule avec tréma","cedil":"cédille\ncédille d'espacement","laquo":"guillemets fermants","forall":"pour tous","thetasym":"Grec - theta minuscule","Agrave":"Latin - A majuscule avec accent grave\nLatin - A majuscule accent grave","szlig":"Latin - s dur minuscule\nss","Pi":"Grec - pi majuscule","rho":"Grec - rho minuscule","trade":"signe de marque commerciale","Igrave":"Latin - I majuscule avec accent grave","minus":"signe moins","Beta":"Grec - beta majuscule","Ocirc":"Latin - O majuscule avec accent circonflexe","rdquo":"guillemet double droit","Eta":"Grec - eta majuscule","rfloor":"plancher à droite","Oacute":"Latin - O majuscule avec accent aigu","euml":"Latin - e minuscule avec tréma","oplus":"plus entouré\nsomme directe","ocirc":"Latin - o minuscule avec accent circonflexe","radic":"racine carrée\nsigne radical","Chi":"Grec - chi majuscule","notin":"non élément de","sect":"signe section","Acirc":"Latin - A majuscule avec accent circonflexe","lsquo":"guillemet simple ouvrant","beta":"Grec - beta minuscule","piv":"Greek - symbole pi","sup1":"exposant un\npuissance un","Scaron":"Latin - S majuscule avec caron","sup2":"exposant deux\npuissance deux\ncarré","acirc":"Latin - a minuscule avec accent circonflexe","sube":"sous-ensemble de ou égal à","sup3":"exposant trois\npuissance trois\ncube","real":"R majuscule noir\npartie réelle","Iuml":"Latin - I majuscule avec tréma","rang":"chevron vers la droite","lsaquo":"guillemet simple orienté vers la gauche","nabla":"nabla\ndifférence arrière","omicron":"Grec - omicron minuscule","there4":"donc","plusmn":"signe plus-moins\nsigne plus-ou-moins","rceil":"plafond à droite","micro":"signe micro","rArr":"flèche double vers la droite","Delta":"Grec - delta majuscule","iuml":"Latin - i minuscule avec tréma","Tau":"Grec - tau majuscule","times":"signe multiplication","yacute":"Latin - y minuscule avec accent aigu","ograve":"Latin - o minuscule avec accent grave","delta":"Grec - delta minuscule","Ecirc":"Latin - E majuscule avec accent circonflexe","dArr":"flèche double vers le bas","ntilde":"Latin - n minuscule avec tilde","diams":"carreau noir","uacute":"Latin - u minuscule avec accent aigu","Otilde":"Latin - O majuscule avec tilde","ecirc":"Latin - e minuscule avec accent circonflexe","Upsilon":"Grec - upsilon majuscule","image":"I majuscule noir\npartie imaginaire","supe":"sur-ensemble de ou égal à","xi":"Grec - xi minuscule","weierp":"P majuscule scripte\nensemble de puissances\nfonction elliptique de Weierstrass"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fr/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fr/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fr/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Sauvegarder"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"顯示 HTML 區塊元素"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"選取內容","deleteElement":"刪除元素","moveEnd":"將游標移到末尾","deleteContents":"刪除內容","nodeActions":"${nodeName} 動作","selectElement":"選取元素","moveStart":"將游標移到開頭"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"設定","insertTableTitle":"插入表格","insertTableRowAfterLabel":"在後面新增一個列","center":"置中","deleteTableColumnLabel":"刪除欄","right":"靠右","insertTableColumnBeforeLabel":"在前面新增一個直欄","tableWidth":"表格寬度：","buttonInsert":"插入","default":"預設值","align":"對齊：","insertTableRowBeforeLabel":"在前面新增一個列","cellSpacing":"資料格間距：","pixels":"像素","selectTableLabel":"選取表格","rows":"列：","modifyTableTitle":"修改表格","cellPadding":"資料格行距：","deleteTableRowLabel":"刪除列","backgroundColor":"背景顏色：","insertTableColumnAfterLabel":"在後面新增一個直欄","left":"靠左","borderThickness":"邊框寬度","columns":"欄：","percent":"百分比","borderColor":"邊框顏色："})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"向後","findReplace":"切換尋找/取代","replaceAll":"所有出現位置","replaceDialogText":"取代了 ${0} 項。","replaceButton":"取代","findButton":"尋找","findLabel":"尋找目標：","matchCase":"大小寫相符","replaceLabel":"取代為：","eofDialogTextFind":"查找","eofDialogText":"已完成最后一次${0}","findTooltip":"输入查找文本","replaceTooltip":"输入替换文本","replaceAllButton":"全部替换","eofDialogTextReplace":"替换","backwardsTooltip":"向后查找文本","replaceAllButtonTooltip":"替换所有出现位置","replaceButtonTooltip":"替换该文本","matchCaseTooltip":"匹配大小写","findButtonTooltip":"查找该文本"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"小於或等於","prod":"n 元積\n積符號","zwj":"零寬連字符","mdash":"長破折號","frasl":"分數斜線","upsih":"帶鉤的希臘文 upsilon 符號","prop":"成比例","middot":"中點號\n中心點\n希臘中點","hellip":"水平省略號\n三個點開頭","eta":"希臘文小寫字母 η","iacute":"帶揚音符的拉丁文小寫字母 i","yen":"日圓符號\n人民幣符號","rlm":"從右到左標記","macr":"長音符\n間隔長音符\n上線\nAPL 上線","ldquo":"左雙引號","Icirc":"帶抑揚音符的拉丁文大寫字母 I","OElig":"拉丁文大寫連字 OE","hArr":"左右雙箭頭","eth":"拉丁文小寫字母 eth","divide":"除號","chi":"希臘文小寫字母 χ","eacute":"帶揚音符的拉丁文小寫字母 e","icirc":"帶抑揚音符的拉丁文小寫字母 i","iexcl":"倒感歎號","ETH":"拉丁文大寫字母 ETH","acute":"揚音符\n揚音符","crarr":"有向左轉的角的向下箭頭\n換行符號","mu":"希臘文小寫字母 μ","AElig":"拉丁文大寫字母 AE\n拉丁文大寫連字 AE","aacute":"帶揚音符的拉丁文小寫字母 a","lambda":"希臘文小寫字母 λ","THORN":"拉丁文大寫字母 THORN","asymp":"幾乎等於\n近似於","fnof":"帶短畫的拉丁文小寫 f\n函數\n弗洛林幣","lang":"左角括弧","cup":"併集\n杯狀","ne":"不等於","Sigma":"希臘文大寫字母 Σ","oelig":"拉丁文小寫連字 oe","cent":"英分","ni":"包含","dagger":"單劍註釋符號","permil":"千分號","Omicron":"希臘文大寫字母 Ο","sigma":"希臘文小寫字母 σ","euro":"歐元符號","Yacute":"帶揚音符的拉丁文大寫字母 Y","thorn":"拉丁文小寫字母 thorn","lceil":"左上限\nAPL 頂","Ograve":"帶抑音符的拉丁文大寫字母 O","rarr":"向右箭頭","nu":"希臘文小寫字母 ν","emsp":"長破折號間距","Theta":"希臘文大寫字母 Θ","lArr":"向左雙箭頭","tau":"希臘文小寫字母 τ","aelig":"拉丁文小寫字母 ae\n拉丁文小寫連字 ae","ccedil":"帶軟音符號的拉丁文小寫字母 c","Ntilde":"帶顎化符的拉丁文大寫字母 N","cong":"約等於","Uacute":"帶揚音符的拉丁文大寫字母 U","theta":"希臘文小寫字母 θ","darr":"向下箭頭","Uuml":"帶分音符的拉丁文大寫字母 U","bdquo":"9 形下標雙引號","Aring":"帶上圓圈的拉丁文大寫字母 A\n帶上圓圈的拉丁文大寫字母 A","sigmaf":"希臘文小寫字母 final sigma","pound":"英鎊","uArr":"向上雙箭頭","sub":"子集","aring":"帶上圓圈的拉丁文 a\n帶上圓圈的拉丁文 a","sdot":"點運算子","thinsp":"薄間距","or":"邏輯 OR\nV 形符號","Eacute":"帶揚音符的拉丁文大寫字母 E","shy":"軟連字號\n自由選定的連字號","curren":"貨幣符號","loz":"菱形","not":"非符號","tilde":"小波狀符號","sum":"n 元和","spades":"黑色黑桃","Psi":"希臘文大寫字母 Ψ","ndash":"短破折號","sup":"超集","atilde":"帶顎化符的拉丁文小寫字母 a","clubs":"黑色梅花\n三葉草","uuml":"帶分音符的拉丁文小寫字母 u","Aacute":"帶揚音符的拉丁文大寫字母 A","rsaquo":"右尖單角引號","otimes":"帶圓圈的乘號\n向量積","lfloor":"左下限\nAPL 底","zwnj":"零寬非連字符","sim":"波狀符號運算子\n偏離\n近似","Iota":"希臘文大寫字母 Ι","Iacute":"帶揚音符的拉丁文大寫字母 I","pi":"希臘文小寫字母 π","ordf":"陰性序數指示符","frac12":"普通分數二分之一\n分數二分之一","frac14":"普通分數四分之一\n分數四分之一","alefsym":"alef 符號\n第一個超窮基數","bull":"項目符號\n黑色小圓圈","deg":"度號","ordm":"陽性序數指示符","epsilon":"希臘文小寫字母 ε","equiv":"完全相等","Dagger":"雙劍註釋符號","brvbar":"斷開的豎線\n斷開的垂直線","harr":"左右箭頭","ugrave":"帶抑音符的拉丁文小寫字母 u","oslash":"帶斜線的拉丁文小寫字母 O\n帶斜線的小寫字母 o","Yuml":"帶分音符的拉丁文大寫字母 Y","hearts":"黑色紅桃\n心形","Xi":"希臘文大寫字母 Ξ","Prime":"雙撇號\n秒\n英吋","iota":"希臘文小寫字母 ι","Ccedil":"帶軟音符號的拉丁文大寫字母 C","Lambda":"希臘文大寫字母 Λ","raquo":"右尖雙角引號\n右尖雙引號","Phi":"希臘文大寫字母 Φ","prime":"撇號\n分鐘\n英呎","nsub":"非子集","copy":"著作權符號","yuml":"帶分音符的拉丁文小寫字母 y","Rho":"希臘文大寫字母 Ρ","Ucirc":"帶抑揚音符的拉丁文大寫字母 U","Kappa":"希臘文大寫字母 Κ","ucirc":"帶抑揚音符的拉丁文小寫字母 u","sbquo":"9 形下標單引號","igrave":"帶抑音符的拉丁文小寫字母 i","reg":"已註冊符號\n註冊商標符號","infin":"無限","iquest":"顛倒的問號\n倒轉的問號","circ":"修飾元字母抑揚音符","kappa":"希臘文小寫字母 κ","lrm":"從左到右標記","Atilde":"帶顎化符的拉丁文大寫字母 A","larr":"向左箭頭","frac34":"普通分數四分之三\n分數四分之三","oacute":"帶揚音符的拉丁文小寫字母 o","rsquo":"右單引號","egrave":"帶抑音符的拉丁文小寫字母 e","oline":"上線\n間隔上線","Mu":"希臘文大寫字母 Μ","exist":"存在","cap":"交集\n蓋狀","and":"邏輯 AND\n楔形符號","Ouml":"帶分音符的拉丁文大寫字母 O","agrave":"帶抑音符的拉丁文小寫字母 a\n帶抑音符的拉丁文小寫字母 a","uarr":"向上箭頭","ang":"角符號","Zeta":"希臘文大寫字母 Ζ","scaron":"帶倒折音的拉丁文小寫字母 s","Gamma":"希臘文大寫字母 Γ","isin":"屬於","Auml":"帶分音符的拉丁文大寫字母 A","empty":"空集\n空集\n直徑","gamma":"希臘文小寫字母 γ","para":"¶ 符號\n段落符號","ge":"大於或等於","psi":"希臘文小寫字母 ψ","Alpha":"希臘文大寫字母 Α","Nu":"希臘文大寫字母 Ν","ouml":"帶分音符的拉丁文小寫字母 o","zeta":"希臘文小寫字母 ζ","alpha":"希臘文小寫字母 α","part":"偏微分","auml":"帶分音符的拉丁文小寫字母 a","Ugrave":"帶抑音符的拉丁文大寫字母 U","Oslash":"帶斜線的拉丁文大寫字母 O\n帶斜線的大寫字母 O","Epsilon":"希臘文大寫字母 Ε","int":"整數的","Omega":"希臘文大寫字母 Ω","perp":"向上的釘子\n垂直於\n垂線","uml":"分音符號\n元音分音","upsilon":"希臘文小寫字母 υ","lowast":"星號運算子","omega":"希臘文小寫字母 ω","otilde":"帶顎化符的拉丁文小寫字母 o","Egrave":"帶抑音符的拉丁文大寫字母 E","phi":"希臘文小寫字母 φ","ensp":"短破折號間距","Euml":"帶分音符的拉丁文大寫字母 E","cedil":"軟音符號\n間距軟音符號","laquo":"左尖雙角引號\n左尖雙引號","forall":"全部","thetasym":"希臘文小寫字母 theta 符號","Agrave":"帶抑音符的拉丁文大寫字母 A\n帶抑音符的拉丁文大寫字母 A","szlig":"拉丁文小寫字母 sharp s\ness-zed","Pi":"希臘文大寫字母 Π","rho":"希臘文小寫字母 ρ","trade":"商標符號","Igrave":"帶抑音符的拉丁文大寫字母 I","minus":"減號","Beta":"希臘文大寫字母 Β","Ocirc":"帶抑揚音符的拉丁文大寫字母 O","rdquo":"右雙引號","Eta":"希臘文大寫字母 Η","rfloor":"右下限","Oacute":"帶揚音符的拉丁文大寫字母 O","euml":"帶分音符的拉丁文小寫字母 e","oplus":"帶圓圈的加號\n直和","ocirc":"帶抑揚音符的拉丁文小寫字母 o","radic":"平方根\n根號","Chi":"希臘文大寫字母 Χ","notin":"不屬於","sect":"小節符號","Acirc":"帶抑揚音符的拉丁文大寫字母 A","lsquo":"左單引號","beta":"希臘文小寫字母 β","piv":"希臘文 pi 符號","sup1":"上標 1\n上標數字 1","Scaron":"帶倒折音的拉丁文大寫字母 S","sup2":"上標 2\n上標數字 2\n平方","acirc":"帶抑揚音符的拉丁文小寫字母 a","sube":"子集或等於","sup3":"上標 3\n上標數字 3\n立方","real":"黑色大寫字母 R\n實數部分符號","Iuml":"帶分音符的拉丁文大寫字母 I","rang":"右角括弧","lsaquo":"左尖單角引號","nabla":"倒三角算子\n反向差分","omicron":"希臘文小寫字母 ο","there4":"因此","plusmn":"加減符號\n正負號","rceil":"右上限","micro":"µ 符號","rArr":"向右雙箭頭","Delta":"希臘文大寫字母 Δ","iuml":"帶分音符的拉丁文小寫字母 i","Tau":"希臘文大寫字母 Τ","times":"乘號","yacute":"帶揚音符的拉丁文小寫字母 y","ograve":"帶抑音符的拉丁文小寫字母 o","delta":"希臘文小寫字母 δ","Ecirc":"帶抑揚音符的拉丁文大寫字母 E","dArr":"向下雙箭頭","ntilde":"帶顎化符的拉丁文小寫字母 n","diams":"黑色方塊","uacute":"帶揚音符的拉丁文小寫字母 u","Otilde":"帶顎化符的拉丁文大寫字母O","ecirc":"帶抑揚音符的拉丁文小寫字母 e","Upsilon":"希臘文大寫字母 Υ","image":"黑色大寫字母 I\n虛數部分","supe":"超集或等於","xi":"希臘文小寫字母 ξ","weierp":"Script 大寫 P\n冪集\nWeierstrass p"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"儲存"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"插入符號"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"分頁"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"預覽"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh-tw/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"大笑","emoticonCool":"酷","emoticonTongue":"吐舌頭","emoticonCrying":"哭泣","emoticonOops":"哎喲","emoticonFrown":"皺眉","emoticonAngry":"生氣","emoticonShy":"羞怯","emoticonNo":"不對","emoticonAngel":"守護神","smiley":"插入表情符號","emoticonIdea":"思考","emoticonEyebrow":"揚眉","emoticonSmile":"微笑","emoticonWink":"眨眼","emoticonYes":"對","emoticonGrin":"露齒而笑","emoticonGoofy":"傻了","emoticonHalf":"左右為難"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/nl/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/nl/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/nl/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Instellen","insertTableTitle":"Tabel invoegen","insertTableRowAfterLabel":"Rij onder toevoegen","center":"gecentreerd","deleteTableColumnLabel":"Kolom wissen","right":"rechts","insertTableColumnBeforeLabel":"Kolom voor toevoegen","tableWidth":"Tabelbreedte:","buttonInsert":"invoegen","default":"standaard","align":"Uitlijnen","insertTableRowBeforeLabel":"Rij boven toevoegen","cellSpacing":"Celspatiëring:","pixels":"pixels","selectTableLabel":"Tabel selecteren","rows":"Rijen","modifyTableTitle":"Tabel wijzigen","cellPadding":"Celopvulling:","deleteTableRowLabel":"Rij wissen","backgroundColor":"Achtergrondkleur:","insertTableColumnAfterLabel":"Kolom achter toevoegen","left":"links","borderThickness":"Randdikte","columns":"Kolommen","percent":"percent","borderColor":"Randkleur"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/InsertAnchor.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/InsertAnchor.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/InsertAnchor.js	(revision 9)
@@ -0,0 +1 @@
+({"set":"Set","insertAnchor":"Insert Anchor","title":"Anchor Properties","text":"Description:","cancel":"Cancel","anchor":"Name:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/th/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/th/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/th/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"ตั้งค่า","insertTableTitle":"แทรกตาราง","insertTableRowAfterLabel":"เพิ่มแถวหลัง","center":"กึ่งกลาง","deleteTableColumnLabel":"ลบคอลัมน์","right":"ขวา","insertTableColumnBeforeLabel":"เพิ่มคอลัมน์ก่อน","tableWidth":"ความกว้างของตาราง:","buttonInsert":"แทรก","default":"ดีฟอลต์","align":"จัดตำแหน่ง:","insertTableRowBeforeLabel":"เพิ่มแถวก่อน","cellSpacing":"ระยะห่างเซลล์:","pixels":"พิกเซล","selectTableLabel":"เลือกตาราง","rows":"แถว:","modifyTableTitle":"ปรับเปลี่ยนตาราง","cellPadding":"ส่วนเสริมเซลล์:","deleteTableRowLabel":"ลบแถว","backgroundColor":"สีพื้นหลัง:","insertTableColumnAfterLabel":"เพิ่มคอลัมน์หลัง","left":"ซ้าย","borderThickness":"ความหนาเส้นขอบ","columns":"คอลัมน์:","percent":"เปอร์เซ็นต์","borderColor":"สีเส้นขอบ:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Wstaw symbol"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Podział strony"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Podgląd"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"śmiech","emoticonCool":"na luzie","emoticonTongue":"język","emoticonCrying":"płacz","emoticonOops":"oj","emoticonFrown":"niezadowolenie","emoticonAngry":"złość","emoticonShy":"nieśmiałość","emoticonNo":"Nie","emoticonAngel":"anioł","smiley":"Wstaw emotikon","emoticonIdea":"pomysł","emoticonEyebrow":"brew","emoticonSmile":"uśmiech","emoticonWink":"mrugnięcie","emoticonYes":"Tak","emoticonGrin":"szeroki uśmiech","emoticonGoofy":"niezdarność","emoticonHalf":"niesmak"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Pokaż elementy bloków HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Zaznacz treść","deleteElement":"Usuń element","moveEnd":"Przenieś kursor na koniec","deleteContents":"Usuń treść","nodeActions":"${nodeName} - działania","selectElement":"Zaznacz element","moveStart":"Przenieś kursor na początek"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Ustaw","insertTableTitle":"Wstawianie tabeli","insertTableRowAfterLabel":"Dodaj wiersz po","center":"środek","deleteTableColumnLabel":"Usuń kolumnę","right":"prawa strona","insertTableColumnBeforeLabel":"Dodaj kolumnę przed","tableWidth":"Szerokość tabeli:","buttonInsert":"Wstaw","default":"domyślna","align":"Wyrównanie:","insertTableRowBeforeLabel":"Dodaj wiersz przed","cellSpacing":"Odstępy między komórkami:","pixels":"piksle","selectTableLabel":"Wybierz tabelę","rows":"Wiersze:","modifyTableTitle":"Modyfikowanie tabeli","cellPadding":"Dopełnianie komórek:","deleteTableRowLabel":"Usuń wiersz","backgroundColor":"Kolor tła:","insertTableColumnAfterLabel":"Dodaj kolumnę po","left":"lewa strona","borderThickness":"Grubość ramki","columns":"Kolumny:","percent":"procent","borderColor":"Kolor ramki:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Do tyłu","findReplace":"Przełącz znajdowanie/zastępowanie","replaceAll":"Wszystkie wystąpienia","replaceDialogText":"Zastąpione wystąpienia: ${0}.","replaceButton":"Zastąp","findButton":"Znajdź","findLabel":"Znajdź:","matchCase":"Uwzględniaj wielkość liter","replaceLabel":"Zastąp przez:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"mniejsze niż lub równe","prod":"iloczyn n elementów\nznak iloczynu","zwj":"łącznik o zerowej szerokości","mdash":"pauza","frasl":"kreska ułamkowa","upsih":"grecka litera ipsylon z symbolem haczyka","prop":"proporcjonalnie do","middot":"kropka środkowa\ngruziński przecinek\ngrecka kropka środkowa","hellip":"wielokropek\ntrzy kropki","eta":"grecka mała litera eta","iacute":"łacińska mała litera i z akcentem ostrym","yen":"znak jena\nznak yuana","rlm":"znacznik zapisu od prawej do lewej","macr":"makron\nmakron rozdzielający\nnadkreślenie\nkreska górna APL","ldquo":"lewy podwójny cudzysłów","Icirc":"łacińska wielka litera I z daszkiem","OElig":"łacińska ligatura wielkich liter OE","hArr":"podwójna strzałka w lewo i w prawo","eth":"łacińska mała litera eth","divide":"znak dzielenia","chi":"grecka mała litera chi","eacute":"łacińska mała litera e z akcentem ostrym","icirc":"łacińska mała litera i z daszkiem","iexcl":"odwrócony wykrzyknik","ETH":"łacińska wielka litera ETH","acute":"akcent ostry\nodstęp ostry","crarr":"strzałka w dół z rogiem w lewo\npowrót karetki","mu":"grecka mała litera my","AElig":"łacińska wielka litera AE\nłacińska ligatura wielkich liter AE","aacute":"łacińska mała litera a z akcentem ostrym","lambda":"grecka mała litera lambda","THORN":"łacińska wielka litera THORN","asymp":"prawie równa się\nasymptotyczne do","fnof":"łacińska mała litera f z haczykiem\nfunkcja\nfloren","lang":"lewy nawias trójkątny","cup":"suma zbiorów\nfiliżanka","ne":"nie równa się","Sigma":"grecka wielka litera sigma","oelig":"łacińska ligatura małych liter oe","cent":"znak centa","ni":"zawiera","dagger":"krzyżyk","permil":"promile","Omicron":"grecka wielka litera omikron","sigma":"grecka mała litera sigma","euro":"znak euro","Yacute":"łacińska wielka litera Y z akcentem ostrym","thorn":"łacińska mała litera thorn","lceil":"lewy sufit\nhaczyk górny APL","Ograve":"łacińska wielka litera O z akcentem ciężkim","rarr":"strzałka w prawo","nu":"grecka mała litera ni","emsp":"spacja długa","Theta":"grecka wielka litera theta","lArr":"podwójna strzałka w lewo","tau":"grecka mała litera tau","aelig":"łacińska mała litera ae\nłacińska ligatura małych liter ae","ccedil":"łacińska mała litera c z cedillą","Ntilde":"łacińska wielka litera N z tyldą","cong":"równa się w przybliżeniu","Uacute":"łacińska wielka litera U z akcentem ostrym","theta":"grecka mała litera theta","darr":"strzałka w dół","Uuml":"łacińska wielka litera U z diarezą","bdquo":"podwójny cudzysłów dolny","Aring":"łacińska wielka litera A z pierścieniem powyżej\nłacińska wielka litera A z pierścieniem","sigmaf":"grecka mała litera końcowa sigma","pound":"znak funta","uArr":"podwójna strzałka w górę","sub":"jest podzbiorem","aring":"łacińska mała litera a z pierścieniem powyżej\nłacińska mała litera a z pierścieniem","sdot":"operator kropka","thinsp":"spacja krótka","or":"suma logiczna\nlitera v","Eacute":"łacińska wielka litera E z akcentem ostrym","shy":"łącznik miękki\nłącznik opcjonalny","curren":"znak waluty","loz":"romb","not":"znak negacji","tilde":"mała tylda","sum":"suma n elementów","spades":"symbol pik","Psi":"grecka wielka litera psi","ndash":"półpauza","sup":"jest nadzbiorem","atilde":"łacińska mała litera a z tyldą","clubs":"symbol trefl\nkoniczyna","uuml":"łacińska mała litera u z diarezą","Aacute":"łacińska wielka litera A z akcentem ostrym","rsaquo":"pojedynczy prawy cudzysłów trójkątny","otimes":"znak mnożenia w okręgu\niloczyn wektorów","lfloor":"lewa podłoga\nhaczyk dolny APL","zwnj":"symbol rozdzielający o zerowej szerokości","sim":"operator tylda\nzmienia się w granicach\nokoło","Iota":"grecka wielka litera jota","Iacute":"łacińska wielka litera I z akcentem ostrym","pi":"grecka mała litera phi","ordf":"znak liczby rodzaju żeńskiego","frac12":"znak ułamka jedna druga\nułamek jedna druga","frac14":"znak ułamka jedna czwarta\nułamek jedna czwarta","alefsym":"znak alef\npoczątkowa liczba porządkowa","bull":"znacznik podpunktu\nmałe czarne kółko","deg":"znak stopni","ordm":"znak liczby rodzaju męskiego","epsilon":"grecka mała litera epsilon","equiv":"takie same jak","Dagger":"podwójny krzyżyk","brvbar":"przerwana kreska\nprzerwana pionowa kreska","harr":"strzałka w lewo i w prawo","ugrave":"łacińska mała litera u z akcentem ciężkim","oslash":"łacińska mała litera o z przekreśleniem\nłacińska mała litera o z ukośnikiem","Yuml":"łacińska wielka litera Y z diarezą","hearts":"symbol kier\nserce","Xi":"grecka wielka litera ksi","Prime":"bis\nsekundy\ncale","iota":"grecka mała litera jota","Ccedil":"łacińska wielka litera C z cedillą","Lambda":"grecka wielka litera lambda","raquo":"prawy cudzysłów trójkątny\nprawy guillemet","Phi":"grecka wielka litera phi","prime":"prim\nminuty\nstopy","nsub":"nie jest podzbiorem","copy":"znak praw autorskich","yuml":"łacińska mała litera y z diarezą","Rho":"grecka wielka litera rho","Ucirc":"łacińska wielka litera U z daszkiem","Kappa":"grecka wielka litera kappa","ucirc":"łacińska mała litera u z daszkiem","sbquo":"pojedynczy cudzysłów dolny","igrave":"łacińska mała litera i z akcentem ciężkim","reg":"symbol zastrzeżenia\nsymbol zastrzeżonego znaku towarowego","infin":"nieskończoność","iquest":"odwrócony znak zapytania\nodwrotny znak zapytania","circ":"modyfikator litery - akcent w formie daszka","kappa":"grecka mała litera kappa","lrm":"znacznik zapisu od lewej do prawej","Atilde":"łacińska wielka litera A z tyldą","larr":"strzałka w lewo","frac34":"znak ułamka trzy czwarte\nułamek trzy czwarte","oacute":"łacińska mała litera o z akcentem ostrym","rsquo":"prawy pojedynczy cudzysłów","egrave":"łacińska mała litera e z akcentem ciężkim","oline":"nadkreślenie\nnadkreślenie tworzące odstęp","Mu":"grecka wielka litera my","exist":"istnieje","cap":"część wspólna zbiorów\nczepek","and":"iloczyn logiczny\nklin","Ouml":"łacińska wielka litera O z diarezą","agrave":"łacińska mała litera a z symbolem gravis\nłacińska mała litera a z akcentem ciężkim","uarr":"strzałka w górę","ang":"kąt","Zeta":"grecka wielka litera dzeta","scaron":"łacińska mała litera s z daszkiem odwróconym","Gamma":"grecka wielka litera gamma","isin":"należy do","Auml":"łacińska wielka litera A z diarezą","empty":"zbiór pusty\nzbiór miary zero\nśrednica","gamma":"grecka mała litera gamma","para":"znak pilcrow\nznak akapitu","ge":"większe niż lub równe","psi":"grecka mała litera psi","Alpha":"grecka wielka litera alfa","Nu":"grecka wielka litera ni","ouml":"łacińska mała litera o z diarezą","zeta":"grecka mała litera dzeta","alpha":"grecka wielka litera alfa","part":"pochodna cząstkowa","auml":"łacińska mała litera a z diarezą","Ugrave":"łacińska wielka litera U z akcentem ciężkim","Oslash":"łacińska wielka litera O z przekreśleniem\nłacińska wielka litera O z ukośnikiem","Epsilon":"grecka wielka litera epsilon","int":"całka","Omega":"grecka wielka litera omega","perp":"odwrócona litera T\nprostopadłe do\nprostopadłe","uml":"diereza\ndiereza rozdzielająca","upsilon":"grecka mała litera ipsylon","lowast":"operator gwiazdka","omega":"grecka mała litera omega","otilde":"łacińska mała litera o z tyldą","Egrave":"łacińska wielka litera E z akcentem ciężkim","phi":"grecka mała litera phi","ensp":"spacja średnia","Euml":"łacińska wielka litera E z diarezą","cedil":"cedilla\nodstęp cedilla","laquo":"lewy cudzysłów trójkątny\nlewy guillemet","forall":"dla każdego","thetasym":"grecka mała litera theta (symbol)","Agrave":"łacińska wielka litera A z symbolem gravis\nłacińska wielka litera A z akcentem ciężkim","szlig":"łacińska mała litera ostre s\ness-zed","Pi":"grecka wielka litera pi","rho":"grecka mała litera rho","trade":"symbol znaku zastrzeżonego","Igrave":"łacińska wielka litera I z akcentem ciężkim","minus":"znak minus","Beta":"grecka wielka litera beta","Ocirc":"łacińska wielka litera O z daszkiem","rdquo":"prawy podwójny cudzysłów","Eta":"grecka wielka litera eta","rfloor":"prawa podłoga","Oacute":"łacińska wielka litera O z akcentem ostrym","euml":"łacińska mała litera e z diarezą","oplus":"znak plus w okręgu\nsuma bezpośrednia","ocirc":"łacińska mała litera o z daszkiem","radic":"pierwiastek kwadratowy\nznak pierwiastka","Chi":"grecka wielka litera chi","notin":"nie należy do","sect":"znak sekcji","Acirc":"łacińska wielka litera A z daszkiem","lsquo":"lewy pojedynczy cudzysłów","beta":"grecka mała litera beta","piv":"grecki symbol pi","sup1":"indeks górny jeden\ncyfra jeden w indeksie górnym","Scaron":"łacińska wielka litera S z daszkiem odwróconym","sup2":"indeks górny dwa\ncyfra dwa w indeksie górnym\nkwadrat","acirc":"łacińska mała litera a z daszkiem","sube":"jest podzbiorem lub równa się","sup3":"indeks górny trzy\ncyfra trzy w indeksie górnym\nsześcian","real":"gotycka wielka litera R\nsymbol części rzeczywistej liczby zespolonej","Iuml":"łacińska wielka litera I z diarezą","rang":"prawy nawias trójkątny","lsaquo":"pojedynczy lewy cudzysłów trójkątny","nabla":"nabla\nkoneksja","omicron":"grecka mała litera omikron","there4":"dlatego","plusmn":"znak plus-minus\nznak zakresu wartości przybliżonej","rceil":"prawy sufit","micro":"znak mikro","rArr":"podwójna strzałka w prawo","Delta":"grecka wielka litera delta","iuml":"łacińska mała litera i z diarezą","Tau":"grecka wielka litera tau","times":"znak mnożenia","yacute":"łacińska mała litera y z akcentem ostrym","ograve":"łacińska mała litera o z akcentem ciężkim","delta":"grecka mała litera delta","Ecirc":"łacińska wielka litera E z daszkiem","dArr":"podwójna strzałka w dół","ntilde":"łacińska mała litera n z tyldą","diams":"symbol karo","uacute":"łacińska mała litera u z akcentem ostrym","Otilde":"łacińska wielka litera O z tyldą","ecirc":"łacińska mała litera e z daszkiem","Upsilon":"grecka wielka litera ipsylon","image":"gotycka wielka litera I\nczęść urojona liczby zespolonej","supe":"jest nadzbiorem lub równa się","xi":"grecka mała litera ksi","weierp":"odręcznie pisana wielka litera P\nzbiór potęgowy\nP Weierstrassa"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pl/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pl/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pl/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Zapisz"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"nevetés","emoticonCool":"laza","emoticonTongue":"nyelv","emoticonCrying":"sírás","emoticonOops":"hoppá","emoticonFrown":"rosszallás","emoticonAngry":"mérges","emoticonShy":"szégyenlős","emoticonNo":"nem","emoticonAngel":"angyal","smiley":"Hangulatjel beszúrása","emoticonIdea":"ötlet","emoticonEyebrow":"szemöldök","emoticonSmile":"mosoly","emoticonWink":"kacsintás","emoticonYes":"igen","emoticonGrin":"vigyor","emoticonGoofy":"ostoba","emoticonHalf":"fél"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"HTML blokk elemek megjelenítése"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Tartalom kiválasztása","deleteElement":"Elem törlése","moveEnd":"Kurzor mozgatása a végére","deleteContents":"Tartalom törlése","nodeActions":"${nodeName} műveletek","selectElement":"Elem kiválasztása","moveStart":"Kurzor mozgatása az elejére"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Beállítás","insertTableTitle":"Táblázat beszúrása","insertTableRowAfterLabel":"Sor hozzáadása utána","center":"középre","deleteTableColumnLabel":"Oszlop törlése","right":"jobbra","insertTableColumnBeforeLabel":"Oszlop hozzáadása előtte","tableWidth":"Táblázat szélessége: ","buttonInsert":"Beszúrás","default":"alapértelmezett","align":"Igazítás: ","insertTableRowBeforeLabel":"Sor hozzáadása előtte","cellSpacing":"Cella térköz: ","pixels":"képpont","selectTableLabel":"Táblázat kijelölése","rows":"Sorok: ","modifyTableTitle":"Táblázat módosítása","cellPadding":"Cellakitöltés: ","deleteTableRowLabel":"Sor törlése ","backgroundColor":"Háttérszín: ","insertTableColumnAfterLabel":"Oszlop hozzáadása utána","left":"balra","borderThickness":"Szegély vastagsága ","columns":"Oszlopok: ","percent":"százalék","borderColor":"Szegélyszín: "})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Visszafelé","findReplace":"Keresés/Csere váltása","replaceAll":"Minden előfordulás","replaceDialogText":"${0} előfordulás cseréje megtörtént. ","replaceButton":"Csere","findButton":"Keresés","findLabel":"Keresés: ","matchCase":"Kis- és nagybetűk egyeztetése","replaceLabel":"Csere: ","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"kisebb vagy egyenlő","prod":"n-tagú Descartes szorzat\nszorzatjel","zwj":"nem törhető üres jel","mdash":"m kötőjel","frasl":"tört osztásjel","upsih":"Görög üpszilon horog szimbólummal ","prop":"arányos ","middot":"középső pont\nGregorián vessző\nGörög középső pont","hellip":"vízszintes hármaspont\nbevezető hármas pont","eta":"Görög kis éta betű","iacute":"Latin kis i betű éles ékezettel","yen":"jen jel\nyuan jel","rlm":"jobbról balra jel","macr":"föléhúzás jel\nAPL felülhúzás","ldquo":"bal dupla idézőjel","Icirc":"Latin kalapos nagy I betű ","OElig":"Latin nagy OE ikerbetű ","hArr":"balra-jobbra mutató dupla nyíl","eth":"Latin kis eth betű ","divide":"osztásjel ","chi":"Görög kis khí betű ","eacute":"Latin kis e betű éles ékezettel","icirc":"Latin kalapos kis i betű ","iexcl":"fordított felkiáltójel","ETH":"Latin nagy ETH betű ","acute":"hegyes ékezet\nkalapos ékezet","crarr":"lefelé mutató nyíl bal oldalon sarokkal\nsoremelés","mu":"Görög kis mű betű ","AElig":"Latin nagy AE\nLatin nagy AE ikerbetű  ","aacute":"Latin kis a betű éles ékezettel","lambda":"Görög kis lambda betű ","THORN":"Latin nagy THORN betű  ","asymp":"majdnem egyenlő\naszimptotikus","fnof":"Latin kis f horoggal\nfüggvény\nforint","lang":"balra mutató hegyes zárójel","cup":"unió","ne":"nem egyenlő","Sigma":"Görög nagy szigma betű ","oelig":"Latin kis oe ikerbetű ","cent":"cent jel","ni":"tagként tartalmazza ","dagger":"kereszt","permil":"ezrelékjel","Omicron":"Görög nagy omikron betű ","sigma":"Görög kis szigma betű  ","euro":"euro jel","Yacute":"Latin nagy Y betű éles ékezettel","thorn":"Latin kis thorn betű ","lceil":"bal szögletes zárójel felső sarok\nAPL felső keret","Ograve":"Latin nagy O betű tompa ékezettel","rarr":"jobbra mutató nyíl","nu":"Görög kis nű betű ","emsp":"m szóköz","Theta":"Görög nagy théta betű ","lArr":"balra mutató dupla nyíl","tau":"Görög kis taú betű ","aelig":"Latin kis ae betű\nLatin kis ae ikerbetű  ","ccedil":"Latin kis c betű cedillel ","Ntilde":"Latin hullámvonalas nagy N betű","cong":"megközelítőleg egyenlő","Uacute":"Latin nagy U betű éles ékezettel","theta":"Görög kis théta betű ","darr":"lefelé mutató nyíl","Uuml":"Latin kétpontos nagy U betű","bdquo":"alsó 9-es dupla idézőjel","Aring":"Latin nagy A betű felül körrel\nLatin nagy A betű felső körrel","sigmaf":"Görög kis szigma betű utolsó helyen","pound":"font jel","uArr":"felfelé mutató dupla nyíl","sub":"részhalmaza","aring":"Latin kis a betű felül körrel\nLatin kis a betű felső körrel","sdot":"pont operátor","thinsp":"szűk szóköz","or":"logikai vagy\nv-alak","Eacute":"Latin nagy E betű éles ékezettel","shy":"lágy kötőjel\nfeltételes kötőjel","curren":"pénznem jel","loz":"rombusz","not":"nem jel","tilde":"kis hullám","sum":"n-tagú összegzés","spades":"fekete pikk kártyajel ","Psi":"Görög nagy pszí betű ","ndash":"n kötőjel","sup":"bővített halmaza ","atilde":"Latin hullámvonalas kis a betű","clubs":"fekete treff kártyjel\nlóhere","uuml":"Latin kétpontos kis u betű","Aacute":"Latin nagy A betű éles ékezettel","rsaquo":"szimpla jobbra mutató hegyes idézőjel","otimes":"bekarikázott x\nvektor szorzat","lfloor":"bal szögletes zárójel alsó sarok\nAPL alsó keret","zwnj":"törhető üres jel","sim":"hullám operátor\nváltakozik\nhasonló","Iota":"Görög nagy iota betű ","Iacute":"Latin nagy I betű éles ékezettel","pi":"Görög kis pí betű ","ordf":"nőnemű sorszámnév jelzése a felső indexben","frac12":"közönséges fél tört\nfél","frac14":"közönséges egynegyed tört\nnegyed","alefsym":"alef szimbólum\nelső transzfinit pozitív egész szám","bull":"pont felsorolásjel\nkis fekete kör","deg":"fok jel","ordm":"hímnemű sorszámnév jelzése a felső indexben","epsilon":"Görög kis epszilon betű","equiv":"azonos","Dagger":"dupla kereszt ","brvbar":"megszakított vonal\nmegszakított függőleges vonal","harr":"balra-jobbra mutató nyíl","ugrave":"Latin kis u betű tompa ékezettel","oslash":"Latin áthúzott kis o betű\nLatin kis o betű osztásjellel","Yuml":"Latin kétpontos nagy Y betű ","hearts":"fekete kör kártyajel\nszívalak","Xi":"Görög nagy kszí betű ","Prime":"dupla egyenes idézőjel\nmásodperc\nhüvelyk","iota":"Görög kis ióta betű ","Ccedil":"Latin nagy C betű cedillel ","Lambda":"Görög nagy lambda betű ","raquo":"jobbra mutató dupla hegyes idézőjel\njobbra mutató belső idézőjel","Phi":"Görög nagy fí betű ","prime":"szimpla egyenes idézőjel\nperc\nláb","nsub":"nem részhalmaza","copy":"copyright jel","yuml":"Latin kétpontos kis y ","Rho":"Görög nagy ró betű ","Ucirc":"Latin kalapos nagy U betű ","Kappa":"Görög nagy kappa betű ","ucirc":"Latin kalapos kis u betű ","sbquo":"alsó 9-es szimpla idézőjel","igrave":"Latin kis i betű tompa ékezettel","reg":"védjegy jel\nbejegyzett védjegy jel","infin":"végtelen","iquest":"fordított kérdőjel\nmegfordított kérdőjel","circ":"betűt módosító kalap ékezet","kappa":"Görög kis kappa betű ","lrm":"balról jobbra jel","Atilde":"Latin hullámvonalas nagy A betű","larr":"balra mutató nyíl","frac34":"közönséges háromnegyed tört\nháromnegyed","oacute":"Latin kis o betű éles ékezettel","rsquo":"jobb szimpla idézőjel","egrave":"Latin kis e betű tompa ékezettel","oline":"felső vonal\nfelülvonás","Mu":"Görög nagy mű betű ","exist":"létezik","cap":"metszet","and":"logikai és\nék","Ouml":"Latin kétpontos nagy O betű","agrave":"Latin kis a betű tompa ékezettel\nTompa ékezetes latin kis a betű","uarr":"felfelé mutató nyíl","ang":"szög","Zeta":"Görög nagy dzéta betű ","scaron":"Latin kis s betű csónakkal","Gamma":"Görög nagy gamma betű","isin":"eleme ","Auml":"Latin kétpontos nagy A betű","empty":"üres halmaz\nnull halmaz\nátmérő","gamma":"Görög kis gamma betű","para":"sorvége jel\nbekezdés jel","ge":"nagyobb vagy egyenlő","psi":"Görög kis pszí betű ","Alpha":"Görög nagy alfa betű","Nu":"Görög nagy nű betű ","ouml":"Latin kétpontos kis o betű","zeta":"Görög kis dzéta betű ","alpha":"Görög kis alfa betű","part":"részleges differenciál","auml":"Latin kétpontos kis a betű","Ugrave":"Latin nagy U betű tompa ékezettel","Oslash":"Latin áthúzott nagy O betű\nLatin nagy O betű osztásjellel","Epsilon":"Görög nagy epszilon betű","int":"integrál","Omega":"Görög nagy ómega betű ","perp":"merőleges\nortogonális","uml":"dupla ékezet\numlaut","upsilon":"Görög kis üpszilon betű ","lowast":"csillag operátor","omega":"Görög kis ómega betű ","otilde":"Latin hullámvonalas kis o betű","Egrave":"Latin nagy E betű tompa ékezettel","phi":"Görög kis fí betű ","ensp":"n szóköz","Euml":"Latin kétpontos nagy E betű","cedil":"cedill\nbalra hajló alsó hurok","laquo":"balra mutató dupla hegyes idézőjel\nbalra mutató belső idézőjel ","forall":"minden\nfordított nagy A betű","thetasym":"Görög kis théta betű szimbólum ","Agrave":"Latin nagy A betű tompa ékezettel\nTompa ékezetes latin nagy A betű","szlig":"Latin kis sharfes s\neszett","Pi":"Görög nagy pi betű ","rho":"Görög kis ró betű ","trade":"védjegy jel","Igrave":"Latin nagy I betű tompa ékezettel","minus":"mínusz jel","Beta":"Görög nagy béta betű ","Ocirc":"Latin kalapos nagy O betű ","rdquo":"jobb dupla idézőjel","Eta":"Görög nagy éta betű ","rfloor":"jobb szögletes zárójel alsó sarok","Oacute":"Latin nagy O betű éles ékezettel","euml":"Latin kétpontos kis e betű","oplus":"bekarikázott plusz jel\nközvetlen összeg","ocirc":"Latin kalapos kis o betű ","radic":"négyzetgyök\nnégyzetgyök jel","Chi":"Görög nagy khí betű ","notin":"nem eleme ","sect":"paragrafusjel","Acirc":"Latin kalapos nagy A betű ","lsquo":"bal szimpla idézőjel","beta":"Görög kis béta betű ","piv":"Görög pí szimbólum ","sup1":"1 a felső indexben\nfelső indexbe írt egyes számjegy","Scaron":"Latin nagy S betű csónakkal","sup2":"2 felső indexben\nfelső indexbe írt kettes számjegy\nnégyzetre emelés","acirc":"Latin kalapos kis a betű ","sube":"részhalmaza vagy egyenlő","sup3":"3 felső indexben\nfelső indexbe írt hármas számjegy\nköbre emelés","real":"megtört nagy R\nvalós rész szimbólum","Iuml":"Latin kétpontos nagy I betű","rang":"jobbra mutató hegyes zárójel","lsaquo":"szimpla balra mutató hegyes idézőjel","nabla":"nabla\nfordított különbség","omicron":"Görög kis omikron betű ","there4":"ezért","plusmn":"plus-mínusz jel\nplusz-vagy-mínusz jel","rceil":"jobb szögletes zárójel felső sarok","micro":"mikro jel","rArr":"jobbra mutató dupla nyíl ","Delta":"Görög nagy delta betű ","iuml":"Latin kétpontos kis i betű","Tau":"Görög nagy tau betű ","times":"szorzásjel","yacute":"Latin kis y éles ékezettel","ograve":"Latin kis o betű tompa ékezettel","delta":"Görög kis delta betű ","Ecirc":"Latin kalapos nagy E betű ","dArr":"lefelé mutató dupla nyíl","ntilde":"Latin hullámvonalas kis n betű","diams":"fekete káró káryajel","uacute":"Latin kis u betű éles ékezettel","Otilde":"Latin hullámvonalas nagy O betű","ecirc":"Latin kalapos kis e betű ","Upsilon":"Görög nagy üpszilon betű ","image":"megtört nagy I\nképzetes (imaginárius) rész","supe":"bővített halmaza vagy egyenlő","xi":"Görög kis kszí betű ","weierp":"írott nagy P\nhatványhalmaz\nWeierstrass p"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Mentés"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Szimbólum beszúrása"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Oldaltörés"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/hu/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/hu/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/hu/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Előzetes"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"laughing","emoticonCool":"cool","emoticonTongue":"tongue","emoticonCrying":"crying","emoticonOops":"oops","emoticonFrown":"frown","emoticonAngry":"angry","emoticonShy":"shy","emoticonNo":"no","emoticonAngel":"angel","smiley":"Insert Emoticon","emoticonIdea":"idea","emoticonEyebrow":"eyebrow","emoticonSmile":"smile","emoticonWink":"wink","emoticonYes":"yes","emoticonGrin":"grin","emoticonGoofy":"goofy","emoticonHalf":"half"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/CollapsibleToolbar.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/CollapsibleToolbar.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/CollapsibleToolbar.js	(revision 9)
@@ -0,0 +1 @@
+({"collapse":"Restrângere bară de unelte Editor","expand":"Expandare bară de unelte Editor"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"replaceDialogText":"Au fost înlocuite ${0} apariţii.","eofDialogTextFind":"găsită","eofDialogText":"Ultima apariţie ${0}","backwards":"Înapoi","replaceButton":"Înlocuire ","replaceLabel":"Înlocuire cu: ","matchCase":"Potrivire majuscule ","findTooltip":"Introduceţi textul de găsit ","replaceTooltip":"Introduceţi textul cu care se înlocuieşte","replaceAllButton":"Înlocuire toate ","eofDialogTextReplace":"înlocuită","findReplace":"Găsire şi înlocuire","backwardsTooltip":"Căutaţi înapoi pentru text","replaceAllButtonTooltip":"Înlocuiţi tot textul","replaceButtonTooltip":"Înlocuiţi textul","findLabel":"Găsire:","findButton":"Găsire","matchCaseTooltip":"Potrivire majuscule ","findButtonTooltip":"Găsiţi textul"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/PasteFromWord.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/PasteFromWord.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/PasteFromWord.js	(revision 9)
@@ -0,0 +1 @@
+({"pasteFromWord":"Lipire din Word","paste":"Lipire","cancel":"Anulare","instructions":"Lipiţi conţinut din Word în caeta de text de mai jos. După ce sunteţi mulţumit de conţinutul de inserat, apăsaţi butonul Lipire. Pentru a renunţa la inserarea textului, apăsaţi butonul Anulare."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"mai mic sau egal cu","prod":"n produs\nsemnul produs","zwj":"zero cu unificator","mdash":"linie em","frasl":"linie fracţie","upsih":"Simbolul grec upsilon cu cârlig","prop":"proporţional cu","middot":"punct de mijloc\nvirgulă georgiană\npunct de mijloc grec","hellip":"elipse orizontale\ntrei puncte precursoare","eta":"Literă greacă mică eta","iacute":"Literă latină mică i cu accent acut","yen":"semnul yen\nsemnul nyuan","rlm":"semn dreapta spre stânga","macr":"macron\nmacron de spaţiere\nlinie deasupra\nAPL linie deasupra","ldquo":"ghilimele duble stânga","Icirc":"Literă mare latină I cu circumflex","OElig":"Ligatură mare latină OE","hArr":"săgeata dublă stânga dreapta","eth":"Literă latină mică eth","divide":"semn împărţire","chi":"Literă greacă mică chi","eacute":"Literă latină mică e cu accent acut","icirc":"Literă latină mică i cu circumflex","iexcl":"semnul exclamării inversat","ETH":"Literă mare latină ETH","acute":"accent acut\nspaţiere acută","crarr":"săgeata în jos cu colţ spre stânga","mu":"Literă greacă mică miu","AElig":"Literă mare latină AE\nLigatură mare latină AE","aacute":"Literă latină mică a cu accent acut","lambda":"Literă greacă mică lambda","THORN":"Literă mare latină THORN","asymp":"aproape egal cu\nasimptotic la","fnof":"Literă latină mică f cu cârlig\nfuncţie\nflorin","lang":"paranteză unghiulară spre stânga","cup":"reuniune\ncupă","ne":"nu este egal cu","Sigma":"Literă greacă mare sigma","oelig":"Ligatură mică latină oe","cent":"semnul cent","ni":"conţine ca membru","dagger":"cruce","permil":"semn per mie","Omicron":"Literă greacă mare omicron","sigma":"Literă greacă mică sigma","euro":"semn euro","Yacute":"Literă mare latină Y cu accent acut","thorn":"Literă latină mică thorn","lceil":"plafon stânga\nAPL upstile","Ograve":"Literă mare latină O cu accent grav","rarr":"săgeată spre dreapta","nu":"Literă greacă mică niu","emsp":"spaţiu em","Theta":"Literă greacă mare theta","lArr":"săgeata dublă spre stânga","tau":"Literă greacă mică tau","aelig":"Literă latină mică ae\nLigatură latină mică ae","ccedil":"Literă latină mică c cu sedilă","Ntilde":"Literă mare latină N cu tilda","cong":"aproximativ egal cu","Uacute":"Literă mare latină U cu accent acut","theta":"Literă greacă mică theta","darr":"săgeata în jos","Uuml":"Literă mare latină U cu tremă","bdquo":"double low-9 semn de citare","Aring":"Literă mare latină A cu inel deasupra\nLiteră mare latină A cu inel","sigmaf":"Literă greacă mică sigma final","pound":"semnul liră sterlină","uArr":"săgeata dublă în sus","sub":"subset al","aring":"Literă latină mică a cu inel deasupra\nLiteră latină mică a cu inel","sdot":"operator punct","thinsp":"spaţiu îngust","or":"sau logic\nV","Eacute":"Literă mare latină E cu accent acut","shy":"liniuţă de despărţire soft\nliniuţă de despărţire discreţionară","curren":"semnul monedă","loz":"romb","not":"semn nu","tilde":"tilda mică","sum":"n suma","spades":"treflă neagră","Psi":"Literă greacă mare psi","ndash":"linie en","sup":"superset al","atilde":"Literă latină mică a cu tilda","clubs":"pică neagră\nshamrock","uuml":"Literă latină mică u cu tremă","Aacute":"Literă mare latină A cu accent acut","rsaquo":"ghilimele singure unghiulare spre dreapta","otimes":"multiplicator încercuit\nprodus vectorial","lfloor":"podea stânga\nAPL downstile","zwnj":"zero fără unificator","sim":"operator tilda\nvariază cu\nsimilar cu","Iota":"Literă greacă mare iota","Iacute":"Literă mare latină I cu accent acut","pi":"Literă greacă mică pi","ordf":"indicator ordinal feminin","frac12":"fracţie ordinară o jumătate\nfracţie o jumătate","frac14":"fracţie ordinară un sfert\nfracţie un sfert","alefsym":"simbol alef\nprimul cardinal transfinit","bull":"bullet\ncerc mic negru","deg":"semn de grade","ordm":"indicator ordinal masculin","epsilon":"Literă greacă mică epsilon","equiv":"identic cu","Dagger":"cruce dublă","brvbar":"bară ruptă\nbară verticală ruptă","harr":"săgeata stânga dreapta","ugrave":"Literă latină mică u cu accent grav","oslash":"Literă latină mică o cu linie de taiere\nLiteră latină mică o cu o linie oblică","Yuml":"Literă mare latină Y cu tremă","hearts":"inimă neagră\nvalentine","Xi":"Literă greacă mare xi","Prime":"prim dublu\nsecunde\nţoli","iota":"Literă greacă mică iota","Ccedil":"Literă mare latină C cu sedilă","Lambda":"Literă greacă mare lambda","raquo":"ghilimele unghi dublu arătând spre dreapta\nghilimele arătând spre dreapta","Phi":"Literă greacă mare phi","prime":"prim\nminute\npicioare","nsub":"nu este un subset al","copy":"semnul copyright","yuml":"Literă latină mică y cu tremă","Rho":"Literă greacă mare rho","Ucirc":"Literă mare latină U cu circumflex","Kappa":"Literă greacă mare kappa","ucirc":"Literă latină mică u cu circumflex","sbquo":"single low-9 semn de citare ","igrave":"Literă latină mică i cu accent grav","reg":"semn de înregistrare\nsemn de marcă înregistrată","infin":"infinit","iquest":"semn de întrebare inversat\nsemn de întrebare răsturnat","circ":"accent circumflex modificator de literă","kappa":"Literă greacă mică kappa","lrm":"semn stânga spre dreapta","Atilde":"Literă mare latină A cu tilda","larr":"săgeată spre stânga","frac34":"fracţie ordinară trei sferturi\nfracţie trei sferturi","oacute":"Literă latină mică o cu accent acut","rsquo":"ghilimele simple dreapta","egrave":"Literă latină mică e cu accent grav","oline":"linie deasupra\nlinie de spaţiere deasupra","Mu":"Literă greacă mare miu","exist":"Există","cap":"intersecţie\ncăciulă","and":"şi logic\npană","Ouml":"Literă mare latină O cu tremă","agrave":"Literă latină mică a cu accent grav\nLiteră latină mică a grav","uarr":"săgeata în sus","ang":"unghi","Zeta":"Literă greacă mare zeta","scaron":"Literă mică latină s cu caron","Gamma":"Literă greacă mare gamma","isin":"element al","Auml":"Literă mare latină A cu tremă","empty":"set gol\nset zero\ndiametru","gamma":"Literă greacă mică gamma","para":"semn pilcrow\nsemn paragraf","ge":"mai mare sau egal cu","psi":"Literă greacă mică psi","Alpha":"Literă greacă mare alfa","Nu":"Literă greacă mare niu","ouml":"Literă latină mică o cu tremă","zeta":"Literă greacă mică zeta","alpha":"Literă greacă mică alfa","part":"diferenţiale parţiale","auml":"Literă latină mică a cu tremă","Ugrave":"Literă mare latină U cu accent grav","Oslash":"Literă latină majusculă O cu linie de taiere\nLiteră latină majusculă O cu o linie oblică","Epsilon":"Literă greacă mare epsilon","int":"integral","Omega":"Literă greacă mare omega","perp":"t întors\nortogonal la\nerpendicular","uml":"tremă\ntremă de spaţiere","upsilon":"Literă greacă mică upsilon","lowast":"operatorul asterisk","omega":"Literă greacă mică omega","otilde":"Literă latină mică o cu tilda","Egrave":"Literă mare latină E cu accent grav","phi":"Literă greacă mică phi","ensp":"spaţiu en","Euml":"Literă mare latină E cu tremă","cedil":"sedila\nsedila de spaţiere","laquo":"ghilimele unghi dublu arătând spre stânga\nghilimele arătând spre stânga","forall":"pentru toate","thetasym":"Literă greacă mică simbol theta","Agrave":"Literă mare latină A cu accent grav\nLiteră mare latină A grav","szlig":"Literă latină mică s diez\ness-zed","Pi":"Literă greacă mare pi","rho":"Literă greacă mică rho","trade":"semn marcă înregistrată","Igrave":"Literă mare latină I cu accent grav","minus":"semnul minus","Beta":"Literă greacă mare beta","Ocirc":"Literă mare latină O cu circumflex","rdquo":"ghilimele duble dreapta","Eta":"Literă greacă mare eta","rfloor":"podea dreapta","Oacute":"Literă mare latină O cu accent acut","euml":"Literă latină mică e cu tremă","oplus":"plus încercuit\nsumă directă","ocirc":"Literă latină mică o cu circumflex","radic":"rădăcină pătrată\nsemnul radical","Chi":"Literă greacă mare chi","notin":"nu este un element al","sect":"semn secţiune","Acirc":"Literă mare latină A cu circumflex","lsquo":"ghilimele simple stânga","beta":"Literă greacă mică beta","piv":"Simbolul grec pi","sup1":"scriere indice superior unu\nscriere indice superior cifră unu","Scaron":"Literă mare latină S cu caron","sup2":"scriere indice superior doi\nscriere indice superior cifră doi\npătrat","acirc":"Literă latină mică a cu circumflex","sube":"subset al sau egal cu","sup3":"scriere indice superior trei\nscriere indice superior cifră trei\ncub","real":"R majusculă înnegrită\nsimbol parte reală","Iuml":"Literă mare latină I cu tremă","rang":"paranteză unghiulară spre dreapta","lsaquo":"ghilimele singure unghiulare spre stânga","nabla":"nabla\ndiferenţa înapoi","omicron":"Literă greacă mică omicron","there4":"de aceea","plusmn":"semn plus-minus\nsemn plus-sau-minus","rceil":"plafon dreapta","micro":"semn micro","rArr":"săgeata dublă spre dreapta","Delta":"Literă greacă mare delta","iuml":"Literă latină mică i cu tremă","Tau":"Literă greacă mare tau","times":"semn de înmulţire","yacute":"Literă latină mică y cu accent acut","ograve":"Literă latină mică o cu accent grav","delta":"Literă greacă mică delta","Ecirc":"Literă mare latină E cu circumflex","dArr":"săgeata dublă în jos","ntilde":"Literă latină mică n cu tilda","diams":"romb negru","uacute":"Literă latină mică u cu accent acut","Otilde":"Literă mare latină O cu tilda","ecirc":"Literă latină mică e cu circumflex","Upsilon":"Literă greacă mare upsilon","image":"I majusculă înnegrită\nparte imaginară","supe":"superset al sau egal cu","xi":"Literă greacă mică xi","weierp":"script capital P\nputere\np Weierstrass"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Salvare"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/InsertAnchor.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/InsertAnchor.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/InsertAnchor.js	(revision 9)
@@ -0,0 +1 @@
+({"set":"Setare","insertAnchor":"Inserare ancoră","title":"Proprietăţi ancoră","text":"Descriere:","cancel":"Anulare","anchor":"Nume:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Inserare simbol"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Întrerupere pagină"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Previzualizare "})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"râs","emoticonCool":"calm","emoticonTongue":"limbă","emoticonCrying":"plâns","emoticonOops":"vai","emoticonFrown":"posac","emoticonAngry":"furios","emoticonShy":"timid","emoticonNo":"nu","emoticonAngel":"înger","smiley":"Inserare emoticoane","emoticonIdea":"idee","emoticonEyebrow":"sprânceană","emoticonSmile":"zâmbet","emoticonWink":"face cu ochiul","emoticonYes":"da","emoticonGrin":"rânjet","emoticonGoofy":"tont","emoticonHalf":"jumătate"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/TextColor.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/TextColor.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/TextColor.js	(revision 9)
@@ -0,0 +1 @@
+({"setButtonText":"Setare","cancelButtonText":"Anulare"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Afişare bloc elemente HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Selectare conţinut","deleteElement":"Ştergere element","moveEnd":"Mutare cursor la sfârşit","deleteContents":"Ştergere conţinut","nodeActions":"Acţiuni ${nodeName}","selectElement":"Selectare element","moveStart":"Mutare cursor la început"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Setare","insertTableTitle":"Inserare tabelă","insertTableRowAfterLabel":"Adăugare rând după","center":"centru","deleteTableColumnLabel":"Ştergere coloană","right":"dreapta","insertTableColumnBeforeLabel":"Adăugare coloană înainte","tableWidth":"Lăţime tabelă:","buttonInsert":"Inserare","default":"implicit","align":"Aliniere:","insertTableRowBeforeLabel":"Adăugare rând înainte","cellSpacing":"Spaţiere celulă:","pixels":"pixeli","selectTableLabel":"Selectare tabelă ","rows":"Rânduri:","modifyTableTitle":"Modificare tabelă","cellPadding":"Completare celulă:","deleteTableRowLabel":"Ştergere rând ","backgroundColor":"Culoare fundal:","insertTableColumnAfterLabel":"Adăugare coloană după","left":"stânga","borderThickness":"Grosime bordură","columns":"Coloane:","percent":"procent","borderColor":"Culoare bordură:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ro/Blockquote.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ro/Blockquote.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ro/Blockquote.js	(revision 9)
@@ -0,0 +1 @@
+({"blockquote":"Blockquote"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"replaceDialogText":"已替换 ${0} 个出现位置","eofDialogTextFind":"查找","eofDialogText":"已完成最后一次${0}","backwards":"向后查找","replaceButton":"替换","replaceLabel":"替换为：","matchCase":"大小写匹配","findTooltip":"输入查找文本","replaceTooltip":"输入替换文本","replaceAllButton":"全部替换","eofDialogTextReplace":"替换","findReplace":"切换“查找/替换”","backwardsTooltip":"向后查找文本","replaceAllButtonTooltip":"替换所有出现位置","replaceButtonTooltip":"替换该文本","findLabel":"查找对象：","findButton":"查找","matchCaseTooltip":"匹配大小写","findButtonTooltip":"查找该文本"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"小于或等于","prod":"N 元积\n积符号","zwj":"零宽度连字符","mdash":"长破折号","frasl":"分数斜杠","upsih":"带挂钩符号的希腊字母 upsilon","prop":"成比例","middot":"中心点\n乔治逗号\n希腊中心点","hellip":"水平省略号\n三个点组成的标题","eta":"希腊小写字母 η","iacute":"带锐音符的拉丁小写字母 i","yen":"日元符号/人民币符号","rlm":"从右向左标记","macr":"长音符号\n间隔长音符号\n破折号\nAPL 破折号","ldquo":"左双引号","Icirc":"带抑扬符的拉丁大写字母 I","OElig":"拉丁大写连字 OE","hArr":"左右向双箭头","eth":"拉丁小写字母 eth","divide":"除号","chi":"希腊小写字母 χ","eacute":"带锐音符的拉丁小写字母 e","icirc":"带抑扬符的拉丁小写字母 i","iexcl":"反感叹号","ETH":"拉丁大写字母 ETH","acute":"锐音符\n间隔锐音符","crarr":"回车符\n回车符","mu":"希腊小写字母 μ","AElig":"拉丁大写字母 AE\n拉丁大写连字 AE","aacute":"带锐音符的拉丁小写字母 a","lambda":"希腊小写字母 λ","THORN":"拉丁大写字母 THORN","asymp":"几乎等于\n渐近","fnof":"带挂钩符号的拉丁小写 f\n分数\nflorin","lang":"左尖括号","cup":"并集n\n杯状","ne":"不等于","Sigma":"希腊大写字母 Σ","oelig":"拉丁小写连字 oe","cent":"分币符号","ni":"作为成员包含","dagger":"剑号","permil":"千分率符号","Omicron":"希腊大写字母 Ο","sigma":"希腊小写字母 σ","euro":"欧元符号","Yacute":"带锐音符的拉丁大写字母 Y","thorn":"拉丁小写字母 thorn","lceil":"左上限\nAPL 顶","Ograve":"带重音符的拉丁大写字母 O","rarr":"向右箭头","nu":"希腊小写字母 ν","emsp":"双倍间距","Theta":"希腊大写字母 Θ","lArr":"向左双箭头","tau":"希腊小写字母 τ","aelig":"拉丁小写字母 ae\n拉丁小写连字 ae","ccedil":"带软音符的拉丁小写字母 c","Ntilde":"带颚化音的拉丁大写字母 N","cong":"约等于","Uacute":"带锐音符的拉丁大写字母 U","theta":"希腊小写字母 θ","darr":"向下箭头","Uuml":"带分音符的拉丁大写字母 U","bdquo":"低双引号","Aring":"带上圆圈的拉丁大写字母 A\n带圆圈的拉丁大写字母 A","sigmaf":"希腊小写字母 final sigma","pound":"英镑符号","uArr":"向上双箭头","sub":"...的子集","aring":"带上圆圈的拉丁小写字母 a\n带圆圈的拉丁小写字母 a","sdot":"点运算符","thinsp":"窄空格","or":"逻辑或\n V 字形","Eacute":"带锐音符的拉丁大写字母 E","shy":"软连字符\n自由选定连字符","curren":"货币符号","loz":"菱形","not":"非符号","tilde":"小颚化音符号","sum":"N 元和","spades":"黑色桃形","Psi":"希腊大写字母 Ψ","ndash":"短破折号","sup":"...的超集","atilde":"带颚化音的拉丁小写字母 a","clubs":"黑色梅花形\n三叶草","uuml":"带分音符的拉丁小写字母 u","Aacute":"带锐音符的拉丁大写字母 A","rsaquo":"右尖括号","otimes":"带圆圈的乘号\n向量积","lfloor":"左下限\nAPL 底","zwnj":"零宽度非连字符","sim":"颚化音运算符\n偏离\n相似","Iota":"希腊大写字母 Ι","Iacute":"带锐音符的拉丁大写字母 I","pi":"希腊小写字母 π","ordf":"阴性序数指示符","frac12":"普通二分之一\n二分之一","frac14":"普通四分之一\n四分之一","alefsym":"alef 符号\n第一个超限基数","bull":"子弹符号\n黑色小圆圈","deg":"度符号","ordm":"阳性序数指示符","epsilon":"希腊小写字母 ε","equiv":"完全相等","Dagger":"双剑号","brvbar":"横向虚线\n纵向虚线","harr":"向左上箭头","ugrave":"带重音符的拉丁小写字母 u","oslash":"带竖线的拉丁小写字母 o\n带斜杠的拉丁小写字母 o","Yuml":"带分音符的拉丁大写字母 Y","hearts":"黑色心形\n心形","Xi":"希腊大写字母 Ξ","Prime":"秒符号\n秒\n寸","iota":"希腊小写字母 ι","Ccedil":"带软音符的拉丁大写字母 C","Lambda":"希腊大写字母 Λ","raquo":"右双尖括号\n右双尖括号","Phi":"希腊大写字母 Φ","prime":"分钟符号\n分钟\n尺","nsub":"不是...的子集","copy":"版权符号","yuml":"带分音符的拉丁小写字母 y","Rho":"希腊大写字母 Ρ","Ucirc":"带抑扬符的拉丁大写字母 U","Kappa":"希腊大写字母 Κ","ucirc":"带抑扬符的拉丁小写字母 u","sbquo":"低单引号","igrave":"带重音符的拉丁小写字母 i","reg":"注册符号\n注册商标符号","infin":"无限","iquest":"倒问号\n倒问号","circ":"修饰符字母抑扬符重音符","kappa":"希腊小写字母 κ","lrm":"从左向右标记","Atilde":"带颚化音的拉丁大写字母 A","larr":"向左箭头","frac34":"普通四分之三\n四分之三","oacute":"带锐音符的拉丁小写字母 o","rsquo":"右单引号","egrave":"带重音符的拉丁小写字母 e","oline":"顶线\n间隔顶线","Mu":"希腊大写字母 Μ","exist":"存在","cap":"交集\n盖状","and":"逻辑和\n尖三角形","Ouml":"带分音符的拉丁大写字母 O","agrave":"带重音符的拉丁小写字母 a\n带重音符的拉丁小写字母 a","uarr":"向上箭头","ang":"角度","Zeta":"希腊大写字母 Ζ","scaron":"带倒折音的拉丁小写字母 s","Gamma":"希腊大写字母 Γ","isin":"...的元素","Auml":"带分音符的拉丁大写字母 A","empty":"空集\n空集\n直径","gamma":"希腊小写字母 γ","para":"段落符号\n段落符号","ge":"大于或等于","psi":"希腊小写字母 ψ","Alpha":"希腊大写字母 Α","Nu":"希腊大写字母 Ν","ouml":"带分音符的拉丁小写字母 o","zeta":"希腊小写字母 ζ","alpha":"希腊小写字母 α","part":"部分差分","auml":"带分音符的拉丁小写字母 a","Ugrave":"带重音符的拉丁大写字母 U","Oslash":"带竖线的拉丁大写字母 O\n带斜杠的拉丁大写字母 O","Epsilon":"希腊大写字母 Ε","int":"整数","Omega":"希腊大写字母 Ω","perp":"倒 T\n正交于\n垂直","uml":"分音符\n间隔分音符","upsilon":"希腊小写字母 υ","lowast":"星号运算符","omega":"希腊小写字母 ω","otilde":"带颚化音的拉丁小写字母 o","Egrave":"带重音符的拉丁大写字母 E","phi":"希腊小写字母 φ","ensp":"单倍间距","Euml":"带分音符的拉丁大写字母 E","cedil":"软音符\n间隔软音符","laquo":"左双尖括号\n左双尖括号","forall":"全部","thetasym":"希腊小写字母 theta 符号","Agrave":"带重音符的拉丁大写字母 A\n带重音符的拉丁大写字母 A","szlig":"拉丁小写字母 sharp s\ness-zed","Pi":"希腊大写字母 Π","rho":"希腊小写字母 ρ","trade":"商标符号","Igrave":"带重音符的拉丁大写字母 I","minus":"负号","Beta":"希腊大写字母 Β","Ocirc":"带抑扬符的拉丁大写字母 O","rdquo":"右双引号","Eta":"希腊大写字母 Η","rfloor":"右下限","Oacute":"带锐音符的拉丁大写字母 O","euml":"带分音符的拉丁小写字母 e","oplus":"带圆圈的加号\n异或","ocirc":"带抑扬符的拉丁小写字母 o","radic":"平方根\n根号","Chi":"希腊大写字母 Χ","notin":"不是...的元素","sect":"小节符号","Acirc":"带抑扬符的拉丁大写字母 A","lsquo":"左单引号","beta":"希腊小写字母 β","piv":"希腊 pi 符号","sup1":"上标 1\n上标数字 1","Scaron":"带倒折音的拉丁大写字母 S","sup2":"上标 2\n上标数字 2\n平方","acirc":"带抑扬符的拉丁小写字母 a","sube":"...的子集或等于","sup3":"上标 3\n上标数字 3\n立方","real":"黑色大写字母 R\n实部符号","Iuml":"带分音符的拉丁大写字母 I","rang":"右尖括号","lsaquo":"左尖括号","nabla":"劈形算符\n后向差分","omicron":"希腊小写字母 ο","there4":"因此","plusmn":"正负号\n正号或负号","rceil":"右上限","micro":"μ 符号","rArr":"向右双箭头","Delta":"希腊大写字母 Δ","iuml":"带分音符的拉丁小写字母 i","Tau":"希腊大写字母 Τ","times":"乘号","yacute":"带锐音符的拉丁小写字母 y","ograve":"带重音符的拉丁小写字母 o","delta":"希腊小写字母 δ","Ecirc":"带抑扬符的拉丁大写字母 E","dArr":"向下双箭头","ntilde":"带颚化音的拉丁小写字母 n","diams":"黑色菱形","uacute":"带锐音符的拉丁小写字母 u","Otilde":"带颚化音的拉丁大写字母 O","ecirc":"带抑扬符的拉丁小写字母 e","Upsilon":"希腊大写字母 Υ","image":"黑色大写字母 I\n虚部符号","supe":"...的超集或等于","xi":"希腊小写字母 ξ","weierp":"脚本大写 P\n幂集\nWeierstrass p"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"保存"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"插入符号"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"换页符"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"预览"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"大笑","emoticonCool":"酷","emoticonTongue":"吐舌","emoticonCrying":"哭泣","emoticonOops":"oops","emoticonFrown":"皱眉","emoticonAngry":"愤怒","emoticonShy":"害羞","emoticonNo":"摇头","emoticonAngel":"天使","smiley":"插入表情图标","emoticonIdea":"思考","emoticonEyebrow":"挑眉","emoticonSmile":"微笑","emoticonWink":"眨眼","emoticonYes":"点头","emoticonGrin":"咧着嘴笑","emoticonGoofy":"傻了","emoticonHalf":"左右为难"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"显示 HTML 块元素"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"选择内容","deleteElement":"删除元素","moveEnd":"将光标移至结尾","deleteContents":"删除内容","nodeActions":"${nodeName} 操作","selectElement":"选择元素","moveStart":"将光标移至开头"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/zh/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/zh/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/zh/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"设置","insertTableTitle":"插入表","insertTableRowAfterLabel":"在之后添加行","center":"中间对齐","deleteTableColumnLabel":"删除列","right":"右边对齐","insertTableColumnBeforeLabel":"在之前添加列","tableWidth":"表宽度：","buttonInsert":"插入","default":"缺省值","align":"对齐：","insertTableRowBeforeLabel":"在之前添加行","cellSpacing":"单元格间距：","pixels":"像素","selectTableLabel":"选择表","rows":"行：","modifyTableTitle":"修改表","cellPadding":"单元格边距：","deleteTableRowLabel":"删除行","backgroundColor":"背景色：","insertTableColumnAfterLabel":"在之后添加列","left":"左边对齐","borderThickness":"边框厚度","columns":"列：","percent":"百分比","borderColor":"边框色："})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Set","insertTableTitle":"Insert Table","insertTableRowAfterLabel":"Add Row After","center":"center","deleteTableColumnLabel":"Delete Column","right":"right","insertTableColumnBeforeLabel":"Add Column Before","tableWidth":"Table Width:","buttonInsert":"Insert","default":"default","align":"Align:","insertTableRowBeforeLabel":"Add Row Before","cellSpacing":"Cell Spacing:","pixels":"pixels","selectTableLabel":"Select Table","rows":"Rows:","modifyTableTitle":"Modify Table","cellPadding":"Cell Padding:","deleteTableRowLabel":"Delete Row","backgroundColor":"Background Color:","insertTableColumnAfterLabel":"Add Column After","left":"left","borderThickness":"BorderThickness","columns":"Columns:","percent":"percent","borderColor":"Border Color:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Mostrar Elementos de Bloco HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Selecionar Conteúdo","deleteElement":"Excluir Elemento","moveEnd":"Mover Cursor para o Final","deleteContents":"Excluir Conteúdo","nodeActions":"${nodeName} Ações","selectElement":"Selecionar Elemento","moveStart":"Mover Cursor para o Início"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Configurar","insertTableTitle":"Inserir Tabela","insertTableRowAfterLabel":"Incluir Linha Depois","center":"centro","deleteTableColumnLabel":"Excluir Coluna","right":"direita","insertTableColumnBeforeLabel":"Incluir Coluna Antes","tableWidth":"Largura da Tabela:","buttonInsert":"Inserir","default":"default","align":"Alinhar:","insertTableRowBeforeLabel":"Incluir Linha Antes","cellSpacing":"Espaçamento de Célula:","pixels":"pixels","selectTableLabel":"Selecionar Tabela","rows":"Linhas:","modifyTableTitle":"Modificar Tabela","cellPadding":"Preenchimento de Célula:","deleteTableRowLabel":"Excluir Linha","backgroundColor":"Cor do Plano de Fundo:","insertTableColumnAfterLabel":"Incluir Coluna Depois","left":"esquerda","borderThickness":"Grossura da Borda","columns":"Colunas:","percent":"percentual","borderColor":"Cor da Borda:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Retroceder","findReplace":"Comutar Localizar/Substituir","replaceAll":"Todas as Ocorrências","replaceDialogText":"${0} ocorrências substituídas.","replaceButton":"Substituir","findButton":"Localizar","findLabel":"Localizar:","matchCase":"Caso de Correspondência","replaceLabel":"Substituir por:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"menor ou igual a","prod":"produto de n elementos\nsímbolo de produto","zwj":"conector de largura zero","mdash":"travessão","frasl":"barra de fração","upsih":"Símbolo da letra grega upsilon com gancho","prop":"proporcional a","middot":"ponto mediano\nvírgula georgiana\nponto mediano grego","hellip":"reticências horizontais\ntrês pontos","eta":"Letra grega minúscula eta","iacute":"Letra latina minúscula i com acento agudo","yen":"símbolo de ienesímbolo de yuan","rlm":"marca da direita para a esquerda","macr":"macron\nmacron de espaçamento\nlinha sobreposta\nbarra superior de APL","ldquo":"aspas duplas inferior à esquerda","Icirc":"Letra latina maiúscula I com acento circunflexo","OElig":"Ligação latina maiúscula OE","hArr":"seta dupla para esquerda e direita","eth":"Letra latina minúscula eth","divide":"símbolo de divisão","chi":"Letra grega minúscula chi","eacute":"Letra latina minúscula e com acento agudo","icirc":"Letra latina minúscula i com acento circunflexo","iexcl":"ponto de exclamação invertido","ETH":"Letra latina maiúscula ETH","acute":"acento agudo\nacento agudo para espaçamento","crarr":"seta para baixo com curva para esquerda\nretorno de texto","mu":"Letra grega minúscula miu","AElig":"Letra latina maiúscula AE\nLetra latina maiúscula AE","aacute":"Letra latina minúscula a com acento agudo","lambda":"Letra grega minúscula lambda","THORN":"Letra latina maiúscula THORN","asymp":"quase igual a\nassintótico a","fnof":"Letra latina minúscula f com gancho\nfunção\nflorim","lang":"sinal de maior e menor para esquerda","cup":"união\nreunião","ne":"diferente de","Sigma":"Letra grega maiúscula sigma","oelig":"Ligação latina minúscula oe","cent":"símbolo de centavo","ni":"contém","dagger":"cruz","permil":"símbolo por mil","Omicron":"Letra grega maiúscula ómicron","sigma":"Letra grega minúscula sigma","euro":"símbolo de euro","Yacute":"Letra latina maiúscula Y com acento agudo","thorn":"Letra latina minúscula thorn","lceil":"chave em L com o canto voltado para cima à esquerda\nAPL com o canto voltado para cima","Ograve":"Letra latina maiúscula O com acento grave","rarr":"seta para direita","nu":"Letra grega minúscula nu","emsp":"espaço duplo","Theta":"Letra grega maiúscula teta","lArr":"seta dupla para esquerda","tau":"Letra grega minúscula tau","aelig":"Letra latina minúscula ae\nLetra latina minúscula ae contraída","ccedil":"Letra latina minúscula c com cedilha","Ntilde":"Letra latina maiúscula N com til","cong":"aproximadamente igual a","Uacute":"Letra latina maiúscula U com acento agudo","theta":"Letra grega minúscula teta","darr":"seta para baixo","Uuml":"Letra latina maiúscula U com trema","bdquo":"aspas duplas inferiores à direita","Aring":"Letra latina maiúscula A com círculo em cima\nLetra latina maiúscula A com círculo","sigmaf":"Letra grega minúscula sigma final","pound":"símbolo de libra","uArr":"seta dupla para cima","sub":"está contido em","aring":"Letra latina minúscula a com círculo em cima\nLetra latina minúscula a com círculo","sdot":"ponto de multiplicação","thinsp":"espaço estreito","or":"'ou' lógico\nvee","Eacute":"Letra latina maiúscula E com acento agudo","shy":"hífen reformatável\nhífen discricionário","curren":"símbolo de moeda","loz":"losango","not":"nenhum símbolo","tilde":"til pequeno","sum":"somatório de n elementos","spades":"símbolo de espadas","Psi":"Letra grega maiúscula psi","ndash":"traço","sup":"contém","atilde":"Letra latina minúscula a com til","clubs":"símbolo de paus\ntrevo","uuml":"Letra latina minúscula u com trema","Aacute":"Letra latina maiúscula A com acento agudo","rsaquo":"aspa latina de abertura","otimes":"símbolo de vezes circulado\nproduto dos vetores","lfloor":"chave em L com o canto voltado para baixo à esquerda\nAPL com o canto voltado para baixo","zwnj":"separador de largura zero","sim":"operador til\nvaria com\nigual a","Iota":"Letra grega maiúscula iota","Iacute":"Letra latina maiúscula I com acento agudo","pi":"Letra grega minúscula pi","ordf":"indicador ordinal feminino","frac12":"fração de um meio\nfração de um meio","frac14":"fração de um quarto\nfração de um quarto","alefsym":"símbolo alef\nprimeiro cardinal transfinito","bull":"marcador\npequeno círculo preto","deg":"símbolo de grau","ordm":"indicador ordinal masculino","epsilon":"Letra grega minúscula épsilon","equiv":"idêntico a","Dagger":"cruz dupla","brvbar":"barra interrompida\nbarra vertical de interrompida","harr":"seta para esquerda e direita","ugrave":"Letra latina minúscula u com acento grave","oslash":"Letra latina minúscula o traçada\nLetra latina minúscula o cortada com barra","Yuml":"Letra latina maiúscula Y com trema","hearts":"coração negro\nsímbolo de copas","Xi":"Letra grega maiúscula ksi","Prime":"linha dupla\nsegundos\npolegadas","iota":"Letra grega minúscula iota","Ccedil":"Letra latina maiúscula C com cedilha","Lambda":"Letra grega maiúscula lambda","raquo":"aspas latinas duplas de abertura\nsímbolo de citação direito","Phi":"Letra grega maiúscula fi","prime":"linha simples\nminutos\npés","nsub":"não está contido em","copy":"símbolo de copyright","yuml":"Letra latina minúscula y com trema","Rho":"Letra grega maiúscula rô","Ucirc":"Letra latina maiúscula U com acento circunflexo","Kappa":"Letra grega maiúscula capa","ucirc":"Letra latina minúscula u com acento circunflexo","sbquo":"aspas simples inferior à direita","igrave":"Letra latina minúscula i com acento grave","reg":"símbolo de marca registrada\nsímbolo de marca comercial registrada","infin":"infinito","iquest":"ponto de interrogação invertido\nponto de interrogação invertido","circ":"Acento circunflexo","kappa":"Letra grega minúscula capa","lrm":"marca da esquerda para a direita","Atilde":"Letra latina maiúscula A com til","larr":"seta para esquerda","frac34":"fração de três quartos\nfração de três quartos","oacute":"Letra latina minúscula o com acento agudo","rsquo":"aspas simples à direita","egrave":"Letra latina minúscula e com acento grave","oline":"linha sobreposta\nlinha superior para espaçamento","Mu":"Letra grega maiúscula miu","exist":"existe pelo menos","cap":"intersecção\nintersecção","and":"'e' lógico\nwedge","Ouml":"Letra latina maiúscula O com trema","agrave":"Letra latina minúscula a com acento grave\nletra latina minúscula a com acento grave","uarr":"seta para cima","ang":"ângulo","Zeta":"Letra grega maiúscula zeta","scaron":"Letra latina minúscula s com caron","Gamma":"Letra grega maiúscula gama","isin":"pertence a","Auml":"Letra latina maiúscula A com trema","empty":"conjunto vazio\nconjunto nulo\ndiâmetro","gamma":"Letra grega minúscula gama","para":"símbolo pé-de-mosca\nsímbolo de parágrafo","ge":"maior ou igual a","psi":"Letra grega minúscula psi","Alpha":"Letra grega maiúscula alfa","Nu":"Letra grega maiúscula nu","ouml":"Letra latina minúscula o com trema","zeta":"Letra grega minúscula zeta","alpha":"Letra grega minúscula alfa","part":"diferença parcial","auml":"Letra latina minúscula a com trema","Ugrave":"Letra latina maiúscula U com acento grave","Oslash":"Letra latina maiúscula O traçada\nLetra latina maiúscula O cortada com barra","Epsilon":"Letra grega maiúscula épsilon","int":"integral","Omega":"Letra grega maiúscula ômega","perp":"up tack\nortogonal a\nperpendicular","uml":"trema\ntrema de espaçamento","upsilon":"Letra grega minúscula upsilon","lowast":"asterisco","omega":"Letra grega minúscula ômega","otilde":"Letra latina minúscula o com til","Egrave":"Letra latina maiúscula E com acento grave","phi":"Letra grega minúscula fi","ensp":"espaço simples","Euml":"Letra latina maiúscula E com trema","cedil":"cedilha\ncedilha para espaçamento","laquo":"aspas latinas duplas de encerramento\nsímbolo de citação esquerdo","forall":"para todos","thetasym":"Símbolo da letra grega minúscula teta","Agrave":"Letra latina maiúscula A com acento grave\nletra latina maiúscula A com acento grave","szlig":"Letra latina minúscula scharfes S\ness-zed","Pi":"Letra grega maiúscula pi","rho":"Letra grega minúscula rô","trade":"símbolo de marca registrada","Igrave":"Letra latina maiúscula I com acento grave","minus":"sinal de menos","Beta":"Letra grega maiúscula beta","Ocirc":"Letra latina maiúscula O com acento circunflexo","rdquo":"aspas duplas à direita","Eta":"Letra grega maiúscula eta","rfloor":"chave em L com o canto voltado para baixo à direita","Oacute":"Letra latina maiúscula O com acento agudo","euml":"Letra latina minúscula e com trema","oplus":"círculo mais\nsoma direta","ocirc":"Letra latina minúscula o com acento circunflexo","radic":"raiz quadrada\nsímbolo de radical","Chi":"Letra grega maiúscula chi","notin":"não pertence a","sect":"símbolo de seção","Acirc":"Letra latina maiúscula A com acento circunflexo","lsquo":"aspas simples à esquerda","beta":"Letra grega minúscula beta","piv":"Símbolo grego pi","sup1":"um sobrescrito\ndígito um sobrescrito","Scaron":"Letra latina maiúscula S com caron","sup2":"dois sobrescrito\ndígito dois sobrescrito\nraiz quadrada","acirc":"Letra latina minúscula a com acento circunflexo","sube":"está contido ou é igual a","sup3":"três sobrescrito\ndígito três sobrescrito\nraiz cúbica","real":"letra R maiúscula gótica\nsímbolo da parte real","Iuml":"Letra latina maiúscula I com trema","rang":"sinal de maior e menor para direita","lsaquo":"aspa latina de encerramento","nabla":"nabla\ngradiente","omicron":"Letra grega minúscula ómicron","there4":"para isso","plusmn":"símbolo de mais e menos\nsímbolo de mais ou menos","rceil":"chave em L com o canto voltado para cima à direita","micro":"símbolo de micro","rArr":"seta dupla para direita","Delta":"Letra grega maiúscula delta","iuml":"Letra latina minúscula i com trema","Tau":"Letra grega maiúscula tau","times":"símbolo de multiplicação","yacute":"Letra latina minúscula y com acento agudo","ograve":"Letra latina minúscula o com acento grave","delta":"Letra grega minúscula delta","Ecirc":"Letra latina maiúscula E com acento circunflexo","dArr":"seta dupla para baixo","ntilde":"Letra latina minúscula n com til","diams":"diamante negro","uacute":"Letra latina minúscula u com acento agudo","Otilde":"Letra latina maiúscula O com til","ecirc":"Letra latina minúscula e com acento circunflexo","Upsilon":"Letra grega maiúscula upsilon","image":"letra I maiúscula gótica\nparte imaginária","supe":"contém ou é igual a","xi":"Letra grega minúscula ksi","weierp":"P maiúsculo cursivo\npotência\np de Weierstrass"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Salvar"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Inserir Símbolo"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Quebra de Página"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Visualização"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/pt/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/pt/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/pt/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"gargalhando","emoticonCool":"legal","emoticonTongue":"mostrando a língua","emoticonCrying":"chorando","emoticonOops":"surpreso","emoticonFrown":"sobrancelhas franzidas","emoticonAngry":"bravo","emoticonShy":"envergonhado","emoticonNo":"não","emoticonAngel":"angelical","smiley":"Inserir Emoticon","emoticonIdea":"ideia","emoticonEyebrow":"sarcástico","emoticonSmile":"sorriso","emoticonWink":"piscando","emoticonYes":"sim","emoticonGrin":"sorriso largo","emoticonGoofy":"tonto","emoticonHalf":"confuso"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ca/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ca/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ca/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Defineix","insertTableTitle":"Insereix taula","insertTableRowAfterLabel":"Afegeix fila després","center":"centrat","deleteTableColumnLabel":"Suprimeix columna","right":"dreta","insertTableColumnBeforeLabel":"Afegeix columna abans","tableWidth":"Amplada de taula:","buttonInsert":"Insereix","default":"default","align":"Alinea:","insertTableRowBeforeLabel":"Afegeix fila abans","cellSpacing":"Espaiat de cel·la:","pixels":"píxels","selectTableLabel":"Selecciona taula","rows":"Files:","modifyTableTitle":"Modifica taula","cellPadding":"Emplenat de cel·la:","deleteTableRowLabel":"Suprimeix fila","backgroundColor":"Color de fons:","insertTableColumnAfterLabel":"Afegeix columna després","left":"esquerra","borderThickness":"Gruix del contorn","columns":"Columnes:","percent":"percentatge","borderColor":"Color del contorn"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/tr/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/tr/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/tr/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Ayarla","insertTableTitle":"Tablo Ekle","insertTableRowAfterLabel":"Satırı Arkasına Ekle","center":"orta","deleteTableColumnLabel":"Sütunu Sil","right":"sağ","insertTableColumnBeforeLabel":"Sütunu Önüne Ekle","tableWidth":"Tablo Genişliği","buttonInsert":"Ekle","default":"varsayılan","align":"Hizala:","insertTableRowBeforeLabel":"Satırı Önüne Ekle","cellSpacing":"Hücre Aralığı:","pixels":"piksel","selectTableLabel":"Tablo Seç","rows":"Satırlar:","modifyTableTitle":"Tabloyu Değiştir","cellPadding":"Hücre Doldurma:","deleteTableRowLabel":"Satırı Sil","backgroundColor":"Arka Plan Rengi:","insertTableColumnAfterLabel":"Sütunu Arkasına Ekle","left":"sol","borderThickness":"Kenarlık Kalınlığı","columns":"Sütunlar:","percent":"yüzde","borderColor":"Kenarlık Rengi: "})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Назад","findReplace":"Переключатель Поиск/Замена","replaceAll":"Все вхождения","replaceDialogText":"Заменено ${0} вхождений.","replaceButton":"Заменить","findButton":"Найти","findLabel":"Найти:","matchCase":"С учетом регистра","replaceLabel":"Заменить на:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"меньше или равно","prod":"n-арное произведение\nсимвол произведения","zwj":"соединитель нулевой ширины","mdash":"тире длины M","frasl":"косая черта","upsih":"греческий ипсилон с хвостиком","prop":"пропорционально","middot":"средняя точка\nзапятая в грузинском\nсредняя точка в греческом","hellip":"многоточие\nтри точки","eta":"греческая строчная буква эта","iacute":"латинская строчная буква i с акутом","yen":"символ иены\nсимвол юаня","rlm":"знак справа-налево","macr":"знак долготы\nзнак долготы с интервалом\nверхняя черта\nнадчеркивание APL","ldquo":"левая двойная кавычка","Icirc":"латинская прописная буква I с циркумфлексом","OElig":"латинская прописная лигатура OE","hArr":"двойная стрелка влево-вправо","eth":"латинская строчная буква eth","divide":"знак деления","chi":"греческая строчная буква хи","eacute":"латинская строчная буква e с акутом","icirc":"латинская строчная буква i с циркумфлексом","iexcl":"инвертированный восклицательный знак","ETH":"латинская прописная буква ETH","acute":"знак акут\nакут с интервалом","crarr":"стрелка вниз с углом вправо\nвозврат каретки","mu":"греческая строчная буква мю","AElig":"латинская прописная буква AE\nлатинская прописная лигатура AE","aacute":"латинская строчная буква a с акутом","lambda":"греческая строчная буква лямбда","THORN":"латинская прописная буква THORN","asymp":"почти равно\nасимптотично","fnof":"латинская строчная буква f с хвостиком\nфункция\nфлорин","lang":"левая угловая скобка","cup":"объединение\nчашечка","ne":"не равно","Sigma":"греческая прописная буква сигма","oelig":"латинская строчная лигатура oe","cent":"символ цента","ni":"содержит в качестве элемента","dagger":"крест","permil":"знак промилле","Omicron":"греческая прописная буква омикрон","sigma":"греческая строчная буква сигма","euro":"символ евро","Yacute":"латинская прописная буква Y с акутом","thorn":"латинская строчная буква thorn","lceil":"левая скобка округления вверх\nAPL upstile","Ograve":"латинская прописная буква O с грависом","rarr":"стрелка вправо","nu":"греческая строчная буква ню","emsp":"пробел длины M","Theta":"греческая прописная буква тета","lArr":"двойная стрелка влево","tau":"греческая строчная буква тау","aelig":"латинская строчная буква ae\nлатинская строчная лигатура ae","ccedil":"латинская строчная буква c с седилью","Ntilde":"латинская прописная буква N с тильдой","cong":"приблизительно равно","Uacute":"латинская прописная буква U с акутом","theta":"греческая строчная буква тета","darr":"стрелка вниз","Uuml":"латинская прописная буква U с тремой","bdquo":"двойная нижняя кавычка","Aring":"латинская прописная буква A с кружком сверху\nлатинская прописная буква A с кружком","sigmaf":"греческая строчная конечная сигма","pound":"символ фунта стерлингов","uArr":"двойная стрелка вверх","sub":"подмножество","aring":"латинская строчная буква a с кружком сверху\nлатинская строчная a с кружком","sdot":"оператор точка","thinsp":"узкий пробел","or":"логическое ИЛИ\nклин вниз","Eacute":"латинская прописная буква E с акутом","shy":"мягкий перенос\nвозможный перенос","curren":"символ денежной единицы","loz":"ромб","not":"знак отрицания","tilde":"малая тильда","sum":"n-арное суммирование","spades":"пики","Psi":"греческая прописная буква пси","ndash":"тире длины N","sup":"включает в себя","atilde":"латинская строчная буква a с тильдой","clubs":"крести\nтрилистник","uuml":"латинская строчная буква u с тремой","Aacute":"латинская прописная буква A с акутом","rsaquo":"одинарная правая угловая кавычка","otimes":"умножение в круге\nвекторное произведение","lfloor":"левая скобка округления вниз\nAPL downstile","zwnj":"разделитель нулевой ширины","sim":"оператор тильда\nизменяться с\nподобно","Iota":"греческая прописная буква йота","Iacute":"латинская прописная буква I с акутом","pi":"греческая строчная буква пи","ordf":"индикатор женского рода","frac12":"дробь одна вторая\nодна вторая","frac14":"дробь одна четвертая\nодна четверть","alefsym":"буква Алеф\nкардинальное число","bull":"маркер списка\nчерный маленький кружок","deg":"символ градусов","ordm":"индикатор мужского рода","epsilon":"греческая строчная буква эпсилон","equiv":"идентично","Dagger":"двойной крест","brvbar":"прерывистая черта\nвертикальная прерывистая черта","harr":"стрелка влево-вправо","ugrave":"латинская строчная буква u с грависом","oslash":"латинская строчная буква o перечеркнутая\nлатинская строчная буква o с вертикальной чертой","Yuml":"латинская прописная буква Y с тремой","hearts":"червы\nвалентинка","Xi":"греческая прописная буква кси","Prime":"двойной штрих\nсекунды\nдюймы","iota":"греческая строчная буква йота","Ccedil":"латинская прописная буква C с седилью","Lambda":"греческая прописная буква лямбда","raquo":"правая двойная угловая кавычка\nправая кавычка","Phi":"греческая прописная буква фи","prime":"штрих\nминуты\nфуты","nsub":"не является подмножеством","copy":"символ авторских прав","yuml":"латинская строчная буква y с тремой","Rho":"греческая прописная буква ро","Ucirc":"латинская прописная буква U с циркумфлексом","Kappa":"греческая прописная буква каппа","ucirc":"латинская строчная буква u с циркумфлексом","sbquo":"одиночная нижняя кавычка","igrave":"латинская строчная буква i с грависом","reg":"символ Зарегистрирован\nсимвол зарегистрированного товарного знака","infin":"бесконечность","iquest":"инвертированный знак вопроса\nперевернутый знак вопроса","circ":"надстрочный знак циркумфлекс","kappa":"греческая строчная буква каппа","lrm":"знак слева-направо","Atilde":"латинская прописная буква A с тильдой","larr":"стрелка влево","frac34":"дробь три четверти\nтри четверти","oacute":"латинская строчная буква o с акутом","rsquo":"правая одинарная кавычка","egrave":"латинская строчная буква e с грависом","oline":"верхняя черта\nнадчеркивание с интервалом","Mu":"греческая прописная буква мю","exist":"существует","cap":"пересечение\nшапочка","and":"логическое И\nклин вверх","Ouml":"латинская прописная буква O с тремой","agrave":"латинская строчная буква a с грависом\nлатинская строчная a с грависом","uarr":"стрелка вверх","ang":"угол","Zeta":"греческая прописная буква дзета","scaron":"латинская строчная буква s с галочкой","Gamma":"греческая прописная буква гамма","isin":"является элементом","Auml":"латинская прописная буква A с тремой","empty":"пустой набор\nпустое множество\nдиаметр","gamma":"греческая строчная буква гамма","para":"символ абзаца\nсимвол параграфа","ge":"больше или равно","psi":"греческая строчная буква пси","Alpha":"греческая прописная буква альфа","Nu":"греческая прописная буква ню","ouml":"латинская строчная буква o с тремой","zeta":"греческая строчная буква дзета","alpha":"греческая строчная буква альфа","part":"частичный дифференциал","auml":"латинская строчная буква a с тремой","Ugrave":"латинская прописная буква U с грависом","Oslash":"латинская прописная буква O перечеркнутая\nлатинская прописная буква O с вертикальной чертой","Epsilon":"греческая прописная буква эпсилон","int":"интеграл","Omega":"греческая прописная буква омега","perp":"перевернутый гвоздь\nортогонально к\nперпендикулярно","uml":"трема\nтрема с интервалом","upsilon":"греческая строчная буква ипсилон","lowast":"оператор звездочка","omega":"греческая строчная буква омега","otilde":"латинская строчная буква o с тильдой","Egrave":"латинская прописная буква E с грависом","phi":"греческая строчная буква фи","ensp":"пробел длины N","Euml":"латинская прописная буква E с тремой","cedil":"седиль\nседиль с интервалом","laquo":"левые двойный угловые кавычки\nлевые кавычки","forall":"для всех","thetasym":"греческая символьная тета","Agrave":"латинская прописная буква A с грависом","szlig":"латинская строчная заостренная s\nэсцэт","Pi":"греческая прописная буква пи","rho":"греческая строчная буква ро","trade":"символ товарного знака","Igrave":"латинская прописная буква I с грависом","minus":"знак минуса","Beta":"греческая прописная буква бета","Ocirc":"латинская прописная буква O с циркумфлексом","rdquo":"правая двойная кавычка","Eta":"греческая прописная буква эта","rfloor":"правая скобка округления вниз","Oacute":"латинская прописная буква O с акутом","euml":"латинская строчная буква e с тремой","oplus":"плюс в круге\nпрямая сумма","ocirc":"латинская строчная буква o с циркумфлексом","radic":"квадратный корень\nзнак корня","Chi":"греческая прописная буква хи","notin":"не является элементом","sect":"символ раздела","Acirc":"латинская прописная буква A с циркумфлексом","lsquo":"левая одинарная кавычка","beta":"греческая строчная буква бета","piv":"греческая символьная пи","sup1":"верхний индекс один\nверхний индекс с цифрой один","Scaron":"латинская прописная буква S с галочкой","sup2":"верхний индекс два\nверхний индекс с цифрой два\nвозведение в квадрат","acirc":"латинская строчная буква a с циркумфлексом","sube":"является подмножеством или эквивалентно","sup3":"верхний индекс три\nверхний индекс с цифрой три\nвозведение в куб","real":"черная прописная R\nвещественная часть","Iuml":"латинская прописная буква I с тремой","rang":"правая угловая скобка","lsaquo":"одинарная левая угловая кавычка","nabla":"оператор набла\nразностное отношение назад","omicron":"греческая строчная буква омикрон","there4":"следовательно","plusmn":"символ плюс-минус\nсимвол плюса или минуса","rceil":"правая скобка округления вверх","micro":"знак микро","rArr":"двойная стрелка вправо","Delta":"греческая прописная буква дельта","iuml":"латинская строчная буква i с тремой","Tau":"греческая прописная буква тау","times":"знак умножения","yacute":"латинская строчная буква y с акутом","ograve":"латинская строчная буква o с грависом","delta":"греческая строчная буква дельта","Ecirc":"латинская прописная буква E с циркумфлексом","dArr":"двойная стрелка вниз","ntilde":"латинская строчная буква n с тильдой","diams":"бубны","uacute":"латинская строчная буква u с акутом","Otilde":"латинская прописная буква O с тильдой","ecirc":"латинская строчная буква e с циркумфлексом","Upsilon":"греческая прописная буква ипсилон","image":"черная прописная I\nмнимая часть","supe":"включает в себя или эквивалентно","xi":"греческая строчная буква хи","weierp":"рукописная прописная P\nстепенное множество\nфункции Вейерштрасса"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Сохранить"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Вставить символ"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Разделитель страниц"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Предварительный просмотр"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"смех","emoticonCool":"здорово","emoticonTongue":"насмешка","emoticonCrying":"плачь","emoticonOops":"уупс","emoticonFrown":"хмурый вид","emoticonAngry":"злость","emoticonShy":"застенчивость","emoticonNo":"нет","emoticonAngel":"ангел","smiley":"Вставить значок настроения","emoticonIdea":"есть идея","emoticonEyebrow":"удивление","emoticonSmile":"улыбка","emoticonWink":"подмигивание","emoticonYes":"да","emoticonGrin":"усмешка","emoticonGoofy":"глупый","emoticonHalf":"половина"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Показать элементы блока HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Выбрать содержимое","deleteElement":"Удалить элемент","moveEnd":"Поместить курсор в конец","deleteContents":"Удалить содержимое","nodeActions":"${nodeName}: действия","selectElement":"Выбрать элемент","moveStart":"Поместить курсор в начало"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ru/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ru/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ru/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Задать","insertTableTitle":"Вставить таблицу","insertTableRowAfterLabel":"Добавить строку после","center":"по центру","deleteTableColumnLabel":"Удалить столбец","right":"по правому краю","insertTableColumnBeforeLabel":"Добавить столбец перед","tableWidth":"Ширина таблицы:","buttonInsert":"Вставить","default":"по умолчанию","align":"Выровнять:","insertTableRowBeforeLabel":"Добавить строку перед","cellSpacing":"Расстояние между ячейками:","pixels":"пикселов","selectTableLabel":"Выбрать таблицу","rows":"Строк:","modifyTableTitle":"Изменить таблицу","cellPadding":"Отступ внутри ячеек:","deleteTableRowLabel":"Удалить строку","backgroundColor":"Цвет фона:","insertTableColumnAfterLabel":"Добавить столбец после","left":"по левому краю","borderThickness":"Толщина рамки","columns":"Столбцов:","percent":"процентов","borderColor":"Цвет рамки:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/el/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/el/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/el/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Ορισμός","insertTableTitle":"Εισαγωγή πίνακα","insertTableRowAfterLabel":"Προσθήκη γραμμής μετά","center":"κέντρο","deleteTableColumnLabel":"Διαγραφή στήλης","right":"δεξιά","insertTableColumnBeforeLabel":"Προσθήκη στήλης πριν","tableWidth":"Πλάτος πίνακα:","buttonInsert":"Εισαγωγή","default":"προεπιλογή","align":"Στοίχιση:","insertTableRowBeforeLabel":"Προσθήκη γραμμής πριν","cellSpacing":"Απόσταση κελιών","pixels":"εικονοστοιχεία","selectTableLabel":"Επιλογή πίνακα","rows":"Γραμμές:","modifyTableTitle":"Τροποποίηση πίνακα","cellPadding":"Περιθώριο κελιών:","deleteTableRowLabel":"Διαγραφή γραμμής","backgroundColor":"Χρώμα φόντου:","insertTableColumnAfterLabel":"Προσθήκη στήλης μετά","left":"αριστερά","borderThickness":"Πάχος περιγράμματος","columns":"Στήλες:","percent":"ποσοστό","borderColor":"Χρώμα περιγράμματος:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ar/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ar/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ar/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"تحديد","insertTableTitle":"‏ادراج جدول‏","insertTableRowAfterLabel":"اضافة صف بعد","center":"توسيط","deleteTableColumnLabel":"حذف عمود","right":"لليمين","insertTableColumnBeforeLabel":"اضافة عمود قبل","tableWidth":"عرض الجدول:","buttonInsert":"‏ادراج‏","default":"المفترض","align":"محاذاة:","insertTableRowBeforeLabel":"اضافة صف قبل","cellSpacing":"تباعد الخانة:","pixels":"عنصر صورة","selectTableLabel":"تحديد جدول","rows":"الصفوف:","modifyTableTitle":"تعديل جدول","cellPadding":"ملء الخانة:","deleteTableRowLabel":"حذف صف","backgroundColor":"لون الخلفية:","insertTableColumnAfterLabel":"اضافة عمود بعد","left":"لليسار","borderThickness":"سمك الحدود","columns":"الأعمدة:","percent":"نسبة مئوية","borderColor":"لون الحدود:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Vložit symbol"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Zalomení stránky"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Náhled"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"smích","emoticonCool":"skvělé","emoticonTongue":"jazyk","emoticonCrying":"pláč","emoticonOops":"ouha","emoticonFrown":"zamračení","emoticonAngry":"hněv","emoticonShy":"stud","emoticonNo":"ne","emoticonAngel":"anděl","smiley":"Vložit emotikonu","emoticonIdea":"nápad","emoticonEyebrow":"obočí","emoticonSmile":"úsměv","emoticonWink":"mrknutí","emoticonYes":"ano","emoticonGrin":"úšklebek","emoticonGoofy":"potrhlost","emoticonHalf":"polovina"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Zobrazit prvky bloku kódu HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Vybrat obsah","deleteElement":"Odstranit prvek","moveEnd":"Přesunout ukazatel na konec","deleteContents":"Odstranit obsah","nodeActions":"Akce uzlu ${nodeName}","selectElement":"Vybrat prvek","moveStart":"Přesunout ukazatel na začátek"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Nastavit","insertTableTitle":"Vložit tabulku","insertTableRowAfterLabel":"Přidat řádek za","center":"střed","deleteTableColumnLabel":"Odstranit sloupec","right":"vpravo","insertTableColumnBeforeLabel":"Přidat sloupec před","tableWidth":"Šířka tabulky:","buttonInsert":"Vložit","default":"výchozí","align":"Zarovnat:","insertTableRowBeforeLabel":"Přidat řádek před","cellSpacing":"Odstup buněk:","pixels":"pixelů","selectTableLabel":"Vybrat tabulku","rows":"Řádky:","modifyTableTitle":"Upravit tabulku","cellPadding":"Okraj buňky:","deleteTableRowLabel":"Odstranit řádek","backgroundColor":"Barva pozadí:","insertTableColumnAfterLabel":"Přidat sloupec za","left":"vlevo","borderThickness":"TloušťkaOhraničení","columns":"Sloupce:","percent":"procent","borderColor":"Barva ohraničení:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"V opačném směru","findReplace":"Přepnout hledání/nahrazování","replaceAll":"Všechny výskyty","replaceDialogText":"Počet nahrazených výskytů: ${0}. ","replaceButton":"Nahradit","findButton":"Najít","findLabel":"Hledaný řetězec:","matchCase":"S rozlišením velkých a malých písmen","replaceLabel":"Nahrazující řetězec:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"menší než nebo rovno","prod":"n-ární součin\nznak součin","zwj":"spojení, nulová šířka","mdash":"dlouhá pomlčka","frasl":"lomítko u zlomků","upsih":"symbol řeckého písmena ypsilon se zahnutým háčkem","prop":"úměrné","middot":"tečka uprostřed","hellip":"vodorovná výpustka\ntři tečky","eta":"malé řecké písmeno éta","iacute":"malé písmeno i s čárkou","yen":"znak yen\nznak yuan","rlm":"značka směru zprava doleva","macr":"nadtržítko","ldquo":"levé uvozovky","Icirc":"velké písmeno I se stříškou","OElig":"slitek OE, velký","hArr":"dvojitá šipka doleva a doprava","eth":"malé písmeno eth","divide":"znak dělení","chi":"malé řecké písmeno chí","eacute":"malé písmeno e s čárkou","icirc":"malé písmeno i se stříškou","iexcl":"obrácený vykřičník","ETH":"velké písmeno ETH","acute":"čárka nahoře","crarr":"šipka dolů zahnutá doleva\nnávrat vozíku, konec řádku","mu":"malé řecké písmeno mí","AElig":"velké písmeno AE\nslitek AE, velký","aacute":"malé písmeno a s čárkou","lambda":"malé řecké písmeno lambda","THORN":"velké písmeno THORN","asymp":"téměř rovno\nasymptotické k","fnof":"malé písmeno f se zahnutým háčkem\nfunkce\nflorin","lang":"levá lomená závorka","cup":"sjednocení\noblouk vypouklý dolů","ne":"není rovno","Sigma":"velké řecké písmeno sigma","oelig":"slitek oe, malý","cent":"znak cent","ni":"obsahuje jako člena","dagger":"křížek","permil":"znak promile","Omicron":"velké řecké písmeno omikrón","sigma":"malé řecké písmeno sigma","euro":"znak euro","Yacute":"velké písmeno Y s čárkou","thorn":"malé písmeno thorn","lceil":"levá horní celá část","Ograve":"velké písmeno O s obrácenou čárkou","rarr":"šipka doprava","nu":"malé řecké písmeno ný","emsp":"široká mezera","Theta":"velké řecké písmeno théta","lArr":"dvojitá šipka doleva","tau":"malé řecké písmeno tau","aelig":"malé písmeno ae\nslitek ae, malý","ccedil":"malé písmeno c se spodním háčkem","Ntilde":"velké písmeno N s vlnovkou","cong":"přibližně rovno","Uacute":"velké písmeno U s čárkou","theta":"malé řecké písmeno théta","darr":"šipka dolů","Uuml":"velké písmeno U s přehláskou","bdquo":"dolní uvozovky","Aring":"velké písmeno A s kroužkem nahoře","sigmaf":"malé řecké písmeno koncové sigma","pound":"znak libra","uArr":"dvojitá šipka nahoru","sub":"podmnožina","aring":"malé písmeno a s kroužkem nahoře","sdot":"operátor tečka","thinsp":"zúžená mezera","or":"logický operátor nebo\nklín s hrotem dolů","Eacute":"velké písmeno E s čárkou","shy":"spojovník\nrozdělovník","curren":"znak měna","loz":"kosočtverec","not":"znak negace","tilde":"malá vlnovka","sum":"n-ární součet","spades":"piky","Psi":"velké řecké písmeno psí","ndash":"krátká pomlčka","sup":"nadmnožina","atilde":"malé písmeno a s vlnovkou","clubs":"kříže\ntrojlístek","uuml":"malé písmeno u s přehláskou","Aacute":"velké písmeno A s čárkou","rsaquo":"pravá šipka","otimes":"znak násobení v kroužku\nvektorový součin","lfloor":"levá dolní celá část","zwnj":"zákaz spojení, nulová šířka","sim":"operátor tilda\nzměna podle\npodobné","Iota":"velké řecké písmeno jóta","Iacute":"velké písmeno I s čárkou","pi":"malé řecké písmeno pí","ordf":"indikátor ženského rodu","frac12":"jednoduchý zlomek jedna polovina\nzlomek jedna polovina","frac14":"jednoduchý zlomek jedna čtvrtina\nzlomek jedna čtvrtina","alefsym":"symbol alef\nprvní transfinitní kardinál","bull":"odrážka\nmalý černý kroužek","deg":"znak stupeň","ordm":"indikátor mužského rodu","epsilon":"malé řecké písmeno epsilon","equiv":"shodné s","Dagger":"dvojitý křížek","brvbar":"přerušená čára\npřerušená svislá čára","harr":"šipka doleva a doprava","ugrave":"malé písmeno u s obrácenou čárkou","oslash":"malé písmeno o s přeškrtnutím","Yuml":"velké písmeno Y s přehláskou","hearts":"srdce\nvalentýn","Xi":"velké řecké písmeno ksí","Prime":"dvojitá čárka nahoře\nsekundy\npalce","iota":"malé řecké písmeno jóta","Ccedil":"velké písmeno C se spodním háčkem","Lambda":"velké řecké písmeno lambda","raquo":"dvojitá pravá šipka","Phi":"velké řecké písmeno fí","prime":"čárka nahoře\nminuty\nstopy","nsub":"není podmnožinou","copy":"znak copyright","yuml":"malé písmeno y s přehláskou","Rho":"velké řecké písmeno ró","Ucirc":"velké písmeno U se stříškou","Kappa":"velké řecké písmeno kappa","ucirc":"malé písmeno u se stříškou","sbquo":"dolní apostrof","igrave":"malé písmeno i s obrácenou čárkou","reg":"znak registrováno\nznak registrovaná ochranná známka","infin":"nekonečno","iquest":"obrácený otazník\notočený otazník","circ":"stříška, modifikátor písmen","kappa":"malé řecké písmeno kappa","lrm":"značka směru zleva doprava","Atilde":"velké písmeno A s vlnovkou","larr":"šipka doleva","frac34":"jednoduchý zlomek tři čtvrtiny\nzlomek tři čtvrtiny","oacute":"malé písmeno o s čárkou","rsquo":"pravý apostrof","egrave":"malé písmeno e s obrácenou čárkou","oline":"nadtržítko\npruh","Mu":"velké řecké písmeno mí","exist":"existuje","cap":"průnik\noblouk vypouklý nahoru","and":"logický operátor a\nklín s hrotem nahoru","Ouml":"velké písmeno O s přehláskou","agrave":"malé písmeno a s obrácenou čárkou","uarr":"šipka nahoru","ang":"úhel","Zeta":"velké řecké písmeno zéta","scaron":"malé písmeno s s háčkem","Gamma":"velké řecké písmeno gama","isin":"prvek množiny","Auml":"velké písmeno A s přehláskou","empty":"prázdná množina\nnulová množina\nprůměr","gamma":"malé řecké písmeno gama","para":"znak konec odstavce","ge":"větší než nebo rovno","psi":"malé řecké písmeno psí","Alpha":"velké řecké písmeno alfa","Nu":"velké řecké písmeno ný","ouml":"malé písmeno o s přehláskou","zeta":"malé řecké písmeno zéta","alpha":"malé řecké písmeno alfa","part":"parciální diferenciál","auml":"malé písmeno a s přehláskou","Ugrave":"velké písmeno U s obrácenou čárkou","Oslash":"velké písmeno O s přeškrtnutím","Epsilon":"velké řecké písmeno epsilon","int":"integrál","Omega":"velké řecké písmeno ómega","perp":"kolmice\nortogonální k\nkolmé na","uml":"vodorovná dvojtečka\npřehláska","upsilon":"malé řecké písmeno ypsilon","lowast":"operátor hvězdička","omega":"malé řecké písmeno ómega","otilde":"malé písmeno o s vlnovkou","Egrave":"velké písmeno E s obrácenou čárkou","phi":"malé řecké písmeno fí","ensp":"úzká mezera","Euml":"velké písmeno E s přehláskou","cedil":"cedilla\nspodní háček","laquo":"dvojitá levá šipka","forall":"pro všechny","thetasym":"symbol malého řeckého písmena théta","Agrave":"velké písmeno A s obrácenou čárkou","szlig":"malé písmeno ostré s","Pi":"velké řecké písmeno pí","rho":"malé řecké písmeno ró","trade":"znak ochranná známka","Igrave":"velké písmeno I s obrácenou čárkou","minus":"znak minus","Beta":"velké řecké písmeno beta","Ocirc":"velké písmeno O se stříškou","rdquo":"pravé uvozovky","Eta":"velké řecké písmeno éta","rfloor":"pravá dolní celá část","Oacute":"velké písmeno O s čárkou","euml":"malé písmeno e s přehláskou","oplus":"znak plus v kroužku\npřímý součet","ocirc":"malé písmeno o se stříškou","radic":"druhá odmocnina","Chi":"velké řecké písmeno chí","notin":"není prvkem množiny","sect":"znak paragraf","Acirc":"velké písmeno A se stříškou","lsquo":"levý apostrof","beta":"malé řecké písmeno beta","piv":"řecký symbol pí","sup1":"1, horní index","Scaron":"velké písmeno S s háčkem","sup2":"2, horní index\ndruhá mocnina\nplošná míra","acirc":"malé písmeno a se stříškou","sube":"podmnožina nebo shodné s","sup3":"3, horní index\ntřetí mocnina\nkrychlová míra","real":"velké písmeno R, švabach\nsymbol reálné části","Iuml":"velké písmeno I s přehláskou","rang":"pravá lomená závorka","lsaquo":"levá šipka","nabla":"nabla\nzpětná diference","omicron":"malé řecké písmeno omikrón","there4":"a proto","plusmn":"znak plus-minus\nznak plus nebo minus","rceil":"pravá horní celá část","micro":"znak mikro","rArr":"dvojitá šipka doprava","Delta":"velké řecké písmeno delta","iuml":"malé písmeno i s přehláskou","Tau":"velké řecké písmeno tau","times":"znak násobení","yacute":"malé písmeno y s čárkou","ograve":"malé písmeno o s obrácenou čárkou","delta":"malé řecké písmeno delta","Ecirc":"velké písmeno E se stříškou","dArr":"dvojitá šipka dolů","ntilde":"malé písmeno n s vlnovkou","diams":"káry","uacute":"malé písmeno u s čárkou","Otilde":"velké písmeno O s vlnovkou","ecirc":"malé písmeno e se stříškou","Upsilon":"velké řecké písmeno ypsilon","image":"velké písmeno I, švabach\nimaginární část","supe":"nadmnožina nebo shodné s","xi":"malé řecké písmeno ksí","weierp":"stylizované velké písmeno P\npotenční množina\nWeierstrassovo písmeno p"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/cs/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/cs/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/cs/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Uložit"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"risa","emoticonCool":"guay","emoticonTongue":"burlón","emoticonCrying":"llorando","emoticonOops":"lo siento","emoticonFrown":"ceño fruncido","emoticonAngry":"enfadado","emoticonShy":"tímido","emoticonNo":"no","emoticonAngel":"ángel","smiley":"Insertar emoticono","emoticonIdea":"idea","emoticonEyebrow":"ceja levantada","emoticonSmile":"sonrisa","emoticonWink":"guiño","emoticonYes":"sí","emoticonGrin":"carcajada","emoticonGoofy":"patoso","emoticonHalf":"escéptico"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Mostrar elementos de bloque HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Seleccionar contenido","deleteElement":"Suprimir elemento","moveEnd":"Mover cursor al final","deleteContents":"Suprimir contenido","nodeActions":"Acciones de ${nodeName}","selectElement":"Seleccionar elemento","moveStart":"Mover cursor al inicio"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Establecer","insertTableTitle":"Insertar tabla","insertTableRowAfterLabel":"Añadir fila después","center":"centro","deleteTableColumnLabel":"Suprimir columna","right":"derecha","insertTableColumnBeforeLabel":"Añadir columna antes","tableWidth":"Ancho de tabla:","buttonInsert":"Insertar","default":"default","align":"Alinear:","insertTableRowBeforeLabel":"Añadir fila antes","cellSpacing":"Espaciado de celda:","pixels":"píxeles","selectTableLabel":"Seleccionar tabla","rows":"Filas:","modifyTableTitle":"Modificar tabla","cellPadding":"Relleno de celda:","deleteTableRowLabel":"Suprimir fila","backgroundColor":"Color de fondo:","insertTableColumnAfterLabel":"Añadir columna después","left":"izquierda","borderThickness":"Ancho de borde","columns":"Columnas:","percent":"por ciento","borderColor":"Color de borde:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Hacia atrás","findReplace":"Conmutar Buscar/Sustituir","replaceAll":"Todas las apariciones","replaceDialogText":"Se han sustituido ${0} apariciones.","replaceButton":"Sustituir","findButton":"Buscar","findLabel":"Buscar:","matchCase":"Coincidir mayúsculas y minúsculas","replaceLabel":"Sustituir por:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"menor o igual que","prod":"productoria\nmultiplicatoria","zwj":"conector de anchura cero","mdash":"guión largo","frasl":"barra de fracción","upsih":"símbolo de letra ípsilon griega con gancho","prop":"proporcional","middot":"punto medio\ncoma georgiana\npunto medio griego","hellip":"puntos suspensivos","eta":"letra eta griega minúscula","iacute":"letra i latina minúscula con acento agudo","yen":"símbolo del yen\nsímbolo de yuan","rlm":"marca de derecha a izquierda","macr":"macrón\ndiacrítico largo\nlínea superior\nbarra superior APL","ldquo":"comillas dobles abiertas","Icirc":"letra I latina mayúscula con acento circunflejo","OElig":"ligadura de OE latinas mayúsculas","hArr":"doble flecha izquierda-derecha","eth":"letra eth latina minúscula","divide":"signo de división","chi":"letra chi griega minúscula","eacute":"letra e latina minúscula con acento agudo","icirc":"letra i latina minúscula con acento circunflejo","iexcl":"signo de exclamación inicial","ETH":"letra ETH latina mayúscula","acute":"acento agudo\nagudo de espaciado","crarr":"flecha esquinada abajo a la izquierda\nretorno de carro","mu":"letra mu griega minúscula","AElig":"diptongo AE latinas mayúsculas\nligadura de AE latinas mayúsculas","aacute":"letra a latina minúscula con acento agudo","lambda":"letra lambda griega minúscula","THORN":"letra THORN latina mayúscula","asymp":"parecido\ncasi igual a","fnof":"letra f latina minúscula con gancho\nfunción\nflorín","lang":"corchete angular hacia la izquierda","cup":"unión\nconjuntos","ne":"no igual a","Sigma":"letra sigma griega mayúscula","oelig":"ligadura de oe latinas minúsculas","cent":"símbolo de centavos","ni":"está incluido","dagger":"daga","permil":"signo de por mil","Omicron":"letra ómicron griega mayúscula","sigma":"letra sigma griega minúscula","euro":"signo del euro","Yacute":"letra Y latina mayúscula con acento agudo","thorn":"letra thorn latina minúscula","lceil":"parte superior de corchete abierto","Ograve":"letra O latina mayúscula con acento grave","rarr":"flecha a la derecha","nu":"letra nu griega minúscula","emsp":"espacio largo","Theta":"letra theta griega mayúscula","lArr":"doble flecha a la izquierda","tau":"letra tau griega minúscula","aelig":"Diptongo ae latinas minúsculas\nligadura de ae latinas minúsculas","ccedil":"letra c latina minúscula con cedilla","Ntilde":"letra N latina mayúscula con virgulilla\nletra N latina mayúscula con tilde\nletra Ñ latina mayúscula","cong":"aproximadamente igual a","Uacute":"letra U latina mayúscula con acento agudo","theta":"letra theta griega minúscula","darr":"flecha hacia abajo","Uuml":"letra U latina mayúscula con diéresis","bdquo":"comillas dobles inferiores","Aring":"letra A latina mayúscula con anillo encima\nletra A latina mayúscula con anillo","sigmaf":"letra sigma final griega minúscula","pound":"símbolo libra esterlina","uArr":"doble flecha hacia arriba","sub":"subconjunto de","aring":"letra a latina minúscula con anillo encima\nletra a latina minúscula con anillo","sdot":"operador punto","thinsp":"espacio estrecho","or":"o lógico\nuve","Eacute":"letra E latina mayúscula con acento agudo","shy":"signo de guión corto","curren":"símbolo monetario","loz":"rombo","not":"signo de negación","tilde":"tilde pequeña","sum":"sumatoria","spades":"palo de picas","Psi":"letra psi griega mayúscula","ndash":"guión","sup":"superconjunto de","atilde":"letra a latina minúscula con virgulilla\nletra a latina minúscula con tilde","clubs":"palo de tréboles","uuml":"letra u latina minúscula con diéresis","Aacute":"letra A latina mayúscula con acento agudo","rsaquo":"comilla simple angular cerrada","otimes":"cruz en círculo\nproducto vectorial","lfloor":"parte inferior de corchete abierto","zwnj":"separador de anchura cero","sim":"operador de tilde\nno lógico\nparecido a","Iota":"letra iota griega mayúscula","Iacute":"letra I latina mayúscula con acento agudo","pi":"letra pi griega minúscula","ordf":"indicador de ordinal femenino","frac12":"fracción de medio vulgar\nfracción de medio","frac14":"fracción de cuarto vulgar\nfracción de cuarto","alefsym":"símbolo alef\nprimer número transfinito","bull":"viñeta\ncírculo negro pequeño","deg":"signo de grados","ordm":"indicador de ordinal masculino","epsilon":"letra épsilon griega minúscula","equiv":"idéntico a","Dagger":"daga doble","brvbar":"barra dividida\nbarra vertical dividida","harr":"flecha izquierda-derecha","ugrave":"letra u latina minúscula con acento grave","oslash":"letra o latina minúscula con barra\nletra o latina minúscula con barra inclinada","Yuml":"letra Y latina mayúscula con diéresis","hearts":"palo de corazones","Xi":"letra xi griega mayúscula","Prime":"símbolo primo doble\nsegundos\npulgadas","iota":"letra iota griega minúscula","Ccedil":"letra C latina mayúscula con cedilla","Lambda":"letra lambda griega mayúscula","raquo":"comillas dobles en ángulo a la derecha","Phi":"letra phi griega mayúscula","prime":"símbolo primo\nminutos\npies","nsub":"no un subconjunto de","copy":"símbolo de copyright","yuml":"letra y latina minúscula con diéresis","Rho":"letra rho griega mayúscula","Ucirc":"letra U latina mayúscula con acento circunflejo","Kappa":"letra kappa griega mayúscula","ucirc":"letra u latina minúscula con acento circunflejo","sbquo":"comilla simple inferior","igrave":"letra i latina minúscula con acento grave","reg":"símbolo de registrado\nsímbolo de marca registrada","infin":"infinito","iquest":"signo de interrogación inicial\nsigno de apertura de interrogación","circ":"acento circunflejo","kappa":"letra kappa griega minúscula","lrm":"marca de izquierda a derecha","Atilde":"letra A latina mayúscula con virgulilla\nletra A latina mayúscula con tilde","larr":"flecha a la izquierda","frac34":"fracción de tres cuartos vulgar\nfracción de tres cuartos","oacute":"letra o latina minúscula con acento agudo","rsquo":"comilla simple cerrada","egrave":"letra e latina minúscula con acento grave","oline":"sobrelínea\nsobre la letra","Mu":"letra mu griega mayúscula","exist":"existe","cap":"intersección\nconjuntos","and":"y lógico\ncuña","Ouml":"letra O latina mayúscula con diéresis","agrave":"letra a latina minúscula con acento grave\nletra a latina minúscula grave","uarr":"flecha hacia arriba","ang":"ángulo","Zeta":"letra zeta griega mayúscula","scaron":"letra s latina minúscula con anticircunflejo","Gamma":"letra gamma griega mayúscula","isin":"pertenece","Auml":"letra A latina mayúscula con diéresis","empty":"conjunto vacío\nconjunto nulo\ndiámetro","gamma":"letra gamma griega minúscula","para":"signo de párrafo","ge":"mayor o igual que","psi":"letra psi griega minúscula","Alpha":"letra alpha griega mayúscula","Nu":"letra nu griega mayúscula","ouml":"letra o latina minúscula con diéresis","zeta":"letra zeta griega minúscula","alpha":"letra alpha griega minúscula","part":"derivada parcial","auml":"letra a latina minúscula con diéresis","Ugrave":"letra U latina mayúscula con acento grave","Oslash":"letra O latina mayúscula con barra\nletra O latina mayúscula con barra inclinada","Epsilon":"letra épsilon griega mayúscula","int":"integral","Omega":"letra omega griega mayúscula","perp":"ortogonal a\nperpendicular","uml":"diéresis\ndiéresis de espaciado","upsilon":"letra ípsilon griega minúscula","lowast":"operador asterisco","omega":"letra omega griega minúscula","otilde":"letra o latina minúscula con virgulilla\nletra o latina minúscula con tilde","Egrave":"letra E latina mayúscula con acento grave","phi":"letra phi griega minúscula","ensp":"espacio","Euml":"letra E latina mayúscula con acento diéresis","cedil":"cedilla\ncedilla de espaciado","laquo":"comillas dobles en ángulo a la izquierda","forall":"para todo","thetasym":"símbolo de letra theta griega minúscula","Agrave":"letra A latina mayúscula con acento grave\nletra A latina mayúscula grave","szlig":"letra s fuerte latina minúscula\nEszet","Pi":"letra pi griega mayúscula","rho":"letra rho griega minúscula","trade":"símbolo de marca registrada","Igrave":"letra I latina mayúscula con acento grave","minus":"signo menos","Beta":"letra beta griega mayúscula","Ocirc":"letra O latina mayúscula con acento circunflejo","rdquo":"comillas dobles cerradas","Eta":"letra eta griega mayúscula","rfloor":"parte inferior de corchete abierto","Oacute":"letra O latina mayúscula con acento agudo","euml":"letra e latina minúscula con diéresis","oplus":"más en círculo\nsuma directa","ocirc":"letra o latina minúscula con acento circunflejo","radic":"raíz cuadrada\nsigno radical","Chi":"letra chi griega mayúscula","notin":"no pertenece","sect":"signo de sección","Acirc":"letra A latina mayúscula con acento circunflejo","lsquo":"comilla simple abierta","beta":"letra beta griega minúscula","piv":"símbolo pi griego","sup1":"superíndice uno\nsuperíndice de dígito uno","Scaron":"letra S latina mayúscula con anticircunflejo","sup2":"superíndice dos\nsuperíndice de dígito dos\nelevado al cuadrado","acirc":"letra a latina minúscula con acento circunflejo","sube":"subconjunto de o igual a","sup3":"superíndice tres\nsuperíndice de dígito tres\nelevado al cubo","real":"letra R mayúscula\nnúmeros reales","Iuml":"letra I latina mayúscula con diéresis","rang":"corchete angular hacia la derecha","lsaquo":"comilla simple angular abierta","nabla":"nabla\ngradiente","omicron":"letra ómicron griega minúscula","there4":"por lo tanto","plusmn":"signo de más-menos\nsigno de más o menos","rceil":"parte superior de corchete cerrado","micro":"signo de micro","rArr":"doble flecha a la derecha","Delta":"letra delta griega mayúscula","iuml":"letra i latina minúscula con diéresis","Tau":"letra tau griega mayúscula","times":"signo de multiplicación","yacute":"letra y latina minúscula con acento agudo","ograve":"letra o latina minúscula con acento grave","delta":"letra delta griega minúscula","Ecirc":"letra E latina mayúscula con acento circunflejo","dArr":"doble flecha hacia abajo","ntilde":"letra n latina minúscula con virgulilla\nletra n latina minúscula con tilde","diams":"palo de diamantes","uacute":"letra u latina minúscula con acento agudo","Otilde":"letra O latina mayúscula con virgulilla\nletra O latina mayúscula con tilde","ecirc":"letra e latina minúscula con acento circunflejo","Upsilon":"letra ípsilon griega mayúscula","image":"letra I mayúscula\nnúmeros imaginarios","supe":"superconjunto de o igual a","xi":"letra xi griega minúscula","weierp":"letra P mayúscula cursiva"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Guardar"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Insertar símbolo"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Salto de página"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/es/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/es/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/es/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Previsualización"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/PasteFromWord.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/PasteFromWord.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/PasteFromWord.js	(revision 9)
@@ -0,0 +1 @@
+({"pasteFromWord":"Paste From  Word","paste":"Paste","cancel":"Cancel","instructions":"Paste the content from Word into the text box below.  Once you are satisfied with the content to insert, press the paste button.  To abort inserting text, press the cancel button."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"컨텐츠 선택","deleteElement":"요소 삭제","moveEnd":"커서를 이동하여 종료","deleteContents":"컨텐츠 삭제","nodeActions":"${nodeName} 조치","selectElement":"요소 선택","moveStart":"커서를 이동하여 시작"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"설정","insertTableTitle":"테이블 삽입","insertTableRowAfterLabel":"사후 행 추가","center":"가운데","deleteTableColumnLabel":"열 삭제","right":"오른쪽","insertTableColumnBeforeLabel":"사전 열 추가","tableWidth":"테이블 너비:","buttonInsert":"삽입","default":"기본값","align":"맞추기:","insertTableRowBeforeLabel":"사전 행 추가","cellSpacing":"셀 간격:","pixels":"픽셀","selectTableLabel":"테이블 선택","rows":"행:","modifyTableTitle":"테이블 수정","cellPadding":"셀 채우기:","deleteTableRowLabel":"행 삭제","backgroundColor":"배경색:","insertTableColumnAfterLabel":"사후 열 추가","left":"왼쪽","borderThickness":"테두리 굵기","columns":"열:","percent":"백분율","borderColor":"테두리 색:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"뒤로","findReplace":"토글 찾기/바꾸기","replaceAll":"모두 바꾸기","replaceDialogText":"${0}개를 바꿨습니다.","replaceButton":"바꾸기","findButton":"찾기","findLabel":"찾을 문자열:","matchCase":"대소문자 일치","replaceLabel":"바꿀 대상:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"적거나 같다","prod":"n-ary product\n결과 기호","zwj":"제로 너비 조이너","mdash":"em 대시","frasl":"분수 사선","upsih":"그리스 upsilon에 고리 기호","prop":"비례","middot":"중앙 점\n중앙 점\n중앙 점","hellip":"수평 세 점\n수평 세 점","eta":"그리스소문자 eta","iacute":"라틴소문자 i 액센트","yen":"엔화 기호\n엔화 기호","rlm":"오른쪽에서 왼쪽으로 표시","macr":"장음 기호\n장음 기호\n장음 기호\n장음 기호","ldquo":"왼쪽 이중 따옴표","Icirc":"라틴대문자 I 위 꺾음 표시","OElig":"라틴대문자 ligature OE","hArr":"좌우 이중 화살표","eth":"라틴소문자 eth","divide":"나눗셈 기호","chi":"그리스소문자 chi","eacute":"라틴소문자 e 위 액센트","icirc":"라틴소문자 i 위 꺾음 표시","iexcl":"거꾸로 느낌표","ETH":"라틴대문자 ETH","acute":"양음 액센트\n양음 액센트","crarr":"캐리지 리턴\n캐리지 리턴]","mu":"그리스소문자 mu","AElig":"라틴대문자 AE\n라틴대문자 AE","aacute":"라틴소문자 a 위 액센트","lambda":"그리스소문자 lambda","THORN":"라틴대문자 THORN","asymp":"거의 같다\n거의 같다","fnof":"라틴소문자 f에 고리 첨부\n라틴소문자 f에 고리 첨부\n라틴소문자 f에 고리 첨부","lang":"왼쪽 열린 각도","cup":"유니온\n컵","ne":"같지 않다","Sigma":"그리스대문자 sigma","oelig":"라틴소문자 ligature oe","cent":"센트 기호","ni":"멤버로 포함","dagger":"dagger","permil":"퍼밀 기호","Omicron":"그리스대문자 omicron","sigma":"그리스소문자 sigma","euro":"euro 기호","Yacute":"라틴대문자 Y 위 액센트","thorn":"라틴소문자 thorn","lceil":"왼쪽 씰링\nAPL 업스타일","Ograve":"라틴대문자 O 위 역액센트","rarr":"오른쪽 화살표","nu":"그리스소문자 nu","emsp":"em 공간","Theta":"그리스대문자 theta","lArr":"왼쪽 이중 화살표","tau":"그리스소문자 tau","aelig":"라틴소문자 ae\n라틴소문자 ae","ccedil":"라틴소문자 c 갈고리형 부호","Ntilde":"라틴대문자 N 위 물결 표시","cong":"대략 같다","Uacute":"라틴대문자 U 위 액센트","theta":"그리스소문자 theta","darr":"아래쪽 화살표","Uuml":"라틴대문자 U 위 두점 표시","bdquo":"이중 바닥 따옴표","Aring":"라틴대문자 A 위 원 표시\n라틴대문자 A 위 원 표시","sigmaf":"그리스소문자 final sigma","pound":"파운드 기호","uArr":"위쪽 이중 화살표","sub":"부분 집합","aring":"라틴소문자 a 위 원 표시\n라틴소문자 a 위 원 표시","sdot":"도트 연산자","thinsp":"씬 공간","or":"논리적 or\nvee","Eacute":"라틴대문자 E 위 액센트","shy":"부드러운 하이픈\n부드러운 하이픈","curren":"통화 기호","loz":"마름모","not":"not 기호","tilde":"소문자 위 물결 표시","sum":"n-ary 합","spades":"블랙 스페이드","Psi":"그리스대문자 psi","ndash":"en 대시 ","sup":"상위 집합","atilde":"라틴소문자 a 위 물결 표시","clubs":"블랙 크로버\n블랙 크로버","uuml":"라틴소문자 u 위 두점 표시","Aacute":"라틴대문자 A 위 액센트","rsaquo":"단일 오른쪽으로 각 따옴","otimes":"circled times\nvector product","lfloor":"왼쪽 플로어\nAPL 다운스타일","zwnj":"제로 너비 비조이너","sim":"물결 표시\n물결 표시\n유사함","Iota":"그리스대문자 iota","Iacute":"라틴대문자 I 위 액센트","pi":"그리스소문자 pi","ordf":"줄 위의 소문자 a","frac12":"이분의 일\n이분의 일","frac14":"사분의 일\n사분의 일","alefsym":"alef 기호\nalef 기호","bull":"검은 원\n검은 원","deg":"도 기호","ordm":"줄 위의 작은 원","epsilon":"그리스소문자 epsilon","equiv":"합동, 같다","Dagger":"이중 dagger","brvbar":"수직 바\n수직 바","harr":"좌우 화살표","ugrave":"라틴소문자 u 위 역액센트","oslash":"라틴소문자 o 슬래시 첨부\n라틴소문자 o 슬래시 첨부","Yuml":"라틴대문자 Y 위 두점 표시","hearts":"블랙 하트\n블랙 하트","Xi":"그리스대문자 xi","Prime":"이중 프라임\n초\n인치","iota":"그리스소문자 iota","Ccedil":"라틴대문자 C 갈고리형 부호","Lambda":"그리스대문자 lambda","raquo":"이중 꺾어 닫음\n이중 꺾어 닫음","Phi":"그리스대문자 phi","prime":"프라임\n분\n피트","nsub":"부분 집합이 아님","copy":"저작권","yuml":"라틴소문자 y 위 두점 표시","Rho":"그리스대문자 rho","Ucirc":"라틴대문자 U 위 꺾음 표시","Kappa":"그리스대문자 kappa","ucirc":"라틴소문자 u 위 꺾음 표시","sbquo":"단일 바닥 따옴표","igrave":"라틴소문자 i 위 역액센트","reg":"등록 상표 기호\n등록 상표 기호","infin":"무한대","iquest":"거꾸로 물음표\n거꾸로 물음표","circ":"위 꺾기","kappa":"그리스소문자 kappa","lrm":"왼쪽에서 오른쪽으로 표시","Atilde":"라틴대문자 A 위 물결 표시","larr":"왼쪽 화살표","frac34":"사분의 삼\n사분의 삼","oacute":"라틴소문자 o 위 액센트","rsquo":"오른쪽 단일 따옴표","egrave":"라틴소문자 e  위 역액센트","oline":"윗 줄\n윗 줄","Mu":"그리스대문자 mu","exist":"존재","cap":"inter 항목\n모자","and":"논리적 and\nwedge","Ouml":"라틴대문자 O 위 두점 표시","agrave":"라틴소문자 a 위 역액센트\n라틴소문자 a 위 역액센트","uarr":"위쪽 화살표","ang":"각도","Zeta":"그리스대문자 zeta","scaron":"라틴소문자 s 위 v 표","Gamma":"그리스대문자 gamma","isin":"..의 요소","Auml":"라틴대문자 A 위 두점 표시","empty":"없음\n널\n직경","gamma":"그리스소문자 gamma","para":"문단 기호\n문단 기호","ge":"크거나 같다","psi":"그리스소문자 psi","Alpha":"그리스대문자 alpha","Nu":"그리스대문자 nu","ouml":"라틴소문자 o 위 두점 표시","zeta":"그리스소문자 zeta","alpha":"그리스소문자 alpha","part":"부분적으로 다름","auml":"라틴소문자 a 위 두점 표시","Ugrave":"라틴대문자 U 위 역액센트","Oslash":"라틴대문자 O 슬래시 첨부","Epsilon":"그리스대문자 epsilon","int":"인티그랄","Omega":"그리스대문자 omega","perp":"수직\n수직\n수직","uml":"두점 표시\n두점 표시","upsilon":"그리스소문자 upsilon","lowast":"별표 연산자","omega":"그리스소문자 omega","otilde":"라틴소문자 o 위 물결 표시","Egrave":"라틴대문자 E 위 역액센트","phi":"그리스소문자 phi","ensp":"en 공간","Euml":"라틴대문자 E 위 두점 표시","cedil":"갈고리형 부호\n갈고리형 부호","laquo":"이중 꺾어 열음\n이중 꺾어 열음","forall":"거꾸로 A","thetasym":"그리스소문자 theta symbol","Agrave":"라틴대문자 A 위 역액센트\n라틴대문자 A 위 역액센트","szlig":"라틴소문자 sharp\n라틴소문자 sharp","Pi":"그리스대문자 pi","rho":"그리스소문자 rho","trade":"TM(trade mark) 기호","Igrave":"라틴대문자 I 위 역액센트","minus":"마이너스 기호","Beta":"그리스대문자 beta","Ocirc":"라틴대문자 O 위 꺾음 표시","rdquo":"오른쪽 이중 따옴표","Eta":"그리스대문자 eta","rfloor":"오른쪽 플로어","Oacute":"라틴대문자 O 위 액센트","euml":"라틴소문자 e 위 두점 표시","oplus":"circled plus\ndirect sum","ocirc":"라틴소문자 o 위 꺾음 표시","radic":"제곱근 기호\n근호","Chi":"그리스대문자 chi","notin":"..의 요소가 아님","sect":"섹션 기호","Acirc":"라틴대문자 A 위 꺾음 표시","lsquo":"왼쪽 단일 따옴표","beta":"그리스소문자 beta","piv":"그리스 pi symbol","sup1":"위첨자 1\n위첨자 1","Scaron":"라틴대문자 S 위 v 표 ","sup2":"위첨자 2\n위첨자 2\n위첨자 2","acirc":"라틴소문자 a 위 꺾음 표시","sube":"부분 집합이거나 같다","sup3":"위첨자 3\n위첨자 3\n위첨자 3","real":"검정 글자 대문자 R\n검정 글자 대문자 R","Iuml":"라틴대문자 I 위 두점 표시","rang":"오른쪽 열린 각도","lsaquo":"단일 왼쪽으로 각 따옴","nabla":"역 삼각형\n역 삼각형","omicron":"그리스소문자 omicron","there4":"따라서","plusmn":"플러스 마이너스\n플러스 마이너스","rceil":"오른쪽 씰링","micro":"마이크로 기호","rArr":"오른쪽 이중 화살표","Delta":"그리스대문자 delta","iuml":"라틴소문자 i 위 두점 표시","Tau":"그리스대문자 tau","times":"곱셈 기호","yacute":"라틴소문자 y 위 액센트","ograve":"라틴소문자 o 위 역액센트","delta":"그리스소문자 delta","Ecirc":"라틴대문자 E 위 꺾음 표시","dArr":"아래쪽 이중 화살표","ntilde":"라틴소문자 n 위 물결 표시","diams":"블랙 다이아몬드","uacute":"라틴소문자 u 위 액센트","Otilde":"라틴대문자 O 위 물결 표시","ecirc":"라틴소문자 e 위 꺾음 표시","Upsilon":"그리스대문자 upsilon","image":"검정 글자 대문자 I\n검정 글자 대문자 I","supe":"상위 집합이거나 같다","xi":"그리스소문자 xi","weierp":"script 대문자 P\nscript 대문자 P\nscript 대문자 P"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"저장"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"기호 삽입"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"페이지 나누기"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"미리보기"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"하하","emoticonCool":"멋진데","emoticonTongue":"메롱","emoticonCrying":"울음","emoticonOops":"어머나","emoticonFrown":"불만","emoticonAngry":"화남","emoticonShy":"부끄러움","emoticonNo":"아니오","emoticonAngel":"천사","smiley":"이모티콘 삽입","emoticonIdea":"아이디어","emoticonEyebrow":"글쎄","emoticonSmile":"미소","emoticonWink":"윙크","emoticonYes":"예","emoticonGrin":"씨익","emoticonGoofy":"바보","emoticonHalf":"고민 중"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ko/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ko/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ko/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"HTML 블록 요소 표시"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Save"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Seleziona contenuto","deleteElement":"Elimina elemento","moveEnd":"Sposta il cursore per terminare","deleteContents":"Elimina contenuto","nodeActions":"Azioni ${nodeName}","selectElement":"Seleziona elemento","moveStart":"Sposta il cursore per iniziare"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Imposta","insertTableTitle":"Inserisci tabella","insertTableRowAfterLabel":"Inserisci riga dopo","center":"centro","deleteTableColumnLabel":"Elimina colonna","right":"destra","insertTableColumnBeforeLabel":"Aggiungi colonna prima","tableWidth":"Larghezza tabella:","buttonInsert":"Inserisci","default":"predefinito","align":"Allinea:","insertTableRowBeforeLabel":"Inserisci riga prima","cellSpacing":"Spaziatura celle:","pixels":"pixel","selectTableLabel":"Seleziona tabella","rows":"Righe:","modifyTableTitle":"Modifica tabella","cellPadding":"Riempimento cella:","deleteTableRowLabel":"Elimina riga","backgroundColor":"Colore sfondo:","insertTableColumnAfterLabel":"Aggiungi colonna dopo","left":"sinistra","borderThickness":"Spessore bordo","columns":"Colonne:","percent":"percento","borderColor":"Colore bordo:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Indietro","findReplace":"Mostra/Nascondi Trova/Sostituisci","replaceAll":"Tutte le occorrenze","replaceDialogText":"Occorrenze sostituite: ${0}.","replaceButton":"Sostituisci","findButton":"Trova","findLabel":"Trova:","matchCase":"Maiuscole/minuscole","replaceLabel":"Sostituisci con:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"minore di o uguale a","prod":"prodotto n-ario\nsegno di prodotto","zwj":"congiuntore di larghezza zero","mdash":"trattino em","frasl":"barra obliqua di frazione","upsih":"simbolo della upsilon greca con uncino","prop":"proporzionale a","middot":"punto in mezzo\nvirgola georgiana\npunto centrale greco","hellip":"puntini di sospensione\ntre puntini di guida","eta":"lettera greca minuscola eta","iacute":"lettera latina i minuscola con accento acuto","yen":"simbolo dello yen\nsimbolo dello yuan","rlm":"segno da-destra-a-sinistra","macr":"macron\nmacron con spaziatura\nlinea orizzontale superiore\nbarra sovrapposta APL","ldquo":"virgolette doppie sinistre","Icirc":"lettera latina I maiuscola con accento circonflesso","OElig":"legatura latina OE maiuscola","hArr":"doppia freccia sinistra destra","eth":"lettera latina eth minuscola","divide":"segno di divisione","chi":"lettera greca minuscola chi","eacute":"lettera latina e minuscola con accento acuto","icirc":"lettera latina i minuscola con accento circonflesso","iexcl":"punto esclamativo capovolto","ETH":"lettera latina ETH maiuscola","acute":"accento acuto\nacuto con spaziatura","crarr":"freccia verso il basso con angolo a sinistra\nritorno a capo","mu":"lettera greca minuscola mu","AElig":"lettera latina AE maiuscola\nlegatura latina maiuscola AE","aacute":"lettera latina a minuscola con accento acuto","lambda":"lettera greca minuscola lambda","THORN":"lettera latina THORN maiuscola","asymp":"quasi uguale a\nasintotico a","fnof":"f latina minuscola con uncino\nfunzione\nfiorino","lang":"parentesi angolare sinistra","cup":"unione\ncoppa","ne":"non uguale a","Sigma":"lettera greca maiuscola sigma","oelig":"legatura latina oe minuscola","cent":"simbolo del centesimo","ni":"contiene come membro","dagger":"croce latina","permil":"segno di per mille","Omicron":"lettera greca maiuscola omicron","sigma":"lettera greca minuscola sigma","euro":"simbolo dell'euro","Yacute":"lettera latina Y maiuscola con accento acuto","thorn":"lettera latina thorn minuscola","lceil":"soffitto sinistro\ngradino in su APL","Ograve":"lettera latina O maiuscola con accento grave","rarr":"freccia verso destra","nu":"lettera greca minuscola nu","emsp":"spazio em","Theta":"lettera greca maiuscola theta","lArr":"doppia freccia verso sinistra","tau":"lettera greca minuscola tau","aelig":"lettera latina ae minuscola\nlegatura latina minuscola ae","ccedil":"lettera latina c minuscola con cediglia","Ntilde":"lettera latina N maiuscola con tilde","cong":"approssimativamente uguale a","Uacute":"lettera latina U maiuscola con accento acuto","theta":"lettera greca minuscola theta","darr":"freccia verso il basso","Uuml":"lettera latina U maiuscola con dieresi","bdquo":"virgolette doppie in basso a destra","Aring":"lettera latina A maiuscola con sormontata da anello\nlettera latina A maiuscola anellata","sigmaf":"lettera greca minuscola sigma finale","pound":"simbolo della sterlina","uArr":"doppia freccia verso l'alto","sub":"sottoinsieme di","aring":"lettera latina a minuscola sormontata da anello\nlettera latina a minuscola anellata","sdot":"operatore punto","thinsp":"spazio finissimo","or":"o logico\nvi","Eacute":"lettera latina E maiuscola con accento acuto","shy":"trattino debole\ntrattino discrezionale","curren":"simbolo di valuta","loz":"losanga","not":"simbolo di negazione","tilde":"tilde piccola","sum":"sommatoria n-aria","spades":"seme di picche nero","Psi":"lettera greca maiuscola psi","ndash":"trattino en","sup":"sovrainsieme di","atilde":"lettera latina a minuscola con tilde","clubs":"seme di fiori nero\ntrifoglio","uuml":"lettera latina u minuscola con dieresi","Aacute":"lettera latina A maiuscola con accento acuto","rsaquo":"virgoletta angolare singola rivolta a destra","otimes":"per cerchiato\nprodotto vettoriale","lfloor":"pavimento sinistro\ngradino in giù APL","zwnj":"non-congiuntore di larghezza zero","sim":"operatore tilde\nvaria con\nsimile a","Iota":"lettera greca maiuscola iota","Iacute":"lettera latina I maiuscola con accento acuto","pi":"lettera greca minuscola pi","ordf":"indicatore ordinale femminile","frac12":"frazione semplice un mezzo\nfrazione un mezzo","frac14":"frazione semplice un quarto\nfrazione un quarto","alefsym":"simbolo alef\nprimo cardinale transfinito","bull":"pallino\npiccolo cerchio nero","deg":"simbolo dei gradi","ordm":"indicatore ordinale maschile","epsilon":"lettera greca minuscola epsilon","equiv":"identico a","Dagger":"croce latina doppia","brvbar":"barra interrotta\nbarra verticale interrotta","harr":"freccia sinistra destra","ugrave":"lettera latina u minuscola con accento grave","oslash":"lettera latina o minuscola con barra obliqua\nlettera latina o minuscola barrata","Yuml":"lettera latina Y maiuscola con dieresi","hearts":"seme di cuori nero\ninnamorato","Xi":"lettera greca maiuscola xi","Prime":"doppio apice\nsecondi\npollici","iota":"lettera greca minuscola iota","Ccedil":"lettera latina C maiuscola con cediglia","Lambda":"lettera greca maiuscola lambda","raquo":"virgolette doppie angolari indicanti a destra\n guillemet indicante a destra","Phi":"lettera greca maiuscola phi","prime":"apice\nminuti\npiedi","nsub":"non un sottoinsieme di","copy":"simbolo del copyright","yuml":"lettera latina y minuscola con dieresi","Rho":"lettera greca maiuscola rho","Ucirc":"lettera latina U maiuscola con accento circonflesso","Kappa":"lettera greca maiuscola kappa","ucirc":"lettera latina u minuscola con accento circonflesso","sbquo":"virgoletta singola in basso a destra","igrave":"lettera latina i minuscola con accento grave","reg":"simbolo di registrazione\nsimbolo di marchio registrato","infin":"infinito","iquest":"punto interrogativo invertito\npunto interrogativo rovesciato","circ":"lettera modificatrice accento circonflesso","kappa":"lettera greca minuscola kappa","lrm":"segno da-sinistra-a-destra","Atilde":"lettera latina A maiuscola con tilde","larr":"freccia verso sinistra","frac34":"frazione semplice tre quarti\nfrazione tre quarti","oacute":"lettera latina o minuscola con accento acuto","rsquo":"virgoletta destra singola","egrave":"lettera latina e minuscola con accento grave","oline":"linea sopra\noverscore con spazio","Mu":"lettera greca maiuscola mu","exist":"esiste","cap":"intersezione\nberretto","and":"and logico\ncuneo","Ouml":"lettera latina O maiuscola con dieresi","agrave":"lettera latina a minuscola con accento grave\nlettera latina a minuscola grave","uarr":"freccia verso l'alto","ang":"angolo","Zeta":"lettera greca maiuscola zeta","scaron":"lettera latina s minuscola con caron","Gamma":"lettera greca maiuscola gamma","isin":"elemento di","Auml":"lettera latina A maiuscola con dieresi","empty":"insieme vuoto\ninsieme nullo\ndiametro","gamma":"lettera greca minuscola gamma","para":"simbolo pilcrow\nsimbolo di paragrafo","ge":"maggiore di o uguale a","psi":"lettera greca minuscola psi","Alpha":"lettera greca maiuscola alpha","Nu":"lettera greca maiuscola nu","ouml":"lettera latina o minuscola con dieresi","zeta":"lettera greca minuscola zeta","alpha":"lettera greca maiuscola alpha","part":"differenziale parziale","auml":"lettera latina a minuscola con dieresi","Ugrave":"lettera latina U maiuscola con accento grave","Oslash":"lettera latina O maiuscola con barra obliqua\nlettera latina O maiuscola barrata","Epsilon":"lettera greca maiuscola epsilon","int":"integrale","Omega":"lettera greca maiuscola omega","perp":"puntina in su\nortogonale a\nperpendicolare","uml":"dieresi\ndieresi con spazio","upsilon":"lettera greca minuscola upsilon","lowast":"operatore asterisco","omega":"lettera greca minuscola omega","otilde":"lettera latina o minuscola con tilde","Egrave":"lettera latina E maiuscola con accento grave","phi":"lettera greca minuscola phi","ensp":"spazio en","Euml":"lettera latina E maiuscola con dieresi","cedil":"cediglia\ncediglia con spazio","laquo":"virgolette doppie angolari indicanti a sinistra\nguillemet indicante a sinistra","forall":"per tutti","thetasym":"simbolo della lettera greca minuscola theta","Agrave":"lettera latina A maiuscola con accento grave\nlettera latina A maiuscola grave","szlig":"lettera latina s minuscola sonora\nesse-zeta","Pi":"lettera greca maiuscola pi","rho":"lettera greca minuscola rho","trade":"simbolo di marchio commerciale","Igrave":"lettera latina I maiuscola con accento grave","minus":"segno meno","Beta":"lettera greca maiuscola beta","Ocirc":"lettera latina O maiuscola con accento circonflesso","rdquo":"virgolette doppie destre","Eta":"lettera greca maiuscola eta","rfloor":"pavimento destro","Oacute":"lettera latina O maiuscola con accento acuto","euml":"lettera latina e minuscola con dieresi","oplus":"più cerchiato\nsomma diretta","ocirc":"lettera latina o minuscola con accento circonflesso","radic":"radice quadrata\nsegno di radice","Chi":"lettera greca maiuscola chi","notin":"non un elemento di","sect":"simbolo di sezione","Acirc":"lettera latina A maiuscola con accento circonflesso","lsquo":"virgoletta sinistra singola","beta":"lettera greca minuscola beta","piv":"simbolo di pi greco","sup1":"esponente uno\nnumero uno in esponente","Scaron":"lettera latina S maiuscola con caron","sup2":"esponente due\nnumero due in esponente\nal quadrato","acirc":"lettera latina a minuscola con accento circonflesso","sube":"sottoinsieme di o uguale a","sup3":"esponente tre\nnumero tre in esponente\nal cubo","real":"R maiuscola gotica\nsimbolo di elemento reale","Iuml":"lettera latina I maiuscola con dieresi","rang":"parentesi angolare destra","lsaquo":"virgoletta angolare singola rivolta a sinistra","nabla":"nabla\ndifferenza retrograda","omicron":"lettera greca minuscola omicron","there4":"pertanto","plusmn":"segno più-meno\nsegno più o meno","rceil":"soffitto destro","micro":"simbolo di micro","rArr":"doppia freccia verso destra","Delta":"lettera greca maiuscola delta","iuml":"lettera latina i minuscola con dieresi","Tau":"lettera greca maiuscola tau","times":"segno di moltiplicazione","yacute":"lettera latina y minuscola con accento acuto","ograve":"lettera latina o minuscola con accento grave","delta":"lettera greca minuscola delta","Ecirc":"lettera latina E maiuscola con accento circonflesso","dArr":"doppia freccia verso il basso","ntilde":"lettera latina n minuscola con tilde","diams":"seme di quadri nero","uacute":"lettera latina u minuscola con accento acuto","Otilde":"lettera latina O maiuscola con tilde","ecirc":"lettera latina e minuscola con accento circonflesso","Upsilon":"lettera greca maiuscola upsilon","image":"I maiuscola gotica\nelemento immaginario","supe":"sovrainsieme di o uguale a","xi":"lettera greca minuscola xi","weierp":"P maiuscola scritta a mano\ninsieme potenza\np di Weierstrass"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Salva"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Inserisci simbolo"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Interruzione di pagina"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Anteprima"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"risata","emoticonCool":"figo","emoticonTongue":"linguaccia","emoticonCrying":"in lacrime","emoticonOops":"ops","emoticonFrown":"triste","emoticonAngry":"arrabbiato","emoticonShy":"timido","emoticonNo":"no","emoticonAngel":"angelo","smiley":"Inserisci emoticon","emoticonIdea":"idea","emoticonEyebrow":"sopracciglia","emoticonSmile":"sorriso","emoticonWink":"occhiolino","emoticonYes":"yes","emoticonGrin":"ghigno","emoticonGoofy":"sciocco","emoticonHalf":"metà"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/it/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/it/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/it/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Mostra elementi blocco HTML"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Insert Symbol"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/sk/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/sk/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/sk/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Nastaviť","insertTableTitle":"Vložiť tabuľku","insertTableRowAfterLabel":"Pridať riadok za","center":"na stred","deleteTableColumnLabel":"Vymazať stĺpec","right":"vpravo","insertTableColumnBeforeLabel":"Pridať stĺpec pred","tableWidth":"Šírka tabuľky:","buttonInsert":"Vložiť","default":"štandardne","align":"Zarovnať:","insertTableRowBeforeLabel":"Pridať riadok pred","cellSpacing":"Rozstupy buniek:","pixels":"pixely","selectTableLabel":"Vybrať tabuľku","rows":"Riadky:","modifyTableTitle":"Upraviť tabuľku","cellPadding":"Odsadenie obsahu buniek:","deleteTableRowLabel":"Vymazať riadok","backgroundColor":"Farba pozadia:","insertTableColumnAfterLabel":"Pridať stĺpec za","left":"vľavo","borderThickness":"Hrúbka rámčeka","columns":"Stĺpce:","percent":"percentá","borderColor":"Farba rámčeka:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/sl/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/sl/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/sl/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Nastavi","insertTableTitle":"Vstavi tabelo","insertTableRowAfterLabel":"Dodaj vrstico za","center":"na sredini","deleteTableColumnLabel":"Izbriši stolpec","right":"desno","insertTableColumnBeforeLabel":"Dodaj stolpec pred","tableWidth":"Širina tabele:","buttonInsert":"Vstavi","default":"privzeto","align":"Poravnaj:","insertTableRowBeforeLabel":"Dodaj vrstico pred","cellSpacing":"Razmik med celicami:","pixels":"pikslov","selectTableLabel":"Izberi tabelo","rows":"Vrstice:","modifyTableTitle":"Spremeni tabelo","cellPadding":"Odmik celic:","deleteTableRowLabel":"Izbriši vrstico","backgroundColor":"Barva ozadja:","insertTableColumnAfterLabel":"Dodaj stolpec za","left":"levo","borderThickness":"Debelina obrobe","columns":"Stolpci:","percent":"odstotkov","borderColor":"Barva obrobe:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Select contents","deleteElement":"Delete element","moveEnd":"Move cursor to end","deleteContents":"Delete contents","nodeActions":"${nodeName} Actions","selectElement":"Select element","moveStart":"Move cursor to start"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/Blockquote.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/Blockquote.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/Blockquote.js	(revision 9)
@@ -0,0 +1 @@
+({"blockquote":"Blockquote"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/da/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/da/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/da/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Definér","insertTableTitle":"Indsæt tabel","insertTableRowAfterLabel":"Tilføj række efter","center":"centreret","deleteTableColumnLabel":"Slet kolonne","right":"højre","insertTableColumnBeforeLabel":"Tilføj kolonne før","tableWidth":"Tabelbredde:","buttonInsert":"Indsæt","default":"standard","align":"Justér:","insertTableRowBeforeLabel":"Tilføj række før","cellSpacing":"Celleafstand:","pixels":"pixel","selectTableLabel":"Markér tabel","rows":"Rækker:","modifyTableTitle":"Revidér tabel","cellPadding":"Cellemargen:","deleteTableRowLabel":"Slet række","backgroundColor":"Baggrundsfarve:","insertTableColumnAfterLabel":"Tilføj kolonne efter","left":"venstre","borderThickness":"Kanttykkelse","columns":"Kolonner:","percent":"percent","borderColor":"Kantfarve:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"less-than or equal to","prod":"n-ary product\nproduct sign","zwj":"zero width joiner","mdash":"em dash","frasl":"fraction slash","upsih":"Greek upsilon with hook symbol","prop":"proportional to","middot":"middle dot\nGeorgian comma\nGreek middle dot","hellip":"horizontal ellipsis\nthree dot leader","eta":"Greek small letter eta","iacute":"Latin small letter i with acute","yen":"yen sign\nyuan sign","rlm":"right-to-left mark","macr":"macron\nspacing macron\noverline\nAPL overbar","ldquo":"left double quotation mark","Icirc":"Latin capital letter I with circumflex","OElig":"Latin capital ligature OE","hArr":"left right double arrow","eth":"Latin small letter eth","divide":"division sign","chi":"Greek small letter chi","eacute":"Latin small letter e with acute","icirc":"Latin small letter i with circumflex","iexcl":"inverted exclamation mark","ETH":"Latin capital letter ETH","acute":"acute accent\nspacing acute","crarr":"downwards arrow with corner leftwards\ncarriage return","mu":"Greek small letter mu","AElig":"Latin capital letter AE\nLatin capital ligature AE","aacute":"Latin small letter a with acute","lambda":"Greek small letter lambda","THORN":"Latin capital letter THORN","asymp":"almost equal to\nasymptotic to","fnof":"Latin small f with hook\nfunction\nflorin","lang":"left-pointing angle bracket","cup":"union\ncup","ne":"not equal to","Sigma":"Greek capital letter sigma","oelig":"Latin small ligature oe","cent":"cent sign","ni":"contains as member","dagger":"dagger","permil":"per mille sign","Omicron":"Greek capital letter omicron","sigma":"Greek small letter sigma","euro":"euro sign","Yacute":"Latin capital letter Y with acute","thorn":"Latin small letter thorn","lceil":"left ceiling\nAPL upstile","Ograve":"Latin capital letter O with grave","rarr":"rightwards arrow","nu":"Greek small letter nu","emsp":"em space","Theta":"Greek capital letter theta","lArr":"leftwards double arrow","tau":"Greek small letter tau","aelig":"Latin small letter ae\nLatin small ligature ae","ccedil":"Latin small letter c with cedilla","Ntilde":"Latin capital letter N with tilde","cong":"approximately equal to","Uacute":"Latin capital letter U with acute","theta":"Greek small letter theta","darr":"downwards arrow","Uuml":"Latin capital letter U with diaeresis","bdquo":"double low-9 quotation mark","Aring":"Latin capital letter A with ring above\nLatin capital letter A ring","sigmaf":"Greek small letter final sigma","pound":"pound sign","uArr":"upwards double arrow","sub":"subset of","aring":"Latin small letter a with ring above\nLatin small letter a ring","sdot":"dot operator","thinsp":"thin space","or":"logical or\nvee","Eacute":"Latin capital letter E with acute","shy":"soft hyphen\ndiscretionary hyphen","curren":"currency sign","loz":"lozenge","not":"not sign","tilde":"small tilde","sum":"n-ary sumation","spades":"black spade suit","Psi":"Greek capital letter psi","ndash":"en dash","sup":"superset of","atilde":"Latin small letter a with tilde","clubs":"black club suit\nshamrock","uuml":"Latin small letter u with diaeresis","Aacute":"Latin capital letter A with acute","rsaquo":"single right-pointing angle quotation mark","otimes":"circled times\nvector product","lfloor":"left floor\nAPL downstile","zwnj":"zero width non-joiner","sim":"tilde operator\nvaries with\nsimilar to","Iota":"Greek capital letter iota","Iacute":"Latin capital letter I with acute","pi":"Greek small letter pi","ordf":"feminine ordinal indicator","frac12":"vulgar fraction one half\nfraction one half","frac14":"vulgar fraction one quarter\nfraction one quarter","alefsym":"alef symbol\nfirst transfinite cardinal","bull":"bullet\nblack small circle","deg":"degree sign","ordm":"masculine ordinal indicator","epsilon":"Greek small letter epsilon","equiv":"identical to","Dagger":"double dagger","brvbar":"broken bar\nbroken vertical bar","harr":"left right arrow","ugrave":"Latin small letter u with grave","oslash":"Latin small letter o with stroke\nLatin small letter o slash","Yuml":"Latin capital letter Y with diaeresis","hearts":"black heart suit\nvalentine","Xi":"Greek capital letter xi","Prime":"double prime\nseconds\ninches","iota":"Greek small letter iota","Ccedil":"Latin capital letter C with cedilla","Lambda":"Greek capital letter lambda","raquo":"right-pointing double angle quotation mark\nright pointing guillemet","Phi":"Greek capital letter phi","prime":"prime\nminutes\nfeet","nsub":"not a subset of","copy":"copyright sign","yuml":"Latin small letter y with diaeresis","Rho":"Greek capital letter rho","Ucirc":"Latin capital letter U with circumflex","Kappa":"Greek capital letter kappa","ucirc":"Latin small letter u with circumflex","sbquo":"single low-9 quotation mark","igrave":"Latin small letter i with grave","reg":"registered sign\nregistered trade mark sign","infin":"infinity","iquest":"inverted question mark\nturned question mark","circ":"modifier letter circumflex accent","kappa":"Greek small letter kappa","lrm":"left-to-right mark","Atilde":"Latin capital letter A with tilde","larr":"leftwards arrow","frac34":"vulgar fraction three quarters\nfraction three quarters","oacute":"Latin small letter o with acute","rsquo":"right single quotation mark","egrave":"Latin small letter e with grave","oline":"overline\nspacing overscore","Mu":"Greek capital letter mu","exist":"there exists","cap":"intersection\ncap","and":"logical and\nwedge","Ouml":"Latin capital letter O with diaeresis","agrave":"Latin small letter a with grave\nLatin small letter a grave","uarr":"upwards arrow","ang":"angle","Zeta":"Greek capital letter zeta","scaron":"Latin small letter s with caron","Gamma":"Greek capital letter gamma","isin":"element of","Auml":"Latin capital letter A with diaeresis","empty":"empty set\nnull set\ndiameter","gamma":"Greek small letter gamma","para":"pilcrow sign\nparagraph sign","ge":"greater-than or equal to","psi":"Greek small letter psi","Alpha":"Greek capital letter alpha","Nu":"Greek capital letter nu","ouml":"Latin small letter o with diaeresis","zeta":"Greek small letter zeta","alpha":"Greek small letter alpha","part":"partial differential","auml":"Latin small letter a with diaeresis","Ugrave":"Latin capital letter U with grave","Oslash":"Latin capital letter O with stroke\nLatin capital letter O slash","Epsilon":"Greek capital letter epsilon","int":"integral","Omega":"Greek capital letter omega","perp":"up tack\northogonal to\nperpendicular","uml":"diaeresis\nspacing diaeresis","upsilon":"Greek small letter upsilon","lowast":"asterisk operator","omega":"Greek small letter omega","otilde":"Latin small letter o with tilde","Egrave":"Latin capital letter E with grave","phi":"Greek small letter phi","ensp":"en space","Euml":"Latin capital letter E with diaeresis","cedil":"cedilla\nspacing cedilla","laquo":"left-pointing double angle quotation mark\nleft pointing guillemet","forall":"for all","thetasym":"Greek small letter theta symbol","Agrave":"Latin capital letter A with grave\nLatin capital letter A grave","szlig":"Latin small letter sharp s\ness-zed","Pi":"Greek capital letter pi","rho":"Greek small letter rho","trade":"trade mark sign","Igrave":"Latin capital letter I with grave","minus":"minus sign","Beta":"Greek capital letter beta","Ocirc":"Latin capital letter O with circumflex","rdquo":"right double quotation mark","Eta":"Greek capital letter eta","rfloor":"right floor","Oacute":"Latin capital letter O with acute","euml":"Latin small letter e with diaeresis","oplus":"circled plus\ndirect sum","ocirc":"Latin small letter o with circumflex","radic":"square root\nradical sign","Chi":"Greek capital letter chi","notin":"not an element of","sect":"section sign","Acirc":"Latin capital letter A with circumflex","lsquo":"left single quotation mark","beta":"Greek small letter beta","piv":"Greek pi symbol","sup1":"superscript one\nsuperscript digit one","Scaron":"Latin capital letter S with caron","sup2":"superscript two\nsuperscript digit two\nsquared","acirc":"Latin small letter a with circumflex","sube":"subset of or equal to","sup3":"superscript three\nsuperscript digit three\ncubed","real":"blackletter capital R\nreal part symbol","Iuml":"Latin capital letter I with diaeresis","rang":"right-pointing angle bracket","lsaquo":"single left-pointing angle quotation mark","nabla":"nabla\nbackward difference","omicron":"Greek small letter omicron","there4":"therefore","plusmn":"plus-minus sign\nplus-or-minus sign","rceil":"right ceiling","micro":"micro sign","rArr":"rightwards double arrow","Delta":"Greek capital letter delta","iuml":"Latin small letter i with diaeresis","Tau":"Greek capital letter tau","times":"multiplication sign","yacute":"Latin small letter y with acute","ograve":"Latin small letter o with grave","delta":"Greek small letter delta","Ecirc":"Latin capital letter E with circumflex","dArr":"downwards double arrow","ntilde":"Latin small letter n with tilde","diams":"black diamond suit","uacute":"Latin small letter u with acute","Otilde":"Latin capital letter O with tilde","ecirc":"Latin small letter e with circumflex","Upsilon":"Greek capital letter upsilon","image":"blackletter capital I\nimaginary part","supe":"superset of or equal to","xi":"Greek small letter xi","weierp":"script capital P\npower set\nWeierstrass p"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/CollapsibleToolbar.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/CollapsibleToolbar.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/CollapsibleToolbar.js	(revision 9)
@@ -0,0 +1 @@
+({"collapse":"Collapse Editor Toolbar","expand":"Expand Editor Toolbar"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"replaceDialogText":"Replaced ${0} occurrences.","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","backwards":"Backwards","replaceButton":"Replace","replaceLabel":"Replace with:","matchCase":"Match case","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","findReplace":"Find and Replace","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","findLabel":"Find:","findButton":"Find","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"Speichern"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"Symbol einfügen"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Seitenumbruch"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Vorschau"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"Lachen","emoticonCool":"Cool","emoticonTongue":"Zunge","emoticonCrying":"Weinen","emoticonOops":"Hoppla","emoticonFrown":"Stirnrunzeln","emoticonAngry":"Zornig","emoticonShy":"Schüchtern","emoticonNo":"Nein","emoticonAngel":"Engel","smiley":"Emoticon einfügen","emoticonIdea":"Idee","emoticonEyebrow":"Hochgezogene Augenbraue","emoticonSmile":"Lächeln","emoticonWink":"Augenzwinkern","emoticonYes":"Ja","emoticonGrin":"Grinsen","emoticonGoofy":"Albern","emoticonHalf":"Halb"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"HTML-Blockelemente anzeigen"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"Inhalt auswählen","deleteElement":"Element löschen","moveEnd":"Cursor an Ende verschieben","deleteContents":"Inhalt löschen","nodeActions":"Aktionen für ${nodeName}","selectElement":"Element auswählen","moveStart":"Cursor an Anfang verschieben"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Festlegen","insertTableTitle":"Tabelle einfügen","insertTableRowAfterLabel":"Zeile unterhalb einfügen","center":"Mitte","deleteTableColumnLabel":"Spalte löschen","right":"Rechts","insertTableColumnBeforeLabel":"Spalte oberhalb einfügen","tableWidth":"Tabellenbreite:","buttonInsert":"Einfügen","default":"Standard","align":"Ausrichten:","insertTableRowBeforeLabel":"Zeile oberhalb einfügen","cellSpacing":"Zellenabstand:","pixels":"Pixel","selectTableLabel":"Tabelle auswählen","rows":"Zeilen:","modifyTableTitle":"Tabelle ändern","cellPadding":"Zellenrandbreite:","deleteTableRowLabel":"Zeile löschen","backgroundColor":"Hintergrundfarbe:","insertTableColumnAfterLabel":"Spalte unterhalb einfügen","left":"Links","borderThickness":"Randbreite","columns":"Spalten:","percent":"Prozent","borderColor":"Randfarbe:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"Zurück","findReplace":"Suchen/Ersetzen","replaceAll":"Alle Vorkommen","replaceDialogText":"Es wurden ${0} Vorkommen ersetzt.","replaceButton":"Ersetzen","findButton":"Suchen","findLabel":"Suchbegriff:","matchCase":"Groß- und Kleinschreibung abgleichen","replaceLabel":"Ersetzen durch:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/de/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/de/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/de/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"Kleiner-gleich","prod":"unäres Produkt\nProduktzeichen","zwj":"Verbinder mit Nullbreite","mdash":"Gedankenstrich von der Länge des Buchstabens m","frasl":"Schrägstrich für Bruch","upsih":"Griechisches Upsilon mit Haken","prop":"proportional zu","middot":"Multiplikationszeichen\nGeorgisches Komma\nGriechisches Multiplikationszeichen","hellip":"Auslassung\nDrei kleine Punkte","eta":"Griechischer Kleinbuchstabe Eta","iacute":"Kleinbuchstabe i mit Aktut","yen":"Yen-ZeichenNyuan-Zeichen","rlm":"Rechts-Links-Markierung","macr":"Makron\nLeerzeichen mit Makron\nÜberstrich\nQuerstrich über dem Buchstaben","ldquo":"Linkes doppeltes Anführungszeichen","Icirc":"Großbuchstabe I mit Zirkumflex","OElig":"Ligatur aus Großbuchstaben O und E","hArr":"Doppelter Rechts-Links-Pfeil","eth":"Kleines eth","divide":"Divisionszeichen","chi":"Griechischer Kleinbuchstabe Chi","eacute":"Kleinbuchstabe e mit Aktut","icirc":"Kleinbuchstabe i mit Zirkumflex","iexcl":"Umgekehrtes Ausrufezeichen","ETH":"Großes ETH","acute":"Akut\nsLeerzeichen mit Akut","crarr":"Abwärtspfeil, der nach links abknickt\nZeilenumbruch","mu":"Griechischer Kleinbuchstabe My","AElig":"Großes AE\nLigatur aus Großbuchstaben A und E","aacute":"Kleinbuchstabe a mit Aktut","lambda":"Griechischer Kleinbuchstabe Lambda","THORN":"Großes THORN","asymp":"Ungefähr gleich mit\nasymptotisch","fnof":"Kleines mit Haken\nFunction\nFlorin","lang":"Linke spitze Klammer","cup":"Vereinigungsmenge\nCup","ne":"Nicht gleich mit","Sigma":"Griechischer Großbuchstabe Sigma","oelig":"Ligatur aus Kleinbuchstaben o und e","cent":"Cent-Zeichen","ni":"Enthält als Member","dagger":"Kreuzzeichen","permil":"Promillezeichen","Omicron":"Griechischer Großbuchstabe Omicron","sigma":"Griechischer Kleinbuchstabe Sigma","euro":"Euro-Zeichen","Yacute":"Großbuchstabe Y mit Akut","thorn":"Kleines thorn","lceil":"Linke Ecke oben\nAPL upstile","Ograve":"Großbuchstabe O mit Gravis","rarr":"Rechtspfeil","nu":"Griechischer Kleinbuchstabe Ny","emsp":"Leerschritt von der Breite des Buchstaben m","Theta":"Griechischer Großbuchstabe Theta","lArr":"Doppelter Linkspfeil","tau":"Griechischer Kleinbuchstabe Tau","aelig":"Kleines ae\nLigatur aus Kleinbuchstaben a und e","ccedil":"Kleinbuchstabe c mit Cedilla","Ntilde":"Großbuchstabe N mit Tilde","cong":"Etwa gleich mit","Uacute":"Großbuchstabe U mit Akut","theta":"Griechischer Kleinbuchstabe Theta","darr":"Abwärtspfeil","Uuml":"Großbuchstabe U mit Trema","bdquo":"Doppeltes, gekrümmtes Anführungszeichen unten","Aring":"Großes A mit Ring darüber\nLateinischer Großbuchstabe A mit Ring darüber","sigmaf":"Griechischer Kleinbuchstabe Sigma am Wortende","pound":"Nummernzeichen","uArr":"Doppelter Aufwärtspfeil","sub":"Teil von","aring":"Kleines a mit Ring darüber\nKleinbuchstabe a mit Ring","sdot":"Punktoperator","thinsp":"Schmaler Leerschritt","or":"Logisches Oder\nv-förmig","Eacute":"Großbuchstabe E mit Akut","shy":"Veränderlicher Silbentrennstrich\nbedingter Trennstrich","curren":"Währungssymbol","loz":"Raute","not":"Nicht-Zeichen","tilde":"kleine Tilde","sum":"unäre Summation","spades":"Schwarzes Pik (Kartenspiel)","Psi":"Griechischer Großbuchstabe Psi","ndash":"Gedankenstrich von der Länge des Buchstabens n","sup":"Obermenge von","atilde":"Kleinbuchstabe a mit Tilde","clubs":"Schwarzes Kreuz (Kartenspiel)\nKleeblatt","uuml":"Kleinbuchstabe u mit Trema","Aacute":"Großbuchstabe A mit Akut","rsaquo":"Einfaches rechtes Anführungszeichen","otimes":"Multiplikationszeichen mit Kreis\nVektorprodukt","lfloor":"Linke Ecke unten\nAPL downstile","zwnj":"Nichtverbinder mit Nullbreite","sim":"Tilde (Operator)\nvariiert mit\nähnlich wie","Iota":"Griechischer Großbuchstabe Iota","Iacute":"Großbuchstabe I mit Akut","pi":"Griechischer Kleinbuchstabe Pi","ordf":"Weibliches Ordinalzeichen","frac12":"Bruch 1 durch 2\nEinhalb","frac14":"Bruch 1 durch 4\nEin Viertel","alefsym":"Alef-Symbol\nerste Transfinite Kardinalzahl","bull":"Rundes Aufzählungszeichen\nSchwarzer kleiner Kreis","deg":"Gradzeichen","ordm":"Männliches Ordinalzeichen","epsilon":"Griechischer Kleinbuchstabe Epsilon","equiv":"Identisch mit","Dagger":"Doppelkreuzzeichen","brvbar":"Unterbrochener Balken\nUnterbrochener vertikaler Balken","harr":"Links-Rechts-Pfeil","ugrave":"Kleinbuchstabe u mit Gravis","oslash":"Kleines o mit Schrägstrich\nKleiner dänisch-norwegischer Umlaut ö","Yuml":"Großbuchstabe Y mit Trema","hearts":"Schwarzes Herz (Kartenspiel)\nValentine","Xi":"Griechischer Großbuchstabe Xi","Prime":"Doppelter Prime\nSekunden\nZoll","iota":"Griechischer Kleinbuchstabe Iota","Ccedil":"Großbuchstabe C mit Cedilla","Lambda":"Griechischer Großbuchstabe Lambda","raquo":"Doppelte, winklige Anführungszeichen, die nach rechts weisen\nRechtes französisches Anführungszeichen","Phi":"Griechischer Großbuchstabe Phi","prime":"Prime\nMinuten\nFuß","nsub":"Kein Teil von","copy":"Copyrightzeichen","yuml":"Kleinbuchstabe y mit Trema","Rho":"Griechischer Großbuchstabe Rho","Ucirc":"Großbuchstabe U mit Zirkumflex","Kappa":"Griechischer Großbuchstabe Kappa","ucirc":"Kleinbuchstabe u mit Zirkumflex","sbquo":"Einfaches, gekrümmtes Anführungszeichen unten","igrave":"Kleinbuchstabe i mit Gravis","reg":"Registrierte Handelsmarke\nregistriertes Markenzeichen","infin":"Unendlich","iquest":"Umgekehrtes Fragezeichen\nFragezeichen auf dem Kopf","circ":"Zirkumflex, Akzent","kappa":"Griechischer Kleinbuchstabe Kappa","lrm":"Links-Rechts-Markierung","Atilde":"Großbuchstabe A mit Tilde","larr":"Linkspfeil","frac34":"Bruch 3 durch 4\nDreiviertel","oacute":"Kleinbuchstabe o mit Aktut","rsquo":"Rechtes einfaches Anführungszeichen","egrave":"Kleinbuchstabe e mit Gravis","oline":"Hochgestellter Querstrich\nLeerzeichen mit Oberstrich","Mu":"Griechischer Großbuchstabe My","exist":"Es existiert","cap":"Schnittpunkt\nHütchen","and":"Logisches Und\nKeil","Ouml":"Lateinischer Großbuchstabe O mit Trema","agrave":"Kleines a mit Gravis\nKleinbuchstabe a mit Gravis","uarr":"Aufwärtspfeil","ang":"Winkel","Zeta":"Griechischer Großbuchstabe Zeta","scaron":"Kleinbuchstabe s mit Caron","Gamma":"Griechischer Großbuchstabe Gamma","isin":"Element von","Auml":"Großbuchstabe A mit Trema","empty":"Leermenge\nNullmenge\nDurchmesser","gamma":"Griechischer Kleinbuchstabe Gamma","para":"Pilcrow-Zeichen (engl.)\nAbsatzzeichen","ge":"Größer-gleich","psi":"Griechischer Kleinbuchstabe Psi","Alpha":"Griechischer Großbuchstabe Alpha","Nu":"Griechischer Großbuchstabe Ny","ouml":"Kleinbuchstabe o mit Gravis","zeta":"Griechischer Kleinbuchstabe Zeta","alpha":"Griechischer Kleinbuchstabe Alpha","part":"Partielle Differenzialgleichung","auml":"Kleinbuchstabe a mit Trema","Ugrave":"Großbuchstabe U mit Gravis","Oslash":"Großes O mit Schrägstrich\nGroßer dänisch-norwegischer Umlaut ö","Epsilon":"Griechischer Großbuchstabe Epsilon","int":"Integral","Omega":"Griechischer Großbuchstabe Omega","perp":"Senkrecht\nSenkrecht zu\nLotrecht","uml":"Trema\nLeerzeichen mit Trema","upsilon":"Griechischer Kleinbuchstabe Upsilon","lowast":"Sternoperator","omega":"Griechischer Kleinbuchstabe Omega","otilde":"Kleinbuchstabe o mit Tilde","Egrave":"Großbuchstabe E mit Gravis","phi":"Griechischer Kleinbuchstabe Phi","ensp":"Leerschritt von der Breite des Buchstaben n","Euml":"Großbuchstabe E mit Trema","cedil":"Cedilla\nLeerzeichen mit Cedilla","laquo":"Doppelte, winklige Anführungszeichen, die nach links weisenlinke französische Anführungszeichen","forall":"Für alle","thetasym":"Griechischer Kleinbuchstabe Theta (Symbol)","Agrave":"Großes A mit Gravis\nGroßbuchstabe A mit Gravis","szlig":"Scharfes s\nEsszett","Pi":"Griechischer Großbuchstabe Pi","rho":"Griechischer Kleinbuchstabe Rho","trade":"Markenzeichen","Igrave":"Großbuchstabe I mit Gravis","minus":"Minuszeichen","Beta":"Griechischer Großbuchstabe Beta","Ocirc":"Großbuchstabe O mit Zirkumflex","rdquo":"Rechtes doppeltes Anführungszeichen","Eta":"Griechischer Großbuchstabe Eta","rfloor":"Rechte Ecke unten","Oacute":"Großbuchstabe O mit Akut","euml":"Kleinbuchstabe e mit Trema","oplus":"Pluszeichen mit Kreis\ndirekte Summe","ocirc":"Kleinbuchstabe o mit Zirkumflex","radic":"Quadratwurzel\nWurzelzeichen","Chi":"Griechischer Großbuchstabe Chi","notin":"Kein Element von","sect":"Abschnittszeichen","Acirc":"Großbuchstabe A mit Zirkumflex","lsquo":"Linkes einfaches Anführungszeichen","beta":"Griechischer Kleinbuchstabe Beta","piv":"Griechisches Pi-Symbol","sup1":"Hochgestellte Eins\nHoch 1","Scaron":"Großbuchstabe S mit Caron","sup2":"Hochgestellte Zwei\nHoch 2\nzum Quadrat","acirc":"Kleinbuchstabe a mit Zirkumflex","sube":"Teilmenge oder gleich mit","sup3":"Hochgestellte Drei\nHoch 3\nKubik","real":"Großes R in Frakturschrift\nRealteilsymbol","Iuml":"Großbuchstabe I mit Trema","rang":"Rechte spitze Klammer","lsaquo":"Einfaches linkes Anführungszeichen","nabla":"Nabla\nAbsteigende Differenz","omicron":"Griechischer Kleinbuchstabe Omicron","there4":"Deshalb","plusmn":"Plus-Minus-Zeichen\nPlus-oder-Minus-Zeichen","rceil":"Rechte Ecke oben","micro":"Micro-Zeichen","rArr":"Doppelter Rechtspfeil","Delta":"Griechischer Großbuchstabe Delta","iuml":"Kleinbuchstabe i mit Trema","Tau":"Griechischer Großbuchstabe Tau","times":"Multiplikationszeichen","yacute":"Kleinbuchstabe y mit Aktut","ograve":"Kleinbuchstabe o mit Gravis","delta":"Griechischer Kleinbuchstabe Delta","Ecirc":"Großbuchstabe E mit Zirkumflex","dArr":"Doppelter Abwärtspfeil","ntilde":"Kleinbuchstabe n mit Tilde","diams":"Schwarzes Karo (Kartenspiel)","uacute":"Kleinbuchstabe u mit Aktut","Otilde":"Lateinischer Großbuchstabe O mit Tilde","ecirc":"Kleinbuchstabe e mit Zirkumflex","Upsilon":"Griechischer Großbuchstabe Upsilon","image":"Großes I in Frakturschrift\nImaginärteil","supe":"Obermenge oder gleich mit","xi":"Griechischer Kleinbuchstabe Xi","weierp":"Kleines p in Schreibschrift\nPotenz\nWeierstrass'sche Ellipsen-Funktion"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/sv/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/sv/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/sv/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Ange","insertTableTitle":"Infoga tabell","insertTableRowAfterLabel":"Lägg till rad efter","center":"centrera","deleteTableColumnLabel":"Ta bort kolumn","right":"högerjustera","insertTableColumnBeforeLabel":"Lägg till kolumn före","tableWidth":"Tabellbredd:","buttonInsert":"Infoga","default":"standard","align":"Justera:","insertTableRowBeforeLabel":"Lägg till rad före","cellSpacing":"Cellavstånd:","pixels":"bildpunkter","selectTableLabel":"Välj tabell","rows":"Rader:","modifyTableTitle":"Ändra tabell","cellPadding":"Cellutfyllnad:","deleteTableRowLabel":"Ta bort rad","backgroundColor":"Bakgrundsfärg:","insertTableColumnAfterLabel":"Lägg till kolumn efter","left":"vänsterjustera","borderThickness":"Ramtjocklek","columns":"Kolumner:","percent":"%","borderColor":"Ramfärg:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/Breadcrumb.js	(revision 9)
@@ -0,0 +1 @@
+({"selectContents":"内容の選択","deleteElement":"要素の削除","moveEnd":"終了するためにカーソルを移動","deleteContents":"内容の削除","nodeActions":"${nodeName} アクション","selectElement":"要素の選択","moveStart":"開始するためにカーソルを移動"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"設定","insertTableTitle":"テーブルの挿入","insertTableRowAfterLabel":"行を後に追加","center":"中央","deleteTableColumnLabel":"列の削除","right":"右","insertTableColumnBeforeLabel":"列を前に追加","tableWidth":"テーブルの幅:","buttonInsert":"挿入","default":"default","align":"位置合わせ","insertTableRowBeforeLabel":"行を前に追加","cellSpacing":"セル間隔:","pixels":"ピクセル","selectTableLabel":"テーブルの選択","rows":"行","modifyTableTitle":"テーブルの変更","cellPadding":"セル余白:","deleteTableRowLabel":"行の削除","backgroundColor":"背景色:","insertTableColumnAfterLabel":"列を後に追加","left":"左","borderThickness":"ボーダー線幅","columns":"列","percent":"パーセント","borderColor":"ボーダー色:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/FindReplace.js	(revision 9)
@@ -0,0 +1 @@
+({"backwards":"後方","findReplace":"検索/置換の切り替え","replaceAll":"すべてのオカレンス","replaceDialogText":"${0} 個のオカレンスを置換しました。","replaceButton":"置換","findButton":"検索","findLabel":"検索内容:","matchCase":"大/小文字を区別","replaceLabel":"次で置換:","eofDialogTextFind":"found","eofDialogText":"Last occurrence ${0}","findTooltip":"Enter text to find","replaceTooltip":"Enter text to replace with","replaceAllButton":"Replace All","eofDialogTextReplace":"replaced","backwardsTooltip":"Search backwards for text","replaceAllButtonTooltip":"Replace all the text","replaceButtonTooltip":"Replace the text","matchCaseTooltip":"Match case","findButtonTooltip":"Find the text"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/latinEntities.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/latinEntities.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/latinEntities.js	(revision 9)
@@ -0,0 +1 @@
+({"le":"小さいか等しい","prod":"n 乗\n積符号","zwj":"結合ありで幅ゼロ","mdash":"em ダッシュ","frasl":"分数のスラッシュ","upsih":"ギリシャ語のフック記号付きユプシロン","prop":"比例","middot":"中間ドット\nグルジア語のコンマ\nギリシャ語の中間ドット","hellip":"水平省略符号\n3 つのドット・リーダー","eta":"ギリシャ語の小文字イータ","iacute":"ラテン語の揚音付き小文字 i","yen":"円記号\n元記号","rlm":"右から左へのマーク","macr":"長音記号\n間隔長音記号\n上線\nAPL 上線","ldquo":"左二重引用符","Icirc":"ラテン語の曲折アクセント記号付き大文字 I","OElig":"ラテン語の大文字の合字 OE","hArr":"左右二重矢印","eth":"ラテン語の小文字 eth","divide":"除算記号","chi":"ギリシャ語の小文字カイ","eacute":"ラテン語の揚音付き小文字 e","icirc":"ラテン語の曲折アクセント記号付き小文字 i","iexcl":"逆感嘆符","ETH":"ラテン語の大文字 ETH","acute":"揚音アクセント\n間隔揚音","crarr":"角が左向きの下矢印復帰","mu":"ギリシャ語の小文字ミュー","AElig":"ラテン語の大文字 AE\nラテン語の大文字の合字 AE","aacute":"ラテン語の揚音付き小文字 a","lambda":"ギリシャ語の小文字ラムダ","THORN":"ラテン語の大文字 THORN","asymp":"ほぼ等しい\n漸近","fnof":"ラテン語のフック付き小文字 f\n関数\nフロリン","lang":"左角括弧","cup":"和集合カップ形","ne":"等しくない","Sigma":"ギリシャ語の大文字シグマ","oelig":"ラテン語の小文字の合字 oe","cent":"セント記号","ni":"メンバーとして含まれる","dagger":"剣標","permil":"パーミル記号","Omicron":"ギリシャ語の大文字オミクロン","sigma":"ギリシャ語の小文字シグマ","euro":"ユーロ記号","Yacute":"ラテン語の揚音付き大文字 Y","thorn":"ラテン語の小文字 thorn","lceil":"左上限\nAPL 上限","Ograve":"ラテン語の抑音付き大文字 O","rarr":"右矢印","nu":"ギリシャ語の小文字ニュー","emsp":"em スペース","Theta":"ギリシャ語の大文字シータ","lArr":"左二重矢印","tau":"ギリシャ語の小文字タウ","aelig":"ラテン語の小文字 ae\nラテン語の小文字の合字 ae","ccedil":"ラテン語のセディーユ付き小文字 c","Ntilde":"ラテン語の波形記号付き大文字 N","cong":"おおよそ等しい","Uacute":"ラテン語の揚音付き大文字 U","theta":"ギリシャ語の小文字シータ","darr":"下矢印","Uuml":"ラテン語の分音符号付き大文字 U","bdquo":"二重下付き右引用符","Aring":"ラテン語の上リング付き大文字 A\nラテン語のリング付き大文字 A","sigmaf":"ギリシャ語の小文字ファイナルシグマ","pound":"ポンド記号","uArr":"上二重矢印","sub":"左辺は右辺の部分集合","aring":"ラテン語の上リング付き小文字 a\nラテン語のリング付き小文字 a","sdot":"ドット演算子","thinsp":"薄いスペース","or":"論理和\nV 字形","Eacute":"ラテン語の揚音付き大文字 E","shy":"ソフト・ハイフン\n任意ハイフン","curren":"通貨記号","loz":"ひし形","not":"否定記号","tilde":"小文字の波形記号","sum":"n 回加算","spades":"トランプの黒のスペードの組","Psi":"ギリシャ語の大文字プシー","ndash":"en ダッシュ","sup":"左辺は右辺を包含する","atilde":"ラテン語の波形記号付き小文字 a","clubs":"トランプの黒のクラブの組\nシャムロック","uuml":"ラテン語の分音符号付き小文字 u","Aacute":"ラテン語の揚音付き大文字 A","rsaquo":"単一右角引用符","otimes":"ベクトル積\nベクトル積","lfloor":"左下限\nAPL 下限","zwnj":"結合なしで幅ゼロ","sim":"チルド演算子\n多様性\n類似性","Iota":"ギリシャ語の大文字イオタ","Iacute":"ラテン語の揚音付き大文字 I","pi":"ギリシャ語の小文字パイ","ordf":"女性序数標識","frac12":"分数の 2 分の 1\n分数の 2 分の 1","frac14":"分数の 4 分の 1\n分数の 4 分の 1","alefsym":"アレフ記号\n1 番目の超限基数","bull":"黒丸\n黒い小さな円","deg":"角度記号","ordm":"男性序数標識","epsilon":"ギリシャ語の小文字イプシロン","equiv":"同一","Dagger":"二重剣標","brvbar":"破線バー\n破線垂直バー","harr":"左右矢印","ugrave":"ラテン語の抑音付き小文字 u","oslash":"ラテン語の斜線付き小文字 o\nラテン語のスラッシュ付き小文字 o","Yuml":"ラテン語の分音符号付き大文字 Y","hearts":"トランプの黒のハートの組\nバレンタイン","Xi":"ギリシャ語の大文字クシー","Prime":"二重プライム記号\n秒\nインチ","iota":"ギリシャ語の小文字イオタ","Ccedil":"ラテン語のセディーユ付き大文字 C","Lambda":"ギリシャ語の大文字ラムダ","raquo":"右二重角引用符\n右ギュメ","Phi":"ギリシャ語の大文字ファイ","prime":"プライム記号\n分\nフィート","nsub":"部分集合でない","copy":"著作権記号","yuml":"ラテン語の分音符号付き小文字 y","Rho":"ギリシャ語の大文字ロー","Ucirc":"ラテン語の曲折アクセント記号付き大文字 U","Kappa":"ギリシャ語の大文字カッパ","ucirc":"ラテン語の曲折アクセント記号付き小文字 u","sbquo":"単一下付き右引用符","igrave":"ラテン語の抑音付き小文字 i","reg":"登録記号\n登録商標","infin":"無限","iquest":"逆疑問符\n反転疑問符","circ":"修飾文字の曲折アクセント記号アクセント","kappa":"ギリシャ語の小文字カッパ","lrm":"左から右へのマーク","Atilde":"ラテン語の波形記号付き大文字 A","larr":"左矢印","frac34":"分数の 4 分の 3\n分数の 4 分の 3","oacute":"ラテン語の揚音付き小文字 o","rsquo":"右単一引用符","egrave":"ラテン語の抑音付き小文字 e","oline":"上線\n間隔上線","Mu":"ギリシャ語の大文字ミュー","exist":"存在","cap":"集合の積\nキャップ形","and":"論理積\nくさび形","Ouml":"ラテン語の分音符号付き大文字 O","agrave":"ラテン語の抑音付き小文字 a\nラテン語の抑音付き小文字 a","uarr":"上矢印","ang":"角度","Zeta":"ギリシャ語の大文字ゼータ","scaron":"ラテン語のキャロン付き小文字 s","Gamma":"ギリシャ語の大文字ガンマ","isin":"右辺の要素である","Auml":"ラテン語の分音符号付き大文字 A","empty":"空集合\nヌル集合\n直径","gamma":"ギリシャ語の小文字ガンマ","para":"段落記号\n段落記号","ge":"大きいか等しい","psi":"ギリシャ語の小文字プシー","Alpha":"ギリシャ語の大文字アルファ","Nu":"ギリシャ語の大文字ニュー","ouml":"ラテン語の分音符号付き小文字 o","zeta":"ギリシャ語の小文字ゼータ","alpha":"ギリシャ語の小文字アルファ","part":"偏微分","auml":"ラテン語の分音符号付き小文字 a","Ugrave":"ラテン語の抑音付き大文字 U","Oslash":"ラテン語の斜線付き大文字 O\nラテン語のスラッシュ付き大文字 O","Epsilon":"ギリシャ語の大文字イプシロン","int":"積分","Omega":"ギリシャ語の大文字オメガ","perp":"直角\n直交\n垂直","uml":"分音符号\n間隔分音符号","upsilon":"ギリシャ語の小文字ユプシロン","lowast":"アスタリスク演算子","omega":"ギリシャ語の小文字オメガ","otilde":"ラテン語の波形記号付き小文字 o","Egrave":"ラテン語の抑音付き大文字 E","phi":"ギリシャ語の小文字ファイ","ensp":"en スペース","Euml":"ラテン語の分音符号付き大文字 E","cedil":"セディーユ\n間隔セディーユ","laquo":"左二重角引用符\n左ギュメ","forall":"すべてについて","thetasym":"ギリシャ語の小文字シータ記号","Agrave":"ラテン語の抑音付き大文字 A\nラテン語の抑音付き大文字 A","szlig":"ラテン語の小文字のシャープ s\n s 字形","Pi":"ギリシャ語の大文字パイ","rho":"ギリシャ語の小文字ロー","trade":"商標","Igrave":"ラテン語の抑音付き大文字 I","minus":"減算記号","Beta":"ギリシャ語の大文字ベータ","Ocirc":"ラテン語の曲折アクセント記号付き大文字 O","rdquo":"右二重引用符","Eta":"ギリシャ語の大文字イータ","rfloor":"右下限","Oacute":"ラテン語の揚音付き大文字 O","euml":"ラテン語の分音符号付き小文字 e","oplus":"ベクトル和\n直和","ocirc":"ラテン語の曲折アクセント記号付き小文字 o","radic":"平方根\nルート記号","Chi":"ギリシャ語の大文字カイ","notin":"右辺の要素でない","sect":"セクション記号","Acirc":"ラテン語の曲折アクセント記号付き大文字 A","lsquo":"左単一引用符","beta":"ギリシャ語の小文字ベータ","piv":"ギリシャ語のパイ記号","sup1":"上付き文字 1\n上付き文字数字 1","Scaron":"ラテン語のキャロン付き大文字 S","sup2":"上付き文字 2\n上付き文字数字 2\n平方","acirc":"ラテン語の曲折アクセント記号付き小文字 a","sube":"部分集合または等しい","sup3":"上付き文字 3\n上付き文字数字 3\n立方","real":"ドイツ字体の大文字 R\n実数部記号","Iuml":"ラテン語の分音符号付き大文字 I","rang":"右角括弧","lsaquo":"単一左角引用符","nabla":"ナブラ\n後方の差分","omicron":"ギリシャ語の小文字オミクロン","there4":"したがって","plusmn":"正符号\n正または負符号","rceil":"右上限","micro":"マイクロ記号","rArr":"右二重矢印","Delta":"ギリシャ語の大文字デルタ","iuml":"ラテン語の分音符号付き小文字 i","Tau":"ギリシャ語の大文字タウ","times":"乗算記号","yacute":"ラテン語の揚音付き小文字 y","ograve":"ラテン語の抑音付き小文字 o","delta":"ギリシャ語の小文字デルタ","Ecirc":"ラテン語の曲折アクセント記号付き大文字 E","dArr":"下二重矢印","ntilde":"ラテン語の波形記号付き小文字 n","diams":"トランプの黒のダイヤモンドの組","uacute":"ラテン語の揚音付き小文字 u","Otilde":"ラテン語の波形記号付き大文字 O","ecirc":"ラテン語の曲折アクセント記号付き小文字 e","Upsilon":"ギリシャ語の大文字ユプシロン","image":"ドイツ字体の大文字 I\n虚数部","supe":"包含集合または等しい","xi":"ギリシャ語の小文字クシー","weierp":"添え字の大文字 P\n累乗集合\nWeierstrass p"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/Save.js	(revision 9)
@@ -0,0 +1 @@
+({"save":"保存"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/InsertEntity.js	(revision 9)
@@ -0,0 +1 @@
+({"insertEntity":"記号の挿入"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"改ページ"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"プレビュー"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/Smiley.js	(revision 9)
@@ -0,0 +1 @@
+({"emoticonLaughing":"笑い","emoticonCool":"無愛想","emoticonTongue":"舌を出す","emoticonCrying":"泣く","emoticonOops":"おっと","emoticonFrown":"眉をひそめる","emoticonAngry":"怒り","emoticonShy":"はにかんだ","emoticonNo":"いいえ","emoticonAngel":"エンジェル","smiley":"顔文字の挿入","emoticonIdea":"アイデア","emoticonEyebrow":"眉毛","emoticonSmile":"微笑","emoticonWink":"ウィンク","emoticonYes":"はい","emoticonGrin":"笑顔","emoticonGoofy":"おろかな","emoticonHalf":"半分"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ja/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ja/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ja/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"HTML ブロック要素の表示"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/he/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/he/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/he/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"הגדרה","insertTableTitle":"הוספת טבלה","insertTableRowAfterLabel":"הוספת שורה אחרי","center":"מרכז","deleteTableColumnLabel":"מחיקת עמודה","right":"שמאל","insertTableColumnBeforeLabel":"הוספת עמודה לפני","tableWidth":"רוחב טבלה:","buttonInsert":"הוספה","default":"ברירת מחדל","align":"יישור:","insertTableRowBeforeLabel":"הוספת שורה לפני","cellSpacing":"ריווח תאים:","pixels":"פיקסלים","selectTableLabel":"בחירת טבלה","rows":"שורות:","modifyTableTitle":"שינוי טבלה","cellPadding":"ריפוד תאים:","deleteTableRowLabel":"מחיקת שורה","backgroundColor":"צבע רקע:","insertTableColumnAfterLabel":"הוספת עמודה אחרי","left":"ימין","borderThickness":"עובי גבול","columns":"עמודות:","percent":"אחוז","borderColor":"צבע גבול:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/PageBreak.js	(revision 9)
@@ -0,0 +1 @@
+({"pageBreak":"Page Break"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/Preview.js	(revision 9)
@@ -0,0 +1 @@
+({"preview":"Preview"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/fi/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/fi/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/fi/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Aseta","insertTableTitle":"Lisää taulukko","insertTableRowAfterLabel":"Lisää rivi jälkeen","center":"keskitetty","deleteTableColumnLabel":"Poista sarake","right":"oikea","insertTableColumnBeforeLabel":"Lisää sarake ennen","tableWidth":"Taulukon leveys:","buttonInsert":"Lisää","default":"oletus","align":"Tasaus:","insertTableRowBeforeLabel":"Lisää rivi ennen","cellSpacing":"Solujen väli:","pixels":"kuvapistettä","selectTableLabel":"Valitse taulukko","rows":"Rivit:","modifyTableTitle":"Muokkaa taulukkoa","cellPadding":"Solun täyttö:","deleteTableRowLabel":"Poista rivi","backgroundColor":"Taustaväri:","insertTableColumnAfterLabel":"Lisää sarake jälkeen","left":"vasen","borderThickness":"Kehyksen paksuus","columns":"Sarakkeet:","percent":"prosenttia","borderColor":"Kehyksen väri:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/TextColor.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/TextColor.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/TextColor.js	(revision 9)
@@ -0,0 +1 @@
+({"setButtonText":"Set","cancelButtonText":"Cancel"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/nb/TableDialog.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/nb/TableDialog.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/nb/TableDialog.js	(revision 9)
@@ -0,0 +1 @@
+({"buttonSet":"Definer","insertTableTitle":"Sett inn tabell","insertTableRowAfterLabel":"Legg til rad etter","center":"midtstill","deleteTableColumnLabel":"Slett kolonne","right":"høyre","insertTableColumnBeforeLabel":"Legg til kolonne foran","tableWidth":"Tabellbredde:","buttonInsert":"Sett inn","default":"standard","align":"Juster:","insertTableRowBeforeLabel":"Legg til rad foran","cellSpacing":"Celleavstand:","pixels":"piksler","selectTableLabel":"Velg tabell","rows":"Rader:","modifyTableTitle":"Endre tabell","cellPadding":"Celleutfylling:","deleteTableRowLabel":"Slett rad","backgroundColor":"Bakgrunnsfarge:","insertTableColumnAfterLabel":"Legg til kolonne etter","left":"venstre","borderThickness":"Kanttykkelse","columns":"Kolonner:","percent":"prosent","borderColor":"Kantlinjefarge:"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/nls/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/nls/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/nls/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1 @@
+({"showBlockNodes":"Show HTML Block Elements"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/editor/plugins/NormalizeStyle.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/NormalizeStyle.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/NormalizeStyle.js	(revision 9)
@@ -0,0 +1,457 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.NormalizeStyle"]){
+dojo._hasResource["dojox.editor.plugins.NormalizeStyle"]=true;
+dojo.provide("dojox.editor.plugins.NormalizeStyle");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.html");
+dojo.experimental("dojox.editor.plugins.NormalizeStyle");
+dojo.declare("dojox.editor.plugins.NormalizeStyle",dijit._editor._Plugin,{mode:"semantic",condenseSpans:true,setEditor:function(_1){
+this.editor=_1;
+_1.customUndo=true;
+if(this.mode==="semantic"){
+this.editor.contentDomPostFilters.push(dojo.hitch(this,this._convertToSemantic));
+}else{
+if(this.mode==="css"){
+this.editor.contentDomPostFilters.push(dojo.hitch(this,this._convertToCss));
+}
+}
+if(dojo.isIE){
+this.editor.contentDomPreFilters.push(dojo.hitch(this,this._convertToSemantic));
+this._browserFilter=this._convertToSemantic;
+}else{
+if(dojo.isWebKit){
+this.editor.contentDomPreFilters.push(dojo.hitch(this,this._convertToCss));
+this._browserFilter=this._convertToCss;
+}else{
+if(dojo.isMoz){
+this.editor.contentDomPreFilters.push(dojo.hitch(this,this._convertToSemantic));
+this._browserFilter=this._convertToSemantic;
+}else{
+this.editor.contentDomPreFilters.push(dojo.hitch(this,this._convertToSemantic));
+this._browserFilter=this._convertToSemantic;
+}
+}
+}
+if(this.editor._inserthtmlImpl){
+this.editor._oldInsertHtmlImpl=this.editor._inserthtmlImpl;
+}
+this.editor._inserthtmlImpl=dojo.hitch(this,this._inserthtmlImpl);
+},_convertToSemantic:function(_2){
+if(_2){
+var w=this.editor.window;
+var _3=this;
+var _4=function(_5){
+if(_5.nodeType==1){
+if(_5.id!=="dijitEditorBody"){
+var _6=_5.style;
+var _7=_5.tagName?_5.tagName.toLowerCase():"";
+var _8;
+if(_6&&_7!="table"&&_7!="ul"&&_7!="ol"){
+var fw=_6.fontWeight?_6.fontWeight.toLowerCase():"";
+var fs=_6.fontStyle?_6.fontStyle.toLowerCase():"";
+var td=_6.textDecoration?_6.textDecoration.toLowerCase():"";
+var s=_6.fontSize?_6.fontSize.toLowerCase():"";
+var bc=_6.backgroundColor?_6.backgroundColor.toLowerCase():"";
+var c=_6.color?_6.color.toLowerCase():"";
+var _9=function(_a,_b){
+if(_a){
+while(_b.firstChild){
+_a.appendChild(_b.firstChild);
+}
+if(_7=="span"&&!_b.style.cssText){
+dojo.place(_a,_b,"before");
+_b.parentNode.removeChild(_b);
+_b=_a;
+}else{
+_b.appendChild(_a);
+}
+}
+return _b;
+};
+switch(fw){
+case "bold":
+case "bolder":
+case "700":
+case "800":
+case "900":
+_8=dojo.withGlobal(w,"create",dojo,["b",{}]);
+_5.style.fontWeight="";
+break;
+}
+_5=_9(_8,_5);
+_8=null;
+if(fs=="italic"){
+_8=dojo.withGlobal(w,"create",dojo,["i",{}]);
+_5.style.fontStyle="";
+}
+_5=_9(_8,_5);
+_8=null;
+if(td){
+var da=td.split(" ");
+var _c=0;
+dojo.forEach(da,function(s){
+switch(s){
+case "underline":
+_8=dojo.withGlobal(w,"create",dojo,["u",{}]);
+break;
+case "line-through":
+_8=dojo.withGlobal(w,"create",dojo,["strike",{}]);
+break;
+}
+_c++;
+if(_c==da.length){
+_5.style.textDecoration="";
+}
+_5=_9(_8,_5);
+_8=null;
+});
+}
+if(s){
+var _d={"xx-small":1,"x-small":2,"small":3,"medium":4,"large":5,"x-large":6,"xx-large":7,"-webkit-xxx-large":7};
+if(s.indexOf("pt")>0){
+s=s.substring(0,s.indexOf("pt"));
+s=parseInt(s);
+if(s<5){
+s="xx-small";
+}else{
+if(s<10){
+s="x-small";
+}else{
+if(s<15){
+s="small";
+}else{
+if(s<20){
+s="medium";
+}else{
+if(s<25){
+s="large";
+}else{
+if(s<30){
+s="x-large";
+}else{
+if(s>30){
+s="xx-large";
+}
+}
+}
+}
+}
+}
+}
+}else{
+if(s.indexOf("px")>0){
+s=s.substring(0,s.indexOf("px"));
+s=parseInt(s);
+if(s<5){
+s="xx-small";
+}else{
+if(s<10){
+s="x-small";
+}else{
+if(s<15){
+s="small";
+}else{
+if(s<20){
+s="medium";
+}else{
+if(s<25){
+s="large";
+}else{
+if(s<30){
+s="x-large";
+}else{
+if(s>30){
+s="xx-large";
+}
+}
+}
+}
+}
+}
+}
+}
+}
+var _e=_d[s];
+if(!_e){
+_e=3;
+}
+_8=dojo.withGlobal(w,"create",dojo,["font",{size:_e}]);
+_5.style.fontSize="";
+}
+_5=_9(_8,_5);
+_8=null;
+if(bc&&_7!=="font"&&_3._isInline(_7)){
+bc=new dojo.Color(bc).toHex();
+_8=dojo.withGlobal(w,"create",dojo,["font",{style:{backgroundColor:bc}}]);
+_5.style.backgroundColor="";
+}
+if(c&&_7!=="font"){
+c=new dojo.Color(c).toHex();
+_8=dojo.withGlobal(w,"create",dojo,["font",{color:c}]);
+_5.style.color="";
+}
+_5=_9(_8,_5);
+_8=null;
+}
+}
+if(_5.childNodes){
+var _f=[];
+dojo.forEach(_5.childNodes,function(n){
+_f.push(n);
+});
+dojo.forEach(_f,_4);
+}
+}
+return _5;
+};
+return this._normalizeTags(_4(_2));
+}
+return _2;
+},_normalizeTags:function(_10){
+var w=this.editor.window;
+var _11=dojo.withGlobal(w,function(){
+return dojo.query("em,s,strong",_10);
+});
+if(_11&&_11.length){
+dojo.forEach(_11,function(n){
+if(n){
+var tag=n.tagName?n.tagName.toLowerCase():"";
+var _12;
+switch(tag){
+case "s":
+_12="strike";
+break;
+case "em":
+_12="i";
+break;
+case "strong":
+_12="b";
+break;
+}
+if(_12){
+var _13=dojo.withGlobal(w,"create",dojo,[_12,null,n,"before"]);
+while(n.firstChild){
+_13.appendChild(n.firstChild);
+}
+n.parentNode.removeChild(n);
+}
+}
+});
+}
+return _10;
+},_convertToCss:function(_14){
+if(_14){
+var w=this.editor.window;
+var _15=function(_16){
+if(_16.nodeType==1){
+if(_16.id!=="dijitEditorBody"){
+var tag=_16.tagName?_16.tagName.toLowerCase():"";
+if(tag){
+var _17;
+switch(tag){
+case "b":
+case "strong":
+_17=dojo.withGlobal(w,"create",dojo,["span",{style:{"fontWeight":"bold"}}]);
+break;
+case "i":
+case "em":
+_17=dojo.withGlobal(w,"create",dojo,["span",{style:{"fontStyle":"italic"}}]);
+break;
+case "u":
+_17=dojo.withGlobal(w,"create",dojo,["span",{style:{"textDecoration":"underline"}}]);
+break;
+case "strike":
+case "s":
+_17=dojo.withGlobal(w,"create",dojo,["span",{style:{"textDecoration":"line-through"}}]);
+break;
+case "font":
+var _18={};
+if(dojo.attr(_16,"color")){
+_18.color=dojo.attr(_16,"color");
+}
+if(dojo.attr(_16,"face")){
+_18.fontFace=dojo.attr(_16,"face");
+}
+if(_16.style&&_16.style.backgroundColor){
+_18.backgroundColor=_16.style.backgroundColor;
+}
+if(_16.style&&_16.style.color){
+_18.color=_16.style.color;
+}
+var _19={1:"xx-small",2:"x-small",3:"small",4:"medium",5:"large",6:"x-large",7:"xx-large"};
+if(dojo.attr(_16,"size")){
+_18.fontSize=_19[dojo.attr(_16,"size")];
+}
+_17=dojo.withGlobal(w,"create",dojo,["span",{style:_18}]);
+break;
+}
+if(_17){
+while(_16.firstChild){
+_17.appendChild(_16.firstChild);
+}
+dojo.place(_17,_16,"before");
+_16.parentNode.removeChild(_16);
+_16=_17;
+}
+}
+}
+if(_16.childNodes){
+var _1a=[];
+dojo.forEach(_16.childNodes,function(n){
+_1a.push(n);
+});
+dojo.forEach(_1a,_15);
+}
+}
+return _16;
+};
+_14=_15(_14);
+if(this.condenseSpans){
+this._condenseSpans(_14);
+}
+}
+return _14;
+},_condenseSpans:function(_1b){
+var _1c=function(_1d){
+var _1e=function(_1f){
+var m;
+if(_1f){
+m={};
+var _20=_1f.toLowerCase().split(";");
+dojo.forEach(_20,function(s){
+if(s){
+var ss=s.split(":");
+var key=ss[0]?dojo.trim(ss[0]):"";
+var val=ss[1]?dojo.trim(ss[1]):"";
+if(key&&val){
+var i;
+var _21="";
+for(i=0;i<key.length;i++){
+var ch=key.charAt(i);
+if(ch=="-"){
+i++;
+ch=key.charAt(i);
+_21+=ch.toUpperCase();
+}else{
+_21+=ch;
+}
+}
+m[_21]=val;
+}
+}
+});
+}
+return m;
+};
+if(_1d&&_1d.nodeType==1){
+var tag=_1d.tagName?_1d.tagName.toLowerCase():"";
+if(tag==="span"&&_1d.childNodes&&_1d.childNodes.length===1){
+var c=_1d.firstChild;
+while(c&&c.nodeType==1&&c.tagName&&c.tagName.toLowerCase()=="span"){
+if(!dojo.attr(c,"class")&&!dojo.attr(c,"id")&&c.style){
+var s1=_1e(_1d.style.cssText);
+var s2=_1e(c.style.cssText);
+if(s1&&s2){
+var _22={};
+var i;
+for(i in s1){
+if(!s1[i]||!s2[i]||s1[i]==s2[i]){
+_22[i]=s1[i];
+delete s2[i];
+}else{
+if(s1[i]!=s2[i]){
+if(i=="textDecoration"){
+_22[i]=s1[i]+" "+s2[i];
+delete s2[i];
+}else{
+_22=null;
+}
+break;
+}else{
+_22=null;
+break;
+}
+}
+}
+if(_22){
+for(i in s2){
+_22[i]=s2[i];
+}
+dojo.style(_1d,_22);
+while(c.firstChild){
+_1d.appendChild(c.firstChild);
+}
+var t=c.nextSibling;
+c.parentNode.removeChild(c);
+c=t;
+}else{
+c=c.nextSibling;
+}
+}else{
+c=c.nextSibling;
+}
+}else{
+c=c.nextSibling;
+}
+}
+}
+}
+if(_1d.childNodes&&_1d.childNodes.length){
+dojo.forEach(_1d.childNodes,_1c);
+}
+};
+_1c(_1b);
+},_isInline:function(tag){
+switch(tag){
+case "a":
+case "b":
+case "strong":
+case "s":
+case "strike":
+case "i":
+case "u":
+case "em":
+case "sup":
+case "sub":
+case "span":
+case "font":
+case "big":
+case "cite":
+case "q":
+case "img":
+case "small":
+return true;
+default:
+return false;
+}
+},_inserthtmlImpl:function(_23){
+if(_23){
+var div=this.editor.document.createElement("div");
+div.innerHTML=_23;
+div=this._browserFilter(div);
+_23=dijit._editor.getChildrenHtml(div);
+div.innerHTML="";
+if(this.editor._oldInsertHtmlImpl){
+return this.editor._oldInsertHtmlImpl(_23);
+}else{
+return this.editor.execCommand("inserthtml",_23);
+}
+}
+return false;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _24=o.args.name.toLowerCase();
+if(_24==="normalizestyle"){
+o.plugin=new dojox.editor.plugins.NormalizeStyle({mode:("mode" in o.args)?o.args.mode:"semantic",condenseSpans:("condenseSpans" in o.args)?o.args.condenseSpans:true});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/PageBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/PageBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/PageBreak.js	(revision 9)
@@ -0,0 +1,78 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.PageBreak"]){
+dojo._hasResource["dojox.editor.plugins.PageBreak"]=true;
+dojo.provide("dojox.editor.plugins.PageBreak");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","PageBreak",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.PageBreak",dijit._editor._Plugin,{useDefaultCommand:false,iconClassPrefix:"dijitAdditionalEditorIcon",_unbreakableNodes:["li","ul","ol"],_pbContent:"<hr style='page-break-after: always;' class='dijitEditorPageBreak'>",_initButton:function(){
+var ed=this.editor;
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","PageBreak");
+this.button=new dijit.form.Button({label:_1["pageBreak"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"PageBreak",tabIndex:"-1",onClick:dojo.hitch(this,"_insertPageBreak")});
+ed.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+ed.addKeyHandler(dojo.keys.ENTER,true,true,dojo.hitch(this,this._insertPageBreak));
+if(dojo.isWebKit||dojo.isOpera){
+this.connect(this.editor,"onKeyDown",dojo.hitch(this,function(e){
+if((e.keyCode===dojo.keys.ENTER)&&e.ctrlKey&&e.shiftKey){
+this._insertPageBreak();
+}
+}));
+}
+}));
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},_style:function(){
+if(!this._styled){
+this._styled=true;
+var _3=this.editor.document;
+var _4=".dijitEditorPageBreak {\n"+"\tborder-top-style: solid;\n"+"\tborder-top-width: 3px;\n"+"\tborder-top-color: #585858;\n"+"\tborder-bottom-style: solid;\n"+"\tborder-bottom-width: 1px;\n"+"\tborder-bottom-color: #585858;\n"+"\tborder-left-style: solid;\n"+"\tborder-left-width: 1px;\n"+"\tborder-left-color: #585858;\n"+"\tborder-right-style: solid;\n"+"\tborder-right-width: 1px;\n"+"\tborder-right-color: #585858;\n"+"\tcolor: #A4A4A4;\n"+"\tbackground-color: #A4A4A4;\n"+"\theight: 10px;\n"+"\tpage-break-after: always;\n"+"\tpadding: 0px 0px 0px 0px;\n"+"}\n\n"+"@media print {\n"+"\t.dijitEditorPageBreak { page-break-after: always; "+"background-color: rgba(0,0,0,0); color: rgba(0,0,0,0); "+"border: 0px none rgba(0,0,0,0); display: hidden; "+"width: 0px; height: 0px;}\n"+"}";
+if(!dojo.isIE){
+var _5=_3.createElement("style");
+_5.appendChild(_3.createTextNode(_4));
+_3.getElementsByTagName("head")[0].appendChild(_5);
+}else{
+var ss=_3.createStyleSheet("");
+ss.cssText=_4;
+}
+}
+},_insertPageBreak:function(){
+try{
+if(!this._styled){
+this._style();
+}
+if(this._allowBreak()){
+this.editor.execCommand("inserthtml",this._pbContent);
+}
+}
+catch(e){
+console.warn(e);
+}
+},_allowBreak:function(){
+var ed=this.editor;
+var _6=ed.document;
+var _7=ed._sCall("getSelectedElement",null)||ed._sCall("getParentElement",null);
+while(_7&&_7!==_6.body&&_7!==_6.html){
+if(ed._sCall("isTag",[_7,this._unbreakableNodes])){
+return false;
+}
+_7=_7.parentNode;
+}
+return true;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _8=o.args.name.toLowerCase();
+if(_8==="pagebreak"){
+o.plugin=new dojox.editor.plugins.PageBreak({});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/Preview.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/Preview.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/Preview.js	(revision 9)
@@ -0,0 +1,53 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Preview"]){
+dojo._hasResource["dojox.editor.plugins.Preview"]=true;
+dojo.provide("dojox.editor.plugins.Preview");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","Preview",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.Preview",dijit._editor._Plugin,{useDefaultCommand:false,styles:"",stylesheets:null,iconClassPrefix:"dijitAdditionalEditorIcon",_initButton:function(){
+this._nlsResources=dojo.i18n.getLocalization("dojox.editor.plugins","Preview");
+this.button=new dijit.form.Button({label:this._nlsResources["preview"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Preview",tabIndex:"-1",onClick:dojo.hitch(this,"_preview")});
+},setEditor:function(_1){
+this.editor=_1;
+this._initButton();
+},_preview:function(){
+try{
+var _2=this.editor.get("value");
+var _3="\t\t<meta http-equiv='Content-Type' content='text/html; charset='UTF-8'>\n";
+var i;
+if(this.stylesheets){
+for(i=0;i<this.stylesheets.length;i++){
+_3+="\t\t<link rel='stylesheet' type='text/css' href='"+this.stylesheets[i]+"'>\n";
+}
+}
+if(this.styles){
+_3+=("\t\t<style>"+this.styles+"</style>\n");
+}
+_2="<html>\n\t<head>\n"+_3+"\t</head>\n\t<body>\n"+_2+"\n\t</body>\n</html>";
+var _4=window.open("javascript: ''",this._nlsResources["preview"],"status=1,menubar=0,location=0,toolbar=0");
+_4.document.open();
+_4.document.write(_2);
+_4.document.close();
+}
+catch(e){
+console.warn(e);
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _5=o.args.name.toLowerCase();
+if(_5==="preview"){
+o.plugin=new dojox.editor.plugins.Preview({styles:("styles" in o.args)?o.args.styles:"",stylesheets:("stylesheets" in o.args)?o.args.stylesheets:null});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/TextColor.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/TextColor.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/TextColor.js	(revision 9)
@@ -0,0 +1,99 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.TextColor"]){
+dojo._hasResource["dojox.editor.plugins.TextColor"]=true;
+dojo.provide("dojox.editor.plugins.TextColor");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dijit.form.Button");
+dojo.require("dojox.widget.ColorPicker");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","TextColor",null,"ROOT,ro");
+dojo.experimental("dojox.editor.plugins.TextColor");
+dojo.declare("dojox.editor.plugins._TextColorDropDown",[dijit._Widget,dijit._Templated],{templateString:"<div style='display: none; position: absolute; top: -10000; z-index: -10000'>"+"<div dojoType='dijit.TooltipDialog' dojoAttachPoint='dialog' class='dojoxEditorColorPicker'>"+"<div dojoType='dojox.widget.ColorPicker' dojoAttachPoint='_colorPicker'></div>"+"<br>"+"<center>"+"<button dojoType='dijit.form.Button' type='button' dojoAttachPoint='_setButton'>${setButtonText}</button>"+"&nbsp;"+"<button dojoType='dijit.form.Button' type='button' dojoAttachPoint='_cancelButton'>${cancelButtonText}</button>"+"</center>"+"</div>"+"</div>",widgetsInTemplate:true,constructor:function(){
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","TextColor");
+dojo.mixin(this,_1);
+},startup:function(){
+if(!this._started){
+this.inherited(arguments);
+this.connect(this._setButton,"onClick",dojo.hitch(this,function(){
+this.onChange(this.get("value"));
+}));
+this.connect(this._cancelButton,"onClick",dojo.hitch(this,function(){
+dijit.popup.close(this.dialog);
+this.onCancel();
+}));
+dojo.style(this.domNode,"display","block");
+}
+},_setValueAttr:function(_2,_3){
+this._colorPicker.set("value",_2,_3);
+},_getValueAttr:function(){
+return this._colorPicker.get("value");
+},onChange:function(_4){
+},onCancel:function(){
+}});
+dojo.declare("dojox.editor.plugins.TextColor",dijit._editor._Plugin,{buttonClass:dijit.form.DropDownButton,useDefaultCommand:false,constructor:function(){
+this._picker=new dojox.editor.plugins._TextColorDropDown();
+dojo.body().appendChild(this._picker.domNode);
+this._picker.startup();
+this.dropDown=this._picker.dialog;
+this.connect(this._picker,"onChange",function(_5){
+this.editor.execCommand(this.command,_5);
+});
+this.connect(this._picker,"onCancel",function(){
+this.editor.focus();
+});
+},updateState:function(){
+var _6=this.editor;
+var _7=this.command;
+if(!_6||!_6.isLoaded||!_7.length){
+return;
+}
+var _8;
+if(this.button){
+try{
+_8=_6.queryCommandValue(_7)||"";
+}
+catch(e){
+_8="";
+}
+}
+if(_8==""){
+_8="#000000";
+}
+if(_8=="transparent"){
+_8="#ffffff";
+}
+if(typeof _8=="string"){
+if(_8.indexOf("rgb")>-1){
+_8=dojo.colorFromRgb(_8).toHex();
+}
+}else{
+_8=((_8&255)<<16)|(_8&65280)|((_8&16711680)>>>16);
+_8=_8.toString(16);
+_8="#000000".slice(0,7-_8.length)+_8;
+}
+if(_8!==this._picker.get("value")){
+this._picker.set("value",_8,false);
+}
+},destroy:function(){
+this.inherited(arguments);
+this._picker.destroyRecursive();
+delete this._picker;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "foreColor":
+case "hiliteColor":
+o.plugin=new dojox.editor.plugins.TextColor({command:o.args.name});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/ShowBlockNodes.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/ShowBlockNodes.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/ShowBlockNodes.js	(revision 9)
@@ -0,0 +1,94 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.ShowBlockNodes"]){
+dojo._hasResource["dojox.editor.plugins.ShowBlockNodes"]=true;
+dojo.provide("dojox.editor.plugins.ShowBlockNodes");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","ShowBlockNodes",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.ShowBlockNodes",dijit._editor._Plugin,{useDefaultCommand:false,iconClassPrefix:"dijitAdditionalEditorIcon",_styled:false,_initButton:function(){
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","ShowBlockNodes");
+this.button=new dijit.form.ToggleButton({label:_1["showBlockNodes"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"ShowBlockNodes",tabIndex:"-1",onChange:dojo.hitch(this,"_showBlocks")});
+this.editor.addKeyHandler(dojo.keys.F9,true,true,dojo.hitch(this,this.toggle));
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},toggle:function(){
+this.button.set("checked",!this.button.get("checked"));
+},_showBlocks:function(_3){
+var _4=this.editor.document;
+if(!this._styled){
+try{
+this._styled=true;
+var _5="";
+var _6=["div","p","ul","ol","table","h1","h2","h3","h4","h5","h6","pre","dir","center","blockquote","form","fieldset","address","object","pre","hr","ins","noscript","li","map","button","dd","dt"];
+var _7="@media screen {\n"+"\t.editorShowBlocks {TAG} {\n"+"\t\tbackground-image: url({MODURL}/images/blockelems/{TAG}.gif);\n"+"\t\tbackground-repeat: no-repeat;\n"+"\t\tbackground-position: top left;\n"+"\t\tborder-width: 1px;\n"+"\t\tborder-style: dashed;\n"+"\t\tborder-color: #D0D0D0;\n"+"\t\tpadding-top: 15px;\n"+"\t\tpadding-left: 15px;\n"+"\t}\n"+"}\n";
+dojo.forEach(_6,function(_8){
+_5+=_7.replace(/\{TAG\}/gi,_8);
+});
+var _9=dojo.moduleUrl(dojox._scopeName,"editor/plugins/resources").toString();
+if(!(_9.match(/^https?:\/\//i))&&!(_9.match(/^file:\/\//i))){
+var _a;
+if(_9.charAt(0)==="/"){
+var _b=dojo.doc.location.protocol;
+var _c=dojo.doc.location.host;
+_a=_b+"//"+_c;
+}else{
+_a=this._calcBaseUrl(dojo.global.location.href);
+}
+if(_a[_a.length-1]!=="/"&&_9.charAt(0)!=="/"){
+_a+="/";
+}
+_9=_a+_9;
+}
+_5=_5.replace(/\{MODURL\}/gi,_9);
+if(!dojo.isIE){
+var _d=_4.createElement("style");
+_d.appendChild(_4.createTextNode(_5));
+_4.getElementsByTagName("head")[0].appendChild(_d);
+}else{
+var ss=_4.createStyleSheet("");
+ss.cssText=_5;
+}
+}
+catch(e){
+console.warn(e);
+}
+}
+if(_3){
+dojo.addClass(this.editor.editNode,"editorShowBlocks");
+}else{
+dojo.removeClass(this.editor.editNode,"editorShowBlocks");
+}
+},_calcBaseUrl:function(_e){
+var _f=null;
+if(_e!==null){
+var _10=_e.indexOf("?");
+if(_10!=-1){
+_e=_e.substring(0,_10);
+}
+_10=_e.lastIndexOf("/");
+if(_10>0&&_10<_e.length){
+_f=_e.substring(0,_10);
+}else{
+_f=_e;
+}
+}
+return _f;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _11=o.args.name.toLowerCase();
+if(_11==="showblocknodes"){
+o.plugin=new dojox.editor.plugins.ShowBlockNodes();
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/UploadImage.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/UploadImage.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/UploadImage.js	(revision 9)
@@ -0,0 +1,58 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.UploadImage"]){
+dojo._hasResource["dojox.editor.plugins.UploadImage"]=true;
+dojo.provide("dojox.editor.plugins.UploadImage");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dojox.form.FileUploader");
+dojo.experimental("dojox.editor.plugins.UploadImage");
+dojo.declare("dojox.editor.plugins.UploadImage",dijit._editor._Plugin,{tempImageUrl:"",iconClassPrefix:"editorIcon",useDefaultCommand:false,uploadUrl:"",button:null,label:"Upload",setToolbar:function(_1){
+this.button.destroy();
+this.createFileInput();
+_1.addChild(this.button);
+},_initButton:function(){
+this.command="uploadImage";
+this.editor.commands[this.command]="Upload Image";
+this.inherited("_initButton",arguments);
+delete this.command;
+},createFileInput:function(){
+var _2=dojo.create("span",{innerHTML:"."},document.body);
+dojo.style(_2,{width:"40px",height:"20px",paddingLeft:"8px",paddingRight:"8px"});
+this.button=new dojox.form.FileUploader({isDebug:true,uploadUrl:this.uploadUrl,uploadOnChange:true,selectMultipleFiles:false,baseClass:"dojoxEditorUploadNorm",hoverClass:"dojoxEditorUploadHover",activeClass:"dojoxEditorUploadActive",disabledClass:"dojoxEditorUploadDisabled"},_2);
+this.connect(this.button,"onChange","insertTempImage");
+this.connect(this.button,"onComplete","onComplete");
+},onComplete:function(_3,_4,_5){
+_3=_3[0];
+var _6=dojo.withGlobal(this.editor.window,"byId",dojo,[this.currentImageId]);
+var _7;
+if(this.downloadPath){
+_7=this.downloadPath+_3.name;
+}else{
+_7=_3.file;
+}
+_6.src=_7;
+dojo.attr(_6,"_djrealurl",_7);
+if(_3.width){
+_6.width=_3.width;
+_6.height=_3.height;
+}
+},insertTempImage:function(){
+this.currentImageId="img_"+(new Date().getTime());
+var _8="<img id=\""+this.currentImageId+"\" src=\""+this.tempImageUrl+"\" width=\"32\" height=\"32\"/>";
+this.editor.execCommand("inserthtml",_8);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+switch(o.args.name){
+case "uploadImage":
+o.plugin=new dojox.editor.plugins.UploadImage({url:o.args.url});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/TablePlugins.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/TablePlugins.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/TablePlugins.js	(revision 9)
@@ -0,0 +1,637 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.TablePlugins"]){
+dojo._hasResource["dojox.editor.plugins.TablePlugins"]=true;
+dojo.provide("dojox.editor.plugins.TablePlugins");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.selection");
+dojo.require("dijit.Menu");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","TableDialog",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins.TablePlugins");
+dojo.declare("dojox.editor.plugins._TableHandler",dijit._editor._Plugin,{tablesConnected:false,currentlyAvailable:false,alwaysAvailable:false,availableCurrentlySet:false,initialized:false,tableData:null,shiftKeyDown:false,editorDomNode:null,undoEnabled:true,refCount:0,doMixins:function(){
+dojo.mixin(this.editor,{getAncestorElement:function(_1){
+return dojo.withGlobal(this.window,"getAncestorElement",dijit._editor.selection,[_1]);
+},hasAncestorElement:function(_2){
+return dojo.withGlobal(this.window,"hasAncestorElement",dijit._editor.selection,[_2]);
+},selectElement:function(_3){
+dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[_3]);
+},byId:function(id){
+return dojo.withGlobal(this.window,"byId",dojo,[id]);
+},query:function(_4,_5,_6){
+var ar=dojo.withGlobal(this.window,"query",dojo,[_4,_5]);
+return (_6)?ar[0]:ar;
+}});
+},initialize:function(_7){
+this.refCount++;
+_7.customUndo=true;
+if(this.initialized){
+return;
+}
+this.initialized=true;
+this.editor=_7;
+this.editor._tablePluginHandler=this;
+_7.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this.editorDomNode=this.editor.editNode||this.editor.iframe.document.body.firstChild;
+this._myListeners=[];
+this._myListeners.push(dojo.connect(this.editorDomNode,"mouseup",this.editor,"onClick"));
+this._myListeners.push(dojo.connect(this.editor,"onDisplayChanged",this,"checkAvailable"));
+this._myListeners.push(dojo.connect(this.editor,"onBlur",this,"checkAvailable"));
+this.doMixins();
+this.connectDraggable();
+}));
+},getTableInfo:function(_8){
+if(_8){
+this._tempStoreTableData(false);
+}
+if(this.tableData){
+return this.tableData;
+}
+var tr,_9,td,_a,_b,_c,_d,_e;
+td=this.editor.getAncestorElement("td");
+if(td){
+tr=td.parentNode;
+}
+_b=this.editor.getAncestorElement("table");
+_a=dojo.query("td",_b);
+_a.forEach(function(d,i){
+if(td==d){
+_d=i;
+}
+});
+_9=dojo.query("tr",_b);
+_9.forEach(function(r,i){
+if(tr==r){
+_e=i;
+}
+});
+_c=_a.length/_9.length;
+var o={tbl:_b,td:td,tr:tr,trs:_9,tds:_a,rows:_9.length,cols:_c,tdIndex:_d,trIndex:_e,colIndex:_d%_c};
+this.tableData=o;
+this._tempStoreTableData(500);
+return this.tableData;
+},connectDraggable:function(){
+if(!dojo.isIE){
+return;
+}
+this.editorDomNode.ondragstart=dojo.hitch(this,"onDragStart");
+this.editorDomNode.ondragend=dojo.hitch(this,"onDragEnd");
+},onDragStart:function(){
+var e=window.event;
+if(!e.srcElement.id){
+e.srcElement.id="tbl_"+(new Date().getTime());
+}
+},onDragEnd:function(){
+var e=window.event;
+var _f=e.srcElement;
+var id=_f.id;
+var win=this.editor.window;
+if(_f.tagName.toLowerCase()=="table"){
+setTimeout(function(){
+var _10=dojo.withGlobal(win,"byId",dojo,[id]);
+dojo.removeAttr(_10,"align");
+},100);
+}
+},checkAvailable:function(){
+if(this.availableCurrentlySet){
+return this.currentlyAvailable;
+}
+if(!this.editor){
+return false;
+}
+if(this.alwaysAvailable){
+return true;
+}
+this.currentlyAvailable=this.editor._focused?this.editor.hasAncestorElement("table"):false;
+if(this.currentlyAvailable){
+this.connectTableKeys();
+}else{
+this.disconnectTableKeys();
+}
+this._tempAvailability(500);
+dojo.publish(this.editor.id+"_tablePlugins",[this.currentlyAvailable]);
+return this.currentlyAvailable;
+},_prepareTable:function(tbl){
+var tds=this.editor.query("td",tbl);
+if(!tds[0].id){
+tds.forEach(function(td,i){
+if(!td.id){
+td.id="tdid"+i+this.getTimeStamp();
+}
+},this);
+}
+return tds;
+},getTimeStamp:function(){
+return Math.floor(new Date().getTime()*1e-8);
+},_tempStoreTableData:function(_11){
+if(_11===true){
+}else{
+if(_11===false){
+this.tableData=null;
+}else{
+if(_11===undefined){
+console.warn("_tempStoreTableData must be passed an argument");
+}else{
+setTimeout(dojo.hitch(this,function(){
+this.tableData=null;
+}),_11);
+}
+}
+}
+},_tempAvailability:function(_12){
+if(_12===true){
+this.availableCurrentlySet=true;
+}else{
+if(_12===false){
+this.availableCurrentlySet=false;
+}else{
+if(_12===undefined){
+console.warn("_tempAvailability must be passed an argument");
+}else{
+this.availableCurrentlySet=true;
+setTimeout(dojo.hitch(this,function(){
+this.availableCurrentlySet=false;
+}),_12);
+}
+}
+}
+},connectTableKeys:function(){
+if(this.tablesConnected){
+return;
+}
+this.tablesConnected=true;
+var _13=(this.editor.iframe)?this.editor.document:this.editor.editNode;
+this.cnKeyDn=dojo.connect(_13,"onkeydown",this,"onKeyDown");
+this.cnKeyUp=dojo.connect(_13,"onkeyup",this,"onKeyUp");
+this._myListeners.push(dojo.connect(_13,"onkeypress",this,"onKeyUp"));
+},disconnectTableKeys:function(){
+dojo.disconnect(this.cnKeyDn);
+dojo.disconnect(this.cnKeyUp);
+this.tablesConnected=false;
+},onKeyDown:function(evt){
+var key=evt.keyCode;
+if(key==16){
+this.shiftKeyDown=true;
+}
+if(key==9){
+var o=this.getTableInfo();
+o.tdIndex=(this.shiftKeyDown)?o.tdIndex-1:tabTo=o.tdIndex+1;
+if(o.tdIndex>=0&&o.tdIndex<o.tds.length){
+this.editor.selectElement(o.tds[o.tdIndex]);
+this.currentlyAvailable=true;
+this._tempAvailability(true);
+this._tempStoreTableData(true);
+this.stopEvent=true;
+}else{
+this.stopEvent=false;
+this.onDisplayChanged();
+}
+if(this.stopEvent){
+dojo.stopEvent(evt);
+}
+}
+},onKeyUp:function(evt){
+var key=evt.keyCode;
+if(key==16){
+this.shiftKeyDown=false;
+}
+if(key==37||key==38||key==39||key==40){
+this.onDisplayChanged();
+}
+if(key==9&&this.stopEvent){
+dojo.stopEvent(evt);
+}
+},onDisplayChanged:function(){
+this.currentlyAvailable=false;
+this._tempStoreTableData(false);
+this._tempAvailability(false);
+this.checkAvailable();
+},uninitialize:function(_14){
+if(this.editor==_14){
+this.refCount--;
+if(!this.refCount&&this.initialized){
+if(this.tablesConnected){
+this.disconnectTableKeys();
+}
+this.initialized=false;
+dojo.forEach(this._myListeners,function(l){
+dojo.disconnect(l);
+});
+delete this._myListeners;
+delete this.editor._tablePluginHandler;
+delete this.editor;
+}
+this.inherited(arguments);
+}
+}});
+dojo.declare("dojox.editor.plugins.TablePlugins",dijit._editor._Plugin,{iconClassPrefix:"editorIcon",useDefaultCommand:false,buttonClass:dijit.form.Button,commandName:"",label:"",alwaysAvailable:false,undoEnabled:true,onDisplayChanged:function(_15){
+if(!this.alwaysAvailable){
+this.available=_15;
+this.button.set("disabled",!this.available);
+}
+},setEditor:function(_16){
+this.editor=_16;
+this.editor.customUndo=true;
+this.inherited(arguments);
+this._availableTopic=dojo.subscribe(this.editor.id+"_tablePlugins",this,"onDisplayChanged");
+this.onEditorLoaded();
+},onEditorLoaded:function(){
+if(!this.editor._tablePluginHandler){
+var _17=new dojox.editor.plugins._TableHandler();
+_17.initialize(this.editor);
+}else{
+this.editor._tablePluginHandler.initialize(this.editor);
+}
+},selectTable:function(){
+var o=this.getTableInfo();
+if(o&&o.tbl){
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[o.tbl]);
+}
+},_initButton:function(){
+this.command=this.commandName;
+this.label=this.editor.commands[this.command]=this._makeTitle(this.command);
+this.inherited(arguments);
+delete this.command;
+this.connect(this.button,"onClick","modTable");
+this.onDisplayChanged(false);
+},modTable:function(cmd,_18){
+this.begEdit();
+var o=this.getTableInfo();
+var sw=(dojo.isString(cmd))?cmd:this.commandName;
+var r,c,i;
+var _19=false;
+if(dojo.isIE){
+this.editor.focus();
+}
+switch(sw){
+case "insertTableRowBefore":
+r=o.tbl.insertRow(o.trIndex);
+for(i=0;i<o.cols;i++){
+c=r.insertCell(-1);
+c.innerHTML="&nbsp;";
+}
+break;
+case "insertTableRowAfter":
+r=o.tbl.insertRow(o.trIndex+1);
+for(i=0;i<o.cols;i++){
+c=r.insertCell(-1);
+c.innerHTML="&nbsp;";
+}
+break;
+case "insertTableColumnBefore":
+o.trs.forEach(function(r){
+c=r.insertCell(o.colIndex);
+c.innerHTML="&nbsp;";
+});
+_19=true;
+break;
+case "insertTableColumnAfter":
+o.trs.forEach(function(r){
+c=r.insertCell(o.colIndex+1);
+c.innerHTML="&nbsp;";
+});
+_19=true;
+break;
+case "deleteTableRow":
+o.tbl.deleteRow(o.trIndex);
+break;
+case "deleteTableColumn":
+o.trs.forEach(function(tr){
+tr.deleteCell(o.colIndex);
+});
+_19=true;
+break;
+case "modifyTable":
+break;
+case "insertTable":
+break;
+}
+if(_19){
+this.makeColumnsEven();
+}
+this.endEdit();
+},begEdit:function(){
+if(this.editor._tablePluginHandler.undoEnabled){
+if(this.editor.customUndo){
+this.editor.beginEditing();
+}else{
+this.valBeforeUndo=this.editor.getValue();
+}
+}
+},endEdit:function(){
+if(this.editor._tablePluginHandler.undoEnabled){
+if(this.editor.customUndo){
+this.editor.endEditing();
+}else{
+var _1a=this.editor.getValue();
+this.editor.setValue(this.valBeforeUndo);
+this.editor.replaceValue(_1a);
+}
+this.editor.onDisplayChanged();
+}
+},makeColumnsEven:function(){
+setTimeout(dojo.hitch(this,function(){
+var o=this.getTableInfo(true);
+var w=Math.floor(100/o.cols);
+o.tds.forEach(function(d){
+dojo.attr(d,"width",w+"%");
+});
+}),10);
+},getTableInfo:function(_1b){
+return this.editor._tablePluginHandler.getTableInfo(_1b);
+},_makeTitle:function(str){
+var ns=[];
+dojo.forEach(str,function(c,i){
+if(c.charCodeAt(0)<91&&i>0&&ns[i-1].charCodeAt(0)!=32){
+ns.push(" ");
+}
+if(i===0){
+c=c.toUpperCase();
+}
+ns.push(c);
+});
+return ns.join("");
+},getSelectedCells:function(){
+var _1c=[];
+var tbl=this.getTableInfo().tbl;
+this.editor._tablePluginHandler._prepareTable(tbl);
+var e=this.editor;
+var _1d=dojo.withGlobal(e.window,"getSelectedHtml",dijit._editor.selection,[null]);
+var str=_1d.match(/id="*\w*"*/g);
+dojo.forEach(str,function(a){
+var id=a.substring(3,a.length);
+if(id.charAt(0)=="\""&&id.charAt(id.length-1)=="\""){
+id=id.substring(1,id.length-1);
+}
+var _1e=e.byId(id);
+if(_1e&&_1e.tagName.toLowerCase()=="td"){
+_1c.push(_1e);
+}
+},this);
+if(!_1c.length){
+var sel=dijit.range.getSelection(e.window);
+if(sel.rangeCount){
+var r=sel.getRangeAt(0);
+var _1f=r.startContainer;
+while(_1f&&_1f!=e.editNode&&_1f!=e.document){
+if(_1f.nodeType===1){
+var tg=_1f.tagName?_1f.tagName.toLowerCase():"";
+if(tg==="td"){
+return [_1f];
+}
+}
+_1f=_1f.parentNode;
+}
+}
+}
+return _1c;
+},destroy:function(){
+this.inherited(arguments);
+dojo.unsubscribe(this._availableTopic);
+this.editor._tablePluginHandler.uninitialize(this.editor);
+}});
+dojo.declare("dojox.editor.plugins.TableContextMenu",dojox.editor.plugins.TablePlugins,{constructor:function(){
+this.connect(this,"setEditor",function(_20){
+_20.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this._createContextMenu();
+}));
+this.button.domNode.style.display="none";
+});
+},_initButton:function(){
+this.inherited(arguments);
+if(this.commandName=="tableContextMenu"){
+this.button.domNode.display="none";
+}
+},_createContextMenu:function(){
+var _21=new dijit.Menu({targetNodeIds:[this.editor.iframe]});
+var _22=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang);
+_21.addChild(new dijit.MenuItem({label:_22.selectTableLabel,onClick:dojo.hitch(this,"selectTable")}));
+_21.addChild(new dijit.MenuSeparator());
+_21.addChild(new dijit.MenuItem({label:_22.insertTableRowBeforeLabel,onClick:dojo.hitch(this,"modTable","insertTableRowBefore")}));
+_21.addChild(new dijit.MenuItem({label:_22.insertTableRowAfterLabel,onClick:dojo.hitch(this,"modTable","insertTableRowAfter")}));
+_21.addChild(new dijit.MenuItem({label:_22.insertTableColumnBeforeLabel,onClick:dojo.hitch(this,"modTable","insertTableColumnBefore")}));
+_21.addChild(new dijit.MenuItem({label:_22.insertTableColumnAfterLabel,onClick:dojo.hitch(this,"modTable","insertTableColumnAfter")}));
+_21.addChild(new dijit.MenuSeparator());
+_21.addChild(new dijit.MenuItem({label:_22.deleteTableRowLabel,onClick:dojo.hitch(this,"modTable","deleteTableRow")}));
+_21.addChild(new dijit.MenuItem({label:_22.deleteTableColumnLabel,onClick:dojo.hitch(this,"modTable","deleteTableColumn")}));
+this.menu=_21;
+}});
+dojo.declare("dojox.editor.plugins.InsertTable",dojox.editor.plugins.TablePlugins,{alwaysAvailable:true,modTable:function(){
+var w=new dojox.editor.plugins.EditorTableDialog({});
+w.show();
+var c=dojo.connect(w,"onBuildTable",this,function(obj){
+dojo.disconnect(c);
+var res=this.editor.execCommand("inserthtml",obj.htmlText);
+});
+}});
+dojo.declare("dojox.editor.plugins.ModifyTable",dojox.editor.plugins.TablePlugins,{modTable:function(){
+if(!this.editor._tablePluginHandler.checkAvailable()){
+return;
+}
+var o=this.getTableInfo();
+var w=new dojox.editor.plugins.EditorModifyTableDialog({table:o.tbl});
+w.show();
+this.connect(w,"onSetTable",function(_23){
+var o=this.getTableInfo();
+dojo.attr(o.td,"bgcolor",_23);
+});
+}});
+dojo.declare("dojox.editor.plugins.ColorTableCell",dojox.editor.plugins.TablePlugins,{constructor:function(){
+this.buttonClass=dijit.form.DropDownButton;
+this.dropDown=new dijit.ColorPalette();
+this.connect(this.dropDown,"onChange",function(_24){
+this.modTable(null,_24);
+});
+},_initButton:function(){
+this.command=this.commandName;
+this.label=this.editor.commands[this.command]=this._makeTitle(this.command);
+this.inherited(arguments);
+delete this.command;
+this.onDisplayChanged(false);
+},modTable:function(cmd,_25){
+this.begEdit();
+var o=this.getTableInfo();
+var tds=this.getSelectedCells(o.tbl);
+dojo.forEach(tds,function(td){
+dojo.style(td,"backgroundColor",_25);
+});
+this.endEdit();
+}});
+dojo.provide("dojox.editor.plugins.EditorTableDialog");
+dojo.require("dijit.Dialog");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.FilteringSelect");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.editor.plugins.EditorTableDialog",[dijit.Dialog],{baseClass:"EditorTableDialog",widgetsInTemplate:true,templateString:dojo.cache("dojox.editor.plugins","resources/insertTable.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\">${insertTableTitle}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n    <div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\">\n        <table class=\"etdTable\"><tr>\n            <td class=\"left\">\n                <span dojoAttachPoint=\"selectRow\" dojoType=\"dijit.form.TextBox\" value=\"2\"></span>\n                <label>${rows}</label>\n            </td><td class=\"right\">\n                <span dojoAttachPoint=\"selectCol\" dojoType=\"dijit.form.TextBox\" value=\"2\"></span>\n                <label>${columns}</label>\n            </td></tr><tr><td>\n                <span dojoAttachPoint=\"selectWidth\" dojoType=\"dijit.form.TextBox\" value=\"100\"></span>\n                <label>${tableWidth}</label>\n            </td><td>\n                <select dojoAttachPoint=\"selectWidthType\" hasDownArrow=\"true\" dojoType=\"dijit.form.FilteringSelect\">\n                  <option value=\"percent\">${percent}</option>\n                  <option value=\"pixels\">${pixels}</option>\n                </select></td></tr>\n          <tr><td>\n                <span dojoAttachPoint=\"selectBorder\" dojoType=\"dijit.form.TextBox\" value=\"1\"></span>\n                <label>${borderThickness}</label></td>\n            <td>\n                ${pixels}\n            </td></tr><tr><td>\n                <span dojoAttachPoint=\"selectPad\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n                <label>${cellPadding}</label></td>\n            <td class=\"cellpad\"></td></tr><tr><td>\n                <span dojoAttachPoint=\"selectSpace\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n                <label>${cellSpacing}</label>\n            </td><td class=\"cellspace\"></td></tr></table>\n        <div class=\"dialogButtonContainer\">\n            <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onInsert\">${buttonInsert}</div>\n            <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onCancel\">${buttonCancel}</div>\n        </div>\n\t</div>\n</div>\n"),postMixInProperties:function(){
+var _26=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang);
+dojo.mixin(this,_26);
+this.inherited(arguments);
+},postCreate:function(){
+dojo.addClass(this.domNode,this.baseClass);
+this.inherited(arguments);
+},onInsert:function(){
+var _27=this.selectRow.get("value")||1,_28=this.selectCol.get("value")||1,_29=this.selectWidth.get("value"),_2a=this.selectWidthType.get("value"),_2b=this.selectBorder.get("value"),pad=this.selectPad.get("value"),_2c=this.selectSpace.get("value"),_2d="tbl_"+(new Date().getTime()),t="<table id=\""+_2d+"\"width=\""+_29+((_2a=="percent")?"%":"")+"\" border=\""+_2b+"\" cellspacing=\""+_2c+"\" cellpadding=\""+pad+"\">\n";
+for(var r=0;r<_27;r++){
+t+="\t<tr>\n";
+for(var c=0;c<_28;c++){
+t+="\t\t<td width=\""+(Math.floor(100/_28))+"%\">&nbsp;</td>\n";
+}
+t+="\t</tr>\n";
+}
+t+="</table>";
+this.onBuildTable({htmlText:t,id:_2d});
+var cl=dojo.connect(this,"onHide",function(){
+dojo.disconnect(cl);
+var _2e=this;
+setTimeout(function(){
+_2e.destroyRecursive();
+},10);
+});
+this.hide();
+},onCancel:function(){
+var c=dojo.connect(this,"onHide",function(){
+dojo.disconnect(c);
+var _2f=this;
+setTimeout(function(){
+_2f.destroyRecursive();
+},10);
+});
+},onBuildTable:function(_30){
+}});
+dojo.provide("dojox.editor.plugins.EditorModifyTableDialog");
+dojo.require("dijit.ColorPalette");
+dojo.declare("dojox.editor.plugins.EditorModifyTableDialog",[dijit.Dialog],{baseClass:"EditorTableDialog",widgetsInTemplate:true,table:null,tableAtts:{},templateString:dojo.cache("dojox.editor.plugins","resources/modifyTable.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\">${modifyTableTitle}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n    <div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\">\n        <table class=\"etdTable\">\n          <tr><td class=\"left\">\n                <span class=\"colorSwatchBtn\" dojoAttachPoint=\"backgroundCol\"></span>\n                <label>${backgroundColor}</label>\n            </td><td class=\"right\">\n                <span class=\"colorSwatchBtn\" dojoAttachPoint=\"borderCol\"></span>\n                <label>${borderColor}</label>\n            </td></tr><tr><td>\n                <span dojoAttachPoint=\"selectBorder\" dojoType=\"dijit.form.TextBox\" value=\"1\"></span>\n                <label>${borderThickness}</label>\n            </td><td>\n            ${pixels}\n            </td></tr><tr><td>\n                <select class=\"floatDijit\" dojoAttachPoint=\"selectAlign\" dojoType=\"dijit.form.FilteringSelect\">\n                  <option value=\"default\">${default}</option>\n                  <option value=\"left\">${left}</option>\n                  <option value=\"center\">${center}</option>\n                  <option value=\"right\">${right}</option>\n                </select>\n                <label>${align}</label>\n            </td><td></td></tr><tr><td>\n                <span dojoAttachPoint=\"selectWidth\" dojoType=\"dijit.form.TextBox\" value=\"100\"></span>\n                <label>${tableWidth}</label>\n            </td><td>\n                <select dojoAttachPoint=\"selectWidthType\" hasDownArrow=\"true\" dojoType=\"dijit.form.FilteringSelect\">\n                  <option value=\"percent\">${percent}</option>\n                  <option value=\"pixels\">${pixels}</option>\n                </select>\n                </td></tr><tr><td>\n                <span dojoAttachPoint=\"selectPad\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n                <label>${cellPadding}</label></td>\n            <td class=\"cellpad\"></td></tr><tr><td>\n                <span dojoAttachPoint=\"selectSpace\" dojoType=\"dijit.form.TextBox\" value=\"0\"></span>\n                <label>${cellSpacing}</label>\n            </td><td class=\"cellspace\"></td></tr>\n        </table>\n        <div class=\"dialogButtonContainer\">\n            <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onSet\">${buttonSet}</div>\n            <div dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick: onCancel\">${buttonCancel}</div>\n        </div>\n\t</div>\n</div>\n"),postMixInProperties:function(){
+var _31=dojo.i18n.getLocalization("dojox.editor.plugins","TableDialog",this.lang);
+dojo.mixin(this,_31);
+this.inherited(arguments);
+},postCreate:function(){
+dojo.addClass(this.domNode,this.baseClass);
+this.inherited(arguments);
+this._cleanupWidgets=[];
+var w1=new dijit.ColorPalette({});
+this.connect(w1,"onChange",function(_32){
+dijit.popup.close(w1);
+this.setBrdColor(_32);
+});
+this.connect(w1,"onBlur",function(){
+dijit.popup.close(w1);
+});
+this.connect(this.borderCol,"click",function(){
+dijit.popup.open({popup:w1,around:this.borderCol});
+w1.focus();
+});
+var w2=new dijit.ColorPalette({});
+this.connect(w2,"onChange",function(_33){
+dijit.popup.close(w2);
+this.setBkColor(_33);
+});
+this.connect(w2,"onBlur",function(){
+dijit.popup.close(w2);
+});
+this.connect(this.backgroundCol,"click",function(){
+dijit.popup.open({popup:w2,around:this.backgroundCol});
+w2.focus();
+});
+this._cleanupWidgets.push(w1);
+this._cleanupWidgets.push(w2);
+this.setBrdColor(dojo.attr(this.table,"bordercolor"));
+this.setBkColor(dojo.attr(this.table,"bgcolor"));
+var w=dojo.attr(this.table,"width");
+if(!w){
+w=this.table.style.width;
+}
+var p="pixels";
+if(dojo.isString(w)&&w.indexOf("%")>-1){
+p="percent";
+w=w.replace(/%/,"");
+}
+if(w){
+this.selectWidth.set("value",w);
+this.selectWidthType.set("value",p);
+}else{
+this.selectWidth.set("value","");
+this.selectWidthType.set("value","percent");
+}
+this.selectBorder.set("value",dojo.attr(this.table,"border"));
+this.selectPad.set("value",dojo.attr(this.table,"cellPadding"));
+this.selectSpace.set("value",dojo.attr(this.table,"cellSpacing"));
+this.selectAlign.set("value",dojo.attr(this.table,"align"));
+},setBrdColor:function(_34){
+this.brdColor=_34;
+dojo.style(this.borderCol,"backgroundColor",_34);
+},setBkColor:function(_35){
+this.bkColor=_35;
+dojo.style(this.backgroundCol,"backgroundColor",_35);
+},onSet:function(){
+dojo.attr(this.table,"borderColor",this.brdColor);
+dojo.attr(this.table,"bgColor",this.bkColor);
+if(this.selectWidth.get("value")){
+dojo.style(this.table,"width","");
+dojo.attr(this.table,"width",(this.selectWidth.get("value")+((this.selectWidthType.get("value")=="pixels")?"":"%")));
+}
+dojo.attr(this.table,"border",this.selectBorder.get("value"));
+dojo.attr(this.table,"cellPadding",this.selectPad.get("value"));
+dojo.attr(this.table,"cellSpacing",this.selectSpace.get("value"));
+dojo.attr(this.table,"align",this.selectAlign.get("value"));
+var c=dojo.connect(this,"onHide",function(){
+dojo.disconnect(c);
+var _36=this;
+setTimeout(function(){
+_36.destroyRecursive();
+},10);
+});
+this.hide();
+},onCancel:function(){
+var c=dojo.connect(this,"onHide",function(){
+dojo.disconnect(c);
+var _37=this;
+setTimeout(function(){
+_37.destroyRecursive();
+},10);
+});
+},onSetTable:function(_38){
+},destroy:function(){
+this.inherited(arguments);
+dojo.forEach(this._cleanupWidgets,function(w){
+if(w&&w.destroy){
+w.destroy();
+}
+});
+delete this._cleanupWidgets;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+if(o.args&&o.args.command){
+var cmd=o.args.command.charAt(0).toLowerCase()+o.args.command.substring(1,o.args.command.length);
+switch(cmd){
+case "insertTableRowBefore":
+case "insertTableRowAfter":
+case "insertTableColumnBefore":
+case "insertTableColumnAfter":
+case "deleteTableRow":
+case "deleteTableColumn":
+o.plugin=new dojox.editor.plugins.TablePlugins({commandName:cmd});
+break;
+case "colorTableCell":
+o.plugin=new dojox.editor.plugins.ColorTableCell({commandName:cmd});
+break;
+case "modifyTable":
+o.plugin=new dojox.editor.plugins.ModifyTable({commandName:cmd});
+break;
+case "insertTable":
+o.plugin=new dojox.editor.plugins.InsertTable({commandName:cmd});
+break;
+case "tableContextMenu":
+o.plugin=new dojox.editor.plugins.TableContextMenu({commandName:cmd});
+break;
+}
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/EntityPalette.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/EntityPalette.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/EntityPalette.js	(revision 9)
@@ -0,0 +1,89 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.EntityPalette"]){
+dojo._hasResource["dojox.editor.plugins.EntityPalette"]=true;
+dojo.provide("dojox.editor.plugins.EntityPalette");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._PaletteMixin");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","latinEntities",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins.EntityPalette");
+dojo.declare("dojox.editor.plugins.EntityPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{templateString:"<div class=\"dojoxEntityPalette\">\n"+"\t<table>\n"+"\t\t<tbody>\n"+"\t\t\t<tr>\n"+"\t\t\t\t<td>\n"+"\t\t\t\t\t<table class=\"dijitPaletteTable\">\n"+"\t\t\t\t\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n"+"\t\t\t\t   </table>\n"+"\t\t\t\t</td>\n"+"\t\t\t</tr>\n"+"\t\t\t<tr>\n"+"\t\t\t\t<td>\n"+"\t\t\t\t\t<table dojoAttachPoint=\"previewPane\" class=\"dojoxEntityPalettePreviewTable\">\n"+"\t\t\t\t\t\t<tbody>\n"+"\t\t\t\t\t\t\t<tr>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\">Preview</th>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\" dojoAttachPoint=\"codeHeader\">Code</th>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\" dojoAttachPoint=\"entityHeader\">Name</th>\n"+"\t\t\t\t\t\t\t\t<th class=\"dojoxEntityPalettePreviewHeader\">Description</th>\n"+"\t\t\t\t\t\t\t</tr>\n"+"\t\t\t\t\t\t\t<tr>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetailEntity\" dojoAttachPoint=\"previewNode\"></td>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetail\" dojoAttachPoint=\"codeNode\"></td>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetail\" dojoAttachPoint=\"entityNode\"></td>\n"+"\t\t\t\t\t\t\t\t<td class=\"dojoxEntityPalettePreviewDetail\" dojoAttachPoint=\"descNode\"></td>\n"+"\t\t\t\t\t\t\t</tr>\n"+"\t\t\t\t\t\t</tbody>\n"+"\t\t\t\t\t</table>\n"+"\t\t\t\t</td>\n"+"\t\t\t</tr>\n"+"\t\t</tbody>\n"+"\t</table>\n"+"</div>",baseClass:"dojoxEntityPalette",showPreview:true,showCode:false,showEntityName:false,palette:"latin",dyeClass:"dojox.editor.plugins.LatinEntity",paletteClass:"editorLatinEntityPalette",cellClass:"dojoxEntityPaletteCell",postMixInProperties:function(){
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","latinEntities");
+var _2=0;
+var _3;
+for(_3 in _1){
+_2++;
+}
+var _4=Math.floor(Math.sqrt(_2));
+var _5=_4;
+var _6=0;
+var _7=[];
+var _8=[];
+for(_3 in _1){
+_6++;
+_8.push(_3);
+if(_6%_5===0){
+_7.push(_8);
+_8=[];
+}
+}
+if(_8.length>0){
+_7.push(_8);
+}
+this._palette=_7;
+},buildRendering:function(){
+this.inherited(arguments);
+var _9=dojo.i18n.getLocalization("dojox.editor.plugins","latinEntities");
+this._preparePalette(this._palette,_9);
+var _a=dojo.query(".dojoxEntityPaletteCell",this.gridNode);
+dojo.forEach(_a,function(_b){
+this.connect(_b,"onmouseenter","_onCellMouseEnter");
+},this);
+},_onCellMouseEnter:function(e){
+this._displayDetails(e.target);
+},postCreate:function(){
+this.inherited(arguments);
+dojo.style(this.codeHeader,"display",this.showCode?"":"none");
+dojo.style(this.codeNode,"display",this.showCode?"":"none");
+dojo.style(this.entityHeader,"display",this.showEntityName?"":"none");
+dojo.style(this.entityNode,"display",this.showEntityName?"":"none");
+if(!this.showPreview){
+dojo.style(this.previewNode,"display","none");
+}
+},_setCurrent:function(_c){
+this.inherited(arguments);
+if(this.showPreview){
+this._displayDetails(_c);
+}
+},_displayDetails:function(_d){
+var _e=this._getDye(_d);
+if(_e){
+var _f=_e.getValue();
+var _10=_e._alias;
+this.previewNode.innerHTML=_f;
+this.codeNode.innerHTML="&amp;#"+parseInt(_f.charCodeAt(0),10)+";";
+this.entityNode.innerHTML="&amp;"+_10+";";
+var _11=dojo.i18n.getLocalization("dojox.editor.plugins","latinEntities");
+this.descNode.innerHTML=_11[_10].replace("\n","<br>");
+}else{
+this.previewNode.innerHTML="";
+this.codeNode.innerHTML="";
+this.entityNode.innerHTML="";
+this.descNode.innerHTML="";
+}
+}});
+dojo.declare("dojox.editor.plugins.LatinEntity",null,{constructor:function(_12){
+this._alias=_12;
+},getValue:function(){
+return "&"+this._alias+";";
+},fillCell:function(_13){
+_13.innerHTML=this.getValue();
+}});
+}
Index: trunk/web/dojo/dojox/editor/plugins/PasteFromWord.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/PasteFromWord.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/PasteFromWord.js	(revision 9)
@@ -0,0 +1,78 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.PasteFromWord"]){
+dojo._hasResource["dojox.editor.plugins.PasteFromWord"]=true;
+dojo.provide("dojox.editor.plugins.PasteFromWord");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.Dialog");
+dojo.require("dojo.i18n");
+dojo.require("dojo.string");
+dojo.require("dojox.html.format");
+dojo.requireLocalization("dojox.editor.plugins","PasteFromWord",null,"ROOT,ro");
+dojo.declare("dojox.editor.plugins.PasteFromWord",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",width:"400px",height:"300px",_template:["<div class='dijitPasteFromWordEmbeddedRTE'>","<div style='width: ${width}; padding-top: 5px; padding-bottom: 5px;'>${instructions}</div>","<div id='${uId}_rte' style='width: ${width}; height: ${height}'></div>","<table style='width: ${width}' tabindex='-1'>","<tbody>","<tr>","<td align='center'>","<button type='button' dojoType='dijit.form.Button' id='${uId}_paste'>${paste}</button>","&nbsp;","<button type='button' dojoType='dijit.form.Button' id='${uId}_cancel'>${cancel}</button>","</td>","</tr>","</tbody>","</table>","</div>"].join(""),_filters:[{regexp:/(<meta\s*[^>]*\s*>)|(<\s*link\s* href="file:[^>]*\s*>)|(<\/?\s*\w+:[^>]*\s*>)/gi,handler:""},{regexp:/(?:<style([^>]*)>([\s\S]*?)<\/style>|<link\s+(?=[^>]*rel=['"]?stylesheet)([^>]*?href=(['"])([^>]*?)\4[^>\/]*)\/?>)/gi,handler:""},{regexp:/(class="Mso[^"]*")|(<!--(.|\s){1,}?-->)/gi,handler:""},{regexp:/(<p[^>]*>\s*(\&nbsp;|\u00A0)*\s*<\/p[^>]*>)|(<p[^>]*>\s*<font[^>]*>\s*(\&nbsp;|\u00A0)*\s*<\/\s*font\s*>\s<\/p[^>]*>)/ig,handler:""},{regexp:/(style="[^"]*mso-[^;][^"]*")|(style="margin:\s*[^;"]*;")/gi,handler:""},{regexp:/(<\s*script[^>]*>((.|\s)*?)<\\?\/\s*script\s*>)|(<\s*script\b([^<>]|\s)*>?)|(<[^>]*=(\s|)*[("|')]javascript:[^$1][(\s|.)]*[$1][^>]*>)/ig,handler:""}],_initButton:function(){
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","PasteFromWord");
+this.button=new dijit.form.Button({label:_1["pasteFromWord"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"PasteFromWord",tabIndex:"-1",onClick:dojo.hitch(this,"_openDialog")});
+this._uId=dijit.getUniqueId(this.editor.id);
+_1.uId=this._uId;
+_1.width=this.width||"400px";
+_1.height=this.height||"300px";
+this._dialog=new dijit.Dialog({title:_1["pasteFromWord"]}).placeAt(dojo.body());
+this._dialog.set("content",dojo.string.substitute(this._template,_1));
+dojo.style(dojo.byId(this._uId+"_rte"),"opacity",0.001);
+this.connect(dijit.byId(this._uId+"_paste"),"onClick","_paste");
+this.connect(dijit.byId(this._uId+"_cancel"),"onClick","_cancel");
+this.connect(this._dialog,"onHide","_clearDialog");
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},_openDialog:function(){
+this._dialog.show();
+if(!this._rte){
+setTimeout(dojo.hitch(this,function(){
+this._rte=new dijit._editor.RichText({height:this.height||"300px"},this._uId+"_rte");
+this._rte.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+dojo.animateProperty({node:this._rte.domNode,properties:{opacity:{start:0.001,end:1}}}).play();
+}));
+}),100);
+}
+},_paste:function(){
+var _3=dojox.html.format.prettyPrint(this._rte.get("value"));
+this._dialog.hide();
+var i;
+for(i=0;i<this._filters.length;i++){
+var _4=this._filters[i];
+_3=_3.replace(_4.regexp,_4.handler);
+}
+_3=dojox.html.format.prettyPrint(_3);
+this.editor.execCommand("inserthtml",_3);
+},_cancel:function(){
+this._dialog.hide();
+},_clearDialog:function(){
+this._rte.set("value","");
+},destroy:function(){
+if(this._rte){
+this._rte.destroy();
+}
+if(this._dialog){
+this._dialog.destroyRecursive();
+}
+delete this._dialog;
+delete this._rte;
+this.inherited(arguments);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _5=o.args.name.toLowerCase();
+if(_5==="pastefromword"){
+o.plugin=new dojox.editor.plugins.PasteFromWord({width:("width" in o.args)?o.args.width:"400px",height:("height" in o.args)?o.args.width:"300px"});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/Save.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/Save.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/Save.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Save"]){
+dojo._hasResource["dojox.editor.plugins.Save"]=true;
+dojo.provide("dojox.editor.plugins.Save");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","Save",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.Save",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",url:"",logResults:true,_initButton:function(){
+var _1=dojo.i18n.getLocalization("dojox.editor.plugins","Save");
+this.button=new dijit.form.Button({label:_1["save"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Save",tabIndex:"-1",onClick:dojo.hitch(this,"_save")});
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+},_save:function(){
+var _3=this.editor.get("value");
+this.save(_3);
+},save:function(_4){
+var _5={"Content-Type":"text/html"};
+if(this.url){
+var _6={url:this.url,postData:_4,headers:_5,handleAs:"text"};
+this.button.set("disabled",true);
+var _7=dojo.xhrPost(_6);
+_7.addCallback(dojo.hitch(this,this.onSuccess));
+_7.addErrback(dojo.hitch(this,this.onError));
+}else{
+}
+},onSuccess:function(_8,_9){
+this.button.set("disabled",false);
+if(this.logResults){
+}
+},onError:function(_a,_b){
+this.button.set("disabled",false);
+if(this.logResults){
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _c=o.args.name.toLowerCase();
+if(_c==="save"){
+o.plugin=new dojox.editor.plugins.Save({url:("url" in o.args)?o.args.url:"",logResults:("logResults" in o.args)?o.args.logResults:true});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/InsertAnchor.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/InsertAnchor.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/InsertAnchor.js	(revision 9)
@@ -0,0 +1,229 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.InsertAnchor"]){
+dojo._hasResource["dojox.editor.plugins.InsertAnchor"]=true;
+dojo.provide("dojox.editor.plugins.InsertAnchor");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit.form.Select");
+dojo.require("dijit._editor.range");
+dojo.require("dojo.i18n");
+dojo.require("dojo.string");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojox.editor.plugins","InsertAnchor",null,"ROOT,ro");
+dojo.declare("dojox.editor.plugins.InsertAnchor",dijit._editor._Plugin,{htmlTemplate:"<a name=\"${anchorInput}\" class=\"dijitEditorPluginInsertAnchorStyle\">${textInput}</a>",iconClassPrefix:"dijitAdditionalEditorIcon",_template:["<table><tr><td>","<label for='${id}_anchorInput'>${anchor}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' "+"id='${id}_anchorInput' name='anchorInput' intermediateChanges='true'>","</td></tr><tr><td>","<label for='${id}_textInput'>${text}</label>","</td><td>","<input dojoType='dijit.form.ValidationTextBox' required='true' id='${id}_textInput' "+"name='textInput' intermediateChanges='true'>","</td></tr>","<tr><td colspan='2'>","<button dojoType='dijit.form.Button' type='submit' id='${id}_setButton'>${set}</button>","<button dojoType='dijit.form.Button' type='button' id='${id}_cancelButton'>${cancel}</button>","</td></tr></table>"].join(""),_initButton:function(){
+var _1=this;
+var _2=dojo.i18n.getLocalization("dojox.editor.plugins","InsertAnchor",this.lang);
+var _3=(this.dropDown=new dijit.TooltipDialog({title:_2["title"],execute:dojo.hitch(this,"setValue"),onOpen:function(){
+_1._onOpenDialog();
+dijit.TooltipDialog.prototype.onOpen.apply(this,arguments);
+},onCancel:function(){
+setTimeout(dojo.hitch(_1,"_onCloseDialog"),0);
+}}));
+this.button=new dijit.form.DropDownButton({label:_2["insertAnchor"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"InsertAnchor",tabIndex:"-1",dropDown:this.dropDown});
+_2.id=dijit.getUniqueId(this.editor.id);
+this._uniqueId=_2.id;
+this.dropDown.set("content",_3.title+"<div style='border-bottom: 1px black solid;padding-bottom:2pt;margin-bottom:4pt'></div>"+dojo.string.substitute(this._template,_2));
+_3.startup();
+this._anchorInput=dijit.byId(this._uniqueId+"_anchorInput");
+this._textInput=dijit.byId(this._uniqueId+"_textInput");
+this._setButton=dijit.byId(this._uniqueId+"_setButton");
+this.connect(dijit.byId(this._uniqueId+"_cancelButton"),"onClick",function(){
+this.dropDown.onCancel();
+});
+if(this._anchorInput){
+this.connect(this._anchorInput,"onChange","_checkInput");
+}
+if(this._textInput){
+this.connect(this._anchorInput,"onChange","_checkInput");
+}
+this.editor.contentDomPreFilters.push(dojo.hitch(this,this._preDomFilter));
+this.editor.contentDomPostFilters.push(dojo.hitch(this,this._postDomFilter));
+this._setup();
+},setEditor:function(_4){
+this.editor=_4;
+this._initButton();
+},_checkInput:function(){
+var _5=true;
+if(this._anchorInput.isValid()){
+_5=false;
+}
+this._setButton.set("disabled",_5);
+},_setup:function(){
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this.connect(this.editor.editNode,"ondblclick",this._onDblClick);
+setTimeout(dojo.hitch(this,function(){
+this._applyStyles();
+}),100);
+}));
+},getAnchorStyle:function(){
+var _6="@media screen {\n"+"\t.dijitEditorPluginInsertAnchorStyle {\n"+"\t\tbackground-image: url({MODURL}/images/anchor.gif);\n"+"\t\tbackground-repeat: no-repeat;\n"+"\t\tbackground-position: top left;\n"+"\t\tborder-width: 1px;\n"+"\t\tborder-style: dashed;\n"+"\t\tborder-color: #D0D0D0;\n"+"\t\tpadding-left: 20px;\n"+"\t}\n"+"}\n";
+var _7=dojo.moduleUrl(dojox._scopeName,"editor/plugins/resources").toString();
+if(!(_7.match(/^https?:\/\//i))&&!(_7.match(/^file:\/\//i))){
+var _8;
+if(_7.charAt(0)==="/"){
+var _9=dojo.doc.location.protocol;
+var _a=dojo.doc.location.host;
+_8=_9+"//"+_a;
+}else{
+_8=this._calcBaseUrl(dojo.global.location.href);
+}
+if(_8[_8.length-1]!=="/"&&_7.charAt(0)!=="/"){
+_8+="/";
+}
+_7=_8+_7;
+}
+return _6.replace(/\{MODURL\}/gi,_7);
+},_applyStyles:function(){
+if(!this._styled){
+try{
+this._styled=true;
+var _b=this.editor.document;
+var _c=this.getAnchorStyle();
+if(!dojo.isIE){
+var _d=_b.createElement("style");
+_d.appendChild(_b.createTextNode(_c));
+_b.getElementsByTagName("head")[0].appendChild(_d);
+}else{
+var ss=_b.createStyleSheet("");
+ss.cssText=_c;
+}
+}
+catch(e){
+}
+}
+},_calcBaseUrl:function(_e){
+var _f=null;
+if(_e!==null){
+var _10=_e.indexOf("?");
+if(_10!=-1){
+_e=_e.substring(0,_10);
+}
+_10=_e.lastIndexOf("/");
+if(_10>0&&_10<_e.length){
+_f=_e.substring(0,_10);
+}else{
+_f=_e;
+}
+}
+return _f;
+},_checkValues:function(_11){
+if(_11){
+if(_11.anchorInput){
+_11.anchorInput=_11.anchorInput.replace(/"/g,"&quot;");
+}
+if(!_11.textInput){
+_11.textInput="&nbsp;";
+}
+}
+return _11;
+},setValue:function(_12){
+this._onCloseDialog();
+if(!this.editor.window.getSelection){
+var sel=dijit.range.getSelection(this.editor.window);
+var _13=sel.getRangeAt(0);
+var a=_13.endContainer;
+if(a.nodeType===3){
+a=a.parentNode;
+}
+if(a&&(a.nodeName&&a.nodeName.toLowerCase()!=="a")){
+a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,["a"]);
+}
+if(a&&(a.nodeName&&a.nodeName.toLowerCase()==="a")){
+if(this.editor.queryCommandEnabled("unlink")){
+dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[a]);
+this.editor.execCommand("unlink");
+}
+}
+}
+_12=this._checkValues(_12);
+this.editor.execCommand("inserthtml",dojo.string.substitute(this.htmlTemplate,_12));
+},_onCloseDialog:function(){
+this.editor.focus();
+},_getCurrentValues:function(a){
+var _14,_15;
+if(a&&a.tagName.toLowerCase()==="a"&&dojo.attr(a,"name")){
+_14=dojo.attr(a,"name");
+_15=a.textContent||a.innerText;
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[a,true]);
+}else{
+_15=dojo.withGlobal(this.editor.window,dijit._editor.selection.getSelectedText);
+}
+return {anchorInput:_14||"",textInput:_15||""};
+},_onOpenDialog:function(){
+var a;
+if(!this.editor.window.getSelection){
+var sel=dijit.range.getSelection(this.editor.window);
+var _16=sel.getRangeAt(0);
+a=_16.endContainer;
+if(a.nodeType===3){
+a=a.parentNode;
+}
+if(a&&(a.nodeName&&a.nodeName.toLowerCase()!=="a")){
+a=dojo.withGlobal(this.editor.window,"getSelectedElement",dijit._editor.selection,["a"]);
+}
+}else{
+a=dojo.withGlobal(this.editor.window,"getAncestorElement",dijit._editor.selection,["a"]);
+}
+this.dropDown.reset();
+this._setButton.set("disabled",true);
+this.dropDown.set("value",this._getCurrentValues(a));
+},_onDblClick:function(e){
+if(e&&e.target){
+var t=e.target;
+var tg=t.tagName?t.tagName.toLowerCase():"";
+if(tg==="a"&&dojo.attr(t,"name")){
+this.editor.onDisplayChanged();
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[t]);
+setTimeout(dojo.hitch(this,function(){
+this.button.set("disabled",false);
+this.button.openDropDown();
+}),10);
+}
+}
+},_preDomFilter:function(_17){
+var ed=this.editor;
+dojo.withGlobal(ed.window,function(){
+dojo.query("a",ed.editNode).forEach(function(a){
+if(dojo.attr(a,"name")&&!dojo.attr(a,"href")){
+if(!dojo.hasClass(a,"dijitEditorPluginInsertAnchorStyle")){
+dojo.addClass(a,"dijitEditorPluginInsertAnchorStyle");
+}
+}
+});
+});
+},_postDomFilter:function(_18){
+var ed=this.editor;
+dojo.withGlobal(ed.window,function(){
+dojo.query("a",_18).forEach(function(a){
+if(dojo.attr(a,"name")&&!dojo.attr(a,"href")){
+if(dojo.hasClass(a,"dijitEditorPluginInsertAnchorStyle")){
+dojo.removeClass(a,"dijitEditorPluginInsertAnchorStyle");
+}
+}
+});
+});
+return _18;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _19=o.args.name;
+if(_19){
+_19=_19.toLowerCase();
+}
+if(_19==="insertanchor"){
+o.plugin=new dojox.editor.plugins.InsertAnchor();
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodesDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodesDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodesDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodesDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodesDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/nihilo/close.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/nihilo/close.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/nihilo/close.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/nihilo/close.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/nihilo/close.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/preview.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/preview.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/preview.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/preview.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/preview.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreak.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreak.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreak.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreak.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreak.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWordDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWordDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWordDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWordDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWordDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodes.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodes.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodes.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodes.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/showBlockNodes.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceDisabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceDisabled.png
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceDisabled.png	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceDisabled.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceDisabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/saveDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/saveDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/saveDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/saveDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/saveDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntityDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntityDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntityDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntityDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntityDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/tundra/close.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/tundra/close.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/tundra/close.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/tundra/close.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/tundra/close.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/smileyDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/smileyDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/smileyDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/smileyDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/smileyDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/claro/close.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/claro/close.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/claro/close.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/claro/close.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/claro/close.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWord.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWord.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWord.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWord.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/pasteFromWord.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/save.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/save.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/save.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/save.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/save.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/breadcrumbDown.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/breadcrumbDown.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/breadcrumbDown.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/breadcrumbDown.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/breadcrumbDown.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquoteDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquoteDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquoteDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquoteDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquoteDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntity.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntity.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntity.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntity.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/insertEntity.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/smiley.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/smiley.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/smiley.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/smiley.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/smiley.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/anchorDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/anchorDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/anchorDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/anchorDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/anchorDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquote.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquote.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquote.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquote.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/blockquote.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/soria/close.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/soria/close.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/soria/close.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/soria/close.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/soria/close.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/previewDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/previewDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/previewDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/previewDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/previewDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceEnabled.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceEnabled.png
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceEnabled.png	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceEnabled.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceEnabled.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreakDisabled.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreakDisabled.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreakDisabled.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreakDisabled.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/pageBreakDisabled.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/anchor.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/icons/anchor.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/icons/anchor.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/icons/anchor.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/icons/anchor.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/editorPlugins.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/editorPlugins.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/editorPlugins.css	(revision 9)
@@ -0,0 +1,167 @@
+
+.EditorTableDialog{
+}
+.EditorTableDialog .etdTable{
+	width:350px;
+	border:none;
+	table-layout:fixed;
+	border-collapse:collapse;
+}
+.EditorTableDialog .etdTable td{
+	width:200px;
+	border:#CCCCCC 0px solid;
+	padding:5px;
+}
+.EditorTableDialog .etdTable td.left{
+	width:200px;
+}
+.EditorTableDialog .etdTable td.right{
+	width:150px;
+}
+.EditorTableDialog .dijitTextBox{
+	width:50px;
+	float:right;
+	padding-left:3px;
+}
+.EditorTableDialog .dijitComboBox{
+	width:85px;
+	padding-left:5px;
+}
+.EditorTableDialog .etdTable .floatDijit{
+	float:right;
+}
+.EditorTableDialog label{
+	float:right;
+	margin:0;
+	margin-right:5px;
+}
+.EditorTableDialog .cellpad{
+	background:url(images/cellpad.png) no-repeat 5px;
+}
+.EditorTableDialog .cellspace{
+	background:url(images/cellspace.png) no-repeat 5px;
+}
+.dialogButtonContainer{
+	text-align:right;
+	margin-top:10px;
+	cursor:pointer;
+}
+.colorSwatchBtn{
+	display:block;
+	border:#666666 2px solid;
+	background-color:#CCCCCC;
+	width:16px;
+	height:16px;
+	cursor:pointer;
+	float:right;
+}
+.colorSwatchBtn:hover{
+	border:#0099FF 2px solid;
+}
+.colorSwatchBtn div{
+	background-color:#CCCCCC;
+	width:16px;
+	height:16px;
+	cursor:pointer;
+}
+.editorIcon{
+	background-image:url(images/tableIcons.png);
+	background-repeat: no-repeat;
+	width: 16px;
+	height: 16px;
+	text-align: center;
+}
+.editorIconUploadImage{
+	background:url(images/uploadImageIcon.gif) no-repeat 0px 4px;
+}
+.editorIconInsertTable{				
+	background-position:0px 0px;	}
+.editorIconInsertTableRowBefore{ 	
+	background-position:-19px 0px;	}
+.dijitDisabled .editorIconInsertTableRowBefore{ 	
+	background-position:-120px 0px;	}
+	
+.editorIconInsertTableRowAfter{ 	
+	background-position:-35px 0px;	}
+.dijitDisabled .editorIconInsertTableRowAfter{ 	
+	background-position:-136px 0px;	}
+.editorIconInsertTableColumnBefore{ 	
+	background-position:-52px 0px;	}
+.dijitDisabled .editorIconInsertTableColumnBefore{ 	
+	background-position:-154px 0px;	}
+	
+.editorIconInsertTableColumnAfter{ 	
+	background-position:-69px 0px;	}
+.dijitDisabled .editorIconInsertTableColumnAfter{ 	
+	background-position:-171px 0px;	}
+	
+.editorIconDeleteTableRow{ 	
+	background-position:-86px 0px;	}
+.dijitDisabled .editorIconDeleteTableRow{ 	
+	background-position:-205px 0px;	}
+	
+.editorIconDeleteTableColumn{ 	
+	background-position:-103px 0px;	}
+.dijitDisabled .editorIconDeleteTableColumn{ 	
+	background-position:-188px 0px;	}
+	
+.editorIconColorTableCell{ 	
+	background-position:-222px 0px;	}
+.dijitDisabled .editorIconColorTableCell{ 	
+	background-position:-239px 0px;	}
+.editorIconModifyTable{ 	
+	background-position:-256px 0px;	}
+.dijitDisabled .editorIconModifyTable{ 	
+	background-position:-273px 0px;	}
+.RichTextEditable .dijitTextBox, 
+.RichTextEditable .dijitComboBox,
+.RichTextEditable  .dijitSpinner {
+	width: 5em;
+}
+.dojoxDropDownSelect {
+	background:#FFFFFF url(images/dropBk.png) repeat-x scroll left top;
+	border: 1px solid;
+	border-top-color:#cccccc;
+	border-right-color:#cccccc;
+	border-left-color:#999999;
+	border-bottom-color:#ffffff;
+}
+.dojoxDropDownSelect.dojoxDropDownSelectHover{
+	background-image:url(images/dropBkOver.png);
+}
+.dojoxDropDownSelect button{
+	line-height:16px;
+	height:16px;
+	width:100px;
+	text-align:left;
+	color:#8397b9;
+}
+.dijitButtonNode .dijitArrowButtonInner{
+	
+	background:url(../../../../dijit/themes/tundra/images/spriteArrows.png) no-repeat left top;
+	width:7px;
+}
+.dojoxEditorUploadNorm{
+	font-family:Arial;
+	font-size:12px;
+	
+	
+	vertical-align: middle;
+	
+	margin:0;
+	line-height:normal;
+	text-align:center;
+	white-space: nowrap;
+	
+	cursor: pointer;
+	background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 2px;
+}
+.dojoxEditorUploadHover{
+	background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 0px;
+}
+.dojoxEditorUploadActive{
+	background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 4px;
+}
+.dojoxEditorUploadDisabled{
+	background: #ccc url("images/uploadImageIcon.gif") no-repeat 2px 2px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/insertTable.html
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/insertTable.html	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/insertTable.html	(revision 9)
@@ -0,0 +1,41 @@
+<div class="dijitDialog" tabindex="-1" waiRole="dialog" waiState="labelledby-${id}_title">
+	<div dojoAttachPoint="titleBar" class="dijitDialogTitleBar">
+	<span dojoAttachPoint="titleNode" class="dijitDialogTitle" id="${id}_title">${insertTableTitle}</span>
+	<span dojoAttachPoint="closeButtonNode" class="dijitDialogCloseIcon" dojoAttachEvent="onclick: onCancel" title="${buttonCancel}">
+		<span dojoAttachPoint="closeText" class="closeText" title="${buttonCancel}">x</span>
+	</span>
+	</div>
+    <div dojoAttachPoint="containerNode" class="dijitDialogPaneContent">
+        <table class="etdTable"><tr>
+            <td class="left">
+                <span dojoAttachPoint="selectRow" dojoType="dijit.form.TextBox" value="2"></span>
+                <label>${rows}</label>
+            </td><td class="right">
+                <span dojoAttachPoint="selectCol" dojoType="dijit.form.TextBox" value="2"></span>
+                <label>${columns}</label>
+            </td></tr><tr><td>
+                <span dojoAttachPoint="selectWidth" dojoType="dijit.form.TextBox" value="100"></span>
+                <label>${tableWidth}</label>
+            </td><td>
+                <select dojoAttachPoint="selectWidthType" hasDownArrow="true" dojoType="dijit.form.FilteringSelect">
+                  <option value="percent">${percent}</option>
+                  <option value="pixels">${pixels}</option>
+                </select></td></tr>
+          <tr><td>
+                <span dojoAttachPoint="selectBorder" dojoType="dijit.form.TextBox" value="1"></span>
+                <label>${borderThickness}</label></td>
+            <td>
+                ${pixels}
+            </td></tr><tr><td>
+                <span dojoAttachPoint="selectPad" dojoType="dijit.form.TextBox" value="0"></span>
+                <label>${cellPadding}</label></td>
+            <td class="cellpad"></td></tr><tr><td>
+                <span dojoAttachPoint="selectSpace" dojoType="dijit.form.TextBox" value="0"></span>
+                <label>${cellSpacing}</label>
+            </td><td class="cellspace"></td></tr></table>
+        <div class="dialogButtonContainer">
+            <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onInsert">${buttonInsert}</div>
+            <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onCancel">${buttonCancel}</div>
+        </div>
+	</div>
+</div>
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonYes.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonYes.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonYes.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonYes.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonYes.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonTongue.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonTongue.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonTongue.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonTongue.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonTongue.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonIdea.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonIdea.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonIdea.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonIdea.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonIdea.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonShy.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonShy.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonShy.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonShy.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonShy.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonWink.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonWink.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonWink.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonWink.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonWink.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonSmile.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonSmile.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonSmile.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonSmile.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonSmile.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHalf.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHalf.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHalf.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHalf.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHalf.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonEyebrow.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonEyebrow.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonEyebrow.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonEyebrow.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonEyebrow.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonNo.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonNo.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonNo.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonNo.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonNo.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngry.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngry.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngry.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngry.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngry.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonOops.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonOops.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonOops.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonOops.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonOops.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHappy.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHappy.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHappy.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHappy.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonHappy.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGoofy.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGoofy.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGoofy.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGoofy.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGoofy.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngel.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngel.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngel.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngel.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonAngel.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCrying.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCrying.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCrying.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCrying.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCrying.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonFrown.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonFrown.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonFrown.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonFrown.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonFrown.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCool.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCool.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCool.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCool.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonCool.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonLaughing.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonLaughing.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonLaughing.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonLaughing.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonLaughing.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGrin.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGrin.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGrin.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGrin.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/emoticons/emoticonGrin.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/modifyTable.html
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/modifyTable.html	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/modifyTable.html	(revision 9)
@@ -0,0 +1,50 @@
+<div class="dijitDialog" tabindex="-1" waiRole="dialog" waiState="labelledby-${id}_title">
+	<div dojoAttachPoint="titleBar" class="dijitDialogTitleBar">
+	<span dojoAttachPoint="titleNode" class="dijitDialogTitle" id="${id}_title">${modifyTableTitle}</span>
+	<span dojoAttachPoint="closeButtonNode" class="dijitDialogCloseIcon" dojoAttachEvent="onclick: onCancel" title="${buttonCancel}">
+		<span dojoAttachPoint="closeText" class="closeText" title="${buttonCancel}">x</span>
+	</span>
+	</div>
+    <div dojoAttachPoint="containerNode" class="dijitDialogPaneContent">
+        <table class="etdTable">
+          <tr><td class="left">
+                <span class="colorSwatchBtn" dojoAttachPoint="backgroundCol"></span>
+                <label>${backgroundColor}</label>
+            </td><td class="right">
+                <span class="colorSwatchBtn" dojoAttachPoint="borderCol"></span>
+                <label>${borderColor}</label>
+            </td></tr><tr><td>
+                <span dojoAttachPoint="selectBorder" dojoType="dijit.form.TextBox" value="1"></span>
+                <label>${borderThickness}</label>
+            </td><td>
+            ${pixels}
+            </td></tr><tr><td>
+                <select class="floatDijit" dojoAttachPoint="selectAlign" dojoType="dijit.form.FilteringSelect">
+                  <option value="default">${default}</option>
+                  <option value="left">${left}</option>
+                  <option value="center">${center}</option>
+                  <option value="right">${right}</option>
+                </select>
+                <label>${align}</label>
+            </td><td></td></tr><tr><td>
+                <span dojoAttachPoint="selectWidth" dojoType="dijit.form.TextBox" value="100"></span>
+                <label>${tableWidth}</label>
+            </td><td>
+                <select dojoAttachPoint="selectWidthType" hasDownArrow="true" dojoType="dijit.form.FilteringSelect">
+                  <option value="percent">${percent}</option>
+                  <option value="pixels">${pixels}</option>
+                </select>
+                </td></tr><tr><td>
+                <span dojoAttachPoint="selectPad" dojoType="dijit.form.TextBox" value="0"></span>
+                <label>${cellPadding}</label></td>
+            <td class="cellpad"></td></tr><tr><td>
+                <span dojoAttachPoint="selectSpace" dojoType="dijit.form.TextBox" value="0"></span>
+                <label>${cellSpacing}</label>
+            </td><td class="cellspace"></td></tr>
+        </table>
+        <div class="dialogButtonContainer">
+            <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onSet">${buttonSet}</div>
+            <div dojoType="dijit.form.Button" dojoAttachEvent="onClick: onCancel">${buttonCancel}</div>
+        </div>
+	</div>
+</div>
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/busy.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/busy.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/busy.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/busy.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/busy.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tableIcons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tableIcons.png
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/tableIcons.png	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/tableIcons.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/tableIcons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/cellpad.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/cellpad.png
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/cellpad.png	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/cellpad.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/cellpad.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/expand.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/expand.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/soria/expand.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/soria/expand.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/expand.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/collapse.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/collapse.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/soria/collapse.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/soria/collapse.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/collapse.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/sidebar.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/sidebar.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/soria/sidebar.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/soria/sidebar.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/soria/sidebar.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/expand.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/expand.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/expand.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/expand.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/expand.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/collapse.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/collapse.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/collapse.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/collapse.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/collapse.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/sidebar.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/sidebar.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/sidebar.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/sidebar.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/tundra/sidebar.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/anchor.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/anchor.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/anchor.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/anchor.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/anchor.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/cellspace.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/cellspace.png
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/cellspace.png	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/cellspace.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/cellspace.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ins.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ins.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ins.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ins.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ins.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/p.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/p.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/p.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/p.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/p.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/fieldset.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/fieldset.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/fieldset.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/fieldset.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/fieldset.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/noscript.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/noscript.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/noscript.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/noscript.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/noscript.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/iframe.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/iframe.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/iframe.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/iframe.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/iframe.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/form.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/form.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/form.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/form.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/form.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/script.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/script.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/script.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/script.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/script.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/li.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/li.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/li.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/li.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/li.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/del.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/del.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/del.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/del.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/del.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/object.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/object.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/object.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/object.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/object.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dt.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dt.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dt.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dt.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dt.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h1.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h1.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h1.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h1.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h1.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/blockquote.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/blockquote.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/blockquote.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/blockquote.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/blockquote.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h2.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h2.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h2.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h2.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h2.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/hr.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/hr.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/hr.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/hr.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/hr.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h3.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h3.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h3.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h3.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h3.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ol.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ol.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ol.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ol.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ol.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h4.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h4.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h4.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h4.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h4.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/button.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/button.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/button.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/button.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/button.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h5.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h5.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h5.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h5.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h5.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h6.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h6.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h6.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h6.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/h6.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/map.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/map.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/map.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/map.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/map.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/center.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/center.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/center.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/center.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/center.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ul.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ul.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ul.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ul.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/ul.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/div.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/div.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/div.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/div.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/div.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/address.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/address.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/address.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/address.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/address.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/pre.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/pre.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/pre.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/pre.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/pre.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/table.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/table.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/table.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/table.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/table.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dd.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dd.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dd.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dd.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/blockelems/dd.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/claro/expand.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/claro/expand.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/claro/expand.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/claro/expand.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/claro/expand.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/claro/collapse.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/claro/collapse.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/claro/collapse.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/claro/collapse.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/claro/collapse.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/collapse.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/collapse.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/collapse.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/collapse.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/collapse.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/sidebar.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/sidebar.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/sidebar.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/sidebar.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/sidebar.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/expand.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/expand.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/expand.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/expand.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/nihilo/expand.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/uploadImageIcon.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/editor/plugins/resources/images/uploadImageIcon.gif
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/images/uploadImageIcon.gif	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/images/uploadImageIcon.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/editor/plugins/resources/images/uploadImageIcon.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/CollapsibleToolbar.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/CollapsibleToolbar.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/CollapsibleToolbar.css	(revision 9)
@@ -0,0 +1,148 @@
+.dojoxCollapsibleToolbarContainer {
+	border-collapse: collapse;
+	padding: 0px;
+	margin: 0px;
+	border-style: none;
+}
+.dojoxCollapsibleToolbarCollapse {
+	cursor: pointer;
+}
+.dojoxCollapsibleToolbarExpand {
+	cursor: pointer;
+}
+.claro .dojoxCollapsibleToolbarCollapse {
+	background-image: url(../images/claro/collapse.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 12px;
+	height: 12px;
+}
+.claro .dojoxCollapsibleToolbarExpand {
+	background-image: url(../images/claro/expand.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 12px;
+	height: 12px;
+}
+.claro .dojoxCollapsibleToolbarContainer {
+	background-color: #F1F1F1;
+}
+.claro .dojoxCollapsibleToolbarControl {
+	vertical-align: top;
+	border-bottom: 1px solid #ccc;
+	border-left: 1px solid #ccc;
+	border-right: 1px solid #ccc;
+        margin-bottom: 1px;
+}
+.tundra .dojoxCollapsibleToolbarCollapse {
+	background-image: url(../images/tundra/collapse.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 12px;
+	height: 12px;
+}
+.tundra .dojoxCollapsibleToolbarExpand {
+	background-image: url(../images/tundra/expand.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 12px;
+	height: 12px;
+}
+.tundra .dojoxCollapsibleToolbarContainer {
+	background-image: url(../images/tundra/sidebar.gif);
+	background-repeat: repeat-x;
+	background-position: top left;
+	background-color: #CCCCCC;
+}
+.tundra .dojoxCollapsibleToolbarControl {
+	vertical-align: top;
+	border-bottom: 1px solid #ccc;
+	border-left: 1px solid #ccc;
+	border-right: 1px solid #ccc;
+}
+.soria .dojoxCollapsibleToolbarCollapse {
+	background-image: url(../images/soria/collapse.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 12px;
+	height: 12px;
+}
+.soria .dojoxCollapsibleToolbarExpand {
+	background-image: url(../images/soria/expand.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 12px;
+	height: 12px;
+}
+.soria .dojoxCollapsibleToolbarContainer {
+	background-image: url(../images/soria/sidebar.gif);
+	background-repeat: repeat-x;
+	background-position: top left;
+	background-color: #CCCCCC;
+}
+.soria .dojoxCollapsibleToolbarControl {
+	vertical-align: top;    
+	border-bottom: 1px solid #ccc;
+	border-left: 1px solid #ccc;
+	border-right: 1px solid #ccc;
+}
+.nihilo .dojoxCollapsibleToolbarCollapse {
+	background-image: url(../images/nihilo/collapse.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 12px;
+	height: 12px;
+}
+.nihilo .dojoxCollapsibleToolbarExpand {
+	background-image: url(../images/nihilo/expand.gif);
+	background-repeat: no-repeat;
+	background-position: top left;
+	width: 12px;
+	height: 12px;
+}
+.nihilo .dojoxCollapsibleToolbarContainer {
+	background-image: url(../images/nihilo/sidebar.gif);
+	background-repeat: repeat-x;
+	background-position: top left;
+	background-color: #CCCCCC;
+}
+.nihilo .dojoxCollapsibleToolbarControl {
+	vertical-align: top;
+	border-bottom: 1px solid #ccc;
+	border-left: 1px solid #ccc;
+	border-right: 1px solid #ccc;
+}
+.dijit_a11y .dojoxCollapsibleToolbarCollapse {
+	border-style: outset;
+	border-width: 3px;
+	border-color: black;
+	width: 1.5em;
+	height: 100%;
+	text-align: center;
+	vertical-align: middle;
+}
+.dijit_a11y .dojoxCollapsibleToolbarExpand {
+	border-style: outset;
+	border-width: 3px;
+	border-color: black;
+	width: 1.5em;
+	height: 100%;
+	text-align: center;
+	vertical-align: middle;
+}
+.dojoxCollapsibleToolbarCollapseText {
+	display: none;
+}
+.dojoxCollapsibleToolbarExpandText {
+	display: none;
+}
+.dijit_a11y .dojoxCollapsibleToolbarCollapseText {
+	display: inline;
+	padding: 3px;
+	font-weight: bold;
+}
+.dijit_a11y .dojoxCollapsibleToolbarExpandText {
+	display: inline;
+	padding: 3px;
+	font-weight: bold; 
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/FindReplace.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/FindReplace.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/FindReplace.css	(revision 9)
@@ -0,0 +1,59 @@
+.dijitEditorIconsFindReplace {
+	background-image: url('../icons/editorIconsFindReplaceEnabled.png');
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.dijitDisabled .dijitEditorIconsFindReplace {
+	background-image: url('../icons/editorIconsFindReplaceDisabled.png');
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	text-align: center;
+}
+.dijitEditorIconFindString { background-position: 0px; }
+.dijitEditorIconFind { background-position: -18px; }
+.dijitEditorIconReplace { background-position: -36px; }
+.dijitEditorIconReplaceAll { background-position: -54px; }
+.dijitEditorFindReplaceCheckBox {
+	padding-left: 10px;
+	padding-right: 10px;
+	text-align: center;
+}
+.dijitEditorFindReplaceTextBox {
+	padding-top: 3px;
+	padding-bottom: 3px;
+	padding-right: 5px;
+}
+.dijitEditorFindReplaceTextBox .focusTextBox {
+	width: 13em;
+}
+.tundra .dijitEditorIconsFindReplaceClose {
+        background-image: url('../icons/tundra/close.gif');
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	background-position: center; 
+}
+.soria .dijitEditorIconsFindReplaceClose {
+        background-image: url('../icons/soria/close.gif');
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	background-position: center; 
+}
+.nihilo .dijitEditorIconsFindReplaceClose {
+        background-image: url('../icons/nihilo/close.gif');
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	background-position: center; 
+}
+.claro .dijitEditorIconsFindReplaceClose {
+        background-image: url('../icons/claro/close.gif');
+	background-repeat: no-repeat;
+	width: 18px;
+	height: 18px;
+	background-position: center; 
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/PasteFromWord.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/PasteFromWord.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/PasteFromWord.css	(revision 9)
@@ -0,0 +1,25 @@
+.dijitAdditionalEditorIconPasteFromWord {
+	background-image: url(../icons/pasteFromWord.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconPasteFromWord {
+	background-image: url(../icons/pasteFromWordDisabled.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.tundra .dijitPasteFromWordEmbeddedRTE .dijitEditor,
+.nihilo .dijitPasteFromWordEmbeddedRTE .dijitEditor {
+	border-color: #BFBFBF;
+	border-style: solid;
+	border-width: 1px;
+}
+.soria .dijitPasteFromWordEmbeddedRTE .dijitEditor {
+	border-color: #CCCCCC;
+	border-style: solid;
+	border-width: 1px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/Save.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/Save.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/Save.css	(revision 9)
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconSave {
+	background-image: url(../icons/save.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconSave {
+	background-image: url(../icons/saveDisabled.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/InsertAnchor.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/InsertAnchor.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/InsertAnchor.css	(revision 9)
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconInsertAnchor {
+	background-image: url(../icons/anchor.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconInsertAnchor {
+	background-image: url(../icons/anchorDisabled.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/InsertEntity.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/InsertEntity.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/InsertEntity.css	(revision 9)
@@ -0,0 +1,59 @@
+.dijitAdditionalEditorIconInsertEntity {
+	
+	background-image: url(../icons/insertEntity.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconInsertEntity {
+	
+	background-image: url(../icons/insertEntityDisabled.gif);
+}
+.dojoxEntityPalette {
+	
+	border: 1px solid #999;
+	background: #fff;
+	-moz-border-radius: 3pt;
+}
+.dojoxEntityPaletteCell {
+	
+	border: 1px dotted gray;
+	width: 20px;	
+	line-height: 18px;
+	overflow: hidden;
+	z-index: 10;
+	text-align: center;
+}
+.dojoxEntityPaletteCellHover, .dojoxEntityPaletteCellActive, .dojoxEntityPaletteCellFocused {
+	width: 18px;
+        line-height: 16px;
+	overflow: hidden;
+	cursor: default;
+	border:1px dashed #000;
+	outline:1px dashed #dedede;
+}
+.dojoxEntityPalettePreviewTable {
+	table-layout: auto;
+	font-size: 1em;
+	width: 100%;
+}
+.dojoxEntityPalettePreviewHeader {
+	font-size: .8em;
+	padding: 3px 3px 3px 3px;
+}
+.dojoxEntityPalettePreviewDetailEntity {
+	font-size: 3em;
+	font-weight: bold;
+	width: 1em;
+	text-align: center;
+}
+.dojoxEntityPalettePreviewDetail {
+	font-size: 1em;
+	vertical-align: middle;
+	font-weight: bold;
+	padding: 3px 3px 3px 3px;
+}
+.dijit_a11y .dojoxEntityPaletteCell {
+	background-color:transparent !important;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/PageBreak.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/PageBreak.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/PageBreak.css	(revision 9)
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconPageBreak {
+	background-image: url(../icons/pageBreak.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconPageBreak {
+	background-image: url(../icons/pageBreakDisabled.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/Preview.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/Preview.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/Preview.css	(revision 9)
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconPreview {
+	background-image: url(../icons/preview.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconPreview {
+	background-image: url(../icons/previewDisabled.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/Smiley.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/Smiley.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/Smiley.css	(revision 9)
@@ -0,0 +1,33 @@
+.dijitAdditionalEditorIconSmiley {
+	
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+	background-image: url(../icons/smiley.gif);
+}
+.dijitDisabled .dijitAdditionalEditorIconSmiley {
+	
+	background-image: url(../icons/smileyDisabled.gif);
+}
+.dijitEditorSmileyPalette {
+	border: 1px solid black;
+	background: white;
+	overflow: hidden;
+	overflow-x: hidden;
+	overflow-y: hidden;
+}
+.dijitEditorSmileyPalette .dijitPaletteCell {
+    height: 23px;
+    width: 27px;
+}
+.dijitEditorSmileyPalette .dijitPaletteImg {
+    border: none;
+    height: 20px;
+    width: 20px;
+    padding: 2px 2px;
+}
+.dijitEditorSmileyPalette .dijitPaletteCellHover .dijitPaletteImg {
+	border: 1px solid black;
+	padding: 1px 1px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/TextColor.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/TextColor.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/TextColor.css	(revision 9)
@@ -0,0 +1,107 @@
+.dojoxColorPicker {
+	padding:8px;
+	-moz-border-radius:4pt;
+	-webkit-border-radius:5pt;
+	-webkit-drop-shadow:3pt;
+}
+.dojoxColorPickerRightPad {
+	padding-right: 8px;
+}
+.tundra .dojoxColorPicker {
+	background:#ededed;
+	border:1px solid #ccc;
+}
+.dojoxColorPickerBox {
+	position:relative;
+	width:150px;	
+	height:150px;	
+	margin:0; 
+	padding:0;
+}
+.dojoxColorPickerUnderlay {
+	position:relative; 
+	top:0; left:0;
+	width:150px; 
+	height:150px;
+	z-index:1;
+}
+.tundra .dojoxColorPickerUnderlay {
+	border:1px solid #a0a0a0;
+}
+.claro .dojoxColorPicker {
+	background:#ededed;
+	border:1px solid #cdcdcd;
+}
+.claro .dojoxColorPickerUnderlay {
+	border:1px solid #cccccc;
+}
+.dojoxHuePickerUnderlay {
+	position:relative;
+	top:0; left:0;
+	height:150px;
+	width:20px;
+	z-index:1;
+	text-align: center;
+}
+.dojoxHuePicker { position:relative; top: 0px; left: 0px; padding: 0px;}
+.dojoxHuePickerPoint {
+	position:absolute;
+	top:0; left:0;
+	width:20px;
+	height:8px;
+	z-index:3; 
+	cursor:move;
+}
+.dojoxColorPickerPoint {
+	position:absolute;
+	width:10px; 
+	height:10px;
+	border:0;
+	z-index:3; 
+	cursor:move; 
+}
+.dojoxColorPickerPreview {
+	display:block;	
+	width:45px;	
+	height:45px;
+	border:1px solid #333;
+	background-color:#fff; 
+	position:relative;
+	top: 0px;
+	left: 0px; 
+}
+.dojoxColorPickerWebSafePreview {
+	display:block;
+	width:25px; 
+	height:25px; 
+	position:relative;
+	top: 0px;
+	left: 0px; 
+	border:1px solid #333; 
+}
+.dojoxColorPickerOptional {
+	position:relative;
+	top: 0px;
+	left: 0px;
+	height: 100%;
+}
+.dojoxColorPickerOptional table {
+	border-spacing: 4px;
+}
+.dojoxColorPickerPreviewContainer table {
+	border-spacing: 6px 0px;
+}
+.dojoxColorPickerOptional input {
+	border:1px solid #a7a7a7;
+	width:25px;
+	padding:1px 3px 1px 3px;
+	line-height:1.1em;
+}
+.dojoxColorPickerHex input {
+	width:55px;	
+}
+.dojoxEditorColorPicker {
+	overflow: hidden;
+	overflow-x: hidden;
+	overflow-y: hidden;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/ShowBlockNodes.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/ShowBlockNodes.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/ShowBlockNodes.css	(revision 9)
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconShowBlockNodes {
+	background-image: url(../icons/showBlockNodes.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconShowBlockNodes {
+	background-image: url(../icons/showBlockNodesDisabled.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/Breadcrumb.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/Breadcrumb.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/Breadcrumb.css	(revision 9)
@@ -0,0 +1,10 @@
+.dojoxEditorBreadcrumbArrow .dijitDownArrowButton {
+	width: 10px;
+}
+.dojoxEditorBreadcrumbArrow .dijitArrowButtonInner {
+	background-image: url(../icons/breadcrumbDown.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 8px;
+	height: 8px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/Blockquote.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/Blockquote.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/Blockquote.css	(revision 9)
@@ -0,0 +1,14 @@
+.dijitAdditionalEditorIconBlockquote {
+	background-image: url(../icons/blockquote.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
+.dijitDisabled .dijitAdditionalEditorIconBlockquote {
+	background-image: url(../icons/blockquoteDisabled.gif);
+	background-repeat: no-repeat;
+	background-position: center center;
+	width: 18px;
+	height: 18px;
+}
Index: trunk/web/dojo/dojox/editor/plugins/resources/css/StatusBar.css
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/resources/css/StatusBar.css	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/resources/css/StatusBar.css	(revision 9)
@@ -0,0 +1,102 @@
+.dojoxResizeHandle {
+	float: right;
+	position: absolute;
+	right: 2px;
+	bottom: 2px;
+	width: 13px;
+	height: 13px;
+	z-index: 20;
+	background-image: url(../../../../layout/resources/icons/resize.png);
+	line-height: 0px;
+}
+.dijitRtl .dojoxResizeHandle {
+        float: right;
+        left: 0px;
+        right: auto;
+	background-image: url(../../../../layout/resources/icons/resizeRtl.png);
+}
+.dojoxResizeNW {
+	cursor: nw-resize;
+}
+.dijitRtl .dojoxResizeNW {
+        cursor: ne-resize;
+}
+.dojoxResizeNE {
+	cursor: ne-resize; 
+}
+.dijitRtl .dojoxResizeNE {
+        cursor: nw-resize;
+}
+.dojoxResizeW {
+	cursor: w-resize; 
+}
+.dojoxResizeN { 
+	cursor: n-resize; 
+}
+.dojoxResizeHandleClone {
+	position:absolute; top:0; left:0; 
+	border:1px dashed #666; 
+	z-index:999; 
+}
+ 
+.dojoxEditorStatusBar {
+        overflow: hidden;
+        vertical-align: bottom;
+        padding: 2px; 
+}
+.dojoxEditorStatusBar table {
+        width: 100%;
+}
+.dojoxEditorStatusBar .dojoxResizeHandle {
+        position: static;
+        padding: 0px;
+        vertical-align: bottom; 
+}
+.dojoxEditorStatusBar .dojoxEditorStatusBarText{
+        height: 1.5em;
+        vertical-align: middle; 
+        width: 100%;
+        overflow: hidden;
+}
+.claro .dojoxEditorStatusBar {
+        background-color: #F1F1F1;
+}
+.claro .dojoxEditorStatusBar .dojoxEditorStatusBarText{
+        border-style: solid;
+        border-width: 1px;
+        border-color: #B5BCC7;
+        
+}
+.tundra .dojoxEditorStatusBar {
+        background-color: #EAEAEA;
+}
+.tundra .dojoxEditorStatusBar .dojoxEditorStatusBarText{
+        border-style: solid;
+        border-width: 1px;
+        border-color: #CCCCCC;
+        
+}
+.nihilo .dojoxEditorStatusBar {
+        border-style: solid;
+        background-color: #FFFFFF;
+        border-width: 1px;
+        border-color: #CCCCCC;
+}
+.nihilo .dojoxEditorStatusBar .dojoxEditorStatusBarText {
+        border-style: solid;
+        border-width: 1px;
+        border-color: #CCCCCC;
+        
+}
+.soria .dojoxEditorStatusBar {
+        border-style: solid;
+        background-color: #BDD6F0;
+        border-width: 1px;
+        border-color: #698FB3;
+}
+.soria .dojoxEditorStatusBar .dojoxEditorStatusBarText {
+        border-style: solid;
+        border-width: 1px;
+        border-color: #698FB3;
+        
+}
Index: trunk/web/dojo/dojox/editor/plugins/InsertEntity.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/InsertEntity.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/InsertEntity.js	(revision 9)
@@ -0,0 +1,50 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.InsertEntity"]){
+dojo._hasResource["dojox.editor.plugins.InsertEntity"]=true;
+dojo.provide("dojox.editor.plugins.InsertEntity");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dojox.editor.plugins.EntityPalette");
+dojo.require("dojox.html.entities");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","InsertEntity",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.InsertEntity",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",_initButton:function(){
+this.dropDown=new dojox.editor.plugins.EntityPalette({showCode:this.showCode,showEntityName:this.showEntityName});
+this.connect(this.dropDown,"onChange",function(_1){
+this.button.closeDropDown();
+this.editor.focus();
+this.editor.execCommand("inserthtml",_1);
+});
+var _2=dojo.i18n.getLocalization("dojox.editor.plugins","InsertEntity");
+this.button=new dijit.form.DropDownButton({label:_2["insertEntity"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"InsertEntity",tabIndex:"-1",dropDown:this.dropDown});
+},setEditor:function(_3){
+this.editor=_3;
+this._initButton();
+this.editor.addKeyHandler("s",true,true,dojo.hitch(this,function(){
+this.button.openDropDown();
+this.dropDown.focus();
+}));
+_3.contentPreFilters.push(this._preFilterEntities);
+_3.contentPostFilters.push(this._postFilterEntities);
+},_preFilterEntities:function(s){
+return dojox.html.entities.decode(s,dojox.html.entities.latin);
+},_postFilterEntities:function(s){
+return dojox.html.entities.encode(s,dojox.html.entities.latin);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _4=o.args.name?o.args.name.toLowerCase():"";
+if(_4==="insertentity"){
+o.plugin=new dojox.editor.plugins.InsertEntity({showCode:("showCode" in o.args)?o.args.showCode:false,showEntityName:("showEntityName" in o.args)?o.args.showEntityName:false});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/Smiley.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/Smiley.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/Smiley.js	(revision 9)
@@ -0,0 +1,56 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Smiley"]){
+dojo._hasResource["dojox.editor.plugins.Smiley"]=true;
+dojo.provide("dojox.editor.plugins.Smiley");
+dojo.experimental("dojox.editor.plugins.Smiley");
+dojo.require("dojo.i18n");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.ToggleButton");
+dojo.require("dijit.form.DropDownButton");
+dojo.require("dojox.editor.plugins._SmileyPalette");
+dojo.requireLocalization("dojox.editor.plugins","Smiley",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins.Smiley",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",emoticonMarker:"[]",emoticonImageClass:"dojoEditorEmoticon",_initButton:function(){
+this.dropDown=new dojox.editor.plugins._SmileyPalette();
+this.connect(this.dropDown,"onChange",function(_1){
+this.button.closeDropDown();
+this.editor.focus();
+_1=this.emoticonMarker.charAt(0)+_1+this.emoticonMarker.charAt(1);
+this.editor.execCommand("inserthtml",_1);
+});
+this.i18n=dojo.i18n.getLocalization("dojox.editor.plugins","Smiley");
+this.button=new dijit.form.DropDownButton({label:this.i18n.smiley,showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Smiley",tabIndex:"-1",dropDown:this.dropDown});
+this.emoticonImageRegexp=new RegExp("class=(\"|')"+this.emoticonImageClass+"(\"|')");
+},setEditor:function(_2){
+this.editor=_2;
+this._initButton();
+this.editor.contentPreFilters.push(dojo.hitch(this,this._preFilterEntities));
+this.editor.contentPostFilters.push(dojo.hitch(this,this._postFilterEntities));
+},_preFilterEntities:function(_3){
+return _3.replace(/\[([^\]]*)\]/g,dojo.hitch(this,this._decode));
+},_postFilterEntities:function(_4){
+return _4.replace(/<img [^>]*>/gi,dojo.hitch(this,this._encode));
+},_decode:function(_5,_6){
+var _7=dojox.editor.plugins.Emoticon.fromAscii(_6);
+return _7?_7.imgHtml(this.emoticonImageClass):_6;
+},_encode:function(_8){
+if(_8.search(this.emoticonImageRegexp)>-1){
+return this.emoticonMarker.charAt(0)+_8.replace(/(<img [^>]*)alt="([^"]*)"([^>]*>)/,"$2")+this.emoticonMarker.charAt(1);
+}else{
+return _8;
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+if(o.args.name==="smiley"){
+o.plugin=new dojox.editor.plugins.Smiley();
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/PrettyPrint.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/PrettyPrint.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/PrettyPrint.js	(revision 9)
@@ -0,0 +1,51 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.PrettyPrint"]){
+dojo._hasResource["dojox.editor.plugins.PrettyPrint"]=true;
+dojo.provide("dojox.editor.plugins.PrettyPrint");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dojox.html.format");
+dojo.declare("dojox.editor.plugins.PrettyPrint",dijit._editor._Plugin,{indentBy:-1,lineLength:-1,useDefaultCommand:false,entityMap:null,_initButton:function(){
+delete this.command;
+},setToolbar:function(_1){
+},setEditor:function(_2){
+this.inherited(arguments);
+var _3=this;
+this.editor.onLoadDeferred.addCallback(function(){
+_3.editor._prettyprint_getValue=_3.editor.getValue;
+_3.editor.getValue=function(){
+var _4=_3.editor._prettyprint_getValue(arguments);
+return dojox.html.format.prettyPrint(_4,_3.indentBy,_3.lineLength,_3.entityMap,_3.xhtml);
+};
+_3.editor._prettyprint_endEditing=_3.editor._endEditing;
+_3.editor._prettyprint_onBlur=_3.editor._onBlur;
+_3.editor._endEditing=function(_5){
+var v=_3.editor._prettyprint_getValue(true);
+_3.editor._undoedSteps=[];
+_3.editor._steps.push({text:v,bookmark:_3.editor._getBookmark()});
+};
+_3.editor._onBlur=function(e){
+this.inherited("_onBlur",arguments);
+var _6=_3.editor._prettyprint_getValue(true);
+if(_6!=_3.editor.savedContent){
+_3.editor.onChange(_6);
+_3.editor.savedContent=_6;
+}
+};
+});
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _7=o.args.name.toLowerCase();
+if(_7==="prettyprint"){
+o.plugin=new dojox.editor.plugins.PrettyPrint({indentBy:("indentBy" in o.args)?o.args.indentBy:-1,lineLength:("lineLength" in o.args)?o.args.lineLength:-1,entityMap:("entityMap" in o.args)?o.args.entityMap:dojox.html.entities.html.concat([["¢","cent"],["£","pound"],["€","euro"],["¥","yen"],["©","copy"],["§","sect"],["…","hellip"],["®","reg"]]),xhtml:("xhtml" in o.args)?o.args.xhtml:false});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js	(revision 9)
@@ -0,0 +1,601 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.NormalizeIndentOutdent"]){
+dojo._hasResource["dojox.editor.plugins.NormalizeIndentOutdent"]=true;
+dojo.provide("dojox.editor.plugins.NormalizeIndentOutdent");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.selection");
+dojo.experimental("dojox.editor.plugins.NormalizeIndentOutdent");
+dojo.declare("dojox.editor.plugins.NormalizeIndentOutdent",dijit._editor._Plugin,{indentBy:40,indentUnits:"px",setEditor:function(_1){
+this.editor=_1;
+_1._indentImpl=dojo.hitch(this,this._indentImpl);
+_1._outdentImpl=dojo.hitch(this,this._outdentImpl);
+if(!_1._indentoutdent_queryCommandEnabled){
+_1._indentoutdent_queryCommandEnabled=_1.queryCommandEnabled;
+}
+_1.queryCommandEnabled=dojo.hitch(this,this._queryCommandEnabled);
+_1.customUndo=true;
+},_queryCommandEnabled:function(_2){
+var c=_2.toLowerCase();
+var ed,_3,_4,_5,_6,_7;
+var _8="marginLeft";
+if(!this._isLtr()){
+_8="marginRight";
+}
+if(c==="indent"){
+ed=this.editor;
+_3=dijit.range.getSelection(ed.window);
+if(_3&&_3.rangeCount>0){
+_4=_3.getRangeAt(0);
+_5=_4.startContainer;
+while(_5&&_5!==ed.document&&_5!==ed.editNode){
+_6=this._getTagName(_5);
+if(_6==="li"){
+_7=_5.previousSibling;
+while(_7&&_7.nodeType!==1){
+_7=_7.previousSibling;
+}
+if(_7&&this._getTagName(_7)==="li"){
+return true;
+}else{
+return false;
+}
+}else{
+if(this._isIndentableElement(_6)){
+return true;
+}
+}
+_5=_5.parentNode;
+}
+if(this._isRootInline(_4.startContainer)){
+return true;
+}
+}
+}else{
+if(c==="outdent"){
+ed=this.editor;
+_3=dijit.range.getSelection(ed.window);
+if(_3&&_3.rangeCount>0){
+_4=_3.getRangeAt(0);
+_5=_4.startContainer;
+while(_5&&_5!==ed.document&&_5!==ed.editNode){
+_6=this._getTagName(_5);
+if(_6==="li"){
+return this.editor._indentoutdent_queryCommandEnabled(_2);
+}else{
+if(this._isIndentableElement(_6)){
+var _9=_5.style?_5.style[_8]:"";
+if(_9){
+_9=this._convertIndent(_9);
+if(_9/this.indentBy>=1){
+return true;
+}
+}
+return false;
+}
+}
+_5=_5.parentNode;
+}
+if(this._isRootInline(_4.startContainer)){
+return false;
+}
+}
+}else{
+return this.editor._indentoutdent_queryCommandEnabled(_2);
+}
+}
+return false;
+},_indentImpl:function(_a){
+var ed=this.editor;
+var _b=dijit.range.getSelection(ed.window);
+if(_b&&_b.rangeCount>0){
+var _c=_b.getRangeAt(0);
+var _d=_c.startContainer;
+var _e,_f,end,div;
+if(_c.startContainer===_c.endContainer){
+if(this._isRootInline(_c.startContainer)){
+_f=_c.startContainer;
+while(_f&&_f.parentNode!==ed.editNode){
+_f=_f.parentNode;
+}
+while(_f&&_f.previousSibling&&(this._isTextElement(_f)||(_f.nodeType===1&&this._isInlineFormat(this._getTagName(_f))))){
+_f=_f.previousSibling;
+}
+if(_f&&_f.nodeType===1&&!this._isInlineFormat(this._getTagName(_f))){
+_f=_f.nextSibling;
+}
+if(_f){
+div=ed.document.createElement("div");
+dojo.place(div,_f,"after");
+div.appendChild(_f);
+end=div.nextSibling;
+while(end&&(this._isTextElement(end)||(end.nodeType===1&&this._isInlineFormat(this._getTagName(end))))){
+div.appendChild(end);
+end=div.nextSibling;
+}
+this._indentElement(div);
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[div]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+}else{
+while(_d&&_d!==ed.document&&_d!==ed.editNode){
+_e=this._getTagName(_d);
+if(_e==="li"){
+this._indentList(_d);
+return;
+}else{
+if(this._isIndentableElement(_e)){
+this._indentElement(_d);
+return;
+}
+}
+_d=_d.parentNode;
+}
+}
+}else{
+var _10;
+_f=_c.startContainer;
+end=_c.endContainer;
+while(_f&&this._isTextElement(_f)&&_f.parentNode!==ed.editNode){
+_f=_f.parentNode;
+}
+while(end&&this._isTextElement(end)&&end.parentNode!==ed.editNode){
+end=end.parentNode;
+}
+if(end===ed.editNode||end===ed.document.body){
+_10=_f;
+while(_10.nextSibling&&dojo.withGlobal(ed.window,"inSelection",dijit._editor.selection,[_10])){
+_10=_10.nextSibling;
+}
+end=_10;
+if(end===ed.editNode||end===ed.document.body){
+_e=this._getTagName(_f);
+if(_e==="li"){
+this._indentList(_f);
+}else{
+if(this._isIndentableElement(_e)){
+this._indentElement(_f);
+}else{
+if(this._isTextElement(_f)||this._isInlineFormat(_e)){
+div=ed.document.createElement("div");
+dojo.place(div,_f,"after");
+var _11=_f;
+while(_11&&(this._isTextElement(_11)||(_11.nodeType===1&&this._isInlineFormat(this._getTagName(_11))))){
+div.appendChild(_11);
+_11=div.nextSibling;
+}
+this._indentElement(div);
+}
+}
+}
+return;
+}
+}
+end=end.nextSibling;
+_10=_f;
+while(_10&&_10!==end){
+if(_10.nodeType===1){
+_e=this._getTagName(_10);
+if(dojo.isIE){
+if(_e==="p"&&this._isEmpty(_10)){
+_10=_10.nextSibling;
+continue;
+}
+}
+if(_e==="li"){
+if(div){
+if(this._isEmpty(div)){
+div.parentNode.removeChild(div);
+}else{
+this._indentElement(div);
+}
+div=null;
+}
+this._indentList(_10);
+}else{
+if(!this._isInlineFormat(_e)&&this._isIndentableElement(_e)){
+if(div){
+if(this._isEmpty(div)){
+div.parentNode.removeChild(div);
+}else{
+this._indentElement(div);
+}
+div=null;
+}
+_10=this._indentElement(_10);
+}else{
+if(this._isInlineFormat(_e)){
+if(!div){
+div=ed.document.createElement("div");
+dojo.place(div,_10,"after");
+div.appendChild(_10);
+_10=div;
+}else{
+div.appendChild(_10);
+_10=div;
+}
+}
+}
+}
+}else{
+if(this._isTextElement(_10)){
+if(!div){
+div=ed.document.createElement("div");
+dojo.place(div,_10,"after");
+div.appendChild(_10);
+_10=div;
+}else{
+div.appendChild(_10);
+_10=div;
+}
+}
+}
+_10=_10.nextSibling;
+}
+if(div){
+if(this._isEmpty(div)){
+div.parentNode.removeChild(div);
+}else{
+this._indentElement(div);
+}
+div=null;
+}
+}
+}
+},_indentElement:function(_12){
+var _13="marginLeft";
+if(!this._isLtr()){
+_13="marginRight";
+}
+var tag=this._getTagName(_12);
+if(tag==="ul"||tag==="ol"){
+var div=this.editor.document.createElement("div");
+dojo.place(div,_12,"after");
+div.appendChild(_12);
+_12=div;
+}
+var _14=_12.style?_12.style[_13]:"";
+if(_14){
+_14=this._convertIndent(_14);
+_14=(parseInt(_14,10)+this.indentBy)+this.indentUnits;
+}else{
+_14=this.indentBy+this.indentUnits;
+}
+dojo.style(_12,_13,_14);
+return _12;
+},_outdentElement:function(_15){
+var _16="marginLeft";
+if(!this._isLtr()){
+_16="marginRight";
+}
+var _17=_15.style?_15.style[_16]:"";
+if(_17){
+_17=this._convertIndent(_17);
+if(_17-this.indentBy>0){
+_17=(parseInt(_17,10)-this.indentBy)+this.indentUnits;
+}else{
+_17="";
+}
+dojo.style(_15,_16,_17);
+}
+},_outdentImpl:function(_18){
+var ed=this.editor;
+var sel=dijit.range.getSelection(ed.window);
+if(sel&&sel.rangeCount>0){
+var _19=sel.getRangeAt(0);
+var _1a=_19.startContainer;
+var tag;
+if(_19.startContainer===_19.endContainer){
+while(_1a&&_1a!==ed.document&&_1a!==ed.editNode){
+tag=this._getTagName(_1a);
+if(tag==="li"){
+return this._outdentList(_1a);
+}else{
+if(this._isIndentableElement(tag)){
+return this._outdentElement(_1a);
+}
+}
+_1a=_1a.parentNode;
+}
+ed.document.execCommand("outdent",false,_18);
+}else{
+var _1b=_19.startContainer;
+var end=_19.endContainer;
+while(_1b&&_1b.nodeType===3){
+_1b=_1b.parentNode;
+}
+while(end&&end.nodeType===3){
+end=end.parentNode;
+}
+end=end.nextSibling;
+var _1c=_1b;
+while(_1c&&_1c!==end){
+if(_1c.nodeType===1){
+tag=this._getTagName(_1c);
+if(tag==="li"){
+this._outdentList(_1c);
+}else{
+if(this._isIndentableElement(tag)){
+this._outdentElement(_1c);
+}
+}
+}
+_1c=_1c.nextSibling;
+}
+}
+}
+return null;
+},_indentList:function(_1d){
+var ed=this.editor;
+var _1e,li;
+var _1f=_1d.parentNode;
+var _20=_1d.previousSibling;
+while(_20&&_20.nodeType!==1){
+_20=_20.previousSibling;
+}
+var _21=null;
+var tg=this._getTagName(_1f);
+if(tg==="ol"){
+_21="ol";
+}else{
+if(tg==="ul"){
+_21="ul";
+}
+}
+if(_21){
+if(_20&&_20.tagName.toLowerCase()=="li"){
+var _22;
+if(_20.childNodes){
+var i;
+for(i=0;i<_20.childNodes.length;i++){
+var n=_20.childNodes[i];
+if(n.nodeType===3){
+if(dojo.trim(n.nodeValue)){
+if(_22){
+break;
+}
+}
+}else{
+if(n.nodeType===1&&!_22){
+if(_21===n.tagName.toLowerCase()){
+_22=n;
+}
+}else{
+break;
+}
+}
+}
+}
+if(_22){
+_22.appendChild(_1d);
+}else{
+_1e=ed.document.createElement(_21);
+dojo.style(_1e,{paddingTop:"0px",paddingBottom:"0px"});
+li=ed.document.createElement("li");
+dojo.style(li,{listStyleImage:"none",listStyleType:"none"});
+_20.appendChild(_1e);
+_1e.appendChild(_1d);
+}
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[_1d]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+}
+},_outdentList:function(_23){
+var ed=this.editor;
+var _24=_23.parentNode;
+var _25=null;
+var tg=_24.tagName?_24.tagName.toLowerCase():"";
+var li;
+if(tg==="ol"){
+_25="ol";
+}else{
+if(tg==="ul"){
+_25="ul";
+}
+}
+var _26=_24.parentNode;
+var _27=this._getTagName(_26);
+if(_27==="li"||_27==="ol"||_27==="ul"){
+if(_27==="ol"||_27==="ul"){
+var _28=_24.previousSibling;
+while(_28&&(_28.nodeType!==1||(_28.nodeType===1&&this._getTagName(_28)!=="li"))){
+_28=_28.previousSibling;
+}
+if(_28){
+_28.appendChild(_24);
+_26=_28;
+}else{
+li=_23;
+var _29=_23;
+while(li.previousSibling){
+li=li.previousSibling;
+if(li.nodeType===1&&this._getTagName(li)==="li"){
+_29=li;
+}
+}
+if(_29!==_23){
+dojo.place(_29,_24,"before");
+_29.appendChild(_24);
+_26=_29;
+}else{
+li=ed.document.createElement("li");
+dojo.place(li,_24,"before");
+li.appendChild(_24);
+_26=li;
+}
+dojo.style(_24,{paddingTop:"0px",paddingBottom:"0px"});
+}
+}
+var _2a=_23.previousSibling;
+while(_2a&&_2a.nodeType!==1){
+_2a=_2a.previousSibling;
+}
+var _2b=_23.nextSibling;
+while(_2b&&_2b.nodeType!==1){
+_2b=_2b.nextSibling;
+}
+if(!_2a){
+dojo.place(_23,_26,"after");
+_23.appendChild(_24);
+}else{
+if(!_2b){
+dojo.place(_23,_26,"after");
+}else{
+var _2c=ed.document.createElement(_25);
+dojo.style(_2c,{paddingTop:"0px",paddingBottom:"0px"});
+_23.appendChild(_2c);
+while(_23.nextSibling){
+_2c.appendChild(_23.nextSibling);
+}
+dojo.place(_23,_26,"after");
+}
+}
+if(_24&&this._isEmpty(_24)){
+_24.parentNode.removeChild(_24);
+}
+if(_26&&this._isEmpty(_26)){
+_26.parentNode.removeChild(_26);
+}
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[_23]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}else{
+ed.document.execCommand("outdent",false,null);
+}
+},_isEmpty:function(_2d){
+if(_2d.childNodes){
+var _2e=true;
+var i;
+for(i=0;i<_2d.childNodes.length;i++){
+var n=_2d.childNodes[i];
+if(n.nodeType===1){
+if(this._getTagName(n)==="p"){
+if(!dojo.trim(n.innerHTML)){
+continue;
+}
+}
+_2e=false;
+break;
+}else{
+if(this._isTextElement(n)){
+var nv=dojo.trim(n.nodeValue);
+if(nv&&nv!=="&nbsp;"&&nv!==" "){
+_2e=false;
+break;
+}
+}else{
+_2e=false;
+break;
+}
+}
+}
+return _2e;
+}else{
+return true;
+}
+},_isIndentableElement:function(tag){
+switch(tag){
+case "p":
+case "div":
+case "h1":
+case "h2":
+case "h3":
+case "center":
+case "table":
+case "ul":
+case "ol":
+return true;
+default:
+return false;
+}
+},_convertIndent:function(_2f){
+var _30=12;
+_2f=_2f+"";
+_2f=_2f.toLowerCase();
+var _31=(_2f.indexOf("px")>0)?"px":(_2f.indexOf("em")>0)?"em":"px";
+_2f=_2f.replace(/(px;?|em;?)/gi,"");
+if(_31==="px"){
+if(this.indentUnits==="em"){
+_2f=Math.ceil(_2f/_30);
+}
+}else{
+if(this.indentUnits==="px"){
+_2f=_2f*_30;
+}
+}
+return _2f;
+},_isLtr:function(){
+var _32=this.editor.document.body;
+return dojo.withGlobal(this.editor.window,function(){
+var cs=dojo.getComputedStyle(_32);
+return cs?cs.direction=="ltr":true;
+});
+},_isInlineFormat:function(tag){
+switch(tag){
+case "a":
+case "b":
+case "strong":
+case "s":
+case "strike":
+case "i":
+case "u":
+case "em":
+case "sup":
+case "sub":
+case "span":
+case "font":
+case "big":
+case "cite":
+case "q":
+case "img":
+case "small":
+return true;
+default:
+return false;
+}
+},_getTagName:function(_33){
+var tag="";
+if(_33&&_33.nodeType===1){
+tag=_33.tagName?_33.tagName.toLowerCase():"";
+}
+return tag;
+},_isRootInline:function(_34){
+var ed=this.editor;
+if(this._isTextElement(_34)&&_34.parentNode===ed.editNode){
+return true;
+}else{
+if(_34.nodeType===1&&this._isInlineFormat(_34)&&_34.parentNode===ed.editNode){
+return true;
+}else{
+if(this._isTextElement(_34)&&this._isInlineFormat(this._getTagName(_34.parentNode))){
+_34=_34.parentNode;
+while(_34&&_34!==ed.editNode&&this._isInlineFormat(this._getTagName(_34))){
+_34=_34.parentNode;
+}
+if(_34===ed.editNode){
+return true;
+}
+}
+}
+}
+return false;
+},_isTextElement:function(_35){
+if(_35&&_35.nodeType===3||_35.nodeType===4){
+return true;
+}
+return false;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _36=o.args.name.toLowerCase();
+if(_36==="normalizeindentoutdent"){
+o.plugin=new dojox.editor.plugins.NormalizeIndentOutdent({indentBy:("indentBy" in o.args)?(o.args.indentBy>0?o.args.indentBy:40):40,indentUnits:("indentUnits" in o.args)?(o.args.indentUnits.toLowerCase()=="em"?"em":"px"):"px"});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/Breadcrumb.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/Breadcrumb.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/Breadcrumb.js	(revision 9)
@@ -0,0 +1,241 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Breadcrumb"]){
+dojo._hasResource["dojox.editor.plugins.Breadcrumb"]=true;
+dojo.provide("dojox.editor.plugins.Breadcrumb");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit._editor.range");
+dojo.require("dojo.i18n");
+dojo.require("dojo.string");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.form.Button");
+dojo.require("dijit._editor.selection");
+dojo.require("dijit.Menu");
+dojo.require("dijit.MenuItem");
+dojo.require("dijit.MenuSeparator");
+dojo.experimental("dojox.editor.plugins.Breadcrumb");
+dojo.requireLocalization("dojox.editor.plugins","Breadcrumb",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.declare("dojox.editor.plugins._BreadcrumbMenuTitle",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:"<tr><td dojoAttachPoint=\"title\" colspan=\"4\" class=\"dijitToolbar\" style=\"font-weight: bold; padding: 3px;\"></td></tr>",menuTitle:"",postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+var _1=this.id+"_text";
+dijit.setWaiState(this.domNode,"labelledby",_1);
+},_setMenuTitleAttr:function(_2){
+this.title.innerHTML=_2;
+},_getMenuTitleAttr:function(_3){
+return this.title.innerHTML;
+}});
+dojo.declare("dojox.editor.plugins.Breadcrumb",dijit._editor._Plugin,{_menu:null,breadcrumbBar:null,setEditor:function(_4){
+this.editor=_4;
+this._buttons=[];
+this.breadcrumbBar=new dijit.Toolbar();
+var _5=dojo.i18n.getLocalization("dojox.editor.plugins","Breadcrumb");
+this._titleTemplate=_5.nodeActions;
+dojo.place(this.breadcrumbBar.domNode,_4.footer);
+this.editor.onLoadDeferred.addCallback(dojo.hitch(this,function(){
+this._menu=new dijit.Menu({});
+dojo.addClass(this.breadcrumbBar.domNode,"dojoxEditorBreadcrumbArrow");
+var _6=this;
+var _7=new dijit.form.ComboButton({showLabel:true,label:"body",_selNode:_4.editNode,dropDown:this._menu,onClick:dojo.hitch(this,function(){
+this._menuTarget=_4.editNode;
+this._selectContents();
+})});
+this._menuTitle=new dojox.editor.plugins._BreadcrumbMenuTitle({menuTitle:_5.nodeActions});
+this._selCMenu=new dijit.MenuItem({label:_5.selectContents,onClick:dojo.hitch(this,this._selectContents)});
+this._delCMenu=new dijit.MenuItem({label:_5.deleteContents,onClick:dojo.hitch(this,this._deleteContents)});
+this._selEMenu=new dijit.MenuItem({label:_5.selectElement,onClick:dojo.hitch(this,this._selectElement)});
+this._delEMenu=new dijit.MenuItem({label:_5.deleteElement,onClick:dojo.hitch(this,this._deleteElement)});
+this._moveSMenu=new dijit.MenuItem({label:_5.moveStart,onClick:dojo.hitch(this,this._moveCToStart)});
+this._moveEMenu=new dijit.MenuItem({label:_5.moveEnd,onClick:dojo.hitch(this,this._moveCToEnd)});
+this._menu.addChild(this._menuTitle);
+this._menu.addChild(this._selCMenu);
+this._menu.addChild(this._delCMenu);
+this._menu.addChild(new dijit.MenuSeparator({}));
+this._menu.addChild(this._selEMenu);
+this._menu.addChild(this._delEMenu);
+this._menu.addChild(new dijit.MenuSeparator({}));
+this._menu.addChild(this._moveSMenu);
+this._menu.addChild(this._moveEMenu);
+_7._ddConnect=dojo.connect(_7,"openDropDown",dojo.hitch(this,function(){
+this._menuTarget=_7._selNode;
+this._menuTitle.set("menuTitle",dojo.string.substitute(this._titleTemplate,{"nodeName":"&lt;body&gt;"}));
+this._selEMenu.set("disabled",true);
+this._delEMenu.set("disabled",true);
+this._selCMenu.set("disabled",false);
+this._delCMenu.set("disabled",false);
+this._moveSMenu.set("disabled",false);
+this._moveEMenu.set("disabled",false);
+}));
+this.breadcrumbBar.addChild(_7);
+this.connect(this.editor,"onNormalizedDisplayChanged","updateState");
+}));
+this.breadcrumbBar.startup();
+if(dojo.isIE){
+setTimeout(dojo.hitch(this,function(){
+this.breadcrumbBar.domNode.className=this.breadcrumbBar.domNode.className;
+}),100);
+}
+},_selectContents:function(){
+this.editor.focus();
+if(this._menuTarget){
+var _8=this._menuTarget.tagName.toLowerCase();
+switch(_8){
+case "br":
+case "hr":
+case "img":
+case "input":
+case "base":
+case "meta":
+case "area":
+case "basefont":
+break;
+default:
+try{
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[null]);
+dojo.withGlobal(this.editor.window,"selectElementChildren",dijit._editor.selection,[this._menuTarget]);
+this.editor.onDisplayChanged();
+}
+catch(e){
+}
+}
+}
+},_deleteContents:function(){
+if(this._menuTarget){
+this.editor.beginEditing();
+this._selectContents();
+dojo.withGlobal(this.editor.window,"remove",dijit._editor.selection,[this._menuTarget]);
+this.editor.endEditing();
+this._updateBreadcrumb();
+this.editor.onDisplayChanged();
+}
+},_selectElement:function(){
+this.editor.focus();
+if(this._menuTarget){
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[null]);
+dojo.withGlobal(this.editor.window,"selectElement",dijit._editor.selection,[this._menuTarget]);
+this.editor.onDisplayChanged();
+}
+},_deleteElement:function(){
+if(this._menuTarget){
+this.editor.beginEditing();
+this._selectElement();
+dojo.withGlobal(this.editor.window,"remove",dijit._editor.selection,[this._menuTarget]);
+this.editor.endEditing();
+this._updateBreadcrumb();
+this.editor.onDisplayChanged();
+}
+},_moveCToStart:function(){
+this.editor.focus();
+if(this._menuTarget){
+this._selectContents();
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[true]);
+}
+},_moveCToEnd:function(){
+this.editor.focus();
+if(this._menuTarget){
+this._selectContents();
+dojo.withGlobal(this.editor.window,"collapse",dijit._editor.selection,[false]);
+}
+},_updateBreadcrumb:function(){
+var ed=this.editor;
+if(ed.window){
+var _9=dijit.range.getSelection(ed.window);
+if(_9&&_9.rangeCount>0){
+var _a=_9.getRangeAt(0);
+var _b=dojo.withGlobal(ed.window,"getSelectedElement",dijit._editor.selection)||_a.startContainer;
+var _c=[];
+if(_b&&_b.ownerDocument===ed.document){
+while(_b&&_b!==ed.editNode&&_b!=ed.document.body&&_b!=ed.document){
+if(_b.nodeType===1){
+_c.push({type:_b.tagName.toLowerCase(),node:_b});
+}
+_b=_b.parentNode;
+}
+_c=_c.reverse();
+while(this._buttons.length){
+var db=this._buttons.pop();
+dojo.disconnect(db._ddConnect);
+this.breadcrumbBar.removeChild(db);
+}
+this._buttons=[];
+var i;
+var _d=this;
+for(i=0;i<_c.length;i++){
+var bc=_c[i];
+var b=new dijit.form.ComboButton({showLabel:true,label:bc.type,_selNode:bc.node,dropDown:this._menu,onClick:function(){
+_d._menuTarget=this._selNode;
+_d._selectContents();
+}});
+b._ddConnect=dojo.connect(b,"openDropDown",dojo.hitch(b,function(){
+_d._menuTarget=this._selNode;
+var _e=_d._menuTarget.tagName.toLowerCase();
+var _f=dojo.string.substitute(_d._titleTemplate,{"nodeName":"&lt;"+_e+"&gt;"});
+_d._menuTitle.set("menuTitle",_f);
+switch(_e){
+case "br":
+case "hr":
+case "img":
+case "input":
+case "base":
+case "meta":
+case "area":
+case "basefont":
+_d._selCMenu.set("disabled",true);
+_d._delCMenu.set("disabled",true);
+_d._moveSMenu.set("disabled",true);
+_d._moveEMenu.set("disabled",true);
+_d._selEMenu.set("disabled",false);
+_d._delEMenu.set("disabled",false);
+break;
+default:
+_d._selCMenu.set("disabled",false);
+_d._delCMenu.set("disabled",false);
+_d._selEMenu.set("disabled",false);
+_d._delEMenu.set("disabled",false);
+_d._moveSMenu.set("disabled",false);
+_d._moveEMenu.set("disabled",false);
+}
+}));
+this._buttons.push(b);
+this.breadcrumbBar.addChild(b);
+}
+if(dojo.isIE){
+this.breadcrumbBar.domNode.className=this.breadcrumbBar.domNode.className;
+}
+}
+}
+}
+},updateState:function(){
+if(dojo.style(this.editor.iframe,"display")==="none"){
+dojo.style(this.breadcrumbBar.domNode,"display","none");
+}else{
+if(dojo.style(this.breadcrumbBar.domNode,"display")==="none"){
+dojo.style(this.breadcrumbBar.domNode,"display","block");
+}
+this._updateBreadcrumb();
+var _10=dojo.marginBox(this.editor.domNode);
+this.editor.resize({h:_10.h});
+}
+},destroy:function(){
+if(this.breadcrumbBar){
+this.breadcrumbBar.destroy();
+this.breadcrumbBar=null;
+}
+this._buttons=null;
+delete this.editor.breadcrumbBar;
+this.inherited(arguments);
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _11=o.args.name.toLowerCase();
+if(_11==="breadcrumb"){
+o.plugin=new dojox.editor.plugins.Breadcrumb({});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/StatusBar.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/StatusBar.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/StatusBar.js	(revision 9)
@@ -0,0 +1,94 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.StatusBar"]){
+dojo._hasResource["dojox.editor.plugins.StatusBar"]=true;
+dojo.provide("dojox.editor.plugins.StatusBar");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.Toolbar");
+dojo.require("dojox.layout.ResizeHandle");
+dojo.experimental("dojox.editor.plugins.StatusBar");
+dojo.declare("dojox.editor.plugins._StatusBar",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dojoxEditorStatusBar\">"+"<table><tbody><tr>"+"<td class=\"dojoxEditorStatusBarText\" tabindex=\"-1\" aria-role=\"presentation\" aria-live=\"aggressive\"><span dojoAttachPoint=\"barContent\">&nbsp;</span></td>"+"<td><span dojoAttachPoint=\"handle\"></span></td>"+"</tr></tbody><table>"+"</div>",_getValueAttr:function(){
+return this.barContent.innerHTML;
+},_setValueAttr:function(_1){
+if(_1){
+_1=dojo.trim(_1);
+if(!_1){
+_1="&nbsp;";
+}
+}else{
+_1="&nbsp;";
+}
+this.barContent.innerHTML=_1;
+}});
+dojo.declare("dojox.editor.plugins.StatusBar",dijit._editor._Plugin,{statusBar:null,resizer:true,setEditor:function(_2){
+this.editor=_2;
+this.statusBar=new dojox.editor.plugins._StatusBar();
+if(this.resizer){
+this.resizeHandle=new dojox.layout.ResizeHandle({targetId:this.editor,activeResize:true},this.statusBar.handle);
+this.resizeHandle.startup();
+}else{
+dojo.style(this.statusBar.handle.parentNode,"display","none");
+}
+var _3=null;
+if(_2.footer.lastChild){
+_3="after";
+}
+dojo.place(this.statusBar.domNode,_2.footer.lastChild||_2.footer,_3);
+this.statusBar.startup();
+this.editor.statusBar=this;
+this._msgListener=dojo.subscribe(this.editor.id+"_statusBar",dojo.hitch(this,this._setValueAttr));
+},_getValueAttr:function(){
+return this.statusBar.get("value");
+},_setValueAttr:function(_4){
+this.statusBar.set("value",_4);
+},set:function(_5,_6){
+if(_5){
+var _7="_set"+_5.charAt(0).toUpperCase()+_5.substring(1,_5.length)+"Attr";
+if(dojo.isFunction(this[_7])){
+this[_7](_6);
+}else{
+this[_5]=_6;
+}
+}
+},get:function(_8){
+if(_8){
+var _9="_get"+_8.charAt(0).toUpperCase()+_8.substring(1,_8.length)+"Attr";
+var f=this[_9];
+if(dojo.isFunction(f)){
+return this[_9]();
+}else{
+return this[_8];
+}
+}
+return null;
+},destroy:function(){
+if(this.statusBar){
+this.statusBar.destroy();
+delete this.statusBar;
+}
+if(this.resizeHandle){
+this.resizeHandle.destroy();
+delete this.resizeHandle;
+}
+if(this._msgListener){
+dojo.unsubscribe(this._msgListener);
+delete this._msgListener;
+}
+delete this.editor.statusBar;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _a=o.args.name.toLowerCase();
+if(_a==="statusbar"){
+var _b=("resizer" in o.args)?o.args.resizer:true;
+o.plugin=new dojox.editor.plugins.StatusBar({resizer:_b});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/Blockquote.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/Blockquote.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/Blockquote.js	(revision 9)
@@ -0,0 +1,352 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.Blockquote"]){
+dojo._hasResource["dojox.editor.plugins.Blockquote"]=true;
+dojo.provide("dojox.editor.plugins.Blockquote");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.form.Button");
+dojo.require("dojo.i18n");
+dojo.requireLocalization("dojox.editor.plugins","Blockquote",null,"ROOT,ro");
+dojo.declare("dojox.editor.plugins.Blockquote",dijit._editor._Plugin,{iconClassPrefix:"dijitAdditionalEditorIcon",_initButton:function(){
+this._nlsResources=dojo.i18n.getLocalization("dojox.editor.plugins","Blockquote");
+this.button=new dijit.form.ToggleButton({label:this._nlsResources["blockquote"],showLabel:false,iconClass:this.iconClassPrefix+" "+this.iconClassPrefix+"Blockquote",tabIndex:"-1",onClick:dojo.hitch(this,"_toggleQuote")});
+},setEditor:function(_1){
+this.editor=_1;
+this._initButton();
+this.connect(this.editor,"onNormalizedDisplayChanged","updateState");
+_1.customUndo=true;
+},_toggleQuote:function(_2){
+try{
+var ed=this.editor;
+ed.focus();
+var _3=this.button.get("checked");
+var _4=dijit.range.getSelection(ed.window);
+var _5,_6,_7,_8;
+if(_4&&_4.rangeCount>0){
+_5=_4.getRangeAt(0);
+}
+if(_5){
+ed.beginEditing();
+if(_3){
+var bq,_9;
+if(_5.startContainer===_5.endContainer){
+if(this._isRootInline(_5.startContainer)){
+_7=_5.startContainer;
+while(_7&&_7.parentNode!==ed.editNode){
+_7=_7.parentNode;
+}
+while(_7&&_7.previousSibling&&(this._isTextElement(_7)||(_7.nodeType===1&&this._isInlineFormat(this._getTagName(_7))))){
+_7=_7.previousSibling;
+}
+if(_7&&_7.nodeType===1&&!this._isInlineFormat(this._getTagName(_7))){
+_7=_7.nextSibling;
+}
+if(_7){
+bq=ed.document.createElement("blockquote");
+dojo.place(bq,_7,"after");
+bq.appendChild(_7);
+_8=bq.nextSibling;
+while(_8&&(this._isTextElement(_8)||(_8.nodeType===1&&this._isInlineFormat(this._getTagName(_8))))){
+bq.appendChild(_8);
+_8=bq.nextSibling;
+}
+}
+}else{
+var _a=_5.startContainer;
+while((this._isTextElement(_a)||this._isInlineFormat(this._getTagName(_a))||this._getTagName(_a)==="li")&&_a!==ed.editNode&&_a!==ed.document.body){
+_a=_a.parentNode;
+}
+if(_a!==ed.editNode&&_a!==_a.ownerDocument.documentElement){
+bq=ed.document.createElement("blockquote");
+dojo.place(bq,_a,"after");
+bq.appendChild(_a);
+}
+}
+if(bq){
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[bq]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+}else{
+var _b;
+_7=_5.startContainer;
+_8=_5.endContainer;
+while(_7&&this._isTextElement(_7)&&_7.parentNode!==ed.editNode){
+_7=_7.parentNode;
+}
+_b=_7;
+while(_b.nextSibling&&dojo.withGlobal(ed.window,"inSelection",dijit._editor.selection,[_b])){
+_b=_b.nextSibling;
+}
+_8=_b;
+if(_8===ed.editNode||_8===ed.document.body){
+bq=ed.document.createElement("blockquote");
+dojo.place(bq,_7,"after");
+_9=this._getTagName(_7);
+if(this._isTextElement(_7)||this._isInlineFormat(_9)){
+var _c=_7;
+while(_c&&(this._isTextElement(_c)||(_c.nodeType===1&&this._isInlineFormat(this._getTagName(_c))))){
+bq.appendChild(_c);
+_c=bq.nextSibling;
+}
+}else{
+bq.appendChild(_7);
+}
+return;
+}
+_8=_8.nextSibling;
+_b=_7;
+while(_b&&_b!==_8){
+if(_b.nodeType===1){
+_9=this._getTagName(_b);
+if(_9!=="br"){
+if(!window.getSelection){
+if(_9==="p"&&this._isEmpty(_b)){
+_b=_b.nextSibling;
+continue;
+}
+}
+if(this._isInlineFormat(_9)){
+if(!bq){
+bq=ed.document.createElement("blockquote");
+dojo.place(bq,_b,"after");
+bq.appendChild(_b);
+}else{
+bq.appendChild(_b);
+}
+_b=bq;
+}else{
+if(bq){
+if(this._isEmpty(bq)){
+bq.parentNode.removeChild(bq);
+}
+}
+bq=ed.document.createElement("blockquote");
+dojo.place(bq,_b,"after");
+bq.appendChild(_b);
+_b=bq;
+}
+}
+}else{
+if(this._isTextElement(_b)){
+if(!bq){
+bq=ed.document.createElement("blockquote");
+dojo.place(bq,_b,"after");
+bq.appendChild(_b);
+}else{
+bq.appendChild(_b);
+}
+_b=bq;
+}
+}
+_b=_b.nextSibling;
+}
+if(bq){
+if(this._isEmpty(bq)){
+bq.parentNode.removeChild(bq);
+}else{
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[bq]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+bq=null;
+}
+}
+}else{
+var _d=false;
+if(_5.startContainer===_5.endContainer){
+_6=_5.endContainer;
+while(_6&&_6!==ed.editNode&&_6!==ed.document.body){
+var tg=_6.tagName?_6.tagName.toLowerCase():"";
+if(tg==="blockquote"){
+_d=true;
+break;
+}
+_6=_6.parentNode;
+}
+if(_d){
+var _e;
+while(_6.firstChild){
+_e=_6.firstChild;
+dojo.place(_e,_6,"before");
+}
+_6.parentNode.removeChild(_6);
+if(_e){
+dojo.withGlobal(ed.window,"selectElementChildren",dijit._editor.selection,[_e]);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+}
+}else{
+_7=_5.startContainer;
+_8=_5.endContainer;
+while(_7&&this._isTextElement(_7)&&_7.parentNode!==ed.editNode){
+_7=_7.parentNode;
+}
+var _f=[];
+var _10=_7;
+while(_10&&_10.nextSibling&&dojo.withGlobal(ed.window,"inSelection",dijit._editor.selection,[_10])){
+if(_10.parentNode&&this._getTagName(_10.parentNode)==="blockquote"){
+_10=_10.parentNode;
+}
+_f.push(_10);
+_10=_10.nextSibling;
+}
+var _11=this._findBlockQuotes(_f);
+while(_11.length){
+var bn=_11.pop();
+if(bn.parentNode){
+while(bn.firstChild){
+dojo.place(bn.firstChild,bn,"before");
+}
+bn.parentNode.removeChild(bn);
+}
+}
+}
+}
+ed.endEditing();
+}
+ed.onNormalizedDisplayChanged();
+}
+catch(e){
+}
+},updateState:function(){
+var ed=this.editor;
+if(!ed||!ed.isLoaded){
+return;
+}
+if(this.button){
+var _12;
+var _13=false;
+var sel=dijit.range.getSelection(ed.window);
+if(sel&&sel.rangeCount>0){
+var _14=sel.getRangeAt(0);
+if(_14){
+_12=_14.endContainer;
+}
+}
+while(_12&&_12!==ed.editNode&&_12!==ed.document){
+var tg=_12.tagName?_12.tagName.toLowerCase():"";
+if(tg==="blockquote"){
+_13=true;
+break;
+}
+_12=_12.parentNode;
+}
+this.button.set("checked",_13);
+}
+},_findBlockQuotes:function(_15){
+var _16=[];
+if(_15){
+var i;
+for(i=0;i<_15.length;i++){
+var _17=_15[i];
+if(_17.nodeType===1){
+if(this._getTagName(_17)==="blockquote"){
+_16.push(_17);
+}
+if(_17.childNodes&&_17.childNodes.length>0){
+_16=_16.concat(this._findBlockQuotes(_17.childNodes));
+}
+}
+}
+}
+return _16;
+},_getTagName:function(_18){
+var tag="";
+if(_18&&_18.nodeType===1){
+tag=_18.tagName?_18.tagName.toLowerCase():"";
+}
+return tag;
+},_isRootInline:function(_19){
+var ed=this.editor;
+if(this._isTextElement(_19)&&_19.parentNode===ed.editNode){
+return true;
+}else{
+if(_19.nodeType===1&&this._isInlineFormat(_19)&&_19.parentNode===ed.editNode){
+return true;
+}else{
+if(this._isTextElement(_19)&&this._isInlineFormat(this._getTagName(_19.parentNode))){
+_19=_19.parentNode;
+while(_19&&_19!==ed.editNode&&this._isInlineFormat(this._getTagName(_19))){
+_19=_19.parentNode;
+}
+if(_19===ed.editNode){
+return true;
+}
+}
+}
+}
+return false;
+},_isTextElement:function(_1a){
+if(_1a&&_1a.nodeType===3||_1a.nodeType===4){
+return true;
+}
+return false;
+},_isEmpty:function(_1b){
+if(_1b.childNodes){
+var _1c=true;
+var i;
+for(i=0;i<_1b.childNodes.length;i++){
+var n=_1b.childNodes[i];
+if(n.nodeType===1){
+if(this._getTagName(n)==="p"){
+if(!dojo.trim(n.innerHTML)){
+continue;
+}
+}
+_1c=false;
+break;
+}else{
+if(this._isTextElement(n)){
+var nv=dojo.trim(n.nodeValue);
+if(nv&&nv!=="&nbsp;"&&nv!==" "){
+_1c=false;
+break;
+}
+}else{
+_1c=false;
+break;
+}
+}
+}
+return _1c;
+}else{
+return true;
+}
+},_isInlineFormat:function(tag){
+switch(tag){
+case "a":
+case "b":
+case "strong":
+case "s":
+case "strike":
+case "i":
+case "u":
+case "em":
+case "sup":
+case "sub":
+case "span":
+case "font":
+case "big":
+case "cite":
+case "q":
+case "img":
+case "small":
+return true;
+default:
+return false;
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _1d=o.args.name.toLowerCase();
+if(_1d==="blockquote"){
+o.plugin=new dojox.editor.plugins.Blockquote({});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/CollapsibleToolbar.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/CollapsibleToolbar.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/CollapsibleToolbar.js	(revision 9)
@@ -0,0 +1,90 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.CollapsibleToolbar"]){
+dojo._hasResource["dojox.editor.plugins.CollapsibleToolbar"]=true;
+dojo.provide("dojox.editor.plugins.CollapsibleToolbar");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._editor._Plugin");
+dojo.requireLocalization("dojox.editor.plugins","CollapsibleToolbar",null,"ROOT,ro");
+dojo.declare("dojox.editor.plugins._CollapsibleToolbarButton",[dijit._Widget,dijit._Templated],{templateString:"<div tabindex='0' role='button' title='${title}' class='${buttonClass}' "+"dojoAttachEvent='ondijitclick: onClick'><span class='${textClass}'>${text}</span></div>",title:"",buttonClass:"",text:"",textClass:"",onClick:function(e){
+}});
+dojo.declare("dojox.editor.plugins.CollapsibleToolbar",dijit._editor._Plugin,{_myWidgets:null,setEditor:function(_1){
+this.editor=_1;
+this._constructContainer();
+},_constructContainer:function(){
+var _2=dojo.i18n.getLocalization("dojox.editor.plugins","CollapsibleToolbar");
+this._myWidgets=[];
+var _3=dojo.create("table",{style:{width:"100%"},tabindex:-1,"class":"dojoxCollapsibleToolbarContainer"});
+var _4=dojo.create("tbody",{tabindex:-1},_3);
+var _5=dojo.create("tr",{tabindex:-1},_4);
+var _6=dojo.create("td",{"class":"dojoxCollapsibleToolbarControl",tabindex:-1},_5);
+var _7=dojo.create("td",{"class":"dojoxCollapsibleToolbarControl",tabindex:-1},_5);
+var _8=dojo.create("td",{style:{width:"100%"},tabindex:-1},_5);
+var m=dojo.create("span",{style:{width:"100%"},tabindex:-1},_8);
+var _9=new dojox.editor.plugins._CollapsibleToolbarButton({buttonClass:"dojoxCollapsibleToolbarCollapse",title:_2.collapse,text:"-",textClass:"dojoxCollapsibleToolbarCollapseText"});
+dojo.place(_9.domNode,_6);
+var _a=new dojox.editor.plugins._CollapsibleToolbarButton({buttonClass:"dojoxCollapsibleToolbarExpand",title:_2.expand,text:"+",textClass:"dojoxCollapsibleToolbarExpandText"});
+dojo.place(_a.domNode,_7);
+this._myWidgets.push(_9);
+this._myWidgets.push(_a);
+dojo.style(_7,"display","none");
+dojo.place(_3,this.editor.toolbar.domNode,"after");
+dojo.place(this.editor.toolbar.domNode,m);
+this.openTd=_6;
+this.closeTd=_7;
+this.menu=m;
+this.connect(_9,"onClick","_onClose");
+this.connect(_a,"onClick","_onOpen");
+},_onClose:function(e){
+if(e){
+dojo.stopEvent(e);
+}
+var _b=dojo.marginBox(this.editor.domNode);
+dojo.style(this.openTd,"display","none");
+dojo.style(this.closeTd,"display","");
+dojo.style(this.menu,"display","none");
+this.editor.resize({h:_b.h});
+if(dojo.isIE){
+this.editor.header.className=this.editor.header.className;
+this.editor.footer.className=this.editor.footer.className;
+}
+dijit.focus(this.closeTd.firstChild);
+},_onOpen:function(e){
+if(e){
+dojo.stopEvent(e);
+}
+var _c=dojo.marginBox(this.editor.domNode);
+dojo.style(this.closeTd,"display","none");
+dojo.style(this.openTd,"display","");
+dojo.style(this.menu,"display","");
+this.editor.resize({h:_c.h});
+if(dojo.isIE){
+this.editor.header.className=this.editor.header.className;
+this.editor.footer.className=this.editor.footer.className;
+}
+dijit.focus(this.openTd.firstChild);
+},destroy:function(){
+this.inherited(arguments);
+if(this._myWidgets){
+while(this._myWidgets.length){
+this._myWidgets.pop().destroy();
+}
+delete this._myWidgets;
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _d=o.args.name.toLowerCase();
+if(_d==="collapsibletoolbar"){
+o.plugin=new dojox.editor.plugins.CollapsibleToolbar({});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/FindReplace.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/FindReplace.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/FindReplace.js	(revision 9)
@@ -0,0 +1,391 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.FindReplace"]){
+dojo._hasResource["dojox.editor.plugins.FindReplace"]=true;
+dojo.provide("dojox.editor.plugins.FindReplace");
+dojo.require("dijit._editor._Plugin");
+dojo.require("dijit.Toolbar");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form.Button");
+dojo.require("dijit.TooltipDialog");
+dojo.require("dojox.editor.plugins.ToolbarLineBreak");
+dojo.require("dojo.i18n");
+dojo.require("dojo.string");
+dojo.requireLocalization("dojox.editor.plugins","FindReplace",null,"ROOT,cs,de,es,fr,hu,it,ja,ko,pl,pt,ro,ru,zh,zh-tw");
+dojo.experimental("dojox.editor.plugins.FindReplace");
+dojo.declare("dojox.editor.plugins._FindReplaceCloseBox",[dijit._Widget,dijit._Templated],{btnId:"",widget:null,widgetsInTemplate:true,templateString:"<span style='float: right' class='dijitInline' tabindex='-1'>"+"<button class='dijit dijitReset dijitInline' "+"id='${btnId}' dojoAttachPoint='button' dojoType='dijit.form.Button' tabindex='-1' iconClass='dijitEditorIconsFindReplaceClose' showLabel='false'>X</button>"+"</span>",postMixInProperties:function(){
+this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+this.btnId=this.id+"_close";
+this.inherited(arguments);
+},startup:function(){
+this.connect(this.button,"onClick","onClick");
+},onClick:function(){
+}});
+dojo.declare("dojox.editor.plugins._FindReplaceTextBox",[dijit._Widget,dijit._Templated],{textId:"",label:"",toolTip:"",widget:null,widgetsInTemplate:true,templateString:"<span style='white-space: nowrap' class='dijit dijitReset dijitInline dijitEditorFindReplaceTextBox' "+"title='${tooltip}' tabindex='-1'>"+"<label class='dijitLeft dijitInline' for='${textId}' tabindex='-1'>${label}</label>"+"<input dojoType='dijit.form.TextBox' required='false' intermediateChanges='true' class='focusTextBox'"+"tabIndex='0' id='${textId}' dojoAttachPoint='textBox, focusNode' value='' dojoAttachEvent='onKeyPress: _onKeyPress'/>"+"</span>",postMixInProperties:function(){
+this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+this.textId=this.id+"_text";
+this.inherited(arguments);
+},postCreate:function(){
+this.textBox.set("value","");
+this.disabled=this.textBox.get("disabled");
+this.connect(this.textBox,"onChange","onChange");
+},_setValueAttr:function(_1){
+this.value=_1;
+this.textBox.set("value",_1);
+},focus:function(){
+this.textBox.focus();
+},_setDisabledAttr:function(_2){
+this.disabled=_2;
+this.textBox.set("disabled",_2);
+},onChange:function(_3){
+this.value=_3;
+},_onKeyPress:function(_4){
+var _5=0;
+var _6=0;
+if(_4.target&&!_4.ctrlKey&&!_4.altKey&&!_4.shiftKey){
+if(_4.keyCode==dojo.keys.LEFT_ARROW){
+_5=_4.target.selectionStart;
+_6=_4.target.selectionEnd;
+if(_5<_6){
+dijit.selectInputText(_4.target,_5,_5);
+dojo.stopEvent(_4);
+}
+}else{
+if(_4.keyCode==dojo.keys.RIGHT_ARROW){
+_5=_4.target.selectionStart;
+_6=_4.target.selectionEnd;
+if(_5<_6){
+dijit.selectInputText(_4.target,_6,_6);
+dojo.stopEvent(_4);
+}
+}
+}
+}
+}});
+dojo.declare("dojox.editor.plugins._FindReplaceCheckBox",[dijit._Widget,dijit._Templated],{checkId:"",label:"",tooltip:"",widget:null,widgetsInTemplate:true,templateString:"<span style='white-space: nowrap' tabindex='-1' "+"class='dijit dijitReset dijitInline dijitEditorFindReplaceCheckBox' title='${tooltip}' >"+"<input dojoType='dijit.form.CheckBox' required=false "+"tabIndex='0' id='${checkId}' dojoAttachPoint='checkBox, focusNode' value=''/>"+"<label tabindex='-1' class='dijitLeft dijitInline' for='${checkId}'>${label}</label>"+"</span>",postMixInProperties:function(){
+this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
+this.checkId=this.id+"_check";
+this.inherited(arguments);
+},postCreate:function(){
+this.checkBox.set("checked",false);
+this.disabled=this.checkBox.get("disabled");
+this.checkBox.isFocusable=function(){
+return false;
+};
+},_setValueAttr:function(_7){
+this.checkBox.set("value",_7);
+},_getValueAttr:function(){
+return this.checkBox.get("value");
+},focus:function(){
+this.checkBox.focus();
+},_setDisabledAttr:function(_8){
+this.disabled=_8;
+this.checkBox.set("disabled",_8);
+}});
+dojo.declare("dojox.editor.plugins._FindReplaceToolbar",dijit.Toolbar,{postCreate:function(){
+this.connectKeyNavHandlers([],[]);
+this.connect(this.containerNode,"onclick","_onToolbarEvent");
+this.connect(this.containerNode,"onkeydown","_onToolbarEvent");
+dojo.addClass(this.domNode,"dijitToolbar");
+},addChild:function(_9,_a){
+dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);
+},_onToolbarEvent:function(_b){
+_b.stopPropagation();
+}});
+dojo.declare("dojox.editor.plugins.FindReplace",[dijit._editor._Plugin],{buttonClass:dijit.form.ToggleButton,iconClassPrefix:"dijitEditorIconsFindReplace",editor:null,button:null,_frToolbar:null,_closeBox:null,_findField:null,_replaceField:null,_findButton:null,_replaceButton:null,_replaceAllButton:null,_caseSensitive:null,_backwards:null,_promDialog:null,_promDialogTimeout:null,_strings:null,_initButton:function(){
+this._strings=dojo.i18n.getLocalization("dojox.editor.plugins","FindReplace");
+this.button=new dijit.form.ToggleButton({label:this._strings["findReplace"],showLabel:false,iconClass:this.iconClassPrefix+" dijitEditorIconFindString",tabIndex:"-1",onChange:dojo.hitch(this,"_toggleFindReplace")});
+if(dojo.isOpera){
+this.button.set("disabled",true);
+}
+this.connect(this.button,"set",dojo.hitch(this,function(_c,_d){
+if(_c==="disabled"){
+this._toggleFindReplace((!_d&&this._displayed),true,true);
+}
+}));
+},setEditor:function(_e){
+this.editor=_e;
+this._initButton();
+},toggle:function(){
+this.button.set("checked",!this.button.get("checked"));
+},_toggleFindReplace:function(_f,_10,_11){
+var _12=dojo.marginBox(this.editor.domNode);
+if(_f&&!dojo.isOpera){
+dojo.style(this._frToolbar.domNode,"display","block");
+this._populateFindField();
+if(!_10){
+this._displayed=true;
+}
+}else{
+dojo.style(this._frToolbar.domNode,"display","none");
+if(!_10){
+this._displayed=false;
+}
+if(!_11){
+this.editor.focus();
+}
+}
+this.editor.resize({h:_12.h});
+},_populateFindField:function(){
+var ed=this.editor;
+var win=ed.window;
+var _13=dojo.withGlobal(ed.window,"getSelectedText",dijit._editor.selection,[null]);
+if(this._findField&&this._findField.textBox){
+if(_13){
+this._findField.textBox.set("value",_13);
+}
+this._findField.textBox.focus();
+dijit.selectInputText(this._findField.textBox.focusNode);
+}
+},setToolbar:function(_14){
+this.inherited(arguments);
+if(!dojo.isOpera){
+var _15=this._frToolbar=new dojox.editor.plugins._FindReplaceToolbar();
+dojo.style(_15.domNode,"display","none");
+dojo.place(_15.domNode,_14.domNode,"after");
+_15.startup();
+this._closeBox=new dojox.editor.plugins._FindReplaceCloseBox();
+_15.addChild(this._closeBox);
+this._findField=new dojox.editor.plugins._FindReplaceTextBox({label:this._strings["findLabel"],tooltip:this._strings["findTooltip"]});
+_15.addChild(this._findField);
+this._replaceField=new dojox.editor.plugins._FindReplaceTextBox({label:this._strings["replaceLabel"],tooltip:this._strings["replaceTooltip"]});
+_15.addChild(this._replaceField);
+_15.addChild(new dojox.editor.plugins._ToolbarLineBreak());
+this._findButton=new dijit.form.Button({label:this._strings["findButton"],showLabel:true,iconClass:this.iconClassPrefix+" dijitEditorIconFind"});
+this._findButton.titleNode.title=this._strings["findButtonTooltip"];
+_15.addChild(this._findButton);
+this._replaceButton=new dijit.form.Button({label:this._strings["replaceButton"],showLabel:true,iconClass:this.iconClassPrefix+" dijitEditorIconReplace"});
+this._replaceButton.titleNode.title=this._strings["replaceButtonTooltip"];
+_15.addChild(this._replaceButton);
+this._replaceAllButton=new dijit.form.Button({label:this._strings["replaceAllButton"],showLabel:true,iconClass:this.iconClassPrefix+" dijitEditorIconReplaceAll"});
+this._replaceAllButton.titleNode.title=this._strings["replaceAllButtonTooltip"];
+_15.addChild(this._replaceAllButton);
+this._caseSensitive=new dojox.editor.plugins._FindReplaceCheckBox({label:this._strings["matchCase"],tooltip:this._strings["matchCaseTooltip"]});
+_15.addChild(this._caseSensitive);
+this._backwards=new dojox.editor.plugins._FindReplaceCheckBox({label:this._strings["backwards"],tooltip:this._strings["backwardsTooltip"]});
+_15.addChild(this._backwards);
+this._findButton.set("disabled",true);
+this._replaceButton.set("disabled",true);
+this._replaceAllButton.set("disabled",true);
+this.connect(this._findField,"onChange","_checkButtons");
+this.connect(this._findField,"onKeyDown","_onFindKeyDown");
+this.connect(this._replaceField,"onKeyDown","_onReplaceKeyDown");
+this.connect(this._findButton,"onClick","_find");
+this.connect(this._replaceButton,"onClick","_replace");
+this.connect(this._replaceAllButton,"onClick","_replaceAll");
+this.connect(this._closeBox,"onClick","toggle");
+this._promDialog=new dijit.TooltipDialog();
+this._promDialog.startup();
+this._promDialog.set("content","");
+}
+},_checkButtons:function(){
+var _16=this._findField.get("value");
+if(_16){
+this._findButton.set("disabled",false);
+this._replaceButton.set("disabled",false);
+this._replaceAllButton.set("disabled",false);
+}else{
+this._findButton.set("disabled",true);
+this._replaceButton.set("disabled",true);
+this._replaceAllButton.set("disabled",true);
+}
+},_onFindKeyDown:function(evt){
+if(evt.keyCode==dojo.keys.ENTER){
+this._find();
+dojo.stopEvent(evt);
+}
+},_onReplaceKeyDown:function(evt){
+if(evt.keyCode==dojo.keys.ENTER){
+if(!this._replace()){
+this._replace();
+}
+dojo.stopEvent(evt);
+}
+},_find:function(_17){
+var txt=this._findField.get("value")||"";
+if(txt){
+var _18=this._caseSensitive.get("value");
+var _19=this._backwards.get("value");
+var _1a=this._findText(txt,_18,_19);
+if(!_1a&&_17){
+this._promDialog.set("content",dojo.string.substitute(this._strings["eofDialogText"],{"0":this._strings["eofDialogTextFind"]}));
+dijit.popup.open({popup:this._promDialog,around:this._findButton.domNode});
+this._promDialogTimeout=setTimeout(dojo.hitch(this,function(){
+clearTimeout(this._promDialogTimeout);
+this._promDialogTimeout=null;
+dijit.popup.close(this._promDialog);
+}),3000);
+setTimeout(dojo.hitch(this,function(){
+this.editor.focus();
+}),0);
+}
+return _1a;
+}
+return false;
+},_replace:function(_1b){
+var _1c=false;
+var ed=this.editor;
+ed.focus();
+var txt=this._findField.get("value")||"";
+var _1d=this._replaceField.get("value")||"";
+if(txt){
+var _1e=this._caseSensitive.get("value");
+var _1f=this._backwards.get("value");
+var _20=dojo.withGlobal(ed.window,"getSelectedText",dijit._editor.selection,[null]);
+if(dojo.isMoz){
+txt=dojo.trim(txt);
+_20=dojo.trim(_20);
+}
+var _21=this._filterRegexp(txt,!_1e);
+if(_20&&_21.test(_20)){
+ed.execCommand("inserthtml",_1d);
+_1c=true;
+if(_1f){
+this._findText(_1d,_1e,_1f);
+dojo.withGlobal(ed.window,"collapse",dijit._editor.selection,[true]);
+}
+}
+if(!this._find(false)&&_1b){
+this._promDialog.set("content",dojo.string.substitute(this._strings["eofDialogText"],{"0":this._strings["eofDialogTextReplace"]}));
+dijit.popup.open({popup:this._promDialog,around:this._replaceButton.domNode});
+this._promDialogTimeout=setTimeout(dojo.hitch(this,function(){
+clearTimeout(this._promDialogTimeout);
+this._promDialogTimeout=null;
+dijit.popup.close(this._promDialog);
+}),3000);
+setTimeout(dojo.hitch(this,function(){
+this.editor.focus();
+}),0);
+}
+return _1c;
+}
+},_replaceAll:function(_22){
+var _23=0;
+var _24=this._backwards.get("value");
+if(_24){
+this.editor.placeCursorAtEnd();
+}else{
+this.editor.placeCursorAtStart();
+}
+if(this._replace(false)){
+_23++;
+}
+var _25=dojo.hitch(this,function(){
+if(this._replace(false)){
+_23++;
+setTimeout(_25,10);
+}else{
+if(_22){
+this._promDialog.set("content",dojo.string.substitute(this._strings["replaceDialogText"],{"0":""+_23}));
+dijit.popup.open({popup:this._promDialog,around:this._replaceAllButton.domNode});
+this._promDialogTimeout=setTimeout(dojo.hitch(this,function(){
+clearTimeout(this._promDialogTimeout);
+this._promDialogTimeout=null;
+dijit.popup.close(this._promDialog);
+}),3000);
+setTimeout(dojo.hitch(this,function(){
+this._findField.focus();
+this._findField.textBox.focusNode.select();
+}),0);
+}
+}
+});
+_25();
+},_findText:function(txt,_26,_27){
+var ed=this.editor;
+var win=ed.window;
+var _28=false;
+if(txt){
+if(win.find){
+_28=win.find(txt,_26,_27,false,false,false,false);
+}else{
+var doc=ed.document;
+if(doc.selection){
+this.editor.focus();
+var _29=doc.body.createTextRange();
+var _2a=doc.selection?doc.selection.createRange():null;
+if(_2a){
+if(_27){
+_29.setEndPoint("EndToStart",_2a);
+}else{
+_29.setEndPoint("StartToEnd",_2a);
+}
+}
+var _2b=_26?4:0;
+if(_27){
+_2b=_2b|1;
+}
+_28=_29.findText(txt,_29.text.length,_2b);
+if(_28){
+_29.select();
+}
+}
+}
+}
+return _28;
+},_filterRegexp:function(_2c,_2d){
+var rxp="";
+var c=null;
+for(var i=0;i<_2c.length;i++){
+c=_2c.charAt(i);
+switch(c){
+case "\\":
+rxp+=c;
+i++;
+rxp+=_2c.charAt(i);
+break;
+case "$":
+case "^":
+case "/":
+case "+":
+case ".":
+case "|":
+case "(":
+case ")":
+case "{":
+case "}":
+case "[":
+case "]":
+rxp+="\\";
+default:
+rxp+=c;
+}
+}
+rxp="^"+rxp+"$";
+if(_2d){
+return new RegExp(rxp,"mi");
+}else{
+return new RegExp(rxp,"m");
+}
+},destroy:function(){
+this.inherited(arguments);
+if(this._promDialogTimeout){
+clearTimeout(this._promDialogTimeout);
+this._promDialogTimeout=null;
+dijit.popup.close(this._promDialog);
+}
+if(this._frToolbar){
+this._frToolbar.destroyRecursive();
+this._frToolbar=null;
+}
+if(this._promDialog){
+this._promDialog.destroyRecursive();
+this._promDialog=null;
+}
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _2e=o.args.name.toLowerCase();
+if(_2e==="findreplace"){
+o.plugin=new dojox.editor.plugins.FindReplace({});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/plugins/ToolbarLineBreak.js
===================================================================
--- trunk/web/dojo/dojox/editor/plugins/ToolbarLineBreak.js	(revision 0)
+++ trunk/web/dojo/dojox/editor/plugins/ToolbarLineBreak.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.editor.plugins.ToolbarLineBreak"]){
+dojo._hasResource["dojox.editor.plugins.ToolbarLineBreak"]=true;
+dojo.provide("dojox.editor.plugins.ToolbarLineBreak");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._editor._Plugin");
+dojo.declare("dojox.editor.plugins._ToolbarLineBreak",[dijit._Widget,dijit._Templated],{templateString:"<span class='dijit dijitReset'><br></span>",postCreate:function(){
+dojo.setSelectable(this.domNode,false);
+},isFocusable:function(){
+return false;
+}});
+dojo.subscribe(dijit._scopeName+".Editor.getPlugin",null,function(o){
+if(o.plugin){
+return;
+}
+var _1=o.args.name.toLowerCase();
+if(_1==="||"||_1==="toolbarlinebreak"){
+o.plugin=new dijit._editor._Plugin({button:new dojox.editor.plugins._ToolbarLineBreak(),setEditor:function(_2){
+this.editor=_2;
+}});
+}
+});
+}
Index: trunk/web/dojo/dojox/editor/README
===================================================================
--- trunk/web/dojo/dojox/editor/README	(revision 0)
+++ trunk/web/dojo/dojox/editor/README	(revision 9)
@@ -0,0 +1,296 @@
+-------------------------------------------------------------------------------
+dojox.editor
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 9/14/2009
+-------------------------------------------------------------------------------
+Project state:
+experimental, beta, stable
+-------------------------------------------------------------------------------
+Credits
+	Mike Wilcox 	 - Author
+	Jared Jurkiewicz - Author (PrettyPrint, PageBreak, ShowBlockNodes, 
+		Preview, Save, ToolbarLineBreak, InsertEntity, 
+		NormalizeIndentOutdent, Breadcrumb, FindReplace, 
+		CollapsibleToolbar, Blockquote, PasteFromWord, InsertAnchor,
+		TextColor, NormalizeStyle, StatusBar)
+	Dustin Machi 	 - Technical Assistance
+	David Schwartz and Gu Yi He (IBM) - Contributed enhancements to the
+		look and feel of FindReplace, as well as behavioral
+		improvements.
+-------------------------------------------------------------------------------
+Project description
+
+Space for extensions and additional plugins for dijit.Editor.  The project 
+currently contains the following plugins:
+
+dojox.editor.plugins.TablePlugins:
+	Status: Experimental.
+	The Table Plugins provide a mechanism for editing tables withing the
+	dijit.Editor.  This plugin is experimental and does not work correctly
+	in all dojo supported browsers.
+
+dojox.editor.plugins.UploadImage:
+	Status: Experimental.
+	The UploadImage plugin makes use of the dojox upload widgets to provide
+	a mechanism to upload images to your server for use in the editor.
+
+dojox.editor.plugins.PrettyPrint:
+	Status: Supported (stable).
+	The PrettyPrint plugin provides a mechanism by which the output from
+	editor.getValue()/editor.attr("value") is nicely formatted.  Optional
+	format parameters are how many spaces to indent by (default is tab),
+	the maximum text line length (not including indent), and what 
+	characters in text strings should be encoded to their &<enc>; 
+	representation.
+
+dojox.editor.plugins.PageBreak:
+	Status: Supported (stable).
+	A simple plugin that allows you to insert 'page breaks' into the doc
+	being edited.  These page break styles will then cause the document 
+	to break to another page when printed.
+
+dojox.editor.plugins.ShowBlockNodes:
+	Status: Supported (stable).
+	A simple plugin that allows you to toggle on and off a CSS 'view' of
+	how the page is laid out in terms of the block nodes used for its
+	formatting.
+
+dojox.editor.plugins.Save:
+	Status: Supported (beta).
+	A simple plugin that allows you to POST the content of the editor back
+	to a URL.
+
+dojox.editor.plugins.Preview:
+	Status: Supported (beta).
+	A simple plugin that allows you to display the content of the editor
+	in a new window and apply a set of styles to it so you can see how
+	content will look with various styles applied.  It is likely this
+	plugin will still evolve a bit.
+
+dojox.editor.plugins.ToolbarLineBreak:
+	Status: Supported (stable).
+	An extremely simple plugin that allows you to 'linebreak' the dijit toolbar so that really long 
+	toolbars for editor (lots of plugins enabled), can be broken up into multiple rows.
+
+dojox.editor.plugins.InsertEntity:
+	Status: Experimental (unsupported).
+	A plugin that enables the ability to insert HTML/XML entity characters
+	into a page.  These are often called 'symbols'.  The set it provides are the
+	basic latin (8859) set and a portion of greek symbols common to mathematics.
+	It has been marked experimental as it is likely this plugin will evolve a bit.
+
+dojox.editor.plugins.NormalizeIndentOutdent:
+	Status: Experimental (unsupported).
+	A plugin that normalizes the behavior of indent/outdent to use margin styles instead
+	of <blockquote> tags.  Also fixes indent/outdent of lists to work properly.  This is new
+	and has been tested, but not extensively.  Therefore it is currently classed as experimental.
+
+dojox.editor.plugins.Breadcrumb:
+	Status: Experimental (unsupported).
+	A plugin that adds a breadcrumb toolbar to the bottom of the editor.  Useful for seeing
+	where you aren and what operations you can perform.  This is new and has been tested, but not 
+	extensively.  Therefore it is currently classed as experimental.
+
+dojox.editor.plugins.FindReplace:
+	Status: Experimental (unsupported).
+	A plugin that adds a togglable Find/Replace toolbar to the editor.  Useful for searching
+	and replacing text strings in the editor content.  Only works on FF, IE, and WebKit.  No Opera
+	support.  This is new and has been tested, but not extensively.  Therefore it is currently 
+	classed as experimental.
+
+dojox.editor.plugins.CollapsibleToolbar:
+	Status: Supported (Stable).
+	A plugin that modified the header node of the editor so that it is 'collapsible'.  Meaning that
+	it can be closed (reduced), and reopened.  Useful for increasing editor real-estate.
+
+dojox.editor.plugins.Blockquote:
+	Status: Supported (Stable).
+	A plugin that puts a button on the toolbar that allows users to select text for a semantic 
+	'blockquote' tag-wrap action.  It toggles on and off during state changes to determine if
+	the current section is contained within a blockquote.
+
+dojox.editor.plugins.PasteFromWord:
+	Status: Beta (unsupported).
+	A plugin that puts a button that opens a dialog to paste in content from Word and similar
+	programs like wordpad.  It will then filter out extraneous and bad html from the content
+	before injecting it into the RTE.   Experimental as the filter list may not be complete yet.
+	Feedback is welcome and appreciated.  Filters will be updated based on it.
+
+dojox.editor.plugins.InsertAnchor:
+	Status: Stable (supported).
+	A plugin that allows anchor points to be inserted into the document being edited.
+	The anchors are styled in the doc to make them easily visible/editable in the document.
+
+dojox.editor.plugins.TextColor:
+	Status: Experimental (unsupported).
+	A plugin that makes use of the dojox.widget.ColorPicker widget in lieu of the
+	dijit.ColorPalette.  
+
+dojox.editor.plugins.NormalizeStyle:
+	Status: Experimental (unsupported).
+	A plugin that tries to normalize the output from the editor as either CSS styled or semantic (<b>, <i>, etc)
+	style.
+
+dojox.editor.plugins.StatusBar:
+	Status: Experimental (unsupported).
+	A plugin that adds a status bar and an optional resize handle to the footer of the editor.
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+dijit
+dojox.form
+dojox.html.format
+dojox.widget.ColorPicker
+dojox.layout.ResizeHandle
+
+-------------------------------------------------------------------------------
+Documentation
+
+The plugins directory contains extensions which work with dijit.Editor.
+
+See also:
+	http://docs.dojocampus.org/dojox/editor/plugins/TablePlugins
+	http://docs.dojocampus.org/dojox/editor/plugins/PrettyPrint
+	http://docs.dojocampus.org/dojox/editor/plugins/PageBreak
+	http://docs.dojocampus.org/dojox/editor/plugins/ShowBlockNodes
+	http://docs.dojocampus.org/dojox/editor/plugins/Preview
+	http://docs.dojocampus.org/dojox/editor/plugins/Save
+	http://docs.dojocampus.org/dojox/editor/plugins/ToolbarLineBreak
+	http://docs.dojocampus.org/dojox/editor/plugins/InsertEntity
+	http://docs.dojocampus.org/dojox/editor/plugins/NormalizeIndentOutdent
+	http://docs.dojocampus.org/dojox/editor/plugins/Breadcrumb
+        http://docs.dojocampus.org/dojox/editor/plugins/FindReplace
+        http://docs.dojocampus.org/dojox/editor/plugins/CollapsibleToolbar
+	http://docs.dojocampus.org/dojox/editor/plugins/Blockquote
+	http://docs.dojocampus.org/dojox/editor/plugins/PasteFromWord
+	http://docs.dojocampus.org/dojox/editor/plugins/InsertAnchor       
+	http://docs.dojocampus.org/dojox/editor/plugins/TextColor
+	http://docs.dojocampus.org/dojox/editor/plugins/NormalizeStyle
+	http://docs.dojocampus.org/dojox/editor/plugins/StatusBar 
+
+-------------------------------------------------------------------------------
+Plugin Installation instructions
+
+Get dojo and dijit from svn. Include the Editor and plugins in your page:
+
+dojo.require("dijit.Editor");
+
+For the TablePlugins:
+	dojo.require("dojox.editor.plugins.TablePlugins");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/editorPlugins.css" type="text/css" rel="stylesheet" />
+
+For the UploadImage plugin:
+	dojo.require("dojox.editor.plugins.UploadImage");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/editorPlugins.css" type="text/css" rel="stylesheet" />
+	<link href="[path]dojox/form/resources/FileInput.css" type="text/css" rel="stylesheet" />
+
+For the PrettyPrint plugin:
+	dojo.require("dojox.editor.plugins.PrettyPrint");
+	and CSS:
+	No CSS required.
+
+For the PageBreak plugin:
+	dojo.require("dojox.editor.plugins.PageBreak");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/PageBreak.css" type="text/css" rel="stylesheet" />
+
+For the ShowBlockNodes plugin:
+	dojo.require("dojox.editor.plugins.ShowBockNodes");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/ShowBlockNodes.css" type="text/css" rel="stylesheet" />
+
+For the Preview plugin:
+	dojo.require("dojox.editor.plugins.Preview");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/Preview.css" type="text/css" rel="stylesheet" />
+
+For the Save plugin:
+	dojo.require("dojox.editor.plugins.Save");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/Save.css" type="text/css" rel="stylesheet" />
+
+For the ToolbarLineBreak plugin:
+	dojo.require("dojox.editor.plugins.ToolbarLineBreak");
+	and CSS:
+	No CSS required.
+
+For the InsertEntity plugin:
+	dojo.require("dojox.editor.plugins.InsertEntity");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/InsertEntity.css" type="text/css" rel="stylesheet" />
+
+For the NormalizeIndentOutdent plugin:
+	dojo.require("dojox.editor.plugins.NormalizeIndentOutdent");
+	and CSS:
+	No CSS required.
+
+For the Breadcrumb plugin:
+	dojo.require("dojox.editor.plugins.Breadcrumb");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/Breadcrumb.css" type="text/css" rel="stylesheet" />
+
+For the FindReplace plugin:
+	dojo.require("dojox.editor.plugins.FindReplace");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/FindReplace.css" type="text/css" rel="stylesheet" />
+
+For the CollapsibleToolbar plugin:
+	dojo.require("dojox.editor.plugins.CollapsibleToolbar");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/CollapsibleToolbar.css" type="text/css" rel="stylesheet" />
+
+For the Blockquote plugin:
+	dojo.require("dojox.editor.plugins.Blockquote");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/Blockquote.css" type="text/css" rel="stylesheet" />
+
+For the PasteFromWord plugin:
+	dojo.require("dojox.editor.plugins.PasteFromWord");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/PasteFromWord.css" type="text/css" rel="stylesheet" />
+
+For the InsertAnchor plugin:
+        dojo.require("dojox.editor.plugins.InsertAnchor");
+        and CSS:
+        <link href="[path]dojox/editor/plugins/resources/css/InsertAnchor.css" type="text/css" rel="stylesheet" />
+
+For the TextColor plugin:
+	dojo.require("dojox.editor.plugins.TextColor");
+	and CSS:
+	<link href="[path]dojox/editor/plugins/resources/css/TextColor.css" type="text/css" rel="stylesheet" />
+
+For the NormalizeStyle plugin:
+	dojo.require("dojox.editor.plugins.NormalizeStyle");
+	and CSS:
+	No CSS required.
+
+For the StatusBar plugin:
+        dojo.require("dojox.editor.plugins.StatusBar");
+        and CSS:
+        <link href="[path]dojox/editor/plugins/resources/css/StatusBar.css" type="text/css" rel="stylesheet" />
+
+See tests for examples:
+	dojox/editor/tests/editorTablePlugs.html
+	dojox/editor/tests/editorUploadPlug.html
+	dojox/editor/tests/editorPrettyPrint.html
+	dojox/editor/tests/editorPageBreak.html
+	dojox/editor/tests/editorShowBlockNodes.html
+	dojox/editor/tests/editorPreview.html
+	dojox/editor/tests/editorSave.html
+	dojox/editor/tests/editorToolbarLineBreak.html
+	dojox/editor/tests/editorInsertEntity.html
+	dojox/editor/tests/editorNormalizeIndentOutdent.html
+	dojox/editor/tests/editorBreadcrumb.html
+	dojox/editor/tests/editorFindReplace.html
+	dojox/editor/tests/editorCollapsibleToolbar.html
+	dojox/editor/tests/editorBlockquote.html
+	dojox/editor/tests/editorPasteFromWord.html
+	dojox/editor/tests/editorInsertAnchor.html
+	dojox/editor/tests/editorTextColor.html
+	dojox/editor/tests/editorNormalizeStyle.html
+	dojox/editor/tests/editorStatusBar.html
+	dojox/editor/tests/testPluginsAll.html
Index: trunk/web/dojo/dojox/jsonPath/README
===================================================================
--- trunk/web/dojo/dojox/jsonPath/README	(revision 0)
+++ trunk/web/dojo/dojox/jsonPath/README	(revision 9)
@@ -0,0 +1,126 @@
+-------------------------------------------------------------------------------
+dojox.jsonPath
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 11/14/2007
+-------------------------------------------------------------------------------
+Project state: beta
+-------------------------------------------------------------------------------
+Project authors
+	Dustin Machi
+	Kris Zyp
+-------------------------------------------------------------------------------
+Project description
+
+jsonPath is a query system similar in idea to xpath, but for use against
+javascript objects.  This code is a port of the jsonPath code at 
+http://code.google.com/p/jsonpath/.  It was contributed under CLA by Stefan
+Goessner.  Thanks Stefan! 
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader).
+-------------------------------------------------------------------------------
+Documentation
+
+Usage:
+
+var matches = dojox.jsonPath.query(objectToQuery, jsonPathExpresson)
+
+Expressions:
+
+	$			The Root Object
+	@			The current object/element
+	. or []			The child operator
+	..			Recursive descent
+	*			all objects
+	[]			subscript operator
+	[,]			Union operator
+	[start:end:step]	array slice operator
+	?()			applies a filter/script expression
+	()			script expresions
+
+	some examples:
+
+	Given the following test data set:
+
+	var json = 
+                  { "store": {
+                        "book": [ 
+                          { "category": "reference",
+                                "author": "Nigel Rees",
+                                "title": "Sayings of the Century",
+                                "price": 8.95
+                          },
+                          { "category": "fiction",
+                                "author": "Evelyn Waugh",
+                                "title": "Sword of Honour",
+                                "price": 12.99
+                          },
+                          { "category": "fiction",
+                                "author": "Herman Melville",
+                                "title": "Moby Dick",
+                                "isbn": "0-553-21311-3",
+                                "price": 8.99
+                          },
+                          { "category": "fiction",
+                                "author": "J. R. R. Tolkien",
+                                "title": "The Lord of the Rings",
+                                "isbn": "0-395-19395-8",
+                                "price": 22.99
+                          }
+                        ],
+                        "bicycle": {
+                          "color": "red",
+                          "price": 19.95
+                        }
+                  }
+                };
+
+	Here are some example queries and their output:
+
+   	$.store.book[*].author 
+	["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
+
+	$..author
+	["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
+
+	$.store.*
+	[[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],{"color":"red","price":19.95}]
+
+	$.store..price
+	[8.95,12.99,8.99,22.99,19.95]
+
+	$..book[(@.length-1)]
+	[{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
+
+	$..book[-1]
+	[{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
+
+	$..book[0,1]
+	[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
+	
+	$..book[:2]
+	[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
+
+	$..book[?(@.isbn)]
+	[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
+
+	$..book[?(@.price<10)]
+	[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
+
+	$..*
+	[{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}},[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],{"color":"red","price":19.95},{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},"reference","Nigel Rees","Sayings of the Century",8.95,"fiction","Evelyn Waugh","Sword of Honour",12.99,"fiction","Herman Melville","Moby Dick","0-553-21311-3",8.99,"fiction","J. R. R. Tolkien","The Lord of the Rings","0-395-19395-8",22.99,"red",19.95]
+
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/jsonPath
+
+Install into the following directory structure:
+/dojox/jsonPath/
+
+...which should be at the same level as your Dojo checkout.
Index: trunk/web/dojo/dojox/jsonPath/query.js
===================================================================
--- trunk/web/dojo/dojox/jsonPath/query.js	(revision 0)
+++ trunk/web/dojo/dojox/jsonPath/query.js	(revision 9)
@@ -0,0 +1,204 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.jsonPath.query"]){
+dojo._hasResource["dojox.jsonPath.query"]=true;
+dojo.provide("dojox.jsonPath.query");
+dojox.jsonPath.query=function(_1,_2,_3){
+var re=dojox.jsonPath._regularExpressions;
+if(!_3){
+_3={};
+}
+var _4=[];
+function _5(i){
+return _4[i];
+};
+var _6;
+if(_3.resultType=="PATH"&&_3.evalType=="RESULT"){
+throw Error("RESULT based evaluation not supported with PATH based results");
+}
+var P={resultType:_3.resultType||"VALUE",normalize:function(_7){
+var _8=[];
+_7=_7.replace(/'([^']|'')*'/g,function(t){
+return "_str("+(_4.push(eval(t))-1)+")";
+});
+var ll=-1;
+while(ll!=_8.length){
+ll=_8.length;
+_7=_7.replace(/(\??\([^\(\)]*\))/g,function($0){
+return "#"+(_8.push($0)-1);
+});
+}
+_7=_7.replace(/[\['](#[0-9]+)[\]']/g,"[$1]").replace(/'?\.'?|\['?/g,";").replace(/;;;|;;/g,";..;").replace(/;$|'?\]|'$/g,"");
+ll=-1;
+while(ll!=_7){
+ll=_7;
+_7=_7.replace(/#([0-9]+)/g,function($0,$1){
+return _8[$1];
+});
+}
+return _7.split(";");
+},asPaths:function(_9){
+for(var j=0;j<_9.length;j++){
+var p="$";
+var x=_9[j];
+for(var i=1,n=x.length;i<n;i++){
+p+=/^[0-9*]+$/.test(x[i])?("["+x[i]+"]"):("['"+x[i]+"']");
+}
+_9[j]=p;
+}
+return _9;
+},exec:function(_a,_b,rb){
+var _c=["$"];
+var _d=rb?_b:[_b];
+var _e=[_c];
+function _f(v,p,def){
+if(v&&v.hasOwnProperty(p)&&P.resultType!="VALUE"){
+_e.push(_c.concat([p]));
+}
+if(def){
+_d=v[p];
+}else{
+if(v&&v.hasOwnProperty(p)){
+_d.push(v[p]);
+}
+}
+};
+function _10(v){
+_d.push(v);
+_e.push(_c);
+P.walk(v,function(i){
+if(typeof v[i]==="object"){
+var _11=_c;
+_c=_c.concat(i);
+_10(v[i]);
+_c=_11;
+}
+});
+};
+function _12(loc,val){
+if(val instanceof Array){
+var len=val.length,_13=0,end=len,_14=1;
+loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g,function($0,$1,$2,$3){
+_13=parseInt($1||_13);
+end=parseInt($2||end);
+_14=parseInt($3||_14);
+});
+_13=(_13<0)?Math.max(0,_13+len):Math.min(len,_13);
+end=(end<0)?Math.max(0,end+len):Math.min(len,end);
+for(var i=_13;i<end;i+=_14){
+_f(val,i);
+}
+}
+};
+function _15(str){
+var i=loc.match(/^_str\(([0-9]+)\)$/);
+return i?_4[i[1]]:str;
+};
+function _16(val){
+if(/^\(.*?\)$/.test(loc)){
+_f(val,P.eval(loc,val),rb);
+}else{
+if(loc==="*"){
+P.walk(val,rb&&val instanceof Array?function(i){
+P.walk(val[i],function(j){
+_f(val[i],j);
+});
+}:function(i){
+_f(val,i);
+});
+}else{
+if(loc===".."){
+_10(val);
+}else{
+if(/,/.test(loc)){
+for(var s=loc.split(/'?,'?/),i=0,n=s.length;i<n;i++){
+_f(val,_15(s[i]));
+}
+}else{
+if(/^\?\(.*?\)$/.test(loc)){
+P.walk(val,function(i){
+if(P.eval(loc.replace(/^\?\((.*?)\)$/,"$1"),val[i])){
+_f(val,i);
+}
+});
+}else{
+if(/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)){
+_12(loc,val);
+}else{
+loc=_15(loc);
+if(rb&&val instanceof Array&&!/^[0-9*]+$/.test(loc)){
+P.walk(val,function(i){
+_f(val[i],loc);
+});
+}else{
+_f(val,loc,rb);
+}
+}
+}
+}
+}
+}
+}
+};
+while(_a.length){
+var loc=_a.shift();
+if((_b=_d)===null||_b===undefined){
+return _b;
+}
+_d=[];
+var _17=_e;
+_e=[];
+if(rb){
+_16(_b);
+}else{
+P.walk(_b,function(i){
+_c=_17[i]||_c;
+_16(_b[i]);
+});
+}
+}
+if(P.resultType=="BOTH"){
+_e=P.asPaths(_e);
+var _18=[];
+for(var i=0;i<_e.length;i++){
+_18.push({path:_e[i],value:_d[i]});
+}
+return _18;
+}
+return P.resultType=="PATH"?P.asPaths(_e):_d;
+},walk:function(val,f){
+if(val instanceof Array){
+for(var i=0,n=val.length;i<n;i++){
+if(i in val){
+f(i);
+}
+}
+}else{
+if(typeof val==="object"){
+for(var m in val){
+if(val.hasOwnProperty(m)){
+f(m);
+}
+}
+}
+}
+},eval:function(x,_19){
+try{
+return $&&_19&&eval(x.replace(/@/g,"_v"));
+}
+catch(e){
+throw new SyntaxError("jsonPath: "+e.message+": "+x.replace(/@/g,"_v").replace(/\^/g,"_a"));
+}
+}};
+var $=_1;
+if(_2&&_1){
+return P.exec(P.normalize(_2).slice(1),_1,_3.evalType=="RESULT");
+}
+return false;
+};
+}
Index: trunk/web/dojo/dojox/timing/Sequence.js
===================================================================
--- trunk/web/dojo/dojox/timing/Sequence.js	(revision 0)
+++ trunk/web/dojo/dojox/timing/Sequence.js	(revision 9)
@@ -0,0 +1,87 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.timing.Sequence"]){
+dojo._hasResource["dojox.timing.Sequence"]=true;
+dojo.provide("dojox.timing.Sequence");
+dojo.experimental("dojox.timing.Sequence");
+dojo.declare("dojox.timing.Sequence",null,{_goOnPause:0,_running:false,constructor:function(){
+this._defsResolved=[];
+},go:function(_1,_2){
+this._running=true;
+dojo.forEach(_1,function(_3){
+if(_3.repeat>1){
+var _4=_3.repeat;
+for(var j=0;j<_4;j++){
+_3.repeat=1;
+this._defsResolved.push(_3);
+}
+}else{
+this._defsResolved.push(_3);
+}
+},this);
+var _5=_1[_1.length-1];
+if(_2){
+this._defsResolved.push({func:_2});
+}
+this._defsResolved.push({func:[this.stop,this]});
+this._curId=0;
+this._go();
+},_go:function(){
+if(!this._running){
+return;
+}
+var _6=this._defsResolved[this._curId];
+this._curId+=1;
+function _7(_8){
+var _9=null;
+if(dojo.isArray(_8)){
+if(_8.length>2){
+_9=_8[0].apply(_8[1],_8.slice(2));
+}else{
+_9=_8[0].apply(_8[1]);
+}
+}else{
+_9=_8();
+}
+return _9;
+};
+if(this._curId>=this._defsResolved.length){
+_7(_6.func);
+return;
+}
+if(_6.pauseAfter){
+if(_7(_6.func)!==false){
+setTimeout(dojo.hitch(this,"_go"),_6.pauseAfter);
+}else{
+this._goOnPause=_6.pauseAfter;
+}
+}else{
+if(_6.pauseBefore){
+var x=dojo.hitch(this,function(){
+if(_7(_6.func)!==false){
+this._go();
+}
+});
+setTimeout(x,_6.pauseBefore);
+}else{
+if(_7(_6.func)!==false){
+this._go();
+}
+}
+}
+},goOn:function(){
+if(this._goOnPause){
+setTimeout(dojo.hitch(this,"_go"),this._goOnPause);
+this._goOnPause=0;
+}else{
+this._go();
+}
+},stop:function(){
+this._running=false;
+}});
+}
Index: trunk/web/dojo/dojox/timing/_base.js
===================================================================
--- trunk/web/dojo/dojox/timing/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/timing/_base.js	(revision 9)
@@ -0,0 +1,41 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.timing._base"]){
+dojo._hasResource["dojox.timing._base"]=true;
+dojo.provide("dojox.timing._base");
+dojo.experimental("dojox.timing");
+dojox.timing.Timer=function(_1){
+this.timer=null;
+this.isRunning=false;
+this.interval=_1;
+this.onStart=null;
+this.onStop=null;
+};
+dojo.extend(dojox.timing.Timer,{onTick:function(){
+},setInterval:function(_2){
+if(this.isRunning){
+window.clearInterval(this.timer);
+}
+this.interval=_2;
+if(this.isRunning){
+this.timer=window.setInterval(dojo.hitch(this,"onTick"),this.interval);
+}
+},start:function(){
+if(typeof this.onStart=="function"){
+this.onStart();
+}
+this.isRunning=true;
+this.timer=window.setInterval(dojo.hitch(this,"onTick"),this.interval);
+},stop:function(){
+if(typeof this.onStop=="function"){
+this.onStop();
+}
+this.isRunning=false;
+window.clearInterval(this.timer);
+}});
+}
Index: trunk/web/dojo/dojox/timing/doLater.js
===================================================================
--- trunk/web/dojo/dojox/timing/doLater.js	(revision 0)
+++ trunk/web/dojo/dojox/timing/doLater.js	(revision 9)
@@ -0,0 +1,24 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.timing.doLater"]){
+dojo._hasResource["dojox.timing.doLater"]=true;
+dojo.provide("dojox.timing.doLater");
+dojo.experimental("dojox.timing.doLater");
+dojox.timing.doLater=function(_1,_2,_3){
+if(_1){
+return false;
+}
+var _4=dojox.timing.doLater.caller,_5=dojox.timing.doLater.caller.arguments;
+_3=_3||100;
+_2=_2||dojo.global;
+setTimeout(function(){
+_4.apply(_2,_5);
+},_3);
+return true;
+};
+}
Index: trunk/web/dojo/dojox/timing/ThreadPool.js
===================================================================
--- trunk/web/dojo/dojox/timing/ThreadPool.js	(revision 0)
+++ trunk/web/dojo/dojox/timing/ThreadPool.js	(revision 9)
@@ -0,0 +1,142 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.timing.ThreadPool"]){
+dojo._hasResource["dojox.timing.ThreadPool"]=true;
+dojo.provide("dojox.timing.ThreadPool");
+dojo.require("dojox.timing");
+dojo.experimental("dojox.timing.ThreadPool");
+(function(){
+var t=dojox.timing;
+t.threadStates={UNSTARTED:"unstarted",STOPPED:"stopped",PENDING:"pending",RUNNING:"running",SUSPENDED:"suspended",WAITING:"waiting",COMPLETE:"complete",ERROR:"error"};
+t.threadPriorities={LOWEST:1,BELOWNORMAL:2,NORMAL:3,ABOVENORMAL:4,HIGHEST:5};
+t.Thread=function(fn,_1){
+var _2=this;
+this.state=t.threadStates.UNSTARTED;
+this.priority=_1||t.threadPriorities.NORMAL;
+this.lastError=null;
+this.func=fn;
+this.invoke=function(){
+_2.state=t.threadStates.RUNNING;
+try{
+fn(this);
+_2.state=t.threadStates.COMPLETE;
+}
+catch(e){
+_2.lastError=e;
+_2.state=t.threadStates.ERROR;
+}
+};
+};
+t.ThreadPool=new (function(_3,_4){
+var _5=this;
+var _6=_3;
+var _7=_6;
+var _8=_4;
+var _9=Math.floor((_8/2)/_6);
+var _a=[];
+var _b=new Array(_6+1);
+var _c=new dojox.timing.Timer();
+var _d=function(){
+var _e=_b[0]={};
+for(var i=0;i<_b.length;i++){
+window.clearTimeout(_b[i]);
+var _f=_a.shift();
+if(typeof (_f)=="undefined"){
+break;
+}
+_e["thread-"+i]=_f;
+_b[i]=window.setTimeout(_f.invoke,(_9*i));
+}
+_7=_6-(i-1);
+};
+this.getMaxThreads=function(){
+return _6;
+};
+this.getAvailableThreads=function(){
+return _7;
+};
+this.getTickInterval=function(){
+return _8;
+};
+this.queueUserWorkItem=function(fn){
+var _10=fn;
+if(_10 instanceof Function){
+_10=new t.Thread(_10);
+}
+var idx=_a.length;
+for(var i=0;i<_a.length;i++){
+if(_a[i].priority<_10.priority){
+idx=i;
+break;
+}
+}
+if(idx<_a.length){
+_a.splice(idx,0,_10);
+}else{
+_a.push(_10);
+}
+return true;
+};
+this.removeQueuedUserWorkItem=function(_11){
+if(_11 instanceof Function){
+var idx=-1;
+for(var i=0;i<_a.length;i++){
+if(_a[i].func==_11){
+idx=i;
+break;
+}
+}
+if(idx>-1){
+_a.splice(idx,1);
+return true;
+}
+return false;
+}
+var idx=-1;
+for(var i=0;i<_a.length;i++){
+if(_a[i]==_11){
+idx=i;
+break;
+}
+}
+if(idx>-1){
+_a.splice(idx,1);
+return true;
+}
+return false;
+};
+this.start=function(){
+_c.start();
+};
+this.stop=function(){
+_c.stop();
+};
+this.abort=function(){
+this.stop();
+for(var i=1;i<_b.length;i++){
+if(_b[i]){
+window.clearTimeout(_b[i]);
+}
+}
+for(var _12 in _b[0]){
+this.queueUserWorkItem(_12);
+}
+_b[0]={};
+};
+this.reset=function(){
+this.abort();
+_a=[];
+};
+this.sleep=function(_13){
+_c.stop();
+window.setTimeout(_c.start,_13);
+};
+_c.onTick=_5.invoke;
+})(16,5000);
+})();
+}
Index: trunk/web/dojo/dojox/timing/README
===================================================================
--- trunk/web/dojo/dojox/timing/README	(revision 0)
+++ trunk/web/dojo/dojox/timing/README	(revision 9)
@@ -0,0 +1,63 @@
+-------------------------------------------------------------------------------
+DojoX Timing
+-------------------------------------------------------------------------------
+Version 0.1.0
+Release date: 08/08/2007
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Tom Trenka (ttrenka AT gmail.com): original Timer, Streamer, Thread and ThreadPool
+	Wolfram Kriesing (http://wolfram.kriesing.de/blog/): Sequence
+	Jonathan Bond-Caron (jbondc AT gmail.com): port of Timer and Streamer
+	Pete Higgins (phiggins AT gmail.com): port of Sequence
+	Mike Wilcox (anm8tr AT yahoo.com): dojo.doLater
+-------------------------------------------------------------------------------
+Project description
+
+DojoX Timing is a project that deals with any kind of advanced use of timing
+constructs.  The central object, dojox.timing.Timer (included by default), is
+a simple object that fires a callback on each tick of the timer, as well as 
+when starting or stopping it.  The interval of each tick is settable, but the
+default is 1 second--useful for driving something such as a clock.
+
+dojox.timing.Streamer is an object designed to facilitate streaming/buffer-type
+scenarios; it takes an input and an output function, will execute the output
+function onTick, and run the input function when the internal buffer gets 
+beneath a certain threshold of items.  This can be useful for something timed--
+such as updating a data plot at every N interval, and getting new data from
+a source when there's less than X data points in the internal buffer (think
+real-time data updating).
+
+dojox.timing.Sequencer is an object, similar to Streamer, that will allow you
+to set up a set of functions to be executed in a specific order, at specific
+intervals.
+
+The DojoX Timing ThreadPool is a port from the original implementation in the
+f(m) library.  It allows a user to feed a set of callback functions (wrapped
+in a Thread constructor) to a pool for background processing.
+
+dojo.doLater() provides a simple mechanism that checks a conditional before allowing
+your function to continue. If the conditional is false, the function is blocked and continually
+re-called, with arguments, until the conditional passes.
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX Timing only relies on the Dojo Base.
+-------------------------------------------------------------------------------
+Documentation
+
+TBD.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/timing.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/timing/*
+
+Install into the following directory structure:
+/dojox/timing.js
+/dojox/timing/
+
+...which should be at the same level as your Dojo checkout.
Index: trunk/web/dojo/dojox/timing/Streamer.js
===================================================================
--- trunk/web/dojo/dojox/timing/Streamer.js	(revision 0)
+++ trunk/web/dojo/dojox/timing/Streamer.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.timing.Streamer"]){
+dojo._hasResource["dojox.timing.Streamer"]=true;
+dojo.provide("dojox.timing.Streamer");
+dojo.require("dojox.timing._base");
+dojox.timing.Streamer=function(_1,_2,_3,_4,_5){
+var _6=this;
+var _7=[];
+this.interval=_3||1000;
+this.minimumSize=_4||10;
+this.inputFunction=_1||function(q){
+};
+this.outputFunction=_2||function(_8){
+};
+var _9=new dojox.timing.Timer(this.interval);
+var _a=function(){
+_6.onTick(_6);
+if(_7.length<_6.minimumSize){
+_6.inputFunction(_7);
+}
+var _b=_7.shift();
+while(typeof (_b)=="undefined"&&_7.length>0){
+_b=_7.shift();
+}
+if(typeof (_b)=="undefined"){
+_6.stop();
+return;
+}
+_6.outputFunction(_b);
+};
+this.setInterval=function(ms){
+this.interval=ms;
+_9.setInterval(ms);
+};
+this.onTick=function(_c){
+};
+this.start=function(){
+if(typeof (this.inputFunction)=="function"&&typeof (this.outputFunction)=="function"){
+_9.start();
+return;
+}
+throw new Error("You cannot start a Streamer without an input and an output function.");
+};
+this.onStart=function(){
+};
+this.stop=function(){
+_9.stop();
+};
+this.onStop=function(){
+};
+_9.onTick=this.tick;
+_9.onStart=this.onStart;
+_9.onStop=this.onStop;
+if(_5){
+_7.concat(_5);
+}
+};
+}
Index: trunk/web/dojo/dojox/fx.js
===================================================================
--- trunk/web/dojo/dojox/fx.js	(revision 0)
+++ trunk/web/dojo/dojox/fx.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.fx"]){
+dojo._hasResource["dojox.fx"]=true;
+dojo.provide("dojox.fx");
+dojo.require("dojox.fx._base");
+}
Index: trunk/web/dojo/dojox/help/README
===================================================================
--- trunk/web/dojo/dojox/help/README	(revision 0)
+++ trunk/web/dojo/dojox/help/README	(revision 9)
@@ -0,0 +1,35 @@
+-------------------------------------------------------------------------------
+dojox.help
+-------------------------------------------------------------------------------
+Version 0.0
+Release date: 3/13/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Neil Roberts (pottedmeat@dojotoolkit.org)
+	Wolfram Kriesing (wolfram@kriesing.de)
+-------------------------------------------------------------------------------
+Project description
+
+Provide functionality for quick access to available documentation while
+working in the browser.
+-------------------------------------------------------------------------------
+Dependencies:
+
+dojo
+dojox.rpc
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/help/*
+
+Install into the following directory structure:
+/dojox/help/
+
+...which should be at the same level as your Dojo checkout.
+
+And run: dojo.require("dojox.help.console") in your console
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/help/console.js
===================================================================
--- trunk/web/dojo/dojox/help/console.js	(revision 0)
+++ trunk/web/dojo/dojox/help/console.js	(revision 9)
@@ -0,0 +1,78 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.help.console"]){
+dojo._hasResource["dojox.help.console"]=true;
+dojo.provide("dojox.help.console");
+dojo.require("dojox.help._base");
+dojo.mixin(dojox.help,{_plainText:function(_1){
+return _1.replace(/(<[^>]*>|&[^;]{2,6};)/g,"");
+},_displayLocated:function(_2){
+var _3={};
+dojo.forEach(_2,function(_4){
+_3[_4[0]]=dojo.isMoz?{toString:function(){
+return "Click to view";
+},item:_4[1]}:_4[1];
+});
+},_displayHelp:function(_5,_6){
+if(_5){
+var _7="Help for: "+_6.name;
+var _8="";
+for(var i=0;i<_7.length;i++){
+_8+="=";
+}
+}else{
+if(!_6){
+}else{
+var _9=false;
+for(var _a in _6){
+var _b=_6[_a];
+if(_a=="returns"&&_6.type!="Function"&&_6.type!="Constructor"){
+continue;
+}
+if(_b&&(!dojo.isArray(_b)||_b.length)){
+_9=true;
+_b=dojo.isString(_b)?dojox.help._plainText(_b):_b;
+if(_a=="returns"){
+var _c=dojo.map(_b.types||[],"return item.title;").join("|");
+if(_b.summary){
+if(_c){
+_c+=": ";
+}
+_c+=dojox.help._plainText(_b.summary);
+}
+}else{
+if(_a=="parameters"){
+for(var j=0,_d;_d=_b[j];j++){
+var _e=dojo.map(_d.types,"return item.title").join("|");
+var _f="";
+if(_d.optional){
+_f+="Optional. ";
+}
+if(_d.repating){
+_f+="Repeating. ";
+}
+_f+=dojox.help._plainText(_d.summary);
+if(_f){
+_f="  - "+_f;
+for(var k=0;k<_d.name.length;k++){
+_f=" "+_f;
+}
+}
+}
+}else{
+}
+}
+}
+}
+if(!_9){
+}
+}
+}
+}});
+dojox.help.init();
+}
Index: trunk/web/dojo/dojox/help/_base.js
===================================================================
--- trunk/web/dojo/dojox/help/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/help/_base.js	(revision 9)
@@ -0,0 +1,387 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.help._base"]){
+dojo._hasResource["dojox.help._base"]=true;
+dojo.provide("dojox.help._base");
+dojo.require("dojox.rpc.Service");
+dojo.require("dojo.io.script");
+dojo.experimental("dojox.help");
+console.warn("Script causes side effects (on numbers, strings, and booleans). Call dojox.help.noConflict() if you plan on executing code.");
+dojox.help={locate:function(_1,_2,_3){
+_3=_3||20;
+var _4=[];
+var _5={};
+var _6;
+if(_2){
+if(!dojo.isArray(_2)){
+_2=[_2];
+}
+for(var i=0,_7;_7=_2[i];i++){
+_6=_7;
+if(dojo.isString(_7)){
+_7=dojo.getObject(_7);
+if(!_7){
+continue;
+}
+}else{
+if(dojo.isObject(_7)){
+_6=_7.__name__;
+}else{
+continue;
+}
+}
+_4.push(_7);
+if(_6){
+_6=_6.split(".")[0];
+if(!_5[_6]&&dojo.indexOf(dojox.help._namespaces,_6)==-1){
+dojox.help.refresh(_6);
+}
+_5[_6]=true;
+}
+}
+}
+if(!_4.length){
+_4.push({__name__:"window"});
+dojo.forEach(dojox.help._namespaces,function(_8){
+_5[_8]=true;
+});
+}
+var _9=_1.toLowerCase();
+var _a=[];
+out:
+for(var i=0,_7;_7=_4[i];i++){
+var _b=_7.__name__||"";
+var _c=dojo.some(_4,function(_d){
+_d=_d.__name__||"";
+return (_b.indexOf(_d+".")==0);
+});
+if(_b&&!_c){
+_6=_b.split(".")[0];
+var _e=[];
+if(_b=="window"){
+for(_6 in dojox.help._names){
+if(dojo.isArray(dojox.help._names[_6])){
+_e=_e.concat(dojox.help._names[_6]);
+}
+}
+}else{
+_e=dojox.help._names[_6];
+}
+for(var j=0,_f;_f=_e[j];j++){
+if((_b=="window"||_f.indexOf(_b+".")==0)&&_f.toLowerCase().indexOf(_9)!=-1){
+if(_f.slice(-10)==".prototype"){
+continue;
+}
+var obj=dojo.getObject(_f);
+if(obj){
+_a.push([_f,obj]);
+if(_a.length==_3){
+break out;
+}
+}
+}
+}
+}
+}
+dojox.help._displayLocated(_a);
+if(!dojo.isMoz){
+return "";
+}
+},refresh:function(_10,_11){
+if(arguments.length<2){
+_11=true;
+}
+dojox.help._recurse(_10,_11);
+},noConflict:function(_12){
+if(arguments.length){
+return dojox.help._noConflict(_12);
+}else{
+while(dojox.help._overrides.length){
+var _13=dojox.help._overrides.pop();
+var _14=_13[0];
+var key=_13[1];
+var _15=_14[key];
+_14[key]=dojox.help._noConflict(_15);
+}
+}
+},init:function(_16,_17){
+if(_16){
+dojox.help._namespaces.concat(_16);
+}
+dojo.addOnLoad(function(){
+dojo.require=(function(_18){
+return function(){
+dojox.help.noConflict();
+_18.apply(dojo,arguments);
+if(dojox.help._timer){
+clearTimeout(dojox.help._timer);
+}
+dojox.help._timer=setTimeout(function(){
+dojo.addOnLoad(function(){
+dojox.help.refresh();
+dojox.help._timer=false;
+});
+},500);
+};
+})(dojo.require);
+dojox.help._recurse();
+});
+},_noConflict:function(_19){
+if(_19 instanceof String){
+return _19.toString();
+}else{
+if(_19 instanceof Number){
+return +_19;
+}else{
+if(_19 instanceof Boolean){
+return (_19==true);
+}else{
+if(dojo.isObject(_19)){
+delete _19.__name__;
+delete _19.help;
+}
+}
+}
+}
+return _19;
+},_namespaces:["dojo","dojox","dijit","djConfig"],_rpc:new dojox.rpc.Service(dojo.moduleUrl("dojox.rpc.SMDLibrary","dojo-api.smd")),_attributes:["summary","type","returns","parameters"],_clean:function(_1a){
+var obj={};
+for(var i=0,_1b;_1b=dojox.help._attributes[i];i++){
+var _1c=_1a["__"+_1b+"__"];
+if(_1c){
+obj[_1b]=_1c;
+}
+}
+return obj;
+},_displayLocated:function(_1d){
+throw new Error("_displayLocated should be overridden in one of the dojox.help packages");
+},_displayHelp:function(_1e,obj){
+throw new Error("_displayHelp should be overridden in one of the dojox.help packages");
+},_addVersion:function(obj){
+if(obj.name){
+obj.version=[dojo.version.major,dojo.version.minor,dojo.version.patch].join(".");
+var _1f=obj.name.split(".");
+if(_1f[0]=="dojo"||_1f[0]=="dijit"||_1f[0]=="dojox"){
+obj.project=_1f[0];
+}
+}
+return obj;
+},_stripPrototype:function(_20){
+var _21=_20.replace(/\.prototype(\.|$)/g,".");
+var _22=_21;
+if(_21.slice(-1)=="."){
+_22=_21=_21.slice(0,-1);
+}else{
+_21=_20;
+}
+return [_22,_21];
+},_help:function(){
+var _23=this.__name__;
+var _24=dojox.help._stripPrototype(_23)[0];
+var _25=[];
+for(var i=0,_26;_26=dojox.help._attributes[i];i++){
+if(!this["__"+_26+"__"]){
+_25.push(_26);
+}
+}
+dojox.help._displayHelp(true,{name:this.__name__});
+if(!_25.length||this.__searched__){
+dojox.help._displayHelp(false,dojox.help._clean(this));
+}else{
+this.__searched__=true;
+dojox.help._rpc.get(dojox.help._addVersion({name:_24,exact:true,attributes:_25})).addCallback(this,function(_27){
+if(this.toString===dojox.help._toString){
+this.toString(_27);
+}
+if(_27&&_27.length){
+_27=_27[0];
+for(var i=0,_26;_26=dojox.help._attributes[i];i++){
+if(_27[_26]){
+this["__"+_26+"__"]=_27[_26];
+}
+}
+dojox.help._displayHelp(false,dojox.help._clean(this));
+}else{
+dojox.help._displayHelp(false,false);
+}
+});
+}
+if(!dojo.isMoz){
+return "";
+}
+},_parse:function(_28){
+delete this.__searching__;
+if(_28&&_28.length){
+var _29=_28[0].parameters;
+if(_29){
+var _2a=["function ",this.__name__,"("];
+this.__parameters__=_29;
+for(var i=0,_2b;_2b=_29[i];i++){
+if(i){
+_2a.push(", ");
+}
+_2a.push(_2b.name);
+if(_2b.types){
+var _2c=[];
+for(var j=0,_2d;_2d=_2b.types[j];j++){
+_2c.push(_2d.title);
+}
+if(_2c.length){
+_2a.push(": ");
+_2a.push(_2c.join("|"));
+}
+}
+if(_2b.repeating){
+_2a.push("...");
+}
+if(_2b.optional){
+_2a.push("?");
+}
+}
+_2a.push(")");
+this.__source__=this.__source__.replace(/function[^\(]*\([^\)]*\)/,_2a.join(""));
+}
+if(this.__output__){
+delete this.__output__;
+}
+}else{
+dojox.help._displayHelp(false,false);
+}
+},_toStrings:{},_toString:function(_2e){
+if(!this.__source__){
+return this.__name__;
+}
+var _2f=(!this.__parameters__);
+this.__parameters__=[];
+if(_2e){
+dojox.help._parse.call(this,_2e);
+}else{
+if(_2f){
+this.__searching__=true;
+dojox.help._toStrings[dojox.help._stripPrototype(this.__name__)[0]]=this;
+if(dojox.help._toStringTimer){
+clearTimeout(dojox.help._toStringTimer);
+}
+dojox.help._toStringTimer=setTimeout(function(){
+dojox.help.__toString();
+},50);
+}
+}
+if(!_2f||!this.__searching__){
+return this.__source__;
+}
+var _30="function Loading info for "+this.__name__+"... (watch console for result) {}";
+if(!dojo.isMoz){
+this.__output__=true;
+return _30;
+}
+return {toString:dojo.hitch(this,function(){
+this.__output__=true;
+return _30;
+})};
+},__toString:function(){
+if(dojox.help._toStringTimer){
+clearTimeout(dojox.help._toStringTimer);
+}
+var _31=[];
+dojox.help.noConflict(dojox.help._toStrings);
+for(var _32 in dojox.help._toStrings){
+_31.push(_32);
+}
+while(_31.length){
+dojox.help._rpc.batch(dojox.help._addVersion({names:_31.splice(-50,50),exact:true,attributes:["parameters"]})).addCallback(this,function(_33){
+for(var i=0,_34;_34=_33[i];i++){
+var fn=dojox.help._toStrings[_34.name];
+if(fn){
+dojox.help._parse.call(fn,[_34]);
+delete dojox.help._toStrings[_34.name];
+}
+}
+});
+}
+},_overrides:[],_recursions:[],_names:{},_recurse:function(_35,_36){
+if(arguments.length<2){
+_36=true;
+}
+var _37=[];
+if(_35&&dojo.isString(_35)){
+dojox.help.__recurse(dojo.getObject(_35),_35,_35,_37,_36);
+}else{
+for(var i=0,ns;ns=dojox.help._namespaces[i];i++){
+if(window[ns]){
+dojox.help._recursions.push([window[ns],ns,ns]);
+window[ns].__name__=ns;
+if(!window[ns].help){
+window[ns].help=dojox.help._help;
+}
+}
+}
+}
+while(dojox.help._recursions.length){
+var _38=dojox.help._recursions.shift();
+dojox.help.__recurse(_38[0],_38[1],_38[2],_37,_36);
+}
+for(var i=0,_39;_39=_37[i];i++){
+delete _39.__seen__;
+}
+},__recurse:function(_3a,_3b,_3c,_3d,_3e){
+for(var key in _3a){
+if(key.match(/([^\w_.$]|__[\w_.$]+__)/)){
+continue;
+}
+var _3f=_3a[key];
+if(typeof _3f=="undefined"||_3f===document||_3f===window||_3f===dojox.help._toString||_3f===dojox.help._help||_3f===null||(+dojo.isIE&&_3f.tagName)||_3f.__seen__){
+continue;
+}
+var _40=dojo.isFunction(_3f);
+var _41=dojo.isObject(_3f)&&!dojo.isArray(_3f)&&!_3f.nodeType;
+var _42=(_3c)?(_3c+"."+key):key;
+if(_42=="dojo._blockAsync"){
+continue;
+}
+if(!_3f.__name__){
+var _43=null;
+if(dojo.isString(_3f)){
+_43=String;
+}else{
+if(typeof _3f=="number"){
+_43=Number;
+}else{
+if(typeof _3f=="boolean"){
+_43=Boolean;
+}
+}
+}
+if(_43){
+_3f=_3a[key]=new _43(_3f);
+}
+}
+_3f.__seen__=true;
+_3f.__name__=_42;
+(dojox.help._names[_3b]=dojox.help._names[_3b]||[]).push(_42);
+_3d.push(_3f);
+if(!_40){
+dojox.help._overrides.push([_3a,key]);
+}
+if((_40||_41)&&_3e){
+dojox.help._recursions.push([_3f,_3b,_42]);
+}
+if(_40){
+if(!_3f.__source__){
+_3f.__source__=_3f.toString().replace(/^function\b ?/,"function "+_42);
+}
+if(_3f.toString===Function.prototype.toString){
+_3f.toString=dojox.help._toString;
+}
+}
+if(!_3f.help){
+_3f.help=dojox.help._help;
+}
+}
+}};
+}
Index: trunk/web/dojo/dojox/sketch.js
===================================================================
--- trunk/web/dojo/dojox/sketch.js	(revision 0)
+++ trunk/web/dojo/dojox/sketch.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sketch"]){
+dojo._hasResource["dojox.sketch"]=true;
+dojo.provide("dojox.sketch");
+dojo.require("dojox.xml.DomParser");
+dojo.require("dojox.sketch.UndoStack");
+dojo.require("dojox.sketch.Figure");
+dojo.require("dojox.sketch.Toolbar");
+}
Index: trunk/web/dojo/dojox/flash/ExpressInstall.as
===================================================================
--- trunk/web/dojo/dojox/flash/ExpressInstall.as	(revision 0)
+++ trunk/web/dojo/dojox/flash/ExpressInstall.as	(revision 9)
@@ -0,0 +1,71 @@
+/**
+ * Based on the expressinstall.as class created by Geoff Stearns as part
+ * of the FlashObject library.
+ *
+ * Use this file to invoke the Macromedia Flash Player Express Install functionality
+ * This file is intended for use with the FlashObject embed script. You can download FlashObject 
+ * and this file at the following URL: http://blog.deconcept.com/flashobject/
+ *
+ * Usage: 
+ *          var ExpressInstall = new ExpressInstall();
+ *          
+ *          // test to see if install is needed:
+ *          if (ExpressInstall.needsUpdate) { // returns true if update is needed
+ *              ExpressInstall.init(); // starts the update
+ *          }
+ *
+ *	NOTE: Your Flash movie must be at least 214px by 137px in order to use ExpressInstall.
+ *
+ */
+
+class ExpressInstall{
+	public var needsUpdate:Boolean;
+	private var updater:MovieClip;
+	private var hold:MovieClip;
+	
+	public function ExpressInstall(){
+		// does the user need to update?
+		this.needsUpdate = (_root.MMplayerType == undefined) ? false : true;	
+	}
+
+	public function init():Void{
+		this.loadUpdater();
+	}
+
+	public function loadUpdater():Void{
+		System.security.allowDomain("fpdownload.macromedia.com");
+
+		// hope that nothing is at a depth of 10000000, you can change this depth if needed, but you want
+		// it to be on top of your content if you have any stuff on the first frame
+		this.updater = _root.createEmptyMovieClip("expressInstallHolder", 10000000);
+
+		// register the callback so we know if they cancel or there is an error
+		var _self = this;
+		this.updater.installStatus = _self.onInstallStatus;
+		this.hold = this.updater.createEmptyMovieClip("hold", 1);
+
+		// can't use movieClipLoader because it has to work in 6.0.65
+		this.updater.onEnterFrame = function():Void {
+			if(typeof this.hold.startUpdate == 'function'){
+				_self.initUpdater();
+				this.onEnterFrame = null;
+			}
+		}
+
+		var cacheBuster:Number = Math.random();
+
+		this.hold.loadMovie("http://fpdownload.macromedia.com/pub/flashplayer/"
+												+"update/current/swf/autoUpdater.swf?"+ cacheBuster);
+	}
+
+	private function initUpdater():Void{
+		this.hold.redirectURL = _root.MMredirectURL;
+		this.hold.MMplayerType = _root.MMplayerType;
+		this.hold.MMdoctitle = _root.MMdoctitle;
+		this.hold.startUpdate();
+	}
+
+	public function onInstallStatus(msg):Void{
+		getURL("javascript:dojox.flash.install._onInstallStatus('"+msg+"')");
+	}
+}
Index: trunk/web/dojo/dojox/flash/_base.js
===================================================================
--- trunk/web/dojo/dojox/flash/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/flash/_base.js	(revision 9)
@@ -0,0 +1,299 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.flash._base"]){
+dojo._hasResource["dojox.flash._base"]=true;
+dojo.provide("dojox.flash._base");
+dojo.experimental("dojox.flash");
+dojo.require("dojo.window");
+dojox.flash=function(){
+};
+dojox.flash={ready:false,url:null,_visible:true,_loadedListeners:[],_installingListeners:[],setSwf:function(_1,_2){
+this.url=_1;
+this._visible=true;
+if(_2!==null&&_2!==undefined){
+this._visible=_2;
+}
+this._initialize();
+},addLoadedListener:function(_3){
+this._loadedListeners.push(_3);
+},addInstallingListener:function(_4){
+this._installingListeners.push(_4);
+},loaded:function(){
+dojox.flash.ready=true;
+if(dojox.flash._loadedListeners.length){
+for(var i=0;i<dojox.flash._loadedListeners.length;i++){
+dojox.flash._loadedListeners[i].call(null);
+}
+}
+},installing:function(){
+if(dojox.flash._installingListeners.length){
+for(var i=0;i<dojox.flash._installingListeners.length;i++){
+dojox.flash._installingListeners[i].call(null);
+}
+}
+},_initialize:function(){
+var _5=new dojox.flash.Install();
+dojox.flash.installer=_5;
+if(_5.needed()){
+_5.install();
+}else{
+dojox.flash.obj=new dojox.flash.Embed(this._visible);
+dojox.flash.obj.write();
+dojox.flash.comm=new dojox.flash.Communicator();
+}
+}};
+dojox.flash.Info=function(){
+this._detectVersion();
+};
+dojox.flash.Info.prototype={version:-1,versionMajor:-1,versionMinor:-1,versionRevision:-1,capable:false,installing:false,isVersionOrAbove:function(_6,_7,_8){
+_8=parseFloat("."+_8);
+if(this.versionMajor>=_6&&this.versionMinor>=_7&&this.versionRevision>=_8){
+return true;
+}else{
+return false;
+}
+},_detectVersion:function(){
+var _9;
+for(var _a=25;_a>0;_a--){
+if(dojo.isIE){
+var _b;
+try{
+if(_a>6){
+_b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_a);
+}else{
+_b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+}
+if(typeof _b=="object"){
+if(_a==6){
+_b.AllowScriptAccess="always";
+}
+_9=_b.GetVariable("$version");
+}
+}
+catch(e){
+continue;
+}
+}else{
+_9=this._JSFlashInfo(_a);
+}
+if(_9==-1){
+this.capable=false;
+return;
+}else{
+if(_9!=0){
+var _c;
+if(dojo.isIE){
+var _d=_9.split(" ");
+var _e=_d[1];
+_c=_e.split(",");
+}else{
+_c=_9.split(".");
+}
+this.versionMajor=_c[0];
+this.versionMinor=_c[1];
+this.versionRevision=_c[2];
+var _f=this.versionMajor+"."+this.versionRevision;
+this.version=parseFloat(_f);
+this.capable=true;
+break;
+}
+}
+}
+},_JSFlashInfo:function(_10){
+if(navigator.plugins!=null&&navigator.plugins.length>0){
+if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){
+var _11=navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"";
+var _12=navigator.plugins["Shockwave Flash"+_11].description;
+var _13=_12.split(" ");
+var _14=_13[2].split(".");
+var _15=_14[0];
+var _16=_14[1];
+var _17=(_13[3]||_13[4]).split("r");
+var _18=_17[1]>0?_17[1]:0;
+var _19=_15+"."+_16+"."+_18;
+return _19;
+}
+}
+return -1;
+}};
+dojox.flash.Embed=function(_1a){
+this._visible=_1a;
+};
+dojox.flash.Embed.prototype={width:215,height:138,id:"flashObject",_visible:true,protocol:function(){
+switch(window.location.protocol){
+case "https:":
+return "https";
+break;
+default:
+return "http";
+break;
+}
+},write:function(_1b){
+var _1c;
+var _1d=dojox.flash.url;
+var _1e=_1d;
+var _1f=_1d;
+var _20=dojo.baseUrl;
+var _21=document.location.protocol+"//"+document.location.host;
+if(_1b){
+var _22=escape(window.location);
+document.title=document.title.slice(0,47)+" - Flash Player Installation";
+var _23=escape(document.title);
+_1e+="?MMredirectURL="+_22+"&MMplayerType=ActiveX"+"&MMdoctitle="+_23+"&baseUrl="+escape(_20)+"&xdomain="+escape(_21);
+_1f+="?MMredirectURL="+_22+"&MMplayerType=PlugIn"+"&baseUrl="+escape(_20)+"&xdomain="+escape(_21);
+}else{
+_1e+="?cachebust="+new Date().getTime();
+_1e+="&baseUrl="+escape(_20);
+_1e+="&xdomain="+escape(_21);
+}
+if(_1f.indexOf("?")==-1){
+_1f+="?baseUrl="+escape(_20);
+}else{
+_1f+="&baseUrl="+escape(_20);
+}
+_1f+="&xdomain="+escape(_21);
+_1c="<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" "+"codebase=\""+this.protocol()+"://fpdownload.macromedia.com/pub/shockwave/cabs/flash/"+"swflash.cab#version=8,0,0,0\"\n "+"width=\""+this.width+"\"\n "+"height=\""+this.height+"\"\n "+"id=\""+this.id+"\"\n "+"name=\""+this.id+"\"\n "+"align=\"middle\">\n "+"<param name=\"allowScriptAccess\" value=\"always\"></param>\n "+"<param name=\"movie\" value=\""+_1e+"\"></param>\n "+"<param name=\"quality\" value=\"high\"></param>\n "+"<param name=\"bgcolor\" value=\"#ffffff\"></param>\n "+"<embed src=\""+_1f+"\" "+"quality=\"high\" "+"bgcolor=\"#ffffff\" "+"width=\""+this.width+"\" "+"height=\""+this.height+"\" "+"id=\""+this.id+"Embed"+"\" "+"name=\""+this.id+"\" "+"swLiveConnect=\"true\" "+"align=\"middle\" "+"allowScriptAccess=\"always\" "+"type=\"application/x-shockwave-flash\" "+"pluginspage=\""+this.protocol()+"://www.macromedia.com/go/getflashplayer\" "+"></embed>\n"+"</object>\n";
+dojo.connect(dojo,"loaded",dojo.hitch(this,function(){
+var _24=this.id+"Container";
+if(dojo.byId(_24)){
+return;
+}
+var div=document.createElement("div");
+div.id=this.id+"Container";
+div.style.width=this.width+"px";
+div.style.height=this.height+"px";
+if(!this._visible){
+div.style.position="absolute";
+div.style.zIndex="10000";
+div.style.top="-1000px";
+}
+div.innerHTML=_1c;
+var _25=document.getElementsByTagName("body");
+if(!_25||!_25.length){
+throw new Error("No body tag for this page");
+}
+_25=_25[0];
+_25.appendChild(div);
+}));
+},get:function(){
+if(dojo.isIE||dojo.isWebKit){
+return dojo.byId(this.id);
+}else{
+return document[this.id+"Embed"];
+}
+},setVisible:function(_26){
+var _27=dojo.byId(this.id+"Container");
+if(_26){
+_27.style.position="absolute";
+_27.style.visibility="visible";
+}else{
+_27.style.position="absolute";
+_27.style.y="-1000px";
+_27.style.visibility="hidden";
+}
+},center:function(){
+var _28=this.width;
+var _29=this.height;
+var _2a=dojo.window.getBox();
+var x=_2a.l+(_2a.w-_28)/2;
+var y=_2a.t+(_2a.h-_29)/2;
+var _2b=dojo.byId(this.id+"Container");
+_2b.style.top=y+"px";
+_2b.style.left=x+"px";
+}};
+dojox.flash.Communicator=function(){
+};
+dojox.flash.Communicator.prototype={_addExternalInterfaceCallback:function(_2c){
+var _2d=dojo.hitch(this,function(){
+var _2e=new Array(arguments.length);
+for(var i=0;i<arguments.length;i++){
+_2e[i]=this._encodeData(arguments[i]);
+}
+var _2f=this._execFlash(_2c,_2e);
+_2f=this._decodeData(_2f);
+return _2f;
+});
+this[_2c]=_2d;
+},_encodeData:function(_30){
+if(!_30||typeof _30!="string"){
+return _30;
+}
+_30=_30.replace("\\","&custom_backslash;");
+_30=_30.replace(/\0/g,"&custom_null;");
+return _30;
+},_decodeData:function(_31){
+if(_31&&_31.length&&typeof _31!="string"){
+_31=_31[0];
+}
+if(!_31||typeof _31!="string"){
+return _31;
+}
+_31=_31.replace(/\&custom_null\;/g,"\x00");
+_31=_31.replace(/\&custom_lt\;/g,"<").replace(/\&custom_gt\;/g,">").replace(/\&custom_backslash\;/g,"\\");
+return _31;
+},_execFlash:function(_32,_33){
+var _34=dojox.flash.obj.get();
+_33=(_33)?_33:[];
+for(var i=0;i<_33;i++){
+if(typeof _33[i]=="string"){
+_33[i]=this._encodeData(_33[i]);
+}
+}
+var _35=function(){
+return eval(_34.CallFunction("<invoke name=\""+_32+"\" returntype=\"javascript\">"+__flash__argumentsToXML(_33,0)+"</invoke>"));
+};
+var _36=_35.call(_33);
+if(typeof _36=="string"){
+_36=this._decodeData(_36);
+}
+return _36;
+}};
+dojox.flash.Install=function(){
+};
+dojox.flash.Install.prototype={needed:function(){
+if(!dojox.flash.info.capable){
+return true;
+}
+if(!dojox.flash.info.isVersionOrAbove(8,0,0)){
+return true;
+}
+return false;
+},install:function(){
+var _37;
+dojox.flash.info.installing=true;
+dojox.flash.installing();
+if(dojox.flash.info.capable==false){
+_37=new dojox.flash.Embed(false);
+_37.write();
+}else{
+if(dojox.flash.info.isVersionOrAbove(6,0,65)){
+_37=new dojox.flash.Embed(false);
+_37.write(true);
+_37.setVisible(true);
+_37.center();
+}else{
+alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
+window.location.href=+dojox.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
+}
+}
+},_onInstallStatus:function(msg){
+if(msg=="Download.Complete"){
+dojox.flash._initialize();
+}else{
+if(msg=="Download.Cancelled"){
+alert("This content requires a more recent version of the Macromedia "+" Flash Player.");
+window.location.href=dojox.flash.Embed.protocol()+"://www.macromedia.com/go/getflashplayer";
+}else{
+if(msg=="Download.Failed"){
+alert("There was an error downloading the Flash Player update. "+"Please try again later, or visit macromedia.com to download "+"the latest version of the Flash plugin.");
+}
+}
+}
+}};
+dojox.flash.info=new dojox.flash.Info();
+}
Index: trunk/web/dojo/dojox/flash/README
===================================================================
--- trunk/web/dojo/dojox/flash/README	(revision 0)
+++ trunk/web/dojo/dojox/flash/README	(revision 9)
@@ -0,0 +1,31 @@
+-------------------------------------------------------------------------------
+dojox.flash
+-------------------------------------------------------------------------------
+Version 0.5
+Release date: 2008-03-10
+-------------------------------------------------------------------------------
+Project state: experimental
+-------------------------------------------------------------------------------
+Project authors
+	Brad Neuberg (BradNeuberg@dojotoolkit.org)
+	Alex Russell (alex@dojotoolkit.org, only handled minor porting issues)
+-------------------------------------------------------------------------------
+Project description
+
+Infrastructure for high-performance Flash/JS communication
+-------------------------------------------------------------------------------
+Dependencies:
+
+MTASC for creating builds
+-------------------------------------------------------------------------------
+Documentation
+
+TODOC
+-------------------------------------------------------------------------------
+Installation instructions
+
+Not intended as a stand-alone module.
+-------------------------------------------------------------------------------
+Additional Notes
+
+TODOC
Index: trunk/web/dojo/dojox/flash/DojoExternalInterface.as
===================================================================
--- trunk/web/dojo/dojox/flash/DojoExternalInterface.as	(revision 0)
+++ trunk/web/dojo/dojox/flash/DojoExternalInterface.as	(revision 9)
@@ -0,0 +1,177 @@
+/**
+	A wrapper around Flash 8's ExternalInterface; this is needed
+	because ExternalInterface has a number of serialization bugs that we 
+	need to correct for.
+	
+	@author Brad Neuberg
+*/
+
+import flash.external.ExternalInterface;
+
+class DojoExternalInterface{
+	public static var available:Boolean;
+	public static var dojoPath = "";
+		
+	public static function initialize(){
+		//trace("DojoExternalInterface.initialize");
+		
+		// extract the dojo base path
+		DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath();
+		
+		// see if we need to do an express install
+		var install:ExpressInstall = new ExpressInstall();
+		if(install.needsUpdate){
+			install.init();
+		}
+		
+		// set whether communication is available
+		DojoExternalInterface.available = ExternalInterface.available;
+		
+		// make sure we can play nice in XD settings
+		System.security.allowDomain(unescape(_root.xdomain));
+	}
+	
+	/** Called when we are finished adding methods through addCallback. */
+	public static function done(){
+		//trace("done");
+		DojoExternalInterface.call("dojox.flash.loaded");
+	}
+	
+	public static function addCallback(methodName:String, instance:Object, 
+									   method:Function):Boolean{
+		//trace("addCallback");
+		ExternalInterface.addCallback(methodName, instance, function(){
+			instance = (instance) ? instance : null;
+			var params = [];
+			if(arguments && arguments.length){
+				for(var i = 0; i < arguments.length; i++){
+					params[i] = DojoExternalInterface.decodeData(arguments[i]);
+				}
+			}
+			
+			var results = method.apply(instance, params);
+			results = DojoExternalInterface.encodeData(results);
+			
+			return results;
+		});
+		
+		// tell JavaScript about DojoExternalInterface new method so we can create a proxy
+		ExternalInterface.call("dojox.flash.comm._addExternalInterfaceCallback", 
+													 methodName);
+													 
+		return true;
+	}
+	
+	public static function call(methodName:String):Void{
+		// we might have any number of optional arguments, so we have to 
+		// pass them in dynamically; strip out the results callback
+		var parameters = new Array();
+		for(var i = 0; i < arguments.length; i++){
+			parameters.push(arguments[i]);
+		}
+		
+		// FIXME: Should we be encoding or decoding the data to get
+		// around Flash's serialization bugs?
+		
+		var results = ExternalInterface.call.apply(ExternalInterface, parameters);
+		
+		return results;
+	}
+	
+	/** 
+		Called by Flash to indicate to JavaScript that we are ready to have
+		our Flash functions called. Calling loaded()
+		will fire the dojox.flash.loaded() event, so that JavaScript can know that
+		Flash has finished loading and adding its callbacks, and can begin to
+		interact with the Flash file.
+	*/
+	public static function loaded(){
+		DojoExternalInterface.call("dojox.flash.loaded");
+	}
+	
+	/**
+		Utility trace implementation that prints out to console.debug.
+	*/
+	public static function trace(msg){
+		DojoExternalInterface.call("console.debug", "FLASH: " + msg);
+	}
+	
+	private static function decodeData(data):String{
+		if(!data || typeof data != "string"){
+			return data;
+		}
+		
+		//      JAC: Using unicode character 0001 to store instead of Unicode null 
+		//      which causes trouble 
+		data = replaceStr(data, "&custom_null;", "\u0001");
+		
+		// we have to use custom encodings for certain characters when passing
+		// them over; for example, passing a backslash over as //// from JavaScript
+		// to Flash doesn't work
+		data = replaceStr(data, "&custom_backslash;", "\\");
+		
+		return data;
+	}
+	
+	private static function encodeData(data):String{	
+		if(!data || typeof data != "string"){
+			return data;
+		}
+		
+		// double encode all entity values, or they will be mis-decoded 
+		// by Flash when returned 
+		data = replaceStr(data, "&", "&amp;");
+		
+		// certain XMLish characters break Flash's wire serialization for
+		// ExternalInterface; encode these into a custom encoding, rather than
+		// the standard entity encoding, because otherwise we won't be able to
+		// differentiate between our own encoding and any entity characters
+		// that are being used in the string itself
+		data = replaceStr(data, '<', '&custom_lt;');
+		data = replaceStr(data, '>', '&custom_gt;');
+		
+		// needed for IE
+		data = replaceStr(data, '\\', '&custom_backslash;');
+		data = replaceStr(data, "\u0001", "&custom_null;");
+		
+		// encode control characters and JavaScript delimiters
+		data = replaceStr(data, "\n", "\\n");
+		data = replaceStr(data, "\r", "\\r");
+		data = replaceStr(data, "\f", "\\f");
+		data = replaceStr(data, "'", "\\'");
+		data = replaceStr(data, '"', '\"');
+		
+		return data;
+	}
+	
+	/** 
+			Flash ActionScript has no String.replace method or support for
+			Regular Expressions! We roll our own very simple one.
+	*/
+	public static function replaceStr(inputStr:String, replaceThis:String, 
+										withThis:String):String{
+		var splitStr = inputStr.split(replaceThis);
+		if(!splitStr){
+			return inputStr;
+		}
+		
+		inputStr = splitStr.join(withThis);
+		return inputStr;
+	}
+	
+	private static function getDojoPath(){
+		var url = _root._url;
+		var start = url.indexOf("baseUrl=") + "baseUrl=".length;
+		var path = url.substring(start);
+		var end = path.indexOf("&");
+		if(end != -1){
+			path = path.substring(0, end);
+		}
+		
+		// some browsers append a junk string at the end: '%20'%20quality=
+		if(path.indexOf("'%20'%20quality=") != -1){
+			path = path.substring(0, path.indexOf("'%20'%20quality="));
+		}
+		return unescape(path);
+	}
+}
Index: trunk/web/dojo/dojox/image.js
===================================================================
--- trunk/web/dojo/dojox/image.js	(revision 0)
+++ trunk/web/dojo/dojox/image.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.image"]){
+dojo._hasResource["dojox.image"]=true;
+dojo.provide("dojox.image");
+dojo.require("dojox.image._base");
+}
Index: trunk/web/dojo/dojox/gfx.js
===================================================================
--- trunk/web/dojo/dojox/gfx.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+/*
+	This is an optimized version of Dojo, built for deployment and not for
+	development. To get sources and documentation, please visit:
+
+		http://dojotoolkit.org
+*/
+
+if(!dojo._hasResource["dojox.gfx.matrix"]){dojo._hasResource["dojox.gfx.matrix"]=true;dojo.provide("dojox.gfx.matrix");(function(){var m=dojox.gfx.matrix;var _1={};m._degToRad=function(_2){return _1[_2]||(_1[_2]=(Math.PI*_2/180));};m._radToDeg=function(_3){return _3/Math.PI*180;};m.Matrix2D=function(_4){if(_4){if(typeof _4=="number"){this.xx=this.yy=_4;}else{if(_4 instanceof Array){if(_4.length>0){var _5=m.normalize(_4[0]);for(var i=1;i<_4.length;++i){var l=_5,r=dojox.gfx.matrix.normalize(_4[i]);_5=new m.Matrix2D();_5.xx=l.xx*r.xx+l.xy*r.yx;_5.xy=l.xx*r.xy+l.xy*r.yy;_5.yx=l.yx*r.xx+l.yy*r.yx;_5.yy=l.yx*r.xy+l.yy*r.yy;_5.dx=l.xx*r.dx+l.xy*r.dy+l.dx;_5.dy=l.yx*r.dx+l.yy*r.dy+l.dy;}dojo.mixin(this,_5);}}else{dojo.mixin(this,_4);}}}};dojo.extend(m.Matrix2D,{xx:1,xy:0,yx:0,yy:1,dx:0,dy:0});dojo.mixin(m,{identity:new m.Matrix2D(),flipX:new m.Matrix2D({xx:-1}),flipY:new m.Matrix2D({yy:-1}),flipXY:new m.Matrix2D({xx:-1,yy:-1}),translate:function(a,b){if(arguments.length>1){return new m.Matrix2D({dx:a,dy:b});}return new m.Matrix2D({dx:a.x,dy:a.y});},scale:function(a,b){if(arguments.length>1){return new m.Matrix2D({xx:a,yy:b});}if(typeof a=="number"){return new m.Matrix2D({xx:a,yy:a});}return new m.Matrix2D({xx:a.x,yy:a.y});},rotate:function(_6){var c=Math.cos(_6);var s=Math.sin(_6);return new m.Matrix2D({xx:c,xy:-s,yx:s,yy:c});},rotateg:function(_7){return m.rotate(m._degToRad(_7));},skewX:function(_8){return new m.Matrix2D({xy:Math.tan(_8)});},skewXg:function(_9){return m.skewX(m._degToRad(_9));},skewY:function(_a){return new m.Matrix2D({yx:Math.tan(_a)});},skewYg:function(_b){return m.skewY(m._degToRad(_b));},reflect:function(a,b){if(arguments.length==1){b=a.y;a=a.x;}var a2=a*a,b2=b*b,n2=a2+b2,xy=2*a*b/n2;return new m.Matrix2D({xx:2*a2/n2-1,xy:xy,yx:xy,yy:2*b2/n2-1});},project:function(a,b){if(arguments.length==1){b=a.y;a=a.x;}var a2=a*a,b2=b*b,n2=a2+b2,xy=a*b/n2;return new m.Matrix2D({xx:a2/n2,xy:xy,yx:xy,yy:b2/n2});},normalize:function(_c){return (_c instanceof m.Matrix2D)?_c:new m.Matrix2D(_c);},clone:function(_d){var _e=new m.Matrix2D();for(var i in _d){if(typeof (_d[i])=="number"&&typeof (_e[i])=="number"&&_e[i]!=_d[i]){_e[i]=_d[i];}}return _e;},invert:function(_f){var M=m.normalize(_f),D=M.xx*M.yy-M.xy*M.yx,M=new m.Matrix2D({xx:M.yy/D,xy:-M.xy/D,yx:-M.yx/D,yy:M.xx/D,dx:(M.xy*M.dy-M.yy*M.dx)/D,dy:(M.yx*M.dx-M.xx*M.dy)/D});return M;},_multiplyPoint:function(_10,x,y){return {x:_10.xx*x+_10.xy*y+_10.dx,y:_10.yx*x+_10.yy*y+_10.dy};},multiplyPoint:function(_11,a,b){var M=m.normalize(_11);if(typeof a=="number"&&typeof b=="number"){return m._multiplyPoint(M,a,b);}return m._multiplyPoint(M,a.x,a.y);},multiply:function(_12){var M=m.normalize(_12);for(var i=1;i<arguments.length;++i){var l=M,r=m.normalize(arguments[i]);M=new m.Matrix2D();M.xx=l.xx*r.xx+l.xy*r.yx;M.xy=l.xx*r.xy+l.xy*r.yy;M.yx=l.yx*r.xx+l.yy*r.yx;M.yy=l.yx*r.xy+l.yy*r.yy;M.dx=l.xx*r.dx+l.xy*r.dy+l.dx;M.dy=l.yx*r.dx+l.yy*r.dy+l.dy;}return M;},_sandwich:function(_13,x,y){return m.multiply(m.translate(x,y),_13,m.translate(-x,-y));},scaleAt:function(a,b,c,d){switch(arguments.length){case 4:return m._sandwich(m.scale(a,b),c,d);case 3:if(typeof c=="number"){return m._sandwich(m.scale(a),b,c);}return m._sandwich(m.scale(a,b),c.x,c.y);}return m._sandwich(m.scale(a),b.x,b.y);},rotateAt:function(_14,a,b){if(arguments.length>2){return m._sandwich(m.rotate(_14),a,b);}return m._sandwich(m.rotate(_14),a.x,a.y);},rotategAt:function(_15,a,b){if(arguments.length>2){return m._sandwich(m.rotateg(_15),a,b);}return m._sandwich(m.rotateg(_15),a.x,a.y);},skewXAt:function(_16,a,b){if(arguments.length>2){return m._sandwich(m.skewX(_16),a,b);}return m._sandwich(m.skewX(_16),a.x,a.y);},skewXgAt:function(_17,a,b){if(arguments.length>2){return m._sandwich(m.skewXg(_17),a,b);}return m._sandwich(m.skewXg(_17),a.x,a.y);},skewYAt:function(_18,a,b){if(arguments.length>2){return m._sandwich(m.skewY(_18),a,b);}return m._sandwich(m.skewY(_18),a.x,a.y);},skewYgAt:function(_19,a,b){if(arguments.length>2){return m._sandwich(m.skewYg(_19),a,b);}return m._sandwich(m.skewYg(_19),a.x,a.y);}});})();dojox.gfx.Matrix2D=dojox.gfx.matrix.Matrix2D;}if(!dojo._hasResource["dojox.gfx._base"]){dojo._hasResource["dojox.gfx._base"]=true;dojo.provide("dojox.gfx._base");(function(){var g=dojox.gfx,b=g._base;g._hasClass=function(_1a,_1b){var cls=_1a.getAttribute("className");return cls&&(" "+cls+" ").indexOf(" "+_1b+" ")>=0;};g._addClass=function(_1c,_1d){var cls=_1c.getAttribute("className")||"";if(!cls||(" "+cls+" ").indexOf(" "+_1d+" ")<0){_1c.setAttribute("className",cls+(cls?" ":"")+_1d);}};g._removeClass=function(_1e,_1f){var cls=_1e.getAttribute("className");if(cls){_1e.setAttribute("className",cls.replace(new RegExp("(^|\\s+)"+_1f+"(\\s+|$)"),"$1$2"));}};b._getFontMeasurements=function(){var _20={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};if(dojo.isIE){dojo.doc.documentElement.style.fontSize="100%";}var div=dojo.doc.createElement("div");var s=div.style;s.position="absolute";s.left="-100px";s.top="0px";s.width="30px";s.height="1000em";s.borderWidth="0px";s.margin="0px";s.padding="0px";s.outline="none";s.lineHeight="1";s.overflow="hidden";dojo.body().appendChild(div);for(var p in _20){div.style.fontSize=p;_20[p]=Math.round(div.offsetHeight*12/16)*16/12/1000;}dojo.body().removeChild(div);div=null;return _20;};var _21=null;b._getCachedFontMeasurements=function(_22){if(_22||!_21){_21=b._getFontMeasurements();}return _21;};var _23=null,_24={};b._getTextBox=function(_25,_26,_27){var m,s,al=arguments.length;if(!_23){m=_23=dojo.doc.createElement("div");s=m.style;s.position="absolute";s.left="-10000px";s.top="0";dojo.body().appendChild(m);}else{m=_23;s=m.style;}m.className="";s.borderWidth="0";s.margin="0";s.padding="0";s.outline="0";if(al>1&&_26){for(var i in _26){if(i in _24){continue;}s[i]=_26[i];}}if(al>2&&_27){m.className=_27;}m.innerHTML=_25;if(m["getBoundingClientRect"]){var bcr=m.getBoundingClientRect();return {l:bcr.left,t:bcr.top,w:bcr.width||(bcr.right-bcr.left),h:bcr.height||(bcr.bottom-bcr.top)};}else{return dojo.marginBox(m);}};var _28=0;b._getUniqueId=function(){var id;do{id=dojo._scopeName+"Unique"+(++_28);}while(dojo.byId(id));return id;};})();dojo.mixin(dojox.gfx,{defaultPath:{type:"path",path:""},defaultPolyline:{type:"polyline",points:[]},defaultRect:{type:"rect",x:0,y:0,width:100,height:100,r:0},defaultEllipse:{type:"ellipse",cx:0,cy:0,rx:200,ry:100},defaultCircle:{type:"circle",cx:0,cy:0,r:100},defaultLine:{type:"line",x1:0,y1:0,x2:100,y2:100},defaultImage:{type:"image",x:0,y:0,width:0,height:0,src:""},defaultText:{type:"text",x:0,y:0,text:"",align:"start",decoration:"none",rotated:false,kerning:true},defaultTextPath:{type:"textpath",text:"",align:"start",decoration:"none",rotated:false,kerning:true},defaultStroke:{type:"stroke",color:"black",style:"solid",width:1,cap:"butt",join:4},defaultLinearGradient:{type:"linear",x1:0,y1:0,x2:100,y2:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultRadialGradient:{type:"radial",cx:0,cy:0,r:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultPattern:{type:"pattern",x:0,y:0,width:0,height:0,src:""},defaultFont:{type:"font",style:"normal",variant:"normal",weight:"normal",size:"10pt",family:"serif"},getDefault:(function(){var _29={};return function(_2a){var t=_29[_2a];if(t){return new t();}t=_29[_2a]=new Function;t.prototype=dojox.gfx["default"+_2a];return new t();};})(),normalizeColor:function(_2b){return (_2b instanceof dojo.Color)?_2b:new dojo.Color(_2b);},normalizeParameters:function(_2c,_2d){if(_2d){var _2e={};for(var x in _2c){if(x in _2d&&!(x in _2e)){_2c[x]=_2d[x];}}}return _2c;},makeParameters:function(_2f,_30){if(!_30){return dojo.delegate(_2f);}var _31={};for(var i in _2f){if(!(i in _31)){_31[i]=dojo.clone((i in _30)?_30[i]:_2f[i]);}}return _31;},formatNumber:function(x,_32){var val=x.toString();if(val.indexOf("e")>=0){val=x.toFixed(4);}else{var _33=val.indexOf(".");if(_33>=0&&val.length-_33>5){val=x.toFixed(4);}}if(x<0){return val;}return _32?" "+val:val;},makeFontString:function(_34){return _34.style+" "+_34.variant+" "+_34.weight+" "+_34.size+" "+_34.family;},splitFontString:function(str){var _35=dojox.gfx.getDefault("Font");var t=str.split(/\s+/);do{if(t.length<5){break;}_35.style=t[0];_35.variant=t[1];_35.weight=t[2];var i=t[3].indexOf("/");_35.size=i<0?t[3]:t[3].substring(0,i);var j=4;if(i<0){if(t[4]=="/"){j=6;}else{if(t[4].charAt(0)=="/"){j=5;}}}if(j<t.length){_35.family=t.slice(j).join(" ");}}while(false);return _35;},cm_in_pt:72/2.54,mm_in_pt:7.2/2.54,px_in_pt:function(){return dojox.gfx._base._getCachedFontMeasurements()["12pt"]/12;},pt2px:function(len){return len*dojox.gfx.px_in_pt();},px2pt:function(len){return len/dojox.gfx.px_in_pt();},normalizedLength:function(len){if(len.length==0){return 0;}if(len.length>2){var _36=dojox.gfx.px_in_pt();var val=parseFloat(len);switch(len.slice(-2)){case "px":return val;case "pt":return val*_36;case "in":return val*72*_36;case "pc":return val*12*_36;case "mm":return val*dojox.gfx.mm_in_pt*_36;case "cm":return val*dojox.gfx.cm_in_pt*_36;}}return parseFloat(len);},pathVmlRegExp:/([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,pathSvgRegExp:/([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,equalSources:function(a,b){return a&&b&&a==b;}});}if(!dojo._hasResource["dojox.gfx"]){dojo._hasResource["dojox.gfx"]=true;dojo.provide("dojox.gfx");dojo.loadInit(function(){var gfx=dojo.getObject("dojox.gfx",true),sl,_37,_38;if(!gfx.renderer){if(dojo.config.forceGfxRenderer){dojox.gfx.renderer=dojo.config.forceGfxRenderer;return;}var _39=(typeof dojo.config.gfxRenderer=="string"?dojo.config.gfxRenderer:"svg,vml,silverlight,canvas").split(",");var ua=navigator.userAgent,_3a=0,_3b=0;if(dojo.isSafari>=3){if(ua.indexOf("iPhone")>=0||ua.indexOf("iPod")>=0){_38=ua.match(/Version\/(\d(\.\d)?(\.\d)?)\sMobile\/([^\s]*)\s?/);if(_38){_3a=parseInt(_38[4].substr(0,3),16);}}}if(dojo.isWebKit){if(!_3a){_38=ua.match(/Android\s+(\d+\.\d+)/);if(_38){_3b=parseFloat(_38[1]);}}}for(var i=0;i<_39.length;++i){switch(_39[i]){case "svg":if(!dojo.isIE&&(!_3a||_3a>=1521)&&!_3b&&!dojo.isAIR){dojox.gfx.renderer="svg";}break;case "vml":if(dojo.isIE){dojox.gfx.renderer="vml";}break;case "silverlight":try{if(dojo.isIE){sl=new ActiveXObject("AgControl.AgControl");if(sl&&sl.IsVersionSupported("1.0")){_37=true;}}else{if(navigator.plugins["Silverlight Plug-In"]){_37=true;}}}catch(e){_37=false;}finally{sl=null;}if(_37){dojox.gfx.renderer="silverlight";}break;case "canvas":if(!dojo.isIE){dojox.gfx.renderer="canvas";}break;}if(dojox.gfx.renderer){break;}}if(dojo.config.isDebug){}}});dojo.requireIf(dojox.gfx.renderer=="svg","dojox.gfx.svg");dojo.requireIf(dojox.gfx.renderer=="vml","dojox.gfx.vml");dojo.requireIf(dojox.gfx.renderer=="silverlight","dojox.gfx.silverlight");dojo.requireIf(dojox.gfx.renderer=="canvas","dojox.gfx.canvas");}
Index: trunk/web/dojo/dojox/sql/LICENSE
===================================================================
--- trunk/web/dojo/dojox/sql/LICENSE	(revision 0)
+++ trunk/web/dojo/dojox/sql/LICENSE	(revision 9)
@@ -0,0 +1,9 @@
+License Disclaimer:
+
+All contents of this directory are Copyright (c) the Dojo Foundation, with the
+following exceptions:
+-------------------------------------------------------------------------------
+
+_crypto.js - internally uses AES algorithm	
+	* AES algorithm copyright Chris Veness (CLA signed and permission given to use code under BSD license)
+      Taken from http://www.movable-type.co.uk/scripts/aes.html
Index: trunk/web/dojo/dojox/sql/_base.js
===================================================================
--- trunk/web/dojo/dojox/sql/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/sql/_base.js	(revision 9)
@@ -0,0 +1,330 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sql._base"]){
+dojo._hasResource["dojox.sql._base"]=true;
+dojo.provide("dojox.sql._base");
+dojo.require("dojox.sql._crypto");
+dojo.mixin(dojox.sql,{dbName:null,debug:(dojo.exists("dojox.sql.debug")?dojox.sql.debug:false),open:function(_1){
+if(this._dbOpen&&(!_1||_1==this.dbName)){
+return;
+}
+if(!this.dbName){
+this.dbName="dot_store_"+window.location.href.replace(/[^0-9A-Za-z_]/g,"_");
+if(this.dbName.length>63){
+this.dbName=this.dbName.substring(0,63);
+}
+}
+if(!_1){
+_1=this.dbName;
+}
+try{
+this._initDb();
+this.db.open(_1);
+this._dbOpen=true;
+}
+catch(exp){
+throw exp.message||exp;
+}
+},close:function(_2){
+if(dojo.isIE){
+return;
+}
+if(!this._dbOpen&&(!_2||_2==this.dbName)){
+return;
+}
+if(!_2){
+_2=this.dbName;
+}
+try{
+this.db.close(_2);
+this._dbOpen=false;
+}
+catch(exp){
+throw exp.message||exp;
+}
+},_exec:function(_3){
+try{
+this._initDb();
+if(!this._dbOpen){
+this.open();
+this._autoClose=true;
+}
+var _4=null;
+var _5=null;
+var _6=null;
+var _7=dojo._toArray(_3);
+_4=_7.splice(0,1)[0];
+if(this._needsEncrypt(_4)||this._needsDecrypt(_4)){
+_5=_7.splice(_7.length-1,1)[0];
+_6=_7.splice(_7.length-1,1)[0];
+}
+if(this.debug){
+this._printDebugSQL(_4,_7);
+}
+var _8;
+if(this._needsEncrypt(_4)){
+_8=new dojox.sql._SQLCrypto("encrypt",_4,_6,_7,_5);
+return null;
+}else{
+if(this._needsDecrypt(_4)){
+_8=new dojox.sql._SQLCrypto("decrypt",_4,_6,_7,_5);
+return null;
+}
+}
+var rs=this.db.execute(_4,_7);
+rs=this._normalizeResults(rs);
+if(this._autoClose){
+this.close();
+}
+return rs;
+}
+catch(exp){
+exp=exp.message||exp;
+if(this._autoClose){
+try{
+this.close();
+}
+catch(e){
+}
+}
+throw exp;
+}
+return null;
+},_initDb:function(){
+if(!this.db){
+try{
+this.db=google.gears.factory.create("beta.database","1.0");
+}
+catch(exp){
+dojo.setObject("google.gears.denied",true);
+if(dojox.off){
+dojox.off.onFrameworkEvent("coreOperationFailed");
+}
+throw "Google Gears must be allowed to run";
+}
+}
+},_printDebugSQL:function(_9,_a){
+var _b="dojox.sql(\""+_9+"\"";
+for(var i=0;i<_a.length;i++){
+if(typeof _a[i]=="string"){
+_b+=", \""+_a[i]+"\"";
+}else{
+_b+=", "+_a[i];
+}
+}
+_b+=")";
+},_normalizeResults:function(rs){
+var _c=[];
+if(!rs){
+return [];
+}
+while(rs.isValidRow()){
+var _d={};
+for(var i=0;i<rs.fieldCount();i++){
+var _e=rs.fieldName(i);
+var _f=rs.field(i);
+_d[_e]=_f;
+}
+_c.push(_d);
+rs.next();
+}
+rs.close();
+return _c;
+},_needsEncrypt:function(sql){
+return /encrypt\([^\)]*\)/i.test(sql);
+},_needsDecrypt:function(sql){
+return /decrypt\([^\)]*\)/i.test(sql);
+}});
+dojo.declare("dojox.sql._SQLCrypto",null,{constructor:function(_10,sql,_11,_12,_13){
+if(_10=="encrypt"){
+this._execEncryptSQL(sql,_11,_12,_13);
+}else{
+this._execDecryptSQL(sql,_11,_12,_13);
+}
+},_execEncryptSQL:function(sql,_14,_15,_16){
+var _17=this._stripCryptoSQL(sql);
+var _18=this._flagEncryptedArgs(sql,_15);
+var _19=this;
+this._encrypt(_17,_14,_15,_18,function(_1a){
+var _1b=false;
+var _1c=[];
+var exp=null;
+try{
+_1c=dojox.sql.db.execute(_17,_1a);
+}
+catch(execError){
+_1b=true;
+exp=execError.message||execError;
+}
+if(exp!=null){
+if(dojox.sql._autoClose){
+try{
+dojox.sql.close();
+}
+catch(e){
+}
+}
+_16(null,true,exp.toString());
+return;
+}
+_1c=dojox.sql._normalizeResults(_1c);
+if(dojox.sql._autoClose){
+dojox.sql.close();
+}
+if(dojox.sql._needsDecrypt(sql)){
+var _1d=_19._determineDecryptedColumns(sql);
+_19._decrypt(_1c,_1d,_14,function(_1e){
+_16(_1e,false,null);
+});
+}else{
+_16(_1c,false,null);
+}
+});
+},_execDecryptSQL:function(sql,_1f,_20,_21){
+var _22=this._stripCryptoSQL(sql);
+var _23=this._determineDecryptedColumns(sql);
+var _24=false;
+var _25=[];
+var exp=null;
+try{
+_25=dojox.sql.db.execute(_22,_20);
+}
+catch(execError){
+_24=true;
+exp=execError.message||execError;
+}
+if(exp!=null){
+if(dojox.sql._autoClose){
+try{
+dojox.sql.close();
+}
+catch(e){
+}
+}
+_21(_25,true,exp.toString());
+return;
+}
+_25=dojox.sql._normalizeResults(_25);
+if(dojox.sql._autoClose){
+dojox.sql.close();
+}
+this._decrypt(_25,_23,_1f,function(_26){
+_21(_26,false,null);
+});
+},_encrypt:function(sql,_27,_28,_29,_2a){
+this._totalCrypto=0;
+this._finishedCrypto=0;
+this._finishedSpawningCrypto=false;
+this._finalArgs=_28;
+for(var i=0;i<_28.length;i++){
+if(_29[i]){
+var _2b=_28[i];
+var _2c=i;
+this._totalCrypto++;
+dojox.sql._crypto.encrypt(_2b,_27,dojo.hitch(this,function(_2d){
+this._finalArgs[_2c]=_2d;
+this._finishedCrypto++;
+if(this._finishedCrypto>=this._totalCrypto&&this._finishedSpawningCrypto){
+_2a(this._finalArgs);
+}
+}));
+}
+}
+this._finishedSpawningCrypto=true;
+},_decrypt:function(_2e,_2f,_30,_31){
+this._totalCrypto=0;
+this._finishedCrypto=0;
+this._finishedSpawningCrypto=false;
+this._finalResultSet=_2e;
+for(var i=0;i<_2e.length;i++){
+var row=_2e[i];
+for(var _32 in row){
+if(_2f=="*"||_2f[_32]){
+this._totalCrypto++;
+var _33=row[_32];
+this._decryptSingleColumn(_32,_33,_30,i,function(_34){
+_31(_34);
+});
+}
+}
+}
+this._finishedSpawningCrypto=true;
+},_stripCryptoSQL:function(sql){
+sql=sql.replace(/DECRYPT\(\*\)/ig,"*");
+var _35=sql.match(/ENCRYPT\([^\)]*\)/ig);
+if(_35!=null){
+for(var i=0;i<_35.length;i++){
+var _36=_35[i];
+var _37=_36.match(/ENCRYPT\(([^\)]*)\)/i)[1];
+sql=sql.replace(_36,_37);
+}
+}
+_35=sql.match(/DECRYPT\([^\)]*\)/ig);
+if(_35!=null){
+for(i=0;i<_35.length;i++){
+var _38=_35[i];
+var _39=_38.match(/DECRYPT\(([^\)]*)\)/i)[1];
+sql=sql.replace(_38,_39);
+}
+}
+return sql;
+},_flagEncryptedArgs:function(sql,_3a){
+var _3b=new RegExp(/([\"][^\"]*\?[^\"]*[\"])|([\'][^\']*\?[^\']*[\'])|(\?)/ig);
+var _3c;
+var _3d=0;
+var _3e=[];
+while((_3c=_3b.exec(sql))!=null){
+var _3f=RegExp.lastMatch+"";
+if(/^[\"\']/.test(_3f)){
+continue;
+}
+var _40=false;
+if(/ENCRYPT\([^\)]*$/i.test(RegExp.leftContext)){
+_40=true;
+}
+_3e[_3d]=_40;
+_3d++;
+}
+return _3e;
+},_determineDecryptedColumns:function(sql){
+var _41={};
+if(/DECRYPT\(\*\)/i.test(sql)){
+_41="*";
+}else{
+var _42=/DECRYPT\((?:\s*\w*\s*\,?)*\)/ig;
+var _43=_42.exec(sql);
+while(_43){
+var _44=new String(RegExp.lastMatch);
+var _45=_44.replace(/DECRYPT\(/i,"");
+_45=_45.replace(/\)/,"");
+_45=_45.split(/\s*,\s*/);
+dojo.forEach(_45,function(_46){
+if(/\s*\w* AS (\w*)/i.test(_46)){
+_46=_46.match(/\s*\w* AS (\w*)/i)[1];
+}
+_41[_46]=true;
+});
+_43=_42.exec(sql);
+}
+}
+return _41;
+},_decryptSingleColumn:function(_47,_48,_49,_4a,_4b){
+dojox.sql._crypto.decrypt(_48,_49,dojo.hitch(this,function(_4c){
+this._finalResultSet[_4a][_47]=_4c;
+this._finishedCrypto++;
+if(this._finishedCrypto>=this._totalCrypto&&this._finishedSpawningCrypto){
+_4b(this._finalResultSet);
+}
+}));
+}});
+(function(){
+var _4d=dojox.sql;
+dojox.sql=new Function("return dojox.sql._exec(arguments);");
+dojo.mixin(dojox.sql,_4d);
+})();
+}
Index: trunk/web/dojo/dojox/sql/_crypto.js
===================================================================
--- trunk/web/dojo/dojox/sql/_crypto.js	(revision 0)
+++ trunk/web/dojo/dojox/sql/_crypto.js	(revision 9)
@@ -0,0 +1,293 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sql._crypto"]){
+dojo._hasResource["dojox.sql._crypto"]=true;
+dojo.provide("dojox.sql._crypto");
+dojo.mixin(dojox.sql._crypto,{_POOL_SIZE:100,encrypt:function(_1,_2,_3){
+this._initWorkerPool();
+var _4={plaintext:_1,password:_2};
+_4=dojo.toJson(_4);
+_4="encr:"+String(_4);
+this._assignWork(_4,_3);
+},decrypt:function(_5,_6,_7){
+this._initWorkerPool();
+var _8={ciphertext:_5,password:_6};
+_8=dojo.toJson(_8);
+_8="decr:"+String(_8);
+this._assignWork(_8,_7);
+},_initWorkerPool:function(){
+if(!this._manager){
+try{
+this._manager=google.gears.factory.create("beta.workerpool","1.0");
+this._unemployed=[];
+this._employed={};
+this._handleMessage=[];
+var _9=this;
+this._manager.onmessage=function(_a,_b){
+var _c=_9._employed["_"+_b];
+_9._employed["_"+_b]=undefined;
+_9._unemployed.push("_"+_b);
+if(_9._handleMessage.length){
+var _d=_9._handleMessage.shift();
+_9._assignWork(_d.msg,_d.callback);
+}
+_c(_a);
+};
+var _e="function _workerInit(){"+"gearsWorkerPool.onmessage = "+String(this._workerHandler)+";"+"}";
+var _f=_e+" _workerInit();";
+for(var i=0;i<this._POOL_SIZE;i++){
+this._unemployed.push("_"+this._manager.createWorker(_f));
+}
+}
+catch(exp){
+throw exp.message||exp;
+}
+}
+},_assignWork:function(msg,_10){
+if(!this._handleMessage.length&&this._unemployed.length){
+var _11=this._unemployed.shift().substring(1);
+this._employed["_"+_11]=_10;
+this._manager.sendMessage(msg,parseInt(_11,10));
+}else{
+this._handleMessage={msg:msg,callback:_10};
+}
+},_workerHandler:function(msg,_12){
+var _13=[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22];
+var _14=[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]];
+function _15(_16,w){
+var Nb=4;
+var Nr=w.length/Nb-1;
+var _17=[[],[],[],[]];
+for(var i=0;i<4*Nb;i++){
+_17[i%4][Math.floor(i/4)]=_16[i];
+}
+_17=_18(_17,w,0,Nb);
+for(var _19=1;_19<Nr;_19++){
+_17=_1a(_17,Nb);
+_17=_1b(_17,Nb);
+_17=_1c(_17,Nb);
+_17=_18(_17,w,_19,Nb);
+}
+_17=_1a(_17,Nb);
+_17=_1b(_17,Nb);
+_17=_18(_17,w,Nr,Nb);
+var _1d=new Array(4*Nb);
+for(var i=0;i<4*Nb;i++){
+_1d[i]=_17[i%4][Math.floor(i/4)];
+}
+return _1d;
+};
+function _1a(s,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+s[r][c]=_13[s[r][c]];
+}
+}
+return s;
+};
+function _1b(s,Nb){
+var t=new Array(4);
+for(var r=1;r<4;r++){
+for(var c=0;c<4;c++){
+t[c]=s[r][(c+r)%Nb];
+}
+for(var c=0;c<4;c++){
+s[r][c]=t[c];
+}
+}
+return s;
+};
+function _1c(s,Nb){
+for(var c=0;c<4;c++){
+var a=new Array(4);
+var b=new Array(4);
+for(var i=0;i<4;i++){
+a[i]=s[i][c];
+b[i]=s[i][c]&128?s[i][c]<<1^283:s[i][c]<<1;
+}
+s[0][c]=b[0]^a[1]^b[1]^a[2]^a[3];
+s[1][c]=a[0]^b[1]^a[2]^b[2]^a[3];
+s[2][c]=a[0]^a[1]^b[2]^a[3]^b[3];
+s[3][c]=a[0]^b[0]^a[1]^a[2]^b[3];
+}
+return s;
+};
+function _18(_1e,w,rnd,Nb){
+for(var r=0;r<4;r++){
+for(var c=0;c<Nb;c++){
+_1e[r][c]^=w[rnd*4+c][r];
+}
+}
+return _1e;
+};
+function _1f(key){
+var Nb=4;
+var Nk=key.length/4;
+var Nr=Nk+6;
+var w=new Array(Nb*(Nr+1));
+var _20=new Array(4);
+for(var i=0;i<Nk;i++){
+var r=[key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]];
+w[i]=r;
+}
+for(var i=Nk;i<(Nb*(Nr+1));i++){
+w[i]=new Array(4);
+for(var t=0;t<4;t++){
+_20[t]=w[i-1][t];
+}
+if(i%Nk==0){
+_20=_21(_22(_20));
+for(var t=0;t<4;t++){
+_20[t]^=_14[i/Nk][t];
+}
+}else{
+if(Nk>6&&i%Nk==4){
+_20=_21(_20);
+}
+}
+for(var t=0;t<4;t++){
+w[i][t]=w[i-Nk][t]^_20[t];
+}
+}
+return w;
+};
+function _21(w){
+for(var i=0;i<4;i++){
+w[i]=_13[w[i]];
+}
+return w;
+};
+function _22(w){
+w[4]=w[0];
+for(var i=0;i<4;i++){
+w[i]=w[i+1];
+}
+return w;
+};
+function _23(_24,_25,_26){
+if(!(_26==128||_26==192||_26==256)){
+return "";
+}
+var _27=_26/8;
+var _28=new Array(_27);
+for(var i=0;i<_27;i++){
+_28[i]=_25.charCodeAt(i)&255;
+}
+var key=_15(_28,_1f(_28));
+key=key.concat(key.slice(0,_27-16));
+var _29=16;
+var _2a=new Array(_29);
+var _2b=(new Date()).getTime();
+for(var i=0;i<4;i++){
+_2a[i]=(_2b>>>i*8)&255;
+}
+for(var i=0;i<4;i++){
+_2a[i+4]=(_2b/4294967296>>>i*8)&255;
+}
+var _2c=_1f(key);
+var _2d=Math.ceil(_24.length/_29);
+var _2e=new Array(_2d);
+for(var b=0;b<_2d;b++){
+for(var c=0;c<4;c++){
+_2a[15-c]=(b>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_2a[15-c-4]=(b/4294967296>>>c*8);
+}
+var _2f=_15(_2a,_2c);
+var _30=b<_2d-1?_29:(_24.length-1)%_29+1;
+var ct="";
+for(var i=0;i<_30;i++){
+var _31=_24.charCodeAt(b*_29+i);
+var _32=_31^_2f[i];
+ct+=String.fromCharCode(_32);
+}
+_2e[b]=_33(ct);
+}
+var _34="";
+for(var i=0;i<8;i++){
+_34+=String.fromCharCode(_2a[i]);
+}
+_34=_33(_34);
+return _34+"-"+_2e.join("-");
+};
+function _35(_36,_37,_38){
+if(!(_38==128||_38==192||_38==256)){
+return "";
+}
+var _39=_38/8;
+var _3a=new Array(_39);
+for(var i=0;i<_39;i++){
+_3a[i]=_37.charCodeAt(i)&255;
+}
+var _3b=_1f(_3a);
+var key=_15(_3a,_3b);
+key=key.concat(key.slice(0,_39-16));
+var _3c=_1f(key);
+_36=_36.split("-");
+var _3d=16;
+var _3e=new Array(_3d);
+var _3f=_40(_36[0]);
+for(var i=0;i<8;i++){
+_3e[i]=_3f.charCodeAt(i);
+}
+var _41=new Array(_36.length-1);
+for(var b=1;b<_36.length;b++){
+for(var c=0;c<4;c++){
+_3e[15-c]=((b-1)>>>c*8)&255;
+}
+for(var c=0;c<4;c++){
+_3e[15-c-4]=((b/4294967296-1)>>>c*8)&255;
+}
+var _42=_15(_3e,_3c);
+_36[b]=_40(_36[b]);
+var pt="";
+for(var i=0;i<_36[b].length;i++){
+var _43=_36[b].charCodeAt(i);
+var _44=_43^_42[i];
+pt+=String.fromCharCode(_44);
+}
+_41[b-1]=pt;
+}
+return _41.join("");
+};
+function _33(str){
+return str.replace(/[\0\t\n\v\f\r\xa0!-]/g,function(c){
+return "!"+c.charCodeAt(0)+"!";
+});
+};
+function _40(str){
+return str.replace(/!\d\d?\d?!/g,function(c){
+return String.fromCharCode(c.slice(1,-1));
+});
+};
+function _45(_46,_47){
+return _23(_46,_47,256);
+};
+function _48(_49,_4a){
+return _35(_49,_4a,256);
+};
+var cmd=msg.substr(0,4);
+var arg=msg.substr(5);
+if(cmd=="encr"){
+arg=eval("("+arg+")");
+var _4b=arg.plaintext;
+var _4c=arg.password;
+var _4d=_45(_4b,_4c);
+gearsWorkerPool.sendMessage(String(_4d),_12);
+}else{
+if(cmd=="decr"){
+arg=eval("("+arg+")");
+var _4e=arg.ciphertext;
+var _4c=arg.password;
+var _4d=_48(_4e,_4c);
+gearsWorkerPool.sendMessage(String(_4d),_12);
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/sql/README
===================================================================
--- trunk/web/dojo/dojox/sql/README	(revision 0)
+++ trunk/web/dojo/dojox/sql/README	(revision 9)
@@ -0,0 +1,32 @@
+-------------------------------------------------------------------------------
+dojox.sql
+-------------------------------------------------------------------------------
+Version X.XXX
+Release date: MM/DD/YYYY
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Brad Neuberg
+-------------------------------------------------------------------------------
+Project description
+
+Code to interface with the Google Gears-specific SQL engine, used
+by dojox.storage and dojox.off. 
+-------------------------------------------------------------------------------
+Dependencies:
+
+Google Gears (gears.google.com)
+-------------------------------------------------------------------------------
+Documentation
+
+TBD
+-------------------------------------------------------------------------------
+Installation instructions
+
+TBD
+-------------------------------------------------------------------------------
+Additional Notes
+
+We should consider relocating crypto code to dojox.encoding
Index: trunk/web/dojo/dojox/atom/io/Connection.js
===================================================================
--- trunk/web/dojo/dojox/atom/io/Connection.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/io/Connection.js	(revision 9)
@@ -0,0 +1,255 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.io.Connection"]){
+dojo._hasResource["dojox.atom.io.Connection"]=true;
+dojo.provide("dojox.atom.io.Connection");
+dojo.require("dojox.atom.io.model");
+dojo.declare("dojox.atom.io.Connection",null,{constructor:function(_1,_2){
+this.sync=_1;
+this.preventCache=_2;
+},preventCache:false,alertsEnabled:false,getFeed:function(_3,_4,_5,_6){
+this._getXmlDoc(_3,"feed",new dojox.atom.io.model.Feed(),dojox.atom.io.model._Constants.ATOM_NS,_4,_5,_6);
+},getService:function(_7,_8,_9,_a){
+this._getXmlDoc(_7,"service",new dojox.atom.io.model.Service(_7),dojox.atom.io.model._Constants.APP_NS,_8,_9,_a);
+},getEntry:function(_b,_c,_d,_e){
+this._getXmlDoc(_b,"entry",new dojox.atom.io.model.Entry(),dojox.atom.io.model._Constants.ATOM_NS,_c,_d,_e);
+},_getXmlDoc:function(_f,_10,_11,_12,_13,_14,_15){
+if(!_15){
+_15=dojo.global;
+}
+var ae=this.alertsEnabled;
+var _16={url:_f,handleAs:"xml",sync:this.sync,preventCache:this.preventCache,load:function(_17,_18){
+var _19=null;
+var _1a=_17;
+var _1b;
+if(_1a){
+if(typeof (_1a.getElementsByTagNameNS)!="undefined"){
+_1b=_1a.getElementsByTagNameNS(_12,_10);
+if(_1b&&_1b.length>0){
+_19=_1b.item(0);
+}else{
+if(_1a.lastChild){
+_19=_1a.lastChild;
+}
+}
+}else{
+if(typeof (_1a.getElementsByTagName)!="undefined"){
+_1b=_1a.getElementsByTagName(_10);
+if(_1b&&_1b.length>0){
+for(var i=0;i<_1b.length;i++){
+if(_1b[i].namespaceURI==_12){
+_19=_1b[i];
+break;
+}
+}
+}else{
+if(_1a.lastChild){
+_19=_1a.lastChild;
+}
+}
+}else{
+if(_1a.lastChild){
+_19=_1a.lastChild;
+}else{
+_13.call(_15,null,null,_18);
+return;
+}
+}
+}
+_11.buildFromDom(_19);
+if(_13){
+_13.call(_15,_11,_1a,_18);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+}else{
+_13.call(_15,null,null,_18);
+}
+}};
+if(this.user&&this.user!==null){
+_16.user=this.user;
+}
+if(this.password&&this.password!==null){
+_16.password=this.password;
+}
+if(_14){
+_16.error=function(_1c,_1d){
+_14.call(_15,_1c,_1d);
+};
+}else{
+_16.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+dojo.xhrGet(_16);
+},updateEntry:function(_1e,_1f,_20,_21,_22,_23){
+if(!_23){
+_23=dojo.global;
+}
+_1e.updated=new Date();
+var url=_1e.getEditHref();
+if(!url){
+throw new Error("A URL has not been specified for editing this entry.");
+}
+var _24=this;
+var ae=this.alertsEnabled;
+var _25={url:url,handleAs:"text",contentType:"text/xml",sync:this.sync,preventCache:this.preventCache,load:function(_26,_27){
+var _28=null;
+if(_21){
+_28=_27.xhr.getResponseHeader("Location");
+if(!_28){
+_28=url;
+}
+var _29=function(_2a,dom,_2b){
+if(_1f){
+_1f.call(_23,_2a,_28,_2b);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+};
+_24.getEntry(_28,_29);
+}else{
+if(_1f){
+_1f.call(_23,_1e,_27.xhr.getResponseHeader("Location"),_27);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+}
+return _26;
+}};
+if(this.user&&this.user!==null){
+_25.user=this.user;
+}
+if(this.password&&this.password!==null){
+_25.password=this.password;
+}
+if(_20){
+_25.error=function(_2c,_2d){
+_20.call(_23,_2c,_2d);
+};
+}else{
+_25.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+if(_22){
+_25.postData=_1e.toString(true);
+_25.headers={"X-Method-Override":"PUT"};
+dojo.rawXhrPost(_25);
+}else{
+_25.putData=_1e.toString(true);
+var xhr=dojo.rawXhrPut(_25);
+}
+},addEntry:function(_2e,url,_2f,_30,_31,_32){
+if(!_32){
+_32=dojo.global;
+}
+_2e.published=new Date();
+_2e.updated=new Date();
+var _33=_2e.feedUrl;
+var ae=this.alertsEnabled;
+if(!url&&_33){
+url=_33;
+}
+if(!url){
+if(ae){
+throw new Error("The request cannot be processed because the URL parameter is missing.");
+}
+return;
+}
+var _34=this;
+var _35={url:url,handleAs:"text",contentType:"text/xml",sync:this.sync,preventCache:this.preventCache,postData:_2e.toString(true),load:function(_36,_37){
+var _38=_37.xhr.getResponseHeader("Location");
+if(!_38){
+_38=url;
+}
+if(!_37.retrieveEntry){
+if(_2f){
+_2f.call(_32,_2e,_38,_37);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+}else{
+var _39=function(_3a,dom,_3b){
+if(_2f){
+_2f.call(_32,_3a,_38,_3b);
+}else{
+if(ae){
+throw new Error("The callback value does not exist.");
+}
+}
+};
+_34.getEntry(_38,_39);
+}
+return _36;
+}};
+if(this.user&&this.user!==null){
+_35.user=this.user;
+}
+if(this.password&&this.password!==null){
+_35.password=this.password;
+}
+if(_30){
+_35.error=function(_3c,_3d){
+_30.call(_32,_3c,_3d);
+};
+}else{
+_35.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+dojo.rawXhrPost(_35);
+},deleteEntry:function(_3e,_3f,_40,_41,_42){
+if(!_42){
+_42=dojo.global;
+}
+var url=null;
+if(typeof (_3e)=="string"){
+url=_3e;
+}else{
+url=_3e.getEditHref();
+}
+if(!url){
+_3f.call(_42,false,null);
+throw new Error("The request cannot be processed because the URL parameter is missing.");
+}
+var _43={url:url,handleAs:"text",sync:this.sync,preventCache:this.preventCache,load:function(_44,_45){
+_3f.call(_42,_45);
+return _44;
+}};
+if(this.user&&this.user!==null){
+_43.user=this.user;
+}
+if(this.password&&this.password!==null){
+_43.password=this.password;
+}
+if(_40){
+_43.error=function(_46,_47){
+_40.call(_42,_46,_47);
+};
+}else{
+_43.error=function(){
+throw new Error("The URL requested cannot be accessed");
+};
+}
+if(_41){
+_43.headers={"X-Method-Override":"DELETE"};
+dojo.xhrPost(_43);
+}else{
+dojo.xhrDelete(_43);
+}
+}});
+}
Index: trunk/web/dojo/dojox/atom/io/model.js
===================================================================
--- trunk/web/dojo/dojox/atom/io/model.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/io/model.js	(revision 9)
@@ -0,0 +1,949 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.io.model"]){
+dojo._hasResource["dojox.atom.io.model"]=true;
+dojo.provide("dojox.atom.io.model");
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.string");
+dojo.require("dojo.date.stamp");
+dojox.atom.io.model._Constants={"ATOM_URI":"http://www.w3.org/2005/Atom","ATOM_NS":"http://www.w3.org/2005/Atom","PURL_NS":"http://purl.org/atom/app#","APP_NS":"http://www.w3.org/2007/app"};
+dojox.atom.io.model._actions={"link":function(_1,_2){
+if(_1.links===null){
+_1.links=[];
+}
+var _3=new dojox.atom.io.model.Link();
+_3.buildFromDom(_2);
+_1.links.push(_3);
+},"author":function(_4,_5){
+if(_4.authors===null){
+_4.authors=[];
+}
+var _6=new dojox.atom.io.model.Person("author");
+_6.buildFromDom(_5);
+_4.authors.push(_6);
+},"contributor":function(_7,_8){
+if(_7.contributors===null){
+_7.contributors=[];
+}
+var _9=new dojox.atom.io.model.Person("contributor");
+_9.buildFromDom(_8);
+_7.contributors.push(_9);
+},"category":function(_a,_b){
+if(_a.categories===null){
+_a.categories=[];
+}
+var _c=new dojox.atom.io.model.Category();
+_c.buildFromDom(_b);
+_a.categories.push(_c);
+},"icon":function(_d,_e){
+_d.icon=dojox.xml.parser.textContent(_e);
+},"id":function(_f,_10){
+_f.id=dojox.xml.parser.textContent(_10);
+},"rights":function(obj,_11){
+obj.rights=dojox.xml.parser.textContent(_11);
+},"subtitle":function(obj,_12){
+var cnt=new dojox.atom.io.model.Content("subtitle");
+cnt.buildFromDom(_12);
+obj.subtitle=cnt;
+},"title":function(obj,_13){
+var cnt=new dojox.atom.io.model.Content("title");
+cnt.buildFromDom(_13);
+obj.title=cnt;
+},"updated":function(obj,_14){
+obj.updated=dojox.atom.io.model.util.createDate(_14);
+},"issued":function(obj,_15){
+obj.issued=dojox.atom.io.model.util.createDate(_15);
+},"modified":function(obj,_16){
+obj.modified=dojox.atom.io.model.util.createDate(_16);
+},"published":function(obj,_17){
+obj.published=dojox.atom.io.model.util.createDate(_17);
+},"entry":function(obj,_18){
+if(obj.entries===null){
+obj.entries=[];
+}
+var _19=obj.createEntry?obj.createEntry():new dojox.atom.io.model.Entry();
+_19.buildFromDom(_18);
+obj.entries.push(_19);
+},"content":function(obj,_1a){
+var cnt=new dojox.atom.io.model.Content("content");
+cnt.buildFromDom(_1a);
+obj.content=cnt;
+},"summary":function(obj,_1b){
+var _1c=new dojox.atom.io.model.Content("summary");
+_1c.buildFromDom(_1b);
+obj.summary=_1c;
+},"name":function(obj,_1d){
+obj.name=dojox.xml.parser.textContent(_1d);
+},"email":function(obj,_1e){
+obj.email=dojox.xml.parser.textContent(_1e);
+},"uri":function(obj,_1f){
+obj.uri=dojox.xml.parser.textContent(_1f);
+},"generator":function(obj,_20){
+obj.generator=new dojox.atom.io.model.Generator();
+obj.generator.buildFromDom(_20);
+}};
+dojox.atom.io.model.util={createDate:function(_21){
+var _22=dojox.xml.parser.textContent(_21);
+if(_22){
+return dojo.date.stamp.fromISOString(dojo.trim(_22));
+}
+return null;
+},escapeHtml:function(str){
+return str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace(/'/gm,"&#39;");
+},unEscapeHtml:function(str){
+return str.replace(/&lt;/gm,"<").replace(/&gt;/gm,">").replace(/&quot;/gm,"\"").replace(/&#39;/gm,"'").replace(/&amp;/gm,"&");
+},getNodename:function(_23){
+var _24=null;
+if(_23!==null){
+_24=_23.localName?_23.localName:_23.nodeName;
+if(_24!==null){
+var _25=_24.indexOf(":");
+if(_25!==-1){
+_24=_24.substring((_25+1),_24.length);
+}
+}
+}
+return _24;
+}};
+dojo.declare("dojox.atom.io.model.Node",null,{constructor:function(_26,_27,_28,_29,_2a){
+this.name_space=_26;
+this.name=_27;
+this.attributes=[];
+if(_28){
+this.attributes=_28;
+}
+this.content=[];
+this.rawNodes=[];
+this.textContent=null;
+if(_29){
+this.content.push(_29);
+}
+this.shortNs=_2a;
+this._objName="Node";
+},buildFromDom:function(_2b){
+this._saveAttributes(_2b);
+this.name_space=_2b.namespaceURI;
+this.shortNs=_2b.prefix;
+this.name=dojox.atom.io.model.util.getNodename(_2b);
+for(var x=0;x<_2b.childNodes.length;x++){
+var c=_2b.childNodes[x];
+if(dojox.atom.io.model.util.getNodename(c)!="#text"){
+this.rawNodes.push(c);
+var n=new dojox.atom.io.model.Node();
+n.buildFromDom(c,true);
+this.content.push(n);
+}else{
+this.content.push(c.nodeValue);
+}
+}
+this.textContent=dojox.xml.parser.textContent(_2b);
+},_saveAttributes:function(_2c){
+if(!this.attributes){
+this.attributes=[];
+}
+var _2d=function(_2e){
+var _2f=_2e.attributes;
+if(_2f===null){
+return false;
+}
+return (_2f.length!==0);
+};
+if(_2d(_2c)&&this._getAttributeNames){
+var _30=this._getAttributeNames(_2c);
+if(_30&&_30.length>0){
+for(var x in _30){
+var _31=_2c.getAttribute(_30[x]);
+if(_31){
+this.attributes[_30[x]]=_31;
+}
+}
+}
+}
+},addAttribute:function(_32,_33){
+this.attributes[_32]=_33;
+},getAttribute:function(_34){
+return this.attributes[_34];
+},_getAttributeNames:function(_35){
+var _36=[];
+for(var i=0;i<_35.attributes.length;i++){
+_36.push(_35.attributes[i].nodeName);
+}
+return _36;
+},toString:function(){
+var xml=[];
+var x;
+var _37=(this.shortNs?this.shortNs+":":"")+this.name;
+var _38=(this.name=="#cdata-section");
+if(_38){
+xml.push("<![CDATA[");
+xml.push(this.textContent);
+xml.push("]]>");
+}else{
+xml.push("<");
+xml.push(_37);
+if(this.name_space){
+xml.push(" xmlns='"+this.name_space+"'");
+}
+if(this.attributes){
+for(x in this.attributes){
+xml.push(" "+x+"='"+this.attributes[x]+"'");
+}
+}
+if(this.content){
+xml.push(">");
+for(x in this.content){
+xml.push(this.content[x]);
+}
+xml.push("</"+_37+">\n");
+}else{
+xml.push("/>\n");
+}
+}
+return xml.join("");
+},addContent:function(_39){
+this.content.push(_39);
+}});
+dojo.declare("dojox.atom.io.model.AtomItem",dojox.atom.io.model.Node,{constructor:function(_3a){
+this.ATOM_URI=dojox.atom.io.model._Constants.ATOM_URI;
+this.links=null;
+this.authors=null;
+this.categories=null;
+this.contributors=null;
+this.icon=this.id=this.logo=this.xmlBase=this.rights=null;
+this.subtitle=this.title=null;
+this.updated=this.published=null;
+this.issued=this.modified=null;
+this.content=null;
+this.extensions=null;
+this.entries=null;
+this.name_spaces={};
+this._objName="AtomItem";
+},_getAttributeNames:function(){
+return null;
+},_accepts:{},accept:function(tag){
+return Boolean(this._accepts[tag]);
+},_postBuild:function(){
+},buildFromDom:function(_3b){
+var i,c,n;
+for(i=0;i<_3b.attributes.length;i++){
+c=_3b.attributes.item(i);
+n=dojox.atom.io.model.util.getNodename(c);
+if(c.prefix=="xmlns"&&c.prefix!=n){
+this.addNamespace(c.nodeValue,n);
+}
+}
+c=_3b.childNodes;
+for(i=0;i<c.length;i++){
+if(c[i].nodeType==1){
+var _3c=dojox.atom.io.model.util.getNodename(c[i]);
+if(!_3c){
+continue;
+}
+if(c[i].namespaceURI!=dojox.atom.io.model._Constants.ATOM_NS&&_3c!="#text"){
+if(!this.extensions){
+this.extensions=[];
+}
+var _3d=new dojox.atom.io.model.Node();
+_3d.buildFromDom(c[i]);
+this.extensions.push(_3d);
+}
+if(!this.accept(_3c.toLowerCase())){
+continue;
+}
+var fn=dojox.atom.io.model._actions[_3c];
+if(fn){
+fn(this,c[i]);
+}
+}
+}
+this._saveAttributes(_3b);
+if(this._postBuild){
+this._postBuild();
+}
+},addNamespace:function(_3e,_3f){
+if(_3e&&_3f){
+this.name_spaces[_3f]=_3e;
+}
+},addAuthor:function(_40,_41,uri){
+if(!this.authors){
+this.authors=[];
+}
+this.authors.push(new dojox.atom.io.model.Person("author",_40,_41,uri));
+},addContributor:function(_42,_43,uri){
+if(!this.contributors){
+this.contributors=[];
+}
+this.contributors.push(new dojox.atom.io.model.Person("contributor",_42,_43,uri));
+},addLink:function(_44,rel,_45,_46,_47){
+if(!this.links){
+this.links=[];
+}
+this.links.push(new dojox.atom.io.model.Link(_44,rel,_45,_46,_47));
+},removeLink:function(_48,rel){
+if(!this.links||!dojo.isArray(this.links)){
+return;
+}
+var _49=0;
+for(var i=0;i<this.links.length;i++){
+if((!_48||this.links[i].href===_48)&&(!rel||this.links[i].rel===rel)){
+this.links.splice(i,1);
+_49++;
+}
+}
+return _49;
+},removeBasicLinks:function(){
+if(!this.links){
+return;
+}
+var _4a=0;
+for(var i=0;i<this.links.length;i++){
+if(!this.links[i].rel){
+this.links.splice(i,1);
+_4a++;
+i--;
+}
+}
+return _4a;
+},addCategory:function(_4b,_4c,_4d){
+if(!this.categories){
+this.categories=[];
+}
+this.categories.push(new dojox.atom.io.model.Category(_4b,_4c,_4d));
+},getCategories:function(_4e){
+if(!_4e){
+return this.categories;
+}
+var arr=[];
+for(var x in this.categories){
+if(this.categories[x].scheme===_4e){
+arr.push(this.categories[x]);
+}
+}
+return arr;
+},removeCategories:function(_4f,_50){
+if(!this.categories){
+return;
+}
+var _51=0;
+for(var i=0;i<this.categories.length;i++){
+if((!_4f||this.categories[i].scheme===_4f)&&(!_50||this.categories[i].term===_50)){
+this.categories.splice(i,1);
+_51++;
+i--;
+}
+}
+return _51;
+},setTitle:function(str,_52){
+if(!str){
+return;
+}
+this.title=new dojox.atom.io.model.Content("title");
+this.title.value=str;
+if(_52){
+this.title.type=_52;
+}
+},addExtension:function(_53,_54,_55,_56,_57){
+if(!this.extensions){
+this.extensions=[];
+}
+this.extensions.push(new dojox.atom.io.model.Node(_53,_54,_55,_56,_57||"ns"+this.extensions.length));
+},getExtensions:function(_58,_59){
+var arr=[];
+if(!this.extensions){
+return arr;
+}
+for(var x in this.extensions){
+if((this.extensions[x].name_space===_58||this.extensions[x].shortNs===_58)&&(!_59||this.extensions[x].name===_59)){
+arr.push(this.extensions[x]);
+}
+}
+return arr;
+},removeExtensions:function(_5a,_5b){
+if(!this.extensions){
+return;
+}
+for(var i=0;i<this.extensions.length;i++){
+if((this.extensions[i].name_space==_5a||this.extensions[i].shortNs===_5a)&&this.extensions[i].name===_5b){
+this.extensions.splice(i,1);
+i--;
+}
+}
+},destroy:function(){
+this.links=null;
+this.authors=null;
+this.categories=null;
+this.contributors=null;
+this.icon=this.id=this.logo=this.xmlBase=this.rights=null;
+this.subtitle=this.title=null;
+this.updated=this.published=null;
+this.issued=this.modified=null;
+this.content=null;
+this.extensions=null;
+this.entries=null;
+}});
+dojo.declare("dojox.atom.io.model.Category",dojox.atom.io.model.Node,{constructor:function(_5c,_5d,_5e){
+this.scheme=_5c;
+this.term=_5d;
+this.label=_5e;
+this._objName="Category";
+},_postBuild:function(){
+},_getAttributeNames:function(){
+return ["label","scheme","term"];
+},toString:function(){
+var s=[];
+s.push("<category ");
+if(this.label){
+s.push(" label=\""+this.label+"\" ");
+}
+if(this.scheme){
+s.push(" scheme=\""+this.scheme+"\" ");
+}
+if(this.term){
+s.push(" term=\""+this.term+"\" ");
+}
+s.push("/>\n");
+return s.join("");
+},buildFromDom:function(_5f){
+this._saveAttributes(_5f);
+this.label=this.attributes.label;
+this.scheme=this.attributes.scheme;
+this.term=this.attributes.term;
+if(this._postBuild){
+this._postBuild();
+}
+}});
+dojo.declare("dojox.atom.io.model.Content",dojox.atom.io.model.Node,{constructor:function(_60,_61,src,_62,_63){
+this.tagName=_60;
+this.value=_61;
+this.src=src;
+this.type=_62;
+this.xmlLang=_63;
+this.HTML="html";
+this.TEXT="text";
+this.XHTML="xhtml";
+this.XML="xml";
+this._useTextContent="true";
+},_getAttributeNames:function(){
+return ["type","src"];
+},_postBuild:function(){
+},buildFromDom:function(_64){
+var _65=_64.getAttribute("type");
+if(_65){
+_65=_65.toLowerCase();
+if(_65=="xml"||"text/xml"){
+_65=this.XML;
+}
+}else{
+_65="text";
+}
+if(_65===this.XML){
+if(_64.firstChild){
+var i;
+this.value="";
+for(i=0;i<_64.childNodes.length;i++){
+var c=_64.childNodes[i];
+if(c){
+this.value+=dojox.xml.parser.innerXML(c);
+}
+}
+}
+}else{
+if(_64.innerHTML){
+this.value=_64.innerHTML;
+}else{
+this.value=dojox.xml.parser.textContent(_64);
+}
+}
+this._saveAttributes(_64);
+if(this.attributes){
+this.type=this.attributes.type;
+this.scheme=this.attributes.scheme;
+this.term=this.attributes.term;
+}
+if(!this.type){
+this.type="text";
+}
+var _66=this.type.toLowerCase();
+if(_66==="html"||_66==="text/html"||_66==="xhtml"||_66==="text/xhtml"){
+this.value=this.value?dojox.atom.io.model.util.unEscapeHtml(this.value):"";
+}
+if(this._postBuild){
+this._postBuild();
+}
+},toString:function(){
+var s=[];
+s.push("<"+this.tagName+" ");
+if(!this.type){
+this.type="text";
+}
+if(this.type){
+s.push(" type=\""+this.type+"\" ");
+}
+if(this.xmlLang){
+s.push(" xml:lang=\""+this.xmlLang+"\" ");
+}
+if(this.xmlBase){
+s.push(" xml:base=\""+this.xmlBase+"\" ");
+}
+if(this.type.toLowerCase()==this.HTML){
+s.push(">"+dojox.atom.io.model.util.escapeHtml(this.value)+"</"+this.tagName+">\n");
+}else{
+s.push(">"+this.value+"</"+this.tagName+">\n");
+}
+var ret=s.join("");
+return ret;
+}});
+dojo.declare("dojox.atom.io.model.Link",dojox.atom.io.model.Node,{constructor:function(_67,rel,_68,_69,_6a){
+this.href=_67;
+this.hrefLang=_68;
+this.rel=rel;
+this.title=_69;
+this.type=_6a;
+},_getAttributeNames:function(){
+return ["href","jrefLang","rel","title","type"];
+},_postBuild:function(){
+},buildFromDom:function(_6b){
+this._saveAttributes(_6b);
+this.href=this.attributes.href;
+this.hrefLang=this.attributes.hreflang;
+this.rel=this.attributes.rel;
+this.title=this.attributes.title;
+this.type=this.attributes.type;
+if(this._postBuild){
+this._postBuild();
+}
+},toString:function(){
+var s=[];
+s.push("<link ");
+if(this.href){
+s.push(" href=\""+this.href+"\" ");
+}
+if(this.hrefLang){
+s.push(" hrefLang=\""+this.hrefLang+"\" ");
+}
+if(this.rel){
+s.push(" rel=\""+this.rel+"\" ");
+}
+if(this.title){
+s.push(" title=\""+this.title+"\" ");
+}
+if(this.type){
+s.push(" type = \""+this.type+"\" ");
+}
+s.push("/>\n");
+return s.join("");
+}});
+dojo.declare("dojox.atom.io.model.Person",dojox.atom.io.model.Node,{constructor:function(_6c,_6d,_6e,uri){
+this.author="author";
+this.contributor="contributor";
+if(!_6c){
+_6c=this.author;
+}
+this.personType=_6c;
+this.name=_6d||"";
+this.email=_6e||"";
+this.uri=uri||"";
+this._objName="Person";
+},_getAttributeNames:function(){
+return null;
+},_postBuild:function(){
+},accept:function(tag){
+return Boolean(this._accepts[tag]);
+},buildFromDom:function(_6f){
+var c=_6f.childNodes;
+for(var i=0;i<c.length;i++){
+var _70=dojox.atom.io.model.util.getNodename(c[i]);
+if(!_70){
+continue;
+}
+if(c[i].namespaceURI!=dojox.atom.io.model._Constants.ATOM_NS&&_70!="#text"){
+if(!this.extensions){
+this.extensions=[];
+}
+var _71=new dojox.atom.io.model.Node();
+_71.buildFromDom(c[i]);
+this.extensions.push(_71);
+}
+if(!this.accept(_70.toLowerCase())){
+continue;
+}
+var fn=dojox.atom.io.model._actions[_70];
+if(fn){
+fn(this,c[i]);
+}
+}
+this._saveAttributes(_6f);
+if(this._postBuild){
+this._postBuild();
+}
+},_accepts:{"name":true,"uri":true,"email":true},toString:function(){
+var s=[];
+s.push("<"+this.personType+">\n");
+if(this.name){
+s.push("\t<name>"+this.name+"</name>\n");
+}
+if(this.email){
+s.push("\t<email>"+this.email+"</email>\n");
+}
+if(this.uri){
+s.push("\t<uri>"+this.uri+"</uri>\n");
+}
+s.push("</"+this.personType+">\n");
+return s.join("");
+}});
+dojo.declare("dojox.atom.io.model.Generator",dojox.atom.io.model.Node,{constructor:function(uri,_72,_73){
+this.uri=uri;
+this.version=_72;
+this.value=_73;
+},_postBuild:function(){
+},buildFromDom:function(_74){
+this.value=dojox.xml.parser.textContent(_74);
+this._saveAttributes(_74);
+this.uri=this.attributes.uri;
+this.version=this.attributes.version;
+if(this._postBuild){
+this._postBuild();
+}
+},toString:function(){
+var s=[];
+s.push("<generator ");
+if(this.uri){
+s.push(" uri=\""+this.uri+"\" ");
+}
+if(this.version){
+s.push(" version=\""+this.version+"\" ");
+}
+s.push(">"+this.value+"</generator>\n");
+var ret=s.join("");
+return ret;
+}});
+dojo.declare("dojox.atom.io.model.Entry",dojox.atom.io.model.AtomItem,{constructor:function(id){
+this.id=id;
+this._objName="Entry";
+this.feedUrl=null;
+},_getAttributeNames:function(){
+return null;
+},_accepts:{"author":true,"content":true,"category":true,"contributor":true,"created":true,"id":true,"link":true,"published":true,"rights":true,"summary":true,"title":true,"updated":true,"xmlbase":true,"issued":true,"modified":true},toString:function(_75){
+var s=[];
+var i;
+if(_75){
+s.push("<?xml version='1.0' encoding='UTF-8'?>");
+s.push("<entry xmlns='"+dojox.atom.io.model._Constants.ATOM_URI+"'");
+}else{
+s.push("<entry");
+}
+if(this.xmlBase){
+s.push(" xml:base=\""+this.xmlBase+"\" ");
+}
+for(i in this.name_spaces){
+s.push(" xmlns:"+i+"=\""+this.name_spaces[i]+"\"");
+}
+s.push(">\n");
+s.push("<id>"+(this.id?this.id:"")+"</id>\n");
+if(this.issued&&!this.published){
+this.published=this.issued;
+}
+if(this.published){
+s.push("<published>"+dojo.date.stamp.toISOString(this.published)+"</published>\n");
+}
+if(this.created){
+s.push("<created>"+dojo.date.stamp.toISOString(this.created)+"</created>\n");
+}
+if(this.issued){
+s.push("<issued>"+dojo.date.stamp.toISOString(this.issued)+"</issued>\n");
+}
+if(this.modified){
+s.push("<modified>"+dojo.date.stamp.toISOString(this.modified)+"</modified>\n");
+}
+if(this.modified&&!this.updated){
+this.updated=this.modified;
+}
+if(this.updated){
+s.push("<updated>"+dojo.date.stamp.toISOString(this.updated)+"</updated>\n");
+}
+if(this.rights){
+s.push("<rights>"+this.rights+"</rights>\n");
+}
+if(this.title){
+s.push(this.title.toString());
+}
+if(this.summary){
+s.push(this.summary.toString());
+}
+var _76=[this.authors,this.categories,this.links,this.contributors,this.extensions];
+for(var x in _76){
+if(_76[x]){
+for(var y in _76[x]){
+s.push(_76[x][y]);
+}
+}
+}
+if(this.content){
+s.push(this.content.toString());
+}
+s.push("</entry>\n");
+return s.join("");
+},getEditHref:function(){
+if(this.links===null||this.links.length===0){
+return null;
+}
+for(var x in this.links){
+if(this.links[x].rel&&this.links[x].rel=="edit"){
+return this.links[x].href;
+}
+}
+return null;
+},setEditHref:function(url){
+if(this.links===null){
+this.links=[];
+}
+for(var x in this.links){
+if(this.links[x].rel&&this.links[x].rel=="edit"){
+this.links[x].href=url;
+return;
+}
+}
+this.addLink(url,"edit");
+}});
+dojo.declare("dojox.atom.io.model.Feed",dojox.atom.io.model.AtomItem,{_accepts:{"author":true,"content":true,"category":true,"contributor":true,"created":true,"id":true,"link":true,"published":true,"rights":true,"summary":true,"title":true,"updated":true,"xmlbase":true,"entry":true,"logo":true,"issued":true,"modified":true,"icon":true,"subtitle":true},addEntry:function(_77){
+if(!_77.id){
+throw new Error("The entry object must be assigned an ID attribute.");
+}
+if(!this.entries){
+this.entries=[];
+}
+_77.feedUrl=this.getSelfHref();
+this.entries.push(_77);
+},getFirstEntry:function(){
+if(!this.entries||this.entries.length===0){
+return null;
+}
+return this.entries[0];
+},getEntry:function(_78){
+if(!this.entries){
+return null;
+}
+for(var x in this.entries){
+if(this.entries[x].id==_78){
+return this.entries[x];
+}
+}
+return null;
+},removeEntry:function(_79){
+if(!this.entries){
+return;
+}
+var _7a=0;
+for(var i=0;i<this.entries.length;i++){
+if(this.entries[i]===_79){
+this.entries.splice(i,1);
+_7a++;
+}
+}
+return _7a;
+},setEntries:function(_7b){
+for(var x in _7b){
+this.addEntry(_7b[x]);
+}
+},toString:function(){
+var s=[];
+var i;
+s.push("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+s.push("<feed xmlns=\""+dojox.atom.io.model._Constants.ATOM_URI+"\"");
+if(this.xmlBase){
+s.push(" xml:base=\""+this.xmlBase+"\"");
+}
+for(i in this.name_spaces){
+s.push(" xmlns:"+i+"=\""+this.name_spaces[i]+"\"");
+}
+s.push(">\n");
+s.push("<id>"+(this.id?this.id:"")+"</id>\n");
+if(this.title){
+s.push(this.title);
+}
+if(this.copyright&&!this.rights){
+this.rights=this.copyright;
+}
+if(this.rights){
+s.push("<rights>"+this.rights+"</rights>\n");
+}
+if(this.issued){
+s.push("<issued>"+dojo.date.stamp.toISOString(this.issued)+"</issued>\n");
+}
+if(this.modified){
+s.push("<modified>"+dojo.date.stamp.toISOString(this.modified)+"</modified>\n");
+}
+if(this.modified&&!this.updated){
+this.updated=this.modified;
+}
+if(this.updated){
+s.push("<updated>"+dojo.date.stamp.toISOString(this.updated)+"</updated>\n");
+}
+if(this.published){
+s.push("<published>"+dojo.date.stamp.toISOString(this.published)+"</published>\n");
+}
+if(this.icon){
+s.push("<icon>"+this.icon+"</icon>\n");
+}
+if(this.language){
+s.push("<language>"+this.language+"</language>\n");
+}
+if(this.logo){
+s.push("<logo>"+this.logo+"</logo>\n");
+}
+if(this.subtitle){
+s.push(this.subtitle.toString());
+}
+if(this.tagline){
+s.push(this.tagline.toString());
+}
+var _7c=[this.alternateLinks,this.authors,this.categories,this.contributors,this.otherLinks,this.extensions,this.entries];
+for(i in _7c){
+if(_7c[i]){
+for(var x in _7c[i]){
+s.push(_7c[i][x]);
+}
+}
+}
+s.push("</feed>");
+return s.join("");
+},createEntry:function(){
+var _7d=new dojox.atom.io.model.Entry();
+_7d.feedUrl=this.getSelfHref();
+return _7d;
+},getSelfHref:function(){
+if(this.links===null||this.links.length===0){
+return null;
+}
+for(var x in this.links){
+if(this.links[x].rel&&this.links[x].rel=="self"){
+return this.links[x].href;
+}
+}
+return null;
+}});
+dojo.declare("dojox.atom.io.model.Service",dojox.atom.io.model.AtomItem,{constructor:function(_7e){
+this.href=_7e;
+},buildFromDom:function(_7f){
+var i;
+this.workspaces=[];
+if(_7f.tagName!="service"){
+return;
+}
+if(_7f.namespaceURI!=dojox.atom.io.model._Constants.PURL_NS&&_7f.namespaceURI!=dojox.atom.io.model._Constants.APP_NS){
+return;
+}
+var ns=_7f.namespaceURI;
+this.name_space=_7f.namespaceURI;
+var _80;
+if(typeof (_7f.getElementsByTagNameNS)!="undefined"){
+_80=_7f.getElementsByTagNameNS(ns,"workspace");
+}else{
+_80=[];
+var _81=_7f.getElementsByTagName("workspace");
+for(i=0;i<_81.length;i++){
+if(_81[i].namespaceURI==ns){
+_80.push(_81[i]);
+}
+}
+}
+if(_80&&_80.length>0){
+var _82=0;
+var _83;
+for(i=0;i<_80.length;i++){
+_83=(typeof (_80.item)==="undefined"?_80[i]:_80.item(i));
+var _84=new dojox.atom.io.model.Workspace();
+_84.buildFromDom(_83);
+this.workspaces[_82++]=_84;
+}
+}
+},getCollection:function(url){
+for(var i=0;i<this.workspaces.length;i++){
+var _85=this.workspaces[i].collections;
+for(var j=0;j<_85.length;j++){
+if(_85[j].href==url){
+return _85;
+}
+}
+}
+return null;
+}});
+dojo.declare("dojox.atom.io.model.Workspace",dojox.atom.io.model.AtomItem,{constructor:function(_86){
+this.title=_86;
+this.collections=[];
+},buildFromDom:function(_87){
+var _88=dojox.atom.io.model.util.getNodename(_87);
+if(_88!="workspace"){
+return;
+}
+var c=_87.childNodes;
+var len=0;
+for(var i=0;i<c.length;i++){
+var _89=c[i];
+if(_89.nodeType===1){
+_88=dojox.atom.io.model.util.getNodename(_89);
+if(_89.namespaceURI==dojox.atom.io.model._Constants.PURL_NS||_89.namespaceURI==dojox.atom.io.model._Constants.APP_NS){
+if(_88==="collection"){
+var _8a=new dojox.atom.io.model.Collection();
+_8a.buildFromDom(_89);
+this.collections[len++]=_8a;
+}
+}else{
+if(_89.namespaceURI===dojox.atom.io.model._Constants.ATOM_NS){
+if(_88==="title"){
+this.title=dojox.xml.parser.textContent(_89);
+}
+}
+}
+}
+}
+}});
+dojo.declare("dojox.atom.io.model.Collection",dojox.atom.io.model.AtomItem,{constructor:function(_8b,_8c){
+this.href=_8b;
+this.title=_8c;
+this.attributes=[];
+this.features=[];
+this.children=[];
+this.memberType=null;
+this.id=null;
+},buildFromDom:function(_8d){
+this.href=_8d.getAttribute("href");
+var c=_8d.childNodes;
+for(var i=0;i<c.length;i++){
+var _8e=c[i];
+if(_8e.nodeType===1){
+var _8f=dojox.atom.io.model.util.getNodename(_8e);
+if(_8e.namespaceURI==dojox.atom.io.model._Constants.PURL_NS||_8e.namespaceURI==dojox.atom.io.model._Constants.APP_NS){
+if(_8f==="member-type"){
+this.memberType=dojox.xml.parser.textContent(_8e);
+}else{
+if(_8f=="feature"){
+if(_8e.getAttribute("id")){
+this.features.push(_8e.getAttribute("id"));
+}
+}else{
+var _90=new dojox.atom.io.model.Node();
+_90.buildFromDom(_8e);
+this.children.push(_90);
+}
+}
+}else{
+if(_8e.namespaceURI===dojox.atom.io.model._Constants.ATOM_NS){
+if(_8f==="id"){
+this.id=dojox.xml.parser.textContent(_8e);
+}else{
+if(_8f==="title"){
+this.title=dojox.xml.parser.textContent(_8e);
+}
+}
+}
+}
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/atom/README
===================================================================
--- trunk/web/dojo/dojox/atom/README	(revision 0)
+++ trunk/web/dojo/dojox/atom/README	(revision 9)
@@ -0,0 +1,53 @@
+-------------------------------------------------------------------------------
+DojoX Data
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 11/18/2008
+-------------------------------------------------------------------------------
+Project state: experimental
+-------------------------------------------------------------------------------
+Project authors
+	Jared Jurkiewicz (jared.jurkiewicz@gmail.com) 
+	Benjamin Schell (Corporate CLA)
+
+-------------------------------------------------------------------------------
+Project description
+
+The DojoX Atom project is an implementation of the ATOM document format in a 
+JavaScript model and a full Atom Publishing Protocol (APP) io library for working
+with ATOM feeds
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX Atom has dependencies on core dojo (dojo.data) and the D.O.H. unit test 
+framework.
+-------------------------------------------------------------------------------
+Documentation:
+
+See the Dojo API tool (http://dojotoolkit.org/api)
+as well as dojocampus (http://docs.dojocampus.org/dojox/atom)
+-------------------------------------------------------------------------------
+Contributions:
+
+Constributions of documentation, examples, and fixes are always welcome.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojo/dojox/trunk/atom/*
+
+Install into the following directory structure:
+/dojox/atom/
+
+...which should be at the same level as your Dojo checkout.
+
+/dojox/atom/*
+
+Require in the sections you wish to use (the model, IO library, etc)
+-------------------------------------------------------------------------------
+Additional Notes: 
+	This library is still undergoing some work and as such the API may change
+	hence the marking of 'experimental'.
+
Index: trunk/web/dojo/dojox/atom/widget/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1,735 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedEntryEditor"]){
+dojo._hasResource["dojox.atom.widget.FeedEntryEditor"]=true;
+dojo.provide("dojox.atom.widget.FeedEntryEditor");
+dojo.require("dojox.atom.widget.FeedEntryViewer");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.Editor");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.SimpleTextarea");
+dojo.requireLocalization("dojox.atom.widget","FeedEntryEditor",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojox.atom.widget","PeopleEditor",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.atom.widget.FeedEntryEditor");
+dojo.declare("dojox.atom.widget.FeedEntryEditor",dojox.atom.widget.FeedEntryViewer,{_contentEditor:null,_oldContent:null,_setObject:null,enableEdit:false,_contentEditorCreator:null,_editors:{},entryNewButton:null,_editable:false,templateString:dojo.cache("dojox.atom","widget/templates/FeedEntryEditor.html","<div class=\"feedEntryViewer\">\n    <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\n        <tr width=\"100%\"  dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\n        \t<td align=\"left\" dojoAttachPoint=\"entryNewButton\">\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"doNew\" dojoAttachEvent=\"onclick:_toggleNew\"></span>\n        \t</td>\n            <td align=\"left\" dojoAttachPoint=\"entryEditButton\" style=\"display: none;\">\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"edit\" dojoAttachEvent=\"onclick:_toggleEdit\"></span>\n            </td>\n            <td align=\"left\" dojoAttachPoint=\"entrySaveCancelButtons\" style=\"display: none;\">\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"save\" dojoAttachEvent=\"onclick:saveEdits\"></span>\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"cancel\" dojoAttachEvent=\"onclick:cancelEdits\"></span>\n            </td>\n            <td align=\"right\">\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n            </td>\n        </tr>\n        <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\n            <td dojoAttachPoint=\"feedEntryCelltitle\">\n                <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellauthors\">\n                <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellcontributors\">\n                <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellid\">\n                <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\n            </td>\n            <td rowspan=\"2\" align=\"right\">\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n            </td>\n\t\t</tr>\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\n            <td dojoAttachPoint=\"feedEntryCellupdated\">\n                <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellsummary\">\n                <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellcontent\">\n                <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\n            </td>\n        </tr>\n    </table>\n    \n    <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\n        <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td>\n                        \t<select dojoAttachPoint=\"entryTitleSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\n                        \t\t<option value=\"text\">Text</option>\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\n                        \t</select>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td colspan=\"2\" dojoAttachPoint=\"entryTitleNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n\n        <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryAuthorNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n\n        <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n        \n        <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    \n        <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    \n        <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\" colspan=\"2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td>\n                        \t<select dojoAttachPoint=\"entrySummarySelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\n                        \t\t<option value=\"text\">Text</option>\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\n                        \t</select>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entrySummaryNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    \n        <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td>\n                        \t<select dojoAttachPoint=\"entryContentSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\n                        \t\t<option value=\"text\">Text</option>\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\n                        \t</select>\n                        </td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryContentNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    </table>\n</div>\n"),postCreate:function(){
+if(this.entrySelectionTopic!==""){
+this._subscriptions=[dojo.subscribe(this.entrySelectionTopic,this,"_handleEvent")];
+}
+var _1=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+this.displayOptions.innerHTML=_1.displayOptions;
+this.feedEntryCheckBoxLabelTitle.innerHTML=_1.title;
+this.feedEntryCheckBoxLabelAuthors.innerHTML=_1.authors;
+this.feedEntryCheckBoxLabelContributors.innerHTML=_1.contributors;
+this.feedEntryCheckBoxLabelId.innerHTML=_1.id;
+this.close.innerHTML=_1.close;
+this.feedEntryCheckBoxLabelUpdated.innerHTML=_1.updated;
+this.feedEntryCheckBoxLabelSummary.innerHTML=_1.summary;
+this.feedEntryCheckBoxLabelContent.innerHTML=_1.content;
+_1=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryEditor");
+this.doNew.innerHTML=_1.doNew;
+this.edit.innerHTML=_1.edit;
+this.save.innerHTML=_1.save;
+this.cancel.innerHTML=_1.cancel;
+},setEntry:function(_2,_3,_4){
+if(this._entry!==_2){
+this._editMode=false;
+_4=false;
+}else{
+_4=true;
+}
+dojox.atom.widget.FeedEntryEditor.superclass.setEntry.call(this,_2,_3);
+this._editable=this._isEditable(_2);
+if(!_4&&!this._editable){
+dojo.style(this.entryEditButton,"display","none");
+dojo.style(this.entrySaveCancelButtons,"display","none");
+}
+if(this._editable&&this.enableEdit){
+if(!_4){
+dojo.style(this.entryEditButton,"display","");
+if(this.enableMenuFade&&this.entrySaveCancelButton){
+dojo.fadeOut({node:this.entrySaveCancelButton,duration:250}).play();
+}
+}
+}
+},_toggleEdit:function(){
+if(this._editable&&this.enableEdit){
+dojo.style(this.entryEditButton,"display","none");
+dojo.style(this.entrySaveCancelButtons,"display","");
+this._editMode=true;
+this.setEntry(this._entry,this._feed,true);
+}
+},_handleEvent:function(_5){
+if(_5.source!=this&&_5.action=="delete"&&_5.entry&&_5.entry==this._entry){
+dojo.style(this.entryEditButton,"display","none");
+}
+dojox.atom.widget.FeedEntryEditor.superclass._handleEvent.call(this,_5);
+},_isEditable:function(_6){
+var _7=false;
+if(_6&&_6!==null&&_6.links&&_6.links!==null){
+for(var x in _6.links){
+if(_6.links[x].rel&&_6.links[x].rel=="edit"){
+_7=true;
+break;
+}
+}
+}
+return _7;
+},setTitle:function(_8,_9,_a){
+if(!_9){
+dojox.atom.widget.FeedEntryEditor.superclass.setTitle.call(this,_8,_9,_a);
+if(_a.title&&_a.title.value&&_a.title.value!==null){
+this.setFieldValidity("title",true);
+}
+}else{
+if(_a.title&&_a.title.value&&_a.title.value!==null){
+if(!this._toLoad){
+this._toLoad=[];
+}
+this.entryTitleSelect.value=_a.title.type;
+var _b=this._createEditor(_8,_a.title,true,_a.title.type==="html"||_a.title.type==="xhtml");
+_b.name="title";
+this._toLoad.push(_b);
+this.setFieldValidity("titleedit",true);
+this.setFieldValidity("title",true);
+}
+}
+},setAuthors:function(_c,_d,_e){
+if(!_d){
+dojox.atom.widget.FeedEntryEditor.superclass.setAuthors.call(this,_c,_d,_e);
+if(_e.authors&&_e.authors.length>0){
+this.setFieldValidity("authors",true);
+}
+}else{
+if(_e.authors&&_e.authors.length>0){
+this._editors.authors=this._createPeopleEditor(this.entryAuthorNode,{data:_e.authors,name:"Author"});
+this.setFieldValidity("authors",true);
+}
+}
+},setContributors:function(_f,_10,_11){
+if(!_10){
+dojox.atom.widget.FeedEntryEditor.superclass.setContributors.call(this,_f,_10,_11);
+if(_11.contributors&&_11.contributors.length>0){
+this.setFieldValidity("contributors",true);
+}
+}else{
+if(_11.contributors&&_11.contributors.length>0){
+this._editors.contributors=this._createPeopleEditor(this.entryContributorNode,{data:_11.contributors,name:"Contributor"});
+this.setFieldValidity("contributors",true);
+}
+}
+},setId:function(_12,_13,_14){
+if(!_13){
+dojox.atom.widget.FeedEntryEditor.superclass.setId.call(this,_12,_13,_14);
+if(_14.id&&_14.id!==null){
+this.setFieldValidity("id",true);
+}
+}else{
+if(_14.id&&_14.id!==null){
+this._editors.id=this._createEditor(_12,_14.id);
+this.setFieldValidity("id",true);
+}
+}
+},setUpdated:function(_15,_16,_17){
+if(!_16){
+dojox.atom.widget.FeedEntryEditor.superclass.setUpdated.call(this,_15,_16,_17);
+if(_17.updated&&_17.updated!==null){
+this.setFieldValidity("updated",true);
+}
+}else{
+if(_17.updated&&_17.updated!==null){
+this._editors.updated=this._createEditor(_15,_17.updated);
+this.setFieldValidity("updated",true);
+}
+}
+},setSummary:function(_18,_19,_1a){
+if(!_19){
+dojox.atom.widget.FeedEntryEditor.superclass.setSummary.call(this,_18,_19,_1a);
+if(_1a.summary&&_1a.summary.value&&_1a.summary.value!==null){
+this.setFieldValidity("summary",true);
+}
+}else{
+if(_1a.summary&&_1a.summary.value&&_1a.summary.value!==null){
+if(!this._toLoad){
+this._toLoad=[];
+}
+this.entrySummarySelect.value=_1a.summary.type;
+var _1b=this._createEditor(_18,_1a.summary,true,_1a.summary.type==="html"||_1a.summary.type==="xhtml");
+_1b.name="summary";
+this._toLoad.push(_1b);
+this.setFieldValidity("summaryedit",true);
+this.setFieldValidity("summary",true);
+}
+}
+},setContent:function(_1c,_1d,_1e){
+if(!_1d){
+dojox.atom.widget.FeedEntryEditor.superclass.setContent.call(this,_1c,_1d,_1e);
+if(_1e.content&&_1e.content.value&&_1e.content.value!==null){
+this.setFieldValidity("content",true);
+}
+}else{
+if(_1e.content&&_1e.content.value&&_1e.content.value!==null){
+if(!this._toLoad){
+this._toLoad=[];
+}
+this.entryContentSelect.value=_1e.content.type;
+var _1f=this._createEditor(_1c,_1e.content,true,_1e.content.type==="html"||_1e.content.type==="xhtml");
+_1f.name="content";
+this._toLoad.push(_1f);
+this.setFieldValidity("contentedit",true);
+this.setFieldValidity("content",true);
+}
+}
+},_createEditor:function(_20,_21,_22,rte){
+var _23;
+var box;
+if(!_21){
+if(rte){
+return {anchorNode:_20,entryValue:"",editor:null,generateEditor:function(){
+var _24=document.createElement("div");
+_24.innerHTML=this.entryValue;
+this.anchorNode.appendChild(_24);
+var _25=new dijit.Editor({},_24);
+this.editor=_25;
+return _25;
+}};
+}
+if(_22){
+_23=document.createElement("textarea");
+_20.appendChild(_23);
+dojo.style(_23,"width","90%");
+box=new dijit.form.SimpleTextarea({},_23);
+}else{
+_23=document.createElement("input");
+_20.appendChild(_23);
+dojo.style(_23,"width","95%");
+box=new dijit.form.TextBox({},_23);
+}
+box.attr("value","");
+return box;
+}
+var _26;
+if(_21.value!==undefined){
+_26=_21.value;
+}else{
+if(_21.attr){
+_26=_21.attr("value");
+}else{
+_26=_21;
+}
+}
+if(rte){
+if(_26.indexOf("<")!=-1){
+_26=_26.replace(/</g,"&lt;");
+}
+return {anchorNode:_20,entryValue:_26,editor:null,generateEditor:function(){
+var _27=document.createElement("div");
+_27.innerHTML=this.entryValue;
+this.anchorNode.appendChild(_27);
+var _28=new dijit.Editor({},_27);
+this.editor=_28;
+return _28;
+}};
+}
+if(_22){
+_23=document.createElement("textarea");
+_20.appendChild(_23);
+dojo.style(_23,"width","90%");
+box=new dijit.form.SimpleTextarea({},_23);
+}else{
+_23=document.createElement("input");
+_20.appendChild(_23);
+dojo.style(_23,"width","95%");
+box=new dijit.form.TextBox({},_23);
+}
+box.attr("value",_26);
+return box;
+},_switchEditor:function(_29){
+var _2a=null;
+var _2b=null;
+var _2c=null;
+if(dojo.isIE){
+_2b=_29.srcElement;
+}else{
+_2b=_29.target;
+}
+if(_2b===this.entryTitleSelect){
+_2c=this.entryTitleNode;
+_2a="title";
+}else{
+if(_2b===this.entrySummarySelect){
+_2c=this.entrySummaryNode;
+_2a="summary";
+}else{
+_2c=this.entryContentNode;
+_2a="content";
+}
+}
+var _2d=this._editors[_2a];
+var _2e;
+var _2f;
+if(_2b.value==="text"){
+if(_2d.declaredClass==="dijit.Editor"){
+_2f=_2d.attr("value",false);
+_2d.close(false,true);
+_2d.destroy();
+while(_2c.firstChild){
+dojo.destroy(_2c.firstChild);
+}
+_2e=this._createEditor(_2c,{value:_2f},true,false);
+this._editors[_2a]=_2e;
+}
+}else{
+if(_2d.declaredClass!="dijit.Editor"){
+_2f=_2d.attr("value");
+_2d.destroy();
+while(_2c.firstChild){
+dojo.destroy(_2c.firstChild);
+}
+_2e=this._createEditor(_2c,{value:_2f},true,true);
+_2e=dojo.hitch(_2e,_2e.generateEditor)();
+this._editors[_2a]=_2e;
+}
+}
+},_createPeopleEditor:function(_30,_31){
+var _32=document.createElement("div");
+_30.appendChild(_32);
+return new dojox.atom.widget.PeopleEditor(_31,_32);
+},saveEdits:function(){
+dojo.style(this.entrySaveCancelButtons,"display","none");
+dojo.style(this.entryEditButton,"display","");
+dojo.style(this.entryNewButton,"display","");
+var _33=false;
+var _34;
+var i;
+var _35;
+var _36;
+var _37;
+var _38;
+if(!this._new){
+_36=this.getEntry();
+if(this._editors.title&&(this._editors.title.attr("value")!=_36.title.value||this.entryTitleSelect.value!=_36.title.type)){
+_34=this._editors.title.attr("value");
+if(this.entryTitleSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+if(_34.indexOf("<div xmlns=\"http://www.w3.org/1999/xhtml\">")!==0){
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+}
+_36.title=new dojox.atom.io.model.Content("title",_34,null,this.entryTitleSelect.value);
+_33=true;
+}
+if(this._editors.id.attr("value")!=_36.id){
+_36.id=this._editors.id.attr("value");
+_33=true;
+}
+if(this._editors.summary&&(this._editors.summary.attr("value")!=_36.summary.value||this.entrySummarySelect.value!=_36.summary.type)){
+_34=this._editors.summary.attr("value");
+if(this.entrySummarySelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+if(_34.indexOf("<div xmlns=\"http://www.w3.org/1999/xhtml\">")!==0){
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+}
+_36.summary=new dojox.atom.io.model.Content("summary",_34,null,this.entrySummarySelect.value);
+_33=true;
+}
+if(this._editors.content&&(this._editors.content.attr("value")!=_36.content.value||this.entryContentSelect.value!=_36.content.type)){
+_34=this._editors.content.attr("value");
+if(this.entryContentSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+if(_34.indexOf("<div xmlns=\"http://www.w3.org/1999/xhtml\">")!==0){
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+}
+_36.content=new dojox.atom.io.model.Content("content",_34,null,this.entryContentSelect.value);
+_33=true;
+}
+if(this._editors.authors){
+if(_33){
+_36.authors=[];
+_37=this._editors.authors.getValues();
+for(i in _37){
+if(_37[i].name||_37[i].email||_37[i].uri){
+_36.addAuthor(_37[i].name,_37[i].email,_37[i].uri);
+}
+}
+}else{
+var _39=_36.authors;
+var _3a=function(_3b,_3c,uri){
+for(i in _39){
+if(_39[i].name===_3b&&_39[i].email===_3c&&_39[i].uri===uri){
+return true;
+}
+}
+return false;
+};
+_37=this._editors.authors.getValues();
+_35=false;
+for(i in _37){
+if(!_3a(_37[i].name,_37[i].email,_37[i].uri)){
+_35=true;
+break;
+}
+}
+if(_35){
+_36.authors=[];
+for(i in _37){
+if(_37[i].name||_37[i].email||_37[i].uri){
+_36.addAuthor(_37[i].name,_37[i].email,_37[i].uri);
+}
+}
+_33=true;
+}
+}
+}
+if(this._editors.contributors){
+if(_33){
+_36.contributors=[];
+_38=this._editors.contributors.getValues();
+for(i in _38){
+if(_38[i].name||_38[i].email||_38[i].uri){
+_36.addAuthor(_38[i].name,_38[i].email,_38[i].uri);
+}
+}
+}else{
+var _3d=_36.contributors;
+var _3e=function(_3f,_40,uri){
+for(i in _3d){
+if(_3d[i].name===_3f&&_3d[i].email===_40&&_3d[i].uri===uri){
+return true;
+}
+}
+return false;
+};
+_38=this._editors.contributors.getValues();
+_35=false;
+for(i in _38){
+if(_3e(_38[i].name,_38[i].email,_38[i].uri)){
+_35=true;
+break;
+}
+}
+if(_35){
+_36.contributors=[];
+for(i in _38){
+if(_38[i].name||_38[i].email||_38[i].uri){
+_36.addContributor(_38[i].name,_38[i].email,_38[i].uri);
+}
+}
+_33=true;
+}
+}
+}
+if(_33){
+dojo.publish(this.entrySelectionTopic,[{action:"update",source:this,entry:_36,callback:this._handleSave}]);
+}
+}else{
+this._new=false;
+_36=new dojox.atom.io.model.Entry();
+_34=this._editors.title.attr("value");
+if(this.entryTitleSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+_36.setTitle(_34,this.entryTitleSelect.value);
+_36.id=this._editors.id.attr("value");
+_37=this._editors.authors.getValues();
+for(i in _37){
+if(_37[i].name||_37[i].email||_37[i].uri){
+_36.addAuthor(_37[i].name,_37[i].email,_37[i].uri);
+}
+}
+_38=this._editors.contributors.getValues();
+for(i in _38){
+if(_38[i].name||_38[i].email||_38[i].uri){
+_36.addContributor(_38[i].name,_38[i].email,_38[i].uri);
+}
+}
+_34=this._editors.summary.attr("value");
+if(this.entrySummarySelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+_36.summary=new dojox.atom.io.model.Content("summary",_34,null,this.entrySummarySelect.value);
+_34=this._editors.content.attr("value");
+if(this.entryContentSelect.value==="xhtml"){
+_34=this._enforceXhtml(_34);
+_34="<div xmlns=\"http://www.w3.org/1999/xhtml\">"+_34+"</div>";
+}
+_36.content=new dojox.atom.io.model.Content("content",_34,null,this.entryContentSelect.value);
+dojo.style(this.entryNewButton,"display","");
+dojo.publish(this.entrySelectionTopic,[{action:"post",source:this,entry:_36}]);
+}
+this._editMode=false;
+this.setEntry(_36,this._feed,true);
+},_handleSave:function(_41,_42){
+this._editMode=false;
+this.clear();
+this.setEntry(_41,this.getFeed(),true);
+},cancelEdits:function(){
+this._new=false;
+dojo.style(this.entrySaveCancelButtons,"display","none");
+if(this._editable){
+dojo.style(this.entryEditButton,"display","");
+}
+dojo.style(this.entryNewButton,"display","");
+this._editMode=false;
+this.clearEditors();
+this.setEntry(this.getEntry(),this.getFeed(),true);
+},clear:function(){
+this._editable=false;
+this.clearEditors();
+dojox.atom.widget.FeedEntryEditor.superclass.clear.apply(this);
+if(this._contentEditor){
+this._contentEditor=this._setObject=this._oldContent=this._contentEditorCreator=null;
+this._editors={};
+}
+},clearEditors:function(){
+for(var key in this._editors){
+if(this._editors[key].declaredClass==="dijit.Editor"){
+this._editors[key].close(false,true);
+}
+this._editors[key].destroy();
+}
+this._editors={};
+},_enforceXhtml:function(_43){
+var _44=null;
+if(_43){
+var _45=/<br>/g;
+_44=_43.replace(_45,"<br/>");
+_44=this._closeTag(_44,"hr");
+_44=this._closeTag(_44,"img");
+}
+return _44;
+},_closeTag:function(_46,tag){
+var _47="<"+tag;
+var _48=_46.indexOf(_47);
+if(_48!==-1){
+while(_48!==-1){
+var _49="";
+var _4a=false;
+for(var i=0;i<_46.length;i++){
+var c=_46.charAt(i);
+if(i<=_48||_4a){
+_49+=c;
+}else{
+if(c===">"){
+_49+="/";
+_4a=true;
+}
+_49+=c;
+}
+}
+_46=_49;
+_48=_46.indexOf(_47,_48+1);
+}
+}
+return _46;
+},_toggleNew:function(){
+dojo.style(this.entryNewButton,"display","none");
+dojo.style(this.entryEditButton,"display","none");
+dojo.style(this.entrySaveCancelButtons,"display","");
+this.entrySummarySelect.value="text";
+this.entryContentSelect.value="text";
+this.entryTitleSelect.value="text";
+this.clearNodes();
+this._new=true;
+var _4b=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _4c=new dojox.atom.widget.EntryHeader({title:_4b.title});
+this.entryTitleHeader.appendChild(_4c.domNode);
+this._editors.title=this._createEditor(this.entryTitleNode,null);
+this.setFieldValidity("title",true);
+var _4d=new dojox.atom.widget.EntryHeader({title:_4b.authors});
+this.entryAuthorHeader.appendChild(_4d.domNode);
+this._editors.authors=this._createPeopleEditor(this.entryAuthorNode,{name:"Author"});
+this.setFieldValidity("authors",true);
+var _4e=new dojox.atom.widget.EntryHeader({title:_4b.contributors});
+this.entryContributorHeader.appendChild(_4e.domNode);
+this._editors.contributors=this._createPeopleEditor(this.entryContributorNode,{name:"Contributor"});
+this.setFieldValidity("contributors",true);
+var _4f=new dojox.atom.widget.EntryHeader({title:_4b.id});
+this.entryIdHeader.appendChild(_4f.domNode);
+this._editors.id=this._createEditor(this.entryIdNode,null);
+this.setFieldValidity("id",true);
+var _50=new dojox.atom.widget.EntryHeader({title:_4b.updated});
+this.entryUpdatedHeader.appendChild(_50.domNode);
+this._editors.updated=this._createEditor(this.entryUpdatedNode,null);
+this.setFieldValidity("updated",true);
+var _51=new dojox.atom.widget.EntryHeader({title:_4b.summary});
+this.entrySummaryHeader.appendChild(_51.domNode);
+this._editors.summary=this._createEditor(this.entrySummaryNode,null,true);
+this.setFieldValidity("summaryedit",true);
+this.setFieldValidity("summary",true);
+var _52=new dojox.atom.widget.EntryHeader({title:_4b.content});
+this.entryContentHeader.appendChild(_52.domNode);
+this._editors.content=this._createEditor(this.entryContentNode,null,true);
+this.setFieldValidity("contentedit",true);
+this.setFieldValidity("content",true);
+this._displaySections();
+},_displaySections:function(){
+dojo.style(this.entrySummarySelect,"display","none");
+dojo.style(this.entryContentSelect,"display","none");
+dojo.style(this.entryTitleSelect,"display","none");
+if(this.isFieldValid("contentedit")){
+dojo.style(this.entryContentSelect,"display","");
+}
+if(this.isFieldValid("summaryedit")){
+dojo.style(this.entrySummarySelect,"display","");
+}
+if(this.isFieldValid("titleedit")){
+dojo.style(this.entryTitleSelect,"display","");
+}
+dojox.atom.widget.FeedEntryEditor.superclass._displaySections.apply(this);
+if(this._toLoad){
+for(var i in this._toLoad){
+var _53;
+if(this._toLoad[i].generateEditor){
+_53=dojo.hitch(this._toLoad[i],this._toLoad[i].generateEditor)();
+}else{
+_53=this._toLoad[i];
+}
+this._editors[this._toLoad[i].name]=_53;
+this._toLoad[i]=null;
+}
+this._toLoad=null;
+}
+}});
+dojo.declare("dojox.atom.widget.PeopleEditor",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:dojo.cache("dojox.atom","widget/templates/PeopleEditor.html","<div class=\"peopleEditor\">\n\t<table style=\"width: 100%\">\n\t\t<tbody dojoAttachPoint=\"peopleEditorEditors\"></tbody>\n\t</table>\n\t<span class=\"peopleEditorButton\" dojoAttachPoint=\"peopleEditorButton\" dojoAttachEvent=\"onclick:_add\"></span>\n</div>\n"),_rows:[],_editors:[],_index:0,_numRows:0,postCreate:function(){
+var _54=dojo.i18n.getLocalization("dojox.atom.widget","PeopleEditor");
+if(this.name){
+if(this.name=="Author"){
+this.peopleEditorButton.appendChild(document.createTextNode("["+_54.addAuthor+"]"));
+}else{
+if(this.name=="Contributor"){
+this.peopleEditorButton.appendChild(document.createTextNode("["+_54.addContributor+"]"));
+}
+}
+}else{
+this.peopleEditorButton.appendChild(document.createTextNode("["+_54.add+"]"));
+}
+this._editors=[];
+if(!this.data||this.data.length===0){
+this._createEditors(null,null,null,0,this.name);
+this._index=1;
+}else{
+for(var i in this.data){
+this._createEditors(this.data[i].name,this.data[i].email,this.data[i].uri,i);
+this._index++;
+this._numRows++;
+}
+}
+},destroy:function(){
+for(var key in this._editors){
+for(var _55 in this._editors[key]){
+this._editors[key][_55].destroy();
+}
+}
+this._editors=[];
+},_createEditors:function(_56,_57,uri,_58,_59){
+var row=document.createElement("tr");
+this.peopleEditorEditors.appendChild(row);
+row.id="removeRow"+_58;
+var _5a=document.createElement("td");
+_5a.setAttribute("align","right");
+row.appendChild(_5a);
+_5a.colSpan=2;
+if(this._numRows>0){
+var hr=document.createElement("hr");
+_5a.appendChild(hr);
+hr.id="hr"+_58;
+}
+row=document.createElement("span");
+_5a.appendChild(row);
+row.className="peopleEditorButton";
+dojo.style(row,"font-size","x-small");
+dojo.connect(row,"onclick",this,"_removeEditor");
+row.id="remove"+_58;
+_5a=document.createTextNode("[X]");
+row.appendChild(_5a);
+row=document.createElement("tr");
+this.peopleEditorEditors.appendChild(row);
+row.id="editorsRow"+_58;
+var _5b=document.createElement("td");
+row.appendChild(_5b);
+dojo.style(_5b,"width","20%");
+_5a=document.createElement("td");
+row.appendChild(_5a);
+row=document.createElement("table");
+_5b.appendChild(row);
+dojo.style(row,"width","100%");
+_5b=document.createElement("tbody");
+row.appendChild(_5b);
+row=document.createElement("table");
+_5a.appendChild(row);
+dojo.style(row,"width","100%");
+_5a=document.createElement("tbody");
+row.appendChild(_5a);
+this._editors[_58]=[];
+this._editors[_58].push(this._createEditor(_56,_59+"name"+_58,"Name:",_5b,_5a));
+this._editors[_58].push(this._createEditor(_57,_59+"email"+_58,"Email:",_5b,_5a));
+this._editors[_58].push(this._createEditor(uri,_59+"uri"+_58,"URI:",_5b,_5a));
+},_createEditor:function(_5c,id,_5d,_5e,_5f){
+var row=document.createElement("tr");
+_5e.appendChild(row);
+var _60=document.createElement("label");
+_60.setAttribute("for",id);
+_60.appendChild(document.createTextNode(_5d));
+_5e=document.createElement("td");
+_5e.appendChild(_60);
+row.appendChild(_5e);
+row=document.createElement("tr");
+_5f.appendChild(row);
+_5f=document.createElement("td");
+row.appendChild(_5f);
+var _61=document.createElement("input");
+_61.setAttribute("id",id);
+_5f.appendChild(_61);
+dojo.style(_61,"width","95%");
+var box=new dijit.form.TextBox({},_61);
+box.attr("value",_5c);
+return box;
+},_removeEditor:function(_62){
+var _63=null;
+if(dojo.isIE){
+_63=_62.srcElement;
+}else{
+_63=_62.target;
+}
+var id=_63.id;
+id=id.substring(6);
+for(var key in this._editors[id]){
+this._editors[id][key].destroy();
+}
+var _64=dojo.byId("editorsRow"+id);
+var _65=_64.parentNode;
+_65.removeChild(_64);
+_64=dojo.byId("removeRow"+id);
+_65=_64.parentNode;
+_65.removeChild(_64);
+this._numRows--;
+if(this._numRows===1&&_65.firstChild.firstChild.firstChild.tagName.toLowerCase()==="hr"){
+_64=_65.firstChild.firstChild;
+_64.removeChild(_64.firstChild);
+}
+this._editors[id]=null;
+},_add:function(){
+this._createEditors(null,null,null,this._index);
+this._index++;
+this._numRows++;
+},getValues:function(){
+var _66=[];
+for(var i in this._editors){
+if(this._editors[i]){
+_66.push({name:this._editors[i][0].attr("value"),email:this._editors[i][1].attr("value"),uri:this._editors[i][2].attr("value")});
+}
+}
+return _66;
+}});
+}
Index: trunk/web/dojo/dojox/atom/widget/nls/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Delete]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[close]","title":"Title","authors":"Authors","summary":"Summary","content":"Content","contributors":"Contributors","updated":"Updated","displayOptions":"[display options]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ca/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ca/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ca/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[tanca]","title":"Títol","authors":"Autors","summary":"Resum","content":"Contingut","contributors":"Col·laboradors","updated":"Actualitzat","displayOptions":"[opcions de visualització]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ca/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ca/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ca/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Suprimeix]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ca/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ca/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ca/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Afegeix","addAuthor":"Afegeix un autor","addContributor":"Afegeix un col·laborador"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ca/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ca/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ca/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[edita]","save":"[desa]","cancel":"[cancel·la]","doNew":"[nou]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuidores","updated":"Atualizado","displayOptions":"[exibir opções]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Excluir]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Adicionar","addAuthor":"Adicionar Autor","addContributor":"Adicionar Contribuidor"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[editar]","save":"[salvar]","cancel":"[cancelar]","doNew":"[novo]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/tr/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/tr/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/tr/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Ekle","addAuthor":"Yazar Ekle","addContributor":"Katkıda Bulunan Ekle"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/tr/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/tr/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/tr/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[düzenle]","save":"[kaydet]","cancel":"[iptal]","doNew":"[yeni]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/tr/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/tr/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/tr/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[kapat]","title":"Başlık","authors":"Yazarlar","summary":"Özet","content":"İçerik","contributors":"Katkıda Bulunanlar","updated":"Güncelleştirildi","displayOptions":"[görüntüleme seçenekleri]","id":"Kimlik"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/tr/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/tr/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/tr/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Sil]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ru/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ru/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ru/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Добавить","addAuthor":"Добавить автора","addContributor":"Добавить участника"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ru/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ru/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ru/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[изменить]","save":"[сохранить]","cancel":"[отмена]","doNew":"[создать]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ru/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ru/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ru/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[закрыть]","title":"Название","authors":"Авторы","summary":"Сводка","content":"Информационное наполнение","contributors":"Участники","updated":"Обновлено","displayOptions":"[показать опции]","id":"ИД"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ru/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ru/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ru/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Удалить]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/el/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/el/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/el/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Προσθήκη","addAuthor":"Προσθήκη συντάκτη","addContributor":"Προσθήκη συνεισφέροντα"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/el/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/el/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/el/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[τροποποίηση]","save":"[αποθήκευση]","cancel":"[ακύρωση]","doNew":"[δημιουργία]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/el/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/el/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/el/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[κλείσιμο]","title":"Τίτλος","authors":"Συντάκτες","summary":"Περίληψη","content":"Περιεχόμενο","contributors":"Συνεισφέροντες","updated":"Ενημερώθηκε","displayOptions":"[επιλογές παρουσίασης]","id":"Ταυτότητα"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/el/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/el/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/el/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Διαγραφή]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ar/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ar/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ar/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"اضافة","addAuthor":"اضافة مؤلف","addContributor":"اضافة مشارك "})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ar/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ar/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ar/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[تحرير]","save":"[حفظ]","cancel":"[الغاء]","doNew":"[جديد]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ar/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ar/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ar/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[اغلاق]","title":"العنوان","authors":"المؤلفين","summary":"الملخص","content":"محتويات","contributors":"المساهمين","updated":"تعديل في","displayOptions":"[اختيارات العرض]","id":"الكود"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ar/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ar/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ar/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[حذف]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/cs/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/cs/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/cs/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[zavřít]","title":"Název","authors":"Autoři","summary":"Souhrn","content":"Obsah","contributors":"Přispěvatelé","updated":"Aktualizováno","displayOptions":"[volby zobrazení]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/cs/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/cs/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/cs/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Odstranit]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/cs/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/cs/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/cs/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Přidat","addAuthor":"Přidat autora","addContributor":"Přidat přispěvatele"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/cs/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/cs/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/cs/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[upravit]","save":"[uložit]","cancel":"[storno]","doNew":"[nové]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Add","addAuthor":"Add Author","addContributor":"Add Contributor"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/es/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/es/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/es/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[cerrar]","title":"Título","authors":"Autores","summary":"Resumen","content":"Contenido","contributors":"Colaboradores","updated":"Actualizado","displayOptions":"[opciones de visualización]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/es/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/es/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/es/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Suprimir]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/es/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/es/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/es/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Añadir","addAuthor":"Añadir autor","addContributor":"Añadir colaborador"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/es/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/es/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/es/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[nuevo]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ko/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ko/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ko/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[닫기]","title":"제목","authors":"작성자","summary":"요약","content":"컨텐츠","contributors":"속성","updated":"갱신","displayOptions":"[옵션 표시]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ko/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ko/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ko/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[삭제]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ko/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ko/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ko/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"추가","addAuthor":"작성자 추가","addContributor":"제공자 추가"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ko/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ko/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ko/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[편집]","save":"[저장]","cancel":"[취소]","doNew":"[새로 작성]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/it/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/it/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/it/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[chiudi]","title":"Titolo","authors":"Autori","summary":"Riepilogo","content":"Indice","contributors":"Collaboratori","updated":"Aggiornato","displayOptions":"[visualizza opzioni]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/it/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/it/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/it/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Cancella]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/it/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/it/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/it/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Aggiungi","addAuthor":"Aggiungi autore","addContributor":"Aggiungi collaboratori"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/it/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/it/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/it/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[modifica]","save":"[salva]","cancel":"[annulla]","doNew":"[nuovo]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sk/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sk/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sk/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[zatvoriť]","title":"Nadpis","authors":"Autori","summary":"Súhrn","content":"Obsah","contributors":"Prispievatelia","updated":"Aktualizovaný","displayOptions":"[zobraziť voľby]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sk/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sk/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sk/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Vymazať]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sk/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sk/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sk/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Pridať","addAuthor":"Pridať autora","addContributor":"Pridať prispievateľa"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sk/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sk/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sk/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[upraviť]","save":"[uložiť]","cancel":"[zrušiť]","doNew":"[nový]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sl/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sl/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sl/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[urejanje]","save":"[shrani]","cancel":"[prekliči]","doNew":"[novo]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sl/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sl/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sl/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[zapri]","title":"Naslov","authors":"Avtorji","summary":"Povzetek","content":"Vsebina","contributors":"Kontributorji","updated":"Posodobljeno","displayOptions":"[možnosti prikaza]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sl/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sl/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sl/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Izbriši]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sl/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sl/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sl/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Dodaj","addAuthor":"Dodaj avtorja","addContributor":"Dodaj kontributorja,"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/da/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/da/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/da/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Tilføj","addAuthor":"Tilføj forfatter","addContributor":"Tilføj bidragyder"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/da/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/da/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/da/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[redigér]","save":"[gem]","cancel":"[annullér]","doNew":"[ny]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/da/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/da/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/da/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[luk]","title":"Titel","authors":"Forfattere","summary":"Summary","content":"Indhold","contributors":"Bidragydere","updated":"Opdateret","displayOptions":"[fremvisningsvalg]","id":"Id"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/da/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/da/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/da/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Slet]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sv/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sv/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sv/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[Stäng]","title":"Rubrik","authors":"Författare","summary":"Sammanfattning","content":"Innehåll","contributors":"Medverkande","updated":"Uppdaterat","displayOptions":"[Visningsalternativ]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sv/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sv/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sv/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Ta bort]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sv/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sv/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sv/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Lägg til ","addAuthor":"Lägg till författare","addContributor":"Lägg till medverkande"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/sv/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/sv/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/sv/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[Redigera]","save":"[Spara]","cancel":"[Avbryt]","doNew":"[Nytt]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/de/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/de/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/de/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[Schließen]","title":"Titel","authors":"Autoren","summary":"Zusammenfassung","content":"Inhalt","contributors":"Mitwirkende","updated":"Aktualisiert","displayOptions":"[Anzeigeoptionen]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/de/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/de/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/de/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Löschen]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/de/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/de/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/de/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Hinzufügen","addAuthor":"Autor hinzufügen","addContributor":"Mitwirkenden hinzufügen"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/de/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/de/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/de/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[Bearbeiten]","save":"[Speichern]","cancel":"[Abbrechen]","doNew":"[Neu]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ja/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ja/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ja/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[閉じる]","title":"タイトル","authors":"作成者","summary":"要約","content":"内容","contributors":"貢献者","updated":"更新","displayOptions":"[表示オプション]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ja/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ja/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ja/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[削除]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ja/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ja/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ja/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"追加","addAuthor":"作成者の追加","addContributor":"貢献者の追加"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ja/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ja/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ja/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[編集]","save":"[保存]","cancel":"[キャンセル]","doNew":"[新規]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/he/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/he/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/he/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[סגירה]","title":"כותרת","authors":"מחברים","summary":"סיכום","content":"תוכן","contributors":"תורמים","updated":"עודכן","displayOptions":"[הצגת אפשרויות]","id":"זיהוי"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/he/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/he/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/he/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[מחיקה]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/he/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/he/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/he/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"הוספה","addAuthor":"הוספת מחבר","addContributor":"הוספת תורם"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/he/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/he/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/he/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[עריכה]","save":"[שמירה]","cancel":"[ביטול]","doNew":"[חדש]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fi/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fi/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fi/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[sulje]","title":"Otsikko","authors":"Tekijät","summary":"Yhteenveto","content":"Sisältö","contributors":"Osallistujat","updated":"Päivitetty","displayOptions":"[näyttöasetukset]","id":"Tunnus"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fi/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fi/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fi/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Poista]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fi/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fi/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fi/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Lisää","addAuthor":"Lisää tekijä","addContributor":"Lisää osallistuja"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fi/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fi/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fi/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[muokkaa]","save":"[tallenna]","cancel":"[peruuta]","doNew":"[uusi]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nb/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nb/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nb/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[lukk]","title":"Tittel","authors":"Forfattere","summary":"Sammendrag","content":"Innhold","contributors":"Bidragsytere","updated":"Oppdatert","displayOptions":"[visningsalternativer]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nb/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nb/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nb/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Slett]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nb/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nb/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nb/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Legg til","addAuthor":"Legg til forfatter","addContributor":"Legg til bidragsyter"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nb/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nb/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nb/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[rediger]","save":"[lagre]","cancel":"[avbryt]","doNew":"[ny(tt)]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuintes","updated":"Actualizado","displayOptions":"[opções de visualização]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Eliminar]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt-pt/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt-pt/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt-pt/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Adicionar","addAuthor":"Adicionar autor","addContributor":"Adicionar contribuinte"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[novo]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fr/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fr/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fr/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[fermer]","title":"Titre","authors":"Auteurs","summary":"Récapitulatif","content":"Contenu","contributors":"Collaborateurs","updated":"Mis à jour","displayOptions":"[options d'affichage]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fr/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fr/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fr/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Supprimer]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fr/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fr/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fr/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Ajouter","addAuthor":"Ajouter un auteur","addContributor":"Ajouter un collaborateur"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/fr/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/fr/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/fr/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[éditer]","save":"[sauvegarder]","cancel":"[annuler]","doNew":"[nouveau]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[edit]","save":"[save]","cancel":"[cancel]","doNew":"[new]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nl/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nl/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nl/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Toevoegen","addAuthor":"Auteur toevoegen","addContributor":"Deelnemer toevoegen"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nl/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nl/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nl/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[bewerken]","save":"[opslaan]","cancel":"[annuleren]","doNew":"[nieuw]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nl/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nl/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nl/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[sluiten]","title":"Titel","authors":"Auteurs","summary":"Overzicht","content":"Content","contributors":"Deelnemers","updated":"Bijgewerkt","displayOptions":"[weergaveopties]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/nl/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/nl/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/nl/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Wissen]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[關閉]","title":"標題","authors":"作者","summary":"摘要","content":"內容","contributors":"提出者","updated":"已更新","displayOptions":"[顯示選項]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[刪除]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh-tw/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh-tw/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh-tw/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"新增","addAuthor":"新增作者","addContributor":"新增提出者"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[編輯]","save":"[儲存]","cancel":"[取消]","doNew":"[新建]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pl/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pl/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pl/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[Zamknij]","title":"Tytuł","authors":"Autorzy","summary":"Podsumowanie","content":"Treść","contributors":"Kontrybutorzy","updated":"Zaktualizowano","displayOptions":"[Opcje wyświetlania]","id":"Identyfikator"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pl/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pl/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pl/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Usuń]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pl/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pl/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pl/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Dodaj","addAuthor":"Dodaj autora","addContributor":"Dodaj kontrybutora"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/pl/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/pl/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/pl/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[Edytuj]","save":"[Zapisz]","cancel":"[Anuluj]","doNew":"[Nowy]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/th/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/th/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/th/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[ปิด]","title":"ชื่อเรื่อง","authors":"ผู้เขียน","summary":"สรุป","content":"เนื้อหา","contributors":"ผู้อนุเคราะห์","updated":"อัพเดต","displayOptions":"[อ็อพชันการแสดงผล]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/th/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/th/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/th/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[ลบ]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/th/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/th/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/th/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"เพิ่ม","addAuthor":"เพิ่มผู้เขียน","addContributor":"เพิ่มผู้อนุเคราะห์"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/th/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/th/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/th/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[แก้ไข]","save":"[บันทึก]","cancel":"[ยกเลิก]","doNew":"[สร้าง]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/hu/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/hu/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/hu/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[bezárás]","title":"Cím","authors":"Szerzők","summary":"Összegzés","content":"Tartalom","contributors":"Közreműködők","updated":"Frissítve","displayOptions":"[megjelenítési beállítások]","id":"Azonosító"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/hu/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/hu/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/hu/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Törlés]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/hu/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/hu/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/hu/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Hozzáadás","addAuthor":"Szerző hozzáadása","addContributor":"Közreműködő hozzáadása"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/hu/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/hu/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/hu/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[szerkesztés]","save":"[mentés]","cancel":"[mégse]","doNew":"[új]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ro/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ro/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ro/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[închidere]","title":"Titlu","authors":"Autori","summary":"Sumar","content":"Conţinut","contributors":"Contribuitori","updated":"Actualizat","displayOptions":"[opţiuni afişare]","id":"ID"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ro/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ro/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ro/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[Ştergere]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ro/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ro/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ro/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"Adăugare","addAuthor":"Adăugare autor","addContributor":"Adăugare contribuitor"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/ro/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/ro/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/ro/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[editare]","save":"[salvare]","cancel":"[anulare]","doNew":"[nou]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1 @@
+({"close":"[关闭]","title":"标题","authors":"作者","summary":"摘要","content":"内容","contributors":"内容添加者","updated":"更新时间","displayOptions":"[显示选项]","id":"标识"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh/FeedViewerEntry.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh/FeedViewerEntry.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh/FeedViewerEntry.js	(revision 9)
@@ -0,0 +1 @@
+({"deleteButton":"[删除]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh/PeopleEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh/PeopleEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh/PeopleEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"add":"添加","addAuthor":"添加作者","addContributor":"添加内容添加者"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/nls/zh/FeedEntryEditor.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/nls/zh/FeedEntryEditor.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/nls/zh/FeedEntryEditor.js	(revision 9)
@@ -0,0 +1 @@
+({"edit":"[编辑]","save":"[保存]","cancel":"[取消]","doNew":"[新建]"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/templates/EntryHeader.html
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/EntryHeader.html	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/EntryHeader.html	(revision 9)
@@ -0,0 +1 @@
+<span dojoAttachPoint="entryHeaderNode" class="entryHeaderNode"></span>
Index: trunk/web/dojo/dojox/atom/widget/templates/PeopleEditor.html
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/PeopleEditor.html	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/PeopleEditor.html	(revision 9)
@@ -0,0 +1,6 @@
+<div class="peopleEditor">
+	<table style="width: 100%">
+		<tbody dojoAttachPoint="peopleEditorEditors"></tbody>
+	</table>
+	<span class="peopleEditorButton" dojoAttachPoint="peopleEditorButton" dojoAttachEvent="onclick:_add"></span>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/templates/FeedEntryEditor.html
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/FeedEntryEditor.html	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/FeedEntryEditor.html	(revision 9)
@@ -0,0 +1,195 @@
+<div class="feedEntryViewer">
+    <table border="0" width="100%" class="feedEntryViewerMenuTable" dojoAttachPoint="feedEntryViewerMenu" style="display: none;">
+        <tr width="100%"  dojoAttachPoint="entryCheckBoxDisplayOptions">
+        	<td align="left" dojoAttachPoint="entryNewButton">
+                <span class="feedEntryViewerMenu" dojoAttachPoint="doNew" dojoAttachEvent="onclick:_toggleNew"></span>
+        	</td>
+            <td align="left" dojoAttachPoint="entryEditButton" style="display: none;">
+                <span class="feedEntryViewerMenu" dojoAttachPoint="edit" dojoAttachEvent="onclick:_toggleEdit"></span>
+            </td>
+            <td align="left" dojoAttachPoint="entrySaveCancelButtons" style="display: none;">
+                <span class="feedEntryViewerMenu" dojoAttachPoint="save" dojoAttachEvent="onclick:saveEdits"></span>
+                <span class="feedEntryViewerMenu" dojoAttachPoint="cancel" dojoAttachEvent="onclick:cancelEdits"></span>
+            </td>
+            <td align="right">
+                <span class="feedEntryViewerMenu" dojoAttachPoint="displayOptions" dojoAttachEvent="onclick:_toggleOptions"></span>
+            </td>
+        </tr>
+        <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow" width="100%" style="display: none;">
+            <td dojoAttachPoint="feedEntryCelltitle">
+                <input type="checkbox" name="title" value="Title" dojoAttachPoint="feedEntryCheckBoxTitle" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelTitle"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellauthors">
+                <input type="checkbox" name="authors" value="Authors" dojoAttachPoint="feedEntryCheckBoxAuthors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelAuthors"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellcontributors">
+                <input type="checkbox" name="contributors" value="Contributors" dojoAttachPoint="feedEntryCheckBoxContributors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContributors"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellid">
+                <input type="checkbox" name="id" value="Id" dojoAttachPoint="feedEntryCheckBoxId" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelId"></label>
+            </td>
+            <td rowspan="2" align="right">
+                <span class="feedEntryViewerMenu" dojoAttachPoint="close" dojoAttachEvent="onclick:_toggleOptions"></span>
+            </td>
+		</tr>
+		<tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow2" width="100%" style="display: none;">
+            <td dojoAttachPoint="feedEntryCellupdated">
+                <input type="checkbox" name="updated" value="Updated" dojoAttachPoint="feedEntryCheckBoxUpdated" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelUpdated"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellsummary">
+                <input type="checkbox" name="summary" value="Summary" dojoAttachPoint="feedEntryCheckBoxSummary" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelSummary"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellcontent">
+                <input type="checkbox" name="content" value="Content" dojoAttachPoint="feedEntryCheckBoxContent" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContent"></label>
+            </td>
+        </tr>
+    </table>
+    
+    <table class="feedEntryViewerContainer" border="0" width="100%">
+        <tr class="feedEntryViewerTitle" dojoAttachPoint="entryTitleRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryTitleHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td>
+                        	<select dojoAttachPoint="entryTitleSelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+                        		<option value="text">Text</option>
+								<option value="html">HTML</option>
+								<option value="xhtml">XHTML</option>
+                        	</select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td colspan="2" dojoAttachPoint="entryTitleNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+
+        <tr class="feedEntryViewerAuthor" dojoAttachPoint="entryAuthorRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryAuthorHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryAuthorNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+
+        <tr class="feedEntryViewerContributor" dojoAttachPoint="entryContributorRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryContributorHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryContributorNode" class="feedEntryViewerContributorNames">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+        
+        <tr class="feedEntryViewerId" dojoAttachPoint="entryIdRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryIdHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryIdNode" class="feedEntryViewerIdText">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    
+        <tr class="feedEntryViewerUpdated" dojoAttachPoint="entryUpdatedRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryUpdatedHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryUpdatedNode" class="feedEntryViewerUpdatedText">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    
+        <tr class="feedEntryViewerSummary" dojoAttachPoint="entrySummaryRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2" colspan="2">
+							<span class="lp" dojoAttachPoint="entrySummaryHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td>
+                        	<select dojoAttachPoint="entrySummarySelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+                        		<option value="text">Text</option>
+								<option value="html">HTML</option>
+								<option value="xhtml">XHTML</option>
+                        	</select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entrySummaryNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    
+        <tr class="feedEntryViewerContent" dojoAttachPoint="entryContentRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryContentHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td>
+                        	<select dojoAttachPoint="entryContentSelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+                        		<option value="text">Text</option>
+								<option value="html">HTML</option>
+								<option value="xhtml">XHTML</option>
+                        	</select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryContentNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    </table>
+</div>
Index: trunk/web/dojo/dojox/atom/widget/templates/FeedViewerGrouping.html
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/FeedViewerGrouping.html	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/FeedViewerGrouping.html	(revision 9)
@@ -0,0 +1,4 @@
+<tr dojoAttachPoint="groupingNode" class="feedViewerGrouping">
+	<td colspan="2" dojoAttachPoint="titleNode" class="feedViewerGroupingTitle">
+	</td>
+</tr>
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/templates/FeedViewer.html
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/FeedViewer.html	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/FeedViewer.html	(revision 9)
@@ -0,0 +1,6 @@
+<div class="feedViewerContainer" dojoAttachPoint="feedViewerContainerNode">
+	<table cellspacing="0" cellpadding="0" class="feedViewerTable">
+		<tbody dojoAttachPoint="feedViewerTableBody" class="feedViewerTableBody">
+		</tbody>
+	</table>
+</div>
Index: trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css	(revision 9)
@@ -0,0 +1,84 @@
+.feedEntryEditor {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryEditorMenuTable {
+        background: #C0C0C0;      
+        border:2px solid;
+        border-top-color: lightgrey;
+        border-left-color: lightgrey;
+        border-right-color: darkgray;
+        border-bottom-color: darkgray;
+}
+.feedEntryEditorMenu {
+        cursor: pointer;
+        color:#0000FF;
+        text-align: left;
+        font-size:  small;
+}
+.feedEntryEditorDisplayCheckbox {
+        font-size:  small;
+        text-align: left;
+}
+.feedEntryEditorMenu:hover {
+        text-decoration: underline;
+}
+.feedEntryEditorTitle {
+        color:#000000;
+        background: #FFFFFF;
+        text-align: left;
+        #padding-left: 10px;
+        font-size:  125%;
+        font-weight: bold; 
+}
+.feedEntryEditorAuthor {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryEditorAuthorNames {
+        color:#000000;
+        background: #FFFFFF;
+        text-align: left;
+        #padding-left: 10px;
+        font-size:  110%;
+        font-style: italic;
+        font-weight: normal;
+}
+.feedEntryEditorSummary {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryEditorUpdated {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryEditorUpdatedText {
+        color:#000000;
+        background: #FFFFFF;
+        font-size:  110%;
+        font-style: italic;
+        font-weight: normal;
+}
+.feedEntryEditorId {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryEditorIdText {
+        color:#000000;
+        background: #FFFFFF;
+        font-style: italic;
+        font-size:  110%;
+        font-weight: normal;
+}
+.feedEntryEditorContent {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryEditorContributorNames {
+        color:#000000;
+        text-align: left;
+        #padding-left: 10px;
+        font-size:  125%;
+        font-style: italic;
+        font-weight: normal;
+}
Index: trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css	(revision 9)
@@ -0,0 +1,8 @@
+.feedViewerGrouping {
+}
+.feedViewerGroupingTitle {
+	font-weight: bold;
+	color:#606060;
+	border-bottom:1px solid #909090;
+	padding-top: 4px;
+}
Index: trunk/web/dojo/dojox/atom/widget/templates/css/EntryHeader.css
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/css/EntryHeader.css	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/css/EntryHeader.css	(revision 9)
@@ -0,0 +1,27 @@
+
+.containerNode {
+        visibility : visible;
+}
+.graphic-tab-lgray {
+		margin-bottom: 10px;
+}
+.newgraphic-tab-lgray {
+        border-bottom: #d9d9d9 solid 7px;
+}
+td.lp { 
+        padding: 0px 13px 0px 10px;
+        font-weight: bold;
+        background: #d9d9d9;
+        border-bottom: #d9d9d9 solid 7px;
+}
+td.lp2 { 
+        background: #FFFFFF;
+        border-bottom: #d9d9d9 solid 7px;
+}
+span.lp {
+        padding: 0px 13px 0px 10px;
+        font-weight: bold;
+        background: #d9d9d9;
+        border-bottom: #d9d9d9 solid 7px;
+		width: auto;
+}
Index: trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewer.css
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewer.css	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewer.css	(revision 9)
@@ -0,0 +1,14 @@
+.feedViewerTable {
+	font-size: small;
+	width:100%;
+	cursor:default;
+	padding:2px;
+}
+.feedViewerTable, .feedViewerTable table {
+	border-width: 0;
+	margin: 0;
+}
+.feedViewerTableBody {
+	overflow-x: auto;
+	overflow-y: auto;
+}
Index: trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css	(revision 9)
@@ -0,0 +1,90 @@
+.feedEntryViewer {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryViewerMenuTable {
+        background: #C0C0C0;      
+        border:2px solid;
+        border-top-color: lightgrey;
+        border-left-color: lightgrey;
+        border-right-color: darkgray;
+        border-bottom-color: darkgray;
+		margin: 0;
+}
+.feedEntryViewerMenu, .peopleEditorButton {
+        cursor: pointer;
+        color:#0000FF;
+        text-align: left;
+        font-size:  small;
+}
+.feedEntryViewerDisplayCheckbox {
+        font-size:  small;
+        text-align: left;
+}
+.feedEntryViewerMenu:hover, .peopleEditorButton:hover {
+        text-decoration: underline;
+}
+.feedEntryViewerContainer, .feedEntryViewerContainer table {
+		border-width: 0;
+		margin: 0;
+}
+.feedEntryViewerTitle {
+        color:#000000;
+        background: #FFFFFF;
+        text-align: left;
+        
+        font-size:  125%;
+        font-weight: bold; 
+}
+.feedEntryViewerAuthor {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryViewerAuthorNames {
+        color:#000000;
+        background: #FFFFFF;
+        text-align: left;
+        
+        font-size:  110%;
+        font-style: italic;
+        font-weight: normal;
+}
+.feedEntryViewerSummary {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryViewerUpdated {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryViewerUpdatedText {
+        color:#000000;
+        background: #FFFFFF;
+        font-size:  110%;
+        font-style: italic;
+        font-weight: normal;
+}
+.feedEntryViewerId {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryViewerIdText {
+        color:#000000;
+        background: #FFFFFF;
+        font-style: italic;
+        font-size:  110%;
+        font-weight: normal;
+}
+.feedEntryViewerContent {
+        color:#000000;
+        background: #FFFFFF;
+}
+.feedEntryViewerContributorNames {
+        color:#000000;
+        text-align: left;
+        
+        font-size:  125%;
+        font-weight: normal;
+}
+.feedEntryViewer table {
+}
Index: trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css	(revision 9)
@@ -0,0 +1,60 @@
+.feedViewerEntry {
+        background: #F0F0F0;
+        padding: 2px;
+        overflow-x: auto;
+        overflow-y: auto;
+        cursor: pointer;   
+}
+.feedViewerEntry:hover {
+        background: #a6c2e7;
+        padding: 2px;
+}
+.feedViewerEntrySelected {
+        color: #000000;
+        background: #C0C0C0;
+        text-align: left;
+        vertical-align: top;
+        padding-bottom: 2px;
+        padding: 2px;
+}
+.feedViewerEntrySelected:hover {
+        background: #a6c2e7;
+        padding: 2px;
+}
+.feedViewerEntryUpdated {
+        text-align: left;
+        vertical-align: top;
+        color: #909090;
+        padding-bottom: 2px;
+        padding: 2px;
+}
+.feedViewerEntryUpdatedSelected {
+        text-align: left;
+        vertical-align: top;
+        color: #000000;
+        padding-bottom: 2px;
+        padding: 2px;
+}
+.feedViewerEntryTitle {
+        color:#000000;
+        text-align: left;
+        text-decoration:none;
+        padding-left: 4px;
+        padding-bottom: 2px;
+}
+.feedViewerEntryTitle:hover {
+        color:#000000;
+        text-align: left;
+        text-decoration:underline;
+        padding-left: 4px;
+        padding-bottom: 2px;
+}
+.feedViewerDeleteButton {
+        cursor: pointer;
+        color:#0000FF;
+        text-align: left;
+        font-size:  small;
+}
+.feedViewerDeleteButton:hover {
+        text-decoration: underline;
+}
Index: trunk/web/dojo/dojox/atom/widget/templates/FeedEntryViewer.html
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/FeedEntryViewer.html	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/FeedEntryViewer.html	(revision 9)
@@ -0,0 +1,158 @@
+<div class="feedEntryViewer">
+    <table border="0" width="100%" class="feedEntryViewerMenuTable" dojoAttachPoint="feedEntryViewerMenu" style="display: none;">
+        <tr width="100%"  dojoAttachPoint="entryCheckBoxDisplayOptions">
+            <td align="right">
+                <span class="feedEntryViewerMenu" dojoAttachPoint="displayOptions" dojoAttachEvent="onclick:_toggleOptions"></span>
+            </td>
+        </tr>
+        <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow" width="100%" style="display: none;">
+            <td dojoAttachPoint="feedEntryCelltitle">
+                <input type="checkbox" name="title" value="Title" dojoAttachPoint="feedEntryCheckBoxTitle" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelTitle"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellauthors">
+                <input type="checkbox" name="authors" value="Authors" dojoAttachPoint="feedEntryCheckBoxAuthors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelAuthors"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellcontributors">
+                <input type="checkbox" name="contributors" value="Contributors" dojoAttachPoint="feedEntryCheckBoxContributors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContributors"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellid">
+                <input type="checkbox" name="id" value="Id" dojoAttachPoint="feedEntryCheckBoxId" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelId"></label>
+            </td>
+            <td rowspan="2" align="right">
+                <span class="feedEntryViewerMenu" dojoAttachPoint="close" dojoAttachEvent="onclick:_toggleOptions"></span>
+            </td>
+		</tr>
+		<tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow2" width="100%" style="display: none;">
+            <td dojoAttachPoint="feedEntryCellupdated">
+                <input type="checkbox" name="updated" value="Updated" dojoAttachPoint="feedEntryCheckBoxUpdated" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelUpdated"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellsummary">
+                <input type="checkbox" name="summary" value="Summary" dojoAttachPoint="feedEntryCheckBoxSummary" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelSummary"></label>
+            </td>
+            <td dojoAttachPoint="feedEntryCellcontent">
+                <input type="checkbox" name="content" value="Content" dojoAttachPoint="feedEntryCheckBoxContent" dojoAttachEvent="onclick:_toggleCheckbox"/>
+				<label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContent"></label>
+            </td>
+        </tr>
+    </table>
+    
+    <table class="feedEntryViewerContainer" border="0" width="100%">
+        <tr class="feedEntryViewerTitle" dojoAttachPoint="entryTitleRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryTitleHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryTitleNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+
+        <tr class="feedEntryViewerAuthor" dojoAttachPoint="entryAuthorRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryAuthorHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryAuthorNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+
+        <tr class="feedEntryViewerContributor" dojoAttachPoint="entryContributorRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryContributorHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryContributorNode" class="feedEntryViewerContributorNames">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+        
+        <tr class="feedEntryViewerId" dojoAttachPoint="entryIdRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryIdHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryIdNode" class="feedEntryViewerIdText">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    
+        <tr class="feedEntryViewerUpdated" dojoAttachPoint="entryUpdatedRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryUpdatedHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryUpdatedNode" class="feedEntryViewerUpdatedText">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    
+        <tr class="feedEntryViewerSummary" dojoAttachPoint="entrySummaryRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entrySummaryHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entrySummaryNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    
+        <tr class="feedEntryViewerContent" dojoAttachPoint="entryContentRow" style="display: none;">
+            <td>
+                <table width="100%" cellpadding="0" cellspacing="0" border="0">
+                    <tr class="graphic-tab-lgray">
+						<td class="lp2">
+							<span class="lp" dojoAttachPoint="entryContentHeader"></span>
+						</td>
+                    </tr>
+                    <tr>
+                        <td dojoAttachPoint="entryContentNode">
+                        </td>
+                    </tr>
+                </table>
+            </td>
+        </tr>
+    </table>
+</div>
Index: trunk/web/dojo/dojox/atom/widget/templates/FeedViewerEntry.html
===================================================================
--- trunk/web/dojo/dojox/atom/widget/templates/FeedViewerEntry.html	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/templates/FeedViewerEntry.html	(revision 9)
@@ -0,0 +1,15 @@
+<tr class="feedViewerEntry" dojoAttachPoint="entryNode" dojoAttachEvent="onclick:onClick">
+    <td class="feedViewerEntryUpdated" dojoAttachPoint="timeNode">
+    </td>
+    <td>
+        <table border="0" width="100%" dojoAttachPoint="titleRow">
+            <tr padding="0" border="0">
+                <td class="feedViewerEntryTitle" dojoAttachPoint="titleNode">
+                </td>
+                <td class="feedViewerEntryDelete" align="right">
+                    <span dojoAttachPoint="deleteButton" dojoAttachEvent="onclick:deleteEntry" class="feedViewerDeleteButton" style="display:none;">[delete]</span>
+                </td>
+            <tr>
+        </table>
+    </td>
+</tr>
\ No newline at end of file
Index: trunk/web/dojo/dojox/atom/widget/FeedViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/FeedViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/FeedViewer.js	(revision 9)
@@ -0,0 +1,410 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedViewer"]){
+dojo._hasResource["dojox.atom.widget.FeedViewer"]=true;
+dojo.provide("dojox.atom.widget.FeedViewer");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dojox.atom.io.Connection");
+dojo.requireLocalization("dojox.atom.widget","FeedViewerEntry",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.atom.widget.FeedViewer");
+dojo.declare("dojox.atom.widget.FeedViewer",[dijit._Widget,dijit._Templated,dijit._Container],{feedViewerTableBody:null,feedViewerTable:null,entrySelectionTopic:"",url:"",xmethod:false,localSaveOnly:false,templateString:dojo.cache("dojox.atom","widget/templates/FeedViewer.html","<div class=\"feedViewerContainer\" dojoAttachPoint=\"feedViewerContainerNode\">\n\t<table cellspacing=\"0\" cellpadding=\"0\" class=\"feedViewerTable\">\n\t\t<tbody dojoAttachPoint=\"feedViewerTableBody\" class=\"feedViewerTableBody\">\n\t\t</tbody>\n\t</table>\n</div>\n"),_feed:null,_currentSelection:null,_includeFilters:null,alertsEnabled:false,postCreate:function(){
+this._includeFilters=[];
+if(this.entrySelectionTopic!==""){
+this._subscriptions=[dojo.subscribe(this.entrySelectionTopic,this,"_handleEvent")];
+}
+this.atomIO=new dojox.atom.io.Connection();
+this.childWidgets=[];
+},startup:function(){
+this.containerNode=this.feedViewerTableBody;
+var _1=this.getDescendants();
+for(var i in _1){
+var _2=_1[i];
+if(_2&&_2.isFilter){
+this._includeFilters.push(new dojox.atom.widget.FeedViewer.CategoryIncludeFilter(_2.scheme,_2.term,_2.label));
+_2.destroy();
+}
+}
+if(this.url!==""){
+this.setFeedFromUrl(this.url);
+}
+},clear:function(){
+this.destroyDescendants();
+},setFeedFromUrl:function(_3){
+if(_3!==""){
+if(this._isRelativeURL(_3)){
+var _4="";
+if(_3.charAt(0)!=="/"){
+_4=this._calculateBaseURL(window.location.href,true);
+}else{
+_4=this._calculateBaseURL(window.location.href,false);
+}
+this.url=_4+_3;
+}
+this.atomIO.getFeed(_3,dojo.hitch(this,this.setFeed));
+}
+},setFeed:function(_5){
+this._feed=_5;
+this.clear();
+var _6=function(a,b){
+var _7=this._displayDateForEntry(a);
+var _8=this._displayDateForEntry(b);
+if(_7>_8){
+return -1;
+}
+if(_7<_8){
+return 1;
+}
+return 0;
+};
+var _9=function(_a){
+var _b=_a.split(",");
+_b.pop();
+return _b.join(",");
+};
+var _c=_5.entries.sort(dojo.hitch(this,_6));
+if(_5){
+var _d=null;
+for(var i=0;i<_c.length;i++){
+var _e=_c[i];
+if(this._isFilterAccepted(_e)){
+var _f=this._displayDateForEntry(_e);
+var _10="";
+if(_f!==null){
+_10=_9(_f.toLocaleString());
+if(_10===""){
+_10=""+(_f.getMonth()+1)+"/"+_f.getDate()+"/"+_f.getFullYear();
+}
+}
+if((_d===null)||(_d!=_10)){
+this.appendGrouping(_10);
+_d=_10;
+}
+this.appendEntry(_e);
+}
+}
+}
+},_displayDateForEntry:function(_11){
+if(_11.updated){
+return _11.updated;
+}
+if(_11.modified){
+return _11.modified;
+}
+if(_11.issued){
+return _11.issued;
+}
+return new Date();
+},appendGrouping:function(_12){
+var _13=new dojox.atom.widget.FeedViewerGrouping({});
+_13.setText(_12);
+this.addChild(_13);
+this.childWidgets.push(_13);
+},appendEntry:function(_14){
+var _15=new dojox.atom.widget.FeedViewerEntry({"xmethod":this.xmethod});
+_15.setTitle(_14.title.value);
+_15.setTime(this._displayDateForEntry(_14).toLocaleTimeString());
+_15.entrySelectionTopic=this.entrySelectionTopic;
+_15.feed=this;
+this.addChild(_15);
+this.childWidgets.push(_15);
+this.connect(_15,"onClick","_rowSelected");
+_14.domNode=_15.entryNode;
+_14._entryWidget=_15;
+_15.entry=_14;
+},deleteEntry:function(_16){
+if(!this.localSaveOnly){
+this.atomIO.deleteEntry(_16.entry,dojo.hitch(this,this._removeEntry,_16),null,this.xmethod);
+}else{
+this._removeEntry(_16,true);
+}
+dojo.publish(this.entrySelectionTopic,[{action:"delete",source:this,entry:_16.entry}]);
+},_removeEntry:function(_17,_18){
+if(_18){
+var idx=dojo.indexOf(this.childWidgets,_17);
+var _19=this.childWidgets[idx-1];
+var _1a=this.childWidgets[idx+1];
+if(_19.declaredClass==="dojox.atom.widget.FeedViewerGrouping"&&(_1a===undefined||_1a.declaredClass==="dojox.atom.widget.FeedViewerGrouping")){
+_19.destroy();
+}
+_17.destroy();
+}else{
+}
+},_rowSelected:function(evt){
+var _1b=evt.target;
+while(_1b){
+if(_1b.attributes){
+var _1c=_1b.attributes.getNamedItem("widgetid");
+if(_1c&&_1c.value.indexOf("FeedViewerEntry")!=-1){
+break;
+}
+}
+_1b=_1b.parentNode;
+}
+for(var i=0;i<this._feed.entries.length;i++){
+var _1d=this._feed.entries[i];
+if((_1b===_1d.domNode)&&(this._currentSelection!==_1d)){
+dojo.addClass(_1d.domNode,"feedViewerEntrySelected");
+dojo.removeClass(_1d._entryWidget.timeNode,"feedViewerEntryUpdated");
+dojo.addClass(_1d._entryWidget.timeNode,"feedViewerEntryUpdatedSelected");
+this.onEntrySelected(_1d);
+if(this.entrySelectionTopic!==""){
+dojo.publish(this.entrySelectionTopic,[{action:"set",source:this,feed:this._feed,entry:_1d}]);
+}
+if(this._isEditable(_1d)){
+_1d._entryWidget.enableDelete();
+}
+this._deselectCurrentSelection();
+this._currentSelection=_1d;
+break;
+}else{
+if((_1b===_1d.domNode)&&(this._currentSelection===_1d)){
+dojo.publish(this.entrySelectionTopic,[{action:"delete",source:this,entry:_1d}]);
+this._deselectCurrentSelection();
+break;
+}
+}
+}
+},_deselectCurrentSelection:function(){
+if(this._currentSelection){
+dojo.addClass(this._currentSelection._entryWidget.timeNode,"feedViewerEntryUpdated");
+dojo.removeClass(this._currentSelection.domNode,"feedViewerEntrySelected");
+dojo.removeClass(this._currentSelection._entryWidget.timeNode,"feedViewerEntryUpdatedSelected");
+this._currentSelection._entryWidget.disableDelete();
+this._currentSelection=null;
+}
+},_isEditable:function(_1e){
+var _1f=false;
+if(_1e&&_1e!==null&&_1e.links&&_1e.links!==null){
+for(var x in _1e.links){
+if(_1e.links[x].rel&&_1e.links[x].rel=="edit"){
+_1f=true;
+break;
+}
+}
+}
+return _1f;
+},onEntrySelected:function(_20){
+},_isRelativeURL:function(url){
+var _21=function(url){
+var _22=false;
+if(url.indexOf("file://")===0){
+_22=true;
+}
+return _22;
+};
+var _23=function(url){
+var _24=false;
+if(url.indexOf("http://")===0){
+_24=true;
+}
+return _24;
+};
+var _25=false;
+if(url!==null){
+if(!_21(url)&&!_23(url)){
+_25=true;
+}
+}
+return _25;
+},_calculateBaseURL:function(_26,_27){
+var _28=null;
+if(_26!==null){
+var _29=_26.indexOf("?");
+if(_29!=-1){
+_26=_26.substring(0,_29);
+}
+if(_27){
+_29=_26.lastIndexOf("/");
+if((_29>0)&&(_29<_26.length)&&(_29!==(_26.length-1))){
+_28=_26.substring(0,(_29+1));
+}else{
+_28=_26;
+}
+}else{
+_29=_26.indexOf("://");
+if(_29>0){
+_29=_29+3;
+var _2a=_26.substring(0,_29);
+var _2b=_26.substring(_29,_26.length);
+_29=_2b.indexOf("/");
+if((_29<_2b.length)&&(_29>0)){
+_28=_2a+_2b.substring(0,_29);
+}else{
+_28=_2a+_2b;
+}
+}
+}
+}
+return _28;
+},_isFilterAccepted:function(_2c){
+var _2d=false;
+if(this._includeFilters&&(this._includeFilters.length>0)){
+for(var i=0;i<this._includeFilters.length;i++){
+var _2e=this._includeFilters[i];
+if(_2e.match(_2c)){
+_2d=true;
+break;
+}
+}
+}else{
+_2d=true;
+}
+return _2d;
+},addCategoryIncludeFilter:function(_2f){
+if(_2f){
+var _30=_2f.scheme;
+var _31=_2f.term;
+var _32=_2f.label;
+var _33=true;
+if(!_30){
+_30=null;
+}
+if(!_31){
+_30=null;
+}
+if(!_32){
+_30=null;
+}
+if(this._includeFilters&&this._includeFilters.length>0){
+for(var i=0;i<this._includeFilters.length;i++){
+var _34=this._includeFilters[i];
+if((_34.term===_31)&&(_34.scheme===_30)&&(_34.label===_32)){
+_33=false;
+break;
+}
+}
+}
+if(_33){
+this._includeFilters.push(dojox.atom.widget.FeedViewer.CategoryIncludeFilter(_30,_31,_32));
+}
+}
+},removeCategoryIncludeFilter:function(_35){
+if(_35){
+var _36=_35.scheme;
+var _37=_35.term;
+var _38=_35.label;
+if(!_36){
+_36=null;
+}
+if(!_37){
+_36=null;
+}
+if(!_38){
+_36=null;
+}
+var _39=[];
+if(this._includeFilters&&this._includeFilters.length>0){
+for(var i=0;i<this._includeFilters.length;i++){
+var _3a=this._includeFilters[i];
+if(!((_3a.term===_37)&&(_3a.scheme===_36)&&(_3a.label===_38))){
+_39.push(_3a);
+}
+}
+this._includeFilters=_39;
+}
+}
+},_handleEvent:function(_3b){
+if(_3b.source!=this){
+if(_3b.action=="update"&&_3b.entry){
+var evt=_3b;
+if(!this.localSaveOnly){
+this.atomIO.updateEntry(evt.entry,dojo.hitch(evt.source,evt.callback),null,true);
+}
+this._currentSelection._entryWidget.setTime(this._displayDateForEntry(evt.entry).toLocaleTimeString());
+this._currentSelection._entryWidget.setTitle(evt.entry.title.value);
+}else{
+if(_3b.action=="post"&&_3b.entry){
+if(!this.localSaveOnly){
+this.atomIO.addEntry(_3b.entry,this.url,dojo.hitch(this,this._addEntry));
+}else{
+this._addEntry(_3b.entry);
+}
+}
+}
+}
+},_addEntry:function(_3c){
+this._feed.addEntry(_3c);
+this.setFeed(this._feed);
+dojo.publish(this.entrySelectionTopic,[{action:"set",source:this,feed:this._feed,entry:_3c}]);
+},destroy:function(){
+this.clear();
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+}});
+dojo.declare("dojox.atom.widget.FeedViewerEntry",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.atom","widget/templates/FeedViewerEntry.html","<tr class=\"feedViewerEntry\" dojoAttachPoint=\"entryNode\" dojoAttachEvent=\"onclick:onClick\">\n    <td class=\"feedViewerEntryUpdated\" dojoAttachPoint=\"timeNode\">\n    </td>\n    <td>\n        <table border=\"0\" width=\"100%\" dojoAttachPoint=\"titleRow\">\n            <tr padding=\"0\" border=\"0\">\n                <td class=\"feedViewerEntryTitle\" dojoAttachPoint=\"titleNode\">\n                </td>\n                <td class=\"feedViewerEntryDelete\" align=\"right\">\n                    <span dojoAttachPoint=\"deleteButton\" dojoAttachEvent=\"onclick:deleteEntry\" class=\"feedViewerDeleteButton\" style=\"display:none;\">[delete]</span>\n                </td>\n            <tr>\n        </table>\n    </td>\n</tr>\n"),entryNode:null,timeNode:null,deleteButton:null,entry:null,feed:null,postCreate:function(){
+var _3d=dojo.i18n.getLocalization("dojox.atom.widget","FeedViewerEntry");
+this.deleteButton.innerHTML=_3d.deleteButton;
+},setTitle:function(_3e){
+if(this.titleNode.lastChild){
+this.titleNode.removeChild(this.titleNode.lastChild);
+}
+var _3f=document.createElement("div");
+_3f.innerHTML=_3e;
+this.titleNode.appendChild(_3f);
+},setTime:function(_40){
+if(this.timeNode.lastChild){
+this.timeNode.removeChild(this.timeNode.lastChild);
+}
+var _41=document.createTextNode(_40);
+this.timeNode.appendChild(_41);
+},enableDelete:function(){
+if(this.deleteButton!==null){
+this.deleteButton.style.display="inline";
+}
+},disableDelete:function(){
+if(this.deleteButton!==null){
+this.deleteButton.style.display="none";
+}
+},deleteEntry:function(_42){
+_42.preventDefault();
+_42.stopPropagation();
+this.feed.deleteEntry(this);
+},onClick:function(e){
+}});
+dojo.declare("dojox.atom.widget.FeedViewerGrouping",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.atom","widget/templates/FeedViewerGrouping.html","<tr dojoAttachPoint=\"groupingNode\" class=\"feedViewerGrouping\">\n\t<td colspan=\"2\" dojoAttachPoint=\"titleNode\" class=\"feedViewerGroupingTitle\">\n\t</td>\n</tr>\n"),groupingNode:null,titleNode:null,setText:function(_43){
+if(this.titleNode.lastChild){
+this.titleNode.removeChild(this.titleNode.lastChild);
+}
+var _44=document.createTextNode(_43);
+this.titleNode.appendChild(_44);
+}});
+dojo.declare("dojox.atom.widget.AtomEntryCategoryFilter",[dijit._Widget,dijit._Templated],{scheme:"",term:"",label:"",isFilter:true});
+dojo.declare("dojox.atom.widget.FeedViewer.CategoryIncludeFilter",null,{constructor:function(_45,_46,_47){
+this.scheme=_45;
+this.term=_46;
+this.label=_47;
+},match:function(_48){
+var _49=false;
+if(_48!==null){
+var _4a=_48.categories;
+if(_4a!==null){
+for(var i=0;i<_4a.length;i++){
+var _4b=_4a[i];
+if(this.scheme!==""){
+if(this.scheme!==_4b.scheme){
+break;
+}
+}
+if(this.term!==""){
+if(this.term!==_4b.term){
+break;
+}
+}
+if(this.label!==""){
+if(this.label!==_4b.label){
+break;
+}
+}
+_49=true;
+}
+}
+}
+return _49;
+}});
+}
Index: trunk/web/dojo/dojox/atom/widget/FeedEntryViewer.js
===================================================================
--- trunk/web/dojo/dojox/atom/widget/FeedEntryViewer.js	(revision 0)
+++ trunk/web/dojo/dojox/atom/widget/FeedEntryViewer.js	(revision 9)
@@ -0,0 +1,396 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedEntryViewer"]){
+dojo._hasResource["dojox.atom.widget.FeedEntryViewer"]=true;
+dojo.provide("dojox.atom.widget.FeedEntryViewer");
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dojox.atom.io.Connection");
+dojo.requireLocalization("dojox.atom.widget","FeedEntryViewer",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.experimental("dojox.atom.widget.FeedEntryViewer");
+dojo.declare("dojox.atom.widget.FeedEntryViewer",[dijit._Widget,dijit._Templated,dijit._Container],{entrySelectionTopic:"",_validEntryFields:{},displayEntrySections:"",_displayEntrySections:null,enableMenu:false,enableMenuFade:false,_optionButtonDisplayed:true,templateString:dojo.cache("dojox.atom","widget/templates/FeedEntryViewer.html","<div class=\"feedEntryViewer\">\n    <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\n        <tr width=\"100%\"  dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\n            <td align=\"right\">\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n            </td>\n        </tr>\n        <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\n            <td dojoAttachPoint=\"feedEntryCelltitle\">\n                <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellauthors\">\n                <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellcontributors\">\n                <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellid\">\n                <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\n            </td>\n            <td rowspan=\"2\" align=\"right\">\n                <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\n            </td>\n\t\t</tr>\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\n            <td dojoAttachPoint=\"feedEntryCellupdated\">\n                <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellsummary\">\n                <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\n            </td>\n            <td dojoAttachPoint=\"feedEntryCellcontent\">\n                <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\n            </td>\n        </tr>\n    </table>\n    \n    <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\n        <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryTitleNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n\n        <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryAuthorNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n\n        <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n        \n        <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    \n        <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    \n        <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entrySummaryNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    \n        <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\n            <td>\n                <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n                    <tr class=\"graphic-tab-lgray\">\n\t\t\t\t\t\t<td class=\"lp2\">\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\n\t\t\t\t\t\t</td>\n                    </tr>\n                    <tr>\n                        <td dojoAttachPoint=\"entryContentNode\">\n                        </td>\n                    </tr>\n                </table>\n            </td>\n        </tr>\n    </table>\n</div>\n"),_entry:null,_feed:null,_editMode:false,postCreate:function(){
+if(this.entrySelectionTopic!==""){
+this._subscriptions=[dojo.subscribe(this.entrySelectionTopic,this,"_handleEvent")];
+}
+var _1=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+this.displayOptions.innerHTML=_1.displayOptions;
+this.feedEntryCheckBoxLabelTitle.innerHTML=_1.title;
+this.feedEntryCheckBoxLabelAuthors.innerHTML=_1.authors;
+this.feedEntryCheckBoxLabelContributors.innerHTML=_1.contributors;
+this.feedEntryCheckBoxLabelId.innerHTML=_1.id;
+this.close.innerHTML=_1.close;
+this.feedEntryCheckBoxLabelUpdated.innerHTML=_1.updated;
+this.feedEntryCheckBoxLabelSummary.innerHTML=_1.summary;
+this.feedEntryCheckBoxLabelContent.innerHTML=_1.content;
+},startup:function(){
+if(this.displayEntrySections===""){
+this._displayEntrySections=["title","authors","contributors","summary","content","id","updated"];
+}else{
+this._displayEntrySections=this.displayEntrySections.split(",");
+}
+this._setDisplaySectionsCheckboxes();
+if(this.enableMenu){
+dojo.style(this.feedEntryViewerMenu,"display","");
+if(this.entryCheckBoxRow&&this.entryCheckBoxRow2){
+if(this.enableMenuFade){
+dojo.fadeOut({node:this.entryCheckBoxRow,duration:250}).play();
+dojo.fadeOut({node:this.entryCheckBoxRow2,duration:250}).play();
+}
+}
+}
+},clear:function(){
+this.destroyDescendants();
+this._entry=null;
+this._feed=null;
+this.clearNodes();
+},clearNodes:function(){
+dojo.forEach(["entryTitleRow","entryAuthorRow","entryContributorRow","entrySummaryRow","entryContentRow","entryIdRow","entryUpdatedRow"],function(_2){
+dojo.style(this[_2],"display","none");
+},this);
+dojo.forEach(["entryTitleNode","entryTitleHeader","entryAuthorHeader","entryContributorHeader","entryContributorNode","entrySummaryHeader","entrySummaryNode","entryContentHeader","entryContentNode","entryIdNode","entryIdHeader","entryUpdatedHeader","entryUpdatedNode"],function(_3){
+while(this[_3].firstChild){
+dojo.destroy(this[_3].firstChild);
+}
+},this);
+},setEntry:function(_4,_5,_6){
+this.clear();
+this._validEntryFields={};
+this._entry=_4;
+this._feed=_5;
+if(_4!==null){
+if(this.entryTitleHeader){
+this.setTitleHeader(this.entryTitleHeader,_4);
+}
+if(this.entryTitleNode){
+this.setTitle(this.entryTitleNode,this._editMode,_4);
+}
+if(this.entryAuthorHeader){
+this.setAuthorsHeader(this.entryAuthorHeader,_4);
+}
+if(this.entryAuthorNode){
+this.setAuthors(this.entryAuthorNode,this._editMode,_4);
+}
+if(this.entryContributorHeader){
+this.setContributorsHeader(this.entryContributorHeader,_4);
+}
+if(this.entryContributorNode){
+this.setContributors(this.entryContributorNode,this._editMode,_4);
+}
+if(this.entryIdHeader){
+this.setIdHeader(this.entryIdHeader,_4);
+}
+if(this.entryIdNode){
+this.setId(this.entryIdNode,this._editMode,_4);
+}
+if(this.entryUpdatedHeader){
+this.setUpdatedHeader(this.entryUpdatedHeader,_4);
+}
+if(this.entryUpdatedNode){
+this.setUpdated(this.entryUpdatedNode,this._editMode,_4);
+}
+if(this.entrySummaryHeader){
+this.setSummaryHeader(this.entrySummaryHeader,_4);
+}
+if(this.entrySummaryNode){
+this.setSummary(this.entrySummaryNode,this._editMode,_4);
+}
+if(this.entryContentHeader){
+this.setContentHeader(this.entryContentHeader,_4);
+}
+if(this.entryContentNode){
+this.setContent(this.entryContentNode,this._editMode,_4);
+}
+}
+this._displaySections();
+},setTitleHeader:function(_7,_8){
+if(_8.title&&_8.title.value&&_8.title.value!==null){
+var _9=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _a=new dojox.atom.widget.EntryHeader({title:_9.title});
+_7.appendChild(_a.domNode);
+}
+},setTitle:function(_b,_c,_d){
+if(_d.title&&_d.title.value&&_d.title.value!==null){
+if(_d.title.type=="text"){
+var _e=document.createTextNode(_d.title.value);
+_b.appendChild(_e);
+}else{
+var _f=document.createElement("span");
+var _10=new dijit.layout.ContentPane({refreshOnShow:true,executeScripts:false},_f);
+_10.attr("content",_d.title.value);
+_b.appendChild(_10.domNode);
+}
+this.setFieldValidity("title",true);
+}
+},setAuthorsHeader:function(_11,_12){
+if(_12.authors&&_12.authors.length>0){
+var _13=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _14=new dojox.atom.widget.EntryHeader({title:_13.authors});
+_11.appendChild(_14.domNode);
+}
+},setAuthors:function(_15,_16,_17){
+_15.innerHTML="";
+if(_17.authors&&_17.authors.length>0){
+for(var i in _17.authors){
+if(_17.authors[i].name){
+var _18=_15;
+if(_17.authors[i].uri){
+var _19=document.createElement("a");
+_18.appendChild(_19);
+_19.href=_17.authors[i].uri;
+_18=_19;
+}
+var _1a=_17.authors[i].name;
+if(_17.authors[i].email){
+_1a=_1a+" ("+_17.authors[i].email+")";
+}
+var _1b=document.createTextNode(_1a);
+_18.appendChild(_1b);
+var _1c=document.createElement("br");
+_15.appendChild(_1c);
+this.setFieldValidity("authors",true);
+}
+}
+}
+},setContributorsHeader:function(_1d,_1e){
+if(_1e.contributors&&_1e.contributors.length>0){
+var _1f=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _20=new dojox.atom.widget.EntryHeader({title:_1f.contributors});
+_1d.appendChild(_20.domNode);
+}
+},setContributors:function(_21,_22,_23){
+if(_23.contributors&&_23.contributors.length>0){
+for(var i in _23.contributors){
+var _24=document.createTextNode(_23.contributors[i].name);
+_21.appendChild(_24);
+var _25=document.createElement("br");
+_21.appendChild(_25);
+this.setFieldValidity("contributors",true);
+}
+}
+},setIdHeader:function(_26,_27){
+if(_27.id&&_27.id!==null){
+var _28=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _29=new dojox.atom.widget.EntryHeader({title:_28.id});
+_26.appendChild(_29.domNode);
+}
+},setId:function(_2a,_2b,_2c){
+if(_2c.id&&_2c.id!==null){
+var _2d=document.createTextNode(_2c.id);
+_2a.appendChild(_2d);
+this.setFieldValidity("id",true);
+}
+},setUpdatedHeader:function(_2e,_2f){
+if(_2f.updated&&_2f.updated!==null){
+var _30=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _31=new dojox.atom.widget.EntryHeader({title:_30.updated});
+_2e.appendChild(_31.domNode);
+}
+},setUpdated:function(_32,_33,_34){
+if(_34.updated&&_34.updated!==null){
+var _35=document.createTextNode(_34.updated);
+_32.appendChild(_35);
+this.setFieldValidity("updated",true);
+}
+},setSummaryHeader:function(_36,_37){
+if(_37.summary&&_37.summary.value&&_37.summary.value!==null){
+var _38=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _39=new dojox.atom.widget.EntryHeader({title:_38.summary});
+_36.appendChild(_39.domNode);
+}
+},setSummary:function(_3a,_3b,_3c){
+if(_3c.summary&&_3c.summary.value&&_3c.summary.value!==null){
+var _3d=document.createElement("span");
+var _3e=new dijit.layout.ContentPane({refreshOnShow:true,executeScripts:false},_3d);
+_3e.attr("content",_3c.summary.value);
+_3a.appendChild(_3e.domNode);
+this.setFieldValidity("summary",true);
+}
+},setContentHeader:function(_3f,_40){
+if(_40.content&&_40.content.value&&_40.content.value!==null){
+var _41=dojo.i18n.getLocalization("dojox.atom.widget","FeedEntryViewer");
+var _42=new dojox.atom.widget.EntryHeader({title:_41.content});
+_3f.appendChild(_42.domNode);
+}
+},setContent:function(_43,_44,_45){
+if(_45.content&&_45.content.value&&_45.content.value!==null){
+var _46=document.createElement("span");
+var _47=new dijit.layout.ContentPane({refreshOnShow:true,executeScripts:false},_46);
+_47.attr("content",_45.content.value);
+_43.appendChild(_47.domNode);
+this.setFieldValidity("content",true);
+}
+},_displaySections:function(){
+dojo.style(this.entryTitleRow,"display","none");
+dojo.style(this.entryAuthorRow,"display","none");
+dojo.style(this.entryContributorRow,"display","none");
+dojo.style(this.entrySummaryRow,"display","none");
+dojo.style(this.entryContentRow,"display","none");
+dojo.style(this.entryIdRow,"display","none");
+dojo.style(this.entryUpdatedRow,"display","none");
+for(var i in this._displayEntrySections){
+var _48=this._displayEntrySections[i].toLowerCase();
+if(_48==="title"&&this.isFieldValid("title")){
+dojo.style(this.entryTitleRow,"display","");
+}
+if(_48==="authors"&&this.isFieldValid("authors")){
+dojo.style(this.entryAuthorRow,"display","");
+}
+if(_48==="contributors"&&this.isFieldValid("contributors")){
+dojo.style(this.entryContributorRow,"display","");
+}
+if(_48==="summary"&&this.isFieldValid("summary")){
+dojo.style(this.entrySummaryRow,"display","");
+}
+if(_48==="content"&&this.isFieldValid("content")){
+dojo.style(this.entryContentRow,"display","");
+}
+if(_48==="id"&&this.isFieldValid("id")){
+dojo.style(this.entryIdRow,"display","");
+}
+if(_48==="updated"&&this.isFieldValid("updated")){
+dojo.style(this.entryUpdatedRow,"display","");
+}
+}
+},setDisplaySections:function(_49){
+if(_49!==null){
+this._displayEntrySections=_49;
+this._displaySections();
+}else{
+this._displayEntrySections=["title","authors","contributors","summary","content","id","updated"];
+}
+},_setDisplaySectionsCheckboxes:function(){
+var _4a=["title","authors","contributors","summary","content","id","updated"];
+for(var i in _4a){
+if(dojo.indexOf(this._displayEntrySections,_4a[i])==-1){
+dojo.style(this["feedEntryCell"+_4a[i]],"display","none");
+}else{
+this["feedEntryCheckBox"+_4a[i].substring(0,1).toUpperCase()+_4a[i].substring(1)].checked=true;
+}
+}
+},_readDisplaySections:function(){
+var _4b=[];
+if(this.feedEntryCheckBoxTitle.checked){
+_4b.push("title");
+}
+if(this.feedEntryCheckBoxAuthors.checked){
+_4b.push("authors");
+}
+if(this.feedEntryCheckBoxContributors.checked){
+_4b.push("contributors");
+}
+if(this.feedEntryCheckBoxSummary.checked){
+_4b.push("summary");
+}
+if(this.feedEntryCheckBoxContent.checked){
+_4b.push("content");
+}
+if(this.feedEntryCheckBoxId.checked){
+_4b.push("id");
+}
+if(this.feedEntryCheckBoxUpdated.checked){
+_4b.push("updated");
+}
+this._displayEntrySections=_4b;
+},_toggleCheckbox:function(_4c){
+if(_4c.checked){
+_4c.checked=false;
+}else{
+_4c.checked=true;
+}
+this._readDisplaySections();
+this._displaySections();
+},_toggleOptions:function(_4d){
+if(this.enableMenu){
+var _4e=null;
+var _4f;
+var _50;
+if(this._optionButtonDisplayed){
+if(this.enableMenuFade){
+_4f=dojo.fadeOut({node:this.entryCheckBoxDisplayOptions,duration:250});
+dojo.connect(_4f,"onEnd",this,function(){
+dojo.style(this.entryCheckBoxDisplayOptions,"display","none");
+dojo.style(this.entryCheckBoxRow,"display","");
+dojo.style(this.entryCheckBoxRow2,"display","");
+dojo.fadeIn({node:this.entryCheckBoxRow,duration:250}).play();
+dojo.fadeIn({node:this.entryCheckBoxRow2,duration:250}).play();
+});
+_4f.play();
+}else{
+dojo.style(this.entryCheckBoxDisplayOptions,"display","none");
+dojo.style(this.entryCheckBoxRow,"display","");
+dojo.style(this.entryCheckBoxRow2,"display","");
+}
+this._optionButtonDisplayed=false;
+}else{
+if(this.enableMenuFade){
+_4f=dojo.fadeOut({node:this.entryCheckBoxRow,duration:250});
+_50=dojo.fadeOut({node:this.entryCheckBoxRow2,duration:250});
+dojo.connect(_4f,"onEnd",this,function(){
+dojo.style(this.entryCheckBoxRow,"display","none");
+dojo.style(this.entryCheckBoxRow2,"display","none");
+dojo.style(this.entryCheckBoxDisplayOptions,"display","");
+dojo.fadeIn({node:this.entryCheckBoxDisplayOptions,duration:250}).play();
+});
+_4f.play();
+_50.play();
+}else{
+dojo.style(this.entryCheckBoxRow,"display","none");
+dojo.style(this.entryCheckBoxRow2,"display","none");
+dojo.style(this.entryCheckBoxDisplayOptions,"display","");
+}
+this._optionButtonDisplayed=true;
+}
+}
+},_handleEvent:function(_51){
+if(_51.source!=this){
+if(_51.action=="set"&&_51.entry){
+this.setEntry(_51.entry,_51.feed);
+}else{
+if(_51.action=="delete"&&_51.entry&&_51.entry==this._entry){
+this.clear();
+}
+}
+}
+},setFieldValidity:function(_52,_53){
+if(_52){
+var _54=_52.toLowerCase();
+this._validEntryFields[_52]=_53;
+}
+},isFieldValid:function(_55){
+return this._validEntryFields[_55.toLowerCase()];
+},getEntry:function(){
+return this._entry;
+},getFeed:function(){
+return this._feed;
+},destroy:function(){
+this.clear();
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+}});
+dojo.declare("dojox.atom.widget.EntryHeader",[dijit._Widget,dijit._Templated,dijit._Container],{title:"",templateString:dojo.cache("dojox.atom","widget/templates/EntryHeader.html","<span dojoAttachPoint=\"entryHeaderNode\" class=\"entryHeaderNode\"></span>\n"),postCreate:function(){
+this.setListHeader();
+},setListHeader:function(_56){
+this.clear();
+if(_56){
+this.title=_56;
+}
+var _57=document.createTextNode(this.title);
+this.entryHeaderNode.appendChild(_57);
+},clear:function(){
+this.destroyDescendants();
+if(this.entryHeaderNode){
+for(var i=0;i<this.entryHeaderNode.childNodes.length;i++){
+this.entryHeaderNode.removeChild(this.entryHeaderNode.childNodes[i]);
+}
+}
+},destroy:function(){
+this.clear();
+}});
+}
Index: trunk/web/dojo/dojox/timing.js
===================================================================
--- trunk/web/dojo/dojox/timing.js	(revision 0)
+++ trunk/web/dojo/dojox/timing.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.timing"]){
+dojo._hasResource["dojox.timing"]=true;
+dojo.provide("dojox.timing");
+dojo.require("dojox.timing._base");
+}
Index: trunk/web/dojo/dojox/form/_FormSelectWidget.js
===================================================================
--- trunk/web/dojo/dojox/form/_FormSelectWidget.js	(revision 0)
+++ trunk/web/dojo/dojox/form/_FormSelectWidget.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form._FormSelectWidget"]){
+dojo._hasResource["dojox.form._FormSelectWidget"]=true;
+dojo.deprecated("dojox.form._FormSelectWidget","Use dijit.form._FormSelectWidget instead","2.0");
+dojo.provide("dojox.form._FormSelectWidget");
+dojo.require("dijit.form._FormSelectWidget");
+dojo.setObject("dojox.form._FormSelectWidget",dijit.form._FormSelectWidget);
+}
Index: trunk/web/dojo/dojox/form/FileInputBlind.js
===================================================================
--- trunk/web/dojo/dojox/form/FileInputBlind.js	(revision 0)
+++ trunk/web/dojo/dojox/form/FileInputBlind.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileInputBlind"]){
+dojo._hasResource["dojox.form.FileInputBlind"]=true;
+dojo.provide("dojox.form.FileInputBlind");
+dojo.require("dojox.form.FileInputAuto");
+}
Index: trunk/web/dojo/dojox/form/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/PasswordValidator.js	(revision 9)
@@ -0,0 +1,159 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.PasswordValidator"]){
+dojo._hasResource["dojox.form.PasswordValidator"]=true;
+dojo.provide("dojox.form.PasswordValidator");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.requireLocalization("dojox.form","PasswordValidator",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.form._ChildTextBox",dijit.form.ValidationTextBox,{containerWidget:null,type:"password",reset:function(){
+dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,"",true);
+this._hasBeenBlurred=false;
+},postCreate:function(){
+this.inherited(arguments);
+if(!this.name){
+dojo.removeAttr(this.focusNode,"name");
+}
+this.connect(this.focusNode,"onkeypress","_onChildKeyPress");
+},_onChildKeyPress:function(e){
+if(e&&e.keyCode==dojo.keys.ENTER){
+this._setBlurValue();
+}
+}});
+dojo.declare("dojox.form._OldPWBox",dojox.form._ChildTextBox,{_isPWValid:false,_setValueAttr:function(_1,_2){
+if(_1===""){
+_1=dojox.form._OldPWBox.superclass.attr.call(this,"value");
+}
+if(_2!==null){
+this._isPWValid=this.containerWidget.pwCheck(_1);
+}
+this.inherited(arguments);
+this.containerWidget._childValueAttr(this.containerWidget._inputWidgets[1].attr("value"));
+},isValid:function(_3){
+return this.inherited("isValid",arguments)&&this._isPWValid;
+},_update:function(e){
+if(this._hasBeenBlurred){
+this.validate(true);
+}
+this._onMouse(e);
+},_getValueAttr:function(){
+if(this.containerWidget._started&&this.containerWidget.isValid()){
+return this.inherited(arguments);
+}
+return "";
+},_setBlurValue:function(){
+var _4=dijit.form.ValidationTextBox.prototype._getValueAttr.call(this);
+this._setValueAttr(_4,(this.isValid?this.isValid():true));
+}});
+dojo.declare("dojox.form._NewPWBox",dojox.form._ChildTextBox,{required:true,onChange:function(){
+this.containerWidget._inputWidgets[2].validate(false);
+this.inherited(arguments);
+}});
+dojo.declare("dojox.form._VerifyPWBox",dojox.form._ChildTextBox,{isValid:function(_5){
+return this.inherited("isValid",arguments)&&(this.get("value")==this.containerWidget._inputWidgets[1].attr("value"));
+}});
+dojo.declare("dojox.form.PasswordValidator",dijit.form._FormValueWidget,{required:true,_inputWidgets:null,oldName:"",templateString:dojo.cache("dojox.form","resources/PasswordValidator.html","<div dojoAttachPoint=\"containerNode\">\n\t<input type=\"hidden\" name=\"${name}\" value=\"\" dojoAttachPoint=\"focusNode\" />\n</div>\n"),_hasBeenBlurred:false,isValid:function(_6){
+return dojo.every(this._inputWidgets,function(i){
+if(i&&i._setStateClass){
+i._setStateClass();
+}
+return (!i||i.isValid());
+});
+},validate:function(_7){
+return dojo.every(dojo.map(this._inputWidgets,function(i){
+if(i&&i.validate){
+i._hasBeenBlurred=(i._hasBeenBlurred||this._hasBeenBlurred);
+return i.validate();
+}
+return true;
+},this),"return item;");
+},reset:function(){
+this._hasBeenBlurred=false;
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&i.reset){
+i.reset();
+}
+},this);
+},_createSubWidgets:function(){
+var _8=this._inputWidgets,_9=dojo.i18n.getLocalization("dojox.form","PasswordValidator",this.lang);
+dojo.forEach(_8,function(i,_a){
+if(i){
+var p={containerWidget:this},c;
+if(_a===0){
+p.name=this.oldName;
+p.invalidMessage=_9.badPasswordMessage;
+c=dojox.form._OldPWBox;
+}else{
+if(_a===1){
+p.required=this.required;
+c=dojox.form._NewPWBox;
+}else{
+if(_a===2){
+p.invalidMessage=_9.nomatchMessage;
+c=dojox.form._VerifyPWBox;
+}
+}
+}
+_8[_a]=new c(p,i);
+}
+},this);
+},pwCheck:function(_b){
+return false;
+},postCreate:function(){
+this.inherited(arguments);
+var _c=this._inputWidgets=[];
+dojo.forEach(["old","new","verify"],function(i){
+_c.push(dojo.query("input[pwType="+i+"]",this.containerNode)[0]);
+},this);
+if(!_c[1]||!_c[2]){
+throw new Error("Need at least pwType=\"new\" and pwType=\"verify\"");
+}
+if(this.oldName&&!_c[0]){
+throw new Error("Need to specify pwType=\"old\" if using oldName");
+}
+this.containerNode=this.domNode;
+this._createSubWidgets();
+this.connect(this._inputWidgets[1],"_setValueAttr","_childValueAttr");
+this.connect(this._inputWidgets[2],"_setValueAttr","_childValueAttr");
+},_childValueAttr:function(v){
+this.set("value",this.isValid()?v:"");
+},_setDisabledAttr:function(_d){
+this.inherited(arguments);
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&i.attr){
+i.attr("disabled",_d);
+}
+});
+},_setRequiredAttribute:function(_e){
+this.required=_e;
+dojo.attr(this.focusNode,"required",_e);
+dijit.setWaiState(this.focusNode,"required",_e);
+this._refreshState();
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&i.attr){
+i.attr("required",_e);
+}
+});
+},_setValueAttr:function(v){
+this.inherited(arguments);
+dojo.attr(this.focusNode,"value",v);
+},_getValueAttr:function(){
+return this.inherited(arguments)||"";
+},focus:function(){
+var f=false;
+dojo.forEach(this._inputWidgets,function(i){
+if(i&&!i.isValid()&&!f){
+i.focus();
+f=true;
+}
+});
+if(!f){
+this._inputWidgets[1].focus();
+}
+}});
+}
Index: trunk/web/dojo/dojox/form/_SelectStackMixin.js
===================================================================
--- trunk/web/dojo/dojox/form/_SelectStackMixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/_SelectStackMixin.js	(revision 9)
@@ -0,0 +1,151 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form._SelectStackMixin"]){
+dojo._hasResource["dojox.form._SelectStackMixin"]=true;
+dojo.provide("dojox.form._SelectStackMixin");
+dojo.declare("dojox.form._SelectStackMixin",null,{stackId:"",stackPrefix:"",_paneIdFromOption:function(_1){
+return (this.stackPrefix||"")+_1;
+},_optionValFromPane:function(id){
+var sp=this.stackPrefix;
+if(sp&&id.indexOf(sp)===0){
+return id.substring(sp.length);
+}
+return id;
+},_togglePane:function(_2,_3){
+if(_2._shown!=undefined&&_2._shown==_3){
+return;
+}
+var _4=dojo.filter(_2.getDescendants(),"return item.name;");
+if(!_3){
+_5={};
+dojo.forEach(_4,function(w){
+_5[w.id]=w.disabled;
+w.attr("disabled",true);
+});
+_2._savedStates=_5;
+}else{
+var _5=_2._savedStates||{};
+dojo.forEach(_4,function(w){
+var _6=_5[w.id];
+if(_6==undefined){
+_6=false;
+}
+w.attr("disabled",_6);
+});
+delete _2._savedStates;
+}
+_2._shown=_3;
+},_connectTitle:function(_7,_8){
+var fx=dojo.hitch(this,function(_9){
+this.updateOption({value:_8,label:_9});
+});
+if(_7._setTitleAttr){
+this.connect(_7,"_setTitleAttr",fx);
+}else{
+this.connect(_7,"attr",function(_a,_b){
+if(_a=="title"&&arguments.length>1){
+fx(_b);
+}
+});
+}
+},onAddChild:function(_c,_d){
+if(!this._panes[_c.id]){
+this._panes[_c.id]=_c;
+var v=this._optionValFromPane(_c.id);
+this.addOption({value:v,label:_c.title});
+this._connectTitle(_c,v);
+}
+if(!_c.onShow||!_c.onHide||_c._shown==undefined){
+_c.onShow=dojo.hitch(this,"_togglePane",_c,true);
+_c.onHide=dojo.hitch(this,"_togglePane",_c,false);
+_c.onHide();
+}
+},_setValueAttr:function(v){
+if("_savedValue" in this){
+return;
+}
+this.inherited(arguments);
+},attr:function(_e,_f){
+if(_e=="value"&&arguments.length==2&&"_savedValue" in this){
+this._savedValue=_f;
+}
+return this.inherited(arguments);
+},onRemoveChild:function(_10){
+if(this._panes[_10.id]){
+delete this._panes[_10.id];
+this.removeOption(this._optionValFromPane(_10.id));
+}
+},onSelectChild:function(_11){
+this._setValueAttr(this._optionValFromPane(_11.id));
+},onStartup:function(_12){
+var _13=_12.selected;
+this.addOption(dojo.filter(dojo.map(_12.children,function(c){
+var v=this._optionValFromPane(c.id);
+this._connectTitle(c,v);
+var _14=null;
+if(!this._panes[c.id]){
+this._panes[c.id]=c;
+_14={value:v,label:c.title};
+}
+if(!c.onShow||!c.onHide||c._shown==undefined){
+c.onShow=dojo.hitch(this,"_togglePane",c,true);
+c.onHide=dojo.hitch(this,"_togglePane",c,false);
+c.onHide();
+}
+if("_savedValue" in this&&v===this._savedValue){
+_13=c;
+}
+return _14;
+},this),function(i){
+return i;
+}));
+var _15=this;
+var fx=function(){
+delete _15._savedValue;
+_15.onSelectChild(_13);
+if(!_13._shown){
+_15._togglePane(_13,true);
+}
+};
+if(_13!==_12.selected){
+var _16=dijit.byId(this.stackId);
+var c=this.connect(_16,"_showChild",function(sel){
+this.disconnect(c);
+fx();
+});
+}else{
+fx();
+}
+},postMixInProperties:function(){
+this._savedValue=this.value;
+this.inherited(arguments);
+this.connect(this,"onChange","_handleSelfOnChange");
+},postCreate:function(){
+this.inherited(arguments);
+this._panes={};
+this._subscriptions=[dojo.subscribe(this.stackId+"-startup",this,"onStartup"),dojo.subscribe(this.stackId+"-addChild",this,"onAddChild"),dojo.subscribe(this.stackId+"-removeChild",this,"onRemoveChild"),dojo.subscribe(this.stackId+"-selectChild",this,"onSelectChild")];
+var _17=dijit.byId(this.stackId);
+if(_17&&_17._started){
+this.onStartup({children:_17.getChildren(),selected:_17.selectedChildWidget});
+}
+},destroy:function(){
+dojo.forEach(this._subscriptions,dojo.unsubscribe);
+delete this._panes;
+this.inherited("destroy",arguments);
+},_handleSelfOnChange:function(val){
+var _18=this._panes[this._paneIdFromOption(val)];
+if(_18){
+var s=dijit.byId(this.stackId);
+if(_18==s.selectedChildWidget){
+s._transition(_18);
+}else{
+s.selectChild(_18);
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/form/Manager.js
===================================================================
--- trunk/web/dojo/dojox/form/Manager.js	(revision 0)
+++ trunk/web/dojo/dojox/form/Manager.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.Manager"]){
+dojo._hasResource["dojox.form.Manager"]=true;
+dojo.provide("dojox.form.Manager");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.form.manager._Mixin");
+dojo.require("dojox.form.manager._NodeMixin");
+dojo.require("dojox.form.manager._FormMixin");
+dojo.require("dojox.form.manager._ValueMixin");
+dojo.require("dojox.form.manager._EnableMixin");
+dojo.require("dojox.form.manager._DisplayMixin");
+dojo.require("dojox.form.manager._ClassMixin");
+dojo.declare("dojox.form.Manager",[dijit._Widget,dojox.form.manager._Mixin,dojox.form.manager._NodeMixin,dojox.form.manager._FormMixin,dojox.form.manager._ValueMixin,dojox.form.manager._EnableMixin,dojox.form.manager._DisplayMixin,dojox.form.manager._ClassMixin],{buildRendering:function(){
+var _1=this.domNode=this.srcNodeRef;
+if(!this.containerNode){
+this.containerNode=_1;
+}
+this._attachPoints=[];
+dijit._Templated.prototype._attachTemplateNodes.call(this,_1);
+},destroyRendering:function(){
+dijit._Templated.prototype.destroyRendering.call(this);
+}});
+}
Index: trunk/web/dojo/dojox/form/FileUploader.js
===================================================================
--- trunk/web/dojo/dojox/form/FileUploader.js	(revision 0)
+++ trunk/web/dojo/dojox/form/FileUploader.js	(revision 9)
@@ -0,0 +1,740 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileUploader"]){
+dojo._hasResource["dojox.form.FileUploader"]=true;
+dojo.provide("dojox.form.FileUploader");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojo.io.iframe");
+dojo.require("dojox.html.styles");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dojox.embed.flashVars");
+dojo.require("dijit._Contained");
+dojo.experimental("dojox.form.FileUploader");
+dojo.declare("dojox.form.FileUploader",[dijit._Widget,dijit._Templated,dijit._Contained],{swfPath:dojo.config.uploaderPath||dojo.moduleUrl("dojox.form","resources/uploader.swf"),templateString:"<div><div dojoAttachPoint=\"progNode\"><div dojoAttachPoint=\"progTextNode\"></div></div><div dojoAttachPoint=\"insideNode\" class=\"uploaderInsideNode\"></div></div>",uploadUrl:"",isDebug:false,devMode:false,baseClass:"dojoxUploaderNorm",hoverClass:"dojoxUploaderHover",activeClass:"dojoxUploaderActive",disabledClass:"dojoxUploaderDisabled",force:"",uploaderType:"",flashObject:null,flashMovie:null,flashDiv:null,insideNode:null,deferredUploading:1,fileListId:"",uploadOnChange:false,selectMultipleFiles:true,htmlFieldName:"uploadedfile",flashFieldName:"flashUploadFiles",fileMask:null,minFlashVersion:9,tabIndex:-1,showProgress:false,progressMessage:"Loading",progressBackgroundUrl:dojo.moduleUrl("dijit","themes/tundra/images/buttonActive.png"),progressBackgroundColor:"#ededed",progressWidgetId:"",skipServerCheck:false,serverTimeout:5000,log:function(){
+if(this.isDebug){
+console["log"](Array.prototype.slice.call(arguments).join(" "));
+}
+},constructor:function(){
+this._subs=[];
+},postMixInProperties:function(){
+this.fileList=[];
+this._cons=[];
+this.fileMask=this.fileMask||[];
+this.fileInputs=[];
+this.fileCount=0;
+this.flashReady=false;
+this._disabled=false;
+this.force=this.force.toLowerCase();
+this.uploaderType=((dojox.embed.Flash.available>=this.minFlashVersion||this.force=="flash")&&this.force!="html")?"flash":"html";
+this.deferredUploading=this.deferredUploading===true?1:this.deferredUploading;
+this._refNode=this.srcNodeRef;
+this.getButtonStyle();
+},startup:function(){
+},postCreate:function(){
+this.inherited(arguments);
+this.setButtonStyle();
+var _1;
+if(this.uploaderType=="flash"){
+_1="createFlashUploader";
+}else{
+this.uploaderType="html";
+_1="createHtmlUploader";
+}
+var w=this.getHiddenWidget();
+if(w){
+var _2=dojo.connect(w,"onShow",this,function(){
+dojo.disconnect(_2);
+this[_1]();
+});
+}else{
+this[_1]();
+}
+if(this.fileListId){
+this.connect(dojo.byId(this.fileListId),"click",function(_3){
+var p=_3.target.parentNode.parentNode.parentNode;
+if(p.id&&p.id.indexOf("file_")>-1){
+this.removeFile(p.id.split("file_")[1]);
+}
+});
+}
+dojo.addOnUnload(this,this.destroy);
+},getHiddenWidget:function(){
+var _4=this.domNode.parentNode;
+while(_4){
+var id=_4.getAttribute&&_4.getAttribute("widgetId");
+if(id&&dijit.byId(id).onShow){
+return dijit.byId(id);
+}
+_4=_4.parentNode;
+}
+return null;
+},getHiddenNode:function(_5){
+if(!_5){
+return null;
+}
+var _6=null;
+var p=_5.parentNode;
+while(p.tagName.toLowerCase()!="body"){
+var d=dojo.style(p,"display");
+if(d=="none"){
+_6=p;
+break;
+}
+p=p.parentNode;
+}
+return _6;
+},getButtonStyle:function(){
+var _7=this.srcNodeRef;
+this._hiddenNode=this.getHiddenNode(_7);
+if(this._hiddenNode){
+dojo.style(this._hiddenNode,"display","block");
+}
+if(this.button){
+console.warn("DEPRECATED: FileUploader.button - will be removed in 1.5. FileUploader should be created as widget.");
+}
+if(!_7&&this.button&&this.button.domNode){
+var _8=true;
+var _9=this.button.domNode.className+" dijitButtonNode";
+var _a=this.getText(dojo.query(".dijitButtonText",this.button.domNode)[0]);
+var _b="<button id=\""+this.button.id+"\" class=\""+_9+"\">"+_a+"</button>";
+_7=dojo.place(_b,this.button.domNode,"after");
+this.srcNodeRef=_7;
+this.button.destroy();
+this.baseClass="dijitButton";
+this.hoverClass="dijitButtonHover";
+this.pressClass="dijitButtonActive";
+this.disabledClass="dijitButtonDisabled";
+}else{
+if(!this.srcNodeRef&&this.button){
+_7=this.button;
+}
+}
+if(dojo.attr(_7,"class")){
+this.baseClass+=" "+dojo.attr(_7,"class");
+}
+dojo.attr(_7,"class",this.baseClass);
+this.norm=this.getStyle(_7);
+this.width=this.norm.w;
+this.height=this.norm.h;
+if(this.uploaderType=="flash"){
+this.over=this.getTempNodeStyle(_7,this.baseClass+" "+this.hoverClass,_8);
+this.down=this.getTempNodeStyle(_7,this.baseClass+" "+this.activeClass,_8);
+this.dsbl=this.getTempNodeStyle(_7,this.baseClass+" "+this.disabledClass,_8);
+this.fhtml={cn:this.getText(_7),nr:this.norm,ov:this.over,dn:this.down,ds:this.dsbl};
+}else{
+this.fhtml={cn:this.getText(_7),nr:this.norm};
+if(this.norm.va=="middle"){
+this.norm.lh=this.norm.h;
+}
+}
+if(this.devMode){
+this.log("classes - base:",this.baseClass," hover:",this.hoverClass,"active:",this.activeClass);
+this.log("fhtml:",this.fhtml);
+this.log("norm:",this.norm);
+this.log("over:",this.over);
+this.log("down:",this.down);
+}
+},setButtonStyle:function(){
+dojo.style(this.domNode,{width:this.fhtml.nr.w+"px",height:(this.fhtml.nr.h)+"px",padding:"0px",lineHeight:"normal",position:"relative"});
+if(this.uploaderType=="html"&&this.norm.va=="middle"){
+dojo.style(this.domNode,"lineHeight",this.norm.lh+"px");
+}
+if(this.showProgress){
+this.progTextNode.innerHTML=this.progressMessage;
+dojo.style(this.progTextNode,{width:this.fhtml.nr.w+"px",height:(this.fhtml.nr.h+0)+"px",padding:"0px",margin:"0px",left:"0px",lineHeight:(this.fhtml.nr.h+0)+"px",position:"absolute"});
+dojo.style(this.progNode,{width:this.fhtml.nr.w+"px",height:(this.fhtml.nr.h+0)+"px",padding:"0px",margin:"0px",left:"0px",position:"absolute",display:"none",backgroundImage:"url("+this.progressBackgroundUrl+")",backgroundPosition:"bottom",backgroundRepeat:"repeat-x",backgroundColor:this.progressBackgroundColor});
+}else{
+dojo.destroy(this.progNode);
+}
+dojo.style(this.insideNode,{position:"absolute",top:"0px",left:"0px",display:""});
+dojo.addClass(this.domNode,this.srcNodeRef.className);
+if(this.fhtml.nr.d.indexOf("inline")>-1){
+dojo.addClass(this.domNode,"dijitInline");
+}
+try{
+this.insideNode.innerHTML=this.fhtml.cn;
+}
+catch(e){
+if(this.uploaderType=="flash"){
+this.insideNode=this.insideNode.parentNode.removeChild(this.insideNode);
+dojo.body().appendChild(this.insideNode);
+this.insideNode.innerHTML=this.fhtml.cn;
+var c=dojo.connect(this,"onReady",this,function(){
+dojo.disconnect(c);
+this.insideNode=this.insideNode.parentNode.removeChild(this.insideNode);
+this.domNode.appendChild(this.insideNode);
+});
+}else{
+this.insideNode.appendChild(document.createTextNode(this.fhtml.cn));
+}
+}
+this.flashDiv=this.insideNode;
+if(this._hiddenNode){
+dojo.style(this._hiddenNode,"display","none");
+}
+},onChange:function(_c){
+},onProgress:function(_d){
+},onComplete:function(_e){
+},onCancel:function(){
+},onError:function(_f){
+},onReady:function(_10){
+},onLoad:function(_11){
+},submit:function(_12){
+var _13=_12?dojo.formToObject(_12):null;
+this.upload(_13);
+return false;
+},upload:function(_14){
+if(!this.fileList.length){
+return false;
+}
+if(!this.uploadUrl){
+console.warn("uploadUrl not provided. Aborting.");
+return false;
+}
+if(!this.showProgress){
+this.set("disabled",true);
+}
+if(this.progressWidgetId){
+var _15=dijit.byId(this.progressWidgetId).domNode;
+if(dojo.style(_15,"display")=="none"){
+this.restoreProgDisplay="none";
+dojo.style(_15,"display","block");
+}
+if(dojo.style(_15,"visibility")=="hidden"){
+this.restoreProgDisplay="hidden";
+dojo.style(_15,"visibility","visible");
+}
+}
+if(_14&&!_14.target){
+this.postData=_14;
+}
+this.log("upload type:",this.uploaderType," - postData:",this.postData);
+for(var i=0;i<this.fileList.length;i++){
+var f=this.fileList[i];
+f.bytesLoaded=0;
+f.bytesTotal=f.size||100000;
+f.percent=0;
+}
+if(this.uploaderType=="flash"){
+this.uploadFlash();
+}else{
+this.uploadHTML();
+}
+return false;
+},removeFile:function(_16,_17){
+var i;
+for(i=0;i<this.fileList.length;i++){
+if(this.fileList[i].name==_16){
+if(!_17){
+this.fileList.splice(i,1);
+}
+break;
+}
+}
+if(this.uploaderType=="flash"){
+this.flashMovie.removeFile(_16);
+}else{
+if(!_17){
+dojo.destroy(this.fileInputs[i]);
+this.fileInputs.splice(i,1);
+this._renumberInputs();
+}
+}
+if(this.fileListId){
+dojo.destroy("file_"+_16);
+}
+},destroyAll:function(){
+console.warn("DEPRECATED for 1.5 - use destroy() instead");
+this.destroy();
+},destroy:function(){
+if(this.uploaderType=="flash"&&!this.flashMovie){
+this._cons.push(dojo.connect(this,"onLoad",this,"destroy"));
+return;
+}
+dojo.forEach(this._subs,dojo.unsubscribe,dojo);
+dojo.forEach(this._cons,dojo.disconnect,dojo);
+if(this.scrollConnect){
+dojo.disconnect(this.scrollConnect);
+}
+if(this.uploaderType=="flash"){
+this.flashObject.destroy();
+dojo.destroy(this.flashDiv);
+}else{
+dojo.destroy("dojoIoIframe");
+dojo.destroy(this._fileInput);
+dojo.destroy(this._formNode);
+}
+this.inherited(arguments);
+},hide:function(){
+console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', 'none' instead");
+dojo.style(this.domNode,"display","none");
+},show:function(){
+console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', '') instead");
+dojo.style(this.domNode,"display","");
+},disable:function(_18){
+console.warn("DEPRECATED: FileUploader.disable() - will be removed in 1.5. Use set('disable', true) instead.");
+this.set("disable",_18);
+},_displayProgress:function(_19){
+if(_19===true){
+if(this.uploaderType=="flash"){
+dojo.style(this.insideNode,"left","-2500px");
+}else{
+dojo.style(this.insideNode,"display","none");
+}
+dojo.style(this.progNode,"display","");
+}else{
+if(_19===false){
+dojo.style(this.insideNode,{display:"",left:"0px"});
+dojo.style(this.progNode,"display","none");
+}else{
+var w=_19*this.fhtml.nr.w;
+dojo.style(this.progNode,"width",w+"px");
+}
+}
+},_animateProgress:function(){
+this._displayProgress(true);
+var _1a=false;
+var c=dojo.connect(this,"_complete",function(){
+dojo.disconnect(c);
+_1a=true;
+});
+var w=0;
+var _1b=setInterval(dojo.hitch(this,function(){
+w+=5;
+if(w>this.fhtml.nr.w){
+w=0;
+_1a=true;
+}
+this._displayProgress(w/this.fhtml.nr.w);
+if(_1a){
+clearInterval(_1b);
+setTimeout(dojo.hitch(this,function(){
+this._displayProgress(false);
+}),500);
+}
+}),50);
+},_error:function(evt){
+if(typeof (evt)=="string"){
+evt=new Error(evt);
+}
+this.onError(evt);
+},_addToFileList:function(){
+if(this.fileListId){
+var str="";
+dojo.forEach(this.fileList,function(d){
+str+="<table id=\"file_"+d.name+"\" class=\"fileToUpload\"><tr><td class=\"fileToUploadClose\"></td><td class=\"fileToUploadName\">"+d.name+"</td><td class=\"fileToUploadSize\">"+(d.size?Math.ceil(d.size*0.001)+"kb":"")+"</td></tr></table>";
+},this);
+dojo.byId(this.fileListId).innerHTML=str;
+}
+},_change:function(_1c){
+if(dojo.isIE){
+dojo.forEach(_1c,function(f){
+f.name=f.name.split("\\")[f.name.split("\\").length-1];
+});
+}
+if(this.selectMultipleFiles){
+this.fileList=this.fileList.concat(_1c);
+}else{
+if(this.fileList[0]){
+this.removeFile(this.fileList[0].name,true);
+}
+this.fileList=_1c;
+}
+this._addToFileList();
+this.onChange(_1c);
+if(this.uploadOnChange){
+if(this.uploaderType=="html"){
+this._buildFileInput();
+}
+this.upload();
+}else{
+if(this.uploaderType=="html"&&this.selectMultipleFiles){
+this._buildFileInput();
+this._connectInput();
+}
+}
+},_complete:function(_1d){
+_1d=dojo.isArray(_1d)?_1d:[_1d];
+dojo.forEach(_1d,function(f){
+if(f.ERROR){
+this._error(f.ERROR);
+}
+},this);
+dojo.forEach(this.fileList,function(f){
+f.bytesLoaded=1;
+f.bytesTotal=1;
+f.percent=100;
+this._progress(f);
+},this);
+dojo.forEach(this.fileList,function(f){
+this.removeFile(f.name,true);
+},this);
+this.onComplete(_1d);
+this.fileList=[];
+this._resetHTML();
+this.set("disabled",false);
+if(this.restoreProgDisplay){
+setTimeout(dojo.hitch(this,function(){
+dojo.style(dijit.byId(this.progressWidgetId).domNode,this.restoreProgDisplay=="none"?"display":"visibility",this.restoreProgDisplay);
+}),500);
+}
+},_progress:function(_1e){
+var _1f=0;
+var _20=0;
+for(var i=0;i<this.fileList.length;i++){
+var f=this.fileList[i];
+if(f.name==_1e.name){
+f.bytesLoaded=_1e.bytesLoaded;
+f.bytesTotal=_1e.bytesTotal;
+f.percent=Math.ceil(f.bytesLoaded/f.bytesTotal*100);
+this.log(f.name,"percent:",f.percent);
+}
+_20+=Math.ceil(0.001*f.bytesLoaded);
+_1f+=Math.ceil(0.001*f.bytesTotal);
+}
+var _21=Math.ceil(_20/_1f*100);
+if(this.progressWidgetId){
+dijit.byId(this.progressWidgetId).update({progress:_21+"%"});
+}
+if(this.showProgress){
+this._displayProgress(_21*0.01);
+}
+this.onProgress(this.fileList);
+},_getDisabledAttr:function(){
+return this._disabled;
+},_setDisabledAttr:function(_22){
+if(this._disabled==_22){
+return;
+}
+if(this.uploaderType=="flash"){
+if(!this.flashReady){
+var _23=dojo.connect(this,"onLoad",this,function(){
+dojo.disconnect(_23);
+this._setDisabledAttr(_22);
+});
+return;
+}
+this._disabled=_22;
+this.flashMovie.doDisable(_22);
+}else{
+this._disabled=_22;
+dojo.style(this._fileInput,"display",this._disabled?"none":"");
+}
+dojo.toggleClass(this.domNode,this.disabledClass,_22);
+},_onFlashBlur:function(){
+this.flashMovie.blur();
+if(!this.nextFocusObject&&this.tabIndex){
+var _24=dojo.query("[tabIndex]");
+for(var i=0;i<_24.length;i++){
+if(_24[i].tabIndex>=Number(this.tabIndex)+1){
+this.nextFocusObject=_24[i];
+break;
+}
+}
+}
+this.nextFocusObject.focus();
+},_disconnect:function(){
+dojo.forEach(this._cons,dojo.disconnect,dojo);
+},uploadHTML:function(){
+if(this.selectMultipleFiles){
+dojo.destroy(this._fileInput);
+}
+this._setHtmlPostData();
+if(this.showProgress){
+this._animateProgress();
+}
+var dfd=dojo.io.iframe.send({url:this.uploadUrl,form:this._formNode,handleAs:"json",error:dojo.hitch(this,function(err){
+this._error("HTML Upload Error:"+err.message);
+}),load:dojo.hitch(this,function(_25,_26,_27){
+this._complete(_25);
+})});
+},createHtmlUploader:function(){
+this._buildForm();
+this._setFormStyle();
+this._buildFileInput();
+this._connectInput();
+this._styleContent();
+dojo.style(this.insideNode,"visibility","visible");
+this.onReady();
+},_connectInput:function(){
+this._disconnect();
+this._cons.push(dojo.connect(this._fileInput,"mouseover",this,function(evt){
+dojo.addClass(this.domNode,this.hoverClass);
+this.onMouseOver(evt);
+}));
+this._cons.push(dojo.connect(this._fileInput,"mouseout",this,function(evt){
+dojo.removeClass(this.domNode,this.activeClass);
+dojo.removeClass(this.domNode,this.hoverClass);
+this.onMouseOut(evt);
+this._checkHtmlCancel("off");
+}));
+this._cons.push(dojo.connect(this._fileInput,"mousedown",this,function(evt){
+dojo.addClass(this.domNode,this.activeClass);
+dojo.removeClass(this.domNode,this.hoverClass);
+this.onMouseDown(evt);
+}));
+this._cons.push(dojo.connect(this._fileInput,"mouseup",this,function(evt){
+dojo.removeClass(this.domNode,this.activeClass);
+this.onMouseUp(evt);
+this.onClick(evt);
+this._checkHtmlCancel("up");
+}));
+this._cons.push(dojo.connect(this._fileInput,"change",this,function(){
+this._checkHtmlCancel("change");
+this._change([{name:this._fileInput.value,type:"",size:0}]);
+}));
+if(this.tabIndex>=0){
+dojo.attr(this.domNode,"tabIndex",this.tabIndex);
+}
+},_checkHtmlCancel:function(_28){
+if(_28=="change"){
+this.dialogIsOpen=false;
+}
+if(_28=="up"){
+this.dialogIsOpen=true;
+}
+if(_28=="off"){
+if(this.dialogIsOpen){
+this.onCancel();
+}
+this.dialogIsOpen=false;
+}
+},_styleContent:function(){
+var o=this.fhtml.nr;
+dojo.style(this.insideNode,{width:o.w+"px",height:o.va=="middle"?o.h+"px":"auto",textAlign:o.ta,paddingTop:o.p[0]+"px",paddingRight:o.p[1]+"px",paddingBottom:o.p[2]+"px",paddingLeft:o.p[3]+"px"});
+try{
+dojo.style(this.insideNode,"lineHeight","inherit");
+}
+catch(e){
+}
+},_resetHTML:function(){
+if(this.uploaderType=="html"&&this._formNode){
+this.fileInputs=[];
+dojo.query("*",this._formNode).forEach(function(n){
+dojo.destroy(n);
+});
+this.fileCount=0;
+this._buildFileInput();
+this._connectInput();
+}
+},_buildForm:function(){
+if(this._formNode){
+return;
+}
+if(dojo.isIE){
+this._formNode=document.createElement("<form enctype=\"multipart/form-data\" method=\"post\">");
+this._formNode.encoding="multipart/form-data";
+}else{
+this._formNode=document.createElement("form");
+this._formNode.setAttribute("enctype","multipart/form-data");
+}
+this._formNode.id=dijit.getUniqueId("FileUploaderForm");
+this.domNode.appendChild(this._formNode);
+},_buildFileInput:function(){
+if(this._fileInput){
+this._disconnect();
+this._fileInput.id=this._fileInput.id+this.fileCount;
+dojo.style(this._fileInput,"display","none");
+}
+this._fileInput=document.createElement("input");
+this.fileInputs.push(this._fileInput);
+var nm=this.htmlFieldName;
+var _29=this.id;
+if(this.selectMultipleFiles){
+nm+=this.fileCount;
+_29+=this.fileCount;
+this.fileCount++;
+}
+dojo.attr(this._fileInput,{id:this.id,name:nm,type:"file"});
+dojo.addClass(this._fileInput,"dijitFileInputReal");
+console.warn("BUILD FI");
+this._formNode.appendChild(this._fileInput);
+var _2a=dojo.marginBox(this._fileInput);
+dojo.style(this._fileInput,{position:"relative",left:(this.fhtml.nr.w-_2a.w)+"px",opacity:0});
+},_renumberInputs:function(){
+if(!this.selectMultipleFiles){
+return;
+}
+var nm;
+this.fileCount=0;
+dojo.forEach(this.fileInputs,function(inp){
+nm=this.htmlFieldName+this.fileCount;
+this.fileCount++;
+dojo.attr(inp,"name",nm);
+},this);
+},_setFormStyle:function(){
+var _2b=Math.max(2,Math.max(Math.ceil(this.fhtml.nr.w/60),Math.ceil(this.fhtml.nr.h/15)));
+dojox.html.insertCssRule("#"+this._formNode.id+" input","font-size:"+_2b+"em");
+dojo.style(this.domNode,{overflow:"hidden",position:"relative"});
+dojo.style(this.insideNode,"position","absolute");
+},_setHtmlPostData:function(){
+if(this.postData){
+for(var nm in this.postData){
+dojo.create("input",{type:"hidden",name:nm,value:this.postData[nm]},this._formNode);
+}
+}
+},uploadFlash:function(){
+try{
+if(this.showProgress){
+this._displayProgress(true);
+var c=dojo.connect(this,"_complete",this,function(){
+dojo.disconnect(c);
+this._displayProgress(false);
+});
+}
+var o={};
+for(var nm in this.postData){
+o[nm]=this.postData[nm];
+}
+console.warn("this.postData:",o);
+this.flashMovie.doUpload(o);
+}
+catch(err){
+this._error("FileUploader - Sorry, the SWF failed to initialize."+err);
+}
+},createFlashUploader:function(){
+this.uploadUrl=this.uploadUrl.toString();
+if(this.uploadUrl){
+if(this.uploadUrl.toLowerCase().indexOf("http")<0&&this.uploadUrl.indexOf("/")!=0){
+var loc=window.location.href.split("/");
+loc.pop();
+loc=loc.join("/")+"/";
+this.uploadUrl=loc+this.uploadUrl;
+this.log("SWF Fixed - Relative loc:",loc," abs loc:",this.uploadUrl);
+}else{
+this.log("SWF URL unmodified:",this.uploadUrl);
+}
+}else{
+console.warn("Warning: no uploadUrl provided.");
+}
+var w=this.fhtml.nr.w;
+var h=this.fhtml.nr.h;
+var _2c={expressInstall:true,path:this.swfPath.uri||this.swfPath,width:w,height:h,allowScriptAccess:"always",allowNetworking:"all",vars:{uploadDataFieldName:this.flashFieldName,uploadUrl:this.uploadUrl,uploadOnSelect:this.uploadOnChange,deferredUploading:this.deferredUploading||0,selectMultipleFiles:this.selectMultipleFiles,id:this.id,isDebug:this.isDebug,devMode:this.devMode,flashButton:dojox.embed.flashVars.serialize("fh",this.fhtml),fileMask:dojox.embed.flashVars.serialize("fm",this.fileMask),noReturnCheck:this.skipServerCheck,serverTimeout:this.serverTimeout},params:{scale:"noscale",wmode:"opaque"}};
+this.flashObject=new dojox.embed.Flash(_2c,this.insideNode);
+this.flashObject.onError=dojo.hitch(function(msg){
+this._error("Flash Error: "+msg);
+});
+this.flashObject.onReady=dojo.hitch(this,function(){
+dojo.style(this.insideNode,"visibility","visible");
+this.log("FileUploader flash object ready");
+this.onReady(this);
+});
+this.flashObject.onLoad=dojo.hitch(this,function(mov){
+this.flashMovie=mov;
+this.flashReady=true;
+this.onLoad(this);
+});
+this._connectFlash();
+},_connectFlash:function(){
+this._doSub("/filesSelected","_change");
+this._doSub("/filesUploaded","_complete");
+this._doSub("/filesProgress","_progress");
+this._doSub("/filesError","_error");
+this._doSub("/filesCanceled","onCancel");
+this._doSub("/stageBlur","_onFlashBlur");
+this._doSub("/up","onMouseUp");
+this._doSub("/down","onMouseDown");
+this._doSub("/over","onMouseOver");
+this._doSub("/out","onMouseOut");
+this.connect(this.domNode,"focus",function(){
+this.flashMovie.focus();
+this.flashMovie.doFocus();
+});
+if(this.tabIndex>=0){
+dojo.attr(this.domNode,"tabIndex",this.tabIndex);
+}
+},_doSub:function(_2d,_2e){
+this._subs.push(dojo.subscribe(this.id+_2d,this,_2e));
+},urlencode:function(url){
+if(!url||url=="none"){
+return false;
+}
+return url.replace(/:/g,"||").replace(/\./g,"^^").replace("url(","").replace(")","").replace(/'/g,"").replace(/"/g,"");
+},isButton:function(_2f){
+var tn=_2f.tagName.toLowerCase();
+return tn=="button"||tn=="input";
+},getTextStyle:function(_30){
+var o={};
+o.ff=dojo.style(_30,"fontFamily");
+if(o.ff){
+o.ff=o.ff.replace(", ",",");
+o.ff=o.ff.replace(/\"|\'/g,"");
+o.ff=o.ff=="sans-serif"?"Arial":o.ff;
+o.fw=dojo.style(_30,"fontWeight");
+o.fi=dojo.style(_30,"fontStyle");
+o.fs=parseInt(dojo.style(_30,"fontSize"),10);
+if(dojo.style(_30,"fontSize").indexOf("%")>-1){
+var n=_30;
+while(n.tagName){
+if(dojo.style(n,"fontSize").indexOf("%")==-1){
+o.fs=parseInt(dojo.style(n,"fontSize"),10);
+break;
+}
+if(n.tagName.toLowerCase()=="body"){
+o.fs=16*0.01*parseInt(dojo.style(n,"fontSize"),10);
+}
+n=n.parentNode;
+}
+}
+o.fc=new dojo.Color(dojo.style(_30,"color")).toHex();
+o.fc=parseInt(o.fc.substring(1,Infinity),16);
+}
+o.lh=dojo.style(_30,"lineHeight");
+o.ta=dojo.style(_30,"textAlign");
+o.ta=o.ta=="start"||!o.ta?"left":o.ta;
+o.va=this.isButton(_30)?"middle":o.lh==o.h?"middle":dojo.style(_30,"verticalAlign");
+return o;
+},getText:function(_31){
+var cn=dojo.trim(_31.innerHTML);
+if(cn.indexOf("<")>-1){
+cn=escape(cn);
+}
+return cn;
+},getStyle:function(_32){
+var o={};
+var dim=dojo.contentBox(_32);
+var pad=dojo._getPadExtents(_32);
+o.p=[pad.t,pad.w-pad.l,pad.h-pad.t,pad.l];
+o.w=dim.w+pad.w;
+o.h=dim.h+pad.h;
+o.d=dojo.style(_32,"display");
+var clr=new dojo.Color(dojo.style(_32,"backgroundColor"));
+o.bc=clr.a==0?"#ffffff":clr.toHex();
+o.bc=parseInt(o.bc.substring(1,Infinity),16);
+var url=this.urlencode(dojo.style(_32,"backgroundImage"));
+if(url){
+o.bi={url:url,rp:dojo.style(_32,"backgroundRepeat"),pos:escape(dojo.style(_32,"backgroundPosition"))};
+if(!o.bi.pos){
+var rx=dojo.style(_32,"backgroundPositionX");
+var ry=dojo.style(_32,"backgroundPositionY");
+rx=(rx=="left")?"0%":(rx=="right")?"100%":rx;
+ry=(ry=="top")?"0%":(ry=="bottom")?"100%":ry;
+o.bi.pos=escape(rx+" "+ry);
+}
+}
+return dojo.mixin(o,this.getTextStyle(_32));
+},getTempNodeStyle:function(_33,_34,_35){
+var _36,_37;
+if(_35){
+_36=dojo.place("<"+_33.tagName+"><span>"+_33.innerHTML+"</span></"+_33.tagName+">",_33.parentNode);
+var _38=_36.firstChild;
+dojo.addClass(_38,_33.className);
+dojo.addClass(_36,_34);
+_37=this.getStyle(_38);
+}else{
+_36=dojo.place("<"+_33.tagName+">"+_33.innerHTML+"</"+_33.tagName+">",_33.parentNode);
+dojo.addClass(_36,_33.className);
+dojo.addClass(_36,_34);
+_36.id=_33.id;
+_37=this.getStyle(_36);
+}
+dojo.destroy(_36);
+return _37;
+}});
+}
Index: trunk/web/dojo/dojox/form/BusyButton.js
===================================================================
--- trunk/web/dojo/dojox/form/BusyButton.js	(revision 0)
+++ trunk/web/dojo/dojox/form/BusyButton.js	(revision 9)
@@ -0,0 +1,79 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.BusyButton"]){
+dojo._hasResource["dojox.form.BusyButton"]=true;
+dojo.provide("dojox.form.BusyButton");
+dojo.require("dijit.form.Button");
+dojo.requireLocalization("dijit","loading",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.form._BusyButtonMixin",null,{isBusy:false,busyLabel:"",timeout:null,useIcon:true,postMixInProperties:function(){
+this.inherited(arguments);
+if(!this.busyLabel){
+this.busyLabel=dojo.i18n.getLocalization("dijit","loading",this.lang).loadingState;
+}
+},postCreate:function(){
+this.inherited(arguments);
+this._label=this.containerNode.innerHTML;
+this._initTimeout=this.timeout;
+if(this.isBusy){
+this.makeBusy();
+}
+},makeBusy:function(){
+this.isBusy=true;
+this.set("disabled",true);
+this.setLabel(this.busyLabel,this.timeout);
+},cancel:function(){
+this.set("disabled",false);
+this.isBusy=false;
+this.setLabel(this._label);
+if(this._timeout){
+clearTimeout(this._timeout);
+}
+this.timeout=this._initTimeout;
+},resetTimeout:function(_1){
+if(this._timeout){
+clearTimeout(this._timeout);
+}
+if(_1){
+this._timeout=setTimeout(dojo.hitch(this,function(){
+this.cancel();
+}),_1);
+}else{
+if(_1==undefined||_1===0){
+this.cancel();
+}
+}
+},setLabel:function(_2,_3){
+this.label=_2;
+while(this.containerNode.firstChild){
+this.containerNode.removeChild(this.containerNode.firstChild);
+}
+this.containerNode.innerHTML=this.label;
+if(this.showLabel==false&&!(dojo.attr(this.domNode,"title"))){
+this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");
+}
+if(_3){
+this.resetTimeout(_3);
+}else{
+this.timeout=null;
+}
+if(this.useIcon&&this.isBusy){
+var _4=new Image();
+_4.src=this._blankGif;
+dojo.attr(_4,"id",this.id+"_icon");
+dojo.addClass(_4,"dojoxBusyButtonIcon");
+this.containerNode.appendChild(_4);
+}
+},_clicked:function(e){
+if(!this.isBusy){
+this.makeBusy();
+}
+}});
+dojo.declare("dojox.form.BusyButton",[dijit.form.Button,dojox.form._BusyButtonMixin],{});
+dojo.declare("dojox.form.BusyComboButton",[dijit.form.ComboButton,dojox.form._BusyButtonMixin],{});
+dojo.declare("dojox.form.BusyDropDownButton",[dijit.form.DropDownButton,dojox.form._BusyButtonMixin],{});
+}
Index: trunk/web/dojo/dojox/form/nls/sl/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/sl/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/sl/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Neveljavno geslo.","nomatchMessage":"Gesli se ne ujemata."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/ro/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/ro/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/ro/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Parola nu este validă. ","nomatchMessage":"Parolele nu se potrivesc. "})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/zh/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/zh/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/zh/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"密码无效。","nomatchMessage":"密码不匹配。"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/ca/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/ca/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/ca/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"La contrasenya no és correcta","nomatchMessage":"Les contrasenyes no coincideixen"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Invalid Password.","nomatchMessage":"Passwords do not match."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/pt/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/pt/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/pt/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Senha Inválida.","nomatchMessage":"As senhas não correspondem."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/da/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/da/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/da/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Ugyldig adgangskode.","nomatchMessage":"Adgangskoderne stemmer ikke overens."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/tr/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/tr/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/tr/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Geçersiz Parola.","nomatchMessage":"Parolalar eşleşmiyor."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/ru/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/ru/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/ru/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Неправильный пароль.","nomatchMessage":"Пароли не совпадают."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/sv/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/sv/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/sv/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Ogiltigt lösenord.","nomatchMessage":"Lösenorden stämmer inte överens."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/de/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/de/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/de/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Ungültiges Kennwort.","nomatchMessage":"Die Kennwörter stimmen nicht überein."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/ja/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/ja/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/ja/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"無効なパスワードです。","nomatchMessage":"パスワードが一致しません。"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/he/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/he/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/he/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"סיסמה לא חוקית.","nomatchMessage":"הסיסמאות אינן זהות."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/fi/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/fi/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/fi/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Salasana ei kelpaa.","nomatchMessage":"Salasanat eivät täsmää."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/nb/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/nb/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/nb/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Ugyldig passord.","nomatchMessage":"Passordene samsvarer ikke."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/el/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/el/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/el/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Μη έγκυρος κωδικός πρόσβασης.","nomatchMessage":"Οι κωδικοί πρόσβασης δεν συμφωνούν."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/ar/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/ar/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/ar/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"كلمة سرية غير صحيحة.","nomatchMessage":"كلمة السرية غير مطابقة."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/pt-pt/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/pt-pt/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/pt-pt/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Palavra-passe não válida.","nomatchMessage":"As palavras-passe não correspondem."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/cs/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/cs/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/cs/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Neplatné heslo.","nomatchMessage":"Hesla se neshodují."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/es/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/es/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/es/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Contraseña no válida.","nomatchMessage":"Las contraseñas no coinciden."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/fr/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/fr/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/fr/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Mot de passe incorrect.","nomatchMessage":"Les mots de passe ne correspondent pas."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/zh-tw/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/zh-tw/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/zh-tw/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"無效的密碼。","nomatchMessage":"密碼不符合。"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/nl/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/nl/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/nl/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Ongeldig wachtwoord. ","nomatchMessage":"Wachtwoorden komen niet overeen."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/ko/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/ko/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/ko/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"비밀번호가 올바르지 않습니다.","nomatchMessage":"비밀번호가 일치하지 않습니다."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/pl/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/pl/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/pl/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Niepoprawne hasło.","nomatchMessage":"Hasła nie są zgodne."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/th/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/th/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/th/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"รหัสผ่านไม่ถูกต้อง","nomatchMessage":"รหัสผ่านไม่ตรงกัน"})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/it/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/it/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/it/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Password non valida.","nomatchMessage":"Le password non corrispondono."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/hu/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/hu/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/hu/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Érvénytelen jelszó.","nomatchMessage":"A jelszavak nem egyeznek."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/nls/sk/PasswordValidator.js
===================================================================
--- trunk/web/dojo/dojox/form/nls/sk/PasswordValidator.js	(revision 0)
+++ trunk/web/dojo/dojox/form/nls/sk/PasswordValidator.js	(revision 9)
@@ -0,0 +1 @@
+({"badPasswordMessage":"Neplatné heslo.","nomatchMessage":"Heslá sa nezhodujú."})
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/DropDownStack.js
===================================================================
--- trunk/web/dojo/dojox/form/DropDownStack.js	(revision 0)
+++ trunk/web/dojo/dojox/form/DropDownStack.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.DropDownStack"]){
+dojo._hasResource["dojox.form.DropDownStack"]=true;
+dojo.provide("dojox.form.DropDownStack");
+dojo.require("dijit.form.Select");
+dojo.require("dojox.form._SelectStackMixin");
+dojo.declare("dojox.form.DropDownStack",[dijit.form.Select,dojox.form._SelectStackMixin],{});
+}
Index: trunk/web/dojo/dojox/form/README
===================================================================
--- trunk/web/dojo/dojox/form/README	(revision 0)
+++ trunk/web/dojo/dojox/form/README	(revision 9)
@@ -0,0 +1,73 @@
+-------------------------------------------------------------------------------
+dojox.form Collection
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 02/26/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Nathan Toone (toonetown)
+	Peter Higgins	(dante)
+    Wolfram Kriesing (http://wolfram.kriesing.de/blog/): Rating
+    Mike Wilcox
+-------------------------------------------------------------------------------
+Project description
+
+	This is a collection of additional widgets that can be used in forms.
+-------------------------------------------------------------------------------
+Dependencies:
+
+	Depends on dojo core and dijit
+	
+	dojo.form.FileUploader depends on dojox.embed, and uses Flash movies created
+	in the deft project using Flex OSS 3.  You do not need any of the deft code; 
+	compiled movies are included with dojox.form in the resources folder.  
+	If you want to modify the actual movies, you can look in the deft project 
+	(under the package deft.av).
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+	Install into /dojox/form
+-------------------------------------------------------------------------------
+Additional Notes (Brief widget list):
+
+	* CheckedMultiSelect - an extension to dijit.form.MultiSelect which
+						uses check boxes instead of ctrl-click
+
+ 	* DropDownSelect - an extension to dijit.form.DropDownButton which is
+ 						meant to mirror the html <select> drop down
+
+	* DropDownStack/RadioStack - a widget that can toggle parts of a form as
+						"on" or "off" - to allow for different options based on 
+						the value selected.
+
+	* FileInput - experimental dijit-like input type="file"
+
+	* FileInputAuto/Blind - extension to FileInput for 
+						added flair/automation
+						
+	* FilePickerTextBox - a validating text box that can browser server-side
+						files using a dojox.data.FileStore
+	* FileUploader - Allows for Multi-file uploads and file masking. Uses a SWF
+						file created with Deft. Compatible with Flash Player
+						versions 8-10. Degradeable to a multi-file HTML uploader.
+	
+	* ListInput - A text-box widget that allows inputting multiple items (similar
+						to the "to" field on many email clients)
+						
+    * MultiComboBox - an experimental ComboBox that allows
+						multiple entries bases on a separator character.
+
+	* PasswordValidator - a widget which simplifies the common "old/new/verify" 
+						mechanism of specifying passwords
+
+	* Rating - a star-based rating widget
+ 	
+    * TimeSpinner - a number spinner that revolves through
+						time constrainsts
+
Index: trunk/web/dojo/dojox/form/MultiComboBox.js
===================================================================
--- trunk/web/dojo/dojox/form/MultiComboBox.js	(revision 0)
+++ trunk/web/dojo/dojox/form/MultiComboBox.js	(revision 9)
@@ -0,0 +1,46 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.MultiComboBox"]){
+dojo._hasResource["dojox.form.MultiComboBox"]=true;
+dojo.provide("dojox.form.MultiComboBox");
+dojo.experimental("dojox.form.MultiComboBox");
+dojo.require("dijit.form.ComboBox");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.declare("dojox.form.MultiComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{delimiter:",",_previousMatches:false,_setValueAttr:function(_1){
+if(this.delimiter&&_1.length!=0){
+_1=_1+this.delimiter+" ";
+arguments[0]=this._addPreviousMatches(_1);
+}
+this.inherited(arguments);
+},_addPreviousMatches:function(_2){
+if(this._previousMatches){
+if(!_2.match(new RegExp("^"+this._previousMatches))){
+_2=this._previousMatches+_2;
+}
+_2=this._cleanupDelimiters(_2);
+}
+return _2;
+},_cleanupDelimiters:function(_3){
+if(this.delimiter){
+_3=_3.replace(new RegExp("  +")," ");
+_3=_3.replace(new RegExp("^ *"+this.delimiter+"* *"),"");
+_3=_3.replace(new RegExp(this.delimiter+" *"+this.delimiter),this.delimiter);
+}
+return _3;
+},_autoCompleteText:function(_4){
+arguments[0]=this._addPreviousMatches(_4);
+this.inherited(arguments);
+},_startSearch:function(_5){
+_5=this._cleanupDelimiters(_5);
+var re=new RegExp("^.*"+this.delimiter+" *");
+if((this._previousMatches=_5.match(re))){
+arguments[0]=_5.replace(re,"");
+}
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/form/RadioStack.js
===================================================================
--- trunk/web/dojo/dojox/form/RadioStack.js	(revision 0)
+++ trunk/web/dojo/dojox/form/RadioStack.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.RadioStack"]){
+dojo._hasResource["dojox.form.RadioStack"]=true;
+dojo.provide("dojox.form.RadioStack");
+dojo.require("dojox.form.CheckedMultiSelect");
+dojo.require("dojox.form._SelectStackMixin");
+dojo.declare("dojox.form.RadioStack",[dojox.form.CheckedMultiSelect,dojox.form._SelectStackMixin],{});
+}
Index: trunk/web/dojo/dojox/form/Rating.js
===================================================================
--- trunk/web/dojo/dojox/form/Rating.js	(revision 0)
+++ trunk/web/dojo/dojox/form/Rating.js	(revision 9)
@@ -0,0 +1,55 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.Rating"]){
+dojo._hasResource["dojox.form.Rating"]=true;
+dojo.provide("dojox.form.Rating");
+dojo.require("dijit.form._FormWidget");
+dojo.declare("dojox.form.Rating",dijit.form._FormWidget,{templateString:null,numStars:3,value:0,constructor:function(_1){
+dojo.mixin(this,_1);
+var _2="<div dojoAttachPoint=\"domNode\" class=\"dojoxRating dijitInline\">"+"<input type=\"hidden\" value=\"0\" dojoAttachPoint=\"focusNode\" /><ul>${stars}</ul>"+"</div>";
+var _3="<li class=\"dojoxRatingStar dijitInline\" dojoAttachEvent=\"onclick:onStarClick,onmouseover:_onMouse,onmouseout:_onMouse\" value=\"${value}\"></li>";
+var _4="";
+for(var i=0;i<this.numStars;i++){
+_4+=dojo.string.substitute(_3,{value:i+1});
+}
+this.templateString=dojo.string.substitute(_2,{stars:_4});
+},postCreate:function(){
+this.inherited(arguments);
+this._renderStars(this.value);
+},_onMouse:function(_5){
+if(this._hovering){
+var _6=+dojo.attr(_5.target,"value");
+this.onMouseOver(_5,_6);
+this._renderStars(_6,true);
+}else{
+this._renderStars(this.value);
+}
+},_renderStars:function(_7,_8){
+dojo.query(".dojoxRatingStar",this.domNode).forEach(function(_9,i){
+if(i+1>_7){
+dojo.removeClass(_9,"dojoxRatingStarHover");
+dojo.removeClass(_9,"dojoxRatingStarChecked");
+}else{
+dojo.removeClass(_9,"dojoxRatingStar"+(_8?"Checked":"Hover"));
+dojo.addClass(_9,"dojoxRatingStar"+(_8?"Hover":"Checked"));
+}
+});
+},onStarClick:function(_a){
+var _b=+dojo.attr(_a.target,"value");
+this.setAttribute("value",_b==this.value?0:_b);
+this._renderStars(this.value);
+this.onChange(this.value);
+},onMouseOver:function(){
+},setAttribute:function(_c,_d){
+this.inherited("setAttribute",arguments);
+if(_c=="value"){
+this._renderStars(this.value);
+this.onChange(this.value);
+}
+}});
+}
Index: trunk/web/dojo/dojox/form/_HasDropDown.js
===================================================================
--- trunk/web/dojo/dojox/form/_HasDropDown.js	(revision 0)
+++ trunk/web/dojo/dojox/form/_HasDropDown.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form._HasDropDown"]){
+dojo._hasResource["dojox.form._HasDropDown"]=true;
+dojo.deprecated("dojox.form._HasDropDown","Use dijit._HasDropDown instead","2.0");
+dojo.provide("dojox.form._HasDropDown");
+dojo.require("dijit._HasDropDown");
+dojo.setObject("dojox.form._HasDropDown",dijit._HasDropDown);
+}
Index: trunk/web/dojo/dojox/form/FileInputAuto.js
===================================================================
--- trunk/web/dojo/dojox/form/FileInputAuto.js	(revision 0)
+++ trunk/web/dojo/dojox/form/FileInputAuto.js	(revision 9)
@@ -0,0 +1,97 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileInputAuto"]){
+dojo._hasResource["dojox.form.FileInputAuto"]=true;
+dojo.provide("dojox.form.FileInputAuto");
+dojo.require("dojox.form.FileInput");
+dojo.require("dojo.io.iframe");
+dojo.declare("dojox.form.FileInputAuto",dojox.form.FileInput,{url:"",blurDelay:2000,duration:500,uploadMessage:"Uploading ...",triggerEvent:"onblur",_sent:false,templateString:dojo.cache("dojox.form","resources/FileInputAuto.html","<div class=\"dijitFileInput\">\n\t<input id=\"${id}\" name=\"${name}\" class=\"dijitFileInputReal\" type=\"file\" dojoAttachPoint=\"fileInput\" />\n\t<div class=\"dijitFakeInput\" dojoAttachPoint=\"fakeNodeHolder\">\n\t\t<input class=\"dijitFileInputVisible\" type=\"text\" dojoAttachPoint=\"focusNode, inputNode\" />\n\t\t<div class=\"dijitInline dijitFileInputText\" dojoAttachPoint=\"titleNode\">${label}</div>\n\t\t<div class=\"dijitInline dijitFileInputButton\" dojoAttachPoint=\"cancelNode\" dojoAttachEvent=\"onclick:reset\">${cancelText}</div>\n\t</div>\n\t<div class=\"dijitProgressOverlay\" dojoAttachPoint=\"overlay\">&nbsp;</div>\n</div>\n"),onBeforeSend:function(){
+return {};
+},startup:function(){
+this._blurListener=this.connect(this.fileInput,this.triggerEvent,"_onBlur");
+this._focusListener=this.connect(this.fileInput,"onfocus","_onFocus");
+this.inherited(arguments);
+},_onFocus:function(){
+if(this._blurTimer){
+clearTimeout(this._blurTimer);
+}
+},_onBlur:function(){
+if(this._blurTimer){
+clearTimeout(this._blurTimer);
+}
+if(!this._sent){
+this._blurTimer=setTimeout(dojo.hitch(this,"_sendFile"),this.blurDelay);
+}
+},setMessage:function(_1){
+this.overlay.removeChild(this.overlay.firstChild);
+this.overlay.appendChild(document.createTextNode(_1));
+},_sendFile:function(e){
+if(this._sent||this._sending||!this.fileInput.value){
+return;
+}
+this._sending=true;
+dojo.style(this.fakeNodeHolder,"display","none");
+dojo.style(this.overlay,{opacity:0,display:"block"});
+this.setMessage(this.uploadMessage);
+dojo.fadeIn({node:this.overlay,duration:this.duration}).play();
+var _2;
+if(dojo.isIE){
+_2=document.createElement("<form enctype=\"multipart/form-data\" method=\"post\">");
+_2.encoding="multipart/form-data";
+}else{
+_2=document.createElement("form");
+_2.setAttribute("enctype","multipart/form-data");
+}
+_2.appendChild(this.fileInput);
+dojo.body().appendChild(_2);
+dojo.io.iframe.send({url:this.url,form:_2,handleAs:"json",handle:dojo.hitch(this,"_handleSend"),content:this.onBeforeSend()});
+},_handleSend:function(_3,_4){
+this.overlay.removeChild(this.overlay.firstChild);
+this._sent=true;
+this._sending=false;
+dojo.style(this.overlay,{opacity:0,border:"none",background:"none"});
+this.overlay.style.backgroundImage="none";
+this.fileInput.style.display="none";
+this.fakeNodeHolder.style.display="none";
+dojo.fadeIn({node:this.overlay,duration:this.duration}).play(250);
+this.disconnect(this._blurListener);
+this.disconnect(this._focusListener);
+dojo.body().removeChild(_4.args.form);
+this.fileInput=null;
+this.onComplete(_3,_4,this);
+},reset:function(e){
+if(this._blurTimer){
+clearTimeout(this._blurTimer);
+}
+this.disconnect(this._blurListener);
+this.disconnect(this._focusListener);
+this.overlay.style.display="none";
+this.fakeNodeHolder.style.display="";
+this.inherited(arguments);
+this._sent=false;
+this._sending=false;
+this._blurListener=this.connect(this.fileInput,this.triggerEvent,"_onBlur");
+this._focusListener=this.connect(this.fileInput,"onfocus","_onFocus");
+},onComplete:function(_5,_6,_7){
+}});
+dojo.declare("dojox.form.FileInputBlind",dojox.form.FileInputAuto,{startup:function(){
+this.inherited(arguments);
+this._off=dojo.style(this.inputNode,"width");
+this.inputNode.style.display="none";
+this._fixPosition();
+},_fixPosition:function(){
+if(dojo.isIE){
+dojo.style(this.fileInput,"width","1px");
+}else{
+dojo.style(this.fileInput,"left","-"+(this._off)+"px");
+}
+},reset:function(e){
+this.inherited(arguments);
+this._fixPosition();
+}});
+}
Index: trunk/web/dojo/dojox/form/ListInput.js
===================================================================
--- trunk/web/dojo/dojox/form/ListInput.js	(revision 0)
+++ trunk/web/dojo/dojox/form/ListInput.js	(revision 9)
@@ -0,0 +1,440 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.ListInput"]){
+dojo._hasResource["dojox.form.ListInput"]=true;
+dojo.experimental("dojox.form.ListInput");
+dojo.provide("dojox.form.ListInput");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit.InlineEditBox");
+dojo.requireLocalization("dijit","common",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.declare("dojox.form.ListInput",[dijit.form._FormValueWidget],{constructor:function(){
+this._items=[];
+if(!dojo.isArray(this.delimiter)){
+this.delimiter=[this.delimiter];
+}
+var r="("+this.delimiter.join("|")+")?";
+this.regExp="^"+this.regExp+r+"$";
+},inputClass:"dojox.form._ListInputInputBox",inputHandler:"onChange",inputProperties:{minWidth:50},submitOnlyValidValue:true,useOnBlur:true,readOnlyInput:false,maxItems:null,showCloseButtonWhenValid:true,showCloseButtonWhenInvalid:true,regExp:".*",delimiter:",",constraints:{},baseClass:"dojoxListInput",type:"select",value:"",templateString:"<div dojoAttachPoint=\"focusNode\" class=\"dijit dijitReset dijitLeft dojoxListInput\"><select dojoAttachpoint=\"_selectNode\" multiple=\"multiple\" class=\"dijitHidden\" ${!nameAttrSetting}></select><ul dojoAttachPoint=\"_listInput\"><li dojoAttachEvent=\"onclick: _onClick\" class=\"dijitInputField dojoxListInputNode dijitHidden\" dojoAttachPoint=\"_inputNode\"></li></ul></div>",useAnim:true,duration:500,easingIn:null,easingOut:null,readOnlyItem:false,useArrowForEdit:true,_items:null,_lastAddedItem:null,_currentItem:null,_input:null,_count:0,postCreate:function(){
+this.inherited(arguments);
+this._createInputBox();
+},_setReadOnlyInputAttr:function(_1){
+console.warn("_setReadOnlyInputAttr",this.id,_1);
+if(!this._started){
+return this._createInputBox();
+}
+this.readOnlyInput=_1;
+this._createInputBox();
+},_setReadOnlyItemAttr:function(_2){
+if(!this._started){
+return;
+}
+for(var i in this._items){
+this._items[i].attr("readOnlyItem",_2);
+}
+},_createInputBox:function(){
+console.warn("_createInputBox",this.id,this.readOnlyInput);
+dojo[(this.readOnlyInput?"add":"remove")+"Class"](this._inputNode,"dijitHidden");
+if(this.readOnlyInput){
+return;
+}
+if(this._input){
+return;
+}
+if(this.inputHandler===null){
+return !console.warn("you must add some handler to connect to input field");
+}
+if(dojo.isString(this.inputHandler)){
+this.inputHandler=this.inputHandler.split(",");
+}
+if(dojo.isString(this.inputProperties)){
+this.inputProperties=dojo.fromJson(this.inputProperties);
+}
+var _3=dojo.getObject(this.inputClass,false);
+this.inputProperties.regExp=this.regExpGen(this.constraints);
+this._input=new _3(this.inputProperties);
+this._input.startup();
+this._inputNode.appendChild(this._input.domNode);
+dojo.forEach(this.inputHandler,function(_4){
+this.connect(this._input,dojo.string.trim(_4),"_onHandler");
+},this);
+this.connect(this._input,"onKeyDown","_inputOnKeyDown");
+this.connect(this._input,"onBlur","_inputOnBlur");
+},compare:function(_5,_6){
+_5=_5.join(",");
+_6=_6.join(",");
+if(_5>_6){
+return 1;
+}else{
+if(_5<_6){
+return -1;
+}else{
+return 0;
+}
+}
+},add:function(_7){
+if(this._count>=this.maxItems&&this.maxItems!==null){
+return;
+}
+this._lastValueReported=this._getValues();
+if(!dojo.isArray(_7)){
+_7=[_7];
+}
+for(var i in _7){
+var _8=_7[i];
+if(_8===""||typeof _8!="string"){
+continue;
+}
+this._count++;
+var re=new RegExp(this.regExpGen(this.constraints));
+this._lastAddedItem=new dojox.form._ListInputInputItem({"index":this._items.length,readOnlyItem:this.readOnlyItem,value:_8,regExp:this.regExpGen(this.constraints)});
+this._lastAddedItem.startup();
+this._testItem(this._lastAddedItem,_8);
+this._lastAddedItem.onClose=dojo.hitch(this,"_onItemClose",this._lastAddedItem);
+this._lastAddedItem.onChange=dojo.hitch(this,"_onItemChange",this._lastAddedItem);
+this._lastAddedItem.onEdit=dojo.hitch(this,"_onItemEdit",this._lastAddedItem);
+this._lastAddedItem.onKeyDown=dojo.hitch(this,"_onItemKeyDown",this._lastAddedItem);
+if(this.useAnim){
+dojo.style(this._lastAddedItem.domNode,{opacity:0,display:""});
+}
+this._placeItem(this._lastAddedItem.domNode);
+if(this.useAnim){
+var _9=dojo.fadeIn({node:this._lastAddedItem.domNode,duration:this.duration,easing:this.easingIn}).play();
+}
+this._items[this._lastAddedItem.index]=this._lastAddedItem;
+if(this._onChangeActive&&this.intermediateChanges){
+this.onChange(_8);
+}
+if(this._count>=this.maxItems&&this.maxItems!==null){
+break;
+}
+}
+this._updateValues();
+if(this._lastValueReported.length==0){
+this._lastValueReported=this.value;
+}
+if(!this.readOnlyInput){
+this._input.attr("value","");
+}
+if(this._onChangeActive){
+this.onChange(this.value);
+}
+this._setReadOnlyWhenMaxItemsReached();
+},_setReadOnlyWhenMaxItemsReached:function(){
+this.set("readOnlyInput",(this._count>=this.maxItems&&this.maxItems!==null));
+},_setSelectNode:function(){
+this._selectNode.options.length=0;
+var _a=this.submitOnlyValidValue?this.get("MatchedValue"):this.value;
+if(!dojo.isArray(_a)){
+return;
+}
+dojo.forEach(_a,function(_b){
+this._selectNode.options[this._selectNode.options.length]=new Option(_b,_b,true,true);
+},this);
+},_placeItem:function(_c){
+dojo.place(_c,this._inputNode,"before");
+},_getCursorPos:function(_d){
+if(typeof _d.selectionStart!="undefined"){
+return _d.selectionStart;
+}
+try{
+_d.focus();
+}
+catch(e){
+}
+var _e=_d.createTextRange();
+_e.moveToBookmark(dojo.doc.selection.createRange().getBookmark());
+_e.moveEnd("character",_d.value.length);
+try{
+return _d.value.length-_e.text.length;
+}
+finally{
+_e=null;
+}
+},_onItemClose:function(_f){
+if(this.disabled){
+return;
+}
+if(this.useAnim){
+var _10=dojo.fadeOut({node:_f.domNode,duration:this.duration,easing:this.easingOut,onEnd:dojo.hitch(this,"_destroyItem",_f)}).play();
+}else{
+this._destroyItem(_f);
+}
+},_onItemKeyDown:function(_11,e){
+if(this.readOnlyItem||!this.useArrowForEdit){
+return;
+}
+if(e.keyCode==dojo.keys.LEFT_ARROW&&this._getCursorPos(e.target)==0){
+this._editBefore(_11);
+}else{
+if(e.keyCode==dojo.keys.RIGHT_ARROW&&this._getCursorPos(e.target)==e.target.value.length){
+this._editAfter(_11);
+}
+}
+},_editBefore:function(_12){
+this._currentItem=this._getPreviousItem(_12);
+if(this._currentItem!==null){
+this._currentItem.edit();
+}
+},_editAfter:function(_13){
+this._currentItem=this._getNextItem(_13);
+if(this._currentItem!==null){
+this._currentItem.edit();
+}
+if(!this.readOnlyInput){
+if(this._currentItem===null){
+this._focusInput();
+}
+}
+},_onItemChange:function(_14,_15){
+if(!_15){
+_15=_14.attr("value");
+}
+this._testItem(_14,_15);
+this._updateValues();
+},_onItemEdit:function(_16){
+dojo.removeClass(_16.domNode,"dijitError");
+dojo.removeClass(_16.domNode,this.baseClass+"Match");
+dojo.removeClass(_16.domNode,this.baseClass+"Mismatch");
+},_testItem:function(_17,_18){
+var re=new RegExp(this.regExpGen(this.constraints));
+var _19=_18.match(re);
+dojo.removeClass(_17.domNode,this.baseClass+(!_19?"Match":"Mismatch"));
+dojo.addClass(_17.domNode,this.baseClass+(_19?"Match":"Mismatch"));
+dojo[(!_19?"add":"remove")+"Class"](_17.domNode,"dijitError");
+if((this.showCloseButtonWhenValid&&_19)||(this.showCloseButtonWhenInvalid&&!_19)){
+dojo.addClass(_17.domNode,this.baseClass+"Closable");
+}else{
+dojo.removeClass(_17.domNode,this.baseClass+"Closable");
+}
+},_getValueAttr:function(){
+return this.value;
+},_setValueAttr:function(_1a){
+this._destroyAllItems();
+this.add(this._parseValue(_1a));
+},_parseValue:function(_1b){
+if(typeof _1b=="string"){
+if(dojo.isString(this.delimiter)){
+this.delimiter=[this.delimiter];
+}
+var re=new RegExp("^.*("+this.delimiter.join("|")+").*");
+if(_1b.match(re)){
+re=new RegExp(this.delimiter.join("|"));
+return _1b.split(re);
+}
+}
+return _1b;
+},regExpGen:function(_1c){
+return this.regExp;
+},_setDisabledAttr:function(_1d){
+if(!this.readOnlyItem){
+for(var i in this._items){
+this._items[i].attr("disabled",_1d);
+}
+}
+if(!this.readOnlyInput){
+this._input.attr("disabled",_1d);
+}
+this.inherited(arguments);
+},_onHandler:function(_1e){
+var _1f=this._parseValue(_1e);
+if(dojo.isArray(_1f)){
+this.add(_1f);
+}
+},_onClick:function(e){
+this._focusInput();
+},_focusInput:function(){
+if(!this.readOnlyInput&&this._input.focus){
+this._input.focus();
+}
+},_inputOnKeyDown:function(e){
+this._currentItem=null;
+if(e.keyCode==dojo.keys.BACKSPACE&&this._input.attr("value")==""&&this.get("lastItem")){
+this._destroyItem(this.get("lastItem"));
+}else{
+if(e.keyCode==dojo.keys.ENTER&&this._input.attr("value")!=""){
+this.add(this._input.attr("value"));
+}else{
+if(e.keyCode==dojo.keys.LEFT_ARROW&&this._getCursorPos(this._input.focusNode)==0&&!this.readOnlyItem&&this.useArrowForEdit){
+this._editBefore();
+}
+}
+}
+},_inputOnBlur:function(){
+if(this.useOnBlur&&this._input.attr("value")!=""){
+this.add(this._input.attr("value"));
+}
+},_getMatchedValueAttr:function(){
+return this._getValues(dojo.hitch(this,this._matchValidator));
+},_getMismatchedValueAttr:function(){
+return this._getValues(dojo.hitch(this,this._mismatchValidator));
+},_getValues:function(_20){
+var _21=[];
+_20=_20||this._nullValidator;
+for(var i in this._items){
+var _22=this._items[i];
+if(_22===null){
+continue;
+}
+var _23=_22.attr("value");
+if(_20(_23)){
+_21.push(_23);
+}
+}
+return _21;
+},_nullValidator:function(_24){
+return true;
+},_matchValidator:function(_25){
+var re=new RegExp(this.regExpGen(this.constraints));
+return _25.match(re);
+},_mismatchValidator:function(_26){
+var re=new RegExp(this.regExpGen(this.constraints));
+return !(_26.match(re));
+},_getLastItemAttr:function(){
+return this._getSomeItem();
+},_getSomeItem:function(_27,_28){
+_27=_27||false;
+_28=_28||"last";
+var _29=null;
+var _2a=-1;
+for(var i in this._items){
+if(this._items[i]===null){
+continue;
+}
+if(_28=="before"&&this._items[i]===_27){
+break;
+}
+_29=this._items[i];
+if(_28=="first"||_2a==0){
+_2a=1;
+break;
+}
+if(_28=="after"&&this._items[i]===_27){
+_2a=0;
+}
+}
+if(_28=="after"&&_2a==0){
+_29=null;
+}
+return _29;
+},_getPreviousItem:function(_2b){
+return this._getSomeItem(_2b,"before");
+},_getNextItem:function(_2c){
+return this._getSomeItem(_2c,"after");
+},_destroyItem:function(_2d,_2e){
+this._items[_2d.index]=null;
+_2d.destroy();
+this._count--;
+if(_2e!==false){
+this._updateValues();
+this._setReadOnlyWhenMaxItemsReached();
+}
+},_updateValues:function(){
+this.value=this._getValues();
+this._setSelectNode();
+},_destroyAllItems:function(){
+for(var i in this._items){
+if(this._items[i]==null){
+continue;
+}
+this._destroyItem(this._items[i],false);
+}
+this._items=[];
+this._count=0;
+this.value=null;
+this._setSelectNode();
+this._setReadOnlyWhenMaxItemsReached();
+},destroy:function(){
+this._destroyAllItems();
+this._lastAddedItem=null;
+if(!this._input){
+this._input.destroy();
+}
+this.inherited(arguments);
+}});
+dojo.declare("dojox.form._ListInputInputItem",[dijit._Widget,dijit._Templated],{templateString:"<li class=\"dijit dijitReset dijitLeft dojoxListInputItem\" dojoAttachEvent=\"onclick: onClick\" ><span dojoAttachPoint=\"labelNode\"></span></li>",closeButtonNode:null,readOnlyItem:true,baseClass:"dojoxListInputItem",value:"",regExp:".*",_editBox:null,_handleKeyDown:null,attributeMap:{value:{node:"labelNode",type:"innerHTML"}},postMixInProperties:function(){
+var _2f=dojo.i18n.getLocalization("dijit","common");
+dojo.mixin(this,_2f);
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.closeButtonNode=dojo.create("span",{"class":"dijitButtonNode dijitDialogCloseIcon",title:this.itemClose,onclick:dojo.hitch(this,"onClose"),onmouseenter:dojo.hitch(this,"_onCloseEnter"),onmouseleave:dojo.hitch(this,"_onCloseLeave")},this.domNode);
+dojo.create("span",{"class":"closeText",title:this.itemClose,innerHTML:"x"},this.closeButtonNode);
+},startup:function(){
+this.inherited(arguments);
+this._createInlineEditBox();
+},_setReadOnlyItemAttr:function(_30){
+this.readOnlyItem=_30;
+if(!_30){
+this._createInlineEditBox();
+}else{
+if(this._editBox){
+this._editBox.attr("disabled",true);
+}
+}
+},_createInlineEditBox:function(){
+if(this.readOnlyItem){
+return;
+}
+if(!this._started){
+return;
+}
+if(this._editBox){
+this._editBox.attr("disabled",false);
+return;
+}
+this._editBox=new dijit.InlineEditBox({value:this.value,editor:"dijit.form.ValidationTextBox",editorParams:{regExp:this.regExp}},this.labelNode);
+this.connect(this._editBox,"edit","_onEdit");
+this.connect(this._editBox,"onChange","_onCloseEdit");
+this.connect(this._editBox,"onCancel","_onCloseEdit");
+},edit:function(){
+if(!this.readOnlyItem){
+this._editBox.edit();
+}
+},_onCloseEdit:function(_31){
+dojo.removeClass(this.closeButtonNode,this.baseClass+"Edited");
+dojo.disconnect(this._handleKeyDown);
+this.onChange(_31);
+},_onEdit:function(){
+dojo.addClass(this.closeButtonNode,this.baseClass+"Edited");
+this._handleKeyDown=dojo.connect(this._editBox.editWidget,"_onKeyPress",this,"onKeyDown");
+this.onEdit();
+},_setDisabledAttr:function(_32){
+if(!this.readOnlyItem){
+this._editBox.attr("disabled",_32);
+}
+},_getValueAttr:function(){
+return (!this.readOnlyItem&&this._started?this._editBox.attr("value"):this.value);
+},destroy:function(){
+if(this._editBox){
+this._editBox.destroy();
+}
+this.inherited(arguments);
+},_onCloseEnter:function(){
+dojo.addClass(this.closeButtonNode,"dijitDialogCloseIcon-hover");
+},_onCloseLeave:function(){
+dojo.removeClass(this.closeButtonNode,"dijitDialogCloseIcon-hover");
+},onClose:function(){
+},onEdit:function(){
+},onClick:function(){
+},onChange:function(_33){
+},onKeyDown:function(_34){
+}});
+dojo.declare("dojox.form._ListInputInputBox",[dijit.form.ValidationTextBox],{minWidth:50,intermediateChanges:true,regExp:".*",_sizer:null,onChange:function(_35){
+this.inherited(arguments);
+if(this._sizer===null){
+this._sizer=dojo.create("div",{style:{position:"absolute",left:"-10000px",top:"-10000px"}},dojo.body());
+}
+this._sizer.innerHTML=_35;
+var w=dojo.contentBox(this._sizer).w+this.minWidth;
+dojo.contentBox(this.domNode,{w:w});
+},destroy:function(){
+dojo.destroy(this._sizer);
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/form/FilePickerTextBox.js
===================================================================
--- trunk/web/dojo/dojox/form/FilePickerTextBox.js	(revision 0)
+++ trunk/web/dojo/dojox/form/FilePickerTextBox.js	(revision 9)
@@ -0,0 +1,265 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FilePickerTextBox"]){
+dojo._hasResource["dojox.form.FilePickerTextBox"]=true;
+dojo.provide("dojox.form.FilePickerTextBox");
+dojo.require("dojo.window");
+dojo.require("dijit.form.ValidationTextBox");
+dojo.require("dijit._HasDropDown");
+dojo.require("dojox.widget.FilePicker");
+dojo.declare("dojox.form.FilePickerTextBox",[dijit.form.ValidationTextBox,dijit._HasDropDown],{baseClass:"dojoxFilePickerTextBox",templateString:dojo.cache("dojox.form","resources/FilePickerTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\twaiRole=\"combobox\" tabIndex=\"-1\"\n\t><div style=\"overflow:hidden;\"\n\t\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"downArrowNode,_buttonNode,_popupStateNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitArrowButtonInner\">&thinsp;</div\n\t\t\t><div class=\"dijitArrowButtonChar\">&#9660;</div\n\t\t></div\n\t\t><div class=\"dijitReset dijitValidationIcon\"><br></div\n\t\t><div class=\"dijitReset dijitValidationIconText\">&Chi;</div\n\t\t><div class=\"dijitReset dijitInputField\"\n\t\t\t><input type=\"text\" autocomplete=\"off\" ${!nameAttrSetting} class='dijitReset'\n\t\t\t\tdojoAttachEvent='onkeypress:_onKey' \n\t\t\t\tdojoAttachPoint='textbox,focusNode' waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t\t/></div\n\t></div\n></div>\n"),searchDelay:500,valueItem:null,numPanes:2.25,postMixInProperties:function(){
+this.inherited(arguments);
+this.dropDown=new dojox.widget.FilePicker(this.constraints);
+},postCreate:function(){
+this.inherited(arguments);
+this.connect(this.dropDown,"onChange",this._onWidgetChange);
+this.connect(this.focusNode,"onblur","_focusBlur");
+this.connect(this.focusNode,"onfocus","_focusFocus");
+this.connect(this.focusNode,"ondblclick",function(){
+dijit.selectInputText(this.focusNode);
+});
+},_setValueAttr:function(_1,_2,_3){
+if(!this._searchInProgress){
+this.inherited(arguments);
+_1=_1||"";
+var _4=this.dropDown.attr("pathValue")||"";
+if(_1!==_4){
+this._skip=true;
+var fx=dojo.hitch(this,"_setBlurValue");
+this.dropDown._setPathValueAttr(_1,!_3,this._settingBlurValue?fx:null);
+}
+}
+},_onWidgetChange:function(_5){
+if(!_5&&this.focusNode.value){
+this._hasValidPath=false;
+this.focusNode.value="";
+}else{
+this.valueItem=_5;
+var _6=this.dropDown._getPathValueAttr(_5);
+if(_6){
+this._hasValidPath=true;
+}
+if(!this._skip){
+this._setValueAttr(_6,undefined,true);
+}
+delete this._skip;
+}
+this.validate();
+},startup:function(){
+if(!this.dropDown._started){
+this.dropDown.startup();
+}
+this.inherited(arguments);
+},openDropDown:function(){
+this.dropDown.domNode.style.width="0px";
+if(!("minPaneWidth" in (this.constraints||{}))){
+this.dropDown.attr("minPaneWidth",(this.domNode.offsetWidth/this.numPanes));
+}
+this.inherited(arguments);
+},toggleDropDown:function(){
+this.inherited(arguments);
+if(this._opened){
+this.dropDown.attr("pathValue",this.get("value"));
+}
+},_focusBlur:function(e){
+if(e.explicitOriginalTarget==this.focusNode&&!this._allowBlur){
+window.setTimeout(dojo.hitch(this,function(){
+if(!this._allowBlur){
+this.focus();
+}
+}),1);
+}else{
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false});
+delete this._menuFocus;
+}
+}
+},_focusFocus:function(e){
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false});
+}
+delete this._menuFocus;
+var _7=dijit.getFocus(this);
+if(_7&&_7.node){
+_7=dijit.byNode(_7.node);
+if(_7){
+this._menuFocus=_7.domNode;
+}
+}
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":true});
+}
+delete this._allowBlur;
+},_onBlur:function(){
+this._allowBlur=true;
+delete this.dropDown._savedFocus;
+this.inherited(arguments);
+},_setBlurValue:function(){
+if(this.dropDown&&!this._settingBlurValue){
+this._settingBlurValue=true;
+this.set("value",this.focusNode.value);
+}else{
+delete this._settingBlurValue;
+this.inherited(arguments);
+}
+},parse:function(_8,_9){
+if(this._hasValidPath||this._hasSelection){
+return _8;
+}
+var dd=this.dropDown,_a=dd.topDir,_b=dd.pathSeparator;
+var _c=dd.attr("pathValue");
+var _d=function(v){
+if(_a.length&&v.indexOf(_a)===0){
+v=v.substring(_a.length);
+}
+if(_b&&v[v.length-1]==_b){
+v=v.substring(0,v.length-1);
+}
+return v;
+};
+_c=_d(_c);
+var _e=_d(_8);
+if(_e==_c){
+return _8;
+}
+return undefined;
+},_startSearchFromInput:function(){
+var dd=this.dropDown,fn=this.focusNode;
+var _f=fn.value,_10=_f,_11=dd.topDir;
+if(this._hasSelection){
+dijit.selectInputText(fn,_10.length);
+}
+this._hasSelection=false;
+if(_11.length&&_f.indexOf(_11)===0){
+_f=_f.substring(_11.length);
+}
+var _12=_f.split(dd.pathSeparator);
+var _13=dojo.hitch(this,function(idx){
+var dir=_12[idx];
+var _14=dd.getChildren()[idx];
+var _15;
+this._searchInProgress=true;
+var _16=dojo.hitch(this,function(){
+delete this._searchInProgress;
+});
+if((dir||_14)&&!this._opened){
+this.toggleDropDown();
+}
+if(dir&&_14){
+var fx=dojo.hitch(this,function(){
+if(_15){
+this.disconnect(_15);
+}
+delete _15;
+var _17=_14._menu.getChildren();
+var _18=dojo.filter(_17,function(i){
+return i.label==dir;
+})[0];
+var _19=dojo.filter(_17,function(i){
+return (i.label.indexOf(dir)===0);
+})[0];
+if(_18&&((_12.length>idx+1&&_18.children)||(!_18.children))){
+idx++;
+_14._menu.onItemClick(_18,{type:"internal",stopPropagation:function(){
+},preventDefault:function(){
+}});
+if(_12[idx]){
+_13(idx);
+}else{
+_16();
+}
+}else{
+_14._setSelected(null);
+if(_19&&_12.length===idx+1){
+dd._setInProgress=true;
+dd._removeAfter(_14);
+delete dd._setInProgress;
+var _1a=_19.label;
+if(_19.children){
+_1a+=dd.pathSeparator;
+}
+_1a=_1a.substring(dir.length);
+window.setTimeout(function(){
+dojo.window.scrollIntoView(_19.domNode);
+},1);
+fn.value=_10+_1a;
+dijit.selectInputText(fn,_10.length);
+this._hasSelection=true;
+try{
+_19.focusNode.focus();
+}
+catch(e){
+}
+}else{
+if(this._menuFocus){
+this.dropDown._updateClass(this._menuFocus,"Item",{"Hover":false,"Focus":false});
+}
+delete this._menuFocus;
+}
+_16();
+}
+});
+if(!_14.isLoaded){
+_15=this.connect(_14,"onLoad",fx);
+}else{
+fx();
+}
+}else{
+if(_14){
+_14._setSelected(null);
+dd._setInProgress=true;
+dd._removeAfter(_14);
+delete dd._setInProgress;
+}
+_16();
+}
+});
+_13(0);
+},_onKey:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+var dk=dojo.keys;
+var c=e.charOrCode;
+if(c==dk.DOWN_ARROW){
+this._allowBlur=true;
+}
+if(c==dk.ENTER&&this._opened){
+this.dropDown.onExecute();
+dijit.selectInputText(this.focusNode,this.focusNode.value.length);
+this._hasSelection=false;
+dojo.stopEvent(e);
+return;
+}
+if((c==dk.RIGHT_ARROW||c==dk.LEFT_ARROW||c==dk.TAB)&&this._hasSelection){
+this._startSearchFromInput();
+dojo.stopEvent(e);
+return;
+}
+this.inherited(arguments);
+var _1b=false;
+if((c==dk.BACKSPACE||c==dk.DELETE)&&this._hasSelection){
+this._hasSelection=false;
+}else{
+if(c==dk.BACKSPACE||c==dk.DELETE||c==" "){
+_1b=true;
+}else{
+_1b=e.keyChar!=="";
+}
+}
+if(this._searchTimer){
+window.clearTimeout(this._searchTimer);
+}
+delete this._searchTimer;
+if(_1b){
+this._hasValidPath=false;
+this._hasSelection=false;
+this._searchTimer=window.setTimeout(dojo.hitch(this,"_startSearchFromInput"),this.searchDelay+1);
+}
+}});
+}
Index: trunk/web/dojo/dojox/form/DateTextBox.js
===================================================================
--- trunk/web/dojo/dojox/form/DateTextBox.js	(revision 0)
+++ trunk/web/dojo/dojox/form/DateTextBox.js	(revision 9)
@@ -0,0 +1,82 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.DateTextBox"]){
+dojo._hasResource["dojox.form.DateTextBox"]=true;
+dojo.provide("dojox.form.DateTextBox");
+dojo.experimental("dojox.form.DateTextBox");
+dojo.require("dojox.widget.Calendar");
+dojo.require("dojox.widget.CalendarViews");
+dojo.require("dijit.form._DateTimeTextBox");
+dojo.declare("dojox.form.DateTextBox",dijit.form._DateTimeTextBox,{popupClass:"dojox.widget.Calendar",_selector:"date",_open:function(){
+this.inherited(arguments);
+dojo.style(this._picker.domNode.parentNode,"position","absolute");
+}});
+dojo.declare("dojox.form.DayTextBox",dojox.form.DateTextBox,{popupClass:"dojox.widget.DailyCalendar",parse:function(_1){
+return _1;
+},format:function(_2){
+return _2.getDate?_2.getDate():_2;
+},validator:function(_3){
+var _4=Number(_3);
+var _5=/(^-?\d\d*$)/.test(String(_3));
+return _3==""||_3==null||(_5&&_4>=1&&_4<=31);
+},_open:function(){
+this.inherited(arguments);
+this._picker.onValueSelected=dojo.hitch(this,function(_6){
+this.focus();
+setTimeout(dojo.hitch(this,"_close"),1);
+dijit.form.TextBox.prototype._setValueAttr.call(this,String(_6.getDate()),true,String(_6.getDate()));
+});
+}});
+dojo.declare("dojox.form.MonthTextBox",dojox.form.DateTextBox,{popupClass:"dojox.widget.MonthlyCalendar",selector:"date",postMixInProperties:function(){
+this.inherited(arguments);
+this.constraints.datePattern="MM";
+},format:function(_7){
+return Number(_7)+1;
+},parse:function(_8,_9){
+return Number(_8)-1;
+},serialize:function(_a,_b){
+return String(_a);
+},validator:function(_c){
+var _d=Number(_c);
+var _e=/(^-?\d\d*$)/.test(String(_c));
+return _c==""||_c==null||(_e&&_d>=1&&_d<=12);
+},_open:function(){
+this.inherited(arguments);
+this._picker.onValueSelected=dojo.hitch(this,function(_f){
+this.focus();
+setTimeout(dojo.hitch(this,"_close"),1);
+dijit.form.TextBox.prototype._setValueAttr.call(this,_f,true,_f);
+});
+}});
+dojo.declare("dojox.form.YearTextBox",dojox.form.DateTextBox,{popupClass:"dojox.widget.YearlyCalendar",format:function(_10){
+if(typeof _10=="string"){
+return _10;
+}else{
+if(_10.getFullYear){
+return _10.getFullYear();
+}
+}
+return _10;
+},validator:function(_11){
+return _11==""||_11==null||/(^-?\d\d*$)/.test(String(_11));
+},_open:function(){
+this.inherited(arguments);
+this._picker.onValueSelected=dojo.hitch(this,function(_12){
+this.focus();
+setTimeout(dojo.hitch(this,"_close"),1);
+dijit.form.TextBox.prototype._setValueAttr.call(this,_12,true,_12);
+});
+},parse:function(_13,_14){
+return _13||(this._isEmpty(_13)?null:undefined);
+},filter:function(val){
+if(val&&val.getFullYear){
+return val.getFullYear().toString();
+}
+return this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/form/DropDownSelect.js
===================================================================
--- trunk/web/dojo/dojox/form/DropDownSelect.js	(revision 0)
+++ trunk/web/dojo/dojox/form/DropDownSelect.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.DropDownSelect"]){
+dojo._hasResource["dojox.form.DropDownSelect"]=true;
+dojo.deprecated("dojox.form.DropDownSelect","Use dijit.form.Select instead","2.0");
+dojo.provide("dojox.form.DropDownSelect");
+dojo.require("dijit.form.Select");
+dojo.setObject("dojox.form.DropDownSelect",dijit.form.Select);
+}
Index: trunk/web/dojo/dojox/form/TimeSpinner.js
===================================================================
--- trunk/web/dojo/dojox/form/TimeSpinner.js	(revision 0)
+++ trunk/web/dojo/dojox/form/TimeSpinner.js	(revision 9)
@@ -0,0 +1,35 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.TimeSpinner"]){
+dojo._hasResource["dojox.form.TimeSpinner"]=true;
+dojo.provide("dojox.form.TimeSpinner");
+dojo.require("dijit.form._Spinner");
+dojo.require("dojo.date");
+dojo.require("dojo.date.locale");
+dojo.require("dojo.date.stamp");
+dojo.declare("dojox.form.TimeSpinner",[dijit.form._Spinner],{required:false,adjust:function(_1,_2){
+return dojo.date.add(_1,"minute",_2);
+},isValid:function(){
+return true;
+},smallDelta:5,largeDelta:30,timeoutChangeRate:0.5,parse:function(_3,_4){
+return dojo.date.locale.parse(_3,{selector:"time",formatLength:"short"});
+},format:function(_5,_6){
+if(dojo.isString(_5)){
+return _5;
+}
+return dojo.date.locale.format(_5,{selector:"time",formatLength:"short"});
+},serialize:dojo.date.stamp.toISOString,value:"12:00 AM",_onKeyPress:function(e){
+if((e.charOrCode==dojo.keys.HOME||e.charOrCode==dojo.keys.END)&&!(e.ctrlKey||e.altKey||e.metaKey)&&typeof this.get("value")!="undefined"){
+var _7=this.constraints[(e.charOrCode==dojo.keys.HOME?"min":"max")];
+if(_7){
+this._setValueAttr(_7,true);
+}
+dojo.stopEvent(e);
+}
+}});
+}
Index: trunk/web/dojo/dojox/form/resources/BusyButton.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/BusyButton.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/BusyButton.css	(revision 9)
@@ -0,0 +1,9 @@
+
+.dojoxBusyButtonIcon {
+	width: 10px;
+	height: 10px;
+	vertical-align: middle;
+	margin-left: 4px;
+	background-image: url('images/loading_wheel.gif');
+	background-repeat: no-repeat;
+}
Index: trunk/web/dojo/dojox/form/resources/images/soriaFolderSprite.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/form/resources/images/soriaFolderSprite.gif
===================================================================
--- trunk/web/dojo/dojox/form/resources/images/soriaFolderSprite.gif	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/images/soriaFolderSprite.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/form/resources/images/soriaFolderSprite.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/form/resources/images/tundraFolderSprite.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/form/resources/images/tundraFolderSprite.gif
===================================================================
--- trunk/web/dojo/dojox/form/resources/images/tundraFolderSprite.gif	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/images/tundraFolderSprite.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/form/resources/images/tundraFolderSprite.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/form/resources/images/loading_wheel.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/form/resources/images/loading_wheel.gif
===================================================================
--- trunk/web/dojo/dojox/form/resources/images/loading_wheel.gif	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/images/loading_wheel.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/form/resources/images/loading_wheel.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/form/resources/images/rating_empty.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/form/resources/images/rating_empty.gif
===================================================================
--- trunk/web/dojo/dojox/form/resources/images/rating_empty.gif	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/images/rating_empty.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/form/resources/images/rating_empty.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/form/resources/images/nihiloFolderSprite.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/form/resources/images/nihiloFolderSprite.gif
===================================================================
--- trunk/web/dojo/dojox/form/resources/images/nihiloFolderSprite.gif	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/images/nihiloFolderSprite.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/form/resources/images/nihiloFolderSprite.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/form/resources/images/rating_full.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/form/resources/images/rating_full.gif
===================================================================
--- trunk/web/dojo/dojox/form/resources/images/rating_full.gif	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/images/rating_full.gif	(revision 9)

Property changes on: trunk/web/dojo/dojox/form/resources/images/rating_full.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/form/resources/uploader.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/form/resources/uploader.swf
===================================================================
--- trunk/web/dojo/dojox/form/resources/uploader.swf	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/uploader.swf	(revision 9)

Property changes on: trunk/web/dojo/dojox/form/resources/uploader.swf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/form/resources/PasswordValidator.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/PasswordValidator.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/PasswordValidator.html	(revision 9)
@@ -0,0 +1,3 @@
+<div dojoAttachPoint="containerNode">
+	<input type="hidden" name="${name}" value="" dojoAttachPoint="focusNode" />
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/resources/Rating.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/Rating.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/Rating.css	(revision 9)
@@ -0,0 +1,20 @@
+.dojoxRating ul {
+	padding:0;
+	margin:0;
+}
+.dojoxRatingStar {
+	display:inline-block;
+	background-image:url(images/rating_empty.gif);
+	background-position:left center;
+	position:relative;
+	height:15px;
+	width:15px;
+	float:left;
+}
+.dojoxRatingStarChecked {
+	background-image:url(images/rating_full.gif);
+}
+.dojoxRatingStarHover {
+	background-image:url(images/rating_full.gif);
+	opacity:.5;
+}
Index: trunk/web/dojo/dojox/form/resources/HorizontalRangeSlider.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/HorizontalRangeSlider.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/HorizontalRangeSlider.html	(revision 9)
@@ -0,0 +1,39 @@
+<table class="dijit dijitReset dijitSlider dijitSliderH dojoxRangeSlider" cellspacing="0" cellpadding="0" border="0" rules="none" dojoAttachEvent="onkeypress:_onKeyPress,onkeyup:_onKeyUp"
+	><tr class="dijitReset"
+		><td class="dijitReset" colspan="2"></td
+		><td dojoAttachPoint="topDecoration" class="dijitReset dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH"></td
+		><td class="dijitReset" colspan="2"></td
+	></tr
+	><tr class="dijitReset"
+		><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH"
+			><div class="dijitSliderDecrementIconH" tabIndex="-1" style="display:none" dojoAttachPoint="decrementButton"><span class="dijitSliderButtonInner">-</span></div
+		></td
+		><td class="dijitReset"
+			><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper" dojoAttachEvent="onmousedown:_onClkDecBumper"></div
+		></td
+		><td class="dijitReset"
+			><input dojoAttachPoint="valueNode" type="hidden" ${!nameAttrSetting}
+			/><div waiRole="presentation" class="dojoxRangeSliderBarContainer" dojoAttachPoint="sliderBarContainer"
+				><div dojoAttachPoint="sliderHandle" tabIndex="${tabIndex}" class="dijitSliderMoveable dijitSliderMoveableH" dojoAttachEvent="onmousedown:_onHandleClick" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
+					><div class="dijitSliderImageHandle dijitSliderImageHandleH"></div
+				></div
+				><div waiRole="presentation" dojoAttachPoint="progressBar,focusNode" class="dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH" dojoAttachEvent="onmousedown:_onBarClick"></div
+				><div dojoAttachPoint="sliderHandleMax,focusNodeMax" tabIndex="${tabIndex}" class="dijitSliderMoveable dijitSliderMoveableH" dojoAttachEvent="onmousedown:_onHandleClickMax" waiRole="sliderMax" valuemin="${minimum}" valuemax="${maximum}"
+					><div class="dijitSliderImageHandle dijitSliderImageHandleH"></div
+				></div
+				><div waiRole="presentation" dojoAttachPoint="remainingBar" class="dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH" dojoAttachEvent="onmousedown:_onRemainingBarClick"></div
+			></div
+		></td
+		><td class="dijitReset"
+			><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper" dojoAttachEvent="onmousedown:_onClkIncBumper"></div
+		></td
+		><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH"
+			><div class="dijitSliderIncrementIconH" tabIndex="-1" style="display:none" dojoAttachPoint="incrementButton"><span class="dijitSliderButtonInner">+</span></div
+		></td
+	></tr
+	><tr class="dijitReset"
+		><td class="dijitReset" colspan="2"></td
+		><td dojoAttachPoint="containerNode,bottomDecoration" class="dijitReset dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH"></td
+		><td class="dijitReset" colspan="2"></td
+	></tr
+></table>
Index: trunk/web/dojo/dojox/form/resources/FilePickerTextBox.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/FilePickerTextBox.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/FilePickerTextBox.css	(revision 9)
@@ -0,0 +1,468 @@
+.dojoxRollingList {
+	border: 1px solid #000;
+	height: 20em;
+	background-color: #FFF;
+	position: relative;
+}
+.dijitPopup .dojoxRollingList {
+	position: static;
+}
+.dojoxRollingListContainer {
+	overflow: scroll;
+	overflow-y: hidden;
+	overflow-x: scroll;
+	white-space: nowrap;
+}
+.dojoxRollingListButtons {
+	position: absolute;
+	right: 5px;
+	padding: 5px 0px;
+}
+.dojoxRollingListButtonsHidden .dojoxRollingListButtons {
+	display: none;
+}
+.dojoxRollingListPane {
+	overflow: scroll;
+	overflow-x: hidden;
+	overflow-y: scroll;
+	display:-moz-inline-box;		
+	display:inline-block;			
+	#zoom: 1; 
+	#display:inline; 
+	border:0;
+	padding:0;
+	vertical-align:middle;
+	#vertical-align: auto;	
+}
+.dojoxRollingListPane .dijitMenuItem td {
+	width: 1px;
+}
+.dojoxRollingListPane .dijitMenuItem td.dijitMenuItemLabel {
+	width: auto;
+}
+.dojoxRollingListPane .dijitMenuItemLabel,
+.dojoxRollingListPane .dijitMenuItemIcon {
+	position: static !important;
+}
+.dj_webkit .dojoxRollingListPane,
+.dj_ie .dojoxRollingListPane {
+	padding-right: 15px; 
+}
+.dojoxRollingListPane .dijitMenu {
+	border: none !important;
+}
+.dojoxRollingListItem {
+	cursor: default;
+}
+.tundra .dojoxRollingList {
+	border-color: #b3b3b3;
+}
+.tundra .dijitPopup .dojoxRollingList {
+	border-color: #406b9b;
+}
+.tundra .dojoxRollingListPane {
+	background-color: #f7f7f7;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHover,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #fff;
+	background-color: #999;
+	font-weight: bold;
+}
+.tundra .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #3559ac;
+}
+.tundra .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.tundra .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #9aacd6;
+}
+.tundra .dojoxRollingListItem {
+	font-family: inherit;
+}
+.soria .dojoxRollingList {
+	border-color: #8ba0bd;
+}
+.soria .dijitPopup .dojoxRollingList {
+	border-color: #406b9b;
+}
+.soria .dojoxRollingListPane {
+	background-color: #fff;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHover, 
+.soria .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #243C5F;
+	background-color: #ccc;
+	font-weight: bold;
+}
+.soria .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #d9e6f9;
+}
+.soria .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.soria .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #ecf3fc;
+}
+.soria .dojoxRollingListItem {
+	font-family: inherit;
+}
+.nihilo .dojoxRollingList {
+	border-color: #d3d3d3;
+}
+.nihilo .dijitPopup .dojoxRollingList {
+	border-color: #b3b3b3;
+}
+.nihilo .dojoxRollingListPane {
+	background-color: #fff;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHover,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocus {
+	background-color: #e3e3e3;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemSelected {
+	color: #243C5F;
+	background-color: #ccc;
+	font-weight: bold;
+}
+.nihilo .dojoxRollingListPaneCurrentSelected .dojoxRollingListItemSelected {
+	background-color: #ffe284;
+}
+.nihilo .dojoxRollingListPane .dojoxRollingListItemHoverSelected,
+.nihilo .dojoxRollingListPane .dojoxRollingListItemFocusSelected {
+	background-color: #fff1c2;
+}
+.nihilo .dojoxRollingListItem {
+	font-family: inherit;
+}
+.dojoxFileInfoPane *{
+	white-space: normal;
+}
+.dojoxFileInfoLabel {
+	font-weight: bold;
+	white-space: nowrap;
+}
+.dojoxFileInfoPane {
+	width: 20em;
+}
+.tundra .dojoxFilePickerItem .dijitMenuItemIcon {
+	background-image: url(../../widget/FilePicker/images/tundraFileIcons.gif);
+	background-repeat: no-repeat;
+}
+.tundra .dojoxFilePickerItem .dojoxEmpty {
+	background-image: none;
+}
+.tundra .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+	background-position: 0px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+	background-position: -16px;
+}
+.tundra .dojoxFilePickerItem .dojoxFileItemIcon {
+	background-position: -32px;
+}
+.tundra .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+	background-position: -48px;
+}
+.soria .dojoxFilePickerItem .dijitMenuItemIcon {
+	background-image: url(../../widget/FilePicker/images/soriaFileIcons.gif);
+	background-repeat: no-repeat;
+}
+.soria .dojoxFilePickerItem .dojoxEmpty {
+	background-image: none;
+}
+.soria .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+	background-position: 0px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+	background-position: -16px;
+}
+.soria .dojoxFilePickerItem .dojoxFileItemIcon {
+	background-position: -32px;
+}
+.soria .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+	background-position: -48px;
+}
+.nihilo .dojoxFilePickerItem .dijitMenuItemIcon {
+	background-image: url(../../widget/FilePicker/images/nihiloFileIcons.gif);
+	background-repeat: no-repeat;
+}
+.nihilo .dojoxFilePickerItem .dojoxEmpty {
+	background-image: none;
+}
+.nihilo .dojoxFilePickerItem .dojoxDirectoryItemIcon {
+	background-position: 0px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxDirectoryItemIcon {
+	background-position: -16px;
+}
+.nihilo .dojoxFilePickerItem .dojoxFileItemIcon {
+	background-position: -32px;
+}
+.nihilo .dojoxFilePickerItemSelected .dojoxFileItemIcon {
+	background-position: -48px;
+}
+.dojoxFilePickerTextBox{
+	width: 30em;
+	vertical-align: middle;
+}
+.dojoxFilePickerTextBox input:focus{
+	outline: none;
+}
+.dojoxFilePickerTextBoxFocused{
+	outline: auto 5px -webkit-focus-ring-color;
+}
+.dojoxFilePickerTextBox INPUT{
+	border-left: solid black 1px;
+	display:inline;
+	position:static !important;
+	border:0 !important;	
+	margin:0 !important;
+	vertical-align:top !important;
+	visibility:visible !important;
+	background-color:transparent !important;
+	background-image:none !important;
+	width:100% !important;
+}
+.dijitRtl .dojoxFilePickerTextBox .dijitInputField {
+	border-right-width:1px !important;
+	border-left-width:0 !important;
+}
+.tundra .dojoxFilePickerTextBoxDisabled *
+{
+	cursor: not-allowed !important;
+}
+.tundra .dojoxFilePickerTextBox {
+	font-family: sans-serif;
+	font-size: 100%;
+}
+.tundra .dojoxFilePickerTextBox {
+	background:#fff url("../../../dijit/themes/tundra/images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../../../dijit/themes/tundra/images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #b3b3b3;
+	line-height: normal;
+}
+.tundra .dojoxFilePickerTextBoxDisabled {
+	color: gray;
+}
+.dj_webkit .tundra .dojoxFilePickerTextBoxDisabled {
+	color: #eee;
+}
+.tundra .dojoxFilePickerTextBox .dijitInputField {
+	padding: 1px 0;
+}
+.tundra .dojoxFilePickerTextBox .dijitButtonNode {
+	padding: 1px 0.2em;
+}
+.tundra .dojoxFilePickerTextBox .dijitButtonNode{
+	border-color: #9b9b9b;
+	border-width: 0px 0px 0px 1px;
+	border-style: solid;
+}
+.tundra .dojoxFilePickerTextBoxFocused {
+	border-color:#406b9b;
+}
+.tundra .dojoxFilePickerTextBoxFocused .dijitButtonNode {
+	border-left-color:#366dba;
+}
+.dijitRtl .tundra .dojoxFilePickerTextBox .dijitButtonNode{
+	border-color: #9b9b9b;
+	border-width: 0px 1px 0px 0px;
+}
+.tundra .dojoxFilePickerTextBoxDisabled {
+	border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5; 
+	background:#e4e4e4 url("../../../dijit/themes/tundra/images/buttonDisabled.png") top repeat-x;
+}
+.tundra .dojoxFilePickerTextBoxHover .dijitDownArrowButton {
+	border-color:		#a5beda; 
+	border-bottom-color:#5c7590; 
+	color:#000;
+	background:#fcfdff url("../../../dijit/themes/tundra/images/buttonHover.png") repeat-x bottom;
+}
+.tundra .dojoxFilePickerTextBoxActive .dijitDownArrowButton {
+	border-color:#366dba;
+	background: #ededed url("../../../dijit/themes/tundra/images/buttonActive.png") bottom repeat-x;
+}
+.tundra .dojoxFilePickerTextBox .dijitArrowButton .dijitArrowButtonInner {
+	background-image: url("images/tundraFolderSprite.gif");
+	background-repeat: no-repeat;
+	background-attachment: scroll;
+	background-position: left center;
+	height: auto;
+	width: 16px;
+	font-size: 100%;
+	font-size: inherit;
+}
+.tundra .dojoxFilePickerTextBox .dojoxHasDropDownOpen .dijitArrowButtonInner {
+	background-position: -16px;
+}
+.tundra .dojoxFilePickerTextBoxError {
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.dj_ie6 .tundra .dojoxFilePickerTextBoxError INPUT {
+	background-color:#f9f7ba !important;
+}
+.tundra .dojoxFilePickerTextBoxErrorFocused {
+	background-color:#f9f999;
+	background-image:none;
+}
+.dj_ie6 .tundra .dojoxFilePickerTextBoxErrorFocused INPUT {
+	background-color:#f9f999 !important;
+}
+.nihilo .dojoxFilePickerTextBoxDisabled *
+{
+	cursor: not-allowed !important;
+}
+.nihilo .dojoxFilePickerTextBox{
+	margin: 0em 0.1em;
+}
+.nihilo .dojoxFilePickerTextBox {
+	background:#fff url("../../../dijit/themes/nihilo/images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../../../dijit/themes/nihilo/images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #d3d3d3;
+	line-height: normal;
+}
+.nihilo .dojoxFilePickerTextBox .dijitButtonNode {
+	padding: 0 0.2em;
+}
+.nihilo .dojoxFilePickerTextBox .dijitButtonNode{
+	border-color: #d3d3d3;
+	border-left: 1px solid #d3d3d3;
+}
+.nihilo .dojoxFilePickerTextBoxDisabled {
+	color: gray;
+}
+.dj_safari .nihilo .dojoxFilePickerTextBoxDisabled {
+	color: #eee;
+}
+.nihilo .dojoxFilePickerTextBoxFocused {
+	border-color:#b3b3b3;
+}
+.nihilo .dojoxFilePickerTextBoxFocused .dijitButtonNode, {
+	border-left-color:#d3d3d3;
+}
+.dijitRtl .nihilo .dojoxFilePickerTextBox .dijitButtonNode {
+	border-color: #8ba0bd;
+	border-left: 0px solid #8ba0bd;
+	border-right: 1px solid #8ba0bd;
+}
+.nihilo .dojoxFilePickerTextBoxDisabled {
+	border-color: #dedede;
+	background:#fafafa url("../../../dijit/themes/nihilo/images/buttonDisabled.png") top repeat-x;
+	opacity: 0.60;
+}
+.nihilo .dojoxFilePickerTextBoxHover .dijitDownArrowButton {
+	color:#000;
+	background:#fcfcfc url("../../../dijit/themes/nihilo/images/buttonHover.png") repeat-x top left;
+}
+.nihilo .dojoxFilePickerTextBoxActive .dijitDownArrowButton {
+	border-color:#dedede;
+	background: #f5f5f5 url("../../../dijit/themes/nihilo/images/buttonActive.png") top left repeat-x;
+}
+.dijitRtl .nihilo .dojoxFilePickerTextBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.nihilo .dojoxFilePickerTextBox .dijitArrowButton .dijitArrowButtonInner {
+	background:url("images/nihiloFolderSprite.gif") no-repeat left center;
+	width: 16px;
+}
+.nihilo .dojoxFilePickerTextBox .dojoxHasDropDownOpen .dijitArrowButtonInner {
+	background-position: -16px;
+}
+.nihilo .dojoxFilePickerTextBoxError {
+	border-color:#b3b3b3;
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.dj_ie6 .nihilo .dojoxFilePickerTextBoxError INPUT {
+	background-color:#f9f7ba !important;
+}
+.nihilo .dojoxFilePickerTextBoxErrorFocused {
+	background-color:#ff6;
+	background-image:none;
+}
+.dj_ie6 .nihilo .dojoxFilePickerTextBoxErrorFocused INPUT {
+	background-color:#ff6 !important;
+}
+.soria .dojoxFilePickerTextBoxDisabled *
+{
+	cursor: not-allowed !important;
+}
+.soria .dojoxFilePickerTextBox{
+	margin: 0em 0.1em;
+}
+.soria .dojoxFilePickerTextBox {
+	background:#fff url("../images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #8ba0bd;
+	line-height: normal;
+}
+.soria .dojoxFilePickerTextBoxDisabled{
+	color: gray;
+}
+.dj_safari .soria .dojoxFilePickerTextBoxDisabled{
+	color: #eee;
+}
+.soria .dojoxFilePickerTextBox .dijitButtonNode {
+	padding: 0 0.2em;
+}
+.soria .dojoxFilePickerTextBox .dijitButtonNode{
+	border-color: #8ba0bd;
+	border-left: 1px solid #8ba0bd;
+}
+.soria .dojoxFilePickerTextBoxFocused {
+	border-color:#406b9b;
+}
+.soria .dojoxFilePickerTextBoxFocused .dijitButtonNode {
+	border-left-color:#8ba0bd;
+}
+.dijitRtl .soria .dojoxFilePickerTextBox .dijitButtonNode{
+	border-color: #8ba0bd;
+	border-left: 0px solid #8ba0bd;
+	border-right: 1px solid #8ba0bd;
+}
+.soria .dojoxFilePickerTextBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.soria .dojoxFilePickerTextBoxDisabled{
+	border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+	background:#c3d3e5 url("../../../dijit/themes/soria/buttonDisabled.png") top repeat-x;
+	opacity: 0.60; 
+}
+.soria .dojoxFilePickerTextBoxHover .dijitDownArrowButton{
+	color:#000;
+	background:#acc5e2 url("../../../dijit/themes/soria/buttonHover.png") repeat-x top left;
+}
+.soria .dojoxFilePickerTextBoxActive .dijitDownArrowButton {
+	border-color:#657c9c;
+	background: #91b4e5 url("../../../dijit/themes/soria/buttonActive.png") top left repeat-x;
+}
+.dijitRtl .soria .dojoxFilePickerTextBox .dijitButtonNode {
+	border-width: 0px 0px 0px 1px;
+}
+.soria .dojoxFilePickerTextBox .dijitArrowButton .dijitArrowButtonInner {
+	background:url("images/soriaFolderSprite.gif") no-repeat left center;
+	width: 16px;
+}
+.soria .dojoxFilePickerTextBox .dojoxHasDropDownOpen .dijitArrowButtonInner {
+	background-position: -16px;
+}
+.soria .dojoxFilePickerTextBoxError {
+	border-color:#f3d118;
+	background-color:#f9f7ba;
+	background-image:none;
+}
+.dj_ie6 .soria .dojoxFilePickerTextBoxError INPUT {
+	background-color:#f9f7ba !important;
+}
+.soria .dojoxFilePickerTextBoxErrorFocused {
+	background-color:#ff6;
+	background-image:none;
+}
+.dj_ie6 .soria .dojoxFilePickerTextBoxErrorFocused INPUT {
+	background-color:#ff6 !important;
+}
Index: trunk/web/dojo/dojox/form/resources/ListInput.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/ListInput.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/ListInput.css	(revision 9)
@@ -0,0 +1,75 @@
+.dojoxListInput {
+	border:1px solid #ccc;
+	background-color:#efefef;
+	height:auto !important;
+	max-height:60px;
+	min-height:20px;
+	overflow:auto;
+	position:relative
+}
+.dojoxListInput ul {
+	margin:0;
+	padding:0
+}
+.dijitDialogCloseIcon {
+	display:none;
+}
+.dojoxListInputClosable .dijitDialogCloseIcon{
+	display:inline 
+}
+.dojoxListInputClosable {
+	padding-right:18px !important
+}
+.dojoxListInputItem {
+	float:left;
+	list-style-type:none;
+	margin:1px 5px 1px 1px;
+	padding:0
+}
+.dojoxListInputItem .closeText {
+	display:none;
+	position:absolute;
+}
+.dojoxListInputItem .dijitDialogCloseIcon{
+	right:auto !important;
+	border:0 !important;
+	padding:0!important;
+}
+.dojoxListInputMatch {
+	border :1px solid #5EB55E;
+	background-color:#efffef
+}
+.dojoxListInputMismatch {
+	border :1px solid #B55E5E;
+	background-color:#ffefef
+}
+.dojoxListInput.dojoxListInputFocused {
+	border:1px solid #000;
+	border-right:1px solid #ccc;
+	border-bottom:1px solid #ccc;
+	background-color:#fff
+}
+.dojoxListInputNode {
+	cursor:text;
+}
+.dojoxListInput .dijitTextBox {
+	background:#efefef !important;
+	border:0 !important;
+}
+.dojoxListInputFocused .dijitTextBox {
+	background: #fff !important;
+	border:0 !important;
+}
+.dojoxListInputItem .dijitTextBox {
+	width:auto !important;
+	border:0 !important;
+}
+.dojoxListInputNode {
+	float:none;
+}
+.dojoxListInputItemEdited{
+	display:none !important
+}
+.dojoxListInputItem .dijitInline{
+	display:inline !important
+}
Index: trunk/web/dojo/dojox/form/resources/_CheckedMultiSelectItem.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/_CheckedMultiSelectItem.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/_CheckedMultiSelectItem.html	(revision 9)
@@ -0,0 +1,5 @@
+<div class="dijitReset ${baseClass}"
+	><input class="${baseClass}Box" dojoType="dijit.form.CheckBox" dojoAttachPoint="checkBox" 
+		dojoAttachEvent="_onClick:_changeBox" type="${_type.type}" baseClass="${_type.baseClass}"
+	/><div class="dijitInline ${baseClass}Label" dojoAttachPoint="labelNode" dojoAttachEvent="onclick:_onClick"></div
+></div>
Index: trunk/web/dojo/dojox/form/resources/FileInput.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/FileInput.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/FileInput.css	(revision 9)
@@ -0,0 +1,115 @@
+.dijitFileInput {
+	position:relative;
+	height:1.3em;
+	
+}
+.dijitFileInputReal {
+	position:absolute;
+	z-index:2;
+	filter:alpha(opacity:0);
+	opacity:0;
+	cursor:pointer;
+}
+.dijitFileInputRealBlind {
+	right:0;
+}
+.dijitFileInputReal:hover { cursor:pointer; } 
+.dijitFileInputButton,
+.dijitFileInputText {
+	border:1px solid #333;
+	padding:2px 12px 2px 12px; 
+	cursor:pointer;
+}
+.dijitFileInputButton {
+	z-index:3;
+	visibility:hidden;
+}
+.dijitFakeInput { position:absolute; top:0; left:0; z-index:1; white-space: nowrap; }
+.dijitProgressOverlay {
+	display:none;
+	width:250px;
+	height:1em;
+	position:absolute;
+	top:0; left:0;
+	border:1px solid #333;
+	background:#cad2de url('../../../dijit/themes/tundra/images/dijitProgressBarAnim.gif') repeat-x top left;
+	padding:2px;	
+}
+.tundra .dijitProgressOverlay {
+	border:1px solid #84a3d1;
+	background-color:#cad2de;
+}
+.tundra .dijitFakeInput input {
+	
+	padding: 0;
+	background:#fff url("../../../dijit/themes/tundra/images/validationInputBg.png") repeat-x top left;
+	border:1px solid #9b9b9b;
+	line-height: normal;
+}
+.tundra .dijitFileInputButton, 
+.tundra .dijitFileInputText {
+	border:1px solid #9b9b9b;
+	padding:0px 12px 0px 12px; 
+	background:#e9e9e9 url("../../../dijit/themes/tundra/images/buttonEnabled.png") repeat-x top;
+}
+.soria .dijitProgressOverlay {
+	border:1px solid #8BA0BD;
+	background-color:#cad2de; 
+}
+.soria .dijitFakeInput input {
+	border:1px solid #8BA0BD;
+	background:#fff url("../../../dijit/themes/soria/images/validationInputBg.png") repeat-x top left;
+	line-height:normal;
+	background-position:0 -30px; 
+	padding:0.2em 0.3em;
+}
+.soria .dijitFileInputButton,
+.soria .dijitFileInputText {
+	border:1px solid #8BA0BD;
+	padding:2px 12px 2px 12px;
+	background:#b7cdee url('../../../dijit/themes/soria/images/buttonEnabled.png') repeat-x; 
+}
+.nihilo .dijitProgressOverlay {
+	border:1px solid #DEDEDE;
+	background-color:#cad2de; 
+}
+.nihilo .dijitFakeInput input {
+	border:1px solid #DEDEDE;
+	background:#fff url("../../../dijit/themes/nihilo/images/validationInputBg.png") repeat-x top left;
+	line-height:normal;
+	background-position:0 -30px; 
+	padding:0.2em 0.3em;
+}
+.nihilo .dijitFileInputButton,
+.nihilo .dijitFileInputText {
+	border:1px solid #DEDEDE;
+	padding:2px 12px 2px 12px;
+	background:#b7cdee url('../../../dijit/themes/nihilo/images/buttonEnabled.png') repeat-x; 
+}
+.claro .dijitProgressOverlay {
+	border:1px solid #769dc0;
+	background-color:#769dc0; 
+}
+.claro .dijitFakeInput input {
+	border: 1px solid #bcc8dd;
+	background-color: #fff;
+	background-repeat: repeat-x;
+	background-position: top left;
+	background-image:url("../../../dijit/themes/claro/images/textBox_back.png");
+	line-height:normal;
+	padding:0.2em 0.3em;
+}
+.claro .dijitFileInputButton,
+.claro .dijitFileInputText {
+	background-image: url("../../../dijit/themes/claro/form/images/button_back_full.png");
+	background-position: center top;
+	background-repeat: repeat-x;
+	background-color: #cde3f6;
+	border: 1px solid #799ab7;
+	border-radius: 4px;
+	-moz-border-radius: 4px;
+	-webkit-border-radius: 4px;
+	box-shadow:0px 1px 1px rgba(0,0,0,0.2);
+	-webkit-box-shadow:0px 1px 1px rgba(0,0,0,0.2);
+	-moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.2);
+}
Index: trunk/web/dojo/dojox/form/resources/RangeSlider.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/RangeSlider.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/RangeSlider.css	(revision 9)
@@ -0,0 +1,25 @@
+.dojoxRangeSlider .dijitSliderLeftBumper, .dojoxRangeSlider .dijitSliderBottomBumper  {
+    background:#FFFFFF !important;
+}
+.dojoxRangeSliderBarContainer {
+    position:relative;
+}
+.dojoxRangeSlider .dijitSliderProgressBarV {
+    position:relative !important;
+}
+.dojoxRangeSlider .dijitSliderProgressBar {
+    overflow:hidden;
+    cursor:pointer;
+    
+}
+.dojoxRangeSlider .dijitSliderProgressBarV {
+    position:absolute !important;
+    border-width: 0px;
+}
+.dojoxRangeSlider .dijitSliderImageHandleH {
+	left: -50%;
+}
+.dijitSlider .dojoxRangeSliderBarContainer .dijitSliderProgressBarH,
+.dojoxRangeSlider .dijitSliderMoveableH {
+        right:auto !important;
+}
Index: trunk/web/dojo/dojox/form/resources/CheckedMultiSelect.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/CheckedMultiSelect.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/CheckedMultiSelect.css	(revision 9)
@@ -0,0 +1,87 @@
+
+.dojoxMultiSelectSelect { display: none; }
+.dojoxMultiSelect {
+	border: solid black 1px;
+	margin: 1px 0;
+	overflow: scroll; 
+	overflow-y: scroll; 
+	overflow-x: hidden; 
+	height: 100px;
+}
+.dj_ie .dojoxMultiSelect,
+.dj_webkit .dojoxMultiSelect {
+	
+	padding-right: 15px;
+}
+.dojoxMultiSelectItem {
+	white-space: nowrap;
+	padding:.1em .2em;
+	cursor:default;
+}
+.dojoxMultiSelectDisabled *,
+.dojoxMultiSelectReadOnly * {
+	color:gray !important;
+}
+.dojoxMultiSelectItemLabel {
+	margin-left: .2em;
+}
+.tundra .dojoxMultiSelect {
+	margin: 0em 0.1em;
+}
+.tundra .dojoxMultiSelect {
+	background:#fff url("../../../dijit/themes/tundra/images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../../../dijit/themes/tundra/images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #b3b3b3;
+	line-height: normal;
+}
+.tundra .dojoxMultiSelectFocused {
+	
+	border-color:#406b9b;
+}
+.soria .dojoxMultiSelect {
+	margin: 0em 0.1em;
+}
+.soria .dojoxMultiSelect {
+	background:#fff url("../../../dijit/themes/soria/images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../../../dijit/themes/soria/images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #8ba0bd;
+	line-height: normal;
+}
+.soria .dojoxMultiSelectFocused {
+	
+	border-color:#406b9b;
+}
+.nihilo .dojoxMultiSelect {
+	margin: 0em 0.1em;
+}
+.nihilo .dojoxMultiSelect {
+	background:#fff url("../../../dijit/themes/nihilo/images/validationInputBg.png") repeat-x top left;
+	#background:#fff url('../../../dijit/themes/nihilo/images/validationInputBg.gif') repeat-x top left;
+	border:1px solid #d3d3d3;
+	line-height: normal;
+}
+.nihilo .dojoxMultiSelectFocused {
+	
+	border-color:#b3b3b3;
+}
+.claro .dojoxMultiSelect {
+	margin: 0em 0.1em;
+}
+.claro .dojoxMultiSelect {
+	border: 1px solid #b5bcc7;
+	background-color: #f7fcff;
+	line-height: normal;
+	-webkit-transition-property:background-color, border;
+ 	-webkit-transition-duration:.35s;
+}
+.claro .dojoxMultiSelectHover {
+	border-color: #769dc0;
+	background-color: #e9f4fe;
+	background-image: url('../../../dijit/themes/claro/form/images/textBox_back.png');
+	background-repeat: repeat-x;
+	-webkit-transition-duration:.25s;
+}
+.claro .dojoxMultiSelectFocused {
+	border: 1px solid #769dc0;
+	-webkit-transition-duration:.1s;
+}
Index: trunk/web/dojo/dojox/form/resources/FileInputAuto.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/FileInputAuto.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/FileInputAuto.html	(revision 9)
@@ -0,0 +1,9 @@
+<div class="dijitFileInput">
+	<input id="${id}" name="${name}" class="dijitFileInputReal" type="file" dojoAttachPoint="fileInput" />
+	<div class="dijitFakeInput" dojoAttachPoint="fakeNodeHolder">
+		<input class="dijitFileInputVisible" type="text" dojoAttachPoint="focusNode, inputNode" />
+		<div class="dijitInline dijitFileInputText" dojoAttachPoint="titleNode">${label}</div>
+		<div class="dijitInline dijitFileInputButton" dojoAttachPoint="cancelNode" dojoAttachEvent="onclick:reset">${cancelText}</div>
+	</div>
+	<div class="dijitProgressOverlay" dojoAttachPoint="overlay">&nbsp;</div>
+</div>
Index: trunk/web/dojo/dojox/form/resources/VerticalRangeSlider.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/VerticalRangeSlider.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/VerticalRangeSlider.html	(revision 9)
@@ -0,0 +1,49 @@
+<table class="dijitReset dijitSlider dijitSliderV dojoxRangeSlider" cellspacing="0" cellpadding="0" border="0" rules="none"
+	><tr class="dijitReset"
+		><td class="dijitReset"></td
+		><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV"
+			><div class="dijitSliderIncrementIconV" tabIndex="-1" style="display:none" dojoAttachPoint="decrementButton" dojoAttachEvent="onclick: increment"><span class="dijitSliderButtonInner">+</span></div
+		></td
+		><td class="dijitReset"></td
+	></tr
+	><tr class="dijitReset"
+		><td class="dijitReset"></td
+		><td class="dijitReset"
+			><center><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper" dojoAttachEvent="onclick:_onClkIncBumper"></div></center
+		></td
+		><td class="dijitReset"></td
+	></tr
+	><tr class="dijitReset"
+		><td dojoAttachPoint="leftDecoration" class="dijitReset dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV" style="text-align:center;height:100%;"></td
+		><td class="dijitReset" style="height:100%;"
+			><input dojoAttachPoint="valueNode" type="hidden" ${!nameAttrSetting}
+			/><center waiRole="presentation" style="position:relative;height:100%;" dojoAttachPoint="sliderBarContainer"
+				><div waiRole="presentation" dojoAttachPoint="remainingBar" class="dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV" dojoAttachEvent="onmousedown:_onRemainingBarClick"
+					><div dojoAttachPoint="sliderHandle" tabIndex="${tabIndex}" class="dijitSliderMoveable dijitSliderMoveableV" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onHandleClick" style="vertical-align:top;" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
+						><div class="dijitSliderImageHandle dijitSliderImageHandleV"></div
+					></div
+					><div waiRole="presentation" dojoAttachPoint="progressBar,focusNode" tabIndex="${tabIndex}" class="dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onBarClick"
+					></div
+					><div dojoAttachPoint="sliderHandleMax,focusNodeMax" tabIndex="${tabIndex}" class="dijitSliderMoveable dijitSliderMoveableV" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_onHandleClickMax" style="vertical-align:top;" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
+						><div class="dijitSliderImageHandle dijitSliderImageHandleV"></div
+					></div
+				></div
+			></center
+		></td
+		><td dojoAttachPoint="containerNode,rightDecoration" class="dijitReset dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV" style="text-align:center;height:100%;"></td
+	></tr
+	><tr class="dijitReset"
+		><td class="dijitReset"></td
+		><td class="dijitReset"
+			><center><div class="dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper" dojoAttachEvent="onclick:_onClkDecBumper"></div></center
+		></td
+		><td class="dijitReset"></td
+	></tr
+	><tr class="dijitReset"
+		><td class="dijitReset"></td
+		><td class="dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV"
+			><div class="dijitSliderDecrementIconV" tabIndex="-1" style="display:none" dojoAttachPoint="incrementButton" dojoAttachEvent="onclick: decrement"><span class="dijitSliderButtonInner">-</span></div
+		></td
+		><td class="dijitReset"></td
+	></tr
+></table>
Index: trunk/web/dojo/dojox/form/resources/FilePickerTextBox.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/FilePickerTextBox.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/FilePickerTextBox.html	(revision 9)
@@ -0,0 +1,18 @@
+<div class="dijit dijitReset dijitInlineTable dijitLeft"
+	id="widget_${id}"
+	waiRole="combobox" tabIndex="-1"
+	><div style="overflow:hidden;"
+		><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton'
+			dojoAttachPoint="downArrowNode,_buttonNode,_popupStateNode" waiRole="presentation"
+			><div class="dijitArrowButtonInner">&thinsp;</div
+			><div class="dijitArrowButtonChar">&#9660;</div
+		></div
+		><div class="dijitReset dijitValidationIcon"><br></div
+		><div class="dijitReset dijitValidationIconText">&Chi;</div
+		><div class="dijitReset dijitInputField"
+			><input type="text" autocomplete="off" ${!nameAttrSetting} class='dijitReset'
+				dojoAttachEvent='onkeypress:_onKey' 
+				dojoAttachPoint='textbox,focusNode' waiRole="textbox" waiState="haspopup-true,autocomplete-list"
+		/></div
+	></div
+></div>
Index: trunk/web/dojo/dojox/form/resources/FileInput.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/FileInput.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/FileInput.html	(revision 9)
@@ -0,0 +1,9 @@
+<div class="dijitFileInput">
+	<input id="${id}" class="dijitFileInputReal" type="file" dojoAttachPoint="fileInput" name="${name}" />
+	<div class="dijitFakeInput">
+		<input class="dijitFileInputVisible" type="text" dojoAttachPoint="focusNode, inputNode" />
+		<div class="dijitInline dijitFileInputText" dojoAttachPoint="titleNode">${label}</div>
+		<div class="dijitInline dijitFileInputButton" dojoAttachPoint="cancelNode" 
+			dojoAttachEvent="onclick:reset">${cancelText}</div>
+	</div>
+</div>
Index: trunk/web/dojo/dojox/form/resources/FileUploader.css
===================================================================
--- trunk/web/dojo/dojox/form/resources/FileUploader.css	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/FileUploader.css	(revision 9)
@@ -0,0 +1,134 @@
+.dojoxUploaderNorm{
+	font-family:Myriad,Helvetica,Tahoma,Arial,clean,sans-serif;
+	font-size:12px;
+	border: 1px solid #c0c0c0; 
+	border-bottom: 1px solid #9b9b9b; 
+	padding: 0.1em 0.2em 0.2em 0.2em; 
+	background: #fff url("../../../dijit/themes/tundra/images/buttonEnabled.png") repeat-x bottom left;
+	
+	vertical-align: middle;
+	
+	margin:0;
+	line-height:normal;
+	text-align:center;
+	white-space: nowrap;
+	
+	cursor: pointer;
+}
+.uploaderInsideNode{
+	visibility:hidden;
+}
+.dojoxUploaderHover{
+	border-color:		#a5beda; 
+	border-bottom-color:#5c7590; 
+	color:#243C5F;
+	background:#fcfdff url("../../../dijit/themes/tundra/images/buttonHover.png") repeat-x bottom;
+}
+.dojoxUploaderActive{
+	border-color:#366dba;
+	background: #ededed url("../../../dijit/themes/tundra/images/buttonActive.png") bottom repeat-x;
+}
+.dojoxUploaderDisabled{
+	color: #7F7F7F;
+	border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5; 
+	background:#e4e4e4 url("../../../dijit/themes/tundra/images/buttonDisabled.png") top repeat-x;
+}
+.soria .dojoxUploaderNorm {
+	border: 1px solid #8ba0bd;
+	border-bottom:1px solid #657c9c;
+	padding: 0.1em 0.2em 0.2em 0.2em; 
+	background: #bcd5f0 url("../../../dijit/themes/soria/images/buttonEnabled.png") repeat-x top left;
+}
+.soria .dojoxUploaderHover{
+	color:#243C5F;
+	background:#acc5e2 url("../../../dijit/themes/soria/images/buttonHover.png") repeat-x top left !important;
+}
+.soria .dojoxUploaderActive{
+	border-color:#657c9c;
+	background: #91b4e5 url("../../../dijit/themes/soria/images/buttonActive.png") top left repeat-x !important;
+}
+.soria .dojoxUploaderDisabled{
+	border-color: #b9bbdd #b9bbdd #b9bbdd #b9bbdd;
+	background:#c3d3e5 url("../../../dijit/themes/soria/images/buttonDisabled.png") top repeat-x !important;
+	opacity: 0.60;
+}
+.nihilo .dojoxUploaderNorm {
+	border:1px solid #dedede;
+	border-bottom:1px solid #dedede;
+	padding: 0.1em 0.2em 0.2em 0.2em; 
+	background: #fff url("../../../dijit/themes/nihilo/images/buttonEnabled.png") repeat-x top left;
+}
+.nihilo .dojoxUploaderHover{
+	color:#243C5F;
+	background:#fcfcfc url("../../../dijit/themes/nihilo/images/buttonHover.png") repeat-x top left !important;
+}
+.nihilo .dojoxUploaderActive{
+	border-color:#dedede;
+	background: #f5f5f5 url("../../../dijit/themes/nihilo/images/buttonActive.png") top left repeat-x !important;
+}
+.nihilo .dojoxUploaderDisabled{
+	border-color: #dedede;
+	background:#fafafa url("../../../dijit/themes/nihilo/images/buttonDisabled.png") top repeat-x !important;
+	opacity: 0.60;
+}
+.fileToUpload,
+.fileToUploadClose,
+.fileToUploadName,
+.fileToUploadSize{
+	height:18px;
+	line-height:18px;
+}
+.fileToUpload{
+	font-size:12px;
+	font-family:sans-serif;
+	padding:2px;
+	margin:0px;
+	width:100%;
+}
+.fileToUploadName{
+	text-align:left;
+	width:auto !important;
+}
+.fileToUploadSize{
+	width:30px !important;
+	text-align:right;
+}
+.dj_ie .fileToUploadSize{
+	padding-right:20px;
+}
+.fileToUploadClose{
+	background:url(../../../dijit/themes/tundra/images/tabClose.png) no-repeat 2px center;
+	width:18px !important;
+	cursor:pointer;
+}
+.fileToUploadClose:hover{
+	background:url(../../../dijit/themes/tundra/images/tabCloseHover.png) no-repeat 2px center;
+}
+.thumb{
+	height:50px;
+	padding:3px;
+	border:1px solid #ccc;
+	margin-bottom:3px;
+}
+.thumbPic{
+	width:50px;
+	height:50px;
+	text-align:center;
+	line-height:50px;
+	background-color:#000;
+	float:left;
+}
+.thumbPic img{
+	line-height:50px;
+	margin:auto auto;
+	display:block;
+}
+.thumbText{
+	float:left;
+	margin-left:5px;
+	font-size:10px;
+}
+.dj_ie object{
+	
+	display:block !important;
+}
Index: trunk/web/dojo/dojox/form/resources/CheckedMultiSelect.html
===================================================================
--- trunk/web/dojo/dojox/form/resources/CheckedMultiSelect.html	(revision 0)
+++ trunk/web/dojo/dojox/form/resources/CheckedMultiSelect.html	(revision 9)
@@ -0,0 +1,4 @@
+<div class="dijit dijitReset dijitInline" dojoAttachEvent="onmousedown:_onMouseDown,onclick:focus"
+	><select class="${baseClass}Select" multiple="true" dojoAttachPoint="containerNode,focusNode"></select
+	><div dojoAttachPoint="wrapperDiv"></div
+></div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/form/manager/_FormMixin.js
===================================================================
--- trunk/web/dojo/dojox/form/manager/_FormMixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/manager/_FormMixin.js	(revision 9)
@@ -0,0 +1,70 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._FormMixin"]){
+dojo._hasResource["dojox.form.manager._FormMixin"]=true;
+dojo.provide("dojox.form.manager._FormMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter;
+dojo.declare("dojox.form.manager._FormMixin",null,{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",startup:function(){
+this.isForm=this.domNode.tagName.toLowerCase()=="form";
+if(this.isForm){
+this.connect(this.domNode,"onreset","_onReset");
+this.connect(this.domNode,"onsubmit","_onSubmit");
+}
+this.inherited(arguments);
+},_onReset:function(_1){
+var _2={returnValue:true,preventDefault:function(){
+this.returnValue=false;
+},stopPropagation:function(){
+},currentTarget:_1.currentTarget,target:_1.target};
+if(!(this.onReset(_2)===false)&&_2.returnValue){
+this.reset();
+}
+dojo.stopEvent(_1);
+return false;
+},onReset:function(){
+return true;
+},reset:function(){
+this.inspectFormWidgets(aa(function(_3,_4){
+if(_4.reset){
+_4.reset();
+}
+}));
+if(this.isForm){
+this.domNode.reset();
+}
+return this;
+},_onSubmit:function(_5){
+if(this.onSubmit(_5)===false){
+dojo.stopEvent(_5);
+}
+},onSubmit:function(){
+return this.isValid();
+},submit:function(){
+if(this.isForm){
+if(!(this.onSubmit()===false)){
+this.domNode.submit();
+}
+}
+},isValid:function(){
+for(var _6 in this.formWidgets){
+var _7=false;
+aa(function(_8,_9){
+if(!_9.attr("disabled")&&_9.isValid&&!_9.isValid()){
+_7=true;
+}
+}).call(this,null,this.formWidgets[_6].widget);
+if(_7){
+return false;
+}
+}
+return true;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/form/manager/_ClassMixin.js
===================================================================
--- trunk/web/dojo/dojox/form/manager/_ClassMixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/manager/_ClassMixin.js	(revision 9)
@@ -0,0 +1,31 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._ClassMixin"]){
+dojo._hasResource["dojox.form.manager._ClassMixin"]=true;
+dojo.provide("dojox.form.manager._ClassMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter,ia=fm.inspectorAdapter;
+dojo.declare("dojox.form.manager._ClassMixin",null,{gatherClassState:function(_1,_2){
+var _3=this.inspect(ia(function(_4,_5){
+return dojo.hasClass(_5,_1);
+}),_2);
+return _3;
+},addClass:function(_6,_7){
+this.inspect(aa(function(_8,_9){
+dojo.addClass(_9,_6);
+}),_7);
+return this;
+},removeClass:function(_a,_b){
+this.inspect(aa(function(_c,_d){
+dojo.removeClass(_d,_a);
+}),_b);
+return this;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/form/manager/_DisplayMixin.js
===================================================================
--- trunk/web/dojo/dojox/form/manager/_DisplayMixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/manager/_DisplayMixin.js	(revision 9)
@@ -0,0 +1,27 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._DisplayMixin"]){
+dojo._hasResource["dojox.form.manager._DisplayMixin"]=true;
+dojo.provide("dojox.form.manager._DisplayMixin");
+dojo.declare("dojox.form.manager._DisplayMixin",null,{gatherDisplayState:function(_1){
+var _2=this.inspectAttachedPoints(function(_3,_4){
+return dojo.style(_4,"display")!="none";
+},_1);
+return _2;
+},show:function(_5,_6){
+if(arguments.length<2){
+_6=true;
+}
+this.inspectAttachedPoints(function(_7,_8,_9){
+dojo.style(_8,"display",_9?"":"none");
+},_5,_6);
+return this;
+},hide:function(_a){
+return this.show(_a,false);
+}});
+}
Index: trunk/web/dojo/dojox/form/manager/_NodeMixin.js
===================================================================
--- trunk/web/dojo/dojox/form/manager/_NodeMixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/manager/_NodeMixin.js	(revision 9)
@@ -0,0 +1,239 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._NodeMixin"]){
+dojo._hasResource["dojox.form.manager._NodeMixin"]=true;
+dojo.provide("dojox.form.manager._NodeMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter,_1=fm._keys,ce=fm.changeEvent=function(_2){
+var _3="onclick";
+switch(_2.tagName.toLowerCase()){
+case "textarea":
+_3="onkeyup";
+break;
+case "select":
+_3="onchange";
+break;
+case "input":
+switch(_2.type.toLowerCase()){
+case "text":
+case "password":
+_3="onkeyup";
+break;
+}
+break;
+}
+return _3;
+},_4=function(_5,_6){
+var _7=dojo.attr(_5,"name");
+_6=_6||this.domNode;
+if(_7&&!(_7 in this.formWidgets)){
+for(var n=_5;n&&n!==_6;n=n.parentNode){
+if(dojo.attr(n,"widgetId")&&dijit.byNode(n) instanceof dijit.form._FormWidget){
+return null;
+}
+}
+if(_5.tagName.toLowerCase()=="input"&&_5.type.toLowerCase()=="radio"){
+var a=this.formNodes[_7];
+a=a&&a.node;
+if(a&&dojo.isArray(a)){
+a.push(_5);
+}else{
+this.formNodes[_7]={node:[_5],connections:[]};
+}
+}else{
+this.formNodes[_7]={node:_5,connections:[]};
+}
+}else{
+_7=null;
+}
+return _7;
+},_8=function(_9){
+var _a={};
+aa(function(_b,n){
+var o=dojo.attr(n,"observer");
+if(o&&typeof o=="string"){
+dojo.forEach(o.split(","),function(o){
+o=dojo.trim(o);
+if(o&&dojo.isFunction(this[o])){
+_a[o]=1;
+}
+},this);
+}
+}).call(this,null,this.formNodes[_9].node);
+return _1(_a);
+},_c=function(_d,_e){
+var t=this.formNodes[_d],c=t.connections;
+if(c.length){
+dojo.forEach(c,dojo.disconnect);
+c=t.connections=[];
+}
+aa(function(_f,n){
+var _10=ce(n);
+dojo.forEach(_e,function(o){
+c.push(dojo.connect(n,_10,this,function(evt){
+if(this.watch){
+this[o](this.formNodeValue(_d),_d,n,evt);
+}
+}));
+},this);
+}).call(this,null,t.node);
+};
+dojo.declare("dojox.form.manager._NodeMixin",null,{destroy:function(){
+for(var _11 in this.formNodes){
+dojo.forEach(this.formNodes[_11].connections,dojo.disconnect);
+}
+this.formNodes={};
+this.inherited(arguments);
+},registerNode:function(_12){
+if(typeof _12=="string"){
+_12=dojo.byId(_12);
+}
+var _13=_4.call(this,_12);
+if(_13){
+_c.call(this,_13,_8.call(this,_13));
+}
+return this;
+},unregisterNode:function(_14){
+if(_14 in this.formNodes){
+dojo.forEach(this.formNodes[_14].connections,this.disconnect,this);
+delete this.formNodes[_14];
+}
+return this;
+},registerNodeDescendants:function(_15){
+if(typeof _15=="string"){
+_15=dojo.byId(_15);
+}
+dojo.query("input, select, textarea, button",_15).map(function(n){
+return _4.call(this,n,_15);
+},this).forEach(function(_16){
+if(_16){
+_c.call(this,_16,_8.call(this,_16));
+}
+},this);
+return this;
+},unregisterNodeDescendants:function(_17){
+if(typeof _17=="string"){
+_17=dojo.byId(_17);
+}
+dojo.query("input, select, textarea, button",_17).map(function(n){
+return dojo.attr(_17,"name")||null;
+}).forEach(function(_18){
+if(_18){
+this.unregisterNode(_18);
+}
+},this);
+return this;
+},formNodeValue:function(_19,_1a){
+var _1b=arguments.length==2&&_1a!==undefined,_1c;
+if(typeof _19=="string"){
+_19=this.formNodes[_19];
+if(_19){
+_19=_19.node;
+}
+}
+if(!_19){
+return null;
+}
+if(dojo.isArray(_19)){
+if(_1b){
+dojo.forEach(_19,function(_1d){
+_1d.checked="";
+});
+dojo.forEach(_19,function(_1e){
+_1e.checked=_1e.value===_1a?"checked":"";
+});
+return this;
+}
+dojo.some(_19,function(_1f){
+if(_1f.checked){
+_1c=_1f;
+return true;
+}
+return false;
+});
+return _1c?_1c.value:"";
+}
+switch(_19.tagName.toLowerCase()){
+case "select":
+if(_19.multiple){
+if(_1b){
+if(dojo.isArray(_1a)){
+var _20={};
+dojo.forEach(_1a,function(v){
+_20[v]=1;
+});
+dojo.query("> option",_19).forEach(function(opt){
+opt.selected=opt.value in _20;
+});
+return this;
+}
+dojo.query("> option",_19).forEach(function(opt){
+opt.selected=opt.value===_1a;
+});
+return this;
+}
+var _1c=dojo.query("> option",_19).filter(function(opt){
+return opt.selected;
+}).map(function(opt){
+return opt.value;
+});
+return _1c.length==1?_1c[0]:_1c;
+}
+if(_1b){
+dojo.query("> option",_19).forEach(function(opt){
+opt.selected=opt.value===_1a;
+});
+return this;
+}
+return _19.value||"";
+case "button":
+if(_1b){
+_19.innerHTML=""+_1a;
+return this;
+}
+return _19.innerHTML;
+case "input":
+if(_19.type.toLowerCase()=="checkbox"){
+if(_1b){
+_19.checked=_1a?"checked":"";
+return this;
+}
+return Boolean(_19.checked);
+}
+}
+if(_1b){
+_19.value=""+_1a;
+return this;
+}
+return _19.value;
+},inspectFormNodes:function(_21,_22,_23){
+var _24,_25={};
+if(_22){
+if(dojo.isArray(_22)){
+dojo.forEach(_22,function(_26){
+if(_26 in this.formNodes){
+_25[_26]=_21.call(this,_26,this.formNodes[_26].node,_23);
+}
+},this);
+}else{
+for(_24 in _22){
+if(_24 in this.formNodes){
+_25[_24]=_21.call(this,_24,this.formNodes[_24].node,_22[_24]);
+}
+}
+}
+}else{
+for(_24 in this.formNodes){
+_25[_24]=_21.call(this,_24,this.formNodes[_24].node,_23);
+}
+}
+return _25;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/form/manager/_EnableMixin.js
===================================================================
--- trunk/web/dojo/dojox/form/manager/_EnableMixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/manager/_EnableMixin.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._EnableMixin"]){
+dojo._hasResource["dojox.form.manager._EnableMixin"]=true;
+dojo.provide("dojox.form.manager._EnableMixin");
+dojo.require("dojox.form.manager._Mixin");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter,ia=fm.inspectorAdapter;
+dojo.declare("dojox.form.manager._EnableMixin",null,{gatherEnableState:function(_1){
+var _2=this.inspectFormWidgets(ia(function(_3,_4){
+return !_4.attr("disabled");
+}),_1);
+if(this.inspectFormNodes){
+dojo.mixin(_2,this.inspectFormNodes(ia(function(_5,_6){
+return !dojo.attr(_6,"disabled");
+}),_1));
+}
+return _2;
+},enable:function(_7,_8){
+if(arguments.length<2||_8===undefined){
+_8=true;
+}
+this.inspectFormWidgets(aa(function(_9,_a,_b){
+_a.attr("disabled",!_b);
+}),_7,_8);
+if(this.inspectFormNodes){
+this.inspectFormNodes(aa(function(_c,_d,_e){
+dojo.attr(_d,"disabled",!_e);
+}),_7,_8);
+}
+return this;
+},disable:function(_f){
+var _10=this.gatherEnableState();
+this.enable(_f,false);
+return _10;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/form/manager/_ValueMixin.js
===================================================================
--- trunk/web/dojo/dojox/form/manager/_ValueMixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/manager/_ValueMixin.js	(revision 9)
@@ -0,0 +1,48 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._ValueMixin"]){
+dojo._hasResource["dojox.form.manager._ValueMixin"]=true;
+dojo.provide("dojox.form.manager._ValueMixin");
+dojo.declare("dojox.form.manager._ValueMixin",null,{elementValue:function(_1,_2){
+if(_1 in this.formWidgets){
+return this.formWidgetValue(_1,_2);
+}
+if(this.formNodes&&_1 in this.formNodes){
+return this.formNodeValue(_1,_2);
+}
+return this.formPointValue(_1,_2);
+},gatherFormValues:function(_3){
+var _4=this.inspectFormWidgets(function(_5){
+return this.formWidgetValue(_5);
+},_3);
+if(this.inspectFormNodes){
+dojo.mixin(_4,this.inspectFormNodes(function(_6){
+return this.formNodeValue(_6);
+},_3));
+}
+dojo.mixin(_4,this.inspectAttachedPoints(function(_7){
+return this.formPointValue(_7);
+},_3));
+return _4;
+},setFormValues:function(_8){
+if(_8){
+this.inspectFormWidgets(function(_9,_a,_b){
+this.formWidgetValue(_9,_b);
+},_8);
+if(this.inspectFormNodes){
+this.inspectFormNodes(function(_c,_d,_e){
+this.formNodeValue(_c,_e);
+},_8);
+}
+this.inspectAttachedPoints(function(_f,_10,_11){
+this.formPointValue(_f,_11);
+},_8);
+}
+return this;
+}});
+}
Index: trunk/web/dojo/dojox/form/manager/_Mixin.js
===================================================================
--- trunk/web/dojo/dojox/form/manager/_Mixin.js	(revision 0)
+++ trunk/web/dojo/dojox/form/manager/_Mixin.js	(revision 9)
@@ -0,0 +1,281 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.manager._Mixin"]){
+dojo._hasResource["dojox.form.manager._Mixin"]=true;
+dojo.provide("dojox.form.manager._Mixin");
+dojo.require("dijit._Widget");
+(function(){
+var fm=dojox.form.manager,aa=fm.actionAdapter=function(_1){
+return function(_2,_3,_4){
+if(dojo.isArray(_3)){
+dojo.forEach(_3,function(_5){
+_1.call(this,_2,_5,_4);
+},this);
+}else{
+_1.apply(this,arguments);
+}
+};
+},ia=fm.inspectorAdapter=function(_6){
+return function(_7,_8,_9){
+return _6.call(this,_7,dojo.isArray(_8)?_8[0]:_8,_9);
+};
+},_a={domNode:1,containerNode:1,srcNodeRef:1,bgIframe:1},_b=fm._keys=function(o){
+var _c=[],_d;
+for(_d in o){
+if(o.hasOwnProperty(_d)){
+_c.push(_d);
+}
+}
+return _c;
+},_e=function(_f){
+var _10=_f.get("name");
+if(_10&&_f instanceof dijit.form._FormWidget){
+if(_10 in this.formWidgets){
+var a=this.formWidgets[_10].widget;
+if(dojo.isArray(a)){
+a.push(_f);
+}else{
+this.formWidgets[_10].widget=[a,_f];
+}
+}else{
+this.formWidgets[_10]={widget:_f,connections:[]};
+}
+}else{
+_10=null;
+}
+return _10;
+},_11=function(_12){
+var _13={};
+aa(function(_14,w){
+var o=w.get("observer");
+if(o&&typeof o=="string"){
+dojo.forEach(o.split(","),function(o){
+o=dojo.trim(o);
+if(o&&dojo.isFunction(this[o])){
+_13[o]=1;
+}
+},this);
+}
+}).call(this,null,this.formWidgets[_12].widget);
+return _b(_13);
+},_15=function(_16,_17){
+var t=this.formWidgets[_16],w=t.widget,c=t.connections;
+if(c.length){
+dojo.forEach(c,dojo.disconnect);
+c=t.connections=[];
+}
+if(dojo.isArray(w)){
+dojo.forEach(w,function(w){
+dojo.forEach(_17,function(o){
+c.push(dojo.connect(w,"onChange",this,function(evt){
+if(this.watch&&dojo.attr(w.focusNode,"checked")){
+this[o](w.get("value"),_16,w,evt);
+}
+}));
+},this);
+},this);
+}else{
+var _18=w.declaredClass=="dijit.form.Button"?"onClick":"onChange";
+dojo.forEach(_17,function(o){
+c.push(dojo.connect(w,_18,this,function(evt){
+if(this.watch){
+this[o](w.get("value"),_16,w,evt);
+}
+}));
+},this);
+}
+};
+dojo.declare("dojox.form.manager._Mixin",null,{watch:true,startup:function(){
+if(this._started){
+return;
+}
+this.formWidgets={};
+this.formNodes={};
+this.registerWidgetDescendants(this);
+this.inherited(arguments);
+},destroy:function(){
+for(var _19 in this.formWidgets){
+dojo.forEach(this.formWidgets[_19].connections,dojo.disconnect);
+}
+this.formWidgets={};
+this.inherited(arguments);
+},registerWidget:function(_1a){
+if(typeof _1a=="string"){
+_1a=dijit.byId(_1a);
+}else{
+if(_1a.tagName&&_1a.cloneNode){
+_1a=dijit.byNode(_1a);
+}
+}
+var _1b=_e.call(this,_1a);
+if(_1b){
+_15.call(this,_1b,_11.call(this,_1b));
+}
+return this;
+},unregisterWidget:function(_1c){
+if(_1c in this.formWidgets){
+dojo.forEach(this.formWidgets[_1c].connections,this.disconnect,this);
+delete this.formWidgets[_1c];
+}
+return this;
+},registerWidgetDescendants:function(_1d){
+if(typeof _1d=="string"){
+_1d=dijit.byId(_1d);
+}else{
+if(_1d.tagName&&_1d.cloneNode){
+_1d=dijit.byNode(_1d);
+}
+}
+var _1e=dojo.map(_1d.getDescendants(),_e,this);
+dojo.forEach(_1e,function(_1f){
+if(_1f){
+_15.call(this,_1f,_11.call(this,_1f));
+}
+},this);
+return this.registerNodeDescendants?this.registerNodeDescendants(_1d.domNode):this;
+},unregisterWidgetDescendants:function(_20){
+if(typeof _20=="string"){
+_20=dijit.byId(_20);
+}else{
+if(_20.tagName&&_20.cloneNode){
+_20=dijit.byNode(_20);
+}
+}
+dojo.forEach(dojo.map(_20.getDescendants(),function(w){
+return w instanceof dijit.form._FormWidget&&w.get("name")||null;
+}),function(_21){
+if(_21){
+this.unregisterNode(_21);
+}
+},this);
+return this.unregisterNodeDescendants?this.unregisterNodeDescendants(_20.domNode):this;
+},formWidgetValue:function(_22,_23){
+var _24=arguments.length==2&&_23!==undefined,_25;
+if(typeof _22=="string"){
+_22=this.formWidgets[_22];
+if(_22){
+_22=_22.widget;
+}
+}
+if(!_22){
+return null;
+}
+if(dojo.isArray(_22)){
+if(_24){
+dojo.forEach(_22,function(_26){
+_26.set("checked",false,!this.watch);
+});
+dojo.forEach(_22,function(_27){
+_27.set("checked",_27.value===_23,!this.watch);
+});
+return this;
+}
+dojo.some(_22,function(_28){
+if(dojo.attr(_28.focusNode,"checked")){
+_25=_28;
+return true;
+}
+return false;
+});
+return _25?_25.get("value"):"";
+}
+if(_22.declaredClass=="dijit.form.CheckBox"){
+if(_24){
+_22.set("value",Boolean(_23),!this.watch);
+return this;
+}
+return Boolean(_22.get("value"));
+}
+if(_24){
+_22.set("value",_23,!this.watch);
+return this;
+}
+return _22.get("value");
+},formPointValue:function(_29,_2a){
+if(_29&&typeof _29=="string"){
+_29=this[_29];
+}
+if(!_29||!_29.tagName||!_29.cloneNode){
+return null;
+}
+if(!dojo.hasClass(_29,"dojoFormValue")){
+return null;
+}
+if(arguments.length==2&&_2a!==undefined){
+_29.innerHTML=_2a;
+return this;
+}
+return _29.innerHTML;
+},inspectFormWidgets:function(_2b,_2c,_2d){
+var _2e,_2f={};
+if(_2c){
+if(dojo.isArray(_2c)){
+dojo.forEach(_2c,function(_30){
+if(_30 in this.formWidgets){
+_2f[_30]=_2b.call(this,_30,this.formWidgets[_30].widget,_2d);
+}
+},this);
+}else{
+for(_2e in _2c){
+if(_2e in this.formWidgets){
+_2f[_2e]=_2b.call(this,_2e,this.formWidgets[_2e].widget,_2c[_2e]);
+}
+}
+}
+}else{
+for(_2e in this.formWidgets){
+_2f[_2e]=_2b.call(this,_2e,this.formWidgets[_2e].widget,_2d);
+}
+}
+return _2f;
+},inspectAttachedPoints:function(_31,_32,_33){
+var _34,_35={};
+if(_32){
+if(dojo.isArray(_32)){
+dojo.forEach(_32,function(_36){
+var _37=this[_36];
+if(_37&&_37.tagName&&_37.cloneNode){
+_35[_36]=_31.call(this,_36,_37,_33);
+}
+},this);
+}else{
+for(_34 in _32){
+var _38=this[_34];
+if(_38&&_38.tagName&&_38.cloneNode){
+_35[_34]=_31.call(this,_34,_38,_32[_34]);
+}
+}
+}
+}else{
+for(_34 in this){
+if(!(_34 in _a)){
+var _38=this[_34];
+if(_38&&_38.tagName&&_38.cloneNode){
+_35[_34]=_31.call(this,_34,_38,_33);
+}
+}
+}
+}
+return _35;
+},inspect:function(_39,_3a,_3b){
+var _3c=this.inspectFormWidgets(function(_3d,_3e,_3f){
+if(dojo.isArray(_3e)){
+return _39.call(this,_3d,dojo.map(_3e,function(w){
+return w.domNode;
+}),_3f);
+}
+return _39.call(this,_3d,_3e.domNode,_3f);
+},_3a,_3b);
+if(this.inspectFormNodes){
+dojo.mixin(_3c,this.inspectFormNodes(_39,_3a,_3b));
+}
+return dojo.mixin(_3c,this.inspectAttachedPoints(_39,_3a,_3b));
+}});
+})();
+dojo.extend(dijit._Widget,{observer:""});
+}
Index: trunk/web/dojo/dojox/form/RangeSlider.js
===================================================================
--- trunk/web/dojo/dojox/form/RangeSlider.js	(revision 0)
+++ trunk/web/dojo/dojox/form/RangeSlider.js	(revision 9)
@@ -0,0 +1,298 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.RangeSlider"]){
+dojo._hasResource["dojox.form.RangeSlider"]=true;
+dojo.provide("dojox.form.RangeSlider");
+dojo.require("dijit.form.HorizontalSlider");
+dojo.require("dijit.form.VerticalSlider");
+dojo.require("dojox.fx");
+(function(){
+var _1=function(a,b){
+return b-a;
+},_2=function(a,b){
+return a-b;
+};
+dojo.declare("dojox.form._RangeSliderMixin",null,{value:[0,100],postMixInProperties:function(){
+this.inherited(arguments);
+this.value=dojo.map(this.value,function(i){
+return parseInt(i,10);
+});
+},postCreate:function(){
+this.inherited(arguments);
+this.value.sort(this._isReversed()?_1:_2);
+var _3=this;
+var _4=function(){
+dijit.form._SliderMoverMax.apply(this,arguments);
+this.widget=_3;
+};
+dojo.extend(_4,dijit.form._SliderMoverMax.prototype);
+this._movableMax=new dojo.dnd.Moveable(this.sliderHandleMax,{mover:_4});
+dijit.setWaiState(this.focusNodeMax,"valuemin",this.minimum);
+dijit.setWaiState(this.focusNodeMax,"valuemax",this.maximum);
+var _5=function(){
+dijit.form._SliderBarMover.apply(this,arguments);
+this.widget=_3;
+};
+dojo.extend(_5,dijit.form._SliderBarMover.prototype);
+this._movableBar=new dojo.dnd.Moveable(this.progressBar,{mover:_5});
+},destroy:function(){
+this.inherited(arguments);
+this._movableMax.destroy();
+this._movableBar.destroy();
+},_onKeyPress:function(e){
+if(this.disabled||this.readOnly||e.altKey||e.ctrlKey){
+return;
+}
+var _6=e.currentTarget,_7=false,_8=false,k=dojo.keys;
+if(_6==this.sliderHandle){
+_7=true;
+}else{
+if(_6==this.progressBar){
+_8=_7=true;
+}else{
+if(_6==this.sliderHandleMax){
+_8=true;
+}
+}
+}
+switch(e.keyCode){
+case k.HOME:
+this._setValueAttr(this.minimum,true,_8);
+break;
+case k.END:
+this._setValueAttr(this.maximum,true,_8);
+break;
+case ((this._descending||this.isLeftToRight())?k.RIGHT_ARROW:k.LEFT_ARROW):
+case (this._descending===false?k.DOWN_ARROW:k.UP_ARROW):
+case (this._descending===false?k.PAGE_DOWN:k.PAGE_UP):
+if(_7&&_8){
+this._bumpValue([{"change":e.keyCode==k.PAGE_UP?this.pageIncrement:1,"useMaxValue":true},{"change":e.keyCode==k.PAGE_UP?this.pageIncrement:1,"useMaxValue":false}]);
+}else{
+if(_7){
+this._bumpValue(e.keyCode==k.PAGE_UP?this.pageIncrement:1,true);
+}else{
+if(_8){
+this._bumpValue(e.keyCode==k.PAGE_UP?this.pageIncrement:1);
+}
+}
+}
+break;
+case ((this._descending||this.isLeftToRight())?k.LEFT_ARROW:k.RIGHT_ARROW):
+case (this._descending===false?k.UP_ARROW:k.DOWN_ARROW):
+case (this._descending===false?k.PAGE_UP:k.PAGE_DOWN):
+if(_7&&_8){
+this._bumpValue([{change:e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1,useMaxValue:false},{change:e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1,useMaxValue:true}]);
+}else{
+if(_7){
+this._bumpValue(e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1);
+}else{
+if(_8){
+this._bumpValue(e.keyCode==k.PAGE_DOWN?-this.pageIncrement:-1,true);
+}
+}
+}
+break;
+default:
+dijit.form._FormValueWidget.prototype._onKeyPress.apply(this,arguments);
+this.inherited(arguments);
+return;
+}
+dojo.stopEvent(e);
+},_onHandleClickMax:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.sliderHandleMax);
+}
+dojo.stopEvent(e);
+},_onClkIncBumper:function(){
+this._setValueAttr(this._descending===false?this.minimum:this.maximum,true,true);
+},_bumpValue:function(_9,_a){
+var _b=dojo.isArray(_9)?[this._getBumpValue(_9[0].change,_9[0].useMaxValue),this._getBumpValue(_9[1].change,_9[1].useMaxValue)]:this._getBumpValue(_9,_a);
+this._setValueAttr(_b,true,!dojo.isArray(_9)&&((_9>0&&!_a)||(_a&&_9<0)));
+},_getBumpValue:function(_c,_d){
+var s=dojo.getComputedStyle(this.sliderBarContainer),c=dojo._getContentBox(this.sliderBarContainer,s),_e=this.discreteValues,_f=!_d?this.value[0]:this.value[1];
+if(_e<=1||_e==Infinity){
+_e=c[this._pixelCount];
+}
+_e--;
+if((this._isReversed()&&_c<0)||(_c>0&&!this._isReversed())){
+_f=!_d?this.value[1]:this.value[0];
+}
+var _10=(_f-this.minimum)*_e/(this.maximum-this.minimum)+_c;
+if(_10<0){
+_10=0;
+}
+if(_10>_e){
+_10=_e;
+}
+return _10*(this.maximum-this.minimum)/_e+this.minimum;
+},_onBarClick:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.progressBar);
+}
+dojo.stopEvent(e);
+},_onRemainingBarClick:function(e){
+if(this.disabled||this.readOnly){
+return;
+}
+if(!dojo.isIE){
+dijit.focus(this.progressBar);
+}
+var _11=dojo.coords(this.sliderBarContainer,true),bar=dojo.coords(this.progressBar,true),_12=e[this._mousePixelCoord]-_11[this._startingPixelCoord],_13=bar[this._startingPixelCount],_14=_13+bar[this._pixelCount],_15=this._isReversed()?_12<=_13:_12>=_14,p=this._isReversed()?_11[this._pixelCount]-_12:_12;
+this._setPixelValue(p,_11[this._pixelCount],true,_15);
+dojo.stopEvent(e);
+},_setPixelValue:function(_16,_17,_18,_19){
+if(this.disabled||this.readOnly){
+return;
+}
+var _1a=this._getValueByPixelValue(_16,_17);
+this._setValueAttr(_1a,_18,_19);
+},_getValueByPixelValue:function(_1b,_1c){
+_1b=_1b<0?0:_1c<_1b?_1c:_1b;
+var _1d=this.discreteValues;
+if(_1d<=1||_1d==Infinity){
+_1d=_1c;
+}
+_1d--;
+var _1e=_1c/_1d;
+var _1f=Math.round(_1b/_1e);
+return (this.maximum-this.minimum)*_1f/_1d+this.minimum;
+},_setValueAttr:function(_20,_21,_22){
+var _23=this.value;
+if(!dojo.isArray(_20)){
+if(_22){
+if(this._isReversed()){
+_23[0]=_20;
+}else{
+_23[1]=_20;
+}
+}else{
+if(this._isReversed()){
+_23[1]=_20;
+}else{
+_23[0]=_20;
+}
+}
+}else{
+_23=_20;
+}
+this._lastValueReported="";
+this.valueNode.value=this.value=_20=_23;
+dijit.setWaiState(this.focusNode,"valuenow",_23[0]);
+dijit.setWaiState(this.focusNodeMax,"valuenow",_23[1]);
+this.value.sort(this._isReversed()?_1:_2);
+dijit.form._FormValueWidget.prototype._setValueAttr.apply(this,arguments);
+this._printSliderBar(_21,_22);
+},_printSliderBar:function(_24,_25){
+var _26=(this.value[0]-this.minimum)/(this.maximum-this.minimum);
+var _27=(this.value[1]-this.minimum)/(this.maximum-this.minimum);
+var _28=_26;
+if(_26>_27){
+_26=_27;
+_27=_28;
+}
+var _29=this._isReversed()?((1-_26)*100):(_26*100);
+var _2a=this._isReversed()?((1-_27)*100):(_27*100);
+var _2b=this._isReversed()?((1-_27)*100):(_26*100);
+if(_24&&this.slideDuration>0&&this.progressBar.style[this._progressPixelSize]){
+var _2c=_25?_27:_26;
+var _2d=this;
+var _2e={};
+var _2f=parseFloat(this.progressBar.style[this._handleOffsetCoord]);
+var _30=this.slideDuration/10;
+if(_30===0){
+return;
+}
+if(_30<0){
+_30=0-_30;
+}
+var _31={};
+var _32={};
+var _33={};
+_31[this._handleOffsetCoord]={start:this.sliderHandle.style[this._handleOffsetCoord],end:_29,units:"%"};
+_32[this._handleOffsetCoord]={start:this.sliderHandleMax.style[this._handleOffsetCoord],end:_2a,units:"%"};
+_33[this._handleOffsetCoord]={start:this.progressBar.style[this._handleOffsetCoord],end:_2b,units:"%"};
+_33[this._progressPixelSize]={start:this.progressBar.style[this._progressPixelSize],end:(_27-_26)*100,units:"%"};
+var _34=dojo.animateProperty({node:this.sliderHandle,duration:_30,properties:_31});
+var _35=dojo.animateProperty({node:this.sliderHandleMax,duration:_30,properties:_32});
+var _36=dojo.animateProperty({node:this.progressBar,duration:_30,properties:_33});
+var _37=dojo.fx.combine([_34,_35,_36]);
+_37.play();
+}else{
+this.sliderHandle.style[this._handleOffsetCoord]=_29+"%";
+this.sliderHandleMax.style[this._handleOffsetCoord]=_2a+"%";
+this.progressBar.style[this._handleOffsetCoord]=_2b+"%";
+this.progressBar.style[this._progressPixelSize]=((_27-_26)*100)+"%";
+}
+}});
+dojo.declare("dijit.form._SliderMoverMax",dijit.form._SliderMover,{onMouseMove:function(e){
+var _38=this.widget;
+var _39=_38._abspos;
+if(!_39){
+_39=_38._abspos=dojo.coords(_38.sliderBarContainer,true);
+_38._setPixelValue_=dojo.hitch(_38,"_setPixelValue");
+_38._isReversed_=_38._isReversed();
+}
+var _3a=e[_38._mousePixelCoord]-_39[_38._startingPixelCoord];
+_38._setPixelValue_(_38._isReversed_?(_39[_38._pixelCount]-_3a):_3a,_39[_38._pixelCount],false,true);
+},destroy:function(e){
+dojo.dnd.Mover.prototype.destroy.apply(this,arguments);
+var _3b=this.widget;
+_3b._abspos=null;
+_3b._setValueAttr(_3b.value,true);
+}});
+dojo.declare("dijit.form._SliderBarMover",dojo.dnd.Mover,{onMouseMove:function(e){
+var _3c=this.widget;
+if(_3c.disabled||_3c.readOnly){
+return;
+}
+var _3d=_3c._abspos;
+var bar=_3c._bar;
+var _3e=_3c._mouseOffset;
+if(!_3d){
+_3d=_3c._abspos=dojo.coords(_3c.sliderBarContainer,true);
+_3c._setPixelValue_=dojo.hitch(_3c,"_setPixelValue");
+_3c._getValueByPixelValue_=dojo.hitch(_3c,"_getValueByPixelValue");
+_3c._isReversed_=_3c._isReversed();
+}
+if(!bar){
+bar=_3c._bar=dojo.coords(_3c.progressBar,true);
+}
+if(!_3e){
+_3e=_3c._mouseOffset=e[_3c._mousePixelCoord]-_3d[_3c._startingPixelCoord]-bar[_3c._startingPixelCount];
+}
+var _3f=e[_3c._mousePixelCoord]-_3d[_3c._startingPixelCoord]-_3e,_40=_3f+bar[_3c._pixelCount];
+pixelValues=[_3f,_40];
+pixelValues.sort(_2);
+if(pixelValues[0]<=0){
+pixelValues[0]=0;
+pixelValues[1]=bar[_3c._pixelCount];
+}
+if(pixelValues[1]>=_3d[_3c._pixelCount]){
+pixelValues[1]=_3d[_3c._pixelCount];
+pixelValues[0]=_3d[_3c._pixelCount]-bar[_3c._pixelCount];
+}
+var _41=[_3c._getValueByPixelValue(_3c._isReversed_?(_3d[_3c._pixelCount]-pixelValues[0]):pixelValues[0],_3d[_3c._pixelCount]),_3c._getValueByPixelValue(_3c._isReversed_?(_3d[_3c._pixelCount]-pixelValues[1]):pixelValues[1],_3d[_3c._pixelCount])];
+_3c._setValueAttr(_41,false,false);
+},destroy:function(){
+dojo.dnd.Mover.prototype.destroy.apply(this,arguments);
+var _42=this.widget;
+_42._abspos=null;
+_42._bar=null;
+_42._mouseOffset=null;
+_42._setValueAttr(_42.value,true);
+}});
+dojo.declare("dojox.form.HorizontalRangeSlider",[dijit.form.HorizontalSlider,dojox.form._RangeSliderMixin],{templateString:dojo.cache("dojox.form","resources/HorizontalRangeSlider.html","<table class=\"dijit dijitReset dijitSlider dijitSliderH dojoxRangeSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\" dojoAttachEvent=\"onkeypress:_onKeyPress,onkeyup:_onKeyUp\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"topDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationT dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderDecrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderLeftBumper\" dojoAttachEvent=\"onmousedown:_onClkDecBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><div waiRole=\"presentation\" class=\"dojoxRangeSliderBarContainer\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div dojoAttachPoint=\"sliderHandle\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable dijitSliderMoveableH\" dojoAttachEvent=\"onmousedown:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitSliderImageHandleH\"></div\n\t\t\t\t></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar,focusNode\" class=\"dijitSliderBar dijitSliderBarH dijitSliderProgressBar dijitSliderProgressBarH\" dojoAttachEvent=\"onmousedown:_onBarClick\"></div\n\t\t\t\t><div dojoAttachPoint=\"sliderHandleMax,focusNodeMax\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable dijitSliderMoveableH\" dojoAttachEvent=\"onmousedown:_onHandleClickMax\" waiRole=\"sliderMax\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitSliderImageHandleH\"></div\n\t\t\t\t></div\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarH dijitSliderRemainingBar dijitSliderRemainingBarH\" dojoAttachEvent=\"onmousedown:_onRemainingBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperH dijitSliderRightBumper\" dojoAttachEvent=\"onmousedown:_onClkIncBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerH\"\n\t\t\t><div class=\"dijitSliderIncrementIconH\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationB dijitSliderDecorationH\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n")});
+dojo.declare("dojox.form.VerticalRangeSlider",[dijit.form.VerticalSlider,dojox.form._RangeSliderMixin],{templateString:dojo.cache("dojox.form","resources/VerticalRangeSlider.html","<table class=\"dijitReset dijitSlider dijitSliderV dojoxRangeSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderIncrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderTopBumper\" dojoAttachEvent=\"onclick:_onClkIncBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationL dijitSliderDecorationV\" style=\"text-align:center;height:100%;\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" ${!nameAttrSetting}\n\t\t\t/><center waiRole=\"presentation\" style=\"position:relative;height:100%;\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitSliderBarV dijitSliderRemainingBar dijitSliderRemainingBarV\" dojoAttachEvent=\"onmousedown:_onRemainingBarClick\"\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable dijitSliderMoveableV\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onHandleClick\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitSliderImageHandleV\"></div\n\t\t\t\t\t></div\n\t\t\t\t\t><div waiRole=\"presentation\" dojoAttachPoint=\"progressBar,focusNode\" tabIndex=\"${tabIndex}\" class=\"dijitSliderBar dijitSliderBarV dijitSliderProgressBar dijitSliderProgressBarV\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onBarClick\"\n\t\t\t\t\t></div\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandleMax,focusNodeMax\" tabIndex=\"${tabIndex}\" class=\"dijitSliderMoveable dijitSliderMoveableV\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_onHandleClickMax\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitSliderImageHandleV\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset dijitSliderDecoration dijitSliderDecorationR dijitSliderDecorationV\" style=\"text-align:center;height:100%;\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitSliderBumperV dijitSliderBottomBumper\" dojoAttachEvent=\"onclick:_onClkDecBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitSliderButtonContainerV\"\n\t\t\t><div class=\"dijitSliderDecrementIconV\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></table>\n")});
+})();
+}
Index: trunk/web/dojo/dojox/form/FileInput.js
===================================================================
--- trunk/web/dojo/dojox/form/FileInput.js	(revision 0)
+++ trunk/web/dojo/dojox/form/FileInput.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.FileInput"]){
+dojo._hasResource["dojox.form.FileInput"]=true;
+dojo.provide("dojox.form.FileInput");
+dojo.experimental("dojox.form.FileInput");
+dojo.require("dijit.form._FormWidget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.form.FileInput",dijit.form._FormWidget,{label:"Browse ...",cancelText:"Cancel",name:"uploadFile",templateString:dojo.cache("dojox.form","resources/FileInput.html","<div class=\"dijitFileInput\">\n\t<input id=\"${id}\" class=\"dijitFileInputReal\" type=\"file\" dojoAttachPoint=\"fileInput\" name=\"${name}\" />\n\t<div class=\"dijitFakeInput\">\n\t\t<input class=\"dijitFileInputVisible\" type=\"text\" dojoAttachPoint=\"focusNode, inputNode\" />\n\t\t<div class=\"dijitInline dijitFileInputText\" dojoAttachPoint=\"titleNode\">${label}</div>\n\t\t<div class=\"dijitInline dijitFileInputButton\" dojoAttachPoint=\"cancelNode\" \n\t\t\tdojoAttachEvent=\"onclick:reset\">${cancelText}</div>\n\t</div>\n</div>\n"),startup:function(){
+this._listener=this.connect(this.fileInput,"onchange","_matchValue");
+this._keyListener=this.connect(this.fileInput,"onkeyup","_matchValue");
+},postCreate:function(){
+},_matchValue:function(){
+this.inputNode.value=this.fileInput.value;
+if(this.inputNode.value){
+this.cancelNode.style.visibility="visible";
+dojo.fadeIn({node:this.cancelNode,duration:275}).play();
+}
+},setLabel:function(_1,_2){
+this.titleNode.innerHTML=_1;
+},reset:function(e){
+this.disconnect(this._listener);
+this.disconnect(this._keyListener);
+if(this.fileInput){
+this.domNode.removeChild(this.fileInput);
+}
+dojo.fadeOut({node:this.cancelNode,duration:275}).play();
+this.fileInput=document.createElement("input");
+this.fileInput.setAttribute("type","file");
+this.fileInput.setAttribute("id",this.id);
+this.fileInput.setAttribute("name",this.name);
+dojo.addClass(this.fileInput,"dijitFileInputReal");
+this.domNode.appendChild(this.fileInput);
+this._keyListener=this.connect(this.fileInput,"onkeyup","_matchValue");
+this._listener=this.connect(this.fileInput,"onchange","_matchValue");
+this.inputNode.value="";
+}});
+}
Index: trunk/web/dojo/dojox/form/CheckedMultiSelect.js
===================================================================
--- trunk/web/dojo/dojox/form/CheckedMultiSelect.js	(revision 0)
+++ trunk/web/dojo/dojox/form/CheckedMultiSelect.js	(revision 9)
@@ -0,0 +1,92 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.form.CheckedMultiSelect"]){
+dojo._hasResource["dojox.form.CheckedMultiSelect"]=true;
+dojo.provide("dojox.form.CheckedMultiSelect");
+dojo.require("dijit.form.CheckBox");
+dojo.require("dijit.form._FormSelectWidget");
+dojo.declare("dojox.form._CheckedMultiSelectItem",[dijit._Widget,dijit._Templated],{widgetsInTemplate:true,templateString:dojo.cache("dojox.form","resources/_CheckedMultiSelectItem.html","<div class=\"dijitReset ${baseClass}\"\n\t><input class=\"${baseClass}Box\" dojoType=\"dijit.form.CheckBox\" dojoAttachPoint=\"checkBox\" \n\t\tdojoAttachEvent=\"_onClick:_changeBox\" type=\"${_type.type}\" baseClass=\"${_type.baseClass}\"\n\t/><div class=\"dijitInline ${baseClass}Label\" dojoAttachPoint=\"labelNode\" dojoAttachEvent=\"onclick:_onClick\"></div\n></div>\n"),baseClass:"dojoxMultiSelectItem",option:null,parent:null,disabled:false,readOnly:false,postMixInProperties:function(){
+if(this.parent.multiple){
+this._type={type:"checkbox",baseClass:"dijitCheckBox"};
+}else{
+this._type={type:"radio",baseClass:"dijitRadio"};
+}
+this.disabled=this.option.disabled=this.option.disabled||false;
+this.inherited(arguments);
+},postCreate:function(){
+this.inherited(arguments);
+this.labelNode.innerHTML=this.option.label;
+},_changeBox:function(){
+if(this.get("disabled")||this.get("readOnly")){
+return;
+}
+if(this.parent.multiple){
+this.option.selected=this.checkBox.attr("value")&&true;
+}else{
+this.parent.attr("value",this.option.value);
+}
+this.parent._updateSelection();
+this.parent.focus();
+},_onClick:function(e){
+if(this.get("disabled")||this.get("readOnly")){
+dojo.stopEvent(e);
+}else{
+this.checkBox._onClick(e);
+}
+},_updateBox:function(){
+this.checkBox.attr("value",this.option.selected);
+},_setDisabledAttr:function(_1){
+this.disabled=_1||this.option.disabled;
+this.checkBox.attr("disabled",this.disabled);
+dojo.toggleClass(this.domNode,"dojoxMultiSelectDisabled",this.disabled);
+},_setReadOnlyAttr:function(_2){
+this.checkBox.attr("readOnly",_2);
+this.readOnly=_2;
+}});
+dojo.declare("dojox.form.CheckedMultiSelect",dijit.form._FormSelectWidget,{templateString:dojo.cache("dojox.form","resources/CheckedMultiSelect.html","<div class=\"dijit dijitReset dijitInline\" dojoAttachEvent=\"onmousedown:_onMouseDown,onclick:focus\"\n\t><select class=\"${baseClass}Select\" multiple=\"true\" dojoAttachPoint=\"containerNode,focusNode\"></select\n\t><div dojoAttachPoint=\"wrapperDiv\"></div\n></div>\n"),baseClass:"dojoxMultiSelect",_onMouseDown:function(e){
+dojo.stopEvent(e);
+},_addOptionItem:function(_3){
+this.wrapperDiv.appendChild(new dojox.form._CheckedMultiSelectItem({option:_3,parent:this}).domNode);
+},_updateSelection:function(){
+this.inherited(arguments);
+dojo.forEach(this._getChildren(),function(c){
+c._updateBox();
+});
+},_getChildren:function(){
+return dojo.map(this.wrapperDiv.childNodes,function(n){
+return dijit.byNode(n);
+});
+},invertSelection:function(_4){
+dojo.forEach(this.options,function(i){
+i.selected=!i.selected;
+});
+this._updateSelection();
+},_setDisabledAttr:function(_5){
+this.inherited(arguments);
+dojo.forEach(this._getChildren(),function(_6){
+if(_6&&_6.attr){
+_6.attr("disabled",_5);
+}
+});
+},_setReadOnlyAttr:function(_7){
+if("readOnly" in this.attributeMap){
+this._attrToDom("readOnly",_7);
+}
+this.readOnly=_7;
+dojo.forEach(this._getChildren(),function(_8){
+if(_8&&_8.attr){
+_8.attr("readOnly",_7);
+}
+});
+},uninitialize:function(){
+dojo.forEach(this._getChildren(),function(_9){
+_9.destroyRecursive();
+});
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/uuid/Uuid.js
===================================================================
--- trunk/web/dojo/dojox/uuid/Uuid.js	(revision 0)
+++ trunk/web/dojo/dojox/uuid/Uuid.js	(revision 9)
@@ -0,0 +1,99 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.uuid.Uuid"]){
+dojo._hasResource["dojox.uuid.Uuid"]=true;
+dojo.provide("dojox.uuid.Uuid");
+dojo.require("dojox.uuid");
+dojox.uuid.Uuid=function(_1){
+this._uuidString=dojox.uuid.NIL_UUID;
+if(_1){
+dojox.uuid.assert(dojo.isString(_1));
+this._uuidString=_1.toLowerCase();
+dojox.uuid.assert(this.isValid());
+}else{
+var _2=dojox.uuid.Uuid.getGenerator();
+if(_2){
+this._uuidString=_2();
+dojox.uuid.assert(this.isValid());
+}
+}
+};
+dojox.uuid.Uuid.compare=function(_3,_4){
+var _5=_3.toString();
+var _6=_4.toString();
+if(_5>_6){
+return 1;
+}
+if(_5<_6){
+return -1;
+}
+return 0;
+};
+dojox.uuid.Uuid.setGenerator=function(_7){
+dojox.uuid.assert(!_7||dojo.isFunction(_7));
+dojox.uuid.Uuid._ourGenerator=_7;
+};
+dojox.uuid.Uuid.getGenerator=function(){
+return dojox.uuid.Uuid._ourGenerator;
+};
+dojox.uuid.Uuid.prototype.toString=function(){
+return this._uuidString;
+};
+dojox.uuid.Uuid.prototype.compare=function(_8){
+return dojox.uuid.Uuid.compare(this,_8);
+};
+dojox.uuid.Uuid.prototype.isEqual=function(_9){
+return (this.compare(_9)==0);
+};
+dojox.uuid.Uuid.prototype.isValid=function(){
+return dojox.uuid.isValid(this);
+};
+dojox.uuid.Uuid.prototype.getVariant=function(){
+return dojox.uuid.getVariant(this);
+};
+dojox.uuid.Uuid.prototype.getVersion=function(){
+if(!this._versionNumber){
+this._versionNumber=dojox.uuid.getVersion(this);
+}
+return this._versionNumber;
+};
+dojox.uuid.Uuid.prototype.getNode=function(){
+if(!this._nodeString){
+this._nodeString=dojox.uuid.getNode(this);
+}
+return this._nodeString;
+};
+dojox.uuid.Uuid.prototype.getTimestamp=function(_a){
+if(!_a){
+_a=null;
+}
+switch(_a){
+case "string":
+case String:
+return this.getTimestamp(Date).toUTCString();
+break;
+case "hex":
+if(!this._timestampAsHexString){
+this._timestampAsHexString=dojox.uuid.getTimestamp(this,"hex");
+}
+return this._timestampAsHexString;
+break;
+case null:
+case "date":
+case Date:
+if(!this._timestampAsDate){
+this._timestampAsDate=dojox.uuid.getTimestamp(this,Date);
+}
+return this._timestampAsDate;
+break;
+default:
+dojox.uuid.assert(false,"The getTimestamp() method dojox.uuid.Uuid was passed a bogus returnType: "+_a);
+break;
+}
+};
+}
Index: trunk/web/dojo/dojox/uuid/_base.js
===================================================================
--- trunk/web/dojo/dojox/uuid/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/uuid/_base.js	(revision 9)
@@ -0,0 +1,136 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.uuid._base"]){
+dojo._hasResource["dojox.uuid._base"]=true;
+dojo.provide("dojox.uuid._base");
+dojox.uuid.NIL_UUID="00000000-0000-0000-0000-000000000000";
+dojox.uuid.version={UNKNOWN:0,TIME_BASED:1,DCE_SECURITY:2,NAME_BASED_MD5:3,RANDOM:4,NAME_BASED_SHA1:5};
+dojox.uuid.variant={NCS:"0",DCE:"10",MICROSOFT:"110",UNKNOWN:"111"};
+dojox.uuid.assert=function(_1,_2){
+if(!_1){
+if(!_2){
+_2="An assert statement failed.\n"+"The method dojox.uuid.assert() was called with a 'false' value.\n";
+}
+throw new Error(_2);
+}
+};
+dojox.uuid.generateNilUuid=function(){
+return dojox.uuid.NIL_UUID;
+};
+dojox.uuid.isValid=function(_3){
+_3=_3.toString();
+var _4=(dojo.isString(_3)&&(_3.length==36)&&(_3==_3.toLowerCase()));
+if(_4){
+var _5=_3.split("-");
+_4=((_5.length==5)&&(_5[0].length==8)&&(_5[1].length==4)&&(_5[2].length==4)&&(_5[3].length==4)&&(_5[4].length==12));
+var _6=16;
+for(var i in _5){
+var _7=_5[i];
+var _8=parseInt(_7,_6);
+_4=_4&&isFinite(_8);
+}
+}
+return _4;
+};
+dojox.uuid.getVariant=function(_9){
+if(!dojox.uuid._ourVariantLookupTable){
+var _a=dojox.uuid.variant;
+var _b=[];
+_b[0]=_a.NCS;
+_b[1]=_a.NCS;
+_b[2]=_a.NCS;
+_b[3]=_a.NCS;
+_b[4]=_a.NCS;
+_b[5]=_a.NCS;
+_b[6]=_a.NCS;
+_b[7]=_a.NCS;
+_b[8]=_a.DCE;
+_b[9]=_a.DCE;
+_b[10]=_a.DCE;
+_b[11]=_a.DCE;
+_b[12]=_a.MICROSOFT;
+_b[13]=_a.MICROSOFT;
+_b[14]=_a.UNKNOWN;
+_b[15]=_a.UNKNOWN;
+dojox.uuid._ourVariantLookupTable=_b;
+}
+_9=_9.toString();
+var _c=_9.charAt(19);
+var _d=16;
+var _e=parseInt(_c,_d);
+dojox.uuid.assert((_e>=0)&&(_e<=16));
+return dojox.uuid._ourVariantLookupTable[_e];
+};
+dojox.uuid.getVersion=function(_f){
+var _10="dojox.uuid.getVersion() was not passed a DCE Variant UUID.";
+dojox.uuid.assert(dojox.uuid.getVariant(_f)==dojox.uuid.variant.DCE,_10);
+_f=_f.toString();
+var _11=_f.charAt(14);
+var _12=16;
+var _13=parseInt(_11,_12);
+return _13;
+};
+dojox.uuid.getNode=function(_14){
+var _15="dojox.uuid.getNode() was not passed a TIME_BASED UUID.";
+dojox.uuid.assert(dojox.uuid.getVersion(_14)==dojox.uuid.version.TIME_BASED,_15);
+_14=_14.toString();
+var _16=_14.split("-");
+var _17=_16[4];
+return _17;
+};
+dojox.uuid.getTimestamp=function(_18,_19){
+var _1a="dojox.uuid.getTimestamp() was not passed a TIME_BASED UUID.";
+dojox.uuid.assert(dojox.uuid.getVersion(_18)==dojox.uuid.version.TIME_BASED,_1a);
+_18=_18.toString();
+if(!_19){
+_19=null;
+}
+switch(_19){
+case "string":
+case String:
+return dojox.uuid.getTimestamp(_18,Date).toUTCString();
+break;
+case "hex":
+var _1b=_18.split("-");
+var _1c=_1b[0];
+var _1d=_1b[1];
+var _1e=_1b[2];
+_1e=_1e.slice(1);
+var _1f=_1e+_1d+_1c;
+dojox.uuid.assert(_1f.length==15);
+return _1f;
+break;
+case null:
+case "date":
+case Date:
+var _20=3394248;
+var _21=16;
+var _22=_18.split("-");
+var _23=parseInt(_22[0],_21);
+var _24=parseInt(_22[1],_21);
+var _25=parseInt(_22[2],_21);
+var _26=_25&4095;
+_26<<=16;
+_26+=_24;
+_26*=4294967296;
+_26+=_23;
+var _27=_26/10000;
+var _28=60*60;
+var _29=_20;
+var _2a=_29*_28;
+var _2b=_2a*1000;
+var _2c=_27-_2b;
+var _2d=new Date(_2c);
+return _2d;
+break;
+default:
+dojox.uuid.assert(false,"dojox.uuid.getTimestamp was not passed a valid returnType: "+_19);
+break;
+}
+};
+}
Index: trunk/web/dojo/dojox/uuid/generateTimeBasedUuid.js
===================================================================
--- trunk/web/dojo/dojox/uuid/generateTimeBasedUuid.js	(revision 0)
+++ trunk/web/dojo/dojox/uuid/generateTimeBasedUuid.js	(revision 9)
@@ -0,0 +1,197 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.uuid.generateTimeBasedUuid"]){
+dojo._hasResource["dojox.uuid.generateTimeBasedUuid"]=true;
+dojo.provide("dojox.uuid.generateTimeBasedUuid");
+dojox.uuid.generateTimeBasedUuid=function(_1){
+var _2=dojox.uuid.generateTimeBasedUuid._generator.generateUuidString(_1);
+return _2;
+};
+dojox.uuid.generateTimeBasedUuid.isValidNode=function(_3){
+var _4=16;
+var _5=parseInt(_3,_4);
+var _6=dojo.isString(_3)&&_3.length==12&&isFinite(_5);
+return _6;
+};
+dojox.uuid.generateTimeBasedUuid.setNode=function(_7){
+dojox.uuid.assert((_7===null)||this.isValidNode(_7));
+this._uniformNode=_7;
+};
+dojox.uuid.generateTimeBasedUuid.getNode=function(){
+return this._uniformNode;
+};
+dojox.uuid.generateTimeBasedUuid._generator=new function(){
+this.GREGORIAN_CHANGE_OFFSET_IN_HOURS=3394248;
+var _8=null;
+var _9=null;
+var _a=null;
+var _b=0;
+var _c=null;
+var _d=null;
+var _e=16;
+function _f(_10){
+_10[2]+=_10[3]>>>16;
+_10[3]&=65535;
+_10[1]+=_10[2]>>>16;
+_10[2]&=65535;
+_10[0]+=_10[1]>>>16;
+_10[1]&=65535;
+dojox.uuid.assert((_10[0]>>>16)===0);
+};
+function _11(x){
+var _12=new Array(0,0,0,0);
+_12[3]=x%65536;
+x-=_12[3];
+x/=65536;
+_12[2]=x%65536;
+x-=_12[2];
+x/=65536;
+_12[1]=x%65536;
+x-=_12[1];
+x/=65536;
+_12[0]=x;
+return _12;
+};
+function _13(_14,_15){
+dojox.uuid.assert(dojo.isArray(_14));
+dojox.uuid.assert(dojo.isArray(_15));
+dojox.uuid.assert(_14.length==4);
+dojox.uuid.assert(_15.length==4);
+var _16=new Array(0,0,0,0);
+_16[3]=_14[3]+_15[3];
+_16[2]=_14[2]+_15[2];
+_16[1]=_14[1]+_15[1];
+_16[0]=_14[0]+_15[0];
+_f(_16);
+return _16;
+};
+function _17(_18,_19){
+dojox.uuid.assert(dojo.isArray(_18));
+dojox.uuid.assert(dojo.isArray(_19));
+dojox.uuid.assert(_18.length==4);
+dojox.uuid.assert(_19.length==4);
+var _1a=false;
+if(_18[0]*_19[0]!==0){
+_1a=true;
+}
+if(_18[0]*_19[1]!==0){
+_1a=true;
+}
+if(_18[0]*_19[2]!==0){
+_1a=true;
+}
+if(_18[1]*_19[0]!==0){
+_1a=true;
+}
+if(_18[1]*_19[1]!==0){
+_1a=true;
+}
+if(_18[2]*_19[0]!==0){
+_1a=true;
+}
+dojox.uuid.assert(!_1a);
+var _1b=new Array(0,0,0,0);
+_1b[0]+=_18[0]*_19[3];
+_f(_1b);
+_1b[0]+=_18[1]*_19[2];
+_f(_1b);
+_1b[0]+=_18[2]*_19[1];
+_f(_1b);
+_1b[0]+=_18[3]*_19[0];
+_f(_1b);
+_1b[1]+=_18[1]*_19[3];
+_f(_1b);
+_1b[1]+=_18[2]*_19[2];
+_f(_1b);
+_1b[1]+=_18[3]*_19[1];
+_f(_1b);
+_1b[2]+=_18[2]*_19[3];
+_f(_1b);
+_1b[2]+=_18[3]*_19[2];
+_f(_1b);
+_1b[3]+=_18[3]*_19[3];
+_f(_1b);
+return _1b;
+};
+function _1c(_1d,_1e){
+while(_1d.length<_1e){
+_1d="0"+_1d;
+}
+return _1d;
+};
+function _1f(){
+var _20=Math.floor((Math.random()%1)*Math.pow(2,32));
+var _21=_20.toString(_e);
+while(_21.length<8){
+_21="0"+_21;
+}
+return _21;
+};
+this.generateUuidString=function(_22){
+if(_22){
+dojox.uuid.assert(dojox.uuid.generateTimeBasedUuid.isValidNode(_22));
+}else{
+if(dojox.uuid.generateTimeBasedUuid._uniformNode){
+_22=dojox.uuid.generateTimeBasedUuid._uniformNode;
+}else{
+if(!_8){
+var _23=32768;
+var _24=Math.floor((Math.random()%1)*Math.pow(2,15));
+var _25=(_23|_24).toString(_e);
+_8=_25+_1f();
+}
+_22=_8;
+}
+}
+if(!_9){
+var _26=32768;
+var _27=Math.floor((Math.random()%1)*Math.pow(2,14));
+_9=(_26|_27).toString(_e);
+}
+var now=new Date();
+var _28=now.valueOf();
+var _29=_11(_28);
+if(!_c){
+var _2a=_11(60*60);
+var _2b=_11(dojox.uuid.generateTimeBasedUuid._generator.GREGORIAN_CHANGE_OFFSET_IN_HOURS);
+var _2c=_17(_2b,_2a);
+var _2d=_11(1000);
+_c=_17(_2c,_2d);
+_d=_11(10000);
+}
+var _2e=_29;
+var _2f=_13(_c,_2e);
+var _30=_17(_2f,_d);
+if(now.valueOf()==_a){
+_30[3]+=_b;
+_f(_30);
+_b+=1;
+if(_b==10000){
+while(now.valueOf()==_a){
+now=new Date();
+}
+}
+}else{
+_a=now.valueOf();
+_b=1;
+}
+var _31=_30[2].toString(_e);
+var _32=_30[3].toString(_e);
+var _33=_1c(_31,4)+_1c(_32,4);
+var _34=_30[1].toString(_e);
+_34=_1c(_34,4);
+var _35=_30[0].toString(_e);
+_35=_1c(_35,3);
+var _36="-";
+var _37="1";
+var _38=_33+_36+_34+_36+_37+_35+_36+_9+_36+_22;
+_38=_38.toLowerCase();
+return _38;
+};
+}();
+}
Index: trunk/web/dojo/dojox/uuid/README
===================================================================
--- trunk/web/dojo/dojox/uuid/README	(revision 0)
+++ trunk/web/dojo/dojox/uuid/README	(revision 9)
@@ -0,0 +1,43 @@
+-------------------------------------------------------------------------------
+DojoX UUID
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 06/21/2007
+-------------------------------------------------------------------------------
+Project state: production
+-------------------------------------------------------------------------------
+Project authors
+	Brian Douglas Skinner (skinner@dojotoolkit.org)
+-------------------------------------------------------------------------------
+Project description
+
+DojoX UUID is the port of the original Dojo 0.4.x UUID classes.  The UUID 
+classes can be used to represent Universally Unique IDentifiers (UUIDs), as
+described in the IETF's RFC 4122: 
+  http://tools.ietf.org/html/rfc4122
+
+The DojoX UUID classes provide support for generating both "time-based" UUIDs
+and lightweight "random" UUIDs.  DojoX UUID does not yet have support for 
+generating new "name-based" UUIDs, but the dojo.uuid.Uuid class can represent
+existing name-based UUIDs, such as UUIDs read from a file or from a server. 
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX UUID has no dependencies, outside of Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+See the API documentation for Dojo (http://dojotoolkit.org/api).
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/uuid.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/uuid/*
+
+Install into the following directory structure:
+/dojox/uuid/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/uuid/generateRandomUuid.js
===================================================================
--- trunk/web/dojo/dojox/uuid/generateRandomUuid.js	(revision 0)
+++ trunk/web/dojo/dojox/uuid/generateRandomUuid.js	(revision 9)
@@ -0,0 +1,34 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.uuid.generateRandomUuid"]){
+dojo._hasResource["dojox.uuid.generateRandomUuid"]=true;
+dojo.provide("dojox.uuid.generateRandomUuid");
+dojox.uuid.generateRandomUuid=function(){
+var _1=16;
+function _2(){
+var _3=Math.floor((Math.random()%1)*Math.pow(2,32));
+var _4=_3.toString(_1);
+while(_4.length<8){
+_4="0"+_4;
+}
+return _4;
+};
+var _5="-";
+var _6="4";
+var _7="8";
+var a=_2();
+var b=_2();
+b=b.substring(0,4)+_5+_6+b.substring(5,8);
+var c=_2();
+c=_7+c.substring(1,4)+_5+c.substring(4,8);
+var d=_2();
+var _8=a+_5+b+_5+c+d;
+_8=_8.toLowerCase();
+return _8;
+};
+}
Index: trunk/web/dojo/dojox/av/_Media.js
===================================================================
--- trunk/web/dojo/dojox/av/_Media.js	(revision 0)
+++ trunk/web/dojo/dojox/av/_Media.js	(revision 9)
@@ -0,0 +1,123 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av._Media"]){
+dojo._hasResource["dojox.av._Media"]=true;
+dojo.provide("dojox.av._Media");
+dojo.declare("dojox.av._Media",null,{mediaUrl:"",initialVolume:1,autoPlay:false,bufferTime:2000,minBufferTime:300,updateTime:100,id:"",isDebug:false,percentDownloaded:0,_flashObject:null,flashMedia:null,_initStatus:function(){
+this.status="ready";
+dojo.connect(this,"onPosition",this,"_figureStatus");
+},getTime:function(){
+return this.flashMedia.getTime();
+},onLoad:function(_1){
+},onDownloaded:function(_2){
+},onClick:function(_3){
+},onSwfSized:function(_4){
+},onMetaData:function(_5,_6){
+this.duration=_5.duration;
+},onPosition:function(_7){
+},onStart:function(_8){
+},onPlay:function(_9){
+},onPause:function(_a){
+},onEnd:function(_b){
+},onStop:function(){
+},onBuffer:function(_c){
+this.isBuffering=_c;
+},onError:function(_d,_e){
+console.warn("ERROR-"+_d.type.toUpperCase()+":",_d.info.code," - URL:",_e);
+},onStatus:function(_f){
+},onPlayerStatus:function(_10){
+},onResize:function(){
+},_figureStatus:function(){
+var pos=this.getTime();
+if(this.status=="stopping"){
+this.status="stopped";
+this.onStop(this._eventFactory());
+}else{
+if(this.status=="ending"&&pos==this._prevPos){
+this.status="ended";
+this.onEnd(this._eventFactory());
+}else{
+if(this.duration&&pos>this.duration-0.5){
+this.status="ending";
+}else{
+if(pos===0){
+if(this.status=="ready"){
+}else{
+this.status="stopped";
+if(this._prevStatus!="stopped"){
+this.onStop(this._eventFactory());
+}
+}
+}else{
+if(this.status=="ready"){
+this.status="started";
+this.onStart(this._eventFactory());
+this.onPlay(this._eventFactory());
+}else{
+if(this.isBuffering){
+this.status="buffering";
+}else{
+if(this.status=="started"||(this.status=="playing"&&pos!=this._prevPos)){
+this.status="playing";
+}else{
+if(!this.isStopped&&this.status=="playing"&&pos==this._prevPos){
+this.status="paused";
+console.warn("pause",pos,this._prevPos);
+if(this.status!=this._prevStatus){
+this.onPause(this._eventFactory());
+}
+}else{
+if((this.status=="paused"||this.status=="stopped")&&pos!=this._prevPos){
+this.status="started";
+this.onPlay(this._eventFactory());
+}
+}
+}
+}
+}
+}
+}
+}
+}
+this._prevPos=pos;
+this._prevStatus=this.status;
+this.onStatus(this.status);
+},_eventFactory:function(){
+var evt={status:this.status};
+return evt;
+},_sub:function(_11,_12){
+dojo.subscribe(this.id+"/"+_11,this,_12);
+},_normalizeVolume:function(vol){
+if(vol>1){
+while(vol>1){
+vol*=0.1;
+}
+}
+return vol;
+},_normalizeUrl:function(_13){
+if(_13&&(_13.toLowerCase().indexOf("http")<0||_13.indexOf("/")==0)){
+var loc=window.location.href.split("/");
+loc.pop();
+loc=loc.join("/")+"/";
+_13=loc+_13;
+}
+return _13;
+},destroy:function(){
+if(!this.flashMedia){
+this._cons.push(dojo.connect(this,"onLoad",this,"destroy"));
+return;
+}
+dojo.forEach(this._subs,function(s){
+dojo.unsubscribe(s);
+});
+dojo.forEach(this._cons,function(c){
+dojo.disconnect(c);
+});
+this._flashObject.destroy();
+}});
+}
Index: trunk/web/dojo/dojox/av/resources/audio.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/resources/audio.swf
===================================================================
--- trunk/web/dojo/dojox/av/resources/audio.swf	(revision 0)
+++ trunk/web/dojo/dojox/av/resources/audio.swf	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/resources/audio.swf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/resources/video.swf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/resources/video.swf
===================================================================
--- trunk/web/dojo/dojox/av/resources/video.swf	(revision 0)
+++ trunk/web/dojo/dojox/av/resources/video.swf	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/resources/video.swf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/resources/version.mov
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/resources/version.mov
===================================================================
--- trunk/web/dojo/dojox/av/resources/version.mov	(revision 0)
+++ trunk/web/dojo/dojox/av/resources/version.mov	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/resources/version.mov
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/README
===================================================================
--- trunk/web/dojo/dojox/av/README	(revision 0)
+++ trunk/web/dojo/dojox/av/README	(revision 9)
@@ -0,0 +1,65 @@
+-------------------------------------------------------------------------------
+DojoX Audio/Video
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 01/15/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Tom Trenka (ttrenka AT gmail.com)
+    Mike Wilcox (AnM8tR AT Yahoo.com)
+-------------------------------------------------------------------------------
+Project description
+
+DojoX A/V aims to bring audio and video capabilities to the Open Web, first
+by wrapping common media types (Flash and Quicktime) and then by providing
+easy to use objects to accomplish basic A/V tasks.  As of version 0.1, only
+the base is included (Flash and Quicktime embedding mechanisms); in the near
+future, usable objects will appear, both in raw programmatic form and also with
+Dijit-compatible wrappers.
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX A/V depends on dojox.embed, and uses Flash movies created in the deft
+project using Flex OSS 3.  You do not need any of the deft code; compiled
+movies are included with dojox.av.  If you want to modify the actual movies,
+you can look in the deft project (under the package deft.av).
+-------------------------------------------------------------------------------
+Documentation
+
+TBD.
+-------------------------------------------------------------------------------
+Included media:
+
+Video:
+test/video/Grog.flv and test/video/OldMan.flv are both created by Mike Wilcox
+and may be freely used and distributed in any way. I only ask for credit if
+widely shown.
+
+Audio:
+test/audio/Ola.mp3, test/audio/Hio.mp3, test/audio/FuzzWah.mp3 are from a
+sounds effects CD and are not to be redistributed. They will most likely
+be swapped out when a better open source option is avaialable.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+
+http://svn.dojotoolkit.org/src/dojox/trunk/embed/*
+http://svn.dojotoolkit.org/src/dojox/trunk/av/*
+
+Install into the following directory structure:
+/dojox/av/
+
+...which should be at the same level as your Dojo checkout.
+
+-------------------------------------------------------------------------------
+Change history
+
+2008-01-15	Initial checkin, with basic movie embedding code.
+2008-06-04	Removed the base code, after moving it into dojox.embed and modifying it.
+2008-08-14  Implemented FLVideo for Flash Video 
+2009-02-08  Implemented FLAudio for Flash Audio
Index: trunk/web/dojo/dojox/av/FLAudio.js
===================================================================
--- trunk/web/dojo/dojox/av/FLAudio.js	(revision 0)
+++ trunk/web/dojo/dojox/av/FLAudio.js	(revision 9)
@@ -0,0 +1,113 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.FLAudio"]){
+dojo._hasResource["dojox.av.FLAudio"]=true;
+dojo.provide("dojox.av.FLAudio");
+dojo.experimental("dojox.av.FLAudio");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojox.timing.doLater");
+dojo.declare("dojox.av.FLAudio",null,{id:"",initialVolume:0.7,initialPan:0,isDebug:false,statusInterval:200,_swfPath:dojo.moduleUrl("dojox.av","resources/audio.swf"),constructor:function(_1){
+dojo.global.swfIsInHTML=function(){
+return true;
+};
+dojo.mixin(this,_1||{});
+if(!this.id){
+this.id="flaudio_"+new Date().getTime();
+}
+this.domNode=dojo.doc.createElement("div");
+dojo.style(this.domNode,{postion:"relative",width:"1px",height:"1px",top:"1px",left:"1px"});
+dojo.body().appendChild(this.domNode);
+this.init();
+},init:function(){
+this._subs=[];
+this.initialVolume=this._normalizeVolume(this.initialVolume);
+var _2={path:this._swfPath.uri,width:"1px",height:"1px",minimumVersion:9,expressInstall:true,params:{wmode:"transparent"},vars:{id:this.id,autoPlay:this.autoPlay,initialVolume:this.initialVolume,initialPan:this.initialPan,statusInterval:this.statusInterval,isDebug:this.isDebug}};
+this._sub("mediaError","onError");
+this._sub("filesProgress","onLoadStatus");
+this._sub("filesAllLoaded","onAllLoaded");
+this._sub("mediaPosition","onPlayStatus");
+this._sub("mediaEnd","onComplete");
+this._sub("mediaMeta","onID3");
+this._flashObject=new dojox.embed.Flash(_2,this.domNode);
+this._flashObject.onError=function(_3){
+console.warn("Flash Error:",_3);
+alert(_3);
+};
+this._flashObject.onLoad=dojo.hitch(this,function(_4){
+this.flashMedia=_4;
+this.isPlaying=this.autoPlay;
+this.isStopped=!this.autoPlay;
+this.onLoad(this.flashMedia);
+});
+},load:function(_5){
+if(dojox.timing.doLater(this.flashMedia,this)){
+return false;
+}
+if(!_5.url){
+throw new Error("An url is required for loading media");
+return false;
+}else{
+_5.url=this._normalizeUrl(_5.url);
+}
+this.flashMedia.load(_5);
+return _5.url;
+},doPlay:function(_6){
+this.flashMedia.doPlay(_6);
+},pause:function(_7){
+this.flashMedia.pause(_7);
+},stop:function(_8){
+this.flashMedia.doStop(_8);
+},setVolume:function(_9){
+this.flashMedia.setVolume(_9);
+},setPan:function(_a){
+this.flashMedia.setPan(_a);
+},getVolume:function(_b){
+return this.flashMedia.getVolume(_b);
+},getPan:function(_c){
+return this.flashMedia.getPan(_c);
+},getPosition:function(_d){
+return this.flashMedia.getPosition(_d);
+},onError:function(_e){
+console.warn("SWF ERROR:",_e);
+},onLoadStatus:function(_f){
+},onAllLoaded:function(){
+},onPlayStatus:function(_10){
+},onComplete:function(_11){
+},onLoad:function(){
+},onID3:function(evt){
+},destroy:function(){
+if(!this.flashMedia){
+this._cons.push(dojo.connect(this,"onLoad",this,"destroy"));
+return;
+}
+dojo.forEach(this._subs,function(s){
+dojo.unsubscribe(s);
+});
+dojo.forEach(this._cons,function(c){
+dojo.disconnect(c);
+});
+this._flashObject.destroy();
+},_sub:function(_12,_13){
+dojo.subscribe(this.id+"/"+_12,this,_13);
+},_normalizeVolume:function(vol){
+if(vol>1){
+while(vol>1){
+vol*=0.1;
+}
+}
+return vol;
+},_normalizeUrl:function(_14){
+if(_14&&_14.toLowerCase().indexOf("http")<0){
+var loc=window.location.href.split("/");
+loc.pop();
+loc=loc.join("/")+"/";
+_14=loc+_14;
+}
+return _14;
+}});
+}
Index: trunk/web/dojo/dojox/av/FLVideo.js
===================================================================
--- trunk/web/dojo/dojox/av/FLVideo.js	(revision 0)
+++ trunk/web/dojo/dojox/av/FLVideo.js	(revision 9)
@@ -0,0 +1,100 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.FLVideo"]){
+dojo._hasResource["dojox.av.FLVideo"]=true;
+dojo.provide("dojox.av.FLVideo");
+dojo.experimental("dojox.av.FLVideo");
+dojo.require("dijit._Widget");
+dojo.require("dojox.embed.Flash");
+dojo.require("dojox.av._Media");
+dojo.declare("dojox.av.FLVideo",[dijit._Widget,dojox.av._Media],{_swfPath:dojo.moduleUrl("dojox.av","resources/video.swf"),constructor:function(_1){
+dojo.global.swfIsInHTML=function(){
+return true;
+};
+},postCreate:function(){
+this._subs=[];
+this._cons=[];
+this.mediaUrl=this._normalizeUrl(this.mediaUrl);
+this.initialVolume=this._normalizeVolume(this.initialVolume);
+var _2={path:this._swfPath.uri,width:"100%",height:"100%",minimumVersion:9,expressInstall:true,params:{allowFullScreen:true,wmode:"transparent"},vars:{videoUrl:this.mediaUrl,id:this.id,autoPlay:this.autoPlay,volume:this.initialVolume,isDebug:this.isDebug}};
+this._sub("stageClick","onClick");
+this._sub("stageSized","onSwfSized");
+this._sub("mediaStatus","onPlayerStatus");
+this._sub("mediaMeta","onMetaData");
+this._sub("mediaError","onError");
+this._sub("mediaStart","onStart");
+this._sub("mediaEnd","onEnd");
+this._flashObject=new dojox.embed.Flash(_2,this.domNode);
+this._flashObject.onError=function(_3){
+console.error("Flash Error:",_3);
+};
+this._flashObject.onLoad=dojo.hitch(this,function(_4){
+this.flashMedia=_4;
+this.isPlaying=this.autoPlay;
+this.isStopped=!this.autoPlay;
+this.onLoad(this.flashMedia);
+this._initStatus();
+this._update();
+});
+this.inherited(arguments);
+},play:function(_5){
+this.isPlaying=true;
+this.isStopped=false;
+this.flashMedia.doPlay(this._normalizeUrl(_5));
+},pause:function(){
+this.isPlaying=false;
+this.isStopped=false;
+this.flashMedia.pause();
+},seek:function(_6){
+this.flashMedia.seek(_6);
+},volume:function(_7){
+if(_7){
+if(!this.flashMedia){
+this.initialVolume=_7;
+}
+this.flashMedia.setVolume(this._normalizeVolume(_7));
+}
+if(!this.flashMedia||!this.flashMedia.doGetVolume){
+return this.initialVolume;
+}
+return this.flashMedia.getVolume();
+},_checkBuffer:function(_8,_9){
+if(this.percentDownloaded==100){
+if(this.isBuffering){
+this.onBuffer(false);
+this.flashMedia.doPlay();
+}
+return;
+}
+if(!this.isBuffering&&_9<0.1){
+this.onBuffer(true);
+this.flashMedia.pause();
+return;
+}
+var _a=this.percentDownloaded*0.01*this.duration;
+if(!this.isBuffering&&_8+this.minBufferTime*0.001>_a){
+this.onBuffer(true);
+this.flashMedia.pause();
+}else{
+if(this.isBuffering&&_8+this.bufferTime*0.001<=_a){
+this.onBuffer(false);
+this.flashMedia.doPlay();
+}
+}
+},_update:function(){
+var _b=Math.min(this.getTime()||0,this.duration);
+var _c=this.flashMedia.getLoaded();
+this.percentDownloaded=Math.ceil(_c.bytesLoaded/_c.bytesTotal*100);
+this.onDownloaded(this.percentDownloaded);
+this.onPosition(_b);
+if(this.duration){
+this._checkBuffer(_b,_c.buffer);
+}
+setTimeout(dojo.hitch(this,"_update"),this.updateTime);
+}});
+}
Index: trunk/web/dojo/dojox/av/widget/ProgressSlider.js
===================================================================
--- trunk/web/dojo/dojox/av/widget/ProgressSlider.js	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/ProgressSlider.js	(revision 9)
@@ -0,0 +1,88 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.ProgressSlider"]){
+dojo._hasResource["dojox.av.widget.ProgressSlider"]=true;
+dojo.provide("dojox.av.widget.ProgressSlider");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.av.widget.ProgressSlider",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/ProgressSlider.html","<div class=\"Progress\" dojoAttachEvent=\"mousedown:startDrag\">\n    \n    <div class=\"ProgressLoaded\" dojoAttachPoint=\"progressLoaded\"></div>\n    <div class=\"ProgressPosition\" dojoAttachPoint=\"progressPosition\"></div>\n\t<div class=\"ProgressHandle\" dojoAttachPoint=\"handle\" dojoAttachEvent=\"mouseover:handleOver, mouseout:handleOut\"></div>\n</div>\n"),postCreate:function(){
+this.seeking=false;
+this.handleWidth=dojo.marginBox(this.handle).w;
+var _1=dojo.coords(this.domNode);
+this.finalWidth=_1.w;
+this.width=_1.w-this.handleWidth;
+this.x=_1.x;
+dojo.setSelectable(this.domNode,false);
+dojo.setSelectable(this.handle,false);
+},setMedia:function(_2,_3){
+this.playerWidget=_3;
+this.media=_2;
+dojo.connect(this.media,"onMetaData",this,function(_4){
+if(_4&&_4.duration){
+this.duration=_4.duration;
+}
+});
+dojo.connect(this.media,"onEnd",this,function(){
+dojo.disconnect(this.posCon);
+this.setHandle(this.duration);
+});
+dojo.connect(this.media,"onStart",this,function(){
+this.posCon=dojo.connect(this.media,"onPosition",this,"setHandle");
+});
+dojo.connect(this.media,"onDownloaded",this,function(_5){
+this.setLoadedPosition(_5*0.01);
+this.width=this.finalWidth*0.01*_5;
+});
+},onDrag:function(_6){
+var x=_6.clientX-this.x;
+if(x<0){
+x=0;
+}
+if(x>this.width-this.handleWidth){
+x=this.width-this.handleWidth;
+}
+var p=x/this.finalWidth;
+this.media.seek(this.duration*p);
+dojo.style(this.handle,"marginLeft",x+"px");
+dojo.style(this.progressPosition,"width",x+"px");
+},startDrag:function(){
+dojo.setSelectable(this.playerWidget.domNode,false);
+this.seeking=true;
+this.cmove=dojo.connect(dojo.doc,"mousemove",this,"onDrag");
+this.cup=dojo.connect(dojo.doc,"mouseup",this,"endDrag");
+},endDrag:function(){
+dojo.setSelectable(this.playerWidget.domNode,true);
+this.seeking=false;
+if(this.cmove){
+dojo.disconnect(this.cmove);
+}
+if(this.cup){
+dojo.disconnect(this.cup);
+}
+this.handleOut();
+},setHandle:function(_7){
+if(!this.seeking){
+var w=this.width-this.handleWidth;
+var p=_7/this.duration;
+var x=p*w;
+dojo.style(this.handle,"marginLeft",x+"px");
+dojo.style(this.progressPosition,"width",x+"px");
+}
+},setLoadedPosition:function(_8){
+dojo.style(this.progressLoaded,"width",(this.finalWidth*_8)+"px");
+},handleOver:function(){
+dojo.addClass(this.handle,"over");
+},handleOut:function(){
+if(!this.seeking){
+dojo.removeClass(this.handle,"over");
+}
+},onResize:function(_9){
+var _a=dojo.coords(this.domNode);
+this.finalWidth=_a.w;
+}});
+}
Index: trunk/web/dojo/dojox/av/widget/Player.js
===================================================================
--- trunk/web/dojo/dojox/av/widget/Player.js	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/Player.js	(revision 9)
@@ -0,0 +1,78 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.Player"]){
+dojo._hasResource["dojox.av.widget.Player"]=true;
+dojo.provide("dojox.av.widget.Player");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.av.widget.Player",[dijit._Widget,dijit._Templated],{playerWidth:"480px",widgetsInTemplate:true,templateString:dojo.cache("dojox.av.widget","resources/Player.html","<div class=\"playerContainer\">\n\t<div class=\"PlayerScreen\" dojoAttachPoint=\"playerScreen\"></div>\n\t<table class=\"Controls\">\n\t\t<tr>\n\t\t\t<td colspan=\"2\" dojoAttachPoint=\"progressContainer\"></td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td class=\"PlayContainer\" dojoAttachPoint=\"playContainer\"></td>\n\t\t\t<td class=\"ControlsRight\">\n\t\t\t<table class=\"StatusContainer\">\n\t\t\t\t<tr dojoAttachPoint=\"statusContainer\">\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td colspan=\"3\" class=\"ControlsBottom\" dojoAttachPoint=\"controlsBottom\"></td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</td>\n\t\t</tr>\n\t</table>\n</div>\n"),_fillContent:function(){
+if(!this.items&&this.srcNodeRef){
+this.items=[];
+var _1=dojo.query("*",this.srcNodeRef);
+dojo.forEach(_1,function(n){
+this.items.push(n);
+},this);
+}
+},postCreate:function(){
+dojo.style(this.domNode,"width",this.playerWidth+(dojo.isString(this.playerWidth)?"":"px"));
+if(dojo.isString(this.playerWidth)&&this.playerWidth.indexOf("%")){
+dojo.connect(window,"resize",this,"onResize");
+}
+this.children=[];
+var _2;
+dojo.forEach(this.items,function(n,i){
+n.id=dijit.getUniqueId("player_control");
+switch(dojo.attr(n,"controlType")){
+case "play":
+this.playContainer.appendChild(n);
+break;
+case "volume":
+this.controlsBottom.appendChild(n);
+break;
+case "status":
+this.statusContainer.appendChild(n);
+break;
+case "progress":
+case "slider":
+this.progressContainer.appendChild(n);
+break;
+case "video":
+this.mediaNode=n;
+this.playerScreen.appendChild(n);
+break;
+default:
+}
+this.items[i]=n.id;
+},this);
+},startup:function(){
+this.media=dijit.byId(this.mediaNode.id);
+if(!dojo.isAIR){
+dojo.style(this.media.domNode,"width","100%");
+dojo.style(this.media.domNode,"height","100%");
+}
+dojo.forEach(this.items,function(id){
+if(id!==this.mediaNode.id){
+var _3=dijit.byId(id);
+this.children.push(_3);
+if(_3){
+_3.setMedia(this.media,this);
+}
+}
+},this);
+},onResize:function(_4){
+var _5=dojo.marginBox(this.domNode);
+if(this.media&&this.media.onResize!==null){
+this.media.onResize(_5);
+}
+dojo.forEach(this.children,function(_6){
+if(_6.onResize){
+_6.onResize(_5);
+}
+});
+}});
+}
Index: trunk/web/dojo/dojox/av/widget/resources/Player.html
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/Player.html	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/Player.html	(revision 9)
@@ -0,0 +1,20 @@
+<div class="playerContainer">
+	<div class="PlayerScreen" dojoAttachPoint="playerScreen"></div>
+	<table class="Controls">
+		<tr>
+			<td colspan="2" dojoAttachPoint="progressContainer"></td>
+		</tr>
+		<tr>
+			<td class="PlayContainer" dojoAttachPoint="playContainer"></td>
+			<td class="ControlsRight">
+			<table class="StatusContainer">
+				<tr dojoAttachPoint="statusContainer">
+				</tr>
+				<tr>
+					<td colspan="3" class="ControlsBottom" dojoAttachPoint="controlsBottom"></td>
+				</tr>
+			</table>
+		</td>
+		</tr>
+	</table>
+</div>
Index: trunk/web/dojo/dojox/av/widget/resources/Player.css
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/Player.css	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/Player.css	(revision 9)
@@ -0,0 +1,191 @@
+.playerContainer{
+	width:480px;
+	background:#76C8C4;
+	text-align:center;
+}
+.PlayerScreen{
+	background:#00FFFF;
+	width:320px;
+	height:240px;
+	margin-left:auto;
+	margin-right:auto;
+}
+.Controls{
+	height:85px;
+	background:#333333;
+	text-align:left;
+	width:100%;
+}
+.ControlsRight{
+	vertical-align:top;
+}
+.ControlsBottom{
+	vertical-align:bottom;
+}
+.StatusContainer{
+	width:100%;
+	height:100%;
+}
+.PlayContainer{
+	width:60px;
+	height:60px;
+}
+.Progress{
+	height:10px;
+}
+.Time, .Duration, .Status{
+	height:16px;
+	margin-top:0px;
+	color:#F5FFC8;
+	width:100%;
+}
+.Time{
+	padding-left:2px;
+} 
+.Duration{
+	padding-right:2px;
+	text-align:right;
+}
+.StatusContainer{
+	padding:0;
+	border-collapse:collapse;
+}
+.Status{
+	height:20px;
+	background:#ff0000;
+	table-layout:fixed;
+}
+.Status.statusError .statusTitle, .Status.statusError .statusInfo{
+	color:#FF0000;
+}
+.Status .statusTitle{
+	font-weight:bold;
+	color:#A5B3E9;
+}
+.Status .statusInfo{
+	font-weight:normal;
+	color:#3770D6;
+}
+.Time, .Duration, .Status{
+	font-family:Verdana, Arial, Helvetica, sans-serif;
+	font-size:9px;
+	background:#000000;
+}
+.Time, .Duration{
+	width:60px;
+}
+.Volume{
+	width:30px;
+	height:30px;
+	float:right;
+	margin-right:2px;
+	margin-top:auto;
+	background-image:url(images/player_sprite.png);
+	background-repeat:no-repeat;
+	background-position:-1px -62px;
+	cursor:pointer;
+}
+.Volume:hover{
+	background-position:-33px -62px;
+}
+.PlayPauseToggle{
+	width:60px;
+	height:60px;
+	background-image:url(images/player_sprite.png);
+	background-repeat:no-repeat;
+	background-position:-1px -1px;
+	cursor:pointer;
+	vertical-align:middle;
+	line-height:60px;
+}
+.PlayPauseToggle:hover{
+	background-position:-63px -1px;
+	cursor:pointer;
+}
+.icon{
+	background-image:url(images/dojoPlayerIcons.png);
+	background-repeat:no-repeat;
+	width:22px;
+	height:22px;
+}
+.PlayPauseToggle .icon{
+	position:relative;
+	top:19px;
+	left:19px;
+	background-position:-1px -1px;
+}
+.PlayPauseToggle.Play .icon{
+	background-position:-1px -1px;
+}
+.PlayPauseToggle.Pause .icon{
+	background-position:-24px -1px;
+}
+.Progress{
+	
+}
+.Progress, .ProgressLoaded, .ProgressPosition, .ProgressHandle{
+	height:10px;
+}
+.ProgressLoaded, .ProgressPosition, .ProgressHandle{
+	position:absolute;
+}
+.ProgressLoaded{
+background:url(images/progressLoadedBk.png) repeat-x;
+}
+.ProgressHandle{
+	background-image:url(images/sliderHandleSprite.png);
+	background-position:0px 0px;
+	width:15px;
+	margin-left:0px;
+	cursor:pointer;
+}
+.ProgressHandle.over{
+	background-position:-15px 0px;
+}
+.ProgressPosition{
+	background:url(images/progressPositionBk.png) repeat-x;
+	width:0px;
+}
+.VolumeSlider{
+	position:absolute;
+}
+.VolumeSliderBack{
+	width:128px;
+	height:30px;
+	background-image:url(images/player_sprite.png);
+	background-repeat:no-repeat;
+	background-position:-1px -95px;
+}
+.VolumeSliderHandle{
+	position:absolute;
+	width:12px;
+	height:14px;
+	background-image:url(images/player_sprite.png);
+	background-repeat:no-repeat;
+	background-position:-1px -140px;
+	cursor:pointer;
+}
+.VolumeSliderHandle.over{
+	background-position:-15px -138px;
+	cursor:pointer;
+}
+.Volume .icon{	
+	background-position:-60px -43px;
+	width:18px;
+	height:16px;
+	position:relative;
+	top:7px;
+	left:7px;
+}
+.Volume.mute .icon{	
+	background-position:-1px -43px;
+}
+.Volume.low .icon{	
+	background-position:-20px -43px;
+}
+.Volume.med .icon{	
+	background-position:-40px -43px;
+}
+.Volume.high .icon{	
+	background-position:-60px -43px;
+}
Index: trunk/web/dojo/dojox/av/widget/resources/PlayButton.html
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/PlayButton.html	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/PlayButton.html	(revision 9)
@@ -0,0 +1,3 @@
+<div class="PlayPauseToggle Pause" dojoAttachEvent="click:onClick">
+    <div class="icon"></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/av/widget/resources/images/player_sprite.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/player_sprite.png
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/player_sprite.png	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/player_sprite.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/player_sprite.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/images/dojoPlayerIcons.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/dojoPlayerIcons.png
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/dojoPlayerIcons.png	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/dojoPlayerIcons.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/dojoPlayerIcons.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/images/playerIcons
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/playerIcons
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/playerIcons	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/playerIcons	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/playerIcons
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleSprite.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleSprite.png
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleSprite.png	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleSprite.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleSprite.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/images/progressPositionBk.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/progressPositionBk.png
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/progressPositionBk.png	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/progressPositionBk.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/progressPositionBk.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/images/progressLoadedBk.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/progressLoadedBk.png
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/progressLoadedBk.png	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/progressLoadedBk.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/progressLoadedBk.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleNorm.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleNorm.png
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleNorm.png	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleNorm.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleNorm.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleOver.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleOver.png
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleOver.png	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleOver.png	(revision 9)

Property changes on: trunk/web/dojo/dojox/av/widget/resources/images/sliderHandleOver.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: trunk/web/dojo/dojox/av/widget/resources/Status.html
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/Status.html	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/Status.html	(revision 9)
@@ -0,0 +1,7 @@
+<table class="Status">
+    <tr>
+        <td class="Time"><span dojoAttachPoint="timeNode">0.00</span></td>
+        <td class="Status"><div dojoAttachPoint="titleNode">Loading...</div></td>
+        <td class="Duration"><span dojoAttachPoint="durNode">0.00</span></td>
+    </tr>
+</table>
Index: trunk/web/dojo/dojox/av/widget/resources/VolumeButton.html
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/VolumeButton.html	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/VolumeButton.html	(revision 9)
@@ -0,0 +1,7 @@
+<div class="Volume" dojoAttachEvent="mousedown:onShowVolume">
+	<div class="VolumeSlider" dojoAttachPoint="volumeSlider">
+    	<div class="VolumeSliderBack" dojoAttachPoint="volumeSliderBack"></div>
+    	<div class="VolumeSliderHandle" dojoAttachPoint="handle" dojoAttachEvent="mousedown:startDrag, mouseup:endDrag, mouseover:handleOver, mouseout:handleOut"></div>	
+    </div>
+    <div class="icon"></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/av/widget/resources/ProgressSlider.html
===================================================================
--- trunk/web/dojo/dojox/av/widget/resources/ProgressSlider.html	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/resources/ProgressSlider.html	(revision 9)
@@ -0,0 +1,6 @@
+<div class="Progress" dojoAttachEvent="mousedown:startDrag">
+    
+    <div class="ProgressLoaded" dojoAttachPoint="progressLoaded"></div>
+    <div class="ProgressPosition" dojoAttachPoint="progressPosition"></div>
+	<div class="ProgressHandle" dojoAttachPoint="handle" dojoAttachEvent="mouseover:handleOver, mouseout:handleOut"></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/av/widget/PlayButton.js
===================================================================
--- trunk/web/dojo/dojox/av/widget/PlayButton.js	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/PlayButton.js	(revision 9)
@@ -0,0 +1,45 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.PlayButton"]){
+dojo._hasResource["dojox.av.widget.PlayButton"]=true;
+dojo.provide("dojox.av.widget.PlayButton");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.av.widget.PlayButton",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/PlayButton.html","<div class=\"PlayPauseToggle Pause\" dojoAttachEvent=\"click:onClick\">\n    <div class=\"icon\"></div>\n</div>\n"),postCreate:function(){
+this.showPlay();
+},setMedia:function(_1){
+this.media=_1;
+dojo.connect(this.media,"onEnd",this,"showPlay");
+dojo.connect(this.media,"onStart",this,"showPause");
+},onClick:function(){
+if(this._mode=="play"){
+this.onPlay();
+}else{
+this.onPause();
+}
+},onPlay:function(){
+if(this.media){
+this.media.play();
+}
+this.showPause();
+},onPause:function(){
+if(this.media){
+this.media.pause();
+}
+this.showPlay();
+},showPlay:function(){
+this._mode="play";
+dojo.removeClass(this.domNode,"Pause");
+dojo.addClass(this.domNode,"Play");
+},showPause:function(){
+this._mode="pause";
+dojo.addClass(this.domNode,"Pause");
+dojo.removeClass(this.domNode,"Play");
+}});
+}
Index: trunk/web/dojo/dojox/av/widget/Status.js
===================================================================
--- trunk/web/dojo/dojox/av/widget/Status.js	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/Status.js	(revision 9)
@@ -0,0 +1,91 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.Status"]){
+dojo._hasResource["dojox.av.widget.Status"]=true;
+dojo.provide("dojox.av.widget.Status");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.declare("dojox.av.widget.Status",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/Status.html","<table class=\"Status\">\n    <tr>\n        <td class=\"Time\"><span dojoAttachPoint=\"timeNode\">0.00</span></td>\n        <td class=\"Status\"><div dojoAttachPoint=\"titleNode\">Loading...</div></td>\n        <td class=\"Duration\"><span dojoAttachPoint=\"durNode\">0.00</span></td>\n    </tr>\n</table>\n"),postCreate:function(){
+this.titleNode=dojo.query(".Status",this.domNode);
+this.durNode=dojo.query(".Duration",this.domNode);
+this.timeNode=dojo.query(".Time",this.domNode);
+},setMedia:function(_1){
+this.media=_1;
+dojo.connect(this.media,"onMetaData",this,function(_2){
+this.duration=_2.duration;
+this.durNode.innerHTML=this.toSeconds(this.duration);
+});
+dojo.connect(this.media,"onPosition",this,function(_3){
+});
+var _4=["onMetaData","onPosition","onStart","onBuffer","onPlay","onPause","onStop","onEnd","onError","onLoad"];
+dojo.forEach(_4,function(c){
+dojo.connect(this.media,c,this,c);
+},this);
+},onMetaData:function(_5){
+this.duration=_5.duration;
+this.durNode.innerHTML=this.toSeconds(this.duration);
+if(this.media.title){
+this.title=this.media.title;
+}else{
+var a=this.media.mediaUrl.split("/");
+var b=a[a.length-1].split(".")[0];
+this.title=b;
+}
+},onBuffer:function(_6){
+this.isBuffering=_6;
+console.warn("status onBuffer",this.isBuffering);
+if(this.isBuffering){
+this.setStatus("buffering...");
+}else{
+this.setStatus("Playing");
+}
+},onPosition:function(_7){
+},onStart:function(){
+this.setStatus("Starting");
+},onPlay:function(){
+this.setStatus("Playing");
+},onPause:function(){
+this.setStatus("Paused");
+},onStop:function(){
+this.setStatus("Stopped");
+},onEnd:function(){
+this.setStatus("Stopped");
+},onError:function(_8){
+var _9=_8.info.code;
+if(_9=="NetStream.Play.StreamNotFound"){
+_9="Stream Not Found";
+}
+this.setStatus("ERROR: "+_9,true);
+},onLoad:function(){
+this.setStatus("Loading...");
+},setStatus:function(_a,_b){
+if(_b){
+dojo.addClass(this.titleNode,"statusError");
+}else{
+dojo.removeClass(this.titleNode,"statusError");
+if(this.isBuffering){
+_a="buffering...";
+}
+}
+this.titleNode.innerHTML="<span class=\"statusTitle\">"+this.title+"</span> <span class=\"statusInfo\">"+_a+"</span>";
+},toSeconds:function(_c){
+var ts=_c.toString();
+if(ts.indexOf(".")<0){
+ts+=".00";
+}else{
+if(ts.length-ts.indexOf(".")==2){
+ts+="0";
+}else{
+if(ts.length-ts.indexOf(".")>2){
+ts=ts.substring(0,ts.indexOf(".")+3);
+}
+}
+}
+return ts;
+}});
+}
Index: trunk/web/dojo/dojox/av/widget/VolumeButton.js
===================================================================
--- trunk/web/dojo/dojox/av/widget/VolumeButton.js	(revision 0)
+++ trunk/web/dojo/dojox/av/widget/VolumeButton.js	(revision 9)
@@ -0,0 +1,118 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.av.widget.VolumeButton"]){
+dojo._hasResource["dojox.av.widget.VolumeButton"]=true;
+dojo.provide("dojox.av.widget.VolumeButton");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit.form.Button");
+dojo.declare("dojox.av.widget.VolumeButton",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dojox.av.widget","resources/VolumeButton.html","<div class=\"Volume\" dojoAttachEvent=\"mousedown:onShowVolume\">\n\t<div class=\"VolumeSlider\" dojoAttachPoint=\"volumeSlider\">\n    \t<div class=\"VolumeSliderBack\" dojoAttachPoint=\"volumeSliderBack\"></div>\n    \t<div class=\"VolumeSliderHandle\" dojoAttachPoint=\"handle\" dojoAttachEvent=\"mousedown:startDrag, mouseup:endDrag, mouseover:handleOver, mouseout:handleOut\"></div>\t\n    </div>\n    <div class=\"icon\"></div>\n</div>\n"),postCreate:function(){
+this.handleWidth=dojo.marginBox(this.handle).w;
+this.width=dojo.marginBox(this.volumeSlider).w;
+this.slotWidth=100;
+dojo.setSelectable(this.handle,false);
+this.volumeSlider=this.domNode.removeChild(this.volumeSlider);
+},setMedia:function(_1){
+this.media=_1;
+this.updateIcon();
+},updateIcon:function(_2){
+_2=(_2===undefined)?this.media.volume():_2;
+if(_2===0){
+dojo.attr(this.domNode,"class","Volume mute");
+}else{
+if(_2<0.334){
+dojo.attr(this.domNode,"class","Volume low");
+}else{
+if(_2<0.667){
+dojo.attr(this.domNode,"class","Volume med");
+}else{
+dojo.attr(this.domNode,"class","Volume high");
+}
+}
+}
+},onShowVolume:function(_3){
+if(this.showing==undefined){
+dojo.body().appendChild(this.volumeSlider);
+this.showing=false;
+}
+if(!this.showing){
+var _4=2;
+var _5=7;
+var _6=this.media.volume();
+var _7=this._getVolumeDim();
+var _8=this._getHandleDim();
+this.x=_7.x-this.width;
+dojo.style(this.volumeSlider,"display","");
+dojo.style(this.volumeSlider,"top",_7.y+"px");
+dojo.style(this.volumeSlider,"left",(this.x)+"px");
+var x=(this.slotWidth*_6);
+dojo.style(this.handle,"top",(_4+(_8.w/2))+"px");
+dojo.style(this.handle,"left",(x+_5+(_8.h/2))+"px");
+this.showing=true;
+this.clickOff=dojo.connect(dojo.doc,"onmousedown",this,"onDocClick");
+}else{
+this.onHideVolume();
+}
+},onDocClick:function(_9){
+if(!dojo.isDescendant(_9.target,this.domNode)&&!dojo.isDescendant(_9.target,this.volumeSlider)){
+this.onHideVolume();
+}
+},onHideVolume:function(){
+this.endDrag();
+dojo.style(this.volumeSlider,"display","none");
+this.showing=false;
+},onDrag:function(_a){
+var _b=this.handleWidth/2;
+var _c=_b+this.slotWidth;
+var x=_a.clientX-this.x;
+if(x<_b){
+x=_b;
+}
+if(x>_c){
+x=_c;
+}
+dojo.style(this.handle,"left",(x)+"px");
+var p=(x-_b)/(_c-_b);
+this.media.volume(p);
+this.updateIcon(p);
+},startDrag:function(){
+this.isDragging=true;
+this.cmove=dojo.connect(dojo.doc,"mousemove",this,"onDrag");
+this.cup=dojo.connect(dojo.doc,"mouseup",this,"endDrag");
+},endDrag:function(){
+this.isDragging=false;
+if(this.cmove){
+dojo.disconnect(this.cmove);
+}
+if(this.cup){
+dojo.disconnect(this.cup);
+}
+this.handleOut();
+},handleOver:function(){
+dojo.addClass(this.handle,"over");
+},handleOut:function(){
+if(!this.isDragging){
+dojo.removeClass(this.handle,"over");
+}
+},_getVolumeDim:function(){
+if(this._domCoords){
+return this._domCoords;
+}
+this._domCoords=dojo.coords(this.domNode);
+return this._domCoords;
+},_getHandleDim:function(){
+if(this._handleCoords){
+return this._handleCoords;
+}
+this._handleCoords=dojo.marginBox(this.handle);
+return this._handleCoords;
+},onResize:function(_d){
+this.onHideVolume();
+this._domCoords=null;
+}});
+}
Index: trunk/web/dojo/dojox/io/scriptFrame.js
===================================================================
--- trunk/web/dojo/dojox/io/scriptFrame.js	(revision 0)
+++ trunk/web/dojo/dojox/io/scriptFrame.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.scriptFrame"]){
+dojo._hasResource["dojox.io.scriptFrame"]=true;
+dojo.provide("dojox.io.scriptFrame");
+dojo.require("dojo.io.script");
+dojo.require("dojo.io.iframe");
+(function(){
+var _1=dojo.io.script;
+dojox.io.scriptFrame={_waiters:{},_loadedIds:{},_getWaiters:function(_2){
+return this._waiters[_2]||(this._waiters[_2]=[]);
+},_fixAttachUrl:function(_3){
+},_loaded:function(_4){
+var _5=this._getWaiters(_4);
+this._loadedIds[_4]=true;
+this._waiters[_4]=null;
+for(var i=0;i<_5.length;i++){
+var _6=_5[i];
+_6.frameDoc=dojo.io.iframe.doc(dojo.byId(_4));
+_1.attach(_6.id,_6.url,_6.frameDoc);
+}
+}};
+var _7=_1._canAttach;
+var _8=dojox.io.scriptFrame;
+_1._canAttach=function(_9){
+var _a=_9.args.frameDoc;
+if(_a&&dojo.isString(_a)){
+var _b=dojo.byId(_a);
+var _c=_8._getWaiters(_a);
+if(!_b){
+_c.push(_9);
+dojo.io.iframe.create(_a,dojox._scopeName+".io.scriptFrame._loaded('"+_a+"');");
+}else{
+if(_8._loadedIds[_a]){
+_9.frameDoc=dojo.io.iframe.doc(_b);
+this.attach(_9.id,_9.url,_9.frameDoc);
+}else{
+_c.push(_9);
+}
+}
+return false;
+}else{
+return _7.apply(this,arguments);
+}
+};
+})();
+}
Index: trunk/web/dojo/dojox/io/OAuth.js
===================================================================
--- trunk/web/dojo/dojox/io/OAuth.js	(revision 0)
+++ trunk/web/dojo/dojox/io/OAuth.js	(revision 9)
@@ -0,0 +1,174 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.OAuth"]){
+dojo._hasResource["dojox.io.OAuth"]=true;
+dojo.provide("dojox.io.OAuth");
+dojo.require("dojox.encoding.digests.SHA1");
+dojox.io.OAuth=new (function(){
+var _1=this.encode=function(s){
+if(!s){
+return "";
+}
+return encodeURIComponent(s).replace(/\!/g,"%21").replace(/\*/g,"%2A").replace(/\'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29");
+};
+var _2=this.decode=function(_3){
+var a=[],_4=_3.split("&");
+for(var i=0,l=_4.length;i<l;i++){
+var _5=_4[i];
+if(_4[i]==""){
+continue;
+}
+if(_4[i].indexOf("=")>-1){
+var _6=_4[i].split("=");
+a.push([decodeURIComponent(_6[0]),decodeURIComponent(_6[1])]);
+}else{
+a.push([decodeURIComponent(_4[i]),null]);
+}
+}
+return a;
+};
+function _7(_8){
+var _9=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],_a=/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,_b=_a.exec(_8),_c={},i=_9.length;
+while(i--){
+_c[_9[i]]=_b[i]||"";
+}
+var p=_c.protocol.toLowerCase(),a=_c.authority.toLowerCase(),b=(p=="http"&&_c.port==80)||(p=="https"&&_c.port==443);
+if(b){
+if(a.lastIndexOf(":")>-1){
+a=a.substring(0,a.lastIndexOf(":"));
+}
+}
+var _d=_c.path||"/";
+_c.url=p+"://"+a+_d;
+return _c;
+};
+var _e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
+function _f(_10){
+var s="",tl=_e.length;
+for(var i=0;i<_10;i++){
+s+=_e.charAt(Math.floor(Math.random()*tl));
+}
+return s;
+};
+function _11(){
+return Math.floor(new Date().valueOf()/1000)-2;
+};
+function _12(_13,key,_14){
+if(_14&&_14!="PLAINTEXT"&&_14!="HMAC-SHA1"){
+throw new Error("dojox.io.OAuth: the only supported signature encodings are PLAINTEXT and HMAC-SHA1.");
+}
+if(_14=="PLAINTEXT"){
+return key;
+}else{
+return dojox.encoding.digests.SHA1._hmac(_13,key);
+}
+};
+function key(_15){
+return _1(_15.consumer.secret)+"&"+(_15.token&&_15.token.secret?_1(_15.token.secret):"");
+};
+function _16(_17,oaa){
+var o={oauth_consumer_key:oaa.consumer.key,oauth_nonce:_f(16),oauth_signature_method:oaa.sig_method||"HMAC-SHA1",oauth_timestamp:_11(),oauth_version:"1.0"};
+if(oaa.token){
+o.oauth_token=oaa.token.key;
+}
+_17.content=dojo.mixin(_17.content||{},o);
+};
+function _18(_19){
+var _1a=[{}],_1b;
+if(_19.form){
+if(!_19.content){
+_19.content={};
+}
+var _1c=dojo.byId(_19.form);
+var _1d=_1c.getAttributeNode("action");
+_19.url=_19.url||(_1d?_1d.value:null);
+_1b=dojo.formToObject(_1c);
+delete _19.form;
+}
+if(_1b){
+_1a.push(_1b);
+}
+if(_19.content){
+_1a.push(_19.content);
+}
+var map=_7(_19.url);
+if(map.query){
+var tmp=dojo.queryToObject(map.query);
+for(var p in tmp){
+tmp[p]=encodeURIComponent(tmp[p]);
+}
+_1a.push(tmp);
+}
+_19._url=map.url;
+var a=[];
+for(var i=0,l=_1a.length;i<l;i++){
+var _1e=_1a[i];
+for(var p in _1e){
+if(dojo.isArray(_1e[p])){
+for(var j=0,jl=_1e.length;j<jl;j++){
+a.push([p,_1e[j]]);
+}
+}else{
+a.push([p,_1e[p]]);
+}
+}
+}
+_19._parameters=a;
+return _19;
+};
+function _1f(_20,_21,oaa){
+_16(_21,oaa);
+_18(_21);
+var a=_21._parameters;
+a.sort(function(a,b){
+if(a[0]>b[0]){
+return 1;
+}
+if(a[0]<b[0]){
+return -1;
+}
+if(a[1]>b[1]){
+return 1;
+}
+if(a[1]<b[1]){
+return -1;
+}
+return 0;
+});
+var s=dojo.map(a,function(_22){
+return _1(_22[0])+"="+_1(_22[1]||"");
+}).join("&");
+var _23=_20.toUpperCase()+"&"+_1(_21._url)+"&"+_1(s);
+return _23;
+};
+function _24(_25,_26,oaa){
+var k=key(oaa),_27=_1f(_25,_26,oaa),s=_12(_27,k,oaa.sig_method||"HMAC-SHA1");
+_26.content["oauth_signature"]=s;
+return _26;
+};
+this.sign=function(_28,_29,oaa){
+return _24(_28,_29,oaa);
+};
+this.xhr=function(_2a,_2b,oaa,_2c){
+_24(_2a,_2b,oaa);
+return dojo.xhr(_2a,_2b,_2c);
+};
+this.xhrGet=function(_2d,oaa){
+return this.xhr("GET",_2d,oaa);
+};
+this.xhrPost=this.xhrRawPost=function(_2e,oaa){
+return this.xhr("POST",_2e,oaa,true);
+};
+this.xhrPut=this.xhrRawPut=function(_2f,oaa){
+return this.xhr("PUT",_2f,oaa,true);
+};
+this.xhrDelete=function(_30,oaa){
+return this.xhr("DELETE",_30,oaa);
+};
+})();
+}
Index: trunk/web/dojo/dojox/io/README
===================================================================
--- trunk/web/dojo/dojox/io/README	(revision 0)
+++ trunk/web/dojo/dojox/io/README	(revision 9)
@@ -0,0 +1,82 @@
+-------------------------------------------------------------------------------
+DojoX IO
+-------------------------------------------------------------------------------
+Version 0.4.0
+Release date: 07/04/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	Bryan Forbes (bryan AT reigndropsfall.net)
+	Kris Zyp (kris AT sitepen.com)
+	James Burke (jburke AT dojotoolkit.org)
+	Tom Trenka (ttrenka AT gmail.com)
+	
+-------------------------------------------------------------------------------
+Project description
+
+	A Collection of advanced and experimental IO modules:
+	
+	* scriptFrame.js - Uses an iframe for dojo.io.script requests. Useful in some
+	long-polling comet situations in Firefox and Opera. Those browsers execute scripts
+	in DOM order, not network-receive order, so a long-polling script will block other
+	dynamically appended scripts from running until it completes. By using an iframe
+	for the dojo.io.script requests, this issue can be avoided.
+
+	* xhrMultiPart.js - Constructs multi-part mime XHR requests. Useful when wanting
+	multi-part requests but not using a form with a file input. Note that it does not
+	allow you to send files from local disks -- a form with a file input is required
+	for that use case. xhrMultipart is not useful in that use case.
+
+	* xhrPlugins.js - An adapter registry for having multiple XHR handlers (like
+	XDomainRequest, CS-XHR, proxy, and window.name)
+
+	* windowName.js - Cross-domain transport using window.name
+	xhrWindowNamePlugin.js - window.name plugin for XHR adapter registry
+
+	* httpParse.js - HTTP message parser. Parses to an XHR like interface.
+	
+	* OAuth.js - Object to be used for signing OpenAuth requests.  Includes easy
+		wrappers for xhr.
+	
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX IO xhrMultiPart depends on Dojo Core and DojoX UUID's generateRandomUuid 
+function.
+
+xhrWindowNamePlugin depends on dojox.secure.capability for safe JSON parsing
+
+OAuth depends on dojox.encoding.digests.SHA1.
+-------------------------------------------------------------------------------
+Documentation
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/uuid.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/uuid/*
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/secure/*
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/encoding/digests/*
+
+Install into the following directory structure:
+/dojox/uuid/
+/dojox/secure/
+/dojox/encoding/digests/
+
+AND
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/io/*
+
+Install into the following directory structure:
+/dojox/io/
+
+...both of which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
+Additional Notes
+
+The information contained in this README does not pertain to DojoX XHR IFrame Proxy.  
+For that information see proxy/README.
Index: trunk/web/dojo/dojox/io/xhrMultiPart.js
===================================================================
--- trunk/web/dojo/dojox/io/xhrMultiPart.js	(revision 0)
+++ trunk/web/dojo/dojox/io/xhrMultiPart.js	(revision 9)
@@ -0,0 +1,70 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.xhrMultiPart"]){
+dojo._hasResource["dojox.io.xhrMultiPart"]=true;
+dojo.provide("dojox.io.xhrMultiPart");
+dojo.require("dojox.uuid.generateRandomUuid");
+(function(){
+function _1(_2,_3){
+if(!_2["name"]&&!_2["content"]){
+throw new Error("Each part of a multi-part request requires 'name' and 'content'.");
+}
+var _4=[];
+_4.push("--"+_3,"Content-Disposition: form-data; name=\""+_2.name+"\""+(_2["filename"]?"; filename=\""+_2.filename+"\"":""));
+if(_2["contentType"]){
+var ct="Content-Type: "+_2.contentType;
+if(_2["charset"]){
+ct+="; Charset="+_2.charset;
+}
+_4.push(ct);
+}
+if(_2["contentTransferEncoding"]){
+_4.push("Content-Transfer-Encoding: "+_2.contentTransferEncoding);
+}
+_4.push("",_2.content);
+return _4;
+};
+function _5(_6,_7){
+var o=dojo.formToObject(_6),_8=[];
+for(var p in o){
+if(dojo.isArray(o[p])){
+dojo.forEach(o[p],function(_9){
+_8=_8.concat(_1({name:p,content:_9},_7));
+});
+}else{
+_8=_8.concat(_1({name:p,content:o[p]},_7));
+}
+}
+return _8;
+};
+dojox.io.xhrMultiPart=function(_a){
+if(!_a["file"]&&!_a["content"]&&!_a["form"]){
+throw new Error("content, file or form must be provided to dojox.io.xhrMultiPart's arguments");
+}
+var _b=dojox.uuid.generateRandomUuid(),_c=[],_d="";
+if(_a["file"]||_a["content"]){
+var v=_a["file"]||_a["content"];
+dojo.forEach((dojo.isArray(v)?v:[v]),function(_e){
+_c=_c.concat(_1(_e,_b));
+});
+}else{
+if(_a["form"]){
+if(dojo.query("input[type=file]",_a["form"]).length){
+throw new Error("dojox.io.xhrMultiPart cannot post files that are values of an INPUT TYPE=FILE.  Use dojo.io.iframe.send() instead.");
+}
+_c=_5(_a["form"],_b);
+}
+}
+if(_c.length){
+_c.push("--"+_b+"--","");
+_d=_c.join("\r\n");
+}
+return dojo.rawXhrPost(dojo.mixin(_a,{contentType:"multipart/form-data; boundary="+_b,postData:_d}));
+};
+})();
+}
Index: trunk/web/dojo/dojox/io/xhrPlugins.js
===================================================================
--- trunk/web/dojo/dojox/io/xhrPlugins.js	(revision 0)
+++ trunk/web/dojo/dojox/io/xhrPlugins.js	(revision 9)
@@ -0,0 +1,116 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.xhrPlugins"]){
+dojo._hasResource["dojox.io.xhrPlugins"]=true;
+dojo.provide("dojox.io.xhrPlugins");
+dojo.require("dojo.AdapterRegistry");
+dojo.require("dojo._base.xhr");
+(function(){
+var _1;
+var _2;
+function _3(){
+return _2=dojox.io.xhrPlugins.plainXhr=_2||dojo._defaultXhr||dojo.xhr;
+};
+dojox.io.xhrPlugins.register=function(){
+var _4=_3();
+if(!_1){
+_1=new dojo.AdapterRegistry();
+dojo[dojo._defaultXhr?"_defaultXhr":"xhr"]=function(_5,_6,_7){
+return _1.match.apply(_1,arguments);
+};
+_1.register("xhr",function(_8,_9){
+if(!_9.url.match(/^\w*:\/\//)){
+return true;
+}
+var _a=window.location.href.match(/^.*?\/\/.*?\//)[0];
+return _9.url.substring(0,_a.length)==_a;
+},_4);
+}
+return _1.register.apply(_1,arguments);
+};
+dojox.io.xhrPlugins.addProxy=function(_b){
+var _c=_3();
+dojox.io.xhrPlugins.register("proxy",function(_d,_e){
+return true;
+},function(_f,_10,_11){
+_10.url=_b+encodeURIComponent(_10.url);
+return _c.call(dojo,_f,_10,_11);
+});
+};
+var _12;
+dojox.io.xhrPlugins.addCrossSiteXhr=function(url,_13){
+var _14=_3();
+if(_12===undefined&&window.XMLHttpRequest){
+try{
+var xhr=new XMLHttpRequest();
+xhr.open("GET","http://testing-cross-domain-capability.com",true);
+_12=true;
+dojo.config.noRequestedWithHeaders=true;
+}
+catch(e){
+_12=false;
+}
+}
+dojox.io.xhrPlugins.register("cs-xhr",function(_15,_16){
+return (_12||(window.XDomainRequest&&_16.sync!==true&&(_15=="GET"||_15=="POST"||_13)))&&(_16.url.substring(0,url.length)==url);
+},_12?_14:function(){
+var _17=dojo._xhrObj;
+dojo._xhrObj=function(){
+var xdr=new XDomainRequest();
+xdr.readyState=1;
+xdr.setRequestHeader=function(){
+};
+xdr.getResponseHeader=function(_18){
+return _18=="Content-Type"?xdr.contentType:null;
+};
+function _19(_1a,_1b){
+return function(){
+xdr.readyState=_1b;
+xdr.status=_1a;
+};
+};
+xdr.onload=_19(200,4);
+xdr.onprogress=_19(200,3);
+xdr.onerror=_19(404,4);
+return xdr;
+};
+var dfd=(_13?_13(_3()):_3()).apply(dojo,arguments);
+dojo._xhrObj=_17;
+return dfd;
+});
+};
+dojox.io.xhrPlugins.fullHttpAdapter=function(_1c,_1d){
+return function(_1e,_1f,_20){
+var _21={};
+var _22={};
+if(_1e!="GET"){
+_22["http-method"]=_1e;
+if(_1f.putData&&_1d){
+_21["http-content"]=_1f.putData;
+delete _1f.putData;
+_20=false;
+}
+if(_1f.postData&&_1d){
+_21["http-content"]=_1f.postData;
+delete _1f.postData;
+_20=false;
+}
+_1e="POST";
+}
+for(var i in _1f.headers){
+var _23=i.match(/^X-/)?i.substring(2).replace(/-/g,"_").toLowerCase():("http-"+i);
+_22[_23]=_1f.headers[i];
+}
+_1f.query=dojo.objectToQuery(_22);
+dojo._ioAddQueryToUrl(_1f);
+_1f.content=dojo.mixin(_1f.content||{},_21);
+return _1c.call(dojo,_1e,_1f,_20);
+};
+};
+})();
+}
Index: trunk/web/dojo/dojox/io/xhrScriptPlugin.js
===================================================================
--- trunk/web/dojo/dojox/io/xhrScriptPlugin.js	(revision 0)
+++ trunk/web/dojo/dojox/io/xhrScriptPlugin.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.xhrScriptPlugin"]){
+dojo._hasResource["dojox.io.xhrScriptPlugin"]=true;
+dojo.provide("dojox.io.xhrScriptPlugin");
+dojo.require("dojox.io.xhrPlugins");
+dojo.require("dojo.io.script");
+dojo.require("dojox.io.scriptFrame");
+dojox.io.xhrScriptPlugin=function(_1,_2,_3){
+dojox.io.xhrPlugins.register("script",function(_4,_5){
+return _5.sync!==true&&(_4=="GET"||_3)&&(_5.url.substring(0,_1.length)==_1);
+},function(_6,_7,_8){
+var _9=function(){
+_7.callbackParamName=_2;
+if(dojo.body()){
+_7.frameDoc="frame"+Math.random();
+}
+return dojo.io.script.get(_7);
+};
+return (_3?_3(_9,true):_9)(_6,_7,_8);
+});
+};
+}
Index: trunk/web/dojo/dojox/io/proxy/xip_client.html
===================================================================
--- trunk/web/dojo/dojox/io/proxy/xip_client.html	(revision 0)
+++ trunk/web/dojo/dojox/io/proxy/xip_client.html	(revision 9)
@@ -0,0 +1,102 @@
+<!--
+	/*
+		Copyright (c) 2004-2010, The Dojo Foundation
+		All Rights Reserved.
+	
+		Licensed under the Academic Free License version 2.1 or above OR the
+		modified BSD license. For more information on Dojo licensing, see:
+	
+			http://dojotoolkit.org/community/licensing.shtml
+	*/
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
+	<!-- Security protection: uncomment the start and end script tags to enable. -->
+	<!-- script type="text/javascript" -->
+	// <!--
+	
+	function pollHash(){
+		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
+		var urlParts = window.location.href.split("#");
+		if(urlParts.length == 2){
+			var newHash = urlParts[1];
+			if(newHash != xipCurrentHash){
+				try{
+					callMaster(xipStateId, newHash);
+				}catch(e){
+					//Make sure to not keep processing the error hash value.
+					xipCurrentHash = newHash;
+					throw e;
+				}
+				xipCurrentHash = newHash;
+			}
+		}
+	}
+
+	function unpackMessage(encodedMessage){
+		var parts = encodedMessage.split(":");
+		var command = parts[1];
+		encodedMessage = parts[2] || "";
+
+		var config = null;
+		if(command == "init"){
+			var configParts = encodedMessage.split("&");
+			config = {};
+			for(var i = 0; i < configParts.length; i++){
+				var nameValue = configParts[i].split("=");
+				config[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+			}
+		}
+		return {command: command, message: encodedMessage, config: config};
+	}
+
+	//************** Init **************************
+	xipCurrentHash = "";
+	
+	//Decode the init params
+	var fragId = window.location.href.split("#")[1];
+	var config = unpackMessage(fragId).config;
+
+	xipStateId = config.id;
+	xipMasterFrame = parent.parent;
+
+	//Set up an HTML5 messaging publisher if postMessage exists.
+	//As of this writing, this is only useful to get Opera 9.25+ to work.
+	if(typeof document.postMessage != "undefined"){
+		callMaster = function(stateId, message){
+			xipMasterFrame.document.postMessage(stateId + "#" + message);
+		}
+	}else{
+		var parts = config.callback.split(".");
+		xipCallbackObject = xipMasterFrame;
+		for(var i = 0; i < parts.length - 1; i++){
+			xipCallbackObject = xipCallbackObject[parts[i]];
+		}
+		xipCallback = parts[parts.length - 1];
+
+		callMaster = function(stateId, message){
+			xipCallbackObject[xipCallback](stateId + "#" + message);
+		}
+	}
+
+	//Call the master frame to let it know it is OK to start sending.
+	callMaster(xipStateId, "0:loaded");
+	
+	//Start counter to inspect hash value.
+	setInterval(pollHash, 10);
+
+	// -->
+	<!-- </script> -->
+</head>
+<body>
+	<h4>The Dojo Toolkit -- xip_client.html</h4>
+
+	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the "client" file used
+	internally by dojox.io.proxy.xip.</p>
+</body>
+</html>
Index: trunk/web/dojo/dojox/io/proxy/xip_server.html
===================================================================
--- trunk/web/dojo/dojox/io/proxy/xip_server.html	(revision 0)
+++ trunk/web/dojo/dojox/io/proxy/xip_server.html	(revision 9)
@@ -0,0 +1,382 @@
+<!--
+	/*
+		Copyright (c) 2004-2010, The Dojo Foundation
+		All Rights Reserved.
+	
+		Licensed under the Academic Free License version 2.1 or above OR the
+		modified BSD license. For more information on Dojo licensing, see:
+	
+			http://dojotoolkit.org/community/licensing.shtml
+	*/
+	Pieces taken from Dojo source to make this file stand-alone
+-->
+<html>
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
+	<script type="text/javascript" src="isAllowed.js"></script>
+	<!--
+	BY DEFAULT THIS FILE DOES NOT WORK SO THAT YOU DON'T ACCIDENTALLY EXPOSE
+	ALL OF YOUR XHR-ENABLED SERVICES ON YOUR SITE. 
+	
+	In order for this file to work, you need to uncomment the start and end script tags,
+	and you should define a function with the following signature:
+	
+	function isAllowedRequest(request){
+		return false;	
+	}
+	
+	Return true out of the function if you want to allow the cross-domain request.
+	
+	DON'T DEFINE THIS FUNCTION IN THIS FILE! Define it in a separate file called isAllowed.js
+	and include it in this page with a script tag that has a src attribute pointing to the file.
+	See the very first script tag in this file for an example. You do not have to place the
+	script file in the same directory as this file, just update the path above if you move it
+	somewhere else.
+	
+	Customize the isAllowedRequest function to restrict what types of requests are allowed
+	for this server. The request object has the following properties:
+	- requestHeaders: an object with the request headers that are to be added to
+	                  the XHR request.
+	- method: the HTTP method (GET, POST, etc...)
+	- uri: The URI for the request.
+	- data: The URL-encoded data for the request. For a GET request, this would
+	        be the querystring parameters. For a POST request, it wll be the
+	        body data.
+	        
+	See xip_client.html for more info on the xip fragment identifier protocol.	
+	-->
+	
+	<!-- Security protection: uncomment the script tag to enable. -->
+	<!-- script type="text/javascript" -->
+	// <!--
+		//Core XHR handling taken from Dojo IO code.
+		dojo = {};
+		dojo.hostenv = {};
+		// These are in order of decreasing likelihood; this will change in time.
+		dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
+		
+		dojo.hostenv.getXmlhttpObject = function(){
+				var http = null;
+			var last_e = null;
+			try{ http = new XMLHttpRequest(); }catch(e){}
+				if(!http){
+				for(var i=0; i<3; ++i){
+					var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
+					try{
+						http = new ActiveXObject(progid);
+					}catch(e){
+						last_e = e;
+					}
+		
+					if(http){
+						dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
+						break;
+					}
+				}
+		
+				/*if(http && !http.toString) {
+					http.toString = function() { "[object XMLHttpRequest]"; }
+				}*/
+			}
+		
+			if(!http){
+				throw "xip_server.html: XMLHTTP not available: " + last_e;
+			}
+		
+			return http;
+		}
+
+		dojo.setHeaders = function(http, headers){
+			if(headers) {
+				for(var header in headers) {
+					var headerValue = headers[header];
+					http.setRequestHeader(header, headerValue);
+				}
+			}
+		}
+
+	//MSIE has the lowest limit for URLs with fragment identifiers,
+	//at around 4K. Choosing a slightly smaller number for good measure.
+	xipUrlLimit = 4000;
+	xipIdCounter = 1;
+
+	function xipServerInit(){
+		xipStateId = "";
+		xipCurrentHash = "";
+		xipRequestMessage = "";
+		xipResponseParts = [];
+		xipPartIndex = 0;
+	}
+
+	function pollHash(){
+		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
+		var urlParts = window.location.href.split("#");
+		if(urlParts.length == 2){
+			var newHash = urlParts[1];
+			if(newHash != xipCurrentHash){
+				try{
+					messageReceived(newHash);
+				}catch(e){
+					//Make sure to not keep processing the error hash value.
+					xipCurrentHash = newHash;
+					throw e;
+				}
+				xipCurrentHash = newHash;
+			}
+		}
+	}
+
+	function messageReceived(encodedData){
+		var msg = unpackMessage(encodedData);
+		
+		switch(msg.command){
+			case "ok":
+				sendResponsePart();
+				break;
+			case "start":
+				xipRequestMessage = "";
+				xipRequestMessage += msg.message;
+				setClientUrl("ok");
+				break;
+			case "part":
+				xipRequestMessage += msg.message;			
+				setClientUrl("ok");
+				break;
+			case "end":
+				setClientUrl("ok");
+				xipRequestMessage += msg.message;
+				sendXhr();
+				break;
+		}
+	}
+
+	function sendResponse(encodedData){
+		//Break the message into parts, if necessary.
+		xipResponseParts = [];
+		var resData = encodedData;
+		var urlLength = xipClientUrl.length;
+		var partLength = xipUrlLimit - urlLength;
+		var resIndex = 0;
+
+		while((resData.length - resIndex) + urlLength > xipUrlLimit){
+			var part = resData.substring(resIndex, resIndex + partLength);
+			//Safari will do some extra hex escaping unless we keep the original hex
+			//escaping complete.
+			var percentIndex = part.lastIndexOf("%");
+			if(percentIndex == part.length - 1 || percentIndex == part.length - 2){
+				part = part.substring(0, percentIndex);
+			}
+			xipResponseParts.push(part);
+			resIndex += part.length;
+		}
+		xipResponseParts.push(resData.substring(resIndex, resData.length));
+		
+		xipPartIndex = 0;
+		sendResponsePart();
+	}
+	
+	function sendResponsePart(){
+		if(xipPartIndex < xipResponseParts.length){
+			//Get the message part.
+			var partData = xipResponseParts[xipPartIndex];
+			
+			//Get the command.
+			var cmd = "part";
+			if(xipPartIndex + 1 == xipResponseParts.length){
+				cmd = "end";
+			}else if (xipPartIndex == 0){
+				cmd = "start";
+			}
+
+			setClientUrl(cmd, partData);
+			xipPartIndex++;
+		}else{
+			xipServerInit();
+		}
+	}
+
+	function setClientUrl(cmd, message){
+		var clientUrl = makeClientUrl(cmd, message);
+		//Safari won't let us replace across domains.
+		if(navigator.userAgent.indexOf("Safari") == -1){
+			xipClientWindow.location.replace(clientUrl);
+		}else{
+			xipClientWindow.location = clientUrl;
+		}
+	}
+
+	function makeClientUrl(cmd, message){
+		var clientUrl = xipClientUrl + "#" + (xipIdCounter++) + ":" + cmd;
+		if(message){
+			clientUrl += ":" + message;
+		}
+		return clientUrl
+	}
+
+	function xhrDone(xhr){
+		/* Need to pull off and return the following data:
+			- responseHeaders
+			- status
+			- statusText
+			- responseText
+		*/
+		var response = {};
+	
+		if(typeof(xhr.getAllResponseHeaders) != "undefined"){
+			var allHeaders = xhr.getAllResponseHeaders();
+			if(allHeaders){
+				response.responseHeaders = allHeaders;
+			}
+		}
+		
+		if(xhr.status == 0 || xhr.status){
+			response.status = xhr.status;
+		}
+		
+		if(xhr.statusText){
+			response.statusText = xhr.statusText;
+		}
+		
+		if(xhr.responseText){
+			response.responseText = xhr.responseText;
+		}
+	
+		//Build a string of the response object.
+		var result = "";
+		var isFirst = true;
+		for (var param in response){
+			if(isFirst){
+				isFirst = false;
+			}else{
+				result += "&";
+			}
+			result += param + "=" + encodeURIComponent(response[param]);
+		}
+		sendResponse(result);
+	}
+
+	function sendXhr(){
+		var request = {};
+		var nvPairs = xipRequestMessage.split("&");
+		var i = 0;
+		var nameValue = null;
+		for(i = 0; i < nvPairs.length; i++){
+			if(nvPairs[i]){
+				var nameValue = nvPairs[i].split("=");
+				request[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+			}
+		}
+
+		//Split up the request headers, if any.
+		var headers = {};
+		if(request.requestHeaders){
+			nvPairs = request.requestHeaders.split("\r\n");
+			for(i = 0; i < nvPairs.length; i++){
+				if(nvPairs[i]){
+					nameValue = nvPairs[i].split(": ");
+					headers[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+				}
+			}
+
+			request.requestHeaders = headers;
+		}
+		
+		if(isAllowedRequest(request)){
+		
+			//The request is allowed, so set up the XHR object.
+			var xhr = dojo.hostenv.getXmlhttpObject();
+			
+			//Start timer to look for readyState.
+			var xhrIntervalId = setInterval(function(){
+			
+				if(xhr.readyState == 4){
+					clearInterval(xhrIntervalId);
+					xhrDone(xhr);
+				}
+			}, 10);
+
+			//Actually start up the XHR request.
+			xhr.open(request.method, request.uri, true);
+			dojo.setHeaders(xhr, request.requestHeaders);
+			
+			var content = "";
+			if(request.data){
+				content = request.data;
+			}
+
+			try{
+				xhr.send(content);
+			}catch(e){
+				if(typeof xhr.abort == "function"){
+					xhr.abort();
+					xhrDone({status: 404, statusText: "xip_server.html error: " + e});
+				}
+			}
+		}
+	}
+
+	function unpackMessage(encodedMessage){
+		var parts = encodedMessage.split(":");
+		var command = parts[1];
+		encodedMessage = parts[2] || "";
+
+		var config = null;
+		if(command == "init"){
+			var configParts = encodedMessage.split("&");
+			config = {};
+			for(var i = 0; i < configParts.length; i++){
+				var nameValue = configParts[i].split("=");
+				config[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+			}
+		}
+		return {command: command, message: encodedMessage, config: config};
+	}
+
+	function onServerLoad(){
+		xipServerInit();
+
+		//Decode the init params
+		var config = unpackMessage(window.location.href.split("#")[1]).config;
+
+		xipStateId = config.id;
+		xipClientUrl = config.client;
+		
+		//Make sure we don't have a javascript: url, just for good measure.
+		if(xipClientUrl.split(":")[0].match(/javascript/i)){
+			throw "Invalid client URL";
+		}
+		if(!xipStateId.match(/^XhrIframeProxy[0-9]+$/)){
+			throw "Invalid state ID";
+		}
+	
+		setInterval(pollHash, 10);
+		
+		var serverUrl = window.location.href.split("#")[0];
+		document.getElementById("iframeHolder").innerHTML = '<iframe name="'
+			+ xipStateId + '_clientEndPoint'
+			+ '" src="javascript:false">'
+			+ '</iframe>';
+		xipClientWindow = document.getElementsByTagName("iframe")[0];
+		xipClientWindow.src = makeClientUrl("init", 'id=' + xipStateId + "&callback=" + encodeURIComponent(config.callback));
+		if(xipClientWindow.contentWindow){
+			xipClientWindow = xipClientWindow.contentWindow;
+		}
+	}
+
+	if(typeof(window.addEventListener) == "undefined"){
+		window.attachEvent("onload", onServerLoad);
+	}else{
+		window.addEventListener('load', onServerLoad, false);
+	}
+	// -->
+	<!-- </script> -->
+</head>
+<body>
+	<h4>The Dojo Toolkit -- xip_server.html</h4>
+
+	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the the file
+	that should go on the server that will actually be doing the XHR request.</p>
+	<div id="iframeHolder"></div>
+</body>
+</html>
Index: trunk/web/dojo/dojox/io/proxy/xip.js
===================================================================
--- trunk/web/dojo/dojox/io/proxy/xip.js	(revision 0)
+++ trunk/web/dojo/dojox/io/proxy/xip.js	(revision 9)
@@ -0,0 +1,260 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.proxy.xip"]){
+dojo._hasResource["dojox.io.proxy.xip"]=true;
+dojo.provide("dojox.io.proxy.xip");
+dojo.require("dojo.io.iframe");
+dojo.require("dojox.data.dom");
+dojox.io.proxy.xip={xipClientUrl:((dojo.config||djConfig)["xipClientUrl"])||dojo.moduleUrl("dojox.io.proxy","xip_client.html"),urlLimit:4000,_callbackName:(dojox._scopeName||"dojox")+".io.proxy.xip.fragmentReceived",_state:{},_stateIdCounter:0,_isWebKit:navigator.userAgent.indexOf("WebKit")!=-1,send:function(_1){
+var _2=this.xipClientUrl;
+if(_2.split(":")[0].match(/javascript/i)||_1._ifpServerUrl.split(":")[0].match(/javascript/i)){
+return;
+}
+var _3=_2.indexOf(":");
+var _4=_2.indexOf("/");
+if(_3==-1||_4<_3){
+var _5=window.location.href;
+if(_4==0){
+_2=_5.substring(0,_5.indexOf("/",9))+_2;
+}else{
+_2=_5.substring(0,(_5.lastIndexOf("/")+1))+_2;
+}
+}
+this.fullXipClientUrl=_2;
+if(typeof document.postMessage!="undefined"){
+document.addEventListener("message",dojo.hitch(this,this.fragmentReceivedEvent),false);
+}
+this.send=this._realSend;
+return this._realSend(_1);
+},_realSend:function(_6){
+var _7="XhrIframeProxy"+(this._stateIdCounter++);
+_6._stateId=_7;
+var _8=_6._ifpServerUrl+"#0:init:id="+_7+"&client="+encodeURIComponent(this.fullXipClientUrl)+"&callback="+encodeURIComponent(this._callbackName);
+this._state[_7]={facade:_6,stateId:_7,clientFrame:dojo.io.iframe.create(_7,"",_8),isSending:false,serverUrl:_6._ifpServerUrl,requestData:null,responseMessage:"",requestParts:[],idCounter:1,partIndex:0,serverWindow:null};
+return _7;
+},receive:function(_9,_a){
+var _b={};
+var _c=_a.split("&");
+for(var i=0;i<_c.length;i++){
+if(_c[i]){
+var _d=_c[i].split("=");
+_b[decodeURIComponent(_d[0])]=decodeURIComponent(_d[1]);
+}
+}
+var _e=this._state[_9];
+var _f=_e.facade;
+_f._setResponseHeaders(_b.responseHeaders);
+if(_b.status==0||_b.status){
+_f.status=parseInt(_b.status,10);
+}
+if(_b.statusText){
+_f.statusText=_b.statusText;
+}
+if(_b.responseText){
+_f.responseText=_b.responseText;
+var _10=_f.getResponseHeader("Content-Type");
+if(_10){
+var _11=_10.split(";")[0];
+if(_11.indexOf("application/xml")==0||_11.indexOf("text/xml")==0){
+_f.responseXML=dojox.data.dom.createDocument(_b.responseText,_10);
+}
+}
+}
+_f.readyState=4;
+this.destroyState(_9);
+},frameLoaded:function(_12){
+var _13=this._state[_12];
+var _14=_13.facade;
+var _15=[];
+for(var _16 in _14._requestHeaders){
+_15.push(_16+": "+_14._requestHeaders[_16]);
+}
+var _17={uri:_14._uri};
+if(_15.length>0){
+_17.requestHeaders=_15.join("\r\n");
+}
+if(_14._method){
+_17.method=_14._method;
+}
+if(_14._bodyData){
+_17.data=_14._bodyData;
+}
+this.sendRequest(_12,dojo.objectToQuery(_17));
+},destroyState:function(_18){
+var _19=this._state[_18];
+if(_19){
+delete this._state[_18];
+var _1a=_19.clientFrame.parentNode;
+_1a.removeChild(_19.clientFrame);
+_19.clientFrame=null;
+_19=null;
+}
+},createFacade:function(){
+if(arguments&&arguments[0]&&arguments[0].iframeProxyUrl){
+return new dojox.io.proxy.xip.XhrIframeFacade(arguments[0].iframeProxyUrl);
+}else{
+return dojox.io.proxy.xip._xhrObjOld.apply(dojo,arguments);
+}
+},sendRequest:function(_1b,_1c){
+var _1d=this._state[_1b];
+if(!_1d.isSending){
+_1d.isSending=true;
+_1d.requestData=_1c||"";
+_1d.serverWindow=frames[_1d.stateId];
+if(!_1d.serverWindow){
+_1d.serverWindow=document.getElementById(_1d.stateId).contentWindow;
+}
+if(typeof document.postMessage=="undefined"){
+if(_1d.serverWindow.contentWindow){
+_1d.serverWindow=_1d.serverWindow.contentWindow;
+}
+}
+this.sendRequestStart(_1b);
+}
+},sendRequestStart:function(_1e){
+var _1f=this._state[_1e];
+_1f.requestParts=[];
+var _20=_1f.requestData;
+var _21=_1f.serverUrl.length;
+var _22=this.urlLimit-_21;
+var _23=0;
+while((_20.length-_23)+_21>this.urlLimit){
+var _24=_20.substring(_23,_23+_22);
+var _25=_24.lastIndexOf("%");
+if(_25==_24.length-1||_25==_24.length-2){
+_24=_24.substring(0,_25);
+}
+_1f.requestParts.push(_24);
+_23+=_24.length;
+}
+_1f.requestParts.push(_20.substring(_23,_20.length));
+_1f.partIndex=0;
+this.sendRequestPart(_1e);
+},sendRequestPart:function(_26){
+var _27=this._state[_26];
+if(_27.partIndex<_27.requestParts.length){
+var _28=_27.requestParts[_27.partIndex];
+var cmd="part";
+if(_27.partIndex+1==_27.requestParts.length){
+cmd="end";
+}else{
+if(_27.partIndex==0){
+cmd="start";
+}
+}
+this.setServerUrl(_26,cmd,_28);
+_27.partIndex++;
+}
+},setServerUrl:function(_29,cmd,_2a){
+var _2b=this.makeServerUrl(_29,cmd,_2a);
+var _2c=this._state[_29];
+if(this._isWebKit){
+_2c.serverWindow.location=_2b;
+}else{
+_2c.serverWindow.location.replace(_2b);
+}
+},makeServerUrl:function(_2d,cmd,_2e){
+var _2f=this._state[_2d];
+var _30=_2f.serverUrl+"#"+(_2f.idCounter++)+":"+cmd;
+if(_2e){
+_30+=":"+_2e;
+}
+return _30;
+},fragmentReceivedEvent:function(evt){
+if(evt.uri.split("#")[0]==this.fullXipClientUrl){
+this.fragmentReceived(evt.data);
+}
+},fragmentReceived:function(_31){
+var _32=_31.indexOf("#");
+var _33=_31.substring(0,_32);
+var _34=_31.substring(_32+1,_31.length);
+var msg=this.unpackMessage(_34);
+var _35=this._state[_33];
+switch(msg.command){
+case "loaded":
+this.frameLoaded(_33);
+break;
+case "ok":
+this.sendRequestPart(_33);
+break;
+case "start":
+_35.responseMessage=""+msg.message;
+this.setServerUrl(_33,"ok");
+break;
+case "part":
+_35.responseMessage+=msg.message;
+this.setServerUrl(_33,"ok");
+break;
+case "end":
+this.setServerUrl(_33,"ok");
+_35.responseMessage+=msg.message;
+this.receive(_33,_35.responseMessage);
+break;
+}
+},unpackMessage:function(_36){
+var _37=_36.split(":");
+var _38=_37[1];
+_36=_37[2]||"";
+var _39=null;
+if(_38=="init"){
+var _3a=_36.split("&");
+_39={};
+for(var i=0;i<_3a.length;i++){
+var _3b=_3a[i].split("=");
+_39[decodeURIComponent(_3b[0])]=decodeURIComponent(_3b[1]);
+}
+}
+return {command:_38,message:_36,config:_39};
+}};
+dojox.io.proxy.xip._xhrObjOld=dojo._xhrObj;
+dojo._xhrObj=dojox.io.proxy.xip.createFacade;
+dojox.io.proxy.xip.XhrIframeFacade=function(_3c){
+this._requestHeaders={};
+this._allResponseHeaders=null;
+this._responseHeaders={};
+this._method=null;
+this._uri=null;
+this._bodyData=null;
+this.responseText=null;
+this.responseXML=null;
+this.status=null;
+this.statusText=null;
+this.readyState=0;
+this._ifpServerUrl=_3c;
+this._stateId=null;
+};
+dojo.extend(dojox.io.proxy.xip.XhrIframeFacade,{open:function(_3d,uri){
+this._method=_3d;
+this._uri=uri;
+this.readyState=1;
+},setRequestHeader:function(_3e,_3f){
+this._requestHeaders[_3e]=_3f;
+},send:function(_40){
+this._bodyData=_40;
+this._stateId=dojox.io.proxy.xip.send(this);
+this.readyState=2;
+},abort:function(){
+dojox.io.proxy.xip.destroyState(this._stateId);
+},getAllResponseHeaders:function(){
+return this._allResponseHeaders;
+},getResponseHeader:function(_41){
+return this._responseHeaders[_41];
+},_setResponseHeaders:function(_42){
+if(_42){
+this._allResponseHeaders=_42;
+_42=_42.replace(/\r/g,"");
+var _43=_42.split("\n");
+for(var i=0;i<_43.length;i++){
+if(_43[i]){
+var _44=_43[i].split(": ");
+this._responseHeaders[_44[0]]=_44[1];
+}
+}
+}
+}});
+}
Index: trunk/web/dojo/dojox/io/proxy/README
===================================================================
--- trunk/web/dojo/dojox/io/proxy/README	(revision 0)
+++ trunk/web/dojo/dojox/io/proxy/README	(revision 9)
@@ -0,0 +1,82 @@
+-------------------------------------------------------------------------------
+Project Name
+-------------------------------------------------------------------------------
+Version 0.6
+Release date: 01/31/2008
+-------------------------------------------------------------------------------
+Project state:
+experimental
+-------------------------------------------------------------------------------
+Credits
+	James Burke (jburke@dojotoolkit.org)
+-------------------------------------------------------------------------------
+Project description
+
+The XHR IFrame Proxy (xip) allows you to do cross-domain XMLHttpRequests (XHRs).
+It works by using two iframes, one your domain (xip_client.html), one on the 
+other domain (xip_server.html). They use fragment IDs in the iframe URLs to pass
+messages to each other. The xip.js file defines dojox.io.proxy.xip. This module
+intercepts XHR calls made by the Dojo XHR methods (dojo.xhr* methods). The module
+returns a facade object that acts like an XHR object. Once send is called on the
+facade, the facade's data is serialized, given to xip_client.html. xip_client.html
+then passes the serialized data to xip_server.html by changing xip_server.html's
+URL fragment ID (the #xxxx part of an URL). xip_server.html deserializes the
+message fragments, and does an XHR call, gets the response, and serializes the
+data. The serialized data is then passed back to xip_client.html by changing
+xip_client.html's fragment ID. Then the response is deserialized and used as
+the response inside the facade XHR object that was created by dojox.io.proxy.xip.
+-------------------------------------------------------------------------------
+Dependencies:
+
+xip.js: Dojo Core, dojox.data.dom
+xip_client.html: none
+xip_server.html: none (but see Additional Notes section)
+-------------------------------------------------------------------------------
+Documentation
+
+There is some documentation that applies to the Dojo 0.4.x version of these files:
+http://dojotoolkit.org/book/dojo-book-0-4/part-5-connecting-pieces/i-o/cross-domain-xmlhttprequest-using-iframe-proxy
+
+The general theory still applies to this code, but the specifics are different
+for the Dojo 0.9+ codebase. Doc updates hopefully after the basic code is ported.
+
+The current implementation destroys the iframes used for a request after the request
+completes. This seems to cause a memory leak, particularly in IE. So, it is not
+suited for doing polling cross-domain requests.
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojox SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/io/proxy/xip.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/io/proxy/xip_client.html
+
+Install into the following directory structure:
+/dojox/io/proxy/
+
+...which should be at the same level as your Dojo checkout.
+
+Grab the following from the Dojox SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/io/proxy/xip_server.html
+
+and install it on the domain that you want to allow receiving cross-domain
+requests. Be sure to read the documentation, the Additional Notes below, and
+the in-file comments.
+-------------------------------------------------------------------------------
+Additional Notes
+
+xip_client.html and xip_server.html do not work right away. You need to uncomment
+out the script tags in the files. Additionally, xip_server.html requires a JS file,
+isAllowed.js, to be defined. See the notes in xip_server.html for more informaiton.
+
+XDOMAIN BUILD INSTRUCTIONS:
+The dojox.io.proxy module requires some setup to use with an xdomain build.
+The xip_client.html file has to be served from the same domain as your web page.
+It cannot be served from the domain that has the xdomain build. Download xip_client.html
+and install it on your server. Then set djConfig.xipClientUrl to the local path
+of xip_client.html (just use a path, not a whole URL, since it will be on the same
+domain as the page). The path to the file should be the path relative to the web
+page that is using dojox.io.proxy.
+
+
+
+
Index: trunk/web/dojo/dojox/io/windowName.js
===================================================================
--- trunk/web/dojo/dojox/io/windowName.js	(revision 0)
+++ trunk/web/dojo/dojox/io/windowName.js	(revision 9)
@@ -0,0 +1,156 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.windowName"]){
+dojo._hasResource["dojox.io.windowName"]=true;
+dojo.provide("dojox.io.windowName");
+dojox.io.windowName={send:function(_1,_2){
+_2.url+=(_2.url.match(/\?/)?"&":"?")+"windowname="+(_2.authElement?"auth":true);
+var _3=_2.authElement;
+var _4=function(_5){
+try{
+var _6=_7.ioArgs.frame.contentWindow.document;
+_6.write(" ");
+_6.close();
+}
+catch(e){
+}
+(_3||dojo.body()).removeChild(_7.ioArgs.outerFrame);
+return _5;
+};
+var _7=dojo._ioSetArgs(_2,_4,_4,_4);
+if(_2.timeout){
+setTimeout(function(){
+if(_7.fired==-1){
+_7.callback(new Error("Timeout"));
+}
+},_2.timeout);
+}
+var _8=dojox.io.windowName;
+if(dojo.body()){
+_8._send(_7,_1,_3,_2.onAuthLoad);
+}else{
+dojo.addOnLoad(function(){
+_8._send(_7,_1,_3,_2.onAuthLoad);
+});
+}
+return _7;
+},_send:function(_9,_a,_b,_c){
+var _d=_9.ioArgs;
+var _e=dojox.io.windowName._frameNum++;
+var _f=(dojo.config.dojoBlankHtmlUrl||dojo.config.dojoCallbackUrl||dojo.moduleUrl("dojo","resources/blank.html"))+"#"+_e;
+var _10=new dojo._Url(window.location,_f);
+var doc=dojo.doc;
+var _11=_b||dojo.body();
+function _12(_13){
+_13.style.width="100%";
+_13.style.height="100%";
+_13.style.border="0px";
+};
+if(dojo.isMoz&&![].reduce){
+var _14=doc.createElement("iframe");
+_12(_14);
+if(!_b){
+_14.style.display="none";
+}
+_11.appendChild(_14);
+var _15=_14.contentWindow;
+doc=_15.document;
+doc.write("<html><body margin='0px'><iframe style='width:100%;height:100%;border:0px' name='protectedFrame'></iframe></body></html>");
+doc.close();
+var _16=_15[0];
+_15.__defineGetter__(0,function(){
+});
+_15.__defineGetter__("protectedFrame",function(){
+});
+doc=_16.document;
+doc.write("<html><body margin='0px'></body></html>");
+doc.close();
+_11=doc.body;
+}
+var _17=_d.frame=_17=doc.createElement(dojo.isIE?"<iframe name=\""+_10+"\" onload=\"dojox.io.windowName["+_e+"]()\">":"iframe");
+_12(_17);
+_d.outerFrame=_14=_14||_17;
+if(!_b){
+_14.style.display="none";
+}
+var _18=0;
+function _19(){
+var _1a=_17.contentWindow.name;
+if(typeof _1a=="string"){
+if(_1a!=_10){
+_18=2;
+_9.ioArgs.hash=_17.contentWindow.location.hash;
+_9.callback(_1a);
+}
+}
+};
+dojox.io.windowName[_e]=_17.onload=function(){
+try{
+if(!dojo.isMoz&&_17.contentWindow.location=="about:blank"){
+return;
+}
+}
+catch(e){
+}
+if(!_18){
+_18=1;
+if(_b){
+if(_c){
+_c();
+}
+}else{
+_17.contentWindow.location=_f;
+}
+}
+try{
+if(_18<2){
+_19();
+}
+}
+catch(e){
+}
+};
+_17.name=_10;
+if(_a.match(/GET/i)){
+dojo._ioAddQueryToUrl(_d);
+_17.src=_d.url;
+_11.appendChild(_17);
+if(_17.contentWindow){
+_17.contentWindow.location.replace(_d.url);
+}
+}else{
+if(_a.match(/POST/i)){
+_11.appendChild(_17);
+var _1b=dojo.doc.createElement("form");
+dojo.body().appendChild(_1b);
+var _1c=dojo.queryToObject(_d.query);
+for(var i in _1c){
+var _1d=_1c[i];
+_1d=_1d instanceof Array?_1d:[_1d];
+for(var j=0;j<_1d.length;j++){
+var _1e=doc.createElement("input");
+_1e.type="hidden";
+_1e.name=i;
+_1e.value=_1d[j];
+_1b.appendChild(_1e);
+}
+}
+_1b.method="POST";
+_1b.action=_d.url;
+_1b.target=_10;
+_1b.submit();
+_1b.parentNode.removeChild(_1b);
+}else{
+throw new Error("Method "+_a+" not supported with the windowName transport");
+}
+}
+if(_17.contentWindow){
+_17.contentWindow.name=_10;
+}
+},_frameNum:0};
+}
Index: trunk/web/dojo/dojox/io/xhrWindowNamePlugin.js
===================================================================
--- trunk/web/dojo/dojox/io/xhrWindowNamePlugin.js	(revision 0)
+++ trunk/web/dojo/dojox/io/xhrWindowNamePlugin.js	(revision 9)
@@ -0,0 +1,43 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.xhrWindowNamePlugin"]){
+dojo._hasResource["dojox.io.xhrWindowNamePlugin"]=true;
+dojo.provide("dojox.io.xhrWindowNamePlugin");
+dojo.require("dojox.io.xhrPlugins");
+dojo.require("dojox.io.windowName");
+dojo.require("dojox.io.httpParse");
+dojo.require("dojox.secure.capability");
+dojox.io.xhrWindowNamePlugin=function(_1,_2,_3){
+dojox.io.xhrPlugins.register("windowName",function(_4,_5){
+return _5.sync!==true&&(_4=="GET"||_4=="POST"||_2)&&(_5.url.substring(0,_1.length)==_1);
+},function(_6,_7,_8){
+var _9=dojox.io.windowName.send;
+var _a=_7.load;
+_7.load=undefined;
+var _b=(_2?_2(_9,true):_9)(_6,_7,_8);
+_b.addCallback(function(_c){
+var _d=_b.ioArgs;
+_d.xhr={getResponseHeader:function(_e){
+return dojo.queryToObject(_d.hash.match(/[^#]*$/)[0])[_e];
+}};
+if(_d.handleAs=="json"){
+if(!_3){
+dojox.secure.capability.validate(_c,["Date"],{});
+}
+return dojo.fromJson(_c);
+}
+return dojo._contentHandlers[_d.handleAs||"text"]({responseText:_c});
+});
+_7.load=_a;
+if(_a){
+_b.addCallback(_a);
+}
+return _b;
+});
+};
+}
Index: trunk/web/dojo/dojox/io/httpParse.js
===================================================================
--- trunk/web/dojo/dojox/io/httpParse.js	(revision 0)
+++ trunk/web/dojo/dojox/io/httpParse.js	(revision 9)
@@ -0,0 +1,66 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.io.httpParse"]){
+dojo._hasResource["dojox.io.httpParse"]=true;
+dojo.provide("dojox.io.httpParse");
+dojox.io.httpParse=function(_1,_2,_3){
+var _4=[];
+var _5=_1.length;
+do{
+var _6={};
+var _7=_1.match(/(\n*[^\n]+)/);
+if(!_7){
+return null;
+}
+_1=_1.substring(_7[0].length+1);
+_7=_7[1];
+var _8=_1.match(/([^\n]+\n)*/)[0];
+_1=_1.substring(_8.length);
+var _9=_1.substring(0,1);
+_1=_1.substring(1);
+_8=(_2||"")+_8;
+var _a=_8;
+_8=_8.match(/[^:\n]+:[^\n]+\n/g);
+for(var j=0;j<_8.length;j++){
+var _b=_8[j].indexOf(":");
+_6[_8[j].substring(0,_b)]=_8[j].substring(_b+1).replace(/(^[ \r\n]*)|([ \r\n]*)$/g,"");
+}
+_7=_7.split(" ");
+var _c={status:parseInt(_7[1],10),statusText:_7[2],readyState:3,getAllResponseHeaders:function(){
+return _a;
+},getResponseHeader:function(_d){
+return _6[_d];
+}};
+var _e=_6["Content-Length"];
+var _f;
+if(_e){
+if(_e<=_1.length){
+_f=_1.substring(0,_e);
+}else{
+return _4;
+}
+}else{
+if((_f=_1.match(/(.*)HTTP\/\d\.\d \d\d\d[\w\s]*\n/))){
+_f=_f[0];
+}else{
+if(!_3||_9=="\n"){
+_f=_1;
+}else{
+return _4;
+}
+}
+}
+_4.push(_c);
+_1=_1.substring(_f.length);
+_c.responseText=_f;
+_c.readyState=4;
+_c._lastIndex=_5-_1.length;
+}while(_1);
+return _4;
+};
+}
Index: trunk/web/dojo/dojox/rails/README
===================================================================
--- trunk/web/dojo/dojox/rails/README	(revision 0)
+++ trunk/web/dojo/dojox/rails/README	(revision 9)
@@ -0,0 +1,41 @@
+-------------------------------------------------------------------------------
+Project Name:  dojox.rails
+-------------------------------------------------------------------------------
+Version 0.1
+Release date: 03/23/2010
+-------------------------------------------------------------------------------
+Project state:
+        experimental
+-------------------------------------------------------------------------------
+Credits:
+       Bob Remeika (bob.remeika@gmail.com)
+       ttilley (This code is based a lot on what he contributed).
+
+-------------------------------------------------------------------------------
+Project description
+
+This is a dojo plugin for Rails 3.x UJS support
+
+-------------------------------------------------------------------------------
+Dependencies:
+        dojo base
+-------------------------------------------------------------------------------
+Documentation
+        Documentatation will reside at:
+        http://docs.dojocampus.org/dojox/rails
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojox/trunk/rails.js
+
+Install into the following directory structure:
+/dojox/rails.js
+
+...which should be at the same level as your Dojo checkout.
+
+then dojo.require("dojox.rails") in your application to load it.
+
+-------------------------------------------------------------------------------
+
Index: trunk/web/dojo/dojox/sql.js
===================================================================
--- trunk/web/dojo/dojox/sql.js	(revision 0)
+++ trunk/web/dojo/dojox/sql.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.sql"]){
+dojo._hasResource["dojox.sql"]=true;
+dojo.provide("dojox.sql");
+dojo.require("dojox.sql._base");
+}
Index: trunk/web/dojo/dojox/cometd/HttpChannels.js
===================================================================
--- trunk/web/dojo/dojox/cometd/HttpChannels.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/HttpChannels.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.HttpChannels"]){
+dojo._hasResource["dojox.cometd.HttpChannels"]=true;
+dojo.provide("dojox.cometd.HttpChannels");
+dojo.require("dojox.io.httpParse");
+dojo.require("dojox.cometd.RestChannels");
+dojox.cometd.HttpChannels=dojox.cometd.RestChannels;
+}
Index: trunk/web/dojo/dojox/cometd/timesync.js
===================================================================
--- trunk/web/dojo/dojox/cometd/timesync.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/timesync.js	(revision 9)
@@ -0,0 +1,75 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.timesync"]){
+dojo._hasResource["dojox.cometd.timesync"]=true;
+dojo.provide("dojox.cometd.timesync");
+dojo.require("dojox.cometd._base");
+dojox.cometd.timesync=new function(){
+this._window=10;
+this._lags=[];
+this._offsets=[];
+this.lag=0;
+this.offset=0;
+this.samples=0;
+this.getServerTime=function(){
+return new Date().getTime()+this.offset;
+};
+this.getServerDate=function(){
+return new Date(this.getServerTime());
+};
+this.setTimeout=function(_1,_2){
+var ts=(_2 instanceof Date)?_2.getTime():(0+_2);
+var tc=ts-this.offset;
+var _3=tc-new Date().getTime();
+if(_3<=0){
+_3=1;
+}
+return setTimeout(_1,_3);
+};
+this._in=function(_4){
+var _5=_4.channel;
+if(_5&&_5.indexOf("/meta/")==0){
+if(_4.ext&&_4.ext.timesync){
+var _6=_4.ext.timesync;
+var _7=new Date().getTime();
+var l=(_7-_6.tc-_6.p)/2-_6.a;
+var o=_6.ts-_6.tc-l;
+this._lags.push(l);
+this._offsets.push(o);
+if(this._offsets.length>this._window){
+this._offsets.shift();
+this._lags.shift();
+}
+this.samples++;
+l=0;
+o=0;
+for(var i in this._offsets){
+l+=this._lags[i];
+o+=this._offsets[i];
+}
+this.offset=parseInt((o/this._offsets.length).toFixed());
+this.lag=parseInt((l/this._lags.length).toFixed());
+}
+}
+return _4;
+};
+this._out=function(_8){
+var _9=_8.channel;
+if(_9&&_9.indexOf("/meta/")==0){
+var _a=new Date().getTime();
+if(!_8.ext){
+_8.ext={};
+}
+_8.ext.timesync={tc:_a,l:this.lag,o:this.offset};
+}
+return _8;
+};
+};
+dojox.cometd._extendInList.push(dojo.hitch(dojox.cometd.timesync,"_in"));
+dojox.cometd._extendOutList.push(dojo.hitch(dojox.cometd.timesync,"_out"));
+}
Index: trunk/web/dojo/dojox/cometd/ack.js
===================================================================
--- trunk/web/dojo/dojox/cometd/ack.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/ack.js	(revision 9)
@@ -0,0 +1,46 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.ack"]){
+dojo._hasResource["dojox.cometd.ack"]=true;
+dojo.provide("dojox.cometd.ack");
+dojo.require("dojox.cometd._base");
+dojox.cometd._ack=new function(){
+var _1=false;
+var _2=-1;
+this._in=function(_3){
+if(_3.channel=="/meta/handshake"){
+_1=_3.ext&&_3.ext.ack;
+}else{
+if(_1&&_3.channel=="/meta/connect"&&_3.ext&&_3.ext.ack&&_3.successful){
+var _4=parseInt(_3.ext.ack);
+_2=_4;
+}
+}
+return _3;
+};
+this._out=function(_5){
+if(_5.channel=="/meta/handshake"){
+if(!_5.ext){
+_5.ext={};
+}
+_5.ext.ack=dojox.cometd.ackEnabled;
+_2=-1;
+}
+if(_1&&_5.channel=="/meta/connect"){
+if(!_5.ext){
+_5.ext={};
+}
+_5.ext.ack=_2;
+}
+return _5;
+};
+};
+dojox.cometd._extendInList.push(dojo.hitch(dojox.cometd._ack,"_in"));
+dojox.cometd._extendOutList.push(dojo.hitch(dojox.cometd._ack,"_out"));
+dojox.cometd.ackEnabled=true;
+}
Index: trunk/web/dojo/dojox/cometd/longPollTransportJsonEncoded.js
===================================================================
--- trunk/web/dojo/dojox/cometd/longPollTransportJsonEncoded.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/longPollTransportJsonEncoded.js	(revision 9)
@@ -0,0 +1,119 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.longPollTransportJsonEncoded"]){
+dojo._hasResource["dojox.cometd.longPollTransportJsonEncoded"]=true;
+dojo.provide("dojox.cometd.longPollTransportJsonEncoded");
+dojo.require("dojox.cometd._base");
+dojox.cometd.longPollTransportJsonEncoded=new function(){
+this._connectionType="long-polling";
+this._cometd=null;
+this.check=function(_1,_2,_3){
+return ((!_3)&&(dojo.indexOf(_1,"long-polling")>=0));
+};
+this.tunnelInit=function(){
+var _4={channel:"/meta/connect",clientId:this._cometd.clientId,connectionType:this._connectionType,id:""+this._cometd.messageId++};
+_4=this._cometd._extendOut(_4);
+this.openTunnelWith([_4]);
+};
+this.tunnelCollapse=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._advice&&this._cometd._advice["reconnect"]=="none"){
+return;
+}
+if(this._cometd._status=="connected"){
+setTimeout(dojo.hitch(this,function(){
+this._connect();
+}),this._cometd._interval());
+}else{
+setTimeout(dojo.hitch(this._cometd,function(){
+this.init(this.url,this._props);
+}),this._cometd._interval());
+}
+};
+this._connect=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._polling){
+return;
+}
+if((this._cometd._advice)&&(this._cometd._advice["reconnect"]=="handshake")){
+this._cometd._status="unconnected";
+this._initialized=false;
+this._cometd.init(this._cometd.url,this._cometd._props);
+}else{
+if(this._cometd._status=="connected"){
+var _5={channel:"/meta/connect",connectionType:this._connectionType,clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+if(this._cometd.connectTimeout>=this._cometd.expectedNetworkDelay){
+_5.advice={timeout:(this._cometd.connectTimeout-this._cometd.expectedNetworkDelay)};
+}
+_5=this._cometd._extendOut(_5);
+this.openTunnelWith([_5]);
+}
+}
+};
+this.deliver=function(_6){
+};
+this.openTunnelWith=function(_7,_8){
+this._cometd._polling=true;
+var _9={url:(_8||this._cometd.url),postData:dojo.toJson(_7),contentType:"text/json;charset=UTF-8",handleAs:this._cometd.handleAs,load:dojo.hitch(this,function(_a){
+this._cometd._polling=false;
+this._cometd.deliver(_a);
+this._cometd._backon();
+this.tunnelCollapse();
+}),error:dojo.hitch(this,function(_b){
+this._cometd._polling=false;
+var _c={failure:true,error:_b,advice:this._cometd._advice};
+this._cometd._publishMeta("connect",false,_c);
+this._cometd._backoff();
+this.tunnelCollapse();
+})};
+var _d=this._cometd._connectTimeout();
+if(_d>0){
+_9.timeout=_d;
+}
+this._poll=dojo.rawXhrPost(_9);
+};
+this.sendMessages=function(_e){
+for(var i=0;i<_e.length;i++){
+_e[i].clientId=this._cometd.clientId;
+_e[i].id=""+this._cometd.messageId++;
+_e[i]=this._cometd._extendOut(_e[i]);
+}
+return dojo.rawXhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,load:dojo.hitch(this._cometd,"deliver"),postData:dojo.toJson(_e),contentType:"text/json;charset=UTF-8",error:dojo.hitch(this,function(_f){
+this._cometd._publishMeta("publish",false,{messages:_e});
+}),timeout:this._cometd.expectedNetworkDelay});
+};
+this.startup=function(_10){
+if(this._cometd._status=="connected"){
+return;
+}
+this.tunnelInit();
+};
+this.disconnect=function(){
+var _11={channel:"/meta/disconnect",clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+_11=this._cometd._extendOut(_11);
+dojo.rawXhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,postData:dojo.toJson([_11]),contentType:"text/json;charset=UTF-8"});
+};
+this.cancelConnect=function(){
+if(this._poll){
+this._poll.cancel();
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false,{cancel:true});
+this._cometd._backoff();
+this.disconnect();
+this.tunnelCollapse();
+}
+};
+};
+dojox.cometd.longPollTransport=dojox.cometd.longPollTransportJsonEncoded;
+dojox.cometd.connectionTypes.register("long-polling",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportJsonEncoded);
+dojox.cometd.connectionTypes.register("long-polling-json-encoded",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportJsonEncoded);
+}
Index: trunk/web/dojo/dojox/cometd/callbackPollTransport.js
===================================================================
--- trunk/web/dojo/dojox/cometd/callbackPollTransport.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/callbackPollTransport.js	(revision 9)
@@ -0,0 +1,74 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.callbackPollTransport"]){
+dojo._hasResource["dojox.cometd.callbackPollTransport"]=true;
+dojo.provide("dojox.cometd.callbackPollTransport");
+dojo.require("dojox.cometd._base");
+dojo.require("dojox.cometd.longPollTransport");
+dojo.require("dojo.io.script");
+dojox.cometd.callbackPollTransport=new function(){
+this._connectionType="callback-polling";
+this._cometd=null;
+this.check=function(_1,_2,_3){
+return (dojo.indexOf(_1,"callback-polling")>=0);
+};
+this.tunnelInit=function(){
+var _4={channel:"/meta/connect",clientId:this._cometd.clientId,connectionType:this._connectionType,id:""+this._cometd.messageId++};
+_4=this._cometd._extendOut(_4);
+this.openTunnelWith([_4]);
+};
+this.tunnelCollapse=dojox.cometd.longPollTransport.tunnelCollapse;
+this._connect=dojox.cometd.longPollTransport._connect;
+this.deliver=dojox.cometd.longPollTransport.deliver;
+this.openTunnelWith=function(_5,_6){
+this._cometd._polling=true;
+var _7={load:dojo.hitch(this,function(_8){
+this._cometd._polling=false;
+this._cometd.deliver(_8);
+this._cometd._backon();
+this.tunnelCollapse();
+}),error:dojo.hitch(this,function(_9){
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false);
+this._cometd._backoff();
+this.tunnelCollapse();
+}),url:(_6||this._cometd.url),content:{message:dojo.toJson(_5)},callbackParamName:"jsonp"};
+var _a=this._cometd._connectTimeout();
+if(_a>0){
+_7.timeout=_a;
+}
+dojo.io.script.get(_7);
+};
+this.sendMessages=function(_b){
+for(var i=0;i<_b.length;i++){
+_b[i].clientId=this._cometd.clientId;
+_b[i].id=""+this._cometd.messageId++;
+_b[i]=this._cometd._extendOut(_b[i]);
+}
+var _c={url:this._cometd.url||dojo.config["cometdRoot"],load:dojo.hitch(this._cometd,"deliver"),callbackParamName:"jsonp",content:{message:dojo.toJson(_b)},error:dojo.hitch(this,function(_d){
+this._cometd._publishMeta("publish",false,{messages:_b});
+}),timeout:this._cometd.expectedNetworkDelay};
+return dojo.io.script.get(_c);
+};
+this.startup=function(_e){
+if(this._cometd._connected){
+return;
+}
+this.tunnelInit();
+};
+this.disconnect=dojox.cometd.longPollTransport.disconnect;
+this.disconnect=function(){
+var _f={channel:"/meta/disconnect",clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+_f=this._cometd._extendOut(_f);
+dojo.io.script.get({url:this._cometd.url||dojo.config["cometdRoot"],callbackParamName:"jsonp",content:{message:dojo.toJson([_f])}});
+};
+this.cancelConnect=function(){
+};
+};
+dojox.cometd.connectionTypes.register("callback-polling",dojox.cometd.callbackPollTransport.check,dojox.cometd.callbackPollTransport);
+}
Index: trunk/web/dojo/dojox/cometd/README
===================================================================
--- trunk/web/dojo/dojox/cometd/README	(revision 0)
+++ trunk/web/dojo/dojox/cometd/README	(revision 9)
@@ -0,0 +1,29 @@
+-------------------------------------------------------------------------------
+Cometd (client)
+-------------------------------------------------------------------------------
+Version 0.4
+Release date: May 29, 2007
+-------------------------------------------------------------------------------
+Project state: beta 
+-------------------------------------------------------------------------------
+Project authors
+	Alex Russell (alex@dojotoolkit.org)
+	Greg Wilkins
+-------------------------------------------------------------------------------
+Project description
+
+Low-latency data transfer from servers to clients. dojox.cometd implements a
+Bayeux protocol client for use with most Bayeux servers. See cometd.com for
+details on Cometd or on the Bayeux protocol.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Needs a cooperating Bayeux server
+-------------------------------------------------------------------------------
+Documentation
+
+See http://cometd.com
+-------------------------------------------------------------------------------
+Installation instructions
+
+Use this library with (preferably through) an existing Cometd server.
Index: trunk/web/dojo/dojox/cometd/longPollTransport.js
===================================================================
--- trunk/web/dojo/dojox/cometd/longPollTransport.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/longPollTransport.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.longPollTransport"]){
+dojo._hasResource["dojox.cometd.longPollTransport"]=true;
+dojo.provide("dojox.cometd.longPollTransport");
+dojo.require("dojox.cometd.longPollTransportJsonEncoded");
+}
Index: trunk/web/dojo/dojox/cometd/timestamp.js
===================================================================
--- trunk/web/dojo/dojox/cometd/timestamp.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/timestamp.js	(revision 9)
@@ -0,0 +1,16 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.timestamp"]){
+dojo._hasResource["dojox.cometd.timestamp"]=true;
+dojo.provide("dojox.cometd.timestamp");
+dojo.require("dojox.cometd._base");
+dojox.cometd._extendOutList.push(function(_1){
+_1.timestamp=new Date().toUTCString();
+return _1;
+});
+}
Index: trunk/web/dojo/dojox/cometd/RestChannels.js
===================================================================
--- trunk/web/dojo/dojox/cometd/RestChannels.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/RestChannels.js	(revision 9)
@@ -0,0 +1,337 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.RestChannels"]){
+dojo._hasResource["dojox.cometd.RestChannels"]=true;
+dojo.provide("dojox.cometd.RestChannels");
+dojo.require("dojox.rpc.Client");
+dojo.requireIf(dojox.data&&!!dojox.data.JsonRestStore,"dojox.data.restListener");
+(function(){
+dojo.declare("dojox.cometd.RestChannels",null,{constructor:function(_1){
+dojo.mixin(this,_1);
+if(dojox.rpc.Rest&&this.autoSubscribeRoot){
+var _2=dojox.rpc.Rest._get;
+var _3=this;
+dojox.rpc.Rest._get=function(_4,id){
+var _5=dojo.xhrGet;
+dojo.xhrGet=function(r){
+var _6=_3.autoSubscribeRoot;
+return (_6&&r.url.substring(0,_6.length)==_6)?_3.get(r.url,r):_5(r);
+};
+var _7=_2.apply(this,arguments);
+dojo.xhrGet=_5;
+return _7;
+};
+}
+},absoluteUrl:function(_8,_9){
+return new dojo._Url(_8,_9)+"";
+},acceptType:"application/rest+json,application/http;q=0.9,*/*;q=0.7",subscriptions:{},subCallbacks:{},autoReconnectTime:3000,reloadDataOnReconnect:true,sendAsJson:false,url:"/channels",autoSubscribeRoot:"/",open:function(){
+this.started=true;
+if(!this.connected){
+this.connectionId=dojox.rpc.Client.clientId;
+var _a=this.createdClientId?"Client-Id":"Create-Client-Id";
+this.createdClientId=true;
+var _b={Accept:this.acceptType};
+_b[_a]=this.connectionId;
+var _c=dojo.xhrPost({headers:_b,url:this.url,noStatus:true});
+var _d=this;
+this.lastIndex=0;
+var _e,_f=function(_10){
+if(typeof dojo=="undefined"){
+return null;
+}
+if(xhr&&xhr.status>400){
+return _e(true);
+}
+if(typeof _10=="string"){
+_10=_10.substring(_d.lastIndex);
+}
+var _11=xhr&&(xhr.contentType||xhr.getResponseHeader("Content-Type"))||(typeof _10!="string"&&"already json");
+var _12=_d.onprogress(xhr,_10,_11);
+if(_12){
+if(_e()){
+return new Error(_12);
+}
+}
+if(!xhr||xhr.readyState==4){
+xhr=null;
+if(_d.connected){
+_d.connected=false;
+_d.open();
+}
+}
+return _10;
+};
+_e=function(_13){
+if(xhr&&xhr.status==409){
+_d.disconnected();
+return null;
+}
+_d.createdClientId=false;
+_d.disconnected();
+return _13;
+};
+_c.addCallbacks(_f,_e);
+var xhr=_c.ioArgs.xhr;
+if(xhr){
+xhr.onreadystatechange=function(){
+var _14;
+try{
+if(xhr.readyState==3){
+_d.readyState=3;
+_14=xhr.responseText;
+}
+}
+catch(e){
+}
+if(typeof _14=="string"){
+_f(_14);
+}
+};
+}
+if(window.attachEvent){
+window.attachEvent("onunload",function(){
+_d.connected=false;
+if(xhr){
+xhr.abort();
+}
+});
+}
+this.connected=true;
+}
+},_send:function(_15,_16,_17){
+if(this.sendAsJson){
+_16.postData=dojo.toJson({target:_16.url,method:_15,content:_17,params:_16.content,subscribe:_16.headers["Subscribe"]});
+_16.url=this.url;
+_15="POST";
+}else{
+_16.postData=dojo.toJson(_17);
+}
+return dojo.xhr(_15,_16,_16.postData);
+},subscribe:function(_18,_19){
+_19=_19||{};
+_19.url=this.absoluteUrl(this.url,_18);
+if(_19.headers){
+delete _19.headers.Range;
+}
+var _1a=this.subscriptions[_18];
+var _1b=_19.method||"HEAD";
+var _1c=_19.since;
+var _1d=_19.callback;
+var _1e=_19.headers||(_19.headers={});
+this.subscriptions[_18]=_1c||_1a||0;
+var _1f=this.subCallbacks[_18];
+if(_1d){
+this.subCallbacks[_18]=_1f?function(m){
+_1f(m);
+_1d(m);
+}:_1d;
+}
+if(!this.connected){
+this.open();
+}
+if(_1a===undefined||_1a!=_1c){
+_1e["Cache-Control"]="max-age=0";
+_1c=typeof _1c=="number"?new Date(_1c).toUTCString():_1c;
+if(_1c){
+_1e["Subscribe-Since"]=_1c;
+}
+_1e["Subscribe"]=_19.unsubscribe?"none":"*";
+var dfd=this._send(_1b,_19);
+var _20=this;
+dfd.addBoth(function(_21){
+var xhr=dfd.ioArgs.xhr;
+if(!(_21 instanceof Error)){
+if(_19.confirmation){
+_19.confirmation();
+}
+}
+if(xhr&&xhr.getResponseHeader("Subscribed")=="OK"){
+var _22=xhr.getResponseHeader("Last-Modified");
+if(xhr.responseText){
+_20.subscriptions[_18]=_22||new Date().toUTCString();
+}else{
+return null;
+}
+}else{
+if(xhr&&!(_21 instanceof Error)){
+delete _20.subscriptions[_18];
+}
+}
+if(!(_21 instanceof Error)){
+var _23={responseText:xhr&&xhr.responseText,channel:_18,getResponseHeader:function(_24){
+return xhr.getResponseHeader(_24);
+},getAllResponseHeaders:function(){
+return xhr.getAllResponseHeaders();
+},result:_21};
+if(_20.subCallbacks[_18]){
+_20.subCallbacks[_18](_23);
+}
+}else{
+if(_20.subCallbacks[_18]){
+_20.subCallbacks[_18](xhr);
+}
+}
+return _21;
+});
+return dfd;
+}
+return null;
+},publish:function(_25,_26){
+return this._send("POST",{url:_25,contentType:"application/json"},_26);
+},_processMessage:function(_27){
+_27.event=_27.event||_27.getResponseHeader("Event");
+if(_27.event=="connection-conflict"){
+return "conflict";
+}
+try{
+_27.result=_27.result||dojo.fromJson(_27.responseText);
+}
+catch(e){
+}
+var _28=this;
+var loc=_27.channel=new dojo._Url(this.url,_27.source||_27.getResponseHeader("Content-Location"))+"";
+if(loc in this.subscriptions&&_27.getResponseHeader){
+this.subscriptions[loc]=_27.getResponseHeader("Last-Modified");
+}
+if(this.subCallbacks[loc]){
+setTimeout(function(){
+_28.subCallbacks[loc](_27);
+},0);
+}
+this.receive(_27);
+return null;
+},onprogress:function(xhr,_29,_2a){
+if(!_2a||_2a.match(/application\/rest\+json/)){
+var _2b=_29.length;
+_29=_29.replace(/^\s*[,\[]?/,"[").replace(/[,\]]?\s*$/,"]");
+try{
+var _2c=dojo.fromJson(_29);
+this.lastIndex+=_2b;
+}
+catch(e){
+}
+}else{
+if(dojox.io&&dojox.io.httpParse&&_2a.match(/application\/http/)){
+var _2d="";
+if(xhr&&xhr.getAllResponseHeaders){
+_2d=xhr.getAllResponseHeaders();
+}
+_2c=dojox.io.httpParse(_29,_2d,xhr.readyState!=4);
+}else{
+if(typeof _29=="object"){
+_2c=_29;
+}
+}
+}
+if(_2c){
+for(var i=0;i<_2c.length;i++){
+if(this._processMessage(_2c[i])){
+return "conflict";
+}
+}
+return null;
+}
+if(!xhr){
+return "error";
+}
+if(xhr.readyState!=4){
+return null;
+}
+if(xhr.__proto__){
+xhr={channel:"channel",__proto__:xhr};
+}
+return this._processMessage(xhr);
+},get:function(_2e,_2f){
+(_2f=_2f||{}).method="GET";
+return this.subscribe(_2e,_2f);
+},receive:function(_30){
+if(dojox.data&&dojox.data.restListener){
+dojox.data.restListener(_30);
+}
+},disconnected:function(){
+var _31=this;
+if(this.connected){
+this.connected=false;
+if(this.started){
+setTimeout(function(){
+var _32=_31.subscriptions;
+_31.subscriptions={};
+for(var i in _32){
+if(_31.reloadDataOnReconnect&&dojox.rpc.JsonRest){
+delete dojox.rpc.Rest._index[i];
+dojox.rpc.JsonRest.fetch(i);
+}else{
+_31.subscribe(i,{since:_32[i]});
+}
+}
+_31.open();
+},this.autoReconnectTime);
+}
+}
+},unsubscribe:function(_33,_34){
+_34=_34||{};
+_34.unsubscribe=true;
+this.subscribe(_33,_34);
+},disconnect:function(){
+this.started=false;
+this.xhr.abort();
+}});
+var _35=dojox.cometd.RestChannels.defaultInstance=new dojox.cometd.RestChannels();
+if(dojox.cometd.connectionTypes){
+_35.startup=function(_36){
+_35.open();
+this._cometd._deliver({channel:"/meta/connect",successful:true});
+};
+_35.check=function(_37,_38,_39){
+for(var i=0;i<_37.length;i++){
+if(_37[i]=="rest-channels"){
+return !_39;
+}
+}
+return false;
+};
+_35.deliver=function(_3a){
+};
+dojo.connect(this,"receive",null,function(_3b){
+_3b.data=_3b.result;
+this._cometd._deliver(_3b);
+});
+_35.sendMessages=function(_3c){
+for(var i=0;i<_3c.length;i++){
+var _3d=_3c[i];
+var _3e=_3d.channel;
+var _3f=this._cometd;
+var _40={confirmation:function(){
+_3f._deliver({channel:_3e,successful:true});
+}};
+if(_3e=="/meta/subscribe"){
+this.subscribe(_3d.subscription,_40);
+}else{
+if(_3e=="/meta/unsubscribe"){
+this.unsubscribe(_3d.subscription,_40);
+}else{
+if(_3e=="/meta/connect"){
+_40.confirmation();
+}else{
+if(_3e=="/meta/disconnect"){
+_35.disconnect();
+_40.confirmation();
+}else{
+if(_3e.substring(0,6)!="/meta/"){
+this.publish(_3e,_3d.data);
+}
+}
+}
+}
+}
+}
+};
+dojox.cometd.connectionTypes.register("rest-channels",_35.check,_35,false,true);
+}
+})();
+}
Index: trunk/web/dojo/dojox/cometd/_base.js
===================================================================
--- trunk/web/dojo/dojox/cometd/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/_base.js	(revision 9)
@@ -0,0 +1,400 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd._base"]){
+dojo._hasResource["dojox.cometd._base"]=true;
+dojo.provide("dojox.cometd._base");
+dojo.require("dojo.AdapterRegistry");
+dojox.cometd={Connection:function(_1){
+dojo.mixin(this,{prefix:_1,_status:"unconnected",_handshook:false,_initialized:false,_polling:false,expectedNetworkDelay:10000,connectTimeout:0,version:"1.0",minimumVersion:"0.9",clientId:null,messageId:0,batch:0,_isXD:false,handshakeReturn:null,currentTransport:null,url:null,lastMessage:null,_messageQ:[],handleAs:"json",_advice:{},_backoffInterval:0,_backoffIncrement:1000,_backoffMax:60000,_deferredSubscribes:{},_deferredUnsubscribes:{},_subscriptions:[],_extendInList:[],_extendOutList:[]});
+this.state=function(){
+return this._status;
+};
+this.init=function(_2,_3,_4){
+_3=_3||{};
+_3.version=this.version;
+_3.minimumVersion=this.minimumVersion;
+_3.channel="/meta/handshake";
+_3.id=""+this.messageId++;
+this.url=_2||dojo.config["cometdRoot"];
+if(!this.url){
+throw "no cometd root";
+return null;
+}
+var _5="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
+var _6=(""+window.location).match(new RegExp(_5));
+if(_6[4]){
+var _7=_6[4].split(":");
+var _8=_7[0];
+var _9=_7[1]||"80";
+_6=this.url.match(new RegExp(_5));
+if(_6[4]){
+_7=_6[4].split(":");
+var _a=_7[0];
+var _b=_7[1]||"80";
+this._isXD=((_a!=_8)||(_b!=_9));
+}
+}
+if(!this._isXD){
+_3.supportedConnectionTypes=dojo.map(dojox.cometd.connectionTypes.pairs,"return item[0]");
+}
+_3=this._extendOut(_3);
+var _c={url:this.url,handleAs:this.handleAs,content:{"message":dojo.toJson([_3])},load:dojo.hitch(this,function(_d){
+this._backon();
+this._finishInit(_d);
+}),error:dojo.hitch(this,function(e){
+this._backoff();
+this._finishInit(e);
+}),timeout:this.expectedNetworkDelay};
+if(_4){
+dojo.mixin(_c,_4);
+}
+this._props=_3;
+for(var _e in this._subscriptions){
+for(var _f in this._subscriptions[_e]){
+if(this._subscriptions[_e][_f].topic){
+dojo.unsubscribe(this._subscriptions[_e][_f].topic);
+}
+}
+}
+this._messageQ=[];
+this._subscriptions=[];
+this._initialized=true;
+this._status="handshaking";
+this.batch=0;
+this.startBatch();
+var r;
+if(this._isXD){
+_c.callbackParamName="jsonp";
+r=dojo.io.script.get(_c);
+}else{
+r=dojo.xhrPost(_c);
+}
+return r;
+};
+this.publish=function(_10,_11,_12){
+var _13={data:_11,channel:_10};
+if(_12){
+dojo.mixin(_13,_12);
+}
+this._sendMessage(_13);
+};
+this.subscribe=function(_14,_15,_16,_17){
+_17=_17||{};
+if(_15){
+var _18=_1+_14;
+var _19=this._subscriptions[_18];
+if(!_19||_19.length==0){
+_19=[];
+_17.channel="/meta/subscribe";
+_17.subscription=_14;
+this._sendMessage(_17);
+var _1a=this._deferredSubscribes;
+if(_1a[_14]){
+_1a[_14].cancel();
+delete _1a[_14];
+}
+_1a[_14]=new dojo.Deferred();
+}
+for(var i in _19){
+if(_19[i].objOrFunc===_15&&(!_19[i].funcName&&!_16||_19[i].funcName==_16)){
+return null;
+}
+}
+var _1b=dojo.subscribe(_18,_15,_16);
+_19.push({topic:_1b,objOrFunc:_15,funcName:_16});
+this._subscriptions[_18]=_19;
+}
+var ret=this._deferredSubscribes[_14]||{};
+ret.args=dojo._toArray(arguments);
+return ret;
+};
+this.unsubscribe=function(_1c,_1d,_1e,_1f){
+if((arguments.length==1)&&(!dojo.isString(_1c))&&(_1c.args)){
+return this.unsubscribe.apply(this,_1c.args);
+}
+var _20=_1+_1c;
+var _21=this._subscriptions[_20];
+if(!_21||_21.length==0){
+return null;
+}
+var s=0;
+for(var i in _21){
+var sb=_21[i];
+if((!_1d)||(sb.objOrFunc===_1d&&(!sb.funcName&&!_1e||sb.funcName==_1e))){
+dojo.unsubscribe(_21[i].topic);
+delete _21[i];
+}else{
+s++;
+}
+}
+if(s==0){
+_1f=_1f||{};
+_1f.channel="/meta/unsubscribe";
+_1f.subscription=_1c;
+delete this._subscriptions[_20];
+this._sendMessage(_1f);
+this._deferredUnsubscribes[_1c]=new dojo.Deferred();
+if(this._deferredSubscribes[_1c]){
+this._deferredSubscribes[_1c].cancel();
+delete this._deferredSubscribes[_1c];
+}
+}
+return this._deferredUnsubscribes[_1c];
+};
+this.disconnect=function(){
+for(var _22 in this._subscriptions){
+for(var sub in this._subscriptions[_22]){
+if(this._subscriptions[_22][sub].topic){
+dojo.unsubscribe(this._subscriptions[_22][sub].topic);
+}
+}
+}
+this._subscriptions=[];
+this._messageQ=[];
+if(this._initialized&&this.currentTransport){
+this._initialized=false;
+this.currentTransport.disconnect();
+}
+if(!this._polling){
+this._publishMeta("connect",false);
+}
+this._initialized=false;
+this._handshook=false;
+this._status="disconnected";
+this._publishMeta("disconnect",true);
+};
+this.subscribed=function(_23,_24){
+};
+this.unsubscribed=function(_25,_26){
+};
+this.tunnelInit=function(_27,_28){
+};
+this.tunnelCollapse=function(){
+};
+this._backoff=function(){
+if(!this._advice){
+this._advice={reconnect:"retry",interval:0};
+}else{
+if(!this._advice.interval){
+this._advice.interval=0;
+}
+}
+if(this._backoffInterval<this._backoffMax){
+this._backoffInterval+=this._backoffIncrement;
+}
+};
+this._backon=function(){
+this._backoffInterval=0;
+};
+this._interval=function(){
+var i=this._backoffInterval+(this._advice?(this._advice.interval?this._advice.interval:0):0);
+if(i>0){
+}
+return i;
+};
+this._publishMeta=function(_29,_2a,_2b){
+try{
+var _2c={cometd:this,action:_29,successful:_2a,state:this.state()};
+if(_2b){
+dojo.mixin(_2c,_2b);
+}
+dojo.publish(this.prefix+"/meta",[_2c]);
+}
+catch(e){
+}
+};
+this._finishInit=function(_2d){
+if(this._status!="handshaking"){
+return;
+}
+var _2e=this._handshook;
+var _2f=false;
+var _30={};
+if(_2d instanceof Error){
+dojo.mixin(_30,{reestablish:false,failure:true,error:_2d,advice:this._advice});
+}else{
+_2d=_2d[0];
+_2d=this._extendIn(_2d);
+this.handshakeReturn=_2d;
+if(_2d["advice"]){
+this._advice=_2d.advice;
+}
+_2f=_2d.successful?_2d.successful:false;
+if(_2d.version<this.minimumVersion){
+if(console.log){
+}
+_2f=false;
+this._advice.reconnect="none";
+}
+dojo.mixin(_30,{reestablish:_2f&&_2e,response:_2d});
+}
+this._publishMeta("handshake",_2f,_30);
+if(this._status!="handshaking"){
+return;
+}
+if(_2f){
+this._status="connecting";
+this._handshook=true;
+this.currentTransport=dojox.cometd.connectionTypes.match(_2d.supportedConnectionTypes,_2d.version,this._isXD);
+var _31=this.currentTransport;
+_31._cometd=this;
+_31.version=_2d.version;
+this.clientId=_2d.clientId;
+this.tunnelInit=_31.tunnelInit&&dojo.hitch(_31,"tunnelInit");
+this.tunnelCollapse=_31.tunnelCollapse&&dojo.hitch(_31,"tunnelCollapse");
+_31.startup(_2d);
+}else{
+if(!this._advice||this._advice["reconnect"]!="none"){
+setTimeout(dojo.hitch(this,"init",this.url,this._props),this._interval());
+}
+}
+};
+this._extendIn=function(_32){
+dojo.forEach(dojox.cometd._extendInList,function(f){
+_32=f(_32)||_32;
+});
+return _32;
+};
+this._extendOut=function(_33){
+dojo.forEach(dojox.cometd._extendOutList,function(f){
+_33=f(_33)||_33;
+});
+return _33;
+};
+this.deliver=function(_34){
+dojo.forEach(_34,this._deliver,this);
+return _34;
+};
+this._deliver=function(_35){
+_35=this._extendIn(_35);
+if(!_35["channel"]){
+if(_35["success"]!==true){
+return;
+}
+}
+this.lastMessage=_35;
+if(_35.advice){
+this._advice=_35.advice;
+}
+var _36=null;
+if((_35["channel"])&&(_35.channel.length>5)&&(_35.channel.substr(0,5)=="/meta")){
+switch(_35.channel){
+case "/meta/connect":
+var _37={response:_35};
+if(_35.successful){
+if(this._status!="connected"){
+this._status="connected";
+this.endBatch();
+}
+}
+if(this._initialized){
+this._publishMeta("connect",_35.successful,_37);
+}
+break;
+case "/meta/subscribe":
+_36=this._deferredSubscribes[_35.subscription];
+try{
+if(!_35.successful){
+if(_36){
+_36.errback(new Error(_35.error));
+}
+this.currentTransport.cancelConnect();
+return;
+}
+if(_36){
+_36.callback(true);
+}
+this.subscribed(_35.subscription,_35);
+}
+catch(e){
+log.warn(e);
+}
+break;
+case "/meta/unsubscribe":
+_36=this._deferredUnsubscribes[_35.subscription];
+try{
+if(!_35.successful){
+if(_36){
+_36.errback(new Error(_35.error));
+}
+this.currentTransport.cancelConnect();
+return;
+}
+if(_36){
+_36.callback(true);
+}
+this.unsubscribed(_35.subscription,_35);
+}
+catch(e){
+log.warn(e);
+}
+break;
+default:
+if(_35.successful&&!_35.successful){
+this.currentTransport.cancelConnect();
+return;
+}
+}
+}
+this.currentTransport.deliver(_35);
+if(_35.data){
+try{
+var _38=[_35];
+var _39=_1+_35.channel;
+var _3a=_35.channel.split("/");
+var _3b=_1;
+for(var i=1;i<_3a.length-1;i++){
+dojo.publish(_3b+"/**",_38);
+_3b+="/"+_3a[i];
+}
+dojo.publish(_3b+"/**",_38);
+dojo.publish(_3b+"/*",_38);
+dojo.publish(_39,_38);
+}
+catch(e){
+}
+}
+};
+this._sendMessage=function(_3c){
+if(this.currentTransport&&!this.batch){
+return this.currentTransport.sendMessages([_3c]);
+}else{
+this._messageQ.push(_3c);
+return null;
+}
+};
+this.startBatch=function(){
+this.batch++;
+};
+this.endBatch=function(){
+if(--this.batch<=0&&this.currentTransport&&this._status=="connected"){
+this.batch=0;
+var _3d=this._messageQ;
+this._messageQ=[];
+if(_3d.length>0){
+this.currentTransport.sendMessages(_3d);
+}
+}
+};
+this._onUnload=function(){
+dojo.addOnUnload(dojox.cometd,"disconnect");
+};
+this._connectTimeout=function(){
+var _3e=0;
+if(this._advice&&this._advice.timeout&&this.expectedNetworkDelay>0){
+_3e=this._advice.timeout+this.expectedNetworkDelay;
+}
+if(this.connectTimeout>0&&this.connectTimeout<_3e){
+return this.connectTimeout;
+}
+return _3e;
+};
+},connectionTypes:new dojo.AdapterRegistry(true)};
+dojox.cometd.Connection.call(dojox.cometd,"/cometd");
+dojo.addOnUnload(dojox.cometd,"_onUnload");
+}
Index: trunk/web/dojo/dojox/cometd/longPollTransportFormEncoded.js
===================================================================
--- trunk/web/dojo/dojox/cometd/longPollTransportFormEncoded.js	(revision 0)
+++ trunk/web/dojo/dojox/cometd/longPollTransportFormEncoded.js	(revision 9)
@@ -0,0 +1,118 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.cometd.longPollTransportFormEncoded"]){
+dojo._hasResource["dojox.cometd.longPollTransportFormEncoded"]=true;
+dojo.provide("dojox.cometd.longPollTransportFormEncoded");
+dojo.require("dojox.cometd._base");
+dojox.cometd.longPollTransportFormEncoded=new function(){
+this._connectionType="long-polling";
+this._cometd=null;
+this.check=function(_1,_2,_3){
+return ((!_3)&&(dojo.indexOf(_1,"long-polling")>=0));
+};
+this.tunnelInit=function(){
+var _4={channel:"/meta/connect",clientId:this._cometd.clientId,connectionType:this._connectionType,id:""+this._cometd.messageId++};
+_4=this._cometd._extendOut(_4);
+this.openTunnelWith({message:dojo.toJson([_4])});
+};
+this.tunnelCollapse=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._advice&&this._cometd._advice["reconnect"]=="none"){
+return;
+}
+var _5=this._cometd._interval();
+if(this._cometd._status=="connected"){
+setTimeout(dojo.hitch(this,"_connect"),_5);
+}else{
+setTimeout(dojo.hitch(this._cometd,function(){
+this.init(this.url,this._props);
+}),_5);
+}
+};
+this._connect=function(){
+if(!this._cometd._initialized){
+return;
+}
+if(this._cometd._polling){
+return;
+}
+if((this._cometd._advice)&&(this._cometd._advice["reconnect"]=="handshake")){
+this._cometd._status="unconnected";
+this._initialized=false;
+this._cometd.init(this._cometd.url,this._cometd._props);
+}else{
+if(this._cometd._status=="connected"){
+var _6={channel:"/meta/connect",connectionType:this._connectionType,clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+if(this._cometd.connectTimeout>=this._cometd.expectedNetworkDelay){
+_6.advice={timeout:this._cometd.connectTimeout-this._cometd.expectedNetworkDelay};
+}
+_6=this._cometd._extendOut(_6);
+this.openTunnelWith({message:dojo.toJson([_6])});
+}
+}
+};
+this.deliver=function(_7){
+};
+this.openTunnelWith=function(_8,_9){
+this._cometd._polling=true;
+var _a={url:(_9||this._cometd.url),content:_8,handleAs:this._cometd.handleAs,load:dojo.hitch(this,function(_b){
+this._cometd._polling=false;
+this._cometd.deliver(_b);
+this._cometd._backon();
+this.tunnelCollapse();
+}),error:dojo.hitch(this,function(_c){
+var _d={failure:true,error:_c,advice:this._cometd._advice};
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false,_d);
+this._cometd._backoff();
+this.tunnelCollapse();
+})};
+var _e=this._cometd._connectTimeout();
+if(_e>0){
+_a.timeout=_e;
+}
+this._poll=dojo.xhrPost(_a);
+};
+this.sendMessages=function(_f){
+for(var i=0;i<_f.length;i++){
+_f[i].clientId=this._cometd.clientId;
+_f[i].id=""+this._cometd.messageId++;
+_f[i]=this._cometd._extendOut(_f[i]);
+}
+return dojo.xhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,load:dojo.hitch(this._cometd,"deliver"),content:{message:dojo.toJson(_f)},error:dojo.hitch(this,function(err){
+this._cometd._publishMeta("publish",false,{messages:_f});
+}),timeout:this._cometd.expectedNetworkDelay});
+};
+this.startup=function(_10){
+if(this._cometd._status=="connected"){
+return;
+}
+this.tunnelInit();
+};
+this.disconnect=function(){
+var _11={channel:"/meta/disconnect",clientId:this._cometd.clientId,id:""+this._cometd.messageId++};
+_11=this._cometd._extendOut(_11);
+dojo.xhrPost({url:this._cometd.url||dojo.config["cometdRoot"],handleAs:this._cometd.handleAs,content:{message:dojo.toJson([_11])}});
+};
+this.cancelConnect=function(){
+if(this._poll){
+this._poll.cancel();
+this._cometd._polling=false;
+this._cometd._publishMeta("connect",false,{cancel:true});
+this._cometd._backoff();
+this.disconnect();
+this.tunnelCollapse();
+}
+};
+};
+dojox.cometd.longPollTransport=dojox.cometd.longPollTransportFormEncoded;
+dojox.cometd.connectionTypes.register("long-polling",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportFormEncoded);
+dojox.cometd.connectionTypes.register("long-polling-form-encoded",dojox.cometd.longPollTransport.check,dojox.cometd.longPollTransportFormEncoded);
+}
Index: trunk/web/dojo/dojox/collections/Dictionary.js
===================================================================
--- trunk/web/dojo/dojox/collections/Dictionary.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/Dictionary.js	(revision 9)
@@ -0,0 +1,91 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections.Dictionary"]){
+dojo._hasResource["dojox.collections.Dictionary"]=true;
+dojo.provide("dojox.collections.Dictionary");
+dojo.require("dojox.collections._base");
+dojox.collections.Dictionary=function(_1){
+var _2={};
+this.count=0;
+var _3={};
+this.add=function(k,v){
+var b=(k in _2);
+_2[k]=new dojox.collections.DictionaryEntry(k,v);
+if(!b){
+this.count++;
+}
+};
+this.clear=function(){
+_2={};
+this.count=0;
+};
+this.clone=function(){
+return new dojox.collections.Dictionary(this);
+};
+this.contains=this.containsKey=function(k){
+if(_3[k]){
+return false;
+}
+return (_2[k]!=null);
+};
+this.containsValue=function(v){
+var e=this.getIterator();
+while(e.get()){
+if(e.element.value==v){
+return true;
+}
+}
+return false;
+};
+this.entry=function(k){
+return _2[k];
+};
+this.forEach=function(fn,_4){
+var a=[];
+for(var p in _2){
+if(!_3[p]){
+a.push(_2[p]);
+}
+}
+dojo.forEach(a,fn,_4);
+};
+this.getKeyList=function(){
+return (this.getIterator()).map(function(_5){
+return _5.key;
+});
+};
+this.getValueList=function(){
+return (this.getIterator()).map(function(_6){
+return _6.value;
+});
+};
+this.item=function(k){
+if(k in _2){
+return _2[k].valueOf();
+}
+return undefined;
+};
+this.getIterator=function(){
+return new dojox.collections.DictionaryIterator(_2);
+};
+this.remove=function(k){
+if(k in _2&&!_3[k]){
+delete _2[k];
+this.count--;
+return true;
+}
+return false;
+};
+if(_1){
+var e=_1.getIterator();
+while(e.get()){
+this.add(e.element.key,e.element.value);
+}
+}
+};
+}
Index: trunk/web/dojo/dojox/collections/Stack.js
===================================================================
--- trunk/web/dojo/dojox/collections/Stack.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/Stack.js	(revision 9)
@@ -0,0 +1,57 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections.Stack"]){
+dojo._hasResource["dojox.collections.Stack"]=true;
+dojo.provide("dojox.collections.Stack");
+dojo.require("dojox.collections._base");
+dojox.collections.Stack=function(_1){
+var q=[];
+if(_1){
+q=q.concat(_1);
+}
+this.count=q.length;
+this.clear=function(){
+q=[];
+this.count=q.length;
+};
+this.clone=function(){
+return new dojox.collections.Stack(q);
+};
+this.contains=function(o){
+for(var i=0;i<q.length;i++){
+if(q[i]==o){
+return true;
+}
+}
+return false;
+};
+this.copyTo=function(_2,i){
+_2.splice(i,0,q);
+};
+this.forEach=function(fn,_3){
+dojo.forEach(q,fn,_3);
+};
+this.getIterator=function(){
+return new dojox.collections.Iterator(q);
+};
+this.peek=function(){
+return q[(q.length-1)];
+};
+this.pop=function(){
+var r=q.pop();
+this.count=q.length;
+return r;
+};
+this.push=function(o){
+this.count=q.push(o);
+};
+this.toArray=function(){
+return [].concat(q);
+};
+};
+}
Index: trunk/web/dojo/dojox/collections/_base.js
===================================================================
--- trunk/web/dojo/dojox/collections/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/_base.js	(revision 9)
@@ -0,0 +1,71 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections._base"]){
+dojo._hasResource["dojox.collections._base"]=true;
+dojo.provide("dojox.collections._base");
+dojox.collections.DictionaryEntry=function(k,v){
+this.key=k;
+this.value=v;
+this.valueOf=function(){
+return this.value;
+};
+this.toString=function(){
+return String(this.value);
+};
+};
+dojox.collections.Iterator=function(_1){
+var a=_1;
+var _2=0;
+this.element=a[_2]||null;
+this.atEnd=function(){
+return (_2>=a.length);
+};
+this.get=function(){
+if(this.atEnd()){
+return null;
+}
+this.element=a[_2++];
+return this.element;
+};
+this.map=function(fn,_3){
+return dojo.map(a,fn,_3);
+};
+this.reset=function(){
+_2=0;
+this.element=a[_2];
+};
+};
+dojox.collections.DictionaryIterator=function(_4){
+var a=[];
+var _5={};
+for(var p in _4){
+if(!_5[p]){
+a.push(_4[p]);
+}
+}
+var _6=0;
+this.element=a[_6]||null;
+this.atEnd=function(){
+return (_6>=a.length);
+};
+this.get=function(){
+if(this.atEnd()){
+return null;
+}
+this.element=a[_6++];
+return this.element;
+};
+this.map=function(fn,_7){
+return dojo.map(a,fn,_7);
+};
+this.reset=function(){
+_6=0;
+this.element=a[_6];
+};
+};
+}
Index: trunk/web/dojo/dojox/collections/ArrayList.js
===================================================================
--- trunk/web/dojo/dojox/collections/ArrayList.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/ArrayList.js	(revision 9)
@@ -0,0 +1,104 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections.ArrayList"]){
+dojo._hasResource["dojox.collections.ArrayList"]=true;
+dojo.provide("dojox.collections.ArrayList");
+dojo.require("dojox.collections._base");
+dojox.collections.ArrayList=function(_1){
+var _2=[];
+if(_1){
+_2=_2.concat(_1);
+}
+this.count=_2.length;
+this.add=function(_3){
+_2.push(_3);
+this.count=_2.length;
+};
+this.addRange=function(a){
+if(a.getIterator){
+var e=a.getIterator();
+while(!e.atEnd()){
+this.add(e.get());
+}
+this.count=_2.length;
+}else{
+for(var i=0;i<a.length;i++){
+_2.push(a[i]);
+}
+this.count=_2.length;
+}
+};
+this.clear=function(){
+_2.splice(0,_2.length);
+this.count=0;
+};
+this.clone=function(){
+return new dojox.collections.ArrayList(_2);
+};
+this.contains=function(_4){
+for(var i=0;i<_2.length;i++){
+if(_2[i]==_4){
+return true;
+}
+}
+return false;
+};
+this.forEach=function(fn,_5){
+dojo.forEach(_2,fn,_5);
+};
+this.getIterator=function(){
+return new dojox.collections.Iterator(_2);
+};
+this.indexOf=function(_6){
+for(var i=0;i<_2.length;i++){
+if(_2[i]==_6){
+return i;
+}
+}
+return -1;
+};
+this.insert=function(i,_7){
+_2.splice(i,0,_7);
+this.count=_2.length;
+};
+this.item=function(i){
+return _2[i];
+};
+this.remove=function(_8){
+var i=this.indexOf(_8);
+if(i>=0){
+_2.splice(i,1);
+}
+this.count=_2.length;
+};
+this.removeAt=function(i){
+_2.splice(i,1);
+this.count=_2.length;
+};
+this.reverse=function(){
+_2.reverse();
+};
+this.sort=function(fn){
+if(fn){
+_2.sort(fn);
+}else{
+_2.sort();
+}
+};
+this.setByIndex=function(i,_9){
+_2[i]=_9;
+this.count=_2.length;
+};
+this.toArray=function(){
+return [].concat(_2);
+};
+this.toString=function(_a){
+return _2.join((_a||","));
+};
+};
+}
Index: trunk/web/dojo/dojox/collections/Set.js
===================================================================
--- trunk/web/dojo/dojox/collections/Set.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/Set.js	(revision 9)
@@ -0,0 +1,84 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections.Set"]){
+dojo._hasResource["dojox.collections.Set"]=true;
+dojo.provide("dojox.collections.Set");
+dojo.require("dojox.collections.ArrayList");
+(function(){
+var _1=dojox.collections;
+_1.Set=new (function(){
+function _2(_3){
+if(_3.constructor==Array){
+return new dojox.collections.ArrayList(_3);
+}
+return _3;
+};
+this.union=function(_4,_5){
+_4=_2(_4);
+_5=_2(_5);
+var _6=new dojox.collections.ArrayList(_4.toArray());
+var e=_5.getIterator();
+while(!e.atEnd()){
+var _7=e.get();
+if(!_6.contains(_7)){
+_6.add(_7);
+}
+}
+return _6;
+};
+this.intersection=function(_8,_9){
+_8=_2(_8);
+_9=_2(_9);
+var _a=new dojox.collections.ArrayList();
+var e=_9.getIterator();
+while(!e.atEnd()){
+var _b=e.get();
+if(_8.contains(_b)){
+_a.add(_b);
+}
+}
+return _a;
+};
+this.difference=function(_c,_d){
+_c=_2(_c);
+_d=_2(_d);
+var _e=new dojox.collections.ArrayList();
+var e=_c.getIterator();
+while(!e.atEnd()){
+var _f=e.get();
+if(!_d.contains(_f)){
+_e.add(_f);
+}
+}
+return _e;
+};
+this.isSubSet=function(_10,_11){
+_10=_2(_10);
+_11=_2(_11);
+var e=_10.getIterator();
+while(!e.atEnd()){
+if(!_11.contains(e.get())){
+return false;
+}
+}
+return true;
+};
+this.isSuperSet=function(_12,_13){
+_12=_2(_12);
+_13=_2(_13);
+var e=_13.getIterator();
+while(!e.atEnd()){
+if(!_12.contains(e.get())){
+return false;
+}
+}
+return true;
+};
+})();
+})();
+}
Index: trunk/web/dojo/dojox/collections/SortedList.js
===================================================================
--- trunk/web/dojo/dojox/collections/SortedList.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/SortedList.js	(revision 9)
@@ -0,0 +1,161 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections.SortedList"]){
+dojo._hasResource["dojox.collections.SortedList"]=true;
+dojo.provide("dojox.collections.SortedList");
+dojo.require("dojox.collections._base");
+dojox.collections.SortedList=function(_1){
+var _2=this;
+var _3={};
+var q=[];
+var _4=function(a,b){
+if(a.key>b.key){
+return 1;
+}
+if(a.key<b.key){
+return -1;
+}
+return 0;
+};
+var _5=function(){
+q=[];
+var e=_2.getIterator();
+while(!e.atEnd()){
+q.push(e.get());
+}
+q.sort(_4);
+};
+var _6={};
+this.count=q.length;
+this.add=function(k,v){
+if(!_3[k]){
+_3[k]=new dojox.collections.DictionaryEntry(k,v);
+this.count=q.push(_3[k]);
+q.sort(_4);
+}
+};
+this.clear=function(){
+_3={};
+q=[];
+this.count=q.length;
+};
+this.clone=function(){
+return new dojox.collections.SortedList(this);
+};
+this.contains=this.containsKey=function(k){
+if(_6[k]){
+return false;
+}
+return (_3[k]!=null);
+};
+this.containsValue=function(o){
+var e=this.getIterator();
+while(!e.atEnd()){
+var _7=e.get();
+if(_7.value==o){
+return true;
+}
+}
+return false;
+};
+this.copyTo=function(_8,i){
+var e=this.getIterator();
+var _9=i;
+while(!e.atEnd()){
+_8.splice(_9,0,e.get());
+_9++;
+}
+};
+this.entry=function(k){
+return _3[k];
+};
+this.forEach=function(fn,_a){
+dojo.forEach(q,fn,_a);
+};
+this.getByIndex=function(i){
+return q[i].valueOf();
+};
+this.getIterator=function(){
+return new dojox.collections.DictionaryIterator(_3);
+};
+this.getKey=function(i){
+return q[i].key;
+};
+this.getKeyList=function(){
+var _b=[];
+var e=this.getIterator();
+while(!e.atEnd()){
+_b.push(e.get().key);
+}
+return _b;
+};
+this.getValueList=function(){
+var _c=[];
+var e=this.getIterator();
+while(!e.atEnd()){
+_c.push(e.get().value);
+}
+return _c;
+};
+this.indexOfKey=function(k){
+for(var i=0;i<q.length;i++){
+if(q[i].key==k){
+return i;
+}
+}
+return -1;
+};
+this.indexOfValue=function(o){
+for(var i=0;i<q.length;i++){
+if(q[i].value==o){
+return i;
+}
+}
+return -1;
+};
+this.item=function(k){
+if(k in _3&&!_6[k]){
+return _3[k].valueOf();
+}
+return undefined;
+};
+this.remove=function(k){
+delete _3[k];
+_5();
+this.count=q.length;
+};
+this.removeAt=function(i){
+delete _3[q[i].key];
+_5();
+this.count=q.length;
+};
+this.replace=function(k,v){
+if(!_3[k]){
+this.add(k,v);
+return false;
+}else{
+_3[k]=new dojox.collections.DictionaryEntry(k,v);
+_5();
+return true;
+}
+};
+this.setByIndex=function(i,o){
+_3[q[i].key].value=o;
+_5();
+this.count=q.length;
+};
+if(_1){
+var e=_1.getIterator();
+while(!e.atEnd()){
+var _d=e.get();
+q[q.length]=_3[_d.key]=new dojox.collections.DictionaryEntry(_d.key,_d.value);
+}
+q.sort(_4);
+}
+};
+}
Index: trunk/web/dojo/dojox/collections/README
===================================================================
--- trunk/web/dojo/dojox/collections/README	(revision 0)
+++ trunk/web/dojo/dojox/collections/README	(revision 9)
@@ -0,0 +1,39 @@
+-------------------------------------------------------------------------------
+DojoX Collections
+-------------------------------------------------------------------------------
+Version 0.9
+Release date: 05/27/2007
+-------------------------------------------------------------------------------
+Project state: production
+-------------------------------------------------------------------------------
+Project authors
+	Tom Trenka (ttrenka@gmail.com)
+-------------------------------------------------------------------------------
+Project description
+
+DojoX Collections is the port of the original Dojo 0.4.x collection classes.
+It is intended for use by people who are looking for a little bit more 
+functionality out of common collections, like ArrayLists or Dictionaries.
+
+Included are the Iterator and DictionaryIterator classes, both of which can
+operate on standard arrays and objects (respectively).
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX Collections has no dependencies, outside of Dojo Core.
+-------------------------------------------------------------------------------
+Documentation
+
+See the API documentation for Dojo (http://dojotoolkit.org/api).
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/collections.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/collections/*
+
+Install into the following directory structure:
+/dojox/collections/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/collections/BinaryTree.js
===================================================================
--- trunk/web/dojo/dojox/collections/BinaryTree.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/BinaryTree.js	(revision 9)
@@ -0,0 +1,255 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections.BinaryTree"]){
+dojo._hasResource["dojox.collections.BinaryTree"]=true;
+dojo.provide("dojox.collections.BinaryTree");
+dojo.require("dojox.collections._base");
+dojox.collections.BinaryTree=function(_1){
+function _2(_3,_4,_5){
+this.value=_3||null;
+this.right=_4||null;
+this.left=_5||null;
+this.clone=function(){
+var c=new _2();
+if(this.value.value){
+c.value=this.value.clone();
+}else{
+c.value=this.value;
+}
+if(this.left!=null){
+c.left=this.left.clone();
+}
+if(this.right!=null){
+c.right=this.right.clone();
+}
+return c;
+};
+this.compare=function(n){
+if(this.value>n.value){
+return 1;
+}
+if(this.value<n.value){
+return -1;
+}
+return 0;
+};
+this.compareData=function(d){
+if(this.value>d){
+return 1;
+}
+if(this.value<d){
+return -1;
+}
+return 0;
+};
+};
+function _6(_7,a){
+if(_7){
+_6(_7.left,a);
+a.push(_7.value);
+_6(_7.right,a);
+}
+};
+function _8(_9,_a){
+var s="";
+if(_9){
+s=_9.value.toString()+_a;
+s+=_8(_9.left,_a);
+s+=_8(_9.right,_a);
+}
+return s;
+};
+function _b(_c,_d){
+var s="";
+if(_c){
+s=_b(_c.left,_d);
+s+=_c.value.toString()+_d;
+s+=_b(_c.right,_d);
+}
+return s;
+};
+function _e(_f,sep){
+var s="";
+if(_f){
+s=_e(_f.left,sep);
+s+=_e(_f.right,sep);
+s+=_f.value.toString()+sep;
+}
+return s;
+};
+function _10(_11,_12){
+if(!_11){
+return null;
+}
+var i=_11.compareData(_12);
+if(i==0){
+return _11;
+}
+if(i>0){
+return _10(_11.left,_12);
+}else{
+return _10(_11.right,_12);
+}
+};
+this.add=function(_13){
+var n=new _2(_13);
+var i;
+var _14=_15;
+var _16=null;
+while(_14){
+i=_14.compare(n);
+if(i==0){
+return;
+}
+_16=_14;
+if(i>0){
+_14=_14.left;
+}else{
+_14=_14.right;
+}
+}
+this.count++;
+if(!_16){
+_15=n;
+}else{
+i=_16.compare(n);
+if(i>0){
+_16.left=n;
+}else{
+_16.right=n;
+}
+}
+};
+this.clear=function(){
+_15=null;
+this.count=0;
+};
+this.clone=function(){
+var c=new dojox.collections.BinaryTree();
+var itr=this.getIterator();
+while(!itr.atEnd()){
+c.add(itr.get());
+}
+return c;
+};
+this.contains=function(_17){
+return this.search(_17)!=null;
+};
+this.deleteData=function(_18){
+var _19=_15;
+var _1a=null;
+var i=_19.compareData(_18);
+while(i!=0&&_19!=null){
+if(i>0){
+_1a=_19;
+_19=_19.left;
+}else{
+if(i<0){
+_1a=_19;
+_19=_19.right;
+}
+}
+i=_19.compareData(_18);
+}
+if(!_19){
+return;
+}
+this.count--;
+if(!_19.right){
+if(!_1a){
+_15=_19.left;
+}else{
+i=_1a.compare(_19);
+if(i>0){
+_1a.left=_19.left;
+}else{
+if(i<0){
+_1a.right=_19.left;
+}
+}
+}
+}else{
+if(!_19.right.left){
+if(!_1a){
+_15=_19.right;
+}else{
+i=_1a.compare(_19);
+if(i>0){
+_1a.left=_19.right;
+}else{
+if(i<0){
+_1a.right=_19.right;
+}
+}
+}
+}else{
+var _1b=_19.right.left;
+var _1c=_19.right;
+while(_1b.left!=null){
+_1c=_1b;
+_1b=_1b.left;
+}
+_1c.left=_1b.right;
+_1b.left=_19.left;
+_1b.right=_19.right;
+if(!_1a){
+_15=_1b;
+}else{
+i=_1a.compare(_19);
+if(i>0){
+_1a.left=_1b;
+}else{
+if(i<0){
+_1a.right=_1b;
+}
+}
+}
+}
+}
+};
+this.getIterator=function(){
+var a=[];
+_6(_15,a);
+return new dojox.collections.Iterator(a);
+};
+this.search=function(_1d){
+return _10(_15,_1d);
+};
+this.toString=function(_1e,sep){
+if(!_1e){
+_1e=dojox.collections.BinaryTree.TraversalMethods.Inorder;
+}
+if(!sep){
+sep=",";
+}
+var s="";
+switch(_1e){
+case dojox.collections.BinaryTree.TraversalMethods.Preorder:
+s=_8(_15,sep);
+break;
+case dojox.collections.BinaryTree.TraversalMethods.Inorder:
+s=_b(_15,sep);
+break;
+case dojox.collections.BinaryTree.TraversalMethods.Postorder:
+s=_e(_15,sep);
+break;
+}
+if(s.length==0){
+return "";
+}else{
+return s.substring(0,s.length-sep.length);
+}
+};
+this.count=0;
+var _15=this.root=null;
+if(_1){
+this.add(_1);
+}
+};
+dojox.collections.BinaryTree.TraversalMethods={Preorder:1,Inorder:2,Postorder:3};
+}
Index: trunk/web/dojo/dojox/collections/Queue.js
===================================================================
--- trunk/web/dojo/dojox/collections/Queue.js	(revision 0)
+++ trunk/web/dojo/dojox/collections/Queue.js	(revision 9)
@@ -0,0 +1,57 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.collections.Queue"]){
+dojo._hasResource["dojox.collections.Queue"]=true;
+dojo.provide("dojox.collections.Queue");
+dojo.require("dojox.collections._base");
+dojox.collections.Queue=function(_1){
+var q=[];
+if(_1){
+q=q.concat(_1);
+}
+this.count=q.length;
+this.clear=function(){
+q=[];
+this.count=q.length;
+};
+this.clone=function(){
+return new dojox.collections.Queue(q);
+};
+this.contains=function(o){
+for(var i=0;i<q.length;i++){
+if(q[i]==o){
+return true;
+}
+}
+return false;
+};
+this.copyTo=function(_2,i){
+_2.splice(i,0,q);
+};
+this.dequeue=function(){
+var r=q.shift();
+this.count=q.length;
+return r;
+};
+this.enqueue=function(o){
+this.count=q.push(o);
+};
+this.forEach=function(fn,_3){
+dojo.forEach(q,fn,_3);
+};
+this.getIterator=function(){
+return new dojox.collections.Iterator(q);
+};
+this.peek=function(){
+return q[0];
+};
+this.toArray=function(){
+return [].concat(q);
+};
+};
+}
Index: trunk/web/dojo/dojox/wire.js
===================================================================
--- trunk/web/dojo/dojox/wire.js	(revision 0)
+++ trunk/web/dojo/dojox/wire.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.wire"]){
+dojo._hasResource["dojox.wire"]=true;
+dojo.provide("dojox.wire");
+dojo.require("dojox.wire._base");
+}
Index: trunk/web/dojo/dojox/dtl/DomInline.js
===================================================================
--- trunk/web/dojo/dojox/dtl/DomInline.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/DomInline.js	(revision 9)
@@ -0,0 +1,35 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.DomInline"]){
+dojo._hasResource["dojox.dtl.DomInline"]=true;
+dojo.provide("dojox.dtl.DomInline");
+dojo.require("dojox.dtl.dom");
+dojo.require("dijit._Widget");
+dojox.dtl.DomInline=dojo.extend(function(_1,_2){
+this.create(_1,_2);
+},dijit._Widget.prototype,{context:null,render:function(_3){
+this.context=_3||this.context;
+this.postMixInProperties();
+var _4=this.template.render(this.context).getRootNode();
+if(_4!=this.containerNode){
+this.containerNode.parentNode.replaceChild(_4,this.containerNode);
+this.containerNode=_4;
+}
+},declaredClass:"dojox.dtl.Inline",buildRendering:function(){
+var _5=this.domNode=document.createElement("div");
+this.containerNode=_5.appendChild(document.createElement("div"));
+var _6=this.srcNodeRef;
+if(_6.parentNode){
+_6.parentNode.replaceChild(_5,_6);
+}
+this.template=new dojox.dtl.DomTemplate(dojo.trim(_6.text),true);
+this.render();
+},postMixInProperties:function(){
+this.context=(this.context.get===dojox.dtl._Context.prototype.get)?this.context:new dojox.dtl.Context(this.context);
+}});
+}
Index: trunk/web/dojo/dojox/dtl/Inline.js
===================================================================
--- trunk/web/dojo/dojox/dtl/Inline.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/Inline.js	(revision 9)
@@ -0,0 +1,31 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.Inline"]){
+dojo._hasResource["dojox.dtl.Inline"]=true;
+dojo.provide("dojox.dtl.Inline");
+dojo.require("dojox.dtl._base");
+dojo.require("dijit._Widget");
+dojox.dtl.Inline=dojo.extend(function(_1,_2){
+this.create(_1,_2);
+},dijit._Widget.prototype,{context:null,render:function(_3){
+this.context=_3||this.context;
+this.postMixInProperties();
+dojo.query("*",this.domNode).orphan();
+this.domNode.innerHTML=this.template.render(this.context);
+},declaredClass:"dojox.dtl.Inline",buildRendering:function(){
+var _4=this.domNode=document.createElement("div");
+var _5=this.srcNodeRef;
+if(_5.parentNode){
+_5.parentNode.replaceChild(_4,_5);
+}
+this.template=new dojox.dtl.Template(dojo.trim(_5.text),true);
+this.render();
+},postMixInProperties:function(){
+this.context=(this.context.get===dojox.dtl._Context.prototype.get)?this.context:new dojox.dtl._Context(this.context);
+}});
+}
Index: trunk/web/dojo/dojox/dtl/_DomTemplated.js
===================================================================
--- trunk/web/dojo/dojox/dtl/_DomTemplated.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/_DomTemplated.js	(revision 9)
@@ -0,0 +1,67 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl._DomTemplated"]){
+dojo._hasResource["dojox.dtl._DomTemplated"]=true;
+dojo.provide("dojox.dtl._DomTemplated");
+dojo.require("dijit._Templated");
+dojo.require("dojox.dtl.dom");
+dojo.require("dojox.dtl.render.dom");
+dojo.require("dojox.dtl.contrib.dijit");
+dojox.dtl._DomTemplated=function(){
+};
+dojox.dtl._DomTemplated.prototype={_dijitTemplateCompat:false,buildRendering:function(){
+this.domNode=this.srcNodeRef;
+if(!this._render){
+var _1=dojox.dtl.contrib.dijit;
+var _2=_1.widgetsInTemplate;
+_1.widgetsInTemplate=this.widgetsInTemplate;
+this.template=this.template||this._getCachedTemplate(this.templatePath,this.templateString);
+this._render=new dojox.dtl.render.dom.Render(this.domNode,this.template);
+_1.widgetsInTemplate=_2;
+}
+var _3=this._getContext();
+if(!this._created){
+delete _3._getter;
+}
+this.render(_3);
+this.domNode=this.template.getRootNode();
+if(this.srcNodeRef&&this.srcNodeRef.parentNode){
+dojo.destroy(this.srcNodeRef);
+delete this.srcNodeRef;
+}
+},setTemplate:function(_4,_5){
+if(dojox.dtl.text._isTemplate(_4)){
+this.template=this._getCachedTemplate(null,_4);
+}else{
+this.template=this._getCachedTemplate(_4);
+}
+this.render(_5);
+},render:function(_6,_7){
+if(_7){
+this.template=_7;
+}
+this._render.render(this._getContext(_6),this.template);
+},_getContext:function(_8){
+if(!(_8 instanceof dojox.dtl.Context)){
+_8=false;
+}
+_8=_8||new dojox.dtl.Context(this);
+_8.setThis(this);
+return _8;
+},_getCachedTemplate:function(_9,_a){
+if(!this._templates){
+this._templates={};
+}
+var _b=_a||_9.toString();
+var _c=this._templates;
+if(_c[_b]){
+return _c[_b];
+}
+return (_c[_b]=new dojox.dtl.DomTemplate(dijit._Templated.getCachedTemplate(_9,_a,true)));
+}};
+}
Index: trunk/web/dojo/dojox/dtl/_Templated.js
===================================================================
--- trunk/web/dojo/dojox/dtl/_Templated.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/_Templated.js	(revision 9)
@@ -0,0 +1,94 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl._Templated"]){
+dojo._hasResource["dojox.dtl._Templated"]=true;
+dojo.provide("dojox.dtl._Templated");
+dojo.require("dijit._Templated");
+dojo.require("dojox.dtl._base");
+dojo.declare("dojox.dtl._Templated",dijit._Templated,{_dijitTemplateCompat:false,buildRendering:function(){
+var _1;
+if(this.domNode&&!this._template){
+return;
+}
+if(!this._template){
+var t=this.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);
+if(t instanceof dojox.dtl.Template){
+this._template=t;
+}else{
+_1=t;
+}
+}
+if(!_1){
+var _2=new dojox.dtl._Context(this);
+if(!this._created){
+delete _2._getter;
+}
+var _3=dojo._toDom(this._template.render(_2));
+if(_3.nodeType!==1&&_3.nodeType!==3){
+for(var i=0,l=_3.childNodes.length;i<l;++i){
+_1=_3.childNodes[i];
+if(_1.nodeType==1){
+break;
+}
+}
+}else{
+_1=_3;
+}
+}
+this._attachTemplateNodes(_1);
+if(this.widgetsInTemplate){
+var _4=dojo.parser,_5,_6;
+if(_4._query!="[dojoType]"){
+_5=_4._query;
+_6=_4._attrName;
+_4._query="[dojoType]";
+_4._attrName="dojoType";
+}
+var cw=(this._startupWidgets=dojo.parser.parse(_1,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));
+if(_5){
+_4._query=_5;
+_4._attrName=_6;
+}
+this._supportingWidgets=dijit.findWidgets(_1);
+this._attachTemplateNodes(cw,function(n,p){
+return n[p];
+});
+}
+if(this.domNode){
+dojo.place(_1,this.domNode,"before");
+this.destroyDescendants();
+dojo.destroy(this.domNode);
+}
+this.domNode=_1;
+this._fillContent(this.srcNodeRef);
+},_templateCache:{},getCachedTemplate:function(_7,_8,_9){
+var _a=this._templateCache;
+var _b=_8||_7;
+if(_a[_b]){
+return _a[_b];
+}
+_8=dojo.string.trim(_8||dojo.cache(_7,{sanitize:true}));
+if(this._dijitTemplateCompat&&(_9||_8.match(/\$\{([^\}]+)\}/g))){
+_8=this._stringRepl(_8);
+}
+if(_9||!_8.match(/\{[{%]([^\}]+)[%}]\}/g)){
+return _a[_b]=dojo._toDom(_8);
+}else{
+return _a[_b]=new dojox.dtl.Template(_8);
+}
+},render:function(){
+this.buildRendering();
+},startup:function(){
+dojo.forEach(this._startupWidgets,function(w){
+if(w&&!w._started&&w.startup){
+w.startup();
+}
+});
+this.inherited(arguments);
+}});
+}
Index: trunk/web/dojo/dojox/dtl/ext-dojo/NodeList.js
===================================================================
--- trunk/web/dojo/dojox/dtl/ext-dojo/NodeList.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/ext-dojo/NodeList.js	(revision 9)
@@ -0,0 +1,29 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]){
+dojo._hasResource["dojox.dtl.ext-dojo.NodeList"]=true;
+dojo.provide("dojox.dtl.ext-dojo.NodeList");
+dojo.require("dojox.dtl._base");
+dojo.extend(dojo.NodeList,{dtl:function(_1,_2){
+var d=dojox.dtl;
+var _3=this;
+var _4=function(_5,_6){
+var _7=_5.render(new d._Context(_6));
+_3.forEach(function(_8){
+_8.innerHTML=_7;
+});
+};
+d.text._resolveTemplateArg(_1).addCallback(function(_9){
+_1=new d.Template(_9);
+d.text._resolveContextArg(_2).addCallback(function(_a){
+_4(_1,_a);
+});
+});
+return this;
+}});
+}
Index: trunk/web/dojo/dojox/dtl/dom.js
===================================================================
--- trunk/web/dojo/dojox/dtl/dom.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/dom.js	(revision 9)
@@ -0,0 +1,864 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.dom"]){
+dojo._hasResource["dojox.dtl.dom"]=true;
+dojo.provide("dojox.dtl.dom");
+dojo.require("dojox.dtl._base");
+dojo.require("dojox.dtl.Context");
+(function(){
+var dd=dojox.dtl;
+dd.BOOLS={checked:1,disabled:1,readonly:1};
+dd.TOKEN_CHANGE=-11;
+dd.TOKEN_ATTR=-12;
+dd.TOKEN_CUSTOM=-13;
+dd.TOKEN_NODE=1;
+var _1=dd.text;
+var _2=dd.dom={_attributes:{},_uppers:{},_re4:/^function anonymous\(\)\s*{\s*(.*)\s*}$/,_reTrim:/(?:^[\n\s]*(\{%)?\s*|\s*(%\})?[\n\s]*$)/g,_reSplit:/\s*%\}[\n\s]*\{%\s*/g,getTemplate:function(_3){
+if(typeof this._commentable=="undefined"){
+this._commentable=false;
+var _4=document.createElement("div");
+_4.innerHTML="<!--Test comment handling, and long comments, using comments whenever possible.-->";
+if(_4.childNodes.length&&_4.childNodes[0].nodeType==8&&_4.childNodes[0].data=="comment"){
+this._commentable=true;
+}
+}
+if(!this._commentable){
+_3=_3.replace(/<!--({({|%).*?(%|})})-->/g,"$1");
+}
+if(dojo.isIE){
+_3=_3.replace(/\b(checked|disabled|readonly|style)="/g,"t$1=\"");
+}
+_3=_3.replace(/\bstyle="/g,"tstyle=\"");
+var _5;
+var _6=dojo.isWebKit;
+var _7=[[true,"select","option"],[_6,"tr","td|th"],[_6,"thead","tr","th"],[_6,"tbody","tr","td"],[_6,"table","tbody|thead|tr","tr","td"]];
+var _8=[];
+for(var i=0,_9;_9=_7[i];i++){
+if(!_9[0]){
+continue;
+}
+if(_3.indexOf("<"+_9[1])!=-1){
+var _a=new RegExp("<"+_9[1]+"(?:.|\n)*?>((?:.|\n)+?)</"+_9[1]+">","ig");
+tagLoop:
+while(_5=_a.exec(_3)){
+var _b=_9[2].split("|");
+var _c=[];
+for(var j=0,_d;_d=_b[j];j++){
+_c.push("<"+_d+"(?:.|\n)*?>(?:.|\n)*?</"+_d+">");
+}
+var _e=[];
+var _f=dojox.string.tokenize(_5[1],new RegExp("("+_c.join("|")+")","ig"),function(_10){
+var tag=/<(\w+)/.exec(_10)[1];
+if(!_e[tag]){
+_e[tag]=true;
+_e.push(tag);
+}
+return {data:_10};
+});
+if(_e.length){
+var tag=(_e.length==1)?_e[0]:_9[2].split("|")[0];
+var _11=[];
+for(var j=0,jl=_f.length;j<jl;j++){
+var _12=_f[j];
+if(dojo.isObject(_12)){
+_11.push(_12.data);
+}else{
+var _13=_12.replace(this._reTrim,"");
+if(!_13){
+continue;
+}
+_12=_13.split(this._reSplit);
+for(var k=0,kl=_12.length;k<kl;k++){
+var _14="";
+for(var p=2,pl=_9.length;p<pl;p++){
+if(p==2){
+_14+="<"+tag+" dtlinstruction=\"{% "+_12[k].replace("\"","\\\"")+" %}\">";
+}else{
+if(tag==_9[p]){
+continue;
+}else{
+_14+="<"+_9[p]+">";
+}
+}
+}
+_14+="DTL";
+for(var p=_9.length-1;p>1;p--){
+if(p==2){
+_14+="</"+tag+">";
+}else{
+if(tag==_9[p]){
+continue;
+}else{
+_14+="</"+_9[p]+">";
+}
+}
+}
+_11.push("ÿ"+_8.length);
+_8.push(_14);
+}
+}
+}
+_3=_3.replace(_5[1],_11.join(""));
+}
+}
+}
+}
+for(var i=_8.length;i--;){
+_3=_3.replace("ÿ"+i,_8[i]);
+}
+var re=/\b([a-zA-Z_:][a-zA-Z0-9_\-\.:]*)=['"]/g;
+while(_5=re.exec(_3)){
+var _15=_5[1].toLowerCase();
+if(_15=="dtlinstruction"){
+continue;
+}
+if(_15!=_5[1]){
+this._uppers[_15]=_5[1];
+}
+this._attributes[_15]=true;
+}
+var _4=document.createElement("div");
+_4.innerHTML=_3;
+var _16={nodes:[]};
+while(_4.childNodes.length){
+_16.nodes.push(_4.removeChild(_4.childNodes[0]));
+}
+return _16;
+},tokenize:function(_17){
+var _18=[];
+for(var i=0,_19;_19=_17[i++];){
+if(_19.nodeType!=1){
+this.__tokenize(_19,_18);
+}else{
+this._tokenize(_19,_18);
+}
+}
+return _18;
+},_swallowed:[],_tokenize:function(_1a,_1b){
+var _1c=false;
+var _1d=this._swallowed;
+var i,j,tag,_1e;
+if(!_1b.first){
+_1c=_1b.first=true;
+var _1f=dd.register.getAttributeTags();
+for(i=0;tag=_1f[i];i++){
+try{
+(tag[2])({swallowNode:function(){
+throw 1;
+}},new dd.Token(dd.TOKEN_ATTR,""));
+}
+catch(e){
+_1d.push(tag);
+}
+}
+}
+for(i=0;tag=_1d[i];i++){
+var _20=_1a.getAttribute(tag[0]);
+if(_20){
+var _1d=false;
+var _21=(tag[2])({swallowNode:function(){
+_1d=true;
+return _1a;
+}},new dd.Token(dd.TOKEN_ATTR,tag[0]+" "+_20));
+if(_1d){
+if(_1a.parentNode&&_1a.parentNode.removeChild){
+_1a.parentNode.removeChild(_1a);
+}
+_1b.push([dd.TOKEN_CUSTOM,_21]);
+return;
+}
+}
+}
+var _22=[];
+if(dojo.isIE&&_1a.tagName=="SCRIPT"){
+_22.push({nodeType:3,data:_1a.text});
+_1a.text="";
+}else{
+for(i=0;_1e=_1a.childNodes[i];i++){
+_22.push(_1e);
+}
+}
+_1b.push([dd.TOKEN_NODE,_1a]);
+var _23=false;
+if(_22.length){
+_1b.push([dd.TOKEN_CHANGE,_1a]);
+_23=true;
+}
+for(var key in this._attributes){
+var _24=false;
+var _25="";
+if(key=="class"){
+_25=_1a.className||_25;
+}else{
+if(key=="for"){
+_25=_1a.htmlFor||_25;
+}else{
+if(key=="value"&&_1a.value==_1a.innerHTML){
+continue;
+}else{
+if(_1a.getAttribute){
+_25=_1a.getAttribute(key,2)||_25;
+if(key=="href"||key=="src"){
+if(dojo.isIE){
+var _26=location.href.lastIndexOf(location.hash);
+var _27=location.href.substring(0,_26).split("/");
+_27.pop();
+_27=_27.join("/")+"/";
+if(_25.indexOf(_27)==0){
+_25=_25.replace(_27,"");
+}
+_25=decodeURIComponent(_25);
+}
+}else{
+if(key=="tstyle"){
+_24=key;
+key="style";
+}else{
+if(dd.BOOLS[key.slice(1)]&&dojo.trim(_25)){
+key=key.slice(1);
+}else{
+if(this._uppers[key]&&dojo.trim(_25)){
+_24=this._uppers[key];
+}
+}
+}
+}
+}
+}
+}
+}
+if(_24){
+_1a.setAttribute(_24,"");
+_1a.removeAttribute(_24);
+}
+if(typeof _25=="function"){
+_25=_25.toString().replace(this._re4,"$1");
+}
+if(!_23){
+_1b.push([dd.TOKEN_CHANGE,_1a]);
+_23=true;
+}
+_1b.push([dd.TOKEN_ATTR,_1a,key,_25]);
+}
+for(i=0,_1e;_1e=_22[i];i++){
+if(_1e.nodeType==1){
+var _28=_1e.getAttribute("dtlinstruction");
+if(_28){
+_1e.parentNode.removeChild(_1e);
+_1e={nodeType:8,data:_28};
+}
+}
+this.__tokenize(_1e,_1b);
+}
+if(!_1c&&_1a.parentNode&&_1a.parentNode.tagName){
+if(_23){
+_1b.push([dd.TOKEN_CHANGE,_1a,true]);
+}
+_1b.push([dd.TOKEN_CHANGE,_1a.parentNode]);
+_1a.parentNode.removeChild(_1a);
+}else{
+_1b.push([dd.TOKEN_CHANGE,_1a,true,true]);
+}
+},__tokenize:function(_29,_2a){
+var _2b=_29.data;
+switch(_29.nodeType){
+case 1:
+this._tokenize(_29,_2a);
+return;
+case 3:
+if(_2b.match(/[^\s\n]/)&&(_2b.indexOf("{{")!=-1||_2b.indexOf("{%")!=-1)){
+var _2c=_1.tokenize(_2b);
+for(var j=0,_2d;_2d=_2c[j];j++){
+if(typeof _2d=="string"){
+_2a.push([dd.TOKEN_TEXT,_2d]);
+}else{
+_2a.push(_2d);
+}
+}
+}else{
+_2a.push([_29.nodeType,_29]);
+}
+if(_29.parentNode){
+_29.parentNode.removeChild(_29);
+}
+return;
+case 8:
+if(_2b.indexOf("{%")==0){
+var _2d=dojo.trim(_2b.slice(2,-2));
+if(_2d.substr(0,5)=="load "){
+var _2e=dojo.trim(_2d).split(/\s+/g);
+for(var i=1,_2f;_2f=_2e[i];i++){
+dojo["require"](_2f);
+}
+}
+_2a.push([dd.TOKEN_BLOCK,_2d]);
+}
+if(_2b.indexOf("{{")==0){
+_2a.push([dd.TOKEN_VAR,dojo.trim(_2b.slice(2,-2))]);
+}
+if(_29.parentNode){
+_29.parentNode.removeChild(_29);
+}
+return;
+}
+}};
+dd.DomTemplate=dojo.extend(function(obj){
+if(!obj.nodes){
+var _30=dojo.byId(obj);
+if(_30&&_30.nodeType==1){
+dojo.forEach(["class","src","href","name","value"],function(_31){
+_2._attributes[_31]=true;
+});
+obj={nodes:[_30]};
+}else{
+if(typeof obj=="object"){
+obj=_1.getTemplateString(obj);
+}
+obj=_2.getTemplate(obj);
+}
+}
+var _32=_2.tokenize(obj.nodes);
+if(dd.tests){
+this.tokens=_32.slice(0);
+}
+var _33=new dd._DomParser(_32);
+this.nodelist=_33.parse();
+},{_count:0,_re:/\bdojo:([a-zA-Z0-9_]+)\b/g,setClass:function(str){
+this.getRootNode().className=str;
+},getRootNode:function(){
+return this.buffer.rootNode;
+},getBuffer:function(){
+return new dd.DomBuffer();
+},render:function(_34,_35){
+_35=this.buffer=_35||this.getBuffer();
+this.rootNode=null;
+var _36=this.nodelist.render(_34||new dd.Context({}),_35);
+for(var i=0,_37;_37=_35._cache[i];i++){
+if(_37._cache){
+_37._cache.length=0;
+}
+}
+return _36;
+},unrender:function(_38,_39){
+return this.nodelist.unrender(_38,_39);
+}});
+dd.DomBuffer=dojo.extend(function(_3a){
+this._parent=_3a;
+this._cache=[];
+},{concat:function(_3b){
+var _3c=this._parent;
+if(_3c&&_3b.parentNode&&_3b.parentNode===_3c&&!_3c._dirty){
+return this;
+}
+if(_3b.nodeType==1&&!this.rootNode){
+this.rootNode=_3b||true;
+return this;
+}
+if(!_3c){
+if(_3b.nodeType==3&&dojo.trim(_3b.data)){
+throw new Error("Text should not exist outside of the root node in template");
+}
+return this;
+}
+if(this._closed){
+if(_3b.nodeType==3&&!dojo.trim(_3b.data)){
+return this;
+}else{
+throw new Error("Content should not exist outside of the root node in template");
+}
+}
+if(_3c._dirty){
+if(_3b._drawn&&_3b.parentNode==_3c){
+var _3d=_3c._cache;
+if(_3d){
+for(var i=0,_3e;_3e=_3d[i];i++){
+this.onAddNode&&this.onAddNode(_3e);
+_3c.insertBefore(_3e,_3b);
+this.onAddNodeComplete&&this.onAddNodeComplete(_3e);
+}
+_3d.length=0;
+}
+}
+_3c._dirty=false;
+}
+if(!_3c._cache){
+_3c._cache=[];
+this._cache.push(_3c);
+}
+_3c._dirty=true;
+_3c._cache.push(_3b);
+return this;
+},remove:function(obj){
+if(typeof obj=="string"){
+if(this._parent){
+this._parent.removeAttribute(obj);
+}
+}else{
+if(obj.nodeType==1&&!this.getRootNode()&&!this._removed){
+this._removed=true;
+return this;
+}
+if(obj.parentNode){
+this.onRemoveNode&&this.onRemoveNode(obj);
+if(obj.parentNode){
+obj.parentNode.removeChild(obj);
+}
+}
+}
+return this;
+},setAttribute:function(key,_3f){
+var old=dojo.attr(this._parent,key);
+if(this.onChangeAttribute&&old!=_3f){
+this.onChangeAttribute(this._parent,key,old,_3f);
+}
+if(key=="style"){
+this._parent.style.cssText=_3f;
+}else{
+dojo.attr(this._parent,key,_3f);
+}
+return this;
+},addEvent:function(_40,_41,fn,_42){
+if(!_40.getThis()){
+throw new Error("You must use Context.setObject(instance)");
+}
+this.onAddEvent&&this.onAddEvent(this.getParent(),_41,fn);
+var _43=fn;
+if(dojo.isArray(_42)){
+_43=function(e){
+this[fn].apply(this,[e].concat(_42));
+};
+}
+return dojo.connect(this.getParent(),_41,_40.getThis(),_43);
+},setParent:function(_44,up,_45){
+if(!this._parent){
+this._parent=this._first=_44;
+}
+if(up&&_45&&_44===this._first){
+this._closed=true;
+}
+if(up){
+var _46=this._parent;
+var _47="";
+var ie=dojo.isIE&&_46.tagName=="SCRIPT";
+if(ie){
+_46.text="";
+}
+if(_46._dirty){
+var _48=_46._cache;
+var _49=(_46.tagName=="SELECT"&&!_46.options.length);
+for(var i=0,_4a;_4a=_48[i];i++){
+if(_4a!==_46){
+this.onAddNode&&this.onAddNode(_4a);
+if(ie){
+_47+=_4a.data;
+}else{
+_46.appendChild(_4a);
+if(_49&&_4a.defaultSelected&&i){
+_49=i;
+}
+}
+this.onAddNodeComplete&&this.onAddNodeComplete(_4a);
+}
+}
+if(_49){
+_46.options.selectedIndex=(typeof _49=="number")?_49:0;
+}
+_48.length=0;
+_46._dirty=false;
+}
+if(ie){
+_46.text=_47;
+}
+}
+this._parent=_44;
+this.onSetParent&&this.onSetParent(_44,up,_45);
+return this;
+},getParent:function(){
+return this._parent;
+},getRootNode:function(){
+return this.rootNode;
+}});
+dd._DomNode=dojo.extend(function(_4b){
+this.contents=_4b;
+},{render:function(_4c,_4d){
+this._rendered=true;
+return _4d.concat(this.contents);
+},unrender:function(_4e,_4f){
+if(!this._rendered){
+return _4f;
+}
+this._rendered=false;
+return _4f.remove(this.contents);
+},clone:function(_50){
+return new this.constructor(this.contents);
+}});
+dd._DomNodeList=dojo.extend(function(_51){
+this.contents=_51||[];
+},{push:function(_52){
+this.contents.push(_52);
+},unshift:function(_53){
+this.contents.unshift(_53);
+},render:function(_54,_55,_56){
+_55=_55||dd.DomTemplate.prototype.getBuffer();
+if(_56){
+var _57=_55.getParent();
+}
+for(var i=0;i<this.contents.length;i++){
+_55=this.contents[i].render(_54,_55);
+if(!_55){
+throw new Error("Template node render functions must return their buffer");
+}
+}
+if(_57){
+_55.setParent(_57);
+}
+return _55;
+},dummyRender:function(_58,_59,_5a){
+var div=document.createElement("div");
+var _5b=_59.getParent();
+var old=_5b._clone;
+_5b._clone=div;
+var _5c=this.clone(_59,div);
+if(old){
+_5b._clone=old;
+}else{
+_5b._clone=null;
+}
+_59=dd.DomTemplate.prototype.getBuffer();
+_5c.unshift(new dd.ChangeNode(div));
+_5c.unshift(new dd._DomNode(div));
+_5c.push(new dd.ChangeNode(div,true));
+_5c.render(_58,_59);
+if(_5a){
+return _59.getRootNode();
+}
+var _5d=div.innerHTML;
+return (dojo.isIE)?_5d.replace(/\s*_(dirty|clone)="[^"]*"/g,""):_5d;
+},unrender:function(_5e,_5f,_60){
+if(_60){
+var _61=_5f.getParent();
+}
+for(var i=0;i<this.contents.length;i++){
+_5f=this.contents[i].unrender(_5e,_5f);
+if(!_5f){
+throw new Error("Template node render functions must return their buffer");
+}
+}
+if(_61){
+_5f.setParent(_61);
+}
+return _5f;
+},clone:function(_62){
+var _63=_62.getParent();
+var _64=this.contents;
+var _65=new dd._DomNodeList();
+var _66=[];
+for(var i=0;i<_64.length;i++){
+var _67=_64[i].clone(_62);
+if(_67 instanceof dd.ChangeNode||_67 instanceof dd._DomNode){
+var _68=_67.contents._clone;
+if(_68){
+_67.contents=_68;
+}else{
+if(_63!=_67.contents&&_67 instanceof dd._DomNode){
+var _69=_67.contents;
+_67.contents=_67.contents.cloneNode(false);
+_62.onClone&&_62.onClone(_69,_67.contents);
+_66.push(_69);
+_69._clone=_67.contents;
+}
+}
+}
+_65.push(_67);
+}
+for(var i=0,_67;_67=_66[i];i++){
+_67._clone=null;
+}
+return _65;
+},rtrim:function(){
+while(1){
+var i=this.contents.length-1;
+if(this.contents[i] instanceof dd._DomTextNode&&this.contents[i].isEmpty()){
+this.contents.pop();
+}else{
+break;
+}
+}
+return this;
+}});
+dd._DomVarNode=dojo.extend(function(str){
+this.contents=new dd._Filter(str);
+},{render:function(_6a,_6b){
+var str=this.contents.resolve(_6a);
+var _6c="text";
+if(str){
+if(str.render&&str.getRootNode){
+_6c="injection";
+}else{
+if(str.safe){
+if(str.nodeType){
+_6c="node";
+}else{
+if(str.toString){
+str=str.toString();
+_6c="html";
+}
+}
+}
+}
+}
+if(this._type&&_6c!=this._type){
+this.unrender(_6a,_6b);
+}
+this._type=_6c;
+switch(_6c){
+case "text":
+this._rendered=true;
+this._txt=this._txt||document.createTextNode(str);
+if(this._txt.data!=str){
+var old=this._txt.data;
+this._txt.data=str;
+_6b.onChangeData&&_6b.onChangeData(this._txt,old,this._txt.data);
+}
+return _6b.concat(this._txt);
+case "injection":
+var _6d=str.getRootNode();
+if(this._rendered&&_6d!=this._root){
+_6b=this.unrender(_6a,_6b);
+}
+this._root=_6d;
+var _6e=this._injected=new dd._DomNodeList();
+_6e.push(new dd.ChangeNode(_6b.getParent()));
+_6e.push(new dd._DomNode(_6d));
+_6e.push(str);
+_6e.push(new dd.ChangeNode(_6b.getParent()));
+this._rendered=true;
+return _6e.render(_6a,_6b);
+case "node":
+this._rendered=true;
+if(this._node&&this._node!=str&&this._node.parentNode&&this._node.parentNode===_6b.getParent()){
+this._node.parentNode.removeChild(this._node);
+}
+this._node=str;
+return _6b.concat(str);
+case "html":
+if(this._rendered&&this._src!=str){
+_6b=this.unrender(_6a,_6b);
+}
+this._src=str;
+if(!this._rendered){
+this._rendered=true;
+this._html=this._html||[];
+var div=(this._div=this._div||document.createElement("div"));
+div.innerHTML=str;
+var _6f=div.childNodes;
+while(_6f.length){
+var _70=div.removeChild(_6f[0]);
+this._html.push(_70);
+_6b=_6b.concat(_70);
+}
+}
+return _6b;
+default:
+return _6b;
+}
+},unrender:function(_71,_72){
+if(!this._rendered){
+return _72;
+}
+this._rendered=false;
+switch(this._type){
+case "text":
+return _72.remove(this._txt);
+case "injection":
+return this._injection.unrender(_71,_72);
+case "node":
+if(this._node.parentNode===_72.getParent()){
+return _72.remove(this._node);
+}
+return _72;
+case "html":
+for(var i=0,l=this._html.length;i<l;i++){
+_72=_72.remove(this._html[i]);
+}
+return _72;
+default:
+return _72;
+}
+},clone:function(){
+return new this.constructor(this.contents.getExpression());
+}});
+dd.ChangeNode=dojo.extend(function(_73,up,_74){
+this.contents=_73;
+this.up=up;
+this.root=_74;
+},{render:function(_75,_76){
+return _76.setParent(this.contents,this.up,this.root);
+},unrender:function(_77,_78){
+if(!_78.getParent()){
+return _78;
+}
+return _78.setParent(this.contents);
+},clone:function(){
+return new this.constructor(this.contents,this.up,this.root);
+}});
+dd.AttributeNode=dojo.extend(function(key,_79){
+this.key=key;
+this.value=_79;
+this.contents=_79;
+if(this._pool[_79]){
+this.nodelist=this._pool[_79];
+}else{
+if(!(this.nodelist=dd.quickFilter(_79))){
+this.nodelist=(new dd.Template(_79,true)).nodelist;
+}
+this._pool[_79]=this.nodelist;
+}
+this.contents="";
+},{_pool:{},render:function(_7a,_7b){
+var key=this.key;
+var _7c=this.nodelist.dummyRender(_7a);
+if(dd.BOOLS[key]){
+_7c=!(_7c=="false"||_7c=="undefined"||!_7c);
+}
+if(_7c!==this.contents){
+this.contents=_7c;
+return _7b.setAttribute(key,_7c);
+}
+return _7b;
+},unrender:function(_7d,_7e){
+this.contents="";
+return _7e.remove(this.key);
+},clone:function(_7f){
+return new this.constructor(this.key,this.value);
+}});
+dd._DomTextNode=dojo.extend(function(str){
+this.contents=document.createTextNode(str);
+this.upcoming=str;
+},{set:function(_80){
+this.upcoming=_80;
+return this;
+},render:function(_81,_82){
+if(this.contents.data!=this.upcoming){
+var old=this.contents.data;
+this.contents.data=this.upcoming;
+_82.onChangeData&&_82.onChangeData(this.contents,old,this.upcoming);
+}
+return _82.concat(this.contents);
+},unrender:function(_83,_84){
+return _84.remove(this.contents);
+},isEmpty:function(){
+return !dojo.trim(this.contents.data);
+},clone:function(){
+return new this.constructor(this.contents.data);
+}});
+dd._DomParser=dojo.extend(function(_85){
+this.contents=_85;
+},{i:0,parse:function(_86){
+var _87={};
+var _88=this.contents;
+if(!_86){
+_86=[];
+}
+for(var i=0;i<_86.length;i++){
+_87[_86[i]]=true;
+}
+var _89=new dd._DomNodeList();
+while(this.i<_88.length){
+var _8a=_88[this.i++];
+var _8b=_8a[0];
+var _8c=_8a[1];
+if(_8b==dd.TOKEN_CUSTOM){
+_89.push(_8c);
+}else{
+if(_8b==dd.TOKEN_CHANGE){
+var _8d=new dd.ChangeNode(_8c,_8a[2],_8a[3]);
+_8c[_8d.attr]=_8d;
+_89.push(_8d);
+}else{
+if(_8b==dd.TOKEN_ATTR){
+var fn=_1.getTag("attr:"+_8a[2],true);
+if(fn&&_8a[3]){
+if(_8a[3].indexOf("{%")!=-1||_8a[3].indexOf("{{")!=-1){
+_8c.setAttribute(_8a[2],"");
+}
+_89.push(fn(null,new dd.Token(_8b,_8a[2]+" "+_8a[3])));
+}else{
+if(dojo.isString(_8a[3])){
+if(_8a[2]=="style"||_8a[3].indexOf("{%")!=-1||_8a[3].indexOf("{{")!=-1){
+_89.push(new dd.AttributeNode(_8a[2],_8a[3]));
+}else{
+if(dojo.trim(_8a[3])){
+try{
+dojo.attr(_8c,_8a[2],_8a[3]);
+}
+catch(e){
+}
+}
+}
+}
+}
+}else{
+if(_8b==dd.TOKEN_NODE){
+var fn=_1.getTag("node:"+_8c.tagName.toLowerCase(),true);
+if(fn){
+_89.push(fn(null,new dd.Token(_8b,_8c),_8c.tagName.toLowerCase()));
+}
+_89.push(new dd._DomNode(_8c));
+}else{
+if(_8b==dd.TOKEN_VAR){
+_89.push(new dd._DomVarNode(_8c));
+}else{
+if(_8b==dd.TOKEN_TEXT){
+_89.push(new dd._DomTextNode(_8c.data||_8c));
+}else{
+if(_8b==dd.TOKEN_BLOCK){
+if(_87[_8c]){
+--this.i;
+return _89;
+}
+var cmd=_8c.split(/\s+/g);
+if(cmd.length){
+cmd=cmd[0];
+var fn=_1.getTag(cmd);
+if(typeof fn!="function"){
+throw new Error("Function not found for "+cmd);
+}
+var tpl=fn(this,new dd.Token(_8b,_8c));
+if(tpl){
+_89.push(tpl);
+}
+}
+}
+}
+}
+}
+}
+}
+}
+}
+if(_86.length){
+throw new Error("Could not find closing tag(s): "+_86.toString());
+}
+return _89;
+},next_token:function(){
+var _8e=this.contents[this.i++];
+return new dd.Token(_8e[0],_8e[1]);
+},delete_first_token:function(){
+this.i++;
+},skip_past:function(_8f){
+return dd._Parser.prototype.skip_past.call(this,_8f);
+},create_variable_node:function(_90){
+return new dd._DomVarNode(_90);
+},create_text_node:function(_91){
+return new dd._DomTextNode(_91||"");
+},getTemplate:function(loc){
+return new dd.DomTemplate(_2.getTemplate(loc));
+}});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/README
===================================================================
--- trunk/web/dojo/dojox/dtl/README	(revision 0)
+++ trunk/web/dojo/dojox/dtl/README	(revision 9)
@@ -0,0 +1,207 @@
+-------------------------------------------------------------------------------
+DojoX Django Template Language
+-------------------------------------------------------------------------------
+Version 0.0
+Release date: 09/20/2007
+-------------------------------------------------------------------------------
+Project state: experimental/feature incomplete
+-------------------------------------------------------------------------------
+Project authors
+	Neil Roberts (pottedmeat@dojotoolkit.org)
+-------------------------------------------------------------------------------
+Project description
+
+The Django Template language uses a system of templates that can be compiled
+once and rendered indefinitely afterwards. It uses a simple system of tags
+and filters.
+
+This is a 1:1 match with the Django Template Language as outlined in
+http://www.djangoproject.com/documentation/templates/. All applicable tags and
+filters have been implemented (see below), along with new filters and tags as
+necessary (see below).
+
+The Django Template Language is intended within Django to only handle text.
+Our implementation is able to handle HTML in addition to text. Actually, the
+text and HTML portions of dojox.dtl are two separate layers, the HTML layer
+sits on top of the text layer (base). It's also been implemented in such a way
+that you have little to fear when moving your code from Django to dojox.dtl.
+Your existing templates should work, and will benefit from the massive
+performance gain of being able to manipulate nodes, rather than having to do
+clunky innerHTML swaps you would have to do with a text-only system. It also
+allows for new HTML-centric abilities, outlined below.
+
+Despite having two levels of complexity, if you write your tags correctly, they
+will work in both environments.
+-------------------------------------------------------------------------------
+Dependencies
+
+Base:
+dojox.string.Builder
+
+Date filters and tags:
+dojox.date.php
+
+Widget:
+dijit._Widget
+dijit._Container
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/dtl.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/dtl/*
+
+Install into the following directory structure:
+/dojox/dtl/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
+What's Been Done
+
+Note: HTML Unit Tests should only be around for the oddities of HTML, tag/filter
+code is the same for each environment with minor exceptions. Cloning of all tags
+should be tested inside a for loop.
+
+| Implemented |     Tag     | Text Unit Test | HTML Unit Test |
+|      X      | block       |       X        |                |
+|      X      | comment     |       X        |                |
+|      X      | cycle       |       X        |                |
+|      X      | debug       |       X        |                |
+|      X      | extends     |       X        |                |
+|      X      | filter      |       X        |                |
+|      X      | firstof     |       X        |                |
+|      X      | for         |       X        |                |
+|      X      | if          |       X        |                |
+|      X      | ifchanged   |       X        |       X        |
+|      X      | ifequal     |       X        |                |
+|      X      | ifnotequal  |       X        |                |
+|      X      | include     |       X        |       X        |
+|      X      | load        |       X        |                |
+|      X      | now         |       X        |                |
+|      X      | regroup     |       X        |                |
+|      X      | spaceless   |       X        |       X        |
+|      X      | ssi         |       X        |       X        |
+|      X      | templatetag |       X        |                |
+|     N/A     | url         |                |                |
+|      X      | widthratio  |       X        |                |
+|      X      | with        |       X        |                |
+
+| Implemented | Filter             | Text Unit Test | HTML Unit Test |
+|      X      | add                |       X        |                |
+|      X      | addslashes         |       X        |                |
+|      X      | capfirst           |       X        |                |
+|      X      | center             |       X        |                |
+|      X      | cut                |       X        |                |
+|      X      | date               |       X        |                |
+|      X      | default            |       X        |                |
+|      X      | default_if_none    |       X        |                |
+|      X      | dictsort           |       X        |                |
+|      X      | dictsort_reversed  |       X        |                |
+|      X      | divisibleby        |       X        |                |
+|      X      | escape             |       X        |                |
+|      X      | filesizeformat     |       X        |                |
+|      X      | first              |       X        |                |
+|      X      | fix_ampersands     |       X        |                |
+|      X      | floatformat        |       X        |                |
+|      X      | get_digit          |       X        |                |
+|      X      | iriencode          |       X        |                |
+|      X      | join               |       X        |                |
+|      X      | length             |       X        |                |
+|      X      | length_is          |       X        |                |
+|      X      | linebreaks         |       X        |                |
+|      X      | linebreaksbr       |       X        |                |
+|      X      | linenumbers        |       X        |                |
+|      X      | ljust              |       X        |                |
+|      X      | lower              |       X        |                |
+|      X      | make_list          |       X        |                |
+|      X      | phone2numeric      |       X        |                |
+|      X      | pluralize          |       X        |                |
+|      X      | pprint             |       X        |                |
+|      X      | random             |       X        |                |
+|      X      | removetags         |       X        |                |
+|      X      | rjust              |       X        |                |
+|      X      | slice              |       X        |                |
+|      X      | slugify            |       X        |                |
+|      X      | stringformat       |       X        |                |
+|      X      | striptags          |       X        |                |
+|      X      | time               |       X        |                |
+|      X      | timesince          |       X        |                |
+|      X      | timeuntil          |       X        |                |
+|      X      | title              |       X        |                |
+|      X      | truncatewords      |       X        |                |
+|      X      | truncatewords_html |       X        |                |
+|      X      | unordered_list     |       X        |                |
+|      X      | upper              |       X        |                |
+|      X      | urlencode          |       X        |                |
+|      X      | urlize             |       X        |                |
+|      X      | urlizetrunc        |       X        |                |
+|      X      | wordcount          |       X        |                |
+|      X      | wordwrap           |       X        |                |
+|      X      | yesno              |       X        |                |
+-------------------------------------------------------------------------------
+HTML-Specific Additions
+-------------------------------------------------------------------------------
+{%extends "shared:templates/template.html" %}
+
+When using the {% extends %} tag, we don't always want to replace the parent
+node in DOM. For example, if we have a list view and a detail view, but both
+share the same base template, we want it to share the parent template. This
+basically means that the same nodes will be used in the parent for both views.
+
+To use this, simply add "shared:" to the beginning of the specified template.
+-------------------------------------------------------------------------------
+<!--{% commented markup %}-->
+
+Some browsers treat comment nodes as full fledged nodes. If performance is
+important to you, you can wrap your markup in comments. The comments will be
+automatically stripped for browsers that cannot support this.
+-------------------------------------------------------------------------------
+Attribute Tags
+
+If a tag name begins with "attr:" then it will be able to inject an object
+into the parsed template. (See dojox.dtl.tag.event.EventNode)
+
+onclick/onmouseover/etc attributes work by attaching to the rendering object.
+
+tstyle attribute allows for styles to be changed dynamically. Use them just
+like a "style" attribute.
+
+attach attribute attaches the node to the rendering object.
+-------------------------------------------------------------------------------
+New Context Functions
+
+setThis() and getThis() returns the object "in charge" of the current rendering.
+This is used so that we can attach events.
+
+mixin() and filter() clone the current context, and either add to or reduce
+the keys in the context.
+-------------------------------------------------------------------------------
+Buffers
+
+Both the base and HTML versions of dojox.dtl use buffers. The base version uses
+dojox.string.Builder and the HTML version uses dojox.dtl.DomBuffer.
+
+The HTML buffer has several calls important to rendering:
+
+setParent/getParent/concat/remove:
+
+setParent and concat are used in order to render our HTML. As we move through
+the parsed template, different nodes change the parent or add on to the
+current parent. getParent is useful in things like the attribute tags, since
+they can use getParent to find the node that they're an attribute on. remove is
+used during unrendering.
+
+setAttribute:
+
+Sets an attribute on the current parent
+-------------------------------------------------------------------------------
+Tags Need clone/unrender Functions.
+
+One of the biggest challenges of getting dojox.dtl to work in an HTML
+environment was logic blocks. Nodes and objects inside a for loop need to be
+cloned, they can't simply be re-rendered, especially if they involve a Node.
+Also, in the case of an if/else block, we need to be able to not just render
+one of the blocks, but also unrender the second.
+
+This is really simple code, a good example is the dojox.dtl.DomNode
+object. Each function in this object is only one line long.
\ No newline at end of file
Index: trunk/web/dojo/dojox/dtl/Context.js
===================================================================
--- trunk/web/dojo/dojox/dtl/Context.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/Context.js	(revision 9)
@@ -0,0 +1,64 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.Context"]){
+dojo._hasResource["dojox.dtl.Context"]=true;
+dojo.provide("dojox.dtl.Context");
+dojo.require("dojox.dtl._base");
+dojox.dtl.Context=dojo.extend(function(_1){
+this._this={};
+dojox.dtl._Context.call(this,_1);
+},dojox.dtl._Context.prototype,{getKeys:function(){
+var _2=[];
+for(var _3 in this){
+if(this.hasOwnProperty(_3)&&_3!="_this"){
+_2.push(_3);
+}
+}
+return _2;
+},extend:function(_4){
+return dojo.delegate(this,_4);
+},filter:function(_5){
+var _6=new dojox.dtl.Context();
+var _7=[];
+var i,_8;
+if(_5 instanceof dojox.dtl.Context){
+_7=_5.getKeys();
+}else{
+if(typeof _5=="object"){
+for(var _9 in _5){
+_7.push(_9);
+}
+}else{
+for(i=0;_8=arguments[i];i++){
+if(typeof _8=="string"){
+_7.push(_8);
+}
+}
+}
+}
+for(i=0,_9;_9=_7[i];i++){
+_6[_9]=this[_9];
+}
+return _6;
+},setThis:function(_a){
+this._this=_a;
+},getThis:function(){
+return this._this;
+},hasKey:function(_b){
+if(this._getter){
+var _c=this._getter(_b);
+if(typeof _c!="undefined"){
+return true;
+}
+}
+if(typeof this[_b]!="undefined"){
+return true;
+}
+return false;
+}});
+}
Index: trunk/web/dojo/dojox/dtl/utils/date.js
===================================================================
--- trunk/web/dojo/dojox/dtl/utils/date.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/utils/date.js	(revision 9)
@@ -0,0 +1,59 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.utils.date"]){
+dojo._hasResource["dojox.dtl.utils.date"]=true;
+dojo.provide("dojox.dtl.utils.date");
+dojo.require("dojox.date.php");
+dojox.dtl.utils.date.DateFormat=function(_1){
+dojox.date.php.DateFormat.call(this,_1);
+};
+dojo.extend(dojox.dtl.utils.date.DateFormat,dojox.date.php.DateFormat.prototype,{f:function(){
+return (!this.date.getMinutes())?this.g():this.g()+":"+this.i();
+},N:function(){
+return dojox.dtl.utils.date._months_ap[this.date.getMonth()];
+},P:function(){
+if(!this.date.getMinutes()&&!this.date.getHours()){
+return "midnight";
+}
+if(!this.date.getMinutes()&&this.date.getHours()==12){
+return "noon";
+}
+return this.f()+" "+this.a();
+}});
+dojo.mixin(dojox.dtl.utils.date,{format:function(_2,_3){
+var df=new dojox.dtl.utils.date.DateFormat(_3);
+return df.format(_2);
+},timesince:function(d,_4){
+if(!(d instanceof Date)){
+d=new Date(d.year,d.month,d.day);
+}
+if(!_4){
+_4=new Date();
+}
+var _5=Math.abs(_4.getTime()-d.getTime());
+for(var i=0,_6;_6=dojox.dtl.utils.date._chunks[i];i++){
+var _7=Math.floor(_5/_6[0]);
+if(_7){
+break;
+}
+}
+return _7+" "+_6[1](_7);
+},_chunks:[[60*60*24*365*1000,function(n){
+return (n==1)?"year":"years";
+}],[60*60*24*30*1000,function(n){
+return (n==1)?"month":"months";
+}],[60*60*24*7*1000,function(n){
+return (n==1)?"week":"weeks";
+}],[60*60*24*1000,function(n){
+return (n==1)?"day":"days";
+}],[60*60*1000,function(n){
+return (n==1)?"hour":"hours";
+}],[60*1000,function(n){
+return (n==1)?"minute":"minutes";
+}]],_months_ap:["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."]});
+}
Index: trunk/web/dojo/dojox/dtl/contrib/data.js
===================================================================
--- trunk/web/dojo/dojox/dtl/contrib/data.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/contrib/data.js	(revision 9)
@@ -0,0 +1,121 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.data"]){
+dojo._hasResource["dojox.dtl.contrib.data"]=true;
+dojo.provide("dojox.dtl.contrib.data");
+dojo.require("dojox.dtl._base");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.contrib.data;
+var _2=true;
+_1._BoundItem=dojo.extend(function(_3,_4){
+this.item=_3;
+this.store=_4;
+},{get:function(_5){
+var _6=this.store;
+var _7=this.item;
+if(_5=="getLabel"){
+return _6.getLabel(_7);
+}else{
+if(_5=="getAttributes"){
+return _6.getAttributes(_7);
+}else{
+if(_5=="getIdentity"){
+if(_6.getIdentity){
+return _6.getIdentity(_7);
+}
+return "Store has no identity API";
+}else{
+if(!_6.hasAttribute(_7,_5)){
+if(_5.slice(-1)=="s"){
+if(_2){
+_2=false;
+dojo.deprecated("You no longer need an extra s to call getValues, it can be figured out automatically");
+}
+_5=_5.slice(0,-1);
+}
+if(!_6.hasAttribute(_7,_5)){
+return;
+}
+}
+var _8=_6.getValues(_7,_5);
+if(!_8){
+return;
+}
+if(!dojo.isArray(_8)){
+return new _1._BoundItem(_8,_6);
+}
+_8=dojo.map(_8,function(_9){
+if(dojo.isObject(_9)&&_6.isItem(_9)){
+return new _1._BoundItem(_9,_6);
+}
+return _9;
+});
+_8.get=_1._get;
+return _8;
+}
+}
+}
+}});
+_1._BoundItem.prototype.get.safe=true;
+_1.BindDataNode=dojo.extend(function(_a,_b,_c,_d){
+this.items=_a&&new dd._Filter(_a);
+this.query=_b&&new dd._Filter(_b);
+this.store=new dd._Filter(_c);
+this.alias=_d;
+},{render:function(_e,_f){
+var _10=this.items&&this.items.resolve(_e);
+var _11=this.query&&this.query.resolve(_e);
+var _12=this.store.resolve(_e);
+if(!_12||!_12.getFeatures){
+throw new Error("data_bind didn't receive a store");
+}
+if(_11){
+var _13=false;
+_12.fetch({query:_11,sync:true,scope:this,onComplete:function(it){
+_13=true;
+_10=it;
+}});
+if(!_13){
+throw new Error("The bind_data tag only works with a query if the store executed synchronously");
+}
+}
+var _14=[];
+if(_10){
+for(var i=0,_15;_15=_10[i];i++){
+_14.push(new _1._BoundItem(_15,_12));
+}
+}
+_e[this.alias]=_14;
+return _f;
+},unrender:function(_16,_17){
+return _17;
+},clone:function(){
+return this;
+}});
+dojo.mixin(_1,{_get:function(key){
+if(this.length){
+return (this[0] instanceof _1._BoundItem)?this[0].get(key):this[0][key];
+}
+},bind_data:function(_18,_19){
+var _1a=_19.contents.split();
+if(_1a[2]!="to"||_1a[4]!="as"||!_1a[5]){
+throw new Error("data_bind expects the format: 'data_bind items to store as varName'");
+}
+return new _1.BindDataNode(_1a[1],null,_1a[3],_1a[5]);
+},bind_query:function(_1b,_1c){
+var _1d=_1c.contents.split();
+if(_1d[2]!="to"||_1d[4]!="as"||!_1d[5]){
+throw new Error("data_bind expects the format: 'bind_query query to store as varName'");
+}
+return new _1.BindDataNode(null,_1d[1],_1d[3],_1d[5]);
+}});
+_1._get.safe=true;
+dd.register.tags("dojox.dtl.contrib",{"data":["bind_data","bind_query"]});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/contrib/objects.js
===================================================================
--- trunk/web/dojo/dojox/dtl/contrib/objects.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/contrib/objects.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.objects"]){
+dojo._hasResource["dojox.dtl.contrib.objects"]=true;
+dojo.provide("dojox.dtl.contrib.objects");
+dojo.mixin(dojox.dtl.contrib.objects,{key:function(_1,_2){
+return _1[_2];
+}});
+dojox.dtl.register.filters("dojox.dtl.contrib",{"objects":["key"]});
+}
Index: trunk/web/dojo/dojox/dtl/contrib/dom.js
===================================================================
--- trunk/web/dojo/dojox/dtl/contrib/dom.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/contrib/dom.js	(revision 9)
@@ -0,0 +1,131 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.dom"]){
+dojo._hasResource["dojox.dtl.contrib.dom"]=true;
+dojo.provide("dojox.dtl.contrib.dom");
+dojo.require("dojox.dtl.dom");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.contrib.dom;
+var _2={render:function(){
+return this.contents;
+}};
+_1.StyleNode=dojo.extend(function(_3){
+this.contents={};
+this._current={};
+this._styles=_3;
+for(var _4 in _3){
+if(_3[_4].indexOf("{{")!=-1){
+var _5=new dd.Template(_3[_4]);
+}else{
+var _5=dojo.delegate(_2);
+_5.contents=_3[_4];
+}
+this.contents[_4]=_5;
+}
+},{render:function(_6,_7){
+for(var _8 in this.contents){
+var _9=this.contents[_8].render(_6);
+if(this._current[_8]!=_9){
+dojo.style(_7.getParent(),_8,this._current[_8]=_9);
+}
+}
+return _7;
+},unrender:function(_a,_b){
+this._current={};
+return _b;
+},clone:function(_c){
+return new this.constructor(this._styles);
+}});
+_1.BufferNode=dojo.extend(function(_d,_e){
+this.nodelist=_d;
+this.options=_e;
+},{_swap:function(_f,_10){
+if(!this.swapped&&this.parent.parentNode){
+if(_f=="node"){
+if((_10.nodeType==3&&!this.options.text)||(_10.nodeType==1&&!this.options.node)){
+return;
+}
+}else{
+if(_f=="class"){
+if(_f!="class"){
+return;
+}
+}
+}
+this.onAddNode&&dojo.disconnect(this.onAddNode);
+this.onRemoveNode&&dojo.disconnect(this.onRemoveNode);
+this.onChangeAttribute&&dojo.disconnect(this.onChangeAttribute);
+this.onChangeData&&dojo.disconnect(this.onChangeData);
+this.swapped=this.parent.cloneNode(true);
+this.parent.parentNode.replaceChild(this.swapped,this.parent);
+}
+},render:function(_11,_12){
+this.parent=_12.getParent();
+if(this.options.node){
+this.onAddNode=dojo.connect(_12,"onAddNode",dojo.hitch(this,"_swap","node"));
+this.onRemoveNode=dojo.connect(_12,"onRemoveNode",dojo.hitch(this,"_swap","node"));
+}
+if(this.options.text){
+this.onChangeData=dojo.connect(_12,"onChangeData",dojo.hitch(this,"_swap","node"));
+}
+if(this.options["class"]){
+this.onChangeAttribute=dojo.connect(_12,"onChangeAttribute",dojo.hitch(this,"_swap","class"));
+}
+_12=this.nodelist.render(_11,_12);
+if(this.swapped){
+this.swapped.parentNode.replaceChild(this.parent,this.swapped);
+dojo.destroy(this.swapped);
+}else{
+this.onAddNode&&dojo.disconnect(this.onAddNode);
+this.onRemoveNode&&dojo.disconnect(this.onRemoveNode);
+this.onChangeAttribute&&dojo.disconnect(this.onChangeAttribute);
+this.onChangeData&&dojo.disconnect(this.onChangeData);
+}
+delete this.parent;
+delete this.swapped;
+return _12;
+},unrender:function(_13,_14){
+return this.nodelist.unrender(_13,_14);
+},clone:function(_15){
+return new this.constructor(this.nodelist.clone(_15),this.options);
+}});
+dojo.mixin(_1,{buffer:function(_16,_17){
+var _18=_17.contents.split().slice(1);
+var _19={};
+var _1a=false;
+for(var i=_18.length;i--;){
+_1a=true;
+_19[_18[i]]=true;
+}
+if(!_1a){
+_19.node=true;
+}
+var _1b=_16.parse(["endbuffer"]);
+_16.next_token();
+return new _1.BufferNode(_1b,_19);
+},html:function(_1c,_1d){
+dojo.deprecated("{% html someVariable %}","Use {{ someVariable|safe }} instead");
+return _1c.create_variable_node(_1d.contents.slice(5)+"|safe");
+},style_:function(_1e,_1f){
+var _20={};
+_1f=_1f.contents.replace(/^style\s+/,"");
+var _21=_1f.split(/\s*;\s*/g);
+for(var i=0,_22;_22=_21[i];i++){
+var _23=_22.split(/\s*:\s*/g);
+var key=_23[0];
+var _24=dojo.trim(_23[1]);
+if(_24){
+_20[key]=_24;
+}
+}
+return new _1.StyleNode(_20);
+}});
+dd.register.tags("dojox.dtl.contrib",{"dom":["html","attr:style","buffer"]});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/contrib/dijit.js
===================================================================
--- trunk/web/dojo/dojox/dtl/contrib/dijit.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/contrib/dijit.js	(revision 9)
@@ -0,0 +1,184 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.dijit"]){
+dojo._hasResource["dojox.dtl.contrib.dijit"]=true;
+dojo.provide("dojox.dtl.contrib.dijit");
+dojo.require("dojox.dtl.dom");
+dojo.require("dojo.parser");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.contrib.dijit;
+_1.AttachNode=dojo.extend(function(_2,_3){
+this._keys=_2;
+this._object=_3;
+},{render:function(_4,_5){
+if(!this._rendered){
+this._rendered=true;
+for(var i=0,_6;_6=this._keys[i];i++){
+_4.getThis()[_6]=this._object||_5.getParent();
+}
+}
+return _5;
+},unrender:function(_7,_8){
+if(this._rendered){
+this._rendered=false;
+for(var i=0,_9;_9=this._keys[i];i++){
+if(_7.getThis()[_9]===(this._object||_8.getParent())){
+delete _7.getThis()[_9];
+}
+}
+}
+return _8;
+},clone:function(_a){
+return new this.constructor(this._keys,this._object);
+}});
+_1.EventNode=dojo.extend(function(_b,_c){
+this._command=_b;
+var _d,_e=_b.split(/\s*,\s*/);
+var _f=dojo.trim;
+var _10=[];
+var fns=[];
+while(_d=_e.pop()){
+if(_d){
+var fn=null;
+if(_d.indexOf(":")!=-1){
+var _11=_d.split(":");
+_d=_f(_11[0]);
+fn=_f(_11.slice(1).join(":"));
+}else{
+_d=_f(_d);
+}
+if(!fn){
+fn=_d;
+}
+_10.push(_d);
+fns.push(fn);
+}
+}
+this._types=_10;
+this._fns=fns;
+this._object=_c;
+this._rendered=[];
+},{_clear:false,render:function(_12,_13){
+for(var i=0,_14;_14=this._types[i];i++){
+if(!this._clear&&!this._object){
+_13.getParent()[_14]=null;
+}
+var fn=this._fns[i];
+var _15;
+if(fn.indexOf(" ")!=-1){
+if(this._rendered[i]){
+dojo.disconnect(this._rendered[i]);
+this._rendered[i]=false;
+}
+_15=dojo.map(fn.split(" ").slice(1),function(_16){
+return new dd._Filter(_16).resolve(_12);
+});
+fn=fn.split(" ",2)[0];
+}
+if(!this._rendered[i]){
+if(!this._object){
+this._rendered[i]=_13.addEvent(_12,_14,fn,_15);
+}else{
+this._rendered[i]=dojo.connect(this._object,_14,_12.getThis(),fn);
+}
+}
+}
+this._clear=true;
+return _13;
+},unrender:function(_17,_18){
+while(this._rendered.length){
+dojo.disconnect(this._rendered.pop());
+}
+return _18;
+},clone:function(){
+return new this.constructor(this._command,this._object);
+}});
+function _19(n1){
+var n2=n1.cloneNode(true);
+if(dojo.isIE){
+dojo.query("script",n2).forEach("item.text = this[index].text;",dojo.query("script",n1));
+}
+return n2;
+};
+_1.DojoTypeNode=dojo.extend(function(_1a,_1b){
+this._node=_1a;
+this._parsed=_1b;
+var _1c=_1a.getAttribute("dojoAttachEvent");
+if(_1c){
+this._events=new _1.EventNode(dojo.trim(_1c));
+}
+var _1d=_1a.getAttribute("dojoAttachPoint");
+if(_1d){
+this._attach=new _1.AttachNode(dojo.trim(_1d).split(/\s*,\s*/));
+}
+if(!_1b){
+this._dijit=dojo.parser.instantiate([_19(_1a)])[0];
+}else{
+_1a=_19(_1a);
+var old=_1.widgetsInTemplate;
+_1.widgetsInTemplate=false;
+this._template=new dd.DomTemplate(_1a);
+_1.widgetsInTemplate=old;
+}
+},{render:function(_1e,_1f){
+if(this._parsed){
+var _20=new dd.DomBuffer();
+this._template.render(_1e,_20);
+var _21=_19(_20.getRootNode());
+var div=document.createElement("div");
+div.appendChild(_21);
+var _22=div.innerHTML;
+div.removeChild(_21);
+if(_22!=this._rendered){
+this._rendered=_22;
+if(this._dijit){
+this._dijit.destroyRecursive();
+}
+this._dijit=dojo.parser.instantiate([_21])[0];
+}
+}
+var _23=this._dijit.domNode;
+if(this._events){
+this._events._object=this._dijit;
+this._events.render(_1e,_1f);
+}
+if(this._attach){
+this._attach._object=this._dijit;
+this._attach.render(_1e,_1f);
+}
+return _1f.concat(_23);
+},unrender:function(_24,_25){
+return _25.remove(this._dijit.domNode);
+},clone:function(){
+return new this.constructor(this._node,this._parsed);
+}});
+dojo.mixin(_1,{widgetsInTemplate:true,dojoAttachPoint:function(_26,_27){
+return new _1.AttachNode(_27.contents.slice(16).split(/\s*,\s*/));
+},dojoAttachEvent:function(_28,_29){
+return new _1.EventNode(_29.contents.slice(16));
+},dojoType:function(_2a,_2b){
+var _2c=false;
+if(_2b.contents.slice(-7)==" parsed"){
+_2c=true;
+}
+var _2d=_2b.contents.slice(9);
+var _2e=_2c?_2d.slice(0,-7):_2d.toString();
+if(_1.widgetsInTemplate){
+var _2f=_2a.swallowNode();
+_2f.setAttribute("dojoType",_2e);
+return new _1.DojoTypeNode(_2f,_2c);
+}
+return new dd.AttributeNode("dojoType",_2e);
+},on:function(_30,_31){
+var _32=_31.contents.split();
+return new _1.EventNode(_32[0]+":"+_32.slice(1).join(" "));
+}});
+dd.register.tags("dojox.dtl.contrib",{"dijit":["attr:dojoType","attr:dojoAttachPoint",["attr:attach","dojoAttachPoint"],"attr:dojoAttachEvent",[/(attr:)?on(click|key(up))/i,"on"]]});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/contrib/html.js
===================================================================
--- trunk/web/dojo/dojox/dtl/contrib/html.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/contrib/html.js	(revision 9)
@@ -0,0 +1,13 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.contrib.html"]){
+dojo._hasResource["dojox.dtl.contrib.html"]=true;
+dojo.provide("dojox.dtl.contrib.html");
+dojo.require("dojox.dtl.contrib.dom");
+dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
+}
Index: trunk/web/dojo/dojox/dtl/tag/loader.js
===================================================================
--- trunk/web/dojo/dojox/dtl/tag/loader.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/tag/loader.js	(revision 9)
@@ -0,0 +1,260 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.tag.loader"]){
+dojo._hasResource["dojox.dtl.tag.loader"]=true;
+dojo.provide("dojox.dtl.tag.loader");
+dojo.require("dojox.dtl._base");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.tag.loader;
+_1.BlockNode=dojo.extend(function(_2,_3){
+this.name=_2;
+this.nodelist=_3;
+},{"super":function(){
+if(this.parent){
+var _4=this.parent.nodelist.dummyRender(this.context,null,true);
+if(typeof _4=="string"){
+_4=new String(_4);
+}
+_4.safe=true;
+return _4;
+}
+return "";
+},render:function(_5,_6){
+var _7=this.name;
+var _8=this.nodelist;
+var _9;
+if(_6.blocks){
+var _a=_6.blocks[_7];
+if(_a){
+_9=_a.parent;
+_8=_a.nodelist;
+_a.used=true;
+}
+}
+this.rendered=_8;
+_5=_5.push();
+this.context=_5;
+this.parent=null;
+if(_8!=this.nodelist){
+this.parent=this;
+}
+_5.block=this;
+if(_6.getParent){
+var _b=_6.getParent();
+var _c=dojo.connect(_6,"onSetParent",function(_d,up,_e){
+if(up&&_e){
+_6.setParent(_b);
+}
+});
+}
+_6=_8.render(_5,_6,this);
+_c&&dojo.disconnect(_c);
+_5=_5.pop();
+return _6;
+},unrender:function(_f,_10){
+return this.rendered.unrender(_f,_10);
+},clone:function(_11){
+return new this.constructor(this.name,this.nodelist.clone(_11));
+},toString:function(){
+return "dojox.dtl.tag.loader.BlockNode";
+}});
+_1.ExtendsNode=dojo.extend(function(_12,_13,_14,_15,key){
+this.getTemplate=_12;
+this.nodelist=_13;
+this.shared=_14;
+this.parent=_15;
+this.key=key;
+},{parents:{},getParent:function(_16){
+var _17=this.parent;
+if(!_17){
+var _18;
+_17=this.parent=_16.get(this.key,false);
+if(!_17){
+throw new Error("extends tag used a variable that did not resolve");
+}
+if(typeof _17=="object"){
+var url=_17.url||_17.templatePath;
+if(_17.shared){
+this.shared=true;
+}
+if(url){
+_17=this.parent=url.toString();
+}else{
+if(_17.templateString){
+_18=_17.templateString;
+_17=this.parent=" ";
+}else{
+_17=this.parent=this.parent.toString();
+}
+}
+}
+if(_17&&_17.indexOf("shared:")===0){
+this.shared=true;
+_17=this.parent=_17.substring(7,_17.length);
+}
+}
+if(!_17){
+throw new Error("Invalid template name in 'extends' tag.");
+}
+if(_17.render){
+return _17;
+}
+if(this.parents[_17]){
+return this.parents[_17];
+}
+this.parent=this.getTemplate(_18||dojox.dtl.text.getTemplateString(_17));
+if(this.shared){
+this.parents[_17]=this.parent;
+}
+return this.parent;
+},render:function(_19,_1a){
+var _1b=this.getParent(_19);
+_1b.blocks=_1b.blocks||{};
+_1a.blocks=_1a.blocks||{};
+for(var i=0,_1c;_1c=this.nodelist.contents[i];i++){
+if(_1c instanceof dojox.dtl.tag.loader.BlockNode){
+var old=_1b.blocks[_1c.name];
+if(old&&old.nodelist!=_1c.nodelist){
+_1a=old.nodelist.unrender(_19,_1a);
+}
+_1b.blocks[_1c.name]=_1a.blocks[_1c.name]={shared:this.shared,nodelist:_1c.nodelist,used:false};
+}
+}
+this.rendered=_1b;
+return _1b.nodelist.render(_19,_1a,this);
+},unrender:function(_1d,_1e){
+return this.rendered.unrender(_1d,_1e,this);
+},toString:function(){
+return "dojox.dtl.block.ExtendsNode";
+}});
+_1.IncludeNode=dojo.extend(function(_1f,_20,_21,_22,_23){
+this._path=_1f;
+this.constant=_20;
+this.path=(_20)?_1f:new dd._Filter(_1f);
+this.getTemplate=_21;
+this.text=_22;
+this.parsed=(arguments.length==5)?_23:true;
+},{_cache:[{},{}],render:function(_24,_25){
+var _26=((this.constant)?this.path:this.path.resolve(_24)).toString();
+var _27=Number(this.parsed);
+var _28=false;
+if(_26!=this.last){
+_28=true;
+if(this.last){
+_25=this.unrender(_24,_25);
+}
+this.last=_26;
+}
+var _29=this._cache[_27];
+if(_27){
+if(!_29[_26]){
+_29[_26]=dd.text._resolveTemplateArg(_26,true);
+}
+if(_28){
+var _2a=this.getTemplate(_29[_26]);
+this.rendered=_2a.nodelist;
+}
+return this.rendered.render(_24,_25,this);
+}else{
+if(this.text instanceof dd._TextNode){
+if(_28){
+this.rendered=this.text;
+this.rendered.set(dd.text._resolveTemplateArg(_26,true));
+}
+return this.rendered.render(_24,_25);
+}else{
+if(!_29[_26]){
+var _2b=[];
+var div=document.createElement("div");
+div.innerHTML=dd.text._resolveTemplateArg(_26,true);
+var _2c=div.childNodes;
+while(_2c.length){
+var _2d=div.removeChild(_2c[0]);
+_2b.push(_2d);
+}
+_29[_26]=_2b;
+}
+if(_28){
+this.nodelist=[];
+var _2e=true;
+for(var i=0,_2f;_2f=_29[_26][i];i++){
+this.nodelist.push(_2f.cloneNode(true));
+}
+}
+for(var i=0,_30;_30=this.nodelist[i];i++){
+_25=_25.concat(_30);
+}
+}
+}
+return _25;
+},unrender:function(_31,_32){
+if(this.rendered){
+_32=this.rendered.unrender(_31,_32);
+}
+if(this.nodelist){
+for(var i=0,_33;_33=this.nodelist[i];i++){
+_32=_32.remove(_33);
+}
+}
+return _32;
+},clone:function(_34){
+return new this.constructor(this._path,this.constant,this.getTemplate,this.text.clone(_34),this.parsed);
+}});
+dojo.mixin(_1,{block:function(_35,_36){
+var _37=_36.contents.split();
+var _38=_37[1];
+_35._blocks=_35._blocks||{};
+_35._blocks[_38]=_35._blocks[_38]||[];
+_35._blocks[_38].push(_38);
+var _39=_35.parse(["endblock","endblock "+_38]).rtrim();
+_35.next_token();
+return new dojox.dtl.tag.loader.BlockNode(_38,_39);
+},extends_:function(_3a,_3b){
+var _3c=_3b.contents.split();
+var _3d=false;
+var _3e=null;
+var key=null;
+if(_3c[1].charAt(0)=="\""||_3c[1].charAt(0)=="'"){
+_3e=_3c[1].substring(1,_3c[1].length-1);
+}else{
+key=_3c[1];
+}
+if(_3e&&_3e.indexOf("shared:")==0){
+_3d=true;
+_3e=_3e.substring(7,_3e.length);
+}
+var _3f=_3a.parse();
+return new dojox.dtl.tag.loader.ExtendsNode(_3a.getTemplate,_3f,_3d,_3e,key);
+},include:function(_40,_41){
+var _42=_41.contents.split();
+if(_42.length!=2){
+throw new Error(_42[0]+" tag takes one argument: the name of the template to be included");
+}
+var _43=_42[1];
+var _44=false;
+if((_43.charAt(0)=="\""||_43.slice(-1)=="'")&&_43.charAt(0)==_43.slice(-1)){
+_43=_43.slice(1,-1);
+_44=true;
+}
+return new _1.IncludeNode(_43,_44,_40.getTemplate,_40.create_text_node());
+},ssi:function(_45,_46){
+var _47=_46.contents.split();
+var _48=false;
+if(_47.length==3){
+_48=(_47.pop()=="parsed");
+if(!_48){
+throw new Error("Second (optional) argument to ssi tag must be 'parsed'");
+}
+}
+var _49=_1.include(_45,new dd.Token(_46.token_type,_47.join(" ")));
+_49.parsed=_48;
+return _49;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/tag/loop.js
===================================================================
--- trunk/web/dojo/dojox/dtl/tag/loop.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/tag/loop.js	(revision 9)
@@ -0,0 +1,164 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.tag.loop"]){
+dojo._hasResource["dojox.dtl.tag.loop"]=true;
+dojo.provide("dojox.dtl.tag.loop");
+dojo.require("dojox.dtl._base");
+dojo.require("dojox.string.tokenize");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.tag.loop;
+_1.CycleNode=dojo.extend(function(_2,_3,_4,_5){
+this.cyclevars=_2;
+this.name=_3;
+this.contents=_4;
+this.shared=_5||{counter:-1,map:{}};
+},{render:function(_6,_7){
+if(_6.forloop&&!_6.forloop.counter0){
+this.shared.counter=-1;
+}
+++this.shared.counter;
+var _8=this.cyclevars[this.shared.counter%this.cyclevars.length];
+var _9=this.shared.map;
+if(!_9[_8]){
+_9[_8]=new dd._Filter(_8);
+}
+_8=_9[_8].resolve(_6,_7);
+if(this.name){
+_6[this.name]=_8;
+}
+this.contents.set(_8);
+return this.contents.render(_6,_7);
+},unrender:function(_a,_b){
+return this.contents.unrender(_a,_b);
+},clone:function(_c){
+return new this.constructor(this.cyclevars,this.name,this.contents.clone(_c),this.shared);
+}});
+_1.IfChangedNode=dojo.extend(function(_d,_e,_f){
+this.nodes=_d;
+this._vars=_e;
+this.shared=_f||{last:null,counter:0};
+this.vars=dojo.map(_e,function(_10){
+return new dojox.dtl._Filter(_10);
+});
+},{render:function(_11,_12){
+if(_11.forloop){
+if(_11.forloop.counter<=this.shared.counter){
+this.shared.last=null;
+}
+this.shared.counter=_11.forloop.counter;
+}
+var _13;
+if(this.vars.length){
+_13=dojo.toJson(dojo.map(this.vars,function(_14){
+return _14.resolve(_11);
+}));
+}else{
+_13=this.nodes.dummyRender(_11,_12);
+}
+if(_13!=this.shared.last){
+var _15=(this.shared.last===null);
+this.shared.last=_13;
+_11=_11.push();
+_11.ifchanged={firstloop:_15};
+_12=this.nodes.render(_11,_12);
+_11=_11.pop();
+}else{
+_12=this.nodes.unrender(_11,_12);
+}
+return _12;
+},unrender:function(_16,_17){
+return this.nodes.unrender(_16,_17);
+},clone:function(_18){
+return new this.constructor(this.nodes.clone(_18),this._vars,this.shared);
+}});
+_1.RegroupNode=dojo.extend(function(_19,key,_1a){
+this._expression=_19;
+this.expression=new dd._Filter(_19);
+this.key=key;
+this.alias=_1a;
+},{_push:function(_1b,_1c,_1d){
+if(_1d.length){
+_1b.push({grouper:_1c,list:_1d});
+}
+},render:function(_1e,_1f){
+_1e[this.alias]=[];
+var _20=this.expression.resolve(_1e);
+if(_20){
+var _21=null;
+var _22=[];
+for(var i=0;i<_20.length;i++){
+var id=_20[i][this.key];
+if(_21!==id){
+this._push(_1e[this.alias],_21,_22);
+_21=id;
+_22=[_20[i]];
+}else{
+_22.push(_20[i]);
+}
+}
+this._push(_1e[this.alias],_21,_22);
+}
+return _1f;
+},unrender:function(_23,_24){
+return _24;
+},clone:function(_25,_26){
+return this;
+}});
+dojo.mixin(_1,{cycle:function(_27,_28){
+var _29=_28.split_contents();
+if(_29.length<2){
+throw new Error("'cycle' tag requires at least two arguments");
+}
+if(_29[1].indexOf(",")!=-1){
+var _2a=_29[1].split(",");
+_29=[_29[0]];
+for(var i=0;i<_2a.length;i++){
+_29.push("\""+_2a[i]+"\"");
+}
+}
+if(_29.length==2){
+var _2b=_29[_29.length-1];
+if(!_27._namedCycleNodes){
+throw new Error("No named cycles in template: '"+_2b+"' is not defined");
+}
+if(!_27._namedCycleNodes[_2b]){
+throw new Error("Named cycle '"+_2b+"' does not exist");
+}
+return _27._namedCycleNodes[_2b];
+}
+if(_29.length>4&&_29[_29.length-2]=="as"){
+var _2b=_29[_29.length-1];
+var _2c=new _1.CycleNode(_29.slice(1,_29.length-2),_2b,_27.create_text_node());
+if(!_27._namedCycleNodes){
+_27._namedCycleNodes={};
+}
+_27._namedCycleNodes[_2b]=_2c;
+}else{
+_2c=new _1.CycleNode(_29.slice(1),null,_27.create_text_node());
+}
+return _2c;
+},ifchanged:function(_2d,_2e){
+var _2f=_2e.contents.split();
+var _30=_2d.parse(["endifchanged"]);
+_2d.delete_first_token();
+return new _1.IfChangedNode(_30,_2f.slice(1));
+},regroup:function(_31,_32){
+var _33=dojox.string.tokenize(_32.contents,/(\s+)/g,function(_34){
+return _34;
+});
+if(_33.length<11||_33[_33.length-3]!="as"||_33[_33.length-7]!="by"){
+throw new Error("Expected the format: regroup list by key as newList");
+}
+var _35=_33.slice(2,-8).join("");
+var key=_33[_33.length-5];
+var _36=_33[_33.length-1];
+return new _1.RegroupNode(_35,key,_36);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/tag/misc.js
===================================================================
--- trunk/web/dojo/dojox/dtl/tag/misc.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/tag/misc.js	(revision 9)
@@ -0,0 +1,222 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.tag.misc"]){
+dojo._hasResource["dojox.dtl.tag.misc"]=true;
+dojo.provide("dojox.dtl.tag.misc");
+dojo.require("dojox.dtl._base");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.tag.misc;
+_1.DebugNode=dojo.extend(function(_2){
+this.text=_2;
+},{render:function(_3,_4){
+var _5=_3.getKeys();
+var _6=[];
+var _7={};
+for(var i=0,_8;_8=_5[i];i++){
+_7[_8]=_3[_8];
+_6+="["+_8+": "+typeof _3[_8]+"]\n";
+}
+return this.text.set(_6).render(_3,_4,this);
+},unrender:function(_9,_a){
+return _a;
+},clone:function(_b){
+return new this.constructor(this.text.clone(_b));
+},toString:function(){
+return "ddtm.DebugNode";
+}});
+_1.FilterNode=dojo.extend(function(_c,_d){
+this._varnode=_c;
+this._nodelist=_d;
+},{render:function(_e,_f){
+var _10=this._nodelist.render(_e,new dojox.string.Builder());
+_e=_e.update({"var":_10.toString()});
+var _11=this._varnode.render(_e,_f);
+_e=_e.pop();
+return _f;
+},unrender:function(_12,_13){
+return _13;
+},clone:function(_14){
+return new this.constructor(this._expression,this._nodelist.clone(_14));
+}});
+_1.FirstOfNode=dojo.extend(function(_15,_16){
+this._vars=_15;
+this.vars=dojo.map(_15,function(_17){
+return new dojox.dtl._Filter(_17);
+});
+this.contents=_16;
+},{render:function(_18,_19){
+for(var i=0,_1a;_1a=this.vars[i];i++){
+var _1b=_1a.resolve(_18);
+if(typeof _1b!="undefined"){
+if(_1b===null){
+_1b="null";
+}
+this.contents.set(_1b);
+return this.contents.render(_18,_19);
+}
+}
+return this.contents.unrender(_18,_19);
+},unrender:function(_1c,_1d){
+return this.contents.unrender(_1c,_1d);
+},clone:function(_1e){
+return new this.constructor(this._vars,this.contents.clone(_1e));
+}});
+_1.SpacelessNode=dojo.extend(function(_1f,_20){
+this.nodelist=_1f;
+this.contents=_20;
+},{render:function(_21,_22){
+if(_22.getParent){
+var _23=[dojo.connect(_22,"onAddNodeComplete",this,"_watch"),dojo.connect(_22,"onSetParent",this,"_watchParent")];
+_22=this.nodelist.render(_21,_22);
+dojo.disconnect(_23[0]);
+dojo.disconnect(_23[1]);
+}else{
+var _24=this.nodelist.dummyRender(_21);
+this.contents.set(_24.replace(/>\s+</g,"><"));
+_22=this.contents.render(_21,_22);
+}
+return _22;
+},unrender:function(_25,_26){
+return this.nodelist.unrender(_25,_26);
+},clone:function(_27){
+return new this.constructor(this.nodelist.clone(_27),this.contents.clone(_27));
+},_isEmpty:function(_28){
+return (_28.nodeType==3&&!_28.data.match(/[^\s\n]/));
+},_watch:function(_29){
+if(this._isEmpty(_29)){
+var _2a=false;
+if(_29.parentNode.firstChild==_29){
+_29.parentNode.removeChild(_29);
+}
+}else{
+var _2b=_29.parentNode.childNodes;
+if(_29.nodeType==1&&_2b.length>2){
+for(var i=2,_2c;_2c=_2b[i];i++){
+if(_2b[i-2].nodeType==1&&this._isEmpty(_2b[i-1])){
+_29.parentNode.removeChild(_2b[i-1]);
+return;
+}
+}
+}
+}
+},_watchParent:function(_2d){
+var _2e=_2d.childNodes;
+if(_2e.length){
+while(_2d.childNodes.length){
+var _2f=_2d.childNodes[_2d.childNodes.length-1];
+if(!this._isEmpty(_2f)){
+return;
+}
+_2d.removeChild(_2f);
+}
+}
+}});
+_1.TemplateTagNode=dojo.extend(function(tag,_30){
+this.tag=tag;
+this.contents=_30;
+},{mapping:{openblock:"{%",closeblock:"%}",openvariable:"{{",closevariable:"}}",openbrace:"{",closebrace:"}",opencomment:"{#",closecomment:"#}"},render:function(_31,_32){
+this.contents.set(this.mapping[this.tag]);
+return this.contents.render(_31,_32);
+},unrender:function(_33,_34){
+return this.contents.unrender(_33,_34);
+},clone:function(_35){
+return new this.constructor(this.tag,this.contents.clone(_35));
+}});
+_1.WidthRatioNode=dojo.extend(function(_36,max,_37,_38){
+this.current=new dd._Filter(_36);
+this.max=new dd._Filter(max);
+this.width=_37;
+this.contents=_38;
+},{render:function(_39,_3a){
+var _3b=+this.current.resolve(_39);
+var max=+this.max.resolve(_39);
+if(typeof _3b!="number"||typeof max!="number"||!max){
+this.contents.set("");
+}else{
+this.contents.set(""+Math.round((_3b/max)*this.width));
+}
+return this.contents.render(_39,_3a);
+},unrender:function(_3c,_3d){
+return this.contents.unrender(_3c,_3d);
+},clone:function(_3e){
+return new this.constructor(this.current.getExpression(),this.max.getExpression(),this.width,this.contents.clone(_3e));
+}});
+_1.WithNode=dojo.extend(function(_3f,_40,_41){
+this.target=new dd._Filter(_3f);
+this.alias=_40;
+this.nodelist=_41;
+},{render:function(_42,_43){
+var _44=this.target.resolve(_42);
+_42=_42.push();
+_42[this.alias]=_44;
+_43=this.nodelist.render(_42,_43);
+_42=_42.pop();
+return _43;
+},unrender:function(_45,_46){
+return _46;
+},clone:function(_47){
+return new this.constructor(this.target.getExpression(),this.alias,this.nodelist.clone(_47));
+}});
+dojo.mixin(_1,{comment:function(_48,_49){
+_48.skip_past("endcomment");
+return dd._noOpNode;
+},debug:function(_4a,_4b){
+return new _1.DebugNode(_4a.create_text_node());
+},filter:function(_4c,_4d){
+var _4e=_4d.contents.split(null,1)[1];
+var _4f=_4c.create_variable_node("var|"+_4e);
+var _50=_4c.parse(["endfilter"]);
+_4c.next_token();
+return new _1.FilterNode(_4f,_50);
+},firstof:function(_51,_52){
+var _53=_52.split_contents().slice(1);
+if(!_53.length){
+throw new Error("'firstof' statement requires at least one argument");
+}
+return new _1.FirstOfNode(_53,_51.create_text_node());
+},spaceless:function(_54,_55){
+var _56=_54.parse(["endspaceless"]);
+_54.delete_first_token();
+return new _1.SpacelessNode(_56,_54.create_text_node());
+},templatetag:function(_57,_58){
+var _59=_58.contents.split();
+if(_59.length!=2){
+throw new Error("'templatetag' statement takes one argument");
+}
+var tag=_59[1];
+var _5a=_1.TemplateTagNode.prototype.mapping;
+if(!_5a[tag]){
+var _5b=[];
+for(var key in _5a){
+_5b.push(key);
+}
+throw new Error("Invalid templatetag argument: '"+tag+"'. Must be one of: "+_5b.join(", "));
+}
+return new _1.TemplateTagNode(tag,_57.create_text_node());
+},widthratio:function(_5c,_5d){
+var _5e=_5d.contents.split();
+if(_5e.length!=4){
+throw new Error("widthratio takes three arguments");
+}
+var _5f=+_5e[3];
+if(typeof _5f!="number"){
+throw new Error("widthratio final argument must be an integer");
+}
+return new _1.WidthRatioNode(_5e[1],_5e[2],_5f,_5c.create_text_node());
+},with_:function(_60,_61){
+var _62=_61.split_contents();
+if(_62.length!=4||_62[2]!="as"){
+throw new Error("do_width expected format as 'with value as name'");
+}
+var _63=_60.parse(["endwith"]);
+_60.next_token();
+return new _1.WithNode(_62[1],_62[3],_63);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/tag/date.js
===================================================================
--- trunk/web/dojo/dojox/dtl/tag/date.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/tag/date.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.tag.date"]){
+dojo._hasResource["dojox.dtl.tag.date"]=true;
+dojo.provide("dojox.dtl.tag.date");
+dojo.require("dojox.dtl._base");
+dojo.require("dojox.dtl.utils.date");
+dojox.dtl.tag.date.NowNode=function(_1,_2){
+this._format=_1;
+this.format=new dojox.dtl.utils.date.DateFormat(_1);
+this.contents=_2;
+};
+dojo.extend(dojox.dtl.tag.date.NowNode,{render:function(_3,_4){
+this.contents.set(this.format.format(new Date()));
+return this.contents.render(_3,_4);
+},unrender:function(_5,_6){
+return this.contents.unrender(_5,_6);
+},clone:function(_7){
+return new this.constructor(this._format,this.contents.clone(_7));
+}});
+dojox.dtl.tag.date.now=function(_8,_9){
+var _a=_9.split_contents();
+if(_a.length!=2){
+throw new Error("'now' statement takes one argument");
+}
+return new dojox.dtl.tag.date.NowNode(_a[1].slice(1,-1),_8.create_text_node());
+};
+}
Index: trunk/web/dojo/dojox/dtl/tag/logic.js
===================================================================
--- trunk/web/dojo/dojox/dtl/tag/logic.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/tag/logic.js	(revision 9)
@@ -0,0 +1,247 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.tag.logic"]){
+dojo._hasResource["dojox.dtl.tag.logic"]=true;
+dojo.provide("dojox.dtl.tag.logic");
+dojo.require("dojox.dtl._base");
+(function(){
+var dd=dojox.dtl;
+var _1=dd.text;
+var _2=dd.tag.logic;
+_2.IfNode=dojo.extend(function(_3,_4,_5,_6){
+this.bools=_3;
+this.trues=_4;
+this.falses=_5;
+this.type=_6;
+},{render:function(_7,_8){
+var i,_9,_a,_b,_c;
+if(this.type=="or"){
+for(i=0;_9=this.bools[i];i++){
+_a=_9[0];
+_b=_9[1];
+_c=_b.resolve(_7);
+if((_c&&!_a)||(_a&&!_c)){
+if(this.falses){
+_8=this.falses.unrender(_7,_8);
+}
+return (this.trues)?this.trues.render(_7,_8,this):_8;
+}
+}
+if(this.trues){
+_8=this.trues.unrender(_7,_8);
+}
+return (this.falses)?this.falses.render(_7,_8,this):_8;
+}else{
+for(i=0;_9=this.bools[i];i++){
+_a=_9[0];
+_b=_9[1];
+_c=_b.resolve(_7);
+if(_c==_a){
+if(this.trues){
+_8=this.trues.unrender(_7,_8);
+}
+return (this.falses)?this.falses.render(_7,_8,this):_8;
+}
+}
+if(this.falses){
+_8=this.falses.unrender(_7,_8);
+}
+return (this.trues)?this.trues.render(_7,_8,this):_8;
+}
+return _8;
+},unrender:function(_d,_e){
+_e=(this.trues)?this.trues.unrender(_d,_e):_e;
+_e=(this.falses)?this.falses.unrender(_d,_e):_e;
+return _e;
+},clone:function(_f){
+var _10=(this.trues)?this.trues.clone(_f):null;
+var _11=(this.falses)?this.falses.clone(_f):null;
+return new this.constructor(this.bools,_10,_11,this.type);
+}});
+_2.IfEqualNode=dojo.extend(function(_12,_13,_14,_15,_16){
+this.var1=new dd._Filter(_12);
+this.var2=new dd._Filter(_13);
+this.trues=_14;
+this.falses=_15;
+this.negate=_16;
+},{render:function(_17,_18){
+var _19=this.var1.resolve(_17);
+var _1a=this.var2.resolve(_17);
+_19=(typeof _19!="undefined")?_19:"";
+_1a=(typeof _19!="undefined")?_1a:"";
+if((this.negate&&_19!=_1a)||(!this.negate&&_19==_1a)){
+if(this.falses){
+_18=this.falses.unrender(_17,_18,this);
+}
+return (this.trues)?this.trues.render(_17,_18,this):_18;
+}
+if(this.trues){
+_18=this.trues.unrender(_17,_18,this);
+}
+return (this.falses)?this.falses.render(_17,_18,this):_18;
+},unrender:function(_1b,_1c){
+return _2.IfNode.prototype.unrender.call(this,_1b,_1c);
+},clone:function(_1d){
+var _1e=this.trues?this.trues.clone(_1d):null;
+var _1f=this.falses?this.falses.clone(_1d):null;
+return new this.constructor(this.var1.getExpression(),this.var2.getExpression(),_1e,_1f,this.negate);
+}});
+_2.ForNode=dojo.extend(function(_20,_21,_22,_23){
+this.assign=_20;
+this.loop=new dd._Filter(_21);
+this.reversed=_22;
+this.nodelist=_23;
+this.pool=[];
+},{render:function(_24,_25){
+var i,j,k;
+var _26=false;
+var _27=this.assign;
+for(k=0;k<_27.length;k++){
+if(typeof _24[_27[k]]!="undefined"){
+_26=true;
+_24=_24.push();
+break;
+}
+}
+if(!_26&&_24.forloop){
+_26=true;
+_24=_24.push();
+}
+var _28=this.loop.resolve(_24)||[];
+for(i=_28.length;i<this.pool.length;i++){
+this.pool[i].unrender(_24,_25,this);
+}
+if(this.reversed){
+_28=_28.slice(0).reverse();
+}
+var _29=dojo.isObject(_28)&&!dojo.isArrayLike(_28);
+var _2a=[];
+if(_29){
+for(var key in _28){
+_2a.push(_28[key]);
+}
+}else{
+_2a=_28;
+}
+var _2b=_24.forloop={parentloop:_24.get("forloop",{})};
+var j=0;
+for(i=0;i<_2a.length;i++){
+var _2c=_2a[i];
+_2b.counter0=j;
+_2b.counter=j+1;
+_2b.revcounter0=_2a.length-j-1;
+_2b.revcounter=_2a.length-j;
+_2b.first=!j;
+_2b.last=(j==_2a.length-1);
+if(_27.length>1&&dojo.isArrayLike(_2c)){
+if(!_26){
+_26=true;
+_24=_24.push();
+}
+var _2d={};
+for(k=0;k<_2c.length&&k<_27.length;k++){
+_2d[_27[k]]=_2c[k];
+}
+dojo.mixin(_24,_2d);
+}else{
+_24[_27[0]]=_2c;
+}
+if(j+1>this.pool.length){
+this.pool.push(this.nodelist.clone(_25));
+}
+_25=this.pool[j++].render(_24,_25,this);
+}
+delete _24.forloop;
+if(_26){
+_24=_24.pop();
+}else{
+for(k=0;k<_27.length;k++){
+delete _24[_27[k]];
+}
+}
+return _25;
+},unrender:function(_2e,_2f){
+for(var i=0,_30;_30=this.pool[i];i++){
+_2f=_30.unrender(_2e,_2f);
+}
+return _2f;
+},clone:function(_31){
+return new this.constructor(this.assign,this.loop.getExpression(),this.reversed,this.nodelist.clone(_31));
+}});
+dojo.mixin(_2,{if_:function(_32,_33){
+var i,_34,_35,_36=[],_37=_33.contents.split();
+_37.shift();
+_33=_37.join(" ");
+_37=_33.split(" and ");
+if(_37.length==1){
+_35="or";
+_37=_33.split(" or ");
+}else{
+_35="and";
+for(i=0;i<_37.length;i++){
+if(_37[i].indexOf(" or ")!=-1){
+throw new Error("'if' tags can't mix 'and' and 'or'");
+}
+}
+}
+for(i=0;_34=_37[i];i++){
+var not=false;
+if(_34.indexOf("not ")==0){
+_34=_34.slice(4);
+not=true;
+}
+_36.push([not,new dd._Filter(_34)]);
+}
+var _38=_32.parse(["else","endif"]);
+var _39=false;
+var _33=_32.next_token();
+if(_33.contents=="else"){
+_39=_32.parse(["endif"]);
+_32.next_token();
+}
+return new _2.IfNode(_36,_38,_39,_35);
+},_ifequal:function(_3a,_3b,_3c){
+var _3d=_3b.split_contents();
+if(_3d.length!=3){
+throw new Error(_3d[0]+" takes two arguments");
+}
+var end="end"+_3d[0];
+var _3e=_3a.parse(["else",end]);
+var _3f=false;
+var _3b=_3a.next_token();
+if(_3b.contents=="else"){
+_3f=_3a.parse([end]);
+_3a.next_token();
+}
+return new _2.IfEqualNode(_3d[1],_3d[2],_3e,_3f,_3c);
+},ifequal:function(_40,_41){
+return _2._ifequal(_40,_41);
+},ifnotequal:function(_42,_43){
+return _2._ifequal(_42,_43,true);
+},for_:function(_44,_45){
+var _46=_45.contents.split();
+if(_46.length<4){
+throw new Error("'for' statements should have at least four words: "+_45.contents);
+}
+var _47=_46[_46.length-1]=="reversed";
+var _48=(_47)?-3:-2;
+if(_46[_46.length+_48]!="in"){
+throw new Error("'for' tag received an invalid argument: "+_45.contents);
+}
+var _49=_46.slice(1,_48).join(" ").split(/ *, */);
+for(var i=0;i<_49.length;i++){
+if(!_49[i]||_49[i].indexOf(" ")!=-1){
+throw new Error("'for' tag received an invalid argument: "+_45.contents);
+}
+}
+var _4a=_44.parse(["endfor"]);
+_44.next_token();
+return new _2.ForNode(_49,_46[_46.length+_48+1],_47,_4a);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/HtmlInline.js
===================================================================
--- trunk/web/dojo/dojox/dtl/HtmlInline.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/HtmlInline.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.HtmlInline"]){
+dojo._hasResource["dojox.dtl.HtmlInline"]=true;
+dojo.provide("dojox.dtl.HtmlInline");
+dojo.require("dojox.dtl.DomInline");
+dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
+dojox.dtl.HtmlInline=dojox.dtl.DomInline;
+dojox.dtl.HtmlInline.prototype.declaredClass="dojox.dtl.HtmlInline";
+}
Index: trunk/web/dojo/dojox/dtl/_HtmlTemplated.js
===================================================================
--- trunk/web/dojo/dojox/dtl/_HtmlTemplated.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/_HtmlTemplated.js	(revision 9)
@@ -0,0 +1,15 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl._HtmlTemplated"]){
+dojo._hasResource["dojox.dtl._HtmlTemplated"]=true;
+dojo.provide("dojox.dtl._HtmlTemplated");
+dojo.require("dojox.dtl._DomTemplated");
+dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
+dojox.dtl._HtmlTemplated=dojox.dtl._DomTemplated;
+dojox.dtl._HtmlTemplated.prototype.declaredClass="dojox.dtl._HtmlTemplated";
+}
Index: trunk/web/dojo/dojox/dtl/html.js
===================================================================
--- trunk/web/dojo/dojox/dtl/html.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/html.js	(revision 9)
@@ -0,0 +1,14 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.html"]){
+dojo._hasResource["dojox.dtl.html"]=true;
+dojo.provide("dojox.dtl.html");
+dojo.deprecated("dojox.dtl.html","All packages and classes in dojox.dtl that start with Html or html have been renamed to Dom or dom");
+dojo.require("dojox.dtl.dom");
+dojox.dtl.HtmlTemplate=dojox.dtl.DomTemplate;
+}
Index: trunk/web/dojo/dojox/dtl/render/dom.js
===================================================================
--- trunk/web/dojo/dojox/dtl/render/dom.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/render/dom.js	(revision 9)
@@ -0,0 +1,35 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.render.dom"]){
+dojo._hasResource["dojox.dtl.render.dom"]=true;
+dojo.provide("dojox.dtl.render.dom");
+dojo.require("dojox.dtl.Context");
+dojo.require("dojox.dtl.dom");
+dojox.dtl.render.dom.Render=function(_1,_2){
+this._tpl=_2;
+this.domNode=dojo.byId(_1);
+};
+dojo.extend(dojox.dtl.render.dom.Render,{setAttachPoint:function(_3){
+this.domNode=_3;
+},render:function(_4,_5,_6){
+if(!this.domNode){
+throw new Error("You cannot use the Render object without specifying where you want to render it");
+}
+this._tpl=_5=_5||this._tpl;
+_6=_6||_5.getBuffer();
+_4=_4||new dojox.dtl.Context();
+var _7=_5.render(_4,_6).getParent();
+if(!_7){
+throw new Error("Rendered template does not have a root node");
+}
+if(this.domNode!==_7){
+this.domNode.parentNode.replaceChild(_7,this.domNode);
+this.domNode=_7;
+}
+}});
+}
Index: trunk/web/dojo/dojox/dtl/render/html.js
===================================================================
--- trunk/web/dojo/dojox/dtl/render/html.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/render/html.js	(revision 9)
@@ -0,0 +1,13 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.render.html"]){
+dojo._hasResource["dojox.dtl.render.html"]=true;
+dojo.provide("dojox.dtl.render.html");
+dojo.require("dojox.dtl.render.dom");
+dojox.dtl.render.html.Render=dojox.dtl.render.dom.Render;
+}
Index: trunk/web/dojo/dojox/dtl/_base.js
===================================================================
--- trunk/web/dojo/dojox/dtl/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/_base.js	(revision 9)
@@ -0,0 +1,581 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl._base"]){
+dojo._hasResource["dojox.dtl._base"]=true;
+dojo.provide("dojox.dtl._base");
+dojo.require("dojox.string.Builder");
+dojo.require("dojox.string.tokenize");
+dojo.experimental("dojox.dtl");
+(function(){
+var dd=dojox.dtl;
+dd.TOKEN_BLOCK=-1;
+dd.TOKEN_VAR=-2;
+dd.TOKEN_COMMENT=-3;
+dd.TOKEN_TEXT=3;
+dd._Context=dojo.extend(function(_1){
+if(_1){
+dojo._mixin(this,_1);
+if(_1.get){
+this._getter=_1.get;
+delete this.get;
+}
+}
+},{push:function(){
+var _2=this;
+var _3=dojo.delegate(this);
+_3.pop=function(){
+return _2;
+};
+return _3;
+},pop:function(){
+throw new Error("pop() called on empty Context");
+},get:function(_4,_5){
+var n=this._normalize;
+if(this._getter){
+var _6=this._getter(_4);
+if(typeof _6!="undefined"){
+return n(_6);
+}
+}
+if(typeof this[_4]!="undefined"){
+return n(this[_4]);
+}
+return _5;
+},_normalize:function(_7){
+if(_7 instanceof Date){
+_7.year=_7.getFullYear();
+_7.month=_7.getMonth()+1;
+_7.day=_7.getDate();
+_7.date=_7.year+"-"+("0"+_7.month).slice(-2)+"-"+("0"+_7.day).slice(-2);
+_7.hour=_7.getHours();
+_7.minute=_7.getMinutes();
+_7.second=_7.getSeconds();
+_7.microsecond=_7.getMilliseconds();
+}
+return _7;
+},update:function(_8){
+var _9=this.push();
+if(_8){
+dojo._mixin(this,_8);
+}
+return _9;
+}});
+var _a=/("(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)/g;
+var _b=/\s+/g;
+var _c=function(_d,_e){
+_d=_d||_b;
+if(!(_d instanceof RegExp)){
+_d=new RegExp(_d,"g");
+}
+if(!_d.global){
+throw new Error("You must use a globally flagged RegExp with split "+_d);
+}
+_d.exec("");
+var _f,_10=[],_11=0,i=0;
+while(_f=_d.exec(this)){
+_10.push(this.slice(_11,_d.lastIndex-_f[0].length));
+_11=_d.lastIndex;
+if(_e&&(++i>_e-1)){
+break;
+}
+}
+_10.push(this.slice(_11));
+return _10;
+};
+dd.Token=function(_12,_13){
+this.token_type=_12;
+this.contents=new String(dojo.trim(_13));
+this.contents.split=_c;
+this.split=function(){
+return String.prototype.split.apply(this.contents,arguments);
+};
+};
+dd.Token.prototype.split_contents=function(_14){
+var bit,_15=[],i=0;
+_14=_14||999;
+while(i++<_14&&(bit=_a.exec(this.contents))){
+bit=bit[0];
+if(bit.charAt(0)=="\""&&bit.slice(-1)=="\""){
+_15.push("\""+bit.slice(1,-1).replace("\\\"","\"").replace("\\\\","\\")+"\"");
+}else{
+if(bit.charAt(0)=="'"&&bit.slice(-1)=="'"){
+_15.push("'"+bit.slice(1,-1).replace("\\'","'").replace("\\\\","\\")+"'");
+}else{
+_15.push(bit);
+}
+}
+}
+return _15;
+};
+var ddt=dd.text={_get:function(_16,_17,_18){
+var _19=dd.register.get(_16,_17.toLowerCase(),_18);
+if(!_19){
+if(!_18){
+throw new Error("No tag found for "+_17);
+}
+return null;
+}
+var fn=_19[1];
+var _1a=_19[2];
+var _1b;
+if(fn.indexOf(":")!=-1){
+_1b=fn.split(":");
+fn=_1b.pop();
+}
+dojo["require"](_1a);
+var _1c=dojo.getObject(_1a);
+return _1c[fn||_17]||_1c[_17+"_"]||_1c[fn+"_"];
+},getTag:function(_1d,_1e){
+return ddt._get("tag",_1d,_1e);
+},getFilter:function(_1f,_20){
+return ddt._get("filter",_1f,_20);
+},getTemplate:function(_21){
+return new dd.Template(ddt.getTemplateString(_21));
+},getTemplateString:function(_22){
+return dojo._getText(_22.toString())||"";
+},_resolveLazy:function(_23,_24,_25){
+if(_24){
+if(_25){
+return dojo.fromJson(dojo._getText(_23))||{};
+}else{
+return dd.text.getTemplateString(_23);
+}
+}else{
+return dojo.xhrGet({handleAs:(_25)?"json":"text",url:_23});
+}
+},_resolveTemplateArg:function(arg,_26){
+if(ddt._isTemplate(arg)){
+if(!_26){
+var d=new dojo.Deferred();
+d.callback(arg);
+return d;
+}
+return arg;
+}
+return ddt._resolveLazy(arg,_26);
+},_isTemplate:function(arg){
+return (typeof arg=="undefined")||(typeof arg=="string"&&(arg.match(/^\s*[<{]/)||arg.indexOf(" ")!=-1));
+},_resolveContextArg:function(arg,_27){
+if(arg.constructor==Object){
+if(!_27){
+var d=new dojo.Deferred;
+d.callback(arg);
+return d;
+}
+return arg;
+}
+return ddt._resolveLazy(arg,_27,true);
+},_re:/(?:\{\{\s*(.+?)\s*\}\}|\{%\s*(load\s*)?(.+?)\s*%\})/g,tokenize:function(str){
+return dojox.string.tokenize(str,ddt._re,ddt._parseDelims);
+},_parseDelims:function(_28,_29,tag){
+if(_28){
+return [dd.TOKEN_VAR,_28];
+}else{
+if(_29){
+var _2a=dojo.trim(tag).split(/\s+/g);
+for(var i=0,_2b;_2b=_2a[i];i++){
+dojo["require"](_2b);
+}
+}else{
+return [dd.TOKEN_BLOCK,tag];
+}
+}
+}};
+dd.Template=dojo.extend(function(_2c,_2d){
+var str=_2d?_2c:ddt._resolveTemplateArg(_2c,true)||"";
+var _2e=ddt.tokenize(str);
+var _2f=new dd._Parser(_2e);
+this.nodelist=_2f.parse();
+},{update:function(_30,_31){
+return ddt._resolveContextArg(_31).addCallback(this,function(_32){
+var _33=this.render(new dd._Context(_32));
+if(_30.forEach){
+_30.forEach(function(_34){
+_34.innerHTML=_33;
+});
+}else{
+dojo.byId(_30).innerHTML=_33;
+}
+return this;
+});
+},render:function(_35,_36){
+_36=_36||this.getBuffer();
+_35=_35||new dd._Context({});
+return this.nodelist.render(_35,_36)+"";
+},getBuffer:function(){
+dojo.require("dojox.string.Builder");
+return new dojox.string.Builder();
+}});
+var _37=/\{\{\s*(.+?)\s*\}\}/g;
+dd.quickFilter=function(str){
+if(!str){
+return new dd._NodeList();
+}
+if(str.indexOf("{%")==-1){
+return new dd._QuickNodeList(dojox.string.tokenize(str,_37,function(_38){
+return new dd._Filter(_38);
+}));
+}
+};
+dd._QuickNodeList=dojo.extend(function(_39){
+this.contents=_39;
+},{render:function(_3a,_3b){
+for(var i=0,l=this.contents.length;i<l;i++){
+if(this.contents[i].resolve){
+_3b=_3b.concat(this.contents[i].resolve(_3a));
+}else{
+_3b=_3b.concat(this.contents[i]);
+}
+}
+return _3b;
+},dummyRender:function(_3c){
+return this.render(_3c,dd.Template.prototype.getBuffer()).toString();
+},clone:function(_3d){
+return this;
+}});
+dd._Filter=dojo.extend(function(_3e){
+if(!_3e){
+throw new Error("Filter must be called with variable name");
+}
+this.contents=_3e;
+var _3f=this._cache[_3e];
+if(_3f){
+this.key=_3f[0];
+this.filters=_3f[1];
+}else{
+this.filters=[];
+dojox.string.tokenize(_3e,this._re,this._tokenize,this);
+this._cache[_3e]=[this.key,this.filters];
+}
+},{_cache:{},_re:/(?:^_\("([^\\"]*(?:\\.[^\\"])*)"\)|^"([^\\"]*(?:\\.[^\\"]*)*)"|^([a-zA-Z0-9_.]+)|\|(\w+)(?::(?:_\("([^\\"]*(?:\\.[^\\"])*)"\)|"([^\\"]*(?:\\.[^\\"]*)*)"|([a-zA-Z0-9_.]+)|'([^\\']*(?:\\.[^\\']*)*)'))?|^'([^\\']*(?:\\.[^\\']*)*)')/g,_values:{0:"\"",1:"\"",2:"",8:"\""},_args:{4:"\"",5:"\"",6:"",7:"'"},_tokenize:function(){
+var pos,arg;
+for(var i=0,has=[];i<arguments.length;i++){
+has[i]=(typeof arguments[i]!="undefined"&&typeof arguments[i]=="string"&&arguments[i]);
+}
+if(!this.key){
+for(pos in this._values){
+if(has[pos]){
+this.key=this._values[pos]+arguments[pos]+this._values[pos];
+break;
+}
+}
+}else{
+for(pos in this._args){
+if(has[pos]){
+var _40=arguments[pos];
+if(this._args[pos]=="'"){
+_40=_40.replace(/\\'/g,"'");
+}else{
+if(this._args[pos]=="\""){
+_40=_40.replace(/\\"/g,"\"");
+}
+}
+arg=[!this._args[pos],_40];
+break;
+}
+}
+var fn=ddt.getFilter(arguments[3]);
+if(!dojo.isFunction(fn)){
+throw new Error(arguments[3]+" is not registered as a filter");
+}
+this.filters.push([fn,arg]);
+}
+},getExpression:function(){
+return this.contents;
+},resolve:function(_41){
+if(typeof this.key=="undefined"){
+return "";
+}
+var str=this.resolvePath(this.key,_41);
+for(var i=0,_42;_42=this.filters[i];i++){
+if(_42[1]){
+if(_42[1][0]){
+str=_42[0](str,this.resolvePath(_42[1][1],_41));
+}else{
+str=_42[0](str,_42[1][1]);
+}
+}else{
+str=_42[0](str);
+}
+}
+return str;
+},resolvePath:function(_43,_44){
+var _45,_46;
+var _47=_43.charAt(0);
+var _48=_43.slice(-1);
+if(!isNaN(parseInt(_47))){
+_45=(_43.indexOf(".")==-1)?parseInt(_43):parseFloat(_43);
+}else{
+if(_47=="\""&&_47==_48){
+_45=_43.slice(1,-1);
+}else{
+if(_43=="true"){
+return true;
+}
+if(_43=="false"){
+return false;
+}
+if(_43=="null"||_43=="None"){
+return null;
+}
+_46=_43.split(".");
+_45=_44.get(_46[0]);
+if(dojo.isFunction(_45)){
+var _49=_44.getThis&&_44.getThis();
+if(_45.alters_data){
+_45="";
+}else{
+if(_49){
+_45=_45.call(_49);
+}else{
+_45="";
+}
+}
+}
+for(var i=1;i<_46.length;i++){
+var _4a=_46[i];
+if(_45){
+var _4b=_45;
+if(dojo.isObject(_45)&&_4a=="items"&&typeof _45[_4a]=="undefined"){
+var _4c=[];
+for(var key in _45){
+_4c.push([key,_45[key]]);
+}
+_45=_4c;
+continue;
+}
+if(_45.get&&dojo.isFunction(_45.get)&&_45.get.safe){
+_45=_45.get(_4a);
+}else{
+if(typeof _45[_4a]=="undefined"){
+_45=_45[_4a];
+break;
+}else{
+_45=_45[_4a];
+}
+}
+if(dojo.isFunction(_45)){
+if(_45.alters_data){
+_45="";
+}else{
+_45=_45.call(_4b);
+}
+}else{
+if(_45 instanceof Date){
+_45=dd._Context.prototype._normalize(_45);
+}
+}
+}else{
+return "";
+}
+}
+}
+}
+return _45;
+}});
+dd._TextNode=dd._Node=dojo.extend(function(obj){
+this.contents=obj;
+},{set:function(_4d){
+this.contents=_4d;
+return this;
+},render:function(_4e,_4f){
+return _4f.concat(this.contents);
+},isEmpty:function(){
+return !dojo.trim(this.contents);
+},clone:function(){
+return this;
+}});
+dd._NodeList=dojo.extend(function(_50){
+this.contents=_50||[];
+this.last="";
+},{push:function(_51){
+this.contents.push(_51);
+return this;
+},concat:function(_52){
+this.contents=this.contents.concat(_52);
+return this;
+},render:function(_53,_54){
+for(var i=0;i<this.contents.length;i++){
+_54=this.contents[i].render(_53,_54);
+if(!_54){
+throw new Error("Template must return buffer");
+}
+}
+return _54;
+},dummyRender:function(_55){
+return this.render(_55,dd.Template.prototype.getBuffer()).toString();
+},unrender:function(){
+return arguments[1];
+},clone:function(){
+return this;
+},rtrim:function(){
+while(1){
+i=this.contents.length-1;
+if(this.contents[i] instanceof dd._TextNode&&this.contents[i].isEmpty()){
+this.contents.pop();
+}else{
+break;
+}
+}
+return this;
+}});
+dd._VarNode=dojo.extend(function(str){
+this.contents=new dd._Filter(str);
+},{render:function(_56,_57){
+var str=this.contents.resolve(_56);
+if(!str.safe){
+str=dd._base.escape(""+str);
+}
+return _57.concat(str);
+}});
+dd._noOpNode=new function(){
+this.render=this.unrender=function(){
+return arguments[1];
+};
+this.clone=function(){
+return this;
+};
+};
+dd._Parser=dojo.extend(function(_58){
+this.contents=_58;
+},{i:0,parse:function(_59){
+var _5a={},_5b;
+_59=_59||[];
+for(var i=0;i<_59.length;i++){
+_5a[_59[i]]=true;
+}
+var _5c=new dd._NodeList();
+while(this.i<this.contents.length){
+_5b=this.contents[this.i++];
+if(typeof _5b=="string"){
+_5c.push(new dd._TextNode(_5b));
+}else{
+var _5d=_5b[0];
+var _5e=_5b[1];
+if(_5d==dd.TOKEN_VAR){
+_5c.push(new dd._VarNode(_5e));
+}else{
+if(_5d==dd.TOKEN_BLOCK){
+if(_5a[_5e]){
+--this.i;
+return _5c;
+}
+var cmd=_5e.split(/\s+/g);
+if(cmd.length){
+cmd=cmd[0];
+var fn=ddt.getTag(cmd);
+if(fn){
+_5c.push(fn(this,new dd.Token(_5d,_5e)));
+}
+}
+}
+}
+}
+}
+if(_59.length){
+throw new Error("Could not find closing tag(s): "+_59.toString());
+}
+this.contents.length=0;
+return _5c;
+},next_token:function(){
+var _5f=this.contents[this.i++];
+return new dd.Token(_5f[0],_5f[1]);
+},delete_first_token:function(){
+this.i++;
+},skip_past:function(_60){
+while(this.i<this.contents.length){
+var _61=this.contents[this.i++];
+if(_61[0]==dd.TOKEN_BLOCK&&_61[1]==_60){
+return;
+}
+}
+throw new Error("Unclosed tag found when looking for "+_60);
+},create_variable_node:function(_62){
+return new dd._VarNode(_62);
+},create_text_node:function(_63){
+return new dd._TextNode(_63||"");
+},getTemplate:function(_64){
+return new dd.Template(_64);
+}});
+dd.register={_registry:{attributes:[],tags:[],filters:[]},get:function(_65,_66){
+var _67=dd.register._registry[_65+"s"];
+for(var i=0,_68;_68=_67[i];i++){
+if(typeof _68[0]=="string"){
+if(_68[0]==_66){
+return _68;
+}
+}else{
+if(_66.match(_68[0])){
+return _68;
+}
+}
+}
+},getAttributeTags:function(){
+var _69=[];
+var _6a=dd.register._registry.attributes;
+for(var i=0,_6b;_6b=_6a[i];i++){
+if(_6b.length==3){
+_69.push(_6b);
+}else{
+var fn=dojo.getObject(_6b[1]);
+if(fn&&dojo.isFunction(fn)){
+_6b.push(fn);
+_69.push(_6b);
+}
+}
+}
+return _69;
+},_any:function(_6c,_6d,_6e){
+for(var _6f in _6e){
+for(var i=0,fn;fn=_6e[_6f][i];i++){
+var key=fn;
+if(dojo.isArray(fn)){
+key=fn[0];
+fn=fn[1];
+}
+if(typeof key=="string"){
+if(key.substr(0,5)=="attr:"){
+var _70=fn;
+if(_70.substr(0,5)=="attr:"){
+_70=_70.slice(5);
+}
+dd.register._registry.attributes.push([_70.toLowerCase(),_6d+"."+_6f+"."+_70]);
+}
+key=key.toLowerCase();
+}
+dd.register._registry[_6c].push([key,fn,_6d+"."+_6f]);
+}
+}
+},tags:function(_71,_72){
+dd.register._any("tags",_71,_72);
+},filters:function(_73,_74){
+dd.register._any("filters",_73,_74);
+}};
+var _75=/&/g;
+var _76=/</g;
+var _77=/>/g;
+var _78=/'/g;
+var _79=/"/g;
+dd._base.escape=function(_7a){
+return dd.mark_safe(_7a.replace(_75,"&amp;").replace(_76,"&lt;").replace(_77,"&gt;").replace(_79,"&quot;").replace(_78,"&#39;"));
+};
+dd._base.safe=function(_7b){
+if(typeof _7b=="string"){
+_7b=new String(_7b);
+}
+if(typeof _7b=="object"){
+_7b.safe=true;
+}
+return _7b;
+};
+dd.mark_safe=dd._base.safe;
+dd.register.tags("dojox.dtl.tag",{"date":["now"],"logic":["if","for","ifequal","ifnotequal"],"loader":["extends","block","include","load","ssi"],"misc":["comment","debug","filter","firstof","spaceless","templatetag","widthratio","with"],"loop":["cycle","ifchanged","regroup"]});
+dd.register.filters("dojox.dtl.filter",{"dates":["date","time","timesince","timeuntil"],"htmlstrings":["linebreaks","linebreaksbr","removetags","striptags"],"integers":["add","get_digit"],"lists":["dictsort","dictsortreversed","first","join","length","length_is","random","slice","unordered_list"],"logic":["default","default_if_none","divisibleby","yesno"],"misc":["filesizeformat","pluralize","phone2numeric","pprint"],"strings":["addslashes","capfirst","center","cut","fix_ampersands","floatformat","iriencode","linenumbers","ljust","lower","make_list","rjust","slugify","stringformat","title","truncatewords","truncatewords_html","upper","urlencode","urlize","urlizetrunc","wordcount","wordwrap"]});
+dd.register.filters("dojox.dtl",{"_base":["escape","safe"]});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/filter/strings.js
===================================================================
--- trunk/web/dojo/dojox/dtl/filter/strings.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/filter/strings.js	(revision 9)
@@ -0,0 +1,270 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.filter.strings"]){
+dojo._hasResource["dojox.dtl.filter.strings"]=true;
+dojo.provide("dojox.dtl.filter.strings");
+dojo.require("dojox.dtl.filter.htmlstrings");
+dojo.require("dojox.string.sprintf");
+dojo.require("dojox.string.tokenize");
+dojo.mixin(dojox.dtl.filter.strings,{_urlquote:function(_1,_2){
+if(!_2){
+_2="/";
+}
+return dojox.string.tokenize(_1,/([^\w-_.])/g,function(_3){
+if(_2.indexOf(_3)==-1){
+if(_3==" "){
+return "+";
+}else{
+return "%"+_3.charCodeAt(0).toString(16).toUpperCase();
+}
+}
+return _3;
+}).join("");
+},addslashes:function(_4){
+return _4.replace(/\\/g,"\\\\").replace(/"/g,"\\\"").replace(/'/g,"\\'");
+},capfirst:function(_5){
+_5=""+_5;
+return _5.charAt(0).toUpperCase()+_5.substring(1);
+},center:function(_6,_7){
+_7=_7||_6.length;
+_6=_6+"";
+var _8=_7-_6.length;
+if(_8%2){
+_6=_6+" ";
+_8-=1;
+}
+for(var i=0;i<_8;i+=2){
+_6=" "+_6+" ";
+}
+return _6;
+},cut:function(_9,_a){
+_a=_a+""||"";
+_9=_9+"";
+return _9.replace(new RegExp(_a,"g"),"");
+},_fix_ampersands:/&(?!(\w+|#\d+);)/g,fix_ampersands:function(_b){
+return _b.replace(dojox.dtl.filter.strings._fix_ampersands,"&amp;");
+},floatformat:function(_c,_d){
+_d=parseInt(_d||-1,10);
+_c=parseFloat(_c);
+var m=_c-_c.toFixed(0);
+if(!m&&_d<0){
+return _c.toFixed();
+}
+_c=_c.toFixed(Math.abs(_d));
+return (_d<0)?parseFloat(_c)+"":_c;
+},iriencode:function(_e){
+return dojox.dtl.filter.strings._urlquote(_e,"/#%[]=:;$&()+,!");
+},linenumbers:function(_f){
+var df=dojox.dtl.filter;
+var _10=_f.split("\n");
+var _11=[];
+var _12=(_10.length+"").length;
+for(var i=0,_13;i<_10.length;i++){
+_13=_10[i];
+_11.push(df.strings.ljust(i+1,_12)+". "+dojox.dtl._base.escape(_13));
+}
+return _11.join("\n");
+},ljust:function(_14,arg){
+_14=_14+"";
+arg=parseInt(arg,10);
+while(_14.length<arg){
+_14=_14+" ";
+}
+return _14;
+},lower:function(_15){
+return (_15+"").toLowerCase();
+},make_list:function(_16){
+var _17=[];
+if(typeof _16=="number"){
+_16=_16+"";
+}
+if(_16.charAt){
+for(var i=0;i<_16.length;i++){
+_17.push(_16.charAt(i));
+}
+return _17;
+}
+if(typeof _16=="object"){
+for(var key in _16){
+_17.push(_16[key]);
+}
+return _17;
+}
+return [];
+},rjust:function(_18,arg){
+_18=_18+"";
+arg=parseInt(arg,10);
+while(_18.length<arg){
+_18=" "+_18;
+}
+return _18;
+},slugify:function(_19){
+_19=_19.replace(/[^\w\s-]/g,"").toLowerCase();
+return _19.replace(/[\-\s]+/g,"-");
+},_strings:{},stringformat:function(_1a,arg){
+arg=""+arg;
+var _1b=dojox.dtl.filter.strings._strings;
+if(!_1b[arg]){
+_1b[arg]=new dojox.string.sprintf.Formatter("%"+arg);
+}
+return _1b[arg].format(_1a);
+},title:function(_1c){
+var _1d,_1e="";
+for(var i=0,_1f;i<_1c.length;i++){
+_1f=_1c.charAt(i);
+if(_1d==" "||_1d=="\n"||_1d=="\t"||!_1d){
+_1e+=_1f.toUpperCase();
+}else{
+_1e+=_1f.toLowerCase();
+}
+_1d=_1f;
+}
+return _1e;
+},_truncatewords:/[ \n\r\t]/,truncatewords:function(_20,arg){
+arg=parseInt(arg,10);
+if(!arg){
+return _20;
+}
+for(var i=0,j=_20.length,_21=0,_22,_23;i<_20.length;i++){
+_22=_20.charAt(i);
+if(dojox.dtl.filter.strings._truncatewords.test(_23)){
+if(!dojox.dtl.filter.strings._truncatewords.test(_22)){
+++_21;
+if(_21==arg){
+return _20.substring(0,j+1);
+}
+}
+}else{
+if(!dojox.dtl.filter.strings._truncatewords.test(_22)){
+j=i;
+}
+}
+_23=_22;
+}
+return _20;
+},_truncate_words:/(&.*?;|<.*?>|(\w[\w\-]*))/g,_truncate_tag:/<(\/)?([^ ]+?)(?: (\/)| .*?)?>/,_truncate_singlets:{br:true,col:true,link:true,base:true,img:true,param:true,area:true,hr:true,input:true},truncatewords_html:function(_24,arg){
+arg=parseInt(arg,10);
+if(arg<=0){
+return "";
+}
+var _25=dojox.dtl.filter.strings;
+var _26=0;
+var _27=[];
+var _28=dojox.string.tokenize(_24,_25._truncate_words,function(all,_29){
+if(_29){
+++_26;
+if(_26<arg){
+return _29;
+}else{
+if(_26==arg){
+return _29+" ...";
+}
+}
+}
+var tag=all.match(_25._truncate_tag);
+if(!tag||_26>=arg){
+return;
+}
+var _2a=tag[1];
+var _2b=tag[2].toLowerCase();
+var _2c=tag[3];
+if(_2a||_25._truncate_singlets[_2b]){
+}else{
+if(_2a){
+var i=dojo.indexOf(_27,_2b);
+if(i!=-1){
+_27=_27.slice(i+1);
+}
+}else{
+_27.unshift(_2b);
+}
+}
+return all;
+}).join("");
+_28=_28.replace(/\s+$/g,"");
+for(var i=0,tag;tag=_27[i];i++){
+_28+="</"+tag+">";
+}
+return _28;
+},upper:function(_2d){
+return _2d.toUpperCase();
+},urlencode:function(_2e){
+return dojox.dtl.filter.strings._urlquote(_2e);
+},_urlize:/^((?:[(>]|&lt;)*)(.*?)((?:[.,)>\n]|&gt;)*)$/,_urlize2:/^\S+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+$/,urlize:function(_2f){
+return dojox.dtl.filter.strings.urlizetrunc(_2f);
+},urlizetrunc:function(_30,arg){
+arg=parseInt(arg);
+return dojox.string.tokenize(_30,/(\S+)/g,function(_31){
+var _32=dojox.dtl.filter.strings._urlize.exec(_31);
+if(!_32){
+return _31;
+}
+var _33=_32[1];
+var _34=_32[2];
+var _35=_32[3];
+var _36=_34.indexOf("www.")==0;
+var _37=_34.indexOf("@")!=-1;
+var _38=_34.indexOf(":")!=-1;
+var _39=_34.indexOf("http://")==0;
+var _3a=_34.indexOf("https://")==0;
+var _3b=/[a-zA-Z0-9]/.test(_34.charAt(0));
+var _3c=_34.substring(_34.length-4);
+var _3d=_34;
+if(arg>3){
+_3d=_3d.substring(0,arg-3)+"...";
+}
+if(_36||(!_37&&!_39&&_34.length&&_3b&&(_3c==".org"||_3c==".net"||_3c==".com"))){
+return "<a href=\"http://"+_34+"\" rel=\"nofollow\">"+_3d+"</a>";
+}else{
+if(_39||_3a){
+return "<a href=\""+_34+"\" rel=\"nofollow\">"+_3d+"</a>";
+}else{
+if(_37&&!_36&&!_38&&dojox.dtl.filter.strings._urlize2.test(_34)){
+return "<a href=\"mailto:"+_34+"\">"+_34+"</a>";
+}
+}
+}
+return _31;
+}).join("");
+},wordcount:function(_3e){
+_3e=dojo.trim(_3e);
+if(!_3e){
+return 0;
+}
+return _3e.split(/\s+/g).length;
+},wordwrap:function(_3f,arg){
+arg=parseInt(arg);
+var _40=[];
+var _41=_3f.split(/\s+/g);
+if(_41.length){
+var _42=_41.shift();
+_40.push(_42);
+var pos=_42.length-_42.lastIndexOf("\n")-1;
+for(var i=0;i<_41.length;i++){
+_42=_41[i];
+if(_42.indexOf("\n")!=-1){
+var _43=_42.split(/\n/g);
+}else{
+var _43=[_42];
+}
+pos+=_43[0].length+1;
+if(arg&&pos>arg){
+_40.push("\n");
+pos=_43[_43.length-1].length;
+}else{
+_40.push(" ");
+if(_43.length>1){
+pos=_43[_43.length-1].length;
+}
+}
+_40.push(_42);
+}
+}
+return _40.join("");
+}});
+}
Index: trunk/web/dojo/dojox/dtl/filter/misc.js
===================================================================
--- trunk/web/dojo/dojox/dtl/filter/misc.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/filter/misc.js	(revision 9)
@@ -0,0 +1,52 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.filter.misc"]){
+dojo._hasResource["dojox.dtl.filter.misc"]=true;
+dojo.provide("dojox.dtl.filter.misc");
+dojo.mixin(dojox.dtl.filter.misc,{filesizeformat:function(_1){
+_1=parseFloat(_1);
+if(_1<1024){
+return (_1==1)?_1+" byte":_1+" bytes";
+}else{
+if(_1<1024*1024){
+return (_1/1024).toFixed(1)+" KB";
+}else{
+if(_1<1024*1024*1024){
+return (_1/1024/1024).toFixed(1)+" MB";
+}
+}
+}
+return (_1/1024/1024/1024).toFixed(1)+" GB";
+},pluralize:function(_2,_3){
+_3=_3||"s";
+if(_3.indexOf(",")==-1){
+_3=","+_3;
+}
+var _4=_3.split(",");
+if(_4.length>2){
+return "";
+}
+var _5=_4[0];
+var _6=_4[1];
+if(parseInt(_2,10)!=1){
+return _6;
+}
+return _5;
+},_phone2numeric:{a:2,b:2,c:2,d:3,e:3,f:3,g:4,h:4,i:4,j:5,k:5,l:5,m:6,n:6,o:6,p:7,r:7,s:7,t:8,u:8,v:8,w:9,x:9,y:9},phone2numeric:function(_7){
+var dm=dojox.dtl.filter.misc;
+_7=_7+"";
+var _8="";
+for(var i=0;i<_7.length;i++){
+var _9=_7.charAt(i).toLowerCase();
+(dm._phone2numeric[_9])?_8+=dm._phone2numeric[_9]:_8+=_7.charAt(i);
+}
+return _8;
+},pprint:function(_a){
+return dojo.toJson(_a);
+}});
+}
Index: trunk/web/dojo/dojox/dtl/filter/logic.js
===================================================================
--- trunk/web/dojo/dojox/dtl/filter/logic.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/filter/logic.js	(revision 9)
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.filter.logic"]){
+dojo._hasResource["dojox.dtl.filter.logic"]=true;
+dojo.provide("dojox.dtl.filter.logic");
+dojo.mixin(dojox.dtl.filter.logic,{default_:function(_1,_2){
+return _1||_2||"";
+},default_if_none:function(_3,_4){
+return (_3===null)?_4||"":_3||"";
+},divisibleby:function(_5,_6){
+return (parseInt(_5,10)%parseInt(_6,10))===0;
+},_yesno:/\s*,\s*/g,yesno:function(_7,_8){
+if(!_8){
+_8="yes,no,maybe";
+}
+var _9=_8.split(dojox.dtl.filter.logic._yesno);
+if(_9.length<2){
+return _7;
+}
+if(_7){
+return _9[0];
+}
+if((!_7&&_7!==null)||_9.length<3){
+return _9[1];
+}
+return _9[2];
+}});
+}
Index: trunk/web/dojo/dojox/dtl/filter/htmlstrings.js
===================================================================
--- trunk/web/dojo/dojox/dtl/filter/htmlstrings.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/filter/htmlstrings.js	(revision 9)
@@ -0,0 +1,37 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.filter.htmlstrings"]){
+dojo._hasResource["dojox.dtl.filter.htmlstrings"]=true;
+dojo.provide("dojox.dtl.filter.htmlstrings");
+dojo.require("dojox.dtl._base");
+dojo.mixin(dojox.dtl.filter.htmlstrings,{_linebreaksrn:/(\r\n|\n\r)/g,_linebreaksn:/\n{2,}/g,_linebreakss:/(^\s+|\s+$)/g,_linebreaksbr:/\n/g,_removetagsfind:/[a-z0-9]+/g,_striptags:/<[^>]*?>/g,linebreaks:function(_1){
+var _2=[];
+var dh=dojox.dtl.filter.htmlstrings;
+_1=_1.replace(dh._linebreaksrn,"\n");
+var _3=_1.split(dh._linebreaksn);
+for(var i=0;i<_3.length;i++){
+var _4=_3[i].replace(dh._linebreakss,"").replace(dh._linebreaksbr,"<br />");
+_2.push("<p>"+_4+"</p>");
+}
+return _2.join("\n\n");
+},linebreaksbr:function(_5){
+var dh=dojox.dtl.filter.htmlstrings;
+return _5.replace(dh._linebreaksrn,"\n").replace(dh._linebreaksbr,"<br />");
+},removetags:function(_6,_7){
+var dh=dojox.dtl.filter.htmlstrings;
+var _8=[];
+var _9;
+while(_9=dh._removetagsfind.exec(_7)){
+_8.push(_9[0]);
+}
+_8="("+_8.join("|")+")";
+return _6.replace(new RegExp("</?s*"+_8+"s*[^>]*>","gi"),"");
+},striptags:function(_a){
+return _a.replace(dojox.dtl.filter.htmlstrings._striptags,"");
+}});
+}
Index: trunk/web/dojo/dojox/dtl/filter/lists.js
===================================================================
--- trunk/web/dojo/dojox/dtl/filter/lists.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/filter/lists.js	(revision 9)
@@ -0,0 +1,95 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.filter.lists"]){
+dojo._hasResource["dojox.dtl.filter.lists"]=true;
+dojo.provide("dojox.dtl.filter.lists");
+dojo.require("dojox.dtl._base");
+dojo.mixin(dojox.dtl.filter.lists,{_dictsort:function(a,b){
+if(a[0]==b[0]){
+return 0;
+}
+return (a[0]<b[0])?-1:1;
+},dictsort:function(_1,_2){
+if(!_2){
+return _1;
+}
+var i,_3,_4=[];
+if(!dojo.isArray(_1)){
+var _5=_1,_1=[];
+for(var _6 in _5){
+_1.push(_5[_6]);
+}
+}
+for(i=0;i<_1.length;i++){
+_4.push([new dojox.dtl._Filter("var."+_2).resolve(new dojox.dtl._Context({"var":_1[i]})),_1[i]]);
+}
+_4.sort(dojox.dtl.filter.lists._dictsort);
+var _7=[];
+for(i=0;_3=_4[i];i++){
+_7.push(_3[1]);
+}
+return _7;
+},dictsortreversed:function(_8,_9){
+if(!_9){
+return _8;
+}
+var _a=dojox.dtl.filter.lists.dictsort(_8,_9);
+return _a.reverse();
+},first:function(_b){
+return (_b.length)?_b[0]:"";
+},join:function(_c,_d){
+return _c.join(_d||",");
+},length:function(_e){
+return (isNaN(_e.length))?(_e+"").length:_e.length;
+},length_is:function(_f,arg){
+return _f.length==parseInt(arg);
+},random:function(_10){
+return _10[Math.floor(Math.random()*_10.length)];
+},slice:function(_11,arg){
+arg=arg||"";
+var _12=arg.split(":");
+var _13=[];
+for(var i=0;i<_12.length;i++){
+if(!_12[i].length){
+_13.push(null);
+}else{
+_13.push(parseInt(_12[i]));
+}
+}
+if(_13[0]===null){
+_13[0]=0;
+}
+if(_13[0]<0){
+_13[0]=_11.length+_13[0];
+}
+if(_13.length<2||_13[1]===null){
+_13[1]=_11.length;
+}
+if(_13[1]<0){
+_13[1]=_11.length+_13[1];
+}
+return _11.slice(_13[0],_13[1]);
+},_unordered_list:function(_14,_15){
+var ddl=dojox.dtl.filter.lists;
+var i,_16="";
+for(i=0;i<_15;i++){
+_16+="\t";
+}
+if(_14[1]&&_14[1].length){
+var _17=[];
+for(i=0;i<_14[1].length;i++){
+_17.push(ddl._unordered_list(_14[1][i],_15+1));
+}
+return _16+"<li>"+_14[0]+"\n"+_16+"<ul>\n"+_17.join("\n")+"\n"+_16+"</ul>\n"+_16+"</li>";
+}else{
+return _16+"<li>"+_14[0]+"</li>";
+}
+},unordered_list:function(_18){
+return dojox.dtl.filter.lists._unordered_list(_18,1);
+}});
+}
Index: trunk/web/dojo/dojox/dtl/filter/dates.js
===================================================================
--- trunk/web/dojo/dojox/dtl/filter/dates.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/filter/dates.js	(revision 9)
@@ -0,0 +1,59 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.filter.dates"]){
+dojo._hasResource["dojox.dtl.filter.dates"]=true;
+dojo.provide("dojox.dtl.filter.dates");
+dojo.require("dojox.dtl.utils.date");
+(function(){
+var _1=dojox.dtl.filter.dates;
+dojo.mixin(_1,{_toDate:function(_2){
+if(_2 instanceof Date){
+return _2;
+}
+_2=new Date(_2);
+if(_2.getTime()==new Date(0).getTime()){
+return "";
+}
+return _2;
+},date:function(_3,_4){
+_3=_1._toDate(_3);
+if(!_3){
+return "";
+}
+_4=_4||"N j, Y";
+return dojox.dtl.utils.date.format(_3,_4);
+},time:function(_5,_6){
+_5=_1._toDate(_5);
+if(!_5){
+return "";
+}
+_6=_6||"P";
+return dojox.dtl.utils.date.format(_5,_6);
+},timesince:function(_7,_8){
+_7=_1._toDate(_7);
+if(!_7){
+return "";
+}
+var _9=dojox.dtl.utils.date.timesince;
+if(_8){
+return _9(_8,_7);
+}
+return _9(_7);
+},timeuntil:function(_a,_b){
+_a=_1._toDate(_a);
+if(!_a){
+return "";
+}
+var _c=dojox.dtl.utils.date.timesince;
+if(_b){
+return _c(_b,_a);
+}
+return _c(new Date(),_a);
+}});
+})();
+}
Index: trunk/web/dojo/dojox/dtl/filter/integers.js
===================================================================
--- trunk/web/dojo/dojox/dtl/filter/integers.js	(revision 0)
+++ trunk/web/dojo/dojox/dtl/filter/integers.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.dtl.filter.integers"]){
+dojo._hasResource["dojox.dtl.filter.integers"]=true;
+dojo.provide("dojox.dtl.filter.integers");
+dojo.mixin(dojox.dtl.filter.integers,{add:function(_1,_2){
+_1=parseInt(_1,10);
+_2=parseInt(_2,10);
+return isNaN(_2)?_1:_1+_2;
+},get_digit:function(_3,_4){
+_3=parseInt(_3,10);
+_4=parseInt(_4,10)-1;
+if(_4>=0){
+_3+="";
+if(_4<_3.length){
+_3=parseInt(_3.charAt(_4),10);
+}else{
+_3=0;
+}
+}
+return (isNaN(_3)?0:_3);
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/RosterService.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/RosterService.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/RosterService.js	(revision 9)
@@ -0,0 +1,210 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.RosterService"]){
+dojo._hasResource["dojox.xmpp.RosterService"]=true;
+dojo.provide("dojox.xmpp.RosterService");
+dojox.xmpp.roster={ADDED:101,CHANGED:102,REMOVED:103};
+dojo.declare("dojox.xmpp.RosterService",null,{constructor:function(_1){
+this.session=_1;
+},addRosterItem:function(_2,_3,_4){
+if(!_2){
+throw new Error("Roster::addRosterItem() - User ID is null");
+}
+var _5=this.session.getNextIqId();
+var _6={id:_5,from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _7=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_6,false));
+_7.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},false));
+_2=dojox.xmpp.util.encodeJid(_2);
+if(_2.indexOf("@")==-1){
+_2=_2+"@"+this.session.domain;
+}
+_7.append(dojox.xmpp.util.createElement("item",{jid:_2,name:dojox.xmpp.util.xmlEncode(_3)},false));
+if(_4){
+for(var i=0;i<_4.length;i++){
+_7.append("<group>");
+_7.append(_4[i]);
+_7.append("</group>");
+}
+}
+_7.append("</item></query></iq>");
+var _8=this.session.dispatchPacket(_7.toString(),"iq",_6.id);
+_8.addCallback(this,"verifyRoster");
+return _8;
+},updateRosterItem:function(_9,_a,_b){
+if(_9.indexOf("@")==-1){
+_9+=_9+"@"+this.session.domain;
+}
+var _c={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_c,false));
+_d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},false));
+var i=this.session.getRosterIndex(_9);
+if(i==-1){
+return;
+}
+var _e={jid:_9};
+if(_a){
+_e.name=_a;
+}else{
+if(this.session.roster[i].name){
+_e.name=this.session.roster[i].name;
+}
+}
+if(_e.name){
+_e.name=dojox.xmpp.util.xmlEncode(_e.name);
+}
+_d.append(dojox.xmpp.util.createElement("item",_e,false));
+var _f=_b?_b:this.session.roster[i].groups;
+if(_f){
+for(var x=0;x<_f.length;x++){
+_d.append("<group>");
+_d.append(_f[x]);
+_d.append("</group>");
+}
+}
+_d.append("</item></query></iq>");
+var def=this.session.dispatchPacket(_d.toString(),"iq",_c.id);
+def.addCallback(this,"verifyRoster");
+return def;
+},verifyRoster:function(res){
+if(res.getAttribute("type")=="result"){
+}else{
+var err=this.session.processXmppError(res);
+this.onAddRosterItemFailed(err);
+}
+return res;
+},addRosterItemToGroup:function(jid,_10){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+if(!_10){
+throw new Error("Roster::addRosterItemToGroup() group is null or undefined");
+}
+var _11=this.session.getRosterIndex(jid);
+if(_11==-1){
+return;
+}
+var _12=this.session.roster[_11];
+var _13=[];
+var _14=false;
+for(var i=0;((_12<_12.groups.length)&&(!_14));i++){
+if(_12.groups[i]!=_10){
+continue;
+}
+_14=true;
+}
+if(!_14){
+return this.updateRosterItem(jid,_12.name,_12.groups.concat(_10),_11);
+}
+return dojox.xmpp.xmpp.INVALID_ID;
+},removeRosterGroup:function(_15){
+var _16=this.session.roster;
+for(var i=0;i<_16.length;i++){
+var _17=_16[i];
+if(_17.groups.length>0){
+for(var j=0;j<_17.groups.length;j++){
+if(_17.groups[j]==_15){
+_17.groups.splice(j,1);
+this.updateRosterItem(_17.jid,_17.name,_17.groups);
+}
+}
+}
+}
+},renameRosterGroup:function(_18,_19){
+var _1a=this.session.roster;
+for(var i=0;i<_1a.length;i++){
+var _1b=_1a[i];
+if(_1b.groups.length>0){
+for(var j=0;j<_1b.groups.length;j++){
+if(_1b.groups[j]==_18){
+_1b.groups[j]=_19;
+this.updateRosterItem(_1b.jid,_1b.name,_1b.groups);
+}
+}
+}
+}
+},removeRosterItemFromGroup:function(jid,_1c){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+if(!_1c){
+throw new Error("Roster::addRosterItemToGroup() group is null or undefined");
+}
+var _1d=this.session.getRosterIndex(jid);
+if(_1d==-1){
+return;
+}
+var _1e=this.session.roster[_1d];
+var _1f=false;
+for(var i=0;((i<_1e.groups.length)&&(!_1f));i++){
+if(_1e.groups[i]!=_1c){
+continue;
+}
+_1f=true;
+_1d=i;
+}
+if(_1f==true){
+_1e.groups.splice(_1d,1);
+return this.updateRosterItem(jid,_1e.name,_1e.groups);
+}
+return dojox.xmpp.xmpp.INVALID_ID;
+},rosterItemRenameGroup:function(jid,_20,_21){
+if(!jid){
+throw new Error("Roster::rosterItemRenameGroup() JID is null or undefined");
+}
+if(!_21){
+throw new Error("Roster::rosterItemRenameGroup() group is null or undefined");
+}
+var _22=this.session.getRosterIndex(jid);
+if(_22==-1){
+return;
+}
+var _23=this.session.roster[_22];
+var _24=false;
+for(var i=0;((i<_23.groups.length)&&(!_24));i++){
+if(_23.groups[i]==_20){
+_23.groups[i]=_21;
+_24=true;
+}
+}
+if(_24==true){
+return this.updateRosterItem(jid,_23.name,_23.groups);
+}
+return dojox.xmpp.xmpp.INVALID_ID;
+},renameRosterItem:function(jid,_25){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+if(!_25){
+throw new Error("Roster::addRosterItemToGroup() New Name is null or undefined");
+}
+var _26=this.session.getRosterIndex(jid);
+if(_26==-1){
+return;
+}
+return this.updateRosterItem(jid,_25,this.session.roster.groups,_26);
+},removeRosterItem:function(jid){
+if(!jid){
+throw new Error("Roster::addRosterItemToGroup() JID is null or undefined");
+}
+var req={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _27=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",req,false));
+_27.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},false));
+if(jid.indexOf("@")==-1){
+jid+=jid+"@"+this.session.domain;
+}
+_27.append(dojox.xmpp.util.createElement("item",{jid:jid,subscription:"remove"},true));
+_27.append("</query></iq>");
+var def=this.session.dispatchPacket(_27.toString(),"iq",req.id);
+def.addCallback(this,"verifyRoster");
+return def;
+},getAvatar:function(jid){
+},publishAvatar:function(_28,_29){
+},onVerifyRoster:function(id){
+},onVerifyRosterFailed:function(err){
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/UserService.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/UserService.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/UserService.js	(revision 9)
@@ -0,0 +1,76 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.UserService"]){
+dojo._hasResource["dojox.xmpp.UserService"]=true;
+dojo.provide("dojox.xmpp.UserService");
+dojo.declare("dojox.xmpp.UserService",null,{constructor:function(_1){
+this.session=_1;
+},getPersonalProfile:function(){
+var _2={id:this.session.getNextIqId(),type:"get"};
+var _3=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_2,false));
+_3.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:private"},false));
+_3.append(dojox.xmpp.util.createElement("sunmsgr",{xmlsns:"sun:xmpp:properties"},true));
+_3.append("</query></iq>");
+var _4=this.session.dispatchPacket(_3.toString(),"iq",_2.id);
+_4.addCallback(this,"_onGetPersonalProfile");
+},setPersonalProfile:function(_5){
+var _6={id:this.session.getNextIqId(),type:"set"};
+var _7=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_6,false));
+_7.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:private"},false));
+_7.append(dojox.xmpp.util.createElement("sunmsgr",{xmlsns:"sun:xmpp:properties"},false));
+for(var _8 in _5){
+_7.append(dojox.xmpp.util.createElement("property",{name:_8},false));
+_7.append(dojox.xmpp.util.createElement("value",{},false));
+_7.append(_5[_8]);
+_7.append("</value></props>");
+}
+_7.append("</sunmsgr></query></iq>");
+var _9=this.session.dispatchPacket(_7.toString(),"iq",_6.id);
+_9.addCallback(this,"_onSetPersonalProfile");
+},_onSetPersonalProfile:function(_a){
+if(_a.getAttribute("type")=="result"){
+this.onSetPersonalProfile(_a.getAttribute("id"));
+}else{
+if(_a.getAttribute("type")=="error"){
+var _b=this.session.processXmppError(_a);
+this.onSetPersonalProfileFailure(_b);
+}
+}
+},onSetPersonalProfile:function(id){
+},onSetPersonalProfileFailure:function(_c){
+},_onGetPersonalProfile:function(_d){
+if(_d.getAttribute("type")=="result"){
+var _e={};
+if(_d.hasChildNodes()){
+var _f=_d.firstChild;
+if((_f.nodeName=="query")&&(_f.getAttribute("xmlns")=="jabber:iq:private")){
+var _10=_f.firstChild;
+if((_10.nodeName=="query")&&(_10.getAttributes("xmlns")=="sun:xmpp:properties")){
+for(var i=0;i<_10.childNodes.length;i++){
+var n=_10.childNodes[i];
+if(n.nodeName=="property"){
+var _11=n.getAttribute("name");
+var val=n.firstChild||"";
+_e[_11]=val;
+}
+}
+}
+}
+this.onGetPersonalProfile(_e);
+}
+}else{
+if(_d.getAttribute("type")=="error"){
+var err=this.session.processXmppError(_d);
+this.onGetPersonalProfileFailure(err);
+}
+}
+return _d;
+},onGetPersonalProfile:function(_12){
+},onGetPersonalProfileFailure:function(err){
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/ChatService.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/ChatService.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/ChatService.js	(revision 9)
@@ -0,0 +1,90 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.ChatService"]){
+dojo._hasResource["dojox.xmpp.ChatService"]=true;
+dojo.provide("dojox.xmpp.ChatService");
+dojox.xmpp.chat={CHAT_STATE_NS:"http://jabber.org/protocol/chatstates",ACTIVE_STATE:"active",COMPOSING_STATE:"composing",INACTIVE_STATE:"inactive",PAUSED_STATE:"paused",GONE_STATE:"gone"};
+dojo.declare("dojox.xmpp.ChatService",null,{state:"",constructor:function(){
+this.state="";
+this.chatid=Math.round(Math.random()*1000000000000000);
+},recieveMessage:function(_1,_2){
+if(_1&&!_2){
+this.onNewMessage(_1);
+}
+},setSession:function(_3){
+this.session=_3;
+},setState:function(_4){
+if(this.state!=_4){
+this.state=_4;
+}
+},invite:function(_5){
+if(this.uid){
+return;
+}
+if(!_5||_5==""){
+throw new Error("ChatService::invite() contact is NULL");
+}
+this.uid=_5;
+var _6={xmlns:"jabber:client",to:this.uid,from:this.session.jid+"/"+this.session.resource,type:"chat"};
+var _7=new dojox.string.Builder(dojox.xmpp.util.createElement("message",_6,false));
+_7.append(dojox.xmpp.util.createElement("thread",{},false));
+_7.append(this.chatid);
+_7.append("</thread>");
+_7.append(dojox.xmpp.util.createElement("active",{xmlns:dojox.xmpp.chat.CHAT_STATE_NS},true));
+_7.append("</message>");
+this.session.dispatchPacket(_7.toString());
+this.onInvite(_5);
+this.setState(dojox.xmpp.chat.CHAT_STATE_NS);
+},sendMessage:function(_8){
+if(!this.uid){
+return;
+}
+if((!_8.body||_8.body=="")&&!_8.xhtml){
+return;
+}
+var _9={xmlns:"jabber:client",to:this.uid,from:this.session.jid+"/"+this.session.resource,type:"chat"};
+var _a=new dojox.string.Builder(dojox.xmpp.util.createElement("message",_9,false));
+var _b=dojox.xmpp.util.createElement("html",{"xmlns":dojox.xmpp.xmpp.XHTML_IM_NS},false);
+var _c=dojox.xmpp.util.createElement("body",{"xml:lang":this.session.lang,"xmlns":dojox.xmpp.xmpp.XHTML_BODY_NS},false)+_8.body+"</body>";
+var _d=dojox.xmpp.util.createElement("body",{},false)+dojox.xmpp.util.stripHtml(_8.body)+"</body>";
+if(_a.subject&&_a.subject!=""){
+_a.append(dojox.xmpp.util.createElement("subject",{},false));
+_a.append(_a.subject);
+_a.append("</subject>");
+}
+_a.append(_d);
+_a.append(_b);
+_a.append(_c);
+_a.append("</html>");
+_a.append(dojox.xmpp.util.createElement("thread",{},false));
+_a.append(this.chatid);
+_a.append("</thread>");
+if(this.useChatStates){
+_a.append(dojox.xmpp.util.createElement("active",{xmlns:dojox.xmpp.chat.CHAT_STATE_NS},true));
+}
+_a.append("</message>");
+this.session.dispatchPacket(_a.toString());
+},sendChatState:function(_e){
+if(!this.useChatState||this.firstMessage){
+return;
+}
+if(_e==this._currentState){
+return;
+}
+var _f={xmlns:"jabber:client",to:this.uid,from:this.session.jid+"/"+this.session.resource,type:"chat"};
+var _10=new dojox.string.Builder(dojox.xmpp.util.createElement("message",_f,false));
+_10.append(dojox.xmpp.util.createElement(_e,{xmlns:dojox.xmpp.chat.CHAT_STATE_NS},true));
+this._currentState=_e;
+_10.append("<thread>");
+_10.append(this.chatid);
+_10.append("</thread></message>");
+this.session.dispatchPacket(_10.toString());
+},onNewMessage:function(msg){
+},onInvite:function(_11){
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/TransportSession.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/TransportSession.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/TransportSession.js	(revision 9)
@@ -0,0 +1,301 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.TransportSession"]){
+dojo._hasResource["dojox.xmpp.TransportSession"]=true;
+dojo.provide("dojox.xmpp.TransportSession");
+dojo.require("dojox.xmpp.bosh");
+dojo.require("dojox.xmpp.util");
+dojo.require("dojox.data.dom");
+dojox.xmpp.TransportSession=function(_1){
+this.sendTimeout=(this.wait+20)*1000;
+if(_1&&dojo.isObject(_1)){
+dojo.mixin(this,_1);
+if(this.useScriptSrcTransport){
+this.transportIframes=[];
+}
+}
+};
+dojo.extend(dojox.xmpp.TransportSession,{rid:0,hold:1,polling:1000,secure:false,wait:60,lang:"en",submitContentType:"text/xml; charset=utf=8",serviceUrl:"/httpbind",defaultResource:"dojoIm",domain:"imserver.com",sendTimeout:0,useScriptSrcTransport:false,keepAliveTimer:null,state:"NotReady",transmitState:"Idle",protocolPacketQueue:[],outboundQueue:[],outboundRequests:{},inboundQueue:[],deferredRequests:{},matchTypeIdAttribute:{},open:function(){
+this.status="notReady";
+this.rid=Math.round(Math.random()*1000000000);
+this.protocolPacketQueue=[];
+this.outboundQueue=[];
+this.outboundRequests={};
+this.inboundQueue=[];
+this.deferredRequests={};
+this.matchTypeIdAttribute={};
+this.keepAliveTimer=setTimeout(dojo.hitch(this,"_keepAlive"),10000);
+if(this.useScriptSrcTransport){
+dojox.xmpp.bosh.initialize({iframes:this.hold+1,load:dojo.hitch(this,function(){
+this._sendLogin();
+})});
+}else{
+this._sendLogin();
+}
+},_sendLogin:function(){
+var _2=this.rid++;
+var _3={content:this.submitContentType,hold:this.hold,rid:_2,to:this.domain,secure:this.secure,wait:this.wait,"xml:lang":this.lang,"xmpp:version":"1.0",xmlns:dojox.xmpp.xmpp.BODY_NS,"xmlns:xmpp":"urn:xmpp:xbosh"};
+var _4=dojox.xmpp.util.createElement("body",_3,true);
+this.addToOutboundQueue(_4,_2);
+},_sendRestart:function(){
+var _5=this.rid++;
+var _6={rid:_5,sid:this.sid,to:this.domain,"xmpp:restart":"true","xml:lang":this.lang,xmlns:dojox.xmpp.xmpp.BODY_NS,"xmlns:xmpp":"urn:xmpp:xbosh"};
+var _7=dojox.xmpp.util.createElement("body",_6,true);
+this.addToOutboundQueue(_7,_5);
+},processScriptSrc:function(_8,_9){
+var _a=dojox.xml.parser.parse(_8,"text/xml");
+if(_a){
+this.processDocument(_a,_9);
+}else{
+}
+},_keepAlive:function(){
+if(this.state=="wait"||this.isTerminated()){
+return;
+}
+this._dispatchPacket();
+this.keepAliveTimer=setTimeout(dojo.hitch(this,"_keepAlive"),10000);
+},close:function(_b){
+var _c=this.rid++;
+var _d={sid:this.sid,rid:_c,type:"terminate"};
+var _e=null;
+if(_b){
+_e=new dojox.string.Builder(dojox.xmpp.util.createElement("body",_d,false));
+_e.append(_b);
+_e.append("</body>");
+}else{
+_e=new dojox.string.Builder(dojox.xmpp.util.createElement("body",_d,false));
+}
+this.addToOutboundQueue(_e.toString(),_c);
+this.state=="Terminate";
+},dispatchPacket:function(_f,_10,_11,_12){
+if(_f){
+this.protocolPacketQueue.push(_f);
+}
+var def=new dojo.Deferred();
+if(_10&&_11){
+def.protocolMatchType=_10;
+def.matchId=_11;
+def.matchProperty=_12||"id";
+if(def.matchProperty!="id"){
+this.matchTypeIdAttribute[_10]=def.matchProperty;
+}
+}
+this.deferredRequests[def.protocolMatchType+"-"+def.matchId]=def;
+if(!this.dispatchTimer){
+this.dispatchTimer=setTimeout(dojo.hitch(this,"_dispatchPacket"),600);
+}
+return def;
+},_dispatchPacket:function(){
+clearTimeout(this.dispatchTimer);
+delete this.dispatchTimer;
+if(!this.sid){
+return;
+}
+if(!this.authId){
+return;
+}
+if(this.transmitState!="error"&&(this.protocolPacketQueue.length==0)&&(this.outboundQueue.length>0)){
+return;
+}
+if(this.state=="wait"||this.isTerminated()){
+return;
+}
+var req={sid:this.sid,xmlns:dojox.xmpp.xmpp.BODY_NS};
+var _13;
+if(this.protocolPacketQueue.length>0){
+req.rid=this.rid++;
+_13=new dojox.string.Builder(dojox.xmpp.util.createElement("body",req,false));
+_13.append(this.processProtocolPacketQueue());
+_13.append("</body>");
+delete this.lastPollTime;
+}else{
+if(this.lastPollTime){
+var now=new Date().getTime();
+if(now-this.lastPollTime<this.polling){
+this.dispatchTimer=setTimeout(dojo.hitch(this,"_dispatchPacket"),this.polling-(now-this.lastPollTime)+10);
+return;
+}
+}
+req.rid=this.rid++;
+this.lastPollTime=new Date().getTime();
+_13=new dojox.string.Builder(dojox.xmpp.util.createElement("body",req,true));
+}
+this.addToOutboundQueue(_13.toString(),req.rid);
+},redispatchPacket:function(rid){
+var env=this.outboundRequests[rid];
+this.sendXml(env,rid);
+},addToOutboundQueue:function(msg,rid){
+this.outboundQueue.push({msg:msg,rid:rid});
+this.outboundRequests[rid]=msg;
+this.sendXml(msg,rid);
+},removeFromOutboundQueue:function(rid){
+for(var i=0;i<this.outboundQueue.length;i++){
+if(rid==this.outboundQueue[i]["rid"]){
+this.outboundQueue.splice(i,1);
+break;
+}
+}
+delete this.outboundRequests[rid];
+},processProtocolPacketQueue:function(){
+var _14=new dojox.string.Builder();
+for(var i=0;i<this.protocolPacketQueue.length;i++){
+_14.append(this.protocolPacketQueue[i]);
+}
+this.protocolPacketQueue=[];
+return _14.toString();
+},sendXml:function(_15,rid){
+if(this.isTerminated()){
+return false;
+}
+this.transmitState="transmitting";
+var def=null;
+if(this.useScriptSrcTransport){
+def=dojox.xmpp.bosh.get({rid:rid,url:this.serviceUrl+"?"+encodeURIComponent(_15),error:dojo.hitch(this,function(res,io){
+this.setState("Terminate","error");
+return false;
+}),timeout:this.sendTimeout});
+}else{
+def=dojo.rawXhrPost({contentType:"text/xml",url:this.serviceUrl,postData:_15,handleAs:"xml",error:dojo.hitch(this,function(res,io){
+return this.processError(io.xhr.responseXML,io.xhr.status,rid);
+}),timeout:this.sendTimeout});
+}
+def.addCallback(this,function(res){
+return this.processDocument(res,rid);
+});
+return def;
+},processDocument:function(doc,rid){
+if(this.isTerminated()||!doc.firstChild){
+return false;
+}
+this.transmitState="idle";
+var _16=doc.firstChild;
+if(_16.nodeName!="body"){
+}
+if(this.outboundQueue.length<1){
+return false;
+}
+var _17=this.outboundQueue[0]["rid"];
+if(rid==_17){
+this.removeFromOutboundQueue(rid);
+this.processResponse(_16,rid);
+this.processInboundQueue();
+}else{
+var gap=rid-_17;
+if(gap<this.hold+2){
+this.addToInboundQueue(doc,rid);
+}else{
+}
+}
+return doc;
+},processInboundQueue:function(){
+while(this.inboundQueue.length>0){
+var _18=this.inboundQueue.shift();
+this.processDocument(_18["doc"],_18["rid"]);
+}
+},addToInboundQueue:function(doc,rid){
+for(var i=0;i<this.inboundQueue.length;i++){
+if(rid<this.inboundQueue[i]["rid"]){
+continue;
+}
+this.inboundQueue.splice(i,0,{doc:doc,rid:rid});
+}
+},processResponse:function(_19,rid){
+if(_19.getAttribute("type")=="terminate"){
+var _1a=_19.firstChild.firstChild;
+var _1b="";
+if(_1a.nodeName=="conflict"){
+_1b="conflict";
+}
+this.setState("Terminate",_1b);
+return;
+}
+if((this.state!="Ready")&&(this.state!="Terminate")){
+var sid=_19.getAttribute("sid");
+if(sid){
+this.sid=sid;
+}else{
+throw new Error("No sid returned during xmpp session startup");
+}
+this.authId=_19.getAttribute("authid");
+if(this.authId==""){
+if(this.authRetries--<1){
+console.error("Unable to obtain Authorization ID");
+this.terminateSession();
+}
+}
+this.wait=_19.getAttribute("wait");
+if(_19.getAttribute("polling")){
+this.polling=parseInt(_19.getAttribute("polling"))*1000;
+}
+this.inactivity=_19.getAttribute("inactivity");
+this.setState("Ready");
+}
+dojo.forEach(_19.childNodes,function(_1c){
+this.processProtocolResponse(_1c,rid);
+},this);
+if(this.transmitState=="idle"){
+this.dispatchPacket();
+}
+},processProtocolResponse:function(msg,rid){
+this.onProcessProtocolResponse(msg);
+var key=msg.nodeName+"-"+msg.getAttribute("id");
+var def=this.deferredRequests[key];
+if(def){
+def.callback(msg);
+delete this.deferredRequests[key];
+}
+},setState:function(_1d,_1e){
+if(this.state!=_1d){
+if(this["on"+_1d]){
+this["on"+_1d](_1d,this.state,_1e);
+}
+this.state=_1d;
+}
+},isTerminated:function(){
+return this.state=="Terminate";
+},processError:function(err,_1f,rid){
+if(this.isTerminated()){
+return false;
+}
+if(_1f!=200){
+if(_1f>=400&&_1f<500){
+this.setState("Terminate",_20);
+return false;
+}else{
+this.removeFromOutboundQueue(rid);
+setTimeout(dojo.hitch(this,function(){
+this.dispatchPacket();
+}),200);
+return true;
+}
+return false;
+}
+if(err&&err.dojoType&&err.dojoType=="timeout"){
+}
+this.removeFromOutboundQueue(rid);
+if(err&&err.firstChild){
+if(err.firstChild.getAttribute("type")=="terminate"){
+var _21=err.firstChild.firstChild;
+var _20="";
+if(_21&&_21.nodeName=="conflict"){
+_20="conflict";
+}
+this.setState("Terminate",_20);
+return false;
+}
+}
+this.transmitState="error";
+setTimeout(dojo.hitch(this,function(){
+this.dispatchPacket();
+}),200);
+return true;
+},onTerminate:function(_22,_23,_24){
+},onProcessProtocolResponse:function(msg){
+},onReady:function(_25,_26){
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/README
===================================================================
--- trunk/web/dojo/dojox/xmpp/README	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/README	(revision 9)
@@ -0,0 +1,55 @@
+-------------------------------------------------------------------------------
+DojoX XMPP (Jabber Client)
+-------------------------------------------------------------------------------
+Version .9
+Release date: 07/05/2008
+-------------------------------------------------------------------------------
+Project state:	experimental
+-------------------------------------------------------------------------------
+[   ]	l18n support?
+[   ]	a11y support?
+-------------------------------------------------------------------------------
+Credits
+	Dustin Machi
+	Jason Cline
+	Revin Guillen
+	Mike Wilcox - updates
+-------------------------------------------------------------------------------
+Project description
+
+XMPP Service implementation in pure javascript. Uses BOSH and works cross
+domain.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core 
+-------------------------------------------------------------------------------
+Documentation
+
+FIXME
+-------------------------------------------------------------------------------
+Installation instructions
+
+To use the XMPP test, you should have the appropriate server installed on your
+machine. We reccomend Openfire, a real time collaboration server licensed under
+the Open Source GPL.:
+http://www.igniterealtime.org/projects/openfire/index.jsp
+
+It's very easy to install. Download the version for your machine and launch the installer.
+After installation is complete, server settings are made at:
+http://127.0.0.1:9090/index.jsp
+
+The settings for the most part are those that suggest the easiest for setup. The main setting
+you need to notice is HTTP Binding. This needs to be enabled at port 7070. Also enable
+Script Syntax for BOSH clients.
+
+Next go to the top tabs to Users/Groups and create a user or two. It gives you the option to make
+a user the Admin - this will overwrite the current Admin.
+
+Now you can launch test_xmppService.html. In the login, use the user ID and password from one of
+the users you just created. I used my computer name for Domain, but I'm not sure what this does.
+Finally, in HTTP-Bind URL, use the address for Openfire, with the HTTP Bind port of 7070:
+http://127.0.0.1:7070/http-bind/
+
+You can open another tab in Firefox and log in as a second user.
+
Index: trunk/web/dojo/dojox/xmpp/sasl.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/sasl.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/sasl.js	(revision 9)
@@ -0,0 +1,119 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.sasl"]){
+dojo._hasResource["dojox.xmpp.sasl"]=true;
+dojo.provide("dojox.xmpp.sasl");
+dojo.require("dojox.xmpp.util");
+dojo.require("dojo.AdapterRegistry");
+dojo.require("dojox.encoding.digests.MD5");
+dojox.xmpp.sasl.saslNS="urn:ietf:params:xml:ns:xmpp-sasl";
+dojo.declare("dojox.xmpp.sasl._Base",null,{mechanism:null,closeAuthTag:true,constructor:function(_1){
+this.session=_1;
+this.startAuth();
+},startAuth:function(){
+var _2=new dojox.string.Builder(dojox.xmpp.util.createElement("auth",{xmlns:dojox.xmpp.sasl.saslNS,mechanism:this.mechanism},this.closeAuthTag));
+this.appendToAuth(_2);
+this.session.dispatchPacket(_2.toString());
+},appendToAuth:function(_3){
+},onChallenge:function(_4){
+if(!this.first_challenge){
+this.first_challenge=true;
+this.onFirstChallenge(_4);
+}else{
+this.onSecondChallenge(_4);
+}
+},onFirstChallenge:function(){
+},onSecondChallenge:function(){
+},onSuccess:function(){
+this.session.sendRestart();
+}});
+dojo.declare("dojox.xmpp.sasl.SunWebClientAuth",dojox.xmpp.sasl._Base,{mechanism:"SUN-COMMS-CLIENT-PROXY-AUTH"});
+dojo.declare("dojox.xmpp.sasl.Plain",dojox.xmpp.sasl._Base,{mechanism:"PLAIN",closeAuthTag:false,appendToAuth:function(_5){
+var id=this.session.jid;
+var _6=this.session.jid.indexOf("@");
+if(_6!=-1){
+id=this.session.jid.substring(0,_6);
+}
+var _7=this.session.jid+"\x00"+id+"\x00"+this.session.password;
+_7=dojox.xmpp.util.Base64.encode(_7);
+_5.append(_7);
+_5.append("</auth>");
+delete this.session.password;
+}});
+dojo.declare("dojox.xmpp.sasl.DigestMD5",dojox.xmpp.sasl._Base,{mechanism:"DIGEST-MD5",onFirstChallenge:function(_8){
+var _9=dojox.encoding.digests;
+var _a=dojox.encoding.digests.outputTypes;
+var _b=function(n){
+return _9.MD5(n,_a.Hex);
+};
+var H=function(s){
+return _9.MD5(s,_a.String);
+};
+var _c=dojox.xmpp.util.Base64.decode(_8.firstChild.nodeValue);
+var ch={realm:"",nonce:"",qop:"auth",maxbuf:65536};
+_c.replace(/([a-z]+)=([^,]+)/g,function(t,k,v){
+v=v.replace(/^"(.+)"$/,"$1");
+ch[k]=v;
+});
+var _d="";
+switch(ch.qop){
+case "auth-int":
+case "auth-conf":
+_d=":00000000000000000000000000000000";
+case "auth":
+break;
+default:
+return false;
+}
+var _e=_9.MD5(Math.random()*1234567890,_a.Hex);
+var _f="xmpp/"+this.session.domain;
+var _10=this.session.jid;
+var _11=this.session.jid.indexOf("@");
+if(_11!=-1){
+_10=this.session.jid.substring(0,_11);
+}
+_10=dojox.xmpp.util.encodeJid(_10);
+var A1=new dojox.string.Builder();
+A1.append(H(_10+":"+ch.realm+":"+this.session.password),":",ch.nonce+":"+_e);
+delete this.session.password;
+var _12=":"+_f+_d;
+var A2="AUTHENTICATE"+_12;
+var _13=new dojox.string.Builder();
+_13.append(_b(A1.toString()),":",ch.nonce,":00000001:",_e,":",ch.qop,":");
+var ret=new dojox.string.Builder();
+ret.append("username=\"",_10,"\",","realm=\"",ch.realm,"\",","nonce=",ch.nonce,",","cnonce=\"",_e,"\",","nc=\"00000001\",qop=\"",ch.qop,"\",digest-uri=\"",_f,"\",","response=\"",_b(_13.toString()+_b(A2)),"\",charset=\"utf-8\"");
+var _14=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},false));
+_14.append(dojox.xmpp.util.Base64.encode(ret.toString()));
+_14.append("</response>");
+this.rspauth=_b(_13.toString()+_b(_12));
+this.session.dispatchPacket(_14.toString());
+},onSecondChallenge:function(msg){
+var _15=dojox.xmpp.util.Base64.decode(msg.firstChild.nodeValue);
+if(this.rspauth==_15.substring(8)){
+var _16=new dojox.string.Builder(dojox.xmpp.util.createElement("response",{xmlns:dojox.xmpp.xmpp.SASL_NS},true));
+this.session.dispatchPacket(_16.toString());
+}else{
+}
+}});
+dojox.xmpp.sasl.registry=new dojo.AdapterRegistry();
+dojox.xmpp.sasl.registry.register("SUN-COMMS-CLIENT-PROXY-AUTH",function(_17){
+return _17=="SUN-COMMS-CLIENT-PROXY-AUTH";
+},function(_18,_19){
+return new dojox.xmpp.sasl.SunWebClientAuth(_19);
+});
+dojox.xmpp.sasl.registry.register("DIGEST-MD5",function(_1a){
+return _1a=="DIGEST-MD5";
+},function(_1b,_1c){
+return new dojox.xmpp.sasl.DigestMD5(_1c);
+});
+dojox.xmpp.sasl.registry.register("PLAIN",function(_1d){
+return _1d=="PLAIN";
+},function(_1e,_1f){
+return new dojox.xmpp.sasl.Plain(_1f);
+});
+}
Index: trunk/web/dojo/dojox/xmpp/PresenceService.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/PresenceService.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/PresenceService.js	(revision 9)
@@ -0,0 +1,163 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.PresenceService"]){
+dojo._hasResource["dojox.xmpp.PresenceService"]=true;
+dojo.provide("dojox.xmpp.PresenceService");
+dojox.xmpp.presence={UPDATE:201,SUBSCRIPTION_REQUEST:202,SUBSCRIPTION_SUBSTATUS_NONE:204,SUBSCRIPTION_NONE:"none",SUBSCRIPTION_FROM:"from",SUBSCRIPTION_TO:"to",SUBSCRIPTION_BOTH:"both",SUBSCRIPTION_REQUEST_PENDING:"pending",STATUS_ONLINE:"online",STATUS_AWAY:"away",STATUS_CHAT:"chat",STATUS_DND:"dnd",STATUS_EXTENDED_AWAY:"xa",STATUS_OFFLINE:"offline",STATUS_INVISIBLE:"invisible"};
+dojo.declare("dojox.xmpp.PresenceService",null,{constructor:function(_1){
+this.session=_1;
+this.isInvisible=false;
+this.avatarHash=null;
+this.presence=null;
+this.restrictedContactjids={};
+},publish:function(_2){
+this.presence=_2;
+this._setPresence();
+},sendAvatarHash:function(_3){
+this.avatarHash=_3;
+this._setPresence();
+},_setPresence:function(){
+var _4=this.presence;
+var p={xmlns:"jabber:client"};
+if(_4&&_4.to){
+p.to=_4.to;
+}
+if(_4.show&&_4.show==dojox.xmpp.presence.STATUS_OFFLINE){
+p.type="unavailable";
+}
+if(_4.show&&_4.show==dojox.xmpp.presence.STATUS_INVISIBLE){
+this._setInvisible();
+this.isInvisible=true;
+return;
+}
+if(this.isInvisible){
+this._setVisible();
+}
+var _5=new dojox.string.Builder(dojox.xmpp.util.createElement("presence",p,false));
+if(_4.show&&_4.show!=dojox.xmpp.presence.STATUS_OFFLINE){
+_5.append(dojox.xmpp.util.createElement("show",{},false));
+_5.append(_4.show);
+_5.append("</show>");
+}
+if(_4.status){
+_5.append(dojox.xmpp.util.createElement("status",{},false));
+_5.append(_4.status);
+_5.append("</status>");
+}
+if(this.avatarHash){
+_5.append(dojox.xmpp.util.createElement("x",{xmlns:"vcard-temp:x:update"},false));
+_5.append(dojox.xmpp.util.createElement("photo",{},false));
+_5.append(this.avatarHash);
+_5.append("</photo>");
+_5.append("</x>");
+}
+if(_4.priority&&_4.show!=dojox.xmpp.presence.STATUS_OFFLINE){
+if(_4.priority>127||_4.priority<-128){
+_4.priority=5;
+}
+_5.append(dojox.xmpp.util.createElement("priority",{},false));
+_5.append(_4.priority);
+_5.append("</priority>");
+}
+_5.append("</presence>");
+this.session.dispatchPacket(_5.toString());
+},toggleBlockContact:function(_6){
+if(!this.restrictedContactjids[_6]){
+this.restrictedContactjids[_6]=this._createRestrictedJid();
+}
+this.restrictedContactjids[_6].blocked=!this.restrictedContactjids[_6].blocked;
+this._updateRestricted();
+return this.restrictedContactjids;
+},toggleContactInvisiblity:function(_7){
+if(!this.restrictedContactjids[_7]){
+this.restrictedContactjids[_7]=this._createRestrictedJid();
+}
+this.restrictedContactjids[_7].invisible=!this.restrictedContactjids[_7].invisible;
+this._updateRestricted();
+return this.restrictedContactjids;
+},_createRestrictedJid:function(){
+return {invisible:false,blocked:false};
+},_updateRestricted:function(){
+var _8={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _9=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_8,false));
+_9.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_9.append(dojox.xmpp.util.createElement("list",{name:"iwcRestrictedContacts"},false));
+var _a=1;
+for(var _b in this.restrictedContactjids){
+var _c=this.restrictedContactjids[_b];
+if(_c.blocked||_c.invisible){
+_9.append(dojox.xmpp.util.createElement("item",{value:dojox.xmpp.util.encodeJid(_b),action:"deny",order:_a++},false));
+if(_c.blocked){
+_9.append(dojox.xmpp.util.createElement("message",{},true));
+}
+if(_c.invisible){
+_9.append(dojox.xmpp.util.createElement("presence-out",{},true));
+}
+_9.append("</item>");
+}else{
+delete this.restrictedContactjids[_b];
+}
+}
+_9.append("</list>");
+_9.append("</query>");
+_9.append("</iq>");
+var _d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_8,false));
+_d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_d.append(dojox.xmpp.util.createElement("active",{name:"iwcRestrictedContacts"},true));
+_d.append("</query>");
+_d.append("</iq>");
+this.session.dispatchPacket(_9.toString());
+this.session.dispatchPacket(_d.toString());
+},_setVisible:function(){
+var _e={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _f=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_e,false));
+_f.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_f.append(dojox.xmpp.util.createElement("active",{},true));
+_f.append("</query>");
+_f.append("</iq>");
+this.session.dispatchPacket(_f.toString());
+},_setInvisible:function(){
+var _10={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var req=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_10,false));
+req.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+req.append(dojox.xmpp.util.createElement("list",{name:"invisible"},false));
+req.append(dojox.xmpp.util.createElement("item",{action:"deny",order:"1"},false));
+req.append(dojox.xmpp.util.createElement("presence-out",{},true));
+req.append("</item>");
+req.append("</list>");
+req.append("</query>");
+req.append("</iq>");
+_10={id:this.session.getNextIqId(),from:this.session.jid+"/"+this.session.resource,type:"set"};
+var _11=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_10,false));
+_11.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:privacy"},false));
+_11.append(dojox.xmpp.util.createElement("active",{name:"invisible"},true));
+_11.append("</query>");
+_11.append("</iq>");
+this.session.dispatchPacket(req.toString());
+this.session.dispatchPacket(_11.toString());
+},_manageSubscriptions:function(_12,_13){
+if(!_12){
+return;
+}
+if(_12.indexOf("@")==-1){
+_12+="@"+this.session.domain;
+}
+var req=dojox.xmpp.util.createElement("presence",{to:_12,type:_13},true);
+this.session.dispatchPacket(req);
+},subscribe:function(_14){
+this._manageSubscriptions(_14,"subscribe");
+},approveSubscription:function(_15){
+this._manageSubscriptions(_15,"subscribed");
+},unsubscribe:function(_16){
+this._manageSubscriptions(_16,"unsubscribe");
+},declineSubscription:function(_17){
+this._manageSubscriptions(_17,"unsubscribed");
+},cancelSubscription:function(_18){
+this._manageSubscriptions(_18,"unsubscribed");
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/widget/ChatSession.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/widget/ChatSession.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/widget/ChatSession.js	(revision 9)
@@ -0,0 +1,28 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.widget.ChatSession"]){
+dojo._hasResource["dojox.xmpp.widget.ChatSession"]=true;
+dojo.provide("dojox.xmpp.widget.ChatSession");
+dojo.declare("dojox.xmpp.widget.ChatSession",[dijit.layout.LayoutContainer,dijit._Templated],{templateString:dojo.cache("dojox.xmpp.widget","templates/ChatSession.html","<div>\n<div dojoAttachPoint=\"messages\" dojoType=\"dijit.layout.ContentPane\" layoutAlign=\"client\" style=\"overflow:auto\">\n</div>\n<div dojoType=\"dijit.layout.ContentPane\" layoutAlign=\"bottom\" style=\"border-top: 2px solid #333333; height: 35px;\"><input dojoAttachPoint=\"chatInput\" dojoAttachEvent=\"onkeypress: onKeyPress\" style=\"width: 100%;height: 35px;\" /></div>\n</div>\n"),enableSubWidgets:true,widgetsInTemplate:true,widgetType:"ChatSession",chatWith:null,instance:null,postCreate:function(){
+},displayMessage:function(_1,_2){
+if(_1){
+var _3=_1.from?this.chatWith:"me";
+this.messages.domNode.innerHTML+="<b>"+_3+":</b> "+_1.body+"<br/>";
+this.goToLastMessage();
+}
+},goToLastMessage:function(){
+this.messages.domNode.scrollTop=this.messages.domNode.scrollHeight;
+},onKeyPress:function(e){
+var _4=e.keyCode||e.charCode;
+if((_4==dojo.keys.ENTER)&&(this.chatInput.value!="")){
+this.instance.sendMessage({body:this.chatInput.value});
+this.displayMessage({body:this.chatInput.value},"out");
+this.chatInput.value="";
+}
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/widget/templates/ChatSession.html
===================================================================
--- trunk/web/dojo/dojox/xmpp/widget/templates/ChatSession.html	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/widget/templates/ChatSession.html	(revision 9)
@@ -0,0 +1,5 @@
+<div>
+<div dojoAttachPoint="messages" dojoType="dijit.layout.ContentPane" layoutAlign="client" style="overflow:auto">
+</div>
+<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" style="border-top: 2px solid #333333; height: 35px;"><input dojoAttachPoint="chatInput" dojoAttachEvent="onkeypress: onKeyPress" style="width: 100%;height: 35px;" /></div>
+</div>
\ No newline at end of file
Index: trunk/web/dojo/dojox/xmpp/xmppSession.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/xmppSession.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/xmppSession.js	(revision 9)
@@ -0,0 +1,554 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.xmppSession"]){
+dojo._hasResource["dojox.xmpp.xmppSession"]=true;
+dojo.provide("dojox.xmpp.xmppSession");
+dojo.require("dojox.xmpp.TransportSession");
+dojo.require("dojox.xmpp.RosterService");
+dojo.require("dojox.xmpp.PresenceService");
+dojo.require("dojox.xmpp.UserService");
+dojo.require("dojox.xmpp.ChatService");
+dojo.require("dojox.xmpp.sasl");
+dojox.xmpp.xmpp={STREAM_NS:"http://etherx.jabber.org/streams",CLIENT_NS:"jabber:client",STANZA_NS:"urn:ietf:params:xml:ns:xmpp-stanzas",SASL_NS:"urn:ietf:params:xml:ns:xmpp-sasl",BIND_NS:"urn:ietf:params:xml:ns:xmpp-bind",SESSION_NS:"urn:ietf:params:xml:ns:xmpp-session",BODY_NS:"http://jabber.org/protocol/httpbind",XHTML_BODY_NS:"http://www.w3.org/1999/xhtml",XHTML_IM_NS:"http://jabber.org/protocol/xhtml-im",INACTIVE:"Inactive",CONNECTED:"Connected",ACTIVE:"Active",TERMINATE:"Terminate",LOGIN_FAILURE:"LoginFailure",INVALID_ID:-1,NO_ID:0,error:{BAD_REQUEST:"bad-request",CONFLICT:"conflict",FEATURE_NOT_IMPLEMENTED:"feature-not-implemented",FORBIDDEN:"forbidden",GONE:"gone",INTERNAL_SERVER_ERROR:"internal-server-error",ITEM_NOT_FOUND:"item-not-found",ID_MALFORMED:"jid-malformed",NOT_ACCEPTABLE:"not-acceptable",NOT_ALLOWED:"not-allowed",NOT_AUTHORIZED:"not-authorized",SERVICE_UNAVAILABLE:"service-unavailable",SUBSCRIPTION_REQUIRED:"subscription-required",UNEXPECTED_REQUEST:"unexpected-request"}};
+dojox.xmpp.xmppSession=function(_1){
+this.roster=[];
+this.chatRegister=[];
+this._iqId=Math.round(Math.random()*1000000000);
+if(_1&&dojo.isObject(_1)){
+dojo.mixin(this,_1);
+}
+this.session=new dojox.xmpp.TransportSession(_1);
+dojo.connect(this.session,"onReady",this,"onTransportReady");
+dojo.connect(this.session,"onTerminate",this,"onTransportTerminate");
+dojo.connect(this.session,"onProcessProtocolResponse",this,"processProtocolResponse");
+};
+dojo.extend(dojox.xmpp.xmppSession,{roster:[],chatRegister:[],_iqId:0,open:function(_2,_3,_4){
+if(!_2){
+throw new Error("User id cannot be null");
+}else{
+this.jid=_2;
+if(_2.indexOf("@")==-1){
+this.jid=this.jid+"@"+this.domain;
+}
+}
+if(_3){
+this.password=_3;
+}
+if(_4){
+this.resource=_4;
+}
+this.session.open();
+},close:function(){
+this.state=dojox.xmpp.xmpp.TERMINATE;
+this.session.close(dojox.xmpp.util.createElement("presence",{type:"unavailable",xmlns:dojox.xmpp.xmpp.CLIENT_NS},true));
+},processProtocolResponse:function(_5){
+var _6=_5.nodeName;
+var _7=_6.indexOf(":");
+if(_7>0){
+_6=_6.substring(_7+1);
+}
+switch(_6){
+case "iq":
+case "presence":
+case "message":
+case "features":
+this[_6+"Handler"](_5);
+break;
+default:
+if(_5.getAttribute("xmlns")==dojox.xmpp.xmpp.SASL_NS){
+this.saslHandler(_5);
+}
+}
+},messageHandler:function(_8){
+switch(_8.getAttribute("type")){
+case "chat":
+this.chatHandler(_8);
+break;
+case "normal":
+default:
+this.simpleMessageHandler(_8);
+}
+},iqHandler:function(_9){
+if(_9.getAttribute("type")=="set"){
+this.iqSetHandler(_9);
+return;
+}else{
+if(_9.getAttribute("type")=="get"){
+return;
+}
+}
+},presenceHandler:function(_a){
+switch(_a.getAttribute("type")){
+case "subscribe":
+this.presenceSubscriptionRequest(_a.getAttribute("from"));
+break;
+case "subscribed":
+case "unsubscribed":
+break;
+case "error":
+this.processXmppError(_a);
+break;
+default:
+this.presenceUpdate(_a);
+break;
+}
+},featuresHandler:function(_b){
+var _c=[];
+var _d=false;
+var _e=false;
+if(_b.hasChildNodes()){
+for(var i=0;i<_b.childNodes.length;i++){
+var n=_b.childNodes[i];
+switch(n.nodeName){
+case "mechanisms":
+for(var x=0;x<n.childNodes.length;x++){
+_c.push(n.childNodes[x].firstChild.nodeValue);
+}
+break;
+case "bind":
+_d=true;
+break;
+case "session":
+_e=true;
+}
+}
+}
+if(this.state==dojox.xmpp.xmpp.CONNECTED){
+if(!this.auth){
+for(var i=0;i<_c.length;i++){
+try{
+this.auth=dojox.xmpp.sasl.registry.match(_c[i],this);
+break;
+}
+catch(e){
+console.warn("No suitable auth mechanism found for: ",_c[i]);
+}
+}
+}else{
+if(_d){
+this.bindResource(_e);
+}
+}
+}
+},saslHandler:function(_f){
+if(_f.nodeName=="success"){
+this.auth.onSuccess();
+return;
+}
+if(_f.nodeName=="challenge"){
+this.auth.onChallenge(_f);
+return;
+}
+if(_f.hasChildNodes()){
+this.onLoginFailure(_f.firstChild.nodeName);
+this.session.setState("Terminate",_f.firstChild.nodeName);
+}
+},sendRestart:function(){
+this.session._sendRestart();
+},chatHandler:function(msg){
+var _10={from:msg.getAttribute("from"),to:msg.getAttribute("to")};
+var _11=null;
+for(var i=0;i<msg.childNodes.length;i++){
+var n=msg.childNodes[i];
+if(n.hasChildNodes()){
+switch(n.nodeName){
+case "thread":
+_10.chatid=n.firstChild.nodeValue;
+break;
+case "body":
+if(!n.getAttribute("xmlns")||(n.getAttribute("xmlns")=="")){
+_10.body=n.firstChild.nodeValue;
+}
+break;
+case "subject":
+_10.subject=n.firstChild.nodeValue;
+case "html":
+if(n.getAttribute("xmlns")==dojox.xmpp.xmpp.XHTML_IM_NS){
+_10.xhtml=n.getElementsByTagName("body")[0];
+}
+break;
+case "x":
+break;
+default:
+}
+}
+}
+var _12=-1;
+if(_10.chatid){
+for(var i=0;i<this.chatRegister.length;i++){
+var ci=this.chatRegister[i];
+if(ci&&ci.chatid==_10.chatid){
+_12=i;
+break;
+}
+}
+}else{
+for(var i=0;i<this.chatRegister.length;i++){
+var ci=this.chatRegister[i];
+if(ci){
+if(ci.uid==this.getBareJid(_10.from)){
+_12=i;
+}
+}
+}
+}
+if(_12>-1&&_11){
+var _13=this.chatRegister[_12];
+_13.setState(_11);
+if(_13.firstMessage){
+if(_11==dojox.xmpp.chat.ACTIVE_STATE){
+_13.useChatState=(_11!=null)?true:false;
+_13.firstMessage=false;
+}
+}
+}
+if((!_10.body||_10.body=="")&&!_10.xhtml){
+return;
+}
+if(_12>-1){
+var _13=this.chatRegister[_12];
+_13.recieveMessage(_10);
+}else{
+var _14=new dojox.xmpp.ChatService();
+_14.uid=this.getBareJid(_10.from);
+_14.chatid=_10.chatid;
+_14.firstMessage=true;
+if(!_11||_11!=dojox.xmpp.chat.ACTIVE_STATE){
+this.useChatState=false;
+}
+this.registerChatInstance(_14,_10);
+}
+},simpleMessageHandler:function(msg){
+},registerChatInstance:function(_15,_16){
+_15.setSession(this);
+this.chatRegister.push(_15);
+this.onRegisterChatInstance(_15,_16);
+_15.recieveMessage(_16,true);
+},iqSetHandler:function(msg){
+if(msg.hasChildNodes()){
+var fn=msg.firstChild;
+switch(fn.nodeName){
+case "query":
+if(fn.getAttribute("xmlns")=="jabber:iq:roster"){
+this.rosterSetHandler(fn);
+this.sendIqResult(msg.getAttribute("id"),msg.getAttribute("from"));
+}
+break;
+default:
+break;
+}
+}
+},sendIqResult:function(_17,to){
+var req={id:_17,to:to||this.domain,type:"result",from:this.jid+"/"+this.resource};
+this.dispatchPacket(dojox.xmpp.util.createElement("iq",req,true));
+},rosterSetHandler:function(_18){
+for(var i=0;i<_18.childNodes.length;i++){
+var n=_18.childNodes[i];
+if(n.nodeName=="item"){
+var _19=false;
+var _1a=-1;
+var _1b=null;
+var _1c=null;
+for(var x=0;x<this.roster.length;x++){
+var r=this.roster[x];
+if(n.getAttribute("jid")==r.jid){
+_19=true;
+if(n.getAttribute("subscription")=="remove"){
+_1b={id:r.jid,name:r.name,groups:[]};
+for(var y=0;y<r.groups.length;y++){
+_1b.groups.push(r.groups[y]);
+}
+this.roster.splice(x,1);
+_1a=dojox.xmpp.roster.REMOVED;
+}else{
+_1c=dojo.clone(r);
+var _1d=n.getAttribute("name");
+if(_1d){
+this.roster[x].name=_1d;
+}
+r.groups=[];
+if(n.getAttribute("subscription")){
+r.status=n.getAttribute("subscription");
+}
+r.substatus=dojox.xmpp.presence.SUBSCRIPTION_SUBSTATUS_NONE;
+if(n.getAttribute("ask")=="subscribe"){
+r.substatus=dojox.xmpp.presence.SUBSCRIPTION_REQUEST_PENDING;
+}
+for(var y=0;y<n.childNodes.length;y++){
+var _1e=n.childNodes[y];
+if((_1e.nodeName=="group")&&(_1e.hasChildNodes())){
+var _1f=_1e.firstChild.nodeValue;
+r.groups.push(_1f);
+}
+}
+_1b=r;
+_1a=dojox.xmpp.roster.CHANGED;
+}
+break;
+}
+}
+if(!_19&&(n.getAttribute("subscription")!="remove")){
+r=this.createRosterEntry(n);
+_1b=r;
+_1a=dojox.xmpp.roster.ADDED;
+}
+switch(_1a){
+case dojox.xmpp.roster.ADDED:
+this.onRosterAdded(_1b);
+break;
+case dojox.xmpp.roster.REMOVED:
+this.onRosterRemoved(_1b);
+break;
+case dojox.xmpp.roster.CHANGED:
+this.onRosterChanged(_1b,_1c);
+break;
+}
+}
+}
+},presenceUpdate:function(msg){
+if(msg.getAttribute("to")){
+var jid=this.getBareJid(msg.getAttribute("to"));
+if(jid!=this.jid){
+return;
+}
+}
+var _20=this.getResourceFromJid(msg.getAttribute("from"));
+var p={from:this.getBareJid(msg.getAttribute("from")),resource:_20,show:dojox.xmpp.presence.STATUS_ONLINE,priority:5,hasAvatar:false};
+if(msg.getAttribute("type")=="unavailable"){
+p.show=dojox.xmpp.presence.STATUS_OFFLINE;
+}
+for(var i=0;i<msg.childNodes.length;i++){
+var n=msg.childNodes[i];
+if(n.hasChildNodes()){
+switch(n.nodeName){
+case "status":
+case "show":
+p[n.nodeName]=n.firstChild.nodeValue;
+break;
+case "status":
+p.priority=parseInt(n.firstChild.nodeValue);
+break;
+case "x":
+if(n.firstChild&&n.firstChild.firstChild&&n.firstChild.firstChild.nodeValue!=""){
+p.avatarHash=n.firstChild.firstChild.nodeValue;
+p.hasAvatar=true;
+}
+break;
+}
+}
+}
+this.onPresenceUpdate(p);
+},retrieveRoster:function(){
+var _21={id:this.getNextIqId(),from:this.jid+"/"+this.resource,type:"get"};
+var req=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_21,false));
+req.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:roster"},true));
+req.append("</iq>");
+var def=this.dispatchPacket(req,"iq",_21.id);
+def.addCallback(this,"onRetrieveRoster");
+},getRosterIndex:function(jid){
+if(jid.indexOf("@")==-1){
+jid+="@"+this.domain;
+}
+for(var i=0;i<this.roster.length;i++){
+if(jid==this.roster[i].jid){
+return i;
+}
+}
+return -1;
+},createRosterEntry:function(_22){
+var re={name:_22.getAttribute("name"),jid:_22.getAttribute("jid"),groups:[],status:dojox.xmpp.presence.SUBSCRIPTION_NONE,substatus:dojox.xmpp.presence.SUBSCRIPTION_SUBSTATUS_NONE};
+if(!re.name){
+re.name=re.id;
+}
+for(var i=0;i<_22.childNodes.length;i++){
+var n=_22.childNodes[i];
+if(n.nodeName=="group"&&n.hasChildNodes()){
+re.groups.push(n.firstChild.nodeValue);
+}
+}
+if(_22.getAttribute("subscription")){
+re.status=_22.getAttribute("subscription");
+}
+if(_22.getAttribute("ask")=="subscribe"){
+re.substatus=dojox.xmpp.presence.SUBSCRIPTION_REQUEST_PENDING;
+}
+return re;
+},bindResource:function(_23){
+var _24={id:this.getNextIqId(),type:"set"};
+var _25=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_24,false));
+_25.append(dojox.xmpp.util.createElement("bind",{xmlns:dojox.xmpp.xmpp.BIND_NS},false));
+if(this.resource){
+_25.append(dojox.xmpp.util.createElement("resource"));
+_25.append(this.resource);
+_25.append("</resource>");
+}
+_25.append("</bind></iq>");
+var def=this.dispatchPacket(_25,"iq",_24.id);
+def.addCallback(this,function(msg){
+this.onBindResource(msg,_23);
+return msg;
+});
+},getNextIqId:function(){
+return "im_"+this._iqId++;
+},presenceSubscriptionRequest:function(msg){
+this.onSubscriptionRequest(msg);
+},dispatchPacket:function(msg,_26,_27){
+if(this.state!="Terminate"){
+return this.session.dispatchPacket(msg,_26,_27);
+}else{
+}
+},setState:function(_28,_29){
+if(this.state!=_28){
+if(this["on"+_28]){
+this["on"+_28](_28,this.state,_29);
+}
+this.state=_28;
+}
+},search:function(_2a,_2b,_2c){
+var req={id:this.getNextIqId(),"xml:lang":this.lang,type:"set",from:this.jid+"/"+this.resource,to:_2b};
+var _2d=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",req,false));
+_2d.append(dojox.xmpp.util.createElement("query",{xmlns:"jabber:iq:search"},false));
+_2d.append(dojox.xmpp.util.createElement(_2c,{},false));
+_2d.append(_2a);
+_2d.append("</").append(_2c).append(">");
+_2d.append("</query></iq>");
+var def=this.dispatchPacket(_2d.toString,"iq",req.id);
+def.addCallback(this,"_onSearchResults");
+},_onSearchResults:function(msg){
+if((msg.getAttribute("type")=="result")&&(msg.hasChildNodes())){
+this.onSearchResults([]);
+}
+},onLogin:function(){
+this.retrieveRoster();
+},onLoginFailure:function(msg){
+},onBindResource:function(msg,_2e){
+if(msg.getAttribute("type")=="result"){
+if((msg.hasChildNodes())&&(msg.firstChild.nodeName=="bind")){
+var _2f=msg.firstChild;
+if((_2f.hasChildNodes())&&(_2f.firstChild.nodeName=="jid")){
+if(_2f.firstChild.hasChildNodes()){
+var _30=_2f.firstChild.firstChild.nodeValue;
+this.jid=this.getBareJid(_30);
+this.resource=this.getResourceFromJid(_30);
+}
+}
+if(_2e){
+var _31={id:this.getNextIqId(),type:"set"};
+var _32=new dojox.string.Builder(dojox.xmpp.util.createElement("iq",_31,false));
+_32.append(dojox.xmpp.util.createElement("session",{xmlns:dojox.xmpp.xmpp.SESSION_NS},true));
+_32.append("</iq>");
+var def=this.dispatchPacket(_32,"iq",_31.id);
+def.addCallback(this,"onBindSession");
+return;
+}
+}else{
+}
+this.onLogin();
+}else{
+if(msg.getAttribute("type")=="error"){
+var err=this.processXmppError(msg);
+this.onLoginFailure(err);
+}
+}
+},onBindSession:function(msg){
+if(msg.getAttribute("type")=="error"){
+var err=this.processXmppError(msg);
+this.onLoginFailure(err);
+}else{
+this.onLogin();
+}
+},onSearchResults:function(_33){
+},onRetrieveRoster:function(msg){
+if((msg.getAttribute("type")=="result")&&msg.hasChildNodes()){
+var _34=msg.getElementsByTagName("query")[0];
+if(_34.getAttribute("xmlns")=="jabber:iq:roster"){
+for(var i=0;i<_34.childNodes.length;i++){
+if(_34.childNodes[i].nodeName=="item"){
+this.roster[i]=this.createRosterEntry(_34.childNodes[i]);
+}
+}
+}
+}else{
+if(msg.getAttribute("type")=="error"){
+}
+}
+this.setState(dojox.xmpp.xmpp.ACTIVE);
+this.onRosterUpdated();
+return msg;
+},onRosterUpdated:function(){
+},onSubscriptionRequest:function(req){
+},onPresenceUpdate:function(p){
+},onTransportReady:function(){
+this.setState(dojox.xmpp.xmpp.CONNECTED);
+this.rosterService=new dojox.xmpp.RosterService(this);
+this.presenceService=new dojox.xmpp.PresenceService(this);
+this.userService=new dojox.xmpp.UserService(this);
+},onTransportTerminate:function(_35,_36,_37){
+this.setState(dojox.xmpp.xmpp.TERMINATE,_37);
+},onConnected:function(){
+},onTerminate:function(_38,_39,_3a){
+},onActive:function(){
+},onRegisterChatInstance:function(_3b,_3c){
+},onRosterAdded:function(ri){
+},onRosterRemoved:function(ri){
+},onRosterChanged:function(ri,_3d){
+},processXmppError:function(msg){
+var err={stanzaType:msg.nodeName,id:msg.getAttribute("id")};
+for(var i=0;i<msg.childNodes.length;i++){
+var n=msg.childNodes[i];
+switch(n.nodeName){
+case "error":
+err.errorType=n.getAttribute("type");
+for(var x=0;x<n.childNodes.length;x++){
+var cn=n.childNodes[x];
+if((cn.nodeName=="text")&&(cn.getAttribute("xmlns")==dojox.xmpp.xmpp.STANZA_NS)&&cn.hasChildNodes()){
+err.message=cn.firstChild.nodeValue;
+}else{
+if((cn.getAttribute("xmlns")==dojox.xmpp.xmpp.STANZA_NS)&&(!cn.hasChildNodes())){
+err.condition=cn.nodeName;
+}
+}
+}
+break;
+default:
+break;
+}
+}
+return err;
+},sendStanzaError:function(_3e,to,id,_3f,_40,_41){
+var req={type:"error"};
+if(to){
+req.to=to;
+}
+if(id){
+req.id=id;
+}
+var _42=new dojox.string.Builder(dojox.xmpp.util.createElement(_3e,req,false));
+_42.append(dojox.xmpp.util.createElement("error",{type:_3f},false));
+_42.append(dojox.xmpp.util.createElement("condition",{xmlns:dojox.xmpp.xmpp.STANZA_NS},true));
+if(_41){
+var _43={xmlns:dojox.xmpp.xmpp.STANZA_NS,"xml:lang":this.lang};
+_42.append(dojox.xmpp.util.createElement("text",_43,false));
+_42.append(_41).append("</text>");
+}
+_42.append("</error></").append(_3e).append(">");
+this.dispatchPacket(_42.toString());
+},getBareJid:function(jid){
+var i=jid.indexOf("/");
+if(i!=-1){
+return jid.substring(0,i);
+}
+return jid;
+},getResourceFromJid:function(jid){
+var i=jid.indexOf("/");
+if(i!=-1){
+return jid.substring((i+1),jid.length);
+}
+return "";
+}});
+}
Index: trunk/web/dojo/dojox/xmpp/bosh.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/bosh.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/bosh.js	(revision 9)
@@ -0,0 +1,132 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.bosh"]){
+dojo._hasResource["dojox.xmpp.bosh"]=true;
+dojo.provide("dojox.xmpp.bosh");
+dojo.require("dojo.io.script");
+dojo.require("dojo.io.iframe");
+dojo.require("dojox.xml.parser");
+dojox.xmpp.bosh={transportIframes:[],initialize:function(_1){
+this.transportIframes=[];
+var _2=dojox._scopeName+".xmpp.bosh";
+var c=dojo.connect(dojo.getObject(_2),"_iframeOnload",this,function(_3){
+if(_3==0){
+_1.load();
+dojo.disconnect(c);
+}
+});
+for(var i=0;i<_1.iframes;i++){
+var _4="xmpp-transport-"+i;
+var _5=dojo.byId("xmpp-transport-"+i);
+if(_5){
+if(window[_4]){
+window[_4]=null;
+}
+if(window.frames[_4]){
+window.frames[_4]=null;
+}
+dojo.destroy(_5);
+}
+_5=dojo.io.iframe.create("xmpp-transport-"+i,_2+"._iframeOnload("+i+");");
+this.transportIframes.push(_5);
+}
+},_iframeOnload:function(_6){
+var _7=dojo.io.iframe.doc(dojo.byId("xmpp-transport-"+_6));
+_7.write("<script>var isLoaded=true; var rid=0; var transmiting=false; function _BOSH_(msg) { transmiting=false; parent.dojox.xmpp.bosh.handle(msg, rid); } </script>");
+},findOpenIframe:function(){
+for(var i=0;i<this.transportIframes.length;i++){
+var _8=this.transportIframes[i];
+var _9=_8.contentWindow;
+if(_9.isLoaded&&!_9.transmiting){
+return _8;
+}
+}
+return false;
+},handle:function(_a,_b){
+var _c=this["rid"+_b];
+var _d=dojox.xml.parser.parse(_a,"text/xml");
+if(_d){
+_c.ioArgs.xmppMessage=_d;
+}else{
+_c.errback(new Error("Recieved bad document from server: "+_a));
+}
+},get:function(_e){
+var _f=this.findOpenIframe();
+var _10=dojo.io.iframe.doc(_f);
+_e.frameDoc=_10;
+var dfd=this._makeScriptDeferred(_e);
+var _11=dfd.ioArgs;
+_f.contentWindow.rid=_11.rid;
+_f.contentWindow.transmiting=true;
+dojo._ioAddQueryToUrl(_11);
+dojo._ioNotifyStart(dfd);
+dojo.io.script.attach(_11.id,_11.url,_10);
+dojo._ioWatch(dfd,this._validCheck,this._ioCheck,this._resHandle);
+return dfd;
+},remove:function(id,_12){
+dojo.destroy(dojo.byId(id,_12));
+if(this[id]){
+delete this[id];
+}
+},_makeScriptDeferred:function(_13){
+var dfd=dojo._ioSetArgs(_13,this._deferredCancel,this._deferredOk,this._deferredError);
+var _14=dfd.ioArgs;
+_14.id="rid"+_13.rid;
+_14.rid=_13.rid;
+_14.canDelete=true;
+_14.frameDoc=_13.frameDoc;
+this[_14.id]=dfd;
+return dfd;
+},_deferredCancel:function(dfd){
+dfd.canceled=true;
+if(dfd.ioArgs.canDelete){
+dojox.xmpp.bosh._addDeadScript(dfd.ioArgs);
+}
+},_deferredOk:function(dfd){
+var _15=dfd.ioArgs;
+if(_15.canDelete){
+dojox.xmpp.bosh._addDeadScript(_15);
+}
+return _15.xmppMessage||_15;
+},_deferredError:function(_16,dfd){
+if(dfd.ioArgs.canDelete){
+if(_16.dojoType=="timeout"){
+dojox.xmpp.bosh.remove(dfd.ioArgs.id,dfd.ioArgs.frameDoc);
+}else{
+dojox.xmpp.bosh._addDeadScript(dfd.ioArgs);
+}
+}
+return _16;
+},_deadScripts:[],_addDeadScript:function(_17){
+dojox.xmpp.bosh._deadScripts.push({id:_17.id,frameDoc:_17.frameDoc});
+_17.frameDoc=null;
+},_validCheck:function(dfd){
+var _18=dojox.xmpp.bosh;
+var _19=_18._deadScripts;
+if(_19&&_19.length>0){
+for(var i=0;i<_19.length;i++){
+_18.remove(_19[i].id,_19[i].frameDoc);
+_19[i].frameDoc=null;
+}
+dojox.xmpp.bosh._deadScripts=[];
+}
+return true;
+},_ioCheck:function(dfd){
+var _1a=dfd.ioArgs;
+if(_1a.xmppMessage){
+return true;
+}
+return false;
+},_resHandle:function(dfd){
+if(dojox.xmpp.bosh._ioCheck(dfd)){
+dfd.callback(dfd);
+}else{
+dfd.errback(new Error("inconceivable dojox.xmpp.bosh._resHandle error"));
+}
+}};
+}
Index: trunk/web/dojo/dojox/xmpp/util.js
===================================================================
--- trunk/web/dojo/dojox/xmpp/util.js	(revision 0)
+++ trunk/web/dojo/dojox/xmpp/util.js	(revision 9)
@@ -0,0 +1,136 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.xmpp.util"]){
+dojo._hasResource["dojox.xmpp.util"]=true;
+dojo.provide("dojox.xmpp.util");
+dojo.require("dojox.string.Builder");
+dojo.require("dojox.encoding.base64");
+dojox.xmpp.util.xmlEncode=function(_1){
+if(_1){
+_1=_1.replace("&","&amp;").replace(">","&gt;").replace("<","&lt;").replace("'","&apos;").replace("\"","&quot;");
+}
+return _1;
+};
+dojox.xmpp.util.encodeJid=function(_2){
+var _3=new dojox.string.Builder();
+for(var i=0;i<_2.length;i++){
+var ch=_2.charAt(i);
+var _4=ch;
+switch(ch){
+case " ":
+_4="\\20";
+break;
+case "\"":
+_4="\\22";
+break;
+case "#":
+_4="\\23";
+break;
+case "&":
+_4="\\26";
+break;
+case "'":
+_4="\\27";
+break;
+case "/":
+_4="\\2f";
+break;
+case ":":
+_4="\\3a";
+break;
+case "<":
+_4="\\3c";
+break;
+case ">":
+_4="\\3e";
+break;
+}
+_3.append(_4);
+}
+return _3.toString();
+};
+dojox.xmpp.util.decodeJid=function(_5){
+_5=_5.replace(/\\([23][02367acef])/g,function(_6){
+switch(_6){
+case "\\20":
+return " ";
+case "\\22":
+return "\"";
+case "\\23":
+return "#";
+case "\\26":
+return "&";
+case "\\27":
+return "'";
+case "\\2f":
+return "/";
+case "\\3a":
+return ":";
+case "\\3c":
+return "<";
+case "\\3e":
+return ">";
+}
+return "ARG";
+});
+return _5;
+};
+dojox.xmpp.util.createElement=function(_7,_8,_9){
+var _a=new dojox.string.Builder("<");
+_a.append(_7+" ");
+for(var _b in _8){
+_a.append(_b+"=\"");
+_a.append(_8[_b]);
+_a.append("\" ");
+}
+if(_9){
+_a.append("/>");
+}else{
+_a.append(">");
+}
+return _a.toString();
+};
+dojox.xmpp.util.stripHtml=function(_c){
+var re=/<[^>]*?>/gi;
+for(var i=0;i<arguments.length;i++){
+}
+return _c.replace(re,"");
+};
+dojox.xmpp.util.decodeHtmlEntities=function(_d){
+var ta=dojo.doc.createElement("textarea");
+ta.innerHTML=_d.replace(/</g,"&lt;").replace(/>/g,"&gt;");
+return ta.value;
+};
+dojox.xmpp.util.htmlToPlain=function(_e){
+_e=dojox.xmpp.util.decodeHtmlEntities(_e);
+_e=_e.replace(/<br\s*[i\/]{0,1}>/gi,"\n");
+_e=dojox.xmpp.util.stripHtml(_e);
+return _e;
+};
+dojox.xmpp.util.Base64={};
+dojox.xmpp.util.Base64.encode=function(_f){
+var s2b=function(s){
+var b=[];
+for(var i=0;i<s.length;++i){
+b.push(s.charCodeAt(i));
+}
+return b;
+};
+return dojox.encoding.base64.encode(s2b(_f));
+};
+dojox.xmpp.util.Base64.decode=function(_10){
+var b2s=function(b){
+var s=[];
+dojo.forEach(b,function(c){
+s.push(String.fromCharCode(c));
+});
+return s.join("");
+};
+return b2s(dojox.encoding.base64.decode(_10));
+};
+}
Index: trunk/web/dojo/dojox/rpc/Rest.js
===================================================================
--- trunk/web/dojo/dojox/rpc/Rest.js	(revision 0)
+++ trunk/web/dojo/dojox/rpc/Rest.js	(revision 9)
@@ -0,0 +1,87 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.Rest"]){
+dojo._hasResource["dojox.rpc.Rest"]=true;
+dojo.provide("dojox.rpc.Rest");
+(function(){
+if(dojox.rpc&&dojox.rpc.transportRegistry){
+dojox.rpc.transportRegistry.register("REST",function(_1){
+return _1=="REST";
+},{getExecutor:function(_2,_3,_4){
+return new dojox.rpc.Rest(_3.name,(_3.contentType||_4._smd.contentType||"").match(/json|javascript/),null,function(id,_5){
+var _6=_4._getRequest(_3,[id]);
+_6.url=_6.target+(_6.data?"?"+_6.data:"");
+return _6;
+});
+}});
+}
+var _7;
+function _8(_9,_a,_b,id){
+_9.addCallback(function(_c){
+if(_9.ioArgs.xhr&&_b){
+_b=_9.ioArgs.xhr.getResponseHeader("Content-Range");
+_9.fullLength=_b&&(_b=_b.match(/\/(.*)/))&&parseInt(_b[1]);
+}
+return _c;
+});
+return _9;
+};
+_7=dojox.rpc.Rest=function(_d,_e,_f,_10){
+var _11;
+_11=function(id,_12){
+return _7._get(_11,id,_12);
+};
+_11.isJson=_e;
+_11._schema=_f;
+_11.cache={serialize:_e?((dojox.json&&dojox.json.ref)||dojo).toJson:function(_13){
+return _13;
+}};
+_11._getRequest=_10||function(id,_14){
+if(dojo.isObject(id)){
+id=dojo.objectToQuery(id);
+id=id?"?"+id:"";
+}
+if(_14&&_14.sort&&!_14.queryStr){
+id+=(id?"&":"?")+"sort(";
+for(var i=0;i<_14.sort.length;i++){
+var _15=_14.sort[i];
+id+=(i>0?",":"")+(_15.descending?"-":"+")+encodeURIComponent(_15.attribute);
+}
+id+=")";
+}
+var _16={url:_d+(id==null?"":id),handleAs:_e?"json":"text",contentType:_e?"application/json":"text/plain",sync:dojox.rpc._sync,headers:{Accept:_e?"application/json,application/javascript":"*/*"}};
+if(_14&&(_14.start>=0||_14.count>=0)){
+_16.headers.Range="items="+(_14.start||"0")+"-"+((_14.count&&_14.count!=Infinity&&(_14.count+(_14.start||0)-1))||"");
+}
+dojox.rpc._sync=false;
+return _16;
+};
+function _17(_18){
+_11[_18]=function(id,_19){
+return _7._change(_18,_11,id,_19);
+};
+};
+_17("put");
+_17("post");
+_17("delete");
+_11.servicePath=_d;
+return _11;
+};
+_7._index={};
+_7._timeStamps={};
+_7._change=function(_1a,_1b,id,_1c){
+var _1d=_1b._getRequest(id);
+_1d[_1a+"Data"]=_1c;
+return _8(dojo.xhr(_1a.toUpperCase(),_1d,true),_1b);
+};
+_7._get=function(_1e,id,_1f){
+_1f=_1f||{};
+return _8(dojo.xhrGet(_1e._getRequest(id,_1f)),_1e,(_1f.start>=0||_1f.count>=0),id);
+};
+})();
+}
Index: trunk/web/dojo/dojox/rpc/SMDLibrary/wikipedia.smd
===================================================================
--- trunk/web/dojo/dojox/rpc/SMDLibrary/wikipedia.smd	(revision 0)
+++ trunk/web/dojo/dojox/rpc/SMDLibrary/wikipedia.smd	(revision 9)
@@ -0,0 +1,49 @@
+{
+	"SMDVersion": "2.0",
+	"id": "http://en.wikipedia.org/w/api.php",
+	"description": "Wikipedia API",
+
+	transport: "JSONP",
+	envelope: "URL",
+	additionalParameters: true,
+	target: "http://en.wikipedia.org/w/api.php",
+	parameters: [
+		{ name: "format", optional: false, "default": "json" }
+	],
+
+	services: {
+
+		/*
+		 * This is a very very basic spec that just gives us a free-form API
+		 * endpoint to talk to. See http://en.wikipedia.org/w/api.php for
+		 * details on what parameters to supply and what sort of data you
+		 * should expect to see. Note that returned JSON is often somewhat
+		 * ... interesting ...:
+		 *
+		 * {
+		 *     "parse": {
+		 *         "text": {
+		 *             "*": "<table ..."
+		 *         },
+		 *         "langlinks": [
+		 *             {
+		 *                 "lang": "simple",
+		 *                 "*": ""
+		 *             },
+		 *             // etc.
+		 *         ]
+		 *     }
+		 * }
+		 * 
+		 * Not sure why we'd ever want an element to be named "*", but that's
+		 * how it is. So take care.
+		 *
+		 */
+		query: {
+			parameters: [
+				{ name: "action", type: "string", "default": "parse" }
+			]
+		}
+
+	}
+}
Index: trunk/web/dojo/dojox/rpc/SMDLibrary/friendfeed.smd
===================================================================
--- trunk/web/dojo/dojox/rpc/SMDLibrary/friendfeed.smd	(revision 0)
+++ trunk/web/dojo/dojox/rpc/SMDLibrary/friendfeed.smd	(revision 9)
@@ -0,0 +1,49 @@
+{
+	"SMDVersion": "2.0",
+	"id": "http://friendfeed.com/api",
+	"description": "Friendfeed's API - documentation at http://code.google.com/p/friendfeed-api/wiki/ApiDocumentation",
+
+	transport: "JSONP",
+	envelope: "URL",
+	
+	additionalParameters: true,
+	parameters: [
+		{ name: "format",  optional: false, "default": "json" },
+		{ name: "service", optional: true  },
+		{ name: "start",   optional: true, type: "integer"	},
+		{ name: "num",	   optional: true, type: "integer"	}
+	],
+
+	services: {
+		users: {
+			target: "http://friendfeed.com/api/feed/user",
+			parameters: [
+				{ name: "nickname", type: "string", optional: false, "default": "" }
+			]
+		},
+		entry: {
+			target: "http://friendfeed.com/api/feed/entry",
+			parameters: [
+				{ name: "entry_id", type: "string", optional: false, "default": "" }
+			]
+		},
+		search: {
+			target: "http://friendfeed.com/api/feed/search",
+			parameters: [
+				{ name: "q", type: "string", optional: false, "default": "" }
+			]
+		},
+		url: {
+			target: "http://friendfeed.com/api/feed/url",
+			parameters: [
+				{ name: "url", type: "string", optional: false, "default": "" }
+			]
+		},	  
+		domain: {
+			target: "http://friendfeed.com/api/feed/domain",
+			parameters: [
+				{ name: "domain", type: "string", optional: false, "default":"" }
+			]
+		}
+	}
+}
Index: trunk/web/dojo/dojox/rpc/SMDLibrary/google.smd
===================================================================
--- trunk/web/dojo/dojox/rpc/SMDLibrary/google.smd	(revision 0)
+++ trunk/web/dojo/dojox/rpc/SMDLibrary/google.smd	(revision 9)
@@ -0,0 +1,129 @@
+{
+	// Google Ajax API SMD as defined by:
+	// http://code.google.com/apis/ajaxsearch/documentation/reference.html
+	// PLEASE Read the Google Terms of Service:
+	// http://code.google.com/apis/ajaxsearch/terms.html
+	
+	"SMDVersion": "2.0",
+	"id": "http://ajax.googleapis.com/ajax/services/search/", 
+	"description": "Google Ajax API",
+		
+	"transport": "JSONP",
+	"envelope": "URL",
+	"additionalParameters": true,
+	
+	"parameters": [
+		// the most important param, the search query:
+		{ "name": "q", optional: false, "default":"" },
+		
+		// Google doesn't require, but appreciates, you using an API key
+		// see: http://code.google.com/apis/ajaxsearch/signup.html
+		// { "name": "key", optional: true, "default": "[enter your key]" },
+
+		// result size: large | small (8 or 4 per page)
+		{ "name": "rsz", optional:true, "default": "small" },
+
+		// language selection:
+		{ "name": "hl", optional:true, "default": "en" },
+
+		// starting offset
+		{ "name": "start", optional:true, "default": 0 },
+
+		{ "name": "alt", optional:false, "default": "json" },
+
+		// API version: only 1.0 supported 
+		{ "name": "v", optional:false, "default": "1.0" }
+	],
+
+	"services": {
+
+		"webSearch": {
+			"target": "http://ajax.googleapis.com/ajax/services/search/web",
+			"parameters": [
+				{ "name": "cx", "type":"string", "optional":true }, // unique id
+				{ "name": "cref", "type":"string", "optional":true }, // linked custom search engine
+				{ "name": "safe", "type":"string", "optional":true }, // active | moderate | off
+				// lr: see: http://www.google.com/coop/docs/cse/resultsxml.html#languageCollections	
+				{ "name": "lr", "type":"string", "optional":true } // restrict to lang
+			]
+		},
+
+		"localSearch": {
+			"target": "http://ajax.googleapis.com/ajax/services/search/local",
+			"parameters": [
+				// comma separated lat,long value to use for center
+				{ "name": "sll", "type": "string", "optional": true },
+				{ "name": "sspn", "type":"string", "optional": true } // bounding box?
+			]
+		},
+
+		"videoSearch": {
+			"target": "http://ajax.googleapis.com/ajax/services/search/video",
+			"parameters": [
+				// ordering, set "d" to order by date, "default": by relevance
+				{ "name": "scoring", "type": "string", "optional": true }
+			]
+		},
+
+		"blogSearch": {
+			"target": "http://ajax.googleapis.com/ajax/services/search/blogs",
+			"parameters": [
+				// see videoSearch params
+				{ "name": "scoring", "type": "string", "optional": true }
+			]
+		},
+
+		"newsSearch": {
+			"target": "http://ajax.googleapis.com/ajax/services/search/news",
+			"parameters": [
+				{ "name": "scoring", "type": "string", "optional": true },
+				// geo: scope search to location. supply city, state, country, or zipcode
+				// using geo makes "q" param optional
+				{ "name": "geo", "type":"string", optional:true }
+			]
+		},
+
+		"bookSearch": {
+			"target": "http://ajax.googleapis.com/ajax/services/search/books",
+			"parameters": [
+				// set to "1" to only include full books
+				{ "name":"as_brr", "optional": true, "type":"number" },
+				// restrict search to user-defined library
+				{ "name":"as_list", "optional": true, "type":"string" }
+			]
+		},
+
+		"imageSearch": {
+			"target": "http://ajax.googleapis.com/ajax/services/search/images",
+			"parameters": [
+				// safe: active | moderate | off
+				{ "name": "safe", "type":"string", "optional":true }, 
+				// limit image size: one of: icon, small|medium|large|xlarge, xxlarge, huge
+				{ "name": "imgsz", "type":"string", "optional": true },
+				// limit image color: one of: mono|gray|color
+				{ "name": "imgc", "type":"string", "optional": true },
+				// use "face" to limit to mugshots
+				{ "name": "imgtype", "type":"string", "optional": true },
+				// limit to file "type": jpg|png|gif|bmp
+				{ "name": "as_filetype", "type": "string", "optional": true },
+				// limit results to domain:
+				{ "name": "as_sitesearch", "type": "string", "optional": true }
+			]
+		},
+
+		"getFeed": {
+			"target": "http://ajax.googleapis.com/ajax/services/feed/load",
+			// pass a feed URL in the q parameter
+			"parameters": []
+		},
+		
+		"translate" : {
+			"target" : "http://ajax.googleapis.com/ajax/services/language/translate",
+			"parameters": [
+				// A String like "en|es" (for english -> spanish)
+				{ "name":"langpair", "type":"string", optional:false }
+			]
+		}
+		
+	}
+}
Index: trunk/web/dojo/dojox/rpc/SMDLibrary/geonames.smd
===================================================================
--- trunk/web/dojo/dojox/rpc/SMDLibrary/geonames.smd	(revision 0)
+++ trunk/web/dojo/dojox/rpc/SMDLibrary/geonames.smd	(revision 9)
@@ -0,0 +1,263 @@
+{
+
+	// JSON REST services provided by geonames.org
+	// adapted from: http://www.geonames.org/export/JSON-webservices.html
+	// http://creativecommons.org/licenses/by/3.0/
+	// INCOMPLETE IMPLEMENTATION
+	
+	"SMDVersion":"2.0",
+	"id":"/geonames",
+	"transport":"JSONP",
+	"envelope":"URL",
+	"target": "http://ws.geonames.org/",
+
+	"parameters" : [ 
+		{name:"type", optional: false, "default":"JSON"}
+	],
+
+	"services":{
+		getCountryInfo:{
+			// Result : returns info about a country such as name, population, etc.
+			// If country parameter is not specified, that information is returned for
+			// every country
+			"target": "countryInfoJSON",
+			"parameters": [
+				{ name: "country", type:"STRING", optional: true },
+				{ name: "lang", type:"STRING"}, // default: "en"
+				{ name: "maxRows", type:"INTEGER", optional: true } // default: 10
+			]	
+		},
+
+		getCities:{
+			// Result : returns a list of cities and placenames in the bounding box,
+			// ordered by relevancy (capital/population). Placenames close together
+			// are filterered out and only the larger name is included in the resulting list.
+			"target": "citiesJSON",
+			"parameters": [
+				{ name: "north", type:"FLOAT"},
+				{ name: "south", type:"FLOAT"},
+				{ name: "east", type:"FLOAT"},
+				{ name: "west", type:"FLOAT"},
+				{ name: "lang", type:"STRING"}, // default: "en"
+				{ name: "maxRows", type:"INTEGER", optional: true } // deault: 10
+			]	
+		},
+
+		"getQuakes":{
+			// Result : returns a list of earthquakes, ordered by magnitude
+			"target" : "earthquakesJSON",
+			"parameters" : [
+				// bounding box coords:
+				{ name: "north", type:"FLOAT" },
+				{ name: "south", type:"FLOAT" },
+				{ name: "east", type:"FLOAT" },
+       				{ name: "west", type:"FLOAT" },
+				{ name: "date", type:"STRING",optional: true }, // yyyy-MM-dd
+				{ name: "minMagniture", type:"INTERGER",optional: true },
+				{ name: "maxRows", type:"INTEGER", optional: true } // deault: 10
+			]
+		},
+
+		"getWeather":{
+			// Weather data is provided in the METAR (METeorological Aerodrome Report) format.
+			// Result : returns a list of weather stations with the most recent weather observation
+			"target" : "weatherJSON",
+			"parameters" : [
+				{ name: "north", type:"FLOAT" },
+				{ name: "south", type:"FLOAT" },
+				{ name: "east", type:"FLOAT" },
+				{ name: "west", type:"FLOAT" },
+				{ name: "maxRows", type:"INTEGER",optional:true } // deault: 10
+			]
+		},
+
+		"getWeatherByICAO":{
+			// Result : returns the weather station and the most recent weather observation for the ICAO code
+			"target": "weatherIcaoJSON",
+			"parameters": [
+				{ name:"ICAO", type:"STRING" }
+			]
+		},
+
+		"getWeatherByCoords":{
+			// Result : returns a weather station with the most recent weather observation
+			"target": "findNearByWeatherJSON",
+			"parameters": [
+				{ name:"lat", type:"FLOAT" },
+				{ name:"lng", type:"FLOAT" }
+			]
+		},
+
+		"getChildren":{
+                        // Returns the children for a given geonameId. The children are the
+                        // administrative divisions within an other administrative division.
+                        // Like the counties (ADM2) in a state (ADM1) or also the countries
+                        // in a continent.
+                        "target": "childrenJSON",
+			"parameters": [
+				{ name:"geonameId", type:"INTEGER" }
+			]
+		},
+
+		"getHierarchy":{
+			// Result : returns a list of GeoName records, ordered by hierarchy 
+			// level. The top hierarchy (continent) is the first element in the list
+			"target": "hierarchyJSON",
+			"parameters": [
+				{ name:"geonameId", type:"INTEGER" }
+			]
+		},
+
+		"getNeighbours":{
+			// The neighbourhood for US cities. Data provided by Zillow under cc-by-sa license.
+			"target":"neighboursJSON",
+			"parameters": [
+				{ name:"geonameId", type:"INTEGER" }
+                                //{ name:"lat", type:"FLOAT" },
+                                //{ name:"long", type:"FLOAT" }
+			]
+		},
+
+		"getNeighbourhood":{
+			// returns the neighbourhood for the given latitude/longitude
+			// Example http://ws.geonames.org/neighbourhood?lat=40.78343&lng=-73.96625
+			"target":"neighbourhoodJSON",
+			"parameters":[
+				{ name:"lat", type:"FLOAT" },
+				{ name:"lng", type:"FLOAT" },
+				{ name:"radius", type:"FLOAT" } 
+			]
+		},
+
+		"getSiblings":{
+			// Result : returns a list of GeoNames records that have the same
+			// administrative level and the same father
+			"target":"siblingsJSON",
+			"parameters": [
+				{ name:"geonameId", type:"INTEGER" }
+			]
+		},
+
+		"getCountryCode":{
+			// returns the iso country code for the given latitude/longitude
+			// With the parameter type=xml this service returns an xml document
+			//      with iso country code and country name. The optional parameter
+			//      lang can be used to specify the language the country name should
+			//      be in. JSON output is produced with type=JSON
+			"target":"countryCode",
+			"parameters": [
+				{ name:"lat", type:"FLOAT" },
+				{ name:"lng", type:"FLOAT" },
+				{ name:"lang", type:"STRING",optional:true }, 
+				{ name:"radius", type:"FLOAT" }
+			]
+		},
+
+		"getCountrySubdivision":{
+			// returns the country and the administrative subdivison (state, province,...) for the given latitude/longitude
+			// Example http://ws.geonames.org/countrySubdivisionJSON?lat=47.03&lng=10.2
+			"target":"countrySubdivisionJSON",
+			"parameters":[
+				{ name:"lat", type:"FLOAT" },
+				{ name:"long", type:"FLOAT" },
+				{ name:"radius", type:"FLOAT" }
+			]
+                }, 
+
+		"getWikipediaBoundingBox":{
+			// returns the wikipedia entries within the bounding box as xml document
+			// Example http://ws.geonames.org/wikipediaBoundingBoxJSON?north=44.1&south=-9.9&east=-22.4&west=55.2
+			"target":"wikipediaBoundingBoxJSON",
+			"parameters":[
+				{ name: "north", type:"FLOAT" },
+				{ name: "south", type:"FLOAT" },
+				{ name: "east", type:"FLOAT" },
+				{ name: "west", type:"FLOAT" },
+				{ name: "lang", type:"STRING",optional:true }, // default: "en"
+				{ name: "maxRows", type:"INTEGER",optional:true } // default: 10
+                        ]
+                },
+
+		"searchWikipedia":{
+			// returns the wikipedia entries found for the searchterm as xml document
+			// Example http://ws.geonames.org/wikipediaSearchJSON?q=london&maxRows=10
+			"target":"wikipediaSearchJSON",
+			"parameters":[
+				{ name: "q", type:"STRING" }, // place name?
+				{ name: "title", type:"STRING" }, // optional
+				{ name: "lang", type:"FLOAT",optional:true }, // de or en
+				{ name: "maxRows", type:"INTEGER",optional:true } // default: 10
+			]
+		},
+
+		"getTimezone":{
+                        // the timezone at the lat/lng with gmt offset (1. January) and dst offset (1. July)
+                        "target":"timezoneJSON",
+			"parameters":[
+				{ name:"lat", type:"FLOAT" },
+				{ name:"lng", type:"FLOAT" }
+			]
+		},
+
+		"search":{
+                        // returns the names found for the searchterm as xml or json document,
+                        // the search is using an AND operator
+                        "target":"searchJSON",
+			"parameters":[
+                                // exhaustive list. see: http://www.geonames.org/export/geonames-search.html
+				{ name:"q", type:"STRING" },
+				{ name:"name", type:"STRING" },
+				{ name:"name_equals", type:"STRING" },
+				// optional:
+				{ name:"maxRows", type:"INTEGER",optional:true }, // def: 100, max:1000
+				{ name:"startRow", type:"INTEGER",optional:true }, // def: 0
+				{ name:"country", type:"STRING",optional:true }, // iso-3166, def: all
+				/* name:"adminCode..." */
+				{ name:"featureClass", type:"STRING",optional:true}, // ? multi, enum(a,h,l,p,r,s,t,u,v)
+				{ name:"featureCode", type:"STRING",optional:true},
+				{ name:"lang", type:"STRING",optional:true}, // iso-636
+				{ name:"type", type:"STRING",optional:true}, // xml | json | rdf, def: xml
+				{ name:"style", type:"STRING",optional:true }, // SHORT,MEDIUM,LONG,FULL def: MEDIUM
+				{ name:"isNamedRequired", type:"BOOLEAN", optional:true }
+			]
+		},
+
+		"postalCodeLookup":{
+			// returns a list of places for the given postalcode in JSON format
+			// Example http://ws.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT
+			"target":"postalCodeLookupJSON",
+			"parameters":[
+				{ name:"postalcode", type:"STRING" },
+				{ name:"country", type:"STRING",optional:true},
+				{ name:"maxRows", type:"INTEGER", optional:true }, // def: 20
+				{ name:"charset", type:"STRING",optional:true } // def: utf-8
+			]
+		},
+
+                "postalCodeSearch":{
+                        "target":"postalCodeSearchJSON",
+			"parameters":[
+				{ name:"postalcode", type:"STRING",optional:true}, // one or the other
+				{ name:"placename", type:"STRING",optional:true }, // one or the other
+				{ name:"country", type:"STRING",optional:true},
+				{ name:"style", type:"STRING",optional:true}, // def: MEDIUM
+				{ name:"maxRows", type:"INTEGER",optional:true}, // def: 20
+                                { name:"charset", type:"STRING",optional:true} // def: utf-8
+                        ]
+                }
+
+                // TODO: implement:
+                // findNearby,
+                // findNearbyPlaceName
+                // findNearbyPostalCodes,
+                // findNearbyStreets,
+                // findNearByWeather
+                // findNearByWikipedia
+                // findNeareastAddress
+                // findNearestInterestion
+                // get
+                // gtop30
+                // srtm3
+
+	} // end services
+}
Index: trunk/web/dojo/dojox/rpc/SMDLibrary/yahoo.smd
===================================================================
--- trunk/web/dojo/dojox/rpc/SMDLibrary/yahoo.smd	(revision 0)
+++ trunk/web/dojo/dojox/rpc/SMDLibrary/yahoo.smd	(revision 9)
@@ -0,0 +1,519 @@
+{
+	"SMDVersion": "2.0",
+	// FIXME: is this the kind of value we're supposed to use here?
+	"id": "http://developer.yahoo.com/search/", 
+	"description": "Yahoo's search API",
+
+	transport: "JSONP",
+	envelope: "URL",
+	additionalParameters: true,
+	parameters: [
+		{ name: "appid", optional: false, "default": "dojotoolkit" },
+		{ name: "output", optional: false, "default": "json" }
+	],
+
+	// FIXME: Quite a few of these APIs can take multiple entries for the same parameter, to behave
+	//        as multi-select options. How should we handle these?
+	
+	// ANSWER: JSON Schema defines this aspect of SMD, enumeration of possible values is handled
+	//	with an "options" attribute. For example:
+	//	{ name: "search_in", type: "string", optional: true, "default": "all", options:["all", "question", "best_answer"]}, // can be "all", "question", "best_answer"
+
+	services: {
+		//
+		// ANSWERS
+		//
+		// FIXME: Some of these API endpoints' names only make sense when you know they're in the
+		//        Yahoo Answers part of the API; just reading a flat listing of methods in this SMD
+		//        likely won't have enough information about what they do. Should we split this up?
+
+		// http://developer.yahoo.com/answers/V1/questionSearch.html
+		questionSearch: {
+			target: "http://answers.yahooapis.com/AnswersService/V1/questionSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" },
+				{ name: "search_in", type: "string", optional: true, "default": "all" }, // can be "all", "question", "best_answer"
+				{ name: "category_id", type: "integer", optional: true, "default": null }, // one of (category_id, category_name) is required
+				{ name: "category_name", type: "string", optional: true, "default": null },
+				{ name: "region", type: "string", optional: true, "default": "us" }, // can be "us", "uk", "ca", "au", "in", "es", "br", "ar", "mx", "e1", "it", "de", "fr", "sg"
+				{ name: "date_range", type: "string", optional: true, "default": "all" }, // can be "all", "7", "7-30", "30-60", "60-90", "more90"
+				{ name: "sort", type: "string", optional: true, "default": "relevance" }, // can be "relevance", "date_desc", "date_asc"
+				{ name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "resolved", "open", "undecided"
+				{ name: "start", type: "integer", optional: true, "default": 0 },
+				{ name: "results", type: "integer", optional: true, "default": 10 } // max 50
+			]
+		},
+
+		// http://developer.yahoo.com/answers/V1/getByCategory.html
+		getByCategory: {
+			target: "http://answers.yahooapis.com/AnswersService/V1/getByCategory",
+			parameters: [
+				{ name: "category_id", type: "integer", optional: true, "default": null }, // one of (category_id, category_name) is required
+				{ name: "category_name", type: "string", optional: true, "default": null },
+				{ name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "resolved", "open", "undecided"
+				{ name: "region", type: "string", optional: true, "default": "us" }, // can be "us", "uk", "ca", "au", "in", "es", "br", "ar", "mx", "e1", "it", "de", "fr", "sg"
+				{ name: "sort", type: "string", optional: true, "default": "date_desc" }, // can be "date_desc", "date_asc", "ans_count_desc", "ans_count_asc"
+				{ name: "start", type: "integer", optional: true, "default": 0 },
+				{ name: "results", type: "integer", optional: true, "default": 10 } // max 50
+			]
+		},
+
+		// http://developer.yahoo.com/answers/V1/getQuestion.html
+		getQuestion: {
+			target: "http://answers.yahooapis.com/AnswersService/V1/getQuestion",
+			parameters: [
+				{ name: "question_id", type: "string", optional: true, "default": null }
+			]
+		},
+
+		// http://developer.yahoo.com/answers/V1/getByUser.html
+		getByUser: {
+			target: "http://answers.yahooapis.com/AnswersService/V1/getByUser",
+			parameters: [
+				{ name: "user_id", type: "string", optional: false, "default": "" },
+				{ name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "resolved", "open", "undecided"
+				{ name: "filter", type: "string", optional: true, "default": "question" }, // can be "question", "answer", "best_answer"
+				{ name: "sort", type: "string", optional: true, "default": "date_desc" }, // can be "date_desc", "date_asc", "ans_count_desc", "ans_count_asc"
+				{ name: "start", type: "integer", optional: true, "default": 0 },
+				{ name: "results", type: "integer", optional: true, "default": 10 } // max 50
+			]
+		},
+
+		//
+		// AUDIO SEARCH
+		//
+
+		// http://developer.yahoo.com/search/audio/V1/artistSearch.html
+		artistSearch: {
+			target: "http://search.yahooapis.com/AudioSearchService/V1/artistSearch",
+			parameters: [
+				{ name: "artist", type: "string", optional: true, "default": "" }, // one of (artist, artistid) is required
+				{ name: "artistid", type: "string", optional: true, "default": "" },
+				{ name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "any", "phrase"
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		// http://developer.yahoo.com/search/audio/V1/albumSearch.html
+		albumSearch: {
+			target: "http://search.yahooapis.com/AudioSearchService/V1/albumSearch",
+			parameters: [
+				{ name: "artist", type: "string", optional: true, "default": "" },
+				{ name: "artistid", type: "string", optional: true, "default": "" },
+				{ name: "album", type: "string", optional: true, "default": "" },
+				{ name: "albumid", type: "string", optional: true, "default": "" },
+				{ name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "any", "phrase"
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		// http://developer.yahoo.com/search/audio/V1/songSearch.html
+		songSearch: {
+			// beware, this method has returned many a JSON string containing syntax error(s)
+			target: "http://search.yahooapis.com/AudioSearchService/V1/songSearch",
+			parameters: [
+				{ name: "artist", type: "string", optional: true, "default": "" },
+				{ name: "artistid", type: "string", optional: true, "default": "" },
+				{ name: "album", type: "string", optional: true, "default": "" },
+				{ name: "albumid", type: "string", optional: true, "default": "" },
+				{ name: "song", type: "string", optional: true, "default": "" },
+				{ name: "songid", type: "string", optional: true, "default": "" },
+				{ name: "type", type: "string", optional: true, "default": "all" }, // can be "all", "any", "phrase"
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		// http://developer.yahoo.com/search/audio/V1/songDownloadLocation.html
+		songDownloadLocation: {
+			target: "http://search.yahooapis.com/AudioSearchService/V1/songDownloadLocation",
+			parameters: [
+				{ name: "songid", type: "string", optional: false, "default": "" },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "source", type: "string", optional: true, "default": "" } // can be "audiolunchbox", "artistdirect", "buymusic", "dmusic", "emusic", "epitonic", "garageband", "itunes", "yahoo", "livedownloads", "mp34u", "msn", "musicmatch", "mapster", "passalong", "rhapsody", "soundclick", "theweb"
+			]
+		},
+
+		//
+		// CONTENT ANALYSIS
+		//
+		
+		// http://developer.yahoo.com/search/content/V1/termExtraction.html
+		termExtraction: {
+			// FIXME: the API docs say to submit this as a POST, but we need JSONP for cross-domain, right?
+			// transport: "POST",
+			target: "http://search.yahooapis.com/ContentAnalysisService/V1/termExtraction",
+			parameters: [
+				{ name: "context", type: "string", optional: false, "default": "" },
+				{ name: "query", type: "string", optional: true, "default": "" }
+			]
+		},
+
+		//
+		// CONTEXT SEARCH
+		//
+		
+		// http://developer.yahoo.com/search/content/V1/contextSearch.html
+		contextSearch: {
+			target: "http://search.yahooapis.com/WebSearchService/V1/contextSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: true, "default": "" },
+				{ name: "context", type: "string", optional: false, "default": "" },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 100
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "html", "msword", "pdf", "ppt", "rss", "txt", "xls"
+				{ name: "adult_ok", type: "boolean", optional: true, "default": null },
+				{ name: "similar_ok", type: "boolean", optional: true, "default": null },
+				{ name: "language", type: "string", optional: true, "default": null },
+				{ name: "country", type: "string", optional: true, "default": null },
+				{ name: "site", type: "string", optional: true, "default": null },
+				{ name: "license", type: "string", optional: true, "default": "any" } // can be "any", "cc_any", "cc_commercial", "cc_modifiable"
+			]
+		},
+
+		//
+		// IMAGE SEARCH
+		//
+
+		// http://developer.yahoo.com/search/image/V1/imageSearch.html
+		imageSearch: {
+			target: "http://search.yahooapis.com/ImageSearchService/V1/imageSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" },
+				{ name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "bmp", "gif", "jpeg", "png"
+				{ name: "adult_ok", type: "boolean", optional: true, "default": null },
+				{ name: "coloration", type: "string", optional: true, "default": "any" }, // can be "any", "color", "bw"
+				{ name: "site", type: "string", optional: true, "default": null }
+			]
+		},
+
+		//
+		// LOCAL SEARCH
+		//
+
+		// http://developer.yahoo.com/search/local/V3/localSearch.html
+		localSearch: {
+			target: "http://local.yahooapis.com/LocalSearchService/V3/localSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: true, "default": "" }, // optional, but one of (query, listing_id) is required
+				{ name: "listing_id", type: "string", optional: true, "default": "" },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 20
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "sort", type: "string", optional: true, "default": "relevance" }, // can be "relevance", "title", "distance", "rating"
+				{ name: "radius", type: "float", optional: true }, // the default varies according to location
+				{ name: "street", type: "string", optional: true, "default": null },
+				{ name: "city", type: "string", optional: true, "default": null },
+				{ name: "state", type: "string", optional: true, "default": null }, // full name or two-letter abbreviation
+				{ name: "zip", type: "any", optional: true, "default": null }, // ddddd or ddddd-dddd format
+				{ name: "location", type: "string", optional: true, "default": null }, // free text, supersedes the street, city, state, zip fields
+				{ name: "latitude", type: "float", optional: true }, // -90 to 90
+				{ name: "longitude", type: "float", optional: true }, // -180 to 180
+				{ name: "category", type: "integer", optional: true },
+				{ name: "omit_category", type: "integer", optional: true },
+				{ name: "minimum_rating", type: "integer", optional: true }
+			]
+		},
+
+		// http://developer.yahoo.com/local/V1/collectionSearch.html
+		collectionSearch: {
+			target: "http://collections.local.yahooapis.com/LocalSearchService/V1/collectionSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: true, "default": "" }, // optional, but at least one of (query, username) is required
+				{ name: "username", type: "string", optional: true, "default": "" },
+				{ name: "city", type: "string", optional: true, "default": null },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		// http://developer.yahoo.com/local/V1/getCollection.html
+		getCollection: {
+			target: "http://collections.local.yahooapis.com/LocalSearchService/V1/getCollection",
+			parameters: [
+				{ name: "collection_id", type: "integer", optional: false, "default": "" }
+			]
+		},
+
+		//
+		// MY WEB 2.0
+		//
+
+		// http://developer.yahoo.com/search/myweb/V1/urlSearch.html
+		urlSearch: {
+			target: "http://search.yahooapis.com/MyWebService/V1/urlSearch",
+			parameters: [
+				{ name: "tag", type: "string", optional: true, "default": "" },
+				{ name: "yahooid", type: "string", optional: true, "default": "" },
+				{ name: "sort", type: "string", optional: true, "default": "date" }, // can be "date", "title", "url"
+				{ name: "reverse_sort", type: "boolean", optional: true, "default": 0 },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		// http://developer.yahoo.com/search/myweb/V1/tagSearch.html
+		tagSearch: {
+			target: "http://search.yahooapis.com/MyWebService/V1/tagSearch",
+			parameters: [
+				{ name: "url", type: "string", optional: true, "default": "" },
+				{ name: "yahooid", type: "string", optional: true, "default": "" },
+				{ name: "sort", type: "string", optional: true, "default": "popularity" }, // can be "popularity", "tag", "date"
+				{ name: "reverse_sort", type: "boolean", optional: true, "default": 0 },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		// http://developer.yahoo.com/search/myweb/V1/relatedTags.html
+		relatedTags: {
+			target: "http://search.yahooapis.com/MyWebService/V1/relatedTags",
+			parameters: [
+				{ name: "tag", type: "string", optional: false, "default": "" },
+				{ name: "yahooid", type: "string", optional: true, "default": "" },
+				{ name: "sort", type: "string", optional: true, "default": "popularity" }, // can be "popularity", "tag", "date"
+				{ name: "reverse_sort", type: "boolean", optional: true, "default": 0 },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		//
+		// NEWS SEARCH
+		//
+
+		// http://developer.yahoo.com/search/news/V1/newsSearch.html
+		newsSearch: {
+			target: "http://search.yahooapis.com/NewsSearchService/V1/newsSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" },
+				{ name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "sort", type: "string", optional: true, "default": "rank" }, // can be "rank", "date"
+				{ name: "language", type: "string", optional: true, "default": null },
+				{ name: "site", type: "string", optional: true, "default": null }
+			]
+		},
+
+		//
+		// SHOPPING
+		//
+
+		// http://developer.yahoo.com/shopping/V2/catalogListing.html
+		catalogListing: {
+			target: "http://shopping.yahooapis.com/ShoppingService/V2/catalogListing",
+			parameters: [
+				{ name: "catalogid", type: "integer", optional: true, "default": null }, // required if idtype,idvalue are not specified
+				{ name: "getlisting", type: "boolean", optional: true, "default": 1 },
+				{ name: "getreview", type: "boolean", optional: true, "default": 0 },
+				{ name: "getspec", type: "boolean", optional: true, "default": 0 },
+				{ name: "idtype", type: "string", optional: true, "default": null }, // can be "upc", "brand,model", "brand,partnum"; required if catalogid is not specified
+				{ name: "idvalue", type: "string", optional: true, "default": null }, // required if catalogid is not specified
+				{ name: "onlynew", type: "boolean", optional: true, "default": 1 },
+				{ name: "reviewstart", type: "integer", optional: true, "default": 1 },
+				{ name: "reviewsort", type: "string", optional: true, "default": "mostRecommended_descending" }, // can be "mostRecommended_descending", "mostRecommended_ascending", "latest_descending", "latest_ascending", "highestRated_descending", "highestRated_ascending"
+				{ name: "zip", type: "string", optional: true, "default": null }
+			]
+		},
+
+
+		// http://developer.yahoo.com/shopping/V1/merchantSearch.html
+		merchantSearch: {
+			target: "http://api.shopping.yahoo.com/ShoppingService/V1/merchantSearch",
+			parameters: [
+				{ name: "merchantid", type: "integer", optional: false, "default": null }
+			]
+		},
+
+
+		// http://developer.yahoo.com/shopping/V3/productSearch.html
+		productSearch: {
+			target: "http://shopping.yahooapis.com/ShoppingService/V3/productSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: true, "default": "" }, // required if category is not specified
+				{ name: "category", type: "any", optional: true, "default": "" }, // required if query is not specified
+				{ name: "class", type: "string", optional: true, "default": null }, // can be "catalogs", "freeoffers", "paidoffers"; defaults to all three of these
+				{ name: "department", type: "integer", optional: true, "default": null },
+				{ name: "highestprice", type: "float", optional: true, "default": null },
+				{ name: "lowestprice", type: "float", optional: true, "default": null },
+				{ name: "merchantId", type: "integer", optional: true, "default": null },
+				{ name: "refinement", type: "string", optional: true, "default": null }, // used only if category is specified
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // 1-50
+				{ name: "show_numratings", type: "boolean", optional: true, "default": 0 },
+				{ name: "show_narrowing", type: "boolean", optional: true, "default": 1 },
+				{ name: "sort", type: "string", optional: true }, // can be "price_ascending", "price_descending", "userrating_ascending", "userrating_descending"; omitted, the default is to sort by relevance
+				{ name: "start", type: "integer", optional: true, "default": 1 } // 1-300
+			]
+		},
+
+		//
+		// SITE EXPLORER
+		//
+
+		// http://developer.yahoo.com/search/siteexplorer/V1/inlinkData.html
+		inlinkData: {
+			target: "http://search.yahooapis.com/SiteExplorerService/V1/inlinkData",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" },
+				{ name: "results", type: "integer", optional: true, "default": 50 }, // max 100
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "entire_site", type: "boolean", optional: true, "default": null },
+				{ name: "omit_inlinks", type: "string", optional: true, "default": "none" } // can be "none", "domain", "subdomain"
+			]
+		},
+
+		// http://developer.yahoo.com/search/siteexplorer/V1/pageData.html
+		pageData: {
+			target: "http://search.yahooapis.com/SiteExplorerService/V1/pageData",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" },
+				{ name: "results", type: "integer", optional: true, "default": 50 }, // max 100
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "domain_only", type: "boolean", optional: true, "default": null }
+			]
+		},
+
+		// http://developer.yahoo.com/search/siteexplorer/V1/ping.html
+		ping: {
+			target: "http://search.yahooapis.com/SiteExplorerService/V1/ping",
+			parameters: [
+				{ name: "sitemap", type: "string", optional: false, "default": "" }
+			]
+		},
+
+		// http://developer.yahoo.com/search/siteexplorer/V1/updateNotification.html
+		updateNotification: {
+			target: "http://search.yahooapis.com/SiteExplorerService/V1/updateNotification",
+			parameters: [
+				{ name: "url", type: "string", optional: false, "default": "" }
+			]
+		},
+
+		//
+		// TRAFFIC
+		//
+
+		// http://developer.yahoo.com/traffic/rest/V1/index.html
+		trafficData: {
+			target: "http://local.yahooapis.com/MapsService/V1/trafficData",
+			parameters: [
+				{ name: "street", type: "string", optional: true, "default": "" },
+				{ name: "city", type: "string", optional: true, "default": "" },
+				{ name: "state", type: "string", optional: true, "default": null }, // full name or two-letter abbreviation
+				{ name: "zip", type: "any", optional: true, "default": null }, // ddddd or ddddd-dddd format
+				{ name: "location", type: "string", optional: true, "default": null }, // free text, supersedes the street, city, state, zip fields
+				{ name: "latitude", type: "float", optional: true }, // -90 to 90
+				{ name: "longitude", type: "float", optional: true }, // -180 to 180
+				{ name: "severity", type: "integer", optional: true, "default": 1 }, // can be 1-5
+				{ name: "zoom", type: "integer", optional: true, "default": 6 }, // can be 1-12
+				{ name: "radius", type: "float", optional: true }, // in miles, default varies with location; ignored if zoom is specified
+				{ name: "include_map", type: "boolean", optional: true, "default": 0 },
+				{ name: "image_type", type: "string", optional: true, "default": "png" }, // can be "png" or "gif"
+				{ name: "image_height", type: "integer", optional: true, "default": 500 }, // in pixels, can be 10-2000
+				{ name: "image_width", type: "integer", optional: true, "default": 620 } // in pixels, can be 10-2000
+			]
+		},
+
+		//
+		// TRAVEL
+		//
+
+		// http://developer.yahoo.com/travel/tripservice/V1.1/tripSearch.html
+		tripSearch: {
+			target: "http://travel.yahooapis.com/TripService/V1.1/tripSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: true, "default": "" },
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 }
+			]
+		},
+
+		// http://developer.yahoo.com/travel/tripservice/V1.1/getTrip.html
+		getTrip: {
+			target: "http://travel.yahooapis.com/TripService/V1.1/getTrip",
+			parameters: [
+				{ name: "id", type: "integer", optional: false, "default": null }
+			]
+		},
+
+		//
+		// UTILITY SERVICES
+		//
+
+		// http://developer.yahoo.com/util/timeservice/V1/getTime.html
+		/* RGG: commented out because it refuses to return JSON format even when you tell it
+		        to do so (it returns a <script> tag)
+		getTime: {
+			target: "http://developer.yahooapis.com/TimeService/V1/getTime",
+			parameters: [
+				{ name: "format", type: "string", optional: true, "default": "unix" } // can be "unix" for unix timestamp, "ms" for milliseconds
+			]
+		},
+		*/
+
+		//
+		// VIDEO SEARCH
+		//
+
+		// http://developer.yahoo.com/search/video/V1/videoSearch.html
+		videoSearch: {
+			target: "http://search.yahooapis.com/VideoSearchService/V1/videoSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" },
+				{ name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 50
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "avi", "flash", "mpeg", "msmedia", "quicktime", "realmedia"
+				{ name: "adult_ok", type: "boolean", optional: true, "default": null },
+				{ name: "site", type: "string", optional: true, "default": null }
+			]
+		},
+
+		//
+		// WEB SEARCH
+		//
+
+		// http://developer.yahoo.com/search/web/V1/webSearch.html
+		webSearch: {
+			target: "http://search.yahooapis.com/WebSearchService/V1/webSearch",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" }, // must be less than 1kb
+				{ name: "region", type: "string", optional: true, "default": "us" },
+				{ name: "type", type: "string", optional: true, "default": "any" }, // can be "all", "any", "phrase"
+				{ name: "results", type: "integer", optional: true, "default": 10 }, // max 100
+				{ name: "start", type: "integer", optional: true, "default": 1 },
+				{ name: "format", type: "string", optional: true, "default": "any" }, // can be "any", "html", "msword", "pdf", "ppt", "rss", "txt", "xls"
+				{ name: "adult_ok", type: "boolean", optional: true, "default": null },
+				{ name: "similar_ok", type: "boolean", optional: true, "default": null },
+				{ name: "language", type: "string", optional: true, "default": null },
+				{ name: "country", type: "string", optional: true, "default": null },
+				{ name: "site", type: "string", optional: true, "default": null },
+				{ name: "subscription", type: "string", optional: true, "default": null },
+				{ name: "license", type: "string", optional: true, "default": "any" } // can be "any", "cc_any", "cc_commercial", "cc_modifiable"
+			]
+		},
+
+		// http://developer.yahoo.com/search/web/V1/spellingSuggestion.html
+		spellingSuggestion: {
+			target: "http://search.yahooapis.com/WebSearchService/V1/spellingSuggestion",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" }
+			]
+		},
+
+		// http://developer.yahoo.com/search/web/V1/relatedSuggestion.html
+		relatedSuggestion: {
+			target: "http://search.yahooapis.com/WebSearchService/V1/relatedSuggestion",
+			parameters: [
+				{ name: "query", type: "string", optional: false, "default": "" },
+				{ name: "results", type: "integer", optional: true, "default": 10 } // max 50
+			]
+		}
+	}
+}
Index: trunk/web/dojo/dojox/rpc/SMDLibrary/dojo-api.smd
===================================================================
--- trunk/web/dojo/dojox/rpc/SMDLibrary/dojo-api.smd	(revision 0)
+++ trunk/web/dojo/dojox/rpc/SMDLibrary/dojo-api.smd	(revision 9)
@@ -0,0 +1,30 @@
+{
+	envelope: "URL",
+	transport: "JSONP",
+	callbackParamName: "callback",
+	services: {
+		get: {
+			target: "http://api.dojotoolkit.org/jsdoc/jsonp",
+			parameters: [
+				{ name: "name", type: "string", optional: false },
+				{ name: "exact", type: "boolean", optional: true },
+				{ name: "recursion", type: "boolean", optional: true },
+				{ name: "resource", type: "string", optional: true },
+				{ name: "project", type: "string", optional: true },
+				{ name: "version", type: "string", optional: true },
+				{ name: "attributes", type: "array", optional: true }
+			]
+		},
+		batch: {
+			target: "http://api.dojotoolkit.org/jsdoc/jsonp/batch",
+			parameters: [
+				{ name: "names", type: "array", optional: false },
+				{ name: "exact", type: "boolean", optional: true },
+				{ name: "recursion", type: "boolean", optional: true },
+				{ name: "project", type: "string", optional: true },
+				{ name: "version", type: "string", optional: true },
+				{ name: "attributes", type: "array", optional: false }
+			]
+		}
+	}
+}
\ No newline at end of file
Index: trunk/web/dojo/dojox/rpc/Client.js
===================================================================
--- trunk/web/dojo/dojox/rpc/Client.js	(revision 0)
+++ trunk/web/dojo/dojox/rpc/Client.js	(revision 9)
@@ -0,0 +1,21 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.Client"]){
+dojo._hasResource["dojox.rpc.Client"]=true;
+dojo.provide("dojox.rpc.Client");
+(function(){
+dojo._defaultXhr=dojo.xhr;
+dojo.xhr=function(_1,_2){
+var _3=_2.headers=_2.headers||{};
+_3["Client-Id"]=dojox.rpc.Client.clientId;
+_3["Seq-Id"]=dojox._reqSeqId=(dojox._reqSeqId||0)+1;
+return dojo._defaultXhr.apply(dojo,arguments);
+};
+})();
+dojox.rpc.Client.clientId=(Math.random()+"").substring(2,14)+(new Date().getTime()+"").substring(8,13);
+}
Index: trunk/web/dojo/dojox/rpc/JsonRPC.js
===================================================================
--- trunk/web/dojo/dojox/rpc/JsonRPC.js	(revision 0)
+++ trunk/web/dojo/dojox/rpc/JsonRPC.js	(revision 9)
@@ -0,0 +1,39 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.JsonRPC"]){
+dojo._hasResource["dojox.rpc.JsonRPC"]=true;
+dojo.provide("dojox.rpc.JsonRPC");
+dojo.require("dojox.rpc.Service");
+(function(){
+function _1(_2){
+return {serialize:function(_3,_4,_5,_6){
+var d={id:this._requestId++,method:_4.name,params:_5};
+if(_2){
+d.jsonrpc=_2;
+}
+return {data:dojo.toJson(d),handleAs:"json",contentType:"application/json",transport:"POST"};
+},deserialize:function(_7){
+if("Error"==_7.name){
+_7=dojo.fromJson(_7.responseText);
+}
+if(_7.error){
+var e=new Error(_7.error.message||_7.error);
+e._rpcErrorObject=_7.error;
+return e;
+}
+return _7.result;
+}};
+};
+dojox.rpc.envelopeRegistry.register("JSON-RPC-1.0",function(_8){
+return _8=="JSON-RPC-1.0";
+},dojo.mixin({namedParams:false},_1()));
+dojox.rpc.envelopeRegistry.register("JSON-RPC-2.0",function(_9){
+return _9=="JSON-RPC-2.0";
+},_1("2.0"));
+})();
+}
Index: trunk/web/dojo/dojox/rpc/OfflineRest.js
===================================================================
--- trunk/web/dojo/dojox/rpc/OfflineRest.js	(revision 0)
+++ trunk/web/dojo/dojox/rpc/OfflineRest.js	(revision 9)
@@ -0,0 +1,203 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.OfflineRest"]){
+dojo._hasResource["dojox.rpc.OfflineRest"]=true;
+dojo.provide("dojox.rpc.OfflineRest");
+dojo.require("dojox.data.ClientFilter");
+dojo.require("dojox.rpc.Rest");
+dojo.require("dojox.storage");
+(function(){
+var _1=dojox.rpc.Rest;
+var _2="dojox_rpc_OfflineRest";
+var _3;
+var _4=_1._index;
+dojox.storage.manager.addOnLoad(function(){
+_3=dojox.storage.manager.available;
+for(var i in _4){
+_5(_4[i],i);
+}
+});
+var _6;
+function _7(_8){
+return _8.replace(/[^0-9A-Za-z_]/g,"_");
+};
+function _5(_9,id){
+if(_3&&!_6&&(id||(_9&&_9.__id))){
+dojox.storage.put(_7(id||_9.__id),typeof _9=="object"?dojox.json.ref.toJson(_9):_9,function(){
+},_2);
+}
+};
+function _a(_b){
+return _b instanceof Error&&(_b.status==503||_b.status>12000||!_b.status);
+};
+function _c(){
+if(_3){
+var _d=dojox.storage.get("dirty",_2);
+if(_d){
+for(var _e in _d){
+_f(_e,_d);
+}
+}
+}
+};
+var _10;
+function _11(){
+_10.sendChanges();
+_10.downloadChanges();
+};
+var _12=setInterval(_11,15000);
+dojo.connect(document,"ononline",_11);
+_10=dojox.rpc.OfflineRest={turnOffAutoSync:function(){
+clearInterval(_12);
+},sync:_11,sendChanges:_c,downloadChanges:function(){
+},addStore:function(_13,_14){
+_10.stores.push(_13);
+_13.fetch({queryOptions:{cache:true},query:_14,onComplete:function(_15,_16){
+_13._localBaseResults=_15;
+_13._localBaseFetch=_16;
+}});
+}};
+_10.stores=[];
+var _17=_1._get;
+_1._get=function(_18,id){
+try{
+_c();
+if(window.navigator&&navigator.onLine===false){
+throw new Error();
+}
+var dfd=_17(_18,id);
+}
+catch(e){
+dfd=new dojo.Deferred();
+dfd.errback(e);
+}
+var _19=dojox.rpc._sync;
+dfd.addCallback(function(_1a){
+_5(_1a,_18._getRequest(id).url);
+return _1a;
+});
+dfd.addErrback(function(_1b){
+if(_3){
+if(_a(_1b)){
+var _1c={};
+var _1d=function(id,_1e){
+if(_1c[id]){
+return _1e;
+}
+var _1f=dojo.fromJson(dojox.storage.get(_7(id),_2))||_1e;
+_1c[id]=_1f;
+for(var i in _1f){
+var val=_1f[i];
+id=val&&val.$ref;
+if(id){
+if(id.substring&&id.substring(0,4)=="cid:"){
+id=id.substring(4);
+}
+_1f[i]=_1d(id,val);
+}
+}
+if(_1f instanceof Array){
+for(i=0;i<_1f.length;i++){
+if(_1f[i]===undefined){
+_1f.splice(i--,1);
+}
+}
+}
+return _1f;
+};
+_6=true;
+var _20=_1d(_18._getRequest(id).url);
+if(!_20){
+return _1b;
+}
+_6=false;
+return _20;
+}else{
+return _1b;
+}
+}else{
+if(_19){
+return new Error("Storage manager not loaded, can not continue");
+}
+dfd=new dojo.Deferred();
+dfd.addCallback(arguments.callee);
+dojox.storage.manager.addOnLoad(function(){
+dfd.callback();
+});
+return dfd;
+}
+});
+return dfd;
+};
+function _21(_22,_23,_24,_25,_26){
+if(_22=="delete"){
+dojox.storage.remove(_7(_23),_2);
+}else{
+dojox.storage.put(_7(_24),_25,function(){
+},_2);
+}
+var _27=_26&&_26._store;
+if(_27){
+_27.updateResultSet(_27._localBaseResults,_27._localBaseFetch);
+dojox.storage.put(_7(_26._getRequest(_27._localBaseFetch.query).url),dojox.json.ref.toJson(_27._localBaseResults),function(){
+},_2);
+}
+};
+dojo.addOnLoad(function(){
+dojo.connect(dojox.data,"restListener",function(_28){
+var _29=_28.channel;
+var _2a=_28.event.toLowerCase();
+var _2b=dojox.rpc.JsonRest&&dojox.rpc.JsonRest.getServiceAndId(_29).service;
+_21(_2a,_29,_2a=="post"?_29+_28.result.id:_29,dojo.toJson(_28.result),_2b);
+});
+});
+var _2c=_1._change;
+_1._change=function(_2d,_2e,id,_2f){
+if(!_3){
+return _2c.apply(this,arguments);
+}
+var _30=_2e._getRequest(id).url;
+_21(_2d,_30,dojox.rpc.JsonRest._contentId,_2f,_2e);
+var _31=dojox.storage.get("dirty",_2)||{};
+if(_2d=="put"||_2d=="delete"){
+var _32=_30;
+}else{
+_32=0;
+for(var i in _31){
+if(!isNaN(parseInt(i))){
+_32=i;
+}
+}
+_32++;
+}
+_31[_32]={method:_2d,id:_30,content:_2f};
+return _f(_32,_31);
+};
+function _f(_33,_34){
+var _35=_34[_33];
+var _36=dojox.rpc.JsonRest.getServiceAndId(_35.id);
+var _37=_2c(_35.method,_36.service,_36.id,_35.content);
+_34[_33]=_35;
+dojox.storage.put("dirty",_34,function(){
+},_2);
+_37.addBoth(function(_38){
+if(_a(_38)){
+return null;
+}
+var _39=dojox.storage.get("dirty",_2)||{};
+delete _39[_33];
+dojox.storage.put("dirty",_39,function(){
+},_2);
+return _38;
+});
+return _37;
+};
+dojo.connect(_4,"onLoad",_5);
+dojo.connect(_4,"onUpdate",_5);
+})();
+}
Index: trunk/web/dojo/dojox/rpc/Service.js
===================================================================
--- trunk/web/dojo/dojox/rpc/Service.js	(revision 0)
+++ trunk/web/dojo/dojox/rpc/Service.js	(revision 9)
@@ -0,0 +1,217 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.Service"]){
+dojo._hasResource["dojox.rpc.Service"]=true;
+dojo.provide("dojox.rpc.Service");
+dojo.require("dojo.AdapterRegistry");
+dojo.declare("dojox.rpc.Service",null,{constructor:function(_1,_2){
+var _3;
+var _4=this;
+function _5(_6){
+_6._baseUrl=new dojo._Url((dojo.isBrowser?location.href:dojo.config.baseUrl),_3||".")+"";
+_4._smd=_6;
+for(var _7 in _4._smd.services){
+var _8=_7.split(".");
+var _9=_4;
+for(var i=0;i<_8.length-1;i++){
+_9=_9[_8[i]]||(_9[_8[i]]={});
+}
+_9[_8[_8.length-1]]=_4._generateService(_7,_4._smd.services[_7]);
+}
+};
+if(_1){
+if((dojo.isString(_1))||(_1 instanceof dojo._Url)){
+if(_1 instanceof dojo._Url){
+_3=_1+"";
+}else{
+_3=_1;
+}
+var _a=dojo._getText(_3);
+if(!_a){
+throw new Error("Unable to load SMD from "+_1);
+}else{
+_5(dojo.fromJson(_a));
+}
+}else{
+_5(_1);
+}
+}
+this._options=(_2?_2:{});
+this._requestId=0;
+},_generateService:function(_b,_c){
+if(this[_c]){
+throw new Error("WARNING: "+_b+" already exists for service. Unable to generate function");
+}
+_c.name=_b;
+var _d=dojo.hitch(this,"_executeMethod",_c);
+var _e=dojox.rpc.transportRegistry.match(_c.transport||this._smd.transport);
+if(_e.getExecutor){
+_d=_e.getExecutor(_d,_c,this);
+}
+var _f=_c.returns||(_c._schema={});
+var _10="/"+_b+"/";
+_f._service=_d;
+_d.servicePath=_10;
+_d._schema=_f;
+_d.id=dojox.rpc.Service._nextId++;
+return _d;
+},_getRequest:function(_11,_12){
+var smd=this._smd;
+var _13=dojox.rpc.envelopeRegistry.match(_11.envelope||smd.envelope||"NONE");
+var _14=(_11.parameters||[]).concat(smd.parameters||[]);
+if(_13.namedParams){
+if((_12.length==1)&&dojo.isObject(_12[0])){
+_12=_12[0];
+}else{
+var _15={};
+for(var i=0;i<_11.parameters.length;i++){
+if(typeof _12[i]!="undefined"||!_11.parameters[i].optional){
+_15[_11.parameters[i].name]=_12[i];
+}
+}
+_12=_15;
+}
+if(_11.strictParameters||smd.strictParameters){
+for(i in _12){
+var _16=false;
+for(var j=0;j<_14.length;j++){
+if(_14[i].name==i){
+_16=true;
+}
+}
+if(!_16){
+delete _12[i];
+}
+}
+}
+for(i=0;i<_14.length;i++){
+var _17=_14[i];
+if(!_17.optional&&_17.name&&!_12[_17.name]){
+if(_17["default"]){
+_12[_17.name]=_17["default"];
+}else{
+if(!(_17.name in _12)){
+throw new Error("Required parameter "+_17.name+" was omitted");
+}
+}
+}
+}
+}else{
+if(_14&&_14[0]&&_14[0].name&&(_12.length==1)&&dojo.isObject(_12[0])){
+if(_13.namedParams===false){
+_12=dojox.rpc.toOrdered(_14,_12);
+}else{
+_12=_12[0];
+}
+}
+}
+if(dojo.isObject(this._options)){
+_12=dojo.mixin(_12,this._options);
+}
+var _18=_11._schema||_11.returns;
+var _19=_13.serialize.apply(this,[smd,_11,_12]);
+_19._envDef=_13;
+var _1a=(_11.contentType||smd.contentType||_19.contentType);
+return dojo.mixin(_19,{sync:dojox.rpc._sync,contentType:_1a,headers:{},target:_19.target||dojox.rpc.getTarget(smd,_11),transport:_11.transport||smd.transport||_19.transport,envelope:_11.envelope||smd.envelope||_19.envelope,timeout:_11.timeout||smd.timeout,callbackParamName:_11.callbackParamName||smd.callbackParamName,schema:_18,handleAs:_19.handleAs||"auto",preventCache:_11.preventCache||smd.preventCache,frameDoc:this._options.frameDoc||undefined});
+},_executeMethod:function(_1b){
+var _1c=[];
+var i;
+for(i=1;i<arguments.length;i++){
+_1c.push(arguments[i]);
+}
+var _1d=this._getRequest(_1b,_1c);
+var _1e=dojox.rpc.transportRegistry.match(_1d.transport).fire(_1d);
+_1e.addBoth(function(_1f){
+return _1d._envDef.deserialize.call(this,_1f);
+});
+return _1e;
+}});
+dojox.rpc.getTarget=function(smd,_20){
+var _21=smd._baseUrl;
+if(smd.target){
+_21=new dojo._Url(_21,smd.target)+"";
+}
+if(_20.target){
+_21=new dojo._Url(_21,_20.target)+"";
+}
+return _21;
+};
+dojox.rpc.toOrdered=function(_22,_23){
+if(dojo.isArray(_23)){
+return _23;
+}
+var _24=[];
+for(var i=0;i<_22.length;i++){
+_24.push(_23[_22[i].name]);
+}
+return _24;
+};
+dojox.rpc.transportRegistry=new dojo.AdapterRegistry(true);
+dojox.rpc.envelopeRegistry=new dojo.AdapterRegistry(true);
+dojox.rpc.envelopeRegistry.register("URL",function(str){
+return str=="URL";
+},{serialize:function(smd,_25,_26){
+var d=dojo.objectToQuery(_26);
+return {data:d,transport:"POST"};
+},deserialize:function(_27){
+return _27;
+},namedParams:true});
+dojox.rpc.envelopeRegistry.register("JSON",function(str){
+return str=="JSON";
+},{serialize:function(smd,_28,_29){
+var d=dojo.toJson(_29);
+return {data:d,handleAs:"json",contentType:"application/json"};
+},deserialize:function(_2a){
+return _2a;
+}});
+dojox.rpc.envelopeRegistry.register("PATH",function(str){
+return str=="PATH";
+},{serialize:function(smd,_2b,_2c){
+var i;
+var _2d=dojox.rpc.getTarget(smd,_2b);
+if(dojo.isArray(_2c)){
+for(i=0;i<_2c.length;i++){
+_2d+="/"+_2c[i];
+}
+}else{
+for(i in _2c){
+_2d+="/"+i+"/"+_2c[i];
+}
+}
+return {data:"",target:_2d};
+},deserialize:function(_2e){
+return _2e;
+}});
+dojox.rpc.transportRegistry.register("POST",function(str){
+return str=="POST";
+},{fire:function(r){
+r.url=r.target;
+r.postData=r.data;
+return dojo.rawXhrPost(r);
+}});
+dojox.rpc.transportRegistry.register("GET",function(str){
+return str=="GET";
+},{fire:function(r){
+r.url=r.target+(r.data?"?"+r.data:"");
+return dojo.xhrGet(r);
+}});
+dojox.rpc.transportRegistry.register("JSONP",function(str){
+return str=="JSONP";
+},{fire:function(r){
+r.url=r.target+((r.target.indexOf("?")==-1)?"?":"&")+r.data;
+r.callbackParamName=r.callbackParamName||"callback";
+return dojo.io.script.get(r);
+}});
+dojox.rpc.Service._nextId=1;
+dojo._contentHandlers.auto=function(xhr){
+var _2f=dojo._contentHandlers;
+var _30=xhr.getResponseHeader("Content-Type");
+var _31=!_30?_2f.text(xhr):_30.match(/\/.*json/)?_2f.json(xhr):_30.match(/\/javascript/)?_2f.javascript(xhr):_30.match(/\/xml/)?_2f.xml(xhr):_2f.text(xhr);
+return _31;
+};
+}
Index: trunk/web/dojo/dojox/rpc/README
===================================================================
--- trunk/web/dojo/dojox/rpc/README	(revision 0)
+++ trunk/web/dojo/dojox/rpc/README	(revision 9)
@@ -0,0 +1,56 @@
+-------------------------------------------------------------------------------
+DojoX RPC
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 07/01/2007
+-------------------------------------------------------------------------------
+Project state:
+yahoo.smd: production (but for old dojo.rpc, not the dojox.service.Rpc)
+Service.js: beta - this will become dojo.rpc.Service eventually and replace
+			the existing rpc system
+JsonRPC.js: beta - plugins for json-rpc for the rpc system
+Rest.js: beta - plugin for REST style services for the rpc system
+JsonRest.js: beta - A module for tracking and persisting changes to JSON objects 
+through REST.
+OfflineRest.js: alpha - A module for storing REST changes locally as write-
+back cache for offline and intermittent connection situations
+ProxiedPath.js: beta - plugin for the PATH envelope to work with a simple PHP proxy
+Client.js: alpha - A module for maintaining per page/tab client sessions and 
+deterministic message sequencing with a server.
+
+SMDLibrary contains smd files representing external services.
+
+-------------------------------------------------------------------------------
+Project authors
+	Dustin Machi
+	Kris Zyp
+	Revin Guillen
+-------------------------------------------------------------------------------
+Project description
+
+Extra utilities for use with dojo.rpc as well as additional smd descriptions
+for specific services.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core (package loader, dojo.rpc).
+-------------------------------------------------------------------------------
+Documentation
+
+See RPC documentation at http://dojotoolkit.org/
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/rpc/*
+
+Install into the following directory structure:
+/dojox/rpc/
+
+...which should be at the same level as your Dojo checkout.
+
+The use of the actual utilities varies, but typically additional software 
+will be included with dojo.require() and smd files for services can be loaded
+manually with an xhr request or can be provided by url to the service when created
+
Index: trunk/web/dojo/dojox/rpc/test.txt
===================================================================
--- trunk/web/dojo/dojox/rpc/test.txt	(revision 0)
+++ trunk/web/dojo/dojox/rpc/test.txt	(revision 9)
@@ -0,0 +1 @@
+this is a test file i'm updating. Again, 11.
Index: trunk/web/dojo/dojox/rpc/JsonRest.js
===================================================================
--- trunk/web/dojo/dojox/rpc/JsonRest.js	(revision 0)
+++ trunk/web/dojo/dojox/rpc/JsonRest.js	(revision 9)
@@ -0,0 +1,342 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.JsonRest"]){
+dojo._hasResource["dojox.rpc.JsonRest"]=true;
+dojo.provide("dojox.rpc.JsonRest");
+dojo.require("dojox.json.ref");
+dojo.require("dojox.rpc.Rest");
+(function(){
+var _1=[];
+var _2=dojox.rpc.Rest;
+var jr;
+function _3(_4,_5,_6,_7){
+var _8=_5.ioArgs&&_5.ioArgs.xhr&&_5.ioArgs.xhr.getResponseHeader("Last-Modified");
+if(_8&&_2._timeStamps){
+_2._timeStamps[_7]=_8;
+}
+var _9=_4._schema&&_4._schema.hrefProperty;
+if(_9){
+dojox.json.ref.refAttribute=_9;
+}
+_6=_6&&dojox.json.ref.resolveJson(_6,{defaultId:_7,index:_2._index,timeStamps:_8&&_2._timeStamps,time:_8,idPrefix:_4.servicePath.replace(/[^\/]*$/,""),idAttribute:jr.getIdAttribute(_4),schemas:jr.schemas,loader:jr._loader,idAsRef:_4.idAsRef,assignAbsoluteIds:true});
+dojox.json.ref.refAttribute="$ref";
+return _6;
+};
+jr=dojox.rpc.JsonRest={serviceClass:dojox.rpc.Rest,conflictDateHeader:"If-Unmodified-Since",commit:function(_a){
+_a=_a||{};
+var _b=[];
+var _c={};
+var _d=[];
+for(var i=0;i<_1.length;i++){
+var _e=_1[i];
+var _f=_e.object;
+var old=_e.old;
+var _10=false;
+if(!(_a.service&&(_f||old)&&(_f||old).__id.indexOf(_a.service.servicePath))&&_e.save){
+delete _f.__isDirty;
+if(_f){
+if(old){
+var _11;
+if((_11=_f.__id.match(/(.*)#.*/))){
+_f=_2._index[_11[1]];
+}
+if(!(_f.__id in _c)){
+_c[_f.__id]=_f;
+if(_a.incrementalUpdates&&!_11){
+var _12=(typeof _a.incrementalUpdates=="function"?_a.incrementalUpdates:function(){
+_12={};
+for(var j in _f){
+if(_f.hasOwnProperty(j)){
+if(_f[j]!==old[j]){
+_12[j]=_f[j];
+}
+}else{
+if(old.hasOwnProperty(j)){
+return null;
+}
+}
+}
+return _12;
+})(_f,old);
+}
+if(_12){
+_b.push({method:"post",target:_f,content:_12});
+}else{
+_b.push({method:"put",target:_f,content:_f});
+}
+}
+}else{
+var _13=jr.getServiceAndId(_f.__id).service;
+var _14=jr.getIdAttribute(_13);
+if((_14 in _f)&&!_a.alwaysPostNewItems){
+_b.push({method:"put",target:_f,content:_f});
+}else{
+_b.push({method:"post",target:{__id:_13.servicePath},content:_f});
+}
+}
+}else{
+if(old){
+_b.push({method:"delete",target:old});
+}
+}
+_d.push(_e);
+_1.splice(i--,1);
+}
+}
+dojo.connect(_a,"onError",function(){
+if(_a.revertOnError!==false){
+var _15=_1;
+_1=_d;
+var _16=0;
+jr.revert();
+_1=_15;
+}else{
+_1=dirtyObject.concat(_d);
+}
+});
+jr.sendToServer(_b,_a);
+return _b;
+},sendToServer:function(_17,_18){
+var _19;
+var _1a=dojo.xhr;
+var _1b=_17.length;
+var i,_1c;
+var _1d;
+var _1e=this.conflictDateHeader;
+dojo.xhr=function(_1f,_20){
+_20.headers=_20.headers||{};
+_20.headers["Transaction"]=_17.length-1==i?"commit":"open";
+if(_1e&&_1d){
+_20.headers[_1e]=_1d;
+}
+if(_1c){
+_20.headers["Content-ID"]="<"+_1c+">";
+}
+return _1a.apply(dojo,arguments);
+};
+for(i=0;i<_17.length;i++){
+var _21=_17[i];
+dojox.rpc.JsonRest._contentId=_21.content&&_21.content.__id;
+var _22=_21.method=="post";
+_1d=_21.method=="put"&&_2._timeStamps[_21.content.__id];
+if(_1d){
+_2._timeStamps[_21.content.__id]=(new Date())+"";
+}
+_1c=_22&&dojox.rpc.JsonRest._contentId;
+var _23=jr.getServiceAndId(_21.target.__id);
+var _24=_23.service;
+var dfd=_21.deferred=_24[_21.method](_23.id.replace(/#/,""),dojox.json.ref.toJson(_21.content,false,_24.servicePath,true));
+(function(_25,dfd,_26){
+dfd.addCallback(function(_27){
+try{
+var _28=dfd.ioArgs.xhr&&dfd.ioArgs.xhr.getResponseHeader("Location");
+if(_28){
+var _29=_28.match(/(^\w+:\/\/)/)&&_28.indexOf(_26.servicePath);
+_28=_29>0?_28.substring(_29):(_26.servicePath+_28).replace(/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/,"$2$3");
+_25.__id=_28;
+_2._index[_28]=_25;
+}
+_27=_3(_26,dfd,_27,_25&&_25.__id);
+}
+catch(e){
+}
+if(!(--_1b)){
+if(_18.onComplete){
+_18.onComplete.call(_18.scope,_17);
+}
+}
+return _27;
+});
+})(_21.content,dfd,_24);
+dfd.addErrback(function(_2a){
+_1b=-1;
+_18.onError.call(_18.scope,_2a);
+});
+}
+dojo.xhr=_1a;
+},getDirtyObjects:function(){
+return _1;
+},revert:function(_2b){
+for(var i=_1.length;i>0;){
+i--;
+var _2c=_1[i];
+var _2d=_2c.object;
+var old=_2c.old;
+var _2e=dojox.data._getStoreForItem(_2d||old);
+if(!(_2b&&(_2d||old)&&(_2d||old).__id.indexOf(_2b.servicePath))){
+if(_2d&&old){
+for(var j in old){
+if(old.hasOwnProperty(j)&&_2d[j]!==old[j]){
+if(_2e){
+_2e.onSet(_2d,j,_2d[j],old[j]);
+}
+_2d[j]=old[j];
+}
+}
+for(j in _2d){
+if(!old.hasOwnProperty(j)){
+if(_2e){
+_2e.onSet(_2d,j,_2d[j]);
+}
+delete _2d[j];
+}
+}
+}else{
+if(!old){
+if(_2e){
+_2e.onDelete(_2d);
+}
+}else{
+if(_2e){
+_2e.onNew(old);
+}
+}
+}
+delete (_2d||old).__isDirty;
+_1.splice(i,1);
+}
+}
+},changing:function(_2f,_30){
+if(!_2f.__id){
+return;
+}
+_2f.__isDirty=true;
+for(var i=0;i<_1.length;i++){
+var _31=_1[i];
+if(_2f==_31.object){
+if(_30){
+_31.object=false;
+if(!this._saveNotNeeded){
+_31.save=true;
+}
+}
+return;
+}
+}
+var old=_2f instanceof Array?[]:{};
+for(i in _2f){
+if(_2f.hasOwnProperty(i)){
+old[i]=_2f[i];
+}
+}
+_1.push({object:!_30&&_2f,old:old,save:!this._saveNotNeeded});
+},deleteObject:function(_32){
+this.changing(_32,true);
+},getConstructor:function(_33,_34){
+if(typeof _33=="string"){
+var _35=_33;
+_33=new dojox.rpc.Rest(_33,true);
+this.registerService(_33,_35,_34);
+}
+if(_33._constructor){
+return _33._constructor;
+}
+_33._constructor=function(_36){
+var _37=this;
+var _38=arguments;
+var _39;
+var _3a;
+function _3b(_3c){
+if(_3c){
+_3b(_3c["extends"]);
+_39=_3c.properties;
+for(var i in _39){
+var _3d=_39[i];
+if(_3d&&(typeof _3d=="object")&&("default" in _3d)){
+_37[i]=_3d["default"];
+}
+}
+}
+if(_3c&&_3c.prototype&&_3c.prototype.initialize){
+_3a=true;
+_3c.prototype.initialize.apply(_37,_38);
+}
+};
+_3b(_33._schema);
+if(!_3a&&_36&&typeof _36=="object"){
+dojo.mixin(_37,_36);
+}
+var _3e=jr.getIdAttribute(_33);
+_2._index[this.__id=this.__clientId=_33.servicePath+(this[_3e]||Math.random().toString(16).substring(2,14)+"@"+((dojox.rpc.Client&&dojox.rpc.Client.clientId)||"client"))]=this;
+if(dojox.json.schema&&_39){
+dojox.json.schema.mustBeValid(dojox.json.schema.validate(this,_33._schema));
+}
+_1.push({object:this,save:true});
+};
+return dojo.mixin(_33._constructor,_33._schema,{load:_33});
+},fetch:function(_3f){
+var _40=jr.getServiceAndId(_3f);
+return this.byId(_40.service,_40.id);
+},getIdAttribute:function(_41){
+var _42=_41._schema;
+var _43;
+if(_42){
+if(!(_43=_42._idAttr)){
+for(var i in _42.properties){
+if(_42.properties[i].identity||(_42.properties[i].link=="self")){
+_42._idAttr=_43=i;
+}
+}
+}
+}
+return _43||"id";
+},getServiceAndId:function(_44){
+var _45="";
+for(var _46 in jr.services){
+if((_44.substring(0,_46.length)==_46)&&(_46.length>=_45.length)){
+_45=_46;
+}
+}
+if(_45){
+return {service:jr.services[_45],id:_44.substring(_45.length)};
+}
+var _47=_44.match(/^(.*\/)([^\/]*)$/);
+return {service:new jr.serviceClass(_47[1],true),id:_47[2]};
+},services:{},schemas:{},registerService:function(_48,_49,_4a){
+_49=_48.servicePath=_49||_48.servicePath;
+_48._schema=jr.schemas[_49]=_4a||_48._schema||{};
+jr.services[_49]=_48;
+},byId:function(_4b,id){
+var _4c,_4d=_2._index[(_4b.servicePath||"")+id];
+if(_4d&&!_4d._loadObject){
+_4c=new dojo.Deferred();
+_4c.callback(_4d);
+return _4c;
+}
+return this.query(_4b,id);
+},query:function(_4e,id,_4f){
+var _50=_4e(id,_4f);
+_50.addCallback(function(_51){
+if(_51.nodeType&&_51.cloneNode){
+return _51;
+}
+return _3(_4e,_50,_51,typeof id!="string"||(_4f&&(_4f.start||_4f.count))?undefined:id);
+});
+return _50;
+},_loader:function(_52){
+var _53=jr.getServiceAndId(this.__id);
+var _54=this;
+jr.query(_53.service,_53.id).addBoth(function(_55){
+if(_55==_54){
+delete _55.$ref;
+delete _55._loadObject;
+}else{
+_54._loadObject=function(_56){
+_56(_55);
+};
+}
+_52(_55);
+});
+},isDirty:function(_57){
+if(!_57){
+return !!_1.length;
+}
+return _57.__isDirty;
+}};
+})();
+}
Index: trunk/web/dojo/dojox/rpc/ProxiedPath.js
===================================================================
--- trunk/web/dojo/dojox/rpc/ProxiedPath.js	(revision 0)
+++ trunk/web/dojo/dojox/rpc/ProxiedPath.js	(revision 9)
@@ -0,0 +1,30 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.rpc.ProxiedPath"]){
+dojo._hasResource["dojox.rpc.ProxiedPath"]=true;
+dojo.provide("dojox.rpc.ProxiedPath");
+dojo.require("dojox.rpc.Service");
+dojox.rpc.envelopeRegistry.register("PROXIED-PATH",function(_1){
+return _1=="PROXIED-PATH";
+},{serialize:function(_2,_3,_4){
+var i;
+var _5=dojox.rpc.getTarget(_2,_3);
+if(dojo.isArray(_4)){
+for(i=0;i<_4.length;i++){
+_5+="/"+(_4[i]==null?"":_4[i]);
+}
+}else{
+for(i in _4){
+_5+="/"+i+"/"+_4[i];
+}
+}
+return {data:"",target:(_3.proxyUrl||_2.proxyUrl)+"?url="+encodeURIComponent(_5)};
+},deserialize:function(_6){
+return _6;
+}});
+}
Index: trunk/web/dojo/dojox/gfx/shape.js
===================================================================
--- trunk/web/dojo/dojox/gfx/shape.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/shape.js	(revision 9)
@@ -0,0 +1,372 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.shape"]){
+dojo._hasResource["dojox.gfx.shape"]=true;
+dojo.provide("dojox.gfx.shape");
+dojo.require("dojox.gfx._base");
+dojo.declare("dojox.gfx.Shape",null,{constructor:function(){
+this.rawNode=null;
+this.shape=null;
+this.matrix=null;
+this.fillStyle=null;
+this.strokeStyle=null;
+this.bbox=null;
+this.parent=null;
+this.parentMatrix=null;
+},getNode:function(){
+return this.rawNode;
+},getShape:function(){
+return this.shape;
+},getTransform:function(){
+return this.matrix;
+},getFill:function(){
+return this.fillStyle;
+},getStroke:function(){
+return this.strokeStyle;
+},getParent:function(){
+return this.parent;
+},getBoundingBox:function(){
+return this.bbox;
+},getTransformedBoundingBox:function(){
+var b=this.getBoundingBox();
+if(!b){
+return null;
+}
+var m=this._getRealMatrix();
+gm=dojox.gfx.matrix;
+return [gm.multiplyPoint(m,b.x,b.y),gm.multiplyPoint(m,b.x+b.width,b.y),gm.multiplyPoint(m,b.x+b.width,b.y+b.height),gm.multiplyPoint(m,b.x,b.y+b.height)];
+},getEventSource:function(){
+return this.rawNode;
+},setShape:function(_1){
+this.shape=dojox.gfx.makeParameters(this.shape,_1);
+this.bbox=null;
+return this;
+},setFill:function(_2){
+if(!_2){
+this.fillStyle=null;
+return this;
+}
+var f=null;
+if(typeof (_2)=="object"&&"type" in _2){
+switch(_2.type){
+case "linear":
+f=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,_2);
+break;
+case "radial":
+f=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_2);
+break;
+case "pattern":
+f=dojox.gfx.makeParameters(dojox.gfx.defaultPattern,_2);
+break;
+}
+}else{
+f=dojox.gfx.normalizeColor(_2);
+}
+this.fillStyle=f;
+return this;
+},setStroke:function(_3){
+if(!_3){
+this.strokeStyle=null;
+return this;
+}
+if(typeof _3=="string"||dojo.isArray(_3)||_3 instanceof dojo.Color){
+_3={color:_3};
+}
+var s=this.strokeStyle=dojox.gfx.makeParameters(dojox.gfx.defaultStroke,_3);
+s.color=dojox.gfx.normalizeColor(s.color);
+return this;
+},setTransform:function(_4){
+this.matrix=dojox.gfx.matrix.clone(_4?dojox.gfx.matrix.normalize(_4):dojox.gfx.matrix.identity);
+return this._applyTransform();
+},_applyTransform:function(){
+return this;
+},moveToFront:function(){
+var p=this.getParent();
+if(p){
+p._moveChildToFront(this);
+this._moveToFront();
+}
+return this;
+},moveToBack:function(){
+var p=this.getParent();
+if(p){
+p._moveChildToBack(this);
+this._moveToBack();
+}
+return this;
+},_moveToFront:function(){
+},_moveToBack:function(){
+},applyRightTransform:function(_5){
+return _5?this.setTransform([this.matrix,_5]):this;
+},applyLeftTransform:function(_6){
+return _6?this.setTransform([_6,this.matrix]):this;
+},applyTransform:function(_7){
+return _7?this.setTransform([this.matrix,_7]):this;
+},removeShape:function(_8){
+if(this.parent){
+this.parent.remove(this,_8);
+}
+return this;
+},_setParent:function(_9,_a){
+this.parent=_9;
+return this._updateParentMatrix(_a);
+},_updateParentMatrix:function(_b){
+this.parentMatrix=_b?dojox.gfx.matrix.clone(_b):null;
+return this._applyTransform();
+},_getRealMatrix:function(){
+var m=this.matrix;
+var p=this.parent;
+while(p){
+if(p.matrix){
+m=dojox.gfx.matrix.multiply(p.matrix,m);
+}
+p=p.parent;
+}
+return m;
+}});
+dojox.gfx.shape._eventsProcessing={connect:function(_c,_d,_e){
+return arguments.length>2?dojo.connect(this.getEventSource(),_c,_d,_e):dojo.connect(this.getEventSource(),_c,_d);
+},disconnect:function(_f){
+dojo.disconnect(_f);
+}};
+dojo.extend(dojox.gfx.Shape,dojox.gfx.shape._eventsProcessing);
+dojox.gfx.shape.Container={_init:function(){
+this.children=[];
+},openBatch:function(){
+},closeBatch:function(){
+},add:function(_10){
+var _11=_10.getParent();
+if(_11){
+_11.remove(_10,true);
+}
+this.children.push(_10);
+return _10._setParent(this,this._getRealMatrix());
+},remove:function(_12,_13){
+for(var i=0;i<this.children.length;++i){
+if(this.children[i]==_12){
+if(_13){
+}else{
+_12.parent=null;
+_12.parentMatrix=null;
+}
+this.children.splice(i,1);
+break;
+}
+}
+return this;
+},clear:function(){
+this.children=[];
+return this;
+},_moveChildToFront:function(_14){
+for(var i=0;i<this.children.length;++i){
+if(this.children[i]==_14){
+this.children.splice(i,1);
+this.children.push(_14);
+break;
+}
+}
+return this;
+},_moveChildToBack:function(_15){
+for(var i=0;i<this.children.length;++i){
+if(this.children[i]==_15){
+this.children.splice(i,1);
+this.children.unshift(_15);
+break;
+}
+}
+return this;
+}};
+dojo.declare("dojox.gfx.shape.Surface",null,{constructor:function(){
+this.rawNode=null;
+this._parent=null;
+this._nodes=[];
+this._events=[];
+},destroy:function(){
+dojo.forEach(this._nodes,dojo.destroy);
+this._nodes=[];
+dojo.forEach(this._events,dojo.disconnect);
+this._events=[];
+this.rawNode=null;
+if(dojo.isIE){
+while(this._parent.lastChild){
+dojo.destroy(this._parent.lastChild);
+}
+}else{
+this._parent.innerHTML="";
+}
+this._parent=null;
+},getEventSource:function(){
+return this.rawNode;
+},_getRealMatrix:function(){
+return null;
+},isLoaded:true,onLoad:function(_16){
+},whenLoaded:function(_17,_18){
+var f=dojo.hitch(_17,_18);
+if(this.isLoaded){
+f(this);
+}else{
+var h=dojo.connect(this,"onLoad",function(_19){
+dojo.disconnect(h);
+f(_19);
+});
+}
+}});
+dojo.extend(dojox.gfx.shape.Surface,dojox.gfx.shape._eventsProcessing);
+dojo.declare("dojox.gfx.Point",null,{});
+dojo.declare("dojox.gfx.Rectangle",null,{});
+dojo.declare("dojox.gfx.shape.Rect",dojox.gfx.Shape,{constructor:function(_1a){
+this.shape=dojox.gfx.getDefault("Rect");
+this.rawNode=_1a;
+},getBoundingBox:function(){
+return this.shape;
+}});
+dojo.declare("dojox.gfx.shape.Ellipse",dojox.gfx.Shape,{constructor:function(_1b){
+this.shape=dojox.gfx.getDefault("Ellipse");
+this.rawNode=_1b;
+},getBoundingBox:function(){
+if(!this.bbox){
+var _1c=this.shape;
+this.bbox={x:_1c.cx-_1c.rx,y:_1c.cy-_1c.ry,width:2*_1c.rx,height:2*_1c.ry};
+}
+return this.bbox;
+}});
+dojo.declare("dojox.gfx.shape.Circle",dojox.gfx.Shape,{constructor:function(_1d){
+this.shape=dojox.gfx.getDefault("Circle");
+this.rawNode=_1d;
+},getBoundingBox:function(){
+if(!this.bbox){
+var _1e=this.shape;
+this.bbox={x:_1e.cx-_1e.r,y:_1e.cy-_1e.r,width:2*_1e.r,height:2*_1e.r};
+}
+return this.bbox;
+}});
+dojo.declare("dojox.gfx.shape.Line",dojox.gfx.Shape,{constructor:function(_1f){
+this.shape=dojox.gfx.getDefault("Line");
+this.rawNode=_1f;
+},getBoundingBox:function(){
+if(!this.bbox){
+var _20=this.shape;
+this.bbox={x:Math.min(_20.x1,_20.x2),y:Math.min(_20.y1,_20.y2),width:Math.abs(_20.x2-_20.x1),height:Math.abs(_20.y2-_20.y1)};
+}
+return this.bbox;
+}});
+dojo.declare("dojox.gfx.shape.Polyline",dojox.gfx.Shape,{constructor:function(_21){
+this.shape=dojox.gfx.getDefault("Polyline");
+this.rawNode=_21;
+},setShape:function(_22,_23){
+if(_22&&_22 instanceof Array){
+dojox.gfx.Shape.prototype.setShape.call(this,{points:_22});
+if(_23&&this.shape.points.length){
+this.shape.points.push(this.shape.points[0]);
+}
+}else{
+dojox.gfx.Shape.prototype.setShape.call(this,_22);
+}
+return this;
+},_normalizePoints:function(){
+var p=this.shape.points,l=p&&p.length;
+if(l&&typeof p[0]=="number"){
+var _24=[];
+for(var i=0;i<l;i+=2){
+_24.push({x:p[i],y:p[i+1]});
+}
+this.shape.points=_24;
+}
+},getBoundingBox:function(){
+if(!this.bbox&&this.shape.points.length){
+var p=this.shape.points;
+var l=p.length;
+var t=p[0];
+var _25={l:t.x,t:t.y,r:t.x,b:t.y};
+for(var i=1;i<l;++i){
+t=p[i];
+if(_25.l>t.x){
+_25.l=t.x;
+}
+if(_25.r<t.x){
+_25.r=t.x;
+}
+if(_25.t>t.y){
+_25.t=t.y;
+}
+if(_25.b<t.y){
+_25.b=t.y;
+}
+}
+this.bbox={x:_25.l,y:_25.t,width:_25.r-_25.l,height:_25.b-_25.t};
+}
+return this.bbox;
+}});
+dojo.declare("dojox.gfx.shape.Image",dojox.gfx.Shape,{constructor:function(_26){
+this.shape=dojox.gfx.getDefault("Image");
+this.rawNode=_26;
+},getBoundingBox:function(){
+return this.shape;
+},setStroke:function(){
+return this;
+},setFill:function(){
+return this;
+}});
+dojo.declare("dojox.gfx.shape.Text",dojox.gfx.Shape,{constructor:function(_27){
+this.fontStyle=null;
+this.shape=dojox.gfx.getDefault("Text");
+this.rawNode=_27;
+},getFont:function(){
+return this.fontStyle;
+},setFont:function(_28){
+this.fontStyle=typeof _28=="string"?dojox.gfx.splitFontString(_28):dojox.gfx.makeParameters(dojox.gfx.defaultFont,_28);
+this._setFont();
+return this;
+}});
+dojox.gfx.shape.Creator={createShape:function(_29){
+var gfx=dojox.gfx;
+switch(_29.type){
+case gfx.defaultPath.type:
+return this.createPath(_29);
+case gfx.defaultRect.type:
+return this.createRect(_29);
+case gfx.defaultCircle.type:
+return this.createCircle(_29);
+case gfx.defaultEllipse.type:
+return this.createEllipse(_29);
+case gfx.defaultLine.type:
+return this.createLine(_29);
+case gfx.defaultPolyline.type:
+return this.createPolyline(_29);
+case gfx.defaultImage.type:
+return this.createImage(_29);
+case gfx.defaultText.type:
+return this.createText(_29);
+case gfx.defaultTextPath.type:
+return this.createTextPath(_29);
+}
+return null;
+},createGroup:function(){
+return this.createObject(dojox.gfx.Group);
+},createRect:function(_2a){
+return this.createObject(dojox.gfx.Rect,_2a);
+},createEllipse:function(_2b){
+return this.createObject(dojox.gfx.Ellipse,_2b);
+},createCircle:function(_2c){
+return this.createObject(dojox.gfx.Circle,_2c);
+},createLine:function(_2d){
+return this.createObject(dojox.gfx.Line,_2d);
+},createPolyline:function(_2e){
+return this.createObject(dojox.gfx.Polyline,_2e);
+},createImage:function(_2f){
+return this.createObject(dojox.gfx.Image,_2f);
+},createText:function(_30){
+return this.createObject(dojox.gfx.Text,_30);
+},createPath:function(_31){
+return this.createObject(dojox.gfx.Path,_31);
+},createTextPath:function(_32){
+return this.createObject(dojox.gfx.TextPath,{}).setText(_32);
+},createObject:function(_33,_34){
+return null;
+}};
+}
Index: trunk/web/dojo/dojox/gfx/utils.js
===================================================================
--- trunk/web/dojo/dojox/gfx/utils.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/utils.js	(revision 9)
@@ -0,0 +1,198 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.utils"]){
+dojo._hasResource["dojox.gfx.utils"]=true;
+dojo.provide("dojox.gfx.utils");
+dojo.require("dojox.gfx");
+(function(){
+var d=dojo,g=dojox.gfx,gu=g.utils;
+dojo.mixin(gu,{forEach:function(_1,f,o){
+o=o||d.global;
+f.call(o,_1);
+if(_1 instanceof g.Surface||_1 instanceof g.Group){
+d.forEach(_1.children,function(_2){
+gu.forEach(_2,f,o);
+});
+}
+},serialize:function(_3){
+var t={},v,_4=_3 instanceof g.Surface;
+if(_4||_3 instanceof g.Group){
+t.children=d.map(_3.children,gu.serialize);
+if(_4){
+return t.children;
+}
+}else{
+t.shape=_3.getShape();
+}
+if(_3.getTransform){
+v=_3.getTransform();
+if(v){
+t.transform=v;
+}
+}
+if(_3.getStroke){
+v=_3.getStroke();
+if(v){
+t.stroke=v;
+}
+}
+if(_3.getFill){
+v=_3.getFill();
+if(v){
+t.fill=v;
+}
+}
+if(_3.getFont){
+v=_3.getFont();
+if(v){
+t.font=v;
+}
+}
+return t;
+},toJson:function(_5,_6){
+return d.toJson(gu.serialize(_5),_6);
+},deserialize:function(_7,_8){
+if(_8 instanceof Array){
+return d.map(_8,d.hitch(null,gu.deserialize,_7));
+}
+var _9=("shape" in _8)?_7.createShape(_8.shape):_7.createGroup();
+if("transform" in _8){
+_9.setTransform(_8.transform);
+}
+if("stroke" in _8){
+_9.setStroke(_8.stroke);
+}
+if("fill" in _8){
+_9.setFill(_8.fill);
+}
+if("font" in _8){
+_9.setFont(_8.font);
+}
+if("children" in _8){
+d.forEach(_8.children,d.hitch(null,gu.deserialize,_9));
+}
+return _9;
+},fromJson:function(_a,_b){
+return gu.deserialize(_a,d.fromJson(_b));
+},toSvg:function(_c){
+var _d=new dojo.Deferred();
+if(dojox.gfx.renderer==="svg"){
+try{
+var _e=gu._cleanSvg(gu._innerXML(_c.rawNode));
+_d.callback(_e);
+}
+catch(e){
+_d.errback(e);
+}
+}else{
+if(!gu._initSvgSerializerDeferred){
+gu._initSvgSerializer();
+}
+var _f=dojox.gfx.utils.toJson(_c);
+var _10=function(){
+try{
+var _11=_c.getDimensions();
+var _12=_11.width;
+var _13=_11.height;
+var _14=gu._gfxSvgProxy.document.createElement("div");
+gu._gfxSvgProxy.document.body.appendChild(_14);
+dojo.withDoc(gu._gfxSvgProxy.document,function(){
+dojo.style(_14,"width",_12);
+dojo.style(_14,"height",_13);
+},this);
+var ts=gu._gfxSvgProxy[dojox._scopeName].gfx.createSurface(_14,_12,_13);
+var _15=function(_16){
+try{
+gu._gfxSvgProxy[dojox._scopeName].gfx.utils.fromJson(_16,_f);
+var svg=gu._cleanSvg(_14.innerHTML);
+_16.clear();
+_16.destroy();
+gu._gfxSvgProxy.document.body.removeChild(_14);
+_d.callback(svg);
+}
+catch(e){
+_d.errback(e);
+}
+};
+ts.whenLoaded(null,_15);
+}
+catch(ex){
+_d.errback(ex);
+}
+};
+if(gu._initSvgSerializerDeferred.fired>0){
+_10();
+}else{
+gu._initSvgSerializerDeferred.addCallback(_10);
+}
+}
+return _d;
+},_gfxSvgProxy:null,_initSvgSerializerDeferred:null,_svgSerializerInitialized:function(){
+gu._initSvgSerializerDeferred.callback(true);
+},_initSvgSerializer:function(){
+if(!gu._initSvgSerializerDeferred){
+gu._initSvgSerializerDeferred=new dojo.Deferred();
+var f=dojo.doc.createElement("iframe");
+dojo.style(f,{display:"none",position:"absolute",width:"1em",height:"1em",top:"-10000px"});
+var _17;
+if(dojo.isIE){
+f.onreadystatechange=function(){
+if(f.contentWindow.document.readyState=="complete"){
+f.onreadystatechange=function(){
+};
+_17=setInterval(function(){
+if(f.contentWindow[dojo._scopeName]&&f.contentWindow[dojox._scopeName].gfx&&f.contentWindow[dojox._scopeName].gfx.utils){
+clearInterval(_17);
+f.contentWindow.parent[dojox._scopeName].gfx.utils._gfxSvgProxy=f.contentWindow;
+f.contentWindow.parent[dojox._scopeName].gfx.utils._svgSerializerInitialized();
+}
+},50);
+}
+};
+}else{
+f.onload=function(){
+f.onload=function(){
+};
+_17=setInterval(function(){
+if(f.contentWindow[dojo._scopeName]&&f.contentWindow[dojox._scopeName].gfx&&f.contentWindow[dojox._scopeName].gfx.utils){
+clearInterval(_17);
+f.contentWindow.parent[dojox._scopeName].gfx.utils._gfxSvgProxy=f.contentWindow;
+f.contentWindow.parent[dojox._scopeName].gfx.utils._svgSerializerInitialized();
+}
+},50);
+};
+}
+var uri=(dojo.config["dojoxGfxSvgProxyFrameUrl"]||dojo.moduleUrl("dojox","gfx/resources/gfxSvgProxyFrame.html"));
+f.setAttribute("src",uri);
+dojo.body().appendChild(f);
+}
+},_innerXML:function(_18){
+if(_18.innerXML){
+return _18.innerXML;
+}else{
+if(_18.xml){
+return _18.xml;
+}else{
+if(typeof XMLSerializer!="undefined"){
+return (new XMLSerializer()).serializeToString(_18);
+}
+}
+}
+return null;
+},_cleanSvg:function(svg){
+if(svg){
+if(svg.indexOf("xmlns=\"http://www.w3.org/2000/svg\"")==-1){
+svg=svg.substring(4,svg.length);
+svg="<svg xmlns=\"http://www.w3.org/2000/svg\""+svg;
+}
+svg=svg.replace(/\bdojoGfx\w*\s*=\s*(['"])\w*\1/g,"");
+}
+return svg;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/gfx/attach.js
===================================================================
--- trunk/web/dojo/dojox/gfx/attach.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/attach.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo.require("dojox.gfx");
+dojo.requireIf(dojox.gfx.renderer=="svg","dojox.gfx.svg_attach");
+dojo.requireIf(dojox.gfx.renderer=="vml","dojox.gfx.vml_attach");
+dojo.requireIf(dojox.gfx.renderer=="silverlight","dojox.gfx.silverlight_attach");
+dojo.requireIf(dojox.gfx.renderer=="canvas","dojox.gfx.canvas_attach");
Index: trunk/web/dojo/dojox/gfx/matrix.js
===================================================================
--- trunk/web/dojo/dojox/gfx/matrix.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/matrix.js	(revision 9)
@@ -0,0 +1,168 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.matrix"]){
+dojo._hasResource["dojox.gfx.matrix"]=true;
+dojo.provide("dojox.gfx.matrix");
+(function(){
+var m=dojox.gfx.matrix;
+var _1={};
+m._degToRad=function(_2){
+return _1[_2]||(_1[_2]=(Math.PI*_2/180));
+};
+m._radToDeg=function(_3){
+return _3/Math.PI*180;
+};
+m.Matrix2D=function(_4){
+if(_4){
+if(typeof _4=="number"){
+this.xx=this.yy=_4;
+}else{
+if(_4 instanceof Array){
+if(_4.length>0){
+var _5=m.normalize(_4[0]);
+for(var i=1;i<_4.length;++i){
+var l=_5,r=dojox.gfx.matrix.normalize(_4[i]);
+_5=new m.Matrix2D();
+_5.xx=l.xx*r.xx+l.xy*r.yx;
+_5.xy=l.xx*r.xy+l.xy*r.yy;
+_5.yx=l.yx*r.xx+l.yy*r.yx;
+_5.yy=l.yx*r.xy+l.yy*r.yy;
+_5.dx=l.xx*r.dx+l.xy*r.dy+l.dx;
+_5.dy=l.yx*r.dx+l.yy*r.dy+l.dy;
+}
+dojo.mixin(this,_5);
+}
+}else{
+dojo.mixin(this,_4);
+}
+}
+}
+};
+dojo.extend(m.Matrix2D,{xx:1,xy:0,yx:0,yy:1,dx:0,dy:0});
+dojo.mixin(m,{identity:new m.Matrix2D(),flipX:new m.Matrix2D({xx:-1}),flipY:new m.Matrix2D({yy:-1}),flipXY:new m.Matrix2D({xx:-1,yy:-1}),translate:function(a,b){
+if(arguments.length>1){
+return new m.Matrix2D({dx:a,dy:b});
+}
+return new m.Matrix2D({dx:a.x,dy:a.y});
+},scale:function(a,b){
+if(arguments.length>1){
+return new m.Matrix2D({xx:a,yy:b});
+}
+if(typeof a=="number"){
+return new m.Matrix2D({xx:a,yy:a});
+}
+return new m.Matrix2D({xx:a.x,yy:a.y});
+},rotate:function(_6){
+var c=Math.cos(_6);
+var s=Math.sin(_6);
+return new m.Matrix2D({xx:c,xy:-s,yx:s,yy:c});
+},rotateg:function(_7){
+return m.rotate(m._degToRad(_7));
+},skewX:function(_8){
+return new m.Matrix2D({xy:Math.tan(_8)});
+},skewXg:function(_9){
+return m.skewX(m._degToRad(_9));
+},skewY:function(_a){
+return new m.Matrix2D({yx:Math.tan(_a)});
+},skewYg:function(_b){
+return m.skewY(m._degToRad(_b));
+},reflect:function(a,b){
+if(arguments.length==1){
+b=a.y;
+a=a.x;
+}
+var a2=a*a,b2=b*b,n2=a2+b2,xy=2*a*b/n2;
+return new m.Matrix2D({xx:2*a2/n2-1,xy:xy,yx:xy,yy:2*b2/n2-1});
+},project:function(a,b){
+if(arguments.length==1){
+b=a.y;
+a=a.x;
+}
+var a2=a*a,b2=b*b,n2=a2+b2,xy=a*b/n2;
+return new m.Matrix2D({xx:a2/n2,xy:xy,yx:xy,yy:b2/n2});
+},normalize:function(_c){
+return (_c instanceof m.Matrix2D)?_c:new m.Matrix2D(_c);
+},clone:function(_d){
+var _e=new m.Matrix2D();
+for(var i in _d){
+if(typeof (_d[i])=="number"&&typeof (_e[i])=="number"&&_e[i]!=_d[i]){
+_e[i]=_d[i];
+}
+}
+return _e;
+},invert:function(_f){
+var M=m.normalize(_f),D=M.xx*M.yy-M.xy*M.yx,M=new m.Matrix2D({xx:M.yy/D,xy:-M.xy/D,yx:-M.yx/D,yy:M.xx/D,dx:(M.xy*M.dy-M.yy*M.dx)/D,dy:(M.yx*M.dx-M.xx*M.dy)/D});
+return M;
+},_multiplyPoint:function(_10,x,y){
+return {x:_10.xx*x+_10.xy*y+_10.dx,y:_10.yx*x+_10.yy*y+_10.dy};
+},multiplyPoint:function(_11,a,b){
+var M=m.normalize(_11);
+if(typeof a=="number"&&typeof b=="number"){
+return m._multiplyPoint(M,a,b);
+}
+return m._multiplyPoint(M,a.x,a.y);
+},multiply:function(_12){
+var M=m.normalize(_12);
+for(var i=1;i<arguments.length;++i){
+var l=M,r=m.normalize(arguments[i]);
+M=new m.Matrix2D();
+M.xx=l.xx*r.xx+l.xy*r.yx;
+M.xy=l.xx*r.xy+l.xy*r.yy;
+M.yx=l.yx*r.xx+l.yy*r.yx;
+M.yy=l.yx*r.xy+l.yy*r.yy;
+M.dx=l.xx*r.dx+l.xy*r.dy+l.dx;
+M.dy=l.yx*r.dx+l.yy*r.dy+l.dy;
+}
+return M;
+},_sandwich:function(_13,x,y){
+return m.multiply(m.translate(x,y),_13,m.translate(-x,-y));
+},scaleAt:function(a,b,c,d){
+switch(arguments.length){
+case 4:
+return m._sandwich(m.scale(a,b),c,d);
+case 3:
+if(typeof c=="number"){
+return m._sandwich(m.scale(a),b,c);
+}
+return m._sandwich(m.scale(a,b),c.x,c.y);
+}
+return m._sandwich(m.scale(a),b.x,b.y);
+},rotateAt:function(_14,a,b){
+if(arguments.length>2){
+return m._sandwich(m.rotate(_14),a,b);
+}
+return m._sandwich(m.rotate(_14),a.x,a.y);
+},rotategAt:function(_15,a,b){
+if(arguments.length>2){
+return m._sandwich(m.rotateg(_15),a,b);
+}
+return m._sandwich(m.rotateg(_15),a.x,a.y);
+},skewXAt:function(_16,a,b){
+if(arguments.length>2){
+return m._sandwich(m.skewX(_16),a,b);
+}
+return m._sandwich(m.skewX(_16),a.x,a.y);
+},skewXgAt:function(_17,a,b){
+if(arguments.length>2){
+return m._sandwich(m.skewXg(_17),a,b);
+}
+return m._sandwich(m.skewXg(_17),a.x,a.y);
+},skewYAt:function(_18,a,b){
+if(arguments.length>2){
+return m._sandwich(m.skewY(_18),a,b);
+}
+return m._sandwich(m.skewY(_18),a.x,a.y);
+},skewYgAt:function(_19,a,b){
+if(arguments.length>2){
+return m._sandwich(m.skewYg(_19),a,b);
+}
+return m._sandwich(m.skewYg(_19),a.x,a.y);
+}});
+})();
+dojox.gfx.Matrix2D=dojox.gfx.matrix.Matrix2D;
+}
Index: trunk/web/dojo/dojox/gfx/arc.js
===================================================================
--- trunk/web/dojo/dojox/gfx/arc.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/arc.js	(revision 9)
@@ -0,0 +1,65 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.arc"]){
+dojo._hasResource["dojox.gfx.arc"]=true;
+dojo.provide("dojox.gfx.arc");
+dojo.require("dojox.gfx.matrix");
+(function(){
+var m=dojox.gfx.matrix,_1=function(_2){
+var _3=Math.cos(_2),_4=Math.sin(_2),p2={x:_3+(4/3)*(1-_3),y:_4-(4/3)*_3*(1-_3)/_4};
+return {s:{x:_3,y:-_4},c1:{x:p2.x,y:-p2.y},c2:p2,e:{x:_3,y:_4}};
+},_5=2*Math.PI,_6=Math.PI/4,_7=Math.PI/8,_8=_6+_7,_9=_1(_7);
+dojo.mixin(dojox.gfx.arc,{unitArcAsBezier:_1,curvePI4:_9,arcAsBezier:function(_a,rx,ry,_b,_c,_d,x,y){
+_c=Boolean(_c);
+_d=Boolean(_d);
+var _e=m._degToRad(_b),_f=rx*rx,ry2=ry*ry,pa=m.multiplyPoint(m.rotate(-_e),{x:(_a.x-x)/2,y:(_a.y-y)/2}),_10=pa.x*pa.x,_11=pa.y*pa.y,c1=Math.sqrt((_f*ry2-_f*_11-ry2*_10)/(_f*_11+ry2*_10));
+if(isNaN(c1)){
+c1=0;
+}
+var ca={x:c1*rx*pa.y/ry,y:-c1*ry*pa.x/rx};
+if(_c==_d){
+ca={x:-ca.x,y:-ca.y};
+}
+var c=m.multiplyPoint([m.translate((_a.x+x)/2,(_a.y+y)/2),m.rotate(_e)],ca);
+var _12=m.normalize([m.translate(c.x,c.y),m.rotate(_e),m.scale(rx,ry)]);
+var _13=m.invert(_12),sp=m.multiplyPoint(_13,_a),ep=m.multiplyPoint(_13,x,y),_14=Math.atan2(sp.y,sp.x),_15=Math.atan2(ep.y,ep.x),_16=_14-_15;
+if(_d){
+_16=-_16;
+}
+if(_16<0){
+_16+=_5;
+}else{
+if(_16>_5){
+_16-=_5;
+}
+}
+var _17=_7,_18=_9,_19=_d?_17:-_17,_1a=[];
+for(var _1b=_16;_1b>0;_1b-=_6){
+if(_1b<_8){
+_17=_1b/2;
+_18=_1(_17);
+_19=_d?_17:-_17;
+_1b=0;
+}
+var c1,c2,e,M=m.normalize([_12,m.rotate(_14+_19)]);
+if(_d){
+c1=m.multiplyPoint(M,_18.c1);
+c2=m.multiplyPoint(M,_18.c2);
+e=m.multiplyPoint(M,_18.e);
+}else{
+c1=m.multiplyPoint(M,_18.c2);
+c2=m.multiplyPoint(M,_18.c1);
+e=m.multiplyPoint(M,_18.s);
+}
+_1a.push([c1.x,c1.y,c2.x,c2.y,e.x,e.y]);
+_14+=2*_19;
+}
+return _1a;
+}});
+})();
+}
Index: trunk/web/dojo/dojox/gfx/move.js
===================================================================
--- trunk/web/dojo/dojox/gfx/move.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/move.js	(revision 9)
@@ -0,0 +1,13 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.move"]){
+dojo._hasResource["dojox.gfx.move"]=true;
+dojo.provide("dojox.gfx.move");
+dojo.require("dojox.gfx.Mover");
+dojo.require("dojox.gfx.Moveable");
+}
Index: trunk/web/dojo/dojox/gfx/VectorText.js
===================================================================
--- trunk/web/dojo/dojox/gfx/VectorText.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/VectorText.js	(revision 9)
@@ -0,0 +1,366 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.VectorText"]){
+dojo._hasResource["dojox.gfx.VectorText"]=true;
+dojo.provide("dojox.gfx.VectorText");
+dojo.require("dojox.gfx");
+dojo.require("dojox.xml.DomParser");
+dojo.require("dojox.html.metrics");
+(function(){
+dojo.mixin(dojox.gfx,{vectorFontFitting:{NONE:0,FLOW:1,FIT:2},defaultVectorText:{type:"vectortext",x:0,y:0,width:null,height:null,text:"",align:"start",decoration:"none",fitting:0,leading:1.5},defaultVectorFont:{type:"vectorfont",size:"10pt",family:null},_vectorFontCache:{},_svgFontCache:{},getVectorFont:function(_1){
+if(dojox.gfx._vectorFontCache[_1]){
+return dojox.gfx._vectorFontCache[_1];
+}
+return new dojox.gfx.VectorFont(_1);
+}});
+dojo.declare("dojox.gfx.VectorFont",null,{_entityRe:/&(quot|apos|lt|gt|amp|#x[^;]+|#\d+);/g,_decodeEntitySequence:function(_2){
+if(!_2.match(this._entityRe)){
+return;
+}
+var _3={amp:"&",apos:"'",quot:"\"",lt:"<",gt:">"};
+var r,_4="";
+while((r=this._entityRe.exec(_2))!==null){
+if(r[1].charAt(1)=="x"){
+_4+=String.fromCharCode(parseInt(r[1].slice(2),16));
+}else{
+if(!isNaN(parseInt(r[1].slice(1),10))){
+_4+=String.fromCharCode(parseInt(r[1].slice(1),10));
+}else{
+_4+=_3[r[1]]||"";
+}
+}
+}
+return _4;
+},_parse:function(_5,_6){
+var _7=dojox.gfx._svgFontCache[_6]||dojox.xml.DomParser.parse(_5);
+var f=_7.documentElement.byName("font")[0],_8=_7.documentElement.byName("font-face")[0];
+var _9=parseFloat(_8.getAttribute("units-per-em")||1000,10);
+var _a={x:parseFloat(f.getAttribute("horiz-adv-x"),10),y:parseFloat(f.getAttribute("vert-adv-y")||0,10)};
+if(!_a.y){
+_a.y=_9;
+}
+var _b={horiz:{x:parseFloat(f.getAttribute("horiz-origin-x")||0,10),y:parseFloat(f.getAttribute("horiz-origin-y")||0,10)},vert:{x:parseFloat(f.getAttribute("vert-origin-x")||0,10),y:parseFloat(f.getAttribute("vert-origin-y")||0,10)}};
+var _c=_8.getAttribute("font-family"),_d=_8.getAttribute("font-style")||"all",_e=_8.getAttribute("font-variant")||"normal",_f=_8.getAttribute("font-weight")||"all",_10=_8.getAttribute("font-stretch")||"normal",_11=_8.getAttribute("unicode-range")||"U+0-10FFFF",_12=_8.getAttribute("panose-1")||"0 0 0 0 0 0 0 0 0 0",_13=_8.getAttribute("cap-height"),_14=parseFloat(_8.getAttribute("ascent")||(_9-_b.vert.y),10),_15=parseFloat(_8.getAttribute("descent")||_b.vert.y,10),_16={};
+var _17=_c;
+if(_8.byName("font-face-name")[0]){
+_17=_8.byName("font-face-name")[0].getAttribute("name");
+}
+if(dojox.gfx._vectorFontCache[_17]){
+return;
+}
+dojo.forEach(["alphabetic","ideographic","mathematical","hanging"],function(_18){
+var a=_8.getAttribute(_18);
+if(a!==null){
+_16[_18]=parseFloat(a,10);
+}
+});
+var _19=parseFloat(_7.documentElement.byName("missing-glyph")[0].getAttribute("horiz-adv-x")||_a.x,10);
+var _1a={},_1b={},g=_7.documentElement.byName("glyph");
+dojo.forEach(g,function(_1c){
+var _1d=_1c.getAttribute("unicode"),_17=_1c.getAttribute("glyph-name"),_1e=parseFloat(_1c.getAttribute("horiz-adv-x")||_a.x,10),_1f=_1c.getAttribute("d");
+if(_1d.match(this._entityRe)){
+_1d=this._decodeEntitySequence(_1d);
+}
+var o={code:_1d,name:_17,xAdvance:_1e,path:_1f};
+_1a[_1d]=o;
+_1b[_17]=o;
+},this);
+var _20=_7.documentElement.byName("hkern");
+dojo.forEach(_20,function(_21,i){
+var k=-parseInt(_21.getAttribute("k"),10);
+var u1=_21.getAttribute("u1"),g1=_21.getAttribute("g1"),u2=_21.getAttribute("u2"),g2=_21.getAttribute("g2"),gl;
+if(u1){
+u1=this._decodeEntitySequence(u1);
+if(_1a[u1]){
+gl=_1a[u1];
+}
+}else{
+if(_1b[g1]){
+gl=_1b[g1];
+}
+}
+if(gl){
+if(!gl.kern){
+gl.kern={};
+}
+if(u2){
+u2=this._decodeEntitySequence(u2);
+gl.kern[u2]={x:k};
+}else{
+if(_1b[g2]){
+gl.kern[_1b[g2].code]={x:k};
+}
+}
+}
+},this);
+dojo.mixin(this,{family:_c,name:_17,style:_d,variant:_e,weight:_f,stretch:_10,range:_11,viewbox:{width:_9,height:_9},origin:_b,advance:dojo.mixin(_a,{missing:{x:_19,y:_19}}),ascent:_14,descent:_15,baseline:_16,glyphs:_1a});
+dojox.gfx._vectorFontCache[_17]=this;
+dojox.gfx._vectorFontCache[_6]=this;
+if(_17!=_c&&!dojox.gfx._vectorFontCache[_c]){
+dojox.gfx._vectorFontCache[_c]=this;
+}
+if(!dojox.gfx._svgFontCache[_6]){
+dojox.gfx._svgFontCache[_6]=_7;
+}
+},_clean:function(){
+var _22=this.name,_23=this.family;
+dojo.forEach(["family","name","style","variant","weight","stretch","range","viewbox","origin","advance","ascent","descent","baseline","glyphs"],function(_24){
+try{
+delete this[_24];
+}
+catch(e){
+}
+},this);
+if(dojox.gfx._vectorFontCache[_22]){
+delete dojox.gfx._vectorFontCache[_22];
+}
+if(dojox.gfx._vectorFontCache[_23]){
+delete dojox.gfx._vectorFontCache[_23];
+}
+return this;
+},constructor:function(url){
+this._defaultLeading=1.5;
+if(url!==undefined){
+this.load(url);
+}
+},load:function(url){
+this.onLoadBegin(url.toString());
+this._parse(dojox.gfx._svgFontCache[url.toString()]||dojo._getText(url.toString()),url.toString());
+this.onLoad(this);
+return this;
+},initialized:function(){
+return (this.glyphs!==null);
+},_round:function(n){
+return Math.round(1000*n)/1000;
+},_leading:function(_25){
+return this.viewbox.height*(_25||this._defaultLeading);
+},_normalize:function(str){
+return str.replace(/\s+/g,String.fromCharCode(32));
+},_getWidth:function(_26){
+var w=0,_27=0,_28=null;
+dojo.forEach(_26,function(_29,i){
+_27=_29.xAdvance;
+if(_26[i]&&_29.kern&&_29.kern[_26[i].code]){
+_27+=_29.kern[_26[i].code].x;
+}
+w+=_27;
+_28=_29;
+});
+if(_28&&_28.code==" "){
+w-=_28.xAdvance;
+}
+return this._round(w);
+},_getLongestLine:function(_2a){
+var _2b=0,idx=0;
+dojo.forEach(_2a,function(_2c,i){
+var max=Math.max(_2b,this._getWidth(_2c));
+if(max>_2b){
+_2b=max;
+idx=i;
+}
+},this);
+return {width:_2b,index:idx,line:_2a[idx]};
+},_trim:function(_2d){
+var fn=function(arr){
+if(!arr.length){
+return;
+}
+if(arr[arr.length-1].code==" "){
+arr.splice(arr.length-1,1);
+}
+if(!arr.length){
+return;
+}
+if(arr[0].code==" "){
+arr.splice(0,1);
+}
+};
+if(dojo.isArray(_2d[0])){
+dojo.forEach(_2d,fn);
+}else{
+fn(_2d);
+}
+return _2d;
+},_split:function(_2e,_2f){
+var w=this._getWidth(_2e),_30=Math.floor(w/_2f),_31=[],cw=0,c=[],_32=false;
+for(var i=0,l=_2e.length;i<l;i++){
+if(_2e[i].code==" "){
+_32=true;
+}
+cw+=_2e[i].xAdvance;
+if(i+1<l&&_2e[i].kern&&_2e[i].kern[_2e[i+1].code]){
+cw+=_2e[i].kern[_2e[i+1].code].x;
+}
+if(cw>=_30){
+var chr=_2e[i];
+while(_32&&chr.code!=" "&&i>=0){
+chr=c.pop();
+i--;
+}
+_31.push(c);
+c=[];
+cw=0;
+_32=false;
+}
+c.push(_2e[i]);
+}
+if(c.length){
+_31.push(c);
+}
+return this._trim(_31);
+},_getSizeFactor:function(_33){
+_33+="";
+var _34=dojox.html.metrics.getCachedFontMeasurements(),_35=this.viewbox.height,f=_34["1em"],_36=parseFloat(_33,10);
+if(_33.indexOf("em")>-1){
+return this._round((_34["1em"]*_36)/_35);
+}else{
+if(_33.indexOf("ex")>-1){
+return this._round((_34["1ex"]*_36)/_35);
+}else{
+if(_33.indexOf("pt")>-1){
+return this._round(((_34["12pt"]/12)*_36)/_35);
+}else{
+if(_33.indexOf("px")>-1){
+return this._round(((_34["16px"]/16)*_36)/_35);
+}else{
+if(_33.indexOf("%")>-1){
+return this._round((_34["1em"]*(_36/100))/_35);
+}else{
+f=_34[_33]||_34.medium;
+return this._round(f/_35);
+}
+}
+}
+}
+}
+},_getFitFactor:function(_37,w,h,l){
+if(!h){
+return this._round(w/this._getWidth(_37));
+}else{
+var _38=this._getLongestLine(_37).width,_39=(_37.length*(this.viewbox.height*l))-((this.viewbox.height*l)-this.viewbox.height);
+return this._round(Math.min(w/_38,h/_39));
+}
+},_getBestFit:function(_3a,w,h,_3b){
+var _3c=32,_3d=0,_3e=_3c;
+while(_3c>0){
+var f=this._getFitFactor(this._split(_3a,_3c),w,h,_3b);
+if(f>_3d){
+_3d=f;
+_3e=_3c;
+}
+_3c--;
+}
+return {scale:_3d,lines:this._split(_3a,_3e)};
+},_getBestFlow:function(_3f,w,_40){
+var _41=[],cw=0,c=[],_42=false;
+for(var i=0,l=_3f.length;i<l;i++){
+if(_3f[i].code==" "){
+_42=true;
+}
+var tw=_3f[i].xAdvance;
+if(i+1<l&&_3f[i].kern&&_3f[i].kern[_3f[i+1].code]){
+tw+=_3f[i].kern[_3f[i+1].code].x;
+}
+cw+=_40*tw;
+if(cw>=w){
+var chr=_3f[i];
+while(_42&&chr.code!=" "&&i>=0){
+chr=c.pop();
+i--;
+}
+_41.push(c);
+c=[];
+cw=0;
+_42=false;
+}
+c.push(_3f[i]);
+}
+if(c.length){
+_41.push(c);
+}
+return this._trim(_41);
+},getWidth:function(_43,_44){
+return this._getWidth(dojo.map(this._normalize(_43).split(""),function(chr){
+return this.glyphs[chr]||{xAdvance:this.advance.missing.x};
+},this))*(_44||1);
+},getLineHeight:function(_45){
+return this.viewbox.height*(_45||1);
+},getCenterline:function(_46){
+return (_46||1)*(this.viewbox.height/2);
+},getBaseline:function(_47){
+return (_47||1)*(this.viewbox.height+this.descent);
+},draw:function(_48,_49,_4a,_4b,_4c){
+if(!this.initialized()){
+throw new Error("dojox.gfx.VectorFont.draw(): we have not been initialized yet.");
+}
+var g=_48.createGroup();
+if(_49.x||_49.y){
+_48.applyTransform({dx:_49.x||0,dy:_49.y||0});
+}
+var _4d=dojo.map(this._normalize(_49.text).split(""),function(chr){
+return this.glyphs[chr]||{path:null,xAdvance:this.advance.missing.x};
+},this);
+var _4e=_4a.size,_4f=_49.fitting,_50=_49.width,_51=_49.height,_52=_49.align,_53=_49.leading||this._defaultLeading;
+if(_4f){
+if((_4f==dojox.gfx.vectorFontFitting.FLOW&&!_50)||(_4f==dojox.gfx.vectorFontFitting.FIT&&(!_50||!_51))){
+_4f=dojox.gfx.vectorFontFitting.NONE;
+}
+}
+var _54,_55;
+switch(_4f){
+case dojox.gfx.vectorFontFitting.FIT:
+var o=this._getBestFit(_4d,_50,_51,_53);
+_55=o.scale;
+_54=o.lines;
+break;
+case dojox.gfx.vectorFontFitting.FLOW:
+_55=this._getSizeFactor(_4e);
+_54=this._getBestFlow(_4d,_50,_55);
+break;
+default:
+_55=this._getSizeFactor(_4e);
+_54=[_4d];
+}
+_54=dojo.filter(_54,function(_56){
+return _56.length>0;
+});
+var cy=0,_57=this._getLongestLine(_54).width;
+for(var i=0,l=_54.length;i<l;i++){
+var cx=0,_58=_54[i],_59=this._getWidth(_58),lg=g.createGroup();
+for(var j=0;j<_58.length;j++){
+var _5a=_58[j];
+if(_5a.path!==null){
+var p=lg.createPath(_5a.path).setFill(_4b);
+if(_4c){
+p.setStroke(_4c);
+}
+p.setTransform([dojox.gfx.matrix.flipY,dojox.gfx.matrix.translate(cx,-this.viewbox.height-this.descent)]);
+}
+cx+=_5a.xAdvance;
+if(j+1<_58.length&&_5a.kern&&_5a.kern[_58[j+1].code]){
+cx+=_5a.kern[_58[j+1].code].x;
+}
+}
+var dx=0;
+if(_52=="middle"){
+dx=_57/2-_59/2;
+}else{
+if(_52=="end"){
+dx=_57-_59;
+}
+}
+lg.setTransform({dx:dx,dy:cy});
+cy+=this.viewbox.height*_53;
+}
+g.setTransform(dojox.gfx.matrix.scale(_55));
+return g;
+},onLoadBegin:function(url){
+},onLoad:function(_5b){
+}});
+})();
+}
Index: trunk/web/dojo/dojox/gfx/_base.js
===================================================================
--- trunk/web/dojo/dojox/gfx/_base.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/_base.js	(revision 9)
@@ -0,0 +1,219 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx._base"]){
+dojo._hasResource["dojox.gfx._base"]=true;
+dojo.provide("dojox.gfx._base");
+(function(){
+var g=dojox.gfx,b=g._base;
+g._hasClass=function(_1,_2){
+var _3=_1.getAttribute("className");
+return _3&&(" "+_3+" ").indexOf(" "+_2+" ")>=0;
+};
+g._addClass=function(_4,_5){
+var _6=_4.getAttribute("className")||"";
+if(!_6||(" "+_6+" ").indexOf(" "+_5+" ")<0){
+_4.setAttribute("className",_6+(_6?" ":"")+_5);
+}
+};
+g._removeClass=function(_7,_8){
+var _9=_7.getAttribute("className");
+if(_9){
+_7.setAttribute("className",_9.replace(new RegExp("(^|\\s+)"+_8+"(\\s+|$)"),"$1$2"));
+}
+};
+b._getFontMeasurements=function(){
+var _a={"1em":0,"1ex":0,"100%":0,"12pt":0,"16px":0,"xx-small":0,"x-small":0,"small":0,"medium":0,"large":0,"x-large":0,"xx-large":0};
+if(dojo.isIE){
+dojo.doc.documentElement.style.fontSize="100%";
+}
+var _b=dojo.doc.createElement("div");
+var s=_b.style;
+s.position="absolute";
+s.left="-100px";
+s.top="0px";
+s.width="30px";
+s.height="1000em";
+s.borderWidth="0px";
+s.margin="0px";
+s.padding="0px";
+s.outline="none";
+s.lineHeight="1";
+s.overflow="hidden";
+dojo.body().appendChild(_b);
+for(var p in _a){
+_b.style.fontSize=p;
+_a[p]=Math.round(_b.offsetHeight*12/16)*16/12/1000;
+}
+dojo.body().removeChild(_b);
+_b=null;
+return _a;
+};
+var _c=null;
+b._getCachedFontMeasurements=function(_d){
+if(_d||!_c){
+_c=b._getFontMeasurements();
+}
+return _c;
+};
+var _e=null,_f={};
+b._getTextBox=function(_10,_11,_12){
+var m,s,al=arguments.length;
+if(!_e){
+m=_e=dojo.doc.createElement("div");
+s=m.style;
+s.position="absolute";
+s.left="-10000px";
+s.top="0";
+dojo.body().appendChild(m);
+}else{
+m=_e;
+s=m.style;
+}
+m.className="";
+s.borderWidth="0";
+s.margin="0";
+s.padding="0";
+s.outline="0";
+if(al>1&&_11){
+for(var i in _11){
+if(i in _f){
+continue;
+}
+s[i]=_11[i];
+}
+}
+if(al>2&&_12){
+m.className=_12;
+}
+m.innerHTML=_10;
+if(m["getBoundingClientRect"]){
+var bcr=m.getBoundingClientRect();
+return {l:bcr.left,t:bcr.top,w:bcr.width||(bcr.right-bcr.left),h:bcr.height||(bcr.bottom-bcr.top)};
+}else{
+return dojo.marginBox(m);
+}
+};
+var _13=0;
+b._getUniqueId=function(){
+var id;
+do{
+id=dojo._scopeName+"Unique"+(++_13);
+}while(dojo.byId(id));
+return id;
+};
+})();
+dojo.mixin(dojox.gfx,{defaultPath:{type:"path",path:""},defaultPolyline:{type:"polyline",points:[]},defaultRect:{type:"rect",x:0,y:0,width:100,height:100,r:0},defaultEllipse:{type:"ellipse",cx:0,cy:0,rx:200,ry:100},defaultCircle:{type:"circle",cx:0,cy:0,r:100},defaultLine:{type:"line",x1:0,y1:0,x2:100,y2:100},defaultImage:{type:"image",x:0,y:0,width:0,height:0,src:""},defaultText:{type:"text",x:0,y:0,text:"",align:"start",decoration:"none",rotated:false,kerning:true},defaultTextPath:{type:"textpath",text:"",align:"start",decoration:"none",rotated:false,kerning:true},defaultStroke:{type:"stroke",color:"black",style:"solid",width:1,cap:"butt",join:4},defaultLinearGradient:{type:"linear",x1:0,y1:0,x2:100,y2:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultRadialGradient:{type:"radial",cx:0,cy:0,r:100,colors:[{offset:0,color:"black"},{offset:1,color:"white"}]},defaultPattern:{type:"pattern",x:0,y:0,width:0,height:0,src:""},defaultFont:{type:"font",style:"normal",variant:"normal",weight:"normal",size:"10pt",family:"serif"},getDefault:(function(){
+var _14={};
+return function(_15){
+var t=_14[_15];
+if(t){
+return new t();
+}
+t=_14[_15]=new Function;
+t.prototype=dojox.gfx["default"+_15];
+return new t();
+};
+})(),normalizeColor:function(_16){
+return (_16 instanceof dojo.Color)?_16:new dojo.Color(_16);
+},normalizeParameters:function(_17,_18){
+if(_18){
+var _19={};
+for(var x in _17){
+if(x in _18&&!(x in _19)){
+_17[x]=_18[x];
+}
+}
+}
+return _17;
+},makeParameters:function(_1a,_1b){
+if(!_1b){
+return dojo.delegate(_1a);
+}
+var _1c={};
+for(var i in _1a){
+if(!(i in _1c)){
+_1c[i]=dojo.clone((i in _1b)?_1b[i]:_1a[i]);
+}
+}
+return _1c;
+},formatNumber:function(x,_1d){
+var val=x.toString();
+if(val.indexOf("e")>=0){
+val=x.toFixed(4);
+}else{
+var _1e=val.indexOf(".");
+if(_1e>=0&&val.length-_1e>5){
+val=x.toFixed(4);
+}
+}
+if(x<0){
+return val;
+}
+return _1d?" "+val:val;
+},makeFontString:function(_1f){
+return _1f.style+" "+_1f.variant+" "+_1f.weight+" "+_1f.size+" "+_1f.family;
+},splitFontString:function(str){
+var _20=dojox.gfx.getDefault("Font");
+var t=str.split(/\s+/);
+do{
+if(t.length<5){
+break;
+}
+_20.style=t[0];
+_20.variant=t[1];
+_20.weight=t[2];
+var i=t[3].indexOf("/");
+_20.size=i<0?t[3]:t[3].substring(0,i);
+var j=4;
+if(i<0){
+if(t[4]=="/"){
+j=6;
+}else{
+if(t[4].charAt(0)=="/"){
+j=5;
+}
+}
+}
+if(j<t.length){
+_20.family=t.slice(j).join(" ");
+}
+}while(false);
+return _20;
+},cm_in_pt:72/2.54,mm_in_pt:7.2/2.54,px_in_pt:function(){
+return dojox.gfx._base._getCachedFontMeasurements()["12pt"]/12;
+},pt2px:function(len){
+return len*dojox.gfx.px_in_pt();
+},px2pt:function(len){
+return len/dojox.gfx.px_in_pt();
+},normalizedLength:function(len){
+if(len.length==0){
+return 0;
+}
+if(len.length>2){
+var _21=dojox.gfx.px_in_pt();
+var val=parseFloat(len);
+switch(len.slice(-2)){
+case "px":
+return val;
+case "pt":
+return val*_21;
+case "in":
+return val*72*_21;
+case "pc":
+return val*12*_21;
+case "mm":
+return val*dojox.gfx.mm_in_pt*_21;
+case "cm":
+return val*dojox.gfx.cm_in_pt*_21;
+}
+}
+return parseFloat(len);
+},pathVmlRegExp:/([A-Za-z]+)|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,pathSvgRegExp:/([A-Za-z])|(\d+(\.\d+)?)|(\.\d+)|(-\d+(\.\d+)?)|(-\.\d+)/g,equalSources:function(a,b){
+return a&&b&&a==b;
+}});
+}
Index: trunk/web/dojo/dojox/gfx/canvas.js
===================================================================
--- trunk/web/dojo/dojox/gfx/canvas.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/canvas.js	(revision 9)
@@ -0,0 +1,503 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.canvas"]){
+dojo._hasResource["dojox.gfx.canvas"]=true;
+dojo.provide("dojox.gfx.canvas");
+dojo.require("dojox.gfx._base");
+dojo.require("dojox.gfx.shape");
+dojo.require("dojox.gfx.path");
+dojo.require("dojox.gfx.arc");
+dojo.require("dojox.gfx.decompose");
+dojo.experimental("dojox.gfx.canvas");
+(function(){
+var d=dojo,g=dojox.gfx,gs=g.shape,ga=g.arc,m=g.matrix,mp=m.multiplyPoint,pi=Math.PI,_1=2*pi,_2=pi/2;
+d.extend(g.Shape,{_render:function(_3){
+_3.save();
+this._renderTransform(_3);
+this._renderShape(_3);
+this._renderFill(_3,true);
+this._renderStroke(_3,true);
+_3.restore();
+},_renderTransform:function(_4){
+if("canvasTransform" in this){
+var t=this.canvasTransform;
+_4.translate(t.dx,t.dy);
+_4.rotate(t.angle2);
+_4.scale(t.sx,t.sy);
+_4.rotate(t.angle1);
+}
+},_renderShape:function(_5){
+},_renderFill:function(_6,_7){
+if("canvasFill" in this){
+if("canvasFillImage" in this){
+this.canvasFill=_6.createPattern(this.canvasFillImage,"repeat");
+delete this.canvasFillImage;
+}
+_6.fillStyle=this.canvasFill;
+if(_7){
+_6.fill();
+}
+}else{
+_6.fillStyle="rgba(0,0,0,0.0)";
+}
+},_renderStroke:function(_8,_9){
+var s=this.strokeStyle;
+if(s){
+_8.strokeStyle=s.color.toString();
+_8.lineWidth=s.width;
+_8.lineCap=s.cap;
+if(typeof s.join=="number"){
+_8.lineJoin="miter";
+_8.miterLimit=s.join;
+}else{
+_8.lineJoin=s.join;
+}
+if(_9){
+_8.stroke();
+}
+}else{
+if(!_9){
+_8.strokeStyle="rgba(0,0,0,0.0)";
+}
+}
+},getEventSource:function(){
+return null;
+},connect:function(){
+},disconnect:function(){
+}});
+var _a=function(_b,_c,_d){
+var _e=_b.prototype[_c];
+_b.prototype[_c]=_d?function(){
+this.surface.makeDirty();
+_e.apply(this,arguments);
+_d.call(this);
+return this;
+}:function(){
+this.surface.makeDirty();
+return _e.apply(this,arguments);
+};
+};
+_a(g.Shape,"setTransform",function(){
+if(this.matrix){
+this.canvasTransform=g.decompose(this.matrix);
+}else{
+delete this.canvasTransform;
+}
+});
+_a(g.Shape,"setFill",function(){
+var fs=this.fillStyle,f;
+if(fs){
+if(typeof (fs)=="object"&&"type" in fs){
+var _f=this.surface.rawNode.getContext("2d");
+switch(fs.type){
+case "linear":
+case "radial":
+f=fs.type=="linear"?_f.createLinearGradient(fs.x1,fs.y1,fs.x2,fs.y2):_f.createRadialGradient(fs.cx,fs.cy,0,fs.cx,fs.cy,fs.r);
+d.forEach(fs.colors,function(_10){
+f.addColorStop(_10.offset,g.normalizeColor(_10.color).toString());
+});
+break;
+case "pattern":
+var img=new Image(fs.width,fs.height);
+this.surface.downloadImage(img,fs.src);
+this.canvasFillImage=img;
+}
+}else{
+f=fs.toString();
+}
+this.canvasFill=f;
+}else{
+delete this.canvasFill;
+}
+});
+_a(g.Shape,"setStroke");
+_a(g.Shape,"setShape");
+dojo.declare("dojox.gfx.Group",g.Shape,{constructor:function(){
+gs.Container._init.call(this);
+},_render:function(ctx){
+ctx.save();
+this._renderTransform(ctx);
+this._renderFill(ctx);
+this._renderStroke(ctx);
+for(var i=0;i<this.children.length;++i){
+this.children[i]._render(ctx);
+}
+ctx.restore();
+}});
+dojo.declare("dojox.gfx.Rect",gs.Rect,{_renderShape:function(ctx){
+var s=this.shape,r=Math.min(s.r,s.height/2,s.width/2),xl=s.x,xr=xl+s.width,yt=s.y,yb=yt+s.height,xl2=xl+r,xr2=xr-r,yt2=yt+r,yb2=yb-r;
+ctx.beginPath();
+ctx.moveTo(xl2,yt);
+if(r){
+ctx.arc(xr2,yt2,r,-_2,0,false);
+ctx.arc(xr2,yb2,r,0,_2,false);
+ctx.arc(xl2,yb2,r,_2,pi,false);
+ctx.arc(xl2,yt2,r,pi,pi+_2,false);
+}else{
+ctx.lineTo(xr2,yt);
+ctx.lineTo(xr,yb2);
+ctx.lineTo(xl2,yb);
+ctx.lineTo(xl,yt2);
+}
+ctx.closePath();
+}});
+var _11=[];
+(function(){
+var u=ga.curvePI4;
+_11.push(u.s,u.c1,u.c2,u.e);
+for(var a=45;a<360;a+=45){
+var r=m.rotateg(a);
+_11.push(mp(r,u.c1),mp(r,u.c2),mp(r,u.e));
+}
+})();
+dojo.declare("dojox.gfx.Ellipse",gs.Ellipse,{setShape:function(){
+g.Ellipse.superclass.setShape.apply(this,arguments);
+var s=this.shape,t,c1,c2,r=[],M=m.normalize([m.translate(s.cx,s.cy),m.scale(s.rx,s.ry)]);
+t=mp(M,_11[0]);
+r.push([t.x,t.y]);
+for(var i=1;i<_11.length;i+=3){
+c1=mp(M,_11[i]);
+c2=mp(M,_11[i+1]);
+t=mp(M,_11[i+2]);
+r.push([c1.x,c1.y,c2.x,c2.y,t.x,t.y]);
+}
+this.canvasEllipse=r;
+return this;
+},_renderShape:function(ctx){
+var r=this.canvasEllipse;
+ctx.beginPath();
+ctx.moveTo.apply(ctx,r[0]);
+for(var i=1;i<r.length;++i){
+ctx.bezierCurveTo.apply(ctx,r[i]);
+}
+ctx.closePath();
+}});
+dojo.declare("dojox.gfx.Circle",gs.Circle,{_renderShape:function(ctx){
+var s=this.shape;
+ctx.beginPath();
+ctx.arc(s.cx,s.cy,s.r,0,_1,1);
+}});
+dojo.declare("dojox.gfx.Line",gs.Line,{_renderShape:function(ctx){
+var s=this.shape;
+ctx.beginPath();
+ctx.moveTo(s.x1,s.y1);
+ctx.lineTo(s.x2,s.y2);
+}});
+dojo.declare("dojox.gfx.Polyline",gs.Polyline,{setShape:function(){
+g.Polyline.superclass.setShape.apply(this,arguments);
+var p=this.shape.points,f=p[0],r=[],c,i;
+if(p.length){
+if(typeof f=="number"){
+r.push(f,p[1]);
+i=2;
+}else{
+r.push(f.x,f.y);
+i=1;
+}
+for(;i<p.length;++i){
+c=p[i];
+if(typeof c=="number"){
+r.push(c,p[++i]);
+}else{
+r.push(c.x,c.y);
+}
+}
+}
+this.canvasPolyline=r;
+return this;
+},_renderShape:function(ctx){
+var p=this.canvasPolyline;
+if(p.length){
+ctx.beginPath();
+ctx.moveTo(p[0],p[1]);
+for(var i=2;i<p.length;i+=2){
+ctx.lineTo(p[i],p[i+1]);
+}
+}
+}});
+dojo.declare("dojox.gfx.Image",gs.Image,{setShape:function(){
+g.Image.superclass.setShape.apply(this,arguments);
+var img=new Image();
+this.surface.downloadImage(img,this.shape.src);
+this.canvasImage=img;
+return this;
+},_renderShape:function(ctx){
+var s=this.shape;
+ctx.drawImage(this.canvasImage,s.x,s.y,s.width,s.height);
+}});
+dojo.declare("dojox.gfx.Text",gs.Text,{_renderShape:function(ctx){
+var s=this.shape;
+}});
+_a(g.Text,"setFont");
+var _12={M:"_moveToA",m:"_moveToR",L:"_lineToA",l:"_lineToR",H:"_hLineToA",h:"_hLineToR",V:"_vLineToA",v:"_vLineToR",C:"_curveToA",c:"_curveToR",S:"_smoothCurveToA",s:"_smoothCurveToR",Q:"_qCurveToA",q:"_qCurveToR",T:"_qSmoothCurveToA",t:"_qSmoothCurveToR",A:"_arcTo",a:"_arcTo",Z:"_closePath",z:"_closePath"};
+dojo.declare("dojox.gfx.Path",g.path.Path,{constructor:function(){
+this.lastControl={};
+},setShape:function(){
+this.canvasPath=[];
+return g.Path.superclass.setShape.apply(this,arguments);
+},_updateWithSegment:function(_13){
+var _14=d.clone(this.last);
+this[_12[_13.action]](this.canvasPath,_13.action,_13.args);
+this.last=_14;
+g.Path.superclass._updateWithSegment.apply(this,arguments);
+},_renderShape:function(ctx){
+var r=this.canvasPath;
+ctx.beginPath();
+for(var i=0;i<r.length;i+=2){
+ctx[r[i]].apply(ctx,r[i+1]);
+}
+},_moveToA:function(_15,_16,_17){
+_15.push("moveTo",[_17[0],_17[1]]);
+for(var i=2;i<_17.length;i+=2){
+_15.push("lineTo",[_17[i],_17[i+1]]);
+}
+this.last.x=_17[_17.length-2];
+this.last.y=_17[_17.length-1];
+this.lastControl={};
+},_moveToR:function(_18,_19,_1a){
+if("x" in this.last){
+_18.push("moveTo",[this.last.x+=_1a[0],this.last.y+=_1a[1]]);
+}else{
+_18.push("moveTo",[this.last.x=_1a[0],this.last.y=_1a[1]]);
+}
+for(var i=2;i<_1a.length;i+=2){
+_18.push("lineTo",[this.last.x+=_1a[i],this.last.y+=_1a[i+1]]);
+}
+this.lastControl={};
+},_lineToA:function(_1b,_1c,_1d){
+for(var i=0;i<_1d.length;i+=2){
+_1b.push("lineTo",[_1d[i],_1d[i+1]]);
+}
+this.last.x=_1d[_1d.length-2];
+this.last.y=_1d[_1d.length-1];
+this.lastControl={};
+},_lineToR:function(_1e,_1f,_20){
+for(var i=0;i<_20.length;i+=2){
+_1e.push("lineTo",[this.last.x+=_20[i],this.last.y+=_20[i+1]]);
+}
+this.lastControl={};
+},_hLineToA:function(_21,_22,_23){
+for(var i=0;i<_23.length;++i){
+_21.push("lineTo",[_23[i],this.last.y]);
+}
+this.last.x=_23[_23.length-1];
+this.lastControl={};
+},_hLineToR:function(_24,_25,_26){
+for(var i=0;i<_26.length;++i){
+_24.push("lineTo",[this.last.x+=_26[i],this.last.y]);
+}
+this.lastControl={};
+},_vLineToA:function(_27,_28,_29){
+for(var i=0;i<_29.length;++i){
+_27.push("lineTo",[this.last.x,_29[i]]);
+}
+this.last.y=_29[_29.length-1];
+this.lastControl={};
+},_vLineToR:function(_2a,_2b,_2c){
+for(var i=0;i<_2c.length;++i){
+_2a.push("lineTo",[this.last.x,this.last.y+=_2c[i]]);
+}
+this.lastControl={};
+},_curveToA:function(_2d,_2e,_2f){
+for(var i=0;i<_2f.length;i+=6){
+_2d.push("bezierCurveTo",_2f.slice(i,i+6));
+}
+this.last.x=_2f[_2f.length-2];
+this.last.y=_2f[_2f.length-1];
+this.lastControl.x=_2f[_2f.length-4];
+this.lastControl.y=_2f[_2f.length-3];
+this.lastControl.type="C";
+},_curveToR:function(_30,_31,_32){
+for(var i=0;i<_32.length;i+=6){
+_30.push("bezierCurveTo",[this.last.x+_32[i],this.last.y+_32[i+1],this.lastControl.x=this.last.x+_32[i+2],this.lastControl.y=this.last.y+_32[i+3],this.last.x+_32[i+4],this.last.y+_32[i+5]]);
+this.last.x+=_32[i+4];
+this.last.y+=_32[i+5];
+}
+this.lastControl.type="C";
+},_smoothCurveToA:function(_33,_34,_35){
+for(var i=0;i<_35.length;i+=4){
+var _36=this.lastControl.type=="C";
+_33.push("bezierCurveTo",[_36?2*this.last.x-this.lastControl.x:this.last.x,_36?2*this.last.y-this.lastControl.y:this.last.y,_35[i],_35[i+1],_35[i+2],_35[i+3]]);
+this.lastControl.x=_35[i];
+this.lastControl.y=_35[i+1];
+this.lastControl.type="C";
+}
+this.last.x=_35[_35.length-2];
+this.last.y=_35[_35.length-1];
+},_smoothCurveToR:function(_37,_38,_39){
+for(var i=0;i<_39.length;i+=4){
+var _3a=this.lastControl.type=="C";
+_37.push("bezierCurveTo",[_3a?2*this.last.x-this.lastControl.x:this.last.x,_3a?2*this.last.y-this.lastControl.y:this.last.y,this.last.x+_39[i],this.last.y+_39[i+1],this.last.x+_39[i+2],this.last.y+_39[i+3]]);
+this.lastControl.x=this.last.x+_39[i];
+this.lastControl.y=this.last.y+_39[i+1];
+this.lastControl.type="C";
+this.last.x+=_39[i+2];
+this.last.y+=_39[i+3];
+}
+},_qCurveToA:function(_3b,_3c,_3d){
+for(var i=0;i<_3d.length;i+=4){
+_3b.push("quadraticCurveTo",_3d.slice(i,i+4));
+}
+this.last.x=_3d[_3d.length-2];
+this.last.y=_3d[_3d.length-1];
+this.lastControl.x=_3d[_3d.length-4];
+this.lastControl.y=_3d[_3d.length-3];
+this.lastControl.type="Q";
+},_qCurveToR:function(_3e,_3f,_40){
+for(var i=0;i<_40.length;i+=4){
+_3e.push("quadraticCurveTo",[this.lastControl.x=this.last.x+_40[i],this.lastControl.y=this.last.y+_40[i+1],this.last.x+_40[i+2],this.last.y+_40[i+3]]);
+this.last.x+=_40[i+2];
+this.last.y+=_40[i+3];
+}
+this.lastControl.type="Q";
+},_qSmoothCurveToA:function(_41,_42,_43){
+for(var i=0;i<_43.length;i+=2){
+var _44=this.lastControl.type=="Q";
+_41.push("quadraticCurveTo",[this.lastControl.x=_44?2*this.last.x-this.lastControl.x:this.last.x,this.lastControl.y=_44?2*this.last.y-this.lastControl.y:this.last.y,_43[i],_43[i+1]]);
+this.lastControl.type="Q";
+}
+this.last.x=_43[_43.length-2];
+this.last.y=_43[_43.length-1];
+},_qSmoothCurveToR:function(_45,_46,_47){
+for(var i=0;i<_47.length;i+=2){
+var _48=this.lastControl.type=="Q";
+_45.push("quadraticCurveTo",[this.lastControl.x=_48?2*this.last.x-this.lastControl.x:this.last.x,this.lastControl.y=_48?2*this.last.y-this.lastControl.y:this.last.y,this.last.x+_47[i],this.last.y+_47[i+1]]);
+this.lastControl.type="Q";
+this.last.x+=_47[i];
+this.last.y+=_47[i+1];
+}
+},_arcTo:function(_49,_4a,_4b){
+var _4c=_4a=="a";
+for(var i=0;i<_4b.length;i+=7){
+var x1=_4b[i+5],y1=_4b[i+6];
+if(_4c){
+x1+=this.last.x;
+y1+=this.last.y;
+}
+var _4d=ga.arcAsBezier(this.last,_4b[i],_4b[i+1],_4b[i+2],_4b[i+3]?1:0,_4b[i+4]?1:0,x1,y1);
+d.forEach(_4d,function(p){
+_49.push("bezierCurveTo",p);
+});
+this.last.x=x1;
+this.last.y=y1;
+}
+this.lastControl={};
+},_closePath:function(_4e,_4f,_50){
+_4e.push("closePath",[]);
+this.lastControl={};
+}});
+d.forEach(["moveTo","lineTo","hLineTo","vLineTo","curveTo","smoothCurveTo","qCurveTo","qSmoothCurveTo","arcTo","closePath"],function(_51){
+_a(g.Path,_51);
+});
+dojo.declare("dojox.gfx.TextPath",g.path.TextPath,{_renderShape:function(ctx){
+var s=this.shape;
+}});
+dojo.declare("dojox.gfx.Surface",gs.Surface,{constructor:function(){
+gs.Container._init.call(this);
+this.pendingImageCount=0;
+this.makeDirty();
+},setDimensions:function(_52,_53){
+this.width=g.normalizedLength(_52);
+this.height=g.normalizedLength(_53);
+if(!this.rawNode){
+return this;
+}
+this.rawNode.width=_52;
+this.rawNode.height=_53;
+this.makeDirty();
+return this;
+},getDimensions:function(){
+return this.rawNode?{width:this.rawNode.width,height:this.rawNode.height}:null;
+},_render:function(){
+if(this.pendingImageCount){
+return;
+}
+var ctx=this.rawNode.getContext("2d");
+ctx.save();
+ctx.clearRect(0,0,this.rawNode.width,this.rawNode.height);
+for(var i=0;i<this.children.length;++i){
+this.children[i]._render(ctx);
+}
+ctx.restore();
+if("pendingRender" in this){
+clearTimeout(this.pendingRender);
+delete this.pendingRender;
+}
+},makeDirty:function(){
+if(!this.pendingImagesCount&&!("pendingRender" in this)){
+this.pendingRender=setTimeout(d.hitch(this,this._render),0);
+}
+},downloadImage:function(img,url){
+var _54=d.hitch(this,this.onImageLoad);
+if(!this.pendingImageCount++&&"pendingRender" in this){
+clearTimeout(this.pendingRender);
+delete this.pendingRender;
+}
+img.onload=_54;
+img.onerror=_54;
+img.onabort=_54;
+img.src=url;
+},onImageLoad:function(){
+if(!--this.pendingImageCount){
+this._render();
+}
+},getEventSource:function(){
+return null;
+},connect:function(){
+},disconnect:function(){
+}});
+g.createSurface=function(_55,_56,_57){
+if(!_56&&!_57){
+var pos=d.position(_55);
+_56=_56||pos.w;
+_57=_57||pos.h;
+}
+if(typeof _56=="number"){
+_56=_56+"px";
+}
+if(typeof _57=="number"){
+_57=_57+"px";
+}
+var s=new g.Surface(),p=d.byId(_55),c=p.ownerDocument.createElement("canvas");
+c.width=dojox.gfx.normalizedLength(_56);
+c.height=dojox.gfx.normalizedLength(_57);
+p.appendChild(c);
+s.rawNode=c;
+s._parent=p;
+s.surface=s;
+return s;
+};
+var C=gs.Container,_58={add:function(_59){
+this.surface.makeDirty();
+return C.add.apply(this,arguments);
+},remove:function(_5a,_5b){
+this.surface.makeDirty();
+return C.remove.apply(this,arguments);
+},clear:function(){
+this.surface.makeDirty();
+return C.clear.apply(this,arguments);
+},_moveChildToFront:function(_5c){
+this.surface.makeDirty();
+return C._moveChildToFront.apply(this,arguments);
+},_moveChildToBack:function(_5d){
+this.surface.makeDirty();
+return C._moveChildToBack.apply(this,arguments);
+}};
+d.mixin(gs.Creator,{createObject:function(_5e,_5f){
+var _60=new _5e();
+_60.surface=this.surface;
+_60.setShape(_5f);
+this.add(_60);
+return _60;
+}});
+d.extend(g.Group,_58);
+d.extend(g.Group,gs.Creator);
+d.extend(g.Surface,_58);
+d.extend(g.Surface,gs.Creator);
+})();
+}
Index: trunk/web/dojo/dojox/gfx/README-svgweb
===================================================================
--- trunk/web/dojo/dojox/gfx/README-svgweb	(revision 0)
+++ trunk/web/dojo/dojox/gfx/README-svgweb	(revision 9)
@@ -0,0 +1,98 @@
+NOTICE of 3rd party code included
+=================================
+For ease of testing, latest SVGWeb release is included, see
+dojox/gfx/tests/svgweb/README for details.
+
+
+============================================================
+Enable or disable the SVGWeb with dojo gfx
+------------------------------------------------------------
+
+The function is only enabled when SVGWeb JS is included and the gfx renderer is
+'svg'. If either SVGWeb is not available or the renderer is not 'svg', dojox.gfx
+works as usual.
+
+To enable SVGWeb with dojo gfx:
+
+1. Include SVGWeb JS at the FIRST of all your javascripts
+
+	<meta name="svg.render.forceflash" content="true"/>
+	<script src="<path>/svgweb/src/svg.js" data-path="<path>/svgweb/src"></script>
+
+2. Force 'svg' renderer with the 'forceGfxRenderer' config
+
+	<script src="<path>/dojo/dojo.js" djConfig="forceGfxRenderer:'svg'"></script>
+
+
+============================================================
+Test dojo gfx + SVGWeb
+------------------------------------------------------------
+
+All SVGWeb-specific tests are in dojox/gfx/tests/svgweb.
+
+============================================================
+GFX Performance Test Status
+------------------------------------------------------------
+
+Runs dojo gfx performance tests on IE7 with different renderers, compare their
+performance. The result so far is
+
+    * Silverlight is the fastest: 27,546 ms;
+    * Tuned SVGWeb is the 2nd place: 38,690 ms, almost 3 times faster than
+	  before
+    * VML is the slowest: 50,250 ms
+
+
+============================================================
+GFX Functional Test Status
+------------------------------------------------------------
+
+Summary / General findings
+
+    * Pass rate 83%, 25 out of 30 pass
+    * The behavior is very consistent on IE & FF
+    * Transformation of Text is not working
+    * Line style is not working
+    * getTextWidth() does not work, see svgweb bug 417
+    * IE7 has memory issue, see svgweb bug 418 (IE8 seems fine)
+
+PASS test.roundrect.html
+PASS test_arc.html
+PASS test_bezier.html
+PASS test_decompose.html
+PASS test_destroy.html
+PASS test_fill.html
+
+FAIL test_fx.html: mostly works, except for the transformation of text (svgweb bug 158)
+
+PASS test_fx_shapes.html
+PASS test_gfx.html
+PASS test_gradient.html: works, but performance is slow due to the creation of a lot of shapes; using suspendRedraw() helps, but not much; current time is 8.5 seconds on IE7, 3 seconds on FF 3.5
+PASS test_group1.html: partly works, but rect highlight change has problem (svgweb bug 296)
+PASS test_group2.html: works, with source changed from 'dijit.byId()' to 'dojo.byId()'
+PASS test_image1.html
+PASS test_image2.html: picture shows, but move and transform has serious problem (svgweb bug 296)
+
+FAIL test_image3.html: picture shows, but move and transform has serious problem (svgweb bug 427, 436)
+
+PASS test_image4.html
+PASS test_image5.html: still image gets cropped after dragging, but mostly it's working (svgweb bug 244)
+PASS test_linearGradient.html
+
+FAIL test_linestyle.html: not work (svgweb bug 65)
+
+PASS test_pattern.html
+PASS test_poly.html
+PASS test_resize.html
+PASS test_setPath.html
+PASS test_tbbox.html: output drawing is incorrect (svgweb bug 296)
+
+FAIL test_text.html: text shows, but the rotation still fails (svgweb bug 158)
+
+FAIL test_textpath.html: not work (svgweb bug 169)
+
+PASS test_transform.html: output drawing is incorrect (svgweb bug 296)
+PASS test_utils.html
+PASS test_vectortext_draw.html
+PASS test_vectortext_load.html: functionally, this works, but very very slow; Reduced the test case to print just 26 chars, in FF it takes 30+ seconds, in IE7 it's more than a minute...
+
Index: trunk/web/dojo/dojox/gfx/fx.js
===================================================================
--- trunk/web/dojo/dojox/gfx/fx.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/fx.js	(revision 9)
@@ -0,0 +1,227 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.fx"]){
+dojo._hasResource["dojox.gfx.fx"]=true;
+dojo.provide("dojox.gfx.fx");
+dojo.require("dojox.gfx.matrix");
+(function(){
+var d=dojo,g=dojox.gfx,m=g.matrix;
+var _1=function(_2,_3){
+this.start=_2,this.end=_3;
+};
+d.extend(_1,{getValue:function(r){
+return (this.end-this.start)*r+this.start;
+}});
+var _4=function(_5,_6,_7){
+this.start=_5,this.end=_6;
+this.units=_7;
+};
+d.extend(_4,{getValue:function(r){
+return (this.end-this.start)*r+this.start+this.units;
+}});
+var _8=function(_9,_a){
+this.start=_9,this.end=_a;
+this.temp=new dojo.Color();
+};
+d.extend(_8,{getValue:function(r){
+return d.blendColors(this.start,this.end,r,this.temp);
+}});
+var _b=function(_c){
+this.values=_c;
+this.length=_c.length;
+};
+d.extend(_b,{getValue:function(r){
+return this.values[Math.min(Math.floor(r*this.length),this.length-1)];
+}});
+var _d=function(_e,_f){
+this.values=_e;
+this.def=_f?_f:{};
+};
+d.extend(_d,{getValue:function(r){
+var ret=dojo.clone(this.def);
+for(var i in this.values){
+ret[i]=this.values[i].getValue(r);
+}
+return ret;
+}});
+var _10=function(_11,_12){
+this.stack=_11;
+this.original=_12;
+};
+d.extend(_10,{getValue:function(r){
+var ret=[];
+dojo.forEach(this.stack,function(t){
+if(t instanceof m.Matrix2D){
+ret.push(t);
+return;
+}
+if(t.name=="original"&&this.original){
+ret.push(this.original);
+return;
+}
+if(!(t.name in m)){
+return;
+}
+var f=m[t.name];
+if(typeof f!="function"){
+ret.push(f);
+return;
+}
+var val=dojo.map(t.start,function(v,i){
+return (t.end[i]-v)*r+v;
+}),_13=f.apply(m,val);
+if(_13 instanceof m.Matrix2D){
+ret.push(_13);
+}
+},this);
+return ret;
+}});
+var _14=new d.Color(0,0,0,0);
+var _15=function(_16,obj,_17,def){
+if(_16.values){
+return new _b(_16.values);
+}
+var _18,_19,end;
+if(_16.start){
+_19=g.normalizeColor(_16.start);
+}else{
+_19=_18=obj?(_17?obj[_17]:obj):def;
+}
+if(_16.end){
+end=g.normalizeColor(_16.end);
+}else{
+if(!_18){
+_18=obj?(_17?obj[_17]:obj):def;
+}
+end=_18;
+}
+return new _8(_19,end);
+};
+var _1a=function(_1b,obj,_1c,def){
+if(_1b.values){
+return new _b(_1b.values);
+}
+var _1d,_1e,end;
+if(_1b.start){
+_1e=_1b.start;
+}else{
+_1e=_1d=obj?obj[_1c]:def;
+}
+if(_1b.end){
+end=_1b.end;
+}else{
+if(typeof _1d!="number"){
+_1d=obj?obj[_1c]:def;
+}
+end=_1d;
+}
+return new _1(_1e,end);
+};
+g.fx.animateStroke=function(_1f){
+if(!_1f.easing){
+_1f.easing=d._defaultEasing;
+}
+var _20=new d.Animation(_1f),_21=_1f.shape,_22;
+d.connect(_20,"beforeBegin",_20,function(){
+_22=_21.getStroke();
+var _23=_1f.color,_24={},_25,_26,end;
+if(_23){
+_24.color=_15(_23,_22,"color",_14);
+}
+_23=_1f.style;
+if(_23&&_23.values){
+_24.style=new _b(_23.values);
+}
+_23=_1f.width;
+if(_23){
+_24.width=_1a(_23,_22,"width",1);
+}
+_23=_1f.cap;
+if(_23&&_23.values){
+_24.cap=new _b(_23.values);
+}
+_23=_1f.join;
+if(_23){
+if(_23.values){
+_24.join=new _b(_23.values);
+}else{
+_26=_23.start?_23.start:(_22&&_22.join||0);
+end=_23.end?_23.end:(_22&&_22.join||0);
+if(typeof _26=="number"&&typeof end=="number"){
+_24.join=new _1(_26,end);
+}
+}
+}
+this.curve=new _d(_24,_22);
+});
+d.connect(_20,"onAnimate",_21,"setStroke");
+return _20;
+};
+g.fx.animateFill=function(_27){
+if(!_27.easing){
+_27.easing=d._defaultEasing;
+}
+var _28=new d.Animation(_27),_29=_27.shape,_2a;
+d.connect(_28,"beforeBegin",_28,function(){
+_2a=_29.getFill();
+var _2b=_27.color,_2c={};
+if(_2b){
+this.curve=_15(_2b,_2a,"",_14);
+}
+});
+d.connect(_28,"onAnimate",_29,"setFill");
+return _28;
+};
+g.fx.animateFont=function(_2d){
+if(!_2d.easing){
+_2d.easing=d._defaultEasing;
+}
+var _2e=new d.Animation(_2d),_2f=_2d.shape,_30;
+d.connect(_2e,"beforeBegin",_2e,function(){
+_30=_2f.getFont();
+var _31=_2d.style,_32={},_33,_34,end;
+if(_31&&_31.values){
+_32.style=new _b(_31.values);
+}
+_31=_2d.variant;
+if(_31&&_31.values){
+_32.variant=new _b(_31.values);
+}
+_31=_2d.weight;
+if(_31&&_31.values){
+_32.weight=new _b(_31.values);
+}
+_31=_2d.family;
+if(_31&&_31.values){
+_32.family=new _b(_31.values);
+}
+_31=_2d.size;
+if(_31&&_31.units){
+_34=parseFloat(_31.start?_31.start:(_2f.font&&_2f.font.size||"0"));
+end=parseFloat(_31.end?_31.end:(_2f.font&&_2f.font.size||"0"));
+_32.size=new _4(_34,end,_31.units);
+}
+this.curve=new _d(_32,_30);
+});
+d.connect(_2e,"onAnimate",_2f,"setFont");
+return _2e;
+};
+g.fx.animateTransform=function(_35){
+if(!_35.easing){
+_35.easing=d._defaultEasing;
+}
+var _36=new d.Animation(_35),_37=_35.shape,_38;
+d.connect(_36,"beforeBegin",_36,function(){
+_38=_37.getTransform();
+this.curve=new _10(_35.transform,_38);
+});
+d.connect(_36,"onAnimate",_37,"setTransform");
+return _36;
+};
+})();
+}
Index: trunk/web/dojo/dojox/gfx/decompose.js
===================================================================
--- trunk/web/dojo/dojox/gfx/decompose.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/decompose.js	(revision 9)
@@ -0,0 +1,106 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.decompose"]){
+dojo._hasResource["dojox.gfx.decompose"]=true;
+dojo.provide("dojox.gfx.decompose");
+dojo.require("dojox.gfx.matrix");
+(function(){
+var m=dojox.gfx.matrix;
+var eq=function(a,b){
+return Math.abs(a-b)<=0.000001*(Math.abs(a)+Math.abs(b));
+};
+var _1=function(r1,m1,r2,m2){
+if(!isFinite(r1)){
+return r2;
+}else{
+if(!isFinite(r2)){
+return r1;
+}
+}
+m1=Math.abs(m1),m2=Math.abs(m2);
+return (m1*r1+m2*r2)/(m1+m2);
+};
+var _2=function(_3){
+var M=new m.Matrix2D(_3);
+return dojo.mixin(M,{dx:0,dy:0,xy:M.yx,yx:M.xy});
+};
+var _4=function(_5){
+return (_5.xx*_5.yy<0||_5.xy*_5.yx>0)?-1:1;
+};
+var _6=function(_7){
+var M=m.normalize(_7),b=-M.xx-M.yy,c=M.xx*M.yy-M.xy*M.yx,d=Math.sqrt(b*b-4*c),l1=-(b+(b<0?-d:d))/2,l2=c/l1,_8=M.xy/(l1-M.xx),_9=1,_a=M.xy/(l2-M.xx),_b=1;
+if(eq(l1,l2)){
+_8=1,_9=0,_a=0,_b=1;
+}
+if(!isFinite(_8)){
+_8=1,_9=(l1-M.xx)/M.xy;
+if(!isFinite(_9)){
+_8=(l1-M.yy)/M.yx,_9=1;
+if(!isFinite(_8)){
+_8=1,_9=M.yx/(l1-M.yy);
+}
+}
+}
+if(!isFinite(_a)){
+_a=1,_b=(l2-M.xx)/M.xy;
+if(!isFinite(_b)){
+_a=(l2-M.yy)/M.yx,_b=1;
+if(!isFinite(_a)){
+_a=1,_b=M.yx/(l2-M.yy);
+}
+}
+}
+var d1=Math.sqrt(_8*_8+_9*_9),d2=Math.sqrt(_a*_a+_b*_b);
+if(!isFinite(_8/=d1)){
+_8=0;
+}
+if(!isFinite(_9/=d1)){
+_9=0;
+}
+if(!isFinite(_a/=d2)){
+_a=0;
+}
+if(!isFinite(_b/=d2)){
+_b=0;
+}
+return {value1:l1,value2:l2,vector1:{x:_8,y:_9},vector2:{x:_a,y:_b}};
+};
+var _c=function(M,_d){
+var _e=_4(M),a=_d.angle1=(Math.atan2(M.yx,M.yy)+Math.atan2(-_e*M.xy,_e*M.xx))/2,_f=Math.cos(a),sin=Math.sin(a);
+_d.sx=_1(M.xx/_f,_f,-M.xy/sin,sin);
+_d.sy=_1(M.yy/_f,_f,M.yx/sin,sin);
+return _d;
+};
+var _10=function(M,_11){
+var _12=_4(M),a=_11.angle2=(Math.atan2(_12*M.yx,_12*M.xx)+Math.atan2(-M.xy,M.yy))/2,cos=Math.cos(a),sin=Math.sin(a);
+_11.sx=_1(M.xx/cos,cos,M.yx/sin,sin);
+_11.sy=_1(M.yy/cos,cos,-M.xy/sin,sin);
+return _11;
+};
+dojox.gfx.decompose=function(_13){
+var M=m.normalize(_13),_14={dx:M.dx,dy:M.dy,sx:1,sy:1,angle1:0,angle2:0};
+if(eq(M.xy,0)&&eq(M.yx,0)){
+return dojo.mixin(_14,{sx:M.xx,sy:M.yy});
+}
+if(eq(M.xx*M.yx,-M.xy*M.yy)){
+return _c(M,_14);
+}
+if(eq(M.xx*M.xy,-M.yx*M.yy)){
+return _10(M,_14);
+}
+var MT=_2(M),u=_6([M,MT]),v=_6([MT,M]),U=new m.Matrix2D({xx:u.vector1.x,xy:u.vector2.x,yx:u.vector1.y,yy:u.vector2.y}),VT=new m.Matrix2D({xx:v.vector1.x,xy:v.vector1.y,yx:v.vector2.x,yy:v.vector2.y}),S=new m.Matrix2D([m.invert(U),M,m.invert(VT)]);
+_c(VT,_14);
+S.xx*=_14.sx;
+S.yy*=_14.sy;
+_10(U,_14);
+S.xx*=_14.sx;
+S.yy*=_14.sy;
+return dojo.mixin(_14,{sx:S.xx,sy:S.yy});
+};
+})();
+}
Index: trunk/web/dojo/dojox/gfx/silverlight_attach.js
===================================================================
--- trunk/web/dojo/dojox/gfx/silverlight_attach.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/silverlight_attach.js	(revision 9)
@@ -0,0 +1,73 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo.require("dojox.gfx.silverlight");
+dojo.experimental("dojox.gfx.silverlight_attach");
+(function(){
+dojox.gfx.attachNode=function(_1){
+return null;
+if(!_1){
+return null;
+}
+var s=null;
+switch(_1.tagName.toLowerCase()){
+case dojox.gfx.Rect.nodeType:
+s=new dojox.gfx.Rect(_1);
+break;
+case dojox.gfx.Ellipse.nodeType:
+if(_1.width==_1.height){
+s=new dojox.gfx.Circle(_1);
+}else{
+s=new dojox.gfx.Ellipse(_1);
+}
+break;
+case dojox.gfx.Polyline.nodeType:
+s=new dojox.gfx.Polyline(_1);
+break;
+case dojox.gfx.Path.nodeType:
+s=new dojox.gfx.Path(_1);
+break;
+case dojox.gfx.Line.nodeType:
+s=new dojox.gfx.Line(_1);
+break;
+case dojox.gfx.Image.nodeType:
+s=new dojox.gfx.Image(_1);
+break;
+case dojox.gfx.Text.nodeType:
+s=new dojox.gfx.Text(_1);
+_2(s);
+break;
+default:
+return null;
+}
+_3(s);
+if(!(s instanceof dojox.gfx.Image)){
+_4(s);
+_5(s);
+}
+_6(s);
+return s;
+};
+dojox.gfx.attachSurface=function(_7){
+return null;
+};
+var _4=function(_8){
+return null;
+};
+var _5=function(_9){
+return null;
+};
+var _6=function(_a){
+return null;
+};
+var _2=function(_b){
+return null;
+};
+var _3=function(_c){
+return null;
+};
+})();
Index: trunk/web/dojo/dojox/gfx/vml_attach.js
===================================================================
--- trunk/web/dojo/dojox/gfx/vml_attach.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/vml_attach.js	(revision 9)
@@ -0,0 +1,300 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo.require("dojox.gfx.vml");
+dojo.experimental("dojox.gfx.vml_attach");
+(function(){
+dojox.gfx.attachNode=function(_1){
+if(!_1){
+return null;
+}
+var s=null;
+switch(_1.tagName.toLowerCase()){
+case dojox.gfx.Rect.nodeType:
+s=new dojox.gfx.Rect(_1);
+_2(s);
+break;
+case dojox.gfx.Ellipse.nodeType:
+if(_1.style.width==_1.style.height){
+s=new dojox.gfx.Circle(_1);
+_3(s);
+}else{
+s=new dojox.gfx.Ellipse(_1);
+_4(s);
+}
+break;
+case dojox.gfx.Path.nodeType:
+switch(_1.getAttribute("dojoGfxType")){
+case "line":
+s=new dojox.gfx.Line(_1);
+_5(s);
+break;
+case "polyline":
+s=new dojox.gfx.Polyline(_1);
+_6(s);
+break;
+case "path":
+s=new dojox.gfx.Path(_1);
+_7(s);
+break;
+case "text":
+s=new dojox.gfx.Text(_1);
+_8(s);
+_9(s);
+_a(s);
+break;
+case "textpath":
+s=new dojox.gfx.TextPath(_1);
+_7(s);
+_8(s);
+_9(s);
+break;
+}
+break;
+case dojox.gfx.Image.nodeType:
+switch(_1.getAttribute("dojoGfxType")){
+case "image":
+s=new dojox.gfx.Image(_1);
+_b(s);
+_c(s);
+break;
+}
+break;
+default:
+return null;
+}
+if(!(s instanceof dojox.gfx.Image)){
+_d(s);
+_e(s);
+if(!(s instanceof dojox.gfx.Text)){
+_f(s);
+}
+}
+return s;
+};
+dojox.gfx.attachSurface=function(_10){
+var s=new dojox.gfx.Surface();
+s.clipNode=_10;
+var r=s.rawNode=_10.firstChild;
+var b=r.firstChild;
+if(!b||b.tagName!="rect"){
+return null;
+}
+s.bgNode=r;
+return s;
+};
+var _d=function(_11){
+var _12=null,r=_11.rawNode,fo=r.fill;
+if(fo.on&&fo.type=="gradient"){
+var _12=dojo.clone(dojox.gfx.defaultLinearGradient),rad=dojox.gfx.matrix._degToRad(fo.angle);
+_12.x2=Math.cos(rad);
+_12.y2=Math.sin(rad);
+_12.colors=[];
+var _13=fo.colors.value.split(";");
+for(var i=0;i<_13.length;++i){
+var t=_13[i].match(/\S+/g);
+if(!t||t.length!=2){
+continue;
+}
+_12.colors.push({offset:dojox.gfx.vml._parseFloat(t[0]),color:new dojo.Color(t[1])});
+}
+}else{
+if(fo.on&&fo.type=="gradientradial"){
+var _12=dojo.clone(dojox.gfx.defaultRadialGradient),w=parseFloat(r.style.width),h=parseFloat(r.style.height);
+_12.cx=isNaN(w)?0:fo.focusposition.x*w;
+_12.cy=isNaN(h)?0:fo.focusposition.y*h;
+_12.r=isNaN(w)?1:w/2;
+_12.colors=[];
+var _13=fo.colors.value.split(";");
+for(var i=_13.length-1;i>=0;--i){
+var t=_13[i].match(/\S+/g);
+if(!t||t.length!=2){
+continue;
+}
+_12.colors.push({offset:dojox.gfx.vml._parseFloat(t[0]),color:new dojo.Color(t[1])});
+}
+}else{
+if(fo.on&&fo.type=="tile"){
+var _12=dojo.clone(dojox.gfx.defaultPattern);
+_12.width=dojox.gfx.pt2px(fo.size.x);
+_12.height=dojox.gfx.pt2px(fo.size.y);
+_12.x=fo.origin.x*_12.width;
+_12.y=fo.origin.y*_12.height;
+_12.src=fo.src;
+}else{
+if(fo.on&&r.fillcolor){
+_12=new dojo.Color(r.fillcolor+"");
+_12.a=fo.opacity;
+}
+}
+}
+}
+_11.fillStyle=_12;
+};
+var _e=function(_14){
+var r=_14.rawNode;
+if(!r.stroked){
+_14.strokeStyle=null;
+return;
+}
+var _15=_14.strokeStyle=dojo.clone(dojox.gfx.defaultStroke),rs=r.stroke;
+_15.color=new dojo.Color(r.strokecolor.value);
+_15.width=dojox.gfx.normalizedLength(r.strokeweight+"");
+_15.color.a=rs.opacity;
+_15.cap=this._translate(this._capMapReversed,rs.endcap);
+_15.join=rs.joinstyle=="miter"?rs.miterlimit:rs.joinstyle;
+_15.style=rs.dashstyle;
+};
+var _f=function(_16){
+var s=_16.rawNode.skew,sm=s.matrix,so=s.offset;
+_16.matrix=dojox.gfx.matrix.normalize({xx:sm.xtox,xy:sm.ytox,yx:sm.xtoy,yy:sm.ytoy,dx:dojox.gfx.pt2px(so.x),dy:dojox.gfx.pt2px(so.y)});
+};
+var _17=function(_18){
+_18.bgNode=_18.rawNode.firstChild;
+};
+var _2=function(_19){
+var r=_19.rawNode,_1a=r.outerHTML.match(/arcsize = \"(\d*\.?\d+[%f]?)\"/)[1],_1b=r.style,_1c=parseFloat(_1b.width),_1d=parseFloat(_1b.height);
+_1a=(_1a.indexOf("%")>=0)?parseFloat(_1a)/100:dojox.gfx.vml._parseFloat(_1a);
+_19.shape=dojox.gfx.makeParameters(dojox.gfx.defaultRect,{x:parseInt(_1b.left),y:parseInt(_1b.top),width:_1c,height:_1d,r:Math.min(_1c,_1d)*_1a});
+};
+var _4=function(_1e){
+var _1f=_1e.rawNode.style,rx=parseInt(_1f.width)/2,ry=parseInt(_1f.height)/2;
+_1e.shape=dojox.gfx.makeParameters(dojox.gfx.defaultEllipse,{cx:parseInt(_1f.left)+rx,cy:parseInt(_1f.top)+ry,rx:rx,ry:ry});
+};
+var _3=function(_20){
+var _21=_20.rawNode.style,r=parseInt(_21.width)/2;
+_20.shape=dojox.gfx.makeParameters(dojox.gfx.defaultCircle,{cx:parseInt(_21.left)+r,cy:parseInt(_21.top)+r,r:r});
+};
+var _5=function(_22){
+var _23=_22.shape=dojo.clone(dojox.gfx.defaultLine),p=_22.rawNode.path.v.match(dojox.gfx.pathVmlRegExp);
+do{
+if(p.length<7||p[0]!="m"||p[3]!="l"||p[6]!="e"){
+break;
+}
+_23.x1=parseInt(p[1]);
+_23.y1=parseInt(p[2]);
+_23.x2=parseInt(p[4]);
+_23.y2=parseInt(p[5]);
+}while(false);
+};
+var _6=function(_24){
+var _25=_24.shape=dojo.clone(dojox.gfx.defaultPolyline),p=_24.rawNode.path.v.match(dojox.gfx.pathVmlRegExp);
+do{
+if(p.length<3||p[0]!="m"){
+break;
+}
+var x=parseInt(p[0]),y=parseInt(p[1]);
+if(isNaN(x)||isNaN(y)){
+break;
+}
+_25.points.push({x:x,y:y});
+if(p.length<6||p[3]!="l"){
+break;
+}
+for(var i=4;i<p.length;i+=2){
+x=parseInt(p[i]);
+y=parseInt(p[i+1]);
+if(isNaN(x)||isNaN(y)){
+break;
+}
+_25.points.push({x:x,y:y});
+}
+}while(false);
+};
+var _b=function(_26){
+_26.shape=dojo.clone(dojox.gfx.defaultImage);
+_26.shape.src=_26.rawNode.firstChild.src;
+};
+var _c=function(_27){
+var m=_27.rawNode.filters["DXImageTransform.Microsoft.Matrix"];
+_27.matrix=dojox.gfx.matrix.normalize({xx:m.M11,xy:m.M12,yx:m.M21,yy:m.M22,dx:m.Dx,dy:m.Dy});
+};
+var _8=function(_28){
+var _29=_28.shape=dojo.clone(dojox.gfx.defaultText),r=_28.rawNode,p=r.path.v.match(dojox.gfx.pathVmlRegExp);
+do{
+if(!p||p.length!=7){
+break;
+}
+var c=r.childNodes,i=0;
+for(;i<c.length&&c[i].tagName!="textpath";++i){
+}
+if(i>=c.length){
+break;
+}
+var s=c[i].style;
+_29.text=c[i].string;
+switch(s["v-text-align"]){
+case "left":
+_29.x=parseInt(p[1]);
+_29.align="start";
+break;
+case "center":
+_29.x=(parseInt(p[1])+parseInt(p[4]))/2;
+_29.align="middle";
+break;
+case "right":
+_29.x=parseInt(p[4]);
+_29.align="end";
+break;
+}
+_29.y=parseInt(p[2]);
+_29.decoration=s["text-decoration"];
+_29.rotated=s["v-rotate-letters"].toLowerCase() in dojox.gfx.vml._bool;
+_29.kerning=s["v-text-kern"].toLowerCase() in dojox.gfx.vml._bool;
+return;
+}while(false);
+_28.shape=null;
+};
+var _9=function(_2a){
+var _2b=_2a.fontStyle=dojo.clone(dojox.gfx.defaultFont),c=_2a.rawNode.childNodes,i=0;
+for(;i<c.length&&c[i].tagName=="textpath";++i){
+}
+if(i>=c.length){
+_2a.fontStyle=null;
+return;
+}
+var s=c[i].style;
+_2b.style=s.fontstyle;
+_2b.variant=s.fontvariant;
+_2b.weight=s.fontweight;
+_2b.size=s.fontsize;
+_2b.family=s.fontfamily;
+};
+var _a=function(_2c){
+_f(_2c);
+var _2d=_2c.matrix,fs=_2c.fontStyle;
+if(_2d&&fs){
+_2c.matrix=dojox.gfx.matrix.multiply(_2d,{dy:dojox.gfx.normalizedLength(fs.size)*0.35});
+}
+};
+var _7=function(_2e){
+var _2f=_2e.shape=dojo.clone(dojox.gfx.defaultPath),p=_2e.rawNode.path.v.match(dojox.gfx.pathVmlRegExp),t=[],_30=false,map=dojox.gfx.Path._pathVmlToSvgMap;
+for(var i=0;i<p.length;++p){
+var s=p[i];
+if(s in map){
+_30=false;
+t.push(map[s]);
+}else{
+if(!_30){
+var n=parseInt(s);
+if(isNaN(n)){
+_30=true;
+}else{
+t.push(n);
+}
+}
+}
+}
+var l=t.length;
+if(l>=4&&t[l-1]==""&&t[l-2]==0&&t[l-3]==0&&t[l-4]=="l"){
+t.splice(l-4,4);
+}
+if(l){
+_2f.path=t.join(" ");
+}
+};
+})();
Index: trunk/web/dojo/dojox/gfx/README
===================================================================
--- trunk/web/dojo/dojox/gfx/README	(revision 0)
+++ trunk/web/dojo/dojox/gfx/README	(revision 9)
@@ -0,0 +1,109 @@
+-------------------------------------------------------------------------------
+dojox.gfx
+-------------------------------------------------------------------------------
+Version 1.100
+Release date: 08/01/2006
+-------------------------------------------------------------------------------
+Project state:
+SVG renderer: production
+VML renderer: production
+Silverlight renderer: beta
+HTMLCanvas renderer: beta
+SVGWeb integration: experimental
+-------------------------------------------------------------------------------
+Credits
+	Eugene Lazutkin (eugene.lazutkin@gmail.com)
+	Kun Xi (bookstack@gmail.com)
+	Chris Mitchell (ccmitchellusa@gmail.com) HTML Canvas
+	Yang Li () SVGWeb integration
+-------------------------------------------------------------------------------
+Project description
+
+Implementation of simple portable 2D graphics library.
+-------------------------------------------------------------------------------
+Dependencies:
+
+Dojo Core
+-------------------------------------------------------------------------------
+Documentation
+
+Currently it can be found here: http://docs.google.com/Doc?id=d764479_1hnb2tn
+
+HTMLCanvas Renderer Status
+
+To use canvas rendering, insert 'canvas' at the beginning of the gfxRenderers list in your
+djConfig, for example:
+<script type="text/javascript" src="../../../dojo/dojo.js"
+	djConfig="parseOnLoad: true, gfxRenderer: 'canvas,svg,silverlight,vml'"></script>
+canvas currently will only render on non-IE browsers (see dojox/gfx.js for where the renderer is loaded);
+although it should be possible to use an IE canvas implementation (like Google's); however, it will be very slow.
+
+The following tests can be made to work with HTML Canvas with minor testcase modification:
+dojox/gfx/tests
+	test_gfx.html-Bugs #1
+	test_arc.html
+	test_bezier.html
+	test_pattern.html
+	test_gradient.html
+	test_linearGradient.html
+	test_image1.html - Limitation #3
+	test_transform.html - Bug #1
+	test_poly.html - Bug #1
+dojox/gfx/demos
+	butterfly.html - Bug #1
+	lion.html - Bug #1
+	tiger.html - Bug #1
+	circles.html - No event processing yet :(
+	creator.html
+dojox/chart
+	test_pie2d.html - Dojo Charts on iPhone anyone? :)
+	test_chart2d.html -
+
+	// To make charts work, the following line needs to be added to the end of the
+	// Chart2D.js render() method (prior to return)
+	if(this.surface.render){this.surface.render()};
+
+Known Limitations:
+1) event handling- plan is to capture all events at canvas, perform intersect/hit
+   tests (not implemented) against scene graph, then propogate event to top-most
+   intersected shape.  HtmlCanvas shape need intersectsStroke and intersectsBounds,
+   and intersects (region).
+2) SVG and VML are "live" scene graphs; eg. any state change to objects in the
+   scene automatically get rendered in next engine render pass. For canvas, it's
+   procedural, and current implementation requires application to call surface.render()
+   whenever scene needs to be updated. Plan is to do dirty region checking based
+   on bounding boxes (currently not properly computed), and track dirty areas anytime
+   state changes (invalidate) separate from render phase.
+   Add the following call where changes to the scene graph are complete and you want to
+   render:
+
+	if (surface.render){surface.render();}
+
+4) Text/Text Paths - Text shape is implemented using DIV overlays.  Many text styles are not
+   applied, and outline/fills are not possible.  This is due to limitations in Canvas spec.
+   Firefox 3.0 has proprietary text functions that we could test for and use once FF3 is out.
+   No luck on Safari.
+3) No Image skewing - Limitation of Canvas
+
+Known Bugs:
+1) Matrix xformations (applied from root to shape leaf nodes) not quite right--but very close.
+   Canvas does not have a built in transformation function that allows skewing.  Need to
+   track skew matrix with Shape, and perform other trans/rot/scale transformations without
+   using canvas transform functions.
+
+SVGWeb Integration Status
+
+See README-svgweb.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/gfx.js
+http://svn.dojotoolkit.org/var/src/dojo/dojox/trunk/gfx/*
+
+Install into the following directory structure:
+/dojox/gfx/
+
+...which should be at the same level as your Dojo checkout.
+-------------------------------------------------------------------------------
Index: trunk/web/dojo/dojox/gfx/svg_attach.js
===================================================================
--- trunk/web/dojo/dojox/gfx/svg_attach.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/svg_attach.js	(revision 9)
@@ -0,0 +1,191 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo.require("dojox.gfx.svg");
+dojo.experimental("dojox.gfx.svg_attach");
+(function(){
+dojox.gfx.attachNode=function(_1){
+if(!_1){
+return null;
+}
+var s=null;
+switch(_1.tagName.toLowerCase()){
+case dojox.gfx.Rect.nodeType:
+s=new dojox.gfx.Rect(_1);
+_2(s);
+break;
+case dojox.gfx.Ellipse.nodeType:
+s=new dojox.gfx.Ellipse(_1);
+_3(s,dojox.gfx.defaultEllipse);
+break;
+case dojox.gfx.Polyline.nodeType:
+s=new dojox.gfx.Polyline(_1);
+_3(s,dojox.gfx.defaultPolyline);
+break;
+case dojox.gfx.Path.nodeType:
+s=new dojox.gfx.Path(_1);
+_3(s,dojox.gfx.defaultPath);
+break;
+case dojox.gfx.Circle.nodeType:
+s=new dojox.gfx.Circle(_1);
+_3(s,dojox.gfx.defaultCircle);
+break;
+case dojox.gfx.Line.nodeType:
+s=new dojox.gfx.Line(_1);
+_3(s,dojox.gfx.defaultLine);
+break;
+case dojox.gfx.Image.nodeType:
+s=new dojox.gfx.Image(_1);
+_3(s,dojox.gfx.defaultImage);
+break;
+case dojox.gfx.Text.nodeType:
+var t=_1.getElementsByTagName("textPath");
+if(t&&t.length){
+s=new dojox.gfx.TextPath(_1);
+_3(s,dojox.gfx.defaultPath);
+_4(s);
+}else{
+s=new dojox.gfx.Text(_1);
+_5(s);
+}
+_6(s);
+break;
+default:
+return null;
+}
+if(!(s instanceof dojox.gfx.Image)){
+_7(s);
+_8(s);
+}
+_9(s);
+return s;
+};
+dojox.gfx.attachSurface=function(_a){
+var s=new dojox.gfx.Surface();
+s.rawNode=_a;
+var _b=_a.getElementsByTagName("defs");
+if(_b.length==0){
+return null;
+}
+s.defNode=_b[0];
+return s;
+};
+var _7=function(_c){
+var _d=_c.rawNode.getAttribute("fill");
+if(_d=="none"){
+_c.fillStyle=null;
+return;
+}
+var _e=null,_f=dojox.gfx.svg.getRef(_d);
+if(_f){
+switch(_f.tagName.toLowerCase()){
+case "lineargradient":
+_e=_10(dojox.gfx.defaultLinearGradient,_f);
+dojo.forEach(["x1","y1","x2","y2"],function(x){
+_e[x]=_f.getAttribute(x);
+});
+break;
+case "radialgradient":
+_e=_10(dojox.gfx.defaultRadialGradient,_f);
+dojo.forEach(["cx","cy","r"],function(x){
+_e[x]=_f.getAttribute(x);
+});
+_e.cx=_f.getAttribute("cx");
+_e.cy=_f.getAttribute("cy");
+_e.r=_f.getAttribute("r");
+break;
+case "pattern":
+_e=dojo.lang.shallowCopy(dojox.gfx.defaultPattern,true);
+dojo.forEach(["x","y","width","height"],function(x){
+_e[x]=_f.getAttribute(x);
+});
+_e.src=_f.firstChild.getAttributeNS(dojox.gfx.svg.xmlns.xlink,"href");
+break;
+}
+}else{
+_e=new dojo.Color(_d);
+var _11=_c.rawNode.getAttribute("fill-opacity");
+if(_11!=null){
+_e.a=_11;
+}
+}
+_c.fillStyle=_e;
+};
+var _10=function(_12,_13){
+var _14=dojo.clone(_12);
+_14.colors=[];
+for(var i=0;i<_13.childNodes.length;++i){
+_14.colors.push({offset:_13.childNodes[i].getAttribute("offset"),color:new dojo.Color(_13.childNodes[i].getAttribute("stop-color"))});
+}
+return _14;
+};
+var _8=function(_15){
+var _16=_15.rawNode,_17=_16.getAttribute("stroke");
+if(_17==null||_17=="none"){
+_15.strokeStyle=null;
+return;
+}
+var _18=_15.strokeStyle=dojo.clone(dojox.gfx.defaultStroke);
+var _19=new dojo.Color(_17);
+if(_19){
+_18.color=_19;
+_18.color.a=_16.getAttribute("stroke-opacity");
+_18.width=_16.getAttribute("stroke-width");
+_18.cap=_16.getAttribute("stroke-linecap");
+_18.join=_16.getAttribute("stroke-linejoin");
+if(_18.join=="miter"){
+_18.join=_16.getAttribute("stroke-miterlimit");
+}
+_18.style=_16.getAttribute("dojoGfxStrokeStyle");
+}
+};
+var _9=function(_1a){
+var _1b=_1a.rawNode.getAttribute("transform");
+if(_1b.match(/^matrix\(.+\)$/)){
+var t=_1b.slice(7,-1).split(",");
+_1a.matrix=dojox.gfx.matrix.normalize({xx:parseFloat(t[0]),xy:parseFloat(t[2]),yx:parseFloat(t[1]),yy:parseFloat(t[3]),dx:parseFloat(t[4]),dy:parseFloat(t[5])});
+}else{
+_1a.matrix=null;
+}
+};
+var _6=function(_1c){
+var _1d=_1c.fontStyle=dojo.clone(dojox.gfx.defaultFont),r=_1c.rawNode;
+_1d.style=r.getAttribute("font-style");
+_1d.variant=r.getAttribute("font-variant");
+_1d.weight=r.getAttribute("font-weight");
+_1d.size=r.getAttribute("font-size");
+_1d.family=r.getAttribute("font-family");
+};
+var _3=function(_1e,def){
+var _1f=_1e.shape=dojo.clone(def),r=_1e.rawNode;
+for(var i in _1f){
+_1f[i]=r.getAttribute(i);
+}
+};
+var _2=function(_20){
+_3(_20,dojox.gfx.defaultRect);
+_20.shape.r=Math.min(_20.rawNode.getAttribute("rx"),_20.rawNode.getAttribute("ry"));
+};
+var _5=function(_21){
+var _22=_21.shape=dojo.clone(dojox.gfx.defaultText),r=_21.rawNode;
+_22.x=r.getAttribute("x");
+_22.y=r.getAttribute("y");
+_22.align=r.getAttribute("text-anchor");
+_22.decoration=r.getAttribute("text-decoration");
+_22.rotated=parseFloat(r.getAttribute("rotate"))!=0;
+_22.kerning=r.getAttribute("kerning")=="auto";
+_22.text=r.firstChild.nodeValue;
+};
+var _4=function(_23){
+var _24=_23.shape=dojo.clone(dojox.gfx.defaultTextPath),r=_23.rawNode;
+_24.align=r.getAttribute("text-anchor");
+_24.decoration=r.getAttribute("text-decoration");
+_24.rotated=parseFloat(r.getAttribute("rotate"))!=0;
+_24.kerning=r.getAttribute("kerning")=="auto";
+_24.text=r.firstChild.nodeValue;
+};
+})();
Index: trunk/web/dojo/dojox/gfx/Mover.js
===================================================================
--- trunk/web/dojo/dojox/gfx/Mover.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/Mover.js	(revision 9)
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.Mover"]){
+dojo._hasResource["dojox.gfx.Mover"]=true;
+dojo.provide("dojox.gfx.Mover");
+dojo.declare("dojox.gfx.Mover",null,{constructor:function(_1,e,_2){
+this.shape=_1;
+this.lastX=e.clientX;
+this.lastY=e.clientY;
+var h=this.host=_2,d=document,_3=dojo.connect(d,"onmousemove",this,"onFirstMove");
+this.events=[dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"destroy"),dojo.connect(d,"ondragstart",dojo,"stopEvent"),dojo.connect(d,"onselectstart",dojo,"stopEvent"),_3];
+if(h&&h.onMoveStart){
+h.onMoveStart(this);
+}
+},onMouseMove:function(e){
+var x=e.clientX;
+var y=e.clientY;
+this.host.onMove(this,{dx:x-this.lastX,dy:y-this.lastY});
+this.lastX=x;
+this.lastY=y;
+dojo.stopEvent(e);
+},onFirstMove:function(){
+this.host.onFirstMove(this);
+dojo.disconnect(this.events.pop());
+},destroy:function(){
+dojo.forEach(this.events,dojo.disconnect);
+var h=this.host;
+if(h&&h.onMoveStop){
+h.onMoveStop(this);
+}
+this.events=this.shape=null;
+}});
+}
Index: trunk/web/dojo/dojox/gfx/Moveable.js
===================================================================
--- trunk/web/dojo/dojox/gfx/Moveable.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/Moveable.js	(revision 9)
@@ -0,0 +1,53 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.Moveable"]){
+dojo._hasResource["dojox.gfx.Moveable"]=true;
+dojo.provide("dojox.gfx.Moveable");
+dojo.require("dojox.gfx.Mover");
+dojo.declare("dojox.gfx.Moveable",null,{constructor:function(_1,_2){
+this.shape=_1;
+this.delay=(_2&&_2.delay>0)?_2.delay:0;
+this.mover=(_2&&_2.mover)?_2.mover:dojox.gfx.Mover;
+this.events=[this.shape.connect("onmousedown",this,"onMouseDown")];
+},destroy:function(){
+dojo.forEach(this.events,this.shape.disconnect,this.shape);
+this.events=this.shape=null;
+},onMouseDown:function(e){
+if(this.delay){
+this.events.push(this.shape.connect("onmousemove",this,"onMouseMove"));
+this.events.push(this.shape.connect("onmouseup",this,"onMouseUp"));
+this._lastX=e.clientX;
+this._lastY=e.clientY;
+}else{
+new this.mover(this.shape,e,this);
+}
+dojo.stopEvent(e);
+},onMouseMove:function(e){
+if(Math.abs(e.clientX-this._lastX)>this.delay||Math.abs(e.clientY-this._lastY)>this.delay){
+this.onMouseUp(e);
+new this.mover(this.shape,e,this);
+}
+dojo.stopEvent(e);
+},onMouseUp:function(e){
+this.shape.disconnect(this.events.pop());
+this.shape.disconnect(this.events.pop());
+},onMoveStart:function(_3){
+dojo.publish("/gfx/move/start",[_3]);
+dojo.addClass(dojo.body(),"dojoMove");
+},onMoveStop:function(_4){
+dojo.publish("/gfx/move/stop",[_4]);
+dojo.removeClass(dojo.body(),"dojoMove");
+},onFirstMove:function(_5){
+},onMove:function(_6,_7){
+this.onMoving(_6,_7);
+this.shape.applyLeftTransform(_7);
+this.onMoved(_6,_7);
+},onMoving:function(_8,_9){
+},onMoved:function(_a,_b){
+}});
+}
Index: trunk/web/dojo/dojox/gfx/path.js
===================================================================
--- trunk/web/dojo/dojox/gfx/path.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/path.js	(revision 9)
@@ -0,0 +1,326 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.path"]){
+dojo._hasResource["dojox.gfx.path"]=true;
+dojo.provide("dojox.gfx.path");
+dojo.require("dojox.gfx.matrix");
+dojo.require("dojox.gfx.shape");
+dojo.declare("dojox.gfx.path.Path",dojox.gfx.Shape,{constructor:function(_1){
+this.shape=dojo.clone(dojox.gfx.defaultPath);
+this.segments=[];
+this.tbbox=null;
+this.absolute=true;
+this.last={};
+this.rawNode=_1;
+this.segmented=false;
+},setAbsoluteMode:function(_2){
+this._confirmSegmented();
+this.absolute=typeof _2=="string"?(_2=="absolute"):_2;
+return this;
+},getAbsoluteMode:function(){
+this._confirmSegmented();
+return this.absolute;
+},getBoundingBox:function(){
+this._confirmSegmented();
+return (this.bbox&&("l" in this.bbox))?{x:this.bbox.l,y:this.bbox.t,width:this.bbox.r-this.bbox.l,height:this.bbox.b-this.bbox.t}:null;
+},_getRealBBox:function(){
+this._confirmSegmented();
+if(this.tbbox){
+return this.tbbox;
+}
+var _3=this.bbox,_4=this._getRealMatrix();
+this.bbox=null;
+for(var i=0,_5=this.segments.length;i<_5;++i){
+this._updateWithSegment(this.segments[i],_4);
+}
+var t=this.bbox;
+this.bbox=_3;
+this.tbbox=t?[{x:t.l,y:t.t},{x:t.r,y:t.t},{x:t.r,y:t.b},{x:t.l,y:t.b}]:null;
+return this.tbbox;
+},getLastPosition:function(){
+this._confirmSegmented();
+return "x" in this.last?this.last:null;
+},_applyTransform:function(){
+this.tbbox=null;
+return dojox.gfx.Shape.prototype._applyTransform.call(this);
+},_updateBBox:function(x,y,_6){
+if(_6){
+var t=dojox.gfx.matrix.multiplyPoint(_6,x,y);
+x=t.x;
+y=t.y;
+}
+if(this.bbox&&("l" in this.bbox)){
+if(this.bbox.l>x){
+this.bbox.l=x;
+}
+if(this.bbox.r<x){
+this.bbox.r=x;
+}
+if(this.bbox.t>y){
+this.bbox.t=y;
+}
+if(this.bbox.b<y){
+this.bbox.b=y;
+}
+}else{
+this.bbox={l:x,b:y,r:x,t:y};
+}
+},_updateWithSegment:function(_7,_8){
+var n=_7.args,l=n.length;
+switch(_7.action){
+case "M":
+case "L":
+case "C":
+case "S":
+case "Q":
+case "T":
+for(var i=0;i<l;i+=2){
+this._updateBBox(n[i],n[i+1],_8);
+}
+this.last.x=n[l-2];
+this.last.y=n[l-1];
+this.absolute=true;
+break;
+case "H":
+for(var i=0;i<l;++i){
+this._updateBBox(n[i],this.last.y,_8);
+}
+this.last.x=n[l-1];
+this.absolute=true;
+break;
+case "V":
+for(var i=0;i<l;++i){
+this._updateBBox(this.last.x,n[i],_8);
+}
+this.last.y=n[l-1];
+this.absolute=true;
+break;
+case "m":
+var _9=0;
+if(!("x" in this.last)){
+this._updateBBox(this.last.x=n[0],this.last.y=n[1],_8);
+_9=2;
+}
+for(var i=_9;i<l;i+=2){
+this._updateBBox(this.last.x+=n[i],this.last.y+=n[i+1],_8);
+}
+this.absolute=false;
+break;
+case "l":
+case "t":
+for(var i=0;i<l;i+=2){
+this._updateBBox(this.last.x+=n[i],this.last.y+=n[i+1],_8);
+}
+this.absolute=false;
+break;
+case "h":
+for(var i=0;i<l;++i){
+this._updateBBox(this.last.x+=n[i],this.last.y,_8);
+}
+this.absolute=false;
+break;
+case "v":
+for(var i=0;i<l;++i){
+this._updateBBox(this.last.x,this.last.y+=n[i],_8);
+}
+this.absolute=false;
+break;
+case "c":
+for(var i=0;i<l;i+=6){
+this._updateBBox(this.last.x+n[i],this.last.y+n[i+1],_8);
+this._updateBBox(this.last.x+n[i+2],this.last.y+n[i+3],_8);
+this._updateBBox(this.last.x+=n[i+4],this.last.y+=n[i+5],_8);
+}
+this.absolute=false;
+break;
+case "s":
+case "q":
+for(var i=0;i<l;i+=4){
+this._updateBBox(this.last.x+n[i],this.last.y+n[i+1],_8);
+this._updateBBox(this.last.x+=n[i+2],this.last.y+=n[i+3],_8);
+}
+this.absolute=false;
+break;
+case "A":
+for(var i=0;i<l;i+=7){
+this._updateBBox(n[i+5],n[i+6],_8);
+}
+this.last.x=n[l-2];
+this.last.y=n[l-1];
+this.absolute=true;
+break;
+case "a":
+for(var i=0;i<l;i+=7){
+this._updateBBox(this.last.x+=n[i+5],this.last.y+=n[i+6],_8);
+}
+this.absolute=false;
+break;
+}
+var _a=[_7.action];
+for(var i=0;i<l;++i){
+_a.push(dojox.gfx.formatNumber(n[i],true));
+}
+if(typeof this.shape.path=="string"){
+this.shape.path+=_a.join("");
+}else{
+Array.prototype.push.apply(this.shape.path,_a);
+}
+},_validSegments:{m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7,z:0},_pushSegment:function(_b,_c){
+this.tbbox=null;
+var _d=this._validSegments[_b.toLowerCase()];
+if(typeof _d=="number"){
+if(_d){
+if(_c.length>=_d){
+var _e={action:_b,args:_c.slice(0,_c.length-_c.length%_d)};
+this.segments.push(_e);
+this._updateWithSegment(_e);
+}
+}else{
+var _e={action:_b,args:[]};
+this.segments.push(_e);
+this._updateWithSegment(_e);
+}
+}
+},_collectArgs:function(_f,_10){
+for(var i=0;i<_10.length;++i){
+var t=_10[i];
+if(typeof t=="boolean"){
+_f.push(t?1:0);
+}else{
+if(typeof t=="number"){
+_f.push(t);
+}else{
+if(t instanceof Array){
+this._collectArgs(_f,t);
+}else{
+if("x" in t&&"y" in t){
+_f.push(t.x,t.y);
+}
+}
+}
+}
+}
+},moveTo:function(){
+this._confirmSegmented();
+var _11=[];
+this._collectArgs(_11,arguments);
+this._pushSegment(this.absolute?"M":"m",_11);
+return this;
+},lineTo:function(){
+this._confirmSegmented();
+var _12=[];
+this._collectArgs(_12,arguments);
+this._pushSegment(this.absolute?"L":"l",_12);
+return this;
+},hLineTo:function(){
+this._confirmSegmented();
+var _13=[];
+this._collectArgs(_13,arguments);
+this._pushSegment(this.absolute?"H":"h",_13);
+return this;
+},vLineTo:function(){
+this._confirmSegmented();
+var _14=[];
+this._collectArgs(_14,arguments);
+this._pushSegment(this.absolute?"V":"v",_14);
+return this;
+},curveTo:function(){
+this._confirmSegmented();
+var _15=[];
+this._collectArgs(_15,arguments);
+this._pushSegment(this.absolute?"C":"c",_15);
+return this;
+},smoothCurveTo:function(){
+this._confirmSegmented();
+var _16=[];
+this._collectArgs(_16,arguments);
+this._pushSegment(this.absolute?"S":"s",_16);
+return this;
+},qCurveTo:function(){
+this._confirmSegmented();
+var _17=[];
+this._collectArgs(_17,arguments);
+this._pushSegment(this.absolute?"Q":"q",_17);
+return this;
+},qSmoothCurveTo:function(){
+this._confirmSegmented();
+var _18=[];
+this._collectArgs(_18,arguments);
+this._pushSegment(this.absolute?"T":"t",_18);
+return this;
+},arcTo:function(){
+this._confirmSegmented();
+var _19=[];
+this._collectArgs(_19,arguments);
+this._pushSegment(this.absolute?"A":"a",_19);
+return this;
+},closePath:function(){
+this._confirmSegmented();
+this._pushSegment("Z",[]);
+return this;
+},_confirmSegmented:function(){
+if(!this.segmented){
+var _1a=this.shape.path;
+this.shape.path=[];
+this._setPath(_1a);
+this.shape.path=this.shape.path.join("");
+this.segmented=true;
+}
+},_setPath:function(_1b){
+var p=dojo.isArray(_1b)?_1b:_1b.match(dojox.gfx.pathSvgRegExp);
+this.segments=[];
+this.absolute=true;
+this.bbox={};
+this.last={};
+if(!p){
+return;
+}
+var _1c="",_1d=[],l=p.length;
+for(var i=0;i<l;++i){
+var t=p[i],x=parseFloat(t);
+if(isNaN(x)){
+if(_1c){
+this._pushSegment(_1c,_1d);
+}
+_1d=[];
+_1c=t;
+}else{
+_1d.push(x);
+}
+}
+this._pushSegment(_1c,_1d);
+},setShape:function(_1e){
+dojox.gfx.Shape.prototype.setShape.call(this,typeof _1e=="string"?{path:_1e}:_1e);
+this.segmented=false;
+this.segments=[];
+if(!dojox.gfx.lazyPathSegmentation){
+this._confirmSegmented();
+}
+return this;
+},_2PI:Math.PI*2});
+dojo.declare("dojox.gfx.path.TextPath",dojox.gfx.path.Path,{constructor:function(_1f){
+if(!("text" in this)){
+this.text=dojo.clone(dojox.gfx.defaultTextPath);
+}
+if(!("fontStyle" in this)){
+this.fontStyle=dojo.clone(dojox.gfx.defaultFont);
+}
+},getText:function(){
+return this.text;
+},setText:function(_20){
+this.text=dojox.gfx.makeParameters(this.text,typeof _20=="string"?{text:_20}:_20);
+this._setText();
+return this;
+},getFont:function(){
+return this.fontStyle;
+},setFont:function(_21){
+this.fontStyle=typeof _21=="string"?dojox.gfx.splitFontString(_21):dojox.gfx.makeParameters(dojox.gfx.defaultFont,_21);
+this._setFont();
+return this;
+}});
+}
Index: trunk/web/dojo/dojox/gfx/silverlight.js
===================================================================
--- trunk/web/dojo/dojox/gfx/silverlight.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/silverlight.js	(revision 9)
@@ -0,0 +1,506 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.silverlight"]){
+dojo._hasResource["dojox.gfx.silverlight"]=true;
+dojo.provide("dojox.gfx.silverlight");
+dojo.require("dojox.gfx._base");
+dojo.require("dojox.gfx.shape");
+dojo.require("dojox.gfx.path");
+dojo.experimental("dojox.gfx.silverlight");
+dojox.gfx.silverlight.dasharray={solid:"none",shortdash:[4,1],shortdot:[1,1],shortdashdot:[4,1,1,1],shortdashdotdot:[4,1,1,1,1,1],dot:[1,3],dash:[4,3],longdash:[8,3],dashdot:[4,3,1,3],longdashdot:[8,3,1,3],longdashdotdot:[8,3,1,3,1,3]};
+dojox.gfx.silverlight.fontweight={normal:400,bold:700};
+dojox.gfx.silverlight.caps={butt:"Flat",round:"Round",square:"Square"};
+dojox.gfx.silverlight.joins={bevel:"Bevel",round:"Round"};
+dojox.gfx.silverlight.fonts={serif:"Times New Roman",times:"Times New Roman","sans-serif":"Arial",helvetica:"Arial",monotone:"Courier New",courier:"Courier New"};
+dojox.gfx.silverlight.hexColor=function(_1){
+var c=dojox.gfx.normalizeColor(_1),t=c.toHex(),a=Math.round(c.a*255);
+a=(a<0?0:a>255?255:a).toString(16);
+return "#"+(a.length<2?"0"+a:a)+t.slice(1);
+};
+dojo.extend(dojox.gfx.Shape,{setFill:function(_2){
+var p=this.rawNode.getHost().content,r=this.rawNode,f;
+if(!_2){
+this.fillStyle=null;
+this._setFillAttr(null);
+return this;
+}
+if(typeof (_2)=="object"&&"type" in _2){
+switch(_2.type){
+case "linear":
+this.fillStyle=f=dojox.gfx.makeParameters(dojox.gfx.defaultLinearGradient,_2);
+var _3=p.createFromXaml("<LinearGradientBrush/>");
+_3.mappingMode="Absolute";
+_3.startPoint=f.x1+","+f.y1;
+_3.endPoint=f.x2+","+f.y2;
+dojo.forEach(f.colors,function(c){
+var t=p.createFromXaml("<GradientStop/>");
+t.offset=c.offset;
+t.color=dojox.gfx.silverlight.hexColor(c.color);
+_3.gradientStops.add(t);
+});
+this._setFillAttr(_3);
+break;
+case "radial":
+this.fillStyle=f=dojox.gfx.makeParameters(dojox.gfx.defaultRadialGradient,_2);
+var _4=p.createFromXaml("<RadialGradientBrush/>"),c=dojox.gfx.matrix.multiplyPoint(dojox.gfx.matrix.invert(this._getAdjustedMatrix()),f.cx,f.cy),pt=c.x+","+c.y;
+_4.mappingMode="Absolute";
+_4.gradientOrigin=pt;
+_4.center=pt;
+_4.radiusX=_4.radiusY=f.r;
+dojo.forEach(f.colors,function(c){
+var t=p.createFromXaml("<GradientStop/>");
+t.offset=c.offset;
+t.color=dojox.gfx.silverlight.hexColor(c.color);
+_4.gradientStops.add(t);
+});
+this._setFillAttr(_4);
+break;
+case "pattern":
+this.fillStyle=null;
+this._setFillAttr(null);
+break;
+}
+return this;
+}
+this.fillStyle=f=dojox.gfx.normalizeColor(_2);
+var _5=p.createFromXaml("<SolidColorBrush/>");
+_5.color=f.toHex();
+_5.opacity=f.a;
+this._setFillAttr(_5);
+return this;
+},_setFillAttr:function(f){
+this.rawNode.fill=f;
+},setStroke:function(_6){
+var p=this.rawNode.getHost().content,r=this.rawNode;
+if(!_6){
+this.strokeStyle=null;
+r.stroke=null;
+return this;
+}
+if(typeof _6=="string"||dojo.isArray(_6)||_6 instanceof dojo.Color){
+_6={color:_6};
+}
+var s=this.strokeStyle=dojox.gfx.makeParameters(dojox.gfx.defaultStroke,_6);
+s.color=dojox.gfx.normalizeColor(s.color);
+if(s){
+var _7=p.createFromXaml("<SolidColorBrush/>");
+_7.color=s.color.toHex();
+_7.opacity=s.color.a;
+r.stroke=_7;
+r.strokeThickness=s.width;
+r.strokeStartLineCap=r.strokeEndLineCap=r.strokeDashCap=dojox.gfx.silverlight.caps[s.cap];
+if(typeof s.join=="number"){
+r.strokeLineJoin="Miter";
+r.strokeMiterLimit=s.join;
+}else{
+r.strokeLineJoin=dojox.gfx.silverlight.joins[s.join];
+}
+var da=s.style.toLowerCase();
+if(da in dojox.gfx.silverlight.dasharray){
+da=dojox.gfx.silverlight.dasharray[da];
+}
+if(da instanceof Array){
+da=dojo.clone(da);
+var i;
+if(s.cap!="butt"){
+for(i=0;i<da.length;i+=2){
+--da[i];
+if(da[i]<1){
+da[i]=1;
+}
+}
+for(i=1;i<da.length;i+=2){
+++da[i];
+}
+}
+r.strokeDashArray=da.join(",");
+}else{
+r.strokeDashArray=null;
+}
+}
+return this;
+},_getParentSurface:function(){
+var _8=this.parent;
+for(;_8&&!(_8 instanceof dojox.gfx.Surface);_8=_8.parent){
+}
+return _8;
+},_applyTransform:function(){
+var tm=this._getAdjustedMatrix(),r=this.rawNode;
+if(tm){
+var p=this.rawNode.getHost().content,m=p.createFromXaml("<MatrixTransform/>"),mm=p.createFromXaml("<Matrix/>");
+mm.m11=tm.xx;
+mm.m21=tm.xy;
+mm.m12=tm.yx;
+mm.m22=tm.yy;
+mm.offsetX=tm.dx;
+mm.offsetY=tm.dy;
+m.matrix=mm;
+r.renderTransform=m;
+}else{
+r.renderTransform=null;
+}
+return this;
+},setRawNode:function(_9){
+_9.fill=null;
+_9.stroke=null;
+this.rawNode=_9;
+},_moveToFront:function(){
+var c=this.parent.rawNode.children,r=this.rawNode;
+c.remove(r);
+c.add(r);
+return this;
+},_moveToBack:function(){
+var c=this.parent.rawNode.children,r=this.rawNode;
+c.remove(r);
+c.insert(0,r);
+return this;
+},_getAdjustedMatrix:function(){
+return this.matrix;
+}});
+dojo.declare("dojox.gfx.Group",dojox.gfx.Shape,{constructor:function(){
+dojox.gfx.silverlight.Container._init.call(this);
+},setRawNode:function(_a){
+this.rawNode=_a;
+}});
+dojox.gfx.Group.nodeType="Canvas";
+dojo.declare("dojox.gfx.Rect",dojox.gfx.shape.Rect,{setShape:function(_b){
+this.shape=dojox.gfx.makeParameters(this.shape,_b);
+this.bbox=null;
+var r=this.rawNode,n=this.shape;
+r.width=n.width;
+r.height=n.height;
+r.radiusX=r.radiusY=n.r;
+return this._applyTransform();
+},_getAdjustedMatrix:function(){
+var m=this.matrix,s=this.shape,d={dx:s.x,dy:s.y};
+return new dojox.gfx.Matrix2D(m?[m,d]:d);
+}});
+dojox.gfx.Rect.nodeType="Rectangle";
+dojo.declare("dojox.gfx.Ellipse",dojox.gfx.shape.Ellipse,{setShape:function(_c){
+this.shape=dojox.gfx.makeParameters(this.shape,_c);
+this.bbox=null;
+var r=this.rawNode,n=this.shape;
+r.width=2*n.rx;
+r.height=2*n.ry;
+return this._applyTransform();
+},_getAdjustedMatrix:function(){
+var m=this.matrix,s=this.shape,d={dx:s.cx-s.rx,dy:s.cy-s.ry};
+return new dojox.gfx.Matrix2D(m?[m,d]:d);
+}});
+dojox.gfx.Ellipse.nodeType="Ellipse";
+dojo.declare("dojox.gfx.Circle",dojox.gfx.shape.Circle,{setShape:function(_d){
+this.shape=dojox.gfx.makeParameters(this.shape,_d);
+this.bbox=null;
+var r=this.rawNode,n=this.shape;
+r.width=r.height=2*n.r;
+return this._applyTransform();
+},_getAdjustedMatrix:function(){
+var m=this.matrix,s=this.shape,d={dx:s.cx-s.r,dy:s.cy-s.r};
+return new dojox.gfx.Matrix2D(m?[m,d]:d);
+}});
+dojox.gfx.Circle.nodeType="Ellipse";
+dojo.declare("dojox.gfx.Line",dojox.gfx.shape.Line,{setShape:function(_e){
+this.shape=dojox.gfx.makeParameters(this.shape,_e);
+this.bbox=null;
+var r=this.rawNode,n=this.shape;
+r.x1=n.x1;
+r.y1=n.y1;
+r.x2=n.x2;
+r.y2=n.y2;
+return this;
+}});
+dojox.gfx.Line.nodeType="Line";
+dojo.declare("dojox.gfx.Polyline",dojox.gfx.shape.Polyline,{setShape:function(_f,_10){
+if(_f&&_f instanceof Array){
+this.shape=dojox.gfx.makeParameters(this.shape,{points:_f});
+if(_10&&this.shape.points.length){
+this.shape.points.push(this.shape.points[0]);
+}
+}else{
+this.shape=dojox.gfx.makeParameters(this.shape,_f);
+}
+this.bbox=null;
+this._normalizePoints();
+var p=this.shape.points,rp=[];
+for(var i=0;i<p.length;++i){
+rp.push(p[i].x,p[i].y);
+}
+this.rawNode.points=rp.join(",");
+return this;
+}});
+dojox.gfx.Polyline.nodeType="Polyline";
+dojo.declare("dojox.gfx.Image",dojox.gfx.shape.Image,{setShape:function(_11){
+this.shape=dojox.gfx.makeParameters(this.shape,_11);
+this.bbox=null;
+var r=this.rawNode,n=this.shape;
+r.width=n.width;
+r.height=n.height;
+r.source=n.src;
+return this._applyTransform();
+},_getAdjustedMatrix:function(){
+var m=this.matrix,s=this.shape,d={dx:s.x,dy:s.y};
+return new dojox.gfx.Matrix2D(m?[m,d]:d);
+},setRawNode:function(_12){
+this.rawNode=_12;
+}});
+dojox.gfx.Image.nodeType="Image";
+dojo.declare("dojox.gfx.Text",dojox.gfx.shape.Text,{setShape:function(_13){
+this.shape=dojox.gfx.makeParameters(this.shape,_13);
+this.bbox=null;
+var r=this.rawNode,s=this.shape;
+r.text=s.text;
+r.textDecorations=s.decoration==="underline"?"Underline":"None";
+r["Canvas.Left"]=-10000;
+r["Canvas.Top"]=-10000;
+if(!this._delay){
+this._delay=window.setTimeout(dojo.hitch(this,"_delayAlignment"),10);
+}
+return this;
+},_delayAlignment:function(){
+var r=this.rawNode,s=this.shape,w=r.actualWidth,h=r.actualHeight,x=s.x,y=s.y-h*0.75;
+switch(s.align){
+case "middle":
+x-=w/2;
+break;
+case "end":
+x-=w;
+break;
+}
+this._delta={dx:x,dy:y};
+r["Canvas.Left"]=0;
+r["Canvas.Top"]=0;
+this._applyTransform();
+delete this._delay;
+},_getAdjustedMatrix:function(){
+var m=this.matrix,d=this._delta,x;
+if(m){
+x=d?[m,d]:m;
+}else{
+x=d?d:{};
+}
+return new dojox.gfx.Matrix2D(x);
+},setStroke:function(){
+return this;
+},_setFillAttr:function(f){
+this.rawNode.foreground=f;
+},setRawNode:function(_14){
+this.rawNode=_14;
+},getTextWidth:function(){
+return this.rawNode.actualWidth;
+}});
+dojox.gfx.Text.nodeType="TextBlock";
+dojo.declare("dojox.gfx.Path",dojox.gfx.path.Path,{_updateWithSegment:function(_15){
+dojox.gfx.Path.superclass._updateWithSegment.apply(this,arguments);
+var p=this.shape.path;
+if(typeof (p)=="string"){
+this.rawNode.data=p?p:null;
+}
+},setShape:function(_16){
+dojox.gfx.Path.superclass.setShape.apply(this,arguments);
+var p=this.shape.path;
+this.rawNode.data=p?p:null;
+return this;
+}});
+dojox.gfx.Path.nodeType="Path";
+dojo.declare("dojox.gfx.TextPath",dojox.gfx.path.TextPath,{_updateWithSegment:function(_17){
+},setShape:function(_18){
+},_setText:function(){
+}});
+dojox.gfx.TextPath.nodeType="text";
+dojox.gfx.silverlight.surfaces={};
+dojox.gfx.silverlight.nullFunc=function(){
+};
+dojo.declare("dojox.gfx.Surface",dojox.gfx.shape.Surface,{constructor:function(){
+dojox.gfx.silverlight.Container._init.call(this);
+},destroy:function(){
+window[this._onLoadName]=dojox.gfx.silverlight.nullFunc;
+delete dojox.gfx.silverlight.surfaces[this.rawNode.name];
+this.inherited(arguments);
+},setDimensions:function(_19,_1a){
+this.width=dojox.gfx.normalizedLength(_19);
+this.height=dojox.gfx.normalizedLength(_1a);
+var p=this.rawNode&&this.rawNode.getHost();
+if(p){
+p.width=_19;
+p.height=_1a;
+}
+return this;
+},getDimensions:function(){
+var p=this.rawNode&&this.rawNode.getHost();
+var t=p?{width:p.content.actualWidth,height:p.content.actualHeight}:null;
+if(t.width<=0){
+t.width=this.width;
+}
+if(t.height<=0){
+t.height=this.height;
+}
+return t;
+}});
+dojox.gfx.createSurface=function(_1b,_1c,_1d){
+if(!_1c&&!_1d){
+var pos=d.position(_1b);
+_1c=_1c||pos.w;
+_1d=_1d||pos.h;
+}
+if(typeof _1c=="number"){
+_1c=_1c+"px";
+}
+if(typeof _1d=="number"){
+_1d=_1d+"px";
+}
+var s=new dojox.gfx.Surface();
+_1b=dojo.byId(_1b);
+s._parent=_1b;
+var t=_1b.ownerDocument.createElement("script");
+t.type="text/xaml";
+t.id=dojox.gfx._base._getUniqueId();
+t.text="<?xml version='1.0'?><Canvas xmlns='http://schemas.microsoft.com/client/2007' Name='"+dojox.gfx._base._getUniqueId()+"'/>";
+_1b.parentNode.insertBefore(t,_1b);
+s._nodes.push(t);
+var obj,_1e=dojox.gfx._base._getUniqueId(),_1f="__"+dojox.gfx._base._getUniqueId()+"_onLoad";
+s._onLoadName=_1f;
+window[_1f]=function(_20){
+if(!s.rawNode){
+s.rawNode=dojo.byId(_1e).content.root;
+dojox.gfx.silverlight.surfaces[s.rawNode.name]=_1b;
+s.onLoad(s);
+}
+};
+if(dojo.isSafari){
+obj="<embed type='application/x-silverlight' id='"+_1e+"' width='"+_1c+"' height='"+_1d+" background='transparent'"+" source='#"+t.id+"'"+" windowless='true'"+" maxFramerate='60'"+" onLoad='"+_1f+"'"+" onError='__dojoSilverlightError'"+" /><iframe style='visibility:hidden;height:0;width:0'/>";
+}else{
+obj="<object type='application/x-silverlight' data='data:application/x-silverlight,' id='"+_1e+"' width='"+_1c+"' height='"+_1d+"'>"+"<param name='background' value='transparent' />"+"<param name='source' value='#"+t.id+"' />"+"<param name='windowless' value='true' />"+"<param name='maxFramerate' value='60' />"+"<param name='onLoad' value='"+_1f+"' />"+"<param name='onError' value='__dojoSilverlightError' />"+"</object>";
+}
+_1b.innerHTML=obj;
+var _21=dojo.byId(_1e);
+if(_21.content&&_21.content.root){
+s.rawNode=_21.content.root;
+dojox.gfx.silverlight.surfaces[s.rawNode.name]=_1b;
+}else{
+s.rawNode=null;
+s.isLoaded=false;
+}
+s._nodes.push(_21);
+s.width=dojox.gfx.normalizedLength(_1c);
+s.height=dojox.gfx.normalizedLength(_1d);
+return s;
+};
+__dojoSilverlightError=function(_22,err){
+var t="Silverlight Error:\n"+"Code: "+err.ErrorCode+"\n"+"Type: "+err.ErrorType+"\n"+"Message: "+err.ErrorMessage+"\n";
+switch(err.ErrorType){
+case "ParserError":
+t+="XamlFile: "+err.xamlFile+"\n"+"Line: "+err.lineNumber+"\n"+"Position: "+err.charPosition+"\n";
+break;
+case "RuntimeError":
+t+="MethodName: "+err.methodName+"\n";
+if(err.lineNumber!=0){
+t+="Line: "+err.lineNumber+"\n"+"Position: "+err.charPosition+"\n";
+}
+break;
+}
+console.error(t);
+};
+dojox.gfx.silverlight.Font={_setFont:function(){
+var f=this.fontStyle,r=this.rawNode,fw=dojox.gfx.silverlight.fontweight,fo=dojox.gfx.silverlight.fonts,t=f.family.toLowerCase();
+r.fontStyle=f.style=="italic"?"Italic":"Normal";
+r.fontWeight=f.weight in fw?fw[f.weight]:f.weight;
+r.fontSize=dojox.gfx.normalizedLength(f.size);
+r.fontFamily=t in fo?fo[t]:f.family;
+if(!this._delay){
+this._delay=window.setTimeout(dojo.hitch(this,"_delayAlignment"),10);
+}
+}};
+dojox.gfx.silverlight.Container={_init:function(){
+dojox.gfx.shape.Container._init.call(this);
+},add:function(_23){
+if(this!=_23.getParent()){
+dojox.gfx.shape.Container.add.apply(this,arguments);
+this.rawNode.children.add(_23.rawNode);
+}
+return this;
+},remove:function(_24,_25){
+if(this==_24.getParent()){
+var _26=_24.rawNode.getParent();
+if(_26){
+_26.children.remove(_24.rawNode);
+}
+dojox.gfx.shape.Container.remove.apply(this,arguments);
+}
+return this;
+},clear:function(){
+this.rawNode.children.clear();
+return dojox.gfx.shape.Container.clear.apply(this,arguments);
+},_moveChildToFront:dojox.gfx.shape.Container._moveChildToFront,_moveChildToBack:dojox.gfx.shape.Container._moveChildToBack};
+dojo.mixin(dojox.gfx.shape.Creator,{createObject:function(_27,_28){
+if(!this.rawNode){
+return null;
+}
+var _29=new _27();
+var _2a=this.rawNode.getHost().content.createFromXaml("<"+_27.nodeType+"/>");
+_29.setRawNode(_2a);
+_29.setShape(_28);
+this.add(_29);
+return _29;
+}});
+dojo.extend(dojox.gfx.Text,dojox.gfx.silverlight.Font);
+dojo.extend(dojox.gfx.Group,dojox.gfx.silverlight.Container);
+dojo.extend(dojox.gfx.Group,dojox.gfx.shape.Creator);
+dojo.extend(dojox.gfx.Surface,dojox.gfx.silverlight.Container);
+dojo.extend(dojox.gfx.Surface,dojox.gfx.shape.Creator);
+(function(){
+var _2b=dojox.gfx.silverlight.surfaces;
+var _2c=function(s,a){
+var ev={target:s,currentTarget:s,preventDefault:function(){
+},stopPropagation:function(){
+}};
+if(a){
+try{
+ev.ctrlKey=a.ctrl;
+ev.shiftKey=a.shift;
+var p=a.getPosition(null);
+ev.x=ev.offsetX=ev.layerX=p.x;
+ev.y=ev.offsetY=ev.layerY=p.y;
+var _2d=_2b[s.getHost().content.root.name];
+var t=dojo.position(_2d);
+ev.clientX=t.x+p.x;
+ev.clientY=t.y+p.y;
+}
+catch(e){
+}
+}
+return ev;
+};
+var _2e=function(s,a){
+var ev={keyCode:a.platformKeyCode,ctrlKey:a.ctrl,shiftKey:a.shift};
+return ev;
+};
+var _2f={onclick:{name:"MouseLeftButtonUp",fix:_2c},onmouseenter:{name:"MouseEnter",fix:_2c},onmouseleave:{name:"MouseLeave",fix:_2c},onmouseover:{name:"MouseEnter",fix:_2c},onmouseout:{name:"MouseLeave",fix:_2c},onmousedown:{name:"MouseLeftButtonDown",fix:_2c},onmouseup:{name:"MouseLeftButtonUp",fix:_2c},onmousemove:{name:"MouseMove",fix:_2c},onkeydown:{name:"KeyDown",fix:_2e},onkeyup:{name:"KeyUp",fix:_2e}};
+var _30={connect:function(_31,_32,_33){
+var _34,n=_31 in _2f?_2f[_31]:{name:_31,fix:function(){
+return {};
+}};
+if(arguments.length>2){
+_34=this.getEventSource().addEventListener(n.name,function(s,a){
+dojo.hitch(_32,_33)(n.fix(s,a));
+});
+}else{
+_34=this.getEventSource().addEventListener(n.name,function(s,a){
+_32(n.fix(s,a));
+});
+}
+return {name:n.name,token:_34};
+},disconnect:function(_35){
+this.getEventSource().removeEventListener(_35.name,_35.token);
+}};
+dojo.extend(dojox.gfx.Shape,_30);
+dojo.extend(dojox.gfx.Surface,_30);
+dojox.gfx.equalSources=function(a,b){
+return a&&b&&a.equals(b);
+};
+})();
+}
Index: trunk/web/dojo/dojox/gfx/gradient.js
===================================================================
--- trunk/web/dojo/dojox/gfx/gradient.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/gradient.js	(revision 9)
@@ -0,0 +1,84 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.gradient"]){
+dojo._hasResource["dojox.gfx.gradient"]=true;
+dojo.provide("dojox.gfx.gradient");
+dojo.require("dojox.gfx.matrix");
+(function(){
+var d=dojo,m=dojox.gfx.matrix,C=d.Color;
+dojox.gfx.gradient.rescale=function(_1,_2,to){
+var _3=_1.length,_4=(to<_2),_5;
+if(_4){
+var _6=_2;
+_2=to;
+to=_6;
+}
+if(!_3){
+return [];
+}
+if(to<=_1[0].offset){
+_5=[{offset:0,color:_1[0].color},{offset:1,color:_1[0].color}];
+}else{
+if(_2>=_1[_3-1].offset){
+_5=[{offset:0,color:_1[_3-1].color},{offset:1,color:_1[_3-1].color}];
+}else{
+var _7=to-_2,_8,_9,i;
+_5=[];
+if(_2<0){
+_5.push({offset:0,color:new C(_1[0].color)});
+}
+for(i=0;i<_3;++i){
+_8=_1[i];
+if(_8.offset>=_2){
+break;
+}
+}
+if(i){
+_9=_1[i-1];
+_5.push({offset:0,color:d.blendColors(new C(_9.color),new C(_8.color),(_2-_9.offset)/(_8.offset-_9.offset))});
+}else{
+_5.push({offset:0,color:new C(_8.color)});
+}
+for(;i<_3;++i){
+_8=_1[i];
+if(_8.offset>=to){
+break;
+}
+_5.push({offset:(_8.offset-_2)/_7,color:new C(_8.color)});
+}
+if(i<_3){
+_9=_1[i-1];
+_5.push({offset:1,color:d.blendColors(new C(_9.color),new C(_8.color),(to-_9.offset)/(_8.offset-_9.offset))});
+}else{
+_5.push({offset:1,color:new C(_1[_3-1].color)});
+}
+}
+}
+if(_4){
+_5.reverse();
+for(i=0,_3=_5.length;i<_3;++i){
+_8=_5[i];
+_8.offset=1-_8.offset;
+}
+}
+return _5;
+};
+function _a(x,y,_b,_c,_d,_e){
+var r=m.multiplyPoint(_b,x,y),p=m.multiplyPoint(_c,r);
+return {r:r,p:p,o:m.multiplyPoint(_d,p).x/_e};
+};
+function _f(a,b){
+return a.o-b.o;
+};
+dojox.gfx.gradient.project=function(_10,_11,tl,rb,ttl,trb){
+_10=_10||m.identity;
+var f1=m.multiplyPoint(_10,_11.x1,_11.y1),f2=m.multiplyPoint(_10,_11.x2,_11.y2),_12=Math.atan2(f2.y-f1.y,f2.x-f1.x),_13=m.project(f2.x-f1.x,f2.y-f1.y),pf1=m.multiplyPoint(_13,f1),pf2=m.multiplyPoint(_13,f2),_14=new m.Matrix2D([m.rotate(-_12),{dx:-pf1.x,dy:-pf1.y}]),_15=m.multiplyPoint(_14,pf2).x,_16=[_a(tl.x,tl.y,_10,_13,_14,_15),_a(rb.x,rb.y,_10,_13,_14,_15),_a(tl.x,rb.y,_10,_13,_14,_15),_a(rb.x,tl.y,_10,_13,_14,_15)].sort(_f),_17=_16[0].o,to=_16[3].o,_18=dojox.gfx.gradient.rescale(_11.colors,_17,to),_19=Math.atan2(_16[3].r.y-_16[0].r.y,_16[3].r.x-_16[0].r.x);
+return {type:"linear",x1:_16[0].p.x,y1:_16[0].p.y,x2:_16[3].p.x,y2:_16[3].p.y,colors:_18,angle:_12};
+};
+})();
+}
Index: trunk/web/dojo/dojox/gfx/gradutils.js
===================================================================
--- trunk/web/dojo/dojox/gfx/gradutils.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/gradutils.js	(revision 9)
@@ -0,0 +1,71 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.gradutils"]){
+dojo._hasResource["dojox.gfx.gradutils"]=true;
+dojo.provide("dojox.gfx.gradutils");
+dojo.require("dojox.gfx.matrix");
+(function(){
+var d=dojo,m=dojox.gfx.matrix,C=d.Color;
+function _1(o,c){
+if(o<=0){
+return c[0].color;
+}
+var _2=c.length;
+if(o>=1){
+return c[_2-1].color;
+}
+for(var i=0;i<_2;++i){
+var _3=c[i];
+if(_3.offset>=o){
+if(i){
+var _4=c[i-1];
+return d.blendColors(new C(_4.color),new C(_3.color),(o-_4.offset)/(_3.offset-_4.offset));
+}
+return _3.color;
+}
+}
+return c[_2-1].color;
+};
+dojox.gfx.gradutils.getColor=function(_5,pt){
+var o;
+if(_5){
+switch(_5.type){
+case "linear":
+var _6=Math.atan2(_5.y2-_5.y1,_5.x2-_5.x1),_7=m.rotate(-_6),_8=m.project(_5.x2-_5.x1,_5.y2-_5.y1),p=m.multiplyPoint(_8,pt),_9=m.multiplyPoint(_8,_5.x1,_5.y1),_a=m.multiplyPoint(_8,_5.x2,_5.y2),_b=m.multiplyPoint(_7,_a.x-_9.x,_a.y-_9.y).x,o=m.multiplyPoint(_7,p.x-_9.x,p.y-_9.y).x/_b;
+break;
+case "radial":
+var dx=pt.x-_5.cx,dy=pt.y-_5.cy,o=Math.sqrt(dx*dx+dy*dy)/_5.r;
+break;
+}
+return _1(o,_5.colors);
+}
+return new C(_5||[0,0,0,0]);
+};
+dojox.gfx.gradutils.reverse=function(_c){
+if(_c){
+switch(_c.type){
+case "linear":
+case "radial":
+_c=dojo.delegate(_c);
+if(_c.colors){
+var c=_c.colors,l=c.length,i=0,_d,n=_c.colors=new Array(c.length);
+for(;i<l;++i){
+_d=c[i];
+n[i]={offset:1-_d.offset,color:_d.color};
+}
+n.sort(function(a,b){
+return a.offset-b.offset;
+});
+}
+break;
+}
+}
+return _c;
+};
+})();
+}
Index: trunk/web/dojo/dojox/gfx/vml.js
===================================================================
--- trunk/web/dojo/dojox/gfx/vml.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/vml.js	(revision 9)
@@ -0,0 +1,893 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.vml"]){
+dojo._hasResource["dojox.gfx.vml"]=true;
+dojo.provide("dojox.gfx.vml");
+dojo.require("dojox.gfx._base");
+dojo.require("dojox.gfx.shape");
+dojo.require("dojox.gfx.path");
+dojo.require("dojox.gfx.arc");
+dojo.require("dojox.gfx.gradient");
+(function(){
+var d=dojo,g=dojox.gfx,m=g.matrix,gs=g.shape,_1=g.vml;
+_1.xmlns="urn:schemas-microsoft-com:vml";
+_1.text_alignment={start:"left",middle:"center",end:"right"};
+_1._parseFloat=function(_2){
+return _2.match(/^\d+f$/i)?parseInt(_2)/65536:parseFloat(_2);
+};
+_1._bool={"t":1,"true":1};
+d.extend(g.Shape,{setFill:function(_3){
+if(!_3){
+this.fillStyle=null;
+this.rawNode.filled="f";
+return this;
+}
+var i,f,fo,a,s;
+if(typeof _3=="object"&&"type" in _3){
+switch(_3.type){
+case "linear":
+var _4=this._getRealMatrix(),_5=this.getBoundingBox(),_6=this._getRealBBox?this._getRealBBox():this.getTransformedBoundingBox();
+s=[];
+if(this.fillStyle!==_3){
+this.fillStyle=g.makeParameters(g.defaultLinearGradient,_3);
+}
+f=g.gradient.project(_4,this.fillStyle,{x:_5.x,y:_5.y},{x:_5.x+_5.width,y:_5.y+_5.height},_6[0],_6[2]);
+a=f.colors;
+if(a[0].offset.toFixed(5)!="0.00000"){
+s.push("0 "+g.normalizeColor(a[0].color).toHex());
+}
+for(i=0;i<a.length;++i){
+s.push(a[i].offset.toFixed(5)+" "+g.normalizeColor(a[i].color).toHex());
+}
+i=a.length-1;
+if(a[i].offset.toFixed(5)!="1.00000"){
+s.push("1 "+g.normalizeColor(a[i].color).toHex());
+}
+fo=this.rawNode.fill;
+fo.colors.value=s.join(";");
+fo.method="sigma";
+fo.type="gradient";
+fo.angle=(270-m._radToDeg(f.angle))%360;
+fo.on=true;
+break;
+case "radial":
+f=g.makeParameters(g.defaultRadialGradient,_3);
+this.fillStyle=f;
+var l=parseFloat(this.rawNode.style.left),t=parseFloat(this.rawNode.style.top),w=parseFloat(this.rawNode.style.width),h=parseFloat(this.rawNode.style.height),c=isNaN(w)?1:2*f.r/w;
+a=[];
+if(f.colors[0].offset>0){
+a.push({offset:1,color:g.normalizeColor(f.colors[0].color)});
+}
+d.forEach(f.colors,function(v,i){
+a.push({offset:1-v.offset*c,color:g.normalizeColor(v.color)});
+});
+i=a.length-1;
+while(i>=0&&a[i].offset<0){
+--i;
+}
+if(i<a.length-1){
+var q=a[i],p=a[i+1];
+p.color=d.blendColors(q.color,p.color,q.offset/(q.offset-p.offset));
+p.offset=0;
+while(a.length-i>2){
+a.pop();
+}
+}
+i=a.length-1,s=[];
+if(a[i].offset>0){
+s.push("0 "+a[i].color.toHex());
+}
+for(;i>=0;--i){
+s.push(a[i].offset.toFixed(5)+" "+a[i].color.toHex());
+}
+fo=this.rawNode.fill;
+fo.colors.value=s.join(";");
+fo.method="sigma";
+fo.type="gradientradial";
+if(isNaN(w)||isNaN(h)||isNaN(l)||isNaN(t)){
+fo.focusposition="0.5 0.5";
+}else{
+fo.focusposition=((f.cx-l)/w).toFixed(5)+" "+((f.cy-t)/h).toFixed(5);
+}
+fo.focussize="0 0";
+fo.on=true;
+break;
+case "pattern":
+f=g.makeParameters(g.defaultPattern,_3);
+this.fillStyle=f;
+fo=this.rawNode.fill;
+fo.type="tile";
+fo.src=f.src;
+if(f.width&&f.height){
+fo.size.x=g.px2pt(f.width);
+fo.size.y=g.px2pt(f.height);
+}
+fo.alignShape="f";
+fo.position.x=0;
+fo.position.y=0;
+fo.origin.x=f.width?f.x/f.width:0;
+fo.origin.y=f.height?f.y/f.height:0;
+fo.on=true;
+break;
+}
+this.rawNode.fill.opacity=1;
+return this;
+}
+this.fillStyle=g.normalizeColor(_3);
+fo=this.rawNode.fill;
+if(!fo){
+fo=this.rawNode.ownerDocument.createElement("v:fill");
+}
+fo.method="any";
+fo.type="solid";
+fo.opacity=this.fillStyle.a;
+this.rawNode.fillcolor=this.fillStyle.toHex();
+this.rawNode.filled=true;
+return this;
+},setStroke:function(_7){
+if(!_7){
+this.strokeStyle=null;
+this.rawNode.stroked="f";
+return this;
+}
+if(typeof _7=="string"||d.isArray(_7)||_7 instanceof d.Color){
+_7={color:_7};
+}
+var s=this.strokeStyle=g.makeParameters(g.defaultStroke,_7);
+s.color=g.normalizeColor(s.color);
+var rn=this.rawNode;
+rn.stroked=true;
+rn.strokecolor=s.color.toCss();
+rn.strokeweight=s.width+"px";
+if(rn.stroke){
+rn.stroke.opacity=s.color.a;
+rn.stroke.endcap=this._translate(this._capMap,s.cap);
+if(typeof s.join=="number"){
+rn.stroke.joinstyle="miter";
+rn.stroke.miterlimit=s.join;
+}else{
+rn.stroke.joinstyle=s.join;
+}
+rn.stroke.dashstyle=s.style=="none"?"Solid":s.style;
+}
+return this;
+},_capMap:{butt:"flat"},_capMapReversed:{flat:"butt"},_translate:function(_8,_9){
+return (_9 in _8)?_8[_9]:_9;
+},_applyTransform:function(){
+var _a=this._getRealMatrix();
+if(_a){
+var _b=this.rawNode.skew;
+if(typeof _b=="undefined"){
+for(var i=0;i<this.rawNode.childNodes.length;++i){
+if(this.rawNode.childNodes[i].tagName=="skew"){
+_b=this.rawNode.childNodes[i];
+break;
+}
+}
+}
+if(_b){
+_b.on="f";
+var mt=_a.xx.toFixed(8)+" "+_a.xy.toFixed(8)+" "+_a.yx.toFixed(8)+" "+_a.yy.toFixed(8)+" 0 0",_c=Math.floor(_a.dx).toFixed()+"px "+Math.floor(_a.dy).toFixed()+"px",s=this.rawNode.style,l=parseFloat(s.left),t=parseFloat(s.top),w=parseFloat(s.width),h=parseFloat(s.height);
+if(isNaN(l)){
+l=0;
+}
+if(isNaN(t)){
+t=0;
+}
+if(isNaN(w)||!w){
+w=1;
+}
+if(isNaN(h)||!h){
+h=1;
+}
+var _d=(-l/w-0.5).toFixed(8)+" "+(-t/h-0.5).toFixed(8);
+_b.matrix=mt;
+_b.origin=_d;
+_b.offset=_c;
+_b.on=true;
+}
+}
+if(this.fillStyle&&this.fillStyle.type=="linear"){
+this.setFill(this.fillStyle);
+}
+return this;
+},_setDimensions:function(_e,_f){
+return this;
+},setRawNode:function(_10){
+_10.stroked="f";
+_10.filled="f";
+this.rawNode=_10;
+},_moveToFront:function(){
+this.rawNode.parentNode.appendChild(this.rawNode);
+return this;
+},_moveToBack:function(){
+var r=this.rawNode,p=r.parentNode,n=p.firstChild;
+p.insertBefore(r,n);
+if(n.tagName=="rect"){
+n.swapNode(r);
+}
+return this;
+},_getRealMatrix:function(){
+return this.parentMatrix?new g.Matrix2D([this.parentMatrix,this.matrix]):this.matrix;
+}});
+dojo.declare("dojox.gfx.Group",g.Shape,{constructor:function(){
+_1.Container._init.call(this);
+},_applyTransform:function(){
+var _11=this._getRealMatrix();
+for(var i=0;i<this.children.length;++i){
+this.children[i]._updateParentMatrix(_11);
+}
+return this;
+},_setDimensions:function(_12,_13){
+var r=this.rawNode,rs=r.style,bs=this.bgNode.style;
+rs.width=_12;
+rs.height=_13;
+r.coordsize=_12+" "+_13;
+bs.width=_12;
+bs.height=_13;
+for(var i=0;i<this.children.length;++i){
+this.children[i]._setDimensions(_12,_13);
+}
+return this;
+}});
+g.Group.nodeType="group";
+dojo.declare("dojox.gfx.Rect",gs.Rect,{setShape:function(_14){
+var _15=this.shape=g.makeParameters(this.shape,_14);
+this.bbox=null;
+var r=Math.min(1,(_15.r/Math.min(parseFloat(_15.width),parseFloat(_15.height)))).toFixed(8);
+var _16=this.rawNode.parentNode,_17=null;
+if(_16){
+if(_16.lastChild!==this.rawNode){
+for(var i=0;i<_16.childNodes.length;++i){
+if(_16.childNodes[i]===this.rawNode){
+_17=_16.childNodes[i+1];
+break;
+}
+}
+}
+_16.removeChild(this.rawNode);
+}
+if(d.isIE>7){
+var _18=this.rawNode.ownerDocument.createElement("v:roundrect");
+_18.arcsize=r;
+_18.style.display="inline-block";
+this.rawNode=_18;
+}else{
+this.rawNode.arcsize=r;
+}
+if(_16){
+if(_17){
+_16.insertBefore(this.rawNode,_17);
+}else{
+_16.appendChild(this.rawNode);
+}
+}
+var _19=this.rawNode.style;
+_19.left=_15.x.toFixed();
+_19.top=_15.y.toFixed();
+_19.width=(typeof _15.width=="string"&&_15.width.indexOf("%")>=0)?_15.width:_15.width.toFixed();
+_19.height=(typeof _15.width=="string"&&_15.height.indexOf("%")>=0)?_15.height:_15.height.toFixed();
+return this.setTransform(this.matrix).setFill(this.fillStyle).setStroke(this.strokeStyle);
+}});
+g.Rect.nodeType="roundrect";
+dojo.declare("dojox.gfx.Ellipse",gs.Ellipse,{setShape:function(_1a){
+var _1b=this.shape=g.makeParameters(this.shape,_1a);
+this.bbox=null;
+var _1c=this.rawNode.style;
+_1c.left=(_1b.cx-_1b.rx).toFixed();
+_1c.top=(_1b.cy-_1b.ry).toFixed();
+_1c.width=(_1b.rx*2).toFixed();
+_1c.height=(_1b.ry*2).toFixed();
+return this.setTransform(this.matrix);
+}});
+g.Ellipse.nodeType="oval";
+dojo.declare("dojox.gfx.Circle",gs.Circle,{setShape:function(_1d){
+var _1e=this.shape=g.makeParameters(this.shape,_1d);
+this.bbox=null;
+var _1f=this.rawNode.style;
+_1f.left=(_1e.cx-_1e.r).toFixed();
+_1f.top=(_1e.cy-_1e.r).toFixed();
+_1f.width=(_1e.r*2).toFixed();
+_1f.height=(_1e.r*2).toFixed();
+return this;
+}});
+g.Circle.nodeType="oval";
+dojo.declare("dojox.gfx.Line",gs.Line,{constructor:function(_20){
+if(_20){
+_20.setAttribute("dojoGfxType","line");
+}
+},setShape:function(_21){
+var _22=this.shape=g.makeParameters(this.shape,_21);
+this.bbox=null;
+this.rawNode.path.v="m"+_22.x1.toFixed()+" "+_22.y1.toFixed()+"l"+_22.x2.toFixed()+" "+_22.y2.toFixed()+"e";
+return this.setTransform(this.matrix);
+}});
+g.Line.nodeType="shape";
+dojo.declare("dojox.gfx.Polyline",gs.Polyline,{constructor:function(_23){
+if(_23){
+_23.setAttribute("dojoGfxType","polyline");
+}
+},setShape:function(_24,_25){
+if(_24&&_24 instanceof Array){
+this.shape=g.makeParameters(this.shape,{points:_24});
+if(_25&&this.shape.points.length){
+this.shape.points.push(this.shape.points[0]);
+}
+}else{
+this.shape=g.makeParameters(this.shape,_24);
+}
+this.bbox=null;
+this._normalizePoints();
+var _26=[],p=this.shape.points;
+if(p.length>0){
+_26.push("m");
+_26.push(p[0].x.toFixed(),p[0].y.toFixed());
+if(p.length>1){
+_26.push("l");
+for(var i=1;i<p.length;++i){
+_26.push(p[i].x.toFixed(),p[i].y.toFixed());
+}
+}
+}
+_26.push("e");
+this.rawNode.path.v=_26.join(" ");
+return this.setTransform(this.matrix);
+}});
+g.Polyline.nodeType="shape";
+dojo.declare("dojox.gfx.Image",gs.Image,{setShape:function(_27){
+var _28=this.shape=g.makeParameters(this.shape,_27);
+this.bbox=null;
+this.rawNode.firstChild.src=_28.src;
+return this.setTransform(this.matrix);
+},_applyTransform:function(){
+var _29=this._getRealMatrix(),_2a=this.rawNode,s=_2a.style,_2b=this.shape;
+if(_29){
+_29=m.multiply(_29,{dx:_2b.x,dy:_2b.y});
+}else{
+_29=m.normalize({dx:_2b.x,dy:_2b.y});
+}
+if(_29.xy==0&&_29.yx==0&&_29.xx>0&&_29.yy>0){
+s.filter="";
+s.width=Math.floor(_29.xx*_2b.width);
+s.height=Math.floor(_29.yy*_2b.height);
+s.left=Math.floor(_29.dx);
+s.top=Math.floor(_29.dy);
+}else{
+var ps=_2a.parentNode.style;
+s.left="0px";
+s.top="0px";
+s.width=ps.width;
+s.height=ps.height;
+_29=m.multiply(_29,{xx:_2b.width/parseInt(s.width),yy:_2b.height/parseInt(s.height)});
+var f=_2a.filters["DXImageTransform.Microsoft.Matrix"];
+if(f){
+f.M11=_29.xx;
+f.M12=_29.xy;
+f.M21=_29.yx;
+f.M22=_29.yy;
+f.Dx=_29.dx;
+f.Dy=_29.dy;
+}else{
+s.filter="progid:DXImageTransform.Microsoft.Matrix(M11="+_29.xx+", M12="+_29.xy+", M21="+_29.yx+", M22="+_29.yy+", Dx="+_29.dx+", Dy="+_29.dy+")";
+}
+}
+return this;
+},_setDimensions:function(_2c,_2d){
+var r=this.rawNode,f=r.filters["DXImageTransform.Microsoft.Matrix"];
+if(f){
+var s=r.style;
+s.width=_2c;
+s.height=_2d;
+return this._applyTransform();
+}
+return this;
+}});
+g.Image.nodeType="rect";
+dojo.declare("dojox.gfx.Text",gs.Text,{constructor:function(_2e){
+if(_2e){
+_2e.setAttribute("dojoGfxType","text");
+}
+this.fontStyle=null;
+},_alignment:{start:"left",middle:"center",end:"right"},setShape:function(_2f){
+this.shape=g.makeParameters(this.shape,_2f);
+this.bbox=null;
+var r=this.rawNode,s=this.shape,x=s.x,y=s.y.toFixed(),_30;
+switch(s.align){
+case "middle":
+x-=5;
+break;
+case "end":
+x-=10;
+break;
+}
+_30="m"+x.toFixed()+","+y+"l"+(x+10).toFixed()+","+y+"e";
+var p=null,t=null,c=r.childNodes;
+for(var i=0;i<c.length;++i){
+var tag=c[i].tagName;
+if(tag=="path"){
+p=c[i];
+if(t){
+break;
+}
+}else{
+if(tag=="textpath"){
+t=c[i];
+if(p){
+break;
+}
+}
+}
+}
+if(!p){
+p=r.ownerDocument.createElement("v:path");
+r.appendChild(p);
+}
+if(!t){
+t=r.ownerDocument.createElement("v:textpath");
+r.appendChild(t);
+}
+p.v=_30;
+p.textPathOk=true;
+t.on=true;
+var a=_1.text_alignment[s.align];
+t.style["v-text-align"]=a?a:"left";
+t.style["text-decoration"]=s.decoration;
+t.style["v-rotate-letters"]=s.rotated;
+t.style["v-text-kern"]=s.kerning;
+t.string=s.text;
+return this.setTransform(this.matrix);
+},_setFont:function(){
+var f=this.fontStyle,c=this.rawNode.childNodes;
+for(var i=0;i<c.length;++i){
+if(c[i].tagName=="textpath"){
+c[i].style.font=g.makeFontString(f);
+break;
+}
+}
+this.setTransform(this.matrix);
+},_getRealMatrix:function(){
+var _31=g.Shape.prototype._getRealMatrix.call(this);
+if(_31){
+_31=m.multiply(_31,{dy:-g.normalizedLength(this.fontStyle?this.fontStyle.size:"10pt")*0.35});
+}
+return _31;
+},getTextWidth:function(){
+var _32=this.rawNode,_33=_32.style.display;
+_32.style.display="inline";
+var _34=g.pt2px(parseFloat(_32.currentStyle.width));
+_32.style.display=_33;
+return _34;
+}});
+g.Text.nodeType="shape";
+dojo.declare("dojox.gfx.Path",g.path.Path,{constructor:function(_35){
+if(_35&&!_35.getAttribute("dojoGfxType")){
+_35.setAttribute("dojoGfxType","path");
+}
+this.vmlPath="";
+this.lastControl={};
+},_updateWithSegment:function(_36){
+var _37=d.clone(this.last);
+g.Path.superclass._updateWithSegment.apply(this,arguments);
+if(arguments.length>1){
+return;
+}
+var _38=this[this.renderers[_36.action]](_36,_37);
+if(typeof this.vmlPath=="string"){
+this.vmlPath+=_38.join("");
+this.rawNode.path.v=this.vmlPath+" r0,0 e";
+}else{
+Array.prototype.push.apply(this.vmlPath,_38);
+}
+},setShape:function(_39){
+this.vmlPath=[];
+this.lastControl.type="";
+g.Path.superclass.setShape.apply(this,arguments);
+this.vmlPath=this.vmlPath.join("");
+this.rawNode.path.v=this.vmlPath+" r0,0 e";
+return this;
+},_pathVmlToSvgMap:{m:"M",l:"L",t:"m",r:"l",c:"C",v:"c",qb:"Q",x:"z",e:""},renderers:{M:"_moveToA",m:"_moveToR",L:"_lineToA",l:"_lineToR",H:"_hLineToA",h:"_hLineToR",V:"_vLineToA",v:"_vLineToR",C:"_curveToA",c:"_curveToR",S:"_smoothCurveToA",s:"_smoothCurveToR",Q:"_qCurveToA",q:"_qCurveToR",T:"_qSmoothCurveToA",t:"_qSmoothCurveToR",A:"_arcTo",a:"_arcTo",Z:"_closePath",z:"_closePath"},_addArgs:function(_3a,_3b,_3c,_3d){
+var n=_3b instanceof Array?_3b:_3b.args;
+for(var i=_3c;i<_3d;++i){
+_3a.push(" ",n[i].toFixed());
+}
+},_adjustRelCrd:function(_3e,_3f,_40){
+var n=_3f instanceof Array?_3f:_3f.args,l=n.length,_41=new Array(l),i=0,x=_3e.x,y=_3e.y;
+if(typeof x!="number"){
+_41[0]=x=n[0];
+_41[1]=y=n[1];
+i=2;
+}
+if(typeof _40=="number"&&_40!=2){
+var j=_40;
+while(j<=l){
+for(;i<j;i+=2){
+_41[i]=x+n[i];
+_41[i+1]=y+n[i+1];
+}
+x=_41[j-2];
+y=_41[j-1];
+j+=_40;
+}
+}else{
+for(;i<l;i+=2){
+_41[i]=(x+=n[i]);
+_41[i+1]=(y+=n[i+1]);
+}
+}
+return _41;
+},_adjustRelPos:function(_42,_43){
+var n=_43 instanceof Array?_43:_43.args,l=n.length,_44=new Array(l);
+for(var i=0;i<l;++i){
+_44[i]=(_42+=n[i]);
+}
+return _44;
+},_moveToA:function(_45){
+var p=[" m"],n=_45 instanceof Array?_45:_45.args,l=n.length;
+this._addArgs(p,n,0,2);
+if(l>2){
+p.push(" l");
+this._addArgs(p,n,2,l);
+}
+this.lastControl.type="";
+return p;
+},_moveToR:function(_46,_47){
+return this._moveToA(this._adjustRelCrd(_47,_46));
+},_lineToA:function(_48){
+var p=[" l"],n=_48 instanceof Array?_48:_48.args;
+this._addArgs(p,n,0,n.length);
+this.lastControl.type="";
+return p;
+},_lineToR:function(_49,_4a){
+return this._lineToA(this._adjustRelCrd(_4a,_49));
+},_hLineToA:function(_4b,_4c){
+var p=[" l"],y=" "+_4c.y.toFixed(),n=_4b instanceof Array?_4b:_4b.args,l=n.length;
+for(var i=0;i<l;++i){
+p.push(" ",n[i].toFixed(),y);
+}
+this.lastControl.type="";
+return p;
+},_hLineToR:function(_4d,_4e){
+return this._hLineToA(this._adjustRelPos(_4e.x,_4d),_4e);
+},_vLineToA:function(_4f,_50){
+var p=[" l"],x=" "+_50.x.toFixed(),n=_4f instanceof Array?_4f:_4f.args,l=n.length;
+for(var i=0;i<l;++i){
+p.push(x," ",n[i].toFixed());
+}
+this.lastControl.type="";
+return p;
+},_vLineToR:function(_51,_52){
+return this._vLineToA(this._adjustRelPos(_52.y,_51),_52);
+},_curveToA:function(_53){
+var p=[],n=_53 instanceof Array?_53:_53.args,l=n.length,lc=this.lastControl;
+for(var i=0;i<l;i+=6){
+p.push(" c");
+this._addArgs(p,n,i,i+6);
+}
+lc.x=n[l-4];
+lc.y=n[l-3];
+lc.type="C";
+return p;
+},_curveToR:function(_54,_55){
+return this._curveToA(this._adjustRelCrd(_55,_54,6));
+},_smoothCurveToA:function(_56,_57){
+var p=[],n=_56 instanceof Array?_56:_56.args,l=n.length,lc=this.lastControl,i=0;
+if(lc.type!="C"){
+p.push(" c");
+this._addArgs(p,[_57.x,_57.y],0,2);
+this._addArgs(p,n,0,4);
+lc.x=n[0];
+lc.y=n[1];
+lc.type="C";
+i=4;
+}
+for(;i<l;i+=4){
+p.push(" c");
+this._addArgs(p,[2*_57.x-lc.x,2*_57.y-lc.y],0,2);
+this._addArgs(p,n,i,i+4);
+lc.x=n[i];
+lc.y=n[i+1];
+}
+return p;
+},_smoothCurveToR:function(_58,_59){
+return this._smoothCurveToA(this._adjustRelCrd(_59,_58,4),_59);
+},_qCurveToA:function(_5a){
+var p=[],n=_5a instanceof Array?_5a:_5a.args,l=n.length,lc=this.lastControl;
+for(var i=0;i<l;i+=4){
+p.push(" qb");
+this._addArgs(p,n,i,i+4);
+}
+lc.x=n[l-4];
+lc.y=n[l-3];
+lc.type="Q";
+return p;
+},_qCurveToR:function(_5b,_5c){
+return this._qCurveToA(this._adjustRelCrd(_5c,_5b,4));
+},_qSmoothCurveToA:function(_5d,_5e){
+var p=[],n=_5d instanceof Array?_5d:_5d.args,l=n.length,lc=this.lastControl,i=0;
+if(lc.type!="Q"){
+p.push(" qb");
+this._addArgs(p,[lc.x=_5e.x,lc.y=_5e.y],0,2);
+lc.type="Q";
+this._addArgs(p,n,0,2);
+i=2;
+}
+for(;i<l;i+=2){
+p.push(" qb");
+this._addArgs(p,[lc.x=2*_5e.x-lc.x,lc.y=2*_5e.y-lc.y],0,2);
+this._addArgs(p,n,i,i+2);
+}
+return p;
+},_qSmoothCurveToR:function(_5f,_60){
+return this._qSmoothCurveToA(this._adjustRelCrd(_60,_5f,2),_60);
+},_arcTo:function(_61,_62){
+var p=[],n=_61.args,l=n.length,_63=_61.action=="a";
+for(var i=0;i<l;i+=7){
+var x1=n[i+5],y1=n[i+6];
+if(_63){
+x1+=_62.x;
+y1+=_62.y;
+}
+var _64=g.arc.arcAsBezier(_62,n[i],n[i+1],n[i+2],n[i+3]?1:0,n[i+4]?1:0,x1,y1);
+for(var j=0;j<_64.length;++j){
+p.push(" c");
+var t=_64[j];
+this._addArgs(p,t,0,t.length);
+this._updateBBox(t[0],t[1]);
+this._updateBBox(t[2],t[3]);
+this._updateBBox(t[4],t[5]);
+}
+_62.x=x1;
+_62.y=y1;
+}
+this.lastControl.type="";
+return p;
+},_closePath:function(){
+this.lastControl.type="";
+return ["x"];
+}});
+g.Path.nodeType="shape";
+dojo.declare("dojox.gfx.TextPath",g.Path,{constructor:function(_65){
+if(_65){
+_65.setAttribute("dojoGfxType","textpath");
+}
+this.fontStyle=null;
+if(!("text" in this)){
+this.text=d.clone(g.defaultTextPath);
+}
+if(!("fontStyle" in this)){
+this.fontStyle=d.clone(g.defaultFont);
+}
+},setText:function(_66){
+this.text=g.makeParameters(this.text,typeof _66=="string"?{text:_66}:_66);
+this._setText();
+return this;
+},setFont:function(_67){
+this.fontStyle=typeof _67=="string"?g.splitFontString(_67):g.makeParameters(g.defaultFont,_67);
+this._setFont();
+return this;
+},_setText:function(){
+this.bbox=null;
+var r=this.rawNode,s=this.text,p=null,t=null,c=r.childNodes;
+for(var i=0;i<c.length;++i){
+var tag=c[i].tagName;
+if(tag=="path"){
+p=c[i];
+if(t){
+break;
+}
+}else{
+if(tag=="textpath"){
+t=c[i];
+if(p){
+break;
+}
+}
+}
+}
+if(!p){
+p=this.rawNode.ownerDocument.createElement("v:path");
+r.appendChild(p);
+}
+if(!t){
+t=this.rawNode.ownerDocument.createElement("v:textpath");
+r.appendChild(t);
+}
+p.textPathOk=true;
+t.on=true;
+var a=_1.text_alignment[s.align];
+t.style["v-text-align"]=a?a:"left";
+t.style["text-decoration"]=s.decoration;
+t.style["v-rotate-letters"]=s.rotated;
+t.style["v-text-kern"]=s.kerning;
+t.string=s.text;
+},_setFont:function(){
+var f=this.fontStyle,c=this.rawNode.childNodes;
+for(var i=0;i<c.length;++i){
+if(c[i].tagName=="textpath"){
+c[i].style.font=g.makeFontString(f);
+break;
+}
+}
+}});
+g.TextPath.nodeType="shape";
+dojo.declare("dojox.gfx.Surface",gs.Surface,{constructor:function(){
+_1.Container._init.call(this);
+},setDimensions:function(_68,_69){
+this.width=g.normalizedLength(_68);
+this.height=g.normalizedLength(_69);
+if(!this.rawNode){
+return this;
+}
+var cs=this.clipNode.style,r=this.rawNode,rs=r.style,bs=this.bgNode.style,ps=this._parent.style,i;
+ps.width=_68;
+ps.height=_69;
+cs.width=_68;
+cs.height=_69;
+cs.clip="rect(0px "+_68+"px "+_69+"px 0px)";
+rs.width=_68;
+rs.height=_69;
+r.coordsize=_68+" "+_69;
+bs.width=_68;
+bs.height=_69;
+for(i=0;i<this.children.length;++i){
+this.children[i]._setDimensions(_68,_69);
+}
+return this;
+},getDimensions:function(){
+var t=this.rawNode?{width:g.normalizedLength(this.rawNode.style.width),height:g.normalizedLength(this.rawNode.style.height)}:null;
+if(t.width<=0){
+t.width=this.width;
+}
+if(t.height<=0){
+t.height=this.height;
+}
+return t;
+}});
+g.createSurface=function(_6a,_6b,_6c){
+if(!_6b&&!_6c){
+var pos=d.position(_6a);
+_6b=_6b||pos.w;
+_6c=_6c||pos.h;
+}
+if(typeof _6b=="number"){
+_6b=_6b+"px";
+}
+if(typeof _6c=="number"){
+_6c=_6c+"px";
+}
+var s=new g.Surface(),p=d.byId(_6a),c=s.clipNode=p.ownerDocument.createElement("div"),r=s.rawNode=p.ownerDocument.createElement("v:group"),cs=c.style,rs=r.style;
+if(d.isIE>7){
+rs.display="inline-block";
+}
+s._parent=p;
+s._nodes.push(c);
+p.style.width=_6b;
+p.style.height=_6c;
+cs.position="absolute";
+cs.width=_6b;
+cs.height=_6c;
+cs.clip="rect(0px "+_6b+" "+_6c+" 0px)";
+rs.position="absolute";
+rs.width=_6b;
+rs.height=_6c;
+r.coordsize=(_6b==="100%"?_6b:parseFloat(_6b))+" "+(_6c==="100%"?_6c:parseFloat(_6c));
+r.coordorigin="0 0";
+var b=s.bgNode=r.ownerDocument.createElement("v:rect"),bs=b.style;
+bs.left=bs.top=0;
+bs.width=rs.width;
+bs.height=rs.height;
+b.filled=b.stroked="f";
+r.appendChild(b);
+c.appendChild(r);
+p.appendChild(c);
+s.width=g.normalizedLength(_6b);
+s.height=g.normalizedLength(_6c);
+return s;
+};
+_1.Container={_init:function(){
+gs.Container._init.call(this);
+},add:function(_6d){
+if(this!=_6d.getParent()){
+this.rawNode.appendChild(_6d.rawNode);
+if(!_6d.getParent()){
+_6d.setFill(_6d.getFill());
+_6d.setStroke(_6d.getStroke());
+}
+gs.Container.add.apply(this,arguments);
+}
+return this;
+},remove:function(_6e,_6f){
+if(this==_6e.getParent()){
+if(this.rawNode==_6e.rawNode.parentNode){
+this.rawNode.removeChild(_6e.rawNode);
+}
+gs.Container.remove.apply(this,arguments);
+}
+return this;
+},clear:function(){
+var r=this.rawNode;
+while(r.firstChild!=r.lastChild){
+if(r.firstChild!=this.bgNode){
+r.removeChild(r.firstChild);
+}
+if(r.lastChild!=this.bgNode){
+r.removeChild(r.lastChild);
+}
+}
+return gs.Container.clear.apply(this,arguments);
+},_moveChildToFront:gs.Container._moveChildToFront,_moveChildToBack:gs.Container._moveChildToBack};
+dojo.mixin(gs.Creator,{createGroup:function(){
+var _70=this.createObject(g.Group,null);
+var r=_70.rawNode.ownerDocument.createElement("v:rect");
+r.style.left=r.style.top=0;
+r.style.width=_70.rawNode.style.width;
+r.style.height=_70.rawNode.style.height;
+r.filled=r.stroked="f";
+_70.rawNode.appendChild(r);
+_70.bgNode=r;
+return _70;
+},createImage:function(_71){
+if(!this.rawNode){
+return null;
+}
+var _72=new g.Image(),doc=this.rawNode.ownerDocument,_73=doc.createElement("v:rect");
+_73.stroked="f";
+_73.style.width=this.rawNode.style.width;
+_73.style.height=this.rawNode.style.height;
+var img=doc.createElement("v:imagedata");
+_73.appendChild(img);
+_72.setRawNode(_73);
+this.rawNode.appendChild(_73);
+_72.setShape(_71);
+this.add(_72);
+return _72;
+},createRect:function(_74){
+if(!this.rawNode){
+return null;
+}
+var _75=new g.Rect,_76=this.rawNode.ownerDocument.createElement("v:roundrect");
+if(d.isIE>7){
+_76.style.display="inline-block";
+}
+_75.setRawNode(_76);
+this.rawNode.appendChild(_76);
+_75.setShape(_74);
+this.add(_75);
+return _75;
+},createObject:function(_77,_78){
+if(!this.rawNode){
+return null;
+}
+var _79=new _77(),_7a=this.rawNode.ownerDocument.createElement("v:"+_77.nodeType);
+_79.setRawNode(_7a);
+this.rawNode.appendChild(_7a);
+switch(_77){
+case g.Group:
+case g.Line:
+case g.Polyline:
+case g.Image:
+case g.Text:
+case g.Path:
+case g.TextPath:
+this._overrideSize(_7a);
+}
+_79.setShape(_78);
+this.add(_79);
+return _79;
+},_overrideSize:function(_7b){
+var s=this.rawNode.style,w=s.width,h=s.height;
+_7b.style.width=w;
+_7b.style.height=h;
+_7b.coordsize=parseInt(w)+" "+parseInt(h);
+}});
+d.extend(g.Group,_1.Container);
+d.extend(g.Group,gs.Creator);
+d.extend(g.Surface,_1.Container);
+d.extend(g.Surface,gs.Creator);
+})();
+}
Index: trunk/web/dojo/dojox/gfx/canvas_attach.js
===================================================================
--- trunk/web/dojo/dojox/gfx/canvas_attach.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/canvas_attach.js	(revision 9)
@@ -0,0 +1,12 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo.require("dojox.gfx.canvas");
+dojo.experimental("dojox.gfx.canvas_attach");
+dojox.gfx.attachNode=function(){
+return null;
+};
Index: trunk/web/dojo/dojox/gfx/resources/gfxSvgProxyFrame.html
===================================================================
--- trunk/web/dojo/dojox/gfx/resources/gfxSvgProxyFrame.html	(revision 0)
+++ trunk/web/dojo/dojox/gfx/resources/gfxSvgProxyFrame.html	(revision 9)
@@ -0,0 +1,14 @@
+<html>
+    <head>
+        <script type="text/javascript">
+    		djConfig = {forceGfxRenderer: "svg"};
+    	</script>
+        <script type="text/javascript" src="../../../dojo/dojo.js" ></script>
+        <script type="text/javascript">
+			dojo.require("dojox.gfx");
+			dojo.require("dojox.gfx.utils");
+        </script>
+    </head>
+    <body>
+    </body>
+</html>
Index: trunk/web/dojo/dojox/gfx/resources/Gillius.svg
===================================================================
--- trunk/web/dojo/dojox/gfx/resources/Gillius.svg	(revision 0)
+++ trunk/web/dojo/dojox/gfx/resources/Gillius.svg	(revision 9)
@@ -0,0 +1,1272 @@
+<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" > 
+<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
+<defs>
+	<font horiz-adv-x="985">
+		<font-face
+			font-family="Gillius ADF No2"
+			units-per-em="2048"
+			panose-1="2 11 5 3 5 0 0 2 0 3"
+			ascent="1536"
+			descent="-512"
+			alphabetic="0" />
+<missing-glyph horiz-adv-x="573" />
+<glyph unicode=" " glyph-name="space" horiz-adv-x="614" />
+<glyph unicode="!" glyph-name="exclam" horiz-adv-x="444" d="M185 176T221 176T284 147T311 80T284 14T221 -16T158 13T131 80T158 146ZM307 797L289 461H156L133 797V1417H307V797Z" />
+<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="737" d="M264 772H141V1231H264V772ZM596 772H473V1231H596V772Z" />
+<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="1265" d="M815 862H530L451 530H737L815 862ZM1241 862H928L854 530H1137V395H825L731 0H614L705 395H432L328 0H211L303 395H23V530H332L412 862H123V995H432L532 1393H651L555 995H844L938 1393H1053L963
+995H1241V862Z" />
+<glyph unicode="$" glyph-name="dollar" horiz-adv-x="954" d="M774 342Q774 367 769 389T757 427T736 459T710 484T677 504T641 520T599 533T557 544T512 555V125Q644 147 707 193T774 342ZM449 721V1130Q328 1117 266 1072T203 926Q203 884 215 853T248 801T301
+764T368 739T449 721ZM905 360Q905 38 512 2V-287H449V2Q367 2 255 28T66 88V246Q164 174 236 151T449 123V573Q66 641 66 909Q66 991 95 1055T177 1159T298 1222T449 1251V1477H512V1251Q618 1251 686 1233Q758 1216 829 1194V1044Q746 1093 690 1110Q588 1125
+512 1130V705Q583 694 638 679T745 637T831 574T885 484T905 360Z" />
+<glyph unicode="%" glyph-name="percent" horiz-adv-x="1613" d="M532 1061Q532 1116 523 1163T493 1250T435 1314T346 1337Q299 1337 263 1313T205 1248T173 1160T162 1061Q162 991 178 931T238 826T346 778Q398 778 436 802T493 869T522 959T532 1061ZM1450
+354Q1450 404 1441 450T1411 539T1354 606T1268 631Q1085 631 1081 354Q1081 302 1090 256T1119 168T1177 101T1268 76Q1316 76 1352 100T1408 165T1438 253T1450 354ZM635 1061Q635 987 619 921T569 801T478 714T346 682Q269 682 213 713T124 799T77 919T59 1061Q59
+1132 76 1198T126 1319T216 1408T346 1442Q404 1442 453 1420T535 1361T591 1274T624 1171T635 1061ZM1278 1442L453 -29H336L1161 1442H1278ZM1554 354Q1554 283 1538 218T1489 96T1399 5T1268 -29T1136 4T1044 93T993 215T975 354Q975 425 993 491T1046 611T1138
+698T1268 733Q1340 733 1396 699T1486 609T1537 488T1554 354Z" />
+<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="1306" d="M877 240L379 772Q290 696 246 621T201 444Q201 290 301 200T555 109Q649 109 723 140T877 240ZM1288 -4H1085L954 141Q753 -29 539 -29Q333 -29 201 98T68 432Q68 662 307 868Q269 919 240
+991Q219 1054 219 1118Q219 1260 311 1348Q406 1442 561 1442Q632 1442 712 1423T850 1374V1212Q713 1311 580 1311Q477 1311 416 1253Q348 1199 348 1118Q348 1063 379 1004Q413 946 492 864L963 362Q1031 458 1056 541T1087 752H1229Q1207 526 1040 266L1288
+-4Z" />
+<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="409" d="M276 1417Q274 1330 274 1259T268 1107T244 958H166L135 1169V1417H276Z" />
+<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="507" d="M477 -256H358Q82 197 82 610Q82 1013 358 1475H477Q347 1239 289 1047T227 610Q227 371 287 174T477 -256Z" />
+<glyph unicode=")" glyph-name="parenright" horiz-adv-x="509" d="M426 610Q426 402 349 171T150 -256H31Q161 -26 221 173T281 610Q281 847 220 1047T29 1475H150Q274 1271 350 1046T426 610Z" />
+<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="913" d="M848 811L811 727L498 918V555H416V918L104 727L66 811L387 1001L66 1188L104 1276L416 1077V1442H498V1077L811 1276L848 1188L520 999L848 811Z" />
+<glyph unicode="+" glyph-name="plus" horiz-adv-x="1107" d="M1083 467H614V0H496V467H23V594H496V1059H614V594H1083V467Z" />
+<glyph unicode="," glyph-name="comma" horiz-adv-x="454" d="M338 209V66Q336 -11 245 -102T74 -197Q116 -169 142 -118T168 -10Q168 33 154 68V209H338Z" />
+<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="749" d="M608 395H141V530H608V395Z" />
+<glyph unicode="." glyph-name="period" horiz-adv-x="477" d="M336 0H141V209H336V0Z" />
+<glyph unicode="/" glyph-name="slash" horiz-adv-x="643" d="M623 1417L150 -180H23L494 1417H623Z" />
+<glyph unicode="0" glyph-name="zero" horiz-adv-x="1126" d="M866 705Q866 1309 561 1309Q501 1309 453 1285T373 1224T320 1131T286 1025T269 908T261 800T260 705T261 610T268 503T286 388T320 282T374 190T453 130T561 106Q866 106 866 705ZM1012 705Q1012
+636 1007 570T989 429T954 290T898 166T817 64T706 -3T561 -29T417 -4T307 64T226 166T170 290T136 429T118 569T113 705Q113 774 117 839T135 979T168 1119T224 1244T304 1347T416 1416T561 1442T705 1417T816 1349T897 1246T954 1121T988 982T1007 841T1012 705Z"
+/>
+<glyph unicode="1" glyph-name="one" horiz-adv-x="585" d="M426 0H268V1264L55 1092V1251L256 1417H426V0Z" />
+<glyph unicode="2" glyph-name="two" d="M899 0H74V147Q110 185 335 433T578 702Q642 772 691 863T741 1030Q741 1153 660 1225T455 1298Q356 1298 268 1265T82 1169V1352Q155 1381 202 1397T317 1428T451 1442Q642 1442 764 1337T887 1040Q887 987 878 942T846
+851T804 776T748 692L262 147H899V0Z" />
+<glyph unicode="3" glyph-name="three" horiz-adv-x="1015" d="M911 410Q911 319 885 246T814 122T704 37T564 -13T401 -29Q250 -29 57 39V213Q134 159 210 138T397 117Q481 117 544 130T660 176T739 267T766 410Q766 481 741 535T669 622T564 670T434 686H289V825H440Q570
+825 651 882T735 1057Q735 1183 653 1240T434 1298Q371 1298 309 1287T208 1264T98 1227V1382Q285 1442 451 1442Q568 1442 663 1405T819 1284T881 1081Q881 971 817 889T635 764Q767 727 839 631T911 410Z" />
+<glyph unicode="4" glyph-name="four" horiz-adv-x="1040" d="M651 483V1264L166 483H651ZM997 338H805V0H651V338H51V516L600 1417H805V483H997V338Z" />
+<glyph unicode="5" glyph-name="five" horiz-adv-x="997" d="M911 451Q911 220 778 96T412 -29Q241 -29 70 31V209Q148 160 226 139T408 117Q571 117 667 202T764 451Q764 610 667 696T408 782Q304 782 260 771T127 715L213 1417H815V1268H315L264 895Q331 922
+440 928Q655 928 781 799T911 451Z" />
+<glyph unicode="6" glyph-name="six" horiz-adv-x="1075" d="M260 424Q260 276 341 191T565 106Q707 106 778 191T850 424Q850 574 777 671T565 768Q422 768 343 672T260 424ZM98 535Q98 685 136 833T236 1097T382 1298T555 1417H737Q654 1365 576 1293T433 1135T328
+954T287 768Q379 892 575 901Q712 901 809 838T951 668T997 424Q997 225 874 100T565 -29Q461 -29 380 1T247 83T160 208T112 362T98 535Z" />
+<glyph unicode="7" glyph-name="seven" horiz-adv-x="915" d="M866 1346L381 0H219L678 1266H33V1417H866V1346Z" />
+<glyph unicode="8" glyph-name="eight" horiz-adv-x="1097" d="M846 395Q846 531 766 606T547 682Q407 682 328 609T248 395Q248 253 327 180T547 106Q684 106 765 181T846 395ZM815 1061Q809 1193 736 1251T547 1309Q422 1309 353 1251T274 1061Q278 961 356
+889T543 817H547Q659 817 737 885T815 1061ZM989 395Q989 186 873 79T547 -29Q336 -29 218 78T100 395Q100 524 173 617T383 754Q252 801 192 869T131 1061Q131 1180 188 1268T339 1399T547 1442Q723 1442 841 1341T963 1061Q963 858 733 754Q982 665 989 395Z"
+/>
+<glyph unicode="9" glyph-name="nine" horiz-adv-x="1077" d="M813 965Q813 1113 732 1197T508 1282Q366 1282 295 1197T223 965Q223 893 240 832T292 723T381 648T508 621Q652 621 731 716T813 965ZM975 854Q975 703 937 556T837 292T691 90T518 -29H336Q505
+76 640 258T782 590Q723 534 663 514T498 487Q394 487 313 523T181 624T103 775T76 965Q76 1164 199 1289T508 1417Q612 1417 693 1387T826 1305T913 1180T961 1027T975 854Z" />
+<glyph unicode=":" glyph-name="colon" horiz-adv-x="477" d="M336 0H141V215H336V0ZM336 657H141V872H336V657Z" />
+<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="460" d="M334 209V66Q332 -11 241 -102T70 -197Q112 -169 138 -118T164 -10Q164 33 150 68V209H334ZM336 657H147V872H336V657Z" />
+<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="1177" d="M1100 78L39 465V592L1100 981V842L217 528L1100 217V78Z" />
+<glyph unicode="=" glyph-name="equal" horiz-adv-x="1345" d="M1204 291H141V420H1204V291ZM1204 639H141V766H1204V639Z" />
+<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="1179" d="M1141 465L78 78V217L961 528L78 842V981L1141 592V465Z" />
+<glyph unicode="?" glyph-name="question" horiz-adv-x="784" d="M302 176T338 176T401 147T428 80T401 14T338 -16T275 13T248 80T275 146ZM727 1112Q727 1067 718 1030T686 958T645 900T588 838L506 754Q471 714 460 700T433 663T414 619T409 571T406 496V375H264V524Q264
+622 293 683T395 823L475 907Q511 941 544 994T582 1102Q582 1200 514 1251T344 1303Q255 1303 185 1271T37 1171V1339Q126 1393 202 1417T377 1442Q535 1442 629 1356T727 1112Z" />
+<glyph unicode="@" glyph-name="at" horiz-adv-x="1689" d="M1098 508Q1098 640 1032 721Q959 797 852 797Q734 797 674 716T610 508Q610 384 674 302T854 219Q972 219 1033 300T1098 508ZM1628 625Q1628 375 1488 230T1100 82V209Q1056 154 980 120T819 86Q752
+86 696 110T601 174T535 269T494 383T481 508Q481 590 501 664T562 800T668 898T819 936Q1038 936 1100 811V920H1229V221Q1304 233 1360 269T1448 359T1497 478T1516 621Q1516 741 1470 857T1342 1065T1140 1213T881 1270H866Q714 1270 583 1209T364 1044T226
+803T176 514Q176 352 232 216T383 -11T603 -151T866 -201Q1095 -201 1294 -39L1370 -150Q1241 -245 1127 -290T866 -338Q703 -338 557 -277T304 -106T133 165T70 514Q70 645 101 768T199 1000T359 1190T587 1318T879 1366Q1049 1366 1192 1305T1429 1140T1576 904T1628
+625Z" />
+<glyph unicode="A" glyph-name="A" horiz-adv-x="1222" d="M872 516L614 1245L350 516H872ZM1206 0H1042L924 371H299L178 0H16L518 1417H702L1206 0Z" />
+<glyph unicode="B" glyph-name="B" horiz-adv-x="1146" d="M909 416Q909 563 832 623T602 684H297V141H602Q753 141 831 205T909 416ZM866 1051Q866 1269 580 1276H297V821H580Q707 821 785 878T866 1051ZM1063 395Q1063 292 1031 215T938 92T797 23T614 0H141V1417H594Q993
+1417 1008 1071Q1008 960 962 879T823 774V754Q936 720 999 622T1063 395Z" />
+<glyph unicode="C" glyph-name="C" horiz-adv-x="1196" d="M1130 104Q1050 42 939 7T719 -29Q562 -29 440 27T241 184T125 417T86 705Q86 829 110 938T184 1141T308 1300T487 1404T719 1442Q946 1442 1130 1311V1118Q1047 1214 953 1258T729 1303Q598 1303 502
+1257T350 1127T267 939T238 705Q238 602 255 515T309 352T403 224T542 141T729 111Q858 111 951 153T1130 291V104Z" />
+<glyph unicode="D" glyph-name="D" horiz-adv-x="1320" d="M1081 711Q1081 1005 949 1139T528 1276H295V141H528Q812 141 946 281T1081 711ZM1231 1085T1231 711T1053 169T500 0H141V1417H500Q875 1417 1053 1251Z" />
+<glyph unicode="E" glyph-name="E" horiz-adv-x="1030" d="M979 0H141V1417H963V1268H295V827H932V682H295V147H979V0Z" />
+<glyph unicode="F" glyph-name="F" horiz-adv-x="921" d="M889 1268H297V831H831V684H297V0H141V1417H889V1268Z" />
+<glyph unicode="G" glyph-name="G" horiz-adv-x="1316" d="M1221 127Q1014 -29 735 -29Q573 -29 448 25T245 178T126 410T86 705T125 1000T243 1232T446 1387T735 1442Q855 1442 973 1408T1186 1311V1120Q1083 1219 987 1261T750 1303Q613 1303 514 1260T356 1134T269
+947T238 705Q238 570 267 464T356 277T516 154T750 111Q919 111 1071 182V590H770V731H1221V127Z" />
+<glyph unicode="H" glyph-name="H" horiz-adv-x="1271" d="M1130 0H975V682H295V0H141V1417H295V827H975V1417H1130V0Z" />
+<glyph unicode="I" glyph-name="I" horiz-adv-x="436" d="M295 0H141V1417H295V0Z" />
+<glyph unicode="J" glyph-name="J" horiz-adv-x="428" d="M287 94Q287 -152 193 -276Q105 -387 -98 -387H-156V-244H-113Q30 -244 84 -172Q135 -96 135 94V1417H287V94Z" />
+<glyph unicode="K" glyph-name="K" horiz-adv-x="1171" d="M1174 0H961L297 692V0H141V1417H297V809L913 1417H1128L463 760L1174 0Z" />
+<glyph unicode="L" glyph-name="L" horiz-adv-x="962" d="M952 0H141V1417H297V147H952V0Z" />
+<glyph unicode="M" glyph-name="M" horiz-adv-x="1470" d="M1329 0H1176V1135L739 276L295 1135V0H141V1417H295L739 578L1176 1417H1329V0Z" />
+<glyph unicode="N" glyph-name="N" horiz-adv-x="1265" d="M1124 0H971L293 1141V0H141V1417H287L971 274V1417H1124V0Z" />
+<glyph unicode="O" glyph-name="O" horiz-adv-x="1374" d="M1133 705Q1133 797 1119 880T1070 1042T985 1177T856 1269T682 1303Q587 1303 510 1269T383 1177T299 1041T251 879T236 705Q236 617 251 534T300 373T384 237T511 144T682 109Q777 109 854 143T982
+235T1068 370T1118 531T1133 705ZM1284 824T1284 705T1262 479T1193 279T1076 117T906 10T682 -29Q532 -29 415 31T227 196T120 429T84 705Q84 820 106 926T175 1126T291 1291T460 1401T682 1442Q805 1442 906 1403T1076 1295T1193 1132T1262 931Z" />
+<glyph unicode="P" glyph-name="P" horiz-adv-x="1040" d="M825 995Q825 1133 751 1203T541 1276H295V719H541Q677 719 749 790T825 995ZM979 995Q979 783 866 679T541 575H295V0H141V1417H541Q753 1417 866 1312T979 995Z" />
+<glyph unicode="Q" glyph-name="Q" horiz-adv-x="1372" d="M1133 707Q1133 798 1119 881T1070 1043T985 1178T856 1269T682 1303Q587 1303 510 1269T383 1177T299 1041T251 880T236 707Q236 620 251 538T301 378T386 242T513 148T682 113T852 147T980 239T1066
+374T1117 534T1133 707ZM1284 707Q1284 192 928 20Q928 -17 985 -68T1075 -119Q1083 -121 1100 -121Q1144 -121 1197 -97T1282 -37Q1285 -105 1214 -175T1055 -246Q961 -246 873 -175T766 -20Q730 -20 713 -21T682 -23Q561 -23 461 16T292 124T176 285T106 484T84
+707Q84 822 106 927T175 1127T291 1291T460 1401T682 1442Q805 1442 906 1403T1076 1295T1193 1132T1262 932T1284 707Z" />
+<glyph unicode="R" glyph-name="R" horiz-adv-x="1112" d="M821 1016Q821 1269 539 1276H295V748H539Q672 748 746 816T821 1016ZM1092 0H930Q886 40 859 99T808 243T770 365Q656 606 520 606H506H295V0H141V1417H539Q973 1417 973 1016Q973 947 963 899T926 805T845
+727T709 672Q731 659 751 641T787 604T818 562T846 517T871 471T893 425T913 381T952 276T1015 120T1092 0Z" />
+<glyph unicode="S" glyph-name="S" horiz-adv-x="1067" d="M999 385Q999 295 974 224T904 106T796 28T659 -16T500 -29Q433 -29 354 -15T222 15T84 59V246Q293 109 500 109Q566 109 625 123T735 167T816 249T846 371Q846 436 827 481T766 557T682 604T569 639L461
+659Q387 676 333 695T230 744T151 814T104 910T86 1040Q86 1142 120 1220T215 1346T359 1418T541 1442Q631 1442 738 1422T922 1368V1200Q841 1241 801 1258T698 1289T559 1303Q490 1303 435 1291T333 1250T260 1173T231 1055Q231 1007 245 971T282 912T342 871T415
+844T502 823L616 803Q801 760 900 663T999 385Z" />
+<glyph unicode="T" glyph-name="T" horiz-adv-x="1142" d="M1122 1268H649V0H496V1268H20V1417H1122V1268Z" />
+<glyph unicode="U" glyph-name="U" horiz-adv-x="1253" d="M1124 528Q1124 265 1005 118T631 -29Q376 -29 253 117T129 528V1417H283V553Q283 468 291 404T323 282T385 188T485 130T631 109Q733 109 802 140T907 234T958 372T973 553V1417H1124V528Z" />
+<glyph unicode="V" glyph-name="V" horiz-adv-x="1226" d="M1206 1417L616 -29L20 1417H178L616 369L1044 1417H1206Z" />
+<glyph unicode="W" glyph-name="W" horiz-adv-x="1726" d="M1686 1417L1255 -29L860 1044L477 -29L43 1417H197L498 451L860 1450L1235 451L1532 1417H1686Z" />
+<glyph unicode="X" glyph-name="X" horiz-adv-x="1140" d="M1120 0H952L571 614L178 0H10L492 760L72 1417H240L582 881L926 1417H1094L666 737L1120 0Z" />
+<glyph unicode="Y" glyph-name="Y" horiz-adv-x="1091" d="M1094 1417L623 676V0H469V676L0 1417H168L547 821L926 1417H1094Z" />
+<glyph unicode="Z" glyph-name="Z" horiz-adv-x="1155" d="M1112 0H51V137L895 1266H70V1417H1090L1087 1282L244 147H1112V0Z" />
+<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="542" d="M508 -256H141V1477H508V1354H287V-137H508V-256Z" />
+<glyph unicode="\" glyph-name="backslash" horiz-adv-x="647" d="M623 -180H494L23 1417H150L623 -180Z" />
+<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="542" d="M401 -256H35V-137H256V1354H35V1477H401V-256Z" />
+<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="1234" d="M1198 887L1016 889L616 1260L217 889L37 887L530 1417H702L1198 887Z" />
+<glyph unicode="_" glyph-name="underscore" horiz-adv-x="921" d="M926 -459H-20V-322H926V-459Z" />
+<glyph unicode="`" glyph-name="grave" horiz-adv-x="573" d="M510 1040H375L72 1352H250L510 1040Z" />
+<glyph unicode="a" glyph-name="a" horiz-adv-x="1024" d="M709 365V381Q693 416 636 443T516 471Q478 471 444 468T368 452T297 420T247 364T225 281Q225 193 282 149T430 104Q557 106 633 168T709 365ZM967 139Q964 75 924 29T819 -25Q769 -21 739 17T709 121Q655
+52 570 14T387 -25Q246 -25 168 52T86 270Q86 357 119 420T210 517T339 568T496 584Q544 584 604 567T709 522V582Q706 711 639 765T446 819Q352 819 283 791T150 700V852Q208 894 296 920T461 946Q850 946 850 584V176Q847 116 897 104H903Q936 104 967 139Z"
+/>
+<glyph unicode="b" glyph-name="b" horiz-adv-x="1062" d="M295 778V141Q376 106 479 106Q644 110 727 201T811 461Q811 626 726 720T479 815Q368 810 295 778ZM141 1417H295V920Q391 946 487 946Q711 946 838 815T965 461Q962 240 840 108T498 -25Q302 -25 141 51V1417Z" />
+<glyph unicode="c" glyph-name="c" horiz-adv-x="925" d="M852 33Q692 -25 561 -25Q342 -25 220 107T94 461Q94 684 220 815T571 946Q693 946 852 891V737Q763 780 715 795T580 815Q418 815 333 721T248 461Q248 293 331 202T580 106Q618 106 648 109T702 118T750
+134T798 156T852 184V33Z" />
+<glyph unicode="d" glyph-name="d" horiz-adv-x="1056" d="M764 778Q691 810 580 815Q418 815 333 721T248 461Q248 293 331 202T580 106Q683 106 764 141V778ZM918 1417V51Q757 -25 561 -25Q342 -25 220 107T94 461Q94 684 220 815T571 946Q668 946 764 920V1417H918Z" />
+<glyph unicode="e" glyph-name="e" horiz-adv-x="1015" d="M784 588Q784 685 711 750T520 815Q409 815 341 751T258 588H784ZM934 463H252V446Q252 284 332 199T557 113Q682 113 733 127T901 199V45Q722 -25 547 -25Q338 -25 216 107T94 453Q94 550 122 638T203
+795T338 905T520 946Q632 944 713 909T841 809T911 663T934 477V463Z" />
+<glyph unicode="f" glyph-name="f" horiz-adv-x="657" d="M610 1286H459Q420 1286 389 1237T358 1067V924H621V801H358V0H205V801H55V924H205V1051Q213 1414 461 1417H610V1286Z" />
+<glyph unicode="g" glyph-name="g" horiz-adv-x="927" d="M461 811Q378 811 320 752T262 610T320 469T461 410Q543 410 601 468T659 610T601 752T461 811ZM436 154Q548 154 652 118T828 6T901 -172Q901 -298 764 -395T436 -492Q250 -492 131 -396T12 -170Q12 -89
+62 -19T201 96Q90 158 90 244Q90 303 135 340T229 379Q141 467 141 606Q145 744 242 842T471 942Q534 942 602 922H862V807H713Q780 714 780 606Q780 467 687 369T461 270Q429 270 377 279T303 307Q231 307 231 246Q231 215 274 184T385 152Q403 154 436 154ZM434
+23Q307 23 236 -31T164 -172T235 -312T434 -365Q564 -365 645 -311T727 -172T646 -32T434 23Z" />
+<glyph unicode="h" glyph-name="h" horiz-adv-x="1067" d="M938 0H788V553Q788 682 739 746T571 813Q452 811 374 732T293 522V0H141V1417H293V797Q385 946 608 946Q720 946 796 894T905 757T938 561V0Z" />
+<glyph unicode="i" glyph-name="i" horiz-adv-x="436" d="M183 1417T219 1417T282 1388T309 1321T282 1255T219 1225T156 1254T129 1321T156 1387ZM295 0H141V924H295V0Z" />
+<glyph unicode="j" glyph-name="j" horiz-adv-x="440" d="M183 1417T219 1417T282 1388T309 1321T282 1255T219 1225T156 1254T129 1321T156 1387ZM299 -172Q299 -347 223 -426Q182 -472 121 -492L57 -377Q84 -367 113 -336Q141 -297 141 -172V924H299V-172Z" />
+<glyph unicode="k" glyph-name="k" horiz-adv-x="1024" d="M1001 0H788L297 440V0H141V1417H297V541L772 924H981L461 496L1001 0Z" />
+<glyph unicode="l" glyph-name="l" horiz-adv-x="409" d="M270 1417V0H119V1417H270Z" />
+<glyph unicode="m" glyph-name="m" horiz-adv-x="1646" d="M1516 0H1372V553Q1372 678 1327 744T1171 811Q1040 811 972 734T901 522V0H756V553Q756 682 712 746T555 811H547Q437 811 367 730T293 522V0H141V926H293V801Q345 865 428 905T600 946Q697 946 771
+895T883 760Q939 846 1025 896T1214 946Q1296 946 1356 914T1450 826T1500 703T1516 557V0Z" />
+<glyph unicode="n" glyph-name="n" horiz-adv-x="1067" d="M938 0H788V553Q788 682 738 746T571 811Q448 811 372 733T293 522V0H141V926H293V799Q346 873 429 909T608 946Q776 946 857 840T938 557V0Z" />
+<glyph unicode="o" glyph-name="o" horiz-adv-x="1062" d="M813 461Q812 552 780 629T681 757T528 809Q436 808 372 760T278 637T248 467Q248 421 255 377T281 284T330 200T411 140T528 115Q653 115 732 217T813 461ZM965 461Q964 329 914 221T764 45T528 -25Q333
+-21 214 121T92 461Q94 672 210 809T528 946Q618 946 692 918T816 843T900 733T949 602T965 461Z" />
+<glyph unicode="p" glyph-name="p" horiz-adv-x="1056" d="M289 145Q363 114 473 109Q634 109 719 203T805 463Q805 631 722 722T473 817Q367 817 289 782V145ZM135 -494V872Q293 948 492 948Q710 948 832 816T958 463Q958 240 832 109T481 -23Q389 -23 289 4V-494H135Z" />
+<glyph unicode="q" glyph-name="q" horiz-adv-x="1054" d="M762 145V782Q684 817 578 817Q412 814 329 723T246 463Q246 298 331 204T578 109Q688 114 762 145ZM915 -494H762V4Q661 -23 569 -23Q345 -23 219 108T92 463Q95 684 217 816T559 948Q758 948 915 872V-494Z" />
+<glyph unicode="r" glyph-name="r" horiz-adv-x="757" d="M664 700L659 702Q633 735 568 771T467 807H463Q411 803 375 773T323 700T301 624T295 563V0H141V926H295V801Q327 864 383 899T512 938Q565 938 626 911T729 840L664 700Z" />
+<glyph unicode="s" glyph-name="s" horiz-adv-x="903" d="M817 256Q817 194 794 145T732 64T642 13T537 -16T426 -25Q297 -25 88 31V199Q164 162 182 154T246 130T329 111T430 104Q473 104 510 110T585 130T645 174T670 244Q670 286 649 314T593 357T515 382T430
+401L373 414Q244 439 175 497T102 674Q102 749 132 803T216 888T331 932T465 946Q644 946 772 897V743Q710 772 674 787T602 808T485 817Q442 817 404 812T328 792T266 750T240 680Q240 656 250 637T278 605T317 582T364 565T414 553T461 543L512 528Q582 515 631
+498T726 450T794 371T817 256Z" />
+<glyph unicode="t" glyph-name="t" horiz-adv-x="706" d="M659 10Q580 -25 498 -29Q327 -29 252 50T176 303V803H68V924H176L262 1188H328V924H600V803H328V303Q328 192 361 147T498 102Q574 102 659 141V10Z" />
+<glyph unicode="u" glyph-name="u" horiz-adv-x="1073" d="M932 0H774V121Q721 58 637 17T465 -25Q299 -25 215 83T131 365V924H281V369Q281 243 331 177T500 111Q636 111 705 188T774 401V924H932V0Z" />
+<glyph unicode="v" glyph-name="v" d="M944 924L494 -29L43 924H184L494 276L803 924H944Z" />
+<glyph unicode="w" glyph-name="w" horiz-adv-x="1363" d="M1305 924L975 -29L684 659L385 -29L61 924H193L410 297L684 946L958 297L1174 924H1305Z" />
+<glyph unicode="x" glyph-name="x" horiz-adv-x="968" d="M930 0H770L481 373L193 0H33L410 485L63 924H229L492 586L750 924H913L563 477L930 0Z" />
+<glyph unicode="y" glyph-name="y" horiz-adv-x="970" d="M936 924L381 -354Q344 -414 288 -452T174 -494L123 -389Q157 -389 207 -355T276 -276L434 96L31 924H176L510 248L795 924H936Z" />
+<glyph unicode="z" glyph-name="z" horiz-adv-x="921" d="M840 0H74V154L662 788H94V924H840V770L254 135H840V0Z" />
+<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="731" d="M702 -317H659Q447 -317 367 -246Q301 -180 301 27V256Q301 402 246 463Q195 520 55 520H12V641H55Q192 641 246 700Q301 758 301 901V1133Q301 1342 369 1407Q445 1474 659 1477H702V1358H653Q510
+1358 473 1313Q433 1270 430 1128V891Q430 736 391 684Q356 619 250 580Q360 544 391 483Q430 422 430 270V31Q430 -106 473 -152Q511 -194 653 -197H702V-317Z" />
+<glyph unicode="|" glyph-name="bar" horiz-adv-x="430" d="M289 -459H141V1483H289V-459Z" />
+<glyph unicode="}" glyph-name="braceright" horiz-adv-x="727" d="M715 520H674Q532 520 481 463Q428 404 428 256V27Q428 -176 358 -246Q284 -317 72 -317H29V-197H78Q216 -197 254 -154Q299 -109 299 31V270Q299 422 336 481Q370 545 483 580Q418 601 385 625T336
+684Q299 734 299 891V1128Q299 1272 254 1311Q217 1355 78 1358H29V1477H72Q282 1477 358 1407Q428 1344 428 1133V901Q428 757 481 698Q540 641 674 641H715V520Z" />
+<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="1277" d="M1167 537Q1096 477 1008 438Q926 413 858 410Q760 410 645 463L632 470Q619 476 596 485T544 503T477 519T403 526H397Q311 526 246 494Q190 471 106 385V526Q168 578 264 623Q340 651 418
+651Q454 651 535 631T657 590Q795 535 877 535Q937 535 1028 567Q1125 636 1167 674V537Z" />
+<hkern g1="parenleft" g2="J" k="-135" />
+<hkern g1="hyphen" g2="T" k="143" />
+<hkern g1="hyphen" g2="V" k="106" />
+<hkern g1="hyphen" g2="W" k="74" />
+<hkern g1="hyphen" g2="X" k="55" />
+<hkern g1="hyphen" g2="Y" k="131" />
+<hkern g1="A" g2="comma" k="-33" />
+<hkern g1="A" g2="period" k="-39" />
+<hkern g1="A" g2="A" k="-41" />
+<hkern g1="A" g2="C" k="41" />
+<hkern g1="A" g2="G" k="41" />
+<hkern g1="A" g2="O" k="39" />
+<hkern g1="A" g2="Q" k="39" />
+<hkern g1="A" g2="T" k="211" />
+<hkern g1="A" g2="U" k="39" />
+<hkern g1="A" g2="V" k="178" />
+<hkern g1="A" g2="W" k="141" />
+<hkern g1="A" g2="Y" k="190" />
+<hkern g1="A" g2="d" k="35" />
+<hkern g1="A" g2="f" k="51" />
+<hkern g1="A" g2="g" k="-25" />
+<hkern g1="A" g2="t" k="39" />
+<hkern g1="A" g2="v" k="88" />
+<hkern g1="A" g2="w" k="70" />
+<hkern g1="A" g2="y" k="82" />
+<hkern g1="A" g2="guillemotleft" k="33" />
+<hkern g1="A" g2="Adieresis" k="-41" />
+<hkern g1="A" g2="Ccedilla" k="41" />
+<hkern g1="A" g2="Ograve" k="39" />
+<hkern g1="A" g2="Oacute" k="39" />
+<hkern g1="A" g2="Ocircumflex" k="39" />
+<hkern g1="A" g2="Otilde" k="39" />
+<hkern g1="A" g2="Odieresis" k="39" />
+<hkern g1="A" g2="Ugrave" k="39" />
+<hkern g1="A" g2="Uacute" k="39" />
+<hkern g1="A" g2="Ucircumflex" k="39" />
+<hkern g1="A" g2="Udieresis" k="39" />
+<hkern g1="A" g2="Yacute" k="190" />
+<hkern g1="A" g2="ograve" k="29" />
+<hkern g1="A" g2="oacute" k="29" />
+<hkern g1="A" g2="ocircumflex" k="29" />
+<hkern g1="A" g2="otilde" k="25" />
+<hkern g1="A" g2="odieresis" k="20" />
+<hkern g1="A" g2="udieresis" k="20" />
+<hkern g1="A" g2="Ydieresis" k="190" />
+<hkern g1="A" g2="quoteright" k="104" />
+<hkern g1="A" g2="quotedblright" k="104" />
+<hkern g1="A" g2="guilsinglleft" k="33" />
+<hkern g1="B" g2="hyphen" k="-23" />
+<hkern g1="B" g2="V" k="51" />
+<hkern g1="B" g2="W" k="41" />
+<hkern g1="B" g2="Y" k="70" />
+<hkern g1="B" g2="y" k="29" />
+<hkern g1="C" g2="hyphen" k="307" />
+<hkern g1="C" g2="O" k="61" />
+<hkern g1="C" g2="v" k="184" />
+<hkern g1="C" g2="w" k="139" />
+<hkern g1="C" g2="y" k="182" />
+<hkern g1="C" g2="Oacute" k="61" />
+<hkern g1="C" g2="Odieresis" k="61" />
+<hkern g1="D" g2="A" k="47" />
+<hkern g1="D" g2="T" k="125" />
+<hkern g1="D" g2="V" k="63" />
+<hkern g1="D" g2="W" k="45" />
+<hkern g1="D" g2="X" k="86" />
+<hkern g1="D" g2="Y" k="98" />
+<hkern g1="D" g2="Agrave" k="47" />
+<hkern g1="D" g2="Aacute" k="47" />
+<hkern g1="D" g2="Acircumflex" k="47" />
+<hkern g1="D" g2="Atilde" k="47" />
+<hkern g1="D" g2="Adieresis" k="47" />
+<hkern g1="D" g2="Aring" k="47" />
+<hkern g1="E" g2="G" k="35" />
+<hkern g1="E" g2="c" k="55" />
+<hkern g1="E" g2="d" k="74" />
+<hkern g1="E" g2="v" k="39" />
+<hkern g1="E" g2="w" k="39" />
+<hkern g1="E" g2="y" k="31" />
+<hkern g1="F" g2="comma" k="199" />
+<hkern g1="F" g2="hyphen" k="195" />
+<hkern g1="F" g2="period" k="195" />
+<hkern g1="F" g2="A" k="152" />
+<hkern g1="F" g2="O" k="29" />
+<hkern g1="F" g2="a" k="76" />
+<hkern g1="F" g2="e" k="76" />
+<hkern g1="F" g2="o" k="72" />
+<hkern g1="F" g2="r" k="59" />
+<hkern g1="F" g2="u" k="51" />
+<hkern g1="F" g2="y" k="29" />
+<hkern g1="F" g2="Agrave" k="152" />
+<hkern g1="F" g2="Aacute" k="152" />
+<hkern g1="F" g2="Acircumflex" k="152" />
+<hkern g1="F" g2="Atilde" k="152" />
+<hkern g1="F" g2="Adieresis" k="152" />
+<hkern g1="F" g2="Aring" k="152" />
+<hkern g1="F" g2="Odieresis" k="29" />
+<hkern g1="F" g2="Oslash" k="39" />
+<hkern g1="F" g2="agrave" k="82" />
+<hkern g1="F" g2="aacute" k="86" />
+<hkern g1="F" g2="acircumflex" k="84" />
+<hkern g1="F" g2="atilde" k="74" />
+<hkern g1="F" g2="adieresis" k="74" />
+<hkern g1="F" g2="aring" k="74" />
+<hkern g1="F" g2="ae" k="76" />
+<hkern g1="F" g2="egrave" k="84" />
+<hkern g1="F" g2="eacute" k="86" />
+<hkern g1="F" g2="ecircumflex" k="86" />
+<hkern g1="F" g2="edieresis" k="78" />
+<hkern g1="F" g2="ograve" k="82" />
+<hkern g1="F" g2="oacute" k="84" />
+<hkern g1="F" g2="ocircumflex" k="82" />
+<hkern g1="F" g2="otilde" k="76" />
+<hkern g1="F" g2="odieresis" k="74" />
+<hkern g1="F" g2="oslash" k="80" />
+<hkern g1="F" g2="ugrave" k="63" />
+<hkern g1="F" g2="uacute" k="66" />
+<hkern g1="F" g2="ucircumflex" k="63" />
+<hkern g1="F" g2="udieresis" k="57" />
+<hkern g1="F" g2="oe" k="70" />
+<hkern g1="G" g2="T" k="31" />
+<hkern g1="G" g2="V" k="41" />
+<hkern g1="G" g2="W" k="41" />
+<hkern g1="G" g2="Y" k="43" />
+<hkern g1="K" g2="hyphen" k="98" />
+<hkern g1="K" g2="A" k="-49" />
+<hkern g1="K" g2="C" k="117" />
+<hkern g1="K" g2="G" k="117" />
+<hkern g1="K" g2="O" k="113" />
+<hkern g1="K" g2="Q" k="115" />
+<hkern g1="K" g2="U" k="43" />
+<hkern g1="K" g2="Y" k="-20" />
+<hkern g1="K" g2="a" k="29" />
+<hkern g1="K" g2="e" k="78" />
+<hkern g1="K" g2="o" k="82" />
+<hkern g1="K" g2="u" k="70" />
+<hkern g1="K" g2="v" k="201" />
+<hkern g1="K" g2="w" k="152" />
+<hkern g1="K" g2="y" k="182" />
+<hkern g1="K" g2="Adieresis" k="-49" />
+<hkern g1="K" g2="Aring" k="-49" />
+<hkern g1="K" g2="Ograve" k="113" />
+<hkern g1="K" g2="Oacute" k="113" />
+<hkern g1="K" g2="Ocircumflex" k="113" />
+<hkern g1="K" g2="Otilde" k="113" />
+<hkern g1="K" g2="Odieresis" k="113" />
+<hkern g1="K" g2="adieresis" k="35" />
+<hkern g1="K" g2="aring" k="39" />
+<hkern g1="K" g2="ae" k="29" />
+<hkern g1="K" g2="egrave" k="92" />
+<hkern g1="K" g2="eacute" k="94" />
+<hkern g1="K" g2="ecircumflex" k="92" />
+<hkern g1="K" g2="edieresis" k="86" />
+<hkern g1="K" g2="oacute" k="98" />
+<hkern g1="K" g2="odieresis" k="88" />
+<hkern g1="K" g2="udieresis" k="76" />
+<hkern g1="K" g2="OE" k="135" />
+<hkern g1="K" g2="oe" k="82" />
+<hkern g1="L" g2="hyphen" k="211" />
+<hkern g1="L" g2="A" k="-41" />
+<hkern g1="L" g2="C" k="135" />
+<hkern g1="L" g2="G" k="133" />
+<hkern g1="L" g2="O" k="129" />
+<hkern g1="L" g2="T" k="264" />
+<hkern g1="L" g2="U" k="102" />
+<hkern g1="L" g2="V" k="295" />
+<hkern g1="L" g2="W" k="221" />
+<hkern g1="L" g2="Y" k="244" />
+<hkern g1="L" g2="u" k="55" />
+<hkern g1="L" g2="y" k="190" />
+<hkern g1="L" g2="Aacute" k="-41" />
+<hkern g1="L" g2="Adieresis" k="-41" />
+<hkern g1="L" g2="Aring" k="-41" />
+<hkern g1="L" g2="AE" k="-43" />
+<hkern g1="L" g2="Ccedilla" k="137" />
+<hkern g1="L" g2="Ograve" k="129" />
+<hkern g1="L" g2="Oacute" k="129" />
+<hkern g1="L" g2="Ocircumflex" k="129" />
+<hkern g1="L" g2="Otilde" k="129" />
+<hkern g1="L" g2="Odieresis" k="129" />
+<hkern g1="L" g2="Udieresis" k="104" />
+<hkern g1="L" g2="udieresis" k="63" />
+<hkern g1="L" g2="quoteright" k="209" />
+<hkern g1="L" g2="quotedblright" k="209" />
+<hkern g1="N" g2="aacute" k="20" />
+<hkern g1="N" g2="eacute" k="23" />
+<hkern g1="N" g2="oacute" k="20" />
+<hkern g1="O" g2="comma" k="59" />
+<hkern g1="O" g2="period" k="49" />
+<hkern g1="O" g2="A" k="45" />
+<hkern g1="O" g2="T" k="117" />
+<hkern g1="O" g2="V" k="63" />
+<hkern g1="O" g2="W" k="49" />
+<hkern g1="O" g2="X" k="78" />
+<hkern g1="O" g2="Y" k="94" />
+<hkern g1="O" g2="Agrave" k="45" />
+<hkern g1="O" g2="Aacute" k="45" />
+<hkern g1="O" g2="Acircumflex" k="45" />
+<hkern g1="O" g2="Atilde" k="45" />
+<hkern g1="O" g2="Adieresis" k="45" />
+<hkern g1="O" g2="Aring" k="45" />
+<hkern g1="O" g2="AE" k="51" />
+<hkern g1="P" g2="comma" k="248" />
+<hkern g1="P" g2="hyphen" k="244" />
+<hkern g1="P" g2="period" k="244" />
+<hkern g1="P" g2="A" k="139" />
+<hkern g1="P" g2="a" k="66" />
+<hkern g1="P" g2="e" k="82" />
+<hkern g1="P" g2="i" k="37" />
+<hkern g1="P" g2="n" k="43" />
+<hkern g1="P" g2="o" k="80" />
+<hkern g1="P" g2="r" k="43" />
+<hkern g1="P" g2="s" k="47" />
+<hkern g1="P" g2="u" k="35" />
+<hkern g1="P" g2="Agrave" k="139" />
+<hkern g1="P" g2="Aacute" k="139" />
+<hkern g1="P" g2="Acircumflex" k="139" />
+<hkern g1="P" g2="Atilde" k="139" />
+<hkern g1="P" g2="Adieresis" k="139" />
+<hkern g1="P" g2="Aring" k="139" />
+<hkern g1="P" g2="AE" k="154" />
+<hkern g1="P" g2="agrave" k="74" />
+<hkern g1="P" g2="aacute" k="74" />
+<hkern g1="P" g2="acircumflex" k="63" />
+<hkern g1="P" g2="atilde" k="53" />
+<hkern g1="P" g2="adieresis" k="59" />
+<hkern g1="P" g2="aring" k="70" />
+<hkern g1="P" g2="ae" k="66" />
+<hkern g1="P" g2="egrave" k="94" />
+<hkern g1="P" g2="eacute" k="94" />
+<hkern g1="P" g2="ecircumflex" k="84" />
+<hkern g1="P" g2="edieresis" k="78" />
+<hkern g1="P" g2="ograve" k="92" />
+<hkern g1="P" g2="oacute" k="92" />
+<hkern g1="P" g2="ocircumflex" k="82" />
+<hkern g1="P" g2="otilde" k="74" />
+<hkern g1="P" g2="odieresis" k="74" />
+<hkern g1="P" g2="oslash" k="90" />
+<hkern g1="P" g2="ugrave" k="49" />
+<hkern g1="P" g2="uacute" k="49" />
+<hkern g1="P" g2="ucircumflex" k="43" />
+<hkern g1="P" g2="udieresis" k="39" />
+<hkern g1="P" g2="oe" k="78" />
+<hkern g1="Q" g2="A" k="43" />
+<hkern g1="Q" g2="Adieresis" k="43" />
+<hkern g1="R" g2="hyphen" k="29" />
+<hkern g1="R" g2="C" k="20" />
+<hkern g1="R" g2="G" k="20" />
+<hkern g1="R" g2="O" k="20" />
+<hkern g1="R" g2="Q" k="20" />
+<hkern g1="R" g2="T" k="78" />
+<hkern g1="R" g2="V" k="59" />
+<hkern g1="R" g2="W" k="47" />
+<hkern g1="R" g2="Y" k="76" />
+<hkern g1="R" g2="e" k="27" />
+<hkern g1="R" g2="o" k="29" />
+<hkern g1="R" g2="y" k="33" />
+<hkern g1="R" g2="Ccedilla" k="20" />
+<hkern g1="R" g2="Oacute" k="20" />
+<hkern g1="R" g2="Odieresis" k="20" />
+<hkern g1="R" g2="eacute" k="47" />
+<hkern g1="R" g2="oacute" k="51" />
+<hkern g1="R" g2="odieresis" k="39" />
+<hkern g1="R" g2="uacute" k="39" />
+<hkern g1="R" g2="udieresis" k="29" />
+<hkern g1="R" g2="OE" k="25" />
+<hkern g1="R" g2="oe" k="29" />
+<hkern g1="R" g2="quotesinglbase" k="-27" />
+<hkern g1="R" g2="quotedblbase" k="-27" />
+<hkern g1="S" g2="S" k="29" />
+<hkern g1="S" g2="T" k="33" />
+<hkern g1="S" g2="V" k="43" />
+<hkern g1="S" g2="W" k="47" />
+<hkern g1="S" g2="Y" k="41" />
+<hkern g1="S" g2="t" k="35" />
+<hkern g1="S" g2="quoteright" k="37" />
+<hkern g1="T" g2="comma" k="147" />
+<hkern g1="T" g2="hyphen" k="141" />
+<hkern g1="T" g2="period" k="141" />
+<hkern g1="T" g2="colon" k="141" />
+<hkern g1="T" g2="semicolon" k="143" />
+<hkern g1="T" g2="A" k="211" />
+<hkern g1="T" g2="C" k="117" />
+<hkern g1="T" g2="G" k="117" />
+<hkern g1="T" g2="H" k="23" />
+<hkern g1="T" g2="O" k="115" />
+<hkern g1="T" g2="S" k="41" />
+<hkern g1="T" g2="T" k="-51" />
+<hkern g1="T" g2="V" k="-39" />
+<hkern g1="T" g2="W" k="-27" />
+<hkern g1="T" g2="Y" k="-45" />
+<hkern g1="T" g2="a" k="242" />
+<hkern g1="T" g2="c" k="240" />
+<hkern g1="T" g2="e" k="240" />
+<hkern g1="T" g2="g" k="238" />
+<hkern g1="T" g2="h" k="27" />
+<hkern g1="T" g2="o" k="240" />
+<hkern g1="T" g2="r" k="236" />
+<hkern g1="T" g2="s" k="244" />
+<hkern g1="T" g2="u" k="238" />
+<hkern g1="T" g2="v" k="258" />
+<hkern g1="T" g2="w" k="256" />
+<hkern g1="T" g2="y" k="250" />
+<hkern g1="T" g2="z" k="248" />
+<hkern g1="T" g2="guillemotleft" k="248" />
+<hkern g1="T" g2="Agrave" k="211" />
+<hkern g1="T" g2="Aacute" k="211" />
+<hkern g1="T" g2="Acircumflex" k="211" />
+<hkern g1="T" g2="Atilde" k="211" />
+<hkern g1="T" g2="Adieresis" k="211" />
+<hkern g1="T" g2="Aring" k="211" />
+<hkern g1="T" g2="AE" k="223" />
+<hkern g1="T" g2="Ograve" k="115" />
+<hkern g1="T" g2="Oacute" k="115" />
+<hkern g1="T" g2="Ocircumflex" k="115" />
+<hkern g1="T" g2="Otilde" k="115" />
+<hkern g1="T" g2="Odieresis" k="115" />
+<hkern g1="T" g2="Oslash" k="123" />
+<hkern g1="T" g2="agrave" k="147" />
+<hkern g1="T" g2="aacute" k="238" />
+<hkern g1="T" g2="acircumflex" k="178" />
+<hkern g1="T" g2="atilde" k="113" />
+<hkern g1="T" g2="adieresis" k="119" />
+<hkern g1="T" g2="aring" k="115" />
+<hkern g1="T" g2="ae" k="242" />
+<hkern g1="T" g2="egrave" k="182" />
+<hkern g1="T" g2="eacute" k="244" />
+<hkern g1="T" g2="ecircumflex" k="199" />
+<hkern g1="T" g2="edieresis" k="137" />
+<hkern g1="T" g2="ograve" k="190" />
+<hkern g1="T" g2="oacute" k="248" />
+<hkern g1="T" g2="ocircumflex" k="203" />
+<hkern g1="T" g2="otilde" k="147" />
+<hkern g1="T" g2="odieresis" k="133" />
+<hkern g1="T" g2="oslash" k="244" />
+<hkern g1="T" g2="ugrave" k="186" />
+<hkern g1="T" g2="uacute" k="242" />
+<hkern g1="T" g2="ucircumflex" k="201" />
+<hkern g1="T" g2="udieresis" k="133" />
+<hkern g1="T" g2="OE" k="135" />
+<hkern g1="T" g2="oe" k="238" />
+<hkern g1="T" g2="guilsinglleft" k="248" />
+<hkern g1="U" g2="comma" k="45" />
+<hkern g1="U" g2="period" k="35" />
+<hkern g1="U" g2="A" k="41" />
+<hkern g1="U" g2="Aacute" k="41" />
+<hkern g1="U" g2="Acircumflex" k="41" />
+<hkern g1="U" g2="Atilde" k="41" />
+<hkern g1="U" g2="Adieresis" k="41" />
+<hkern g1="U" g2="Aring" k="41" />
+<hkern g1="U" g2="AE" k="47" />
+<hkern g1="V" g2="comma" k="168" />
+<hkern g1="V" g2="hyphen" k="104" />
+<hkern g1="V" g2="period" k="160" />
+<hkern g1="V" g2="colon" k="76" />
+<hkern g1="V" g2="semicolon" k="82" />
+<hkern g1="V" g2="A" k="178" />
+<hkern g1="V" g2="C" k="63" />
+<hkern g1="V" g2="G" k="63" />
+<hkern g1="V" g2="O" k="63" />
+<hkern g1="V" g2="S" k="29" />
+<hkern g1="V" g2="T" k="-37" />
+<hkern g1="V" g2="a" k="160" />
+<hkern g1="V" g2="e" k="160" />
+<hkern g1="V" g2="g" k="168" />
+<hkern g1="V" g2="i" k="27" />
+<hkern g1="V" g2="o" k="158" />
+<hkern g1="V" g2="r" k="133" />
+<hkern g1="V" g2="u" k="129" />
+<hkern g1="V" g2="y" k="94" />
+<hkern g1="V" g2="guillemotleft" k="172" />
+<hkern g1="V" g2="Agrave" k="178" />
+<hkern g1="V" g2="Aacute" k="178" />
+<hkern g1="V" g2="Acircumflex" k="178" />
+<hkern g1="V" g2="Atilde" k="178" />
+<hkern g1="V" g2="Adieresis" k="178" />
+<hkern g1="V" g2="Aring" k="178" />
+<hkern g1="V" g2="AE" k="190" />
+<hkern g1="V" g2="Ograve" k="63" />
+<hkern g1="V" g2="Oacute" k="63" />
+<hkern g1="V" g2="Ocircumflex" k="63" />
+<hkern g1="V" g2="Otilde" k="63" />
+<hkern g1="V" g2="Odieresis" k="63" />
+<hkern g1="V" g2="Oslash" k="70" />
+<hkern g1="V" g2="agrave" k="137" />
+<hkern g1="V" g2="aacute" k="162" />
+<hkern g1="V" g2="acircumflex" k="131" />
+<hkern g1="V" g2="atilde" k="100" />
+<hkern g1="V" g2="adieresis" k="113" />
+<hkern g1="V" g2="aring" k="109" />
+<hkern g1="V" g2="ae" k="160" />
+<hkern g1="V" g2="egrave" k="156" />
+<hkern g1="V" g2="eacute" k="168" />
+<hkern g1="V" g2="ecircumflex" k="143" />
+<hkern g1="V" g2="edieresis" k="125" />
+<hkern g1="V" g2="ograve" k="158" />
+<hkern g1="V" g2="oacute" k="168" />
+<hkern g1="V" g2="ocircumflex" k="145" />
+<hkern g1="V" g2="otilde" k="125" />
+<hkern g1="V" g2="odieresis" k="121" />
+<hkern g1="V" g2="oslash" k="166" />
+<hkern g1="V" g2="ugrave" k="135" />
+<hkern g1="V" g2="uacute" k="141" />
+<hkern g1="V" g2="ucircumflex" k="127" />
+<hkern g1="V" g2="udieresis" k="109" />
+<hkern g1="V" g2="OE" k="66" />
+<hkern g1="V" g2="oe" k="156" />
+<hkern g1="V" g2="quoteright" k="-20" />
+<hkern g1="V" g2="quotedblright" k="-20" />
+<hkern g1="V" g2="guilsinglleft" k="172" />
+<hkern g1="W" g2="comma" k="119" />
+<hkern g1="W" g2="hyphen" k="72" />
+<hkern g1="W" g2="period" k="111" />
+<hkern g1="W" g2="colon" k="55" />
+<hkern g1="W" g2="semicolon" k="59" />
+<hkern g1="W" g2="A" k="139" />
+<hkern g1="W" g2="C" k="47" />
+<hkern g1="W" g2="G" k="47" />
+<hkern g1="W" g2="O" k="45" />
+<hkern g1="W" g2="S" k="23" />
+<hkern g1="W" g2="T" k="-27" />
+<hkern g1="W" g2="a" k="117" />
+<hkern g1="W" g2="e" k="113" />
+<hkern g1="W" g2="g" k="121" />
+<hkern g1="W" g2="i" k="25" />
+<hkern g1="W" g2="o" k="113" />
+<hkern g1="W" g2="r" k="94" />
+<hkern g1="W" g2="u" k="92" />
+<hkern g1="W" g2="y" k="68" />
+<hkern g1="W" g2="guillemotleft" k="121" />
+<hkern g1="W" g2="Agrave" k="139" />
+<hkern g1="W" g2="Aacute" k="139" />
+<hkern g1="W" g2="Acircumflex" k="139" />
+<hkern g1="W" g2="Atilde" k="139" />
+<hkern g1="W" g2="Adieresis" k="139" />
+<hkern g1="W" g2="Aring" k="139" />
+<hkern g1="W" g2="AE" k="150" />
+<hkern g1="W" g2="Ograve" k="45" />
+<hkern g1="W" g2="Oacute" k="45" />
+<hkern g1="W" g2="Ocircumflex" k="45" />
+<hkern g1="W" g2="Otilde" k="45" />
+<hkern g1="W" g2="Odieresis" k="45" />
+<hkern g1="W" g2="Oslash" k="51" />
+<hkern g1="W" g2="agrave" k="117" />
+<hkern g1="W" g2="aacute" k="127" />
+<hkern g1="W" g2="acircumflex" k="106" />
+<hkern g1="W" g2="atilde" k="84" />
+<hkern g1="W" g2="adieresis" k="94" />
+<hkern g1="W" g2="aring" k="98" />
+<hkern g1="W" g2="ae" k="117" />
+<hkern g1="W" g2="egrave" k="121" />
+<hkern g1="W" g2="eacute" k="127" />
+<hkern g1="W" g2="ecircumflex" k="113" />
+<hkern g1="W" g2="edieresis" k="98" />
+<hkern g1="W" g2="ograve" k="123" />
+<hkern g1="W" g2="oacute" k="127" />
+<hkern g1="W" g2="ocircumflex" k="113" />
+<hkern g1="W" g2="otilde" k="98" />
+<hkern g1="W" g2="odieresis" k="98" />
+<hkern g1="W" g2="oslash" k="119" />
+<hkern g1="W" g2="ugrave" k="104" />
+<hkern g1="W" g2="uacute" k="109" />
+<hkern g1="W" g2="ucircumflex" k="98" />
+<hkern g1="W" g2="udieresis" k="86" />
+<hkern g1="W" g2="oe" k="111" />
+<hkern g1="W" g2="quoteright" k="-20" />
+<hkern g1="W" g2="quotedblright" k="-20" />
+<hkern g1="W" g2="guilsinglleft" k="121" />
+<hkern g1="X" g2="hyphen" k="55" />
+<hkern g1="X" g2="A" k="-31" />
+<hkern g1="X" g2="C" k="74" />
+<hkern g1="X" g2="G" k="74" />
+<hkern g1="X" g2="O" k="70" />
+<hkern g1="X" g2="Q" k="72" />
+<hkern g1="X" g2="e" k="51" />
+<hkern g1="X" g2="o" k="55" />
+<hkern g1="X" g2="u" k="47" />
+<hkern g1="X" g2="y" k="139" />
+<hkern g1="X" g2="Adieresis" k="-31" />
+<hkern g1="X" g2="Aring" k="-31" />
+<hkern g1="X" g2="Ograve" k="70" />
+<hkern g1="X" g2="Oacute" k="70" />
+<hkern g1="X" g2="Ocircumflex" k="70" />
+<hkern g1="X" g2="Otilde" k="70" />
+<hkern g1="X" g2="Odieresis" k="70" />
+<hkern g1="X" g2="adieresis" k="25" />
+<hkern g1="X" g2="egrave" k="70" />
+<hkern g1="X" g2="eacute" k="72" />
+<hkern g1="X" g2="ecircumflex" k="68" />
+<hkern g1="X" g2="edieresis" k="59" />
+<hkern g1="X" g2="ograve" k="72" />
+<hkern g1="X" g2="oacute" k="74" />
+<hkern g1="X" g2="ocircumflex" k="70" />
+<hkern g1="X" g2="otilde" k="63" />
+<hkern g1="X" g2="odieresis" k="61" />
+<hkern g1="X" g2="udieresis" k="55" />
+<hkern g1="X" g2="OE" k="84" />
+<hkern g1="X" g2="oe" k="55" />
+<hkern g1="Y" g2="comma" k="135" />
+<hkern g1="Y" g2="hyphen" k="131" />
+<hkern g1="Y" g2="period" k="131" />
+<hkern g1="Y" g2="colon" k="109" />
+<hkern g1="Y" g2="semicolon" k="113" />
+<hkern g1="Y" g2="A" k="190" />
+<hkern g1="Y" g2="C" k="94" />
+<hkern g1="Y" g2="G" k="94" />
+<hkern g1="Y" g2="O" k="94" />
+<hkern g1="Y" g2="S" k="43" />
+<hkern g1="Y" g2="T" k="-47" />
+<hkern g1="Y" g2="a" k="201" />
+<hkern g1="Y" g2="d" k="236" />
+<hkern g1="Y" g2="e" k="211" />
+<hkern g1="Y" g2="g" k="209" />
+<hkern g1="Y" g2="i" k="25" />
+<hkern g1="Y" g2="o" k="209" />
+<hkern g1="Y" g2="p" k="190" />
+<hkern g1="Y" g2="q" k="209" />
+<hkern g1="Y" g2="u" k="186" />
+<hkern g1="Y" g2="v" k="164" />
+<hkern g1="Y" g2="guillemotleft" k="227" />
+<hkern g1="Y" g2="Agrave" k="190" />
+<hkern g1="Y" g2="Aacute" k="190" />
+<hkern g1="Y" g2="Acircumflex" k="190" />
+<hkern g1="Y" g2="Atilde" k="190" />
+<hkern g1="Y" g2="Adieresis" k="190" />
+<hkern g1="Y" g2="Aring" k="190" />
+<hkern g1="Y" g2="AE" k="201" />
+<hkern g1="Y" g2="Ograve" k="94" />
+<hkern g1="Y" g2="Oacute" k="94" />
+<hkern g1="Y" g2="Ocircumflex" k="94" />
+<hkern g1="Y" g2="Otilde" k="94" />
+<hkern g1="Y" g2="Odieresis" k="94" />
+<hkern g1="Y" g2="Oslash" k="98" />
+<hkern g1="Y" g2="agrave" k="145" />
+<hkern g1="Y" g2="aacute" k="199" />
+<hkern g1="Y" g2="acircumflex" k="158" />
+<hkern g1="Y" g2="atilde" k="119" />
+<hkern g1="Y" g2="adieresis" k="129" />
+<hkern g1="Y" g2="aring" k="115" />
+<hkern g1="Y" g2="ae" k="201" />
+<hkern g1="Y" g2="egrave" k="178" />
+<hkern g1="Y" g2="eacute" k="213" />
+<hkern g1="Y" g2="ecircumflex" k="178" />
+<hkern g1="Y" g2="edieresis" k="147" />
+<hkern g1="Y" g2="ograve" k="186" />
+<hkern g1="Y" g2="oacute" k="217" />
+<hkern g1="Y" g2="ocircumflex" k="180" />
+<hkern g1="Y" g2="otilde" k="150" />
+<hkern g1="Y" g2="odieresis" k="145" />
+<hkern g1="Y" g2="oslash" k="215" />
+<hkern g1="Y" g2="ugrave" k="174" />
+<hkern g1="Y" g2="uacute" k="193" />
+<hkern g1="Y" g2="ucircumflex" k="168" />
+<hkern g1="Y" g2="udieresis" k="139" />
+<hkern g1="Y" g2="oe" k="209" />
+<hkern g1="Y" g2="guilsinglleft" k="229" />
+<hkern g1="Z" g2="O" k="86" />
+<hkern g1="Z" g2="v" k="168" />
+<hkern g1="Z" g2="y" k="158" />
+<hkern g1="Z" g2="Odieresis" k="86" />
+<hkern g1="a" g2="t" k="35" />
+<hkern g1="a" g2="v" k="70" />
+<hkern g1="a" g2="w" k="59" />
+<hkern g1="a" g2="y" k="63" />
+<hkern g1="b" g2="v" k="49" />
+<hkern g1="b" g2="w" k="39" />
+<hkern g1="b" g2="y" k="43" />
+<hkern g1="e" g2="t" k="27" />
+<hkern g1="e" g2="v" k="39" />
+<hkern g1="e" g2="w" k="33" />
+<hkern g1="e" g2="y" k="31" />
+<hkern g1="f" g2="comma" k="68" />
+<hkern g1="f" g2="hyphen" k="61" />
+<hkern g1="f" g2="period" k="61" />
+<hkern g1="f" g2="a" k="33" />
+<hkern g1="f" g2="e" k="63" />
+<hkern g1="f" g2="o" k="61" />
+<hkern g1="f" g2="s" k="29" />
+<hkern g1="f" g2="y" k="-31" />
+<hkern g1="f" g2="aacute" k="47" />
+<hkern g1="f" g2="adieresis" k="39" />
+<hkern g1="f" g2="aring" k="43" />
+<hkern g1="f" g2="ae" k="33" />
+<hkern g1="f" g2="egrave" k="78" />
+<hkern g1="f" g2="eacute" k="82" />
+<hkern g1="f" g2="ecircumflex" k="78" />
+<hkern g1="f" g2="edieresis" k="70" />
+<hkern g1="f" g2="idieresis" k="-31" />
+<hkern g1="f" g2="oacute" k="80" />
+<hkern g1="f" g2="odieresis" k="70" />
+<hkern g1="f" g2="oslash" k="70" />
+<hkern g1="f" g2="udieresis" k="20" />
+<hkern g1="f" g2="oe" k="59" />
+<hkern g1="g" g2="a" k="27" />
+<hkern g1="g" g2="e" k="29" />
+<hkern g1="g" g2="g" k="-70" />
+<hkern g1="g" g2="o" k="27" />
+<hkern g1="g" g2="adieresis" k="27" />
+<hkern g1="g" g2="aring" k="27" />
+<hkern g1="g" g2="ae" k="27" />
+<hkern g1="g" g2="egrave" k="29" />
+<hkern g1="g" g2="eacute" k="29" />
+<hkern g1="g" g2="ecircumflex" k="29" />
+<hkern g1="g" g2="edieresis" k="29" />
+<hkern g1="g" g2="oacute" k="27" />
+<hkern g1="g" g2="odieresis" k="27" />
+<hkern g1="h" g2="t" k="35" />
+<hkern g1="h" g2="y" k="35" />
+<hkern g1="h" g2="yacute" k="59" />
+<hkern g1="h" g2="ydieresis" k="51" />
+<hkern g1="h" g2="quoteright" k="252" />
+<hkern g1="k" g2="hyphen" k="133" />
+<hkern g1="k" g2="a" k="31" />
+<hkern g1="k" g2="e" k="78" />
+<hkern g1="k" g2="o" k="78" />
+<hkern g1="k" g2="u" k="29" />
+<hkern g1="k" g2="aacute" k="51" />
+<hkern g1="k" g2="adieresis" k="45" />
+<hkern g1="k" g2="aring" k="51" />
+<hkern g1="k" g2="ae" k="31" />
+<hkern g1="k" g2="eacute" k="100" />
+<hkern g1="k" g2="oacute" k="102" />
+<hkern g1="k" g2="odieresis" k="94" />
+<hkern g1="k" g2="udieresis" k="43" />
+<hkern g1="l" g2="v" k="47" />
+<hkern g1="l" g2="y" k="39" />
+<hkern g1="m" g2="v" k="43" />
+<hkern g1="m" g2="w" k="35" />
+<hkern g1="m" g2="y" k="35" />
+<hkern g1="n" g2="T" k="240" />
+<hkern g1="n" g2="v" k="43" />
+<hkern g1="n" g2="w" k="35" />
+<hkern g1="n" g2="y" k="35" />
+<hkern g1="o" g2="t" k="23" />
+<hkern g1="o" g2="v" k="47" />
+<hkern g1="o" g2="w" k="39" />
+<hkern g1="o" g2="x" k="51" />
+<hkern g1="o" g2="y" k="43" />
+<hkern g1="p" g2="t" k="25" />
+<hkern g1="p" g2="y" k="72" />
+<hkern g1="p" g2="yacute" k="72" />
+<hkern g1="p" g2="ydieresis" k="72" />
+<hkern g1="r" g2="comma" k="133" />
+<hkern g1="r" g2="hyphen" k="129" />
+<hkern g1="r" g2="period" k="129" />
+<hkern g1="r" g2="a" k="33" />
+<hkern g1="r" g2="c" k="57" />
+<hkern g1="r" g2="d" k="57" />
+<hkern g1="r" g2="e" k="59" />
+<hkern g1="r" g2="f" k="-20" />
+<hkern g1="r" g2="g" k="59" />
+<hkern g1="r" g2="h" k="23" />
+<hkern g1="r" g2="i" k="23" />
+<hkern g1="r" g2="j" k="23" />
+<hkern g1="r" g2="k" k="23" />
+<hkern g1="r" g2="m" k="23" />
+<hkern g1="r" g2="n" k="23" />
+<hkern g1="r" g2="o" k="55" />
+<hkern g1="r" g2="p" k="20" />
+<hkern g1="r" g2="q" k="55" />
+<hkern g1="r" g2="r" k="23" />
+<hkern g1="r" g2="s" k="20" />
+<hkern g1="r" g2="y" k="-20" />
+<hkern g1="r" g2="agrave" k="33" />
+<hkern g1="r" g2="aacute" k="33" />
+<hkern g1="r" g2="acircumflex" k="33" />
+<hkern g1="r" g2="adieresis" k="33" />
+<hkern g1="r" g2="aring" k="33" />
+<hkern g1="r" g2="ae" k="33" />
+<hkern g1="r" g2="ccedilla" k="55" />
+<hkern g1="r" g2="egrave" k="59" />
+<hkern g1="r" g2="eacute" k="59" />
+<hkern g1="r" g2="ecircumflex" k="59" />
+<hkern g1="r" g2="edieresis" k="59" />
+<hkern g1="r" g2="ograve" k="55" />
+<hkern g1="r" g2="oacute" k="55" />
+<hkern g1="r" g2="ocircumflex" k="55" />
+<hkern g1="r" g2="otilde" k="55" />
+<hkern g1="r" g2="odieresis" k="55" />
+<hkern g1="r" g2="oslash" k="63" />
+<hkern g1="r" g2="oe" k="53" />
+<hkern g1="r" g2="scaron" k="20" />
+<hkern g1="s" g2="s" k="25" />
+<hkern g1="t" g2="e" k="63" />
+<hkern g1="t" g2="h" k="25" />
+<hkern g1="t" g2="o" k="66" />
+<hkern g1="t" g2="t" k="25" />
+<hkern g1="t" g2="aacute" k="25" />
+<hkern g1="t" g2="atilde" k="23" />
+<hkern g1="t" g2="adieresis" k="23" />
+<hkern g1="t" g2="aring" k="25" />
+<hkern g1="t" g2="eacute" k="74" />
+<hkern g1="t" g2="oacute" k="76" />
+<hkern g1="t" g2="odieresis" k="74" />
+<hkern g1="t" g2="quoteright" k="86" />
+<hkern g1="u" g2="v" k="20" />
+<hkern g1="v" g2="comma" k="115" />
+<hkern g1="v" g2="hyphen" k="43" />
+<hkern g1="v" g2="period" k="104" />
+<hkern g1="v" g2="a" k="43" />
+<hkern g1="v" g2="c" k="47" />
+<hkern g1="v" g2="e" k="47" />
+<hkern g1="v" g2="g" k="55" />
+<hkern g1="v" g2="o" k="45" />
+<hkern g1="v" g2="s" k="29" />
+<hkern g1="v" g2="agrave" k="43" />
+<hkern g1="v" g2="aacute" k="43" />
+<hkern g1="v" g2="acircumflex" k="43" />
+<hkern g1="v" g2="atilde" k="43" />
+<hkern g1="v" g2="adieresis" k="43" />
+<hkern g1="v" g2="aring" k="43" />
+<hkern g1="v" g2="ae" k="43" />
+<hkern g1="v" g2="egrave" k="47" />
+<hkern g1="v" g2="eacute" k="47" />
+<hkern g1="v" g2="ecircumflex" k="47" />
+<hkern g1="v" g2="ograve" k="45" />
+<hkern g1="v" g2="oacute" k="45" />
+<hkern g1="v" g2="odieresis" k="45" />
+<hkern g1="v" g2="oslash" k="51" />
+<hkern g1="w" g2="comma" k="82" />
+<hkern g1="w" g2="hyphen" k="29" />
+<hkern g1="w" g2="period" k="74" />
+<hkern g1="w" g2="a" k="41" />
+<hkern g1="w" g2="c" k="39" />
+<hkern g1="w" g2="e" k="39" />
+<hkern g1="w" g2="g" k="47" />
+<hkern g1="w" g2="o" k="37" />
+<hkern g1="w" g2="s" k="27" />
+<hkern g1="w" g2="agrave" k="41" />
+<hkern g1="w" g2="aacute" k="41" />
+<hkern g1="w" g2="acircumflex" k="41" />
+<hkern g1="w" g2="atilde" k="41" />
+<hkern g1="w" g2="adieresis" k="41" />
+<hkern g1="w" g2="aring" k="41" />
+<hkern g1="w" g2="ae" k="41" />
+<hkern g1="w" g2="egrave" k="39" />
+<hkern g1="w" g2="eacute" k="39" />
+<hkern g1="w" g2="ecircumflex" k="39" />
+<hkern g1="w" g2="ograve" k="37" />
+<hkern g1="w" g2="oacute" k="37" />
+<hkern g1="w" g2="odieresis" k="37" />
+<hkern g1="w" g2="oslash" k="41" />
+<hkern g1="x" g2="c" k="49" />
+<hkern g1="x" g2="e" k="47" />
+<hkern g1="x" g2="o" k="49" />
+<hkern g1="x" g2="q" k="47" />
+<hkern g1="x" g2="eacute" k="47" />
+<hkern g1="x" g2="odieresis" k="49" />
+<hkern g1="y" g2="comma" k="109" />
+<hkern g1="y" g2="hyphen" k="35" />
+<hkern g1="y" g2="period" k="90" />
+<hkern g1="y" g2="semicolon" k="27" />
+<hkern g1="y" g2="a" k="35" />
+<hkern g1="y" g2="c" k="35" />
+<hkern g1="y" g2="d" k="35" />
+<hkern g1="y" g2="e" k="37" />
+<hkern g1="y" g2="g" k="66" />
+<hkern g1="y" g2="o" k="35" />
+<hkern g1="y" g2="q" k="63" />
+<hkern g1="y" g2="s" k="20" />
+<hkern g1="y" g2="agrave" k="35" />
+<hkern g1="y" g2="aacute" k="35" />
+<hkern g1="y" g2="acircumflex" k="35" />
+<hkern g1="y" g2="atilde" k="35" />
+<hkern g1="y" g2="adieresis" k="35" />
+<hkern g1="y" g2="aring" k="35" />
+<hkern g1="y" g2="ae" k="35" />
+<hkern g1="y" g2="egrave" k="37" />
+<hkern g1="y" g2="eacute" k="37" />
+<hkern g1="y" g2="ecircumflex" k="37" />
+<hkern g1="y" g2="ograve" k="35" />
+<hkern g1="y" g2="oacute" k="35" />
+<hkern g1="y" g2="odieresis" k="35" />
+<hkern g1="y" g2="oslash" k="43" />
+<hkern g1="y" g2="scaron" k="20" />
+<hkern g1="z" g2="c" k="41" />
+<hkern g1="z" g2="e" k="41" />
+<hkern g1="z" g2="o" k="41" />
+<hkern g1="z" g2="egrave" k="41" />
+<hkern g1="z" g2="eacute" k="41" />
+<hkern g1="z" g2="odieresis" k="41" />
+<hkern g1="z" g2="oslash" k="20" />
+<hkern g1="guillemotright" g2="A" k="35" />
+<hkern g1="guillemotright" g2="T" k="250" />
+<hkern g1="guillemotright" g2="V" k="172" />
+<hkern g1="guillemotright" g2="W" k="123" />
+<hkern g1="guillemotright" g2="Y" k="229" />
+<hkern g1="guillemotright" g2="Aacute" k="35" />
+<hkern g1="guillemotright" g2="Adieresis" k="35" />
+<hkern g1="guillemotright" g2="Aring" k="35" />
+<hkern g1="guillemotright" g2="AE" k="41" />
+<hkern g1="Agrave" g2="comma" k="-33" />
+<hkern g1="Agrave" g2="period" k="-39" />
+<hkern g1="Agrave" g2="C" k="41" />
+<hkern g1="Agrave" g2="G" k="41" />
+<hkern g1="Agrave" g2="O" k="39" />
+<hkern g1="Agrave" g2="Q" k="39" />
+<hkern g1="Agrave" g2="T" k="211" />
+<hkern g1="Agrave" g2="U" k="39" />
+<hkern g1="Agrave" g2="V" k="178" />
+<hkern g1="Agrave" g2="W" k="141" />
+<hkern g1="Agrave" g2="Y" k="190" />
+<hkern g1="Agrave" g2="d" k="35" />
+<hkern g1="Agrave" g2="v" k="88" />
+<hkern g1="Agrave" g2="w" k="70" />
+<hkern g1="Agrave" g2="y" k="82" />
+<hkern g1="Agrave" g2="Odieresis" k="51" />
+<hkern g1="Agrave" g2="Udieresis" k="51" />
+<hkern g1="Agrave" g2="quoteright" k="104" />
+<hkern g1="Aacute" g2="comma" k="-33" />
+<hkern g1="Aacute" g2="period" k="-39" />
+<hkern g1="Aacute" g2="C" k="41" />
+<hkern g1="Aacute" g2="G" k="41" />
+<hkern g1="Aacute" g2="O" k="39" />
+<hkern g1="Aacute" g2="Q" k="39" />
+<hkern g1="Aacute" g2="T" k="211" />
+<hkern g1="Aacute" g2="U" k="39" />
+<hkern g1="Aacute" g2="V" k="178" />
+<hkern g1="Aacute" g2="W" k="141" />
+<hkern g1="Aacute" g2="Y" k="190" />
+<hkern g1="Aacute" g2="d" k="35" />
+<hkern g1="Aacute" g2="g" k="-25" />
+<hkern g1="Aacute" g2="t" k="39" />
+<hkern g1="Aacute" g2="v" k="88" />
+<hkern g1="Aacute" g2="w" k="70" />
+<hkern g1="Aacute" g2="y" k="82" />
+<hkern g1="Aacute" g2="guillemotleft" k="33" />
+<hkern g1="Aacute" g2="Odieresis" k="51" />
+<hkern g1="Aacute" g2="Udieresis" k="51" />
+<hkern g1="Aacute" g2="udieresis" k="20" />
+<hkern g1="Aacute" g2="quoteright" k="104" />
+<hkern g1="Aacute" g2="guilsinglleft" k="33" />
+<hkern g1="Acircumflex" g2="comma" k="-33" />
+<hkern g1="Acircumflex" g2="period" k="-39" />
+<hkern g1="Acircumflex" g2="C" k="41" />
+<hkern g1="Acircumflex" g2="G" k="41" />
+<hkern g1="Acircumflex" g2="O" k="39" />
+<hkern g1="Acircumflex" g2="Q" k="39" />
+<hkern g1="Acircumflex" g2="T" k="211" />
+<hkern g1="Acircumflex" g2="U" k="39" />
+<hkern g1="Acircumflex" g2="V" k="178" />
+<hkern g1="Acircumflex" g2="W" k="141" />
+<hkern g1="Acircumflex" g2="Y" k="190" />
+<hkern g1="Acircumflex" g2="d" k="35" />
+<hkern g1="Acircumflex" g2="v" k="88" />
+<hkern g1="Acircumflex" g2="w" k="70" />
+<hkern g1="Acircumflex" g2="y" k="82" />
+<hkern g1="Acircumflex" g2="Odieresis" k="51" />
+<hkern g1="Acircumflex" g2="Udieresis" k="51" />
+<hkern g1="Acircumflex" g2="quoteright" k="104" />
+<hkern g1="Atilde" g2="comma" k="-33" />
+<hkern g1="Atilde" g2="period" k="-39" />
+<hkern g1="Atilde" g2="C" k="41" />
+<hkern g1="Atilde" g2="G" k="41" />
+<hkern g1="Atilde" g2="O" k="39" />
+<hkern g1="Atilde" g2="Q" k="39" />
+<hkern g1="Atilde" g2="T" k="211" />
+<hkern g1="Atilde" g2="U" k="39" />
+<hkern g1="Atilde" g2="V" k="178" />
+<hkern g1="Atilde" g2="W" k="141" />
+<hkern g1="Atilde" g2="Y" k="190" />
+<hkern g1="Atilde" g2="d" k="35" />
+<hkern g1="Atilde" g2="v" k="88" />
+<hkern g1="Atilde" g2="w" k="70" />
+<hkern g1="Atilde" g2="y" k="82" />
+<hkern g1="Atilde" g2="Odieresis" k="49" />
+<hkern g1="Atilde" g2="Udieresis" k="49" />
+<hkern g1="Atilde" g2="quoteright" k="104" />
+<hkern g1="Adieresis" g2="comma" k="-33" />
+<hkern g1="Adieresis" g2="period" k="-39" />
+<hkern g1="Adieresis" g2="A" k="-41" />
+<hkern g1="Adieresis" g2="C" k="41" />
+<hkern g1="Adieresis" g2="G" k="41" />
+<hkern g1="Adieresis" g2="O" k="39" />
+<hkern g1="Adieresis" g2="Q" k="39" />
+<hkern g1="Adieresis" g2="T" k="211" />
+<hkern g1="Adieresis" g2="U" k="39" />
+<hkern g1="Adieresis" g2="V" k="178" />
+<hkern g1="Adieresis" g2="W" k="141" />
+<hkern g1="Adieresis" g2="Y" k="190" />
+<hkern g1="Adieresis" g2="d" k="35" />
+<hkern g1="Adieresis" g2="f" k="51" />
+<hkern g1="Adieresis" g2="g" k="-25" />
+<hkern g1="Adieresis" g2="t" k="39" />
+<hkern g1="Adieresis" g2="v" k="88" />
+<hkern g1="Adieresis" g2="w" k="70" />
+<hkern g1="Adieresis" g2="y" k="82" />
+<hkern g1="Adieresis" g2="guillemotleft" k="33" />
+<hkern g1="Adieresis" g2="Adieresis" k="-35" />
+<hkern g1="Adieresis" g2="Ccedilla" k="41" />
+<hkern g1="Adieresis" g2="Ograve" k="51" />
+<hkern g1="Adieresis" g2="Oacute" k="51" />
+<hkern g1="Adieresis" g2="Ocircumflex" k="51" />
+<hkern g1="Adieresis" g2="Otilde" k="47" />
+<hkern g1="Adieresis" g2="Odieresis" k="51" />
+<hkern g1="Adieresis" g2="Ugrave" k="51" />
+<hkern g1="Adieresis" g2="Uacute" k="51" />
+<hkern g1="Adieresis" g2="Ucircumflex" k="51" />
+<hkern g1="Adieresis" g2="Udieresis" k="51" />
+<hkern g1="Adieresis" g2="Yacute" k="201" />
+<hkern g1="Adieresis" g2="ograve" k="29" />
+<hkern g1="Adieresis" g2="oacute" k="29" />
+<hkern g1="Adieresis" g2="ocircumflex" k="29" />
+<hkern g1="Adieresis" g2="otilde" k="25" />
+<hkern g1="Adieresis" g2="odieresis" k="20" />
+<hkern g1="Adieresis" g2="udieresis" k="20" />
+<hkern g1="Adieresis" g2="Ydieresis" k="195" />
+<hkern g1="Adieresis" g2="quoteright" k="104" />
+<hkern g1="Adieresis" g2="quotedblright" k="104" />
+<hkern g1="Adieresis" g2="guilsinglleft" k="33" />
+<hkern g1="Aring" g2="comma" k="-33" />
+<hkern g1="Aring" g2="period" k="-39" />
+<hkern g1="Aring" g2="C" k="41" />
+<hkern g1="Aring" g2="G" k="41" />
+<hkern g1="Aring" g2="O" k="39" />
+<hkern g1="Aring" g2="Q" k="39" />
+<hkern g1="Aring" g2="T" k="211" />
+<hkern g1="Aring" g2="U" k="39" />
+<hkern g1="Aring" g2="V" k="178" />
+<hkern g1="Aring" g2="W" k="141" />
+<hkern g1="Aring" g2="Y" k="190" />
+<hkern g1="Aring" g2="d" k="35" />
+<hkern g1="Aring" g2="f" k="51" />
+<hkern g1="Aring" g2="g" k="-25" />
+<hkern g1="Aring" g2="t" k="39" />
+<hkern g1="Aring" g2="v" k="88" />
+<hkern g1="Aring" g2="w" k="70" />
+<hkern g1="Aring" g2="y" k="82" />
+<hkern g1="Aring" g2="guillemotleft" k="33" />
+<hkern g1="Aring" g2="Odieresis" k="51" />
+<hkern g1="Aring" g2="Udieresis" k="51" />
+<hkern g1="Aring" g2="udieresis" k="20" />
+<hkern g1="Aring" g2="quoteright" k="104" />
+<hkern g1="Aring" g2="quotedblright" k="104" />
+<hkern g1="Aring" g2="guilsinglleft" k="33" />
+<hkern g1="AE" g2="hyphen" k="236" />
+<hkern g1="Eacute" g2="G" k="35" />
+<hkern g1="Eacute" g2="Q" k="33" />
+<hkern g1="Eacute" g2="c" k="55" />
+<hkern g1="Eth" g2="A" k="47" />
+<hkern g1="Eth" g2="V" k="63" />
+<hkern g1="Eth" g2="Y" k="98" />
+<hkern g1="Eth" g2="Adieresis" k="47" />
+<hkern g1="Eth" g2="Aring" k="47" />
+<hkern g1="Ograve" g2="T" k="117" />
+<hkern g1="Ograve" g2="V" k="63" />
+<hkern g1="Ograve" g2="Y" k="94" />
+<hkern g1="Oacute" g2="A" k="45" />
+<hkern g1="Oacute" g2="T" k="117" />
+<hkern g1="Oacute" g2="V" k="63" />
+<hkern g1="Oacute" g2="W" k="49" />
+<hkern g1="Oacute" g2="Y" k="94" />
+<hkern g1="Oacute" g2="Adieresis" k="55" />
+<hkern g1="Ocircumflex" g2="T" k="117" />
+<hkern g1="Ocircumflex" g2="V" k="63" />
+<hkern g1="Ocircumflex" g2="Y" k="94" />
+<hkern g1="Otilde" g2="T" k="117" />
+<hkern g1="Otilde" g2="V" k="63" />
+<hkern g1="Otilde" g2="Y" k="94" />
+<hkern g1="Odieresis" g2="comma" k="59" />
+<hkern g1="Odieresis" g2="period" k="49" />
+<hkern g1="Odieresis" g2="A" k="45" />
+<hkern g1="Odieresis" g2="T" k="117" />
+<hkern g1="Odieresis" g2="V" k="63" />
+<hkern g1="Odieresis" g2="W" k="49" />
+<hkern g1="Odieresis" g2="X" k="78" />
+<hkern g1="Odieresis" g2="Y" k="94" />
+<hkern g1="Odieresis" g2="Agrave" k="55" />
+<hkern g1="Odieresis" g2="Aacute" k="55" />
+<hkern g1="Odieresis" g2="Acircumflex" k="55" />
+<hkern g1="Odieresis" g2="Atilde" k="55" />
+<hkern g1="Odieresis" g2="Adieresis" k="55" />
+<hkern g1="Odieresis" g2="Aring" k="55" />
+<hkern g1="Odieresis" g2="AE" k="51" />
+<hkern g1="Oslash" g2="comma" k="72" />
+<hkern g1="Oslash" g2="period" k="55" />
+<hkern g1="Oslash" g2="A" k="51" />
+<hkern g1="Oslash" g2="X" k="35" />
+<hkern g1="Oslash" g2="Adieresis" k="51" />
+<hkern g1="Ugrave" g2="A" k="41" />
+<hkern g1="Ugrave" g2="Adieresis" k="53" />
+<hkern g1="Uacute" g2="comma" k="43" />
+<hkern g1="Uacute" g2="period" k="35" />
+<hkern g1="Uacute" g2="A" k="41" />
+<hkern g1="Uacute" g2="Adieresis" k="51" />
+<hkern g1="Ucircumflex" g2="A" k="41" />
+<hkern g1="Ucircumflex" g2="Adieresis" k="51" />
+<hkern g1="Udieresis" g2="comma" k="43" />
+<hkern g1="Udieresis" g2="period" k="35" />
+<hkern g1="Udieresis" g2="A" k="41" />
+<hkern g1="Udieresis" g2="Aacute" k="53" />
+<hkern g1="Udieresis" g2="Acircumflex" k="51" />
+<hkern g1="Udieresis" g2="Atilde" k="51" />
+<hkern g1="Udieresis" g2="Adieresis" k="51" />
+<hkern g1="Udieresis" g2="Aring" k="51" />
+<hkern g1="Udieresis" g2="AE" k="47" />
+<hkern g1="Thorn" g2="A" k="78" />
+<hkern g1="Thorn" g2="Aacute" k="78" />
+<hkern g1="Thorn" g2="Adieresis" k="78" />
+<hkern g1="Thorn" g2="Aring" k="78" />
+<hkern g1="Thorn" g2="AE" k="88" />
+<hkern g1="germandbls" g2="T" k="94" />
+<hkern g1="germandbls" g2="V" k="90" />
+<hkern g1="germandbls" g2="W" k="84" />
+<hkern g1="germandbls" g2="f" k="59" />
+<hkern g1="germandbls" g2="t" k="43" />
+<hkern g1="germandbls" g2="v" k="104" />
+<hkern g1="germandbls" g2="w" k="78" />
+<hkern g1="agrave" g2="t" k="49" />
+<hkern g1="agrave" g2="v" k="74" />
+<hkern g1="agrave" g2="w" k="63" />
+<hkern g1="agrave" g2="y" k="66" />
+<hkern g1="aacute" g2="t" k="51" />
+<hkern g1="aacute" g2="v" k="74" />
+<hkern g1="aacute" g2="w" k="63" />
+<hkern g1="aacute" g2="y" k="66" />
+<hkern g1="acircumflex" g2="t" k="47" />
+<hkern g1="adieresis" g2="t" k="47" />
+<hkern g1="adieresis" g2="v" k="74" />
+<hkern g1="adieresis" g2="w" k="63" />
+<hkern g1="adieresis" g2="y" k="66" />
+<hkern g1="adieresis" g2="germandbls" k="20" />
+<hkern g1="adieresis" g2="adieresis" k="20" />
+<hkern g1="aring" g2="t" k="49" />
+<hkern g1="aring" g2="v" k="74" />
+<hkern g1="aring" g2="w" k="63" />
+<hkern g1="aring" g2="y" k="66" />
+<hkern g1="ae" g2="v" k="37" />
+<hkern g1="ae" g2="w" k="33" />
+<hkern g1="ae" g2="y" k="29" />
+<hkern g1="egrave" g2="d" k="29" />
+<hkern g1="eacute" g2="d" k="29" />
+<hkern g1="eacute" g2="v" k="39" />
+<hkern g1="eacute" g2="w" k="33" />
+<hkern g1="eacute" g2="y" k="31" />
+<hkern g1="ecircumflex" g2="v" k="39" />
+<hkern g1="ecircumflex" g2="w" k="33" />
+<hkern g1="ecircumflex" g2="y" k="31" />
+<hkern g1="ograve" g2="v" k="47" />
+<hkern g1="ograve" g2="w" k="37" />
+<hkern g1="ograve" g2="y" k="41" />
+<hkern g1="oacute" g2="t" k="35" />
+<hkern g1="oacute" g2="v" k="47" />
+<hkern g1="oacute" g2="w" k="37" />
+<hkern g1="oacute" g2="y" k="41" />
+<hkern g1="ocircumflex" g2="t" k="33" />
+<hkern g1="ocircumflex" g2="v" k="47" />
+<hkern g1="odieresis" g2="t" k="31" />
+<hkern g1="odieresis" g2="v" k="47" />
+<hkern g1="odieresis" g2="w" k="37" />
+<hkern g1="odieresis" g2="x" k="51" />
+<hkern g1="odieresis" g2="y" k="41" />
+<hkern g1="udieresis" g2="v" k="20" />
+<hkern g1="yacute" g2="a" k="35" />
+<hkern g1="yacute" g2="c" k="35" />
+<hkern g1="yacute" g2="d" k="59" />
+<hkern g1="yacute" g2="e" k="37" />
+<hkern g1="yacute" g2="o" k="35" />
+<hkern g1="yacute" g2="adieresis" k="47" />
+<hkern g1="yacute" g2="odieresis" k="47" />
+<hkern g1="ydieresis" g2="a" k="35" />
+<hkern g1="ydieresis" g2="c" k="35" />
+<hkern g1="ydieresis" g2="d" k="51" />
+<hkern g1="ydieresis" g2="e" k="37" />
+<hkern g1="ydieresis" g2="o" k="35" />
+<hkern g1="ydieresis" g2="adieresis" k="43" />
+<hkern g1="ydieresis" g2="odieresis" k="45" />
+<hkern g1="ydieresis" g2="oslash" k="43" />
+<hkern g1="Scaron" g2="T" k="33" />
+<hkern g1="scaron" g2="w" k="33" />
+<hkern g1="quoteleft" g2="A" k="119" />
+<hkern g1="quoteleft" g2="T" k="-23" />
+<hkern g1="quoteleft" g2="V" k="-29" />
+<hkern g1="quoteleft" g2="W" k="-25" />
+<hkern g1="quoteleft" g2="Y" k="-29" />
+<hkern g1="quoteleft" g2="Aacute" k="119" />
+<hkern g1="quoteleft" g2="Adieresis" k="119" />
+<hkern g1="quoteleft" g2="Aring" k="119" />
+<hkern g1="quoteleft" g2="AE" k="131" />
+<hkern g1="quoteright" g2="A" k="125" />
+<hkern g1="quoteright" g2="d" k="254" />
+<hkern g1="quoteright" g2="t" k="55" />
+<hkern g1="quoteright" g2="Aacute" k="125" />
+<hkern g1="quoteright" g2="Adieresis" k="125" />
+<hkern g1="quoteright" g2="Aring" k="125" />
+<hkern g1="quoteright" g2="AE" k="139" />
+<hkern g1="quotedblleft" g2="A" k="119" />
+<hkern g1="quotedblleft" g2="T" k="-23" />
+<hkern g1="quotedblleft" g2="V" k="-29" />
+<hkern g1="quotedblleft" g2="W" k="-25" />
+<hkern g1="quotedblleft" g2="Y" k="-29" />
+<hkern g1="quotedblleft" g2="Aacute" k="119" />
+<hkern g1="quotedblleft" g2="Adieresis" k="119" />
+<hkern g1="quotedblleft" g2="Aring" k="119" />
+<hkern g1="quotedblleft" g2="AE" k="131" />
+<hkern g1="quotedblright" g2="A" k="125" />
+<hkern g1="quotedblright" g2="T" k="-27" />
+<hkern g1="quotedblright" g2="V" k="-29" />
+<hkern g1="quotedblright" g2="W" k="-25" />
+<hkern g1="quotedblright" g2="Y" k="-29" />
+<hkern g1="quotedblright" g2="Aacute" k="125" />
+<hkern g1="quotedblright" g2="Adieresis" k="125" />
+<hkern g1="quotedblright" g2="Aring" k="125" />
+<hkern g1="quotedblright" g2="AE" k="139" />
+<hkern g1="quotedblbase" g2="A" k="-51" />
+<hkern g1="quotedblbase" g2="T" k="131" />
+<hkern g1="quotedblbase" g2="V" k="156" />
+<hkern g1="quotedblbase" g2="W" k="106" />
+<hkern g1="quotedblbase" g2="Y" k="121" />
+<hkern g1="quotedblbase" g2="Adieresis" k="-51" />
+<hkern g1="quotedblbase" g2="AE" k="-51" />
+<hkern g1="guilsinglright" g2="A" k="35" />
+<hkern g1="guilsinglright" g2="T" k="250" />
+<hkern g1="guilsinglright" g2="V" k="172" />
+<hkern g1="guilsinglright" g2="W" k="123" />
+<hkern g1="guilsinglright" g2="Y" k="227" />
+<hkern g1="guilsinglright" g2="Aacute" k="35" />
+<hkern g1="guilsinglright" g2="Adieresis" k="35" />
+<hkern g1="guilsinglright" g2="Aring" k="35" />
+<hkern g1="guilsinglright" g2="AE" k="41" />
+</font>
+</defs>
+</svg>
Index: trunk/web/dojo/dojox/gfx/resources/svg2gfx.xsl
===================================================================
--- trunk/web/dojo/dojox/gfx/resources/svg2gfx.xsl	(revision 0)
+++ trunk/web/dojo/dojox/gfx/resources/svg2gfx.xsl	(revision 9)
@@ -0,0 +1,1085 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xsl:stylesheet [
+<!ENTITY SupportedElements "svg:a|svg:circle|svg:ellipse|svg:g|svg:image|svg:line|svg:path|svg:polygon|svg:polyline|svg:rect|svg:text|svg:textPath|svg:use">
+]>
+<!-- This is a complete rewrite of the original svg2gfx.xslt used for testing. -->
+<!--
+This version supports polygons, polylines, circles, ellipses, rectangles,
+lines, images, text, patterns, linear gradients, radial gradients, transforms
+(although gradient transforms are limited), and more in addition to the
+paths, strokes, groups, and constant fills supported by the original.  It
+even handles little niceties like the SVG use element.  All that being said,
+It does not even come close to supporting all of the features found in SVG,
+but should hopefully be a fairly useful subset.
+
+Caveats: Completely ignores many SVG features (such as named views, filters,
+object bounding box in gradient transforms, etc.).  Now requires properly
+formed SVG (that is, SVG using the appropriate SVG namespace) which most
+editors create by default these days anyhow (the old version required that
+namespaces be stripped off).  Can't convert to GFX constructs that cannot
+be reconstructed from JSON (such as textpath or using vector fonts).
+Requires EXSLT for many transforms. Handles nested styles in a simple way
+that is usually right but sometimes wrong.
+
+Questions / comments / bug reports can be sent to Feneric (on Twitter, IRC,
+GMail, etc.) or Eric (Saugus.net, ShellTown, etc.)
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+        xmlns:svg="http://www.w3.org/2000/svg"
+	xmlns:xlink="http://www.w3.org/1999/xlink"
+	xmlns:math="http://exslt.org/math"
+	xmlns:exsl="http://exslt.org/common"
+	xmlns:saxon="http://icl.com/saxon"
+	xmlns:xalan="http://xml.apache.org/Xalan"
+	extension-element-prefixes="math exsl saxon xalan">
+	<xsl:output method="text" version="1.0" encoding="UTF-8"/>
+	<xsl:strip-space elements="*"/>
+
+	<!-- We currently need this constant for some transformation calculations. -->
+	<!-- GFX enhancements could obviate it in the future. -->
+	<xsl:variable name="degressInRadian" select="57.295779513082322"/>
+	
+	<!-- The following templates process little bits of things that can often occur in multiple contexts -->
+	
+	<xsl:template name="kill-extra-spaces" mode="kill-extra-spaces">
+		<xsl:param name="string"/>
+		<!-- Some don't feel that SVG is verbose enough and thus add extra spaces, which when -->
+		<!-- untreated can look exactly like delimiters in point sets. -->
+		<xsl:choose>
+			<!-- Hopefully most cases won't have the extra spaces -->
+			<xsl:when test="not(contains($string,', '))">
+				<xsl:value-of select="$string"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<!-- We split at comma / space pairs and recursively chop spaces -->
+				<xsl:call-template name="kill-extra-spaces">
+					<xsl:with-param name="string" select="substring-before($string,', ')"/>
+				</xsl:call-template>
+				<xsl:text>,</xsl:text>
+				<xsl:call-template name="kill-extra-spaces">
+					<xsl:with-param name="string" select="substring-after($string,', ')"/>
+				</xsl:call-template>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template name="arg-processor" mode="arg-processor">
+		<xsl:param name="values"/>
+		<xsl:param name="labels"/>
+		<!-- Recursively chew through the arguments in a traditional CAR / CDR pattern -->
+		<xsl:variable name="valuesCdr" select="substring-after($values,',')"/>
+		<!-- We're going "backwards" here to take advantage of tail recursion -->
+		<xsl:choose>
+			<xsl:when test="not($valuesCdr)">
+				<!-- handle the final argument -->
+				<xsl:value-of select="$labels"/>
+				<xsl:text>:</xsl:text>
+				<xsl:value-of select="$values"/>
+				<!-- This last trailing comma is needed in the (odd) case of multiple transforms -->
+				<xsl:text>,</xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<!-- handle the current argument -->
+				<xsl:value-of select="substring-before($labels,',')"/>
+				<xsl:text>:</xsl:text>
+				<xsl:value-of select="substring-before($values,',')"/>
+				<xsl:text>,</xsl:text>
+				<xsl:call-template name="arg-processor">
+					<xsl:with-param name="values" select="$valuesCdr"/>
+					<xsl:with-param name="labels" select="substring-after($labels,',')"/>
+				</xsl:call-template>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template name="background-processor" mode="background-processor">
+		<xsl:param name="background"/>
+		<xsl:choose>
+			<xsl:when test="starts-with($background,'url')">
+				<!-- Check if we have a URL (for a gradient or pattern) -->
+				<xsl:variable name="arguments" select="translate(normalize-space(substring-before(substring-after($background,'('),')')),' ',',')"/>
+				<xsl:call-template name="url-processor">
+					<xsl:with-param name="url" select="$arguments"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<!-- We probably have a solid color. -->
+				<xsl:call-template name="color-processor">
+					<xsl:with-param name="color" select="$background"/>
+				</xsl:call-template>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template name="color-processor">
+		<xsl:param name="color"/>
+		<xsl:choose>
+			<xsl:when test="starts-with($color,'rgb')">
+				<!-- Check if we have an RGB triple -->
+				<xsl:variable name="arguments" select="normalize-space(substring-before(substring-after($color,'('),')'))"/>
+				<xsl:call-template name="rgb-triple-processor">
+					<xsl:with-param name="triple" select="$arguments"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="$color='none'">
+				<!-- Check if we have a literal 'none' -->
+				<!-- Literal nones seem to actually map to black in practice -->
+				<xsl:text>"#000000",</xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<!-- This color could either be by name or value.  Either way, we -->
+				<!-- have to ensure that there are no bogus semi-colons. -->
+				<xsl:text>"</xsl:text>
+				<xsl:value-of select="normalize-space(translate($color,';',' '))"/>
+				<xsl:text>",</xsl:text>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template name="point-processor" mode="point-processor">
+		<xsl:param name="points"/>
+		<!-- Recursively process points in a traditional CAR / CDR pattern -->
+		<xsl:variable name="pointsCdr" select="normalize-space(substring-after($points,' '))"/>
+		<!-- We're going "backwards" here to take advantage of tail recursion -->
+		<xsl:choose>
+			<xsl:when test="not($pointsCdr)">
+				<!-- handle the final argument -->
+				<xsl:text>{x:</xsl:text>
+				<xsl:value-of select="substring-before($points,',')"/>
+				<xsl:text>,y:</xsl:text>
+				<xsl:value-of select="substring-after($points,',')"/>
+				<xsl:text>},</xsl:text>
+			</xsl:when>
+			<xsl:otherwise>
+				<!-- handle the current argument -->
+				<xsl:variable name="pointsCar" select="substring-before($points,' ')"/>
+				<xsl:text>{x:</xsl:text>
+				<xsl:value-of select="substring-before($pointsCar,',')"/>
+				<xsl:text>,y:</xsl:text>
+				<xsl:value-of select="substring-after($pointsCar,',')"/>
+				<xsl:text>},</xsl:text>
+				<xsl:call-template name="point-processor">
+					<xsl:with-param name="points" select="$pointsCdr"/>
+				</xsl:call-template>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+	
+	<xsl:template name="rgb-triple-processor" mode="rgb-triple-processor">
+		<xsl:param name="triple"/>
+		<!-- Note that as SVG triples cannot contain alpha values, we hardcode it to be fully opaque -->
+		<!-- This could theoretically be better handled by watching for fill-opacity -->
+		<xsl:variable name="red" select="substring-before($triple,',')"/>
+		<xsl:variable name="green" select="substring-before(substring-after($triple,concat($red,',')),',')"/>
+		<xsl:variable name="blue" select="substring-after($triple,concat($red,',',$green,','))"/>
+		<xsl:text>{"r":</xsl:text>
+		<xsl:value-of select="normalize-space($red)"/>
+		<xsl:text>,"g":</xsl:text>
+		<xsl:value-of select="normalize-space($green)"/>
+		<xsl:text>,"b":</xsl:text>
+		<xsl:value-of select="normalize-space($blue)"/>
+		<xsl:text>,"a":1},</xsl:text>
+	</xsl:template>
+	
+	<xsl:template name="styles-processor" mode="styles-processor">
+		<xsl:param name="styles"/>
+		<!-- Recursively chew through the styles in a traditional CAR / CDR pattern -->
+		<xsl:variable name="stylesCdr" select="substring-after($styles,';')"/>
+		<!-- We're going "backwards" here to take advantage of tail recursion -->
+		<xsl:choose>
+			<xsl:when test="not($stylesCdr)">
+				<!-- handle the final style -->
+				<xsl:attribute name="{normalize-space(substring-before($styles,':'))}">
+					<xsl:value-of select="normalize-space(substring-after($styles,':'))"/>
+				</xsl:attribute>
+			</xsl:when>
+			<xsl:otherwise>
+				<!-- handle the current style -->
+				<xsl:variable name="stylesCar" select="substring-before($styles,';')"/>
+				<xsl:attribute name="{normalize-space(substring-before($stylesCar,':'))}">
+					<xsl:value-of select="normalize-space(substring-after($stylesCar,':'))"/>
+				</xsl:attribute>
+				<xsl:call-template name="styles-processor">
+					<xsl:with-param name="styles" select="$stylesCdr"/>
+				</xsl:call-template>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template name="transform-processor" mode="transform-processor">
+		<xsl:param name="transforms"/>
+		<!-- Recursively chew through the transforms in a traditional CAR / CDR pattern -->
+		<xsl:variable name="transformsCdr" select="normalize-space(substring-after($transforms,')'))"/>
+		<xsl:variable name="arguments" select="translate(normalize-space(substring-before(substring-after($transforms,'('),')')),' ',',')"/>
+		<xsl:choose>
+			<!-- We only handle simple (i.e. nonoverlapping) chained transforms. -->
+			<!-- This covers most real-world cases, and exceptions are generally -->
+			<!-- hand-generated and can likewise be hand fixed. -->
+			<xsl:when test="starts-with($transforms,'matrix')">
+				<xsl:call-template name="arg-processor">
+					<xsl:with-param name="values" select="$arguments"/>
+					<xsl:with-param name="labels" select="string('xx,yx,xy,yy,dx,dy')"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="starts-with($transforms,'translate')">
+				<!-- If only one argument is provided, it's assumed for both -->
+				<xsl:choose>
+					<xsl:when test="contains($arguments,',')">
+						<xsl:call-template name="arg-processor">
+							<xsl:with-param name="values" select="$arguments"/>
+							<xsl:with-param name="labels" select="string('dx,dy')"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:call-template name="arg-processor">
+							<xsl:with-param name="values" select="concat($arguments,',',$arguments)"/>
+							<xsl:with-param name="labels" select="string('dx,dy')"/>
+						</xsl:call-template>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:when>
+			<xsl:when test="starts-with($transforms,'scale')">
+				<!-- If only one argument is provided, it's assumed for both -->
+				<xsl:choose>
+					<xsl:when test="contains($arguments,',')">
+						<xsl:call-template name="arg-processor">
+							<xsl:with-param name="values" select="$arguments"/>
+							<xsl:with-param name="labels" select="string('xx,yy')"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:call-template name="arg-processor">
+							<xsl:with-param name="values" select="concat($arguments,',',$arguments)"/>
+							<xsl:with-param name="labels" select="string('xx,yy')"/>
+						</xsl:call-template>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:when>
+			<xsl:when test="starts-with($transforms,'rotate')">
+				<!-- Kluge alert - we're redoing a function GFX aleady provides here because -->
+				<!-- GFX doesn't yet expose it to JSON input. It requires XSLT extensions, too. -->
+				<!-- If you don't have the extensions, comment the following out (bye bye rotate). -->
+				<xsl:choose>
+					<xsl:when test="function-available('math:sin') and function-available('math:cos')">
+						<xsl:variable name="sinOfAngle" select="math:sin($arguments div $degressInRadian)"/>
+						<xsl:variable name="cosOfAngle" select="math:cos($arguments div $degressInRadian)"/>
+						<xsl:variable name="subarguments" select="concat($cosOfAngle,',',-$sinOfAngle,',',$sinOfAngle,',',$cosOfAngle)"/>
+						<xsl:call-template name="arg-processor">
+							<xsl:with-param name="values" select="$subarguments"/>
+							<xsl:with-param name="labels" select="string('xx,yx,xy,yy')"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:message>
+							<xsl:text>exslt:sin and exslt:cos must be supported for a rotation.</xsl:text>
+						</xsl:message>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:when>
+			<xsl:when test="starts-with($transforms,'skewX')">
+				<!-- Kluge alert - we're redoing a function GFX aleady provides here because -->
+				<!-- GFX doesn't yet expose it to JSON input. It requires XSLT extensions, too. -->
+				<!-- If you don't have the extensions, comment the following out (bye bye skewX). -->
+				<xsl:choose>
+					<xsl:when test="function-available('math:tan')">
+						<xsl:variable name="tanOfAngle" select="math:tan($arguments div $degressInRadian)"/>
+						<xsl:call-template name="arg-processor">
+							<xsl:with-param name="values" select="$tanOfAngle"/>
+							<xsl:with-param name="labels" select="string('xy')"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:message>
+							<xsl:text>exslt:tan must be supported for a skewX.</xsl:text>
+						</xsl:message>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:when>
+			<xsl:when test="starts-with($transforms,'skewY')">
+				<!-- Kluge alert - we're redoing a function GFX aleady provides here because -->
+				<!-- GFX doesn't yet expose it to JSON input. It requires XSLT extensions, too. -->
+				<!-- If you don't have the extensions, comment the following out (bye bye skewY). -->
+				<xsl:choose>
+					<xsl:when test="function-available('math:tan')">
+						<xsl:variable name="tanOfAngle" select="math:tan($arguments div $degressInRadian)"/>
+						<xsl:call-template name="arg-processor">
+							<xsl:with-param name="values" select="$tanOfAngle"/>
+							<xsl:with-param name="labels" select="string('yx')"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:message>
+							<xsl:text>exslt:tan must be supported for a skewY.</xsl:text>
+						</xsl:message>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:when>
+		</xsl:choose>
+		<xsl:if test="$transformsCdr">
+			<!-- handle the other transforms -->
+			<xsl:call-template name="transform-processor">
+				<xsl:with-param name="transforms" select="$transformsCdr"/>
+			</xsl:call-template>
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template name="url-processor" mode="url-processor">
+		<xsl:param name="url"/>
+		<xsl:param name="groupAttrs" select="''"/>
+		<!-- We can only handle local references; that's probably all we should get anyway -->
+		<xsl:if test="starts-with($url,'#')">
+			<xsl:apply-templates select="id(substring-after($url,'#'))">
+				<xsl:with-param name="groupAttrs" select="$groupAttrs"/>
+			</xsl:apply-templates>
+		</xsl:if>
+	</xsl:template>
+
+	<!-- The following templates help with gradient transforms -->
+
+	<!-- We're temporarily supporting a few SVG features that GFX does not currently support. -->
+	<!-- The biggest of these is gradient transforms; when GFX natively supports it all the -->
+	<!-- kluges made to support it here (including all the following code) should be removed. -->
+	
+	<xsl:template name="gradient-transform-helper" mode="gradient-transform-helper">
+		<!-- This nasty little routine helps gradient adjuster and can be -->
+		<!-- removed when GFX gets gradientTransform support. -->
+		<xsl:param name="cxa"/>
+		<xsl:param name="cya"/>
+		<xsl:param name="x1a"/>
+		<xsl:param name="y1a"/>
+		<xsl:param name="x2a"/>
+		<xsl:param name="y2a"/>
+		<xsl:param name="xx"/>
+		<xsl:param name="xy"/>
+		<xsl:param name="yx"/>
+		<xsl:param name="yy"/>
+		<xsl:param name="dx"/>
+		<xsl:param name="dy"/>
+		<xsl:choose>
+			<xsl:when test="local-name()='radialGradient'">
+				<xsl:variable name="cx" select="$xx*$cxa+$xy*$cya+$dx"/>
+				<xsl:text>cx:</xsl:text>
+				<xsl:value-of select="$cx"/>
+				<xsl:text>,</xsl:text>
+				<xsl:variable name="cy" select="$yx*$cxa+$yy*$cya+$dy"/>
+				<xsl:text>cy:</xsl:text>
+				<xsl:value-of select="$cy"/>
+				<xsl:text>,</xsl:text>
+				<!-- The results for r here are going to just be approximate -->
+				<xsl:variable name="r" select="($cx+$cy) div 2"/>
+				<xsl:text>r:</xsl:text>
+				<xsl:value-of select="$r"/>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:variable name="x1" select="$xx*$x1a+$xy*$y1a+$dx"/>
+				<xsl:text>x1:</xsl:text>
+				<xsl:value-of select="$x1"/>
+				<xsl:text>,</xsl:text>
+				<xsl:variable name="y1" select="$yx*$x1a+$yy*$y1a+$dy"/>
+				<xsl:text>y1:</xsl:text>
+				<xsl:value-of select="$y1"/>
+				<xsl:text>,</xsl:text>
+				<xsl:variable name="x2" select="$xx*$x2a+$xy*$y2a+$dx"/>
+				<xsl:text>x2:</xsl:text>
+				<xsl:value-of select="$x2"/>
+				<xsl:text>,</xsl:text>
+				<xsl:variable name="y2" select="$yx*$x2a+$yy*$y2a+$dy"/>
+				<xsl:text>y2:</xsl:text>
+				<xsl:value-of select="$y2"/>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+	
+	<xsl:template name="gradient-adjuster" mode="gradient-adjuster">
+		<xsl:param name="node"/>
+		<!-- This code is awful and only meant to serve until GFX gets gradientTransform support. -->
+		<!-- Once GFX does gradientTransforms, the following should be destroyed and forgotten. -->
+		<!-- While this support is better than nothing, it cannot 100% reproduce the effects -->
+		<!-- that true gradientTransform support in GFX could provide. -->
+		<xsl:choose>
+			<xsl:when test="starts-with($node/@gradientTransform,'matrix')">
+				<xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'matrix('),')'))"/>
+				<xsl:variable name="xx" select="substring-before($args,' ')"/>
+				<xsl:variable name="yx" select="substring-before(substring-after($args,' '),' ')"/>
+				<xsl:variable name="xy" select="substring-before(substring-after($args,concat($xx,' ',$yx,' ')),' ')"/>
+				<xsl:variable name="yy" select="substring-before(substring-after($args,concat($xx,' ',$yx,' ',$xy,' ')),' ')"/>
+				<xsl:variable name="dx" select="substring-before(substring-after($args,concat($xx,' ',$yx,' ',$xy,' ',$yy,' ')),' ')"/>
+				<xsl:variable name="dy" select="substring-after($args,concat($xx,' ',$yx,' ',$xy,' ',$yy,' ',$dx,' '))"/>
+				<xsl:call-template name="gradient-transform-helper">
+					<xsl:with-param name="cxa" select="$node/@cx"/>
+					<xsl:with-param name="cya" select="$node/@cy"/>
+					<xsl:with-param name="x1a" select="$node/@x1"/>
+					<xsl:with-param name="y1a" select="$node/@y1"/>
+					<xsl:with-param name="x2a" select="$node/@x2"/>
+					<xsl:with-param name="y2a" select="$node/@y2"/>
+					<xsl:with-param name="xx" select="$xx"/>
+					<xsl:with-param name="yx" select="$yx"/>
+					<xsl:with-param name="xy" select="$xy"/>
+					<xsl:with-param name="yy" select="$yy"/>
+					<xsl:with-param name="dx" select="$dx"/>
+					<xsl:with-param name="dy" select="$dy"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="starts-with($node/@gradientTransform,'translate')">
+				<xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'translate('),')'))"/>
+				<!-- If only one argument is provided, it's assumed for both -->
+				<xsl:choose>
+					<xsl:when test="contains($args,',')">
+						<xsl:call-template name="gradient-transform-helper">
+							<xsl:with-param name="cxa" select="$node/@cx"/>
+							<xsl:with-param name="cya" select="$node/@cy"/>
+							<xsl:with-param name="x1a" select="$node/@x1"/>
+							<xsl:with-param name="y1a" select="$node/@y1"/>
+							<xsl:with-param name="x2a" select="$node/@x2"/>
+							<xsl:with-param name="y2a" select="$node/@y2"/>
+							<xsl:with-param name="xx" select="1"/>
+							<xsl:with-param name="yx" select="0"/>
+							<xsl:with-param name="xy" select="1"/>
+							<xsl:with-param name="yy" select="0"/>
+							<xsl:with-param name="dx" select="substring-before($args,' ')"/>
+							<xsl:with-param name="dy" select="substring-after($args,' ')"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:call-template name="gradient-transform-helper">
+							<xsl:with-param name="cxa" select="$node/@cx"/>
+							<xsl:with-param name="cya" select="$node/@cy"/>
+							<xsl:with-param name="x1a" select="$node/@x1"/>
+							<xsl:with-param name="y1a" select="$node/@y1"/>
+							<xsl:with-param name="x2a" select="$node/@x2"/>
+							<xsl:with-param name="y2a" select="$node/@y2"/>
+							<xsl:with-param name="xx" select="1"/>
+							<xsl:with-param name="yx" select="0"/>
+							<xsl:with-param name="xy" select="1"/>
+							<xsl:with-param name="yy" select="0"/>
+							<xsl:with-param name="dx" select="$args"/>
+							<xsl:with-param name="dy" select="$args"/>
+						</xsl:call-template>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:when>
+			<xsl:when test="starts-with($node/@gradientTransform,'scale')">
+				<xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'scale('),')'))"/>
+				<!-- If only one argument is provided, it's assumed for both -->
+				<xsl:choose>
+					<xsl:when test="contains($args,',')">
+						<xsl:call-template name="gradient-transform-helper">
+							<xsl:with-param name="cxa" select="$node/@cx"/>
+							<xsl:with-param name="cya" select="$node/@cy"/>
+							<xsl:with-param name="x1a" select="$node/@x1"/>
+							<xsl:with-param name="y1a" select="$node/@y1"/>
+							<xsl:with-param name="x2a" select="$node/@x2"/>
+							<xsl:with-param name="y2a" select="$node/@y2"/>
+							<xsl:with-param name="xx" select="substring-before($args,' ')"/>
+							<xsl:with-param name="yx" select="0"/>
+							<xsl:with-param name="xy" select="substring-after($args,' ')"/>
+							<xsl:with-param name="yy" select="0"/>
+							<xsl:with-param name="dx" select="0"/>
+							<xsl:with-param name="dy" select="0"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:call-template name="gradient-transform-helper">
+							<xsl:with-param name="cxa" select="$node/@cx"/>
+							<xsl:with-param name="cya" select="$node/@cy"/>
+							<xsl:with-param name="x1a" select="$node/@x1"/>
+							<xsl:with-param name="y1a" select="$node/@y1"/>
+							<xsl:with-param name="x2a" select="$node/@x2"/>
+							<xsl:with-param name="y2a" select="$node/@y2"/>
+							<xsl:with-param name="xx" select="$args"/>
+							<xsl:with-param name="yx" select="0"/>
+							<xsl:with-param name="xy" select="$args"/>
+							<xsl:with-param name="yy" select="0"/>
+							<xsl:with-param name="dx" select="0"/>
+							<xsl:with-param name="dy" select="0"/>
+						</xsl:call-template>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:when>
+			<xsl:otherwise>	<!-- Otherwise it's got to be a rotation -->
+				<xsl:variable name="args" select="normalize-space(substring-before(substring-after($node/@gradientTransform,'rotate('),')'))"/>
+				<xsl:choose>
+					<xsl:when test="function-available('math:sin') and function-available('math:cos')">
+						<xsl:variable name="sinOfAngle" select="math:sin($args div $degressInRadian)"/>
+						<xsl:variable name="cosOfAngle" select="math:cos($args div $degressInRadian)"/>
+						<xsl:call-template name="gradient-transform-helper">
+							<xsl:with-param name="cxa" select="$node/@cx"/>
+							<xsl:with-param name="cya" select="$node/@cy"/>
+							<xsl:with-param name="x1a" select="$node/@x1"/>
+							<xsl:with-param name="y1a" select="$node/@y1"/>
+							<xsl:with-param name="x2a" select="$node/@x2"/>
+							<xsl:with-param name="y2a" select="$node/@y2"/>
+							<xsl:with-param name="xx" select="$cosOfAngle"/>
+							<xsl:with-param name="yx" select="-$sinOfAngle"/>
+							<xsl:with-param name="xy" select="$sinOfAngle"/>
+							<xsl:with-param name="yy" select="$cosOfAngle"/>
+							<xsl:with-param name="dy" select="0"/>
+							<xsl:with-param name="dy" select="0"/>
+						</xsl:call-template>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:message>
+							<xsl:text>exslt:sin and exslt:cos must be supported for a gradient rotation.</xsl:text>
+						</xsl:message>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>,</xsl:text>
+	</xsl:template>
+	
+	<!-- The following templates handle related batches of attributes -->
+	
+	<xsl:template name="font">
+		<xsl:param name="node"/>
+		<!-- Only include if we have at least some font properties defined -->
+		<xsl:if test="$node/@font-style or $node/@font-variant or $node/@font-weight or $node/@font-size or $node/@font-family">
+			<xsl:text>font:{ type:"font",</xsl:text>
+			<xsl:if test="$node/@font-style">
+				<xsl:text>style:"</xsl:text>
+				<xsl:value-of select="$node/@font-style"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:if test="$node/@font-variant">
+				<xsl:text>variant:"</xsl:text>
+				<xsl:value-of select="$node/@font-variant"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:if test="$node/@font-weight">
+				<xsl:text>weight:"</xsl:text>
+				<xsl:value-of select="$node/@font-weight"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:if test="$node/@font-size">
+				<xsl:text>size:"</xsl:text>
+				<xsl:value-of select="$node/@font-size"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:if test="$node/@font-family">
+				<xsl:text>family:"</xsl:text>
+				<xsl:value-of select="$node/@font-family"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:text>},</xsl:text>
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template name="stroke">
+		<xsl:param name="node"/>
+		<!-- Only include if we have at least some stroke properties defined -->
+		<xsl:if test="$node/@stroke or $node/@stroke-width or $node/@stroke-linecap or $node/@stroke-linejoin">
+			<xsl:text>stroke:{</xsl:text>
+			<!-- We don't currently handle stroke-dasharray or stroke-dashoffset -->
+			<!-- Note that while we'll pass stroke background info, GFX won't yet use it. -->
+			<xsl:if test="$node/@stroke">
+				<xsl:text>color:</xsl:text>
+				<xsl:call-template name="background-processor">
+					<xsl:with-param name="background" select="$node/@stroke"/>
+				</xsl:call-template>
+			</xsl:if>
+			<xsl:if test="$node/@stroke-width">
+				<xsl:text>width:"</xsl:text>
+				<xsl:value-of select="$node/@stroke-width"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:if test="$node/@stroke-linecap">
+				<xsl:text>cap:"</xsl:text>
+				<xsl:value-of select="$node/@stroke-linecap"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:if test="$node/@stroke-linejoin">
+				<xsl:text>join:"</xsl:text>
+				<xsl:value-of select="$node/@stroke-linejoin"/>
+				<xsl:text>",</xsl:text>
+			</xsl:if>
+			<xsl:choose>
+				<!-- This is really cheesy but better than nothing. -->
+				<!-- We probably ought to match a few specific cases when we can. %FIX% -->
+				<xsl:when test="$node/@stroke-dasharray">
+					<xsl:text>style:"Dash",</xsl:text>
+				</xsl:when>
+				<xsl:otherwise>
+					<xsl:text>style:"Solid",</xsl:text>
+				</xsl:otherwise>
+			</xsl:choose>
+			<xsl:text>},</xsl:text>
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template name="common-attributes">
+		<xsl:param name="node"/>
+		<!-- Pretty much every shape has to handle this same batch of attributes. -->
+		<xsl:apply-templates select="$node/@style"/>
+		<!-- Note that we make no effort to guard against overlapping styles. -->
+		<xsl:apply-templates select="$node/@fill"/>
+		<xsl:call-template name="stroke">
+			<xsl:with-param name="node" select="$node"/>
+		</xsl:call-template>
+		<xsl:apply-templates select="$node/@transform"/>
+		<!-- Fonts are actually illegal in most shapes, but including them here doesn't -->
+		<!-- really slow things down much and does clean up code a bit for the shapes -->
+		<!-- that do allow them. -->
+		<xsl:call-template name="font">
+			<xsl:with-param name="node" select="$node"/>
+		</xsl:call-template>
+		<!-- Ditto for stop-colors. -->
+		<xsl:apply-templates select="$node/@stop-color"/>
+	</xsl:template>
+
+	<!-- SVG Attribute Handling -->
+	
+	<xsl:template match="@id">
+		<xsl:text>name:"</xsl:text>
+		<xsl:apply-templates/>
+		<xsl:text>",</xsl:text>
+	</xsl:template>
+	
+	<xsl:template match="@x|@y|@x1|@x2|@y1|@y2|@cx|@cy|@r|@rx|@ry|@fx|@fy|@width|@height|@offset">
+		<!-- Generic attribute followed by comma -->
+		<xsl:value-of select="local-name()"/>
+		<xsl:text>:</xsl:text>
+		<xsl:value-of select="."/>
+		<xsl:text>,</xsl:text>
+	</xsl:template>
+	
+	<xsl:template match="@d">
+		<!-- Used only by path objects; often has tons of extra whitespace -->
+		<xsl:text>path:"</xsl:text>
+		<xsl:value-of select="normalize-space(.)"/>
+		<xsl:text>",</xsl:text>
+	</xsl:template>
+	
+	<xsl:template match="@fill">
+		<!-- Used by most shapes and can have a URL, a solid color, or "none" -->
+		<xsl:if test=". != 'none'">
+			<xsl:text>fill:</xsl:text>
+			<xsl:call-template name="background-processor">
+				<xsl:with-param name="background" select="."/>
+			</xsl:call-template>
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="@stop-color">
+		<xsl:call-template name="color-processor">
+			<xsl:with-param name="color" select="."/>
+		</xsl:call-template>
+	</xsl:template>
+
+	<xsl:template match="@style">
+		<!-- A style property is really a bunch of other properties crammed together. -->
+		<!-- We therefore make a dummy element and process it as normal. -->
+		<xsl:variable name="dummy">
+			<dummy>
+				<xsl:call-template name="styles-processor">
+					<xsl:with-param name="styles" select="."/>
+				</xsl:call-template>
+			</dummy>
+		</xsl:variable>
+		<xsl:choose>
+			<!-- Using a dummy element requires node-set capability. Straight XSLT 1.0 -->
+			<!-- lacks this, but pretty much every XSLT processor offers it as an extension. -->
+			<xsl:when test="function-available('exsl:node-set')">
+				<xsl:call-template name="common-attributes">
+					<xsl:with-param name="node" select="exsl:node-set($dummy)/dummy"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="function-available('saxon:node-set')">
+				<xsl:call-template name="common-attributes">
+					<xsl:with-param name="node" select="saxon:node-set($dummy)"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:when test="function-available('xalan:nodeSet')">
+				<xsl:call-template name="common-attributes">
+					<xsl:with-param name="node" select="xalan:nodeSet($dummy)"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:message>
+					<xsl:text>exslt:node-set is required for processing the style attribute.</xsl:text>
+				</xsl:message>
+			</xsl:otherwise>
+		</xsl:choose>
+	</xsl:template>
+
+	<xsl:template match="@transform|@gradientTransform">
+		<!-- Several transform types are supported -->
+		<xsl:text>transform:{</xsl:text>
+		<xsl:call-template name="transform-processor">
+			<xsl:with-param name="transforms" select="."/>
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>		
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<!-- SVG Element Handling -->
+	
+	<xsl:template match="svg:a">
+		<xsl:param name="groupAttrs" select="''"/>
+		<!-- Anchors are actually meaningless to us, but their contents should usually be processed. -->
+		<xsl:variable name="newGroupAttrs">
+			<xsl:value-of select="$groupAttrs"/>
+			<xsl:apply-templates select="@style"/>
+			<!-- Note that we make no effort to guard against overlapping styles; we just order -->
+			<!-- them to be consistent.  This naive approach will usually, but not always, work. -->
+			<xsl:apply-templates select="@fill"/>
+			<xsl:call-template name="stroke">
+				<xsl:with-param name="node" select="."/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:apply-templates select="&SupportedElements;">
+			<xsl:with-param name="groupAttrs" select="$newGroupAttrs"/>
+		</xsl:apply-templates>
+	</xsl:template>
+
+	<xsl:template match="svg:circle">
+		<xsl:param name="groupAttrs" select="''"/>
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@id"/>
+		<xsl:text>shape:{type:"circle",</xsl:text>
+		<xsl:apply-templates select="@cx|@cy|@r"/>
+		<xsl:text>},</xsl:text>
+		<xsl:value-of select="$groupAttrs"/>
+		<xsl:call-template name="common-attributes">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:ellipse">
+		<xsl:param name="groupAttrs" select="''"/>
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@id"/>
+		<xsl:text>shape:{type:"ellipse",</xsl:text>
+		<xsl:apply-templates select="@cx|@cy|@rx|@ry"/>
+		<xsl:text>}</xsl:text>
+		<xsl:value-of select="$groupAttrs"/>
+		<xsl:call-template name="common-attributes">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:g">
+		<xsl:param name="groupAttrs" select="''"/>
+		<!-- The basic grouping type can contain shapes, other groups, and have a transform -->
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@id"/>
+		<xsl:text>children:[</xsl:text>
+		<!-- Note that GFX does not yet support fills etc. on a group, even though SVG does. -->
+		<!-- It's a planned enhancement though, so when GFX gets the ability to handle these, -->
+		<!-- remove the following ten lines and stop propagating groupAttrs. -->
+		<xsl:variable name="newGroupAttrs">
+			<xsl:value-of select="$groupAttrs"/>
+			<xsl:apply-templates select="@style"/>
+			<!-- Note that we make no effort to guard against overlapping styles; we just order -->
+			<!-- them to be consistent.  This naive approach will usually, but not always, work. -->
+			<xsl:apply-templates select="@fill"/>
+			<xsl:call-template name="stroke">
+				<xsl:with-param name="node" select="."/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:apply-templates select="&SupportedElements;">
+			<xsl:with-param name="groupAttrs" select="$newGroupAttrs"/>
+		</xsl:apply-templates>
+		<xsl:text>]</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+		<!-- When GFX gets group fills etc., remove the following line and uncomment the ones below. -->
+		<xsl:apply-templates select="@transform"/>
+		<!--<xsl:call-template name="common-attributes">-->
+		<!--	<xsl:with-param name="node" select="."/>-->
+		<!--</xsl:call-template>-->
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:image">
+		<xsl:param name="groupAttrs" select="''"/>
+		<!-- Note that images must be GIF, JPEG, or PNG. -->
+		<xsl:if test="not(parent::pattern)">
+			<!-- When being used as a background pattern we don't want type info. -->
+			<xsl:text>{</xsl:text>
+			<xsl:apply-templates select="@id"/>
+			<xsl:text>shape:{type:"image",</xsl:text>
+		</xsl:if>
+		<xsl:apply-templates select="@x|@y|@width|@height"/>
+		<xsl:text>src:"</xsl:text>
+		<xsl:value-of select="@xlink:href"/>
+		<xsl:text>",</xsl:text>
+		<xsl:if test="not(parent::pattern)">
+			<xsl:text>},</xsl:text>
+			<xsl:value-of select="$groupAttrs"/>
+			<xsl:call-template name="common-attributes">
+				<xsl:with-param name="node" select="."/>
+			</xsl:call-template>
+			<xsl:text>},</xsl:text>
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:line">
+		<xsl:param name="groupAttrs" select="''"/>
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@id"/>
+		<xsl:text>shape:{type:"line",</xsl:text>
+		<xsl:apply-templates select="@x1|@y1|@x2|@y2"/>
+		<xsl:text>},</xsl:text>
+		<xsl:value-of select="$groupAttrs"/>
+		<xsl:call-template name="common-attributes">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:linearGradient">
+		<xsl:text>{type:"linear",</xsl:text>
+		<!-- Kluge alert - GFX doesn't handle gradientTransforms. We can help in -->
+		<!-- the common case of matrix transforms in user space. Other cases we ignore. -->
+		<!-- Even for this one case the results aren't anywhere near as good as real support in GFX. -->
+		<xsl:choose>
+			<!-- Kluge alert - this code is only meant to serve until GFX gets gradientTransform support. -->
+			<!-- Once GFX does gradientTransforms, only the straight apply-templates should be kept. -->
+			<xsl:when test="starts-with(@gradientTransform,'matrix') and @gradientUnits='userSpaceOnUse'">
+				<xsl:call-template name="gradient-adjuster">
+					<xsl:with-param name="node" select="."/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:apply-templates select="@x1|@x2|@y1|@y2"/>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>colors:[</xsl:text>
+		<xsl:apply-templates select="svg:stop"/>
+		<!-- Unfortunately GFX doesn't do gradientTransforms. -->
+		<!-- Uncommenting the following would support it here. -->
+		<!-- <xsl:apply-templates select="@x1|@x2|@y1|@y2"/> -->
+		<!-- <xsl:apply-templates select="@gradientTransform"/> -->
+		<xsl:text>]}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:path">
+		<xsl:param name="groupAttrs" select="''"/>
+		<xsl:if test="not(parent::textpath)">
+			<!-- When being used within a textpath we don't want type info. -->
+			<xsl:text>{</xsl:text>
+			<xsl:apply-templates select="@id"/>
+			<xsl:text>shape:{type:"path",</xsl:text>
+		</xsl:if>
+		<xsl:apply-templates select="@d"/>
+		<xsl:if test="not(parent::textpath)">
+			<xsl:text>},</xsl:text>
+			<xsl:value-of select="$groupAttrs"/>
+			<xsl:call-template name="common-attributes">
+				<xsl:with-param name="node" select="."/>
+			</xsl:call-template>
+			<xsl:text>},</xsl:text>
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:pattern">
+		<!-- GFX only seems to handle image pattern type fills, so that's all we do -->
+		<xsl:text>{type:"pattern",</xsl:text>
+		<xsl:apply-templates select="@width|@height|@xlink:href"/>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:polygon|svg:polyline">
+		<xsl:param name="groupAttrs" select="''"/>
+		<!-- Polygons are mostly treated as polylines -->
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@id"/>
+		<xsl:text>shape:{type:"polyline",points:[</xsl:text>
+		<!-- We just have to ensure that endpoints match for a polygon; it's assumed in SVG -->
+		<xsl:variable name="seminormalizedPoints" select="normalize-space(@points)"/>
+		<xsl:variable name="normalizedPoints">
+			<xsl:call-template name="kill-extra-spaces">
+				<xsl:with-param name="string" select="$seminormalizedPoints"/>
+			</xsl:call-template>
+		</xsl:variable>
+		<xsl:variable name="firstPoint" select="substring-before($normalizedPoints,' ')"/>
+		<xsl:choose>
+			<xsl:when test="contains(local-name(),'polygon') and
+				$firstPoint!=substring($normalizedPoints,string-length($normalizedPoints)-string-length($firstPoint)+1)">
+				<xsl:call-template name="point-processor">
+					<xsl:with-param name="points" select="concat($normalizedPoints,' ',$firstPoint)"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:call-template name="point-processor">
+					<xsl:with-param name="points" select="$normalizedPoints"/>
+				</xsl:call-template>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>]},</xsl:text>
+		<xsl:value-of select="$groupAttrs"/>
+		<xsl:call-template name="common-attributes">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:radialGradient">
+		<xsl:text>{type:"radial",</xsl:text>
+		<!-- Kluge alert - GFX doesn't handle gradientTransforms. We can help in -->
+		<!-- the common case of matrix transforms in user space. Other cases we ignore. -->
+		<!-- Even for this one case the results aren't anywhere near as good as real support in GFX. -->
+		<xsl:choose>
+			<!-- Kluge alert - this code is only meant to serve until GFX gets gradientTransform support. -->
+			<!-- Once GFX does gradientTransforms, only the straight apply-templates should be kept. -->
+			<xsl:when test="starts-with(@gradientTransform,'matrix') and @gradientUnits='userSpaceOnUse'">
+				<xsl:call-template name="gradient-adjuster">
+					<xsl:with-param name="node" select="."/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<xsl:apply-templates select="@cx|@cy|@r"/>
+			</xsl:otherwise>
+		</xsl:choose>
+		<!-- GFX doesn't currently support fx & fy -->
+		<!-- Uncommenting the following would support it here. -->
+		<!-- <xsl:apply-templates select="@fx|@fy"/> -->
+		<xsl:text>colors:[</xsl:text>
+		<xsl:apply-templates select="svg:stop"/>
+		<!-- Unfortunately GFX doesn't do gradientTransforms. -->
+		<!-- Uncommenting the following would support it here. -->
+		<!-- <xsl:apply-templates select="@cx|@cy|@r"/> -->
+		<!-- <xsl:apply-templates select="@gradientTransform"/> -->
+		<xsl:text>]}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:rect">
+		<xsl:param name="groupAttrs" select="''"/>
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@id"/>
+		<xsl:text>shape:{type:"rect",</xsl:text>
+		<xsl:apply-templates select="@x|@y|@width|@height"/>
+		<xsl:if test="@rx and @ry">
+			<!-- Do approximate rounded corners if both an rx and ry are present. -->
+			<xsl:variable name="r" select="(@rx+@ry) div 2"/>
+			<xsl:text>r:</xsl:text>
+			<xsl:value-of select="$r"/>
+		</xsl:if>
+		<xsl:text>},</xsl:text>
+		<xsl:value-of select="$groupAttrs"/>
+		<xsl:call-template name="common-attributes">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:stop">
+		<!-- Both gradient types use the same sort of stops -->
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@offset"/>
+		<xsl:text>color:</xsl:text>
+		<xsl:apply-templates select="@style"/>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+
+	<xsl:template match="svg:text|svg:textPath">
+		<xsl:param name="groupAttrs" select="''"/>
+		<!-- Support for textPath is not functional as GFX doesn't seem to have a -->
+		<!-- complete serialized form at this time. %FIX% -->
+		<xsl:text>{</xsl:text>
+		<xsl:apply-templates select="@id"/>
+		<xsl:choose>
+			<xsl:when test="contains(local-name(),'textpath')">
+				<xsl:text>shape:{type:"textpath",text:"</xsl:text>
+				<xsl:apply-templates/>
+				<xsl:text>",</xsl:text>
+				<xsl:variable name="arguments" select="translate(normalize-space(substring-before(substring-after(@xlink:href,'('),')')),' ',',')"/>
+				<xsl:call-template name="url-processor">
+					<xsl:with-param name="url" select="$arguments"/>
+				</xsl:call-template>
+			</xsl:when>
+			<xsl:otherwise>
+				<!-- Regular text has slightly different attributes -->
+				<xsl:choose>
+					<!-- It's possible for a text element to contain a textpath element. -->
+					<xsl:when test="not(textpath)">
+						<xsl:text>shape:{type:"text",text:"</xsl:text>
+						<xsl:apply-templates/>
+						<xsl:text>",</xsl:text>
+						<xsl:apply-templates select="@x|@y"/>
+					</xsl:when>
+					<xsl:otherwise>
+						<xsl:apply-templates/>
+					</xsl:otherwise>
+				</xsl:choose>
+			</xsl:otherwise>
+		</xsl:choose>
+		<xsl:text>},</xsl:text>
+		<!-- Kluge alert - if no fill is defined, GFX won't display anything -->
+		<!-- Our quick fix here is to force a fill of some sort. -->
+		<xsl:if test="not(@fill)">
+			<xsl:text>fill:"#000000",</xsl:text>
+		</xsl:if>
+		<xsl:value-of select="$groupAttrs"/>
+		<xsl:call-template name="common-attributes">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:text>}</xsl:text>
+		<xsl:if test="not(position()=last())"> 
+			<xsl:text >,</xsl:text> 
+		</xsl:if>
+	</xsl:template>
+	
+	<xsl:template match="svg:use">
+		<xsl:param name="groupAttrs" select="''"/>
+		<!-- Use just refers to an existing element, essentially duplicating it. -->
+		<xsl:variable name="newGroupAttrs">
+			<xsl:value-of select="$groupAttrs"/>
+			<xsl:apply-templates select="@style"/>
+			<!-- Note that we make no effort to guard against overlapping styles; we just order -->
+			<!-- them to be consistent.  This naive approach will usually, but not always, work. -->
+			<xsl:apply-templates select="@fill"/>
+			<xsl:call-template name="stroke">
+				<xsl:with-param name="node" select="."/>
+			</xsl:call-template>
+			<xsl:apply-templates select="@transform"/>
+		</xsl:variable>
+		<xsl:call-template name="url-processor">
+			<xsl:with-param name="url" select="normalize-space(@xlink:href)"/>
+			<xsl:with-param name="groupAttrs" select="$newGroupAttrs"/>
+		</xsl:call-template>
+	</xsl:template>
+
+	<!-- The main SVG element itself -->
+	
+	<xsl:template match="/svg:svg">
+		<xsl:text>[</xsl:text>
+		<xsl:apply-templates select="&SupportedElements;"/>
+		<xsl:text>]</xsl:text>
+	</xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
Index: trunk/web/dojo/dojox/gfx/resources/README
===================================================================
--- trunk/web/dojo/dojox/gfx/resources/README	(revision 0)
+++ trunk/web/dojo/dojox/gfx/resources/README	(revision 9)
@@ -0,0 +1,3 @@
+http://xmlgraphics.apache.org/batik/tools/font-converter.html
+
+
Index: trunk/web/dojo/dojox/gfx/resources/svg2gfx-simple.xsl
===================================================================
--- trunk/web/dojo/dojox/gfx/resources/svg2gfx-simple.xsl	(revision 0)
+++ trunk/web/dojo/dojox/gfx/resources/svg2gfx-simple.xsl	(revision 9)
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Super simple XSLT to convert Nils.svg and Lars.svg to our format -->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
+	<xsl:output method="text" version="1.0" encoding="UTF-8"/>
+	<xsl:template name="fill">
+		<xsl:param name="node"/>
+		<xsl:if test="count($node/@fill) &gt; 0">
+			<xsl:text>fill: "</xsl:text>
+			<xsl:value-of select="$node/@fill"/>
+			<xsl:text>",</xsl:text>
+		</xsl:if>
+	</xsl:template>
+	<xsl:template name="stroke">
+		<xsl:param name="node"/>
+		<xsl:text>stroke: {</xsl:text>
+		<xsl:if test="count($node/@stroke) &gt; 0">
+			<xsl:text>color: "</xsl:text>
+			<xsl:value-of select="$node/@stroke"/>
+			<xsl:text>",</xsl:text>
+		</xsl:if>
+		<xsl:if test="count($node/@stroke-width) &gt; 0">
+			<xsl:text>width: "</xsl:text>
+			<xsl:value-of select="$node/@stroke-width"/>
+			<xsl:text>",</xsl:text>
+		</xsl:if>
+		<xsl:if test="count($node/@stroke-linecap) &gt; 0">
+			<xsl:text>cap: "</xsl:text>
+			<xsl:value-of select="$node/@stroke-linecap"/>
+			<xsl:text>",</xsl:text>
+		</xsl:if>
+		<xsl:if test="count($node/@stroke-linejoin) &gt; 0">
+			<xsl:text>join: "</xsl:text>
+			<xsl:value-of select="$node/@stroke-linejoin"/>
+			<xsl:text>",</xsl:text>
+		</xsl:if>
+		<xsl:text>},</xsl:text>
+	</xsl:template>
+	<xsl:template match="g">
+		<xsl:text>{</xsl:text>
+		<xsl:if test="count(@id) &gt; 0">
+			<xsl:text>name: "</xsl:text>
+			<xsl:value-of select="@id"/>
+			<xsl:text>",</xsl:text>
+		</xsl:if>
+		<xsl:text>children: [</xsl:text>
+		<xsl:apply-templates select="g|path"/>
+		<xsl:text>]},</xsl:text>
+	</xsl:template>
+	<xsl:template match="path">
+		<xsl:text>{</xsl:text>
+		<xsl:if test="count(@id) &gt; 0">
+			<xsl:text>name: "</xsl:text>
+			<xsl:value-of select="@id"/>
+			<xsl:text>",</xsl:text>
+		</xsl:if>
+		<xsl:text>shape: {type: "path", path: "</xsl:text>
+		<xsl:value-of select="@d"/>
+		<xsl:text>"},</xsl:text>
+		<xsl:call-template name="fill">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:call-template name="stroke">
+			<xsl:with-param name="node" select="."/>
+		</xsl:call-template>
+		<xsl:text>},</xsl:text>
+	</xsl:template>
+	<xsl:template match="svg">
+		<xsl:text>[</xsl:text>
+		<xsl:apply-templates select="g|path"/>
+		<xsl:text>]</xsl:text>
+	</xsl:template>
+</xsl:stylesheet>
Index: trunk/web/dojo/dojox/gfx/svg.js
===================================================================
--- trunk/web/dojo/dojox/gfx/svg.js	(revision 0)
+++ trunk/web/dojo/dojox/gfx/svg.js	(revision 9)
@@ -0,0 +1,548 @@
+/*
+	Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+	Available via Academic Free License >= 2.1 OR the modified BSD license.
+	see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.gfx.svg"]){
+dojo._hasResource["dojox.gfx.svg"]=true;
+dojo.provide("dojox.gfx.svg");
+dojo.require("dojox.gfx._base");
+dojo.require("dojox.gfx.shape");
+dojo.require("dojox.gfx.path");
+(function(){
+var d=dojo,g=dojox.gfx,gs=g.shape,_1=g.svg;
+_1.useSvgWeb=(typeof (window.svgweb)!=="undefined");
+var _2=function(ns,_3){
+if(dojo.doc.createElementNS){
+return dojo.doc.createElementNS(ns,_3);
+}else{
+return dojo.doc.createElement(_3);
+}
+};
+var _4=function(_5){
+if(_1.useSvgWeb){
+return dojo.doc.createTextNode(_5,true);
+}else{
+return dojo.doc.createTextNode(_5);
+}
+};
+var _6=function(){
+if(_1.useSvgWeb){
+return dojo.doc.createDocumentFragment(true);
+}else{
+return dojo.doc.createDocumentFragment();
+}
+};
+_1.xmlns={xlink:"http://www.w3.org/1999/xlink",svg:"http://www.w3.org/2000/svg"};
+_1.getRef=function(_7){
+if(!_7||_7=="none"){
+return null;
+}
+if(_7.match(/^url\(#.+\)$/)){
+return d.byId(_7.slice(5,-1));
+}
+if(_7.match(/^#dojoUnique\d+$/)){
+return d.byId(_7.slice(1));
+}
+return null;
+};
+_1.dasharray={solid:"none",shortdash:[4,1],shortdot:[1,1],shortdashdot:[4,1,1,1],shortdashdotdot:[4,1,1,1,1,1],dot:[1,3],dash:[4,3],longdash:[8,3],dashdot:[4,3,1,3],longdashdot:[8,3,1,3],longdashdotdot:[8,3,1,3,1,3]};
+d.extend(g.Shape,{setFill:function(_8){
+if(!_8){
+this.fillStyle=null;
+this.rawNode.setAttribute("fill","none");
+this.rawNode.setAttribute("fill-opacity",0);
+return this;
+}
+var f;
+var _9=function(x){
+this.setAttribute(x,f[x].toFixed(8));
+};
+if(typeof (_8)=="object"&&"type" in _8){
+switch(_8.type){
+case "linear":
+f=g.makeParameters(g.defaultLinearGradient,_8);
+var _a=this._setFillObject(f,"linearGradient");
+d.forEach(["x1","y1","x2","y2"],_9,_a);
+break;
+case "radial":
+f=g.makeParameters(g.defaultRadialGradient,_8);
+var _a=this._setFillObject(f,"radialGradient");
+d.forEach(["cx","cy","r"],_9,_a);
+break;
+case "pattern":
+f=g.makeParameters(g.defaultPattern,_8);
+var _b=this._setFillObject(f,"pattern");
+d.forEach(["x","y","width","height"],_9,_b);
+break;
+}
+this.fillStyle=f;
+return this;
+}
+var f=g.normalizeColor(_8);
+this.fillStyle=f;
+this.rawNode.setAttribute("fill",f.toCss());
+this.rawNode.setAttribute("fill-opacity",f.a);
+this.rawNode.setAttribute("fill-rule","evenodd");
+return this;
+},setStroke:function(_c){
+var rn=this.rawNode;
+if(!_c){
+this.strokeStyle=null;
+rn.setAttribute("stroke","none");
+rn.setAttribute("stroke-opacity",0);
+return this;
+}
+if(typeof _c=="string"||d.isArray(_c)||_c instanceof d.Color){
+_c={color:_c};
+}
+var s=this.strokeStyle=g.makeParameters(g.defaultStroke,_c);
+s.color=g.normalizeColor(s.color);
+if(s){
+rn.setAttribute("stroke",s.color.toCss());
+rn.setAttribute("stroke-opacity",s.color.a);
+rn.setAttribute("stroke-width",s.width);
+rn.setAttribute("stroke-linecap",s.cap);
+if(typeof s.join=="number"){
+rn.setAttribute("stroke-linejoin","miter");
+rn.setAttribute("stroke-miterlimit",s.join);
+}else{
+rn.setAttribute("stroke-linejoin",s.join);
+}
+var da=s.style.toLowerCase();
+if(da in _1.dasharray){
+da=_1.dasharray[da];
+}
+if(da instanceof Array){
+da=d._toArray(da);
+for(var i=0;i<da.length;++i){
+da[i]*=s.width;
+}
+if(s.cap!="butt"){
+for(var i=0;i<da.length;i+=2){
+da[i]-=s.width;
+if(da[i]<1){
+da[i]=1;
+}
+}
+for(var i=1;i<da.length;i+=2){
+da[i]+=s.width;
+}
+}
+da=da.join(",");
+}
+rn.setAttribute("stroke-dasharray",da);
+rn.setAttribute("dojoGfxStrokeStyle",s.style);
+}
+return this;
+},_getParentSurface:function(){
+var _d=this.parent;
+for(;_d&&!(_d instanceof g.Surface);_d=_d.parent){
+}
+return _d;
+},_setFillObject:function(f,_e){
+var _f=_1.xmlns.svg;
+this.fillStyle=f;
+var _10=this._getParentSurface(),_11=_10.defNode,_12=this.rawNode.getAttribute("fill"),ref=_1.getRef(_12);
+if(ref){
+_12=ref;
+if(_12.tagName.toLowerCase()!=_e.toLowerCase()){
+var id=_12.id;
+_12.parentNode.removeChild(_12);
+_12=_2(_f,_e);
+_12.setAttribute("id",id);
+_11.appendChild(_12);
+}else{
+while(_12.childNodes.length){
+_12.removeChild(_12.lastChild);
+}
+}
+}else{
+_12=_2(_f,_e);
+_12.setAttribute("id",g._base._getUniqueId());
+_11.appendChild(_12);
+}
+if(_e=="pattern"){
+_12.setAttribute("patternUnits","userSpaceOnUse");
+var img=_2(_f,"image");
+img.setAttribute("x",0);
+img.setAttribute("y",0);
+img.setAttribute("width",f.width.toFixed(8));
+img.setAttribute("height",f.height.toFixed(8));
+img.setAttributeNS(_1.xmlns.xlink,"xlink:href",f.src);
+_12.appendChild(img);
+}else{
+_12.setAttribute("gradientUnits","userSpaceOnUse");
+for(var i=0;i<f.colors.length;++i){
+var c=f.colors[i],t=_2(_f,"stop"),cc=c.color=g.normalizeColor(c.color);
+t.setAttribute("offset",c.offset.toFixed(8));
+t.setAttribute("stop-color",cc.toCss());
+t.setAttribute("stop-opacity",cc.a);
+_12.appendChild(t);
+}
+}
+this.rawNode.setAttribute("fill","url(#"+_12.getAttribute("id")+")");
+this.rawNode.removeAttribute("fill-opacity");
+this.rawNode.setAttribute("fill-rule","evenodd");
+return _12;
+},_applyTransform:function(){
+var _13=this.matrix;
+if(_13){
+var tm=this.matrix;
+this.rawNode.setAttribute("transform","matrix("+tm.xx.toFixed(8)+","+tm.yx.toFixed(8)+","+tm.xy.toFixed(8)+","+tm.yy.toFixed(8)+","+tm.dx.toFixed(8)+","+tm.dy.toFixed(8)+")");
+}else{
+this.rawNode.removeAttribute("transform");
+}
+return this;
+},setRawNode:function(_14){
+var r=this.rawNode=_14;
+if(this.shape.type!="image"){
+r.setAttribute("fill","none");
+}
+r.setAttribute("fill-opacity",0);
+r.setAttribute("stroke","none");
+r.setAttribute("stroke-opacity",0);
+r.setAttribute("stroke-width",1);
+r.setAttribute("stroke-linecap","butt");
+r.setAttribute("stroke-linejoin","miter");
+r.setAttribute("stroke-miterlimit",4);
+},setShape:function(_15){
+this.shape=g.makeParameters(this.shape,_15);
+for(var i in this.shape){
+if(i!="type"){
+this.rawNode.setAttribute(i,this.shape[i]);
+}
+}
+this.bbox=null;
+return this;
+},_moveToFront:function(){
+this.rawNode.parentNode.appendChild(this.rawNode);
+return this;
+},_moveToBack:function(){
+this.rawNode.parentNode.insertBefore(this.rawNode,this.rawNode.parentNode.firstChild);
+return this;
+}});
+dojo.declare("dojox.gfx.Group",g.Shape,{constructor:function(){
+_1.Container._init.call(this);
+},setRawNode:function(_16){
+this.rawNode=_16;
+}});
+g.Group.nodeType="g";
+dojo.declare("dojox.gfx.Rect",gs.Rect,{setShape:function(_17){
+this.shape=g.makeParameters(this.shape,_17);
+this.bbox=null;
+for(var i in this.shape){
+if(i!="type"&&i!="r"){
+this.rawNode.setAttribute(i,this.shape[i]);
+}
+}
+if(this.shape.r){
+this.rawNode.setAttribute("ry",this.shape.r);
+this.rawNode.setAttribute("rx",this.shape.r);
+}
+return this;
+}});
+g.Rect.nodeType="rect";
+g.Ellipse=gs.Ellipse;
+g.Ellipse.nodeType="ellipse";
+g.Circle=gs.Circle;
+g.Circle.nodeType="circle";
+g.Line=gs.Line;
+g.Line.nodeType="line";
+dojo.declare("dojox.gfx.Polyline",gs.Polyline,{setShape:function(_18,_19){
+if(_18&&_18 instanceof Array){
+this.shape=g.makeParameters(this.shape,{points:_18});
+if(_19&&this.shape.points.length){
+this.shape.points.push(this.shape.points[0]);
+}
+}else{
+this.shape=g.makeParameters(this.shape,_18);
+}
+this.bbox=null;
+this._normalizePoints();
+var _1a=[],p=this.shape.points;
+for(var i=0;i<p.length;++i){
+_1a.push(p[i].x.toFixed(8),p[i].y.toFixed(8));
+}
+this.rawNode.setAttribute("points",_1a.join(" "));
+return this;
+}});
+g.Polyline.nodeType="polyline";
+dojo.declare("dojox.gfx.Image",gs.Image,{setShape:function(_1b){
+this.shape=g.makeParameters(this.shape,_1b);
+this.bbox=null;
+var _1c=this.rawNode;
+for(var i in this.shape){
+if(i!="type"&&i!="src"){
+_1c.setAttribute(i,this.shape[i]);
+}
+}
+_1c.setAttribute("preserveAspectRatio","none");
+_1c.setAttributeNS(_1.xmlns.xlink,"xlink:href",this.shape.src);
+return this;
+}});
+g.Image.nodeType="image";
+dojo.declare("dojox.gfx.Text",gs.Text,{setShape:function(_1d){
+this.shape=g.makeParameters(this.shape,_1d);
+this.bbox=null;
+var r=this.rawNode,s=this.shape;
+r.setAttribute("x",s.x);
+r.setAttribute("y",s.y);
+r.setAttribute("text-anchor",s.align);
+r.setAttribute("text-decoration",s.decoration);
+r.setAttribute("rotate",s.rotated?90:0);
+r.setAttribute("kerning",s.kerning?"auto":0);
+r.setAttribute("text-rendering","optimizeLegibility");
+if(r.firstChild){
+r.firstChild.nodeValue=s.text;
+}else{
+r.appendChild(_4(s.text));
+}
+return this;
+},getTextWidth:function(){
+var _1e=this.rawNode,_1f=_1e.parentNode,_20=_1e.cloneNode(true);
+_20.style.visibility="hidden";
+var _21=0,_22=_20.firstChild.nodeValue;
+_1f.appendChild(_20);
+if(_22!=""){
+while(!_21){
+if(_20.getBBox){
+_21=parseInt(_20.getBBox().width);
+}else{
+_21=68;
+}
+}
+}
+_1f.removeChild(_20);
+return _21;
+}});
+g.Text.nodeType="text";
+dojo.declare("dojox.gfx.Path",g.path.Path,{_updateWithSegment:function(_23){
+g.Path.superclass._updateWithSegment.apply(this,arguments);
+if(typeof (this.shape.path)=="string"){
+this.rawNode.setAttribute("d",this.shape.path);
+}
+},setShape:function(_24){
+g.Path.superclass.setShape.apply(this,arguments);
+this.rawNode.setAttribute("d",this.shape.path);
+return this;
+}});
+g.Path.nodeType="path";
+dojo.declare("dojox.gfx.TextPath",g.path.TextPath,{_updateWithSegment:function(_25){
+g.Path.superclass._updateWithSegment.apply(this,arguments);
+this._setTextPath();
+},setShape:function(_26){
+g.Path.superclass.setShape.apply(this,arguments);
+this._setTextPath();
+return this;
+},_setTextPath:function(){
+if(typeof this.shape.path!="string"){
+return;
+}
+var r=this.rawNode;
+if(!r.firstChild){
+var tp=_2(_1.xmlns.svg,"textPath"),tx=_4("");
+tp.appendChild(tx);
+r.appendChild(tp);
+}
+var ref=r.firstChild.getAttributeNS(_1.xmlns.xlink,"href"),_27=ref&&_1.getRef(ref);
+if(!_27){
+var _28=this._getParentSurface();
+if(_28){
+var _29=_28.defNode;
+_27=_2(_1.xmlns.svg,"path");
+var id=g._base._getUniqueId();
+_27.setAttribute("id",id);
+_29.appendChild(_27);
+r.firstChild.setAttributeNS(_1.xmlns.xlink,"xlink:href","#"+id);
+}
+}
+if(_27){
+_27.setAttribute("d",this.shape.path);
+}
+},_setText:function(){
+var r=this.rawNode;
+if(!r.firstChild){
+var tp=_2(_1.xmlns.svg,"textPath"),tx=_4("");
+tp.appendChild(tx);
+r.appendChild(tp);
+}
+r=r.firstChild;
+var t=this.text;
+r.setAttribute("alignment-baseline","middle");
+switch(t.align){
+case "middle":
+r.setAttribute("text-anchor","middle");
+r.setAttribute("startOffset","50%");
+break;
+case "end":
+r.setAttribute("text-anchor","end");
+r.setAttribute("startOffset","100%");
+break;
+default:
+r.setAttribute("text-anchor","start");
+r.setAttribute("startOffset","0%");
+break;
+}
+r.setAttribute("baseline-shift","0.5ex");
+r.setAttribute("text-decoration",t.decoration);
+r.setAttribute("rotate",t.rotated?90:0);
+r.setAttribute("kerning",t.kerning?"auto":0);
+r.firstChild.data=t.text;
+}});
+g.TextPath.nodeType="text";
+dojo.declare("dojox.gfx.Surface",gs.Surface,{constructor:function(){
+_1.Container._init.call(this);
+},destroy:function(){
+this.defNode=null;
+this.inherited(arguments);
+},setDimensions:function(_2a,_2b){
+if(!this.rawNode){
+return this;
+}
+this.rawNode.setAttribute("width",_2a);
+this.rawNode.setAttribute("height",_2b);
+return this;
+},getDimensions:function(){
+var t=this.rawNode?{width:g.normalizedLength(this.rawNode.getAttribute("width")),height:g.normalizedLength(this.rawNode.getAttribute("height"))}:null;
+return t;
+}});
+g.createSurface=function(_2c,_2d,_2e){
+var s=new g.Surface();
+s.rawNode=_2(_1.xmlns.svg,"svg");
+if(_2d){
+s.rawNode.setAttribute("width",_2d);
+}
+if(_2e){
+s.rawNode.setAttribute("height",_2e);
+}
+var _2f=_2(_1.xmlns.svg,"defs");
+s.rawNode.appendChild(_2f);
+s.defNode=_2f;
+s._parent=d.byId(_2c);
+s._parent.appendChild(s.rawNode);
+return s;
+};
+_1.Font={_setFont:function(){
+var f=this.fontStyle;
+this.rawNode.setAttribute("font-style",f.style);
+this.rawNode.setAttribute("font-variant",f.variant);
+this.rawNode.setAttribute("font-weight",f.weight);
+this.rawNode.setAttribute("font-size",f.size);
+this.rawNode.setAttribute("font-family",f.family);
+}};
+_1.Container={_init:function(){
+gs.Container._init.call(this);
+},openBatch:function(){
+this.fragment=_6();
+},closeBatch:function(){
+if(this.fragment){
+this.rawNode.appendChild(this.fragment);
+delete this.fragment;
+}
+},add:function(_30){
+if(this!=_30.getParent()){
+if(this.fragment){
+this.fragment.appendChild(_30.rawNode);
+}else{
+this.rawNode.appendChild(_30.rawNode);
+}
+gs.Container.add.apply(this,arguments);
+}
+return this;
+},remove:function(_31,_32){
+if(this==_31.getParent()){
+if(this.rawNode==_31.rawNode.parentNode){
+this.rawNode.removeChild(_31.rawNode);
+}
+if(this.fragment&&this.fragment==_31.rawNode.parentNode){
+this.fragment.removeChild(_31.rawNode);
+}
+gs.Container.remove.apply(this,arguments);
+}
+return this;
+},clear:function(){
+var r=this.rawNode;
+while(r.lastChild){
+r.removeChild(r.lastChild);
+}
+var _33=this.defNode;
+if(_33){
+while(_33.lastChild){
+_33.removeChild(_33.lastChild);
+}
+r.appendChild(_33);
+}
+return gs.Container.clear.apply(this,arguments);
+},_moveChildToFront:gs.Container._moveChildToFront,_moveChildToBack:gs.Container._moveChildToBack};
+d.mixin(gs.Creator,{createObject:function(_34,_35){
+if(!this.rawNode){
+return null;
+}
+var _36=new _34(),_37=_2(_1.xmlns.svg,_34.nodeType);
+_36.setRawNode(_37);
+_36.setShape(_35);
+this.add(_36);
+return _36;
+}});
+d.extend(g.Text,_1.Font);
+d.extend(g.TextPath,_1.Font);
+d.extend(g.Group,_1.Container);
+d.extend(g.Group,gs.Creator);
+d.extend(g.Surface,_1.Container);
+d.extend(g.Surface,gs.Creator);
+if(_1.useSvgWeb){
+g.createSurface=function(_38,_39,_3a){
+var s=new g.Surface();
+if(!_39||!_3a){
+var pos=d.position(_38);
+_39=_39||pos.w;
+_3a=_3a||pos.h;
+}
+_38=d.byId(_38);
+var id=_38.id?_38.id+"_svgweb":g._base._getUniqueId();
+var _3b=_2(_1.xmlns.svg,"svg");
+_3b.id=id;
+_3b.setAttribute("width",_39);
+_3b.setAttribute("height",_3a);
+svgweb.appendChild(_3b,_38);
+_3b.addEventListener("SVGLoad",function(){
+s.rawNode=this;
+s.isLoaded=true;
+var _3c=_2(_1.xmlns.svg,"defs");
+s.rawNode.appendChild(_3c);
+s.defNode=_3c;
+if(s.onLoad){
+s.onLoad(s);
+}
+},false);
+s.isLoaded=false;
+return s;
+};
+dojo.extend(dojox.gfx.shape.Surface,{destroy:function(){
+var _3d=this.rawNode;
+svgweb.removeChild(_3d,_3d.parentNode);
+}});
+gs._eventsProcessing.connect=function(_3e,_3f,_40){
+if(_3e.substring(0,2)==="on"){
+_3e=_3e.substring(2);
+}
+if(arguments.length==2){
+_40=_3f;
+}else{
+_40=d.hitch(_3f,_40);
+}
+this.getEventSource().addEventListener(_3e,_40,false);
+return [this,_3e,_40];
+};
+gs._eventsProcessing.disconnect=function(_41){
+this.getEventSource().removeEventListener(_41[1],_41[2],false);
+delete _41[0];
+};
+dojo.extend(dojox.gfx.Shape,dojox.gfx.shape._eventsProcessing);
+dojo.extend(dojox.gfx.shape.Surface,dojox.gfx.shape._eventsProcessing);
+}
+})();
+}
Index: trunk/web/js/mootools-1.2.4-core-nc.js
===================================================================
--- trunk/web/js/mootools-1.2.4-core-nc.js	(revision 0)
+++ trunk/web/js/mootools-1.2.4-core-nc.js	(revision 9)
@@ -0,0 +1,4329 @@
+/*
+---
+
+script: Core.js
+
+description: The core of MooTools, contains all the base functions and the Native and Hash implementations. Required by all the other scripts.
+
+license: MIT-style license.
+
+copyright: Copyright (c) 2006-2008 [Valerio Proietti](http://mad4milk.net/).
+
+authors: The MooTools production team (http://mootools.net/developers/)
+
+inspiration:
+- Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
+- Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
+
+provides: [Mootools, Native, Hash.base, Array.each, $util]
+
+...
+*/
+
+var MooTools = {
+	'version': '1.2.4',
+	'build': '0d9113241a90b9cd5643b926795852a2026710d4'
+};
+
+var Native = function(options){
+	options = options || {};
+	var name = options.name;
+	var legacy = options.legacy;
+	var protect = options.protect;
+	var methods = options.implement;
+	var generics = options.generics;
+	var initialize = options.initialize;
+	var afterImplement = options.afterImplement || function(){};
+	var object = initialize || legacy;
+	generics = generics !== false;
+
+	object.constructor = Native;
+	object.$family = {name: 'native'};
+	if (legacy && initialize) object.prototype = legacy.prototype;
+	object.prototype.constructor = object;
+
+	if (name){
+		var family = name.toLowerCase();
+		object.prototype.$family = {name: family};
+		Native.typize(object, family);
+	}
+
+	var add = function(obj, name, method, force){
+		if (!protect || force || !obj.prototype[name]) obj.prototype[name] = method;
+		if (generics) Native.genericize(obj, name, protect);
+		afterImplement.call(obj, name, method);
+		return obj;
+	};
+
+	object.alias = function(a1, a2, a3){
+		if (typeof a1 == 'string'){
+			var pa1 = this.prototype[a1];
+			if ((a1 = pa1)) return add(this, a2, a1, a3);
+		}
+		for (var a in a1) this.alias(a, a1[a], a2);
+		return this;
+	};
+
+	object.implement = function(a1, a2, a3){
+		if (typeof a1 == 'string') return add(this, a1, a2, a3);
+		for (var p in a1) add(this, p, a1[p], a2);
+		return this;
+	};
+
+	if (methods) object.implement(methods);
+
+	return object;
+};
+
+Native.genericize = function(object, property, check){
+	if ((!check || !object[property]) && typeof object.prototype[property] == 'function') object[property] = function(){
+		var args = Array.prototype.slice.call(arguments);
+		return object.prototype[property].apply(args.shift(), args);
+	};
+};
+
+Native.implement = function(objects, properties){
+	for (var i = 0, l = objects.length; i < l; i++) objects[i].implement(properties);
+};
+
+Native.typize = function(object, family){
+	if (!object.type) object.type = function(item){
+		return ($type(item) === family);
+	};
+};
+
+(function(){
+	var natives = {'Array': Array, 'Date': Date, 'Function': Function, 'Number': Number, 'RegExp': RegExp, 'String': String};
+	for (var n in natives) new Native({name: n, initialize: natives[n], protect: true});
+
+	var types = {'boolean': Boolean, 'native': Native, 'object': Object};
+	for (var t in types) Native.typize(types[t], t);
+
+	var generics = {
+		'Array': ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"],
+		'String': ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"]
+	};
+	for (var g in generics){
+		for (var i = generics[g].length; i--;) Native.genericize(natives[g], generics[g][i], true);
+	}
+})();
+
+var Hash = new Native({
+
+	name: 'Hash',
+
+	initialize: function(object){
+		if ($type(object) == 'hash') object = $unlink(object.getClean());
+		for (var key in object) this[key] = object[key];
+		return this;
+	}
+
+});
+
+Hash.implement({
+
+	forEach: function(fn, bind){
+		for (var key in this){
+			if (this.hasOwnProperty(key)) fn.call(bind, this[key], key, this);
+		}
+	},
+
+	getClean: function(){
+		var clean = {};
+		for (var key in this){
+			if (this.hasOwnProperty(key)) clean[key] = this[key];
+		}
+		return clean;
+	},
+
+	getLength: function(){
+		var length = 0;
+		for (var key in this){
+			if (this.hasOwnProperty(key)) length++;
+		}
+		return length;
+	}
+
+});
+
+Hash.alias('forEach', 'each');
+
+Array.implement({
+
+	forEach: function(fn, bind){
+		for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this);
+	}
+
+});
+
+Array.alias('forEach', 'each');
+
+function $A(iterable){
+	if (iterable.item){
+		var l = iterable.length, array = new Array(l);
+		while (l--) array[l] = iterable[l];
+		return array;
+	}
+	return Array.prototype.slice.call(iterable);
+};
+
+function $arguments(i){
+	return function(){
+		return arguments[i];
+	};
+};
+
+function $chk(obj){
+	return !!(obj || obj === 0);
+};
+
+function $clear(timer){
+	clearTimeout(timer);
+	clearInterval(timer);
+	return null;
+};
+
+function $defined(obj){
+	return (obj != undefined);
+};
+
+function $each(iterable, fn, bind){
+	var type = $type(iterable);
+	((type == 'arguments' || type == 'collection' || type == 'array') ? Array : Hash).each(iterable, fn, bind);
+};
+
+function $empty(){};
+
+function $extend(original, extended){
+	for (var key in (extended || {})) original[key] = extended[key];
+	return original;
+};
+
+function $H(object){
+	return new Hash(object);
+};
+
+function $lambda(value){
+	return ($type(value) == 'function') ? value : function(){
+		return value;
+	};
+};
+
+function $merge(){
+	var args = Array.slice(arguments);
+	args.unshift({});
+	return $mixin.apply(null, args);
+};
+
+function $mixin(mix){
+	for (var i = 1, l = arguments.length; i < l; i++){
+		var object = arguments[i];
+		if ($type(object) != 'object') continue;
+		for (var key in object){
+			var op = object[key], mp = mix[key];
+			mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $mixin(mp, op) : $unlink(op);
+		}
+	}
+	return mix;
+};
+
+function $pick(){
+	for (var i = 0, l = arguments.length; i < l; i++){
+		if (arguments[i] != undefined) return arguments[i];
+	}
+	return null;
+};
+
+function $random(min, max){
+	return Math.floor(Math.random() * (max - min + 1) + min);
+};
+
+function $splat(obj){
+	var type = $type(obj);
+	return (type) ? ((type != 'array' && type != 'arguments') ? [obj] : obj) : [];
+};
+
+var $time = Date.now || function(){
+	return +new Date;
+};
+
+function $try(){
+	for (var i = 0, l = arguments.length; i < l; i++){
+		try {
+			return arguments[i]();
+		} catch(e){}
+	}
+	return null;
+};
+
+function $type(obj){
+	if (obj == undefined) return false;
+	if (obj.$family) return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name;
+	if (obj.nodeName){
+		switch (obj.nodeType){
+			case 1: return 'element';
+			case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
+		}
+	} else if (typeof obj.length == 'number'){
+		if (obj.callee) return 'arguments';
+		else if (obj.item) return 'collection';
+	}
+	return typeof obj;
+};
+
+function $unlink(object){
+	var unlinked;
+	switch ($type(object)){
+		case 'object':
+			unlinked = {};
+			for (var p in object) unlinked[p] = $unlink(object[p]);
+		break;
+		case 'hash':
+			unlinked = new Hash(object);
+		break;
+		case 'array':
+			unlinked = [];
+			for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
+		break;
+		default: return object;
+	}
+	return unlinked;
+};
+
+
+/*
+---
+
+script: Browser.js
+
+description: The Browser Core. Contains Browser initialization, Window and Document, and the Browser Hash.
+
+license: MIT-style license.
+
+requires: 
+- /Native
+- /$util
+
+provides: [Browser, Window, Document, $exec]
+
+...
+*/
+
+var Browser = $merge({
+
+	Engine: {name: 'unknown', version: 0},
+
+	Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},
+
+	Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},
+
+	Plugins: {},
+
+	Engines: {
+
+		presto: function(){
+			return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
+		},
+
+		trident: function(){
+			return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4);
+		},
+
+		webkit: function(){
+			return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
+		},
+
+		gecko: function(){
+			return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18);
+		}
+
+	}
+
+}, Browser || {});
+
+Browser.Platform[Browser.Platform.name] = true;
+
+Browser.detect = function(){
+
+	for (var engine in this.Engines){
+		var version = this.Engines[engine]();
+		if (version){
+			this.Engine = {name: engine, version: version};
+			this.Engine[engine] = this.Engine[engine + version] = true;
+			break;
+		}
+	}
+
+	return {name: engine, version: version};
+
+};
+
+Browser.detect();
+
+Browser.Request = function(){
+	return $try(function(){
+		return new XMLHttpRequest();
+	}, function(){
+		return new ActiveXObject('MSXML2.XMLHTTP');
+	}, function(){
+		return new ActiveXObject('Microsoft.XMLHTTP');
+	});
+};
+
+Browser.Features.xhr = !!(Browser.Request());
+
+Browser.Plugins.Flash = (function(){
+	var version = ($try(function(){
+		return navigator.plugins['Shockwave Flash'].description;
+	}, function(){
+		return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
+	}) || '0 r0').match(/\d+/g);
+	return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0};
+})();
+
+function $exec(text){
+	if (!text) return text;
+	if (window.execScript){
+		window.execScript(text);
+	} else {
+		var script = document.createElement('script');
+		script.setAttribute('type', 'text/javascript');
+		script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
+		document.head.appendChild(script);
+		document.head.removeChild(script);
+	}
+	return text;
+};
+
+Native.UID = 1;
+
+var $uid = (Browser.Engine.trident) ? function(item){
+	return (item.uid || (item.uid = [Native.UID++]))[0];
+} : function(item){
+	return item.uid || (item.uid = Native.UID++);
+};
+
+var Window = new Native({
+
+	name: 'Window',
+
+	legacy: (Browser.Engine.trident) ? null: window.Window,
+
+	initialize: function(win){
+		$uid(win);
+		if (!win.Element){
+			win.Element = $empty;
+			if (Browser.Engine.webkit) win.document.createElement("iframe"); //fixes safari 2
+			win.Element.prototype = (Browser.Engine.webkit) ? window["[[DOMElement.prototype]]"] : {};
+		}
+		win.document.window = win;
+		return $extend(win, Window.Prototype);
+	},
+
+	afterImplement: function(property, value){
+		window[property] = Window.Prototype[property] = value;
+	}
+
+});
+
+Window.Prototype = {$family: {name: 'window'}};
+
+new Window(window);
+
+var Document = new Native({
+
+	name: 'Document',
+
+	legacy: (Browser.Engine.trident) ? null: window.Document,
+
+	initialize: function(doc){
+		$uid(doc);
+		doc.head = doc.getElementsByTagName('head')[0];
+		doc.html = doc.getElementsByTagName('html')[0];
+		if (Browser.Engine.trident && Browser.Engine.version <= 4) $try(function(){
+			doc.execCommand("BackgroundImageCache", false, true);
+		});
+		if (Browser.Engine.trident) doc.window.attachEvent('onunload', function(){
+			doc.window.detachEvent('onunload', arguments.callee);
+			doc.head = doc.html = doc.window = null;
+		});
+		return $extend(doc, Document.Prototype);
+	},
+
+	afterImplement: function(property, value){
+		document[property] = Document.Prototype[property] = value;
+	}
+
+});
+
+Document.Prototype = {$family: {name: 'document'}};
+
+new Document(document);
+
+
+/*
+---
+
+script: Array.js
+
+description: Contains Array Prototypes like each, contains, and erase.
+
+license: MIT-style license.
+
+requires:
+- /$util
+- /Array.each
+
+provides: [Array]
+
+...
+*/
+
+Array.implement({
+
+	every: function(fn, bind){
+		for (var i = 0, l = this.length; i < l; i++){
+			if (!fn.call(bind, this[i], i, this)) return false;
+		}
+		return true;
+	},
+
+	filter: function(fn, bind){
+		var results = [];
+		for (var i = 0, l = this.length; i < l; i++){
+			if (fn.call(bind, this[i], i, this)) results.push(this[i]);
+		}
+		return results;
+	},
+
+	clean: function(){
+		return this.filter($defined);
+	},
+
+	indexOf: function(item, from){
+		var len = this.length;
+		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
+			if (this[i] === item) return i;
+		}
+		return -1;
+	},
+
+	map: function(fn, bind){
+		var results = [];
+		for (var i = 0, l = this.length; i < l; i++) results[i] = fn.call(bind, this[i], i, this);
+		return results;
+	},
+
+	some: function(fn, bind){
+		for (var i = 0, l = this.length; i < l; i++){
+			if (fn.call(bind, this[i], i, this)) return true;
+		}
+		return false;
+	},
+
+	associate: function(keys){
+		var obj = {}, length = Math.min(this.length, keys.length);
+		for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
+		return obj;
+	},
+
+	link: function(object){
+		var result = {};
+		for (var i = 0, l = this.length; i < l; i++){
+			for (var key in object){
+				if (object[key](this[i])){
+					result[key] = this[i];
+					delete object[key];
+					break;
+				}
+			}
+		}
+		return result;
+	},
+
+	contains: function(item, from){
+		return this.indexOf(item, from) != -1;
+	},
+
+	extend: function(array){
+		for (var i = 0, j = array.length; i < j; i++) this.push(array[i]);
+		return this;
+	},
+	
+	getLast: function(){
+		return (this.length) ? this[this.length - 1] : null;
+	},
+
+	getRandom: function(){
+		return (this.length) ? this[$random(0, this.length - 1)] : null;
+	},
+
+	include: function(item){
+		if (!this.contains(item)) this.push(item);
+		return this;
+	},
+
+	combine: function(array){
+		for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
+		return this;
+	},
+
+	erase: function(item){
+		for (var i = this.length; i--; i){
+			if (this[i] === item) this.splice(i, 1);
+		}
+		return this;
+	},
+
+	empty: function(){
+		this.length = 0;
+		return this;
+	},
+
+	flatten: function(){
+		var array = [];
+		for (var i = 0, l = this.length; i < l; i++){
+			var type = $type(this[i]);
+			if (!type) continue;
+			array = array.concat((type == 'array' || type == 'collection' || type == 'arguments') ? Array.flatten(this[i]) : this[i]);
+		}
+		return array;
+	},
+
+	hexToRgb: function(array){
+		if (this.length != 3) return null;
+		var rgb = this.map(function(value){
+			if (value.length == 1) value += value;
+			return value.toInt(16);
+		});
+		return (array) ? rgb : 'rgb(' + rgb + ')';
+	},
+
+	rgbToHex: function(array){
+		if (this.length < 3) return null;
+		if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
+		var hex = [];
+		for (var i = 0; i < 3; i++){
+			var bit = (this[i] - 0).toString(16);
+			hex.push((bit.length == 1) ? '0' + bit : bit);
+		}
+		return (array) ? hex : '#' + hex.join('');
+	}
+
+});
+
+
+/*
+---
+
+script: Function.js
+
+description: Contains Function Prototypes like create, bind, pass, and delay.
+
+license: MIT-style license.
+
+requires:
+- /Native
+- /$util
+
+provides: [Function]
+
+...
+*/
+
+Function.implement({
+
+	extend: function(properties){
+		for (var property in properties) this[property] = properties[property];
+		return this;
+	},
+
+	create: function(options){
+		var self = this;
+		options = options || {};
+		return function(event){
+			var args = options.arguments;
+			args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0);
+			if (options.event) args = [event || window.event].extend(args);
+			var returns = function(){
+				return self.apply(options.bind || null, args);
+			};
+			if (options.delay) return setTimeout(returns, options.delay);
+			if (options.periodical) return setInterval(returns, options.periodical);
+			if (options.attempt) return $try(returns);
+			return returns();
+		};
+	},
+
+	run: function(args, bind){
+		return this.apply(bind, $splat(args));
+	},
+
+	pass: function(args, bind){
+		return this.create({bind: bind, arguments: args});
+	},
+
+	bind: function(bind, args){
+		return this.create({bind: bind, arguments: args});
+	},
+
+	bindWithEvent: function(bind, args){
+		return this.create({bind: bind, arguments: args, event: true});
+	},
+
+	attempt: function(args, bind){
+		return this.create({bind: bind, arguments: args, attempt: true})();
+	},
+
+	delay: function(delay, bind, args){
+		return this.create({bind: bind, arguments: args, delay: delay})();
+	},
+
+	periodical: function(periodical, bind, args){
+		return this.create({bind: bind, arguments: args, periodical: periodical})();
+	}
+
+});
+
+
+/*
+---
+
+script: Number.js
+
+description: Contains Number Prototypes like limit, round, times, and ceil.
+
+license: MIT-style license.
+
+requires:
+- /Native
+- /$util
+
+provides: [Number]
+
+...
+*/
+
+Number.implement({
+
+	limit: function(min, max){
+		return Math.min(max, Math.max(min, this));
+	},
+
+	round: function(precision){
+		precision = Math.pow(10, precision || 0);
+		return Math.round(this * precision) / precision;
+	},
+
+	times: function(fn, bind){
+		for (var i = 0; i < this; i++) fn.call(bind, i, this);
+	},
+
+	toFloat: function(){
+		return parseFloat(this);
+	},
+
+	toInt: function(base){
+		return parseInt(this, base || 10);
+	}
+
+});
+
+Number.alias('times', 'each');
+
+(function(math){
+	var methods = {};
+	math.each(function(name){
+		if (!Number[name]) methods[name] = function(){
+			return Math[name].apply(null, [this].concat($A(arguments)));
+		};
+	});
+	Number.implement(methods);
+})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);
+
+
+/*
+---
+
+script: String.js
+
+description: Contains String Prototypes like camelCase, capitalize, test, and toInt.
+
+license: MIT-style license.
+
+requires:
+- /Native
+
+provides: [String]
+
+...
+*/
+
+String.implement({
+
+	test: function(regex, params){
+		return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this);
+	},
+
+	contains: function(string, separator){
+		return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
+	},
+
+	trim: function(){
+		return this.replace(/^\s+|\s+$/g, '');
+	},
+
+	clean: function(){
+		return this.replace(/\s+/g, ' ').trim();
+	},
+
+	camelCase: function(){
+		return this.replace(/-\D/g, function(match){
+			return match.charAt(1).toUpperCase();
+		});
+	},
+
+	hyphenate: function(){
+		return this.replace(/[A-Z]/g, function(match){
+			return ('-' + match.charAt(0).toLowerCase());
+		});
+	},
+
+	capitalize: function(){
+		return this.replace(/\b[a-z]/g, function(match){
+			return match.toUpperCase();
+		});
+	},
+
+	escapeRegExp: function(){
+		return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
+	},
+
+	toInt: function(base){
+		return parseInt(this, base || 10);
+	},
+
+	toFloat: function(){
+		return parseFloat(this);
+	},
+
+	hexToRgb: function(array){
+		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
+		return (hex) ? hex.slice(1).hexToRgb(array) : null;
+	},
+
+	rgbToHex: function(array){
+		var rgb = this.match(/\d{1,3}/g);
+		return (rgb) ? rgb.rgbToHex(array) : null;
+	},
+
+	stripScripts: function(option){
+		var scripts = '';
+		var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
+			scripts += arguments[1] + '\n';
+			return '';
+		});
+		if (option === true) $exec(scripts);
+		else if ($type(option) == 'function') option(scripts, text);
+		return text;
+	},
+
+	substitute: function(object, regexp){
+		return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
+			if (match.charAt(0) == '\\') return match.slice(1);
+			return (object[name] != undefined) ? object[name] : '';
+		});
+	}
+
+});
+
+
+/*
+---
+
+script: Hash.js
+
+description: Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects.
+
+license: MIT-style license.
+
+requires:
+- /Hash.base
+
+provides: [Hash]
+
+...
+*/
+
+Hash.implement({
+
+	has: Object.prototype.hasOwnProperty,
+
+	keyOf: function(value){
+		for (var key in this){
+			if (this.hasOwnProperty(key) && this[key] === value) return key;
+		}
+		return null;
+	},
+
+	hasValue: function(value){
+		return (Hash.keyOf(this, value) !== null);
+	},
+
+	extend: function(properties){
+		Hash.each(properties || {}, function(value, key){
+			Hash.set(this, key, value);
+		}, this);
+		return this;
+	},
+
+	combine: function(properties){
+		Hash.each(properties || {}, function(value, key){
+			Hash.include(this, key, value);
+		}, this);
+		return this;
+	},
+
+	erase: function(key){
+		if (this.hasOwnProperty(key)) delete this[key];
+		return this;
+	},
+
+	get: function(key){
+		return (this.hasOwnProperty(key)) ? this[key] : null;
+	},
+
+	set: function(key, value){
+		if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
+		return this;
+	},
+
+	empty: function(){
+		Hash.each(this, function(value, key){
+			delete this[key];
+		}, this);
+		return this;
+	},
+
+	include: function(key, value){
+		if (this[key] == undefined) this[key] = value;
+		return this;
+	},
+
+	map: function(fn, bind){
+		var results = new Hash;
+		Hash.each(this, function(value, key){
+			results.set(key, fn.call(bind, value, key, this));
+		}, this);
+		return results;
+	},
+
+	filter: function(fn, bind){
+		var results = new Hash;
+		Hash.each(this, function(value, key){
+			if (fn.call(bind, value, key, this)) results.set(key, value);
+		}, this);
+		return results;
+	},
+
+	every: function(fn, bind){
+		for (var key in this){
+			if (this.hasOwnProperty(key) && !fn.call(bind, this[key], key)) return false;
+		}
+		return true;
+	},
+
+	some: function(fn, bind){
+		for (var key in this){
+			if (this.hasOwnProperty(key) && fn.call(bind, this[key], key)) return true;
+		}
+		return false;
+	},
+
+	getKeys: function(){
+		var keys = [];
+		Hash.each(this, function(value, key){
+			keys.push(key);
+		});
+		return keys;
+	},
+
+	getValues: function(){
+		var values = [];
+		Hash.each(this, function(value){
+			values.push(value);
+		});
+		return values;
+	},
+
+	toQueryString: function(base){
+		var queryString = [];
+		Hash.each(this, function(value, key){
+			if (base) key = base + '[' + key + ']';
+			var result;
+			switch ($type(value)){
+				case 'object': result = Hash.toQueryString(value, key); break;
+				case 'array':
+					var qs = {};
+					value.each(function(val, i){
+						qs[i] = val;
+					});
+					result = Hash.toQueryString(qs, key);
+				break;
+				default: result = key + '=' + encodeURIComponent(value);
+			}
+			if (value != undefined) queryString.push(result);
+		});
+
+		return queryString.join('&');
+	}
+
+});
+
+Hash.alias({keyOf: 'indexOf', hasValue: 'contains'});
+
+
+/*
+---
+
+script: Event.js
+
+description: Contains the Event Class, to make the event object cross-browser.
+
+license: MIT-style license.
+
+requires:
+- /Window
+- /Document
+- /Hash
+- /Array
+- /Function
+- /String
+
+provides: [Event]
+
+...
+*/
+
+var Event = new Native({
+
+	name: 'Event',
+
+	initialize: function(event, win){
+		win = win || window;
+		var doc = win.document;
+		event = event || win.event;
+		if (event.$extended) return event;
+		this.$extended = true;
+		var type = event.type;
+		var target = event.target || event.srcElement;
+		while (target && target.nodeType == 3) target = target.parentNode;
+
+		if (type.test(/key/)){
+			var code = event.which || event.keyCode;
+			var key = Event.Keys.keyOf(code);
+			if (type == 'keydown'){
+				var fKey = code - 111;
+				if (fKey > 0 && fKey < 13) key = 'f' + fKey;
+			}
+			key = key || String.fromCharCode(code).toLowerCase();
+		} else if (type.match(/(click|mouse|menu)/i)){
+			doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
+			var page = {
+				x: event.pageX || event.clientX + doc.scrollLeft,
+				y: event.pageY || event.clientY + doc.scrollTop
+			};
+			var client = {
+				x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX,
+				y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY
+			};
+			if (type.match(/DOMMouseScroll|mousewheel/)){
+				var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
+			}
+			var rightClick = (event.which == 3) || (event.button == 2);
+			var related = null;
+			if (type.match(/over|out/)){
+				switch (type){
+					case 'mouseover': related = event.relatedTarget || event.fromElement; break;
+					case 'mouseout': related = event.relatedTarget || event.toElement;
+				}
+				if (!(function(){
+					while (related && related.nodeType == 3) related = related.parentNode;
+					return true;
+				}).create({attempt: Browser.Engine.gecko})()) related = false;
+			}
+		}
+
+		return $extend(this, {
+			event: event,
+			type: type,
+
+			page: page,
+			client: client,
+			rightClick: rightClick,
+
+			wheel: wheel,
+
+			relatedTarget: related,
+			target: target,
+
+			code: code,
+			key: key,
+
+			shift: event.shiftKey,
+			control: event.ctrlKey,
+			alt: event.altKey,
+			meta: event.metaKey
+		});
+	}
+
+});
+
+Event.Keys = new Hash({
+	'enter': 13,
+	'up': 38,
+	'down': 40,
+	'left': 37,
+	'right': 39,
+	'esc': 27,
+	'space': 32,
+	'backspace': 8,
+	'tab': 9,
+	'delete': 46
+});
+
+Event.implement({
+
+	stop: function(){
+		return this.stopPropagation().preventDefault();
+	},
+
+	stopPropagation: function(){
+		if (this.event.stopPropagation) this.event.stopPropagation();
+		else this.event.cancelBubble = true;
+		return this;
+	},
+
+	preventDefault: function(){
+		if (this.event.preventDefault) this.event.preventDefault();
+		else this.event.returnValue = false;
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+script: Class.js
+
+description: Contains the Class Function for easily creating, extending, and implementing reusable Classes.
+
+license: MIT-style license.
+
+requires:
+- /$util
+- /Native
+- /Array
+- /String
+- /Function
+- /Number
+- /Hash
+
+provides: [Class]
+
+...
+*/
+
+function Class(params){
+	
+	if (params instanceof Function) params = {initialize: params};
+	
+	var newClass = function(){
+		Object.reset(this);
+		if (newClass._prototyping) return this;
+		this._current = $empty;
+		var value = (this.initialize) ? this.initialize.apply(this, arguments) : this;
+		delete this._current; delete this.caller;
+		return value;
+	}.extend(this);
+	
+	newClass.implement(params);
+	
+	newClass.constructor = Class;
+	newClass.prototype.constructor = newClass;
+
+	return newClass;
+
+};
+
+Function.prototype.protect = function(){
+	this._protected = true;
+	return this;
+};
+
+Object.reset = function(object, key){
+		
+	if (key == null){
+		for (var p in object) Object.reset(object, p);
+		return object;
+	}
+	
+	delete object[key];
+	
+	switch ($type(object[key])){
+		case 'object':
+			var F = function(){};
+			F.prototype = object[key];
+			var i = new F;
+			object[key] = Object.reset(i);
+		break;
+		case 'array': object[key] = $unlink(object[key]); break;
+	}
+	
+	return object;
+	
+};
+
+new Native({name: 'Class', initialize: Class}).extend({
+
+	instantiate: function(F){
+		F._prototyping = true;
+		var proto = new F;
+		delete F._prototyping;
+		return proto;
+	},
+	
+	wrap: function(self, key, method){
+		if (method._origin) method = method._origin;
+		
+		return function(){
+			if (method._protected && this._current == null) throw new Error('The method "' + key + '" cannot be called.');
+			var caller = this.caller, current = this._current;
+			this.caller = current; this._current = arguments.callee;
+			var result = method.apply(this, arguments);
+			this._current = current; this.caller = caller;
+			return result;
+		}.extend({_owner: self, _origin: method, _name: key});
+
+	}
+	
+});
+
+Class.implement({
+	
+	implement: function(key, value){
+		
+		if ($type(key) == 'object'){
+			for (var p in key) this.implement(p, key[p]);
+			return this;
+		}
+		
+		var mutator = Class.Mutators[key];
+		
+		if (mutator){
+			value = mutator.call(this, value);
+			if (value == null) return this;
+		}
+		
+		var proto = this.prototype;
+
+		switch ($type(value)){
+			
+			case 'function':
+				if (value._hidden) return this;
+				proto[key] = Class.wrap(this, key, value);
+			break;
+			
+			case 'object':
+				var previous = proto[key];
+				if ($type(previous) == 'object') $mixin(previous, value);
+				else proto[key] = $unlink(value);
+			break;
+			
+			case 'array':
+				proto[key] = $unlink(value);
+			break;
+			
+			default: proto[key] = value;
+
+		}
+		
+		return this;
+
+	}
+	
+});
+
+Class.Mutators = {
+	
+	Extends: function(parent){
+
+		this.parent = parent;
+		this.prototype = Class.instantiate(parent);
+
+		this.implement('parent', function(){
+			var name = this.caller._name, previous = this.caller._owner.parent.prototype[name];
+			if (!previous) throw new Error('The method "' + name + '" has no parent.');
+			return previous.apply(this, arguments);
+		}.protect());
+
+	},
+
+	Implements: function(items){
+		$splat(items).each(function(item){
+			if (item instanceof Function) item = Class.instantiate(item);
+			this.implement(item);
+		}, this);
+
+	}
+	
+};
+
+
+/*
+---
+
+script: Class.Extras.js
+
+description: Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.
+
+license: MIT-style license.
+
+requires:
+- /Class
+
+provides: [Chain, Events, Options]
+
+...
+*/
+
+var Chain = new Class({
+
+	$chain: [],
+
+	chain: function(){
+		this.$chain.extend(Array.flatten(arguments));
+		return this;
+	},
+
+	callChain: function(){
+		return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
+	},
+
+	clearChain: function(){
+		this.$chain.empty();
+		return this;
+	}
+
+});
+
+var Events = new Class({
+
+	$events: {},
+
+	addEvent: function(type, fn, internal){
+		type = Events.removeOn(type);
+		if (fn != $empty){
+			this.$events[type] = this.$events[type] || [];
+			this.$events[type].include(fn);
+			if (internal) fn.internal = true;
+		}
+		return this;
+	},
+
+	addEvents: function(events){
+		for (var type in events) this.addEvent(type, events[type]);
+		return this;
+	},
+
+	fireEvent: function(type, args, delay){
+		type = Events.removeOn(type);
+		if (!this.$events || !this.$events[type]) return this;
+		this.$events[type].each(function(fn){
+			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
+		}, this);
+		return this;
+	},
+
+	removeEvent: function(type, fn){
+		type = Events.removeOn(type);
+		if (!this.$events[type]) return this;
+		if (!fn.internal) this.$events[type].erase(fn);
+		return this;
+	},
+
+	removeEvents: function(events){
+		var type;
+		if ($type(events) == 'object'){
+			for (type in events) this.removeEvent(type, events[type]);
+			return this;
+		}
+		if (events) events = Events.removeOn(events);
+		for (type in this.$events){
+			if (events && events != type) continue;
+			var fns = this.$events[type];
+			for (var i = fns.length; i--; i) this.removeEvent(type, fns[i]);
+		}
+		return this;
+	}
+
+});
+
+Events.removeOn = function(string){
+	return string.replace(/^on([A-Z])/, function(full, first){
+		return first.toLowerCase();
+	});
+};
+
+var Options = new Class({
+
+	setOptions: function(){
+		this.options = $merge.run([this.options].extend(arguments));
+		if (!this.addEvent) return this;
+		for (var option in this.options){
+			if ($type(this.options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
+			this.addEvent(option, this.options[option]);
+			delete this.options[option];
+		}
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+script: Element.js
+
+description: One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser, time-saver methods to let you easily work with HTML Elements.
+
+license: MIT-style license.
+
+requires:
+- /Window
+- /Document
+- /Array
+- /String
+- /Function
+- /Number
+- /Hash
+
+provides: [Element, Elements, $, $$, Iframe]
+
+...
+*/
+
+var Element = new Native({
+
+	name: 'Element',
+
+	legacy: window.Element,
+
+	initialize: function(tag, props){
+		var konstructor = Element.Constructors.get(tag);
+		if (konstructor) return konstructor(props);
+		if (typeof tag == 'string') return document.newElement(tag, props);
+		return document.id(tag).set(props);
+	},
+
+	afterImplement: function(key, value){
+		Element.Prototype[key] = value;
+		if (Array[key]) return;
+		Elements.implement(key, function(){
+			var items = [], elements = true;
+			for (var i = 0, j = this.length; i < j; i++){
+				var returns = this[i][key].apply(this[i], arguments);
+				items.push(returns);
+				if (elements) elements = ($type(returns) == 'element');
+			}
+			return (elements) ? new Elements(items) : items;
+		});
+	}
+
+});
+
+Element.Prototype = {$family: {name: 'element'}};
+
+Element.Constructors = new Hash;
+
+var IFrame = new Native({
+
+	name: 'IFrame',
+
+	generics: false,
+
+	initialize: function(){
+		var params = Array.link(arguments, {properties: Object.type, iframe: $defined});
+		var props = params.properties || {};
+		var iframe = document.id(params.iframe);
+		var onload = props.onload || $empty;
+		delete props.onload;
+		props.id = props.name = $pick(props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + $time());
+		iframe = new Element(iframe || 'iframe', props);
+		var onFrameLoad = function(){
+			var host = $try(function(){
+				return iframe.contentWindow.location.host;
+			});
+			if (!host || host == window.location.host){
+				var win = new Window(iframe.contentWindow);
+				new Document(iframe.contentWindow.document);
+				$extend(win.Element.prototype, Element.Prototype);
+			}
+			onload.call(iframe.contentWindow, iframe.contentWindow.document);
+		};
+		var contentWindow = $try(function(){
+			return iframe.contentWindow;
+		});
+		((contentWindow && contentWindow.document.body) || window.frames[props.id]) ? onFrameLoad() : iframe.addListener('load', onFrameLoad);
+		return iframe;
+	}
+
+});
+
+var Elements = new Native({
+
+	initialize: function(elements, options){
+		options = $extend({ddup: true, cash: true}, options);
+		elements = elements || [];
+		if (options.ddup || options.cash){
+			var uniques = {}, returned = [];
+			for (var i = 0, l = elements.length; i < l; i++){
+				var el = document.id(elements[i], !options.cash);
+				if (options.ddup){
+					if (uniques[el.uid]) continue;
+					uniques[el.uid] = true;
+				}
+				if (el) returned.push(el);
+			}
+			elements = returned;
+		}
+		return (options.cash) ? $extend(elements, this) : elements;
+	}
+
+});
+
+Elements.implement({
+
+	filter: function(filter, bind){
+		if (!filter) return this;
+		return new Elements(Array.filter(this, (typeof filter == 'string') ? function(item){
+			return item.match(filter);
+		} : filter, bind));
+	}
+
+});
+
+Document.implement({
+
+	newElement: function(tag, props){
+		if (Browser.Engine.trident && props){
+			['name', 'type', 'checked'].each(function(attribute){
+				if (!props[attribute]) return;
+				tag += ' ' + attribute + '="' + props[attribute] + '"';
+				if (attribute != 'checked') delete props[attribute];
+			});
+			tag = '<' + tag + '>';
+		}
+		return document.id(this.createElement(tag)).set(props);
+	},
+
+	newTextNode: function(text){
+		return this.createTextNode(text);
+	},
+
+	getDocument: function(){
+		return this;
+	},
+
+	getWindow: function(){
+		return this.window;
+	},
+	
+	id: (function(){
+		
+		var types = {
+
+			string: function(id, nocash, doc){
+				id = doc.getElementById(id);
+				return (id) ? types.element(id, nocash) : null;
+			},
+			
+			element: function(el, nocash){
+				$uid(el);
+				if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){
+					var proto = Element.Prototype;
+					for (var p in proto) el[p] = proto[p];
+				};
+				return el;
+			},
+			
+			object: function(obj, nocash, doc){
+				if (obj.toElement) return types.element(obj.toElement(doc), nocash);
+				return null;
+			}
+			
+		};
+
+		types.textnode = types.whitespace = types.window = types.document = $arguments(0);
+		
+		return function(el, nocash, doc){
+			if (el && el.$family && el.uid) return el;
+			var type = $type(el);
+			return (types[type]) ? types[type](el, nocash, doc || document) : null;
+		};
+
+	})()
+
+});
+
+if (window.$ == null) Window.implement({
+	$: function(el, nc){
+		return document.id(el, nc, this.document);
+	}
+});
+
+Window.implement({
+
+	$$: function(selector){
+		if (arguments.length == 1 && typeof selector == 'string') return this.document.getElements(selector);
+		var elements = [];
+		var args = Array.flatten(arguments);
+		for (var i = 0, l = args.length; i < l; i++){
+			var item = args[i];
+			switch ($type(item)){
+				case 'element': elements.push(item); break;
+				case 'string': elements.extend(this.document.getElements(item, true));
+			}
+		}
+		return new Elements(elements);
+	},
+
+	getDocument: function(){
+		return this.document;
+	},
+
+	getWindow: function(){
+		return this;
+	}
+
+});
+
+Native.implement([Element, Document], {
+
+	getElement: function(selector, nocash){
+		return document.id(this.getElements(selector, true)[0] || null, nocash);
+	},
+
+	getElements: function(tags, nocash){
+		tags = tags.split(',');
+		var elements = [];
+		var ddup = (tags.length > 1);
+		tags.each(function(tag){
+			var partial = this.getElementsByTagName(tag.trim());
+			(ddup) ? elements.extend(partial) : elements = partial;
+		}, this);
+		return new Elements(elements, {ddup: ddup, cash: !nocash});
+	}
+
+});
+
+(function(){
+
+var collected = {}, storage = {};
+var props = {input: 'checked', option: 'selected', textarea: (Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerHTML' : 'value'};
+
+var get = function(uid){
+	return (storage[uid] || (storage[uid] = {}));
+};
+
+var clean = function(item, retain){
+	if (!item) return;
+	var uid = item.uid;
+	if (Browser.Engine.trident){
+		if (item.clearAttributes){
+			var clone = retain && item.cloneNode(false);
+			item.clearAttributes();
+			if (clone) item.mergeAttributes(clone);
+		} else if (item.removeEvents){
+			item.removeEvents();
+		}
+		if ((/object/i).test(item.tagName)){
+			for (var p in item){
+				if (typeof item[p] == 'function') item[p] = $empty;
+			}
+			Element.dispose(item);
+		}
+	}	
+	if (!uid) return;
+	collected[uid] = storage[uid] = null;
+};
+
+var purge = function(){
+	Hash.each(collected, clean);
+	if (Browser.Engine.trident) $A(document.getElementsByTagName('object')).each(clean);
+	if (window.CollectGarbage) CollectGarbage();
+	collected = storage = null;
+};
+
+var walk = function(element, walk, start, match, all, nocash){
+	var el = element[start || walk];
+	var elements = [];
+	while (el){
+		if (el.nodeType == 1 && (!match || Element.match(el, match))){
+			if (!all) return document.id(el, nocash);
+			elements.push(el);
+		}
+		el = el[walk];
+	}
+	return (all) ? new Elements(elements, {ddup: false, cash: !nocash}) : null;
+};
+
+var attributes = {
+	'html': 'innerHTML',
+	'class': 'className',
+	'for': 'htmlFor',
+	'defaultValue': 'defaultValue',
+	'text': (Browser.Engine.trident || (Browser.Engine.webkit && Browser.Engine.version < 420)) ? 'innerText' : 'textContent'
+};
+var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
+var camels = ['value', 'type', 'defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', 'rowSpan', 'tabIndex', 'useMap'];
+
+bools = bools.associate(bools);
+
+Hash.extend(attributes, bools);
+Hash.extend(attributes, camels.associate(camels.map(String.toLowerCase)));
+
+var inserters = {
+
+	before: function(context, element){
+		if (element.parentNode) element.parentNode.insertBefore(context, element);
+	},
+
+	after: function(context, element){
+		if (!element.parentNode) return;
+		var next = element.nextSibling;
+		(next) ? element.parentNode.insertBefore(context, next) : element.parentNode.appendChild(context);
+	},
+
+	bottom: function(context, element){
+		element.appendChild(context);
+	},
+
+	top: function(context, element){
+		var first = element.firstChild;
+		(first) ? element.insertBefore(context, first) : element.appendChild(context);
+	}
+
+};
+
+inserters.inside = inserters.bottom;
+
+Hash.each(inserters, function(inserter, where){
+
+	where = where.capitalize();
+
+	Element.implement('inject' + where, function(el){
+		inserter(this, document.id(el, true));
+		return this;
+	});
+
+	Element.implement('grab' + where, function(el){
+		inserter(document.id(el, true), this);
+		return this;
+	});
+
+});
+
+Element.implement({
+
+	set: function(prop, value){
+		switch ($type(prop)){
+			case 'object':
+				for (var p in prop) this.set(p, prop[p]);
+				break;
+			case 'string':
+				var property = Element.Properties.get(prop);
+				(property && property.set) ? property.set.apply(this, Array.slice(arguments, 1)) : this.setProperty(prop, value);
+		}
+		return this;
+	},
+
+	get: function(prop){
+		var property = Element.Properties.get(prop);
+		return (property && property.get) ? property.get.apply(this, Array.slice(arguments, 1)) : this.getProperty(prop);
+	},
+
+	erase: function(prop){
+		var property = Element.Properties.get(prop);
+		(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
+		return this;
+	},
+
+	setProperty: function(attribute, value){
+		var key = attributes[attribute];
+		if (value == undefined) return this.removeProperty(attribute);
+		if (key && bools[attribute]) value = !!value;
+		(key) ? this[key] = value : this.setAttribute(attribute, '' + value);
+		return this;
+	},
+
+	setProperties: function(attributes){
+		for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
+		return this;
+	},
+
+	getProperty: function(attribute){
+		var key = attributes[attribute];
+		var value = (key) ? this[key] : this.getAttribute(attribute, 2);
+		return (bools[attribute]) ? !!value : (key) ? value : value || null;
+	},
+
+	getProperties: function(){
+		var args = $A(arguments);
+		return args.map(this.getProperty, this).associate(args);
+	},
+
+	removeProperty: function(attribute){
+		var key = attributes[attribute];
+		(key) ? this[key] = (key && bools[attribute]) ? false : '' : this.removeAttribute(attribute);
+		return this;
+	},
+
+	removeProperties: function(){
+		Array.each(arguments, this.removeProperty, this);
+		return this;
+	},
+
+	hasClass: function(className){
+		return this.className.contains(className, ' ');
+	},
+
+	addClass: function(className){
+		if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
+		return this;
+	},
+
+	removeClass: function(className){
+		this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
+		return this;
+	},
+
+	toggleClass: function(className){
+		return this.hasClass(className) ? this.removeClass(className) : this.addClass(className);
+	},
+
+	adopt: function(){
+		Array.flatten(arguments).each(function(element){
+			element = document.id(element, true);
+			if (element) this.appendChild(element);
+		}, this);
+		return this;
+	},
+
+	appendText: function(text, where){
+		return this.grab(this.getDocument().newTextNode(text), where);
+	},
+
+	grab: function(el, where){
+		inserters[where || 'bottom'](document.id(el, true), this);
+		return this;
+	},
+
+	inject: function(el, where){
+		inserters[where || 'bottom'](this, document.id(el, true));
+		return this;
+	},
+
+	replaces: function(el){
+		el = document.id(el, true);
+		el.parentNode.replaceChild(this, el);
+		return this;
+	},
+
+	wraps: function(el, where){
+		el = document.id(el, true);
+		return this.replaces(el).grab(el, where);
+	},
+
+	getPrevious: function(match, nocash){
+		return walk(this, 'previousSibling', null, match, false, nocash);
+	},
+
+	getAllPrevious: function(match, nocash){
+		return walk(this, 'previousSibling', null, match, true, nocash);
+	},
+
+	getNext: function(match, nocash){
+		return walk(this, 'nextSibling', null, match, false, nocash);
+	},
+
+	getAllNext: function(match, nocash){
+		return walk(this, 'nextSibling', null, match, true, nocash);
+	},
+
+	getFirst: function(match, nocash){
+		return walk(this, 'nextSibling', 'firstChild', match, false, nocash);
+	},
+
+	getLast: function(match, nocash){
+		return walk(this, 'previousSibling', 'lastChild', match, false, nocash);
+	},
+
+	getParent: function(match, nocash){
+		return walk(this, 'parentNode', null, match, false, nocash);
+	},
+
+	getParents: function(match, nocash){
+		return walk(this, 'parentNode', null, match, true, nocash);
+	},
+	
+	getSiblings: function(match, nocash){
+		return this.getParent().getChildren(match, nocash).erase(this);
+	},
+
+	getChildren: function(match, nocash){
+		return walk(this, 'nextSibling', 'firstChild', match, true, nocash);
+	},
+
+	getWindow: function(){
+		return this.ownerDocument.window;
+	},
+
+	getDocument: function(){
+		return this.ownerDocument;
+	},
+
+	getElementById: function(id, nocash){
+		var el = this.ownerDocument.getElementById(id);
+		if (!el) return null;
+		for (var parent = el.parentNode; parent != this; parent = parent.parentNode){
+			if (!parent) return null;
+		}
+		return document.id(el, nocash);
+	},
+
+	getSelected: function(){
+		return new Elements($A(this.options).filter(function(option){
+			return option.selected;
+		}));
+	},
+
+	getComputedStyle: function(property){
+		if (this.currentStyle) return this.currentStyle[property.camelCase()];
+		var computed = this.getDocument().defaultView.getComputedStyle(this, null);
+		return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null;
+	},
+
+	toQueryString: function(){
+		var queryString = [];
+		this.getElements('input, select, textarea', true).each(function(el){
+			if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
+			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
+				return opt.value;
+			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
+			$splat(value).each(function(val){
+				if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
+			});
+		});
+		return queryString.join('&');
+	},
+
+	clone: function(contents, keepid){
+		contents = contents !== false;
+		var clone = this.cloneNode(contents);
+		var clean = function(node, element){
+			if (!keepid) node.removeAttribute('id');
+			if (Browser.Engine.trident){
+				node.clearAttributes();
+				node.mergeAttributes(element);
+				node.removeAttribute('uid');
+				if (node.options){
+					var no = node.options, eo = element.options;
+					for (var j = no.length; j--;) no[j].selected = eo[j].selected;
+				}
+			}
+			var prop = props[element.tagName.toLowerCase()];
+			if (prop && element[prop]) node[prop] = element[prop];
+		};
+
+		if (contents){
+			var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
+			for (var i = ce.length; i--;) clean(ce[i], te[i]);
+		}
+
+		clean(clone, this);
+		return document.id(clone);
+	},
+
+	destroy: function(){
+		Element.empty(this);
+		Element.dispose(this);
+		clean(this, true);
+		return null;
+	},
+
+	empty: function(){
+		$A(this.childNodes).each(function(node){
+			Element.destroy(node);
+		});
+		return this;
+	},
+
+	dispose: function(){
+		return (this.parentNode) ? this.parentNode.removeChild(this) : this;
+	},
+
+	hasChild: function(el){
+		el = document.id(el, true);
+		if (!el) return false;
+		if (Browser.Engine.webkit && Browser.Engine.version < 420) return $A(this.getElementsByTagName(el.tagName)).contains(el);
+		return (this.contains) ? (this != el && this.contains(el)) : !!(this.compareDocumentPosition(el) & 16);
+	},
+
+	match: function(tag){
+		return (!tag || (tag == this) || (Element.get(this, 'tag') == tag));
+	}
+
+});
+
+Native.implement([Element, Window, Document], {
+
+	addListener: function(type, fn){
+		if (type == 'unload'){
+			var old = fn, self = this;
+			fn = function(){
+				self.removeListener('unload', fn);
+				old();
+			};
+		} else {
+			collected[this.uid] = this;
+		}
+		if (this.addEventListener) this.addEventListener(type, fn, false);
+		else this.attachEvent('on' + type, fn);
+		return this;
+	},
+
+	removeListener: function(type, fn){
+		if (this.removeEventListener) this.removeEventListener(type, fn, false);
+		else this.detachEvent('on' + type, fn);
+		return this;
+	},
+
+	retrieve: function(property, dflt){
+		var storage = get(this.uid), prop = storage[property];
+		if (dflt != undefined && prop == undefined) prop = storage[property] = dflt;
+		return $pick(prop);
+	},
+
+	store: function(property, value){
+		var storage = get(this.uid);
+		storage[property] = value;
+		return this;
+	},
+
+	eliminate: function(property){
+		var storage = get(this.uid);
+		delete storage[property];
+		return this;
+	}
+
+});
+
+window.addListener('unload', purge);
+
+})();
+
+Element.Properties = new Hash;
+
+Element.Properties.style = {
+
+	set: function(style){
+		this.style.cssText = style;
+	},
+
+	get: function(){
+		return this.style.cssText;
+	},
+
+	erase: function(){
+		this.style.cssText = '';
+	}
+
+};
+
+Element.Properties.tag = {
+
+	get: function(){
+		return this.tagName.toLowerCase();
+	}
+
+};
+
+Element.Properties.html = (function(){
+	var wrapper = document.createElement('div');
+
+	var translations = {
+		table: [1, '<table>', '</table>'],
+		select: [1, '<select>', '</select>'],
+		tbody: [2, '<table><tbody>', '</tbody></table>'],
+		tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
+	};
+	translations.thead = translations.tfoot = translations.tbody;
+
+	var html = {
+		set: function(){
+			var html = Array.flatten(arguments).join('');
+			var wrap = Browser.Engine.trident && translations[this.get('tag')];
+			if (wrap){
+				var first = wrapper;
+				first.innerHTML = wrap[1] + html + wrap[2];
+				for (var i = wrap[0]; i--;) first = first.firstChild;
+				this.empty().adopt(first.childNodes);
+			} else {
+				this.innerHTML = html;
+			}
+		}
+	};
+
+	html.erase = html.set;
+
+	return html;
+})();
+
+if (Browser.Engine.webkit && Browser.Engine.version < 420) Element.Properties.text = {
+	get: function(){
+		if (this.innerText) return this.innerText;
+		var temp = this.ownerDocument.newElement('div', {html: this.innerHTML}).inject(this.ownerDocument.body);
+		var text = temp.innerText;
+		temp.destroy();
+		return text;
+	}
+};
+
+
+/*
+---
+
+script: Element.Event.js
+
+description: Contains Element methods for dealing with events. This file also includes mouseenter and mouseleave custom Element Events.
+
+license: MIT-style license.
+
+requires: 
+- /Element
+- /Event
+
+provides: [Element.Event]
+
+...
+*/
+
+Element.Properties.events = {set: function(events){
+	this.addEvents(events);
+}};
+
+Native.implement([Element, Window, Document], {
+
+	addEvent: function(type, fn){
+		var events = this.retrieve('events', {});
+		events[type] = events[type] || {'keys': [], 'values': []};
+		if (events[type].keys.contains(fn)) return this;
+		events[type].keys.push(fn);
+		var realType = type, custom = Element.Events.get(type), condition = fn, self = this;
+		if (custom){
+			if (custom.onAdd) custom.onAdd.call(this, fn);
+			if (custom.condition){
+				condition = function(event){
+					if (custom.condition.call(this, event)) return fn.call(this, event);
+					return true;
+				};
+			}
+			realType = custom.base || realType;
+		}
+		var defn = function(){
+			return fn.call(self);
+		};
+		var nativeEvent = Element.NativeEvents[realType];
+		if (nativeEvent){
+			if (nativeEvent == 2){
+				defn = function(event){
+					event = new Event(event, self.getWindow());
+					if (condition.call(self, event) === false) event.stop();
+				};
+			}
+			this.addListener(realType, defn);
+		}
+		events[type].values.push(defn);
+		return this;
+	},
+
+	removeEvent: function(type, fn){
+		var events = this.retrieve('events');
+		if (!events || !events[type]) return this;
+		var pos = events[type].keys.indexOf(fn);
+		if (pos == -1) return this;
+		events[type].keys.splice(pos, 1);
+		var value = events[type].values.splice(pos, 1)[0];
+		var custom = Element.Events.get(type);
+		if (custom){
+			if (custom.onRemove) custom.onRemove.call(this, fn);
+			type = custom.base || type;
+		}
+		return (Element.NativeEvents[type]) ? this.removeListener(type, value) : this;
+	},
+
+	addEvents: function(events){
+		for (var event in events) this.addEvent(event, events[event]);
+		return this;
+	},
+
+	removeEvents: function(events){
+		var type;
+		if ($type(events) == 'object'){
+			for (type in events) this.removeEvent(type, events[type]);
+			return this;
+		}
+		var attached = this.retrieve('events');
+		if (!attached) return this;
+		if (!events){
+			for (type in attached) this.removeEvents(type);
+			this.eliminate('events');
+		} else if (attached[events]){
+			while (attached[events].keys[0]) this.removeEvent(events, attached[events].keys[0]);
+			attached[events] = null;
+		}
+		return this;
+	},
+
+	fireEvent: function(type, args, delay){
+		var events = this.retrieve('events');
+		if (!events || !events[type]) return this;
+		events[type].keys.each(function(fn){
+			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
+		}, this);
+		return this;
+	},
+
+	cloneEvents: function(from, type){
+		from = document.id(from);
+		var fevents = from.retrieve('events');
+		if (!fevents) return this;
+		if (!type){
+			for (var evType in fevents) this.cloneEvents(from, evType);
+		} else if (fevents[type]){
+			fevents[type].keys.each(function(fn){
+				this.addEvent(type, fn);
+			}, this);
+		}
+		return this;
+	}
+
+});
+
+Element.NativeEvents = {
+	click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
+	mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
+	mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
+	keydown: 2, keypress: 2, keyup: 2, //keyboard
+	focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
+	load: 1, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
+	error: 1, abort: 1, scroll: 1 //misc
+};
+
+(function(){
+
+var $check = function(event){
+	var related = event.relatedTarget;
+	if (related == undefined) return true;
+	if (related === false) return false;
+	return ($type(this) != 'document' && related != this && related.prefix != 'xul' && !this.hasChild(related));
+};
+
+Element.Events = new Hash({
+
+	mouseenter: {
+		base: 'mouseover',
+		condition: $check
+	},
+
+	mouseleave: {
+		base: 'mouseout',
+		condition: $check
+	},
+
+	mousewheel: {
+		base: (Browser.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel'
+	}
+
+});
+
+})();
+
+
+/*
+---
+
+script: Element.Style.js
+
+description: Contains methods for interacting with the styles of Elements in a fashionable way.
+
+license: MIT-style license.
+
+requires:
+- /Element
+
+provides: [Element.Style]
+
+...
+*/
+
+Element.Properties.styles = {set: function(styles){
+	this.setStyles(styles);
+}};
+
+Element.Properties.opacity = {
+
+	set: function(opacity, novisibility){
+		if (!novisibility){
+			if (opacity == 0){
+				if (this.style.visibility != 'hidden') this.style.visibility = 'hidden';
+			} else {
+				if (this.style.visibility != 'visible') this.style.visibility = 'visible';
+			}
+		}
+		if (!this.currentStyle || !this.currentStyle.hasLayout) this.style.zoom = 1;
+		if (Browser.Engine.trident) this.style.filter = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
+		this.style.opacity = opacity;
+		this.store('opacity', opacity);
+	},
+
+	get: function(){
+		return this.retrieve('opacity', 1);
+	}
+
+};
+
+Element.implement({
+
+	setOpacity: function(value){
+		return this.set('opacity', value, true);
+	},
+
+	getOpacity: function(){
+		return this.get('opacity');
+	},
+
+	setStyle: function(property, value){
+		switch (property){
+			case 'opacity': return this.set('opacity', parseFloat(value));
+			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
+		}
+		property = property.camelCase();
+		if ($type(value) != 'string'){
+			var map = (Element.Styles.get(property) || '@').split(' ');
+			value = $splat(value).map(function(val, i){
+				if (!map[i]) return '';
+				return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
+			}).join(' ');
+		} else if (value == String(Number(value))){
+			value = Math.round(value);
+		}
+		this.style[property] = value;
+		return this;
+	},
+
+	getStyle: function(property){
+		switch (property){
+			case 'opacity': return this.get('opacity');
+			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
+		}
+		property = property.camelCase();
+		var result = this.style[property];
+		if (!$chk(result)){
+			result = [];
+			for (var style in Element.ShortStyles){
+				if (property != style) continue;
+				for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
+				return result.join(' ');
+			}
+			result = this.getComputedStyle(property);
+		}
+		if (result){
+			result = String(result);
+			var color = result.match(/rgba?\([\d\s,]+\)/);
+			if (color) result = result.replace(color[0], color[0].rgbToHex());
+		}
+		if (Browser.Engine.presto || (Browser.Engine.trident && !$chk(parseInt(result, 10)))){
+			if (property.test(/^(height|width)$/)){
+				var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
+				values.each(function(value){
+					size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
+				}, this);
+				return this['offset' + property.capitalize()] - size + 'px';
+			}
+			if ((Browser.Engine.presto) && String(result).test('px')) return result;
+			if (property.test(/(border(.+)Width|margin|padding)/)) return '0px';
+		}
+		return result;
+	},
+
+	setStyles: function(styles){
+		for (var style in styles) this.setStyle(style, styles[style]);
+		return this;
+	},
+
+	getStyles: function(){
+		var result = {};
+		Array.flatten(arguments).each(function(key){
+			result[key] = this.getStyle(key);
+		}, this);
+		return result;
+	}
+
+});
+
+Element.Styles = new Hash({
+	left: '@px', top: '@px', bottom: '@px', right: '@px',
+	width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
+	backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
+	fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
+	margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
+	borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
+	zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
+});
+
+Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};
+
+['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
+	var Short = Element.ShortStyles;
+	var All = Element.Styles;
+	['margin', 'padding'].each(function(style){
+		var sd = style + direction;
+		Short[style][sd] = All[sd] = '@px';
+	});
+	var bd = 'border' + direction;
+	Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
+	var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
+	Short[bd] = {};
+	Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
+	Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
+	Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
+});
+
+
+/*
+---
+
+script: Element.Dimensions.js
+
+description: Contains methods to work with size, scroll, or positioning of Elements and the window object.
+
+license: MIT-style license.
+
+credits:
+- Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
+- Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).
+
+requires:
+- /Element
+
+provides: [Element.Dimensions]
+
+...
+*/
+
+(function(){
+
+Element.implement({
+
+	scrollTo: function(x, y){
+		if (isBody(this)){
+			this.getWindow().scrollTo(x, y);
+		} else {
+			this.scrollLeft = x;
+			this.scrollTop = y;
+		}
+		return this;
+	},
+
+	getSize: function(){
+		if (isBody(this)) return this.getWindow().getSize();
+		return {x: this.offsetWidth, y: this.offsetHeight};
+	},
+
+	getScrollSize: function(){
+		if (isBody(this)) return this.getWindow().getScrollSize();
+		return {x: this.scrollWidth, y: this.scrollHeight};
+	},
+
+	getScroll: function(){
+		if (isBody(this)) return this.getWindow().getScroll();
+		return {x: this.scrollLeft, y: this.scrollTop};
+	},
+
+	getScrolls: function(){
+		var element = this, position = {x: 0, y: 0};
+		while (element && !isBody(element)){
+			position.x += element.scrollLeft;
+			position.y += element.scrollTop;
+			element = element.parentNode;
+		}
+		return position;
+	},
+
+	getOffsetParent: function(){
+		var element = this;
+		if (isBody(element)) return null;
+		if (!Browser.Engine.trident) return element.offsetParent;
+		while ((element = element.parentNode) && !isBody(element)){
+			if (styleString(element, 'position') != 'static') return element;
+		}
+		return null;
+	},
+
+	getOffsets: function(){
+		if (this.getBoundingClientRect){
+			var bound = this.getBoundingClientRect(),
+				html = document.id(this.getDocument().documentElement),
+				htmlScroll = html.getScroll(),
+				elemScrolls = this.getScrolls(),
+				elemScroll = this.getScroll(),
+				isFixed = (styleString(this, 'position') == 'fixed');
+
+			return {
+				x: bound.left.toInt() + elemScrolls.x - elemScroll.x + ((isFixed) ? 0 : htmlScroll.x) - html.clientLeft,
+				y: bound.top.toInt()  + elemScrolls.y - elemScroll.y + ((isFixed) ? 0 : htmlScroll.y) - html.clientTop
+			};
+		}
+
+		var element = this, position = {x: 0, y: 0};
+		if (isBody(this)) return position;
+
+		while (element && !isBody(element)){
+			position.x += element.offsetLeft;
+			position.y += element.offsetTop;
+
+			if (Browser.Engine.gecko){
+				if (!borderBox(element)){
+					position.x += leftBorder(element);
+					position.y += topBorder(element);
+				}
+				var parent = element.parentNode;
+				if (parent && styleString(parent, 'overflow') != 'visible'){
+					position.x += leftBorder(parent);
+					position.y += topBorder(parent);
+				}
+			} else if (element != this && Browser.Engine.webkit){
+				position.x += leftBorder(element);
+				position.y += topBorder(element);
+			}
+
+			element = element.offsetParent;
+		}
+		if (Browser.Engine.gecko && !borderBox(this)){
+			position.x -= leftBorder(this);
+			position.y -= topBorder(this);
+		}
+		return position;
+	},
+
+	getPosition: function(relative){
+		if (isBody(this)) return {x: 0, y: 0};
+		var offset = this.getOffsets(),
+				scroll = this.getScrolls();
+		var position = {
+			x: offset.x - scroll.x,
+			y: offset.y - scroll.y
+		};
+		var relativePosition = (relative && (relative = document.id(relative))) ? relative.getPosition() : {x: 0, y: 0};
+		return {x: position.x - relativePosition.x, y: position.y - relativePosition.y};
+	},
+
+	getCoordinates: function(element){
+		if (isBody(this)) return this.getWindow().getCoordinates();
+		var position = this.getPosition(element),
+				size = this.getSize();
+		var obj = {
+			left: position.x,
+			top: position.y,
+			width: size.x,
+			height: size.y
+		};
+		obj.right = obj.left + obj.width;
+		obj.bottom = obj.top + obj.height;
+		return obj;
+	},
+
+	computePosition: function(obj){
+		return {
+			left: obj.x - styleNumber(this, 'margin-left'),
+			top: obj.y - styleNumber(this, 'margin-top')
+		};
+	},
+
+	setPosition: function(obj){
+		return this.setStyles(this.computePosition(obj));
+	}
+
+});
+
+
+Native.implement([Document, Window], {
+
+	getSize: function(){
+		if (Browser.Engine.presto || Browser.Engine.webkit){
+			var win = this.getWindow();
+			return {x: win.innerWidth, y: win.innerHeight};
+		}
+		var doc = getCompatElement(this);
+		return {x: doc.clientWidth, y: doc.clientHeight};
+	},
+
+	getScroll: function(){
+		var win = this.getWindow(), doc = getCompatElement(this);
+		return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
+	},
+
+	getScrollSize: function(){
+		var doc = getCompatElement(this), min = this.getSize();
+		return {x: Math.max(doc.scrollWidth, min.x), y: Math.max(doc.scrollHeight, min.y)};
+	},
+
+	getPosition: function(){
+		return {x: 0, y: 0};
+	},
+
+	getCoordinates: function(){
+		var size = this.getSize();
+		return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
+	}
+
+});
+
+// private methods
+
+var styleString = Element.getComputedStyle;
+
+function styleNumber(element, style){
+	return styleString(element, style).toInt() || 0;
+};
+
+function borderBox(element){
+	return styleString(element, '-moz-box-sizing') == 'border-box';
+};
+
+function topBorder(element){
+	return styleNumber(element, 'border-top-width');
+};
+
+function leftBorder(element){
+	return styleNumber(element, 'border-left-width');
+};
+
+function isBody(element){
+	return (/^(?:body|html)$/i).test(element.tagName);
+};
+
+function getCompatElement(element){
+	var doc = element.getDocument();
+	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
+};
+
+})();
+
+//aliases
+Element.alias('setPosition', 'position'); //compatability
+
+Native.implement([Window, Document, Element], {
+
+	getHeight: function(){
+		return this.getSize().y;
+	},
+
+	getWidth: function(){
+		return this.getSize().x;
+	},
+
+	getScrollTop: function(){
+		return this.getScroll().y;
+	},
+
+	getScrollLeft: function(){
+		return this.getScroll().x;
+	},
+
+	getScrollHeight: function(){
+		return this.getScrollSize().y;
+	},
+
+	getScrollWidth: function(){
+		return this.getScrollSize().x;
+	},
+
+	getTop: function(){
+		return this.getPosition().y;
+	},
+
+	getLeft: function(){
+		return this.getPosition().x;
+	}
+
+});
+
+
+/*
+---
+
+script: Selectors.js
+
+description: Adds advanced CSS-style querying capabilities for targeting HTML Elements. Includes pseudo selectors.
+
+license: MIT-style license.
+
+requires:
+- /Element
+
+provides: [Selectors]
+
+...
+*/
+
+Native.implement([Document, Element], {
+
+	getElements: function(expression, nocash){
+		expression = expression.split(',');
+		var items, local = {};
+		for (var i = 0, l = expression.length; i < l; i++){
+			var selector = expression[i], elements = Selectors.Utils.search(this, selector, local);
+			if (i != 0 && elements.item) elements = $A(elements);
+			items = (i == 0) ? elements : (items.item) ? $A(items).concat(elements) : items.concat(elements);
+		}
+		return new Elements(items, {ddup: (expression.length > 1), cash: !nocash});
+	}
+
+});
+
+Element.implement({
+
+	match: function(selector){
+		if (!selector || (selector == this)) return true;
+		var tagid = Selectors.Utils.parseTagAndID(selector);
+		var tag = tagid[0], id = tagid[1];
+		if (!Selectors.Filters.byID(this, id) || !Selectors.Filters.byTag(this, tag)) return false;
+		var parsed = Selectors.Utils.parseSelector(selector);
+		return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true;
+	}
+
+});
+
+var Selectors = {Cache: {nth: {}, parsed: {}}};
+
+Selectors.RegExps = {
+	id: (/#([\w-]+)/),
+	tag: (/^(\w+|\*)/),
+	quick: (/^(\w+|\*)$/),
+	splitter: (/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),
+	combined: (/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)
+};
+
+Selectors.Utils = {
+
+	chk: function(item, uniques){
+		if (!uniques) return true;
+		var uid = $uid(item);
+		if (!uniques[uid]) return uniques[uid] = true;
+		return false;
+	},
+
+	parseNthArgument: function(argument){
+		if (Selectors.Cache.nth[argument]) return Selectors.Cache.nth[argument];
+		var parsed = argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);
+		if (!parsed) return false;
+		var inta = parseInt(parsed[1], 10);
+		var a = (inta || inta === 0) ? inta : 1;
+		var special = parsed[2] || false;
+		var b = parseInt(parsed[3], 10) || 0;
+		if (a != 0){
+			b--;
+			while (b < 1) b += a;
+			while (b >= a) b -= a;
+		} else {
+			a = b;
+			special = 'index';
+		}
+		switch (special){
+			case 'n': parsed = {a: a, b: b, special: 'n'}; break;
+			case 'odd': parsed = {a: 2, b: 0, special: 'n'}; break;
+			case 'even': parsed = {a: 2, b: 1, special: 'n'}; break;
+			case 'first': parsed = {a: 0, special: 'index'}; break;
+			case 'last': parsed = {special: 'last-child'}; break;
+			case 'only': parsed = {special: 'only-child'}; break;
+			default: parsed = {a: (a - 1), special: 'index'};
+		}
+
+		return Selectors.Cache.nth[argument] = parsed;
+	},
+
+	parseSelector: function(selector){
+		if (Selectors.Cache.parsed[selector]) return Selectors.Cache.parsed[selector];
+		var m, parsed = {classes: [], pseudos: [], attributes: []};
+		while ((m = Selectors.RegExps.combined.exec(selector))){
+			var cn = m[1], an = m[2], ao = m[3], av = m[5], pn = m[6], pa = m[7];
+			if (cn){
+				parsed.classes.push(cn);
+			} else if (pn){
+				var parser = Selectors.Pseudo.get(pn);
+				if (parser) parsed.pseudos.push({parser: parser, argument: pa});
+				else parsed.attributes.push({name: pn, operator: '=', value: pa});
+			} else if (an){
+				parsed.attributes.push({name: an, operator: ao, value: av});
+			}
+		}
+		if (!parsed.classes.length) delete parsed.classes;
+		if (!parsed.attributes.length) delete parsed.attributes;
+		if (!parsed.pseudos.length) delete parsed.pseudos;
+		if (!parsed.classes && !parsed.attributes && !parsed.pseudos) parsed = null;
+		return Selectors.Cache.parsed[selector] = parsed;
+	},
+
+	parseTagAndID: function(selector){
+		var tag = selector.match(Selectors.RegExps.tag);
+		var id = selector.match(Selectors.RegExps.id);
+		return [(tag) ? tag[1] : '*', (id) ? id[1] : false];
+	},
+
+	filter: function(item, parsed, local){
+		var i;
+		if (parsed.classes){
+			for (i = parsed.classes.length; i--; i){
+				var cn = parsed.classes[i];
+				if (!Selectors.Filters.byClass(item, cn)) return false;
+			}
+		}
+		if (parsed.attributes){
+			for (i = parsed.attributes.length; i--; i){
+				var att = parsed.attributes[i];
+				if (!Selectors.Filters.byAttribute(item, att.name, att.operator, att.value)) return false;
+			}
+		}
+		if (parsed.pseudos){
+			for (i = parsed.pseudos.length; i--; i){
+				var psd = parsed.pseudos[i];
+				if (!Selectors.Filters.byPseudo(item, psd.parser, psd.argument, local)) return false;
+			}
+		}
+		return true;
+	},
+
+	getByTagAndID: function(ctx, tag, id){
+		if (id){
+			var item = (ctx.getElementById) ? ctx.getElementById(id, true) : Element.getElementById(ctx, id, true);
+			return (item && Selectors.Filters.byTag(item, tag)) ? [item] : [];
+		} else {
+			return ctx.getElementsByTagName(tag);
+		}
+	},
+
+	search: function(self, expression, local){
+		var splitters = [];
+
+		var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){
+			splitters.push(m1);
+			return ':)' + m2;
+		}).split(':)');
+
+		var items, filtered, item;
+
+		for (var i = 0, l = selectors.length; i < l; i++){
+
+			var selector = selectors[i];
+
+			if (i == 0 && Selectors.RegExps.quick.test(selector)){
+				items = self.getElementsByTagName(selector);
+				continue;
+			}
+
+			var splitter = splitters[i - 1];
+
+			var tagid = Selectors.Utils.parseTagAndID(selector);
+			var tag = tagid[0], id = tagid[1];
+
+			if (i == 0){
+				items = Selectors.Utils.getByTagAndID(self, tag, id);
+			} else {
+				var uniques = {}, found = [];
+				for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques);
+				items = found;
+			}
+
+			var parsed = Selectors.Utils.parseSelector(selector);
+
+			if (parsed){
+				filtered = [];
+				for (var m = 0, n = items.length; m < n; m++){
+					item = items[m];
+					if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item);
+				}
+				items = filtered;
+			}
+
+		}
+
+		return items;
+
+	}
+
+};
+
+Selectors.Getters = {
+
+	' ': function(found, self, tag, id, uniques){
+		var items = Selectors.Utils.getByTagAndID(self, tag, id);
+		for (var i = 0, l = items.length; i < l; i++){
+			var item = items[i];
+			if (Selectors.Utils.chk(item, uniques)) found.push(item);
+		}
+		return found;
+	},
+
+	'>': function(found, self, tag, id, uniques){
+		var children = Selectors.Utils.getByTagAndID(self, tag, id);
+		for (var i = 0, l = children.length; i < l; i++){
+			var child = children[i];
+			if (child.parentNode == self && Selectors.Utils.chk(child, uniques)) found.push(child);
+		}
+		return found;
+	},
+
+	'+': function(found, self, tag, id, uniques){
+		while ((self = self.nextSibling)){
+			if (self.nodeType == 1){
+				if (Selectors.Utils.chk(self, uniques) && Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
+				break;
+			}
+		}
+		return found;
+	},
+
+	'~': function(found, self, tag, id, uniques){
+		while ((self = self.nextSibling)){
+			if (self.nodeType == 1){
+				if (!Selectors.Utils.chk(self, uniques)) break;
+				if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
+			}
+		}
+		return found;
+	}
+
+};
+
+Selectors.Filters = {
+
+	byTag: function(self, tag){
+		return (tag == '*' || (self.tagName && self.tagName.toLowerCase() == tag));
+	},
+
+	byID: function(self, id){
+		return (!id || (self.id && self.id == id));
+	},
+
+	byClass: function(self, klass){
+		return (self.className && self.className.contains && self.className.contains(klass, ' '));
+	},
+
+	byPseudo: function(self, parser, argument, local){
+		return parser.call(self, argument, local);
+	},
+
+	byAttribute: function(self, name, operator, value){
+		var result = Element.prototype.getProperty.call(self, name);
+		if (!result) return (operator == '!=');
+		if (!operator || value == undefined) return true;
+		switch (operator){
+			case '=': return (result == value);
+			case '*=': return (result.contains(value));
+			case '^=': return (result.substr(0, value.length) == value);
+			case '$=': return (result.substr(result.length - value.length) == value);
+			case '!=': return (result != value);
+			case '~=': return result.contains(value, ' ');
+			case '|=': return result.contains(value, '-');
+		}
+		return false;
+	}
+
+};
+
+Selectors.Pseudo = new Hash({
+
+	// w3c pseudo selectors
+
+	checked: function(){
+		return this.checked;
+	},
+	
+	empty: function(){
+		return !(this.innerText || this.textContent || '').length;
+	},
+
+	not: function(selector){
+		return !Element.match(this, selector);
+	},
+
+	contains: function(text){
+		return (this.innerText || this.textContent || '').contains(text);
+	},
+
+	'first-child': function(){
+		return Selectors.Pseudo.index.call(this, 0);
+	},
+
+	'last-child': function(){
+		var element = this;
+		while ((element = element.nextSibling)){
+			if (element.nodeType == 1) return false;
+		}
+		return true;
+	},
+
+	'only-child': function(){
+		var prev = this;
+		while ((prev = prev.previousSibling)){
+			if (prev.nodeType == 1) return false;
+		}
+		var next = this;
+		while ((next = next.nextSibling)){
+			if (next.nodeType == 1) return false;
+		}
+		return true;
+	},
+
+	'nth-child': function(argument, local){
+		argument = (argument == undefined) ? 'n' : argument;
+		var parsed = Selectors.Utils.parseNthArgument(argument);
+		if (parsed.special != 'n') return Selectors.Pseudo[parsed.special].call(this, parsed.a, local);
+		var count = 0;
+		local.positions = local.positions || {};
+		var uid = $uid(this);
+		if (!local.positions[uid]){
+			var self = this;
+			while ((self = self.previousSibling)){
+				if (self.nodeType != 1) continue;
+				count ++;
+				var position = local.positions[$uid(self)];
+				if (position != undefined){
+					count = position + count;
+					break;
+				}
+			}
+			local.positions[uid] = count;
+		}
+		return (local.positions[uid] % parsed.a == parsed.b);
+	},
+
+	// custom pseudo selectors
+
+	index: function(index){
+		var element = this, count = 0;
+		while ((element = element.previousSibling)){
+			if (element.nodeType == 1 && ++count > index) return false;
+		}
+		return (count == index);
+	},
+
+	even: function(argument, local){
+		return Selectors.Pseudo['nth-child'].call(this, '2n+1', local);
+	},
+
+	odd: function(argument, local){
+		return Selectors.Pseudo['nth-child'].call(this, '2n', local);
+	},
+	
+	selected: function(){
+		return this.selected;
+	},
+	
+	enabled: function(){
+		return (this.disabled === false);
+	}
+
+});
+
+
+/*
+---
+
+script: DomReady.js
+
+description: Contains the custom event domready.
+
+license: MIT-style license.
+
+requires:
+- /Element.Event
+
+provides: [DomReady]
+
+...
+*/
+
+Element.Events.domready = {
+
+	onAdd: function(fn){
+		if (Browser.loaded) fn.call(this);
+	}
+
+};
+
+(function(){
+
+	var domready = function(){
+		if (Browser.loaded) return;
+		Browser.loaded = true;
+		window.fireEvent('domready');
+		document.fireEvent('domready');
+	};
+	
+	window.addEvent('load', domready);
+
+	if (Browser.Engine.trident){
+		var temp = document.createElement('div');
+		(function(){
+			($try(function(){
+				temp.doScroll(); // Technique by Diego Perini
+				return document.id(temp).inject(document.body).set('html', 'temp').dispose();
+			})) ? domready() : arguments.callee.delay(50);
+		})();
+	} else if (Browser.Engine.webkit && Browser.Engine.version < 525){
+		(function(){
+			(['loaded', 'complete'].contains(document.readyState)) ? domready() : arguments.callee.delay(50);
+		})();
+	} else {
+		document.addEvent('DOMContentLoaded', domready);
+	}
+
+})();
+
+
+/*
+---
+
+script: JSON.js
+
+description: JSON encoder and decoder.
+
+license: MIT-style license.
+
+See Also: <http://www.json.org/>
+
+requires:
+- /Array
+- /String
+- /Number
+- /Function
+- /Hash
+
+provides: [JSON]
+
+...
+*/
+
+var JSON = new Hash(this.JSON && {
+	stringify: JSON.stringify,
+	parse: JSON.parse
+}).extend({
+	
+	$specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},
+
+	$replaceChars: function(chr){
+		return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
+	},
+
+	encode: function(obj){
+		switch ($type(obj)){
+			case 'string':
+				return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"';
+			case 'array':
+				return '[' + String(obj.map(JSON.encode).clean()) + ']';
+			case 'object': case 'hash':
+				var string = [];
+				Hash.each(obj, function(value, key){
+					var json = JSON.encode(value);
+					if (json) string.push(JSON.encode(key) + ':' + json);
+				});
+				return '{' + string + '}';
+			case 'number': case 'boolean': return String(obj);
+			case false: return 'null';
+		}
+		return null;
+	},
+
+	decode: function(string, secure){
+		if ($type(string) != 'string' || !string.length) return null;
+		if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
+		return eval('(' + string + ')');
+	}
+
+});
+
+Native.implement([Hash, Array, String, Number], {
+
+	toJSON: function(){
+		return JSON.encode(this);
+	}
+
+});
+
+
+/*
+---
+
+script: Cookie.js
+
+description: Class for creating, reading, and deleting browser Cookies.
+
+license: MIT-style license.
+
+credits:
+- Based on the functions by Peter-Paul Koch (http://quirksmode.org).
+
+requires:
+- /Options
+
+provides: [Cookie]
+
+...
+*/
+
+var Cookie = new Class({
+
+	Implements: Options,
+
+	options: {
+		path: false,
+		domain: false,
+		duration: false,
+		secure: false,
+		document: document
+	},
+
+	initialize: function(key, options){
+		this.key = key;
+		this.setOptions(options);
+	},
+
+	write: function(value){
+		value = encodeURIComponent(value);
+		if (this.options.domain) value += '; domain=' + this.options.domain;
+		if (this.options.path) value += '; path=' + this.options.path;
+		if (this.options.duration){
+			var date = new Date();
+			date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
+			value += '; expires=' + date.toGMTString();
+		}
+		if (this.options.secure) value += '; secure';
+		this.options.document.cookie = this.key + '=' + value;
+		return this;
+	},
+
+	read: function(){
+		var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
+		return (value) ? decodeURIComponent(value[1]) : null;
+	},
+
+	dispose: function(){
+		new Cookie(this.key, $merge(this.options, {duration: -1})).write('');
+		return this;
+	}
+
+});
+
+Cookie.write = function(key, value, options){
+	return new Cookie(key, options).write(value);
+};
+
+Cookie.read = function(key){
+	return new Cookie(key).read();
+};
+
+Cookie.dispose = function(key, options){
+	return new Cookie(key, options).dispose();
+};
+
+
+/*
+---
+
+script: Swiff.js
+
+description: Wrapper for embedding SWF movies. Supports External Interface Communication.
+
+license: MIT-style license.
+
+credits: 
+- Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.
+
+requires:
+- /Options
+- /$util
+
+provides: [Swiff]
+
+...
+*/
+
+var Swiff = new Class({
+
+	Implements: [Options],
+
+	options: {
+		id: null,
+		height: 1,
+		width: 1,
+		container: null,
+		properties: {},
+		params: {
+			quality: 'high',
+			allowScriptAccess: 'always',
+			wMode: 'transparent',
+			swLiveConnect: true
+		},
+		callBacks: {},
+		vars: {}
+	},
+
+	toElement: function(){
+		return this.object;
+	},
+
+	initialize: function(path, options){
+		this.instance = 'Swiff_' + $time();
+
+		this.setOptions(options);
+		options = this.options;
+		var id = this.id = options.id || this.instance;
+		var container = document.id(options.container);
+
+		Swiff.CallBacks[this.instance] = {};
+
+		var params = options.params, vars = options.vars, callBacks = options.callBacks;
+		var properties = $extend({height: options.height, width: options.width}, options.properties);
+
+		var self = this;
+
+		for (var callBack in callBacks){
+			Swiff.CallBacks[this.instance][callBack] = (function(option){
+				return function(){
+					return option.apply(self.object, arguments);
+				};
+			})(callBacks[callBack]);
+			vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
+		}
+
+		params.flashVars = Hash.toQueryString(vars);
+		if (Browser.Engine.trident){
+			properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
+			params.movie = path;
+		} else {
+			properties.type = 'application/x-shockwave-flash';
+			properties.data = path;
+		}
+		var build = '<object id="' + id + '"';
+		for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
+		build += '>';
+		for (var param in params){
+			if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
+		}
+		build += '</object>';
+		this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
+	},
+
+	replaces: function(element){
+		element = document.id(element, true);
+		element.parentNode.replaceChild(this.toElement(), element);
+		return this;
+	},
+
+	inject: function(element){
+		document.id(element, true).appendChild(this.toElement());
+		return this;
+	},
+
+	remote: function(){
+		return Swiff.remote.apply(Swiff, [this.toElement()].extend(arguments));
+	}
+
+});
+
+Swiff.CallBacks = {};
+
+Swiff.remote = function(obj, fn){
+	var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
+	return eval(rs);
+};
+
+
+/*
+---
+
+script: Fx.js
+
+description: Contains the basic animation logic to be extended by all other Fx Classes.
+
+license: MIT-style license.
+
+requires:
+- /Chain
+- /Events
+- /Options
+
+provides: [Fx]
+
+...
+*/
+
+var Fx = new Class({
+
+	Implements: [Chain, Events, Options],
+
+	options: {
+		/*
+		onStart: $empty,
+		onCancel: $empty,
+		onComplete: $empty,
+		*/
+		fps: 50,
+		unit: false,
+		duration: 500,
+		link: 'ignore'
+	},
+
+	initialize: function(options){
+		this.subject = this.subject || this;
+		this.setOptions(options);
+		this.options.duration = Fx.Durations[this.options.duration] || this.options.duration.toInt();
+		var wait = this.options.wait;
+		if (wait === false) this.options.link = 'cancel';
+	},
+
+	getTransition: function(){
+		return function(p){
+			return -(Math.cos(Math.PI * p) - 1) / 2;
+		};
+	},
+
+	step: function(){
+		var time = $time();
+		if (time < this.time + this.options.duration){
+			var delta = this.transition((time - this.time) / this.options.duration);
+			this.set(this.compute(this.from, this.to, delta));
+		} else {
+			this.set(this.compute(this.from, this.to, 1));
+			this.complete();
+		}
+	},
+
+	set: function(now){
+		return now;
+	},
+
+	compute: function(from, to, delta){
+		return Fx.compute(from, to, delta);
+	},
+
+	check: function(){
+		if (!this.timer) return true;
+		switch (this.options.link){
+			case 'cancel': this.cancel(); return true;
+			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
+		}
+		return false;
+	},
+
+	start: function(from, to){
+		if (!this.check(from, to)) return this;
+		this.from = from;
+		this.to = to;
+		this.time = 0;
+		this.transition = this.getTransition();
+		this.startTimer();
+		this.onStart();
+		return this;
+	},
+
+	complete: function(){
+		if (this.stopTimer()) this.onComplete();
+		return this;
+	},
+
+	cancel: function(){
+		if (this.stopTimer()) this.onCancel();
+		return this;
+	},
+
+	onStart: function(){
+		this.fireEvent('start', this.subject);
+	},
+
+	onComplete: function(){
+		this.fireEvent('complete', this.subject);
+		if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
+	},
+
+	onCancel: function(){
+		this.fireEvent('cancel', this.subject).clearChain();
+	},
+
+	pause: function(){
+		this.stopTimer();
+		return this;
+	},
+
+	resume: function(){
+		this.startTimer();
+		return this;
+	},
+
+	stopTimer: function(){
+		if (!this.timer) return false;
+		this.time = $time() - this.time;
+		this.timer = $clear(this.timer);
+		return true;
+	},
+
+	startTimer: function(){
+		if (this.timer) return false;
+		this.time = $time() - this.time;
+		this.timer = this.step.periodical(Math.round(1000 / this.options.fps), this);
+		return true;
+	}
+
+});
+
+Fx.compute = function(from, to, delta){
+	return (to - from) * delta + from;
+};
+
+Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};
+
+
+/*
+---
+
+script: Fx.CSS.js
+
+description: Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.
+
+license: MIT-style license.
+
+requires:
+- /Fx
+- /Element.Style
+
+provides: [Fx.CSS]
+
+...
+*/
+
+Fx.CSS = new Class({
+
+	Extends: Fx,
+
+	//prepares the base from/to object
+
+	prepare: function(element, property, values){
+		values = $splat(values);
+		var values1 = values[1];
+		if (!$chk(values1)){
+			values[1] = values[0];
+			values[0] = element.getStyle(property);
+		}
+		var parsed = values.map(this.parse);
+		return {from: parsed[0], to: parsed[1]};
+	},
+
+	//parses a value into an array
+
+	parse: function(value){
+		value = $lambda(value)();
+		value = (typeof value == 'string') ? value.split(' ') : $splat(value);
+		return value.map(function(val){
+			val = String(val);
+			var found = false;
+			Fx.CSS.Parsers.each(function(parser, key){
+				if (found) return;
+				var parsed = parser.parse(val);
+				if ($chk(parsed)) found = {value: parsed, parser: parser};
+			});
+			found = found || {value: val, parser: Fx.CSS.Parsers.String};
+			return found;
+		});
+	},
+
+	//computes by a from and to prepared objects, using their parsers.
+
+	compute: function(from, to, delta){
+		var computed = [];
+		(Math.min(from.length, to.length)).times(function(i){
+			computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
+		});
+		computed.$family = {name: 'fx:css:value'};
+		return computed;
+	},
+
+	//serves the value as settable
+
+	serve: function(value, unit){
+		if ($type(value) != 'fx:css:value') value = this.parse(value);
+		var returned = [];
+		value.each(function(bit){
+			returned = returned.concat(bit.parser.serve(bit.value, unit));
+		});
+		return returned;
+	},
+
+	//renders the change to an element
+
+	render: function(element, property, value, unit){
+		element.setStyle(property, this.serve(value, unit));
+	},
+
+	//searches inside the page css to find the values for a selector
+
+	search: function(selector){
+		if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
+		var to = {};
+		Array.each(document.styleSheets, function(sheet, j){
+			var href = sheet.href;
+			if (href && href.contains('://') && !href.contains(document.domain)) return;
+			var rules = sheet.rules || sheet.cssRules;
+			Array.each(rules, function(rule, i){
+				if (!rule.style) return;
+				var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
+					return m.toLowerCase();
+				}) : null;
+				if (!selectorText || !selectorText.test('^' + selector + '$')) return;
+				Element.Styles.each(function(value, style){
+					if (!rule.style[style] || Element.ShortStyles[style]) return;
+					value = String(rule.style[style]);
+					to[style] = (value.test(/^rgb/)) ? value.rgbToHex() : value;
+				});
+			});
+		});
+		return Fx.CSS.Cache[selector] = to;
+	}
+
+});
+
+Fx.CSS.Cache = {};
+
+Fx.CSS.Parsers = new Hash({
+
+	Color: {
+		parse: function(value){
+			if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
+			return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
+		},
+		compute: function(from, to, delta){
+			return from.map(function(value, i){
+				return Math.round(Fx.compute(from[i], to[i], delta));
+			});
+		},
+		serve: function(value){
+			return value.map(Number);
+		}
+	},
+
+	Number: {
+		parse: parseFloat,
+		compute: Fx.compute,
+		serve: function(value, unit){
+			return (unit) ? value + unit : value;
+		}
+	},
+
+	String: {
+		parse: $lambda(false),
+		compute: $arguments(1),
+		serve: $arguments(0)
+	}
+
+});
+
+
+/*
+---
+
+script: Fx.Tween.js
+
+description: Formerly Fx.Style, effect to transition any CSS property for an element.
+
+license: MIT-style license.
+
+requires: 
+- /Fx.CSS
+
+provides: [Fx.Tween, Element.fade, Element.highlight]
+
+...
+*/
+
+Fx.Tween = new Class({
+
+	Extends: Fx.CSS,
+
+	initialize: function(element, options){
+		this.element = this.subject = document.id(element);
+		this.parent(options);
+	},
+
+	set: function(property, now){
+		if (arguments.length == 1){
+			now = property;
+			property = this.property || this.options.property;
+		}
+		this.render(this.element, property, now, this.options.unit);
+		return this;
+	},
+
+	start: function(property, from, to){
+		if (!this.check(property, from, to)) return this;
+		var args = Array.flatten(arguments);
+		this.property = this.options.property || args.shift();
+		var parsed = this.prepare(this.element, this.property, args);
+		return this.parent(parsed.from, parsed.to);
+	}
+
+});
+
+Element.Properties.tween = {
+
+	set: function(options){
+		var tween = this.retrieve('tween');
+		if (tween) tween.cancel();
+		return this.eliminate('tween').store('tween:options', $extend({link: 'cancel'}, options));
+	},
+
+	get: function(options){
+		if (options || !this.retrieve('tween')){
+			if (options || !this.retrieve('tween:options')) this.set('tween', options);
+			this.store('tween', new Fx.Tween(this, this.retrieve('tween:options')));
+		}
+		return this.retrieve('tween');
+	}
+
+};
+
+Element.implement({
+
+	tween: function(property, from, to){
+		this.get('tween').start(arguments);
+		return this;
+	},
+
+	fade: function(how){
+		var fade = this.get('tween'), o = 'opacity', toggle;
+		how = $pick(how, 'toggle');
+		switch (how){
+			case 'in': fade.start(o, 1); break;
+			case 'out': fade.start(o, 0); break;
+			case 'show': fade.set(o, 1); break;
+			case 'hide': fade.set(o, 0); break;
+			case 'toggle':
+				var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
+				fade.start(o, (flag) ? 0 : 1);
+				this.store('fade:flag', !flag);
+				toggle = true;
+			break;
+			default: fade.start(o, arguments);
+		}
+		if (!toggle) this.eliminate('fade:flag');
+		return this;
+	},
+
+	highlight: function(start, end){
+		if (!end){
+			end = this.retrieve('highlight:original', this.getStyle('background-color'));
+			end = (end == 'transparent') ? '#fff' : end;
+		}
+		var tween = this.get('tween');
+		tween.start('background-color', start || '#ffff88', end).chain(function(){
+			this.setStyle('background-color', this.retrieve('highlight:original'));
+			tween.callChain();
+		}.bind(this));
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+script: Fx.Morph.js
+
+description: Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.
+
+license: MIT-style license.
+
+requires:
+- /Fx.CSS
+
+provides: [Fx.Morph]
+
+...
+*/
+
+Fx.Morph = new Class({
+
+	Extends: Fx.CSS,
+
+	initialize: function(element, options){
+		this.element = this.subject = document.id(element);
+		this.parent(options);
+	},
+
+	set: function(now){
+		if (typeof now == 'string') now = this.search(now);
+		for (var p in now) this.render(this.element, p, now[p], this.options.unit);
+		return this;
+	},
+
+	compute: function(from, to, delta){
+		var now = {};
+		for (var p in from) now[p] = this.parent(from[p], to[p], delta);
+		return now;
+	},
+
+	start: function(properties){
+		if (!this.check(properties)) return this;
+		if (typeof properties == 'string') properties = this.search(properties);
+		var from = {}, to = {};
+		for (var p in properties){
+			var parsed = this.prepare(this.element, p, properties[p]);
+			from[p] = parsed.from;
+			to[p] = parsed.to;
+		}
+		return this.parent(from, to);
+	}
+
+});
+
+Element.Properties.morph = {
+
+	set: function(options){
+		var morph = this.retrieve('morph');
+		if (morph) morph.cancel();
+		return this.eliminate('morph').store('morph:options', $extend({link: 'cancel'}, options));
+	},
+
+	get: function(options){
+		if (options || !this.retrieve('morph')){
+			if (options || !this.retrieve('morph:options')) this.set('morph', options);
+			this.store('morph', new Fx.Morph(this, this.retrieve('morph:options')));
+		}
+		return this.retrieve('morph');
+	}
+
+};
+
+Element.implement({
+
+	morph: function(props){
+		this.get('morph').start(props);
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+script: Fx.Transitions.js
+
+description: Contains a set of advanced transitions to be used with any of the Fx Classes.
+
+license: MIT-style license.
+
+credits:
+- Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified and optimized to be used with MooTools.
+
+requires:
+- /Fx
+
+provides: [Fx.Transitions]
+
+...
+*/
+
+Fx.implement({
+
+	getTransition: function(){
+		var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
+		if (typeof trans == 'string'){
+			var data = trans.split(':');
+			trans = Fx.Transitions;
+			trans = trans[data[0]] || trans[data[0].capitalize()];
+			if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
+		}
+		return trans;
+	}
+
+});
+
+Fx.Transition = function(transition, params){
+	params = $splat(params);
+	return $extend(transition, {
+		easeIn: function(pos){
+			return transition(pos, params);
+		},
+		easeOut: function(pos){
+			return 1 - transition(1 - pos, params);
+		},
+		easeInOut: function(pos){
+			return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2;
+		}
+	});
+};
+
+Fx.Transitions = new Hash({
+
+	linear: $arguments(0)
+
+});
+
+Fx.Transitions.extend = function(transitions){
+	for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
+};
+
+Fx.Transitions.extend({
+
+	Pow: function(p, x){
+		return Math.pow(p, x[0] || 6);
+	},
+
+	Expo: function(p){
+		return Math.pow(2, 8 * (p - 1));
+	},
+
+	Circ: function(p){
+		return 1 - Math.sin(Math.acos(p));
+	},
+
+	Sine: function(p){
+		return 1 - Math.sin((1 - p) * Math.PI / 2);
+	},
+
+	Back: function(p, x){
+		x = x[0] || 1.618;
+		return Math.pow(p, 2) * ((x + 1) * p - x);
+	},
+
+	Bounce: function(p){
+		var value;
+		for (var a = 0, b = 1; 1; a += b, b /= 2){
+			if (p >= (7 - 4 * a) / 11){
+				value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
+				break;
+			}
+		}
+		return value;
+	},
+
+	Elastic: function(p, x){
+		return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
+	}
+
+});
+
+['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
+	Fx.Transitions[transition] = new Fx.Transition(function(p){
+		return Math.pow(p, [i + 2]);
+	});
+});
+
+
+/*
+---
+
+script: Request.js
+
+description: Powerful all purpose Request Class. Uses XMLHTTPRequest.
+
+license: MIT-style license.
+
+requires:
+- /Element
+- /Chain
+- /Events
+- /Options
+- /Browser
+
+provides: [Request]
+
+...
+*/
+
+var Request = new Class({
+
+	Implements: [Chain, Events, Options],
+
+	options: {/*
+		onRequest: $empty,
+		onComplete: $empty,
+		onCancel: $empty,
+		onSuccess: $empty,
+		onFailure: $empty,
+		onException: $empty,*/
+		url: '',
+		data: '',
+		headers: {
+			'X-Requested-With': 'XMLHttpRequest',
+			'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+		},
+		async: true,
+		format: false,
+		method: 'post',
+		link: 'ignore',
+		isSuccess: null,
+		emulation: true,
+		urlEncoded: true,
+		encoding: 'utf-8',
+		evalScripts: false,
+		evalResponse: false,
+		noCache: false
+	},
+
+	initialize: function(options){
+		this.xhr = new Browser.Request();
+		this.setOptions(options);
+		this.options.isSuccess = this.options.isSuccess || this.isSuccess;
+		this.headers = new Hash(this.options.headers);
+	},
+
+	onStateChange: function(){
+		if (this.xhr.readyState != 4 || !this.running) return;
+		this.running = false;
+		this.status = 0;
+		$try(function(){
+			this.status = this.xhr.status;
+		}.bind(this));
+		this.xhr.onreadystatechange = $empty;
+		if (this.options.isSuccess.call(this, this.status)){
+			this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML};
+			this.success(this.response.text, this.response.xml);
+		} else {
+			this.response = {text: null, xml: null};
+			this.failure();
+		}
+	},
+
+	isSuccess: function(){
+		return ((this.status >= 200) && (this.status < 300));
+	},
+
+	processScripts: function(text){
+		if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return $exec(text);
+		return text.stripScripts(this.options.evalScripts);
+	},
+
+	success: function(text, xml){
+		this.onSuccess(this.processScripts(text), xml);
+	},
+
+	onSuccess: function(){
+		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
+	},
+
+	failure: function(){
+		this.onFailure();
+	},
+
+	onFailure: function(){
+		this.fireEvent('complete').fireEvent('failure', this.xhr);
+	},
+
+	setHeader: function(name, value){
+		this.headers.set(name, value);
+		return this;
+	},
+
+	getHeader: function(name){
+		return $try(function(){
+			return this.xhr.getResponseHeader(name);
+		}.bind(this));
+	},
+
+	check: function(){
+		if (!this.running) return true;
+		switch (this.options.link){
+			case 'cancel': this.cancel(); return true;
+			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
+		}
+		return false;
+	},
+
+	send: function(options){
+		if (!this.check(options)) return this;
+		this.running = true;
+
+		var type = $type(options);
+		if (type == 'string' || type == 'element') options = {data: options};
+
+		var old = this.options;
+		options = $extend({data: old.data, url: old.url, method: old.method}, options);
+		var data = options.data, url = String(options.url), method = options.method.toLowerCase();
+
+		switch ($type(data)){
+			case 'element': data = document.id(data).toQueryString(); break;
+			case 'object': case 'hash': data = Hash.toQueryString(data);
+		}
+
+		if (this.options.format){
+			var format = 'format=' + this.options.format;
+			data = (data) ? format + '&' + data : format;
+		}
+
+		if (this.options.emulation && !['get', 'post'].contains(method)){
+			var _method = '_method=' + method;
+			data = (data) ? _method + '&' + data : _method;
+			method = 'post';
+		}
+
+		if (this.options.urlEncoded && method == 'post'){
+			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
+			this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding);
+		}
+
+		if (this.options.noCache){
+			var noCache = 'noCache=' + new Date().getTime();
+			data = (data) ? noCache + '&' + data : noCache;
+		}
+
+		var trimPosition = url.lastIndexOf('/');
+		if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);
+
+		if (data && method == 'get'){
+			url = url + (url.contains('?') ? '&' : '?') + data;
+			data = null;
+		}
+
+		this.xhr.open(method.toUpperCase(), url, this.options.async);
+
+		this.xhr.onreadystatechange = this.onStateChange.bind(this);
+
+		this.headers.each(function(value, key){
+			try {
+				this.xhr.setRequestHeader(key, value);
+			} catch (e){
+				this.fireEvent('exception', [key, value]);
+			}
+		}, this);
+
+		this.fireEvent('request');
+		this.xhr.send(data);
+		if (!this.options.async) this.onStateChange();
+		return this;
+	},
+
+	cancel: function(){
+		if (!this.running) return this;
+		this.running = false;
+		this.xhr.abort();
+		this.xhr.onreadystatechange = $empty;
+		this.xhr = new Browser.Request();
+		this.fireEvent('cancel');
+		return this;
+	}
+
+});
+
+(function(){
+
+var methods = {};
+['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
+	methods[method] = function(){
+		var params = Array.link(arguments, {url: String.type, data: $defined});
+		return this.send($extend(params, {method: method}));
+	};
+});
+
+Request.implement(methods);
+
+})();
+
+Element.Properties.send = {
+
+	set: function(options){
+		var send = this.retrieve('send');
+		if (send) send.cancel();
+		return this.eliminate('send').store('send:options', $extend({
+			data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
+		}, options));
+	},
+
+	get: function(options){
+		if (options || !this.retrieve('send')){
+			if (options || !this.retrieve('send:options')) this.set('send', options);
+			this.store('send', new Request(this.retrieve('send:options')));
+		}
+		return this.retrieve('send');
+	}
+
+};
+
+Element.implement({
+
+	send: function(url){
+		var sender = this.get('send');
+		sender.send({data: this, url: url || sender.options.url});
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+script: Request.HTML.js
+
+description: Extends the basic Request Class with additional methods for interacting with HTML responses.
+
+license: MIT-style license.
+
+requires:
+- /Request
+- /Element
+
+provides: [Request.HTML]
+
+...
+*/
+
+Request.HTML = new Class({
+
+	Extends: Request,
+
+	options: {
+		update: false,
+		append: false,
+		evalScripts: true,
+		filter: false
+	},
+
+	processHTML: function(text){
+		var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
+		text = (match) ? match[1] : text;
+
+		var container = new Element('div');
+
+		return $try(function(){
+			var root = '<root>' + text + '</root>', doc;
+			if (Browser.Engine.trident){
+				doc = new ActiveXObject('Microsoft.XMLDOM');
+				doc.async = false;
+				doc.loadXML(root);
+			} else {
+				doc = new DOMParser().parseFromString(root, 'text/xml');
+			}
+			root = doc.getElementsByTagName('root')[0];
+			if (!root) return null;
+			for (var i = 0, k = root.childNodes.length; i < k; i++){
+				var child = Element.clone(root.childNodes[i], true, true);
+				if (child) container.grab(child);
+			}
+			return container;
+		}) || container.set('html', text);
+	},
+
+	success: function(text){
+		var options = this.options, response = this.response;
+
+		response.html = text.stripScripts(function(script){
+			response.javascript = script;
+		});
+
+		var temp = this.processHTML(response.html);
+
+		response.tree = temp.childNodes;
+		response.elements = temp.getElements('*');
+
+		if (options.filter) response.tree = response.elements.filter(options.filter);
+		if (options.update) document.id(options.update).empty().set('html', response.html);
+		else if (options.append) document.id(options.append).adopt(temp.getChildren());
+		if (options.evalScripts) $exec(response.javascript);
+
+		this.onSuccess(response.tree, response.elements, response.html, response.javascript);
+	}
+
+});
+
+Element.Properties.load = {
+
+	set: function(options){
+		var load = this.retrieve('load');
+		if (load) load.cancel();
+		return this.eliminate('load').store('load:options', $extend({data: this, link: 'cancel', update: this, method: 'get'}, options));
+	},
+
+	get: function(options){
+		if (options || ! this.retrieve('load')){
+			if (options || !this.retrieve('load:options')) this.set('load', options);
+			this.store('load', new Request.HTML(this.retrieve('load:options')));
+		}
+		return this.retrieve('load');
+	}
+
+};
+
+Element.implement({
+
+	load: function(){
+		this.get('load').send(Array.link(arguments, {data: Object.type, url: String.type}));
+		return this;
+	}
+
+});
+
+
+/*
+---
+
+script: Request.JSON.js
+
+description: Extends the basic Request Class with additional methods for sending and receiving JSON data.
+
+license: MIT-style license.
+
+requires:
+- /Request JSON
+
+provides: [Request.HTML]
+
+...
+*/
+
+Request.JSON = new Class({
+
+	Extends: Request,
+
+	options: {
+		secure: true
+	},
+
+	initialize: function(options){
+		this.parent(options);
+		this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
+	},
+
+	success: function(text){
+		this.response.json = JSON.decode(text, this.options.secure);
+		this.onSuccess(this.response.json, text);
+	}
+
+});
Index: trunk/web/js/main.js
===================================================================
--- trunk/web/js/main.js	(revision 0)
+++ trunk/web/js/main.js	(revision 9)
@@ -0,0 +1,14 @@
+dojo.require("dijit.dijit"); // optimize: load dijit layer
+dojo.require("dijit.layout.TabContainer");
+dojo.require("dijit.layout.ContentPane");
+
+/*window.addEvent('domready', function(){
+   var tc = new dijit.layout.TabContainer({style:'height:200px;width:100%;'}, dojo.byId('tabs'));
+});*/
+
+/*dojo.addOnLoad(function(){
+    var tc = new dijit.layout.TabContainer({style:'height:400px;width:100%;'}, dojo.byId('tabs'));
+    var cp = new dijit.layout.ContentPane({title: "Status"});
+    cp.domNode.innerHTML = "Contents of Tab ";
+    tc.addChild(cp);
+});*/
\ No newline at end of file
Index: trunk/web/js/main2.js
===================================================================
--- trunk/web/js/main2.js	(revision 0)
+++ trunk/web/js/main2.js	(revision 9)
@@ -0,0 +1,64 @@
+window.addEvent('domready', function(){
+        // NOTE: This is an example showing simple state management. During development,
+    // it is generally best to disable state management as dynamically-generated ids
+    // can change across page loads, leading to unpredictable results.  The developer
+    // should ensure that stable state ids are set for stateful components in real apps.
+    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
+
+    // create the Data Store
+    var store = new Ext.data.JsonStore({
+        proxy: new Ext.data.HttpProxy({
+            url: 'log.json'
+        }),
+        totalProperty:'total',
+        idProperty: 'id',
+        root: 'rows',
+        fields:[
+            {name:'date', type:'date', dateFormat:'M d, Y h:i:s A'},
+            {name:'type'},
+            {name:'message'}
+        ]
+    });
+
+    // create the Grid
+    var grid = new Ext.grid.GridPanel({
+        title: 'Log',
+        store: store,
+        loadMask: true,
+        columns: [
+            {id:'date',header: 'Date', width: 100, renderer: Ext.util.Format.dateRenderer('Y-m-d H:i'), dataIndex: 'date'},
+            {id:'type',header: 'Type', width: 100, dataIndex: 'type'},
+            {id:'message',header: 'Message', dataIndex: 'message'}
+        ],
+        stripeRows: true,
+        autoExpandColumn: 'message',
+        height: 350,
+        //width: 'auto',
+        stateful: true,
+        stateId: 'grid',
+
+        // paging bar on the bottom©
+        bbar: new Ext.PagingToolbar({
+            pageSize: 15,
+            store: store,
+            displayInfo: true,
+            displayMsg: 'Displaying {0} - {1} of {2}',
+            emptyMsg: "No messages to display"
+        })
+    });
+    store.load();
+
+    var tabs = new Ext.TabPanel({
+        renderTo: 'tabs1',
+        width:'auto',
+        activeTab: 0,
+        frame:true,
+        defaults:{autoHeight: true},
+        boxMaxHeight: 400,
+        items:[
+            {autoLoad:{url: 'info.jsp', scripts:true }, title: 'Info'},
+            {autoLoad:{url: 'status.jsp', scripts:true }, title: 'Status'},
+            grid
+        ]
+    });
+});
\ No newline at end of file
Index: trunk/web/status.jsp
===================================================================
--- trunk/web/status.jsp	(revision 0)
+++ trunk/web/status.jsp	(revision 9)
@@ -0,0 +1,18 @@
+<%@page import="org.lidar.Config"%>
+<%@page import="org.apache.commons.configuration.XMLConfiguration"%>
+<%@page import="net.sf.jpam.Pam"%>
+<%@page import="org.lidar.api.LIDAR"%>
+<%
+    if(session.getAttribute("authenticated") == null ||
+       Boolean.parseBoolean(session.getAttribute("authenticated").toString()) == false){
+        response.sendRedirect("login.jsp");
+    }
+%>
+Authenticated as: <b><%= session.getAttribute("username") %></b> - <a href="logout.jsp">Logout</a><br/>
+Locked: <strong><%= LIDAR.locked %></strong><br/><br/>
+<%
+    XMLConfiguration c = Config.getConfiguration();
+%>
+Laser port: <strong><%= c.getString("devices.laser.port") %></strong><br/>
+Sensor port: <strong><%= c.getString("devices.sensor.port") %></strong><br/>
+Motion port: <strong><%= c.getString("devices.motion.port") %></strong><br/>
\ No newline at end of file
Index: trunk/web/META-INF/context.xml
===================================================================
--- trunk/web/META-INF/context.xml	(revision 0)
+++ trunk/web/META-INF/context.xml	(revision 9)
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Context antiJARLocking="true" path="/lidar"/>
Index: trunk/web/index.jsp
===================================================================
--- trunk/web/index.jsp	(revision 0)
+++ trunk/web/index.jsp	(revision 9)
@@ -0,0 +1,37 @@
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%
+    if(session.getAttribute("authenticated") == null ||
+       Boolean.parseBoolean(session.getAttribute("authenticated").toString()) == false){
+        response.sendRedirect("login.jsp");
+    }
+%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+   "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <title>LIDAR Web Console</title>
+        <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.1/build/reset-fonts-grids/reset-fonts-grids.css"/>
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <link rel="stylesheet" type="text/css" href="dojo/dijit/themes/claro/claro.css"/>
+    </head>
+    <body class="claro">
+        <div id="wrap">
+            <h1>LIDAR Web Console</h1>
+            <hr/>
+
+            <div dojoType="dijit.layout.TabContainer" style="width: 100%;" doLayout="false">
+                <div dojoType="dijit.layout.ContentPane" title="Info" href="info.jsp" selected="true" closable="true"></div>
+                <div dojoType="dijit.layout.ContentPane" title="Status" href="status.jsp"></div>
+                <div dojoType="dijit.layout.ContentPane" title="Log" href="log.json" closable="true"></div>
+            </div>
+
+        </div>
+        <div id="footer">&copy; 2010 LIDAR</div>
+        <!--<script type="text/javascript" src="js/mootools-1.2.4-core-nc.js"></script>-->
+        <script type="text/javascript" src="dojo/dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true"></script>
+        <script type="text/javascript" src="dojo/dijit/dijit.js"></script>
+        <script type="text/javascript" src="dojo/dijit/dijit-all.js"></script>
+        <script type="text/javascript" src="js/main.js"></script>
+    </body>
+</html>
Index: trunk/web/login.jsp
===================================================================
--- trunk/web/login.jsp	(revision 0)
+++ trunk/web/login.jsp	(revision 9)
@@ -0,0 +1,55 @@
+<%@page import="net.sf.jpam.Pam"%>
+<%@page contentType="text/html" pageEncoding="UTF-8"%>
+<%
+    String error = null;
+    String username = request.getParameter("username");
+    String password = request.getParameter("password");
+    if(username != null && password != null){
+        Pam pam = new Pam();
+        boolean auth = pam.authenticateSuccessful(username, password);
+
+        if(auth){
+            session.setAttribute("authenticated", true);
+            session.setAttribute("username", username);
+            response.sendRedirect("index.jsp");
+        } else {
+            error = "Wrong username and/or password!";
+        }
+    }
+%>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+   "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <title>JSP Page</title>
+    <link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.1/build/reset-fonts-grids/reset-fonts-grids.css"/>
+    <link href="css/login.css" media="screen" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+    <div class="wrap">
+        <div class="form clearfix">
+            <h1>Login</h1>
+            <form id="login" action="login.jsp" method="post">
+                <div>
+                    <label>Username</label>
+                    <input type="text" name="username" id="username" class="wide" value="">
+                </div>
+                <div>
+                    <label>Password</label>
+                    <input type="password" name="password" id="password" class="wide">
+                </div>
+                <div class="clearfix button-container">
+                    <div class="button large"><input id="submit" type="submit" value="Login"></div>
+                </div>
+                <% if(error != null){ %>
+                <div class="clearfix">
+                    <div class="error"><%= error %></div>
+                </div>
+                <% } %>
+            </form>
+        </div>
+    </div>
+</body>
+</html>
Index: trunk/build.xml
===================================================================
--- trunk/build.xml	(revision 0)
+++ trunk/build.xml	(revision 9)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See commented blocks below for -->
+<!-- some examples of how to customize the build. -->
+<!-- (If you delete it and reopen the project it will be recreated.) -->
+<!-- By default, only the Clean and Build commands use this build script. -->
+<!-- Commands such as Run, Debug, and Test only use this build script if -->
+<!-- the Compile on Save feature is turned off for the project. -->
+<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
+<!-- in the project's Project Properties dialog box.-->
+<project name="LIDAR_SOAP" default="default" basedir=".">
+    <description>Builds, tests, and runs the project LIDAR SOAP.</description>
+    <import file="nbproject/build-impl.xml"/>
+    <!--
+
+    There exist several targets which are by default empty and which can be 
+    used for execution of your tasks. These targets are usually executed 
+    before and after some main targets. They are: 
+
+      -pre-init:                 called before initialization of project properties 
+      -post-init:                called after initialization of project properties 
+      -pre-compile:              called before javac compilation 
+      -post-compile:             called after javac compilation 
+      -pre-compile-single:       called before javac compilation of single file
+      -post-compile-single:      called after javac compilation of single file
+      -pre-compile-test:         called before javac compilation of JUnit tests
+      -post-compile-test:        called after javac compilation of JUnit tests
+      -pre-compile-test-single:  called before javac compilation of single JUnit test
+      -post-compile-test-single: called after javac compilation of single JUunit test
+      -pre-dist:                 called before archive building 
+      -post-dist:                called after archive building 
+      -post-clean:               called after cleaning build products 
+      -pre-run-deploy:           called before deploying
+      -post-run-deploy:          called after deploying
+
+    Example of pluging an obfuscator after the compilation could look like 
+
+        <target name="-post-compile">
+            <obfuscate>
+                <fileset dir="${build.classes.dir}"/>
+            </obfuscate>
+        </target>
+
+    For list of available properties check the imported 
+    nbproject/build-impl.xml file. 
+
+
+    Other way how to customize the build is by overriding existing main targets.
+    The target of interest are: 
+
+      init-macrodef-javac:    defines macro for javac compilation
+      init-macrodef-junit:   defines macro for junit execution
+      init-macrodef-debug:    defines macro for class debugging
+      do-dist:                archive building
+      run:                    execution of project 
+      javadoc-build:          javadoc generation 
+
+    Example of overriding the target for project execution could look like 
+
+        <target name="run" depends="<PROJNAME>-impl.jar">
+            <exec dir="bin" executable="launcher.exe">
+                <arg file="${dist.jar}"/>
+            </exec>
+        </target>
+
+    Notice that overridden target depends on jar target and not only on 
+    compile target as regular run target does. Again, for list of available 
+    properties which you can use check the target you are overriding in 
+    nbproject/build-impl.xml file. 
+
+    -->
+</project>
Index: trunk/nbproject/build-impl.xml
===================================================================
--- trunk/nbproject/build-impl.xml	(revision 0)
+++ trunk/nbproject/build-impl.xml	(revision 9)
@@ -0,0 +1,983 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+        *** GENERATED FROM project.xml - DO NOT EDIT  ***
+        ***         EDIT ../build.xml INSTEAD         ***
+
+        For the purpose of easier reading the script
+        is divided into following sections:
+        - initialization
+        - compilation
+        - dist
+        - execution
+        - debugging
+        - javadoc
+        - junit compilation
+        - junit execution
+        - junit debugging
+        - cleanup
+
+        -->
+<project xmlns:webproject1="http://www.netbeans.org/ns/web-project/1" xmlns:webproject2="http://www.netbeans.org/ns/web-project/2" xmlns:webproject3="http://www.netbeans.org/ns/web-project/3" basedir=".." default="default" name="LIDAR_SOAP-impl">
+    <import file="jaxws-build.xml"/>
+    <import file="ant-deploy.xml"/>
+    <fail message="Please build using Ant 1.7.1 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.7.1"/>
+            </not>
+        </condition>
+    </fail>
+    <target depends="dist,javadoc" description="Build whole project." name="default"/>
+    <!--
+                INITIALIZATION SECTION
+            -->
+    <target name="-pre-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init" name="-init-private">
+        <property file="nbproject/private/private.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private" name="-init-user">
+        <property file="${user.properties.file}"/>
+        <!-- The two properties below are usually overridden -->
+        <!-- by the active platform. Just a fallback. -->
+        <property name="default.javac.source" value="1.4"/>
+        <property name="default.javac.target" value="1.4"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
+        <property file="nbproject/project.properties"/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" if="dist.ear.dir" name="-do-ear-init"/>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
+        <condition property="have.tests">
+            <or>
+                <available file="${test.src.dir}"/>
+            </or>
+        </condition>
+        <condition property="have.sources">
+            <or>
+                <available file="${src.dir}"/>
+            </or>
+        </condition>
+        <condition property="netbeans.home+have.tests">
+            <and>
+                <isset property="netbeans.home"/>
+                <isset property="have.tests"/>
+            </and>
+        </condition>
+        <condition property="no.javadoc.preview">
+            <isfalse value="${javadoc.preview}"/>
+        </condition>
+        <property name="javac.compilerargs" value=""/>
+        <condition property="no.deps">
+            <and>
+                <istrue value="${no.dependencies}"/>
+            </and>
+        </condition>
+        <condition property="no.dist.ear.dir">
+            <not>
+                <isset property="dist.ear.dir"/>
+            </not>
+        </condition>
+        <property name="build.web.excludes" value="${build.classes.excludes}"/>
+        <condition property="do.compile.jsps">
+            <istrue value="${compile.jsps}"/>
+        </condition>
+        <condition property="do.debug.server">
+            <or>
+                <not>
+                    <isset property="debug.server"/>
+                </not>
+                <istrue value="${debug.server}"/>
+                <and>
+                    <not>
+                        <istrue value="${debug.server}"/>
+                    </not>
+                    <not>
+                        <istrue value="${debug.client}"/>
+                    </not>
+                </and>
+            </or>
+        </condition>
+        <condition property="do.debug.client">
+            <istrue value="${debug.client}"/>
+        </condition>
+        <condition property="do.display.browser">
+            <istrue value="${display.browser}"/>
+        </condition>
+        <condition property="do.display.browser.debug">
+            <and>
+                <isset property="do.display.browser"/>
+                <not>
+                    <isset property="do.debug.client"/>
+                </not>
+            </and>
+        </condition>
+        <available file="${conf.dir}/MANIFEST.MF" property="has.custom.manifest"/>
+        <available file="${persistence.xml.dir}/persistence.xml" property="has.persistence.xml"/>
+        <condition property="do.war.package.with.custom.manifest">
+            <isset property="has.custom.manifest"/>
+        </condition>
+        <condition property="do.war.package.without.custom.manifest">
+            <not>
+                <isset property="has.custom.manifest"/>
+            </not>
+        </condition>
+        <condition property="do.tmp.war.package.with.custom.manifest">
+            <and>
+                <isset property="has.custom.manifest"/>
+                <or>
+                    <isfalse value="${directory.deployment.supported}"/>
+                    <isset property="dist.ear.dir"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="do.tmp.war.package.without.custom.manifest">
+            <and>
+                <not>
+                    <isset property="has.custom.manifest"/>
+                </not>
+                <or>
+                    <isfalse value="${directory.deployment.supported}"/>
+                    <isset property="dist.ear.dir"/>
+                </or>
+            </and>
+        </condition>
+        <condition property="do.tmp.war.package">
+            <or>
+                <isfalse value="${directory.deployment.supported}"/>
+                <isset property="dist.ear.dir"/>
+            </or>
+        </condition>
+        <property name="build.meta.inf.dir" value="${build.web.dir}/META-INF"/>
+        <condition else="" property="application.args.param" value="${application.args}">
+            <and>
+                <isset property="application.args"/>
+                <not>
+                    <equals arg1="${application.args}" arg2="" trim="true"/>
+                </not>
+            </and>
+        </condition>
+        <property name="source.encoding" value="${file.encoding}"/>
+        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
+            <and>
+                <isset property="javadoc.encoding"/>
+                <not>
+                    <equals arg1="${javadoc.encoding}" arg2=""/>
+                </not>
+            </and>
+        </condition>
+        <property name="javadoc.encoding.used" value="${source.encoding}"/>
+        <property name="includes" value="**"/>
+        <property name="excludes" value=""/>
+        <property name="runmain.jvmargs" value=""/>
+        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
+        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
+            <length length="0" string="${endorsed.classpath}" when="greater"/>
+        </condition>
+    </target>
+    <target depends="init" name="-init-cos" unless="deploy.on.save">
+        <condition property="deploy.on.save" value="true">
+            <istrue value="${j2ee.deploy.on.save}"/>
+        </condition>
+    </target>
+    <target name="-post-init">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.dir">Must set src.dir</fail>
+        <fail unless="test.src.dir">Must set test.src.dir</fail>
+        <fail unless="build.dir">Must set build.dir</fail>
+        <fail unless="build.web.dir">Must set build.web.dir</fail>
+        <fail unless="build.generated.dir">Must set build.generated.dir</fail>
+        <fail unless="dist.dir">Must set dist.dir</fail>
+        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
+        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
+        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
+        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
+        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
+        <fail unless="dist.war">Must set dist.war</fail>
+        <condition property="missing.j2ee.server.home">
+            <and>
+                <matches pattern="j2ee.server.home" string="${j2ee.platform.classpath}"/>
+                <not>
+                    <isset property="j2ee.server.home"/>
+                </not>
+            </and>
+        </condition>
+        <fail if="missing.j2ee.server.home">
+The Java EE server classpath is not correctly set up - server home directory is missing.
+Either open the project in the IDE and assign the server or setup the server classpath manually.
+For example like this:
+   ant -Dj2ee.server.home=&lt;app_server_installation_directory&gt;
+                </fail>
+        <fail unless="j2ee.platform.classpath">
+The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}.
+Either open the project in the IDE and assign the server or setup the server classpath manually.
+For example like this:
+   ant -Duser.properties.file=&lt;path_to_property_file&gt; (where you put the property "j2ee.platform.classpath" in a .properties file)
+or ant -Dj2ee.platform.classpath=&lt;server_classpath&gt; (where no properties file is used)
+                </fail>
+    </target>
+    <target name="-init-macrodef-property">
+        <macrodef name="property" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute name="name"/>
+            <attribute name="value"/>
+            <sequential>
+                <property name="@{name}" value="${@{value}}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <mkdir dir="@{apgeneratedsrcdir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <compilerarg value="-processorpath"/>
+                    <compilerarg path="@{processorpath}:${empty.dir}"/>
+                    <compilerarg line="${ap.processors.internal}"/>
+                    <compilerarg value="-s"/>
+                    <compilerarg path="@{apgeneratedsrcdir}"/>
+                    <compilerarg line="${ap.proc.none.internal}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
+        <macrodef name="javac" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${javac.processorpath}" name="processorpath"/>
+            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="${javac.debug}" name="debug"/>
+            <attribute default="${empty.dir}" name="gensrcdir"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <property location="${build.dir}/empty" name="empty.dir"/>
+                <mkdir dir="${empty.dir}"/>
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" includeantruntime="false" includes="@{includes}" source="${javac.source}" srcdir="@{srcdir}" target="${javac.target}">
+                    <src>
+                        <dirset dir="@{gensrcdir}" erroronmissingdir="false">
+                            <include name="*"/>
+                        </dirset>
+                    </src>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <compilerarg line="${javac.compilerargs}"/>
+                    <customize/>
+                </javac>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
+        <macrodef name="depend" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${src.dir}" name="srcdir"/>
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <attribute default="${javac.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <sequential>
+                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </depend>
+            </sequential>
+        </macrodef>
+        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${build.classes.dir}" name="destdir"/>
+            <sequential>
+                <fail unless="javac.includes">Must set javac.includes</fail>
+                <pathconvert pathsep="," property="javac.includes.binary">
+                    <path>
+                        <filelist dir="@{destdir}" files="${javac.includes}"/>
+                    </path>
+                    <globmapper from="*.java" to="*.class"/>
+                </pathconvert>
+                <delete>
+                    <files includes="${javac.includes.binary}"/>
+                </delete>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-junit">
+        <macrodef name="junit" uri="http://www.netbeans.org/ns/web-project/2">
+            <attribute default="${includes}" name="includes"/>
+            <attribute default="${excludes}" name="excludes"/>
+            <attribute default="**" name="testincludes"/>
+            <sequential>
+                <junit dir="${basedir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" showoutput="true" tempdir="${java.io.tmpdir}">
+                    <batchtest todir="${build.test.results.dir}">
+                        <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
+                            <filename name="@{testincludes}"/>
+                        </fileset>
+                    </batchtest>
+                    <classpath>
+                        <path path="${run.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="test-sys-prop."/>
+                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <formatter type="brief" usefile="false"/>
+                    <formatter type="xml"/>
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${runmain.jvmargs}"/>
+                </junit>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-java">
+        <macrodef name="java" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}" name="classpath"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${runmain.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}:${j2ee.platform.classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-macrodef-nbjsdebug">
+        <macrodef name="nbjsdebugstart" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${client.url}" name="webUrl"/>
+            <sequential>
+                <nbjsdebugstart urlPart="${client.urlPart}" webUrl="@{webUrl}"/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
+        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="name"/>
+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <sequential>
+                <nbjpdastart addressproperty="jpda.address" name="@{name}" transport="${debug-transport}">
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                </nbjpdastart>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${build.classes.dir}" name="dir"/>
+            <sequential>
+                <nbjpdareload>
+                    <fileset dir="@{dir}" includes="${fix.classes}">
+                        <include name="${fix.includes}*.class"/>
+                    </fileset>
+                </nbjpdareload>
+            </sequential>
+        </macrodef>
+        <macrodef name="nbjpdaappreloaded" uri="http://www.netbeans.org/ns/web-project/1">
+            <sequential>
+                <nbjpdaappreloaded/>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-debug-args">
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
+        <condition property="have-jdk-older-than-1.4">
+            <or>
+                <contains string="${version-output}" substring="java version &quot;1.0"/>
+                <contains string="${version-output}" substring="java version &quot;1.1"/>
+                <contains string="${version-output}" substring="java version &quot;1.2"/>
+                <contains string="${version-output}" substring="java version &quot;1.3"/>
+            </or>
+        </condition>
+        <condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
+            <istrue value="${have-jdk-older-than-1.4}"/>
+        </condition>
+        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
+            <os family="windows"/>
+        </condition>
+        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
+            <isset property="debug.transport"/>
+        </condition>
+    </target>
+    <target depends="-init-debug-args" name="-init-macrodef-debug">
+        <macrodef name="debug" uri="http://www.netbeans.org/ns/web-project/1">
+            <attribute default="${main.class}" name="classname"/>
+            <attribute default="${debug.classpath}:${j2ee.platform.classpath}" name="classpath"/>
+            <attribute default="${application.args.param}" name="args"/>
+            <element name="customize" optional="true"/>
+            <sequential>
+                <java classname="@{classname}" fork="true">
+                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
+                    <jvmarg line="${debug-args-line}"/>
+                    <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
+                    <jvmarg line="${runmain.jvmargs}"/>
+                    <classpath>
+                        <path path="@{classpath}"/>
+                    </classpath>
+                    <syspropertyset>
+                        <propertyref prefix="run-sys-prop."/>
+                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
+                    </syspropertyset>
+                    <arg line="@{args}"/>
+                    <customize/>
+                </java>
+            </sequential>
+        </macrodef>
+    </target>
+    <target name="-init-taskdefs">
+        <fail unless="libs.CopyLibs.classpath">
+The libs.CopyLibs.classpath property is not set up.
+This property must point to 
+org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part
+of NetBeans IDE installation and is usually located at 
+&lt;netbeans_installation&gt;/java&lt;version&gt;/ant/extra folder.
+Either open the project in the IDE and make sure CopyLibs library
+exists or setup the property manually. For example like this:
+ ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar
+                </fail>
+        <taskdef classpath="${libs.CopyLibs.classpath}" resource="org/netbeans/modules/java/j2seproject/copylibstask/antlib.xml"/>
+    </target>
+    <target name="-init-ap-cmdline-properties">
+        <property name="annotation.processing.enabled" value="true"/>
+        <property name="annotation.processing.processors.list" value=""/>
+        <property name="annotation.processing.run.all.processors" value="true"/>
+        <property name="javac.processorpath" value="${javac.classpath}"/>
+        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
+        <condition property="ap.supported.internal" value="true">
+            <not>
+                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
+            </not>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
+        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
+            <isfalse value="${annotation.processing.run.all.processors}"/>
+        </condition>
+        <condition else="" property="ap.proc.none.internal" value="-proc:none">
+            <isfalse value="${annotation.processing.enabled}"/>
+        </condition>
+    </target>
+    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
+        <property name="ap.cmd.line.internal" value=""/>
+    </target>
+    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-java,-init-macrodef-nbjpda,-init-macrodef-nbjsdebug,-init-macrodef-debug,-init-taskdefs,-init-ap-cmdline" name="init"/>
+    <!--
+                COMPILATION SECTION
+            -->
+    <target depends="init" if="no.dist.ear.dir" name="deps-module-jar" unless="no.deps"/>
+    <target depends="init" if="dist.ear.dir" name="deps-ear-jar" unless="no.deps"/>
+    <target depends="init, deps-module-jar, deps-ear-jar" name="deps-jar" unless="no.deps"/>
+    <target depends="init,deps-jar" name="-pre-pre-compile">
+        <mkdir dir="${build.classes.dir}"/>
+    </target>
+    <target name="-pre-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-copy-webdir">
+        <copy todir="${build.web.dir}">
+            <fileset dir="${web.docbase.dir}" excludes="${build.web.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+        <copy todir="${build.web.dir}/WEB-INF">
+            <fileset dir="${webinf.dir}" excludes="${build.web.excludes}"/>
+        </copy>
+    </target>
+    <target depends="init, deps-jar, -pre-pre-compile, -pre-compile, -copy-manifest, -copy-persistence-xml, -copy-webdir, library-inclusion-in-archive,library-inclusion-in-manifest" if="have.sources" name="-do-compile">
+        <webproject2:javac destdir="${build.classes.dir}" gensrcdir="${build.generated.sources.dir}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target if="has.custom.manifest" name="-copy-manifest">
+        <mkdir dir="${build.meta.inf.dir}"/>
+        <copy todir="${build.meta.inf.dir}">
+            <fileset dir="${conf.dir}" includes="MANIFEST.MF"/>
+        </copy>
+    </target>
+    <target if="has.persistence.xml" name="-copy-persistence-xml">
+        <mkdir dir="${build.web.dir}/WEB-INF/classes/META-INF"/>
+        <copy todir="${build.web.dir}/WEB-INF/classes/META-INF">
+            <fileset dir="${persistence.xml.dir}" includes="persistence.xml"/>
+        </copy>
+    </target>
+    <target name="-post-compile">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
+    <target name="-pre-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <webproject2:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}"/>
+        <copy todir="${build.classes.dir}">
+            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
+    <target depends="compile" description="Test compile JSP pages to expose compilation errors." if="do.compile.jsps" name="compile-jsps">
+        <mkdir dir="${build.generated.dir}/src"/>
+        <java classname="org.netbeans.modules.web.project.ant.JspC" failonerror="true" fork="true">
+            <arg value="-uriroot"/>
+            <arg file="${basedir}/${build.web.dir}"/>
+            <arg value="-d"/>
+            <arg file="${basedir}/${build.generated.dir}/src"/>
+            <arg value="-die1"/>
+            <arg value="-compilerSourceVM ${javac.source}"/>
+            <arg value="-compilerTargetVM ${javac.target}"/>
+            <arg value="-javaEncoding ${source.encoding}"/>
+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>
+        </java>
+        <mkdir dir="${build.generated.dir}/classes"/>
+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src"/>
+    </target>
+    <target depends="compile" if="jsp.includes" name="-do-compile-single-jsp">
+        <fail unless="javac.jsp.includes">Must select some files in the IDE or set javac.jsp.includes</fail>
+        <mkdir dir="${build.generated.dir}/src"/>
+        <java classname="org.netbeans.modules.web.project.ant.JspCSingle" failonerror="true" fork="true">
+            <arg value="-uriroot"/>
+            <arg file="${basedir}/${build.web.dir}"/>
+            <arg value="-d"/>
+            <arg file="${basedir}/${build.generated.dir}/src"/>
+            <arg value="-die1"/>
+            <arg value="-jspc.files"/>
+            <arg path="${jsp.includes}"/>
+            <arg value="-compilerSourceVM ${javac.source}"/>
+            <arg value="-compilerTargetVM ${javac.target}"/>
+            <arg value="-javaEncoding ${source.encoding}"/>
+            <classpath path="${java.home}/../lib/tools.jar:${libs.jsp-compiler.classpath}:${libs.jsp-compilation.classpath}"/>
+        </java>
+        <mkdir dir="${build.generated.dir}/classes"/>
+        <webproject2:javac classpath="${build.classes.dir}:${libs.jsp-compilation.classpath}:${javac.classpath}:${j2ee.platform.classpath}" destdir="${build.generated.dir}/classes" srcdir="${build.generated.dir}/src">
+            <customize>
+                <patternset includes="${javac.jsp.includes}"/>
+            </customize>
+        </webproject2:javac>
+    </target>
+    <target name="compile-single-jsp">
+        <fail unless="jsp.includes">Must select a file in the IDE or set jsp.includes</fail>
+        <antcall target="-do-compile-single-jsp"/>
+    </target>
+    <!--
+                DIST BUILDING SECTION
+            -->
+    <target name="-pre-dist">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.without.custom.manifest" name="-do-dist-without-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}">
+            <fileset dir="${build.web.dir}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.war.package.with.custom.manifest" name="-do-dist-with-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">
+            <fileset dir="${build.web.dir}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.without.custom.manifest" name="-do-tmp-dist-without-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}">
+            <fileset dir="${build.web.dir}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist" if="do.tmp.war.package.with.custom.manifest" name="-do-tmp-dist-with-manifest">
+        <dirname file="${dist.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.war}" manifest="${build.meta.inf.dir}/MANIFEST.MF">
+            <fileset dir="${build.web.dir}"/>
+        </jar>
+    </target>
+    <target depends="init,compile,compile-jsps,-pre-dist,-do-dist-with-manifest,-do-dist-without-manifest" name="do-dist"/>
+    <target depends="init" if="dist.ear.dir" name="library-inclusion-in-manifest">
+        <copyfiles files="${libs.hibernate-support.classpath}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${libs.ejb3-persistence.classpath}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.mysql-connector-java-5.1.6-bin.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${libs.metro.classpath}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${libs.JavaComm.classpath}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.JPam-1.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.commons-configuration-1.6.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.commons-lang-2.5.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${file.reference.commons-collections-3.2.1.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <copyfiles files="${libs.GSON.classpath}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
+        <mkdir dir="${build.web.dir}/META-INF"/>
+        <manifest file="${build.web.dir}/META-INF/MANIFEST.MF" mode="update"/>
+    </target>
+    <target depends="init" name="library-inclusion-in-archive" unless="dist.ear.dir">
+        <copyfiles files="${libs.hibernate-support.classpath}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${libs.ejb3-persistence.classpath}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.mysql-connector-java-5.1.6-bin.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${libs.metro.classpath}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${libs.JavaComm.classpath}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.JPam-1.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.commons-configuration-1.6.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.commons-lang-2.5.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${file.reference.commons-collections-3.2.1.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
+        <copyfiles files="${libs.GSON.classpath}" todir="${build.web.dir}/WEB-INF/lib"/>
+    </target>
+    <target depends="init" if="dist.ear.dir" name="-clean-webinf-lib">
+        <delete dir="${build.web.dir}/WEB-INF/lib"/>
+    </target>
+    <target depends="init,-clean-webinf-lib,compile,compile-jsps,-pre-dist,library-inclusion-in-manifest" if="do.tmp.war.package" name="do-ear-dist">
+        <dirname file="${dist.ear.war}" property="dist.jar.dir"/>
+        <mkdir dir="${dist.jar.dir}"/>
+        <jar compress="${jar.compress}" jarfile="${dist.ear.war}" manifest="${build.web.dir}/META-INF/MANIFEST.MF">
+            <fileset dir="${build.web.dir}"/>
+        </jar>
+    </target>
+    <target name="-post-dist">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-dist,do-dist,-post-dist" description="Build distribution (WAR)." name="dist"/>
+    <target depends="init,-clean-webinf-lib,-init-cos,compile,-pre-dist,do-ear-dist,-post-dist" description="Build distribution (WAR) to be packaged into an EAR." name="dist-ear"/>
+    <!--
+                EXECUTION SECTION
+            -->
+    <target depends="run-deploy,run-display-browser" description="Deploy to server and show in browser." name="run"/>
+    <target name="-pre-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-post-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target name="-pre-nbmodule-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -pre-run-deploy task instead. -->
+    </target>
+    <target name="-post-nbmodule-run-deploy">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- This target can be overriden by NetBeans modules. Don't override it directly, use -post-run-deploy task instead. -->
+    </target>
+    <target name="-run-deploy-am">
+        <!-- Task to deploy to the Access Manager runtime. -->
+    </target>
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest,-pre-run-deploy,-pre-nbmodule-run-deploy,-run-deploy-nb,-init-deploy-ant,-deploy-ant,-run-deploy-am,-post-nbmodule-run-deploy,-post-run-deploy" name="run-deploy">
+        <nbjpdaappreloaded/>
+    </target>
+    <target if="netbeans.home" name="-run-deploy-nb">
+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="false" forceRedeploy="${forceRedeploy}"/>
+    </target>
+    <target name="-init-deploy-ant" unless="netbeans.home">
+        <property name="deploy.ant.archive" value="${dist.war}"/>
+        <property name="deploy.ant.docbase.dir" value="${web.docbase.dir}"/>
+        <property name="deploy.ant.resource.dir" value="${resource.dir}"/>
+        <property name="deploy.ant.enabled" value="true"/>
+    </target>
+    <target depends="dist,-run-undeploy-nb,-init-deploy-ant,-undeploy-ant" name="run-undeploy"/>
+    <target if="netbeans.home" name="-run-undeploy-nb">
+        <fail message="Undeploy is not supported from within the IDE"/>
+    </target>
+    <target depends="init,-pre-dist,dist,-post-dist" name="verify">
+        <nbverify file="${dist.war}"/>
+    </target>
+    <target depends="run-deploy,-init-display-browser,-display-browser-nb,-display-browser-cl" name="run-display-browser"/>
+    <target if="do.display.browser" name="-init-display-browser">
+        <condition property="do.display.browser.nb">
+            <isset property="netbeans.home"/>
+        </condition>
+        <condition property="do.display.browser.cl">
+            <isset property="deploy.ant.enabled"/>
+        </condition>
+    </target>
+    <target if="do.display.browser.nb" name="-display-browser-nb">
+        <nbbrowse url="${client.url}"/>
+    </target>
+    <target if="do.display.browser.cl" name="-get-browser" unless="browser">
+        <condition property="browser" value="rundll32">
+            <os family="windows"/>
+        </condition>
+        <condition else="" property="browser.args" value="url.dll,FileProtocolHandler">
+            <os family="windows"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/open">
+            <os family="mac"/>
+        </condition>
+        <property environment="env"/>
+        <condition property="browser" value="${env.BROWSER}">
+            <isset property="env.BROWSER"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/firefox">
+            <available file="/usr/bin/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/local/firefox/firefox">
+            <available file="/usr/local/firefox/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/bin/mozilla">
+            <available file="/usr/bin/mozilla"/>
+        </condition>
+        <condition property="browser" value="/usr/local/mozilla/mozilla">
+            <available file="/usr/local/mozilla/mozilla"/>
+        </condition>
+        <condition property="browser" value="/usr/sfw/lib/firefox/firefox">
+            <available file="/usr/sfw/lib/firefox/firefox"/>
+        </condition>
+        <condition property="browser" value="/opt/csw/bin/firefox">
+            <available file="/opt/csw/bin/firefox"/>
+        </condition>
+        <condition property="browser" value="/usr/sfw/lib/mozilla/mozilla">
+            <available file="/usr/sfw/lib/mozilla/mozilla"/>
+        </condition>
+        <condition property="browser" value="/opt/csw/bin/mozilla">
+            <available file="/opt/csw/bin/mozilla"/>
+        </condition>
+    </target>
+    <target depends="-get-browser" if="do.display.browser.cl" name="-display-browser-cl">
+        <fail unless="browser">
+                    Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable.
+                </fail>
+        <property name="browse.url" value="${deploy.ant.client.url}${client.urlPart}"/>
+        <echo>Launching ${browse.url}</echo>
+        <exec executable="${browser}" spawn="true">
+            <arg line="${browser.args} ${browse.url}"/>
+        </exec>
+    </target>
+    <target depends="init,-init-cos,compile-single" name="run-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <webproject1:java classname="${run.class}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" name="run-test-with-main">
+        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
+        <webproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
+    </target>
+    <!--
+                DEBUGGING SECTION
+            -->
+    <target depends="init,-init-cos,compile,compile-jsps,-do-compile-single-jsp,-pre-dist,-do-tmp-dist-with-manifest,-do-tmp-dist-without-manifest" description="Debug project in IDE." if="netbeans.home" name="debug">
+        <nbstartserver debugmode="true"/>
+        <antcall target="connect-debugger"/>
+        <nbdeploy clientUrlPart="${client.urlPart}" debugmode="true" forceRedeploy="true"/>
+        <antcall target="debug-display-browser"/>
+        <antcall target="connect-client-debugger"/>
+    </target>
+    <target if="do.debug.server" name="connect-debugger" unless="is.debugged">
+        <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" name="${name}" transport="${jpda.transport}">
+            <classpath>
+                <path path="${debug.classpath}:${j2ee.platform.classpath}"/>
+            </classpath>
+            <sourcepath>
+                <path path="${web.docbase.dir}"/>
+            </sourcepath>
+        </nbjpdaconnect>
+    </target>
+    <target if="do.display.browser.debug" name="debug-display-browser">
+        <nbbrowse url="${client.url}"/>
+    </target>
+    <target if="do.debug.client" name="connect-client-debugger">
+        <webproject1:nbjsdebugstart webUrl="${client.url}"/>
+    </target>
+    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <webproject1:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
+    </target>
+    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
+    <target depends="init,compile,compile-jsps,-do-compile-single-jsp,debug" if="netbeans.home" name="debug-single"/>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
+    </target>
+    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
+        <webproject1:nbjpdastart name="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
+        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
+        <webproject1:debug classname="${debug.class}"/>
+    </target>
+    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single-main"/>
+    <target depends="init" name="-pre-debug-fix">
+        <fail unless="fix.includes">Must set fix.includes</fail>
+        <property name="javac.includes" value="${fix.includes}.java"/>
+    </target>
+    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
+        <webproject1:nbjpdareload/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
+    <!--
+                JAVADOC SECTION
+            -->
+    <target depends="init" if="have.sources" name="javadoc-build">
+        <mkdir dir="${dist.javadoc.dir}"/>
+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+            <classpath>
+                <path path="${javac.classpath}:${j2ee.platform.classpath}"/>
+            </classpath>
+            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
+            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
+                <include name="**/*.java"/>
+            </fileset>
+        </javadoc>
+    </target>
+    <target depends="init,javadoc-build" if="netbeans.home" name="javadoc-browse" unless="no.javadoc.preview">
+        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
+    </target>
+    <target depends="init,javadoc-build,javadoc-browse" description="Build Javadoc." name="javadoc"/>
+    <!--
+                
+                JUNIT COMPILATION SECTION
+            -->
+    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
+        <mkdir dir="${build.test.classes.dir}"/>
+        <property name="j2ee.platform.embeddableejb.classpath" value=""/>
+    </target>
+    <target name="-pre-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test" if="have.tests" name="-do-compile-test">
+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
+    <target name="-pre-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
+        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
+        <webproject2:javac classpath="${javac.test.classpath}:${j2ee.platform.classpath}:${j2ee.platform.embeddableejb.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}" srcdir="${test.src.dir}"/>
+        <copy todir="${build.test.classes.dir}">
+            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
+        </copy>
+    </target>
+    <target name="-post-compile-test-single">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
+    <!--
+                
+                JUNIT EXECUTION SECTION
+            -->
+    <target depends="init" if="have.tests" name="-pre-test-run">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run" if="have.tests" name="-do-test-run">
+        <webproject2:junit testincludes="**/*Test.java"/>
+    </target>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init" if="have.tests" name="test-report"/>
+    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
+    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
+    <target depends="init" if="have.tests" name="-pre-test-run-single">
+        <mkdir dir="${build.test.results.dir}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
+        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
+        <webproject2:junit excludes="" includes="${test.includes}"/>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
+        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
+    </target>
+    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
+    <!--
+                
+                JUNIT DEBUGGING SECTION
+            -->
+    <target depends="init,compile-test" if="have.tests" name="-debug-start-debuggee-test">
+        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
+        <property location="${build.test.results.dir}/TEST-${test.class}.xml" name="test.report.file"/>
+        <delete file="${test.report.file}"/>
+        <!-- must exist, otherwise the XML formatter would fail -->
+        <mkdir dir="${build.test.results.dir}"/>
+        <webproject1:debug args="${test.class}" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner" classpath="${ant.home}/lib/ant.jar:${ant.home}/lib/ant-junit.jar:${debug.test.classpath}:${j2ee.platform.embeddableejb.classpath}">
+            <customize>
+                <arg value="showoutput=true"/>
+                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter"/>
+                <arg value="formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter,${test.report.file}"/>
+            </customize>
+        </webproject1:debug>
+    </target>
+    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
+        <webproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
+    </target>
+    <target depends="init,compile-test,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
+    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
+        <webproject1:nbjpdareload dir="${build.test.classes.dir}"/>
+    </target>
+    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
+    <!--
+                
+                CLEANUP SECTION
+            -->
+    <target depends="init" if="no.dist.ear.dir" name="deps-clean" unless="no.deps"/>
+    <target depends="init" name="do-clean">
+        <condition property="build.dir.to.clean" value="${build.web.dir}">
+            <isset property="dist.ear.dir"/>
+        </condition>
+        <property name="build.dir.to.clean" value="${build.web.dir}"/>
+        <delete includeEmptyDirs="true" quiet="true">
+            <fileset dir="${build.dir.to.clean}/WEB-INF/lib"/>
+        </delete>
+        <delete dir="${build.dir}"/>
+        <available file="${build.dir.to.clean}/WEB-INF/lib" property="status.clean-failed" type="dir"/>
+        <delete dir="${dist.dir}"/>
+    </target>
+    <target depends="do-clean" if="status.clean-failed" name="check-clean">
+        <echo message="Warning: unable to delete some files in ${build.web.dir}/WEB-INF/lib - they are probably locked by the J2EE server. "/>
+        <echo level="info" message="To delete all files undeploy the module from Server Registry in Runtime tab and then use Clean again."/>
+    </target>
+    <target depends="init" if="netbeans.home" name="undeploy-clean">
+        <nbundeploy failOnError="false" startServer="false"/>
+    </target>
+    <target name="-post-clean">
+        <!-- Empty placeholder for easier customization. -->
+        <!-- You can override this target in the ../build.xml file. -->
+    </target>
+    <target depends="init,undeploy-clean,deps-clean,do-clean,check-clean,-post-clean" description="Clean build products." name="clean"/>
+    <target depends="clean" description="Clean build products." name="clean-ear"/>
+</project>
Index: trunk/nbproject/project.properties
===================================================================
--- trunk/nbproject/project.properties	(revision 0)
+++ trunk/nbproject/project.properties	(revision 9)
@@ -0,0 +1,95 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=true
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+build.classes.dir=${build.web.dir}/WEB-INF/classes
+build.classes.excludes=**/*.java,**/*.form
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+build.web.dir=${build.dir}/web
+build.web.excludes=${build.classes.excludes}
+client.urlPart=
+compile.jsps=false
+conf.dir=${source.root}/conf
+debug.classpath=${build.classes.dir}:${javac.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+display.browser=true
+dist.dir=dist
+dist.ear.war=${dist.dir}/${war.ear.name}
+dist.javadoc.dir=${dist.dir}/javadoc
+dist.war=${dist.dir}/${war.name}
+endorsed.classpath=
+excludes=
+file.reference.commons-collections-3.2.1.jar=/home/cime/Documents/commons-collections-3.2.1/commons-collections-3.2.1.jar
+file.reference.commons-configuration-1.6.jar=/home/cime/Documents/commons-configuration-1.6/commons-configuration-1.6.jar
+file.reference.commons-lang-2.5.jar=/home/cime/Documents/commons-lang-2.5/commons-lang-2.5.jar
+file.reference.JPam-1.1.jar=/home/cime/Documents/JPam-1.1/JPam-1.1.jar
+file.reference.mysql-connector-java-5.1.6-bin.jar=/home/cime/netbeans-6.9/ide/modules/ext/mysql-connector-java-5.1.6-bin.jar
+includes=**
+j2ee.deploy.on.save=true
+j2ee.platform=1.5
+j2ee.platform.classpath=${j2ee.server.home}/lib/jasper-el.jar:${j2ee.server.home}/lib/catalina-ha.jar:${j2ee.server.home}/lib/el-api.jar:${j2ee.server.home}/lib/tomcat-coyote.jar:${j2ee.server.home}/lib/jasper.jar:${j2ee.server.home}/lib/tomcat-dbcp.jar:${j2ee.server.home}/lib/tomcat-i18n-fr.jar:${j2ee.server.home}/lib/catalina.jar:${j2ee.server.home}/lib/catalina-ant.jar:${j2ee.server.home}/lib/tomcat-i18n-es.jar:${j2ee.server.home}/lib/catalina-tribes.jar:${j2ee.server.home}/lib/tomcat-i18n-ja.jar:${j2ee.server.home}/lib/jsp-api.jar:${j2ee.server.home}/lib/annotations-api.jar:${j2ee.server.home}/lib/servlet-api.jar:${j2ee.server.home}/bin/tomcat-juli.jar
+j2ee.server.type=Tomcat60
+jar.compress=false
+javac.classpath=\
+    ${libs.hibernate-support.classpath}:\
+    ${libs.ejb3-persistence.classpath}:\
+    ${file.reference.mysql-connector-java-5.1.6-bin.jar}:\
+    ${libs.metro.classpath}:\
+    ${libs.JavaComm.classpath}:\
+    ${file.reference.JPam-1.1.jar}:\
+    ${file.reference.commons-configuration-1.6.jar}:\
+    ${file.reference.commons-lang-2.5.jar}:\
+    ${file.reference.commons-collections-3.2.1.jar}:\
+    ${libs.GSON.classpath}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.debug=true
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.5
+javac.target=1.5
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}:\
+    ${libs.junit.classpath}:\
+    ${libs.junit_4.classpath}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.preview=true
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+lib.dir=${web.docbase.dir}/WEB-INF/lib
+persistence.xml.dir=${conf.dir}
+platform.active=default_platform
+resource.dir=setup
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+# Space-separated list of JVM arguments used when running a class with a main method or a unit test
+# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value):
+runmain.jvmargs=
+source.encoding=UTF-8
+source.root=src
+src.dir=${source.root}/java
+test.src.dir=test
+war.content.additional=
+war.ear.name=LIDAR_SOAP.war
+war.name=LIDAR_SOAP.war
+web.docbase.dir=web
+webinf.dir=web/WEB-INF
Index: trunk/nbproject/project.xml
===================================================================
--- trunk/nbproject/project.xml	(revision 0)
+++ trunk/nbproject/project.xml	(revision 9)
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.web.project</type>
+    <configuration>
+        <buildExtensions xmlns="http://www.netbeans.org/ns/ant-build-extender/1">
+            <extension file="jaxws-build.xml" id="jaxws"/>
+        </buildExtensions>
+        <data xmlns="http://www.netbeans.org/ns/web-project/3">
+            <name>LIDAR SOAP</name>
+            <minimum-ant-version>1.6.5</minimum-ant-version>
+            <web-module-libraries>
+                <library dirs="200">
+                    <file>${libs.hibernate-support.classpath}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${libs.ejb3-persistence.classpath}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.mysql-connector-java-5.1.6-bin.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${libs.metro.classpath}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${libs.JavaComm.classpath}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.JPam-1.1.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.commons-configuration-1.6.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.commons-lang-2.5.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.commons-collections-3.2.1.jar}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+                <library dirs="200">
+                    <file>${libs.GSON.classpath}</file>
+                    <path-in-war>WEB-INF/lib</path-in-war>
+                </library>
+            </web-module-libraries>
+            <web-module-additional-libraries/>
+            <source-roots>
+                <root id="src.dir"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir"/>
+            </test-roots>
+        </data>
+    </configuration>
+</project>
Index: trunk/nbproject/genfiles.properties
===================================================================
--- trunk/nbproject/genfiles.properties	(revision 0)
+++ trunk/nbproject/genfiles.properties	(revision 9)
@@ -0,0 +1,9 @@
+build.xml.data.CRC32=1c5712f3
+build.xml.script.CRC32=6ef1775d
+build.xml.stylesheet.CRC32=651128d4@1.24.1.1
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=1c5712f3
+nbproject/build-impl.xml.script.CRC32=8a5e492d
+nbproject/build-impl.xml.stylesheet.CRC32=8335d67d@1.24.1.1
+nbproject/jaxws-build.xml.stylesheet.CRC32=b0a0073f
Index: trunk/nbproject/jax-ws.xml
===================================================================
--- trunk/nbproject/jax-ws.xml	(revision 0)
+++ trunk/nbproject/jax-ws.xml	(revision 9)
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jax-ws xmlns="http://www.netbeans.org/ns/jax-ws/1">
+  <services>
+    <service name="Video">
+      <implementation-class>org.lidar.api.Video</implementation-class>
+    </service>
+    <service name="Sensor">
+      <implementation-class>org.lidar.api.Sensor</implementation-class>
+    </service>
+    <service name="Motion">
+      <implementation-class>org.lidar.api.Motion</implementation-class>
+    </service>
+    <service name="Laser">
+      <implementation-class>org.lidar.api.Laser</implementation-class>
+    </service>
+    <service name="Management">
+      <implementation-class>org.lidar.api.Management</implementation-class>
+    </service>
+  </services>
+  <clients/>
+  <jsr109>false</jsr109>
+</jax-ws>
Index: trunk/nbproject/jaxws-build.xml
===================================================================
--- trunk/nbproject/jaxws-build.xml	(revision 0)
+++ trunk/nbproject/jaxws-build.xml	(revision 9)
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+        *** GENERATED FROM jax-ws.xml - DO NOT EDIT !                             ***
+        *** TO MODIFY wsimport options USE Web Service node -> Edit WS Attributes ***
+        *** TO CHANGE TARGETS GENERATED TO jaxws-build.xml COPY THOSE             ***
+        *** TARGETS TO ../build.xml AND MODIFY THAT FILE INSTEAD                  ***
+
+        -->
+<project xmlns:xalan="http://xml.apache.org/xslt" xmlns:webproject2="http://www.netbeans.org/ns/web-project/2" xmlns:jaxws="http://www.netbeans.org/ns/jax-ws/1">
+    <!--
+                ===================
+                JAX-WS WSGEN SECTION
+                ===================
+            -->
+    <target name="wsgen-init" depends="init, -do-compile">
+        <mkdir dir="${build.generated.sources.dir}/jax-ws/resources/"/>
+        <mkdir dir="${build.classes.dir}"/>
+        <taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen">
+            <classpath path="${java.home}/../lib/tools.jar:${build.classes.dir}:${j2ee.platform.wsgen.classpath}:${javac.classpath}"/>
+        </taskdef>
+    </target>
+    <target name="wsgen-Video" depends="wsgen-init">
+        <wsgen sourcedestdir="${build.generated.sources.dir}/jax-ws" resourcedestdir="${build.generated.sources.dir}/jax-ws/resources/" destdir="${build.generated.sources.dir}/jax-ws" verbose="true" xendorsed="true" keep="true" genwsdl="true" sei="org.lidar.api.Video">
+            <classpath path="${java.home}/../lib/tools.jar:${build.classes.dir}:${j2ee.platform.wsgen.classpath}:${javac.classpath}"/>
+        </wsgen>
+    </target>
+    <target name="wsgen-Sensor" depends="wsgen-init">
+        <wsgen sourcedestdir="${build.generated.sources.dir}/jax-ws" resourcedestdir="${build.generated.sources.dir}/jax-ws/resources/" destdir="${build.generated.sources.dir}/jax-ws" verbose="true" xendorsed="true" keep="true" genwsdl="true" sei="org.lidar.api.Sensor">
+            <classpath path="${java.home}/../lib/tools.jar:${build.classes.dir}:${j2ee.platform.wsgen.classpath}:${javac.classpath}"/>
+        </wsgen>
+    </target>
+    <target name="wsgen-Motion" depends="wsgen-init">
+        <wsgen sourcedestdir="${build.generated.sources.dir}/jax-ws" resourcedestdir="${build.generated.sources.dir}/jax-ws/resources/" destdir="${build.generated.sources.dir}/jax-ws" verbose="true" xendorsed="true" keep="true" genwsdl="true" sei="org.lidar.api.Motion">
+            <classpath path="${java.home}/../lib/tools.jar:${build.classes.dir}:${j2ee.platform.wsgen.classpath}:${javac.classpath}"/>
+        </wsgen>
+    </target>
+    <target name="wsgen-Laser" depends="wsgen-init">
+        <wsgen sourcedestdir="${build.generated.sources.dir}/jax-ws" resourcedestdir="${build.generated.sources.dir}/jax-ws/resources/" destdir="${build.generated.sources.dir}/jax-ws" verbose="true" xendorsed="true" keep="true" genwsdl="true" sei="org.lidar.api.Laser">
+            <classpath path="${java.home}/../lib/tools.jar:${build.classes.dir}:${j2ee.platform.wsgen.classpath}:${javac.classpath}"/>
+        </wsgen>
+    </target>
+    <target name="wsgen-Management" depends="wsgen-init">
+        <wsgen sourcedestdir="${build.generated.sources.dir}/jax-ws" resourcedestdir="${build.generated.sources.dir}/jax-ws/resources/" destdir="${build.generated.sources.dir}/jax-ws" verbose="true" xendorsed="true" keep="true" genwsdl="true" sei="org.lidar.api.Management">
+            <classpath path="${java.home}/../lib/tools.jar:${build.classes.dir}:${j2ee.platform.wsgen.classpath}:${javac.classpath}"/>
+        </wsgen>
+    </target>
+    <!--
+                ===================
+                JAX-WS WSIMPORT SECTION
+                ===================
+            -->
+</project>
Index: trunk/nbproject/private/private.properties
===================================================================
--- trunk/nbproject/private/private.properties	(revision 0)
+++ trunk/nbproject/private/private.properties	(revision 9)
@@ -0,0 +1,6 @@
+deploy.ant.properties.file=/home/cime/.netbeans/6.9/tomcat60.properties
+j2ee.server.home=/home/cime/apache-tomcat-6.0.28
+j2ee.server.instance=tomcat60:home=/home/cime/apache-tomcat-6.0.28
+javac.debug=true
+javadoc.preview=true
+user.properties.file=/home/cime/.netbeans/6.9/build.properties
Index: trunk/nbproject/private/private.xml
===================================================================
--- trunk/nbproject/private/private.xml	(revision 0)
+++ trunk/nbproject/private/private.xml	(revision 9)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
+    <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
+</project-private>
Index: trunk/nbproject/ant-deploy.xml
===================================================================
--- trunk/nbproject/ant-deploy.xml	(revision 0)
+++ trunk/nbproject/ant-deploy.xml	(revision 9)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="-deploy-ant" basedir=".">
+    <target name="-init" if="deploy.ant.enabled">
+        <property file="${deploy.ant.properties.file}"/>
+        <tempfile property="temp.module.folder" prefix="tomcat" destdir="${java.io.tmpdir}"/>
+        <unwar src="${deploy.ant.archive}" dest="${temp.module.folder}">
+            <patternset includes="META-INF/context.xml"/>
+        </unwar>
+        <xmlproperty file="${temp.module.folder}/META-INF/context.xml"/>
+        <delete dir="${temp.module.folder}"/>
+    </target>
+    <target name="-deploy-ant" if="deploy.ant.enabled" depends="-init">
+        <echo message="Deploying ${deploy.ant.archive} to ${Context(path)}"/>
+        <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"
+                 classpath="${tomcat.home}/lib/catalina-ant.jar"/>
+        <deploy url="${tomcat.url}/manager" username="${tomcat.username}"
+                password="${tomcat.password}" path="${Context(path)}"
+                war="${deploy.ant.archive}"/>
+        <property name="deploy.ant.client.url" value="${tomcat.url}${Context(path)}"/>
+    </target>
+    <target name="-undeploy-ant" if="deploy.ant.enabled" depends="-init">
+        <echo message="Undeploying ${Context(path)}"/>
+        <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask"
+                classpath="${tomcat.home}/lib/catalina-ant.jar"/>
+        <undeploy url="${tomcat.url}/manager" username="${tomcat.username}" 
+                  password="${tomcat.password}" path="${Context(path)}"/>
+    </target>
+</project>
Index: trunk/src/java/hibernate.cfg.xml
===================================================================
--- trunk/src/java/hibernate.cfg.xml	(revision 0)
+++ trunk/src/java/hibernate.cfg.xml	(revision 9)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+<hibernate-configuration>
+  <session-factory>
+    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
+    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
+    <property name="hibernate.connection.url">jdbc:mysql://localhost/lidar</property>
+    <property name="hibernate.connection.username">root</property>
+    <property name="hibernate.connection.password">mwd40</property>
+    <!-- Enable Hibernate's automatic session context management -->
+    <property name="current_session_context_class">thread</property>
+    
+    <!--<mapping resource="hibernate.hbm.xml"/>-->
+    <mapping class="org.lidar.db.Client"/>
+    <mapping class="org.lidar.db.Log"/>
+  </session-factory>
+</hibernate-configuration>
Index: trunk/src/java/hibernate.hbm.xml
===================================================================
--- trunk/src/java/hibernate.hbm.xml	(revision 0)
+++ trunk/src/java/hibernate.hbm.xml	(revision 9)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+<hibernate-mapping>
+  <class name="org.lidar.db.Log" table="log">
+    <id column="id" name="id">
+      <generator class="increment"/>
+    </id>
+    <property name="date"/>
+    <property name="type"/>
+    <property name="message"/>
+  </class>
+  <!--<class name="org.lidar.db.Client" table="client">
+    <id column="id" name="id">
+      <generator class="increment"/>
+    </id>
+    <property name="key"/>
+    <property name="token"/>
+  </class>-->
+  <class name="org.lidar.db.AuthTokens" table="authentiaction_token">
+    <id column="id" name="id">
+      <generator class="increment"/>
+    </id>
+    <property name="token"/>
+    <property name="access"/>
+    <property name="ip"/>
+  </class>
+</hibernate-mapping>
Index: trunk/src/java/org/lidar/HibernateUtil.java
===================================================================
--- trunk/src/java/org/lidar/HibernateUtil.java	(revision 0)
+++ trunk/src/java/org/lidar/HibernateUtil.java	(revision 9)
@@ -0,0 +1,27 @@
+package org.lidar;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.AnnotationConfiguration;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+
+public class HibernateUtil {
+  private static final SessionFactory sessionFactory;
+  static {
+    try {
+      // Create the SessionFactory from hibernate.cfg.xml
+      sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
+    } catch (Throwable ex) {
+      // Make sure you log the exception, as it might be swallowed
+      System.err.println("Initial SessionFactory creation failed." + ex);
+      throw new ExceptionInInitializerError(ex);
+    }
+  }
+
+  public static SessionFactory getSessionFactory() {
+    return sessionFactory;
+  }
+}
\ No newline at end of file
Index: trunk/src/java/org/lidar/Serial.java
===================================================================
--- trunk/src/java/org/lidar/Serial.java	(revision 0)
+++ trunk/src/java/org/lidar/Serial.java	(revision 9)
@@ -0,0 +1,162 @@
+package org.lidar;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import javax.comm.*;
+import java.util.*;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.lidar.api.Management;
+
+/**
+ * Serial port communication
+ * @author Andrej Cimpersek
+ */
+public class Serial {
+    private boolean isOpened = false;
+    private String deviceName;
+    private String portName;
+    private Enumeration portIdentifiers;
+    private CommPortIdentifier portId;
+    private SerialPort port;
+    protected InputStream inputStream;
+    protected OutputStream outputStream;
+    private int baudRate, dataBits, stopBits, parity;
+    private XMLConfiguration configuration;
+    
+    public Serial(String deviceName){
+        configuration = Config.getConfiguration();
+        this.portName = configuration.getString(String.format("devices.%s.port", deviceName));
+        this.baudRate = configuration.getInt(String.format("devices.%s.baudRate", deviceName));
+        this.dataBits = configuration.getInt(String.format("devices.%s.dataBits", deviceName));
+        this.stopBits = configuration.getInt(String.format("devices.%s.stopBits", deviceName));
+        this.parity = configuration.getInt(String.format("devices.%s.parity", deviceName));
+    }
+
+    /**
+     * Check each port identifier if
+     *   (a) it indicates a serial (not a parallel) port, and
+     *   (b) matches the desired name.
+     * @return boolean
+     */
+    protected boolean identfy(){
+        this.portIdentifiers = CommPortIdentifier.getPortIdentifiers();
+        this.portId = null;  // will be set if port found
+        while (portIdentifiers.hasMoreElements())
+        {
+            CommPortIdentifier pid = (CommPortIdentifier)portIdentifiers.nextElement();
+            if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL && pid.getName().equals(this.portName)){
+                this.portId = pid;
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Destructor - close port
+     */
+    @Override()
+    protected void finalize() throws Throwable{
+        closePort();
+    }
+
+    public boolean acquirePort(){
+        if(this.portId == null) return false;
+        // Use port identifier for acquiring the port
+        try {
+            this.port = (SerialPort)this.portId.open(
+                this.deviceName, // Name of the application asking for the port
+                10000   // Wait max. 10 sec. to acquire port
+            );
+        } catch(PortInUseException e) {
+            return false;
+        }
+
+        return true;
+    }
+
+    public boolean openPort(){
+        if(!acquirePort()) return false;
+        closePort();
+        try {
+            this.port.setSerialPortParams(this.baudRate, this.dataBits, this.stopBits, this.parity);
+            this.port.removeEventListener();
+            this.port.addEventListener(new SerialPortEventListener() {
+                public void serialEvent(SerialPortEvent event){
+                    switch(event.getEventType()) {
+                        case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
+                            onOutputBufferEmpty(event);
+                            break;
+
+                        case SerialPortEvent.DATA_AVAILABLE:
+                            onDataAvailable(event);
+                            break;
+                    }
+                }
+            });
+            this.inputStream = this.port.getInputStream();
+            this.outputStream = this.port.getOutputStream();
+            this.isOpened = true;
+        } catch (Exception e) {
+            this.isOpened = false;
+        } finally {
+            return this.isOpened;
+        }
+    }
+
+    public void closePort(){
+        if(this.port == null) return;
+        try {
+            this.inputStream.close();
+            this.outputStream.close();
+            this.port.close();
+        } catch (Exception e) {
+        } finally {
+            this.isOpened = false;
+        }
+    }
+
+    /**
+     * Write shortcut for string
+     */
+    public boolean sendCommand(String lockToken, String string){
+        return sendCommand(lockToken, string.getBytes());
+    }
+
+    /**
+     * Write shortcut
+     * @param bytes
+     * @return boolean
+     */
+    public boolean sendCommand(String lockToken, byte[] bytes){
+        // TODO: worker, ki odklene po X času brez dostopa
+        if(!Management.locked || lockToken != Management.lockToken) return false;
+        Management.lockAccess = new Date();
+        
+        try {
+            outputStream.write(bytes);
+        } catch (Exception e) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Handle output buffer empty events.
+     * NOTE: The reception of this event is optional and not
+     *       guaranteed by the API specification.
+     * @param event The output buffer empty event
+     */
+    protected void onOutputBufferEmpty(SerialPortEvent event){
+        //TODO: implement
+    }
+
+    /**
+     * Handle data available events.
+     * @param event The data available event
+     */
+    protected void onDataAvailable(SerialPortEvent event){
+        //TODO: implement
+    }
+}
Index: trunk/src/java/org/lidar/auth/IAuthAdapter.java
===================================================================
--- trunk/src/java/org/lidar/auth/IAuthAdapter.java	(revision 0)
+++ trunk/src/java/org/lidar/auth/IAuthAdapter.java	(revision 9)
@@ -0,0 +1,9 @@
+package org.lidar.auth;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+public interface IAuthAdapter {
+    public boolean IsValid(String username, String password);
+}
Index: trunk/src/java/org/lidar/auth/DummyAdapter.java
===================================================================
--- trunk/src/java/org/lidar/auth/DummyAdapter.java	(revision 0)
+++ trunk/src/java/org/lidar/auth/DummyAdapter.java	(revision 9)
@@ -0,0 +1,13 @@
+package org.lidar.auth;
+
+/**
+ * Dummy authentication adapter that always returns true
+ * @author Andrej Cimpersek
+ */
+public class DummyAdapter implements IAuthAdapter {
+
+    public boolean IsValid(String username, String password) {
+        return true;
+    }
+
+}
Index: trunk/src/java/org/lidar/auth/Authentication.java
===================================================================
--- trunk/src/java/org/lidar/auth/Authentication.java	(revision 0)
+++ trunk/src/java/org/lidar/auth/Authentication.java	(revision 9)
@@ -0,0 +1,25 @@
+package org.lidar.auth;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+public class Authentication {
+    private IAuthAdapter adapter;
+
+    public Authentication(){
+        this.adapter = new DummyAdapter();
+    }
+
+    public boolean IsValid(String username, String password){
+        return this.adapter.IsValid(username, password);
+    }
+
+    public void SetAdapter(IAuthAdapter adapter){
+        this.adapter = adapter;
+    }
+
+    public IAuthAdapter GetAdapter(){
+        return this.adapter;
+    }
+}
Index: trunk/src/java/org/lidar/auth/LDAPAdapter.java
===================================================================
--- trunk/src/java/org/lidar/auth/LDAPAdapter.java	(revision 0)
+++ trunk/src/java/org/lidar/auth/LDAPAdapter.java	(revision 9)
@@ -0,0 +1,36 @@
+package org.lidar.auth;
+
+import java.util.Hashtable;
+import javax.naming.Context;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+public class LDAPAdapter implements IAuthAdapter {
+    private String LDAP_HOST = "ldap://localhost:389/o=JNDITutorial";
+    private String LDAP_O = "UPR.SI";
+    private String LDAP_OU = "FAMNIT";
+
+    public LDAPAdapter(/*String host*/){
+        //HOST = provider;
+    }
+
+    public boolean IsValid(String username, String password) {
+        // Set up the environment for creating the initial context
+        Hashtable env = new Hashtable();
+        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, LDAP_HOST);
+
+        // Authenticate as S. User and password "mysecret"
+        env.put(Context.SECURITY_AUTHENTICATION, "simple");
+        env.put(Context.SECURITY_PRINCIPAL, "CN=" + username + ", OU=" + LDAP_OU + ", O=" + LDAP_O);
+        env.put(Context.SECURITY_CREDENTIALS, password);
+
+        try {
+           DirContext ctx = new InitialDirContext(env);
+           return true;
+        } catch (Exception e) {
+           return false;
+        }
+    }
+    
+}
Index: trunk/src/java/org/lidar/auth/DBAdapter.java
===================================================================
--- trunk/src/java/org/lidar/auth/DBAdapter.java	(revision 0)
+++ trunk/src/java/org/lidar/auth/DBAdapter.java	(revision 9)
@@ -0,0 +1,27 @@
+package org.lidar.auth;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+public class DBAdapter implements IAuthAdapter {
+
+    public boolean IsValid(String username, String password) {
+        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
+        Session session = sessionFactory.openSession();
+        Transaction tx = session.beginTransaction();
+
+        
+
+        tx.commit();
+        session.close();
+
+        return true;
+    }
+
+}
Index: trunk/src/java/org/lidar/Position.java
===================================================================
--- trunk/src/java/org/lidar/Position.java	(revision 0)
+++ trunk/src/java/org/lidar/Position.java	(revision 9)
@@ -0,0 +1,10 @@
+package org.lidar;
+
+/**
+ * Motors position
+ * @author Andrej Cimpersek
+ */
+public class Position {
+    public int position0;
+    public int position1;
+}
Index: trunk/src/java/org/lidar/Config.java
===================================================================
--- trunk/src/java/org/lidar/Config.java	(revision 0)
+++ trunk/src/java/org/lidar/Config.java	(revision 9)
@@ -0,0 +1,32 @@
+package org.lidar;
+
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+public class Config {
+    private static XMLConfiguration configuration;
+
+    public static XMLConfiguration getConfiguration(){
+        if(configuration == null){
+            try {
+                configuration = new XMLConfiguration("/etc/lidar/config.xml");
+                configuration.setAutoSave(true);
+                configuration.setReloadingStrategy(new FileChangedReloadingStrategy());
+            } catch (Exception e) {
+            }
+        }
+
+        return configuration;
+    }
+
+    public static void save(){
+        try {
+            configuration.save("/etc/lidar/config.xml");
+        } catch (Exception e) {
+        }
+    }
+}
Index: trunk/src/java/org/lidar/db/Client.java
===================================================================
--- trunk/src/java/org/lidar/db/Client.java	(revision 0)
+++ trunk/src/java/org/lidar/db/Client.java	(revision 9)
@@ -0,0 +1,53 @@
+package org.lidar.db;
+
+import java.io.Serializable;
+import javax.persistence.*;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+@Entity
+@Table(name="client")
+public class Client implements Serializable {
+    private Integer id;
+    private String apiKey;
+    private String token;
+
+    public Client(){
+    }
+
+    public Client(Integer id, String apiKey, String token){
+        this.id = id;
+        this.apiKey = apiKey;
+        this.token = token;
+    }
+
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    public Integer getId() {
+        return this.id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Column(name="apikey")
+    public String getApiKey() {
+        return this.apiKey;
+    }
+
+    public void setApiKey(String apiKey) {
+        this.apiKey = apiKey;
+    }
+
+    public String getToken() {
+        return this.token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+}
Index: trunk/src/java/org/lidar/db/Log.java
===================================================================
--- trunk/src/java/org/lidar/db/Log.java	(revision 0)
+++ trunk/src/java/org/lidar/db/Log.java	(revision 9)
@@ -0,0 +1,63 @@
+package org.lidar.db;
+
+import java.io.Serializable;
+import java.util.Date;
+import javax.persistence.*;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+@Entity
+@Table(name="log")
+public class Log implements Serializable {
+    private Integer id;
+    private Date date;
+    private String type;
+    private String message;
+
+    public Log(){
+    }
+
+    public Log(Integer id, Date date, String type, String message){
+        this.id = id;
+        this.date = date;
+        this.type = type;
+        this.message = message;
+    }
+
+    @Id
+    public Integer getId() {
+        return this.id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    @Temporal(javax.persistence.TemporalType.DATE)
+    @Column(name="access")
+    public Date getDate() {
+        return this.date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getType() {
+        return this.type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getMessage() {
+        return this.message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}
Index: trunk/src/java/org/lidar/db/AuthTokens.java
===================================================================
--- trunk/src/java/org/lidar/db/AuthTokens.java	(revision 0)
+++ trunk/src/java/org/lidar/db/AuthTokens.java	(revision 9)
@@ -0,0 +1,57 @@
+package org.lidar.db;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+public class AuthTokens implements Serializable {
+    private Integer id;
+    private String token;
+    private Date access;
+    private String ip;
+
+    public AuthTokens(){
+    }
+
+    public AuthTokens(Integer id, String token, Date access, String ip){
+        this.id = id;
+        this.token = token;
+        this.access = access;
+        this.ip = ip;
+    }
+
+    public Integer getId() {
+        return this.id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getToken() {
+        return this.token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public Date getAccess() {
+        return this.access;
+    }
+
+    public void setAccess(Date access) {
+        this.access = access;
+    }
+
+    public String getIp() {
+        return this.ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+}
Index: trunk/src/java/org/lidar/LogServlet.java
===================================================================
--- trunk/src/java/org/lidar/LogServlet.java	(revision 0)
+++ trunk/src/java/org/lidar/LogServlet.java	(revision 9)
@@ -0,0 +1,116 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.lidar;
+
+import com.google.gson.Gson;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.lidar.HibernateUtil;
+
+/**
+ *
+ * @author Andrej Cimpersek
+ */
+public class LogServlet extends HttpServlet {
+   
+    /** 
+     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
+    throws ServletException, IOException {
+        response.setContentType("application/json;charset=UTF-8");
+        PrintWriter out = response.getWriter();
+        Gson gson = new Gson();
+        try {
+            int start = 0;
+            int limit = 15;
+            if(request.getParameter("limit") != null){
+                limit = Integer.parseInt(request.getParameter("limit"));
+            }
+            if(request.getParameter("start") != null){
+                start = Integer.parseInt(request.getParameter("start"));
+            }
+
+            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+            Transaction tx = session.beginTransaction();
+
+            // FIX: use COUNT instead
+            int total = session.createQuery("from Log as log").list().size();
+            Query query = session.createQuery("from Log as log order by log.date desc");
+            query.setFirstResult(start);
+            query.setMaxResults(limit);
+            JSONResponse resp = new JSONResponse(true, total, (ArrayList)query.list());
+            out.write(gson.toJson(resp));
+            tx.commit();
+        } catch (Exception e) {
+            response.setContentType("text/plain;charset=UTF-8");
+            out.write(e.getMessage());
+        } finally {
+            out.close();
+        }
+    }
+
+    class JSONResponse {
+        private boolean success = true;
+        private int total;
+        private ArrayList rows;
+
+        public JSONResponse(boolean success, int total, ArrayList rows){
+            this.success = success;
+            this.total = total;
+            this.rows = rows;
+        }
+    }
+
+    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
+    /** 
+     * Handles the HTTP <code>GET</code> method.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    @Override
+    protected void doGet(HttpServletRequest request, HttpServletResponse response)
+    throws ServletException, IOException {
+        processRequest(request, response);
+    } 
+
+    /** 
+     * Handles the HTTP <code>POST</code> method.
+     * @param request servlet request
+     * @param response servlet response
+     * @throws ServletException if a servlet-specific error occurs
+     * @throws IOException if an I/O error occurs
+     */
+    @Override
+    protected void doPost(HttpServletRequest request, HttpServletResponse response)
+    throws ServletException, IOException {
+        processRequest(request, response);
+    }
+
+    /** 
+     * Returns a short description of the servlet.
+     * @return a String containing servlet description
+     */
+    @Override
+    public String getServletInfo() {
+        return "Short description";
+    }// </editor-fold>
+
+}
Index: trunk/src/java/org/lidar/api/Management.java
===================================================================
--- trunk/src/java/org/lidar/api/Management.java	(revision 0)
+++ trunk/src/java/org/lidar/api/Management.java	(revision 9)
@@ -0,0 +1,133 @@
+package org.lidar.api;
+
+import java.util.Date;
+import javax.annotation.Resource;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+import net.sf.jpam.Pam;
+import org.hibernate.Query;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.lidar.HibernateUtil;
+import org.lidar.db.Client;
+
+/**
+ * Management service
+ * @author Andrej Cimpersek
+ */
+@WebService()
+public class Management {
+    private final Object lock = new Object();
+    public static Boolean locked = false;
+    public static String lockToken;
+    public static Date lockAccess;
+
+    @Resource
+    private WebServiceContext wsContext;
+
+    /**
+     * Web service operation
+     */
+    @WebMethod()
+    public String getStatus(){
+        String status = null;
+        
+        if(Management.locked){
+            status = "locked";
+        } else {
+            status = "unlocked";
+        }
+
+        return status;
+    }
+
+    @WebMethod()
+    public String getFood(String type){
+        return type;
+    }
+
+    /**
+     * Client helper
+     * @param where
+     * @return Client
+     */
+    private Client getClient(String where){
+        Client c = null;
+        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+        Transaction tx = null;
+        try {
+            // TODO: check if api_key exists in DB
+            // TODO: generate new auth token and save it to DB
+            tx = session.beginTransaction();
+
+            Query query = session.createQuery(String.format("from Client as client where %s", where));
+            c = (Client)query.list().get(0);
+            tx.commit();
+        } catch (Exception e) {
+            tx.rollback();
+        }
+
+        return c;
+    }
+
+    /**
+     * Get authentication token
+     * @param api_key
+     * @param username
+     * @param password
+     * @return null | authentication token
+     */
+    @WebMethod()
+    public String getAuthenticationToken(String api_key, String username, String password){
+        String token = null;
+        MessageContext mc = wsContext.getMessageContext();
+        Pam pam = new Pam();
+        boolean auth = pam.authenticateSuccessful(username, password);
+
+        if(auth){
+            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+            Transaction tx = null;
+            try {
+                // TODO: check if api_key exists in DB
+                // TODO: generate new auth token and save it to DB
+                Client c = getClient(String.format("apikey = '%s'", api_key));
+
+                if(c != null){
+                    token = c.getToken();
+                }
+            } catch (Exception e) {
+                tx.rollback();
+            }
+        }
+
+        return token;
+    }
+
+    @WebMethod()
+    public String getLockToken(String authToken){
+        synchronized(lock){
+            Client c = getClient(String.format("token = '%s'", authToken));
+            if(Management.locked || c == null) return null;
+
+            Management.locked = true;
+            Management.lockToken = authToken; // TODO: generate token
+            Management.lockAccess = new Date();
+        }
+        
+        return Management.lockToken;
+    }
+
+    @WebMethod
+    public boolean unlock(String lockToken){
+        synchronized(lock){
+            if(!Management.locked || Management.lockToken != lockToken) return false;
+            Management.locked = false;
+            Management.lockToken = null;
+        }
+
+        return true;
+    }
+
+}
Index: trunk/src/java/org/lidar/api/Motion.java
===================================================================
--- trunk/src/java/org/lidar/api/Motion.java	(revision 0)
+++ trunk/src/java/org/lidar/api/Motion.java	(revision 9)
@@ -0,0 +1,270 @@
+package org.lidar.api;
+
+import javax.comm.SerialPort;
+import org.lidar.Position;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import org.lidar.Config;
+import org.lidar.Serial;
+
+/**
+ * Motion API
+ * @author Andrej Cimpersek
+ */
+@WebService()
+public class Motion extends Serial {
+
+    public Motion(){
+        super("motion");
+        openPort();
+    }
+
+    /**
+     * Sets parameters for next motor move
+     * @param steps
+     * @param freq
+     */
+    @WebMethod()
+    public void setMove0(int steps, float freq){
+        
+	}
+
+    /**
+     * Sets parameters for next motor move
+     * @param steps
+     * @param freq
+     */
+    @WebMethod()
+    public void setMove1(int steps, float freq){
+
+	}
+
+    /**
+     * Moves motors according to set moves
+     */
+    @WebMethod()
+    public void run(){
+
+	}
+
+    /**
+     * Sets angular velocity in steps / sec
+     * @param omega0
+     */
+    @WebMethod()
+    public void setInitialAngularVel0(float omega0){
+
+	}
+
+    /**
+     * Sets angular velocity in steps / sec
+     * @param omega0
+     */
+    @WebMethod()
+    public void setInitialAngularVel1(float omega0){
+
+	}
+
+    /**
+     * Sets angular acceleration in steps / sec^2
+     * @param accel
+     */
+    @WebMethod()
+    public void setAngularAcceleration0(float accel){
+
+	}
+
+    /**
+     * Sets angular acceleration in steps / sec^2
+     * @param accel
+     */
+    @WebMethod()
+    public void setAngularAcceleration1(float accel){
+
+	}
+
+    /**
+     *
+     * @param steps
+     */
+    @WebMethod()
+    public void setLackCorrection0(short steps){
+
+	}
+
+    /**
+     *
+     * @param steps
+     */
+    @WebMethod()
+    public void setLackCorrection1(short steps){
+
+	}
+
+    /**
+     * Sets angular deceleration in steps / sec^2
+     * @param decel
+     */
+    @WebMethod()
+    public void setAngularDeceleration0(float decel){
+
+	}
+
+    /**
+     * Sets angular deceleration in steps / sec^2
+     * @param decel
+     */
+    @WebMethod()
+    public void setAngularDeceleration1(float decel){
+
+	}
+
+    /**
+     * Sets position for stepper 0
+     * @param position
+     */
+    @WebMethod()
+    public void setPosition0(int position){
+
+	}
+
+    /**
+     * Sets position for stepper 1
+     * @param position
+     */
+    @WebMethod()
+    public void setPosition1(int position){
+
+	}
+
+    /**
+     * Stops motor 0
+     */
+    @WebMethod()
+    public void stopMotor0(){
+
+	}
+
+    /**
+     * Stops motor 1
+     */
+    @WebMethod()
+    public void stopMotor1(){
+
+	}
+
+    /**
+     * Disables current on motor 0
+     */
+    @WebMethod()
+    public void setMotorOff0(){
+
+	}
+
+    /**
+     * Disables current on motor 1
+     */
+    @WebMethod()
+    public void setMotorOff1(){
+
+	}
+
+    /**
+     * Gets positions of both motors
+     * @return Position
+     */
+    @WebMethod()
+    public Position getPosition(){
+        return new Position();
+	}
+
+    /**
+     * Set continuous key movement
+     */
+    @WebMethod()
+    public void setContinuousKeyMovement(){
+
+	}
+
+    /**
+     * Set single step key movement
+     */
+    @WebMethod()
+    public void setSingleStepKeyMovement(){
+
+	}
+
+    /**
+     * Simulate Left Key Press
+     */
+    @WebMethod()
+    public void simulateLeftKeyPress(){
+
+	}
+
+    /**
+     * Simulate Left Key Release
+     */
+    @WebMethod()
+    public void simulateLeftKeyRelease(){
+
+	}
+
+    /**
+     * Simulate Right Key Press
+     */
+    @WebMethod()
+    public void simulateRightKeyPress(){
+
+	}
+
+    /**
+     * Simulate Right Key Release
+     */
+    @WebMethod()
+    public void simulateRightKeyRelease(){
+
+	}
+
+    /**
+     * Simulate Up Key Press
+     */
+    @WebMethod()
+    public void simulateUpKeyPress(){
+
+	}
+
+    /**
+     * Simulate Up Key Release
+     */
+    @WebMethod()
+    public void simulateUpKeyRelease(){
+
+	}
+
+    /**
+     * Simulate Down Key Press
+     */
+    @WebMethod()
+    public void simulateDownKeyPress(){
+
+	}
+
+    /**
+     * Simulate Down Key Release
+     */
+    @WebMethod()
+    public void simulateDownKeyRelease(){
+
+	}
+
+    /**
+     * Sets automatic position reporting.
+     * 0..turns off automatic position reporting, 50..9999 autoreport interval in milliseconds
+     * @param interval
+     */
+    @WebMethod()
+    public void setAutomaticPositionReporting(short interval){
+
+	}
+}
Index: trunk/src/java/org/lidar/api/Laser.java
===================================================================
--- trunk/src/java/org/lidar/api/Laser.java	(revision 0)
+++ trunk/src/java/org/lidar/api/Laser.java	(revision 9)
@@ -0,0 +1,176 @@
+package org.lidar.api;
+
+import javax.comm.SerialPort;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import org.apache.commons.configuration.XMLConfiguration;
+import org.lidar.Config;
+import org.lidar.Serial;
+
+/**
+ * Laser API
+ * @author Andrej Cimpersek
+ */
+@WebService()
+public class Laser extends Serial {
+    public Laser(){
+        super("laser");
+        openPort();
+    }
+
+    /**
+     * Vkljuci laser, ki zacne delovati v skladu z nastavljenimi parametri.
+     */
+    @WebMethod()
+    public boolean fire(String lockToken){
+        return sendCommand(lockToken, "$FIRE 01\r");
+    }
+
+    /**
+     * Izkljuci laser.
+     */
+    @WebMethod()
+    public boolean stop(String lockToken){
+        return sendCommand(lockToken, "$STOP 00\r");
+	}
+
+    /**
+     * Shrani trenutno konfiguracijo parametrov v interni pomnilnik laserja, ki se bodo nalozili ob naslednjem zagonu napajanja.
+     */
+    @WebMethod()
+    public boolean saveConfig(String lockToken){
+        return sendCommand(lockToken, "$SAVE 01\r");
+	}
+
+    /**
+     * Mnozica vseh nacinov delovanja laserja.
+     */
+    public enum LaserMode { Continuous, Burst, ExternalTrigger};
+
+    /**
+     * Izbere nacin delovanja laserja. Nacini mode so nasteti v mnozici LaserMode.
+     * @param mode Nacin delovanja laserja.
+     */
+    @WebMethod()
+    public boolean setMode(String lockToken, LaserMode mode){
+        switch(mode){
+            case Continuous:
+                return sendCommand(lockToken, "$MODE 01\r");
+            case Burst:
+                return sendCommand(lockToken, "$MODE 02\r");
+            case ExternalTrigger:
+                return sendCommand(lockToken, "$MODE 03\r");
+        }
+
+        return false;
+	}
+
+    /**
+     * Omogoci oz. onemogoci Q-Switch opcijo.
+     * @param enabled Omogoci oz. onemogoci..
+     */
+    @WebMethod()
+    public boolean setQSwitch(String lockToken, boolean enabled){
+        if(enabled){
+            return sendCommand(lockToken, "$QSWITCH 01\r");
+        } else {
+            return sendCommand(lockToken, "$QSWITCH 00\r");
+        }
+	}
+
+    /**
+     * Zaklene oz. odklene tipkovnico na napajalniku laserja.
+     * @param locked Zaklep oz. odklep.
+     */
+    @WebMethod()
+    public boolean setKeypad(String lockToken, boolean enabled){
+        if(enabled){
+            return sendCommand(lockToken, "$KEYPAD 01\r");
+        } else {
+            return sendCommand(lockToken, "$KEYPAD 00\r");
+        }
+	}
+
+    /**
+     * Nastavi stevilo sunkov laserja, pulses, ki se bodo zaporedoma izbvrsili, ce je izbran nacin delovanje LaserMode.Continuous.
+     * Dovoljeno obmocje 0 - 99.
+     * @param pulses Stevilo sunkov laserja.
+     */
+    @WebMethod()
+    public boolean setBurstPulseCount(String lockToken, byte pulses){
+        if(pulses < 0 && pulses > 99){
+            return false;
+        }
+
+        String p = "" + pulses;
+        if (p.length() == 1) p = "0" + p;
+
+        return sendCommand(lockToken, "$BURST " + p + "\r");
+	}
+
+    /**
+     * Zazene Q-Switch na vsakih freq sunkov.
+     * Dovoljeno obmocje je od 1 - 99.
+     * @param freq Frekvenca sunkov.
+     */
+    @WebMethod()
+    public boolean setQSwitchFrequency(String lockToken, byte freq){
+        if(freq < 0 && freq > 99){
+            return false;
+        }
+
+        String f = "" + freq;
+        if (f.length() == 1) f = "0" + f;
+
+        return sendCommand(lockToken, "$QFREQ " + f + "\r");
+	}
+
+    /**
+     * Zakasnitev aktivacije v stevilu sunkov delay.
+     * Dovoljeno obmocje je od 0 - 99.
+     * @param delay Zakasnitev aktivacije.
+     */
+    public boolean setQSwitchDelay(String lockToken, byte delay){
+        if(delay < 0 && delay > 99){
+            return false;
+        }
+
+        String d = "" + delay;
+        if (d.length() == 1) d = "0" + d;
+
+        return sendCommand(lockToken, "$QDLY " + d + "\r");
+	}
+
+    /**
+     * Nastavi energijo laserja, eneryLevel, pri posameznem sunku aktivcaije.
+     * @param energyLevel Energija laserja.
+     */
+    @WebMethod()
+    public boolean setEnergyLevel(String lockToken, byte energyLevel){
+        if(energyLevel < 1 && energyLevel > 20){
+            return false;
+        }
+
+        String e = "" + energyLevel;
+        if (e.length() == 1) e = "0" + e;
+        
+        return sendCommand(lockToken, "$EPFN " + e + "\r");
+	}
+
+    /**
+     * Nastavi frekvenco, s katero naj se prozi lase po aktivaciji. Frekvenca je izrazena v sunkih na sekundo, rate.
+     * Dovoljene vrednosti so 1, 2, 5, 10 in 20.
+     * @param rate Frekvenca s katero se prozi laser.
+     */
+    @WebMethod()
+    public boolean setRepetitionRate(String lockToken, byte rate){
+        if (rate == 1 || rate == 2 || rate == 5 || rate == 10 || rate == 20){
+            String r = "" + rate;
+            if (r.length() == 1) r = "0" + r;
+
+            return sendCommand(lockToken, "$LPRF " + r + "\r");
+        }
+
+        return false;
+	}
+}
Index: trunk/src/java/org/lidar/api/Video.java
===================================================================
--- trunk/src/java/org/lidar/api/Video.java	(revision 0)
+++ trunk/src/java/org/lidar/api/Video.java	(revision 9)
@@ -0,0 +1,26 @@
+package org.lidar.api;
+
+import java.io.File;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import org.lidar.Util;
+
+/**
+ * Video API
+ * @author Andrej Cimpersek
+ */
+@WebService()
+public class Video {
+    /**
+     * Returns image
+     * @return byte[] PNG image
+     */
+    @WebMethod()
+    public byte[] getImage(String lockToken){
+        try {
+            return Util.GetBytesFromFile(new File("capture.png"));
+        } catch (Exception e) {
+            return null;
+        }
+    }
+}
\ No newline at end of file
Index: trunk/src/java/org/lidar/api/Sensor.java
===================================================================
--- trunk/src/java/org/lidar/api/Sensor.java	(revision 0)
+++ trunk/src/java/org/lidar/api/Sensor.java	(revision 9)
@@ -0,0 +1,87 @@
+package org.lidar.api;
+
+import javax.comm.SerialPort;
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import org.lidar.Config;
+import org.lidar.Serial;
+
+/**
+ * Sensor API
+ * @author Andrej Cimpersek
+ */
+@WebService()
+public class Sensor extends Serial {
+
+    public Sensor(){
+        super("sensor");
+        openPort();
+    }
+
+    /**
+     * Kaj natancno naredi ukaz ni znano. Pred zajemom podatkov ga je potrebno izvesti.
+     * TODO: odstranit oz. samodejen klic pred zajemom podatkov.
+     */
+    private void readQuery(){
+
+	}
+
+    /**
+     * Pripravi senzor na zajemanje podatkov. Ob naslednjih prozenjih laserja bodo meritve dostopne preko lastnosti ReceivedMeasurement.
+     * TODO: drugačen dostop do podatkov
+     */
+    @WebMethod()
+    public void runAcqusition(){
+        // TODO: preveri ce je ok
+        readQuery();
+	}
+
+    /**
+     * Ustavi zajemanje podatkov ob prozenju laserja. Z drugimi besadami, ob naslednjih sprozitvah laserja ne bomo dobili podatkov meritev.
+     */
+    @WebMethod()
+    public void stopAcqusition(){
+
+	}
+
+    /**
+     * Podobno kot RunAcqusition, natancnejsi podatki zal niso znani.
+     */
+    @WebMethod()
+    public void forceTrigger(){
+
+	}
+
+    /**
+     * Mnozica doloca vse mozne tipe meritev.
+     */
+    public enum DataType { Data, Background, DataMinusBackground }
+
+    /**
+     * Nastavi tip type meritve.
+     * @param type Tip meritve.
+     */
+    @WebMethod()
+    public void setDataType(DataType type){
+
+	}
+
+    /**
+     * Vrne status senzurja, predstavljen v enem byte-u.
+     * @return byte Status senzorja.
+     */
+    @WebMethod()
+    public byte getStatus(){
+        return (byte)'0';
+	}
+
+    /**
+     * Poslje gain profil gainData v senzor.
+     * @param gainData Gain profil.
+     */
+    @WebMethod()
+    public void sendGain(short[] gainData){
+
+	}
+
+}
Index: trunk/src/java/org/lidar/Util.java
===================================================================
--- trunk/src/java/org/lidar/Util.java	(revision 0)
+++ trunk/src/java/org/lidar/Util.java	(revision 9)
@@ -0,0 +1,57 @@
+package org.lidar;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Util
+ * @author Andrej Cimpersek
+ */
+public class Util {
+    public static byte CalcXOR(byte[] data, int offset, int count)
+    {
+        byte x = data[offset];
+        for (int i = 1; i < count; i++) x ^= data[offset + i];
+        return x;
+    }
+
+    private static byte CalcXOR(String data)
+    {
+        byte x = (byte)(data.charAt(0));
+        for (int i = 1; i < data.length(); i++) x ^= (byte)(data.charAt(i));
+        return x;
+    }
+
+    public static byte[] GetBytesFromFile(File file) throws IOException {
+        InputStream is = new FileInputStream(file);
+
+        // Get the size of the file
+        long length = file.length();
+
+        if (length > Integer.MAX_VALUE) {
+            throw new IOException("File is too large!");
+        }
+
+        // Create the byte array to hold the data
+        byte[] bytes = new byte[(int)length];
+
+        // Read in the bytes
+        int offset = 0;
+        int numRead = 0;
+        while (offset < bytes.length
+               && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
+            offset += numRead;
+        }
+
+        // Ensure all the bytes have been read in
+        if (offset < bytes.length) {
+            throw new IOException("Could not completely read file "+file.getName());
+        }
+
+        // Close the input stream and return bytes
+        is.close();
+        return bytes;
+    }
+}
Index: trunk/src/conf/MANIFEST.MF
===================================================================
--- trunk/src/conf/MANIFEST.MF	(revision 0)
+++ trunk/src/conf/MANIFEST.MF	(revision 9)
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
